changeset 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
files .hg_archival.txt .hgignore README.TXT core/comp_SimGraphMulti.mat core/comp_SimGraphMulti_SimData10x05.mat core/comp_SimGraphMulti_SimDataDump.mat core/comp_SimGraphStob_ac1.mat core/comp_basicsm.mat core/comp_partBinData_ISMIR12_01.mat core/comp_partBinData_ISMIR12_02.mat core/comp_partBinData_unclustered_ISMIR12_01.mat core/comp_pca40.mat core/comp_raw.mat core/comparisons_final.csv core/figures/casimir sim data structure 03042013.pdf core/figures/magna_genrebar.fig core/figures/magna_genregraph.fig core/figures/magna_genrepie.fig core/figures/stober_nocycle_error.fig core/magnatagatune/AnnotDB.m core/magnatagatune/AudioFeatureRAW.m core/magnatagatune/Clip.m core/magnatagatune/ClipComparedGraph.m core/magnatagatune/ClipPairGraph.m core/magnatagatune/ClipSimGraph.m core/magnatagatune/ClipSimGraphMD.m core/magnatagatune/ClipSimGraphMulti.m core/magnatagatune/DistMeasureMahal.m core/magnatagatune/DistMeasureNNet.m core/magnatagatune/LFMTagsDB.m core/magnatagatune/MTTAudioFeature.m core/magnatagatune/MTTAudioFeatureBasicSm.m core/magnatagatune/MTTAudioFeatureDBgen.m core/magnatagatune/MTTAudioFeatureHMM.m core/magnatagatune/MTTAudioFeatureRAW.m core/magnatagatune/MTTAudioFeatureSlaney08.m core/magnatagatune/MTTClip.m core/magnatagatune/MTTClipDB.m core/magnatagatune/MTTMixedFeatureGenreBasicSm.m core/magnatagatune/MTTMixedFeatureGenreBasicSmPCA.m core/magnatagatune/MTTMixedFeatureGenreRandom.m core/magnatagatune/MTTMixedFeatureSlaney08GenreBasicSm.m core/magnatagatune/MTTMixedFeatureSlaney08GenreBasicSmPCA.m core/magnatagatune/MTTMixedFeatureSlaney08GenreBasicSmRBM.m core/magnatagatune/MTTMixedFeatureSon.m core/magnatagatune/MTTMixedFeatureSonRBM.m core/magnatagatune/MTTMixedFeatureStober11.m core/magnatagatune/MTTMixedFeatureStober11Genre.m core/magnatagatune/MTTMixedFeatureStober11GenrePCA.m core/magnatagatune/MTTMixedFeatureStober11Slaney08GenreBasicSm.m core/magnatagatune/MTTRandomFeature.m core/magnatagatune/MTTTagFeatureGenreBasic.m core/magnatagatune/album_artist_magnatunedb_correspondence.mat core/magnatagatune/annotations_final.mat core/magnatagatune/clip_info_final.mat core/magnatagatune/compared_cyclefinder_stober.mat core/magnatagatune/comparisons_final.mat core/magnatagatune/db.mat core/magnatagatune/features_stober.mat core/magnatagatune/fm_corresponding_albums.m core/magnatagatune/fm_corresponding_artists.m core/magnatagatune/fm_network.py core/magnatagatune/fm_retrieve_album.m core/magnatagatune/fm_retrieve_album.py core/magnatagatune/fm_retrieve_artist.m core/magnatagatune/fm_retrieve_artist.py core/magnatagatune/fm_retrieve_artist_similarity.m core/magnatagatune/fm_retrieve_artist_similarity.py core/magnatagatune/fm_retrieve_artist_tags.m core/magnatagatune/fm_retrieve_artist_tags.py core/magnatagatune/genre_stats.m core/magnatagatune/get_comparison_stats.m core/magnatagatune/get_magnagenre_numeric.m core/magnatagatune/get_similar_clips.m core/magnatagatune/last.fm.mat core/magnatagatune/macro_sim_graph_analysis.m core/magnatagatune/macro_validate_cycle_finder.m core/magnatagatune/macro_validate_stober_randomsets.m core/magnatagatune/magnagenres_final.mat core/magnatagatune/magnatune_song_info.mat core/magnatagatune/makro_ISMIR12_simdata.m core/magnatagatune/makro_camir_upgrade_paper_simdata.m core/magnatagatune/makro_cupaper12_get_significance.m core/magnatagatune/makro_export_db_mtttags.m core/magnatagatune/makro_growingk_simdata.m core/magnatagatune/makro_import_magnatagatune.m core/magnatagatune/makro_import_magnatagatune_isrc.m core/magnatagatune/makro_import_magnatagatune_mbid_cleanupisrc.m core/magnatagatune/makro_import_magnatagatune_mbtags.m core/magnatagatune/makro_insert_mtt_allmusic_genres.m core/magnatagatune/makro_merge_last.fm_data.m core/magnatagatune/makro_prepare_comparison.m core/magnatagatune/mb_retrieve_artist_id_from_album_info.m core/magnatagatune/mb_retrieve_artist_id_from_isrc.m core/magnatagatune/mb_retrieve_tags_for_artist_id.m core/magnatagatune/mbid_from_artist_album.py core/magnatagatune/metric_fulfills_comparison.m core/magnatagatune/metric_fulfills_ranking.m core/magnatagatune/mlr_unittest.m core/magnatagatune/play_comparison.m core/magnatagatune/ranking_from_comparison_ClipSimGraphMulti.m core/magnatagatune/ranking_from_comparison_Stober_all_constraints.m core/magnatagatune/ranking_from_comparison_Stober_diffs.m core/magnatagatune/ranking_from_comparison_trivial.m core/magnatagatune/sim_from_comparison_UNfair_components.m core/magnatagatune/sim_from_comparison_attach_weights.m core/magnatagatune/sim_from_comparison_fair_components.m core/magnatagatune/sim_from_comparison_naive.m core/magnatagatune/tag_stats.m core/magnatagatune/tests_evals/do_test_rounds.m core/magnatagatune/tests_evals/euclidean_wrapper.m core/magnatagatune/tests_evals/get_data_compact.m core/magnatagatune/tests_evals/mahalmat_wrapper.m core/magnatagatune/tests_evals/random_diag_wrapper.m core/magnatagatune/tests_evals/rbm_subspace/Exp_SVMLight.m core/magnatagatune/tests_evals/rbm_subspace/Exp_grad.m core/magnatagatune/tests_evals/rbm_subspace/Exp_normalise_deltas.m core/magnatagatune/tests_evals/rbm_subspace/Exp_template.m core/magnatagatune/tests_evals/rbm_subspace/conv_euclidean_dist.m core/magnatagatune/tests_evals/rbm_subspace/conv_subspace_delta.m core/magnatagatune/tests_evals/rbm_subspace/exp_grad.mat core/magnatagatune/tests_evals/rbm_subspace/gradient_ascent.m core/magnatagatune/tests_evals/rbm_subspace/logging.m core/magnatagatune/tests_evals/rbm_subspace/logistic.m core/magnatagatune/tests_evals/rbm_subspace/rel_music_raw_features+simdata_ISMIR12.mat core/magnatagatune/tests_evals/rbm_subspace/rel_music_raw_features.mat core/magnatagatune/tests_evals/rbm_subspace/resume_from_grid.m core/magnatagatune/tests_evals/rbm_subspace/simple_dist.m core/magnatagatune/tests_evals/rbm_subspace/subspace_distances.m core/magnatagatune/tests_evals/rbm_subspace/training_rbm_.m core/magnatagatune/tests_evals/rbm_subspace/write_mat_results_ISMIR13RBM.m core/magnatagatune/tests_evals/rbm_subspace/write_mat_results_ISMIR13RBM_singletraining.m core/magnatagatune/tests_evals/rbm_subspace/write_mat_results_ISMIR13RBM_windows.m core/magnatagatune/tests_evals/svm_light/svmlight_wrapper.m core/magnatagatune/tests_evals/test_generic_display_param_influence.m core/magnatagatune/tests_evals/test_generic_display_results.m core/magnatagatune/tests_evals/test_generic_display_results_absviolated.m core/magnatagatune/tests_evals/test_generic_features_parameters_crossval.m core/magnatagatune/xml_parse_mtt.m core/magnatagatune/xml_write_tags.m core/startup_music_research.m core/tools/CQueue.m core/tools/CStack.m core/tools/DiGraph.m core/tools/Graph.m core/tools/NaiveHash.m core/tools/addTopXAxis.m core/tools/camircommit.m core/tools/camirversion.m core/tools/cell2csv.m core/tools/cell2str.m core/tools/centeraxes.m core/tools/centeraxes_test.m core/tools/cprint.m core/tools/csv2cell.m core/tools/hash.m core/tools/implode.m core/tools/kldiv.m core/tools/machine_learning/cut_Y.m core/tools/machine_learning/cvpartition_alltrain.m core/tools/machine_learning/cvpartition_trunctrain.m core/tools/machine_learning/cvpartition_trunctrain_incsubsets.m core/tools/machine_learning/display_mahalanobis_metric.m core/tools/machine_learning/get_fo_deltas.m core/tools/machine_learning/get_itml_deltas.m core/tools/machine_learning/get_svmlight_inequalities_from_ranking.m core/tools/machine_learning/mlr_repeat_YX_by_rating.m core/tools/machine_learning/save_svmlight_inequalities.m core/tools/machine_learning/scale_ratings.m core/tools/machine_learning/sim_get_traintest_clip_overlap.m core/tools/machine_learning/svmlight2weight.m core/tools/machine_learning/svmlight2weight.py core/tools/machine_learning/weighted_kmeans.m core/tools/matrix2latex.m core/tools/migrate_to_test_dir.m core/tools/param_combinations.m core/tools/print_error.m core/tools/python.m core/tools/reset_now.m core/tools/sappend.m core/tools/sqlescape.m core/tools/strcell2matrix.m core/tools/strcellfind.m core/tools/substrcellfind.m core/tools/test_generic_significance_signrank.m core/tools/uimage.m core/tools/uimagesc.m core/tools/uplot.m core/tools/write_mat_results_ismir12.m core/tools/xml2struct.m editme_startup.m license.txt reproduce_AES53rd/rerun_figure2.m reproduce_AES53rd/rerun_figure2/rbm_50.mat reproduce_AES53rd/rerun_figure3.m reproduce_AES53rd/rerun_figure3/new_rbm.m reproduce_AES53rd/rerun_figure3/rbm_fig3.m reproduce_AES53rd/rerun_figure3/rbm_h100.mat reproduce_AES53rd/rerun_figure3/rbm_h1000.mat reproduce_AES53rd/rerun_figure3/rbm_h30.mat reproduce_AES53rd/rerun_figure3/rbm_h50.mat reproduce_AES53rd/rerun_figure3/rbm_h500.mat reproduce_AES53rd/rerun_figure4.m reproduce_AES53rd/rerun_figure_4/f1bed60c9cfd463391c392be29df3aa40.fcd3e694f837cc092ac6e86432bdaac7.mat reproduce_AES53rd/rerun_figure_4/f1bed60c9cfd463391c392be29df3aa40.fcd3e694f837cc092ac6e86432bdaac7.xml reproduce_AES53rd/rerun_figure_4/f30f27fa409951e4a6338c6b8e033f315.fcd3e694f837cc092ac6e86432bdaac7.mat reproduce_AES53rd/rerun_figure_4/f30f27fa409951e4a6338c6b8e033f315.fcd3e694f837cc092ac6e86432bdaac7.xml reproduce_AES53rd/rerun_figure_4/f4146a16625be1f961cd1f47add7d2a0a.fcd3e694f837cc092ac6e86432bdaac7.mat reproduce_AES53rd/rerun_figure_4/f4146a16625be1f961cd1f47add7d2a0a.fcd3e694f837cc092ac6e86432bdaac7.xml reproduce_AES53rd/rerun_figure_4/f41a184d2b727e46307dc49dc7d60286d.fcd3e694f837cc092ac6e86432bdaac7.mat reproduce_AES53rd/rerun_figure_4/f41a184d2b727e46307dc49dc7d60286d.fcd3e694f837cc092ac6e86432bdaac7.xml reproduce_AES53rd/rerun_figure_4/f46b983e00a37d5109fb1148f4e915dde.fcd3e694f837cc092ac6e86432bdaac7.mat reproduce_AES53rd/rerun_figure_4/f46b983e00a37d5109fb1148f4e915dde.fcd3e694f837cc092ac6e86432bdaac7.xml reproduce_AES53rd/rerun_figure_4/f51c27ac475045cb4ff410deca9d0ccb4.fcd3e694f837cc092ac6e86432bdaac7.mat reproduce_AES53rd/rerun_figure_4/f51c27ac475045cb4ff410deca9d0ccb4.fcd3e694f837cc092ac6e86432bdaac7.xml reproduce_AES53rd/rerun_figure_4/f549ec90427cf6dcc6f9f12c9c3853912.fcd3e694f837cc092ac6e86432bdaac7.mat reproduce_AES53rd/rerun_figure_4/f549ec90427cf6dcc6f9f12c9c3853912.fcd3e694f837cc092ac6e86432bdaac7.xml reproduce_AES53rd/rerun_figure_4/f7a4e67d3dce99eed94c26ad193351927.fcd3e694f837cc092ac6e86432bdaac7.mat reproduce_AES53rd/rerun_figure_4/f7a4e67d3dce99eed94c26ad193351927.fcd3e694f837cc092ac6e86432bdaac7.xml reproduce_AES53rd/rerun_figure_4/fc1fb454d81b345c55adf4d3c068f2901.fcd3e694f837cc092ac6e86432bdaac7.mat reproduce_AES53rd/rerun_figure_4/fc1fb454d81b345c55adf4d3c068f2901.fcd3e694f837cc092ac6e86432bdaac7.xml reproduce_AES53rd/rerun_figure_4/ff1a207e56413639c2328fe4ff9076260.fcd3e694f837cc092ac6e86432bdaac7.mat reproduce_AES53rd/rerun_figure_4/ff1a207e56413639c2328fe4ff9076260.fcd3e694f837cc092ac6e86432bdaac7.xml reproduce_AES53rd/rerun_gradient_table3/gradient_table3.m reproduce_AES53rd/rerun_gradient_table3/res_16.mat reproduce_AES53rd/rerun_gradient_table3/res_48.mat reproduce_AES53rd/rerun_svm_table3/svm_table3.m reproduce_AES53rd/rerun_table3.m toolboxes/FullBNT-1.0.7/ChangeLog.Sourceforge.txt toolboxes/FullBNT-1.0.7/ChangeLog.txt toolboxes/FullBNT-1.0.7/GraphViz/CVS/Entries toolboxes/FullBNT-1.0.7/GraphViz/CVS/Entries.Log toolboxes/FullBNT-1.0.7/GraphViz/CVS/Repository toolboxes/FullBNT-1.0.7/GraphViz/CVS/Root toolboxes/FullBNT-1.0.7/GraphViz/Old/CVS/Entries toolboxes/FullBNT-1.0.7/GraphViz/Old/CVS/Repository toolboxes/FullBNT-1.0.7/GraphViz/Old/CVS/Root toolboxes/FullBNT-1.0.7/GraphViz/Old/dot_to_graph.m toolboxes/FullBNT-1.0.7/GraphViz/Old/draw_dot.m toolboxes/FullBNT-1.0.7/GraphViz/Old/draw_graph.m toolboxes/FullBNT-1.0.7/GraphViz/Old/graphToDot.m toolboxes/FullBNT-1.0.7/GraphViz/Old/pre_pesha_graph_to_dot.m toolboxes/FullBNT-1.0.7/GraphViz/README.txt toolboxes/FullBNT-1.0.7/GraphViz/approxeq.m toolboxes/FullBNT-1.0.7/GraphViz/arrow.m toolboxes/FullBNT-1.0.7/GraphViz/dot_to_graph.m toolboxes/FullBNT-1.0.7/GraphViz/draw_dbn.m toolboxes/FullBNT-1.0.7/GraphViz/draw_dbn_test.m toolboxes/FullBNT-1.0.7/GraphViz/draw_dot.m toolboxes/FullBNT-1.0.7/GraphViz/draw_graph.m toolboxes/FullBNT-1.0.7/GraphViz/draw_graph_test.m toolboxes/FullBNT-1.0.7/GraphViz/draw_hmm.m toolboxes/FullBNT-1.0.7/GraphViz/editGraphGUI.m toolboxes/FullBNT-1.0.7/GraphViz/graph_to_dot.m toolboxes/FullBNT-1.0.7/GraphViz/make_layout.m toolboxes/FullBNT-1.0.7/GraphViz/my_call.m toolboxes/FullBNT-1.0.7/GraphViz/process_options.m toolboxes/FullBNT-1.0.7/HMM/CVS/Entries toolboxes/FullBNT-1.0.7/HMM/CVS/Repository toolboxes/FullBNT-1.0.7/HMM/CVS/Root toolboxes/FullBNT-1.0.7/HMM/README.txt toolboxes/FullBNT-1.0.7/HMM/dhmm_em.m toolboxes/FullBNT-1.0.7/HMM/dhmm_em_demo.m toolboxes/FullBNT-1.0.7/HMM/dhmm_em_online.m toolboxes/FullBNT-1.0.7/HMM/dhmm_em_online_demo.m toolboxes/FullBNT-1.0.7/HMM/dhmm_logprob.m toolboxes/FullBNT-1.0.7/HMM/dhmm_logprob_brute_force.m toolboxes/FullBNT-1.0.7/HMM/dhmm_logprob_path.m toolboxes/FullBNT-1.0.7/HMM/dhmm_sample.m toolboxes/FullBNT-1.0.7/HMM/dhmm_sample_endstate.m toolboxes/FullBNT-1.0.7/HMM/fixed_lag_smoother.m toolboxes/FullBNT-1.0.7/HMM/fixed_lag_smoother_demo.m toolboxes/FullBNT-1.0.7/HMM/fwdback.m toolboxes/FullBNT-1.0.7/HMM/gausshmm_train_observed.m toolboxes/FullBNT-1.0.7/HMM/mc_sample.m toolboxes/FullBNT-1.0.7/HMM/mc_sample_endstate.m toolboxes/FullBNT-1.0.7/HMM/mdp_sample.m toolboxes/FullBNT-1.0.7/HMM/mhmmParzen_train_observed.m toolboxes/FullBNT-1.0.7/HMM/mhmm_em.m toolboxes/FullBNT-1.0.7/HMM/mhmm_em_demo.m toolboxes/FullBNT-1.0.7/HMM/mhmm_logprob.m toolboxes/FullBNT-1.0.7/HMM/mhmm_sample.m toolboxes/FullBNT-1.0.7/HMM/mk_leftright_transmat.m toolboxes/FullBNT-1.0.7/HMM/mk_rightleft_transmat.m toolboxes/FullBNT-1.0.7/HMM/pomdp_sample.m toolboxes/FullBNT-1.0.7/HMM/testHMM.m toolboxes/FullBNT-1.0.7/HMM/transmat_train_observed.m toolboxes/FullBNT-1.0.7/HMM/viterbi_path.m toolboxes/FullBNT-1.0.7/KPMstats/CVS/Entries toolboxes/FullBNT-1.0.7/KPMstats/CVS/Repository toolboxes/FullBNT-1.0.7/KPMstats/CVS/Root toolboxes/FullBNT-1.0.7/KPMstats/KLgauss.m toolboxes/FullBNT-1.0.7/KPMstats/README.txt toolboxes/FullBNT-1.0.7/KPMstats/beta_sample.m toolboxes/FullBNT-1.0.7/KPMstats/chisquared_histo.m toolboxes/FullBNT-1.0.7/KPMstats/chisquared_prob.m toolboxes/FullBNT-1.0.7/KPMstats/chisquared_readme.txt toolboxes/FullBNT-1.0.7/KPMstats/chisquared_table.m toolboxes/FullBNT-1.0.7/KPMstats/clg_Mstep.m toolboxes/FullBNT-1.0.7/KPMstats/clg_Mstep_simple.m toolboxes/FullBNT-1.0.7/KPMstats/clg_prob.m toolboxes/FullBNT-1.0.7/KPMstats/condGaussToJoint.m toolboxes/FullBNT-1.0.7/KPMstats/cond_indep_fisher_z.m toolboxes/FullBNT-1.0.7/KPMstats/condgaussTrainObserved.m toolboxes/FullBNT-1.0.7/KPMstats/condgauss_sample.m toolboxes/FullBNT-1.0.7/KPMstats/convertBinaryLabels.m toolboxes/FullBNT-1.0.7/KPMstats/cwr_demo.m toolboxes/FullBNT-1.0.7/KPMstats/cwr_em.m toolboxes/FullBNT-1.0.7/KPMstats/cwr_predict.m toolboxes/FullBNT-1.0.7/KPMstats/cwr_prob.m toolboxes/FullBNT-1.0.7/KPMstats/cwr_readme.txt toolboxes/FullBNT-1.0.7/KPMstats/cwr_test.m toolboxes/FullBNT-1.0.7/KPMstats/dirichlet_sample.m toolboxes/FullBNT-1.0.7/KPMstats/dirichletpdf.m toolboxes/FullBNT-1.0.7/KPMstats/dirichletrnd.m toolboxes/FullBNT-1.0.7/KPMstats/distchck.m toolboxes/FullBNT-1.0.7/KPMstats/eigdec.m toolboxes/FullBNT-1.0.7/KPMstats/est_transmat.m toolboxes/FullBNT-1.0.7/KPMstats/fit_paritioned_model_testfn.m toolboxes/FullBNT-1.0.7/KPMstats/fit_partitioned_model.m toolboxes/FullBNT-1.0.7/KPMstats/gamma_sample.m toolboxes/FullBNT-1.0.7/KPMstats/gaussian_prob.m toolboxes/FullBNT-1.0.7/KPMstats/gaussian_sample.m toolboxes/FullBNT-1.0.7/KPMstats/histCmpChi2.m toolboxes/FullBNT-1.0.7/KPMstats/linear_regression.m toolboxes/FullBNT-1.0.7/KPMstats/logist2.m toolboxes/FullBNT-1.0.7/KPMstats/logist2Apply.m toolboxes/FullBNT-1.0.7/KPMstats/logist2ApplyRegularized.m toolboxes/FullBNT-1.0.7/KPMstats/logist2Fit.m toolboxes/FullBNT-1.0.7/KPMstats/logist2FitRegularized.m toolboxes/FullBNT-1.0.7/KPMstats/logistK.m toolboxes/FullBNT-1.0.7/KPMstats/logistK_eval.m toolboxes/FullBNT-1.0.7/KPMstats/marginalize_gaussian.m toolboxes/FullBNT-1.0.7/KPMstats/matrix_T_pdf.m toolboxes/FullBNT-1.0.7/KPMstats/matrix_normal_pdf.m toolboxes/FullBNT-1.0.7/KPMstats/mc_stat_distrib.m toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_Mstep.m toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_classifier_apply.m toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_classifier_train.m toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_em.m toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_init.m toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_prob.m toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_prob_test.m toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_sample.m toolboxes/FullBNT-1.0.7/KPMstats/mkPolyFvec.m toolboxes/FullBNT-1.0.7/KPMstats/mk_unit_norm.m toolboxes/FullBNT-1.0.7/KPMstats/multinomial_prob.m toolboxes/FullBNT-1.0.7/KPMstats/multinomial_sample.m toolboxes/FullBNT-1.0.7/KPMstats/multipdf.m toolboxes/FullBNT-1.0.7/KPMstats/multirnd.m toolboxes/FullBNT-1.0.7/KPMstats/normal_coef.m toolboxes/FullBNT-1.0.7/KPMstats/partial_corr_coef.m toolboxes/FullBNT-1.0.7/KPMstats/parzen.m toolboxes/FullBNT-1.0.7/KPMstats/parzenC.c toolboxes/FullBNT-1.0.7/KPMstats/parzenC.dll toolboxes/FullBNT-1.0.7/KPMstats/parzenC_test.m toolboxes/FullBNT-1.0.7/KPMstats/parzen_fit_select_unif.m toolboxes/FullBNT-1.0.7/KPMstats/pca.m toolboxes/FullBNT-1.0.7/KPMstats/rndcheck.m toolboxes/FullBNT-1.0.7/KPMstats/sample.m toolboxes/FullBNT-1.0.7/KPMstats/sample_discrete.m toolboxes/FullBNT-1.0.7/KPMstats/sample_gaussian.m toolboxes/FullBNT-1.0.7/KPMstats/standardize.m toolboxes/FullBNT-1.0.7/KPMstats/student_t_logprob.m toolboxes/FullBNT-1.0.7/KPMstats/student_t_prob.m toolboxes/FullBNT-1.0.7/KPMstats/test_dir.m toolboxes/FullBNT-1.0.7/KPMstats/unidrndKPM.m toolboxes/FullBNT-1.0.7/KPMstats/unif_discrete_sample.m toolboxes/FullBNT-1.0.7/KPMstats/weightedRegression.m toolboxes/FullBNT-1.0.7/KPMtools/CVS/Entries toolboxes/FullBNT-1.0.7/KPMtools/CVS/Repository toolboxes/FullBNT-1.0.7/KPMtools/CVS/Root toolboxes/FullBNT-1.0.7/KPMtools/README.txt toolboxes/FullBNT-1.0.7/KPMtools/approx_unique.m toolboxes/FullBNT-1.0.7/KPMtools/approxeq.m toolboxes/FullBNT-1.0.7/KPMtools/argmax.m toolboxes/FullBNT-1.0.7/KPMtools/argmin.m toolboxes/FullBNT-1.0.7/KPMtools/asdemo.html toolboxes/FullBNT-1.0.7/KPMtools/asdemo.m toolboxes/FullBNT-1.0.7/KPMtools/asort.m toolboxes/FullBNT-1.0.7/KPMtools/assert.m toolboxes/FullBNT-1.0.7/KPMtools/assertBNT.m toolboxes/FullBNT-1.0.7/KPMtools/assignEdgeNums.m toolboxes/FullBNT-1.0.7/KPMtools/assign_cols.m toolboxes/FullBNT-1.0.7/KPMtools/axis_pct.m toolboxes/FullBNT-1.0.7/KPMtools/bipartiteMatchingDemo.m toolboxes/FullBNT-1.0.7/KPMtools/bipartiteMatchingDemoPlot.m toolboxes/FullBNT-1.0.7/KPMtools/bipartiteMatchingHungarian.m toolboxes/FullBNT-1.0.7/KPMtools/bipartiteMatchingIntProg.m toolboxes/FullBNT-1.0.7/KPMtools/block.m toolboxes/FullBNT-1.0.7/KPMtools/cell2matPad.m toolboxes/FullBNT-1.0.7/KPMtools/cell2num.m toolboxes/FullBNT-1.0.7/KPMtools/centeringMatrix.m toolboxes/FullBNT-1.0.7/KPMtools/checkpsd.m toolboxes/FullBNT-1.0.7/KPMtools/chi2inv.m toolboxes/FullBNT-1.0.7/KPMtools/choose.m toolboxes/FullBNT-1.0.7/KPMtools/collapse_mog.m toolboxes/FullBNT-1.0.7/KPMtools/colmult.c toolboxes/FullBNT-1.0.7/KPMtools/computeROC.m toolboxes/FullBNT-1.0.7/KPMtools/compute_counts.m toolboxes/FullBNT-1.0.7/KPMtools/conf2mahal.m toolboxes/FullBNT-1.0.7/KPMtools/cross_entropy.m toolboxes/FullBNT-1.0.7/KPMtools/dirKPM.m toolboxes/FullBNT-1.0.7/KPMtools/div.m toolboxes/FullBNT-1.0.7/KPMtools/draw_circle.m toolboxes/FullBNT-1.0.7/KPMtools/draw_ellipse.m toolboxes/FullBNT-1.0.7/KPMtools/draw_ellipse_axes.m toolboxes/FullBNT-1.0.7/KPMtools/em_converged.m toolboxes/FullBNT-1.0.7/KPMtools/entropy.m toolboxes/FullBNT-1.0.7/KPMtools/exportfig.m toolboxes/FullBNT-1.0.7/KPMtools/extend_domain_table.m toolboxes/FullBNT-1.0.7/KPMtools/factorial.m toolboxes/FullBNT-1.0.7/KPMtools/filepartsLast.m toolboxes/FullBNT-1.0.7/KPMtools/find_equiv_posns.m toolboxes/FullBNT-1.0.7/KPMtools/fullfileKPM.m toolboxes/FullBNT-1.0.7/KPMtools/genpathKPM.m toolboxes/FullBNT-1.0.7/KPMtools/hash_add.m toolboxes/FullBNT-1.0.7/KPMtools/hash_del.m toolboxes/FullBNT-1.0.7/KPMtools/hash_lookup.m toolboxes/FullBNT-1.0.7/KPMtools/hsvKPM.m toolboxes/FullBNT-1.0.7/KPMtools/hungarian.m toolboxes/FullBNT-1.0.7/KPMtools/image_rgb.m toolboxes/FullBNT-1.0.7/KPMtools/imresizeAspect.m toolboxes/FullBNT-1.0.7/KPMtools/ind2subv.m toolboxes/FullBNT-1.0.7/KPMtools/ind2subvKPM.c toolboxes/FullBNT-1.0.7/KPMtools/ind2subvKPM.m toolboxes/FullBNT-1.0.7/KPMtools/ind2subvMinka.m toolboxes/FullBNT-1.0.7/KPMtools/ind2subvTest.m toolboxes/FullBNT-1.0.7/KPMtools/initFigures.m toolboxes/FullBNT-1.0.7/KPMtools/installC_KPMtools.m toolboxes/FullBNT-1.0.7/KPMtools/is_psd.m toolboxes/FullBNT-1.0.7/KPMtools/is_stochastic.m toolboxes/FullBNT-1.0.7/KPMtools/isemptycell.m toolboxes/FullBNT-1.0.7/KPMtools/isequalKPM.m toolboxes/FullBNT-1.0.7/KPMtools/isposdef.m toolboxes/FullBNT-1.0.7/KPMtools/isscalarBNT.m toolboxes/FullBNT-1.0.7/KPMtools/isvectorBNT.m toolboxes/FullBNT-1.0.7/KPMtools/junk.c toolboxes/FullBNT-1.0.7/KPMtools/loadcell.m toolboxes/FullBNT-1.0.7/KPMtools/logb.m toolboxes/FullBNT-1.0.7/KPMtools/logdet.m toolboxes/FullBNT-1.0.7/KPMtools/logsum.m toolboxes/FullBNT-1.0.7/KPMtools/logsum_simple.m toolboxes/FullBNT-1.0.7/KPMtools/logsum_test.m toolboxes/FullBNT-1.0.7/KPMtools/logsumexp.m toolboxes/FullBNT-1.0.7/KPMtools/logsumexpv.m toolboxes/FullBNT-1.0.7/KPMtools/mahal2conf.m toolboxes/FullBNT-1.0.7/KPMtools/marg_table.m toolboxes/FullBNT-1.0.7/KPMtools/marginalize_table.m toolboxes/FullBNT-1.0.7/KPMtools/matprint.m toolboxes/FullBNT-1.0.7/KPMtools/max_mult.c toolboxes/FullBNT-1.0.7/KPMtools/max_mult.m toolboxes/FullBNT-1.0.7/KPMtools/mexutil.c toolboxes/FullBNT-1.0.7/KPMtools/mexutil.h toolboxes/FullBNT-1.0.7/KPMtools/mk_multi_index.m toolboxes/FullBNT-1.0.7/KPMtools/mk_stochastic.m toolboxes/FullBNT-1.0.7/KPMtools/mkdirKPM.m toolboxes/FullBNT-1.0.7/KPMtools/montageKPM.m toolboxes/FullBNT-1.0.7/KPMtools/montageKPM2.m toolboxes/FullBNT-1.0.7/KPMtools/montageKPM3.m toolboxes/FullBNT-1.0.7/KPMtools/mult_by_table.m toolboxes/FullBNT-1.0.7/KPMtools/myintersect.m toolboxes/FullBNT-1.0.7/KPMtools/myismember.m toolboxes/FullBNT-1.0.7/KPMtools/myones.m toolboxes/FullBNT-1.0.7/KPMtools/myplot.m toolboxes/FullBNT-1.0.7/KPMtools/myrand.m toolboxes/FullBNT-1.0.7/KPMtools/myrepmat.m toolboxes/FullBNT-1.0.7/KPMtools/myreshape.m toolboxes/FullBNT-1.0.7/KPMtools/mysetdiff.m toolboxes/FullBNT-1.0.7/KPMtools/mysize.m toolboxes/FullBNT-1.0.7/KPMtools/mysubset.m toolboxes/FullBNT-1.0.7/KPMtools/mysymsetdiff.m toolboxes/FullBNT-1.0.7/KPMtools/myunion.m toolboxes/FullBNT-1.0.7/KPMtools/nchoose2.m toolboxes/FullBNT-1.0.7/KPMtools/ncols.m toolboxes/FullBNT-1.0.7/KPMtools/nonmaxsup.m toolboxes/FullBNT-1.0.7/KPMtools/normalise.m toolboxes/FullBNT-1.0.7/KPMtools/normaliseC.c toolboxes/FullBNT-1.0.7/KPMtools/normaliseC.dll toolboxes/FullBNT-1.0.7/KPMtools/normalize.m toolboxes/FullBNT-1.0.7/KPMtools/nrows.m toolboxes/FullBNT-1.0.7/KPMtools/num2strcell.m toolboxes/FullBNT-1.0.7/KPMtools/optimalMatching.m toolboxes/FullBNT-1.0.7/KPMtools/optimalMatchingTest.m toolboxes/FullBNT-1.0.7/KPMtools/partitionData.m toolboxes/FullBNT-1.0.7/KPMtools/partition_matrix_vec.m toolboxes/FullBNT-1.0.7/KPMtools/pca_kpm.m toolboxes/FullBNT-1.0.7/KPMtools/pca_netlab.m toolboxes/FullBNT-1.0.7/KPMtools/pick.m toolboxes/FullBNT-1.0.7/KPMtools/plotBox.m toolboxes/FullBNT-1.0.7/KPMtools/plotColors.m toolboxes/FullBNT-1.0.7/KPMtools/plotROC.m toolboxes/FullBNT-1.0.7/KPMtools/plotROCkpm.m toolboxes/FullBNT-1.0.7/KPMtools/plot_axis_thru_origin.m toolboxes/FullBNT-1.0.7/KPMtools/plot_ellipse.m toolboxes/FullBNT-1.0.7/KPMtools/plot_matrix.m toolboxes/FullBNT-1.0.7/KPMtools/plot_polygon.m toolboxes/FullBNT-1.0.7/KPMtools/plotcov2.m toolboxes/FullBNT-1.0.7/KPMtools/plotcov2New.m toolboxes/FullBNT-1.0.7/KPMtools/plotcov3.m toolboxes/FullBNT-1.0.7/KPMtools/plotgauss1d.m toolboxes/FullBNT-1.0.7/KPMtools/plotgauss2d.m toolboxes/FullBNT-1.0.7/KPMtools/plotgauss2d_old.m toolboxes/FullBNT-1.0.7/KPMtools/polygon_area.m toolboxes/FullBNT-1.0.7/KPMtools/polygon_centroid.m toolboxes/FullBNT-1.0.7/KPMtools/polygon_intersect.m toolboxes/FullBNT-1.0.7/KPMtools/previewfig.m toolboxes/FullBNT-1.0.7/KPMtools/process_options.m toolboxes/FullBNT-1.0.7/KPMtools/rand_psd.m toolboxes/FullBNT-1.0.7/KPMtools/rectintC.m toolboxes/FullBNT-1.0.7/KPMtools/rectintLoopC.c toolboxes/FullBNT-1.0.7/KPMtools/rectintLoopC.dll toolboxes/FullBNT-1.0.7/KPMtools/rectintSparse.m toolboxes/FullBNT-1.0.7/KPMtools/rectintSparseC.m toolboxes/FullBNT-1.0.7/KPMtools/rectintSparseLoopC.c toolboxes/FullBNT-1.0.7/KPMtools/rectintSparseLoopC.dll toolboxes/FullBNT-1.0.7/KPMtools/repmatC.c toolboxes/FullBNT-1.0.7/KPMtools/repmatC.dll toolboxes/FullBNT-1.0.7/KPMtools/rgb2grayKPM.m toolboxes/FullBNT-1.0.7/KPMtools/rnd_partition.m toolboxes/FullBNT-1.0.7/KPMtools/rotate_xlabel.m toolboxes/FullBNT-1.0.7/KPMtools/safeStr.m toolboxes/FullBNT-1.0.7/KPMtools/sampleUniformInts.m toolboxes/FullBNT-1.0.7/KPMtools/sample_discrete.m toolboxes/FullBNT-1.0.7/KPMtools/set_xtick_label.m toolboxes/FullBNT-1.0.7/KPMtools/set_xtick_label_demo.m toolboxes/FullBNT-1.0.7/KPMtools/setdiag.m toolboxes/FullBNT-1.0.7/KPMtools/softeye.m toolboxes/FullBNT-1.0.7/KPMtools/sort_evec.m toolboxes/FullBNT-1.0.7/KPMtools/splitLongSeqIntoManyShort.m toolboxes/FullBNT-1.0.7/KPMtools/sprintf_intvec.m toolboxes/FullBNT-1.0.7/KPMtools/sqdist.m toolboxes/FullBNT-1.0.7/KPMtools/strmatch_multi.m toolboxes/FullBNT-1.0.7/KPMtools/strmatch_substr.m toolboxes/FullBNT-1.0.7/KPMtools/strsplit.m toolboxes/FullBNT-1.0.7/KPMtools/subplot2.m toolboxes/FullBNT-1.0.7/KPMtools/subplot3.m toolboxes/FullBNT-1.0.7/KPMtools/subsets.m toolboxes/FullBNT-1.0.7/KPMtools/subsets1.m toolboxes/FullBNT-1.0.7/KPMtools/subsetsFixedSize.m toolboxes/FullBNT-1.0.7/KPMtools/subv2ind.m toolboxes/FullBNT-1.0.7/KPMtools/subv2indKPM.c toolboxes/FullBNT-1.0.7/KPMtools/subv2indKPM.m toolboxes/FullBNT-1.0.7/KPMtools/subv2indMinka.m toolboxes/FullBNT-1.0.7/KPMtools/subv2indTest.m toolboxes/FullBNT-1.0.7/KPMtools/sumv.m toolboxes/FullBNT-1.0.7/KPMtools/suptitle.m toolboxes/FullBNT-1.0.7/KPMtools/unaryEncoding.m toolboxes/FullBNT-1.0.7/KPMtools/wrap.m toolboxes/FullBNT-1.0.7/KPMtools/xticklabel_rotate90.m toolboxes/FullBNT-1.0.7/KPMtools/zipload.m toolboxes/FullBNT-1.0.7/KPMtools/zipsave.m toolboxes/FullBNT-1.0.7/Kalman/AR_to_SS.m toolboxes/FullBNT-1.0.7/Kalman/CVS/Entries toolboxes/FullBNT-1.0.7/Kalman/CVS/Repository toolboxes/FullBNT-1.0.7/Kalman/CVS/Root toolboxes/FullBNT-1.0.7/Kalman/README.txt toolboxes/FullBNT-1.0.7/Kalman/SS_to_AR.m toolboxes/FullBNT-1.0.7/Kalman/convert_to_lagged_form.m toolboxes/FullBNT-1.0.7/Kalman/ensure_AR.m toolboxes/FullBNT-1.0.7/Kalman/eval_AR_perf.m toolboxes/FullBNT-1.0.7/Kalman/kalman_filter.m toolboxes/FullBNT-1.0.7/Kalman/kalman_forward_backward.m toolboxes/FullBNT-1.0.7/Kalman/kalman_smoother.m toolboxes/FullBNT-1.0.7/Kalman/kalman_update.m toolboxes/FullBNT-1.0.7/Kalman/learn_AR.m toolboxes/FullBNT-1.0.7/Kalman/learn_AR_diagonal.m toolboxes/FullBNT-1.0.7/Kalman/learn_kalman.m toolboxes/FullBNT-1.0.7/Kalman/learning_demo.m toolboxes/FullBNT-1.0.7/Kalman/sample_lds.m toolboxes/FullBNT-1.0.7/Kalman/smooth_update.m toolboxes/FullBNT-1.0.7/Kalman/testKalman.m toolboxes/FullBNT-1.0.7/Kalman/tracking_demo.m toolboxes/FullBNT-1.0.7/bnt/@assocarray/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/@assocarray/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/@assocarray/CVS/Root toolboxes/FullBNT-1.0.7/bnt/@assocarray/assocarray.m toolboxes/FullBNT-1.0.7/bnt/@assocarray/subsref.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@boolean_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@boolean_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@boolean_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@boolean_CPD/boolean_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@deterministic_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@deterministic_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@deterministic_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@deterministic_CPD/deterministic_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CPD_to_lambda_msg.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CPD_to_pi.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CPD_to_scgpot.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/convert_to_pot.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/convert_to_table.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/prob_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/README toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/convert_CPD_to_table_hidden_ps.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/convert_obs_CPD_to_table.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/convert_to_pot.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/convert_to_sparse_table.c toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/convert_to_table.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/discrete_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/dom_sizes.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/log_prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/private/prod_CPT_and_pi_msgs.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/sample_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CPD_to_lambda_msg.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CPD_to_pi.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CPD_to_scgpot.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/CPD_to_lambda_msg.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/gaussian_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/log_prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/maximize_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/update_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/update_tied_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/adjustable_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/convert_CPD_to_table_hidden_ps.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/convert_to_pot.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/convert_to_table.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/display.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/gaussian_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/gaussian_CPD_params_given_dps.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/get_field.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/learn_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/log_prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/maximize_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/maximize_params_debug.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/private/CPD_to_linear_gaussian.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/reset_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/sample_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/set_fields.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/update_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/Old/BIC_score_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/Old/CPD_to_dpots.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/README toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/adjustable_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/display.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/generic_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/learn_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/log_prior.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/set_clamped.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CPD_to_lambda_msg.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CPD_to_pi.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/Old/gmux_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/convert_to_pot.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/display.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/gmux_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/sample_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/CPD_to_CPT.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/hhmm2Q_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/maximize_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/reset_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/update_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/hhmmF_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/log_prior.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/maximize_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/reset_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/update_CPT.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/update_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/hhmmF_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/log_prior.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/maximize_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/reset_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/update_CPT.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/update_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/hhmmQ_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/log_prior.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/maximize_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/reset_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/update_CPT.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/update_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/update_ess2.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/update_ess3.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/update_ess4.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/hhmmQ_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/log_prior.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/maximize_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/reset_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/update_CPT.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/update_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/convert_to_table.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/maximize_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/mlp_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/reset_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/update_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CPD_to_CPT.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CPD_to_lambda_msg.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CPD_to_pi.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/noisyor_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/private/sum_prod_CPD_and_pi_msgs.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/CPD_to_pi.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/Old/CPD_to_CPT.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/convert_to_pot.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/log_marg_prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/log_prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/root_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/sample_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/convert_to_pot.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/convert_to_table.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/display.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/get_field.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/maximize_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/private/extract_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/reset_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/sample_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/set_fields.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/softmax_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/update_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/CPD_to_CPT.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/BIC_score_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/bayesian_score_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/log_marg_prob_node_case.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/mult_CPD_and_pi_msgs.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/prob_CPT.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/sample_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/sample_node_single_case.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/tabular_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/update_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/bayes_update_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/display.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/get_field.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/learn_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/log_marg_prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/log_nextcase_prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/log_prior.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/maximize_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/reset_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/set_fields.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/tabular_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/update_ess.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/update_ess_simple.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/CPD_to_CPT.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/Old/tabular_decision_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/display.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/get_field.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/set_fields.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/tabular_decision_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/Old/tabular_kernel.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/convert_to_pot.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/convert_to_table.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/get_field.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/set_fields.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/tabular_kernel.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/convert_to_pot.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/display.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/tabular_utility_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/display.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/evaluate_tree_performance.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/get_field.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/learn_params.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/readme.txt toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/set_fields.m toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/tree_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/linear_gaussian_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/log_marg_prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/update_params_complete.m toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/log_marg_prob_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/root_gaussian_CPD.m toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/update_params_complete.m toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@tabular_chance_node/CPD_to_upot.m toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@tabular_chance_node/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@tabular_chance_node/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@tabular_chance_node/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@tabular_chance_node/tabular_chance_node.m toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/CPDs/mk_isolated_tabular_CPD.m toolboxes/FullBNT-1.0.7/bnt/README.txt toolboxes/FullBNT-1.0.7/bnt/copyright.txt toolboxes/FullBNT-1.0.7/bnt/examples/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dummy toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/Old/mk_map_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/disp_map_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/learn_map.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/mk_map_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/mk_rnd_map_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/sample_from_map.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/Old/mgram2.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/letter2num.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/mgram1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/mgram2.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/mgram3.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/num2letter.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/fixed_args_mk_motif_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/learn_motif_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/mk_motif_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/sample_motif_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/mk_abcd_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/mk_arrow_alpha_hhmm3.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/mk_hhmm2.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/mk_hhmm3.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/mk_hhmm3_args.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/motif_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/remove_hhmm_end_state.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/learn_square_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/mk_square_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/plot_square_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/sample_square_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/get_square_data.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/hhmm_inference.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/is_F2_true_D3.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/learn_square_hhmm_discrete.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/mk_square_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/plot_square_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/sample_square_hhmm_cts.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/sample_square_hhmm_discrete.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/square4.mat toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/square4_cases.mat toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/test_square_fig.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/test_square_fig.mat toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/abcd_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/add_hhmm_end_state.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/hhmm_jtree_clqs.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/mk_hhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/mk_hhmm_topo.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/mk_hhmm_topo_F1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/pretty_print_hhmm_parse.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/remove_hhmm_end_state.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/chmm1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/cmp_inference.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/kalman1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/old.water1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/online1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/online2.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/scg_dbn.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/offline_loopy_slam.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/paskin1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/skf_data_assoc_gmux2.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/slam_kf.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/mk_gmux_robot_dbn.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/mk_linear_slam.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/slam_kf.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/slam_offline_loopy.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/slam_partial_kf.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/slam_stationary_loopy.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/arhmm1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/bat1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/bkff1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/chmm1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/cmp_inference_dbn.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/cmp_learning_dbn.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/cmp_online_inference.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/dhmm1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/ehmm1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/fhmm_infer.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/filter_test1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/ghmm1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/ho1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/jtree_clq_test.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/jtree_clq_test2.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/kalman1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/kjaerulff1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/loopy_dbn1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mhmm1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mildew1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_bat_dbn.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_chmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_collage_from_clqs.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_fhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_mildew_dbn.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_orig_bat_dbn.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_orig_water_dbn.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_ps_from_clqs.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_uffe_dbn.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_water_dbn.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/orig_water1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/reveal1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/scg_dbn.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/skf_data_assoc_gmux.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/viterbi1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/water1.m toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/water2.m toolboxes/FullBNT-1.0.7/bnt/examples/limids/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/limids/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/limids/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/limids/amnio.m toolboxes/FullBNT-1.0.7/bnt/examples/limids/asia_dt1.m toolboxes/FullBNT-1.0.7/bnt/examples/limids/id1.m toolboxes/FullBNT-1.0.7/bnt/examples/limids/oil1.m toolboxes/FullBNT-1.0.7/bnt/examples/limids/pigs1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_loop1_discrete.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_loop1_gauss.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_loopy_cg.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_loopy_discrete.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_loopy_gauss.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_polytree_cg.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_polytree_discrete.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_polytree_gauss.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/bp1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/gmux1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/Belief_IOhmm.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/Belief_hmdt.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/Belief_hme.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/Sigmoid_Belief.m toolboxes/FullBNT-1.0.7/bnt/examples/static/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/examples/static/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/HMEforMatlab.jpg toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/README toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/fhme.m toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/gen_data.m toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/hme_class_plot.m toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/hme_reg_plot.m toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/hme_topobuilder.m toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/hmemenu.m toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/test_data_class.mat toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/test_data_class2.mat toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/test_data_reg.mat toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/train_data_class.mat toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/train_data_reg.mat toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/mixexp_data.txt toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/mixexp_graddesc.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/mixexp_plot.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/sprinkler.bif toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/Old/mk_hmm_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_alarm_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_asia_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_cancer_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_car_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_hmm_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_ideker_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_incinerator_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_markov_chain_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_minimal_qmr_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_qmr_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_vstruct_bnet.m toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/scg1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/scg2.m toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/scg3.m toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/scg_3node.m toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/scg_unstable.m toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/bic1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/cooper_yoo.m toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/k2demo1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/mcmc1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/model_select1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/model_select2.m toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/pc1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/pc2.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/README toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/csum.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/ffa.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/mfa.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/mfa_cl.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/mfademo.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/rdiv.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/rprod.m toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/rsum.m toolboxes/FullBNT-1.0.7/bnt/examples/static/brainy.m toolboxes/FullBNT-1.0.7/bnt/examples/static/burglar-alarm-net.lisp.txt toolboxes/FullBNT-1.0.7/bnt/examples/static/burglary.m toolboxes/FullBNT-1.0.7/bnt/examples/static/cg1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/cg2.m toolboxes/FullBNT-1.0.7/bnt/examples/static/cmp_inference_static.m toolboxes/FullBNT-1.0.7/bnt/examples/static/discrete1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/discrete2.m toolboxes/FullBNT-1.0.7/bnt/examples/static/discrete3.m toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/test_housing.m toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/test_restaurants.m toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/test_zoo1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/tmp.dot toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/transform_data_into_bnt_format.m toolboxes/FullBNT-1.0.7/bnt/examples/static/fa1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/CVS/Root toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/fg1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/fg2.m toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/fg3.m toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/fg_mrf1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/fg_mrf2.m toolboxes/FullBNT-1.0.7/bnt/examples/static/gaussian1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/gaussian2.m toolboxes/FullBNT-1.0.7/bnt/examples/static/gibbs_test1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/learn1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/lw1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/mfa1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/mixexp1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/mixexp2.m toolboxes/FullBNT-1.0.7/bnt/examples/static/mixexp3.m toolboxes/FullBNT-1.0.7/bnt/examples/static/mog1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/mpe1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/mpe2.m toolboxes/FullBNT-1.0.7/bnt/examples/static/nodeorderExample.m toolboxes/FullBNT-1.0.7/bnt/examples/static/qmr1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/qmr2.m toolboxes/FullBNT-1.0.7/bnt/examples/static/sample1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/softev1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/softmax1.m toolboxes/FullBNT-1.0.7/bnt/examples/static/sprinkler1.m toolboxes/FullBNT-1.0.7/bnt/general/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/general/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/general/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/general/CVS/Root toolboxes/FullBNT-1.0.7/bnt/general/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/general/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/general/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/general/Old/bnet_to_gdl_graph.m toolboxes/FullBNT-1.0.7/bnt/general/Old/calc_mpe.m toolboxes/FullBNT-1.0.7/bnt/general/Old/calc_mpe_bucket.m toolboxes/FullBNT-1.0.7/bnt/general/Old/calc_mpe_dbn.m toolboxes/FullBNT-1.0.7/bnt/general/Old/calc_mpe_given_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/general/Old/calc_mpe_global.m toolboxes/FullBNT-1.0.7/bnt/general/Old/compute_interface_nodes.m toolboxes/FullBNT-1.0.7/bnt/general/Old/mk_gdl_graph.m toolboxes/FullBNT-1.0.7/bnt/general/add_ev_to_dmarginal.m toolboxes/FullBNT-1.0.7/bnt/general/add_evidence_to_gmarginal.m toolboxes/FullBNT-1.0.7/bnt/general/bnet_to_fgraph.m toolboxes/FullBNT-1.0.7/bnt/general/compute_fwd_interface.m toolboxes/FullBNT-1.0.7/bnt/general/compute_interface_nodes.m toolboxes/FullBNT-1.0.7/bnt/general/compute_joint_pot.m toolboxes/FullBNT-1.0.7/bnt/general/compute_minimal_interface.m toolboxes/FullBNT-1.0.7/bnt/general/convert_dbn_CPDs_to_pots.m toolboxes/FullBNT-1.0.7/bnt/general/convert_dbn_CPDs_to_tables.m toolboxes/FullBNT-1.0.7/bnt/general/convert_dbn_CPDs_to_tables1.m toolboxes/FullBNT-1.0.7/bnt/general/convert_dbn_CPDs_to_tables_slow.m toolboxes/FullBNT-1.0.7/bnt/general/dbn_to_bnet.m toolboxes/FullBNT-1.0.7/bnt/general/dbn_to_hmm.m toolboxes/FullBNT-1.0.7/bnt/general/determine_elim_constraints.m toolboxes/FullBNT-1.0.7/bnt/general/dispcpt.m toolboxes/FullBNT-1.0.7/bnt/general/do_intervention.m toolboxes/FullBNT-1.0.7/bnt/general/dsep.m toolboxes/FullBNT-1.0.7/bnt/general/dsep_test.m toolboxes/FullBNT-1.0.7/bnt/general/enumerate_scenarios.m toolboxes/FullBNT-1.0.7/bnt/general/fgraph_to_bnet.m toolboxes/FullBNT-1.0.7/bnt/general/hodbn_to_bnet.m toolboxes/FullBNT-1.0.7/bnt/general/is_mnet.m toolboxes/FullBNT-1.0.7/bnt/general/linear_gaussian_to_cpot.m toolboxes/FullBNT-1.0.7/bnt/general/log_lik_complete.m toolboxes/FullBNT-1.0.7/bnt/general/log_marg_lik_complete.m toolboxes/FullBNT-1.0.7/bnt/general/mk_bnet.m toolboxes/FullBNT-1.0.7/bnt/general/mk_dbn.m toolboxes/FullBNT-1.0.7/bnt/general/mk_fgraph.m toolboxes/FullBNT-1.0.7/bnt/general/mk_fgraph_given_ev.m toolboxes/FullBNT-1.0.7/bnt/general/mk_higher_order_dbn.m toolboxes/FullBNT-1.0.7/bnt/general/mk_limid.m toolboxes/FullBNT-1.0.7/bnt/general/mk_mnet.m toolboxes/FullBNT-1.0.7/bnt/general/mk_mrf2.m toolboxes/FullBNT-1.0.7/bnt/general/mk_mutilated_samples.m toolboxes/FullBNT-1.0.7/bnt/general/mk_named_CPT.m toolboxes/FullBNT-1.0.7/bnt/general/mk_slice_and_half_dbn.m toolboxes/FullBNT-1.0.7/bnt/general/noisyORtoTable.m toolboxes/FullBNT-1.0.7/bnt/general/partition_dbn_nodes.m toolboxes/FullBNT-1.0.7/bnt/general/partition_matrix_vec_3.m toolboxes/FullBNT-1.0.7/bnt/general/sample_bnet.m toolboxes/FullBNT-1.0.7/bnt/general/sample_bnet_nocell.m toolboxes/FullBNT-1.0.7/bnt/general/sample_dbn.m toolboxes/FullBNT-1.0.7/bnt/general/score_bnet_complete.m toolboxes/FullBNT-1.0.7/bnt/general/shrink_obs_dims_in_gaussian.m toolboxes/FullBNT-1.0.7/bnt/general/shrink_obs_dims_in_table.m toolboxes/FullBNT-1.0.7/bnt/general/solve_limid.m toolboxes/FullBNT-1.0.7/bnt/general/unroll_dbn_topology.m toolboxes/FullBNT-1.0.7/bnt/general/unroll_higher_order_topology.m toolboxes/FullBNT-1.0.7/bnt/general/unroll_set.m toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/Old/marginal_family_pot.m toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/Old/observed_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/bnet_from_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/get_field.m toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/set_fields.m toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/update_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dummy toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/bk_ff_hmm_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_init_bel.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_marginal_from_bel.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_predict_bel.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel1.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/bk_ff_fb.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/combine_marginals_into_joint.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/dbn_to_hmm.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_mat.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec1.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/project_joint_onto_marginals.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/bk_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/dbn_init_bel.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/dbn_marginal_from_bel.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/dbn_update_bel.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/dbn_update_bel1.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/enter_soft_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/update_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/cbk_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/dbn_init_bel.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/dbn_marginal_from_bel.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/dbn_update_bel.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/dbn_update_bel1.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/enter_soft_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/junk toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/update_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence1.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/enter_soft_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/ff_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/filter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/smooth_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/enter_soft_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/frontier_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/set_fwdback.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/dhmm_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/find_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/hmm_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_matrix.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_vec.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/update_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence1.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence2.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence3.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence4.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_nonint.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_trans.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine1.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine2.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/enter_soft_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/jtree_dbn_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/jtree_unrolled_dbn_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/update_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/kalman_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/private/dbn_to_lds.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/private/extract_params_from_gbn.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/update_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/correct_smooth.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence_obj_oriented.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence_fast.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/wrong_smooth.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/enter_soft_ev.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/pearl_dbn_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/private/init_pearl_dbn_ev_msgs.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/pearl_unrolled_dbn_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/update_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/stable_ho_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/test_ho_inf_enginge.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/update_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/dummy toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/bnet_from_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/filter_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/back.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/backT.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/fwd.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/fwd1.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/hmm_2TBN_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/private/mk_hmm_obs_lik_vec.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/update_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/Old/jtree_2TBN_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/back.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/back1.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/back1_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/backT.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/backT_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/back_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/fwd.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/fwd1.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/jtree_2TBN_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/set_fields.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/back.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/back1.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/backT.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/fwd.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/fwd1.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/jtree_sparse_2TBN_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/bnet_from_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/find_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/smoother_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/update_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/online/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/online/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/online/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/online/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/online/dummy toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/belprop_fg_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/find_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/loopy_converged.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/set_params.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/belprop_gdl_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/belprop_inf_engine_nostr.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/enter_evidence1.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/marginal_domain.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/belprop_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/find_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/loopy_converged.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/junk toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/parallel_protocol.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/tree_protocol.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/belprop_mrf2_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/bp_mrf2.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/enter_soft_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/find_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/set_params.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/cond_gauss_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/enumerative_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/gaussian_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/private/extract_params_from_gbn.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/gibbs_sampling_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/CPT.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_children.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_families.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_families_dbn.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior_dbn.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_strides.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/get_cpts.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/my_sample_discrete.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/sample_single_discrete.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/find_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/global_joint_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/collect_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/distribute_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/enter_soft_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/cliques_from_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/clq_containing_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/collect_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/distribute_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/enter_soft_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/find_max_config.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/find_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/init_pot.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/jtree_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/set_fields.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/Old/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/Old/marginal_nodes_SS.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/jtree_limid_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/find_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/jtree_mnet_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/cliques_from_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/clq_containing_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/collect_evidence.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/distribute_evidence.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/enter_soft_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/init_pot.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/jtree_sparse_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/collect_evidence.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/distribute_evidence.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/init_pot.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/init_pot1.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/init_pot1.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/set_fields.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/likelihood_weighting_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/bethe_free_energy.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/loopy_converged.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/marginal_family.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/pearl_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/compute_bel.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/parallel_protocol.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/prod_lambda_msgs.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/tree_protocol.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/C_quickscore.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/nr.h toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/nrutil.c toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/nrutil.h toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/quickscore.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/quickscore_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/Old/initialize_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/README toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/clq_containing_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/marginal_difclq_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/marginal_singleclq_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/problems.txt toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/push.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/push_pot_toclique.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/enter_evidence.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/find_mpe.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/marginal_nodes.m toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/var_elim_inf_engine.m toolboxes/FullBNT-1.0.7/bnt/inference/static/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/inference/static/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/inference/static/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/inference/static/CVS/Root toolboxes/FullBNT-1.0.7/bnt/inference/static/dummy toolboxes/FullBNT-1.0.7/bnt/installC_BNT.m toolboxes/FullBNT-1.0.7/bnt/installC_graph.m toolboxes/FullBNT-1.0.7/bnt/learning/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/learning/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/learning/CVS/Root toolboxes/FullBNT-1.0.7/bnt/learning/CovMat.m toolboxes/FullBNT-1.0.7/bnt/learning/bayes_update_params.m toolboxes/FullBNT-1.0.7/bnt/learning/bic_score_family.m toolboxes/FullBNT-1.0.7/bnt/learning/compute_cooling_schedule.m toolboxes/FullBNT-1.0.7/bnt/learning/dirichlet_score_family.m toolboxes/FullBNT-1.0.7/bnt/learning/kpm_learn_struct_mcmc.m toolboxes/FullBNT-1.0.7/bnt/learning/learn_params.m toolboxes/FullBNT-1.0.7/bnt/learning/learn_params_dbn.m toolboxes/FullBNT-1.0.7/bnt/learning/learn_params_dbn_em.m toolboxes/FullBNT-1.0.7/bnt/learning/learn_params_em.m toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_K2.m toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_dbn_reveal.m toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_mcmc.m toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_pdag_ic_star.m toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_pdag_pc.m toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_pdag_pc_constrain.m toolboxes/FullBNT-1.0.7/bnt/learning/mcmc_sample_to_hist.m toolboxes/FullBNT-1.0.7/bnt/learning/mk_schedule.m toolboxes/FullBNT-1.0.7/bnt/learning/mk_tetrad_data_file.m toolboxes/FullBNT-1.0.7/bnt/learning/score_dags.m toolboxes/FullBNT-1.0.7/bnt/learning/score_dags_old.m toolboxes/FullBNT-1.0.7/bnt/learning/score_family.m toolboxes/FullBNT-1.0.7/bnt/license.gpl.txt toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/normalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/set_domain_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/simple_marginalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/cg_can_to_mom.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/cg_mom_to_can.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/cgpot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/display.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/divide_by_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/domain_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/enter_cts_evidence_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/enter_discrete_evidence_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/marginalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/multiply_by_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/multiply_pots.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/normalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/pot_to_marginal.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/set_domain_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/Old/cpot_to_mpot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/Old/normalize_pot.convert.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/cpot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/cpot_to_mpot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/display.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/divide_by_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/domain_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/enter_cts_evidence_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/marginalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/multiply_by_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/multiply_pots.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/normalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/pot_to_marginal.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/rescale_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/set_domain_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/approxeq_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/display.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/divide_by_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/domain_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/dpot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/dpot_to_table.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/find_most_prob_entry.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/get_fields.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/marginalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/multiply_by_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/multiply_pots.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/normalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/pot_to_marginal.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/set_domain_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/subsasgn.m toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/subsref.m toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/display.m toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/marginalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/mpot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/mpot_to_cpot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/normalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/pot_to_marginal.m toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/rescale_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/set_domain_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/marginalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/normalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/reduce_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/rescale_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/scgcpot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/README toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/combine_pots.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/complement_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/direct_combine_pots.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/extension_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/marginalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/normalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/pot_to_marginal.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/recursive_combine_pots.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/reduce_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/scgpot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/approxeq_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/display.m toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/divide_by_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/marginalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/multiply_by_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/normalize_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/pot_to_marginal.m toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/upot.m toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/upot_to_opt_policy.m toolboxes/FullBNT-1.0.7/bnt/potentials/CPD_to_pot.m toolboxes/FullBNT-1.0.7/bnt/potentials/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/CVS/Entries.Log toolboxes/FullBNT-1.0.7/bnt/potentials/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/Old/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/Old/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/Old/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/Old/comp_eff_node_sizes.m toolboxes/FullBNT-1.0.7/bnt/potentials/README toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/CVS/Entries toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/CVS/Repository toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/CVS/Root toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/divide_by_sparse_table.c toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/divide_by_table.c toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/divide_by_table.m toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/extend_domain_table.m toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/marg_sparse_table.c toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/marg_table.c toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/marg_table.m toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/marg_tableC.c toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/marg_tableM.m toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_sparse_table.c toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_table.c toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_table.m toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_table2.m toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_tableC.c toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_tableM.m toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_table_global.m toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/rep_mult.c toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/repmat_and_mult.c toolboxes/FullBNT-1.0.7/bnt/potentials/check_for_cd_arcs.m toolboxes/FullBNT-1.0.7/bnt/potentials/determine_pot_type.m toolboxes/FullBNT-1.0.7/bnt/potentials/genops.c toolboxes/FullBNT-1.0.7/bnt/potentials/mk_initial_pot.m toolboxes/FullBNT-1.0.7/bnt/test_BNT.m toolboxes/FullBNT-1.0.7/bnt/uninstallC_BNT.m toolboxes/FullBNT-1.0.7/bntRoot.m toolboxes/FullBNT-1.0.7/docs/ChangeLog.Sourceforge.txt toolboxes/FullBNT-1.0.7/docs/Eqns/lin_reg_eqn.gif toolboxes/FullBNT-1.0.7/docs/Figures/CPTgrass.gif toolboxes/FullBNT-1.0.7/docs/Figures/HMEforMatlab.jpg toolboxes/FullBNT-1.0.7/docs/Figures/ar1.fig toolboxes/FullBNT-1.0.7/docs/Figures/ar1.gif toolboxes/FullBNT-1.0.7/docs/Figures/batnet.fig toolboxes/FullBNT-1.0.7/docs/Figures/batnet.gif toolboxes/FullBNT-1.0.7/docs/Figures/batnet_numbered.fig toolboxes/FullBNT-1.0.7/docs/Figures/bic.png toolboxes/FullBNT-1.0.7/docs/Figures/cg1.fig toolboxes/FullBNT-1.0.7/docs/Figures/cg1.gif toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.T5.fig toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.fig toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.gif toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.influence.fig toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.jpg toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.named.fig toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.small.fig toolboxes/FullBNT-1.0.7/docs/Figures/chmm5_circle.fig toolboxes/FullBNT-1.0.7/docs/Figures/chmm5_nobold.fig toolboxes/FullBNT-1.0.7/docs/Figures/fa.eps toolboxes/FullBNT-1.0.7/docs/Figures/fa.fig toolboxes/FullBNT-1.0.7/docs/Figures/fa.gif toolboxes/FullBNT-1.0.7/docs/Figures/fa_caption.fig toolboxes/FullBNT-1.0.7/docs/Figures/fa_discrete.fig toolboxes/FullBNT-1.0.7/docs/Figures/fa_discrete.gif toolboxes/FullBNT-1.0.7/docs/Figures/fa_discrete_single.fig toolboxes/FullBNT-1.0.7/docs/Figures/fa_regular.fig toolboxes/FullBNT-1.0.7/docs/Figures/fa_regular.gif toolboxes/FullBNT-1.0.7/docs/Figures/fa_scalar.eps toolboxes/FullBNT-1.0.7/docs/Figures/fa_scalar.fig toolboxes/FullBNT-1.0.7/docs/Figures/fa_scalar.gif toolboxes/FullBNT-1.0.7/docs/Figures/fa_scalar_caption.fig toolboxes/FullBNT-1.0.7/docs/Figures/factorial_hmm3.fig toolboxes/FullBNT-1.0.7/docs/Figures/filter.eps toolboxes/FullBNT-1.0.7/docs/Figures/filter.fig toolboxes/FullBNT-1.0.7/docs/Figures/filter.gif toolboxes/FullBNT-1.0.7/docs/Figures/filter.tex toolboxes/FullBNT-1.0.7/docs/Figures/gaussplot.png toolboxes/FullBNT-1.0.7/docs/Figures/hme.fig toolboxes/FullBNT-1.0.7/docs/Figures/hme.gif toolboxes/FullBNT-1.0.7/docs/Figures/hme_dec_boundary.gif toolboxes/FullBNT-1.0.7/docs/Figures/hme_dec_boundary.png toolboxes/FullBNT-1.0.7/docs/Figures/hmm3.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm3.gif toolboxes/FullBNT-1.0.7/docs/Figures/hmm3letter.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm3letter.gif toolboxes/FullBNT-1.0.7/docs/Figures/hmm3letter.jpg toolboxes/FullBNT-1.0.7/docs/Figures/hmm4.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm4.gif toolboxes/FullBNT-1.0.7/docs/Figures/hmm4_params.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm4_params.gif toolboxes/FullBNT-1.0.7/docs/Figures/hmm4_paramsX.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm4_square.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm_ar.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm_ar.gif toolboxes/FullBNT-1.0.7/docs/Figures/hmm_coupled.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm_coupled.gif toolboxes/FullBNT-1.0.7/docs/Figures/hmm_factorial.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm_factorial.gif toolboxes/FullBNT-1.0.7/docs/Figures/hmm_gauss.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm_gauss.gif toolboxes/FullBNT-1.0.7/docs/Figures/hmm_io.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm_io.gif toolboxes/FullBNT-1.0.7/docs/Figures/hmm_mixgauss.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm_mixgauss.gif toolboxes/FullBNT-1.0.7/docs/Figures/hmm_zoo.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm_zoo.gif toolboxes/FullBNT-1.0.7/docs/Figures/hmm_zoo_names.fig toolboxes/FullBNT-1.0.7/docs/Figures/hmm_zoo_small.fig toolboxes/FullBNT-1.0.7/docs/Figures/ifa.eps toolboxes/FullBNT-1.0.7/docs/Figures/ifa.fig toolboxes/FullBNT-1.0.7/docs/Figures/ifa.gif toolboxes/FullBNT-1.0.7/docs/Figures/kf.fig toolboxes/FullBNT-1.0.7/docs/Figures/kf.gif toolboxes/FullBNT-1.0.7/docs/Figures/kf_input.fig toolboxes/FullBNT-1.0.7/docs/Figures/kf_input.gif toolboxes/FullBNT-1.0.7/docs/Figures/kf_notime.fig toolboxes/FullBNT-1.0.7/docs/Figures/kf_obs_track.fig toolboxes/FullBNT-1.0.7/docs/Figures/kf_scalar_track.fig toolboxes/FullBNT-1.0.7/docs/Figures/kfhead.jpg toolboxes/FullBNT-1.0.7/docs/Figures/mathbymatlab.gif toolboxes/FullBNT-1.0.7/docs/Figures/mcmc_accept.jpg toolboxes/FullBNT-1.0.7/docs/Figures/mcmc_post.jpg toolboxes/FullBNT-1.0.7/docs/Figures/mfa.eps toolboxes/FullBNT-1.0.7/docs/Figures/mfa.fig toolboxes/FullBNT-1.0.7/docs/Figures/mfa.gif toolboxes/FullBNT-1.0.7/docs/Figures/mixexp.fig toolboxes/FullBNT-1.0.7/docs/Figures/mixexp.gif toolboxes/FullBNT-1.0.7/docs/Figures/mixexp_after.gif toolboxes/FullBNT-1.0.7/docs/Figures/mixexp_before.gif toolboxes/FullBNT-1.0.7/docs/Figures/mixexp_data.gif toolboxes/FullBNT-1.0.7/docs/Figures/model_select.png toolboxes/FullBNT-1.0.7/docs/Figures/qmr.fig toolboxes/FullBNT-1.0.7/docs/Figures/qmr.gif toolboxes/FullBNT-1.0.7/docs/Figures/qmr.jpg toolboxes/FullBNT-1.0.7/docs/Figures/qmr.rnd.jpg toolboxes/FullBNT-1.0.7/docs/Figures/rainer_dbn.jpg toolboxes/FullBNT-1.0.7/docs/Figures/rainer_tied.fig toolboxes/FullBNT-1.0.7/docs/Figures/rainer_tied.gif toolboxes/FullBNT-1.0.7/docs/Figures/sar.fig toolboxes/FullBNT-1.0.7/docs/Figures/sar.gif toolboxes/FullBNT-1.0.7/docs/Figures/skf.fig toolboxes/FullBNT-1.0.7/docs/Figures/skf.gif toolboxes/FullBNT-1.0.7/docs/Figures/skf3.fig toolboxes/FullBNT-1.0.7/docs/Figures/skf3_nobold.fig toolboxes/FullBNT-1.0.7/docs/Figures/skf3_nosolid.fig toolboxes/FullBNT-1.0.7/docs/Figures/skf3_polytree.fig toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler.fig toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler.gif toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler.jpg toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler.noparams.fig toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler_bar.gif toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler_bar.jpg toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler_bar.png toolboxes/FullBNT-1.0.7/docs/Figures/water3.cts.fig toolboxes/FullBNT-1.0.7/docs/Figures/water3.fig toolboxes/FullBNT-1.0.7/docs/Figures/water3.gif toolboxes/FullBNT-1.0.7/docs/Figures/water3_75.gif toolboxes/FullBNT-1.0.7/docs/Figures/water3_circle.fig toolboxes/FullBNT-1.0.7/docs/Figures/water3_named_nodes.fig toolboxes/FullBNT-1.0.7/docs/Figures/water3_nolabels.fig toolboxes/FullBNT-1.0.7/docs/GR03~1.PDF toolboxes/FullBNT-1.0.7/docs/Talks/BNT_mathworks.ppt toolboxes/FullBNT-1.0.7/docs/Talks/gR03.ppt toolboxes/FullBNT-1.0.7/docs/Talks/stair_BNT_mathworks.ppt toolboxes/FullBNT-1.0.7/docs/adj2pajek2.m toolboxes/FullBNT-1.0.7/docs/bnsoftOld.html toolboxes/FullBNT-1.0.7/docs/bnt.html toolboxes/FullBNT-1.0.7/docs/bnt_download.html toolboxes/FullBNT-1.0.7/docs/bnt_pre_sf.html toolboxes/FullBNT-1.0.7/docs/cellarray.html toolboxes/FullBNT-1.0.7/docs/changelog.html toolboxes/FullBNT-1.0.7/docs/dbn_hmm_demo.m toolboxes/FullBNT-1.0.7/docs/gr03.pdf toolboxes/FullBNT-1.0.7/docs/graph_to_dot.m toolboxes/FullBNT-1.0.7/docs/graphviz.html toolboxes/FullBNT-1.0.7/docs/install.html toolboxes/FullBNT-1.0.7/docs/join.gif toolboxes/FullBNT-1.0.7/docs/license.gpl toolboxes/FullBNT-1.0.7/docs/majorFeatures.html toolboxes/FullBNT-1.0.7/docs/mathbymatlab.gif toolboxes/FullBNT-1.0.7/docs/matlab_comparison.html toolboxes/FullBNT-1.0.7/docs/numDAGsEqn.png toolboxes/FullBNT-1.0.7/docs/numDAGsEqn2.png toolboxes/FullBNT-1.0.7/docs/param_tieing.html toolboxes/FullBNT-1.0.7/docs/supportedModels.html toolboxes/FullBNT-1.0.7/docs/usage.html toolboxes/FullBNT-1.0.7/docs/usage_02nov13.html toolboxes/FullBNT-1.0.7/docs/usage_cropped.html toolboxes/FullBNT-1.0.7/docs/usage_dbn.html toolboxes/FullBNT-1.0.7/docs/usage_dbn_02nov13.html toolboxes/FullBNT-1.0.7/docs/usage_sf.html toolboxes/FullBNT-1.0.7/docs/whyNotSourceforge.html toolboxes/FullBNT-1.0.7/foptions.m toolboxes/FullBNT-1.0.7/genpathKPM.m toolboxes/FullBNT-1.0.7/graph/CVS/Entries toolboxes/FullBNT-1.0.7/graph/CVS/Entries.Log toolboxes/FullBNT-1.0.7/graph/CVS/Repository toolboxes/FullBNT-1.0.7/graph/CVS/Root toolboxes/FullBNT-1.0.7/graph/Old/CVS/Entries toolboxes/FullBNT-1.0.7/graph/Old/CVS/Repository toolboxes/FullBNT-1.0.7/graph/Old/CVS/Root toolboxes/FullBNT-1.0.7/graph/Old/best_first_elim_order.m toolboxes/FullBNT-1.0.7/graph/Old/dag_to_jtree.m toolboxes/FullBNT-1.0.7/graph/Old/dfs.m toolboxes/FullBNT-1.0.7/graph/Old/dsep_test.m toolboxes/FullBNT-1.0.7/graph/Old/mk_2D_lattice_slow.m toolboxes/FullBNT-1.0.7/graph/README.txt toolboxes/FullBNT-1.0.7/graph/acyclic.m toolboxes/FullBNT-1.0.7/graph/assignEdgeNums.m toolboxes/FullBNT-1.0.7/graph/best_first_elim_order.m toolboxes/FullBNT-1.0.7/graph/check_jtree_property.m toolboxes/FullBNT-1.0.7/graph/check_triangulated.m toolboxes/FullBNT-1.0.7/graph/children.m toolboxes/FullBNT-1.0.7/graph/cliques_to_jtree.m toolboxes/FullBNT-1.0.7/graph/cliques_to_strong_jtree.m toolboxes/FullBNT-1.0.7/graph/connected_graph.m toolboxes/FullBNT-1.0.7/graph/dag_to_essential_graph.m toolboxes/FullBNT-1.0.7/graph/dfs.m toolboxes/FullBNT-1.0.7/graph/dfs_test.m toolboxes/FullBNT-1.0.7/graph/dijkstra.m toolboxes/FullBNT-1.0.7/graph/family.m toolboxes/FullBNT-1.0.7/graph/findroot.m toolboxes/FullBNT-1.0.7/graph/graph_separated.m toolboxes/FullBNT-1.0.7/graph/graph_to_jtree.m toolboxes/FullBNT-1.0.7/graph/min_subtree_con_nodes.m toolboxes/FullBNT-1.0.7/graph/minimum_spanning_tree.m toolboxes/FullBNT-1.0.7/graph/minspan.m toolboxes/FullBNT-1.0.7/graph/mk_2D_lattice.m toolboxes/FullBNT-1.0.7/graph/mk_2D_lattice_slow.m toolboxes/FullBNT-1.0.7/graph/mk_adj_mat.m toolboxes/FullBNT-1.0.7/graph/mk_adjmat_chain.m toolboxes/FullBNT-1.0.7/graph/mk_all_dags.m toolboxes/FullBNT-1.0.7/graph/mk_nbrs_of_dag.m toolboxes/FullBNT-1.0.7/graph/mk_nbrs_of_digraph.m toolboxes/FullBNT-1.0.7/graph/mk_nbrs_of_digraph_broken.m toolboxes/FullBNT-1.0.7/graph/mk_nbrs_of_digraph_not_vectorized.m toolboxes/FullBNT-1.0.7/graph/mk_rnd_dag.m toolboxes/FullBNT-1.0.7/graph/mk_rnd_dag_given_edge_prob.m toolboxes/FullBNT-1.0.7/graph/mk_rooted_tree.m toolboxes/FullBNT-1.0.7/graph/mk_undirected.m toolboxes/FullBNT-1.0.7/graph/moralize.m toolboxes/FullBNT-1.0.7/graph/neighbors.m toolboxes/FullBNT-1.0.7/graph/parents.m toolboxes/FullBNT-1.0.7/graph/pred2path.m toolboxes/FullBNT-1.0.7/graph/reachability_graph.m toolboxes/FullBNT-1.0.7/graph/scc.m toolboxes/FullBNT-1.0.7/graph/strong_elim_order.m toolboxes/FullBNT-1.0.7/graph/test.m toolboxes/FullBNT-1.0.7/graph/test_strong_root.m toolboxes/FullBNT-1.0.7/graph/topological_sort.m toolboxes/FullBNT-1.0.7/graph/trees.txt toolboxes/FullBNT-1.0.7/graph/triangulate.c toolboxes/FullBNT-1.0.7/graph/triangulate.m toolboxes/FullBNT-1.0.7/graph/triangulate_2Dlattice_demo.m toolboxes/FullBNT-1.0.7/graph/triangulate_test.m toolboxes/FullBNT-1.0.7/nethelp3.3/CVS/Entries toolboxes/FullBNT-1.0.7/nethelp3.3/CVS/Repository toolboxes/FullBNT-1.0.7/nethelp3.3/CVS/Root toolboxes/FullBNT-1.0.7/nethelp3.3/conffig.htm toolboxes/FullBNT-1.0.7/nethelp3.3/confmat.htm toolboxes/FullBNT-1.0.7/nethelp3.3/conjgrad.htm toolboxes/FullBNT-1.0.7/nethelp3.3/consist.htm toolboxes/FullBNT-1.0.7/nethelp3.3/convertoldnet.htm toolboxes/FullBNT-1.0.7/nethelp3.3/datread.htm toolboxes/FullBNT-1.0.7/nethelp3.3/datwrite.htm toolboxes/FullBNT-1.0.7/nethelp3.3/dem2ddat.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demard.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demev1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demev2.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demev3.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demgauss.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demglm1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demglm2.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demgmm1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demgmm2.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demgmm3.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demgmm4.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demgmm5.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demgp.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demgpard.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demgpot.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demgtm1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demgtm2.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demhint.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demhmc1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demhmc2.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demhmc3.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demkmn1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demknn1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demmdn1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demmet1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demmlp1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demmlp2.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demnlab.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demns1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demolgd1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demopt1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/dempot.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demprgp.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demprior.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demrbf1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demsom1.htm toolboxes/FullBNT-1.0.7/nethelp3.3/demtrain.htm toolboxes/FullBNT-1.0.7/nethelp3.3/dist2.htm toolboxes/FullBNT-1.0.7/nethelp3.3/eigdec.htm toolboxes/FullBNT-1.0.7/nethelp3.3/errbayes.htm toolboxes/FullBNT-1.0.7/nethelp3.3/evidence.htm toolboxes/FullBNT-1.0.7/nethelp3.3/fevbayes.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gauss.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gbayes.htm toolboxes/FullBNT-1.0.7/nethelp3.3/glm.htm toolboxes/FullBNT-1.0.7/nethelp3.3/glmderiv.htm toolboxes/FullBNT-1.0.7/nethelp3.3/glmerr.htm toolboxes/FullBNT-1.0.7/nethelp3.3/glmevfwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/glmfwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/glmgrad.htm toolboxes/FullBNT-1.0.7/nethelp3.3/glmhess.htm toolboxes/FullBNT-1.0.7/nethelp3.3/glminit.htm toolboxes/FullBNT-1.0.7/nethelp3.3/glmpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/glmtrain.htm toolboxes/FullBNT-1.0.7/nethelp3.3/glmunpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gmm.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gmmactiv.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gmmem.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gmminit.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gmmpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gmmpost.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gmmprob.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gmmsamp.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gmmunpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gp.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gpcovar.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gpcovarf.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gpcovarp.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gperr.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gpfwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gpgrad.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gpinit.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gppak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gpunpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gradchek.htm toolboxes/FullBNT-1.0.7/nethelp3.3/graddesc.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gsamp.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gtm.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gtmem.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gtmfwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gtminit.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gtmlmean.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gtmlmode.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gtmmag.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gtmpost.htm toolboxes/FullBNT-1.0.7/nethelp3.3/gtmprob.htm toolboxes/FullBNT-1.0.7/nethelp3.3/hbayes.htm toolboxes/FullBNT-1.0.7/nethelp3.3/hesschek.htm toolboxes/FullBNT-1.0.7/nethelp3.3/hintmat.htm toolboxes/FullBNT-1.0.7/nethelp3.3/hinton.htm toolboxes/FullBNT-1.0.7/nethelp3.3/histp.htm toolboxes/FullBNT-1.0.7/nethelp3.3/hmc.htm toolboxes/FullBNT-1.0.7/nethelp3.3/index.htm toolboxes/FullBNT-1.0.7/nethelp3.3/kmeans.htm toolboxes/FullBNT-1.0.7/nethelp3.3/knn.htm toolboxes/FullBNT-1.0.7/nethelp3.3/knnfwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/linef.htm toolboxes/FullBNT-1.0.7/nethelp3.3/linemin.htm toolboxes/FullBNT-1.0.7/nethelp3.3/maxitmess.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mdn.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mdn2gmm.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mdndist2.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mdnerr.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mdnfwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mdngrad.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mdninit.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mdnpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mdnpost.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mdnprob.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mdnunpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/metrop.htm toolboxes/FullBNT-1.0.7/nethelp3.3/minbrack.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlp.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlpbkp.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlpderiv.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlperr.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlpevfwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlpfwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlpgrad.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlphdotv.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlphess.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlphint.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlpinit.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlppak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlpprior.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlptrain.htm toolboxes/FullBNT-1.0.7/nethelp3.3/mlpunpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/netderiv.htm toolboxes/FullBNT-1.0.7/nethelp3.3/neterr.htm toolboxes/FullBNT-1.0.7/nethelp3.3/netevfwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/netgrad.htm toolboxes/FullBNT-1.0.7/nethelp3.3/nethelp3.3.zip toolboxes/FullBNT-1.0.7/nethelp3.3/nethess.htm toolboxes/FullBNT-1.0.7/nethelp3.3/netinit.htm toolboxes/FullBNT-1.0.7/nethelp3.3/netopt.htm toolboxes/FullBNT-1.0.7/nethelp3.3/netpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/netunpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/olgd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/pca.htm toolboxes/FullBNT-1.0.7/nethelp3.3/plotmat.htm toolboxes/FullBNT-1.0.7/nethelp3.3/ppca.htm toolboxes/FullBNT-1.0.7/nethelp3.3/quasinew.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbf.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbfbkp.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbfderiv.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbferr.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbfevfwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbffwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbfgrad.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbfhess.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbfjacob.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbfpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbfprior.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbfsetbf.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbfsetfw.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbftrain.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rbfunpak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rosegrad.htm toolboxes/FullBNT-1.0.7/nethelp3.3/rosen.htm toolboxes/FullBNT-1.0.7/nethelp3.3/scg.htm toolboxes/FullBNT-1.0.7/nethelp3.3/som.htm toolboxes/FullBNT-1.0.7/nethelp3.3/somfwd.htm toolboxes/FullBNT-1.0.7/nethelp3.3/sompak.htm toolboxes/FullBNT-1.0.7/nethelp3.3/somtrain.htm toolboxes/FullBNT-1.0.7/nethelp3.3/somunpak.htm toolboxes/FullBNT-1.0.7/netlab3.3/CVS/Entries toolboxes/FullBNT-1.0.7/netlab3.3/CVS/Repository toolboxes/FullBNT-1.0.7/netlab3.3/CVS/Root toolboxes/FullBNT-1.0.7/netlab3.3/Contents.m toolboxes/FullBNT-1.0.7/netlab3.3/LICENSE toolboxes/FullBNT-1.0.7/netlab3.3/conffig.m toolboxes/FullBNT-1.0.7/netlab3.3/confmat.m toolboxes/FullBNT-1.0.7/netlab3.3/conjgrad.m toolboxes/FullBNT-1.0.7/netlab3.3/consist.m toolboxes/FullBNT-1.0.7/netlab3.3/convertoldnet.m toolboxes/FullBNT-1.0.7/netlab3.3/datread.m toolboxes/FullBNT-1.0.7/netlab3.3/datwrite.m toolboxes/FullBNT-1.0.7/netlab3.3/dem2ddat.m toolboxes/FullBNT-1.0.7/netlab3.3/demard.m toolboxes/FullBNT-1.0.7/netlab3.3/demev1.m toolboxes/FullBNT-1.0.7/netlab3.3/demev2.m toolboxes/FullBNT-1.0.7/netlab3.3/demev3.m toolboxes/FullBNT-1.0.7/netlab3.3/demgauss.m toolboxes/FullBNT-1.0.7/netlab3.3/demglm1.m toolboxes/FullBNT-1.0.7/netlab3.3/demglm2.m toolboxes/FullBNT-1.0.7/netlab3.3/demgmm1.m toolboxes/FullBNT-1.0.7/netlab3.3/demgmm2.m toolboxes/FullBNT-1.0.7/netlab3.3/demgmm3.m toolboxes/FullBNT-1.0.7/netlab3.3/demgmm4.m toolboxes/FullBNT-1.0.7/netlab3.3/demgmm5.m toolboxes/FullBNT-1.0.7/netlab3.3/demgp.m toolboxes/FullBNT-1.0.7/netlab3.3/demgpard.m toolboxes/FullBNT-1.0.7/netlab3.3/demgpot.m toolboxes/FullBNT-1.0.7/netlab3.3/demgtm1.m toolboxes/FullBNT-1.0.7/netlab3.3/demgtm2.m toolboxes/FullBNT-1.0.7/netlab3.3/demhint.m toolboxes/FullBNT-1.0.7/netlab3.3/demhmc1.m toolboxes/FullBNT-1.0.7/netlab3.3/demhmc2.m toolboxes/FullBNT-1.0.7/netlab3.3/demhmc3.m toolboxes/FullBNT-1.0.7/netlab3.3/demkmn1.m toolboxes/FullBNT-1.0.7/netlab3.3/demknn1.m toolboxes/FullBNT-1.0.7/netlab3.3/demmdn1.m toolboxes/FullBNT-1.0.7/netlab3.3/demmet1.m toolboxes/FullBNT-1.0.7/netlab3.3/demmlp1.m toolboxes/FullBNT-1.0.7/netlab3.3/demmlp2.m toolboxes/FullBNT-1.0.7/netlab3.3/demnlab.m toolboxes/FullBNT-1.0.7/netlab3.3/demns1.m toolboxes/FullBNT-1.0.7/netlab3.3/demolgd1.m toolboxes/FullBNT-1.0.7/netlab3.3/demopt1.m toolboxes/FullBNT-1.0.7/netlab3.3/dempot.m toolboxes/FullBNT-1.0.7/netlab3.3/demprgp.m toolboxes/FullBNT-1.0.7/netlab3.3/demprior.m toolboxes/FullBNT-1.0.7/netlab3.3/demrbf1.m toolboxes/FullBNT-1.0.7/netlab3.3/demsom1.m toolboxes/FullBNT-1.0.7/netlab3.3/demtrain.m toolboxes/FullBNT-1.0.7/netlab3.3/dist2.m toolboxes/FullBNT-1.0.7/netlab3.3/eigdec.m toolboxes/FullBNT-1.0.7/netlab3.3/errbayes.m toolboxes/FullBNT-1.0.7/netlab3.3/evidence.m toolboxes/FullBNT-1.0.7/netlab3.3/fevbayes.m toolboxes/FullBNT-1.0.7/netlab3.3/gauss.m toolboxes/FullBNT-1.0.7/netlab3.3/gbayes.m toolboxes/FullBNT-1.0.7/netlab3.3/glm.m toolboxes/FullBNT-1.0.7/netlab3.3/glmderiv.m toolboxes/FullBNT-1.0.7/netlab3.3/glmerr.m toolboxes/FullBNT-1.0.7/netlab3.3/glmevfwd.m toolboxes/FullBNT-1.0.7/netlab3.3/glmfwd.m toolboxes/FullBNT-1.0.7/netlab3.3/glmgrad.m toolboxes/FullBNT-1.0.7/netlab3.3/glmhess.m toolboxes/FullBNT-1.0.7/netlab3.3/glminit.m toolboxes/FullBNT-1.0.7/netlab3.3/glmpak.m toolboxes/FullBNT-1.0.7/netlab3.3/glmtrain.m toolboxes/FullBNT-1.0.7/netlab3.3/glmunpak.m toolboxes/FullBNT-1.0.7/netlab3.3/gmm.m toolboxes/FullBNT-1.0.7/netlab3.3/gmmactiv.m toolboxes/FullBNT-1.0.7/netlab3.3/gmmem.m toolboxes/FullBNT-1.0.7/netlab3.3/gmminit.m toolboxes/FullBNT-1.0.7/netlab3.3/gmmpak.m toolboxes/FullBNT-1.0.7/netlab3.3/gmmpost.m toolboxes/FullBNT-1.0.7/netlab3.3/gmmprob.m toolboxes/FullBNT-1.0.7/netlab3.3/gmmsamp.m toolboxes/FullBNT-1.0.7/netlab3.3/gmmunpak.m toolboxes/FullBNT-1.0.7/netlab3.3/gp.m toolboxes/FullBNT-1.0.7/netlab3.3/gpcovar.m toolboxes/FullBNT-1.0.7/netlab3.3/gpcovarf.m toolboxes/FullBNT-1.0.7/netlab3.3/gpcovarp.m toolboxes/FullBNT-1.0.7/netlab3.3/gperr.m toolboxes/FullBNT-1.0.7/netlab3.3/gpfwd.m toolboxes/FullBNT-1.0.7/netlab3.3/gpgrad.m toolboxes/FullBNT-1.0.7/netlab3.3/gpinit.m toolboxes/FullBNT-1.0.7/netlab3.3/gppak.m toolboxes/FullBNT-1.0.7/netlab3.3/gpunpak.m toolboxes/FullBNT-1.0.7/netlab3.3/gradchek.m toolboxes/FullBNT-1.0.7/netlab3.3/graddesc.m toolboxes/FullBNT-1.0.7/netlab3.3/gsamp.m toolboxes/FullBNT-1.0.7/netlab3.3/gtm.m toolboxes/FullBNT-1.0.7/netlab3.3/gtmem.m toolboxes/FullBNT-1.0.7/netlab3.3/gtmfwd.m toolboxes/FullBNT-1.0.7/netlab3.3/gtminit.m toolboxes/FullBNT-1.0.7/netlab3.3/gtmlmean.m toolboxes/FullBNT-1.0.7/netlab3.3/gtmlmode.m toolboxes/FullBNT-1.0.7/netlab3.3/gtmmag.m toolboxes/FullBNT-1.0.7/netlab3.3/gtmpost.m toolboxes/FullBNT-1.0.7/netlab3.3/gtmprob.m toolboxes/FullBNT-1.0.7/netlab3.3/hbayes.m toolboxes/FullBNT-1.0.7/netlab3.3/hesschek.m toolboxes/FullBNT-1.0.7/netlab3.3/hintmat.m toolboxes/FullBNT-1.0.7/netlab3.3/hinton.m toolboxes/FullBNT-1.0.7/netlab3.3/histp.m toolboxes/FullBNT-1.0.7/netlab3.3/hmc.m toolboxes/FullBNT-1.0.7/netlab3.3/kmeansNetlab.m toolboxes/FullBNT-1.0.7/netlab3.3/knn.m toolboxes/FullBNT-1.0.7/netlab3.3/knnfwd.m toolboxes/FullBNT-1.0.7/netlab3.3/linef.m toolboxes/FullBNT-1.0.7/netlab3.3/linemin.m toolboxes/FullBNT-1.0.7/netlab3.3/maxitmess.m toolboxes/FullBNT-1.0.7/netlab3.3/mdn.m toolboxes/FullBNT-1.0.7/netlab3.3/mdn2gmm.m toolboxes/FullBNT-1.0.7/netlab3.3/mdndist2.m toolboxes/FullBNT-1.0.7/netlab3.3/mdnerr.m toolboxes/FullBNT-1.0.7/netlab3.3/mdnfwd.m toolboxes/FullBNT-1.0.7/netlab3.3/mdngrad.m toolboxes/FullBNT-1.0.7/netlab3.3/mdninit.m toolboxes/FullBNT-1.0.7/netlab3.3/mdnnet.mat toolboxes/FullBNT-1.0.7/netlab3.3/mdnpak.m toolboxes/FullBNT-1.0.7/netlab3.3/mdnpost.m toolboxes/FullBNT-1.0.7/netlab3.3/mdnprob.m toolboxes/FullBNT-1.0.7/netlab3.3/mdnunpak.m toolboxes/FullBNT-1.0.7/netlab3.3/metrop.m toolboxes/FullBNT-1.0.7/netlab3.3/minbrack.m toolboxes/FullBNT-1.0.7/netlab3.3/mlp.m toolboxes/FullBNT-1.0.7/netlab3.3/mlpbkp.m toolboxes/FullBNT-1.0.7/netlab3.3/mlpderiv.m toolboxes/FullBNT-1.0.7/netlab3.3/mlperr.m toolboxes/FullBNT-1.0.7/netlab3.3/mlpevfwd.m toolboxes/FullBNT-1.0.7/netlab3.3/mlpfwd.m toolboxes/FullBNT-1.0.7/netlab3.3/mlpgrad.m toolboxes/FullBNT-1.0.7/netlab3.3/mlphdotv.m toolboxes/FullBNT-1.0.7/netlab3.3/mlphess.m toolboxes/FullBNT-1.0.7/netlab3.3/mlphint.m toolboxes/FullBNT-1.0.7/netlab3.3/mlpinit.m toolboxes/FullBNT-1.0.7/netlab3.3/mlppak.m toolboxes/FullBNT-1.0.7/netlab3.3/mlpprior.m toolboxes/FullBNT-1.0.7/netlab3.3/mlptrain.m toolboxes/FullBNT-1.0.7/netlab3.3/mlpunpak.m toolboxes/FullBNT-1.0.7/netlab3.3/netderiv.m toolboxes/FullBNT-1.0.7/netlab3.3/neterr.m toolboxes/FullBNT-1.0.7/netlab3.3/netevfwd.m toolboxes/FullBNT-1.0.7/netlab3.3/netgrad.m toolboxes/FullBNT-1.0.7/netlab3.3/nethess.m toolboxes/FullBNT-1.0.7/netlab3.3/netinit.m toolboxes/FullBNT-1.0.7/netlab3.3/netlab3.3.zip toolboxes/FullBNT-1.0.7/netlab3.3/netlogo.mat toolboxes/FullBNT-1.0.7/netlab3.3/netopt.m toolboxes/FullBNT-1.0.7/netlab3.3/netpak.m toolboxes/FullBNT-1.0.7/netlab3.3/netunpak.m toolboxes/FullBNT-1.0.7/netlab3.3/oilTrn.dat toolboxes/FullBNT-1.0.7/netlab3.3/oilTst.dat toolboxes/FullBNT-1.0.7/netlab3.3/olgd.m toolboxes/FullBNT-1.0.7/netlab3.3/pca.m toolboxes/FullBNT-1.0.7/netlab3.3/plotmat.m toolboxes/FullBNT-1.0.7/netlab3.3/ppca.m toolboxes/FullBNT-1.0.7/netlab3.3/quasinew.m toolboxes/FullBNT-1.0.7/netlab3.3/rbf.m toolboxes/FullBNT-1.0.7/netlab3.3/rbfbkp.m toolboxes/FullBNT-1.0.7/netlab3.3/rbfderiv.m toolboxes/FullBNT-1.0.7/netlab3.3/rbferr.m toolboxes/FullBNT-1.0.7/netlab3.3/rbfevfwd.m toolboxes/FullBNT-1.0.7/netlab3.3/rbffwd.m toolboxes/FullBNT-1.0.7/netlab3.3/rbfgrad.m toolboxes/FullBNT-1.0.7/netlab3.3/rbfhess.m toolboxes/FullBNT-1.0.7/netlab3.3/rbfjacob.m toolboxes/FullBNT-1.0.7/netlab3.3/rbfpak.m toolboxes/FullBNT-1.0.7/netlab3.3/rbfprior.m toolboxes/FullBNT-1.0.7/netlab3.3/rbfsetbf.m toolboxes/FullBNT-1.0.7/netlab3.3/rbfsetfw.m toolboxes/FullBNT-1.0.7/netlab3.3/rbftrain.m toolboxes/FullBNT-1.0.7/netlab3.3/rbfunpak.m toolboxes/FullBNT-1.0.7/netlab3.3/rosegrad.m toolboxes/FullBNT-1.0.7/netlab3.3/rosen.m toolboxes/FullBNT-1.0.7/netlab3.3/scg.m toolboxes/FullBNT-1.0.7/netlab3.3/som.m toolboxes/FullBNT-1.0.7/netlab3.3/somfwd.m toolboxes/FullBNT-1.0.7/netlab3.3/sompak.m toolboxes/FullBNT-1.0.7/netlab3.3/somtrain.m toolboxes/FullBNT-1.0.7/netlab3.3/somunpak.m toolboxes/FullBNT-1.0.7/netlab3.3/xor.dat toolboxes/FullBNT-1.0.7/netlabKPM/CVS/Entries toolboxes/FullBNT-1.0.7/netlabKPM/CVS/Repository toolboxes/FullBNT-1.0.7/netlabKPM/CVS/Root toolboxes/FullBNT-1.0.7/netlabKPM/README.txt toolboxes/FullBNT-1.0.7/netlabKPM/demgmm1_movie.m toolboxes/FullBNT-1.0.7/netlabKPM/evidence_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/glmerr_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/glmgrad_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/glmhess_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/glmtrain_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/gmm1.avi toolboxes/FullBNT-1.0.7/netlabKPM/gmmem2.m toolboxes/FullBNT-1.0.7/netlabKPM/gmmem_multi_restart.m toolboxes/FullBNT-1.0.7/netlabKPM/kmeans_demo.m toolboxes/FullBNT-1.0.7/netlabKPM/mlperr_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/mlpgrad_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/mlphdotv_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/mlphess_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/neterr_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/netgrad_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/nethess_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/netopt_weighted.m toolboxes/FullBNT-1.0.7/netlabKPM/process_options.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/AuditoryToolboxTechReport.pdf toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/CorrelogramArray.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/CorrelogramFrame.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/CorrelogramMovie.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/CorrelogramPitch.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/DesignLyonFilters.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/ERBFilterBank.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/ERBSpace.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/EpsilonFromTauFS.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/FMPoints.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/FreqResp.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/LyonPassiveEar.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/MakeERBFilters.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/MakeVowel.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/MeddisHairCell.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/README toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/SecondOrderFilter.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/SeneffEar.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/SeneffEarSetup.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/SetGain.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/WhiteVowel.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/agc.dll toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/agc.mex toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/agc.mexsg toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/agc.mexsg64 toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/agc.mexsol toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/contents.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/dtw.mexlx toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/dtw.mexsg toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/dtw.mexsg64 toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/dtw.mexsol toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/inverseagc.dll toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/inverseagc.mex toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/inverseagc.mexsg toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/inverseagc.mexsg64 toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/inverseagc.mexsol toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/invsoscascade.dll toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/invsoscascade.mex toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/invsoscascade.mexsg toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/invsoscascade.mexsg64 toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/invsoscascade.mexsol toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/mfcc.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/proclpc.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/rasta.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/soscascade.dll toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/soscascade.mex toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/soscascade.mexsg toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/soscascade.mexsg64 toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/soscascade.mexsol toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/sosfilters.dll toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/sosfilters.mex toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/sosfilters.mexsg toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/sosfilters.mexsg64 toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/sosfilters.mexsol toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/spectrogram.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/synlpc.m toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/tapestry.wav toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/test_auditory.m toolboxes/MIRtoolbox1.3.2/License.txt toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miraudio/miraudio.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miraudio/mirplay.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miraudio/mirsave.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miraudio/plus.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miraudio/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirautocor/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirautocor/mirautocor.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirautocor/mtimes.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirautocor/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mircepstrum/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mircepstrum/mircepstrum.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mircepstrum/mtimes.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mircepstrum/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirchromagram/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirchromagram/mirchromagram.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirchromagram/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirclassify/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirclassify/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirclassify/mirclassify.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/combine.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/exportation.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/gettmp.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/intersect.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/isframed.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/log.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/mirdata.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/mirdisplay.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/mpower.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/mtimes.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/plus.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/settmp.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/evaleach.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/getsampling.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/isframed.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/mirdesign.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/mtimes.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/plus.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/setresampling.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miremotion/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miremotion/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miremotion/miremotion.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miremotion/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miremotion/space.png toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/mirenvelope.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/mirplay.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/mirsave.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirhisto/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirhisto/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirhisto/mirhisto.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirhisto/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeysom/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeysom/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeysom/keysomaudiodata.mat toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeysom/mirkeysom.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeysom/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeystrength/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeystrength/mirkeystrength.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeystrength/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmatrix/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmatrix/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmatrix/mirmatrix.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmfcc/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmfcc/mirmfcc.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmfcc/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmidi/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmidi/mirmidi.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmidi/mirplay.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmidi/mirsave.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpattern/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpattern/mirpattern.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpattern/mirplay.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpitch/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpitch/mirpitch.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpitch/mirsave.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpitch/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirquery/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirquery/mirplay.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirquery/mirquery.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/corrcoef.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/exportation.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/mirsave.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/mirscalar.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirsimatrix/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirsimatrix/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirsimatrix/mirsimatrix.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirsimatrix/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirspectrum/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirspectrum/mirspectrum.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirspectrum/mtimes.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirspectrum/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/mirstruct.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/subsasgn.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/subsref.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtemporal/display.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtemporal/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtemporal/mirtemporal.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtemporal/plus.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtemporal/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtonalcentroid/get.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtonalcentroid/mirtonalcentroid.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtonalcentroid/set.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/Contents.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/MakeERBFilters.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/aiffread.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/center.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/combinepeaks.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/convolve2.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/displot.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/emd_wrapper.mexmaci toolboxes/MIRtoolbox1.3.2/MIRToolbox/emd_wrapper.mexmaci64 toolboxes/MIRtoolbox1.3.2/MIRToolbox/emd_wrapper.mexw32 toolboxes/MIRtoolbox1.3.2/MIRToolbox/gomezprofs.mat toolboxes/MIRtoolbox1.3.2/MIRToolbox/haspeaks.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/hwr.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/isamir.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirattacks.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirattackslope.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirattacktime.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirauditory.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirbeatspectrum.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirbrightness.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mircentroid.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirchunklim.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mircluster.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mircompute.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirdist.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirentropy.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirerror.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mireval.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mireventdensity.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirexport.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirfeatures.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirfilterbank.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirflatness.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirfluctuation.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirflux.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirframe.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirframenow.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirfunction.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirgetdata.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirgetrange.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirhcdf.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirinharmonicity.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirkey.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirkurtosis.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirlength.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirlowenergy.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirmap.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirmean.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirmode.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirnovelty.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mironsets.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/miroptions.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirparallel.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirpeaks.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirplay.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirpulseclarity.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirread.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirregularity.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirrms.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirrolloff.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirroughness.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirsave.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirsegment.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirskewness.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirspread.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirstat.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirstd.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirsum.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirsummary.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirtempo.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirtimes.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirtype.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirverbose.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirwaitbar.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirzerocross.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3info.exe toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3info.glnx86 toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3info.mac toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3info.maci toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3info.maci64 toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3read.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3write.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/mpg123.exe toolboxes/MIRtoolbox1.3.2/MIRToolbox/mpg123.glnx86 toolboxes/MIRtoolbox1.3.2/MIRToolbox/mpg123.mac toolboxes/MIRtoolbox1.3.2/MIRToolbox/mpg123.maci toolboxes/MIRtoolbox1.3.2/MIRToolbox/mpg123.maci64 toolboxes/MIRtoolbox1.3.2/MIRToolbox/mtimescell.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/netlabgmminit.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/netlabkmeans.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/nthoutput.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/num2col.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/openbdf.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/peaksegments.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/pluscell.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/purgedata.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/readbdf.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/surfplot.m toolboxes/MIRtoolbox1.3.2/MIRToolbox/uncell.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amaj3.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amaj4.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amaj5.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amin3.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amin4.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amin5.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Cmaj.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/czardas.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo0grandbuffet.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo1pitch.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo2timbre.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo3tempo.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo4segmentation.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo5export.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo6curves.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo7tonality.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo8classification.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo9retrieval.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/guitar.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/laksin.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/mirdemo.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/mirtest.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/movie1.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/movie2.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/pianoA4.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/pianoF4.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/ragtime.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq011.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq012.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq013.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq014.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq015.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq016.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq017.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq018.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl011.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl012.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl013.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl014.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl015.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl016.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl017.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl018.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md011.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md012.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md013.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md014.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md015.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md016.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md017.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md018.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm011.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm012.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm013.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm014.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm015.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm016.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm017.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm018.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/bq001.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/bq002.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/bq003.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/bq004.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/bq005.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/cl001.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/cl002.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/cl003.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/cl004.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/cl005.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/md001.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/md002.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/md003.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/md004.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/md005.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/rm001.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/rm002.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/rm003.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/rm004.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/rm005.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/trumpet.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/tutorial.m toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/valse_triste_happy.wav toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/vivaldi.wav toolboxes/MIRtoolbox1.3.2/ReleaseHistory.pdf toolboxes/MIRtoolbox1.3.2/manual1.3.2.pdf toolboxes/MIRtoolbox1.3.2/overview.pdf toolboxes/MIRtoolbox1.3.2/readme.txt toolboxes/MIRtoolbox1.3.2/somtoolbox/Contents.m toolboxes/MIRtoolbox1.3.2/somtoolbox/Copyright.txt toolboxes/MIRtoolbox1.3.2/somtoolbox/License.txt toolboxes/MIRtoolbox1.3.2/somtoolbox/cca.m toolboxes/MIRtoolbox1.3.2/somtoolbox/db_index.m toolboxes/MIRtoolbox1.3.2/somtoolbox/hits.m toolboxes/MIRtoolbox1.3.2/somtoolbox/iris.data toolboxes/MIRtoolbox1.3.2/somtoolbox/kmeans_clusters.m toolboxes/MIRtoolbox1.3.2/somtoolbox/knn.m toolboxes/MIRtoolbox1.3.2/somtoolbox/knn_old.m toolboxes/MIRtoolbox1.3.2/somtoolbox/lvq1.m toolboxes/MIRtoolbox1.3.2/somtoolbox/lvq3.m toolboxes/MIRtoolbox1.3.2/somtoolbox/nanstats.m toolboxes/MIRtoolbox1.3.2/somtoolbox/neural_gas.m toolboxes/MIRtoolbox1.3.2/somtoolbox/pcaproj.m toolboxes/MIRtoolbox1.3.2/somtoolbox/preprocess.m toolboxes/MIRtoolbox1.3.2/somtoolbox/rep_utils.m toolboxes/MIRtoolbox1.3.2/somtoolbox/sammon.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_autolabel.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_barplane.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_batchtrain.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_bmucolor.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_bmus.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_cldist.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clget.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_cllinkage.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clplot.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clset.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clspread.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clstruct.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clustercolor.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_cod2ind.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_colorcode.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_coloring.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_connection.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_cplane.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_data_struct.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_demo1.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_demo2.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_demo3.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_demo4.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dendrogram.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_denormalize.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_distortion.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_distortion3.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_divide.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dmat.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dmatclusters.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dmatminima.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dreval.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_drmake.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_drsignif.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_estimate_gmm.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_eucdist2.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_fillnans.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_fuzzycolor.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_gapindex.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_grid.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_gui.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_hits.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_ind2cod.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_ind2sub.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_info.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_kmeans.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_kmeanscolor.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_kmeanscolor2.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_label.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_label2num.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_lininit.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_linkage.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_make.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_map_struct.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_mdist.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_modify_dataset.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_neighborhood.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_neighbors.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_neighf.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_norm_variable.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_normalize.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_normcolor.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_order_cplanes.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_pieplane.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_plotmatrix.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_plotplane.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_probability_gmm.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_projections.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_projections_plot.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_prototrain.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_quality.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_randinit.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_read_cod.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_read_data.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_recolorbar.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_select.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_seqtrain.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_set.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_show.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_show_add.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_show_clear.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_show_gui.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_sompaktrain.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_stats.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_stats_plot.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_stats_report.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_stats_table.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_sub2ind.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_supervised.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_table_modify.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_table_print.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_table_struct.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_topol_struct.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_train_struct.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_trajectory.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_umat.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_unit_coords.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_unit_dists.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_unit_neighs.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_use_vs1.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_use_vs2.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_vis_coords.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_vs1to2.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_vs2to1.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_write_cod.m toolboxes/MIRtoolbox1.3.2/somtoolbox/som_write_data.m toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_gui.m toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_init.m toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_init_gui.m toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_rb_control.m toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_sammon.m toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_sammon_gui.m toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_train.m toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_train_gui.m toolboxes/MIRtoolbox1.3.2/somtoolbox/somtoolbox.m toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_PlaneAxisProperties.m toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_footnote.m toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_footnoteButtonDownFcn.m toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_grid_struct.m toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_patch.m toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_planeGetArgs.m toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_show_gui_comp.m toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_show_gui_tool.m toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_som_show_data.m toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_trajgui.m toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_valuetype.m toolboxes/RBM/Main.m toolboxes/RBM/classify.m toolboxes/RBM/discrete2softmax.m toolboxes/RBM/gen_classify.m toolboxes/RBM/gen_evaluate.m toolboxes/RBM/gen_training_rbm.m toolboxes/RBM/license.txt toolboxes/RBM/logistic.m toolboxes/RBM/lowest_fenergy.m toolboxes/RBM/observe_reconstruction.m toolboxes/RBM/softmax2discrete.m toolboxes/RBM/softmax_activation.m toolboxes/RBM/training_rbm.m toolboxes/SVM-light/LICENSE.txt toolboxes/SVM-light/Readme_optimization_relative_constraints.txt toolboxes/SVM-light/SVM-Light Support Vector Machine.htm toolboxes/SVM-light/example1/test.dat toolboxes/SVM-light/example1/train.dat toolboxes/SVM-light/example1/words toolboxes/SVM-light/example2/test.dat toolboxes/SVM-light/example2/train_induction.dat toolboxes/SVM-light/example2/train_transduction.dat toolboxes/SVM-light/example2/words toolboxes/SVM-light/example3/test.dat toolboxes/SVM-light/example3/train.dat toolboxes/SVM-light/src/LICENSE.txt toolboxes/SVM-light/src/Makefile toolboxes/SVM-light/src/kernel.h toolboxes/SVM-light/src/svm_classify.c toolboxes/SVM-light/src/svm_common.c toolboxes/SVM-light/src/svm_common.h toolboxes/SVM-light/src/svm_hideo.c toolboxes/SVM-light/src/svm_learn.c toolboxes/SVM-light/src/svm_learn.h toolboxes/SVM-light/src/svm_learn_main.c toolboxes/SVM-light/src/svm_loqo.c toolboxes/SVM-light/svm_classify.exe toolboxes/SVM-light/svm_learn.exe toolboxes/SVM-light/svm_light_faq.html toolboxes/_python_lib/pylast/.build toolboxes/_python_lib/pylast/COPYING toolboxes/_python_lib/pylast/INSTALL toolboxes/_python_lib/pylast/README toolboxes/_python_lib/pylast/pylast.py toolboxes/_python_lib/pylast/setup.py toolboxes/bioakustik_tools/conversion/extract_buchfink_xls.m toolboxes/bioakustik_tools/conversion/found_time_make_txt.m toolboxes/bioakustik_tools/conversion/hhmmss_to_s.m toolboxes/bioakustik_tools/conversion/process_options.m toolboxes/bioakustik_tools/conversion/s_to_hhmmss.m toolboxes/bioakustik_tools/filesys/find_time_and_rename.m toolboxes/bioakustik_tools/filesys/forAllFilesInDir.m toolboxes/bioakustik_tools/filesys/pathsdiff.m toolboxes/bioakustik_tools/filesys/pathsdiff_mac.m toolboxes/bioakustik_tools/math/dist.m toolboxes/bioakustik_tools/math/maxsum.m toolboxes/bioakustik_tools/sp/acorr2peaks.m toolboxes/bioakustik_tools/sp/peaks.m toolboxes/bioakustik_tools/sp/seq_wavwrite.m toolboxes/bioakustik_tools/strings/escape.m toolboxes/bioakustik_tools/strings/explode.m toolboxes/bioakustik_tools/strings/substr.m toolboxes/bioakustik_tools/visualisation/datarawplot.m toolboxes/bioakustik_tools/visualisation/dataspecgram.m toolboxes/bioakustik_tools/visualisation/datawavplot.m toolboxes/bioakustik_tools/visualisation/datawavstem.m toolboxes/bioakustik_tools/visualisation/filespecgram.m toolboxes/distance_learning/mlr/.gitignore toolboxes/distance_learning/mlr/LICENSE toolboxes/distance_learning/mlr/MANIFEST toolboxes/distance_learning/mlr/README toolboxes/distance_learning/mlr/Wine.mat toolboxes/distance_learning/mlr/cuttingPlane/cpGradientDODMKL.m toolboxes/distance_learning/mlr/cuttingPlane/cpGradientDiag.m toolboxes/distance_learning/mlr/cuttingPlane/cpGradientDiagMKL.m toolboxes/distance_learning/mlr/cuttingPlane/cpGradientFull.m toolboxes/distance_learning/mlr/cuttingPlane/cpGradientFullMKL.m toolboxes/distance_learning/mlr/cuttingPlane/cuttingPlaneFull.m toolboxes/distance_learning/mlr/cuttingPlane/cuttingPlaneRandom.m toolboxes/distance_learning/mlr/distance/distanceDODMKL.m toolboxes/distance_learning/mlr/distance/distanceDiag.m toolboxes/distance_learning/mlr/distance/distanceDiagMKL.m toolboxes/distance_learning/mlr/distance/distanceFull.m toolboxes/distance_learning/mlr/distance/distanceFullMKL.m toolboxes/distance_learning/mlr/distance/setDistanceDODMKL.m toolboxes/distance_learning/mlr/distance/setDistanceDiag.m toolboxes/distance_learning/mlr/distance/setDistanceDiagMKL.m toolboxes/distance_learning/mlr/distance/setDistanceFull.m toolboxes/distance_learning/mlr/distance/setDistanceFullMKL.m toolboxes/distance_learning/mlr/dual/dualWDiag.m toolboxes/distance_learning/mlr/dual/dualWDiagMKL.m toolboxes/distance_learning/mlr/dual/dualWLinear.m toolboxes/distance_learning/mlr/dual/dualWMKL.m toolboxes/distance_learning/mlr/dual/structKernelDiag.m toolboxes/distance_learning/mlr/dual/structKernelDiagMKL.m toolboxes/distance_learning/mlr/dual/structKernelLinear.m toolboxes/distance_learning/mlr/dual/structKernelMKL.m toolboxes/distance_learning/mlr/feasible/feasibleDODMKL.m toolboxes/distance_learning/mlr/feasible/feasibleDiag.m toolboxes/distance_learning/mlr/feasible/feasibleDiagMKL.m toolboxes/distance_learning/mlr/feasible/feasibleFull.m toolboxes/distance_learning/mlr/feasible/feasibleFullMKL.m toolboxes/distance_learning/mlr/initialize/initializeDODMKL.m toolboxes/distance_learning/mlr/initialize/initializeDiag.m toolboxes/distance_learning/mlr/initialize/initializeDiagMKL.m toolboxes/distance_learning/mlr/initialize/initializeFull.m toolboxes/distance_learning/mlr/initialize/initializeFullMKL.m toolboxes/distance_learning/mlr/loss/lossHinge.m toolboxes/distance_learning/mlr/loss/lossHingeDODMKL.m toolboxes/distance_learning/mlr/loss/lossHingeDiagMKL.m toolboxes/distance_learning/mlr/loss/lossHingeFullMKL.m toolboxes/distance_learning/mlr/metricPsi/metricPsiMRR.m toolboxes/distance_learning/mlr/metricPsi/metricPsiPO.m toolboxes/distance_learning/mlr/mlr_demo.m toolboxes/distance_learning/mlr/mlr_plot.m toolboxes/distance_learning/mlr/mlr_test.m toolboxes/distance_learning/mlr/mlr_train.m toolboxes/distance_learning/mlr/mlr_train_primal.m toolboxes/distance_learning/mlr/readme.txt toolboxes/distance_learning/mlr/regularize/regularizeKernel.m toolboxes/distance_learning/mlr/regularize/regularizeMKLDOD.m toolboxes/distance_learning/mlr/regularize/regularizeMKLDiag.m toolboxes/distance_learning/mlr/regularize/regularizeMKLFull.m toolboxes/distance_learning/mlr/regularize/regularizeNone.m toolboxes/distance_learning/mlr/regularize/regularizeTraceDiag.m toolboxes/distance_learning/mlr/regularize/regularizeTraceFull.m toolboxes/distance_learning/mlr/regularize/regularizeTwoDiag.m toolboxes/distance_learning/mlr/regularize/regularizeTwoFull.m toolboxes/distance_learning/mlr/rmlr_demo.m toolboxes/distance_learning/mlr/rmlr_train.m toolboxes/distance_learning/mlr/separationOracle/separationOracleAUC.m toolboxes/distance_learning/mlr/separationOracle/separationOracleKNN.m toolboxes/distance_learning/mlr/separationOracle/separationOracleMAP.m toolboxes/distance_learning/mlr/separationOracle/separationOracleMRR.m toolboxes/distance_learning/mlr/separationOracle/separationOracleNDCG.m toolboxes/distance_learning/mlr/separationOracle/separationOraclePrecAtK.m toolboxes/distance_learning/mlr/thresh/threshFull_admmMixed.m toolboxes/distance_learning/mlr/thresh/threshFull_mixed.m toolboxes/distance_learning/mlr/util/Makefile toolboxes/distance_learning/mlr/util/PsdToEdm.m toolboxes/distance_learning/mlr/util/binarysearch.c toolboxes/distance_learning/mlr/util/cummax.c toolboxes/distance_learning/mlr/util/dbprint.m toolboxes/distance_learning/mlr/util/distToFrom.m toolboxes/distance_learning/mlr/util/lcprog.m toolboxes/distance_learning/mlr/util/mlr_admm.m toolboxes/distance_learning/mlr/util/mlr_solver.m toolboxes/distance_learning/mlr/util/parsepvpairs.m toolboxes/distance_learning/mlr/util/qplcprog.m toolboxes/distance_learning/mlr/util/rmlr_admm.m toolboxes/distance_learning/mlr/util/soft_classify.m toolboxes/graph_visualisation/bin/GVUI.exe toolboxes/graph_visualisation/bin/GdiPlus.dll toolboxes/graph_visualisation/bin/Gvedit.exe toolboxes/graph_visualisation/bin/Pathplan.dll toolboxes/graph_visualisation/bin/acyclic.exe toolboxes/graph_visualisation/bin/bcomps.exe toolboxes/graph_visualisation/bin/ccomps.exe toolboxes/graph_visualisation/bin/cdt.dll toolboxes/graph_visualisation/bin/cgraph.dll toolboxes/graph_visualisation/bin/circo.exe toolboxes/graph_visualisation/bin/config6 toolboxes/graph_visualisation/bin/diffimg.exe toolboxes/graph_visualisation/bin/dijkstra.exe toolboxes/graph_visualisation/bin/dot.exe toolboxes/graph_visualisation/bin/dotty.exe toolboxes/graph_visualisation/bin/fc-cache.exe toolboxes/graph_visualisation/bin/fc-cat.exe toolboxes/graph_visualisation/bin/fc-list.exe toolboxes/graph_visualisation/bin/fc-match.exe toolboxes/graph_visualisation/bin/fdp.exe toolboxes/graph_visualisation/bin/gc.exe toolboxes/graph_visualisation/bin/glut32.dll toolboxes/graph_visualisation/bin/graph.dll toolboxes/graph_visualisation/bin/gvc.dll toolboxes/graph_visualisation/bin/gvcolor.exe toolboxes/graph_visualisation/bin/gvgen.exe toolboxes/graph_visualisation/bin/gvpack.exe toolboxes/graph_visualisation/bin/gvplugin_core.dll toolboxes/graph_visualisation/bin/gvplugin_dot_layout.dll toolboxes/graph_visualisation/bin/gvplugin_gd.dll toolboxes/graph_visualisation/bin/gvplugin_gdiplus.dll toolboxes/graph_visualisation/bin/gvplugin_neato_layout.dll toolboxes/graph_visualisation/bin/gvplugin_pango.dll toolboxes/graph_visualisation/bin/gvpr.exe toolboxes/graph_visualisation/bin/gxl2gv.exe toolboxes/graph_visualisation/bin/iconv.dll toolboxes/graph_visualisation/bin/intl.dll toolboxes/graph_visualisation/bin/jpeg62.dll toolboxes/graph_visualisation/bin/lefty.exe toolboxes/graph_visualisation/bin/libatk-1.0-0.dll toolboxes/graph_visualisation/bin/libcairo-2.dll toolboxes/graph_visualisation/bin/libexpat.dll toolboxes/graph_visualisation/bin/libfontconfig-1.dll toolboxes/graph_visualisation/bin/libfreetype-6.dll toolboxes/graph_visualisation/bin/libgdk-win32-2.0-0.dll toolboxes/graph_visualisation/bin/libgdk_pixbuf-2.0-0.dll toolboxes/graph_visualisation/bin/libgdkglext-win32-1.0-0.dll toolboxes/graph_visualisation/bin/libglade-2.0-0.dll toolboxes/graph_visualisation/bin/libglib-2.0-0.dll toolboxes/graph_visualisation/bin/libgmodule-2.0-0.dll toolboxes/graph_visualisation/bin/libgobject-2.0-0.dll toolboxes/graph_visualisation/bin/libgtk-win32-2.0-0.dll toolboxes/graph_visualisation/bin/libgtkglext-win32-1.0-0.dll toolboxes/graph_visualisation/bin/libltdl-3.dll toolboxes/graph_visualisation/bin/libpango-1.0-0.dll toolboxes/graph_visualisation/bin/libpangocairo-1.0-0.dll toolboxes/graph_visualisation/bin/libpangoft2-1.0-0.dll toolboxes/graph_visualisation/bin/libpangowin32-1.0-0.dll toolboxes/graph_visualisation/bin/libpng12.dll toolboxes/graph_visualisation/bin/libxml2.dll toolboxes/graph_visualisation/bin/lneato.exe toolboxes/graph_visualisation/bin/ltdl.dll toolboxes/graph_visualisation/bin/mm2gv.exe toolboxes/graph_visualisation/bin/neato.exe toolboxes/graph_visualisation/bin/nop.exe toolboxes/graph_visualisation/bin/props.txt toolboxes/graph_visualisation/bin/prune.exe toolboxes/graph_visualisation/bin/regex_win32.dll toolboxes/graph_visualisation/bin/sccmap.exe toolboxes/graph_visualisation/bin/sfdp.exe toolboxes/graph_visualisation/bin/smyrna.exe toolboxes/graph_visualisation/bin/tred.exe toolboxes/graph_visualisation/bin/twopi.exe toolboxes/graph_visualisation/bin/unflatten.exe toolboxes/graph_visualisation/bin/vmalloc.dll toolboxes/graph_visualisation/bin/zlib1.dll toolboxes/graph_visualisation/etc/fonts/conf.avail/10-autohint.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/10-no-sub-pixel.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/10-sub-pixel-bgr.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/10-sub-pixel-rgb.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/10-sub-pixel-vbgr.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/10-sub-pixel-vrgb.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/10-unhinted.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/20-fix-globaladvance.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/20-lohit-gujarati.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/20-unhint-small-vera.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/30-amt-aliases.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/30-urw-aliases.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/40-generic.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/49-sansserif.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/50-user.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/51-local.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/60-latin.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/65-fonts-persian.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/65-nonlatin.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/69-unifont.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/70-no-bitmaps.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/70-yes-bitmaps.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/80-delicious.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/90-synthetic.conf toolboxes/graph_visualisation/etc/fonts/conf.avail/README toolboxes/graph_visualisation/etc/fonts/conf.d/20-fix-globaladvance.conf toolboxes/graph_visualisation/etc/fonts/conf.d/20-lohit-gujarati.conf toolboxes/graph_visualisation/etc/fonts/conf.d/20-unhint-small-vera.conf toolboxes/graph_visualisation/etc/fonts/conf.d/30-amt-aliases.conf toolboxes/graph_visualisation/etc/fonts/conf.d/30-urw-aliases.conf toolboxes/graph_visualisation/etc/fonts/conf.d/40-generic.conf toolboxes/graph_visualisation/etc/fonts/conf.d/49-sansserif.conf toolboxes/graph_visualisation/etc/fonts/conf.d/50-user.conf toolboxes/graph_visualisation/etc/fonts/conf.d/51-local.conf toolboxes/graph_visualisation/etc/fonts/conf.d/60-latin.conf toolboxes/graph_visualisation/etc/fonts/conf.d/65-fonts-persian.conf toolboxes/graph_visualisation/etc/fonts/conf.d/65-nonlatin.conf toolboxes/graph_visualisation/etc/fonts/conf.d/69-unifont.conf toolboxes/graph_visualisation/etc/fonts/conf.d/80-delicious.conf toolboxes/graph_visualisation/etc/fonts/conf.d/90-synthetic.conf toolboxes/graph_visualisation/etc/fonts/fonts.conf toolboxes/graph_visualisation/etc/fonts/fonts.dtd toolboxes/graph_visualisation/etc/gtk-2.0/gdk-pixbuf.loaders toolboxes/graph_visualisation/etc/gtk-2.0/gtk.immodules toolboxes/graph_visualisation/etc/gtk-2.0/gtkrc toolboxes/graph_visualisation/etc/pango/pango.aliases toolboxes/graph_visualisation/etc/pango/pango.modules toolboxes/graph_visualisation/fontconfig_fix.dll toolboxes/graph_visualisation/graphViz4Matlab/demos/graphViz4MatlabDEMO1.m toolboxes/graph_visualisation/graphViz4Matlab/demos/graphViz4MatlabDEMO2.m toolboxes/graph_visualisation/graphViz4Matlab/demos/graphViz4MatlabDEMO3.m toolboxes/graph_visualisation/graphViz4Matlab/demos/largeExample.mat toolboxes/graph_visualisation/graphViz4Matlab/demos/smallExample.mat toolboxes/graph_visualisation/graphViz4Matlab/drawNetwork.m toolboxes/graph_visualisation/graphViz4Matlab/graphViz4Matlab.m toolboxes/graph_visualisation/graphViz4Matlab/graphViz4MatlabRoot.m toolboxes/graph_visualisation/graphViz4Matlab/layouts/Abstractlayout.m toolboxes/graph_visualisation/graphViz4Matlab/layouts/Circlelayout.m toolboxes/graph_visualisation/graphViz4Matlab/layouts/Circularlayout.m toolboxes/graph_visualisation/graphViz4Matlab/layouts/Gridlayout.m toolboxes/graph_visualisation/graphViz4Matlab/layouts/Gvizlayout.m toolboxes/graph_visualisation/graphViz4Matlab/layouts/Radiallayout.m toolboxes/graph_visualisation/graphViz4Matlab/layouts/Randlayout.m toolboxes/graph_visualisation/graphViz4Matlab/layouts/Springlayout.m toolboxes/graph_visualisation/graphViz4Matlab/layouts/Treelayout.m toolboxes/graph_visualisation/graphViz4Matlab/util/addtosystempath.m toolboxes/graph_visualisation/graphViz4Matlab/util/adj2pajek2.m toolboxes/graph_visualisation/graphViz4Matlab/util/findString.m toolboxes/graph_visualisation/graphViz4Matlab/util/glicons.mat toolboxes/graph_visualisation/graphViz4Matlab/util/graphViz4MatlabNode.m toolboxes/graph_visualisation/graphViz4Matlab/util/processArgs.m toolboxes/graph_visualisation/graphViz4Matlab/util/setupPath.m toolboxes/graph_visualisation/graphViz4Matlab/util/tokenize.m toolboxes/graph_visualisation/include/graphviz/arith.h toolboxes/graph_visualisation/include/graphviz/cdt.h toolboxes/graph_visualisation/include/graphviz/cgraph.h toolboxes/graph_visualisation/include/graphviz/color.h toolboxes/graph_visualisation/include/graphviz/geom.h toolboxes/graph_visualisation/include/graphviz/graph.h toolboxes/graph_visualisation/include/graphviz/gvc.h toolboxes/graph_visualisation/include/graphviz/gvcext.h toolboxes/graph_visualisation/include/graphviz/gvcjob.h toolboxes/graph_visualisation/include/graphviz/gvcommon.h toolboxes/graph_visualisation/include/graphviz/gvconfig.h toolboxes/graph_visualisation/include/graphviz/gvplugin.h toolboxes/graph_visualisation/include/graphviz/gvplugin_device.h toolboxes/graph_visualisation/include/graphviz/gvplugin_layout.h toolboxes/graph_visualisation/include/graphviz/gvplugin_loadimage.h toolboxes/graph_visualisation/include/graphviz/gvplugin_render.h toolboxes/graph_visualisation/include/graphviz/gvplugin_textlayout.h toolboxes/graph_visualisation/include/graphviz/pack.h toolboxes/graph_visualisation/include/graphviz/pathgeom.h toolboxes/graph_visualisation/include/graphviz/pathplan.h toolboxes/graph_visualisation/include/graphviz/textpara.h toolboxes/graph_visualisation/include/graphviz/types.h toolboxes/graph_visualisation/include/graphviz/usershape.h toolboxes/graph_visualisation/lib/debug/dll/GdiPlus.dll toolboxes/graph_visualisation/lib/debug/dll/Pathplan.dll toolboxes/graph_visualisation/lib/debug/dll/cdt.dll toolboxes/graph_visualisation/lib/debug/dll/cgraph.dll toolboxes/graph_visualisation/lib/debug/dll/glut32.dll toolboxes/graph_visualisation/lib/debug/dll/graph.dll toolboxes/graph_visualisation/lib/debug/dll/gvc.dll toolboxes/graph_visualisation/lib/debug/dll/gvplugin_core.dll toolboxes/graph_visualisation/lib/debug/dll/gvplugin_dot_layout.dll toolboxes/graph_visualisation/lib/debug/dll/gvplugin_gd.dll toolboxes/graph_visualisation/lib/debug/dll/gvplugin_gdiplus.dll toolboxes/graph_visualisation/lib/debug/dll/gvplugin_neato_layout.dll toolboxes/graph_visualisation/lib/debug/dll/gvplugin_pango.dll toolboxes/graph_visualisation/lib/debug/dll/iconv.dll toolboxes/graph_visualisation/lib/debug/dll/intl.dll toolboxes/graph_visualisation/lib/debug/dll/jpeg62.dll toolboxes/graph_visualisation/lib/debug/dll/libatk-1.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libcairo-2.dll toolboxes/graph_visualisation/lib/debug/dll/libexpat.dll toolboxes/graph_visualisation/lib/debug/dll/libfontconfig-1.dll toolboxes/graph_visualisation/lib/debug/dll/libfreetype-6.dll toolboxes/graph_visualisation/lib/debug/dll/libgdk-win32-2.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libgdk_pixbuf-2.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libgdkglext-win32-1.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libglade-2.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libglib-2.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libgmodule-2.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libgobject-2.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libgtk-win32-2.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libgtkglext-win32-1.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libltdl-3.dll toolboxes/graph_visualisation/lib/debug/dll/libpango-1.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libpangocairo-1.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libpangoft2-1.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libpangowin32-1.0-0.dll toolboxes/graph_visualisation/lib/debug/dll/libpng12.dll toolboxes/graph_visualisation/lib/debug/dll/libxml2.dll toolboxes/graph_visualisation/lib/debug/dll/ltdl.dll toolboxes/graph_visualisation/lib/debug/dll/regex_win32.dll toolboxes/graph_visualisation/lib/debug/dll/vmalloc.dll toolboxes/graph_visualisation/lib/debug/dll/zlib1.dll toolboxes/graph_visualisation/lib/debug/lib/Pathplan.lib toolboxes/graph_visualisation/lib/debug/lib/acyclic.lib toolboxes/graph_visualisation/lib/debug/lib/ast.lib toolboxes/graph_visualisation/lib/debug/lib/bcomps.lib toolboxes/graph_visualisation/lib/debug/lib/ccomps.lib toolboxes/graph_visualisation/lib/debug/lib/cdt.lib toolboxes/graph_visualisation/lib/debug/lib/cgraph.lib toolboxes/graph_visualisation/lib/debug/lib/circogen.lib toolboxes/graph_visualisation/lib/debug/lib/dijkstra.lib toolboxes/graph_visualisation/lib/debug/lib/dot.lib toolboxes/graph_visualisation/lib/debug/lib/dotgen.lib toolboxes/graph_visualisation/lib/debug/lib/expr.lib toolboxes/graph_visualisation/lib/debug/lib/fdpgen.lib toolboxes/graph_visualisation/lib/debug/lib/gc.lib toolboxes/graph_visualisation/lib/debug/lib/gd.lib toolboxes/graph_visualisation/lib/debug/lib/graph.lib toolboxes/graph_visualisation/lib/debug/lib/gts.lib toolboxes/graph_visualisation/lib/debug/lib/gvc.lib toolboxes/graph_visualisation/lib/debug/lib/gvcolor.lib toolboxes/graph_visualisation/lib/debug/lib/gvpack.lib toolboxes/graph_visualisation/lib/debug/lib/gvplugin_core.lib toolboxes/graph_visualisation/lib/debug/lib/gvplugin_dot_layout.lib toolboxes/graph_visualisation/lib/debug/lib/gvplugin_gd.lib toolboxes/graph_visualisation/lib/debug/lib/gvplugin_gdiplus.lib toolboxes/graph_visualisation/lib/debug/lib/gvplugin_neato_layout.lib toolboxes/graph_visualisation/lib/debug/lib/gvplugin_pango.lib toolboxes/graph_visualisation/lib/debug/lib/gvpr.lib toolboxes/graph_visualisation/lib/debug/lib/gvprlib.lib toolboxes/graph_visualisation/lib/debug/lib/gxl2gv.lib toolboxes/graph_visualisation/lib/debug/lib/hs_regex.lib toolboxes/graph_visualisation/lib/debug/lib/ingraphs.lib toolboxes/graph_visualisation/lib/debug/lib/ltdl.lib toolboxes/graph_visualisation/lib/debug/lib/mm2gv.lib toolboxes/graph_visualisation/lib/debug/lib/neatogen.lib toolboxes/graph_visualisation/lib/debug/lib/nop.lib toolboxes/graph_visualisation/lib/debug/lib/osage.lib toolboxes/graph_visualisation/lib/debug/lib/patchwork.lib toolboxes/graph_visualisation/lib/debug/lib/prune.lib toolboxes/graph_visualisation/lib/debug/lib/rbtree.lib toolboxes/graph_visualisation/lib/debug/lib/regex_win32.lib toolboxes/graph_visualisation/lib/debug/lib/sccmap.lib toolboxes/graph_visualisation/lib/debug/lib/sfdp.lib toolboxes/graph_visualisation/lib/debug/lib/sfio.lib toolboxes/graph_visualisation/lib/debug/lib/smyrna.lib toolboxes/graph_visualisation/lib/debug/lib/sparse.lib toolboxes/graph_visualisation/lib/debug/lib/topfish.lib toolboxes/graph_visualisation/lib/debug/lib/tred.lib toolboxes/graph_visualisation/lib/debug/lib/twopigen.lib toolboxes/graph_visualisation/lib/debug/lib/unflatten.lib toolboxes/graph_visualisation/lib/debug/lib/vmalloc.lib toolboxes/graph_visualisation/lib/debug/lib/vpsc.lib toolboxes/graph_visualisation/lib/debug/lib/xdot.lib toolboxes/graph_visualisation/lib/lefty/box.lefty toolboxes/graph_visualisation/lib/lefty/def.lefty toolboxes/graph_visualisation/lib/lefty/dotty.lefty toolboxes/graph_visualisation/lib/lefty/dotty_draw.lefty toolboxes/graph_visualisation/lib/lefty/dotty_edit.lefty toolboxes/graph_visualisation/lib/lefty/dotty_layout.lefty toolboxes/graph_visualisation/lib/lefty/dotty_ui.lefty toolboxes/graph_visualisation/lib/lefty/fractal.lefty toolboxes/graph_visualisation/lib/lefty/fractal2.lefty toolboxes/graph_visualisation/lib/lefty/lefty.psp toolboxes/graph_visualisation/lib/lefty/slides.lefty toolboxes/graph_visualisation/lib/lefty/tree.lefty toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-arabic-fc.dll toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-arabic-lang.dll toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-basic-fc.dll toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-basic-win32.dll toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-hangul-fc.dll toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-hebrew-fc.dll toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-indic-fc.dll toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-indic-lang.dll toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-khmer-fc.dll toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-syriac-fc.dll toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-thai-fc.dll toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-tibetan-fc.dll toolboxes/graph_visualisation/lib/pkgconfig/libcdt.pc toolboxes/graph_visualisation/lib/pkgconfig/libcgraph.pc toolboxes/graph_visualisation/lib/pkgconfig/libgraph.pc toolboxes/graph_visualisation/lib/pkgconfig/libgvc.pc toolboxes/graph_visualisation/lib/pkgconfig/libpathplan.pc toolboxes/graph_visualisation/lib/release/dll/GdiPlus.dll toolboxes/graph_visualisation/lib/release/dll/Pathplan.dll toolboxes/graph_visualisation/lib/release/dll/cdt.dll toolboxes/graph_visualisation/lib/release/dll/cgraph.dll toolboxes/graph_visualisation/lib/release/dll/glut32.dll toolboxes/graph_visualisation/lib/release/dll/graph.dll toolboxes/graph_visualisation/lib/release/dll/gvc.dll toolboxes/graph_visualisation/lib/release/dll/gvplugin_core.dll toolboxes/graph_visualisation/lib/release/dll/gvplugin_dot_layout.dll toolboxes/graph_visualisation/lib/release/dll/gvplugin_gd.dll toolboxes/graph_visualisation/lib/release/dll/gvplugin_gdiplus.dll toolboxes/graph_visualisation/lib/release/dll/gvplugin_neato_layout.dll toolboxes/graph_visualisation/lib/release/dll/gvplugin_pango.dll toolboxes/graph_visualisation/lib/release/dll/iconv.dll toolboxes/graph_visualisation/lib/release/dll/intl.dll toolboxes/graph_visualisation/lib/release/dll/jpeg62.dll toolboxes/graph_visualisation/lib/release/dll/libatk-1.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libcairo-2.dll toolboxes/graph_visualisation/lib/release/dll/libexpat.dll toolboxes/graph_visualisation/lib/release/dll/libfontconfig-1.dll toolboxes/graph_visualisation/lib/release/dll/libfreetype-6.dll toolboxes/graph_visualisation/lib/release/dll/libgdk-win32-2.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libgdk_pixbuf-2.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libgdkglext-win32-1.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libglade-2.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libglib-2.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libgmodule-2.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libgobject-2.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libgtk-win32-2.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libgtkglext-win32-1.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libltdl-3.dll toolboxes/graph_visualisation/lib/release/dll/libpango-1.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libpangocairo-1.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libpangoft2-1.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libpangowin32-1.0-0.dll toolboxes/graph_visualisation/lib/release/dll/libpng12.dll toolboxes/graph_visualisation/lib/release/dll/libxml2.dll toolboxes/graph_visualisation/lib/release/dll/ltdl.dll toolboxes/graph_visualisation/lib/release/dll/regex_win32.dll toolboxes/graph_visualisation/lib/release/dll/vmalloc.dll toolboxes/graph_visualisation/lib/release/dll/zlib1.dll toolboxes/graph_visualisation/lib/release/lib/Pathplan.lib toolboxes/graph_visualisation/lib/release/lib/acyclic.lib toolboxes/graph_visualisation/lib/release/lib/ast.lib toolboxes/graph_visualisation/lib/release/lib/bcomps.lib toolboxes/graph_visualisation/lib/release/lib/ccomps.lib toolboxes/graph_visualisation/lib/release/lib/cdt.lib toolboxes/graph_visualisation/lib/release/lib/cgraph.lib toolboxes/graph_visualisation/lib/release/lib/circogen.lib toolboxes/graph_visualisation/lib/release/lib/dijkstra.lib toolboxes/graph_visualisation/lib/release/lib/dot.lib toolboxes/graph_visualisation/lib/release/lib/dotgen.lib toolboxes/graph_visualisation/lib/release/lib/expr.lib toolboxes/graph_visualisation/lib/release/lib/fdpgen.lib toolboxes/graph_visualisation/lib/release/lib/gc.lib toolboxes/graph_visualisation/lib/release/lib/gd.lib toolboxes/graph_visualisation/lib/release/lib/graph.lib toolboxes/graph_visualisation/lib/release/lib/gts.lib toolboxes/graph_visualisation/lib/release/lib/gvc.lib toolboxes/graph_visualisation/lib/release/lib/gvcolor.lib toolboxes/graph_visualisation/lib/release/lib/gvpack.lib toolboxes/graph_visualisation/lib/release/lib/gvplugin_core.lib toolboxes/graph_visualisation/lib/release/lib/gvplugin_dot_layout.lib toolboxes/graph_visualisation/lib/release/lib/gvplugin_gd.lib toolboxes/graph_visualisation/lib/release/lib/gvplugin_gdiplus.lib toolboxes/graph_visualisation/lib/release/lib/gvplugin_neato_layout.lib toolboxes/graph_visualisation/lib/release/lib/gvplugin_pango.lib toolboxes/graph_visualisation/lib/release/lib/gvpr.lib toolboxes/graph_visualisation/lib/release/lib/gvprlib.lib toolboxes/graph_visualisation/lib/release/lib/gxl2gv.lib toolboxes/graph_visualisation/lib/release/lib/hs_regex.lib toolboxes/graph_visualisation/lib/release/lib/ingraphs.lib toolboxes/graph_visualisation/lib/release/lib/ltdl.lib toolboxes/graph_visualisation/lib/release/lib/mm2gv.lib toolboxes/graph_visualisation/lib/release/lib/neatogen.lib toolboxes/graph_visualisation/lib/release/lib/nop.lib toolboxes/graph_visualisation/lib/release/lib/osage.lib toolboxes/graph_visualisation/lib/release/lib/patchwork.lib toolboxes/graph_visualisation/lib/release/lib/prune.lib toolboxes/graph_visualisation/lib/release/lib/rbtree.lib toolboxes/graph_visualisation/lib/release/lib/regex_win32.lib toolboxes/graph_visualisation/lib/release/lib/sccmap.lib toolboxes/graph_visualisation/lib/release/lib/sfdp.lib toolboxes/graph_visualisation/lib/release/lib/sfio.lib toolboxes/graph_visualisation/lib/release/lib/smyrna.lib toolboxes/graph_visualisation/lib/release/lib/sparse.lib toolboxes/graph_visualisation/lib/release/lib/topfish.lib toolboxes/graph_visualisation/lib/release/lib/tred.lib toolboxes/graph_visualisation/lib/release/lib/twopigen.lib toolboxes/graph_visualisation/lib/release/lib/unflatten.lib toolboxes/graph_visualisation/lib/release/lib/vmalloc.lib toolboxes/graph_visualisation/lib/release/lib/vpsc.lib toolboxes/graph_visualisation/lib/release/lib/xdot.lib toolboxes/graph_visualisation/share/Thumbs.db toolboxes/graph_visualisation/share/fonts/FreeSans.ttf toolboxes/graph_visualisation/share/graphviz/doc/AUTHORS toolboxes/graph_visualisation/share/graphviz/doc/COPYING toolboxes/graph_visualisation/share/graphviz/doc/ChangeLog toolboxes/graph_visualisation/share/graphviz/doc/Dot.ref toolboxes/graph_visualisation/share/graphviz/doc/NEWS toolboxes/graph_visualisation/share/graphviz/doc/addingLayout.txt toolboxes/graph_visualisation/share/graphviz/doc/cpl1.0.txt toolboxes/graph_visualisation/share/graphviz/doc/fontfaq.txt toolboxes/graph_visualisation/share/graphviz/doc/html/FAQ.html toolboxes/graph_visualisation/share/graphviz/doc/html/GVedit.html toolboxes/graph_visualisation/share/graphviz/doc/html/Gdtclft2.2.5.example.png toolboxes/graph_visualisation/share/graphviz/doc/html/build.html toolboxes/graph_visualisation/share/graphviz/doc/html/char.html toolboxes/graph_visualisation/share/graphviz/doc/html/gd.html toolboxes/graph_visualisation/share/graphviz/doc/html/index.html toolboxes/graph_visualisation/share/graphviz/doc/html/info/Mcircle.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/Mdiamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/Msquare.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/Thumbs.db toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_box.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_crow.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_diamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_dot.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_ediamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_empty.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_forward.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_halfopen.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_inv.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_invdot.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_invempty.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_invodot.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_lteeoldiamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_nohead.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_none.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_normal.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_obox.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_odiamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_odot.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_open.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_tee.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_box.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_crow.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_diamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_dot.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_inv.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_lbox.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_lcrow.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_ldiamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_linv.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_lnormal.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_ltee.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_lvee.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_none.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_normal.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_obox.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_odiamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_odot.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_oinv.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_olbox.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_oldiamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_olinv.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_olnormal.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_onormal.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_orbox.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_ordiamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_orinv.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_ornormal.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rbox.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rcrow.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rdiamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rinv.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rnormal.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rtee.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rvee.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_tee.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_vee.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/arrows.html toolboxes/graph_visualisation/share/graphviz/doc/html/info/attrs.html toolboxes/graph_visualisation/share/graphviz/doc/html/info/back.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/both.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/box.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/box3d.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/circle.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/colorlist.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/colors.html toolboxes/graph_visualisation/share/graphviz/doc/html/info/command.html toolboxes/graph_visualisation/share/graphviz/doc/html/info/component.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/constraint.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/diamond.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/doublecircle.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/doubleoctagon.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/egg.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/ellipse.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/fill.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/folder.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/forward.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/grammar.html toolboxes/graph_visualisation/share/graphviz/doc/html/info/hexagon.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/house.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/html1.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/html2.dot toolboxes/graph_visualisation/share/graphviz/doc/html/info/html2.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/html3.dot toolboxes/graph_visualisation/share/graphviz/doc/html/info/html3.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/html4.dot toolboxes/graph_visualisation/share/graphviz/doc/html/info/html4.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/index.html toolboxes/graph_visualisation/share/graphviz/doc/html/info/invhouse.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/invtrapezium.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/invtriangle.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/lang.html toolboxes/graph_visualisation/share/graphviz/doc/html/info/mrecord.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/nohead.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/none.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/note.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/octagon.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/output.html toolboxes/graph_visualisation/share/graphviz/doc/html/info/parallelogram.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/pentagon.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/plaintext.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/plugins.png toolboxes/graph_visualisation/share/graphviz/doc/html/info/point.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/polygon.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/record.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/record2.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/rect.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/rectangle.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/round.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/sdlshapes.png toolboxes/graph_visualisation/share/graphviz/doc/html/info/septagon.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/shapes.html toolboxes/graph_visualisation/share/graphviz/doc/html/info/tab.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/trapezium.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/triangle.gif toolboxes/graph_visualisation/share/graphviz/doc/html/info/tripleoctagon.gif toolboxes/graph_visualisation/share/graphviz/doc/html/pspdf.png toolboxes/graph_visualisation/share/graphviz/doc/html/schema/arguments.xml toolboxes/graph_visualisation/share/graphviz/doc/html/schema/attributes.xml toolboxes/graph_visualisation/share/graphviz/doc/html/schema/attributes.xslt toolboxes/graph_visualisation/share/graphviz/doc/html/todo.html toolboxes/graph_visualisation/share/graphviz/doc/html/winbuild.html toolboxes/graph_visualisation/share/graphviz/doc/latex_suggestions.txt toolboxes/graph_visualisation/share/graphviz/doc/pdf/acyclic.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/bcomps.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/ccomps.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/cdt.3.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/cgraph.3.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/circo.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/dijkstra.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/dot.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/dotguide.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/dotty.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/dottyguide.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/fdp.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/gc.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/graph.3.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/gv2gxl.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/gvc.3.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/gvcolor.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/gvgen.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/gvpack.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/gvpr.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/gxl2gv.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/lefty.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/leftyguide.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/libguide.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/lneato.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/mm2gv.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/neato.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/neatoguide.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/nop.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/osage.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/pathplan.3.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/prune.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/sccmap.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/tred.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/twopi.1.pdf toolboxes/graph_visualisation/share/graphviz/doc/pdf/unflatten.1.pdf toolboxes/graph_visualisation/share/graphviz/graphs/directed/KW91.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/Latin1.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/NaN.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/abstract.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/alf.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/arrows.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/awilliams.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust1.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust2.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust3.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust4.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust5.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/crazy.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/ctext.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/dfa.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/fig6.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/fsm.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/grammar.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/hashtable.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/honda-tokoro.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/jcctree.gif toolboxes/graph_visualisation/share/graphviz/graphs/directed/jcctree.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/jsort.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/ldbxtried.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/longflat.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/mike.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/nhg.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/oldarrows.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/pgram.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/pm2way.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/pmpipe.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/polypoly.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/proc3d.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/psfonttest.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/record2.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/records.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/records.jpg toolboxes/graph_visualisation/share/graphviz/graphs/directed/records.png toolboxes/graph_visualisation/share/graphviz/graphs/directed/rowe.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/russian.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/russian.jpg toolboxes/graph_visualisation/share/graphviz/graphs/directed/sdh.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/shells.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/states.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/structs.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/switch.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/table.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/train11.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/trapeziumlr.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/tree.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/triedds.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/triedds.jpg toolboxes/graph_visualisation/share/graphviz/graphs/directed/try.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/unix.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/unix2.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/viewfile.gv toolboxes/graph_visualisation/share/graphviz/graphs/directed/viewfile.jpg toolboxes/graph_visualisation/share/graphviz/graphs/directed/world.gif toolboxes/graph_visualisation/share/graphviz/graphs/directed/world.gv toolboxes/graph_visualisation/share/graphviz/graphs/undirected/ER.gv toolboxes/graph_visualisation/share/graphviz/graphs/undirected/Heawood.gv toolboxes/graph_visualisation/share/graphviz/graphs/undirected/Petersen.gv toolboxes/graph_visualisation/share/graphviz/graphs/undirected/ngk10_4.gv toolboxes/graph_visualisation/share/graphviz/graphs/undirected/process.gv toolboxes/graph_visualisation/share/graphviz/lefty/box.lefty toolboxes/graph_visualisation/share/graphviz/lefty/def.lefty toolboxes/graph_visualisation/share/graphviz/lefty/dotty.lefty toolboxes/graph_visualisation/share/graphviz/lefty/dotty_draw.lefty toolboxes/graph_visualisation/share/graphviz/lefty/dotty_edit.lefty toolboxes/graph_visualisation/share/graphviz/lefty/dotty_layout.lefty toolboxes/graph_visualisation/share/graphviz/lefty/dotty_ui.lefty toolboxes/graph_visualisation/share/graphviz/lefty/fractal.lefty toolboxes/graph_visualisation/share/graphviz/lefty/fractal2.lefty toolboxes/graph_visualisation/share/graphviz/lefty/lefty.psp toolboxes/graph_visualisation/share/graphviz/lefty/slides.lefty toolboxes/graph_visualisation/share/graphviz/lefty/tree.lefty toolboxes/graph_visualisation/share/graphviz/smyrna/2D.png toolboxes/graph_visualisation/share/graphviz/smyrna/3D.png toolboxes/graph_visualisation/share/graphviz/smyrna/Thumbs.db toolboxes/graph_visualisation/share/graphviz/smyrna/attr_widgets.dot toolboxes/graph_visualisation/share/graphviz/smyrna/attrs.txt toolboxes/graph_visualisation/share/graphviz/smyrna/center.png toolboxes/graph_visualisation/share/graphviz/smyrna/details.png toolboxes/graph_visualisation/share/graphviz/smyrna/edge.png toolboxes/graph_visualisation/share/graphviz/smyrna/fish.PNG toolboxes/graph_visualisation/share/graphviz/smyrna/fisheye.png toolboxes/graph_visualisation/share/graphviz/smyrna/fit.png toolboxes/graph_visualisation/share/graphviz/smyrna/magnifier.png toolboxes/graph_visualisation/share/graphviz/smyrna/mod_3D.png toolboxes/graph_visualisation/share/graphviz/smyrna/mod_fisheye.png toolboxes/graph_visualisation/share/graphviz/smyrna/mouse_actions.txt toolboxes/graph_visualisation/share/graphviz/smyrna/move.png toolboxes/graph_visualisation/share/graphviz/smyrna/no_fisheye.png toolboxes/graph_visualisation/share/graphviz/smyrna/node.png toolboxes/graph_visualisation/share/graphviz/smyrna/original_smyrna.glade toolboxes/graph_visualisation/share/graphviz/smyrna/pan.png toolboxes/graph_visualisation/share/graphviz/smyrna/preview.png toolboxes/graph_visualisation/share/graphviz/smyrna/rect_select.png toolboxes/graph_visualisation/share/graphviz/smyrna/rect_select2.png toolboxes/graph_visualisation/share/graphviz/smyrna/rotate.png toolboxes/graph_visualisation/share/graphviz/smyrna/smyrna.glade toolboxes/graph_visualisation/share/graphviz/smyrna/template.dot toolboxes/graph_visualisation/share/graphviz/smyrna/zoom.png toolboxes/graph_visualisation/share/graphviz/smyrna/zoomin.png toolboxes/graph_visualisation/share/graphviz/smyrna/zoomout.png toolboxes/graph_visualisation/share/license.rtf toolboxes/graph_visualisation/share/man/man1/acyclic.1 toolboxes/graph_visualisation/share/man/man1/bcomps.1 toolboxes/graph_visualisation/share/man/man1/ccomps.1 toolboxes/graph_visualisation/share/man/man1/circo.1 toolboxes/graph_visualisation/share/man/man1/dijkstra.1 toolboxes/graph_visualisation/share/man/man1/dot.1 toolboxes/graph_visualisation/share/man/man1/dotty.1 toolboxes/graph_visualisation/share/man/man1/fdp.1 toolboxes/graph_visualisation/share/man/man1/gc.1 toolboxes/graph_visualisation/share/man/man1/gv2gxl.1 toolboxes/graph_visualisation/share/man/man1/gvcolor.1 toolboxes/graph_visualisation/share/man/man1/gvgen.1 toolboxes/graph_visualisation/share/man/man1/gvpack.1 toolboxes/graph_visualisation/share/man/man1/gvpr.1 toolboxes/graph_visualisation/share/man/man1/gxl2gv.1 toolboxes/graph_visualisation/share/man/man1/lefty.1 toolboxes/graph_visualisation/share/man/man1/lneato.1 toolboxes/graph_visualisation/share/man/man1/mm2gv.1 toolboxes/graph_visualisation/share/man/man1/neato.1 toolboxes/graph_visualisation/share/man/man1/nop.1 toolboxes/graph_visualisation/share/man/man1/osage.1 toolboxes/graph_visualisation/share/man/man1/prune.1 toolboxes/graph_visualisation/share/man/man1/sccmap.1 toolboxes/graph_visualisation/share/man/man1/tred.1 toolboxes/graph_visualisation/share/man/man1/twopi.1 toolboxes/graph_visualisation/share/man/man1/unflatten.1 toolboxes/graph_visualisation/share/man/man3/cdt.3 toolboxes/graph_visualisation/share/man/man3/cgraph.3 toolboxes/graph_visualisation/share/man/man3/graph.3 toolboxes/graph_visualisation/share/man/man3/gvc.3 toolboxes/graph_visualisation/share/man/man3/pathplan.3 toolboxes/graph_visualisation/share/man/man7/graphviz.7 toolboxes/mp3readwrite/demo_mp3readwrite.m toolboxes/mp3readwrite/html/demo_mp3readwrite.html toolboxes/mp3readwrite/html/demo_mp3readwrite.png toolboxes/mp3readwrite/html/demo_mp3readwrite_01.png toolboxes/mp3readwrite/lame.exe toolboxes/mp3readwrite/lame.glnx86 toolboxes/mp3readwrite/lame.mac toolboxes/mp3readwrite/lame.maci toolboxes/mp3readwrite/lame.maci64 toolboxes/mp3readwrite/lame_enc.dll toolboxes/mp3readwrite/license.txt toolboxes/mp3readwrite/mp3info.exe toolboxes/mp3readwrite/mp3info.glnx86 toolboxes/mp3readwrite/mp3info.mac toolboxes/mp3readwrite/mp3info.maci toolboxes/mp3readwrite/mp3info.maci64 toolboxes/mp3readwrite/mp3read.m toolboxes/mp3readwrite/mp3write.m toolboxes/mp3readwrite/mpg123.exe toolboxes/mp3readwrite/mpg123.glnx86 toolboxes/mp3readwrite/mpg123.mac toolboxes/mp3readwrite/mpg123.maci toolboxes/mp3readwrite/mpg123.maci64 toolboxes/mp3readwrite/piano.wav toolboxes/wget/bin/wget.exe toolboxes/wget/man/cat1/wget.1.txt toolboxes/wget/wget.m toolboxes/xml_toolbox/INSTALL.TXT toolboxes/xml_toolbox/LICENSE.TXT toolboxes/xml_toolbox/matlab.xsd toolboxes/xml_toolbox/strsplit.m toolboxes/xml_toolbox/strsplit.p toolboxes/xml_toolbox/tests/xml_tests.m toolboxes/xml_toolbox/unblank.m toolboxes/xml_toolbox/unblank.p toolboxes/xml_toolbox/xml_format.m toolboxes/xml_toolbox/xml_format.p toolboxes/xml_toolbox/xml_formatany.m toolboxes/xml_toolbox/xml_formatany.p toolboxes/xml_toolbox/xml_help.m toolboxes/xml_toolbox/xml_help.p toolboxes/xml_toolbox/xml_load.m toolboxes/xml_toolbox/xml_load.p toolboxes/xml_toolbox/xml_parse.m toolboxes/xml_toolbox/xml_parse.p toolboxes/xml_toolbox/xml_parseany.m toolboxes/xml_toolbox/xml_parseany.p toolboxes/xml_toolbox/xml_save.m toolboxes/xml_toolbox/xml_save.p toolboxes/xml_toolbox/xml_toolbox-version.txt toolboxes/xml_toolbox/xml_toolbox.pdf
diffstat 3926 files changed, 384306 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hg_archival.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+repo: a5a30010dc3b5bb7616bc6036dcb15dc75b4260b
+node: 3d980aa87d2b0f914ae772c8dab357eb27fb7e61
+branch: AES2013
+latesttag: null
+latesttagdistance: 679
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.TXT	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+This page allows you to reproduce the experiments from our paper "Feature Preprocessing using RBM for Music Similarity Learning". This includes the newest release of the CAMIR system for modelling music similarity.
+
+MLR and SVMLIGHT were tested using a framework developed by Daniel Wolff (daniel.wolff.1@city.ac.uk) at the MIRG group.
+This version of CAMIR contains the RBM toolbox of Son Tran (son.tran.1@city.ac.uk).
+You can download the code using subversion from the following repository. It is licensed under the GNU GPL v3.
+
+user: anonymous
+pass: citymirg
+http://chivm.soi.city.ac.uk/svn/camir/branches/code_publications/AES2013/
+
+For reproducing the results in the paper using Matlab on a Windows  machine follow these steps:
+
+-Download the code from above using a subversion client such as  collabnet svn and the above password
+-Set the working directories in the editme_startup.m file of the downloaded code to the location of the downloaded code
+-Include the code directory with all subdirectories in your matlab path
+-Start Matlab, change the working directory to the location of the downloaded code
+-Edit and execute the editme_startup file, this initialises the dataset and could take a few minutes.
+-Run the experiments using the scripts in the folder reproduce_AES53rd.
+-Most of the results are output as figures. Otherwise values are printed in the Matlab console
+
+If you use this code please cite our paper. We are more than welcoming your additional bits of functionality to be included in the package.
\ No newline at end of file
Binary file core/comp_SimGraphMulti.mat has changed
Binary file core/comp_SimGraphMulti_SimData10x05.mat has changed
Binary file core/comp_SimGraphMulti_SimDataDump.mat has changed
Binary file core/comp_SimGraphStob_ac1.mat has changed
Binary file core/comp_basicsm.mat has changed
Binary file core/comp_partBinData_ISMIR12_01.mat has changed
Binary file core/comp_partBinData_ISMIR12_02.mat has changed
Binary file core/comp_partBinData_unclustered_ISMIR12_01.mat has changed
Binary file core/comp_pca40.mat has changed
Binary file core/comp_raw.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/comparisons_final.csv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,534 @@
+"clip1_id"	"clip2_id"	"clip3_id"	"clip1_numvotes"	"clip2_numvotes"	"clip3_numvotes"	"clip1_mp3_path"	"clip2_mp3_path"	"clip3_mp3_path"
+"42344"	"52148"	"53079"	"3"	"1"	"6"	"8/jacob_heringman-josquin_des_prez_lute_settings-10-da_ripa__part_ii_per_illud_ave-59-88.mp3"	"4/tim_rayborn-the_path_beyond-14-taqsim_ud-175-204.mp3"	"9/the_wretch-ambulatory-15-release-146-175.mp3"
+"44925"	"17654"	"56325"	"2"	"0"	"0"	"0/american_bach_soloists-j_s__bach__cantatas_volume_v-11-weinen_klagen_sorgen_zagen_bwv_12_vi_aria__sei_getreu-30-59.mp3"	"8/hybris-the_first_words-04-final_trust-146-175.mp3"	"9/the_strap_ons-geeking_crime-20-pimps-59-88.mp3"
+"25699"	"2619"	"15184"	"0"	"0"	"2"	"b/philharmonia_baroque-beethoven_symphonies_no_3_eroica_and_no_8-06-8_symph_3rd-117-146.mp3"	"4/jay_kishor-the_color_of_night-01-malkauns-1045-1074.mp3"	"4/seth_carlin-schubert__works_for_solo_fortepiano-03-sonata_in_eflat_major_opus_posth__122__menuetto_allegretto-30-59.mp3"
+"2308"	"57629"	"44657"	"0"	"0"	"2"	"0/american_bach_soloists-joseph_haydn__masses-01-kyrie__allegro_moderato-146-175.mp3"	"c/magnatune-classical-24-la_primavera_robert_jones_sweet_kate-59-88.mp3"	"f/ehren_starks-lines_build_walls-10-tunnel_systems-88-117.mp3"
+"45324"	"3858"	"13497"	"15"	"14"	"6"	"5/burnshee_thornside-rock_this_moon-11-city_girls-30-59.mp3"	"9/sitar-cd1_the_sowebo_concert-01-raga_maru_bihag_alapjay_kishor-2089-2118.mp3"	"6/electric_frankenstein-conquers_the_world-03-just_like_your_mom-0-29.mp3"
+"10329"	"41054"	"6190"	"2"	"0"	"1"	"8/tim_rayborn-veils_of_light-02-tabak-204-233.mp3"	"d/jeff_wahl-guitarscapes-09-spanish_ballad-30-59.mp3"	"f/strojovna_07-dirnix-02-basetra_noje-204-233.mp3"
+"8773"	"35753"	"41690"	"2"	"0"	"0"	"b/satori-journey_to_other_worlds-02-other_worlds-1596-1625.mp3"	"4/dj_cary-downtempo_chill_2-08-huan_ying_mr_gelatine-30-59.mp3"	"7/falik-elvolution-09-what_not_things_seem_are_they-0-29.mp3"
+"46596"	"37337"	"26543"	"11"	"3"	"3"	"1/mijo-fata_morgana-11-relativity-88-117.mp3"	"9/wicked_boy-chemistry-08-slomo-233-262.mp3"	"6/strojovna_07-mirnix-06-d_a_r_k-146-175.mp3"
+"8182"	"49371"	"58152"	"6"	"2"	"0"	"7/monoide-zeitpunkt-02-letzter_vorschlag-0-29.mp3"	"e/briddes_roune-lenten_is_come-12-worldes_blis-30-59.mp3"	"d/janine_johnson-telemann_harpsichord_solos_from_der_getreue_music_meister-26-suite_sarabande_pezold-88-117.mp3"
+"55261"	"51409"	"44825"	"2"	"0"	"7"	"8/jacob_heringman-josquin_des_prez_lute_settings-18-newsidler__adieu_mes_amours-146-175.mp3"	"5/paul_beier-simone_molinaro-14-frais___gaillard__canzone_francese_a_quattro_di_clemens_non_papa-175-204.mp3"	"6/norine_braun-crow-10-wingsphoenix-59-88.mp3"
+"7268"	"32689"	"51710"	"0"	"2"	"0"	"6/ed_martin-luis_milan__el_maestro-02-fantasia_2-117-146.mp3"	"e/burning_babylon-stereo_mash_up-07-parkton_special-175-204.mp3"	"1/tim_rayborn-qadim-14-perishde__santur_persian-59-88.mp3"
+"3132"	"34171"	"16140"	"3"	"0"	"0"	"2/jamie_janover-evolutions-01-outer_cape-233-262.mp3"	"4/myles_cochran-marginal_street-07-wait_a_while-117-146.mp3"	"f/norine_braun-and_the_mood_swings-03-wounded_little_bird-204-233.mp3"
+"47390"	"1628"	"17122"	"0"	"0"	"1"	"6/falik-streaks_and_strokes-11-xanthanon-146-175.mp3"	"8/magnatune-red_hat_summit_compilation-01-fluid__headphones-88-117.mp3"	"d/ambient_teknology-the_all_seeing_eye_project-04-confusion_says-175-204.mp3"
+"50779"	"19859"	"36049"	"2"	"4"	"1"	"2/vito_paternoster-cd2bach_cello_suites-13-suite_v_in_do_minore__prelude-88-117.mp3"	"8/cargo_cult-vibrant-04-son_of_ambriel-30-59.mp3"	"1/phebe_craig_and_katherine_westine-beside_themselves-08-js_bach_concerto_in_c_major_for_2_harpsichords_allegro_moderato-436-465.mp3"
+"5221"	"20497"	"8949"	"0"	"0"	"1"	"7/roots_of_rebellion-the_looking_glass-01-the_order-175-204.mp3"	"e/atomic_opera-penguin_dust-04-thirst-175-204.mp3"	"c/jamie_janover-now_center_of_time-02-playa-639-668.mp3"
+"45584"	"8666"	"5511"	"0"	"0"	"1"	"0/rocket_city_riot-middle_age_suicide-11-everyday_like_saturday_bonus_track-30-59.mp3"	"d/drevo-christian_themes_in_ukrainian_folk_songs-02-oh_uncle_in_your_yard-146-175.mp3"	"3/emmas_mini-beat_generation_mad_trick-01-unknown-146-175.mp3"
+"696"	"49895"	"47234"	"1"	"2"	"0"	"3/kiev_theological_academy_and_seminary_choir-traditional_worship_singing_of_kievpechersk_lavra-01-blessed_is_the_man-0-29.mp3"	"5/paul_beier-simone_molinaro-13-fantasia_decima-175-204.mp3"	"a/edward_martin_and_william_bastian-virtues_and_vices-11-tobacco_tobias_hume-0-29.mp3"
+"23031"	"4167"	"5239"	"13"	"2"	"2"	"4/seismic_anamoly-sweet_rock_candy-05-kick_in_tha_nuts-0-29.mp3"	"3/etherfysh-box_of_fysh-01-sanctuary-552-581.mp3"	"d/rapoon-vernal_crossing-01-the_same_river_once-88-117.mp3"
+"46621"	"30446"	"47738"	"17"	"7"	"18"	"e/jade_leary-fossildawn-11-retroscope-175-204.mp3"	"0/ammonite-reconnection-07-angel_hold_on___-291-320.mp3"	"b/magnatune_compilation-rock-12-cargo_cult_our_song-0-29.mp3"
+"696"	"47234"	"49895"	"0"	"0"	"4"	"3/kiev_theological_academy_and_seminary_choir-traditional_worship_singing_of_kievpechersk_lavra-01-blessed_is_the_man-0-29.mp3"	"a/edward_martin_and_william_bastian-virtues_and_vices-11-tobacco_tobias_hume-0-29.mp3"	"5/paul_beier-simone_molinaro-13-fantasia_decima-175-204.mp3"
+"7546"	"13981"	"28007"	"1"	"0"	"0"	"9/wicked_boy-chemistry-02-give_it_to_me-146-175.mp3"	"6/stargarden-ambient_excursions-03-mt_fuji-0-29.mp3"	"7/claire_fitch-ambiencellist_part_ii-06-mist-146-175.mp3"
+"58285"	"52226"	"2634"	"7"	"5"	"14"	"d/janine_johnson-telemann_harpsichord_solos_from_der_getreue_music_meister-27-suite_gigue_pezold-117-146.mp3"	"1/jeff_wahl-guinevere-14-tristan_and_isolde-320-349.mp3"	"4/jay_kishor-the_color_of_night-01-malkauns-1480-1509.mp3"
+"23857"	"20500"	"8554"	"0"	"1"	"1"	"c/vito_paternoster-cd1bach_sonatas_and_partitas_for_solo_violin-05-partita_prima_in_mi_minore__allemanda-204-233.mp3"	"4/the_wretch-cyst-04-this_is_terror-59-88.mp3"	"d/paul_avgerinos-balancing_spheres-02-night_illusions__balancing_spheres-146-175.mp3"
+"43523"	"11635"	"13256"	"2"	"0"	"0"	"a/asteria-soyes_loyal-10-of_a_rose_singe_we_lute_anon-88-117.mp3"	"d/seismic_anamoly-afterburner-03-anthem_for_hcp-0-29.mp3"	"7/aba_structure-epic-03-houseboats-233-262.mp3"
+"11075"	"2626"	"11839"	"1"	"3"	"4"	"1/zilla-egg-02-wicker_pilots-59-88.mp3"	"4/jay_kishor-the_color_of_night-01-malkauns-1248-1277.mp3"	"5/rapoon-cidar-03-black_feel-88-117.mp3"
+"33887"	"29295"	"50200"	"2"	"0"	"0"	"b/paul_beier-alessandro_piccinini-07-toccata_xvii-175-204.mp3"	"f/rapoon-tin_of_drum-06-southbound-639-668.mp3"	"b/cargo_cult-alchemy-13-matt-0-29.mp3"
+"21116"	"49590"	"2443"	"2"	"9"	"6"	"1/solace-the_gathering_season-05-aenaem-349-378.mp3"	"c/edward_martin-art_of_the_lute_in_renaissance_france-13-aupres_de_vous_sermisy-30-59.mp3"	"5/thursday_group-uncle_mean-01-like_white_on_rice-117-146.mp3"
+"27326"	"38122"	"37180"	"11"	"26"	"7"	"9/the_seldon_plan-making_circles-06-holding_patterns_are_slow-175-204.mp3"	"c/rapoon-easterly_6_or_7-08-variable_2-349-378.mp3"	"c/william_brooks-fowl_mouth-08-scooter-0-29.mp3"
+"35492"	"42331"	"23020"	"2"	"8"	"6"	"d/beth_quist-shall_we_dance-08-finale-291-320.mp3"	"1/richard_savino-murcia__danza_y_diferencias-10-correnta-30-59.mp3"	"7/solace-vadalna-05-khataralex_mix-59-88.mp3"
+"49020"	"53375"	"5363"	"1"	"0"	"1"	"b/hanneke_van_proosdij-harpsichord_suites_of_chambonnieres-12-suite_in_g_major__menuet-0-29.mp3"	"b/janine_johnson-bach_goldberg_variations-15-variatio_14_a_2_clav-30-59.mp3"	"a/ensemble_sreteniye-ancient_church_singing_of_byzantine_georgia_and_rus-01-to_thee_we_sing_bulgarian_chant_tone_legetos-88-117.mp3"
+"42344"	"53079"	"52148"	"3"	"5"	"1"	"8/jacob_heringman-josquin_des_prez_lute_settings-10-da_ripa__part_ii_per_illud_ave-59-88.mp3"	"9/the_wretch-ambulatory-15-release-146-175.mp3"	"4/tim_rayborn-the_path_beyond-14-taqsim_ud-175-204.mp3"
+"35224"	"47678"	"33174"	"0"	"0"	"2"	"4/american_bach_soloists-j_s__bach__mass_in_b_minor_cd1-08-domine_deus-30-59.mp3"	"7/american_bach_soloists-j_s__bach__mass_in_b_minor_cd2-12-benedictus-117-146.mp3"	"c/william_brooks-fowl_mouth-07-silent_wings-204-233.mp3"
+"56338"	"10625"	"6094"	"11"	"2"	"3"	"0/daniel_ben_pienaar-book_2_cd2_welltempered_clavier-20-prelude_and_fugue_no__22_in_bflat_minor_bwv_891_fuga-88-117.mp3"	"f/jackalopes-jacksploitation-02-those_great_big____memories-88-117.mp3"	"8/skitzo-hellavator_musick-02-angels_blood-117-146.mp3"
+"5783"	"50307"	"40683"	"7"	"21"	"6"	"a/rhonda_lorence-winter_moon-01-winter_moon-233-262.mp3"	"e/magnatune_com-magnatune_at_the_cc_salon-13-one_at_a_time_burnshee_thornside-117-146.mp3"	"d/beth_quist-shall_we_dance-09-ritual-291-320.mp3"
+"10728"	"6954"	"26234"	"1"	"0"	"1"	"7/dac_crowell-the_sea_and_the_sky-02-umi_no_kami_ni_kansha-117-146.mp3"	"e/solace-balance-02-dragon_and_sword-204-233.mp3"	"1/tim_rayborn-qadim-06-calliopeia__kithara_ancient_greek-146-175.mp3"
+"13981"	"7546"	"28007"	"1"	"1"	"0"	"6/stargarden-ambient_excursions-03-mt_fuji-0-29.mp3"	"9/wicked_boy-chemistry-02-give_it_to_me-146-175.mp3"	"7/claire_fitch-ambiencellist_part_ii-06-mist-146-175.mp3"
+"26625"	"47188"	"55324"	"0"	"0"	"4"	"c/domased-new_memories-06-deadly_season-465-494.mp3"	"9/wicked_boy-chemistry-11-the_theme-0-29.mp3"	"f/philharmonia_baroque_orchestra-handel__atalanta_cd2-18-recitativo_lo_vo_morir___gia_corro___-0-29.mp3"
+"20805"	"13998"	"46366"	"11"	"6"	"18"	"e/tilopa-out_of_the_blue-04-wings_over_water-320-349.mp3"	"6/stargarden-ambient_excursions-03-mt_fuji-494-523.mp3"	"7/american_bach_soloists-j_s__bach__mass_in_b_minor_cd2-11-osanna_in_exelsis-117-146.mp3"
+"46491"	"7744"	"28319"	"0"	"0"	"3"	"7/artemis-gravity-11-prayer-233-262.mp3"	"6/mercy_machine-the_devil_i_know-02-i_need_a_new_jesus-146-175.mp3"	"2/ensemble_sreteniye___three_holies_church_choristers-dont_cry_rachael-06-open_to_me_the_doors_of_repentance_byzantine_chant_bulgarian_tradition-30-59.mp3"
+"14539"	"49873"	"5223"	"0"	"0"	"1"	"d/shira_kammen-mistral-03-quand_jetais_jeune-59-88.mp3"	"b/magnatune_compilation-rock-13-emmas_mini_disconnected-204-233.mp3"	"2/jesse_manno-sea_spirits-01-the_river-0-29.mp3"
+"20302"	"28479"	"35237"	"0"	"1"	"2"	"8/stargarden-music_for_modern_listening-04-termoli-30-59.mp3"	"a/liquid_zen-magic_midsummer-06-por_tus_ojos-88-117.mp3"	"f/asteria-le_souvenir_de_vous_me_tue-08-dona_gentile_lute_guillaume_dufay-59-88.mp3"
+"36300"	"42175"	"49336"	"1"	"0"	"0"	"6/dj_markitos-slower_emotions138_bpm_remixes-08-love_peace_and_ecstasy_138_bpm_remix-262-291.mp3"	"c/reza_manzoori-restrung-10-breath-30-59.mp3"	"e/justin_bianco-forge-12-war-146-175.mp3"
+"27871"	"43565"	"52571"	"2"	"0"	"0"	"4/dj_markitos-evolution_of_the_mind-06-losing_control-175-204.mp3"	"4/tim_rayborn-the_path_beyond-10-osman_pasha-291-320.mp3"	"7/jag-cypress_grove_blues-15-cypress_boogie-0-29.mp3"
+"51816"	"2536"	"57384"	"2"	"10"	"3"	"0/paul_berget-the_siena_manuscript_on_steel_string_guitar-14-recercar_14_steel_string_guitar-88-117.mp3"	"5/processor-are_you_for_real-01-mad_bull-204-233.mp3"	"e/philharmonia_baroque_orchestra-handel__atalanta_cd1-23-recitativo_amarilli_oh_dei_qui_tirsi-30-59.mp3"
+"37083"	"27985"	"15072"	"0"	"2"	"1"	"0/paul_berget-the_siena_manuscript_on_steel_string_guitar-08-recercar_8_steel_string_guitar-59-88.mp3"	"1/william_brooks-karma_dogs-06-miracle-117-146.mp3"	"4/myles_cochran-marginal_street-03-so_gone-378-407.mp3"
+"27211"	"1987"	"11300"	"1"	"0"	"3"	"3/sherefe-opium-06-geldim_bir_kara_tasha-175-204.mp3"	"e/c_layne-the_sun_will_come_out_to_blind_you-01-i_dont_care_if_you_lie-146-175.mp3"	"c/lvx_nova-lvx_nova-03-kyoto_nights-639-668.mp3"
+"7785"	"50207"	"38252"	"5"	"2"	"2"	"2/aba_structure-tektonik_illusion-02-illusion-233-262.mp3"	"b/cargo_cult-alchemy-13-matt-204-233.mp3"	"0/williamson-a_few_things_to_hear_before_we_all_blow_up-08-whats_on_the_ceiling_beats_whats_on_tv-291-320.mp3"
+"36439"	"2295"	"20485"	"43"	"18"	"5"	"5/arthur_yoria-of_the_lovely-08-my_best_routines-117-146.mp3"	"e/tilopa-out_of_the_blue-01-kyopianosus-88-117.mp3"	"4/human_response-delirious-04-theoria-175-204.mp3"
+"39639"	"6259"	"13759"	"6"	"18"	"16"	"e/jamie_janover_and_michael_masley-all_strings_considered-09-innerlude-30-59.mp3"	"e/jamie_janover_and_michael_masley-all_strings_considered-02-birds_of_mindrise-204-233.mp3"	"7/james_edwards-canarios-03-marionas__gerau-117-146.mp3"
+"40792"	"18557"	"50294"	"7"	"2"	"2"	"4/john_williams-long_ride_home-09-she_walks-30-59.mp3"	"1/touchinggrace-the_reformation_sessions-04-melon_tropic_sunrise-378-407.mp3"	"2/shira_kammen-the_almanac-13-o_western_wind-59-88.mp3"
+"24418"	"26551"	"52873"	"0"	"2"	"0"	"2/indidginus-seismic-05-shindormo-436-465.mp3"	"d/rapoon-vernal_crossing-06-dahina_ta-117-146.mp3"	"d/seth_and_maryse_carlin-schubert__music_for_fortepiano_four_hands-15-marche_militaire-88-117.mp3"
+"37812"	"18221"	"58717"	"7"	"32"	"9"	"2/jami_sieber-lush_mechanique-08-the_darkening_ground-59-88.mp3"	"c/seismic_anamoly-ramifications-04-julies_tune-552-581.mp3"	"c/edward_martin-art_of_the_lute_in_renaissance_france-35-duel_double_duel_lupi-30-59.mp3"
+"29201"	"12970"	"10292"	"2"	"0"	"1"	"3/les_filles_de_sainte_colombe-german_music_for_viols_and_harpsichord-06-sonata_viii_in_c_minor_schenck-494-523.mp3"	"7/beight-file_in_rhythm-03-fill_me_up-0-29.mp3"	"3/very_large_array-stuff-02-superdrag-146-175.mp3"
+"11345"	"27917"	"51875"	"20"	"7"	"0"	"1/tanya_tomkins_and_eric_zivian-beethoven_piano_and_cello_works-03-7_variations_on_a_theme_from_the_magic_flute_in_eb_woo_46-204-233.mp3"	"b/electric_frankenstein-dead_and_back-06-make_no_mistake-30-59.mp3"	"9/the_wretch-ambulatory-14-sickness-146-175.mp3"
+"27133"	"36403"	"41929"	"0"	"0"	"1"	"4/seismic_anamoly-sweet_rock_candy-06-fire_in_tha_hole-291-320.mp3"	"b/elizabeth_wolff-moments_musicaux-08-moritz_moszkowski__3_moments_musicaux_op__7__con_moto-204-233.mp3"	"4/john_williams-long_ride_home-10-admit_one-88-117.mp3"
+"46681"	"16199"	"2705"	"10"	"25"	"51"	"5/paul_beier-simone_molinaro-11-rossingnolet__canzone_francese_a_quattro_di_thomas_crequillon-146-175.mp3"	"3/kitka-the_vine-03-zhuravlyky_odletily_ukraine-88-117.mp3"	"5/dj_markitos-unreachable_destiny-01-manteia-204-233.mp3"
+"10715"	"16804"	"21421"	"0"	"1"	"1"	"5/stargarden-the_art_of_analog_diversion-02-trybal-262-291.mp3"	"8/mercy_machine-mercy_machine-04-bones-146-175.mp3"	"c/five_star_fall-automatic_ordinary-05-between_2_floors-204-233.mp3"
+"28835"	"17708"	"13286"	"1"	"0"	"0"	"9/self_delusion-happiness_hurts_me-06-secret_life-175-204.mp3"	"1/jeff_wahl-guinevere-04-freedom-30-59.mp3"	"3/sherefe-opium-03-huzam_kamelieriko-59-88.mp3"
+"15069"	"32776"	"42794"	"22"	"16"	"12"	"4/myles_cochran-marginal_street-03-so_gone-291-320.mp3"	"2/duo_chambure-vihuela_duets_of_valderrabano-07-payne_trabel_jean_mouton-59-88.mp3"	"9/etherine-gleam-10-gleam_remix-30-59.mp3"
+"3450"	"48198"	"42896"	"16"	"15"	"7"	"2/maryse_carlin-rameau__pieces_de_clavecin_en_concerts__forqueray_suites_4_and_5-01-premier_concert__coulicam_rameau-30-59.mp3"	"e/magnatune_compilation-high_energy_rock_and_roll-12-jackalopes_cielo_69-59-88.mp3"	"c/william_brooks-blue_ribbon__the_best_of_william_brooks-10-hideaway-88-117.mp3"
+"19353"	"36904"	"41821"	"0"	"1"	"1"	"3/etherfysh-box_of_fysh-04-rama-1132-1161.mp3"	"a/janine_johnson-chopin_recital-08-polonaise_op_44_in_f_minor-552-581.mp3"	"f/the_headroom_project-jetuton_andawai-10-late_night_blues-146-175.mp3"
+"27534"	"6408"	"25167"	"1"	"1"	"0"	"a/plunkett-14_days-06-just_rise-0-29.mp3"	"d/kitka-wintersongs-02-byla_cesta_moravia-30-59.mp3"	"e/jeff_wahl-meditative_guitar-05-the_persistence_of_hope-117-146.mp3"
+"24125"	"38341"	"39174"	"25"	"18"	"14"	"f/lizzi-love_and_you_and_i-05-remedy-175-204.mp3"	"f/the_headroom_project-jetuton_andawai-09-anu_de_dilaho-0-29.mp3"	"e/magnatune_compilation-high_energy_rock_and_roll-09-electric_frankenstein_new_rage-59-88.mp3"
+"40226"	"41470"	"12032"	"25"	"4"	"9"	"d/drevo-christian_themes_in_ukrainian_folk_songs-09-o_did_you_learn_o_people_such_news-146-175.mp3"	"b/suzanne_teng-miles_beyond-09-tiens_lullaby-175-204.mp3"	"e/dac_crowell-within_this_space-03-cantillation-639-668.mp3"
+"20213"	"448"	"33029"	"1"	"1"	"1"	"b/rob_costlow-sophomore_jinx-04-summer_garden-204-233.mp3"	"b/satori-journey_to_other_worlds-01-astral_flight-813-842.mp3"	"1/zilla-egg-07-rufus-88-117.mp3"
+"28315"	"55324"	"5002"	"1"	"5"	"2"	"f/norine_braun-and_the_mood_swings-06-one_breath-146-175.mp3"	"f/philharmonia_baroque_orchestra-handel__atalanta_cd2-18-recitativo_lo_vo_morir___gia_corro___-0-29.mp3"	"4/dj_markitos-evolution_of_the_mind-01-sunset_endless_night_journey_remix-30-59.mp3"
+"43707"	"12454"	"11351"	"4"	"1"	"1"	"8/justin_bianco-phoenix-10-pieces_of_every_day-59-88.mp3"	"9/suzanne_teng-enchanted_wind-03-dark_moon-494-523.mp3"	"1/tanya_tomkins_and_eric_zivian-beethoven_piano_and_cello_works-03-7_variations_on_a_theme_from_the_magic_flute_in_eb_woo_46-378-407.mp3"
+"43612"	"33478"	"15969"	"0"	"0"	"1"	"8/stargarden-music_for_modern_listening-10-p5_mon_amour-175-204.mp3"	"5/stargarden-step_off-07-step_out_to_the_stars-581-610.mp3"	"1/zilla-egg-03-velvet_periscope-233-262.mp3"
+"29527"	"45860"	"16281"	"15"	"7"	"21"	"c/glen_bledsoe-up_and_down-06-tango_cacafuego-146-175.mp3"	"7/rapoon-what_do_you_suppose-11-i_dont_expect_anyone-146-175.mp3"	"6/ralph_meulenbroeks-gambomania-04-sonata_in_d_minor_adagio_karl_friedrich_abel-59-88.mp3"
+"20548"	"23383"	"53557"	"12"	"43"	"20"	"4/jami_sieber-second_sight-04-tree_of_love-233-262.mp3"	"8/burning_babylon-knives_to_the_treble-05-mash_up_the_dj-117-146.mp3"	"e/briddes_roune-lenten_is_come-16-brid_by_a_strem-59-88.mp3"
+"21148"	"32369"	"22217"	"1"	"0"	"0"	"1/tim_rayborn-qadim-05-alevlen__saz_turkish-117-146.mp3"	"b/elizabeth_wolff-moments_musicaux-07-moritz_moszkowski__3_moments_musicaux_op__7__allegramente-30-59.mp3"	"5/curandero-aras-05-embrujada-378-407.mp3"
+"6115"	"20862"	"30985"	"0"	"2"	"0"	"5/dj_markitos-unreachable_destiny-02-aquila-146-175.mp3"	"3/sherefe-opium-04-yianni_mou_to-262-291.mp3"	"f/norine_braun-and_the_mood_swings-07-cruel_streak-175-204.mp3"
+"44689"	"195"	"22299"	"4"	"8"	"1"	"7/rob_costlow-woods_of_chaos-10-twilight-88-117.mp3"	"9/the_seldon_plan-making_circles-01-a_rhyming_dictionary-175-204.mp3"	"6/ed_martin-luis_milan__el_maestro-05-fantasia_5-88-117.mp3"
+"78"	"7807"	"35976"	"8"	"0"	"1"	"9/american_bach_soloists-heinrich_schutz__musicalische_exequien-01-musicalische_exequien_swv_279_teil_i_concert_in_form_einer_teutschen_begrabnismissa-1132-1161.mp3"	"0/solace-iman-02-iman-146-175.mp3"	"8/mercy_machine-in_your_bed__the_remixes-08-invisible_cosmic_sea_shanty_mix-262-291.mp3"
+"49311"	"49514"	"21556"	"1"	"0"	"1"	"a/janine_johnson-chopin_recital-12-valse_brilliante_op_18_in_eb_major-146-175.mp3"	"1/tim_rayborn-qadim-13-amniat__robab_afghan-59-88.mp3"	"a/james_edwards-le_tresor_dorphee_by_antoine_francisque-05-branle_simple_a_cordes_avalees_troisiesme-30-59.mp3"
+"21806"	"43720"	"27879"	"11"	"4"	"4"	"b/philharmonia_baroque-mozart_orchestral_works-05-concerto_for_flute_and_harp_in_c_major_kv299_allegro-175-204.mp3"	"5/arthur_yoria-suerte_something-10-places_everyone-59-88.mp3"	"5/mrdc-plethora-06-lostcode-88-117.mp3"
+"36308"	"49254"	"57299"	"0"	"0"	"1"	"2/version-versions-08-love_redux-117-146.mp3"	"e/burning_babylon-stereo_mash_up-12-trouble_dub-59-88.mp3"	"3/jag-four_strings-23-four_string_blues-30-59.mp3"
+"37286"	"26497"	"39679"	"8"	"0"	"3"	"2/claire_fitch-ambiencellist-08-shortest_day-59-88.mp3"	"b/lisa_debenedictis-mixter_one-06-cuckoo_passiveaggressive_mix_by_hisboyelroy-146-175.mp3"	"0/william_brooks-bitter_circus-09-is_there_anybody_there-59-88.mp3"
+"45485"	"8259"	"37965"	"76"	"18"	"14"	"2/magnatune_compilation-electronica-11-dj_markitos_interplanetary_travel-146-175.mp3"	"9/the_seldon_plan-making_circles-02-making_circles-117-146.mp3"	"f/pain_factor-8_seconds-08-thin_line-204-233.mp3"
+"33237"	"39060"	"50855"	"8"	"7"	"14"	"4/dj_cary-downtempo_chill_2-07-son_of_ambriel_cargo_cult-0-29.mp3"	"c/liquid_zen-oscilloscope-09-dense_properties-262-291.mp3"	"b/richard_savino-mertz__bardic_sounds-13-tarantella-204-233.mp3"
+"37661"	"52495"	"6809"	"15"	"21"	"26"	"1/zilla-egg-08-sun_of_many_maps-291-320.mp3"	"b/richard_savino-mertz__bardic_sounds-15-childrens_fairy_tale-320-349.mp3"	"2/roots_of_rebellion-surfacing-02-declaration-233-262.mp3"
+"51628"	"19583"	"44622"	"3"	"6"	"4"	"d/shiva_in_exile-ethnic-14-myingmar-581-610.mp3"	"d/tim_rayborn-chordae-04-sempr_alegria-639-668.mp3"	"d/various_artists-the_art_of_persuasion-10-touch_ammonite-175-204.mp3"
+"23034"	"2003"	"56164"	"2"	"0"	"0"	"4/seismic_anamoly-sweet_rock_candy-05-kick_in_tha_nuts-88-117.mp3"	"a/tilopa-pictures_of_silence-01-ichi-146-175.mp3"	"9/janine_johnson-german_keyboard_masters-20-ciacona_in_e_buxtehude-88-117.mp3"
+"3892"	"28337"	"54954"	"1"	"1"	"2"	"5/sitar-first_congregational_church_concert-01-raga_patdeep__alap__jay_kishor-871-900.mp3"	"6/the_kokoon-erase-06-order-59-88.mp3"	"b/janine_johnson-bach_goldberg_variations-17-variatio_16_a_1_clav_ouverture-0-29.mp3"
+"54283"	"29638"	"54881"	"0"	"2"	"0"	"e/philharmonia_baroque_orchestra-handel__atalanta_cd1-17-aria_riportai_glorioso_palma-88-117.mp3"	"b/liquid_zen-elements_at_loop_10-06-the_surface-0-29.mp3"	"6/doc_rossi-demarzi6_sonatas_for_cetra_o_kitara-17-the_orange_rogue_trad__arr__rossi-117-146.mp3"
+"8781"	"31387"	"38170"	"5"	"3"	"5"	"c/rapoon-easterly_6_or_7-02-our_tresspasses-175-204.mp3"	"7/aba_structure-epic-07-erased-755-784.mp3"	"5/cheryl_ann_fulton-the_once_and_future_harp-08-virgin_light-0-29.mp3"
+"45713"	"41781"	"25493"	"14"	"4"	"4"	"7/beight-file_in_rhythm-11-ghostly_feeling-88-117.mp3"	"7/monoide-zeitpunkt-09-zeitpunkt-204-233.mp3"	"6/drop_trio-cezanne-05-wreck_of_the_zephyr-407-436.mp3"
+"1224"	"7261"	"15290"	"1"	"3"	"2"	"4/human_response-delirious-01-delirious-291-320.mp3"	"1/richard_savino-murcia__danza_y_diferencias-02-fandango-117-146.mp3"	"9/domased-slowdown-03-sound_of_ambient_part_1-175-204.mp3"
+"36741"	"14366"	"27047"	"24"	"21"	"21"	"b/rebel_rebel-explode_into_space-08-our_time_is_now-30-59.mp3"	"9/vito_paternoster-cd2bach_sonatas_and_partitas_for_solo_violin-03-partita_seconda_in_sol_minore__sarabanda-117-146.mp3"	"c/rapoon-easterly_6_or_7-06-falling_more_slowly-204-233.mp3"
+"20288"	"8922"	"37692"	"1"	"5"	"3"	"9/introspekt-ideology-04-tbd-262-291.mp3"	"f/lisa_debenedictis-fruitless-02-planet_you-88-117.mp3"	"7/solace-rhythm_of_the_dance-08-sword_dance_routine-204-233.mp3"
+"2634"	"52226"	"58285"	"7"	"11"	"12"	"4/jay_kishor-the_color_of_night-01-malkauns-1480-1509.mp3"	"1/jeff_wahl-guinevere-14-tristan_and_isolde-320-349.mp3"	"d/janine_johnson-telemann_harpsichord_solos_from_der_getreue_music_meister-27-suite_gigue_pezold-117-146.mp3"
+"32158"	"26800"	"25154"	"0"	"1"	"1"	"6/norine_braun-miles_to_go-07-little_lamb-88-117.mp3"	"9/indidginus-sine_language-06-dubliminal-146-175.mp3"	"2/shira_kammen-the_almanac-05-the_leaves_be_green-0-29.mp3"
+"36931"	"17220"	"56532"	"1"	"6"	"0"	"e/mountain_mirrors-mountain_mirrors-08-praying_mantis-117-146.mp3"	"d/paul_avgerinos-balancing_spheres-04-day_dreams__the_flames_are_awakened-88-117.mp3"	"e/steven_devine-portrait_of_an_english_harpsichord-21-suite_no_5_in_e_major_allemande_george_frederick_handel-146-175.mp3"
+"20327"	"19482"	"46159"	"9"	"4"	"0"	"6/dr_kuch-analog_disease-04-the_big_bang_theory-59-88.mp3"	"4/paul_berget-j_s__bach_on_the_lute-04-sarabande__bwv_996-0-29.mp3"	"a/kitka-nectar-11-miskolc_felol_hidegen_fuj_a_szel_hungary-175-204.mp3"
+"33304"	"23903"	"38465"	"1"	"0"	"0"	"4/seth_carlin-schubert__works_for_solo_fortepiano-07-sonata_in_a_major_opus_posth__120__allegro-320-349.mp3"	"5/thursday_group-uncle_mean-05-pelican_fan-407-436.mp3"	"1/ambient_teknology-phoenix-09-afterburner-146-175.mp3"
+"24349"	"30020"	"4270"	"6"	"30"	"10"	"b/oberlin_consort_of_viols-5_and_6_part_fantasies_of_william_lawes-05-set_a_5_in_c_minor-88-117.mp3"	"4/myles_cochran-marginal_street-06-worlds_apart-146-175.mp3"	"b/elizabeth_wolff-moments_musicaux-01-sergei_rachmaninoff__6_moments_musicaux_op__16__andantino-175-204.mp3"
+"54892"	"43402"	"43640"	"9"	"8"	"28"	"d/drevo-christian_themes_in_ukrainian_folk_songs-17-through_the_wide_field_through_the_deep_sea-88-117.mp3"	"d/the_west_exit-nocturne-10-nine_lives-204-233.mp3"	"c/liquid_zen-seventythree-10-passing_cars-0-29.mp3"
+"15069"	"42794"	"32776"	"26"	"19"	"10"	"4/myles_cochran-marginal_street-03-so_gone-291-320.mp3"	"9/etherine-gleam-10-gleam_remix-30-59.mp3"	"2/duo_chambure-vihuela_duets_of_valderrabano-07-payne_trabel_jean_mouton-59-88.mp3"
+"10850"	"12896"	"36664"	"0"	"0"	"3"	"7/shane_jackman-equilibrium-02-uncommon_eloquence-0-29.mp3"	"5/rapoon-fallen_gods-03-fallen_gods-175-204.mp3"	"8/mediva-viva_mediva-08-ondas_da_mar_codax-175-204.mp3"
+"37093"	"21950"	"43565"	"0"	"0"	"2"	"4/seismic_anamoly-sweet_rock_candy-08-refleections-146-175.mp3"	"b/ehren_starks-the_depths_of_a_year-05-dads_song-233-262.mp3"	"4/tim_rayborn-the_path_beyond-10-osman_pasha-291-320.mp3"
+"32232"	"23793"	"50605"	"10"	"2"	"12"	"2/indidginus-as_above_so_below-07-machu-88-117.mp3"	"3/dj_cary-eastern_grooves-05-oriental_distortionshiva_in_exile-59-88.mp3"	"2/ensemble_mirable-conversations_galantes-13-sonata_ii_in_b_minor_ariagratioso_altro-88-117.mp3"
+"29561"	"43292"	"18581"	"7"	"1"	"13"	"d/utopia_banished-night_of_the_black_wyvern-06-the_darkness_we_burn-30-59.mp3"	"7/falik-elvolution-10-mediterranean_blue-262-291.mp3"	"2/anup-embrace-04-minor_song-0-29.mp3"
+"18587"	"7531"	"48098"	"0"	"3"	"0"	"2/anup-embrace-04-minor_song-175-204.mp3"	"f/jacob_heringman_and_catherine_king-alonso_mudarra_songs_and_solos-02-gentil_cavallero-30-59.mp3"	"3/jag-pretty_girl_blues-12-hopscotch-30-59.mp3"
+"8538"	"8682"	"8932"	"1"	"1"	"0"	"a/tilopa-pictures_of_silence-02-ni-146-175.mp3"	"0/beth_quist-silver-02-om_asatoma_sad_gamaya-233-262.mp3"	"c/jamie_janover-now_center_of_time-02-playa-146-175.mp3"
+"38341"	"24125"	"39174"	"19"	"14"	"12"	"f/the_headroom_project-jetuton_andawai-09-anu_de_dilaho-0-29.mp3"	"f/lizzi-love_and_you_and_i-05-remedy-175-204.mp3"	"e/magnatune_compilation-high_energy_rock_and_roll-09-electric_frankenstein_new_rage-59-88.mp3"
+"39821"	"34898"	"48750"	"2"	"0"	"2"	"c/hands_upon_black_earth-hands_upon_black_earth-09-lastime-30-59.mp3"	"c/o_fickle_fortune-a_celebration_of_robert_burns-08-bonie_wee_thing-146-175.mp3"	"f/philharmonia_baroque_orchestra-handel__atalanta_cd2-12-recitativo_sono_irene_oppur_sogno-0-29.mp3"
+"14378"	"10167"	"41899"	"9"	"1"	"1"	"5/new_york_consort_of_viols-dances_and_canzonas_of_holborne_and_brade-03-pavan_and_galliard_holborne-204-233.mp3"	"d/processor-insomnia-02-straight_down-30-59.mp3"	"0/williamson-a_few_things_to_hear_before_we_all_blow_up-10-a-175-204.mp3"
+"6716"	"4642"	"16862"	"0"	"2"	"0"	"e/hans_christian-phantoms-02-coyotes_dance-88-117.mp3"	"c/vito_paternoster-cd1bach_sonatas_and_partitas_for_solo_violin-01-sonata_prima_in_do_minore__adagio-117-146.mp3"	"6/norine_braun-now_and_zen-04-buffalo_nights-146-175.mp3"
+"22058"	"31227"	"43611"	"0"	"3"	"0"	"1/mijo-fata_morgana-05-deep_bass_9-146-175.mp3"	"b/shane_jackman-sanctuary-07-early_frost-175-204.mp3"	"8/stargarden-music_for_modern_listening-10-p5_mon_amour-146-175.mp3"
+"44925"	"56325"	"17654"	"1"	"0"	"0"	"0/american_bach_soloists-j_s__bach__cantatas_volume_v-11-weinen_klagen_sorgen_zagen_bwv_12_vi_aria__sei_getreu-30-59.mp3"	"9/the_strap_ons-geeking_crime-20-pimps-59-88.mp3"	"8/hybris-the_first_words-04-final_trust-146-175.mp3"
+"27133"	"41929"	"36403"	"1"	"1"	"0"	"4/seismic_anamoly-sweet_rock_candy-06-fire_in_tha_hole-291-320.mp3"	"4/john_williams-long_ride_home-10-admit_one-88-117.mp3"	"b/elizabeth_wolff-moments_musicaux-08-moritz_moszkowski__3_moments_musicaux_op__7__con_moto-204-233.mp3"
+"3727"	"21645"	"21192"	"0"	"1"	"1"	"c/jay_kishor-cd2_the_sowebo_concert-01-raga_malkauns-2408-2437.mp3"	"c/strojovna_07-number_1-05-bycygel-59-88.mp3"	"b/la_primavera-english_renaissance_music-05-amarilli_mia_bella_caccini-30-59.mp3"
+"26836"	"28405"	"44292"	"0"	"11"	"1"	"5/edward_martin_and_paul_berget-baroque_lute_duets-06-duets_for_2_lutes_in_a_minor_and_f_major_losy__courante-0-29.mp3"	"f/strojovna_07-dirnix-06-palacinka-59-88.mp3"	"e/heavy_mellow-horizons-10-spinnaker-0-29.mp3"
+"27923"	"49468"	"19003"	"1"	"1"	"1"	"d/shiva_in_exile-ethnic-06-manju-0-29.mp3"	"a/plunkett-14_days-13-14_days-88-117.mp3"	"1/jacob_heringman-holburns_passion-04-pavan_posthuma_lute-204-233.mp3"
+"58323"	"8426"	"26605"	"1"	"0"	"0"	"b/jacob_heringman-jane_pickeringes_lute_book-28-a_fantasia-88-117.mp3"	"1/dac_crowell-sferica-02-murata-697-726.mp3"	"3/kitka-the_vine-06-de_szeretnek_az_egen_csillag_lenni_hungary-146-175.mp3"
+"27052"	"12381"	"47377"	"2"	"0"	"0"	"c/rapoon-easterly_6_or_7-06-falling_more_slowly-349-378.mp3"	"6/dj_markitos-slower_emotions138_bpm_remixes-03-cyber_evolution_138_bpm_remix-262-291.mp3"	"c/liquid_zen-seventythree-11-wobble_into_venus-349-378.mp3"
+"38573"	"58553"	"33945"	"0"	"2"	"0"	"a/liquid_zen-magic_midsummer-09-arabia_underwater-0-29.mp3"	"b/hanneke_van_proosdij-harpsichord_suites_of_chambonnieres-30-suite_in_f_major__chaconne-30-59.mp3"	"5/processor-are_you_for_real-07-touch_of_god-175-204.mp3"
+"1757"	"27347"	"41280"	"1"	"4"	"0"	"8/tim_rayborn-veils_of_light-01-gilim-0-29.mp3"	"f/ivilion-sartinal-06-hshante-233-262.mp3"	"6/curandero-curandero-09-teddy_bear-30-59.mp3"
+"17173"	"56776"	"25497"	"3"	"6"	"8"	"4/paul_avgerinos-sky_of_grace-04-dance_of_life-175-204.mp3"	"4/ensemble_mirable-triemer_six_cello_sonatas-21-sonata_5_largo-88-117.mp3"	"6/drop_trio-cezanne-05-wreck_of_the_zephyr-523-552.mp3"
+"52981"	"15187"	"32559"	"0"	"0"	"3"	"9/american_baroque-dances_and_suites_of_rameau_and_couperin-15-passepieds_12_suite_from_les_fetes_dhebe_rameau-117-146.mp3"	"4/seth_carlin-schubert__works_for_solo_fortepiano-03-sonata_in_eflat_major_opus_posth__122__menuetto_allegretto-117-146.mp3"	"6/dj_markitos-slower_emotions138_bpm_remixes-07-ocean_of_the_emotions_138_bpm_remix-175-204.mp3"
+"56140"	"47903"	"33640"	"12"	"2"	"8"	"9/the_sarasa_ensemble-a_baroque_mosaic-20-cantata_il_delirio_amoroso__aria_handel-233-262.mp3"	"a/jade_leary-the_lost_art_of_human_kindness-12-earth_beyond_a_finite_thought-146-175.mp3"	"d/ambient_teknology-the_all_seeing_eye_project-07-telekonology-204-233.mp3"
+"51628"	"44622"	"19583"	"2"	"3"	"10"	"d/shiva_in_exile-ethnic-14-myingmar-581-610.mp3"	"d/various_artists-the_art_of_persuasion-10-touch_ammonite-175-204.mp3"	"d/tim_rayborn-chordae-04-sempr_alegria-639-668.mp3"
+"45166"	"12158"	"10653"	"1"	"1"	"0"	"a/janine_johnson-chopin_recital-11-ballade_op_23_in_g_minor-262-291.mp3"	"2/solace-ahsas-03-circle_58_68_78-146-175.mp3"	"4/justin_bianco-siren-02-token-0-29.mp3"
+"31234"	"40259"	"18106"	"2"	"2"	"0"	"a/jade_leary-and_come_the_sirens-07-earthwish_on_saturn-30-59.mp3"	"2/duo_chambure-vihuela_duets_of_valderrabano-09-obsecro_te_domina_josquin_dez_prez-88-117.mp3"	"2/jamie_janover-evolutions-04-interlocken-117-146.mp3"
+"30132"	"31689"	"6060"	"1"	"1"	"1"	"4/falling_you-touch-07-____a_cry_for_the_brokenhearted-0-29.mp3"	"8/ivilion-terean-07-gortri-146-175.mp3"	"2/claire_fitch-ambiencellist-02-ambiancellist-0-29.mp3"
+"48344"	"8688"	"42533"	"5"	"15"	"16"	"6/norine_braun-crow-12-mantra-59-88.mp3"	"3/mandrake_root-the_seventh_mirror-02-one_in_a_million-88-117.mp3"	"1/janine_johnson-j_s__bach_works_for_harpsichord-10-english_suite_no_3_in_g_minor__prelude-59-88.mp3"
+"29122"	"14354"	"49164"	"1"	"0"	"1"	"4/seth_carlin-schubert__works_for_solo_fortepiano-06-sonata_in_a_major_opus_posth__120__andante-117-146.mp3"	"0/chris_harvey-the_white_sail-03-paris-262-291.mp3"	"9/introspekt-ideology-12-the_language_of_light-146-175.mp3"
+"35237"	"28479"	"20302"	"4"	"0"	"1"	"f/asteria-le_souvenir_de_vous_me_tue-08-dona_gentile_lute_guillaume_dufay-59-88.mp3"	"a/liquid_zen-magic_midsummer-06-por_tus_ojos-88-117.mp3"	"8/stargarden-music_for_modern_listening-04-termoli-30-59.mp3"
+"13748"	"29958"	"28479"	"7"	"10"	"17"	"f/magnatune-relaxation_spa-03-march_thirtyone_falling_you-204-233.mp3"	"d/paul_avgerinos-words_touch-06-weightless_you_are-610-639.mp3"	"a/liquid_zen-magic_midsummer-06-por_tus_ojos-88-117.mp3"
+"42271"	"17701"	"3551"	"1"	"0"	"0"	"9/the_strap_ons-geeking_crime-10-chucky_got_lucky-30-59.mp3"	"5/satori-for_relaxation-04-forest_surround-117-146.mp3"	"1/the_rajdhani_quartet-the_gandhi_memorial_concert-01-raga_hansa_kalyani-610-639.mp3"
+"43358"	"18230"	"7035"	"5"	"4"	"31"	"b/jacob_heringman-jane_pickeringes_lute_book-10-my_lord_willoughbies_welcom_home_by_mr_byrde-59-88.mp3"	"0/jeffrey_luck_lucas-what_we_whisper-04-just_like_moths-146-175.mp3"	"9/indidginus-sine_language-02-dusty_lands-0-29.mp3"
+"2423"	"52368"	"13041"	"0"	"1"	"1"	"c/liquid_zen-oscilloscope-01-levier_darmement-204-233.mp3"	"b/altri_stromenti-uccellini-15-alla_roversa_uccellini-30-59.mp3"	"8/mercy_machine-in_your_bed__the_remixes-03-fountain_street_q_burns_abstract_message_mix-88-117.mp3"
+"27702"	"37832"	"10388"	"1"	"0"	"1"	"5/ralph_rousseau_meulenbroeks-moved_by_marais-06-le_folies_despagnes_le_deuxieme_livre_de_pieces_de_viole_1701-639-668.mp3"	"f/memories_of_tomorrow-waiting_for_dawn-08-the_games_you_play_trance_mix-30-59.mp3"	"f/hans_christian-surrender-02-tears_for_ma-291-320.mp3"
+"909"	"32451"	"27858"	"14"	"18"	"3"	"7/claire_fitch-ambiencellist_part_ii-01-cellosphere-117-146.mp3"	"4/justin_bianco-siren-07-never_a_light-0-29.mp3"	"9/suzanne_teng-enchanted_wind-06-loltun-175-204.mp3"
+"51176"	"41762"	"4161"	"15"	"4"	"22"	"c/strojovna_07-number_1-14-blaudisco-175-204.mp3"	"d/rapoon-vernal_crossing-09-yitun-291-320.mp3"	"3/etherfysh-box_of_fysh-01-sanctuary-378-407.mp3"
+"39938"	"41134"	"158"	"1"	"0"	"1"	"8/magnatune-red_hat_summit_compilation-09-lizzi__lay_down-117-146.mp3"	"b/ehren_starks-the_depths_of_a_year-09-subtle_groove-30-59.mp3"	"5/new_york_consort_of_viols-dances_and_canzonas_of_holborne_and_brade-01-3_almaines_holborne-610-639.mp3"
+"29295"	"33887"	"50200"	"3"	"0"	"0"	"f/rapoon-tin_of_drum-06-southbound-639-668.mp3"	"b/paul_beier-alessandro_piccinini-07-toccata_xvii-175-204.mp3"	"b/cargo_cult-alchemy-13-matt-0-29.mp3"
+"49514"	"21556"	"49311"	"0"	"1"	"0"	"1/tim_rayborn-qadim-13-amniat__robab_afghan-59-88.mp3"	"a/james_edwards-le_tresor_dorphee_by_antoine_francisque-05-branle_simple_a_cordes_avalees_troisiesme-30-59.mp3"	"a/janine_johnson-chopin_recital-12-valse_brilliante_op_18_in_eb_major-146-175.mp3"
+"35888"	"1802"	"7613"	"0"	"0"	"2"	"5/processor-are_you_for_real-08-impulse-146-175.mp3"	"f/jackalopes-jacksploitation-01-good_clean_fun_laundromat-30-59.mp3"	"a/the_headroom_project-ciri_a_doro-02-gunklat_sasmazor-262-291.mp3"
+"36741"	"27047"	"14366"	"26"	"23"	"14"	"b/rebel_rebel-explode_into_space-08-our_time_is_now-30-59.mp3"	"c/rapoon-easterly_6_or_7-06-falling_more_slowly-204-233.mp3"	"9/vito_paternoster-cd2bach_sonatas_and_partitas_for_solo_violin-03-partita_seconda_in_sol_minore__sarabanda-117-146.mp3"
+"21109"	"39376"	"9147"	"2"	"8"	"5"	"1/solace-the_gathering_season-05-aenaem-146-175.mp3"	"5/arthur_yoria-suerte_something-09-greek_archaic-88-117.mp3"	"a/bjorn_fogelberg-karooshi_porn-02-quite_derivative-88-117.mp3"
+"18221"	"37812"	"58717"	"40"	"5"	"9"	"c/seismic_anamoly-ramifications-04-julies_tune-552-581.mp3"	"2/jami_sieber-lush_mechanique-08-the_darkening_ground-59-88.mp3"	"c/edward_martin-art_of_the_lute_in_renaissance_france-35-duel_double_duel_lupi-30-59.mp3"
+"34360"	"6826"	"46312"	"0"	"0"	"1"	"6/ralph_meulenbroeks-gambomania-08-cors_de_chasse_in_d_major_louis_de_caix_dhervelois-117-146.mp3"	"f/strojovna_07-switch_on__switch_off-02-deluxe-175-204.mp3"	"a/ensemble_sreteniye-ancient_church_singing_of_byzantine_georgia_and_rus-11-o_theotokos_the_virgin_rejoice_ave_maria-1451-1480.mp3"
+"10329"	"6190"	"41054"	"0"	"0"	"2"	"8/tim_rayborn-veils_of_light-02-tabak-204-233.mp3"	"f/strojovna_07-dirnix-02-basetra_noje-204-233.mp3"	"d/jeff_wahl-guitarscapes-09-spanish_ballad-30-59.mp3"
+"16703"	"53972"	"342"	"29"	"1"	"6"	"1/dac_crowell-sferica-04-benthic-929-958.mp3"	"1/tanya_tomkins_and_eric_zivian-beethoven_piano_and_cello_works-16-sonata_in_d_major_op__102_no__2_adagio_con_molto_sentimento_daffetto-59-88.mp3"	"8/jacob_heringman-josquin_des_prez_lute_settings-01-anon__praeter_rerum_seriem-117-146.mp3"
+"47903"	"56140"	"33640"	"3"	"11"	"10"	"a/jade_leary-the_lost_art_of_human_kindness-12-earth_beyond_a_finite_thought-146-175.mp3"	"9/the_sarasa_ensemble-a_baroque_mosaic-20-cantata_il_delirio_amoroso__aria_handel-233-262.mp3"	"d/ambient_teknology-the_all_seeing_eye_project-07-telekonology-204-233.mp3"
+"54126"	"52490"	"10128"	"0"	"0"	"1"	"1/vito_paternoster-cd1bach_cello_suites-16-suite_vi_in_re_magiore__sarabande-117-146.mp3"	"b/richard_savino-mertz__bardic_sounds-15-childrens_fairy_tale-175-204.mp3"	"3/spinecar-autophile-02-stay-30-59.mp3"
+"11075"	"11839"	"2626"	"2"	"5"	"4"	"1/zilla-egg-02-wicker_pilots-59-88.mp3"	"5/rapoon-cidar-03-black_feel-88-117.mp3"	"4/jay_kishor-the_color_of_night-01-malkauns-1248-1277.mp3"
+"28288"	"51177"	"21983"	"2"	"21"	"3"	"9/lisa_debenedictis-tigers-06-ocean_in_her_head-117-146.mp3"	"c/strojovna_07-number_1-14-blaudisco-204-233.mp3"	"d/paul_avgerinos-balancing_spheres-05-day_dreams__and_thirst_is_quenched-552-581.mp3"
+"50933"	"41647"	"52143"	"2"	"0"	"0"	"1/etherine-24_days-13-this_was_my_last_hope-88-117.mp3"	"e/atomic_opera-penguin_dust-09-watergrave-0-29.mp3"	"4/tim_rayborn-the_path_beyond-14-taqsim_ud-30-59.mp3"
+"55116"	"8522"	"5024"	"0"	"2"	"0"	"4/john_williams-long_ride_home-18-dog_dont_hunt-175-204.mp3"	"c/jay_kishor-the_payans_concert-02-nat_malhar-1683-1712.mp3"	"2/indidginus-seismic-01-superstring-30-59.mp3"
+"39518"	"49616"	"55555"	"41"	"6"	"2"	"2/burnshee_thornside-blues_and_misc-09-i_cant_say_no-204-233.mp3"	"a/jacob_heringman-black_cow-13-bakfark_non_accedat_ad_te_malum_secunda_pars-204-233.mp3"	"e/steven_devine-portrait_of_an_english_harpsichord-19-sonata_no_2_in_a_major_minuet_joseph_gibbs-59-88.mp3"
+"46366"	"13998"	"20805"	"24"	"7"	"5"	"7/american_bach_soloists-j_s__bach__mass_in_b_minor_cd2-11-osanna_in_exelsis-117-146.mp3"	"6/stargarden-ambient_excursions-03-mt_fuji-494-523.mp3"	"e/tilopa-out_of_the_blue-04-wings_over_water-320-349.mp3"
+"5453"	"6992"	"25493"	"11"	"3"	"2"	"f/dac_crowell-redshifted_harmonies-01-tranquilitatis-1509-1538.mp3"	"5/domased-selection-02-drunk_warrior-146-175.mp3"	"6/drop_trio-cezanne-05-wreck_of_the_zephyr-407-436.mp3"
+"14463"	"25278"	"26168"	"0"	"5"	"8"	"0/daniel_ben_pienaar-book_2_cd2_welltempered_clavier-03-prelude_and_fugue_no__14_in_fsharp_minor_bwv_883_praeludium-30-59.mp3"	"e/justin_bianco-forge-05-upon_the_shore-117-146.mp3"	"a/falik-dreams_from_the_machine-06-black_llama-30-59.mp3"
+"803"	"34628"	"25656"	"0"	"1"	"1"	"f/lisa_debenedictis-fruitless-01-brilliant_day-0-29.mp3"	"4/magnatune-romantic_dinner_classical_compilation-08-american_baroque__quartet_in_g_mozart-0-29.mp3"	"1/tanya_tomkins_and_eric_zivian-beethoven_piano_and_cello_works-06-11_bagatelles_for_solo_fortepiano_op__119_no__3-59-88.mp3"
+"1128"	"51065"	"3224"	"0"	"2"	"0"	"d/ambient_teknology-the_all_seeing_eye_project-01-cyclops-523-552.mp3"	"e/steven_devine-portrait_of_an_english_harpsichord-14-sonata_no_4_in_c_minor_largo_joseph_kelway-88-117.mp3"	"1/solace-the_gathering_season-01-paradise_lost-204-233.mp3"
+"41578"	"46571"	"45563"	"2"	"3"	"3"	"5/rapoon-fallen_gods-09-valley-117-146.mp3"	"4/american_bach_soloists-j_s__bach__mass_in_b_minor_cd1-11-quoniam_to_solus_sanctus-146-175.mp3"	"e/justin_bianco-forge-11-ether-88-117.mp3"
+"20975"	"44684"	"47952"	"2"	"0"	"0"	"f/jackalopes-jacksploitation-05-1_percent_muthafucka-0-29.mp3"	"e/jamie_janover_and_michael_masley-all_strings_considered-10-twice_versa-88-117.mp3"	"a/ensemble_sreteniye-ancient_church_singing_of_byzantine_georgia_and_rus-12-eucharist_canon_fragment-175-204.mp3"
+"21336"	"52054"	"40740"	"2"	"1"	"16"	"9/janine_johnson-german_keyboard_masters-05-auf_das_heilige_pfingstfest_pachelbel-59-88.mp3"	"d/katherine_roberts_perl-j_s__bach_french_suites-14-suite_no_3_in_b_minor_bwv_814_allemande-146-175.mp3"	"f/ivilion-sartinal-09-sartinal_iii-175-204.mp3"
+"34893"	"21576"	"49025"	"1"	"5"	"1"	"c/o_fickle_fortune-a_celebration_of_robert_burns-08-bonie_wee_thing-0-29.mp3"	"3/mandrake_root-the_seventh_mirror-05-build_o_burn-30-59.mp3"	"2/vito_paternoster-cd2bach_cello_suites-12-suite_iv_in_mi_bemolle_maggiore__gigue-88-117.mp3"
+"28337"	"3892"	"54954"	"1"	"0"	"1"	"6/the_kokoon-erase-06-order-59-88.mp3"	"5/sitar-first_congregational_church_concert-01-raga_patdeep__alap__jay_kishor-871-900.mp3"	"b/janine_johnson-bach_goldberg_variations-17-variatio_16_a_1_clav_ouverture-0-29.mp3"
+"53557"	"23383"	"20548"	"21"	"37"	"4"	"e/briddes_roune-lenten_is_come-16-brid_by_a_strem-59-88.mp3"	"8/burning_babylon-knives_to_the_treble-05-mash_up_the_dj-117-146.mp3"	"4/jami_sieber-second_sight-04-tree_of_love-233-262.mp3"
+"13737"	"5498"	"36086"	"0"	"2"	"0"	"f/thursday_group-first_album-03-lynchs_law-117-146.mp3"	"c/the_art_of_the_lute_player-the_art_of_the_lute_player-01-un_gay_bergier__thomas_crecquillion__valentin_bakfark__jacob_heringman-117-146.mp3"	"2/stellamara-star_of_the_sea-08-karuna-262-291.mp3"
+"3083"	"37706"	"7457"	"1"	"0"	"0"	"5/arthur_yoria-of_the_lovely-01-of_the_lovely-146-175.mp3"	"6/falik-streaks_and_strokes-08-tabouli_gumbo-30-59.mp3"	"7/claire_fitch-ambiencellist_part_ii-02-four_days-204-233.mp3"
+"40133"	"11549"	"15037"	"1"	"1"	"1"	"f/lizzi-love_and_you_and_i-09-my_destination-59-88.mp3"	"a/tilopa-by_the_way-03-amigos_de_viaje-204-233.mp3"	"1/spinecar-up_from_the_mud-03-smoke-0-29.mp3"
+"21993"	"25776"	"29873"	"1"	"1"	"6"	"d/paul_avgerinos-balancing_spheres-05-day_dreams__and_thirst_is_quenched-842-871.mp3"	"f/magnatune-relaxation_spa-06-after_claire_fitch-146-175.mp3"	"e/touchinggrace-submission-06-watching_clouds-175-204.mp3"
+"3868"	"14053"	"26026"	"0"	"2"	"0"	"5/sitar-first_congregational_church_concert-01-raga_patdeep__alap__jay_kishor-175-204.mp3"	"9/indidginus-sine_language-03-myriad-204-233.mp3"	"0/solace-iman-06-azure-30-59.mp3"
+"35888"	"7613"	"1802"	"0"	"1"	"0"	"5/processor-are_you_for_real-08-impulse-146-175.mp3"	"a/the_headroom_project-ciri_a_doro-02-gunklat_sasmazor-262-291.mp3"	"f/jackalopes-jacksploitation-01-good_clean_fun_laundromat-30-59.mp3"
+"49616"	"39518"	"55555"	"5"	"34"	"6"	"a/jacob_heringman-black_cow-13-bakfark_non_accedat_ad_te_malum_secunda_pars-204-233.mp3"	"2/burnshee_thornside-blues_and_misc-09-i_cant_say_no-204-233.mp3"	"e/steven_devine-portrait_of_an_english_harpsichord-19-sonata_no_2_in_a_major_minuet_joseph_gibbs-59-88.mp3"
+"27326"	"37180"	"38122"	"15"	"10"	"17"	"9/the_seldon_plan-making_circles-06-holding_patterns_are_slow-175-204.mp3"	"c/william_brooks-fowl_mouth-08-scooter-0-29.mp3"	"c/rapoon-easterly_6_or_7-08-variable_2-349-378.mp3"
+"813"	"175"	"12655"	"0"	"0"	"1"	"9/wicked_boy-chemistry-01-buy_my_pullovers-30-59.mp3"	"e/burning_babylon-stereo_mash_up-01-7_nine_skank-0-29.mp3"	"6/tom_paul-i_was_king-03-drops_that_hit_the_sand-204-233.mp3"
+"45114"	"38721"	"7927"	"0"	"0"	"3"	"4/jami_sieber-hidden_sky-11-arms_of_the_mother-117-146.mp3"	"6/sand_craig_and_dornenburg-biber_violin_sonatas-09-biber_rosary_sonata_14_in_d_major_the_assumption_of_mary-204-233.mp3"	"5/arthur_yoria-of_the_lovely-02-just_like_you-88-117.mp3"
+"18968"	"49995"	"8884"	"2"	"8"	"3"	"6/paul_beier-michelagnolo_galilei-04-passemezzo_and_saltarello-233-262.mp3"	"9/lisa_debenedictis-tigers-13-girl_and_supergirl-59-88.mp3"	"9/musica_franca-corrette__le_phenix__les_delices_de_la_solitude-02-phenix__adagio-30-59.mp3"
+"48750"	"34898"	"39821"	"0"	"0"	"3"	"f/philharmonia_baroque_orchestra-handel__atalanta_cd2-12-recitativo_sono_irene_oppur_sogno-0-29.mp3"	"c/o_fickle_fortune-a_celebration_of_robert_burns-08-bonie_wee_thing-146-175.mp3"	"c/hands_upon_black_earth-hands_upon_black_earth-09-lastime-30-59.mp3"
+"22058"	"43611"	"31227"	"1"	"0"	"4"	"1/mijo-fata_morgana-05-deep_bass_9-146-175.mp3"	"8/stargarden-music_for_modern_listening-10-p5_mon_amour-146-175.mp3"	"b/shane_jackman-sanctuary-07-early_frost-175-204.mp3"
+"33029"	"448"	"20213"	"0"	"3"	"3"	"1/zilla-egg-07-rufus-88-117.mp3"	"b/satori-journey_to_other_worlds-01-astral_flight-813-842.mp3"	"b/rob_costlow-sophomore_jinx-04-summer_garden-204-233.mp3"
+"45936"	"5881"	"227"	"1"	"0"	"1"	"e/magnatune_compilation-high_energy_rock_and_roll-11-jackalopes_frankenstein_girl-59-88.mp3"	"9/american_bach_soloists-heinrich_schutz__musicalische_exequien-02-musicalische_exequien_swv_280_teil_ii_motette_herr_wenn_ich_nur_dich_habe-59-88.mp3"	"9/the_wretch-ambulatory-01-admission-30-59.mp3"
+"2423"	"13041"	"52368"	"0"	"0"	"1"	"c/liquid_zen-oscilloscope-01-levier_darmement-204-233.mp3"	"8/mercy_machine-in_your_bed__the_remixes-03-fountain_street_q_burns_abstract_message_mix-88-117.mp3"	"b/altri_stromenti-uccellini-15-alla_roversa_uccellini-30-59.mp3"
+"40226"	"12032"	"41470"	"26"	"11"	"3"	"d/drevo-christian_themes_in_ukrainian_folk_songs-09-o_did_you_learn_o_people_such_news-146-175.mp3"	"e/dac_crowell-within_this_space-03-cantillation-639-668.mp3"	"b/suzanne_teng-miles_beyond-09-tiens_lullaby-175-204.mp3"
+"43720"	"21806"	"27879"	"7"	"11"	"8"	"5/arthur_yoria-suerte_something-10-places_everyone-59-88.mp3"	"b/philharmonia_baroque-mozart_orchestral_works-05-concerto_for_flute_and_harp_in_c_major_kv299_allegro-175-204.mp3"	"5/mrdc-plethora-06-lostcode-88-117.mp3"
+"44689"	"6034"	"44918"	"0"	"0"	"1"	"7/rob_costlow-woods_of_chaos-10-twilight-88-117.mp3"	"0/chris_harvey-the_white_sail-02-allegiance-146-175.mp3"	"e/steven_devine-portrait_of_an_english_harpsichord-11-sonata_no_1_in_f_major_allegro_thomas_arne-0-29.mp3"
+"8773"	"7889"	"53837"	"0"	"0"	"1"	"b/satori-journey_to_other_worlds-02-other_worlds-1596-1625.mp3"	"5/rapoon-fallen_gods-02-iron_path-262-291.mp3"	"2/duo_chambure-vihuela_duets_of_valderrabano-16-petite_camusete_adriano_willaert-30-59.mp3"
+"15856"	"42746"	"528"	"2"	"1"	"1"	"a/jade_leary-and_come_the_sirens-03-tropics-88-117.mp3"	"0/apa_ya-apa_ya-10-funky_funky-88-117.mp3"	"8/mercy_machine-mercy_machine-01-bastard-30-59.mp3"
+"58513"	"20219"	"14212"	"1"	"1"	"0"	"b/janine_johnson-bach_goldberg_variations-29-variatio_28_a_2_clav-0-29.mp3"	"e/touchinggrace-submission-04-sunday_driver-88-117.mp3"	"d/tim_rayborn-chordae-03-o_suavis-697-726.mp3"
+"3477"	"26214"	"12908"	"0"	"2"	"1"	"2/ensemble_sreteniye___three_holies_church_choristers-dont_cry_rachael-01-psalm_128_at_the_time_of_wedding_byzantine_chant-30-59.mp3"	"1/etherine-24_days-06-burn_down_the_pleasure-146-175.mp3"	"5/rapoon-fallen_gods-03-fallen_gods-523-552.mp3"
+"53857"	"44180"	"18594"	"1"	"26"	"2"	"d/daniel_ben_pienaar-book_2_cd1_welltempered_clavier-16-prelude_and_fugue_no__8_in_dsharp_minor_bwv_877_fuga-88-117.mp3"	"1/william_brooks-karma_dogs-10-slacker_blues-204-233.mp3"	"e/justin_bianco-forge-04-mischief-0-29.mp3"
+"29958"	"13748"	"28479"	"18"	"8"	"16"	"d/paul_avgerinos-words_touch-06-weightless_you_are-610-639.mp3"	"f/magnatune-relaxation_spa-03-march_thirtyone_falling_you-204-233.mp3"	"a/liquid_zen-magic_midsummer-06-por_tus_ojos-88-117.mp3"
+"33882"	"57076"	"9150"	"0"	"1"	"3"	"b/paul_beier-alessandro_piccinini-07-toccata_xvii-30-59.mp3"	"d/daniel_ben_pienaar-book_2_cd1_welltempered_clavier-22-prelude_and_fugue_no__11_in_f_major_bwv_880_fuga-59-88.mp3"	"a/bjorn_fogelberg-karooshi_porn-02-quite_derivative-175-204.mp3"
+"34190"	"8580"	"49580"	"7"	"3"	"9"	"a/bjorn_fogelberg-karooshi_porn-07-wave-117-146.mp3"	"4/dac_crowell-spctr-02-northeastern_corridor-610-639.mp3"	"b/dj_cary-power_synths-13-atom__instrumental_mix_trancevision-30-59.mp3"
+"32218"	"9899"	"10775"	"35"	"46"	"67"	"8/tim_rayborn-veils_of_light-07-maaz_zami-30-59.mp3"	"5/edward_martin_and_paul_berget-baroque_lute_duets-02-sonata_in_c_major_weiss__allegro_1_and_2-204-233.mp3"	"7/dac_crowell-the_sea_and_the_sky-02-umi_no_kami_ni_kansha-1480-1509.mp3"
+"43201"	"52271"	"36572"	"22"	"30"	"28"	"a/bjorn_fogelberg-karooshi_porn-10-low_level_format-0-29.mp3"	"1/etherine-24_days-14-what_if_it_happened_somewhere_else-59-88.mp3"	"e/yongen-moonrise-08-nylon_heart-117-146.mp3"
+"39653"	"50052"	"41805"	"8"	"6"	"2"	"6/dj_markitos-slower_emotions138_bpm_remixes-09-inside_your_dreams_138_bpm_remix-146-175.mp3"	"6/tom_paul-i_was_king-13-i_wish_the_world_was_flat-59-88.mp3"	"0/rocket_city_riot-last_of_the_pleasure_seekers-10-in_my_bones-30-59.mp3"
+"30745"	"28431"	"2816"	"11"	"2"	"9"	"3/spinecar-autophile-07-cant_sleep-0-29.mp3"	"5/four_stones_net-ridin_the_faders-06-part_6-88-117.mp3"	"f/memories_of_tomorrow-waiting_for_dawn-01-memories_of_tomorrow-291-320.mp3"
+"15538"	"40035"	"55703"	"11"	"2"	"7"	"5/processor-are_you_for_real-03-technojorgen-117-146.mp3"	"a/jade_leary-the_lost_art_of_human_kindness-09-meaner_than_winter-146-175.mp3"	"a/edward_martin_and_william_bastian-virtues_and_vices-19-eau_vive_source_damour_jacues_mauduit-175-204.mp3"
+"42271"	"3551"	"17701"	"2"	"0"	"0"	"9/the_strap_ons-geeking_crime-10-chucky_got_lucky-30-59.mp3"	"1/the_rajdhani_quartet-the_gandhi_memorial_concert-01-raga_hansa_kalyani-610-639.mp3"	"5/satori-for_relaxation-04-forest_surround-117-146.mp3"
+"49025"	"21576"	"34893"	"1"	"8"	"1"	"2/vito_paternoster-cd2bach_cello_suites-12-suite_iv_in_mi_bemolle_maggiore__gigue-88-117.mp3"	"3/mandrake_root-the_seventh_mirror-05-build_o_burn-30-59.mp3"	"c/o_fickle_fortune-a_celebration_of_robert_burns-08-bonie_wee_thing-0-29.mp3"
+"19314"	"8003"	"42101"	"2"	"1"	"0"	"3/etherfysh-box_of_fysh-04-rama-0-29.mp3"	"2/solace-ahsas-02-khatar_dawr_hindi_78-30-59.mp3"	"b/altri_stromenti-uccellini-10-beatus_uccellini-59-88.mp3"
+"28431"	"48816"	"32254"	"1"	"1"	"2"	"5/four_stones_net-ridin_the_faders-06-part_6-88-117.mp3"	"9/the_seldon_plan-making_circles-12-samuel_p__huntington-175-204.mp3"	"e/briddes_roune-lenten_is_come-07-man_mai_longe_lives_weene-59-88.mp3"
+"53779"	"13138"	"2848"	"48"	"17"	"12"	"b/la_primavera-english_renaissance_music-16-martin_said_to_his_man_anon-59-88.mp3"	"b/electric_frankenstein-dead_and_back-03-good_for_nothing-88-117.mp3"	"4/norine_braun-modern_anguish-01-modern_anguish-204-233.mp3"
+"11904"	"31108"	"9312"	"3"	"7"	"5"	"d/belief_systems-eproms-03-boiling-175-204.mp3"	"5/human_response-survival-07-distance-262-291.mp3"	"5/sitar-first_congregational_church_concert-02-raga_patdeep__gat__jay_kishor-1277-1306.mp3"
+"2486"	"4071"	"56693"	"6"	"14"	"20"	"9/etherine-gleam-01-lost-262-291.mp3"	"3/dj_cary-downtempo_chill-01-ruff_and_tumble_mr_epic-233-262.mp3"	"9/american_baroque-dances_and_suites_of_rameau_and_couperin-21-les_fauvetes_plaintives_xiveme_ordre_couperin-146-175.mp3"
+"23780"	"11633"	"3914"	"1"	"0"	"1"	"e/yongen-moonrise-05-one-204-233.mp3"	"0/apa_ya-apa_ya-03-antare_e_dhu-175-204.mp3"	"5/sitar-first_congregational_church_concert-01-raga_patdeep__alap__jay_kishor-1509-1538.mp3"
+"52830"	"5259"	"22715"	"1"	"0"	"1"	"d/sarasa_ensemble_labelle_sylvan-bach_cantatas-15-liebster_jesu_mein_veriangen_aria-146-175.mp3"	"b/ehren_starks-the_depths_of_a_year-01-the_tale_of_room_620-30-59.mp3"	"5/domased-selection-05-highway_accident-146-175.mp3"
+"47279"	"42679"	"5464"	"2"	"3"	"4"	"f/glen_bledsoe-octopants-11-und_so_weiter_i-0-29.mp3"	"8/cargo_cult-vibrant-10-fifth-59-88.mp3"	"a/bjorn_fogelberg-karooshi_porn-01-trioxidation-0-29.mp3"
+"41134"	"39938"	"158"	"0"	"1"	"1"	"b/ehren_starks-the_depths_of_a_year-09-subtle_groove-30-59.mp3"	"8/magnatune-red_hat_summit_compilation-09-lizzi__lay_down-117-146.mp3"	"5/new_york_consort_of_viols-dances_and_canzonas_of_holborne_and_brade-01-3_almaines_holborne-610-639.mp3"
+"25176"	"10426"	"33454"	"2"	"1"	"1"	"6/dr_kuch-analog_disease-05-the_persuaders_dub-117-146.mp3"	"4/paul_avgerinos-sky_of_grace-02-the_calling-117-146.mp3"	"a/falling_you-human-07-starshine-378-407.mp3"
+"28835"	"13286"	"17708"	"2"	"0"	"0"	"9/self_delusion-happiness_hurts_me-06-secret_life-175-204.mp3"	"3/sherefe-opium-03-huzam_kamelieriko-59-88.mp3"	"1/jeff_wahl-guinevere-04-freedom-30-59.mp3"
+"10900"	"51861"	"49373"	"6"	"1"	"0"	"5/paul_beier-simone_molinaro-02-ung_gaij_bergier__canzone_francese_a_quattro_di_thomas_crequillon-146-175.mp3"	"7/jeni_melia-the_last_of_old_england-14-she_moved_through_the_fair_trad-117-146.mp3"	"e/briddes_roune-lenten_is_come-12-worldes_blis-88-117.mp3"
+"26678"	"21897"	"19853"	"0"	"0"	"2"	"e/hans_christian-phantoms-06-desperado-204-233.mp3"	"6/curandero-curandero-05-corriendo_juntos-117-146.mp3"	"1/phebe_craig_and_katherine_westine-beside_themselves-04-soler_conceierto_ii_in_a_minor_andante-175-204.mp3"
+"20042"	"1973"	"24908"	"22"	"110"	"21"	"3/les_filles_de_sainte_colombe-german_music_for_viols_and_harpsichord-04-sonata_xi_in_g_major_schenck-291-320.mp3"	"7/paul_avgerinos-phos_hilaron-01-humbly_i_adore_thee-465-494.mp3"	"2/vito_paternoster-cd2bach_cello_suites-05-suite_iii_in_do_maggiore__bourree_i_e_ii-88-117.mp3"
+"50057"	"18157"	"44551"	"11"	"8"	"1"	"6/tom_paul-i_was_king-13-i_wish_the_world_was_flat-204-233.mp3"	"6/mercy_machine-in_your_bed-04-invisible-146-175.mp3"	"a/jade_leary-the_lost_art_of_human_kindness-10-the_lost_art_of_human_kindness-233-262.mp3"
+"18157"	"50057"	"44551"	"6"	"8"	"4"	"6/mercy_machine-in_your_bed-04-invisible-146-175.mp3"	"6/tom_paul-i_was_king-13-i_wish_the_world_was_flat-204-233.mp3"	"a/jade_leary-the_lost_art_of_human_kindness-10-the_lost_art_of_human_kindness-233-262.mp3"
+"35229"	"8767"	"45934"	"0"	"0"	"2"	"4/american_bach_soloists-j_s__bach__mass_in_b_minor_cd1-08-domine_deus-175-204.mp3"	"b/satori-journey_to_other_worlds-02-other_worlds-1422-1451.mp3"	"e/magnatune_compilation-high_energy_rock_and_roll-11-jackalopes_frankenstein_girl-0-29.mp3"
+"33478"	"43612"	"15969"	"1"	"1"	"0"	"5/stargarden-step_off-07-step_out_to_the_stars-581-610.mp3"	"8/stargarden-music_for_modern_listening-10-p5_mon_amour-175-204.mp3"	"1/zilla-egg-03-velvet_periscope-233-262.mp3"
+"47739"	"55783"	"36335"	"2"	"35"	"6"	"b/magnatune_compilation-rock-12-cargo_cult_our_song-30-59.mp3"	"9/american_baroque-dances_and_suites_of_rameau_and_couperin-19-le_rossignol_en_amour_xiveme_ordre_couperin-0-29.mp3"	"7/roots_of_rebellion-the_looking_glass-08-messenger-175-204.mp3"
+"38419"	"58376"	"21451"	"3"	"1"	"2"	"e/burning_babylon-stereo_mash_up-09-1500_tons-0-29.mp3"	"c/magnatune-classical-28-jan_lathamkoenig_franck_psyche_enlevee_par_les_zephirs-146-175.mp3"	"b/rob_costlow-sophomore_jinx-05-bliss-59-88.mp3"
+"21321"	"44532"	"39220"	"0"	"0"	"2"	"e/hans_christian-phantoms-05-atlantis-59-88.mp3"	"6/falik-streaks_and_strokes-10-the_last_faery-0-29.mp3"	"8/beth_quist-lucidity-09-ferte_preza_na_prezarro-146-175.mp3"
+"4847"	"10846"	"32069"	"2"	"26"	"5"	"8/hybris-the_first_words-01-squalid_rooms-59-88.mp3"	"5/thursday_group-uncle_mean-02-uncle_mean-233-262.mp3"	"2/mrdc-timecode-07-leaving-88-117.mp3"
+"24295"	"22528"	"31104"	"2"	"1"	"0"	"9/the_kokoon-berlin-05-scout-117-146.mp3"	"6/philharmonia_baroque-rameau_and_leclair-05-gavottes__air_pour_les_pagodes__contredanse_en_roundeau_rameau_les_paladins-88-117.mp3"	"5/human_response-survival-07-distance-146-175.mp3"
+"10900"	"49373"	"51861"	"3"	"2"	"0"	"5/paul_beier-simone_molinaro-02-ung_gaij_bergier__canzone_francese_a_quattro_di_thomas_crequillon-146-175.mp3"	"e/briddes_roune-lenten_is_come-12-worldes_blis-88-117.mp3"	"7/jeni_melia-the_last_of_old_england-14-she_moved_through_the_fair_trad-117-146.mp3"
+"28315"	"5002"	"55324"	"0"	"3"	"6"	"f/norine_braun-and_the_mood_swings-06-one_breath-146-175.mp3"	"4/dj_markitos-evolution_of_the_mind-01-sunset_endless_night_journey_remix-30-59.mp3"	"f/philharmonia_baroque_orchestra-handel__atalanta_cd2-18-recitativo_lo_vo_morir___gia_corro___-0-29.mp3"
+"11535"	"10387"	"34308"	"1"	"1"	"1"	"8/beth_quist-lucidity-03-american_giver-0-29.mp3"	"f/hans_christian-surrender-02-tears_for_ma-262-291.mp3"	"4/seismic_anamoly-sweet_rock_candy-07-wreckinball-436-465.mp3"
+"4857"	"2057"	"1770"	"0"	"2"	"0"	"e/mountain_mirrors-mountain_mirrors-01-stay_evil-59-88.mp3"	"f/thursday_group-first_album-01-innocent_murmur-146-175.mp3"	"8/sun_palace-give_me_a_perfect_world-01-give_me_a_perfect_world-59-88.mp3"
+"19601"	"37546"	"8952"	"1"	"0"	"0"	"9/suzanne_teng-enchanted_wind-04-septembers_angels-262-291.mp3"	"5/dj_markitos-unreachable_destiny-08-strange_sensations-59-88.mp3"	"0/the_bots-truth-02-power_and_domination-30-59.mp3"
+"56581"	"37228"	"18853"	"7"	"12"	"3"	"0/ensemble_vermillian-stolen_jewels-21-buxtehude_sonata_iii_op__i_prestoadagio-59-88.mp3"	"a/yongen-yello_haus-08-shackles_of_gold-175-204.mp3"	"0/william_brooks-bitter_circus-04-ole_soledad-0-29.mp3"
+"44579"	"23901"	"4333"	"0"	"0"	"1"	"e/john_jackson-bad_things_happen_all_the_time-10-through_the_glass-30-59.mp3"	"5/thursday_group-uncle_mean-05-pelican_fan-349-378.mp3"	"2/magnatune_remixed-ridin_the_faders_2-01-shining_star_games_az_egan_csillag_lenni__fourstones-30-59.mp3"
+"27702"	"10388"	"37832"	"2"	"0"	"0"	"5/ralph_rousseau_meulenbroeks-moved_by_marais-06-le_folies_despagnes_le_deuxieme_livre_de_pieces_de_viole_1701-639-668.mp3"	"f/hans_christian-surrender-02-tears_for_ma-291-320.mp3"	"f/memories_of_tomorrow-waiting_for_dawn-08-the_games_you_play_trance_mix-30-59.mp3"
+"36147"	"50477"	"15309"	"0"	"2"	"0"	"7/artemis-gravity-08-la_belle-88-117.mp3"	"0/american_bach_soloists-j_s__bach__transcriptions_of_italian_music-13-psalm_51_tilge_hochster_meine_sunden_x_andante_verses_11_through_15-291-320.mp3"	"b/belief_systems-eponyms-03-starbase_lounge_music-146-175.mp3"
+"1964"	"8159"	"4605"	"1"	"0"	"1"	"7/paul_avgerinos-phos_hilaron-01-humbly_i_adore_thee-204-233.mp3"	"0/jag-juke_joint_boogie-02-lay_down_your_plow-0-29.mp3"	"1/tanya_tomkins_and_eric_zivian-beethoven_piano_and_cello_works-01-sonata_in_g_minor_op__5_no__2_adagio___allegro-204-233.mp3"
+"45459"	"15092"	"44652"	"4"	"5"	"22"	"e/joram-moments_of_clarity-11-diemos-146-175.mp3"	"2/version-versions-03-solaire-320-349.mp3"	"c/telemann_trio_berlin-telemann_trio_berlin-10-triosonate_in_ddur__allegro_c_p__bach-233-262.mp3"
+"24525"	"58630"	"9935"	"13"	"3"	"2"	"9/arthur_yoria-ill_be_here_awake-05-sleep_is_on_the_way-117-146.mp3"	"b/janine_johnson-bach_goldberg_variations-31-variatio_30_a_1_clav_quodlibet-30-59.mp3"	"4/seth_carlin-schubert__works_for_solo_fortepiano-02-sonata_in_eflat_major_opus_posth__122__andante_molto-0-29.mp3"
+"46909"	"48220"	"649"	"15"	"73"	"22"	"1/solace-the_gathering_season-11-sudan-146-175.mp3"	"f/strojovna_07-switch_on__switch_off-12-jala__jala-204-233.mp3"	"c/jay_kishor-the_payans_concert-01-bhimpalasi-1770-1799.mp3"
+"9069"	"8394"	"19206"	"1"	"1"	"1"	"a/ensemble_sreteniye-ancient_church_singing_of_byzantine_georgia_and_rus-02-psalm_146_and_o_thou_the_only_begotten_son-59-88.mp3"	"9/various_artists-the_2007_magnatune_records_sampler-02-moonrise_yongen-59-88.mp3"	"3/mandrake_root-the_seventh_mirror-04-put_your_money_where_your_mouth_is-0-29.mp3"
+"5881"	"45936"	"227"	"0"	"1"	"0"	"9/american_bach_soloists-heinrich_schutz__musicalische_exequien-02-musicalische_exequien_swv_280_teil_ii_motette_herr_wenn_ich_nur_dich_habe-59-88.mp3"	"e/magnatune_compilation-high_energy_rock_and_roll-11-jackalopes_frankenstein_girl-59-88.mp3"	"9/the_wretch-ambulatory-01-admission-30-59.mp3"
+"20536"	"46254"	"9938"	"1"	"0"	"0"	"e/magnatune_com-magnatune_at_the_cc_salon-04-tranquilo_curandero-146-175.mp3"	"f/kyiv_chamber_choir-masterpieces_of_the_ukrainian_choral_baroque-11-o_lord_thou_are_my_only_hope-378-407.mp3"	"4/seth_carlin-schubert__works_for_solo_fortepiano-02-sonata_in_eflat_major_opus_posth__122__andante_molto-88-117.mp3"
+"46254"	"20536"	"9938"	"0"	"2"	"0"	"f/kyiv_chamber_choir-masterpieces_of_the_ukrainian_choral_baroque-11-o_lord_thou_are_my_only_hope-378-407.mp3"	"e/magnatune_com-magnatune_at_the_cc_salon-04-tranquilo_curandero-146-175.mp3"	"4/seth_carlin-schubert__works_for_solo_fortepiano-02-sonata_in_eflat_major_opus_posth__122__andante_molto-88-117.mp3"
+"55246"	"27468"	"56867"	"1"	"3"	"1"	"3/jacob_heringman-siena_lute_book-18-la_volunte_sandrin-117-146.mp3"	"2/magnatune_compilation-electronica-06-indidginus_dusty_lands-262-291.mp3"	"b/janine_johnson-bach_goldberg_variations-21-variatio_20_a_2_clav-88-117.mp3"
+"8666"	"45584"	"5511"	"2"	"0"	"0"	"d/drevo-christian_themes_in_ukrainian_folk_songs-02-oh_uncle_in_your_yard-146-175.mp3"	"0/rocket_city_riot-middle_age_suicide-11-everyday_like_saturday_bonus_track-30-59.mp3"	"3/emmas_mini-beat_generation_mad_trick-01-unknown-146-175.mp3"
+"41781"	"45713"	"25493"	"5"	"22"	"2"	"7/monoide-zeitpunkt-09-zeitpunkt-204-233.mp3"	"7/beight-file_in_rhythm-11-ghostly_feeling-88-117.mp3"	"6/drop_trio-cezanne-05-wreck_of_the_zephyr-407-436.mp3"
+"35493"	"27453"	"44191"	"5"	"15"	"1"	"d/beth_quist-shall_we_dance-08-finale-320-349.mp3"	"7/artemis-gravity-06-inception-146-175.mp3"	"5/stargarden-the_art_of_analog_diversion-10-smooth-88-117.mp3"
+"49311"	"21556"	"49514"	"1"	"0"	"0"	"a/janine_johnson-chopin_recital-12-valse_brilliante_op_18_in_eb_major-146-175.mp3"	"a/james_edwards-le_tresor_dorphee_by_antoine_francisque-05-branle_simple_a_cordes_avalees_troisiesme-30-59.mp3"	"1/tim_rayborn-qadim-13-amniat__robab_afghan-59-88.mp3"
+"43509"	"19374"	"5396"	"11"	"7"	"11"	"7/claire_fitch-ambiencellist_part_ii-10-oceanic_memories-0-29.mp3"	"3/dj_cary-downtempo_chill-04-reentry_cargo_cult-117-146.mp3"	"7/jag-cypress_grove_blues-01-train_train-59-88.mp3"
+"20288"	"37692"	"8922"	"2"	"2"	"4"	"9/introspekt-ideology-04-tbd-262-291.mp3"	"7/solace-rhythm_of_the_dance-08-sword_dance_routine-204-233.mp3"	"f/lisa_debenedictis-fruitless-02-planet_you-88-117.mp3"
+"58843"	"8725"	"37140"	"0"	"2"	"0"	"8/jacob_heringman-blame_not_my_lute-49-grene_sleves-0-29.mp3"	"b/satori-journey_to_other_worlds-02-other_worlds-204-233.mp3"	"0/american_bach_soloists-joseph_haydn__masses-08-sanctus__adagio__allegro-117-146.mp3"
+"38721"	"45114"	"7927"	"0"	"0"	"3"	"6/sand_craig_and_dornenburg-biber_violin_sonatas-09-biber_rosary_sonata_14_in_d_major_the_assumption_of_mary-204-233.mp3"	"4/jami_sieber-hidden_sky-11-arms_of_the_mother-117-146.mp3"	"5/arthur_yoria-of_the_lovely-02-just_like_you-88-117.mp3"
+"49441"	"41854"	"12336"	"1"	"1"	"0"	"f/the_headroom_project-jetuton_andawai-13-rainmaker-59-88.mp3"	"1/zilla-egg-10-a_bakers_dozen-30-59.mp3"	"c/domased-new_memories-03-crazy_days-291-320.mp3"
+"15755"	"40200"	"27167"	"0"	"1"	"1"	"2/ensemble_sreteniye___three_holies_church_choristers-dont_cry_rachael-03-to_thee_o_theotokos_bulgarian_chant-349-378.mp3"	"f/memories_of_tomorrow-waiting_for_dawn-09-not_like_this-262-291.mp3"	"a/jade_leary-and_come_the_sirens-06-forgotten-117-146.mp3"
+"46456"	"37064"	"27316"	"6"	"18"	"5"	"0/beth_quist-silver-11-planet-291-320.mp3"	"1/tim_rayborn-ashek-08-ravan-639-668.mp3"	"a/mr_gelatine-electroluv-06-hiphop110-30-59.mp3"
+"17881"	"41492"	"45650"	"0"	"1"	"2"	"0/beth_quist-silver-04-grace-204-233.mp3"	"6/jeni_melia-the_lost_art_of_wooing-09-toccata_no_6_in_f_major_hieronymus_kapsberger-88-117.mp3"	"e/solace-balance-11-feitian-175-204.mp3"
+"18135"	"34876"	"10696"	"1"	"0"	"1"	"6/mercy_machine-in_your_bed__instrumental_mix-04-invisible_instrumental_mix-117-146.mp3"	"4/monks_and_choirs_of_kiev_pechersk_lavra-chants_of_the_russian_orthodox_church-08-bless_is_the_man_authentic_kiev_chant-88-117.mp3"	"c/telemann_trio_berlin-telemann_trio_berlin-02-triosonate_fur_flute_violine_und_basso__allegro_telemann-0-29.mp3"
+"34360"	"46312"	"6826"	"0"	"0"	"1"	"6/ralph_meulenbroeks-gambomania-08-cors_de_chasse_in_d_major_louis_de_caix_dhervelois-117-146.mp3"	"a/ensemble_sreteniye-ancient_church_singing_of_byzantine_georgia_and_rus-11-o_theotokos_the_virgin_rejoice_ave_maria-1451-1480.mp3"	"f/strojovna_07-switch_on__switch_off-02-deluxe-175-204.mp3"
+"36438"	"1802"	"55144"	"0"	"0"	"1"	"5/arthur_yoria-of_the_lovely-08-my_best_routines-88-117.mp3"	"f/jackalopes-jacksploitation-01-good_clean_fun_laundromat-30-59.mp3"	"1/jacob_heringman-holburns_passion-18-fantasia_lute-0-29.mp3"
+"2968"	"33712"	"27443"	"0"	"0"	"2"	"d/paul_avgerinos-balancing_spheres-01-night_illusions__the_longing-610-639.mp3"	"9/cheryl_ann_fulton-the_airs_of_wales-07-the_dimpled_cheek-0-29.mp3"	"5/mr_epic-sideways-06-in-59-88.mp3"
+"36696"	"14385"	"32403"	"14"	"14"	"6"	"7/paul_avgerinos-phos_hilaron-08-oneness-204-233.mp3"	"3/very_large_array-stuff-03-perfect_place-88-117.mp3"	"7/falik-elvolution-07-my_beloved-233-262.mp3"
+"3858"	"45324"	"13497"	"17"	"16"	"5"	"9/sitar-cd1_the_sowebo_concert-01-raga_maru_bihag_alapjay_kishor-2089-2118.mp3"	"5/burnshee_thornside-rock_this_moon-11-city_girls-30-59.mp3"	"6/electric_frankenstein-conquers_the_world-03-just_like_your_mom-0-29.mp3"
+"15538"	"55703"	"40035"	"10"	"3"	"3"	"5/processor-are_you_for_real-03-technojorgen-117-146.mp3"	"a/edward_martin_and_william_bastian-virtues_and_vices-19-eau_vive_source_damour_jacues_mauduit-175-204.mp3"	"a/jade_leary-the_lost_art_of_human_kindness-09-meaner_than_winter-146-175.mp3"
+"10850"	"36664"	"12896"	"1"	"2"	"0"	"7/shane_jackman-equilibrium-02-uncommon_eloquence-0-29.mp3"	"8/mediva-viva_mediva-08-ondas_da_mar_codax-175-204.mp3"	"5/rapoon-fallen_gods-03-fallen_gods-175-204.mp3"
+"41473"	"10497"	"25993"	"1"	"0"	"1"	"b/suzanne_teng-miles_beyond-09-tiens_lullaby-262-291.mp3"	"5/cheryl_ann_fulton-the_once_and_future_harp-02-the_poet-349-378.mp3"	"8/kenji_williams-worldspirit_soundtrack-06-aura-0-29.mp3"
+"50678"	"43820"	"28144"	"8"	"10"	"9"	"c/vito_paternoster-cd1bach_sonatas_and_partitas_for_solo_violin-13-sonata_seconda_in_re_minore__grave-204-233.mp3"	"6/grayson_wray-picassos_dream-10-pure_delight-117-146.mp3"	"d/paul_avgerinos-maya__the_great_katun-06-night_of_the_goddess_part_2-378-407.mp3"
+"40744"	"50268"	"21948"	"1"	"0"	"1"	"f/ivilion-sartinal-09-sartinal_iii-291-320.mp3"	"9/junghae_kim-the_virginalists-13-my_ladye_nevells_ground_william_byrd-291-320.mp3"	"b/ehren_starks-the_depths_of_a_year-05-dads_song-175-204.mp3"
+"19314"	"42101"	"8003"	"1"	"0"	"0"	"3/etherfysh-box_of_fysh-04-rama-0-29.mp3"	"b/altri_stromenti-uccellini-10-beatus_uccellini-59-88.mp3"	"2/solace-ahsas-02-khatar_dawr_hindi_78-30-59.mp3"
+"44142"	"50101"	"30302"	"0"	"0"	"2"	"c/mountain_mirrors-lunar_ecstasy-10-sidewinder-0-29.mp3"	"4/justin_bianco-siren-13-incantation-0-29.mp3"	"3/sherefe-opium-07-alf_leyla_wa_leyla-88-117.mp3"
+"37696"	"17012"	"29056"	"16"	"3"	"4"	"7/solace-rhythm_of_the_dance-08-sword_dance_routine-320-349.mp3"	"1/ambient_teknology-phoenix-04-cloud_maker-465-494.mp3"	"6/falik-streaks_and_strokes-06-son_of_sand_flea-291-320.mp3"
+"37795"	"11263"	"13068"	"7"	"41"	"29"	"8/hybris-the_first_words-08-the_choice_i_never_had-117-146.mp3"	"0/american_bach_soloists-j_s__bach__cantatas_volume_v-03-gleichwie_der_regen_und_schnee_vom_himmel_fallt_bwv_18_iii_recitative_and_litany__mein_gott_hier_wird_mein_herze_sein-59-88.mp3"	"b/dj_cary-power_synths-03-from_love_2_wicked_allstars-204-233.mp3"
+"8688"	"19207"	"2086"	"4"	"2"	"24"	"3/mandrake_root-the_seventh_mirror-02-one_in_a_million-88-117.mp3"	"3/mandrake_root-the_seventh_mirror-04-put_your_money_where_your_mouth_is-30-59.mp3"	"c/dj_markitos-inside_your_dreams-01-interplanetary_travel-233-262.mp3"
+"8426"	"58323"	"26605"	"1"	"0"	"1"	"1/dac_crowell-sferica-02-murata-697-726.mp3"	"b/jacob_heringman-jane_pickeringes_lute_book-28-a_fantasia-88-117.mp3"	"3/kitka-the_vine-06-de_szeretnek_az_egen_csillag_lenni_hungary-146-175.mp3"
+"23903"	"33304"	"38465"	"0"	"2"	"0"	"5/thursday_group-uncle_mean-05-pelican_fan-407-436.mp3"	"4/seth_carlin-schubert__works_for_solo_fortepiano-07-sonata_in_a_major_opus_posth__120__allegro-320-349.mp3"	"1/ambient_teknology-phoenix-09-afterburner-146-175.mp3"
+"813"	"12655"	"175"	"0"	"0"	"2"	"9/wicked_boy-chemistry-01-buy_my_pullovers-30-59.mp3"	"6/tom_paul-i_was_king-03-drops_that_hit_the_sand-204-233.mp3"	"e/burning_babylon-stereo_mash_up-01-7_nine_skank-0-29.mp3"
+"57076"	"33882"	"9150"	"0"	"0"	"2"	"d/daniel_ben_pienaar-book_2_cd1_welltempered_clavier-22-prelude_and_fugue_no__11_in_f_major_bwv_880_fuga-59-88.mp3"	"b/paul_beier-alessandro_piccinini-07-toccata_xvii-30-59.mp3"	"a/bjorn_fogelberg-karooshi_porn-02-quite_derivative-175-204.mp3"
+"28431"	"32254"	"48816"	"1"	"2"	"0"	"5/four_stones_net-ridin_the_faders-06-part_6-88-117.mp3"	"e/briddes_roune-lenten_is_come-07-man_mai_longe_lives_weene-59-88.mp3"	"9/the_seldon_plan-making_circles-12-samuel_p__huntington-175-204.mp3"
+"29530"	"27885"	"40631"	"9"	"36"	"8"	"a/edward_martin_and_william_bastian-virtues_and_vices-06-tant_que_vivray_claudin_de_semisy-0-29.mp3"	"5/mrdc-plethora-06-lostcode-262-291.mp3"	"4/paul_berget-the_siena_manuscript_on_renaissance_lute-09-recercar_9-0-29.mp3"
+"32332"	"10810"	"34856"	"2"	"2"	"7"	"f/tilopa-turkishauch-07-meifrui_ii-320-349.mp3"	"7/dac_crowell-the_sea_and_the_sky-02-umi_no_kami_ni_kansha-2495-2524.mp3"	"b/magnatune_compilation-rock-08-beth_quist_monsters-59-88.mp3"
+"36438"	"55144"	"1802"	"4"	"34"	"7"	"5/arthur_yoria-of_the_lovely-08-my_best_routines-88-117.mp3"	"1/jacob_heringman-holburns_passion-18-fantasia_lute-0-29.mp3"	"f/jackalopes-jacksploitation-01-good_clean_fun_laundromat-30-59.mp3"
+"40913"	"54289"	"37827"	"0"	"0"	"2"	"4/ensemble_mirable-triemer_six_cello_sonatas-09-sonata_2_minuetto_i-88-117.mp3"	"a/jacob_heringman-black_cow-17-bakfark_fantasia-30-59.mp3"	"d/various_artists-the_art_of_persuasion-08-the_fate_cargo_cult-117-146.mp3"
+"36624"	"13363"	"40228"	"3"	"5"	"16"	"1/four_stones-chronic_dreams-08-ocean_in_her_head_spliff_mix-146-175.mp3"	"f/kenji_williams-faces_of_epiphany-03-illusion_bedrock_mix-378-407.mp3"	"f/jacob_heringman_and_catherine_king-alonso_mudarra_songs_and_solos-09-o_gelosia_de_amanti-0-29.mp3"
+"9816"	"43747"	"5473"	"1"	"0"	"0"	"8/justin_bianco-phoenix-02-so_softly-88-117.mp3"	"2/saros-soundscapes-10-prelude_3-0-29.mp3"	"a/bjorn_fogelberg-karooshi_porn-01-trioxidation-262-291.mp3"
+"2578"	"54627"	"52175"	"59"	"4"	"7"	"f/brad_sucks-i_dont_know_what_im_doing-01-making_me_nervous-0-29.mp3"	"0/daniel_ben_pienaar-book_2_cd2_welltempered_clavier-17-prelude_and_fugue_no__21_in_bflat_major_bwv_890_praeludium-59-88.mp3"	"9/cheryl_ann_fulton-the_airs_of_wales-14-the_welsh_ground-0-29.mp3"
+"27347"	"1757"	"41280"	"3"	"1"	"1"	"f/ivilion-sartinal-06-hshante-233-262.mp3"	"8/tim_rayborn-veils_of_light-01-gilim-0-29.mp3"	"6/curandero-curandero-09-teddy_bear-30-59.mp3"
+"48348"	"17159"	"27309"	"1"	"1"	"0"	"3/kitka-the_vine-12-mershkvaris_simghera_rimtitairi_georgia-59-88.mp3"	"2/magnatune_remixed-ridin_the_faders_2-04-curl_my_cranium__lo_tag_blanco_and_fourstones-30-59.mp3"	"c/william_brooks-fowl_mouth-06-hideaway-30-59.mp3"
+"17483"	"44596"	"53909"	"15"	"18"	"20"	"5/dj_markitos-unreachable_destiny-04-element_of_truth-0-29.mp3"	"e/solace-balance-10-tiger_moon_dance-146-175.mp3"	"f/philharmonia_baroque_orchestra-handel__atalanta_cd2-16-recitativo_oh_del_crudo_mio_bene-30-59.mp3"
+"8781"	"38170"	"31387"	"3"	"5"	"5"	"c/rapoon-easterly_6_or_7-02-our_tresspasses-175-204.mp3"	"5/cheryl_ann_fulton-the_once_and_future_harp-08-virgin_light-0-29.mp3"	"7/aba_structure-epic-07-erased-755-784.mp3"
+"14627"	"17471"	"28952"	"2"	"2"	"1"	"f/dac_crowell-redshifted_harmonies-03-redshifted_harmonies-59-88.mp3"	"b/belief_systems-eponyms-04-electro_kinetic-30-59.mp3"	"3/etherfysh-box_of_fysh-06-sidewalk-320-349.mp3"
+"9386"	"31786"	"52858"	"2"	"1"	"0"	"0/paul_berget-the_siena_manuscript_on_steel_string_guitar-02-recercar_2_steel_string_guitar-0-29.mp3"	"e/c_layne-the_sun_will_come_out_to_blind_you-07-how_soon_i_forget-117-146.mp3"	"5/kammen___swan-wild_wood-15-lullaby_set-204-233.mp3"
+"21752"	"30974"	"6717"	"1"	"1"	"0"	"5/stargarden-step_off-05-china_green-494-523.mp3"	"1/phebe_craig_and_katherine_westine-beside_themselves-07-couperin_musetes_de_choisi_et_de_taverni-146-175.mp3"	"e/hans_christian-phantoms-02-coyotes_dance-117-146.mp3"
+"9356"	"4316"	"46294"	"0"	"0"	"1"	"1/the_rajdhani_quartet-the_gandhi_memorial_concert-02-ragas_sindhu_bhairavi_and_gurjari_todi-668-697.mp3"	"b/magnatune_compilation-rock-01-shane_jackman_didnt_i-88-117.mp3"	"a/ensemble_sreteniye-ancient_church_singing_of_byzantine_georgia_and_rus-11-o_theotokos_the_virgin_rejoice_ave_maria-929-958.mp3"
+"48043"	"36352"	"34380"	"0"	"1"	"1"	"a/da_camera-a_celtic_celebration-12-gavotta_summer__the_poppy_from_airs_for_the_seasons_osward-0-29.mp3"	"e/solace-balance-08-miss_anime-30-59.mp3"	"c/lvx_nova-lvx_nova-08-in_memory_of_magick_mick-407-436.mp3"
+"37832"	"22067"	"7106"	"1"	"7"	"2"	"f/memories_of_tomorrow-waiting_for_dawn-08-the_games_you_play_trance_mix-30-59.mp3"	"2/stellamara-star_of_the_sea-05-del_mar_rojo-30-59.mp3"	"b/the_bots-now_is_the_time-02-electronic_paradise-30-59.mp3"
+"7445"	"55108"	"4143"	"0"	"1"	"0"	"7/artemis-gravity-02-fountain_of_life-59-88.mp3"	"a/james_edwards-le_tresor_dorphee_by_antoine_francisque-18-courante-0-29.mp3"	"6/norine_braun-crow-01-salem-117-146.mp3"
+"52931"	"58140"	"37834"	"6"	"8"	"38"	"d/janine_johnson-telemann_harpsichord_solos_from_der_getreue_music_meister-15-ouverture_burlesque_ouverture_a_la_polonaise_telemann-117-146.mp3"	"b/hanneke_van_proosdij-harpsichord_suites_of_chambonnieres-26-suite_in_f_major__allemande-146-175.mp3"	"f/memories_of_tomorrow-waiting_for_dawn-08-the_games_you_play_trance_mix-88-117.mp3"
+"36219"	"55292"	"54503"	"1"	"0"	"0"	"2/drop_trio-big_dipper-08-leftys_alone-117-146.mp3"	"0/daniel_ben_pienaar-book_2_cd2_welltempered_clavier-18-prelude_and_fugue_no__21_in_bflat_major_bwv_890_fuga-30-59.mp3"	"9/the_strap_ons-geeking_crime-17-k_christ-30-59.mp3"
+"41961"	"33920"	"27507"	"0"	"1"	"0"	"6/philharmonia_baroque-rameau_and_leclair-10-airs_de_demons_i__ii__iii__leclair_scylla_et_glaucus-30-59.mp3"	"3/les_filles_de_sainte_colombe-german_music_for_viols_and_harpsichord-07-tombeau_de_m__blancheroche_froberger-233-262.mp3"	"4/trip_wamsley-its_better_this_way-06-its_here_now-59-88.mp3"
+"42175"	"36300"	"49336"	"0"	"4"	"0"	"c/reza_manzoori-restrung-10-breath-30-59.mp3"	"6/dj_markitos-slower_emotions138_bpm_remixes-08-love_peace_and_ecstasy_138_bpm_remix-262-291.mp3"	"e/justin_bianco-forge-12-war-146-175.mp3"
+"3490"	"904"	"52002"	"1"	"1"	"0"	"b/the_bots-now_is_the_time-01-push-117-146.mp3"	"a/da_camera-a_celtic_celebration-01-carolans_concerto_carolan_five_tunes_by_the_irish_harper-59-88.mp3"	"3/c__layne-potemkin_villages-14-stiltz-59-88.mp3"
+"7445"	"43037"	"6352"	"21"	"5"	"2"	"7/artemis-gravity-02-fountain_of_life-59-88.mp3"	"4/rapoon-the_kirghiz_light__cd_1-10-jacobs_drum-88-117.mp3"	"d/shiva_in_exile-ethnic-02-breathing-30-59.mp3"
+"54000"	"23729"	"46403"	"2"	"0"	"0"	"6/doc_rossi-demarzi6_sonatas_for_cetra_o_kitara-16-sonata_iv_minuet-88-117.mp3"	"5/dj_markitos-unreachable_destiny-05-obsession_forever-146-175.mp3"	"5/four_stones_net-ridin_the_faders-11-part_11-117-146.mp3"
+"17483"	"45869"	"2544"	"2"	"1"	"2"	"5/dj_markitos-unreachable_destiny-04-element_of_truth-0-29.mp3"	"7/rapoon-what_do_you_suppose-11-i_dont_expect_anyone-407-436.mp3"	"4/jami_sieber-hidden_sky-01-maenam-175-204.mp3"
+"4873"	"48605"	"29251"	"0"	"2"	"0"	"d/various_artists-the_art_of_persuasion-01-subterranean_artemis-30-59.mp3"	"0/jag-juke_joint_boogie-12-pearline-59-88.mp3"	"7/paul_avgerinos-phos_hilaron-06-song_of_the_gladness-320-349.mp3"
+"22072"	"14875"	"6281"	"8"	"29"	"7"	"2/stellamara-star_of_the_sea-05-del_mar_rojo-175-204.mp3"	"0/william_brooks-bitter_circus-03-seven_promises-117-146.mp3"	"5/mr_epic-sideways-02-blue_days-117-146.mp3"
+"39434"	"43074"	"53909"	"1"	"11"	"27"	"a/plunkett-14_days-09-hold_tight-117-146.mp3"	"4/justin_bianco-siren-10-journeys_twilight-30-59.mp3"	"f/philharmonia_baroque_orchestra-handel__atalanta_cd2-16-recitativo_oh_del_crudo_mio_bene-30-59.mp3"
+"45535"	"2139"	"49609"	"0"	"2"	"0"	"c/touchinggrace-happenstance-11-eastern_sky-262-291.mp3"	"6/norine_braun-now_and_zen-01-jade-117-146.mp3"	"a/jacob_heringman-black_cow-13-bakfark_non_accedat_ad_te_malum_secunda_pars-0-29.mp3"
+"10846"	"4847"	"32069"	"21"	"3"	"4"	"5/thursday_group-uncle_mean-02-uncle_mean-233-262.mp3"	"8/hybris-the_first_words-01-squalid_rooms-59-88.mp3"	"2/mrdc-timecode-07-leaving-88-117.mp3"
+"43602"	"13184"	"10913"	"2"	"0"	"0"	"6/strojovna_07-mirnix-10-out_clipping-175-204.mp3"	"9/strojovna_07-iii-03-gvgh-175-204.mp3"	"2/version-versions-02-universal_humans-262-291.mp3"
+"8773"	"41690"	"35753"	"1"	"0"	"0"	"b/satori-journey_to_other_worlds-02-other_worlds-1596-1625.mp3"	"7/falik-elvolution-09-what_not_things_seem_are_they-0-29.mp3"	"4/dj_cary-downtempo_chill_2-08-huan_ying_mr_gelatine-30-59.mp3"
+"31786"	"9386"	"52858"	"3"	"0"	"0"	"e/c_layne-the_sun_will_come_out_to_blind_you-07-how_soon_i_forget-117-146.mp3"	"0/paul_berget-the_siena_manuscript_on_steel_string_guitar-02-recercar_2_steel_string_guitar-0-29.mp3"	"5/kammen___swan-wild_wood-15-lullaby_set-204-233.mp3"
+"40435"	"30445"	"5853"	"3"	"3"	"10"	"9/the_kokoon-berlin-09-passion_of_life-175-204.mp3"	"0/ammonite-reconnection-07-angel_hold_on___-262-291.mp3"	"6/ralph_meulenbroeks-gambomania-02-arabesque_martin_marais-117-146.mp3"
+"36715"	"56523"	"23576"	"4"	"2"	"7"	"4/rapoon-the_kirghiz_light__cd_1-08-ora-233-262.mp3"	"3/jag-four_strings-20-your_daddy_dont_know-59-88.mp3"	"0/the_bots-truth-05-never_fall_in_love-146-175.mp3"
+"29530"	"40631"	"27885"	"7"	"9"	"35"	"a/edward_martin_and_william_bastian-virtues_and_vices-06-tant_que_vivray_claudin_de_semisy-0-29.mp3"	"4/paul_berget-the_siena_manuscript_on_renaissance_lute-09-recercar_9-0-29.mp3"	"5/mrdc-plethora-06-lostcode-262-291.mp3"
+"40036"	"19350"	"9362"	"0"	"1"	"1"	"a/jade_leary-the_lost_art_of_human_kindness-09-meaner_than_winter-175-204.mp3"	"3/etherfysh-box_of_fysh-04-rama-1045-1074.mp3"	"1/the_rajdhani_quartet-the_gandhi_memorial_concert-02-ragas_sindhu_bhairavi_and_gurjari_todi-842-871.mp3"
+"50537"	"37980"	"40851"	"0"	"1"	"2"	"f/norine_braun-and_the_mood_swings-13-running_on_the_edge-204-233.mp3"	"f/satori-healing_sounds_of_tibet-08-tibetan_trance-59-88.mp3"	"6/hoxman-synthesis_of_five-09-snake_eye-0-29.mp3"
+"54881"	"29638"	"54283"	"1"	"2"	"1"	"6/doc_rossi-demarzi6_sonatas_for_cetra_o_kitara-17-the_orange_rogue_trad__arr__rossi-117-146.mp3"	"b/liquid_zen-elements_at_loop_10-06-the_surface-0-29.mp3"	"e/philharmonia_baroque_orchestra-handel__atalanta_cd1-17-aria_riportai_glorioso_palma-88-117.mp3"
+"43855"	"2837"	"21791"	"1"	"1"	"0"	"4/american_bach_soloists-j_s__bach__mass_in_b_minor_cd1-10-qui_sedes_ad_dextram_patris-59-88.mp3"	"7/rocket_city_riot-pop_killer-01-mister_right-88-117.mp3"	"4/paul_avgerinos-sky_of_grace-05-communion-0-29.mp3"
+"4167"	"23031"	"5239"	"3"	"8"	"6"	"3/etherfysh-box_of_fysh-01-sanctuary-552-581.mp3"	"4/seismic_anamoly-sweet_rock_candy-05-kick_in_tha_nuts-0-29.mp3"	"d/rapoon-vernal_crossing-01-the_same_river_once-88-117.mp3"
+"12292"	"5987"	"18512"	"0"	"3"	"0"	"0/american_bach_soloists-j_s__bach__transcriptions_of_italian_music-03-concerto_in_a_minor_for_four_harpsichords_bwv_1065_iii_allegro-146-175.mp3"	"f/memories_of_tomorrow-waiting_for_dawn-02-after_thought-88-117.mp3"	"2/shira_kammen-the_almanac-04-may_carol-88-117.mp3"
+"9459"	"43596"	"37307"	"2"	"3"	"2"	"5/satori-for_relaxation-02-river_surround-349-378.mp3"	"6/strojovna_07-mirnix-10-out_clipping-0-29.mp3"	"1/etherine-24_days-08-singing_for_the_day-59-88.mp3"
+"37083"	"15072"	"27985"	"2"	"0"	"1"	"0/paul_berget-the_siena_manuscript_on_steel_string_guitar-08-recercar_8_steel_string_guitar-59-88.mp3"	"4/myles_cochran-marginal_street-03-so_gone-378-407.mp3"	"1/william_brooks-karma_dogs-06-miracle-117-146.mp3"
+"57624"	"12131"	"56718"	"1"	"0"	"0"	"b/la_primavera-english_renaissance_music-24-i_saw_my_lady_weepe_dowland-262-291.mp3"	"1/suzanne_teng-mystic_journey-03-china_lily-233-262.mp3"	"f/jacob_heringman_and_catherine_king-alonso_mudarra_songs_and_solos-21-pavana_4_course_guitar-30-59.mp3"
+"40264"	"27594"	"26134"	"0"	"0"	"1"	"2/duo_chambure-vihuela_duets_of_valderrabano-09-obsecro_te_domina_josquin_dez_prez-233-262.mp3"	"f/paul_berget-sl_weiss_on_11_strings-06-linfidele_suite_paysanne-117-146.mp3"	"1/artemis-undone-06-beside_u-59-88.mp3"
+"30136"	"6"	"54102"	"2"	"0"	"0"	"4/falling_you-touch-07-____a_cry_for_the_brokenhearted-117-146.mp3"	"f/american_bach_soloists-j_s__bach_solo_cantatas-01-bwv54__i_aria-146-175.mp3"	"d/katherine_roberts_perl-j_s__bach_french_suites-16-suite_no_3_in_b_minor_bwv_814_sarabande-204-233.mp3"
+"28431"	"30745"	"2816"	"4"	"14"	"14"	"5/four_stones_net-ridin_the_faders-06-part_6-88-117.mp3"	"3/spinecar-autophile-07-cant_sleep-0-29.mp3"	"f/memories_of_tomorrow-waiting_for_dawn-01-memories_of_tomorrow-291-320.mp3"
+"44689"	"44918"	"6034"	"0"	"0"	"1"	"7/rob_costlow-woods_of_chaos-10-twilight-88-117.mp3"	"e/steven_devine-portrait_of_an_english_harpsichord-11-sonata_no_1_in_f_major_allegro_thomas_arne-0-29.mp3"	"0/chris_harvey-the_white_sail-02-allegiance-146-175.mp3"
+"56523"	"36715"	"23576"	"6"	"4"	"6"	"3/jag-four_strings-20-your_daddy_dont_know-59-88.mp3"	"4/rapoon-the_kirghiz_light__cd_1-08-ora-233-262.mp3"	"0/the_bots-truth-05-never_fall_in_love-146-175.mp3"
+"52052"	"56250"	"10709"	"1"	"0"	"1"	"d/katherine_roberts_perl-j_s__bach_french_suites-14-suite_no_3_in_b_minor_bwv_814_allemande-88-117.mp3"	"1/etherine-24_days-20-in_the_garden-30-59.mp3"	"5/stargarden-the_art_of_analog_diversion-02-trybal-88-117.mp3"
+"38270"	"11073"	"33781"	"10"	"5"	"8"	"0/the_bots-truth-08-where_has_our_love_gone-146-175.mp3"	"1/zilla-egg-02-wicker_pilots-0-29.mp3"	"0/william_brooks-bitter_circus-07-the_hanging_of_allen_scott_johnson-117-146.mp3"
+"49393"	"2979"	"35226"	"2"	"0"	"1"	"f/various_artists-south_by_southwest_compilation-12-wreck_of_the_zephyr_drop_trio-117-146.mp3"	"d/paul_avgerinos-balancing_spheres-01-night_illusions__the_longing-929-958.mp3"	"4/american_bach_soloists-j_s__bach__mass_in_b_minor_cd1-08-domine_deus-88-117.mp3"
+"53758"	"19598"	"6959"	"1"	"0"	"2"	"6/jeni_melia-the_lost_art_of_wooing-16-lady_careys_dump_anon-30-59.mp3"	"9/suzanne_teng-enchanted_wind-04-septembers_angels-175-204.mp3"	"e/solace-balance-02-dragon_and_sword-349-378.mp3"
+"57776"	"19397"	"33513"	"1"	"0"	"1"	"c/the_art_of_the_lute_player-the_art_of_the_lute_player-24-tiento_del_segundo_tono__alonso_mudarra__jacob_heringman-0-29.mp3"	"0/ammonite-reconnection-04-restrained_mind-146-175.mp3"	"7/artemis-gravity-07-subterranean-204-233.mp3"
+"21490"	"24772"	"51717"	"5"	"14"	"6"	"d/rapoon-vernal_crossing-05-bol_baya-204-233.mp3"	"b/liquid_zen-elements_at_loop_10-05-spirit-59-88.mp3"	"1/tim_rayborn-qadim-14-perishde__santur_persian-262-291.mp3"
+"50052"	"39653"	"41805"	"5"	"6"	"2"	"6/tom_paul-i_was_king-13-i_wish_the_world_was_flat-59-88.mp3"	"6/dj_markitos-slower_emotions138_bpm_remixes-09-inside_your_dreams_138_bpm_remix-146-175.mp3"	"0/rocket_city_riot-last_of_the_pleasure_seekers-10-in_my_bones-30-59.mp3"
+"30091"	"8196"	"15173"	"1"	"2"	"0"	"6/ralph_meulenbroeks-gambomania-07-la_reveuse_martin_marais-88-117.mp3"	"b/solar_cycle-sunlight-02-like_it_2-88-117.mp3"	"d/seth_and_maryse_carlin-schubert__music_for_fortepiano_four_hands-03-sonata_in_c_major_grand_duo__scherzo__allegro_vivace-204-233.mp3"
+"11168"	"607"	"18213"	"1"	"0"	"1"	"e/dac_crowell-within_this_space-02-within_this_space-1451-1480.mp3"	"c/jay_kishor-the_payans_concert-01-bhimpalasi-552-581.mp3"	"c/seismic_anamoly-ramifications-04-julies_tune-320-349.mp3"
+"16703"	"342"	"53972"	"32"	"4"	"5"	"1/dac_crowell-sferica-04-benthic-929-958.mp3"	"8/jacob_heringman-josquin_des_prez_lute_settings-01-anon__praeter_rerum_seriem-117-146.mp3"	"1/tanya_tomkins_and_eric_zivian-beethoven_piano_and_cello_works-16-sonata_in_d_major_op__102_no__2_adagio_con_molto_sentimento_daffetto-59-88.mp3"
+"5805"	"46161"	"31451"	"1"	"0"	"0"	"3/c__layne-potemkin_villages-01-you_are_the_reason-146-175.mp3"	"b/elizabeth_wolff-moments_musicaux-11-moritz_moszkowski__4_moments_musicaux_op__84__moderato_e_grazioso-30-59.mp3"	"6/ed_martin-luis_milan__el_maestro-07-fantasia_7-0-29.mp3"
+"34801"	"36220"	"23473"	"1"	"0"	"1"	"d/the_west_exit-nocturne-08-become_anyone-117-146.mp3"	"2/drop_trio-big_dipper-08-leftys_alone-146-175.mp3"	"c/jamie_janover-now_center_of_time-05-momentinnium-494-523.mp3"
+"58763"	"49355"	"6273"	"0"	"5"	"2"	"8/jacob_heringman-blame_not_my_lute-38-the_paduane-0-29.mp3"	"e/solace-balance-12-wither_my_lotus_flower-88-117.mp3"	"5/john_fleagle-worlds_bliss__medieval_songs_of_love_and_death-02-blow_northerne_wynd-88-117.mp3"
+"13951"	"41537"	"25877"	"7"	"0"	"2"	"e/jamie_janover_and_michael_masley-all_strings_considered-03-mnemonic_harmonics-320-349.mp3"	"a/four_stones-la_vie_chill-09-u_meaning_u-204-233.mp3"	"7/roots_of_rebellion-the_looking_glass-06-amnesia-175-204.mp3"
+"20072"	"15645"	"46011"	"16"	"4"	"23"	"e/skitzo-heavy_shit-04-stab_her_goodnight-117-146.mp3"	"4/norine_braun-modern_anguish-03-the_mystic-59-88.mp3"	"0/ensemble_vermillian-stolen_jewels-11-kreiger_ricercar-146-175.mp3"
+"39376"	"21109"	"9147"	"4"	"1"	"4"	"5/arthur_yoria-suerte_something-09-greek_archaic-88-117.mp3"	"1/solace-the_gathering_season-05-aenaem-146-175.mp3"	"a/bjorn_fogelberg-karooshi_porn-02-quite_derivative-88-117.mp3"
+"42679"	"47279"	"5464"	"2"	"2"	"10"	"8/cargo_cult-vibrant-10-fifth-59-88.mp3"	"f/glen_bledsoe-octopants-11-und_so_weiter_i-0-29.mp3"	"a/bjorn_fogelberg-karooshi_porn-01-trioxidation-0-29.mp3"
+"11904"	"9312"	"31108"	"12"	"4"	"3"	"d/belief_systems-eproms-03-boiling-175-204.mp3"	"5/sitar-first_congregational_church_concert-02-raga_patdeep__gat__jay_kishor-1277-1306.mp3"	"5/human_response-survival-07-distance-262-291.mp3"
+"3260"	"4502"	"5983"	"0"	"2"	"1"	"8/justin_bianco-phoenix-01-phoenix-88-117.mp3"	"2/ensemble_mirable-conversations_galantes-01-sonata_iii_in_d_minor_allegromoderato-88-117.mp3"	"e/burning_babylon-stereo_mash_up-02-addis_red_dub-204-233.mp3"
+"36220"	"34801"	"23473"	"0"	"2"	"1"	"2/drop_trio-big_dipper-08-leftys_alone-146-175.mp3"	"d/the_west_exit-nocturne-08-become_anyone-117-146.mp3"	"c/jamie_janover-now_center_of_time-05-momentinnium-494-523.mp3"
+"50950"	"26334"	"1999"	"0"	"2"	"0"	"4/burnshee_thornside-the_art_of_not_blending_in-13-til_i_met_you-30-59.mp3"	"a/somadrone-trancelucent-06-coda-146-175.mp3"	"a/tilopa-pictures_of_silence-01-ichi-30-59.mp3"
+"31752"	"5636"	"53032"	"0"	"2"	"0"	"e/tilopa-out_of_the_blue-07-heeyahoa-494-523.mp3"	"b/seismic_anamoly-dead_mans_hand-01-walkin_the_line-146-175.mp3"	"3/jan_hanford-24_preludes_for_solo_piano-15-prelude_no__15_in_a_minor-30-59.mp3"
+"52656"	"2443"	"51700"	"0"	"0"	"2"	"c/strojovna_07-number_1-15-fajront-30-59.mp3"	"5/thursday_group-uncle_mean-01-like_white_on_rice-117-146.mp3"	"c/the_art_of_the_lute_player-the_art_of_the_lute_player-14-pavan_heres_paternus__antony_holborne__jacob_heringman-117-146.mp3"
+"21993"	"29873"	"25776"	"2"	"7"	"2"	"d/paul_avgerinos-balancing_spheres-05-day_dreams__and_thirst_is_quenched-842-871.mp3"	"e/touchinggrace-submission-06-watching_clouds-175-204.mp3"	"f/magnatune-relaxation_spa-06-after_claire_fitch-146-175.mp3"
+"17267"	"33118"	"31629"	"15"	"31"	"7"	"c/beatundercontrol-the_introduction-04-direction_dub-0-29.mp3"	"c/seismic_anamoly-ramifications-07-serenade_for_samantha-0-29.mp3"	"8/justin_bianco-phoenix-07-gift-30-59.mp3"
+"36821"	"30982"	"28578"	"4"	"4"	"0"	"a/jade_leary-and_come_the_sirens-08-paul_gauguin-0-29.mp3"	"f/norine_braun-and_the_mood_swings-07-cruel_streak-88-117.mp3"	"6/mercy_machine-in_your_bed-06-quietly-88-117.mp3"
+"49355"	"58763"	"6273"	"3"	"0"	"3"	"e/solace-balance-12-wither_my_lotus_flower-88-117.mp3"	"8/jacob_heringman-blame_not_my_lute-38-the_paduane-0-29.mp3"	"5/john_fleagle-worlds_bliss__medieval_songs_of_love_and_death-02-blow_northerne_wynd-88-117.mp3"
+"35743"	"45502"	"9321"	"2"	"0"	"1"	"8/ivilion-terean-08-hthar-88-117.mp3"	"a/asteria-soyes_loyal-11-dueil_angoisseux_gilles_binchois-233-262.mp3"	"5/sitar-first_congregational_church_concert-02-raga_patdeep__gat__jay_kishor-1538-1567.mp3"
+"27637"	"5916"	"24980"	"0"	"1"	"0"	"c/touchinggrace-happenstance-06-last_nights_dream_the_experience-175-204.mp3"	"4/trip_wamsley-its_better_this_way-02-20_years_too_late-88-117.mp3"	"c/touchinggrace-happenstance-05-sunday_driver-0-29.mp3"
+"49155"	"5659"	"25574"	"1"	"0"	"1"	"c/william_brooks-blue_ribbon__the_best_of_william_brooks-12-the_hanging_of_allen_scott_johnson-175-204.mp3"	"1/spinecar-up_from_the_mud-01-waste_away-0-29.mp3"	"f/american_bach_soloists-j_s__bach_solo_cantatas-06-bwv82__iii_aria-320-349.mp3"
+"25241"	"41411"	"11965"	"3"	"0"	"1"	"a/ensemble_sreteniye-ancient_church_singing_of_byzantine_georgia_and_rus-05-trisagion_holy_god_strochnoi_chant-59-88.mp3"	"5/paul_avgerinos-muse_of_the_round_sky-09-the_night_sky-88-117.mp3"	"8/kenji_williams-worldspirit_soundtrack-03-buddha_embryo-30-59.mp3"
+"37428"	"55029"	"49015"	"0"	"0"	"2"	"6/doc_rossi-demarzi6_sonatas_for_cetra_o_kitara-08-sonata_ii_minuet-0-29.mp3"	"b/paul_beier-alessandro_piccinini-18-aria_ii_di_sarauanda_in_parte_variate-59-88.mp3"	"1/vito_paternoster-cd1bach_cello_suites-12-suite_ii_in_re_minore__gigue-88-117.mp3"
+"49873"	"14539"	"5223"	"0"	"2"	"1"	"b/magnatune_compilation-rock-13-emmas_mini_disconnected-204-233.mp3"	"d/shira_kammen-mistral-03-quand_jetais_jeune-59-88.mp3"	"2/jesse_manno-sea_spirits-01-the_river-0-29.mp3"
+"55029"	"37428"	"49015"	"1"	"0"	"0"	"b/paul_beier-alessandro_piccinini-18-aria_ii_di_sarauanda_in_parte_variate-59-88.mp3"	"6/doc_rossi-demarzi6_sonatas_for_cetra_o_kitara-08-sonata_ii_minuet-0-29.mp3"	"1/vito_paternoster-cd1bach_cello_suites-12-suite_ii_in_re_minore__gigue-88-117.mp3"
+"56776"	"17173"	"25497"	"4"	"2"	"12"	"4/ensemble_mirable-triemer_six_cello_sonatas-21-sonata_5_largo-88-117.mp3"	"4/paul_avgerinos-sky_of_grace-04-dance_of_life-175-204.mp3"	"6/drop_trio-cezanne-05-wreck_of_the_zephyr-523-552.mp3"
+"28099"	"15956"	"1385"	"1"	"1"	"0"	"5/paul_avgerinos-muse_of_the_round_sky-06-muse_of_the_round_sky-117-146.mp3"	"b/janine_johnson-bach_goldberg_variations-03-variatio_2_a_1_clav-30-59.mp3"	"d/magnatune_compilation-new_age_and_jazz-01-ehren_starks_the_tale_of_room_620-262-291.mp3"
+"1743"	"28712"	"47770"	"0"	"0"	"2"	"6/stargarden-ambient_excursions-01-ghosts_of_ocean_gardens-146-175.mp3"	"8/hybris-the_first_words-06-rotten_flowers-30-59.mp3"	"6/jeni_melia-the_lost_art_of_wooing-12-come_away_come_sweet_love_john_dowland-30-59.mp3"
+"9274"	"46362"	"36315"	"0"	"2"	"1"	"5/sitar-first_congregational_church_concert-02-raga_patdeep__gat__jay_kishor-175-204.mp3"	"7/american_bach_soloists-j_s__bach__mass_in_b_minor_cd2-11-osanna_in_exelsis-0-29.mp3"	"a/the_headroom_project-ciri_a_doro-08-male_voice_for_genang_drum-0-29.mp3"
+"38715"	"49519"	"48593"	"0"	"0"	"6"	"6/sand_craig_and_dornenburg-biber_violin_sonatas-09-biber_rosary_sonata_14_in_d_major_the_assumption_of_mary-30-59.mp3"	"1/tim_rayborn-qadim-13-amniat__robab_afghan-204-233.mp3"	"9/strojovna_07-iii-12-partition-204-233.mp3"
+"51176"	"4161"	"41762"	"13"	"15"	"8"	"c/strojovna_07-number_1-14-blaudisco-175-204.mp3"	"3/etherfysh-box_of_fysh-01-sanctuary-378-407.mp3"	"d/rapoon-vernal_crossing-09-yitun-291-320.mp3"
+"43402"	"54892"	"43640"	"7"	"4"	"30"	"d/the_west_exit-nocturne-10-nine_lives-204-233.mp3"	"d/drevo-christian_themes_in_ukrainian_folk_songs-17-through_the_wide_field_through_the_deep_sea-88-117.mp3"	"c/liquid_zen-seventythree-10-passing_cars-0-29.mp3"
+"6257"	"49532"	"6733"	"0"	"0"	"2"	"e/jamie_janover_and_michael_masley-all_strings_considered-02-birds_of_mindrise-146-175.mp3"	"a/jade_leary-and_come_the_sirens-13-and_come_the_sirens-30-59.mp3"	"f/professor_armchair-too_much_mustard-02-daddy_long_legs-59-88.mp3"
+"35664"	"40002"	"42627"	"1"	"4"	"10"	"f/lizzi-love_and_you_and_i-08-gone-233-262.mp3"	"8/mediva-viva_mediva-09-mandad_ei_comigo_cantiga_no_3-0-29.mp3"	"1/pizzle-party_patrol-10-farrakorn-0-29.mp3"
+"49580"	"8580"	"34190"	"10"	"4"	"6"	"b/dj_cary-power_synths-13-atom__instrumental_mix_trancevision-30-59.mp3"	"4/dac_crowell-spctr-02-northeastern_corridor-610-639.mp3"	"a/bjorn_fogelberg-karooshi_porn-07-wave-117-146.mp3"
+"28622"	"26264"	"31774"	"0"	"0"	"2"	"6/dj_markitos-slower_emotions138_bpm_remixes-06-raving_illusion_138_bpm_remix-146-175.mp3"	"2/indidginus-as_above_so_below-06-champa-30-59.mp3"	"7/rapoon-what_do_you_suppose-07-how_many_of_you_did_not_know_that-523-552.mp3"
+"19374"	"43509"	"5396"	"5"	"12"	"14"	"3/dj_cary-downtempo_chill-04-reentry_cargo_cult-117-146.mp3"	"7/claire_fitch-ambiencellist_part_ii-10-oceanic_memories-0-29.mp3"	"7/jag-cypress_grove_blues-01-train_train-59-88.mp3"
+"12196"	"45777"	"30488"	"1"	"1"	"1"	"9/the_wretch-ambulatory-03-comfort-117-146.mp3"	"5/domased-selection-11-he_is_leaving_us_blue_m_rmx-175-204.mp3"	"0/apa_ya-apa_ya-07-apa_ya_pradha-0-29.mp3"
+"58771"	"14210"	"40900"	"0"	"1"	"0"	"8/jacob_heringman-blame_not_my_lute-39-tiente_alora-0-29.mp3"	"d/tim_rayborn-chordae-03-o_suavis-639-668.mp3"	"0/jeffrey_luck_lucas-what_we_whisper-09-sometimes_sometimes-0-29.mp3"
+"56164"	"24844"	"10323"	"0"	"1"	"0"	"9/janine_johnson-german_keyboard_masters-20-ciacona_in_e_buxtehude-88-117.mp3"	"7/wicked_boy-the_treatment-05-strange_days-88-117.mp3"	"8/tim_rayborn-veils_of_light-02-tabak-30-59.mp3"
+"30170"	"17103"	"28433"	"1"	"0"	"0"	"c/rapoon-easterly_6_or_7-07-6_or_7-320-349.mp3"	"f/american_baroque-the_four_seasons_by_vivaldi-04-concerto_no_2_in_g_minor_rv_315_summer__allegro_non_molto-175-204.mp3"	"d/janine_johnson-telemann_harpsichord_solos_from_der_getreue_music_meister-06-partin_a_cembalo_solo_menuets_telemann-0-29.mp3"
+"14328"	"8644"	"48706"	"2"	"18"	"8"	"f/glen_bledsoe-octopants-03-ppop-59-88.mp3"	"3/american_baroque-mozart_4_quartets_for_strings_and_winds-02-oboe_quartet_in_f_k370__adagio-117-146.mp3"	"c/soulprint-in_spite_of_it_all-12-putrid-146-175.mp3"
+"58771"	"40900"	"14210"	"1"	"0"	"1"	"8/jacob_heringman-blame_not_my_lute-39-tiente_alora-0-29.mp3"	"0/jeffrey_luck_lucas-what_we_whisper-09-sometimes_sometimes-0-29.mp3"	"d/tim_rayborn-chordae-03-o_suavis-639-668.mp3"
+"7035"	"18230"	"43358"	"23"	"6"	"8"	"9/indidginus-sine_language-02-dusty_lands-0-29.mp3"	"0/jeffrey_luck_lucas-what_we_whisper-04-just_like_moths-146-175.mp3"	"b/jacob_heringman-jane_pickeringes_lute_book-10-my_lord_willoughbies_welcom_home_by_mr_byrde-59-88.mp3"
+"39954"	"48850"	"10250"	"10"	"14"	"34"	"f/heavy_mellow-acoustic_abstracts-09-long_ago_and_far_away-0-29.mp3"	"4/orinda-airs_de_cour-12-si_je_languis_dun_martire_incogneu_joachim_thibaut_de_courville-0-29.mp3"	"3/dj_cary-downtempo_chill-02-sunday_bed_curl-233-262.mp3"
+"17012"	"37696"	"29056"	"6"	"21"	"5"	"1/ambient_teknology-phoenix-04-cloud_maker-465-494.mp3"	"7/solace-rhythm_of_the_dance-08-sword_dance_routine-320-349.mp3"	"6/falik-streaks_and_strokes-06-son_of_sand_flea-291-320.mp3"
+"22528"	"24295"	"31104"	"2"	"0"	"1"	"6/philharmonia_baroque-rameau_and_leclair-05-gavottes__air_pour_les_pagodes__contredanse_en_roundeau_rameau_les_paladins-88-117.mp3"	"9/the_kokoon-berlin-05-scout-117-146.mp3"	"5/human_response-survival-07-distance-146-175.mp3"
+"2308"	"44657"	"57629"	"0"	"1"	"0"	"0/american_bach_soloists-joseph_haydn__masses-01-kyrie__allegro_moderato-146-175.mp3"	"f/ehren_starks-lines_build_walls-10-tunnel_systems-88-117.mp3"	"c/magnatune-classical-24-la_primavera_robert_jones_sweet_kate-59-88.mp3"
+"49228"	"41133"	"14233"	"2"	"1"	"6"	"8/daniel_berkman-calabashmoon-12-train_to_bamako-30-59.mp3"	"b/ehren_starks-the_depths_of_a_year-09-subtle_groove-0-29.mp3"	"3/american_baroque-mozart_4_quartets_for_strings_and_winds-03-oboe_quartet_in_f_k370__rondeau-59-88.mp3"
+"40133"	"15037"	"11549"	"0"	"1"	"0"	"f/lizzi-love_and_you_and_i-09-my_destination-59-88.mp3"	"1/spinecar-up_from_the_mud-03-smoke-0-29.mp3"	"a/tilopa-by_the_way-03-amigos_de_viaje-204-233.mp3"
+"34671"	"54448"	"47224"	"2"	"0"	"0"	"f/strojovna_07-switch_on__switch_off-08-anything_anywhere-175-204.mp3"	"4/monks_and_choirs_of_kiev_pechersk_lavra-chants_of_the_russian_orthodox_church-17-great_doxology-436-465.mp3"	"f/brad_sucks-i_dont_know_what_im_doing-11-time_to_take_out_the_trash-0-29.mp3"
+"44532"	"21321"	"39220"	"1"	"0"	"0"	"6/falik-streaks_and_strokes-10-the_last_faery-0-29.mp3"	"e/hans_christian-phantoms-05-atlantis-59-88.mp3"	"8/beth_quist-lucidity-09-ferte_preza_na_prezarro-146-175.mp3"
+"35818"	"3525"	"51041"	"7"	"8"	"4"	"9/william_brooks-silent_wings-08-i_will_stop_with_you-175-204.mp3"	"d/kyiv_chamber_choir-praise_the_lord-01-rachmaninovpraise_the_lord_from_the_heavens-30-59.mp3"	"9/ya_elah-each_of_us-13-yhi_ratzon-88-117.mp3"
+"47104"	"1129"	"33781"	"0"	"1"	"0"	"6/tom_paul-i_was_king-11-the_best_in_me-59-88.mp3"	"d/ambient_teknology-the_all_seeing_eye_project-01-cyclops-552-581.mp3"	"0/william_brooks-bitter_circus-07-the_hanging_of_allen_scott_johnson-117-146.mp3"
+"34326"	"2451"	"1862"	"33"	"11"	"14"	"c/jamie_janover-now_center_of_time-07-zeus___bruce_vamp-0-29.mp3"	"5/thursday_group-uncle_mean-01-like_white_on_rice-349-378.mp3"	"5/domased-selection-01-he_is_leaving_us-175-204.mp3"
+"21336"	"40740"	"52054"	"3"	"9"	"3"	"9/janine_johnson-german_keyboard_masters-05-auf_das_heilige_pfingstfest_pachelbel-59-88.mp3"	"f/ivilion-sartinal-09-sartinal_iii-175-204.mp3"	"d/katherine_roberts_perl-j_s__bach_french_suites-14-suite_no_3_in_b_minor_bwv_814_allemande-146-175.mp3"
+"9196"	"31738"	"25861"	"4"	"5"	"16"	"4/jay_kishor-amber-02-raga_malgunji__jor-842-871.mp3"	"e/tilopa-out_of_the_blue-07-heeyahoa-88-117.mp3"	"9/the_wretch-ambulatory-06-ambulatory-204-233.mp3"
+"37165"	"26546"	"2021"	"2"	"0"	"0"	"0/voices_of_music-an_evening_with_bach-08-schlafe_mein_leibster_bwv_213-88-117.mp3"	"6/strojovna_07-mirnix-06-d_a_r_k-233-262.mp3"	"a/falik-dreams_from_the_machine-01-ika-59-88.mp3"
+"40036"	"9362"	"19350"	"0"	"2"	"0"	"a/jade_leary-the_lost_art_of_human_kindness-09-meaner_than_winter-175-204.mp3"	"1/the_rajdhani_quartet-the_gandhi_memorial_concert-02-ragas_sindhu_bhairavi_and_gurjari_todi-842-871.mp3"	"3/etherfysh-box_of_fysh-04-rama-1045-1074.mp3"
+"44180"	"53857"	"18594"	"19"	"4"	"8"	"1/william_brooks-karma_dogs-10-slacker_blues-204-233.mp3"	"d/daniel_ben_pienaar-book_2_cd1_welltempered_clavier-16-prelude_and_fugue_no__8_in_dsharp_minor_bwv_877_fuga-88-117.mp3"	"e/justin_bianco-forge-04-mischief-0-29.mp3"
+"49185"	"31128"	"2750"	"1"	"0"	"1"	"3/emmas_mini-beat_generation_mad_trick-12-the_wait_is_over-30-59.mp3"	"b/solar_cycle-sunlight-07-dream_of_you-146-175.mp3"	"f/lizzi-love_and_you_and_i-01-me-233-262.mp3"
+"27453"	"35493"	"44191"	"12"	"6"	"3"	"7/artemis-gravity-06-inception-146-175.mp3"	"d/beth_quist-shall_we_dance-08-finale-320-349.mp3"	"5/stargarden-the_art_of_analog_diversion-10-smooth-88-117.mp3"
+"13363"	"36624"	"40228"	"3"	"3"	"20"	"f/kenji_williams-faces_of_epiphany-03-illusion_bedrock_mix-378-407.mp3"	"1/four_stones-chronic_dreams-08-ocean_in_her_head_spliff_mix-146-175.mp3"	"f/jacob_heringman_and_catherine_king-alonso_mudarra_songs_and_solos-09-o_gelosia_de_amanti-0-29.mp3"
+"6185"	"238"	"13667"	"6"	"1"	"4"	"f/strojovna_07-dirnix-02-basetra_noje-59-88.mp3"	"d/seismic_anamoly-afterburner-01-afterburner-117-146.mp3"	"b/seismic_anamoly-dead_mans_hand-03-long_gone-0-29.mp3"
+"56867"	"27468"	"55246"	"0"	"3"	"0"	"b/janine_johnson-bach_goldberg_variations-21-variatio_20_a_2_clav-88-117.mp3"	"2/magnatune_compilation-electronica-06-indidginus_dusty_lands-262-291.mp3"	"3/jacob_heringman-siena_lute_book-18-la_volunte_sandrin-117-146.mp3"
+"29370"	"17683"	"47440"	"5"	"13"	"5"	"a/rhonda_lorence-winter_moon-06-steamy_river-59-88.mp3"	"c/strojovna_07-number_1-04-flaki-262-291.mp3"	"e/steven_devine-portrait_of_an_english_harpsichord-12-sonata_no_4_in_c_minor_allemande_joseph_kelway-88-117.mp3"
+"32971"	"2420"	"22422"	"1"	"1"	"2"	"2/antiguru-fall_submissions-07-rectify-378-407.mp3"	"c/liquid_zen-oscilloscope-01-levier_darmement-117-146.mp3"	"d/shiva_in_exile-ethnic-05-floating-146-175.mp3"
+"18681"	"44782"	"42925"	"7"	"4"	"5"	"5/trancevision-lemuria-04-nebula-30-59.mp3"	"2/paul_avgerinos-gnosis-10-we_are_one-88-117.mp3"	"5/burnshee_thornside-rock_this_moon-10-i_know_this_feeling-88-117.mp3"
+"29561"	"18581"	"43292"	"8"	"10"	"5"	"d/utopia_banished-night_of_the_black_wyvern-06-the_darkness_we_burn-30-59.mp3"	"2/anup-embrace-04-minor_song-0-29.mp3"	"7/falik-elvolution-10-mediterranean_blue-262-291.mp3"
+"52015"	"57975"	"37278"	"1"	"1"	"3"	"3/c__layne-potemkin_villages-14-stiltz-436-465.mp3"	"d/janine_johnson-telemann_harpsichord_solos_from_der_getreue_music_meister-25-suite_courante_pezold-59-88.mp3"	"d/processor-insomnia-08-shiraio_pig-117-146.mp3"
+"13279"	"48887"	"33408"	"0"	"0"	"2"	"a/the_headroom_project-ciri_a_doro-03-hoyd_hoy_june-117-146.mp3"	"a/falik-dreams_from_the_machine-12-son_of_sand_flea_remix-204-233.mp3"	"4/the_marginal_prophets-bohemian_rap_cd-07-spank_you-88-117.mp3"
+"35897"	"50394"	"8457"	"0"	"2"	"0"	"6/farallon_recorder_quartet-ludwig_senfl-08-in_domino_confido-204-233.mp3"	"e/joram-moments_of_clarity-13-plenilune-262-291.mp3"	"6/mercy_machine-in_your_bed-02-my_joan_of_arc-0-29.mp3"
+"40913"	"37827"	"54289"	"1"	"0"	"0"	"4/ensemble_mirable-triemer_six_cello_sonatas-09-sonata_2_minuetto_i-88-117.mp3"	"d/various_artists-the_art_of_persuasion-08-the_fate_cargo_cult-117-146.mp3"	"a/jacob_heringman-black_cow-17-bakfark_fantasia-30-59.mp3"
+"39434"	"53909"	"43074"	"6"	"17"	"10"	"a/plunkett-14_days-09-hold_tight-117-146.mp3"	"f/philharmonia_baroque_orchestra-handel__atalanta_cd2-16-recitativo_oh_del_crudo_mio_bene-30-59.mp3"	"4/justin_bianco-siren-10-journeys_twilight-30-59.mp3"
+"18472"	"2833"	"14859"	"3"	"2"	"16"	"6/drop_trio-cezanne-04-luna-88-117.mp3"	"8/cargo_cult-vibrant-01-mirrored_image-175-204.mp3"	"b/oberlin_consort_of_viols-5_and_6_part_fantasies_of_william_lawes-03-set_a_5_in_f_major-233-262.mp3"
+"12381"	"27052"	"47377"	"1"	"1"	"0"	"6/dj_markitos-slower_emotions138_bpm_remixes-03-cyber_evolution_138_bpm_remix-262-291.mp3"	"c/rapoon-easterly_6_or_7-06-falling_more_slowly-349-378.mp3"	"c/liquid_zen-seventythree-11-wobble_into_venus-349-378.mp3"
+"49519"	"38715"	"48593"	"2"	"2"	"3"	"1/tim_rayborn-qadim-13-amniat__robab_afghan-204-233.mp3"	"6/sand_craig_and_dornenburg-biber_violin_sonatas-09-biber_rosary_sonata_14_in_d_major_the_assumption_of_mary-30-59.mp3"	"9/strojovna_07-iii-12-partition-204-233.mp3"
+"15290"	"7261"	"1224"	"0"	"3"	"1"	"9/domased-slowdown-03-sound_of_ambient_part_1-175-204.mp3"	"1/richard_savino-murcia__danza_y_diferencias-02-fandango-117-146.mp3"	"4/human_response-delirious-01-delirious-291-320.mp3"
+"31234"	"18106"	"40259"	"1"	"1"	"0"	"a/jade_leary-and_come_the_sirens-07-earthwish_on_saturn-30-59.mp3"	"2/jamie_janover-evolutions-04-interlocken-117-146.mp3"	"2/duo_chambure-vihuela_duets_of_valderrabano-09-obsecro_te_domina_josquin_dez_prez-88-117.mp3"
+"35979"	"52820"	"12045"	"2"	"2"	"0"	"8/mercy_machine-in_your_bed__the_remixes-08-invisible_cosmic_sea_shanty_mix-349-378.mp3"	"d/kyiv_chamber_choir-praise_the_lord-15-lvovof_thy_mystical_supper-59-88.mp3"	"e/dac_crowell-within_this_space-03-cantillation-1016-1045.mp3"
+"34876"	"18135"	"10696"	"1"	"1"	"0"	"4/monks_and_choirs_of_kiev_pechersk_lavra-chants_of_the_russian_orthodox_church-08-bless_is_the_man_authentic_kiev_chant-88-117.mp3"	"6/mercy_machine-in_your_bed__instrumental_mix-04-invisible_instrumental_mix-117-146.mp3"	"c/telemann_trio_berlin-telemann_trio_berlin-02-triosonate_fur_flute_violine_und_basso__allegro_telemann-0-29.mp3"
+"2833"	"18472"	"14859"	"2"	"4"	"17"	"8/cargo_cult-vibrant-01-mirrored_image-175-204.mp3"	"6/drop_trio-cezanne-04-luna-88-117.mp3"	"b/oberlin_consort_of_viols-5_and_6_part_fantasies_of_william_lawes-03-set_a_5_in_f_major-233-262.mp3"
+"25699"	"15184"	"2619"	"0"	"0"	"1"	"b/philharmonia_baroque-beethoven_symphonies_no_3_eroica_and_no_8-06-8_symph_3rd-117-146.mp3"	"4/seth_carlin-schubert__works_for_solo_fortepiano-03-sonata_in_eflat_major_opus_posth__122__menuetto_allegretto-30-59.mp3"	"4/jay_kishor-the_color_of_night-01-malkauns-1045-1074.mp3"
+"43565"	"27871"	"52571"	"0"	"1"	"0"	"4/tim_rayborn-the_path_beyond-10-osman_pasha-291-320.mp3"	"4/dj_markitos-evolution_of_the_mind-06-losing_control-175-204.mp3"	"7/jag-cypress_grove_blues-15-cypress_boogie-0-29.mp3"
+"56338"	"6094"	"10625"	"13"	"0"	"1"	"0/daniel_ben_pienaar-book_2_cd2_welltempered_clavier-20-prelude_and_fugue_no__22_in_bflat_minor_bwv_891_fuga-88-117.mp3"	"8/skitzo-hellavator_musick-02-angels_blood-117-146.mp3"	"f/jackalopes-jacksploitation-02-those_great_big____memories-88-117.mp3"
+"48587"	"11772"	"46912"	"0"	"0"	"1"	"9/strojovna_07-iii-12-partition-30-59.mp3"	"8/william_brooks-buffalo_treason-03-barn_near_a_big_house-117-146.mp3"	"1/solace-the_gathering_season-11-sudan-233-262.mp3"
+"25211"	"48228"	"37173"	"3"	"1"	"12"	"2/mrdc-timecode-05-timecode-146-175.mp3"	"1/solace-the_gathering_season-12-journeys_end-146-175.mp3"	"0/voices_of_music-an_evening_with_bach-08-schlafe_mein_leibster_bwv_213-320-349.mp3"
+"9459"	"37307"	"43596"	"3"	"3"	"1"	"5/satori-for_relaxation-02-river_surround-349-378.mp3"	"1/etherine-24_days-08-singing_for_the_day-59-88.mp3"	"6/strojovna_07-mirnix-10-out_clipping-0-29.mp3"
+"20177"	"39386"	"10538"	"0"	"2"	"7"	"d/katherine_roberts_perl-j_s__bach_french_suites-04-suite_no_4_in_e_flat_major_bwv_815_gavotte-30-59.mp3"	"7/jeni_melia-the_last_of_old_england-09-green_bushes_trad-88-117.mp3"	"4/rapoon-the_kirghiz_light__cd_1-02-the_temple_shakes-59-88.mp3"
+"35979"	"12045"	"52820"	"3"	"0"	"3"	"8/mercy_machine-in_your_bed__the_remixes-08-invisible_cosmic_sea_shanty_mix-349-378.mp3"	"e/dac_crowell-within_this_space-03-cantillation-1016-1045.mp3"	"d/kyiv_chamber_choir-praise_the_lord-15-lvovof_thy_mystical_supper-59-88.mp3"
+"11633"	"23780"	"3914"	"0"	"0"	"2"	"0/apa_ya-apa_ya-03-antare_e_dhu-175-204.mp3"	"e/yongen-moonrise-05-one-204-233.mp3"	"5/sitar-first_congregational_church_concert-01-raga_patdeep__alap__jay_kishor-1509-1538.mp3"
+"39386"	"20177"	"10538"	"1"	"2"	"6"	"7/jeni_melia-the_last_of_old_england-09-green_bushes_trad-88-117.mp3"	"d/katherine_roberts_perl-j_s__bach_french_suites-04-suite_no_4_in_e_flat_major_bwv_815_gavotte-30-59.mp3"	"4/rapoon-the_kirghiz_light__cd_1-02-the_temple_shakes-59-88.mp3"
+"40002"	"35664"	"42627"	"3"	"3"	"7"	"8/mediva-viva_mediva-09-mandad_ei_comigo_cantiga_no_3-0-29.mp3"	"f/lizzi-love_and_you_and_i-08-gone-233-262.mp3"	"1/pizzle-party_patrol-10-farrakorn-0-29.mp3"
+"45860"	"29527"	"16281"	"7"	"29"	"12"	"7/rapoon-what_do_you_suppose-11-i_dont_expect_anyone-146-175.mp3"	"c/glen_bledsoe-up_and_down-06-tango_cacafuego-146-175.mp3"	"6/ralph_meulenbroeks-gambomania-04-sonata_in_d_minor_adagio_karl_friedrich_abel-59-88.mp3"
+"56164"	"10323"	"24844"	"0"	"0"	"2"	"9/janine_johnson-german_keyboard_masters-20-ciacona_in_e_buxtehude-88-117.mp3"	"8/tim_rayborn-veils_of_light-02-tabak-30-59.mp3"	"7/wicked_boy-the_treatment-05-strange_days-88-117.mp3"
+"20576"	"55772"	"26478"	"7"	"4"	"0"	"1/spinecar-passive_aggressive-04-true-262-291.mp3"	"3/jag-four_strings-19-helena_street_corner_blues-30-59.mp3"	"f/strojovna_07-switch_on__switch_off-06-crystal_durgamata_remix-175-204.mp3"
+"23808"	"4975"	"9194"	"3"	"3"	"13"	"b/cargo_cult-alchemy-05-our_song-0-29.mp3"	"b/solar_cycle-sunlight-01-sunlight-88-117.mp3"	"4/jay_kishor-amber-02-raga_malgunji__jor-784-813.mp3"
+"12739"	"6033"	"5192"	"3"	"13"	"26"	"c/hands_upon_black_earth-hands_upon_black_earth-03-effigy-146-175.mp3"	"0/chris_harvey-the_white_sail-02-allegiance-117-146.mp3"	"0/william_brooks-bitter_circus-01-the_gift-88-117.mp3"
+"28288"	"21983"	"51177"	"5"	"5"	"15"	"9/lisa_debenedictis-tigers-06-ocean_in_her_head-117-146.mp3"	"d/paul_avgerinos-balancing_spheres-05-day_dreams__and_thirst_is_quenched-552-581.mp3"	"c/strojovna_07-number_1-14-blaudisco-204-233.mp3"
+"21950"	"21534"	"364"	"1"	"1"	"1"	"b/ehren_starks-the_depths_of_a_year-05-dads_song-233-262.mp3"	"4/swar_prabhat-designer_bliss-05-brahmodbhav-436-465.mp3"	"c/jamie_janover-now_center_of_time-01-arc-204-233.mp3"
+"3260"	"5983"	"4502"	"0"	"2"	"0"	"8/justin_bianco-phoenix-01-phoenix-88-117.mp3"	"e/burning_babylon-stereo_mash_up-02-addis_red_dub-204-233.mp3"	"2/ensemble_mirable-conversations_galantes-01-sonata_iii_in_d_minor_allegromoderato-88-117.mp3"
+"27333"	"6638"	"56469"	"10"	"5"	"4"	"a/kitka-nectar-06-hopp_ide_tisztan_hungary-146-175.mp3"	"b/philharmonia_baroque-mozart_orchestral_works-02-concerto_for_flute_and_orchestra_in_g_major_kv313_allegro-320-349.mp3"	"c/o_fickle_fortune-a_celebration_of_robert_burns-20-the_sun_he_is_sunk_in_the_west-30-59.mp3"
+"31198"	"50159"	"38582"	"7"	"10"	"3"	"5/kammen___swan-wild_wood-07-dunmore_lasses-175-204.mp3"	"6/norine_braun-now_and_zen-13-lucky_13-30-59.mp3"	"a/liquid_zen-magic_midsummer-09-arabia_underwater-262-291.mp3"
+"28222"	"51566"	"56370"	"7"	"29"	"6"	"e/atomic_opera-penguin_dust-06-november-117-146.mp3"	"8/philharmonia_baroque-cd2_scarlatti__cecilian_vespers-14-magnificat__gloria_patri-30-59.mp3"	"e/magnatune_compilation-high_energy_rock_and_roll-20-skitzo_angels_blood-0-29.mp3"
+"41492"	"17881"	"45650"	"1"	"1"	"0"	"6/jeni_melia-the_lost_art_of_wooing-09-toccata_no_6_in_f_major_hieronymus_kapsberger-88-117.mp3"	"0/beth_quist-silver-04-grace-204-233.mp3"	"e/solace-balance-11-feitian-175-204.mp3"
+"30982"	"36821"	"28578"	"5"	"3"	"0"	"f/norine_braun-and_the_mood_swings-07-cruel_streak-88-117.mp3"	"a/jade_leary-and_come_the_sirens-08-paul_gauguin-0-29.mp3"	"6/mercy_machine-in_your_bed-06-quietly-88-117.mp3"
+"29370"	"47440"	"17683"	"1"	"3"	"11"	"a/rhonda_lorence-winter_moon-06-steamy_river-59-88.mp3"	"e/steven_devine-portrait_of_an_english_harpsichord-12-sonata_no_4_in_c_minor_allemande_joseph_kelway-88-117.mp3"	"c/strojovna_07-number_1-04-flaki-262-291.mp3"
+"28952"	"17471"	"14627"	"1"	"2"	"0"	"3/etherfysh-box_of_fysh-06-sidewalk-320-349.mp3"	"b/belief_systems-eponyms-04-electro_kinetic-30-59.mp3"	"f/dac_crowell-redshifted_harmonies-03-redshifted_harmonies-59-88.mp3"
+"23793"	"32232"	"50605"	"4"	"8"	"9"	"3/dj_cary-eastern_grooves-05-oriental_distortionshiva_in_exile-59-88.mp3"	"2/indidginus-as_above_so_below-07-machu-88-117.mp3"	"2/ensemble_mirable-conversations_galantes-13-sonata_ii_in_b_minor_ariagratioso_altro-88-117.mp3"
+"21897"	"26678"	"19853"	"0"	"1"	"0"	"6/curandero-curandero-05-corriendo_juntos-117-146.mp3"	"e/hans_christian-phantoms-06-desperado-204-233.mp3"	"1/phebe_craig_and_katherine_westine-beside_themselves-04-soler_conceierto_ii_in_a_minor_andante-175-204.mp3"
+"35019"	"3381"	"21471"	"2"	"2"	"1"	"5/rapoon-cidar-08-cimbala-494-523.mp3"	"6/barry_phillips-trad-01-polska_fran_glava-59-88.mp3"	"6/falik-streaks_and_strokes-05-bliss-175-204.mp3"
+"39836"	"18423"	"44559"	"0"	"1"	"0"	"2/shira_kammen-the_almanac-09-le_lai_de_la_rose-0-29.mp3"	"9/domased-slowdown-04-long_journey-30-59.mp3"	"7/jeni_melia-the_last_of_old_england-10-the_low_low_lands_of_holland_trad-117-146.mp3"
+"9596"	"19771"	"3019"	"1"	"1"	"0"	"4/swar_prabhat-designer_bliss-02-saraswati_vandana-262-291.mp3"	"9/curl-inner-04-sincerely_sorry-88-117.mp3"	"1/touchinggrace-the_reformation_sessions-01-november_gale-59-88.mp3"
+"2968"	"27443"	"33712"	"1"	"2"	"0"	"d/paul_avgerinos-balancing_spheres-01-night_illusions__the_longing-610-639.mp3"	"5/mr_epic-sideways-06-in-59-88.mp3"	"9/cheryl_ann_fulton-the_airs_of_wales-07-the_dimpled_cheek-0-29.mp3"
+"4333"	"23901"	"44579"	"1"	"0"	"2"	"2/magnatune_remixed-ridin_the_faders_2-01-shining_star_games_az_egan_csillag_lenni__fourstones-30-59.mp3"	"5/thursday_group-uncle_mean-05-pelican_fan-349-378.mp3"	"e/john_jackson-bad_things_happen_all_the_time-10-through_the_glass-30-59.mp3"
+"50207"	"7785"	"38252"	"1"	"3"	"2"	"b/cargo_cult-alchemy-13-matt-204-233.mp3"	"2/aba_structure-tektonik_illusion-02-illusion-233-262.mp3"	"0/williamson-a_few_things_to_hear_before_we_all_blow_up-08-whats_on_the_ceiling_beats_whats_on_tv-291-320.mp3"
+"49371"	"8182"	"58152"	"2"	"2"	"2"	"e/briddes_roune-lenten_is_come-12-worldes_blis-30-59.mp3"	"7/monoide-zeitpunkt-02-letzter_vorschlag-0-29.mp3"	"d/janine_johnson-telemann_harpsichord_solos_from_der_getreue_music_meister-26-suite_sarabande_pezold-88-117.mp3"
+"37795"	"13068"	"11263"	"18"	"17"	"43"	"8/hybris-the_first_words-08-the_choice_i_never_had-117-146.mp3"	"b/dj_cary-power_synths-03-from_love_2_wicked_allstars-204-233.mp3"	"0/american_bach_soloists-j_s__bach__cantatas_volume_v-03-gleichwie_der_regen_und_schnee_vom_himmel_fallt_bwv_18_iii_recitative_and_litany__mein_gott_hier_wird_mein_herze_sein-59-88.mp3"
+"36904"	"19353"	"41821"	"0"	"0"	"1"	"a/janine_johnson-chopin_recital-08-polonaise_op_44_in_f_minor-552-581.mp3"	"3/etherfysh-box_of_fysh-04-rama-1132-1161.mp3"	"f/the_headroom_project-jetuton_andawai-10-late_night_blues-146-175.mp3"
+"46456"	"27316"	"37064"	"6"	"2"	"20"	"0/beth_quist-silver-11-planet-291-320.mp3"	"a/mr_gelatine-electroluv-06-hiphop110-30-59.mp3"	"1/tim_rayborn-ashek-08-ravan-639-668.mp3"
+"15187"	"52981"	"32559"	"0"	"0"	"4"	"4/seth_carlin-schubert__works_for_solo_fortepiano-03-sonata_in_eflat_major_opus_posth__122__menuetto_allegretto-117-146.mp3"	"9/american_baroque-dances_and_suites_of_rameau_and_couperin-15-passepieds_12_suite_from_les_fetes_dhebe_rameau-117-146.mp3"	"6/dj_markitos-slower_emotions138_bpm_remixes-07-ocean_of_the_emotions_138_bpm_remix-175-204.mp3"
+"36917"	"37631"	"3770"	"1"	"1"	"0"	"6/curandero-curandero-08-prayer-291-320.mp3"	"d/katherine_roberts_perl-j_s__bach_french_suites-08-suite_no_2_in_c_minor_bwv_813_allemande-204-233.mp3"	"c/jay_kishor-cd2_the_sowebo_concert-01-raga_malkauns-3655-3684.mp3"
+"22072"	"6281"	"14875"	"6"	"19"	"15"	"2/stellamara-star_of_the_sea-05-del_mar_rojo-175-204.mp3"	"5/mr_epic-sideways-02-blue_days-117-146.mp3"	"0/william_brooks-bitter_circus-03-seven_promises-117-146.mp3"
+"47939"	"52433"	"4296"	"28"	"64"	"52"	"5/kammen___swan-wild_wood-12-eu_chorei-0-29.mp3"	"8/magnatune-red_hat_summit_compilation-15-beat_under_control__blue_lights-320-349.mp3"	"b/oberlin_consort_of_viols-5_and_6_part_fantasies_of_william_lawes-01-set_a_6_in_c_major-407-436.mp3"
+"17661"	"16441"	"50974"	"2"	"0"	"0"	"a/liquid_zen-magic_midsummer-04-fire_below-30-59.mp3"	"b/jacob_heringman-jane_pickeringes_lute_book-04-almaine_by_francis_cuttinge-30-59.mp3"	"9/kiev_seminary_choir-hymns_of_the_allnight_vigil-13-troparion_to_the_st__fathers_of_pecherskaya_lavra-0-29.mp3"
+"42899"	"915"	"41391"	"24"	"22"	"12"	"c/william_brooks-blue_ribbon__the_best_of_william_brooks-10-hideaway-175-204.mp3"	"6/gerard_satamian-dry_fig_trees-01-chansons_sans_paroles_1989_op__2_pastorale-30-59.mp3"	"6/mercy_machine-the_devil_i_know-09-the_man_i_create-146-175.mp3"
+"41537"	"13951"	"25877"	"0"	"8"	"2"	"a/four_stones-la_vie_chill-09-u_meaning_u-204-233.mp3"	"e/jamie_janover_and_michael_masley-all_strings_considered-03-mnemonic_harmonics-320-349.mp3"	"7/roots_of_rebellion-the_looking_glass-06-amnesia-175-204.mp3"
+"45731"	"23987"	"19521"	"6"	"8"	"1"	"2/drop_trio-big_dipper-11-gin_and_nothin-146-175.mp3"	"2/zephyrus-angelus-05-quem_vidistis_parores_cipriano_de_rore-117-146.mp3"	"7/aba_structure-epic-04-scrambling_to_stay_ahead-262-291.mp3"
+"38057"	"50779"	"21334"	"4"	"4"	"32"	"c/telemann_trio_berlin-telemann_trio_berlin-08-triosonate_in_ddur__allegro_un_poco_c_p__bach-175-204.mp3"	"2/vito_paternoster-cd2bach_cello_suites-13-suite_v_in_do_minore__prelude-88-117.mp3"	"9/janine_johnson-german_keyboard_masters-05-auf_das_heilige_pfingstfest_pachelbel-0-29.mp3"
+"10757"	"29305"	"6848"	"3"	"0"	"22"	"7/dac_crowell-the_sea_and_the_sky-02-umi_no_kami_ni_kansha-958-987.mp3"	"f/rapoon-tin_of_drum-06-southbound-929-958.mp3"	"5/new_york_consort_of_viols-dances_and_canzonas_of_holborne_and_brade-02-des_rothschencken_tanz_brade-59-88.mp3"
+"43593"	"37823"	"8865"	"23"	"7"	"3"	"a/plunkett-14_days-10-out_at_sea-146-175.mp3"	"d/various_artists-the_art_of_persuasion-08-the_fate_cargo_cult-0-29.mp3"	"8/stargarden-music_for_modern_listening-02-perdido-262-291.mp3"
+"49590"	"21116"	"2443"	"7"	"3"	"5"	"c/edward_martin-art_of_the_lute_in_renaissance_france-13-aupres_de_vous_sermisy-30-59.mp3"	"1/solace-the_gathering_season-05-aenaem-349-378.mp3"	"5/thursday_group-uncle_mean-01-like_white_on_rice-117-146.mp3"
+"11785"	"55629"	"10349"	"2"	"0"	"0"	"f/rapoon-tin_of_drum-03-beneath_the_sky-175-204.mp3"	"9/janine_johnson-german_keyboard_masters-19-canzona_in_e_buxtehude-59-88.mp3"	"1/touchinggrace-the_reformation_sessions-02-taking_flight-407-436.mp3"
+"50949"	"3574"	"36474"	"0"	"0"	"2"	"4/burnshee_thornside-the_art_of_not_blending_in-13-til_i_met_you-0-29.mp3"	"1/the_rajdhani_quartet-the_gandhi_memorial_concert-01-raga_hansa_kalyani-1277-1306.mp3"	"c/strojovna_07-number_1-08-na_bednicke_stal-117-146.mp3"
+"23034"	"56164"	"2003"	"1"	"0"	"0"	"4/seismic_anamoly-sweet_rock_candy-05-kick_in_tha_nuts-88-117.mp3"	"9/janine_johnson-german_keyboard_masters-20-ciacona_in_e_buxtehude-88-117.mp3"	"a/tilopa-pictures_of_silence-01-ichi-146-175.mp3"
+"37286"	"39679"	"26497"	"3"	"5"	"2"	"2/claire_fitch-ambiencellist-08-shortest_day-59-88.mp3"	"0/william_brooks-bitter_circus-09-is_there_anybody_there-59-88.mp3"	"b/lisa_debenedictis-mixter_one-06-cuckoo_passiveaggressive_mix_by_hisboyelroy-146-175.mp3"
+"32971"	"22422"	"2420"	"2"	"0"	"1"	"2/antiguru-fall_submissions-07-rectify-378-407.mp3"	"d/shiva_in_exile-ethnic-05-floating-146-175.mp3"	"c/liquid_zen-oscilloscope-01-levier_darmement-117-146.mp3"
+"13741"	"54178"	"13747"	"1"	"3"	"1"	"f/magnatune-relaxation_spa-03-march_thirtyone_falling_you-0-29.mp3"	"3/jag-pretty_girl_blues-16-the_waterfall-117-146.mp3"	"f/magnatune-relaxation_spa-03-march_thirtyone_falling_you-175-204.mp3"
+"15930"	"46279"	"5421"	"0"	"2"	"1"	"8/ivilion-terean-03-urtulitreator-204-233.mp3"	"a/ensemble_sreteniye-ancient_church_singing_of_byzantine_georgia_and_rus-11-o_theotokos_the_virgin_rejoice_ave_maria-494-523.mp3"	"f/dac_crowell-redshifted_harmonies-01-tranquilitatis-581-610.mp3"
+"28144"	"43820"	"50678"	"5"	"13"	"5"	"d/paul_avgerinos-maya__the_great_katun-06-night_of_the_goddess_part_2-378-407.mp3"	"6/grayson_wray-picassos_dream-10-pure_delight-117-146.mp3"	"c/vito_paternoster-cd1bach_sonatas_and_partitas_for_solo_violin-13-sonata_seconda_in_re_minore__grave-204-233.mp3"
+"38270"	"33781"	"11073"	"7"	"12"	"8"	"0/the_bots-truth-08-where_has_our_love_gone-146-175.mp3"	"0/william_brooks-bitter_circus-07-the_hanging_of_allen_scott_johnson-117-146.mp3"	"1/zilla-egg-02-wicker_pilots-0-29.mp3"
+"49995"	"18968"	"8884"	"8"	"3"	"2"	"9/lisa_debenedictis-tigers-13-girl_and_supergirl-59-88.mp3"	"6/paul_beier-michelagnolo_galilei-04-passemezzo_and_saltarello-233-262.mp3"	"9/musica_franca-corrette__le_phenix__les_delices_de_la_solitude-02-phenix__adagio-30-59.mp3"
+"18423"	"39836"	"44559"	"2"	"0"	"0"	"9/domased-slowdown-04-long_journey-30-59.mp3"	"2/shira_kammen-the_almanac-09-le_lai_de_la_rose-0-29.mp3"	"7/jeni_melia-the_last_of_old_england-10-the_low_low_lands_of_holland_trad-117-146.mp3"
+"10810"	"32332"	"34856"	"3"	"2"	"4"	"7/dac_crowell-the_sea_and_the_sky-02-umi_no_kami_ni_kansha-2495-2524.mp3"	"f/tilopa-turkishauch-07-meifrui_ii-320-349.mp3"	"b/magnatune_compilation-rock-08-beth_quist_monsters-59-88.mp3"
+"19542"	"23321"	"16244"	"1"	"0"	"1"	"f/magnatune-relaxation_spa-04-secret_solution_michael_masley-175-204.mp3"	"7/claire_fitch-ambiencellist_part_ii-05-longest_day-0-29.mp3"	"0/american_bach_soloists-j_s__bach__cantatas_volume_v-04-gleichwie_der_regen_und_schnee_vom_himmel_fallt_bwv_18_iv_aria__mein_seelenschatz_ist_gottes_wort-146-175.mp3"
+"45166"	"10653"	"12158"	"1"	"0"	"1"	"a/janine_johnson-chopin_recital-11-ballade_op_23_in_g_minor-262-291.mp3"	"4/justin_bianco-siren-02-token-0-29.mp3"	"2/solace-ahsas-03-circle_58_68_78-146-175.mp3"
+"4071"	"2486"	"56693"	"19"	"3"	"21"	"3/dj_cary-downtempo_chill-01-ruff_and_tumble_mr_epic-233-262.mp3"	"9/etherine-gleam-01-lost-262-291.mp3"	"9/american_baroque-dances_and_suites_of_rameau_and_couperin-21-les_fauvetes_plaintives_xiveme_ordre_couperin-146-175.mp3"
+"17220"	"36931"	"56532"	"3"	"1"	"2"	"d/paul_avgerinos-balancing_spheres-04-day_dreams__the_flames_are_awakened-88-117.mp3"	"e/mountain_mirrors-mountain_mirrors-08-praying_mantis-117-146.mp3"	"e/steven_devine-portrait_of_an_english_harpsichord-21-suite_no_5_in_e_major_allemande_george_frederick_handel-146-175.mp3"
+"44782"	"18681"	"42925"	"4"	"7"	"5"	"2/paul_avgerinos-gnosis-10-we_are_one-88-117.mp3"	"5/trancevision-lemuria-04-nebula-30-59.mp3"	"5/burnshee_thornside-rock_this_moon-10-i_know_this_feeling-88-117.mp3"
+"25211"	"37173"	"48228"	"1"	"11"	"5"	"2/mrdc-timecode-05-timecode-146-175.mp3"	"0/voices_of_music-an_evening_with_bach-08-schlafe_mein_leibster_bwv_213-320-349.mp3"	"1/solace-the_gathering_season-12-journeys_end-146-175.mp3"
+"27211"	"11300"	"1987"	"3"	"4"	"0"	"3/sherefe-opium-06-geldim_bir_kara_tasha-175-204.mp3"	"c/lvx_nova-lvx_nova-03-kyoto_nights-639-668.mp3"	"e/c_layne-the_sun_will_come_out_to_blind_you-01-i_dont_care_if_you_lie-146-175.mp3"
+"23415"	"14931"	"8748"	"2"	"0"	"0"	"2/roots_of_rebellion-surfacing-05-messenger-30-59.mp3"	"4/jay_kishor-the_color_of_night-03-shivranjani-146-175.mp3"	"b/satori-journey_to_other_worlds-02-other_worlds-871-900.mp3"
+"50537"	"40851"	"37980"	"0"	"0"	"1"	"f/norine_braun-and_the_mood_swings-13-running_on_the_edge-204-233.mp3"	"6/hoxman-synthesis_of_five-09-snake_eye-0-29.mp3"	"f/satori-healing_sounds_of_tibet-08-tibetan_trance-59-88.mp3"
+"24772"	"21490"	"51717"	"11"	"3"	"7"	"b/liquid_zen-elements_at_loop_10-05-spirit-59-88.mp3"	"d/rapoon-vernal_crossing-05-bol_baya-204-233.mp3"	"1/tim_rayborn-qadim-14-perishde__santur_persian-262-291.mp3"
+"2878"	"50177"	"13057"	"1"	"2"	"6"	"f/satori-healing_sounds_of_tibet-01-moon_night-175-204.mp3"	"8/philharmonia_baroque-cd2_scarlatti__cecilian_vespers-13-magnificat__fecit_potentiam-59-88.mp3"	"b/the_bots-now_is_the_time-03-freak-117-146.mp3"
+"19482"	"20327"	"46159"	"0"	"11"	"2"	"4/paul_berget-j_s__bach_on_the_lute-04-sarabande__bwv_996-0-29.mp3"	"6/dr_kuch-analog_disease-04-the_big_bang_theory-59-88.mp3"	"a/kitka-nectar-11-miskolc_felol_hidegen_fuj_a_szel_hungary-175-204.mp3"
+"48887"	"13279"	"33408"	"0"	"1"	"0"	"a/falik-dreams_from_the_machine-12-son_of_sand_flea_remix-204-233.mp3"	"a/the_headroom_project-ciri_a_doro-03-hoyd_hoy_june-117-146.mp3"	"4/the_marginal_prophets-bohemian_rap_cd-07-spank_you-88-117.mp3"
+"23321"	"19542"	"16244"	"0"	"0"	"1"	"7/claire_fitch-ambiencellist_part_ii-05-longest_day-0-29.mp3"	"f/magnatune-relaxation_spa-04-secret_solution_michael_masley-175-204.mp3"	"0/american_bach_soloists-j_s__bach__cantatas_volume_v-04-gleichwie_der_regen_und_schnee_vom_himmel_fallt_bwv_18_iv_aria__mein_seelenschatz_ist_gottes_wort-146-175.mp3"
+"47390"	"17122"	"1628"	"0"	"0"	"1"	"6/falik-streaks_and_strokes-11-xanthanon-146-175.mp3"	"d/ambient_teknology-the_all_seeing_eye_project-04-confusion_says-175-204.mp3"	"8/magnatune-red_hat_summit_compilation-01-fluid__headphones-88-117.mp3"
+"2515"	"1548"	"39508"	"1"	"0"	"0"	"2/mrdc-timecode-01-lust-146-175.mp3"	"6/ed_martin-luis_milan__el_maestro-01-fantasia_1-30-59.mp3"	"7/rocket_city_riot-pop_killer-09-hypodermic-30-59.mp3"
+"7699"	"23357"	"26561"	"2"	"0"	"2"	"9/the_kokoon-berlin-02-how_do_i_work_this-30-59.mp3"	"9/lisa_debenedictis-tigers-05-lowell-117-146.mp3"	"4/rapoon-the_kirghiz_light__cd_1-06-dala-30-59.mp3"
+"1743"	"47770"	"28712"	"0"	"1"	"2"	"6/stargarden-ambient_excursions-01-ghosts_of_ocean_gardens-146-175.mp3"	"6/jeni_melia-the_lost_art_of_wooing-12-come_away_come_sweet_love_john_dowland-30-59.mp3"	"8/hybris-the_first_words-06-rotten_flowers-30-59.mp3"
+"10715"	"21421"	"16804"	"0"	"2"	"0"	"5/stargarden-the_art_of_analog_diversion-02-trybal-262-291.mp3"	"c/five_star_fall-automatic_ordinary-05-between_2_floors-204-233.mp3"	"8/mercy_machine-mercy_machine-04-bones-146-175.mp3"
+"47678"	"35224"	"33174"	"0"	"0"	"1"	"7/american_bach_soloists-j_s__bach__mass_in_b_minor_cd2-12-benedictus-117-146.mp3"	"4/american_bach_soloists-j_s__bach__mass_in_b_minor_cd1-08-domine_deus-30-59.mp3"	"c/william_brooks-fowl_mouth-07-silent_wings-204-233.mp3"
+"78"	"35976"	"7807"	"7"	"2"	"1"	"9/american_bach_soloists-heinrich_schutz__musicalische_exequien-01-musicalische_exequien_swv_279_teil_i_concert_in_form_einer_teutschen_begrabnismissa-1132-1161.mp3"	"8/mercy_machine-in_your_bed__the_remixes-08-invisible_cosmic_sea_shanty_mix-262-291.mp3"	"0/solace-iman-02-iman-146-175.mp3"
+"19598"	"53758"	"6959"	"0"	"0"	"5"	"9/suzanne_teng-enchanted_wind-04-septembers_angels-175-204.mp3"	"6/jeni_melia-the_lost_art_of_wooing-16-lady_careys_dump_anon-30-59.mp3"	"e/solace-balance-02-dragon_and_sword-349-378.mp3"
+"41233"	"27950"	"31068"	"9"	"1"	"13"	"9/the_sarasa_ensemble-a_baroque_mosaic-09-sweeter_than_roses_purcell-59-88.mp3"	"9/william_brooks-silent_wings-06-maybe_meagan-146-175.mp3"	"4/human_response-delirious-07-denial-233-262.mp3"
+"46621"	"47738"	"30446"	"19"	"16"	"6"	"e/jade_leary-fossildawn-11-retroscope-175-204.mp3"	"b/magnatune_compilation-rock-12-cargo_cult_our_song-0-29.mp3"	"0/ammonite-reconnection-07-angel_hold_on___-291-320.mp3"
+"6638"	"27333"	"56469"	"13"	"4"	"2"	"b/philharmonia_baroque-mozart_orchestral_works-02-concerto_for_flute_and_orchestra_in_g_major_kv313_allegro-320-349.mp3"	"a/kitka-nectar-06-hopp_ide_tisztan_hungary-146-175.mp3"	"c/o_fickle_fortune-a_celebration_of_robert_burns-20-the_sun_he_is_sunk_in_the_west-30-59.mp3"
+"48043"	"34380"	"36352"	"1"	"2"	"0"	"a/da_camera-a_celtic_celebration-12-gavotta_summer__the_poppy_from_airs_for_the_seasons_osward-0-29.mp3"	"c/lvx_nova-lvx_nova-08-in_memory_of_magick_mick-407-436.mp3"	"e/solace-balance-08-miss_anime-30-59.mp3"
+"50307"	"5783"	"40683"	"26"	"4"	"5"	"e/magnatune_com-magnatune_at_the_cc_salon-13-one_at_a_time_burnshee_thornside-117-146.mp3"	"a/rhonda_lorence-winter_moon-01-winter_moon-233-262.mp3"	"d/beth_quist-shall_we_dance-09-ritual-291-320.mp3"
+"35019"	"21471"	"3381"	"4"	"1"	"5"	"5/rapoon-cidar-08-cimbala-494-523.mp3"	"6/falik-streaks_and_strokes-05-bliss-175-204.mp3"	"6/barry_phillips-trad-01-polska_fran_glava-59-88.mp3"
+"54126"	"10128"	"52490"	"0"	"2"	"0"	"1/vito_paternoster-cd1bach_cello_suites-16-suite_vi_in_re_magiore__sarabande-117-146.mp3"	"3/spinecar-autophile-02-stay-30-59.mp3"	"b/richard_savino-mertz__bardic_sounds-15-childrens_fairy_tale-175-204.mp3"
+"17267"	"31629"	"33118"	"13"	"9"	"33"	"c/beatundercontrol-the_introduction-04-direction_dub-0-29.mp3"	"8/justin_bianco-phoenix-07-gift-30-59.mp3"	"c/seismic_anamoly-ramifications-07-serenade_for_samantha-0-29.mp3"
+"34045"	"15160"	"8537"	"2"	"0"	"0"	"c/glen_bledsoe-up_and_down-07-up_and_down-117-146.mp3"	"5/edward_martin_and_paul_berget-baroque_lute_duets-03-sonata_in_c_major_weiss__largo-117-146.mp3"	"a/tilopa-pictures_of_silence-02-ni-117-146.mp3"
+"33662"	"54392"	"39327"	"2"	"0"	"1"	"d/seismic_anamoly-afterburner-07-ten_million_tears-436-465.mp3"	"2/maryse_carlin-rameau__pieces_de_clavecin_en_concerts__forqueray_suites_4_and_5-17-fifth_suite___la_boisson_forqueray-117-146.mp3"	"b/richard_savino-mertz__bardic_sounds-09-gondoliers_song-88-117.mp3"
+"2515"	"39508"	"1548"	"0"	"0"	"3"	"2/mrdc-timecode-01-lust-146-175.mp3"	"7/rocket_city_riot-pop_killer-09-hypodermic-30-59.mp3"	"6/ed_martin-luis_milan__el_maestro-01-fantasia_1-30-59.mp3"
+"56250"	"52052"	"10709"	"1"	"1"	"0"	"1/etherine-24_days-20-in_the_garden-30-59.mp3"	"d/katherine_roberts_perl-j_s__bach_french_suites-14-suite_no_3_in_b_minor_bwv_814_allemande-88-117.mp3"	"5/stargarden-the_art_of_analog_diversion-02-trybal-88-117.mp3"
+"46491"	"28319"	"7744"	"1"	"1"	"1"	"7/artemis-gravity-11-prayer-233-262.mp3"	"2/ensemble_sreteniye___three_holies_church_choristers-dont_cry_rachael-06-open_to_me_the_doors_of_repentance_byzantine_chant_bulgarian_tradition-30-59.mp3"	"6/mercy_machine-the_devil_i_know-02-i_need_a_new_jesus-146-175.mp3"
+"19697"	"44230"	"41409"	"2"	"9"	"11"	"a/tilopa-pictures_of_silence-04-shi-204-233.mp3"	"9/musica_franca-corrette__le_phenix__les_delices_de_la_solitude-10-sonata_iii_in_c_major__allemanda-59-88.mp3"	"5/paul_avgerinos-muse_of_the_round_sky-09-the_night_sky-30-59.mp3"
+"12843"	"33304"	"29707"	"1"	"0"	"4"	"b/richard_savino-mertz__bardic_sounds-03-evening_song-146-175.mp3"	"4/seth_carlin-schubert__works_for_solo_fortepiano-07-sonata_in_a_major_opus_posth__120__allegro-320-349.mp3"	"f/memories_of_tomorrow-waiting_for_dawn-06-trance_of_life-0-29.mp3"
+"18557"	"40792"	"50294"	"1"	"11"	"1"	"1/touchinggrace-the_reformation_sessions-04-melon_tropic_sunrise-378-407.mp3"	"4/john_williams-long_ride_home-09-she_walks-30-59.mp3"	"2/shira_kammen-the_almanac-13-o_western_wind-59-88.mp3"
+"26234"	"6954"	"10728"	"0"	"1"	"0"	"1/tim_rayborn-qadim-06-calliopeia__kithara_ancient_greek-146-175.mp3"	"e/solace-balance-02-dragon_and_sword-204-233.mp3"	"7/dac_crowell-the_sea_and_the_sky-02-umi_no_kami_ni_kansha-117-146.mp3"
+"55783"	"47739"	"36335"	"26"	"8"	"3"	"9/american_baroque-dances_and_suites_of_rameau_and_couperin-19-le_rossignol_en_amour_xiveme_ordre_couperin-0-29.mp3"	"b/magnatune_compilation-rock-12-cargo_cult_our_song-30-59.mp3"	"7/roots_of_rebellion-the_looking_glass-08-messenger-175-204.mp3"
+"21950"	"37093"	"43565"	"1"	"0"	"0"	"b/ehren_starks-the_depths_of_a_year-05-dads_song-233-262.mp3"	"4/seismic_anamoly-sweet_rock_candy-08-refleections-146-175.mp3"	"4/tim_rayborn-the_path_beyond-10-osman_pasha-291-320.mp3"
+"16180"	"24201"	"24006"	"6"	"2"	"2"	"e/sun_palace-into_heaven-03-your_hands_lie_open-204-233.mp3"	"2/anup-embrace-05-romance_with_nature-262-291.mp3"	"4/jay_kishor-amber-05-raga_malgunji__tabla_solo_in_jhaptaal-146-175.mp3"
+"31068"	"27950"	"41233"	"5"	"2"	"13"	"4/human_response-delirious-07-denial-233-262.mp3"	"9/william_brooks-silent_wings-06-maybe_meagan-146-175.mp3"	"9/the_sarasa_ensemble-a_baroque_mosaic-09-sweeter_than_roses_purcell-59-88.mp3"
+"14233"	"41133"	"49228"	"3"	"2"	"5"	"3/american_baroque-mozart_4_quartets_for_strings_and_winds-03-oboe_quartet_in_f_k370__rondeau-59-88.mp3"	"b/ehren_starks-the_depths_of_a_year-09-subtle_groove-0-29.mp3"	"8/daniel_berkman-calabashmoon-12-train_to_bamako-30-59.mp3"
+"23106"	"41415"	"44869"	"12"	"0"	"3"	"4/tilopa-kyotaku_live-05-kyo_rei-349-378.mp3"	"5/paul_avgerinos-muse_of_the_round_sky-09-the_night_sky-204-233.mp3"	"c/liquid_zen-oscilloscope-10-zeitgeist-146-175.mp3"
+"6020"	"24470"	"8305"	"11"	"1"	"1"	"d/ambient_teknology-the_all_seeing_eye_project-02-all_seeing_eye-146-175.mp3"	"e/touchinggrace-submission-05-sitar_study-204-233.mp3"	"f/tilopa-turkishauch-02-meifrui_i-204-233.mp3"
+"9196"	"25861"	"31738"	"3"	"18"	"9"	"4/jay_kishor-amber-02-raga_malgunji__jor-842-871.mp3"	"9/the_wretch-ambulatory-06-ambulatory-204-233.mp3"	"e/tilopa-out_of_the_blue-07-heeyahoa-88-117.mp3"
+"14328"	"48706"	"8644"	"5"	"4"	"19"	"f/glen_bledsoe-octopants-03-ppop-59-88.mp3"	"c/soulprint-in_spite_of_it_all-12-putrid-146-175.mp3"	"3/american_baroque-mozart_4_quartets_for_strings_and_winds-02-oboe_quartet_in_f_k370__adagio-117-146.mp3"
+"5221"	"8949"	"20497"	"1"	"1"	"0"	"7/roots_of_rebellion-the_looking_glass-01-the_order-175-204.mp3"	"c/jamie_janover-now_center_of_time-02-playa-639-668.mp3"	"e/atomic_opera-penguin_dust-04-thirst-175-204.mp3"
+"50779"	"36049"	"19859"	"1"	"0"	"8"	"2/vito_paternoster-cd2bach_cello_suites-13-suite_v_in_do_minore__prelude-88-117.mp3"	"1/phebe_craig_and_katherine_westine-beside_themselves-08-js_bach_concerto_in_c_major_for_2_harpsichords_allegro_moderato-436-465.mp3"	"8/cargo_cult-vibrant-04-son_of_ambriel-30-59.mp3"
+"9321"	"45502"	"35743"	"0"	"0"	"3"	"5/sitar-first_congregational_church_concert-02-raga_patdeep__gat__jay_kishor-1538-1567.mp3"	"a/asteria-soyes_loyal-11-dueil_angoisseux_gilles_binchois-233-262.mp3"	"8/ivilion-terean-08-hthar-88-117.mp3"
+"6717"	"30974"	"21752"	"0"	"2"	"0"	"e/hans_christian-phantoms-02-coyotes_dance-117-146.mp3"	"1/phebe_craig_and_katherine_westine-beside_themselves-07-couperin_musetes_de_choisi_et_de_taverni-146-175.mp3"	"5/stargarden-step_off-05-china_green-494-523.mp3"
+"6992"	"5453"	"25493"	"3"	"11"	"2"	"5/domased-selection-02-drunk_warrior-146-175.mp3"	"f/dac_crowell-redshifted_harmonies-01-tranquilitatis-1509-1538.mp3"	"6/drop_trio-cezanne-05-wreck_of_the_zephyr-407-436.mp3"
+"50394"	"35897"	"8457"	"1"	"0"	"0"	"e/joram-moments_of_clarity-13-plenilune-262-291.mp3"	"6/farallon_recorder_quartet-ludwig_senfl-08-in_domino_confido-204-233.mp3"	"6/mercy_machine-in_your_bed-02-my_joan_of_arc-0-29.mp3"
+"12088"	"8446"	"34711"	"3"	"1"	"1"	"1/dac_crowell-sferica-03-chapel_hill_phantom_lantern-59-88.mp3"	"8/mercy_machine-mercy_machine-02-my_fathers_hand-262-291.mp3"	"c/liquid_zen-oscilloscope-08-autumn_glide-59-88.mp3"
+"55772"	"20576"	"26478"	"5"	"4"	"0"	"3/jag-four_strings-19-helena_street_corner_blues-30-59.mp3"	"1/spinecar-passive_aggressive-04-true-262-291.mp3"	"f/strojovna_07-switch_on__switch_off-06-crystal_durgamata_remix-175-204.mp3"
+"27594"	"40264"	"26134"	"0"	"1"	"1"	"f/paul_berget-sl_weiss_on_11_strings-06-linfidele_suite_paysanne-117-146.mp3"	"2/duo_chambure-vihuela_duets_of_valderrabano-09-obsecro_te_domina_josquin_dez_prez-233-262.mp3"	"1/artemis-undone-06-beside_u-59-88.mp3"
+"48898"	"6776"	"8678"	"42"	"14"	"23"	"e/seth_carlin-mozart_in_the_age_of_enlightenment-12-sonata_15_in_c_minor__allegro_georg_benda-117-146.mp3"	"d/paul_avgerinos-maya__the_great_katun-02-dawn_of_the_gods_part_2-262-291.mp3"	"0/beth_quist-silver-02-om_asatoma_sad_gamaya-117-146.mp3"
Binary file core/figures/casimir sim data structure 03042013.pdf has changed
Binary file core/figures/magna_genrebar.fig has changed
Binary file core/figures/magna_genregraph.fig has changed
Binary file core/figures/magna_genrepie.fig has changed
Binary file core/figures/stober_nocycle_error.fig has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/AnnotDB.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,412 @@
+% The thesaurus class is a basic component of all 
+% genre and tag information managing the whole Vocabulary.
+
+classdef AnnotDB < handle
+    
+   % public properties
+   properties (SetAccess = private)
+       lexicon = {};
+      
+   end
+   
+   properties(Hidden, Access = private)
+
+       annotsdb; % a numowners x numannots sparse binary / prob matrix
+       annots_oid; % ownerid to pos in annots conversion
+       
+       binary = 0; % indicator whether the db contains binary or scored annots
+   end
+   
+   methods
+       
+       % ---
+       % simple constructor
+       % ---
+       function db = AnnotDB(lexicon, annots, ids)
+           % db = AnnotDB(lexicon, annots, annotation_ids)
+           % lexicon: the list of all individual annotation elements or
+           %          clips_by_annot or
+           %          lexids_by_clip 
+           
+           % annots: either a clips x numel(lexicon) binary matrix  or 
+           %            ...
+           %
+           % annotation_ids: clip ids for the binary case, 
+           
+           if nargin >= 1
+
+               % ---
+               % NOTE: two ways of supplying the annots are allowed:
+               % 1. clip ids for each lexical element
+               % 2. binary matrix
+               % ---
+               if ischar(lexicon)
+                   
+                   if strcmp(lexicon, 'clips_by_annot')
+                       
+                       % ---
+                       %  preset the lexicon and hash ids
+                       % ---
+                       db.lexicon = unique(lower(annots));
+                       
+                       if iscell(ids) 
+                           db.annots_oid = unique([ids{:}]);
+                       else
+                           db.annots_oid = unique(ids);
+                       end
+                       
+                       db.annotsdb = sparse(numel(db.annots_oid),...
+                           numel( db.lexicon));
+                       
+%                      for all annotations
+                       for i = 1:numel(annots)
+                           
+%                          for all ids in set
+                           % is this a cell or just a single index<
+                           if iscell(ids)
+                               for j = 1:numel(ids{i})
+
+                                   db.add_pair(ids{i}(j), annots{i});
+                               end
+                           else
+                               % single ndex case
+                               db.add_pair(ids(i), annots{i});
+                           end
+                       end
+
+                   elseif strcmp(lexicon, 'annots_by_clip')
+                       
+                   end
+                       % this is the binary case
+               else
+
+                   db.lexicon = lexicon;
+                   db.annotsdb = sparse(0,0);
+                   if nargin >= 2
+
+                       db.annotsdb = sparse(annots);
+                       db.annots_oid = ids;
+                   else
+                       db.annotsdb = sparse(0, numel(db.lexicon));
+                   end
+               end
+           end
+       end
+       
+       % ---
+       % retrieve annot-substructure for given clip ids, 
+       % collecting std = [or = all] ,[and = common]
+       % annots for these
+       % ---
+       function new_db = subset(db, ownerids, mode)   
+       % new_db = subset(db, ownerids, {'and', ['or']}) 
+       
+           if nargin < 3 
+               mode = 'or';
+           end
+       
+           % ---
+           % create new DB
+           % we make sure the tag id index keeps 
+           % the same for subsets by copying the whole 
+           % lexicon
+           % ---
+           new_db = AnnotDB(db.lexicon);
+           
+           switch lower(mode)
+               case 'and'
+
+               % ---
+               % TODO: implement this and 
+               % improve speed below
+               % ---
+               case 'or'
+                   
+                   % successively fill with given annots
+                   for i = 1:numel(ownerids)
+
+                       % ---
+                       % we retrieve annots for each clip
+                       % and add them to the new database
+                       % ---
+                       [annot, score] = annots(db, ownerids(i));
+                       for j = 1:numel(annot)
+
+                           new_db.add_pair(ownerids(i), annot{j}, score(j));
+                       end   
+                   end
+              otherwise
+                   error 'illegal owner id combination mode. possibly forgot brackets';
+           end       
+       end
+       
+        % retrieve annot-substructure for complement
+        % of given clip ids
+       function [new_db] = exclude(db, ownerids)
+           
+           % get complement of clip ids
+           ownerids = setdiff(db.annots_oid, ownerids);
+           
+           new_db = subset(db, ownerids);
+       end
+       
+       % ---
+       % retrieve clip by annot.
+       % if multiple annots are given, the clips 
+       % containing all of them (logical and) are 
+       % returned
+       % ---
+       function oids = owner(db, annotstr, mode)       
+           
+           if nargin < 3 
+               mode = 'and';
+           end
+           
+           if ~iscell(annotstr)
+               annotstr = {annotstr};
+           end
+           
+           annotid = [];
+           for i = 1:numel(annotstr)
+               
+                annotid = [annotid strcellfind(db.lexicon, annotstr{i})];
+           end
+           
+           oids = owner_for_annotid(db, annotid, mode);
+       end
+       
+      % retrieve owner ids by clip
+      function ownerids = owner_for_annotid(db, annotid, mode)
+      % ownerids = ownerids_for_annotid(db, annotid, {['and'], 'or'})     
+          
+           if isempty(annotid)
+               ownerids = [];
+               return
+           end
+           if nargin < 3 
+               mode = 'and';
+           end
+ 
+           switch lower(mode)
+               case 'or'
+                   % search for all appearing owners
+                   candidates = sum(db.annotsdb(:, annotid), 2) > 0;
+                   
+               case 'and'
+                   % search for the common owners
+                   candidates = sum(db.annotsdb(:, annotid), 2) == ...
+                       numel(annotid);
+               otherwise
+                   error 'illegal tag combination mode';
+           end
+
+           
+           % get positions in database
+           pos = find(candidates);
+           
+           % return owner ids
+           ownerids = db.annots_oid(pos);
+       end
+       
+       % retrieve annotid by clip
+       function [aid, score] = annotids_for_owner(db, ownerid, mode)
+           
+           % single query case
+           if numel(ownerid) == 1
+               
+               pos = owner_pos(db, ownerid);
+
+               % get positions in database
+               aid = find(db.annotsdb(pos, :) > 0);
+
+               score = db.annotsdb(pos, aid);
+
+
+              % sort ids for output
+               if ~db.binary
+
+                  [score, idx] = sort(score, 'descend');
+                  aid = aid(idx);
+               end
+           else
+               if nargin < 3 
+                   mode = 'or';
+               end
+               
+               % ---
+               % the query contained multiple ids
+               %
+               % we dont return the single results but 
+               % the statistics for this subset of clips
+               % ---
+               new_db = db.subset(ownerid, mode);
+               [null, score, aid] = new_db.stats_count();
+               
+               % cut off at score > 0 to abandon unused tags
+               u = find(score > 0,1,'last');
+               score = score(1:u);
+               aid = aid(1:u);
+           end
+       end
+        
+      % retrieve annotation by clip
+       function [out, score, aid] = annots(db, ownerid)
+           
+           [aid, score] = db.annotids_for_owner( ownerid);
+           
+           out = db.get_annot_name(aid);
+       end
+       
+      
+       % retrieve annot name given a annot id
+       function out = get_annot_name(db, annotid)
+           
+           out = {};
+           for i = 1:numel(annotid)
+               
+               out{i} = db.lexicon{annotid(i)};
+           end
+       end
+       
+       % return annotation id for annotation string
+       function aid = get_annot_id(db, annotstr)
+           
+           if ~iscell(annotstr)
+               
+               % expensive search within annot list
+               aid = strcellfind(db.lexicon, annotstr);
+           else
+               
+               % search seperately for each annot 
+               for i = 1:numel(annotstr)
+                   aid(i) = strcellfind(db.lexicon, annotstr{i});
+               end
+           end
+       end 
+       
+       % ---
+       % return statistics on saved annotations.
+       % = returns the sum of the scores and 
+       % sortec lexicon
+       % ---
+       function [labels, score, annotids] = stats(db)
+           
+           % out = zeros(1, size(db.annotsdb,2));
+           score = full(sum(db.annotsdb, 1));
+           [score, annotids] = sort(score,'descend');
+           
+           % prepare labels
+           labels = db.lexicon(annotids);
+       end
+       
+       % ---
+       % return statistics on saved annotations.
+       % = returns the number of annotations and 
+       % sortec lexicon
+       % ---
+       function [labels, score, annotids] = stats_count(db)
+           
+           % out = zeros(1, size(db.annotsdb,2));
+           score = full(sum(db.annotsdb > 0, 1));
+           [score, annotids] = sort(score,'descend');
+           
+           % prepare labels
+           labels = db.lexicon(annotids);
+       end
+       
+        % this is a stub for a tag cloud-like output
+       function [out] = annots_cloud(db, ownerid)
+           
+       % ---
+       % TODO: actually output tag-cloud
+       % this output is aimed at input into a web interface
+       % we successfully used http://www.wordle.net/
+       % ---
+       
+       if nargin > 1
+           db2 = db.subset(ownerid);
+       else
+           db2 = db;
+       end
+
+           [labels, score, annotids] = stats(db2);
+           
+           % ---
+           % Note: for performance issues we compress this data
+           % to a maximum value of 1001
+           % ---
+           score = ceil((score./max(score))*100);
+           
+           out = '';
+           for i = 1:numel(annotids)
+               
+               % repeat the tag according to score
+               annot = strrep(labels{i},' ','-');
+               for j = 1:score(i)
+                out = sprintf('%s; %s',annot, out);
+               end
+           end
+       end
+       
+       
+       function out = size(db)
+           % returns the size of this db
+           
+           out = numel(db.lexicon);
+       end
+
+       function add_pair(db, ownerid, annot, score)
+%            add_pair(db, owner, annot) adds an annot and owner and can
+%            increase the lexicon size
+
+            if nargin < 4 
+                score = 1;
+            end
+            
+            aid = strcellfind(db.lexicon, annot);     
+            
+            % create new position for annotation if neccesary
+            if isempty(aid) 
+                
+                aid = numel(db.lexicon) + 1;
+                
+                % add to lexicon
+                db.lexicon = {db.lexicon{:}, annot};
+                
+                % enhance annotation matrix
+                db.annotsdb = [db.annotsdb, ...
+                    sparse(size(db.annotsdb,1), 1)];
+            end
+            
+            
+            % create new position for clip if neccesary
+            pos = owner_pos(db, ownerid);
+            if isempty(pos) 
+                
+                pos = numel(db.annots_oid) +1;
+                
+                % add to oid
+                db.annots_oid = [db.annots_oid, ownerid];
+                
+                % enhance annotation matrix
+                db.annotsdb = [db.annotsdb; ...
+                    sparse(1, size(db.annotsdb, 2))];
+            end
+            
+            % save data to database
+            db.annotsdb(pos, aid) = score;
+       end 
+       
+   end
+   
+   
+   methods(Hidden)
+       
+       function pos = owner_pos(db, ownerid)
+
+        % returns database position for owner id 
+            pos = find(db.annots_oid == ownerid);
+       end
+   end
+   
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/AudioFeatureRAW.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,158 @@
+% --
+% This class loads and hanles the aufdio features included with the MTT
+% Library
+% --- 
+
+
+classdef AudioFeatureRAW < MTTAudioFeature & handle
+    
+    
+    properties(Constant = true)
+        
+    end
+    
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        my_params = struct([]);
+        
+    end
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = AudioFeatureRAW(varargin)
+
+           feature = feature@MTTAudioFeature(varargin{:});
+
+        end
+        
+        function [a1, a2, a3] = visualise(feature)
+        % ---
+        % plots the different data types collected in this feature
+        % ---
+            for i = 1:numel(feature)
+                clip = feature(i).data.info.owner;
+                
+                % ---
+                % labels for chroma data
+                % ---
+                chroma_labels = {'c', 'c#', 'd','d#', 'e', 'f','f#', 'g','g#', 'a','a#', 'b'};
+                mode_labels = {'minor', 'major'};
+                
+                % hange labels to reflect detected mode
+                chroma_labels{feature(i).data.key + 1} = ...
+                    sprintf('(%s) %s',mode_labels{feature(i).data.mode + 1}, chroma_labels{feature(i).data.key + 1});
+                
+              
+                secs = [feature(i).data.sections_start; feature(i).data.sections_duration];
+                
+                h = figure;
+                
+                % number of subplots
+                n = 3;
+                    
+                % ---
+                % chroma feature display
+                % ---
+                subplot(n,1,1);
+                
+                % get segment times and fix for same lengths for all plots
+                % ---
+                % NOTE: Last segment will appear longer
+                % ---
+                segments = [feature(i).data.segments_start];
+                segments(end) = feature(i).data.duration;
+                
+                % display chroma vectors
+                uimagesc(segments, 0:11, [feature(i).data.segments_pitches]);
+                
+                set(gca,'YTick',[0:11], 'YTickLabel', chroma_labels);
+                
+                axis xy
+                colormap(hot)
+                %colorbar;
+                ylabel('chroma class');
+                title(sprintf('clip %d: %s by %s, chromagram', ...
+                    clip.id, clip.title(),clip.artist()));
+                
+                % added sections
+                axis([0 feature(i).data.duration -1 11.5]);
+                hl = line([secs(1,:); sum(secs,1)],ones(2, size(secs,2)) * -0.8);
+                set(hl,'LineWidth',6);
+
+                a1 = gca;
+
+                % ---
+                % mfcc feature display
+                %
+                % NOTE: the first position of timbre is reduced in energy,
+                % as this seems to introduce some corruption in lots of data
+                % ---
+                timbre = feature(i).data.segments_timbre(:,1);
+                timbre = timbre/ max(max(abs(timbre))) * ...
+                    mean( mean( abs( feature(i).data.segments_timbre(:,2:min(end,5)))));
+                
+                subplot(n,1,2);
+                uimagesc(segments, 0:11, [timbre feature(i).data.segments_timbre(:,2:end)]);
+
+                axis xy
+                %colorbar;
+                xlabel('time[s]');
+                ylabel('mfcc coeff');
+                title(sprintf('mfcc timbre features'));
+                   
+                a2 = gca;
+                
+                % ---
+                % beats and sections
+                % ---
+
+                subplot(n,1,3);
+                axis([0 feature(i).data.duration -0.6 1.2]);
+
+                hl = line([0 feature(i).data.duration],[0 0]);
+                set(hl, 'Color','g');
+                
+                a3 = gca;
+                
+                if ~isfield(feature.data,'bars');
+                    return;
+                end
+                
+                beats = feature.data.beats;
+                bars = feature.data.bars;
+                tatums = feature.data.tatums;
+                % tatums
+                hl = line([tatums(1,:); tatums(1,:)],[ones(1, size(tatums,2)) * -0.2; max(-0.1,tatums(2,:))]);
+                set(hl,'LineWidth',1);
+                set(hl, 'Color','k');
+                
+                % beats
+                hl = line([beats(1,:); beats(1,:)],[ones(1, size(beats,2)) * -0.4; max(-0.1,beats(2,:))]);
+                set(hl,'LineWidth',2);
+                set(hl, 'Color','b');
+
+                % bars
+                hl = line([bars(1,:); bars(1,:)],[ones(1, size(bars,2)) * -0.5; max(-0.1,bars(2,:))]);
+                set(hl,'LineWidth',4);
+                set(hl, 'Color','r');
+
+                % sections
+                hl = line([secs(1,:); sum(secs,1)],ones(2, size(secs,2)) * -0.5);
+                set(hl,'LineWidth',6);
+                
+                ylabel('confidence');                
+                title(sprintf('rhythmic features @%3.1f BPM, %d/4 meter',...
+                    feature(i).data.tempo, feature(i).data.timeSignature));
+                
+            end
+        end
+    end
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/Clip.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,312 @@
+% ---
+% This is the class for magnatagatune clips
+% ---
+
+classdef Clip < handle
+    
+    % ---
+    % here come the internal clip properties.
+    % the database is stored as a global variable
+    % ---
+    properties (SetAccess = private)
+
+       % magnatagatune clip id
+       my_id;
+    end
+    
+    % do not save whole db into mat file
+    properties (Hidden, Transient)
+        
+        my_db;
+    end
+    
+    properties (Hidden)
+
+        my_dbpos;
+    end
+    
+    % ---
+    % here come the clip functions.
+    % ---
+    methods
+        
+        % ---
+        % simple constructor
+        % ---
+        function clip = Clip(varargin)
+            
+            % usual or empty constructor ?
+            if (nargin > 0) && isnumeric(varargin{1})
+                id = varargin{1};
+                db_type = varargin{2};
+                
+                % ---
+                % check for magnatagatunedatabase 
+                % and load it if not present
+                % ---
+                evalc(sprintf('global %s;',db_type));
+                evalc(sprintf('thisdb = %s;',db_type));
+                
+                if ~isempty(thisdb)% exist('clip_info_proper')
+                    clip.my_db = thisdb;
+                else
+
+                    error 'db not found';
+                    % dbload;
+                end
+ 
+                % ---
+                % recursive call for creating multiple clips
+                % ---
+                if numel(id) > 1
+                    
+                    % multi-id case
+                    
+                    % ---
+                    % @todo: use class names as db names
+                    % ---
+                    if strcmp(db_type,'db_MTTClip')
+                        clip = MTTClip();
+                        for i = 1:numel(id)
+                            clip(i) = MTTClip(id(i));
+                        end
+                    elseif strcmp(db_type,'db_MSDClip')
+                        clip = MSDClip();
+                        for i = 1:numel(id)
+                            clip(i) = MSDClip(id(i));
+                        end
+                    elseif strcmp(db_type,'db_CASIMIRClip')
+                        clip = CASIMIRClip();
+                        for i = 1:numel(id)
+                            clip(i) = CASIMIRClip(id(i));
+                        end
+                    end
+                    
+                    
+                elseif ~isempty(id)
+                    % ---
+                    % actual constructor
+                    % ---
+                    clip.my_id = id;
+                    clip.my_dbpos = clip.dbpos();
+
+                    if isempty(clip.my_dbpos)
+                        error ('Clip %d not found in DB', full(id))
+                    end
+                end
+            else
+                
+                % ---
+                % TODO: deal with empty constructor
+                % ---
+            end
+        end
+        
+        % ---
+        % member functions
+        % ---
+        
+        % returns the id (function neccessary for 
+        % multi-clip environments)
+        function out = id(this)
+            
+            out = [this.my_id];
+        end
+        
+        function out = comparison_id(this)
+            
+            out = [this(1).my_db.comparison_ids(this)];
+        end
+        
+        function out = title(this)
+        % returns name strings for given genre position ids
+
+            out = this.my_db.clip_info_proper{this.my_dbpos,3};
+        end
+        
+        function out = album(this)
+        % returns name strings for given genre position ids
+        
+            out = this.my_db.clip_info_proper{this.my_dbpos,5};
+        end
+        
+        function out = artist(this)
+        % returns name strings for given genre position ids
+
+            out = this(1).my_db.artistdb.annots(this.id);
+            out = out{1};
+        end
+        
+        function out = artist_id(this)
+        % returns name strings for given genre position ids
+
+            out = this(1).my_db.artistdb.annotids_for_owner(this.id);
+        end
+        
+        function my_tag_ids = tag_ids(this)
+        % returns clip tag posids for given clip id 
+                
+            my_tag_ids = this.my_db.tagdb.annotids_for_owner(this.id);
+        end
+        
+        function out = tags(this)
+        % returns name strings for given genre position ids
+
+            out = this.my_db.tagdb.annots(this.id);
+        end
+        
+        
+        % this is for ocompability with 
+        function out = raw_annots(this)
+            
+            out  = this.my_db.clip_info_proper(this.my_dbpos,:);
+        end
+        
+        function [out] = isrc(this)
+        % returns name strings for given genre position ids
+            out = this(1).my_db.clip_info_proper{this.my_dbpos,11};
+        end  
+        
+        function [out] = artist_mbid(this)
+        % returns name strings for given genre position ids
+            out = this(1).my_db.clip_info_proper{this.my_dbpos,12};
+        end  
+        
+        function [out] = mbtags(this)
+        % returns nmusicbrainz tags for the artist related to this clip
+        
+        [out, score] = this(1).my_db.mbtagdb.annots(this(1).artist_id());
+        end  
+        
+         % @todo: generalise mg tags
+        function [out, score] = mbtag_ids(this)
+            
+            [out, score] = this(1).my_db.mbtagdb.annotids_for_owner(this(1).artist_id());
+        end
+
+
+        function len = play(clips, plen)
+        % len = play(clips)
+        %
+        % plays magnatune clip given by clip id, and
+        % returns full playback length
+        
+        if nargin <2 
+            plen = 0; %seconds play
+        end
+        
+        len = 0;
+            for i = 1:numel(clips)
+                
+                % get sample rate
+                [null,sr] = mp3read(clips(i).mp3file_full(),0);
+                
+                if plen > 0
+                    
+                    % read mp3 file
+                    [src,sr,NBITS,OPTS] = mp3read(clips(i).mp3file_full(), plen*sr);
+                else
+                    % read full mp3 file
+                    [src,sr,NBITS,OPTS] = mp3read(clips(i).mp3file_full());
+                end
+                
+                % ---
+                % NOTE: sound() seems to pause the  system when trying to
+                % play a clip while still playing another one
+                % ---
+                sound(src,sr);
+                
+                fprintf('\n--- now playing ---\n');
+                clips(i).print();
+                
+                % add clip lengths
+                len = len + length(src) / sr;
+            end
+        end
+        
+        function skip(clips)
+        % skips through given clips
+            
+            clips.play(5);
+        end
+        
+        function out = dbpos(this)
+            % returns matrix position for given clip id
+
+            out = find(this.my_db.annots_ids == this.id, 1 ,'first');
+        end
+          
+        % ---
+        % Generic Features
+        % ---
+        function feature = features(clip, type, varargin)
+        % feature = features(clip, type, varargin)
+        %
+        % returns the features of type "type" for given clips and
+        % parameters
+        % e.g.    feature = clip.features('MTTAudioFeatureRAW')
+        
+            db_name = MTTAudioFeatureDBgen.db_name(type);
+            
+            % global database
+            eval( sprintf( 'global %s;', db_name));
+            
+            % create database if neccesary
+            if eval(sprintf('isempty(%s);', db_name));
+                
+                eval(sprintf('%s = MTTAudioFeatureDBgen(''%s'');', db_name, type));
+            end
+            
+            % retrieve features from db
+            feature = eval(sprintf('%s.get_features(clip, varargin{:});', db_name));
+        end
+        
+        % ---
+        % Audio Features Section
+        % ---
+        function features = audio_features_raw(clip)
+            % get the features from the global database
+            
+            features = clip.features('MTTAudioFeatureRAW');
+        end
+        
+        function features = audio_features_basicsm(clip, varargin)
+            % get the features from the global database
+
+            features = clip.features('MTTAudioFeatureBasicSm', varargin{:});
+        end
+        
+        function features = genre_features_basic(clip, varargin)
+            % get the features from the global database
+            
+            features = clip.features('MTTTagFeatureGenreBasic', varargin{:});
+               
+        end
+        
+        function features = mixed_features_genrebasicsm(clip, varargin)
+            % get the features from the global database
+            
+            features = clip.features('MTTMixedFeatureGenreBasicSm', varargin{:});
+        end
+        
+         function features = mixed_features_genrebasicsm_pca(clip, varargin)
+            % get the features from the global database
+            
+            features = clip.features('MTTMixedFeatureGenreBasicSmPCA', varargin{:});
+        end
+        
+        function features = random_features(clip, varargin)
+            % get the features from the global database
+
+            features = clip.features('MTTRandomFeature', varargin{:});
+        end
+        
+    end
+    
+    % ---
+    % static methods
+    % ---
+    methods(Static = true)
+        
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/ClipComparedGraph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+% ---
+% class ClipComparedGraph
+% Directed graph representing comparative clip similarities.
+%
+% each node represents a clip
+% an edge a -> b is present if clipas a and b cooccur 
+% in a comparison triplet
+% 
+% ---
+
+classdef ClipComparedGraph < Graph
+
+% ---
+%  the methods
+% ---
+methods
+
+    
+% constructor of the graph
+function G = ClipComparedGraph(comparison, comparison_ids)
+    
+    if nargin == 2
+    % ---
+    % handle automatic or manual input
+    % ---
+    for i = 1:size(comparison,1)
+
+        % get clips and votes
+        clips = comparison_ids(comparison(i,1:3));
+    
+        % edges
+        G.add_edge(clips(1), clips(2), 1);
+        G.add_edge(clips(1), clips(3), 1);
+        G.add_edge(clips(2), clips(3), 1);
+%         
+%         % symmectric edges
+%         G.add_edge(clips(2), clips(1), 1);
+%         G.add_edge(clips(3), clips(1), 1);
+%         G.add_edge(clips(3), clips(2), 1);
+    end
+    
+    elseif nargin == 1
+        
+        % ---
+        % Add the input graph to the empty one
+        % ---
+        G.add_graph(comparison);
+        
+    end
+    
+% end constructor function
+end
+
+end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/ClipPairGraph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,499 @@
+% ---
+% mother class for the directed clip graph classes
+% contains general purpose and graph-theorethical
+% functions
+% ---
+% we consider the similarity between clips
+% as symmetric, thus sim(a,b) = sim(b,a)
+% this makes the set of nodes much smaller
+% ---
+
+% ---
+% TODO: change structure to 
+% avoid using Vclips, mapping clip ids
+% into a node number 00id1..00id2,
+% 
+% Enables full integration into Digraph / Graph class
+% ---
+
+classdef ClipPairGraph < DiGraph
+    
+    properties(Hidden)
+        
+        max_clipid = 10^6;
+        vid_map;
+        vid_last = 0;
+    end
+    
+methods
+
+% ---
+% Constructor
+% ---
+function G = ClipPairGraph(comparison)
+    
+    if nargin == 0
+        
+    G.vid_map = containers.Map('KeyType', 'double', 'ValueType', 'double');
+
+    elseif nargin == 1
+        
+        G = ClipPairGraph();
+
+        % ---
+        % Add the input graph to the empty one
+        % ---
+        G.add_graph(comparison);
+        
+        clas = cat(1, class(comparison), superclasses(comparison));
+        if strcellfind(clas, 'ClipPairGraph')
+            
+            G.vid_map = comparison.vid_map; 
+        end
+    end
+end
+
+% ---
+% Node id by clip
+% ---
+function Vid = node(G, a, b)
+
+    % did we get just one clip?
+    if nargin == 2
+        % ---
+        % TODO: this is terribly ineffective
+        % create all possible pairs and search if they exist
+        % ---
+        Vid = [];
+        for b = G.clips()';
+
+            sm = min([a b]);
+            bg = max([a b]);
+            hash = G.max_clipid *bg + sm;
+
+            % ---
+            % does this pair exist? if so: return Vid
+            % ---
+            if G.vid_map.isKey(hash)
+                Vid(end+1) = G.vid_map(hash);
+            end
+        end
+        
+        % Ah no, we got the 2 clips
+    else
+    
+        % ---
+        % hash function for clip pair
+        % ---
+        % sort clip ids
+        sm = min([a b]);
+        bg = max([a b]);
+
+        % ---
+        % get node code: 
+        % max_clipid * bg + sm
+        % ---
+        hash = G.max_clipid *bg + sm;
+
+        % ---
+        % table lookup
+        % ---
+        if G.vid_map.isKey(hash)
+
+            Vid = G.vid_map(hash);
+        else
+
+            % ---
+            % create new psition in hash table and 
+            % assign this ID to the node
+            % ---
+            G.vid_last = G.vid_last + 1;
+            Vid = G.vid_last;
+
+            G.vid_map(hash) = Vid;
+
+            % ---
+            % NOTE: this is intended for maybe swithcingto 
+            % cell descriptions in future.
+            % The node ids will be stored as well
+            % ---
+            G.Vlbl{Vid} = G.label(Vid);
+        end
+    end
+end
+
+% ---
+% Returns all clip ids referenced in the Graph
+% ---
+function [a] = clips(G)
+    
+    [sm, bg] = G.clipsN(G.nodes);
+    a = unique([sm; bg]);
+end
+
+
+% ---
+% Clip ids for Node
+% ---
+function [sm, bg] = clipsN(G, Vid)
+    
+    % get all clips referenced in this graph
+    if numel(Vid) > 1
+        sm = [];
+        bg = [];
+        for i = 1:numel(Vid);
+            [sm(end+1), bg(end+1)] = G.clipsN(Vid(i));
+        end
+    else
+    
+       % ---
+       % TODO: There must be a more efficient way to do this
+       % ---
+       % get all hash data
+
+       all_hashs = G.vid_map.values();
+       all_keys = G.vid_map.keys();
+       % ---
+       % search for this Node ID and return hash value
+       % ---
+       hash = all_keys{cell2mat(all_hashs) == Vid};
+
+       sm = mod(hash, G.max_clipid);
+       bg = div(hash, G.max_clipid);
+    end
+end
+
+
+% ---
+% Edge weight by clip id
+% ---
+function [weight, V1, V2] = edge(G, a, b, c)
+
+    if nargin == 4
+        V1 = add_node(G, a, b);
+        V2 = add_node(G, a, c);
+        
+    elseif nargin == 3
+        V1 = a;
+        V2 = b;
+    end
+
+    weight = edge@DiGraph(G, V1, V2);
+end
+
+function [weight, varargout] = edges(G,a,b)
+    
+    % all edges or from specified node ?
+    if nargin >= 2
+        
+        % is there a clip pair or node number input?
+        if nargin == 3
+            V1 = add_node(G, a, b);
+
+        elseif nargin == 2
+            V1 = a;
+        end
+        
+        [weight, V1, V2] = edges@DiGraph(G, V1);
+        
+    else
+        % ---
+        % ok, get ALL edges
+        % ---
+        [weight, V1, V2] = edges@DiGraph(G);
+    end
+
+    % how to represent the output
+    if nargout <= 3
+        varargout{1} = V1;
+        varargout{2} = V2;
+    else
+        % ---
+        % get all the clips from the edges
+        % ---
+        ao = zeros(1,numel(V1));
+        bo = zeros(1,numel(V1));
+        co = zeros(1,numel(V1));
+        for i =1:numel(V1)
+            [ao(i), bo(i), co(i)] = G.clipsE(V1(i), V2(i));
+        end
+        varargout{1} = ao;
+        varargout{2} = bo;
+        varargout{3} = co;
+    end
+end
+
+% ---
+% add an edge saying sim(a,b) > sim(a,c)
+% ---
+function add_edge(G, a, b, c, weight)
+    
+    if nargin == 5
+        V1 = add_node(G, a, b);
+        V2 = add_node(G, a, c);
+        
+    elseif nargin == 4
+        V1 = a;
+        V2 = b;
+        weight = c;
+    end
+    
+    % ---
+    % call superclass
+    % --- 
+    add_edge@DiGraph(G, V1, V2, weight);
+
+end
+
+function Vid = add_node(G, a, b)
+
+    if nargin == 3
+        Vid = G.node(a,b);
+    else
+        Vid = a;
+    end
+    
+    % ---
+    % call superclass
+    % ---
+    add_node@DiGraph(G, Vid);
+end
+
+% ---
+% the pairgraph variant of add_graph also updates the 
+% clip id hashmap
+% ----
+function add_graph(G, G2)
+    
+    % determine if symmetric  edges have to be added
+    clas = cat(1, class(G2), superclasses(G2));
+    if strcellfind(clas, 'Graph')
+        add_symm = 1;
+    else
+        add_symm = 0;
+    end
+    
+    % ---
+    % add all nodes and edges in G2
+    % ---
+    for V = G2.nodes();
+        
+        [a, count] = sscanf(G2.label(V),'%u:%u');
+        
+        if count == 2
+            b = a(2);
+            a = a(1);
+            
+            G.add_node(a,b);
+        else
+            G.add_node(V);
+        end
+    end
+    
+    % ---
+    % NOTE / TODO: 
+    % this LABEL inheritance is far too expensive when 
+    % creating many copiesof the same graph
+    % Its also unnessecary for lots of them 
+    % except for debugging :(. 
+    % ---
+    G.Vlbl = cell(1, numel(G2.V));
+    if G2.cardinality > 1
+        G.Vlbl(G.nodes()) = G2.label(G2.nodes());
+    else
+        G.Vlbl(G.nodes()) = {G2.label(G2.nodes())};
+    end
+    
+    % ---
+    % get all edges in G2
+    % CAVE: if we added the edges above using 
+    %       label clip indices, we have to address them 
+    %       using these below!
+    % ---
+    [val, V1, V2] = edges(G2);
+    
+    for i = 1:numel(val)
+        
+        % ---
+        % add edges to graph
+        % NOTE: we assume either all or no edges
+        % are labeled with clip indices
+        % ---
+        if count == 2
+            % ---
+            % ok, they were labeled above, 
+            % so index by clips.
+            %
+            % TODO:
+            % 1. get rid of this sscanf stuff and use add_edge for 
+            %  creating the nodes first, the only add single nodes
+            % 2. use cell labels globally instead of hashmap here
+            
+            [u, count] = sscanf(G2.label(V1(i)),'%u:%u');
+            [v, count] = sscanf(G2.label(V2(i)),'%u:%u');
+            
+            a = intersect(u,v);
+            b = setdiff(u,a);
+            c = setdiff(v,a);
+            
+            G.add_edge(a, b, c, val(i));
+            
+            if add_symm
+                % ---
+                % add symmetric edges to graph
+                % ---
+                G.add_edge(a, c, b, val(i));
+            end
+        
+        else
+            G.add_edge(V1(i), V2(i), val(i));
+            
+             if add_symm
+                % ---
+                % add symmetric edges to graph
+                % ---
+                G.add_edge(V2(i), V1(i), val(i));
+            end
+        
+        end
+        
+       
+    end
+
+end
+
+function remove_node(G, a, b)
+
+    if nargin == 3
+        Vid = G.node(a,b);
+    else
+        Vid = a;
+    end
+    
+    % ---
+    % call superclass
+    % ---
+    remove_node@DiGraph(G, Vid);
+end
+
+% ---
+% Clip ids for Edge
+% ---
+function [a,b,c] = clipsE(G, V1, V2)
+    
+   [c1, c2] = clipsN(G, V1);
+   [c3, c4] = clipsN(G, V2);
+   
+   % common clip
+   a = intersect([c1 c2],[c3 c4]);
+   
+   % nearer (similar) clip
+   b = setdiff([c1 c2],a);
+   
+   % far clip
+   c = setdiff([c3 c4],a);
+   
+   if isempty(a)
+       error 'clip similarity graph inconsistent'
+   end
+end
+
+% ---
+function out = label(G, Vid)
+    
+    if nargin == 1
+        out = cell(numel(G.V), 1);
+        Vid = 1:numel(G.V);
+    end
+    
+    for i = 1:numel(Vid)
+        if (numel(G.Vlbl) < Vid(i)) || isempty(G.Vlbl{Vid(i)})
+
+            [sm, bg] = G.clipsN(Vid(i));
+            
+            if numel(Vid) > 1
+                out{i} = sprintf('%d:%d', sm, bg);
+            else
+                out = sprintf('%d:%d', sm, bg);
+            end
+        else
+            if numel(Vid) > 1
+                out{i} = G.Vlbl{Vid(i)};
+            else
+                out = G.Vlbl{Vid(i)};
+            end
+        end
+    end   
+end
+
+% ---
+% determines if Edges in G2 are the same as in G
+% ---
+function out = le(a,b)
+    out = isSubgraph(a, b);
+end
+
+function [out] = isSubgraph(G, G2)
+     
+    [val, V1, V2] = G2.edges();
+    
+    i = 1;
+    while i <= numel(V1)
+        % ---
+        % Test if edge exists in other graph, 
+        % using clips as identifier
+        % ---
+        [a,b,c] = G2.clipsE(V1(i), V2(i));
+        
+        if G.edge(a,b,c) ~= val(i)
+           out = 0;
+           return,
+        end
+        i = i + 1;
+    end
+    out = 1;
+end
+
+
+function [Gout] = minus(a, b)
+    Gout = feval(class(a),a);
+    Gout.remove_graph(b);
+end
+
+function remove_graph(G, G2)
+    
+    % ---
+    % Get Edges in G2 and remove them
+    % ---
+    [~, V1, V2] = G2.edges();
+    for i = 1:numel(V1)
+        % ---
+        % Test if edge exists in other graph, 
+        % using clips as identifier
+        % ---
+        [a,b,c] = G2.clipsE(V1(i), V2(i));
+        
+        G.remove_edge(a,b,c);
+    end
+    
+    % ---
+    % Note : we only remove nodes with no 
+    % remaining incoming edges
+    % ---
+    V = G2.nodes();
+    for i = 1:numel(V)
+        
+        % ---
+        % get corresponding node in G via clips
+        % ---
+        [a,b] = G2.clipsN(V(i));
+        
+        Vid = node(G, a, b);
+        if G.degree(Vid) == 0
+
+            G.remove_node(Vid);
+        end
+    end 
+end
+end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/ClipSimGraph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,191 @@
+% ---
+% class ClipSimGraph
+% Directed graph representing comparative clip similarities.
+%
+% each node represents a pair of clips,
+% an edge (a,b) -> (a,c) is present if there is at least one
+% users judging clip a more similar to clip b than to clip c
+% 
+% The Edges thus represent the (are nearer to each othen than) 
+% expression
+% ---
+
+classdef ClipSimGraph < ClipPairGraph
+
+% ---
+%  the methods
+% ---
+methods
+
+    
+% constructor of the graph
+function G = ClipSimGraph(comparison, comparison_ids)
+    
+    % ---
+    % handle manual input
+    % ---
+    
+    if nargin == 1
+        % ---
+        % this uses an imput grpaph
+        % to create a new MD graph
+        % ---
+        
+        G = ClipSimGraph();
+
+        % ---
+        % Add the input graph to the empty one
+        % ---
+        G.add_graph(comparison);
+        
+        % ---
+        % TODO: Copy Clip Pair Information if neccessary
+        % this is by now a handle copy
+        % ---
+        clas = cat(1, class(comparison), superclasses(comparison));
+        if strcellfind(clas, 'ClipPairGraph')
+            
+            G.vid_map = comparison.vid_map;
+        end
+        
+    elseif nargin == 2
+    
+    % ---
+    % handle automatic or manual input
+    % ---
+    for i = 1:size(comparison,1)
+
+        % get clips and votes
+        clips = comparison_ids(comparison(i,1:3));
+        votes = comparison(i,4:6);
+    
+        % for each triplet position create an edge reflecting the 
+        % absolute and relative voting for this position
+
+        % ---
+        % NOTE: we index 0 - 2 to ease the mod
+        % calculaton for the remaining indices
+        % ---
+        for v = 0:2
+        
+            % ---
+            % has at least one user voted this clip out?
+            % If so, treat it as an outlier and determine score
+            % ---
+            if votes(v+1) > 0
+
+                a = mod(v+1, 3)+1;
+                b = mod(v+2, 3)+1;
+                c = v+1;
+                
+                % ---
+                % TODO: how to determine the weight?
+                % There are two options: relative in the triple
+                % and counting absolute hits.
+                % first we go for the relative ones.
+                % The other is implemented in ClipSimGraphMulti
+                % ---
+                
+                % ---
+                % add an edge saying sim(a,b) > sim(a,c)
+                % ---
+                G.add_edge(clips(a), clips(b), clips(c), votes(c) / (sum(votes))); 
+               
+                % ---
+                % every outlier vote results in two
+                % dissimilarity equations
+                % ---
+                
+                % edge 2
+                G.add_edge(clips(b), clips(a), clips(c), votes(c) / (sum(votes)));
+
+            end
+
+        end
+        end
+    end
+
+end
+    
+% end constructor function
+
+
+function [weights, a, b, c] = similarities(G)
+    % ---
+    % returns the weights of edges meaning sim(a,b) > sim(a,c)
+    % ---    
+    % get edge weights
+    [weights, a, b, c] = edges(G);
+end
+
+% ---
+% add an edge saying sim(a,b) > sim(a,c)
+% ---
+% function add_edge(G, a, b, c, weight)
+
+function remove_edge(G, a, b, c)
+
+    if nargin == 4
+        V1 = add_node(G, a, b);
+        V2 = add_node(G, a, c);
+        
+    elseif nargin == 3
+        V1 = a;
+        V2 = b;
+    end
+
+    % ---
+    % call superclass
+    % --- 
+    remove_edge@DiGraph(G, V1, V2);
+ end  
+ 
+function set_edge(G, a, b, c, weight)
+    if nargin == 5
+        V1 = add_node(G, a, b);
+        V2 = add_node(G, a, c);
+        
+    elseif nargin == 4
+        V1 = a;
+        V2 = b;
+        weight = c;
+    end
+
+    % ---
+    % call superclass
+    % --- 
+    set_edge@DiGraph(G, V1, V2, weight);
+end  
+
+% ---
+% simple mix of two sets of info about the same
+% nodes: mean.
+% NOTE: if there's more than two infos, the earlier
+% information will loose influence
+% ---
+function join_edge(G, a, b, c, weight)
+
+    if nargin == 5
+        V1 = G.node(a, b);
+        V2 = G.node(a, c);
+    elseif nargin == 4
+        V1 = a;
+        V2 = b;
+        weight = c;
+    end
+    
+    if  G.edge(V1, V2) ~= 0
+
+        % set Edge to weight
+        G.E(V1, V2) = (G.E(V1, V2) + weight) /2;
+
+        cprint(4, 'edge weight %d %d %d updated \n',a ,b , c) ;
+    else
+
+        error 'nodes not found';
+    end
+end       
+end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/ClipSimGraphMD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,265 @@
+% ---
+% class ClipSimGraphMD
+% Directed graph representing comparative clip similarities.
+% EACH pair of vertices has just ONE directed edge connecting them
+%
+% each node represents a pair of clips,
+% an edge (a,b) -> (a,c) is present if there is at least one
+% users judging clip a more similar to clip b than to clip c
+% 
+% The Edges thus represent the (are nearer to each othen than) 
+% expression
+% ---
+
+classdef ClipSimGraphMD < ClipSimGraph & handle
+
+    
+properties
+
+    % ---
+    % History of edge weights, is a nodes x nodes cell.
+    %
+    % E_hist(i,j) = m x 2 Matrix containing
+    % Pair of information for each set [votes votes_complete]
+    hE; % History of edge weights
+end
+
+% ---
+%  the methods
+% ---
+methods
+        
+% constructor of the graph
+function G = ClipSimGraphMD(comparison, comparison_ids)
+    
+    if nargin == 0
+        % ---
+        % empty constructor
+        % ---
+        
+    elseif nargin == 1
+        % todo: copy graph 
+        
+    elseif nargin == 2
+
+
+        % ---
+        % handle automatic or manual input
+        % ---
+        for i = 1:size(comparison,1)
+
+            % get clips and votes
+            clips = comparison_ids(comparison(i,1:3));
+            votes = comparison(i,4:6);
+
+            % for each triplet position create an edge reflecting the 
+            % absolute and relative voting for this position
+
+            % ---
+            % NOTE: we index 0 - 2 to ease the mod
+            % calculaton for the remaining indices
+            % ---
+            for v = 0:2
+
+                % ---
+                % has at least one user voted this clip out?
+                % If so, treat it as an outlier and determine score
+                % ---
+                if votes(v+1) > 0
+
+                    a = mod(v+1, 3)+1;
+                    b = mod(v+2, 3)+1;
+                    c = v+1;
+
+
+                    % ---
+                    % every outlier vote results in two
+                    % dissimilarity equations, favored by 
+                    % the people who voted for the outlier
+                    % ---
+
+                    % edge 1     
+                    add_edge(G, clips(a), clips(b), clips(c), votes(v+1), sum(votes));
+
+                    % edge 2
+                    add_edge(G, clips(b), clips(a), clips(c), votes(v+1), sum(votes));
+                end
+            end
+
+        end
+    end
+    
+% end constructor function
+end
+
+% adds a node stating clip a is more near %
+% to clip b then clip c
+function Vid = add_node(G, a, b)
+
+    Vid = add_node@ClipSimGraph(G, a, b);
+    
+    G.hE{Vid,Vid} = [];
+
+end
+
+function remove_node(G, a, b)
+	
+    if nargin == 3
+        
+        V1 = G.node(a, b);
+    elseif nargin == 2
+        
+        V1 = a;
+    end
+    
+    if ~isempty(Vid)
+
+        % ---
+        % look for edges connected to Vid
+        % and delete their histograms
+        % ---
+        G.hE(:,Vid) = [];
+        G.hE(Vid,:) = [];
+
+        % ---
+        % TODO: Efficiently Remove the actual node from the
+        % GRAPH
+        % ---
+        G.Vclips(Vid,:) = [];
+
+    end
+end
+
+% ---
+% add an edge saying sim(a,b) > sim(a,c)
+% ---
+function add_edge(G, a, b, c, votes, allvotes)
+    
+    V1 = add_node(G, a, b);
+    V2 = add_node(G, a, c);
+ 
+    % ---
+    % save new weight values into histogram
+    % ---
+    if isempty(G.hE(V1, V2))
+
+        G.hE{V1,V2} = [votes allvotes];
+    else
+        G.hE{V1,V2} = [G.hE{V1,V2}; votes allvotes];
+    end
+    
+    % ---
+    % update Edges
+    % ---
+    G.update_E(a, b, c);
+    
+end
+
+function remove_edge(G, a, b, c)
+
+    if nargin == 4
+        
+        V1 = G.node(a, b);
+        V2 = G.node(a, c);
+    elseif nargin == 3
+        
+        V1 = a;
+        V2 = b;
+    end
+    
+    if ~isempty(V1) && ~isempty(V2)
+
+        % set Edge to zero
+        G.hE{V1, V2} = [];
+    else
+
+        error 'nodes not found';
+    end
+end 
+
+% ---
+% updates the edge weight given 3 clip ids or 
+% two nodes, based on the edges history
+%
+% The specified (V1,V2) and the symmetric edges' (V2,V1) weights
+% are evaluated and the stronger edge will get 
+% the excessive weight while the loosing edge 
+% will be deleted
+% ---
+function update_E(G, a, b, c)
+%  update_E(G, a, b, c)
+%  update_E(G, V1, V2)
+    
+    % determine the type of input parameters
+    if nargin == 4
+        
+        V1 = G.node(a, b);
+        V2 = G.node(a, c);
+    elseif nargin == 3
+        
+        V1 = a;
+        V2 = b;
+    end
+    
+    % ---
+    % calculate weighted sum for specified edge
+    % and  for symmetric edge
+    % ---
+    thisw = unbal_edge_weight(G, V1, V2);
+    symmw = unbal_edge_weight(G, V2, V1);
+
+    % ---
+    % the two //competing// weights are now balanced
+    % ---
+    w = thisw - symmw;
+    
+    % ---
+    % set both edges
+    % ---
+    G.E(V1,V2) = max(w,0);
+    G.E(V2,V1) = -min(w,0);
+    
+%     if w >= 0
+%         G.E(V1,V2) = w;
+%         G.E(V2,V1) = 0;
+%     elseif w < 0
+%         G.E(V1,V2) = 0;
+%         G.E(V2,V1) = -w;
+%     end
+end
+
+end
+
+methods (Hidden)
+    
+    % ---
+    % This is the core function of this Graph. 
+    % it allows for the calculation of a single Edge,
+    % before it is balanced with its symmetrical counteredge
+    %
+    % ---
+    function thisw = unbal_edge_weight(G, V1, V2)
+        % ---
+        % trivial cases
+        % ---
+        if isempty(G.hE(V1, V2)) || isempty(G.hE{V1, V2})
+            thisw = 0;
+            return;
+        end
+        
+        % ---
+        % Evaluate the single historical entries 
+        % and sum up
+        % ---
+        thisw = sum(G.hE{V1, V2},1);
+        
+        % ---
+        % now divide the single votes by the number of
+        % votes totally made with the option to improve 
+        % this edge
+        % ---
+        thisw = thisw(1) /  thisw(2); 
+        
+    end
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/ClipSimGraphMulti.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,176 @@
+% ---
+% class ClipSimGraphMulti
+% Directed MultiGraph representing comparative clip similarities.
+% EACH pair of vertices has multiple directed edges connecting them
+%
+% each node represents a pair of clips,
+% an edge (a,b) -> (a,c) is present if there is at least one
+% users judging clip a more similar to clip b than to clip c
+% 
+% Each edge thus represent a single (are nearer to each othen than) 
+% expression
+% ---
+
+classdef ClipSimGraphMulti < ClipSimGraph & handle
+
+    
+properties
+
+end
+
+% ---
+%  the methods
+% ---
+methods
+        
+% constructor of the graph
+function G = ClipSimGraphMulti(comparison, comparison_ids)
+    
+    if nargin == 0
+        % ---
+        % empty constructor
+        % ---
+        
+    elseif nargin == 1
+        % todo: copy graph if same class
+        
+        % ---
+        % this uses an imput grpaph
+        % to create a new MD graph
+        % ---
+        
+        G = ClipSimGraphMulti();
+
+        % ---
+        % Add the input graph to the empty one
+        % ---
+        G.add_graph(comparison);
+        
+    elseif nargin == 2
+
+
+        % ---
+        % handle automatic or manual input
+        % ---
+        for i = 1:size(comparison,1)
+
+            % get clips and votes
+            clips = comparison_ids(comparison(i,1:3));
+            votes = comparison(i,4:6);
+
+            % for each triplet position create an edge reflecting the 
+            % absolute and relative voting for this position
+
+            % ---
+            % NOTE: we index 0 - 2 to ease the mod
+            % calculaton for the remaining indices
+            % ---
+            for v = 0:2
+
+                % ---
+                % has at least one user voted this clip out?
+                % If so, treat it as an outlier and determine score
+                % ---
+                if votes(v+1) > 0
+
+                    a = mod(v+1, 3)+1;
+                    b = mod(v+2, 3)+1;
+                    c = v+1;
+
+
+                    % ---
+                    % every outlier vote results in two
+                    % dissimilarity equations, favored by 
+                    % the people who voted for the outlier
+                    % ---
+                    
+                    % edge 1     
+                    add_edge(G, clips(a), clips(b), clips(c), votes(v+1));
+
+                    % edge 2
+                    add_edge(G, clips(b), clips(a), clips(c), votes(v+1));
+                end
+            end
+
+        end
+    end
+    
+% end constructor function
+end
+
+function out = order(G)
+    
+   out = sum(G.V);
+end
+
+function out = num_edges_multi(G)
+    out = sum(sum(G.E));
+end
+
+function out = num_edges(G)
+    out = sum(sum(G.E ~= 0));
+end
+
+
+ % ---
+% NOTE: the weight explains the multiplicity of each
+% edge, to correctily describe this, 
+% we just count the votes
+% ---
+function join_edge(G, a, b, c, weight)
+
+    if nargin == 5
+        V1 = G.node(a, b);
+        V2 = G.node(a, c);
+    elseif nargin == 4
+        V1 = a;
+        V2 = b;
+        weight = c;
+    end
+    
+    if  G.edge(V1, V2) ~= 0
+
+        % set add number to Edge index
+        G.E(V1, V2) = (G.E(V1, V2) + weight);
+
+        cprint(3, 'edge weight %d %d %d updated \n',a ,b , c) ;
+    else
+
+        error 'nodes not found';
+    end
+end  
+
+% ---
+% This eliminates any order-2 cycles,
+% by substracting opposing edge counts
+% ---
+function remove_cycles_length2(G)
+    
+    G.E = max(0, G.E - G.E');
+end
+% ---
+% TODO: this back-and forth transform is a workaround 
+%  avoiding some costly other transformation which would
+%  happen during the direct digraph call
+% ---
+
+function [Gs, s, id] = connected_components(G, varargin)
+    % ---
+    % get all connected subgraphs:
+    % ---
+    G2 = DiGraph(G);
+    
+    [GsDiGraph, s, id]  = connected_components@DiGraph(G2, varargin{:});
+    
+    for i = 1:numel(GsDiGraph)
+        Gs(i) = ClipSimGraphMulti(GsDiGraph(i));
+    end 
+end
+
+
+end
+
+methods (Hidden)
+    
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/DistMeasureMahal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,202 @@
+% ---
+% The DistMeasureMahal class states a wrapper for 
+% special Mahalanobis similarity distance, and is compatible with the 
+% DistMeasure class
+% ---
+classdef DistMeasureMahal <  handle
+    
+    properties (SetAccess = private)
+        
+        mahalW;
+        
+        featX;
+        
+        ids;
+        ret_ids;
+        
+        % special delta parameters
+        deltafun;
+        deltafun_params;
+    end
+
+    methods
+        
+    % ---
+    % constructor
+    % ---
+    function m = DistMeasureMahal(clips, mahalW, featX, deltafun, deltafun_params)
+
+        if nargin < 4 && (size(featX, 2) ~= numel(clips) || size(featX, 1) ~= length(mahalW))
+            error 'wrong input format'
+        end
+
+        % fill index and generate matrix;
+        m.ids = [clips.id];
+
+        % reverse index
+        m.ret_ids = sparse(numel(m.ids),1);
+        m.ret_ids(m.ids) = 1:numel(m.ids);
+
+        % ---
+        % save mahal Matrix and lazy-copy features
+        % ---
+        if size(mahalW, 1) ~= size(mahalW, 2)
+            
+            m.mahalW = diag(mahalW);
+        else
+            
+            m.mahalW = mahalW;
+        end
+        
+        m.featX = featX;
+        
+        % ---
+        % special deltas
+        % ---
+        if nargin > 3
+            m.deltafun = deltafun;
+            m.deltafun_params = deltafun_params;
+        else 
+            m.deltafun = [];
+        end
+    end
+    
+
+    % ---
+    % this compability function returns the
+    % mahalanobis similarity of two clip indices
+    % --- 
+    function out = mat(m, idxa, idxb)
+    
+        if nargin == 1
+            idxa = 1:numel(m.ids);
+            idxb = 1:numel(m.ids);
+        end
+        
+        % ---
+        % account for different delta functions
+        % ---
+        if ~isempty(m.deltafun)
+            out = zeros(numel(idxa),numel(idxb));
+            for i=1:numel(idxa)
+                for j=1:numel(idxb)
+                    
+                    % calculate new distance
+                    tmp = m.deltafun(m.featX(:,idxa), m.featX(:,idxb),m.deltafun_params{:});
+                    out(i,j) = tmp' * m.mahalW * tmp;
+                end
+            end
+        else
+        % Standard Mahaldist is much faster to calculate
+            out = sqdist( m.featX(:,idxa), m.featX(:,idxb), m.mahalW);
+        end
+    end
+  
+    % ---
+    % returns the distance for the two input clips
+    % ---
+    function out = distance(m, clipa, clipb)
+        posa = m.get_clip_pos(clipa);
+        posb = m.get_clip_pos(clipb);
+        
+        out = m.mat(posa, posb);
+    end
+    
+    % ---
+    % returns a list of n (default = 10) clips most 
+    % similar to the  input
+    % ---
+    function [clips, dist] = get_nearest(m, clip, n)
+    % list = get_nearest(m, clip, n)
+    % 
+    % returns a list of n (default = 10) clips most 
+    % similar to the  input
+
+        % default number of results
+        if nargin == 2 
+
+            n = 10;
+        end
+        
+        % return all clips in case n = 0
+        if n == 0; n = numel(m.ids); end
+
+        % get clip positions
+        pos = m.get_clip_pos(clip);
+
+        % sort according to distance
+        [sc, idx] = sort( m.mat(pos, 1:numel(m.ids)), 'ascend');
+
+        % we only output relevant data
+        idx = idx(sc < inf);
+
+        if numel(idx) > 0
+            % create clips form best ids
+            clips = MTTClip( m.ids( idx(1:min(n, end))));
+            dist = m.mat(pos, idx(1:min(n, end)));
+
+        else
+            clips = [];
+            dist = [];
+        end
+    end
+    
+    
+
+    function [clips, dist] = present_nearest(m, clip, n)
+    % plays and shows the n best hits for a given clip    
+
+        % default number of results
+        if nargin == 2 
+
+            n = 3;
+        end
+
+        % get best list
+        [clips, dist] = get_nearest(m, clip, n);
+
+        clip.audio_features_basicsm.visualise();
+        for i = 1:numel(clips)
+            fprintf('\n\n\n- Rank %d, distance: %1.4f \n\n',i, dist(i));
+
+            clips(i).audio_features_basicsm.visualise();
+            h = gcf();
+            t = clips(i).play(20);
+            pause(t);
+            close(h);
+        end
+    end
+
+    function a = visualise(m)
+
+        figure;
+
+        % plot data
+
+        imagesc(m.mat);
+
+        a = gca;
+        set(a,'YTick',[1:numel(m.ids)], 'YTickLabel',m.ids);
+        set(a,'XTick',[1:numel(m.ids)], 'XTickLabel', m.ids);
+
+        axis xy;
+        colormap(hot);
+    end
+
+    % end methods
+    end
+    
+    % ---
+    % private methods
+    % ---
+    methods(Access = private)
+        
+    function out = get_clip_pos(m, clip)
+        % returns position in mat for given clip
+
+        out = m.ret_ids(clip.id);
+    end
+        
+    end
+    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/DistMeasureNNet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,179 @@
+% ---
+% The DistMeasureMahal class states a wrapper for 
+% special Mahalanobis similarity distance, and is compatible with the 
+% DistMeasure class
+% ---
+classdef DistMeasureNNet <  handle
+    
+    properties (SetAccess = private)
+        
+        net;
+        
+        featX;
+        
+        ids;
+        ret_ids;
+    end
+
+    methods
+        
+    % ---
+    % constructor
+    % ---
+    function m = DistMeasureNNet(clips, net, featX)
+
+        if size(featX, 2) ~= numel(clips) 
+            error 'wrong input format'
+        end
+
+        % fill index and generate matrix;
+        m.ids = [clips.id];
+
+        % reverse index
+        m.ret_ids = sparse(numel(m.ids),1);
+        m.ret_ids(m.ids) = 1:numel(m.ids);
+
+        % ---
+        % save neural net and lazy-copy features
+        % ---
+        m.net = net;
+        
+        m.featX = featX;
+        
+    end
+    
+
+    % ---
+    % this function returns the
+    % similarity of two clip indices
+    % --- 
+    function out = mat(m, idxa, idxb)
+    
+        if nargin == 1
+            idxa = 1:numel(m.ids);
+            idxb = 1:numel(m.ids);
+        end
+        
+        % cycle through all index combinations
+        out = zeros(numel(idxa), numel(idxb));
+        for i = 1:numel(idxa)
+           for j = 1:numel(idxb)
+               
+                % calculate distance vector
+                deltas = m.featX(:,idxa(i)) - m.featX(:,idxb(j));
+                
+                % return distance from net
+                out(i,j) = m.net.calcValue(deltas);
+           end
+        end
+        
+    end
+  
+    % ---
+    % returns the distance for the two input clips
+    % ---
+    function out = distance(m, clipa, clipb)
+        posa = m.get_clip_pos(clipa);
+        posb = m.get_clip_pos(clipb);
+        
+        out = m.mat(posa, posb);
+    end
+    
+    % ---
+    % returns a list of n (default = 10) clips most 
+    % similar to the  input
+    % ---
+    function [clips, dist] = get_nearest(m, clip, n)
+    % list = get_nearest(m, clip, n)
+    % 
+    % returns a list of n (default = 10) clips most 
+    % similar to the  input
+
+        % default number of results
+        if nargin == 2 
+
+            n = 10;
+        end
+        
+        % return all clips in case n = 0
+        if n == 0; n = numel(m.ids); end
+
+        % get clip positions
+        pos = m.get_clip_pos(clip);
+
+        % sort according to distance
+        [sc, idx] = sort( m.mat(pos, 1:numel(m.ids)), 'ascend');
+
+        % we only output relevant data
+        idx = idx(sc < inf);
+
+        if numel(idx) > 0
+            % create clips form best ids
+            clips = MTTClip( m.ids( idx(1:min(n, end))));
+            dist = m.mat(pos, idx(1:min(n, end)));
+
+        else
+            clips = [];
+            dist = [];
+        end
+    end
+    
+    
+
+    function [clips, dist] = present_nearest(m, clip, n)
+    % plays and shows the n best hits for a given clip    
+
+        % default number of results
+        if nargin == 2 
+
+            n = 3;
+        end
+
+        % get best list
+        [clips, dist] = get_nearest(m, clip, n);
+
+        clip.audio_features_basicsm.visualise();
+        for i = 1:numel(clips)
+            fprintf('\n\n\n- Rank %d, distance: %1.4f \n\n',i, dist(i));
+
+            clips(i).audio_features_basicsm.visualise();
+            h = gcf();
+            t = clips(i).play(20);
+            pause(t);
+            close(h);
+        end
+    end
+
+    function a = visualise(m)
+
+        figure;
+
+        % plot data
+
+        imagesc(m.mat);
+
+        a = gca;
+        set(a,'YTick',[1:numel(m.ids)], 'YTickLabel',m.ids);
+        set(a,'XTick',[1:numel(m.ids)], 'XTickLabel', m.ids);
+
+        axis xy;
+        colormap(hot);
+    end
+
+    % end methods
+    end
+    
+    % ---
+    % private methods
+    % ---
+    methods(Access = private)
+        
+    function out = get_clip_pos(m, clip)
+        % returns position in mat for given clip
+
+        out = m.ret_ids(clip.id);
+    end
+        
+    end
+    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/LFMTagsDB.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,129 @@
+% ---
+% This is the wrapper and loader class for Last.Fm db
+% and related data
+% ---
+
+classdef LFMTagsDB < handle
+    
+    properties
+       
+       % connects the last.fm artists to MTTartist ids
+       matching_artists;
+       
+       % saves the last fm tags for last.fm artist ids
+       tagdb;
+    end
+    
+    properties(Dependent)
+        
+       lexicon;
+    end
+    
+    
+    methods
+        function db = LFMTagsDB(artistdb)
+            
+            % load data
+            load last.fm.mat;
+
+            % ---
+            % NOTE: here, we save the corresponding magnatagatune
+            % artists. There make sure that the last.fm artists 
+            % are properly associated!
+            %
+            % finally, the central last.fm artist index will refer 
+            % to both the MTT artist database and the tags
+            % ----
+            
+            % get all the clips artists
+            artists = artistdb.lexicon;
+
+            % assign artists to Last.Fm artists
+            lexicon = [];
+            annots = [];
+            
+            justfmartists = fmartists(:,2);
+            for i = 1:numel(justfmartists)
+                
+                %get matching MTT for each Last.fm artist
+                pos = strcellfind(artists, justfmartists{i});
+                
+                % save its id 
+                if ~isempty(pos)
+                    associds(i) = artistdb.get_annot_id(artists{pos});
+                end
+            end
+            
+            % ---
+            % TODO: assert wheather if the fmartist id actually coincide
+            % justfmartists_ids = matching_artists.get_annotid(justfmartists);
+            % ---
+            
+            % call superclass constructor
+            db.tagdb = AnnotDB(fmartist_annots_names, ...
+                fmartist_annots, associds);
+            
+            % save the mathing artists
+            db.matching_artists = AnnotDB('clips_by_annot', ...
+                justfmartists, associds);
+            
+        end
+    end
+    
+    
+    methods
+        
+       % retrieve annot by clip
+       function [out, score, aid] = annots(db, clip)
+           
+           % ---
+           % NOTE: we retrieve the tags for the artist matching the clips
+           % one
+           % ---
+           
+           fma_id = db.matching_artists.annotids_for_owner(clip.artist_id());
+           
+           artist = clip.artist();
+           
+           if ~isempty(fma_id)
+               
+                [out, score, aid] = db.tagdb.annots(fma_id);
+           else
+               warning('Artist %s not found in Last.fm tags DB', artist);
+           end
+       end 
+       
+        function out = annotids_for_owner(db, clip)
+           
+           % ---
+           % NOTE: we retrieve the tags for the artist matching the clips
+           % one
+           % ---
+           
+           fma_id = db.matching_artists.annotids_for_owner(clip.artist_id());
+           
+           artist = clip.artist();
+           
+           if ~isempty(fma_id)
+               
+                out = db.tagdb.annotids_for_owner( fma_id );
+           else
+               warning('Artist %s not found in Last.fm tags DB', artist);
+           end
+        end 
+       
+        function out = get.lexicon(db)
+        % gives back all the tags
+            
+            out = db.tagdb.lexicon;
+        end
+    end
+    
+    methods(Static)
+        
+        
+    end
+end
+    
+    
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTAudioFeature.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,362 @@
+% ---
+% Mother of allMTT Audio Features
+% ---
+
+classdef MTTAudioFeature < handle
+    
+    % common properties
+    properties (Dependent)
+        
+        data;
+    end
+    
+    properties (Hidden)
+        
+        % ---
+        % TODO: get clip features by id and not by pos
+        % ---
+        
+        % position in db
+        db_pos;
+    end
+    
+    % do not save whole db into mat file
+    properties (Hidden, Transient)
+        
+        % database
+        my_db;
+    end
+    
+    
+    % common methods
+    methods 
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTAudioFeature(db, varargin)
+        % feature = MTTAudioFeatureBasicSm(db, varargin)
+     
+            if nargin >= 1
+                % save database handle;
+                feature.my_db = db;
+                
+                if nargin >= 2 
+                    if isnumeric(varargin{1})
+                        
+                        feature.db_pos = varargin{1};
+
+                        % ---
+                        % read parameters from data, which should not be
+                        % overwritten by the manual imputs ?
+                        % ---
+                        feature.set_params(feature.data.info.params);
+                        
+                        if numel(varargin) > 1
+                            warning('Specified parameters cant be applied with preexisting data');
+                        end
+
+                    else
+                        
+                        % set parameters for feature extraction
+                        feature.set_params(varargin{:});
+                    end
+                end
+            
+            else
+                % ---
+                % TODO: empty constructor
+                % ---
+            end
+        end
+        
+        % ---
+        % get and set methods, as the lazy matlab referencing
+        % is of no use when the feature has to be adjusted 
+        % during the progess of finalising
+        % ---
+        function data = get.data(feature)
+            
+            data = feature.my_db.featuredb(feature.db_pos);
+        end
+        
+        function set.data(feature, data)
+            
+             feature.my_db.featuredb(feature.db_pos) = data;
+        end
+        
+        function id = owner_id(feature)
+        % returns associated clip(s)
+        
+            for i = 1:numel(feature)
+                id(i) = feature(i).data.info.owner_id;
+            end
+        end
+        
+        function out = dim(feature)
+        % returns dimension of single feature vector
+        
+            out = feature(1).data.final.dim;
+        end
+        
+        function label = labels(features)
+           label = [];
+            if isfield(features(1).data.final, 'vector_info')
+                
+                % ---
+                % TODO: these labels should be stored at a central point,
+                % as this is a big waste of memory
+                % ---
+                label = features(1).data.final.vector_info.labels;
+            end 
+        end
+        
+        function out = vector(features)
+        % returns the feature vector(s) 
+        % if multiple features are input, the vectors are 
+        % concatenated to a single matrix of size 
+        %       (feature.dim x numel(features)
+        
+        % finalise features if not done yet
+        if ~isfield(features(1).data, 'final') || features(1).data.final.dim == 0
+            
+            features.finalise();
+        end
+        
+        %shortcut for empty features
+        if features(1).data.final.dim < 1
+            out =[];
+            return
+        end
+
+        out = zeros(features(1).data.final.dim, numel(features));
+        for i = 1:numel(features)
+
+            % finalise single feature vectors
+            if ~isfield(features(i).data, 'final') || features(i).data.final.dim == 0
+
+                features(i).finalise();
+            end
+
+            out(:,i) = features(i).data.final.vector;
+        end
+        end
+        
+        function out = common(feature)
+        % returns common feature values and params
+        
+           out = feature(1).my_db.commondb;
+        end
+        
+        % visualises all the finalised feature vectors at once
+        function a1 = visualise_vectors(features)
+            
+            % Collect source description data
+            ids = zeros( numel( features, 1));
+            
+            for i = 1: numel(features)
+                
+                ids(i) = features(i).owner_id();
+            end
+%             clips = MTTClip(ids);
+            
+            % get collective feature data
+            vec = features.vector();
+            
+            % feature description data
+            labels = features(1).labels;
+            
+            % plot data
+            h = figure;
+            imagesc(vec);
+            a1 = gca();
+            axis xy;
+            
+            set(a1,'XTick',1:numel(features), 'XTickLabel', ids);
+            
+            if ~isempty(labels)
+                set(a1,'YTick', [1:features(1).data.final.dim], 'YTickLabel', labels);
+            end
+            
+            xlabel('Clip ID');
+        end
+        
+        
+        % ---
+        % compares the params of the feature with the 
+        % provided param struct or feature
+        % ---
+        function out = eq_params(this, in)
+        % function out = eq_params(this, in)
+        % 
+        % resolves if a feature with params(in) would be
+        % the same as the  given feature
+            
+            type = this.my_db.featuredb_type;
+            
+            % ---
+            % construct dummy feature to get the params parsing right
+            % ---
+            if isstruct(in)
+                
+                % call constructor for this feature 
+                % type without valid db
+                in = feval(type, 0, in);
+            end
+            
+            % return whether the strings are equal or not 
+            out = strcmp(this.param_hash(), in.param_hash());
+        end
+        
+        function unused = set_params(this, varargin)
+        % copies the parameters within the struct to the featrue instance,
+        % or
+        % uses the process_options function to set the parameters.
+        % this is used for initialisation / constructor of features
+
+        unused = {};
+        if numel(this) > 1
+            
+            for i = 1:numel(this)
+                set_params(this(i), varargin{:});
+            end
+        else
+            
+            if isstruct(varargin{1})
+
+                % ok, just copy the information
+                % this.my_params = varargin{1};
+
+                % ---
+                % NOTE: this is a compability script
+                % set fields succesively to keep new / nonset field names
+                % we do not add parameters!!
+                % ---
+                fields = fieldnames(varargin{1});
+                for i = 1:numel(fields)
+                    
+                    % test whether the parameter is supported
+                    if isfield(this.my_params, fields{i})
+                        
+                        this.my_params.(fields{i}) = varargin{1}.(fields{i});
+                    end
+                end
+            else
+
+                % get all parameter lines
+                fields = fieldnames(this.my_params);
+
+                outputstring = '';
+                inputstring = '';
+
+                % we collect the string for all the fields
+                for i = 1:numel(fields)
+
+                    % generate left- hand side of param collection
+                    outputstring = sprintf('%s this.my_params.%s',...
+                        outputstring, fields{i});
+
+                    % right-hand-side
+                    inputstring = sprintf('%s ''%s'', this.my_params.%s',...
+                        inputstring, fields{i}, fields{i});
+
+                    if i < numel(fields)
+
+                        % put comma behind last argument
+                        inputstring = sprintf('%s,',inputstring);
+                        outputstring = sprintf('%s,',outputstring);
+                    end
+
+                end
+
+                % evaluate set
+                eval(sprintf('[%s, unused] = process_options(varargin, %s);', ...
+                    outputstring, inputstring));
+            end
+        end
+        end %fun
+        
+        % ---
+        % saveto function 
+        % ---
+        function saveto(features, matfile)
+        % saves (multiple features to a .mat file)
+        
+            % get clip ids
+            c = zeros(numel(features), 1);
+            for i = 1:numel(features)
+                c(i) = features(i).owner_id();
+            end
+        
+            % build clips
+            clips = MTTClip(c);
+            
+            % let db export the corresponding clips
+            features(1).my_db.export(matfile, clips);
+        end
+        
+        % ---
+        % destructor: do we really want to remove this 
+        % from the database? No, but 
+        % TODO: create marker for unused objects in db, and a cleanup
+        %  function
+        % ---
+        function delete(feature)
+            
+        end
+    end
+    
+    methods (Hidden = true)
+        
+        function assign(feature, db_pos)
+        % sets the feature data link
+        
+            feature.db_pos = db_pos;
+        end
+    end
+    
+    methods (Static)
+        
+        function ph = param_hash(type, varargin)
+        % loads the params for a feature type and adds the 
+        % given parameter values to it.
+        
+            % this function can be static or dynamic
+            if nargin > 1
+                % static case
+                dummy = feval(type,[], varargin{:});
+            else
+                % dynamic case
+                dummy = type;
+            end
+         ph = hash(xml_format(dummy.my_params),'MD5');
+        end
+        
+        function params = inherited_params(type, varargin)
+        % loads the params for a feature type and adds the 
+        % given parameter values to it.
+            
+            dummy = feval(type);
+            
+            params = dummy.my_params;
+            
+            % basic check if the input is correct
+            if mod(numel(varargin), 2) ~= 0
+                error('number of params does not match number of values');
+            end
+            
+            % add the fields to the struct
+            for i = 1:2:(numel(varargin)-1);
+                
+                params.(varargin{i}) = varargin{i+1};  
+            end
+        end
+    end
+end
+    
+    
+    
+    
+    
+    
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTAudioFeatureBasicSm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,832 @@
+classdef MTTAudioFeatureBasicSm < MTTAudioFeature & handle
+    % ---
+    % the MTTAudioFeatureBasicSm Class contains 
+    % a basic summary of chroma, mfcc and tempo features
+    % a few common chroma and mfcc vectors are concatenated 
+    % along with some clip-wide variance 
+    % a metric / rhythm fingerprint is added
+    %
+    % The usual workflow for these features consists of three steps
+    % 1. extract: extracts the basic single-file dependent features
+    % 2. define_global_transform: calculates the global feature
+    %       transformation parameters
+    % 3. finalise: applies the common transformations to a specific feature
+    % ---
+    
+    properties(Constant = true)
+        
+        % svn hook
+        my_revision = str2double(substr('$Rev$',  5, -1));
+    end
+
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        my_params = struct(...
+            'nchromas', 4, ... % 4 chroma vectors
+            'chroma_var', 0, ... % chroma variance 
+            'norm_chromas', 0, ... % not implemented, chromas already rel.
+            'min_kshift_chromas', 0.1, ... % treshold for key shift. set to 1 for no shift (0-1)
+            ...
+            'ntimbres', 4, ...
+            'timbre_var', 0, ... % timbre variance 
+            'norm_timbres', 1, ...
+            'clip_timbres', 0.85, ... % percentile of data which has to be inside 0-1 bounds
+            ...
+            'norm_weights',0, ... % globally norm weights for chroma times?
+            'norm_interval',1, ...
+            'max_iter',100, ...  % max iterations for chroma and timbre knn
+            ...
+            'nrhythms', 0, ... 
+            'nints', 11, ...
+            'energy_sr', 1000, ... % sample rate for energy curve
+            'norm_acorr', 1 ... % normalise arcorr locally-> shape imp... energy is normalised anyways
+            );
+    end
+    
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTAudioFeatureBasicSm(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+
+        end
+        % ---
+        % extract feature data from raw audio features
+        % ---
+        function data = extract(feature, clip)
+            % ---
+            % get Basic Summary audio features. this includes possible
+            % local normalisations
+            % ---
+            
+            global globalvars;
+            
+            % --- 
+            % get casimir child clip if available
+            % ---
+            if isa(clip, 'CASIMIRClip')
+                baseclip = clip.child_clip();
+            else
+                baseclip = clip;
+            end
+            if isa(baseclip, 'MTTClip') 
+                rawf = baseclip.audio_features_raw();
+            elseif isa(baseclip, 'MSDClip')
+                rawf = baseclip.features('MSDAudioFeatureRAW');
+            end
+            
+            % ---
+            % now extract the features
+            % first step: chroma clustering
+            % ---
+            weights = [rawf.data.segments_duration];
+            
+            % normalise weights
+            weights = weights / rawf.data.duration;
+            
+            chroma = [rawf.data.segments_pitches]';
+
+            % ---
+            % get most present chroma vectors.
+            % the weighted k-means should return the four most prominent
+            % chroma vectors and their weight
+            % ---
+            % display error values
+            
+            op = foptions();
+            op(1) = 0;
+            op(14) = feature.my_params.max_iter;
+            
+            % check for trivial case
+            if feature.my_params.nchromas == 0
+                
+                chromas = [];
+                cwght = []; 
+                
+            elseif feature.my_params.nchromas == 1
+                
+                chromas = mean(chroma, 1);
+                chroma_var = var(chroma, 0, 1);
+                cwght = 1;
+                
+            elseif numel(weights) > feature.my_params.nchromas
+                
+                % ---
+                % there may be few chromas, try kmeans several (20) times
+                % ---
+                cont = 0;
+                cwght = [];
+                while (numel(cwght) ~= feature.my_params.nchromas) && (cont < 20);
+                    
+                    [chromas, cwght, post] = ...
+                        weighted_kmeans(feature.my_params.nchromas, chroma, weights, op);
+                   
+                    cont = cont + 1;
+                end
+                
+                if (numel(cwght) ~= feature.my_params.nchromas)
+                    
+                    error('cannot find enough chroma centres');
+                end
+                
+                % ---
+                % Calculate the weighted variance of the chroma clusters
+                % ---
+                if feature.my_params.chroma_var >= 1
+                    
+                    chroma_var = zeros(size(chromas));
+                    for i = 1:size(chroma_var,1)
+
+                        % get distance from cluster centroid
+                        tmp_var = (chroma(post(:,i),:) - repmat(chromas(i,:), sum(post(:,i)),1)).^2;
+
+                        % add up the weighted differences and normalise by sum
+                        % of weights
+                        chroma_var(i,:) = (weights(post(:,i)) * tmp_var) ./...
+                            (sum(weights(post(:,i))));
+                    end
+                end
+            else
+                % ---
+                % odd case: less than nchroma data points.
+                % we repeat the mean vector at the end
+                % ---
+                chromas = [chroma; repmat(mean(chroma, 1),...
+                    feature.my_params.nchromas - numel(weights), 1 )];
+
+                cwght = weights;
+                cwght( end + 1:feature.my_params.nchromas ) = 0;
+                
+                % ---
+                % TODO: get a variance for odd case : 
+                % replicate the complete data variance? 
+                % NO: every vector is a clsuter => zero variance
+                % ---
+            end
+            
+            % trivial case: no variance requested
+            if ~exist('chroma_var','var')
+                 chroma_var = zeros(size(chromas));
+            end
+            
+            % sort by associated time
+            [cwght, idx] = sort(cwght, 'descend');
+            chromas = chromas(idx,:);
+            chroma_var = chroma_var(idx,:);
+            
+            % ---
+            % shift according to detected key, but only if 
+            % the confidencee is high enough
+            % ---
+            shift = 0;
+            if  rawf.data.keyConfidence > feature.my_params.min_kshift_chromas;
+                
+                shift = -rawf.data.key;
+                chromas = circshift(chromas, [0 shift]);
+                chroma_var = circshift(chroma_var, [0 shift]);
+            end
+            
+            % ---
+            % get mfcc centres:
+            % the same for mfccs
+            % ---
+            mfcc = [rawf.data.segments_timbre]';
+            if feature.my_params.ntimbres == 0
+                
+                mfccs = [];
+                mwght = [];
+                
+            elseif feature.my_params.ntimbres == 1
+                
+                mfccs = mean(mfcc, 1);
+                timbre_var = var(mfccs, 0, 1);
+                mwght = 1;
+            
+            elseif numel(weights) > feature.my_params.ntimbres
+                
+                % ---
+                % there may be few mfccs, try kmeans several times
+                % ---
+                cont = 0;
+                mwght = [];
+                while (numel(mwght) ~= feature.my_params.ntimbres) && (cont < 20);
+                    
+                    [mfccs, mwght, post] = ...
+                        weighted_kmeans(feature.my_params.ntimbres, mfcc, weights, op);
+                    cont = cont + 1;
+                end
+                
+                if (numel(mwght) ~= feature.my_params.ntimbres)
+                    
+                    error('cannot find enough mfcc centres');
+                end
+                
+                % ---
+                % Calculate the weighted variance of the chroma clusters
+                % ---
+                if feature.my_params.timbre_var >= 1
+                    
+                    timbre_var = zeros(size(mfccs));
+                    for i = 1:size(timbre_var,1)
+
+                        % get distance from cluster centroid
+                        tmp_var = (mfcc(post(:,i),:) - repmat(mfccs(i,:), sum(post(:,i)),1)).^2;
+
+                        % add up the weighted differences and normalise by sum
+                        % of weights
+                        timbre_var(i,:) = (weights(post(:,i)) * tmp_var) ./...
+                            (sum(weights(post(:,i))));
+                    end
+                end
+
+            else
+                % ---
+                % odd case: less than nchroma data points.
+                % we repeat the mean vector at the end
+                % ---
+                mfccs = [mfcc; repmat(mean(mfcc, 1),...
+                    feature.my_params.ntimbres - numel(weights), 1)];
+                mwght = weights;
+                mwght( end + 1:feature.my_params.ntimbres) = 0;
+            end
+            
+            % trivial case: no variance requested
+            if ~exist('timbre_var','var')
+                 timbre_var = zeros(size(mfccs));
+            end
+            
+            % sort by associated time
+            [mwght, idx] = sort(mwght, 'descend');
+            mfccs = mfccs(idx,:);
+            timbre_var = timbre_var(idx,:);
+            
+            % ---
+            % get beat features:
+            % the autocorrelation curve over n quarters of length
+            % 
+            %  alternative: how about using the n=8 quarters relative 
+            %  volumes from the start of a sure measure?
+            % ---
+            if feature.my_params.nrhythms >= 1
+                bars = rawf.data.bars;
+                beats = rawf.data.beats;
+                tatums = rawf.data.tatums;
+                % ---
+                % NOTE: the beat and tatum markers seem to have an offset :(
+                % ---
+                offset = 0.118; %seconds
+
+                [envelope, time] = energy_envelope(feature, clip);
+
+                % we offset the energy curve
+                time = time + offset;
+
+                % ---
+                % we try to start at the best beat confidence more 
+                % than sixteen eights from the end
+                % ---
+
+                if rawf.data.tempo > 0
+
+                    eightl = 30 / rawf.data.tempo;
+                else
+                    % ---
+                    % odd case: no rhythm data. assume 100 bpm
+                    % ---
+
+                    eightl = 0.3;
+                end
+
+                if isempty(beats)
+                    % ---
+                    % odd case: no beats detected. -> use best tatum
+                    % ---
+                    if ~isempty(tatums)
+
+                        beats = tatums;
+                    else
+
+                        % ok, just take the beginning
+                        beats = [0; 1];
+                    end
+                end
+
+                last_valid = find(beats(1,:) < ...
+                    (rawf.data.duration - feature.my_params.nints * eightl),1, 'last');
+
+                % find the best valid beat postition
+                [null, max_measure] = max( beats(2, 1:last_valid));
+                max_mtime = beats(1,max_measure);
+
+                % ---
+                % the correlation is calculated for the estimated eights lenght
+                % and for the 16th intervals, respectively.
+                % ---
+
+                % calculate the EIGHTS correlation for the following segment
+                [acorr8, eight_en, eightt] = ...
+                    beat_histogram(feature, max_mtime, eightl, envelope, time);
+
+                % calculate the SIXTEENTHS correlation for the following segment
+                [acorr16, six_en, sixt] = ...
+                    beat_histogram(feature, max_mtime, eightl / 2, envelope, time);
+                    
+                % ---
+                % save the various features 
+                % ---
+                % save rythm feature data
+            
+                data.rhythm.acorr8 = acorr8;
+                data.rhythm.acorr8_lag = eightt(1:end/2)-eightt(1);
+
+                data.rhythm.energy8 = eight_en(1:end/2);
+                data.rhythm.energy8_time = eightt(1:end/2);
+
+                % -- 
+                % the interval is normed locally up to a max value 
+                % associated to 30bpm
+                % ---
+                if feature.my_params.norm_interval
+
+                    % 1 second max value
+                    data.rhythm.interval8 = eightl / 2;
+                else
+                    data.rhythm.interval8 = eightl / 2;
+                end
+
+                if feature.my_params.nrhythms >= 2
+
+                    data.rhythm.acorr16 = acorr16;
+                    data.rhythm.acorr16_lag = data.rhythm.acorr8_lag / 2;
+
+                    data.rhythm.energy16 = six_en(1:end/2);
+                    data.rhythm.energy16_time = sixt(1:end/2);
+                    
+
+                    % save beat interval / tempo
+                    if feature.my_params.norm_interval
+
+                        % 1 second max value
+                        data.rhythm.interval16 = eightl / 2;
+                    else
+                        data.rhythm.interval16 = eightl / 2;
+                    end
+                    
+                end
+            else
+                
+%                  % save empty rythm struct
+%                  data.rhythm = struct([]);
+            end
+            
+             % chroma feature data
+            for i = 1:size(chromas,1)
+                data.chroma(i).means = chromas(i,:)';
+                data.chroma(i).means_weight = cwght(i);
+                data.chroma(i).vars = chroma_var(i,:)';
+                data.chroma(i).shift = shift;
+            end
+            
+            % mfcc feature data
+            for i = 1:size(mfccs,1)
+                data.timbre(i).means = mfccs(i,:)';
+                data.timbre(i).means_weight = mwght(i);
+                data.timbre(i).vars = timbre_var(i,:)';
+            end
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.vector_info = struct(); 
+            data.final.dim = 0;
+           
+            % save info data
+            data.info.type = 'MTTAudioFeatureBasicSm';
+            data.info.owner = clip;
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save parameters
+            data.info.params = feature.my_params;
+        end
+        
+        function define_global_transform(features)
+        % calculate and set normalization factors from the group of 
+        % input features. These features will be set for the full database
+        
+            if numel(features) == 1
+                error ('Insert feature array for this method');
+            end
+            
+            % ---
+            % here, we only need to define the post-normalisation
+            % ---
+            
+            % ---
+            % get chroma variance data NORMALISATION Factors
+            % TODO: transport chroma variance to finalise step
+            % ---
+            if features(1).my_params.chroma_var >= 1
+                allfeat = abs(cat(2, features(1).data.chroma(:).vars));
+                for i = 2:numel(features)
+
+                    allfeat = cat(2 , allfeat, abs(abs(cat(2, features(i).data.chroma(:).vars))));
+                end
+                [~, common.post_normf.chroma_var] = mapminmax(allfeat,0,1);
+            end
+            
+            % ---
+            % get timbre variance data NORMALISATION Factors
+            % TODO: transport chroma variance to finalise step
+            % ---
+            if features(1).my_params.timbre_var >= 1
+                allfeat = abs(cat(2, features(1).data.timbre(:).vars));
+                for i = 2:numel(features)
+
+                    allfeat = cat(2 , allfeat, abs(abs(cat(2, features(i).data.timbre(:).vars))));
+                end
+                [~, common.post_normf.timbre_var] = mapminmax(allfeat,0,1);
+            end
+            
+            % ---
+            % derive normalisation for timbre features: 
+            % MFCC's are actually special filter outputs
+            % (see developer.echonest.com/docs/v4/_static/AnalyzeDocumentation_2.2.pdf
+            % they are unbounded, so just the relative information will be
+            % used here.
+            % We normalise each bin independently
+            % ---
+            if features(1).my_params.ntimbres > 0
+
+                allfeat = abs(cat(2, features(1).data.timbre(:).means));
+                for i = 2:numel(features)
+
+                    allfeat = cat(2 , allfeat, abs(cat(2, features(i).data.timbre(:).means)));
+                end
+
+                % ---
+                % get normalisation factors    
+                % NOTE: the values will later be clipped to [0,1]
+                % anyways
+                % ---
+                if (features(1).my_params.clip_timbres ~= 0 ) || ...
+                        (features(1).my_params.clip_timbres ~= 1 )
+
+                    common.post_normf.timbre = 1 ./ prctile(allfeat, features(1).my_params.clip_timbres * 100, 2);
+
+                else
+                    % just use the maximum
+                    common.post_normf.timbre = 1/max(allfeat, 2);
+                end
+            
+                % set common feature values
+                features(1).my_db.set_common(common);
+                
+            else
+                
+                features(1).my_db.set_common([1]);
+            end
+        end
+        
+        
+        function finalise(feature)
+        % applies a final transformation and
+        % collects the information of this feature within a single vector
+        % see info for types in specific dimensions
+
+            for i = 1:numel(feature)
+                
+                % check for neccesary parameters
+                if isempty(feature(i).my_db.commondb)
+
+                    error('Define the global transformation first')
+                    return;
+                end
+
+                if feature(1).my_params.ntimbres > 0
+                    % ---
+                    % normalise features
+                    % ---
+                    % norm timbre features if neccesary 
+                    timbren = [];
+                    if feature(i).my_params.norm_timbres
+                        for j = 1:numel(feature(i).data.timbre)
+
+                            timbren = cat(1, timbren, ...
+                                MTTAudioFeatureBasicSm.norm_timbre...
+                                (feature(i).data.timbre(j).means, feature(i).my_db.commondb.post_normf.timbre)); 
+                        end
+                    else
+
+                        timbren = cat(1, timbren, feature(i).data.timbre(:).means); 
+                    end
+                end
+
+                % ---
+                % construct resulting feature vector out of features
+                % ---
+                vec = [];
+                info = {};
+                if  feature(i).my_params.nchromas > 0
+                    
+                    info{numel(vec)+ 1} = 'chroma';
+                    vec = cat(1, vec, feature(i).data.chroma(:).means);
+
+                    info{numel(vec)+ 1} = 'chroma weights';
+                    vec = cat(1, vec, [feature(i).data.chroma(:).means_weight]');
+                                
+                    % ---
+                    % NORMALISE Chroma variance
+                    % ---
+                    if feature(i).my_params.chroma_var >= 1
+                        
+                        info{numel(vec)+ 1} = 'chroma variance';
+                        
+                        % normalise this pack of variance vectors
+                        tmp_var =  mapminmax('apply', [feature(i).data.chroma(:).vars],...
+                            feature(i).common.post_normf.chroma_var);
+                        
+                        % concatenate normalised data to vector
+                        for vari = 1:size(tmp_var,2)
+                            
+                            vec = cat(1, vec, tmp_var(:, vari));
+                        end
+                    end
+                end
+
+                
+                if feature(i).my_params.ntimbres > 0
+                    
+                    info{numel(vec)+ 1} = 'timbre';
+                    vec = cat(1, vec, timbren);
+                    
+                    info{numel(vec)+ 1} = 'timbre weights';
+                    vec = cat(1, vec, [feature(i).data.timbre(:).means_weight]');
+                    
+                    % ---
+                    % NORMALISE timbre variance
+                    % ---
+                    if feature(i).my_params.timbre_var >= 1
+                        
+                        info{numel(vec)+ 1} = 'timbre variance';
+                        
+                        % normalise this pack of variance vectors
+                        tmp_var =  mapminmax('apply', [feature(i).data.timbre(:).vars],...
+                            feature(i).common.post_normf.timbre_var);
+                        
+                        % concatenate normalised data to vector
+                        for vari = 1:size(tmp_var,2)
+                            
+                            vec = cat(1, vec, tmp_var(:, vari));
+                        end
+                    end
+                end
+                
+                if  feature(i).my_params.nrhythms > 0
+                    
+                    info{numel(vec)+ 1} = 'rhythm 8';
+                    vec = cat(1, vec, feature(i).data.rhythm.acorr8);
+                    
+                    info{numel(vec)+ 1} = 'int 8';
+                    vec = cat(1, vec, feature(i).data.rhythm.interval8);
+                    
+                    if  feature(i).my_params.nrhythms >= 2
+                        
+                        info{numel(vec)+ 1} = 'rhythm 16';
+                        vec = cat(1, vec, feature(i).data.rhythm.acorr16);
+                        
+                        info{numel(vec)+ 1} = 'int 16';
+                        vec = cat(1, vec, feature(i).data.rhythm.interval16);
+                    end
+                end
+
+                feature(i).data.final.vector = vec;
+                feature(i).data.final.dim = numel(feature(i).data.final.vector);
+                
+                % fill up info struct and append to feature
+                
+                info(end+1: feature(i).data.final.dim) = ...
+                    cell(feature(i).data.final.dim - numel(info),1);
+                
+                feature(i).data.final.vector_info.labels = info;
+            end
+            
+            % ---
+            % TODO: Maybe delete more basic features again at this point?
+            % ---
+        end
+
+        % ---
+        % destructor: do we really want to remove this 
+        % from the database? No, but 
+        % TODO: create marker for unused objects in db, and a cleanup
+        %  function
+        % ---
+        function delete(feature)
+            
+        end
+        
+        
+        function visualise(feature)
+        % ---
+        % plots the different data types collected in this feature
+        % ---
+            for i = 1:numel(feature)
+                clip = feature(i).data.info.owner;
+               
+                % display raw features
+                if isa(clip, 'CASIMIRClip')
+                    baseclip = clip.child_clip();
+                else
+                    baseclip = clip;
+                end
+                if isa(baseclip, 'MTTClip') 
+                    rawf = baseclip.audio_features_raw();
+                elseif isa(baseclip, 'MSDClip')
+                    rawf = baseclip.features('MSDAudioFeatureRAW');
+                end
+                
+                % ---
+                % @todo: implement MSD feature visualisation
+                % ---
+                [a1, a2, a3] = rawf.visualise();
+                
+                % ---
+                % Display chroma features
+                % ---
+                if isfield(feature(i).data, 'chroma')
+
+                    chroma_labels = {'c', 'c#', 'd','d#', 'e', 'f','f#', 'g','g#', 'a', 'a#', 'h'};
+                    mode_labels = {'minor', 'major'};
+
+                    % change labels to reflect detected mode
+                    chroma_labels{rawf.data.key + 1} = ...
+                        sprintf('(%s) %s',mode_labels{rawf.data.mode + 1}, chroma_labels{rawf.data.key + 1});
+
+                    % transpose labels and data
+                    chroma_labels = circshift(chroma_labels, [0, feature(i).data.chroma(1).shift]);
+                    chromar = circshift([rawf.data.segments_pitches], [feature(i).data.chroma(1).shift, 0]);
+
+                    % image transposed chromas again
+                    segments = [rawf.data.segments_start];
+                    segments(end) = rawf.data.duration;
+
+                    hold(a1);
+                    uimagesc(segments, 0:11, chromar, 'Parent', a1);
+                    set(a1,'YTick',[0:11], 'YTickLabel', chroma_labels);
+
+                    % enlarge plot and plot new data after the old ones
+                    ax = axis(a1);
+                    ax(2) = ax(2) + 2*feature(i).my_params.nchromas + 0.5;     
+                    axis(a1, 'xy');
+                    axis(a1, ax);
+
+                    imagesc(rawf.data.duration + (1:feature(i).my_params.nchromas), (-1:11), ...
+                            [ feature(i).data.chroma(:).means_weight; feature(i).data.chroma(:).means],...
+                            'Parent', a1);
+                    % variance calculated?
+                    if isfield(feature(i).data.chroma, 'vars')
+                
+                        imagesc(rawf.data.duration + feature(i).my_params.nchromas + (1:feature(i).my_params.nchromas), (-1:11), ...
+                            [feature(i).data.chroma(:).vars],...
+                        'Parent', a1);
+                    end
+                end
+
+                % ---
+                % Display timbre features
+                % ---
+                if  isfield(feature(i).data, 'timbre')
+                    
+                    % enlarge plot and plot new data after the old ones
+                    hold(a2);
+                    ax = axis(a2);
+                    ax(2) = ax(2) + 2*feature(i).my_params.ntimbres + 0.5;
+
+                    axis(a2, ax);
+                    imagesc(rawf.data.duration + (1:feature(i).my_params.ntimbres), (-1:11), ...
+                        [ feature(i).data.timbre(:).means_weight; feature(i).data.timbre(:).means],...
+                        'Parent', a2);
+                    if isfield(feature(i).data.timbre, 'vars')
+                
+                        imagesc(rawf.data.duration + feature(i).my_params.ntimbres + (1:feature(i).my_params.ntimbres), (-1:11), ...
+                            [feature(i).data.timbre(:).vars],...
+                        'Parent', a1);
+                    end
+                end
+                
+                % ---
+                % Display rhythm features
+                % ---
+                if  isfield(feature(i).data, 'rhythm')
+                    % data.rhythm.interval
+                    % get timecode
+                    eightt = feature(i).data.rhythm.energy8_time;
+                    sixt = feature(i).data.rhythm.energy16_time;
+
+                    hold(a3);
+                    % plot sixteens acorr and energy
+                    plot(sixt, feature(i).data.rhythm.energy16, 'bx')
+
+                    plot(sixt, feature(i).data.rhythm.acorr16, 'b')
+
+                    % plot eights acorr and energy
+                    plot(eightt, feature(i).data.rhythm.energy8, 'rx')
+
+                    plot(eightt, feature(i).data.rhythm.acorr8, 'r')
+
+                    % broaden view by fixed 4 seconds
+                    ax = axis(a3);
+                    axis(a3, [max(0, eightt(1)-( eightt(end) - eightt(1) + 4 )) ...
+                    min(rawf.data.duration, eightt(end) +4) ...
+                    ax(3:4)]);
+                end
+            end
+        end
+    end
+    
+    
+    methods (Hidden = true)
+        
+        function [env, time] = energy_envelope(feature, clip)
+            % extracts the envelope of energy for the given clip
+            
+            % ---
+            % TODO: externalise envelope etc in external audio features
+            % ---
+            
+            [null, src]  = evalc('miraudio(clip.mp3file_full())');
+            [null, env] = evalc('mirenvelope(src, ''Sampling'', feature.my_params.energy_sr)');
+            
+            time = get(env,'Time');
+            time = time{1}{1};
+            env = mirgetdata(env);
+        end
+        
+        function [acorr, base_sig, base_t] = beat_histogram(feature, startt, interval, signal, signal_t)
+        % acorr = beat_histogram(feature, startt, interval, signal, time)
+        %
+        % compute correlation for beats of specified length in energy curve
+        
+            % get corresponding energy values
+            dt = signal_t(2) - signal_t(1); 
+            base_t = startt:interval:(startt + (feature.my_params.nints*2-1) * interval);
+            base_sig = signal( min( numel(signal), max(1,round((base_t - signal_t(1))/dt))));
+            
+            % normalise energy
+            acbase_sig = base_sig./max(base_sig);
+            
+            % calculate their cyclic autocorrelation
+            acorr = circshift(xcorr(acbase_sig,acbase_sig(1:end/2)),...
+                [numel(acbase_sig) 0]);
+            
+            % cut acorr to relevant points, normalise and square
+            acorr = (acorr(1:feature.my_params.nints)./feature.my_params.nints).^2;
+            
+            % ---
+            % NOTE: we normalise the autocorrelation locally, to compare the
+            % (rhythmic) shape
+            % ---
+            if feature.my_params.norm_acorr;
+                
+                acorr = acorr - min(acorr);
+                acorr = acorr/max(acorr);
+            end
+        end
+    end
+    
+    methods(Static)
+        
+       function timbre = norm_timbre(in, normfs)
+        % returns normed timbre data
+            
+            % ---
+            % individually scale the data using
+            % the dimensions factors
+            % ---
+            timbre = zeros(size(in));
+            for i = 1:size(in,2)
+        
+                timbre(:,i) = normfs .* in(:,i); 
+            end
+            
+            % shift to positive values
+            timbre = (1 + timbre) /2;
+
+            % clip features to [0,1]
+            timbre = min(1, max(timbre, 0));
+       end 
+        
+       % ---
+       % returns parameter md5 hash for comparison
+       % ---
+    end
+    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTAudioFeatureDBgen.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,514 @@
+classdef MTTAudioFeatureDBgen < handle
+   
+    % ---
+    % the database is stored as a global variable
+    % ---
+    
+    properties (Hidden)
+               
+        % feature databases
+        featuredb;
+        
+        commondb;
+        
+        feature_type;
+        feature_params;
+        
+        % unfortunately we just can have one clip type at a time
+        clip_type;
+    end
+    
+    
+    properties (Hidden)
+        
+        % ---
+        % We use a "db_magnaaudiofeat_xxx" class pointer for all the loaded features,
+        % which is supposed to work like a cache.
+        %  my_dbpos links to the position of this feature in the db. 
+        % ---
+
+        % database hash
+        featuredb_hash;
+    end
+    
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % constructor
+        function db = MTTAudioFeatureDBgen(type, matfile)
+            
+            if nargin >= 1
+                
+                % ---
+                % we test for correct type by
+                % using an call to the empty arg constructor function
+                % ---
+                try
+                    feval(type);
+                    
+                catch err
+                    fprintf('%s\n', err.message);
+                    error('The specified class does not provide an constructor')
+                end
+                db.feature_type = type;
+                
+                if nargin >=2 && ~isempty(dir(matfile))
+
+                    
+                    % import database if filename given
+                    db.import(matfile);
+                end
+                
+            end
+
+            % try to load a standard db from mat file?
+        end
+
+        % ---
+        % database retrieval.
+        % this should return a handle to a feature class pointing in this
+        % global feature database.
+        %
+        % parameters can be passed via the varargin parameter
+        % ---
+        function features = get_features(db, clip, varargin)
+            
+            % ---
+            % TODO: error checking and processing
+            % ---
+            
+            % ---
+            % prepare for multiple clips
+            % ---
+            if numel(clip) > 1
+                
+                % iterate for all the found clips
+                features = feval(db.feature_type);
+                for i = 1:numel(clip)
+                    features(i) = get_features(db, clip(i), varargin{:});
+                end
+            else
+                % ---
+                % single feature extraction
+                % ---
+            
+                pos = db.get_clip_pos(clip);
+                if ~pos
+
+                    % assign new database position
+                    pos = db.get_next_pos();
+                    
+                    % call feature constructor
+                    features = feval(db.feature_type, db, varargin{:});
+                    
+                    % extract / load feature data
+                    
+                    cprint(2 ,'Extracting %s for clip %d \n', db.feature_type, clip.id());
+                    
+                    if isempty( db.featuredb)
+
+                        db.featuredb = features.extract(clip);
+                    else
+
+                        db.featuredb(pos) = features.extract(clip);
+                    end
+                    % ---
+                    % NOTE:
+                    % IF WE ARE SURE THAT EVERYTHING HAS WORKED OUT FINE:
+                    % assign new database position in cache
+                    % ---
+                    db.set_pos(pos, clip);
+                    
+                    % ---
+                    % NOTE: feature objects are directly linked to DB
+                    % positions
+                    % ---
+                    features.assign(pos);
+                else
+                    
+                    % just return the cached link
+                    features = feval(db.feature_type, db, pos);
+                end
+                
+                % ---
+                % finalise features if possible (commondb not empty)
+                % ---
+                if ~isempty(db.commondb) && isempty(features.data.final) && ...
+                        ismethod(features,'finalise')
+                    
+                    % call finalise
+                    features.finalise();
+                end
+                
+                % set clip type of the db
+                db.clip_type = class(clip(1));
+                
+                % get last params
+                db.feature_params = features(1).my_params;
+            end
+        end
+        
+        function set_common(db, common)
+        % sets the common database to input
+            
+            if isempty(db.commondb)
+                
+                cprint(2, 'Setting common feature values\n');
+            else
+                
+                cprint(1, 'Common feature values changed');
+            end
+            
+             db.commondb = common;
+        end
+        
+        function export(db, matfile, clips)
+        % saves featuredb to matlab data file
+            
+            global globalvars;
+            % save revision for later version and compability control
+            info.creatorrev = globalvars.camir.revision;
+        
+            cprint(2, 'Exporting %s database to %s ...\n', db.feature_type, matfile);
+            if nargin == 3
+                % ---
+                % TODO: create new hash
+                % ---
+                for i = 1:numel(clips)
+                    pos(i) = db.get_clip_pos(clips(i));
+                    
+                    if pos(i) == 0
+                        error('Corrupted database');
+                    end
+                end
+                
+                % get specific data set
+                featuredb = db.featuredb(pos);
+                
+                featuredb_hash = db.featuredb_hash(pos);
+                
+            else
+                featuredb = db.featuredb;
+
+                featuredb_hash = db.featuredb_hash;
+            end
+            
+            commondb = db.commondb;
+
+            feature_type = db.feature_type;
+            
+            % ---
+            % save clip type as well
+            % NOTE: this only works if all clips have the same type (e.g.
+            % CASIMIRClip or MTTclip
+            % ---
+            clip_type = class(clips(1));
+            
+            save(matfile, 'featuredb', 'commondb', 'feature_type', 'featuredb_hash', 'clip_type');
+        end
+        
+        function [features, clips] = import(db, matfile, type)
+        % gets featuredb from matlab data file
+            
+            cprint(2, 'importing features from %s', matfile)
+            load(matfile,'-MAT');
+            
+            if ~strcmp(feature_type, db.feature_type) 
+                
+                error('feature type of db to import does not match');
+            end
+            
+            % ---
+            % TODO / FIXME: check parameter hash before importing
+            % ---
+            
+%             if db.size() > 0
+% 
+%                 % get a feature param from the db;
+%                 last_pos = db.get_last_pos;
+%                 dummyparams = db.featuredb(last_pos).info.params;
+%                 
+%                 % ---
+%                 % construct a dummy feature and compare parameters to
+%                 % the params in the database
+%                 % ---
+%                 dummyclip = MTTClip(db.featuredb_hash(last_pos));
+%                 dummyfeat = db.get_features(dummyclip, dummyparams);
+%                 
+%                 if ~dummybsm.eq_params(fparams(i))
+%                     
+%                     db_magnaaudiofeat_basicsm.reset;
+%                 end
+%                 
+%             end
+
+            if exist('clip_type','var')
+                clips = feval(clip_type,featuredb_hash);
+                db.clip_type = clip_type;
+            else
+                clips = MTTClip(featuredb_hash);
+                db.clip_type = 'MTTClip';
+            end
+            
+            % ---
+            % import features individually into db
+            % ---
+           
+            for i = 1:numel(clips)
+                
+                % test if database already contains clip
+                if ~db.get_clip_pos(clips(i));
+                    
+                    % get position for this database
+                    pos = db.get_next_pos();
+                    
+                    % copy values
+                    if ~isempty(db.featuredb)
+                        
+                        db.featuredb(pos) = featuredb(i);
+                    elseif pos == 1;
+                        
+                        db.featuredb = featuredb(i);
+                    else
+                        
+                        error ('Corrupted database');
+                    end
+                    % update hash
+                    db.set_pos(pos, clips(i));
+                end
+            end
+            
+%             Set common features
+            db.set_common(commondb);
+            
+            if nargout > 0
+                % retrieve features;
+                features = get_features(db, clips);
+            end
+            
+        end
+        
+        function [matfile] = load(db, featuretype, fparams, clips)
+            % this is the new implementation of MTTAudiofeature_load
+            
+            % get filename
+            matfile = MTTAudioFeatureDBgen.get_db_filename(featuretype, fparams,clips);
+            
+            % does it exist?
+            if exist(matfile,'file') == 2
+                import(db, matfile);
+            else
+                matfile= [];
+            end
+        end
+        
+        function [matfile] = save(db)
+            % this is the new implementation of MTTAudiofeature_load
+            
+            % get clips 
+            clips = feval(db.clip_type,db.featuredb_hash);
+
+             % get filename
+            matfile = MTTAudioFeatureDBgen.get_db_filename(db.feature_type, db.feature_params ,clips);
+            
+            % does it exist?
+            if exist(matfile,'file') == 2
+                warning 'overwriting feature file for this config'
+            end
+            
+            % save params in xml
+            xml_save(sprintf('%s.xml', substr(matfile,  0, -4)),db.feature_params);
+            
+            %export features
+            export(db, matfile, clips);
+        end
+
+        function remove_features(db, clip)
+        % weakly deletes clip features from db
+        
+            clear_pos(clip);
+        end
+        
+        function delete(db)
+            % ---
+            % probably not anything to do here, as we want to 
+            % keep the db!
+            % see static method destroy
+            % ---
+        end
+
+        function reset(db)
+        % ---
+        % deletes all the cached data and destroys the 
+        % global feature database
+        % --- 
+            db.commondb = [];
+            db.featuredb = [];
+            db.featuredb_hash = [];
+        end 
+        
+        function out = size(db)
+        % returns the number of features saved in this db
+        
+            out = sum(db.featuredb_hash > 0);
+        end
+
+        function memory(db)
+        % returns size of whole db in bytes
+        
+        % ---
+        % TODO: Make this work 
+        % ---
+            
+            fprintf(' \n This db contains feature sets for %d clips\n ',numel(db.featuredb_hash))
+            % get local copies of data
+            featuredb = db.featuredb;
+            featuredb_hash = db.featuredb_hash;
+            commondb = db.commondb;
+            
+            whos('featuredb', 'featuredb_hash', 'commondb')
+        end
+    end
+   
+    % ---
+    % private functions
+    % ---
+    methods (Hidden)
+
+        % ---
+        % Hash functions 
+        % ---
+        function out = get_clip_pos(db, clip)
+        % should become database hashing function
+
+            out = find(db.featuredb_hash == clip.id);
+            if isempty(out)
+                out = 0;
+            end
+        end
+        
+        function out = get_next_pos(db)
+        % return index for the new clip features
+        
+            out = numel(db.featuredb_hash) + 1;
+        end
+        
+        function last_pos = get_last_pos(db)
+        % return index the last valid db entry
+        
+            last_pos = find(db.featuredb_hash > 0, 1, 'last');
+        end
+        
+        
+        function set_pos(db, pos, clip)
+        % set index for the new clip features
+        
+            db.featuredb_hash(pos) = clip.id;
+        end
+        
+        function clear_pos(db, clip)
+        % remove index of the clip features
+        
+            db.featuredb_hash(get_clip_pos(db, clip)) = 0;
+        end
+    end
+    
+    methods (Static)
+        
+        % ---
+        % this resets all feature dbs except the one exluded in the 
+        % 'exclude', {''} cell 
+        % ---
+        function reset_feature_dbs(varargin)
+            
+            [exclude] = process_options(varargin,'exclude',{});
+            % ---
+            % resets all feature dbs except raw features
+            % ---
+            vars = whos ('*','global','-regexp', '^db_*');
+            
+            % ---
+            % check if each is class of DBgen.
+            % if not in exclude variable, reset
+            % ---
+            for i = 1:numel(vars)
+                
+                % import global variable
+                eval(sprintf('global %s',vars(i).name));
+                
+                if strcmp(eval(sprintf('class(%s)',vars(i).name)), 'MTTAudioFeatureDBgen') ...
+                        && isempty(strcellfind(exclude, vars(i).name))
+                    
+                    eval(sprintf('%s.reset',vars(i).name));
+                end 
+            end
+        end
+
+        function feature_type = import_type(matfile)
+        % function feature_type = import_type(matfile)
+        % 
+        % returns the type of the saved feature db.
+            
+            load(matfile, 'feature_type', '-MAT');
+        end
+        
+        function db_nameo = db_name(type)
+        % returns the standard global var name for a db of given type    
+            
+            switch type
+                case 'MTTAudioFeatureRAW'
+                    db_nameo = 'db_magnaaudiofeat';
+                    
+                case 'MTTAudioFeatureBasicSm'
+                    db_nameo = 'db_magnaaudiofeat_basicsm';
+                    
+                case 'MTTTagFeatureGenreBasic'
+                    db_nameo = 'db_magnatagfeat_genrebasic';
+                    
+                case 'MTTMixedFeatureGenreBasicSm'
+                    db_nameo = 'db_magnamixedfeat_genrebasicsm';
+                    
+                otherwise
+                    db_nameo = sprintf('db_%s', type);
+            end 
+        end
+        
+        function matfile = get_db_filename(featuretype, fparams,clips)             
+            % get the paramhash
+            paramhash = MTTAudioFeatureDBgen.param_hash(featuretype, fparams);
+
+            % add the clip hash bit
+            cliphash = MTTAudioFeatureDBgen.clip_hash(clips);
+            
+            % determine the filename
+            matfile = sprintf('f%s.%s.mat', paramhash,cliphash);
+        end
+            
+        function ph = param_hash(type, varargin)
+        % loads the params for a feature type and adds the 
+        % given parameter values to it.
+        
+            % this function can be static or dynamic
+            if nargin > 1
+                % static case
+                dummy = feval(type,[], varargin{:});
+            else
+                % dynamic case
+                dummy = type;
+            end
+         ph = hash(xml_format(dummy.my_params),'MD5');
+        end
+        
+        function ch = clip_hash(clips)
+            
+            % returns the hash of a number of clips
+            ch = hash([class(clips(1)) mat2str(sort(clips.id))],'MD5');
+        end
+    end
+end 
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTAudioFeatureHMM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,452 @@
+classdef MTTAudioFeatureHMM < MTTAudioFeature & handle
+    % ---
+    % the MTTAudioFeatureBasicSm Class contains 
+    % a basic summary of chroma, mfcc and tempo features
+    % a few common chroma and mfcc vectors are concatenated 
+    % along with some clip-wide variance 
+    % a metric / rhythm fingerprint is added
+    %
+    % The usual workflow for these features consists of three steps
+    % 1. extract: extracts the basic single-file dependent features
+    % 2. define_global_transform: calculates the global feature
+    %       transformation parameters
+    % 3. finalise: applies the common transformations to a specific feature
+    % ---
+    
+    properties(Constant = true)
+        
+        % svn hook
+        my_revision = str2double(substr('$Rev: 2332 $',  5, -1));
+    end
+
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        my_params = struct(...
+            'nstates', 4 ... % predefined number of states
+            );
+    end
+    
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTAudioFeatureHMM(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+
+        end
+        % ---
+        % extract feature data from raw audio features
+        % ---
+        function data = extract(feature, clip)
+            % ---
+            % get Basic Summary audio features. this includes possible
+            % local normalisations
+            % ---
+            
+            global globalvars;
+            
+            % --- 
+            % get casimir child clip if available
+            % ---
+            if isa(clip, 'CASIMIRClip')
+                baseclip = clip.child_clip();
+            else
+                baseclip = clip;
+            end
+            if isa(baseclip, 'MTTClip') 
+                rawf = baseclip.audio_features_raw();
+            elseif isa(baseclip, 'MSDClip')
+                rawf = baseclip.features('MSDAudioFeatureRAW');
+            end
+            
+            % ---
+            % now extract the features
+            % first step: chroma clustering
+            % ---
+            weights = [rawf.data.segments_duration];
+            
+            % normalise weights
+            weights = weights / rawf.data.duration;
+            
+            % get the chroma features
+            chroma = [rawf.data.segments_pitches]';
+
+            % ---
+            % TODO: train hmm 
+            % ---
+            
+            
+            % save hmm into data variable
+            data.mu = mu1
+            data.transmat1 = mu1
+
+            
+            
+            
+            
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.vector_info = struct(); 
+            data.final.dim = 0;
+           
+            % save info data
+            data.info.type = 'MTTAudioFeatureBasicSm';
+            data.info.owner = clip;
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save parameters
+            data.info.params = feature.my_params;
+        end
+        
+        function define_global_transform(features)
+        % calculate and set normalization factors from the group of 
+        % input features. These features will be set for the full database
+        
+            
+           
+        end
+        
+        
+        function finalise(feature)
+        % applies a final transformation and
+        % collects the information of this feature within a single vector
+        % see info for types in specific dimensions
+
+            for i = 1:numel(feature)
+                
+                % check for neccesary parameters
+                if isempty(feature(i).my_db.commondb)
+
+                    error('Define the global transformation first')
+                    return;
+                end
+
+                if feature(1).my_params.ntimbres > 0
+                    % ---
+                    % normalise features
+                    % ---
+                    % norm timbre features if neccesary 
+                    timbren = [];
+                    if feature(i).my_params.norm_timbres
+                        for j = 1:numel(feature(i).data.timbre)
+
+                            timbren = cat(1, timbren, ...
+                                MTTAudioFeatureBasicSm.norm_timbre...
+                                (feature(i).data.timbre(j).means, feature(i).my_db.commondb.post_normf.timbre)); 
+                        end
+                    else
+
+                        timbren = cat(1, timbren, feature(i).data.timbre(:).means); 
+                    end
+                end
+
+                % ---
+                % construct resulting feature vector out of features
+                % ---
+                vec = [];
+                info = {};
+                if  feature(i).my_params.nchromas > 0
+                    
+                    info{numel(vec)+ 1} = 'chroma';
+                    vec = cat(1, vec, feature(i).data.chroma(:).means);
+
+                    info{numel(vec)+ 1} = 'chroma weights';
+                    vec = cat(1, vec, [feature(i).data.chroma(:).means_weight]');
+                                
+                    % ---
+                    % NORMALISE Chroma variance
+                    % ---
+                    if feature(i).my_params.chroma_var >= 1
+                        
+                        info{numel(vec)+ 1} = 'chroma variance';
+                        
+                        % normalise this pack of variance vectors
+                        tmp_var =  mapminmax('apply', [feature(i).data.chroma(:).vars],...
+                            feature(i).common.post_normf.chroma_var);
+                        
+                        % concatenate normalised data to vector
+                        for vari = 1:size(tmp_var,2)
+                            
+                            vec = cat(1, vec, tmp_var(:, vari));
+                        end
+                    end
+                end
+
+                
+                if feature(i).my_params.ntimbres > 0
+                    
+                    info{numel(vec)+ 1} = 'timbre';
+                    vec = cat(1, vec, timbren);
+                    
+                    info{numel(vec)+ 1} = 'timbre weights';
+                    vec = cat(1, vec, [feature(i).data.timbre(:).means_weight]');
+                    
+                    % ---
+                    % NORMALISE timbre variance
+                    % ---
+                    if feature(i).my_params.timbre_var >= 1
+                        
+                        info{numel(vec)+ 1} = 'timbre variance';
+                        
+                        % normalise this pack of variance vectors
+                        tmp_var =  mapminmax('apply', [feature(i).data.timbre(:).vars],...
+                            feature(i).common.post_normf.timbre_var);
+                        
+                        % concatenate normalised data to vector
+                        for vari = 1:size(tmp_var,2)
+                            
+                            vec = cat(1, vec, tmp_var(:, vari));
+                        end
+                    end
+                end
+                
+                if  feature(i).my_params.nrhythms > 0
+                    
+                    info{numel(vec)+ 1} = 'rhythm 8';
+                    vec = cat(1, vec, feature(i).data.rhythm.acorr8);
+                    
+                    info{numel(vec)+ 1} = 'int 8';
+                    vec = cat(1, vec, feature(i).data.rhythm.interval8);
+                    
+                    if  feature(i).my_params.nrhythms >= 2
+                        
+                        info{numel(vec)+ 1} = 'rhythm 16';
+                        vec = cat(1, vec, feature(i).data.rhythm.acorr16);
+                        
+                        info{numel(vec)+ 1} = 'int 16';
+                        vec = cat(1, vec, feature(i).data.rhythm.interval16);
+                    end
+                end
+
+                feature(i).data.final.vector = vec;
+                feature(i).data.final.dim = numel(feature(i).data.final.vector);
+                
+                % fill up info struct and append to feature
+                
+                info(end+1: feature(i).data.final.dim) = ...
+                    cell(feature(i).data.final.dim - numel(info),1);
+                
+                feature(i).data.final.vector_info.labels = info;
+            end
+            
+            % ---
+            % TODO: Maybe delete more basic features again at this point?
+            % ---
+        end
+
+        % ---
+        % destructor: do we really want to remove this 
+        % from the database? No, but 
+        % TODO: create marker for unused objects in db, and a cleanup
+        %  function
+        % ---
+        function delete(feature)
+            
+        end
+        
+        
+        function visualise(feature)
+        % ---
+        % plots the different data types collected in this feature
+        % ---
+            for i = 1:numel(feature)
+                clip = feature(i).data.info.owner;
+               
+                % display raw features
+                if isa(clip, 'CASIMIRClip')
+                    baseclip = clip.child_clip();
+                else
+                    baseclip = clip;
+                end
+                if isa(baseclip, 'MTTClip') 
+                    rawf = baseclip.audio_features_raw();
+                elseif isa(baseclip, 'MSDClip')
+                    rawf = baseclip.features('MSDAudioFeatureRAW');
+                end
+                
+                % ---
+                % @todo: implement MSD feature visualisation
+                % ---
+                [a1, a2, a3] = rawf.visualise();
+                
+                % ---
+                % Display chroma features
+                % ---
+                if isfield(feature(i).data, 'chroma')
+
+                    chroma_labels = {'c', 'c#', 'd','d#', 'e', 'f','f#', 'g','g#', 'a', 'a#', 'h'};
+                    mode_labels = {'minor', 'major'};
+
+                    % change labels to reflect detected mode
+                    chroma_labels{rawf.data.key + 1} = ...
+                        sprintf('(%s) %s',mode_labels{rawf.data.mode + 1}, chroma_labels{rawf.data.key + 1});
+
+                    % transpose labels and data
+                    chroma_labels = circshift(chroma_labels, [0, feature(i).data.chroma(1).shift]);
+                    chromar = circshift([rawf.data.segments_pitches], [feature(i).data.chroma(1).shift, 0]);
+
+                    % image transposed chromas again
+                    segments = [rawf.data.segments_start];
+                    segments(end) = rawf.data.duration;
+
+                    hold(a1);
+                    uimagesc(segments, 0:11, chromar, 'Parent', a1);
+                    set(a1,'YTick',[0:11], 'YTickLabel', chroma_labels);
+
+                    % enlarge plot and plot new data after the old ones
+                    ax = axis(a1);
+                    ax(2) = ax(2) + 2*feature(i).my_params.nchromas + 0.5;     
+                    axis(a1, 'xy');
+                    axis(a1, ax);
+
+                    imagesc(rawf.data.duration + (1:feature(i).my_params.nchromas), (-1:11), ...
+                            [ feature(i).data.chroma(:).means_weight; feature(i).data.chroma(:).means],...
+                            'Parent', a1);
+                    % variance calculated?
+                    if isfield(feature(i).data.chroma, 'vars')
+                
+                        imagesc(rawf.data.duration + feature(i).my_params.nchromas + (1:feature(i).my_params.nchromas), (-1:11), ...
+                            [feature(i).data.chroma(:).vars],...
+                        'Parent', a1);
+                    end
+                end
+
+                % ---
+                % Display timbre features
+                % ---
+                if  isfield(feature(i).data, 'timbre')
+                    
+                    % enlarge plot and plot new data after the old ones
+                    hold(a2);
+                    ax = axis(a2);
+                    ax(2) = ax(2) + 2*feature(i).my_params.ntimbres + 0.5;
+
+                    axis(a2, ax);
+                    imagesc(rawf.data.duration + (1:feature(i).my_params.ntimbres), (-1:11), ...
+                        [ feature(i).data.timbre(:).means_weight; feature(i).data.timbre(:).means],...
+                        'Parent', a2);
+                    if isfield(feature(i).data.timbre, 'vars')
+                
+                        imagesc(rawf.data.duration + feature(i).my_params.ntimbres + (1:feature(i).my_params.ntimbres), (-1:11), ...
+                            [feature(i).data.timbre(:).vars],...
+                        'Parent', a1);
+                    end
+                end
+                
+                % ---
+                % Display rhythm features
+                % ---
+                if  isfield(feature(i).data, 'rhythm')
+                    % data.rhythm.interval
+                    % get timecode
+                    eightt = feature(i).data.rhythm.energy8_time;
+                    sixt = feature(i).data.rhythm.energy16_time;
+
+                    hold(a3);
+                    % plot sixteens acorr and energy
+                    plot(sixt, feature(i).data.rhythm.energy16, 'bx')
+
+                    plot(sixt, feature(i).data.rhythm.acorr16, 'b')
+
+                    % plot eights acorr and energy
+                    plot(eightt, feature(i).data.rhythm.energy8, 'rx')
+
+                    plot(eightt, feature(i).data.rhythm.acorr8, 'r')
+
+                    % broaden view by fixed 4 seconds
+                    ax = axis(a3);
+                    axis(a3, [max(0, eightt(1)-( eightt(end) - eightt(1) + 4 )) ...
+                    min(rawf.data.duration, eightt(end) +4) ...
+                    ax(3:4)]);
+                end
+            end
+        end
+    end
+    
+    
+    methods (Hidden = true)
+        
+        function [env, time] = energy_envelope(feature, clip)
+            % extracts the envelope of energy for the given clip
+            
+            % ---
+            % TODO: externalise envelope etc in external audio features
+            % ---
+            
+            [null, src]  = evalc('miraudio(clip.mp3file_full())');
+            [null, env] = evalc('mirenvelope(src, ''Sampling'', feature.my_params.energy_sr)');
+            
+            time = get(env,'Time');
+            time = time{1}{1};
+            env = mirgetdata(env);
+        end
+        
+        function [acorr, base_sig, base_t] = beat_histogram(feature, startt, interval, signal, signal_t)
+        % acorr = beat_histogram(feature, startt, interval, signal, time)
+        %
+        % compute correlation for beats of specified length in energy curve
+        
+            % get corresponding energy values
+            dt = signal_t(2) - signal_t(1); 
+            base_t = startt:interval:(startt + (feature.my_params.nints*2-1) * interval);
+            base_sig = signal( min( numel(signal), max(1,round((base_t - signal_t(1))/dt))));
+            
+            % normalise energy
+            acbase_sig = base_sig./max(base_sig);
+            
+            % calculate their cyclic autocorrelation
+            acorr = circshift(xcorr(acbase_sig,acbase_sig(1:end/2)),...
+                [numel(acbase_sig) 0]);
+            
+            % cut acorr to relevant points, normalise and square
+            acorr = (acorr(1:feature.my_params.nints)./feature.my_params.nints).^2;
+            
+            % ---
+            % NOTE: we normalise the autocorrelation locally, to compare the
+            % (rhythmic) shape
+            % ---
+            if feature.my_params.norm_acorr;
+                
+                acorr = acorr - min(acorr);
+                acorr = acorr/max(acorr);
+            end
+        end
+    end
+    
+    methods(Static)
+        
+       function timbre = norm_timbre(in, normfs)
+        % returns normed timbre data
+            
+            % ---
+            % individually scale the data using
+            % the dimensions factors
+            % ---
+            timbre = zeros(size(in));
+            for i = 1:size(in,2)
+        
+                timbre(:,i) = normfs .* in(:,i); 
+            end
+            
+            % shift to positive values
+            timbre = (1 + timbre) /2;
+
+            % clip features to [0,1]
+            timbre = min(1, max(timbre, 0));
+       end 
+        
+       % ---
+       % returns parameter md5 hash for comparison
+       % ---
+    end
+    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTAudioFeatureRAW.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,127 @@
+% --
+% This class loads and hanles the aufdio features included with the MTT
+% Library
+% --- 
+
+
+classdef MTTAudioFeatureRAW < AudioFeatureRAW & handle
+    
+    
+    properties(Constant = true)
+        
+        my_revision = str2double(substr('$Rev: 2284 $',  5, -1));
+    end
+    
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        
+    end
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTAudioFeatureRAW(varargin)
+
+            feature = feature@AudioFeatureRAW(varargin{:});
+
+        end
+        
+        % ---
+        % load feature data from xml file
+        % ---
+        function data = extract(feature, clip)
+        % load feature data by parsing xml
+            
+            global globalvars;
+        
+            % fprintf('parsing features for clip %d \n',clip.id());
+            
+            % parse feature
+            data = xml_parse_mtt(clip.featurefile_full());
+            
+            % precombine the segmentst information for better
+            % interoperability with MSD data later
+            
+            data.segments_pitches = [data.segments(:).pitches];
+            data.segments_timbre = [data.segments(:).timbre];
+            
+            data.segments_duration = [data.segments(:).duration];
+            data.segments_start = [data.segments(:).start];
+            
+            data.sections_start = [data.sections(:).start];
+            data.sections_duration = [data.sections(:).duration];
+            
+            data.segments_duration =  [data.segments(:).duration];
+
+            data.segments_loudness_max_time = [data.segments(:).loudness_max_time];
+            data.segments_loudness_max = [data.segments(:).loudness_max];
+            data.segments_loudness = [data.segments(:).loudness];
+
+            % ---
+            % TODO: feature.data.bars
+            % ---
+            [data.bars, data.beats, data.tatums] = MTTAudioFeatureRAW.infer_bar_times(data.bars);
+            
+            % save info data
+            data.info.type = 'MTTAudioFeatureRAW';
+            data.info.owner = clip;
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            data.info.params = feature.my_params;
+        end
+    end
+    
+    methods(Static)
+    function [bars, beats, tatums] = infer_bar_times(bar)
+        % [bars, beats, tatums] = infer_bar_times(feature)
+        %
+        %  extract bar and beat starting times from tatums            
+            beats = [];
+            bars = [];
+            tatums = [];
+            
+            % bars
+            for i = 1:numel(bar)
+                % beats
+                for j = 1:numel(bar(i).beat)
+                    %  tatums
+                    for k = 1:numel(bar(i).beat(j).tatum)
+                        tatum = bar(i).beat(j).tatum(k);
+                        
+                        % collect tatums and confidence
+                        tatums(1:2,end+1) = [tatum.time,tatum.confidence];
+                        
+
+                        % ---
+                        % save beat if  this is the first tatum in it
+                        % ---
+                        if k == 1
+                            beats(1:2,end+1) = [tatum.time,...
+                               bar(i).beat(j).confidence];
+                           
+                            % ---
+                            % save bar if this is the first tatum in it
+                            % ---
+                            if j == 1
+                                bars(1:2,end+1) = [tatum.time,...
+                                   bar(i).confidence];
+                            end
+                        end
+                        
+                        
+                    end
+                end
+            end
+            
+        % end function
+        end    
+    end
+    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTAudioFeatureSlaney08.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,377 @@
+classdef MTTAudioFeatureSlaney08 < MTTAudioFeature & handle
+    % ---
+    % This Class contains 
+    % a basic summary of MTT features complementary to those in
+    % MTTAudioFeatureBasicSm,  features are extracted 
+    % as described in Slaney 08 - LEARNING A METRIC FOR MUSIC SIMILARITY
+    %
+    % The usual workflow for these features constist of three steps
+    % 1. extract: extracts the basic single-file dependent features
+    % 2. define_global_transform: calculates the global feature
+    %       transformation parameters
+    % 3. finalise: applies the common transformations to a specific feature
+    % ---
+    
+    properties(Constant = true)
+        
+        % svn hook
+        my_revision = str2double(substr('$Rev$',  5, -1));
+    end
+
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        my_params = struct(...
+            'norm_mttstats', 1, ... % 
+            'whiten_mttstats', 0, ... % NOTE: whitening as in slaney?? 
+            'select_mttstats', 1 ...% TODO: way to select certain features
+            );
+    end
+    
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTAudioFeatureSlaney08(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+
+        end
+        % ---
+        % extract feature data from raw audio features
+        % ---
+        function data = extract(feature, clip)
+            % ---
+            % get features. this includes possible
+            % local normalisations
+            % ---
+            
+            global globalvars;
+            
+            % --- 
+            % get casimir child clip if available
+            % ---
+            if isa(clip, 'CASIMIRClip')
+                baseclip = clip.child_clip();
+            else
+                baseclip = clip;
+            end
+            if isa(baseclip, 'MTTClip') 
+                rawf = baseclip.audio_features_raw();
+            elseif isa(baseclip, 'MSDClip')
+                rawf = baseclip.features('MSDAudioFeatureRAW');
+            end
+            
+                        
+            % ---
+            % TODO: implement time_weighted version of the statistical 
+            % evaluations below
+            % ---
+            
+%             segmentDurationMean: mean segment duration (sec.).
+            data.mttstats.segmentDurationMean = mean(rawf.data.segments_duration);
+
+%             segmentDurationVariance: variance of the segment duration 
+            data.mttstats.segmentDurationVariance = var(rawf.data.segments_duration);
+
+%             timeLoudnessMaxMean: mean time to the segment maximum, or attack duration (sec.).
+            data.mttstats.timeLoudnessMaxMean = mean(rawf.data.segments_loudness_max_time);
+
+%             loudnessMaxMean: mean of segments’ maximum loudness(dB).
+            data.mttstats.loudnessMaxMean = mean(rawf.data.segments_loudness_max);
+            
+%             loudnessMaxVariance: variance of the segments’ maximum loudness (dB).
+            data.mttstats.loudnessMaxVariance = var(rawf.data.segments_loudness_max);
+            
+%             loudnessBeginMean: average loudness at the start of segments (dB)
+            data.mttstats.loudnessBeginMean = mean(rawf.data.segments_loudness);
+
+%             loudnessBeginVariance: variance of the loudness at the startof segments (dB2). Correlated with loudnessMaxVariance
+            data.mttstats.loudnessBeginVariance = var(rawf.data.segments_loudness);
+
+%             loudnessDynamicsMean: average of overall dynamic rangein the segments (dB).
+%             loudnessDynamicsVariance: segment dynamic range variance
+%             (dB). Higher variances suggest more dynamics ineach segment.
+            % ---
+            % NOTE: the above information cannot be extracted from the MTT 
+            % Features, maybe more recent echonest features allow for this
+            % ---
+
+%             loudness: overall loudness estimate of the track (dB).  
+            data.mttstats.loudness = rawf.data.loudness;
+
+            % ---
+            % TODO: get these from the beat loundesses?
+            % ---
+            
+%             tempo: overall track tempo estimate (in beat per minute,BPM). Doubling and halving errors are possible.
+            data.mttstats.tempo = rawf.data.tempo;
+
+%             tempoConfidence: a measure of the con?dence of the tempo estimate (beween 0 and 1).
+            %data.mttstats.tempoConfidence = rawf.data.tempoConfidence;
+            
+            beats = rawf.data.beats;
+            tatums = rawf.data.tatums;
+            
+%             beatVariance: ameasure of the regularity of the beat (secs).
+            if numel(beats) > 0
+                bdiff = diff(beats(1,:));
+                data.mttstats.beatVariance = var(bdiff);
+            else
+                
+                % ---
+                % This is a facke repolacement variance
+                % ---
+                data.mttstats.beatVariance = 0;
+            end
+            
+            
+%             tatum: estimated overall tatum duration (in seconds). Tatums are subdivisions of the beat.
+            % ---
+            % note: the tatum length could be also 
+            % accessed by comparison with the global bpm estimate
+            % ---
+            if numel(tatums) > 0
+                tdiff = diff(tatums(1,:));
+                data.mttstats.tatum = median(tdiff);
+                
+    %             tatumConfidence: a measure of the con?dence of the tatum estimate (beween 0 and 1).
+                data.mttstats.tatumConfidence = mean(tatums(2,:));
+
+    %             numTatumsPerBeat: number of tatums per beat
+                data.mttstats.numTatumsPerBeat = median(bdiff) / data.mttstats.tatum;
+            else
+                % ---
+                % This is a facke replacement tatum
+                % TODO: maybe set confidence to -1?
+                % ---
+                
+                data.mttstats.tatum = 0;
+                
+    %             tatumConfidence: a measure of the con?dence of the tatum estimate (beween 0 and 1).
+                
+                data.mttstats.tatumConfidence = 0;
+
+    %             numTatumsPerBeat: number of tatums per beat
+                data.mttstats.numTatumsPerBeat = 2;  
+            end
+            
+            
+            % ---
+            % TODO: beat analysis
+            % ---
+
+%             timeSignature: estimated time signature (number of beats per measure).  (0-7 / 7)
+            data.mttstats.timeSignature = rawf.data.timeSignature;
+            
+%             timeSignatureStability: a rough estimate of the stability of the time signature throughout the track
+            data.mttstats.timeSignatureStability = rawf.data.timeSignatureConfidence;
+            
+            % ---
+            % prepare field for final features
+            % ---
+            data.final.vector = [];
+            data.final.vector_info = struct(); 
+            data.final.dim = 0;
+           
+            % save info data
+            data.info.type = 'MTTAudioFeatureSlaney08';
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save parameters
+            data.info.params = feature.my_params;
+        end
+        
+        function define_global_transform(features)
+        % calculate and set normalization factors from the group of 
+        % input features. These features will be set for the full database
+                    
+         for i = 1:numel(features)
+                data = features(i).data.mttstats;
+
+                final(:,i) = [data.segmentDurationMean; ...
+                    data.segmentDurationVariance; ...
+                    data.timeLoudnessMaxMean; ...
+                    data.loudnessMaxMean; ...
+                    data.loudnessMaxVariance; ...
+                    data.loudnessBeginMean; ...
+                    data.loudnessBeginVariance; ...
+                    data.loudness; ...
+                    data.tempo; ...
+                    ... % data.tempoConfidence; ...
+                    data.beatVariance; ...
+                    data.tatum; ...
+                    data.tatumConfidence; ...
+                    data.numTatumsPerBeat; ...
+                    data.timeSignature; ...
+                    data.timeSignatureStability];
+         end
+            
+            if features(1).my_params.norm_mttstats
+                if numel(features) == 1
+                    error ('Insert feature array for this method, or set normalisation to 0');
+                end
+
+                % ---
+                % here, we only need to define the post-normalisation
+                % ---
+                [final, pstd] = mapminmax(final,0,1);
+                common.mttstats.pre_norm = pstd;
+                
+                % ---
+                % NOTE: whitening as in slaney?? 
+                % Would make reading the
+                % mahal matrices really hard
+                % ---
+                
+                features(1).my_db.set_common(common);
+                
+            else
+                
+                features(1).my_db.set_common([1]);
+            end
+            
+            % save the normalised features straight away!
+            features.finalise(final);
+        end
+        
+        
+        function finalise(features, final)
+        % applies a final transformation and
+        % collects the information of this feature within a single vector
+        % see info for types in specific dimensions
+        % check if features have been finalised already
+
+        % ---
+        % check for dummy feature
+        % ---
+        if isfield(features(1).my_params,'select_mttstats') && ...
+            isnumeric(features(1).my_params.select_mttstats) && ...
+            features(1).my_params.select_mttstats == 0
+            
+            % if no information needed just fill everything 0
+            for i = 1:numel(features)
+                features(i).data.final.vector = [];
+                features(i).data.final.dim = 0;
+
+                % fill up info struct and append to feature
+                features(i).data.final.vector_info.labels = {};
+            end
+            
+            return;
+        end
+        
+        % ---
+        % set feature labelling
+        % ---
+        info = {'segmentDurationMean', ...
+        'segmentDurationVariance', ...
+        'timeLoudnessMaxMean', ...
+        'loudnessMaxMean', ...
+        'loudnessMaxVariance', ...
+        'loudnessBeginMean', ...
+        'loudnessBeginVariance', ...
+        'loudness', ...
+        'tempo', ...
+        ...% 'tempoConfidence', ...
+        'beatVariance', ...
+        'tatum', ...
+        'tatumConfidence', ...
+        'numTatumsPerBeat', ...
+        'timeSignature', ...
+        'timeSignatureStability'};
+                
+        % ---
+        % construct resulting feature vector out of features
+        % ---
+            if nargin == 2 && isempty(final)
+                
+                % the final vector etc already are set to zero;
+                return;
+                
+            elseif nargin == 2 && (numel(features) == size(final, 2))
+                for i = 1:numel(features)
+
+                    % check for neccesary parameters
+                    if isempty(features(i).my_db.commondb)
+
+                        error('Define the global transformation first')
+                        return;
+                    end
+
+                    features(i).data.final.vector = final(:,i);
+                    features(i).data.final.dim = size(final,1);
+
+                    % fill up info struct and append to feature
+                    features(i).data.final.vector_info.labels = info;
+                end
+            else
+                % ---
+                % if features have been added after gettin gnormalisation
+                % parameters, ther should be still an option to include
+                % them
+                % ---
+                  
+                 for i = 1:numel(features)
+
+                    % check for neccesary parameters
+                    if isempty(features(i).my_db.commondb)
+
+                        error('Define the global transformation first')
+                        return;
+                    end
+                    
+                    data = features(i).data.mttstats;
+                    final = [data.segmentDurationMean; ...
+                        data.segmentDurationVariance; ...
+                        data.timeLoudnessMaxMean; ...
+                        data.loudnessMaxMean; ...
+                        data.loudnessMaxVariance; ...
+                        data.loudnessBeginMean; ...
+                        data.loudnessBeginVariance; ...
+                        data.loudness; ...
+                        data.tempo; ...
+                        ... % data.tempoConfidence; ...
+                        data.beatVariance; ...
+                        data.tatum; ...
+                        data.tatumConfidence; ...
+                        data.numTatumsPerBeat; ...
+                        data.timeSignature; ...
+                        data.timeSignatureStability];
+                    
+                    if features(1).my_params.norm_mttstats == 1
+                                
+                        [final] = mapminmax('apply', final, features(1).common.mttstats.pre_norm);
+                    end
+                    
+                    features(i).data.final.vector = final;
+                    features(i).data.final.dim = size(final,1);
+
+                    % fill up info struct and append to feature
+                    features(i).data.final.vector_info.labels = info;
+                 end
+
+            end
+            
+            % ---
+            % TODO: Maybe delete more basic features again at this point?
+            % ---
+        end
+
+        % ---
+        % destructor: do we really want to remove this 
+        % from the database? No, but 
+        % TODO: create marker for unused objects in db, and a cleanup
+        %  function
+        % ---
+        function delete(feature)
+            
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTClip.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,98 @@
+% ---
+% This is the class for magnatagatune clips
+% ---
+
+classdef MTTClip < Clip
+    
+    % ---
+    % here come the internal clip properties.
+    % the database is stored as a global variable
+    % ---
+    
+     % ---
+        % simple constructor
+        % ---
+    methods
+        function clip = MTTClip(varargin)
+            clip = clip@Clip(varargin{:},'db_MTTClip');
+        end
+        
+        function out = mp3file(this)
+        % returns filename for given genre id
+
+            out = this.my_db.clip_info_proper{this.my_dbpos,10};
+        end
+        
+        
+        function filename = mp3file_full(this)
+        % returns mp3 filename for given clip id
+            
+            global globalvars;
+            filename = strcat(globalvars.tstaudiopath,this.mp3file());
+            filename = strrep(filename,'\',globalvars.systemslash);
+            filename = strrep(filename,'/',globalvars.systemslash);
+        end
+        
+        function filename = featurefile_full(this)
+        % returns xml filename for given clip id
+        
+        % ---
+        % NOTE: the xml files are supposed to be in the folder
+        % "xml" as subfolder of the mp3 file path
+        % ---
+            global globalvars;
+            filename = strcat(globalvars.tstaudiopath,'xml\',...
+            this.mp3file,'.xml');
+
+            filename = strrep(filename,'/',globalvars.systemslash);
+            filename = strrep(filename,'\',globalvars.systemslash);
+        end
+        
+        
+        % caution. last.fm dbs take a clip
+        function [out, score, annotids] = fmtags(this)
+            
+            [out, score, annotids] = this.my_db.fmtagdb.annots(this);
+        end
+        
+        % caution. last.fm dbs take a clip
+        % TODO: revert this to general annotdb for compability
+        function [out, score] = fmtag_ids(this)
+            
+            [out, score] = this.my_db.fmtagdb.annotids_for_owner(this);
+        end
+        
+        function [out, score] = genre_ids(this)
+        % returns clip genre for given clip id 
+            
+            [out, score] = this(1).my_db.genredb.annotids_for_owner([this.id]);
+        end
+        
+        function [out, score, annotids] = genres(this)
+        % returns name strings for given genre position ids
+ 
+            [out, score, annotids] = this(1).my_db.genredb.annots([this.id]);
+        end  
+        
+        function print(this)
+        % prints out the album info
+
+            fprintf('clip %d: %s by %s,\n on %s \n',this.id, ...
+                this.title(), this.artist(), this.album());
+
+            v = strcat(this.genres(),', ');
+            fprintf(' genres: %s\n', strcat(v{:}));
+
+            v = strcat(this.tags(),', ');
+            fprintf(' tags: %s\n', strcat(v{:}));
+            
+            v = strcat(this.fmtags(),', ');
+            fprintf(' last.fm tags: %s\n', strcat(v{:}));
+
+            % if nargout == 0
+            %     fprintf(out)
+            % end
+        end
+        
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTClipDB.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,141 @@
+% ---
+% This is the wrapper and loader class for magnatagatune db
+% and related data
+% ---
+
+classdef MTTClipDB < handle
+    
+    properties (SetAccess = 'private')
+        
+        % ---
+        % TODO: create global "db_magnaclips" class pointer 
+        % ---
+        
+        annots;
+        annots_filenames;
+        annots_ids;
+        annots_names;
+        
+        % inverse ids for comparison
+        comparison_ids;
+
+        clip_info_proper;
+        clip_info_proper_names;
+
+%         magnagenre_childof;
+        
+        % genre database
+        genredb;
+        
+        % artist database
+        artistdb;
+        
+        % tag databses
+        tagdb;
+        
+        fmtagdb;
+        
+        % @todo: get data
+        mbtagdb;
+    end
+    
+    properties (Hidden)
+    % hidden properties
+
+    end
+    
+    methods
+        
+        % ---
+        % constructore
+        % ---
+        function db = MTTClipDB()
+            
+            % ---
+            % TODO: restructure data /  db.mat
+            % ---
+            
+            load 'db.mat';
+            
+            db.annots = annots;
+            db.annots_ids = annots_ids;
+            db.annots_names =  annots_names;
+            db.annots_filenames = annots_filenames;
+                        
+            % comparison ids
+            db.comparison_ids = sparse(comparison_ids,1, 1:numel(comparison_ids));
+
+            db.clip_info_proper = clip_info_proper;
+            db.clip_info_proper_names = clip_info_proper_names;
+            
+            % Genre in new structure for textual annotations
+            db.genredb = AnnotDB(magnagenres, clip_magnagenres, annots_ids);
+            
+            % Artist for each clip
+            db.artistdb = artistdb; %AnnotDB('clips_by_annot', db.clip_info_proper(:, 4), annots_ids);
+            
+            % Magnatagatune Tags
+            db.tagdb = tagdb; % AnnotDB(annots_names, annots, annots_ids);
+            
+            % Last Fm Tags
+            db.fmtagdb = fmtagdb; % LFMTagsDB(db.artistdb);
+            
+            % musicbrainz tags
+            db.mbtagdb = mbtagdb; % LFMTagsDB(db.artistdb);
+            
+%             db.clip_magnagenres = clip_magnagenres;
+%             db.magnagenres = magnagenres;
+%             db.magnagenre_childof = magnagenre_childof;
+
+        end
+        
+        % ---
+        % member functions
+        % ---
+        function out = genres(db)
+        % returns the magnatune genre list
+            
+            out = db.genredb.lexicon;
+        end
+        
+        function clips = clips_by_genre_name(db, name)
+        % returns all clips having the assigned genre
+        
+            clips = MTTClip( db.genredb.owner( name));   
+        end
+        
+        function out = tags(db)
+        % returns the magnatune artist list
+            
+            out = db.tagdb.lexicon;
+        end
+
+        
+        function out = artists(db)
+        % returns the magnatune artist list
+            
+            out = db.artistdb.lexicon;
+        end
+        
+        function clips = clips_by_artist_name(db, name)
+        % returns all clips having the assigned artist
+            
+            clips = MTTClip( db.artistdb.owner( name));   
+        end
+    end
+    
+    % ---
+    % Hidden Methods
+    % ---
+    methods (Hidden = true, Access = private)
+        
+        function out = clips_by_genre(db, genre_id)
+            % returns clip ids given a genre id
+            
+            pos = (db.clip_magnagenres(:,genre_id) == 1);
+            
+            % return clip ids, not pos
+            out = db.annots_ids(pos);
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureGenreBasicSm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,175 @@
+classdef MTTMixedFeatureGenreBasicSm < MTTAudioFeature & handle
+    % ---
+    %
+    % The usual worklow for these features constist of three steps
+    % 1. extract: extracts the basic single-file dependent features
+    % 2. define_global_transform: calculates the global feature
+    %       transformation parameters
+    % 3. finalise: applies the common transformations to a specific feature
+    % ---
+    
+    properties(Constant = true)
+        
+        % svn hook
+        my_revision = str2double(substr('$Rev$',  5, -1));
+    end
+       
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        my_params = MTTAudioFeature.inherited_params(...
+            'MTTAudioFeatureBasicSm', ...
+            ... % ---
+            ... % following are GenreBasic parameters
+            ... % --- 
+            'pct_genres', 1 ... % 1/100 percentile genre tags used
+        );
+    end
+    
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureGenreBasicSm(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+
+        % ---
+        % extract feature data by combining genre adn basicsm features
+        % ---
+        function data = extract(feature, clip)
+            
+            % ---
+            % get Basic Summary audio features. this includes possible
+            % local normalisations
+            % ---
+            basicsm = clip.audio_features_basicsm(feature.my_params);
+            
+            % ---
+            % get genre tag features
+            % ---
+            
+            genrebasic = clip.genre_features_basic(feature.my_params);
+            
+            % save to features data field
+            data.audio = basicsm;
+            data.tags = genrebasic;
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.vector_info = struct(); 
+            data.final.dim = 0;
+           
+            % save info data
+            data.info.type = 'MTTMixedFeatureGenreBasicSm';
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save parameters
+            data.info.params = feature.my_params;
+        end
+        
+        function define_global_transform(features)
+        % calculate and set normalization factors from the group of 
+        % input features. These features will be set for the full database
+        
+            if numel(features) == 1
+                error ('Insert feature array for this method');
+            end
+            
+            % ---
+            % We collect all the relevant basicsm 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	basicsm(i) = features(i).data.audio;
+            end
+            
+            % call the features own transsform function
+            basicsm.define_global_transform();
+            
+            % ---
+            % We collect all the relevant genretag 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	genrebasic(i) = features(i).data.tags;
+            end
+            
+            % call the features own transsform function
+            genrebasic.define_global_transform();
+            
+            % ---
+            % set common feature values for mixed features
+            % ---
+            features(1).my_db.set_common([1]); %trivial common
+        end
+        
+        
+        function finalise(feature)
+        % applies a final transformation and collects the 
+        % information of this feature within a single vector
+        % see info for types in specific dimensions
+
+            for i = 1:numel(feature)
+                
+                % check for neccesary parameters
+                if isempty(feature(i).my_db.commondb)
+
+                    error('Define the global transformation first');
+                end
+                
+                % ---
+                % finalise audio feature and get vector
+                % ---
+                basicsm = feature(i).data.audio;
+                basicsm.finalise();
+                
+                % finalise tag features
+                genrebasic = feature(i).data.tags;
+                genrebasic.finalise;
+                
+                % ---
+                % final data assembly
+                % ---
+                
+                % concatenate vectors
+                feature(i).data.final.vector = ...
+                    [basicsm.vector() ; genrebasic.vector()];
+                
+                % add feature dimensions
+                feature(i).data.final.dim = basicsm.dim + genrebasic.dim;
+                
+                % concatenate labels
+                feature(i).data.final.vector_info.labels = ...
+                    {basicsm.data.final.vector_info.labels{:}, ...
+                    genrebasic.data.final.vector_info.labels{:}};
+            end
+        end
+        
+        % ---
+        % destructor: do we really want to remove this 
+        % from the database? No, but 
+        % TODO: create marker for unused objects in db, and a cleanup
+        %  function
+        % ---
+        function delete(feature)
+            
+        end
+       
+        function visualise(feature)
+        % ---
+        % plots the different data types collected in this feature
+        % ---
+            for i = 1:numel(feature)
+                clip = MTTClip(feature(i).owner_id());
+            end
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureGenreBasicSmPCA.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,265 @@
+% --
+% This class loads and hanles the aufdio features included with the MTT
+% Library
+% --- 
+classdef MTTMixedFeatureGenreBasicSmPCA < MTTAudioFeature & handle
+    
+    properties(Constant = true)
+        
+        my_revision = str2double(substr('$Rev$',  5, -1));
+    end
+    
+    properties
+        
+        % ---
+        % Set default parameters
+        % ---
+        my_basetype = 'MTTMixedFeatureGenreBasicSm';
+        
+        my_params = MTTAudioFeature.inherited_params(...
+            'MTTMixedFeatureGenreBasicSm', ...
+            'min_pca_var', 0, ... % % fraction of variance to keep
+            'max_pca_coeffs', 0, ...% max. number of final coefficients
+            'norm_pre_pca', 1, ...% normalise pca coefficients after transformation
+            'norm_post_pca', 1 ...
+        );
+    end
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureGenreBasicSmPCA(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+        
+        % ---
+        % load feature data from xml file
+        % ---
+        function data = extract(feature, clip)
+        % load feature data by parsing xml
+            
+            global globalvars;
+            
+            % ---
+            % we extract the base features, and save 
+            % the pointers to these.
+            % the main work is then done in the define_global_transf
+            % and finalise functions.
+            % ---
+            data.basefeat = clip.features(feature.my_basetype,...
+                feature.my_params); 
+
+            % save info data
+            data.info.type = 'MTTMixedFeatureGenreBasicSmPCA';
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save param data
+            data.info.params = feature.my_params;
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.dim = 0;
+            data.final.vector_info.labels = {};
+        end
+        
+        function define_global_transform(features)
+            
+            if numel(features) == 1
+                error ('Insert feature array for this method');
+            end
+            
+            % ---
+            % We collect all the relevant genretag 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	basef(i) = features(i).data.basefeat;
+            end
+            
+            % call the features own transsform function
+            basef.define_global_transform();
+            
+            % ---
+            % finalise the basic features, and 
+            % get the feature vectors;
+            % ---
+            basef.finalise();
+            X = basef.vector();
+            
+            % check dataset dimension
+            if numel(features) < basef.dim;
+                
+                error ('Not enough feature vectors for PCA calculation. need %d samples', ...
+                    basef.dim);
+            end
+            
+            % ---
+            % NOTE: should the data be normalised and scaled to -1:1 
+            % instead of being in a range of 0-1 AND max-min = 1
+            % --- 
+            if features(1).my_params.norm_pre_pca == 1
+                                
+                [X, pstd] = mapminmax(X,-1,1);
+                common.pca.pre_norm = pstd;
+            elseif features(1).my_params.norm_pre_pca == 2
+                
+                [X, pstd] = mapstd(X,0,1);
+                common.pca.pre_norm = pstd;
+            end
+
+            
+            % ---
+            % get and apply the principal component analysis
+            % NOTE: the variance percentile is applied here, too.
+            % ---
+
+            [Y, ps] = processpca(X, 0);
+            common.pca.transform = ps;
+            
+            % ---
+            % get cumulative sum of variance, and decide on cutoff
+            % point
+            % --- 
+            v = cumsum(var(Y'));
+            v = v / max(v);
+            common.pca.transform.varpart = v;
+            
+            if features(1).my_params.min_pca_var > 0
+                            
+                min_pca_idx = find(v >= features(1).my_params.min_pca_var,1, 'first');
+                
+                % save into pca structure
+                common.pca.transform.yrows = min_pca_idx;
+                
+            end 
+            
+            % normalise pca values after processing
+            if features(1).my_params.norm_post_pca
+                
+                [Y,pmm] = mapminmax(Y,0,1);
+                common.pca.post_norm = pmm;
+                
+            end
+            
+            % ---
+            % set common feature values for mixed features
+            % ---
+            features(1).my_db.set_common(common);            
+            
+            % save the transformed features straight away!
+            features.finalise(Y);
+        end
+        
+        function finalise(feature, final)
+        % applies a final transformation and
+        % collects the information of this feature within a single vector
+        % see info for types in specific dimensions
+        
+            % determine size
+            if feature(1).my_params.max_pca_coeffs > 0
+
+                max_size = min(feature(1).common.pca.transform.yrows, ...
+                    feature(1).my_params.max_pca_coeffs);
+            else
+
+                max_size = feature(1).common.pca.transform.yrows;
+            end
+
+
+            % prepare information
+            info = {'PCA'};
+            if isfield(feature(1).common.pca.transform, 'varpart')
+                info(2:max_size) = num2cell(feature(1).common.pca.transform.varpart(2:max_size));
+            else
+                info(2:max_size) = num2cell(2:max_size);
+            end
+
+        
+            % check if features have been finalised already
+            if nargin == 2 && isempty(final)
+                
+                % the final vector etc already are set to zero;
+                return;
+                
+            elseif nargin == 2 && (numel(feature) == size(final, 2))
+                    
+                for i = 1:numel(feature)
+                    
+                    % save final vector and description
+                    feature(i).data.final.vector = final(1:max_size,i);
+                    feature(i).data.final.dim = max_size;
+                    feature(i).data.final.vector_info.labels = info;
+                end
+                
+            else
+            % features have to be transformed first
+            % ---
+            % TODO: this code remains untested
+            % ---
+            
+            % check for neccesary parameters
+                if isempty(feature(1).my_db.commondb)
+
+                    error('Define the global transformation first')
+                    return;
+                end
+             
+
+                for i = 1:numel(feature)
+
+                    % check for neccesary parameters
+                    if isempty(feature(i).my_db.commondb)
+
+                        error('Define the global transformation first')
+                    end
+                    
+                    % ---
+                    % get feature vector and apply transformation
+                    % ---
+                    X = feature(i).data.basefeat.vector();
+                    
+                    % ---
+                    % apply normalisation used for removing mean 
+                    % in training data
+                    % ---
+                    if feature(1).my_params.norm_pre_pca == 1
+                                
+                        X = mapminmax('apply', X, feature(1).common.pca.pre_norm);
+                    elseif feature(1).my_params.norm_pre_pca == 2
+
+                        X = mapstd('apply', X, feature(1).common.pca.pre_norm);
+                    end
+ 
+                    % apply PCA transform
+                    vec = processpca('apply', X, feature(1).common.pca.transform);
+                    
+                    % normalise pca values after transformation
+                    if feature(1).my_params.norm_post_pca
+
+                        vec = mapminmax('apply', vec,...
+                            feature(1).common.pca.post_norm);
+                    end
+                    
+                    % ---
+                    % cut vector to final size. 
+                    % NOTE: this should be done before
+                    % transformation to reduce computation time
+                    % ---
+                    vec = vec(1:max_size);
+                    
+                    % save final vector and description
+                    feature(i).data.final.vector = vec;
+                    feature(i).data.final.dim = numel(vec);
+                    feature(i).data.final.vector_info.labels = info;
+                end
+            end
+        end
+        
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureGenreRandom.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,148 @@
+classdef MTTMixedFeatureGenreRandom < MTTAudioFeature & handle
+    % ---
+    %
+    % The usual worklow for these features constist of three steps
+    % 1. extract: extracts the basic single-file dependent features
+    % 2. define_global_transform: calculates the global feature
+    %       transformation parameters
+    % 3. finalise: applies the common transformations to a specific feature
+    % ---
+    
+    properties(Constant = true)
+        
+        % svn hook
+        my_revision = str2double(substr('$Rev: 455 $',  5, -1));
+    end
+       
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        my_params = MTTAudioFeature.inherited_params(...
+            'MTTTagFeatureGenreBasic', ...
+            ... % ---
+            ... % following are Random parameters
+            ... % --- 
+            'nrandoms', 100 ...
+        );
+    end
+    
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureGenreRandom(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+
+        % ---
+        % extract feature data by combining genre adn basicsm features
+        % ---
+        function data = extract(feature, clip)
+            
+            % ---
+            % get MTTMixedFeatureGenreBasicSm this includes possible
+            % local normalisations
+            % ---
+            data.tags = clip.features('MTTTagFeatureGenreBasic',feature.my_params);
+            
+            % ---
+            % get genre tag features
+            % ---
+            
+            data.random = clip.features('MTTRandomFeature',feature.my_params);
+            
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.vector_info = struct(); 
+            data.final.dim = 0;
+           
+            % save info data
+            data.info.type = class(feature);
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save parameters
+            data.info.params = feature.my_params;
+        end
+        
+        function define_global_transform(features)
+        % calculate and set normalization factors from the group of 
+        % input features. These features will be set for the full database
+        
+            if numel(features) == 1
+                error ('Insert feature array for this method');
+            end
+            
+            % ---
+            % We collect all the relevant tag 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	tags(i) = features(i).data.tags;
+            end
+            
+            % call the features own transsform function
+            tags.define_global_transform();
+            
+            % ---
+            % Random features have no global transform
+            % ---
+
+            % ---
+            % set common feature values for mixed features
+            % ---
+            features(1).my_db.set_common([1]); %trivial common
+        end
+        
+        
+        function finalise(feature)
+        % applies a final transformation and collects the 
+        % information of this feature within a single vector
+        % see info for types in specific dimensions
+
+            for i = 1:numel(feature)
+                
+                % check for neccesary parameters
+                if isempty(feature(i).my_db.commondb)
+
+                    error('Define the global transformation first');
+                end
+                
+                % ---
+                % final data assembly
+                % ---
+                % concatenate vectors
+                feature(i).data.final.vector = ...
+                    [feature(i).data.tags.vector() ;...
+                    feature(i).data.random.vector()];
+                
+                % add up feature dimensions
+                feature(i).data.final.dim = feature(i).data.tags.dim...
+                    + feature(i).data.random.dim;
+                
+                % concatenate labels
+                lbl1 = feature(i).data.tags.labels();
+                lbl2 = feature(i).data.random.labels();
+                feature(i).data.final.vector_info.labels = ...
+                    {lbl1{:}, lbl2{:}};
+            end
+        end
+        
+        % ---
+        % destructor: do we really want to remove this 
+        % from the database? No, but 
+        % TODO: create marker for unused objects in db, and a cleanup
+        %  function
+        % ---
+        function delete(feature)
+            
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureSlaney08GenreBasicSm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,159 @@
+classdef MTTMixedFeatureSlaney08GenreBasicSm < MTTAudioFeature & handle
+    % ---
+    % 
+    % 
+    % The usual worklow for these features constist of three steps
+    % 1. extract: extracts the basic single-file dependent features
+    % 2. define_global_transform: calculates the global feature
+    %       transformation parameters
+    % 3. finalise: applies the common transformations to a specific feature
+    % ---
+    
+    properties(Constant = true)
+        
+        % svn hook
+        my_revision = str2double(substr('$Rev$',  5, -1));
+    end
+       
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        my_params = MTTAudioFeature.inherited_params(...
+            'MTTMixedFeatureGenreBasicSm', ...
+            ... % ---
+            ... % following are Slaney08 parameters
+            ... % --- 
+            'norm_mttstats', 1, ... % 
+            'whiten_mttstats', 0, ... % NOTE: whitening as in slaney?? 
+            'select_mttstats', 1 ...% select certain features
+        );
+    end
+    
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureSlaney08GenreBasicSm(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+
+        % ---
+        % extract feature data by combining genre adn basicsm features
+        % ---
+        function data = extract(feature, clip)
+            
+            % ---
+            % get MTTMixedFeatureGenreBasicSm this includes possible
+            % local normalisations
+            % ---
+            data.genrebasicsm = clip.features('MTTMixedFeatureGenreBasicSm',feature.my_params);
+            
+            % ---
+            % get genre tag features
+            % ---
+            
+            data.mttstats = clip.features('MTTAudioFeatureSlaney08',feature.my_params);
+            
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.vector_info = struct(); 
+            data.final.dim = 0;
+           
+            % save info data
+            data.info.type = class(feature);
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save parameters
+            data.info.params = feature.my_params;
+        end
+        
+        function define_global_transform(features)
+        % calculate and set normalization factors from the group of 
+        % input features. These features will be set for the full database
+        
+            if numel(features) == 1
+                error ('Insert feature array for this method');
+            end
+            
+            % ---
+            % We collect all the relevant genrebasicsm 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	genrebasicsm(i) = features(i).data.genrebasicsm;
+            end
+            
+            % call the features own transsform function
+            genrebasicsm.define_global_transform();
+            
+            % ---
+            % We collect all the relevant mttstats 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	mttstats(i) = features(i).data.mttstats;
+            end
+            
+            % call the features own transsform function
+            mttstats.define_global_transform();
+            
+            % ---
+            % set common feature values for mixed features
+            % ---
+            features(1).my_db.set_common([1]); %trivial common
+        end
+        
+        
+        function finalise(feature)
+        % applies a final transformation and collects the 
+        % information of this feature within a single vector
+        % see info for types in specific dimensions
+
+            for i = 1:numel(feature)
+                
+                % check for neccesary parameters
+                if isempty(feature(i).my_db.commondb)
+
+                    error('Define the global transformation first');
+                end
+                
+                % ---
+                % final data assembly
+                % ---
+                % concatenate vectors
+                feature(i).data.final.vector = ...
+                    [feature(i).data.genrebasicsm.vector() ;...
+                    feature(i).data.mttstats.vector()];
+                
+                % add up feature dimensions
+                feature(i).data.final.dim = feature(i).data.genrebasicsm.dim...
+                    + feature(i).data.mttstats.dim;
+                
+                % concatenate labels
+                lbl1 = feature(i).data.genrebasicsm.labels();
+                lbl2 = feature(i).data.mttstats.labels();
+                feature(i).data.final.vector_info.labels = ...
+                    {lbl1{:}, lbl2{:}};
+            end
+        end
+        
+        % ---
+        % destructor: do we really want to remove this 
+        % from the database? No, but 
+        % TODO: create marker for unused objects in db, and a cleanup
+        %  function
+        % ---
+        function delete(feature)
+            
+        end
+       
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureSlaney08GenreBasicSmPCA.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,264 @@
+% --
+% This class loads and hanles the aufdio features included with the MTT
+% Library
+% --- 
+classdef MTTMixedFeatureSlaney08GenreBasicSmPCA < MTTAudioFeature & handle
+    
+    properties(Constant = true)
+        
+        my_revision = str2double(substr('$Rev$',  5, -1));
+    end
+    
+    properties
+        
+        % ---
+        % Set default parameters
+        % ---
+        my_basetype = 'MTTMixedFeatureSlaney08GenreBasicSm';
+        
+        my_params = MTTAudioFeature.inherited_params(...
+            'MTTMixedFeatureSlaney08GenreBasicSm', ...
+            'min_pca_var', 0, ... % fraction of variance to keep
+            'max_pca_coeffs', 0, ...% max. number of final coefficients
+            'norm_pre_pca', 1, ...% normalise pca coefficients after transformation
+            'norm_post_pca', 1 ...
+        );
+    end
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureSlaney08GenreBasicSmPCA(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+        
+        % ---
+        % load feature data from xml file
+        % ---
+        function data = extract(feature, clip)
+        % load feature data by parsing xml
+            
+            global globalvars;
+            
+            % ---
+            % we extract the base features, and save 
+            % the pointers to these.
+            % the main work is then done in the define_global_transf
+            % and finalise functions.
+            % ---
+            data.basefeat = clip.features(feature.my_basetype,...
+                feature.my_params); 
+
+            % save info data
+            data.info.type = class(feature);
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save param data
+            data.info.params = feature.my_params;
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.dim = 0;
+            data.final.vector_info.labels = {};
+        end
+        
+        function define_global_transform(features)
+            
+            if numel(features) == 1
+                error ('Insert feature array for this method');
+            end
+            
+            % ---
+            % We collect all the relevant genretag 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	basef(i) = features(i).data.basefeat;
+            end
+            
+            % call the features own transsform function
+            basef.define_global_transform();
+            
+            % ---
+            % finalise the basic features, and 
+            % get the feature vectors;
+            % ---
+            X = basef.vector();
+            
+            % check dataset dimension
+            if numel(features) < basef.dim;
+                
+                error ('Not enough feature vectors for PCA calculation. need %d samples', ...
+                    basef.dim);
+            end
+            
+            % ---
+            % NOTE: should the data be normalised and scaled to -1:1 
+            % instead of being in a range of 0-1 AND max-min = 1
+            % --- 
+            if features(1).my_params.norm_pre_pca == 1
+                                
+                [X, pstd] = mapminmax(X,-1,1);
+                common.pca.pre_norm = pstd;
+            elseif features(1).my_params.norm_pre_pca == 2
+                
+                [X, pstd] = mapstd(X,0,1);
+                common.pca.pre_norm = pstd;
+            end
+
+            
+            % ---
+            % get and apply the principal component analysis
+            % NOTE: the variance percentile is applied here, too.
+            % ---
+
+            [Y, ps] = processpca(X, 0);
+            common.pca.transform = ps;
+            
+            % ---
+            % get cumulative sum of variance, and decide on cutoff
+            % point
+            % --- 
+            v = cumsum(var(Y'));
+            v = v / max(v);
+            common.pca.transform.varpart = v;
+            
+            if features(1).my_params.min_pca_var > 0
+                            
+                min_pca_idx = find(v >= features(1).my_params.min_pca_var,1, 'first');
+                
+                % save into pca structure
+                common.pca.transform.yrows = min_pca_idx;
+                
+            end 
+            
+            % normalise pca values after processing
+            if features(1).my_params.norm_post_pca
+                
+                [Y,pmm] = mapminmax(Y,0,1);
+                common.pca.post_norm = pmm;
+                
+            end
+            
+            % ---
+            % set common feature values for mixed features
+            % ---
+            features(1).my_db.set_common(common);            
+            
+            % save the transformed features straight away!
+            features.finalise(Y);
+        end
+        
+        function finalise(feature, final)
+        % applies a final transformation and
+        % collects the information of this feature within a single vector
+        % see info for types in specific dimensions
+        
+            % determine size
+            if feature(1).my_params.max_pca_coeffs > 0
+
+                max_size = min(feature(1).common.pca.transform.yrows, ...
+                    feature(1).my_params.max_pca_coeffs);
+            else
+
+                max_size = feature(1).common.pca.transform.yrows;
+            end
+
+
+            % prepare information
+            info = {'PCA'};
+            if isfield(feature(1).common.pca.transform, 'varpart')
+                info(2:max_size) = num2cell(feature(1).common.pca.transform.varpart(2:max_size));
+            else
+                info(2:max_size) = num2cell(2:max_size);
+            end
+
+        
+            % check if features have been finalised already
+            if nargin == 2 && isempty(final)
+                
+                % the final vector etc already are set to zero;
+                return;
+                
+            elseif nargin == 2 && (numel(feature) == size(final, 2))
+                    
+                for i = 1:numel(feature)
+                    
+                    % save final vector and description
+                    feature(i).data.final.vector = final(1:max_size,i);
+                    feature(i).data.final.dim = max_size;
+                    feature(i).data.final.vector_info.labels = info;
+                end
+                
+            else
+            % features have to be transformed first
+            % ---
+            % TODO: this code remains untested
+            % ---
+            
+            % check for neccesary parameters
+                if isempty(feature(1).my_db.commondb)
+
+                    error('Define the global transformation first')
+                    return;
+                end
+             
+
+                for i = 1:numel(feature)
+
+                    % check for neccesary parameters
+                    if isempty(feature(i).my_db.commondb)
+
+                        error('Define the global transformation first')
+                    end
+                    
+                    % ---
+                    % get feature vector and apply transformation
+                    % ---
+                    X = feature(i).data.basefeat.vector();
+                    
+                    % ---
+                    % apply normalisation used for removing mean 
+                    % in training data
+                    % ---
+                    if feature(1).my_params.norm_pre_pca == 1
+                                
+                        X = mapminmax('apply', X, feature(1).common.pca.pre_norm);
+                    elseif feature(1).my_params.norm_pre_pca == 2
+
+                        X = mapstd('apply', X, feature(1).common.pca.pre_norm);
+                    end
+ 
+                    % apply PCA transform
+                    vec = processpca('apply', X, feature(1).common.pca.transform);
+                    
+                    % normalise pca values after transformation
+                    if feature(1).my_params.norm_post_pca
+
+                        vec = mapminmax('apply', vec,...
+                            feature(1).common.pca.post_norm);
+                    end
+                    
+                    % ---
+                    % cut vector to final size. 
+                    % NOTE: this should be done before
+                    % transformation to reduce computation time
+                    % ---
+                    vec = vec(1:max_size);
+                    
+                    % save final vector and description
+                    feature(i).data.final.vector = vec;
+                    feature(i).data.final.dim = numel(vec);
+                    feature(i).data.final.vector_info.labels = info;
+                end
+            end
+        end
+        
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureSlaney08GenreBasicSmRBM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,263 @@
+% --
+% This class loads and hanles the aufdio features included with the MTT
+% Library
+% 
+% Features are extracted and then porcessed by son's RBM toolbox
+% --- 
+classdef MTTMixedFeatureSlaney08GenreBasicSmRBM < MTTAudioFeature & handle
+    
+    properties(Constant = true)
+        
+        my_revision = str2double(substr('$Rev: 457 $',  5, -1));
+    end
+    
+    properties
+        
+        % ---
+        % Set default parameters
+        % ---
+        my_basetype = 'MTTMixedFeatureSlaney08GenreBasicSm';
+        
+        my_params = MTTAudioFeature.inherited_params(...
+            'MTTMixedFeatureSlaney08GenreBasicSm', ...
+            ... % --- 
+            ... % Following: RBM params
+            ... % ---
+            'norm_pre_rbm', 0, ... % norm before RBM?
+            'norm_post_rbm', 0, ... % norm before RBM?
+            'rbm_hidNum',200, ...   % number of hidden units
+            'rbm_eNum', 100, ...
+            'rbm_bNum', 1, ...
+            'rbm_gNum', 1, ...
+            'rbm_lrate1' , 0.05, ... % initial learning rate
+            'rbm_lrate2', 0.1, ... %  learning rate
+            'rbm_momentum', 0.5, ...
+            'rbm_cost', 0.00002, ... % cost function
+            'rbm_N', 50, ...
+            'rbm_MAX_INC', 10 ...
+        );
+    end
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureSlaney08GenreBasicSmRBM(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+        
+        % ---
+        % load feature data from xml file
+        % ---
+        function data = extract(feature, clip)
+        % load feature data by parsing xml
+            
+            global globalvars;
+            
+            % ---
+            % we extract the base features, and save 
+            % the pointers to these.
+            % the main work is then done in the define_global_transf
+            % and finalise functions.
+            % ---
+            data.basefeat = clip.features(feature.my_basetype,...
+                feature.my_params); 
+
+            % save info data
+            data.info.type = class(feature);
+            data.info.owner = clip;
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save param data
+            data.info.params = feature.my_params;
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.dim = 0;
+            data.final.vector_info.labels = {};
+        end
+        
+        function define_global_transform(features)
+            
+            if numel(features) == 1
+                error ('Insert feature array for this method');
+            end
+            
+            % ---
+            % We collect all the relevant genretag 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	basef(i) = features(i).data.basefeat;
+            end
+            
+            % call the features own transsform function
+            basef.define_global_transform();
+            
+            % ---
+            % finalise the basic features, and 
+            % get the feature vectors;
+            % ---
+            X = basef.vector();
+            
+            % check dataset dimension
+            if numel(features) < basef.dim;
+                
+                error ('Not enough feature vectors for RBM calculation. need %d samples', ...
+                    basef.dim);
+            end
+            
+            % ---
+            % NOTE: should the data be normalised and scaled to -1:1 
+            % instead of being in a range of 0-1 AND max-min = 1
+            % --- 
+            if features(1).my_params.norm_pre_rbm == 1
+                                
+                [X, pstd] = mapminmax(X,-1,1);
+                common.rbm.pre_norm = pstd;
+            elseif features(1).my_params.norm_pre_rbm == 2
+                
+                [X, pstd] = mapstd(X,0,1);
+                common.rbm.pre_norm = pstd;
+            end
+
+            
+            % ---
+            % TRAIN RBM
+            % ---
+            conf.sNum   = size(X,2);
+            conf.eNum   = features(1).my_params.rbm_eNum;
+            conf.bNum   = features(1).my_params.rbm_bNum;
+            conf.gNum   = features(1).my_params.rbm_gNum;
+            conf.hidNum   = features(1).my_params.rbm_hidNum;
+            conf.MAX_INC   = features(1).my_params.rbm_MAX_INC;
+            conf.N   = features(1).my_params.rbm_N;
+            conf.params = [ features(1).my_params.rbm_lrate1 features(1).my_params.rbm_lrate2 ...
+                           features(1).my_params.rbm_momentum features(1).my_params.rbm_cost];          
+            W1 = zeros(0,0);
+            [common.rbm.W1 common.rbm.vB1 common.rbm.hB1] = training_rbm_(conf,W1,X');
+            
+            % ---
+            % This transforms the features using the learnt RBM
+            % ---
+            Y = logistic(X' * common.rbm.W1 + repmat(common.rbm.hB1,conf.sNum,1))';
+
+            
+            % normalise values after processing
+            if features(1).my_params.norm_post_rbm
+                
+                [Y,pmm] = mapminmax(Y,0,1);
+                common.rbm.post_norm = pmm;
+            end
+            
+            % ---
+            % set common feature values for mixed features
+            % ---
+            features(1).my_db.set_common(common);            
+            
+            % save the transformed features straight away!
+            features.finalise(Y);
+        end
+        
+        function finalise(feature, final)
+        % applies a final transformation and
+        % collects the information of this feature within a single vector
+        % see info for types in specific dimensions
+        
+            max_size = feature(1).my_params.rbm_hidNum;
+
+            % prepare information
+            info = {'RBM'};
+            info(2:max_size) = num2cell(2:max_size);
+        
+            % check if features have been finalised already
+            if nargin == 2 && isempty(final)
+                
+                % the final vector etc already are set to zero;
+                return;
+                
+            elseif nargin == 2 && (numel(feature) == size(final, 2))
+                    
+                for i = 1:numel(feature)
+                    
+                    % save final vector and description
+                    feature(i).data.final.vector = final(:,i);
+                    feature(i).data.final.dim = max_size;
+                    feature(i).data.final.vector_info.labels = info;
+                end
+                
+            else
+            % features have to be transformed first
+            % ---
+            % TODO: this code remains untested
+            % ---
+            
+            % check for neccesary parameters
+                if isempty(feature(1).my_db.commondb)
+
+                    error('Define the global transformation first')
+                    return;
+                end
+             
+
+                for i = 1:numel(feature)
+
+                    % check for neccesary parameters
+                    if isempty(feature(i).my_db.commondb)
+
+                        error('Define the global transformation first')
+                    end
+                    
+                    % ---
+                    % get feature vector and apply transformation
+                    % ---
+                    X = feature(i).data.basefeat.vector();
+                    
+                    % ---
+                    % apply normalisation used for removing mean 
+                    % in training data
+                    % ---
+                    if feature(1).my_params.norm_pre_rbm == 1
+                                
+                        X = mapminmax('apply', X, feature(1).common.rbm.pre_norm);
+                    elseif feature(1).my_params.norm_pre_rbm == 2
+
+                        X = mapstd('apply', X, feature(1).common.rbm.pre_norm);
+                    end
+            
+                    % ---
+                    % RBM: This transforms the features using the learnt RBM
+                    % ---
+                    conf.sNum = size(X,1);
+                    vec = logistic(X * common.rbm.W1 + repmat(common.rbm.hB1,conf.sNum,1));
+
+                    
+                    % normalise pca values after transformation
+                    if feature(1).my_params.norm_post_rbm
+
+                        vec = mapminmax('apply', vec,...
+                            feature(1).common.rbm.post_norm);
+                    end
+                    
+                    % ---
+                    % cut vector to final size. 
+                    % NOTE: this should be done before
+                    % transformation to reduce computation time
+                    % ---
+                    vec = vec(1:max_size);
+                    
+                    % save final vector and description
+                    feature(i).data.final.vector = vec;
+                    feature(i).data.final.dim = numel(vec);
+                    feature(i).data.final.vector_info.labels = info;
+                end
+            end
+        end
+        
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureSon.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,217 @@
+classdef MTTMixedFeatureSon < MTTAudioFeature & handle
+    % ---
+    % This Class contains a wrapper for sons feature extraction
+    %
+    % The usual workflow for these features constist of three steps
+    % 1. extract: extracts the basic single-file dependent features
+    % 2. define_global_transform: calculates the global feature
+    %       transformation parameters
+    % 3. finalise: applies the common transformations to a specific feature
+    % ---
+    
+    properties(Constant = true)
+        
+        % svn hook
+        my_revision = str2double(substr('$Rev: 741 $',  5, -1));
+    end
+
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        my_params = struct( ...
+            'son_filename','features_rbm_50x1010', ...
+            'son_conf', '' ...
+        );
+    end
+    
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureSon(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+
+        end
+        % ---
+        % extract feature data from raw audio features
+        % ---
+        function data = extract(feature, clip)
+            % ---
+            % get features. this includes possible
+            % local normalisations
+            % ---
+            
+            global globalvars;
+            global comparison_ids;
+            global sonfeatbase;
+            global db_MTTClip;
+            
+            if isempty(sonfeatbase);
+                sonfeatbase = load(feature.my_params.son_filename);
+            end
+            %
+            
+            % ---
+            % note: this should reference clip.my_db
+            % get the actual clip id
+            idx = db_MTTClip.comparison_ids(clip.id);
+            
+            % ---
+            % NOTE: we just copy everything in a big matrix and then
+            % normalise the data later
+            % ---
+            if isfield(sonfeatbase,'nfvec')
+                rawf = sonfeatbase.nfvec;
+            elseif isfield(sonfeatbase,'sonfeatures')
+                rawf = sonfeatbase.sonfeatures';
+            end
+            
+            if idx <= size(rawf,2)
+                
+                 % get the vector from loaded data
+                data.sonraw = rawf(:,idx);
+                
+            else
+                % ---
+                % CAVE: Clip indices outside 
+                % the range  of the supplied mat file
+                % are filled up with zeros
+                % ---
+                data.sonraw = zeros(size(rawf,1),1);
+            end
+            
+           
+            
+            data.vector_info = {'Sonfeat'};
+            % padd further info struct
+            data.vector_info(end+1:size(data.sonraw,1)) =...
+                cell(size(data.sonraw,1) - numel(data.vector_info) , 1); 
+            
+            % ---
+            % prepare field for final features
+            % ---
+            data.final.vector = [];
+            data.final.vector_info = struct(); 
+            data.final.dim = 0;
+           
+            % save info data
+            data.info.type = 'MTTMixedFeatureSon';
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save parameters
+            data.info.params = feature.my_params;
+        end
+        
+        function define_global_transform(features)
+        % calculate and set normalization factors from the group of 
+        % input features. These features will be set for the full database
+         
+            final = zeros(size(features(1).data.sonraw,1), numel(features));
+            for i = 1:numel(features)
+                 if ~isempty(features(i).data.sonraw)
+                    final(:,i) = features(i).data.sonraw;
+                 end
+            end
+            
+            % set common to 1 to tell normalisation is done
+            features(1).my_db.set_common([1]);
+            
+            % save the normalised features straight away!
+            features.finalise(final);
+        end
+        
+        
+        function finalise(features, final)
+        % applies a final transformation and
+        % collects the information of this feature within a single vector
+        % see info for types in specific dimensions
+        % check if features have been finalised already
+
+        % ---
+        % set feature labelling
+        % ---
+        
+        info = {};
+                
+        % ---
+        % construct resulting feature vector out of features
+        % ---
+            if nargin == 2 && isempty(final)
+                
+                % the final vector etc already are set to zero;
+                return;
+                
+            elseif nargin == 2 && (numel(features) == size(final, 2))
+                % the features have already been preassembled
+                
+                for i = 1:numel(features)
+
+                    % check for neccesary parameters
+                    if isempty(features(i).my_db.commondb)
+
+                        error('Define the global transformation first')
+                        return;
+                    end
+
+                    features(i).data.final.vector = final(:,i);
+                    features(i).data.final.dim = size(final,1);
+
+                    % fill up info struct and append to feature
+                    features(i).data.final.vector_info.labels = ...
+                        features(i).data.vector_info;
+                end
+            else
+                % ---
+                % if features have been added after gettin gnormalisation
+                % parameters, ther should be still an option to include
+                % them
+                % ---
+               
+                 for i = 1:numel(features)
+
+                    % check for neccesary parameters
+                    if isempty(features(i).my_db.commondb)
+
+                        error('Define the global transformation first')
+                        return;
+                    end
+                    
+                    final = zeros(numel(features(1).data.sonraw), numel(features));
+                    for i = 1:numel(features)
+                         if ~isempty(features(i).data.sonraw)
+                            final(:,i) = features(i).data.sonraw;
+                         end
+                    end
+                    features(i).data.final.vector = final;
+                    features(i).data.final.dim = size(final,1);
+
+                    % fill up info struct and append to feature
+                    features(i).data.final.vector_info.labels = ...
+                        features(i).data.vector_info;
+                 end
+
+            end
+            
+            % ---
+            % TODO: Maybe delete more basic features again at this point?
+            % ---
+        end
+
+        % ---
+        % destructor: do we really want to remove this 
+        % from the database? No, but 
+        % TODO: create marker for unused objects in db, and a cleanup
+        %  function
+        % ---
+        function delete(feature)
+            
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureSonRBM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,262 @@
+% --
+% This class loads and hanles the aufdio features included with the MTT
+% Library
+% 
+% Features are extracted and then porcessed by son's RBM toolbox
+% --- 
+classdef MTTMixedFeatureSonRBM < MTTAudioFeature & handle
+    
+    properties(Constant = true)
+        
+        my_revision = str2double(substr('$Rev: 457 $',  5, -1));
+    end
+    
+    properties
+        
+        % ---
+        % Set default parameters
+        % ---
+        my_basetype = 'MTTMixedFeatureSon';
+        
+        my_params = MTTAudioFeature.inherited_params(...
+            'MTTMixedFeatureSon', ...
+            ... % --- 
+            ... % Following: RBM params
+            ... % ---
+            'norm_pre_rbm', 0, ... % norm before RBM?
+            'norm_post_rbm', 0, ... % norm before RBM?
+            'rbm_hidNum',200, ...   % number of hidden units
+            'rbm_eNum', 100, ...
+            'rbm_bNum', 1, ...
+            'rbm_gNum', 1, ...
+            'rbm_lrate1' , 0.05, ... % initial learning rate
+            'rbm_lrate2', 0.1, ... %  learning rate
+            'rbm_momentum', 0.5, ...
+            'rbm_cost', 0.00002, ... % cost function
+            'rbm_N', 50, ...
+            'rbm_MAX_INC', 10 ...
+        );
+    end
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureSonRBM(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+        
+        % ---
+        % load feature data from xml file
+        % ---
+        function data = extract(feature, clip)
+        % load feature data by parsing xml
+            
+            global globalvars;
+            
+            % ---
+            % we extract the base features, and save 
+            % the pointers to these.
+            % the main work is then done in the define_global_transf
+            % and finalise functions.
+            % ---
+            data.basefeat = clip.features(feature.my_basetype,...
+                feature.my_params); 
+
+            % save info data
+            data.info.type = class(feature);
+            data.info.owner = clip;
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save param data
+            data.info.params = feature.my_params;
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.dim = 0;
+            data.final.vector_info.labels = {};
+        end
+        
+        function define_global_transform(features)
+            
+            if numel(features) == 1
+                error ('Insert feature array for this method');
+            end
+            
+            % ---
+            % We collect all the relevant genretag 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	basef(i) = features(i).data.basefeat;
+            end
+            
+            % call the features own transsform function
+            basef.define_global_transform();
+            
+            % ---
+            % finalise the basic features, and 
+            % get the feature vectors;
+            % ---
+            X = basef.vector();
+            
+            % check dataset dimension
+            if numel(features) < basef.dim;
+                
+                error ('Not enough feature vectors for RBM calculation. need %d samples', ...
+                    basef.dim);
+            end
+            
+            % ---
+            % NOTE: should the data be normalised and scaled to -1:1 
+            % instead of being in a range of 0-1 AND max-min = 1
+            % --- 
+            if features(1).my_params.norm_pre_rbm == 1
+                                
+                [X, pstd] = mapminmax(X,-1,1);
+                common.rbm.pre_norm = pstd;
+            elseif features(1).my_params.norm_pre_rbm == 2
+                
+                [X, pstd] = mapstd(X,0,1);
+                common.rbm.pre_norm = pstd;
+            end
+
+            
+            % ---
+            % TRAIN RBM
+            % ---
+            conf.sNum   = size(X,2);
+            conf.eNum   = features(1).my_params.rbm_eNum;
+            conf.bNum   = features(1).my_params.rbm_bNum;
+            conf.gNum   = features(1).my_params.rbm_gNum;
+            conf.hidNum   = features(1).my_params.rbm_hidNum;
+            conf.MAX_INC   = features(1).my_params.rbm_MAX_INC;
+            conf.N   = features(1).my_params.rbm_N;
+            conf.params = [ features(1).my_params.rbm_lrate1 features(1).my_params.rbm_lrate2 ...
+                           features(1).my_params.rbm_momentum features(1).my_params.rbm_cost];          
+            W1 = zeros(0,0);
+            [common.rbm.W1 common.rbm.vB1 common.rbm.hB1] = training_rbm_(conf,W1,X');
+            
+            % ---
+            % This transforms the features using the learnt RBM
+            % ---
+            Y = logistic(X' * common.rbm.W1 + repmat(common.rbm.hB1,conf.sNum,1))';
+
+            
+            % normalise values after processing
+            if features(1).my_params.norm_post_rbm
+                
+                [Y,pmm] = mapminmax(Y,0,1);
+                common.rbm.post_norm = pmm;
+            end
+            
+            % ---
+            % set common feature values for mixed features
+            % ---
+            features(1).my_db.set_common(common);            
+            
+            % save the transformed features straight away!
+            features.finalise(Y);
+        end
+        
+        function finalise(feature, final)
+        % applies a final transformation and
+        % collects the information of this feature within a single vector
+        % see info for types in specific dimensions
+        
+            max_size = feature(1).my_params.rbm_hidNum;
+
+            % prepare information
+            info = {'RBM'};
+            info(2:max_size) = num2cell(2:max_size);
+        
+            % check if features have been finalised already
+            if nargin == 2 && isempty(final)
+                
+                % the final vector etc already are set to zero;
+                return;
+                
+            elseif nargin == 2 && (numel(feature) == size(final, 2))
+                    
+                for i = 1:numel(feature)
+                    
+                    % save final vector and description
+                    feature(i).data.final.vector = final(:,i);
+                    feature(i).data.final.dim = max_size;
+                    feature(i).data.final.vector_info.labels = info;
+                end
+                
+            else
+            % features have to be transformed first
+            % ---
+            % TODO: this code remains untested
+            % ---
+            
+            % check for neccesary parameters
+                if isempty(feature(1).my_db.commondb)
+
+                    error('Define the global transformation first')
+                    return;
+                end
+             
+
+                for i = 1:numel(feature)
+
+                    % check for neccesary parameters
+                    if isempty(feature(i).my_db.commondb)
+
+                        error('Define the global transformation first')
+                    end
+                    
+                    % ---
+                    % get feature vector and apply transformation
+                    % ---
+                    X = feature(i).data.basefeat.vector();
+                    
+                    % ---
+                    % apply normalisation used for removing mean 
+                    % in training data
+                    % ---
+                    if feature(1).my_params.norm_pre_rbm == 1
+                                
+                        X = mapminmax('apply', X, feature(1).common.rbm.pre_norm);
+                    elseif feature(1).my_params.norm_pre_rbm == 2
+
+                        X = mapstd('apply', X, feature(1).common.rbm.pre_norm);
+                    end
+            
+                    % ---
+                    % RBM: This transforms the features using the learnt RBM
+                    % ---
+                    conf.sNum = size(X,1);
+                    vec = logistic(X * common.rbm.W1 + repmat(common.rbm.hB1,conf.sNum,1));
+
+                    
+                    % normalise pca values after transformation
+                    if feature(1).my_params.norm_post_rbm
+
+                        vec = mapminmax('apply', vec,...
+                            feature(1).common.rbm.post_norm);
+                    end
+                    
+                    % ---
+                    % cut vector to final size. 
+                    % NOTE: this should be done before
+                    % transformation to reduce computation time
+                    % ---
+                    vec = vec(1:max_size);
+                    
+                    % save final vector and description
+                    feature(i).data.final.vector = vec;
+                    feature(i).data.final.dim = numel(vec);
+                    feature(i).data.final.vector_info.labels = info;
+                end
+            end
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureStober11.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,273 @@
+classdef MTTMixedFeatureStober11 < MTTAudioFeature & handle
+    % ---
+    % This Class contains 
+    % features are extracted 
+    % as described in Slaney 08 - LEARNING A METRIC FOR MUSIC SIMILARITY
+    %
+    % The usual workflow for these features constist of three steps
+    % 1. extract: extracts the basic single-file dependent features
+    % 2. define_global_transform: calculates the global feature
+    %       transformation parameters
+    % 3. finalise: applies the common transformations to a specific feature
+    % ---
+    
+    properties(Constant = true)
+        
+        % svn hook
+        my_revision = str2double(substr('$Rev$',  5, -1));
+    end
+
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        my_params = struct(...
+            'stob_lowaudio', 1, ...
+            'stob_highaudio', 1, ... % 
+            'stob_tags', 1, ... %
+            'stob_norm', 1 ...
+            );
+    end
+    
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureStober11(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+
+        end
+        % ---
+        % extract feature data from raw audio features
+        % ---
+        function data = extract(feature, clip)
+            % ---
+            % get features. this includes possible
+            % local normalisations
+            % ---
+            
+            global globalvars;
+            global stobbase;
+            
+            if isempty(stobbase);
+                stobbase = load('features_stober');
+            end
+            
+            % ---
+            % NOTE: we define feature sets which are included /
+            % excluded according to the specified parameters
+            % ---
+            
+            lowAudio = {'pitchMean', 'pitchSdev', 'timbreMean', 'timbreSdev'};
+            
+            % highAudio features more or less correspond to slaney 08 features
+            hiAudio = {'energy','key','loudness','timeSignature',...
+                'danceability', 'mode', 'tempo'};
+            
+            metadat = {'tags'};
+            
+            allowedFeat = {};
+            
+            % Select the features to keep
+            if feature(1).my_params.stob_lowaudio
+                allowedFeat = {allowedFeat{:},  lowAudio{:}};
+            end
+            if feature(1).my_params.stob_highaudio
+                allowedFeat = {allowedFeat{:},  hiAudio{:}};
+            end
+            if feature(1).my_params.stob_tags
+                allowedFeat = {allowedFeat{:},  metadat{:}};
+            end
+            
+            % get the actual clip id
+            idx = find(stobbase.clipIds == clip.id);
+            
+            % ---
+            % NOTE: we just copy everything in a big matrix and then
+            % normalise the data later
+            % ---
+            data.vector_info = {};
+            data.stobraw = [];
+            fields = fieldnames(stobbase);
+            for i = 1:numel(fields)
+                
+                % skip clip ID field
+                if strcmp(fields{i},'clipIds');
+                    continue;
+                end
+                
+                % skip unwanted features
+                if isempty(strcellfind(allowedFeat, fields{i}))
+                    continue;
+                end
+                
+                % ---
+                % TODO: special case for tag features, including
+                % the tag names
+                % ---
+                
+                % put field info into right position
+                data.vector_info{numel(data.stobraw)+1} = fields{i};
+                
+                % add data to feature
+                if size(stobbase.(fields{i}),1) == 1
+                    data.stobraw(end+1) = stobbase.(fields{i})(idx);
+                else
+                    % concatenate vector
+                    tmpdat = stobbase.(fields{i})(idx,:);
+                    data.stobraw(end+1:end+numel(tmpdat)) = tmpdat;
+                end
+            end
+            % padd further info struct
+            data.vector_info(end+1:numel(data.stobraw)) =...
+                cell(numel(data.stobraw) - numel(data.vector_info) , 1); 
+            
+            % ---
+            % prepare field for final features
+            % ---
+            data.final.vector = [];
+            data.final.vector_info = struct(); 
+            data.final.dim = 0;
+           
+            % save info data
+            data.info.type = 'MTTMixedFeatureStober11';
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save parameters
+            data.info.params = feature.my_params;
+        end
+        
+        function define_global_transform(features)
+        % calculate and set normalization factors from the group of 
+        % input features. These features will be set for the full database
+         
+        final = zeros(numel(features(1).data.stobraw), numel(features));
+        for i = 1:numel(features)
+             if ~isempty(features(i).data.stobraw)
+                final(:,i) = features(i).data.stobraw';
+             end
+        end
+            
+            if features(1).my_params.stob_norm
+                if numel(features) == 1
+                    error ('Insert feature array for this method, or set normalisation to 0');
+                end
+
+                % ---
+                % here, we only need to define the post-normalisation
+                % ---
+                [final, pstd] = mapminmax(final,0,1);
+                common.stobstats.post_norm = pstd;
+                
+                % ---
+                % NOTE: whitening as in slaney?? 
+                % Would make reading the
+                % mahal matrices really hard
+                % ---
+                
+                features(1).my_db.set_common(common);
+                
+            else
+                
+                features(1).my_db.set_common([1]);
+            end
+            
+            % save the normalised features straight away!
+            features.finalise(final);
+        end
+        
+        
+        function finalise(features, final)
+        % applies a final transformation and
+        % collects the information of this feature within a single vector
+        % see info for types in specific dimensions
+        % check if features have been finalised already
+
+        % ---
+        % set feature labelling
+        % ---
+        
+        info = {};
+                
+        % ---
+        % construct resulting feature vector out of features
+        % ---
+            if nargin == 2 && isempty(final)
+                
+                % the final vector etc already are set to zero;
+                return;
+                
+            elseif nargin == 2 && (numel(features) == size(final, 2))
+                % the features have already been preassembled
+                
+                for i = 1:numel(features)
+
+                    % check for neccesary parameters
+                    if isempty(features(i).my_db.commondb)
+
+                        error('Define the global transformation first')
+                        return;
+                    end
+
+                    features(i).data.final.vector = final(:,i);
+                    features(i).data.final.dim = size(final,1);
+
+                    % fill up info struct and append to feature
+                    features(i).data.final.vector_info.labels = ...
+                        features(i).data.vector_info;
+                end
+            else
+                % ---
+                % if features have been added after gettin gnormalisation
+                % parameters, ther should be still an option to include
+                % them
+                % ---
+               
+                 for i = 1:numel(features)
+
+                    % check for neccesary parameters
+                    if isempty(features(i).my_db.commondb)
+
+                        error('Define the global transformation first')
+                        return;
+                    end
+                    
+                    final = features(i).data.stobraw';
+                    
+                    if features(1).my_params.stob_norm == 1
+                                
+                        [final] = mapminmax('apply', final, features(1).common.stobstats.post_norm);
+                    end
+                    
+                    features(i).data.final.vector = final;
+                    features(i).data.final.dim = size(final,1);
+
+                    % fill up info struct and append to feature
+                    features(i).data.final.vector_info.labels = ...
+                        features(i).data.vector_info;
+                 end
+
+            end
+            
+            % ---
+            % TODO: Maybe delete more basic features again at this point?
+            % ---
+        end
+
+        % ---
+        % destructor: do we really want to remove this 
+        % from the database? No, but 
+        % TODO: create marker for unused objects in db, and a cleanup
+        %  function
+        % ---
+        function delete(feature)
+            
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureStober11Genre.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,182 @@
+classdef MTTMixedFeatureStober11Genre < MTTAudioFeature & handle
+    % ---
+    %
+    % The usual worklow for these features constist of three steps
+    % 1. extract: extracts the basic single-file dependent features
+    % 2. define_global_transform: calculates the global feature
+    %       transformation parameters
+    % 3. finalise: applies the common transformations to a specific feature
+    % ---
+    
+    properties(Constant = true)
+        
+        % svn hook
+        my_revision = str2double(substr('$Rev$',  5, -1));
+    end
+       
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        my_params = struct(...
+            ... % ---
+            ... % these are Stober11 parameters
+            ... % ---
+            'stob_lowaudio', 1, ...
+            'stob_highaudio', 1, ... % 
+            'stob_tags', 1, ... 
+            'stob_norm', 1, ...
+            ... % ---
+            ... % following are GenreBasic parameters
+            ... % --- 
+            'pct_genres', 1, ... % 1/100 percentile genre tags used
+            'empty_genres', 1 ... % allow empty genres to persist
+        );
+    end
+    
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureStober11Genre(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+
+        % ---
+        % extract feature data by combining genre adn stob features
+        % ---
+        function data = extract(feature, clip)
+            
+            % ---
+            % get Basic Summary audio features. this includes possible
+            % local normalisations
+            % ---
+            stob = clip.features('MTTMixedFeatureStober11',feature.my_params);
+            
+            % ---
+            % get genre tag features
+            % ---
+            
+            genrebasic = clip.genre_features_basic(feature.my_params);
+            
+            % save to features data field
+            data.stob = stob;
+            data.tags = genrebasic;
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.vector_info = struct(); 
+            data.final.dim = 0;
+           
+            % save info data
+            data.info.type = 'MTTMixedFeatureStober11Genre';
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save parameters
+            data.info.params = feature.my_params;
+        end
+        
+        function define_global_transform(features)
+        % calculate and set normalization factors from the group of 
+        % input features. These features will be set for the full database
+        
+            if numel(features) == 1
+                error ('Insert feature array for this method');
+            end
+            
+            % ---
+            % We collect all the relevant stob 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	stob(i) = features(i).data.stob;
+            end
+            
+            % call the features own transsform function
+            stob.define_global_transform();
+            
+            % ---
+            % We collect all the relevant genretag 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	genrebasic(i) = features(i).data.tags;
+            end
+            
+            % call the features own transsform function
+            genrebasic.define_global_transform();
+            
+            % ---
+            % set common feature values for mixed features
+            % ---
+            features(1).my_db.set_common([1]); %trivial common
+        end
+        
+        
+        function finalise(feature)
+        % applies a final transformation and collects the 
+        % information of this feature within a single vector
+        % see info for types in specific dimensions
+
+            for i = 1:numel(feature)
+                
+                % check for neccesary parameters
+                if isempty(feature(i).my_db.commondb)
+
+                    error('Define the global transformation first');
+                end
+                
+                % ---
+                % finalise audio feature and get vector
+                % ---
+                stob = feature(i).data.stob;
+                stob.finalise();
+                
+                % finalise tag features
+                genrebasic = feature(i).data.tags;
+                genrebasic.finalise;
+                
+                % ---
+                % final data assembly
+                % ---
+                
+                % concatenate vectors
+                feature(i).data.final.vector = ...
+                    [stob.vector() ; genrebasic.vector()];
+                
+                % add feature dimensions
+                feature(i).data.final.dim = stob.dim + genrebasic.dim;
+                
+                % concatenate labels
+                feature(i).data.final.vector_info.labels = ...
+                    {stob.data.final.vector_info.labels{:}, ...
+                    genrebasic.data.final.vector_info.labels{:}};
+            end
+        end
+        
+        % ---
+        % destructor: do we really want to remove this 
+        % from the database? No, but 
+        % TODO: create marker for unused objects in db, and a cleanup
+        %  function
+        % ---
+        function delete(feature)
+            
+        end
+       
+        function visualise(feature)
+        % ---
+        % plots the different data types collected in this feature
+        % ---
+            for i = 1:numel(feature)
+                clip = MTTClip(feature(i).owner_id());
+            end
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureStober11GenrePCA.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,264 @@
+% --
+% This class loads and hanles the aufdio features included with the MTT
+% Library
+% --- 
+classdef MTTMixedFeatureStober11GenrePCA < MTTAudioFeature & handle
+    
+    properties(Constant = true)
+        
+        my_revision = str2double(substr('$Rev: 457 $',  5, -1));
+    end
+    
+    properties
+        
+        % ---
+        % Set default parameters
+        % ---
+        my_basetype = 'MTTMixedFeatureStober11Genre';
+        
+        my_params = MTTAudioFeature.inherited_params(...
+            'MTTMixedFeatureStober11Genre', ...
+            'min_pca_var', 0, ... % [0-1], def. 0 fraction of variance to keep 
+            'max_pca_coeffs', 0, ...% max. number of final coefficients
+            'norm_pre_pca', 1, ...
+            'norm_post_pca', 1 ...% normalise pca coefficients after transformation
+        );
+    end
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureStober11GenrePCA(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+        
+        % ---
+        % load feature data from xml file
+        % ---
+        function data = extract(feature, clip)
+        % load feature data by parsing xml
+            
+            global globalvars;
+            
+            % ---
+            % we extract the base features, and save 
+            % the pointers to these.
+            % the main work is then done in the define_global_transf
+            % and finalise functions.
+            % ---
+            data.basefeat = clip.features(feature.my_basetype,...
+                feature.my_params); 
+
+            % save info data
+            data.info.type = class(feature);
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save param data
+            data.info.params = feature.my_params;
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.dim = 0;
+            data.final.vector_info.labels = {};
+        end
+        
+        function define_global_transform(features)
+            
+            if numel(features) == 1
+                error ('Insert feature array for this method');
+            end
+            
+            % ---
+            % We collect all the relevant genretag 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	basef(i) = features(i).data.basefeat;
+            end
+            
+            % call the features own transsform function
+            basef.define_global_transform();
+            
+            % ---
+            % finalise the basic features, and 
+            % get the feature vectors;
+            % ---
+            X = basef.vector();
+            
+            % check dataset dimension
+            if numel(features) < basef.dim;
+                
+                error ('Not enough feature vectors for PCA calculation. need %d samples', ...
+                    basef.dim);
+            end
+            
+            % ---
+            % NOTE: should the data be normalised and scaled to -1:1 
+            % instead of being in a range of 0-1 AND max-min = 1
+            % --- 
+            if features(1).my_params.norm_pre_pca == 1
+                                
+                [X, pstd] = mapminmax(X,-1,1);
+                common.pca.pre_norm = pstd;
+            elseif features(1).my_params.norm_pre_pca == 2
+                
+                [X, pstd] = mapstd(X,0,1);
+                common.pca.pre_norm = pstd;
+            end
+
+            
+            % ---
+            % get and apply the principal component analysis
+            % NOTE: the variance percentile is applied here, too.
+            % ---
+
+            [Y, ps] = processpca(X, 0);
+            common.pca.transform = ps;
+            
+            % ---
+            % get cumulative sum of variance, and decide on cutoff
+            % point
+            % --- 
+            v = cumsum(var(Y'));
+            v = v / max(v);
+            common.pca.transform.varpart = v;
+            
+            if features(1).my_params.min_pca_var > 0
+                            
+                min_pca_idx = find(v >= features(1).my_params.min_pca_var,1, 'first');
+                
+                % save into pca structure
+                common.pca.transform.yrows = min_pca_idx;
+                
+            end 
+            
+            % normalise pca values after processing
+            if features(1).my_params.norm_post_pca
+                
+                [Y,pmm] = mapminmax(Y,0,1);
+                common.pca.post_norm = pmm;
+                
+            end
+            
+            % ---
+            % set common feature values for mixed features
+            % ---
+            features(1).my_db.set_common(common);            
+            
+            % save the transformed features straight away!
+            features.finalise(Y);
+        end
+        
+        function finalise(feature, final)
+        % applies a final transformation and
+        % collects the information of this feature within a single vector
+        % see info for types in specific dimensions
+        
+            % determine size
+            if feature(1).my_params.max_pca_coeffs > 0
+
+                max_size = min(feature(1).common.pca.transform.yrows, ...
+                    feature(1).my_params.max_pca_coeffs);
+            else
+
+                max_size = feature(1).common.pca.transform.yrows;
+            end
+
+
+            % prepare information
+            info = {'PCA'};
+            if isfield(feature(1).common.pca.transform, 'varpart')
+                info(2:max_size) = num2cell(feature(1).common.pca.transform.varpart(2:max_size));
+            else
+                info(2:max_size) = num2cell(2:max_size);
+            end
+
+        
+            % check if features have been finalised already
+            if nargin == 2 && isempty(final)
+                
+                % the final vector etc already are set to zero;
+                return;
+                
+            elseif nargin == 2 && (numel(feature) == size(final, 2))
+                    
+                for i = 1:numel(feature)
+                    
+                    % save final vector and description
+                    feature(i).data.final.vector = final(1:max_size,i);
+                    feature(i).data.final.dim = max_size;
+                    feature(i).data.final.vector_info.labels = info;
+                end
+                
+            else
+            % features have to be transformed first
+            % ---
+            % TODO: this code remains untested
+            % ---
+            
+            % check for neccesary parameters
+                if isempty(feature(1).my_db.commondb)
+
+                    error('Define the global transformation first')
+                    return;
+                end
+             
+
+                for i = 1:numel(feature)
+
+                    % check for neccesary parameters
+                    if isempty(feature(i).my_db.commondb)
+
+                        error('Define the global transformation first')
+                    end
+                    
+                    % ---
+                    % get feature vector and apply transformation
+                    % ---
+                    X = feature(i).data.basefeat.vector();
+                    
+                    % ---
+                    % apply normalisation used for removing mean 
+                    % in training data
+                    % ---
+                    if feature(1).my_params.norm_pre_pca == 1
+                                
+                        X = mapminmax('apply', X, feature(1).common.pca.pre_norm);
+                    elseif feature(1).my_params.norm_pre_pca == 2
+
+                        X = mapstd('apply', X, feature(1).common.pca.pre_norm);
+                    end
+ 
+                    % apply PCA transform
+                    vec = processpca('apply', X, feature(1).common.pca.transform);
+                    
+                    % normalise pca values after transformation
+                    if feature(1).my_params.norm_post_pca
+
+                        vec = mapminmax('apply', vec,...
+                            feature(1).common.pca.post_norm);
+                    end
+                    
+                    % ---
+                    % cut vector to final size. 
+                    % NOTE: this should be done before
+                    % transformation to reduce computation time
+                    % ---
+                    vec = vec(1:max_size);
+                    
+                    % save final vector and description
+                    feature(i).data.final.vector = vec;
+                    feature(i).data.final.dim = numel(vec);
+                    feature(i).data.final.vector_info.labels = info;
+                end
+            end
+        end
+        
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTMixedFeatureStober11Slaney08GenreBasicSm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,178 @@
+classdef MTTMixedFeatureStober11Slaney08GenreBasicSm < MTTAudioFeature & handle
+    % ---
+    %
+    % The usual worklow for these features constist of three steps
+    % 1. extract: extracts the basic single-file dependent features
+    % 2. define_global_transform: calculates the global feature
+    %       transformation parameters
+    % 3. finalise: applies the common transformations to a specific feature
+    % ---
+    
+    properties(Constant = true)
+        
+        % svn hook
+        my_revision = str2double(substr('$Rev: 638 $',  5, -1));
+    end
+       
+    properties
+        % ---
+        % Set default parameters
+        % ---
+        my_params = MTTAudioFeature.inherited_params(...
+            'MTTMixedFeatureSlaney08GenreBasicSm', ...
+            ... % ---
+            ... % these are Stober11 parameters
+            ... % ---
+            'stob_lowaudio', 1, ...
+            'stob_highaudio', 1, ... % 
+            'stob_tags', 1, ... 
+            'stob_norm', 1 ...
+            ... % ---
+        );
+    end
+    
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTMixedFeatureStober11Slaney08GenreBasicSm(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+
+        % ---
+        % extract feature data by combining genre adn stob features
+        % ---
+        function data = extract(feature, clip)
+            
+            % ---
+            % get Basic Summary audio features. this includes possible
+            % local normalisations
+            % ---
+            stob = clip.features('MTTMixedFeatureStober11',feature.my_params);
+            
+            % ---
+            % get genre tag features
+            % ---
+            genrebasicsm = clip.features('MTTMixedFeatureSlaney08GenreBasicSm',feature.my_params);
+            
+            % save to features data field
+            data.stob = stob;
+            data.tags = genrebasicsm;
+            
+            % prepare field for final features
+            data.final.vector = [];
+            data.final.vector_info = struct(); 
+            data.final.dim = 0;
+           
+            % save info data
+            data.info.type = 'MTTMixedFeatureStober11Slaney08GenreBasicSm';
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save parameters
+            data.info.params = feature.my_params;
+        end
+        
+        function define_global_transform(features)
+        % calculate and set normalization factors from the group of 
+        % input features. These features will be set for the full database
+        
+            if numel(features) == 1
+                error ('Insert feature array for this method');
+            end
+            
+            % ---
+            % We collect all the relevant stob 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	stob(i) = features(i).data.stob;
+            end
+            
+            % call the features own transsform function
+            stob.define_global_transform();
+            
+            % ---
+            % We collect all the relevant genretag 
+            % features and get the transform on this basis.
+            % ---
+            for i = 1:numel(features)
+            	genrebasicsm(i) = features(i).data.tags;
+            end
+            
+            % call the features own transsform function
+            genrebasicsm.define_global_transform();
+            
+            % ---
+            % set common feature values for mixed features
+            % ---
+            features(1).my_db.set_common([1]); %trivial common
+        end
+        
+        
+        function finalise(feature)
+        % applies a final transformation and collects the 
+        % information of this feature within a single vector
+        % see info for types in specific dimensions
+
+            for i = 1:numel(feature)
+                
+                % check for neccesary parameters
+                if isempty(feature(i).my_db.commondb)
+
+                    error('Define the global transformation first');
+                end
+                
+                % ---
+                % finalise audio feature and get vector
+                % ---
+                stob = feature(i).data.stob;
+                stob.finalise();
+                
+                % finalise tag features
+                genrebasicsm = feature(i).data.tags;
+                genrebasicsm.finalise();
+                
+                % ---
+                % final data assembly
+                % ---
+                
+                % concatenate vectors
+                feature(i).data.final.vector = ...
+                    [stob.vector() ; genrebasicsm.vector()];
+                
+                % add feature dimensions
+                feature(i).data.final.dim = stob.dim + genrebasicsm.dim;
+                
+                % concatenate labels
+                feature(i).data.final.vector_info.labels = ...
+                    {stob.data.final.vector_info.labels{:}, ...
+                    genrebasicsm.data.final.vector_info.labels{:}};
+            end
+        end
+        
+        % ---
+        % destructor: do we really want to remove this 
+        % from the database? No, but 
+        % TODO: create marker for unused objects in db, and a cleanup
+        %  function
+        % ---
+        function delete(feature)
+            
+        end
+       
+        function visualise(feature)
+        % ---
+        % plots the different data types collected in this feature
+        % ---
+            for i = 1:numel(feature)
+                clip = MTTClip(feature(i).owner_id());
+            end
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTRandomFeature.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+% --
+% This class loads and hanles the aufdio features included with the MTT
+% Library
+% --- 
+classdef MTTRandomFeature < MTTAudioFeature & handle
+    
+    properties(Constant = true)
+        
+        my_revision = str2double(substr('$Rev: 167 $',  5, -1));
+    end
+    
+    properties
+        
+        % ---
+        % Set default parameters
+        % ---
+        my_params = struct(...
+            'nrandoms', 100 ...
+            );
+    end
+    % ---
+    % member functions
+    % ---
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTRandomFeature(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+        
+        % ---
+        % load feature data from xml file
+        % ---
+        function data = extract(feature, clip)
+        % load feature data by parsing xml
+            
+            global globalvars;
+        
+            % fprintf('parsing features for clip %d \n',clip.id());
+            
+            % parse feature
+            data.random = rand(feature.my_params.nrandoms, 1);
+
+            % save info data
+            data.info.type = 'MTTRandomFeature';
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save param data
+            data.info.params = feature.my_params;
+            
+            % prepare field for final features
+            data.final.vector = data.random;
+            data.final.dim = numel(data.final.vector);
+             
+            info = {'random'};
+            info(2:data.final.dim) = num2cell(2:data.final.dim);
+            data.final.vector_info.labels = info;
+        end
+                
+        function  visualise(feature)
+        % ---
+        % plots the different data types collected in this feature
+        % ---
+
+        end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/MTTTagFeatureGenreBasic.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,218 @@
+classdef MTTTagFeatureGenreBasic < MTTAudioFeature & handle
+    
+ 
+    properties(Constant = true)
+        
+        my_revision = str2double(substr('$Rev: 99 $',  5, -1));
+    end
+       
+    % ---
+    % here come the internal clip properties.
+    % the database is stored as a global variable
+    % ---
+    properties
+        
+       my_params = struct(...
+            ... % ---
+            ... % these are GenreBasic parameters
+            ... % ---
+            'pct_genres', 1, ... % 1/100 percentile genre tags used
+            'empty_genres', 0 ... % allow empty genres to persist
+            );
+    end
+    
+    methods
+        
+        % ---
+        % constructor: pointer to feature in database
+        % ---
+        function feature = MTTTagFeatureGenreBasic(varargin)
+
+            feature = feature@MTTAudioFeature(varargin{:});
+        end
+ 
+        function data = extract(feature, clip)
+        % process tag information and build the tag vector
+            
+            % ---
+            % get total number of tags. 
+            %
+            % NOTE: the highest tag id should match the size of the 
+            % tagdb lexicon
+            % ---
+%             num_tags = clip.my_db.genredb.size();
+            
+            if feature.my_params.pct_genres ~= 0
+                % no tags, f.e. for parameter experiments in
+                % higher level features
+                [tagids, score] = clip.my_db.genredb.annotids_for_owner(clip.id);
+
+                % save lexicon
+                data.lexicon = clip.my_db.genredb.lexicon;
+
+                % save to data structure
+                data.tags.ids = tagids;
+                data.tags.scores = score;
+            end
+            
+            % save info data
+            data.info.type = 'MTTTagFeatureGenreBasic';
+            data.info.owner = clip;
+            data.info.owner_id = clip.id;
+            data.info.creatorrev = feature.my_revision;
+            
+            % save parameters
+            data.info.params = feature.my_params;
+            
+            data.final.vector = [];
+            data.final.vector_info = struct(); 
+            data.final.dim = 0;
+        end
+        
+        
+        % ---
+        % NOTE: the following transforms are just stated fro 
+        % future use by now 
+        % ---
+        function define_global_transform(features)
+            % ---
+            % compute the relevant tags, and save
+            % them in the commom place
+            % ---
+            
+            % compute extreme cases
+            if features(1).my_params.pct_genres == 1 && features(1).my_params.empty_genres
+                % all tags allowed
+                
+                common.rel_dimensions.tags.ids = 1:numel(features(1).data.lexicon);
+                common.rel_dimensions.tags.id_pos = 1:numel(features(1).data.lexicon);
+                
+                % set common feature values
+                features(1).my_db.set_common(common);
+                return;
+                
+            elseif features(1).my_params.pct_genres == 0 
+                % no tags, f.e. for parameter experiments in
+                % higher level features
+                
+                common.rel_dimensions.tags.ids = [];
+                common.rel_dimensions.tags.id_pos = [];
+                
+                % set common feature values
+                features(1).my_db.set_common(common);
+                return;
+            end
+            
+            
+            allids = sparse(numel(features), numel(features(1).data.lexicon));
+            for i = 1:numel(features)
+                
+                allids(i,features(i).data.tags.ids) = ...
+                    allids(i,features(i).data.tags.ids) + features(i).data.tags.scores;
+            end
+            
+            % ---
+            % get usage of tags and filter not-used tags
+            % ---
+            tagsum = sum(allids, 1);
+            nonzero = tagsum > 0;
+            
+            % ---
+            % NOTE: We remove the empty genres, then
+            % sort by weight / number of appearance and cut off
+            ids = find(nonzero);
+            [null, idx] = sort(tagsum(ids),'descend');
+            ids = ids(idx);
+            
+            % cutoff
+            num_tags = ceil( features(1).my_params.pct_genres * numel(ids));
+            valid_ids = ids(1:min(end, num_tags));
+            
+            % ---
+            % NOTE: make sure that the positions for the tags
+            % stay correctly assigned / consistent
+            % ---
+            id_pos = sparse(size(valid_ids));
+            id_pos(valid_ids) = 1:num_tags; 
+            
+            % save to common data structure
+            common.rel_dimensions.tags.ids = valid_ids;
+            common.rel_dimensions.tags.id_pos = id_pos;
+     
+            % set common feature values
+            features(1).my_db.set_common(common);
+        end
+        
+        function finalise(features)
+          
+            for i = 1:numel(features)
+                
+                 % check for neccesary parameters
+                if isempty(features(i).my_db.commondb)
+
+                    error('Define the global transformation first')
+                    return;
+                end
+                
+                if features(i).my_params.pct_genres == 0
+                    vector_info.labels = {};
+
+                    % save into feature struct
+                    features(i).data.final.dim = 0;
+                    features(i).data.final.vector = [];
+                    features(i).data.final.vector_info = vector_info;
+                    return;
+                end
+                % get valid tag ids
+                valid_ids = features(i).common.rel_dimensions.tags.ids;
+                num_tags = numel(valid_ids);
+                
+                % ---
+                % get vector positions for contined ids,
+                % and sort out the non_allowed id's
+                % ---
+                id_pos = features(i).common.rel_dimensions.tags.id_pos;
+                
+                [has_ids, has_pos] = intersect(features(i).data.tags.ids, valid_ids);
+                
+                score = features(i).data.tags.scores;
+                
+                % create feature vector
+                vector = zeros(num_tags,1);     
+                vector(id_pos(has_ids)) = score(has_pos);
+                
+                % ---
+                % NOTE: this labelling costs to much space
+                % ---
+                vector_info.labels = features(i).data.lexicon(valid_ids);
+
+                % save into feature struct
+                features(i).data.final.dim = num_tags;
+                features(i).data.final.vector = vector;
+                features(i).data.final.vector_info = vector_info;
+            end
+        end
+        
+        function [a1] = visualise(feature)
+            
+            % get tag descriptions form first clip
+            tags = MTTClip(feature(1).owner_id()).my_db.genres;
+            
+            % works for multiple feature instances
+             for i = 1:numel(feature)
+                  
+                clip = MTTClip(feature(i).owner_id());
+                
+                % plot feature data
+                h = bar(feature(i).data.final.vector);
+                a1 = gca;
+                
+                set(a1,'XTick', 1:feature(i).data.final.dim,...
+                    'XTickLabel', tags);
+                title(sprintf('clip %d: %s by %s, genres', ...
+                    clip.id, clip.title(),clip.artist()));
+             end
+        end
+
+    end
+end
\ No newline at end of file
Binary file core/magnatagatune/album_artist_magnatunedb_correspondence.mat has changed
Binary file core/magnatagatune/annotations_final.mat has changed
Binary file core/magnatagatune/clip_info_final.mat has changed
Binary file core/magnatagatune/compared_cyclefinder_stober.mat has changed
Binary file core/magnatagatune/comparisons_final.mat has changed
Binary file core/magnatagatune/db.mat has changed
Binary file core/magnatagatune/features_stober.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/fm_corresponding_albums.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+function [fmalbums, fmalbum_names] = fm_corresponding_albums(albums)
+%fmalbums = fm_corresponding_albums(albums)
+%
+% searches last.fm for the artist given in a cell 
+% array of strings and saves the first hit into the output.
+%
+% fmalbum_names = {magnatagatune_artist, fm_artist};
+%
+% returns -1 of no matches found
+maxtry = 3;
+
+albums = unique(albums);
+i = 1;
+numtry = 0;
+while i < numel(albums)
+    
+    % ---
+    % as sometimes this fails due to connection problems
+    % or other problems not yet identified, we TRY
+    %
+    % for fails, we may try one time again!
+    % ---
+    fprintf('%d percent: %s\n',floor(i*100/numel(albums)),char(albums{i}));
+    try 
+        [tmp, tmpid] = fm_retrieve_album(char(albums{i}));
+        fmalbums(i,:) = {albums{i}, tmp{1}, tmpid{1}};
+    catch err
+        
+        % no work :(
+        warning(err.message);
+        fmalbums{i} = '-1';
+        
+        numtry = numtry + 1;
+        
+        % ---
+        % NOTE: we try again in case it fails for < maxtry times
+        % ---
+        if numtry < maxtry
+            i = i - 1;
+        else
+            numtry = 0;
+        end
+    end
+    i = i + 1;
+end
+
+fmalbum_names = {'magnatagatune_album', 'fm_album', 'mbid'};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/fm_corresponding_artists.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function [fmartist_name, fmartist_name_names] = fm_corresponding_artists(artists)
+%[artists, fmartists] = fm_corresponding_artists(artists)
+%
+% searches last.fm for the artist given in a cell 
+% array of strings and saves the first hit into the output.
+%
+% returns -1 of no matches found
+maxtry = 10;
+
+% artists = unique(artists);
+i = 1;
+numtry = 0;
+while i <= numel(artists)
+    
+    % ---
+    % as sometimes this fails due to connection problems
+    % or other problems not yet identified, we TRY
+    %
+    % for fails, we may try one time again!
+    % ---
+    fprintf('%d percent: %s\n',floor(i*100/numel(artists)),char(artists{i}));
+    try 
+        [tmp, tmpid] = fm_retrieve_album(char(artists{i}));
+        fmartist_name(i,:) = {artists{i}, tmp{1}, tmpid{1}};
+    catch err
+        
+        % no work :(
+        warning(err.message);
+        fmartist_name(i,:) = {artists{i}, '-1', '-1'};
+        
+        numtry = numtry + 1;
+        
+        % ---
+        % NOTE: we try gain in case it fails for < maxtry times
+        % ---
+        if numtry < maxtry
+            i = i - 1;
+        else
+            numtry = 0;
+        end
+    end
+    i = i + 1;
+end
+
+fmartist_name_names = {'magnatagatune_album', 'fm_album', 'mbid'};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/fm_network.py	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+import pylast
+import sys
+
+def get_network():
+    # You have to have your own unique two values for API_KEY and API_SECRET
+    # Obtain yours from http://www.last.fm/api/account for Last.fm
+    API_KEY = "6fae93d29ad1ace84159d5e264114be7"
+    API_SECRET = "e04dd6c372461fb2de4eb4908fb35ae3"
+
+    # In order to perform a write operation you need to authenticate yourself
+    # username = "megaoetzwuchst"
+    # password_hash = "5c15b1b51d73b8a623fef29ca5035abb"
+
+    network = pylast.LastFMNetwork(api_key = API_KEY, api_secret = 
+       API_SECRET)
+
+    # network = pylast.LastFMNetwork(api_key = API_KEY, api_secret = 
+    #    API_SECRET, username = username, password_hash = password_hash)
+
+    return network
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/fm_retrieve_album.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function [album, mbids] = fm_retrieve_album(album_name)
+%[album, mbids] = fm_retrieve_album(album_name)
+%
+% returns last.fm artist tags and tag weights for given artist
+% this uses a lastpy python script to handle the REST data exchange
+
+% call python function
+str = python('fm_retrieve_album.py',album_name);
+
+% parse text function output
+album = textscan(str,'%s %s','Delimiter',',');
+mbids = album{2};
+album = album{1};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/fm_retrieve_album.py	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+# gets data from the last.fm webservice and 
+
+import pylast
+import sys
+import fm_network
+
+network = fm_network.get_network()
+
+# now you can use that object every where
+srch = network.search_for_artist(sys.argv[1])
+
+
+# did we find any ?
+if (int(srch.get_total_result_count()) == False):
+    print('-1, None')
+    
+else:
+    
+    #print first 200 results
+    albums = srch.get_next_page()    
+    for album in albums:
+        mbid = unicode(album.get_mbid())
+        print(album.get_name().encode('utf-8','ignore') + ', ' + mbid.encode('utf-8','ignore'))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/fm_retrieve_artist.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function [artists, mbids] = fm_retrieve_artist(artist_name)
+%[tags, tag_weight] = fm_get_artist_tags(artist_name)
+%
+% returns last.fm artist tags and tag weights for given artist
+% this uses a lastpy python script to handle the REST data exchange
+
+% call python function
+str = python('fm_retrieve_artist.py',artist_name);
+
+% parse text function output
+artists = textscan(str,'%s %s','Delimiter',',');
+mbids = artists{2};
+artists = artists{1};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/fm_retrieve_artist.py	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+# gets data from the last.fm webservice and 
+
+import pylast
+import sys
+import fm_network
+
+network = fm_network.get_network()
+
+# now you can use that object every where
+artistsrch = network.search_for_artist(sys.argv[1])
+
+# did we find any ?
+if int(artistsrch.get_total_result_count()) == False:
+    print('-1, None')
+    
+else:
+    
+    #print alternatives
+    artists = artistsrch.get_next_page()    
+    for artist in artists:
+        mbid = unicode(artist.get_mbid())
+        print(artist.get_name().encode('utf-8','ignore') + ', ' + mbid.encode('utf-8','ignore'))
+        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/fm_retrieve_artist_similarity.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function [tags, tag_weight] = fm_retrieve_artist_similarity(artist1,artist2)
+%[tags, tag_weight] = fm_get_artist_tags(artist_name)
+%
+% returns last.fm artist tags and tag weights for given artist
+% this uses a lastpy python script to handle the REST data exchange
+
+% call python function
+tagstr = python('fm_retrieve_artist_similarity.py', artist1, artist2)
+
+% parse text function output
+%tags = textscan(tagstr,'%s %d','Delimiter',',');
+%tag_weight = tags{2};
+%tags = tags{1};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/fm_retrieve_artist_similarity.py	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+# gets data from the last.fm webservice and 
+
+import pylast
+import sys
+import fm_network
+
+network = fm_network.get_network()
+
+# now you can use that object every where
+artist = network.get_artist(sys.argv[1])
+
+(score, sharedas) = artist.compare_with_artist(sys.argv[2])
+
+print(score)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/fm_retrieve_artist_tags.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [tags, tag_weight] = fm_retrieve_artist_tags(artist_name,bymbid)
+%[tags, tag_weight] = fm_get_artist_tags(artist_name,bymbid)
+% 
+% artist_name: either artist name string, or
+%              musicbrainz artist id with bymbid == 1
+% 
+% returns last.fm artist tags and tag weights for given artist
+% this uses a lastpy python script to handle the REST data exchange
+
+if nargin < 2
+    bymbid = '0';
+else
+    bymbid = num2str(bymbid); 
+end
+
+% call python function
+tagstr = python('fm_retrieve_artist_tags.py',artist_name,bymbid);
+
+% parse text function output
+tags = textscan(tagstr,'%s %d','Delimiter',',');
+tag_weight = tags{2};
+tags = tags{1};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/fm_retrieve_artist_tags.py	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+# gets data from the last.fm webservice and 
+
+import pylast
+import sys
+import fm_network
+
+network = fm_network.get_network()
+
+# now you can use that object every where
+if sys.argv[2] == '0':
+    artist = network.get_artist(sys.argv[1])
+else:
+    artist = network.get_artist_by_mbid(sys.argv[1])
+
+# retrieve artist tags
+tags = artist.get_top_tags()
+
+# put in comma separated list
+for tag in tags[:-1]:
+    print(tag.item.get_name().encode('utf-8','ignore')+ ', ' + tag.weight.encode('utf-8','ignore'))
+
+if len(tags) > 0:
+    print(tags[-1].item.get_name().encode('utf-8','ignore') + ', ' + tags[-1].weight.encode('utf-8','ignore'))
+
+else:
+    print(-1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/genre_stats.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+function out = genre_stats(tagged, names, freqs, childof)
+% out = genre_stats(names, freqs, childof)
+% 
+% calculates statistics for genre distributions
+% 
+%
+
+% get overall genre frequency and sort accordingly
+allapp = sum(freqs,2);
+allapp = allapp/max(allapp);
+
+[null, idx] = sort(allapp,'descend');
+
+% get root potential
+rootpot = 1 - sum(childof,2);
+
+figure;
+bar(1:numel(names),[allapp(idx) rootpot(idx)])
+set(gca,'XTick',1:numel(names));
+set(gca,'XTickLabel',names(idx));
+legend('#appearances','root genre possibility');
+title 'genre statistics sorted by frequency of appearances'
+
+% ---
+% determine genres that include x% of the whole dataset
+% ---
+pctl = 0.98; % 80 percent included
+
+% ---
+% re-sort by appearance and root potential.
+% using the multiplication, we can filter out subgenres
+% ---
+[null, idxrt] = sort(rootpot.*allapp,'descend');
+
+% iteratively add 'best' genre according to root potential
+gotclips = [];
+numclips = [];
+num_included = 0;
+i = 1;
+while i <= numel(names) && num_included < pctl * length(tagged) 
+    
+    % count clips found for this genre
+    fprintf('%s \n', char(names{idxrt(i)}));
+    newclips = setdiff(find(tagged(:,idxrt(i)))', gotclips);
+    
+    gotclips = [gotclips newclips];
+    numclips(i) = numel(newclips);
+    
+    num_included = num_included + numclips(i);
+    i = i + 1;
+end
+
+figure;
+pie(numclips(numclips > 0) / length(tagged));
+legend(names{idxrt(numclips > 0)});
+
+out = [];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/get_comparison_stats.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,136 @@
+function [num_compares] = get_comparison_stats()
+% [num_compares] = get_comparison_stats()
+% 
+% - retrieves number of comparisons for each pair of data clips
+% - extracts genre associations and statistics
+
+global db_magnaclips;
+global comparison;
+global comparison_ids;
+
+num_compares = sparse(numel(comparison_ids), numel(comparison_ids));
+ 
+for i = 1:size(comparison,1)
+    abc = sort(comparison(i,1:3));
+    a = abc(1);
+    b = abc(2);
+    c = abc(3);
+    num_compares(a,b) = num_compares(a,b) +1;
+    num_compares(b,c) = num_compares(b,c) +1;
+    num_compares(a,c) = num_compares(a,c) +1;
+end
+
+% ---
+% check for repeated pairs
+% ---
+% [i,j] = ind2sub(size(num_compares), find(num_compares > 1))
+% num = 300;
+% a = find((comparison(:,1) == i(num) | comparison(:,2) == i(num) | comparison(:,3) == i(num))...)
+% & (comparison(:,1) == j(num) | comparison(:,2) == j(num) | comparison(:,3) == j(num)))
+%
+% comparison(a,:)
+
+
+% ------------------------------------------------------------
+% compare genre frequency
+% ---
+clips = MTTClip(comparison_ids);
+
+% comparison genres
+[genres, scores, gid] = clips.genres();
+
+% all genres
+[genres2, scores2, gid2] = db_magnaclips.genredb.stats;
+
+% ---
+% plot top genres
+% ---
+
+figure;
+bar(scores(1:20))
+set(gca, 'XTick',1:20,'XTickLabel',genres(1:20))
+
+figure;
+subplot(2,1,1)
+bar(scores(1:10) / max(scores))
+set(gca, 'XTickLabel',genres)
+title 'comparison subset'
+
+subplot(2,1,2)
+bar(scores2(1:10) / max(scores2))
+set(gca, 'XTickLabel',genres2,'FontSize', 8)
+title 'Full MTT data set'
+
+% ---
+% evaluate differences in distribution for all genres
+% shown are changes in relation to the whole database(genres2)
+%  ( relative to the summed tags )
+% ---
+genrediff = zeros(numel(genres2),1);
+for i=1:numel(genres2)
+    
+%     mgen = strcellfind(genres, genres2(i));
+    mgen = find(gid == gid2(i));
+    
+    if ~isempty(mgen)
+        % genrediff(i,1) = scores(mgen)/sum(scores) - scores2(i)/sum(scores2);
+        genrediff(i,1) = 1 - ( (scores2(i)/sum(scores2)) / (scores(mgen)/sum(scores)));
+
+    else 
+%         genrediff(i) = inf;
+        error 'genre ids not consistent'
+    end
+end
+genrediff = genrediff * 100;
+
+% visualise difference
+figure
+bar(genrediff);
+set(gca, 'XTick',1:44,'XTickLabel',genres2)
+axis([0 45 -200 100]);
+title 'relative loss for each genre considering comparison as an excerpt from MTT'
+ylabel 'loss(%)'
+
+% ---
+% get distinc genre music sets:
+% we try the following sets of 'similar' genre tags
+% ---
+cgdb = db_magnaclips.genredb.subset(clips.id);
+
+cids = cgdb.owner({'Classical', 'Baroque'}, 'or');
+cgdb = cgdb.exclude(cids);
+
+eids = cgdb.owner({'Electronica', 'New Age', 'Ambient'}, 'or');
+cgdb = cgdb.exclude(eids);
+
+rids = cgdb.owner({'Rock', 'Alt Rock', 'Hard Rock', 'Metal'}, 'or');
+cgdb = cgdb.exclude(rids);
+
+% get reverse indexing for comparisons
+rev_compid = sparse(comparison_ids, 1, 1:numel(comparison_ids));
+
+% 8 triples entirely classical 
+cfit = get_comparison_linfits(comparison, rev_compid(cids));
+
+% 43 triples entirely electronic
+efit = get_comparison_linfits(comparison, rev_compid(eids));
+
+% 6 triples entirely rock
+rfit = get_comparison_linfits(comparison, rev_compid(rids));
+
+cgdb.stats
+
+end
+% this function returns for each comparison line 
+% the num. of appearance of given selection of clip ids
+function out = get_comparison_linfits(comparison, goodset)
+    
+    out = zeros(1, size(comparison,1));
+    % for each line
+    for i = 1:size(comparison,1)
+    
+        out(i) = numel(intersect(comparison(i,1:3), goodset'));
+    end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/get_magnagenre_numeric.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,108 @@
+function [clip_magnagenres, magnagenres, magnagenre_freqs, magnagenre_childof]  = get_magnagenre_numeric(clip_info_magnagenres);
+%
+% uses the clip_info magnagenres_final db to get a numerical genre
+% representation ofthe database
+%
+% genre_freqs: frequency of genre x in position y
+% genre_childof: percentage of genre x being a successor of genre y
+%
+% reimports the text - based representation of magnatunes and tries to
+% determine an underlying structure.
+%
+
+data = clip_info_magnagenres(:,3);
+
+% ---
+% genre and genre posfrequency list:
+% ---
+
+magnagen_id = {};
+
+genres = {};
+
+max_genres = 50;
+max_simul_genres = 4;
+genre_freqs = [];
+genre_childof = [];
+
+% for each of the genre tags
+for i = 1:length(data)
+    
+    % separate genres;
+    tmp = explode(',', data{i});
+
+    % find and save correspnding genre indices
+    for j = 1:length(tmp)
+        genidx = strcellfind(genres,tmp(j));
+        
+        % add genre to genre list if not existent
+        if genidx < 1
+            genidx = size(genres, 1) + 1;
+            genres = cat(1, genres, tmp(j));
+            
+            genre_freqs(genidx,:) = zeros(1, max_simul_genres);
+            genre_childof(genidx,:) = zeros(1, max_genres);
+        end
+
+        % ---
+        % here, we save the index to a new genre structure
+        % ---
+        if  j == 1
+            magnagen_id{i} = genidx;
+        else
+            magnagen_id{i} = [magnagen_id{i}, genidx];
+        end
+        % ---
+        % further genre statistics, perhaps its a hierarchy
+        % ---
+             
+        % save frequency by position
+        genre_freqs(genidx, j) = genre_freqs(genidx, j) + 1;
+        
+        % save parent genre if applicable
+        if j == 1
+            
+            % remember parent index
+            paridx = genidx;
+        else
+            
+            % count index for this parent
+            genre_childof(genidx, paridx) = genre_childof(genidx, paridx) + 1;
+        end
+    end
+    
+% ---
+% - save preceeding first genre for this into another table
+% ---
+end
+
+% ---
+% this should output quite generic data, to ease 
+% comparison with other genre hierarchies.
+% 
+% thus, we set the parental relation relative to overall
+% appearance of the child genre
+% ---
+
+% remove overlapping columns
+idx = find(sum(genre_childof,1) > 0,1, 'last');
+idx = max(size(genre_childof,1),idx);
+
+genre_childof = genre_childof(:, 1:idx);
+
+% make values relative to total occurrence of child
+for i = 1: size(genre_childof,1)
+    genre_childof(i, :) = genre_childof(i, :) ./ sum(genre_freqs(i,:));
+end
+
+% ---
+% reformat genre attribute table as sparse matrix
+% ---
+clip_magnagenres = sparse(length(magnagen_id),length(genres));
+for i = 1:length(magnagen_id)
+    clip_magnagenres(i,magnagen_id{i}) = 1;
+end
+
+magnagenres = genres;
+magnagenre_freqs = genre_freqs;
+magnagenre_childof = genre_childof;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/get_similar_clips.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function [clips, score] = get_similar_clips(extid, sim, sim_ids)
+% clips = get_similar_clips(id, sim, sim_id)
+%
+% searches for similar clips for clip with base_id id
+%
+
+if nargin < 3
+    warning 'no similarity id codebook given'
+    sim_ids = 1:size(sim,1);
+end
+
+% get internal clip id
+id = find(sim_ids == extid);
+
+if isempty(id) 
+    error 'no similarity data available'
+end
+
+clips = [find(sim(id,:) ~= 0)]; 
+
+% get clip scores
+score = sim(id,clips);
+
+clips = sim_ids(clips);
Binary file core/magnatagatune/last.fm.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/macro_sim_graph_analysis.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,146 @@
+
+% Results:
+Gcomp = ClipComparedGraph(comparison, comparison_ids)
+[Gcompcomps] = Gcomp.connected_components();
+% only 2graphs  with 7 nodes, all subtriplets just connect via
+% one node -> no "infestation" of other triplets
+
+G = ClipSimGraph(comparison, comparison_ids)
+[Gs,s, id] = G.all_strongly_connected_components();
+u = hist(s);
+% 179 cycled triplets in unprepared graph
+
+Gmd = ClipSimGraphMD(comparison, comparison_ids)
+[Gsmd, smd, id] = Gmd.all_strongly_connected_components();
+Gsmd(1).order;
+% Not a single triple cycle found
+
+% ---
+% analysis on compliance with stobers preprocessing
+% trying to find out the differing ? Graph structures
+% for that sake analysis with connected (no cycles) components
+% ---
+Graw = ClipSimGraph(comparison, comparison_ids);
+[Gsraw, sraw] = connected_components(Graw)
+hist(sraw)
+% in the unedited graph, there are 346 connected triplets
+
+Gm = ClipSimGraphMulti(comparison, comparison_ids);
+[Gsraw2, sraw2] = connected_components(Gm)
+u = hist(sraw2)
+% in this unedited graph, there are still 346 connected triplets
+
+Gm.remove_cycles_length2;
+[Gs, s, id] = connected_components(DiGraph(Gm));
+u = hist(s)
+% 27 single nodes, 337 three-node graphs. why not two-nodes
+
+% which clips do these belong to?
+soloid = find(s == 1);
+soloclips = [];
+for i = 1:numel(soloid)
+    tmpG = ClipSimGraph(Gs(soloid(i)));
+    
+    % get the clisp of the single node
+    [sm, bg] = tmpG.clipsN(tmpG.nodes);
+    soloclips = [soloclips sm bg];
+end
+soloclips = unique(soloclips)
+% exactly 27 clips lost
+    
+% now with our graph processing
+Gmd = ClipSimGraphMD(comparison, comparison_ids)
+[Gsmd, smd] = connected_components(Gmd)
+% same result,
+
+% ---
+% now which are the orphaned nodes ?
+% ---
+Go = Gm.unconnected_subgraph();
+Go.label(Go.nodes)
+
+% ---
+% how many clips are completely lost?
+% ---
+Go = ClipSimGraphMulti(Gm.unconnected_subgraph());
+Go.clips
+numel(ans)
+Gm.remove_graph(Go) % 
+lastClip = intersect(Go.clips,Gm.clips)
+
+% ---
+% ok lets chase the last clip
+% ---
+Gm.node(21950)
+Gs = Gm.connected_components(283);
+Gs.visualise
+DiGraph(Go).visualise
+
+
+% ---
+% validation with comparison data
+% ---
+Gm = ClipSimGraphMulti(comparison, comparison_ids);
+num_compares = sparse(numel(comparison_ids), numel(comparison_ids));
+for i = 1:size(comparison,1)
+abc = sort(comparison(i,1:3));
+a = abc(1);
+b = abc(2);
+c = abc(3);
+num_compares(a,b) = num_compares(a,b) +1;
+num_compares(b,c) = num_compares(b,c) +1;
+num_compares(a,c) = num_compares(a,c) +1;
+end
+
+[i,j] = ind2sub(find(num_compares > 2))
+[i,j] = ind2sub(size(num_compares), find(num_compares > 2))
+[i,j] = ind2sub(size(num_compares), find(num_compares > 1)),
+i(1)
+j(1)
+find(comparison(:,1) == i(1) || comparison(:,2) == i(1) || comparison(:,3) == i(1)...)
+&& comparison(:,1) == j(1) || comparison(:,2) == j(1) || comparison(:,3) == j(1))
+find((comparison(:,1) == i(1) | comparison(:,2) == i(1) | comparison(:,3) == i(1))...)
+& (comparison(:,1) == j(1) | comparison(:,2) == j(1) | comparison(:,3) == j(1)))
+
+num = 2;
+a = find((comparison(:,1) == i(num) | comparison(:,2) == i(num) | comparison(:,3) == i(num))...)
+& (comparison(:,1) == j(num) | comparison(:,2) == j(num) | comparison(:,3) == j(num)))
+comparison(a,:)
+[i,j] = ind2sub(size(num_compares), find(num_compares > 1))
+num = 3;
+a = find((comparison(:,1) == i(num) | comparison(:,2) == i(num) | comparison(:,3) == i(num))...)
+& (comparison(:,1) == j(num) | comparison(:,2) == j(num) | comparison(:,3) == j(num)))
+comparison(a,:)
+[i,j] = ind2sub(size(num_compares), find(num_compares > 1))
+num = 18;
+a = find((comparison(:,1) == i(num) | comparison(:,2) == i(num) | comparison(:,3) == i(num))...)
+& (comparison(:,1) == j(num) | comparison(:,2) == j(num) | comparison(:,3) == j(num)))
+comparison(a,:)
+[i,j] = ind2sub(size(num_compares), find(num_compares > 1))
+num = 300;
+a = find((comparison(:,1) == i(num) | comparison(:,2) == i(num) | comparison(:,3) == i(num))...)
+& (comparison(:,1) == j(num) | comparison(:,2) == j(num) | comparison(:,3) == j(num)))
+comparison(a,:)
+
+% ---
+% other simulated data
+% ---
+ClipSimGraph([1 2 3 5 1 0;], 1:100).visualise
+ClipSimGraph([1 2 3 5 1 0; 1 2 4 6 0 0], 1:100).visualise
+ClipSimGraph([1 2 3 5 1 0; 1 2 4 6 0 0], 1:100).max_degree
+G = ClipSimGraph(comparison, comparison_ids);
+
+% --- 
+% scc algorithm tests
+% ---
+V = ones(1,5)
+E = zeros(5)
+for i=1:4
+E(i+1,i) = 1
+end
+E(1,4) = 1
+gtest = DiGRaph(V,E)
+
+gtest.strongly_connected_components(4)
+gtest.strongly_connected_components(5)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/macro_validate_cycle_finder.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,94 @@
+
+% profile clear;
+% profile on;
+
+clear eval;
+N = 20;
+for ci = 1:N
+    order = ci;
+    % connectivity = ceil(rand(1) * order)
+    % E = mk_rnd_dag(order, connectivity);
+    E = rand(order) > exp(1) * rand(1);
+
+    G = DiGraph(ones(order,1), E);
+    eval.G(ci) = G;
+    
+    eval.res_naive(ci) = acyclic(E);
+    
+    eval.res_myfun(ci) = G.isAcyclic;
+    
+    Gstob = ClipSimGraphStober(G);
+    
+    eval.res_stober(ci) = Gstob.isAcyclic;
+end
+eval
+
+
+figure
+plot([eval.res_naive' eval.res_myfun'+0.1 eval.res_stober'+0.2],'*')
+legend naive myfun stober
+axis([0 N  -1 2 ])
+% profile viewer;
+
+%%
+% ---
+% Comparison of implementations on magnatagatune dataset
+% ---
+
+% Stober Graph
+Gstob = ClipSimGraphStober();
+
+% Cast into matlab Graph
+GstobG = Gstob.to_DiGraph;
+
+% My Multigraph reimplementation
+Gm = ClipSimGraphMulti(comparison, comparison_ids);
+
+GstobG == Gm % TRUE - the converted Graph exactly resembles my extracted one
+
+Gm.isAcyclic % FALSE
+GstobG.isAcyclic % FALSE
+
+Gstob.isAcyclic % TRUE (this is wrong, there are a lot of length-2-cycles)
+
+% ---
+% Ok, now remove length 2 cycles
+% ---
+Gm.remove_cycles_length2 % matlab cycle remover
+Gstob.remove_cycles_length2 % stober cycle remover
+
+GstobGnocycles = Gstob.to_DiGraph();
+
+GstobGnocycles == Gm % TRUE - we remove the same edges
+
+% ---
+% NOTE: There are no cycles left
+% after removing length 2 cycles
+% ---
+GstobGnocycles.isAcyclic % TRUE
+
+Gstob.isAcyclic % FALSE inconsistent wrong result(compare with above)
+
+
+%% Finds the actual defective cycle
+
+Gstob = ClipSimGraphStober();
+Gstob.remove_cycles_length2
+
+GstobG = Gstob.to_DiGraph();
+Gstob.isAcyclic
+
+N = GstobG.node('227:45936');
+
+[Gs] = GstobG.connected_components(N);
+Gs.visualise
+
+% ---
+% Search same node in my Multigraph reimplementation
+% ---
+Gm = ClipSimGraphMulti(comparison, comparison_ids);
+Gm.remove_cycles_length2
+Nm = Gm.node(227,45936);
+
+[Gsm] = Gm.connected_components(Nm);
+Gsm.visualise
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/macro_validate_stober_randomsets.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+
+nruns = 50;
+weights = zeros(674, nruns);
+for i = 1:50;   
+    Gstob = ClipSimGraphStober();
+    Gstob.random_all_constraints_graph;
+    G = ClipSimGraphMulti(Gstob.to_DiGraph());
+
+    % ---
+    % derive similarity information: this
+    % returns the weights of edges meaning sim(a,b) > sim(a,c)
+    % ---   
+    [weights(:,i), a, b, c] = G.similarities();
+end
+
+% ---
+% lets see if the siilarity data is the same
+% it is NOT
+% ---
+diff = sum(sum(abs(diff(weights))))
+
+% ---
+% ok, my theory is that 
+% a. all the three-edge components are erased one edge.
+% b. if not all, then the ones with two edges 
+% being directed at the same node.
+% ---
+
+% ---
+% have to convert, as for some reason 
+% this does not work yet on multigraphs
+% ---
+Gdi = DiGraph(G);
+[Gs, s, id] = Gdi.connected_components();
+
+for i = 1:numel(Gs)
+    edges(i) = Gs(i).num_edges();
+end
+
+% only 2-edge graphs
+max(edges) 
+
+% ---
+% test if graphs are subgraphs of 860 full ne
+% ---
+Gm = ClipSimGraphMulti(comparison, comparison_ids);
+Gm.remove_cycles_lenght2;
+
+Gm.isSubgraph(G)
+
Binary file core/magnatagatune/magnagenres_final.mat has changed
Binary file core/magnatagatune/magnatune_song_info.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_ISMIR12_simdata.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+trainpart = logspace(-1.8, 0,20)
+
+[partBinTrn, partBinTst, partBinNoTrn] = sim_from_comparison_fair_components(comparison, comparison_ids, 10, trainpart);
+
+[partBinTrn, partBinTst, partBinNoTrn] = sim_from_comparison_UNfair_components(comparison, comparison_ids, 10, trainpart);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_camir_upgrade_paper_simdata.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+trainpart = logspace(-1.8, 0,20)
+
+for i = 1:10
+    filename = sprintf('comp_partBinData_cupaper_%02.0f',i)
+    sim_from_comparison_fair_components(comparison, comparison_ids, 10, trainpart, filename);
+    
+    filename = sprintf('comp_partBinData_unclustered_cupaper_%02.0f', i)
+    sim_from_comparison_UNfair_components(comparison, comparison_ids, 10, trainpart, filename);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_cupaper12_get_significance.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,351 @@
+% makro_get_significance_cupaper
+%%
+% ------------------------------ Algorithms Compared id-sampling
+% ---
+'mlr vs euclidean, mlr all average feat, ID-sampling'
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_1a58077f1232c33b787b661039df107d_finalresults';
+
+% euclidean average feat - TODO: which sampling is this ?
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_1a9788c5e14f30e23ed2a05dbf513c9f_finalresults';
+% ---
+% NOTE: all 4 test-set runs have exactly the same result 
+% ---
+run1 = -1;
+run2 = -1;
+mode = 'join_datasets'; % '', 'avgbase', 'join_datasets'
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run1,0,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+
+%%
+% ---
+'SVM vs euclidean, SVM all average feat, ID-sampling'
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_1841892e9df07039bbe4c3a55d11026a_finalresults';
+
+% euclidean average feat - TODO: which sampling is this ?
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_1a9788c5e14f30e23ed2a05dbf513c9f_finalresults';
+
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,0,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+%%
+% ------------------------------ Algorithms Compared TD-sampling
+% ---
+'mlr unclustered vs euclidean unclustered, mlr all average feat TD-sampling'
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_c364cb0803822d55f2940656c44b184d_finalresults';
+
+% euclidean average feat TD-sampling
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_72303bfa642aad872665dee7a3b1e28c_finalresults';
+
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,0,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+%%
+% ---
+'SVM unclustered vs euclidean unclustered, SVM all average feat TD-sampling'
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_3434f0534fa910b26bbf927c65a7fb74_finalresults';
+
+% euclidean average feat TD-sampling
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_72303bfa642aad872665dee7a3b1e28c_finalresults';
+% ---
+
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,0,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+
+%%
+% ------------------------------ Features Compared 
+'All 12-dim PCA Features compared'
+% ---
+namePCA12 = {'AcousticPCA12', ...
+    'Slaney08PCA12', ...
+    'TimbrePCA12', ...
+    'ChromaPCA12', ...
+    'AllPCA12', ...
+    'GenrePCA12'};
+% this is the index how the feature types appear in the paper
+paperidx = [4 3 2 6 1 5];
+
+filePCA12 = {'runlog_a18bd2111694ac59c9ba0a6810121796_1841892e9df07039bbe4c3a55d11026a_finalresults', ...
+    'runlog_37e47c187886f73ec9a7d8dc24a84a52_1841892e9df07039bbe4c3a55d11026a_finalresults', ...
+    'runlog_4c6787b403a07f5faf1ec26e891da4fa_1841892e9df07039bbe4c3a55d11026a_finalresults', ...
+    'runlog_c5566f74e6a0d00b50f5eea05fdacfee_1841892e9df07039bbe4c3a55d11026a_finalresults', ...
+    'runlog_e2c22696e7af9e7eea1fa1fd10a1f785_1841892e9df07039bbe4c3a55d11026a_finalresults', ...
+    'runlog_efc6e5e9c56291cd1744092a1c59a293_1841892e9df07039bbe4c3a55d11026a_finalresults'};
+
+
+namePCA12 = namePCA12(paperidx);
+filePCA12 = filePCA12(paperidx);
+
+p = zeros(numel(namePCA12),numel(namePCA12));
+med = zeros(numel(namePCA12),numel(namePCA12));
+avg = zeros(numel(namePCA12),numel(namePCA12));
+for i=1:numel(name)
+    for j = 1:i-1
+        [p(i,j), med(i,j), avg(i,j)] = test_generic_significance_signrank(filePCA12{i},-1,filePCA12{j},-1,0,mode);
+    end
+   % p(i,i) = 0.5;
+end
+% p = p + p';
+imagesc(p);
+colormap(hot)
+axis xy
+set(gca,'XTick',1:numel(namePCA12), 'XTickLabel', namePCA12);
+set(gca,'YTick',1:numel(namePCA12), 'YTickLabel', namePCA12);
+matrix2latex(p,'%1.3f')
+
+%%
+'All 52-dim PCA Features compared'
+% ---
+namePCA52 = {'GenrePCA52', ...
+    'AllPCA52', ...
+    'TimbrePCA52', ...
+    'AcousticPCA52', ...
+    'ChromaPCA52' ...
+     };
+% this is the index how the feature types appear in the paper
+paperidx = [5 3 1 4 2];
+
+filePCA52 = {'runlog_3cbf4759cf58af0728aaab0b5f2660e3_1841892e9df07039bbe4c3a55d11026a_finalresults', ...
+    'runlog_7d5fafec0dc504215acc8cb7a9202a56_1841892e9df07039bbe4c3a55d11026a_finalresults', ...
+    'runlog_a3c2c0a5742a42fd54497e69b8f44e8d_1841892e9df07039bbe4c3a55d11026a_finalresults', ...
+    'runlog_c7164074206998aa184538bedcfdcf2f_1841892e9df07039bbe4c3a55d11026a_finalresults', ...
+    'runlog_efbf7c8e75ae154c2f192acd08fbdcbc_1841892e9df07039bbe4c3a55d11026a_finalresults' ...
+    };
+
+
+namePCA52 = namePCA52(paperidx);
+filePCA52 = filePCA52(paperidx);
+
+p = zeros(numel(namePCA52),numel(namePCA52));
+med = zeros(numel(namePCA52),numel(namePCA52));
+avg = zeros(numel(namePCA52),numel(namePCA52));
+for i=1:numel(name)
+    for j = 1:i-1
+        [p(i,j), med(i,j), avg(i,j)] = test_generic_significance_signrank(...
+            filePCA52{i},run1,filePCA52{j},run2,0,mode);
+    end
+   % p(i,i) = 0.5;
+end
+% p = p + p';
+imagesc(p);
+colormap(hot)
+axis xy
+set(gca,'XTick',1:numel(namePCA52), 'XTickLabel', namePCA52);
+set(gca,'YTick',1:numel(namePCA52), 'YTickLabel', namePCA52);
+matrix2latex(p,'%1.3f')
+
+%%
+'All full-dim Features compared (SVM)'
+% ---
+name = {'4Chroma', ...
+    '1Chroma', ...
+    '4Timbre', ...
+    '1Timbre', ...
+    '1Acoustic', ...
+    'Genre', ...
+    'Slaney08', ...
+    '1All', ...
+    '4All', ...
+    '4Acoustic' ...
+    };
+
+% this is the index how the feature types appear in the paper
+% Features & Chroma(1/4) & Timbre(1/4) & Slaney08 & Genre & Comb. Audio (1/4) & Comb. All(1/4) \\
+paperidx = [2 1 4 3 7 6 5 10 8 9];
+
+file = {'runlog_20a2f6a0f20f488e9386ebb8c5026fcf_85c439d9ef3d135936e7645ebc0efe36_finalresults', ...
+    'runlog_20a2f6a0f20f488e9386ebb8c5026fcf_85c439d9ef3d135936e7645ebc0efe36_finalresults', ...
+    'runlog_3154f36c34c18f60218c5d3f0c0b5931_85c439d9ef3d135936e7645ebc0efe36_finalresults', ...
+    'runlog_3154f36c34c18f60218c5d3f0c0b5931_85c439d9ef3d135936e7645ebc0efe36_finalresults', ...
+    'runlog_31981d48dd0d25564ef3c2b3ca650b3b_1841892e9df07039bbe4c3a55d11026a_finalresults', ...
+    'runlog_37867d3b5bd4c74b7b548732b80fb947_85c439d9ef3d135936e7645ebc0efe36_finalresults', ...
+    'runlog_f52d37439805ac4edc70b0432281abc3_85c439d9ef3d135936e7645ebc0efe36_finalresults', ...
+    'runlog_0b506247a68167addf97fcb0296650eb_1841892e9df07039bbe4c3a55d11026a_finalresults', ...
+    'runlog_800d97be9ef6274dc3bbe6b9be2406a6_1a58077f1232c33b787b661039df107d_finalresults', ...
+    'runlog_cf5a61cca09e2a3182b794b70ee1ab91_1841892e9df07039bbe4c3a55d11026a_finalresults' ...
+    };
+
+sets2join = {[1:4],[5:8],[1:4],[5:8],[],[],[],[],[],[]};
+
+name = name(paperidx);
+file = file(paperidx);
+
+p = zeros(numel(name),numel(name));
+med = zeros(numel(name),numel(name));
+avg = zeros(numel(name),numel(name));
+for i=1:numel(name)
+    for j = 1:i-1
+        [p(i,j), med(i,j), avg(i,j)] = test_generic_significance_signrank(...
+            file{i},sets2join{i},file{j},sets2join{j},0,mode);
+    end
+   % p(i,i) = 0.5;
+end
+p = flipud(p);
+% p = p + p';
+imagesc(p);
+colormap(hot)
+axis ij
+set(gca,'XTick',1:numel(name), 'XTickLabel', name);
+set(gca,'YTick',1:numel(name), 'YTickLabel', fliplr(name));
+matrix2latex(p,'%1.3f')
+
+%%
+'Comparing Feature dimensions and PCA effect on combined all features'
+% ---
+% 'SVM all average feat, ID-sampling'
+allavg = 'runlog_0b506247a68167addf97fcb0296650eb_1841892e9df07039bbe4c3a55d11026a_finalresults';
+
+% 'SVM 4 cluster feat, ID-sampling'
+allfourcluster = 'runlog_800d97be9ef6274dc3bbe6b9be2406a6_1a58077f1232c33b787b661039df107d_finalresults';
+
+% 'SVM 12dim feat, ID-sampling'
+pca12 = 'runlog_e2c22696e7af9e7eea1fa1fd10a1f785_1841892e9df07039bbe4c3a55d11026a_finalresults';
+
+% 'SVM 52dim feat, ID-sampling'
+pca52 = 'runlog_7d5fafec0dc504215acc8cb7a9202a56_1841892e9df07039bbe4c3a55d11026a_finalresults';
+% ---
+% NOTE: all 4 test-set runs have exactly the same result 
+% ---
+run1 = -1;
+run2 = -1;
+mode = 'join_datasets'; % '', 'avgbase', 'join_datasets'
+
+'AllAvg vs Pca12'
+[p, med, avg] = test_generic_significance_signrank(allavg,run1,pca12,run2,0,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+'AllAvg vs pca52'
+[p, med, avg] = test_generic_significance_signrank(allavg,run1,pca52,run2,0,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+'Pca12 vs pca52'
+[p, med, avg] = test_generic_significance_signrank(pca12,run1,pca52,run2,0,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+
+%%
+% ------------------------------ Algorithms Weighted Training Weighted Performance Compared 
+'MLR t:w,e:w vs euclidean t:w,e:w'
+% ---
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_3cdcca7596fed97f87b0ec051cb8bba0_finalresults';
+
+% euclidean baseline, file same as the unweighted above
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_1a9788c5e14f30e23ed2a05dbf513c9f_finalresults';
+% ---
+% NOTE: using the "weighted" parameter here
+% ---
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,  1   ,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+%%
+'DMLR t:w,e:w vs euclidean t:w,e:w'
+% ---
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_1cc76d534804229cbdec8b20f8b75dba_finalresults';
+
+% euclidean baseline, file same as the unweighted above
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_1a9788c5e14f30e23ed2a05dbf513c9f_finalresults';
+% ---
+% NOTE: using the "weighted" parameter here
+% ---
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,  1   ,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+%%
+'SVM t:w,e:w vs euclidean t:w,e:w'
+% ---
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_9bd9ccddb2e4e622e2ba9826466442ba_finalresults';
+
+% euclidean baseline, file same as the unweighted above
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_1a9788c5e14f30e23ed2a05dbf513c9f_finalresults';
+% ---
+% NOTE: using the "weighted" parameter here
+% ---
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,  1   ,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+%%
+% ------------------------------ Algorithms Weighted Training UNWEIGHTED Performance Compared 
+'MLR t:w,e:uw vs euclidean t:w,e:uw'
+% ---
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_3cdcca7596fed97f87b0ec051cb8bba0_finalresults';
+
+% euclidean baseline, file same as the unweighted above
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_1a9788c5e14f30e23ed2a05dbf513c9f_finalresults';
+% ---
+% NOTE: using the "weighted" parameter here
+% ---
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,  0   ,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+%%
+'DMLR t:w,e:uw vs euclidean t:w,e:uw'
+% ---
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_1cc76d534804229cbdec8b20f8b75dba_finalresults';
+
+% euclidean baseline, file same as the unweighted above
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_1a9788c5e14f30e23ed2a05dbf513c9f_finalresults';
+% ---
+% NOTE: using the "weighted" parameter here
+% ---
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,  0   ,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+%%
+'SVM t:w,e:uw vs euclidean t:w,e:uw'
+% ---
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_9bd9ccddb2e4e622e2ba9826466442ba_finalresults';
+
+% euclidean baseline, file same as the unweighted above
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_1a9788c5e14f30e23ed2a05dbf513c9f_finalresults';
+% ---
+% NOTE: using the "weighted" parameter here
+% ---
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,  0   ,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+
+%%
+% ------------------------------ Algorithms w / uw Training WEIGHTED Performance Compared 
+'MLR t:w,e:w vs MLR t:uw,e:w'
+% ---
+% MLR t:w,e:w
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_3cdcca7596fed97f87b0ec051cb8bba0_finalresults';
+
+% MLR t:uw,e:w
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_1a58077f1232c33b787b661039df107d_finalresults';
+% ---
+% NOTE: using the "weighted" parameter here
+% ---
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,  1   ,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+%%
+% ---
+'SVM t:w,e:w vs SVM t:uw,e:w'
+% ---
+% SVM t:w,e:w
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_9bd9ccddb2e4e622e2ba9826466442ba_finalresults';
+
+% SVM t:uw,e:w
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_1841892e9df07039bbe4c3a55d11026a_finalresults';
+% ---
+% NOTE: using the "weighted" parameter here
+% ---
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,  1   ,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
+
+%%
+% ------------------------------ Algorithms w / uw Training WEIGHTED Performance Compared 
+'DMLR t:w,e:w vs DMLR t:uw,e:w'
+% ---
+% DMLR t:w,e:w
+file1 = 'runlog_0b506247a68167addf97fcb0296650eb_1cc76d534804229cbdec8b20f8b75dba_finalresults';
+
+% DMLR t:uw,e:w
+file2 = 'runlog_0b506247a68167addf97fcb0296650eb_bf08b16f453683d96ddffc31c6439730_finalresults';
+% ---
+% NOTE: using the "weighted" parameter here
+% ---
+[p, med, avg] = test_generic_significance_signrank(file1,run1,file2,run2,  1   ,mode);
+fprintf('p = %3.4f, median = %3.4f, avg = %3.4f \n\n',p,med,avg);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_export_db_mtttags.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+
+
+tag_names = [db_magnaclips.tagdb.lexicon];
+for i = 1:numel(tag_names)
+    tag_names2(i,[2 1]) = {tag_names{i}, i};
+end
+CELL2CSV('tag_names.csv',tag_names2, ',') ;
+
+for i = 1:numel(u)
+    file_names(i,1:2) = {u(i), db_magnaclips.annots_filenames{i,2}};
+end
+CELL2CSV('file_names.csv',file_names, ',') ;
+
+for i = 1:numel(clips)
+    clip_tags(i,1:2) = {u(i), implode(', ', clips(i).tag_ids)};
+end
+CELL2CSV('clip_tags.csv',clip_tags, ';') ;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_growingk_simdata.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+
+trainpart = logspace(-1.8, 0,20)
+k = [2 5 10];
+for i = 1:numel(k)
+    filename = sprintf('comp_partBinData_growingk_%02.0f',i)
+    sim_from_comparison_fair_components(comparison, comparison_ids, k(i), trainpart, filename);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_import_magnatagatune.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,154 @@
+% makro_import_magnatatatune
+
+csv2cell('annotations_final.csv','fromfile')
+clip_info_final = csv2cell('clip_info_final.csv','fromfile');
+comparisons_final = csv2cell('comparisons_final.csv','fromfile');
+
+% tag annotations
+annots = strcell2matrix(annotations_final,[1 0],[0 1]);
+annots_descripts = {annotations_final{1,:}};
+annots_filenames = cat(1,{annotations_final{:,1}},{annotations_final{:,end}})';
+
+% comparison measures
+comp = strcell2matrix(comparisons_final,[0 0], [0 3]);
+comp_descripts = {comparisons_final{1,:}};
+
+%%
+% -----------------------------------------------------------
+% ---
+% part two: extracting and associating Genre
+% 
+% at first we filter out the relevant positions in clip_info_final-
+% ---
+
+% prepare clip_info
+info_ids = {clip_info_final{:,1}};
+info_ids = strcell2matrix(info_ids);
+
+% ---
+% CAUTION: a offset because of table header is added
+% ---
+info_ids = info_ids(2:end);
+
+% prepare file annots
+file_ids = {annots_filenames{:,1}};
+file_ids = strcell2matrix(file_ids);
+file_ids = file_ids(2:end);
+
+% intersect ids
+[c, ia, ib] = intersect(file_ids, info_ids);
+
+% and save into proper
+clip_info_proper_names = clip_info_final(1,:);
+clip_info_proper = clip_info_final(ib+1,:);
+
+% clean proper for mysterious beginnings
+for i = 1:size(clip_info_proper,1)
+    % leave out first row;
+    for j = 2:size(clip_info_proper,2)
+        clip_info_proper{i,j} = clip_info_proper{i,j}(2:end);
+    end
+end
+
+% ---
+%  % GENRE extraction
+%
+% now, we load the new file and search for the information on the 
+% actual excerpts we have
+% ---
+tmp = csv2cell('song_info.csv','fromfile');
+
+%%
+% these are for keeping book of missing items
+not_found = [];
+man_album_name = {};
+
+rel_cols = [6,7];
+% make header
+clip_info_extra_names = {'clip_id',tmp{1,rel_cols}};
+clip_info_extra = {};
+
+for i = 1:size(clip_info_proper,1)
+    % ---
+    % search by url
+    % ---
+    % convert search string 
+    s = char(clip_info_proper{i,9});
+    idx = strcellfind(tmp(:,9),s);
+    
+    % we'll have to loosen the search
+    if idx < 1
+        warning(sprintf('! %s, album %s, artist %s!',clip_info_proper{i,1},...
+            clip_info_proper{i,5},clip_info_proper{i,4}));
+        
+        % make note ...
+        not_found = cat(1,not_found,[str2num(clip_info_proper{i,1}), 0]);
+        
+        not_found(end,2) = 1;
+        % ---
+        % ok, no problem, lets look for the album!
+        % ---
+        s = char(clip_info_proper{i,5});
+        idx = strcellfind(tmp(:,3),s);
+    
+        if idx < 1
+            
+            not_found(end,2) = 2;
+            % ---
+            % search for artist
+            % ---
+            s = char(clip_info_proper{i,4});
+            idx = strcellfind(tmp(:,1),s);
+        end
+
+        if idx < 1
+            
+            not_found(end,2) = 3;
+            % ---
+            % this is the last try to get hold of such artists
+            % they may be noted as a trackname or description substring in a compilation
+            % ---
+            s = char(clip_info_proper{i,4});
+            idx = substrcellfind(tmp(:,2),s);
+        end
+        
+        if idx < 1 
+            
+            warning(sprintf(' - %s, %s \n',clip_info_proper{i,1},clip_info_proper{i,4}));
+            newinfo = {''};
+            
+            % reset suspected success
+            not_found(end,2) = 0;
+        else
+            
+            warning(sprintf(' + associated album %s, artist %s \n',tmp{idx,3},tmp{idx,1}));
+            
+            % get relevant data
+            newinfo = {tmp{idx,[3 1 12]}};
+            
+            % ---
+            % save genre
+            % ---
+            clip_info_extra = cat(1,clip_info_extra,{clip_info_proper{i,1},tmp{idx,rel_cols}});
+        end
+        
+        % report new location/info of album
+        s = char(clip_info_proper{i,5});
+        if isempty(man_album_name) || strcellfind(man_album_name(:,1),s) == -1 ;
+            man_album_name = cat(1, man_album_name, {clip_info_proper{i,5},newinfo{:}});
+        end
+        
+    else
+        % ---
+        % save genre
+        % ---
+        clip_info_extra = cat(1,clip_info_extra,{clip_info_proper{i,1},tmp{idx,rel_cols}});
+    end    
+end
+
+clear('newinfo','i','j','idx','s','ia','ib','rel_cols')
+    
+
+
+        
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_import_magnatagatune_isrc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,83 @@
+% --- 
+% import isrcs via albums for magnatune clips
+
+% now, we load the new file and search for the information on the 
+% actual excerpts we have
+% ---
+clip_info_proper = db_MTTClip.clip_info_proper;
+
+
+ db = adodb_connect('Driver={MySQL ODBC 5.1 Driver}; Server=10.2.165.196; Database=test; UID=daniel; PWD=wucity;',2000);
+ sql = 'SELECT download_mp3, artist, albumname, isrc, download_mp3lofi FROM `magnatune_song_info` where 1'; % 401 times not found
+ [res,resformat] = adodb_query(db, sql);
+
+
+% these are for keeping book of missing items
+not_found = [];
+isrc = cell(numel(db_MTTClip.annots_ids),1);
+for i = 1:numel(db_MTTClip.annots_ids)
+    % ---
+    % identify the clip by url 
+    % ---
+    % convert search string 
+    s = db_MTTClip.clip_info_proper{i,9};
+    
+    idx = strcellfind(res.download_mp3,s);
+    if isempty(idx)
+        idx = strcellfind(res.download_mp3lofi,s);
+    end
+    
+    % we'll have to loosen the search
+    if isempty(idx) | idx < 1
+%         warning(sprintf('! %s, album %s, artist %s!',clip_info_proper{i,1},...
+%             clip_info_proper{i,5},clip_info_proper{i,4}));
+        
+        % make note ...
+        not_found = cat(1,not_found,[str2num(clip_info_proper{i,1}), 0]);
+        
+        not_found(end,2) = 1;
+        % ---
+        % ok, no problem, lets look for the album and artist!
+        % ---
+        s = char(clip_info_proper{i,5});
+        idx = strcellfind(res.albumname,s);
+    end
+
+
+    if isempty(idx) | idx < 1
+        warning(sprintf('-- Album not found %s, album %s, artist %s!',clip_info_proper{i,1},...
+            clip_info_proper{i,5},clip_info_proper{i,4}));
+
+        not_found(end,2) = 2;
+        % ---
+        % search for artist
+        % ---
+        s = char(clip_info_proper{i,4});
+        idx = strcellfind(res.artist,s);
+    end
+        
+    if  isempty(idx) | idx < 0
+        warning(sprintf(' ---- Artist not found %s, album %s, artist %s!',clip_info_proper{i,1},...
+            clip_info_proper{i,5},clip_info_proper{i,4}));
+        not_found(end,2) = 3;
+%             % ---
+%             % this is the last try to get hold of such artists
+%             % they may be noted as a trackname or description substring in a compilation
+%             % ---
+%             s = char(clip_info_proper{i,4});
+%             idx = substrcellfind(tmp(:,2),s);
+    else
+        isrc{i} = char(res.isrc{idx});
+    end
+        
+       
+        % report new location/info of album
+        
+        % ---
+        % save genre
+        % ---
+        %clip_info_extra = cat(1,clip_info_extra,{clip_info_proper{i,1},tmp{idx,rel_cols}});
+        
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_import_magnatagatune_mbid_cleanupisrc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+function out = makro_import_magnatagatune_mbid_cleanupisrc();
+load db.mat
+clip_info_proper_names
+artists_mbid_map = containers.Map('KeyType', 'char', 'ValueType', 'char');
+artists_matched = containers.Map('KeyType', 'char', 'ValueType', 'char');
+cnt_workd = 0;
+for i = 1:size(clip_info_proper,1)
+        if ~isempty(clip_info_proper{i,12})
+            continue;
+        end
+        % ---
+        % ok, we have the isrc, lets get the artist id
+        % ---
+        % clip_info_proper{i,11} = annots_isrc{i};
+        
+        if artists_mbid_map.isKey(clip_info_proper{i,4})
+            % did we already process this artist?
+            if ~strcmp(artists_mbid_map(clip_info_proper{i,4}), '-');
+                artist_mbid = artists_mbid_map(clip_info_proper{i,4});
+            end
+        else
+            try
+                % no we didnt, get the artist mbid via album and artist name
+                [artist_mbid,artist_found, out] = mb_retrieve_artist_id_from_album_info(clip_info_proper{i,4},clip_info_proper{i,5});
+
+                if ~isempty(artist_mbid)
+                    cprint(0,'loaded info for %s: found %s, %s',clip_info_proper{i,4},artist_found,artist_mbid);
+                    
+                    artists_matched(clip_info_proper{i,4}) = artist_found;
+                    artists_mbid_map(clip_info_proper{i,4}) = artist_mbid;
+                    cnt_workd = cnt_workd + 1;
+                else
+                     artists_mbid_map(clip_info_proper{i,4}) = '-';
+                end
+                pause(1)
+            catch
+            end
+        end
+        clip_info_proper{i,12} = artist_mbid;
+  
+end
+        
+% clip_info_proper_names{11} = 'isrc';
+clip_info_proper_names{12} = 'artist_mbid';
+clear annots_isrc; 
+clear artists_mbid_map; 
+clear i; 
+clear cnt_workd;
+clear out;
+save db_new.mat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_import_magnatagatune_mbtags.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function out = makro_import_magnatagatune_mbtags();
+load db.mat
+clip_info_proper_names
+cnt_workd = 0;
+
+mbtagdb = AnnotDB();
+
+failedartists = [];
+
+for i = 1:size(clip_info_proper,1)
+    % ---
+    % get internal artist id
+    % ---
+    artistintid = artistdb.get_annot_id(lower(clip_info_proper{i,4}));
+        
+    % do we have an mbid if not skip?
+    if isempty(clip_info_proper{i,12}) || strcmp(clip_info_proper{i,12}, '-')
+        continue;
+    end
+
+    % do we have tags for this artist?
+    if ~isempty( mbtagdb.annotids_for_owner(artistintid)) || sum(failedartists== artistintid)> 0;
+        continue
+    end
+
+    try
+        % ---
+        % ok, lets get the tags
+        % ---
+        [tags,count, out] = mb_retrieve_tags_for_artist_id(clip_info_proper{i,12});
+
+        if ~isempty(tags)
+            cprint(0,'loaded info for %s: found %s, %s',clip_info_proper{i,4},artist_found,artist_mbid);
+
+            % ---
+            % TODO: save tags in map
+            % ---
+            for i=1:numel(tags)
+                mbtagdb.add_pair(artistintid, tags{i}, count(i));
+            end
+            cnt_workd = cnt_workd + 1;
+
+        else
+            cprint(0,'no tags received for %s:%s',clip_info_proper{i,4});
+             % TODO: mark no tags received for this
+             failedartists(end+1) = artistintid;
+        end
+        pause(1)
+    catch
+    end
+  
+end
+
+failedartists
+numel(failedartists);
+clear failedartists
+save ('db.mat','mbtagdb','-append')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_insert_mtt_allmusic_genres.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,125 @@
+function [amginfo, notFound]= makro_insert_mtt_allmusic_genres()
+%
+% gets isrc number of (MSD) tracks and then retrieves genre from allmusic
+
+
+% db connection
+ db = adodb_connect('Driver={MySQL ODBC 5.1 Driver}; Server=chivm.soi.city.ac.uk; Database=camir_ooo_0.1; UID=daniel; PWD=11a11a;',2000);
+% db = adodb_connect('Driver={MySQL ODBC 5.2w Driver}; Server=chivm.soi.city.ac.uk; Database=camir_ooo_0.1; UID=daniel; PWD=11a11a;',2000);
+
+% ---
+% 1. get all / a song from song table
+% NOTE: we start ftom the last annotated song
+% ---
+
+% sql = ['SELECT max(songId) FROM linksonggenre_amg'];
+% [~, id] = adodb_query(db, sql); 
+% id = id{1}
+
+% select only mtt songs
+sql = sprintf('SELECT * FROM songlibrary where id < 1020');
+[a] = adodb_query(db, sql);
+
+sevenapikey = '7drb8p23ggb7';
+roviapikey = 'mwtpx4bjc6wkz4j6u5t2ktr8';
+roviapisecret = 'UMfYTxg6qT';
+
+for i=1:numel(a.id)
+% ---
+% 3. Where isrc code exists: get all genre tags from allmusic/robe
+%    Optional: get style tags ?
+% ---
+     clip = CASIMIRClip(a.id{i});
+     if isempty(clip.child_clip.isrc())
+         continue;
+     end
+     
+     % ---
+     % we update the isrc's and mbids along the way
+     % ---
+     sql = ['UPDATE songlibrary SET isrcId='  sprintf('"%s"',clip.child_clip.isrc()) ', artistMBid=' sprintf('"%s"',clip.child_clip.artist_mbid())  ' WHERE (id =' sprintf('%i',a.id{i}) ')'];
+     [~, id] = adodb_query(db, sql); 
+     
+     % ---
+     % have we had this song before? then lets avoid duplicates
+     % ---
+     sql = ['SELECT songId FROM linksonggenre_amg WHERE (songId =' sprintf('%i',a.id{i}) ')'];
+     [~, id] = adodb_query(db, sql); 
+     if ~isempty(id)
+         continue;
+     end
+    % ---
+    % NOTE: this key is valid for 5 minutes only.
+    %       the sharedsecret is never given to the API :)
+    % ---
+    sig = amg_rovi_signature(roviapikey, roviapisecret);
+    try
+        % song info API
+        url = sprintf('http://api.rovicorp.com/data/v1/song/info?apikey=%s&sig=%s&isrcid=%s',roviapikey,sig,clip.child_clip.isrc());
+        [tmp, status] = curl(url);
+        
+        % after curl we can directly decode
+        tmpstr = json_decode(tmp);
+        
+        if strcmp(tmpstr.status,'error')
+            notFound(i) = tmpstr;
+            cprint(1,'%i of %i - %s',i,numel(a.id),notFound(i).messages.text);
+            pause(rand(2));
+            continue;
+        end
+        amginfo(i) = tmpstr;
+
+    %   .song.genres      id: 'MA0000002692'
+    %                   name: 'Latin'
+    %                 weight: 10
+
+        % ---
+        % 4. for each genre: 
+        %    - save into genre tagstable
+        %    - associate with song id in linksonggenre
+        % ---
+        for j = 1:numel(amginfo(i).song.genres)
+
+            % first insert the genre
+            genreId = insertGenre(db,  amginfo(i).song.genres(j).name,  amginfo(i).song.genres(j).id);
+
+            sql = 'REPLACE INTO linksonggenre_amg (songId, genreId) VALUES (%i, %i)';
+            sql = sprintf(sql, a.id{i}, genreId);
+            [res] = adodb_query(db, sql);
+        end
+        cprint(1,'%i of %i - saved %i genres',i,numel(a.id),numel( amginfo(i).song.genres));
+        pause(rand(10));
+    catch
+        cprint(1,'%i of %i - error response: %s',i,numel(a.id), tmp);
+        pause(rand(10));
+    end
+
+end
+end
+
+function id = insertGenre(db, name, locId)
+
+    % ---
+    % check if genre also exists,
+    % return id if so
+    % ---
+    sql = ['SELECT id FROM `genre_amg` WHERE (musicDbLocId ="' locId '")'];
+    [~, id] = adodb_query(db, sql);
+    
+    if ~isempty(id)
+        id = id{1};
+        return;
+    else
+        % insert genre into table
+        sql = [ 'INSERT INTO genre_amg (name,musicDbLocId) ' ...
+            'VALUES ("' name '","' locId '")'];
+        [res] = adodb_query(db, sql);
+        
+        sql = 'SELECT max(id) FROM genre_amg';
+        [~, id] = adodb_query(db, sql); 
+        id = id{1};
+        cprint(1,'inserted genre %i:%s',name)
+    end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_merge_last.fm_data.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,110 @@
+% makro_merge_last.fm_data
+
+% ---
+% make sure we just search once for each artist
+% ---
+[artists,null, idx] = unique(clip_info_proper(:,4));
+
+
+% ---
+% this is were we search for our artists in last.fm
+% ---
+[fmartist, fmartist_names] = fm_corresponding_artists(artists);
+
+%%
+% ---
+% add Id's to artist structure
+% ---
+
+% collect clip ids
+for i = 1:numel(artists)
+    clip_ids{i} = annots_ids(idx == i);
+end
+fmartists = cat(2,clip_ids', fmartist);
+fmartist_names = {'clip_ids',fmartist_names{:}};
+
+clear fmartist;
+
+[a, b] = fm_retrieve_artist('Mijo');
+fmartist(strcellfind(fmartist(:,1),'Mijo'),2:3) = {a{1}, b{1}};
+
+% ---
+% TODO: code manual sorting out of bad associations here, for better
+% reproducibility
+% ---
+
+% 
+bad_artiidx = find(strcmp('-1', fmartist(:,2)));
+
+% ---
+% we remove the magnatune compilation artist,
+% as tags are not really descriptive for this
+% ---
+bad_artiidx = [bad_artiidx substrcellfind(fmartist(:,1), 'Magna', 1)];
+
+bad_artists = zeros(size(fmartist,1),1);
+bad_artists(bad_artiidx) = 1;
+
+
+% ---
+% NOTE: as we have two categories of reasons for non-existing tags
+% (exclusion above and failure), there is two different data entries fur
+% such: '-1' for "artist not found in last.fm database" and 
+%       [] for excluded items.
+% ---
+
+fmartist_tags = {};
+for i = 1:size(fmartist,1)
+    
+    if ~bad_artists(i)
+        fprintf('%d percent: %s\n',floor(i*100/size(fmartist,1)),fmartist{i,2});
+        [a, b] = fm_retrieve_artist_tags(fmartist{i,2});
+        fmartist_tags(i,:) = {a, b};
+    end
+end
+%%
+% ---
+% now, we access the frequency of all tags, trying to establish an
+% vocabulary suitable for defining similarity measurements
+% ---
+% ---
+% collect all tags and number of occurence
+% the tag array is allocated beforeghand to save time
+% ---
+
+fmartist_annots = sparse(size(fmartist_tags,1),2000);
+fmartist_annots_names = {};
+for i = 1:size(fmartist_tags,1)
+    
+    % ---
+    % FIXME: obviously some tags get into the names table but dont get any 
+    % score associated. 
+    % ---
+    for j = 1:numel(fmartist_tags{i,1})
+        if isempty(fmartist_tags{i,1}) || strcmp(fmartist_tags{i,1}{j},'-1');
+            continue;
+        end
+        
+        % find tag in new tag array
+        tagidx = strcellfind(fmartist_annots_names, fmartist_tags{i,1}{j});
+        if tagidx ~= -1
+            
+            % ---
+            % NOTE: the fmartist_annots array saves the tag popularities in
+            %  an INT structure. this has to be converted to double before
+            %  using it in any other circumstances
+            % ---
+            
+            % save tag domination
+            fmartist_annots(i,tagidx) = double(fmartist_tags{i,2}(j))./100;
+        else
+            tagidx = numel(fmartist_annots_names)+1;
+            
+            % create new tag field
+            fmartist_annots_names{tagidx} = fmartist_tags{i,1}{j};
+            
+            % save tag domination
+            fmartist_annots(i,tagidx) = double(fmartist_tags{i,2}(j))./100; 
+        end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/makro_prepare_comparison.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+% makro_prepare_comparison
+
+% ---
+% re_index the comparison song ids
+% ---
+comparison_ids = unique([comparison(:,1); comparison(:,2); comparison(:,3)]);
+
+for i = 1:3
+    for j = 1:numel(comparison_ids)
+        
+        comparison(comparison(:,i) == comparison_ids(j),i) = j;
+    end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/mb_retrieve_artist_id_from_album_info.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function [artist_mbid,artist_found, out] = mb_retrieve_artist_id_from_album_info(artist,album)
+
+% http://www.musicbrainz.org/ws/2/recording?query=%22we%20will%20rock%20you%22%20AND%20arid:0383dadf-2a4e-4d10-a46a-e9e041da8eb3 
+% call python function
+str = python('mbid_from_artist_album.py',artist,album)
+
+% parse text function output
+artists = textscan(str,'%s %s','Delimiter','\n');
+mbids = artists{2};
+artist_found = artists{1}{1};
+
+% song info API
+% url = sprintf('http://www.musicbrainz.org/ws/2/recording?query=%s',urlencode(sprintf('%s AND artist:%s',album,artist)));
+url = sprintf('http://www.musicbrainz.org/ws/2/release/%s?inc=artists',urlencode(mbids));
+
+[status] = wget(url,' --no-verbose -U firefox -O tmp.xml');
+out = xml2struct('tmp.xml');
+
+isrc = [];
+artist_mbid = [];
+
+try
+artist_mbid = out.metadata.release.artist_dash_credit.name_dash_credit.artist.Attributes.id;
+catch
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/mb_retrieve_artist_id_from_isrc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function [artist_mbid, out] = mb_retrieve_artist_id_from_isrc(isrc)
+
+% song info API
+url = sprintf('http://www.musicbrainz.org/ws/2/isrc/%s',urlencode(isrc));
+[status] = wget(url,'-t 10 -U firefox -O tmp.xml');
+
+try
+    out = xml2struct('tmp.xml');
+    % album name for verification
+    albumname = out.metadata.isrc.recording_dash_list.recording.title
+    artist_mbid = out.metadata.isrc.recording_dash_list.recording.Attributes.id;
+catch
+    artist_mbid = [];
+    out = [];
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/mb_retrieve_tags_for_artist_id.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function [tags,count, out] = mb_retrieve_tags_for_artist_id(artistid)
+
+% song info API
+url = sprintf('http://www.musicbrainz.org/ws/2/artist/%s?inc=tags',urlencode(artistid));
+[status] = wget(url,'--tries=10 -U firefox -O tmp.xml');
+
+try
+    out = xml2struct('tmp.xml');
+    tags = cell(numel(out.metadata.artist.tag_dash_list.tag),1);
+    count = zeros(numel(out.metadata.artist.tag_dash_list.tag),1);
+    for i=1:numel(out.metadata.artist.tag_dash_list.tag)
+       tags{i} = out.metadata.artist.tag_dash_list.tag{i}.name.Text;
+       count(i) = str2double(out.metadata.artist.tag_dash_list.tag{i}.Attributes.count);
+    end
+catch
+    out = [];
+    tags = {};
+    count = [];
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/mbid_from_artist_album.py	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+"""A simple script that searches for a release in the MusicBrainz
+database and prints out a few details about the first  matching release.
+
+    $ ./releasesearch.py "the beatles" revolver
+    Revolver, by The Beatles
+    Released 1966-08-08 (Official)
+    MusicBrainz ID: b4b04cbf-118a-3944-9545-38a0a88ff1a2
+"""
+from __future__ import print_function
+from __future__ import unicode_literals
+import musicbrainzngs
+import sys
+
+musicbrainzngs.set_useragent(
+    "python-musicbrainz-ngs-example",
+    "0.1",
+    "https://github.com/alastair/python-musicbrainz-ngs/",
+)
+
+def show_release_details(rel):
+    """Print some details about a release dictionary to stdout.
+    """
+    # "artist-credit-phrase" is a flat string of the credited artists
+    # joined with " + " or whatever is given by the server.
+    # You can also work with the "artist-credit" list manually.
+    print("{}, by {}".format(rel['title'], rel["artist-credit-phrase"]))
+    print("{}".format(rel['id']))
+    
+
+
+def fail(message):
+    """Print a message to stderr and then exit with an error status.
+    """
+    print(message, file=sys.stderr)
+    sys.exit(1)
+
+if __name__ == '__main__':
+    args = sys.argv[1:]
+    if len(args) != 2:
+        fail("usage: {} ARTIST ALBUM".format(sys.argv[0]))
+    artist, album = args
+
+    # Keyword arguments to the "search_*" functions limit keywords to
+    # specific fields. The "limit" keyword argument is special (like as
+    # "offset", not shown here) and specifies the number of results to
+    # return.
+    result = musicbrainzngs.search_releases(artist=artist, release=album,
+                                            limit=1)
+    # On success, result is a dictionary with a single key:
+    # "release-list", which is a list of dictionaries.
+    if not result['release-list']:
+        fail("no release found")
+    for (idx, release) in enumerate(result['release-list']):
+        # print("match #{}:".format(idx+1))
+        show_release_details(release)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/metric_fulfills_comparison.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+function out = metric_fulfills_comparison(dist, comparison, comparison_ids)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/metric_fulfills_ranking.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,90 @@
+function [out, equal, singles, valid] = metric_fulfills_ranking(met, Y, clips)
+%  out = sim_fulfills_ranking(met, Y, ids)
+%
+% outputs (0-1) percentage of ranking constraints 
+% completely fulfilled by the given distance measure
+
+% ---
+% for each valid query, check if the ranking is fulfilled
+% we also count eeventswhere the distance is equal
+% ---
+valid = ~(cellfun(@isempty, Y(:,1)) | cellfun(@isempty, Y(:,2)));
+
+equal = 0; 
+singles = false(size(Y,1),1);
+for i = 1:size(Y,1)
+    
+    if valid(i)
+        
+        if numel(Y{i,1}) == 1 && numel(Y{i,2}) == 1 
+        % ---
+        % Efficient singular ranking comparison
+        % using met.distance(clipa,clipb)
+        % ---
+        % NOTE: by using the < here, we loose half of the 
+        % examples which have been same distance and 
+        % randomly positioned in earlier runs :(
+        % ---
+            distgood = met.distance(clips(i), clips(Y{i,1}));
+            distbad = met.distance(clips(i), clips(Y{i,2}));
+            
+            singles(i) = distgood < distbad;
+            if distgood == distbad
+                equal = equal + 1;
+            end
+        else
+            % ---
+            % NOTE: Only reactivated for testing of 
+            % outdated similarity data
+            % ---
+            
+            warning 'code only for outdated similarity data\n';
+
+            % ---
+            % NOTE: this code is analogous to the above
+            % ---
+             singles(i) = 1;
+             for j=1:numel(Y{i,1})
+                 for k = 1:numel(Y{i,2})
+                     
+                    % ---
+                    % All the entries in Y(i,1) have to come before
+                    % the ones in Y(i,2)
+                    % ---
+                    distgood = met.distance(clips(i), clips(Y{i,1}(j)));
+                    distbad = met.distance(clips(i), clips(Y{i,2}(k)));
+                    singles(i) = singles(i) && (distgood < distbad);
+                    
+                    % count equalities
+                    if distgood == distbad
+                        equal = equal + 1;
+                    end
+                    if ~singles(i)
+                        break;
+                    end
+                 end
+             end
+             
+             
+        end
+    else
+    end
+end
+
+
+out(1) = mean(singles(valid));
+if size(Y,2) == 3
+    % ---
+    % weighted sum of singles: count satisfied votes
+    % ---
+    weights = cell2mat( Y( valid, 3));
+    out(2) = sum(weights(singles(valid))) / sum(weights);
+else
+    out(2) = -1;
+end
+out = out';
+
+% markup invalid rankings
+% singles(~valid) = -1;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/mlr_unittest.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function mlr_unittest(X, Yrel)
+
+% Loss values to test
+    LOSS    = {'AUC', 'Prec@k', 'MAP', 'MRR', 'NDCG'};
+
+
+    % Regularization values to test
+    REG = [0,1,2,3];
+
+    % Batch sizes to test
+    BATCH = [0 1 5];
+
+    % Diagonal settings
+    DIAG = [0 1];
+
+    figure(1);
+    for l = 1:length(LOSS)
+        display(['Testing ', LOSS{l}]);
+        for r = 1:length(REG)
+            display(sprintf('\tREG=%d', REG(r)));
+            for b = 1:length(BATCH)
+                display(sprintf('\tB=%d', BATCH(b)));
+                for d = 1:length(DIAG)
+                    display(sprintf('\tDiagonal=%d', DIAG(d)));
+                    [W, Xi, D] = mlr_train(X, Yrel, 10e5, LOSS{l}, REG(r), DIAG(d), BATCH(b));
+                    imagesc(W); drawnow;
+%                     [W, Xi, D] = mlr_train(X, Yclass, 10e5, LOSS{l}, REG(r), DIAG(d), BATCH(b));
+%                     imagesc(W); drawnow;
+                end
+            end
+        end
+    end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/play_comparison.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function out = generic_play_comparison(index, compari, compari_ids, cliptype);
+% out = play_comparison(index, comparison, comparison_ids, cliptype);
+
+if nargin < 2
+    global comparison;
+    compari = comparison;
+    
+    global comparison_ids;
+    compari_ids = comparison_ids;
+end
+
+if nargin < 4
+    cliptype = 'MTTClip';
+end
+
+for i = 1:length(index)
+    
+     fprintf('\n \n-- comparison nr.%d ---\n', index(i));
+     fprintf(' result: %d - %d - %d', compari(index(i),4:6));
+     
+     tmpclips = feval(cliptype,compari_ids(compari(index(i),1:3)));
+     tmpclips.skip();
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/ranking_from_comparison_ClipSimGraphMulti.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,98 @@
+function [r, valididx, clip_ids] = ranking_from_comparison_ClipSimGraphMulti(comparison, comparison_ids)
+% returns rankings for compared songs.
+% rankings are genrerated using a Multigraph analysis of the comparison
+% data 
+% 
+% r(idx,1) = clip being similar to clip idx
+% r(idx,2) = clip being less similar to clip idx
+% r(idx,3) = weight of this ranking
+%
+% the indices in clipids correspond to the indices in comparison_ids
+
+% create similarity graph
+% G = ClipSimGraphMulti(comparison, comparison_ids);
+% G.remove_cycles_length2;
+% save('comp_SimGraphMulti.mat', 'G');
+cprint(2, 'loading Multigraph for Similarity Constraints')
+load('comp_SimGraphMulti.mat', 'G');
+
+
+
+% inverse comparison index
+inv_comparison = sparse(comparison_ids,1, 1:numel(comparison_ids));
+
+% ---
+% derive similarity information: this
+% returns the weights of edges meaning sim(a,b) > sim(a,c)
+% ---   
+[weights, a, b, c] = G.similarities();
+% --- 
+% NOTE: it is yet unclear which index 
+% (the comparison or the mtt clip index) 
+% is best to use
+% 
+% The lines below transform the MTT ids from the graph into comparison ids
+% ---
+a = inv_comparison(a);
+b = inv_comparison(b);
+c = inv_comparison(c);
+
+% ---
+% reformat into ranking: the first 1019 clips are ordered
+% as in comparison_ids. then, clips mentioned more than once 
+% are attached. 
+% ---
+[a, idx] = sort(a);
+b = b(idx);
+c = c(idx);
+
+
+clip_ids = zeros(numel(a), 1);
+
+% ---
+% NOTE: r may grow over its allocated size
+% ---
+r = cell(numel(a),1 );
+
+% keep track of constraints which have been attached
+visited = zeros(1, numel(a));
+for i = 1:numel(comparison_ids)
+    
+    % ---
+    % get first occurence of this index,
+    % and save the data into ranking
+    % ---
+    tmp_idx = find(a == i, 1, 'first');
+    
+    clip_ids(i) = i; % == a(tmp_idx)
+        
+    if ~isempty(tmp_idx)
+        visited(tmp_idx) = true;
+        
+        r{i,1} = b(tmp_idx);
+        r{i,2} = c(tmp_idx);
+        r{i,3} = weights(tmp_idx);
+        
+        valididx(i) = true;
+    else
+        % invalid ranking
+        valididx(i) = false;
+        r{i,3} = 0;
+    end
+end
+
+% ---
+% Now we attach the remaining constraints
+% ---
+remaining = find(~visited);
+clip_ids( numel(comparison_ids)+1 : numel(comparison_ids)+numel(remaining)) = a(remaining);
+
+for i = 1:numel(remaining)
+    r{ numel(comparison_ids)+i, 1} = b(remaining(i));
+    r{ numel(comparison_ids)+i , 2} = c(remaining(i));
+    r{ numel(comparison_ids)+i , 3} = weights(remaining(i));
+end
+
+valididx(numel(comparison_ids)+1 : ...
+    numel(comparison_ids)+numel(remaining)) = true;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/ranking_from_comparison_Stober_all_constraints.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,98 @@
+function [r, valididx, clip_ids] = ranking_from_comparison_Stober_all_constraints(comparison, comparison_ids)
+% returns rankings for compared songs.
+% rankings are genrerated using a Multigraph analysis of the comparison
+% data 
+% 
+% r(idx,1) = clip being similar to clip idx
+% r(idx,2) = clip being less similar to clip idx
+% r(idx,3) = weight of this ranking
+%
+% the indices in clipids correspond to the indices in comparison_ids
+
+% create similarity graph
+
+cprint(2, 'Generating Stober Multigraph for Similarity Constraints')
+% Gstob = ClipSimGraphStober();
+% Gstob.random_all_constraints_graph;
+% G = ClipSimGraphMulti(Gstob.to_DiGraph());
+load('comp_SimGraphStob_ac1.mat', 'G');
+
+
+% inverse comparison index
+inv_comparison = sparse(comparison_ids,1, 1:numel(comparison_ids));
+
+% ---
+% derive similarity information: this
+% returns the weights of edges meaning sim(a,b) > sim(a,c)
+% ---   
+[weights, a, b, c] = G.similarities();
+% --- 
+% NOTE: it is yet unclear which index 
+% (the comparison or the mtt clip index) 
+% is best to use
+% 
+% The lines below transform the MTT ids from the graph into comparison ids
+% ---
+a = inv_comparison(a);
+b = inv_comparison(b);
+c = inv_comparison(c);
+
+% ---
+% reformat into ranking: the first 1019 clips are ordered
+% as in comparison_ids. then, clips mentioned more than once 
+% are attached. 
+% ---
+[a, idx] = sort(a);
+b = b(idx);
+c = c(idx);
+
+
+clip_ids = zeros(numel(a), 1);
+
+% ---
+% NOTE: r may grow over its allocated size
+% ---
+r = cell(numel(a),1 );
+
+% keep track of constraints which have been attached
+visited = zeros(1, numel(a));
+for i = 1:numel(comparison_ids)
+    
+    % ---
+    % get first occurence of this index,
+    % and save the data into ranking
+    % ---
+    tmp_idx = find(a == i, 1, 'first');
+    
+    clip_ids(i) = i; % == a(tmp_idx)
+        
+    if ~isempty(tmp_idx)
+        visited(tmp_idx) = true;
+        
+        r{i,1} = b(tmp_idx);
+        r{i,2} = c(tmp_idx);
+        r{i,3} = weights(tmp_idx);
+        
+        valididx(i) = true;
+    else
+        % invalid ranking
+        valididx(i) = false;
+        r{i,3} = 0;
+    end
+end
+
+% ---
+% Now we attach the remaining constraints
+% ---
+remaining = find(~visited);
+clip_ids( numel(comparison_ids)+1 : numel(comparison_ids)+numel(remaining)) = a(remaining);
+
+for i = 1:numel(remaining)
+    r{ numel(comparison_ids)+i, 1} = b(remaining(i));
+    r{ numel(comparison_ids)+i , 2} = c(remaining(i));
+    r{ numel(comparison_ids)+i , 3} = weights(remaining(i));
+end
+
+valididx(numel(comparison_ids)+1 : ...
+    numel(comparison_ids)+numel(remaining)) = true;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/ranking_from_comparison_Stober_diffs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,69 @@
+function [r, valididx, clip_ids, P] = ranking_from_comparison_Stober_diffs(nDatasets, nRuns)
+
+global globalvars;
+global comparison;
+global comparison_ids;
+
+% ---
+% get the standard test set
+% NOTE: we will keep the r and valididx, and just use
+% the rest of the data for determining the issing edges etc
+% ---
+load('comp_SimGraphMulti_SimDataDump', 'G', 'r', 'valididx', 'clip_ids');
+nData = sum(valididx > 0);
+
+% ---
+% initialise the new partition
+% ---
+P = cvpartition_alltrain(nData, nDatasets * nRuns);
+
+
+for i = 1:nDatasets
+    
+    % ---
+    % create new Stober graph
+    % ---
+    Gstob = ClipSimGraphStober();
+    Gstob.random_all_constraints_graph;
+    Gdiff = G - ClipSimGraphMulti(Gstob.to_DiGraph());
+    
+    % ---
+    % get missing entries in stober similarity
+    % ---
+    idx = find_graph_in_valid(r, comparison_ids(clip_ids),valididx, Gdiff);
+    lostData = sum(idx);
+    if lostData ~= Gdiff.num_edges
+        error ('Inconsistent Data: edges in gdiff could not be found');
+    end
+
+    % ---
+    % save entries in DataPartition (remove from valid sets)
+    % NOTE: this is manhual intervention into Class territory :(
+    % ---
+    for j = 1:nRuns
+        jd = j + (i-1) * nRuns;
+        P.mtraining{jd} = ones(P.N, 1) - idx(valididx)';
+        P.mtest{jd} = ones(P.N, 1) - idx(valididx)';
+        P.TrainSize(jd) = P.N - lostData;
+        P.TestSize(jd) = P.N - lostData;
+    end
+end
+end
+
+% ---
+%  This finds all graphs edges in the ranking
+% ---
+function idx = find_graph_in_valid(r, clip_ids, valididx, G)
+
+    idx = zeros(1,size(r,1));
+    for i = find(valididx)
+        
+        a = clip_ids(i);
+        b = clip_ids(r{i,1});
+        c = clip_ids(r{i,2});
+        if G.edge(a,b,c) > 0
+            idx(i) = 1;
+        end
+    end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/ranking_from_comparison_trivial.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,90 @@
+function [r, valididx, clip_ids] = ranking_from_comparison_trivial(comparison, comparison_ids)
+% returns a ranking for each of the compared songs 
+%
+% r(idx,1) =  all indexes which are similar to clip idx
+% r(idx,2) = all indexes which are dissimilar to clip idx
+%
+% if onlyvalid is set to true, only the transitive hull of 
+% clips having sim and dissim values will be output
+
+% ---
+% in comparison, the outlying piece is highlighted. 
+% thus, we naively consider that
+% a. both of the remaining pieces are more similar to each other.
+% b. the outlier is dissimilar to both of the other pieces
+% ---
+
+[outsort, outidx] = sort(comparison(:,4:6),2,'ascend');
+
+r = cell(numel(comparison_ids), 2);
+s = zeros(numel(comparison_ids), 2); % score for rankings
+for i = 1:size(comparison, 1)
+
+    % get the three relevant comparison ids
+
+    pos = comparison(i, outidx(i,1:3));
+    vals = outsort(i,:);
+    
+    % ---
+    % each of the three clips will be evaluated based on its position
+    % the last clip is the potential outlyier
+    % ---
+    
+    % ---
+    % usual case: two small values and a last outlie
+    % ---
+    if vals(2) ~= vals(3)
+        
+        
+        % ---
+        % first (most common) clip:
+        % the second clip is more similar than the third one
+        % ---
+        r{pos(1),1} = cat(1, r{pos(1),1}, pos(2));  % similar
+        r{pos(1),2} = cat(1, r{pos(1),2}, pos(3));  % dissimilar
+%     else
+%         
+%         % ok, both seem more dissimilar to clip 1
+%         r{pos(1),2} = cat(1, r{pos(1),1}, pos(2));  % both dissimilar
+%         r{pos(1),2} = cat (1, r{pos(1),2}, pos(3));  % dissimilar
+    end
+    
+    if vals(3) ~= vals(1)
+        % ---
+        % the second clip is more similar to the first than 
+        % the third
+        % ---
+        r{pos(2),1} = cat(1, r{pos(2),1}, pos(1));
+        r{pos(2),2} = cat(1, r{pos(2),2}, pos(3));
+    
+        % ---
+        % the third clip is not similar to any of the former 
+        % NOTE: we avoid this information as it possibly leads 
+        % to some contradictionary statements
+        % ---
+            r{pos(3),2} = cat(1, r{pos(3),2}, pos(1));
+            r{pos(3),2} = cat(1, r{pos(3),2}, pos(2));
+    end
+    
+
+end
+
+% ---
+% we cleanup r and 
+% run basic checks on emptiness and paradox assumptions
+% ---
+valididx = zeros(size(r,1), 1);
+for i = 1:size(r, 1)
+    
+    % make unique
+    r{i,1} = unique(r{i,1});
+    r{i,2} = unique(r{i,2});
+    
+    % check
+    valididx(i) = ~isempty(r{i,1}) && ~isempty(r{i,2}) && ...
+        isempty(intersect(r{i,1}, r{i,2}));
+end
+
+valididx = logical(valididx);
+clip_ids = 1:numel(comparison_ids);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/sim_from_comparison_UNfair_components.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,91 @@
+function [partBinTrn, partBinTst, partBinNoTrn] = sim_from_comparison_UNfair_components(comparison, comparison_ids, k, trainpart, filename)
+%
+% FOR ISMIR 2012 
+%
+% creates a cross-validation partitioning of the 
+% similarity data in "multiG", NOT PRESERVING the 
+% connected components in it during partitioning
+
+% ---
+% get the similarity multigraph and remove cycles
+% ---
+cprint(2, 'creating graph')
+% Gm = ClipSimGraphMulti(comparison, comparison_ids);
+% Gm.remove_cycles_length2; 
+cprint(2, 'loading Multigraph for Similarity Constraints')
+load('comp_SimGraphMulti.mat', 'G');
+
+
+% get similarity data
+[weights, a, b, c] = G.similarities();
+
+% ---
+% We randomise the constraint succession 
+% ---
+datPermu = randperm(numel(a));
+a = a(datPermu);
+b = b(datPermu);
+c = c(datPermu);
+weights = weights(datPermu);
+
+% ---
+% NOTE: we try the easy route: partition the graphs
+% and look at which constraints  balance we end up with
+% ---
+P = cvpartition(numel(a), 'k', k);
+
+% ---
+% here we export  similarity test sets
+% ---
+cprint(2, 'export test similarity')
+partBinTst = {};
+for i = 1:P.NumTestSets  % test runs
+
+    partBinTst{i} = [a(P.test(i))' b(P.test(i))' c(P.test(i))' weights(P.test(i))];
+end
+
+
+% ---
+% Note: This uses a "truly" increasing training set
+% to do the partial training partition
+% ---
+cprint(2, 'export train similarity')
+for m = 1:numel(trainpart)
+
+    % save test indices
+    Ptrain(m) = cvpartition_trunctrain_incsubsets(P, trainpart(m));
+end
+
+% ---
+% here we export similarity training sets
+% ---
+partBinTrn = {};
+for i = 1:P.NumTestSets % train runs
+
+    for m = 1:numel(trainpart) % increasing training sets
+
+        % get training indices
+        idxB = Ptrain(m).training(i);
+        
+        % save into cell
+        partBinTrn{i,m} = [a(idxB)' b(idxB)' c(idxB)' weights(idxB)];
+    end   
+end
+
+partBinNoTrn = {};
+for i = 1:P.NumTestSets % train runs
+
+    for m = 1:numel(trainpart) % increasing training sets
+
+        % get training indices
+        idxB = ~Ptrain(m).training(i) & ~Ptrain(m).test(i);
+        
+        % save into cell
+        partBinNoTrn{i,m} = [a(idxB)' b(idxB)' c(idxB)' weights(idxB)];
+    end   
+end
+
+if nargin == 5
+    save(filename, 'partBinTrn', 'partBinTst', 'partBinNoTrn')
+end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/sim_from_comparison_attach_weights.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+function  sim_from_comparison_attach_weights(filen)
+
+global comparison;
+global comparison_ids;
+% load data from mat file
+load(filen);
+
+% ---
+% get the similarity multigraph and remove cycles
+% ---
+cprint(2, 'creating graph')
+Gm = ClipSimGraphMulti(comparison, comparison_ids);
+Gm.remove_cycles_length2; 
+
+nTestSets = size(partBinTst, 2); % num cv bins
+ntrainsizes = size(partBinTrn, 2); % num increases of training
+
+% ---
+% test sets
+% ---
+cprint(2, 'doing test sets')
+
+% for all validations 
+for k = 1:size(partBinTst, 2);
+    
+    % for each constraint tiplet
+    for i = 1:size(partBinTst{k},1)
+        
+        % get weight for this edge from graph
+        [weight, ~, ~] = Gm.edge(partBinTst{k}(i,1), partBinTst{k}(i,2),...
+            partBinTst{k}(i,3));
+            
+            if isempty(weight) || weight == 0
+                error 'inconsistent similarity data';
+            end
+        
+        % save into same data structure
+        partBinTst{k}(i,4) = weight;
+    end
+end
+
+% ---
+% train sets
+% ---
+
+cprint(2, 'doing train sets')
+% for all validations 
+for k = 1:size(partBinTrn, 1);
+    
+    % for all training sizes
+    for m = 1:size(partBinTrn, 2);
+        
+        % for each constraint tiplet
+        for i = 1:size(partBinTrn{k,m},1)
+
+            % get weight for this edge from graph
+            [weight, ~, ~] = Gm.edge(partBinTrn{k,m}(i,1), partBinTrn{k,m}(i,2),...
+                partBinTrn{k,m}(i,3));
+            
+            if isempty(weight) || weight == 0
+                error 'inconsistent similarity data';
+            end
+            
+            % save into same data structure
+            partBinTrn{k,m}(i,4) = weight;
+        end
+    end
+end
+
+% ---
+% Notrain sets
+% ---
+cprint(2, 'doing Notrain sets')
+% for all validations 
+for k = 1:size(partBinNoTrn, 1);
+    
+    % for all training sizes
+    for m = 1:size(partBinNoTrn, 2);
+        
+        % for each constraint tiplet
+        for i = 1:size(partBinNoTrn{k,m},1)
+
+            % get weight for this edge from graph
+            [weight, ~, ~] = Gm.edge(partBinNoTrn{k,m}(i,1), partBinNoTrn{k,m}(i,2),...
+                partBinNoTrn{k,m}(i,3));
+            
+            if isempty(weight) || weight == 0
+                error 'inconsistent similarity data';
+            end
+            % save into same data structure
+            partBinNoTrn{k,m}(i,4) = weight;
+        end
+    end
+end
+
+% save results to mat file
+save(sprintf('%s_weighted.mat',filen), 'partBinTst', 'partBinTrn', 'partBinNoTrn');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/sim_from_comparison_fair_components.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,156 @@
+function [partBinTrn, partBinTst, partBinNoTrn] = sim_from_comparison_fair_components(comparison, comparison_ids, k, trainpart, filename)
+%
+% [partBinTrn, partBinTst, partBinNoTrn] =
+% sim_from_comparison_fair_components(comparison, comparison_ids, k, trainpart, [filename])
+
+% creates a cross-validation partitioning of the 
+% similarity data in "multiG", PRESERVING the 
+% connected components in it during partitioning
+
+% ---
+% get the similarity multigraph and remove cycles
+% ---
+cprint(2, 'creating graph')
+% Gm = ClipSimGraphMulti(comparison, comparison_ids);
+% Gm.remove_cycles_length2; 
+cprint(2, 'loading Multigraph for Similarity Constraints')
+load('comp_SimGraphMulti.mat', 'G');
+
+% ---
+% Note: we get the connected components in the graph
+% and filter out those who have only one node
+% ---
+cprint(2, 'extracting connected components')
+[Gs, s, id] = connected_components(G);
+
+valid = find(s > 1);
+Gsv = Gs(valid);
+
+% ---
+% We randomise the graph triplet order,
+% as well as the in-component
+% constraint succession be randomised here.
+% ---
+datPermu = randperm(numel(Gsv));
+Gsv = Gsv(datPermu);
+
+conPermu = zeros(numel(Gsv),3);
+for i = 1:numel(Gsv)
+    conPermu(i,:) = randperm(3);
+end
+
+% ---
+% NOTE: we try the easy route: partition the graphs
+% and look at which constraints  balance we end up with
+% ---
+P = cvpartition(numel(Gsv), 'k', k);
+
+% ---
+% here we export the graphs similarity test sets
+% ---
+cprint(2, 'export test similarity')
+partBinTst = {};
+for i = 1:P.NumTestSets  % test runs
+    partBinTst{i} = zeros(0, 3);
+    
+    tmp_idx = find(P.test(i));
+    for j = 1:numel(tmp_idx); % componens
+        
+        % ---
+        % get the graphs which are associated 
+        % to this set and save them into a new bin.
+        % ---
+         [weights, a, b, c] = Gsv(tmp_idx(j)).similarities();
+         partBinTst{i} = [partBinTst{i}; [a' b' c' weights]];
+    end
+end
+
+
+% ---
+% Note: This uses a "truly" increasing training set
+% to do the partial training partition
+% ---
+cprint(2, 'export train similarity')
+for m = 1:numel(trainpart)
+
+    Ptrain(m) = cvpartition_trunctrain_incsubsets(P, trainpart(m));
+end
+
+% ---
+% here we export the graph's similarity training sets
+% ---
+partBinTrn = {};
+for i = 1:P.NumTestSets % train runs
+
+    for m = 1:numel(trainpart) % increasing training sets
+        partBinTrn{i,m} = zeros(0, 3);
+    
+        tmp_idx = find(Ptrain(m).training(i));
+        for j = 1:numel(tmp_idx); % components 
+       
+            % ---
+            % get the graphs which are associated 
+            % to this set and save them into a new bin.
+            % ---
+             [weights, a, b, c] = Gsv(tmp_idx(j)).similarities();
+             
+             % ---
+             % NOTE: WE apply the inner-triplet permutation,
+             % and truncate it where necessary
+             % ---
+             tmp_permu = conPermu(tmp_idx(j),:);
+             if numel(a) < 3
+                 tmp_permu = tmp_permu(tmp_permu <= numel(a));
+             end
+             
+             a = a(tmp_permu);
+             b = b(tmp_permu);
+             c = c(tmp_permu);
+             weights = weights(tmp_permu);
+             
+             % save the clips
+             partBinTrn{i,m} = [partBinTrn{i,m}; [a' b' c' weights]];
+        end
+    end
+end
+
+partBinNoTrn = {};
+for i = 1:P.NumTestSets % train runs
+
+    for m = 1:numel(trainpart) % increasing training sets
+        partBinNoTrn{i,m} = zeros(0, 3);
+    
+        tmp_idx = find(~Ptrain(m).training(i) & ~Ptrain(m).test(i));
+        for j = 1:numel(tmp_idx); % components 
+       
+            % ---
+            % get the graphs which are associated 
+            % to this set and save them into a new bin.
+            % ---
+             [weights, a, b, c] = Gsv(tmp_idx(j)).similarities();
+             
+             % ---
+             % NOTE: WE apply the inner-triplet permutation,
+             % and truncate it where necessary
+             % ---
+             tmp_permu = conPermu(tmp_idx(j),:);
+             if numel(a) < 3
+                 tmp_permu = tmp_permu(tmp_permu <= numel(a));
+             end
+             
+             a = a(tmp_permu);
+             b = b(tmp_permu);
+             c = c(tmp_permu);
+             weights = weights(tmp_permu);
+
+             % save the clips
+             partBinNoTrn{i,m} = [partBinNoTrn{i,m}; [a' b' c' weights]];
+        end
+    end
+end
+
+if nargin == 5
+    save(filename, 'partBinTrn', 'partBinTst', 'partBinNoTrn')
+end
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/sim_from_comparison_naive.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+function [sim, dissim, confidence] = sim_from_comparison_naive(comparison, comparison_ids, symmetrical)
+%
+%  [sim, dissim, confidence] = sim_from_comparison_naive(comparison)
+%
+% derives symmetric, absolute similarity measurements
+% from relative magnatagatune comparisons
+% naive implementation for first tests of the ITML algorithm
+%
+
+% reindex comparison for more simple evaluation
+% makro_prepare_comparison
+
+% ---
+% analyse the number of comparisons for each pair of songs
+% ---
+[num_compares] = get_comparison_stats(comparison, comparison_ids);
+
+% ---
+% in comparison, the outlying piece is highlighted. 
+% thus, we naively consider that
+% a. both of the remaining pieces are more similar to each other.
+% b. the outlier is dissimilar to both of the other pieces
+% ---
+[outsort, outidx] = sort(comparison(:,4:6),2,'ascend');
+
+% ---
+% similarity of the two non-outliers a, b 
+% they are similar if both of them have scores way smaller 
+% than the outlier c:
+% score (a,b) = 1 - (max(a,b)/c)
+%
+% dissimilarity: clip b is considered more different to clip c than
+% a, as clip a seems to share some properties with both songs
+% dissim(b,c) = 0.5 + b/(2c)
+% ---
+
+sim = sparse(numel(comparison_ids),numel(comparison_ids));
+dissim = sparse(numel(comparison_ids),numel(comparison_ids));
+for i = 1:size(comparison,1)
+    
+    % get the outlier votes
+    simpair = comparison(i,outidx(i,1:2));
+    c = comparison(i,outidx(i,3));
+    
+    % we want a triangular similarity matrix
+    [simpair, simidx] = sort(simpair);
+    outsort(i,1:2) = outsort(i,simidx);
+    
+    % ---
+    % save the distance between the second biggest vote and the max vote.
+    % NOTE: we bias the vote by dividing through the number of total
+    % comparisons for the particular pair of clips
+    % ---
+    sim(simpair(1), simpair(2)) = sim(simpair(1), simpair(2)) +  ...
+        (1 - outsort(i,2) / outsort(i,3)) * (1 / num_compares(simpair(1),simpair(2)));
+    
+    dissim(simpair(1:2), c) = 0.5 + (outsort(i,1:2) ./ (2 * outsort(i,3)));
+end
+
+% ---
+% mirror to make matrix symmetrical 
+% ---
+if nargin == 3 && symmetrical
+    sim = sim + sim';
+    dissim = dissim + dissim';
+end
+
+% ---
+% TODO: use number of votes and std or similar to 
+% rate the confidence for each similarity mesurement
+% ---
+confidence = [];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tag_stats.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function out = tag_stats(annots, names, max_plot)
+% out = tag_stats(annots, names, max_plot)
+% 
+% calculates statistics for tag distributions
+% and plots them
+
+if nargin < 3
+  max_plot = 25;  
+end
+
+% get overall frequency and sort accordingly
+allapp = sum(annots > 0, 1);
+% allapp = allapp/max(allapp);
+
+[null, idx] = sort(allapp,'descend');
+
+% ---
+% visualize only the fist top 200
+% ---
+max_plot = min(numel(names), max_plot);
+
+figure;
+bar(1:max_plot,allapp(idx(1:max_plot)))
+set(gca,'XTick',1:max_plot);
+set(gca,'XTickLabel',names(idx(1:max_plot)));
+axis([1 max_plot 0 max(allapp)])
+
+legend('#appearances');
+title 'tag statistics sorted by frequency of appearances'
+
+out = [];
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/do_test_rounds.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,255 @@
+function [out]= do_test_rounds(trainfun, X, simdata, trainparams, fparams,...
+            paramhash, paramhash_train, clips)
+
+% ---
+% DEBUG: we mix up the training set
+% ---
+% simdata = mixup(simdata);
+
+if isfield(simdata, 'clip_type');
+    clip_type = simdata.clip_type;
+else
+    clip_type = 'MTTClip';
+end
+
+nTestSets = size(simdata.partBinTst, 2); % num cv bins
+ntrainsizes = size(simdata.partBinTrn, 2); % num increases of training
+
+for m = 1:ntrainsizes
+
+    ok_train = zeros(2, nTestSets);
+    ok_test = zeros(2, nTestSets);
+    equal_test = zeros(1, nTestSets);
+    ok_notin_train = zeros(2, nTestSets);
+    
+%     A = cell(nTestSets,1);
+%     dout = cell(nTestSets,1);
+%     clips_train = cell(nTestSets,1);
+%     clips_test = cell(nTestSets,1);
+%     clips_notin_train = cell(nTestSets,1);
+%     Y_notin_train = cell(nTestSets,1);
+%     Ytrain = cell(nTestSets,1);
+%     Ytest = cell(nTestSets,1);
+    % parfor
+    for k = 1:nTestSets
+
+
+        % runlog mlr
+        try
+            
+            % ---
+            % Get the training constraints and features for this round
+            % ---
+            % DEBUG: the similarity data in Ytrain and Ytest seems correct.
+            [clips_train{k}, Xtrain, Ytrain{k}] ...
+                = get_data_compact(clips, X, simdata.partBinTrn{k,m});
+            Ytest{k}={};
+            
+            % training step
+            [A{k}, dout{k}] = feval(trainfun, Xtrain, Ytrain{k}, trainparams);
+
+            % ---
+            % test step
+            % TODO: the distmeasure object could be created by the wrapper! 
+            % ---
+            if isfield(dout{k},'interpreter');
+                interpreter = str2func(dout{k}.interpreter);
+            else
+                % only for backward compability
+                % warning ('legacy implementation of dist measure');
+                 if isnumeric(A{k}) 
+                    % mahalanobis case
+
+                    % special delta mahalanobis
+                    interpreter = str2func('DistMeasureMahal');
+                else 
+                    % neural network case: A{k} is a neural net object
+                    interpreter = str2func('DistMeasureGeneric');
+                end
+            end
+            
+            if isfield(trainparams,'deltafun')
+                % special delta 
+                diss = feval(interpreter,clips, A{k}, X, str2func(trainparams.deltafun), trainparams.deltafun_params);
+            else
+                % standard 
+                % ---
+                % TODO: the default delta is different between 
+                % similarity measures. except for the mahalmeasure
+                % this should be specified
+                % ---
+                diss = feval(interpreter, clips, A{k}, X);
+            end
+            
+            % test training data 
+             [ok_train(:,k)] = metric_fulfills_ranking...
+                (diss, Ytrain{k}, feval(clip_type,clips_train{k}));
+            
+            % get test data  
+            [clips_test{k}, Xtest, Ytest{k}] ...
+                = get_data_compact(clips, X, simdata.partBinTst{k});
+            
+           % diss = DistMeasureMahal(feval(clip_type,clips_test{k}), A{k}, Xtest);
+            % test test data
+            [ok_test(:,k), equal_test(k)] = metric_fulfills_ranking...
+                (diss, Ytest{k}, feval(clip_type,clips_test{k}));
+            cprint(3,'%2.2f %2.2f fold performance', ok_test(:,k));
+            
+            % ---
+            % extra diag for MLR
+            % TODO: make this wrappeable
+            % ---
+            if isequal(trainfun, @mlr_wrapper)
+                dout{k}.mprperf =  mlr_test(A{k}, 0, Xtrain, Ytrain{k}(:,1:2), Xtest, Ytest{k}(:,1:2)) ;
+            end
+            
+            % --- 
+            % this gives data for the unused training set remainders
+            % ---
+            if isfield(simdata,'partBinNoTrn') 
+                if ~isempty(simdata.partBinNoTrn{k,m})
+                [clips_notin_train{k}, X_notin_train, Y_notin_train{k}] ...
+                    = get_data_compact(clips, X, simdata.partBinNoTrn{k,m});
+           
+                % test unused training data
+                [ok_notin_train(:,k), equal_test(k)] = metric_fulfills_ranking...
+                    (diss, Y_notin_train{k}, feval(clip_type,clips_notin_train{k}));
+                
+                % what to do if there is no data ? 
+                else
+                    ok_notin_train(:,k) = -1;
+                end
+            else
+                ok_notin_train(:,k) = -1;
+            end
+
+        catch err
+            
+            % ---
+            % in case training or test fails
+            % ---
+            print_error(err);
+            
+            A{k} = [];
+            dout{k} = -1;
+
+            ok_test(:,k) = -1;
+            ok_train(:,k) = -1;
+            ok_notin_train(:,k) = -1;
+            equal_test(k) = -1;
+            
+            % ---
+            % save feature, system and data configuration
+            % and indicate failure
+            % ---
+            xml_save(sprintf('runlog_%s.%s_trainparam.xml',...
+                paramhash, paramhash_train), trainparams);
+            xml_save(sprintf('runlog_%s.%s_err.xml',...
+                paramhash, paramhash_train), print_error(err));
+        end
+    end
+
+    if ~(ntrainsizes == 1)
+        
+        % save elaborate testing data
+        size_sum = 0;
+        for i = 1:nTestSets
+            size_sum = size_sum + size(simdata.partBinTrn{i,m}) / size(simdata.partBinTrn{i,end});
+        end
+        size_sum = size_sum / nTestSets;
+        
+        out.inctrain.trainfrac(:, m) = size_sum;
+        out.inctrain.dataPartition(:, m) = 0;
+
+        % ---
+        % NOTE: the max value is important for debugging,
+        % especially when the maximal training success is reached
+        % in the middle of the data set
+        % ---
+%         out.inctrain.max_ok_test(:, m) = max(ok_test, 2);
+        out.inctrain.mean_ok_test(:, m) = mean(ok_test(:, ok_test(1,:) >=0), 2);
+        out.inctrain.var_ok_test(:, m) = var(ok_test(:, ok_test(1,:) >=0), 0, 2);
+        out.inctrain.equal_test(m) = median(equal_test);
+        
+        out.inctrain.mean_ok_train(:, m) = mean(ok_train(:, ok_train(1,:) >=0), 2);
+        out.inctrain.var_ok_train(:, m) = var(ok_train(:, ok_train(1,:) >=0), 0, 2);
+        
+        % ---
+        % TODO: DEBUG: this does not work correctly
+        % maybe thats also true for the above?
+        % ---
+        out.inctrain.mean_ok_notin_train(:, m) = mean(ok_notin_train(:, ok_notin_train(1,:) >=0), 2);
+        out.inctrain.var_ok_notin_train(:, m) = var(ok_notin_train(:, ok_notin_train(1,:) >=0), 0, 2);
+
+        diag.inctrain(m).ok_train = ok_train;
+        diag.inctrain(m).ok_test = ok_test;
+        diag.inctrain(m).ok_notin_train = ok_notin_train;
+        diag.inctrain(m).equal_test = equal_test;
+    end
+    
+    % ---
+    % save traditional information for full training set
+    % ---
+    if size(simdata.partBinTrn{1,m}) == size(simdata.partBinTrn{1,end});
+
+%         out.max_ok_test = max(ok_test, 2);
+        out.mean_ok_test = mean(ok_test(:, ok_test(1,:) >=0), 2);
+        out.var_ok_test = var(ok_test(:, ok_test(1,:) >=0), 0, 2);
+        out.equal_test = median(equal_test);
+                
+        out.mean_ok_train = mean(ok_train(:, ok_train(1,:) >=0), 2);
+        out.var_ok_train = var(ok_train(:, ok_train(1,:) >=0), 0, 2);
+        
+        % ---
+        % TODO: DEBUG: this does not work correctly
+        % ---
+        out.mean_ok_notin_train = mean(ok_notin_train(:, ok_notin_train(1,:) >=0), 2);
+        out.var_ok_notin_train = var(ok_notin_train(:, ok_notin_train(1,:) >=0), 0, 2);
+        
+        % ---
+        % get winning measure
+        % we use the weighted winning measure if possible
+        % ---
+        if max(ok_test(2,:)) > 0
+            [~, best] = max(ok_test(2,:));
+        else
+            [~, best] = max(ok_test(1,:));
+        end
+
+        diag.A = A;
+        diag.diag = dout;
+
+        diag.ok_test = ok_test;
+        diag.equal_test = equal_test;
+        diag.ok_train = ok_train;
+        diag.ok_notin_train = ok_notin_train;
+
+        % save some metric matrices
+        out.best_A = A{best};
+        out.best_diag = dout{best};
+        out.best_idx = best;   
+        
+    end
+end
+
+% save parameters
+out.camirrev = camirversion();
+out.fparams = fparams;
+out.trainfun = trainfun;
+out.trainparams = trainparams;
+out.clip_ids = clips.id();
+out.dataPartition = [];
+out.Y = size(simdata);
+% ---
+% NOTE: this takes A LOT OF DISC SPACE
+% ---
+% out.Ytrain = Ytrain{end};
+% out.Ytest = Ytest{end};
+
+% ---
+% save the diagostics data to disk
+% ---
+save(sprintf('runlog_%s.%s_results.mat',...
+        paramhash, paramhash_train),...
+        'out', 'diag');
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/euclidean_wrapper.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function [A, diag] = euclidean_wrapper(X, Y, trainparams)
+% dummy wrapper to plug the euclidean distance measure into the 
+% testing set
+
+% ---
+% call main training function
+% ---
+A = eye(size(X,1));
+
+diag.trainfun = 'euclidean';
+diag.interpreter = 'DistMeasureMahal';
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/get_data_compact.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,96 @@
+function  [clip_dict, X, Y, valididx] = get_data_compact(clips, featureVec, simdata)
+    % ---
+    % instead of creating a new three feature vectors 
+    % for each constraint, this function links back to the 
+    % FIRST occurrence of a distinct clip and its features
+    % 
+    % TODO: try to always link ALL occurences of a feature
+    % / clip in the rankings
+    % ---
+
+    global comparison_ids;
+    global comparison_invids;
+    
+    % ---
+    % build the clip dictionary 
+    % ---
+    uniclip = unique(reshape( simdata, 1, []));
+    last_clip_pos = zeros(1, numel(uniclip));
+    
+    clip_dict = [];
+    Y = {};
+    idx_newclip = 1;
+    valididx = logical([]);
+
+    % cycle all constraints of one cv bin
+    for j = 1:size(simdata,1)
+
+        
+        % save the first clip
+        constraint = simdata(j,:);
+        
+        % ---
+        % check where the clip is and if there
+        % is space to write cosntraint data
+        % 
+        % If not, a position is created
+        a = find_clip(constraint(1), 1);
+        b = find_clip(constraint(2), 0);
+        c = find_clip(constraint(3), 0);
+
+        % [a,b,c] -> clip a more similar to clip b than to clip c 
+        
+        % adress weightings
+        if numel(constraint) == 4
+            Y(a,:) = {b, c, (constraint(4))};
+        else
+            Y(a,:) = {b, c};
+        end
+    end
+    
+    % ---
+    % get feature data
+    % NOTE: this uses an index of the comparison clips
+    % ---
+    X = featureVec(:,(comparison_invids(clip_dict)));
+    
+    for i = find(~valididx)
+        if size(Y,2) == 3
+           Y(i,:) = {[], [], 0};
+        else
+           Y(i,:) = {[], []}; 
+        end
+    end
+    
+    function clip_idx = find_clip(clip, write)
+        uc_idx = find(uniclip == clip);
+        
+        % ---
+        % do we have a place of this clip? 
+        % 
+        % NOTE: last_clip_pos has to be reset after every write
+        % ---
+        if (last_clip_pos(uc_idx) == 0) || ...
+                write && (numel(valididx) >= last_clip_pos(uc_idx)) &&...
+                (valididx(last_clip_pos(uc_idx)) == 1)
+            
+            % if not, create one
+            clip_idx = idx_newclip;
+            clip_dict(clip_idx) = clip;
+            valididx(clip_idx) = false;
+            
+            % and save into last pos
+            last_clip_pos(uc_idx) = clip_idx;
+
+            idx_newclip = idx_newclip + 1;
+        else
+            clip_idx = last_clip_pos(uc_idx);
+        end
+        
+        if write
+            valididx(clip_idx) = true;
+        end
+        
+    end
+    
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/mahalmat_wrapper.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function [A, diag] = mahalmat_wrapper(X, Y, trainparams)
+% dummy wrapper to plug any fixed mahalanobis matrix into the 
+% testing set
+
+% use deltafun to check for correct similarity
+if isfield(trainparams,'deltafun')
+    X = feval(trainparams.deltafun, X(:,1), X(:,2), trainparams.deltafun_params{:});
+    diag.deltafun = trainparams.deltafun;
+end
+
+A = trainparams.mahalA;
+if size(A,1) ~= size(X,1)
+    error('wrong mahal matrix size');
+end
+
+diag.trainfun = 'mahalmat';
+% ---
+% intorducing model tyopology:
+% mahal, nnet, gbrtree
+% ---
+diag.interpreter = 'DistMeasureMahal';
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/random_diag_wrapper.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function [A, dout] = random_diag_wrapper(X, Y, trainparams)
+% dummy wrapper to plug a random distance measure into the 
+% testing process
+
+% ---
+% call main training function
+% ---
+A =  diag(trainparams.std *(rand(1, size(X,1))-0.5) + trainparams.mean);
+
+dout.trainfun = 'random_diag';
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/Exp_SVMLight.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,131 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Experiment code templat                                                 %
+% Project: sub-euclidean distance for music similarity                    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Load features
+feature_file = 'rel_music_raw_features.mat';
+vars = whos('-file', feature_file);
+A = load(feature_file,vars(1).name,vars(2).name,vars(3).name,vars(4).name);
+raw_features = A.(vars(1).name);
+indices      = A.(vars(2).name);
+tst_inx      = A.(vars(3).name);
+trn_inx      = A.(vars(4).name);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define directory to save parameters & results
+% dir    = '/home/funzi/Documents/';
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+dmr    = [0 5 10 20 30 50];    % dimension reduction by PCA
+ws     = [0 5 10 20 30 50 70]; % window size
+% parameters of rbm (if it is used for extraction)
+hidNum = [30 50 100 500];
+lr_1   = [0.01 0.05 0.1 0.5];
+lr_2   = [0.05 0.1 0.5 0.7];
+mmt    = [0.02 0.05 0.1 0.5];
+cost   = [0.00002 0.01 0.1];
+
+%% Select parameters (if grid-search is not applied)
+di  = 1;
+wi  = 1;
+hi  = 4;
+l1i = 1;
+l2i = 1;
+mi  = 4;
+ci  = 1;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% If grid search is define
+% log_file = strcat(dir,'exp_.mat');
+% inx = resume_from_grid(log_file,8);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Feature extraction
+EXT_TYPE = 2;
+switch (EXT_TYPE)
+    case 1  % Using PCA
+        assert(~exist('OCTAVE_VERSION'),'This script cannot run in octave');
+        coeff = princomp(raw_features);
+        coeff = coeff(:,1:end-dmr(di));  % Change value of dmr(di) to reduce the dimensionality
+        features = raw_features*coeff;
+          % normalizing
+        mm = minmax(features')';
+        inn= (find(mm(1,:)~=mm(2,:)));
+        mm = mm(:,inn);
+        features = features(:,inn);
+        features = (features-repmat(mm(1,:),size(features,1),1))./(repmat(mm(2,:),size(features,1),1)-repmat(mm(1,:),size(features,1),1));
+        
+        % describe config
+        s_conf = xml_format(dmr(di));
+    case 2  % Using rbm
+        conf.hidNum = hidNum(hi);
+        conf.eNum   = 100;
+        conf.sNum   = size(raw_features,1);
+        conf.bNum   = 1;
+        conf.gNum   = 1;
+        conf.params = [lr_1(l1i) lr_2(l2i) mmt(mi) cost(ci)];
+        conf.N    = 50;
+        conf.MAX_INC = 10;
+        W1 = zeros(0,0);
+        [W1 vB1 hB1] = training_rbm_(conf,W1,raw_features);
+        features = logistic(raw_features*W1 + repmat(hB1,conf.sNum,1));
+        
+        % describe config
+        s_conf = xml_format(conf);
+end
+
+correct = 0;   % correct rate
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% CODE HERE                               %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+nfvec = features';
+feature_file = 'son_out_files.mat';
+save(feature_file,'nfvec');
+
+
+% the calling of daniels script
+ftype = 'MTTMixedFeatureSon';
+global sonfeatbase;
+sonfeatbase = [];
+
+global db_MTTMixedFeatureSon
+db_MTTMixedFeatureSon.reset
+
+global globalvars;
+globalvars.debug = 2
+
+fparams_all.son_conf = {s_conf};
+fparams_all.son_filename = {feature_file};
+
+% ---
+% vary parameters for svmlight
+% ---    
+
+trainparams_all = struct(...
+            'C', [0.05 0.1 3 10 100], ...   %you just want to try this parameter approx (0.01..........1000) (3-100 is nice for daniel)
+            ...               
+            'weighted', [0], ...
+            'dataset',{{'comp_partBinData_cupaper_01'}}, ...
+            'inctrain', 0, ...
+            'deltafun', {{'conv_subspace_delta'}}, ...
+            'deltafun_params', {{{[0],[1]},{[5],[1]},{[20],[1]},{[40],[1]}}} ... % normalisation improves results
+            );
+
+% set training function
+trainfun = @svmlight_wrapper;
+
+
+% create test dirxectory
+akt_dir = migrate_to_test_dir();
+
+% call eval
+result = test_generic_features_parameters_crossval...
+    (fparams_all, trainparams_all, trainfun, ftype);
+
+% correct = result.mean_ok_test(1,1);
+% fprintf('Correct = %f\n',correct);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Using the logging function to save paramters
+% and the result for plotting or in grid search
+% logging(log_file,[i1 i2 i3 i4 i5 correct]);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/Exp_grad.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,170 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Experiment with gradient ascent                                         %
+% Project: sub-euclidean distance for music similarity                    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Load features
+%feature_file = 'rel_music_raw_features.mat';
+feature_file = 'rel_music_raw_features+simdata_ISMIR12.mat';
+
+vars = whos('-file', feature_file);
+A = load(feature_file,vars(1).name,vars(2).name,vars(3).name,vars(4).name);
+raw_features = A.(vars(1).name);
+indices      = A.(vars(2).name);
+tst_inx      = A.(vars(3).name);
+trn_inx      = A.(vars(4).name);
+%% Params setting
+dmr    = [0 5 10 20 30 50];    % dimension reduction by PCA
+ws     = [0 5 10 20 30 50 70]; % window size
+% parameters of rbm (if it is used for extraction)
+hidNum = 0;
+lr_1   = 0;
+lr_2   = 0;
+mmt    = 0;
+cost   = 0;
+%% Select parameters (if grid-search is not applied)
+ di  = 1;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% If grid search is define
+% Define directory to save parameters & results
+if ~isempty(findstr('WIN',computer()))
+        dir    = 'C:\Pros\Experiments\ISMIR_2013\grad\'; % In windows platform
+        dlm    = '\';
+elseif ~isempty(findstr('linux',computer())) || ~isempty(findstr('LNX',computer()))
+        dir    = '/home/funzi/Documents/Experiments/ISMIR_2013/grad/'; % In lunix platform
+        dlm    = '/';
+end
+
+EXT_TYPE = 2;
+switch (EXT_TYPE)
+    case 1
+        dir = strcat(dir,'pca',dlm);
+    case 2
+        dir = strcat(dir,'rbm',dlm);
+        
+        hidNum = [100 500 1000 1200];
+        lr_1   = [0.5 0.7];
+        lr_2   = [0.7];
+        mmt    = [0.1];
+        cost   = [0.00002];
+    otherwise            
+        dir = strcat(dir,'none',dlm);
+end
+
+w_num = size(ws,2);
+
+for iiii = 1:200 % set the higher range to search for better features in case of ext using rbm
+    log_file = strcat(dir,'exp',num2str(iiii),'.mat')
+    inx = resume_from_grid(log_file,8 + w_num);
+    if inx(end-w_num+1:end)==ones(1,w_num)
+        max_= zeros(1,w_num); 
+    else
+        max_ = inx(end-w_num+1:end);
+    end
+
+    results = zeros(1,w_num);
+    W_max = cell(1,w_num);
+    vB_max = cell(1,w_num);
+    hB_max = cell(1,w_num);
+    Ws_max = cell(1,w_num);
+
+for hi = inx(1):size(hidNum,2)
+for l1i = inx(2):size(lr_1,2)
+% for l1i = inx(3):size(lr_2,2)
+for mi  = inx(4):size(mmt,2)
+for ci  = inx(5):size(cost,2)    
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Feature extraction
+features = raw_features;
+switch (EXT_TYPE)   
+    case 1  % Using PCA        
+        assert(~exist('OCTAVE_VERSION'),'This script cannot run in octave');
+        coeff = princomp(raw_features);
+        coeff = coeff(:,1:6);  % best = 6
+        features = raw_features*coeff;
+          % normalizing
+        mm = minmax(features')';
+        inn= (find(mm(1,:)~=mm(2,:)));
+        mm = mm(:,inn);
+        features = features(:,inn);
+        features = (features-repmat(mm(1,:),size(features,1),1))./(repmat(mm(2,:),size(features,1),1)-repmat(mm(1,:),size(features,1),1));
+    case 2  % Using rbm      
+        conf.hidNum = hidNum(hi);
+        conf.eNum   = 100;
+        conf.sNum   = size(raw_features,1);
+        conf.bNum   = 1;
+        conf.gNum   = 1;
+        conf.params = [lr_1(l1i) lr_1(l1i) mmt(mi) cost(ci)];
+        conf.N    = 50;
+        conf.MAX_INC = 10;
+        W1 = zeros(0,0);
+        [W1 vB1 hB1] = training_rbm_(conf,W1,raw_features);
+        features = logistic(raw_features*W1 + repmat(hB1,conf.sNum,1));
+    otherwise
+        % normalizing
+%         mm = minmax(features')';
+%         inn= (find(mm(1,:)~=mm(2,:)));
+%         mm = mm(:,inn);
+%         features = features(:,inn);
+%         features = (features-repmat(mm(1,:),size(features,1),1))./(repmat(mm(2,:),size(features,1),1)-repmat(mm(1,:),size(features,1),1));
+end
+
+for wi = inx(6):w_num
+%% Sub-euclidean computation
+w = ws(wi);   % w = subspace window size
+num_case = size(trn_inx,1); 
+[trnd_12 trnd_13] = subspace_distances(trn_inx,features,indices,w,0);
+[tstd_12 tstd_13] = subspace_distances(tst_inx,features,indices,w,0);
+cr_ = 0;   % correct rate for training
+cr  = 0;   % correct rate for testing
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% CODE HERE                               %%
+[Ws cr_] = gradient_ascent(trnd_12,trnd_13,0.1,0.1,0.00002);
+
+for i = 1:num_case       
+ cr = cr + sum((tstd_13{i}-tstd_12{i})*Ws{i}' > 0, 1)/size(tstd_12{i},1);
+end
+cr = cr/num_case;
+if cr_>max_(wi)
+    max_(wi) = cr_;
+    results(wi)  = cr;
+    if EXT_TYPE==2
+        W_max{wi} = W1;
+        vB_max{wi} = vB1;
+        hB_max{wi} = hB1;
+        Ws_max{wi} = Ws;
+    end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+fprintf('[window|train|test]= %2d |%f |%f\n',w,cr_,cr);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Using the logging function to save paramters
+% and the result for plotting or in grid search
+switch EXT_TYPE
+    case 1
+       % logging(log_file,[100 100 100 100 100 wi cr_ cr max_]);  
+    case 2
+        logging(log_file,[hi l1i l1i mi ci wi cr_ cr max_ conf.hidNum conf.eNum conf.params]);  
+    otherwise
+        logging(log_file,[100 100 100 100 100 wi cr_ cr max_]);  
+end
+end
+inx(6)=1;
+end
+inx(5) = 1;
+end
+inx(4) = 1;
+end
+inx(2) = 1;
+end
+inx(1) = 1;
+%% Test on best features
+
+save(strcat(dir,'res_',num2str(iiii),'.mat'),'max_','results','W_max','vB_max','hB_max','Ws_max','ws');
+[dummy pos] = max(max_);
+fprintf('Accuracy (RBM best fts): w = %d train = %f test = %f\n',ws(pos),max_(pos),results(pos));
+clc;
+end
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+clear;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/Exp_normalise_deltas.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,125 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Experiment code templat                                                 %
+% Project: sub-euclidean distance for music similarity,
+%          in the last part all the 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Load features
+feature_file = 'rel_music_raw_features.mat';
+vars = whos('-file', feature_file);
+A = load(feature_file,vars(1).name,vars(2).name,vars(3).name,vars(4).name);
+raw_features = A.(vars(1).name);
+indices      = A.(vars(2).name);
+tst_inx      = A.(vars(3).name);
+trn_inx      = A.(vars(4).name);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define directory to save parameters & results
+% dir    = '/home/funzi/Documents/';
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+dmr    = [0 5 10 20 30 50];    % dimension reduction by PCA
+ws     = [0 5 10 20 30 50 70]; % window size
+% parameters of rbm (if it is used for extraction)
+hidNum = [30 50 100 500];
+lr_1   = [0.05 0.1 0.5];
+lr_2   = [0.1 0.5 0.7];
+mmt    = [0.02 0.05 0.1];
+cost   = [0.00002 0.01 0.1];
+
+%% Select parameters (if grid-search is not applied)
+di  = 1;
+wi  = 1;
+hi  = 1;
+l1i = 1;
+l2i = 1;
+mi  = 1;
+ci  = 1;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% If grid search is define
+% log_file = strcat(dir,'exp_.mat');
+% inx = resume_from_grid(log_file,8);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Feature extraction
+EXT_TYPE = 2;
+switch (EXT_TYPE)
+    case 1  % Using PCA
+        assert(~exist('OCTAVE_VERSION'),'This script cannot run in octave');
+        coeff = princomp(raw_features);
+        coeff = coeff(:,1:end-dmr(di));  % Change value of dmr(di) to reduce the dimensionality
+        features = raw_features*coeff;
+          % normalizing
+        mm = minmax(features')';
+        inn= (find(mm(1,:)~=mm(2,:)));
+        mm = mm(:,inn);
+        features = features(:,inn);
+        features = (features-repmat(mm(1,:),size(features,1),1))./(repmat(mm(2,:),size(features,1),1)-repmat(mm(1,:),size(features,1),1));
+    case 2  % Using rbm
+        conf.hidNum = hidNum(hi);
+        conf.eNum   = 100;
+        conf.sNum   = size(raw_features,1);
+        conf.bNum   = 1;
+        conf.gNum   = 1;
+        conf.params = [lr_1(l1i) lr_2(l2i) mmt(mi) cost(ci)];
+        conf.N    = 50;
+        conf.MAX_INC = 10;
+        W1 = zeros(0,0);
+        [W1 vB1 hB1] = training_rbm_(conf,W1,raw_features);
+        features = raw_features*W1 + repmat(hB1,conf.sNum,1);
+end
+
+%% Sub-euclidean computation
+num_case = size(trn_inx,1);
+trnd_12 = cell(1,num_case);
+trnd_13 = cell(1,num_case);
+tstd_12 = cell(1,num_case);
+tstd_13 = cell(1,num_case);
+
+w = ws(wi);
+
+% w = subspace window size
+if w == 0 % trnd_12 = d(a,b) , trnd_13= d(a,c) 
+  for i = 1:num_case % over all cross-validation folds (num_case)
+    [trnd_12{i} trnd_13{i}] = simple_dist(trn_inx{i},features,indices);
+    [tstd_12{i} tstd_13{i}] = simple_dist(tst_inx{i},features,indices);
+  end
+else
+  for i = 1:num_case % for w > 1
+    [trnd_12{i} trnd_13{i}] = conv_euclidean_dist(trn_inx{i},features,indices,w,1);    %% normalize is better than no normalize  
+    [tstd_12{i} tstd_13{i}] = conv_euclidean_dist(tst_inx{i},features,indices,w,1);
+  end
+end
+%% Data preparation
+trn_dat1 = cell(1,num_case);
+trn_dat2 = cell(1,num_case);
+tst_dat1 = cell(1,num_case);
+tst_dat2 = cell(1,num_case);
+
+for i=1:num_case 
+ %=> Compute hypothesis
+ trn_dat1{i}  = trnd_13{i} - trnd_12{i};
+ trn_dat2{i}  = trnd_12{i} - trnd_13{i};
+ tst_dat1{i}   = tstd_13{i} - tstd_12{i};
+ tst_dat2{i}   = tstd_12{i} - tstd_13{i};
+ 
+
+ % ---
+ % Cheat: Normalize over all training and test delta values using min-max
+ % Son reports this can give about 95% accuracy
+ % ---
+ 
+ mm = minmax([trn_dat1{i};tst_dat1{i}]')';
+ inn= find(mm(1,:)~=mm(2,:));
+ mm = mm(:,inn);    
+ trn_dat1{i} =
+ (trn_dat1{i}(:,inn)-repmat(mm(1,:),size(trn_dat1{i},1),1))./repmat(mm(2,:)-mm(1,:),size(trn_dat1{i},1),1);
+ tst_dat1{i} = (tst_dat1{i}(:,inn)-repmat(mm(1,:),size(tst_dat1{i},1),1))./repmat(mm(2,:)-mm(1,:),size(tst_dat1{i},1),1);
+ 
+ mm = minmax([trn_dat2{i};tst_dat2{i}]');
+ inn= find(mm(1,:)~=mm(2,:));
+ mm = mm(:,inn);    
+ trn_dat2{i} =
+ (trn_dat2{i}(:,inn)-repmat(mm(1,:),size(trn_dat2{i},1),1))./repmat(mm(2,:)-mm(1,:),size(trn_dat2{i},1),1);
+ tst_dat2{i} = (tst_dat2{i}(:,inn)-repmat(mm(1,:),size(tst_dat2{i},1),1))./repmat(mm(2,:)-mm(1,:),size(tst_dat2{i},1),1);
+
+
+
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/Exp_template.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,146 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Experiment code templat                                                 %
+% Project: sub-euclidean distance for music similarity                    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Load features
+feature_file = 'rel_music_raw_features.mat';
+vars = whos('-file', feature_file);
+A = load(feature_file,vars(1).name,vars(2).name,vars(3).name,vars(4).name);
+raw_features = A.(vars(1).name);
+indices      = A.(vars(2).name);
+tst_inx      = A.(vars(3).name);
+trn_inx      = A.(vars(4).name);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define directory to save parameters & results
+% dir    = '/home/funzi/Documents/';
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+dmr    = [0 5 10 20 30 50];    % dimension reduction by PCA
+ws     = [0 5 10 20 30 50 70]; % window size
+% parameters of rbm (if it is used for extraction)
+hidNum = [30 50 100 500];
+lr_1   = [0.05 0.1 0.5];
+lr_2   = [0.1 0.5 0.7];
+mmt    = [0.02 0.05 0.1];
+cost   = [0.00002 0.01 0.1];
+
+%% Select parameters (if grid-search is not applied)
+di  = 1;
+wi  = 1;
+hi  = 1;
+l1i = 1;
+l2i = 1;
+mi  = 1;
+ci  = 1;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% If grid search is define
+% log_file = strcat(dir,'exp_.mat');
+% inx = resume_from_grid(log_file,8);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Feature extraction
+EXT_TYPE = 2;
+switch (EXT_TYPE)
+    case 1  % Using PCA
+        assert(~exist('OCTAVE_VERSION'),'This script cannot run in octave');
+        coeff = princomp(raw_features);
+        coeff = coeff(:,1:end-dmr(di));  % Change value of dmr(di) to reduce the dimensionality
+        features = raw_features*coeff;
+          % normalizing
+        mm = minmax(features')';
+        inn= (find(mm(1,:)~=mm(2,:)));
+        mm = mm(:,inn);
+        features = features(:,inn);
+        features = (features-repmat(mm(1,:),size(features,1),1))./(repmat(mm(2,:),size(features,1),1)-repmat(mm(1,:),size(features,1),1));
+    case 2  % Using rbm
+        conf.hidNum = hidNum(hi);
+        conf.eNum   = 100;
+        conf.sNum   = size(raw_features,1);
+        conf.bNum   = 1;
+        conf.gNum   = 1;
+        conf.params = [lr_1(l1i) lr_2(l2i) mmt(mi) cost(ci)];
+        conf.N    = 50;
+        conf.MAX_INC = 10;
+        W1 = zeros(0,0);
+        [W1 vB1 hB1] = training_rbm_(conf,W1,raw_features);
+        features = raw_features*W1 + repmat(hB1,conf.sNum,1);
+end
+
+%% Sub-euclidean computation
+num_case = size(trn_inx,1);
+trnd_12 = cell(1,num_case);
+trnd_13 = cell(1,num_case);
+tstd_12 = cell(1,num_case);
+tstd_13 = cell(1,num_case);
+
+w = ws(wi);
+
+% w = subspace window size
+if w == 0 % trnd_12 = d(a,b) , trnd_13= d(a,c) 
+  for i = 1:num_case % over all cross-validation folds (num_case)
+    [trnd_12{i} trnd_13{i}] = simple_dist(trn_inx{i},features,indices);
+    [tstd_12{i} tstd_13{i}] = simple_dist(tst_inx{i},features,indices);
+  end
+else
+  for i = 1:num_case % for w > 1
+    [trnd_12{i} trnd_13{i}] = conv_euclidean_dist(trn_inx{i},features,indices,w,1);    %% normalize is better than no normalize  
+    [tstd_12{i} tstd_13{i}] = conv_euclidean_dist(tst_inx{i},features,indices,w,1);
+  end
+end
+%% Data preparation
+trn_dat1 = cell(1,num_case);
+trn_dat2 = cell(1,num_case);
+tst_dat1 = cell(1,num_case);
+tst_dat2 = cell(1,num_case);
+
+for i=1:num_case 
+ %=> Compute hypothesis
+ trn_dat1{i}  = trnd_13{i} - trnd_12{i};
+ trn_dat2{i}  = trnd_12{i} - trnd_13{i};
+ tst_dat1{i}   = tstd_13{i} - tstd_12{i};
+ tst_dat2{i}   = tstd_12{i} - tstd_13{i};
+ 
+ % => Normalize using logistic (lost the range)
+%  trn_dat1{i} = logistic(trn_dat1{i});
+%  trn_dat2{i} = logistic(trn_dat2{i});
+%  tst_dat1{i} = logistic(tst_dat1{i});
+%  tst_dat2{i} = logistic(tst_dat2{i});
+ 
+ %=> Normalize using min-max
+%  mm = minmax(trn_dat1{i}')';
+%  inn= find(mm(1,:)~=mm(2,:));
+%  mm = mm(:,inn);    
+%  trn_dat1{i} =
+%  (trn_dat1{i}(:,inn)-repmat(mm(1,:),size(trn_dat1{i},1),1))./repmat(mm(2,:)-mm(1,:),size(trn_dat1{i},1),1);
+%  mm = minmax(tst_dat1{i}')';
+%  inn= find(mm(1,:)~=mm(2,:));
+%  mm = mm(:,inn);    
+%  tst_dat1{i} = (tst_dat1{i}(:,inn)-repmat(mm(1,:),size(tst_dat1{i},1),1))./repmat(mm(2,:)-mm(1,:),size(tst_dat1{i},1),1);
+%  
+%  mm = minmax(trn_dat2{i}')';
+%  inn= find(mm(1,:)~=mm(2,:));
+%  mm = mm(:,inn);    
+%  trn_dat2{i} = (trn_dat2{i}(:,inn)-repmat(mm(1,:),size(trn_dat2{i},1),1))./repmat(mm(2,:)-mm(1,:),size(trn_dat2{i},1),1);
+
+%  mm = minmax(tst_dat2{i}')';
+%  inn= find(mm(1,:)~=mm(2,:));
+%  mm = mm(:,inn);    
+%  tst_dat2{i} = (tst_dat2{i}(:,inn)-repmat(mm(1,:),size(tst_dat2{i},1),1))./repmat(mm(2,:)-mm(1,:),size(tst_dat2{i},1),1);
+
+ % => normalize from [-1 1] to [0 1]
+ trn_dat1{i} = (trn_dat1{i}+1)/2;
+ trn_dat2{i} = (trn_dat2{i}+1)/2;
+ tst_dat1{i} = (tst_dat1{i}+1)/2;
+ tst_dat2{i} = (tst_dat2{i}+1)/2;
+end
+correct = 0;   % correct rate
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% CODE HERE                               %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+fprintf('Correct = %f\n',correct);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Using the logging function to save paramters
+% and the result for plotting or in grid search
+% logging(log_file,[i1 i2 i3 i4 i5 correct]);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+clear;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/conv_euclidean_dist.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function [dis_s12 dis_s13] = conv_euclidean_dist(index_list,vector_list,index_map,w,norm)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% compute the distance vector from 2 vector using convolution euclidean         %
+% w = convolution window                                                        %
+% sontran2013                                                                   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+s_num = size(index_list,1);
+s_len = size(vector_list,2);
+
+dis_s12 = zeros(s_num,s_len);
+dis_s13 = zeros(s_num,s_len);
+
+% Convert list of assigned indices to ordered indices
+[checker index_list] = ismember(index_list,index_map);
+cv_vec = ones(1,w);
+if all(all(checker(:,1:3)))
+  dis_s12 = sqrt(conv2([1],cv_vec,(vector_list(index_list(:,1),:) - vector_list(index_list(:,2),:)).^2));
+  dis_s13 = sqrt(conv2([1],cv_vec,(vector_list(index_list(:,1),:) - vector_list(index_list(:,3),:)).^2));
+  % dis_s12 = dis_s12(:,w:end-w);
+  % dis_s13 = dis_s13(:,w:end-w);
+  if norm      
+      dis_s12 = dis_s12./(conv2([1],cv_vec,ones(s_num,s_len)));
+      dis_s13 = dis_s13./(conv2([1],cv_vec,ones(s_num,s_len)));
+  end
+else
+  fprintf('Some indices are not mapped\n');
+end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/conv_subspace_delta.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function out = conv_subspace_delta(a, b, w, norm)
+% out = conv_subspace_delta(a, b, w, norm)
+% compute the distance vector from 2 vectors a,b using convolution euclidean         %
+% w = convolution window 
+%
+% DW adapted from sontran2013
+
+% window for convolution
+
+s_len = numel(a);
+if w == 0
+    w = s_len;
+end
+cv_vec = ones(w,1);
+
+out = sqrt(conv(cv_vec,(a - b).^2));
+% out = out(:,w:end-w);
+if norm 
+  out = out./(conv(cv_vec,ones(s_len,1)));
+end
+
+% how to get to 1 dimension?
+% out = sum(out);
+
+
Binary file core/magnatagatune/tests_evals/rbm_subspace/exp_grad.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/gradient_ascent.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function [Ws cr_] = gradient_ascent(d_12,d_13,lr,mm,cost)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% gradient descent                                                              %
+% sontran2013                                                                   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+pd_num = size(d_12,2);
+Ws     = cell(1,pd_num);
+DWs    = cell(1,pd_num);
+
+for i = 1:pd_num
+Ws{i} = 0.01*ones(1,size(d_12{i},2));
+DWs{i} = zeros(size(Ws{i}));
+end
+plot_ = 0;
+if plot_, h = plot(nan); end
+max_ = 0;
+eNum = 50;
+for j=1:eNum
+    cr_ = 0;    
+    for i=1:pd_num
+        if j>1
+        if sum(sum(isinf(Ws{i}))) ~=0 || sum(sum(isnan(Ws{i}))) ~=0, break, end
+        diff = sum(d_13{i}-d_12{i},1)/size(d_12{i},1);
+        DWs{i} = lr*(diff-cost*Ws{i}) + mm*DWs{i};
+        Ws{i} = Ws{i} + DWs{i};
+        end
+        cr_ = cr_ + sum(((d_13{i}-d_12{i})*Ws{i}' > 0))/size(d_12{i},1);        
+    end
+    cr_ = cr_/pd_num;
+    if cr_ > max_
+        max_ = cr_;
+        W_max = Ws;
+    end
+    if plot_
+        cr_plot(j) = cr_;
+        axis([0 (eNum+1) 0 1]);
+        set(h,'YData',cr_plot);
+        drawnow;
+    end
+end
+%max
+Ws = W_max;
+cr_ = max_;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/logging.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function logging( file,log_dat)
+% Log all values in data to the file
+% sontran2013
+stt  = exist(file,'file');
+if stt == 0
+    data = zeros(0,0);
+else
+    load(file);
+end
+data = [data;log_dat];
+if exist('OCTAVE_VERSION')
+  save('-mat-binary',file,'data');
+else
+  save(file,'data');
+end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/logistic.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function A = logistic( A )
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Logistic function                        %
+% sontran2012                              %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+A = 1./(1+exp(-A));
+end
+
Binary file core/magnatagatune/tests_evals/rbm_subspace/rel_music_raw_features+simdata_ISMIR12.mat has changed
Binary file core/magnatagatune/tests_evals/rbm_subspace/rel_music_raw_features.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/resume_from_grid.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function inx = resume_from_grid(log_file,inx_size);
+% The function read the log file and resume the grid search for params
+% sontran 2013
+stt  = exist(log_file,'file');
+if stt == 0
+    inx = ones(1,inx_size);
+else    
+    load(log_file);
+    inx = data(end,:);
+    inx = inx(1:inx_size);
+end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/simple_dist.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function [dis_s12,dis_s13] = simple_dist(index_list,vector_list,index_map)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% compute the distance vector from 2 vector                                     %
+% sontran2013                                                                   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+s_num = size(index_list,1);
+s_len = size(vector_list,2);
+
+dis_s12 = zeros(s_num,s_len);
+dis_s13 = zeros(s_num,s_len);
+
+% Convert list of assigned indices to ordered indices
+[checker index_list] = ismember(index_list,index_map);
+
+if all(all(checker(:,1:3)))
+  dis_s12 = abs(vector_list(index_list(:,1),:)-vector_list(index_list(:,2),:));
+  dis_s13 = abs(vector_list(index_list(:,1),:)-vector_list(index_list(:,3),:));
+else
+  fprintf('Some indices are not mapped\n');
+end
+
+end
+% simple_dist(sontest{1},sonfeatures,sonindex)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/subspace_distances.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function [d_12 d_13] = subspace_distances(f_inx,features,indices,w,norm)
+    num_case = max(size(f_inx));
+    d_12 = cell(1,num_case);
+    d_13 = cell(1,num_case);    
+    if w == 0 % d_12 = d(a,b) , d_13= d(a,c) 
+      for i = 1:num_case % over all cross-validation folds (num_case)
+        [d_12{i} d_13{i}] = simple_dist(f_inx{i},features,indices);    
+      end
+    else
+      for i = 1:num_case % for w > 1
+        [d_12{i} d_13{i}] = conv_euclidean_dist(f_inx{i},features,indices,w,norm);    %% normalize is better than no normalize in almost the case
+      end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/training_rbm_.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+function [W visB hidB] = training_rbm_(conf,W,data)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Training RBM                                                       %  
+% conf: training setting                                             %
+% W: weights of connections                                          %
+% -*-sontran2012-*-                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+assert(~isempty(data),'[KBRBM] Data is empty'); 
+%% initialization
+visNum  = size(data,2);
+hidNum  = conf.hidNum;
+sNum  = conf.sNum;
+lr    = conf.params(1);
+N     = conf.N;                                                                     % Number of epoch training with lr_1                     
+W     = 0.1*randn(visNum - size(W,1),size(W,2));
+W     = 0.1*randn(size(W,1),hidNum-size(W,2));
+
+DW    = zeros(size(W));
+visB  = zeros(1,visNum);
+DVB   = zeros(1,visNum);
+hidB  = zeros(1,hidNum);
+DHB   = zeros(1,hidNum);
+visP  = zeros(sNum,visNum);
+visN  = zeros(sNum,visNum);
+visNs = zeros(sNum,visNum);
+hidP  = zeros(sNum,hidNum);
+hidPs = zeros(sNum,hidNum);
+hidN  = zeros(sNum,hidNum);
+hidNs = zeros(sNum,hidNum);
+
+plot_ = 0;
+%% Reconstruction error & evaluation error & early stopping
+mse    = 0;
+omse   = 0;
+inc_count = 0;
+MAX_INC = conf.MAX_INC;                                                                % If the error increase MAX_INC times continuously, then stop training
+%% Average best settings
+n_best  = 1;
+aW  = size(W);
+aVB = size(visB);
+aHB = size(hidB);
+%% Plotting
+if plot_, h = plot(nan); end
+%% ==================== Start training =========================== %%
+for i=1:conf.eNum
+    if i== N+1
+        lr = conf.params(2);
+    end
+    omse = mse;
+    mse = 0;
+    for j=1:conf.bNum
+       visP = data((j-1)*conf.sNum+1:j*conf.sNum,:);
+       %up
+       hidP = logistic(visP*W + repmat(hidB,sNum,1));
+       hidPs =  1*(hidP >rand(sNum,hidNum));
+       hidNs = hidPs;
+       for k=1:conf.gNum
+           % down
+           visN  = logistic(hidNs*W' + repmat(visB,sNum,1));
+           visNs = 1*(visN>rand(sNum,visNum));           
+           % up
+           hidN  = logistic(visNs*W + repmat(hidB,sNum,1));
+           hidNs = 1*(hidN>rand(sNum,hidNum));
+       end
+       % Compute MSE for reconstruction
+%       rdiff = (visP - visN);
+%       mse = mse + sum(sum(rdiff.*rdiff))/(sNum*visNum);
+       % Update W,visB,hidB
+       diff = (visP'*hidP - visNs'*hidN)/sNum;
+       DW  = lr*(diff - conf.params(4)*W) +  conf.params(3)*DW;
+       W   = W + DW;
+       DVB  = lr*sum(visP - visN,1)/sNum + conf.params(3)*DVB;
+       visB = visB + DVB;
+       DHB  = lr*sum(hidP - hidN,1)/sNum + conf.params(3)*DHB;
+       hidB = hidB + DHB;
+    end
+    %% 
+    if plot_
+        mse_plot(i) = mse;
+        axis([0 (conf.eNum+1) 0 5]);
+        set(h,'YData',mse_plot);
+        drawnow;
+    end
+% %    save(strcat('C:\Pros\Data\XOR\plot_',num2str(conf.params(2),3),'.mat'),'mse_plot');
+% %    plot(mse_plot,'XDataSource','real(mse_plot)','YDataSource','imag(mse_plot)')
+% %     linkdata on;
+    
+    if mse > omse
+        inc_count = inc_count + 1;
+    else
+        inc_count = 0;
+    end
+    if inc_count> MAX_INC, break; end;
+%    fprintf('Epoch %d  : MSE = %f\n',i,mse);
+end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/write_mat_results_ISMIR13RBM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,197 @@
+function [out, stats] = write_mat_results_ISMIR13RBM(dirin,fileout)
+% combine the test results from the directories supplied,
+% and recombine the bins to a coherent dataset
+%
+% allows for distinguishing different hidden State numbers
+
+% folders = {'130505_svm_disttest_subsconv_rbm_largegrid_21_r2385','130505_svm_disttest_subsconv_rbm_largegrid_22_r2385','130505_svm_disttest_subsconv_rbm_largegrid_23_r2385','130505_svm_disttest_subsconv_rbm_largegrid_24_r2385','130506_svm_disttest_subsconv_rbm_largegrid_25_r2385'};
+
+
+
+features = [];
+show = 1;
+
+if nargin == 0
+    dirin{1} = './';
+end
+
+global comparison;
+global comparison_ids;
+     
+newout = [];
+thisdir = pwd;
+% loop through al lthe result directories and 
+for diri = 1:numel(dirin)
+
+    % ---
+    % go to directory and locate file
+    % ---
+    cd(dirin{diri});
+
+    u = dir();
+    u = {u.name};
+    [idx, strpos] = substrcellfind(u, '_finalresults.mat', 1);
+    
+    if numel(idx) < 1
+        error 'This directory contains no valid test data';
+    end
+    
+    % just one or more tests in this folder?
+    if exist('file','var') && isnumeric(file)
+        cprint(1, 'loading one result file');
+        file = u{idx(file)};
+        data = load(file);
+        sappend(out,data.out);
+    else
+        for filei = 1:numel(idx)
+            cprint(1, 'loading result file %i of %i',filei, numel(idx));
+            file = u{idx(filei)};
+            data = load(file);
+            newout = sappend(newout,data.out);
+        end
+    end
+    % reset act directory
+    cd(thisdir);
+end
+
+
+% ---
+% filter C values!
+% ---
+allcs = zeros(numel(newout),1);
+for i=1:numel(newout)
+    allcs(i) = newout(i).trainparams.C;
+end
+valididx = find(allcs == 1); % select C!
+newout = newout(valididx);
+
+
+% bundle all datasets
+fout = sameparamsubset(newout, 'dataset','');
+out = [];
+for ci=1:numel(fout)
+    filteredout = fout{ci};
+    
+    
+    ok_test = zeros(2, numel(filteredout));
+    ok_train =  zeros(2, numel(filteredout));
+    ok_config = [];
+    
+    
+    tmpout = filteredout(1);
+    % cycle over all test sets and get new means
+    for i=1:numel(filteredout)
+        ok_test(:,i) = filteredout(i).mean_ok_test;
+        ok_train(:,i) = filteredout(i).mean_ok_train;
+    end
+    
+    % save the stuff
+    tmpout.mean_ok_test = mean(ok_test,2);
+    tmpout.var_ok_test = var(ok_test,0,2);
+    tmpout.mean_ok_train = mean(ok_train,2);
+    tmpout.var_ok_train = var(ok_train,0,2);
+    
+    tmpout.ok_test = ok_test;
+    tmpout.ok_train = ok_train;
+    
+    % put it in output structure
+    out = sappend(out,tmpout);
+end
+
+% ---
+% show results
+% ---
+if numel([out.mean_ok_test]) > 1 && show
+    
+    % plot means  % plot std = sqrt(var) % plot training results
+    figure;
+    boxplot([out.mean_ok_test], sqrt([out.var_ok_test]), [out.mean_ok_train]);
+    title (sprintf('Performance for all configs'));
+end
+
+
+
+% --- 
+% write max. test success
+% ---
+mean_ok_test = [out.mean_ok_test];
+[val, idx] = max(mean_ok_test(1,:));
+if show
+    fprintf(' --- Maximal test set success: nr. %d, %3.2f percent.  train result %3.2f percent. --- \n', idx, val * 100,out(idx).mean_ok_train(1,:)*100)
+end
+
+
+% --- 
+% write max. test/train success
+% ---
+mean_ok_train = [out.mean_ok_train];
+[val, idx] = max(mean_ok_train(1,:));
+if show
+    fprintf(' --- Maximal train set success: nr. %d, %3.2f percent, test result %3.2f percent. --- \n', idx, val * 100,out(idx).mean_ok_test(1,:)*100)
+end
+
+% save this summary
+save([hash(strcat(dirin{:}),'md5') '_summary'], 'out');
+
+
+
+% ---
+% build index of these feature configurations without  num_hid
+% ---
+[fout2,param_hash,idxhash] = sameparamsubset(out, '','rbm_hidNum');
+for ci = 1:numel(fout2)
+    
+    % search for the training param index
+    found = find(idxhash{ci}== idx);
+    if ~isempty(found)
+        out_withsameconfig = fout2{ci};
+        break;
+    end
+end
+
+
+end
+
+function [out, param_hash,idx] = sameparamsubset(in, ignoret,ignoref)
+    % ---
+    % build index of all existing configurations
+    % ---
+    param_hash = cell(numel(in),1);
+    for i=1:numel(in)
+        params = struct('trainparams',in(i).trainparams, ...
+                        'fparams',in(i).fparams);
+
+        % remove the dataset param
+        if ~isempty(ignoret)
+            params.trainparams = rmfield(params.trainparams,ignoret);
+        end
+        if ~isempty(ignoref)
+            params.fparams = rmfield(params.fparams,ignoref);
+        end
+
+        phash = hash(xml_format(params),'md5');          
+        param_hash{i} = phash;
+    end
+
+    % ---
+    %  recombine the data for different datasets!
+    % ---
+    cvals = unique(param_hash);
+
+    out = {};
+    for ci=1:numel(cvals)
+        idx{ci} = strcellfind(param_hash,cvals(ci),1);
+        out{ci} = in(idx{ci});
+    end
+
+end
+
+function boxplot(mean, std, train);
+
+    bar([train; mean]', 1.5);
+    hold on;
+    errorbar(1:size(mean,2), mean(1,:), std(1,:),'.');
+%     plot(train,'rO');
+    colormap(spring);
+    axis([0 size(mean,2)+1 max(0, min(min([train mean] - 0.1))) max(max([train mean] + 0.1))]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/write_mat_results_ISMIR13RBM_singletraining.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,136 @@
+function [out, stats] = write_mat_results_ISMIR13RBM_singletraining(dirin,fileout)
+% combine the test results from the directories supplied,
+% group them according to dataset parameter values
+% combine the test results from the directories supplied,
+% group them according to dataset parameter values
+
+features = [];
+show = 1;
+
+if nargin == 0
+    dirin{1} = './';
+end
+
+global comparison;
+global comparison_ids;
+     
+newout = [];
+thisdir = pwd;
+% loop through al lthe result directories and 
+for diri = 1:numel(dirin)
+
+    % ---
+    % go to directory and locate file
+    % ---
+    cd(dirin{diri});
+
+    u = dir();
+    u = {u.name};
+    [idx, strpos] = substrcellfind(u, '_finalresults.mat', 1);
+    
+    if numel(idx) < 1
+        error 'This directory contains no valid test data';
+    end
+    
+    % just one or more tests in this folder?
+    if exist('file','var') && isnumeric(file)
+        cprint(1, 'loading one result file');
+        file = u{idx(file)};
+        data = load(file);
+        sappend(out,data.out);
+    else
+        for filei = 1:numel(idx)
+            cprint(1, 'loading result file %i of %i',filei, numel(idx));
+            file = u{idx(filei)};
+            data = load(file);
+            newout = sappend(newout,data.out);
+        end
+    end
+    % reset act directory
+    cd(thisdir);
+end
+
+% ---
+% filter according to training parameter C
+%
+% NOTE :if we don't filter by C, we get strong overfitting with training
+% success > 96 % and test set performance aorund 65 %
+% ---
+cs = zeros(numel(newout),1);
+for i=1:numel(newout)
+    cs(i) = newout(i).trainparams.C;
+end
+cvals = unique(cs);
+
+for ci=1:numel(cvals)
+    valididx = find(cs == cvals(ci));
+    filteredout = newout(valididx);
+    
+    % ---
+    % get parameter statistics
+    % ---
+    stats = test_generic_display_param_influence(filteredout, show);
+
+    % get maximal values for each test set bin
+    % ---
+    % trainparams.dataset contains sets which have each only one bin of the
+    % ismir testsets 
+    % ---
+    max_idx = [stats.trainparams.dataset.mean_ok_train.max_idx];   
+    ok_test = zeros(2, numel(max_idx));
+    ok_train =  zeros(2, numel(max_idx));
+    ok_config = [];
+    % cycle over all test sets and save best result
+    for i=1:numel(max_idx)
+        ok_test(:,i) = filteredout(max_idx(i)).mean_ok_test;
+        ok_train(:,i) = filteredout(max_idx(i)).mean_ok_train;
+        ok_config = sappend(ok_config,struct('trainparams',filteredout(max_idx(i)).trainparams, ...
+                                                'fparams',filteredout(max_idx(i)).fparams));
+    end
+    % save the stuff
+    out(ci).mean_ok_test = mean(ok_test,2);
+    out(ci).var_ok_test = var(ok_test,0,2);
+    out(ci).mean_ok_train = mean(ok_train,2);
+    out(ci).var_ok_train = var(ok_train,0,2);
+    out(ci).trainparams.C = cvals(ci);
+    out(ci).ok_config = ok_config;
+    out(ci).ok_test = ok_test;
+    out(ci).ok_train = ok_train;
+end
+
+% ---
+% show results for different C
+% ---
+if numel([out.mean_ok_test]) > 1 && show
+    
+    % plot means  % plot std = sqrt(var) % plot training results
+    figure;
+    boxplot([out.mean_ok_test], sqrt([out.var_ok_test]), [out.mean_ok_train]);
+    title (sprintf('Performance for all configs'));
+end
+
+% --- 
+% write max. test success
+% ---
+mean_ok_test = [out.mean_ok_test];
+[val, idx] = max(mean_ok_test(1,:));
+if show
+    fprintf(' --- Maximal test set success: nr. %d, %3.2f percent. --- \n', idx, val * 100)
+end
+
+% save
+save([hash(strcat(dirin{:}),'md5') '_summary'], 'out');
+
+end
+
+
+
+function boxplot(mean, std, train);
+
+    bar([train; mean]', 1.5);
+    hold on;
+    errorbar(1:size(mean,2), mean(1,:), std(1,:),'.');
+%     plot(train,'rO');
+    colormap(spring);
+    axis([0 size(mean,2)+1 max(0, min(min([train mean] - 0.1))) max(max([train mean] + 0.1))]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/rbm_subspace/write_mat_results_ISMIR13RBM_windows.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,178 @@
+function [out, stats] = write_mat_results_ISMIR13RBM_windows(dirin,fileout)
+% combine the test results from the directories supplied,
+% and recombine the bins to a coherent dataset
+
+% folders_win1 = {'130507_svm_disttest_subsconv_rbm_largegrid_21_r2385','130507_svm_disttest_subsconv_rbm_largegrid_22_r2385','130507_svm_disttest_subsconv_rbm_largegrid_23_r2385','130507_svm_disttest_subsconv_rbm_largegrid_24_r2385','130508_svm_disttest_subsconv_rbm_largegrid_25_r2391'};
+% folders_win2 = {'130511_svm_disttest_subsconv_rbm_largegrid_21_r2391','130511_svm_disttest_subsconv_rbm_largegrid_22_r2391','130511_svm_disttest_subsconv_rbm_largegrid_23_r2391','130511_svm_disttest_subsconv_rbm_largegrid_24_r2391','130513_svm_disttest_subsconv_rbm_largegrid_25_r2391'};
+%folders = {folders_win1{:}, folders_win2{:}};
+
+features = [];
+show = 1;
+
+if nargin == 0
+    dirin{1} = './';
+end
+
+global comparison;
+global comparison_ids;
+     
+newout = [];
+thisdir = pwd;
+% loop through al lthe result directories and 
+for diri = 1:numel(dirin)
+
+    % ---
+    % go to directory and locate file
+    % ---
+    cd(dirin{diri});
+
+    u = dir();
+    u = {u.name};
+    [idx, strpos] = substrcellfind(u, '_finalresults.mat', 1);
+    
+    if numel(idx) < 1
+        error 'This directory contains no valid test data';
+    end
+    
+    % just one or more tests in this folder?
+    if exist('file','var') && isnumeric(file)
+        cprint(1, 'loading one result file');
+        file = u{idx(file)};
+        data = load(file);
+        sappend(out,data.out);
+    else
+        for filei = 1:numel(idx)
+            cprint(1, 'loading result file %i of %i',filei, numel(idx));
+            file = u{idx(filei)};
+            data = load(file);
+            newout = sappend(newout,data.out);
+        end
+    end
+    % reset act directory
+    cd(thisdir);
+end
+
+% ---
+% filter C values!
+% ---
+allcs = zeros(numel(newout),1);
+for i=1:numel(newout)
+    allcs(i) = newout(i).trainparams.C;
+end
+valididx = find(allcs == 1); % select C!
+newout = newout(valididx);
+
+% ---
+% filter according to training parameter deltafun_params(windows)
+% ---
+wind = cell(numel(newout),1);
+for i=1:numel(newout)
+    wind{i} = cell2str(newout(i).trainparams.deltafun_params);
+end
+windu = unique(wind);
+
+% save the combined out
+newout2 = newout;
+
+% do the loop as in write_mat_results_ISMIR13RBM
+for wi=1:numel(windu)
+    newout = newout2(strcellfind(wind, windu{wi},1));
+    
+    % bundle all datasets
+    fout = sameparamsubset(newout, 'dataset','');
+    out = [];
+    for ci=1:numel(fout)
+        filteredout = fout{ci};
+
+        ok_test = zeros(2, numel(filteredout));
+        ok_train =  zeros(2, numel(filteredout));
+        ok_config = [];
+
+
+        tmpout = filteredout(1);
+        % cycle over all test sets and get new means
+        for i=1:numel(filteredout)
+            ok_test(:,i) = filteredout(i).mean_ok_test;
+            ok_train(:,i) = filteredout(i).mean_ok_train;
+        end
+
+        % save the stuff
+        tmpout.mean_ok_test = mean(ok_test,2);
+        tmpout.var_ok_test = var(ok_test,0,2);
+        tmpout.mean_ok_train = mean(ok_train,2);
+        tmpout.var_ok_train = var(ok_train,0,2);
+
+        tmpout.ok_test = ok_test;
+        tmpout.ok_train = ok_train;
+
+        % put it in output structure
+        out = sappend(out,tmpout);
+    end
+
+%     % ---
+%     % show results
+%     % ---
+%     if numel([out.mean_ok_test]) > 1 && show
+% 
+%         % plot means  % plot std = sqrt(var) % plot training results
+%         figure;
+%         boxplot([out.mean_ok_test], sqrt([out.var_ok_test]), [out.mean_ok_train]);
+%         title (sprintf('Performance for all configs'));
+%     end
+
+    % --- 
+    % write max. test/train success
+    % ---
+    mean_ok_train = [out.mean_ok_train];
+    [val, idx] = max(mean_ok_train(1,:));
+    if show
+        fprintf(' --- Maximal train set success for %s: nr. %d, %3.2f percent, test result %3.2f percent. --- \n', windu{wi}, idx, val * 100,out(idx).mean_ok_test(1,:)*100)
+    end
+
+end
+
+end
+
+function [out, param_hash,idx] = sameparamsubset(in, ignoret,ignoref)
+    % ---
+    % build index of all existing configurations
+    % ---
+    param_hash = cell(numel(in),1);
+    for i=1:numel(in)
+        params = struct('trainparams',in(i).trainparams, ...
+                        'fparams',in(i).fparams);
+
+        % remove the dataset param
+        if ~isempty(ignoret)
+            params.trainparams = rmfield(params.trainparams,ignoret);
+        end
+        if ~isempty(ignoref)
+            params.fparams = rmfield(params.fparams,ignoref);
+        end
+
+        phash = hash(xml_format(params),'md5');          
+        param_hash{i} = phash;
+    end
+
+    % ---
+    %  recombine the data for different datasets!
+    % ---
+    cvals = unique(param_hash);
+
+    out = {};
+    for ci=1:numel(cvals)
+        idx{ci} = strcellfind(param_hash,cvals(ci),1);
+        out{ci} = in(idx{ci});
+    end
+
+end
+
+function boxplot(mean, std, train);
+
+    bar([train; mean]', 1.5);
+    hold on;
+    errorbar(1:size(mean,2), mean(1,:), std(1,:),'.');
+%     plot(train,'rO');
+    colormap(spring);
+    axis([0 size(mean,2)+1 max(0, min(min([train mean] - 0.1))) max(max([train mean] + 0.1))]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/svm_light/svmlight_wrapper.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+function [A, diag] = svmlight_wrapper(X, Ytrain, trainparams)
+% wrapper to make ITML accessible via a general interface
+
+% define model file
+modelfile = 'tmp_model.dat';
+% define constraints file
+trainfile = 'tmp_train.dat';
+
+% ---
+% include weighting from Y
+% ---
+if isfield(trainparams,'weighted') && trainparams.weighted
+    if trainparams.weighted > 1
+        
+        % ---
+        % NOTE: this is to maintain a tradeoff between weighting 
+        % and space usage :
+        % 
+        % scale the rating if the "weighted" parameter 
+        % gives a maximum weight
+        % 
+        % TODO: try logarithmic weight scaling
+        % ---
+        Ytrain = scale_ratings(Ytrain, trainparams.weighted);
+    end
+    
+    % ---
+    % get squared pointwise distance for labeled features
+    % ---
+    if isfield(trainparams,'deltafun')
+        [lhs, rhs, c] = get_svmlight_inequalities_from_ranking(Ytrain, X, str2func(trainparams.deltafun), trainparams.deltafun_params);
+    else
+        [lhs, rhs, c] = get_svmlight_inequalities_from_ranking(Ytrain, X);
+    end
+    
+    % save to data file to disk;
+    success = save_svmlight_inequalities(lhs, rhs, c, trainfile);
+else
+    % ---
+    % get squared pointwise distance for labeled features
+    % ---
+    if isfield(trainparams,'deltafun')
+        [lhs, rhs, dim] = get_svmlight_inequalities_from_ranking(Ytrain, X, str2func(trainparams.deltafun), trainparams.deltafun_params);
+    else
+        [lhs, rhs, dim] = get_svmlight_inequalities_from_ranking(Ytrain, X);
+    end
+    success = save_svmlight_inequalities(lhs, rhs, trainfile);
+
+end
+
+if ~success
+    error 'cannot write svm training file'
+end
+
+% call svmlight solver
+% D = dos(sprintf('svm_learn -z o -c %d %s %s', C, trainfile, modelfile));
+[diag, ~] = evalc('dos(sprintf(''svm_learn -z o -c %d %s %s'', trainparams.C, trainfile, modelfile));');
+
+% Strip some dots from the display
+diag = strrep(diag,'.......','');
+cprint(2, diag)
+
+% ---
+% get dual weight vector
+% TODO: check whether this the actual w in Schultz2003
+% ---
+w = svmlight2weight(modelfile);
+
+% prolong w to feature dimension
+w = [w; zeros(dim - numel(w),1)];
+
+% ---
+% matrix from weights
+% ---
+A = spdiags(w, 0, numel(w), numel(w));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/test_generic_display_param_influence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,238 @@
+function stats = test_generic_display_param_influence(results, show)
+% returns the mean accuracy influence of each feature and training parameter 
+%
+% the influence is measured by comparing the mean 
+% achieved accuracy for all tries with each specific 
+% parameter being constant
+% 
+% TODO: evaluate how the comparisons of all configuration
+% tuples twith just the specific analysed parameter 
+% changing differ from the above approach
+
+% get statistics for feature parameters
+stats.fparams = gen_param_influence(results, 'fparams');
+
+% get statistics for feature parameters
+if isfield(results, 'trainparams')
+    
+    stats.trainparams = gen_param_influence(results, 'trainparams');
+    
+    % the following case is for backwards compability
+elseif isfield(results, 'mlrparams')
+    
+    stats.trainparams = gen_param_influence(results, 'mlrparams');
+end
+
+if show
+    % display results
+
+    if ~isempty(stats.fparams)
+        figure;
+    %    subplot(2,1,1);
+        display_param_influence(stats.fparams);
+    end
+
+    if ~isempty(stats.trainparams)
+        figure;
+    %    subplot(2,1,2);
+        display_param_influence(stats.trainparams);
+    end
+end
+
+end
+
+% --- 
+% gen_param_influence
+% ---
+function stats = gen_param_influence(results, paramname)
+% generates statistics given results and parameter type as string. 
+
+% get individual fields of this parameter set
+ptypes = fieldnames(results(1).(paramname));
+
+for i = 1:numel(ptypes)
+    % ---
+    % get all individual configurations of this parameter.
+    % ---
+    allvals = [results.(paramname)];
+    
+    % take care of string args
+    if ~ischar(allvals(1).(ptypes{i}))
+        if ~iscell(allvals(1).(ptypes{i}))
+            
+            % parameter array of chars 
+            allvals = [allvals.(ptypes{i})];
+        else
+            % complex parameter array of cells 
+            for j=1:numel(allvals)
+                tmpvals{j} = cell2str(allvals(j).(ptypes{i}));
+            end
+            allvals = tmpvals;
+        end
+    else
+        % parameter array of numbers 
+        allvals = {allvals.(ptypes{i})};
+    end
+    
+    % save using original parameter name
+    tmp = param_influence(results, allvals);
+    
+    if ~isempty(tmp)
+        stats.(ptypes{i}) = tmp;
+    end   
+end
+
+if ~exist('stats','var')
+    stats = [];
+end
+
+end
+
+
+% --- 
+% param_influence
+% ---
+function out = param_influence(results, allvals)
+% give the influence (given results) for the parameter settings
+% given in allvals.
+%
+% numel(results) = numel(allvals)
+
+    % ---
+    % get all different settings of this parameter.
+    % NOTE: this might also work results-of the box for strings.
+    % not tested, below has to be changed ot cell / matrix notations
+    % ---
+    entries = unique(allvals);
+    
+    % just calculate for params with more than one option
+    if numel(entries) < 2 || ischar(entries)
+        
+        out = [];
+        return;
+    end
+    
+    % calculate statstics for this fixed parameter
+    for j = 1:numel(entries)
+        
+        % care for string parameters
+        if ~(iscell(allvals) && ischar(allvals{1}))
+            valid_idx = (allvals == entries(j));
+            
+            % mean_ok_test
+            valid_ids = find(valid_idx);
+        else
+            valid_ids = strcellfind(allvals, entries{j}, 1);
+        end
+        
+        % ---
+        % get the relevant statistics over the variations
+        % of the further parameters
+        % ---
+        mean_ok_testval = [];
+        for i = 1:numel(valid_ids)
+             mean_ok_testval = [mean_ok_testval results(valid_ids(i)).mean_ok_test(1,:)];
+        end
+
+        [ma,maidx] = max(mean_ok_testval);
+        [mi,miidx] = min(mean_ok_testval);
+        [me] = mean(mean_ok_testval);
+        mean_ok_test(j) = struct('max',ma , ...
+                            'max_idx',valid_ids(maidx) , ...
+                            'min',mi , ...
+                            'min_idx',valid_ids(miidx) , ...
+                            'mean',me);
+                        
+        % ---
+        % get the training statistics over the variations
+        % of the further parameters
+        % ---
+        mean_ok_trainval = [];
+        for i = 1:numel(valid_ids)
+             mean_ok_trainval = [mean_ok_trainval results(valid_ids(i)).mean_ok_train(1,:)];
+        end
+
+        [ma,maidx] = max(mean_ok_trainval);
+        % ---
+        % NOTE :this allowed for accesment of improvement by RBM selection
+%         warning testing random idx instead of best one 
+%         maidx = max(1, round(rand(1)* numel(valid_ids)));
+%       % ---
+
+        [mi,miidx] = min(mean_ok_trainval);
+        [me] = mean(mean_ok_trainval);
+        mean_ok_train(j) = struct('max',ma , ...
+                            'max_idx',valid_ids(maidx) , ...
+                            'min',mi , ...
+                            'min_idx',valid_ids(miidx) , ...
+                            'mean',me);
+    end
+    
+    % ---
+    % get the statistics over the different values 
+    % this parameter can hold
+    %
+    % CAVE/TODO: the idx references are relative to valid_idx
+    % ---
+    [best, absolute.best_idx] = max([mean_ok_test.max]);
+    [worst, absolute.worst_idx] = min([mean_ok_test.max]);
+    
+    % ---
+    % get differences:
+    difference.max = max([mean_ok_test.max]) - min([mean_ok_test.max]);
+    
+    % format output
+    out.entries = entries;
+    out.mean_ok_test = mean_ok_test;
+    out.mean_ok_train = mean_ok_train;
+    out.difference = difference;
+    out.absolute = absolute;
+end
+    
+
+% --- 
+% display
+% ---
+function a = display_param_influence(stats)
+
+if isempty(stats)
+    return;
+end
+
+ptypes = fieldnames(stats);
+
+dmean = [];
+dmax = [];
+best_val = {};
+for i = 1:numel(ptypes)
+    
+    % serialise the statistics
+%    dmean = [dmean stats.(ptypes{i}).difference.mean];
+     dmax = [dmax stats.(ptypes{i}).difference.max];
+    best_val = {best_val{:} stats.(ptypes{i}).entries( ...
+        stats.(ptypes{i}).absolute.best_idx) };
+    
+    % take care of string args
+    if isnumeric(best_val{i})
+        lbl{i} = sprintf('%5.2f' ,best_val{i});
+    else
+        lbl{i} = best_val{i};
+    end
+end
+
+
+bar([dmax]'* 100);
+colormap(1-spring);
+% legend({'maximal effect on mean correctness'})
+xlabel('effect on max. correctness for best + worst case of other parameters');
+ylabel('correctness (0-100%)');
+a = gca;
+set(a,'XTick', 1:numel(ptypes), ...
+    'XTickLabel', ptypes);
+
+% display best param results
+for i = 1:numel(ptypes)
+    text(i,0,lbl{i}, 'color','k');
+end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/test_generic_display_results.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,209 @@
+function [out, stats, features, individual] = test_generic_display_results(file, get_features, show)
+% [out, stats] = test_generic_display_results([file], get_features)
+% 
+% [out, stats, features, individual] = test_generic_display_results([file], get_features)
+% 
+% displays the finalresults mat file and enables 
+% further analysis and duiagnostics of the individual runs
+
+features = [];
+
+if nargin < 3
+    show = 1;
+end
+if nargin < 2
+    get_features = 1;
+end
+
+global comparison;
+global comparison_ids;
+        
+if nargin < 1 || isempty(file) || isnumeric(file)
+    u = dir();
+    u = {u.name};
+    [idx, strpos] = substrcellfind(u, '_finalresults.mat', 1);
+    
+    if numel(idx) < 1
+        error 'This directory contains no valid test data';
+    end
+    
+    if exist('file','var') && isnumeric(file)
+        file = u{idx(file)};
+    else
+        if numel(idx) > 1
+            file = u{idx(ask_dataset())};
+        else
+            file = u{idx(1)};
+        end
+    end
+end
+
+
+% ---
+% LOAD THE RESULT DATA
+% We have:
+% Y
+% out.fparams
+%     trainparams
+%     dataPartition
+%     mean_ok_test
+%     var_ok_test
+%     mean_ok_train
+% ---
+load(file);
+
+% compability
+if isfield(out, 'mlrparams')
+    for i = 1:numel(out)
+        out(i).trainparams = out(i).mlrparams;
+    end
+end
+
+
+% ---
+% % get statistics for feature parameters
+% Visualise the accuracy and variance
+% ---
+if isfield(out, 'inctrain') && show
+    for i = 1:numel(out)
+        
+       figure;
+       boxplot([out(i).inctrain.mean_ok_test], sqrt([out(i).inctrain.var_ok_test]), [out(i).inctrain.mean_ok_train]);
+       set(gca,'XTick',1:numel(out(i).inctrain.trainfrac), ...
+        'XTickLabel', out(i).inctrain.trainfrac* 100);
+
+       xlabel ('fraction of training data');
+       title (sprintf('increasing training size test, config %d',i));
+       legend('train', 'train weighted', 'test', 'test weighted');
+       
+    end
+end
+
+
+if numel([out.mean_ok_test]) > 1 && show
+    
+    % plot means  % plot std = sqrt(var) % plot training results
+    figure;
+    boxplot([out.mean_ok_test], sqrt([out.var_ok_test]), [out.mean_ok_train]);
+    title (sprintf('Performance for all configs'));
+end
+    
+    
+% --- 
+% write max. test success
+% ---
+    mean_ok_test = [out.mean_ok_test];
+    [val, idx] = max(mean_ok_test(1,:));
+if show
+    fprintf(' --- Maximal test set success: nr. %d, %3.2f percent. --- \n', idx, val * 100)
+end
+
+% ---
+% display parameter statistics
+% ---
+stats = test_generic_display_param_influence(out, show);
+
+
+if nargout < 3 
+    return; 
+end
+% ---
+% display statistics and get features
+%  for run with best test success
+% ---
+[resfile, featfile] = get_res_filename(out, idx);
+
+% ---
+% import features:
+% 1. reset databse
+% 2. import features
+% 3. assign to clip ids as in ranking
+% ---
+if get_features
+    type = MTTAudioFeatureDBgen.import_type(featfile);
+    db_name = MTTAudioFeatureDBgen.db_name(type);
+    eval(sprintf('global %s', db_name));
+    eval(sprintf('%s.reset();', db_name));
+    eval(sprintf('features = %s.import(featfile);', db_name));
+
+    if isfield(out,'clip_ids')
+        clips = MTTClip(out(1).clip_ids);
+        features = clips.features(type);
+    end
+end
+
+% ---
+% Display Metric Stats
+% tmp = test_mlr_display_metric_stats(individual.out, individual.diag, features);
+% ---
+
+if nargout < 4 
+    return; 
+end
+individual = load(resfile);
+for i = 1:numel(out)
+ 
+        [resfile, featfile] = get_res_filename(out, i);
+        
+        if get_features
+            % reset db and load testing features
+            eval(sprintf('global %s', db_name));
+            eval(sprintf('%s.reset();', db_name));
+            eval(sprintf('%s.import(featfile);', db_name));
+        end
+    
+        % load individual results
+        if i == 1;
+            
+            individual = load(resfile);
+        else
+            
+            individual(i) = load(resfile);
+        end
+end
+end
+
+function out = ask_dataset()
+% ---
+% displays the parameters of the datasets, 
+% and asks for the right one to display
+% ---
+clc;
+u = dir();
+u = {u.name};
+[idx, strpos] = substrcellfind(u, '_params.mat', 1);
+
+for i = 1:numel(idx)
+    file = u{idx(i)};
+    fprintf('------------ Dataset nr. %d --------------\n',i);
+    fprintf('Filename: %s\n',file);
+    type(file);
+end
+
+out = (input('Please choose the dataset number: '));
+end
+
+
+function [resfile, featfile] = get_res_filename(out, i)
+% get filename given test results and index
+
+    paramhash = hash(xml_format(out(i).fparams),'MD5');
+    
+    paramhash_mlr = hash(xml_format(out(i).trainparams),'MD5');
+
+    featfile = sprintf('runlog_%s_feat.mat', paramhash);
+
+    resfile = sprintf('runlog_%s.%s_results.mat',...
+            paramhash, paramhash_mlr);
+end
+
+
+function boxplot(mean, std, train);
+
+    bar([train; mean]', 1.5);
+    hold on;
+    errorbar(1:size(mean,2), mean(1,:), std(1,:),'.');
+%     plot(train,'rO');
+    colormap(spring);
+    axis([0 size(mean,2)+1 max(0, min(min([train mean] - 0.1))) max(max([train mean] + 0.1))]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/test_generic_display_results_absviolated.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,99 @@
+function out = test_generic_display_results_absviolated(file)
+% out = test_generic_display_results_absviolated(file) 
+%
+% displays the finalresults mat file and enables 
+% further analysis and duiagnostics of the individual runs
+
+global db_MTTAudioFeatureSlaney08;
+global db_magnamixedfeat_genrebasicsm;
+global db_MTTMixedFeatureGenreBasicSmPCA;
+
+
+global comparison;
+global comparison_ids;
+        
+if nargin < 1 || isempty(file) || isnumeric(file)
+    u = dir();
+    u = {u.name};
+    [idx, strpos] = substrcellfind(u, '_finalresults.mat', 1);
+    
+    if exist('file','var') && isnumeric(file)
+        file = u{idx(file)};
+    else
+        file = u{idx(1)};
+    end
+end
+
+load(file);
+
+% ---
+% % get statistics for feature parameters
+% Visualise the accuracy and variance
+% ---
+if isfield(out, 'inctrain')
+    for i = 1:numel(out)
+        
+        % ---
+        % get training and test sample sizes
+        % ---
+        nData = [];
+        n_train_data = zeros(1,numel(out(i).inctrain.dataPartition));
+        n_test_data = zeros(1,numel(out(i).inctrain.dataPartition));
+        for j = 1:numel(out(i).inctrain.dataPartition)
+            n_train_data(j) = mean(out(i).inctrain.dataPartition(j).TrainSize);
+            n_test_data(j) = mean(out(i).inctrain.dataPartition(j).TestSize);
+        end
+        
+        % ---
+        % get lost percentages
+        % ---
+        mean_lost_test = 1 - [out(i).inctrain.mean_ok_test];
+        mean_lost_test = mean_lost_test(1,:).* n_test_data;
+        
+        var_ok_test = sqrt([out(i).inctrain.var_ok_test]);
+        
+        mean_lost_train = 1 - [out(i).inctrain.mean_ok_train];
+        mean_lost_train = mean_lost_train(1,:).* n_train_data;
+        
+        % plot test results
+        figure;
+        subplot(2,1,1)
+        plot(n_train_data, mean_lost_test,'r');
+        hold;
+        % plot training results
+        plot(n_train_data, mean_lost_train,'m');
+        
+        xlabel ('# training constraints');
+        ylabel ('# constraints violated');
+        legend ('test','training');
+        
+        plot(n_train_data, mean_lost_test + var_ok_test(1,:).* n_test_data,'r:');
+        plot(n_train_data, mean_lost_test - (var_ok_test(1,:).* n_test_data),'r:');
+        
+        % ---
+        % get percentage of unknown data examples learnt
+        % ---
+        lost_test_not_in_train = mean_lost_test - mean_lost_train;
+        ntest_not_in_train = n_test_data - n_train_data;
+        
+        lost_test_not_in_train = lost_test_not_in_train ./ ntest_not_in_train;
+    
+        lost_test_not_in_train(isnan(lost_test_not_in_train)) = 0;
+        
+        subplot(2,1,2)
+        plot(n_train_data, lost_test_not_in_train);
+        
+        xlabel ('# training constraints');
+        ylabel ('% unknown constraints violated');
+    end
+end
+
+   
+% --- 
+% write max. training success
+% ---
+mean_ok_test = [out.mean_ok_test];
+[val, idx] = max(mean_ok_test(1,:));
+fprintf(' --- Maximal training success: nr. %d, %3.2f percent. --- \n', idx, val * 100)
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/tests_evals/test_generic_features_parameters_crossval.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,228 @@
+function out = test_generic_features_parameters_crossval...
+    (fparams_all, trainparams_all, trainfun, featuretype)
+% 
+% this is a special function designed for the ISMIR 2012 
+% publication. A fixed and partitioned similarity dataset is used,
+% and the clip set as well as the features are SPECIFICALLY SELECTED
+% to each combination of training and test sets.
+
+% svn hook   
+my_revision = str2double(substr('$Rev$',  5, -1));
+[ST,I] = dbstack();
+testscript = ST(end).name;
+
+global globalvars;
+global comparison_ids;
+global comparison_invids;
+
+eval(sprintf('global %s', MTTAudioFeatureDBgen.db_name(featuretype)));
+
+% ---
+% get all combinations resulting from the above parameter set 
+% descriptions
+% ---
+fparams = param_combinations(fparams_all);
+
+trainparams = param_combinations(trainparams_all);
+
+% ---
+% the clips: sorted by comparison_id
+%
+% Now the clip type can be specified in the first training set
+% ---
+tmp_simdata = load(trainparams(1).dataset);
+if isfield(tmp_simdata, 'comparison_ids');
+    comparison_ids = tmp_simdata.comparison_ids;
+    %comparison_invids = tmp_simdata.comparison_invids;
+    clip_type = tmp_simdata.clip_type;
+else
+    load ('db.mat', 'comparison','comparison_ids','comparison_names');
+   
+	clip_type = 'MTTClip';
+end
+comparison_invids = sparse(comparison_ids,1,[1:numel(comparison_ids)]);
+clips = feval(clip_type,comparison_ids);
+
+% ---
+% provide some timing information
+% ---
+nruns = numel(fparams);
+tatic = [];
+tatoc = [];
+ftoc = [];
+mlrtic = [];
+mlrtoc = [];
+runs = 0;
+
+res = [];
+% TEST
+for i = 1:numel(fparams)
+
+    % TIMING start
+    runs = runs + 1;
+    tatic(end+1) = cputime();
+    
+    % warning ('disabled feature cache reset');
+    MTTAudioFeatureDBgen.reset_feature_dbs('exclude',{'db_magnaaudiofeat'});
+    eval('%s.reset;', MTTAudioFeatureDBgen.db_name(featuretype));
+    
+    % extract features 
+    try
+        % ---
+        % try loading old features with the same parameter hash.
+        % we use the md5 hash to distinguish between features
+        % ---
+        %paramhash = MTTAudioFeature.param_hash(featuretype, fparams(i));
+        %featfile = sprintf('runlog_%s_feat.mat', paramhash);
+        %if exist(featfile,'file') == 2
+        %   eval(sprintf('%s.import(featfile);', MTTAudioFeatureDBgen.db_name(featuretype)));
+        
+        % load db
+        paramhash=eval(sprintf('%s.load(featuretype, fparams(i), clips);', MTTAudioFeatureDBgen.db_name(featuretype)));
+        paramhash=substr(paramhash,  0, -4);
+        if ~isempty(paramhash)
+            % ---
+            % Here, we make sure the clips are 
+            % associated to the feature values
+            % ---
+            features = clips.features(featuretype, fparams(i));
+            X = features.vector();
+            
+        else
+            % ---
+            % we extract the mixed features, but leave the option of 
+            % using no tags
+            % ---
+            features = clips.features(featuretype, fparams(i));
+            features.define_global_transform();
+            
+            % get the feature vector
+            X = features.vector();
+            
+%             % save features with specific filename to disc
+%             xml_save(sprintf('runlog_%s_param.xml', paramhash), fparams(i));
+%             features.saveto(featfile);
+
+            paramhash=eval(sprintf('%s.save();', MTTAudioFeatureDBgen.db_name(featuretype)));
+            paramhash=substr(paramhash,  0, -4);
+        end
+        
+        
+        % TIMING
+        ftoc(end+1) = cputime - tatic(end);
+        fprintf('Got features. took %2.2f minutes\n', ftoc(end) / 60);
+    catch err
+        
+        print_error(err);
+       
+        % ---
+        % TODO: save feature configuration and indicate faliure
+        % ---
+        if ~exist('paramhash')
+            paramhash = hash(xml_format(fparams(i)),'MD5');
+        end
+        xml_save(sprintf('runlog_%s_param.xml', paramhash), fparams(i));
+        xml_save(sprintf('runlog_%s_err.xml', paramhash), print_error(err));
+        
+        continue;
+    end
+
+       
+    % skip empty feature set;
+    if isempty(X)
+        continue;
+    end
+    % iterate over trainparams
+    for j = 1:numel(trainparams)
+        
+        % TIMING
+        mlrtic(end+1) = cputime;
+        paramhash_mlr = hash(xml_format(trainparams(j)),'MD5');
+        
+        % ---
+        % Note: here we load the similarity data.
+        %       this data is trunated if inctrain
+        % ---
+        simdata = load(trainparams(j).dataset);
+        if isfield(trainparams(j),'inctrain') && (trainparams(j).inctrain == 0)
+            
+            simdata.partBinTrn = simdata.partBinTrn(:,end);
+            
+            if isfield(simdata, 'partBinNoTrn')
+                simdata.partBinNoTrn = simdata.partBinNoTrn(:,end);
+            end
+        end
+        
+        if isfield(trainparams(j),'notintrain') && (trainparams(j).notintrain == 0)
+            
+            if isfield(simdata, 'partBinNoTrn')
+                simdata = rmfield(simdata, 'partBinNoTrn');
+            end    
+        end
+        
+        % ---
+        % NOTE: THIS IS TRAINING
+        % call training function
+        % ---
+        [tmp] = do_test_rounds(trainfun, X, simdata, trainparams(j), fparams(i),...
+            paramhash, paramhash_mlr, clips);
+        
+        tmp.finfo = features(1).data.info;
+        tmp.fparams = features(1).my_params;
+        tmp.fparamhash = paramhash;
+        tmp.script = testscript;
+ 
+        % TIMING 
+        mlrtoc(end+1) = cputime - mlrtic(end);
+        tmp.timeused = mlrtoc(end);
+        
+        % save result to result struct;
+        if ~isempty(tmp)
+            if isempty(res)
+                
+                res = tmp;
+            else
+                
+                res(end+1) = tmp;
+            end
+            
+            if size(tmp.mean_ok_test,1) == 2
+                maxperf = max(max(tmp.mean_ok_test(1,:)));
+            else
+                maxperf = max(max(tmp.mean_ok_test));
+            end
+            fprintf('Learned something: %2.2f perc. Took %2.2f minutes \n',...
+                 maxperf * 100, mlrtoc(end) / 60 );
+            pause(0.5);
+        else
+            warning('Learned nothing \n');
+        end
+        
+        % save output
+        out = res;
+        
+        % save final results
+        save(sprintf('runlog_%s_%s_finalresults.mat',...
+                hash(xml_format(fparams),'MD5'),...
+                hash(xml_format(trainparams),'MD5')...
+                ), 'out');
+
+        xml_save(sprintf('runlog_%s_%s_params.mat',...
+                hash(xml_format(fparams),'MD5'),...
+                hash(xml_format(trainparams),'MD5')...
+                ), struct('fparams', fparams_all, 'trainparams', trainparams_all) );
+
+    end
+    
+    % TIMING
+    clc;
+    tatoc(end+1) = cputime - tatic(end);
+    cprint(0,'%3.2f percent done, %2.2fh spent, %2.2fh to go. \n mlr / feature: %3.3f \n',...
+        (runs / nruns) *100 , sum(tatoc) / 3600,...
+        ((sum(tatoc) / runs) * (nruns - runs)) / 3600, mean(mlrtoc) / mean(ftoc) );
+     cprint(0,'\nGo get a coffee, the next round will take %3.0f minutes \n', ...
+                (mean(mlrtoc) * numel(trainparams) + mean(ftoc)) / 60);
+end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/xml_parse_mtt.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,135 @@
+function features = xml_parse_mtt(file)
+% features = xml_parse_mtt(file)
+% 
+% parses the magnatagatune xml file to retrieve the audio
+% analysis results. The file isexpected to use the deprecated 
+% EchoNest XML format
+%
+% time always travels an the horizontal axis
+
+% ---
+% TODO: Add Error checking to certan tags as chroma number, 
+%  loudness max etc.
+% ---
+
+fdata = fileread(file);
+try
+    % ---
+    % TODO: check for other than the p-code exceptions
+    % ---
+    
+    data = xml_parseany(fdata);
+catch exception
+end
+%% ------------------------------------------------------------------------
+% ---
+% copy general track data
+% ---
+
+fields = fieldnames(data.track{1}.ATTRIBUTE);
+for i = 1:length(fields)
+    features.(fields{i}) = str2double(data.track{1}.ATTRIBUTE.(fields{i}));
+end
+
+%% ------------------------------------------------------------------------
+% ---
+% get harmonic analysis. this is stored in segments
+% ---
+dsegments = data.track{1}.segments{1}.segment;
+
+for i = 1:numel(dsegments)
+    
+    % get start and duration
+    segments(i).start = str2double(dsegments{i}.ATTRIBUTE.start);
+    segments(i).duration = str2double(dsegments{i}.ATTRIBUTE.duration);
+    
+    % ---
+    % NOTE: for the chroma and mfcc features, we assume that the classes
+    %  are always saved and parsed in correct order, thus we can afford to 
+    %  refrain from saving the class number with the class
+    % ---
+    
+    % assemble chroma features
+    segments(i).pitches = zeros(12,1);
+    for j = 1:12
+        
+        segments(i).pitches(j) = str2double(...
+            dsegments{i}.pitches{1}.pitch{j}.CONTENT);
+    end
+    
+   % assemble mfcc features;
+    segments(i).timbre = zeros(numel(dsegments{i}.timbre{1}.coeff),1);
+    for j = 1:numel(dsegments{i}.timbre{1}.coeff)
+        
+        segments(i).timbre(j) = str2double(...
+            dsegments{i}.timbre{1}.coeff{j}.CONTENT);
+    end
+    
+    % get loudness measurements in dB and time
+    segments(i).loudness = str2double(...
+        dsegments{i}.loudness{1}.dB{1}.CONTENT);
+    
+    segments(i).loudness_time = str2double(...
+        dsegments{i}.loudness{1}.dB{1}.ATTRIBUTE.time);
+    
+    segments(i).loudness_max = str2double(...
+        dsegments{i}.loudness{1}.dB{2}.CONTENT);
+    
+    segments(i).loudness_max_time = str2double(...
+        dsegments{i}.loudness{1}.dB{2}.ATTRIBUTE.time);
+end
+
+features.segments = segments;
+
+%% ------------------------------------------------------------------------
+% ---
+% get sections
+% ---
+dsections = data.track{1}.sections{1}.section;
+
+secstart = zeros(1,numel(dsections));
+secduration = zeros(1,numel(dsections));
+for i = 1:numel(dsections)
+    sections(i).start = str2double(dsections{i}.ATTRIBUTE.start);
+    sections(i).duration = str2double(dsections{i}.ATTRIBUTE.duration);
+end
+
+features.sections = sections;
+
+%% ------------------------------------------------------------------------
+% ---
+% get beat and rythm data. the metric data is structured 
+% hierarchically, as each bar contains several beats,
+% which contaisn several tatums. 
+% NOTE: Although the metrum and tempo have been evaluated and fixed
+% on a global scale, the number of bars and tatum vary greatly.
+% ---
+dbars = data.track{1}.meter{1}.bar;
+
+for i = 1:numel(dbars)
+    
+    % get bar information
+    bars(i).confidence = str2double(dbars{i}.ATTRIBUTE.conf);
+    for j = 1:numel(dbars{i}.beat)
+        
+        % get beat information
+        bars(i).beat(j).confidence = str2double(dbars{i}.beat{j}.ATTRIBUTE.conf);
+        
+        for k = 1:numel(dbars{i}.beat{j}.tatum)
+            
+            % get tatum information
+            if ~isempty(dbars{i}.beat{j}.tatum{k}.ATTRIBUTE)
+                bars(i).beat(j).tatum(k).time = str2double(dbars{i}.beat{j}.tatum{k}.CONTENT);
+                bars(i).beat(j).tatum(k).confidence = str2double(dbars{i}.beat{j}.tatum{k}.ATTRIBUTE.conf);
+            
+            else 
+                % save empty struct
+                bars(i).beat(j).tatum = struct([]);
+            end
+            
+        end
+    end
+end
+
+features.bars = bars;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/magnatagatune/xml_write_tags.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+% xmloutput_tags 
+
+% Create a sample XML document.
+docNode = com.mathworks.xml.XMLUtils.createDocument... 
+    ('tags')
+docRootNode = docNode.getDocumentElement;
+for i=1:length(annots_descripts)
+    thisElement = docNode.createElement('tagname'); 
+    thisElement.appendChild... 
+        (docNode.createTextNode(annots_descripts{i}(1:end)));
+    docRootNode.appendChild(thisElement);
+end
+%docNode.appendChild(docNode.createComment('this is a comment'));
+
+% Save the sample XML document.
+xmlFileName = ['test','.xml'];
+xmlwrite(xmlFileName,docRootNode);
+edit(xmlFileName);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/startup_music_research.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,96 @@
+% ---
+% startup.m  
+% this shall become the general camir startup
+% ---
+
+% global globalvars;
+
+% use this revision numbers for figures etc!
+% globalvars.camir.revision = str2double(substr('$Rev$',  5, -1));
+% rev = textscan(evalc('!svnversion'),'%d%s');
+% globalvars.camir.revision = double(rev{1});
+
+globalvars.camir.path = pwd;
+globalvars.camir.revision = camirversion;
+
+clear rev
+globalvars.debug = 0;
+
+% ---
+% load MTT database
+% ---
+global comparison;
+global comparison_ids;
+load ('db.mat', 'comparison','comparison_ids','comparison_names');
+
+
+% ---
+% load MSD database
+% ---            
+global MillionSong MSDsubset
+MillionSong = globalvars.camir.msd.basepath;
+MSDsubset='subset_'; % or '' for full set
+
+globalvars.camir.msd.data_path= [MillionSong,'/data'];
+globalvars.camir.msd.addf_path= [MillionSong,'/AdditionalFiles'];
+globalvars.camir.msd.addf_prefix= [globalvars.camir.msd.addf_path,'/',MSDsubset];
+% Check that we can actually read the dataset
+
+
+warning off MATLAB:class:cannotUpdateClass
+
+% initialize clip and feature databases
+
+global db_MTTClip;
+db_MTTClip = MTTClipDB();
+
+%global db_MSDClip;
+%db_MSDClip = MSDClipDB();
+
+% global db_CASIMIRClip;
+% db_CASIMIRClip = CASIMIRClipDB();
+
+global db_magnaaudiofeat;         
+db_magnaaudiofeat = MTTAudioFeatureDBgen('MTTAudioFeatureRAW');
+
+global db_magnaaudiofeat_basicsm;
+db_magnaaudiofeat_basicsm = MTTAudioFeatureDBgen('MTTAudioFeatureBasicSm');
+
+global db_magnatagfeat_genrebasic;
+db_magnatagfeat_genrebasic = MTTAudioFeatureDBgen('MTTTagFeatureGenreBasic');
+
+global db_magnamixedfeat_genrebasicsm;
+db_magnamixedfeat_genrebasicsm = MTTAudioFeatureDBgen('MTTMixedFeatureGenreBasicSm');
+
+global db_MTTMixedFeatureGenreBasicSmPCA;
+db_MTTMixedFeatureGenreBasicSmPCA = MTTAudioFeatureDBgen('MTTMixedFeatureGenreBasicSmPCA');
+
+global db_MTTAudioFeatureSlaney08;
+db_MTTAudioFeatureSlaney08 =  MTTAudioFeatureDBgen('MTTAudioFeatureSlaney08');
+
+global db_MTTMixedFeatureSlaney08GenreBasicSm;
+db_MTTMixedFeatureSlaney08GenreBasicSm = MTTAudioFeatureDBgen('MTTMixedFeatureSlaney08GenreBasicSm');
+
+global db_MTTMixedFeatureSlaney08GenreBasicSmPCA;
+db_MTTMixedFeatureSlaney08GenreBasicSmPCA  = MTTAudioFeatureDBgen('MTTMixedFeatureSlaney08GenreBasicSmPCA');
+
+global db_MTTMixedFeatureGenreRandom;
+db_MTTMixedFeatureGenreRandom = MTTAudioFeatureDBgen('MTTMixedFeatureGenreRandom');
+
+global db_MTTMixedFeatureStober11Genre;
+db_MTTMixedFeatureStober11Genre = MTTAudioFeatureDBgen('MTTMixedFeatureStober11Genre');
+
+global db_MTTMixedFeatureStober11Slaney08GenreBasicSm;
+db_MTTMixedFeatureStober11Slaney08GenreBasicSm = MTTAudioFeatureDBgen('MTTMixedFeatureStober11Slaney08GenreBasicSm');
+
+global db_MTTMixedFeatureSon;
+db_MTTMixedFeatureSon = MTTAudioFeatureDBgen('MTTMixedFeatureSon');
+
+global db_AudioFeatureRAW;
+db_AudioFeature = MTTAudioFeatureDBgen('AudioFeatureRAW');
+
+%global db_MSDAudioFeatureRAW;
+%db_MSDAudioFeatureRAW = MTTAudioFeatureDBgen('MSDAudioFeatureRAW');
+
+global db_MTTMixedFeatureSonRBM;
+db_MTTMixedFeatureSonRBM = MTTAudioFeatureDBgen('MTTMixedFeatureSonRBM');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/CQueue.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,160 @@
+classdef CQueue < handle
+% CQueue define a queue data strcuture
+% 
+% It likes java.util.Queue, however, it could use CQueue.content() to
+% return all the data (in cells) of the Queue, and it is a litter faster
+% than java's Queue.
+% 
+%   q = CQueue(c); c is a cells, and could be omitted
+%   s.size() return the numble of element
+%   s.isempty() return true when the queue is empty
+%   s.empty() delete all the elements in the queue.
+%   s.push(el) push el to the top of qeueu
+%   s.pop() pop out the the beginning of queue, and return the element
+%   s.front() return the the the beginning element of the qeueu
+%   s.back() return the the the rear element of the qeueu
+%   s.remove() remove all data from the queue
+%   s.content() return all the data of the queue (in the form of a
+%   cells with size [s.size(), 1]
+%   
+% See also CList, CStack
+% Copyright: zhang@zhiqiang.org, 2010.
+% url: http://zhiqiang.org/blog/it/matlab-data-structures.html
+
+    properties (Access = private)
+        buffer      % a cell, to maintain the data
+        beg         % the start position of the queue
+        rear        % the end position of the queue
+                    % the actually data is buffer(beg:rear-1)
+    end
+    
+    properties (Access = public)
+        capacity    % Õ»µÄÈÝÁ¿£¬µ±ÈÝÁ¿²»¹»Ê±£¬ÈÝÁ¿À©³äΪ2±¶¡£
+    end
+    
+    methods
+        function obj = CQueue(c) % ³õʼ»¯
+            if nargin >= 1 && iscell(c)
+                obj.buffer = [c(:); cell(numel(c), 1)];
+                obj.beg = 1;
+                obj.rear = numel(c) + 1;
+                obj.capacity = 2*numel(c);
+            elseif nargin >= 1
+                obj.buffer = cell(100, 1);
+                obj.buffer{1} = c;
+                obj.beg = 1;
+                obj.rear = 2;
+                obj.capacity = 100;                
+            else
+                obj.buffer = cell(100, 1);
+                obj.capacity = 100;
+                obj.beg = 1;
+                obj.rear = 1;
+            end
+        end
+        
+        function s = size(obj) % ¶ÓÁ㤶È
+            if obj.rear >= obj.beg
+                s = obj.rear - obj.beg;
+            else
+                s = obj.rear - obj.beg + obj.capacity;
+            end
+        end
+        
+        function b = isempty(obj)   % return true when the queue is empty
+            b = ~logical(obj.size());
+        end
+        
+        function s = empty(obj) % clear all the data in the queue
+            s = obj.size();
+            obj.beg = 1;
+            obj.rear = 1;
+        end
+        
+        function push(obj, el) % ѹÈëÐÂÔªËص½¶Óβ
+            if obj.size >= obj.capacity - 1
+                sz = obj.size();
+                if obj.rear >= obj.front
+                    obj.buffer(1:sz) = obj.buffer(obj.beg:obj.rear-1);                    
+                else
+                    obj.buffer(1:sz) = obj.buffer([obj.beg:obj.capacity 1:obj.rear-1]);
+                end
+                obj.buffer(sz+1:obj.capacity*2) = cell(obj.capacity*2-sz, 1);
+                obj.capacity = numel(obj.buffer);
+                obj.beg = 1;
+                obj.rear = sz+1;
+            end
+            obj.buffer{obj.rear} = el;
+            obj.rear = mod(obj.rear, obj.capacity) + 1;
+        end
+        
+        function el = front(obj) % ·µ»Ø¶ÓÊ×ÔªËØ
+            if obj.rear ~= obj.beg
+                el = obj.buffer{obj.beg};
+            else
+                el = [];
+                warning('CQueue:NO_DATA', 'try to get data from an empty queue');
+            end
+        end
+        
+        function el = back(obj) % ·µ»Ø¶ÓβԪËØ            
+            
+           if obj.rear == obj.beg
+               el = [];
+               warning('CQueue:NO_DATA', 'try to get data from an empty queue');
+           else
+               if obj.rear == 1
+                   el = obj.buffer{obj.capacity};
+               else
+                   el = obj.buffer{obj.rear - 1};
+               end
+            end
+            
+        end
+        
+        function el = pop(obj) % µ¯³ö¶ÓÊ×ÔªËØ
+            if obj.rear == obj.beg
+                error('CQueue:NO_Data', 'Trying to pop an empty queue');
+            else
+                el = obj.buffer{obj.beg};
+                obj.beg = obj.beg + 1;
+                if obj.beg > obj.capacity, obj.beg = 1; end
+            end             
+        end
+        
+        function remove(obj) % Çå¿Õ¶ÓÁÐ
+            obj.beg = 1;
+            obj.rear = 1;
+        end
+        
+        function display(obj) % ÏÔʾ¶ÓÁÐ
+            if obj.size()
+                if obj.beg <= obj.rear 
+                    for i = obj.beg : obj.rear-1
+                        disp([num2str(i - obj.beg + 1) '-th element of the stack:']);
+                        disp(obj.buffer{i});
+                    end
+                else
+                    for i = obj.beg : obj.capacity
+                        disp([num2str(i - obj.beg + 1) '-th element of the stack:']);
+                        disp(obj.buffer{i});
+                    end     
+                    for i = 1 : obj.rear-1
+                        disp([num2str(i + obj.capacity - obj.beg + 1) '-th element of the stack:']);
+                        disp(obj.buffer{i});
+                    end
+                end
+            else
+                disp('The queue is empty');
+            end
+        end
+        
+        function c = content(obj) % È¡³ö¶ÓÁÐÔªËØ
+            if obj.rear >= obj.beg
+                c = obj.buffer(obj.beg:obj.rear-1);                    
+            else
+                c = obj.buffer([obj.beg:obj.capacity 1:obj.rear-1]);
+            end
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/CStack.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,108 @@
+classdef CStack < handle
+% CStack define a stack data strcuture
+% 
+% It likes java.util.Stack, however, it could use CStack.content() to
+% return all the data (in cells) of the Stack, and it is a litter faster
+% than java's Stack.
+% 
+%   s = CStack(c);  c is a cells, and could be omitted
+%   s.size() return the numble of element
+%   s.isempty() return true when the stack is empty
+%   s.empty() delete the content of the stack
+%   s.push(el) push el to the top of stack
+%   s.pop() pop out the top of the stack, and return the element
+%   s.top() return the top element of the stack
+%   s.remove() remove all the elements in the stack
+%   s.content() return all the data of the stack (in the form of a
+%   cells with size [s.size(), 1]
+%   
+% See also CList, CQueue
+%
+% Copyright: zhang@zhiqiang.org, 2010.
+% url: http://zhiqiang.org/blog/it/matlab-data-structures.html
+
+    properties (Access = private)
+        buffer      % Ò»¸öcellÊý×飬±£´æÕ»µÄÊý¾Ý
+        cur         % µ±Ç°ÔªËØλÖÃ, or the length of the stack
+        capacity    % Õ»µÄÈÝÁ¿£¬µ±ÈÝÁ¿²»¹»Ê±£¬ÈÝÁ¿À©³äΪ2±¶¡£
+    end
+    
+    methods
+        function obj = CStack(c)
+            if nargin >= 1 && iscell(c)
+                obj.buffer = c(:);
+                obj.cur = numel(c);
+                obj.capacity = obj.cur;
+            elseif nargin >= 1
+                obj.buffer = cell(100, 1);
+                obj.cur = 1;
+                obj.capacity =100;
+                obj.buffer{1} = c;
+            else
+                obj.buffer = cell(100, 1);
+                obj.capacity = 100;
+                obj.cur = 0;
+            end
+        end
+        
+        function s = size(obj)
+            s = obj.cur;
+        end
+        
+        function remove(obj)
+            obj.cur = 0;
+        end
+        
+        function b = empty(obj)
+            b = obj.cur;
+            obj.cur = 0;
+        end
+        
+        function b = isempty(obj)            
+            b = ~logical(obj.cur);
+        end
+
+        function push(obj, el)
+            if obj.cur >= obj.capacity
+                obj.buffer(obj.capacity+1:2*obj.capacity) = cell(obj.capacity, 1);
+                obj.capacity = 2*obj.capacity;
+            end
+            obj.cur = obj.cur + 1;
+            obj.buffer{obj.cur} = el;
+        end
+        
+        function el = top(obj)
+            if obj.cur == 0
+                el = [];
+                warning('CStack:No_Data', 'trying to get top element of an emtpy stack');
+            else
+                el = obj.buffer{obj.cur};
+            end
+        end
+        
+        function el = pop(obj)
+            if obj.cur == 0
+                el = [];
+                warning('CStack:No_Data', 'trying to pop element of an emtpy stack');
+            else
+                el = obj.buffer{obj.cur};
+                obj.cur = obj.cur - 1;
+            end        
+        end
+        
+        function display(obj)
+            if obj.cur
+                for i = 1:obj.cur
+                    disp([num2str(i) '-th element of the stack:']);
+                    disp(obj.buffer{i});
+                end
+            else
+                disp('The stack is empty');
+            end
+        end
+        
+        function c = content(obj)
+            c = obj.buffer(1:obj.cur);
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/DiGraph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,853 @@
+
+% GENERAL GRAPH THEORY CLASS: DiGraph
+%
+% CAVE: Any special application oriented stuff 
+% should be outside here
+
+classdef DiGraph < handle
+    
+properties
+    
+    V = sparse(0,1); % boolean for nodes 
+    Vlbl = {};
+    
+    E = sparse(0,0); % sparse weighted edge graph 
+end
+     
+methods
+
+% ---
+% Constructor
+% ---
+function G = DiGraph(V, E, Vlbl)
+     
+    if nargin == 1
+        if  ~isnumeric(V)
+            
+            G = DiGraph.copy(V);
+        else
+            % build graph from Edge Adjacency Matrix
+            G.V = sparse(find(sum(V + V')) > 0);
+            G.E = V;
+        end
+    end
+    
+    if nargin >= 2 
+        G = DiGraph();
+        
+        if numel(V) ~= max(size(E))
+            error 'wrong dimensions';
+        end
+        
+        % ---
+        % We copy existent nodes and edges 
+        % ---
+        if numel(V) == size(V,2)
+            G.V = V;
+        else
+            G.V = V';
+        end
+        G.E = E;
+        
+        % ---
+        % We copy the labels for existent nodes, 
+        % if supplied.
+        % NOTE: the FIND call is neccessary, as logical indexing
+        % does not work in this case 
+        % TODO: WHY NOT?
+        % ---
+        if (nargin == 3) && ~isempty(Vlbl)
+            G.Vlbl = cell(numel(G.V),1);
+            G.Vlbl(find(G.V)) = Vlbl(find(G.V));
+        end
+        
+    end
+end
+      
+% get list of node ids
+function out = nodes(G)
+    out = find(G.V);
+end
+
+% get list of node ids
+function out = last_node(G)
+    out = find(G.V,1,'last');
+end
+
+function w = edge(G, V1, V2)
+    
+    w = G.E(V1, V2);
+end
+
+% get edge list representation
+function [val, V1, V2] = edges(G, V1)
+    
+    if nargin == 1
+        
+        % get all edges of the graph
+        [V1, V2] = find(G.E);
+   
+        val = zeros(numel(V1), 1);
+        
+        for i = 1:numel(V1)
+            val(i) = G.E(V1(i), V2(i));
+        end
+        
+    elseif nargin == 2
+        
+        % get all edges coming from or entering this node
+        V2 = find(G.E(V1, :));
+        val = G.E(V1, V2);
+        
+        V2 = [ V2 find(G.E(:,V1))'];
+        val = [ val G.E(V2, V1)'];
+    end
+end
+
+% compare two graphs
+function out = eq(a,b)
+    
+    % ---
+    % compare graph stats
+    % necessary
+    % ---
+    if a.order ~= b.order
+        out = false;
+        cprint(3, 'eq: graph node numbers do not match'); 
+        return
+    end
+    
+    if a.num_edges ~= b.num_edges
+        out = false;
+        cprint(3, 'eq: graph edge numbers do not match'); 
+        return
+    end
+    
+    
+    % ---
+    % compare labels and reindex graph b if 
+    % necessary
+    % ---
+    lbla = a.label();
+    lblb = b.label();
+    
+    for i = 1:numel(lbla)
+        if ~isempty(lbla{i})
+            tmpidx = strcellfind(lblb, lbla{i});
+            
+            % check for substring problems
+            for j = 1:numel(tmpidx)
+                if strcmp(lblb{tmpidx(j)}, lbla{i})
+                    idx(i) = tmpidx(j);
+                    break;
+                end
+            end
+        end
+    end
+    
+    % test on found labels
+    num_matching_lbl = sum(idx > 0);
+    if ~isempty(lbla) && (num_matching_lbl < a.order)
+        out = false;
+        cprint(3, 'eq: graph labels do not match'); 
+        return
+    end
+    
+    % ---
+    % reindex edges and nodes: only replace valid indexes
+    % ---
+    val_idx = idx > 0;
+    idx = idx(val_idx);
+
+    bE(val_idx,val_idx) = b.E(idx,idx);
+    bV(val_idx) = b.V(idx);
+    
+    if sum(a.V ~= bV) > 0 
+        out = false;
+        cprint(3, 'eq: nodes do not match'); 
+        return
+    end
+    
+    if sum(sum(a.E ~= bE)) > 0 
+        out = false;
+        cprint(3, 'eq: edges do not match'); 
+        return
+    end
+    
+    % ---
+    % OK, seems these Graphs are the same!!!
+    % ---
+    out = true;
+    
+end
+
+% find node via its label
+function Vid = node(G, label)
+    lbl = G.label();
+    
+    Vid = strcellfind(lbl, label,1);
+end
+
+% add a node
+function add_node(G,V)
+    
+    % set node indicator
+    G.V(V) = 1;
+    
+    G.E(V,V) = 0;
+end
+
+% remove a node
+function remove_node(G,V)
+    
+    % remove node 
+    G.V(V) = 0;
+    
+    % remove all edges
+    G.E(V,:) = 0;
+    G.E(:,V) = 0;
+end
+
+% remove an edge
+function remove_edge(G, V1, V2)
+
+    G.E(V1, V2) = 0;
+end
+
+% add an edge
+function add_edge(G, V1, V2, weight)
+
+    G.add_node(V1);
+	G.add_node(V2);
+    
+    if  G.E(V1,V2) == 0
+
+        % save weight
+        set_edge(G, V1, V2, weight);
+    else
+        
+        join_edge(G, V1, V2, weight)
+    end
+end
+
+% ---
+% implementation of edge joining,
+% to be overwritten for several
+% purposes
+% ---
+function join_edge(G, V1, V2, weight)
+
+    set_edge(G, V1, V2, G.edge(V1, V2) + weight);
+end
+
+% ---
+% sets the edge without considering earlier weights
+% ---
+function set_edge(G, V1, V2, weight)
+    
+    G.E(V1, V2) = weight;
+end
+
+% ---
+% Graph-specific functions
+% ---
+function c = children(G, Vid)
+
+    c = find(G.E(Vid,:) > 0);
+end
+
+function p = parents(G, Vid)
+
+    p = find(G.E(:,Vid) > 0)';
+end
+
+% ---
+% Vertex Degree
+% ---
+function out = degree(G, V)
+    
+    out = sum(G.E(V,:) > 0) + sum(G.E(:,V) > 0);
+end
+
+% ---
+% Vertex Degree
+% ---
+function out = degree_in(G, V)
+    
+    out = sum(G.E(V,:) > 0);
+end
+
+% ---
+% Max Degree In
+% ---
+function out = max_degree_in(G)
+    
+    out = max(sum(G.E > 0, 2));
+end
+
+% ---
+% Vertex Degree
+% ---
+function out = degree_out(G, V)
+    
+    out = sum(G.E(:,V) > 0);
+end
+
+% ---
+% Max Degree In
+% ---
+function out = max_degree_out(G)
+    
+    out = max(sum(G.E > 0, 1));
+end
+
+
+% ---
+% Max Degree
+% ---
+function out = max_degree(G)
+    
+    out = max(sum(G.E > 0, 1) + sum(G.E > 0, 2)');
+end
+
+% ---
+% Max weight
+% ---
+function out = max_weight(G)
+    
+    out = max(max(G.E));
+end
+
+% ---
+% Number of Vertices in Graph
+% ---
+function out = order(G)
+    out = sum(G.V);
+end
+
+% ---
+% Number of Edges in Graph
+% ---
+function out = num_edges(G)
+    out = sum(sum(G.E ~= 0));
+end
+
+% ---
+% Number of Vertices in Graph
+% ---
+function out = cardinality(G)
+    out = order(G);
+end
+
+function Gs = unconnected_subgraph(G)
+    Vtmp = (sum(G.E + G.E') == 0);
+    Etmp = sparse(size(G.E, 1), size(G.E, 1));
+
+    Gs = DiGraph(Vtmp, Etmp, G.label());
+end
+
+% ---
+% return string labels for a (set of) node(S)
+% ---
+function out = label(G, Vid)
+    
+    out = {};
+    if nargin == 1
+        % maybe much faster for whole graph
+        if (numel(G.Vlbl) < G.order() || isempty(G.Vlbl))
+            
+            out = cell(numel(G.V), 1);
+            for i = 1:numel(Vid)
+                out{i} = sprintf('%d', Vid(i));
+            end
+        else
+            out = G.Vlbl;
+        end
+        
+    elseif nargin == 2
+        for i = 1:numel(Vid)
+
+            if (numel(G.Vlbl) < Vid(i)) || isempty(G.Vlbl{Vid(i)})
+                
+                if numel(Vid) > 1
+                    out{i} = sprintf('%d', Vid(i));
+                else
+                    out = sprintf('%d', Vid(i));
+                end
+            else
+                if numel(Vid) > 1
+                    out{i} = G.Vlbl{Vid(i)};
+                else
+                    out = G.Vlbl{Vid(i)};
+                end
+            end
+        end
+    end
+end
+
+
+% -----------------------------------------------------------------
+% Graph theory algorithms
+% ---
+
+
+% ---
+% sets all the main diagonal edges to zero
+% ---
+function remove_cycles_length1(G)
+    
+    for i = G.nodes();
+        G.E(i,i) = 0;
+    end  
+end
+
+
+% ---
+% Returns whether a given graph has cycles or not,
+% using the SCC search
+% ---
+function out = isAcyclic(G)
+     % ---
+     % We get all the sccs in the DiGraph, and 
+     % return true if none of the sccs has more than 
+     % one node
+     % ---
+     
+     % check for self-loops
+     if sum(abs(diag(G.E))) > 0
+         out = 0;
+         return;
+     end
+     
+     [~, s, ~] = strongly_connected_components(G);
+     
+     if max(s) < 2
+         out = 1;
+     else
+         out = 0;
+     end
+end
+
+% ---
+% All SCC's ordered by number of nodes in graph
+% 
+% this should also be able to return 
+% the SCC of just one node
+% ---
+function [Gs, s, id] = strongly_connected_components(G, Vin)
+
+    % marking
+    marked = zeros(size(G.V));
+    
+    % ---
+    % two stacks, 
+    % one: has not been assigned to scc
+    % two: unclear if in same scc
+    % ---
+    stack1 = CStack();
+    stack2 = CStack();
+    
+    % initialise scc ids
+    id = zeros(size(G.V)) - 1;  % assigned scc?
+    idctr = 1;
+        
+    % initialise graph ordering
+    preorder = zeros(G.order, 1);
+    prectr = 0;
+   
+    for v = G.nodes();
+        if ~marked(v)
+          dfs(G, v);
+        end
+    end
+    
+    % ---
+    % create subgraphs (DiGraph here) for sccs
+    % ---
+    if nargin == 1
+        
+        s = zeros(idctr-1,1);
+        for idctr2 = 1:idctr-1
+            Vtmp = (id == idctr2);
+            Emask = sparse(size(G.E, 1), size(G.E, 1));
+            Emask(Vtmp,Vtmp) = 1;
+            Etmp = G.E .* Emask;
+    
+            Gs(idctr2) = DiGraph(Vtmp, Etmp, G.Vlbl);
+            s(idctr2) = Gs(idctr2).order();
+        end
+         
+        % ---
+        % order by number of nodes
+        % ---
+        [s, idx] = sort(s,'descend');
+        Gs = Gs(idx);
+        Gmax = Gs(1);
+        
+    else
+        % ---
+        % get just the scc for the questioned node
+        % ---
+        Vtmp = (id == id(Vin));
+        Emask = sparse(size(G.E, 1), size(G.E, 1));
+        Emask(Vtmp,Vtmp) = 1;
+        Etmp = G.E .* Emask;
+
+        Gs = DiGraph(Vtmp, Etmp);
+        s = Gs.order();
+    end
+
+    % ---
+    % NOTE: THIS IS A NESTED DFS BASED GRAPH ORDERING
+    % ---
+    function dfs(G, v)
+        
+        % mark this node as visited
+        marked(v) = 1;
+        
+        preorder(v) = prectr;
+        prectr = prectr + 1;
+        
+        % push into both stacks
+        stack1.push(v);
+        stack2.push(v);
+        
+        % ---
+        % dfs
+        % ---
+        for w = G.children(v)
+            if ~marked(w)
+                % ---
+                % traverse into dfs if not yet visited
+                % ---
+                dfs(G, w);
+                  
+            elseif id(w) == -1
+                
+                % ---
+                % w has not yet been assigned to a strongly connected
+                % component
+                % ---
+                while ((preorder(stack2.top()) > preorder(w)))
+                    stack2.pop();
+                end
+            end   
+        end
+        
+        % ---
+        % found scc containing v
+        % ---
+        if (stack2.top() == v)
+            stack2.pop();
+            
+            w = -1;
+            while (w ~= v)
+                
+                % ---
+                % collect all the nodes of this scc
+                % ---
+                w = stack1.pop();
+                id(w) = idctr;
+            end
+            idctr = idctr + 1;
+        end
+        
+    end % function dfs 
+end
+
+function [Gs, s, id] = connected_components(G, varargin)
+    % ---
+    % get all connected subgraphs:
+    % ---
+    
+    % make edge matrix undirected
+    G2 = DiGraph(Graph(G));
+    
+    [GsGraph, s, id] = strongly_connected_components(G2, varargin{:});
+    
+    % get the actual subgraps
+    
+    for i =1:numel(GsGraph)
+        Gs(i) = G.subgraph(GsGraph(i).nodes);
+    end
+end
+
+% ---
+% creates new graph just containing the 
+% specified nodes and optionally specified edges
+% nodes can be specified using 
+% a. the binary G.V structure
+% b. or node indices 
+% ---
+function G2 = subgraph(G, V, E)
+    if nargin == 2
+        E = [];
+    end
+    
+    % ---
+    % create new graph as copy ofthe old
+    % ---
+    
+    G2 = feval(class(G), G);
+    
+    % ---
+    % reset nodes and edges
+    % NOTE: we determine the input format first
+    % ---
+    if (max(V) == 1 && numel(V) > 1) || max(V) == 0
+        
+        G2.remove_node(find(~V));
+    else
+        
+        G2.remove_node(setdiff(1:numel(G.V), V));
+    end
+    if ~isempty(E)   
+        G2.E = E;
+    end
+end
+
+% ---
+% joins the information of graph G2 with
+% this GRaph, not duplicating nodes.
+% ---
+function add_graph(G, G2)
+    
+    % determine if symmetric  edges have to be added
+    clas = cat(1, class(G2), superclasses(G2));
+    if strcellfind(clas, 'Graph')
+        add_symm = 1;
+    else
+        add_symm = 0;
+    end
+            
+    % ---
+    % add all nodes and edges in G2
+    % ---
+    for V = G2.nodes();
+        
+        G.add_node(V);
+    end
+    
+    % ---
+    % NOTE / TODO: 
+    % this LABEL inheritance is far too expensive when 
+    % creating many copiesof the same graph
+    % Its also unnessecary for lots of them 
+    % except for debugging :(. 
+    % ---
+    G.Vlbl = cell(1,numel(G2.V));
+    G.Vlbl(G2.nodes()) = G2.label(G2.nodes());
+    
+    % ---
+    % get all edges in G2
+    % ---
+    [val, V1, V2] = edges(G2);
+    
+    for i = 1:numel(val)
+        
+        % ---
+        % add edges to graph
+        % ---
+        G.add_edge(V1(i), V2(i), val(i));
+        
+        if add_symm
+            % ---
+            % add symmetric edges to graph
+            % ---
+            G.add_edge(V2(i), V1(i), val(i));
+        end
+        
+    end
+end
+
+% ---
+% substracts the edges in G2 from
+% this GRaph, removing not connected nodes.
+% ---
+function Gout = minus(a, b)
+    Gout = feval(class(a),a);
+    Gout.remove_graph(b);
+end
+
+function remove_graph(G, G2)
+    
+    % determine if symmetric  edges have to be added
+    clas = cat(1, class(G2), superclasses(G2));
+    if strcellfind(clas, 'Graph')
+        symm = 1;
+    else
+        symm = 0;
+    end
+    
+    % remove edges
+    [val, V1, V2] = G2.edges();
+    for j = 1:numel(val)
+        
+        % remove specified edges
+        G.remove_edge(V1(j), V2(j));
+        
+        % remove symmetric edges if subtracting symm graph
+        if symm
+
+            G.remove_edge(V2(j), V1(j));
+        end
+    end
+
+    % ---
+    % Note : we only remove nodes with no 
+    % remaining incoming edges
+    % ---
+    V = G2.nodes();
+    for j = 1:numel(V)
+
+        if G.degree(V(j)) == 0
+
+            G.remove_node(V(j));
+        end
+    end
+    
+end
+
+% ---
+% compact graph representation
+% ---
+function [E, labels] = compact(G)
+    
+    % ---
+    % get nodes and create a reverse index
+    % ---
+    Vidx = sparse(G.nodes,1,1:G.order());
+    [w, V1, V2]  = G.edges();
+    
+    % create compact adjacency matrix
+    E = sparse(Vidx(V1), Vidx(V2),w, G.order(), G.order());
+    
+    labels = G.label(G.nodes());
+end
+
+% ---
+% determines if Edges in G2 are the same as in G
+% ---
+function [out] = isSubgraph(G, G2)
+    
+    [val, V1, V2] = G2.edges();
+    validE = false(numel(V1), 1);
+    
+    i = 1;
+    while i <= numel(V1)
+        
+        % ---
+        % Test if edge exists in other graph
+        % ---
+        if G.edge(V1(i),V2(i)) == val(i) 
+           out = 0;
+           return;
+        end
+        i = i +1 ;
+    end
+    
+    % ---
+    % Test labels
+    % ---
+    if ~isempty(G.Vlbl) && ~isempty(G2.Vlbl)
+        
+        V = G2.nodes();
+        i = 1;
+        while i <= numel(V)
+            if strcmp(G.label(V(i)), G2.label(V(i))) ~= 0
+                out = 0;
+                return;
+            end
+            i = i + 1;
+        end 
+    end
+    
+    out = 1;
+end
+
+% ---
+% Visualise the Similarity Graph
+% ---
+function visualise(G)
+
+   % ---
+   % get colormap for edge weights
+   % ---
+   cmap = jet(100);
+   
+   % ---
+   % NOTE: we now get the weight colors for all edges
+   % get maximum weight and all edges
+   % ---
+   [colors, V1, V2]  = G.edges();
+   w = G.max_weight();
+   
+   % normalise colors
+   colors = max(1,round((colors / w) * 100));
+
+   % get node labels
+   V1lbl = G.label(V1);
+   V2lbl = G.label(V2);
+
+   % ---
+   % compose edgecolor matrix
+   % ---
+   ec = cell(numel(V1), 3);
+   for i = 1:numel(V1)
+       ec(i,:) = {V1lbl{i}, V2lbl{i}, cmap(colors(i),:)};
+   end
+   
+   % ---
+   % For Performance Issues
+   % We get the compact Graph and
+   % !hope! for the labels to correspond to those above
+   % ---
+   [E, labels] = compact(G);
+   
+   % determine if symmetric Graph
+    clas = cat(1, class(G), superclasses(G));
+    if strcellfind(clas, 'Graph')
+        symm = 1;
+    else
+        symm = 0;
+    end
+   
+   graphViz4Matlab('-adjMat',E, ...
+    '-nodeLabels',labels, ...
+    '-edgeColors', ec, ...
+    '-undirected', symm); 
+end
+end
+
+
+methods (Static)
+   function G = copy(Gin)
+       
+       if strcmp(class(Gin), 'DiGraph')
+           
+           G = DiGraph(Gin.V, Gin.E);
+           G.Vlbl = Gin.Vlbl;
+           
+       else
+           warning ('cannot copy graph, casting instead')
+           G = DiGraph.cast(Gin);
+       end
+        
+   end
+   
+   function G = cast(Gin)
+       
+        % ---
+        % this uses an imput grpaph
+        % to create a new digraph
+        % ---
+        G = DiGraph();
+        
+        % ---
+        % Add the input graph to the empty one
+        % ---
+        G.add_graph(Gin);
+        
+   end
+end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/Graph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,154 @@
+% GENERAL GRAPH THEORY CLASS
+%
+% CAVE: Any special application oriented stuff 
+% should be outside here
+
+classdef Graph < DiGraph
+ 
+methods
+
+    % ---
+% Constructor
+% ---
+function G = Graph(V, E)
+     
+    if nargin == 1
+        % ---
+        % this uses an imput grpaph
+        % to create a new graph
+        % ---
+        G = Graph.copy(V);
+        
+    elseif nargin == 2
+        
+        if numel(V) == size(V,2)
+            G.V = V;
+        else
+            G.V = V';
+        end
+
+        G.E = E;
+    end
+end
+function w = edge(G, V1, V2)
+    
+    sm = min([V1, V2]);
+    bg = max([V1, V2]);
+    
+    w = G.E(sm, bg);
+end
+
+% ---      
+% add an edge
+% the undirected case: G.E is triangular
+% ---
+function add_edge(G, V1, V2, weight)
+    
+    G.add_node(V1);
+	G.add_node(V2);
+    
+    sm = min([V1, V2]);
+    bg = max([V1, V2]);
+    
+    if  G.E(sm, bg) == 0
+
+        % save weight
+        G.E(sm, bg) = weight;
+    else
+        
+        join_edge(G, V1, V2, weight);
+    end
+end
+
+% remove an edge
+function remove_edge(G, V1, V2)
+    
+    sm = min([V1, V2]);
+    bg = max([V1, V2]);
+    
+    G.E(sm,bg) = 0;
+end
+
+% ---
+% sets the edge without considering earlier weights
+% ---
+function set_edge(G, V1, V2, weight)
+    
+    sm = min([V1, V2]);
+    bg = max([V1, V2]);
+    
+    G.E(sm, bg) = weight;
+    
+end
+
+% ---
+% Graph-specific functions
+% in the undirected case, these are the same
+% ---
+function c = children(G, Vid)
+
+    c = [find(G.E(Vid,:) > 0) find(G.E(:,Vid) > 0)'];
+end
+
+function p = parents(G, Vid)
+
+    p = [find(G.E(Vid,:) > 0) find(G.E(:,Vid) > 0)'];
+end
+
+% ---
+% Vertex Degree
+% ---
+function out = degree(G, V)
+    
+    out = sum(G.E(V,:) > 0) + sum(G.E(:,V) > 0);
+end
+
+% ---
+% Vertex Degree
+% ---
+function out = degree_in(G, V)
+    
+    out = sum(G.E(V,:) > 0) + sum(G.E(:,V) > 0);
+end
+
+% ---
+% Vertex Degree
+% ---
+function out = degree_out(G, V)
+    
+    out = sum(G.E(:,V) > 0) + sum(G.E(:,V) > 0);
+end
+
+end
+
+
+methods (Static)
+   function G = copy(Gin)
+       
+       if strcmp(class(Gin), 'Graph')
+           
+           G = Graph(Gin.V, Gin.E);
+           G.Vlbl = Gin.Vlbl;
+           
+       else
+           warning ('cannot copy graph, casting instead')
+           G = Graph.cast(Gin);
+       end
+        
+   end
+   
+   function G = cast(Gin)
+       
+        % ---
+        % this uses an imput grpaph
+        % to create a new digraph
+        % ---
+        G = Graph();
+        
+        % ---
+        % Add the input graph to the empty one
+        % ---
+        G.add_graph(Gin);
+   end
+end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/NaiveHash.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+classdef NaiveHash < handle
+
+    properties
+        
+        last_key = 0;
+        map;
+    end
+    
+% ---
+%  the methods
+% ---
+methods
+    function ht = NaiveHash(data)
+        
+        ht.Map = containers.Map('KeyType', 'int32', 'ValueType', 'int32');
+    end
+    
+    function put(ht, data)
+        
+        % get new key
+        last_key = last_key + 1;
+        ticketMap(data) = last_key;
+    end
+    
+    function data(ht, data)
+        
+    end
+    
+    function out = key(ht, data)
+        
+        out = ht.Map(data);
+    end
+    
+    function iskey(ht, key)
+        
+    end
+    
+end
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/addTopXAxis.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,140 @@
+function [nAxis] = addTopXAxis (varargin)
+
+% [nAxis] = addTopXAxis (axisH, properties ...)
+% Add an X-axis on top (additional to the one on bottom) of the figure,
+% with its own ticks labels and axis label (allow double scale).
+% Ticks, minor ticks positions and x limits are set to be identical for top and bottom
+% axis. Moreover, they are linked, i.e. a modification of one of them, even after execution
+% of this function, will result in modification of the other one.
+%
+% Parameters:
+% 	axisH = handle for axes (dafault = current axes, given by |gca|)
+%	properties: syntax is two-folded arguments for each property,
+%       	    on the form: 'name of property' (case insensitive), value of property
+%		    and properties can be 
+%		xLabStr : the label for the top X-axis (string)
+%			default = ''
+%		expression or exp : expression for transforming bottom X-tick labels to
+%			      top X-tick labels. In the expression, |argu| will refer
+%				to the value of the bottom X-tick labels.
+%				eg. going from |log10(x)| to linear |x| values will be done with
+%				the string '10.^argu' for expression.
+%			default = ''
+%		Note : if expression needs to use some variables, that are not accessible to this function, they need to be evaluated
+%			before being passed to this function (see exemples below).
+%		xTickLabelFormat : display format, used for converting numerical values for tick labels in strings. (string)
+%				The computation of top axis tick labels using |expression| can lead to numbers taking a lot of space
+%				because of the precision of the display. Reducing the precision will reduce the size of the labels.
+%			default = '%4.1f'
+%
+%  Exemples:
+%
+%	axisH = axes % create new axes, and save the handle in axisH
+%       addTopXAxis(axisH, 'expression', '-argu') % change the label of the ticks by their opposite
+%	
+%
+%  addTopXAxis('xticklabel', '(k0.*10.^argu)', 'xlabel', '$\lambda_{up}$ (cm)')
+%	will use the current axis (handle is not passed to the function), and will compute the new X-tick values according to
+%		x' = k0.*10.^argu;
+%	where |k0| is a variable whose value has to be set in the 'base' workspace.
+
+%
+%	V2 - 11/27/2005
+%	Modifs for V2:
+%		* - now evaluates expression in 'base' workspace.
+%		Therefore, variables (like 'k0' in the second example) do not need to be evaluated anymore before being passed, 
+%		as long as they already exist in 'base' workspace. It should allow more complex expressions to be passed than previously.
+%		Example 2 then becomes
+%			addTopXAxis('expression', '(k0.*10.^argu)', 'xLabStr', '$\lambda_{up}$ (cm)')
+%		instead of
+%			addTopXAxis('expression', ['(', num2str(k0),'.*10.^argu)'], 'xLabStr', '$\lambda_{up}$ (cm)'
+%		Drawback: the function create/assign a variable called 'axisH' in base workspace. Potential conflicts here ...
+%		* - properties are not case sensitive anymore
+%		* - 'exp' can be used instead of 'expression' for property name (following John D'Errico comment, if I understood it well ....)
+%		
+%
+%	Author : Emmanuel P. Dinnat
+%	Date : 09/2005
+%	Contact: emmanueldinnat@yahoo.fr
+
+global hlink % make the properties link global
+
+%% Default values for properties
+axisH = gca;
+xTickLabelFormat = '%4.1f';
+xLabStr = '';
+expression = '';
+
+%% Process input parameters (if they exist)
+% if input parameters
+if length(varargin) > 0
+	if isstr(varargin{1}) % if no axes handle is passed ...
+		axisH = gca;
+		if (length(varargin) > 1)
+			properties = varargin(1:end);
+		end
+	else % else deal with passed axes handle
+		if ishandle(varargin{1})
+			axisH = varargin{1};
+		else
+			error('addTopXAxis : handle for axes invalid.')
+		end
+		properties = varargin(2:end);
+	end
+	if ~mod(length(properties),2)
+		for iArg = 1:length(properties)/2
+			% switch properties{2*iArg-1}
+			switch lower(properties{2*iArg-1}) % modif V2 - suppress case sensitivity
+				case {'xticklabel','expression' , 'exp'} 
+					expression = properties{2*iArg};
+				% case 'xLabStr'
+				case {'xlabel','xlabstr'} % V2
+					xLabStr = properties{2*iArg};
+				% case 'xTickLabelFormat'
+				case 'xticklabelformat' % V2
+					xTickLabelFormat = properties{2*iArg};
+				otherwise
+					error(['addTopXAxis : property ''', properties{2*iArg-1},''' does not exist.'])
+			end
+		end
+	else
+		error('addTopXAxis : arguments number for proporties should be even.')
+	end
+end % if input parameters
+%% replace |argu| by x-tick labels in the computation expression for new x-tick labels	
+% 	newXtickLabel_command = regexprep(expression, 'argu', 'get(axisH, ''xTick'')''');
+
+%% Get paramters of figures to be modified (other parameters to be copied on the new axis are not extracted)
+	set(axisH, 'units', 'normalized');
+	cAxis_pos = get(axisH, 'position');
+%% shift downward original axis a little bit
+ 	cAxis_pos(2) = cAxis_pos(2)*0.8;
+	set(axisH, 'position', cAxis_pos);
+%% Make new axis
+	nAxis = subplot('position', [cAxis_pos(1), (cAxis_pos(2)+cAxis_pos(4))*1.007, cAxis_pos(3), 0.0001]);
+%% put new Xaxis on top
+	set(nAxis, 'xaxisLocation', 'top');
+%% Improve readability
+	%% delete Y label on new axis
+	set(nAxis, 'yTickLabel', []);
+	% remove box for original axis
+% 	set(axisH, 'box', 'off');
+	% remove grids
+	set(nAxis, 'yGrid', 'off');
+	set(nAxis, 'xGrid', 'off');
+%% Set new Xaxis limits, ticks and subticks the same as original ones (by link) ...
+	set(nAxis, 'xlim', get(axisH, 'xlim'));
+	set(nAxis, 'XTick', get(axisH, 'XTick'));
+	set(nAxis, 'XMinorTick', get(axisH, 'XMinorTick'));
+	hlink = linkprop([nAxis, axisH], {'xLim','XTick','XMinorTick'});
+%% ... but replace ticks labels by new ones !!!
+	assignin('base', 'axisH', axisH)
+	% set(nAxis, 'xtickLabel',  num2str(evalin('base', newXtickLabel_command), xTickLabelFormat));
+    set(nAxis, 'xtickLabel', expression);
+    %% but label for new axis
+	if exist('xLabStr')
+        xlabel(xLabStr)
+	end
+%% return current axis to original one (for further modification affecting original axes)
+	axes(axisH);
+%	hlink = linkprop([nAxis, gca], {'xLim','XTick','XMinorTick'})
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/camircommit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function camircommit()
+% returns the global version of the camir project
+
+global globalvars;
+curpath = pwd;
+
+% go to camir directory
+cd (globalvars.camir.path);
+tmp = textscan(evalc('!svnversion'),'%s');
+
+% svn commit
+svn commit;
+
+% return to current directory
+cd (curpath);
+
+rev = tmp{1};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/camirversion.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function [rev, latest] = camirversion()
+% returns the global version of the camir project
+
+global globalvars;
+curpath = pwd;
+
+% go to camir directory
+cd (globalvars.camir.path);
+tmp = textscan(evalc('!svnversion'),'%s');
+
+% return to current directory
+cd (curpath);
+
+rev = tmp{1};
+latest = textscan(rev{1},'%d','Delimiter',':');
+if ~isempty(latest{1})
+    latest = double(latest{end}(end));
+else
+    latest='-1';
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/cell2csv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,85 @@
+function cell2csv(fileName, cellArray, separator, excelYear, decimal)
+% Writes cell array content into a *.csv file.
+% 
+% CELL2CSV(fileName, cellArray, separator, excelYear, decimal)
+%
+% fileName     = Name of the file to save. [ i.e. 'text.csv' ]
+% cellArray    = Name of the Cell Array where the data is in
+% separator    = sign separating the values (default = ';')
+% excelYear    = depending on the Excel version, the cells are put into
+%                quotes before they are written to the file. The separator
+%                is set to semicolon (;)
+% decimal      = defines the decimal separator (default = '.')
+%
+%         by Sylvain Fiedler, KA, 2004
+% updated by Sylvain Fiedler, Metz, 06
+% fixed the logical-bug, Kaiserslautern, 06/2008, S.Fiedler
+% added the choice of decimal separator, 11/2010, S.Fiedler
+
+%% Checking für optional Variables
+if ~exist('separator', 'var')
+    separator = ',';
+end
+
+if ~exist('excelYear', 'var')
+    excelYear = 1997;
+end
+
+if ~exist('decimal', 'var')
+    decimal = '.';
+end
+
+%% Setting separator for newer excelYears
+if excelYear > 2000
+    separator = ';';
+end
+
+%% Write file
+datei = fopen(fileName, 'w');
+
+for z=1:size(cellArray, 1)
+    for s=1:size(cellArray, 2)
+        
+        var = eval(['cellArray{z,s}']);
+        % If zero, then empty cell
+        if size(var, 1) == 0
+            var = '';
+        end
+        % If numeric -> String
+        if isnumeric(var)
+            var = num2str(var);
+            % Conversion of decimal separator (4 Europe & South America)
+            % http://commons.wikimedia.org/wiki/File:DecimalSeparator.svg
+            if decimal ~= '.'
+                var = strrep(var, '.', decimal);
+            end
+        end
+        % If logical -> 'true' or 'false'
+        if islogical(var)
+            if var == 1
+                var = 'TRUE';
+            else
+                var = 'FALSE';
+            end
+        end
+        % If newer version of Excel -> Quotes 4 Strings
+        if excelYear > 2000
+            var = ['"' var '"'];
+        end
+        
+        % OUTPUT value
+        fprintf(datei, '%s', var);
+        
+        % OUTPUT separator
+        if s ~= size(cellArray, 2)
+            fprintf(datei, separator);
+        end
+    end
+    if z ~= size(cellArray, 1) % prevent a empty line at EOF
+        % OUTPUT newline
+        fprintf(datei, '\n');
+    end
+end
+% Closing file
+fclose(datei);
+% END
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/cell2str.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,69 @@
+%CELL2STR Convert 2-D cell array into evaluable string.
+%   B = CELL2STR(C) returns a B such that C = EVAL(B), under the
+%   following contraits:
+%   - C contains only numeric, logic, string or cell arrays, not
+%     structs nor objects.
+%   - NDIMS(C) = 2.
+%
+%   B = CELL2STR(C,N) uses N digits of precision for numeric
+%   arrays. N defaults to 15.
+%
+%   B = CELL2STR(C,'class') and B = CELL2STR(C,N,'class') also
+%   include the class string for the numeric arrays
+%
+%   See also MAT2STR, EVAL
+
+% (C) Copyright 2010-2012, All rights reserved.
+% Cris Luengo, Uppsala, 12 August 2010.
+% 13 July 2012: extended to work with cell arrays.
+
+function str = cell2str(c,n,mode)
+
+if nargin==2
+   if isnumeric(n)
+      mode = '';
+   else
+      mode = n;
+      n = 15;
+   end
+elseif nargin==1
+   mode = '';
+   n = 15;
+end
+
+if ~isnumeric(n) || numel(n)~=1
+   error('Input argument N should be a scalar.')
+end
+if ~ischar(mode) || ~any(strcmp(mode,{'','class'}))
+   error('Mode string can only be ''class''.')
+end
+
+if iscell(c)
+   N = size(c);
+   if length(N)~=2
+      error('Cell array must be 2-dimensional.')
+   end
+   str = '{';
+   for ii=1:N(1)
+      if ii>1
+         str = [str,';'];
+      end
+      for jj=1:N(2)
+         if jj>1
+            str = [str,','];
+         end
+         str = [str,cell2str(c{ii,jj})];
+      end
+   end
+   str = [str,'}'];
+elseif isnumeric(c)
+   if ~isempty(mode)
+      str = mat2str(c,n,'class');
+   else
+      str = mat2str(c,n);
+   end
+elseif ischar(c) || islogical(c)
+   str = mat2str(c);
+else
+   error('Illegal array in input.')
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/centeraxes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,168 @@
+function out = centeraxes(ax,opt)
+% out = centeraxes(ax,opt)
+%==========================================================================
+% Center the coordinate axes of a plot so that they pass through the 
+% origin.
+%
+% Input: 0, 1 or 2 arguments
+%        0: Moves the coordinate axes of 'gca', i.e. the currently active 
+%           axes.
+%        1: ax, a handle to the axes which should be moved.
+%        2: ax, opt, where opt is a struct with further options
+%                opt.fontsize = 'size of axis tick labels'
+%                opt.fontname = name of axis tick font.
+%
+% If the opt struct is ommitted, the current values for the axes are used.
+%
+% Output: stuct out containing handles to all line objects created by this
+%         function.
+%
+%==========================================================================
+% Version: 1.1
+% Created: October 1, 2008, by Johan E. Carlson
+% Last modified: November 21, 2009, by Johan E. Carlson
+%==========================================================================
+
+if nargin < 2,
+    fontsize = get(ax,'FontSize');
+    fontname = get(ax,'FontName');
+end
+if nargin < 1,
+    ax = gca;
+end
+
+if nargin == 2,
+    if isfield(opt,'fontsize'),
+        fontsize = opt.fontsize;
+    else
+        fontsize = get(ax,'FontSize');
+    end;
+    if isfield(opt,'fontname'),
+        fontname = opt.fontname;
+    else
+        fontname = get(ax,'FontName');
+    end
+end
+
+axes(ax);
+set(gcf,'color',[1 1 1]);
+xtext = get(get(ax,'xlabel'),'string');
+ytext = get(get(ax,'ylabel'),'string');
+
+%--------------------------------------------------------------------------
+% Check if the current coordinate system include the origin. If not, change
+% it so that it does!
+%--------------------------------------------------------------------------
+xlim = 1.1*get(ax,'xlim');
+ylim = 1.1*get(ax,'ylim');
+set(ax,'xlim',xlim);
+set(ax,'ylim',ylim);
+
+if xlim(1)>0,
+    xlim(1) = 0;
+end
+
+if ylim(1)>0,
+    ylim(1) = 0;
+end
+
+if xlim(2) < 0,
+    xlim(2) = 0;
+end
+
+if ylim(2) < 0,
+    ylim(2) = 0;
+end;
+
+set(ax,'xlim',xlim,'ylim',ylim);
+
+
+% -------------------------------------------------------------------------
+% Caculate size of the "axis tick marks"
+% -------------------------------------------------------------------------
+axpos = get(ax,'position');
+figpos = get(gcf,'position');
+aspectratio = axpos(4) / (axpos(3));
+xsize = xlim(2) - xlim(1);
+ysize = ylim(2) - ylim(1);
+xticksize = ysize/figpos(4)*12;
+yticksize = xsize*aspectratio/figpos(3)*12;
+
+% -------------------------------------------------------------------------
+% Store old tick values and tick labels
+% -------------------------------------------------------------------------
+ytick = get(ax,'YTick');
+xtick = get(ax,'XTick');
+xticklab = get(ax,'XTickLabel');
+yticklab = get(ax,'YTickLabel');
+
+% -------------------------------------------------------------------------
+% Draw new coordinate system
+% -------------------------------------------------------------------------
+
+yax = line([0; 0],[ylim(1)-1; ylim(2)]);
+xax = line([xlim(1); xlim(2)],[0; 0]);
+set(xax,'color',[0 0 0])
+set(yax,'color',[0 0 0])
+
+% Draw x-axis ticks
+for k = 1:length(xtick),
+    newxtick(k) = line([xtick(k); xtick(k)],[-xticksize/2; xticksize/2]);
+    if (xtick(k)~=0),
+        newxticklab(k) = text(xtick(k),-1.5*xticksize, strtrim(xticklab(k,:)));
+        set(newxticklab(k),'HorizontalAlignment','center',...
+            'Fontsize',fontsize,'FontName',fontname);
+    end
+end
+set(newxtick,'color',[0 0 0]);
+
+% Draw y-axis ticks
+for k = 1:length(ytick),
+    newytick(k) = line([-yticksize/2; yticksize/2],[ytick(k); ytick(k)]);
+    if (ytick(k)~=0),
+        newyticklab(k) = text(-.8*yticksize,ytick(k), yticklab(k,:));
+        set(newyticklab(k),'HorizontalAlignment','right',...
+            'FontSize',fontsize,'FontName',fontname);
+    end
+end
+set(newytick,'color',[0 0 0]);
+
+%--------------------------------------------------------------------------
+% Move xlabels
+%--------------------------------------------------------------------------
+newxlabel = text(xlim(2),-1.5*xticksize,xtext);
+set(newxlabel,'HorizontalAlignment','center',...
+    'FontWeight','demi','FontSize',fontsize+2,'FontName',fontname);
+
+newylabel = text(-yticksize,ylim(2)*1.02,ytext);
+set(newylabel,'HorizontalAlignment','right','VerticalAlignment','top',...
+    'FontWeight','demi','FontSize',fontsize+2,'FontName',fontname);
+
+%--------------------------------------------------------------------------
+% Create arrowheads
+%--------------------------------------------------------------------------
+x = [0; -yticksize/4; yticksize/4];
+y = [ylim(2); ylim(2)-xticksize; ylim(2)-xticksize];
+patch(x,y,[0 0 0])
+
+x = [xlim(2); xlim(2)-yticksize; xlim(2)-yticksize];
+y = [0; xticksize/4; -xticksize/4];
+patch(x,y,[0 0 0])
+
+axis off;
+box off;
+
+%--------------------------------------------------------------------------
+% Create output struct
+%--------------------------------------------------------------------------
+
+if nargout > 0,
+    out.xaxis = xax;
+    out.yaxis = yax;
+    out.xtick = newxtick;
+    out.ytick = newytick;
+    out.xticklabel = newxticklab;
+    out.yticklabel = newyticklab;
+    out.newxlabel = newxlabel;
+    out.newylabel = newylabel;
+end;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/centeraxes_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+% Script for testing the centeraxes.m function
+
+clear
+clf
+clc
+%subplot(211)
+plot(-8:8, sqrt(5:21));
+set(gca,'ylim',[-4 5],'xlim',[-8 8],'xtick',-8:8,'ytick',-4:5)
+xlabel('t');
+ylabel('y(t)')
+thicklines(2);
+
+opt.fontname = 'helvetica';
+opt.fontsize = 8;
+
+%centeraxes(gca);
+centeraxes(gca,opt);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/cprint.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function cprint(l, varargin)
+% ---
+% function cprint(l, varargin)
+% 
+% sprintfs statement varargin if verbosity level 
+% globalvars.debug >= l 
+%
+% lvl 1: error / very important info
+% lvl 2 : warning, mid-level runtime info
+% lvl 3 : high-frequency runtime / debug info
+%
+% ---
+
+    global globalvars;
+    
+    if isfield(globalvars, 'debug') && globalvars.debug >= l
+        display(sprintf(varargin{:}));
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/csv2cell.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,152 @@
+function data = csv2cell(varargin)
+% CSV2CELL - parses a Windows CSV file into an NxM cell array, where N is
+% the number of lines in the CSV text and M is the number of fields in the
+% longest line of the CSV file. Lines are delimited by carriage returns
+% and/or newlines.
+%
+% A Windows CSV file format allows for commas (,) and double quotes (") to
+% be contained within fields of the CSV file. Regular fields are just text
+% separated by commas (e.g. foo,bar,hello world). Fields containing commas
+% or double quotes are surrounded by double quotes (e.g.
+% foo,bar,"item1,item2,item3",hello world). In the previous example,
+% "item1,item2,item3" is one field in the CSV text. For double quotes to be
+% represented, they are written in pairs in the file, and contained within
+% a quoted field, (e.g. foo,"this field contains ""quotes""",bar). Spaces
+% within fields (even leading and trailing) are preserved.
+%
+% All fields from the CSV file are returned as strings. If the CSV text
+% contains lines with different numbers of fields, then the "missing"
+% fields with appear as empty arrays, [], in the returned data. You can
+% easily convert the data you expect to be numeric using str2num() and
+% num2cell(). 
+%
+% Examples:
+%  >> csv2cell('foo.csv','fromfile') % loads and parses entire file
+%  >> csv2cell(',,,') % returns cell array {'','','',''}
+%  >> csv2cell(',,,','text') % same as above, declaring text input
+%  >> csv2cell(sprintf('%s\r\n%s',...
+%     '"Ten Thousand",10000,,"10,000","""It''s ""10 Grand"", baby",10k',...
+%     ',foo,bar,soo'))
+%  ans = 
+%    'Ten Thousand'    '10000'       ''    '10,000'    [1x22 char]    '10k'
+%                ''    'foo'      'bar'    'soo'                []       []
+%  >> % note the two empty [] cells, because the second line has two fewer
+%  >> % fields than the first. The empty field '' at the beginning of the
+%  >> % second line is due to the leading comma on that line, which is
+%  >> % correct behavior. A trailing comma will do the same to the end of a
+%  >> % line.
+% 
+% Limitations/Exceptions:
+%   * This code is untested on large files. It may take a long time due to
+%   variables growing inside loops (yes, poor practice, but easy coding).
+%   * This code has been minimally tested to work with a variety of weird
+%   Excel files that I have.
+%   * Behavior with improperly formatted CSV files is untested.
+%   * Technically, CSV files from Excel always separate lines with the pair
+%   of characters \r\n. This parser will also separate lines that have only
+%   \r or \n as line terminators. 
+%   * Line separation is the first operation. I don't think the Excel CSV
+%   format has any allowance for newlines or carriage returns within
+%   fields. If it does, then this parser does not support it and would not
+%   return bad output.
+%
+% Copyright 2008 Arthur Hebert
+
+% Process arguments
+if nargin == 1
+    text = varargin{1};
+elseif nargin == 2
+    switch varargin{2}
+        case 'fromfile'
+            filename = varargin{1};
+            fid = fopen(filename);
+            text = char(fread(fid))';
+            fclose(fid);
+        case 'text'
+            text = varargin{1};
+        otherwise
+            error('Invalid 2nd argument %s. Valid options are ''fromfile'' and ''text''',varargin{2})
+    end
+else
+    error('CSV2CELL requires 1 or 2 arguments.')
+end
+
+
+% First split it into lines
+lines = regexp(text,'(\r\n|[\r\n])','split'); % lines should now be a cell array of text split by newlines
+
+% a character is either a delimiter or a field
+inField = true;
+inQuoteField = false;
+% if inField && ~inQuoteField --> then we're in a raw field
+
+skipNext = false;
+data = {};
+field = '';
+for lineNumber = 1:length(lines)
+    nChars = length(lines{lineNumber}); % number of characters in this line
+    fieldNumber = 1;
+    for charNumber = 1:nChars
+        if skipNext
+            skipNext = false;
+            continue
+        end
+        thisChar = lines{lineNumber}(charNumber);
+        if thisChar == ','
+            if inField 
+                if inQuoteField % this comma is part of the field
+                    field(end+1) = thisChar;
+                else % this comma is the delimiter marking the end of the field
+                    data{lineNumber,fieldNumber} = field;
+                    field = '';
+                    fieldNumber = fieldNumber + 1;
+                end
+            else % we are not currently in a field -- this is the start of a new delimiter
+                inField = true;
+            end
+            if charNumber == nChars % this is a hanging comma, indicating the last field is blank
+                data{lineNumber,fieldNumber} = '';
+                field = '';
+                fieldNumber = fieldNumber + 1;
+            end
+        elseif thisChar == '"' 
+            if inField
+                if inQuoteField
+                    if charNumber == nChars % it's the last character, so this must be the closing delimiter?
+                        inField = false;
+                        inQuoteField = false;
+                        data{lineNumber,fieldNumber} = field;
+                        field = '';
+                        fieldNumber = fieldNumber + 1;
+                    else 
+                        if lines{lineNumber}(charNumber+1) == '"' % this is translated to be a double quote in the field
+                            field(end+1) = '"';
+                            skipNext = true;
+                        else % this " is the delimiter ending this field
+                            data{lineNumber,fieldNumber} = field;
+                            field = '';
+                            inField = false;
+                            inQuoteField = false;
+                            fieldNumber = fieldNumber + 1;
+                        end
+                    end
+                else % this is a delimiter and we are in a new quote field
+                    inQuoteField = true;
+                end
+            else % we are not in a field. This must be an opening quote for the first field?
+                inField = true;
+                inQuoteField = true;
+            end
+        else % any other character ought to be added to field
+            field(end+1) = thisChar;
+            if charNumber == nChars
+                data{lineNumber,fieldNumber} = field;
+                field = '';
+                fieldNumber = fieldNumber + 1;
+            elseif charNumber == 1 % we are starting a new raw field
+                inField = true;
+            end
+        end
+    end
+end
+            
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/hash.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+function h = hash(inp,meth)
+% HASH - Convert an input variable into a message digest using any of
+%        several common hash algorithms
+%
+% USAGE: h = hash(inp,'meth')
+%
+% inp  = input variable, of any of the following classes:
+%        char, uint8, logical, double, single, int8, uint8,
+%        int16, uint16, int32, uint32, int64, uint64
+% h    = hash digest output, in hexadecimal notation
+% meth = hash algorithm, which is one of the following:
+%        MD2, MD5, SHA-1, SHA-256, SHA-384, or SHA-512 
+%
+% NOTES: (1) If the input is a string or uint8 variable, it is hashed
+%            as usual for a byte stream. Other classes are converted into
+%            their byte-stream values. In other words, the hash of the
+%            following will be identical:
+%                     'abc'
+%                     uint8('abc')
+%                     char([97 98 99])
+%            The hash of the follwing will be different from the above,
+%            because class "double" uses eight byte elements:
+%                     double('abc')
+%                     [97 98 99]
+%            You can avoid this issue by making sure that your inputs
+%            are strings or uint8 arrays.
+%        (2) The name of the hash algorithm may be specified in lowercase
+%            and/or without the hyphen, if desired. For example,
+%            h=hash('my text to hash','sha256');
+%        (3) Carefully tested, but no warranty. Use at your own risk.
+%        (4) Michael Kleder, Nov 2005
+%
+% EXAMPLE:
+%
+% algs={'MD2','MD5','SHA-1','SHA-256','SHA-384','SHA-512'};
+% for n=1:6
+%     h=hash('my sample text',algs{n});
+%     disp([algs{n} ' (' num2str(length(h)*4) ' bits):'])
+%     disp(h)
+% end
+
+inp=inp(:);
+% convert strings and logicals into uint8 format
+if ischar(inp) || islogical(inp)
+    inp=uint8(inp);
+else % convert everything else into uint8 format without loss of data
+    inp=typecast(inp,'uint8');
+end
+
+% verify hash method, with some syntactical forgiveness:
+meth=upper(meth);
+switch meth
+    case 'SHA1'
+        meth='SHA-1';
+    case 'SHA256'
+        meth='SHA-256';
+    case 'SHA384'
+        meth='SHA-384';
+    case 'SHA512'
+        meth='SHA-512';
+    otherwise
+end
+algs={'MD2','MD5','SHA-1','SHA-256','SHA-384','SHA-512'};
+if isempty(strmatch(meth,algs,'exact'))
+    error(['Hash algorithm must be ' ...
+        'MD2, MD5, SHA-1, SHA-256, SHA-384, or SHA-512']);
+end
+
+% create hash
+x=java.security.MessageDigest.getInstance(meth);
+x.update(inp);
+h=typecast(x.digest,'uint8');
+h=dec2hex(h)';
+if(size(h,1))==1 % remote possibility: all hash bytes < 128, so pad:
+    h=[repmat('0',[1 size(h,2)]);h];
+end
+h=lower(h(:)');
+clear x
+return
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/implode.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function out = implode(divider, input);
+% out = implode(divider, input)
+
+out = [];
+for i = 1:numel(input)
+
+    % only put divider inbetween data
+    if i > 1
+        
+        out = sprintf('%s%s%d', out, divider, input(i));
+    else
+        
+        out = sprintf('%d', input(i));
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/kldiv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,101 @@
+function KL = kldiv(varValue,pVect1,pVect2,varargin)
+%KLDIV Kullback-Leibler or Jensen-Shannon divergence between two distributions.
+%   KLDIV(X,P1,P2) returns the Kullback-Leibler divergence between two
+%   distributions specified over the M variable values in vector X.  P1 is a
+%   length-M vector of probabilities representing distribution 1, and P2 is a
+%   length-M vector of probabilities representing distribution 2.  Thus, the
+%   probability of value X(i) is P1(i) for distribution 1 and P2(i) for
+%   distribution 2.  The Kullback-Leibler divergence is given by:
+%
+%       KL(P1(x),P2(x)) = sum[P1(x).log(P1(x)/P2(x))]
+%
+%   If X contains duplicate values, there will be an warning message, and these
+%   values will be treated as distinct values.  (I.e., the actual values do
+%   not enter into the computation, but the probabilities for the two
+%   duplicate values will be considered as probabilities corresponding to
+%   two unique values.)  The elements of probability vectors P1 and P2 must 
+%   each sum to 1 +/- .00001.
+%
+%   A "log of zero" warning will be thrown for zero-valued probabilities.
+%   Handle this however you wish.  Adding 'eps' or some other small value 
+%   to all probabilities seems reasonable.  (Renormalize if necessary.)
+%
+%   KLDIV(X,P1,P2,'sym') returns a symmetric variant of the Kullback-Leibler
+%   divergence, given by [KL(P1,P2)+KL(P2,P1)]/2.  See Johnson and Sinanovic
+%   (2001).
+%
+%   KLDIV(X,P1,P2,'js') returns the Jensen-Shannon divergence, given by
+%   [KL(P1,Q)+KL(P2,Q)]/2, where Q = (P1+P2)/2.  See the Wikipedia article
+%   for "Kullback–Leibler divergence".  This is equal to 1/2 the so-called
+%   "Jeffrey divergence."  See Rubner et al. (2000).
+%
+%   EXAMPLE:  Let the event set and probability sets be as follow:
+%                X = [1 2 3 3 4]';
+%                P1 = ones(5,1)/5;
+%                P2 = [0 0 .5 .2 .3]' + eps;
+%  
+%             Note that the event set here has duplicate values (two 3's). These 
+%             will be treated as DISTINCT events by KLDIV. If you want these to
+%             be treated as the SAME event, you will need to collapse their
+%             probabilities together before running KLDIV. One way to do this
+%             is to use UNIQUE to find the set of unique events, and then
+%             iterate over that set, summing probabilities for each instance of
+%             each unique event.  Here, we just leave the duplicate values to be
+%             treated independently (the default):
+%                 KL = kldiv(X,P1,P2); 
+%                 KL =  
+%                      19.4899
+%
+%             Note also that we avoided the log-of-zero warning by adding 'eps' 
+%             to all probability values in P2.  We didn't need to renormalize
+%             because we're still within the sum-to-one tolerance. 
+%  
+%   REFERENCES:
+%   1) Cover, T.M. and J.A. Thomas. "Elements of Information Theory," Wiley, 
+%      1991.
+%   2) Johnson, D.H. and S. Sinanovic. "Symmetrizing the Kullback-Leibler 
+%      distance." IEEE Transactions on Information Theory (Submitted).
+%   3) Rubner, Y., Tomasi, C., and Guibas, L. J., 2000. "The Earth Mover's 
+%      distance as a metric for image retrieval." International Journal of 
+%      Computer Vision, 40(2): 99-121.
+%   4) <a href="matlab:web('http://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence','-browser')">Kullback–Leibler divergence</a>. Wikipedia, The Free Encyclopedia.
+%
+%   See also: MUTUALINFO, ENTROPY
+
+if ~isequal(unique(varValue),sort(varValue)),
+    warning('KLDIV:duplicates','X contains duplicate values. Treated as distinct values.')
+end
+if ~isequal(size(varValue),size(pVect1)) || ~isequal(size(varValue),size(pVect2)),
+    error('All inputs must have same dimension.')
+end
+% Check probabilities sum to 1:
+if (abs(sum(pVect1) - 1) > .00001) || (abs(sum(pVect2) - 1) > .00001),
+    error('Probablities don''t sum to 1.')
+end
+
+if ~isempty(varargin),
+    switch varargin{1},
+        case 'js',
+            logQvect = log2((pVect2+pVect1)/2);
+            KL = .5 * (sum(pVect1.*(log2(pVect1)-logQvect)) + ...
+                sum(pVect2.*(log2(pVect2)-logQvect)));
+
+        case 'sym',
+            KL1 = sum(pVect1 .* (log2(pVect1)-log2(pVect2)));
+            KL2 = sum(pVect2 .* (log2(pVect2)-log2(pVect1)));
+            KL = (KL1+KL2)/2;
+            
+        otherwise
+            error(['Last argument' ' "' varargin{1} '" ' 'not recognized.'])
+    end
+else
+    KL = sum(pVect1 .* (log2(pVect1)-log2(pVect2)));
+end
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/cut_Y.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function r = cut_Y(r, valid_idx)
+% disables the invalid parts of the ranking structure Y    
+
+    % get indices not mentioned
+    u = find(~valid_idx);
+    
+    % clear bad data
+    for i = 1 : numel(u)
+        
+        r{u(i), 1} = [];
+        r{u(i), 2} = [];
+    end
+    
+    % also clear weights if applicable
+    if size(r,2) == 3
+        for i = 1 : numel(u)
+            r{u(i), 3} = 0;
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/cvpartition_alltrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+% ---
+% fake partitioning for comparison 
+% to stober08:
+% ---
+classdef cvpartition_alltrain
+  
+properties (Hidden)
+
+    mtest;
+    mtraining;
+end
+properties
+    N;
+    NumTestSets;
+    TrainSize;
+    TestSize;
+end
+    
+        
+methods 
+    
+% ---
+% constuctor: directly calculates the truncated testset
+% ---
+function P = cvpartition_alltrain(nData, nRuns)
+    
+    P.NumTestSets = nRuns;
+    P.N = nData; 
+
+    % build training and test sets
+    for i = 1:P.NumTestSets
+        P.TrainSize(i) = nData;
+        P.TestSize(i) = nData;
+        P.mtraining{i} = ones(P.N, 1);
+        P.mtest{i} = ones(P.N, 1);
+    end
+end
+
+function out = test(P, i)
+
+    out = P.mtest{i};
+end
+
+function out = training(P, i)
+
+    out = P.mtraining{i};
+end
+
+end  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/cvpartition_trunctrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+% ---
+% class cvpartition_trunctrain
+% NOTE: this is a fake cvpartition double for 
+% using cvpartitions in truncated-training size experiments
+% ---
+classdef cvpartition_trunctrain
+  
+properties (Hidden)
+
+    mtest;
+    mtraining;
+end
+properties
+    N;
+    NumTestSets;
+    TrainSize;
+    TestSize;
+end
+    
+        
+methods
+    
+% ---
+% constuctor: directly calculates the truncated testset
+% ---
+function P = cvpartition_trunctrain(Pin, perctrain)
+  
+    P.N = Pin.N;
+    P.NumTestSets = Pin.NumTestSets;
+    
+    for i = 1:Pin.NumTestSets
+
+        % copy testing data
+        P.TestSize(i) = Pin.TestSize(i);
+        P.mtest{i} = Pin.test(i);
+
+        % calculate new training size
+        P.TrainSize(i) = ceil(perctrain * Pin.TrainSize(i));
+
+        % get actual training indices
+        idx = find(Pin.training(i));
+    
+        % ---
+        % TODO: save the permutation in a global variable,
+        % tomake the same smaller set available
+        % for all further experiments.
+        % moreover, it would be great if the smaller training sets
+        % are subsets of the bigger ones
+        % ---
+        tokeep = randperm(numel(idx));
+        tokeep = tokeep(1:P.TrainSize(i));
+        
+        % get indices to keep
+        idx = idx(tokeep);
+
+        % build truncated training set
+        P.mtraining{i} = false(P.N, 1);
+        P.mtraining{i}(idx) = true;
+    end
+end   
+
+function out = test(P, i)
+
+    out = P.mtest{i};
+end
+
+function out = training(P, i)
+
+    out = P.mtraining{i};
+end
+
+end  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/cvpartition_trunctrain_incsubsets.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,128 @@
+% ---
+% class cvpartition_trunctrain
+% NOTE: this is a fake cvpartition double for 
+% using cvpartitions in truncated-training size experiments
+%
+% differently from cvpartition_trunctrain, we take all the training sizes 
+% at once and generate training partitions where the smaller ones are subsets 
+% of the bigger ones
+% ---
+classdef cvpartition_trunctrain_incsubsets
+  
+properties (Hidden)
+
+    mtest;
+    mtraining;
+end
+properties
+    N;
+    NumTestSets;
+    TrainSize;
+    TestSize;
+end
+    
+        
+methods
+    
+% ---
+% constuctor: directly calculates the truncated testset
+% ---
+function P = cvpartition_trunctrain_incsubsets(Pin, perctrain)
+  
+    % ---
+    % NOTE: we use a different permutation for each cv-Buun (testset), 
+    % as otherwise the very small training sets will have about the same 
+    % data
+    % ---
+    if ~cvpartition_trunctrain_incsubsets.exists_permutation(Pin)
+        cvpartition_trunctrain_incsubsets.renew_permutation(Pin);
+    end
+
+    P.N = Pin.N;
+    P.NumTestSets = Pin.NumTestSets;
+    
+    for i = 1:Pin.NumTestSets
+
+        % copy testing data
+        P.TestSize(i) = Pin.TestSize(i);
+        P.mtest{i} = Pin.test(i);
+
+        % calculate new training size
+        P.TrainSize(i) = ceil(perctrain * Pin.TrainSize(i));
+        
+        % get actual training indices
+        idx = find(Pin.training(i));
+        
+        % ---
+        % NOTE: the Test-Set-Specific permutation is applied
+        % we only extract as many indices as fit in Pin
+        % ---
+        permu = cvpartition_trunctrain_incsubsets.get_permutation(i,Pin.TrainSize(i));
+        
+        % truncate the indices
+        idx = idx(permu(1:P.TrainSize(i)));
+        
+        % build truncated training set
+        P.mtraining{i} = false(P.N, 1);
+        P.mtraining{i}(idx) = true;
+    end
+end   
+function out = test(P, i)
+
+    out = P.mtest{i};
+end
+
+function out = training(P, i)
+
+    out = P.mtraining{i};
+end
+end
+
+methods (Static)
+    
+    % ---
+    % TODO: save the permutation in a global variable,
+    % tomake the same smaller set available
+    % for all further experiments.
+    % moreover, it would be great if the smaller training sets
+    % are subsets of the bigger ones
+    % ---
+    function renew_permutation(P)
+        global globalvars;
+        
+        if isfield(globalvars.camir, ...
+                'cvpartition_trunctrain_incsubsets');
+            warning 'renwewing permutations for train sets';
+        end
+        
+        for i = 1:P.NumTestSets
+                globalvars.camir.cvpartition_trunctrain_incsubsets.permutation(i).data = ...
+                    randperm(P.N);
+        end
+    end
+    
+    function idx = get_permutation(testId, trainSize)
+        % returns the permutation for specific test set
+        global globalvars;
+
+        idx = globalvars.camir.cvpartition_trunctrain_incsubsets.permutation(testId).data;
+        
+        % cut the permutation to contain no exxcess numbers
+        idx = idx(idx <= trainSize);
+    end
+    
+    function out = exists_permutation(P)
+        global globalvars;
+        if isfield(globalvars.camir, ...
+                'cvpartition_trunctrain_incsubsets');
+            
+            out = (numel(globalvars.camir.cvpartition_trunctrain_incsubsets.permutation) == P.NumTestSets)  ...
+                    && (numel(globalvars.camir.cvpartition_trunctrain_incsubsets.permutation(1).data) == P.N);
+
+  
+        else out = false;
+        end
+    end
+    
+end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/display_mahalanobis_metric.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+function display_mahalanobis_metric(A, labels)
+% display a mala matrix and its stats
+
+if nargin < 2
+    labels = num2cell(1:size(A,1));
+    
+elseif ~iscell(labels)
+    
+    features = labels;
+    labels = features.labels;
+end
+
+
+
+figure;
+
+% plot matrix
+imagesc(A);
+axis xy;
+
+% set labels
+set(gca,'YTick', 1:numel(labels), ...
+    'YTickLabel', labels);
+set(gca,'XTick',1:numel(labels), ...
+    'XTickLabel', labels);
+
+% ---
+% approximate parameter weights: 
+%   diagonal and sum(abs(row))
+% TODO: make nshow dependend on percentile
+% ---
+
+nshow = min(numel(labels), 50);
+figure;
+
+% get diagonal values of the Matrix
+diagw = abs(diag(A));
+
+% ---
+% weight with feature values if possible
+% ---
+if exist('features','var')
+    
+    diagw = diagw.* mean(features.vector(),2);
+end
+    
+
+[diagw, idx] = sort(diagw, 'descend');
+
+% normalise
+alld = sum(diagw);
+
+% plot
+bar(diagw(1:nshow)./ alld);
+set(gca,'XTick',1:nshow, ...
+    'XTickLabel', labels(idx(1:nshow)));
+
+ylabel ('relevance factor');
+
+if exist('features','var')
+    xlabel 'normalised weight'
+else
+    xlabel 'matrix factors'
+end
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/get_fo_deltas.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,69 @@
+function [deltas, idx, weights] = get_fo_deltas(r, X, rectify)
+% [deltas, idx, (weights)] = get_fo_deltas(r, X)
+% 
+% returns the difference vectors (dist(a,c) > dist(a,b)) 
+%  for a given ranking: 
+%  deltas{i}(:,1) = a - b, deltas{i}(:,2) = a - c; 
+%
+% set rectify to output absolute values of training examples
+
+if nargin < 3
+    rectify = 0;
+end
+
+% ---
+% NOTE: this preallocation is not complete
+% ---
+deltas = {};
+idx = {};
+weights = [];
+for i = 1:size(r,1)
+    
+    % feature index
+    a = i;
+    
+    % check if ranking is valid
+    if ~isempty(r{i,1}) && ~isempty(r{i,2})&& ...
+        isempty(intersect(r{i,1}, r{i,2}));
+    
+        % ---
+        % NOTE / TODO: the follwing is intended for compability
+        %  both sides of the ranking may have more than one entry.
+        %  for the MTT database, the ranking may be correct, but the 
+        %  inequalities build from non-singular rankings are not
+        %  based on the actual data
+        % ---
+        for j = 1:numel(r{i,1})
+            b = r{i,1}(j);
+            
+            for k = 1:numel(r{i,2})
+                c = r{i,2}(k);
+
+                % ---
+                % get vector deltas, 
+                % NOTE: first: dissimilar, then similar pair
+                % ---
+                [dac] = X(:,a) - X(:,c);
+                [dab] = X(:,a) - X(:,b);
+
+                if ~rectify
+                    deltas{end+1} = [dac dab]; 
+                else
+                    % ---
+                    % rectify the data for training
+                    % ---
+                    deltas{end+1} = abs([dac dab]); 
+                end
+                
+                idx{end+1} = {[a c],[a b]};
+                
+                % save weights
+                if size(r,2) == 3
+                    weights(end+1) = r{i,3}(1);
+                end
+            end
+        end
+    end
+end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/get_itml_deltas.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,85 @@
+function [X, C, idx] = get_itml_deltas(r, in)
+% [X, C, idx] = get_itml_deltas(r, in)
+
+%ITML Specs
+% C: 4 column matrix
+%      column 1, 2: index of constrained points.  Indexes between 1 and n
+%      column 3: 1 if points are similar, -1 if dissimilar
+%      column 4: right-hand side (lower or upper bound, depending on 
+%                   whether points are similar or dissimilar)
+%
+% X: (n x m) data matrix - each row corresponds to a single instance
+% ---
+% NOTE: X is thus input in transposed shape for the ITML algorithm
+% ---
+
+% ---
+% NOTE: this preallocation is not complete
+% ---
+X = zeros(size(in,1), 0);
+C = zeros(0,4);
+idx = zeros(0,2);
+
+for i = 1:size(r,1)
+    
+    % feature indexing
+    a = i;
+    
+    % check if ranking is valid
+    if ~isempty(r{i,1}) && ~isempty(r{i,2})&& ...
+        isempty(intersect(r{i,1}, r{i,2}));
+    
+        % ---
+        % NOTE / TODO: the follwing is intended for compability
+        %  both sides of the ranking may have more than one entry.
+        %  for the MTT database, the ranking may be correct, but the 
+        %  inequalities build from non-singular rankings are not
+        %  based on the actual data
+        % ---
+        for j = 1:numel(r{i,1})
+            b = r{i,1}(j);
+            
+            for k = 1:numel(r{i,2})
+                c = r{i,2}(k);
+
+                % ---
+                % get vector deltas
+                % ---
+                [dab] = in(:,a) - in(:,b);
+                [dac] = in(:,a) - in(:,c);
+                
+                % ---
+                % save deltas in new feature matrix
+                % TODO: this method has duplicate entries
+                %  if the pairs appear more than once
+                %  index the data set and use more efficiently!!!
+                % ---
+                X = [X dab];
+                idx(end+1,:) = [a b];
+                iab = size(idx, 1);
+                
+                X = [X dac];
+                idx(end+1,:) = [a c];
+                iac = size(idx, 1);
+                
+                % ---
+                % NOTE:
+                % in terms of the constraint,
+                %  this should mean: dac - dab >= 1
+                %
+                % 4th position cannot be 0, converges to Inf if > 1
+                % -1,-1 learns the opposite of what constraitns say
+                % ---
+                C(end+1, :) = [iab iac -1 -1];
+            end
+        end
+    end
+end
+
+% % ---
+% % NOTE: here, we transpose the X for usage i nthe training
+% % ---
+% X = X';
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/get_svmlight_inequalities_from_ranking.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,126 @@
+function [lhs, rhs, dim, factors, invalid] = get_svmlight_inequalities_from_ranking(r, X, delta_fun,delta_params)
+% [lhs, rhs] = get_svmlight_inequalities_from_ranking(r, features)
+% 
+% delta_fun.fun function pointer returning distance / delta(a, b) 
+%          for feature vectors a,b, default: delta(a, b) = (a - b).^2;
+% delta_fun.args extra arguments
+%
+% prepares ranking data to be used with the svmlight implementation
+% of Schultz & Joachims 2003
+
+% ---
+% CAVE: this file still allows arbitrary rankings
+%  this could be good but also introducing 
+%  confusion in the future.  Especially the 
+%  weightings are only defined per query 
+% ---
+
+% ---
+% variable function to get vector deltas
+% ---
+if nargin < 3
+    delta_fun = @get_delta;
+    delta_params = {[]};
+end
+
+% ---
+% fix right hand side to one
+% (after Schultz & Joachims 2003)
+% ---
+fix_rhs = 1;
+fix_weight = 1;
+
+% ---
+% NOTE: this preallocation is not complete
+% ---
+lhs = cell(0,2);
+factors = [];
+invalid = [];
+for i = 1:size(r,1)
+    
+    % feature index
+    a = i;
+    
+    % check if ranking is valid
+    if ~isempty(r{i,1}) && ~isempty(r{i,2})&& ...
+        isempty(intersect(r{i,1}, r{i,2}));
+    
+        % ---
+        % NOTE / TODO: the follwing is intended for compability
+        %  both sides of the ranking may have more than one entry.
+        %  for the MTT database, the ranking may be correct, but the 
+        %  inequalities build from non-singular rankings are not
+        %  based on the actual data
+        % ---
+        for j = 1:numel(r{i,1})
+            b = r{i,1}(j);
+            
+            for k = 1:numel(r{i,2})
+                c = r{i,2}(k);
+
+                % ---
+                % get vector deltas
+                % ---
+                [dab] = delta_fun(X(:,a), X(:,b), delta_params{:});
+                [dac] = delta_fun(X(:,a), X(:,c), delta_params{:});
+                
+                % get the delta difference vector
+                ddiff = dac - dab;
+                if i == 1
+                    dim = numel(ddiff);
+                end
+                
+                % ---
+                % save the non-empty differences row by row 
+                % NOTE: it is not clear  whether the indexing for 
+                % \omega starts a 0 or 1.
+                % ----
+                xgzero = find( ddiff ~= 0);
+                
+                if ~isempty(xgzero)
+                    lhs = cat(1,lhs,{xgzero, ddiff(xgzero)});
+                else
+                    invalid = [invalid i];
+                end
+                
+                % save factors
+                if (nargout > 2)
+                    if (size(r,2) > 2)
+                        factors = [factors, r{i,3}]; % / max_weight
+                    else
+                        factors = [factors, fix_weight];
+                    end
+                end
+                
+            end
+        end
+    end
+end
+
+% ---
+% determine right hand side
+% ---
+rhs = ones(size(lhs,1), 1) .* fix_rhs;
+cprint(2, 'SVMLight data: %d invalid rankings excluded from training set', numel(invalid));
+end
+
+
+function out = get_delta(a, b, A)
+% returns the pointwise (transformed) feature vector differences
+
+if nargin == 2 || isempty(A)
+    
+    % ---
+    % return squared factors as in euclidean distance
+    % ---
+    out = (a - b).^2;
+    
+else
+    
+    % transform vectors before accessing difference
+    out = (A' * a - A' * b).^2;
+end
+
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/mlr_repeat_YX_by_rating.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function [Yout, Xout] = mlr_repeat_YX_by_rating(Y, X, weights)
+% [Yout, Xout] = mlr_repeat_YX_by_rating(Y, X, weights)
+% 
+% repeats the data in X and Y according to the weights specified
+% in weights or Y(:,3)
+
+cprint(2, 'Repeating data for weighted learning');
+if nargin == 2
+    weights = cell2mat(Y(:,3));
+end
+
+Yout = Y(:,1:2);
+
+valid = ~(cellfun(@isempty, Y(:,1)) | cellfun(@isempty, Y(:,2)));
+
+for i = 1:size(Y, 1)
+    if valid(i)
+        for j = 2:weights(i)
+            Yout(end + 1, :) = Y(i, 1:2);
+        end
+    end
+end
+
+Xout = zeros(size(X,1), size(Y,1));
+Xout(:,1:size(X,2)) = X;
+for i = 1:size(Y, 1)
+    if valid(i)
+        for j = 2:weights(i)
+            Xout(:,end+1) = X(:,i);
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/save_svmlight_inequalities.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function success = save_svmlight_inequalities(lhs, rhs, factors, file)
+% success = save_svmlight_inequalities(lhs, rhs, file)
+%
+% saves the optimisation problem given by lhs and rhs to
+% a svmlight data file. the individual equations can 
+% be weighted using 
+%
+% success = save_svmlight_inequalities(lhs, rhs, factors, file)
+
+if nargin == 3
+    file = factors;
+    factors = [];
+end
+
+% open file
+fid = fopen(file, 'w+');
+if fid < 1 
+    success = 0;
+    return;
+end
+
+try 
+    % write individual constraint rows
+    for i = 1:size(lhs,1)
+
+        % ---
+        % print rows:" rhs #fnum:#fval #fnum:#fval #fnum:#fval ..."
+        % ---
+
+        % print right hand side
+        fprintf(fid,'%d ', rhs(i));
+
+        % print cost factors if availablefactor
+        if (numel(lhs{i,1}) > 0) && (numel(factors) >= i)
+
+            fprintf(fid,'cost:%f ', factors(i));
+        end
+
+        % print left hand side
+        for j = 1:numel(lhs{i,1})
+
+            fprintf(fid,'%d:%2.16f ', lhs{i,1}(j), lhs{i,2}(j));
+        end
+
+        % finish line
+        fprintf(fid,'\n');
+    end  
+catch
+    success = 0;
+    fclose(fid);
+    return;
+end
+success = 1;
+fclose(fid);
+
+    
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/scale_ratings.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function Y = scale_ratings(Y, max_weight)
+% [Yout, Xout] = scale_ratings(Y, max_weight)
+
+
+% get maximal weight 
+weights = cell2mat(Y(:,3));
+max_dataweight = max(weights);
+
+valid = ~(cellfun(@isempty, Y(:,1)) | cellfun(@isempty, Y(:,2)));
+
+% scale weights to a maximal value of max_weight
+for i = 1:size(Y, 1)
+     if valid(i) &&  Y{i,3} > 0
+        Y{i,3} = min(max_weight, max(1, round((Y{i,3} / max_dataweight) * max_weight)));
+     end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/sim_get_traintest_clip_overlap.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function [relative, absolute, test_cn, train_cn] =  sim_get_traintest_clip_overlap(datafile)
+%
+%  get_traintest_clip_overlap(datafile)
+%
+% returns the percentage of overlapping constraints 
+% with the corresponding training set for each test set
+% 
+% how many percent of the test set are reappearing in the training set
+
+
+% simdata = load(datafile);
+if nargin < 1
+    simdata = load('comp_partBinData_unclustered_cupaper_01');
+else
+    simdata = load(datafile);
+end
+nTestSets = size(simdata.partBinTst, 2); % num cv bins
+ntrainsizes = size(simdata.partBinTrn, 2); % num increases of training
+
+
+absolute = zeros(nTestSets, ntrainsizes);
+relative = zeros(nTestSets, ntrainsizes);
+for k = 1:nTestSets % all test/training combinatios
+    
+    % get clips of this test set
+    test_clips = unique([simdata.partBinTst{k}(:,1); simdata.partBinTst{k}(:,2); simdata.partBinTst{k}(:,3)]);
+    test_cn(k) = numel(test_clips);
+    for m = 1:ntrainsizes
+        
+        % get clips of this training set
+        train_clips = unique([simdata.partBinTrn{k,m}(:,1); simdata.partBinTrn{k,m}(:,2); simdata.partBinTrn{k,m}(:,3)]);
+        
+        % intersect both clip sets
+        same = intersect(train_clips, test_clips);
+        
+        % get stats
+        absolute(k,m) = numel(same);
+        relative(k,m) = absolute(k,m) / numel(test_clips);
+    end
+    train_cn(k) = numel(train_clips);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/svmlight2weight.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function w = svmlight2weight(modelfile)
+% returns the dual weight vecor for a given svm model
+%
+% All the script does is compute the weighted sum of the support vectors
+% (first element in line is alpha*y, what follows is the feature vector).
+% For further info, see the comment in the model file for its format. 
+
+tagstr = python('svmlight2weight.py', modelfile);
+
+[firstidx] = strfind(tagstr, '1 :');
+
+%get start of vector description
+tagstr = tagstr(firstidx:end);
+
+% parse text function output
+vecs = textscan(tagstr,'%d %f','Delimiter',':');
+
+% initialise
+w = zeros(max(vecs{1}),1);
+
+% set values
+w(vecs{1}) = vecs{2};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/svmlight2weight.py	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,93 @@
+# Compute the weight vector of linear SVM based on the model file
+# Original Perl Author: Thorsten Joachims (thorsten@joachims.org)
+# Python Version: Ori Cohen (orioric@gmail.com)
+# Call: python svm2weights.py svm_model
+
+import sys
+from operator import itemgetter
+
+try:
+    import psyco
+    psyco.full()
+except ImportError:
+    print 'Psyco not installed, the program will just run slower'
+
+def sortbyvalue(d,reverse=True):
+    ''' proposed in PEP 265, using  the itemgetter this function sorts a dictionary'''
+    return sorted(d.iteritems(), key=itemgetter(1), reverse=True)
+
+def sortbykey(d,reverse=True):
+    ''' proposed in PEP 265, using  the itemgetter this function sorts a dictionary'''
+    return sorted(d.iteritems(), key=itemgetter(0), reverse=False)
+
+def get_file():
+    """
+    Tries to extract a filename from the command line.  If none is present, it
+    assumes file to be svm_model (default svmLight output).  If the file 
+    exists, it returns it, otherwise it prints an error message and ends
+    execution. 
+    """
+    # Get the name of the data file and load it into 
+    if len(sys.argv) < 2:
+        # assume file to be svm_model (default svmLight output)
+        print "Assuming file as svm_model"
+        filename = 'svm_model' 
+        #filename = sys.stdin.readline().strip()
+    else:
+        filename = sys.argv[1]
+
+    
+    try:
+        f = open(filename, "r")
+    except IOError:
+        print "Error: The file '%s' was not found on this system." % filename
+        sys.exit(0)
+
+    return f
+
+
+
+
+if __name__ == "__main__":
+    f = get_file()
+    i=0
+    lines = f.readlines()
+    printOutput = True
+    w = {}
+    for line in lines:
+        if i>10:
+            features = line[:line.find('#')-1]
+            comments = line[line.find('#'):]
+            alpha = features[:features.find(' ')]
+            feat = features[features.find(' ')+1:]
+            for p in feat.split(' '): # Changed the code here. 
+                a,v = p.split(':')
+                if not (int(a) in w):
+                    w[int(a)] = 0
+            for p in feat.split(' '): 
+                a,v = p.split(':')
+                w[int(a)] +=float(alpha)*float(v)
+        elif i==1:
+            if line.find('0')==-1:
+                print 'Not linear Kernel!\n'
+                printOutput = False
+                break
+        elif i==10:
+            if line.find('threshold b')==-1:
+                print "Parsing error!\n"
+                printOutput = False
+                break
+        
+        i+=1    
+    f.close()
+
+    #if you need to sort the features by value and not by feature ID then use this line intead:
+    #ws = sortbyvalue(w) 
+    
+    ws = sortbykey(w)
+    if printOutput == True:
+        for (i,j) in ws:
+            print i,':',j
+            i+=1
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/machine_learning/weighted_kmeans.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,163 @@
+function [centres, cweights, post, errlog, options] = weighted_kmeans(centres, data, weights, options)
+%[centres, cweights, post, errlog, options] = weighted_kmeans(centres,data, weights, options)
+%
+% weighted_kmeans	Trains a k means cluster model on weighted input vectors
+%
+% Adapted from the Netlab Toolbox by Daniel Wolff,
+% This function takes a WEIGHTS vector, containing weights for the 
+% different data points. This can be used for training with varying 
+% discretisation intervals.
+%
+%	Description
+%	 CENTRES = weighted_kmeans(NCENTRES, DATA, WEIGHTS, OPTIONS) or
+%    CENTRES = weighted_kmeans(CENTRES, DATA, WEIGHTS, OPTIONS) uses the batch K-means
+%	algorithm to set the centres of a cluster model. The matrix DATA
+%	represents the data which is being clustered, with each row
+%	corresponding to a vector. The sum of squares error function is used.
+%	The point at which a local minimum is achieved is returned as
+%	CENTRES.  The error value at that point is returned in OPTIONS(8).
+% 
+%
+%	POST and ERRLOG
+%	also return the cluster number (in a one-of-N encoding) for each
+%	data point in POST and a log of the error values after each cycle in
+%	ERRLOG.    The optional parameters have the following
+%	interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values; also logs error
+%	values in the return argument ERRLOG. If OPTIONS(1) is set to 0, then
+%	only warning messages are displayed.  If OPTIONS(1) is -1, then
+%	nothing is displayed.
+%
+%	OPTIONS(2) is a measure of the absolute precision required for the
+%	value of CENTRES at the solution.  If the absolute difference between
+%	the values of CENTRES between two successive steps is less than
+%	OPTIONS(2), then this condition is satisfied.
+%
+%	OPTIONS(3) is a measure of the precision required of the error
+%	function at the solution.  If the absolute difference between the
+%	error functions between two successive steps is less than OPTIONS(3),
+%	then this condition is satisfied. Both this and the previous
+%	condition must be satisfied for termination.
+%
+%	OPTIONS(14) is the maximum number of iterations; default 100.
+%
+%	See also
+%	GMMINIT, GMMEM
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[ndata, data_dim] = size(data);
+[ncentres, dim] = size(centres);
+
+if dim ~= data_dim
+    if dim == 1 && ncentres == 1 && centres > 1
+        
+        if ndata == numel(weights)
+        
+            % ---
+            % allow for number of centres specification
+            % ---
+            dim = data_dim;
+            ncentres = centres;
+
+            options(5) = 1;
+        else
+            error('Data dimension does not match number of weights')
+        end
+        
+    else
+        error('Data dimension does not match dimension of centres')
+    end
+end
+
+if (ncentres > ndata)
+  error('More centres than data')
+end
+
+% Sort out the options
+if (options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+
+store = 0;
+if (nargout > 3)
+  store = 1;
+  errlog = zeros(1, niters);
+end
+
+% Check if centres and posteriors need to be initialised from data
+if (options(5) == 1)
+  % Do the initialisation
+  perm = randperm(ndata);
+  perm = perm(1:ncentres);
+
+  % Assign first ncentres (permuted) data points as centres
+  centres = data(perm, :);
+end
+% Matrix to make unit vectors easy to construct
+id = eye(ncentres);
+
+% save accumulated weight for a center
+cweights = zeros(ncentres, 1);
+
+% Main loop of algorithm
+for n = 1:niters
+
+  % Save old centres to check for termination
+  old_centres = centres;
+  
+  % Calculate posteriors based on existing centres
+  d2 = dist2(data, centres);
+  % Assign each point to nearest centre
+  [minvals, index] = min(d2', [], 1);
+  post = logical(id(index,:));
+
+  % num_points = sum(post, 1);
+  % Adjust the centres based on new posteriors
+  for j = 1:ncentres
+    if (sum(weights(post(:,j))) > 0)
+        % ---
+        % NOTE: this is edited to include the weights.
+        % Instead of summing the vectors directly, the vectors are weighted
+        % and then the result is divided by the sum of the weights instead
+        % of the number of vectors for this class
+        % ---
+      cweights(j) = sum(weights(post(:,j)));
+      
+      centres(j,:) = sum(diag(weights(post(:,j))) * data(post(:,j),:), 1)...
+          /cweights(j);
+    end
+  end
+  
+  % Error value is total squared distance from cluster centres
+  % edit: weighted by the vectors weight
+  e = sum(minvals .* weights);
+  if store
+    errlog(n) = e;
+  end
+  if options(1) > 0
+    fprintf(1, 'Cycle %4d  Error %11.6f\n', n, e);
+  end
+
+  if n > 1
+    % Test for termination
+    if max(max(abs(centres - old_centres))) < options(2) & ...
+        abs(old_e - e) < options(3)
+      options(8) = e;
+      return;
+    end
+  end
+  old_e = e;
+end
+
+% If we get here, then we haven't terminated in the given number of 
+% iterations.
+options(8) = e;
+if (options(1) >= 0)
+  disp(maxitmess);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/matrix2latex.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,133 @@
+function s = latex(M,varargin)
+%LATEX   Print a matrix in LaTeX tabular format.
+%   LATEX(M) prints out the numeric matrix M in a LaTeX tabular
+%   format. The '&' character appears between entries in a row, '\\'
+%   is appended to the ends of rows, and each entry is set in math
+%   mode. Complex numbers are understood, and exponentials will be
+%   converted to a suitable format.
+%
+%   LATEX(M,'nomath') does not include the $$ needed to put each 
+%   entry in math mode (e.g., for use with the amsmath matrix modes).
+%   
+%   LATEX(M,FMT) uses a format specifier FMT of the SPRINTF type for
+%   each entry.
+%   
+%   LATEX(M,FMT1,FMT2,...) works through the given format specifiers
+%   on each row of M. If fewer are given than the column size of M,
+%   the last is used repeatedly for the rest of the row.
+%   
+%   S = LATEX(M,...) does not display output but returns a character
+%   array S.
+%   
+%   Examples:
+%     latex( magic(4) )
+%     latex( magic(4), '%i', 'nomath' )
+%     latex( magic(4), '%i', '%.2f' )
+%   
+%   See also SPRINTF, SYM/LATEX.
+
+%   Copyright 2002 by Toby Driscoll. Last updated 12/06/02.
+
+if ~isa(M,'double')
+  error('Works only for arrays of numbers.')
+elseif ndims(M) > 2
+  error('Works only for 2D arrays.')
+end
+
+if nargin < 2
+  fmt = {'%#.5g'};
+  mathstr = '$';
+else
+  fmt = varargin;
+  idx = strmatch('nomath',fmt);
+  if isempty(idx)
+    mathstr = '$';
+  else  
+    mathstr = '';
+    fmt = fmt([1:idx-1 idx+1:end]);
+    if isempty(fmt), fmt = {'%#.5g'}; end
+  end 
+end
+
+% Extend the format specifiers.
+[m,n] = size(M);
+if n > length(fmt)
+  [fmt{end:n}] = deal(fmt{end});
+end
+  
+% Create one format for a row.
+rowfmt = '';
+for p = 1:n
+  % Remove blanks.
+  thisfmt = deblank(fmt{p});
+
+  % Add on imaginary part if needed.
+  if ~isreal(M(:,p)) 
+    % Use the same format as for the real part, but force a + sign for
+    % positive numbers. 
+    ifmt = thisfmt;
+    j = findstr(ifmt,'%');
+    if ~any(strcmp(ifmt(j+1),['-';'+';' ';'#']))
+      ifmt = [ifmt(1:j) '+' ifmt(j+1:end)];
+    else
+      ifmt(j+1) = '+';
+    end
+    ifmt = [ifmt 'i'];
+    thisfmt = [thisfmt ifmt];
+  end
+
+  % Add to row.
+  rowfmt = [rowfmt mathstr thisfmt mathstr ' & '];
+end
+
+% After last column, remove column separator and put in newline.
+rowfmt(end-1:end) = [];
+rowfmt = [rowfmt '\\\\\n'];
+
+% Use it.
+A = M.';
+if isreal(M)
+  S = sprintf(rowfmt,A);
+else
+  S = sprintf(rowfmt,[real(A(:)) imag(A(:))].');
+end
+
+% Remove extraneous imaginary part for real entries.
+if ~isreal(M)
+  zi = sprintf(ifmt,0);
+  S = strrep(S,zi,blanks(length(zi)));
+end
+
+% Remove NaNs.
+S = strrep(S,'$NaN$','--');
+S = strrep(S,'NaN','--');
+
+% Convert 'e' exponents to LaTeX form. This is probably really slow, but
+% what can you do without regular expressions?
+S = strrep(S,'e','E');
+ex = min(findstr(S,'E'));
+while ~isempty(ex)
+  % Find first non-digit character. Where is ISDIGIT?
+  j = ex+2;
+  while ~isempty(str2num(S(j))) & ~strcmp(S(j),'i')
+    j = j+1;
+  end
+
+  % This strips off leading '+' and zeros.
+  num = sprintf('%i',str2num(S(ex+1:j-1)));
+  
+  ee = ['\times 10^{' num '}'];
+  S = [S(1:ex-1) ee S(j:end)];
+  
+  ex = ex + min(findstr(S(ex+1:end),'E'));
+end
+
+% For good form, remove that last '\\'.
+S(end-2:end-1) = '  ';
+
+% Display or output?
+if nargout==0
+  disp(S)
+else
+  s = S;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/migrate_to_test_dir.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+function out = migrate_to_test_dir(varargin)
+%
+%  out = migrate_to_test_dir('testname', 'this is a test description')
+%
+% or 
+% 
+%  out = migrate_to_test_dir('fixedtestdir', 'dirname')
+%
+% create test run directory, add current dir to path and move
+% into test run dir
+%
+% NOTE: the test directory is created in "globalvars.testdatadir" if set
+%
+
+global globalvars;
+
+[sTest,fixedtestdir, unused] = process_options(varargin, ...
+                         'testname', '','fixedtestdir', '');
+
+% use starting script name as description if none is given
+if isempty(sTest)
+    [ST, I] = dbstack();
+    sTest = ST(end).name;
+end
+
+
+% switch to test directory, and add this or current dir to path
+if ~isempty(globalvars.tstoutputpath) && ~isempty(dir(globalvars.tstoutputpath));
+    addpath(globalvars.tstoutputpath);
+    cd(globalvars.tstoutputpath);
+else
+    addpath(pwd);
+end
+
+% get camir version
+[~,cv] = camirversion();
+
+% get current date
+sDate = datestr(now,'yymmdd');
+
+if isempty(fixedtestdir)
+    newdir = sprintf('%s_%s_r%d',sDate,sTest,cv);
+else
+    newdir = fixedtestdir;
+end
+
+% create dir if not existent
+if isempty(dir(newdir));
+   mkdir(newdir);
+end
+
+cd(newdir);
+if ~isempty(strfind(pwd, newdir))
+    out = newdir;
+else
+    warning 'cannot migrate to specified test directory, Ill dump right here';
+    out = -1;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/param_combinations.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function combis = param_combinations(params, pos)
+% given a param struct with multiple options for diverse
+% parameters, param_combinations(params) returns all 
+% valid combinations of the param sets
+
+if nargin < 2
+    pos = 1;
+end
+
+% get available fields
+fields = fieldnames(params);
+
+nparams = params;
+    if pos <= numel(fields)
+        
+        for j = 1:numel(params.(fields{pos}))
+
+            % ---
+            % successively ralter the params struct,
+            % choosing one of the options
+            % ---
+            if ~iscell(params.(fields{pos}))
+                
+                nparams.(fields{pos}) = params.(fields{pos})(j);
+            else
+                
+                nparams.(fields{pos}) = params.(fields{pos}){j};
+            end
+            
+            if j == 1
+                combis = param_combinations(nparams, pos + 1);
+                
+            else
+                
+                % gather the resulting configurations, in reverse order 
+                % regarding the recursion
+                combis = cat(1, param_combinations(nparams, pos + 1), combis);
+            end
+        end
+    else
+        % we have reached the leaves, containing single combinations
+        combis = nparams;
+    end    
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/print_error.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function out = print_error(err)
+% ---
+% print error messages
+% and following lines: stack
+% ---
+out.msg = sprintf('%s\n',err.message);
+if nargout < 1 
+    fprintf(out.msg);
+end
+
+for e = 1:length(err.stack)
+  out.line{e} = sprintf('%s at %i\n',err.stack(e).name, err.stack(e).line);
+  if nargout < 1 
+      fprintf(out.line{e});
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/python.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+function [result status] = python(varargin)
+%python Execute python command and return the result.
+%   python(pythonFILE) calls python script specified by the file pythonFILE
+%   using appropriate python executable.
+%
+%   python(pythonFILE,ARG1,ARG2,...) passes the arguments ARG1,ARG2,...
+%   to the python script file pythonFILE, and calls it by using appropriate
+%   python executable.
+%
+%   RESULT=python(...) outputs the result of attempted python call.  If the
+%   exit status of python is not zero, an error will be returned.
+%
+%   [RESULT,STATUS] = python(...) outputs the result of the python call, and
+%   also saves its exit status into variable STATUS. 
+% 
+%   See also SYSTEM, JAVA, MEX.
+
+%   Copyright 1990-2007 The MathWorks, Inc.
+%   $Revision: 1.1.4.8 $
+
+cmdString = '';
+
+% Add input to arguments to operating system command to be executed.
+% (If an argument refers to a file on the MATLAB path, use full file path.)
+for i = 1:nargin
+    thisArg = varargin{i};
+    if isempty(thisArg) || ~ischar(thisArg)
+        error('MATLAB:perl:InputsMustBeStrings', 'All input arguments must be valid strings.');
+    end
+    if i==1
+        if exist(thisArg, 'file')==2
+            % This is a valid file on the MATLAB path
+            if isempty(dir(thisArg))
+                % Not complete file specification
+                % - file is not in current directory
+                % - OR filename specified without extension
+                % ==> get full file path
+                thisArg = which(thisArg);
+            end
+        else
+            % First input argument is pythonFile - it must be a valid file
+            error('MATLAB:perl:FileNotFound', 'Unable to find python file: %s', thisArg);
+        end
+    end
+  
+  % Wrap thisArg in double quotes if it contains spaces
+  if any(thisArg == ' ')
+    thisArg = ['"', thisArg, '"'];
+  end
+  
+  % Add argument to command string
+  cmdString = [cmdString, ' ', thisArg];
+end
+
+% Execute python script
+errTxtNoPerl = 'Unable to find python executable.';
+
+if isempty(cmdString)
+  error('MATLAB:perl:NoPerlCommand', 'No python command specified');
+elseif ispc
+  % PC
+  perlCmd = []; % fullfile('C:\Program Files (x86)\Python3x');
+  cmdString = ['python' cmdString];	 
+  perlCmd = ['set PATH=',perlCmd, ';%PATH%&' cmdString];
+  [status, result] = dos(perlCmd);
+else
+  [status ignore] = unix('which python'); %#ok
+  if (status == 0)
+    cmdString = ['python', cmdString];
+    [status, result] = unix(cmdString);
+  else
+    error('MATLAB:python:NoExecutable', errTxtNoPython);
+  end
+end
+
+% Check for errors in shell command
+if nargout < 2 && status~=0
+  error('MATLAB:perl:ExecutionError', ...
+        'System error: %sCommand executed: %s', result, cmdString);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/reset_now.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+% reset_now.m
+global globalvars;
+cd(globalvars.camir.path)
+cd ..
+cd ..
+clear;
+clear global;
+clear all;
+clear global;
+clear;
+ 
+startup;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/sappend.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function target = sappend(target, source)
+% target = sappend(target, source)
+%
+% appends source to target
+% target = [] or struct(), source = struct()
+% 
+% updates the srtuct target by adding the source strut at its end
+% if target = [], it is initialised by the first struct in source
+
+
+if isempty(target)
+    target = source(1);
+    starti = 2;
+else
+    starti = 1;
+end
+
+for i = starti:numel(source)
+    target(end+1) = source(i);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/sqlescape.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function out = sqlescape(in)
+
+out = strrep(in, '''', '''''');
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/strcell2matrix.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function [out] = strcell2matrix(in, start, finish)
+%
+% out = strcell2matrix(in,start)
+%
+% in: cell array containing string numbers (from csv2cell) 
+% start: start offset of first number [row, column]
+% finish: end offset
+
+% e.g. annots = strcell2matrix(annotations_final,[1 0], [0 0])
+
+if nargin == 1
+    start = [0 0];
+    finish = [0 0];
+end
+
+if nargin == 2
+     finish = [0 0];
+end
+
+
+% ---
+% Get the data and ignore the rest
+% ---
+out = zeros(size(in) - start - finish);
+
+
+for i = (1 + start(1)):size(in,1) - finish(1)
+    for j = (1 + start(1)):size(in,2) - finish(2)
+        
+        out(i - start(1), j - start(2)) = str2double(in{i,j});
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/strcellfind.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function out = strcellfind(strdb, str, findAll)
+% out = strcellfind(strdb, str)
+% 
+% finds a string within an cell array of strings
+% only outputs the first occurence, unless
+% findAll is set to true
+%
+% strcellfind is NOT CASE sensitive
+
+if nargin < 3
+    findAll = 0;
+end
+
+out = [];
+for i = 1:length(strdb)
+    if strcmpi( lower(char(strdb{i})), lower(char(str))) == 1;
+        if ~findAll
+            out = i;
+            return;
+        else
+            out(end+1) = i;
+        end
+    end
+end
+% ---
+% NOTE: Bad backwards compability
+% ---
+% if isempty(out)
+%     out = -1;
+% end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/substrcellfind.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function [idx, strpos] = substrcellfind(strdb, str, findAll)
+% [idx, strpos] = substrcellfind(strdb, str)
+% 
+% finds a string within an cell array of strings
+% only outputs the first occurence, unless
+% findAll is set to true
+%
+% substrcellfind is NOT CASE sensitive
+
+if nargin < 3
+    findAll = 0;
+end
+
+idx = [];
+strpos = [];
+for i = 1:length(strdb)
+    
+    % search string in cell db
+    tpos = strfind(lower(char(strdb{i})), lower(str));
+    
+    if ~isempty(tpos)
+        
+        strpos(end+1) = tpos;
+        
+         if ~findAll
+
+            idx = i;
+            return;
+        else
+            idx(end+1) = i;
+        end
+    end
+end
+
+% if isempty(idx) 
+%     idx = -1;
+% end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/test_generic_significance_signrank.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,88 @@
+function [p, med, avg, stats] = test_generic_significance_signrank(file1,run1,file2,run2, weighted, mode)
+% 
+% [p, med] = test_generic_get_signrank(input1, run1, input2, run2, weighted, mode)
+%
+% @param mode: string determining the way results are preprocessed: 
+%              '', 'avgbase', {'join_datasets',[sets2join]}           
+%
+% get wilcoxon signed rank of two test runs
+
+if nargin < 5
+    weighted = 0;
+end
+if nargin < 6
+    avgbase = 0;
+end
+
+
+
+% get individual cross-validation results
+[out1, ~, ~, indi1] = test_generic_display_results(file1, 0, 0);
+
+[out2, ~, ~, indi2] = test_generic_display_results(file2, 0, 0);
+switch mode
+    case 'avgbase'
+    
+        %out2(run2).mean_ok_test
+        perf1 = indi1(run1).diag.ok_test(weighted+1,:);
+        perf2 = indi2(run2).diag.ok_test(weighted+1,:);
+        p2avg = mean(perf2);
+        perf_diffs = perf1 - p2avg;
+
+
+    case 'join_datasets'
+        %out2(run2).mean_ok_test
+        
+        % get the dataset indices which are to join
+        if isempty(run1) | (run1 < 1)
+            sets2join1 = 1:numel(indi1);
+        else
+            sets2join1 = run1;
+        end
+        if isempty(run2) | (run2 < 1)
+            sets2join2 = 1:numel(indi2);
+        else
+            sets2join2 = run2;
+        end
+        
+        perf1 = join_datasets(indi1,weighted,sets2join1);
+        perf2 = join_datasets(indi2,weighted,sets2join2);
+        perf_diffs = perf1 - perf2;
+
+    otherwise
+        % get difference of individual results
+        perf_diffs = indi1(run1).diag.ok_test(weighted+1,:) - indi2(run2).diag.ok_test(weighted+1,:);       
+end
+
+[p, h, stats] = signrank(perf_diffs );
+% [p, h] = signtest(perf1,perf2);
+% [h, p, stats] = kstest2(perf1,perf2);
+% [h2,p2] = ttest(perf_diffs);
+        
+% get median of performance difference
+med = median(perf_diffs);
+
+% get median of performance difference
+avg = mean(perf_diffs);
+
+% output interpretation
+if h && med > 0
+    fprintf('input 1 >> input 2 :)\n');
+elseif h && med < 0
+    fprintf('input 2 >> input 1 ;)\n');
+else
+    fprintf('no significant difference :( \n');
+end
+
+
+% ---
+% joins the test data to a single performance vector
+% ---
+function perf = join_datasets(indi,weighted, sets2join)
+perf = [];
+
+for i = sets2join
+    perf = [perf indi(i).diag.ok_test(weighted+1,:)];
+end
+    
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/uimage.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,132 @@
+function h = uimage(varargin)
+%UIMAGE  Display image with uneven axis.
+%   UIMAGE(X,Y,C) displays matrix C as an image, using the vectors X and
+%   Y to specify the X and Y coordinates. X and Y may be unevenly spaced
+%   vectors, but must be increasing. The size of C must be LENGTH(Y)*
+%   LENGTH(X). (Most probably you'll want to display C' instead of C).
+%
+%   Contrary to Matlab's original IMAGE function, here the vectors X and Y
+%   do not need to be linearly spaced. Whereas IMAGE linearly interpolates
+%   the X-axis between X(1) and X(end), ignoring all other values (idem
+%   for Y), UIMAGE allows for X and/or Y to be unevenly spaced vectors, by
+%   locally stretching the matrix C (ie, by duplicating some elements of C)
+%   for larger X and/or Y intervals.
+%
+%   The syntax for UIMAGE(X,Y,C,...) is the same as IMAGE(X,Y,C,...)
+%   (all the remaining arguments, eg 'PropertyName'-PropertyValue pairs,
+%   are passed to IMAGE). See IMAGE for details.
+%
+%   Use UIMAGESC to scale the data using the full colormap. The syntax for
+%   UIMAGESC(X,Y,C,...) is the same as IMAGESC(X,Y,C,...).
+%
+%   Typical uses:
+%      - Plotting a spatio-temporal diagram (T,X), with unevenly spaced
+%      time intervals for T (eg, when some values are missing, or when
+%      using a non-constant sampling rate).
+%      - Plotting a set of power spectra with frequency in log-scale.
+%
+%   h = UIMAGE(X,Y,C,...) returns a handle to the image.
+%
+%   Example:
+%     c = randn(50,20);         % Random 50x20 matrix
+%     x = logspace(1,3,50);     % log-spaced X-axis, between 10 and 1000
+%     y = linspace(3,8,20);     % lin-spaced Y-axis, between 3 and 8
+%     uimagesc(x,y,c');         % displays the matrix
+%
+%   F. Moisy
+%   Revision: 1.03,  Date: 2006/06/14.
+%
+%   See also IMAGE, IMAGESC, UIMAGESC.
+
+
+% History:
+% 2006/06/12: v1.00, first version.
+% 2006/06/14: v1.03, minor bug fixed; works in ML6.
+
+error(nargchk(3,inf,nargin));
+
+% maximum number of matrix elements to interpolate the uneven axis
+% (typically between 500 and 5000):
+nmax = 2000; 
+
+x = varargin{1};
+y = varargin{2};
+c = varargin{3};
+
+if any(diff(x)<=0) || any(diff(y)<=0)
+    error('The X and Y axis should be increasing.');
+end
+
+dx = min(diff(x));                   % smallest interval for X
+dy = min(diff(y));                   % smallest interval for Y
+
+% test if X and Y are linearly spaced (to within 10^-12):
+evenx = all(abs(diff(x)/dx-1)<1e-12);     % true if X is linearly spaced
+eveny = all(abs(diff(y)/dy-1)<1e-12);     % true if Y is linearly spaced
+
+
+if evenx && eveny         % X and Y both evenly spaced
+
+    xe = x;
+    ye = y;
+    ce = c;
+
+elseif evenx && ~eveny    % X even and Y uneven
+    
+    nx = length(x);
+    xe = x;
+
+    ny = ceil(1 + (y(end) - y(1))/dy);   % number of points for Y
+    ny = min(ny, nmax);
+    ye = linspace(y(1), y(end), ny);
+
+    ce = zeros(ny,nx);
+
+    for j=1:ny
+        indj = find(y<=ye(j));
+        ce(j,1:nx) = c(indj(end), 1:nx);
+    end;
+
+elseif ~evenx && eveny    % X uneven and Y even
+    
+    nx = ceil(1 + (x(end) - x(1))/dx);   % number of points for X
+    nx = min(nx, nmax);
+    xe = linspace(x(1), x(end), nx);
+
+    ny = length(y);
+    ye = y;
+
+    ce = zeros(ny,nx);
+
+    for i=1:nx
+        indi = find(x<=xe(i));
+        ce(1:ny,i) = c(1:ny, indi(end));
+    end;
+
+elseif ~evenx && ~eveny   % X and Y both uneven
+    
+    nx = ceil(1 + (x(end) - x(1))/dx);   % number of points for X
+    nx = min(nx, nmax);
+    xe = linspace(x(1), x(end), nx);
+
+    ny = ceil(1 + (y(end) - y(1))/dy);   % number of points for Y
+    ny = min(ny, nmax);
+    ye = linspace(y(1), y(end), ny);
+
+    ce = zeros(ny,nx);
+
+    for i=1:nx
+        for j=1:ny
+            indi = find(x<=xe(i));
+            indj = find(y<=ye(j));
+            ce(j,i) = c(indi(end), indj(end));
+        end;
+    end;
+
+end
+
+hh = image(xe, ye, ce, varargin{4:end});
+
+if nargout>0
+    h = hh;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/uimagesc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function h = uimagesc(varargin)
+%UIMAGESC  Display scaled image with uneven axis.
+%   UIMAGESC(...) is the same as UIMAGE(...) except the data is scaled
+%   to use the full colormap. See UIMAGE for details.
+%
+%   Note: UIMAGESC is based on Matlab's original IMAGESC, Revision 5.11.4.5.
+%   UIMAGESC simply calls UIMAGE with a scaled colormap.
+% 
+%   F. Moisy - adapted from TMW
+%   Revision: 1.01,  Date: 2006/06/13.
+%
+%   See also IMAGE, IMAGESC, UIMAGE.
+
+% History:
+% 2006/06/12: v1.00, first version.
+
+clim = [];
+switch (nargin),
+  case 0,
+    hh = uimage('CDataMapping','scaled');
+  case 1,
+    hh = uimage(varargin{1},'CDataMapping','scaled');
+  case 3,
+    hh = uimage(varargin{:},'CDataMapping','scaled');
+  otherwise,
+
+    % Determine if last input is clim
+    if isequal(size(varargin{end}),[1 2])
+      str = false(length(varargin),1);
+      for n=1:length(varargin)
+        str(n) = ischar(varargin{n});
+      end
+      str = find(str);
+      if isempty(str) || (rem(length(varargin)-min(str),2)==0),
+        clim = varargin{end};
+        varargin(end) = []; % Remove last cell
+      else
+        clim = [];
+      end
+    else
+      clim = [];
+    end
+    hh = uimage(varargin{:},'CDataMapping','scaled');
+end
+
+% Get the parent Axes of the image
+cax = ancestor(hh,'axes');
+
+if ~isempty(clim),
+  set(cax,'CLim',clim)
+elseif ~ishold(cax),
+  set(cax,'CLimMode','auto')
+end
+
+if nargout > 0
+    h = hh;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/uplot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,195 @@
+function han = uplot(varargin)
+% UPLOT  Plot of double and FRD data.
+%
+% UPLOT([plot_type],SYS1,SYS2,SYS3, ...)
+% UPLOT([plot_type],[1 10],[.1 5],SYS1, ...)
+% UPLOT([plot_type],SYS1,'linetype1',SYS2,'linetype2',...)
+%
+% Plot double and FRD objects.  The syntax is the same as the MATLAB
+% plot command except that all data is contained in SYSi, and the 
+% axes are specified by PLOT_TYPE.
+%
+% The (optional) plot_type argument must be one of:
+%
+%   'iv,d'       matin .vs. independent variable (default option)
+%   'iv,m'       magnitude .vs. independent variable
+%   'iv,lm'      log(magnitude) .vs. independent variable
+%   'iv,p'       phase .vs. independent variable
+%   'liv,d'      matin .vs. log(independent variable)
+%   'liv,m'      magnitude .vs. log(independent variable)
+%   'liv,lm'     log(magnitude) .vs. log(independent variable)
+%   'liv,p'      phase .vs. log(independent variable)
+%   'nyq'        real .vs. imaginary  (parametrized by indep variable)
+%   'nic'        Nichols chart
+%   'bode'       Bode magnitude and phase plots
+%
+%See also: BODE, LOGLOG, PLOT, NICHOLS, NYQUIST, SEMILOGX, SEMILOGY, SIGMA.
+
+% Copyright 2004 The MathWorks, Inc.
+
+nin = nargin;
+if isa(varargin{1},'char')
+   plottype = varargin{1};
+   sidx = 2;
+else
+   plottype = 'iv,d';
+   sidx = 1;
+end
+
+argcell = cell(0,1);
+cnt = 1;
+cflag = 0;
+dflag = 0;
+ydataloc = [];
+for i=sidx:nin
+   arg = varargin{i};
+   switch class(arg)
+   case 'frd'
+      if dflag==1
+         error('Double data must come in pairs');
+      else
+         cflag = 0;
+         szm = size(arg);
+         if length(szm)==2
+            npts = length(arg.Frequency);
+            ydata = reshape(arg.ResponseData,[szm(1)*szm(2) npts]).';
+            xdata = arg.Frequency;
+            argcell = [argcell;{xdata};{ydata}];
+            ydataloc = [ydataloc;cnt+1];
+            cnt = cnt + 2;
+         else
+            nad = length(szm) - 2;
+            npts = length(arg.Frequency);
+            tmp = permute(arg.ResponseData,[1 2 4:4+nad-1 3]);
+            ydata = reshape(tmp,[prod(szm) npts]).';
+            xdata = arg.Frequency;
+            argcell = [argcell;{xdata};{ydata}];
+            ydataloc = [ydataloc;cnt+1];
+            cnt = cnt + 2;
+         end
+      end
+   case 'char'
+      if dflag==1
+         error('Double data must come in pairs');
+      else
+         if cflag==0
+            argcell = [argcell;{arg}];
+            cnt = cnt + 1;
+            cflag = 1;
+         else
+            error('Never have 2 chars in a row');
+         end
+      end
+   case 'double'
+      cflag = 0;
+      if dflag==0 % think xdata
+         argcell = [argcell;{arg}];
+         cnt = cnt + 1;
+         dflag = 1;
+      elseif dflag==1 % think ydata
+         argcell = [argcell;{arg}];
+         ydataloc = [ydataloc;cnt];
+         cnt = cnt + 1;
+         dflag = 0;
+      end
+   otherwise
+      if isuncertain(arg)
+         error('Cannot plot uncertain matrices or systems');
+      else
+         error('Cannot plot this type of data');
+      end
+   end
+end
+xmin = inf;
+xmax = -inf;
+for i=1:length(ydataloc)
+   xmin = min([xmin min(argcell{ydataloc(i)-1})]);
+   xmax = max([xmax max(argcell{ydataloc(i)-1})]);
+end
+for i=1:length(ydataloc)
+   if length(argcell{ydataloc(i)})==1
+      argcell{ydataloc(i)} = [argcell{ydataloc(i)} argcell{ydataloc(i)}];
+      argcell{ydataloc(i)-1} = [xmin xmax];
+   end
+end
+      
+switch plottype
+case 'iv,d'
+   h = plot(argcell{:});
+case 'iv,m'
+   for i=1:length(ydataloc)
+      argcell{ydataloc(i)} = abs(argcell{ydataloc(i)});
+   end
+   h = plot(argcell{:});
+case 'iv,lm'
+   for i=1:length(ydataloc)
+      argcell{ydataloc(i)} = abs(argcell{ydataloc(i)});
+   end
+   h = semilogy(argcell{:});
+case 'iv,p'
+   for i=1:length(ydataloc)
+      argcell{ydataloc(i)} = (180/pi)*angle(argcell{ydataloc(i)});
+   end
+   h = plot(argcell{:});
+case 'liv,d'
+   h = semilogx(argcell{:});
+case 'liv,ld'
+   h = loglog(argcell{:});
+case 'liv,m'
+   for i=1:length(ydataloc)
+      argcell{ydataloc(i)} = abs(argcell{ydataloc(i)});
+   end
+   h = semilogx(argcell{:});
+case 'liv,lm'
+   for i=1:length(ydataloc)
+      argcell{ydataloc(i)} = abs(argcell{ydataloc(i)});
+   end
+   h = loglog(argcell{:});
+case 'liv,p'
+   for i=1:length(ydataloc)
+      argcell{ydataloc(i)} = (180/pi)*angle(argcell{ydataloc(i)});
+   end
+   h = semilogx(argcell{:});
+case {'nyq'}
+   for i=1:length(ydataloc)
+      %x-data, real part
+      argcell{ydataloc(i)-1} = real(argcell{ydataloc(i)});
+      argcell{ydataloc(i)}   = imag(argcell{ydataloc(i)});
+   end
+   h = plot(argcell{:});
+case {'ri'}
+   for i=1:length(ydataloc)
+      %x-data, real part
+      argcell{ydataloc(i)-1} = real(argcell{ydataloc(i)});
+      %y-data, imag part
+      argcell{ydataloc(i)}   = imag(argcell{ydataloc(i)});
+   end
+   h = plot(argcell{:});
+case {'nic'}
+   for i=1:length(ydataloc)
+      %x-data, imag part
+      argcell{ydataloc(i)-1} = 360/(2*pi)*negangle(argcell{ydataloc(i)});
+      %y-data, real part
+      argcell{ydataloc(i)}   = 20*log10(abs(argcell{ydataloc(i)}));
+   end
+   h = plot(argcell{:});
+case 'bode'
+   subplot(2,1,1)
+   magcell = argcell;
+   for i=1:length(ydataloc)
+      magcell{ydataloc(i)} = abs(magcell{ydataloc(i)});
+   end
+   hm = loglog(magcell{:});
+   subplot(2,1,2)
+   for i=1:length(ydataloc)
+      argcell{ydataloc(i)} = (180/pi)*angle(argcell{ydataloc(i)});
+   end
+   hp = semilogx(argcell{:});
+   h = [hm;hp];
+otherwise
+   error('invalid plot type');
+end
+      
+if nargout==1
+   han = h;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/write_mat_results_ismir12.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+function write_mat_results_ismir12(filein, subrun, fileout)
+% write_mat_resutls_ismir12(filein, subrun, fileout)
+%
+% write results from result file into ismir12 generic format.
+% if subrun is a vector, the results are averaged over the 
+% runs specified
+
+
+[out, stats, features, individual] = test_generic_display_results(filein, 0);
+
+% ---
+% we get the single individual values and 
+% ---
+for i = 1:numel(subrun)
+    individual = individual(subrun);
+    
+    % number of inctrain cycles
+    n_inctrain = numel(individual.diag.inctrain);
+
+    % ---
+    % ok_train_unused
+    % ---
+    values_ok_train_unused{i} = reshape([individual.diag.inctrain.ok_notin_train], [],n_inctrain);
+    values_ok_train_unused{i} = values_ok_train_unused(1:2:end,:).*100;
+
+    mean_ok_train_unused{i} = mean(values_ok_train_unused, 1);
+    var_ok_train_unused{i} = var(values_ok_train_unused,[], 1);
+
+    % ---
+    % ok_train
+    % ---
+    values_ok_train{i} = reshape([individual.diag.inctrain.ok_train], [],n_inctrain);
+    values_ok_train{i} = values_ok_train(1:2:end,:).*100;
+
+    mean_ok_train{i} = mean(values_ok_train, 1);
+    var_ok_train{i} = var(values_ok_train,[], 1);
+
+    % ---
+    % ok_test
+    % ---
+    values_ok_test{i} = reshape([individual.diag.inctrain.ok_test], [],n_inctrain);
+    values_ok_test{i} = values_ok_test(1:2:end,:).*100;
+
+    mean_ok_test{i} = mean(values_ok_test, 1);
+    var_ok_test{i} = var(values_ok_test,[], 1);
+end
+
+
+
+clear ('out', 'stats', 'features', 'individual');
+save(fileout)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/tools/xml2struct.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,190 @@
+function [ s ] = xml2struct( file )
+%Convert xml file into a MATLAB structure
+% [ s ] = xml2struct( file )
+%
+% A file containing:
+% <XMLname attrib1="Some value">
+%   <Element>Some text</Element>
+%   <DifferentElement attrib2="2">Some more text</Element>
+%   <DifferentElement attrib3="2" attrib4="1">Even more text</DifferentElement>
+% </XMLname>
+%
+% Will produce:
+% s.XMLname.Attributes.attrib1 = "Some value";
+% s.XMLname.Element.Text = "Some text";
+% s.XMLname.DifferentElement{1}.Attributes.attrib2 = "2";
+% s.XMLname.DifferentElement{1}.Text = "Some more text";
+% s.XMLname.DifferentElement{2}.Attributes.attrib3 = "2";
+% s.XMLname.DifferentElement{2}.Attributes.attrib4 = "1";
+% s.XMLname.DifferentElement{2}.Text = "Even more text";
+%
+% Please note that the following characters are substituted
+% '-' by '_dash_', ':' by '_colon_' and '.' by '_dot_'
+%
+% Written by W. Falkena, ASTI, TUDelft, 21-08-2010
+% Attribute parsing speed increased by 40% by A. Wanner, 14-6-2011
+% Added CDATA support by I. Smirnov, 20-3-2012
+%
+% Modified by X. Mo, University of Wisconsin, 12-5-2012
+
+    if (nargin < 1)
+        clc;
+        help xml2struct
+        return
+    end
+    
+    if isa(file, 'org.apache.xerces.dom.DeferredDocumentImpl') || isa(file, 'org.apache.xerces.dom.DeferredElementImpl')
+        % input is a java xml object
+        xDoc = file;
+    else
+        %check for existance
+        if (exist(file,'file') == 0)
+            %Perhaps the xml extension was omitted from the file name. Add the
+            %extension and try again.
+            if (isempty(strfind(file,'.xml')))
+                file = [file '.xml'];
+            end
+            
+            if (exist(file,'file') == 0)
+                error(['The file ' file ' could not be found']);
+            end
+        end
+        %read the xml file
+        xDoc = xmlread(file);
+    end
+    
+    %parse xDoc into a MATLAB structure
+    s = parseChildNodes(xDoc);
+    
+end
+
+% ----- Subfunction parseChildNodes -----
+function [children,ptext,textflag] = parseChildNodes(theNode)
+    % Recurse over node children.
+    children = struct;
+    ptext = struct; textflag = 'Text';
+    if hasChildNodes(theNode)
+        childNodes = getChildNodes(theNode);
+        numChildNodes = getLength(childNodes);
+
+        for count = 1:numChildNodes
+            theChild = item(childNodes,count-1);
+            [text,name,attr,childs,textflag] = getNodeData(theChild);
+            
+            if (~strcmp(name,'#text') && ~strcmp(name,'#comment') && ~strcmp(name,'#cdata_dash_section'))
+                %XML allows the same elements to be defined multiple times,
+                %put each in a different cell
+                if (isfield(children,name))
+                    if (~iscell(children.(name)))
+                        %put existsing element into cell format
+                        children.(name) = {children.(name)};
+                    end
+                    index = length(children.(name))+1;
+                    %add new element
+                    children.(name){index} = childs;
+                    textFieldNames = fieldnames(text);
+                    for t = 1:length(textFieldNames)
+                        textFieldName = textFieldNames{t};
+                        children.(name){index}.(textFieldName) = text.(textFieldName);
+                    end
+                    if(~isempty(attr))
+                        children.(name){index}.('Attributes') = attr;
+                    end
+                else
+                    %add previously unknown (new) element to the structure
+                    children.(name) = childs;
+                    if(~isempty(text) && ~isempty(fieldnames(text)))
+                        textFieldNames = fieldnames(text);
+                        numTextFieldNames = length( textFieldNames );
+                        for i = 1:numTextFieldNames
+                            thisFieldName = textFieldNames{i};
+                            children.(name).(thisFieldName) = text.(thisFieldName);
+                        end
+                    end
+                    if(~isempty(attr))
+                        children.(name).('Attributes') = attr;
+                    end
+                end
+            else
+                ptextflag = 'Text';
+                if (strcmp(name, '#cdata_dash_section'))
+                    ptextflag = 'CDATA';
+                elseif (strcmp(name, '#comment'))
+                    ptextflag = 'Comment';
+                end
+                
+                %this is the text in an element (i.e., the parentNode) 
+                if (~isempty(regexprep(text.(textflag),'[\s]*','')))
+                    if (~isfield(ptext,ptextflag) || isempty(ptext.(ptextflag)))
+                        ptext.(ptextflag) = text.(textflag);
+                    else
+                        %what to do when element data is as follows:
+                        %<element>Text <!--Comment--> More text</element>
+                        
+                        %put the text in different cells:
+                        % if (~iscell(ptext)) ptext = {ptext}; end
+                        % ptext{length(ptext)+1} = text;
+                        
+                        %just append the text
+                        ptext.(ptextflag) = [ptext.(ptextflag) text.(textflag)];
+                    end
+                end
+            end
+            
+        end
+    end
+end
+
+% ----- Subfunction getNodeData -----
+function [text,name,attr,childs,textflag] = getNodeData(theNode)
+    % Create structure of node info.
+    
+    %make sure name is allowed as structure name
+    name = toCharArray(getNodeName(theNode))';
+    name = strrep(name, '-', '_dash_');
+    name = strrep(name, ':', '_colon_');
+    name = strrep(name, '.', '_dot_');
+
+    attr = parseAttributes(theNode);
+    if (isempty(fieldnames(attr))) 
+        attr = []; 
+    end
+    
+    %parse child nodes
+    [childs,text,textflag] = parseChildNodes(theNode);
+    
+    if (isempty(fieldnames(childs)) && isempty(fieldnames(text)))
+        %get the data of any childless nodes
+        % faster than if any(strcmp(methods(theNode), 'getData'))
+        % no need to try-catch (?)
+        % faster than text = char(getData(theNode));
+        text.(textflag) = toCharArray(getTextContent(theNode))';
+    end
+    
+end
+
+% ----- Subfunction parseAttributes -----
+function attributes = parseAttributes(theNode)
+    % Create attributes structure.
+
+    attributes = struct;
+    if hasAttributes(theNode)
+       theAttributes = getAttributes(theNode);
+       numAttributes = getLength(theAttributes);
+
+       for count = 1:numAttributes
+            %attrib = item(theAttributes,count-1);
+            %attr_name = regexprep(char(getName(attrib)),'[-:.]','_');
+            %attributes.(attr_name) = char(getValue(attrib));
+
+            %Suggestion of Adrian Wanner
+            str = toCharArray(toString(item(theAttributes,count-1)))';
+            k = strfind(str,'='); 
+            attr_name = str(1:(k(1)-1));
+            attr_name = strrep(attr_name, '-', '_dash_');
+            attr_name = strrep(attr_name, ':', '_colon_');
+            attr_name = strrep(attr_name, '.', '_dot_');
+            attributes.(attr_name) = str((k(1)+2):(end-1));
+       end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/editme_startup.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+%     The CAMIR framework for music similarity experiments
+%     Copyright (C) {2013}  {Daniel Wolff} (wolffd.mail [at] gmail [dot] com)
+% 
+%     This program is free software: you can redistribute it and/or modify
+%     it under the terms of the GNU General Public License as published by
+%     the Free Software Foundation, either version 3 of the License, or
+%     (at your option) any later version. 
+% 
+%     This program is distributed in the hope that it will be useful,
+%     but WITHOUT ANY WARRANTY; without even the implied warranty of
+%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+%     GNU General Public License for more details.
+% 
+%     You should have received a copy of the GNU General Public License
+%     along with this program.  If not, see [http://www.gnu.org/licenses/].
+%
+%     This software has been made possible by many other projects included
+%     in the /toolboxes folder. Please consider their further licenses.
+
+% ---
+% startup.m local 
+% this is the place to set system-specific parameters and paths
+% 
+% please run the scripts in the folder 'reproduce_AES53rd' for reproducing
+% experimental results of 
+% Feature Preprocessing with RBMs for Music Similarity Learning
+% Son N. Tran, Daniel Wolff, Tillman Weyde, Artur Garcez, AES53rd conference 
+% ---
+
+global globalvars;
+
+% ---
+% @TODO: PLEASE insert your absolute path to the folder containing this
+% script
+% ---
+ my_path = pwd;%'C:\_danielwolff\_documents\coding\matlab\music_research_branches\ISMIR2013';
+% ---
+% Add Toolboxes
+% --- 
+addpath(genpath(my_path));
+
+addpath(genpath([my_path '/toolboxes/bioakustik_tools']))
+addpath(genpath([my_path '/toolboxes/graph_visualisation/graphViz4Matlab/util']))
+
+addpath(pathsdiff(genpath([my_path]),...
+    '.svn'));
+
+% smv-light
+addtosystempath([my_path '/toolboxes/SVM-light']);
+
+globalvars.camir.msd.basepath = '';
+globalvars.tstaudiopath = [my_path '/features'];
+globalvars.mfilepath = '';
+globalvars.tstoutputpath = [my_path '/features'];
+globalvars.systemslash  = filesep;
+
+try
+    cd core
+catch
+end
+
+startup_music_research;
+
+try
+    cd ..
+    cd reproduce_AES53rd
+catch 
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/license.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,678 @@
+
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. [http://fsf.org/]
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    {one line to give the program's name and a brief idea of what it does.}
+    Copyright (C) {year}  {name of author}
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see [http://www.gnu.org/licenses/].
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    {project}  Copyright (C) {year}  {fullname}
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+[http://www.gnu.org/licenses/].
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+[http://www.gnu.org/philosophy/why-not-lgpl.html].
+
+        
+          
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+% ---
+% This script plots 50-dimensional RBM features as in figure 2 of 
+% 
+% Feature Preprocessing with RBMs for Music Similarity Learning
+% Son N. Tran, Daniel Wolff, Tillman Weyde, Artur Garcez, AES53rd
+% conference 
+% ---
+
+% cr_: training correct
+% cr : testing correct
+feature_file = 'rel_music_raw_features+simdata_ISMIR12';
+vars = whos('-file', feature_file);
+A = load(feature_file,vars(1).name,vars(2).name,vars(3).name,vars(4).name);
+raw_features = A.(vars(1).name);
+indices      = A.(vars(2).name);
+tst_inx      = A.(vars(3).name);
+trn_inx      = A.(vars(4).name);
+% 
+figure(1); imagesc(raw_features);colorbar;
+title 'Original Features';
+
+% load pregenerated RBM features
+mod = load('rbm_50');
+
+% ---
+% uncomment the following line to use newly calculated RBM features
+% mod = new_rbm(50,'grad');
+% ---
+
+features = logistic(raw_features*mod.W_max{1} + repmat(mod.hB_max{1},size(raw_features,1),1));
+figure(2); imagesc(features);colorbar;
+title 'RBM Features';
+
+num_case = size(trn_inx,1); 
+[trnd_12 trnd_13] = subspace_distances(trn_inx,features,indices,1,1);
+[tstd_12 tstd_13] = subspace_distances(tst_inx,features,indices,1,1);
+cr_ = 0;   % correct rate for training
+cr  = 0;   % correct rate for testing
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Binary file reproduce_AES53rd/rerun_figure2/rbm_50.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+% ---
+% This script trains similarity measures and evaluates the 
+% impact of the number of hidden states as displayed in figure 3 of
+% % Feature Preprocessing with RBMs for Music Similarity Learning
+% Son N. Tran, Daniel Wolff, Tillman Weyde, Artur Garcez, AES53rd
+% conference 
+%
+% The output is printed in the console and plotted afterwards
+% 
+% please note that the RBM training is a probabilistic process, and 
+% thus the papers' results can only be reproduced approximately with 
+% large numbers iterations of this script, and selection of RBMs according to
+% their training set performance.
+% ---
+
+% this version reproduces the figure approximately using precomputed RBM
+[test(1), train(1)] = rbm_fig3('rbm_h30');
+[test(2), train(2)] = rbm_fig3('rbm_h50');
+[test(3), train(3)] = rbm_fig3('rbm_h100');
+[test(4), train(4)] = rbm_fig3('rbm_h500');
+[test(5), train(5)] = rbm_fig3('rbm_h1000');
+
+% optionally, in order to test new RBMs, use the code below
+% [test(1), train(1)] = rbm_fig3(30);
+% [test(2), train(2)] = rbm_fig3(50);
+% [test(3), train(3)] = rbm_fig3(100);
+% [test(4), train(4)] = rbm_fig3(500);
+% [test(5), train(5)] = rbm_fig3(1000);
+
+hidNum = [30 50 100 500 1000];
+hFig = figure;
+set(hFig,'Units','centimeters');
+set(hFig, 'Position', [10 10 10 6]);
+plot(hidNum,train*100,'--rx');
+hold on
+plot(hidNum,test*100,'-bo');
+lg = legend('Training','Test');
+set(lg,'Location','SouthEast');
+title ('Figure 4: GRADIENT results for different hidNum');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure3/new_rbm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function [mod] = new_rbm(hidNum,type)
+% computes a new RBM that can be used instead of the saved ones
+
+conf.hidNum = hidNum;
+conf.eNum   = 150;
+conf.bNum   = 1;
+conf.gNum   = 1;
+conf.N    = 80;
+conf.MAX_INC = 10;
+ 
+% use the specific parameters from the paper
+switch type
+
+    case 'svm' 
+        conf.params = [0.7 0.7 0.1 2.0e-5];
+    case 'grad'
+        conf.params = [0.05 0.1 0.1 2.0e-5];
+    otherwise 
+end
+
+% load data
+feature_file = 'rel_music_raw_features+simdata_ISMIR12';
+vars = whos('-file', feature_file);
+A = load(feature_file,vars(1).name,vars(2).name,vars(3).name,vars(4).name);
+data = A.(vars(1).name);
+conf.sNum   = size(data,1);
+
+mod = struct();
+[mod.W_max{1} mod.vB_max{1} mod.hB_max{1}] = training_rbm(conf,zeros(0,0),feature_file);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure3/rbm_fig3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+function [cr, cr_] = rbm_fig3(preloaded)
+
+% cr_: training correct
+% cr : testing correct
+feature_file = 'rel_music_raw_features+simdata_ISMIR12';
+vars = whos('-file', feature_file);
+A = load(feature_file,vars(1).name,vars(2).name,vars(3).name,vars(4).name);
+raw_features = A.(vars(1).name);
+indices      = A.(vars(2).name);
+tst_inx      = A.(vars(3).name);
+trn_inx      = A.(vars(4).name);
+% 
+%figure(1); imagesc(raw_features);colorbar;
+
+% load the RBM, or compute a new one
+if ischar(preloaded)
+    mod = load(preloaded);
+else
+    if isstruct(preloaded)
+        mod = preloaded;
+    else
+        % create new RBM
+        mod = new_rbm(preloaded,'grad');
+    end
+end
+features = logistic(raw_features*mod.W_max{1} + repmat(mod.hB_max{1},size(raw_features,1),1));
+%figure(2); imagesc(features);colorbar;
+
+num_case = size(trn_inx,1); 
+[trnd_12 trnd_13] = subspace_distances(trn_inx,features,indices,1,1);
+[tstd_12 tstd_13] = subspace_distances(tst_inx,features,indices,1,1);
+cr_ = 0;   % correct rate for training
+cr  = 0;   % correct rate for testing
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% CODE HERE                               %%
+%[Ws cr_] = gradient_ascent(trnd_12,trnd_13,0.1,0.1,0.00002); %eNum = 10
+[Ws cr_] = gradient_ascent(trnd_12,trnd_13,0.05,0.01,0.00002);
+
+for i = 1:num_case       
+ cr = cr + sum((tstd_13{i}-tstd_12{i})*Ws{i}' > 0, 1)/size(tstd_12{i},1);
+end
+cr = cr/num_case;
+%% Check the result
+fprintf('Gradient RBM Test / Train Result=%f / %f\n',cr*100,cr_*100);
+%fprintf('Training=%f Testing=%f\n',cr_,cr);
+
+end
\ No newline at end of file
Binary file reproduce_AES53rd/rerun_figure3/rbm_h100.mat has changed
Binary file reproduce_AES53rd/rerun_figure3/rbm_h1000.mat has changed
Binary file reproduce_AES53rd/rerun_figure3/rbm_h30.mat has changed
Binary file reproduce_AES53rd/rerun_figure3/rbm_h50.mat has changed
Binary file reproduce_AES53rd/rerun_figure3/rbm_h500.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure4.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,103 @@
+% ---
+% This script trains similarity measures and evaluates the 
+% impact of the number of hidden states as displayed in figure 4 of
+%
+% Feature Preprocessing with RBMs for Music Similarity Learning
+% Son N. Tran, Daniel Wolff, Tillman Weyde, Artur Garcez, AES53rd
+% conference 
+% 
+% please note that the RBM training is a probabilistic process, and 
+% thus the papers' results can only be reproduced approximately with 
+% some iterations of this script, and selection of RBMs according to
+% their training set performance.
+% This takes considerable time, and for the sake of usability of this script
+% is left our. % It is exemplarily done for hidnum = 1000  in the script "table 1" in the
+% correpsonding folder.
+%
+% % The train and test performances are plotted in a figure
+%
+% For convenicence, The precomputed RBM features are stored in the files
+% accompaining this script.
+% In order to compute new SVM features, delete these files.
+% ---
+
+global globalvars;
+globalvars.debug = 3;
+
+% ---
+% vary feature parameters of mixed features
+% ---
+        
+ftype = 'MTTMixedFeatureSonRBM'; %'MTTMixedFeatureStober11Genre';
+
+fparams_all = struct(...
+            ... % ---
+            ... % these are SONfeatRaw parameters
+            ... % ---
+            'son_filename',{{'rel_music_raw_features+simdata_ISMIR12.mat'}}, ...
+            'son_conf', 2, ...
+             ... % --- 
+            ... % Following: RBM params
+            ... % ---
+            'norm_pre_rbm', 0, ... % norm before RBM?
+            'norm_post_rbm',0, ... % norm before RBM?
+            'rbm_hidNum',[30 50 100 500 1000], ...   % number of hidden units % 500
+            'rbm_eNum', 100, ...
+            'rbm_bNum', 1, ...
+            'rbm_gNum', 1, ...
+            'rbm_lrate1' , [0.05], ... % initial learning rate % 0.01
+            'rbm_lrate2', [0.17], ... %  learning rate, %0.05  
+            'rbm_momentum', [0.1], ... % 0.5
+            'rbm_cost', [0.00002], ... % cost function
+            'rbm_N', 50, ...
+            'rbm_MAX_INC', 10 ...
+        );
+
+% ---
+% vary parameters for svmlight
+% ---    
+
+trainparams_all = struct(...
+            'C', [1], ...%    
+            'weighted', [0], ...
+            'dataset', {{'comp_partBinData_ISMIR12_01.mat'}}, ...
+            'inctrain', 0 ...
+            ... % this optional
+            ... %'deltafun', {{'conv_subspace_delta'}}, ...
+            ... %'deltafun_params', {{{[1],[0]},{[5],[1]},{[10],[1]},{[20],[1]},{[30],[1]},{[50],[1]},{[70],[1]}}} ... % normalisation improves results
+            );
+
+% set training function
+trainfun = @svmlight_wrapper;
+
+
+% create test directory
+akt_dir = migrate_to_test_dir();
+
+
+% call eval
+out = test_generic_features_parameters_crossval...
+    (fparams_all, trainparams_all, trainfun, ftype);
+
+% get number of Hidden Units
+fparams = [out(:).fparams];
+hidNum = [fparams(:).rbm_hidNum];
+[hidNum,idx] =sort(hidNum);
+
+% get sorted test data results
+svm_test_results = [out(idx).mean_ok_test];
+svm_test_results = svm_test_results(1,:);
+
+% get sorted train data results
+svm_train_results = [out(idx).mean_ok_train];
+svm_train_results = svm_train_results(1,:);
+
+% ---
+% plot results
+% ---
+figure;
+plot(hidNum,svm_train_results,'r-');
+hold on
+plot(hidNum,svm_test_results,'b');
+legend('Training','Test');
+title ('Figure 4: SVM results for different hidNum');
Binary file reproduce_AES53rd/rerun_figure_4/f1bed60c9cfd463391c392be29df3aa40.fcd3e694f837cc092ac6e86432bdaac7.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure_4/f1bed60c9cfd463391c392be29df3aa40.fcd3e694f837cc092ac6e86432bdaac7.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Written on 09-Oct-2013 10:58:41 using the XML Toolbox for Matlab -->
+<root xml_tb_version="3.1" idx="1" type="struct" size="1 1">
+  <son_filename idx="1" type="char" size="1 42">rel_music_raw_features+simdata_ISMIR12.mat</son_filename>
+  <son_conf idx="1" type="double" size="1 1">1</son_conf>
+  <norm_pre_rbm idx="1" type="double" size="1 1">0</norm_pre_rbm>
+  <norm_post_rbm idx="1" type="double" size="1 1">0</norm_post_rbm>
+  <rbm_hidNum idx="1" type="double" size="1 1">30</rbm_hidNum>
+  <rbm_eNum idx="1" type="double" size="1 1">100</rbm_eNum>
+  <rbm_bNum idx="1" type="double" size="1 1">1</rbm_bNum>
+  <rbm_gNum idx="1" type="double" size="1 1">1</rbm_gNum>
+  <rbm_lrate1 idx="1" type="double" size="1 1">0.05</rbm_lrate1>
+  <rbm_lrate2 idx="1" type="double" size="1 1">0.17</rbm_lrate2>
+  <rbm_momentum idx="1" type="double" size="1 1">0.1</rbm_momentum>
+  <rbm_cost idx="1" type="double" size="1 1">2e-005</rbm_cost>
+  <rbm_N idx="1" type="double" size="1 1">50</rbm_N>
+  <rbm_MAX_INC idx="1" type="double" size="1 1">10</rbm_MAX_INC>
+</root>
Binary file reproduce_AES53rd/rerun_figure_4/f30f27fa409951e4a6338c6b8e033f315.fcd3e694f837cc092ac6e86432bdaac7.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure_4/f30f27fa409951e4a6338c6b8e033f315.fcd3e694f837cc092ac6e86432bdaac7.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Written on 09-Oct-2013 11:26:36 using the XML Toolbox for Matlab -->
+<root xml_tb_version="3.1" idx="1" type="struct" size="1 1">
+  <son_filename idx="1" type="char" size="1 42">rel_music_raw_features+simdata_ISMIR12.mat</son_filename>
+  <son_conf idx="1" type="double" size="1 1">2</son_conf>
+  <norm_pre_rbm idx="1" type="double" size="1 1">0</norm_pre_rbm>
+  <norm_post_rbm idx="1" type="double" size="1 1">0</norm_post_rbm>
+  <rbm_hidNum idx="1" type="double" size="1 1">50</rbm_hidNum>
+  <rbm_eNum idx="1" type="double" size="1 1">100</rbm_eNum>
+  <rbm_bNum idx="1" type="double" size="1 1">1</rbm_bNum>
+  <rbm_gNum idx="1" type="double" size="1 1">1</rbm_gNum>
+  <rbm_lrate1 idx="1" type="double" size="1 1">0.05</rbm_lrate1>
+  <rbm_lrate2 idx="1" type="double" size="1 1">0.17</rbm_lrate2>
+  <rbm_momentum idx="1" type="double" size="1 1">0.1</rbm_momentum>
+  <rbm_cost idx="1" type="double" size="1 1">2e-005</rbm_cost>
+  <rbm_N idx="1" type="double" size="1 1">50</rbm_N>
+  <rbm_MAX_INC idx="1" type="double" size="1 1">10</rbm_MAX_INC>
+</root>
Binary file reproduce_AES53rd/rerun_figure_4/f4146a16625be1f961cd1f47add7d2a0a.fcd3e694f837cc092ac6e86432bdaac7.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure_4/f4146a16625be1f961cd1f47add7d2a0a.fcd3e694f837cc092ac6e86432bdaac7.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Written on 09-Oct-2013 11:24:12 using the XML Toolbox for Matlab -->
+<root xml_tb_version="3.1" idx="1" type="struct" size="1 1">
+  <son_filename idx="1" type="char" size="1 42">rel_music_raw_features+simdata_ISMIR12.mat</son_filename>
+  <son_conf idx="1" type="double" size="1 1">2</son_conf>
+  <norm_pre_rbm idx="1" type="double" size="1 1">0</norm_pre_rbm>
+  <norm_post_rbm idx="1" type="double" size="1 1">0</norm_post_rbm>
+  <rbm_hidNum idx="1" type="double" size="1 1">100</rbm_hidNum>
+  <rbm_eNum idx="1" type="double" size="1 1">100</rbm_eNum>
+  <rbm_bNum idx="1" type="double" size="1 1">1</rbm_bNum>
+  <rbm_gNum idx="1" type="double" size="1 1">1</rbm_gNum>
+  <rbm_lrate1 idx="1" type="double" size="1 1">0.05</rbm_lrate1>
+  <rbm_lrate2 idx="1" type="double" size="1 1">0.17</rbm_lrate2>
+  <rbm_momentum idx="1" type="double" size="1 1">0.1</rbm_momentum>
+  <rbm_cost idx="1" type="double" size="1 1">2e-005</rbm_cost>
+  <rbm_N idx="1" type="double" size="1 1">50</rbm_N>
+  <rbm_MAX_INC idx="1" type="double" size="1 1">10</rbm_MAX_INC>
+</root>
Binary file reproduce_AES53rd/rerun_figure_4/f41a184d2b727e46307dc49dc7d60286d.fcd3e694f837cc092ac6e86432bdaac7.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure_4/f41a184d2b727e46307dc49dc7d60286d.fcd3e694f837cc092ac6e86432bdaac7.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Written on 09-Oct-2013 11:19:32 using the XML Toolbox for Matlab -->
+<root xml_tb_version="3.1" idx="1" type="struct" size="1 1">
+  <son_filename idx="1" type="char" size="1 42">rel_music_raw_features+simdata_ISMIR12.mat</son_filename>
+  <son_conf idx="1" type="double" size="1 1">2</son_conf>
+  <norm_pre_rbm idx="1" type="double" size="1 1">0</norm_pre_rbm>
+  <norm_post_rbm idx="1" type="double" size="1 1">0</norm_post_rbm>
+  <rbm_hidNum idx="1" type="double" size="1 1">500</rbm_hidNum>
+  <rbm_eNum idx="1" type="double" size="1 1">100</rbm_eNum>
+  <rbm_bNum idx="1" type="double" size="1 1">1</rbm_bNum>
+  <rbm_gNum idx="1" type="double" size="1 1">1</rbm_gNum>
+  <rbm_lrate1 idx="1" type="double" size="1 1">0.05</rbm_lrate1>
+  <rbm_lrate2 idx="1" type="double" size="1 1">0.17</rbm_lrate2>
+  <rbm_momentum idx="1" type="double" size="1 1">0.1</rbm_momentum>
+  <rbm_cost idx="1" type="double" size="1 1">2e-005</rbm_cost>
+  <rbm_N idx="1" type="double" size="1 1">50</rbm_N>
+  <rbm_MAX_INC idx="1" type="double" size="1 1">10</rbm_MAX_INC>
+</root>
Binary file reproduce_AES53rd/rerun_figure_4/f46b983e00a37d5109fb1148f4e915dde.fcd3e694f837cc092ac6e86432bdaac7.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure_4/f46b983e00a37d5109fb1148f4e915dde.fcd3e694f837cc092ac6e86432bdaac7.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Written on 09-Oct-2013 10:49:35 using the XML Toolbox for Matlab -->
+<root xml_tb_version="3.1" idx="1" type="struct" size="1 1">
+  <son_filename idx="1" type="char" size="1 42">rel_music_raw_features+simdata_ISMIR12.mat</son_filename>
+  <son_conf idx="1" type="double" size="1 1">1</son_conf>
+  <norm_pre_rbm idx="1" type="double" size="1 1">0</norm_pre_rbm>
+  <norm_post_rbm idx="1" type="double" size="1 1">0</norm_post_rbm>
+  <rbm_hidNum idx="1" type="double" size="1 1">500</rbm_hidNum>
+  <rbm_eNum idx="1" type="double" size="1 1">100</rbm_eNum>
+  <rbm_bNum idx="1" type="double" size="1 1">1</rbm_bNum>
+  <rbm_gNum idx="1" type="double" size="1 1">1</rbm_gNum>
+  <rbm_lrate1 idx="1" type="double" size="1 1">0.05</rbm_lrate1>
+  <rbm_lrate2 idx="1" type="double" size="1 1">0.17</rbm_lrate2>
+  <rbm_momentum idx="1" type="double" size="1 1">0.1</rbm_momentum>
+  <rbm_cost idx="1" type="double" size="1 1">2e-005</rbm_cost>
+  <rbm_N idx="1" type="double" size="1 1">50</rbm_N>
+  <rbm_MAX_INC idx="1" type="double" size="1 1">10</rbm_MAX_INC>
+</root>
Binary file reproduce_AES53rd/rerun_figure_4/f51c27ac475045cb4ff410deca9d0ccb4.fcd3e694f837cc092ac6e86432bdaac7.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure_4/f51c27ac475045cb4ff410deca9d0ccb4.fcd3e694f837cc092ac6e86432bdaac7.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Written on 09-Oct-2013 11:28:38 using the XML Toolbox for Matlab -->
+<root xml_tb_version="3.1" idx="1" type="struct" size="1 1">
+  <son_filename idx="1" type="char" size="1 42">rel_music_raw_features+simdata_ISMIR12.mat</son_filename>
+  <son_conf idx="1" type="double" size="1 1">2</son_conf>
+  <norm_pre_rbm idx="1" type="double" size="1 1">0</norm_pre_rbm>
+  <norm_post_rbm idx="1" type="double" size="1 1">0</norm_post_rbm>
+  <rbm_hidNum idx="1" type="double" size="1 1">30</rbm_hidNum>
+  <rbm_eNum idx="1" type="double" size="1 1">100</rbm_eNum>
+  <rbm_bNum idx="1" type="double" size="1 1">1</rbm_bNum>
+  <rbm_gNum idx="1" type="double" size="1 1">1</rbm_gNum>
+  <rbm_lrate1 idx="1" type="double" size="1 1">0.05</rbm_lrate1>
+  <rbm_lrate2 idx="1" type="double" size="1 1">0.17</rbm_lrate2>
+  <rbm_momentum idx="1" type="double" size="1 1">0.1</rbm_momentum>
+  <rbm_cost idx="1" type="double" size="1 1">2e-005</rbm_cost>
+  <rbm_N idx="1" type="double" size="1 1">50</rbm_N>
+  <rbm_MAX_INC idx="1" type="double" size="1 1">10</rbm_MAX_INC>
+</root>
Binary file reproduce_AES53rd/rerun_figure_4/f549ec90427cf6dcc6f9f12c9c3853912.fcd3e694f837cc092ac6e86432bdaac7.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure_4/f549ec90427cf6dcc6f9f12c9c3853912.fcd3e694f837cc092ac6e86432bdaac7.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Written on 09-Oct-2013 10:54:21 using the XML Toolbox for Matlab -->
+<root xml_tb_version="3.1" idx="1" type="struct" size="1 1">
+  <son_filename idx="1" type="char" size="1 42">rel_music_raw_features+simdata_ISMIR12.mat</son_filename>
+  <son_conf idx="1" type="double" size="1 1">1</son_conf>
+  <norm_pre_rbm idx="1" type="double" size="1 1">0</norm_pre_rbm>
+  <norm_post_rbm idx="1" type="double" size="1 1">0</norm_post_rbm>
+  <rbm_hidNum idx="1" type="double" size="1 1">100</rbm_hidNum>
+  <rbm_eNum idx="1" type="double" size="1 1">100</rbm_eNum>
+  <rbm_bNum idx="1" type="double" size="1 1">1</rbm_bNum>
+  <rbm_gNum idx="1" type="double" size="1 1">1</rbm_gNum>
+  <rbm_lrate1 idx="1" type="double" size="1 1">0.05</rbm_lrate1>
+  <rbm_lrate2 idx="1" type="double" size="1 1">0.17</rbm_lrate2>
+  <rbm_momentum idx="1" type="double" size="1 1">0.1</rbm_momentum>
+  <rbm_cost idx="1" type="double" size="1 1">2e-005</rbm_cost>
+  <rbm_N idx="1" type="double" size="1 1">50</rbm_N>
+  <rbm_MAX_INC idx="1" type="double" size="1 1">10</rbm_MAX_INC>
+</root>
Binary file reproduce_AES53rd/rerun_figure_4/f7a4e67d3dce99eed94c26ad193351927.fcd3e694f837cc092ac6e86432bdaac7.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure_4/f7a4e67d3dce99eed94c26ad193351927.fcd3e694f837cc092ac6e86432bdaac7.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Written on 09-Oct-2013 11:10:08 using the XML Toolbox for Matlab -->
+<root xml_tb_version="3.1" idx="1" type="struct" size="1 1">
+  <son_filename idx="1" type="char" size="1 42">rel_music_raw_features+simdata_ISMIR12.mat</son_filename>
+  <son_conf idx="1" type="double" size="1 1">2</son_conf>
+  <norm_pre_rbm idx="1" type="double" size="1 1">0</norm_pre_rbm>
+  <norm_post_rbm idx="1" type="double" size="1 1">0</norm_post_rbm>
+  <rbm_hidNum idx="1" type="double" size="1 1">1000</rbm_hidNum>
+  <rbm_eNum idx="1" type="double" size="1 1">100</rbm_eNum>
+  <rbm_bNum idx="1" type="double" size="1 1">1</rbm_bNum>
+  <rbm_gNum idx="1" type="double" size="1 1">1</rbm_gNum>
+  <rbm_lrate1 idx="1" type="double" size="1 1">0.05</rbm_lrate1>
+  <rbm_lrate2 idx="1" type="double" size="1 1">0.17</rbm_lrate2>
+  <rbm_momentum idx="1" type="double" size="1 1">0.1</rbm_momentum>
+  <rbm_cost idx="1" type="double" size="1 1">2e-005</rbm_cost>
+  <rbm_N idx="1" type="double" size="1 1">50</rbm_N>
+  <rbm_MAX_INC idx="1" type="double" size="1 1">10</rbm_MAX_INC>
+</root>
Binary file reproduce_AES53rd/rerun_figure_4/fc1fb454d81b345c55adf4d3c068f2901.fcd3e694f837cc092ac6e86432bdaac7.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure_4/fc1fb454d81b345c55adf4d3c068f2901.fcd3e694f837cc092ac6e86432bdaac7.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Written on 09-Oct-2013 10:40:09 using the XML Toolbox for Matlab -->
+<root xml_tb_version="3.1" idx="1" type="struct" size="1 1">
+  <son_filename idx="1" type="char" size="1 42">rel_music_raw_features+simdata_ISMIR12.mat</son_filename>
+  <son_conf idx="1" type="double" size="1 1">1</son_conf>
+  <norm_pre_rbm idx="1" type="double" size="1 1">0</norm_pre_rbm>
+  <norm_post_rbm idx="1" type="double" size="1 1">0</norm_post_rbm>
+  <rbm_hidNum idx="1" type="double" size="1 1">1000</rbm_hidNum>
+  <rbm_eNum idx="1" type="double" size="1 1">100</rbm_eNum>
+  <rbm_bNum idx="1" type="double" size="1 1">1</rbm_bNum>
+  <rbm_gNum idx="1" type="double" size="1 1">1</rbm_gNum>
+  <rbm_lrate1 idx="1" type="double" size="1 1">0.05</rbm_lrate1>
+  <rbm_lrate2 idx="1" type="double" size="1 1">0.17</rbm_lrate2>
+  <rbm_momentum idx="1" type="double" size="1 1">0.1</rbm_momentum>
+  <rbm_cost idx="1" type="double" size="1 1">2e-005</rbm_cost>
+  <rbm_N idx="1" type="double" size="1 1">50</rbm_N>
+  <rbm_MAX_INC idx="1" type="double" size="1 1">10</rbm_MAX_INC>
+</root>
Binary file reproduce_AES53rd/rerun_figure_4/ff1a207e56413639c2328fe4ff9076260.fcd3e694f837cc092ac6e86432bdaac7.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_figure_4/ff1a207e56413639c2328fe4ff9076260.fcd3e694f837cc092ac6e86432bdaac7.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Written on 09-Oct-2013 10:56:41 using the XML Toolbox for Matlab -->
+<root xml_tb_version="3.1" idx="1" type="struct" size="1 1">
+  <son_filename idx="1" type="char" size="1 42">rel_music_raw_features+simdata_ISMIR12.mat</son_filename>
+  <son_conf idx="1" type="double" size="1 1">1</son_conf>
+  <norm_pre_rbm idx="1" type="double" size="1 1">0</norm_pre_rbm>
+  <norm_post_rbm idx="1" type="double" size="1 1">0</norm_post_rbm>
+  <rbm_hidNum idx="1" type="double" size="1 1">50</rbm_hidNum>
+  <rbm_eNum idx="1" type="double" size="1 1">100</rbm_eNum>
+  <rbm_bNum idx="1" type="double" size="1 1">1</rbm_bNum>
+  <rbm_gNum idx="1" type="double" size="1 1">1</rbm_gNum>
+  <rbm_lrate1 idx="1" type="double" size="1 1">0.05</rbm_lrate1>
+  <rbm_lrate2 idx="1" type="double" size="1 1">0.17</rbm_lrate2>
+  <rbm_momentum idx="1" type="double" size="1 1">0.1</rbm_momentum>
+  <rbm_cost idx="1" type="double" size="1 1">2e-005</rbm_cost>
+  <rbm_N idx="1" type="double" size="1 1">50</rbm_N>
+  <rbm_MAX_INC idx="1" type="double" size="1 1">10</rbm_MAX_INC>
+</root>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_gradient_table3/gradient_table3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+% cr_: training correct
+% cr : testing correct
+feature_file = 'rel_music_raw_features+simdata_ISMIR12';
+vars = whos('-file', feature_file);
+A = load(feature_file,vars(1).name,vars(2).name,vars(3).name,vars(4).name);
+raw_features = A.(vars(1).name);
+indices      = A.(vars(2).name);
+tst_inx      = A.(vars(3).name);
+trn_inx      = A.(vars(4).name);
+% 
+% figure(1); imagesc(raw_features);colorbar;
+mod = load('res_48');
+features = logistic(raw_features*mod.W_max{1} + repmat(mod.hB_max{1},size(raw_features,1),1));
+% figure(2); imagesc(features);colorbar;
+
+num_case = size(trn_inx,1); 
+[trnd_12 trnd_13] = subspace_distances(trn_inx,features,indices,1,1);
+[tstd_12 tstd_13] = subspace_distances(tst_inx,features,indices,1,1);
+cr_ = 0;   % correct rate for training
+cr  = 0;   % correct rate for testing
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% CODE HERE                               %%
+%[Ws cr_] = gradient_ascent(trnd_12,trnd_13,0.1,0.1,0.00002); %eNum = 10
+[Ws cr_] = gradient_ascent(trnd_12,trnd_13,0.05,0.01,0.00002);
+
+for i = 1:num_case       
+ cr = cr + sum((tstd_13{i}-tstd_12{i})*Ws{i}' > 0, 1)/size(tstd_12{i},1);
+end
+cr = cr/num_case;
+%% Check the result
+fprintf('Gradient RBM Test / Train Result=%f / %f\n',cr*100,cr_*100);
+%fprintf('Training=%f Testing=%f\n',cr_,cr);
\ No newline at end of file
Binary file reproduce_AES53rd/rerun_gradient_table3/res_16.mat has changed
Binary file reproduce_AES53rd/rerun_gradient_table3/res_48.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_svm_table3/svm_table3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+% ---
+% this script trains similarity measures using RBM and SVM as in Table 3
+% please note that the RBM training is a probabilistic process.
+% Here, training is done on 20 random initialisations of RBM features ,
+% the test results corresponding to the RBM with the best training result are then
+% returned.
+% ---
+
+% ---
+% vary feature parameters of mixed features
+% ---
+
+global globalvars;
+globalvars.debug = 3;
+        
+ftype = 'MTTMixedFeatureSonRBM'; %'MTTMixedFeatureStober11Genre';
+
+fparams_all = struct(...
+            ... % ---
+            ... % these are SONfeatRaw parameters
+            ... % ---
+            'son_filename',{{'rel_music_raw_features+simdata_ISMIR12.mat'}}, ...
+            'son_conf', 1:5, ...
+             ... % --- 
+            ... % Following: RBM params
+            ... % ---
+            'norm_pre_rbm', 0, ... % norm before RBM?
+            'norm_post_rbm',0, ... % norm before RBM?
+            'rbm_hidNum',[1000], ...   % number of hidden units % 500
+            'rbm_eNum', 100, ...
+            'rbm_bNum', 1, ...
+            'rbm_gNum', 1, ...
+            'rbm_lrate1' , [0.05], ... % initial learning rate % 0.01
+            'rbm_lrate2', [0.10], ... %  learning rate, %0.05  
+            'rbm_momentum', [0.1], ... % 0.5
+            'rbm_cost', [0.00002], ... % cost function
+            'rbm_N', 50, ...
+            'rbm_MAX_INC', 10 ...
+        );
+
+% ---
+% vary parameters for svmlight
+% ---    
+
+trainparams_all = struct(...
+            'C', [1], ...%    
+            'weighted', [0], ...
+            'dataset', {{'comp_partBinData_ISMIR12_01.mat'}}, ...
+            'inctrain', 0 ...
+            ... % this optional
+            ... %'deltafun', {{'conv_subspace_delta'}}, ...
+            ... %'deltafun_params', {{{[1],[0]},{[5],[1]},{[10],[1]},{[20],[1]},{[30],[1]},{[50],[1]},{[70],[1]}}} ... % normalisation improves results
+            );
+
+% set training function
+trainfun = @svmlight_wrapper;
+
+
+% create test directory
+akt_dir = migrate_to_test_dir();
+
+
+% call eval
+out = test_generic_features_parameters_crossval...
+    (fparams_all, trainparams_all, trainfun, ftype);
+
+% ---
+% check training results and select best RBM according to trainign data
+% ---
+svm_train_performances = [out(:).mean_ok_train];
+[bestTrain, idx] = max(svm_train_performances(1,:));
+result = out(idx);
+
+% get corresponding test performance
+svm_test_performance = result.mean_ok_test(1,:);
+fprintf('SVM RBM Test/Train Result=%f / %f\n',svm_test_performance*100,bestTrain*100);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/reproduce_AES53rd/rerun_table3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+% ---
+% This script trains similarity measures and shows the
+% results regarding RBM of table 3
+%
+% Feature Preprocessing with RBMs for Music Similarity Learning
+% Son N. Tran, Daniel Wolff, Tillman Weyde, Artur Garcez, AES53rd
+% conference 
+% 
+% please note that the RBM training is a probabilistic process, and 
+% thus the papers' results can only be reproduced approximately with 
+% large numbers of iterations of this script, and selection of RBMs according to
+% their training set performance.
+% Here, training is done on 20 random initialisations of RBM features ,
+% the test results corresponding to the RBM with the best training result are then
+% returned.
+%
+% The train and test performances are output in the console
+%
+% For convenicence, The precomputed RBM features are stored in the files
+% accompaining this script.
+% In order to compute new SVM features, delete these files.
+% ---
+
+% ---
+% get svm results for RBM
+% ---
+svm_table3
+% svm_test_performance
+%fprintf('SVM Original Test Result (Wolff etal. 2012)=71.20 / 83.54\n');
+
+% ---
+% get gradient results for RBM
+% ---
+gradient_table3
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/ChangeLog.Sourceforge.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4436 @@
+
+
+2007-02-11 17:12  nsaunier
+
+	* BNT/learning/learn_struct_pdag_pc.m: Bug submitted by Imme Ebert-Uphoff (ebert@tree.com) (see Thu Feb 8, 2007 email on the BNT mailing list).
+
+2005-11-26 12:12  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: merged
+	  fwdback_twoslice.m to release branch
+
+2005-11-25 17:24  nsaunier
+
+	* BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: adding
+	  old missing fwdback_twoslice.m
+
+2005-11-25 17:24  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: file
+	  fwdback_twoslice.m was added on branch release-1_0 on 2005-11-26
+	  20:12:05 +0000
+
+2005-09-25 15:54  yozhik
+
+	* BNT/add_BNT_to_path.m: fix paths
+
+2005-09-25 15:30  yozhik
+
+	* BNT/add_BNT_to_path.m: Restored directories to path.
+
+2005-09-25 15:29  yozhik
+
+	* HMM/fwdback_twoslice.m: added missing fwdback_twoslice
+
+2005-09-17 11:14  yozhik
+
+	* ChangeLog, BNT/add_BNT_to_path.m, BNT/test_BNT.m,
+	  BNT/examples/static/cmp_inference_static.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Merged
+	  bug fixes from HEAD.
+
+2005-09-17 11:11  yozhik
+
+	* ChangeLog: added change log
+
+2005-09-17 11:11  yozhik
+
+	* ChangeLog: file ChangeLog was added on branch release-1_0 on
+	  2005-09-17 18:14:47 +0000
+
+2005-09-17 10:00  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Temporary
+	  rollback to fix error, per Kevin.
+
+2005-09-17 09:59  yozhik
+
+	* BNT/examples/static/cmp_inference_static.m: Commented out
+	  erroneous line, per Kevin.
+
+2005-09-17 09:58  yozhik
+
+	* BNT/add_BNT_to_path.m: Changed to require BNT_HOME to be
+	  predefined.
+
+2005-09-17 09:56  yozhik
+
+	* BNT/test_BNT.m: Commented out problematic tests.
+
+2005-09-17 09:38  yozhik
+
+	* BNT/test_BNT.m: renable tests
+
+2005-09-12 22:18  yozhik
+
+	* KPMtools/pca_kpm.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-09-12 22:18  yozhik
+
+	* KPMtools/pca_kpm.m: Initial revision
+
+2005-08-29 10:44  yozhik
+
+	* graph/: README.txt, Old/best_first_elim_order.m,
+	  Old/dag_to_jtree.m, Old/dfs.m, Old/dsep_test.m,
+	  Old/mk_2D_lattice_slow.m, acyclic.m, assignEdgeNums.m,
+	  best_first_elim_order.m, check_jtree_property.m,
+	  check_triangulated.m, children.m, cliques_to_jtree.m,
+	  cliques_to_strong_jtree.m, connected_graph.m,
+	  dag_to_essential_graph.m, dfs.m, dfs_test.m, dijkstra.m,
+	  family.m, graph_separated.m, graph_to_jtree.m,
+	  min_subtree_con_nodes.m, minimum_spanning_tree.m, minspan.m,
+	  mk_2D_lattice.m, mk_2D_lattice_slow.m, mk_adj_mat.m,
+	  mk_adjmat_chain.m, mk_all_dags.m, mk_nbrs_of_dag.m,
+	  mk_nbrs_of_digraph.m, mk_nbrs_of_digraph_broken.m,
+	  mk_nbrs_of_digraph_not_vectorized.m, mk_rnd_dag.m,
+	  mk_rnd_dag_given_edge_prob.m, mk_rooted_tree.m, mk_undirected.m,
+	  moralize.m, neighbors.m, parents.m, pred2path.m,
+	  reachability_graph.m, scc.m, strong_elim_order.m, test.m,
+	  test_strong_root.m, topological_sort.m, trees.txt, triangulate.c,
+	  triangulate.m, triangulate_2Dlattice_demo.m, triangulate_test.m:
+	  Initial import of code base from Kevin Murphy.
+
+2005-08-29 10:44  yozhik
+
+	* graph/: README.txt, Old/best_first_elim_order.m,
+	  Old/dag_to_jtree.m, Old/dfs.m, Old/dsep_test.m,
+	  Old/mk_2D_lattice_slow.m, acyclic.m, assignEdgeNums.m,
+	  best_first_elim_order.m, check_jtree_property.m,
+	  check_triangulated.m, children.m, cliques_to_jtree.m,
+	  cliques_to_strong_jtree.m, connected_graph.m,
+	  dag_to_essential_graph.m, dfs.m, dfs_test.m, dijkstra.m,
+	  family.m, graph_separated.m, graph_to_jtree.m,
+	  min_subtree_con_nodes.m, minimum_spanning_tree.m, minspan.m,
+	  mk_2D_lattice.m, mk_2D_lattice_slow.m, mk_adj_mat.m,
+	  mk_adjmat_chain.m, mk_all_dags.m, mk_nbrs_of_dag.m,
+	  mk_nbrs_of_digraph.m, mk_nbrs_of_digraph_broken.m,
+	  mk_nbrs_of_digraph_not_vectorized.m, mk_rnd_dag.m,
+	  mk_rnd_dag_given_edge_prob.m, mk_rooted_tree.m, mk_undirected.m,
+	  moralize.m, neighbors.m, parents.m, pred2path.m,
+	  reachability_graph.m, scc.m, strong_elim_order.m, test.m,
+	  test_strong_root.m, topological_sort.m, trees.txt, triangulate.c,
+	  triangulate.m, triangulate_2Dlattice_demo.m, triangulate_test.m:
+	  Initial revision
+
+2005-08-26 18:08  yozhik
+
+	* KPMtools/fullfileKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-08-26 18:08  yozhik
+
+	* KPMtools/fullfileKPM.m: Initial revision
+
+2005-08-21 13:00  yozhik
+
+	*
+	  BNT/inference/static/@pearl_inf_engine/private/parallel_protocol.m:
+	  Initial import of code base from Kevin Murphy.
+
+2005-08-21 13:00  yozhik
+
+	*
+	  BNT/inference/static/@pearl_inf_engine/private/parallel_protocol.m:
+	  Initial revision
+
+2005-07-11 12:07  yozhik
+
+	* KPMtools/plotcov2New.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-07-11 12:07  yozhik
+
+	* KPMtools/plotcov2New.m: Initial revision
+
+2005-07-06 12:32  yozhik
+
+	* KPMtools/montageKPM2.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-07-06 12:32  yozhik
+
+	* KPMtools/montageKPM2.m: Initial revision
+
+2005-06-27 18:35  yozhik
+
+	* KPMtools/montageKPM3.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-27 18:35  yozhik
+
+	* KPMtools/montageKPM3.m: Initial revision
+
+2005-06-27 18:30  yozhik
+
+	* KPMtools/cell2matPad.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-27 18:30  yozhik
+
+	* KPMtools/cell2matPad.m: Initial revision
+
+2005-06-15 14:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD.m: Initial import of code
+	  base from Kevin Murphy.
+
+2005-06-15 14:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD.m: Initial revision
+
+2005-06-08 18:56  yozhik
+
+	* Kalman/testKalman.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-08 18:56  yozhik
+
+	* Kalman/testKalman.m: Initial revision
+
+2005-06-08 18:25  yozhik
+
+	* HMM/: testHMM.m, fixed_lag_smoother_demo.m: Initial import of
+	  code base from Kevin Murphy.
+
+2005-06-08 18:25  yozhik
+
+	* HMM/: testHMM.m, fixed_lag_smoother_demo.m: Initial revision
+
+2005-06-08 18:22  yozhik
+
+	* HMM/: README.txt, dhmm_em.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-06-08 18:22  yozhik
+
+	* HMM/: README.txt, dhmm_em.m: Initial revision
+
+2005-06-08 18:17  yozhik
+
+	* HMM/fwdback.m: Initial import of code base from Kevin Murphy.
+
+2005-06-08 18:17  yozhik
+
+	* HMM/fwdback.m: Initial revision
+
+2005-06-05 11:46  yozhik
+
+	* KPMtools/: rectintLoopC.c, rectintLoopC.dll: Initial import of
+	  code base from Kevin Murphy.
+
+2005-06-05 11:46  yozhik
+
+	* KPMtools/: rectintLoopC.c, rectintLoopC.dll: Initial revision
+
+2005-06-01 12:39  yozhik
+
+	* KPMtools/montageKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-01 12:39  yozhik
+
+	* KPMtools/montageKPM.m: Initial revision
+
+2005-05-31 21:49  yozhik
+
+	* KPMtools/initFigures.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-31 21:49  yozhik
+
+	* KPMtools/initFigures.m: Initial revision
+
+2005-05-31 11:19  yozhik
+
+	* KPMstats/unidrndKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-31 11:19  yozhik
+
+	* KPMstats/unidrndKPM.m: Initial revision
+
+2005-05-30 15:08  yozhik
+
+	* KPMtools/filepartsLast.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-30 15:08  yozhik
+
+	* KPMtools/filepartsLast.m: Initial revision
+
+2005-05-29 23:01  yozhik
+
+	* KPMtools/plotBox.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-29 23:01  yozhik
+
+	* KPMtools/plotBox.m: Initial revision
+
+2005-05-25 18:31  yozhik
+
+	* KPMtools/plotColors.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-25 18:31  yozhik
+
+	* KPMtools/plotColors.m: Initial revision
+
+2005-05-25 12:11  yozhik
+
+	* KPMtools/genpathKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-25 12:11  yozhik
+
+	* KPMtools/genpathKPM.m: Initial revision
+
+2005-05-23 17:03  yozhik
+
+	* netlab3.3/demhmc1.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-23 17:03  yozhik
+
+	* netlab3.3/demhmc1.m: Initial revision
+
+2005-05-23 16:44  yozhik
+
+	* netlab3.3/gmminit.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-23 16:44  yozhik
+
+	* netlab3.3/gmminit.m: Initial revision
+
+2005-05-23 16:07  yozhik
+
+	* netlab3.3/metrop.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-23 16:07  yozhik
+
+	* netlab3.3/metrop.m: Initial revision
+
+2005-05-22 23:23  yozhik
+
+	* netlab3.3/demmet1.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-22 23:23  yozhik
+
+	* netlab3.3/demmet1.m: Initial revision
+
+2005-05-22 16:32  yozhik
+
+	* KPMstats/: dirichletrnd.m, dirichletpdf.m, test_dir.m,
+	  multirnd.m, multipdf.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-22 16:32  yozhik
+
+	* KPMstats/: dirichletrnd.m, dirichletpdf.m, test_dir.m,
+	  multirnd.m, multipdf.m: Initial revision
+
+2005-05-13 13:52  yozhik
+
+	* KPMtools/: asort.m, dirKPM.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-05-13 13:52  yozhik
+
+	* KPMtools/: asort.m, dirKPM.m: Initial revision
+
+2005-05-09 18:32  yozhik
+
+	* netlab3.3/dem2ddat.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-09 18:32  yozhik
+
+	* netlab3.3/dem2ddat.m: Initial revision
+
+2005-05-09 15:20  yozhik
+
+	* KPMtools/: mkdirKPM.m, optimalMatching.m, optimalMatchingTest.m,
+	  subsets1.m: Initial import of code base from Kevin Murphy.
+
+2005-05-09 15:20  yozhik
+
+	* KPMtools/: mkdirKPM.m, optimalMatching.m, optimalMatchingTest.m,
+	  subsets1.m: Initial revision
+
+2005-05-09 09:47  yozhik
+
+	* KPMtools/bipartiteMatchingDemo.m: Initial import of code base
+	  from Kevin Murphy.
+
+2005-05-09 09:47  yozhik
+
+	* KPMtools/bipartiteMatchingDemo.m: Initial revision
+
+2005-05-08 22:25  yozhik
+
+	* KPMtools/bipartiteMatchingIntProg.m: Initial import of code base
+	  from Kevin Murphy.
+
+2005-05-08 22:25  yozhik
+
+	* KPMtools/bipartiteMatchingIntProg.m: Initial revision
+
+2005-05-08 21:45  yozhik
+
+	* KPMtools/bipartiteMatchingDemoPlot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2005-05-08 21:45  yozhik
+
+	* KPMtools/bipartiteMatchingDemoPlot.m: Initial revision
+
+2005-05-08 19:55  yozhik
+
+	* KPMtools/subsetsFixedSize.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-05-08 19:55  yozhik
+
+	* KPMtools/subsetsFixedSize.m: Initial revision
+
+2005-05-08 15:48  yozhik
+
+	* KPMtools/centeringMatrix.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-05-08 15:48  yozhik
+
+	* KPMtools/centeringMatrix.m: Initial revision
+
+2005-05-08 10:51  yozhik
+
+	* netlab3.3/demgmm1.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-08 10:51  yozhik
+
+	* netlab3.3/demgmm1.m: Initial revision
+
+2005-05-06 18:09  yozhik
+
+	* BNT/add_BNT_to_path.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-06 18:09  yozhik
+
+	* BNT/add_BNT_to_path.m: Initial revision
+
+2005-05-03 21:35  yozhik
+
+	* KPMstats/standardize.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-03 21:35  yozhik
+
+	* KPMstats/standardize.m: Initial revision
+
+2005-05-03 13:18  yozhik
+
+	* KPMstats/histCmpChi2.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-03 13:18  yozhik
+
+	* KPMstats/histCmpChi2.m: Initial revision
+
+2005-05-03 12:01  yozhik
+
+	* KPMtools/strsplit.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-03 12:01  yozhik
+
+	* KPMtools/strsplit.m: Initial revision
+
+2005-05-02 13:19  yozhik
+
+	* KPMtools/hsvKPM.m: Initial import of code base from Kevin Murphy.
+
+2005-05-02 13:19  yozhik
+
+	* KPMtools/hsvKPM.m: Initial revision
+
+2005-04-27 11:34  yozhik
+
+	* BNT/potentials/@dpot/: subsasgn.m, subsref.m: Initial import of
+	  code base from Kevin Murphy.
+
+2005-04-27 11:34  yozhik
+
+	* BNT/potentials/@dpot/: subsasgn.m, subsref.m: Initial revision
+
+2005-04-27 10:58  yozhik
+
+	* KPMtools/mahal2conf.m, nethelp3.3/conffig.htm,
+	  nethelp3.3/confmat.htm, nethelp3.3/conjgrad.htm,
+	  nethelp3.3/consist.htm, nethelp3.3/convertoldnet.htm,
+	  nethelp3.3/datread.htm, nethelp3.3/datwrite.htm,
+	  nethelp3.3/dem2ddat.htm, nethelp3.3/demard.htm,
+	  nethelp3.3/demev1.htm, nethelp3.3/demev2.htm,
+	  nethelp3.3/demev3.htm, nethelp3.3/demgauss.htm,
+	  nethelp3.3/demglm1.htm, nethelp3.3/demglm2.htm,
+	  nethelp3.3/demgmm1.htm, nethelp3.3/demgmm2.htm,
+	  nethelp3.3/demgmm3.htm, nethelp3.3/demgmm4.htm,
+	  nethelp3.3/demgmm5.htm, nethelp3.3/demgp.htm,
+	  nethelp3.3/demgpard.htm, nethelp3.3/demgpot.htm,
+	  nethelp3.3/demgtm1.htm, nethelp3.3/demgtm2.htm,
+	  nethelp3.3/demhint.htm, nethelp3.3/demhmc1.htm,
+	  nethelp3.3/demhmc2.htm, nethelp3.3/demhmc3.htm,
+	  nethelp3.3/demkmn1.htm, nethelp3.3/demknn1.htm,
+	  nethelp3.3/demmdn1.htm, nethelp3.3/demmet1.htm,
+	  nethelp3.3/demmlp1.htm, nethelp3.3/demmlp2.htm,
+	  nethelp3.3/demnlab.htm, nethelp3.3/demns1.htm,
+	  nethelp3.3/demolgd1.htm, nethelp3.3/demopt1.htm,
+	  nethelp3.3/dempot.htm, nethelp3.3/demprgp.htm,
+	  nethelp3.3/demprior.htm, nethelp3.3/demrbf1.htm,
+	  nethelp3.3/demsom1.htm, nethelp3.3/demtrain.htm,
+	  nethelp3.3/dist2.htm, nethelp3.3/eigdec.htm,
+	  nethelp3.3/errbayes.htm, nethelp3.3/evidence.htm,
+	  nethelp3.3/fevbayes.htm, nethelp3.3/gauss.htm,
+	  nethelp3.3/gbayes.htm, nethelp3.3/glm.htm,
+	  nethelp3.3/glmderiv.htm, nethelp3.3/glmerr.htm,
+	  nethelp3.3/glmevfwd.htm, nethelp3.3/glmfwd.htm,
+	  nethelp3.3/glmgrad.htm, nethelp3.3/glmhess.htm,
+	  nethelp3.3/glminit.htm, nethelp3.3/glmpak.htm,
+	  nethelp3.3/glmtrain.htm, nethelp3.3/glmunpak.htm,
+	  nethelp3.3/gmm.htm, nethelp3.3/gmmactiv.htm,
+	  nethelp3.3/gmmem.htm, nethelp3.3/gmminit.htm,
+	  nethelp3.3/gmmpak.htm, nethelp3.3/gmmpost.htm,
+	  nethelp3.3/gmmprob.htm, nethelp3.3/gmmsamp.htm,
+	  nethelp3.3/gmmunpak.htm, nethelp3.3/gp.htm,
+	  nethelp3.3/gpcovar.htm, nethelp3.3/gpcovarf.htm,
+	  nethelp3.3/gpcovarp.htm, nethelp3.3/gperr.htm,
+	  nethelp3.3/gpfwd.htm, nethelp3.3/gpgrad.htm,
+	  nethelp3.3/gpinit.htm, nethelp3.3/gppak.htm,
+	  nethelp3.3/gpunpak.htm, nethelp3.3/gradchek.htm,
+	  nethelp3.3/graddesc.htm, nethelp3.3/gsamp.htm,
+	  nethelp3.3/gtm.htm, nethelp3.3/gtmem.htm, nethelp3.3/gtmfwd.htm,
+	  nethelp3.3/gtminit.htm, nethelp3.3/gtmlmean.htm,
+	  nethelp3.3/gtmlmode.htm, nethelp3.3/gtmmag.htm,
+	  nethelp3.3/gtmpost.htm, nethelp3.3/gtmprob.htm,
+	  nethelp3.3/hbayes.htm, nethelp3.3/hesschek.htm,
+	  nethelp3.3/hintmat.htm, nethelp3.3/hinton.htm,
+	  nethelp3.3/histp.htm, nethelp3.3/hmc.htm, nethelp3.3/index.htm,
+	  nethelp3.3/kmeans.htm, nethelp3.3/knn.htm, nethelp3.3/knnfwd.htm,
+	  nethelp3.3/linef.htm, nethelp3.3/linemin.htm,
+	  nethelp3.3/maxitmess.htm, nethelp3.3/mdn.htm,
+	  nethelp3.3/mdn2gmm.htm, nethelp3.3/mdndist2.htm,
+	  nethelp3.3/mdnerr.htm, nethelp3.3/mdnfwd.htm,
+	  nethelp3.3/mdngrad.htm, nethelp3.3/mdninit.htm,
+	  nethelp3.3/mdnpak.htm, nethelp3.3/mdnpost.htm,
+	  nethelp3.3/mdnprob.htm, nethelp3.3/mdnunpak.htm,
+	  nethelp3.3/metrop.htm, nethelp3.3/minbrack.htm,
+	  nethelp3.3/mlp.htm, nethelp3.3/mlpbkp.htm,
+	  nethelp3.3/mlpderiv.htm, nethelp3.3/mlperr.htm,
+	  nethelp3.3/mlpevfwd.htm, nethelp3.3/mlpfwd.htm,
+	  nethelp3.3/mlpgrad.htm, nethelp3.3/mlphdotv.htm,
+	  nethelp3.3/mlphess.htm, nethelp3.3/mlphint.htm,
+	  nethelp3.3/mlpinit.htm, nethelp3.3/mlppak.htm,
+	  nethelp3.3/mlpprior.htm, nethelp3.3/mlptrain.htm,
+	  nethelp3.3/mlpunpak.htm, nethelp3.3/netderiv.htm,
+	  nethelp3.3/neterr.htm, nethelp3.3/netevfwd.htm,
+	  nethelp3.3/netgrad.htm, nethelp3.3/nethelp3.3.zip,
+	  nethelp3.3/nethess.htm, nethelp3.3/netinit.htm,
+	  nethelp3.3/netopt.htm, nethelp3.3/netpak.htm,
+	  nethelp3.3/netunpak.htm, nethelp3.3/olgd.htm, nethelp3.3/pca.htm,
+	  nethelp3.3/plotmat.htm, nethelp3.3/ppca.htm,
+	  nethelp3.3/quasinew.htm, nethelp3.3/rbf.htm,
+	  nethelp3.3/rbfbkp.htm, nethelp3.3/rbfderiv.htm,
+	  nethelp3.3/rbferr.htm, nethelp3.3/rbfevfwd.htm,
+	  nethelp3.3/rbffwd.htm, nethelp3.3/rbfgrad.htm,
+	  nethelp3.3/rbfhess.htm, nethelp3.3/rbfjacob.htm,
+	  nethelp3.3/rbfpak.htm, nethelp3.3/rbfprior.htm,
+	  nethelp3.3/rbfsetbf.htm, nethelp3.3/rbfsetfw.htm,
+	  nethelp3.3/rbftrain.htm, nethelp3.3/rbfunpak.htm,
+	  nethelp3.3/rosegrad.htm, nethelp3.3/rosen.htm,
+	  nethelp3.3/scg.htm, nethelp3.3/som.htm, nethelp3.3/somfwd.htm,
+	  nethelp3.3/sompak.htm, nethelp3.3/somtrain.htm,
+	  nethelp3.3/somunpak.htm, netlab3.3/Contents.m, netlab3.3/LICENSE,
+	  netlab3.3/conffig.m, netlab3.3/confmat.m, netlab3.3/conjgrad.m,
+	  netlab3.3/consist.m, netlab3.3/convertoldnet.m,
+	  netlab3.3/datread.m, netlab3.3/datwrite.m, netlab3.3/demard.m,
+	  netlab3.3/demev1.m, netlab3.3/demev2.m, netlab3.3/demev3.m,
+	  netlab3.3/demgauss.m, netlab3.3/demglm1.m, netlab3.3/demglm2.m,
+	  netlab3.3/demgmm2.m, netlab3.3/demgmm3.m, netlab3.3/demgmm4.m,
+	  netlab3.3/demgmm5.m, netlab3.3/demgp.m, netlab3.3/demgpard.m,
+	  netlab3.3/demgpot.m, netlab3.3/demgtm1.m, netlab3.3/demgtm2.m,
+	  netlab3.3/demhint.m, netlab3.3/demhmc2.m, netlab3.3/demhmc3.m,
+	  netlab3.3/demkmn1.m, netlab3.3/demknn1.m, netlab3.3/demmdn1.m,
+	  netlab3.3/demmlp1.m, netlab3.3/demmlp2.m, netlab3.3/demnlab.m,
+	  netlab3.3/demns1.m, netlab3.3/demolgd1.m, netlab3.3/demopt1.m,
+	  netlab3.3/dempot.m, netlab3.3/demprgp.m, netlab3.3/demprior.m,
+	  netlab3.3/demrbf1.m, netlab3.3/demsom1.m, netlab3.3/demtrain.m,
+	  netlab3.3/dist2.m, netlab3.3/eigdec.m, netlab3.3/errbayes.m,
+	  netlab3.3/evidence.m, netlab3.3/fevbayes.m, netlab3.3/gauss.m,
+	  netlab3.3/gbayes.m, netlab3.3/glm.m, netlab3.3/glmderiv.m,
+	  netlab3.3/glmerr.m, netlab3.3/glmevfwd.m, netlab3.3/glmfwd.m,
+	  netlab3.3/glmgrad.m, netlab3.3/glmhess.m, netlab3.3/glminit.m,
+	  netlab3.3/glmpak.m, netlab3.3/glmtrain.m, netlab3.3/glmunpak.m,
+	  netlab3.3/gmm.m, netlab3.3/gmmactiv.m, netlab3.3/gmmem.m,
+	  netlab3.3/gmmpak.m, netlab3.3/gmmpost.m, netlab3.3/gmmprob.m,
+	  netlab3.3/gmmsamp.m, netlab3.3/gmmunpak.m, netlab3.3/gp.m,
+	  netlab3.3/gpcovar.m, netlab3.3/gpcovarf.m, netlab3.3/gpcovarp.m,
+	  netlab3.3/gperr.m, netlab3.3/gpfwd.m, netlab3.3/gpgrad.m,
+	  netlab3.3/gpinit.m, netlab3.3/gppak.m, netlab3.3/gpunpak.m,
+	  netlab3.3/gradchek.m, netlab3.3/graddesc.m, netlab3.3/gsamp.m,
+	  netlab3.3/gtm.m, netlab3.3/gtmem.m, netlab3.3/gtmfwd.m,
+	  netlab3.3/gtminit.m, netlab3.3/gtmlmean.m, netlab3.3/gtmlmode.m,
+	  netlab3.3/gtmmag.m, netlab3.3/gtmpost.m, netlab3.3/gtmprob.m,
+	  netlab3.3/hbayes.m, netlab3.3/hesschek.m, netlab3.3/hintmat.m,
+	  netlab3.3/hinton.m, netlab3.3/histp.m, netlab3.3/hmc.m,
+	  netlab3.3/kmeansNetlab.m, netlab3.3/knn.m, netlab3.3/knnfwd.m,
+	  netlab3.3/linef.m, netlab3.3/linemin.m, netlab3.3/maxitmess.m,
+	  netlab3.3/mdn.m, netlab3.3/mdn2gmm.m, netlab3.3/mdndist2.m,
+	  netlab3.3/mdnerr.m, netlab3.3/mdnfwd.m, netlab3.3/mdngrad.m,
+	  netlab3.3/mdninit.m, netlab3.3/mdnnet.mat, netlab3.3/mdnpak.m,
+	  netlab3.3/mdnpost.m, netlab3.3/mdnprob.m, netlab3.3/mdnunpak.m,
+	  netlab3.3/minbrack.m, netlab3.3/mlp.m, netlab3.3/mlpbkp.m,
+	  netlab3.3/mlpderiv.m, netlab3.3/mlperr.m, netlab3.3/mlpevfwd.m,
+	  netlab3.3/mlpfwd.m, netlab3.3/mlpgrad.m, netlab3.3/mlphdotv.m,
+	  netlab3.3/mlphess.m, netlab3.3/mlphint.m, netlab3.3/mlpinit.m,
+	  netlab3.3/mlppak.m, netlab3.3/mlpprior.m, netlab3.3/mlptrain.m,
+	  netlab3.3/mlpunpak.m, netlab3.3/netderiv.m, netlab3.3/neterr.m,
+	  netlab3.3/netevfwd.m, netlab3.3/netgrad.m, netlab3.3/nethess.m,
+	  netlab3.3/netinit.m, netlab3.3/netlab3.3.zip,
+	  netlab3.3/netlogo.mat, netlab3.3/netopt.m, netlab3.3/netpak.m,
+	  netlab3.3/netunpak.m, netlab3.3/oilTrn.dat, netlab3.3/oilTst.dat,
+	  netlab3.3/olgd.m, netlab3.3/pca.m, netlab3.3/plotmat.m,
+	  netlab3.3/ppca.m, netlab3.3/quasinew.m, netlab3.3/rbf.m,
+	  netlab3.3/rbfbkp.m, netlab3.3/rbfderiv.m, netlab3.3/rbferr.m,
+	  netlab3.3/rbfevfwd.m, netlab3.3/rbffwd.m, netlab3.3/rbfgrad.m,
+	  netlab3.3/rbfhess.m, netlab3.3/rbfjacob.m, netlab3.3/rbfpak.m,
+	  netlab3.3/rbfprior.m, netlab3.3/rbfsetbf.m, netlab3.3/rbfsetfw.m,
+	  netlab3.3/rbftrain.m, netlab3.3/rbfunpak.m, netlab3.3/rosegrad.m,
+	  netlab3.3/rosen.m, netlab3.3/scg.m, netlab3.3/som.m,
+	  netlab3.3/somfwd.m, netlab3.3/sompak.m, netlab3.3/somtrain.m,
+	  netlab3.3/somunpak.m, netlab3.3/xor.dat, netlabKPM/README.txt,
+	  netlabKPM/demgmm1_movie.m, netlabKPM/evidence_weighted.m,
+	  netlabKPM/glmerr_weighted.m, netlabKPM/glmgrad_weighted.m,
+	  netlabKPM/glmhess_weighted.m, netlabKPM/glmtrain_weighted.m,
+	  netlabKPM/gmm1.avi, netlabKPM/gmmem2.m,
+	  netlabKPM/gmmem_multi_restart.m, netlabKPM/kmeans_demo.m,
+	  netlabKPM/mlperr_weighted.m, netlabKPM/mlpgrad_weighted.m,
+	  netlabKPM/mlphdotv_weighted.m, netlabKPM/mlphess_weighted.m,
+	  netlabKPM/neterr_weighted.m, netlabKPM/netgrad_weighted.m,
+	  netlabKPM/nethess_weighted.m, netlabKPM/netopt_weighted.m,
+	  netlabKPM/process_options.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-04-27 10:58  yozhik
+
+	* KPMtools/mahal2conf.m, nethelp3.3/conffig.htm,
+	  nethelp3.3/confmat.htm, nethelp3.3/conjgrad.htm,
+	  nethelp3.3/consist.htm, nethelp3.3/convertoldnet.htm,
+	  nethelp3.3/datread.htm, nethelp3.3/datwrite.htm,
+	  nethelp3.3/dem2ddat.htm, nethelp3.3/demard.htm,
+	  nethelp3.3/demev1.htm, nethelp3.3/demev2.htm,
+	  nethelp3.3/demev3.htm, nethelp3.3/demgauss.htm,
+	  nethelp3.3/demglm1.htm, nethelp3.3/demglm2.htm,
+	  nethelp3.3/demgmm1.htm, nethelp3.3/demgmm2.htm,
+	  nethelp3.3/demgmm3.htm, nethelp3.3/demgmm4.htm,
+	  nethelp3.3/demgmm5.htm, nethelp3.3/demgp.htm,
+	  nethelp3.3/demgpard.htm, nethelp3.3/demgpot.htm,
+	  nethelp3.3/demgtm1.htm, nethelp3.3/demgtm2.htm,
+	  nethelp3.3/demhint.htm, nethelp3.3/demhmc1.htm,
+	  nethelp3.3/demhmc2.htm, nethelp3.3/demhmc3.htm,
+	  nethelp3.3/demkmn1.htm, nethelp3.3/demknn1.htm,
+	  nethelp3.3/demmdn1.htm, nethelp3.3/demmet1.htm,
+	  nethelp3.3/demmlp1.htm, nethelp3.3/demmlp2.htm,
+	  nethelp3.3/demnlab.htm, nethelp3.3/demns1.htm,
+	  nethelp3.3/demolgd1.htm, nethelp3.3/demopt1.htm,
+	  nethelp3.3/dempot.htm, nethelp3.3/demprgp.htm,
+	  nethelp3.3/demprior.htm, nethelp3.3/demrbf1.htm,
+	  nethelp3.3/demsom1.htm, nethelp3.3/demtrain.htm,
+	  nethelp3.3/dist2.htm, nethelp3.3/eigdec.htm,
+	  nethelp3.3/errbayes.htm, nethelp3.3/evidence.htm,
+	  nethelp3.3/fevbayes.htm, nethelp3.3/gauss.htm,
+	  nethelp3.3/gbayes.htm, nethelp3.3/glm.htm,
+	  nethelp3.3/glmderiv.htm, nethelp3.3/glmerr.htm,
+	  nethelp3.3/glmevfwd.htm, nethelp3.3/glmfwd.htm,
+	  nethelp3.3/glmgrad.htm, nethelp3.3/glmhess.htm,
+	  nethelp3.3/glminit.htm, nethelp3.3/glmpak.htm,
+	  nethelp3.3/glmtrain.htm, nethelp3.3/glmunpak.htm,
+	  nethelp3.3/gmm.htm, nethelp3.3/gmmactiv.htm,
+	  nethelp3.3/gmmem.htm, nethelp3.3/gmminit.htm,
+	  nethelp3.3/gmmpak.htm, nethelp3.3/gmmpost.htm,
+	  nethelp3.3/gmmprob.htm, nethelp3.3/gmmsamp.htm,
+	  nethelp3.3/gmmunpak.htm, nethelp3.3/gp.htm,
+	  nethelp3.3/gpcovar.htm, nethelp3.3/gpcovarf.htm,
+	  nethelp3.3/gpcovarp.htm, nethelp3.3/gperr.htm,
+	  nethelp3.3/gpfwd.htm, nethelp3.3/gpgrad.htm,
+	  nethelp3.3/gpinit.htm, nethelp3.3/gppak.htm,
+	  nethelp3.3/gpunpak.htm, nethelp3.3/gradchek.htm,
+	  nethelp3.3/graddesc.htm, nethelp3.3/gsamp.htm,
+	  nethelp3.3/gtm.htm, nethelp3.3/gtmem.htm, nethelp3.3/gtmfwd.htm,
+	  nethelp3.3/gtminit.htm, nethelp3.3/gtmlmean.htm,
+	  nethelp3.3/gtmlmode.htm, nethelp3.3/gtmmag.htm,
+	  nethelp3.3/gtmpost.htm, nethelp3.3/gtmprob.htm,
+	  nethelp3.3/hbayes.htm, nethelp3.3/hesschek.htm,
+	  nethelp3.3/hintmat.htm, nethelp3.3/hinton.htm,
+	  nethelp3.3/histp.htm, nethelp3.3/hmc.htm, nethelp3.3/index.htm,
+	  nethelp3.3/kmeans.htm, nethelp3.3/knn.htm, nethelp3.3/knnfwd.htm,
+	  nethelp3.3/linef.htm, nethelp3.3/linemin.htm,
+	  nethelp3.3/maxitmess.htm, nethelp3.3/mdn.htm,
+	  nethelp3.3/mdn2gmm.htm, nethelp3.3/mdndist2.htm,
+	  nethelp3.3/mdnerr.htm, nethelp3.3/mdnfwd.htm,
+	  nethelp3.3/mdngrad.htm, nethelp3.3/mdninit.htm,
+	  nethelp3.3/mdnpak.htm, nethelp3.3/mdnpost.htm,
+	  nethelp3.3/mdnprob.htm, nethelp3.3/mdnunpak.htm,
+	  nethelp3.3/metrop.htm, nethelp3.3/minbrack.htm,
+	  nethelp3.3/mlp.htm, nethelp3.3/mlpbkp.htm,
+	  nethelp3.3/mlpderiv.htm, nethelp3.3/mlperr.htm,
+	  nethelp3.3/mlpevfwd.htm, nethelp3.3/mlpfwd.htm,
+	  nethelp3.3/mlpgrad.htm, nethelp3.3/mlphdotv.htm,
+	  nethelp3.3/mlphess.htm, nethelp3.3/mlphint.htm,
+	  nethelp3.3/mlpinit.htm, nethelp3.3/mlppak.htm,
+	  nethelp3.3/mlpprior.htm, nethelp3.3/mlptrain.htm,
+	  nethelp3.3/mlpunpak.htm, nethelp3.3/netderiv.htm,
+	  nethelp3.3/neterr.htm, nethelp3.3/netevfwd.htm,
+	  nethelp3.3/netgrad.htm, nethelp3.3/nethelp3.3.zip,
+	  nethelp3.3/nethess.htm, nethelp3.3/netinit.htm,
+	  nethelp3.3/netopt.htm, nethelp3.3/netpak.htm,
+	  nethelp3.3/netunpak.htm, nethelp3.3/olgd.htm, nethelp3.3/pca.htm,
+	  nethelp3.3/plotmat.htm, nethelp3.3/ppca.htm,
+	  nethelp3.3/quasinew.htm, nethelp3.3/rbf.htm,
+	  nethelp3.3/rbfbkp.htm, nethelp3.3/rbfderiv.htm,
+	  nethelp3.3/rbferr.htm, nethelp3.3/rbfevfwd.htm,
+	  nethelp3.3/rbffwd.htm, nethelp3.3/rbfgrad.htm,
+	  nethelp3.3/rbfhess.htm, nethelp3.3/rbfjacob.htm,
+	  nethelp3.3/rbfpak.htm, nethelp3.3/rbfprior.htm,
+	  nethelp3.3/rbfsetbf.htm, nethelp3.3/rbfsetfw.htm,
+	  nethelp3.3/rbftrain.htm, nethelp3.3/rbfunpak.htm,
+	  nethelp3.3/rosegrad.htm, nethelp3.3/rosen.htm,
+	  nethelp3.3/scg.htm, nethelp3.3/som.htm, nethelp3.3/somfwd.htm,
+	  nethelp3.3/sompak.htm, nethelp3.3/somtrain.htm,
+	  nethelp3.3/somunpak.htm, netlab3.3/Contents.m, netlab3.3/LICENSE,
+	  netlab3.3/conffig.m, netlab3.3/confmat.m, netlab3.3/conjgrad.m,
+	  netlab3.3/consist.m, netlab3.3/convertoldnet.m,
+	  netlab3.3/datread.m, netlab3.3/datwrite.m, netlab3.3/demard.m,
+	  netlab3.3/demev1.m, netlab3.3/demev2.m, netlab3.3/demev3.m,
+	  netlab3.3/demgauss.m, netlab3.3/demglm1.m, netlab3.3/demglm2.m,
+	  netlab3.3/demgmm2.m, netlab3.3/demgmm3.m, netlab3.3/demgmm4.m,
+	  netlab3.3/demgmm5.m, netlab3.3/demgp.m, netlab3.3/demgpard.m,
+	  netlab3.3/demgpot.m, netlab3.3/demgtm1.m, netlab3.3/demgtm2.m,
+	  netlab3.3/demhint.m, netlab3.3/demhmc2.m, netlab3.3/demhmc3.m,
+	  netlab3.3/demkmn1.m, netlab3.3/demknn1.m, netlab3.3/demmdn1.m,
+	  netlab3.3/demmlp1.m, netlab3.3/demmlp2.m, netlab3.3/demnlab.m,
+	  netlab3.3/demns1.m, netlab3.3/demolgd1.m, netlab3.3/demopt1.m,
+	  netlab3.3/dempot.m, netlab3.3/demprgp.m, netlab3.3/demprior.m,
+	  netlab3.3/demrbf1.m, netlab3.3/demsom1.m, netlab3.3/demtrain.m,
+	  netlab3.3/dist2.m, netlab3.3/eigdec.m, netlab3.3/errbayes.m,
+	  netlab3.3/evidence.m, netlab3.3/fevbayes.m, netlab3.3/gauss.m,
+	  netlab3.3/gbayes.m, netlab3.3/glm.m, netlab3.3/glmderiv.m,
+	  netlab3.3/glmerr.m, netlab3.3/glmevfwd.m, netlab3.3/glmfwd.m,
+	  netlab3.3/glmgrad.m, netlab3.3/glmhess.m, netlab3.3/glminit.m,
+	  netlab3.3/glmpak.m, netlab3.3/glmtrain.m, netlab3.3/glmunpak.m,
+	  netlab3.3/gmm.m, netlab3.3/gmmactiv.m, netlab3.3/gmmem.m,
+	  netlab3.3/gmmpak.m, netlab3.3/gmmpost.m, netlab3.3/gmmprob.m,
+	  netlab3.3/gmmsamp.m, netlab3.3/gmmunpak.m, netlab3.3/gp.m,
+	  netlab3.3/gpcovar.m, netlab3.3/gpcovarf.m, netlab3.3/gpcovarp.m,
+	  netlab3.3/gperr.m, netlab3.3/gpfwd.m, netlab3.3/gpgrad.m,
+	  netlab3.3/gpinit.m, netlab3.3/gppak.m, netlab3.3/gpunpak.m,
+	  netlab3.3/gradchek.m, netlab3.3/graddesc.m, netlab3.3/gsamp.m,
+	  netlab3.3/gtm.m, netlab3.3/gtmem.m, netlab3.3/gtmfwd.m,
+	  netlab3.3/gtminit.m, netlab3.3/gtmlmean.m, netlab3.3/gtmlmode.m,
+	  netlab3.3/gtmmag.m, netlab3.3/gtmpost.m, netlab3.3/gtmprob.m,
+	  netlab3.3/hbayes.m, netlab3.3/hesschek.m, netlab3.3/hintmat.m,
+	  netlab3.3/hinton.m, netlab3.3/histp.m, netlab3.3/hmc.m,
+	  netlab3.3/kmeansNetlab.m, netlab3.3/knn.m, netlab3.3/knnfwd.m,
+	  netlab3.3/linef.m, netlab3.3/linemin.m, netlab3.3/maxitmess.m,
+	  netlab3.3/mdn.m, netlab3.3/mdn2gmm.m, netlab3.3/mdndist2.m,
+	  netlab3.3/mdnerr.m, netlab3.3/mdnfwd.m, netlab3.3/mdngrad.m,
+	  netlab3.3/mdninit.m, netlab3.3/mdnnet.mat, netlab3.3/mdnpak.m,
+	  netlab3.3/mdnpost.m, netlab3.3/mdnprob.m, netlab3.3/mdnunpak.m,
+	  netlab3.3/minbrack.m, netlab3.3/mlp.m, netlab3.3/mlpbkp.m,
+	  netlab3.3/mlpderiv.m, netlab3.3/mlperr.m, netlab3.3/mlpevfwd.m,
+	  netlab3.3/mlpfwd.m, netlab3.3/mlpgrad.m, netlab3.3/mlphdotv.m,
+	  netlab3.3/mlphess.m, netlab3.3/mlphint.m, netlab3.3/mlpinit.m,
+	  netlab3.3/mlppak.m, netlab3.3/mlpprior.m, netlab3.3/mlptrain.m,
+	  netlab3.3/mlpunpak.m, netlab3.3/netderiv.m, netlab3.3/neterr.m,
+	  netlab3.3/netevfwd.m, netlab3.3/netgrad.m, netlab3.3/nethess.m,
+	  netlab3.3/netinit.m, netlab3.3/netlab3.3.zip,
+	  netlab3.3/netlogo.mat, netlab3.3/netopt.m, netlab3.3/netpak.m,
+	  netlab3.3/netunpak.m, netlab3.3/oilTrn.dat, netlab3.3/oilTst.dat,
+	  netlab3.3/olgd.m, netlab3.3/pca.m, netlab3.3/plotmat.m,
+	  netlab3.3/ppca.m, netlab3.3/quasinew.m, netlab3.3/rbf.m,
+	  netlab3.3/rbfbkp.m, netlab3.3/rbfderiv.m, netlab3.3/rbferr.m,
+	  netlab3.3/rbfevfwd.m, netlab3.3/rbffwd.m, netlab3.3/rbfgrad.m,
+	  netlab3.3/rbfhess.m, netlab3.3/rbfjacob.m, netlab3.3/rbfpak.m,
+	  netlab3.3/rbfprior.m, netlab3.3/rbfsetbf.m, netlab3.3/rbfsetfw.m,
+	  netlab3.3/rbftrain.m, netlab3.3/rbfunpak.m, netlab3.3/rosegrad.m,
+	  netlab3.3/rosen.m, netlab3.3/scg.m, netlab3.3/som.m,
+	  netlab3.3/somfwd.m, netlab3.3/sompak.m, netlab3.3/somtrain.m,
+	  netlab3.3/somunpak.m, netlab3.3/xor.dat, netlabKPM/README.txt,
+	  netlabKPM/demgmm1_movie.m, netlabKPM/evidence_weighted.m,
+	  netlabKPM/glmerr_weighted.m, netlabKPM/glmgrad_weighted.m,
+	  netlabKPM/glmhess_weighted.m, netlabKPM/glmtrain_weighted.m,
+	  netlabKPM/gmm1.avi, netlabKPM/gmmem2.m,
+	  netlabKPM/gmmem_multi_restart.m, netlabKPM/kmeans_demo.m,
+	  netlabKPM/mlperr_weighted.m, netlabKPM/mlpgrad_weighted.m,
+	  netlabKPM/mlphdotv_weighted.m, netlabKPM/mlphess_weighted.m,
+	  netlabKPM/neterr_weighted.m, netlabKPM/netgrad_weighted.m,
+	  netlabKPM/nethess_weighted.m, netlabKPM/netopt_weighted.m,
+	  netlabKPM/process_options.m: Initial revision
+
+2005-04-25 19:29  yozhik
+
+	* KPMstats/KLgauss.m, KPMstats/README.txt, KPMstats/beta_sample.m,
+	  KPMstats/chisquared_histo.m, KPMstats/chisquared_prob.m,
+	  KPMstats/chisquared_readme.txt, KPMstats/chisquared_table.m,
+	  KPMstats/clg_Mstep.m, KPMstats/clg_Mstep_simple.m,
+	  KPMstats/clg_prob.m, KPMstats/condGaussToJoint.m,
+	  KPMstats/cond_indep_fisher_z.m,
+	  KPMstats/condgaussTrainObserved.m, KPMstats/condgauss_sample.m,
+	  KPMstats/convertBinaryLabels.m, KPMstats/cwr_demo.m,
+	  KPMstats/cwr_em.m, KPMstats/cwr_predict.m, KPMstats/cwr_prob.m,
+	  KPMstats/cwr_readme.txt, KPMstats/cwr_test.m,
+	  KPMstats/dirichlet_sample.m, KPMstats/distchck.m,
+	  KPMstats/eigdec.m, KPMstats/est_transmat.m,
+	  KPMstats/fit_paritioned_model_testfn.m,
+	  KPMstats/fit_partitioned_model.m, KPMstats/gamma_sample.m,
+	  KPMstats/gaussian_prob.m, KPMstats/gaussian_sample.m,
+	  KPMstats/linear_regression.m, KPMstats/logist2.m,
+	  KPMstats/logist2Apply.m, KPMstats/logist2ApplyRegularized.m,
+	  KPMstats/logist2Fit.m, KPMstats/logist2FitRegularized.m,
+	  KPMstats/logistK.m, KPMstats/logistK_eval.m,
+	  KPMstats/marginalize_gaussian.m, KPMstats/matrix_T_pdf.m,
+	  KPMstats/matrix_normal_pdf.m, KPMstats/mc_stat_distrib.m,
+	  KPMstats/mixgauss_Mstep.m, KPMstats/mixgauss_classifier_apply.m,
+	  KPMstats/mixgauss_classifier_train.m, KPMstats/mixgauss_em.m,
+	  KPMstats/mixgauss_init.m, KPMstats/mixgauss_prob.m,
+	  KPMstats/mixgauss_prob_test.m, KPMstats/mixgauss_sample.m,
+	  KPMstats/mkPolyFvec.m, KPMstats/mk_unit_norm.m,
+	  KPMstats/multinomial_prob.m, KPMstats/multinomial_sample.m,
+	  KPMstats/normal_coef.m, KPMstats/partial_corr_coef.m,
+	  KPMstats/parzen.m, KPMstats/parzenC.c, KPMstats/parzenC.dll,
+	  KPMstats/parzenC.mexglx, KPMstats/parzenC_test.m,
+	  KPMstats/parzen_fit_select_unif.m, KPMstats/pca.m,
+	  KPMstats/rndcheck.m, KPMstats/sample.m,
+	  KPMstats/sample_discrete.m, KPMstats/sample_gaussian.m,
+	  KPMstats/student_t_logprob.m, KPMstats/student_t_prob.m,
+	  KPMstats/unif_discrete_sample.m, KPMstats/weightedRegression.m,
+	  KPMtools/README.txt, KPMtools/approx_unique.m,
+	  KPMtools/approxeq.m, KPMtools/argmax.m, KPMtools/argmin.m,
+	  KPMtools/assert.m, KPMtools/assignEdgeNums.m,
+	  KPMtools/assign_cols.m, KPMtools/axis_pct.m, KPMtools/block.m,
+	  KPMtools/cell2num.m, KPMtools/chi2inv.m, KPMtools/choose.m,
+	  KPMtools/collapse_mog.m, KPMtools/colmult.c,
+	  KPMtools/colmult.mexglx, KPMtools/computeROC.m,
+	  KPMtools/compute_counts.m, KPMtools/conf2mahal.m,
+	  KPMtools/cross_entropy.m, KPMtools/div.m, KPMtools/draw_circle.m,
+	  KPMtools/draw_ellipse.m, KPMtools/draw_ellipse_axes.m,
+	  KPMtools/em_converged.m, KPMtools/entropy.m,
+	  KPMtools/exportfig.m, KPMtools/extend_domain_table.m,
+	  KPMtools/factorial.m, KPMtools/find_equiv_posns.m,
+	  KPMtools/hash_add.m, KPMtools/hash_del.m, KPMtools/hash_lookup.m,
+	  KPMtools/hungarian.m, KPMtools/image_rgb.m,
+	  KPMtools/imresizeAspect.m, KPMtools/ind2subv.c,
+	  KPMtools/ind2subv.m, KPMtools/installC_KPMtools.m,
+	  KPMtools/is_psd.m, KPMtools/is_stochastic.m,
+	  KPMtools/isemptycell.m, KPMtools/isposdef.m, KPMtools/isscalar.m,
+	  KPMtools/isvector.m, KPMtools/junk.c, KPMtools/loadcell.m,
+	  KPMtools/logb.m, KPMtools/logdet.m, KPMtools/logsum.m,
+	  KPMtools/logsum_simple.m, KPMtools/logsum_test.m,
+	  KPMtools/logsumexp.m, KPMtools/logsumexpv.m,
+	  KPMtools/marg_table.m, KPMtools/marginalize_table.m,
+	  KPMtools/matprint.m, KPMtools/max_mult.c, KPMtools/max_mult.m,
+	  KPMtools/mexutil.c, KPMtools/mexutil.h,
+	  KPMtools/mk_multi_index.m, KPMtools/mk_stochastic.m,
+	  KPMtools/mult_by_table.m, KPMtools/myintersect.m,
+	  KPMtools/myismember.m, KPMtools/myones.m, KPMtools/myplot.m,
+	  KPMtools/myrand.m, KPMtools/myrepmat.m, KPMtools/myreshape.m,
+	  KPMtools/mysetdiff.m, KPMtools/mysize.m, KPMtools/mysubset.m,
+	  KPMtools/mysymsetdiff.m, KPMtools/bipartiteMatchingHungarian.m,
+	  KPMtools/myunion.m, KPMtools/nchoose2.m, KPMtools/ncols.m,
+	  KPMtools/nonmaxsup.m, KPMtools/normalise.m,
+	  KPMtools/normaliseC.c, KPMtools/normaliseC.dll,
+	  KPMtools/normalize.m, KPMtools/nrows.m, KPMtools/num2strcell.m,
+	  KPMtools/partitionData.m, KPMtools/partition_matrix_vec.m,
+	  KPMtools/pca_netlab.m, KPMtools/pick.m, KPMtools/plotROC.m,
+	  KPMtools/plotROCkpm.m, KPMtools/plot_axis_thru_origin.m,
+	  KPMtools/plot_ellipse.m, KPMtools/plot_matrix.m,
+	  KPMtools/plot_polygon.m, KPMtools/plotcov2.m,
+	  KPMtools/plotcov3.m, KPMtools/plotgauss1d.m,
+	  KPMtools/plotgauss2d.m, KPMtools/plotgauss2d_old.m,
+	  KPMtools/polygon_area.m, KPMtools/polygon_centroid.m,
+	  KPMtools/polygon_intersect.m, KPMtools/previewfig.m,
+	  KPMtools/process_options.m, KPMtools/rand_psd.m,
+	  KPMtools/rectintC.m, KPMtools/rectintLoopC.mexglx,
+	  KPMtools/rectintSparse.m, KPMtools/rectintSparseC.m,
+	  KPMtools/rectintSparseLoopC.c, KPMtools/rectintSparseLoopC.dll,
+	  KPMtools/repmatC.c, KPMtools/repmatC.dll,
+	  KPMtools/repmatC.mexglx, KPMtools/rgb2grayKPM.m,
+	  KPMtools/rnd_partition.m, KPMtools/rotate_xlabel.m,
+	  KPMtools/safeStr.m, KPMtools/sampleUniformInts.m,
+	  KPMtools/sample_discrete.m, KPMtools/set_xtick_label.m,
+	  KPMtools/set_xtick_label_demo.m, KPMtools/setdiag.m,
+	  KPMtools/softeye.m, KPMtools/sort_evec.m,
+	  KPMtools/splitLongSeqIntoManyShort.m, KPMtools/sprintf_intvec.m,
+	  KPMtools/sqdist.m, KPMtools/strmatch_multi.m,
+	  KPMtools/strmatch_substr.m, KPMtools/subplot2.m,
+	  KPMtools/subplot3.m, KPMtools/subsets.m, KPMtools/subv2ind.c,
+	  KPMtools/subv2ind.m, KPMtools/sumv.m, KPMtools/suptitle.m,
+	  KPMtools/unaryEncoding.m, KPMtools/wrap.m,
+	  KPMtools/xticklabel_rotate90.m, KPMtools/zipload.m,
+	  KPMtools/zipsave.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-04-25 19:29  yozhik
+
+	* KPMstats/KLgauss.m, KPMstats/README.txt, KPMstats/beta_sample.m,
+	  KPMstats/chisquared_histo.m, KPMstats/chisquared_prob.m,
+	  KPMstats/chisquared_readme.txt, KPMstats/chisquared_table.m,
+	  KPMstats/clg_Mstep.m, KPMstats/clg_Mstep_simple.m,
+	  KPMstats/clg_prob.m, KPMstats/condGaussToJoint.m,
+	  KPMstats/cond_indep_fisher_z.m,
+	  KPMstats/condgaussTrainObserved.m, KPMstats/condgauss_sample.m,
+	  KPMstats/convertBinaryLabels.m, KPMstats/cwr_demo.m,
+	  KPMstats/cwr_em.m, KPMstats/cwr_predict.m, KPMstats/cwr_prob.m,
+	  KPMstats/cwr_readme.txt, KPMstats/cwr_test.m,
+	  KPMstats/dirichlet_sample.m, KPMstats/distchck.m,
+	  KPMstats/eigdec.m, KPMstats/est_transmat.m,
+	  KPMstats/fit_paritioned_model_testfn.m,
+	  KPMstats/fit_partitioned_model.m, KPMstats/gamma_sample.m,
+	  KPMstats/gaussian_prob.m, KPMstats/gaussian_sample.m,
+	  KPMstats/linear_regression.m, KPMstats/logist2.m,
+	  KPMstats/logist2Apply.m, KPMstats/logist2ApplyRegularized.m,
+	  KPMstats/logist2Fit.m, KPMstats/logist2FitRegularized.m,
+	  KPMstats/logistK.m, KPMstats/logistK_eval.m,
+	  KPMstats/marginalize_gaussian.m, KPMstats/matrix_T_pdf.m,
+	  KPMstats/matrix_normal_pdf.m, KPMstats/mc_stat_distrib.m,
+	  KPMstats/mixgauss_Mstep.m, KPMstats/mixgauss_classifier_apply.m,
+	  KPMstats/mixgauss_classifier_train.m, KPMstats/mixgauss_em.m,
+	  KPMstats/mixgauss_init.m, KPMstats/mixgauss_prob.m,
+	  KPMstats/mixgauss_prob_test.m, KPMstats/mixgauss_sample.m,
+	  KPMstats/mkPolyFvec.m, KPMstats/mk_unit_norm.m,
+	  KPMstats/multinomial_prob.m, KPMstats/multinomial_sample.m,
+	  KPMstats/normal_coef.m, KPMstats/partial_corr_coef.m,
+	  KPMstats/parzen.m, KPMstats/parzenC.c, KPMstats/parzenC.dll,
+	  KPMstats/parzenC.mexglx, KPMstats/parzenC_test.m,
+	  KPMstats/parzen_fit_select_unif.m, KPMstats/pca.m,
+	  KPMstats/rndcheck.m, KPMstats/sample.m,
+	  KPMstats/sample_discrete.m, KPMstats/sample_gaussian.m,
+	  KPMstats/student_t_logprob.m, KPMstats/student_t_prob.m,
+	  KPMstats/unif_discrete_sample.m, KPMstats/weightedRegression.m,
+	  KPMtools/README.txt, KPMtools/approx_unique.m,
+	  KPMtools/approxeq.m, KPMtools/argmax.m, KPMtools/argmin.m,
+	  KPMtools/assert.m, KPMtools/assignEdgeNums.m,
+	  KPMtools/assign_cols.m, KPMtools/axis_pct.m, KPMtools/block.m,
+	  KPMtools/cell2num.m, KPMtools/chi2inv.m, KPMtools/choose.m,
+	  KPMtools/collapse_mog.m, KPMtools/colmult.c,
+	  KPMtools/colmult.mexglx, KPMtools/computeROC.m,
+	  KPMtools/compute_counts.m, KPMtools/conf2mahal.m,
+	  KPMtools/cross_entropy.m, KPMtools/div.m, KPMtools/draw_circle.m,
+	  KPMtools/draw_ellipse.m, KPMtools/draw_ellipse_axes.m,
+	  KPMtools/em_converged.m, KPMtools/entropy.m,
+	  KPMtools/exportfig.m, KPMtools/extend_domain_table.m,
+	  KPMtools/factorial.m, KPMtools/find_equiv_posns.m,
+	  KPMtools/hash_add.m, KPMtools/hash_del.m, KPMtools/hash_lookup.m,
+	  KPMtools/hungarian.m, KPMtools/image_rgb.m,
+	  KPMtools/imresizeAspect.m, KPMtools/ind2subv.c,
+	  KPMtools/ind2subv.m, KPMtools/installC_KPMtools.m,
+	  KPMtools/is_psd.m, KPMtools/is_stochastic.m,
+	  KPMtools/isemptycell.m, KPMtools/isposdef.m, KPMtools/isscalar.m,
+	  KPMtools/isvector.m, KPMtools/junk.c, KPMtools/loadcell.m,
+	  KPMtools/logb.m, KPMtools/logdet.m, KPMtools/logsum.m,
+	  KPMtools/logsum_simple.m, KPMtools/logsum_test.m,
+	  KPMtools/logsumexp.m, KPMtools/logsumexpv.m,
+	  KPMtools/marg_table.m, KPMtools/marginalize_table.m,
+	  KPMtools/matprint.m, KPMtools/max_mult.c, KPMtools/max_mult.m,
+	  KPMtools/mexutil.c, KPMtools/mexutil.h,
+	  KPMtools/mk_multi_index.m, KPMtools/mk_stochastic.m,
+	  KPMtools/mult_by_table.m, KPMtools/myintersect.m,
+	  KPMtools/myismember.m, KPMtools/myones.m, KPMtools/myplot.m,
+	  KPMtools/myrand.m, KPMtools/myrepmat.m, KPMtools/myreshape.m,
+	  KPMtools/mysetdiff.m, KPMtools/mysize.m, KPMtools/mysubset.m,
+	  KPMtools/mysymsetdiff.m, KPMtools/bipartiteMatchingHungarian.m,
+	  KPMtools/myunion.m, KPMtools/nchoose2.m, KPMtools/ncols.m,
+	  KPMtools/nonmaxsup.m, KPMtools/normalise.m,
+	  KPMtools/normaliseC.c, KPMtools/normaliseC.dll,
+	  KPMtools/normalize.m, KPMtools/nrows.m, KPMtools/num2strcell.m,
+	  KPMtools/partitionData.m, KPMtools/partition_matrix_vec.m,
+	  KPMtools/pca_netlab.m, KPMtools/pick.m, KPMtools/plotROC.m,
+	  KPMtools/plotROCkpm.m, KPMtools/plot_axis_thru_origin.m,
+	  KPMtools/plot_ellipse.m, KPMtools/plot_matrix.m,
+	  KPMtools/plot_polygon.m, KPMtools/plotcov2.m,
+	  KPMtools/plotcov3.m, KPMtools/plotgauss1d.m,
+	  KPMtools/plotgauss2d.m, KPMtools/plotgauss2d_old.m,
+	  KPMtools/polygon_area.m, KPMtools/polygon_centroid.m,
+	  KPMtools/polygon_intersect.m, KPMtools/previewfig.m,
+	  KPMtools/process_options.m, KPMtools/rand_psd.m,
+	  KPMtools/rectintC.m, KPMtools/rectintLoopC.mexglx,
+	  KPMtools/rectintSparse.m, KPMtools/rectintSparseC.m,
+	  KPMtools/rectintSparseLoopC.c, KPMtools/rectintSparseLoopC.dll,
+	  KPMtools/repmatC.c, KPMtools/repmatC.dll,
+	  KPMtools/repmatC.mexglx, KPMtools/rgb2grayKPM.m,
+	  KPMtools/rnd_partition.m, KPMtools/rotate_xlabel.m,
+	  KPMtools/safeStr.m, KPMtools/sampleUniformInts.m,
+	  KPMtools/sample_discrete.m, KPMtools/set_xtick_label.m,
+	  KPMtools/set_xtick_label_demo.m, KPMtools/setdiag.m,
+	  KPMtools/softeye.m, KPMtools/sort_evec.m,
+	  KPMtools/splitLongSeqIntoManyShort.m, KPMtools/sprintf_intvec.m,
+	  KPMtools/sqdist.m, KPMtools/strmatch_multi.m,
+	  KPMtools/strmatch_substr.m, KPMtools/subplot2.m,
+	  KPMtools/subplot3.m, KPMtools/subsets.m, KPMtools/subv2ind.c,
+	  KPMtools/subv2ind.m, KPMtools/sumv.m, KPMtools/suptitle.m,
+	  KPMtools/unaryEncoding.m, KPMtools/wrap.m,
+	  KPMtools/xticklabel_rotate90.m, KPMtools/zipload.m,
+	  KPMtools/zipsave.m: Initial revision
+
+2005-04-03 18:39  yozhik
+
+	* BNT/learning/score_dags.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-04-03 18:39  yozhik
+
+	* BNT/learning/score_dags.m: Initial revision
+
+2005-03-31 11:20  yozhik
+
+	* BNT/installC_BNT.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-03-31 11:20  yozhik
+
+	* BNT/installC_BNT.m: Initial revision
+
+2005-03-30 11:59  yozhik
+
+	* KPMtools/asdemo.html: Initial import of code base from Kevin
+	  Murphy.
+
+2005-03-30 11:59  yozhik
+
+	* KPMtools/asdemo.html: Initial revision
+
+2005-03-26 18:51  yozhik
+
+	* KPMtools/asdemo.m: Initial import of code base from Kevin Murphy.
+
+2005-03-26 18:51  yozhik
+
+	* KPMtools/asdemo.m: Initial revision
+
+2005-01-15 18:27  yozhik
+
+	* BNT/CPDs/@tabular_CPD/: get_field.m, set_fields.m, tabular_CPD.m:
+	  Initial import of code base from Kevin Murphy.
+
+2005-01-15 18:27  yozhik
+
+	* BNT/CPDs/@tabular_CPD/: get_field.m, set_fields.m, tabular_CPD.m:
+	  Initial revision
+
+2004-11-24 12:12  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/junk: Initial import of
+	  code base from Kevin Murphy.
+
+2004-11-24 12:12  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/junk: Initial revision
+
+2004-11-22 14:41  yozhik
+
+	* BNT/examples/dynamic/orig_water1.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-11-22 14:41  yozhik
+
+	* BNT/examples/dynamic/orig_water1.m: Initial revision
+
+2004-11-22 14:15  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/cbk_inf_engine.m: Initial
+	  import of code base from Kevin Murphy.
+
+2004-11-22 14:15  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/cbk_inf_engine.m: Initial
+	  revision
+
+2004-11-06 13:52  yozhik
+
+	* BNT/examples/static/StructLearn/model_select2.m: Initial import
+	  of code base from Kevin Murphy.
+
+2004-11-06 13:52  yozhik
+
+	* BNT/examples/static/StructLearn/model_select2.m: Initial revision
+
+2004-11-06 12:55  yozhik
+
+	* BNT/examples/static/StructLearn/model_select1.m: Initial import
+	  of code base from Kevin Murphy.
+
+2004-11-06 12:55  yozhik
+
+	* BNT/examples/static/StructLearn/model_select1.m: Initial revision
+
+2004-10-22 18:18  yozhik
+
+	* HMM/viterbi_path.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-10-22 18:18  yozhik
+
+	* HMM/viterbi_path.m: Initial revision
+
+2004-09-29 20:09  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-09-29 20:09  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2004-09-12 20:21  yozhik
+
+	* BNT/examples/limids/amnio.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-09-12 20:21  yozhik
+
+	* BNT/examples/limids/amnio.m: Initial revision
+
+2004-09-12 19:27  yozhik
+
+	* BNT/examples/limids/oil1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-09-12 19:27  yozhik
+
+	* BNT/examples/limids/oil1.m: Initial revision
+
+2004-09-12 14:01  yozhik
+
+	* BNT/examples/static/sprinkler1.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-09-12 14:01  yozhik
+
+	* BNT/examples/static/sprinkler1.m: Initial revision
+
+2004-08-29 05:41  yozhik
+
+	* HMM/transmat_train_observed.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-08-29 05:41  yozhik
+
+	* HMM/transmat_train_observed.m: Initial revision
+
+2004-08-05 08:25  yozhik
+
+	* BNT/potentials/: @dpot/divide_by_pot.m, Tables/divide_by_table.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-08-05 08:25  yozhik
+
+	* BNT/potentials/: @dpot/divide_by_pot.m, Tables/divide_by_table.m:
+	  Initial revision
+
+2004-08-04 12:59  yozhik
+
+	* BNT/potentials/@dpot/: marginalize_pot.m, multiply_by_pot.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-08-04 12:59  yozhik
+
+	* BNT/potentials/@dpot/: marginalize_pot.m, multiply_by_pot.m:
+	  Initial revision
+
+2004-08-04 12:36  yozhik
+
+	* BNT/@assocarray/subsref.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-08-04 12:36  yozhik
+
+	* BNT/@assocarray/subsref.m: Initial revision
+
+2004-08-04 08:54  yozhik
+
+	* BNT/potentials/@dpot/normalize_pot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-08-04 08:54  yozhik
+
+	* BNT/potentials/@dpot/normalize_pot.m: Initial revision
+
+2004-08-04 08:51  yozhik
+
+	* BNT/potentials/Tables/: marg_table.m, mult_by_table.m,
+	  extend_domain_table.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-08-04 08:51  yozhik
+
+	* BNT/potentials/Tables/: marg_table.m, mult_by_table.m,
+	  extend_domain_table.m: Initial revision
+
+2004-08-02 15:23  yozhik
+
+	* BNT/CPDs/@noisyor_CPD/CPD_to_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-08-02 15:23  yozhik
+
+	* BNT/CPDs/@noisyor_CPD/CPD_to_CPT.m: Initial revision
+
+2004-08-02 15:05  yozhik
+
+	* BNT/general/noisyORtoTable.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-08-02 15:05  yozhik
+
+	* BNT/general/noisyORtoTable.m: Initial revision
+
+2004-06-29 10:46  yozhik
+
+	* BNT/learning/learn_struct_pdag_pc.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-06-29 10:46  yozhik
+
+	* BNT/learning/learn_struct_pdag_pc.m: Initial revision
+
+2004-06-15 10:50  yozhik
+
+	* GraphViz/graph_to_dot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-06-15 10:50  yozhik
+
+	* GraphViz/graph_to_dot.m: Initial revision
+
+2004-06-11 14:16  yozhik
+
+	* BNT/CPDs/@tabular_CPD/log_marg_prob_node.m: Initial import of
+	  code base from Kevin Murphy.
+
+2004-06-11 14:16  yozhik
+
+	* BNT/CPDs/@tabular_CPD/log_marg_prob_node.m: Initial revision
+
+2004-06-09 18:56  yozhik
+
+	* BNT/README.txt: Initial import of code base from Kevin Murphy.
+
+2004-06-09 18:56  yozhik
+
+	* BNT/README.txt: Initial revision
+
+2004-06-09 18:53  yozhik
+
+	* BNT/CPDs/@generic_CPD/learn_params.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-06-09 18:53  yozhik
+
+	* BNT/CPDs/@generic_CPD/learn_params.m: Initial revision
+
+2004-06-09 18:42  yozhik
+
+	* BNT/examples/static/nodeorderExample.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-06-09 18:42  yozhik
+
+	* BNT/examples/static/nodeorderExample.m: Initial revision
+
+2004-06-09 18:33  yozhik
+
+	* BNT/: learning/score_family.m, test_BNT.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-06-09 18:33  yozhik
+
+	* BNT/: learning/score_family.m, test_BNT.m: Initial revision
+
+2004-06-09 18:28  yozhik
+
+	* BNT/: learning/learn_params.m, CPDs/@gaussian_CPD/learn_params.m,
+	  examples/static/gaussian2.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-09 18:28  yozhik
+
+	* BNT/: learning/learn_params.m, CPDs/@gaussian_CPD/learn_params.m,
+	  examples/static/gaussian2.m: Initial revision
+
+2004-06-09 18:25  yozhik
+
+	* BNT/CPDs/@tabular_CPD/learn_params.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-06-09 18:25  yozhik
+
+	* BNT/CPDs/@tabular_CPD/learn_params.m: Initial revision
+
+2004-06-09 18:17  yozhik
+
+	* BNT/general/sample_bnet.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-06-09 18:17  yozhik
+
+	* BNT/general/sample_bnet.m: Initial revision
+
+2004-06-07 12:45  yozhik
+
+	* BNT/examples/static/discrete1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-07 12:45  yozhik
+
+	* BNT/examples/static/discrete1.m: Initial revision
+
+2004-06-07 12:04  yozhik
+
+	* BNT/: inference/static/@global_joint_inf_engine/marginal_nodes.m,
+	  inference/static/@global_joint_inf_engine/enter_evidence.m,
+	  examples/dynamic/mk_bat_dbn.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-07 12:04  yozhik
+
+	* BNT/: inference/static/@global_joint_inf_engine/marginal_nodes.m,
+	  inference/static/@global_joint_inf_engine/enter_evidence.m,
+	  examples/dynamic/mk_bat_dbn.m: Initial revision
+
+2004-06-07 08:53  yozhik
+
+	* BNT/examples/limids/asia_dt1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-07 08:53  yozhik
+
+	* BNT/examples/limids/asia_dt1.m: Initial revision
+
+2004-06-07 08:48  yozhik
+
+	* BNT/general/: solve_limid.m, compute_joint_pot.m: Initial import
+	  of code base from Kevin Murphy.
+
+2004-06-07 08:48  yozhik
+
+	* BNT/general/: solve_limid.m, compute_joint_pot.m: Initial
+	  revision
+
+2004-06-07 07:39  yozhik
+
+	* Kalman/README.txt: Initial import of code base from Kevin Murphy.
+
+2004-06-07 07:39  yozhik
+
+	* Kalman/README.txt: Initial revision
+
+2004-06-07 07:33  yozhik
+
+	* GraphViz/README.txt: Initial import of code base from Kevin
+	  Murphy.
+
+2004-06-07 07:33  yozhik
+
+	* GraphViz/README.txt: Initial revision
+
+2004-05-31 15:19  yozhik
+
+	* HMM/dhmm_sample.m: Initial import of code base from Kevin Murphy.
+
+2004-05-31 15:19  yozhik
+
+	* HMM/dhmm_sample.m: Initial revision
+
+2004-05-25 17:32  yozhik
+
+	* HMM/mhmm_sample.m: Initial import of code base from Kevin Murphy.
+
+2004-05-25 17:32  yozhik
+
+	* HMM/mhmm_sample.m: Initial revision
+
+2004-05-24 15:26  yozhik
+
+	* HMM/mc_sample.m: Initial import of code base from Kevin Murphy.
+
+2004-05-24 15:26  yozhik
+
+	* HMM/mc_sample.m: Initial revision
+
+2004-05-18 07:50  yozhik
+
+	* BNT/installC_graph.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-05-18 07:50  yozhik
+
+	* BNT/installC_graph.m: Initial revision
+
+2004-05-13 18:13  yozhik
+
+	* BNT/inference/static/@gaussian_inf_engine/gaussian_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-05-13 18:13  yozhik
+
+	* BNT/inference/static/@gaussian_inf_engine/gaussian_inf_engine.m:
+	  Initial revision
+
+2004-05-11 12:23  yozhik
+
+	* BNT/examples/dynamic/mk_chmm.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-05-11 12:23  yozhik
+
+	* BNT/examples/dynamic/mk_chmm.m: Initial revision
+
+2004-05-11 11:45  yozhik
+
+	* BNT/examples/dynamic/mk_water_dbn.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-05-11 11:45  yozhik
+
+	* BNT/examples/dynamic/mk_water_dbn.m: Initial revision
+
+2004-05-05 06:32  yozhik
+
+	* GraphViz/draw_dot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-05-05 06:32  yozhik
+
+	* GraphViz/draw_dot.m: Initial revision
+
+2004-03-30 09:18  yozhik
+
+	* BNT/: general/mk_named_CPT.m,
+	  CPDs/@softmax_CPD/convert_to_table.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-03-30 09:18  yozhik
+
+	* BNT/: general/mk_named_CPT.m,
+	  CPDs/@softmax_CPD/convert_to_table.m: Initial revision
+
+2004-03-22 14:32  yozhik
+
+	* GraphViz/draw_graph.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-03-22 14:32  yozhik
+
+	* GraphViz/draw_graph.m: Initial revision
+
+2004-03-12 15:21  yozhik
+
+	* GraphViz/dot_to_graph.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-03-12 15:21  yozhik
+
+	* GraphViz/dot_to_graph.m: Initial revision
+
+2004-03-04 14:34  yozhik
+
+	* BNT/examples/static/burglary.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-03-04 14:34  yozhik
+
+	* BNT/examples/static/burglary.m: Initial revision
+
+2004-03-04 14:27  yozhik
+
+	* BNT/examples/static/burglar-alarm-net.lisp.txt: Initial import of
+	  code base from Kevin Murphy.
+
+2004-03-04 14:27  yozhik
+
+	* BNT/examples/static/burglar-alarm-net.lisp.txt: Initial revision
+
+2004-02-28 09:25  yozhik
+
+	* BNT/examples/static/learn1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-28 09:25  yozhik
+
+	* BNT/examples/static/learn1.m: Initial revision
+
+2004-02-22 11:43  yozhik
+
+	* BNT/examples/static/brainy.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-22 11:43  yozhik
+
+	* BNT/examples/static/brainy.m: Initial revision
+
+2004-02-20 14:00  yozhik
+
+	* BNT/CPDs/@discrete_CPD/convert_to_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-02-20 14:00  yozhik
+
+	* BNT/CPDs/@discrete_CPD/convert_to_pot.m: Initial revision
+
+2004-02-18 17:12  yozhik
+
+	*
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_soft_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-02-18 17:12  yozhik
+
+	*
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_soft_evidence.m:
+	  Initial revision
+
+2004-02-13 18:06  yozhik
+
+	* HMM/mhmmParzen_train_observed.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-13 18:06  yozhik
+
+	* HMM/mhmmParzen_train_observed.m: Initial revision
+
+2004-02-12 15:08  yozhik
+
+	* HMM/gausshmm_train_observed.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-12 15:08  yozhik
+
+	* HMM/gausshmm_train_observed.m: Initial revision
+
+2004-02-12 04:57  yozhik
+
+	* BNT/examples/static/HME/hmemenu.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-02-12 04:57  yozhik
+
+	* BNT/examples/static/HME/hmemenu.m: Initial revision
+
+2004-02-07 20:52  yozhik
+
+	* HMM/mhmm_em.m: Initial import of code base from Kevin Murphy.
+
+2004-02-07 20:52  yozhik
+
+	* HMM/mhmm_em.m: Initial revision
+
+2004-02-04 15:53  yozhik
+
+	* BNT/examples/dynamic/mk_orig_bat_dbn.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-02-04 15:53  yozhik
+
+	* BNT/examples/dynamic/mk_orig_bat_dbn.m: Initial revision
+
+2004-02-03 23:42  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_soft_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-02-03 23:42  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_soft_evidence.m:
+	  Initial revision
+
+2004-02-03 09:15  yozhik
+
+	* GraphViz/Old/graphToDot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-02-03 09:15  yozhik
+
+	* GraphViz/Old/graphToDot.m: Initial revision
+
+2004-01-30 18:57  yozhik
+
+	* BNT/examples/dynamic/mk_orig_water_dbn.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-01-30 18:57  yozhik
+
+	* BNT/examples/dynamic/mk_orig_water_dbn.m: Initial revision
+
+2004-01-27 13:08  yozhik
+
+	* GraphViz/: my_call.m, editGraphGUI.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-01-27 13:08  yozhik
+
+	* GraphViz/: my_call.m, editGraphGUI.m: Initial revision
+
+2004-01-27 13:01  yozhik
+
+	* GraphViz/Old/: dot_to_graph.m, draw_graph.m: Initial import of
+	  code base from Kevin Murphy.
+
+2004-01-27 13:01  yozhik
+
+	* GraphViz/Old/: dot_to_graph.m, draw_graph.m: Initial revision
+
+2004-01-27 12:47  yozhik
+
+	* GraphViz/Old/pre_pesha_graph_to_dot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-01-27 12:47  yozhik
+
+	* GraphViz/Old/pre_pesha_graph_to_dot.m: Initial revision
+
+2004-01-27 12:42  yozhik
+
+	* GraphViz/Old/draw_dot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-01-27 12:42  yozhik
+
+	* GraphViz/Old/draw_dot.m: Initial revision
+
+2004-01-14 17:06  yozhik
+
+	* BNT/examples/static/Models/mk_hmm_bnet.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-01-14 17:06  yozhik
+
+	* BNT/examples/static/Models/mk_hmm_bnet.m: Initial revision
+
+2004-01-12 12:53  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_evidence.m: Initial
+	  import of code base from Kevin Murphy.
+
+2004-01-12 12:53  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_evidence.m: Initial
+	  revision
+
+2004-01-04 17:23  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/bp_mrf2.m: Initial
+	  import of code base from Kevin Murphy.
+
+2004-01-04 17:23  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/bp_mrf2.m: Initial
+	  revision
+
+2003-12-15 22:17  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/marginal_nodes.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-12-15 22:17  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/marginal_nodes.m: Initial
+	  revision
+
+2003-10-31 14:37  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/jtree_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-10-31 14:37  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/jtree_inf_engine.m:
+	  Initial revision
+
+2003-09-05 07:06  yozhik
+
+	* BNT/learning/learn_struct_mcmc.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-09-05 07:06  yozhik
+
+	* BNT/learning/learn_struct_mcmc.m: Initial revision
+
+2003-08-18 14:50  yozhik
+
+	* BNT/learning/learn_params_dbn_em.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-08-18 14:50  yozhik
+
+	* BNT/learning/learn_params_dbn_em.m: Initial revision
+
+2003-07-30 06:37  yozhik
+
+	* BNT/potentials/: @mpot/set_domain_pot.m,
+	  @cgpot/Old/set_domain_pot.m, @cgpot/set_domain_pot.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-07-30 06:37  yozhik
+
+	* BNT/potentials/: @mpot/set_domain_pot.m,
+	  @cgpot/Old/set_domain_pot.m, @cgpot/set_domain_pot.m: Initial
+	  revision
+
+2003-07-28 19:44  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/: dbn_init_bel.m,
+	  dbn_marginal_from_bel.m, dbn_update_bel.m, dbn_update_bel1.m,
+	  marginal_family.m, update_engine.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-07-28 19:44  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/: dbn_init_bel.m,
+	  dbn_marginal_from_bel.m, dbn_update_bel.m, dbn_update_bel1.m,
+	  marginal_family.m, update_engine.m: Initial revision
+
+2003-07-28 15:44  yozhik
+
+	* GraphViz/: approxeq.m, process_options.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-07-28 15:44  yozhik
+
+	* GraphViz/: approxeq.m, process_options.m: Initial revision
+
+2003-07-24 06:41  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_ess.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-07-24 06:41  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_ess.m: Initial revision
+
+2003-07-22 15:55  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/update_ess.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-07-22 15:55  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/update_ess.m: Initial revision
+
+2003-07-06 13:57  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/bethe_free_energy.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-07-06 13:57  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/bethe_free_energy.m:
+	  Initial revision
+
+2003-05-21 06:49  yozhik
+
+	* BNT/potentials/@scgpot/: complement_pot.m, normalize_pot.m,
+	  recursive_combine_pots.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-21 06:49  yozhik
+
+	* BNT/potentials/@scgpot/: complement_pot.m, normalize_pot.m,
+	  recursive_combine_pots.m: Initial revision
+
+2003-05-20 07:10  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-05-20 07:10  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params.m: Initial revision
+
+2003-05-13 09:11  yozhik
+
+	* HMM/mhmm_em_demo.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-13 09:11  yozhik
+
+	* HMM/mhmm_em_demo.m: Initial revision
+
+2003-05-13 07:35  yozhik
+
+	* BNT/examples/dynamic/viterbi1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-05-13 07:35  yozhik
+
+	* BNT/examples/dynamic/viterbi1.m: Initial revision
+
+2003-05-11 16:31  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_table.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-05-11 16:31  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_table.m: Initial revision
+
+2003-05-11 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD_params_given_dps.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-05-11 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD_params_given_dps.m: Initial
+	  revision
+
+2003-05-11 08:39  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/README: Initial
+	  import of code base from Kevin Murphy.
+
+2003-05-11 08:39  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/README: Initial
+	  revision
+
+2003-05-04 15:31  yozhik
+
+	* BNT/uninstallC_BNT.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-04 15:31  yozhik
+
+	* BNT/uninstallC_BNT.m: Initial revision
+
+2003-05-04 15:23  yozhik
+
+	* BNT/examples/dynamic/: dhmm1.m, ghmm1.m, mhmm1.m: Initial import
+	  of code base from Kevin Murphy.
+
+2003-05-04 15:23  yozhik
+
+	* BNT/examples/dynamic/: dhmm1.m, ghmm1.m, mhmm1.m: Initial
+	  revision
+
+2003-05-04 15:11  yozhik
+
+	* HMM/mhmm_logprob.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-04 15:11  yozhik
+
+	* HMM/mhmm_logprob.m: Initial revision
+
+2003-05-04 15:01  yozhik
+
+	* HMM/: dhmm_logprob.m, dhmm_em_online.m, dhmm_em_online_demo.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 15:01  yozhik
+
+	* HMM/: dhmm_logprob.m, dhmm_em_online.m, dhmm_em_online_demo.m:
+	  Initial revision
+
+2003-05-04 14:58  yozhik
+
+	* HMM/: pomdp_sample.m, dhmm_sample_endstate.m, dhmm_em_demo.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 14:58  yozhik
+
+	* HMM/: pomdp_sample.m, dhmm_sample_endstate.m, dhmm_em_demo.m:
+	  Initial revision
+
+2003-05-04 14:47  yozhik
+
+	*
+	  BNT/inference/online/@hmm_2TBN_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 14:47  yozhik
+
+	*
+	  BNT/inference/online/@hmm_2TBN_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial revision
+
+2003-05-04 14:42  yozhik
+
+	*
+	  BNT/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_matrix.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 14:42  yozhik
+
+	*
+	  BNT/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_matrix.m:
+	  Initial revision
+
+2003-04-22 14:00  yozhik
+
+	* BNT/CPDs/@tabular_CPD/display.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-04-22 14:00  yozhik
+
+	* BNT/CPDs/@tabular_CPD/display.m: Initial revision
+
+2003-03-28 09:22  yozhik
+
+	* BNT/examples/dynamic/ho1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-03-28 09:22  yozhik
+
+	* BNT/examples/dynamic/ho1.m: Initial revision
+
+2003-03-28 09:12  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-03-28 09:12  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m:
+	  Initial revision
+
+2003-03-28 08:35  yozhik
+
+	* GraphViz/arrow.m: Initial import of code base from Kevin Murphy.
+
+2003-03-28 08:35  yozhik
+
+	* GraphViz/arrow.m: Initial revision
+
+2003-03-25 16:06  yozhik
+
+	* BNT/examples/static/Models/mk_asia_bnet.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-25 16:06  yozhik
+
+	* BNT/examples/static/Models/mk_asia_bnet.m: Initial revision
+
+2003-03-20 07:07  yozhik
+
+	* BNT/potentials/@scgpot/README: Initial import of code base from
+	  Kevin Murphy.
+
+2003-03-20 07:07  yozhik
+
+	* BNT/potentials/@scgpot/README: Initial revision
+
+2003-03-14 01:45  yozhik
+
+	*
+	  BNT/inference/dynamic/@stable_ho_inf_engine/stable_ho_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-03-14 01:45  yozhik
+
+	*
+	  BNT/inference/dynamic/@stable_ho_inf_engine/stable_ho_inf_engine.m:
+	  Initial revision
+
+2003-03-12 02:38  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/enter_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-03-12 02:38  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/enter_evidence.m:
+	  Initial revision
+
+2003-03-11 10:07  yozhik
+
+	* BNT/potentials/@scgpot/reduce_pot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-03-11 10:07  yozhik
+
+	* BNT/potentials/@scgpot/reduce_pot.m: Initial revision
+
+2003-03-11 09:49  yozhik
+
+	* BNT/potentials/@scgpot/combine_pots.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-11 09:49  yozhik
+
+	* BNT/potentials/@scgpot/combine_pots.m: Initial revision
+
+2003-03-11 09:37  yozhik
+
+	* BNT/potentials/@scgcpot/reduce_pot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-03-11 09:37  yozhik
+
+	* BNT/potentials/@scgcpot/reduce_pot.m: Initial revision
+
+2003-03-11 09:06  yozhik
+
+	* BNT/potentials/@scgpot/marginalize_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-11 09:06  yozhik
+
+	* BNT/potentials/@scgpot/marginalize_pot.m: Initial revision
+
+2003-03-11 06:04  yozhik
+
+	* BNT/potentials/@scgpot/scgpot.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-03-11 06:04  yozhik
+
+	* BNT/potentials/@scgpot/scgpot.m: Initial revision
+
+2003-03-09 15:03  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-09 15:03  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_pot.m: Initial revision
+
+2003-03-09 14:44  yozhik
+
+	* BNT/CPDs/@tabular_CPD/maximize_params.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-09 14:44  yozhik
+
+	* BNT/CPDs/@tabular_CPD/maximize_params.m: Initial revision
+
+2003-02-21 03:20  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_difclq_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-02-21 03:20  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_difclq_nodes.m:
+	  Initial revision
+
+2003-02-21 03:13  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-02-21 03:13  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2003-02-19 01:52  yozhik
+
+	* BNT/inference/dynamic/@stable_ho_inf_engine/: enter_evidence.m,
+	  marginal_family.m, marginal_nodes.m, test_ho_inf_enginge.m,
+	  update_engine.m: Initial import of code base from Kevin Murphy.
+
+2003-02-19 01:52  yozhik
+
+	* BNT/inference/dynamic/@stable_ho_inf_engine/: enter_evidence.m,
+	  marginal_family.m, marginal_nodes.m, test_ho_inf_enginge.m,
+	  update_engine.m: Initial revision
+
+2003-02-10 07:38  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/push.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-02-10 07:38  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/push.m: Initial
+	  revision
+
+2003-02-06 18:25  yozhik
+
+	* KPMtools/checkpsd.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-02-06 18:25  yozhik
+
+	* KPMtools/checkpsd.m: Initial revision
+
+2003-02-05 19:16  yozhik
+
+	* GraphViz/draw_hmm.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-02-05 19:16  yozhik
+
+	* GraphViz/draw_hmm.m: Initial revision
+
+2003-02-01 16:23  yozhik
+
+	* BNT/: general/dbn_to_hmm.m, learning/learn_params_dbn.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-02-01 16:23  yozhik
+
+	* BNT/: general/dbn_to_hmm.m, learning/learn_params_dbn.m: Initial
+	  revision
+
+2003-02-01 11:42  yozhik
+
+	* BNT/general/mk_dbn.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-02-01 11:42  yozhik
+
+	* BNT/general/mk_dbn.m: Initial revision
+
+2003-01-30 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params_debug.m: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-30 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params_debug.m: Initial revision
+
+2003-01-30 14:38  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/Old/maximize_params.m: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-30 14:38  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/Old/maximize_params.m: Initial revision
+
+2003-01-29 03:23  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_singleclq_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-29 03:23  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_singleclq_nodes.m:
+	  Initial revision
+
+2003-01-24 11:36  yozhik
+
+	* Kalman/sample_lds.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-24 11:36  yozhik
+
+	* Kalman/sample_lds.m: Initial revision
+
+2003-01-24 04:52  yozhik
+
+	* BNT/potentials/@scgpot/extension_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-01-24 04:52  yozhik
+
+	* BNT/potentials/@scgpot/extension_pot.m: Initial revision
+
+2003-01-23 10:49  yozhik
+
+	* BNT/: general/convert_dbn_CPDs_to_tables1.m,
+	  inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-23 10:49  yozhik
+
+	* BNT/: general/convert_dbn_CPDs_to_tables1.m,
+	  inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial revision
+
+2003-01-23 10:44  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_tables.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-01-23 10:44  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_tables.m: Initial revision
+
+2003-01-22 13:38  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-01-22 13:38  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Initial
+	  revision
+
+2003-01-22 12:32  yozhik
+
+	* HMM/mc_sample_endstate.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-22 12:32  yozhik
+
+	* HMM/mc_sample_endstate.m: Initial revision
+
+2003-01-22 09:56  yozhik
+
+	* HMM/fixed_lag_smoother.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-22 09:56  yozhik
+
+	* HMM/fixed_lag_smoother.m: Initial revision
+
+2003-01-20 08:56  yozhik
+
+	* GraphViz/draw_graph_test.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-01-20 08:56  yozhik
+
+	* GraphViz/draw_graph_test.m: Initial revision
+
+2003-01-18 15:10  yozhik
+
+	* BNT/general/dsep_test.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-18 15:10  yozhik
+
+	* BNT/general/dsep_test.m: Initial revision
+
+2003-01-18 15:00  yozhik
+
+	* BNT/copyright.txt: Initial import of code base from Kevin Murphy.
+
+2003-01-18 15:00  yozhik
+
+	* BNT/copyright.txt: Initial revision
+
+2003-01-18 14:49  yozhik
+
+	* Kalman/tracking_demo.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-18 14:49  yozhik
+
+	* Kalman/tracking_demo.m: Initial revision
+
+2003-01-18 14:22  yozhik
+
+	* BNT/: examples/dummy, inference/dummy, inference/dynamic/dummy,
+	  inference/online/dummy, inference/static/dummy: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-18 14:22  yozhik
+
+	* BNT/: examples/dummy, inference/dummy, inference/dynamic/dummy,
+	  inference/online/dummy, inference/static/dummy: Initial revision
+
+2003-01-18 14:16  yozhik
+
+	* BNT/examples/dynamic/: ehmm1.m, jtree_clq_test.m: Initial import
+	  of code base from Kevin Murphy.
+
+2003-01-18 14:16  yozhik
+
+	* BNT/examples/dynamic/: ehmm1.m, jtree_clq_test.m: Initial
+	  revision
+
+2003-01-18 14:11  yozhik
+
+	* BNT/inference/static/:
+	  @jtree_sparse_inf_engine/jtree_sparse_inf_engine.m,
+	  @jtree_mnet_inf_engine/jtree_mnet_inf_engine.m: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-18 14:11  yozhik
+
+	* BNT/inference/static/:
+	  @jtree_sparse_inf_engine/jtree_sparse_inf_engine.m,
+	  @jtree_mnet_inf_engine/jtree_mnet_inf_engine.m: Initial revision
+
+2003-01-18 13:17  yozhik
+
+	* GraphViz/draw_dbn_test.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-18 13:17  yozhik
+
+	* GraphViz/draw_dbn_test.m: Initial revision
+
+2003-01-11 10:53  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/pearl_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-11 10:53  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/pearl_inf_engine.m:
+	  Initial revision
+
+2003-01-11 10:48  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/learn_map.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-01-11 10:48  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/learn_map.m: Initial revision
+
+2003-01-11 10:41  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-11 10:41  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_evidence.m:
+	  Initial revision
+
+2003-01-11 10:13  yozhik
+
+	* BNT/inference/dynamic/@bk_inf_engine/enter_soft_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-11 10:13  yozhik
+
+	* BNT/inference/dynamic/@bk_inf_engine/enter_soft_evidence.m:
+	  Initial revision
+
+2003-01-07 08:25  yozhik
+
+	* BNT/CPDs/@softmax_CPD/softmax_CPD.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-01-07 08:25  yozhik
+
+	* BNT/CPDs/@softmax_CPD/softmax_CPD.m: Initial revision
+
+2003-01-03 14:01  yozhik
+
+	*
+	  BNT/inference/static/@belprop_mrf2_inf_engine/belprop_mrf2_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-03 14:01  yozhik
+
+	*
+	  BNT/inference/static/@belprop_mrf2_inf_engine/belprop_mrf2_inf_engine.m:
+	  Initial revision
+
+2003-01-02 09:49  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-01-02 09:49  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/find_mpe.m: Initial
+	  revision
+
+2003-01-02 09:28  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/: set_params.m,
+	  enter_soft_evidence.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-02 09:28  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/: set_params.m,
+	  enter_soft_evidence.m: Initial revision
+
+2002-12-31 14:06  yozhik
+
+	* BNT/general/mk_mrf2.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-12-31 14:06  yozhik
+
+	* BNT/general/mk_mrf2.m: Initial revision
+
+2002-12-31 13:24  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-12-31 13:24  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2002-12-31 11:00  yozhik
+
+	* BNT/inference/static/@belprop_inf_engine/belprop_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-12-31 11:00  yozhik
+
+	* BNT/inference/static/@belprop_inf_engine/belprop_inf_engine.m:
+	  Initial revision
+
+2002-12-16 11:16  yozhik
+
+	* BNT/examples/dynamic/HHMM/remove_hhmm_end_state.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-12-16 11:16  yozhik
+
+	* BNT/examples/dynamic/HHMM/remove_hhmm_end_state.m: Initial
+	  revision
+
+2002-12-16 09:57  yozhik
+
+	* BNT/general/unroll_set.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-12-16 09:57  yozhik
+
+	* BNT/general/unroll_set.m: Initial revision
+
+2002-11-26 14:14  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram3.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-26 14:14  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram3.m: Initial revision
+
+2002-11-26 14:04  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram2.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-26 14:04  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram2.m: Initial revision
+
+2002-11-22 16:44  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/Old/mgram2.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-22 16:44  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/Old/mgram2.m: Initial revision
+
+2002-11-22 15:59  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram1.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-22 15:59  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram1.m: Initial revision
+
+2002-11-22 15:51  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-11-22 15:51  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2002-11-22 15:07  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/: num2letter.m, letter2num.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-11-22 15:07  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/: num2letter.m, letter2num.m:
+	  Initial revision
+
+2002-11-22 14:35  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_pots.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-22 14:35  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_pots.m: Initial revision
+
+2002-11-22 13:45  yozhik
+
+	* HMM/mk_rightleft_transmat.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-11-22 13:45  yozhik
+
+	* HMM/mk_rightleft_transmat.m: Initial revision
+
+2002-11-14 12:33  yozhik
+
+	* BNT/examples/dynamic/water2.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-11-14 12:33  yozhik
+
+	* BNT/examples/dynamic/water2.m: Initial revision
+
+2002-11-14 12:07  yozhik
+
+	* BNT/examples/dynamic/water1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-11-14 12:07  yozhik
+
+	* BNT/examples/dynamic/water1.m: Initial revision
+
+2002-11-14 12:02  yozhik
+
+	* BNT/inference/: online/@hmm_2TBN_inf_engine/marginal_nodes.m,
+	  dynamic/@hmm_inf_engine/marginal_nodes.m,
+	  online/@hmm_2TBN_inf_engine/hmm_2TBN_inf_engine.m,
+	  dynamic/@hmm_inf_engine/hmm_inf_engine.m,
+	  dynamic/@hmm_inf_engine/marginal_family.m,
+	  online/@hmm_2TBN_inf_engine/marginal_family.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-14 12:02  yozhik
+
+	* BNT/inference/: online/@hmm_2TBN_inf_engine/marginal_nodes.m,
+	  dynamic/@hmm_inf_engine/marginal_nodes.m,
+	  online/@hmm_2TBN_inf_engine/hmm_2TBN_inf_engine.m,
+	  dynamic/@hmm_inf_engine/hmm_inf_engine.m,
+	  dynamic/@hmm_inf_engine/marginal_family.m,
+	  online/@hmm_2TBN_inf_engine/marginal_family.m: Initial revision
+
+2002-11-14 08:31  yozhik
+
+	* BNT/inference/:
+	  online/@jtree_2TBN_inf_engine/jtree_2TBN_inf_engine.m,
+	  dynamic/@jtree_dbn_inf_engine/jtree_dbn_inf_engine.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-11-14 08:31  yozhik
+
+	* BNT/inference/:
+	  online/@jtree_2TBN_inf_engine/jtree_2TBN_inf_engine.m,
+	  dynamic/@jtree_dbn_inf_engine/jtree_dbn_inf_engine.m: Initial
+	  revision
+
+2002-11-13 17:01  yozhik
+
+	* BNT/examples/: static/qmr2.m, dynamic/arhmm1.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-13 17:01  yozhik
+
+	* BNT/examples/: static/qmr2.m, dynamic/arhmm1.m: Initial revision
+
+2002-11-03 08:44  yozhik
+
+	* BNT/examples/static/Models/mk_alarm_bnet.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-03 08:44  yozhik
+
+	* BNT/examples/static/Models/mk_alarm_bnet.m: Initial revision
+
+2002-11-01 16:32  yozhik
+
+	* Kalman/kalman_forward_backward.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-11-01 16:32  yozhik
+
+	* Kalman/kalman_forward_backward.m: Initial revision
+
+2002-10-23 08:17  yozhik
+
+	* Kalman/learning_demo.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-10-23 08:17  yozhik
+
+	* Kalman/learning_demo.m: Initial revision
+
+2002-10-18 13:05  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/marginal_family.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-10-18 13:05  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/marginal_family.m: Initial
+	  revision
+
+2002-10-10 16:45  yozhik
+
+	* BNT/examples/dynamic/jtree_clq_test2.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-10 16:45  yozhik
+
+	* BNT/examples/dynamic/jtree_clq_test2.m: Initial revision
+
+2002-10-10 16:14  yozhik
+
+	* BNT/examples/dynamic/: mk_mildew_dbn.m, mk_uffe_dbn.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-10-10 16:14  yozhik
+
+	* BNT/examples/dynamic/: mk_mildew_dbn.m, mk_uffe_dbn.m: Initial
+	  revision
+
+2002-10-09 13:36  yozhik
+
+	* BNT/examples/dynamic/mk_ps_from_clqs.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-09 13:36  yozhik
+
+	* BNT/examples/dynamic/mk_ps_from_clqs.m: Initial revision
+
+2002-10-07 06:26  yozhik
+
+	* BNT/CPDs/@deterministic_CPD/deterministic_CPD.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-10-07 06:26  yozhik
+
+	* BNT/CPDs/@deterministic_CPD/deterministic_CPD.m: Initial revision
+
+2002-10-02 08:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableC.c: Initial import of code base
+	  from Kevin Murphy.
+
+2002-10-02 08:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableC.c: Initial revision
+
+2002-10-02 08:28  yozhik
+
+	* BNT/potentials/Tables/: mult_by_tableM.m, mult_by_table2.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-10-02 08:28  yozhik
+
+	* BNT/potentials/Tables/: mult_by_tableM.m, mult_by_table2.m:
+	  Initial revision
+
+2002-10-01 14:33  yozhik
+
+	* BNT/potentials/Tables/mult_by_tableC.c: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-01 14:33  yozhik
+
+	* BNT/potentials/Tables/mult_by_tableC.c: Initial revision
+
+2002-10-01 14:23  yozhik
+
+	* BNT/potentials/Tables/mult_by_table.c: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-01 14:23  yozhik
+
+	* BNT/potentials/Tables/mult_by_table.c: Initial revision
+
+2002-10-01 14:20  yozhik
+
+	* BNT/potentials/Tables/repmat_and_mult.c: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-01 14:20  yozhik
+
+	* BNT/potentials/Tables/repmat_and_mult.c: Initial revision
+
+2002-10-01 12:04  yozhik
+
+	* BNT/potentials/@dpot/dpot.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-10-01 12:04  yozhik
+
+	* BNT/potentials/@dpot/dpot.m: Initial revision
+
+2002-10-01 11:21  yozhik
+
+	* BNT/examples/static/Belprop/belprop_polytree_discrete.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-10-01 11:21  yozhik
+
+	* BNT/examples/static/Belprop/belprop_polytree_discrete.m: Initial
+	  revision
+
+2002-10-01 11:16  yozhik
+
+	* BNT/examples/static/cmp_inference_static.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-10-01 11:16  yozhik
+
+	* BNT/examples/static/cmp_inference_static.m: Initial revision
+
+2002-10-01 10:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableM.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-10-01 10:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableM.m: Initial revision
+
+2002-09-29 03:21  yozhik
+
+	* BNT/potentials/Tables/mult_by_table_global.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-09-29 03:21  yozhik
+
+	* BNT/potentials/Tables/mult_by_table_global.m: Initial revision
+
+2002-09-26 01:39  yozhik
+
+	* BNT/learning/learn_struct_K2.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-09-26 01:39  yozhik
+
+	* BNT/learning/learn_struct_K2.m: Initial revision
+
+2002-09-24 15:43  yozhik
+
+	* BNT/: CPDs/@hhmm2Q_CPD/update_ess.m,
+	  CPDs/@hhmm2Q_CPD/maximize_params.m,
+	  examples/dynamic/HHMM/Map/disp_map_hhmm.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-24 15:43  yozhik
+
+	* BNT/: CPDs/@hhmm2Q_CPD/update_ess.m,
+	  CPDs/@hhmm2Q_CPD/maximize_params.m,
+	  examples/dynamic/HHMM/Map/disp_map_hhmm.m: Initial revision
+
+2002-09-24 15:34  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/: hhmm2Q_CPD.m, reset_ess.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 15:34  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/: hhmm2Q_CPD.m, reset_ess.m: Initial
+	  revision
+
+2002-09-24 15:13  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_rnd_map_hhmm.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 15:13  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_rnd_map_hhmm.m: Initial revision
+
+2002-09-24 06:10  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/maximize_params.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-24 06:10  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/maximize_params.m: Initial revision
+
+2002-09-24 06:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/sample_from_map.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 06:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/sample_from_map.m: Initial revision
+
+2002-09-24 05:46  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/CPD_to_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-24 05:46  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/CPD_to_CPT.m: Initial revision
+
+2002-09-24 03:49  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_map_hhmm.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-09-24 03:49  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_map_hhmm.m: Initial revision
+
+2002-09-24 00:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/Old/mk_map_hhmm.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 00:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/Old/mk_map_hhmm.m: Initial revision
+
+2002-09-23 21:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/hhmmQ_CPD.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-09-23 21:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/hhmmQ_CPD.m: Initial revision
+
+2002-09-23 19:58  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-23 19:58  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_CPT.m: Initial revision
+
+2002-09-23 19:30  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-23 19:30  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_CPT.m: Initial revision
+
+2002-09-21 14:37  yozhik
+
+	* BNT/examples/dynamic/HHMM/abcd_hhmm.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-21 14:37  yozhik
+
+	* BNT/examples/dynamic/HHMM/abcd_hhmm.m: Initial revision
+
+2002-09-21 13:58  yozhik
+
+	* BNT/examples/dynamic/HHMM/mk_hhmm.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-21 13:58  yozhik
+
+	* BNT/examples/dynamic/HHMM/mk_hhmm.m: Initial revision
+
+2002-09-10 10:44  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/log_prob_node.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-10 10:44  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/log_prob_node.m: Initial revision
+
+2002-07-28 16:09  yozhik
+
+	* BNT/learning/: learn_struct_pdag_pc_constrain.m, CovMat.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-07-28 16:09  yozhik
+
+	* BNT/learning/: learn_struct_pdag_pc_constrain.m, CovMat.m:
+	  Initial revision
+
+2002-07-24 07:48  yozhik
+
+	* BNT/general/hodbn_to_bnet.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-07-24 07:48  yozhik
+
+	* BNT/general/hodbn_to_bnet.m: Initial revision
+
+2002-07-23 06:17  yozhik
+
+	* BNT/general/mk_higher_order_dbn.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-07-23 06:17  yozhik
+
+	* BNT/general/mk_higher_order_dbn.m: Initial revision
+
+2002-07-20 18:25  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/set_fields.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-07-20 18:25  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/set_fields.m: Initial
+	  revision
+
+2002-07-20 17:32  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/back_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-07-20 17:32  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/back_mpe.m: Initial
+	  revision
+
+2002-07-02 15:56  yozhik
+
+	* BNT/examples/dynamic/HHMM/Motif/learn_motif_hhmm.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-07-02 15:56  yozhik
+
+	* BNT/examples/dynamic/HHMM/Motif/learn_motif_hhmm.m: Initial
+	  revision
+
+2002-06-27 13:34  yozhik
+
+	* BNT/general/add_ev_to_dmarginal.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-27 13:34  yozhik
+
+	* BNT/general/add_ev_to_dmarginal.m: Initial revision
+
+2002-06-24 16:54  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_ess.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-24 16:54  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_ess.m: Initial revision
+
+2002-06-24 16:38  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/hhmmF_CPD.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-24 16:38  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/hhmmF_CPD.m: Initial revision
+
+2002-06-24 15:45  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-24 15:45  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_CPT.m: Initial revision
+
+2002-06-24 15:35  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/Old/: hhmmF_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_CPT.m, update_ess.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-06-24 15:35  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/Old/: hhmmF_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_CPT.m, update_ess.m:
+	  Initial revision
+
+2002-06-24 15:23  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess4.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-24 15:23  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess4.m: Initial revision
+
+2002-06-24 15:08  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess3.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-24 15:08  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess3.m: Initial revision
+
+2002-06-24 14:20  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess2.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-24 14:20  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess2.m: Initial revision
+
+2002-06-24 11:56  yozhik
+
+	* BNT/: general/mk_fgraph_given_ev.m,
+	  CPDs/mk_isolated_tabular_CPD.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-24 11:56  yozhik
+
+	* BNT/: general/mk_fgraph_given_ev.m,
+	  CPDs/mk_isolated_tabular_CPD.m: Initial revision
+
+2002-06-24 11:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/: hhmmQ_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_ess.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-06-24 11:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/: hhmmQ_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_ess.m: Initial revision
+
+2002-06-20 13:30  yozhik
+
+	* BNT/examples/dynamic/mildew1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-20 13:30  yozhik
+
+	* BNT/examples/dynamic/mildew1.m: Initial revision
+
+2002-06-19 17:18  yozhik
+
+	* BNT/: inference/dynamic/@hmm_inf_engine/find_mpe.m,
+	  examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 17:18  yozhik
+
+	* BNT/: inference/dynamic/@hmm_inf_engine/find_mpe.m,
+	  examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m: Initial
+	  revision
+
+2002-06-19 17:03  yozhik
+
+	* BNT/examples/static/fgraph/fg1.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-19 17:03  yozhik
+
+	* BNT/examples/static/fgraph/fg1.m: Initial revision
+
+2002-06-19 16:59  yozhik
+
+	* BNT/: examples/static/softev1.m,
+	  inference/static/@belprop_fg_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 16:59  yozhik
+
+	* BNT/: examples/static/softev1.m,
+	  inference/static/@belprop_fg_inf_engine/find_mpe.m: Initial
+	  revision
+
+2002-06-19 15:11  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 15:11  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/find_mpe.m: Initial
+	  revision
+
+2002-06-19 15:08  yozhik
+
+	* BNT/: inference/static/@belprop_inf_engine/find_mpe.m,
+	  examples/static/mpe1.m, examples/static/mpe2.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-06-19 15:08  yozhik
+
+	* BNT/: inference/static/@belprop_inf_engine/find_mpe.m,
+	  examples/static/mpe1.m, examples/static/mpe2.m: Initial revision
+
+2002-06-19 15:04  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/:
+	  var_elim_inf_engine.m, enter_evidence.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-19 15:04  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/:
+	  var_elim_inf_engine.m, enter_evidence.m: Initial revision
+
+2002-06-19 14:56  yozhik
+
+	* BNT/inference/static/@global_joint_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 14:56  yozhik
+
+	* BNT/inference/static/@global_joint_inf_engine/find_mpe.m: Initial
+	  revision
+
+2002-06-17 16:49  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/back1_mpe.m,
+	  @smoother_engine/find_mpe.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-17 16:49  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/back1_mpe.m,
+	  @smoother_engine/find_mpe.m: Initial revision
+
+2002-06-17 16:46  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/fwd.m,
+	  @jtree_2TBN_inf_engine/fwd1.m, @smoother_engine/enter_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-06-17 16:46  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/fwd.m,
+	  @jtree_2TBN_inf_engine/fwd1.m, @smoother_engine/enter_evidence.m:
+	  Initial revision
+
+2002-06-17 16:38  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/backT_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-17 16:38  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/backT_mpe.m: Initial
+	  revision
+
+2002-06-17 16:34  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/: back.m, backT.m,
+	  back1.m: Initial import of code base from Kevin Murphy.
+
+2002-06-17 16:34  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/: back.m, backT.m,
+	  back1.m: Initial revision
+
+2002-06-17 16:14  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: find_mpe.m,
+	  find_max_config.m: Initial import of code base from Kevin Murphy.
+
+2002-06-17 16:14  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: find_mpe.m,
+	  find_max_config.m: Initial revision
+
+2002-06-17 14:58  yozhik
+
+	* BNT/general/Old/calc_mpe.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-17 14:58  yozhik
+
+	* BNT/general/Old/calc_mpe.m: Initial revision
+
+2002-06-17 13:59  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: enter_evidence.m,
+	  distribute_evidence.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-06-17 13:59  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: enter_evidence.m,
+	  distribute_evidence.m: Initial revision
+
+2002-06-17 13:29  yozhik
+
+	* BNT/inference/static/@jtree_mnet_inf_engine/: find_mpe.m,
+	  enter_evidence.m: Initial import of code base from Kevin Murphy.
+
+2002-06-17 13:29  yozhik
+
+	* BNT/inference/static/@jtree_mnet_inf_engine/: find_mpe.m,
+	  enter_evidence.m: Initial revision
+
+2002-06-16 13:01  yozhik
+
+	* BNT/general/is_mnet.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-06-16 13:01  yozhik
+
+	* BNT/general/is_mnet.m: Initial revision
+
+2002-06-16 12:52  yozhik
+
+	* BNT/general/mk_mnet.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-06-16 12:52  yozhik
+
+	* BNT/general/mk_mnet.m: Initial revision
+
+2002-06-16 12:34  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/init_pot.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-06-16 12:34  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/init_pot.m: Initial
+	  revision
+
+2002-06-16 12:06  yozhik
+
+	* BNT/potentials/@dpot/find_most_prob_entry.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-06-16 12:06  yozhik
+
+	* BNT/potentials/@dpot/find_most_prob_entry.m: Initial revision
+
+2002-05-31 03:25  yozhik
+
+	* BNT/general/unroll_higher_order_topology.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-05-31 03:25  yozhik
+
+	* BNT/general/unroll_higher_order_topology.m: Initial revision
+
+2002-05-29 08:59  yozhik
+
+	* BNT/@assocarray/assocarray.m,
+	  BNT/CPDs/@boolean_CPD/boolean_CPD.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@discrete_CPD/README,
+	  BNT/CPDs/@discrete_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@discrete_CPD/convert_obs_CPD_to_table.m,
+	  BNT/CPDs/@discrete_CPD/convert_to_sparse_table.c,
+	  BNT/CPDs/@discrete_CPD/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/discrete_CPD.m,
+	  BNT/CPDs/@discrete_CPD/dom_sizes.m,
+	  BNT/CPDs/@discrete_CPD/log_prob_node.m,
+	  BNT/CPDs/@discrete_CPD/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/sample_node.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_pot.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_CPD.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/private/prod_CPT_and_pi_msgs.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@gaussian_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@gaussian_CPD/display.m,
+	  BNT/CPDs/@gaussian_CPD/get_field.m,
+	  BNT/CPDs/@gaussian_CPD/reset_ess.m,
+	  BNT/CPDs/@gaussian_CPD/sample_node.m,
+	  BNT/CPDs/@gaussian_CPD/set_fields.m,
+	  BNT/CPDs/@gaussian_CPD/Old/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/Old/gaussian_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/Old/log_prob_node.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_ess.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_tied_ess.m,
+	  BNT/CPDs/@gaussian_CPD/private/CPD_to_linear_gaussian.m,
+	  BNT/CPDs/@generic_CPD/README,
+	  BNT/CPDs/@generic_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@generic_CPD/display.m,
+	  BNT/CPDs/@generic_CPD/generic_CPD.m,
+	  BNT/CPDs/@generic_CPD/log_prior.m,
+	  BNT/CPDs/@generic_CPD/set_clamped.m,
+	  BNT/CPDs/@generic_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@generic_CPD/Old/CPD_to_dpots.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gmux_CPD/convert_to_pot.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_pi.m, BNT/CPDs/@gmux_CPD/display.m,
+	  BNT/CPDs/@gmux_CPD/gmux_CPD.m, BNT/CPDs/@gmux_CPD/sample_node.m,
+	  BNT/CPDs/@gmux_CPD/Old/gmux_CPD.m,
+	  BNT/CPDs/@hhmmF_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmF_CPD/maximize_params.m,
+	  BNT/CPDs/@hhmmF_CPD/reset_ess.m, BNT/CPDs/@hhmmQ_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmQ_CPD/reset_ess.m,
+	  BNT/CPDs/@mlp_CPD/convert_to_table.m,
+	  BNT/CPDs/@mlp_CPD/maximize_params.m, BNT/CPDs/@mlp_CPD/mlp_CPD.m,
+	  BNT/CPDs/@mlp_CPD/reset_ess.m, BNT/CPDs/@mlp_CPD/update_ess.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@noisyor_CPD/noisyor_CPD.m,
+	  BNT/CPDs/@noisyor_CPD/private/sum_prod_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@root_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@root_CPD/convert_to_pot.m,
+	  BNT/CPDs/@root_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/@root_CPD/log_prob_node.m,
+	  BNT/CPDs/@root_CPD/root_CPD.m, BNT/CPDs/@root_CPD/sample_node.m,
+	  BNT/CPDs/@root_CPD/Old/CPD_to_CPT.m,
+	  BNT/CPDs/@softmax_CPD/convert_to_pot.m,
+	  BNT/CPDs/@softmax_CPD/display.m,
+	  BNT/CPDs/@softmax_CPD/get_field.m,
+	  BNT/CPDs/@softmax_CPD/maximize_params.m,
+	  BNT/CPDs/@softmax_CPD/reset_ess.m,
+	  BNT/CPDs/@softmax_CPD/sample_node.m,
+	  BNT/CPDs/@softmax_CPD/set_fields.m,
+	  BNT/CPDs/@softmax_CPD/update_ess.m,
+	  BNT/CPDs/@softmax_CPD/private/extract_params.m,
+	  BNT/CPDs/@tabular_CPD/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_CPD/bayes_update_params.m,
+	  BNT/CPDs/@tabular_CPD/log_nextcase_prob_node.m,
+	  BNT/CPDs/@tabular_CPD/log_prior.m,
+	  BNT/CPDs/@tabular_CPD/reset_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess_simple.m,
+	  BNT/CPDs/@tabular_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/bayesian_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/log_marg_prob_node_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/mult_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_CPT.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node_single_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/tabular_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/update_params.m,
+	  BNT/CPDs/@tabular_decision_node/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_decision_node/display.m,
+	  BNT/CPDs/@tabular_decision_node/get_field.m,
+	  BNT/CPDs/@tabular_decision_node/set_fields.m,
+	  BNT/CPDs/@tabular_decision_node/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_decision_node/Old/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_pot.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_table.m,
+	  BNT/CPDs/@tabular_kernel/get_field.m,
+	  BNT/CPDs/@tabular_kernel/set_fields.m,
+	  BNT/CPDs/@tabular_kernel/tabular_kernel.m,
+	  BNT/CPDs/@tabular_kernel/Old/tabular_kernel.m,
+	  BNT/CPDs/@tabular_utility_node/convert_to_pot.m,
+	  BNT/CPDs/@tabular_utility_node/display.m,
+	  BNT/CPDs/@tabular_utility_node/tabular_utility_node.m,
+	  BNT/CPDs/@tree_CPD/display.m,
+	  BNT/CPDs/@tree_CPD/evaluate_tree_performance.m,
+	  BNT/CPDs/@tree_CPD/get_field.m,
+	  BNT/CPDs/@tree_CPD/learn_params.m, BNT/CPDs/@tree_CPD/readme.txt,
+	  BNT/CPDs/@tree_CPD/set_fields.m, BNT/CPDs/@tree_CPD/tree_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/linear_gaussian_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/root_gaussian_CPD.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@tabular_chance_node/CPD_to_upot.m,
+	  BNT/CPDs/Old/@tabular_chance_node/tabular_chance_node.m,
+	  BNT/examples/dynamic/bat1.m, BNT/examples/dynamic/bkff1.m,
+	  BNT/examples/dynamic/chmm1.m,
+	  BNT/examples/dynamic/cmp_inference_dbn.m,
+	  BNT/examples/dynamic/cmp_learning_dbn.m,
+	  BNT/examples/dynamic/cmp_online_inference.m,
+	  BNT/examples/dynamic/fhmm_infer.m,
+	  BNT/examples/dynamic/filter_test1.m,
+	  BNT/examples/dynamic/kalman1.m,
+	  BNT/examples/dynamic/kjaerulff1.m,
+	  BNT/examples/dynamic/loopy_dbn1.m,
+	  BNT/examples/dynamic/mk_collage_from_clqs.m,
+	  BNT/examples/dynamic/mk_fhmm.m, BNT/examples/dynamic/reveal1.m,
+	  BNT/examples/dynamic/scg_dbn.m,
+	  BNT/examples/dynamic/skf_data_assoc_gmux.m,
+	  BNT/examples/dynamic/HHMM/add_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/hhmm_jtree_clqs.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo_F1.m,
+	  BNT/examples/dynamic/HHMM/pretty_print_hhmm_parse.m,
+	  BNT/examples/dynamic/HHMM/Motif/fixed_args_mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/sample_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_abcd_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_arrow_alpha_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm2.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3_args.m,
+	  BNT/examples/dynamic/HHMM/Old/motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/remove_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/Square/get_square_data.m,
+	  BNT/examples/dynamic/HHMM/Square/hhmm_inference.m,
+	  BNT/examples/dynamic/HHMM/Square/is_F2_true_D3.m,
+	  BNT/examples/dynamic/HHMM/Square/learn_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_cts.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/square4.mat,
+	  BNT/examples/dynamic/HHMM/Square/square4_cases.mat,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.m,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.mat,
+	  BNT/examples/dynamic/HHMM/Square/Old/learn_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/sample_square_hhmm.m,
+	  BNT/examples/dynamic/Old/chmm1.m,
+	  BNT/examples/dynamic/Old/cmp_inference.m,
+	  BNT/examples/dynamic/Old/kalman1.m,
+	  BNT/examples/dynamic/Old/old.water1.m,
+	  BNT/examples/dynamic/Old/online1.m,
+	  BNT/examples/dynamic/Old/online2.m,
+	  BNT/examples/dynamic/Old/scg_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_gmux_robot_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_linear_slam.m,
+	  BNT/examples/dynamic/SLAM/slam_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_offline_loopy.m,
+	  BNT/examples/dynamic/SLAM/slam_partial_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_stationary_loopy.m,
+	  BNT/examples/dynamic/SLAM/Old/offline_loopy_slam.m,
+	  BNT/examples/dynamic/SLAM/Old/paskin1.m,
+	  BNT/examples/dynamic/SLAM/Old/skf_data_assoc_gmux2.m,
+	  BNT/examples/dynamic/SLAM/Old/slam_kf.m,
+	  BNT/examples/limids/id1.m, BNT/examples/limids/pigs1.m,
+	  BNT/examples/static/cg1.m, BNT/examples/static/cg2.m,
+	  BNT/examples/static/discrete2.m, BNT/examples/static/discrete3.m,
+	  BNT/examples/static/fa1.m, BNT/examples/static/gaussian1.m,
+	  BNT/examples/static/gibbs_test1.m, BNT/examples/static/lw1.m,
+	  BNT/examples/static/mfa1.m, BNT/examples/static/mixexp1.m,
+	  BNT/examples/static/mixexp2.m, BNT/examples/static/mixexp3.m,
+	  BNT/examples/static/mog1.m, BNT/examples/static/qmr1.m,
+	  BNT/examples/static/sample1.m, BNT/examples/static/softmax1.m,
+	  BNT/examples/static/Belprop/belprop_loop1_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loop1_gauss.m,
+	  BNT/examples/static/Belprop/belprop_loopy_cg.m,
+	  BNT/examples/static/Belprop/belprop_loopy_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loopy_gauss.m,
+	  BNT/examples/static/Belprop/belprop_polytree_cg.m,
+	  BNT/examples/static/Belprop/belprop_polytree_gauss.m,
+	  BNT/examples/static/Belprop/bp1.m,
+	  BNT/examples/static/Belprop/gmux1.m,
+	  BNT/examples/static/Brutti/Belief_IOhmm.m,
+	  BNT/examples/static/Brutti/Belief_hmdt.m,
+	  BNT/examples/static/Brutti/Belief_hme.m,
+	  BNT/examples/static/Brutti/Sigmoid_Belief.m,
+	  BNT/examples/static/HME/HMEforMatlab.jpg,
+	  BNT/examples/static/HME/README, BNT/examples/static/HME/fhme.m,
+	  BNT/examples/static/HME/gen_data.m,
+	  BNT/examples/static/HME/hme_class_plot.m,
+	  BNT/examples/static/HME/hme_reg_plot.m,
+	  BNT/examples/static/HME/hme_topobuilder.m,
+	  BNT/examples/static/HME/test_data_class.mat,
+	  BNT/examples/static/HME/test_data_class2.mat,
+	  BNT/examples/static/HME/test_data_reg.mat,
+	  BNT/examples/static/HME/train_data_class.mat,
+	  BNT/examples/static/HME/train_data_reg.mat,
+	  BNT/examples/static/Misc/mixexp_data.txt,
+	  BNT/examples/static/Misc/mixexp_graddesc.m,
+	  BNT/examples/static/Misc/mixexp_plot.m,
+	  BNT/examples/static/Misc/sprinkler.bif,
+	  BNT/examples/static/Models/mk_cancer_bnet.m,
+	  BNT/examples/static/Models/mk_car_bnet.m,
+	  BNT/examples/static/Models/mk_ideker_bnet.m,
+	  BNT/examples/static/Models/mk_incinerator_bnet.m,
+	  BNT/examples/static/Models/mk_markov_chain_bnet.m,
+	  BNT/examples/static/Models/mk_minimal_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_vstruct_bnet.m,
+	  BNT/examples/static/Models/Old/mk_hmm_bnet.m,
+	  BNT/examples/static/SCG/scg1.m, BNT/examples/static/SCG/scg2.m,
+	  BNT/examples/static/SCG/scg3.m,
+	  BNT/examples/static/SCG/scg_3node.m,
+	  BNT/examples/static/SCG/scg_unstable.m,
+	  BNT/examples/static/StructLearn/bic1.m,
+	  BNT/examples/static/StructLearn/cooper_yoo.m,
+	  BNT/examples/static/StructLearn/k2demo1.m,
+	  BNT/examples/static/StructLearn/mcmc1.m,
+	  BNT/examples/static/StructLearn/pc1.m,
+	  BNT/examples/static/StructLearn/pc2.m,
+	  BNT/examples/static/Zoubin/README,
+	  BNT/examples/static/Zoubin/csum.m,
+	  BNT/examples/static/Zoubin/ffa.m,
+	  BNT/examples/static/Zoubin/mfa.m,
+	  BNT/examples/static/Zoubin/mfa_cl.m,
+	  BNT/examples/static/Zoubin/mfademo.m,
+	  BNT/examples/static/Zoubin/rdiv.m,
+	  BNT/examples/static/Zoubin/rprod.m,
+	  BNT/examples/static/Zoubin/rsum.m,
+	  BNT/examples/static/dtree/test_housing.m,
+	  BNT/examples/static/dtree/test_restaurants.m,
+	  BNT/examples/static/dtree/test_zoo1.m,
+	  BNT/examples/static/dtree/tmp.dot,
+	  BNT/examples/static/dtree/transform_data_into_bnt_format.m,
+	  BNT/examples/static/fgraph/fg2.m,
+	  BNT/examples/static/fgraph/fg3.m,
+	  BNT/examples/static/fgraph/fg_mrf1.m,
+	  BNT/examples/static/fgraph/fg_mrf2.m,
+	  BNT/general/bnet_to_fgraph.m,
+	  BNT/general/compute_fwd_interface.m,
+	  BNT/general/compute_interface_nodes.m,
+	  BNT/general/compute_minimal_interface.m,
+	  BNT/general/dbn_to_bnet.m,
+	  BNT/general/determine_elim_constraints.m,
+	  BNT/general/do_intervention.m, BNT/general/dsep.m,
+	  BNT/general/enumerate_scenarios.m, BNT/general/fgraph_to_bnet.m,
+	  BNT/general/log_lik_complete.m,
+	  BNT/general/log_marg_lik_complete.m, BNT/general/mk_bnet.m,
+	  BNT/general/mk_fgraph.m, BNT/general/mk_limid.m,
+	  BNT/general/mk_mutilated_samples.m,
+	  BNT/general/mk_slice_and_half_dbn.m,
+	  BNT/general/partition_dbn_nodes.m,
+	  BNT/general/sample_bnet_nocell.m, BNT/general/sample_dbn.m,
+	  BNT/general/score_bnet_complete.m,
+	  BNT/general/unroll_dbn_topology.m,
+	  BNT/general/Old/bnet_to_gdl_graph.m,
+	  BNT/general/Old/calc_mpe_bucket.m,
+	  BNT/general/Old/calc_mpe_dbn.m,
+	  BNT/general/Old/calc_mpe_given_inf_engine.m,
+	  BNT/general/Old/calc_mpe_global.m,
+	  BNT/general/Old/compute_interface_nodes.m,
+	  BNT/general/Old/mk_gdl_graph.m, GraphViz/draw_dbn.m,
+	  GraphViz/make_layout.m, BNT/license.gpl.txt,
+	  BNT/general/add_evidence_to_gmarginal.m,
+	  BNT/inference/@inf_engine/bnet_from_engine.m,
+	  BNT/inference/@inf_engine/get_field.m,
+	  BNT/inference/@inf_engine/inf_engine.m,
+	  BNT/inference/@inf_engine/marginal_family.m,
+	  BNT/inference/@inf_engine/set_fields.m,
+	  BNT/inference/@inf_engine/update_engine.m,
+	  BNT/inference/@inf_engine/Old/marginal_family_pot.m,
+	  BNT/inference/@inf_engine/Old/observed_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/bk_ff_hmm_inf_engine.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_predict_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/bk_ff_fb.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/combine_marginals_into_joint.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/dbn_to_hmm.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_mat.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/project_joint_onto_marginals.m,
+	  BNT/inference/dynamic/@bk_inf_engine/bk_inf_engine.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/ff_inf_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/filter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@ff_inf_engine/smooth_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/frontier_inf_engine.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/set_fwdback.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/dhmm_inf_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence2.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence3.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence4.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_nonint.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_trans.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine2.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/jtree_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/kalman_inf_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/dbn_to_lds.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_soft_ev.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/pearl_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/correct_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence_obj_oriented.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence_fast.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/wrong_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/private/init_pearl_dbn_ev_msgs.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/pearl_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/online/@filter_engine/bnet_from_engine.m,
+	  BNT/inference/online/@filter_engine/enter_evidence.m,
+	  BNT/inference/online/@filter_engine/filter_engine.m,
+	  BNT/inference/online/@filter_engine/marginal_family.m,
+	  BNT/inference/online/@filter_engine/marginal_nodes.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/update_engine.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/Old/jtree_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/enter_evidence.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/jtree_sparse_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/bnet_from_engine.m,
+	  BNT/inference/online/@smoother_engine/marginal_family.m,
+	  BNT/inference/online/@smoother_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/smoother_engine.m,
+	  BNT/inference/online/@smoother_engine/update_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/belprop_fg_inf_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/set_params.m,
+	  BNT/inference/static/@belprop_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_family.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_gdl_inf_engine.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_inf_engine_nostr.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence1.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/marginal_domain.m,
+	  BNT/inference/static/@belprop_inf_engine/private/junk,
+	  BNT/inference/static/@belprop_inf_engine/private/parallel_protocol.m,
+	  BNT/inference/static/@belprop_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/cond_gauss_inf_engine.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@enumerative_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@enumerative_inf_engine/enumerative_inf_engine.m,
+	  BNT/inference/static/@enumerative_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gaussian_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/gibbs_sampling_inf_engine.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/CPT.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_children.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_strides.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_cpts.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/my_sample_discrete.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/sample_single_discrete.c,
+	  BNT/inference/static/@global_joint_inf_engine/global_joint_inf_engine.m,
+	  BNT/inference/static/@global_joint_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/distribute_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/jtree_limid_inf_engine.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_nodes_SS.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/likelihood_weighting_inf_engine.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@pearl_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@pearl_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/private/compute_bel.m,
+	  BNT/inference/static/@pearl_inf_engine/private/prod_lambda_msgs.m,
+	  BNT/inference/static/@pearl_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@quickscore_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@quickscore_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@quickscore_inf_engine/quickscore_inf_engine.m,
+	  BNT/inference/static/@quickscore_inf_engine/private/C_quickscore.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nr.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/quickscore.m,
+	  BNT/learning/bayes_update_params.m,
+	  BNT/learning/bic_score_family.m,
+	  BNT/learning/compute_cooling_schedule.m,
+	  BNT/learning/dirichlet_score_family.m,
+	  BNT/learning/kpm_learn_struct_mcmc.m,
+	  BNT/learning/learn_params_em.m,
+	  BNT/learning/learn_struct_dbn_reveal.m,
+	  BNT/learning/learn_struct_pdag_ic_star.m,
+	  BNT/learning/mcmc_sample_to_hist.m, BNT/learning/mk_schedule.m,
+	  BNT/learning/mk_tetrad_data_file.m,
+	  BNT/learning/score_dags_old.m, HMM/dhmm_logprob_brute_force.m,
+	  HMM/dhmm_logprob_path.m, HMM/mdp_sample.m, Kalman/AR_to_SS.m,
+	  Kalman/SS_to_AR.m, Kalman/convert_to_lagged_form.m,
+	  Kalman/ensure_AR.m, Kalman/eval_AR_perf.m,
+	  Kalman/kalman_filter.m, Kalman/kalman_smoother.m,
+	  Kalman/kalman_update.m, Kalman/learn_AR.m,
+	  Kalman/learn_AR_diagonal.m, Kalman/learn_kalman.m,
+	  Kalman/smooth_update.m,
+	  BNT/general/convert_dbn_CPDs_to_tables_slow.m,
+	  BNT/general/dispcpt.m, BNT/general/linear_gaussian_to_cpot.m,
+	  BNT/general/partition_matrix_vec_3.m,
+	  BNT/general/shrink_obs_dims_in_gaussian.m,
+	  BNT/general/shrink_obs_dims_in_table.m,
+	  BNT/potentials/CPD_to_pot.m, BNT/potentials/README,
+	  BNT/potentials/check_for_cd_arcs.m,
+	  BNT/potentials/determine_pot_type.m,
+	  BNT/potentials/mk_initial_pot.m,
+	  BNT/potentials/@cgpot/cg_can_to_mom.m,
+	  BNT/potentials/@cgpot/cg_mom_to_can.m,
+	  BNT/potentials/@cgpot/cgpot.m, BNT/potentials/@cgpot/display.m,
+	  BNT/potentials/@cgpot/divide_by_pot.m,
+	  BNT/potentials/@cgpot/domain_pot.m,
+	  BNT/potentials/@cgpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cgpot/enter_discrete_evidence_pot.m,
+	  BNT/potentials/@cgpot/marginalize_pot.m,
+	  BNT/potentials/@cgpot/multiply_by_pot.m,
+	  BNT/potentials/@cgpot/multiply_pots.m,
+	  BNT/potentials/@cgpot/normalize_pot.m,
+	  BNT/potentials/@cgpot/pot_to_marginal.m,
+	  BNT/potentials/@cgpot/Old/normalize_pot.m,
+	  BNT/potentials/@cgpot/Old/simple_marginalize_pot.m,
+	  BNT/potentials/@cpot/cpot.m, BNT/potentials/@cpot/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/display.m,
+	  BNT/potentials/@cpot/divide_by_pot.m,
+	  BNT/potentials/@cpot/domain_pot.m,
+	  BNT/potentials/@cpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cpot/marginalize_pot.m,
+	  BNT/potentials/@cpot/multiply_by_pot.m,
+	  BNT/potentials/@cpot/multiply_pots.m,
+	  BNT/potentials/@cpot/normalize_pot.m,
+	  BNT/potentials/@cpot/pot_to_marginal.m,
+	  BNT/potentials/@cpot/rescale_pot.m,
+	  BNT/potentials/@cpot/set_domain_pot.m,
+	  BNT/potentials/@cpot/Old/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/Old/normalize_pot.convert.m,
+	  BNT/potentials/@dpot/approxeq_pot.m,
+	  BNT/potentials/@dpot/display.m,
+	  BNT/potentials/@dpot/domain_pot.m,
+	  BNT/potentials/@dpot/dpot_to_table.m,
+	  BNT/potentials/@dpot/get_fields.m,
+	  BNT/potentials/@dpot/multiply_pots.m,
+	  BNT/potentials/@dpot/pot_to_marginal.m,
+	  BNT/potentials/@dpot/set_domain_pot.m,
+	  BNT/potentials/@mpot/display.m,
+	  BNT/potentials/@mpot/marginalize_pot.m,
+	  BNT/potentials/@mpot/mpot.m, BNT/potentials/@mpot/mpot_to_cpot.m,
+	  BNT/potentials/@mpot/normalize_pot.m,
+	  BNT/potentials/@mpot/pot_to_marginal.m,
+	  BNT/potentials/@mpot/rescale_pot.m,
+	  BNT/potentials/@upot/approxeq_pot.m,
+	  BNT/potentials/@upot/display.m,
+	  BNT/potentials/@upot/divide_by_pot.m,
+	  BNT/potentials/@upot/marginalize_pot.m,
+	  BNT/potentials/@upot/multiply_by_pot.m,
+	  BNT/potentials/@upot/normalize_pot.m,
+	  BNT/potentials/@upot/pot_to_marginal.m,
+	  BNT/potentials/@upot/upot.m,
+	  BNT/potentials/@upot/upot_to_opt_policy.m,
+	  BNT/potentials/Old/comp_eff_node_sizes.m,
+	  BNT/potentials/Tables/divide_by_sparse_table.c,
+	  BNT/potentials/Tables/divide_by_table.c,
+	  BNT/potentials/Tables/marg_sparse_table.c,
+	  BNT/potentials/Tables/marg_table.c,
+	  BNT/potentials/Tables/mult_by_sparse_table.c,
+	  BNT/potentials/Tables/rep_mult.c, HMM/mk_leftright_transmat.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-05-29 08:59  yozhik
+
+	* BNT/@assocarray/assocarray.m,
+	  BNT/CPDs/@boolean_CPD/boolean_CPD.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@discrete_CPD/README,
+	  BNT/CPDs/@discrete_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@discrete_CPD/convert_obs_CPD_to_table.m,
+	  BNT/CPDs/@discrete_CPD/convert_to_sparse_table.c,
+	  BNT/CPDs/@discrete_CPD/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/discrete_CPD.m,
+	  BNT/CPDs/@discrete_CPD/dom_sizes.m,
+	  BNT/CPDs/@discrete_CPD/log_prob_node.m,
+	  BNT/CPDs/@discrete_CPD/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/sample_node.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_pot.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_CPD.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/private/prod_CPT_and_pi_msgs.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@gaussian_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@gaussian_CPD/display.m,
+	  BNT/CPDs/@gaussian_CPD/get_field.m,
+	  BNT/CPDs/@gaussian_CPD/reset_ess.m,
+	  BNT/CPDs/@gaussian_CPD/sample_node.m,
+	  BNT/CPDs/@gaussian_CPD/set_fields.m,
+	  BNT/CPDs/@gaussian_CPD/Old/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/Old/gaussian_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/Old/log_prob_node.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_ess.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_tied_ess.m,
+	  BNT/CPDs/@gaussian_CPD/private/CPD_to_linear_gaussian.m,
+	  BNT/CPDs/@generic_CPD/README,
+	  BNT/CPDs/@generic_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@generic_CPD/display.m,
+	  BNT/CPDs/@generic_CPD/generic_CPD.m,
+	  BNT/CPDs/@generic_CPD/log_prior.m,
+	  BNT/CPDs/@generic_CPD/set_clamped.m,
+	  BNT/CPDs/@generic_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@generic_CPD/Old/CPD_to_dpots.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gmux_CPD/convert_to_pot.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_pi.m, BNT/CPDs/@gmux_CPD/display.m,
+	  BNT/CPDs/@gmux_CPD/gmux_CPD.m, BNT/CPDs/@gmux_CPD/sample_node.m,
+	  BNT/CPDs/@gmux_CPD/Old/gmux_CPD.m,
+	  BNT/CPDs/@hhmmF_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmF_CPD/maximize_params.m,
+	  BNT/CPDs/@hhmmF_CPD/reset_ess.m, BNT/CPDs/@hhmmQ_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmQ_CPD/reset_ess.m,
+	  BNT/CPDs/@mlp_CPD/convert_to_table.m,
+	  BNT/CPDs/@mlp_CPD/maximize_params.m, BNT/CPDs/@mlp_CPD/mlp_CPD.m,
+	  BNT/CPDs/@mlp_CPD/reset_ess.m, BNT/CPDs/@mlp_CPD/update_ess.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@noisyor_CPD/noisyor_CPD.m,
+	  BNT/CPDs/@noisyor_CPD/private/sum_prod_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@root_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@root_CPD/convert_to_pot.m,
+	  BNT/CPDs/@root_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/@root_CPD/log_prob_node.m,
+	  BNT/CPDs/@root_CPD/root_CPD.m, BNT/CPDs/@root_CPD/sample_node.m,
+	  BNT/CPDs/@root_CPD/Old/CPD_to_CPT.m,
+	  BNT/CPDs/@softmax_CPD/convert_to_pot.m,
+	  BNT/CPDs/@softmax_CPD/display.m,
+	  BNT/CPDs/@softmax_CPD/get_field.m,
+	  BNT/CPDs/@softmax_CPD/maximize_params.m,
+	  BNT/CPDs/@softmax_CPD/reset_ess.m,
+	  BNT/CPDs/@softmax_CPD/sample_node.m,
+	  BNT/CPDs/@softmax_CPD/set_fields.m,
+	  BNT/CPDs/@softmax_CPD/update_ess.m,
+	  BNT/CPDs/@softmax_CPD/private/extract_params.m,
+	  BNT/CPDs/@tabular_CPD/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_CPD/bayes_update_params.m,
+	  BNT/CPDs/@tabular_CPD/log_nextcase_prob_node.m,
+	  BNT/CPDs/@tabular_CPD/log_prior.m,
+	  BNT/CPDs/@tabular_CPD/reset_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess_simple.m,
+	  BNT/CPDs/@tabular_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/bayesian_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/log_marg_prob_node_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/mult_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_CPT.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node_single_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/tabular_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/update_params.m,
+	  BNT/CPDs/@tabular_decision_node/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_decision_node/display.m,
+	  BNT/CPDs/@tabular_decision_node/get_field.m,
+	  BNT/CPDs/@tabular_decision_node/set_fields.m,
+	  BNT/CPDs/@tabular_decision_node/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_decision_node/Old/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_pot.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_table.m,
+	  BNT/CPDs/@tabular_kernel/get_field.m,
+	  BNT/CPDs/@tabular_kernel/set_fields.m,
+	  BNT/CPDs/@tabular_kernel/tabular_kernel.m,
+	  BNT/CPDs/@tabular_kernel/Old/tabular_kernel.m,
+	  BNT/CPDs/@tabular_utility_node/convert_to_pot.m,
+	  BNT/CPDs/@tabular_utility_node/display.m,
+	  BNT/CPDs/@tabular_utility_node/tabular_utility_node.m,
+	  BNT/CPDs/@tree_CPD/display.m,
+	  BNT/CPDs/@tree_CPD/evaluate_tree_performance.m,
+	  BNT/CPDs/@tree_CPD/get_field.m,
+	  BNT/CPDs/@tree_CPD/learn_params.m, BNT/CPDs/@tree_CPD/readme.txt,
+	  BNT/CPDs/@tree_CPD/set_fields.m, BNT/CPDs/@tree_CPD/tree_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/linear_gaussian_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/root_gaussian_CPD.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@tabular_chance_node/CPD_to_upot.m,
+	  BNT/CPDs/Old/@tabular_chance_node/tabular_chance_node.m,
+	  BNT/examples/dynamic/bat1.m, BNT/examples/dynamic/bkff1.m,
+	  BNT/examples/dynamic/chmm1.m,
+	  BNT/examples/dynamic/cmp_inference_dbn.m,
+	  BNT/examples/dynamic/cmp_learning_dbn.m,
+	  BNT/examples/dynamic/cmp_online_inference.m,
+	  BNT/examples/dynamic/fhmm_infer.m,
+	  BNT/examples/dynamic/filter_test1.m,
+	  BNT/examples/dynamic/kalman1.m,
+	  BNT/examples/dynamic/kjaerulff1.m,
+	  BNT/examples/dynamic/loopy_dbn1.m,
+	  BNT/examples/dynamic/mk_collage_from_clqs.m,
+	  BNT/examples/dynamic/mk_fhmm.m, BNT/examples/dynamic/reveal1.m,
+	  BNT/examples/dynamic/scg_dbn.m,
+	  BNT/examples/dynamic/skf_data_assoc_gmux.m,
+	  BNT/examples/dynamic/HHMM/add_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/hhmm_jtree_clqs.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo_F1.m,
+	  BNT/examples/dynamic/HHMM/pretty_print_hhmm_parse.m,
+	  BNT/examples/dynamic/HHMM/Motif/fixed_args_mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/sample_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_abcd_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_arrow_alpha_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm2.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3_args.m,
+	  BNT/examples/dynamic/HHMM/Old/motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/remove_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/Square/get_square_data.m,
+	  BNT/examples/dynamic/HHMM/Square/hhmm_inference.m,
+	  BNT/examples/dynamic/HHMM/Square/is_F2_true_D3.m,
+	  BNT/examples/dynamic/HHMM/Square/learn_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_cts.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/square4.mat,
+	  BNT/examples/dynamic/HHMM/Square/square4_cases.mat,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.m,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.mat,
+	  BNT/examples/dynamic/HHMM/Square/Old/learn_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/sample_square_hhmm.m,
+	  BNT/examples/dynamic/Old/chmm1.m,
+	  BNT/examples/dynamic/Old/cmp_inference.m,
+	  BNT/examples/dynamic/Old/kalman1.m,
+	  BNT/examples/dynamic/Old/old.water1.m,
+	  BNT/examples/dynamic/Old/online1.m,
+	  BNT/examples/dynamic/Old/online2.m,
+	  BNT/examples/dynamic/Old/scg_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_gmux_robot_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_linear_slam.m,
+	  BNT/examples/dynamic/SLAM/slam_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_offline_loopy.m,
+	  BNT/examples/dynamic/SLAM/slam_partial_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_stationary_loopy.m,
+	  BNT/examples/dynamic/SLAM/Old/offline_loopy_slam.m,
+	  BNT/examples/dynamic/SLAM/Old/paskin1.m,
+	  BNT/examples/dynamic/SLAM/Old/skf_data_assoc_gmux2.m,
+	  BNT/examples/dynamic/SLAM/Old/slam_kf.m,
+	  BNT/examples/limids/id1.m, BNT/examples/limids/pigs1.m,
+	  BNT/examples/static/cg1.m, BNT/examples/static/cg2.m,
+	  BNT/examples/static/discrete2.m, BNT/examples/static/discrete3.m,
+	  BNT/examples/static/fa1.m, BNT/examples/static/gaussian1.m,
+	  BNT/examples/static/gibbs_test1.m, BNT/examples/static/lw1.m,
+	  BNT/examples/static/mfa1.m, BNT/examples/static/mixexp1.m,
+	  BNT/examples/static/mixexp2.m, BNT/examples/static/mixexp3.m,
+	  BNT/examples/static/mog1.m, BNT/examples/static/qmr1.m,
+	  BNT/examples/static/sample1.m, BNT/examples/static/softmax1.m,
+	  BNT/examples/static/Belprop/belprop_loop1_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loop1_gauss.m,
+	  BNT/examples/static/Belprop/belprop_loopy_cg.m,
+	  BNT/examples/static/Belprop/belprop_loopy_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loopy_gauss.m,
+	  BNT/examples/static/Belprop/belprop_polytree_cg.m,
+	  BNT/examples/static/Belprop/belprop_polytree_gauss.m,
+	  BNT/examples/static/Belprop/bp1.m,
+	  BNT/examples/static/Belprop/gmux1.m,
+	  BNT/examples/static/Brutti/Belief_IOhmm.m,
+	  BNT/examples/static/Brutti/Belief_hmdt.m,
+	  BNT/examples/static/Brutti/Belief_hme.m,
+	  BNT/examples/static/Brutti/Sigmoid_Belief.m,
+	  BNT/examples/static/HME/HMEforMatlab.jpg,
+	  BNT/examples/static/HME/README, BNT/examples/static/HME/fhme.m,
+	  BNT/examples/static/HME/gen_data.m,
+	  BNT/examples/static/HME/hme_class_plot.m,
+	  BNT/examples/static/HME/hme_reg_plot.m,
+	  BNT/examples/static/HME/hme_topobuilder.m,
+	  BNT/examples/static/HME/test_data_class.mat,
+	  BNT/examples/static/HME/test_data_class2.mat,
+	  BNT/examples/static/HME/test_data_reg.mat,
+	  BNT/examples/static/HME/train_data_class.mat,
+	  BNT/examples/static/HME/train_data_reg.mat,
+	  BNT/examples/static/Misc/mixexp_data.txt,
+	  BNT/examples/static/Misc/mixexp_graddesc.m,
+	  BNT/examples/static/Misc/mixexp_plot.m,
+	  BNT/examples/static/Misc/sprinkler.bif,
+	  BNT/examples/static/Models/mk_cancer_bnet.m,
+	  BNT/examples/static/Models/mk_car_bnet.m,
+	  BNT/examples/static/Models/mk_ideker_bnet.m,
+	  BNT/examples/static/Models/mk_incinerator_bnet.m,
+	  BNT/examples/static/Models/mk_markov_chain_bnet.m,
+	  BNT/examples/static/Models/mk_minimal_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_vstruct_bnet.m,
+	  BNT/examples/static/Models/Old/mk_hmm_bnet.m,
+	  BNT/examples/static/SCG/scg1.m, BNT/examples/static/SCG/scg2.m,
+	  BNT/examples/static/SCG/scg3.m,
+	  BNT/examples/static/SCG/scg_3node.m,
+	  BNT/examples/static/SCG/scg_unstable.m,
+	  BNT/examples/static/StructLearn/bic1.m,
+	  BNT/examples/static/StructLearn/cooper_yoo.m,
+	  BNT/examples/static/StructLearn/k2demo1.m,
+	  BNT/examples/static/StructLearn/mcmc1.m,
+	  BNT/examples/static/StructLearn/pc1.m,
+	  BNT/examples/static/StructLearn/pc2.m,
+	  BNT/examples/static/Zoubin/README,
+	  BNT/examples/static/Zoubin/csum.m,
+	  BNT/examples/static/Zoubin/ffa.m,
+	  BNT/examples/static/Zoubin/mfa.m,
+	  BNT/examples/static/Zoubin/mfa_cl.m,
+	  BNT/examples/static/Zoubin/mfademo.m,
+	  BNT/examples/static/Zoubin/rdiv.m,
+	  BNT/examples/static/Zoubin/rprod.m,
+	  BNT/examples/static/Zoubin/rsum.m,
+	  BNT/examples/static/dtree/test_housing.m,
+	  BNT/examples/static/dtree/test_restaurants.m,
+	  BNT/examples/static/dtree/test_zoo1.m,
+	  BNT/examples/static/dtree/tmp.dot,
+	  BNT/examples/static/dtree/transform_data_into_bnt_format.m,
+	  BNT/examples/static/fgraph/fg2.m,
+	  BNT/examples/static/fgraph/fg3.m,
+	  BNT/examples/static/fgraph/fg_mrf1.m,
+	  BNT/examples/static/fgraph/fg_mrf2.m,
+	  BNT/general/bnet_to_fgraph.m,
+	  BNT/general/compute_fwd_interface.m,
+	  BNT/general/compute_interface_nodes.m,
+	  BNT/general/compute_minimal_interface.m,
+	  BNT/general/dbn_to_bnet.m,
+	  BNT/general/determine_elim_constraints.m,
+	  BNT/general/do_intervention.m, BNT/general/dsep.m,
+	  BNT/general/enumerate_scenarios.m, BNT/general/fgraph_to_bnet.m,
+	  BNT/general/log_lik_complete.m,
+	  BNT/general/log_marg_lik_complete.m, BNT/general/mk_bnet.m,
+	  BNT/general/mk_fgraph.m, BNT/general/mk_limid.m,
+	  BNT/general/mk_mutilated_samples.m,
+	  BNT/general/mk_slice_and_half_dbn.m,
+	  BNT/general/partition_dbn_nodes.m,
+	  BNT/general/sample_bnet_nocell.m, BNT/general/sample_dbn.m,
+	  BNT/general/score_bnet_complete.m,
+	  BNT/general/unroll_dbn_topology.m,
+	  BNT/general/Old/bnet_to_gdl_graph.m,
+	  BNT/general/Old/calc_mpe_bucket.m,
+	  BNT/general/Old/calc_mpe_dbn.m,
+	  BNT/general/Old/calc_mpe_given_inf_engine.m,
+	  BNT/general/Old/calc_mpe_global.m,
+	  BNT/general/Old/compute_interface_nodes.m,
+	  BNT/general/Old/mk_gdl_graph.m, GraphViz/draw_dbn.m,
+	  GraphViz/make_layout.m, BNT/license.gpl.txt,
+	  BNT/general/add_evidence_to_gmarginal.m,
+	  BNT/inference/@inf_engine/bnet_from_engine.m,
+	  BNT/inference/@inf_engine/get_field.m,
+	  BNT/inference/@inf_engine/inf_engine.m,
+	  BNT/inference/@inf_engine/marginal_family.m,
+	  BNT/inference/@inf_engine/set_fields.m,
+	  BNT/inference/@inf_engine/update_engine.m,
+	  BNT/inference/@inf_engine/Old/marginal_family_pot.m,
+	  BNT/inference/@inf_engine/Old/observed_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/bk_ff_hmm_inf_engine.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_predict_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/bk_ff_fb.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/combine_marginals_into_joint.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/dbn_to_hmm.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_mat.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/project_joint_onto_marginals.m,
+	  BNT/inference/dynamic/@bk_inf_engine/bk_inf_engine.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/ff_inf_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/filter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@ff_inf_engine/smooth_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/frontier_inf_engine.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/set_fwdback.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/dhmm_inf_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence2.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence3.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence4.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_nonint.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_trans.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine2.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/jtree_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/kalman_inf_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/dbn_to_lds.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_soft_ev.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/pearl_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/correct_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence_obj_oriented.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence_fast.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/wrong_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/private/init_pearl_dbn_ev_msgs.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/pearl_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/online/@filter_engine/bnet_from_engine.m,
+	  BNT/inference/online/@filter_engine/enter_evidence.m,
+	  BNT/inference/online/@filter_engine/filter_engine.m,
+	  BNT/inference/online/@filter_engine/marginal_family.m,
+	  BNT/inference/online/@filter_engine/marginal_nodes.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/update_engine.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/Old/jtree_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/enter_evidence.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/jtree_sparse_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/bnet_from_engine.m,
+	  BNT/inference/online/@smoother_engine/marginal_family.m,
+	  BNT/inference/online/@smoother_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/smoother_engine.m,
+	  BNT/inference/online/@smoother_engine/update_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/belprop_fg_inf_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/set_params.m,
+	  BNT/inference/static/@belprop_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_family.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_gdl_inf_engine.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_inf_engine_nostr.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence1.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/marginal_domain.m,
+	  BNT/inference/static/@belprop_inf_engine/private/junk,
+	  BNT/inference/static/@belprop_inf_engine/private/parallel_protocol.m,
+	  BNT/inference/static/@belprop_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/cond_gauss_inf_engine.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@enumerative_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@enumerative_inf_engine/enumerative_inf_engine.m,
+	  BNT/inference/static/@enumerative_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gaussian_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/gibbs_sampling_inf_engine.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/CPT.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_children.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_strides.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_cpts.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/my_sample_discrete.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/sample_single_discrete.c,
+	  BNT/inference/static/@global_joint_inf_engine/global_joint_inf_engine.m,
+	  BNT/inference/static/@global_joint_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/distribute_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/jtree_limid_inf_engine.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_nodes_SS.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/likelihood_weighting_inf_engine.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@pearl_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@pearl_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/private/compute_bel.m,
+	  BNT/inference/static/@pearl_inf_engine/private/prod_lambda_msgs.m,
+	  BNT/inference/static/@pearl_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@quickscore_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@quickscore_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@quickscore_inf_engine/quickscore_inf_engine.m,
+	  BNT/inference/static/@quickscore_inf_engine/private/C_quickscore.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nr.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/quickscore.m,
+	  BNT/learning/bayes_update_params.m,
+	  BNT/learning/bic_score_family.m,
+	  BNT/learning/compute_cooling_schedule.m,
+	  BNT/learning/dirichlet_score_family.m,
+	  BNT/learning/kpm_learn_struct_mcmc.m,
+	  BNT/learning/learn_params_em.m,
+	  BNT/learning/learn_struct_dbn_reveal.m,
+	  BNT/learning/learn_struct_pdag_ic_star.m,
+	  BNT/learning/mcmc_sample_to_hist.m, BNT/learning/mk_schedule.m,
+	  BNT/learning/mk_tetrad_data_file.m,
+	  BNT/learning/score_dags_old.m, HMM/dhmm_logprob_brute_force.m,
+	  HMM/dhmm_logprob_path.m, HMM/mdp_sample.m, Kalman/AR_to_SS.m,
+	  Kalman/SS_to_AR.m, Kalman/convert_to_lagged_form.m,
+	  Kalman/ensure_AR.m, Kalman/eval_AR_perf.m,
+	  Kalman/kalman_filter.m, Kalman/kalman_smoother.m,
+	  Kalman/kalman_update.m, Kalman/learn_AR.m,
+	  Kalman/learn_AR_diagonal.m, Kalman/learn_kalman.m,
+	  Kalman/smooth_update.m,
+	  BNT/general/convert_dbn_CPDs_to_tables_slow.m,
+	  BNT/general/dispcpt.m, BNT/general/linear_gaussian_to_cpot.m,
+	  BNT/general/partition_matrix_vec_3.m,
+	  BNT/general/shrink_obs_dims_in_gaussian.m,
+	  BNT/general/shrink_obs_dims_in_table.m,
+	  BNT/potentials/CPD_to_pot.m, BNT/potentials/README,
+	  BNT/potentials/check_for_cd_arcs.m,
+	  BNT/potentials/determine_pot_type.m,
+	  BNT/potentials/mk_initial_pot.m,
+	  BNT/potentials/@cgpot/cg_can_to_mom.m,
+	  BNT/potentials/@cgpot/cg_mom_to_can.m,
+	  BNT/potentials/@cgpot/cgpot.m, BNT/potentials/@cgpot/display.m,
+	  BNT/potentials/@cgpot/divide_by_pot.m,
+	  BNT/potentials/@cgpot/domain_pot.m,
+	  BNT/potentials/@cgpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cgpot/enter_discrete_evidence_pot.m,
+	  BNT/potentials/@cgpot/marginalize_pot.m,
+	  BNT/potentials/@cgpot/multiply_by_pot.m,
+	  BNT/potentials/@cgpot/multiply_pots.m,
+	  BNT/potentials/@cgpot/normalize_pot.m,
+	  BNT/potentials/@cgpot/pot_to_marginal.m,
+	  BNT/potentials/@cgpot/Old/normalize_pot.m,
+	  BNT/potentials/@cgpot/Old/simple_marginalize_pot.m,
+	  BNT/potentials/@cpot/cpot.m, BNT/potentials/@cpot/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/display.m,
+	  BNT/potentials/@cpot/divide_by_pot.m,
+	  BNT/potentials/@cpot/domain_pot.m,
+	  BNT/potentials/@cpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cpot/marginalize_pot.m,
+	  BNT/potentials/@cpot/multiply_by_pot.m,
+	  BNT/potentials/@cpot/multiply_pots.m,
+	  BNT/potentials/@cpot/normalize_pot.m,
+	  BNT/potentials/@cpot/pot_to_marginal.m,
+	  BNT/potentials/@cpot/rescale_pot.m,
+	  BNT/potentials/@cpot/set_domain_pot.m,
+	  BNT/potentials/@cpot/Old/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/Old/normalize_pot.convert.m,
+	  BNT/potentials/@dpot/approxeq_pot.m,
+	  BNT/potentials/@dpot/display.m,
+	  BNT/potentials/@dpot/domain_pot.m,
+	  BNT/potentials/@dpot/dpot_to_table.m,
+	  BNT/potentials/@dpot/get_fields.m,
+	  BNT/potentials/@dpot/multiply_pots.m,
+	  BNT/potentials/@dpot/pot_to_marginal.m,
+	  BNT/potentials/@dpot/set_domain_pot.m,
+	  BNT/potentials/@mpot/display.m,
+	  BNT/potentials/@mpot/marginalize_pot.m,
+	  BNT/potentials/@mpot/mpot.m, BNT/potentials/@mpot/mpot_to_cpot.m,
+	  BNT/potentials/@mpot/normalize_pot.m,
+	  BNT/potentials/@mpot/pot_to_marginal.m,
+	  BNT/potentials/@mpot/rescale_pot.m,
+	  BNT/potentials/@upot/approxeq_pot.m,
+	  BNT/potentials/@upot/display.m,
+	  BNT/potentials/@upot/divide_by_pot.m,
+	  BNT/potentials/@upot/marginalize_pot.m,
+	  BNT/potentials/@upot/multiply_by_pot.m,
+	  BNT/potentials/@upot/normalize_pot.m,
+	  BNT/potentials/@upot/pot_to_marginal.m,
+	  BNT/potentials/@upot/upot.m,
+	  BNT/potentials/@upot/upot_to_opt_policy.m,
+	  BNT/potentials/Old/comp_eff_node_sizes.m,
+	  BNT/potentials/Tables/divide_by_sparse_table.c,
+	  BNT/potentials/Tables/divide_by_table.c,
+	  BNT/potentials/Tables/marg_sparse_table.c,
+	  BNT/potentials/Tables/marg_table.c,
+	  BNT/potentials/Tables/mult_by_sparse_table.c,
+	  BNT/potentials/Tables/rep_mult.c, HMM/mk_leftright_transmat.m:
+	  Initial revision
+
+2002-05-29 04:59  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/:
+	  clq_containing_nodes.m, problems.txt, push_pot_toclique.m,
+	  Old/initialize_engine.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-05-29 04:59  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/:
+	  clq_containing_nodes.m, problems.txt, push_pot_toclique.m,
+	  Old/initialize_engine.m: Initial revision
+
+2002-05-19 15:11  yozhik
+
+	* BNT/potentials/: @scgcpot/marginalize_pot.m,
+	  @scgcpot/normalize_pot.m, @scgcpot/rescale_pot.m,
+	  @scgcpot/scgcpot.m, @scgpot/direct_combine_pots.m,
+	  @scgpot/pot_to_marginal.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-05-19 15:11  yozhik
+
+	* BNT/potentials/: @scgcpot/marginalize_pot.m,
+	  @scgcpot/normalize_pot.m, @scgcpot/rescale_pot.m,
+	  @scgcpot/scgcpot.m, @scgpot/direct_combine_pots.m,
+	  @scgpot/pot_to_marginal.m: Initial revision
+
+2001-07-28 08:43  yozhik
+
+	* BNT/potentials/genops.c: Initial import of code base from Kevin
+	  Murphy.
+
+2001-07-28 08:43  yozhik
+
+	* BNT/potentials/genops.c: Initial revision
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/ChangeLog.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+- 7 May 2010 wsun
+* revised \BNT\inference\static\@jtree_inf_engine\jtree_inf_engine.m: It is proved that the last clique created in the elimination process is not necessarily to be a strong root for CLG model. Instead, we use a clique called interface clique, that contains all discrete parents and at least one continuous node from a connected continuous component, as a guaranteed strong root.
+
+* added one function \graph\findroot.m: this is to find the interface cliqeu with max number of discrete parent nodes as the guaranteed strong root. 
+
+- 16 Feb 2010 mdunham
+* Minor bug fixes to make MATLAB 2009 compatible
+
+- 19 Oct 97 murphyk
+
+* BNT\CPDs\@noisyor_CPD\CPD_to_CPT.m: 2nd half of the file is a repeat
+of the first half and was deleted (thanks to Karl Kuschner)
+
+* KPMtools\myismember.m should return logical for use in "assert" so add line at end
+                p=logical(p);  this prevents "assert" from failing on an integer input.
+(thanks to Karl Kuschner)
+
+
+
+- 17 Oct 07 murphyk
+
+* Updated subv2ind and ind2subv in KPMtools to Tom Minka's implementation.
+His ind2subv is faster (vectorized), but I had to modify it so it
+matched the behavior of my version when called with siz=[].
+His subv2inv is slightly simpler than mine because he does not treat
+the siz=[2 2 ... 2] case separately.
+Note: there is now no need to ever use the C versions of these
+functions (or any others, for that matter).
+
+* removed BNT/add_BNT_to_path since no longer needed.
+
+
+
+- 4 Oct 07 murphyk
+
+*  moved code from sourceforge to UBC website, made version 1.0.4
+
+* @pearl_inf_engine/pearl_inf_engine line 24, default
+argument for protocol changed from [] to 'parallel'.
+Also, changed private/parallel_protocol so it doesn't write to an
+empty file id (Matlab 7 issue)
+
+* added foptions (Matlab 7 issue)
+
+* changed genpathKPM to exclude svn. Put it in toplevel directory to
+massively simplify the installation process.
+
+
+--------------------------------------
+For changes to the sourceforge version,
+culminating in version 1.0.3, see ChangeLog.Sourceforge.txt.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+/README.txt/1.1.1.1/Mon Jun  7 14:33:20 2004//
+/approxeq.m/1.1.1.1/Mon Jul 28 22:44:46 2003//
+/arrow.m/1.1.1.1/Fri Mar 28 16:35:06 2003//
+/dot_to_graph.m/1.1.1.1/Fri Mar 12 23:21:08 2004//
+/draw_dbn.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/draw_dbn_test.m/1.1.1.1/Sat Jan 18 21:17:18 2003//
+/draw_dot.m/1.1.1.1/Wed May  5 13:32:32 2004//
+/draw_graph.m/1.1.1.1/Mon Mar 22 22:32:04 2004//
+/draw_graph_test.m/1.1.1.1/Mon Jan 20 16:56:02 2003//
+/draw_hmm.m/1.1.1.1/Thu Feb  6 03:16:32 2003//
+/editGraphGUI.m/1.1.1.1/Tue Jan 27 21:08:48 2004//
+/graph_to_dot.m/1.1.1.1/Tue Jun 15 17:50:40 2004//
+/make_layout.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/my_call.m/1.1.1.1/Tue Jan 27 21:08:38 2004//
+/process_options.m/1.1.1.1/Mon Jul 28 22:44:46 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/GraphViz
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/dot_to_graph.m/1.1.1.1/Tue Jan 27 21:01:54 2004//
+/draw_dot.m/1.1.1.1/Tue Jan 27 20:42:50 2004//
+/draw_graph.m/1.1.1.1/Tue Jan 27 21:03:56 2004//
+/graphToDot.m/1.1.1.1/Tue Feb  3 17:15:18 2004//
+/pre_pesha_graph_to_dot.m/1.1.1.1/Tue Jan 27 20:47:40 2004//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/GraphViz/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/Old/dot_to_graph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,107 @@
+function [Adj, labels, x, y] = dot_to_graph(filename)
+
+% [Adj, labels, x, y] = dot_to_graph(filename)
+% Extract a matrix representation, node labels, and node position coordinates
+% from a file in GraphViz format http://www.research.att.com/sw/tools/graphviz
+%
+% INPUTS:
+%    'filename' - the file in DOT format containing the graph layout.
+% OUTPUT:
+%  'Adj'    - an adjacency matrix representation of the graph in 'filename';
+% 'labels'  - a character array with the names of the nodes of the graph;
+%    'x'    - a row vector with the x-coordinates of the nodes in 'filename';
+%    'y'    - a row vector with the y-coordinates of the nodes in 'filename'.
+%
+% WARNINGS: not guaranted to parse ANY GraphViz file. Debugged on undirected 
+%       sample graphs from GraphViz(Heawood, Petersen, ER, ngk10_4, process). 
+%       Complaines about RecursionLimit set only to 500 on huge graphs.
+%       Ignores singletons (disjoint nodes).         
+% Sample DOT code "ABC.dot", read by [Adj, labels, x, y] = dot_to_graph('ABC.dot')
+% digraph G {
+%       A [pos="28,31"];
+%       B [pos="74,87"];
+%       A -- B [pos="e,61,71 41,47 46,53 50,58 55,64"];
+% }
+%                                                     last modified: Jan 2004
+% by Alexi Savov:  asavov @wustl.edu  |  http://artsci.wustl.edu/~azsavov
+%    Leon Peshkin: pesha @ai.mit.edu  |  http://www.ai.mit.edu/~pesha 
+
+if ~exist(filename)                % Checks whether the specified file exists.
+   error('* * * File does not exist or could not be found. * * *');     return;
+end;
+
+lines = textread(filename,'%s','delimiter','\n','commentstyle','c');  % Read file into cell array
+dot_lines = strvcat(lines);                                % of lines, ignoring C-style comments
+
+if findstr(dot_lines(1,:), 'graph ') == []           % Is this a DOT file ?
+   error('* * * File does not appear to be in valid DOT format. * * *');    return;
+end;
+
+Nlns = size(dot_lines,1);             % The number of lines;
+labels = {};
+unread = 1:Nlns;             % 'unread' list of lines which has not been examined yet
+edge_id = 1;
+for line_ndx = 1:Nlns   % This section sets the adjacency matrix A(Lnode,Rnode) = edge_id.
+    line = dot_lines(line_ndx,:);
+    Ddash_pos = strfind(line, ' -- ') + 1;    % double dash positions
+    arrow_pos = strfind(line, ' -> ') + 1;    % arrow  dash positions
+    tokens = strread(line,'%s','delimiter',' "');
+    left_bound = 1;
+    for dash_pos = [Ddash_pos arrow_pos];  % if empty - not a POS line
+        Lnode = sscanf(line(left_bound:dash_pos -2), '%s');
+        Rnode = sscanf(line(dash_pos +3 : length(line)-1),'%s',1);
+        Lndx = strmatch(Lnode, labels, 'exact');
+        Rndx = strmatch(Rnode, labels, 'exact');
+        if isempty(Lndx)         % extend our list of labels 
+            labels{end+1} = Lnode;
+            Lndx = length(labels);
+        end
+        if isempty(Rndx)
+            labels{end+1} = Rnode;
+            Rndx = length(labels);
+        end
+        Adj(Lndx, Rndx) = edge_id;;
+        if  ismember(dash_pos, Ddash_pos)   % The edge is undirected, A(Rndx,LndxL) is also set to 1;
+            Adj(Rndx, Lndx) = edge_id;
+        end
+        edge_id = edge_id + 1; 
+        left_bound = dash_pos + 3;
+        unread = setdiff(unread, line_ndx); 
+    end
+end
+Nvrt = length(labels);    % number of vertices we found  [Do we ever have singleton vertices ???]
+% labels = strvcat(labels); % convert to the searchable array
+x = zeros(1, Nvrt); 
+y = zeros(1, Nvrt);
+lst_node = 0;
+        % Find node's position coordinates if they are contained in 'filename'.
+for line_ndx = unread        % Look for node's coordiantes among the 'unread' lines.
+    line = dot_lines(line_ndx,:);
+    bra_pos  = strfind(line, '[');       % has to have "[" if it has the lable
+    pos_pos = strfind(line, 'pos');     % position of the "pos"
+    for node = 1:Nvrt     % look through the list of labels 
+        %  THE NEXT STATEMENT we assume no label is substring of any other label
+        lbl_pos = strfind(line, labels{node});
+        if (~isempty(lbl_pos) & ~isempty(bra_pos) & (x(node) == 0))  % make sure we have not seen it 
+            if (lbl_pos(1) < bra_pos(1))  % label has to be to the left of braket
+                lst_node = node;
+            end
+        end
+    end
+    if (~isempty(pos_pos) & lst_node)   % this line contains SOME position  
+        [node_pos] = sscanf(line(pos_pos:length(line)), ' pos  = "%d,%d"')';
+        x(lst_node) = node_pos(1);
+        y(lst_node) = node_pos(2);
+        lst_node = 0;   %  not to assign position several times 
+    end
+end
+
+if (isempty(find(x)) & (nargout > 2))   % If coordinates were requested, but not found in 'filename'.
+    warning('File does not contain node coordinates.');
+end;
+if ~(size(Adj,1)==size(Adj,2))           % Make sure Adj is a square matrix. ? 
+    Adj = eye(max(size(Adj)),size(Adj,1))*Adj*eye(size(Adj,2),max(size(Adj)));
+end;
+x = .9*(x-min(x))/range(x)+.05;  % normalise and push off margins 
+y = .9*(y-min(y))/range(y)+.05; 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/Old/draw_dot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function draw_dot(adj);
+%
+%  draw_dot(name) 
+%  
+% Sample code illustrating use of dot_to_graph.m function
+% Leon Peshkin  
+if ispc, shell = 'dos'; else, shell = 'unix'; end  %  Which OS ?
+
+cmdline = strcat(shell,'(''neato -V'')');
+status = eval(cmdline);
+[status, result] = dos('neato -V');  % request version to check NEATO
+if status == 1,  fprintf('Complaining \n'); exit, end
+
+tmpDOTfile = '_GtDout.dot';            % to be platform independant no use of directories
+tmpLAYOUT  = '_LAYout.dot'; 
+directed = 0;                          % assume UN-directed graph
+graph_to_dot(adj > 0, 'directed', directed, 'filename', tmpDOTfile);  % save in file
+
+cmdline = strcat([shell '(''neato -Tdot ' tmpDOTfile ' -o ' tmpLAYOUT ''')']); % preserve trailing spaces 
+status = eval(cmdline);         %  get NEATO todo layout
+
+[adj, labels, x, y] = dot_to_graph(tmpLAYOUT);  %  load layout 
+delete(tmpLAYOUT); delete(tmpDOTfile);     % clean up temporary files
+
+figure(1); clf; axis square      %  now plot 
+[x, y, h] = draw_graph(adj>0, labels, zeros(size(x,2),1), x, y);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/Old/draw_graph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,310 @@
+function [x, y, h] = draw_graph(adj, labels, node_t, x, y)
+% DRAW_LAYOUT		Draws a layout for a graph 
+%
+%  [<X, Y>] = DRAW_LAYOUT(ADJ, <LABELS, ISBOX, X, Y>)
+%
+% Inputs :
+%	ADJ : Adjacency matrix (source, sink)
+%       LABELS : Cell array containing labels <Default : '1':'N'>
+%       ISBOX : 1 if node is a box, 0 if oval <Default : zeros>
+%       X, Y, : Coordinates of nodes on the unit square <Default : calls make_layout>
+%
+% Outputs :
+%	X, Y : Coordinates of nodes on the unit square
+%       H    : Object handles 
+%
+% Usage Example : [x, y] = draw_layout([0 1;0 0], {'Hidden','Visible'}, [1 0]');
+%
+% h(i,1) is the text handle - color
+% h(i,2) is the circle handle - facecolor
+%
+% Note	:
+% See also MAKE_LAYOUT
+
+% Uses :
+
+% Change History :
+% Date		Time		Prog	Note
+% 13-Apr-2000	 9:06 PM	ATC	Created under MATLAB 5.3.1.29215a (R11.1)
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+adj = double(adj);
+N = size(adj,1);
+if nargin<2,
+%  labels = cellstr(char(zeros(N,1)+double('+')));
+  labels = cellstr(int2str((1:N)'));
+end;
+
+if nargin<3,
+  node_t = zeros(N,1);
+%  node_t = rand(N,1) > 0.5;
+else
+  node_t = node_t(:);
+end;
+  
+axis([0 1 0 1]);
+set(gca,'XTick',[],'YTick',[],'box','on');
+% axis('square');
+%colormap(flipud(gray));
+
+if nargin<4,
+  [x y] = make_layout(adj);
+end;
+
+idx1 = find(node_t==0); wd1=[];
+if ~isempty(idx1),
+[h1 wd1] = textoval(x(idx1), y(idx1), labels(idx1));
+end;
+
+idx2 = find(node_t~=0); wd2 = [];
+if ~isempty(idx2),
+[h2 wd2] = textbox(x(idx2), y(idx2), labels(idx2));
+end;
+
+wd = zeros(size(wd1,1)+size(wd2,1),2);
+if ~isempty(idx1), wd(idx1, :) = wd1;  end;
+if ~isempty(idx2), wd(idx2, :) = wd2; end;
+
+for i=1:N,
+  j = find(adj(i,:)==1);
+  for k=j,
+    if x(k)-x(i)==0,
+	sign = 1;
+	if y(i)>y(k), alpha = -pi/2; else alpha = pi/2; end;
+    else
+	alpha = atan((y(k)-y(i))/(x(k)-x(i)));
+	if x(i)<x(k), sign = 1; else sign = -1; end;
+    end;
+    dy1 = sign.*wd(i,2).*sin(alpha);   dx1 = sign.*wd(i,1).*cos(alpha);
+    dy2 = sign.*wd(k,2).*sin(alpha);   dx2 = sign.*wd(k,1).*cos(alpha);    
+    if adj(k,i)==0, % if directed edge
+      arrow([x(i)+dx1 y(i)+dy1],[x(k)-dx2 y(k)-dy2]);
+    else	   
+      line([x(i)+dx1 x(k)-dx2],[y(i)+dy1 y(k)-dy2],'color','k');
+      adj(k,i)=-1; % Prevent drawing lines twice
+    end;
+  end;
+end;
+
+if nargout>2,
+  h = zeros(length(wd),2);
+  if ~isempty(idx1),
+    h(idx1,:) = h1;
+  end;
+  if ~isempty(idx2),
+    h(idx2,:) = h2;
+  end;
+end;
+
+%%%%%
+
+function [t, wd] = textoval(x, y, str)
+% TEXTOVAL		Draws an oval around text objects
+% 
+%  [T, WIDTH] = TEXTOVAL(X, Y, STR)
+%  [..] = TEXTOVAL(STR)  % Interactive
+% 
+% Inputs :
+%    X, Y : Coordinates
+%    TXT  : Strings
+% 
+% Outputs :
+%    T : Object Handles
+%    WIDTH : x and y Width of ovals 
+%
+% Usage Example : [t] = textoval('Visit to Asia?');
+% 
+% 
+% Note     :
+% See also TEXTBOX
+
+% Uses :
+
+% Change History :
+% Date		Time		Prog	Note
+% 15-Jun-1998	10:36 AM	ATC	Created under MATLAB 5.1.0.421
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+temp = [];
+
+switch nargin,
+  case 1,
+    str = x;
+    if ~isa(str,'cell') str=cellstr(str); end;
+    N = length(str);
+    wd = zeros(N,2);
+    for i=1:N,
+      [x, y] = ginput(1);
+      tx = text(x,y,str{i},'HorizontalAlignment','center','VerticalAlign','middle');
+      [ptc wx wy] = draw_oval(tx, x, y);
+      wd(i,:) = [wx wy];
+      delete(tx);      
+      tx = text(x,y,str{i},'HorizontalAlignment','center','VerticalAlign','middle');
+      temp = [temp ; tx ptc];
+    end;
+  case 3,
+    if ~isa(str,'cell') str=cellstr(str); end;
+    N = length(str);    
+    wd = zeros(N,2);
+    for i=1:N,
+      tx = text(x(i),y(i),str{i},'HorizontalAlignment','center','VerticalAlign','middle');
+     [ptc wx wy] = draw_oval(tx, x(i), y(i));
+      wd(i,:) = [wx wy];
+      delete(tx);
+      tx = text(x(i),y(i),str{i},'HorizontalAlignment','center','VerticalAlign','middle');      
+      temp = [temp;  tx ptc];
+    end;
+  otherwise,
+end;  
+
+if nargout>0, t = temp; end;
+
+%%%%%%%%%
+
+
+function [ptc, wx, wy] = draw_oval(tx, x, y)
+% Draws an oval box around a tex object
+sz = get(tx,'Extent');
+wy = sz(4);
+wx = max(2/3*sz(3), wy); 
+wx = 0.5*wx; % KPM
+wy = 0.5*wy;
+ptc = ellipse(x, y, wx, wy);
+set(ptc, 'FaceColor','w');
+
+
+%%%%%%%%%%%%%
+
+function [p] = ellipse(x, y, rx, ry, c)
+% ELLIPSE		Draws Ellipse shaped patch objects
+% 
+%  [<P>] = ELLIPSE(X, Y, Rx, Ry, C)
+% 
+% Inputs :
+%    X : N x 1 vector of x coordinates
+%    Y : N x 1 vector of y coordinates
+%    Rx, Ry : Radii
+%    C : Color index
+%
+% 
+% Outputs :
+%    P = Handles of Ellipse shaped path objects
+% 
+% Usage Example : [] = ellipse();
+% 
+% 
+% Note     :
+% See also 
+
+% Uses :
+
+% Change History :
+% Date		Time		Prog	Note
+% 27-May-1998	 9:55 AM	ATC	Created under MATLAB 5.1.0.421
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+if (nargin < 2) error('Usage Example : e = ellipse([0 1],[0 -1],[1 0.5],[2 0.5]); '); end;
+if (nargin < 3) rx = 0.1; end;
+if (nargin < 4) ry = rx; end;
+if (nargin < 5) c = 1; end;
+
+if length(c)==1, c = ones(size(x)).*c; end;
+if length(rx)==1, rx = ones(size(x)).*rx; end;
+if length(ry)==1, ry = ones(size(x)).*ry; end;
+  
+n = length(x);
+p = zeros(size(x));
+t = 0:pi/30:2*pi;
+for i=1:n,
+	px = rx(i)*cos(t)+x(i);
+	py = ry(i)*sin(t)+y(i);
+	p(i) = patch(px,py,c(i));
+end;
+
+if nargout>0, pp = p; end;
+
+%%%%%
+
+function [t, wd] = textbox(x,y,str)
+% TEXTBOX	Draws A Box around the text 
+% 
+%  [T, WIDTH] = TEXTBOX(X, Y, STR)
+%  [..] = TEXTBOX(STR)
+% 
+% Inputs :
+%    X, Y : Coordinates
+%    TXT  : Strings
+% 
+% Outputs :
+%    T : Object Handles
+%    WIDTH : x and y Width of boxes 
+%% 
+% Usage Example : t = textbox({'Ali','Veli','49','50'});
+% 
+% 
+% Note     :
+% See also TEXTOVAL
+
+% Uses :
+
+% Change History :
+% Date		Time		Prog	Note
+% 09-Jun-1998	11:43 AM	ATC	Created under MATLAB 5.1.0.421
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+% See
+temp = [];
+
+switch nargin,
+  case 1,
+    str = x;
+    if ~isa(str,'cell') str=cellstr(str); end;
+    N = length(str);  
+    wd = zeros(N,2);
+    for i=1:N,
+      [x, y] = ginput(1);
+      tx = text(x,y,str{i},'HorizontalAlignment','center','VerticalAlign','middle');
+      [ptc wx wy] = draw_box(tx, x, y); 
+      wd(i,:) = [wx wy];
+      delete(tx);
+      tx = text(x,y,str{i},'HorizontalAlignment','center','VerticalAlign','middle');      
+      temp = [temp; tx ptc];
+    end;
+  case 3,
+    if ~isa(str,'cell') str=cellstr(str); end;    
+    N = length(str);
+    for i=1:N,
+      tx = text(x(i),y(i),str{i},'HorizontalAlignment','center','VerticalAlign','middle');
+      [ptc wx wy] = draw_box(tx, x(i), y(i));
+      wd(i,:) = [wx wy];
+      delete(tx);
+      tx = text(x(i),y(i),str{i},'HorizontalAlignment','center','VerticalAlign','middle');      
+      temp = [temp; tx ptc];
+    end;
+     
+  otherwise,
+
+end;  
+
+if nargout>0, t = temp; end;
+
+
+function [ptc, wx, wy] = draw_box(tx, x, y)
+% Draws a box around a tex object
+      sz = get(tx,'Extent');
+      wy = 2/3*sz(4);
+      wx = max(2/3*sz(3), wy);
+      ptc = patch([x-wx x+wx x+wx x-wx], [y+wy y+wy y-wy y-wy],'w');
+      set(ptc, 'FaceColor','w');
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/Old/graphToDot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,84 @@
+function graphToDot(adj, varargin)
+% GRAPHTODOT Makes a GraphViz (AT&T) ile representing  an adjacency matrix
+% function graphToDot(adj, ...)
+% Optional arguments should be passed as name/value pairs [default]
+%
+% 'filename' - if omitted, writes to 'tmp.dot'
+% 'arc_label' - arc_label{i,j} is a string attached to the i-j arc [""]
+% 'node_label' - node_label{i} is a string attached to the node i ["i"]
+% 'width'     - width in inches [10]
+% 'height'    - height in inches [10]
+% 'leftright' - 1 means layout left-to-right, 0 means top-to-bottom [0]
+% 'directed'  - 1 means use directed arcs, 0 means undirected [1]
+%
+% For details on graphviz, See http://www.research.att.com/sw/tools/graphviz
+%
+% See also dot_to_graph and draw_dot
+%
+% First version written by Kevin Murphy 2002.
+% Modified by Leon Peshkin, Jan 2004.
+                   
+node_label = [];   arc_label = [];   % set default args
+width = 10;        height = 10;
+leftright = 0;     directed = 1;     filename = 'tmp.dot';
+           
+for i = 1:2:nargin-1                    % get optional args
+    switch varargin{i}
+        case 'filename', filename = varargin{i+1};
+        case 'node_label', node_label = varargin{i+1};
+        case 'arc_label', arc_label = varargin{i+1};
+        case 'width', width = varargin{i+1};
+        case 'height', height = varargin{i+1};
+        case 'leftright', leftright = varargin{i+1};
+        case 'directed', directed = varargin{i+1};
+    end
+end
+
+fid = fopen(filename, 'w');
+if directed
+    fprintf(fid, 'digraph G {\n');
+    arctxt = '->'; 
+    if isempty(arc_label)
+        labeltxt = '';
+    else
+        labeltxt = '[label="%s"]';
+    end
+else
+    fprintf(fid, 'graph G {\n');
+    arctxt = '--'; 
+    if isempty(arc_label)
+        labeltxt = '[dir=none]';
+    else
+        labeltext = '[label="%s",dir=none]';
+    end
+end
+edgeformat = strcat(['%d ',arctxt,' %d ',labeltxt,';\n']);
+fprintf(fid, 'center = 1;\n');
+fprintf(fid, 'size=\"%d,%d\";\n', width, height);
+if leftright
+    fprintf(fid, 'rankdir=LR;\n');
+end
+Nnds = length(adj);
+for node = 1:Nnds               %  process nodes 
+    if isempty(node_label)
+        fprintf(fid, '%d;\n', node);
+    else
+        fprintf(fid, '%d [ label = "%s" ];\n', node,
+node_label{node});
+    end
+end
+for node1 = 1:Nnds   % process edges
+    if directed
+        arcs = find(adj(node1,:));         % children(adj, node);
+    else
+        arcs = find(adj(node1,node1+1:Nnds)); % remove duplicate arcs
+    end
+    for node2 = arcs
+        fprintf(fid, edgeformat, node1, node2);
+    end
+end
+fprintf(fid, '}');
+fclose(fid); 
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/Old/pre_pesha_graph_to_dot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,166 @@
+function graph_to_dot(G, varargin)
+% DAG_TO_DOT Make a file representing the directed graph in dotty format.
+% dag_to_dot(G, ...)
+%
+% Optional arguments should be passed as name/value pairs [default]
+%
+% 'filename' - if omitted, we write to 'tmp.dot', convert this to 'tmp.ps',
+%              and then call ghostview automatically 
+% 'arc_label' - arc_label{i,j} is a string attached to the i->j arc. [""]
+% 'node_label' - node_label{i} is a string attached to node i. ["i"]
+% 'width'      - width in inches [10]
+% 'height'     - height in inches [10]
+% 'leftright'  - 1 means layout left-to-right, 0 means top-to-bottom [0]
+% 'directed'  - 1 means use directed arcs, 0 means undirected [1]
+%
+% For details on dotty, See http://www.research.att.com/sw/tools/graphviz
+%
+% Example:
+% G = rand(5,5);
+% names = cell(5,5);
+% names{1,2} = 'arc 1-2';
+% graph_to_dot(G, 'arc_label', names)
+% or graph_to_dot(G, 'arc_label', 'numbers') % prints value of G(i,j) on i->j arc 
+
+% Kevin Murphy, 1998
+
+% set default args
+filename = [];
+node_label = [];
+arc_label = [];
+width = 10;
+height = 10;
+leftright = 0;
+directed = 1;
+% get optional args
+args = varargin;
+for i=1:2:length(args)
+  switch args{i}
+   case 'filename', filename = args{i+1};
+   case 'node_label', node_label = args{i+1};
+   case 'arc_label', arc_label = args{i+1};
+   case 'width', width = args{i+1};
+   case 'height', height = args{i+1};
+   case 'leftright', leftright = args{i+1};
+   case 'directed', directed = args{i+1};
+  end
+end
+
+if isstr(arc_label) & strcmp(arc_label, 'numbers')
+  N = length(G);
+  arc_label = cell(N,N);
+  for i=1:N
+    for j=1:N
+      arc_label{i,j} = sprintf('%4.2f', G(i,j));
+    end
+  end
+end
+
+if isempty(filename)
+  make_file(G, 'tmp.dot', node_label, arc_label, width, height, leftright, directed);
+  if isunix
+    !dot -Tps tmp.dot -o tmp.ps
+
+    !gs tmp.ps &
+  else
+    dos('dot -Tps tmp.dot -o tmp.ps');
+    dos('gsview32 tmp.ps &');
+  end
+else
+  
+  
+  make_file(G, filename, node_label, arc_label, width, height, leftright, directed);
+end
+
+
+%%%%%%
+
+function make_file(G, filename, node_label, arc_label, width, height, leftright, directed)
+
+n = length(G);
+fid = fopen(filename, 'w');
+if directed
+  fprintf(fid, 'digraph G {\n');
+else
+  fprintf(fid, 'graph G {\n');
+end
+fprintf(fid, 'center = 1;\n');
+fprintf(fid, 'size=\"%d,%d\";\n', width, height);
+if leftright
+  fprintf(fid, 'rankdir=LR;\n');
+end
+for i=1:n
+  if isempty(node_label)
+    fprintf(fid, '%d;\n', i);
+  else
+    fprintf(fid, '%d [ label = "%s" ];\n', i, node_label{i});
+  end
+end
+if directed
+  for i=1:n
+    cs = children(G,i);
+    for j=1:length(cs)
+      c = cs(j);
+      if isempty(arc_label)
+	fprintf(fid, '%d -> %d;\n', i, c);
+      else
+	fprintf(fid, '%d -> %d [label="%s"];\n', i, c, arc_label{i,c});
+      end
+    end
+  end
+else
+  for i=1:n
+    ns = intersect(neighbors(G,i), i+1:n); % remove duplicate arcs
+    for j=1:length(ns)
+      c = ns(j);
+      if isempty(arc_label)
+	fprintf(fid, '%d -- %d [dir=none];\n', i, c);
+      else
+	fprintf(fid, '%d -- %d [label="%s",dir=none];\n', i, c, arc_label{i,c});
+      end
+    end
+  end
+end
+fprintf(fid, '\n}');
+fclose(fid);
+
+
+
+%%%%%%%%%%%%%%%
+
+function cs = children(adj_mat, i, t)
+% CHILDREN Return the indices of a node's children in sorted order
+% c = children(adj_mat, i, t)
+%
+% t is an optional argument: if present, dag is assumed to be a 2-slice DBN
+
+if nargin < 3 
+  cs = find(adj_mat(i,:));
+else
+  if t==1
+    cs = find(adj_mat(i,:));
+  else
+    ss = length(adj_mat)/2;
+    j = i+ss;
+    cs = find(adj_mat(j,:)) + (t-2)*ss;
+  end
+end
+
+%%%%%%%%%%%%
+
+function ps = parents(adj_mat, i)
+% PARENTS Return the list of parents of node i
+% ps = parents(adj_mat, i)
+
+ps = find(adj_mat(:,i))';
+
+%%%%%%%%%%%%%
+
+function ns = neighbors(adj_mat, i)
+% NEIGHBORS Find the parents and children of a node in a graph.
+% ns = neighbors(adj_mat, i)
+
+ns = union(children(adj_mat, i), parents(adj_mat, i));
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/README.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+Graph visualization (automatic layout) functions
+------------------------------------------------
+
+This directory contains code to automatically layout and visualize
+graphs. It provides a matlab interface to the graphviz program:
+  http://www.research.att.com/sw/tools/graphviz
+Written by Kevin Murphy, Leon Peshkin, Tom Minka.
+
+draw_graph was written by Ali Taylan Cemgil, and is entirely
+self-contained matlab: it does not need graphviz, but produces lower
+quality results. 
+http://www.mbfys.kun.nl/~cemgil/matlab/layout.html
+
+See also the following URLs for other graph layout programs:
+ http://www.ics.uci.edu/~eppstein/gina/gdraw.html
+ http://www.cwi.nl/InfoVisu/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/approxeq.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function p = approxeq(a, b, tol, rel)
+% APPROXEQ Are a and b approximately equal (to within a specified tolerance)?
+% p = approxeq(a, b, thresh)
+% 'tol' defaults to 1e-3.
+% p(i) = 1 iff abs(a(i) - b(i)) < thresh
+%
+% p = approxeq(a, b, thresh, 1)
+% p(i) = 1 iff abs(a(i)-b(i))/abs(a(i)) < thresh
+
+if nargin < 3, tol = 1e-2; end
+if nargin < 4, rel = 0; end
+
+a = a(:);
+b = b(:);
+d = abs(a-b);
+if rel
+  p = ~any( (d ./ (abs(a)+eps)) > tol);
+else
+  p = ~any(d > tol);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/arrow.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1333 @@
+function [h,yy,zz] = arrow(varargin)
+% ARROW  Draw a line with an arrowhead.
+%
+%  ARROW(Start,Stop) draws a line with an arrow from Start to Stop (points
+%        should be vectors of length 2 or 3, or matrices with 2 or 3
+%        columns), and returns the graphics handle of the arrow(s).
+%
+%  ARROW uses the mouse (click-drag) to create an arrow.
+%
+%  ARROW DEMO & ARROW DEMO2 show 3-D & 2-D demos of the capabilities of ARROW.
+%
+%  ARROW may be called with a normal argument list or a property-based list.
+%        ARROW(Start,Stop,Length,BaseAngle,TipAngle,Width,Page,CrossDir) is
+%        the full normal argument list, where all but the Start and Stop
+%        points are optional.  If you need to specify a later argument (e.g.,
+%        Page) but want default values of earlier ones (e.g., TipAngle),
+%        pass an empty matrix for the earlier ones (e.g., TipAngle=[]).
+%
+%  ARROW('Property1',PropVal1,'Property2',PropVal2,...) creates arrows with the
+%        given properties, using default values for any unspecified or given as
+%        'default' or NaN.  Some properties used for line and patch objects are
+%        used in a modified fashion, others are passed directly to LINE, PATCH,
+%        or SET.  For a detailed properties explanation, call ARROW PROPERTIES.
+%
+%        Start         The starting points.                     B
+%        Stop          The end points.                         /|\           ^
+%        Length        Length of the arrowhead in pixels.     /|||\          |
+%        BaseAngle     Base angle in degrees (ADE).          //|||\\        L|
+%        TipAngle      Tip angle in degrees (ABC).          ///|||\\\       e|
+%        Width         Width of the base in pixels.        ////|||\\\\      n|
+%        Page          Use hardcopy proportions.          /////|D|\\\\\     g|
+%        CrossDir      Vector || to arrowhead plane.     ////  |||  \\\\    t|
+%        NormalDir     Vector out of arrowhead plane.   ///    |||    \\\   h|
+%        Ends          Which end has an arrowhead.     //<----->||      \\   |
+%        ObjectHandles Vector of handles to update.   /   base |||        \  V
+%                                                    E    angle||<-------->C
+%  ARROW(H,'Prop1',PropVal1,...), where H is a                 |||tipangle
+%        vector of handles to previously-created arrows        |||
+%        and/or line objects, will update the previously-      |||
+%        created arrows according to the current view       -->|A|<-- width
+%        and any specified properties, and will convert
+%        two-point line objects to corresponding arrows.  ARROW(H) will update
+%        the arrows if the current view has changed.  Root, figure, or axes
+%        handles included in H are replaced by all descendant Arrow objects.
+%
+%  A property list can follow any specified normal argument list, e.g.,
+%  ARROW([1 2 3],[0 0 0],36,'BaseAngle',60) creates an arrow from (1,2,3) to
+%  the origin, with an arrowhead of length 36 pixels and 60-degree base angle.
+%
+%  The basic arguments or properties can generally be vectorized to create
+%  multiple arrows with the same call.  This is done by passing a property
+%  with one row per arrow, or, if all arrows are to have the same property
+%  value, just one row may be specified.
+%
+%  You may want to execute AXIS(AXIS) before calling ARROW so it doesn't change
+%  the axes on you; ARROW determines the sizes of arrow components BEFORE the
+%  arrow is plotted, so if ARROW changes axis limits, arrows may be malformed.
+%
+%  This version of ARROW uses features of MATLAB 5 and is incompatible with
+%  earlier MATLAB versions (ARROW for MATLAB 4.2c is available separately);
+%  some problems with perspective plots still exist.
+
+% Copyright (c)1995-1997, Erik A. Johnson <johnsone@uiuc.edu>, 8/14/97
+
+% Revision history:
+%    8/14/97  EAJ  Added workaround for MATLAB 5.1 scalar logical transpose bug.
+%    7/21/97  EAJ  Fixed a few misc bugs.
+%    7/14/97  EAJ  Make arrow([],'Prop',...) do nothing (no old handles)
+%    6/23/97  EAJ  MATLAB 5 compatible version, release.
+%    5/27/97  EAJ  Added Line Arrows back in.  Corrected a few bugs.
+%    5/26/97  EAJ  Changed missing Start/Stop to mouse-selected arrows.
+%    5/19/97  EAJ  MATLAB 5 compatible version, beta.
+%    4/13/97  EAJ  MATLAB 5 compatible version, alpha.
+%    1/31/97  EAJ  Fixed bug with multiple arrows and unspecified Z coords.
+%   12/05/96  EAJ  Fixed one more bug with log plots and NormalDir specified
+%   10/24/96  EAJ  Fixed bug with log plots and NormalDir specified
+%   11/13/95  EAJ  Corrected handling for 'reverse' axis directions
+%   10/06/95  EAJ  Corrected occasional conflict with SUBPLOT
+%    4/24/95  EAJ  A major rewrite.
+%    Fall 94  EAJ  Original code.
+
+% Things to be done:
+%  - segment parsing, computing, and plotting into separate subfunctions
+%  - change computing from Xform to Camera paradigms
+%     + this will help especially with 3-D perspective plots
+%     + if the WarpToFill section works right, remove warning code
+%     + when perpsective works properly, remove perspective warning code
+%  - add cell property values and struct property name/values (like get/set)
+%  - get rid of NaN as the "default" data label
+%     + perhaps change userdata to a struct and don't include (or leave
+%       empty) the values specified as default; or use a cell containing
+%       an empty matrix for a default value
+%  - add functionality of GET to retrieve current values of ARROW properties
+
+% Many thanks to Keith Rogers <kerog@ai.mit.edu> for his many excellent
+% suggestions and beta testing.  Check out his shareware package MATDRAW.
+% He has permission to distribute ARROW with MATDRAW.
+
+% global variable initialization
+global ARROW_PERSP_WARN ARROW_STRETCH_WARN ARROW_AXLIMITS
+if isempty(ARROW_PERSP_WARN  ), ARROW_PERSP_WARN  =1; end;
+if isempty(ARROW_STRETCH_WARN), ARROW_STRETCH_WARN=1; end;
+
+% Handle callbacks
+if (nargin>0 & isstr(varargin{1}) & strcmp(lower(varargin{1}),'callback')),
+	arrow_callback(varargin{2:end}); return;
+end;
+
+% Are we doing the demo?
+c = sprintf('\n');
+if (nargin==1 & isstr(varargin{1})),
+	arg1 = lower(varargin{1});
+	if strncmp(arg1,'prop',4), arrow_props;
+	elseif strncmp(arg1,'demo',4)
+		clf reset
+		demo_info = arrow_demo;
+		if ~strncmp(arg1,'demo2',5),
+			hh=arrow_demo3(demo_info);
+		else,
+			hh=arrow_demo2(demo_info);
+		end;
+		if (nargout>=1), h=hh; end;
+	elseif strncmp(arg1,'fixlimits',3),
+		arrow_fixlimits(ARROW_AXLIMITS);
+		ARROW_AXLIMITS=[];
+	elseif strncmp(arg1,'help',4),
+		disp(help(mfilename));
+	else,
+		error([upper(mfilename) ' got an unknown single-argument string ''' deblank(arg1) '''.']);
+	end;
+	return;
+end;
+
+% Check # of arguments
+if (nargout>3), error([upper(mfilename) ' produces at most 3 output arguments.']); end;
+
+% find first property number
+firstprop = nargin+1;
+for k=1:length(varargin), if ~isnumeric(varargin{k}), firstprop=k; break; end; end;
+lastnumeric = firstprop-1;
+
+% check property list
+if (firstprop<=nargin),
+	for k=firstprop:2:nargin,
+		curarg = varargin{k};
+		if ~isstr(curarg) | sum(size(curarg)>1)>1,
+			error([upper(mfilename) ' requires that a property name be a single string.']);
+		end;
+	end;
+	if (rem(nargin-firstprop,2)~=1),
+		error([upper(mfilename) ' requires that the property ''' ...
+		       varargin{nargin} ''' be paired with a property value.']);
+	end;
+end;
+
+% default output
+if (nargout>0), h=[]; end;
+if (nargout>1), yy=[]; end;
+if (nargout>2), zz=[]; end;
+
+% set values to empty matrices
+start      = [];
+stop       = [];
+len        = [];
+baseangle  = [];
+tipangle   = [];
+wid        = [];
+page       = [];
+crossdir   = [];
+ends       = [];
+ax         = [];
+oldh       = [];
+ispatch    = [];
+defstart      = [NaN NaN NaN];
+defstop       = [NaN NaN NaN];
+deflen        = 16;
+defbaseangle  = 90;
+deftipangle   = 16;
+defwid        = 0;
+defpage       = 0;
+defcrossdir   = [NaN NaN NaN];
+defends       = 1;
+defoldh       = [];
+defispatch    = 1;
+
+% The 'Tag' we'll put on our arrows
+ArrowTag = 'Arrow';
+
+% check for oldstyle arguments
+if (firstprop==2),
+	% assume arg1 is a set of handles
+	oldh = varargin{1}(:);
+	if isempty(oldh), return; end;
+elseif (firstprop>9),
+	error([upper(mfilename) ' takes at most 8 non-property arguments.']);
+elseif (firstprop>2),
+	s = str2mat('start','stop','len','baseangle','tipangle','wid','page','crossdir');
+	for k=1:firstprop-1, eval([deblank(s(k,:)) '=varargin{k};']); end;
+end;
+
+% parse property pairs
+extraprops={};
+for k=firstprop:2:nargin,
+	prop = varargin{k};
+	val  = varargin{k+1};
+	prop = [lower(prop(:)') '      '];
+	if     strncmp(prop,'start' ,5),   start      = val;
+	elseif strncmp(prop,'stop'  ,4),   stop       = val;
+	elseif strncmp(prop,'len'   ,3),   len        = val(:);
+	elseif strncmp(prop,'base'  ,4),   baseangle  = val(:);
+	elseif strncmp(prop,'tip'   ,3),   tipangle   = val(:);
+	elseif strncmp(prop,'wid'   ,3),   wid        = val(:);
+	elseif strncmp(prop,'page'  ,4),   page       = val;
+	elseif strncmp(prop,'cross' ,5),   crossdir   = val;
+	elseif strncmp(prop,'norm'  ,4),   if (isstr(val)), crossdir=val; else, crossdir=val*sqrt(-1); end;
+	elseif strncmp(prop,'end'   ,3),   ends       = val;
+	elseif strncmp(prop,'object',6),   oldh       = val(:);
+	elseif strncmp(prop,'handle',6),   oldh       = val(:);
+	elseif strncmp(prop,'type'  ,4),   ispatch    = val;
+	elseif strncmp(prop,'userd' ,5),   %ignore it
+	else,
+		% make sure it is a valid patch or line property
+		eval('get(0,[''DefaultPatch'' varargin{k}]);err=0;','err=1;'); errstr=lasterr;
+		if (err), eval('get(0,[''DefaultLine'' varargin{k}]);err=0;','err=1;'); end;
+		if (err),
+			errstr(1:max(find(errstr==setstr(13)|errstr==setstr(10)))) = '';
+			error([upper(mfilename) ' got ' errstr]);
+		end;
+		extraprops={extraprops{:},varargin{k},val};
+	end;
+end;
+
+% Check if we got 'default' values
+start     = arrow_defcheck(start    ,defstart    ,'Start'        );
+stop      = arrow_defcheck(stop     ,defstop     ,'Stop'         );
+len       = arrow_defcheck(len      ,deflen      ,'Length'       );
+baseangle = arrow_defcheck(baseangle,defbaseangle,'BaseAngle'    );
+tipangle  = arrow_defcheck(tipangle ,deftipangle ,'TipAngle'     );
+wid       = arrow_defcheck(wid      ,defwid      ,'Width'        );
+crossdir  = arrow_defcheck(crossdir ,defcrossdir ,'CrossDir'     );
+page      = arrow_defcheck(page     ,defpage     ,'Page'         );
+ends      = arrow_defcheck(ends     ,defends     ,''             );
+oldh      = arrow_defcheck(oldh     ,[]          ,'ObjectHandles');
+ispatch   = arrow_defcheck(ispatch  ,defispatch  ,''             );
+
+% check transpose on arguments
+[m,n]=size(start   );   if any(m==[2 3])&(n==1|n>3),   start    = start';      end;
+[m,n]=size(stop    );   if any(m==[2 3])&(n==1|n>3),   stop     = stop';       end;
+[m,n]=size(crossdir);   if any(m==[2 3])&(n==1|n>3),   crossdir = crossdir';   end;
+
+% convert strings to numbers
+if ~isempty(ends) & isstr(ends),
+  endsorig = ends;
+  [m,n] = size(ends);
+  col = lower([ends(:,1:min(3,n)) ones(m,max(0,3-n))*' ']);
+  ends = NaN*ones(m,1);
+  oo = ones(1,m);
+  ii=find(all(col'==['non']'*oo)'); if ~isempty(ii), ends(ii)=ones(length(ii),1)*0; end;
+  ii=find(all(col'==['sto']'*oo)'); if ~isempty(ii), ends(ii)=ones(length(ii),1)*1; end;
+  ii=find(all(col'==['sta']'*oo)'); if ~isempty(ii), ends(ii)=ones(length(ii),1)*2; end;
+  ii=find(all(col'==['bot']'*oo)'); if ~isempty(ii), ends(ii)=ones(length(ii),1)*3; end;
+  if any(isnan(ends)),
+    ii = min(find(isnan(ends)));
+    error([upper(mfilename) ' does not recognize ' deblank(endsorig(ii,:)) ' as a valid Ends value.']);
+  end;
+else,
+  ends = ends(:);
+end;
+if ~isempty(ispatch) & isstr(ispatch),
+  col = lower(ispatch(:,1));
+  patchchar='p'; linechar='l'; defchar=' ';
+  mask = col~=patchchar & col~=linechar & col~=defchar;
+  if any(mask)
+    error([upper(mfilename) ' does not recognize ' deblank(ispatch(min(find(mask)),:)) ' as a valid Type value.']);
+  end;
+  ispatch = (col==patchchar)*1 + (col==linechar)*0 + (col==defchar)*defispatch;
+else,
+  ispatch = ispatch(:);
+end;
+oldh = oldh(:);
+
+% check object handles
+if ~all(ishandle(oldh)), error([upper(mfilename) ' got invalid object handles.']); end;
+
+% expand root, figure, and axes handles
+if ~isempty(oldh),
+	ohtype = get(oldh,'Type');
+	mask = strcmp(ohtype,'root') | strcmp(ohtype,'figure') | strcmp(ohtype,'axes');
+	if any(mask),
+		oldh = num2cell(oldh);
+		for ii=find(mask)',
+			oldh(ii) = {findobj(oldh{ii},'Tag',ArrowTag)};
+		end;
+		oldh = cat(1,oldh{:});
+		if isempty(oldh), return; end; % no arrows to modify, so just leave
+	end;
+end;
+
+% largest argument length
+[mstart,junk]=size(start); [mstop,junk]=size(stop); [mcrossdir,junk]=size(crossdir);
+argsizes = [length(oldh) mstart mstop                              ...
+            length(len) length(baseangle) length(tipangle)         ...
+			length(wid) length(page) mcrossdir length(ends) ];
+args=['length(ObjectHandle)  '; ...
+      '#rows(Start)          '; ...
+      '#rows(Stop)           '; ...
+      'length(Length)        '; ...
+      'length(BaseAngle)     '; ...
+      'length(TipAngle)      '; ...
+      'length(Width)         '; ...
+      'length(Page)          '; ...
+      '#rows(CrossDir)       '; ...
+	  '#rows(Ends)           '];
+if (any(imag(crossdir(:))~=0)),
+	args(9,:) = '#rows(NormalDir)      ';
+end;
+if isempty(oldh),
+	narrows = max(argsizes);
+else,
+	narrows = length(oldh);
+end;
+if (narrows<=0), narrows=1; end;
+
+% Check size of arguments
+ii = find((argsizes~=0)&(argsizes~=1)&(argsizes~=narrows));
+if ~isempty(ii),
+	s = args(ii',:);
+	while ((size(s,2)>1)&((abs(s(:,size(s,2)))==0)|(abs(s(:,size(s,2)))==abs(' ')))),
+		s = s(:,1:size(s,2)-1);
+	end;
+	s = [ones(length(ii),1)*[upper(mfilename) ' requires that  '] s ...
+	     ones(length(ii),1)*['  equal the # of arrows (' num2str(narrows) ').' c]];
+	s = s';
+	s = s(:)';
+	s = s(1:length(s)-1);
+	error(setstr(s));
+end;
+
+% check element length in Start, Stop, and CrossDir
+if ~isempty(start),
+	[m,n] = size(start);
+	if (n==2),
+		start = [start NaN*ones(m,1)];
+	elseif (n~=3),
+		error([upper(mfilename) ' requires 2- or 3-element Start points.']);
+	end;
+end;
+if ~isempty(stop),
+	[m,n] = size(stop);
+	if (n==2),
+		stop = [stop NaN*ones(m,1)];
+	elseif (n~=3),
+		error([upper(mfilename) ' requires 2- or 3-element Stop points.']);
+	end;
+end;
+if ~isempty(crossdir),
+	[m,n] = size(crossdir);
+	if (n<3),
+		crossdir = [crossdir NaN*ones(m,3-n)];
+	elseif (n~=3),
+		if (all(imag(crossdir(:))==0)),
+			error([upper(mfilename) ' requires 2- or 3-element CrossDir vectors.']);
+		else,
+			error([upper(mfilename) ' requires 2- or 3-element NormalDir vectors.']);
+		end;
+	end;
+end;
+
+% fill empty arguments
+if isempty(start     ),   start      = [Inf Inf Inf];      end;
+if isempty(stop      ),   stop       = [Inf Inf Inf];      end;
+if isempty(len       ),   len        = Inf;                end;
+if isempty(baseangle ),   baseangle  = Inf;                end;
+if isempty(tipangle  ),   tipangle   = Inf;                end;
+if isempty(wid       ),   wid        = Inf;                end;
+if isempty(page      ),   page       = Inf;                end;
+if isempty(crossdir  ),   crossdir   = [Inf Inf Inf];      end;
+if isempty(ends      ),   ends       = Inf;                end;
+if isempty(ispatch   ),   ispatch    = Inf;                end;
+
+% expand single-column arguments
+o = ones(narrows,1);
+if (size(start     ,1)==1),   start      = o * start     ;   end;
+if (size(stop      ,1)==1),   stop       = o * stop      ;   end;
+if (length(len       )==1),   len        = o * len       ;   end;
+if (length(baseangle )==1),   baseangle  = o * baseangle ;   end;
+if (length(tipangle  )==1),   tipangle   = o * tipangle  ;   end;
+if (length(wid       )==1),   wid        = o * wid       ;   end;
+if (length(page      )==1),   page       = o * page      ;   end;
+if (size(crossdir  ,1)==1),   crossdir   = o * crossdir  ;   end;
+if (length(ends      )==1),   ends       = o * ends      ;   end;
+if (length(ispatch   )==1),   ispatch    = o * ispatch   ;   end;
+ax = o * gca;
+
+% if we've got handles, get the defaults from the handles
+if ~isempty(oldh),
+	for k=1:narrows,
+		oh = oldh(k);
+		ud = get(oh,'UserData');
+		ax(k) = get(oh,'Parent');
+		ohtype = get(oh,'Type');
+		if strcmp(get(oh,'Tag'),ArrowTag), % if it's an arrow already
+			if isinf(ispatch(k)), ispatch(k)=strcmp(ohtype,'patch'); end;
+			% arrow UserData format: [start' stop' len base tip wid page crossdir' ends]
+			start0 = ud(1:3);
+			stop0  = ud(4:6);
+			if (isinf(len(k))),           len(k)        = ud( 7);   end;
+			if (isinf(baseangle(k))),     baseangle(k)  = ud( 8);   end;
+			if (isinf(tipangle(k))),      tipangle(k)   = ud( 9);   end;
+			if (isinf(wid(k))),           wid(k)        = ud(10);   end;
+			if (isinf(page(k))),          page(k)       = ud(11);   end;
+			if (isinf(crossdir(k,1))),    crossdir(k,1) = ud(12);   end;
+			if (isinf(crossdir(k,2))),    crossdir(k,2) = ud(13);   end;
+			if (isinf(crossdir(k,3))),    crossdir(k,3) = ud(14);   end;
+			if (isinf(ends(k))),          ends(k)       = ud(15);   end;
+		elseif strcmp(ohtype,'line')|strcmp(ohtype,'patch'), % it's a non-arrow line or patch
+			convLineToPatch = 1; %set to make arrow patches when converting from lines.
+			if isinf(ispatch(k)), ispatch(k)=convLineToPatch|strcmp(ohtype,'patch'); end;
+			x=get(oh,'XData');  x=x(~isnan(x(:)));  if isempty(x), x=NaN; end;
+			y=get(oh,'YData');  y=y(~isnan(y(:)));  if isempty(y), y=NaN; end;
+			z=get(oh,'ZData');  z=z(~isnan(z(:)));  if isempty(z), z=NaN; end;
+			start0 = [x(1)   y(1)   z(1)  ];
+			stop0  = [x(end) y(end) z(end)];
+		else,
+			error([upper(mfilename) ' cannot convert ' ohtype ' objects.']);
+		end;
+		ii=find(isinf(start(k,:)));  if ~isempty(ii),  start(k,ii)=start0(ii);  end;
+		ii=find(isinf(stop( k,:)));  if ~isempty(ii),  stop( k,ii)=stop0( ii);  end;
+	end;
+end;
+
+% convert Inf's to NaN's
+start(     isinf(start    )) = NaN;
+stop(      isinf(stop     )) = NaN;
+len(       isinf(len      )) = NaN;
+baseangle( isinf(baseangle)) = NaN;
+tipangle(  isinf(tipangle )) = NaN;
+wid(       isinf(wid      )) = NaN;
+page(      isinf(page     )) = NaN;
+crossdir(  isinf(crossdir )) = NaN;
+ends(      isinf(ends     )) = NaN;
+ispatch(   isinf(ispatch  )) = NaN;
+
+% set up the UserData data (here so not corrupted by log10's and such)
+ud = [start stop len baseangle tipangle wid page crossdir ends];
+
+% Set Page defaults
+%page = (~isnan(page))&(page);
+if isnan(page)
+  page = 0;
+end
+
+% Get axes limits, range, min; correct for aspect ratio and log scale
+axm       = zeros(3,narrows);
+axr       = zeros(3,narrows);
+axrev     = zeros(3,narrows);
+ap        = zeros(2,narrows);
+xyzlog    = zeros(3,narrows);
+limmin    = zeros(2,narrows);
+limrange  = zeros(2,narrows);
+oldaxlims = zeros(narrows,7);
+oneax = all(ax==ax(1));
+if (oneax),
+	T    = zeros(4,4);
+	invT = zeros(4,4);
+else,
+	T    = zeros(16,narrows);
+	invT = zeros(16,narrows);
+end;
+axnotdone = logical(ones(size(ax)));
+while (any(axnotdone)),
+	ii = min(find(axnotdone));
+	curax = ax(ii);
+	curpage = page(ii);
+	% get axes limits and aspect ratio
+	axl = [get(curax,'XLim'); get(curax,'YLim'); get(curax,'ZLim')];
+	oldaxlims(min(find(oldaxlims(:,1)==0)),:) = [curax reshape(axl',1,6)];
+	% get axes size in pixels (points)
+	u = get(curax,'Units');
+	axposoldunits = get(curax,'Position');
+	really_curpage = curpage & strcmp(u,'normalized');
+	if (really_curpage),
+		curfig = get(curax,'Parent');
+		pu = get(curfig,'PaperUnits');
+		set(curfig,'PaperUnits','points');
+		pp = get(curfig,'PaperPosition');
+		set(curfig,'PaperUnits',pu);
+		set(curax,'Units','pixels');
+		curapscreen = get(curax,'Position');
+		set(curax,'Units','normalized');
+		curap = pp.*get(curax,'Position');
+	else,
+		set(curax,'Units','pixels');
+		curapscreen = get(curax,'Position');
+		curap = curapscreen;
+	end;
+	set(curax,'Units',u);
+	set(curax,'Position',axposoldunits);
+	% handle non-stretched axes position
+	str_stretch = { 'DataAspectRatioMode'    ; ...
+	                'PlotBoxAspectRatioMode' ; ...
+	                'CameraViewAngleMode'      };
+	str_camera  = { 'CameraPositionMode'  ; ...
+	                'CameraTargetMode'    ; ...
+	                'CameraViewAngleMode' ; ...
+	                'CameraUpVectorMode'    };
+	notstretched = strcmp(get(curax,str_stretch),'manual');
+	manualcamera = strcmp(get(curax,str_camera),'manual');
+	if ~arrow_WarpToFill(notstretched,manualcamera,curax),
+		% give a warning that this has not been thoroughly tested
+		if 0 & ARROW_STRETCH_WARN,
+			ARROW_STRETCH_WARN = 0;
+			strs = {str_stretch{1:2},str_camera{:}};
+			strs = [char(ones(length(strs),1)*sprintf('\n    ')) char(strs)]';
+			warning([upper(mfilename) ' may not yet work quite right ' ...
+			         'if any of the following are ''manual'':' strs(:).']);
+		end;
+		% find the true pixel size of the actual axes
+		texttmp = text(axl(1,[1 2 2 1 1 2 2 1]), ...
+		               axl(2,[1 1 2 2 1 1 2 2]), ...
+		               axl(3,[1 1 1 1 2 2 2 2]),'');
+		set(texttmp,'Units','points');
+		textpos = get(texttmp,'Position');
+		delete(texttmp);
+		textpos = cat(1,textpos{:});
+		textpos = max(textpos(:,1:2)) - min(textpos(:,1:2));
+		% adjust the axes position
+		if (really_curpage),
+			% adjust to printed size
+			textpos = textpos * min(curap(3:4)./textpos);
+			curap = [curap(1:2)+(curap(3:4)-textpos)/2 textpos];
+		else,
+			% adjust for pixel roundoff
+			textpos = textpos * min(curapscreen(3:4)./textpos);
+			curap = [curap(1:2)+(curap(3:4)-textpos)/2 textpos];
+		end;
+	end;
+	if ARROW_PERSP_WARN & ~strcmp(get(curax,'Projection'),'orthographic'),
+		ARROW_PERSP_WARN = 0;
+		warning([upper(mfilename) ' does not yet work right for 3-D perspective projection.']);
+	end;
+	% adjust limits for log scale on axes
+	curxyzlog = [strcmp(get(curax,'XScale'),'log'); ...
+	             strcmp(get(curax,'YScale'),'log'); ...
+	             strcmp(get(curax,'ZScale'),'log')];
+	if (any(curxyzlog)),
+		ii = find([curxyzlog;curxyzlog]);
+		if (any(axl(ii)<=0)),
+			error([upper(mfilename) ' does not support non-positive limits on log-scaled axes.']);
+		else,
+			axl(ii) = log10(axl(ii));
+		end;
+	end;
+	% correct for 'reverse' direction on axes;
+	curreverse = [strcmp(get(curax,'XDir'),'reverse'); ...
+	              strcmp(get(curax,'YDir'),'reverse'); ...
+	              strcmp(get(curax,'ZDir'),'reverse')];
+	ii = find(curreverse);
+	if ~isempty(ii),
+		axl(ii,[1 2])=-axl(ii,[2 1]);
+	end;
+	% compute the range of 2-D values
+	curT = get(curax,'Xform');
+	lim = curT*[0 1 0 1 0 1 0 1;0 0 1 1 0 0 1 1;0 0 0 0 1 1 1 1;1 1 1 1 1 1 1 1];
+	lim = lim(1:2,:)./([1;1]*lim(4,:));
+	curlimmin = min(lim')';
+	curlimrange = max(lim')' - curlimmin;
+	curinvT = inv(curT);
+	if (~oneax),
+		curT = curT.';
+		curinvT = curinvT.';
+		curT = curT(:);
+		curinvT = curinvT(:);
+	end;
+	% check which arrows to which cur corresponds
+	ii = find((ax==curax)&(page==curpage));
+	oo = ones(1,length(ii));
+	axr(:,ii)      = diff(axl')' * oo;
+	axm(:,ii)      = axl(:,1)    * oo;
+	axrev(:,ii)    = curreverse  * oo;
+	ap(:,ii)       = curap(3:4)' * oo;
+	xyzlog(:,ii)   = curxyzlog   * oo;
+	limmin(:,ii)   = curlimmin   * oo;
+	limrange(:,ii) = curlimrange * oo;
+	if (oneax),
+		T    = curT;
+		invT = curinvT;
+	else,
+		T(:,ii)    = curT    * oo;
+		invT(:,ii) = curinvT * oo;
+	end;
+	axnotdone(ii) = zeros(1,length(ii));
+end;
+oldaxlims(oldaxlims(:,1)==0,:)=[];
+
+% correct for log scales
+curxyzlog = xyzlog.';
+ii = find(curxyzlog(:));
+if ~isempty(ii),
+	start(   ii) = real(log10(start(   ii)));
+	stop(    ii) = real(log10(stop(    ii)));
+	if (all(imag(crossdir)==0)), % pulled (ii) subscript on crossdir, 12/5/96 eaj
+		crossdir(ii) = real(log10(crossdir(ii)));
+	end;
+end;
+
+% correct for reverse directions
+ii = find(axrev.');
+if ~isempty(ii),
+	start(   ii) = -start(   ii);
+	stop(    ii) = -stop(    ii);
+	crossdir(ii) = -crossdir(ii);
+end;
+
+% transpose start/stop values
+start     = start.';
+stop      = stop.';
+
+% take care of defaults, page was done above
+ii=find(isnan(start(:)       ));  if ~isempty(ii),  start(ii)       = axm(ii)+axr(ii)/2;                end;
+ii=find(isnan(stop(:)        ));  if ~isempty(ii),  stop(ii)        = axm(ii)+axr(ii)/2;                end;
+ii=find(isnan(crossdir(:)    ));  if ~isempty(ii),  crossdir(ii)    = zeros(length(ii),1);              end;
+ii=find(isnan(len            ));  if ~isempty(ii),  len(ii)         = ones(length(ii),1)*deflen;        end;
+ii=find(isnan(baseangle      ));  if ~isempty(ii),  baseangle(ii)   = ones(length(ii),1)*defbaseangle;  end;
+ii=find(isnan(tipangle       ));  if ~isempty(ii),  tipangle(ii)    = ones(length(ii),1)*deftipangle;   end;
+ii=find(isnan(wid            ));  if ~isempty(ii),  wid(ii)         = ones(length(ii),1)*defwid;        end;
+ii=find(isnan(ends           ));  if ~isempty(ii),  ends(ii)        = ones(length(ii),1)*defends;       end;
+
+% transpose rest of values
+len       = len.';
+baseangle = baseangle.';
+tipangle  = tipangle.';
+wid       = wid.';
+page      = page.';
+crossdir  = crossdir.';
+ends      = ends.';
+ax        = ax.';
+
+% given x, a 3xN matrix of points in 3-space;
+% want to convert to X, the corresponding 4xN 2-space matrix
+%
+%   tmp1=[(x-axm)./axr; ones(1,size(x,1))];
+%   if (oneax), X=T*tmp1;
+%   else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=T.*tmp1;
+%         tmp2=zeros(4,4*N); tmp2(:)=tmp1(:);
+%         X=zeros(4,N); X(:)=sum(tmp2)'; end;
+%   X = X ./ (ones(4,1)*X(4,:));
+
+% for all points with start==stop, start=stop-(verysmallvalue)*(up-direction);
+ii = find(all(start==stop));
+if ~isempty(ii),
+	% find an arrowdir vertical on screen and perpendicular to viewer
+	%	transform to 2-D
+		tmp1 = [(stop(:,ii)-axm(:,ii))./axr(:,ii);ones(1,length(ii))];
+		if (oneax), twoD=T*tmp1;
+		else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=T(:,ii).*tmp1;
+		      tmp2=zeros(4,4*length(ii)); tmp2(:)=tmp1(:);
+		      twoD=zeros(4,length(ii)); twoD(:)=sum(tmp2)'; end;
+		twoD=twoD./(ones(4,1)*twoD(4,:));
+	%	move the start point down just slightly
+		tmp1 = twoD + [0;-1/1000;0;0]*(limrange(2,ii)./ap(2,ii));
+	%	transform back to 3-D
+		if (oneax), threeD=invT*tmp1;
+		else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=invT(:,ii).*tmp1;
+		      tmp2=zeros(4,4*length(ii)); tmp2(:)=tmp1(:);
+		      threeD=zeros(4,length(ii)); threeD(:)=sum(tmp2)'; end;
+		start(:,ii) = (threeD(1:3,:)./(ones(3,1)*threeD(4,:))).*axr(:,ii)+axm(:,ii);
+end;
+
+% compute along-arrow points
+%	transform Start points
+	tmp1=[(start-axm)./axr;ones(1,narrows)];
+	if (oneax), X0=T*tmp1;
+	else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=T.*tmp1;
+	      tmp2=zeros(4,4*narrows); tmp2(:)=tmp1(:);
+	      X0=zeros(4,narrows); X0(:)=sum(tmp2)'; end;
+	X0=X0./(ones(4,1)*X0(4,:));
+%	transform Stop points
+	tmp1=[(stop-axm)./axr;ones(1,narrows)];
+	if (oneax), Xf=T*tmp1;
+	else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=T.*tmp1;
+	      tmp2=zeros(4,4*narrows); tmp2(:)=tmp1(:);
+	      Xf=zeros(4,narrows); Xf(:)=sum(tmp2)'; end;
+	Xf=Xf./(ones(4,1)*Xf(4,:));
+%	compute pixel distance between points
+	D = sqrt(sum(((Xf(1:2,:)-X0(1:2,:)).*(ap./limrange)).^2));
+%	compute and modify along-arrow distances
+	len1 = len;
+	len2 = len - (len.*tan(tipangle/180*pi)-wid/2).*tan((90-baseangle)/180*pi);
+	slen0 = zeros(1,narrows);
+	slen1 = len1 .* ((ends==2)|(ends==3));
+	slen2 = len2 .* ((ends==2)|(ends==3));
+	len0 = zeros(1,narrows);
+	len1  = len1 .* ((ends==1)|(ends==3));
+	len2  = len2 .* ((ends==1)|(ends==3));
+	%	for no start arrowhead
+		ii=find((ends==1)&(D<len2));
+		if ~isempty(ii),
+			slen0(ii) = D(ii)-len2(ii);
+		end;
+	%	for no end arrowhead
+		ii=find((ends==2)&(D<slen2));
+		if ~isempty(ii),
+			len0(ii) = D(ii)-slen2(ii);
+		end;
+	len1  = len1  + len0;
+	len2  = len2  + len0;
+	slen1 = slen1 + slen0;
+	slen2 = slen2 + slen0;
+ 	% note:  the division by D below will probably not be accurate if both
+ 	%        of the following are true:
+ 	%           1. the ratio of the line length to the arrowhead
+ 	%              length is large
+ 	%           2. the view is highly perspective.
+%	compute stoppoints
+	tmp1=X0.*(ones(4,1)*(len0./D))+Xf.*(ones(4,1)*(1-len0./D));
+	if (oneax), tmp3=invT*tmp1;
+	else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=invT.*tmp1;
+	      tmp2=zeros(4,4*narrows); tmp2(:)=tmp1(:);
+	      tmp3=zeros(4,narrows); tmp3(:)=sum(tmp2)'; end;
+	stoppoint = tmp3(1:3,:)./(ones(3,1)*tmp3(4,:)).*axr+axm;
+%	compute tippoints
+	tmp1=X0.*(ones(4,1)*(len1./D))+Xf.*(ones(4,1)*(1-len1./D));
+	if (oneax), tmp3=invT*tmp1;
+	else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=invT.*tmp1;
+	      tmp2=zeros(4,4*narrows); tmp2(:)=tmp1(:);
+	      tmp3=zeros(4,narrows); tmp3(:)=sum(tmp2)'; end;
+	tippoint = tmp3(1:3,:)./(ones(3,1)*tmp3(4,:)).*axr+axm;
+%	compute basepoints
+	tmp1=X0.*(ones(4,1)*(len2./D))+Xf.*(ones(4,1)*(1-len2./D));
+	if (oneax), tmp3=invT*tmp1;
+	else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=invT.*tmp1;
+	      tmp2=zeros(4,4*narrows); tmp2(:)=tmp1(:);
+	      tmp3=zeros(4,narrows); tmp3(:)=sum(tmp2)'; end;
+	basepoint = tmp3(1:3,:)./(ones(3,1)*tmp3(4,:)).*axr+axm;
+%	compute startpoints
+	tmp1=X0.*(ones(4,1)*(1-slen0./D))+Xf.*(ones(4,1)*(slen0./D));
+	if (oneax), tmp3=invT*tmp1;
+	else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=invT.*tmp1;
+	      tmp2=zeros(4,4*narrows); tmp2(:)=tmp1(:);
+	      tmp3=zeros(4,narrows); tmp3(:)=sum(tmp2)'; end;
+	startpoint = tmp3(1:3,:)./(ones(3,1)*tmp3(4,:)).*axr+axm;
+%	compute stippoints
+	tmp1=X0.*(ones(4,1)*(1-slen1./D))+Xf.*(ones(4,1)*(slen1./D));
+	if (oneax), tmp3=invT*tmp1;
+	else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=invT.*tmp1;
+	      tmp2=zeros(4,4*narrows); tmp2(:)=tmp1(:);
+	      tmp3=zeros(4,narrows); tmp3(:)=sum(tmp2)'; end;
+	stippoint = tmp3(1:3,:)./(ones(3,1)*tmp3(4,:)).*axr+axm;
+%	compute sbasepoints
+	tmp1=X0.*(ones(4,1)*(1-slen2./D))+Xf.*(ones(4,1)*(slen2./D));
+	if (oneax), tmp3=invT*tmp1;
+	else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=invT.*tmp1;
+	      tmp2=zeros(4,4*narrows); tmp2(:)=tmp1(:);
+	      tmp3=zeros(4,narrows); tmp3(:)=sum(tmp2)'; end;
+	sbasepoint = tmp3(1:3,:)./(ones(3,1)*tmp3(4,:)).*axr+axm;
+
+% compute cross-arrow directions for arrows with NormalDir specified
+if (any(imag(crossdir(:))~=0)),
+	ii = find(any(imag(crossdir)~=0));
+	crossdir(:,ii) = cross((stop(:,ii)-start(:,ii))./axr(:,ii), ...
+	                       imag(crossdir(:,ii))).*axr(:,ii);
+end;
+
+% compute cross-arrow directions
+basecross  = crossdir + basepoint;
+tipcross   = crossdir + tippoint;
+sbasecross = crossdir + sbasepoint;
+stipcross  = crossdir + stippoint;
+ii = find(all(crossdir==0)|any(isnan(crossdir)));
+if ~isempty(ii),
+	numii = length(ii);
+	%	transform start points
+		tmp1 = [basepoint(:,ii) tippoint(:,ii) sbasepoint(:,ii) stippoint(:,ii)];
+		tmp1 = (tmp1-axm(:,[ii ii ii ii])) ./ axr(:,[ii ii ii ii]);
+		tmp1 = [tmp1; ones(1,4*numii)];
+		if (oneax), X0=T*tmp1;
+		else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=T(:,[ii ii ii ii]).*tmp1;
+		      tmp2=zeros(4,16*numii); tmp2(:)=tmp1(:);
+		      X0=zeros(4,4*numii); X0(:)=sum(tmp2)'; end;
+		X0=X0./(ones(4,1)*X0(4,:));
+	%	transform stop points
+		tmp1 = [(2*stop(:,ii)-start(:,ii)-axm(:,ii))./axr(:,ii);ones(1,numii)];
+		tmp1 = [tmp1 tmp1 tmp1 tmp1];
+		if (oneax), Xf=T*tmp1;
+		else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=T(:,[ii ii ii ii]).*tmp1;
+		      tmp2=zeros(4,16*numii); tmp2(:)=tmp1(:);
+		      Xf=zeros(4,4*numii); Xf(:)=sum(tmp2)'; end;
+		Xf=Xf./(ones(4,1)*Xf(4,:));
+	%	compute perpendicular directions
+		pixfact = ((limrange(1,ii)./limrange(2,ii)).*(ap(2,ii)./ap(1,ii))).^2;
+		pixfact = [pixfact pixfact pixfact pixfact];
+		pixfact = [pixfact;1./pixfact];
+		[dummyval,jj] = max(abs(Xf(1:2,:)-X0(1:2,:)));
+		jj1 = ((1:4)'*ones(1,length(jj))==ones(4,1)*jj);
+		jj2 = ((1:4)'*ones(1,length(jj))==ones(4,1)*(3-jj));
+		jj3 = jj1(1:2,:);
+		Xp = X0;
+		Xp(jj2) = X0(jj2) + ones(sum(jj2(:)),1);
+		Xp(jj1) = X0(jj1) - (Xf(jj2)-X0(jj2))./(Xf(jj1)-X0(jj1)) .* pixfact(jj3);
+	%	inverse transform the cross points
+		if (oneax), Xp=invT*Xp;
+		else, tmp1=[Xp;Xp;Xp;Xp]; tmp1=invT(:,[ii ii ii ii]).*tmp1;
+		      tmp2=zeros(4,16*numii); tmp2(:)=tmp1(:);
+		      Xp=zeros(4,4*numii); Xp(:)=sum(tmp2)'; end;
+		Xp=(Xp(1:3,:)./(ones(3,1)*Xp(4,:))).*axr(:,[ii ii ii ii])+axm(:,[ii ii ii ii]);
+		basecross(:,ii)  = Xp(:,0*numii+(1:numii));
+		tipcross(:,ii)   = Xp(:,1*numii+(1:numii));
+		sbasecross(:,ii) = Xp(:,2*numii+(1:numii));
+		stipcross(:,ii)  = Xp(:,3*numii+(1:numii));
+end;
+
+% compute all points
+%	compute start points
+	axm11 = [axm axm axm axm axm axm axm axm axm axm axm];
+	axr11 = [axr axr axr axr axr axr axr axr axr axr axr];
+	st = [stoppoint tippoint basepoint sbasepoint stippoint startpoint stippoint sbasepoint basepoint tippoint stoppoint];
+	tmp1 = (st - axm11) ./ axr11;
+	tmp1 = [tmp1; ones(1,size(tmp1,2))];
+	if (oneax), X0=T*tmp1;
+	else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=[T T T T T T T T T T T].*tmp1;
+	      tmp2=zeros(4,44*narrows); tmp2(:)=tmp1(:);
+	      X0=zeros(4,11*narrows); X0(:)=sum(tmp2)'; end;
+	X0=X0./(ones(4,1)*X0(4,:));
+%	compute stop points
+	tmp1 = ([start tipcross basecross sbasecross stipcross stop stipcross sbasecross basecross tipcross start] ...
+	     - axm11) ./ axr11;
+	tmp1 = [tmp1; ones(1,size(tmp1,2))];
+	if (oneax), Xf=T*tmp1;
+	else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=[T T T T T T T T T T T].*tmp1;
+	      tmp2=zeros(4,44*narrows); tmp2(:)=tmp1(:);
+	      Xf=zeros(4,11*narrows); Xf(:)=sum(tmp2)'; end;
+	Xf=Xf./(ones(4,1)*Xf(4,:));
+%	compute lengths
+	len0  = len.*((ends==1)|(ends==3)).*tan(tipangle/180*pi);
+	slen0 = len.*((ends==2)|(ends==3)).*tan(tipangle/180*pi);
+	le = [zeros(1,narrows) len0 wid/2 wid/2 slen0 zeros(1,narrows) -slen0 -wid/2 -wid/2 -len0 zeros(1,narrows)];
+	aprange = ap./limrange;
+	aprange = [aprange aprange aprange aprange aprange aprange aprange aprange aprange aprange aprange];
+	D = sqrt(sum(((Xf(1:2,:)-X0(1:2,:)).*aprange).^2));
+	Dii=find(D==0); if ~isempty(Dii), D=D+(D==0); le(Dii)=zeros(1,length(Dii)); end; %should fix DivideByZero warnings
+	tmp1 = X0.*(ones(4,1)*(1-le./D)) + Xf.*(ones(4,1)*(le./D));
+%	inverse transform
+	if (oneax), tmp3=invT*tmp1;
+	else, tmp1=[tmp1;tmp1;tmp1;tmp1]; tmp1=[invT invT invT invT invT invT invT invT invT invT invT].*tmp1;
+	      tmp2=zeros(4,44*narrows); tmp2(:)=tmp1(:);
+	      tmp3=zeros(4,11*narrows); tmp3(:)=sum(tmp2)'; end;
+	pts = tmp3(1:3,:)./(ones(3,1)*tmp3(4,:)) .* axr11 + axm11;
+
+% correct for ones where the crossdir was specified
+ii = find(~(all(crossdir==0)|any(isnan(crossdir))));
+if ~isempty(ii),
+	D1 = [pts(:,1*narrows+ii)-pts(:,9*narrows+ii) ...
+	      pts(:,2*narrows+ii)-pts(:,8*narrows+ii) ...
+	      pts(:,3*narrows+ii)-pts(:,7*narrows+ii) ...
+	      pts(:,4*narrows+ii)-pts(:,6*narrows+ii) ...
+	      pts(:,6*narrows+ii)-pts(:,4*narrows+ii) ...
+	      pts(:,7*narrows+ii)-pts(:,3*narrows+ii) ...
+	      pts(:,8*narrows+ii)-pts(:,2*narrows+ii) ...
+	      pts(:,9*narrows+ii)-pts(:,1*narrows+ii)]/2;
+	ii = ii'*ones(1,8) + ones(length(ii),1)*[1:4 6:9]*narrows;
+	ii = ii(:)';
+	pts(:,ii) = st(:,ii) + D1;
+end;
+
+
+% readjust for reverse directions
+iicols=(1:narrows)'; iicols=iicols(:,ones(1,11)); iicols=iicols(:).';
+tmp1=axrev(:,iicols);
+ii = find(tmp1(:)); if ~isempty(ii), pts(ii)=-pts(ii); end;
+
+% readjust for log scale on axes
+tmp1=xyzlog(:,iicols);
+ii = find(tmp1(:)); if ~isempty(ii), pts(ii)=10.^pts(ii); end;
+
+% compute the x,y,z coordinates of the patches;
+ii = narrows*(0:10)'*ones(1,narrows) + ones(11,1)*(1:narrows);
+ii = ii(:)';
+x = zeros(11,narrows);
+y = zeros(11,narrows);
+z = zeros(11,narrows);
+x(:) = pts(1,ii)';
+y(:) = pts(2,ii)';
+z(:) = pts(3,ii)';
+
+% do the output
+if (nargout<=1)
+  %	% create or modify the patches
+  if isnan(ispatch), ispatch =0; end
+	newpatch = ispatch & (isempty(oldh)|~strcmp(get(oldh,'Type'),'patch'));
+	newline = ~ispatch & (isempty(oldh)|~strcmp(get(oldh,'Type'),'line'));
+	if isempty(oldh), H=zeros(narrows,1); else, H=oldh; end;
+%	% make or modify the arrows
+	for k=1:narrows,
+		if all(isnan(ud(k,[3 6])))&arrow_is2DXY(ax(k)), zz=[]; else, zz=z(:,k); end;
+		xyz = {'XData',x(:,k),'YData',y(:,k),'ZData',zz,'Tag',ArrowTag};
+		if newpatch(k)|newline(k),
+			if newpatch(k),
+				H(k) = patch(xyz{:});
+			else,
+				H(k) = line(xyz{:});
+			end;
+			if ~isempty(oldh), arrow_copyprops(oldh(k),H(k)); end;
+		else,
+			if ispatch(k), xyz={xyz{:},'CData',[]}; end;
+			set(H(k),xyz{:});
+		end;
+	end;
+	if ~isempty(oldh), delete(oldh(oldh~=H)); end;
+%	% additional properties
+	set(H,'Clipping','off');
+	set(H,{'UserData'},num2cell(ud,2));
+	if (length(extraprops)>0), set(H,extraprops{:}); end;
+	% handle choosing arrow Start and/or Stop locations if unspecified
+	[H,oldaxlims,errstr] = arrow_clicks(H,ud,x,y,z,ax,oldaxlims);
+	if ~isempty(errstr), error([upper(mfilename) ' got ' errstr]); end;
+	% set the output
+	if (nargout>0), h=H; end;
+	% make sure the axis limits did not change
+	if isempty(oldaxlims),
+		ARROW_AXLIMITS = [];
+	else,
+		lims = get(oldaxlims(:,1),{'XLim','YLim','ZLim'})';
+		lims = reshape(cat(2,lims{:}),6,size(lims,2));
+		%mask = arrow_is2DXY(oldaxlims(:,1));
+		%oldaxlims(mask,6:7) = lims(5:6,mask)';
+		ARROW_AXLIMITS = oldaxlims(find(any(oldaxlims(:,2:7)'~=lims)),:);
+		if ~isempty(ARROW_AXLIMITS),
+			warning(arrow_warnlimits(ARROW_AXLIMITS,narrows));
+		end;
+	end;
+else,
+	% don't create the patch, just return the data
+	h=x;
+	yy=y;
+	zz=z;
+end;
+
+
+
+function out = arrow_defcheck(in,def,prop)
+% check if we got 'default' values
+	out = in;
+	if ~isstr(in), return; end;
+	if size(in,1)==1 & strncmp(lower(in),'def',3),
+		out = def;
+	elseif ~isempty(prop),
+		error([upper(mfilename) ' does not recognize ''' in(:)' ''' as a valid ''' prop ''' string.']);
+	end;
+
+
+
+function [H,oldaxlims,errstr] = arrow_clicks(H,ud,x,y,z,ax,oldaxlims)
+% handle choosing arrow Start and/or Stop locations if necessary
+	errstr = '';
+	if isempty(H)|isempty(ud)|isempty(x), return; end;
+	% determine which (if any) need Start and/or Stop
+	needStart = all(isnan(ud(:,1:3)'))';
+	needStop  = all(isnan(ud(:,4:6)'))';
+	mask = any(needStart|needStop);
+	if ~any(mask), return; end;
+	ud(~mask,:)=[]; ax(:,~mask)=[];
+	x(:,~mask)=[]; y(:,~mask)=[]; z(:,~mask)=[];
+	% make them invisible for the time being
+	set(H,'Visible','off');
+	% save the current axes and limits modes; set to manual for the time being
+	oldAx  = gca;
+	limModes=get(ax(:),{'XLimMode','YLimMode','ZLimMode'});
+	set(ax(:),{'XLimMode','YLimMode','ZLimMode'},{'manual','manual','manual'});
+	% loop over each arrow that requires attention
+	jj = find(mask);
+	for ii=1:length(jj),
+		h = H(jj(ii));
+		axes(ax(ii));
+		% figure out correct call
+		if needStart(ii), prop='Start'; else, prop='Stop'; end;
+		[wasInterrupted,errstr] = arrow_click(needStart(ii)&needStop(ii),h,prop,ax(ii));
+		% handle errors and control-C
+		if wasInterrupted,
+			delete(H(jj(ii:end)));
+			H(jj(ii:end))=[];
+			oldaxlims(jj(ii:end),:)=[];
+			break;
+		end;
+	end;
+	% restore the axes and limit modes
+	axes(oldAx);
+	set(ax(:),{'XLimMode','YLimMode','ZLimMode'},limModes);
+
+function [wasInterrupted,errstr] = arrow_click(lockStart,H,prop,ax)
+% handle the clicks for one arrow
+	fig = get(ax,'Parent');
+	% save some things
+	oldFigProps = {'Pointer','WindowButtonMotionFcn','WindowButtonUpFcn'};
+	oldFigValue = get(fig,oldFigProps);
+	oldArrowProps = {'EraseMode'};
+	oldArrowValue = get(H,oldArrowProps);
+	set(H,'EraseMode','background'); %because 'xor' makes shaft invisible unless Width>1
+	global ARROW_CLICK_H ARROW_CLICK_PROP ARROW_CLICK_AX ARROW_CLICK_USE_Z
+	ARROW_CLICK_H=H; ARROW_CLICK_PROP=prop; ARROW_CLICK_AX=ax;
+	ARROW_CLICK_USE_Z=~arrow_is2DXY(ax)|~arrow_planarkids(ax);
+	set(fig,'Pointer','crosshair');
+	% set up the WindowButtonMotion so we can see the arrow while moving around
+	set(fig,'WindowButtonUpFcn','set(gcf,''WindowButtonUpFcn'','''')', ...
+	        'WindowButtonMotionFcn','');
+	if ~lockStart,
+		set(H,'Visible','on');
+		set(fig,'WindowButtonMotionFcn',[mfilename '(''callback'',''motion'');']);
+	end;
+	% wait for the button to be pressed
+	[wasKeyPress,wasInterrupted,errstr] = arrow_wfbdown(fig);
+	% if we wanted to click-drag, set the Start point
+	if lockStart & ~wasInterrupted,
+		pt = arrow_point(ARROW_CLICK_AX,ARROW_CLICK_USE_Z);
+		feval(mfilename,H,'Start',pt,'Stop',pt);
+		set(H,'Visible','on');
+		ARROW_CLICK_PROP='Stop';
+		set(fig,'WindowButtonMotionFcn',[mfilename '(''callback'',''motion'');']);
+		% wait for the mouse button to be released
+		eval('waitfor(fig,''WindowButtonUpFcn'','''');','wasInterrupted=1;');
+		if wasInterrupted, errstr=lasterr; end;
+	end;
+	if ~wasInterrupted, feval(mfilename,'callback','motion'); end;
+	% restore some things
+	set(gcf,oldFigProps,oldFigValue);
+	set(H,oldArrowProps,oldArrowValue);
+
+function arrow_callback(varargin)
+% handle redrawing callbacks
+	if nargin==0, return; end;
+	str = varargin{1};
+	if ~isstr(str), error([upper(mfilename) ' got an invalid Callback command.']); end;
+	s = lower(str);
+	if strcmp(s,'motion'),
+		% motion callback
+		global ARROW_CLICK_H ARROW_CLICK_PROP ARROW_CLICK_AX ARROW_CLICK_USE_Z
+		feval(mfilename,ARROW_CLICK_H,ARROW_CLICK_PROP,arrow_point(ARROW_CLICK_AX,ARROW_CLICK_USE_Z));
+		drawnow;
+	else,
+		error([upper(mfilename) ' does not recognize ''' str(:).' ''' as a valid Callback option.']);
+	end;
+
+function out = arrow_point(ax,use_z)
+% return the point on the given axes
+	if nargin==0, ax=gca; end;
+	if nargin<2, use_z=~arrow_is2DXY(ax)|~arrow_planarkids(ax); end;
+	out = get(ax,'CurrentPoint');
+	out = out(1,:);
+	if ~use_z, out=out(1:2); end;
+
+function [wasKeyPress,wasInterrupted,errstr] = arrow_wfbdown(fig)
+% wait for button down ignoring object ButtonDownFcn's
+	if nargin==0, fig=gcf; end;
+	errstr = '';
+	% save ButtonDownFcn values
+	objs = findobj(fig);
+	buttonDownFcns = get(objs,'ButtonDownFcn');
+	mask=~strcmp(buttonDownFcns,''); objs=objs(mask); buttonDownFcns=buttonDownFcns(mask);
+	set(objs,'ButtonDownFcn','');
+	% save other figure values
+	figProps = {'KeyPressFcn','WindowButtonDownFcn'};
+	figValue = get(fig,figProps);
+	% do the real work
+	set(fig,'KeyPressFcn','set(gcf,''KeyPressFcn'','''',''WindowButtonDownFcn'','''');', ...
+	        'WindowButtonDownFcn','set(gcf,''WindowButtonDownFcn'','''')');
+	lasterr('');
+	wasInterrupted=0; eval('waitfor(fig,''WindowButtonDownFcn'','''');','wasInterrupted=1;');
+	wasKeyPress = ~wasInterrupted & strcmp(get(fig,'KeyPressFcn'),'');
+	if wasInterrupted, errstr=lasterr; end;
+	% restore ButtonDownFcn and other figure values
+	set(objs,'ButtonDownFcn',buttonDownFcns);
+	set(fig,figProps,figValue);
+
+
+
+function [out,is2D] = arrow_is2DXY(ax)
+% check if axes are 2-D X-Y plots
+	% may not work for modified camera angles, etc.
+	out = zeros(size(ax)); % 2-D X-Y plots
+	is2D = out;            % any 2-D plots
+	views = get(ax(:),{'View'});
+	views = cat(1,views{:});
+	out(:) = abs(views(:,2))==90;
+	is2D(:) = out(:) | all(rem(views',90)==0)';
+
+function out = arrow_planarkids(ax)
+% check if axes descendents all have empty ZData (lines,patches,surfaces)
+	out = logical(ones(size(ax)));
+	allkids = get(ax(:),{'Children'});
+	for k=1:length(allkids),
+		kids = get([findobj(allkids{k},'flat','Type','line')
+		            findobj(allkids{k},'flat','Type','patch')
+		            findobj(allkids{k},'flat','Type','surface')],{'ZData'});
+		for j=1:length(kids),
+			if ~isempty(kids{j}), out(k)=logical(0); break; end;
+		end;
+	end;
+
+
+
+function arrow_fixlimits(axlimits)
+% reset the axis limits as necessary
+	if isempty(axlimits), disp([upper(mfilename) ' does not remember any axis limits to reset.']); end;
+	for k=1:size(axlimits,1),
+		if any(get(axlimits(k,1),'XLim')~=axlimits(k,2:3)), set(axlimits(k,1),'XLim',axlimits(k,2:3)); end;
+		if any(get(axlimits(k,1),'YLim')~=axlimits(k,4:5)), set(axlimits(k,1),'YLim',axlimits(k,4:5)); end;
+		if any(get(axlimits(k,1),'ZLim')~=axlimits(k,6:7)), set(axlimits(k,1),'ZLim',axlimits(k,6:7)); end;
+	end;
+
+
+
+function out = arrow_WarpToFill(notstretched,manualcamera,curax)
+% check if we are in "WarpToFill" mode.
+	out = strcmp(get(curax,'WarpToFill'),'on');
+	% 'WarpToFill' is undocumented, so may need to replace this by
+	% out = ~( any(notstretched) & any(manualcamera) );
+
+
+
+function out = arrow_warnlimits(axlimits,narrows)
+% create a warning message if we've changed the axis limits
+	msg = '';
+	switch (size(axlimits,1)==1)
+		case 1, msg='';
+		case 2, msg='on two axes ';
+		otherwise, msg='on several axes ';
+	end;
+	msg = [upper(mfilename) ' changed the axis limits ' msg ...
+	       'when adding the arrow'];
+	if (narrows>1), msg=[msg 's']; end;
+	out = [msg '.' sprintf('\n') '         Call ' upper(mfilename) ...
+	       ' FIXLIMITS to reset them now.'];
+
+
+
+function arrow_copyprops(fm,to)
+% copy line properties to patches
+	props  = {'EraseMode','LineStyle','LineWidth','Marker','MarkerSize',...
+	          'MarkerEdgeColor','MarkerFaceColor','ButtonDownFcn',      ...
+	          'Clipping','DeleteFcn','BusyAction','HandleVisibility',   ...
+	          'Selected','SelectionHighlight','Visible'};
+	lineprops  = {'Color',    props{:}};
+	patchprops = {'EdgeColor',props{:}};
+	patch2props = {'FaceColor',patchprops{:}};
+	fmpatch = strcmp(get(fm,'Type'),'patch');
+	topatch = strcmp(get(to,'Type'),'patch');
+	set(to( fmpatch& topatch),patch2props,get(fm( fmpatch& topatch),patch2props)); %p->p
+	set(to(~fmpatch&~topatch),lineprops,  get(fm(~fmpatch&~topatch),lineprops  )); %l->l
+	set(to( fmpatch&~topatch),lineprops,  get(fm( fmpatch&~topatch),patchprops )); %p->l
+	set(to(~fmpatch& topatch),patchprops, get(fm(~fmpatch& topatch),lineprops)  ,'FaceColor','none'); %l->p
+
+
+
+function arrow_props
+% display further help info about ARROW properties
+	c = sprintf('\n');
+	disp([c ...
+	'ARROW Properties:  Default values are given in [square brackets], and other' c ...
+	'                   acceptable equivalent property names are in (parenthesis).' c c ...
+	'  Start           The starting points. For N arrows,            B' c ...
+	'                  this should be a Nx2 or Nx3 matrix.          /|\           ^' c ...
+	'  Stop            The end points. For N arrows, this          /|||\          |' c ...
+	'                  should be a Nx2 or Nx3 matrix.             //|||\\        L|' c ...
+	'  Length          Length of the arrowhead (in pixels on     ///|||\\\       e|' c ...
+	'                  screen, points on a page). [16] (Len)    ////|||\\\\      n|' c ...
+	'  BaseAngle       Angle (degrees) of the base angle       /////|D|\\\\\     g|' c ...
+	'                  ADE.  For a simple stick arrow, use    ////  |||  \\\\    t|' c ...
+	'                  BaseAngle=TipAngle. [90] (Base)       ///    |||    \\\   h|' c ...
+	'  TipAngle        Angle (degrees) of tip angle ABC.    //<----->||      \\   |' c ...
+	'                  [16] (Tip)                          /   base |||        \  V' c ...
+	'  Width           Width of the base in pixels.  Not  E   angle ||<-------->C' c ...
+	'                  the ''LineWidth'' prop. [0] (Wid)            |||tipangle' c ...
+	'  Page            If provided, non-empty, and not NaN,         |||' c ...
+	'                  this causes ARROW to use hardcopy            |||' c ...
+	'                  rather than onscreen proportions.             A' c ...
+	'                  This is important if screen aspect        -->   <-- width' c ...
+	'                  ratio and hardcopy aspect ratio are    ----CrossDir---->' c ...
+	'                  vastly different. []' c...
+	'  CrossDir        A vector giving the direction towards which the fletches' c ...
+	'                  on the arrow should go.  [computed such that it is perpen-' c ...
+	'                  dicular to both the arrow direction and the view direction' c ...
+	'                  (i.e., as if it was pasted on a normal 2-D graph)]  (Note' c ...
+	'                  that CrossDir is a vector.  Also note that if an axis is' c ...
+	'                  plotted on a log scale, then the corresponding component' c ...
+	'                  of CrossDir must also be set appropriately, i.e., to 1 for' c ...
+	'                  no change in that direction, >1 for a positive change, >0' c ...
+	'                  and <1 for negative change.)' c ...
+	'  NormalDir       A vector normal to the fletch direction (CrossDir is then' c ...
+	'                  computed by the vector cross product [Line]x[NormalDir]). []' c ...
+	'                  (Note that NormalDir is a vector.  Unlike CrossDir,' c ...
+	'                  NormalDir is used as is regardless of log-scaled axes.)' c ...
+	'  Ends            Set which end has an arrowhead.  Valid values are ''none'',' c ...
+	'                  ''stop'', ''start'', and ''both''. [''stop''] (End)' c...
+	'  ObjectHandles   Vector of handles to previously-created arrows to be' c ...
+	'                  updated or line objects to be converted to arrows.' c ...
+	'                  [] (Object,Handle)' c ]);
+
+
+
+function out = arrow_demo
+ 	% demo
+	% create the data
+	[x,y,z] = peaks;
+	[ddd,out.iii]=max(z(:));
+	out.axlim = [min(x(:)) max(x(:)) min(y(:)) max(y(:)) min(z(:)) max(z(:))];
+	
+	% modify it by inserting some NaN's
+	[m,n] = size(z);
+	m = floor(m/2);
+	n = floor(n/2);
+	z(1:m,1:n) = NaN*ones(m,n);
+	
+	% graph it
+	clf('reset');
+	out.hs=surf(x,y,z);
+	out.x=x; out.y=y; out.z=z;
+	xlabel('x'); ylabel('y');
+			
+function h = arrow_demo3(in)
+	% set the view
+	axlim = in.axlim;
+	axis(axlim);
+	zlabel('z');
+	%set(in.hs,'FaceColor','interp');
+	view(viewmtx(-37.5,30,20));
+	title(['Demo of the capabilities of the ARROW function in 3-D']);
+	
+	% Normal blue arrow
+	h1 = feval(mfilename,[axlim(1) axlim(4) 4],[-.8 1.2 4], ...
+	           'EdgeColor','b','FaceColor','b');
+	
+	% Normal white arrow, clipped by the surface
+	h2 = feval(mfilename,axlim([1 4 6]),[0 2 4]);
+	t=text(-2.4,2.7,7.7,'arrow clipped by surf');
+	
+	% Baseangle<90
+	h3 = feval(mfilename,[3 .125 3.5],[1.375 0.125 3.5],30,50);
+	t2=text(3.1,.125,3.5,'local maximum');
+	
+	% Baseangle<90, fill and edge colors different
+	h4 = feval(mfilename,axlim(1:2:5)*.5,[0 0 0],36,60,25, ...
+	           'EdgeColor','b','FaceColor','c');
+	t3=text(axlim(1)*.5,axlim(3)*.5,axlim(5)*.5-.75,'origin');
+	set(t3,'HorizontalAlignment','center');
+	
+	% Baseangle>90, black fill
+	h5 = feval(mfilename,[-2.9 2.9 3],[-1.3 .4 3.2],30,120,[],6, ...
+	           'EdgeColor','r','FaceColor','k','LineWidth',2);
+	
+	% Baseangle>90, no fill
+	h6 = feval(mfilename,[-2.9 2.9 1.3],[-1.3 .4 1.5],30,120,[],6, ...
+	           'EdgeColor','r','FaceColor','none','LineWidth',2);
+	
+	% Stick arrow
+	h7 = feval(mfilename,[-1.6 -1.65 -6.5],[0 -1.65 -6.5],[],16,16);
+	t4=text(-1.5,-1.65,-7.25,'global mininum');
+	set(t4,'HorizontalAlignment','center');
+	
+	% Normal, black fill
+	h8 = feval(mfilename,[-1.4 0 -7.2],[-1.4 0 -3],'FaceColor','k');
+	t5=text(-1.5,0,-7.75,'local minimum');
+	set(t5,'HorizontalAlignment','center');
+	
+	% Gray fill, crossdir specified, 'LineStyle' --
+	h9 = feval(mfilename,[-3 2.2 -6],[-3 2.2 -.05],36,[],27,6,[],[0 -1 0], ...
+	           'EdgeColor','k','FaceColor',.75*[1 1 1],'LineStyle','--');
+	
+	% a series of normal arrows, linearly spaced, crossdir specified
+	h10y=(0:4)'/3;
+	h10 = feval(mfilename,[-3*ones(size(h10y)) h10y -6.5*ones(size(h10y))], ...
+	            [-3*ones(size(h10y)) h10y -.05*ones(size(h10y))], ...
+	            12,[],[],[],[],[0 -1 0]);
+	
+	% a series of normal arrows, linearly spaced
+	h11x=(1:.33:2.8)';
+	h11 = feval(mfilename,[h11x -3*ones(size(h11x)) 6.5*ones(size(h11x))], ...
+	            [h11x -3*ones(size(h11x)) -.05*ones(size(h11x))]);
+	
+	% series of magenta arrows, radially oriented, crossdir specified
+	h12x=2; h12y=-3; h12z=axlim(5)/2; h12xr=1; h12zr=h12z; ir=.15;or=.81;
+	h12t=(0:11)'/6*pi;
+	h12 = feval(mfilename,                                           ...
+	            [h12x+h12xr*cos(h12t)*ir h12y*ones(size(h12t))       ...
+	             h12z+h12zr*sin(h12t)*ir],[h12x+h12xr*cos(h12t)*or   ...
+	             h12y*ones(size(h12t)) h12z+h12zr*sin(h12t)*or],     ...
+	            10,[],[],[],[],                                      ...
+	            [-h12xr*sin(h12t) zeros(size(h12t)) h12zr*cos(h12t)],...
+	            'FaceColor','none','EdgeColor','m');
+	
+	% series of normal arrows, tangentially oriented, crossdir specified
+	or13=.91; h13t=(0:.5:12)'/6*pi;
+	locs = [h12x+h12xr*cos(h13t)*or13 h12y*ones(size(h13t)) h12z+h12zr*sin(h13t)*or13];
+	h13 = feval(mfilename,locs(1:end-1,:),locs(2:end,:),6);
+	
+	% arrow with no line ==> oriented downwards
+	h14 = feval(mfilename,[3 3 .100001],[3 3 .1],30);
+	t6=text(3,3,3.6,'no line'); set(t6,'HorizontalAlignment','center');
+	
+	% arrow with arrowheads at both ends
+	h15 = feval(mfilename,[-.5 -3 -3],[1 -3 -3],'Ends','both','FaceColor','g', ...
+	            'Length',20,'Width',3,'CrossDir',[0 0 1],'TipAngle',25);
+	
+	h=[h1;h2;h3;h4;h5;h6;h7;h8;h9;h10;h11;h12;h13;h14;h15];
+
+function h = arrow_demo2(in)
+	axlim = in.axlim;
+	dolog = 1;
+	if (dolog), set(in.hs,'YData',10.^get(in.hs,'YData')); end;
+	shading('interp');
+	view(2);
+	title(['Demo of the capabilities of the ARROW function in 2-D']);
+	hold on; [C,H]=contour(in.x,in.y,in.z,20,'-'); hold off;
+	for k=H',
+		set(k,'ZData',(axlim(6)+1)*ones(size(get(k,'XData'))),'Color','k');
+		if (dolog), set(k,'YData',10.^get(k,'YData')); end;
+	end;
+	if (dolog), axis([axlim(1:2) 10.^axlim(3:4)]); set(gca,'YScale','log');
+	else,       axis(axlim(1:4)); end;
+	
+	% Normal blue arrow
+	start = [axlim(1) axlim(4) axlim(6)+2];
+	stop  = [in.x(in.iii) in.y(in.iii) axlim(6)+2];
+	if (dolog), start(:,2)=10.^start(:,2); stop(:,2)=10.^stop(:,2); end;
+	h1 = feval(mfilename,start,stop,'EdgeColor','b','FaceColor','b');
+	
+	% three arrows with varying fill, width, and baseangle
+	start = [-3   -3   10; -3   -1.5 10; -1.5 -3   10];
+	stop  = [-.03 -.03 10; -.03 -1.5 10; -1.5 -.03 10];
+	if (dolog), start(:,2)=10.^start(:,2); stop(:,2)=10.^stop(:,2); end;
+	h2 = feval(mfilename,start,stop,24,[90;60;120],[],[0;0;4],'Ends',str2mat('both','stop','stop'));
+	set(h2(2),'EdgeColor',[0 .35 0],'FaceColor',[0 .85 .85]);
+	set(h2(3),'EdgeColor','r','FaceColor',[1 .5 1]);
+	h=[h1;h2];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/dot_to_graph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,121 @@
+function [Adj, labels, x, y] = dot_to_graph(filename)
+% [Adj, labels, x, y] = dot_to_graph(filename)
+% Extract a matrix representation, node labels, and node position coordinates
+% from a file in GraphViz format http://www.research.att.com/sw/tools/graphviz
+%
+% INPUTS:
+%    'filename' - the file in DOT format containing the graph layout.
+% OUTPUT:
+%  'Adj'    - an adjacency matrix representation of the graph in 'filename';
+% 'labels'  - a character array with the names of the nodes of the graph;
+%    'x'    - a row vector with the x-coordinates of the nodes in 'filename';
+%    'y'    - a row vector with the y-coordinates of the nodes in 'filename'.
+%
+% WARNINGS: not guaranted to parse ANY GraphViz file. Debugged on undirected 
+%       sample graphs from GraphViz(Heawood, Petersen, ER, ngk10_4, process). 
+%       Complaines about RecursionLimit set only to 500 on huge graphs.
+%       Ignores singletons (disjoint nodes).         
+% Sample DOT code "ABC.dot", read by [Adj, labels, x, y] = dot_to_graph('ABC.dot')
+% digraph G {
+%       A [pos="28,31"];
+%       B [pos="74,87"];
+%       A -- B [pos="e,61,71 41,47 46,53 50,58 55,64"];
+% }
+%                                                     last modified: Jan 2004
+% by Alexi Savov:  asavov @wustl.edu  |  http://artsci.wustl.edu/~azsavov
+%    Leon Peshkin: pesha @ai.mit.edu  |  http://www.ai.mit.edu/~pesha 
+%    Tom Minka
+
+if ~exist(filename)                % Checks whether the specified file exists.
+  error('* * * File does not exist or could not be found. * * *');
+end;
+
+lines = textread(filename,'%s','delimiter','\n','commentstyle','c');  % Read file into cell array
+dot_lines = strvcat(lines);                                % of lines, ignoring C-style comments
+
+if findstr(dot_lines(1,:), 'graph ') == []           % Is this a DOT file ?
+  error('* * * File does not appear to be in valid DOT format. * * *');
+end;
+
+Nlns = size(dot_lines,1);             % The number of lines;
+nodes = {};
+unread = 1:Nlns;             % 'unread' list of lines which has not been examined yet
+edge_id = 1;
+Adj = [];
+for line_ndx = 1:Nlns   % This section sets the adjacency matrix A(Lnode,Rnode) = edge_id.
+  line = dot_lines(line_ndx,:);
+  Ddash_pos = strfind(line, ' -- ') + 1;    % double dash positions
+  arrow_pos = strfind(line, ' -> ') + 1;    % arrow  dash positions
+  tokens = strread(line,'%s','delimiter',' "');
+  left_bound = 1;
+  for dash_pos = [Ddash_pos arrow_pos];  % if empty - not a POS line
+    Lnode = sscanf(line(left_bound:dash_pos -2), '%s');
+    Rnode = sscanf(line(dash_pos +3 : length(line)-1),'%s',1);
+    Lndx = strmatch(Lnode, nodes, 'exact');
+    Rndx = strmatch(Rnode, nodes, 'exact');
+    if isempty(Lndx)         % extend our list of nodes 
+      nodes{end+1} = Lnode;
+      Lndx = length(nodes);
+    end
+    if isempty(Rndx)
+      nodes{end+1} = Rnode;
+      Rndx = length(nodes);
+    end
+    Adj(Lndx, Rndx) = edge_id;
+    if  ismember(dash_pos, Ddash_pos)   % The edge is undirected, A(Rndx,LndxL) is also set to 1;
+      Adj(Rndx, Lndx) = edge_id;
+    end
+    edge_id = edge_id + 1; 
+    left_bound = dash_pos + 3;
+    unread = setdiff(unread, line_ndx); 
+  end
+end
+Nvrt = length(nodes);    % number of vertices we found  [Do we ever have singleton vertices ???]
+% nodes = strvcat(nodes); % convert to the searchable array
+x = zeros(1, Nvrt); 
+y = zeros(1, Nvrt);
+labels = nodes;
+% Find node's position coordinates if they are contained in 'filename'.
+for line_ndx = unread        % Look for node's coordinates among the 'unread' lines.
+  line = dot_lines(line_ndx,:);
+  bra_pos = strfind(line, '[');       % has to have "[" if it has the label
+  lst_node = 0;
+  for node = 1:Nvrt     % look through the list of nodes 
+    %  THE NEXT STATEMENT we assume no node is substring of any other node
+    lbl_pos = strfind(line, nodes{node});
+    if (~isempty(lbl_pos) & ~isempty(bra_pos) & (x(node) == 0))  % make sure we have not seen it 
+      if (lbl_pos(1) < bra_pos(1))  % label has to be to the left of bracket
+	lst_node = node;
+      end
+    end
+  end
+  if lst_node
+    pos_pos = strfind(line, 'pos');     % position of the "pos"
+    if ~isempty(pos_pos)   % this line contains SOME position  
+      [node_pos] = sscanf(line(pos_pos:end), ' pos  = "%d,%d"')';
+      x(lst_node) = node_pos(1);
+      y(lst_node) = node_pos(2);
+    end
+    % minka
+    label_pos = strfind(line, 'label'); % position of the "label"
+    if ~isempty(label_pos)
+      label_end = strfind(line(label_pos:end),',');
+      labels{lst_node} = unquote(line(label_pos+(6:label_end(1)-2)));
+    end
+  end
+end
+
+if (isempty(find(x)) & (nargout > 2))   % If coordinates were requested, but not found in 'filename'.
+  warning('File does not contain node coordinates.');
+end;
+if ~(size(Adj,1)==size(Adj,2))           % Make sure Adj is a square matrix. ? 
+  Adj = eye(max(size(Adj)),size(Adj,1))*Adj*eye(size(Adj,2),max(size(Adj)));
+end;
+x = .9*(x-min(x))/range(x)+.05;  % normalise and push off margins 
+y = .9*(y-min(y))/range(y)+.05; 
+
+
+
+function s = unquote(s)
+
+s = strrep(s,'"','');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/draw_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,99 @@
+function [x, y, h] = draw_dbn(adj, inter, flip_intra, K, labels, node_t, x, y)
+% DRAW_LAYOUT_DBN		Draws a layout for a Dynamical Belief Network
+%
+%  [<X1, Y1, X2, Y2>] = DRAW_LAYOUT_DBN(INTRA, INTER, <FLIP_FLAG, K, LABELS, ISBOX, X1, Y1>)
+%
+% Inputs :
+%	INTRA, INTER : Adjacency matrices
+%       FLIP_FLAG : Transposes the DAG layout obtained from INTRA connections
+%                   If X1, Y1 are specified, FLIP_FLAG has no effect.
+%       K         : Unfold K times <Default = 2>
+%       LABELS - if -1, we use 1:N*K
+%       Rest : See DRAW_LAYOUT      
+% 
+% Outputs :
+%	 Xi, Yi : Coordinates of nodes (for i'th timeslice) on the unit square
+%        H      : Object Handles
+%
+% Usage Example : draw_layout_dbn(intra, inter, 1);
+%                 draw_layout_dbn(intra, inter);
+%
+% Note	:
+% See also DRAW_GRAPH
+
+% Uses : DRAW_GRAPH
+
+% Change History :
+% Date		Time		Prog	Note
+% 17-Apr-2000	 1:02 PM	ATC	Created under MATLAB 5.3.1.29215a (R11.1)
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+N = size(adj,1);
+if nargin<3, 
+  flip_intra = 0;
+end;
+
+if nargin<4,
+  K = 2;
+end;
+
+if K<2 | K>7, error('2<=K<=7 must hold..'); end;
+
+
+if nargin<5 
+%  labels = cellstr(char(zeros(N,1)+double('+')));
+%  labels = cellstr(int2str((1:N)'));
+    labels = cellstr(char((0:N-1)'+double('a')));
+end;
+
+if nargin<6,
+  node_t = zeros(N,1);
+%  node_t = rand(N,1) > 0.5;
+end;
+
+if nargin<7,
+  [x1 y1] = make_layout(adj);
+  if flip_intra, tmp = x1; x1 = y1; y1 = tmp; end;
+end;
+
+mid = round(K/2);
+
+
+xi = x1(:)-1;
+x = [];
+y = repmat(y1(:), [K 1]);
+node_t2 = repmat(node_t(:), [K 1]);
+
+if isa(labels,'double') & labels==-1 % KPM
+  lb = num2strcell(1:N*K);
+else
+  lb = {};
+  for i=1:K,
+    labels1 = labels(:);
+    if i==mid,     str = ''; else str = sprintf('%+d',i-mid); end;
+    for i=1:N,
+      labels1{i} = [labels1{i} '(t' str ')'];  
+    end;
+    lb = [lb; labels1(:)];
+  end;
+end
+
+dag = zeros(N*K);
+
+for i=1:K,
+  xi = xi+1;
+  x = [x; xi];
+
+  idx = ((i-1)*N+1):i*N;
+  dag(idx,idx) = adj;
+  if i<K,
+    dag(idx,idx+N) = inter;
+  end;
+end;
+
+[x, y, h] = draw_graph(dag, lb, node_t2, x/K, y);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/draw_dbn_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+% TEST_LAYOUT_DBN		Script to test some DBN layouts
+%
+
+% Change History :
+% Date		Time		Prog	Note
+% 17-Apr-2000	 2:40 PM	ATC	Created under MATLAB 5.3.1.29215a (R11.1)
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+disp('draw mhmm1')
+clf
+set(gcf, 'pos', [0   0   1024   600]);
+
+intra = zeros(3);
+intra(1,[2 3]) = 1;
+intra(2,3) = 1;
+inter = zeros(3);
+inter(1,1) = 1;
+n = 3;
+dnodes = [1 2];
+isbox = zeros(n,1); isbox(dnodes) = 1;
+unfold = 4;
+draw_dbn(intra, inter, 0, unfold, {'Q', 'M', 'Y'}, isbox);
+
+
+pause
+clf
+disp('draw water1')
+bnet = mk_water_dbn;
+unfold = 3;
+flip = 1;
+[dummyx, dummyy, h] = draw_dbn(bnet.intra, bnet.inter, flip, unfold);
+
+col = rand(size(h,1),3);
+for i=1:length(h),
+  col = rand(1,3);
+  % patches
+  set(h(i,2),'facecolor', col); drawnow;
+  % text
+  set(h(i,1),'color', 1-col); drawnow;
+end;
+
+
+pause
+clf
+disp('draw BAT static')
+% This requires BNT
+
+%sz = get(0, 'ScreenSize');
+%sv = get(gcf, 'pos');
+%set(gcf, 'units','pix','pos', sz);
+[bnet, names] = mk_bat_dbn;
+N = size(bnet.intra,1);
+G = [bnet.intra bnet.inter;
+     zeros(N,N) bnet.intra];
+names2 = names;
+for i=1:N
+  names2{i} = sprintf('%s(1)', names{i});
+  names2{i+N} = sprintf('%s(2)', names{i});
+end
+draw_graph(G, names2);
+
+pause
+disp('draw bat dbn')
+clf
+draw_dbn(bnet.intra, bnet.inter, 0, 2, names2);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/draw_dot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,124 @@
+function draw_dot(adj,varargin);
+%DRAW_DOT   Draw a graph.
+% DRAW_DOT(ADJ) plots the graph ADJ in the current figure window, using 
+% 'neato' to optimize the layout.
+%
+% Optional arguments can be passed as name/value pairs: [default]
+%
+% 'isbox'     - a vector specifying which nodes should be boxed [0]
+% 'rotate'    - rotate the graph so that nodes are vertically aligned [1]
+% 'tolerance' - alignment tolerance for 'rotate' [0.001]
+% 'start'     - a random seed (to select different solutions)
+% 'options'   - a string of command-line options for 'neato' ['']
+% All of the optional arguments to graph_to_dot are also supported, such as
+% 'node_label'.
+%
+% See also GRAPH_TO_DOT.
+%
+% Example:
+% size=15; Adj = rand(size) > .8;
+% Adj2 = triu(Adj,1)+ triu(Adj,1)' + diag(zeros(size,1));
+% draw_dot(Adj2)
+
+% Original: Leon Peshkin  
+% Modified by Tom Minka
+
+% minka
+N = size(adj,1);
+unique_labels = cellstr(num2str((1:N)','%-1d'));
+labels = unique_labels;
+isbox = zeros(N,1);
+rotate_flag = 1;
+tolerance = 0.001;
+options = '';
+for i = 1:2:length(varargin)
+  switch varargin{i}
+    case 'node_label', labels = varargin{i+1}; 
+      % replace with unique labels
+      varargin{i+1} = unique_labels;
+    case 'isbox', isbox = varargin{i+1};
+    case 'rotate', rotate_flag = varargin{i+1};
+    case 'tolerance', tolerance = varargin{i+1};
+    case 'start', start = varargin{i+1}; 
+      options = [options ' -Gstart=' num2str(start)];
+    case 'options', options = [options ' ' varargin{i+1}];
+  end
+end
+
+if ispc, shell = 'dos'; else, shell = 'unix'; end  %  Which OS ?
+
+cmdline = strcat(shell,'(''neato -V'')');
+status = eval(cmdline);
+%[status, result] = dos('neato -V');  % request version to check NEATO
+if status == 1,  fprintf('Complaining \n'); exit, end
+
+tmpDOTfile = '_GtDout.dot';            % to be platform independant no use of directories
+tmpLAYOUT  = '_LAYout.dot'; 
+graph_to_dot(adj > 0, 'filename', tmpDOTfile, 'node_label', unique_labels, varargin{:});  % save in file
+
+cmdline = strcat([shell '(''neato -Tdot ' tmpDOTfile options ' -o ' tmpLAYOUT ''')']); % preserve trailing spaces 
+status = eval(cmdline);         %  get NEATO todo layout
+
+[adj, permuted_labels, x, y] = dot_to_graph(tmpLAYOUT);  %  load layout 
+delete(tmpLAYOUT); delete(tmpDOTfile);     % clean up temporary files
+
+% permute the original arguments to match permuted_labels.
+order = [];
+for i = 1:length(permuted_labels)
+  j = strmatch(permuted_labels{i},unique_labels,'exact');
+  order(i) = j(1);
+end
+labels = labels(order);
+isbox = isbox(order);
+if rotate_flag
+  [x,y] = best_rotation(x,y,tolerance);
+end
+
+figure(1); clf; axis square      %  now plot 
+[x, y, h] = draw_graph(adj>0, labels, isbox, x, y, varargin{:});
+
+
+function [x,y] = best_rotation(x,y,h)
+% Rotate the points to maximize the horizontal and vertical alignment.
+% Written by Tom Minka.
+
+xm = mean(x);
+ym = mean(y);
+xr = max(x)-min(x);
+yr = max(y)-min(y);
+x = (x-xm)/xr;
+y = (y-ym)/yr;
+
+xy = [x(:) y(:)];
+if 1
+  angle = fminbnd(@rotation_cost,-pi/4,pi/4,[],xy,h);
+else
+  angles = linspace(-pi/4,pi/4,40);
+  e = [];
+  for i = 1:length(angles)
+    e(i) = rotation_cost(angles(i),xy,h);
+  end
+  %figure(2)
+  %plot(angles*180/pi,e)
+  angle = angles(argmin(e));
+end
+%angle*180/pi
+c = cos(angle); s = sin(angle);
+xy = xy*[c s; -s c];
+
+x = xy(:,1)*xr+xm;
+y = xy(:,2)*yr+ym;
+
+
+function e = rotation_cost(angle,xy,h)
+% xy is 2-column matrix.
+% e is small if many x's and y's are aligned.
+
+c = cos(angle); s = sin(angle);
+xy = xy*[c s; -s c];
+dx = sqdist(xy(:,1)',xy(:,1)');
+dy = sqdist(xy(:,2)',xy(:,2)');
+dx = setdiag(dx,Inf);
+dy = setdiag(dy,Inf);
+e = sum(exp(-dx(:)/h))+sum(exp(-dy(:)/h));
+e = -e;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/draw_graph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,332 @@
+function [x, y, h] = draw_graph(adj, labels, node_t, x, y, varargin)
+% DRAW_LAYOUT		Draws a layout for a graph 
+%
+%  [X, Y, H] = DRAW_LAYOUT(ADJ, <LABELS, ISBOX, X, Y>)
+%
+% Inputs :
+%	ADJ : Adjacency matrix (source, sink)
+%       LABELS : Cell array containing labels <Default : '1':'N'>
+%       ISBOX : 1 if node is a box, 0 if oval <Default : zeros>
+%       X, Y, : Coordinates of nodes on the unit square <Default : calls make_layout>
+%
+% Outputs :
+%	X, Y : Coordinates of nodes on the unit square
+%       H    : Object handles 
+%
+% Usage Example : [x, y] = draw_layout([0 1;0 0], {'Hidden','Visible'}, [1 0]');
+%
+% h(i,1) is the text handle - color
+% h(i,2) is the circle handle - facecolor
+%
+% See also MAKE_LAYOUT
+
+% Change History :
+% Date		Time		Prog	Note
+% 13-Apr-2000	 9:06 PM	ATC	Created under MATLAB 5.3.1.29215a (R11.1)
+%
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+adj = double(adj);
+N = size(adj,1);
+if nargin<2,
+  labels = cellstr(int2str((1:N)'));
+end
+
+if nargin<3,
+  node_t = zeros(N,1);
+else
+  node_t = node_t(:);
+end;
+  
+axis([0 1 0 1]);
+set(gca,'XTick',[],'YTick',[],'box','on');
+% axis('square');
+%colormap(flipud(gray));
+
+if nargin<4,
+  [x y] = make_layout(adj);
+end;
+
+idx1 = find(node_t==0); h1 = []; wd1=[];
+if ~isempty(idx1)
+  [h1 wd1] = textoval(x(idx1), y(idx1), labels(idx1), varargin{:});
+end;
+
+idx2 = find(node_t~=0); h2 = []; wd2 = [];
+if ~isempty(idx2)
+  [h2 wd2] = textbox(x(idx2), y(idx2), labels(idx2), varargin{:});
+end;
+
+wd = zeros(size(wd1,1)+size(wd2,1),2);
+if ~isempty(idx1), wd(idx1, :) = wd1;  end;
+if ~isempty(idx2), wd(idx2, :) = wd2; end;
+
+% bug: this code assumes [x y] is the center of each box and oval, which 
+% isn't exactly true.
+h_edge = [];
+for i=1:N,
+  j = find(adj(i,:)==1);
+  for k=j,
+    if x(k)-x(i)==0,
+	sign = 1;
+	if y(i)>y(k), alpha = -pi/2; else alpha = pi/2; end;
+    else
+	alpha = atan((y(k)-y(i))/(x(k)-x(i)));
+	if x(i)<x(k), sign = 1; else sign = -1; end;
+    end;
+    dy1 = sign.*wd(i,2).*sin(alpha);   dx1 = sign.*wd(i,1).*cos(alpha);
+    dy2 = sign.*wd(k,2).*sin(alpha);   dx2 = sign.*wd(k,1).*cos(alpha);    
+    if adj(k,i)==0, % if directed edge
+      h = arrow([x(i)+dx1 y(i)+dy1],[x(k)-dx2 y(k)-dy2],'BaseAngle',30);
+    else	   
+      h = line([x(i)+dx1 x(k)-dx2],[y(i)+dy1 y(k)-dy2]);
+      adj(k,i)=-1; % Prevent drawing lines twice
+    end;
+    h_edge = [h_edge h];
+  end;
+end;
+
+color.box = 'black';
+color.text = color.box;
+color.edge = [1 1 1]*3/4;
+%color.edge = 'green';
+if ~isempty(idx1)
+  set(h1(:,1),'Color',color.text)
+  set(h1(:,2),'EdgeColor',color.box)
+end
+if ~isempty(idx2)
+  set(h2(:,1),'Color',color.text)
+  set(h2(:,2),'EdgeColor',color.box)
+end
+set(h_edge,'Color',color.edge)
+
+if nargout>2,
+  h = zeros(length(wd),2);
+  if ~isempty(idx1),
+    h(idx1,:) = h1;
+  end;
+  if ~isempty(idx2),
+    h(idx2,:) = h2;
+  end;
+end;
+
+%%%%%
+
+function [t, wd] = textoval(x, y, str, varargin)
+% TEXTOVAL		Draws an oval around text objects
+% 
+%  [T, WIDTH] = TEXTOVAL(X, Y, STR)
+%  [..] = TEXTOVAL(STR)  % Interactive
+% 
+% Inputs :
+%    X, Y : Coordinates
+%    TXT  : Strings
+% 
+% Outputs :
+%    T : Object Handles
+%    WIDTH : x and y Width of ovals 
+%
+% Usage Example : [t] = textoval('Visit to Asia?');
+% 
+% 
+% Note     :
+% See also TEXTBOX
+
+% Uses :
+
+% Change History :
+% Date		Time		Prog	Note
+% 15-Jun-1998	10:36 AM	ATC	Created under MATLAB 5.1.0.421
+% 12-Mar-2004   10:00 AM        minka   Changed placement/sizing.
+%
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+temp = [];
+textProperties = {'BackgroundColor','Color','FontAngle','FontName','FontSize','FontUnits','FontWeight','Rotation'};
+varargin = argfilter(varargin,textProperties);
+
+if nargin == 1
+  str = x;
+end
+if ~isa(str,'cell') str=cellstr(str); end;
+N = length(str);    
+wd = zeros(N,2);
+for i=1:N,
+  if nargin == 1
+    [x, y] = ginput(1);
+  end
+  tx = text(x(i),y(i),str{i},'HorizontalAlignment','center',varargin{:});
+  % minka
+  [ptc wx wy] = draw_oval(tx);
+  wd(i,:) = [wx wy];
+  % draw_oval will paint over the text, so need to redraw it
+  delete(tx);
+  tx = text(x(i),y(i),str{i},'HorizontalAlignment','center',varargin{:});
+  temp = [temp;  tx ptc];
+end
+if nargout>0, t = temp; end;
+
+%%%%%%%%%
+
+
+function [ptc, wx, wy] = draw_oval(tx, x, y)
+% Draws an oval box around a tex object
+sz = get(tx,'Extent');
+% minka
+wy = 2/3*sz(4);
+wx = 2/3*sz(3);
+x = sz(1)+sz(3)/2;
+y = sz(2)+sz(4)/2;
+ptc = ellipse(x, y, wx, wy);
+set(ptc, 'FaceColor','w');
+
+
+%%%%%%%%%%%%%
+
+function [p] = ellipse(x, y, rx, ry, c)
+% ELLIPSE		Draws Ellipse shaped patch objects
+% 
+%  [<P>] = ELLIPSE(X, Y, Rx, Ry, C)
+% 
+% Inputs :
+%    X : N x 1 vector of x coordinates
+%    Y : N x 1 vector of y coordinates
+%    Rx, Ry : Radii
+%    C : Color index
+%
+% 
+% Outputs :
+%    P = Handles of Ellipse shaped path objects
+% 
+% Usage Example : [] = ellipse();
+% 
+% 
+% Note     :
+% See also 
+
+% Uses :
+
+% Change History :
+% Date		Time		Prog	Note
+% 27-May-1998	 9:55 AM	ATC	Created under MATLAB 5.1.0.421
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+if (nargin < 2) error('Usage Example : e = ellipse([0 1],[0 -1],[1 0.5],[2 0.5]); '); end;
+if (nargin < 3) rx = 0.1; end;
+if (nargin < 4) ry = rx; end;
+if (nargin < 5) c = 1; end;
+
+if length(c)==1, c = ones(size(x)).*c; end;
+if length(rx)==1, rx = ones(size(x)).*rx; end;
+if length(ry)==1, ry = ones(size(x)).*ry; end;
+  
+n = length(x);
+p = zeros(size(x));
+t = 0:pi/30:2*pi;
+for i=1:n,
+	px = rx(i)*cos(t)+x(i);
+	py = ry(i)*sin(t)+y(i);
+	p(i) = patch(px,py,c(i));
+end;
+
+if nargout>0, pp = p; end;
+
+%%%%%
+
+function [t, wd] = textbox(x,y,str,varargin)
+% TEXTBOX	Draws A Box around the text 
+% 
+%  [T, WIDTH] = TEXTBOX(X, Y, STR)
+%  [..] = TEXTBOX(STR)
+% 
+% Inputs :
+%    X, Y : Coordinates
+%    TXT  : Strings
+% 
+% Outputs :
+%    T : Object Handles
+%    WIDTH : x and y Width of boxes 
+%% 
+% Usage Example : t = textbox({'Ali','Veli','49','50'});
+% 
+% 
+% Note     :
+% See also TEXTOVAL
+
+% Uses :
+
+% Change History :
+% Date		Time		Prog	Note
+% 09-Jun-1998	11:43 AM	ATC	Created under MATLAB 5.1.0.421
+% 12-Mar-2004   10:00 AM        minka   Changed placement/sizing.
+%
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+temp = [];
+textProperties = {'BackgroundColor','Color','FontAngle','FontName','FontSize','FontUnits','FontWeight','Rotation'};
+varargin = argfilter(varargin,textProperties);
+
+if nargin == 1
+  str = x;
+end
+if ~isa(str,'cell') str=cellstr(str); end;    
+N = length(str);
+wd = zeros(N,2);
+for i=1:N,
+  if nargin == 1
+    [x, y] = ginput(1);
+  end
+  tx = text(x(i),y(i),str{i},'HorizontalAlignment','center',varargin{:});
+  % minka
+  [ptc wx wy] = draw_box(tx);
+  wd(i,:) = [wx wy];
+  % draw_box will paint over the text, so need to redraw it
+  delete(tx);
+  tx = text(x(i),y(i),str{i},'HorizontalAlignment','center',varargin{:});      
+  temp = [temp; tx ptc];
+end;
+
+if nargout>0, t = temp; end;
+
+
+function [ptc, wx, wy] = draw_box(tx)
+% Draws a box around a text object
+sz = get(tx,'Extent');
+% minka
+wy = 1/2*sz(4);
+wx = 1/2*sz(3);
+x = sz(1)+sz(3)/2;
+y = sz(2)+sz(4)/2;
+ptc = patch([x-wx x+wx x+wx x-wx], [y+wy y+wy y-wy y-wy],'w');
+set(ptc, 'FaceColor','w');
+
+
+
+function args = argfilter(args,keep)
+%ARGFILTER  Remove unwanted arguments.
+% ARGFILTER(ARGS,KEEP), where ARGS = {'arg1',value1,'arg2',value2,...},
+% returns a new argument list where only the arguments named in KEEP are
+% retained.  KEEP is a character array or cell array of strings.
+
+% Written by Tom Minka
+
+if ischar(keep)
+  keep = cellstr(keep);
+end
+i = 1;
+while i < length(args)
+  if ~ismember(args{i},keep)
+    args = args(setdiff(1:length(args),[i i+1]));
+  else
+    i = i + 2;
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/draw_graph_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+% TEST_LAYOUT       Script to test some bayesian net layouts
+%
+
+% Change History :
+% Date		Time		Prog	Note
+% 13-Apr-2000	10:40 PM	ATC	Created under MATLAB 5.3.1.29215a (R11.1)
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+%bnet = mk_asia_bnet;
+%draw_graph(bnet.dag);
+
+% Make the following network (from Jensen (1996) p84 fig 4.17)
+%    1
+%  / | \
+% 2  3  4
+% |  |  |
+% 5  6  7
+%  \/ \/
+%  8   9
+% where all arcs point downwards
+
+disp('plot directed')
+clf;
+
+N = 9;
+dag = zeros(N,N);
+dag(1,2)=1; dag(1,3)=1; dag(1,4)=1;
+dag(2,5)=1; dag(3,6)=1; dag(4,7)=1;
+dag(5,8)=1; dag(6,8)=1; dag(6,9)=1; dag(7,9) = 1;
+
+draw_graph(dag);
+
+pause
+clf
+disp('plot undirected')
+udag = [dag+dag'];
+draw_graph(udag);
+
+pause
+clf
+disp('plot mixed')
+mg = [dag];
+mg(2,1) = 1; mg(8,5) = 1;
+draw_graph(mg);
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/draw_hmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,117 @@
+function draw_hmm(A, varargin)
+% DRAW_HMM Make a picture of the HMM using dotty
+% function draw_hmm(A, ...)
+%
+% For details on dotty, see http://www.research.att.com/sw/tools/graphviz
+%
+% If A(i,j) > thresh, we draw and arc from state i to state j.
+%
+% Optional arguments (name/value pairs) [default]
+%
+% thresh - [1e-1]
+% obsprob - If B(i,o) > 0, we include "o" in the name of state i.
+%     e.g., if state 5 emits 1,3,7, its label becomes "5: 1 3 7".
+% startprob - ifstartprob(i) > 0, the state name will be prefixed with "+".
+% endprob - if endprob(i) > 0, the state name will be appended with "-".
+% filename - if [], we write to 'tmp.dot', convert this to 'tmp.ps'
+%  using 'dot -Tps tmp.dot -o tmp.ps', and then call ghostview  to display the result.
+%  dot and gv must be on your system path.
+%  If filename ~= [], we just generate the dot file, and do not
+%  convert it to postscript or call ghostview.
+
+[thresh, B, startprob, endprob, filename] = ...
+    process_options(varargin, 'thresh', 1e-1, 'obsprob', [], 'startprob', [], 'endprob', [], ...
+		    'filename', []);
+
+Q = length(A);
+
+arclabel = cell(Q,Q);
+G = zeros(Q,Q);
+for i=1:Q
+  for j=1:Q
+    if A(i,j) < thresh
+      arclabel{i,j} = '';
+    else
+      G(i,j) = 1;
+      arclabel{i,j} = sprintf('%5.3f', A(i,j));
+    end
+  end
+end
+
+
+nodelabel = cell(1,Q);
+for i=1:Q
+  % annotate start/stop states
+  if ~isempty(startprob) & ~approxeq(startprob(i), 0)
+    start = '+';
+  else
+    start = '';
+  end
+  if ~isempty(endprob) & ~approxeq(hmm.endprob(i), 0)
+    stop = '-';
+  else
+    stop = '';
+  end
+  label = sprintf('%s%d%s :', start, i, stop);
+
+  if ~isempty(B)
+    output_label = mk_output_label(B);
+    label = strcat(label, output_label);
+  end
+  
+  nodelabel{i} = label;
+end
+
+
+if isempty(filename)
+  filename = 'tmp.dot';
+  %mkdot(G, filename, arclabel, nodelabel)  
+  graph_to_dot(G, 'filename', filename, 'arc_label', arclabel, 'node_label', nodelabel);
+  fprintf('converting from .ps to .dot\n')
+  !dot -Tps tmp.dot -o tmp.ps
+  !gv tmp.ps &
+else
+  graph_to_dot(G, 'filename', filename, 'arc_label', arclabel, 'node_label', nodelabel);
+  %mkdot(G, filename, arclabel, nodelabel)  
+end
+
+
+%%%%%%%%%
+
+function label = mk_output_label(B)
+
+[Q O] = size(B);
+label = '';
+
+if 0
+  % print most probable symbols
+  for i=1:Q
+    m = max(B(i,:));
+    ndx = find(abs(B(i,:) - repmat(m,1,O)) < 1e-2);
+    %ndx = find(B(i,:)==m);
+    %label = sprintf('%d,', ndx);
+  end
+end
+
+if 0
+  % print prob distrib over all symbols 
+  for o=1:O
+    if approxeq(B(i,o), 0)
+      %
+    else
+      label = strcat(label, sprintf('%d(%3.2f),', o, B(i,o)));
+    end
+  end
+end
+
+if 1
+  % print all non-zero symbols
+  chars = ['a' 'b' 'c'];
+  for o=1:O
+    if approxeq(B(i,o), 0)
+      %
+    else
+      label = strcat(label, sprintf('%s', chars(o)));
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/editGraphGUI.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function g
+%here is how one creates a function ("callback") which does something
+%(prints the node label) when you click on the node's text in Matlab figure.
+%
+% Leon Peshkin  http://www.ai.mit.edu/~pesha
+%
+%draw_graph(...)
+
+     % "gca" is the current "axes" object, parent of all objects in figure
+     % "gcbo" is the handle of the object whose callback is being executed
+     % "findall" gives handles to all elements of a given type in the figure
+text_elms = findall(gca,'Type','text');  
+for ndx = 1:length(text_elms)
+  callbk = 'my_call(str2num(get(gcbo,''String'')))'; 
+  set(text_elms(ndx), 'ButtonDownFcn', callbk);  % assume the node label is a number
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/graph_to_dot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+function graph_to_dot(adj, varargin)
+%GRAPH_TO_DOT  Makes a GraphViz (AT&T) file representing an adjacency matrix
+% graph_to_dot(adj, ...) writes to the specified filename.
+%
+% Optional arguments can be passed as name/value pairs: [default]
+%
+% 'filename' - if omitted, writes to 'tmp.dot'
+% 'arc_label' - arc_label{i,j} is a string attached to the i-j arc [""]
+% 'node_label' - node_label{i} is a string attached to the node i ["i"]
+% 'width'     - width in inches [10]
+% 'height'    - height in inches [10]
+% 'leftright' - 1 means layout left-to-right, 0 means top-to-bottom [0]
+% 'directed'  - 1 means use directed arcs, 0 means undirected [1]
+%
+% For details on graphviz, See http://www.research.att.com/sw/tools/graphviz
+%
+% See also dot_to_graph and draw_dot.
+
+% First version written by Kevin Murphy 2002.
+% Modified by Leon Peshkin, Jan 2004.
+% Bugfix by Tom Minka, Mar 2004.
+                   
+node_label = [];   arc_label = [];   % set default args
+width = 10;        height = 10;
+leftright = 0;     directed = 1;     filename = 'tmp.dot';
+
+for i = 1:2:nargin-1                    % get optional args
+  switch varargin{i}
+    case 'filename', filename = varargin{i+1};
+    case 'node_label', node_label = varargin{i+1};
+    case 'arc_label', arc_label = varargin{i+1};
+    case 'width', width = varargin{i+1};
+    case 'height', height = varargin{i+1};
+    case 'leftright', leftright = varargin{i+1};
+    case 'directed', directed = varargin{i+1};
+  end
+end
+% minka
+if ~directed
+  adj = triu(adj | adj');
+end
+
+fid = fopen(filename, 'w');
+if directed
+  fprintf(fid, 'digraph G {\n');
+  arctxt = '->'; 
+  if isempty(arc_label)
+    labeltxt = '';
+  else
+    labeltxt = '[label="%s"]';
+  end
+else
+  fprintf(fid, 'graph G {\n');
+  arctxt = '--'; 
+  if isempty(arc_label)
+    labeltxt = '[dir=none]';
+  else
+    labeltext = '[label="%s",dir=none]';
+  end
+end
+edgeformat = strcat(['%d ',arctxt,' %d ',labeltxt,';\n']);
+fprintf(fid, 'center = 1;\n');
+fprintf(fid, 'size=\"%d,%d\";\n', width, height);
+if leftright
+  fprintf(fid, 'rankdir=LR;\n');
+end
+Nnds = length(adj);
+for node = 1:Nnds               %  process nodes 
+  if isempty(node_label)
+    fprintf(fid, '%d;\n', node);
+  else
+    fprintf(fid, '%d [ label = "%s" ];\n', node, node_label{node});
+  end
+end
+for node1 = 1:Nnds   % process edges
+  arcs = find(adj(node1,:));         % children(adj, node);
+  for node2 = arcs
+    if  ~isempty(arc_label)
+      fprintf(fid, edgeformat,node1,node2,arc_label{node1,node2});
+    else
+      fprintf(fid, edgeformat, node1, node2);    
+    end    
+  end
+end
+fprintf(fid, '}');
+fclose(fid); 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/make_layout.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,170 @@
+function [x, y] = layout_dag(adj)
+% MAKE_LAYOUT		Creates a layout from an adjacency matrix
+%
+%  [X, Y] = MAKE_LAYOUT(ADJ)
+%
+% Inputs :
+%	ADJ = adjacency matrix (source, sink)
+%
+% Outputs :
+%	X, Y : Positions of nodes
+%
+% Usage Example : [X, Y] = make_layout(adj);
+%
+%
+% Note	: Uses some very simple heuristics, so any other
+%         algorithm would create a nicer layout 
+%
+% See also 
+
+% Uses :
+
+% Change History :
+% Date		Time		Prog	Note
+% 13-Apr-2000	 8:25 PM	ATC	Created under MATLAB 5.3.1.29215a (R11.1)
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+N = size(adj,1);
+tps = toposort(adj);
+
+if ~isempty(tps), % is directed ?
+  level = zeros(1,N);
+  for i=tps,
+    idx = find(adj(:,i));
+    if ~isempty(idx),
+      l = max(level(idx));
+      level(i)=l+1;
+    end;
+  end;
+else
+  level = poset(adj,1)'-1;  
+end;
+
+y = (level+1)./(max(level)+2);
+y = 1-y;
+x = zeros(size(y));
+for i=0:max(level),
+  idx = find(level==i);
+  offset = (rem(i,2)-0.5)/10;
+  x(idx) = (1:length(idx))./(length(idx)+1)+offset;
+end;
+
+%%%%%%%
+
+function [depth] = poset(adj, root)
+% POSET		Identify a partial ordering among the nodes of a graph
+% 
+%  [DEPTH] = POSET(ADJ,ROOT)
+% 
+% Inputs :
+%    ADJ : Adjacency Matrix
+%    ROOT : Node to start with
+% 
+% Outputs :
+%    DEPTH : Depth of the Node
+% 
+% Usage Example : [depth] = poset(adj,12);
+% 
+% 
+% Note     : All Nodes must be connected
+% See also 
+
+% Uses :
+
+% Change History :
+% Date		Time		Prog	Note
+% 17-Jun-1998	12:01 PM	ATC	Created under MATLAB 5.1.0.421
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+adj = adj+adj';
+
+N = size(adj,1);
+depth = zeros(N,1);
+depth(root) = 1;
+queue = root;
+
+while 1,
+  if isempty(queue),
+    if all(depth), break; 
+    else
+      root = find(depth==0); 
+      root = root(1);
+      depth(root) = 1;
+      queue = root;
+    end;
+  end;
+  r = queue(1); queue(1) = [];
+  idx = find(adj(r,:));
+  idx2 = find(~depth(idx));
+  idx = idx(idx2);
+  queue = [queue idx];
+  depth(idx) = depth(r)+1;
+end;
+
+%%%%%%%%%
+
+function [seq] = toposort(adj)
+% TOPOSORT		A Topological ordering of nodes in a directed graph
+% 
+%  [SEQ] = TOPOSORT(ADJ)
+% 
+% Inputs :
+%    ADJ : Adjacency Matrix. 
+%	   ADJ(i,j)==1 ==> there exists a directed edge
+%	   from i to j
+% 
+% Outputs :
+%    SEQ : A topological ordered sequence of nodes.
+%          empty matrix if graph contains cycles.
+%
+% Usage Example : 
+%		N=5;
+%		[l,u] = lu(rand(N));
+%		adj = ~diag(ones(1,N)) & u>0.5;		
+%		seq = toposort(adj);
+% 
+% 
+% Note     :
+% See also 
+
+% Uses :
+
+% Change History :
+% Date		Time		Prog	Note
+% 18-May-1998	 4:44 PM	ATC	Created under MATLAB 5.1.0.421
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+ 
+N = size(adj);
+indeg = sum(adj,1);
+outdeg = sum(adj,2);
+seq = [];
+
+for i=1:N,
+  % Find nodes with indegree 0
+  idx = find(indeg==0);
+  % If can't find than graph contains a cycle
+  if isempty(idx), 
+    seq = [];
+    break;
+  end;
+  % Remove the node with the max number of connections
+  [dummy idx2] = max(outdeg(idx));
+  indx = idx(idx2);
+  seq = [seq, indx];
+  indeg(indx)=-1;
+  idx = find(adj(indx,:));
+  indeg(idx) = indeg(idx)-1;
+end;
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/my_call.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function my_call(value)
+fprintf('%d \n', value); % might check here whether this is a label at all
+                         % since we get here by clicking on ANY text in figure
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/GraphViz/process_options.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,132 @@
+% PROCESS_OPTIONS - Processes options passed to a Matlab function.
+%                   This function provides a simple means of
+%                   parsing attribute-value options.  Each option is
+%                   named by a unique string and is given a default
+%                   value.
+%
+% Usage:  [var1, var2, ..., varn[, unused]] = ...
+%           process_options(args, ...
+%                           str1, def1, str2, def2, ..., strn, defn)
+%
+% Arguments:   
+%            args            - a cell array of input arguments, such
+%                              as that provided by VARARGIN.  Its contents
+%                              should alternate between strings and
+%                              values.
+%            str1, ..., strn - Strings that are associated with a 
+%                              particular variable
+%            def1, ..., defn - Default values returned if no option
+%                              is supplied
+%
+% Returns:
+%            var1, ..., varn - values to be assigned to variables
+%            unused          - an optional cell array of those 
+%                              string-value pairs that were unused;
+%                              if this is not supplied, then a
+%                              warning will be issued for each
+%                              option in args that lacked a match.
+%
+% Examples:
+%
+% Suppose we wish to define a Matlab function 'func' that has
+% required parameters x and y, and optional arguments 'u' and 'v'.
+% With the definition
+%
+%   function y = func(x, y, varargin)
+%
+%     [u, v] = process_options(varargin, 'u', 0, 'v', 1);
+%
+% calling func(0, 1, 'v', 2) will assign 0 to x, 1 to y, 0 to u, and 2
+% to v.  The parameter names are insensitive to case; calling 
+% func(0, 1, 'V', 2) has the same effect.  The function call
+% 
+%   func(0, 1, 'u', 5, 'z', 2);
+%
+% will result in u having the value 5 and v having value 1, but
+% will issue a warning that the 'z' option has not been used.  On
+% the other hand, if func is defined as
+%
+%   function y = func(x, y, varargin)
+%
+%     [u, v, unused_args] = process_options(varargin, 'u', 0, 'v', 1);
+%
+% then the call func(0, 1, 'u', 5, 'z', 2) will yield no warning,
+% and unused_args will have the value {'z', 2}.  This behaviour is
+% useful for functions with options that invoke other functions
+% with options; all options can be passed to the outer function and
+% its unprocessed arguments can be passed to the inner function.
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [varargout] = process_options(args, varargin)
+
+% Check the number of input arguments
+n = length(varargin);
+if (mod(n, 2))
+  error('Each option must be a string/value pair.');
+end
+
+% Check the number of supplied output arguments
+if (nargout < (n / 2))
+  error('Insufficient number of output arguments given');
+elseif (nargout == (n / 2))
+  warn = 1;
+  nout = n / 2;
+else
+  warn = 0;
+  nout = n / 2 + 1;
+end
+
+% Set outputs to be defaults
+varargout = cell(1, nout);
+for i=2:2:n
+  varargout{i/2} = varargin{i};
+end
+
+% Now process all arguments
+nunused = 0;
+for i=1:2:length(args)
+  found = 0;
+  for j=1:2:n
+    if strcmpi(args{i}, varargin{j})
+      varargout{(j + 1)/2} = args{i + 1};
+      found = 1;
+      break;
+    end
+  end
+  if (~found)
+    if (warn)
+      warning(sprintf('Option ''%s'' not used.', args{i}));
+      args{i}
+    else
+      nunused = nunused + 1;
+      unused{2 * nunused - 1} = args{i};
+      unused{2 * nunused} = args{i + 1};
+    end
+  end
+end
+
+% Assign the unused arguments
+if (~warn)
+  if (nunused)
+    varargout{nout} = unused;
+  else
+    varargout{nout} = cell(0);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+/README.txt/1.1.1.1/Thu Jun  9 01:22:48 2005//
+/dhmm_em.m/1.1.1.1/Thu Jun  9 01:25:04 2005//
+/dhmm_em_demo.m/1.1.1.1/Sun May  4 22:01:12 2003//
+/dhmm_em_online.m/1.1.1.1/Sun May  4 22:02:58 2003//
+/dhmm_em_online_demo.m/1.1.1.1/Sun May  4 22:04:10 2003//
+/dhmm_logprob.m/1.1.1.1/Sun May  4 22:01:34 2003//
+/dhmm_logprob_brute_force.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dhmm_logprob_path.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dhmm_sample.m/1.1.1.1/Mon May 31 22:19:50 2004//
+/dhmm_sample_endstate.m/1.1.1.1/Sun May  4 22:00:34 2003//
+/fixed_lag_smoother.m/1.1.1.1/Wed Jan 22 17:56:04 2003//
+/fixed_lag_smoother_demo.m/1.1.1.1/Thu Jun  9 01:27:20 2005//
+/fwdback.m/1.1.1.1/Thu Jun  9 01:17:50 2005//
+/gausshmm_train_observed.m/1.1.1.1/Thu Feb 12 23:08:22 2004//
+/mc_sample.m/1.1.1.1/Mon May 24 22:26:34 2004//
+/mc_sample_endstate.m/1.1.1.1/Wed Jan 22 20:32:28 2003//
+/mdp_sample.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/mhmmParzen_train_observed.m/1.1.1.1/Sat Feb 14 02:06:30 2004//
+/mhmm_em.m/1.1.1.1/Sun Feb  8 04:52:42 2004//
+/mhmm_em_demo.m/1.1.1.1/Tue May 13 16:11:22 2003//
+/mhmm_logprob.m/1.1.1.1/Sun May  4 22:11:54 2003//
+/mhmm_sample.m/1.1.1.1/Wed May 26 00:32:28 2004//
+/mk_leftright_transmat.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/mk_rightleft_transmat.m/1.1.1.1/Fri Nov 22 21:45:52 2002//
+/pomdp_sample.m/1.1.1.1/Sun May  4 21:58:20 2003//
+/testHMM.m/1.1.1.1/Thu Jun  9 01:25:50 2005//
+/transmat_train_observed.m/1.1.1.1/Sun Aug 29 12:41:52 2004//
+/viterbi_path.m/1.1.1.1/Sat Oct 23 01:18:22 2004//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/HMM
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/README.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+Hidden Markov Model (HMM) Toolbox written by Kevin Murphy (1998).
+See http://www.ai.mit.edu/~murphyk/Software/hmm.html for details.
+
+Models
+------
+
+dhmm = HMM with discrete output
+mhmm = HMM with mixture of Gaussians output;
+ Use mhmm with M=1 components to simulate an HMM with a single Gaussian output.
+
+Demos
+-----
+
+mhmm_em_demo
+dhmm_em_demo
+dhmm_em_online_demo
+fixed_lag_smoother_demo
+
+References
+-----------
+
+See "A tutorial on Hidden Markov Models and selected applications in speech recognition",
+ L. Rabiner, 1989, Proc. IEEE 77(2):257--286.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/dhmm_em.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,124 @@
+function [LL, prior, transmat, obsmat, nrIterations] = ...
+   dhmm_em(data, prior, transmat, obsmat, varargin)
+% LEARN_DHMM Find the ML/MAP parameters of an HMM with discrete outputs using EM.
+% [ll_trace, prior, transmat, obsmat, iterNr] = learn_dhmm(data, prior0, transmat0, obsmat0, ...)
+%
+% Notation: Q(t) = hidden state, Y(t) = observation
+%
+% INPUTS:
+% data{ex} or data(ex,:) if all sequences have the same length
+% prior(i)
+% transmat(i,j)
+% obsmat(i,o)
+%
+% Optional parameters may be passed as 'param_name', param_value pairs.
+% Parameter names are shown below; default values in [] - if none, argument is mandatory.
+%
+% 'max_iter' - max number of EM iterations [10]
+% 'thresh' - convergence threshold [1e-4]
+% 'verbose' - if 1, print out loglik at every iteration [1]
+% 'obs_prior_weight' - weight to apply to uniform dirichlet prior on observation matrix [0]
+%
+% To clamp some of the parameters, so learning does not change them:
+% 'adj_prior' - if 0, do not change prior [1]
+% 'adj_trans' - if 0, do not change transmat [1]
+% 'adj_obs' - if 0, do not change obsmat [1]
+%
+% Modified by Herbert Jaeger so xi are not computed individually
+% but only their sum (over time) as xi_summed; this is the only way how they are used
+% and it saves a lot of memory.
+
+[max_iter, thresh, verbose, obs_prior_weight, adj_prior, adj_trans, adj_obs] = ...
+   process_options(varargin, 'max_iter', 10, 'thresh', 1e-4, 'verbose', 1, ...
+                   'obs_prior_weight', 0, 'adj_prior', 1, 'adj_trans', 1, 'adj_obs', 1);
+
+previous_loglik = -inf;
+loglik = 0;
+converged = 0;
+num_iter = 1;
+LL = [];
+
+if ~iscell(data)
+ data = num2cell(data, 2); % each row gets its own cell
+end
+
+while (num_iter <= max_iter) & ~converged
+ % E step
+ [loglik, exp_num_trans, exp_num_visits1, exp_num_emit] = ...
+     compute_ess_dhmm(prior, transmat, obsmat, data, obs_prior_weight);
+
+ % M step
+ if adj_prior
+   prior = normalise(exp_num_visits1);
+ end
+ if adj_trans & ~isempty(exp_num_trans)
+   transmat = mk_stochastic(exp_num_trans);
+ end
+ if adj_obs
+   obsmat = mk_stochastic(exp_num_emit);
+ end
+
+ if verbose, fprintf(1, 'iteration %d, loglik = %f\n', num_iter, loglik); end
+ num_iter =  num_iter + 1;
+ converged = em_converged(loglik, previous_loglik, thresh);
+ previous_loglik = loglik;
+ LL = [LL loglik];
+end
+nrIterations = num_iter - 1;
+
+%%%%%%%%%%%%%%%%%%%%%%%
+
+function [loglik, exp_num_trans, exp_num_visits1, exp_num_emit, exp_num_visitsT] = ...
+   compute_ess_dhmm(startprob, transmat, obsmat, data, dirichlet)
+% COMPUTE_ESS_DHMM Compute the Expected Sufficient Statistics for an HMM with discrete outputs
+% function [loglik, exp_num_trans, exp_num_visits1, exp_num_emit, exp_num_visitsT] = ...
+%    compute_ess_dhmm(startprob, transmat, obsmat, data, dirichlet)
+%
+% INPUTS:
+% startprob(i)
+% transmat(i,j)
+% obsmat(i,o)
+% data{seq}(t)
+% dirichlet - weighting term for uniform dirichlet prior on expected emissions
+%
+% OUTPUTS:
+% exp_num_trans(i,j) = sum_l sum_{t=2}^T Pr(X(t-1) = i, X(t) = j| Obs(l))
+% exp_num_visits1(i) = sum_l Pr(X(1)=i | Obs(l))
+% exp_num_visitsT(i) = sum_l Pr(X(T)=i | Obs(l))
+% exp_num_emit(i,o) = sum_l sum_{t=1}^T Pr(X(t) = i, O(t)=o| Obs(l))
+% where Obs(l) = O_1 .. O_T for sequence l.
+
+numex = length(data);
+[S O] = size(obsmat);
+exp_num_trans = zeros(S,S);
+exp_num_visits1 = zeros(S,1);
+exp_num_visitsT = zeros(S,1);
+exp_num_emit = dirichlet*ones(S,O);
+loglik = 0;
+
+for ex=1:numex
+ obs = data{ex};
+ T = length(obs);
+ %obslik = eval_pdf_cond_multinomial(obs, obsmat);
+ obslik = multinomial_prob(obs, obsmat);
+ [alpha, beta, gamma, current_ll, xi_summed] = fwdback(startprob, transmat, obslik);
+
+ loglik = loglik +  current_ll;
+ exp_num_trans = exp_num_trans + xi_summed;
+ exp_num_visits1 = exp_num_visits1 + gamma(:,1);
+ exp_num_visitsT = exp_num_visitsT + gamma(:,T);
+ % loop over whichever is shorter
+ if T < O
+   for t=1:T
+     o = obs(t);
+     exp_num_emit(:,o) = exp_num_emit(:,o) + gamma(:,t);
+   end
+ else
+   for o=1:O
+     ndx = find(obs==o);
+     if ~isempty(ndx)
+       exp_num_emit(:,o) = exp_num_emit(:,o) + sum(gamma(:, ndx), 2);
+     end
+   end
+ end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/dhmm_em_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+O = 3;
+Q = 2;
+
+% "true" parameters
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+obsmat0 = mk_stochastic(rand(Q,O));
+
+% training data
+T = 5;
+nex = 10;
+data = dhmm_sample(prior0, transmat0, obsmat0, T, nex);
+
+% initial guess of parameters
+prior1 = normalise(rand(Q,1));
+transmat1 = mk_stochastic(rand(Q,Q));
+obsmat1 = mk_stochastic(rand(Q,O));
+
+% improve guess of parameters using EM
+[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', 5);
+LL
+
+% use model to compute log likelihood
+loglik = dhmm_logprob(data, prior2, transmat2, obsmat2)
+% log lik is slightly different than LL(end), since it is computed after the final M step
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/dhmm_em_online.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+function [transmat, obsmat, exp_num_trans, exp_num_emit, gamma, ll] = dhmm_em_online(...
+    prior, transmat, obsmat, exp_num_trans, exp_num_emit, decay, data, ...
+    act, adj_trans, adj_obs, dirichlet, filter_only)
+% ONLINE_EM Adjust the parameters using a weighted combination of the old and new expected statistics
+%
+% [transmat, obsmat, exp_num_trans, exp_num_emit, gamma, ll] = online_em(...
+%    prior, transmat, obsmat, exp_num_trans, exp_num_emit, decay, data, act, ...
+%    adj_trans, adj_obs, dirichlet, filter_only)
+% 
+% 0 < decay < 1, with smaller values meaning the past is forgotten more quickly.
+% (We need to decay the old ess, since they were based on out-of-date parameters.)
+% The other params are as in learn_hmm.
+% We do a single forwards-backwards pass on the provided data, initializing with the specified prior.
+% (If filter_only = 1, we only do a forwards pass.)
+
+if ~exist('act'), act = []; end
+if ~exist('adj_trans'), adj_trans = 1; end
+if ~exist('adj_obs'), adj_obs = 1; end
+if ~exist('dirichlet'), dirichlet = 0; end
+if ~exist('filter_only'), filter_only = 0; end
+
+% E step
+olikseq = multinomial_prob(data, obsmat);
+if isempty(act)
+  [alpha, beta, gamma, ll, xi] = fwdback(prior, transmat, olikseq, 'fwd_only', filter_only);
+else
+  [alpha, beta, gamma, ll, xi] = fwdback(prior, transmat, olikseq, 'fwd_only', filter_only, ...
+					 'act', act);
+end
+
+% Increment ESS
+[S O] = size(obsmat);
+if adj_obs
+  exp_num_emit = decay*exp_num_emit + dirichlet*ones(S,O);
+  T = length(data);
+  if T < O
+    for t=1:T
+      o = data(t);
+      exp_num_emit(:,o) = exp_num_emit(:,o) + gamma(:,t);
+    end
+  else
+    for o=1:O
+      ndx = find(data==o);
+      if ~isempty(ndx)
+	exp_num_emit(:,o) = exp_num_emit(:,o) + sum(gamma(:, ndx), 2);
+      end
+    end
+  end
+end
+
+if adj_trans & (T > 1)
+  if isempty(act)
+    exp_num_trans = decay*exp_num_trans + sum(xi,3);
+  else
+    % act(2) determines Q(2), xi(:,:,1) holds P(Q(1), Q(2))
+    A = length(transmat);
+    for a=1:A
+      ndx = find(act(2:end)==a);
+      if ~isempty(ndx)
+	exp_num_trans{a} = decay*exp_num_trans{a} + sum(xi(:,:,ndx), 3);
+      end
+    end
+  end
+end
+
+
+% M step
+
+if adj_obs
+  obsmat = mk_stochastic(exp_num_emit);
+end
+if adj_trans & (T>1)
+  if isempty(act)
+    transmat = mk_stochastic(exp_num_trans);
+  else
+    for a=1:A
+      transmat{a} = mk_stochastic(exp_num_trans{a});
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/dhmm_em_online_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,93 @@
+% Example of online EM applied to a simple POMDP with fixed action seq
+
+clear all
+
+% Create a really easy model to learn
+rand('state', 1);
+O = 2;
+S = 2;
+A = 2;
+prior0 = [1 0]';
+transmat0 = cell(1,A);
+transmat0{1} = [0.9 0.1; 0.1 0.9]; % long runs of 1s and 2s
+transmat0{2} = [0.1 0.9; 0.9 0.1]; % short runs
+obsmat0 = eye(2);
+	   
+%prior0 = normalise(rand(S,1));
+%transmat0 = mk_stochastic(rand(S,S));
+%obsmat0 = mk_stochastic(rand(S,O));
+
+T = 10;
+act = [1*ones(1,25) 2*ones(1,25) 1*ones(1,25) 2*ones(1,25)];
+data = pomdp_sample(prior0, transmat0, obsmat0, act);
+%data = sample_dhmm(prior0, transmat0, obsmat0, T, 1);
+
+% Initial guess of params
+rand('state', 2); % different seed!
+transmat1 = cell(1,A);
+for a=1:A
+  transmat1{a} = mk_stochastic(rand(S,S));
+end
+obsmat1 = mk_stochastic(rand(S,O));
+prior1 = prior0; % so it labels states the same way
+
+% Uniformative Dirichlet prior (expected sufficient statistics / pseudo counts)
+e = 0.001;
+ess_trans = cell(1,A);
+for a=1:A
+  ess_trans{a} = repmat(e, S, S);
+end
+ess_emit = repmat(e, S, O);
+
+% Params
+w = 2;
+decay_sched = [0.1:0.1:0.9];
+
+% Initialize
+LL1 = zeros(1,T);
+t = 1;
+y = data(t);
+data_win = y;
+act_win = [1]; % arbitrary initial value
+[prior1, LL1(1)] = normalise(prior1 .* obsmat1(:,y));
+
+% Iterate
+for t=2:T
+  y = data(t);
+  a = act(t);
+  if t <= w
+    data_win = [data_win y];
+    act_win = [act_win a];
+  else
+    data_win = [data_win(2:end) y];
+    act_win = [act_win(2:end) a];
+    prior1 = gamma(:, 2);
+  end
+  d = decay_sched(min(t, length(decay_sched)));
+  [transmat1, obsmat1, ess_trans, ess_emit, gamma, ll] = dhmm_em_online(...
+      prior1, transmat1, obsmat1, ess_trans, ess_emit, d, data_win, act_win);
+  bel = gamma(:, end);
+  LL1(t) = ll/length(data_win);
+  %fprintf('t=%d, ll=%f\n', t, ll);
+end
+
+LL1(1) = LL1(2); % since initial likelihood is for 1 slice
+plot(1:T, LL1, 'rx-');
+
+
+% compare with offline learning
+
+if 0
+rand('state', 2); % same seed as online learner
+transmat2 = cell(1,A);
+for a=1:A
+  transmat2{a} = mk_stochastic(rand(S,S));
+end
+obsmat2 = mk_stochastic(rand(S,O));
+prior2 = prior0;
+[LL2, prior2, transmat2, obsmat2] = dhmm_em(data, prior2, transmat2, obsmat2, ....
+					       'max_iter', 10, 'thresh', 1e-3, 'verbose', 1, 'act', act);
+
+LL2 = LL2 / T
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/dhmm_logprob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [loglik, errors] = dhmm_logprob(data, prior, transmat, obsmat)
+% LOG_LIK_DHMM Compute the log-likelihood of a dataset using a discrete HMM
+% [loglik, errors] = log_lik_dhmm(data, prior, transmat, obsmat)
+%
+% data{m} or data(m,:) is the m'th sequence
+% errors  is a list of the cases which received a loglik of -infinity
+
+if ~iscell(data)
+  data = num2cell(data, 2);
+end
+ncases = length(data);
+
+loglik = 0;
+errors = [];
+for m=1:ncases
+  obslik = multinomial_prob(data{m}, obsmat);
+  [alpha, beta, gamma, ll] = fwdback(prior, transmat, obslik, 'fwd_only', 1);
+  if ll==-inf
+    errors = [errors m];
+  end
+  loglik = loglik + ll;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/dhmm_logprob_brute_force.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function logp = enumerate_HMM_loglik(prior, transmat, obsmat)
+% ENUMERATE_HMM_LOGLIK Compute the log likelihood of a sequence by exhaustive (O(Q^T)) enumeration.
+% logp = enumerate_HMM_loglik(prior, transmat, obsmat)
+%
+% Inputs:
+% prior(i) = Pr(Q(1) = i)
+% transmat(i,j) = Pr(Q(t+1)=j | Q(t)=i)
+% obsmat(i,t) = Pr(y(t) | Q(t)=i)
+
+Q = length(prior);
+T = size(obsmat, 2);
+sizes = repmat(Q, 1, T);
+
+psum = 0;
+for i=1:Q^T
+  qs = ind2subv(sizes, i); % make the state sequence 
+  psum = psum + prob_path(prior, transmat, obsmat, qs);
+end
+logp = log(psum)
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/dhmm_logprob_path.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function [ll, p] = prob_path(prior, transmat, obsmat, qs)
+% PROB_PATH Compute the prob. of a specific path (state sequence) through an HMM.
+% [ll, p] = prob_path(prior, transmat, obsmat, states)
+%
+% ll = log prob path
+% p(t) = Pr(O(t)) * Pr(Q(t) -> Q(t+1)) for 1<=t<T, p(T) = Pr(O(T))
+
+T = size(obsmat, 2);
+p = zeros(1,T);
+p(1) = prior(qs(1)) * obsmat(qs(1),1);
+for t=2:T
+  p(t) = transmat(qs(t-1), qs(t)) * obsmat(qs(t),t);
+end
+
+ll = sum(log(p));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/dhmm_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function [obs, hidden] = dhmm_sample(initial_prob, transmat, obsmat, numex, len)
+% SAMPLE_DHMM Generate random sequences from a Hidden Markov Model with discrete outputs.
+%
+% [obs, hidden] = sample_dhmm(initial_prob, transmat, obsmat, numex, len)
+% Each row of obs is an observation sequence of length len.
+
+hidden = mc_sample(initial_prob, transmat, len, numex);
+obs = multinomial_sample(hidden, obsmat);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/dhmm_sample_endstate.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function [obs, hidden] = dhmm_sample_endstate(startprob, transmat, obsmat, endprob, numex)
+% SAMPLE_DHMM Generate random sequences from an HMM with discrete outputs.
+% function [obs, hidden] = sample_dhmm_endstate(startprob, transmat, obsmat, endprob, numex)
+%
+% We sample until we have have entered the end state
+% obs{m} and hidden{m} are the m'th sequence
+
+hidden = cell(1,numex);
+obs = cell(1,numex);
+
+for m=1:numex
+  hidden{m} = mc_sample_endstate(startprob, transmat, endprob);
+  T = length(hidden{m});
+  obs{m} = zeros(1,T);
+  for t=1:T
+    h = hidden{m}(t);
+    obs{m}(t) = sample_discrete(obsmat(h,:));
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/fixed_lag_smoother.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function [alpha, obslik, gamma, xi] = fixed_lag_smoother(d, alpha, obslik, obsvec, transmat, act)
+% FIXED_LAG_SMOOTHER Computed smoothed posterior estimates within a window given previous filtered window.
+% [alpha, obslik, gamma, xi] = fixed_lag_smoother(d, alpha, obslik, obsvec, transmat, act)
+%
+% d >= 2 is the desired window width.
+% Actually, we use d=min(d, t0), where t0 is the current time.
+%
+% alpha(:, t0-d:t0-1) - length d window, excluding t0 (Columns indexed 1..d)
+% obslik(:, t0-d:t0-1) - length d window
+% obsvec              - likelihood vector for current observation
+% transmat            - transition matrix
+% If we specify the optional 'act' argument, transmat{a} should be a cell array, and
+% act(t0-d:t0)          - length d window, last column = current action
+%
+% Output:
+% alpha(:, t0-d+1:t0)     - last column = new filtered estimate
+% obslik(:, t0-d+1:t0)    - last column = obsvec
+% xi(:, :, t0-d+1:t0-1)   - 2 slice smoothed window
+% gamma(:, t0-d+1:t0)     - smoothed window
+%
+% As usual, we define (using T=d)
+% alpha(i,t) = Pr(Q(t)=i | Y(1:t))
+% gamma(i,t) = Pr(Q(t)=i | Y(1:T))
+% xi(i,j,t) = Pr(Q(t)=i, Q(t+1)=j | Y(1:T))
+%
+% obslik(i,t) = Pr(Y(t) | Q(t)=i) 
+% transmat{a}(i,j) = Pr(Q(t)=j | Q(t-1)=i, A(t)=a)
+
+[S n] = size(alpha); 
+d = min(d, n+1); 
+if d < 2
+  error('must keep a window of length at least 2');
+end
+
+if ~exist('act')
+  act = ones(1, n+1);
+  transmat = { transmat };
+end
+
+% pluck out last d-1 components from the history
+alpha = alpha(:, n-d+2:n); 
+obslik = obslik(:, n-d+2:n); 
+
+% Extend window by 1
+t = d;
+obslik(:,t) = obsvec;
+xi = zeros(S, S, d-1);
+xi(:,:,t-1) = normalise((alpha(:,t-1) * obslik(:,t)') .* transmat{act(t)});
+alpha(:,t) = sum(xi(:,:,t-1), 1)';
+
+% Now smooth backwards inside the window
+beta = ones(S, d);
+T = d;
+%fprintf('smooth from %d to 1, i.e., %d to %d\n', d, t0, t0-d+1);
+gamma(:,T) = alpha(:,T);
+for t=T-1:-1:1
+  b = beta(:,t+1) .* obslik(:,t+1); 
+  beta(:,t) = normalise(transmat{act(t)} * b);
+  gamma(:,t) = normalise(alpha(:,t) .* beta(:,t));
+  xi(:,:,t) = normalise((transmat{act(t)} .* (alpha(:,t) * b')));
+end
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/fixed_lag_smoother_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+% Example of fixed lag smoothing
+
+rand('state', 1);
+S = 2;
+O = 2;
+T = 7;
+data = sample_discrete([0.5 0.5], 1, T);
+transmat = mk_stochastic(rand(S,S));
+obsmat = mk_stochastic(rand(S,O));
+obslik = multinomial_prob(data, obsmat);
+prior = [0.5 0.5]';
+
+
+[alpha0, beta0, gamma0, ll0, xi0] = fwdback(prior, transmat, obslik);
+
+w = 3;
+alpha1 = zeros(S, T);
+gamma1 = zeros(S, T);
+xi1 = zeros(S, S, T-1);
+t = 1;
+b = obsmat(:, data(t));
+olik_win = b; % window of conditional observation likelihoods
+alpha_win = normalise(prior .* b);
+alpha1(:,t) = alpha_win;
+for t=2:T
+  [alpha_win, olik_win, gamma_win, xi_win] = ...
+      fixed_lag_smoother(w, alpha_win, olik_win, obsmat(:, data(t)), transmat);
+  alpha1(:,max(1,t-w+1):t) = alpha_win;
+  gamma1(:,max(1,t-w+1):t) = gamma_win;
+  xi1(:,:,max(1,t-w+1):t-1) = xi_win;
+end
+
+e = 1e-1;
+%assert(approxeq(alpha0, alpha1, e));
+assert(approxeq(gamma0(:, T-w+1:end), gamma1(:, T-w+1:end), e));
+%assert(approxeq(xi0(:,:,T-w+1:end), xi1(:,:,T-w+1:end), e));
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/fwdback.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,197 @@
+function [alpha, beta, gamma, loglik, xi_summed, gamma2] = fwdback(init_state_distrib, ...
+   transmat, obslik, varargin)
+% FWDBACK Compute the posterior probs. in an HMM using the forwards backwards algo.
+%
+% [alpha, beta, gamma, loglik, xi, gamma2] = fwdback(init_state_distrib, transmat, obslik, ...)
+%
+% Notation:
+% Y(t) = observation, Q(t) = hidden state, M(t) = mixture variable (for MOG outputs)
+% A(t) = discrete input (action) (for POMDP models)
+%
+% INPUT:
+% init_state_distrib(i) = Pr(Q(1) = i)
+% transmat(i,j) = Pr(Q(t) = j | Q(t-1)=i)
+%  or transmat{a}(i,j) = Pr(Q(t) = j | Q(t-1)=i, A(t-1)=a) if there are discrete inputs
+% obslik(i,t) = Pr(Y(t)| Q(t)=i)
+%   (Compute obslik using eval_pdf_xxx on your data sequence first.)
+%
+% Optional parameters may be passed as 'param_name', param_value pairs.
+% Parameter names are shown below; default values in [] - if none, argument is mandatory.
+%
+% For HMMs with MOG outputs: if you want to compute gamma2, you must specify
+% 'obslik2' - obslik(i,j,t) = Pr(Y(t)| Q(t)=i,M(t)=j)  []
+% 'mixmat' - mixmat(i,j) = Pr(M(t) = j | Q(t)=i)  []
+%
+% For HMMs with discrete inputs:
+% 'act' - act(t) = action performed at step t
+%
+% Optional arguments:
+% 'fwd_only' - if 1, only do a forwards pass and set beta=[], gamma2=[]  [0]
+% 'scaled' - if 1,  normalize alphas and betas to prevent underflow [1]
+% 'maximize' - if 1, use max-product instead of sum-product [0]
+%
+% OUTPUTS:
+% alpha(i,t) = p(Q(t)=i | y(1:t)) (or p(Q(t)=i, y(1:t)) if scaled=0)
+% beta(i,t) = p(y(t+1:T) | Q(t)=i)*p(y(t+1:T)|y(1:t)) (or p(y(t+1:T) | Q(t)=i) if scaled=0)
+% gamma(i,t) = p(Q(t)=i | y(1:T))
+% loglik = log p(y(1:T))
+% xi(i,j,t-1)  = p(Q(t-1)=i, Q(t)=j | y(1:T))  - NO LONGER COMPUTED
+% xi_summed(i,j) = sum_{t=}^{T-1} xi(i,j,t)  - changed made by Herbert Jaeger
+% gamma2(j,k,t) = p(Q(t)=j, M(t)=k | y(1:T)) (only for MOG  outputs)
+%
+% If fwd_only = 1, these become
+% alpha(i,t) = p(Q(t)=i | y(1:t))
+% beta = []
+% gamma(i,t) = p(Q(t)=i | y(1:t))
+% xi(i,j,t-1)  = p(Q(t-1)=i, Q(t)=j | y(1:t))
+% gamma2 = []
+%
+% Note: we only compute xi if it is requested as a return argument, since it can be very large.
+% Similarly, we only compute gamma2 on request (and if using MOG outputs).
+%
+% Examples:
+%
+% [alpha, beta, gamma, loglik] = fwdback(pi, A, multinomial_prob(sequence, B));
+%
+% [B, B2] = mixgauss_prob(data, mu, Sigma, mixmat);
+% [alpha, beta, gamma, loglik, xi, gamma2] = fwdback(pi, A, B, 'obslik2', B2, 'mixmat', mixmat);
+
+if nargout >= 5, compute_xi = 1; else compute_xi = 0; end
+if nargout >= 6, compute_gamma2 = 1; else compute_gamma2 = 0; end
+
+[obslik2, mixmat, fwd_only, scaled, act, maximize, compute_xi, compute_gamma2] = ...
+   process_options(varargin, ...
+       'obslik2', [], 'mixmat', [], ...
+       'fwd_only', 0, 'scaled', 1, 'act', [], 'maximize', 0, ...
+                   'compute_xi', compute_xi, 'compute_gamma2', compute_gamma2);
+
+[Q T] = size(obslik);
+
+if isempty(obslik2)
+ compute_gamma2 = 0;
+end
+
+if isempty(act)
+ act = ones(1,T);
+ transmat = { transmat } ;
+end
+
+scale = ones(1,T);
+
+% scale(t) = Pr(O(t) | O(1:t-1)) = 1/c(t) as defined by Rabiner (1989).
+% Hence prod_t scale(t) = Pr(O(1)) Pr(O(2)|O(1)) Pr(O(3) | O(1:2)) ... = Pr(O(1), ... ,O(T))
+% or log P = sum_t log scale(t).
+% Rabiner suggests multiplying beta(t) by scale(t), but we can instead
+% normalise beta(t) - the constants will cancel when we compute gamma.
+
+loglik = 0;
+
+alpha = zeros(Q,T);
+gamma = zeros(Q,T);
+if compute_xi
+ xi_summed = zeros(Q,Q);
+else
+ xi_summed = [];
+end
+
+%%%%%%%%% Forwards %%%%%%%%%%
+
+t = 1;
+alpha(:,1) = init_state_distrib(:) .* obslik(:,t);
+if scaled
+ %[alpha(:,t), scale(t)] = normaliseC(alpha(:,t));
+ [alpha(:,t), scale(t)] = normalise(alpha(:,t));
+end
+assert(approxeq(sum(alpha(:,t)),1))
+for t=2:T
+ %trans = transmat(:,:,act(t-1))';
+ trans = transmat{act(t-1)};
+ if maximize
+   m = max_mult(trans', alpha(:,t-1));
+   %A = repmat(alpha(:,t-1), [1 Q]);
+   %m = max(trans .* A, [], 1);
+ else
+   m = trans' * alpha(:,t-1);
+ end
+ alpha(:,t) = m(:) .* obslik(:,t);
+ if scaled
+   %[alpha(:,t), scale(t)] = normaliseC(alpha(:,t));
+   [alpha(:,t), scale(t)] = normalise(alpha(:,t));
+ end
+ if compute_xi & fwd_only  % useful for online EM
+   %xi(:,:,t-1) = normaliseC((alpha(:,t-1) * obslik(:,t)') .* trans);
+   xi_summed = xi_summed + normalise((alpha(:,t-1) * obslik(:,t)') .* trans);
+ end
+ assert(approxeq(sum(alpha(:,t)),1))
+end
+if scaled
+ if any(scale==0)
+   loglik = -inf;
+ else
+   loglik = sum(log(scale));
+ end
+else
+ loglik = log(sum(alpha(:,T)));
+end
+
+if fwd_only
+ gamma = alpha;
+ beta = [];
+ gamma2 = [];
+ return;
+end
+
+%%%%%%%%% Backwards %%%%%%%%%%
+
+beta = zeros(Q,T);
+if compute_gamma2
+ M = size(mixmat, 2);
+ gamma2 = zeros(Q,M,T);
+else
+ gamma2 = [];
+end
+
+beta(:,T) = ones(Q,1);
+%gamma(:,T) = normaliseC(alpha(:,T) .* beta(:,T));
+gamma(:,T) = normalise(alpha(:,T) .* beta(:,T));
+t=T;
+if compute_gamma2
+ denom = obslik(:,t) + (obslik(:,t)==0); % replace 0s with 1s before dividing
+ gamma2(:,:,t) = obslik2(:,:,t) .* mixmat .* repmat(gamma(:,t), [1 M]) ./ repmat(denom, [1 M]);
+ %gamma2(:,:,t) = normaliseC(obslik2(:,:,t) .* mixmat .* repmat(gamma(:,t), [1 M])); % wrong!
+end
+for t=T-1:-1:1
+ b = beta(:,t+1) .* obslik(:,t+1);
+ %trans = transmat(:,:,act(t));
+ trans = transmat{act(t)};
+ if maximize
+   B = repmat(b(:)', Q, 1);
+   beta(:,t) = max(trans .* B, [], 2);
+ else
+   beta(:,t) = trans * b;
+ end
+ if scaled
+   %beta(:,t) = normaliseC(beta(:,t));
+   beta(:,t) = normalise(beta(:,t));
+ end
+ %gamma(:,t) = normaliseC(alpha(:,t) .* beta(:,t));
+ gamma(:,t) = normalise(alpha(:,t) .* beta(:,t));
+ if compute_xi
+   %xi(:,:,t) = normaliseC((trans .* (alpha(:,t) * b')));
+   xi_summed = xi_summed + normalise((trans .* (alpha(:,t) * b')));
+ end
+ if compute_gamma2
+   denom = obslik(:,t) + (obslik(:,t)==0); % replace 0s with 1s before dividing
+   gamma2(:,:,t) = obslik2(:,:,t) .* mixmat .* repmat(gamma(:,t), [1 M]) ./ repmat(denom, [1 M]);
+   %gamma2(:,:,t) = normaliseC(obslik2(:,:,t) .* mixmat .* repmat(gamma(:,t), [1 M]));
+ end
+end
+
+% We now explain the equation for gamma2
+% Let zt=y(1:t-1,t+1:T) be all observations except y(t)
+% gamma2(Q,M,t) = P(Qt,Mt|yt,zt) = P(yt|Qt,Mt,zt) P(Qt,Mt|zt) / P(yt|zt)
+%                = P(yt|Qt,Mt) P(Mt|Qt) P(Qt|zt) / P(yt|zt)
+% Now gamma(Q,t) = P(Qt|yt,zt) = P(yt|Qt) P(Qt|zt) / P(yt|zt)
+% hence
+% P(Qt,Mt|yt,zt) = P(yt|Qt,Mt) P(Mt|Qt) [P(Qt|yt,zt) P(yt|zt) / P(yt|Qt)] / P(yt|zt)
+%                = P(yt|Qt,Mt) P(Mt|Qt) P(Qt|yt,zt) / P(yt|Qt)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/gausshmm_train_observed.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function [initState, transmat, mu, Sigma] = gausshmm_train_observed(obsData, hiddenData, ...
+						  nstates, varargin)
+% GAUSSHMM_TRAIN_OBSERVED  Estimate params of HMM with Gaussian output from fully observed sequences
+% [initState, transmat, mu, Sigma] = gausshmm_train_observed(obsData, hiddenData, nstates,...)
+%
+% INPUT
+% If all sequences have the same length
+% obsData(:,t,ex) 
+% hiddenData(ex,t)  - must be ROW vector if only one sequence
+% If sequences have different lengths, we use cell arrays
+% obsData{ex}(:,t) 
+% hiddenData{ex}(t)
+%
+% Optional argumnets
+% dirichletPriorWeight - for smoothing transition matrix counts
+%
+% Optional parameters from mixgauss_Mstep:
+% 'cov_type' - 'full', 'diag' or 'spherical' ['full']
+% 'tied_cov' - 1 (Sigma) or 0 (Sigma_i) [0]
+% 'clamped_cov' - pass in clamped value, or [] if unclamped [ [] ]
+% 'clamped_mean' - pass in clamped value, or [] if unclamped [ [] ]
+% 'cov_prior' - Lambda_i, added to YY(:,:,i) [0.01*eye(d,d,Q)]
+%
+% Output
+% mu(:,q)
+% Sigma(:,:,q) 
+
+[dirichletPriorWeight, other] = process_options(...
+    varargin, 'dirichletPriorWeight', 0);
+
+[transmat, initState] = transmat_train_observed(hiddenData, nstates, ...
+						'dirichletPriorWeight', dirichletPriorWeight);
+
+% convert to obsData(:,t*nex)
+if ~iscell(obsData)
+  [D T Nex] = size(obsData);
+  obsData = reshape(obsData, D, T*Nex);
+else
+  obsData = cat(2, obsData{:});
+  hiddenData = cat(2,hiddenData{:});
+end
+[mu, Sigma] = condgaussTrainObserved(obsData, hiddenData(:), nstates, varargin{:});
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/mc_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function S = mc_sample(prior, trans, len, numex)
+% SAMPLE_MC Generate random sequences from a Markov chain.
+% STATE = SAMPLE_MC(PRIOR, TRANS, LEN) generates a sequence of length LEN.
+%
+% STATE = SAMPLE_MC(PRIOR, TRANS, LEN, N) generates N rows each of length LEN.
+
+if nargin==3
+  numex = 1;
+end
+
+S = zeros(numex,len);
+for i=1:numex
+  S(i, 1) = sample_discrete(prior);
+  for t=2:len
+    S(i, t) = sample_discrete(trans(S(i,t-1),:));
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/mc_sample_endstate.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function S = sample_mc_endstate(startprob, trans, endprob)
+% SAMPLE_MC_ENDSTATE Generate a random sequence from a Markov chain until enter the endstate.
+% seq = sample_mc(startprob, trans, endprob)
+
+% add an end state
+Q = size(trans,1);
+transprob = zeros(Q,Q+1);
+end_state = Q+1;
+for i=1:Q
+  for j=1:Q
+    transprob(i,j) = (1-endprob(i)) * trans(i,j);
+  end
+  transprob(i,end_state) = endprob(i);
+  %assert(approxeq(sum(transprob(i,:)), 1))
+end                  
+
+S = [];
+S(1) = sample_discrete(startprob);
+t = 1;
+p = endprob(S(t));
+stop = (S(1) == end_state);
+while ~stop
+  S(t+1) = sample_discrete(transprob(S(t),:));
+  stop = (S(t+1) == end_state);
+  t = t + 1;
+end
+S = S(1:end-1); % don't include end state
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/mdp_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function state = sample_mdp(prior, trans, act)
+% SAMPLE_MDP Sample a sequence of states from a Markov Decision Process.
+% state = sample_mdp(prior, trans, act)
+%
+% Inputs:
+% prior(i) = Pr(Q(1)=i)
+% trans{a}(i,j) = Pr(Q(t)=j | Q(t-1)=i, A(t)=a)
+% act(a) = A(t), so act(1) is ignored
+%
+% Output:
+% state is a vector of length T=length(act)
+
+len = length(act);
+state = zeros(1,len);
+state(1) = sample_discrete(prior);
+for t=2:len
+  state(t) = sample_discrete(trans{act(t)}(state(t-1),:));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/mhmmParzen_train_observed.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function [initState, transmat, mu, Nproto, pick] = mhmmParzen_train_observed(obsData, hiddenData, ...
+						  nstates, maxNproto, varargin)
+% mhmmParzentrain_observed  with mixture of Gaussian outputs from fully observed sequences
+% function [initState, transmat, mu, Nproto] = mhmm_train_observed_parzen(obsData, hiddenData, ...
+%						  nstates, maxNproto)
+%
+%
+% INPUT
+% If all sequences have the same length
+% obsData(:,t,ex) 
+% hiddenData(ex,t)  - must be ROW vector if only one sequence
+% If sequences have different lengths, we use cell arrays
+% obsData{ex}(:,t) 
+% hiddenData{ex}(t)
+%
+% Optional argumnets
+% dirichletPriorWeight - for smoothing transition matrix counts
+% mkSymmetric
+%
+% Output
+% mu(:,q)
+% Nproto(q) is the number of prototypes (mixture components) chosen for state q
+
+[transmat, initState] = transmat_train_observed(...
+    hiddenData, nstates, varargin{:});
+
+% convert to obsData(:,t*nex)
+if ~iscell(obsData)
+  [D T Nex] = size(obsData);
+  obsData = reshape(obsData, D, T*Nex);
+else
+  obsData = cat(2, obsData{:});
+  hiddenData = cat(2, hiddenData{:});
+end
+[mu, Nproto, pick] = parzen_fit_select_unif(obsData, hiddenData(:), maxNproto);
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/mhmm_em.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,173 @@
+function [LL, prior, transmat, mu, Sigma, mixmat] = ...
+     mhmm_em(data, prior, transmat, mu, Sigma, mixmat, varargin);
+% LEARN_MHMM Compute the ML parameters of an HMM with (mixtures of) Gaussians output using EM.
+% [ll_trace, prior, transmat, mu, sigma, mixmat] = learn_mhmm(data, ...
+%   prior0, transmat0, mu0, sigma0, mixmat0, ...) 
+%
+% Notation: Q(t) = hidden state, Y(t) = observation, M(t) = mixture variable
+%
+% INPUTS:
+% data{ex}(:,t) or data(:,t,ex) if all sequences have the same length
+% prior(i) = Pr(Q(1) = i), 
+% transmat(i,j) = Pr(Q(t+1)=j | Q(t)=i)
+% mu(:,j,k) = E[Y(t) | Q(t)=j, M(t)=k ]
+% Sigma(:,:,j,k) = Cov[Y(t) | Q(t)=j, M(t)=k]
+% mixmat(j,k) = Pr(M(t)=k | Q(t)=j) : set to [] or ones(Q,1) if only one mixture component
+%
+% Optional parameters may be passed as 'param_name', param_value pairs.
+% Parameter names are shown below; default values in [] - if none, argument is mandatory.
+%
+% 'max_iter' - max number of EM iterations [10]
+% 'thresh' - convergence threshold [1e-4]
+% 'verbose' - if 1, print out loglik at every iteration [1]
+% 'cov_type' - 'full', 'diag' or 'spherical' ['full']
+%
+% To clamp some of the parameters, so learning does not change them:
+% 'adj_prior' - if 0, do not change prior [1]
+% 'adj_trans' - if 0, do not change transmat [1]
+% 'adj_mix' - if 0, do not change mixmat [1]
+% 'adj_mu' - if 0, do not change mu [1]
+% 'adj_Sigma' - if 0, do not change Sigma [1]
+%
+% If the number of mixture components differs depending on Q, just set  the trailing
+% entries of mixmat to 0, e.g., 2 components if Q=1, 3 components if Q=2,
+% then set mixmat(1,3)=0. In this case, B2(1,3,:)=1.0.
+
+if ~isstr(varargin{1}) % catch old syntax
+  error('optional arguments should be passed as string/value pairs')
+end
+
+[max_iter, thresh, verbose, cov_type,  adj_prior, adj_trans, adj_mix, adj_mu, adj_Sigma] = ...
+    process_options(varargin, 'max_iter', 10, 'thresh', 1e-4, 'verbose', 1, ...
+		    'cov_type', 'full', 'adj_prior', 1, 'adj_trans', 1, 'adj_mix', 1, ...
+		    'adj_mu', 1, 'adj_Sigma', 1);
+  
+previous_loglik = -inf;
+loglik = 0;
+converged = 0;
+num_iter = 1;
+LL = [];
+
+if ~iscell(data)
+  data = num2cell(data, [1 2]); % each elt of the 3rd dim gets its own cell
+end
+numex = length(data);
+
+
+O = size(data{1},1);
+Q = length(prior);
+if isempty(mixmat)
+  mixmat = ones(Q,1);
+end
+M = size(mixmat,2);
+if M == 1
+  adj_mix = 0;
+end
+
+while (num_iter <= max_iter) & ~converged
+  % E step
+  [loglik, exp_num_trans, exp_num_visits1, postmix, m, ip, op] = ...
+      ess_mhmm(prior, transmat, mixmat, mu, Sigma, data);
+  
+  
+  % M step
+  if adj_prior
+    prior = normalise(exp_num_visits1);
+  end
+  if adj_trans 
+    transmat = mk_stochastic(exp_num_trans);
+  end
+  if adj_mix
+    mixmat = mk_stochastic(postmix);
+  end
+  if adj_mu | adj_Sigma
+    [mu2, Sigma2] = mixgauss_Mstep(postmix, m, op, ip, 'cov_type', cov_type);
+    if adj_mu
+      mu = reshape(mu2, [O Q M]);
+    end
+    if adj_Sigma
+      Sigma = reshape(Sigma2, [O O Q M]);
+    end
+  end
+  
+  if verbose, fprintf(1, 'iteration %d, loglik = %f\n', num_iter, loglik); end
+  num_iter =  num_iter + 1;
+  converged = em_converged(loglik, previous_loglik, thresh);
+  previous_loglik = loglik;
+  LL = [LL loglik];
+end
+
+
+%%%%%%%%%
+
+function [loglik, exp_num_trans, exp_num_visits1, postmix, m, ip, op] = ...
+    ess_mhmm(prior, transmat, mixmat, mu, Sigma, data)
+% ESS_MHMM Compute the Expected Sufficient Statistics for a MOG Hidden Markov Model.
+%
+% Outputs:
+% exp_num_trans(i,j)   = sum_l sum_{t=2}^T Pr(Q(t-1) = i, Q(t) = j| Obs(l))
+% exp_num_visits1(i)   = sum_l Pr(Q(1)=i | Obs(l))
+%
+% Let w(i,k,t,l) = P(Q(t)=i, M(t)=k | Obs(l))
+% where Obs(l) = Obs(:,:,l) = O_1 .. O_T for sequence l
+% Then 
+% postmix(i,k) = sum_l sum_t w(i,k,t,l) (posterior mixing weights/ responsibilities)
+% m(:,i,k)   = sum_l sum_t w(i,k,t,l) * Obs(:,t,l)
+% ip(i,k) = sum_l sum_t w(i,k,t,l) * Obs(:,t,l)' * Obs(:,t,l)
+% op(:,:,i,k) = sum_l sum_t w(i,k,t,l) * Obs(:,t,l) * Obs(:,t,l)'
+
+
+verbose = 0;
+
+%[O T numex] = size(data);
+numex = length(data);
+O = size(data{1},1);
+Q = length(prior);
+M = size(mixmat,2);
+exp_num_trans = zeros(Q,Q);
+exp_num_visits1 = zeros(Q,1);
+postmix = zeros(Q,M);
+m = zeros(O,Q,M);
+op = zeros(O,O,Q,M);
+ip = zeros(Q,M);
+
+mix = (M>1);
+
+loglik = 0;
+if verbose, fprintf(1, 'forwards-backwards example # '); end
+for ex=1:numex
+  if verbose, fprintf(1, '%d ', ex); end
+  %obs = data(:,:,ex);
+  obs = data{ex};
+  T = size(obs,2);
+  if mix
+    [B, B2] = mixgauss_prob(obs, mu, Sigma, mixmat);
+    [alpha, beta, gamma,  current_loglik, xi, gamma2] = ...
+	fwdback(prior, transmat, B, 'obslik2', B2, 'mixmat', mixmat);
+  else
+    B = mixgauss_prob(obs, mu, Sigma);
+    [alpha, beta, gamma,  current_loglik, xi] = fwdback(prior, transmat, B);
+  end    
+  loglik = loglik +  current_loglik; 
+  if verbose, fprintf(1, 'll at ex %d = %f\n', ex, loglik); end
+
+  exp_num_trans = exp_num_trans + sum(xi,3);
+  exp_num_visits1 = exp_num_visits1 + gamma(:,1);
+  
+  if mix
+    postmix = postmix + sum(gamma2,3);
+  else
+    postmix = postmix + sum(gamma,2); 
+    gamma2 = reshape(gamma, [Q 1 T]); % gamma2(i,m,t) = gamma(i,t)
+  end
+  for i=1:Q
+    for k=1:M
+      w = reshape(gamma2(i,k,:), [1 T]); % w(t) = w(i,k,t,l)
+      wobs = obs .* repmat(w, [O 1]); % wobs(:,t) = w(t) * obs(:,t)
+      m(:,i,k) = m(:,i,k) + sum(wobs, 2); % m(:) = sum_t w(t) obs(:,t)
+      op(:,:,i,k) = op(:,:,i,k) + wobs * obs'; % op(:,:) = sum_t w(t) * obs(:,t) * obs(:,t)'
+      ip(i,k) = ip(i,k) + sum(sum(wobs .* obs, 2)); % ip = sum_t w(t) * obs(:,t)' * obs(:,t)
+    end
+  end
+end
+if verbose, fprintf(1, '\n'); end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/mhmm_em_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+if 1
+  O = 4;
+  T = 10;
+  nex = 50;
+  M = 2;
+  Q = 3;
+else
+  O = 8;          %Number of coefficients in a vector 
+  T = 420;         %Number of vectors in a sequence 
+  nex = 1;        %Number of sequences 
+  M = 1;          %Number of mixtures 
+  Q = 6;          %Number of states 
+end
+cov_type = 'full';
+
+data = randn(O,T,nex);
+
+% initial guess of parameters
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+
+if 0
+  Sigma0 = repmat(eye(O), [1 1 Q M]);
+  % Initialize each mean to a random data point
+  indices = randperm(T*nex);
+  mu0 = reshape(data(:,indices(1:(Q*M))), [O Q M]);
+  mixmat0 = mk_stochastic(rand(Q,M));
+else
+  [mu0, Sigma0] = mixgauss_init(Q*M, data, cov_type);
+  mu0 = reshape(mu0, [O Q M]);
+  Sigma0 = reshape(Sigma0, [O O Q M]);
+  mixmat0 = mk_stochastic(rand(Q,M));
+end
+
+[LL, prior1, transmat1, mu1, Sigma1, mixmat1] = ...
+    mhmm_em(data, prior0, transmat0, mu0, Sigma0, mixmat0, 'max_iter', 5);
+
+
+loglik = mhmm_logprob(data, prior1, transmat1, mu1, Sigma1, mixmat1);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/mhmm_logprob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function [loglik, errors] = mhmm_logprob(data, prior, transmat, mu, Sigma, mixmat)
+% LOG_LIK_MHMM Compute the log-likelihood of a dataset using a (mixture of) Gaussians HMM
+% [loglik, errors] = log_lik_mhmm(data, prior, transmat, mu, sigma, mixmat)
+%
+% data{m}(:,t) or data(:,t,m) if all cases have same length
+% errors  is a list of the cases which received a loglik of -infinity
+%
+% Set mixmat to ones(Q,1) or omit it if there is only 1 mixture component
+
+Q = length(prior);
+if size(mixmat,1) ~= Q % trap old syntax
+  error('mixmat should be QxM')
+end
+if nargin < 6, mixmat = ones(Q,1); end
+
+if ~iscell(data)
+  data = num2cell(data, [1 2]); % each elt of the 3rd dim gets its own cell
+end
+ncases = length(data);
+
+loglik = 0;
+errors = [];
+for m=1:ncases
+  obslik = mixgauss_prob(data{m}, mu, Sigma, mixmat);
+  [alpha, beta, gamma, ll] = fwdback(prior, transmat, obslik, 'fwd_only', 1);
+  if ll==-inf
+    errors = [errors m];
+  end
+  loglik = loglik + ll;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/mhmm_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function [obs, hidden] = mhmm_sample(T, numex, initial_prob, transmat, mu, Sigma, mixmat)
+% SAMPLE_MHMM Generate random sequences from an HMM with (mixtures of) Gaussian output.
+% [obs, hidden] = sample_mhmm(T, numex, initial_prob, transmat, mu, Sigma, mixmat)
+%
+% INPUTS:
+% T - length of each sequence
+% numex - num. sequences
+% init_state_prob(i) = Pr(Q(1) = i)
+% transmat(i,j) = Pr(Q(t+1)=j | Q(t)=i)
+% mu(:,j,k) = mean of Y(t) given Q(t)=j, M(t)=k
+% Sigma(:,:,j,k) = cov. of Y(t) given Q(t)=j, M(t)=k
+% mixmat(j,k) = Pr(M(t)=k | Q(t)=j) : set to ones(Q,1) or omit if single mixture
+%
+% OUTPUT:
+% obs(:,t,l) = observation vector at time t for sequence l
+% hidden(t,l) = the hidden state at time t for sequence l
+
+Q = length(initial_prob);
+if nargin < 7, mixmat = ones(Q,1); end
+O = size(mu,1);
+hidden = zeros(T, numex);
+obs = zeros(O, T, numex);
+
+hidden = mc_sample(initial_prob, transmat, T, numex)';
+for i=1:numex
+  for t=1:T
+    q = hidden(t,i);
+    m = sample_discrete(mixmat(q,:), 1, 1);
+    obs(:,t,i) =  gaussian_sample(mu(:,q,m), Sigma(:,:,q,m), 1);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/mk_leftright_transmat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function transmat = mk_leftright_transmat(Q, p)
+% MK_LEFTRIGHT_TRANSMAT Q = num states, p = prob on (i,i), 1-p on (i,i+1)
+% function transmat = mk_leftright_transmat(Q, p)
+
+transmat = p*diag(ones(Q,1)) + (1-p)*diag(ones(Q-1,1),1);
+transmat(Q,Q)=1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/mk_rightleft_transmat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function transmat = mk_rightleft_transmat(Q, p)
+% MK_RIGHTLEFT_TRANSMAT Q = num states, p = prob on (i,i), 1-p on (i,i+1)
+% function transmat = mk_rightleft_transmat(Q, p)
+
+transmat = p*diag(ones(Q,1)) + (1-p)*diag(ones(Q-1,1),-1);
+transmat(1,1)=1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/pomdp_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function [obs, hidden] = pomdp_sample(initial_prob, transmat, obsmat, act)
+% SAMPLE_POMDP Generate a random sequence from a Partially Observed Markov Decision Process.
+% [obs, hidden] = sample_pomdp(prior, transmat, obsmat, act)
+%
+% Inputs:
+% prior(i) = Pr(Q(1)=i)
+% transmat{a}(i,j) = Pr(Q(t)=j | Q(t-1)=i, A(t)=a)
+% obsmat(i,k) = Pr(Y(t)=k | Q(t)=i)
+% act(a) = A(t), so act(1) is ignored
+%
+% Output:
+% obs and hidden are vectors of length T=length(act)
+
+
+len = length(act);
+hidden = mdp_sample(initial_prob, transmat, act);
+obs = zeros(1, len);
+for t=1:len
+  obs(t) = sample_discrete(obsmat(hidden(t),:));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/testHMM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+% Run all the demos, to check everything is "syntactically correct"
+mhmm_em_demo
+dhmm_em_demo
+dhmm_em_online_demo
+fixed_lag_smoother_demo
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/transmat_train_observed.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function [transmat, initState] = transmat_train_observed(labels,  nstates, varargin)
+% transmat_train_observed ML estimation from fully observed data
+% function [transmat, initState] = transmat_train_observed(labels,  nstates, varargin)
+%
+% If all sequences have the same length
+% labels(ex,t)
+% If sequences have different lengths, we use cell arrays
+% labels{ex}(t)
+
+[dirichletPriorWeight, mkSymmetric, other] = process_options(...
+    varargin, 'dirichletPriorWeight', 0, 'mkSymmetric', 0);
+
+if ~iscell(labels)
+  [numex T] = size(labels);
+  if T==1
+    labels = labels';
+  end
+  %fprintf('T=%d, numex=%d\n', T, numex);
+  labels = num2cell(labels,2); % each row gets its own cell
+end
+numex = length(labels);
+
+counts = zeros(nstates, nstates);
+counts1 = zeros(nstates,1);
+for s=1:numex
+  labs = labels{s}; labs = labs(:)';
+  dat = [labs(1:end-1); labs(2:end)];
+  counts = counts + compute_counts(dat, [nstates nstates]);
+  q = labs(1);
+  counts1(q) = counts1(q) + 1;
+end
+pseudo_counts = dirichletPriorWeight*ones(nstates, nstates);
+if mkSymmetric
+  counts = counts + counts';
+end
+transmat = mk_stochastic(counts + pseudo_counts);
+initState = normalize(counts1 + dirichletPriorWeight*ones(nstates,1));
+
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/HMM/viterbi_path.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+function path = viterbi_path(prior, transmat, obslik)
+% VITERBI Find the most-probable (Viterbi) path through the HMM state trellis.
+% path = viterbi(prior, transmat, obslik)
+%
+% Inputs:
+% prior(i) = Pr(Q(1) = i)
+% transmat(i,j) = Pr(Q(t+1)=j | Q(t)=i)
+% obslik(i,t) = Pr(y(t) | Q(t)=i)
+%
+% Outputs:
+% path(t) = q(t), where q1 ... qT is the argmax of the above expression.
+
+
+% delta(j,t) = prob. of the best sequence of length t-1 and then going to state j, and O(1:t)
+% psi(j,t) = the best predecessor state, given that we ended up in state j at t
+
+scaled = 1;
+
+T = size(obslik, 2);
+prior = prior(:);
+Q = length(prior);
+
+delta = zeros(Q,T);
+psi = zeros(Q,T);
+path = zeros(1,T);
+scale = ones(1,T);
+
+
+t=1;
+delta(:,t) = prior .* obslik(:,t);
+if scaled
+  [delta(:,t), n] = normalise(delta(:,t));
+  scale(t) = 1/n;
+end
+psi(:,t) = 0; % arbitrary value, since there is no predecessor to t=1
+for t=2:T
+  for j=1:Q
+    [delta(j,t), psi(j,t)] = max(delta(:,t-1) .* transmat(:,j));
+    delta(j,t) = delta(j,t) * obslik(j,t);
+  end
+  if scaled
+    [delta(:,t), n] = normalise(delta(:,t));
+    scale(t) = 1/n;
+  end
+end
+[p, path(T)] = max(delta(:,T));
+for t=T-1:-1:1
+  path(t) = psi(path(t+1),t+1);
+end
+
+% If scaled==0, p = prob_path(best_path)
+% If scaled==1, p = Pr(replace sum with max and proceed as in the scaled forwards algo)
+% Both are different from p(data) as computed using the sum-product (forwards) algorithm
+
+if 0
+if scaled
+  loglik = -sum(log(scale));
+  %loglik = prob_path(prior, transmat, obslik, path);
+else
+  loglik = log(p);
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+/KLgauss.m/1.1.1.1/Tue Apr 26 02:29:16 2005//
+/README.txt/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/beta_sample.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/chisquared_histo.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/chisquared_prob.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/chisquared_readme.txt/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/chisquared_table.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/clg_Mstep.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/clg_Mstep_simple.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/clg_prob.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/condGaussToJoint.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/cond_indep_fisher_z.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/condgaussTrainObserved.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/condgauss_sample.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/convertBinaryLabels.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/cwr_demo.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/cwr_em.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/cwr_predict.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/cwr_prob.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/cwr_readme.txt/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/cwr_test.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/dirichlet_sample.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/dirichletpdf.m/1.1.1.1/Sun May 22 23:32:18 2005//
+/dirichletrnd.m/1.1.1.1/Sun May 22 23:32:12 2005//
+/distchck.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/eigdec.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/est_transmat.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/fit_paritioned_model_testfn.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/fit_partitioned_model.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/gamma_sample.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/gaussian_prob.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/gaussian_sample.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/histCmpChi2.m/1.1.1.1/Tue May  3 20:18:16 2005//
+/linear_regression.m/1.1.1.1/Tue Apr 26 02:29:18 2005//
+/logist2.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/logist2Apply.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/logist2ApplyRegularized.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/logist2Fit.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/logist2FitRegularized.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/logistK.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/logistK_eval.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/marginalize_gaussian.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/matrix_T_pdf.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/matrix_normal_pdf.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/mc_stat_distrib.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/mixgauss_Mstep.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/mixgauss_classifier_apply.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/mixgauss_classifier_train.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/mixgauss_em.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/mixgauss_init.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/mixgauss_prob.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/mixgauss_prob_test.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/mixgauss_sample.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/mkPolyFvec.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/mk_unit_norm.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/multinomial_prob.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/multinomial_sample.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/multipdf.m/1.1.1.1/Sun May 22 23:32:42 2005//
+/multirnd.m/1.1.1.1/Sun May 22 23:32:38 2005//
+/normal_coef.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/partial_corr_coef.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/parzen.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/parzenC.c/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/parzenC.dll/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/parzenC.mexglx/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/parzenC_test.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/parzen_fit_select_unif.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/pca.m/1.1.1.1/Tue Apr 26 02:29:20 2005//
+/rndcheck.m/1.1.1.1/Tue Apr 26 02:29:22 2005//
+/sample.m/1.1.1.1/Tue Apr 26 02:29:22 2005//
+/sample_discrete.m/1.1.1.1/Tue Apr 26 02:29:22 2005//
+/sample_gaussian.m/1.1.1.1/Tue Apr 26 02:29:22 2005//
+/standardize.m/1.1.1.1/Wed May  4 04:35:36 2005//
+/student_t_logprob.m/1.1.1.1/Tue Apr 26 02:29:22 2005//
+/student_t_prob.m/1.1.1.1/Tue Apr 26 02:29:22 2005//
+/test_dir.m/1.1.1.1/Sun May 22 23:32:20 2005//
+/unidrndKPM.m/1.1.1.1/Tue May 31 18:19:24 2005//
+/unif_discrete_sample.m/1.1.1.1/Tue Apr 26 02:29:22 2005//
+/weightedRegression.m/1.1.1.1/Tue Apr 26 02:29:22 2005//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/KPMstats
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/KLgauss.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function kl = KLgauss(P, Q)
+%The following computes D(P||Q), the KL divergence between two zero-mean
+%Gaussians with covariance P and Q:
+%  klDiv = -0.5*(log(det(P*inv(Q))) + trace(eye(N)-P*inv(Q)));
+
+R = P*inv(Q);
+kl = -0.5*(log(det(R))) + trace(eye(length(P))-R);
+
+%To get MI, just set P=cov(X,Y) and Q=blockdiag(cov(X),cov(Y)).  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/README.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+KPMstats is a directory of miscellaneous statistics functions written by
+Kevin Patrick Murphy and various other people (see individual file headers).
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/beta_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+function r = betarnd(a,b,m,n);
+%BETARND Random matrices from beta distribution.
+%   R = BETARND(A,B) returns a matrix of random numbers chosen   
+%   from the beta distribution with parameters A and B.
+%   The size of R is the common size of A and B if both are matrices.
+%   If either parameter is a scalar, the size of R is the size of the other
+%   parameter. Alternatively, R = BETARND(A,B,M,N) returns an M by N matrix. 
+
+%   Reference:
+%      [1]  L. Devroye, "Non-Uniform Random Variate Generation", 
+%      Springer-Verlag, 1986
+
+%   Copyright (c) 1993-98 by The MathWorks, Inc.
+%   $Revision: 1.1.1.1 $  $Date: 2005/04/26 02:29:18 $
+
+if nargin < 2, 
+    error('Requires at least two input arguments'); 
+end 
+
+if nargin == 2
+    [errorcode rows columns] = rndcheck(2,2,a,b);
+end
+
+if nargin == 3
+    [errorcode rows columns] = rndcheck(3,2,a,b,m);
+end
+
+if nargin == 4
+    [errorcode rows columns] = rndcheck(4,2,a,b,m,n);
+end
+
+if errorcode > 0
+    error('Size information is inconsistent.');
+end
+
+r = zeros(rows,columns);
+
+% Use Theorem 4.1, case A (Devroye, page 430) to derive beta
+%   random numbers as a ratio of gamma random numbers.
+if prod(size(a)) == 1
+    a1 = a(ones(rows,1),ones(columns,1));
+    g1 = gamrnd(a1,1);
+else
+    g1 = gamrnd(a,1);
+end
+if prod(size(b)) == 1
+    b1 = b(ones(rows,1),ones(columns,1));
+    g2 = gamrnd(b1,1);
+else
+    g2 = gamrnd(b,1);
+end
+r = g1 ./ (g1 + g2);
+
+% Return NaN if b is not positive.
+if any(any(b <= 0));
+    if prod(size(b) == 1)
+        tmp = NaN;
+        r = tmp(ones(rows,columns));
+    else
+        k = find(b <= 0);
+        tmp = NaN;
+        r(k) = tmp(ones(size(k)));
+    end
+end
+
+% Return NaN if a is not positive.
+if any(any(a <= 0));
+    if prod(size(a) == 1)
+        tmp = NaN;
+        r = tmp(ones(rows,columns));
+    else
+        k = find(a <= 0);
+        tmp = NaN;
+        r(k) = tmp(ones(size(k)));
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/chisquared_histo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function s = chisquared_histo(h1, h2)
+% Measure distance between 2 histograms (small numbers means more similar)
+denom = h1 + h2;
+denom = denom + (denom==0);
+s = sum(((h1 - h2) .^ 2) ./ denom);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/chisquared_prob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+function P = chisquared_prob(X2,v)
+%CHISQUARED_PROB computes the chi-squared probability function.
+%   P = CHISQUARED_PROB( X2, v ) returns P(X2|v), the probability
+%   of observing a chi-squared value <= X2 with v degrees of freedom.
+%   This is the probability that the sum of squares of v unit-variance
+%   normally-distributed random variables is <= X2.
+%   X2 and v may be matrices of the same size size, or either 
+%   may be a scalar.
+%   
+%   e.g., CHISQUARED_PROB(5.99,2) returns 0.9500, verifying the
+%   95% confidence bound for 2 degrees of freedom. This is also
+%   cross-checked in, e.g., Abramowitz & Stegun Table 26.8
+%
+%   See also CHISQUARED_TABLE
+%
+%Peter R. Shaw, WHOI
+
+% References: Press et al., Numerical Recipes, Cambridge, 1986;
+% Abramowitz & Stegun, Handbook of Mathematical Functions, Dover, 1972.
+
+% Peter R. Shaw, Woods Hole Oceanographic Institution
+% Woods Hole, MA 02543
+% (508) 457-2000 ext. 2473  pshaw@whoi.edu
+% March, 1990; fixed Oct 1992 for version 4
+
+% Computed using the Incomplete Gamma function,
+% as given by Press et al. (Recipes) eq. (6.2.17)
+
+% Following nonsense is necessary from Matlab version 3 -> version 4
+versn_str=version; eval(['versn=' versn_str(1) ';']);
+if versn<=3, %sigh
+ P = gamma(v/2, X2/2);
+else
+ P = gammainc(X2/2, v/2);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/chisquared_readme.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+From ftp://ftp.mathworks.com/pub/contrib/v4/stats/chisquared/
+
+Chi-squared probability function.
+
+Abstract 
+m-files to compute the Chi-squared probability function, and
+the percentage points of the probability function.
+
+P = CHISQUARED_PROB( X2, v ) returns P(X2|v), the probability
+of observing a chi-squared value <= X2 with v degrees of freedom.
+This is the probability that the sum of squares of v unit-variance
+normally-distributed random variables is <= X2.
+
+Conversely:
+X2 = CHISQUARED_TABLE( P, v ) returns the X2, the value of
+chi-squared corresponding to v degrees of freedom and probability P.
+
+In reference textbooks, what is normally tabulated are the
+percentage points of the chi-squared distribution; thus, one
+would use CHISQUARED_TABLE rather than interpolate such a table.
+
+References: Press et al., Numerical Recipes, Cambridge, 1986;
+Abramowitz & Stegun, Handbook of Mathematical Functions,
+Dover, 1972;  Table 26.8
+
+Peter R. Shaw
+Woods Hole Oceanographic Institution, Woods Hole, MA 02543
+(508) 457-2000 ext. 2473
+pshaw@whoi.edu
+
+--FILES GENERATED--
+README_chisq
+chisquared_prob.m  (function) -- chi-squared probability function
+chisquared_table.m  (function) -- "percentage points" (i.e., inverse)
+                                   of chi-squared probability function
+chiaux.m (function) -- auxiliary fn. used by chisquared_table
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/chisquared_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,63 @@
+function X2 = chisquared_table(P,v)
+%CHISQUARED_TABLE computes the "percentage points" of the
+%chi-squared distribution, as in Abramowitz & Stegun Table 26.8
+%   X2 = CHISQUARED_TABLE( P, v ) returns the value of chi-squared 
+%   corresponding to v degrees of freedom and probability P.
+%   P is the probability that the sum of squares of v unit-variance
+%   normally-distributed random variables is <= X2.
+%   P and v may be matrices of the same size size, or either 
+%   may be a scalar.
+%
+%   e.g., to find the 95% confidence interval for 2 degrees
+%   of freedom, use CHISQUARED_TABLE( .95, 2 ), yielding 5.99,
+%   in agreement with Abramowitz & Stegun's Table 26.8
+%
+%   This result can be checked through the function
+%   CHISQUARED_PROB( 5.99, 2 ), yielding 0.9500
+%
+%   The familiar 1.96-sigma confidence bounds enclosing 95% of
+%   a 1-D gaussian is found through 
+%   sqrt( CHISQUARED_TABLE( .95, 1 )), yielding 1.96
+%
+%   See also CHISQUARED_PROB
+%
+%Peter R. Shaw, WHOI
+%Leslie Rosenfeld, MBARI
+
+% References: Press et al., Numerical Recipes, Cambridge, 1986;
+% Abramowitz & Stegun, Handbook of Mathematical Functions, Dover, 1972.
+
+% Peter R. Shaw, Woods Hole Oceanographic Institution
+% Woods Hole, MA 02543  pshaw@whoi.edu
+% Leslie Rosenfeld, MBARI
+% Last revision: Peter Shaw, Oct 1992: fsolve with version 4
+
+% ** Calls function CHIAUX  **
+% Computed using the Incomplete Gamma function,
+% as given by Press et al. (Recipes) eq. (6.2.17)
+
+[mP,nP]=size(P);
+[mv,nv]=size(v);
+if mP~=mv | nP~=nv, 
+  if mP==1 & nP==1,
+    P=P*ones(mv,nv);
+  elseif mv==1 & nv==1,
+    v=v*ones(mP,nP);
+  else
+    error('P and v must be the same size')
+  end
+end
+[m,n]=size(P);  X2 = zeros(m,n);
+for i=1:m,
+ for j=1:n,
+  if v(i,j)<=10, 
+   x0=P(i,j)*v(i,j);
+  else
+   x0=v(i,j);
+  end
+% Note: "old" and "new" calls to fsolve may or may not follow 
+% Matlab version 3.5 -> version 4 (so I'm keeping the old call around...)
+%   X2(i,j) = fsolve('chiaux',x0,zeros(16,1),[v(i,j),P(i,j)]); %(old call)
+   X2(i,j) = fsolve('chiaux',x0,zeros(16,1),[],[v(i,j),P(i,j)]);
+ end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/clg_Mstep.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,203 @@
+function [mu, Sigma, B] = clg_Mstep(w, Y, YY, YTY, X, XX, XY, varargin)
+% MSTEP_CLG Compute ML/MAP estimates for a conditional linear Gaussian
+% [mu, Sigma, B] = Mstep_clg(w, Y, YY, YTY, X, XX, XY, varargin)
+%
+% We fit P(Y|X,Q=i) = N(Y; B_i X + mu_i, Sigma_i) 
+% and w(i,t) = p(M(t)=i|y(t)) = posterior responsibility
+% See www.ai.mit.edu/~murphyk/Papers/learncg.pdf.
+%
+% See process_options for how to specify the input arguments.
+%
+% INPUTS:
+% w(i) = sum_t w(i,t) = responsibilities for each mixture component
+%  If there is only one mixture component (i.e., Q does not exist),
+%  then w(i) = N = nsamples,  and 
+%  all references to i can be replaced by 1.
+% Y(:,i) = sum_t w(i,t) y(:,t) = weighted observations
+% YY(:,:,i) = sum_t w(i,t) y(:,t) y(:,t)' = weighted outer product
+% YTY(i) = sum_t w(i,t) y(:,t)' y(:,t) = weighted inner product
+%   You only need to pass in YTY if Sigma is to be estimated as spherical.
+%
+% In the regression context, we must also pass in the following
+% X(:,i) = sum_t w(i,t) x(:,t) = weighted inputs
+% XX(:,:,i) = sum_t w(i,t) x(:,t) x(:,t)' = weighted outer product
+% XY(i) = sum_t w(i,t) x(:,t) y(:,t)' = weighted outer product
+%
+% Optional inputs (default values in [])
+%
+% 'cov_type' - 'full', 'diag' or 'spherical' ['full']
+% 'tied_cov' - 1 (Sigma) or 0 (Sigma_i) [0]
+% 'clamped_cov' - pass in clamped value, or [] if unclamped [ [] ]
+% 'clamped_mean' - pass in clamped value, or [] if unclamped [ [] ]
+% 'clamped_weights' - pass in clamped value, or [] if unclamped [ [] ]
+% 'cov_prior' - added to Sigma(:,:,i) to ensure psd [0.01*eye(d,d,Q)]
+%
+% If cov is tied, Sigma has size d*d.
+% But diagonal and spherical covariances are represented in full size.
+
+[cov_type, tied_cov, ...
+ clamped_cov, clamped_mean, clamped_weights,  cov_prior, ...
+ xs, ys, post] = ...
+    process_options(varargin, ...
+		    'cov_type', 'full', 'tied_cov', 0,  'clamped_cov', [], 'clamped_mean', [], ...
+		    'clamped_weights', [], 'cov_prior', [], ...
+		    'xs', [], 'ys', [], 'post', []);
+
+[Ysz Q] = size(Y);
+
+if isempty(X) % no regression
+  %B = [];
+  B2 = zeros(Ysz, 1, Q);
+  for i=1:Q
+    B(:,:,i) = B2(:,1:0,i); % make an empty array of size Ysz x 0 x Q
+  end
+  [mu, Sigma] = mixgauss_Mstep(w, Y, YY, YTY, varargin{:});
+  return;
+end
+
+
+N = sum(w);
+if isempty(cov_prior)
+  cov_prior = 0.01*repmat(eye(Ysz,Ysz), [1 1 Q]);
+end
+%YY = YY + cov_prior; % regularize the scatter matrix
+
+% Set any zero weights to one before dividing
+% This is valid because w(i)=0 => Y(:,i)=0, etc
+w = w + (w==0);
+
+Xsz = size(X,1);
+% Append 1 to X to get Z
+ZZ = zeros(Xsz+1, Xsz+1, Q);
+ZY = zeros(Xsz+1, Ysz, Q);
+for i=1:Q
+  ZZ(:,:,i) = [XX(:,:,i)  X(:,i);
+	       X(:,i)'    w(i)];
+  ZY(:,:,i) = [XY(:,:,i);
+	       Y(:,i)'];
+end
+
+
+%%% Estimate mean and regression 
+
+if ~isempty(clamped_weights) & ~isempty(clamped_mean)
+  B = clamped_weights;
+  mu = clamped_mean;
+end
+if ~isempty(clamped_weights) & isempty(clamped_mean)
+  B = clamped_weights;
+  % eqn 5
+  mu = zeros(Ysz, Q);
+  for i=1:Q
+    mu(:,i) = (Y(:,i) - B(:,:,i)*X(:,i)) / w(i);
+  end
+end
+if isempty(clamped_weights) & ~isempty(clamped_mean)
+  mu = clamped_mean;
+  % eqn 3
+  B = zeros(Ysz, Xsz, Q);
+  for i=1:Q
+    tmp = XY(:,:,i)' - mu(:,i)*X(:,i)';
+    %B(:,:,i) = tmp * inv(XX(:,:,i));
+    B(:,:,i) = (XX(:,:,i) \ tmp')';
+  end
+end
+if isempty(clamped_weights) & isempty(clamped_mean)
+  mu = zeros(Ysz, Q);
+  B = zeros(Ysz, Xsz, Q);
+  % Nothing is clamped, so we must estimate B and mu jointly
+  for i=1:Q
+    % eqn 9
+    if rcond(ZZ(:,:,i)) < 1e-10
+      sprintf('clg_Mstep warning: ZZ(:,:,%d) is ill-conditioned', i);
+      % probably because there are too few cases for a high-dimensional input
+      ZZ(:,:,i) = ZZ(:,:,i) + 1e-5*eye(Xsz+1);
+    end
+    %A = ZY(:,:,i)' * inv(ZZ(:,:,i));
+    A = (ZZ(:,:,i) \ ZY(:,:,i))';
+    B(:,:,i) = A(:, 1:Xsz);
+    mu(:,i) = A(:, Xsz+1);
+  end
+end
+
+if ~isempty(clamped_cov)
+  Sigma = clamped_cov;
+  return;
+end
+
+
+%%% Estimate covariance
+
+% Spherical
+if cov_type(1)=='s'
+  if ~tied_cov
+    Sigma = zeros(Ysz, Ysz, Q);
+    for i=1:Q
+      % eqn 16
+      A = [B(:,:,i) mu(:,i)];
+      %s = trace(YTY(i) + A'*A*ZZ(:,:,i) - 2*A*ZY(:,:,i)) / (Ysz*w(i)); % wrong!
+      s = (YTY(i) + trace(A'*A*ZZ(:,:,i)) - trace(2*A*ZY(:,:,i))) / (Ysz*w(i));
+      Sigma(:,:,i) = s*eye(Ysz,Ysz);
+
+      %%%%%%%%%%%%%%%%%%% debug
+      if ~isempty(xs)
+	[nx T] = size(xs);
+	zs = [xs; ones(1,T)];
+	yty = 0;
+	zAAz = 0;
+	yAz = 0;
+	for t=1:T
+	  yty = yty + ys(:,t)'*ys(:,t) * post(i,t);
+	  zAAz = zAAz + zs(:,t)'*A'*A*zs(:,t)*post(i,t);
+	  yAz = yAz + ys(:,t)'*A*zs(:,t)*post(i,t);
+	end
+	assert(approxeq(yty, YTY(i)))
+	assert(approxeq(zAAz, trace(A'*A*ZZ(:,:,i))))
+	assert(approxeq(yAz, trace(A*ZY(:,:,i))))
+	s2 = (yty + zAAz - 2*yAz) / (Ysz*w(i));
+	assert(approxeq(s,s2))
+      end
+      %%%%%%%%%%%%%%% end debug
+      
+    end
+  else
+    S = 0;
+    for i=1:Q
+      % eqn 18
+      A = [B(:,:,i) mu(:,i)];
+      S = S + trace(YTY(i) + A'*A*ZZ(:,:,i) - 2*A*ZY(:,:,i));
+    end
+    Sigma = repmat(S / (N*Ysz), [1 1 Q]);
+  end
+else % Full/diagonal
+  if ~tied_cov
+    Sigma = zeros(Ysz, Ysz, Q);
+    for i=1:Q
+      A = [B(:,:,i) mu(:,i)];
+      % eqn 10
+      SS = (YY(:,:,i) - ZY(:,:,i)'*A' - A*ZY(:,:,i) + A*ZZ(:,:,i)*A') / w(i);
+      if cov_type(1)=='d'
+	Sigma(:,:,i) = diag(diag(SS));
+      else
+	Sigma(:,:,i) = SS;
+      end
+    end
+  else % tied
+    SS = zeros(Ysz, Ysz);
+    for i=1:Q
+      A = [B(:,:,i) mu(:,i)];
+      % eqn 13
+      SS = SS + (YY(:,:,i) - ZY(:,:,i)'*A' - A*ZY(:,:,i) + A*ZZ(:,:,i)*A');
+    end
+    SS = SS / N;
+    if cov_type(1)=='d'
+      Sigma = diag(diag(SS));
+    else
+      Sigma = SS;
+    end
+    Sigma = repmat(Sigma, [1 1 Q]);
+  end
+end
+
+Sigma = Sigma + cov_prior;
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/clg_Mstep_simple.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function [mu, B] = clg_Mstep_simple(w, Y, YY, YTY, X, XX, XY)
+% CLG_MSTEP_SIMPLE Same as CLG_MSTEP, but doesn;t estimate Sigma,  so is slightly faster
+% function [mu, B] = clg_Mstep_simple(w, Y, YY, YTY, X, XX, XY)
+%
+% See clg_Mstep for details.
+% Unlike clg_Mstep, there are no optional arguments, which are slow to process
+% if this function is inside a tight loop.
+
+[Ysz Q] = size(Y);
+
+if isempty(X) % no regression
+  %B = [];
+  B2 = zeros(Ysz, 1, Q);
+  for i=1:Q
+    B(:,:,i) = B2(:,1:0,i); % make an empty array of size Ysz x 0 x Q
+  end
+  [mu, Sigma] = mixgauss_Mstep(w, Y, YY, YTY);
+  return;
+end
+
+N = sum(w);
+%YY = YY + cov_prior; % regularize the scatter matrix
+
+% Set any zero weights to one before dividing
+% This is valid because w(i)=0 => Y(:,i)=0, etc
+w = w + (w==0);
+
+Xsz = size(X,1);
+% Append 1 to X to get Z
+ZZ = zeros(Xsz+1, Xsz+1, Q);
+ZY = zeros(Xsz+1, Ysz, Q);
+for i=1:Q
+  ZZ(:,:,i) = [XX(:,:,i)  X(:,i);
+	       X(:,i)'    w(i)];
+  ZY(:,:,i) = [XY(:,:,i);
+	       Y(:,i)'];
+end
+
+mu = zeros(Ysz, Q);
+B = zeros(Ysz, Xsz, Q);
+for i=1:Q
+  % eqn 9
+  if rcond(ZZ(:,:,i)) < 1e-10
+    sprintf('clg_Mstep warning: ZZ(:,:,%d) is ill-conditioned', i);
+    %probably because there are too few cases for a high-dimensional input
+    ZZ(:,:,i) = ZZ(:,:,i) + 1e-5*eye(Xsz+1);
+  end
+  %A = ZY(:,:,i)' * inv(ZZ(:,:,i));
+  A = (ZZ(:,:,i) \ ZY(:,:,i))';
+  B(:,:,i) = A(:, 1:Xsz);
+  mu(:,i) = A(:, Xsz+1);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/clg_prob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function p = eval_pdf_clg(X,Y,mu,Sigma,W)
+% function p = eval_pdf_clg(X,Y,mu,Sigma,W)
+%
+% p(c,t) = N(Y(:,t); mu(:,c) + W(:,:,c)*X(:,t), Sigma(:,:,c))
+
+[d T] = size(Y);
+[d nc] = size(mu);
+p = zeros(nc,T);
+for c=1:nc
+  denom = (2*pi)^(d/2)*sqrt(abs(det(Sigma(:,:,c))));
+  M = repmat(mu(:,c), 1, T) + W(:,:,c)*X;
+  mahal = sum(((Y-M)'*inv(Sigma(:,:,c))).*(Y-M)',2); 
+  p(c,:) = (exp(-0.5*mahal) / denom)';
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/condGaussToJoint.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [muXY, SigmaXY] = condGaussToJoint(muX, SigmaX, muY, SigmaY, WYgivenX)
+
+% Compute P(X,Y) from P(X) * P(Y|X) where P(X)=N(X;muX,SigmaX) 
+% and P(Y|X) = N(Y; WX + muY, SigmaY)
+
+% For details on how to compute a Gaussian from a Bayes net
+% - "Gaussian Influence Diagrams", R. Shachter and C. R. Kenley, Management Science, 35(5):527--550, 1989.
+
+% size(W) = dy x dx
+dx = length(muX);
+dy = length(muY);
+muXY = [muX(:); WYgivenX*muX(:) + muY];
+
+W = [zeros(dx,dx) WYgivenX';
+     zeros(dy,dx) zeros(dy,dy)];
+D = [SigmaX       zeros(dx,dy);
+     zeros(dy,dx) SigmaY];
+
+U = inv(eye(size(W)) - W')';
+SigmaXY = U' * D * U;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/cond_indep_fisher_z.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,142 @@
+function [CI, r, p] = cond_indep_fisher_z(X, Y, S, C, N, alpha)
+% COND_INDEP_FISHER_Z Test if X indep Y given Z using Fisher's Z test
+% CI = cond_indep_fisher_z(X, Y, S, C, N, alpha)
+%
+% C is the covariance (or correlation) matrix
+% N is the sample size
+% alpha is the significance level (default: 0.05)
+%
+% See p133 of T. Anderson, "An Intro. to Multivariate Statistical Analysis", 1984
+
+if nargin < 6, alpha = 0.05; end
+
+r = partial_corr_coef(C, X, Y, S);
+z = 0.5*log( (1+r)/(1-r) );
+z0 = 0;
+W = sqrt(N - length(S) - 3)*(z-z0); % W ~ N(0,1)
+cutoff = norminv(1 - 0.5*alpha); % P(|W| <= cutoff) = 0.95
+%cutoff = mynorminv(1 - 0.5*alpha); % P(|W| <= cutoff) = 0.95
+if abs(W) < cutoff
+  CI = 1;
+else % reject the null hypothesis that rho = 0
+  CI = 0;
+end
+p = normcdf(W);
+%p = mynormcdf(W);
+
+%%%%%%%%%
+
+function p = normcdf(x,mu,sigma)
+%NORMCDF Normal cumulative distribution function (cdf).
+%   P = NORMCDF(X,MU,SIGMA) computes the normal cdf with mean MU and
+%   standard deviation SIGMA at the values in X.
+%
+%   The size of P is the common size of X, MU and SIGMA. A scalar input  
+%   functions as a constant matrix of the same size as the other inputs.    
+%
+%   Default values for MU and SIGMA are 0 and 1 respectively.
+
+%   References:
+%      [1]  M. Abramowitz and I. A. Stegun, "Handbook of Mathematical
+%      Functions", Government Printing Office, 1964, 26.2.
+
+%   Copyright (c) 1993-98 by The MathWorks, Inc.
+%   $Revision: 1.1.1.1 $  $Date: 2005/04/26 02:29:18 $
+
+if nargin < 3, 
+    sigma = 1;
+end
+
+if nargin < 2;
+    mu = 0;
+end
+
+[errorcode x mu sigma] = distchck(3,x,mu,sigma);
+
+if errorcode > 0
+    error('Requires non-scalar arguments to match in size.');
+end
+
+%   Initialize P to zero.
+p = zeros(size(x));
+
+% Return NaN if SIGMA is not positive.
+k1 = find(sigma <= 0);
+if any(k1)
+    tmp   = NaN;
+    p(k1) = tmp(ones(size(k1))); 
+end
+
+% Express normal CDF in terms of the error function.
+k = find(sigma > 0);
+if any(k)
+    p(k) = 0.5 * erfc( - (x(k) - mu(k)) ./ (sigma(k) * sqrt(2)));
+end
+
+% Make sure that round-off errors never make P greater than 1.
+k2 = find(p > 1);
+if any(k2)
+    p(k2) = ones(size(k2));
+end
+
+%%%%%%%%
+
+function x = norminv(p,mu,sigma);
+%NORMINV Inverse of the normal cumulative distribution function (cdf).
+%   X = NORMINV(P,MU,SIGMA) finds the inverse of the normal cdf with
+%   mean, MU, and standard deviation, SIGMA.
+%
+%   The size of X is the common size of the input arguments. A scalar input  
+%   functions as a constant matrix of the same size as the other inputs.    
+%
+%   Default values for MU and SIGMA are 0 and 1 respectively.
+
+%   References:
+%      [1]  M. Abramowitz and I. A. Stegun, "Handbook of Mathematical
+%      Functions", Government Printing Office, 1964, 7.1.1 and 26.2.2
+
+%   Copyright (c) 1993-98 by The MathWorks, Inc.
+%   $Revision: 1.1.1.1 $  $Date: 2005/04/26 02:29:18 $
+
+if nargin < 3, 
+    sigma = 1;
+end
+
+if nargin < 2;
+    mu = 0;
+end
+
+[errorcode p mu sigma] = distchck(3,p,mu,sigma);
+
+if errorcode > 0
+    error('Requires non-scalar arguments to match in size.');
+end
+
+% Allocate space for x.
+x = zeros(size(p));
+
+% Return NaN if the arguments are outside their respective limits.
+k = find(sigma <= 0 | p < 0 | p > 1);
+if any(k)
+    tmp  = NaN;
+    x(k) = tmp(ones(size(k))); 
+end
+
+% Put in the correct values when P is either 0 or 1.
+k = find(p == 0);
+if any(k)
+    tmp  = Inf;
+    x(k) = -tmp(ones(size(k)));
+end
+
+k = find(p == 1);
+if any(k)
+    tmp  = Inf;
+    x(k) = tmp(ones(size(k))); 
+end
+
+% Compute the inverse function for the intermediate values.
+k = find(p > 0  &  p < 1 & sigma > 0);
+if any(k),
+    x(k) = sqrt(2) * sigma(k) .* erfinv(2 * p(k) - 1) + mu(k);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/condgaussTrainObserved.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function [mu, Sigma] = mixgaussTrainObserved(obsData, hiddenData, nstates, varargin);
+% mixgaussTrainObserved Max likelihood estimates of conditional Gaussian from raw data
+% function [mu, Sigma] = mixgaussTrainObserved(obsData, hiddenData, nstates, ...);
+%
+% Input:
+% obsData(:,i)
+% hiddenData(i)  - this is the mixture component label for example i
+% Optional arguments - same as mixgauss_Mstep
+%
+% Output:
+% mu(:,q)
+% Sigma(:,:,q) - same as mixgauss_Mstep
+
+[D numex] = size(obsData);
+Y = zeros(D, nstates);
+YY = zeros(D,D,nstates);
+YTY = zeros(nstates,1);
+w = zeros(nstates, 1);
+for q=1:nstates
+  ndx = find(hiddenData==q);
+  w(q) = length(ndx); % each data point has probability 1 of being in this cluster
+  data = obsData(:,ndx);
+  Y(:,q) = sum(data,2);
+  YY(:,:,q) = data*data';
+  YTY(q) = sum(diag(data'*data));
+end
+[mu, Sigma] = mixgauss_Mstep(w, Y, YY, YTY, varargin{:});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/condgauss_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function x = mixgauss_sample(mu, Sigma, labels)
+% MIXGAUSS_SAMPLE Sample from a mixture of Gaussians given known mixture labels
+% function x = mixgauss_sample(mu, Sigma, labels)
+
+T = length(labels);
+[D Q] = size(mu);
+x = zeros(D,T);
+for q=1:Q
+  ndx = find(labels==q);
+  x(:,ndx) = gaussian_sample(mu(:,q)', Sigma(:,:,q), length(ndx))';
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/convertBinaryLabels.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+% labels01 = (labelsPM+1)/2; % maps -1->0, +1->1
+% labelsPM = (2*labels01)-1; % maps 0,1 -> -1,1
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/cwr_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,124 @@
+% Compare my code with
+% http://www.media.mit.edu/physics/publications/books/nmm/files/index.html
+%
+% cwm.m
+% (c) Neil Gershenfeld  9/1/97
+% 1D Cluster-Weighted Modeling example
+%
+clear all
+figure;
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+x = (-10:10)';
+y = (x > 0);
+npts = length(x);
+plot(x,y,'+')
+xlabel('x')
+ylabel('y')
+nclusters = 4;
+nplot = 100;
+xplot = 24*(1:nplot)'/nplot - 12;
+
+mux = 20*rand(1,nclusters) - 10;
+muy = zeros(1,nclusters);
+varx = ones(1,nclusters);
+vary = ones(1,nclusters);
+pc = 1/nclusters * ones(1,nclusters);
+niterations = 5;
+eps = 0.01;
+  
+
+I = repmat(eye(1,1), [1 1 nclusters]);
+O = repmat(zeros(1,1), [1 1 nclusters]);
+X = x(:)';
+Y = y(:)';
+
+cwr = cwr_em(X, Y, nclusters, 'muX', mux, 'muY', muy,  'SigmaX', I, ...
+	     'cov_typeX', 'spherical', 'SigmaY', I, 'cov_typeY', 'spherical', ...
+	     'priorC', pc, 'weightsY', O,  'create_init_params', 0, ...
+	     'clamp_weights', 1, 'max_iter', niterations, ...
+	     'cov_priorX', eps*ones(1,1,nclusters), ...
+	     'cov_priorY', eps*ones(1,1,nclusters));
+
+
+% Gershenfeld's EM code
+for step = 1:niterations
+    pplot = exp(-(kron(xplot,ones(1,nclusters)) ...
+		  - kron(ones(nplot,1),mux)).^2 ...
+		./ (2*kron(ones(nplot,1),varx))) ...
+	    ./ sqrt(2*pi*kron(ones(nplot,1),varx)) ...
+	    .* kron(ones(nplot,1),pc);
+    plot(xplot,pplot,'k');
+    pause(0);
+    px = exp(-(kron(x,ones(1,nclusters)) ...
+	       - kron(ones(npts,1),mux)).^2 ...
+	     ./ (2*kron(ones(npts,1),varx))) ...
+	 ./ sqrt(2*pi*kron(ones(npts,1),varx));
+    py = exp(-(kron(y,ones(1,nclusters)) ...
+	       - kron(ones(npts,1),muy)).^2 ...
+	     ./ (2*kron(ones(npts,1),vary))) ...
+	 ./ sqrt(2*pi*kron(ones(npts,1),vary));
+    p = px .* py .* kron(ones(npts,1),pc);
+    pp = p ./ kron(sum(p,2),ones(1,nclusters));
+    pc = sum(pp)/npts;
+    yfit = sum(kron(ones(npts,1),muy) .* p,2) ...
+	   ./ sum(p,2);
+    mux = sum(kron(x,ones(1,nclusters)) .* pp) ...
+	  ./ (npts*pc);
+    varx = eps + sum((kron(x,ones(1,nclusters)) ...
+		      - kron(ones(npts,1),mux)).^2 .* pp) ...
+	   ./ (npts*pc);
+    muy = sum(kron(y,ones(1,nclusters)) .* pp) ...
+	  ./ (npts*pc);
+    vary = eps + sum((kron(y,ones(1,nclusters)) ...
+		      - kron(ones(npts,1),muy)).^2 .* pp) ...
+	   ./ (npts*pc);
+end
+
+
+% Check equal
+cwr_pc = cwr.priorC';
+assert(approxeq(cwr_pc, pc))
+cwr_mux = cwr.muX;
+assert(approxeq(mux, cwr_mux))
+cwr_SigmaX = squeeze(cwr.SigmaX)';
+assert(approxeq(varx, cwr_SigmaX))
+cwr_muy = cwr.muY;
+assert(approxeq(muy, cwr_muy))
+cwr_SigmaY = squeeze(cwr.SigmaY)';
+assert(approxeq(vary, cwr_SigmaY))
+
+
+% Prediction
+
+X = xplot(:)';
+[cwr_mu, Sigma, post] = cwr_predict(cwr, X);
+cwr_ystd = squeeze(Sigma)';
+
+% pplot(t,c)
+pplot = exp(-(kron(xplot,ones(1,nclusters)) ...
+   - kron(ones(nplot,1),mux)).^2 ...
+   ./ (2*kron(ones(nplot,1),varx))) ...
+   ./ sqrt(2*pi*kron(ones(nplot,1),varx)) ...
+   .* kron(ones(nplot,1),pc);
+yplot = sum(kron(ones(nplot,1),muy) .* pplot,2) ...
+   ./ sum(pplot,2);
+ystdplot = sum(kron(ones(nplot,1),(muy.^2+vary)) .* pplot,2) ...
+   ./ sum(pplot,2) - yplot.^2;
+
+
+% Check equal
+assert(approxeq(yplot(:)', cwr_mu(:)'))
+assert(approxeq(ystdplot, cwr_ystd))
+assert(approxeq(pplot ./ repmat(sum(pplot,2), 1, nclusters),post') )
+
+plot(xplot,yplot,'k');
+hold on
+plot(xplot,yplot+ystdplot,'k--');
+plot(xplot,yplot-ystdplot,'k--');
+plot(x,y,'k+');
+axis([-12 12 -1 1.1]);
+plot(xplot,.8*pplot/max(max(pplot))-1,'k')
+hold off
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/cwr_em.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,161 @@
+function cwr  = cwr_em(X, Y, nc, varargin)
+% CWR_LEARN Fit the parameters of a cluster weighted regression model using EM
+% function cwr  = cwr_learn(X, Y, ...)
+%
+% X(:, t) is the t'th input example
+% Y(:, t) is the t'th output example
+% nc is the number of clusters
+%
+% Kevin Murphy, May 2003
+
+[max_iter, thresh, cov_typeX, cov_typeY, clamp_weights, ...
+ muX, muY, SigmaX, SigmaY, weightsY, priorC, create_init_params, ...
+cov_priorX, cov_priorY, verbose, regress, clamp_covX, clamp_covY] = process_options(...
+    varargin, 'max_iter', 10, 'thresh', 1e-2, 'cov_typeX', 'full', ...
+     'cov_typeY', 'full', 'clamp_weights', 0, ...
+     'muX', [], 'muY', [], 'SigmaX', [], 'SigmaY', [], 'weightsY', [], 'priorC', [], ...
+     'create_init_params', 1, 'cov_priorX', [], 'cov_priorY', [], 'verbose', 0, ...
+    'regress', 1, 'clamp_covX', 0, 'clamp_covY', 0);
+     
+[nx N] = size(X);
+[ny N2] = size(Y);
+if N ~= N2
+  error(sprintf('nsamples X (%d) ~= nsamples Y (%d)', N, N2));
+end
+%if N < nx 
+%  fprintf('cwr_em warning: dim X (%d) > nsamples X (%d)\n', nx, N);
+%end
+if (N < nx) & regress
+  fprintf('cwr_em warning: dim X = %d, nsamples X = %d\n', nx, N);
+end
+if (N < ny) 
+  fprintf('cwr_em warning: dim Y = %d, nsamples Y = %d\n', ny, N);
+end
+if (nc > N) 
+  error(sprintf('cwr_em: more centers (%d) than data', nc))
+end
+
+if nc==1
+  % No latent variable, so there is a closed-form solution
+  w = 1/N;
+  WYbig = Y*w;
+  WYY = WYbig * Y'; 
+  WY = sum(WYbig, 2);
+  WYTY = sum(diag(WYbig' * Y));
+  cwr.priorC = 1;
+  cwr.SigmaX = [];
+  if ~regress
+    % This is just fitting an unconditional Gaussian
+    cwr.weightsY = [];
+    [cwr.muY, cwr.SigmaY] = ...
+	mixgauss_Mstep(1, WY, WYY, WYTY, ...
+		       'cov_type', cov_typeY, 'cov_prior', cov_priorY);
+    % There is a much easier way...
+    assert(approxeq(cwr.muY, mean(Y')))
+    assert(approxeq(cwr.SigmaY, cov(Y') + 0.01*eye(ny)))
+  else
+    % This is just linear regression
+    WXbig = X*w;
+    WXX = WXbig * X';
+   WX = sum(WXbig, 2);
+    WXTX = sum(diag(WXbig' * X));
+    WXY = WXbig * Y';
+    [cwr.muY, cwr.SigmaY, cwr.weightsY] = ...
+	clg_Mstep(1, WY, WYY, WYTY, WX, WXX, WXY, ...
+		  'cov_type', cov_typeY, 'cov_prior', cov_priorY);
+  end
+  if clamp_covY, cwr.SigmaY = SigmaY; end
+  if clamp_weights,  cwr.weightsY = weightsY; end
+  return;
+end
+
+
+if create_init_params
+  [cwr.muX, cwr.SigmaX] = mixgauss_init(nc, X, cov_typeX);
+  [cwr.muY, cwr.SigmaY] = mixgauss_init(nc, Y, cov_typeY);
+  cwr.weightsY = zeros(ny, nx, nc);
+  cwr.priorC = normalize(ones(nc,1));
+else
+  cwr.muX = muX;  cwr.muY = muY; cwr.SigmaX = SigmaX; cwr.SigmaY = SigmaY;
+  cwr.weightsY = weightsY; cwr.priorC = priorC;
+end
+
+
+if clamp_covY, cwr.SigmaY = SigmaY; end
+if clamp_covX,  cwr.SigmaX = SigmaX; end
+if clamp_weights,  cwr.weightsY = weightsY; end
+
+previous_loglik = -inf;
+num_iter = 1;
+converged = 0;
+
+while (num_iter <= max_iter) & ~converged
+
+  % E step
+  
+  [likXandY, likYgivenX, post] = cwr_prob(cwr, X, Y);
+  loglik = sum(log(likXandY));
+  % extract expected sufficient statistics
+  w = sum(post,2);  % post(c,t)
+  WYY = zeros(ny, ny, nc);
+  WY = zeros(ny, nc);
+  WYTY = zeros(nc,1);
+  
+  WXX = zeros(nx, nx, nc);
+  WX = zeros(nx, nc);
+  WXTX = zeros(nc, 1);
+  WXY = zeros(nx,ny,nc);
+  %WYY = repmat(reshape(w, [1 1 nc]), [ny ny 1]) .*  repmat(Y*Y', [1 1 nc]);
+  for c=1:nc
+    weights = repmat(post(c,:), ny, 1);
+    WYbig = Y .* weights;
+    WYY(:,:,c) = WYbig * Y'; 
+    WY(:,c) = sum(WYbig, 2);
+    WYTY(c) = sum(diag(WYbig' * Y));
+
+    weights = repmat(post(c,:), nx, 1); % weights(nx, nsamples)
+    WXbig = X .* weights;
+    WXX(:,:,c) = WXbig * X';
+    WX(:,c) = sum(WXbig, 2);
+    WXTX(c) = sum(diag(WXbig' * X));
+    WXY(:,:,c) = WXbig * Y';
+  end
+
+  % M step
+  % Q -> X is called Q->Y in Mstep_clg
+  [cwr.muX, cwr.SigmaX] = mixgauss_Mstep(w, WX, WXX, WXTX, ...
+			    'cov_type', cov_typeX, 'cov_prior', cov_priorX);
+  for c=1:nc
+    assert(is_psd(cwr.SigmaX(:,:,c)))
+  end
+  
+  if clamp_weights % affects estimate of mu and Sigma
+    W = cwr.weightsY;
+  else
+    W = [];
+  end
+  [cwr.muY, cwr.SigmaY, cwr.weightsY] = ...
+      clg_Mstep(w, WY, WYY, WYTY, WX, WXX, WXY, ...
+		'cov_type', cov_typeY, 'clamped_weights', W, ...
+		'cov_prior', cov_priorY);
+  %'xs', X, 'ys', Y, 'post', post); % debug
+  %a = linspace(min(Y(2,:)), max(Y(2,:)), nc+2);
+  %cwr.muY(2,:) = a(2:end-1);
+
+  cwr.priorC = normalize(w);
+
+  for c=1:nc
+    assert(is_psd(cwr.SigmaY(:,:,c)))
+  end
+
+  if clamp_covY, cwr.SigmaY = SigmaY; end
+  if clamp_covX,  cwr.SigmaX = SigmaX; end
+  if clamp_weights,  cwr.weightsY = weightsY; end
+
+  if verbose, fprintf(1, 'iteration %d, loglik = %f\n', num_iter, loglik); end
+  num_iter =  num_iter + 1;
+  converged = em_converged(loglik, previous_loglik, thresh);
+  previous_loglik = loglik;
+  
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/cwr_predict.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function  [mu, Sigma, weights, mask] = cwr_predict(cwr, X, mask_data)
+% CWR_PREDICT cluster weighted regression: predict Y given X 
+% function  [mu, Sigma] = cwr_predict(cwr, X)
+% 
+% mu(:,t) = E[Y|X(:,t)] = sum_c P(c | X(:,t)) E[Y|c, X(:,t)]
+% Sigma(:,:,t) = Cov[Y|X(:,t)]
+%
+% [mu, Sigma, weights, mask] = cwr_predict(cwr, X, mask_data)
+% mask(i) = sum_t sum_c p(mask_data(:,i) | X(:,t), c) P(c|X(:,t))
+% This evaluates the predictive density on a set of points
+% (This is only sensible if T=1, ie. X is a single vector)
+
+[nx T] = size(X);
+[ny nx nc] = size(cwr.weightsY);
+mu = zeros(ny, T);
+Sigma = zeros(ny, ny, T);
+
+if nargout == 4
+  comp_mask = 1;
+  N = size(mask_data,2);
+  mask = zeros(N,1);
+else
+  comp_mask = 0;
+end
+
+if nc==1
+  if isempty(cwr.weightsY)
+    mu = repmat(cwr.muY, 1, T);
+    Sigma = repmat(cwr.SigmaY, [1 1 T]);
+  else
+    mu = repmat(cwr.muY, 1, T) + cwr.weightsY * X;
+    Sigma = repmat(cwr.SigmaY, [1 1 T]);
+    %for t=1:T
+    %  mu(:,t) = cwr.muY + cwr.weightsY*X(:,t);
+    %  Sigma(:,:,t) = cwr.SigmaY;
+    %end
+  end
+  if comp_mask, mask = gaussian_prob(mask_data, mu, Sigma); end
+  weights = [];
+  return;
+end
+
+
+% likX(c,t) = p(x(:,t) | c)
+likX = mixgauss_prob(X, cwr.muX, cwr.SigmaX);
+weights = normalize(repmat(cwr.priorC, 1, T) .* likX, 1);
+for t=1:T
+  mut = zeros(ny, nc);
+  for c=1:nc
+    mut(:,c) = cwr.muY(:,c) + cwr.weightsY(:,:,c)*X(:,t);
+    if comp_mask
+      mask = mask + gaussian_prob(mask_data, mut(:,c), cwr.SigmaY(:,:,c)) * weights(c);
+    end
+  end
+  %w = normalise(cwr.priorC(:)  .* likX(:,t));
+  [mu(:,t), Sigma(:,:,t)] = collapse_mog(mut, cwr.SigmaY, weights(:,t));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/cwr_prob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function  [likXandY, likYgivenX, post] = cwr_prob(cwr, X, Y);
+% CWR_EVAL_PDF cluster weighted regression: evaluate likelihood of Y given X 
+% function  [likXandY, likYgivenX, post] = cwr_prob(cwr, X, Y);
+% 
+% likXandY(t) = p(x(:,t), y(:,t))
+% likXgivenY(t) = p(x(:,t)| y(:,t))
+% post(c,t) = p(c | x(:,t), y(:,t))
+
+[nx N] = size(X);
+nc = length(cwr.priorC);
+
+if nc == 1
+  [mu, Sigma] = cwr_predict(cwr, X);
+  likY = gaussian_prob(Y, mu, Sigma);
+  likXandY = likY;
+  likYgivenX = likY;
+  post = ones(1,N);
+  return;
+end
+
+
+% likY(c,t) = p(y(:,t) | c)
+likY = clg_prob(X, Y, cwr.muY, cwr.SigmaY, cwr.weightsY);
+
+% likX(c,t) = p(x(:,t) | c)
+[junk, likX] = mixgauss_prob(X, cwr.muX, cwr.SigmaX);
+likX = squeeze(likX);
+
+% prior(c,t) = p(c)
+prior = repmat(cwr.priorC(:), 1, N);
+
+post = likX .* likY .* prior;
+likXandY = sum(post, 1);
+post = post ./ repmat(likXandY, nc, 1);
+%loglik = sum(log(lik));
+%loglik = log(lik);
+
+likX = sum(likX .* prior, 1);
+likYgivenX = likXandY ./ likX;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/cwr_readme.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+This directory implements Cluster Weighted Regression, as described in
+Neil Gershenfeld, "The nature of mathematical modelling", p182.
+(See also http://www.media.mit.edu/physics/publications/books/nmm/files/index.html)
+
+Written by K. Murphy, 2 May 2003
+
+The model is as follows:
+
+X<--|
+|   Q
+v   |
+Y<--
+
+where Q is a discrete latent mixture variable.
+
+A mixture of experts has an X->Q arc instead of a Q->X arc;
+the X->Q arc is modelled by a softmax, which is slightly harder to fit than a
+mixture of Gaussians.
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/cwr_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+% Verify that my code gives the same results as the 1D example at
+% http://www.media.mit.edu/physics/publications/books/nmm/files/cwm.m
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+x = (-10:10)';
+y = double(x > 0);
+npts = length(x);
+plot(x,y,'+')
+
+nclusters = 4;
+nplot = 100;
+xplot = 24*(1:nplot)'/nplot - 12;
+
+mux = 20*rand(1,nclusters) - 10;
+muy = zeros(1,nclusters);
+varx = ones(1,nclusters);
+vary = ones(1,nclusters);
+pc = 1/nclusters * ones(1,nclusters);
+
+
+I = repmat(eye(1,1), [1 1 nclusters]);
+O = repmat(zeros(1,1), [1 1 nclusters]);
+X = x(:)';
+Y = y(:)';
+
+% Do 1 iteration of EM
+
+%cwr = cwr_em(X, Y, nclusters, 'muX', mux, 'muY', muy,  'SigmaX', I, 'cov_typeX', 'spherical', 'SigmaY', I, 'cov_typeY', 'spherical', 'priorC', pc, 'weightsY', O,  'init_params', 0, 'clamp_weights', 1, 'max_iter', 1, 'cov_priorX', zeros(1,1,nclusters), 'cov_priorY', zeros(1,1,nclusters));
+
+cwr = cwr_em(X, Y, nclusters, 'muX', mux, 'muY', muy,  'SigmaX', I, 'cov_typeX', 'spherical', 'SigmaY', I, 'cov_typeY', 'spherical', 'priorC', pc, 'weightsY', O,  'create_init_params', 0, 'clamp_weights', 1, 'max_iter', 1);
+
+
+% Check this matches Gershenfeld's code
+
+% E step
+% px(t,c) = prob(x(t) | c)
+px = exp(-(kron(x,ones(1,nclusters)) ...
+	   - kron(ones(npts,1),mux)).^2 ...
+	 ./ (2*kron(ones(npts,1),varx))) ...
+     ./ sqrt(2*pi*kron(ones(npts,1),varx));
+py = exp(-(kron(y,ones(1,nclusters)) ...
+	   - kron(ones(npts,1),muy)).^2 ...
+	 ./ (2*kron(ones(npts,1),vary))) ...
+     ./ sqrt(2*pi*kron(ones(npts,1),vary));
+p = px .* py .* kron(ones(npts,1),pc);
+pp = p ./ kron(sum(p,2),ones(1,nclusters));
+
+% M step
+eps = 0.01;
+pc2 = sum(pp)/npts;
+
+mux2 = sum(kron(x,ones(1,nclusters)) .* pp) ...
+      ./ (npts*pc2);
+varx2 = eps + sum((kron(x,ones(1,nclusters)) ...
+		  - kron(ones(npts,1),mux2)).^2 .* pp) ...
+       ./ (npts*pc2);
+muy2 = sum(kron(y,ones(1,nclusters)) .* pp) ...
+      ./ (npts*pc2);
+vary2 = eps + sum((kron(y,ones(1,nclusters)) ...
+		  - kron(ones(npts,1),muy2)).^2 .* pp) ...
+       ./ (npts*pc2);
+
+
+denom = (npts*pc2);
+% denom(c) = N*pc(c) = w(c) = sum_t pp(c,t)
+% since pc(c) = sum_t pp(c,t) / N
+
+cwr_mux = cwr.muX;
+assert(approxeq(mux2, cwr_mux))
+cwr_SigmaX = squeeze(cwr.SigmaX)';
+assert(approxeq(varx2, cwr_SigmaX))
+
+cwr_muy = cwr.muY;
+assert(approxeq(muy2, cwr_muy))
+cwr_SigmaY = squeeze(cwr.SigmaY)';
+assert(approxeq(vary2, cwr_SigmaY))
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/dirichlet_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function theta = dirichlet_sample(alpha, N)
+% SAMPLE_DIRICHLET Sample N vectors from Dir(alpha(1), ..., alpha(k))
+% theta = sample_dirichlet(alpha, N)
+% theta(i,j) = i'th sample of theta_j, where theta ~ Dir
+
+% We use the method from p. 482 of "Bayesian Data Analysis", Gelman et al.
+
+assert(alpha > 0);
+k = length(alpha);
+theta = zeros(N, k);
+scale = 1; % arbitrary
+for i=1:k
+  %theta(:,i) = gamrnd(alpha(i), scale, N, 1);
+  theta(:,i) = gamma_sample(alpha(i), scale, N, 1);
+end
+%theta = mk_stochastic(theta);
+S = sum(theta,2); 
+theta = theta ./ repmat(S, 1, k);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/dirichletpdf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function p = dirichletpdf(x, alpha)
+%DIRICHLETPDF Dirichlet probability density function.
+%   p = dirichletpdf(x, alpha) returns the probability of vector
+%   x under the Dirichlet distribution with parameter vector
+%   alpha.
+%
+%   Author: David Ross
+
+%-------------------------------------------------
+% Check the input
+%-------------------------------------------------
+error(nargchk(2,2,nargin));
+
+% enusre alpha is a vector
+if min(size(alpha)) ~= 1 | ndims(alpha) > 2 | length(alpha) == 1
+    error('alpha must be a vector');
+end
+
+% ensure x is is a vector of the same size as alpha
+if any(size(x) ~= size(alpha))
+    error('x and alpha must be the same size');
+end
+
+
+%-------------------------------------------------
+% Main
+%-------------------------------------------------
+if any(x < 0)
+    p = 0;
+elseif sum(x) ~= 1
+    disp(['dirichletpdf warning: sum(x)~=1, but this may be ' ...
+        'due to numerical issues']);
+    p = 0;
+else
+    z = gammaln(sum(alpha)) - sum(gammaln(alpha)); 
+    z = exp(z);
+
+    p = z * prod(x.^(alpha-1));
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/dirichletrnd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function x = dirichletrnd(alpha)
+%DIRICHLETRND Random vector from a dirichlet distribution.
+%   x = dirichletrnd(alpha) returns a vector randomly selected
+%   from the Dirichlet distribution with parameter vector alpha.
+%
+%   The algorithm used is the following:
+%   For each alpha(i), generate a value s(i) with distribution
+%   Gamma(alpha(i),1).  Now x(i) = s(i) / sum_j s(j).
+%   
+%   The above algorithm was recounted to me by Radford Neal, but
+%   a reference would be appreciated...
+%   Do the gamma parameters always have to be 1?
+%
+%   Author: David Ross
+%   $Id: dirichletrnd.m,v 1.1.1.1 2005/05/22 23:32:12 yozhik Exp $
+
+%-------------------------------------------------
+% Check the input
+%-------------------------------------------------
+error(nargchk(1,1,nargin));
+
+if min(size(alpha)) ~= 1 | length(alpha) < 2
+    error('alpha must be a vector of length at least 2');
+end
+
+
+%-------------------------------------------------
+% Main
+%-------------------------------------------------
+gamma_vals = gamrnd(alpha, ones(size(alpha)), size(alpha));
+denom = sum(gamma_vals);
+x = gamma_vals / denom;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/distchck.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,173 @@
+function [errorcode,out1,out2,out3,out4] = distchck(nparms,arg1,arg2,arg3,arg4)
+%DISTCHCK Checks the argument list for the probability functions.
+
+%   B.A. Jones  1-22-93
+%   Copyright (c) 1993-98 by The MathWorks, Inc.
+%   $Revision: 1.1.1.1 $  $Date: 2005/04/26 02:29:18 $
+
+errorcode = 0;
+
+if nparms == 1
+    out1 = arg1;
+    return;
+end
+    
+if nparms == 2
+    [r1 c1] = size(arg1);
+    [r2 c2] = size(arg2);
+    scalararg1 = (prod(size(arg1)) == 1);
+    scalararg2 = (prod(size(arg2)) == 1);
+    if ~scalararg1 & ~scalararg2
+        if r1 ~= r2 | c1 ~= c2
+            errorcode = 1;
+            return;         
+        end     
+    end
+    if scalararg1
+        out1 = arg1(ones(r2,1),ones(c2,1));
+    else
+        out1 = arg1;
+    end
+    if scalararg2
+        out2 = arg2(ones(r1,1),ones(c1,1));
+    else
+        out2 = arg2;
+    end
+end
+    
+if nparms == 3
+    [r1 c1] = size(arg1);
+    [r2 c2] = size(arg2);
+    [r3 c3] = size(arg3);
+    scalararg1 = (prod(size(arg1)) == 1);
+    scalararg2 = (prod(size(arg2)) == 1);
+    scalararg3 = (prod(size(arg3)) == 1);
+
+    if ~scalararg1 & ~scalararg2
+        if r1 ~= r2 | c1 ~= c2
+            errorcode = 1;
+            return;         
+        end
+    end
+
+    if ~scalararg1 & ~scalararg3
+        if r1 ~= r3 | c1 ~= c3
+            errorcode = 1;
+            return;                 
+        end
+    end
+
+    if ~scalararg3 & ~scalararg2
+        if r3 ~= r2 | c3 ~= c2
+            errorcode = 1;
+            return;         
+        end
+    end
+
+    if ~scalararg1
+      out1 = arg1;
+    end
+    if ~scalararg2
+      out2 = arg2;
+    end
+    if ~scalararg3
+      out3 = arg3;
+    end
+    rows = max([r1 r2 r3]);
+   columns = max([c1 c2 c3]);  
+       
+    if scalararg1
+        out1 = arg1(ones(rows,1),ones(columns,1));
+    end
+   if scalararg2
+        out2 = arg2(ones(rows,1),ones(columns,1));
+   end
+   if scalararg3
+       out3 = arg3(ones(rows,1),ones(columns,1));
+   end
+     out4 =[];
+    
+end
+
+if nparms == 4
+    [r1 c1] = size(arg1);
+    [r2 c2] = size(arg2);
+    [r3 c3] = size(arg3);
+    [r4 c4] = size(arg4);
+    scalararg1 = (prod(size(arg1)) == 1);
+    scalararg2 = (prod(size(arg2)) == 1);
+    scalararg3 = (prod(size(arg3)) == 1);
+    scalararg4 = (prod(size(arg4)) == 1);
+
+    if ~scalararg1 & ~scalararg2
+        if r1 ~= r2 | c1 ~= c2
+            errorcode = 1;
+            return;         
+        end
+    end
+
+    if ~scalararg1 & ~scalararg3
+        if r1 ~= r3 | c1 ~= c3
+            errorcode = 1;
+            return;                 
+        end
+    end
+
+    if ~scalararg1 & ~scalararg4
+        if r1 ~= r4 | c1 ~= c4
+            errorcode = 1;
+            return;                 
+        end
+    end
+
+    if ~scalararg3 & ~scalararg2
+        if r3 ~= r2 | c3 ~= c2
+            errorcode = 1;
+            return;         
+        end
+    end
+
+    if ~scalararg4 & ~scalararg2
+        if r4 ~= r2 | c4 ~= c2
+            errorcode = 1;
+            return;         
+        end
+    end
+
+    if ~scalararg3 & ~scalararg4
+        if r3 ~= r4 | c3 ~= c4
+            errorcode = 1;
+            return;         
+        end
+    end
+
+
+    if ~scalararg1
+       out1 = arg1;
+    end
+    if ~scalararg2
+       out2 = arg2;
+    end
+    if ~scalararg3
+      out3 = arg3;
+    end
+    if ~scalararg4
+      out4 = arg4;
+    end
+ 
+   rows = max([r1 r2 r3 r4]);
+   columns = max([c1 c2 c3 c4]);     
+    if scalararg1
+       out1 = arg1(ones(rows,1),ones(columns,1));
+   end
+   if scalararg2
+       out2 = arg2(ones(rows,1),ones(columns,1));
+   end
+   if scalararg3
+       out3 = arg3(ones(rows,1),ones(columns,1));
+   end
+   if scalararg4
+       out4 = arg4(ones(rows,1),ones(columns,1));
+   end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/eigdec.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function [evals, evec] = eigdec(x, N)
+%EIGDEC	Sorted eigendecomposition
+%
+%	Description
+%	 EVALS = EIGDEC(X, N computes the largest N eigenvalues of the
+%	matrix X in descending order.  [EVALS, EVEC] = EIGDEC(X, N) also
+%	computes the corresponding eigenvectors.
+%
+%	See also
+%	PCA, PPCA
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if nargout == 1
+   evals_only = logical(1);
+else
+   evals_only = logical(0);
+end
+
+if N ~= round(N) | N < 1 | N > size(x, 2)
+   error('Number of PCs must be integer, >0, < dim');
+end
+
+% Find the eigenvalues of the data covariance matrix
+if evals_only
+   % Use eig function as always more efficient than eigs here
+   temp_evals = eig(x);
+else
+   % Use eig function unless fraction of eigenvalues required is tiny
+   if (N/size(x, 2)) > 0.04
+     fprintf('netlab pca: using eig\n');
+      [temp_evec, temp_evals] = eig(x);
+   else
+      options.disp = 0;
+      fprintf('netlab pca: using eigs\n');
+      [temp_evec, temp_evals] = eigs(x, N, 'LM', options);
+   end
+   temp_evals = diag(temp_evals);
+end
+
+% Eigenvalues nearly always returned in descending order, but just
+% to make sure.....
+[evals perm] = sort(-temp_evals);
+evals = -evals(1:N);
+%evec=temp_evec(:,1:N);
+if ~evals_only
+  if evals == temp_evals(1:N)
+    % Originals were in order
+    evec = temp_evec(:, 1:N);
+    return
+  else
+    fprintf('netlab pca: sorting evec\n');
+    % Need to reorder the eigenvectors
+    for i=1:N
+      evec(:,i) = temp_evec(:,perm(i));
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/est_transmat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function [A,C] = est_transmat(seq)
+% ESTIMATE_TRANSMAT Max likelihood of a Markov chain transition matrix
+% [A,C] = estimate_transmat(seq)
+%
+% seq is a vector of positive integers
+%
+% e.g., seq = [1 2 1 2 3], C(1,2)=2, C(2,1)=1, C(2,3)=1, so
+% A(1,:)=[0 1 0], A(2,:) = [0.5 0 0.5],
+% all other entries are 0
+
+% Use a trick with sparse matrices to count the number of each transition.
+% From http://www.mathworks.com/company/newsletter/may03/dna.shtml
+
+C = full(sparse(seq(1:end-1), seq(2:end),1));
+A = mk_stochastic(C);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/fit_paritioned_model_testfn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function model = foo(inputs, outputs, varargin)
+
+model.inputs = inputs;
+model.outputs = outputs;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/fit_partitioned_model.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function [model, partition_size] = fit_partitioned_model(...
+    inputs, outputs, selectors, sel_sizes, min_size, partition_names, fn_name, varargin)
+%function [models, partition_sizes] = fit_partitioned_model(...
+%    inputs, outputs, selectors, sel_sizes, min_size, partition_names, fn_name, varargin)
+%
+% Fit models to different subsets (columns)  of the input/output data, 
+% as chosen by the selectors matrix. If there is only output data, set input=[].
+% If there is less than min_size data in partition i, 
+% we set model{i} = []
+%
+% Example:
+% selectors = [1 2 1 1 1
+%              1 2 2 1 2]
+% sel_sizes = [2 2] so there are 4 models: (1,1), (2,1), (1,2), (2,2)
+% We fit model{1} to data from columns 1,4
+% We fit model{2} to no data
+% We fit model{3} to data from column 3,5
+% We fit model{4} to data from column 2 (assuming min_size <= 1)
+%
+% For each partition, we call the specified function with the specified arguments
+% as follows:
+%  model{i}  = fn(input(:,cols{i}), output(:,cols{i}), args)
+% (We omit input if [])
+% partition_size(i) is the amount of data in the i'th partition.
+%
+% Example use: row 1 of selectors is whether an object is present/absent
+% and row 2 is the location.
+%
+% Demo:
+% inputs = 1:5; outputs = 6:10; selectors = as above
+% fn = 'fit_partitioned_model_testfn';
+% [model, partition_size] = fit_partitioned_model(inputs, outputs, selectors, [2 2], fn)
+% should produce
+% model{1}.input = [1 4], model{1}.output = [6 9]
+% model{2} = []
+% model{3}.input = [3 5], model{3}.output = [8 10], 
+% model{4}.input = [2], model{3}.output = [7], 
+% partition_size = [2 0 2 1]
+
+
+sel_ndx = subv2ind(sel_sizes, selectors');
+Nmodels = prod(sel_sizes);
+model = cell(1, Nmodels);
+partition_size = zeros(1, Nmodels);
+for m=1:Nmodels
+  ndx = find(sel_ndx==m);
+  partition_size(m) = length(ndx);
+  if ~isempty(partition_names) % & (partition_size(m) < min_size)
+    fprintf('partition %s has size %d, min size = %d\n', ...
+	    partition_names{m}, partition_size(m), min_size);
+  end
+  if partition_size(m) >= min_size
+    if isempty(inputs)
+      model{m} = feval(fn_name, outputs(:, ndx), varargin{:});
+    else
+      model{m} = feval(fn_name, inputs(:,ndx), outputs(:, ndx), varargin{:});
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/gamma_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,126 @@
+function r = gamrnd(a,b,m,n);
+%GAMRND Random matrices from gamma distribution.
+%   R = GAMRND(A,B) returns a matrix of random numbers chosen   
+%   from the gamma distribution with parameters A and B.
+%   The size of R is the common size of A and B if both are matrices.
+%   If either parameter is a scalar, the size of R is the size of the other
+%   parameter. Alternatively, R = GAMRND(A,B,M,N) returns an M by N matrix. 
+%
+%   Some references refer to the gamma distribution
+%   with a single parameter. This corresponds to GAMRND
+%   with B = 1. (See Devroye, pages 401-402.)
+
+%   GAMRND uses a rejection or an inversion method depending on the
+%   value of A. 
+
+%   References:
+%      [1]  L. Devroye, "Non-Uniform Random Variate Generation", 
+%      Springer-Verlag, 1986
+
+%   B.A. Jones 2-1-93
+%   Copyright (c) 1993-98 by The MathWorks, Inc.
+%   $Revision: 1.1.1.1 $  $Date: 2005/04/26 02:29:18 $
+
+if nargin < 2, 
+   error('Requires at least two input arguments.'); 
+end
+
+
+if nargin == 2
+   [errorcode rows columns] = rndcheck(2,2,a,b);
+end
+
+if nargin == 3
+   [errorcode rows columns] = rndcheck(3,2,a,b,m);
+end
+
+if nargin == 4
+   [errorcode rows columns] = rndcheck(4,2,a,b,m,n);
+end
+
+if errorcode > 0
+   error('Size information is inconsistent.');
+end
+
+% Initialize r to zero.
+lth = rows*columns;
+r = zeros(lth,1);
+a = a(:); b = b(:);
+
+scalara = (length(a) == 1);
+if scalara 
+   a = a*ones(lth,1);
+end
+
+scalarb = (length(b) == 1);
+if scalarb 
+   b = b*ones(lth,1);
+end
+
+% If a == 1, then gamma is exponential. (Devroye, page 405).
+k = find(a == 1);
+if any(k)
+   r(k) = -b(k) .* log(rand(size(k)));
+end 
+
+
+k = find(a < 1 & a > 0);
+% (Devroye, page 418 Johnk's generator)
+if any(k)
+  c = zeros(lth,1);
+  d = zeros(lth,1);
+  c(k) = 1 ./ a(k);
+  d(k) = 1 ./ (1 - a(k));
+  accept = k;
+  while ~isempty(accept)
+    u = rand(size(accept));
+    v = rand(size(accept));
+    x = u .^ c(accept);
+    y = v .^ d(accept);
+    k1 = find((x + y) <= 1); 
+    if ~isempty(k1)
+      e = -log(rand(size(k1))); 
+      r(accept(k1)) = e .* x(k1) ./ (x(k1) + y(k1));
+      accept(k1) = [];
+    end
+  end
+  r(k) = r(k) .* b(k);
+end
+
+% Use a rejection method for a > 1.
+k = find(a > 1);
+% (Devroye, page 410 Best's algorithm)
+bb = zeros(size(a));
+c  = bb;
+if any(k)
+  bb(k) = a(k) - 1;
+  c(k) = 3 * a(k) - 3/4;
+  accept = k; 
+  count = 1;
+  while ~isempty(accept)
+    m = length(accept);
+    u = rand(m,1);
+    v = rand(m,1);
+    w = u .* (1 - u);
+    y = sqrt(c(accept) ./ w) .* (u - 0.5);
+    x = bb(accept) + y;
+    k1 = find(x >= 0);
+    if ~isempty(k1)
+      z = 64 * (w .^ 3) .* (v .^ 2);
+      k2 = (z(k1) <= (1 - 2 * (y(k1) .^2) ./ x(k1)));
+      k3 = k1(find(k2));
+      r(accept(k3)) = x(k3); 
+      k4 = k1(find(~k2));
+      k5 = k4(find(log(z(k4)) <= (2*(bb(accept(k4)).*log(x(k4)./bb(accept(k4)))-y(k4)))));
+      r(accept(k5)) = x(k5);
+      omit = [k3; k5];
+      accept(omit) = [];
+    end
+  end
+  r(k) = r(k) .* b(k);
+end
+
+% Return NaN if a or b is not positive.
+r(b <= 0 | a <= 0) = NaN;
+
+r = reshape(r,rows,columns);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/gaussian_prob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function p = gaussian_prob(x, m, C, use_log)
+% GAUSSIAN_PROB Evaluate a multivariate Gaussian density.
+% p = gaussian_prob(X, m, C)
+% p(i) = N(X(:,i), m, C) where C = covariance matrix and each COLUMN of x is a datavector
+
+% p = gaussian_prob(X, m, C, 1) returns log N(X(:,i), m, C) (to prevents underflow).
+%
+% If X has size dxN, then p has size Nx1, where N = number of examples
+
+if nargin < 4, use_log = 0; end
+
+if length(m)==1 % scalar
+  x = x(:)';
+end
+[d N] = size(x);
+%assert(length(m)==d); % slow
+m = m(:);
+M = m*ones(1,N); % replicate the mean across columns
+denom = (2*pi)^(d/2)*sqrt(abs(det(C)));
+mahal = sum(((x-M)'*inv(C)).*(x-M)',2);   % Chris Bregler's trick
+if any(mahal<0)
+  warning('mahal < 0 => C is not psd')
+end
+if use_log
+  p = -0.5*mahal - log(denom);
+else
+  p = exp(-0.5*mahal) / (denom+eps);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/gaussian_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function x = gsamp(mu, covar, nsamp)
+%GSAMP	Sample from a Gaussian distribution.
+%
+%	Description
+%
+%	X = GSAMP(MU, COVAR, NSAMP) generates a sample of size NSAMP from a
+%	D-dimensional Gaussian distribution. The Gaussian density has mean
+%	vector MU and covariance matrix COVAR, and the matrix X has NSAMP
+%	rows in which each row represents a D-dimensional sample vector.
+%
+%	See also
+%	GAUSS, DEMGAUSS
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+d = size(covar, 1);
+
+mu = reshape(mu, 1, d);   % Ensure that mu is a row vector
+
+[evec, eval] = eig(covar);
+
+coeffs = randn(nsamp, d)*sqrt(eval);
+
+x = ones(nsamp, 1)*mu + coeffs*evec';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/histCmpChi2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function d = histCmpChi2(h1, h2)
+% Compare two histograms using chi-squared
+% function d = histCmpChi2(h1, h2)
+%
+% d(i,j) = chi^2(h1(i,:), h2(j,:)) = sum_b  (h1(i,b)-h2(j,b)^2 / (h1(i,b) + h2(j,b))
+
+[N B] = size(h1);
+d = zeros(N,N);
+for i=1:N
+  h1i = repmat(h1(i,:), N, 1);
+  numer = (h1i - h2).^2;
+  denom = h1i + h2 + eps; % if denom=0, then numer=0
+  d(i,:) = sum(numer ./ denom, 2);
+end
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/linear_regression.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+function [muY, SigmaY, weightsY]  = linear_regression(X, Y, varargin)
+% LINEAR_REGRESSION Fit params for P(Y|X) = N(Y;  W X + mu, Sigma) 
+%
+% X(:, t) is the t'th input example
+% Y(:, t) is the t'th output example
+%
+% Kevin Murphy, August 2003
+%
+% This is a special case of cwr_em with 1 cluster.
+% You can also think of it as a front end to clg_Mstep.
+
+[cov_typeY, clamp_weights,  muY, SigmaY, weightsY,...
+ cov_priorY,  regress, clamp_covY] = process_options(...
+    varargin, ...
+     'cov_typeY', 'full', 'clamp_weights', 0, ...
+     'muY', [], 'SigmaY', [], 'weightsY', [], ...
+     'cov_priorY', [], 'regress', 1,  'clamp_covY', 0);
+     
+[nx N] = size(X);
+[ny N2] = size(Y);
+if N ~= N2
+  error(sprintf('nsamples X (%d) ~= nsamples Y (%d)', N, N2));
+end
+
+w = 1/N;
+WYbig = Y*w;
+WYY = WYbig * Y'; 
+WY = sum(WYbig, 2);
+WYTY = sum(diag(WYbig' * Y));
+if ~regress
+  % This is just fitting an unconditional Gaussian
+  weightsY = [];
+  [muY, SigmaY] = ...
+      mixgauss_Mstep(1, WY, WYY, WYTY, ...
+		     'cov_type', cov_typeY, 'cov_prior', cov_priorY);
+  % There is a much easier way...
+  assert(approxeq(muY, mean(Y')))
+  assert(approxeq(SigmaY, cov(Y') + 0.01*eye(ny)))
+else
+  % This is just linear regression
+  WXbig = X*w;
+  WXX = WXbig * X';
+  WX = sum(WXbig, 2);
+  WXTX = sum(diag(WXbig' * X));
+  WXY = WXbig * Y';
+  [muY, SigmaY, weightsY] = ...
+      clg_Mstep(1, WY, WYY, WYTY, WX, WXX, WXY, ...
+		'cov_type', cov_typeY, 'cov_prior', cov_priorY);
+end
+if clamp_covY, SigmaY = SigmaY; end
+if clamp_weights,  weightsY = weightsY; end
+
+if nx==1 & ny==1 & regress
+  P = polyfit(X,Y); % Y = P(1) X^1 + P(2) X^0 = ax + b
+  assert(approxeq(muY, P(2)))
+  assert(approxeq(weightsY, P(1)))
+end
+
+%%%%%%%% Test
+if 0 
+  c1 = randn(2,100);   c2 = randn(2,100);
+  y = c2(1,:); X = [ones(size(c1,2),1) c1'];
+  b = regress(y(:), X); % stats toolbox
+  [m,s,w] = linear_regression(c1, y);
+  assert(approxeq(b(1),m))
+  assert(approxeq(b(2), w(1)))
+  assert(approxeq(b(3), w(2)))
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/logist2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,115 @@
+function [beta,p,lli] = logist2(y,x,w)
+% [beta,p,lli] = logist2(y,x) 
+%
+% 2-class logistic regression.  
+%
+% INPUT
+% 	y 	Nx1 colum vector of 0|1 class assignments
+% 	x 	NxK matrix of input vectors as rows
+% 	[w]	Nx1 vector of sample weights 
+%
+% OUTPUT
+% 	beta 	Kx1 column vector of model coefficients
+% 	p 	Nx1 column vector of fitted class 1 posteriors
+% 	lli 	log likelihood
+%
+% Class 1 posterior is 1 / (1 + exp(-x*beta))
+%
+% David Martin <dmartin@eecs.berkeley.edu> 
+% April 16, 2002
+
+% Copyright (C) 2002 David R. Martin <dmartin@eecs.berkeley.edu>
+%
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2 of the
+% License, or (at your option) any later version.
+% 
+
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+% 
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+% 02111-1307, USA, or see http://www.gnu.org/copyleft/gpl.html.
+
+error(nargchk(2,3,nargin));
+
+% check inputs
+if size(y,2) ~= 1,
+  error('Input y not a column vector.');
+end
+if size(y,1) ~= size(x,1), 
+  error('Input x,y sizes mismatched.'); 
+end
+
+% get sizes
+[N,k] = size(x);
+
+% if sample weights weren't specified, set them to 1
+if nargin < 3, 
+  w = 1;
+end
+
+% normalize sample weights so max is 1
+w = w / max(w);
+
+% initial guess for beta: all zeros
+beta = zeros(k,1);
+
+% Newton-Raphson via IRLS,
+% taken from Hastie/Tibshirani/Friedman Section 4.4.
+iter = 0;
+lli = 0;
+while 1==1,
+  iter = iter + 1;
+  
+  % fitted probabilities
+  p = 1 ./ (1 + exp(-x*beta));	
+  
+  % log likelihood
+  lli_prev = lli;
+  lli = sum( w .* (y.*log(p+eps) + (1-y).*log(1-p+eps)) );
+
+  % least-squares weights
+  wt = w .* p .* (1-p);		
+
+  % derivatives of likelihood w.r.t. beta
+  deriv = x'*(w.*(y-p));
+
+  % Hessian of likelihood w.r.t. beta
+  % hessian = x'Wx, where W=diag(w)
+  % Do it this way to be memory efficient and fast.
+  hess = zeros(k,k);
+  for i = 1:k,
+    wxi = wt .* x(:,i);
+    for j = i:k,
+      hij = wxi' * x(:,j);
+      hess(i,j) = -hij;
+      hess(j,i) = -hij;
+    end
+  end
+
+  % make sure Hessian is well conditioned
+  if (rcond(hess) < eps), 
+    error(['Stopped at iteration ' num2str(iter) ...
+           ' because Hessian is poorly conditioned.']);
+    break; 
+  end;
+
+  % Newton-Raphson update step
+  step = hess\deriv;
+  beta = beta - step;
+
+  % termination criterion based on derivatives
+  tol = 1e-6;
+  if abs(deriv'*step/k) < tol, break; end;
+
+  % termination criterion based on log likelihood
+%   tol = 1e-4;
+%   if abs((lli-lli_prev)/(lli+lli_prev)) < 0.5*tol, break; end;
+end;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/logist2Apply.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function p = logist2Apply(beta, x)
+% LOGIST2APPLY 2 class logistic regression: compute posterior prob of class 1
+% function p = logist2Apply(beta, x)
+%
+% x(:,i) - each COLUMN is a test case; we append 1s automatically, if appropriate
+
+[D Ncases] = size(x);
+if length(beta)==D+1
+  F = [x; ones(1,Ncases)];
+else
+  F = x;
+end
+p = 1./(1+exp(-beta(:)'*F));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/logist2ApplyRegularized.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function prob = logist2ApplyRegularized(net, features)
+
+prob = glmfwd(net, features')';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/logist2Fit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [beta, p] = logist2Fit(y, x, addOne, w)
+% LOGIST2FIT 2 class logsitic classification
+% function beta = logist2Fit(y,x, addOne)
+%
+% y(i) = 0/1
+% x(:,i) = i'th input - we optionally append 1s to last dimension
+% w(i) = optional weight
+%
+% beta(j)- regression coefficient
+
+if nargin < 3, addOne = 1; end
+if nargin < 4, w = 1; end
+
+Ncases = size(x,2);
+if Ncases ~= length(y)
+  error(sprintf('size of data = %dx%d, size of labels=%d', size(x,1), size(x,2), length(y)))
+end
+if addOne
+  x = [x; ones(1,Ncases)];
+end
+[beta, p] = logist2(y(:), x', w(:));
+beta = beta(:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/logist2FitRegularized.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function [net, niter] = logist2FitRegularized(labels, features, maxIter)
+
+if nargin < 3, maxIter = 100; end
+
+[D  N] = size(features);
+weightPrior = 0.5;
+net = glm(D, 1, 'logistic', weightPrior);
+options = foptions;
+options(14) = maxIter;
+[net, options] = glmtrain(net, options, features', labels(:));
+niter = options(14);
+%w = logist2Fit(labelsPatches(jValidPatches), features(:, jValidPatches));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/logistK.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,287 @@
+function [beta,post,lli] = logistK(x,y,w,beta)
+% [beta,post,lli] = logistK(x,y,beta,w) 
+%
+% k-class logistic regression with optional sample weights
+%
+% k = number of classes
+% n = number of samples
+% d = dimensionality of samples
+%
+% INPUT
+% 	x 	dxn matrix of n input column vectors
+% 	y 	kxn vector of class assignments
+% 	[w]	1xn vector of sample weights 
+%	[beta]	dxk matrix of model coefficients
+%
+% OUTPUT
+% 	beta 	dxk matrix of fitted model coefficients 
+%		(beta(:,k) are fixed at 0) 
+% 	post 	kxn matrix of fitted class posteriors
+% 	lli 	log likelihood
+%
+% Let p(i,j) = exp(beta(:,j)'*x(:,i)),
+% Class j posterior for observation i is:
+%	post(j,i) = p(i,j) / (p(i,1) + ... p(i,k))
+%
+% See also logistK_eval.
+%
+% David Martin <dmartin@eecs.berkeley.edu> 
+% May 3, 2002
+
+% Copyright (C) 2002 David R. Martin <dmartin@eecs.berkeley.edu>
+%
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2 of the
+% License, or (at your option) any later version.
+% 
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+% 
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+% 02111-1307, USA, or see http://www.gnu.org/copyleft/gpl.html.
+
+% TODO - this code would be faster if x were transposed
+
+error(nargchk(2,4,nargin));
+
+debug = 0;
+if debug>0,
+  h=figure(1);
+  set(h,'DoubleBuffer','on');
+end
+
+% get sizes
+[d,nx] = size(x);
+[k,ny] = size(y);
+
+% check sizes
+if k < 2,
+  error('Input y must encode at least 2 classes.');
+end
+if nx ~= ny,
+  error('Inputs x,y not the same length.'); 
+end
+
+n = nx;
+
+% make sure class assignments have unit L1-norm
+sumy = sum(y,1);
+if abs(1-sumy) > eps,
+  sumy = sum(y,1);
+  for i = 1:k, y(i,:) = y(i,:) ./ sumy; end
+end
+clear sumy;
+
+% if sample weights weren't specified, set them to 1
+if nargin < 3, 
+  w = ones(1,n);
+end
+
+% normalize sample weights so max is 1
+w = w / max(w);
+
+% if starting beta wasn't specified, initialize randomly
+if nargin < 4,
+  beta = 1e-3*rand(d,k);
+  beta(:,k) = 0;	% fix beta for class k at zero
+else
+  if sum(beta(:,k)) ~= 0,
+    error('beta(:,k) ~= 0');
+  end
+end
+
+stepsize = 1;
+minstepsize = 1e-2;
+
+post = computePost(beta,x);
+lli = computeLogLik(post,y,w);
+
+for iter = 1:100,
+  %disp(sprintf('  logist iter=%d lli=%g',iter,lli));
+  vis(x,y,beta,lli,d,k,iter,debug);
+
+  % gradient and hessian
+  [g,h] = derivs(post,x,y,w);
+
+  % make sure Hessian is well conditioned
+  if rcond(h) < eps, 
+    % condition with Levenberg-Marquardt method
+    for i = -16:16,
+      h2 = h .* ((1 + 10^i)*eye(size(h)) + (1-eye(size(h))));
+      if rcond(h2) > eps, break, end
+    end
+    if rcond(h2) < eps,
+      warning(['Stopped at iteration ' num2str(iter) ...
+               ' because Hessian can''t be conditioned']);
+      break 
+    end
+    h = h2;
+  end
+
+  % save lli before update
+  lli_prev = lli;
+
+  % Newton-Raphson with step-size halving
+  while stepsize >= minstepsize,
+    % Newton-Raphson update step
+    step = stepsize * (h \ g);
+    beta2 = beta;
+    beta2(:,1:k-1) = beta2(:,1:k-1) - reshape(step,d,k-1);
+
+    % get the new log likelihood
+    post2 = computePost(beta2,x);
+    lli2 = computeLogLik(post2,y,w);
+
+    % if the log likelihood increased, then stop
+    if lli2 > lli, 
+      post = post2; lli = lli2; beta = beta2;
+      break
+    end
+
+    % otherwise, reduce step size by half
+    stepsize = 0.5 * stepsize;
+  end
+
+  % stop if the average log likelihood has gotten small enough
+  if 1-exp(lli/n) < 1e-2, break, end
+
+  % stop if the log likelihood changed by a small enough fraction
+  dlli = (lli_prev-lli) / lli;
+  if abs(dlli) < 1e-3, break, end
+
+  % stop if the step size has gotten too small
+  if stepsize < minstepsize, brea, end
+
+  % stop if the log likelihood has decreased; this shouldn't happen
+  if lli < lli_prev,
+    warning(['Stopped at iteration ' num2str(iter) ...
+             ' because the log likelihood decreased from ' ...
+             num2str(lli_prev) ' to ' num2str(lli) '.' ...
+            ' This may be a bug.']);
+    break
+  end
+end
+
+if debug>0, 
+  vis(x,y,beta,lli,d,k,iter,2); 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% class posteriors
+function post = computePost(beta,x)
+  [d,n] = size(x);
+  [d,k] = size(beta);
+  post = zeros(k,n);
+  bx = zeros(k,n);
+  for j = 1:k, 
+    bx(j,:) = beta(:,j)'*x; 
+  end
+  for j = 1:k, 
+    post(j,:) = 1 ./ sum(exp(bx - repmat(bx(j,:),k,1)),1);
+  end
+  
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% log likelihood
+function lli = computeLogLik(post,y,w)
+  [k,n] = size(post);
+  lli = 0;
+  for j = 1:k,
+    lli = lli + sum(w.*y(j,:).*log(post(j,:)+eps));
+  end
+  if isnan(lli), 
+    error('lli is nan'); 
+  end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% gradient and hessian
+%% These are computed in what seems a verbose manner, but it is
+%% done this way to use minimal memory.  x should be transposed
+%% to make it faster.
+function [g,h] = derivs(post,x,y,w)
+
+  [k,n] = size(post);
+  [d,n] = size(x);
+
+  % first derivative of likelihood w.r.t. beta
+  g = zeros(d,k-1);
+  for j = 1:k-1,
+    wyp = w .* (y(j,:) - post(j,:));
+    for ii = 1:d, 
+      g(ii,j) = x(ii,:) * wyp'; 
+    end
+  end
+  g = reshape(g,d*(k-1),1);
+
+  % hessian of likelihood w.r.t. beta
+  h = zeros(d*(k-1),d*(k-1)); 
+  for i = 1:k-1,	% diagonal
+    wt = w .* post(i,:) .* (1 - post(i,:));
+    hii = zeros(d,d);
+    for a = 1:d,
+      wxa = wt .* x(a,:);
+      for b = a:d,
+        hii_ab = wxa * x(b,:)';
+        hii(a,b) = hii_ab;
+        hii(b,a) = hii_ab;
+      end
+    end
+    h( (i-1)*d+1 : i*d , (i-1)*d+1 : i*d ) = -hii;
+  end
+  for i = 1:k-1,	% off-diagonal
+    for j = i+1:k-1,
+      wt = w .* post(j,:) .* post(i,:);
+      hij = zeros(d,d);
+      for a = 1:d,
+        wxa = wt .* x(a,:);
+        for b = a:d,
+          hij_ab = wxa * x(b,:)';
+          hij(a,b) = hij_ab;
+          hij(b,a) = hij_ab;
+        end
+      end
+      h( (i-1)*d+1 : i*d , (j-1)*d+1 : j*d ) = hij;
+      h( (j-1)*d+1 : j*d , (i-1)*d+1 : i*d ) = hij;
+    end
+  end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% debug/visualization
+function vis (x,y,beta,lli,d,k,iter,debug)
+
+  if debug<=0, return, end
+
+  disp(['iter=' num2str(iter) ' lli=' num2str(lli)]);
+  if debug<=1, return, end
+
+  if d~=3 | k>10, return, end
+
+  figure(1);
+  res = 100;
+  r = abs(max(max(x)));
+  dom = linspace(-r,r,res);
+  [px,py] = meshgrid(dom,dom);
+  xx = px(:); yy = py(:);
+  points = [xx' ; yy' ; ones(1,res*res)];
+  func = zeros(k,res*res);
+  for j = 1:k,
+    func(j,:) = exp(beta(:,j)'*points);
+  end
+  [mval,ind] = max(func,[],1);
+  hold off; 
+  im = reshape(ind,res,res);
+  imagesc(xx,yy,im);
+  hold on;
+  syms = {'w.' 'wx' 'w+' 'wo' 'w*' 'ws' 'wd' 'wv' 'w^' 'w<'};
+  for j = 1:k,
+    [mval,ind] = max(y,[],1);
+    ind = find(ind==j);
+    plot(x(1,ind),x(2,ind),syms{j});
+  end
+  pause(0.1);
+
+% eof
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/logistK_eval.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,83 @@
+function [post,lik,lli] = logistK_eval(beta,x,y)
+% [post,lik,lli] = logistK_eval(beta,x,y)
+%
+% Evaluate logistic regression model.
+% 
+% INPUT
+% 	beta 	dxk model coefficients (as returned by logistK)
+% 	x 	dxn matrix of n input column vectors
+% 	[y] 	kxn vector of class assignments
+%
+% OUTPUT
+% 	post 	kxn fitted class posteriors
+% 	lik 	1xn vector of sample likelihoods
+%	lli	log likelihood
+%
+% Let p(i,j) = exp(beta(:,j)'*x(:,i)),
+% Class j posterior for observation i is:
+%	post(j,i) = p(i,j) / (p(i,1) + ... p(i,k))
+% The likelihood of observation i given soft class assignments
+% y(:,i) is: 
+%	lik(i) = prod(post(:,i).^y(:,i))
+% The log-likelihood of the model given the labeled samples is:
+%	lli = sum(log(lik))
+% 
+% See also logistK.
+%
+% David Martin <dmartin@eecs.berkeley.edu> 
+% May 7, 2002
+
+% Copyright (C) 2002 David R. Martin <dmartin@eecs.berkeley.edu>
+%
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2 of the
+% License, or (at your option) any later version.
+% 
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+% 
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+% 02111-1307, USA, or see http://www.gnu.org/copyleft/gpl.html.
+
+error(nargchk(2,3,nargin));
+
+% check sizes
+if size(beta,1) ~= size(x,1),
+  error('Inputs beta,x not the same height.');
+end
+if nargin > 3 & size(y,2) ~= size(x,2), 
+  error('Inputs x,y not the same length.'); 
+end
+
+% get sizes
+[d,k] = size(beta);
+[d,n] = size(x);
+
+% class posteriors
+post = zeros(k,n);
+bx = zeros(k,n);
+for j = 1:k, 
+  bx(j,:) = beta(:,j)'*x; 
+end
+for j = 1:k, 
+  post(j,:) = 1 ./ sum(exp(bx - repmat(bx(j,:),k,1)),1);
+end
+clear bx;
+
+% likelihood of each sample
+if nargout > 1,
+  y = y ./ repmat(sum(y,1),k,1); % L1-normalize class assignments
+  lik = prod(post.^y,1);
+end
+
+% total log likelihood
+if nargout > 2,
+  lli = sum(log(lik+eps));
+end;
+
+% eof
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/marginalize_gaussian.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function [muX, SXX] = marginalize_gaussian(mu, Sigma, X, Y, ns)
+% MARGINALIZE_GAUSSIAN Compute Pr(X) from Pr(X,Y) where X and Y are jointly Gaussian.
+% [muX, SXX] = marginalize_gaussian(mu, Sigma, X, Y, ns)
+
+[muX, muY, SXX, SXY, SYX, SYY] = partition_matrix_vec(mu, Sigma, X, Y, ns);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/matrix_T_pdf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function p = matrix_T_pdf(A, M, V, K, n)
+% MATRIX_T_PDF Evaluate the density of a matrix under a Matrix-T distribution
+% p = matrix_T_pdf(A, M, V, K, n)
+
+% See "Bayesian Linear Regression", T. Minka, MIT Tech Report, 2001
+
+[d m] = size(K);
+is = 1:d;
+c1 = prod(gamma((n+1-is)/2)) / prod(gamma((n-m+1-is)/2));
+c2 = det(K)^(d/2) / det(pi*V)^(m/2); %% pi or 2pi?
+p = c1 * c2 * det((A-M)'*inv(V)*(A-M)*K + eye(m))^(-n/2);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/matrix_normal_pdf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function p = matrix_normal_pdf(A, M, V, K)
+% MATRIX_NORMAL_PDF Evaluate the density of a matrix under a Matrix-Normal distribution
+% p = matrix_normal_pdf(A, M, V, K)
+
+% See "Bayesian Linear Regression", T. Minka, MIT Tech Report, 2001
+
+[d m] = size(K);
+c = det(K)^(d/2) / det(2*pi*V)^(m/2);
+p = c * exp(-0.5*tr((A-M)'*inv(V)*(A-M)*K));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/mc_stat_distrib.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function pi = mc_stat_distrib(P)
+% MC_STAT_DISTRIB Compute stationary distribution of a Markov chain
+% function pi = mc_stat_distrib(P)
+% 
+% Each row of P should sum to one; pi is a column vector
+
+% Kevin Murphy, 16 Feb 2003
+
+% The stationary distribution pi satisfies pi P = pi
+% subject to sum_i pi(i) = 1,  0 <= pi(i) <= 1
+% Hence
+% (P'  0n   (pi  = (pi 
+%  1n  0)    1)     1)
+% or P2 pi2 = pi2.
+% Naively we can solve this using (P2 - I(n+1)) pi2 = 0(n+1)
+% or P3 pi2 = 0(n+1), i.e., pi2 = P3 \ zeros(n+1,1)
+% but this is singular (because of the sum-to-one constraint).
+% Hence we replace the last row of P' with 1s instead of appending ones to create P2, 
+% and similarly for pi.
+
+n = length(P);
+P4 = P'-eye(n);
+P4(end,:) = 1;
+pi = P4 \ [zeros(n-1,1);1];
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_Mstep.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,106 @@
+function [mu, Sigma] = mixgauss_Mstep(w, Y, YY, YTY, varargin)
+% MSTEP_COND_GAUSS Compute MLEs for mixture of Gaussians given expected sufficient statistics
+% function [mu, Sigma] = Mstep_cond_gauss(w, Y, YY, YTY, varargin)
+%
+% We assume P(Y|Q=i) = N(Y; mu_i, Sigma_i)
+% and w(i,t) = p(Q(t)=i|y(t)) = posterior responsibility
+% See www.ai.mit.edu/~murphyk/Papers/learncg.pdf.
+%
+% INPUTS:
+% w(i) = sum_t w(i,t) = responsibilities for each mixture component
+%  If there is only one mixture component (i.e., Q does not exist),
+%  then w(i) = N = nsamples,  and 
+%  all references to i can be replaced by 1.
+% YY(:,:,i) = sum_t w(i,t) y(:,t) y(:,t)' = weighted outer product
+% Y(:,i) = sum_t w(i,t) y(:,t) = weighted observations
+% YTY(i) = sum_t w(i,t) y(:,t)' y(:,t) = weighted inner product
+%   You only need to pass in YTY if Sigma is to be estimated as spherical.
+%
+% Optional parameters may be passed as 'param_name', param_value pairs.
+% Parameter names are shown below; default values in [] - if none, argument is mandatory.
+%
+% 'cov_type' - 'full', 'diag' or 'spherical' ['full']
+% 'tied_cov' - 1 (Sigma) or 0 (Sigma_i) [0]
+% 'clamped_cov' - pass in clamped value, or [] if unclamped [ [] ]
+% 'clamped_mean' - pass in clamped value, or [] if unclamped [ [] ]
+% 'cov_prior' - Lambda_i, added to YY(:,:,i) [0.01*eye(d,d,Q)]
+%
+% If covariance is tied, Sigma has size d*d.
+% But diagonal and spherical covariances are represented in full size.
+
+[cov_type, tied_cov,  clamped_cov, clamped_mean, cov_prior, other] = ...
+    process_options(varargin,...
+		    'cov_type', 'full', 'tied_cov', 0,  'clamped_cov', [], 'clamped_mean', [], ...
+		    'cov_prior', []);
+
+[Ysz Q] = size(Y);
+N = sum(w);
+if isempty(cov_prior)
+  %cov_prior = zeros(Ysz, Ysz, Q);
+  %for q=1:Q
+  %  cov_prior(:,:,q) = 0.01*cov(Y(:,q)');
+  %end
+  cov_prior = repmat(0.01*eye(Ysz,Ysz), [1 1 Q]);
+end
+%YY = reshape(YY, [Ysz Ysz Q]) + cov_prior; % regularize the scatter matrix
+YY = reshape(YY, [Ysz Ysz Q]);
+
+% Set any zero weights to one before dividing
+% This is valid because w(i)=0 => Y(:,i)=0, etc
+w = w + (w==0);
+		    
+if ~isempty(clamped_mean)
+  mu = clamped_mean;
+else
+  % eqn 6
+  %mu = Y ./ repmat(w(:)', [Ysz 1]);% Y may have a funny size
+  mu = zeros(Ysz, Q);
+  for i=1:Q
+    mu(:,i) = Y(:,i) / w(i);
+  end
+end
+
+if ~isempty(clamped_cov)
+  Sigma = clamped_cov;
+  return;
+end
+
+if ~tied_cov
+  Sigma = zeros(Ysz,Ysz,Q);
+  for i=1:Q
+    if cov_type(1) == 's'
+      % eqn 17
+      s2 = (1/Ysz)*( (YTY(i)/w(i)) - mu(:,i)'*mu(:,i) );
+      Sigma(:,:,i) = s2 * eye(Ysz);
+    else
+      % eqn 12
+      SS = YY(:,:,i)/w(i)  - mu(:,i)*mu(:,i)';
+      if cov_type(1)=='d'
+	SS = diag(diag(SS));
+      end
+      Sigma(:,:,i) = SS;
+    end
+  end
+else % tied cov
+  if cov_type(1) == 's'
+    % eqn 19
+    s2 = (1/(N*Ysz))*(sum(YTY,2) + sum(diag(mu'*mu) .* w));
+    Sigma = s2*eye(Ysz);
+  else
+    SS = zeros(Ysz, Ysz);
+    % eqn 15
+    for i=1:Q % probably could vectorize this...
+      SS = SS + YY(:,:,i)/N - mu(:,i)*mu(:,i)';
+    end
+    if cov_type(1) == 'd'
+      Sigma = diag(diag(SS));
+    else
+      Sigma = SS;
+    end
+  end
+end
+
+if tied_cov
+  Sigma =  repmat(Sigma, [1 1 Q]);
+end
+Sigma = Sigma + cov_prior;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_classifier_apply.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function [classHatTest, probPos] = mixgauss_classifier_apply(mixgauss, testFeatures)
+
+Bpos = mixgauss_prob(testFeatures, mixgauss.pos.mu, mixgauss.pos.Sigma, mixgauss.pos.prior);
+Bneg = mixgauss_prob(testFeatures, mixgauss.neg.mu, mixgauss.neg.Sigma,  mixgauss.neg.prior);
+prior_pos = mixgauss.priorC(1);
+prior_neg = mixgauss.priorC(2);
+post = normalize([Bpos * prior_pos; Bneg * prior_neg], 1);
+probPos = post(1,:)';
+[junk, classHatTest] = max(post);
+classHatTest(find(classHatTest==2))=0;
+classHatTest = classHatTest(:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_classifier_train.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+function mixgauss = mixgauss_classifier_train(trainFeatures, trainLabels, nc, varargin)
+% function mixgauss = mixgauss_classifier_train(trainFeatures, trainLabels, nclusters, varargin)
+% trainFeatures(:,i) for i'th example
+% trainLabels should be 0,1
+% To evaluate performance on a tets set, use
+% mixgauss = mixgauss_classifier_train(trainFeatures, trainLabels, nc, 'testFeatures', tf, 'testLabels', tl)
+
+[testFeatures, testLabels, max_iter, thresh, cov_type, mu, Sigma, priorC, method, ...
+ cov_prior, verbose, prune_thresh] = process_options(...
+    varargin, 'testFeatures', [], 'testLabels', [], ...
+     'max_iter', 10, 'thresh', 0.01, 'cov_type', 'diag', ...
+    'mu', [], 'Sigma', [], 'priorC', [], 'method', 'kmeans', ...
+    'cov_prior', [], 'verbose', 0, 'prune_thresh', 0);
+
+Nclasses = 2; % max([trainLabels testLabels]) + 1;
+
+pos = find(trainLabels == 1);
+neg = find(trainLabels == 0);
+
+if verbose, fprintf('fitting pos\n'); end
+[mixgauss.pos.mu, mixgauss.pos.Sigma, mixgauss.pos.prior] = ...
+    mixgauss_em(trainFeatures(:, pos), nc, varargin{:});
+
+if verbose, fprintf('fitting neg\n'); end
+[mixgauss.neg.mu, mixgauss.neg.Sigma, mixgauss.neg.prior] = ...
+    mixgauss_em(trainFeatures(:, neg), nc, varargin{:});
+
+
+if ~isempty(priorC)
+  mixgauss.priorC = priorC;
+else
+  mixgauss.priorC = normalize([length(pos) length(neg)]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_em.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+function [mu, Sigma, prior] = mixgauss_em(Y, nc, varargin)
+% MIXGAUSS_EM Fit the parameters of a mixture of Gaussians using EM
+% function [mu, Sigma, prior] = mixgauss_em(data, nc, varargin)
+%
+% data(:, t) is the t'th data point
+% nc is the number of clusters
+
+% Kevin Murphy, 13 May 2003
+
+[max_iter, thresh, cov_type, mu, Sigma, method, ...
+ cov_prior, verbose, prune_thresh] = process_options(...
+    varargin, 'max_iter', 10, 'thresh', 1e-2, 'cov_type', 'full', ...
+    'mu', [], 'Sigma', [],  'method', 'kmeans', ...
+    'cov_prior', [], 'verbose', 0, 'prune_thresh', 0);
+
+[ny T] = size(Y);
+
+if nc==1
+  % No latent variable, so there is a closed-form solution
+  mu = mean(Y')';
+  Sigma = cov(Y');
+  if strcmp(cov_type, 'diag')
+    Sigma = diag(diag(Sigma));
+  end
+  prior = 1;
+  return;
+end
+
+if isempty(mu)
+  [mu, Sigma, prior] = mixgauss_init(nc, Y, cov_type, method);
+end
+
+previous_loglik = -inf;
+num_iter = 1;
+converged = 0;
+
+%if verbose, fprintf('starting em\n'); end
+
+while (num_iter <= max_iter) & ~converged
+  % E step
+  probY = mixgauss_prob(Y, mu, Sigma, prior); % probY(q,t)
+  [post, lik] = normalize(probY .* repmat(prior, 1, T), 1); % post(q,t)
+  loglik = log(sum(lik));
+ 
+  % extract expected sufficient statistics
+  w = sum(post,2);  % w(c) = sum_t post(c,t)
+  WYY = zeros(ny, ny, nc);  % WYY(:,:,c) = sum_t post(c,t) Y(:,t) Y(:,t)'
+  WY = zeros(ny, nc);  % WY(:,c) = sum_t post(c,t) Y(:,t)
+  WYTY = zeros(nc,1); % WYTY(c) = sum_t post(c,t) Y(:,t)' Y(:,t)
+  for c=1:nc
+    weights = repmat(post(c,:), ny, 1); % weights(:,t) = post(c,t)
+    WYbig = Y .* weights; % WYbig(:,t) = post(c,t) * Y(:,t)
+    WYY(:,:,c) = WYbig * Y';
+    WY(:,c) = sum(WYbig, 2); 
+    WYTY(c) = sum(diag(WYbig' * Y)); 
+  end
+  
+  % M step
+  prior = normalize(w);
+  [mu, Sigma] = mixgauss_Mstep(w, WY, WYY, WYTY, 'cov_type', cov_type, 'cov_prior', cov_prior);
+  
+  if verbose, fprintf(1, 'iteration %d, loglik = %f\n', num_iter, loglik); end
+  num_iter =  num_iter + 1;
+  converged = em_converged(loglik, previous_loglik, thresh);
+  previous_loglik = loglik;
+  
+end
+
+if prune_thresh > 0
+  ndx = find(prior < prune_thresh);
+  mu(:,ndx) = [];
+  Sigma(:,:,ndx) = [];
+  prior(ndx) = [];
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_init.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function [mu, Sigma, weights] = mixgauss_init(M, data, cov_type, method)
+% MIXGAUSS_INIT Initial parameter estimates for a mixture of Gaussians
+% function [mu, Sigma, weights] = mixgauss_init(M, data, cov_type. method)
+%
+% INPUTS:
+% data(:,t) is the t'th example
+% M = num. mixture components
+% cov_type = 'full', 'diag' or 'spherical'
+% method = 'rnd' (choose centers randomly from data) or 'kmeans' (needs netlab)
+%
+% OUTPUTS:
+% mu(:,k) 
+% Sigma(:,:,k) 
+% weights(k)
+
+if nargin < 4, method = 'kmeans'; end
+
+[d T] = size(data);
+data = reshape(data, d, T); % in case it is data(:, t, sequence_num)
+
+switch method
+ case 'rnd', 
+  C = cov(data');
+  Sigma = repmat(diag(diag(C))*0.5, [1 1 M]);
+  % Initialize each mean to a random data point
+  indices = randperm(T);
+  mu = data(:,indices(1:M));
+  weights = normalise(ones(M,1));
+ case 'kmeans',
+  mix = gmm(d, M, cov_type);
+  options = foptions;
+  max_iter = 5;
+  options(1) = -1; % be quiet!
+  options(14) = max_iter;
+  mix = gmminit(mix, data', options);
+  mu = reshape(mix.centres', [d M]);
+  weights = mix.priors(:);
+  for m=1:M
+    switch cov_type
+     case 'diag',
+      Sigma(:,:,m) = diag(mix.covars(m,:));
+     case 'full',
+      Sigma(:,:,m) = mix.covars(:,:,m);
+     case 'spherical',
+      Sigma(:,:,m) = mix.covars(m) * eye(d);
+    end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_prob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,133 @@
+function [B, B2] = mixgauss_prob(data, mu, Sigma, mixmat, unit_norm)
+% EVAL_PDF_COND_MOG Evaluate the pdf of a conditional mixture of Gaussians
+% function [B, B2] = eval_pdf_cond_mog(data, mu, Sigma, mixmat, unit_norm)
+%
+% Notation: Y is observation, M is mixture component, and both may be conditioned on Q.
+% If Q does not exist, ignore references to Q=j below.
+% Alternatively, you may ignore M if this is a conditional Gaussian.
+%
+% INPUTS:
+% data(:,t) = t'th observation vector 
+%
+% mu(:,k) = E[Y(t) | M(t)=k] 
+% or mu(:,j,k) = E[Y(t) | Q(t)=j, M(t)=k]
+%
+% Sigma(:,:,j,k) = Cov[Y(t) | Q(t)=j, M(t)=k]
+% or there are various faster, special cases:
+%   Sigma() - scalar, spherical covariance independent of M,Q.
+%   Sigma(:,:) diag or full, tied params independent of M,Q. 
+%   Sigma(:,:,j) tied params independent of M. 
+%
+% mixmat(k) = Pr(M(t)=k) = prior
+% or mixmat(j,k) = Pr(M(t)=k | Q(t)=j) 
+% Not needed if M is not defined.
+%
+% unit_norm - optional; if 1, means data(:,i) AND mu(:,i) each have unit norm (slightly faster)
+%
+% OUTPUT:
+% B(t) = Pr(y(t)) 
+% or
+% B(i,t) = Pr(y(t) | Q(t)=i) 
+% B2(i,k,t) = Pr(y(t) | Q(t)=i, M(t)=k) 
+%
+% If the number of mixture components differs depending on Q, just set the trailing
+% entries of mixmat to 0, e.g., 2 components if Q=1, 3 components if Q=2,
+% then set mixmat(1,3)=0. In this case, B2(1,3,:)=1.0.
+
+
+
+
+if isvectorBNT(mu) & size(mu,2)==1
+  d = length(mu);
+  Q = 1; M = 1;
+elseif ndims(mu)==2
+  [d Q] = size(mu);
+  M = 1;
+else
+  [d Q M] = size(mu);
+end
+[d T] = size(data);
+
+if nargin < 4, mixmat = ones(Q,1); end
+if nargin < 5, unit_norm = 0; end
+
+%B2 = zeros(Q,M,T); % ATB: not needed allways
+%B = zeros(Q,T);
+
+if isscalarBNT(Sigma)
+  mu = reshape(mu, [d Q*M]);
+  if unit_norm % (p-q)'(p-q) = p'p + q'q - 2p'q = n+m -2p'q since p(:,i)'p(:,i)=1
+    %avoid an expensive repmat
+    disp('unit norm')
+    %tic; D = 2 -2*(data'*mu)'; toc 
+    D = 2 - 2*(mu'*data);
+    tic; D2 = sqdist(data, mu)'; toc
+    assert(approxeq(D,D2)) 
+  else
+    D = sqdist(data, mu)';
+  end
+  clear mu data % ATB: clear big old data
+  % D(qm,t) = sq dist between data(:,t) and mu(:,qm)
+  logB2 = -(d/2)*log(2*pi*Sigma) - (1/(2*Sigma))*D; % det(sigma*I) = sigma^d
+  B2 = reshape(exp(logB2), [Q M T]);
+  clear logB2 % ATB: clear big old data
+  
+elseif ndims(Sigma)==2 % tied full
+  mu = reshape(mu, [d Q*M]);
+  D = sqdist(data, mu, inv(Sigma))';
+  % D(qm,t) = sq dist between data(:,t) and mu(:,qm)
+  logB2 = -(d/2)*log(2*pi) - 0.5*logdet(Sigma) - 0.5*D;
+  %denom = sqrt(det(2*pi*Sigma));
+  %numer = exp(-0.5 * D);
+  %B2 = numer/denom;
+  B2 = reshape(exp(logB2), [Q M T]);
+  
+elseif ndims(Sigma)==3 % tied across M
+  B2 = zeros(Q,M,T);
+  for j=1:Q
+    % D(m,t) = sq dist between data(:,t) and mu(:,j,m)
+    if isposdef(Sigma(:,:,j))
+      D = sqdist(data, permute(mu(:,j,:), [1 3 2]), inv(Sigma(:,:,j)))';
+      logB2 = -(d/2)*log(2*pi) - 0.5*logdet(Sigma(:,:,j)) - 0.5*D;
+      B2(j,:,:) = exp(logB2);
+    else
+      error(sprintf('mixgauss_prob: Sigma(:,:,q=%d) not psd\n', j));
+    end
+  end
+  
+else % general case
+  B2 = zeros(Q,M,T);
+  for j=1:Q
+    for k=1:M
+      %if mixmat(j,k) > 0
+      B2(j,k,:) = gaussian_prob(data, mu(:,j,k), Sigma(:,:,j,k));
+      %end
+    end
+  end
+end
+
+% B(j,t) = sum_k B2(j,k,t) * Pr(M(t)=k | Q(t)=j) 
+
+% The repmat is actually slower than the for-loop, because it uses too much memory
+% (this is true even for small T).
+
+%B = squeeze(sum(B2 .* repmat(mixmat, [1 1 T]), 2));
+%B = reshape(B, [Q T]); % undo effect of squeeze in case Q = 1
+  
+B = zeros(Q,T);
+if Q < T
+  for q=1:Q
+    %B(q,:) = mixmat(q,:) * squeeze(B2(q,:,:)); % squeeze chnages order if M=1
+    B(q,:) = mixmat(q,:) * permute(B2(q,:,:), [2 3 1]); % vector * matrix sums over m
+  end
+else
+  for t=1:T
+    B(:,t) = sum(mixmat .* B2(:,:,t), 2); % sum over m
+  end
+end
+%t=toc;fprintf('%5.3f\n', t)
+
+%tic
+%A = squeeze(sum(B2 .* repmat(mixmat, [1 1 T]), 2));
+%t=toc;fprintf('%5.3f\n', t)
+%assert(approxeq(A,B)) % may be false because of round off error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_prob_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,111 @@
+function test_eval_pdf_cond_mixgauss()
+
+%Q = 10; M = 100; d = 20; T = 500;
+Q = 2; M = 3; d = 4; T = 5;
+
+mu = rand(d,Q,M);
+data = randn(d,T);
+%mixmat = mk_stochastic(rand(Q,M));
+mixmat = mk_stochastic(ones(Q,M));
+
+% tied scalar
+Sigma = 0.01;
+
+mu = rand(d,M,Q);
+weights = mixmat';
+N = M*ones(1,Q);
+tic; [B, B2, D] = parzen(data, mu, Sigma, N, weights); toc
+tic; [BC, B2C, DC] = parzenC(data, mu, Sigma, N); toc
+approxeq(B,BC)
+B2C = reshape(B2C,[M Q T]);
+approxeq(B2,B2C)
+DC = reshape(DC,[M Q T]);
+approxeq(D,DC)
+
+
+return
+
+tic; [B, B2] = eval_pdf_cond_mixgauss(data, mu, Sigma, mixmat); toc
+tic; C = eval_pdf_cond_parzen(data, mu, Sigma); toc
+approxeq(B,C)
+
+return;
+
+
+mu = reshape(mu, [d Q*M]);
+
+data = mk_unit_norm(data);
+mu = mk_unit_norm(mu);
+tic; D = 2 -2*(data'*mu); toc % avoid an expensive repmat
+tic; D2 = sqdist(data, mu); toc
+approxeq(D,D2)
+
+
+% D(t,m) = sq dist between data(:,t) and mu(:,m)
+mu = reshape(mu, [d Q*M]);
+D = dist2(data', mu');
+%denom = (2*pi)^(d/2)*sqrt(abs(det(C)));
+denom = (2*pi*Sigma)^(d/2); % sqrt(det(2*pi*Sigma))
+numer = exp(-0.5/Sigma  * D');
+B2 = numer / denom;
+B2 = reshape(B2, [Q M T]);
+
+tic; B = squeeze(sum(B2 .* repmat(mixmat, [1 1 T]), 2)); toc
+
+tic
+A = zeros(Q,T);
+for q=1:Q
+  A(q,:) = mixmat(q,:) * squeeze(B2(q,:,:)); % sum over m
+end
+toc
+assert(approxeq(A,B))
+
+tic
+A = zeros(Q,T);
+for t=1:T
+  A(:,t) = sum(mixmat .* B2(:,:,t), 2); % sum over m
+end
+toc
+assert(approxeq(A,B))
+
+    
+
+
+mu = reshape(mu, [d Q M]);
+B3 = zeros(Q,M,T);
+for j=1:Q
+  for k=1:M
+    B3(j,k,:) = gaussian_prob(data, mu(:,j,k), Sigma*eye(d));
+  end
+end
+assert(approxeq(B2, B3))
+
+logB4 = -(d/2)*log(2*pi*Sigma) - (1/(2*Sigma))*D; % det(sigma*I) = sigma^d
+B4 = reshape(exp(logB4), [Q M T]);
+assert(approxeq(B4, B3))
+
+
+
+  
+% tied cov matrix
+
+Sigma = rand_psd(d,d);
+mu = reshape(mu, [d Q*M]);
+D = sqdist(data, mu, inv(Sigma))';
+denom = sqrt(det(2*pi*Sigma));
+numer = exp(-0.5 * D);
+B2 = numer / denom;
+B2 = reshape(B2, [Q M T]);
+
+mu = reshape(mu, [d Q M]);
+B3 = zeros(Q,M,T);
+for j=1:Q
+  for k=1:M
+    B3(j,k,:) = gaussian_prob(data, mu(:,j,k), Sigma);
+  end
+end
+assert(approxeq(B2, B3))
+
+logB4 = -(d/2)*log(2*pi) - 0.5*logdet(Sigma) - 0.5*D;
+B4 = reshape(exp(logB4), [Q M T]);
+assert(approxeq(B4, B3))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/mixgauss_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [data, indices] = mixgauss_sample(mu, Sigma, mixweights, Nsamples)
+%  mixgauss_sample Sample data from a mixture of Gaussians
+% function [data, indices] = mixgauss_sample(mu, Sigma, mixweights, Nsamples)
+%
+% Model is P(X) = sum_k mixweights(k) N(X; mu(:,k), Sigma(:,:,k)) or Sigma(k) for scalar
+% data(:,i) is the i'th sample from P(X)
+% indices(i) is the component from which sample i was drawn
+
+[D K] = size(mu);
+data = zeros(D, Nsamples);
+indices = sample_discrete(mixweights, 1, Nsamples);
+for k=1:K
+  if ndims(Sigma) < 3
+    sig = Sigma(k);
+  else
+    sig = Sigma(:,:,k);
+  end
+  ndx = find(indices==k);
+  if length(ndx) > 0
+    data(:,ndx) = sample_gaussian(mu(:,k), sig, length(ndx))';
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/mkPolyFvec.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function p = mkPolyFvec(x)
+% MKPOLYFVEC Make feature vector by constructing 2nd order polynomial from input data
+% function p = mkPolyFvec(x)
+%
+% x(:,i) for example i
+% p(:,i) = [x(1,i) x(2,i) x(3,i) x(1,i)^2 x(2,i)^2 x(3,i)^2 ..
+%           x(1,i)*x(2,i) x(1,i)*x(3,i) x(2,i)*x(3,i)]'
+%
+% Example
+% x = [4 5 6]'
+% p = [4 5 6  16 25 36  20 24 30]'
+
+fvec = x;
+fvecSq = x.*x;
+[D N] = size(x);
+fvecCross = zeros(D*(D-1)/2, N);
+i = 1;
+for d=1:D
+  for d2=d+1:D
+    fvecCross(i,:) = x(d,:) .* x(d2,:);
+    i = i + 1;
+  end
+end
+p = [fvec; fvecSq; fvecCross];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/mk_unit_norm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function B = mk_unit_norm(A)
+% MK_UNIT_NORM Make each column be a unit norm vector
+% function B = mk_unit_norm(A)
+% 
+% We divide each column by its magnitude
+
+
+[nrows ncols] = size(A);
+s = sum(A.^2);
+ndx = find(s==0);
+s(ndx)=1; 
+B = A ./ repmat(sqrt(s), [nrows 1]);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/multinomial_prob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function B = eval_pdf_cond_multinomial(data, obsmat)
+% EVAL_PDF_COND_MULTINOMIAL Evaluate pdf of conditional multinomial 
+% function B = eval_pdf_cond_multinomial(data, obsmat)
+%
+% Notation: Y = observation (O values), Q = conditioning variable (K values)
+%
+% Inputs:
+% data(t) = t'th observation - must be an integer in {1,2,...,K}: cannot be 0!
+% obsmat(i,o) = Pr(Y(t)=o | Q(t)=i)
+%
+% Output:
+% B(i,t) = Pr(y(t) | Q(t)=i)
+
+[Q O] = size(obsmat);
+T = prod(size(data)); % length(data);
+B = zeros(Q,T);
+
+for t=1:T
+  B(:,t) = obsmat(:, data(t));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/multinomial_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function Y = sample_cond_multinomial(X, M)
+% SAMPLE_MULTINOMIAL Sample Y(i) ~ M(X(i), :)
+% function Y = sample_multinomial(X, M)
+%
+% X(i) = i'th sample
+% M(i,j) = P(Y=j | X=i) = noisy channel model
+%
+% e.g., if X is a binary image,
+% Y = sample_multinomial(softeye(2, 0.9), X)
+% will create a noisy version of X, where bits are flipped with probability 0.1
+
+if any(X(:)==0)
+  error('data must only contain positive integers')
+end
+
+Y = zeros(size(X));
+for i=min(X(:)):max(X(:))
+  ndx = find(X==i);
+  Y(ndx) = sample_discrete(M(i,:), length(ndx), 1);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/multipdf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function p = multipdf(x,theta)
+%MULTIPDF Multinomial probability density function.
+%   p = multipdf(x,theta) returns the probabilities of 
+%   vector x, under the multinomial distribution
+%   with parameter vector theta.
+%
+%   Author: David Ross
+
+%--------------------------------------------------------
+% Check the arguments.
+%--------------------------------------------------------
+error(nargchk(2,2,nargin));
+
+% make sure theta is a vector
+if ndims(theta) > 2 | all(size(theta) > 1)
+    error('theta must be a vector');
+end
+
+% make sure x is of the appropriate size
+if ndims(x) > 2 | any(size(x) ~= size(theta))
+    error('columns of X must have same length as theta');
+end
+
+
+%--------------------------------------------------------
+% Main...
+%--------------------------------------------------------
+p = prod(theta .^ x);
+p = p .* factorial(sum(x)) ./ prod(factorial_v(x));
+
+
+%--------------------------------------------------------
+% Function factorial_v(x): computes the factorial function
+% on each element of x
+%--------------------------------------------------------
+function r = factorial_v(x)
+
+if size(x,2) == 1
+    x = x';
+end
+
+r = [];
+for y = x
+    r = [r factorial(y)];
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/multirnd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+function r = multirnd(theta,k)
+%MULTIRND - Random vector from multinomial distribution.
+%   r = multirnd(theta,k) returns a vector randomly selected
+%   from the multinomial distribution with parameter vector
+%   theta, and count k (i.e. sum(r) = k).
+%
+%   Note: if k is unspecified, then it is assumed k=1.
+%
+%   Author: David Ross
+%
+
+%--------------------------------------------------------
+% Check the arguments.
+%--------------------------------------------------------
+error(nargchk(1,2,nargin));
+
+% make sure theta is a vector
+if ndims(theta) > 2 | all(size(theta) > 1)
+    error('theta must be a vector');
+end
+
+% if theta is a row vector, convert it to a column vector
+if size(theta,1) == 1
+    theta = theta';
+end
+
+% make sure k is a scalar?
+
+% if the number of samples has not been provided, set
+% it to one
+if nargin == 1
+    k = 1;
+end
+
+
+%--------------------------------------------------------
+% Main...
+%--------------------------------------------------------
+n = length(theta);
+theta_cdf = cumsum(theta);
+
+r = zeros(n,1);
+random_vals = rand(k,1);
+
+for j = 1:k
+    index = min(find(random_vals(j) <= theta_cdf));
+    r(index) = r(index) + 1;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/normal_coef.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function c = normal_coef (Sigma)
+% NORMAL_COEF Compute the normalizing coefficient for a multivariate gaussian.
+% c = normal_coef (Sigma)
+
+n = length(Sigma);
+c = (2*pi)^(-n/2) * det(Sigma)^(-0.5);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/partial_corr_coef.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function [r, c] = partial_corr_coef(S, i, j, Y)
+% PARTIAL_CORR_COEF Compute a partial correlation coefficient
+% [r, c] = partial_corr_coef(S, i, j, Y)
+%
+% S is the covariance (or correlation) matrix for X, Y, Z
+% where X=[i j], Y is conditioned on, and Z is marginalized out.
+% Let S2 = Cov[X | Y] be the partial covariance matrix.
+% Then c = S2(i,j) and r = c / sqrt( S2(i,i) * S2(j,j) ) 
+%
+
+% Example: Anderson (1984) p129
+% S = [1.0 0.8 -0.4;
+%     0.8 1.0 -0.56;
+%     -0.4 -0.56 1.0];
+% r(1,3 | 2) = 0.0966 
+%
+% Example: Van de Geer (1971) p111
+%S = [1     0.453 0.322;
+%     0.453 1.0   0.596;
+%     0.322 0.596 1];
+% r(2,3 | 1) = 0.533
+
+X = [i j];
+i2 = 1; % find_equiv_posns(i, X);
+j2 = 2; % find_equiv_posns(j, X);
+S2 = S(X,X) - S(X,Y)*inv(S(Y,Y))*S(Y,X);
+c = S2(i2,j2);
+r = c / sqrt(S2(i2,i2) * S2(j2,j2));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/parzen.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,88 @@
+function [B,B2,dist] = parzen(data, mu, Sigma, N)
+% EVAL_PDF_COND_PARZEN Evaluate the pdf of a conditional Parzen window
+% function B = eval_pdf_cond_parzen(data, mu, Sigma, N)
+%
+% B(q,t) = Pr(data(:,t) | Q=q) = sum_{m=1}^{N(q)} w(m,q)*K(data(:,t) - mu(:,m,q); sigma)
+% where K() is a Gaussian kernel with spherical variance sigma,
+% and w(m,q) = 1/N(q) if m<=N(q) and = 0 otherwise
+% where N(q) is the number of mxiture components for q 
+%
+% B2(m,q,t) =  K(data(:,t) - mu(:,m,q); sigma) for m=1:max(N)
+
+% This is like eval_pdf_cond_parzen, except mu is mu(:,m,q) instead of mu(:,q,m)
+% and we use 1/N(q) instead of mixmat(q,m)
+
+if nargout >= 2
+  keep_B2 = 1;
+else
+  keep_B2 = 0;
+end
+
+if nargout >= 3
+  keep_dist = 1;
+else
+  keep_dist = 0;
+end
+
+[d M Q] = size(mu);
+[d T] = size(data);
+
+M = max(N(:));
+
+B = zeros(Q,T);
+const1 = (2*pi*Sigma)^(-d/2);
+const2 = -(1/(2*Sigma));
+if T*Q*M>20000000 % not enough memory to call sqdist
+  disp('eval parzen for loop')
+  if keep_dist,
+    dist = zeros(M,Q,T);
+  end
+  if keep_B2
+    B2 = zeros(M,Q,T);
+  end
+  for q=1:Q
+    D = sqdist(mu(:,1:N(q),q), data); % D(m,t)
+    if keep_dist
+      dist(:,q,:) = D;
+    end
+    tmp = const1 * exp(const2*D);
+    if keep_B2,
+      B2(:,q,:) = tmp;
+    end
+    if N(q) > 0
+      %B(q,:) = (1/N(q)) * const1 * sum(exp(const2*D), 2);
+      B(q,:) = (1/N(q)) * sum(tmp,1);
+    end
+  end
+else
+  %disp('eval parzen vectorized')
+  dist = sqdist(reshape(mu(:,1:M,:), [d M*Q]), data); % D(mq,t)
+  dist = reshape(dist, [M Q T]);
+  B2 = const1 * exp(const2*dist); % B2(m,q,t)
+  if ~keep_dist
+    clear dist
+  end
+  
+  % weights(m,q) is the weight of mixture component m for q  
+  %    = 1/N(q) if m<=N(q) and = 0 otherwise
+  % e.g., N = [2   3   1], M = 3,
+  % weights = [1/2 1/3 1   = 1/2 1/3 1/1      2 3 1     1 1 1
+  %            1/2 1/3 0     1/2 1/3 1/1 .*   2 3 1 <=  2 2 2
+  %            0   1/3 0]    1/2 1/3 1/1      2 3 1     3 3 3
+   
+  Ns = repmat(N(:)', [M 1]);
+  ramp = 1:M;
+  ramp = repmat(ramp(:), [1 Q]);
+  n = N + (N==0); % avoid 1/0 by replacing with 0* 1/1m where 0 comes from mask
+  N1 = repmat(1 ./ n(:)', [M 1]);
+  mask = (ramp <= Ns);
+  weights = N1 .* mask;
+  B2 = B2 .* repmat(mask, [1 1 T]);
+  
+  % B(q,t) = sum_m B2(m,q,t) * P(m|q) = sum_m B2(m,q,t) * weights(m,q)
+  B = squeeze(sum(B2 .* repmat(weights, [1 1 T]), 1)); 
+  B = reshape(B, [Q T]); % undo effect of squeeze in case Q = 1
+end
+
+  
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/parzenC.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,116 @@
+/* C mex version of parzen.m
+[B,B2] = parzen(feat, mu,  Sigma, Nproto); 
+*/
+#include "mex.h"
+#include <stdio.h>
+#include <math.h>
+
+#define PI 3.141592654
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+  int    D, M, Q, T, d, m, q, t;
+  double *data, *mu, *SigmaPtr, *N, Sigma;
+  double *B, *dist, *B2, tmp;
+  const int* dim_mu;
+  double const1, const2, sum_m, sum_d, diff;
+  int Dt, DMq, Dm, MQt, Mq;
+  int dims_B2[3];
+
+  int ndim_mu, i, save_B2;
+  
+  data = mxGetPr(prhs[0]);
+  mu = mxGetPr(prhs[1]);
+  SigmaPtr = mxGetPr(prhs[2]);
+  Sigma = *SigmaPtr;
+  N = mxGetPr(prhs[3]);
+  
+  D = mxGetM(prhs[0]);
+  T = mxGetN(prhs[0]);
+
+  ndim_mu = mxGetNumberOfDimensions(prhs[1]);
+  dim_mu = mxGetDimensions(prhs[1]);
+  D = dim_mu[0];
+  M = dim_mu[1];
+  /* printf("parzenC: nlhs=%d, D=%d, M=%d, T=%d\n", nlhs, D, M, T);  */
+
+  /* If mu is mu(d,m,o,p), then [d M Q] = size(mu) in matlab sets Q=o*p,
+     i.e.. the size of all conditioning variabeles */
+  Q = 1;
+  for (i = 2; i < ndim_mu; i++) {
+    /* printf("dim_mu[%d]=%d\n", i, dim_mu[i]); */
+    Q = Q*dim_mu[i];
+  }
+
+  /* M = max(N) */
+  M = -1000000;
+  for (i=0; i < Q; i++) {
+    /* printf("N[%d]=%d\n", i, (int) N[i]); */
+    if (N[i] > M) {
+      M = (int) N[i];
+    }
+  }
+
+  /*  printf("parzenC: nlhs=%d, D=%d, Q=%d, M=%d, T=%d\n", nlhs, D, Q, M, T); */
+
+  plhs[0] = mxCreateDoubleMatrix(Q,T, mxREAL);
+  B = mxGetPr(plhs[0]);
+
+  if (nlhs >= 2)
+    save_B2 = 1;
+  else
+    save_B2 = 0;
+  
+  if (save_B2) {
+    /* printf("parzenC saving B2\n");  */
+    /*plhs[1] = mxCreateDoubleMatrix(M*Q*T,1, mxREAL);*/
+    dims_B2[0] = M;
+    dims_B2[1] = Q;
+    dims_B2[2] = T;
+    plhs[1] = mxCreateNumericArray(3, dims_B2, mxDOUBLE_CLASS, mxREAL);
+    B2 = mxGetPr(plhs[1]);
+  } else {
+    /* printf("parzenC not saving B2\n"); */
+  }
+  /*
+  plhs[2] = mxCreateDoubleMatrix(M*Q*T,1, mxREAL);
+  dist = mxGetPr(plhs[2]);
+  */
+  const1 = pow(2*PI*Sigma, -D/2.0);
+  const2 = -(1/(2*Sigma));
+ 
+  for (t=0; t < T; t++) {
+    /* printf("t=%d!\n",t); */
+    Dt  = D*t;
+    MQt = M*Q*t;
+    for (q=0; q < Q; q++) {
+      sum_m = 0;
+      DMq = D*M*q;
+      Mq = M*q;
+
+      for (m=0; m < (int)N[q]; m++) {
+	sum_d = 0;
+	Dm = D*m;
+	for (d=0; d < D; d++) {
+	  /* diff = data(d,t) - mu(d,m,q) */
+	  /*diff = data[d + D*t] - mu[d + D*m + D*M*q]; */
+	  diff = data[d + Dt] - mu[d + Dm + DMq];
+	  sum_d = sum_d + diff*diff;
+	}
+	/* dist[m,q,t] = dist[m + M*q + M*Q*t] = dist[m + Mq + MQt] = sum_d */
+	tmp = const1 * exp(const2*sum_d);
+	sum_m = sum_m + tmp;
+	if (save_B2)
+	  B2[m + Mq + MQt] = tmp;
+      }
+
+      if (N[q]>0) {
+	B[q + Q*t] = (1.0/N[q]) *  sum_m;
+      } else {
+	B[q + Q*t] = 0.0;
+      }
+    }
+  }
+}
+
+
+
Binary file toolboxes/FullBNT-1.0.7/KPMstats/parzenC.dll has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/parzenC_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+d = 2; M = 3; Q = 4; T = 5; Sigma = 10;
+N = sample_discrete(normalize(ones(1,M)), 1, Q);
+data = randn(d,T);
+mu = randn(d,M,Q);
+
+[BM, B2M] = parzen(data, mu, Sigma, N);
+[B, B2] = parzenC(data, mu, Sigma, N);
+
+approxeq(B,BM)
+approxeq(B2,B2M)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/parzen_fit_select_unif.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function [mu, N, pick] = parzen_fit_select_unif(data, labels, max_proto, varargin)
+% PARZEN_FIT_SELECT_UNIF Fit a parzen density estimator by selecting prototypes uniformly from data
+% [mu, N, pick] = parzen_fit_select_unif(data, max_proto, labels, ...)
+%
+% We partition the data into different subsets based on the labels.
+% We then choose up to max_proto columns from each subset, chosen uniformly.
+%
+% INPUTS
+% data(:,t)
+% labels(t) - should be in {1,2,..,Q}
+% max_proto - max number of prototypes per partition
+%
+% Optional args
+% partition_names{m} - for debugging
+% boundary - do not choose prototypes which are within 'boundary' of the label transition
+%
+% OUTPUTS
+% mu(:, m, q) for label q, prototype m for 1 <= m <= N(q)
+% N(q) = number of prototypes for label q
+% pick{q} = identity of the prototypes
+
+nclasses = max(labels);
+[boundary, partition_names] = process_options(...
+    varargin, 'boundary', 0, 'partition_names', []);
+
+[D T] = size(data);
+mu = zeros(D, 1, nclasses); % dynamically determine num prototypes (may be less than K)
+mean_feat = mean(data,2);
+pick = cell(1,nclasses);
+for c=1:nclasses
+  ndx = find(labels==c);
+  if isempty(ndx)
+    %fprintf('no training images have label %d (%s)\n', c, partition_names{c})
+    fprintf('no training images have label %d\n', c);
+    nviews = 1;
+    mu(:,1,c) = mean_feat;
+  else
+    foo = linspace(boundary+1, length(ndx-boundary), max_proto);
+    pick{c} = ndx(unique(floor(foo)));
+    nviews = length(pick{c});
+    %fprintf('picking %d views for class %d=%s\n', nviews, c, class_names{c});
+    mu(:,1:nviews,c) = data(:, pick{c});
+  end
+  N(c) = nviews;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/pca.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+function [PCcoeff, PCvec] = pca(data, N)
+%PCA	Principal Components Analysis
+%
+%	Description
+%	 PCCOEFF = PCA(DATA) computes the eigenvalues of the covariance
+%	matrix of the dataset DATA and returns them as PCCOEFF.  These
+%	coefficients give the variance of DATA along the corresponding
+%	principal components.
+%
+%	PCCOEFF = PCA(DATA, N) returns the largest N eigenvalues.
+%
+%	[PCCOEFF, PCVEC] = PCA(DATA) returns the principal components as well
+%	as the coefficients.  This is considerably more computationally
+%	demanding than just computing the eigenvalues.
+%
+%	See also
+%	EIGDEC, GTMINIT, PPCA
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if nargin == 1
+   N = size(data, 2);
+end
+
+if nargout == 1
+   evals_only = logical(1);
+else
+   evals_only = logical(0);
+end
+
+if N ~= round(N) | N < 1 | N > size(data, 2)
+   error('Number of PCs must be integer, >0, < dim');
+end
+
+% Find the sorted eigenvalues of the data covariance matrix
+if evals_only
+   PCcoeff = eigdec(cov(data), N);
+else
+  [PCcoeff, PCvec] = eigdec(cov(data), N);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/rndcheck.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,294 @@
+function [errorcode, rows, columns] = rndcheck(nargs,nparms,arg1,arg2,arg3,arg4,arg5)
+%RNDCHECK error checks the argument list for the random number generators.
+
+%   B.A. Jones  1-22-93
+%   Copyright (c) 1993-98 by The MathWorks, Inc.
+%   $Revision: 1.1.1.1 $  $Date: 2005/04/26 02:29:22 $
+
+sizeinfo = nargs - nparms;
+errorcode = 0;
+
+if nparms == 3
+    [r1 c1] = size(arg1);
+    [r2 c2] = size(arg2);
+    [r3 c3] = size(arg3);
+end
+
+if nparms == 2
+    [r1 c1] = size(arg1);
+    [r2 c2] = size(arg2);
+end 
+
+if sizeinfo == 0        
+    if nparms == 1
+        [rows columns] = size(arg1);
+    end
+    
+    if nparms == 2
+        scalararg1 = (prod(size(arg1)) == 1);
+        scalararg2 = (prod(size(arg2)) == 1);
+        if ~scalararg1 & ~scalararg2
+            if r1 ~= r2 | c1 ~= c2
+                errorcode = 1;
+                return;         
+            end
+        end
+        if ~scalararg1
+            [rows columns] = size(arg1);
+        elseif ~scalararg2
+            [rows columns] = size(arg2);
+        else
+            [rows columns] = size(arg1);
+        end
+    end
+    
+    if nparms == 3
+        scalararg1 = (prod(size(arg1)) == 1);
+        scalararg2 = (prod(size(arg2)) == 1);
+        scalararg3 = (prod(size(arg3)) == 1);
+
+        if ~scalararg1 & ~scalararg2
+            if r1 ~= r2 | c1 ~= c2
+                errorcode = 1;
+                return;         
+            end
+        end
+
+        if ~scalararg1 & ~scalararg3
+            if r1 ~= r3 | c1 ~= c3
+                errorcode = 1;
+                return;                 
+            end
+        end
+
+        if ~scalararg3 & ~scalararg2
+            if r3 ~= r2 | c3 ~= c2
+                errorcode = 1;
+                return;         
+            end
+        end
+            if ~scalararg1
+                [rows columns] = size(arg1);
+            elseif ~scalararg2
+            [rows columns] = size(arg2);
+            else
+                [rows columns] = size(arg3);
+            end
+    end 
+end
+
+if sizeinfo == 1
+    scalararg1 = (prod(size(arg1)) == 1);
+    if nparms == 1
+        if prod(size(arg2)) ~= 2
+            errorcode = 2;
+            return;
+        end
+        if  ~scalararg1 & arg2 ~= size(arg1)
+            errorcode = 3;
+            return;
+        end
+        if (arg2(1) < 0 | arg2(2) < 0 | arg2(1) ~= round(arg2(1)) | arg2(2) ~= round(arg2(2))),
+            errorcode = 4;
+            return;
+        end 
+        rows    = arg2(1);
+        columns = arg2(2);
+    end
+    
+    if nparms == 2
+        if prod(size(arg3)) ~= 2
+            errorcode = 2;
+            return;
+        end
+        scalararg2 = (prod(size(arg2)) == 1);
+        if ~scalararg1 & ~scalararg2
+            if r1 ~= r2 | c1 ~= c2
+                errorcode = 1;
+                return;         
+            end
+        end
+        if (arg3(1) < 0 | arg3(2) < 0 | arg3(1) ~= round(arg3(1)) | arg3(2) ~= round(arg3(2))),
+            errorcode = 4;
+            return;
+        end 
+        if ~scalararg1
+            if any(arg3 ~= size(arg1))
+                errorcode = 3;
+                return;
+            end
+            [rows columns] = size(arg1);
+        elseif ~scalararg2
+            if any(arg3 ~= size(arg2))
+                errorcode = 3;
+                return;
+            end
+            [rows columns] = size(arg2);
+        else
+            rows    = arg3(1);
+            columns = arg3(2);
+        end
+    end
+    
+    if nparms == 3
+        if prod(size(arg4)) ~= 2
+            errorcode = 2;
+            return;
+        end
+        scalararg1 = (prod(size(arg1)) == 1);
+        scalararg2 = (prod(size(arg2)) == 1);
+        scalararg3 = (prod(size(arg3)) == 1);
+
+        if (arg4(1) < 0 | arg4(2) < 0 | arg4(1) ~= round(arg4(1)) | arg4(2) ~= round(arg4(2))),
+            errorcode = 4;
+            return;
+        end 
+
+        if ~scalararg1 & ~scalararg2
+            if r1 ~= r2 | c1 ~= c2
+                errorcode = 1;
+                return;         
+            end
+        end
+
+        if ~scalararg1 & ~scalararg3
+            if r1 ~= r3 | c1 ~= c3
+                errorcode = 1;
+                return;                 
+            end
+        end
+
+        if ~scalararg3 & ~scalararg2
+            if r3 ~= r2 | c3 ~= c2
+                errorcode = 1;
+                return;         
+            end
+        end
+        if ~scalararg1
+            if any(arg4 ~= size(arg1))
+                errorcode = 3;
+                return;
+            end
+            [rows columns] = size(arg1);
+        elseif ~scalararg2
+            if any(arg4 ~= size(arg2))
+                errorcode = 3;
+                return;
+            end
+            [rows columns] = size(arg2);
+        elseif ~scalararg3
+            if any(arg4 ~= size(arg3))
+                errorcode = 3;
+                return;
+            end
+            [rows columns] = size(arg3);
+        else
+            rows    = arg4(1);
+            columns = arg4(2);
+        end
+    end 
+end
+
+if sizeinfo == 2
+    if nparms == 1
+        scalararg1 = (prod(size(arg1)) == 1);
+        if ~scalararg1
+            [rows columns] = size(arg1);
+            if rows ~= arg2 | columns ~= arg3 
+                errorcode = 3;
+                return;
+            end
+        end
+    if (arg2 < 0 | arg3 < 0 | arg2 ~= round(arg2) | arg3 ~= round(arg3)),
+        errorcode = 4;
+        return;
+    end 
+        rows = arg2;
+        columns = arg3;
+    end
+    
+    if nparms == 2
+        scalararg1 = (prod(size(arg1)) == 1);
+        scalararg2 = (prod(size(arg2)) == 1);
+        if ~scalararg1 & ~scalararg2
+            if r1 ~= r2 | c1 ~= c2
+                errorcode = 1;
+                return;         
+            end
+        end
+        if ~scalararg1
+            [rows columns] = size(arg1);
+            if rows ~= arg3 | columns ~= arg4 
+                errorcode = 3;
+                return;
+            end     
+        elseif ~scalararg2
+            [rows columns] = size(arg2);
+            if rows ~= arg3 | columns ~= arg4 
+                errorcode = 3;
+                return;
+            end     
+        else
+            if (arg3 < 0 | arg4 < 0 | arg3 ~= round(arg3) | arg4 ~= round(arg4)),
+                errorcode = 4;
+                return;
+            end 
+            rows = arg3;
+            columns = arg4;
+        end
+    end
+    
+    if nparms == 3
+        scalararg1 = (prod(size(arg1)) == 1);
+        scalararg2 = (prod(size(arg2)) == 1);
+        scalararg3 = (prod(size(arg3)) == 1);
+
+        if ~scalararg1 & ~scalararg2
+            if r1 ~= r2 | c1 ~= c2
+                errorcode = 1;
+                return;         
+            end
+        end
+
+        if ~scalararg1 & ~scalararg3
+            if r1 ~= r3 | c1 ~= c3
+                errorcode = 1;
+                return;                 
+            end
+        end
+
+        if ~scalararg3 & ~scalararg2
+            if r3 ~= r2 | c3 ~= c2
+                errorcode = 1;
+                return;         
+            end
+        end
+        
+        if ~scalararg1
+            [rows columns] = size(arg1);
+            if rows ~= arg4 | columns ~= arg5 
+                errorcode = 3;
+                return;
+            end     
+        elseif ~scalararg2
+            [rows columns] = size(arg2);
+            if rows ~= arg4 | columns ~= arg5 
+                errorcode = 3;
+                return;
+            end
+        elseif ~scalararg3
+            [rows columns] = size(arg3);
+            if rows ~= arg4 | columns ~= arg5 
+                errorcode = 3;
+                return;
+            end     
+        else
+            if (arg4 < 0 | arg5 < 0 | arg4 ~= round(arg4) | arg5 ~= round(arg5)),
+                errorcode = 4;
+                return;
+            end 
+            rows    = arg4;
+            columns = arg5;
+        end
+    end 
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function x = sample(p, n)
+% SAMPLE    Sample from categorical distribution.
+% Returns a row vector of integers, sampled according to the probability
+% distribution p.
+% Uses the stick-breaking algorithm.
+% Much faster algorithms are also possible.
+
+if nargin < 2
+  n = 1;
+end
+
+cdf = cumsum(p(:));
+for i = 1:n
+  x(i) = sum(cdf < rand) + 1;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/sample_discrete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function M = sample_discrete(prob, r, c)
+% SAMPLE_DISCRETE Like the built in 'rand', except we draw from a non-uniform discrete distrib.
+% M = sample_discrete(prob, r, c)
+%
+% Example: sample_discrete([0.8 0.2], 1, 10) generates a row vector of 10 random integers from {1,2},
+% where the prob. of being 1 is 0.8 and the prob of being 2 is 0.2.
+
+n = length(prob);
+
+if nargin == 1
+  r = 1; c = 1;
+elseif nargin == 2
+  c == r;
+end
+
+R = rand(r, c);
+M = ones(r, c);
+cumprob = cumsum(prob(:));
+
+if n < r*c
+  for i = 1:n-1
+    M = M + (R > cumprob(i));
+  end
+else
+  % loop over the smaller index - can be much faster if length(prob) >> r*c
+  cumprob2 = cumprob(1:end-1);
+  for i=1:r
+    for j=1:c
+      M(i,j) = sum(R(i,j) > cumprob2)+1;
+    end
+  end
+end
+
+
+% Slower, even though vectorized
+%cumprob = reshape(cumsum([0 prob(1:end-1)]), [1 1 n]);
+%M = sum(R(:,:,ones(n,1)) > cumprob(ones(r,1),ones(c,1),:), 3);
+
+% convert using a binning algorithm
+%M=bindex(R,cumprob);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/sample_gaussian.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function M = sample_gaussian(mu, Sigma, N)
+% SAMPLE_GAUSSIAN Draw N random row vectors from a Gaussian distribution
+% samples = sample_gaussian(mean, cov, N)
+
+if nargin==2
+  N = 1;
+end
+
+% If Y = CX, Var(Y) = C Var(X) C'.
+% So if Var(X)=I, and we want Var(Y)=Sigma, we need to find C. s.t. Sigma = C C'.
+% Since Sigma is psd, we have Sigma = U D U' = (U D^0.5) (D'^0.5 U').
+
+mu = mu(:);
+n=length(mu);
+[U,D,V] = svd(Sigma);
+M = randn(n,N);
+M = (U*sqrt(D))*M + mu*ones(1,N); % transform each column
+M = M';
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/standardize.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function [S, mu, sigma2] = standardize(M, mu, sigma2)
+% function S = standardize(M, mu, sigma2)
+% Make each column of M be zero mean, std 1.
+% Thus each row is scaled separately.
+%
+% If mu, sigma2 are omitted, they are computed from M
+
+M = double(M);
+if nargin < 2
+  mu = mean(M,2);
+  sigma2 = std(M,0,2);
+  sigma2 = sigma2 + eps*(sigma2==0);
+end
+
+[nrows ncols] = size(M);
+S = M - repmat(mu(:), [1 ncols]);
+S = S ./ repmat(sigma2, [1 ncols]);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/student_t_logprob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function L = log_student_pdf(X, mu, lambda, alpha)
+% LOG_STUDENT_PDF Evaluate the log of the multivariate student-t distribution at a point
+% L = log_student_pdf(X, mu, lambda, alpha)
+%
+% Each column of X is evaluated.
+% See Bernardo and Smith p435.
+
+k = length(mu);
+assert(size(X,1) == k);
+[k N] = size(X);
+logc = gammaln(0.5*(alpha+k)) - gammaln(0.5*alpha) - (k/2)*log(alpha*pi) + 0.5*log(det(lambda));
+middle = (1 + (1/alpha)*(X-mu)'*lambda*(X-mu)); % scalar version
+L = logc - ((alpha+k)/2)*log(middle);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/student_t_prob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function p = student_t_pdf(X, mu, lambda, alpha)
+% STUDENT_T_PDF Evaluate the multivariate student-t distribution at a point
+% p = student_t_pdf(X, mu, lambda, alpha)
+%
+% Each column of X is evaluated.
+% See Bernardo and Smith p435.
+
+k = length(mu);
+assert(size(X,1) == k);
+[k N] = size(X);
+numer = gamma(0.5*(alpha+k));
+denom = gamma(0.5*alpha) * (alpha*pi)^(k/2);
+c = (numer/denom) * det(lambda)^(0.5);
+p = c*(1 + (1/alpha)*(X-mu)'*lambda*(X-mu))^(-(alpha+k)/2); % scalar version
+%m = repmat(mu(:), 1, N);
+%exponent = sum((X-m)'*lambda*(X-m), 2); % column vector
+%p = c*(1 + (1/alpha)*exponent).^(-(alpha+k)/2);
+
+keyboard
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/test_dir.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+% # of sample points
+n_samples = 1000;
+
+p = ones(3,1)/3;
+
+% Low Entropy
+alpha = 0.5*p;
+
+% High Entropy
+%alpha = 10*p;
+
+% draw n_samples random points from the 3-d dirichlet(alpha),
+% and plot the results
+points = zeros(3,n_samples);
+for i = 1:n_samples
+    points(:,i) = dirichletrnd(alpha);
+end
+
+scatter3(points(1,:)', points(2,:)', points(3,:)', 'r', '.', 'filled');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/unidrndKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function R = unidrndKPM(min, max, nr, nc)
+
+if nargin < 3
+  nr = 1; nc = 1;
+end
+
+R = unidrnd(max-min+1, nr, nc) + (min-1);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/unif_discrete_sample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function r = unif_discrete_sample(n, nrows, ncols)
+% UNIF_DISCRETE_SAMPLE Generate random numbers uniformly from {1,2,..,n}
+% function r = unif_discrete_sample(n, nrows, ncols)
+% Same as unidrnd in the stats toolbox.
+
+r = ceil(n .* rand(nrows,ncols));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMstats/weightedRegression.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+function [a, b, error] = weightedRegression(x, z, w)
+% [a , b, error] = fitRegression(x, z, w);
+% % Weighted scalar linear regression
+%
+% Find a,b to minimize
+% error = sum(w * |z - (a*x + b)|^2) 
+% and x(i) is a scalar
+
+if nargin < 3, w = ones(1,length(x)); end
+
+w = w(:)';
+x = x(:)';
+z = z(:)';
+
+W = sum(w);
+Y = sum(w .* z);
+YY = sum(w .* z .* z);
+YTY = sum(w .* z .* z);
+X = sum(w .* x);
+XX = sum(w .* x .* x);
+XY = sum(w .* x .* z);
+
+[b, a] = clg_Mstep_simple(W, Y, YY, YTY, X, XX, XY);
+error = sum(w .* (z - (a*x + b)).^2 );
+
+if 0
+  % demo
+  seed = 1;
+  rand('state', seed);   randn('state', seed);
+  x = -10:10;
+  N = length(x);
+  noise = randn(1,N);
+  aTrue = rand(1,1);
+  bTrue = rand(1,1);
+  z = aTrue*x + bTrue + noise;
+  
+  w = ones(1,N);
+  [a, b, err] = weightedRegression(x, z, w);
+  
+  b2=regress(z(:), [x(:) ones(N,1)]);
+  assert(approxeq(b,b2(2)))
+  assert(approxeq(a,b2(1)))
+
+  % Make sure we go through x(15) perfectly
+  w(15) = 1000;
+  [aW, bW, errW] = weightedRegression(x, z, w);
+
+  figure;
+  plot(x, z, 'ro')
+  hold on
+  plot(x, a*x+b, 'bx-')
+  plot(x, aW*x+bW, 'gs-')
+  title(sprintf('a=%5.2f, aHat=%5.2f, aWHat=%5.3f, b=%5.2f, bHat=%5.2f, bWHat=%5.3f, err=%5.3f, errW=%5.3f', ...
+		aTrue, a, aW, bTrue, b, bW, err, errW))
+  legend('truth', 'ls', 'wls')
+  
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,176 @@
+/README.txt/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/approx_unique.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/approxeq.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/argmax.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/argmin.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/asdemo.html/1.1.1.1/Wed Mar 30 19:59:00 2005//
+/asdemo.m/1.1.1.1/Sun Mar 27 02:51:24 2005//
+/asort.m/1.1.1.1/Fri May 13 20:52:22 2005//
+/assert.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/assignEdgeNums.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/assign_cols.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/axis_pct.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/bipartiteMatchingDemo.m/1.1.1.1/Mon May  9 16:47:32 2005//
+/bipartiteMatchingDemoPlot.m/1.1.1.1/Mon May  9 04:45:10 2005//
+/bipartiteMatchingHungarian.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/bipartiteMatchingIntProg.m/1.1.1.1/Mon May  9 05:25:10 2005//
+/block.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/cell2matPad.m/1.1.1.1/Tue Jun 28 01:30:44 2005//
+/cell2num.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/centeringMatrix.m/1.1.1.1/Sun May  8 22:48:48 2005//
+/checkpsd.m/1.1.1.1/Fri Feb  7 02:25:30 2003//
+/chi2inv.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/choose.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/collapse_mog.m/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/colmult.c/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/colmult.mexglx/1.1.1.1/Tue Apr 26 02:30:30 2005//
+/computeROC.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/compute_counts.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/conf2mahal.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/cross_entropy.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/dirKPM.m/1.1.1.1/Fri May 13 20:52:22 2005//
+/div.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/draw_circle.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/draw_ellipse.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/draw_ellipse_axes.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/em_converged.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/entropy.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/exportfig.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/extend_domain_table.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/factorial.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/filepartsLast.m/1.1.1.1/Mon May 30 22:08:06 2005//
+/find_equiv_posns.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/fullfileKPM.m/1.1.1.1/Sat Aug 27 01:08:50 2005//
+/genpathKPM.m/1.1.1.1/Wed May 25 19:11:42 2005//
+/hash_add.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/hash_del.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/hash_lookup.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/hsvKPM.m/1.1.1.1/Mon May  2 20:19:00 2005//
+/hungarian.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/image_rgb.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/imresizeAspect.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/ind2subv.c/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/ind2subv.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/initFigures.m/1.1.1.1/Wed Jun  1 04:49:22 2005//
+/installC_KPMtools.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/is_psd.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/is_stochastic.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/isemptycell.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/isposdef.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/isscalar.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/isvector.m/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/junk.c/1.1.1.1/Tue Apr 26 02:30:32 2005//
+/loadcell.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/logb.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/logdet.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/logsum.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/logsum_simple.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/logsum_test.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/logsumexp.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/logsumexpv.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/mahal2conf.m/1.1.1.1/Wed Apr 27 17:58:32 2005//
+/marg_table.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/marginalize_table.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/matprint.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/max_mult.c/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/max_mult.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/mexutil.c/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/mexutil.h/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/mk_multi_index.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/mk_stochastic.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/mkdirKPM.m/1.1.1.1/Mon May  9 22:20:22 2005//
+/montageKPM.m/1.1.1.1/Wed Jun  1 19:39:54 2005//
+/montageKPM2.m/1.1.1.1/Wed Jul  6 19:32:54 2005//
+/montageKPM3.m/1.1.1.1/Tue Jun 28 01:35:44 2005//
+/mult_by_table.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/myintersect.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/myismember.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/myones.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/myplot.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/myrand.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/myrepmat.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/myreshape.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/mysetdiff.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/mysize.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/mysubset.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/mysymsetdiff.m/1.1.1.1/Tue Apr 26 02:30:34 2005//
+/myunion.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/nchoose2.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/ncols.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/nonmaxsup.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/normalise.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/normaliseC.c/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/normaliseC.dll/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/normalize.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/nrows.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/num2strcell.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/optimalMatching.m/1.1.1.1/Mon May  9 22:20:22 2005//
+/optimalMatchingTest.m/1.1.1.1/Mon May  9 22:20:22 2005//
+/partitionData.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/partition_matrix_vec.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/pca_kpm.m/1.1.1.1/Tue Sep 13 05:18:28 2005//
+/pca_netlab.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/pick.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/plotBox.m/1.1.1.1/Mon May 30 06:01:56 2005//
+/plotColors.m/1.1.1.1/Thu May 26 01:31:22 2005//
+/plotROC.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/plotROCkpm.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/plot_axis_thru_origin.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/plot_ellipse.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/plot_matrix.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/plot_polygon.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/plotcov2.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/plotcov2New.m/1.1.1.1/Mon Jul 11 19:07:28 2005//
+/plotcov3.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/plotgauss1d.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/plotgauss2d.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/plotgauss2d_old.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/polygon_area.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/polygon_centroid.m/1.1.1.1/Tue Apr 26 02:30:36 2005//
+/polygon_intersect.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/previewfig.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/process_options.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/rand_psd.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/rectintC.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/rectintLoopC.c/1.1.1.1/Sun Jun  5 18:46:40 2005//
+/rectintLoopC.dll/1.1.1.1/Sun Jun  5 18:46:40 2005//
+/rectintLoopC.mexglx/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/rectintSparse.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/rectintSparseC.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/rectintSparseLoopC.c/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/rectintSparseLoopC.dll/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/repmatC.c/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/repmatC.dll/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/repmatC.mexglx/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/rgb2grayKPM.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/rnd_partition.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/rotate_xlabel.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/safeStr.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/sampleUniformInts.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/sample_discrete.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/set_xtick_label.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/set_xtick_label_demo.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/setdiag.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/softeye.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/sort_evec.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/splitLongSeqIntoManyShort.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/sprintf_intvec.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/sqdist.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/strmatch_multi.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/strmatch_substr.m/1.1.1.1/Tue Apr 26 02:30:38 2005//
+/strsplit.m/1.1.1.1/Tue May  3 19:01:46 2005//
+/subplot2.m/1.1.1.1/Tue Apr 26 02:30:40 2005//
+/subplot3.m/1.1.1.1/Tue Apr 26 02:30:40 2005//
+/subsets.m/1.1.1.1/Tue Apr 26 02:30:40 2005//
+/subsets1.m/1.1.1.1/Mon May  9 22:20:22 2005//
+/subsetsFixedSize.m/1.1.1.1/Mon May  9 02:55:36 2005//
+/subv2ind.c/1.1.1.1/Tue Apr 26 02:30:40 2005//
+/subv2ind.m/1.1.1.1/Tue Apr 26 02:30:40 2005//
+/sumv.m/1.1.1.1/Tue Apr 26 02:30:40 2005//
+/suptitle.m/1.1.1.1/Tue Apr 26 02:30:40 2005//
+/unaryEncoding.m/1.1.1.1/Tue Apr 26 02:30:40 2005//
+/wrap.m/1.1.1.1/Tue Apr 26 02:30:40 2005//
+/xticklabel_rotate90.m/1.1.1.1/Tue Apr 26 02:30:40 2005//
+/zipload.m/1.1.1.1/Tue Apr 26 02:30:40 2005//
+/zipsave.m/1.1.1.1/Tue Apr 26 02:30:40 2005//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/KPMtools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/README.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+KPMtools is a directory of miscellaneous matlab functions written by
+Kevin Patrick Murphy and various other people (see individual file headers).
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/approx_unique.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function [B, keep] = approx_unique(A, thresh, flag)
+% APPROX_UNIQUE Return elements of A that differ from the rest by less than thresh
+% B = approx_unique(A, thresh)
+% B = approx_unique(A, thresh, 'rows')
+
+keep = [];
+
+if nargin < 3 | isempty(flag)
+  A = sort(A)
+  B = A(1);
+  for i=2:length(A)
+    if ~approxeq(A(i), A(i-1), thresh)
+      B = [B A(i)];
+      keep = [keep i];
+    end
+  end
+else
+%   A = sortrows(A);
+%   B = A(1,:);
+%   for i=2:size(A,1)
+%     if ~approxeq(A(i,:), A(i-1,:), thresh)
+%       B = [B; A(i,:)];
+%       keep = [keep i];
+%     end
+%   end
+  B = [];
+  for i=1:size(A,1)
+    duplicate = 0;
+    for j=i+1:size(A,1)
+      if approxeq(A(i,:), A(j,:), thresh)
+	duplicate = 1;
+	break;
+      end
+    end
+    if ~duplicate    
+      B = [B; A(i,:)];
+      keep = [keep i];
+    end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/approxeq.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function p = approxeq(a, b, tol, rel)
+% APPROXEQ Are a and b approximately equal (to within a specified tolerance)?
+% p = approxeq(a, b, thresh)
+% 'tol' defaults to 1e-3.
+% p(i) = 1 iff abs(a(i) - b(i)) < thresh
+%
+% p = approxeq(a, b, thresh, 1)
+% p(i) = 1 iff abs(a(i)-b(i))/abs(a(i)) < thresh
+
+if nargin < 3, tol = 1e-2; end
+if nargin < 4, rel = 0; end
+
+a = a(:);
+b = b(:);
+d = abs(a-b);
+if rel
+  p = ~any( (d ./ (abs(a)+eps)) > tol);
+else
+  p = ~any(d > tol);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/argmax.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function indices = argmax(v)
+% ARGMAX Return as a subscript vector the location of the largest element of a multidimensional array v.
+% indices = argmax(v)
+%
+% Returns the first maximum in the case of ties.
+% Example:
+% X = [2 8 4; 7 3 9];
+% argmax(X) = [2 3], i.e., row 2 column 3
+
+[m i] = max(v(:));
+indices = ind2subv(mysize(v), i);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/argmin.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function indices = argmin(v)
+% ARGMIN Return as a subscript vector the location of the smallest element of a multidimensional array v.
+% indices = argmin(v)
+%
+% Returns the first minimum in the case of ties.
+% Example:
+% X = [2 8 4; 7 3 9];
+% argmin(X) = [1 1], i.e., row 1 column 1
+
+[m i] = min(v(:));
+indices = ind2subv(mysize(v), i);
+%indices = ind2subv(size(v), i);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/asdemo.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,690 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns:st1="urn:schemas-microsoft-com:office:smarttags"
+xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=utf-8">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="asdemo_files/filelist.xml">
+<title>asdemo</title>
+<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
+ name="time"/>
+<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
+ name="date"/>
+<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
+ name="place"/>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Caroline Schwarz</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>us</o:LastAuthor>
+  <o:Revision>33</o:Revision>
+  <o:TotalTime>0</o:TotalTime>
+  <o:Created>2005-03-26T16:20:00Z</o:Created>
+  <o:LastSaved>2005-03-30T09:58:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>1062</o:Words>
+  <o:Characters>6055</o:Characters>
+  <o:Company>office</o:Company>
+  <o:Lines>50</o:Lines>
+  <o:Paragraphs>14</o:Paragraphs>
+  <o:CharactersWithSpaces>7103</o:CharactersWithSpaces>
+  <o:Version>10.3501</o:Version>
+ </o:DocumentProperties>
+ <o:OfficeDocumentSettings>
+  <o:RelyOnVML/>
+  <o:AllowPNG/>
+  <o:TargetScreenSize>1280x1024</o:TargetScreenSize>
+ </o:OfficeDocumentSettings>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:Compatibility>
+   <w:UseFELayout/>
+  </w:Compatibility>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]--><!--[if !mso]><object
+ classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object>
+<style>
+st1\:*{behavior:url(#ieooui) }
+</style>
+<![endif]-->
+<style>
+<!--p
+	{max-width: 600px;
+	width:expression(document.body.clientWidth > 620 ? "600px": "auto" );}
+h1
+	{max-width: 600px;
+	width:expression(document.body.clientWidth > 620 ? "600px": "auto" );}
+h2
+	{max-width: 600px;
+	width:expression(document.body.clientWidth > 620 ? "600px": "auto" );}
+div
+	{max-width: 600px;
+	width:expression(document.body.clientWidth > 620 ? "600px": "auto" );}
+
+ /* Font Definitions */
+ @font-face
+	{font-family:"MS Mincho";
+	panose-1:2 2 6 9 4 2 5 8 3 4;
+	mso-font-alt:"ï¼­ï¼³ 明æœ";
+	mso-font-charset:128;
+	mso-generic-font-family:modern;
+	mso-font-pitch:fixed;
+	mso-font-signature:-1610612033 1757936891 16 0 131231 0;}
+@font-face
+	{font-family:"\@MS Mincho";
+	panose-1:2 2 6 9 4 2 5 8 3 4;
+	mso-font-charset:128;
+	mso-generic-font-family:modern;
+	mso-font-pitch:fixed;
+	mso-font-signature:-1610612033 1757936891 16 0 131231 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0cm;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:Arial;
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0cm;
+	mso-margin-bottom-alt:auto;
+	margin-left:0cm;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:Arial;
+	mso-fareast-font-family:"MS Mincho";
+	color:#990000;
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0cm;
+	mso-margin-bottom-alt:auto;
+	margin-left:0cm;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:13.5pt;
+	font-family:Arial;
+	mso-fareast-font-family:"MS Mincho";
+	color:#990000;
+	font-weight:bold;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0cm;
+	mso-margin-bottom-alt:auto;
+	margin-left:0cm;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:Arial;
+	mso-fareast-font-family:"Times New Roman";}
+pre
+	{margin:0cm;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.footer, li.footer, div.footer
+	{mso-style-name:footer;
+	mso-margin-top-alt:auto;
+	margin-right:0cm;
+	mso-margin-bottom-alt:auto;
+	margin-left:0cm;
+	text-align:right;
+	mso-pagination:widow-orphan;
+	font-size:7.5pt;
+	font-family:Arial;
+	mso-fareast-font-family:"Times New Roman";
+	color:gray;
+	font-style:italic;}
+span.keyword
+	{mso-style-name:keyword;
+	color:blue;}
+span.comment
+	{mso-style-name:comment;
+	color:forestgreen;}
+span.string
+	{mso-style-name:string;
+	color:#A020F0;}
+span.untermstring
+	{mso-style-name:untermstring;
+	color:#B20000;}
+span.syscmd
+	{mso-style-name:syscmd;
+	color:#B28C00;}
+span.SpellE
+	{mso-style-name:"";
+	mso-spl-e:yes;}
+span.GramE
+	{mso-style-name:"";
+	mso-gram-e:yes;}
+@page Section1
+	{size:612.0pt 792.0pt;
+	margin:72.0pt 90.0pt 72.0pt 90.0pt;
+	mso-header-margin:36.0pt;
+	mso-footer-margin:36.0pt;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
+	mso-para-margin:0cm;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:7.5pt;}
+</style>
+<![endif]><!--
+This HTML is auto-generated from an M-file.
+To make changes, update the M-file and republish this document.
+      -->
+<meta name=date content=2005-03-26>
+<meta name=m-file content=asdemo>
+<!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="5122"/>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US style='tab-interval:36.0pt;margin-left:7.5pt;
+margin-top:7.5pt;margin-right:7.5pt;margin-bottom:7.5pt'>
+
+<div class=Section1><pre style='margin-left:22.5pt'><span class=comment>% <b
+style='mso-bidi-font-weight:normal'>ASORT</b></span></pre><pre
+style='margin-left:22.5pt'><span class=comment>% a pedestrian <b
+style='mso-bidi-font-weight:normal'>NUMERICAL SORTER</b> of <b
+style='mso-bidi-font-weight:normal'>ALPHANUMERIC</b> data</span></pre><pre
+style='margin-left:22.5pt'><o:p>&nbsp;</o:p></pre><pre style='margin-left:22.5pt'><span
+class=comment>% - create some data</span></pre><pre style='margin-left:22.5pt'><b
+style='mso-bidi-font-weight:normal'><span style='mso-tab-count:2'>          </span>d = {<o:p></o:p></b></pre><pre
+style='margin-left:22.5pt'><span class=comment>%<span style='mso-tab-count:
+2'>         </span>strings with one valid alphanumeric number</span></pre><pre
+style='margin-left:22.5pt'><span class=comment>%<span style='mso-tab-count:
+2'>         </span>sorted <b style='mso-bidi-font-weight:normal'>numerically</b></span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'-<span class=SpellE><span class=GramE>inf</span></span>'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'<span class=GramE>x-3.2e4y</span>'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'<span class=GramE>f-1.4</span>'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'-.1'</span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:3'>                  </span><span class=string>'+ <span
+class=GramE>.1d-2</span>'</span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:3'>                  </span><span class=string>'.1'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'f.1'</span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:3'>                  </span><span class=string>'f -+1.4'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'f.2'</span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:3'>                  </span><span class=string>'f.3'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'f.10'</span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:3'>                  </span><span class=string>'f.11'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'+<span class=SpellE>inf</span>'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=GramE><span class=string>' -</span></span><span class=SpellE><span
+class=string>nan</span></span><span class=string>'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'+ <span class=SpellE><span class=GramE>nan</span></span>'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'<span class=SpellE><span class=GramE>nan</span></span>'</span></pre><pre
+style='margin-left:22.5pt'><span class=comment>%<span style='mso-tab-count:
+2'>         </span>strings with many numbers or invalid/ambiguous numbers</span></pre><pre
+style='margin-left:22.5pt'><span class=comment>%<span style='mso-tab-count:
+2'>         </span>sorted in <span class=SpellE><span class=GramE><b
+style='mso-bidi-font-weight:normal'>ascii</b></span></span><b style='mso-bidi-font-weight:
+normal'> dictionary order</b></span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:3'>                  </span><span class=GramE><span
+class=string>' <span class=SpellE>nan</span></span></span><span class=string> <span
+class=SpellE>nan</span>'</span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:3'>                  </span><span class=string>'+ .1e-.2'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'-1 2'</span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:3'>                  </span><span class=string>'Z12e12ez'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'<span class=SpellE><span class=GramE>inf</span></span> -<span
+class=SpellE>inf</span>'</span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:3'>                  </span><span class=string>'s.3TT.4'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'z12e12ez'</span></pre><pre style='margin-left:22.5pt'><span
+class=comment>%<span style='mso-tab-count:2'>         </span>strings without numbers</span></pre><pre
+style='margin-left:22.5pt'><span class=comment>%<span style='mso-tab-count:
+2'>         </span>sorted in <span class=SpellE><span class=GramE><b
+style='mso-bidi-font-weight:normal'>ascii</b></span></span><b style='mso-bidi-font-weight:
+normal'> dictionary order</b></span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:3'>                  </span><span class=string>' . .. '</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'.'</span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:3'>                  </span><span class=string>'...'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=GramE><span class=string>'.b a.'</span></span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'<span class=GramE>a</span> string'</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:3'>                  </span><span
+class=string>'a. .b'</span></pre><pre style='margin-left:22.5pt'><b
+style='mso-bidi-font-weight:normal'><span style='mso-tab-count:2'>          </span>};<o:p></o:p></b></pre><pre
+style='margin-left:22.5pt'><span class=comment>%<span style='mso-spacerun:yes'>   </span>... and scramble it...</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:2'>          </span><span
+class=GramE>rand(</span><span class=string>'seed'</span>,10);</pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:2'>          </span>d=<span
+class=GramE>d(</span><span class=SpellE>randperm</span>(<span class=SpellE>numel</span>(d)));</pre><pre
+style='margin-left:22.5pt'><o:p>&nbsp;</o:p></pre><pre style='margin-left:22.5pt'><span
+class=comment>% - run <b style='mso-bidi-font-weight:normal'>ASORT</b> with<o:p></o:p></span></pre><pre
+style='margin-left:22.5pt'><span class=comment>%<span style='mso-spacerun:yes'>   </span><b
+style='mso-bidi-font-weight:normal'>verbose output</b>:<span style='mso-tab-count:
+2'>              </span>&lt;-v&gt;</span></pre><pre style='margin-left:22.5pt'><span
+class=comment>%<span style='mso-spacerun:yes'>   </span><span class=GramE><b
+style='mso-bidi-font-weight:normal'>keep</b></span><b style='mso-bidi-font-weight:
+normal'> additional results</b>:<span style='mso-tab-count:1'>     </span>&lt;-d&gt;</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:2'>          </span>o=<span
+class=SpellE><span class=GramE>asort</span></span><span class=GramE>(</span>d,<span
+class=string>'-v'</span>,<span class=string>'-d'</span>);</pre><pre
+style='margin-left:22.5pt'><span class=comment>% - or</span></pre><pre
+style='margin-left:22.5pt'><span class=comment>%<span style='mso-tab-count:
+2'>         </span>p=<span class=SpellE><span class=GramE>asort</span></span><span
+class=GramE>(</span>char(d),</span><span class=string>'-v'</span>,<span
+class=string>'-d'</span>);</pre><pre style='margin-left:7.5pt'><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'INPUT'<span style='mso-spacerun:yes'>       </span>'ASCII SORT'<span style='mso-spacerun:yes'>    </span>'NUM SORT'<span style='mso-spacerun:yes'>             </span>'NUM READ'<span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'...'<span style='mso-spacerun:yes'>         </span><span
+class=SpellE><span class=GramE>'</span></span><span class=GramE> -</span><span
+class=SpellE>nan</span>'<span style='mso-spacerun:yes'>         </span>'--- NUMERICAL'<span style='mso-spacerun:yes'>        </span>'--- NUMBERS'<span style='mso-spacerun:yes'>      </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'+ .1e-.2'<span style='mso-spacerun:yes'>    </span><span
+class=GramE>' .</span> .. '<span style='mso-spacerun:yes'>        </span>'-<span
+class=SpellE><span class=GramE>inf</span></span>'<span style='mso-spacerun:yes'>         </span><span style='mso-spacerun:yes'>        </span>[<span style='mso-spacerun:yes'>             </span>-<span
+class=SpellE>Inf</span>]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'.1'<span style='mso-spacerun:yes'>          </span>' <span
+class=SpellE>nan</span> <span class=SpellE>nan</span>'<span style='mso-spacerun:yes'>      </span>'x-3.2e4y'<span style='mso-spacerun:yes'>             </span>[<span style='mso-spacerun:yes'>           </span>-32000]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'.b a.'<span style='mso-spacerun:yes'>       </span>'+ .1d-2'<span style='mso-spacerun:yes'>       </span>'f-1.4'<span style='mso-spacerun:yes'>                </span>[<span style='mso-spacerun:yes'>             </span>-1.4]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'-<span
+class=SpellE>inf</span>'<span style='mso-spacerun:yes'>        </span>'+ .1e-.2'<span style='mso-spacerun:yes'>      </span>'-.1'<span style='mso-spacerun:yes'>                  </span>[<span style='mso-spacerun:yes'>             </span>-0.1]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'f.1'<span style='mso-spacerun:yes'>         </span>'+ <span
+class=SpellE><span class=GramE>nan</span></span>'<span style='mso-spacerun:yes'>         </span>'+ .1d-2'<span style='mso-spacerun:yes'>              </span>[<span style='mso-spacerun:yes'>            </span>0.001]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span class=GramE>' -</span><span
+class=SpellE>nan</span>'<span style='mso-spacerun:yes'>       </span>'+<span
+class=SpellE>inf</span>'<span style='mso-spacerun:yes'>          </span>'.1'<span style='mso-spacerun:yes'>                   </span>[<span style='mso-spacerun:yes'>              </span>0.1]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'-1 2'<span style='mso-spacerun:yes'>        </span>'-.1'<span style='mso-spacerun:yes'>           </span>'f.1'<span style='mso-spacerun:yes'>                  </span>[<span style='mso-spacerun:yes'>                </span>1]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'<span
+class=SpellE><span class=GramE>nan</span></span>'<span style='mso-spacerun:yes'>         </span>'-1 2'<span style='mso-spacerun:yes'>          </span>'f -+1.4'<span style='mso-spacerun:yes'>              </span>[<span style='mso-spacerun:yes'>              </span>1.4]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'<span
+class=GramE>a</span> string'<span style='mso-spacerun:yes'>    </span>'-<span
+class=SpellE>inf</span>'<span style='mso-spacerun:yes'>          </span>'f.2'<span style='mso-spacerun:yes'>                  </span>[<span style='mso-spacerun:yes'>                </span>2]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span class=GramE>'f.3'<span style='mso-spacerun:yes'>         </span>'.'</span><span style='mso-spacerun:yes'>             </span>'f.3'<span style='mso-spacerun:yes'>                  </span>[<span style='mso-spacerun:yes'>                </span>3]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'+ <span
+class=GramE>.1d-2</span>'<span style='mso-spacerun:yes'>     </span>'...'<span style='mso-spacerun:yes'>           </span>'f.10'<span style='mso-spacerun:yes'>   </span><span style='mso-spacerun:yes'>              </span>[<span style='mso-spacerun:yes'>               </span>10]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'a. .b'<span style='mso-spacerun:yes'>       </span>'.1'<span style='mso-spacerun:yes'>            </span>'f.11'<span style='mso-spacerun:yes'>                 </span>[<span style='mso-spacerun:yes'>     </span><span style='mso-spacerun:yes'>          </span>11]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'s.3TT.4'<span style='mso-spacerun:yes'>     </span>'.b a.'<span style='mso-spacerun:yes'>     </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>   </span>'+<span
+class=SpellE>inf</span>'<span style='mso-spacerun:yes'>                 </span>[<span style='mso-spacerun:yes'>              </span><span
+class=SpellE><span class=GramE>Inf</span></span>]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span>'+<span
+class=SpellE>inf</span>'<span style='mso-spacerun:yes'>        </span>'Z12e12ez'<span style='mso-spacerun:yes'>      </span>' -<span
+class=SpellE>nan</span>'<span style='mso-spacerun:yes'>                </span>[<span style='mso-spacerun:yes'>          </span><span style='mso-spacerun:yes'>    </span></span></i><st1:place><span
+ class=SpellE><i><span style='color:gray'>NaN</span></i></span></st1:place><i><span
+style='color:gray'>]<o:p></o:p></span></i></pre><pre><i><span style='color:
+gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>nan</span></span> <span class=SpellE>nan</span>'<span style='mso-spacerun:yes'>    </span>'a string'<span style='mso-spacerun:yes'>      </span>'+ <span
+class=SpellE>nan</span>'<span style='mso-spacerun:yes'>                </span>[<span style='mso-spacerun:yes'>              </span></span></i><st1:place><span
+ class=SpellE><i><span style='color:gray'>NaN</span></i></span></st1:place><i><span
+style='color:gray'>]<o:p></o:p></span></i></pre><pre><i><span style='color:
+gray'><span style='mso-spacerun:yes'>    </span>'<span class=GramE>f-1.4</span>'<span style='mso-spacerun:yes'>       </span>'a. .<span
+class=GramE>b</span>'<span style='mso-spacerun:yes'>    </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>    </span>'<span
+class=SpellE>nan</span>'<span style='mso-spacerun:yes'>                  </span>[<span style='mso-spacerun:yes'>              </span></span></i><st1:place><span
+ class=SpellE><i><span style='color:gray'>NaN</span></i></span></st1:place><i><span
+style='color:gray'>]<o:p></o:p></span></i></pre><pre><i><span style='color:
+gray'><span style='mso-spacerun:yes'>    </span>'x-3.2e4y'<span style='mso-spacerun:yes'>    </span>'f -+1.4'<span style='mso-spacerun:yes'>     </span><span style='mso-spacerun:yes'>  </span>'--- ASCII NUMBERS'<span style='mso-spacerun:yes'>    </span>'--- ASCII NUMBERS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'<span
+class=SpellE><span class=GramE>inf</span></span> -<span class=SpellE>inf</span>'<span style='mso-spacerun:yes'>  </span><span style='mso-spacerun:yes'>  </span>'f-1.4'<span style='mso-spacerun:yes'>         </span>' <span
+class=SpellE>nan</span> <span class=SpellE>nan</span>'<span style='mso-spacerun:yes'>             </span>' <span
+class=SpellE>nan</span> <span class=SpellE>nan</span>'<span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'+ <span
+class=SpellE><span class=GramE>nan</span></span>'<span style='mso-spacerun:yes'>       </span>'f.1'<span style='mso-spacerun:yes'>           </span>'+ .1e-.2'<span style='mso-spacerun:yes'>             </span>'+ .1e-.2'<span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'f.2'<span style='mso-spacerun:yes'>         </span>'f.10'<span style='mso-spacerun:yes'>          </span>'-1 2'<span style='mso-spacerun:yes'>                 </span>'-1 2'<span style='mso-spacerun:yes'>             </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'f.11'<span style='mso-spacerun:yes'>  </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>     </span><span
+class=SpellE>'f.11'</span><span style='mso-spacerun:yes'>          </span>'Z12e12ez'<span style='mso-spacerun:yes'>             </span><span
+class=SpellE>'Z12e12ez'</span><span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'Z12e12ez'<span style='mso-spacerun:yes'>    </span>'f.2'<span style='mso-spacerun:yes'>      </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>    </span>'<span
+class=SpellE>inf</span> -<span class=SpellE>inf</span>'<span style='mso-spacerun:yes'>             </span>'<span
+class=SpellE>inf</span> -<span class=SpellE>inf</span>'<span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'z12e12ez'<span style='mso-spacerun:yes'>    </span>'f.3'<span style='mso-spacerun:yes'>           </span>'s.3TT.4'<span style='mso-spacerun:yes'>              </span><span
+class=SpellE>'s.3TT.4'</span><span style='mso-spacerun:yes'>          </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'f -+1.4'<span style='mso-spacerun:yes'>     </span>'<span
+class=SpellE>inf</span> -<span class=SpellE>inf</span>'<span style='mso-spacerun:yes'>      </span>'z12e12ez'<span style='mso-spacerun:yes'>             </span><span
+class=SpellE>'z12e12ez'</span><span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>' . .. '<span style='mso-spacerun:yes'>      </span>'<span
+class=SpellE><span class=GramE>nan</span></span>'<span style='mso-spacerun:yes'>           </span>'--- ASCII STRINGS'<span style='mso-spacerun:yes'>    </span>'--- ASCII STRINGS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'f.10'<span style='mso-spacerun:yes'>        </span>'s.3TT.4'<span style='mso-spacerun:yes'>       </span><span
+class=GramE>' .</span> .. '<span style='mso-spacerun:yes'>         </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>     </span><span
+class=SpellE>'</span> . .. '<span style='mso-spacerun:yes'>           </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'.'<span style='mso-spacerun:yes'>           </span><span
+class=GramE>'x-3.2e4y'<span style='mso-spacerun:yes'>      </span>'.'</span><span style='mso-spacerun:yes'>                    </span><span
+class=SpellE>'.'</span><span style='mso-spacerun:yes'>                </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'-.1'<span style='mso-spacerun:yes'>     </span><span style='mso-spacerun:yes'>    </span>'z12e12ez'<span style='mso-spacerun:yes'>      </span>'...'<span style='mso-spacerun:yes'>                  </span><span
+class=SpellE>'</span>...'<span style='mso-spacerun:yes'>              </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>           </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span>'.b a.'<span style='mso-spacerun:yes'>                </span>'.b a.'<span style='mso-spacerun:yes'>            </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>   </span><span
+class=GramE>' <span class=SpellE>'</span></span><span style='mso-spacerun:yes'>           </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span>'a string'<span style='mso-spacerun:yes'>             </span>'a string'<span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>   </span><span
+class=GramE>' <span class=SpellE>'</span></span><span style='mso-spacerun:yes'>           </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span>'a. .b'<span style='mso-spacerun:yes'>                </span>'a. .<span
+class=GramE>b</span>'<span style='mso-spacerun:yes'>            </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre style='margin-left:
+22.5pt'><span class=comment>% - show results</span></pre><pre style='margin-left:
+22.5pt'><span style='mso-tab-count:2'>          </span><span class=GramE>o</span></pre><pre><i><span
+style='color:gray'>o = <o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>          </span><span
+class=GramE>magic</span>: 'ASORT'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>      </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>     </span><span
+class=SpellE><span class=GramE>ver</span></span>: '</span></i><st1:date
+Year="2005" Day="30" Month="3"><i><span style='color:gray'>30-Mar-2005</span></i></st1:date><i><span
+style='color:gray'> </span></i><st1:time Minute="57" Hour="11"><i><span
+ style='color:gray'>11:57:07</span></i></st1:time><i><span style='color:gray'>'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>           </span>time: '30-Mar-2005 11:57:17'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>        </span><span
+class=GramE>runtime</span>: 0.047<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span
+class=SpellE>input_class</span>: 'cell'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span
+class=SpellE>input_msize</span>: [29 1]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span
+class=SpellE>input_bytes</span>: 2038<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span
+class=SpellE>strng_class</span>: 'char'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span
+class=SpellE>strng_msize</span>: [29 8]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span
+class=SpellE>strng_bytes</span>: 464<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>            </span><span
+class=SpellE><span class=GramE>anr</span></span>: {16x1 cell}<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>      </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>     </span><span
+class=SpellE><span class=GramE>snr</span></span>: {7x1 cell}<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>      </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>     </span><span
+class=SpellE><span class=GramE>str</span></span>: {6x1 cell}<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>              </span><span
+class=GramE>c</span>: [29x12 char]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>              </span><span
+class=GramE>t</span>: [29x12 logical]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>              </span><span
+class=GramE>n</span>: [16x12 char]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>  </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>           </span><span
+class=GramE>d</span>: [16x1 double]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre style='margin-left:
+22.5pt'><span style='mso-tab-count:2'>          </span><span class=SpellE>o.anr</span></pre><pre><span
+class=SpellE><span class=GramE><i><span style='color:gray'>ans</span></i></span></span><i><span
+style='color:gray'> = <o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>   </span>'-<span
+class=SpellE><span class=GramE>inf</span></span>'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'<span
+class=GramE>x-3.2e4y</span>'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'<span
+class=GramE>f-1.4</span>'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'-.1'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'+ <span
+class=GramE>.1d-2</span>'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'.1'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'f.1'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'f -+1.4'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'f.2'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'f.3'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'f.10'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'f.11'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span>'+<span
+class=SpellE>inf</span>'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span class=GramE>' -</span><span
+class=SpellE>nan</span>'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>  </span>'+ <span
+class=SpellE><span class=GramE>nan</span></span>'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'<span
+class=SpellE><span class=GramE>nan</span></span>'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre style='margin-left:
+22.5pt'><span class=comment>% - run <b style='mso-bidi-font-weight:normal'>ASORT</b> with <b
+style='mso-bidi-font-weight:normal'>no-space</b>/<b style='mso-bidi-font-weight:
+normal'>template</b> options</span></pre><pre style='margin-left:22.5pt'><span
+class=comment>%<span style='mso-spacerun:yes'>   </span><span class=GramE>NOTE</span> the impact of -w/-t order!</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:2'>          </span>s<span
+class=GramE>={</span><span class=string>'ff - 1'</span>,<span class=string>'ff + 1'</span>,<span
+class=string>'- 12'</span>};</pre><pre><i><span style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre
+style='margin-left:22.5pt'><span class=comment>%<span style='mso-spacerun:yes'>   </span>RAW</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:2'>          </span>o=<span
+class=SpellE>asort</span>(s,<span class=string>'-v'</span>);</pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'INPUT'<span style='mso-spacerun:yes'>     </span>'ASCII SORT'<span style='mso-spacerun:yes'>    </span>'NUM SORT'<span style='mso-spacerun:yes'>             </span>'NUM READ'<span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'<span
+class=GramE>ff</span> - 1'<span style='mso-spacerun:yes'>    </span>'- 12'<span style='mso-spacerun:yes'>          </span>'--- NUMERICAL'<span style='mso-spacerun:yes'>        </span>'--- NUMBERS'<span style='mso-spacerun:yes'>      </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'<span
+class=GramE>ff</span> + 1'<span style='mso-spacerun:yes'>    </span>'ff + 1'<span style='mso-spacerun:yes'>        </span>'ff + 1'<span style='mso-spacerun:yes'>               </span>[<span style='mso-spacerun:yes'>                </span>1]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'- 12'<span style='mso-spacerun:yes'>      </span>'ff - 1'<span style='mso-spacerun:yes'>        </span>'ff - 1'<span style='mso-spacerun:yes'>               </span>[<span style='mso-spacerun:yes'>                </span>1]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>         </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span><span
+class=SpellE>'</span>- 12'<span style='mso-spacerun:yes'>                 </span>[<span style='mso-spacerun:yes'>               </span>12]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>         </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>    </span><span style='mso-spacerun:yes'>   </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>     </span><span
+class=SpellE>'</span>--- ASCII NUMBERS'<span style='mso-spacerun:yes'>    </span>'--- ASCII NUMBERS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>         </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span><span
+class=SpellE>'</span>--- ASCII STRINGS'<span style='mso-spacerun:yes'>    </span>'--- ASCII STRINGS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre style='margin-left:
+22.5pt'><span class=comment>%<span style='mso-spacerun:yes'>   </span><span
+class=GramE>remove</span> <span class=SpellE><b style='mso-bidi-font-weight:
+normal'>SPACE</b>s</span></span></pre><pre style='margin-left:22.5pt'><span
+style='mso-tab-count:2'>          </span>o=<span class=SpellE>asort</span>(s,<span
+class=string>'-v'</span>,<span class=string>'-w'</span>);</pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'INPUT'<span style='mso-spacerun:yes'>    </span>'ASCII SORT'<span style='mso-spacerun:yes'>    </span>'NUM SORT'<span style='mso-spacerun:yes'>             </span>'NUM READ'<span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'ff-1' <span style='mso-spacerun:yes'>    </span>'-12'<span style='mso-spacerun:yes'>           </span>'--- NUMERICAL'<span style='mso-spacerun:yes'>        </span>'--- NUMBERS'<span style='mso-spacerun:yes'>      </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'<span
+class=GramE>ff+</span>1'<span style='mso-spacerun:yes'>     </span><span
+class=SpellE>'ff+1'</span><span style='mso-spacerun:yes'>          </span>'-12'<span style='mso-spacerun:yes'>                  </span>[<span style='mso-spacerun:yes'>              </span>-12]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'-12'<span style='mso-spacerun:yes'>      </span>'ff-1'<span style='mso-spacerun:yes'>    </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>     </span><span
+class=SpellE>'ff-1'</span><span style='mso-spacerun:yes'>                 </span>[<span style='mso-spacerun:yes'>               </span>-1]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>        </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span>'ff+1'<span style='mso-spacerun:yes'>        </span><span style='mso-spacerun:yes'>         </span>[<span style='mso-spacerun:yes'>                </span>1]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>        </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span><span
+class=SpellE>'</span>--- ASCII NUMBERS'<span style='mso-spacerun:yes'>    </span>'--- ASCII NUMBERS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>        </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span><span
+class=SpellE>'</span>--- ASCII STRINGS'<span style='mso-spacerun:yes'>    </span>'--- ASCII STRINGS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre style='margin-left:
+22.5pt'><span class=comment>%<span style='mso-spacerun:yes'>   </span><span
+class=GramE>remove</span> <b style='mso-bidi-font-weight:normal'>TEMPLATE</b>(s)</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:2'>          </span>o=<span
+class=SpellE>asort</span>(s,<span class=string>'-v'</span>,<span class=string>'-t'</span><span
+class=GramE>,{</span><span class=string>'ff'</span>,<span class=string>'1'</span>});</pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'INPUT'<span style='mso-spacerun:yes'>    </span>'ASCII SORT'<span style='mso-spacerun:yes'>    </span>'NUM SORT'<span style='mso-spacerun:yes'>             </span>'NUM READ'<span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span class=GramE>' -</span> ' <span style='mso-spacerun:yes'>     </span><span
+class=SpellE>'</span> + '<span style='mso-spacerun:yes'>           </span><span
+class=SpellE>'</span>--- NUMERICAL'<span style='mso-spacerun:yes'>        </span>'--- NUMBERS'<span style='mso-spacerun:yes'>      </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span class=GramE>' +</span> ' <span style='mso-spacerun:yes'>     </span><span
+class=SpellE>'</span> - '<span style='mso-spacerun:yes'>           </span><span
+class=SpellE>'</span>- 2'<span style='mso-spacerun:yes'>                  </span>[<span style='mso-spacerun:yes'>                </span>2]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'- 2'<span style='mso-spacerun:yes'>      </span>'- 2'<span style='mso-spacerun:yes'>           </span>'--- ASCII NUMBERS'<span style='mso-spacerun:yes'>   </span><span style='mso-spacerun:yes'> </span>'--- ASCII NUMBERS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>        </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span><span
+class=SpellE>'</span>--- ASCII STRINGS'<span style='mso-spacerun:yes'>    </span>'--- ASCII STRINGS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span>' <span
+class=SpellE>'</span><span style='mso-spacerun:yes'>        </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span><span
+class=SpellE>'</span> + '<span style='mso-spacerun:yes'>                  </span><span
+class=SpellE>'</span> + '<span style='mso-spacerun:yes'>              </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>   </span>' <span
+class=SpellE>'</span><span style='mso-spacerun:yes'>        </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span><span
+class=SpellE>'</span> - '<span style='mso-spacerun:yes'>                  </span><span
+class=SpellE>'</span> - '<span style='mso-spacerun:yes'>              </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre style='margin-left:
+22.5pt'><span class=comment>%<span style='mso-spacerun:yes'>   </span><span
+class=GramE>remove</span> <b style='mso-bidi-font-weight:normal'>TEMPLATE</b>(s) than <span
+class=SpellE><b style='mso-bidi-font-weight:normal'>SPACE</b>s</span></span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:2'>          </span>o=<span
+class=SpellE>asort</span>(s,<span class=string>'-v'</span>,<span class=string>'-t'</span>,<span
+class=string>'1'</span>,<span class=string>'-w'</span>);</pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'INPUT'<span style='mso-spacerun:yes'>    </span>'ASCII SORT'<span style='mso-spacerun:yes'>    </span>'NUM SORT'<span style='mso-spacerun:yes'>             </span>'NUM READ'<span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'ff-'<span style='mso-spacerun:yes'>      </span>'-2'<span style='mso-spacerun:yes'>            </span>'--- NUMERICAL'<span style='mso-spacerun:yes'>        </span>'--- NUMBERS'<span style='mso-spacerun:yes'>      </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'ff+' <span style='mso-spacerun:yes'>     </span><span
+class=SpellE>'ff+'</span><span style='mso-spacerun:yes'>           </span>'-2'<span style='mso-spacerun:yes'>                </span><span style='mso-spacerun:yes'>   </span>[<span style='mso-spacerun:yes'>               </span>-2]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'-2'<span style='mso-spacerun:yes'>       </span>'ff-'<span style='mso-spacerun:yes'>           </span>'--- ASCII NUMBERS'<span style='mso-spacerun:yes'>    </span>'--- ASCII NUMBERS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>        </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span><span
+class=SpellE>'</span>--- ASCII STRINGS'<span style='mso-spacerun:yes'>    </span>'--- ASCII STRINGS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>        </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span>'ff+'<span style='mso-spacerun:yes'>                  </span><span
+class=SpellE>'ff+'</span><span style='mso-spacerun:yes'>              </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>    </span><span style='mso-spacerun:yes'>    </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span>'ff-'<span style='mso-spacerun:yes'>                  </span><span
+class=SpellE>'ff-'</span><span style='mso-spacerun:yes'>              </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre style='margin-left:
+22.5pt'><span class=comment>%<span style='mso-spacerun:yes'>   </span><span
+class=GramE>remove</span> <span class=SpellE><b style='mso-bidi-font-weight:
+normal'>SPACE</b>s</span> than <b style='mso-bidi-font-weight:normal'>TEMPLATE</b>(s)</span></pre><pre
+style='margin-left:22.5pt'><span style='mso-tab-count:2'>          </span>o=<span
+class=SpellE>asort</span>(s,<span class=string>'-v'</span>,<span class=string>'-w'</span>,<span
+class=string>'-t'</span>,<span class=string>'1'</span>);</pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'INPUT'<span style='mso-spacerun:yes'>    </span>'ASCII SORT'<span style='mso-spacerun:yes'>    </span>'NUM SORT'<span style='mso-spacerun:yes'>             </span>'NUM READ'<span style='mso-spacerun:yes'>         </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'ff- '<span style='mso-spacerun:yes'>     </span><span
+class=SpellE>'</span>- 2'<span style='mso-spacerun:yes'>           </span>'--- NUMERICAL'<span style='mso-spacerun:yes'>   </span><span style='mso-spacerun:yes'>     </span>'--- NUMBERS'<span style='mso-spacerun:yes'>      </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'ff+ '<span style='mso-spacerun:yes'>     </span>'ff+ '<span style='mso-spacerun:yes'>    </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>     </span><span
+class=SpellE>'</span>- 2'<span style='mso-spacerun:yes'>                  </span>[<span style='mso-spacerun:yes'>                </span>2]<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'>    </span>'- 2'<span style='mso-spacerun:yes'>      </span>'ff- '<span style='mso-spacerun:yes'>    </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>     </span><span
+class=SpellE>'</span>--- ASCII NUMBERS'<span style='mso-spacerun:yes'>    </span>'--- ASCII NUMBERS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>        </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span><span
+class=SpellE>'</span>--- ASCII STRINGS'<span style='mso-spacerun:yes'>    </span>'--- ASCII STRINGS'<o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'> <span style='mso-spacerun:yes'>   </span><span class=GramE>' <span
+class=SpellE>'</span></span><span style='mso-spacerun:yes'>  </span><span style='mso-spacerun:yes'>      </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span>'ff+ '<span style='mso-spacerun:yes'>                 </span>'ff+ '<span style='mso-spacerun:yes'>             </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'>   </span><span
+class=GramE>' <span class=SpellE>'</span></span><span style='mso-spacerun:yes'>        </span><span
+class=SpellE>'</span> <span class=SpellE>'</span><span style='mso-spacerun:yes'>             </span>'ff- '<span style='mso-spacerun:yes'>                 </span>'ff- '<span style='mso-spacerun:yes'>             </span><o:p></o:p></span></i></pre><pre><i><span
+style='color:gray'><o:p>&nbsp;</o:p></span></i></pre>
+
+<p class=footer style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><br>
+Published with MATLAB® 7.0.4<o:p></o:p></p>
+
+</div>
+
+<!--
+##### SOURCE BEGIN #####
+% ASORT
+% a pedestrian NUMERICAL SORTER of ALPHANUMERIC data
+
+% - create some data
+		d = {
+%	strings with one valid alphanumeric number
+%	sorted numerically
+			'-inf'
+			'x-3.2e4y'
+			'f-1.4'
+			'-.1'
+			'+ .1d-2'
+			'.1'
+			'f.1'
+			'f -+1.4'
+			'f.2'
+			'f.3'
+			'f.10'
+			'f.11'
+			'+inf'
+			' -nan'
+			'+ nan'
+			'nan'
+%	strings with many numbers or invalid/ambiguous numbers
+%	sorted in ascii dictionary order
+			' nan nan'
+			'+ .1e-.2'
+			'-1 2'
+			'Z12e12ez'
+			'inf -inf'
+			's.3TT.4'
+			'z12e12ez'
+%	strings without numbers
+%	sorted in ascii dictionary order
+			' . .. '
+			'.'
+			'...'
+			'.b a.'
+			'a string'
+			'a. .b'
+		};
+%   ... and scramble it...
+		rand('seed',10);
+		d=d(randperm(numel(d)));
+
+% - run ASORT with verbose output
+%   and keep additional results
+		o=asort(d,'-v','-d');
+% - or
+%		p=asort(char(d));
+
+% - show results
+		o
+		o.anr
+
+% - run ASORT with no-space/template options
+%   NOTE the impact of -t/-w order!
+		s={'ff - 1','ff + 1','- 12'};
+%   RAW
+		o=asort(s,'-v');
+%   remove SPACEs
+		o=asort(s,'-v','-w');
+%   remove TEMPLATE(s)
+		o=asort(s,'-v','-t',{'ff','1'});
+%   remove TEMPLATE(s) than SPACEs
+		o=asort(s,'-v','-t','1','-w');
+%   remove SPACEs than TEMPLATE(s)
+		o=asort(s,'-v','-w','-t','1');
+
+
+##### SOURCE END #####
+-->
+</body>
+
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/asdemo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,70 @@
+% ASORT
+% a pedestrian NUMERICAL SORTER of ALPHANUMERIC data
+
+% - create some data
+		d = {
+%		strings with one valid alphanumeric number
+%		sorted numerically
+			'-inf'
+			'x-3.2e4y'
+			'f-1.4'
+			'-.1'
+			'+ .1d-2'
+			'.1'
+			'f.1'
+			'f -+1.4'
+			'f.2'
+			'f.3'
+			'f.10'
+			'f.11'
+			'+inf'
+			' -nan'
+			'+ nan'
+			'nan'
+%		strings with many numbers or invalid/ambiguous numbers
+%		sorted in ascii dictionary order
+			' nan nan'
+			'+ .1e-.2'
+			'-1 2'
+			'Z12e12ez'
+			'inf -inf'
+			's.3TT.4'
+			'z12e12ez'
+%		strings without numbers
+%		sorted in ascii dictionary order
+			' . .. '
+			'.'
+			'...'
+			'.b a.'
+			'a string'
+			'a. .b'
+		};
+%   ... and scramble it...
+		rand('seed',10);
+		d=d(randperm(numel(d)));
+
+% - run ASORT with
+%   verbose output:		<-v>
+%   keep additional results:	<-d>
+		o=asort(d,'-v','-d');
+% - or
+%		p=asort(char(d),'-v','-d');
+
+% - show results
+		o
+		o.anr
+
+% - run ASORT with no-space/template options
+%   NOTE the impact of -w/-t order!
+		s={'ff - 1','ff + 1','- 12'};
+%   RAW
+		o=asort(s,'-v');
+%   remove SPACEs
+		o=asort(s,'-v','-w');
+%   remove TEMPLATE(s)
+		o=asort(s,'-v','-t',{'ff','1'});
+%   remove TEMPLATE(s) than SPACEs
+		o=asort(s,'-v','-t','1','-w');
+%   remove SPACEs than TEMPLATE(s)
+		o=asort(s,'-v','-w','-t','1');
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/asort.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,376 @@
+%[ANR,SNR,STR]	=  ASORT(INP,'OPT',...);
+% S		=  ASORT(INP,'OPT',...);
+%		   to sort alphanumeric strings numerically if
+%		   they contain one properly formatted number
+%		   otherwise, ascii dictionary sorting is applied
+%
+% INP	unsorted input:
+%	- a char array
+%	- a cell array of strings
+% OPT	options
+%  -s	- sorting option
+%	  '-s','ascend'					[def]
+%	  '-s','descend'
+%  -st	- force output form S				[def: nargout dependent]
+%  -t	- replace matching template(s) with one space
+%	  prior to sorting
+%	  '-t','template'
+%	  '-t',{'template1','template2',...}
+%  -w	- remove space(s) prior to sorting
+%
+%	  NOTE	-t/-w options are processed in the
+%		      order that they appear in
+%		      the command line
+%
+%  -v	- verbose output				[def: quiet]
+%  -d	- debug mode
+%	  save additional output in S
+%	  .c:	lex parser input
+%	  .t:	lex parser table
+%	  .n:	lex parser output
+%	  .d:	numbers read from .n
+%
+% ANR	numerically sorted alphanumeric strings		[eg, 'f.-1.5e+2x.x']
+%	- contain one number that can be read by
+%	  <strread> | <sscanf>
+% SNR	ascii dict  sorted alphanumeric strings
+% http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=7212#
+%
+%	- contain more than one number			[eg, 'f.-1.5e +2.x']
+%	- contain incomplete|ambiguous numbers		[eg, 'f.-1.5e+2.x']
+% STR	ascii dict  sorted strings
+%	- contain no numbers				[eg, 'a test']
+%
+% S	structure with fields
+%	.anr
+%	.srn
+%	.str
+
+% created:
+%	us	03-Mar-2002
+% modified:
+%	us	30-Mar-2005 11:57:07 	/ TMW R14.sp2
+
+%--------------------------------------------------------------------------------
+function	varargout=asort(inp,varargin)
+
+varargout(1:nargout)={[]};
+if	~nargin
+	help(mfilename);
+	return;
+end
+
+% - common parameters/options
+n=[];
+ds=[];
+anr={};
+snr={};
+str={};
+smod='ascend';	% sorting option
+tmpl={};	% template(s)
+sflg=false;	% output  mode: structure
+tflg=false;	% remove  template(s)
+dflg=false;	% debug   mode
+vflg=false;	% verbose output
+wflg=false;	% remove  spaces
+
+if	nargin > 1
+	ix=find(strcmp('-s',varargin));
+	if	~isempty(ix) && nargin > ix(end)+1
+		smod=varargin{ix(end)+1};
+	end
+	ix=find(strcmp('-t',varargin));
+	if	~isempty(ix) && nargin > ix(end)+1
+		tflg=ix(end);
+		tmpl=varargin{ix(end)+1};
+	end
+	if	find(strcmp('-d',varargin));
+		dflg=true;
+	end
+	if	find(strcmp('-st',varargin));
+		sflg=true;
+	end
+	if	find(strcmp('-v',varargin));
+		vflg=true;
+	end
+	ix=find(strcmp('-w',varargin));
+	if	~isempty(ix)
+		wflg=ix(end);
+	end
+end
+%   spec numbers
+ntmpl={
+	' inf '
+	'+inf '
+	'-inf '
+	' nan '
+	'+nan '
+	'-nan '
+	};
+%   spec chars
+ctmpl={
+	'.'	% decimal point
+	'd'	% exponent
+	'e'	% exponent
+	};
+
+if	nargout <= 3
+	varargout{1}=inp;
+else
+	disp(sprintf('ASORT> too many output args [%-1d/%-1d]\n',nargout,3));
+	help(mfilename);
+	return;
+end
+if	isempty(inp)
+	disp(sprintf('ASORT> input is empty'));
+	return;
+end
+
+ti=clock;
+winp=whos('inp');
+switch	winp.class
+	case	'cell'
+		if	~iscellstr(inp)
+			disp(sprintf('ASORT> cell is not an array of strings'));
+			return;
+		end
+		inp=inp(:);
+		[ins,inx]=sort(inp);
+	case	'char'
+		%		[ins,inx]=sortrows(inp);
+		inp=cstr(inp);
+	otherwise
+		disp(sprintf('ASORT> does not sort input of class <%s>',winp.class));
+		return;
+end
+
+inp=inp(:);
+inp=setinp(inp,tmpl,[tflg wflg]);
+[ins,inx]=sort(inp);
+if	strcmp(smod,'descend')
+	ins=ins(end:-1:1,:);
+	inx=inx(end:-1:1);
+end
+ins=inp(inx);
+c=lower(char(ins));
+wins=whos('c');
+[cr,cc]=size(c);
+
+% - LEXICAL PARSER
+%--------------------------------------------------------------------------------
+% - extend input on either side for search
+c=[' '*ones(cr,2) c ' '*ones(cr,2)];
+
+% - search for valid alphanumeric items in strings
+%   numbers/signs
+t=(c>='0'&c<='9');
+t=t|c=='-';
+t=t|c=='+';
+[tr,tc]=size(t);
+%   decimal points
+%   note: valid numbers with dec points must follow these templates
+%         nr.nr
+%	  sign.nr
+%         nr.<SPACE>
+%         <SPACE>.nr
+ix1=	 t(:,1:end-2) & ...
+	~isletter(c(:,1:end-2)) & ...
+	c(:,2:end-1)=='.';
+t(:,2:end-1)=t(:,2:end-1)|ix1;
+ix1=	(t(:,3:end) & ...
+	(~isletter(c(:,3:end)) & ...
+	~isletter(c(:,1:end-2))) | ...
+	(c(:,3:end)=='e' | ...
+	c(:,3:end)=='d')) & ...
+	c(:,2:end-1)=='.';
+t(:,2:end-1)=t(:,2:end-1)|ix1;
+%		t(:,3:end)=t(:,3:end)|ix1;
+%   signs
+t(c=='-')=false;
+t(c=='+')=false;
+ix1=	 t(:,3:end) & ...
+	(c(:,2:end-1)=='-' | ...
+	c(:,2:end-1)=='+');
+t(:,2:end-1)=t(:,2:end-1)|ix1;
+%   exponents
+ix1=	 t(:,1:end-2) & ...
+	(c(:,2:end-1)=='e' | ...
+	c(:,2:end-1)=='d');
+t(:,2:end-1)=t(:,2:end-1)|ix1;
+%   spec numbers
+c=reshape(c.',1,[]);
+t=t';
+ic=[];
+for	j=1:numel(ntmpl)
+	ic=[ic,strfind(c,ntmpl{j})];
+end
+ic=sort(ic);
+for	i=1:numel(ic)
+	ix=ic(i)+0:ic(i)+4;
+	t(ix)=true;
+end
+t=t';
+c=reshape(c.',[tc,tr]).';
+t(c==' ')=false;
+%--------------------------------------------------------------------------------
+
+% - only allow one number per string
+il=~any(t,2);
+ib=strfind(reshape(t.',1,[]),[0 1]);
+if	~isempty(ib)
+	ixe=cell(3,1);
+	n=reshape(char(t.*c).',1,[]);
+	for	i=1:numel(ctmpl)
+		id=strfind(n,ctmpl{i});
+		if	~isempty(id)
+			[dum,dum,ixu{i},ixe{i}]=dupinx(id,tc);
+		end
+	end
+	in=false(tr,1);
+	im=in;
+	%   must check for anomalous cases like <'.d'>
+	id=sort(...
+		[find(n>='0' & n<='9'),...
+		strfind(n,'inf'),...
+		strfind(n,'nan')]);
+	%		[ibu,ibd,ixbu,ixe{i+1}]=dupinx(id,tc);
+	[ibu,ibd,ixbu,ixbd]=dupinx(id,tc);
+	in(ixbu)=true;
+	in(ixbd)=true;
+	[ibu,ibd,ixbu,ixbd]=dupinx(ib,tc);
+	im(ixbu)=true;
+	in=in&im;
+	in([ixe{:}])=false;
+	il=~any(t,2);
+	ia=~(in|il);
+
+	% - read valid strings
+	n=t(in,:).*c(in,:);
+	n(n==0)=' ';
+	n=char(n);
+	dn=strread(n.','%n');
+	if	numel(dn) ~= numel(find(in))
+		%disp(sprintf('ASORT> unexpected fatal error reading input!'));
+		if	nargout
+			s.c=c;
+			s.t=t;
+			s.n=n;
+			s.d=dn;
+			varargout{1}=s;
+		end
+		return;
+	end
+
+	% - sort numbers
+	[ds,dx]=sort(dn,1,smod);
+	in=find(in);
+	anr=ins(in(dx));
+	snr=ins(ia);
+end
+str=ins(il);
+to=clock;
+
+% - prepare output
+if	nargout < 3 || sflg
+	s.magic='ASORT';
+	s.ver='30-Mar-2005 11:57:07';
+	s.time=datestr(clock);
+	s.runtime=etime(to,ti);
+	s.input_class=winp.class;
+	s.input_msize=winp.size;
+	s.input_bytes=winp.bytes;
+	s.strng_class=wins.class;
+	s.strng_msize=wins.size;
+	s.strng_bytes=wins.bytes;
+	s.anr=anr;
+	s.snr=snr;
+	s.str=str;
+	if	dflg
+		s.c=c;
+		s.t=t;
+		s.n=n;
+		s.d=ds;
+	end
+	varargout{1}=s;
+else
+	s={anr,snr,str};
+	for	i=1:nargout
+		varargout{i}=s{i};
+	end
+end
+
+if	vflg
+	inp=cstr(inp);
+	an=[{'--- NUMERICAL'};		anr];
+	as=[{'--- ASCII NUMBERS'};	snr];
+	at=[{'--- ASCII STRINGS'};	str];
+	nn=[{'--- NUMBERS'};		num2cell(ds)];
+	ag={' ';' ';' '};
+	u=[{'INPUT'};			inp;ag];
+	v=[{'ASCII SORT'};		ins;ag];
+	w=[{'NUM SORT'};		an;as;at];
+	x=[{'NUM READ'};		nn;as;at];
+	w=[u,v,w,x];
+	disp(w);
+end
+
+return;
+%--------------------------------------------------------------------------------
+function	c=cstr(s)
+% - bottleneck waiting for a good <cellstr> replacement
+%   it consumes ~75% of <asort>'s processing time!
+
+c=s;
+if	ischar(s)
+	sr=size(s,1);
+	c=cell(sr,1);
+	for	i=1:sr
+		c{i}=s(i,:);	% no deblanking!
+	end
+end
+return;
+%--------------------------------------------------------------------------------
+function	[idu,idd,ixu,ixd]=dupinx(ix,nc)
+% - check for more than one entry/row in a matrix of column size <nc>
+%   unique    indices:	idu / ixu
+%   duplicate indices:	idd / ixd
+
+if	isempty(ix)
+	idu=[];
+	idd=[];
+	ixu=[];
+	ixd=[];
+	return;
+end
+id=fix(ix/nc)+1;
+idi=diff(id)~=0;
+ide=[true idi];
+idb=[idi true];
+idu=idb & ide;
+idd=idb==1 & ide==0;
+ixu=id(idu);
+ixd=id(idd);
+return;
+%--------------------------------------------------------------------------------
+function	inp=setinp(inp,tmpl,flg)
+% - remove space(s) and/or templates
+
+if	isempty(inp) || ~any(flg)
+	return;
+end
+
+for	i=sort(flg)
+	switch	i
+		case	flg(1)
+			if	ischar(tmpl)
+				tmpl={tmpl};
+			end
+			for	i=1:numel(tmpl)
+				inp=strrep(inp,tmpl{i},' ');
+			end
+		case	flg(2)
+			inp=strrep(inp,' ','');
+	end
+end
+return;
+%--------------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/assert.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function assert(pred, str)
+% ASSERT Raise an error if the predicate is not true.
+% assert(pred, string)
+
+if nargin<2, str = ''; end
+
+if ~pred
+  s = sprintf('assertion violated: %s', str);
+  error(s);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/assertBNT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function assertBNT(pred, str)
+% ASSERT Raise an error if the predicate is not true.
+% assert(pred, string)
+
+if nargin<2, str = ''; end
+
+if ~pred
+  s = sprintf('assertion violated: %s', str);
+  error(s);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/assignEdgeNums.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function [edge_id, nedges] = assignEdgeNums(adj_mat)
+% give each edge a unique number
+% we number (i,j) for j>i first, in row, column order.
+% Then we number the reverse links
+
+nnodes = length(adj_mat);
+edge_id = zeros(nnodes);
+e = 1;
+for i=1:nnodes
+  for j=i+1:nnodes
+    if adj_mat(i,j)
+      edge_id(i,j) = e;
+      e = e+1;
+    end
+  end
+end
+
+nedges = e-1;
+tmp = edge_id;
+ndx = find(tmp);
+tmp(ndx) = tmp(ndx)+nedges;
+edge_id = edge_id + triu(tmp)';
+
+
+if 0
+ndx = find(adj_mat);
+nedges = length(ndx);
+nnodes = length(adj_mat);
+edge_id = zeros(1, nnodes*nnodes);
+edge_id(ndx) = 1:nedges; 
+edge_id = reshape(edge_id, nnodes, nnodes);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/assign_cols.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function M = assign_cols(cols, vals, M)
+% ASSIGN_COLS Assign values to columns of a matrix
+% function M = assign_cols(M, cols, vals, M)
+%
+% Example:
+% M = assign_cols(data, ones(1,N))
+% will construct a 1-of-K encoding of the data, where K=ncols=max(data) and N=nrows=length(data)
+%
+% Example:
+% M = zeros(3,2);
+% M = assign_cols([1 2 1], [10 20 30], M)
+% is equivalent to
+% M(1, 1) = 10
+% M(2, 2) = 20
+% M(3, 1) = 30
+%
+
+if nargin < 3
+  nr = length(cols);
+  nc = max(cols);
+  M = zeros(nr, nc);
+else
+  [nr nc] = size(M);
+end
+
+if 0
+for r=1:nr
+  M(r, cols(r)) = vals(r);
+end
+end
+
+if 1
+rows = 1:nr;
+ndx = subv2ind([nr nc], [rows(:) cols(:)]);
+M(ndx) = vals;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/axis_pct.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,70 @@
+function ax = axis_pct(pct)
+% AXIS_PCT       Set reasonable axis limits.
+% AXIS_PCT(pct) sets axis limits to extend pct% beyond limits of plotted 
+% objects.  Default is 5%.
+% Works for linear or log scale.
+% Unfortunately, the axes won't change when new points are plotted.
+
+if nargin < 1
+  pct = 0.05;
+end
+ax = [Inf -Inf Inf -Inf Inf -Inf];
+
+% find bounding box of plotted objects
+children = get(gca,'children');
+for child = children'
+  if strcmp(get(child,'type'),'text')
+    xyz = get(child,'position');
+    % need to determine bounding box of the text
+    c([1 2]) = xyz(1);
+    c([3 4]) = xyz(2);
+    c([5 6]) = xyz(3);
+  else
+    x = get(child,'xdata');
+    c(1) = min(x);
+    c(2) = max(x);
+    y = get(child,'ydata');
+    c(3) = min(y);
+    c(4) = max(y);
+    z = get(child,'zdata');
+    if isempty(z)
+      c([5 6]) = 0;
+    else
+      c(5) = min(z);
+      c(6) = max(z);
+    end
+  end
+  ax([1 3 5]) = min(ax([1 3 5]), c([1 3 5]));
+  ax([2 4 6]) = max(ax([2 4 6]), c([2 4 6]));
+end
+if strcmp(get(gca,'xscale'), 'log')
+  ax([1 2]) = log(ax([1 2]));
+end
+if strcmp(get(gca,'yscale'), 'log')
+  ax([3 4]) = log(ax([3 4]));
+end
+dx = ax(2)-ax(1);
+if dx == 0
+  dx = 1;
+end
+dy = ax(4)-ax(3);
+if dy == 0
+  dy = 1;
+end
+dz = ax(6)-ax(5);
+if dz == 0
+  dz = 1;
+end
+ax = ax + [-dx dx -dy dy -dz dz]*pct;
+if strcmp(get(gca,'xscale'), 'log')
+  ax([1 2]) = exp(ax([1 2]));
+end
+if strcmp(get(gca,'yscale'), 'log')
+  ax([3 4]) = exp(ax([3 4]));
+end
+% clip for 2D
+ax = ax(1:length(axis));
+axis(ax);
+if nargout < 1
+  clear ax
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/bipartiteMatchingDemo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,112 @@
+% Consider matching sources to detections
+
+%  s1 d2  
+%         s2 d3
+%  d1
+
+%a  = bipartiteMatchingHungarian([52;0.01])
+
+% sources(:,i) = [x y] coords
+sources = [0.1 0.7; 0.6 0.4]';
+detections = [0.2 0.2; 0.2 0.8; 0.7 0.1]';
+dst = sqdist(sources, detections);
+
+% a = [2 3] which means s1-d2, s2-d3
+a = bipartiteMatchingHungarian(dst);
+a2 = bipartiteMatchingIntProg(dst);
+assert(isequal(a(:),a2(:)))
+
+
+figure(1); clf
+bipartiteMatchingDemoPlot(sources, detections, a)
+
+
+
+
+%%%% Flip roles of sources and detections
+
+%dst  = dst';
+dst = sqdist(detections, sources);
+% a = [0 1 2] which means d1-0, d2-s1, d3-s2
+a = bipartiteMatchingHungarian(dst);
+
+a2 = bipartiteMatchingIntProg(dst);
+assert(isequal(a(:),a2(:)))
+
+figure(2); clf
+bipartiteMatchingDemoPlot(detections, sources, a) % swapped args
+
+
+
+
+%%%%%%%%%% Move s1 nearer to d1
+%  d2  
+%         s2 d3
+%  s1 d1
+
+sources = [0.1 0.3; 0.6 0.4]';
+detections = [0.2 0.2; 0.2 0.8; 0.7 0.1]';
+dst = sqdist(sources, detections);
+
+% a = [2 3] which means s1-d2, s2-d3
+a = bipartiteMatchingHungarian(dst);
+[a2, ass] = bipartiteMatchingIntProg(dst);
+assert(isequal(a(:),a2(:)))
+
+
+figure(3); clf
+bipartiteMatchingDemoPlot(sources, detections, a)
+
+
+
+%%%%%%%%%%
+
+% Use random points
+
+% Generate 2D data from a mixture of 2 Gaussians (from netlab demgmm1)
+randn('state', 0); rand('state', 0);
+gmix = gmm(2, 2, 'spherical');
+ndat1 = 10; ndat2 = 10; ndata = ndat1+ndat2;
+%gmix.centres =  [0.3 0.3; 0.7 0.7]; 
+%gmix.covars = [0.01 0.01];
+gmix.centres =  [0.5 0.5; 0.5 0.5];
+gmix.covars = [0.1 0.01];
+[x, label] = gmmsamp(gmix, ndata);
+
+ndx = find(label==1);
+sources = x(ndx,:)';
+ndx = find(label==2);
+detections = x(ndx,:)';
+dst = sqdist(sources, detections);
+
+[a, ass] = bipartiteMatchingIntProg(dst);
+[a2] = bipartiteMatchingHungarian(dst);
+assert(isequal(a(:), a2(:)))
+
+figure(4); clf
+bipartiteMatchingDemoPlot(sources, detections, a)
+
+% only match 80% of points
+p1 = size(sources, 2);
+p2 = size(detections, 2);
+nmatch = ceil(0.8*min(p1,p2));
+a2 = bipartiteMatchingIntProg(dst, nmatch);
+figure(5); clf
+bipartiteMatchingDemoPlot(sources, detections, a2)
+
+
+%%% swap roles
+
+ndx = find(label==2);
+sources = x(ndx,:)';
+ndx = find(label==1);
+detections = x(ndx,:)';
+dst = sqdist(sources, detections);
+
+% only match 80% of points
+p1 = size(sources, 2);
+p2 = size(detections, 2);
+nmatch = ceil(0.8*min(p1,p2));
+a2 = bipartiteMatchingIntProg(dst, nmatch);
+figure(6); clf
+bipartiteMatchingDemoPlot(sources, detections, a2)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/bipartiteMatchingDemoPlot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function bipartiteMatchingDemoPlot(sources, detections, a)
+
+hold on
+p1 = size(sources,2);
+p2 = size(detections,2);
+for i=1:p1
+  h=text(sources(1,i), sources(2,i), sprintf('s%d', i));
+  set(h, 'color', 'r');
+end
+for i=1:p2
+  h=text(detections(1,i), detections(2,i), sprintf('d%d', i));
+  set(h, 'color', 'b');
+end
+
+if nargin < 3, return; end
+
+for i=1:p1
+  j = a(i);
+  if j==0 % i not matched to anything
+    continue
+  end
+  line([sources(1,i) detections(1,j)], [sources(2,i) detections(2,j)])
+end
+axis_pct;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/bipartiteMatchingHungarian.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,90 @@
+% MATCH - Solves the weighted bipartite matching (or assignment)
+%         problem.
+%
+% Usage:  a = match(C);
+%
+% Arguments:   
+%         C     - an m x n cost matrix; the sets are taken to be
+%                 1:m and 1:n; C(i, j) gives the cost of matching
+%                 items i (of the first set) and j (of the second set)
+%
+% Returns:
+%
+%         a     - an m x 1 assignment vector, which gives the
+%                 minimum cost assignment.  a(i) is the index of
+%                 the item of 1:n that was matched to item i of
+%                 1:m.  If item i (of 1:m) was not matched to any 
+%                 item of 1:n, then a(i) is zero.
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [a] = optimalMatching(C)
+
+% Trivial cases:
+[p, q] = size(C);
+if (p == 0)
+  a = []; 
+  return;
+elseif (q == 0)
+  a = zeros(p, 1);
+  return;
+end
+
+
+if  0
+% First, reduce the problem by making easy optimal matches.  If two
+% elements agree that they are the best match, then match them up.
+[x, a] = min(C, [], 2);
+[y, b] = min(C, [], 1);
+u = find(1:p ~= b(a(:)));
+a(u) = 0;
+v = find(1:q ~= a(b(:))');
+C = C(u, v);
+if (isempty(C)) return; end
+end
+
+% Get the (new) size of the two sets, u and v.
+[m, n] = size(C);
+
+%mx = realmax;
+mx = 2*max(C(:));
+mn = -2*min(C(:));
+% Pad the affinity matrix to be square
+if (m < n)
+  C = [C; mx * ones(n - m, n)];
+elseif (n < m)
+  C = [C, mx * ones(m, m - n)];
+end
+
+% Run the Hungarian method.  First replace infinite values by the
+% largest (or smallest) finite values.
+C(find(isinf(C) & (C > 0))) = mx;
+C(find(isinf(C) & (C < 0))) = mn;
+%fprintf('running hungarian\n');
+[b, cost] = hungarian(C');
+
+% Extract only the real assignments
+ap = b(1:m)';
+ap(find(ap > n)) = 0;
+
+a = ap; 
+%% Incorporate this sub-assignment into the complete assignment
+%  k = find(ap);
+%  a(u(k)) = v(ap(k));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/bipartiteMatchingIntProg.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,69 @@
+function [a,ass] = bipartiteMatchingIntProg(dst, nmatches)
+% BIPARTITEMATCHINGINTPROG Use binary integer programming (linear objective) to solve for optimal linear assignment
+% function a = bipartiteMatchingIntProg(dst)
+% a(i) = best matching column for row i
+% 
+% This gives the same result as bipartiteMatchingHungarian.
+%
+% function a = bibpartiteMatchingIntProg(dst, nmatches)
+% only matches the specified number (must be <= min(size(dst))).
+% This can be used to allow outliers in both source and target.
+%
+% For details, see Marciel & Costeira, "A global solution to sparse correspondence
+% problems", PAMI 25(2), 2003
+
+if nargin < 2, nmatches = []; end
+
+[p1 p2] = size(dst);
+p1orig = p1; p2orig = p2;
+dstorig = dst;
+
+if isempty(nmatches) % no outliers allowed  (modulo size difference)
+  % ensure matrix is square
+  m = max(dst(:));
+  if p1<p2
+    dst = [dst; m*ones(p2-p1, p2)];
+  elseif p1>p2
+    dst = [dst  m*ones(p1, p1-p2)];
+  end
+end
+[p1 p2] = size(dst);
+
+
+c = dst(:); % vectorize cost matrix
+
+% row-sum: ensure each column sums to 1
+A2 = kron(eye(p2), ones(1,p1));
+b2 = ones(p2,1);
+
+% col-sum: ensure each row sums to 1
+A3 = kron(ones(1,p2), eye(p1));
+b3 = ones(p1,1);
+
+if isempty(nmatches)
+  % enforce doubly  stochastic
+  A = [A2; A3];
+  b = [b2; b3];
+  Aineq = zeros(1, p1*p2);
+  bineq = 0;
+else
+  nmatches = min([nmatches, p1, p2]);
+  Aineq = [A2; A3];
+  bineq = [b2; b3]; % row and col sums <= 1
+  A = ones(1,p1*p2);
+  b = nmatches; % total num matches = b (otherwise get degenerate soln)
+end
+
+
+ass = bintprog(c, Aineq, bineq, A, b);
+ass = reshape(ass, p1, p2);
+
+a = zeros(1, p1orig);
+for i=1:p1orig
+  ndx = find(ass(i,:)==1);
+  if ~isempty(ndx) & (ndx <= p2orig)
+    a(i) = ndx;
+  end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/block.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function sub = block(blocks, block_sizes)
+% BLOCK Return a vector of subscripts corresponding to the specified blocks.
+% sub = block(blocks, block_sizes)
+% 
+% e.g., block([2 5], [2 1 2 1 2]) = [3 7 8].
+
+blocks = blocks(:)';
+block_sizes = block_sizes(:)';
+skip = [0 cumsum(block_sizes)];
+start = skip(blocks)+1;
+fin = start + block_sizes(blocks) - 1;
+sub = [];
+for j=1:length(blocks)
+  sub = [sub start(j):fin(j)];
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/cell2matPad.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function data2 = cell2matPad(data)
+% data{f}(y,x,b) - each frame can have a different size (can can even be empty)
+% data2(y,x,b,f) = zero padded version
+
+Nframes = length(data);
+Nbands = -inf;
+nr = -inf; nc = -inf;
+for f=1:Nframes
+  if isempty(data{f}), continue; end
+  nr = max(nr, size(data{f},1));
+  nc = max(nc, size(data{f},2));
+  Nbands = max(Nbands, size(data{f},3));
+end    
+data2 = zeros(nr, nc, Nbands, Nframes);
+for f=1:Nframes
+  if isempty(data{f}), continue; end
+  data2(1:size(data{f},1), 1:size(data{f},2), :, f) = data{f};
+end
+if Nbands == 1
+  data2 = squeeze(data2); % reshape(data2, [size(data2,1), size(data2,2), Nframes]);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/cell2num.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function N = cell2num(C)
+% CELL2NUM Convert a 2D cell array to a 2D numeric array 
+% N = cell2num(C)
+% If the cells contain column vectors, they must have the same number of rows in each row of C.
+% Each column will be concatenated.
+%
+% Example 1:
+% C = num2cell(rand(2,2))
+%    [0.4565]    [0.8214]
+%    [0.0185]    [0.4447]
+% N = cell2num(C)
+%     0.4565    0.8214
+%     0.0185    0.4447
+%
+% Example 2:
+% C = cell(2, 3);
+% for i=1:2
+%   for j=1:3
+%     C{i,j} = rand(i, 1);
+%   end
+% end
+% C = 
+%     [    0.8998]    [    0.8216]    [    0.6449]
+%     [2x1 double]    [2x1 double]    [2x1 double]
+% C{2,1} = 
+%     0.8180
+%     0.6602
+% N=cell2num(C)
+%     0.8998    0.8216    0.6449
+%     0.8180    0.3420    0.3412
+%     0.6602    0.2897    0.5341
+
+
+%  error('use cell2mat in matlab 7')
+
+
+if isempty(C)
+  N = [];
+  return;
+end
+
+if any(cellfun('isempty', C)) %any(isemptycell(C))
+  error('can''t convert cell array with empty cells to matrix')
+end
+
+[nrows ncols] = size(C);
+%N = reshape(cat(1, C{:}), [nrows ncols]); % this only works if C only contains scalars
+r = 0;
+for i=1:nrows
+  r = r + size(C{i,1}, 1);
+end
+c = 0;
+for j=1:ncols
+  c = c + size(C{1,j}, 2);
+end
+N = reshape(cat(1, C{:}), [r c]);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/centeringMatrix.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+N = 3;
+x = rand(N,2); % each row is a feature vector 
+m = mean(x,1);
+xc = x-repmat(m, N, 1);
+
+C = eye(N) - (1/N)*ones(N,N);
+xc2 = C*x;
+assert(approxeq(xc, xc2))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/checkpsd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function s = checkpsd(s)
+
+if (any(isnan(s) | isinf(s) | ~isreal(s)))
+  warning('S contains complex numbers, Inf, or NaN'); 
+end
+% Drop any negative eigenvalues.
+[V, D] = eig(full(s));
+d = real(diag(D));
+if (any(d < 0))
+  warning(sprintf(['S is not positive semidefinite (min. eig. =' ...
+		   ' %0.5g); projecting.'], min(d)));
+  d(find(d < 0)) = 0;
+  D = diag(d);
+  s = V * D * V';
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/chi2inv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function x = chi2inv(p,v);
+%CHI2INV Inverse of the chi-square cumulative distribution function (cdf).
+%   X = CHI2INV(P,V)  returns the inverse of the chi-square cdf with V  
+%   degrees of freedom at the values in P. The chi-square cdf with V 
+%   degrees of freedom, is the gamma cdf with parameters V/2 and 2.   
+%
+%   The size of X is the common size of P and V. A scalar input
+%   functions as a constant matrix of the same size as the other input.   
+
+%   References:
+%      [1]  M. Abramowitz and I. A. Stegun, "Handbook of Mathematical
+%      Functions", Government Printing Office, 1964, 26.4.
+%      [2] E. Kreyszig, "Introductory Mathematical Statistics",
+%      John Wiley, 1970, section 10.2 (page 144)
+
+%   Copyright 1993-2002 The MathWorks, Inc. 
+%   $Revision: 1.1.1.1 $  $Date: 2005/04/26 02:30:30 $
+
+if nargin < 2, 
+    error('Requires two input arguments.');
+end
+
+[errorcode p v] = distchck(2,p,v);
+
+if errorcode > 0
+    error('Requires non-scalar arguments to match in size.');
+end
+
+% Call the gamma inverse function. 
+x = gaminv(p,v/2,2);
+
+% Return NaN if the degrees of freedom is not positive.
+k = (v <= 0);
+if any(k(:))
+    x(k) = NaN;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/choose.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function c = choose(n,k)
+% CHOOSE The number of ways of choosing k things from n 
+% c = choose(n,k)
+
+c = factorial(n)/(factorial(k) * factorial(n-k));      
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/collapse_mog.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [new_mu, new_Sigma, new_Sigma2] = collapse_mog(mu, Sigma, coefs)
+% COLLAPSE_MOG Collapse a mixture of Gaussians to a single Gaussian by moment matching
+% [new_mu, new_Sigma] = collapse_mog(mu, Sigma, coefs)
+%
+% coefs(i) - weight of i'th mixture component
+% mu(:,i), Sigma(:,:,i) - params of i'th mixture component
+
+% S = sum_c w_c (S_c + m_c m_c' + m m' - 2 m_c m') 
+%   = sum_c w_c (S_c + m_c m_c') + m m' - 2 (sum_c m_c) m'
+%   = sum_c w_c (S_c + m_c m_c') - m m'
+
+new_mu = sum(mu * diag(coefs), 2); % weighted sum of columns
+
+n = length(new_mu);
+new_Sigma = zeros(n,n);
+new_Sigma2 = zeros(n,n);
+for j=1:length(coefs)
+  m = mu(:,j) - new_mu;
+  new_Sigma = new_Sigma + coefs(j) * (Sigma(:,:,j) + m*m');
+  new_Sigma2 = new_Sigma2 + coefs(j) * (Sigma(:,:,j) + mu(:,j)*mu(:,j)');
+end
+%assert(approxeq(new_Sigma, new_Sigma2 - new_mu*new_mu'))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/colmult.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+#include <stdio.h>
+#include "mex.h"
+
+/*
+out = colop(M, v)
+
+Apply binary operator to a vector v and to each column of M in turn
+to produce a matrix the same size as M.
+
+This is equivalent to
+
+out = zeros(size(M));
+for col=1:size(M,2)
+  out(:,col) = op(M(:,col), v);
+end
+
+The code needs to be modified for each different operator 'op'.
+eg op = '.*'
+
+In vectorized form:
+
+out = M .* repmat(v(:), 1, size(M,2))
+
+(This function was formerly called repmat_and_mult.c)
+
+*/
+
+/* M(i,j) = M(i + nrows*j) since Matlab uses Fortran layout. */
+
+ 
+#define INMAT(i,j) M[(i)+nrows*(j)]
+#define OUTMAT(i,j) out[(i)+nrows*(j)]
+
+void mexFunction(
+                 int nlhs,       mxArray *plhs[],
+                 int nrhs, const mxArray *prhs[]
+		 )
+{
+  double *out, *M, *v;
+  int nrows, ncols, r, c;
+  
+  /* read the input args */
+  M = mxGetPr(prhs[0]);
+  nrows = mxGetM(prhs[0]);
+  ncols = mxGetN(prhs[0]);
+
+  v = mxGetPr(prhs[1]);
+
+  plhs[0] = mxCreateDoubleMatrix(nrows, ncols, mxREAL);
+  out = mxGetPr(plhs[0]); 
+
+  for (c=0; c < ncols; c++) {
+    for (r=0; r < nrows; r++) {
+      OUTMAT(r,c) = INMAT(r,c) * v[r]; 
+      /* printf("r=%d, c=%d, M=%f, v=%f\n", r, c, INMAT(r,c), v[r]);  */
+    }
+  }
+
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/computeROC.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+function [FPrate, TPrate, AUC, thresholds] = computeROC(confidence, testClass)
+% function [FPrate, TPrate, AUC, thresholds] = computeROC(confidence, testClass)
+%
+% computeROC computes the data for an ROC curve based on a classifier's confidence output.
+% It returns the false positive rate and the true positive rate along with
+% the area under the ROC curve, and the list of thresholds.
+%
+% Inputs: 
+%           - confidence(i) is proportional to the probability that
+%             testClass(i) is positive
+%
+% testClass = 0 => target absent
+% testClass = 1 => target present
+%
+% Based on algorithms 2 and 4 from Tom Fawcett's paper "ROC Graphs: Notes and
+% Practical Considerations for Data Mining Researchers" (2003)
+% http://www.hpl.hp.com/techreports/2003/HPL-2003-4.pdf"
+%
+% Vlad Magdin, 21 Feb 2005
+
+% break ties in scores
+S = rand('state');
+rand('state',0);
+confidence = confidence + rand(size(confidence))*10^(-10);
+rand('state',S)
+[thresholds order] = sort(confidence, 'descend');
+testClass = testClass(order);
+
+%%% -- calculate TP/FP rates and totals -- %%%
+AUC = 0;
+faCnt = 0;
+tpCnt = 0;
+falseAlarms = zeros(1,size(thresholds,2));
+detections = zeros(1,size(thresholds,2));
+fPrev = -inf;
+faPrev = 0;
+tpPrev = 0;
+
+P = max(size(find(testClass==1)));
+N = max(size(find(testClass==0)));
+
+for i=1:length(thresholds)
+    if thresholds(i) ~= fPrev
+        falseAlarms(i) = faCnt;
+        detections(i) = tpCnt;
+
+        AUC = AUC + polyarea([faPrev faPrev faCnt/N faCnt/N],[0 tpPrev tpCnt/P 0]);
+
+        fPrev = thresholds(i);
+        faPrev = faCnt/N;
+        tpPrev = tpCnt/P;
+    end
+    
+    if testClass(i) == 1
+        tpCnt = tpCnt + 1;
+    else
+        faCnt = faCnt + 1;
+    end
+end
+
+AUC = AUC + polyarea([faPrev faPrev 1 1],[0 tpPrev 1 0]);
+
+FPrate = falseAlarms/N;
+TPrate = detections/P;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/compute_counts.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function count = compute_counts(data, sz)
+% COMPUTE_COUNTS Count the number of times each combination of discrete assignments occurs
+% count = compute_counts(data, sz)
+%
+% data(i,t) is the value of variable i in case t
+% sz(i) : values for variable i are assumed to be in [1:sz(i)]
+%
+% Example: to compute a transition matrix for an HMM from a sequence of labeled states:
+% transmat = mk_stochastic(compute_counts([seq(1:end-1); seq(2:end)], [nstates nstates]));
+
+assert(length(sz) == size(data, 1));
+P = prod(sz);
+indices = subv2ind(sz, data'); % each row of data' is a case 
+%count = histc(indices, 1:P);
+count = hist(indices, 1:P);
+count = myreshape(count, sz);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/conf2mahal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+% CONF2MAHAL - Translates a confidence interval to a Mahalanobis
+%              distance.  Consider a multivariate Gaussian
+%              distribution of the form
+%
+%   p(x) = 1/sqrt((2 * pi)^d * det(C)) * exp((-1/2) * MD(x, m, inv(C)))
+%
+%              where MD(x, m, P) is the Mahalanobis distance from x
+%              to m under P:
+%
+%                 MD(x, m, P) = (x - m) * P * (x - m)'
+%
+%              A particular Mahalanobis distance k identifies an
+%              ellipsoid centered at the mean of the distribution.
+%              The confidence interval associated with this ellipsoid
+%              is the probability mass enclosed by it.  Similarly,
+%              a particular confidence interval uniquely determines
+%              an ellipsoid with a fixed Mahalanobis distance.
+%
+%              If X is an d dimensional Gaussian-distributed vector,
+%              then the Mahalanobis distance of X is distributed
+%              according to the Chi-squared distribution with d
+%              degrees of freedom.  Thus, the Mahalanobis distance is
+%              determined by evaluating the inverse cumulative
+%              distribution function of the chi squared distribution
+%              up to the confidence value.
+%
+% Usage:
+% 
+%   m = conf2mahal(c, d);
+%
+% Inputs:
+%
+%   c    - the confidence interval
+%   d    - the number of dimensions of the Gaussian distribution
+%
+% Outputs:
+%
+%   m    - the Mahalanobis radius of the ellipsoid enclosing the
+%          fraction c of the distribution's probability mass
+%
+% See also: MAHAL2CONF
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function m = conf2mahal(c, d)
+
+m = chi2inv(c, d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/cross_entropy.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function kl = cross_entropy(p, q, symmetric)
+% CROSS_ENTROPY Compute the Kullback-Leibler divergence between two discrete prob. distributions
+% kl = cross_entropy(p, q, symmetric)
+%
+% If symmetric = 1, we compute the symmetric version. Default: symmetric = 0;
+
+tiny = exp(-700);
+if nargin < 3, symmetric = 0; end
+p = p(:);
+q = q(:);
+if symmetric
+  kl  = (sum(p .* log((p+tiny)./(q+tiny))) + sum(q .* log((q+tiny)./(p+tiny))))/2;
+else
+  kl  = sum(p .* log((p+tiny)./(q+tiny)));
+end                                           
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/dirKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,98 @@
+function filenames = dirKPM(dirname, ext, varargin)
+% dirKPM Like the built-in dir command, but returns filenames as a cell array instead of a struct
+%
+% filenames = dirKPM(dirname)
+% returns all files, except '.' and '..'
+%
+% filenames = dirKPM('images', '*.jpg')
+% returns files with this extension
+%   eg filenames{1} = 'foo.jpg' etc
+%
+% OPTIONAL ARGUMENTS [default in brackets]
+% filenames = dirKPM('images', '', param1, val1, param2, val2, ...)
+%
+% 'fileType'='image' ['all'] means return files with extension .jpg, .png, .bmp
+%
+% 'prepend'=1 [0] means preprend folder name to filename
+%    eg filenames{1} = 'images/foo.jpg'
+%
+% 'doSort'=1 [1] means sort filenames in ascending alphanumerical order (where possible)
+%
+% 'doRecurse'=1 [0] recursive dir, apply the same dirKPM call on all
+% subfolders (decrease MAXDEPTH option to prevent recursion from branching
+% too explosively)
+
+if nargin < 1, dirname = '.'; end
+
+if nargin < 2, ext = ''; end
+
+[fileType, prepend, doSort, doRecurse, MAXDEPTH, DEPTH] = process_options(...
+	varargin, 'fileType', 'all', 'prepend', 0, 'doSort', 1, 'doRecurse', 0,...
+	'MAXDEPTH', 3, 'DEPTH', 0);
+
+tmp = dir(fullfile(dirname, ext));
+[filenames I] = setdiff({tmp.name}, {'.', '..'});
+tmp = tmp(I);
+
+if doRecurse && sum([tmp.isdir])>0 && DEPTH<MAXDEPTH
+	for fi=1:length(tmp)
+		subDirFilenames = {};
+
+		if tmp(fi).isdir
+			varargin = change_option( varargin, 'prepend', false );
+			varargin = change_option( varargin, 'doSort', false );
+			varargin = change_option( varargin, 'DEPTH', DEPTH+1 );
+			subDirFilenames = dirKPM( fullfile(dirname,tmp(fi).name), ext, varargin{:} );
+
+			for sdfi=1:length(subDirFilenames)
+				subDirFilenames{sdfi} = fullfile(tmp(fi).name, subDirFilenames{sdfi});
+			end
+		end
+
+
+		nfilenames = length(filenames);
+		if length(subDirFilenames)>0
+			filenames(nfilenames+1:nfilenames+length(subDirFilenames)) = subDirFilenames;
+		end
+	end
+end
+
+nfiles = length(filenames);
+if nfiles==0 return; end
+
+switch fileType
+	case 'image',
+		for fi=1:nfiles
+			good(fi) = isImage(filenames{fi});
+		end
+		filenames = filenames(find(good));
+	case 'all',
+		% no-op
+	otherwise
+		error(sprintf('unrecognized file type %s', fileType));
+end
+
+if doSort
+% 	% sort filenames alphanumerically (if possible)
+%  DJE, buggy, MUST save tmp.anr/snr/str or else we potentially lose
+%  filenames
+% 	tmp = asort(filenames, '-s', 'ascend');
+% 	if ~isempty(tmp.anr)
+% 		filenames = tmp.anr';
+% 	else
+% 		filenames = tmp.str';
+% 	end
+	% if names could not be sorted, return original order
+
+	filenames=sort(filenames);
+	
+end
+
+
+if prepend
+	nfiles = length(filenames);
+	for fi=1:nfiles
+		filenames{fi} = fullfile(dirname, filenames{fi});
+	end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/div.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function d = div(a,b)
+% DIV Integer division
+% d = div(a,b)
+
+d = floor(a / b);        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/draw_circle.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function h = draw_circle(x, r, outline_color, fill_color)
+% draw filled circles at centers x with radii r.
+% x is a matrix of columns.  r is a row vector.
+
+n = 40;					% resolution
+radians = [0:(2*pi)/(n-1):2*pi];
+unitC = [sin(radians); cos(radians)];
+
+% extend r if necessary
+if length(r) < cols(x)
+  r = [r repmat(r(length(r)), 1, cols(x)-length(r))];
+end
+
+h = [];
+% hold is needed for fill()
+held = ishold;
+hold on
+for i=1:cols(x)
+  y = unitC*r(i) + repmat(x(:, i), 1, n);
+  if nargin < 4
+    h = [h line(y(1,:), y(2,:), 'Color', outline_color)];
+  else
+    h = [h fill(y(1,:), y(2,:), fill_color, 'EdgeColor', outline_color)];
+  end
+end
+if ~held
+  hold off
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/draw_ellipse.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function h = draw_ellipse(x, c, outline_color, fill_color)
+% DRAW_ELLIPSE(x, c, outline_color, fill_color)
+%   Draws ellipses at centers x with covariance matrix c.
+%   x is a matrix of columns.  c is a positive definite matrix.
+%   outline_color and fill_color are optional.
+
+n = 40;					% resolution
+radians = [0:(2*pi)/(n-1):2*pi];
+unitC = [sin(radians); cos(radians)];
+r = chol(c)';
+
+if nargin < 3
+  outline_color = 'g';
+end
+
+h = [];
+for i=1:cols(x)
+  y = r*unitC + repmat(x(:, i), 1, n);
+  if nargin < 4
+    h = [h line(y(1,:), y(2,:), 'Color', outline_color)];
+  else
+    h = [h fill(y(1,:), y(2,:), fill_color, 'EdgeColor', outline_color)];
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/draw_ellipse_axes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function h = draw_ellipse_axes(x, c, linespec)
+% DRAW_ELLIPSE_AXES(x, c, linespec)
+%   Draws the major and minor axes of ellipses.
+%   Ellipses are centered at x with covariance matrix c.
+%   x is a matrix of columns.  c is a positive definite matrix.
+%   linespec is optional.
+
+[v,e] = eig(c);
+v = v*sqrt(e);
+
+h = [];
+for j = 1:cols(v)
+  x1 = repmat(x(1,:),2,1) + repmat([-1;1]*v(1,j),1,cols(x));
+  x2 = repmat(x(2,:),2,1) + repmat([-1;1]*v(2,j),1,cols(x));
+  h = [h line(x1,x2)];
+end
+if nargin > 2
+  set_linespec(h,linespec);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/em_converged.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function [converged, decrease] = em_converged(loglik, previous_loglik, threshold, check_increased)
+% EM_CONVERGED Has EM converged?
+% [converged, decrease] = em_converged(loglik, previous_loglik, threshold)
+%
+% We have converged if the slope of the log-likelihood function falls below 'threshold', 
+% i.e., |f(t) - f(t-1)| / avg < threshold,
+% where avg = (|f(t)| + |f(t-1)|)/2 and f(t) is log lik at iteration t.
+% 'threshold' defaults to 1e-4.
+%
+% This stopping criterion is from Numerical Recipes in C p423
+%
+% If we are doing MAP estimation (using priors), the likelihood can decrase,
+% even though the mode of the posterior is increasing.
+
+if nargin < 3, threshold = 1e-4; end
+if nargin < 4, check_increased = 1; end
+
+converged = 0;
+decrease = 0;
+
+if check_increased
+  if loglik - previous_loglik < -1e-3 % allow for a little imprecision
+    fprintf(1, '******likelihood decreased from %6.4f to %6.4f!\n', previous_loglik, loglik);
+    decrease = 1;
+converged = 0;
+return;
+  end
+end
+
+delta_loglik = abs(loglik - previous_loglik);
+avg_loglik = (abs(loglik) + abs(previous_loglik) + eps)/2;
+if (delta_loglik / avg_loglik) < threshold, converged = 1; end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/entropy.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function H = entropy(v, scale)
+% ENTROPY Entropy log base 2
+% H = entropy(v)
+% If v is a matrix, we compute the entropy of each column
+%
+% % H = entropy(v,1) means we scale the result so that it lies in [0,1]
+
+if nargin < 2, scale = 0; end
+
+v = v + (v==0);
+H = -1 * sum(v .* log2(v), 1); % sum the rows
+
+if scale
+  n = size(v, 1);
+  unif = normalise(ones(n,1));
+  H = H / entropy(unif);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/exportfig.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,991 @@
+function varargout = exportfig(varargin)
+%EXPORTFIG  Export a figure.
+%   EXPORTFIG(H, FILENAME) writes the figure H to FILENAME.  H is
+%   a figure handle and FILENAME is a string that specifies the
+%   name of the output file.
+%
+%   EXPORTFIG(H, FILENAME, OPTIONS) writes the figure H to FILENAME
+%   with options initially specified by the structure OPTIONS. The
+%   field names of OPTIONS must be legal parameters listed below
+%   and the field values must be legal values for the corresponding
+%   parameter. Default options can be set in releases prior to R12
+%   by storing the OPTIONS structure in the root object's appdata
+%   with the command 
+%      setappdata(0,'exportfigdefaults', OPTIONS) 
+%   and for releases after R12 by setting the preference with the
+%   command 
+%      setpref('exportfig', 'defaults', OPTIONS) 
+%
+%   EXPORTFIG(...,PARAM1,VAL1,PARAM2,VAL2,...) specifies
+%   parameters that control various characteristics of the output
+%   file. Any parameter value can be the string 'auto' which means
+%   the parameter uses the default factory behavior, overriding
+%   any other default for the parameter.
+%
+%   Format Paramter:
+%     'Format'  a string
+%          specifies the output format. Defaults to 'eps'. For a
+%          list of export formats type 'help print'.
+%     'Preview' one of the strings 'none', 'tiff'
+%          specifies a preview for EPS files. Defaults to 'none'.
+%
+%   Size Parameters:
+%     'Width'   a positive scalar
+%          specifies the width in the figure's PaperUnits
+%     'Height'  a positive scalar
+%          specifies the height in the figure's PaperUnits
+%     'Bounds' one of the strings 'tight', 'loose'
+%          specifies a tight or loose bounding box. Defaults to 'tight'.
+%     'Reference' an axes handle or a string
+%          specifies that the width and height parameters
+%          are relative to the given axes. If a string is
+%          specified then it must evaluate to an axes handle.
+%
+%     Specifying only one dimension sets the other dimension
+%     so that the exported aspect ratio is the same as the
+%     figure's or reference axes' current aspect ratio. 
+%     If neither dimension is specified the size defaults to 
+%     the width and height from the figure's or reference
+%     axes' size. Tight bounding boxes are only computed for
+%     2-D views and in that case the computed bounds enclose all
+%     text objects.
+%           
+%   Rendering Parameters:
+%     'Color'     one of the strings 'bw', 'gray', 'cmyk'
+%         'bw'    specifies that lines and text are exported in
+%                 black and all other objects in grayscale
+%         'gray'  specifies that all objects are exported in grayscale
+%         'rgb'   specifies that all objects are exported in color
+%                 using the RGB color space
+%         'cmyk'  specifies that all objects are exported in color
+%                 using the CMYK color space
+%     'Renderer'  one of 'painters', 'zbuffer', 'opengl'
+%         specifies the renderer to use
+%     'Resolution'   a positive scalar
+%         specifies the resolution in dots-per-inch.
+%     'LockAxes'  one of 0 or 1
+%         specifies that all axes limits and ticks should be fixed
+%         while exporting.
+%     
+%     The default color setting is 'bw'.
+%
+%   Font Parameters:
+%     'FontMode'     one of the strings 'scaled', 'fixed'
+%     'FontSize'     a positive scalar
+%          in 'scaled' mode multiplies with the font size of each
+%          text object to obtain the exported font size
+%          in 'fixed' mode specifies the font size of all text
+%          objects in points
+%     'DefaultFixedFontSize' a positive scalar
+%          in 'fixed' mode specified the default font size in
+%          points
+%     'FontSizeMin' a positive scalar
+%          specifies the minimum font size allowed after scaling
+%     'FontSizeMax' a positive scalar
+%          specifies the maximum font size allowed after scaling
+%     'FontEncoding' one of the strings 'latin1', 'adobe'
+%          specifies the character encoding of the font
+%     'SeparateText' one of 0 or 1
+%          specifies that the text objects are stored in separate
+%          file as EPS with the base filename having '_t' appended.
+%
+%     If FontMode is 'scaled' but FontSize is not specified then a
+%     scaling factor is computed from the ratio of the size of the
+%     exported figure to the size of the actual figure.
+%
+%     The default 'FontMode' setting is 'scaled'.
+%
+%   Line Width Parameters:
+%     'LineMode'     one of the strings 'scaled', 'fixed'
+%     'LineWidth'    a positive scalar
+%     'DefaultFixedLineWidth' a positive scalar
+%     'LineWidthMin' a positive scalar
+%          specifies the minimum line width allowed after scaling
+%     'LineWidthMax' a positive scalar
+%          specifies the maximum line width allowed after scaling
+%     The semantics of 'Line' parameters are exactly the
+%     same as the corresponding 'Font' parameters, except that
+%     they apply to line widths instead of font sizes.
+%
+%   Style Map Parameter:
+%     'LineStyleMap'    one of [], 'bw', or a function name or handle
+%          specifies how to map line colors to styles. An empty
+%          style map means styles are not changed. The style map
+%          'bw' is a built-in mapping that maps lines with the same
+%          color to the same style and otherwise cycles through the
+%          available styles. A user-specified map is a function
+%          that takes as input a cell array of line objects and
+%          outputs a cell array of line style strings. The default
+%          map is [].
+%      
+%   Examples:
+%     exportfig(gcf,'fig1.eps','height',3);
+%       Exports the current figure to the file named 'fig1.eps' with
+%       a height of 3 inches (assuming the figure's PaperUnits is 
+%       inches) and an aspect ratio the same as the figure's aspect
+%       ratio on screen.
+%
+%     opts = struct('FontMode','fixed','FontSize',10,'height',3);
+%     exportfig(gcf, 'fig2.eps', opts, 'height', 5);
+%       Exports the current figure to 'fig2.eps' with all
+%       text in 10 point fonts and with height 5 inches.
+%
+%   See also PREVIEWFIG, APPLYTOFIG, RESTOREFIG, PRINT.
+
+%  Copyright 2000 Ben Hinkle
+%  Email bug reports and comments to bhinkle@mathworks.com
+
+if (nargin < 2)
+  error('Too few input arguments');
+end
+
+% exportfig(H, filename, [options,] ...)
+H = varargin{1};
+if ~LocalIsHG(H,'figure')
+  error('First argument must be a handle to a figure.');
+end
+filename = varargin{2};
+if ~ischar(filename)
+  error('Second argument must be a string.');
+end
+paramPairs = {varargin{3:end}};
+if nargin > 2
+  if isstruct(paramPairs{1})
+    pcell = LocalToCell(paramPairs{1});
+    paramPairs = {pcell{:}, paramPairs{2:end}};
+  end
+end
+verstr = version;
+majorver = str2num(verstr(1));
+defaults = [];
+if majorver > 5
+  if ispref('exportfig','defaults')
+    defaults = getpref('exportfig','defaults');
+  end
+elseif exist('getappdata')
+  defaults = getappdata(0,'exportfigdefaults');
+end
+if ~isempty(defaults)
+  dcell = LocalToCell(defaults);
+  paramPairs = {dcell{:}, paramPairs{:}};
+end
+
+% Do some validity checking on param-value pairs
+if (rem(length(paramPairs),2) ~= 0)
+  error(['Invalid input syntax. Optional parameters and values' ...
+	 ' must be in pairs.']);
+end
+
+auto.format = 'eps';
+auto.preview = 'none';
+auto.width = -1;
+auto.height = -1;
+auto.color = 'bw';
+auto.defaultfontsize=10;
+auto.fontsize = -1;
+auto.fontmode='scaled';
+auto.fontmin = 8;
+auto.fontmax = 60;
+auto.defaultlinewidth = 1.0;
+auto.linewidth = -1;
+auto.linemode=[];
+auto.linemin = 0.5;
+auto.linemax = 100;
+auto.fontencoding = 'latin1';
+auto.renderer = [];
+auto.resolution = [];
+auto.stylemap = [];
+auto.applystyle = 0;
+auto.refobj = -1;
+auto.bounds = 'tight';
+explicitbounds = 0;
+auto.lockaxes = 1;
+auto.separatetext = 0;
+opts = auto;
+
+% Process param-value pairs
+args = {};
+for k = 1:2:length(paramPairs)
+  param = lower(paramPairs{k});
+  if ~ischar(param)
+    error('Optional parameter names must be strings');
+  end
+  value = paramPairs{k+1};
+  
+  switch (param)
+   case 'format'
+    opts.format = LocalCheckAuto(lower(value),auto.format);
+    if strcmp(opts.format,'preview')
+      error(['Format ''preview'' no longer supported. Use PREVIEWFIG' ...
+	     ' instead.']);
+    end
+   case 'preview'
+    opts.preview = LocalCheckAuto(lower(value),auto.preview);
+    if ~strcmp(opts.preview,{'none','tiff'})
+      error('Preview must be ''none'' or ''tiff''.');
+    end
+   case 'width'
+    opts.width = LocalToNum(value, auto.width);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if ~LocalIsPositiveScalar(opts.width)
+	error('Width must be a numeric scalar > 0');
+      end
+    end
+   case 'height'
+    opts.height = LocalToNum(value, auto.height);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if(~LocalIsPositiveScalar(opts.height))
+	error('Height must be a numeric scalar > 0');
+      end
+    end
+   case 'color'
+    opts.color = LocalCheckAuto(lower(value),auto.color);
+    if ~strcmp(opts.color,{'bw','gray','rgb','cmyk'})
+      error('Color must be ''bw'', ''gray'',''rgb'' or ''cmyk''.');
+    end
+   case 'fontmode'
+    opts.fontmode = LocalCheckAuto(lower(value),auto.fontmode);
+    if ~strcmp(opts.fontmode,{'scaled','fixed'})
+      error('FontMode must be ''scaled'' or ''fixed''.');
+    end
+   case 'fontsize'
+    opts.fontsize = LocalToNum(value,auto.fontsize);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if ~LocalIsPositiveScalar(opts.fontsize)
+	error('FontSize must be a numeric scalar > 0');
+      end
+    end
+   case 'defaultfixedfontsize'
+    opts.defaultfontsize = LocalToNum(value,auto.defaultfontsize);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if ~LocalIsPositiveScalar(opts.defaultfontsize)
+	error('DefaultFixedFontSize must be a numeric scalar > 0');
+      end
+    end
+   case 'fontsizemin'
+    opts.fontmin = LocalToNum(value,auto.fontmin);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if ~LocalIsPositiveScalar(opts.fontmin)
+	error('FontSizeMin must be a numeric scalar > 0');
+      end
+    end
+   case 'fontsizemax'
+    opts.fontmax = LocalToNum(value,auto.fontmax);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if ~LocalIsPositiveScalar(opts.fontmax)
+	error('FontSizeMax must be a numeric scalar > 0');
+      end
+    end
+   case 'fontencoding'
+    opts.fontencoding = LocalCheckAuto(lower(value),auto.fontencoding);
+    if ~strcmp(opts.fontencoding,{'latin1','adobe'})
+      error('FontEncoding must be ''latin1'' or ''adobe''.');
+    end
+   case 'linemode'
+    opts.linemode = LocalCheckAuto(lower(value),auto.linemode);
+    if ~strcmp(opts.linemode,{'scaled','fixed'})
+      error('LineMode must be ''scaled'' or ''fixed''.');
+    end
+   case 'linewidth'
+    opts.linewidth = LocalToNum(value,auto.linewidth);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if ~LocalIsPositiveScalar(opts.linewidth)
+	error('LineWidth must be a numeric scalar > 0');
+      end
+    end
+   case 'defaultfixedlinewidth'
+    opts.defaultlinewidth = LocalToNum(value,auto.defaultlinewidth);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if ~LocalIsPositiveScalar(opts.defaultlinewidth)
+	error(['DefaultFixedLineWidth must be a numeric scalar >' ...
+	       ' 0']);
+      end
+    end
+   case 'linewidthmin'
+    opts.linemin = LocalToNum(value,auto.linemin);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if ~LocalIsPositiveScalar(opts.linemin)
+	error('LineWidthMin must be a numeric scalar > 0');
+      end
+    end
+   case 'linewidthmax'
+    opts.linemax = LocalToNum(value,auto.linemax);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if ~LocalIsPositiveScalar(opts.linemax)
+	error('LineWidthMax must be a numeric scalar > 0');
+      end
+    end
+   case 'linestylemap'
+    opts.stylemap = LocalCheckAuto(value,auto.stylemap);
+   case 'renderer'
+    opts.renderer = LocalCheckAuto(lower(value),auto.renderer);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if ~strcmp(opts.renderer,{'painters','zbuffer','opengl'})
+	error(['Renderer must be ''painters'', ''zbuffer'' or' ...
+	       ' ''opengl''.']);
+      end
+    end
+   case 'resolution'
+    opts.resolution = LocalToNum(value,auto.resolution);
+    if ~ischar(value) | ~strcmp(value,'auto')
+      if ~(isnumeric(value) & (prod(size(value)) == 1) & (value >= 0));
+	error('Resolution must be a numeric scalar >= 0');
+      end
+    end
+   case 'applystyle' % means to apply the options and not export
+    opts.applystyle = 1;
+   case 'reference'
+    if ischar(value)
+      if strcmp(value,'auto')
+	opts.refobj = auto.refobj;
+      else
+	opts.refobj = eval(value);
+      end
+    else
+      opts.refobj = value;
+    end
+    if ~LocalIsHG(opts.refobj,'axes')
+      error('Reference object must evaluate to an axes handle.');
+    end
+   case 'bounds'
+    opts.bounds = LocalCheckAuto(lower(value),auto.bounds);
+    explicitbounds = 1;
+    if ~strcmp(opts.bounds,{'tight','loose'})
+      error('Bounds must be ''tight'' or ''loose''.');
+    end
+   case 'lockaxes'
+    opts.lockaxes = LocalToNum(value,auto.lockaxes);
+   case 'separatetext'
+    opts.separatetext = LocalToNum(value,auto.separatetext);
+   otherwise
+    error(['Unrecognized option ' param '.']);
+  end
+end
+
+% make sure figure is up-to-date
+drawnow;
+
+allLines  = findall(H, 'type', 'line');
+allText   = findall(H, 'type', 'text');
+allAxes   = findall(H, 'type', 'axes');
+allImages = findall(H, 'type', 'image');
+allLights = findall(H, 'type', 'light');
+allPatch  = findall(H, 'type', 'patch');
+allSurf   = findall(H, 'type', 'surface');
+allRect   = findall(H, 'type', 'rectangle');
+allFont   = [allText; allAxes];
+allColor  = [allLines; allText; allAxes; allLights];
+allMarker = [allLines; allPatch; allSurf];
+allEdge   = [allPatch; allSurf];
+allCData  = [allImages; allPatch; allSurf];
+
+old.objs = {};
+old.prop = {};
+old.values = {};
+
+% Process format
+if strncmp(opts.format,'eps',3) & ~strcmp(opts.preview,'none')
+  args = {args{:}, ['-' opts.preview]};
+end
+
+hadError = 0;
+oldwarn = warning;
+try
+
+  % lock axes limits, ticks and labels if requested
+  if opts.lockaxes
+    old = LocalManualAxesMode(old, allAxes, 'TickMode');
+    old = LocalManualAxesMode(old, allAxes, 'TickLabelMode');
+    old = LocalManualAxesMode(old, allAxes, 'LimMode');
+  end  
+
+  % Process size parameters
+  figurePaperUnits = get(H, 'PaperUnits');
+  oldFigureUnits = get(H, 'Units');
+  oldFigPos = get(H,'Position');
+  set(H, 'Units', figurePaperUnits);
+  figPos = get(H,'Position');
+  refsize = figPos(3:4);
+  if opts.refobj ~= -1
+    oldUnits = get(opts.refobj, 'Units');
+    set(opts.refobj, 'Units', figurePaperUnits);
+    r = get(opts.refobj, 'Position');
+    refsize = r(3:4);
+    set(opts.refobj, 'Units', oldUnits);
+  end
+  aspectRatio = refsize(1)/refsize(2);
+  if (opts.width == -1) & (opts.height == -1)
+    opts.width = refsize(1);
+    opts.height = refsize(2);
+  elseif (opts.width == -1)
+    opts.width = opts.height * aspectRatio;
+  elseif (opts.height == -1)
+    opts.height = opts.width / aspectRatio;
+  end
+  wscale = opts.width/refsize(1);
+  hscale = opts.height/refsize(2);
+  sizescale = min(wscale,hscale);
+  old = LocalPushOldData(old,H,'PaperPositionMode', ...
+			 get(H,'PaperPositionMode'));
+  set(H, 'PaperPositionMode', 'auto');
+  newPos = [figPos(1) figPos(2)+figPos(4)*(1-hscale) ...
+	    wscale*figPos(3) hscale*figPos(4)];
+  set(H, 'Position', newPos);
+  set(H, 'Units', oldFigureUnits);
+  
+  % process line-style map
+  if ~isempty(opts.stylemap) & ~isempty(allLines)
+    oldlstyle = LocalGetAsCell(allLines,'LineStyle');
+    old = LocalPushOldData(old, allLines, {'LineStyle'}, ...
+			   oldlstyle);
+    newlstyle = oldlstyle;
+    if ischar(opts.stylemap) & strcmpi(opts.stylemap,'bw')
+      newlstyle = LocalMapColorToStyle(allLines);
+    else
+      try
+	newlstyle = feval(opts.stylemap,allLines);
+      catch
+	warning(['Skipping stylemap. ' lasterr]);
+      end
+    end
+    set(allLines,{'LineStyle'},newlstyle);
+  end
+
+  % Process rendering parameters
+  switch (opts.color)
+   case {'bw', 'gray'}
+    if ~strcmp(opts.color,'bw') & strncmp(opts.format,'eps',3)
+      opts.format = [opts.format 'c'];
+    end
+    args = {args{:}, ['-d' opts.format]};
+    
+    %compute and set gray colormap
+    oldcmap = get(H,'Colormap');
+    newgrays = 0.30*oldcmap(:,1) + 0.59*oldcmap(:,2) + 0.11*oldcmap(:,3);
+    newcmap = [newgrays newgrays newgrays];
+    old = LocalPushOldData(old, H, 'Colormap', oldcmap);
+    set(H, 'Colormap', newcmap);
+
+    %compute and set ColorSpec and CData properties
+    old = LocalUpdateColors(allColor, 'color', old);
+    old = LocalUpdateColors(allAxes, 'xcolor', old);
+    old = LocalUpdateColors(allAxes, 'ycolor', old);
+    old = LocalUpdateColors(allAxes, 'zcolor', old);
+    old = LocalUpdateColors(allMarker, 'MarkerEdgeColor', old);
+    old = LocalUpdateColors(allMarker, 'MarkerFaceColor', old);
+    old = LocalUpdateColors(allEdge, 'EdgeColor', old);
+    old = LocalUpdateColors(allEdge, 'FaceColor', old);
+    old = LocalUpdateColors(allCData, 'CData', old);
+    
+   case {'rgb','cmyk'}
+    if strncmp(opts.format,'eps',3)
+      opts.format = [opts.format 'c'];
+      args = {args{:}, ['-d' opts.format]};
+      if strcmp(opts.color,'cmyk')
+	args = {args{:}, '-cmyk'};
+      end
+    else
+      args = {args{:}, ['-d' opts.format]};
+    end
+   otherwise
+    error('Invalid Color parameter');
+  end
+  if (~isempty(opts.renderer))
+    args = {args{:}, ['-' opts.renderer]};
+  end
+  if (~isempty(opts.resolution)) | ~strncmp(opts.format,'eps',3)
+    if isempty(opts.resolution)
+      opts.resolution = 0;
+    end
+    args = {args{:}, ['-r' int2str(opts.resolution)]};
+  end
+
+  % Process font parameters
+  if ~isempty(opts.fontmode)
+    oldfonts = LocalGetAsCell(allFont,'FontSize');
+    oldfontunits = LocalGetAsCell(allFont,'FontUnits');
+    set(allFont,'FontUnits','points');
+    switch (opts.fontmode)
+     case 'fixed'
+      if (opts.fontsize == -1)
+	set(allFont,'FontSize',opts.defaultfontsize);
+      else
+	set(allFont,'FontSize',opts.fontsize);
+      end
+     case 'scaled'
+      if (opts.fontsize == -1)
+	scale = sizescale;
+      else
+	scale = opts.fontsize;
+      end
+      newfonts = LocalScale(oldfonts,scale,opts.fontmin,opts.fontmax);
+      set(allFont,{'FontSize'},newfonts);
+     otherwise
+      error('Invalid FontMode parameter');
+    end
+    old = LocalPushOldData(old, allFont, {'FontSize'}, oldfonts);
+    old = LocalPushOldData(old, allFont, {'FontUnits'}, oldfontunits);
+  end
+  if strcmp(opts.fontencoding,'adobe') & strncmp(opts.format,'eps',3)
+    args = {args{:}, '-adobecset'};
+  end
+
+  % Process line parameters
+  if ~isempty(opts.linemode)
+    oldlines = LocalGetAsCell(allMarker,'LineWidth');
+    old = LocalPushOldData(old, allMarker, {'LineWidth'}, oldlines);
+    switch (opts.linemode)
+     case 'fixed'
+      if (opts.linewidth == -1)
+	set(allMarker,'LineWidth',opts.defaultlinewidth);
+      else
+	set(allMarker,'LineWidth',opts.linewidth);
+      end
+     case 'scaled'
+      if (opts.linewidth == -1)
+	scale = sizescale;
+      else
+	scale = opts.linewidth;
+      end
+      newlines = LocalScale(oldlines, scale, opts.linemin, opts.linemax);
+      set(allMarker,{'LineWidth'},newlines);
+    end
+  end
+
+  % adjust figure bounds to surround axes
+  if strcmp(opts.bounds,'tight')
+    if (~strncmp(opts.format,'eps',3) & LocalHas3DPlot(allAxes)) | ...
+	  (strncmp(opts.format,'eps',3) & opts.separatetext)
+      if (explicitbounds == 1)
+	warning(['Cannot compute ''tight'' bounds. Using ''loose''' ...
+		 ' bounds.']);
+      end
+      opts.bounds = 'loose';
+    end
+  end
+  warning('off');
+  if ~isempty(allAxes)
+    if strncmp(opts.format,'eps',3)
+      if strcmp(opts.bounds,'loose')
+	args = {args{:}, '-loose'};
+      end
+      old = LocalPushOldData(old,H,'Position', oldFigPos);
+    elseif strcmp(opts.bounds,'tight')
+      oldaunits = LocalGetAsCell(allAxes,'Units');
+      oldapos = LocalGetAsCell(allAxes,'Position');
+      oldtunits = LocalGetAsCell(allText,'units');
+      oldtpos = LocalGetAsCell(allText,'Position');
+      set(allAxes,'units','points');
+      apos = LocalGetAsCell(allAxes,'Position');
+      oldunits = get(H,'Units');
+      set(H,'units','points');
+      origfr = get(H,'position');
+      fr = [];
+      for k=1:length(allAxes)
+	if ~strcmpi(get(allAxes(k),'Tag'),'legend')
+	  axesR = apos{k};
+	  r = LocalAxesTightBoundingBox(axesR, allAxes(k));
+	  r(1:2) = r(1:2) + axesR(1:2);
+	  fr = LocalUnionRect(fr,r);
+	end
+      end
+      if isempty(fr)
+	fr = [0 0 origfr(3:4)];
+      end
+      for k=1:length(allAxes)
+	ax = allAxes(k);
+	r = apos{k};
+	r(1:2) = r(1:2) - fr(1:2);
+	set(ax,'Position',r);
+      end
+      old = LocalPushOldData(old, allAxes, {'Position'}, oldapos);
+      old = LocalPushOldData(old, allText, {'Position'}, oldtpos);
+      old = LocalPushOldData(old, allText, {'Units'}, oldtunits);
+      old = LocalPushOldData(old, allAxes, {'Units'}, oldaunits);
+      old = LocalPushOldData(old, H, 'Position', oldFigPos);
+      old = LocalPushOldData(old, H, 'Units', oldFigureUnits);
+      r = [origfr(1) origfr(2)+origfr(4)-fr(4) fr(3:4)];
+      set(H,'Position',r);
+    else
+      args = {args{:}, '-loose'};
+      old = LocalPushOldData(old,H,'Position', oldFigPos);
+    end
+  end
+  
+  % Process text in a separate file if needed
+  if opts.separatetext & ~opts.applystyle
+    % First hide all text and export
+    oldtvis = LocalGetAsCell(allText,'visible');
+    set(allText,'visible','off');
+    oldax = LocalGetAsCell(allAxes,'XTickLabel',1);
+    olday = LocalGetAsCell(allAxes,'YTickLabel',1);
+    oldaz = LocalGetAsCell(allAxes,'ZTickLabel',1);
+    null = cell(length(oldax),1);
+    [null{:}] = deal([]);
+    set(allAxes,{'XTickLabel'},null);
+    set(allAxes,{'YTickLabel'},null);
+    set(allAxes,{'ZTickLabel'},null);
+    print(H, filename, args{:});
+    set(allText,{'Visible'},oldtvis);
+    set(allAxes,{'XTickLabel'},oldax);
+    set(allAxes,{'YTickLabel'},olday);
+    set(allAxes,{'ZTickLabel'},oldaz);
+    % Now hide all non-text and export as eps in painters
+    [path, name, ext] = fileparts(filename);
+    tfile = fullfile(path,[name '_t.eps']);
+    tfile2 = fullfile(path,[name '_t2.eps']);
+    foundRenderer = 0;
+    for k=1:length(args)
+      if strncmp('-d',args{k},2)
+	args{k} = '-deps';
+      elseif strncmp('-zbuffer',args{k},8) | ...
+	    strncmp('-opengl', args{k},6)
+	args{k} = '-painters';
+	foundRenderer = 1;
+      end
+    end
+    if ~foundRenderer
+      args = {args{:}, '-painters'};
+    end
+    allNonText = [allLines; allLights; allPatch; ...
+		  allImages; allSurf; allRect];
+    oldvis = LocalGetAsCell(allNonText,'visible');
+    oldc = LocalGetAsCell(allAxes,'color');
+    oldaxg = LocalGetAsCell(allAxes,'XGrid');
+    oldayg = LocalGetAsCell(allAxes,'YGrid');
+    oldazg = LocalGetAsCell(allAxes,'ZGrid');
+    [null{:}] = deal('off');
+    set(allAxes,{'XGrid'},null);
+    set(allAxes,{'YGrid'},null);
+    set(allAxes,{'ZGrid'},null);
+    set(allNonText,'Visible','off');
+    set(allAxes,'Color','none');
+    print(H, tfile2, args{:});
+    set(allNonText,{'Visible'},oldvis);
+    set(allAxes,{'Color'},oldc);
+    set(allAxes,{'XGrid'},oldaxg);
+    set(allAxes,{'YGrid'},oldayg);
+    set(allAxes,{'ZGrid'},oldazg);
+    %hack up the postscript file
+    fid1 = fopen(tfile,'w');
+    fid2 = fopen(tfile2,'r');
+    line = fgetl(fid2);
+    while ischar(line)
+      if strncmp(line,'%%Title',7)
+	fprintf(fid1,'%s\n',['%%Title: ', tfile]);
+      elseif (length(line) < 3) 
+	fprintf(fid1,'%s\n',line);
+      elseif ~strcmp(line(end-2:end),' PR') & ...
+	    ~strcmp(line(end-1:end),' L')
+	fprintf(fid1,'%s\n',line);
+      end
+      line = fgetl(fid2);
+    end
+    fclose(fid1);
+    fclose(fid2);
+    delete(tfile2);
+    
+  elseif ~opts.applystyle
+    drawnow;
+    print(H, filename, args{:});
+  end
+  warning(oldwarn);
+  
+catch
+  warning(oldwarn);
+  hadError = 1;
+end
+
+% Restore figure settings
+if opts.applystyle
+  varargout{1} = old;
+else
+  for n=1:length(old.objs)
+    if ~iscell(old.values{n}) & iscell(old.prop{n})
+      old.values{n} = {old.values{n}};
+    end
+    set(old.objs{n}, old.prop{n}, old.values{n});
+  end
+end
+
+if hadError
+  error(deblank(lasterr));
+end
+
+%
+%  Local Functions
+%
+
+function outData = LocalPushOldData(inData, objs, prop, values)
+outData.objs = {objs, inData.objs{:}};
+outData.prop = {prop, inData.prop{:}};
+outData.values = {values, inData.values{:}};
+
+function cellArray = LocalGetAsCell(fig,prop,allowemptycell);
+cellArray = get(fig,prop);
+if nargin < 3
+  allowemptycell = 0;
+end
+if ~iscell(cellArray) & (allowemptycell | ~isempty(cellArray))
+  cellArray = {cellArray};
+end
+
+function newArray = LocalScale(inArray, scale, minv, maxv)
+n = length(inArray);
+newArray = cell(n,1);
+for k=1:n
+  newArray{k} = min(maxv,max(minv,scale*inArray{k}(1)));
+end
+
+function gray = LocalMapToGray1(color)
+gray = color;
+if ischar(color)
+  switch color(1)
+   case 'y'
+    color = [1 1 0];
+   case 'm'
+    color = [1 0 1];
+   case 'c'
+    color = [0 1 1];
+   case 'r'
+    color = [1 0 0];
+   case 'g'
+    color = [0 1 0];
+   case 'b'
+    color = [0 0 1];
+   case 'w'
+    color = [1 1 1];
+   case 'k'
+    color = [0 0 0];
+  end
+end
+if ~ischar(color)
+  gray = 0.30*color(1) + 0.59*color(2) + 0.11*color(3);
+end
+
+function newArray = LocalMapToGray(inArray);
+n = length(inArray);
+newArray = cell(n,1);
+for k=1:n
+  color = inArray{k};
+  if ~isempty(color)
+    color = LocalMapToGray1(color);
+  end
+  if isempty(color) | ischar(color)
+    newArray{k} = color;
+  else
+    newArray{k} = [color color color];
+  end
+end
+
+function newArray = LocalMapColorToStyle(inArray);
+inArray = LocalGetAsCell(inArray,'Color');
+n = length(inArray);
+newArray = cell(n,1);
+styles = {'-','--',':','-.'};
+uniques = [];
+nstyles = length(styles);
+for k=1:n
+  gray = LocalMapToGray1(inArray{k});
+  if isempty(gray) | ischar(gray) | gray < .05
+    newArray{k} = '-';
+  else
+    if ~isempty(uniques) & any(gray == uniques)
+      ind = find(gray==uniques);
+    else
+      uniques = [uniques gray];
+      ind = length(uniques);
+    end
+    newArray{k} = styles{mod(ind-1,nstyles)+1};
+  end
+end
+
+function newArray = LocalMapCData(inArray);
+n = length(inArray);
+newArray = cell(n,1);
+for k=1:n
+  color = inArray{k};
+  if (ndims(color) == 3) & isa(color,'double')
+    gray = 0.30*color(:,:,1) + 0.59*color(:,:,2) + 0.11*color(:,:,3);
+    color(:,:,1) = gray;
+    color(:,:,2) = gray;
+    color(:,:,3) = gray;
+  end
+  newArray{k} = color;
+end
+
+function outData = LocalUpdateColors(inArray, prop, inData)
+value = LocalGetAsCell(inArray,prop);
+outData.objs = {inData.objs{:}, inArray};
+outData.prop = {inData.prop{:}, {prop}};
+outData.values = {inData.values{:}, value};
+if (~isempty(value))
+  if strcmp(prop,'CData') 
+    value = LocalMapCData(value);
+  else
+    value = LocalMapToGray(value);
+  end
+  set(inArray,{prop},value);
+end
+
+function bool = LocalIsPositiveScalar(value)
+bool = isnumeric(value) & ...
+       prod(size(value)) == 1 & ...
+       value > 0;
+
+function value = LocalToNum(value,auto)
+if ischar(value)
+  if strcmp(value,'auto')
+    value = auto;
+  else
+    value = str2num(value);
+  end
+end
+
+%convert a struct to {field1,val1,field2,val2,...}
+function c = LocalToCell(s)
+f = fieldnames(s);
+v = struct2cell(s);
+opts = cell(2,length(f));
+opts(1,:) = f;
+opts(2,:) = v;
+c = {opts{:}};
+
+function c = LocalIsHG(obj,hgtype)
+c = 0;
+if (length(obj) == 1) & ishandle(obj) 
+  c = strcmp(get(obj,'type'),hgtype);
+end
+
+function c = LocalHas3DPlot(a)
+zticks = LocalGetAsCell(a,'ZTickLabel');
+c = 0;
+for k=1:length(zticks)
+  if ~isempty(zticks{k})
+    c = 1;
+    return;
+  end
+end
+
+function r = LocalUnionRect(r1,r2)
+if isempty(r1)
+  r = r2;
+elseif isempty(r2)
+  r = r1;
+elseif max(r2(3:4)) > 0
+  left = min(r1(1),r2(1));
+  bot = min(r1(2),r2(2));
+  right = max(r1(1)+r1(3),r2(1)+r2(3));
+  top = max(r1(2)+r1(4),r2(2)+r2(4));
+  r = [left bot right-left top-bot];
+else
+  r = r1;
+end
+
+function c = LocalLabelsMatchTicks(labs,ticks)
+c = 0;
+try
+  t1 = num2str(ticks(1));
+  n = length(ticks);
+  tend = num2str(ticks(n));
+  c = strncmp(labs(1),t1,length(labs(1))) & ...
+      strncmp(labs(n),tend,length(labs(n)));
+end
+
+function r = LocalAxesTightBoundingBox(axesR, a)
+r = [];
+atext = findall(a,'type','text','visible','on');
+if ~isempty(atext)
+  set(atext,'units','points');
+  res=LocalGetAsCell(atext,'extent');
+  for n=1:length(atext)
+    r = LocalUnionRect(r,res{n});
+  end
+end
+if strcmp(get(a,'visible'),'on')
+  r = LocalUnionRect(r,[0 0 axesR(3:4)]);
+  oldunits = get(a,'fontunits');
+  set(a,'fontunits','points');
+  label = text(0,0,'','parent',a,...
+	       'units','points',...
+	       'fontsize',get(a,'fontsize'),...
+	       'fontname',get(a,'fontname'),...
+	       'fontweight',get(a,'fontweight'),...
+	       'fontangle',get(a,'fontangle'),...
+	       'visible','off');
+  fs = get(a,'fontsize');
+
+  % handle y axis tick labels
+  ry = [0 -fs/2 0 axesR(4)+fs];
+  ylabs = get(a,'yticklabels');
+  yticks = get(a,'ytick');
+  maxw = 0;
+  if ~isempty(ylabs)
+    for n=1:size(ylabs,1)
+      set(label,'string',ylabs(n,:));
+      ext = get(label,'extent');
+      maxw = max(maxw,ext(3));
+    end
+    if ~LocalLabelsMatchTicks(ylabs,yticks) & ...
+	  strcmp(get(a,'xaxislocation'),'bottom')
+      ry(4) = ry(4) + 1.5*ext(4);
+    end
+    if strcmp(get(a,'yaxislocation'),'left')
+      ry(1) = -(maxw+5);
+    else
+      ry(1) = axesR(3);
+    end
+    ry(3) = maxw+5;
+    r = LocalUnionRect(r,ry);
+  end
+
+  % handle x axis tick labels
+  rx = [0 0 0 fs+5];
+  xlabs = get(a,'xticklabels');
+  xticks = get(a,'xtick');
+  if ~isempty(xlabs)
+    if strcmp(get(a,'xaxislocation'),'bottom')
+      rx(2) = -(fs+5);
+      if ~LocalLabelsMatchTicks(xlabs,xticks);
+	rx(4) = rx(4) + 2*fs;
+	rx(2) = rx(2) - 2*fs;
+      end
+    else
+      rx(2) = axesR(4);
+      % exponent is still below axes
+      if ~LocalLabelsMatchTicks(xlabs,xticks);
+	rx(4) = rx(4) + axesR(4) + 2*fs;
+	rx(2) = -2*fs;
+      end
+    end
+    set(label,'string',xlabs(1,:));
+    ext1 = get(label,'extent');
+    rx(1) = -ext1(3)/2;
+    set(label,'string',xlabs(size(xlabs,1),:));
+    ext2 = get(label,'extent');
+    rx(3) = axesR(3) + (ext2(3) + ext1(3))/2;
+    r = LocalUnionRect(r,rx);
+  end
+  set(a,'fontunits',oldunits);
+  delete(label);
+end
+
+function c = LocalManualAxesMode(old, allAxes, base)
+xs = ['X' base];
+ys = ['Y' base];
+zs = ['Z' base];
+oldXMode = LocalGetAsCell(allAxes,xs);
+oldYMode = LocalGetAsCell(allAxes,ys);
+oldZMode = LocalGetAsCell(allAxes,zs);
+old = LocalPushOldData(old, allAxes, {xs}, oldXMode);
+old = LocalPushOldData(old, allAxes, {ys}, oldYMode);
+old = LocalPushOldData(old, allAxes, {zs}, oldZMode);
+set(allAxes,xs,'manual');
+set(allAxes,ys,'manual');
+set(allAxes,zs,'manual');
+c = old;
+
+function val = LocalCheckAuto(val, auto)
+if ischar(val) & strcmp(val,'auto')
+  val = auto;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/extend_domain_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function B = extend_domain_table(A, smalldom, smallsz, bigdom, bigsz)
+% EXTEND_DOMAIN_TABLE Expand an array so it has the desired size.
+% B = extend_domain_table(A, smalldom, smallsz, bigdom, bigsz)
+%
+% A is the array with domain smalldom and sizes smallsz.
+% bigdom is the desired domain, with sizes bigsz.
+%
+% Example:
+% smalldom = [1 3], smallsz = [2 4], bigdom = [1 2 3 4], bigsz = [2 1 4 5],
+% so B(i,j,k,l) = A(i,k) for i in 1:2, j in 1:1, k in 1:4, l in 1:5
+
+if isequal(size(A), [1 1]) % a scalar
+  B = A; % * myones(bigsz);
+  return;
+end
+
+map = find_equiv_posns(smalldom, bigdom);
+sz = ones(1, length(bigdom));
+sz(map) = smallsz;
+B = myreshape(A, sz); % add dimensions for the stuff not in A
+sz = bigsz;
+sz(map) = 1; % don't replicate along A's dimensions
+B = myrepmat(B, sz(:)');
+                           
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/factorial.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function x = factorial(n)
+% FACTORIAL Compute n!
+% x = factorial(n)
+
+if n == 0
+  x = 1;
+else
+  x = n*factorial(n-1);
+end    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/filepartsLast.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function [last] = filepartsLast(fname)
+% filepartsLast Return the last part of a filename (strip off directory and suffix)
+% function filepartsLast(fname)
+%
+% Examples
+% filepartsLast('C:/foo/bar') = 'bar'
+% filepartsLast('C:/foo/bar.mat') = 'bar'
+% filepartsLast('C:/foo/bar.mat.gz') = 'bar.mat'
+% filepartsLast('bar.mat') = 'bar'
+
+[pathstr,name,ext,versn] = fileparts(fname);
+last = name;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/find_equiv_posns.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function p = find_equiv_posns(vsmall, vlarge)
+% FIND_EQUIV_POSNS p[i] = the place where vsmall[i] occurs in vlarge.
+% p = find_equiv_posns(vsmall, vlarge)
+% THE VECTORS ARE ASSUMED TO BE SORTED.
+%
+% e.g., vsmall=[2,8], vlarge=[2,7,8,4], p=[1,3]
+%
+% In R/S, this function is called 'match'
+ 
+%if ~mysubset(vsmall, vlarge)
+%  error('small domain must occur in large domain');
+%end
+
+if isempty(vsmall) | isempty(vlarge)
+  p = [];
+  return;
+end
+  
+bitvec = sparse(1, max(vlarge)); 
+%bitvec = zeros(1, max(vlarge));
+bitvec(vsmall) = 1;
+p = find(bitvec(vlarge));
+
+%p = find(ismember(vlarge, vsmall)); % slower
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/fullfileKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function f = fullfileKPM(varargin)
+% fullfileKPM Concatenate strings with file separator, then convert it to a/b/c
+% function f = fullfileKPM(varargin)
+
+f = fullfile(varargin{:});
+f = strrep(f, '\', '/');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/genpathKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function p = genpathKPM(d)
+% genpathKPM Like built-in genpath, but omits directories whose name is 'Old', 'old' or 'CVS'
+% function p = genpathKPM(d)
+
+if nargin==0,
+  p = genpath(fullfile(matlabroot,'toolbox'));
+  if length(p) > 1, p(end) = []; end % Remove trailing pathsep
+  return
+end
+
+% initialise variables
+methodsep = '@';  % qualifier for overloaded method directories
+p = '';           % path to be returned
+
+% Generate path based on given root directory
+files = dir(d);
+if isempty(files)
+  return
+end
+
+% Add d to the path even if it is empty.
+p = [p d pathsep];
+
+% set logical vector for subdirectory entries in d
+isdir = logical(cat(1,files.isdir));
+%
+% Recursively descend through directories which are neither
+% private nor "class" directories.
+%
+dirs = files(isdir); % select only directory entries from the current listing
+
+for i=1:length(dirs)
+   dirname = dirs(i).name;
+   if    ~strcmp( dirname,'.')         & ...
+         ~strcmp( dirname,'..')        & ...
+         ~strncmp( dirname,methodsep,1)& ...
+         ~strcmp( dirname,'private') & ...
+	 ~strcmp( dirname, 'old') & ...      % KPM
+	 ~strcmp( dirname, 'Old') & ... % KPM
+     	 ~strcmp( dirname, 'CVS')            % KPM
+      p = [p genpathKPM(fullfile(d,dirname))]; % recursive calling of this function.
+   end
+end
+
+%------------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/hash_add.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function hash_add(key, val, fname)
+% HASH_ADD Append key,value pair to end of hashtable stored in a file
+% function hash_add(key, val, filename)
+%
+% See hash_lookup for an example
+
+if ~exist(fname, 'file')
+  % new hashtable
+  hashtable.key{1} = key;
+  hashtable.value{1} = val;
+else
+  %hashtable = importdata(fname);
+  %hashtable = load(fname, '-mat');
+  load(fname, '-mat');
+  Nentries = length(hashtable.key);
+  hashtable.key{Nentries+1} = key;
+  hashtable.value{Nentries+1} = val;
+end
+save(fname, 'hashtable', '-mat');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/hash_del.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function ndx = hash_del(key, fname)
+% HASH_DEL Remove all entries that match key  from hashtable stored in a file
+% ndx = hash_del(key, fname)
+%
+% Returns indices of matching entries (if any)
+% See hash_lookup for an example
+
+ndx = [];
+
+if ~exist(fname, 'file')
+  % new hashtable - no op
+else
+  %hashtable = importdata(fname);
+  %hashtable = load(fname, '-mat');
+  load(fname, '-mat');
+  Nentries = length(hashtable.key);
+  for i=1:Nentries
+    if isequal(hashtable.key{i}, key)
+      ndx = [ndx i];
+    end
+  end
+  hashtable.key(ndx) = [];
+  hashtable.value(ndx) = [];
+  save(fname, 'hashtable', '-mat');
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/hash_lookup.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function [val, found, Nentries] = hash_lookup(key, fname)
+% HASH_LOOKUP Lookup a key in a hash table stored in a file using linear search
+% function [val, found, Nentries] = hash_lookup(key, filename)
+%
+% Example:
+% If htbl.mat does not exist,
+%   [val,found,N] = hash_lookup('foo', 'htbl')
+% returns found val = [], found = 0, N = 0
+%   hash_add('foo', 42, 'htbl')
+%   hash_add('bar', [1:10], 'htbl')
+%   [val,found,N] = hash_lookup('foo', 'htbl')
+% now returns val = 42, found = 1, N = 2
+%
+% Type 'delete htbl' to delete the file/ reset the hashtable
+
+
+val = [];
+found = 0;
+
+if exist(fname, 'file')==0
+  % new hashtable
+  Nentries = 0;
+else
+  %hashtable = importdata(fname);
+  load(fname);
+  Nentries = length(hashtable.key);
+  for i=1:Nentries
+    if isequal(hashtable.key{i}, key)
+      val = hashtable.value{i};
+      found = 1;
+      break;
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/hsvKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function colors = hsvKPM(N)
+% hsvKPM Like built-in HSV, except it randomizes the order, so that adjacent colors are dis-similar
+% function colors = hsvKPM(N)
+
+colors = hsv(N);
+perm = randperm(N);
+colors = colors(perm,:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/hungarian.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,464 @@
+function [C,T]=hungarian(A)
+%HUNGARIAN Solve the Assignment problem using the Hungarian method.
+%
+%[C,T]=hungarian(A)
+%A - a square cost matrix.
+%C - the optimal assignment.
+%T - the cost of the optimal assignment.
+
+% Adapted from the FORTRAN IV code in Carpaneto and Toth, "Algorithm 548:
+% Solution of the assignment problem [H]", ACM Transactions on
+% Mathematical Software, 6(1):104-111, 1980.
+
+% v1.0  96-06-14. Niclas Borlin, niclas@cs.umu.se.
+%                 Department of Computing Science, Umeå University,
+%                 Sweden. 
+%                 All standard disclaimers apply.
+
+% A substantial effort was put into this code. If you use it for a
+% publication or otherwise, please include an acknowledgement or at least
+% notify me by email. /Niclas
+
+[m,n]=size(A);
+
+if (m~=n)
+    error('HUNGARIAN: Cost matrix must be square!');
+end
+
+% Save original cost matrix.
+orig=A;
+
+% Reduce matrix.
+A=hminired(A);
+
+% Do an initial assignment.
+[A,C,U]=hminiass(A);
+
+% Repeat while we have unassigned rows.
+while (U(n+1))
+    % Start with no path, no unchecked zeros, and no unexplored rows.
+    LR=zeros(1,n);
+    LC=zeros(1,n);
+    CH=zeros(1,n);
+    RH=[zeros(1,n) -1];
+    
+    % No labelled columns.
+    SLC=[];
+    
+    % Start path in first unassigned row.
+    r=U(n+1);
+    % Mark row with end-of-path label.
+    LR(r)=-1;
+    % Insert row first in labelled row set.
+    SLR=r;
+    
+    % Repeat until we manage to find an assignable zero.
+    while (1)
+        % If there are free zeros in row r
+        if (A(r,n+1)~=0)
+            % ...get column of first free zero.
+            l=-A(r,n+1);
+            
+            % If there are more free zeros in row r and row r in not
+            % yet marked as unexplored..
+            if (A(r,l)~=0 & RH(r)==0)
+                % Insert row r first in unexplored list.
+                RH(r)=RH(n+1);
+                RH(n+1)=r;
+                
+                % Mark in which column the next unexplored zero in this row
+                % is.
+                CH(r)=-A(r,l);
+            end
+        else
+            % If all rows are explored..
+            if (RH(n+1)<=0)
+                % Reduce matrix.
+                [A,CH,RH]=hmreduce(A,CH,RH,LC,LR,SLC,SLR);
+            end
+            
+            % Re-start with first unexplored row.
+            r=RH(n+1);
+            % Get column of next free zero in row r.
+            l=CH(r);
+            % Advance "column of next free zero".
+            CH(r)=-A(r,l);
+            % If this zero is last in the list..
+            if (A(r,l)==0)
+                % ...remove row r from unexplored list.
+                RH(n+1)=RH(r);
+                RH(r)=0;
+            end
+        end
+        
+        % While the column l is labelled, i.e. in path.
+        while (LC(l)~=0)
+            % If row r is explored..
+            if (RH(r)==0)
+                % If all rows are explored..
+                if (RH(n+1)<=0)
+                    % Reduce cost matrix.
+                    [A,CH,RH]=hmreduce(A,CH,RH,LC,LR,SLC,SLR);
+                end
+                
+                % Re-start with first unexplored row.
+                r=RH(n+1);
+            end
+            
+            % Get column of next free zero in row r.
+            l=CH(r);
+            
+            % Advance "column of next free zero".
+            CH(r)=-A(r,l);
+            
+            % If this zero is last in list..
+            if(A(r,l)==0)
+                % ...remove row r from unexplored list.
+                RH(n+1)=RH(r);
+                RH(r)=0;
+            end
+        end
+        
+        % If the column found is unassigned..
+        if (C(l)==0)
+            % Flip all zeros along the path in LR,LC.
+            [A,C,U]=hmflip(A,C,LC,LR,U,l,r);
+            % ...and exit to continue with next unassigned row.
+            break;
+        else
+            % ...else add zero to path.
+            
+            % Label column l with row r.
+            LC(l)=r;
+            
+            % Add l to the set of labelled columns.
+            SLC=[SLC l];
+            
+            % Continue with the row assigned to column l.
+            r=C(l);
+            
+            % Label row r with column l.
+            LR(r)=l;
+            
+            % Add r to the set of labelled rows.
+            SLR=[SLR r];
+        end
+    end
+end
+
+% Calculate the total cost.
+T=sum(orig(logical(sparse(C,1:size(orig,2),1))));
+
+
+function A=hminired(A)
+%HMINIRED Initial reduction of cost matrix for the Hungarian method.
+%
+%B=assredin(A)
+%A - the unreduced cost matris.
+%B - the reduced cost matrix with linked zeros in each row.
+
+% v1.0  96-06-13. Niclas Borlin, niclas@cs.umu.se.
+
+[m,n]=size(A);
+
+% Subtract column-minimum values from each column.
+colMin=min(A);
+A=A-colMin(ones(n,1),:);
+
+% Subtract row-minimum values from each row.
+rowMin=min(A')';
+A=A-rowMin(:,ones(1,n));
+
+% Get positions of all zeros.
+[i,j]=find(A==0);
+
+% Extend A to give room for row zero list header column.
+A(1,n+1)=0;
+for k=1:n
+    % Get all column in this row. 
+    cols=j(k==i)';
+    % Insert pointers in matrix.
+    A(k,[n+1 cols])=[-cols 0];
+end
+
+
+function [A,C,U]=hminiass(A)
+%HMINIASS Initial assignment of the Hungarian method.
+%
+%[B,C,U]=hminiass(A)
+%A - the reduced cost matrix.
+%B - the reduced cost matrix, with assigned zeros removed from lists.
+%C - a vector. C(J)=I means row I is assigned to column J,
+%              i.e. there is an assigned zero in position I,J.
+%U - a vector with a linked list of unassigned rows.
+
+% v1.0  96-06-14. Niclas Borlin, niclas@cs.umu.se.
+
+[n,np1]=size(A);
+
+% Initalize return vectors.
+C=zeros(1,n);
+U=zeros(1,n+1);
+
+% Initialize last/next zero "pointers".
+LZ=zeros(1,n);
+NZ=zeros(1,n);
+
+for i=1:n
+    % Set j to first unassigned zero in row i.
+	lj=n+1;
+	j=-A(i,lj);
+
+    % Repeat until we have no more zeros (j==0) or we find a zero
+	% in an unassigned column (c(j)==0).
+    
+	while (C(j)~=0)
+		% Advance lj and j in zero list.
+		lj=j;
+		j=-A(i,lj);
+	
+		% Stop if we hit end of list.
+		if (j==0)
+			break;
+		end
+	end
+
+	if (j~=0)
+		% We found a zero in an unassigned column.
+		
+		% Assign row i to column j.
+		C(j)=i;
+		
+		% Remove A(i,j) from unassigned zero list.
+		A(i,lj)=A(i,j);
+
+		% Update next/last unassigned zero pointers.
+		NZ(i)=-A(i,j);
+		LZ(i)=lj;
+
+		% Indicate A(i,j) is an assigned zero.
+		A(i,j)=0;
+	else
+		% We found no zero in an unassigned column.
+
+		% Check all zeros in this row.
+
+		lj=n+1;
+		j=-A(i,lj);
+		
+		% Check all zeros in this row for a suitable zero in another row.
+		while (j~=0)
+			% Check the in the row assigned to this column.
+			r=C(j);
+			
+			% Pick up last/next pointers.
+			lm=LZ(r);
+			m=NZ(r);
+			
+			% Check all unchecked zeros in free list of this row.
+			while (m~=0)
+				% Stop if we find an unassigned column.
+				if (C(m)==0)
+					break;
+				end
+				
+				% Advance one step in list.
+				lm=m;
+				m=-A(r,lm);
+			end
+			
+			if (m==0)
+				% We failed on row r. Continue with next zero on row i.
+				lj=j;
+				j=-A(i,lj);
+			else
+				% We found a zero in an unassigned column.
+			
+				% Replace zero at (r,m) in unassigned list with zero at (r,j)
+				A(r,lm)=-j;
+				A(r,j)=A(r,m);
+			
+				% Update last/next pointers in row r.
+				NZ(r)=-A(r,m);
+				LZ(r)=j;
+			
+				% Mark A(r,m) as an assigned zero in the matrix . . .
+				A(r,m)=0;
+			
+				% ...and in the assignment vector.
+				C(m)=r;
+			
+				% Remove A(i,j) from unassigned list.
+				A(i,lj)=A(i,j);
+			
+				% Update last/next pointers in row r.
+				NZ(i)=-A(i,j);
+				LZ(i)=lj;
+			
+				% Mark A(r,m) as an assigned zero in the matrix . . .
+				A(i,j)=0;
+			
+				% ...and in the assignment vector.
+				C(j)=i;
+				
+				% Stop search.
+				break;
+			end
+		end
+	end
+end
+
+% Create vector with list of unassigned rows.
+
+% Mark all rows have assignment.
+r=zeros(1,n);
+rows=C(C~=0);
+r(rows)=rows;
+empty=find(r==0);
+
+% Create vector with linked list of unassigned rows.
+U=zeros(1,n+1);
+U([n+1 empty])=[empty 0];
+
+
+function [A,C,U]=hmflip(A,C,LC,LR,U,l,r)
+%HMFLIP Flip assignment state of all zeros along a path.
+%
+%[A,C,U]=hmflip(A,C,LC,LR,U,l,r)
+%Input:
+%A   - the cost matrix.
+%C   - the assignment vector.
+%LC  - the column label vector.
+%LR  - the row label vector.
+%U   - the 
+%r,l - position of last zero in path.
+%Output:
+%A   - updated cost matrix.
+%C   - updated assignment vector.
+%U   - updated unassigned row list vector.
+
+% v1.0  96-06-14. Niclas Borlin, niclas@cs.umu.se.
+
+n=size(A,1);
+
+while (1)
+    % Move assignment in column l to row r.
+    C(l)=r;
+    
+    % Find zero to be removed from zero list..
+    
+    % Find zero before this.
+    m=find(A(r,:)==-l);
+    
+    % Link past this zero.
+    A(r,m)=A(r,l);
+    
+    A(r,l)=0;
+    
+    % If this was the first zero of the path..
+    if (LR(r)<0)
+        ...remove row from unassigned row list and return.
+        U(n+1)=U(r);
+        U(r)=0;
+        return;
+    else
+        
+        % Move back in this row along the path and get column of next zero.
+        l=LR(r);
+        
+        % Insert zero at (r,l) first in zero list.
+        A(r,l)=A(r,n+1);
+        A(r,n+1)=-l;
+        
+        % Continue back along the column to get row of next zero in path.
+        r=LC(l);
+    end
+end
+
+
+function [A,CH,RH]=hmreduce(A,CH,RH,LC,LR,SLC,SLR)
+%HMREDUCE Reduce parts of cost matrix in the Hungerian method.
+%
+%[A,CH,RH]=hmreduce(A,CH,RH,LC,LR,SLC,SLR)
+%Input:
+%A   - Cost matrix.
+%CH  - vector of column of 'next zeros' in each row.
+%RH  - vector with list of unexplored rows.
+%LC  - column labels.
+%RC  - row labels.
+%SLC - set of column labels.
+%SLR - set of row labels.
+%
+%Output:
+%A   - Reduced cost matrix.
+%CH  - Updated vector of 'next zeros' in each row.
+%RH  - Updated vector of unexplored rows.
+
+% v1.0  96-06-14. Niclas Borlin, niclas@cs.umu.se.
+
+n=size(A,1);
+
+% Find which rows are covered, i.e. unlabelled.
+coveredRows=LR==0;
+
+% Find which columns are covered, i.e. labelled.
+coveredCols=LC~=0;
+
+r=find(~coveredRows);
+c=find(~coveredCols);
+
+% Get minimum of uncovered elements.
+m=min(min(A(r,c)));
+
+% Subtract minimum from all uncovered elements.
+A(r,c)=A(r,c)-m;
+
+% Check all uncovered columns..
+for j=c
+    % ...and uncovered rows in path order..
+    for i=SLR
+        % If this is a (new) zero..
+        if (A(i,j)==0)
+            % If the row is not in unexplored list..
+            if (RH(i)==0)
+                % ...insert it first in unexplored list.
+                RH(i)=RH(n+1);
+                RH(n+1)=i;
+                % Mark this zero as "next free" in this row.
+                CH(i)=j;
+            end
+            % Find last unassigned zero on row I.
+            row=A(i,:);
+            colsInList=-row(row<0);
+            if (length(colsInList)==0)
+                % No zeros in the list.
+                l=n+1;
+            else
+                l=colsInList(row(colsInList)==0);
+            end
+            % Append this zero to end of list.
+            A(i,l)=-j;
+        end
+    end
+end
+
+% Add minimum to all doubly covered elements.
+r=find(coveredRows);
+c=find(coveredCols);
+
+% Take care of the zeros we will remove.
+[i,j]=find(A(r,c)<=0);
+
+i=r(i);
+j=c(j);
+
+for k=1:length(i)
+    % Find zero before this in this row.
+    lj=find(A(i(k),:)==-j(k));
+    % Link past it.
+    A(i(k),lj)=A(i(k),j(k));
+    % Mark it as assigned.
+    A(i(k),j(k))=0;
+end
+
+A(r,c)=A(r,c)+m;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/image_rgb.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function image_rgb(M)
+% Show a matrix of integers as a color image.
+% This is like imagesc, except we know what the mapping is from integer to color.
+% If entries of M contain integers in {1,2,3}, we map
+% this to red/green/blue 
+
+cmap = [1 0 0; % red
+	0 1 0; % green
+	0 0 1; % blue
+	127/255 1 212/255]; % aquamarine
+image(M)
+set(gcf,'colormap', cmap);
+
+if 1
+  % make dummy handles, one per object type, for the legend
+  str = {};
+  for i=1:size(cmap,1)
+    dummy_handle(i) = line([0 0.1], [0 0.1]);
+    set(dummy_handle(i), 'color', cmap(i,:));
+    set(dummy_handle(i), 'linewidth', 2);
+    str{i} = num2str(i);
+  end
+  legend(dummy_handle, str, -1);
+end
+
+if 0
+[nrows ncols] = size(M);
+img = zeros(nrows, ncols, 3);
+for r=1:nrows
+  for c=1:ncols
+    q = M(r,c);
+    img(r,c,q) = 1;
+  end
+end
+image(img)
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/imresizeAspect.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function img = imresizeAspect(img, maxSize)
+% function img = imresizeAspect(img, maxSize)
+% If image is larger than max size, reduce size, preserving aspect ratio of input.
+%
+% If size(input) = [y x] and maxSize = [yy xx],
+% then size(output) is given by the following (where a=y/x)
+%  if y<yy & x<xx  then [y x] 
+%  else if a<1 then [a*xx xx] 
+%  else [yy yy/a] 
+
+% For why we use bilinear,
+% See http://nickyguides.digital-digest.com/bilinear-vs-bicubic.htm
+
+if isempty(maxSize), return; end
+
+[y x c] = size(img);
+a= y/x;
+yy = maxSize(1); xx = maxSize(2); 
+if y <= yy & x <= xx
+  % no-op
+else
+  if a < 1
+    img = imresize(img, ceil([a*xx xx]), 'bilinear');
+  else
+    img = imresize(img, ceil([yy yy/a]), 'bilinear');
+  end
+  fprintf('resizing from %dx%d to %dx%d\n', y, x, size(img,1), size(img,2));
+end
+
+
+%test
+if 0
+  maxSize = [240 320];
+  %img = imread('C:\Images\Wearables\web_static_office\8.jpg'); 
+  %img = imread('C:\Images\Wearables\web_static_office\billandkirsten.jpg'); 
+  %img = imread('C:\Images\Wearables\web_static_street_april\p5.jpg'); 
+  img = imread('C:\Images\Wearables\Database_static_street\art11.jpg'); 
+  img2 = imresizeAspect(img, maxSize);
+  figure(1); clf; imshow(img)
+  figure(2); clf; imshow(img2)
+  fprintf('%dx%d (%5.3f) to %dx%d (%5.3f)\n', ...
+	  size(img,1), size(img,2), size(img,1)/size(img,2), ...
+	  size(img2,1), size(img2,2), size(img2,1)/size(img2,2));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/ind2subv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function sub = ind2subv(siz,index)
+%IND2SUBV   Subscript vector from linear index.
+% IND2SUBV(SIZ,IND) returns a vector of the equivalent subscript values 
+% corresponding to a single index into an array of size SIZ.
+% If IND is a vector, then the result is a matrix, with subscript vectors
+% as rows.
+
+%sub = ind2subvTest(siz, index);
+n = length(siz);
+if n==0, sub = index; return; end % added by KPM 17 Nov 07
+cum_size = cumprod(siz(:)');
+prev_cum_size = [1 cum_size(1:end-1)];
+index = index(:) - 1;
+sub = rem(repmat(index,1,n),repmat(cum_size,length(index),1));
+sub = floor(sub ./ repmat(prev_cum_size,length(index),1))+1;
+
+% slow way
+%for dim = n:-1:1
+%  sub(:,dim) = floor(index/cum_size(dim))+1;
+%  index = rem(index,cum_size(dim));
+%end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/ind2subvKPM.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,176 @@
+/* C mex version of ind2subv.m in misc directory */
+/* 2 input, 1 output         */
+/* siz, ndx                  */
+/* sub                       */
+
+#include "mex.h"
+#include <math.h>
+
+void rbinary(int num, int n, double *rbits){
+	int i, mask;
+	num = num - 1;
+
+	mask = 1 << (n-1); /* mask = 00100...0 , where the 1 is in column n (rightmost = col 1) */
+	for (i = 0; i < n; i++) {
+		rbits[n-i-1] = ((num & mask) == 0) ? 1 : 2;
+		num <<= 1;
+	}
+}
+
+void ind_subv(int num, const double *sizes, int n, double *rbits){
+	int i;
+	int *cumprod;
+
+	cumprod  = malloc(n * sizeof(int));
+	num = num - 1;
+	cumprod[0] = 1;
+	for (i = 0; i < n-1; i++)
+	cumprod[i+1] = cumprod[i] * (int)sizes[i];
+	for (i = n-1; i >= 0; i--) {
+		rbits[i] = ((int)floor(num / cumprod[i])) + 1;
+		num = num % cumprod[i];
+	}
+	free(cumprod);
+}
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int    i, j, k, nCol, nRow, nnRow, binary, count, temp, temp1, start;
+	double *pSize, *pNdx, *pr;
+	double ndx;
+	int    *subv, *cumprod, *templai;
+
+	pSize = mxGetPr(prhs[0]);
+	pNdx = mxGetPr(prhs[1]);
+	nCol = mxGetNumberOfElements(prhs[0]);
+	nnRow = mxGetNumberOfElements(prhs[1]);
+
+	nRow = 1;
+	for(i=0; i<nCol; i++){
+		nRow *= (int)pSize[i];
+	}
+
+	if(nCol == 0){
+		plhs[0] = mxDuplicateArray(prhs[1]);
+		return;
+	}
+
+	binary = 2;
+	for (i = 0; i < nCol; i++){
+		if (pSize[i] > 2.0){
+			binary = 0;
+			break;
+		}
+		else if((int)pSize[i] == 1){
+			binary = 1;
+		}
+	}
+
+	if(nnRow == 1){
+		ndx = mxGetScalar(prhs[1]);
+		plhs[0] = mxCreateDoubleMatrix(1, nCol, mxREAL);
+		pr = mxGetPr(plhs[0]);
+		if(binary == 2)rbinary((int)ndx, nCol, pr);
+		else ind_subv((int)ndx, pSize, nCol, pr);
+		return;
+	}
+
+	plhs[0] = mxCreateDoubleMatrix(nnRow, nCol, mxREAL);
+	pr = mxGetPr(plhs[0]);
+
+	subv = malloc(nRow * nCol * sizeof(int));
+
+	if (binary == 2) {
+		for(j=0; j<nCol; j++){
+			temp = (1 << j);
+			temp1 = j * nRow;
+			for(i=0; i<nRow; i++){
+				subv[temp1 + i] = ((i & temp) == 0) ? 1 : 2;
+			}
+		}
+	}
+	else if(binary == 1){
+		cumprod = (int *)malloc(nCol * sizeof(int));
+		templai = (int *)malloc(nCol * sizeof(int));
+		cumprod[0] = 1;
+		templai[0] = nRow;
+		for(i=1; i<nCol; i++){
+			k = (int)pSize[i-1] - 1;
+			cumprod[i] = cumprod[i-1] << k;
+			templai[i] = templai[i-1] >> k;
+		}
+		for(j=0; j<nCol; j++){
+			temp1 = j * nRow;
+			if(pSize[j] == 1.0){
+				for(i=0; i<nRow; i++){
+					subv[temp1 + i] = 1;
+				}
+			}
+			else{
+				temp = 1;
+				count = 0;
+				for(i=0; i<templai[j]; i++){
+					if(temp > 2) temp = 1;
+					for(k=0; k<cumprod[j]; k++){
+						subv[temp1 + count] = temp;
+                        count++;
+					}
+					temp++;
+				}
+			}
+		}
+		free(templai);
+		free(cumprod);
+	}
+	else {
+		cumprod = (int *)malloc(nCol * sizeof(int));
+		templai = (int *)malloc(nCol * sizeof(int));
+		cumprod[0] = 1;
+		for(i=1; i<nCol; i++){
+			cumprod[i] = (int)(cumprod[i-1] * pSize[i-1]);
+		}
+		templai[0] = nRow;
+		for(i=1; i<nCol; i++){
+			templai[i] = nRow / cumprod[i];
+		}
+		for(j=0; j<nCol; j++){
+			temp1 = j * nRow;
+			if(pSize[j] == 1.0){
+				for(i=0; i<nRow; i++){
+					subv[temp1 + i] = 1;
+				}
+			}
+			else{
+				temp = 1;
+				count = 0;
+				for(i=0; i<templai[j]; i++){
+					if(temp > (int)pSize[j]) temp = 1;
+					for(k=0; k<cumprod[j]; k++){
+						subv[temp1 + count] = temp;
+						count++;
+					}
+					temp++;
+				}
+			}
+		}
+		free(cumprod);
+		free(templai);
+	}
+
+	count = 0;
+	for(j=0; j<nCol; j++){
+		temp1 = j * nRow;
+		for(i=0; i<nnRow; i++){
+			start = (int)pNdx[i] - 1;
+			pr[count] = subv[temp1 + start];
+			count++;
+		}
+	}
+	free(subv);
+}
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/ind2subvKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function sub = ind2subvKPM(siz, ndx)
+% IND2SUBV Like the built-in ind2sub, but returns the answer as a row vector.
+% sub = ind2subv(siz, ndx)
+%
+% siz and ndx can be row or column vectors.
+% sub will be of size length(ndx) * length(siz).
+%
+% Example
+% ind2subv([2 2 2], 1:8) returns
+%  [1 1 1
+%   2 1 1
+%   ...
+%   2 2 2]
+% That is, the leftmost digit toggle fastest.
+%
+% See also SUBV2IND
+
+n = length(siz);
+
+
+if  n==0
+  sub = ndx;
+  return;
+end  
+
+if all(siz==2)
+  sub = dec2bitv(ndx-1, n);
+  sub = sub(:,n:-1:1)+1;
+  return;
+end
+
+cp = [1 cumprod(siz(:)')];
+ndx = ndx(:) - 1;
+sub = zeros(length(ndx), n);
+for i = n:-1:1 % i'th digit
+  sub(:,i) = floor(ndx/cp(i))+1;
+  ndx = rem(ndx,cp(i));
+end
+
+
+
+%%%%%%%%%%
+
+function bits = dec2bitv(d,n)
+% DEC2BITV Convert a decimal integer to a bit vector.
+% bits = dec2bitv(d,n) is just like the built-in dec2bin, except the answer is a vector, not a string.
+% n is an optional minimum length on the bit vector.
+% If d is a vector,  each row of the output array will be a bit vector.
+
+
+if (nargin<2)
+  n=1; % Need at least one digit even for 0.
+end
+d = d(:);
+
+[f,e]=log2(max(d)); % How many digits do we need to represent the numbers?
+bits=rem(floor(d*pow2(1-max(n,e):0)),2);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/ind2subvMinka.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function sub = ind2subvMinka(siz,index)
+%IND2SUBV   Subscript vector from linear index.
+% IND2SUBV(SIZ,IND) returns a vector of the equivalent subscript values 
+% corresponding to a single index into an array of size SIZ.
+% If IND is a vector, then the result is a matrix, with subscript vectors
+% as rows.
+
+% Written by Tom Minka
+% (c) Microsoft Corporation. All rights reserved.
+
+n = length(siz);
+if n==0, sub = index; return; end % added by KPM 17 Nov 07
+cum_size = cumprod(siz(:)');
+prev_cum_size = [1 cum_size(1:end-1)];
+index = index(:) - 1;
+sub = rem(repmat(index,1,n),repmat(cum_size,length(index),1));
+sub = floor(sub ./ repmat(prev_cum_size,length(index),1))+1;
+
+% slow way
+%for dim = n:-1:1
+%  sub(:,dim) = floor(index/cum_size(dim))+1;
+%  index = rem(index,cum_size(dim));
+%end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/ind2subvTest.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function sub = ind2subvTest(siz,index)
+%IND2SUBV   Subscript vector from linear index.
+% IND2SUBV(SIZ,IND) returns a vector of the equivalent subscript values 
+% corresponding to a single index into an array of size SIZ.
+% If IND is a vector, then the result is a matrix, with subscript vectors
+% as rows.
+
+sub = ind2subvMinka(siz, index);
+subKPM = ind2subvKPM(siz, index);
+assert(isequal(sub, subKPM))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/initFigures.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+% initFigures
+% Position 6 figures on the edges of the screen.
+% [xmin ymin w h] where (0,0) = bottom left
+% Numbers assume screen resolution is 1024 x 1280
+
+global FIGNUM NUMFIGS
+FIGNUM = 1; NUMFIGS = 6;
+
+screenMain = true; % set to false if initializing figures for second screen
+%screenMain = false;
+
+if screenMain
+  xoff = 0; 
+else
+  %xoff = 1280;
+  xoff = -1280;
+end
+
+% 2 x 3 design
+w = 400; h = 300;
+xs = [10 450 875] + xoff;
+ys = [650 40];
+
+if 0
+% 3x3 design
+w = 350; h = 250;
+xs = [10 380 750]+xoff;
+ys = [700 350 10];
+end
+
+
+Nfigs = length(xs)*length(ys);
+if screenMain
+  fig = 1; 
+else
+  fig = Nfigs + 1;
+end
+
+for yi=1:length(ys)
+  for xi=1:length(xs)
+    figure(fig);
+    set(gcf, 'position', [xs(xi) ys(yi) w h]);
+    fig = fig + 1;
+  end
+end
+
+% To plot something on the next available figure (with wrap around), use
+% sfigure(FIGNUM); clf; FIGNUM = wrap(FIGNUM+1, NUMFIGS); 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/installC_KPMtools.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+mex ind2subv.c
+mex subv2ind.c
+mex normalise.c
+mex -c mexutil.c
+if ~isunix 
+  mex repmatC.c mexutil.obj
+else
+  mex repmatC.c mexutil.o
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/is_psd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function b = positive_semidefinite(M)
+%
+% Return true iff v M v' >= 0 for any vector v.
+% We do this by checking that all the eigenvalues are non-negative.
+
+E = eig(M);
+if length(find(E>=0)) == length(E)
+  b = 1;
+else
+  b = 0;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/is_stochastic.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function p = is_stochastic(T)
+% IS_STOCHASTIC Is the argument a stochastic matrix, i.e., the sum over the last dimension is 1.
+% p = is_stochastic(T)
+
+p = approxeq(T, mk_stochastic(T));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/isemptycell.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function E = isemptycell(C)
+% ISEMPTYCELL Apply the isempty function to each element of a cell array
+% E = isemptycell(C)
+%
+% This is equivalent to E = cellfun('isempty', C),
+% where cellfun is a function built-in to matlab version 5.3 or newer.
+
+if 0 % all(version('-release') >= 12)
+  E = cellfun('isempty', C);
+else
+  E = zeros(size(C));
+  for i=1:prod(size(C))
+    E(i) = isempty(C{i});
+  end
+  E = logical(E);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/isequalKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function p = isequalKPM(a,b)
+
+if isempty(a) & isempty(b)
+  p = 1;
+else
+  p = isequal(a,b);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/isposdef.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function b = isposdef(a)
+% ISPOSDEF   Test for positive definite matrix.
+%    ISPOSDEF(A) returns 1 if A is positive definite, 0 otherwise.
+%    Using chol is much more efficient than computing eigenvectors.
+
+%  From Tom Minka's lightspeed toolbox
+
+[R,p] = chol(a);
+b = (p == 0);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/isscalarBNT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function p = isscalarBNT(v)
+% ISSCALAR Returns 1 if all dimensions have size 1.
+% p = isscalar(v)
+
+p = (prod(size(v))==1);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/isvectorBNT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function p = isvectorBNT(v)
+% ISVECTOR Returns 1 if all but one dimension have size 1.
+% p = isvector(v)
+%
+% Example: isvector(rand(1,2,1)) = 1, isvector(rand(2,2)) = 0.
+
+s=size(v);
+p = (ndims(v)<=2) & (s(1) == 1 | s(2) == 1);
+%p = sum( size(v) > 1) <= 1; % Peter Acklam's solution
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/junk.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+
+  m  = mxGetM(prhs[0]);
+  n  = mxGetN(prhs[0]);
+  pr = mxGetPr(prhs[0]);
+  pi = mxGetPi(prhs[0]);
+  cmplx = (pi == NULL ? 0 : 1);
+
+  /* Allocate space for sparse matrix. 
+   * NOTE:  Assume at most 20% of the data is sparse.  Use ceil
+   * to cause it to round up. 
+   */
+
+  percent_sparse = 0.2;
+  nzmax = (int)ceil((double)m*(double)n*percent_sparse);
+
+  plhs[0] = mxCreateSparse(m,n,nzmax,cmplx);
+  sr  = mxGetPr(plhs[0]);
+  si  = mxGetPi(plhs[0]);
+  irs = mxGetIr(plhs[0]);
+  jcs = mxGetJc(plhs[0]);
+    
+  /* Copy nonzeros. */
+  k = 0; 
+  isfull = 0;
+  for (j = 0; (j < n); j++) {
+    int i;
+    jcs[j] = k;
+    for (i = 0; (i < m); i++) {
+      if (IsNonZero(pr[i]) || (cmplx && IsNonZero(pi[i]))) {
+
+        /* Check to see if non-zero element will fit in 
+         * allocated output array.  If not, increase
+         * percent_sparse by 10%, recalculate nzmax, and augment
+         * the sparse array.
+         */
+        if (k >= nzmax) {
+          int oldnzmax = nzmax;
+          percent_sparse += 0.1;
+          nzmax = (int)ceil((double)m*(double)n*percent_sparse);
+
+          /* Make sure nzmax increases atleast by 1. */
+          if (oldnzmax == nzmax) 
+            nzmax++;
+
+          mxSetNzmax(plhs[0], nzmax); 
+          mxSetPr(plhs[0], mxRealloc(sr, nzmax*sizeof(double)));
+          if (si != NULL)
+          mxSetPi(plhs[0], mxRealloc(si, nzmax*sizeof(double)));
+          mxSetIr(plhs[0], mxRealloc(irs, nzmax*sizeof(int)));
+
+          sr  = mxGetPr(plhs[0]);
+          si  = mxGetPi(plhs[0]);
+          irs = mxGetIr(plhs[0]);
+        }
+        sr[k] = pr[i];
+        if (cmplx) {
+          si[k] = pi[i];
+        }
+        irs[k] = i;
+        k++;
+      }
+    }
+    pr += m;
+    pi += m;
+  }
+  jcs[n] = k;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/loadcell.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,153 @@
+function [lc,dflag,dattype]=loadcell(fname,delim,exclusions,options);
+%function [lc,dflag,numdata]=loadcell(fname,delim,exclusions);
+%  
+%  loadcell loads a cell array with character delimited
+%  data, which can have variable length lines and content.
+%  Numeric values are converted from string to double 
+%  unless options is a string containing 'string'.
+%  
+%  loadcell is for use with small datasets. It is not optimised
+%  for large datasets.
+% 
+%  fname is the filename to be loaded
+%
+%  delim is/are the relevant delimiter(s). If char(10) is included
+%  newlines are simply treated as delimiters and a 1-d array is created.
+%
+%  exclusions  are the set of characters to be treated as paired
+%    braces: line ends or delimiters within braces are ignored.
+%    braces are single characters and any brace can pair with 
+%    any other brace: no type pair checking is done.
+%
+%  options can be omitted or can contain 'string' if no numeric
+%    conversion is required, 'single' if multiple adjacent seperators
+%    should not be treated as one, 'free' if all linefeeds should be stripped
+%    first and 'empty2num' if empty fields are to be treated as numeric 
+%    zeros rather than an empty character set. Combine options using 
+%    concatenation.
+%
+%  lc is a cell array containing the loaded data.
+%
+%  dflag is a set of flags denoting the (i,j) values where data was entered
+%  dflag(i,j)=1 implies lc(i,j) was loaded from the data, and not just set
+%  to empty, say, by default.
+%
+%  numdata is an array  numdata(i,j)=NaN implies
+%    lc(i,j) is a string, otherwise it stores the number at i,j.
+%    This will occur regardless of whether the 'string' option is set.
+%
+%  lc will return -1 if the file is not found or could not be
+%  opened.
+%
+%  Hint: numdata+(1/dflag-1) provides a concise descriptor for the numeric data
+%  Inf=not loaded
+%  NaN=was string or empty set.
+%  otherwise numeric
+%
+%  EXAMPLE
+%
+%[a,b]=loadcell('resultsfile',[',' char(9)],'"','single-string');
+%   will load file 'resultsfile' into variable a, treating any of tab or 
+%   comma as delimiters. Delimiters or carriage returns lying 
+%   between two double inverted commas will be ignored. Two adjacent delimiters
+%   will count twice, and all data will be kept as a string.
+%
+%   Note: in space-separated data 'single' would generally be omitted,
+%   wheras in comma-seperated data it would be included.
+%  
+%   Note the exclusion characters will remain in the final data, and any data
+%   contained within or containing exclusion characters will not be 
+%   converted to numerics.
+%
+%   (c) Amos Storkey 2002
+%    v b160702
+
+% MATLAB is incapable of loading variable length lines or variable type values
+% with a whole file command under the standard library sets. This mfile 
+% fills that gap.
+if (nargin<4) 
+    options=' ';
+end;
+dflag = [];
+%Open file
+fid=fopen(fname,'rt');
+%Cannot open: return -1
+if (fid<0)
+  lc=-1;
+else
+  fullfile=fread(fid,'uchar=>char')';
+  %Strip LF if free is set
+  if ~isempty(findstr(options,'free'))
+      fullfile=strrep(fullfile,char(10),'');
+  end;
+  %Find all delimiters
+  delimpos=[];
+  for s=1:length(delim)
+    delimpos=[delimpos find(fullfile==delim(s))];
+  end
+  %Find all eol
+  endpos=find(fullfile==char(10));
+  endpos=setdiff(endpos,delimpos);
+  %find all exclusions
+  xclpos=[];
+  for s=1:length(exclusions);
+    xclpos=[xclpos find(fullfile==exclusions(s))];
+  end
+  sort(xclpos);
+  xclpos=[xclpos(1:2:end-1);xclpos(2:2:end)];
+  %Combine eol and delimiters
+  jointpos=union(delimpos,endpos);
+  t=1;
+  %Remove delim/eol within exclusion pairs
+  removedelim=[];
+  for s=1:length(jointpos)
+    if any((jointpos(s)>xclpos(1,:)) & (jointpos(s)<xclpos(2,:)))
+      removedelim(t)=jointpos(s);
+      t=t+1;
+    end;
+
+  end
+  %and add start point
+  jointpos=[0 setdiff(jointpos,removedelim)];
+  i=1;
+  j=1;
+  posind=1;
+  multflag=isempty(findstr(options,'single'));
+  stringflag=~isempty(findstr(options,'string'));
+  emptnum=~isempty(findstr(options,'empty2num'));
+  %Run through
+  while (posind<(length(jointpos)))
+    %Get current field
+    tempstr=fullfile(jointpos(posind)+1:jointpos(posind+1)-1);
+    %If empty only continue if adjacent delim count.
+    if ~(isempty(tempstr) & multflag);
+      %This ij is set
+      dflag(i,j)=1;
+      %Convert to num
+      tempno=str2double([tempstr]);
+      %If emptystring convert to zero if emptnum set
+      if (isempty(tempstr) & emptnum)
+          tempno=0;
+      end;
+      %Set dattype to no (or NaN if not a num
+      dattype(i,j)=tempno;
+      %If NaN set lc to string else to num if stringflag not set
+      if (isnan(tempno) |  stringflag) 
+        lc{i,j}=tempstr;
+      else
+        lc{i,j}=tempno;
+      end;
+      %Next j
+      j=j+1;
+    end;
+    %If eol inc i and reset j
+    if ismember(jointpos(posind+1),endpos)
+        i=i+1;
+        j=1;
+    end;
+    %Inc to next delim
+    posind=posind+1;      
+  end;
+end;
+%Logicalise dflag
+dflag=logical(dflag);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/logb.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function x = logb(y, base)
+% logb - logarithm to base b
+% function x = logb(y, base)
+
+x = log(y) ./ log(base);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/logdet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function y = logdet(A)
+% log(det(A)) where A is positive-definite.
+% This is faster and more stable than using log(det(A)).
+
+%  From Tom Minka's lightspeed toolbox
+
+U = chol(A);
+y = 2*sum(log(diag(U)));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/logsum.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function y=logsum(x,d)
+%LOGSUM logsum(x,d)=log(sum(exp(x),d))
+%  d gives dimension to sum along
+
+%      Copyright (C) Mike Brookes 1998
+%
+%      Last modified Mon Oct 12 15:47:25 1998
+%
+%   VOICEBOX is a MATLAB toolbox for speech processing. Home page is at
+%   http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
+%
+
+if nargin==1
+   d=[find(size(x)-1) 1];
+   d=d(1);
+end
+n=size(x,d);
+if n<=1, y=x; return; end
+s=size(x);
+p=[d:ndims(x) 1:d-1];
+z=reshape(permute(x,p),n,prod(s)/n);
+
+y=max(z);
+y=y+log(sum(exp(z-y(ones(n,1),:))));
+
+s(d)=1;
+y=ipermute(reshape(y,s(p)),p);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/logsum_simple.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function result = logsum(logv)
+
+len = length(logv);
+if (len<2);
+  error('Subroutine logsum cannot sum less than 2 terms.');
+end;
+
+% First two terms
+if (logv(2)<logv(1)),
+  result = logv(1) + log( 1 + exp( logv(2)-logv(1) ) );
+else,
+  result = logv(2) + log( 1 + exp( logv(1)-logv(2) ) );
+end;
+
+% Remaining terms
+for (i=3:len),
+  term = logv(i);
+  if (result<term),
+    result = term   + log( 1 + exp( result-term ) );
+  else,
+    result = result + log( 1 + exp( term-result ) );
+  end;    
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/logsum_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+p1 = log(1e-5);
+p2 = log(5*1e-6);
+p3 = log(sum(exp([p1 p2])))
+p4 = logsumexp([p1 p2],2)
+p5 = logsum([p1 p2])
+p6 = logsum([p1 p2])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/logsumexp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function s = logsumexp(a, dim)
+% Returns log(sum(exp(a),dim)) while avoiding numerical underflow.
+% Default is dim = 1 (rows) or dim=2 for a row vector
+% logsumexp(a, 2) will sum across columns instead of rows
+
+% Written by Tom Minka, modified by Kevin Murphy
+
+if nargin < 2
+  dim = 1;
+  if ndims(a) <= 2 & size(a,1)==1
+    dim = 2;
+  end
+end
+
+% subtract the largest in each column
+[y, i] = max(a,[],dim);
+dims = ones(1,ndims(a));
+dims(dim) = size(a,dim);
+a = a - repmat(y, dims);
+s = y + log(sum(exp(a),dim));
+%i = find(~finite(y));
+%if ~isempty(i)
+%  s(i) = y(i);
+%end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/logsumexpv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function s = logsumexpv(a)
+% Returns log(sum(exp(a)))  while avoiding numerical underflow.
+%
+% e.g., log(e^a1 + e^a2) = a1 + log(1 + e^(a2-a1)) if a1>a2
+% If a1 ~ a2, and a1>a2, then e^(a2-a1) is exp(small negative number),
+% which can be computed without underflow.
+
+% Same as logsumexp, except we assume a is a vector.
+% This avoids a call to repmat, which takes 50% of the time!
+
+a = a(:)'; % make row vector
+m = max(a);
+b = a - m*ones(1,length(a));
+s = m + log(sum(exp(b)));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/mahal2conf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+% MAHAL2CONF - Translates a Mahalanobis distance into a confidence
+%              interval.  Consider a multivariate Gaussian
+%              distribution of the form
+%
+%   p(x) = 1/sqrt((2 * pi)^d * det(C)) * exp((-1/2) * MD(x, m, inv(C)))
+%
+%              where MD(x, m, P) is the Mahalanobis distance from x
+%              to m under P:
+%
+%                 MD(x, m, P) = (x - m) * P * (x - m)'
+%
+%              A particular Mahalanobis distance k identifies an
+%              ellipsoid centered at the mean of the distribution.
+%              The confidence interval associated with this ellipsoid
+%              is the probability mass enclosed by it.
+%
+%              If X is an d dimensional Gaussian-distributed vector,
+%              then the Mahalanobis distance of X is distributed
+%              according to the Chi-squared distribution with d
+%              degrees of freedom.  Thus, the confidence interval is
+%              determined by integrating the chi squared distribution
+%              up to the Mahalanobis distance of the measurement.
+%
+% Usage:
+% 
+%   c = mahal2conf(m, d);
+%
+% Inputs:
+%
+%   m    - the Mahalanobis radius of the ellipsoid
+%   d    - the number of dimensions of the Gaussian distribution
+%
+% Outputs:
+%
+%   c    - the confidence interval, i.e., the fraction of
+%          probability mass enclosed by the ellipsoid with the
+%          supplied Mahalanobis distance
+%
+% See also: CONF2MAHAL
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function c = mahal2conf(m, d)
+
+c = chi2cdf(m, d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/marg_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function smallT = marg_table(bigT, bigdom, bigsz, onto, maximize)
+% MARG_TABLE Marginalize a table
+% smallT = marg_table(bigT, bigdom, bigsz, onto, maximize)
+
+if nargin < 5, maximize = 0; end
+
+
+smallT = myreshape(bigT, bigsz); % make sure it is a multi-dim array
+sum_over = mysetdiff(bigdom, onto);
+ndx = find_equiv_posns(sum_over, bigdom);
+if maximize
+  for i=1:length(ndx)
+    smallT = max(smallT, [], ndx(i));
+  end
+else
+  for i=1:length(ndx)
+    smallT = sum(smallT, ndx(i));
+  end
+end
+
+
+ns = zeros(1, max(bigdom));
+%ns(bigdom) = mysize(bigT); % ignores trailing dimensions of size 1
+ns(bigdom) = bigsz;
+
+smallT = squeeze(smallT); % remove all dimensions of size 1
+smallT = myreshape(smallT, ns(onto)); % put back relevant dims of size 1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/marginalize_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+function smallT = marginalize_table(bigT, bigdom, bigsz, onto, maximize)
+% MARG_TABLE Marginalize a table
+% function smallT = marginalize_table(bigT, bigdom, bigsz, onto, maximize)
+
+% Like marg_table in BNT, except we do not assume the domains are sorted
+
+if nargin < 5, maximize = 0; end
+
+
+smallT = myreshape(bigT, bigsz); % make sure it is a multi-dim array
+sum_over = mysetdiff(bigdom, onto);
+ndx = find_equiv_posns(sum_over, bigdom);
+if maximize
+  for i=1:length(ndx)
+    smallT = max(smallT, [], ndx(i));
+  end
+else
+  for i=1:length(ndx)
+    smallT = sum(smallT, ndx(i));
+  end
+end
+
+
+ns = zeros(1, max(bigdom));
+%ns(bigdom) = mysize(bigT); % ignores trailing dimensions of size 1
+ns(bigdom) = bigsz;
+
+% If onto has a different ordering than bigdom, the following
+% will produce the wrong results
+
+%smallT = squeeze(smallT); % remove all dimensions of size 1
+%smallT = myreshape(smallT, ns(onto)); % put back relevant dims of size 1
+
+% so permute dimensions to match desired ordering (as specified by onto)
+
+
+% like find_equiv_posns, but keeps ordering
+outdom = [onto sum_over];
+for i=1:length(outdom)
+  j = find(bigdom==outdom(i));
+  match(i) = j;
+end
+outdom = [onto sum_over];
+for i=1:length(outdom)
+  j = find(bigdom==outdom(i));
+  match(i) = j;
+end
+if match ~= 1
+  smallT = permute(smallT, match);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/matprint.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+% MATPRINT - prints a matrix with specified format string
+%
+% Usage: matprint(a, fmt, fid)
+%
+%                 a   - Matrix to be printed.
+%                 fmt - C style format string to use for each value.
+%                 fid - Optional file id.
+%
+% Eg. matprint(a,'%3.1f') will print each entry to 1 decimal place
+
+% Peter Kovesi
+% School of Computer Science & Software Engineering
+% The University of Western Australia
+% pk @ csse uwa edu au
+% http://www.csse.uwa.edu.au/~pk
+%
+% March 2002
+
+function matprint(a, fmt, fid)
+    
+    if nargin < 3
+	fid = 1;
+    end
+    
+    [rows,cols] = size(a);
+    
+    % Construct a format string for each row of the matrix consisting of
+    % 'cols' copies of the number formating specification
+    fmtstr = [];
+    for c = 1:cols
+      fmtstr = [fmtstr, ' ', fmt];
+    end
+    fmtstr = [fmtstr '\n'];    % Add a line feed
+    
+    fprintf(fid, fmtstr, a');  % Print the transpose of the matrix because
+                               % fprintf runs down the columns of a matrix.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/max_mult.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+/* C mex version of max_mult.m in BPMRF2 directory  */
+/* gcc -Wall -I/mit/matlab_v6.5/distrib/bin/glnx86 -c max_mult.c */
+
+#include <math.h>
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+  int rows,cols,common,m,n,p;
+  double y1, y2;
+  double *arr1, *arr2, *arr3;
+
+
+  if (nrhs!=2 || nlhs>1)
+    mexErrMsgTxt("max_mult requires two inputs and one output");
+  if (mxIsChar(prhs[0]) || mxIsClass(prhs[0], "sparse") || mxIsComplex(prhs[0])
+      || mxIsChar(prhs[1]) || mxIsClass(prhs[1], "sparse") || mxIsComplex(prhs[1]))
+    mexErrMsgTxt("Inputs must be real, full, and nonstring");
+  if (mxGetN(prhs[0])!=mxGetM(prhs[1]))
+    mexErrMsgTxt("The number of columns of A must be the same as the number of rows of x");
+  
+
+  arr1=mxGetPr(prhs[0]);
+  arr2=mxGetPr(prhs[1]);
+  p=mxGetN(prhs[0]);
+  m=mxGetM(prhs[0]);
+  n=mxGetN(prhs[1]);
+  plhs[0]=mxCreateDoubleMatrix(m, n, mxREAL);
+  arr3=mxMalloc(m*n*sizeof(double));
+
+  for (rows=0; rows<m ; rows++)
+    for (cols=0; cols<n ; cols++)
+    {
+      y1=arr1[rows]*arr2[cols*p];  
+      for (common=1; common<p; common++)
+      {
+	y2=arr1[rows+common*m]*arr2[common+cols*p];
+        if (y2>y1)
+          y1=y2;
+      }
+      arr3[rows+cols*m]=y1;
+    }
+
+  mxSetPr(plhs[0], arr3);
+	 
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/max_mult.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function y=max_mult(A,x)
+% MAX_MULT Like matrix multiplication, but sum gets replaced by max
+% function y=max_mult(A,x) y(i) = max_j A(i,j) x(j)
+
+%X=ones(size(A,1),1) * x(:)'; % X(j,i) = x(i)
+%y=max(A.*X, [], 2);
+
+% This is faster
+if size(x,2)==1
+  X=x*ones(1,size(A,1)); % X(i,j) = x(i)
+  y=max(A'.*X)';
+else
+%this works for arbitrarily sized A and x (but is ugly, and slower than above)
+  X=repmat(x, [1 1 size(A,1)]);
+  B=repmat(A, [1 1 size(x,2)]);
+  C=permute(B,[2 3 1]);
+  y=permute(max(C.*X),[3 2 1]);
+%  this is even slower, as is using squeeze instead of permute
+%  Y=permute(X, [3 1 2]);
+%  y=permute(max(Y.*B, [], 2), [1 3 2]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/mexutil.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+#include "mexutil.h"
+
+/* Functions to create uninitialized arrays. */
+
+mxArray *mxCreateNumericArrayE(int ndim, const int *dims, 
+         mxClassID class, mxComplexity ComplexFlag)
+{
+  mxArray *a;
+  int i, *dims1 = mxMalloc(ndim*sizeof(int));
+  size_t sz = 1;
+  for(i=0;i<ndim;i++) {
+    sz *= dims[i];
+    dims1[i] = 1;
+  }
+  a = mxCreateNumericArray(ndim,dims1,class,ComplexFlag);
+  sz *= mxGetElementSize(a);
+  mxSetDimensions(a, dims, ndim);
+  mxFree(dims1);
+  mxSetData(a, mxRealloc(mxGetData(a), sz));
+  if(ComplexFlag == mxCOMPLEX) {
+    mxSetPi(a, mxRealloc(mxGetPi(a),sz));
+  }
+  return a;
+}
+mxArray *mxCreateNumericMatrixE(int m, int n, mxClassID class, 
+				mxComplexity ComplexFlag)
+{
+  size_t sz = m*n*sizeof(double);
+  mxArray *a = mxCreateNumericMatrix(1, 1, class, ComplexFlag);
+  mxSetM(a,m);
+  mxSetN(a,n);
+  mxSetPr(a, mxRealloc(mxGetPr(a),sz));
+  if(ComplexFlag == mxCOMPLEX) {
+    mxSetPi(a, mxRealloc(mxGetPi(a),sz));
+  }
+  return a;
+}
+mxArray *mxCreateDoubleMatrixE(int m, int n, 
+			       mxComplexity ComplexFlag)
+{
+  return mxCreateNumericMatrixE(m,n,mxDOUBLE_CLASS,ComplexFlag);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/mexutil.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+#include "mex.h"
+
+mxArray *mxCreateNumericArrayE(int ndim, const int *dims, 
+			       mxClassID class, mxComplexity ComplexFlag);
+mxArray *mxCreateNumericMatrixE(int m, int n, mxClassID class, 
+				mxComplexity ComplexFlag);
+mxArray *mxCreateDoubleMatrixE(int m, int n, 
+			       mxComplexity ComplexFlag);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/mk_multi_index.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function index = mk_multi_index(n, dims, vals)
+% MK_MULTI_INDEX Compute the indices of the submatrix where dims(i)=vals(i).
+% index = mk_multi_index(n, dims, vals)
+% 
+% Example:
+% index = mk_multi_index(3, [1 3], [3 2])
+% gives index = {3, ':', 2}, which will select out dim 1 = 3 and dim 3 = 2
+% So if A(:,:,1)=[1 2;3 4; 5 6]; A(:,:,2)=[7 8; 9 10; 11 12]
+% then A(index{:}) = [11 12]: 
+
+if n==0
+  index = { 1 };
+  return;
+end
+
+index = cell(1,n);
+for i=1:n
+  index{i} = ':';
+end
+for i=1:length(dims)
+  index{dims(i)} = vals(i);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/mk_stochastic.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function [T,Z] = mk_stochastic(T)
+% MK_STOCHASTIC Ensure the argument is a stochastic matrix, i.e., the sum over the last dimension is 1.
+% [T,Z] = mk_stochastic(T)
+%
+% If T is a vector, it will sum to 1.
+% If T is a matrix, each row will sum to 1.
+% If T is a 3D array, then sum_k T(i,j,k) = 1 for all i,j.
+
+% Set zeros to 1 before dividing
+% This is valid since S(j) = 0 iff T(i,j) = 0 for all j
+
+if (ndims(T)==2) & (size(T,1)==1 | size(T,2)==1) % isvector
+  [T,Z] = normalise(T);
+elseif ndims(T)==2 % matrix
+  Z = sum(T,2); 
+  S = Z + (Z==0);
+  norm = repmat(S, 1, size(T,2));
+  T = T ./ norm;
+else % multi-dimensional array
+  ns = size(T);
+  T = reshape(T, prod(ns(1:end-1)), ns(end));
+  Z = sum(T,2);
+  S = Z + (Z==0);
+  norm = repmat(S, 1, ns(end));
+  T = T ./ norm;
+  T = reshape(T, ns);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/mkdirKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function mkdirKPM(dname)
+% function mkdirKPM(dname)
+% If directory does not exist, make it
+% 
+% mkdirKPM('foo\bar\baz') makes subdirectories bar and baz
+% mkdirKPM('foo\bar\baz.txt') makes subdirectories bar 
+
+% convert foo\bar\baz to pathstr=foo\bar, name=baz
+% convert foo\bar\baz.txt to pathstr=foo\bar, name=baz
+[pathstr, name, ext, versn] = fileparts(dname);
+if ~isempty(ext) % we stripped off something after final period
+  % convert foo\bar to pathstr=foo, name=bar
+  % convert foo\bar.bad to pathstr=foo, name=bar.bad
+  [pathstr, name, ext, versn] = fileparts(pathstr);
+  name = sprintf('%s%s', name, ext); % in case there is a period in the directory name
+end
+
+dname = fullfile(pathstr, name);
+if ~exist(dname, 'dir')
+  %fprintf('mkdirKPM: making %s, %s \n', pathstr, name);
+  mkdir(pathstr, name)
+else
+  %fprintf('mkdirKPM: %s already exists\n', dname)
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/montageKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,102 @@
+function h = montageKPM(arg)
+% montageKPM is like the built-in montage, but assumes input is MxNxK or filenames
+%
+% Converts patches (y,x,i) into patches(y,x,1,i)
+% Also, adds a black border aroudn them
+
+if iscell(arg)
+  h= montageFilenames(arg);
+else
+  nr = size(arg,1); nc = size(arg,2); Npatches = size(arg,3);
+  patchesColor = reshape(arg, [nr nc 1 Npatches]);
+  patchesColor = patchesColor ./ max(patchesColor(:));
+  
+  if 1
+    %put a black border around them for display purposes
+    border = 5;
+    bgColor = ones(1,1,class(patchesColor));
+    patchesColorBig = bgColor*ones(nr+2*border, nc+2*border, 1, Npatches, class(patchesColor));
+    %patchesColorBig = zeros(nr+2*border, nc+2*border, 1, Npatches, class(patchesColor));
+    patchesColorBig(border+1:end-border, border+1:end-border, :, :) = patchesColor;
+  else
+    patchesColorBig = patchesColor;
+  end
+  montage(patchesColorBig)
+
+end
+
+%%%%%%%%%%%%%
+
+function h = montageFilenames(filenames)
+
+%[nRows, nCols, nBands, nFrames] = size(a);
+
+% Estimate nMontageColumns and nMontageRows given the desired ratio of
+% Columns to Rows to be one (square montage).
+aspectRatio = 1; 
+nMontageCols = sqrt(aspectRatio * nRows * nFrames / nCols);
+
+% Make sure montage rows and columns are integers. The order in the adjustment
+% matters because the montage image is created horizontally across columns.
+nMontageCols = ceil(nMontageCols); 
+nMontageRows = ceil(nFrames / nMontageCols);
+
+% Create the montage image.
+b = a(1,1); % to inherit type 
+b(1,1) = 0; % from a
+b = repmat(b, [nMontageRows*nRows, nMontageCols*nCols, nBands, 1]);
+
+rows = 1 : nRows; 
+cols = 1 : nCols;
+
+for i = 0:nMontageRows-1
+  for j = 0:nMontageCols-1,
+    k = j + i * nMontageCols + 1;
+    if k <= nFrames
+      b(rows + i * nRows, cols + j * nCols, :) = a(:,:,:,k);
+    else
+      break;
+    end
+  end
+end
+
+if isempty(cm)
+  hh = imshow(b);
+else
+  hh = imshow(b,cm);
+end
+
+if nargout > 0
+    h = hh;
+end
+
+%--------------------------------------------------------------
+%Parse Inputs Function
+
+function [I,map] = parse_inputs(varargin)
+
+% initialize variables
+map = [];
+
+iptchecknargin(1,2,nargin,mfilename);
+iptcheckinput(varargin{1},{'uint8' 'double' 'uint16' 'logical' 'single' ...
+                    'int16'},{},mfilename, 'I, BW, or RGB',1);
+I = varargin{1};
+
+if nargin==2
+  if isa(I,'int16')
+    eid = sprintf('Images:%s:invalidIndexedImage',mfilename);
+    msg1 = 'An indexed image can be uint8, uint16, double, single, or ';
+    msg2 = 'logical.';
+    error(eid,'%s %s',msg1, msg2);
+  end
+  map = varargin{2};
+  iptcheckinput(map,{'double'},{},mfilename,'MAP',1);
+  if ((size(map,1) == 1) && (prod(map) == numel(I)))
+    % MONTAGE(D,[M N P]) OBSOLETE
+    eid = sprintf('Images:%s:obsoleteSyntax',mfilename);
+    msg1 = 'MONTAGE(D,[M N P]) is an obsolete syntax.';
+    msg2 = 'Use multidimensional arrays to represent multiframe images.';
+    error(eid,'%s\n%s',msg1,msg2);    
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/montageKPM2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,69 @@
+function montageKPM2(data)
+% data(y,x,b,f) or data(y,x,f)
+% can be double - uses imagesc to display, not imshow
+% based on imaqmontage
+
+if ndims(data)==3
+  nr = size(data,1); nc = size(data,2); Npatches = size(data,3); Nbands = 1;
+  data = reshape(data, [nr nc Nbands Npatches]);
+else
+  nr = size(data,1); nc = size(data,2); Nbands = size(data,3); Npatches = size(data,4);
+end
+nativeVal = data(1, 1);
+dataOrig = data;
+
+%put a black border around them for display purposes
+border = 5;
+bgColor = min(data(:));
+%bgColor = max(data(:));
+data = bgColor*ones(nr+2*border, nc+2*border, Nbands, Npatches, class(data));
+data(border+1:end-border, border+1:end-border, :, :) = dataOrig;
+
+[width, height, bands, nFrames] = size(data);
+
+% Determine the number of axis rows and columns.
+axCols = sqrt(nFrames);
+if (axCols<1)
+    % In case we have a slim image.
+    axCols = 1;
+end
+axRows = nFrames/axCols;
+if (ceil(axCols)-axCols) < (ceil(axRows)-axRows),
+    axCols = ceil(axCols);
+    axRows = ceil(nFrames/axCols);
+else
+    axRows = ceil(axRows); 
+    axCols = ceil(nFrames/axRows);
+end
+
+% Size the storage to hold all frames.
+storage = repmat(nativeVal, [axRows*width, axCols*height, bands, 1]);
+
+% Fill the storage up with data pixels.
+rows = 1:width; 
+cols = 1:height;
+for i=0:axRows-1,
+  for j=0:axCols-1,
+    k = j+i*axCols+1;
+    if k<=nFrames,
+      storage(rows+i*width, cols+j*height, :) = data(:,:,:,k);
+    else
+      break;
+    end
+  end
+end
+
+
+% Display the tiled frames nicely and 
+% pop the window forward.
+im = imagesc(storage);
+
+ax = get(im, 'Parent');
+fig = get(ax, 'Parent');
+set(ax, 'XTick', [], 'YTick', [])
+figure(fig)
+
+% If working with single band images, update the colormap.
+if 0 % bands==1,
+    colormap(gray);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/montageKPM3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function montageKPM3(data)
+% data{f}(y,x,b) - each frame can have a different size (can can even be empty)
+
+data2 = cell2matPad(data);
+montageKPM2(data2)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/mult_by_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function bigT = mult_by_table(bigT, bigdom, bigsz, smallT, smalldom, smallsz)
+% MULT_BY_TABLE 
+% bigT = mult_by_table(bigT, bigdom, bigsz, smallT, smalldom, smallsz)
+%
+
+Ts = extend_domain_table(smallT, smalldom, smallsz, bigdom, bigsz);
+bigT(:) = bigT(:) .* Ts(:); % must have bigT(:) on LHS to preserve shape
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/myintersect.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function C = myintersect(A,B)
+% MYINTERSECT Intersection of two sets of positive integers (much faster than built-in intersect)
+% C = myintersect(A,B)
+
+A = A(:)'; B = B(:)';
+
+if isempty(A)
+  ma = 0;
+else
+  ma = max(A);
+end
+
+if isempty(B)
+  mb = 0;
+else
+  mb = max(B);
+end
+
+if ma==0 | mb==0
+  C = [];
+else
+  %bits = sparse(1, max(ma,mb));
+  bits = zeros(1, max(ma,mb));
+  bits(A) = 1;
+  C = B(logical(bits(B)));  
+end
+
+%sum( bitget( bitand( cliquesb(i), cliquesb(j) ), 1:52 ) ); 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/myismember.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function p = myismember(a,A)
+% MYISMEMBER Is 'a' an element of a set of positive integers? (much faster than built-in ismember)
+% p = myismember(a,A)
+
+%if isempty(A) | a < min(A) | a > max(A)  % slow
+
+if length(A)==0
+  p = 0;
+elseif a < min(A)
+  p = 0;
+elseif a > max(A)
+  p = 0;
+else
+  bits = zeros(1, max(A));
+  bits(A) = 1;
+  p = bits(a);
+end
+p = logical(p);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/myones.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function T = myones(sizes)
+% MYONES Like the built-in ones, except myones(k) produces a k*1 vector instead of a k*k matrix,
+% T = myones(sizes)
+
+if length(sizes)==0
+  T = 1;
+elseif length(sizes)==1
+  T = ones(sizes, 1);
+else
+  T = ones(sizes(:)');
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/myplot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+colors =  ['r' 'b' 'k' 'g' 'c' 'y' 'm' ...
+	   'r' 'b' 'k' 'g' 'c' 'y' 'm'];
+symbols = ['o' 'x' 's' '>' '<' '^' 'v' ...
+	   '*' 'p' 'h' '+' 'd' 'o' 'x'];
+for i=1:length(colors)
+  styles{i} = sprintf('-%s%s', colors(i), symbols(i));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/myrand.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function T = myrand(sizes)
+% MYRAND Like the built-in rand, except myrand(k) produces a k*1 vector instead of a k*k matrix,
+% T = myrand(sizes)
+
+if length(sizes)==0
+  warning('myrand[]');
+  T = rand(1,1);
+elseif length(sizes)==1
+  T = rand(sizes, 1);
+else
+  T = rand(sizes);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/myrepmat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function T = myrepmat(T, sizes)
+% MYREPMAT Like the built-in repmat, except myrepmat(T,n) == repmat(T,[n 1])
+% T = myrepmat(T, sizes)
+
+if length(sizes)==1
+  T = repmat(T, [sizes 1]);
+else
+  T = repmat(T, sizes(:)');
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/myreshape.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function T = myreshape(T, sizes)
+% MYRESHAPE Like the built-in reshape, except myreshape(T,n) == reshape(T,[n 1])
+% T = myreshape(T, sizes)
+
+if length(sizes)==0
+  return;
+elseif length(sizes)==1
+  T = reshape(T, [sizes 1]);
+else
+  T = reshape(T, sizes(:)');
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/mysetdiff.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function C = mysetdiff(A,B)
+% MYSETDIFF Set difference of two sets of positive integers (much faster than built-in setdiff)
+% C = mysetdiff(A,B)
+% C = A \ B = { things in A that are not in B }
+%
+% Original by Kevin Murphy, modified by Leon Peshkin
+
+if isempty(A)
+    C = [];
+    return;
+elseif isempty(B)
+    C = A;
+    return; 
+else % both non-empty
+    bits = zeros(1, max(max(A), max(B)));
+    bits(A) = 1;
+    bits(B) = 0;
+    C = A(logical(bits(A)));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/mysize.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function sz = mysize(M)
+% MYSIZE Like the built-in size, except it returns n if M is a vector of length n, and 1 if M is a scalar.
+% sz = mysize(M)
+% 
+% The behavior is best explained by examples
+% - M = rand(1,1),   mysize(M) = 1,      size(M) = [1 1]
+% - M = rand(2,1),   mysize(M) = 2,      size(M) = [2 1]
+% - M = rand(1,2),   mysize(M) = 2,      size(M) = [1 2]
+% - M = rand(2,2,1), mysize(M) = [2 2],  size(M) = [2 2]
+% - M = rand(1,2,1), mysize(M) = 2,      size(M) = [1 2]
+
+if isvectorBNT(M)
+  sz = length(M);
+else
+  sz = size(M);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/mysubset.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function p=mysubset(small,large)
+% MYSUBSET Is the small set of +ve integers a subset of the large set?
+% p = mysubset(small, large)
+
+% Surprisingly, this is not built-in.
+
+if isempty(small)
+  p = 1; % isempty(large);
+else
+  p = length(myintersect(small,large)) == length(small);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/mysymsetdiff.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function C = mysymsetdiff(A,B)
+% MYSYMSETDIFF Symmetric set difference of two sets of positive integers (much faster than built-in setdiff)
+% C = mysetdiff(A,B)
+% C = (A\B) union (B\A) = { things that A and B don't have in common }
+
+if isempty(A)
+  ma = 0;
+else
+  ma = max(A);
+end
+
+if isempty(B)
+  mb = 0;
+else
+  mb = max(B);
+end
+
+if ma==0 
+  C = B;
+elseif mb==0
+  C = A;
+else % both non-empty
+  m = max(ma,mb);
+  bitsA = sparse(1, m);
+  bitsA(A) = 1;
+  bitsB = sparse(1, m);
+  bitsB(B) = 1;
+  C = find(xor(bitsA, bitsB));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/myunion.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function C = myunion(A,B)
+% MYUNION Union of two sets of positive integers (much faster than built-in union)
+% C = myunion(A,B)
+
+if isempty(A)
+  ma = 0;
+else
+  ma = max(A);
+end
+
+if isempty(B)
+  mb = 0;
+else
+  mb = max(B);
+end
+
+if ma==0 & mb==0
+  C = [];
+elseif ma==0 & mb>0
+  C = B;
+elseif ma>0 & mb==0
+  C = A;
+else
+  %bits = sparse(1, max(ma,mb));
+  bits = zeros(1, max(ma,mb));
+  bits(A) = 1;
+  bits(B) = 1;
+  C = find(bits);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/nchoose2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+function c = nchoose2(v, f)
+%NCHOOSE2 All combinations of N elements taken two at a time.
+%
+%   NCHOOSE2(1:N) or NCHOOSEK(V) where V is a vector of length N,
+%   produces a matrix with N*(N-1)/2 rows and K columns. Each row of
+%   the result has K of the elements in the vector V.
+%
+%   NCHOOSE2(N,FLAG) is the same as NCHOOSE2(1:N) but faster.
+%
+%   NCHOOSE2(V) is much faster than NCHOOSEK(V,2).
+%
+%   See also NCHOOSEK, PERMS.
+
+%   Author:      Peter J. Acklam
+%   Time-stamp:  2000-03-03 13:03:59
+%   E-mail:      jacklam@math.uio.no
+%   URL:         http://www.math.uio.no/~jacklam
+
+   nargs = nargin;
+   if nargs < 1
+      error('Not enough input arguments.');
+   elseif nargs == 1
+      v = v(:);
+      n = length(v);
+   elseif nargs == 2
+      n = v;
+   else
+      error('Too many input arguments.');
+   end
+
+   [ c(:,2), c(:,1) ] = find( tril( ones(n), -1 ) );
+
+   if nargs == 1
+      c = v(c);
+   end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/ncols.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function c = cols(x)
+% COLS    The number of columns.
+% COLS is a more readable alternative to size(x,2).
+c = size(x,2);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/nonmaxsup.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+% NONMAXSUP - Non-maximal Suppression
+%
+% Usage:  cim = nonmaxsup(im, radius)
+%
+% Arguments:   
+%            im     - image to be processed.
+%            radius - radius of region considered in non-maximal
+%                     suppression (optional). Typical values to use might
+%                     be 1-3.  Default is 1.
+%
+% Returns:
+%            cim    - image with pixels that are not maximal within a 
+%                     square neighborhood zeroed out.
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function cim = nonmaxsup(m, radius)
+  if (nargin == 1) radius = 1; end
+  % Extract local maxima by performing a grey scale morphological
+  % dilation and then finding points in the corner strength image that
+  % match the dilated image and are also greater than the threshold.
+  sze = 2 * radius + 1;                   % Size of mask.
+  mx = ordfilt2(m, sze^2, ones(sze));   % Grey-scale dilate.
+  cim = sparse(m .* (m == mx));
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/normalise.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function [M, z] = normalise(A, dim)
+% NORMALISE Make the entries of a (multidimensional) array sum to 1
+% [M, c] = normalise(A)
+% c is the normalizing constant
+%
+% [M, c] = normalise(A, dim)
+% If dim is specified, we normalise the specified dimension only,
+% otherwise we normalise the whole array.
+
+if nargin < 2
+  z = sum(A(:));
+  % Set any zeros to one before dividing
+  % This is valid, since c=0 => all i. A(i)=0 => the answer should be 0/1=0
+  s = z + (z==0);
+  M = A / s;
+elseif dim==1 % normalize each column
+  z = sum(A);
+  s = z + (z==0);
+  %M = A ./ (d'*ones(1,size(A,1)))';
+  M = A ./ repmatC(s, size(A,1), 1);
+else
+  % Keith Battocchi - v. slow because of repmat
+  z=sum(A,dim);
+  s = z + (z==0);
+  L=size(A,dim);
+  d=length(size(A));
+  v=ones(d,1);
+  v(dim)=L;
+  %c=repmat(s,v);
+  c=repmat(s,v');
+  M=A./c;
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/normaliseC.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+/* C mex version of normalise.m in misc directory  */
+
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+  double *T, *sum_ptr, sum;
+  int i, N;  
+
+  plhs[0] = mxDuplicateArray(prhs[0]);
+  T = mxGetPr(plhs[0]);
+  if(mxIsSparse(plhs[0])) N = mxGetJc(plhs[0])[mxGetN(plhs[0])];
+  else N = mxGetNumberOfElements(plhs[0]);
+
+  plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);
+  sum_ptr = mxGetPr(plhs[1]);
+
+  sum = 0;
+  for (i = 0; i < N; i++) {
+    sum += *T++;
+  }
+  T = mxGetPr(plhs[0]);
+  if (sum > 0) {
+    for (i = 0; i < N; i++) {
+      *T++ /= sum;
+    }
+  } 
+  *sum_ptr = sum;
+}
Binary file toolboxes/FullBNT-1.0.7/KPMtools/normaliseC.dll has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/normalize.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function [M, z] = normalise(A, dim)
+% NORMALISE Make the entries of a (multidimensional) array sum to 1
+% [M, c] = normalise(A)
+% c is the normalizing constant
+%
+% [M, c] = normalise(A, dim)
+% If dim is specified, we normalise the specified dimension only,
+% otherwise we normalise the whole array.
+
+if nargin < 2
+  z = sum(A(:));
+  % Set any zeros to one before dividing
+  % This is valid, since c=0 => all i. A(i)=0 => the answer should be 0/1=0
+  s = z + (z==0);
+  M = A / s;
+elseif dim==1 % normalize each column
+  z = sum(A);
+  s = z + (z==0);
+  %M = A ./ (d'*ones(1,size(A,1)))';
+  M = A ./ repmatC(s, size(A,1), 1);
+else
+  % Keith Battocchi - v. slow because of repmat
+  z=sum(A,dim);
+  s = z + (z==0);
+  L=size(A,dim);
+  d=length(size(A));
+  v=ones(d,1);
+  v(dim)=L;
+  %c=repmat(s,v);
+  c=repmat(s,v');
+  M=A./c;
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/nrows.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function r = rows(x)
+% ROWS      The number of rows.
+% ROWS is a more readable alternative to size(x,1).
+r = size(x,1);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/num2strcell.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function c = num2strcell(n, format)
+% num2strcell Convert vector of numbers to cell array of strings
+% function c = num2strcell(n, format)
+%
+% If format is omitted, we use
+% c{i} = sprintf('%d', n(i))
+
+if nargin < 2, format = '%d'; end
+
+N = length(n);
+c = cell(1,N);
+for i=1:N
+  c{i} = sprintf(format, n(i));
+end
+  
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/optimalMatching.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,90 @@
+% MATCH - Solves the weighted bipartite matching (or assignment)
+%         problem.
+%
+% Usage:  a = match(C);
+%
+% Arguments:   
+%         C     - an m x n cost matrix; the sets are taken to be
+%                 1:m and 1:n; C(i, j) gives the cost of matching
+%                 items i (of the first set) and j (of the second set)
+%
+% Returns:
+%
+%         a     - an m x 1 assignment vector, which gives the
+%                 minimum cost assignment.  a(i) is the index of
+%                 the item of 1:n that was matched to item i of
+%                 1:m.  If item i (of 1:m) was not matched to any 
+%                 item of 1:n, then a(i) is zero.
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [a] = optimalMatching(C)
+
+% Trivial cases:
+[p, q] = size(C);
+if (p == 0)
+  a = []; 
+  return;
+elseif (q == 0)
+  a = zeros(p, 1);
+  return;
+end
+
+
+if  0
+% First, reduce the problem by making easy optimal matches.  If two
+% elements agree that they are the best match, then match them up.
+[x, a] = min(C, [], 2);
+[y, b] = min(C, [], 1);
+u = find(1:p ~= b(a(:)));
+a(u) = 0;
+v = find(1:q ~= a(b(:))');
+C = C(u, v);
+if (isempty(C)) return; end
+end
+
+% Get the (new) size of the two sets, u and v.
+[m, n] = size(C);
+
+%mx = realmax;
+mx = 2*max(C(:));
+mn = -2*min(C(:));
+% Pad the affinity matrix to be square
+if (m < n)
+  C = [C; mx * ones(n - m, n)];
+elseif (n < m)
+  C = [C, mx * ones(m, m - n)];
+end
+
+% Run the Hungarian method.  First replace infinite values by the
+% largest (or smallest) finite values.
+C(find(isinf(C) & (C > 0))) = mx;
+C(find(isinf(C) & (C < 0))) = mn;
+%fprintf('running hungarian\n');
+[b, cost] = hungarian(C');
+
+% Extract only the real assignments
+ap = b(1:m)';
+ap(find(ap > n)) = 0;
+
+a = ap; 
+%% Incorporate this sub-assignment into the complete assignment
+%  k = find(ap);
+%  a(u(k)) = v(ap(k));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/optimalMatchingTest.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+% Consider matching sources to detections
+
+%  s1 d2  
+%         s2 d3
+%  d1
+
+a  = optimalMatching([52;0.01])
+
+% sources(:,i) = [x y] coords
+sources = [0.1 0.7; 0.6 0.4]';
+detections = [0.2 0.2; 0.2 0.8; 0.7 0.1]';
+dst = sqdist(sources, detections)
+
+% a = [2 3] which means s1-d2, s2-d3
+a = optimalMatching(dst)
+
+% a = [0 1 2] which means d1-0, d2-s1, d3-s2
+a = optimalMatching(dst')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/partitionData.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function  varargout = partitionData(Ndata, varargin)
+% PARTITIONDATA Partition a vector of indices into random sets
+% [a,b,c,...] = partitionData(N, 0.3, 0.2, 0.5, ...)
+%
+% Examples:
+% [a,b,c]=partitionData(105,0.3,0.2,0.5);
+% a= 1:30, b=32:52, c=52:105 (last bin gets all the left over)
+
+Npartitions = length(varargin);
+perm = randperm(Ndata);
+%perm = 1:Ndata;
+ndx = 1;
+for i=1:Npartitions
+  pc(i) = varargin{i};
+  Nbin(i) = fix(Ndata*pc(i));
+  low(i) = ndx;
+  if i==Npartitions
+    high(i) = Ndata;
+  else
+    high(i) = low(i)+Nbin(i)-1;
+  end
+  varargout{i} = perm(low(i):high(i));
+  ndx = ndx+Nbin(i);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/partition_matrix_vec.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function [m1, m2, K11, K12, K21, K22] = partition_matrix_vec(m, K, n1, n2, bs)
+% PARTITION_MATRIX_VEC Partition a vector and matrix into blocks.
+% [m1, m2, K11, K12, K21, K22] = partition_matrix_vec(m, K, blocks1, blocks2, bs)
+%
+% bs(i) = block size of i'th node
+%
+% Example:
+% n1 = [6 8], n2 = [5], bs = [- - - - 2 1 - 2], where - = don't care
+% m = [0.1 0.2   0.3   0.4 0.5], K = some 5*5 matrix,
+% So E[X5] = [0.1 0.2], E[X6] = [0.3], E[X8] = [0.4 0.5]
+% m1 = [0.3 0.4 0.5], m2 = [0.1 0.2];
+
+dom = myunion(n1, n2);
+n1i = block(find_equiv_posns(n1, dom), bs(dom));
+n2i = block(find_equiv_posns(n2, dom), bs(dom));
+m1 = m(n1i);
+m2 = m(n2i);
+K11 = K(n1i, n1i);
+K12 = K(n1i, n2i);
+K21 = K(n2i, n1i);
+K22 = K(n2i, n2i);  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/pca_kpm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function [pc_vec]=pca_kpm(features,N, method);
+% PCA_KPM Compute top N principal components using eigs or svd.
+% [pc_vec]=pca_kpm(features,N) 
+%
+% features(:,i) is the i'th example - each COLUMN is an observation
+% pc_vec(:,j) is the j'th basis function onto which you should project the data
+% using pc_vec' * features
+
+[d ncases] = size(features);
+fm=features-repmat(mean(features,2), 1, ncases);
+
+
+if method==1 % d*d < d*ncases
+  fprintf('pca_kpm eigs\n');
+  options.disp = 0;
+  C = cov(fm'); % d x d matrix
+  [pc_vec, evals] = eigs(C, N, 'LM', options);
+else 
+  % [U,D,V] = SVD(fm), U(:,i)=evec of fm fm', V(:,i) = evec of fm' fm
+  fprintf('pca_kpm svds\n');
+  [U,D,V] = svds(fm', N);
+  pc_vec = V;
+end
+
+if 0
+X = randn(5,3);
+X = X-repmat(mean(X),5,1);
+C = X'*X;
+C2=cov(X)
+[U,D,V]=svd(X);
+[V2,D2]=eig(X)
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/pca_netlab.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+function [PCcoeff, PCvec] = pca(data, N)
+%PCA	Principal Components Analysis
+%
+%	Description
+%	 PCCOEFF = PCA(DATA) computes the eigenvalues of the covariance
+%	matrix of the dataset DATA and returns them as PCCOEFF.  These
+%	coefficients give the variance of DATA along the corresponding
+%	principal components.
+%
+%	PCCOEFF = PCA(DATA, N) returns the largest N eigenvalues.
+%
+%	[PCCOEFF, PCVEC] = PCA(DATA) returns the principal components as well
+%	as the coefficients.  This is considerably more computationally
+%	demanding than just computing the eigenvalues.
+%
+%	See also
+%	EIGDEC, GTMINIT, PPCA
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if nargin == 1
+   N = size(data, 2);
+end
+
+if nargout == 1
+   evals_only = logical(1);
+else
+   evals_only = logical(0);
+end
+
+if N ~= round(N) | N < 1 | N > size(data, 2)
+   error('Number of PCs must be integer, >0, < dim');
+end
+
+% Find the sorted eigenvalues of the data covariance matrix
+if evals_only
+   PCcoeff = eigdec(cov(data), N);
+else
+  [PCcoeff, PCvec] = eigdec(cov(data), N);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/pick.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function [i,j] = pick(ndx)
+% PICK Pick an entry at random from a vector
+% function [i,j] = pick(ndx)
+%
+% i = ndx(j) for j ~ U(1:length(ndx))
+
+dist = normalize(ones(1,length(ndx)));
+j = sample_discrete(dist);
+i = ndx(j);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plotBox.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [h, ht] =plotBox(box, col, str)
+% function h=plotBox(box, col, str)
+%
+% box = [xlow xhigh ylow yhigh]
+% col = color (default - red)
+% str = string printed at center (default '')
+
+if nargin < 2, col = 'r'; end
+if nargin < 3, str = ''; end
+
+box = double(box); % fails on single
+
+h = plot([box(1) box(2) box(2) box(1) box(1)], [ box(3) box(3) box(4) box(4) box(3)]);
+set(h, 'color', col);
+set(h, 'linewidth', 2);
+if ~isempty(str)
+  xc = mean(box(1:2));
+  yc = mean(box(3:4));
+  ht = text(xc, yc, str);
+else
+  ht = [];
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plotColors.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function styles =  plotColors()
+
+colors =  ['r' 'b' 'k' 'g' 'c' 'y' 'm' ...
+	   'r' 'b' 'k' 'g' 'c' 'y' 'm'];
+symbols = ['o' 'x' '+' '>' '<' '^' 'v' ...
+	   '*' 'p' 'h' 's' 'd' 'o' 'x'];
+for i=1:length(colors)
+  styles{i} = sprintf('-%s%s', colors(i), symbols(i));
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plotROC.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function [falseAlarmRate, detectionRate, area, th] = plotROC(confidence, testClass, col, varargin)
+% function [falseAlarmRate, detectionRate, area, th] = plotroc(confidence, testClass, color)
+
+if nargin < 3, col = []; end
+
+[scale01] = process_options(varargin, 'scale01', 1);
+
+[falseAlarmRate detectionRate area th] = computeROC(confidence, testClass);
+
+if ~isempty(col)
+    h=plot(falseAlarmRate, detectionRate, [col '-']);
+    %set(h, 'linewidth', 2);
+    ex = 0.05*max(falseAlarmRate);
+    ey = 0.05;
+    if scale01
+      axis([0-ex max(falseAlarmRate)+ex 0-ey 1+ey])
+    else
+      % zoom in on the top left corner
+      axis([0-ex max(falseAlarmRate)*0.5+ex 0.5-ey 1+ey])
+    end
+    grid on
+    ylabel('detection rate')
+    %xlabel('# false alarms')
+    xlabel('false alarm rate')
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plotROCkpm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,69 @@
+function [falseAlarmRate, detectionRate, area, th] = plotROC(confidence, testClass, col, varargin)
+% You pass the scores and the classes, and the function returns the false
+% alarm rate and the detection rate for different points across the ROC.
+%
+% [faR, dR] = plotROC(score, class)
+%
+%  faR (false alarm rate) is uniformly sampled from 0 to 1
+%  dR (detection rate) is computed using the scores.
+%
+% class = 0 => target absent
+% class = 1 => target present
+%
+% score is the output of the detector, or any other measure of detection.
+% There is no plot unless you add a third parameter that is the color of
+% the graph. For instance:
+% [faR, dR] = plotROC(score, class, 'r')
+%
+% faR, dR are size 1x1250
+
+if nargin < 3, col = []; end
+[scale01] = process_options(varargin, 'scale01', 1);
+
+S = rand('state');
+rand('state',0);
+confidence = confidence + rand(size(confidence))*10^(-10);
+rand('state',S)
+
+ndxAbs = find(testClass==0); % absent
+ndxPres = find(testClass==1); % present
+
+[th, j] = sort(confidence(ndxAbs));
+th = th(fix(linspace(1, length(th), 1250))); 
+
+cAbs = confidence(ndxAbs);
+cPres = confidence(ndxPres);
+for t=1:length(th)
+  if length(ndxPres) == 0
+    detectionRate(t) = 0;
+  else
+    detectionRate(t)  = sum(cPres>=th(t)) / length(ndxPres);
+  end
+  if length(ndxAbs) == 0
+    falseAlarmRate(t) = 0;
+  else
+    falseAlarmRate(t) = sum(cAbs>=th(t)) / length(ndxAbs);
+  end
+  
+  %detectionRate(t)  = sum(confidence(ndxPres)>=th(t)) / length(ndxPres);
+  %falseAlarmRate(t) = sum(confidence(ndxAbs)>=th(t)) / length(ndxAbs);
+  %detections(t)     = sum(confidence(ndxPres)>=th(t));
+  %falseAlarms(t)    = sum(confidence(ndxAbs)>=th(t));
+end
+
+area = sum(abs(falseAlarmRate(2:end) - falseAlarmRate(1:end-1)) .* detectionRate(2:end));
+
+if ~isempty(col)
+    h=plot(falseAlarmRate, detectionRate, [col '-']);
+    %set(h, 'linewidth', 2);
+    e = 0.05;
+    if scale01
+      axis([0-e 1+e 0-e 1+e])
+    else
+      % zoom in on the top left corner
+      axis([0-e 0.5+e 0.5-e 1+e])
+    end
+    grid on
+    ylabel('detection rate')
+    xlabel('false alarm rate')
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plot_axis_thru_origin.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function plot_axis_thru_origin()
+
+lnx=line(get(gca,'xlim'),[0 0]); lny=line([0 0],get(gca,'ylim'));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plot_ellipse.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+% PLOT_ELLIPSE
+% h=plot_ellipse(x,y,theta,a,b)
+%
+% This routine plots an ellipse with centre (x,y), axis lengths a,b
+% with major axis at an angle of theta radians from the horizontal.
+
+%
+% Author: P. Fieguth
+%         Jan. 98
+%
+%http://ocho.uwaterloo.ca/~pfieguth/Teaching/372/plot_ellipse.m
+
+function h=plot_ellipse(x,y,theta,a,b)
+
+np = 100;
+ang = [0:np]*2*pi/np;
+R = [cos(theta) -sin(theta); sin(theta) cos(theta)];
+pts = [x;y]*ones(size(ang)) + R*[cos(ang)*a; sin(ang)*b];
+h=plot( pts(1,:), pts(2,:) );
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plot_matrix.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+function plot_matrix(G, bw)
+% PLOT_MATRIX Plot a 2D matrix as a grayscale image, and label the axes
+%
+% plot_matrix(M)
+%
+% For 0/1 matrices (eg. adjacency matrices), use
+% plot_matrix(M,1)
+
+if nargin < 2, bw = 0; end
+
+if 0
+  imagesc(G)
+  %image(G)
+  %colormap([1 1 1; 0 0 0]); % black squares on white background
+  %colormap(gray)
+  grid on
+  n = length(G);
+  
+  % shift the grid lines so they don't intersect the squares
+  set(gca,'xtick',1.5:1:n);
+  set(gca,'ytick',1.5:1:n);
+  
+  % Turn off the confusing labels, which are fractional
+  % Ideally we could shift the labels to lie between the axis lines...
+%  set(gca,'xticklabel', []);
+%  set(gca,'yticklabel', []);
+else
+  % solution provided by Jordan Rosenthal <jr@ece.gatech.edu>
+  % You can plot the grid lines manually:
+  % This uses the trick that a point with a value nan does not get plotted.
+  imagesc(G);
+  if bw
+    colormap([1 1 1; 0 0 0]);
+  end
+  n = length(G);
+  x = 1.5:1:n;
+  x = [ x; x; repmat(nan,1,n-1) ];
+  y = [ 0.5 n+0.5 nan ].';
+  y = repmat(y,1,n-1);
+  x = x(:);
+  y = y(:);
+  line(x,y,'linestyle',':','color','k');
+  line(y,x,'linestyle',':','color','k');
+  set(gca,'xtick',1:n)
+  set(gca,'ytick',1:n)
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plot_polygon.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function out=plot_polygon(p, args, close_loop)
+% PLOT_POLYGON
+% function handle=plot_polygon(p, args, close_loop)
+% p(1,i), p(2,i) are the x/y coords of point i.
+% If non-empty, args are passed thru to the plot command.
+% If close_loop = 1, connect the last point to the first 
+
+% All rights reserved. Documentation updated April 1999.
+% Matt Kawski. http://math.la.asu.edu/~kawski
+% He calls it pplot
+
+if nargin < 2, args = []; end
+if nargin < 3, close_loop = 0; end
+
+if close_loop
+  p = [p p(:,1)];
+end
+
+if isempty(args)
+   out=plot(p(1,:),p(2,:));
+else   
+   out=plot(p(1,:),p(2,:),args);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plotcov2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+% PLOTCOV2 - Plots a covariance ellipse with major and minor axes
+%            for a bivariate Gaussian distribution.
+%
+% Usage:
+%   h = plotcov2(mu, Sigma[, OPTIONS]);
+% 
+% Inputs:
+%   mu    - a 2 x 1 vector giving the mean of the distribution.
+%   Sigma - a 2 x 2 symmetric positive semi-definite matrix giving
+%           the covariance of the distribution (or the zero matrix).
+%
+% Options:
+%   'conf'    - a scalar between 0 and 1 giving the confidence
+%               interval (i.e., the fraction of probability mass to
+%               be enclosed by the ellipse); default is 0.9.
+%   'num-pts' - the number of points to be used to plot the
+%               ellipse; default is 100.
+%
+% This function also accepts options for PLOT.
+%
+% Outputs:
+%   h     - a vector of figure handles to the ellipse boundary and
+%           its major and minor axes
+%
+% See also: PLOTCOV3
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function h = plotcov2(mu, Sigma, varargin)
+
+if size(Sigma) ~= [2 2], error('Sigma must be a 2 by 2 matrix'); end
+if length(mu) ~= 2, error('mu must be a 2 by 1 vector'); end
+
+[p, ...
+ n, ...
+ plot_opts] = process_options(varargin, 'conf', 0.9, ...
+					'num-pts', 100);
+h = [];
+holding = ishold;
+if (Sigma == zeros(2, 2))
+  z = mu;
+else
+  % Compute the Mahalanobis radius of the ellipsoid that encloses
+  % the desired probability mass.
+  k = conf2mahal(p, 2);
+  % The major and minor axes of the covariance ellipse are given by
+  % the eigenvectors of the covariance matrix.  Their lengths (for
+  % the ellipse with unit Mahalanobis radius) are given by the
+  % square roots of the corresponding eigenvalues.
+  if (issparse(Sigma))
+    [V, D] = eigs(Sigma);
+  else
+    [V, D] = eig(Sigma);
+  end
+  % Compute the points on the surface of the ellipse.
+  t = linspace(0, 2*pi, n);
+  u = [cos(t); sin(t)];
+  w = (k * V * sqrt(D)) * u;
+  z = repmat(mu, [1 n]) + w;
+  % Plot the major and minor axes.
+  L = k * sqrt(diag(D));
+  h = plot([mu(1); mu(1) + L(1) * V(1, 1)], ...
+	   [mu(2); mu(2) + L(1) * V(2, 1)], plot_opts{:});
+  hold on;
+  h = [h; plot([mu(1); mu(1) + L(2) * V(1, 2)], ...
+	       [mu(2); mu(2) + L(2) * V(2, 2)], plot_opts{:})];
+end
+
+h = [h; plot(z(1, :), z(2, :), plot_opts{:})];
+if (~holding) hold off; end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plotcov2New.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,119 @@
+% PLOTCOV2 - Plots a covariance ellipsoid with axes for a bivariate
+%            Gaussian distribution.
+%
+% Usage:
+%   [h, s] = plotcov2(mu, Sigma[, OPTIONS]);
+% 
+% Inputs:
+%   mu    - a 2 x 1 vector giving the mean of the distribution.
+%   Sigma - a 2 x 2 symmetric positive semi-definite matrix giving
+%           the covariance of the distribution (or the zero matrix).
+%
+% Options:
+%   'conf'      - a scalar between 0 and 1 giving the confidence
+%                 interval (i.e., the fraction of probability mass to
+%                 be enclosed by the ellipse); default is 0.9.
+%   'num-pts'   - if the value supplied is n, then (n + 1)^2 points
+%                 to be used to plot the ellipse; default is 20.
+%   'label'     - if non-empty, a string that will label the
+%                 ellipsoid (default: [])
+%   'plot-axes' - a 0/1 flag indicating if the ellipsoid's axes
+%                 should be plotted (default: 1)
+%   'plot-opts' - a cell vector of arguments to be handed to PLOT3
+%                 to contol the appearance of the axes, e.g., 
+%                 {'Color', 'g', 'LineWidth', 1}; the default is {}
+%   'fill-color' - a color specifier; is this is not [], the
+%                  covariance ellipse is filled with this color
+%                  (default: [])
+% 
+% Outputs:
+%   h     - a vector of handles on the axis lines
+%
+% See also: PLOTCOV3
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [h, s] = plotcov2New(mu, Sigma, varargin)
+
+h = [];
+s = [];
+
+if size(Sigma) ~= [2 2], error('Sigma must be a 2 by 2 matrix'); end
+if length(mu) ~= 2, error('mu must be a 2 by 1 vector'); end
+
+Sigma = checkpsd(Sigma);
+
+[p, ...
+ n, ...
+ label, ...
+ plot_axes, ...
+ plot_opts, ...
+ fill_color] = process_options(varargin, 'conf', 0.9, ...
+			       'num-pts', 20, ...
+			       'label', [], ...
+			       'plot-axes', 1, ...
+			       'plot-opts', {}, ...
+			       'fill-color', []);
+holding = ishold;
+% Compute the Mahalanobis radius of the ellipsoid that encloses
+% the desired probability mass.
+k = conf2mahal(p, 2);
+% Scale the covariance matrix so the confidence region has unit
+% Mahalanobis distance.
+Sigma = Sigma * k;
+% The axes of the covariance ellipse are given by the eigenvectors of
+% the covariance matrix.  Their lengths (for the ellipse with unit
+% Mahalanobis radius) are given by the square roots of the
+% corresponding eigenvalues.
+[V, D] = eig(full(Sigma));
+V = real(V);
+D = real(D);
+D = abs(D);
+
+% Compute the points on the boundary of the ellipsoid.
+t = linspace(0, 2*pi, n);
+u = [cos(t(:))'; sin(t(:))'];
+w = (V * sqrt(D)) * u;
+z = repmat(mu(:), [1 n]) + w;
+h = [h; plot(z(1, :), z(2, :), plot_opts{:})];
+if (~isempty(fill_color))
+  s = patch(z(1, :), z(2, :), fill_color);
+end
+
+% Plot the axes.
+if (plot_axes)
+  hold on;
+  L = sqrt(diag(D));
+  h = plot([mu(1); mu(1) + L(1) * V(1, 1)], ...
+	   [mu(2); mu(2) + L(1) * V(2, 1)], plot_opts{:});
+  h = [h; plot([mu(1); mu(1) + L(2) * V(1, 2)], ...
+	       [mu(2); mu(2) + L(2) * V(2, 2)], plot_opts{:})];
+end
+
+
+if (~isempty(label))
+  th = text(mu(1), mu(2), label);
+  set(th, 'FontSize', 18);
+  set(th, 'FontName', 'Times');
+  set(th, 'FontWeight', 'bold');
+  set(th, 'FontAngle', 'italic');
+  set(th, 'HorizontalAlignment', 'center');
+end
+
+if (~holding & plot_axes) hold off; end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plotcov3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,109 @@
+% PLOTCOV3 - Plots a covariance ellipsoid with axes for a trivariate
+%            Gaussian distribution.
+%
+% Usage:
+%   [h, s] = plotcov3(mu, Sigma[, OPTIONS]);
+% 
+% Inputs:
+%   mu    - a 3 x 1 vector giving the mean of the distribution.
+%   Sigma - a 3 x 3 symmetric positive semi-definite matrix giving
+%           the covariance of the distribution (or the zero matrix).
+%
+% Options:
+%   'conf'      - a scalar between 0 and 1 giving the confidence
+%                 interval (i.e., the fraction of probability mass to
+%                 be enclosed by the ellipse); default is 0.9.
+%   'num-pts'   - if the value supplied is n, then (n + 1)^2 points
+%                 to be used to plot the ellipse; default is 20.
+%   'plot-opts' - a cell vector of arguments to be handed to PLOT3
+%                 to contol the appearance of the axes, e.g., 
+%                 {'Color', 'g', 'LineWidth', 1}; the default is {}
+%   'surf-opts' - a cell vector of arguments to be handed to SURF
+%                 to contol the appearance of the ellipsoid
+%                 surface; a nice possibility that yields
+%                 transparency is: {'EdgeAlpha', 0, 'FaceAlpha',
+%                 0.1, 'FaceColor', 'g'}; the default is {}
+% 
+% Outputs:
+%   h     - a vector of handles on the axis lines
+%   s     - a handle on the ellipsoid surface object
+%
+% See also: PLOTCOV2
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [h, s] = plotcov3(mu, Sigma, varargin)
+
+if size(Sigma) ~= [3 3], error('Sigma must be a 3 by 3 matrix'); end
+if length(mu) ~= 3, error('mu must be a 3 by 1 vector'); end
+
+[p, ...
+ n, ...
+ plot_opts, ...
+ surf_opts] = process_options(varargin, 'conf', 0.9, ...
+					'num-pts', 20, ...
+			                'plot-opts', {}, ...
+			                'surf-opts', {});
+h = [];
+holding = ishold;
+if (Sigma == zeros(3, 3))
+  z = mu;
+else
+  % Compute the Mahalanobis radius of the ellipsoid that encloses
+  % the desired probability mass.
+  k = conf2mahal(p, 3);
+  % The axes of the covariance ellipse are given by the eigenvectors of
+  % the covariance matrix.  Their lengths (for the ellipse with unit
+  % Mahalanobis radius) are given by the square roots of the
+  % corresponding eigenvalues.
+  if (issparse(Sigma))
+    [V, D] = eigs(Sigma);
+  else
+    [V, D] = eig(Sigma);
+  end
+  if (any(diag(D) < 0))
+    error('Invalid covariance matrix: not positive semi-definite.');
+  end
+  % Compute the points on the surface of the ellipsoid.
+  t = linspace(0, 2*pi, n);
+  [X, Y, Z] = sphere(n);
+  u = [X(:)'; Y(:)'; Z(:)'];
+  w = (k * V * sqrt(D)) * u;
+  z = repmat(mu(:), [1 (n + 1)^2]) + w;
+
+  % Plot the axes.
+  L = k * sqrt(diag(D));
+  h = plot3([mu(1); mu(1) + L(1) * V(1, 1)], ...
+	    [mu(2); mu(2) + L(1) * V(2, 1)], ...
+	    [mu(3); mu(3) + L(1) * V(3, 1)], plot_opts{:});
+  hold on;
+  h = [h; plot3([mu(1); mu(1) + L(2) * V(1, 2)], ...
+		[mu(2); mu(2) + L(2) * V(2, 2)], ...
+		[mu(3); mu(3) + L(2) * V(3, 2)], plot_opts{:})];
+  h = [h; plot3([mu(1); mu(1) + L(3) * V(1, 3)], ...
+		[mu(2); mu(2) + L(3) * V(2, 3)], ...
+		[mu(3); mu(3) + L(3) * V(3, 3)], plot_opts{:})];
+end
+
+s = surf(reshape(z(1, :), [(n + 1) (n + 1)]), ...
+	 reshape(z(2, :), [(n + 1) (n + 1)]), ...
+	 reshape(z(3, :), [(n + 1) (n + 1)]), ...
+	 surf_opts{:});
+
+if (~holding) hold off; end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plotgauss1d.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function h = plotgauss1d(mu, sigma2)
+% function h = plotgauss1d(mu, sigma^2)
+% Example
+% plotgauss1d(0,5); hold on; h=plotgauss1d(0,2);set(h,'color','r')
+
+sigma = sqrt(sigma2);
+x = linspace(mu-3*sigma, mu+3*sigma, 100);
+p = gaussian_prob(x, mu, sigma2);
+h = plot(x, p, '-');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plotgauss2d.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,130 @@
+function h=plotgauss2d(mu, Sigma)
+% PLOTGAUSS2D Plot a 2D Gaussian as an ellipse with optional cross hairs
+% h=plotgauss2(mu, Sigma)
+%
+
+h = plotcov2(mu, Sigma);
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+% PLOTCOV2 - Plots a covariance ellipse with major and minor axes
+%            for a bivariate Gaussian distribution.
+%
+% Usage:
+%   h = plotcov2(mu, Sigma[, OPTIONS]);
+% 
+% Inputs:
+%   mu    - a 2 x 1 vector giving the mean of the distribution.
+%   Sigma - a 2 x 2 symmetric positive semi-definite matrix giving
+%           the covariance of the distribution (or the zero matrix).
+%
+% Options:
+%   'conf'    - a scalar between 0 and 1 giving the confidence
+%               interval (i.e., the fraction of probability mass to
+%               be enclosed by the ellipse); default is 0.9.
+%   'num-pts' - the number of points to be used to plot the
+%               ellipse; default is 100.
+%
+% This function also accepts options for PLOT.
+%
+% Outputs:
+%   h     - a vector of figure handles to the ellipse boundary and
+%           its major and minor axes
+%
+% See also: PLOTCOV3
+
+% Copyright (C) 2002 Mark A. Paskin
+
+function h = plotcov2(mu, Sigma, varargin)
+
+if size(Sigma) ~= [2 2], error('Sigma must be a 2 by 2 matrix'); end
+if length(mu) ~= 2, error('mu must be a 2 by 1 vector'); end
+
+[p, ...
+ n, ...
+ plot_opts] = process_options(varargin, 'conf', 0.9, ...
+					'num-pts', 100);
+h = [];
+holding = ishold;
+if (Sigma == zeros(2, 2))
+  z = mu;
+else
+  % Compute the Mahalanobis radius of the ellipsoid that encloses
+  % the desired probability mass.
+  k = conf2mahal(p, 2);
+  % The major and minor axes of the covariance ellipse are given by
+  % the eigenvectors of the covariance matrix.  Their lengths (for
+  % the ellipse with unit Mahalanobis radius) are given by the
+  % square roots of the corresponding eigenvalues.
+  if (issparse(Sigma))
+    [V, D] = eigs(Sigma);
+  else
+    [V, D] = eig(Sigma);
+  end
+  % Compute the points on the surface of the ellipse.
+  t = linspace(0, 2*pi, n);
+  u = [cos(t); sin(t)];
+  w = (k * V * sqrt(D)) * u;
+  z = repmat(mu, [1 n]) + w;
+  % Plot the major and minor axes.
+  L = k * sqrt(diag(D));
+  h = plot([mu(1); mu(1) + L(1) * V(1, 1)], ...
+	   [mu(2); mu(2) + L(1) * V(2, 1)], plot_opts{:});
+  hold on;
+  h = [h; plot([mu(1); mu(1) + L(2) * V(1, 2)], ...
+	       [mu(2); mu(2) + L(2) * V(2, 2)], plot_opts{:})];
+end
+
+h = [h; plot(z(1, :), z(2, :), plot_opts{:})];
+if (~holding) hold off; end
+
+%%%%%%%%%%%%
+
+% CONF2MAHAL - Translates a confidence interval to a Mahalanobis
+%              distance.  Consider a multivariate Gaussian
+%              distribution of the form
+%
+%   p(x) = 1/sqrt((2 * pi)^d * det(C)) * exp((-1/2) * MD(x, m, inv(C)))
+%
+%              where MD(x, m, P) is the Mahalanobis distance from x
+%              to m under P:
+%
+%                 MD(x, m, P) = (x - m) * P * (x - m)'
+%
+%              A particular Mahalanobis distance k identifies an
+%              ellipsoid centered at the mean of the distribution.
+%              The confidence interval associated with this ellipsoid
+%              is the probability mass enclosed by it.  Similarly,
+%              a particular confidence interval uniquely determines
+%              an ellipsoid with a fixed Mahalanobis distance.
+%
+%              If X is an d dimensional Gaussian-distributed vector,
+%              then the Mahalanobis distance of X is distributed
+%              according to the Chi-squared distribution with d
+%              degrees of freedom.  Thus, the Mahalanobis distance is
+%              determined by evaluating the inverse cumulative
+%              distribution function of the chi squared distribution
+%              up to the confidence value.
+%
+% Usage:
+% 
+%   m = conf2mahal(c, d);
+%
+% Inputs:
+%
+%   c    - the confidence interval
+%   d    - the number of dimensions of the Gaussian distribution
+%
+% Outputs:
+%
+%   m    - the Mahalanobis radius of the ellipsoid enclosing the
+%          fraction c of the distribution's probability mass
+%
+% See also: MAHAL2CONF
+
+% Copyright (C) 2002 Mark A. Paskin
+
+function m = conf2mahal(c, d)
+
+m = chi2inv(c, d); % matlab stats toolbox
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/plotgauss2d_old.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function h=plotgauss2d_old(mu, Sigma, plot_cross)
+% PLOTGAUSS2D Plot a 2D Gaussian as an ellipse with optional cross hairs
+% h=plotgauss2(mu, Sigma)
+% 
+% h=plotgauss2(mu, Sigma, 1) also plots the major and minor axes
+%
+% Example
+% clf; S=[2 1; 1 2]; plotgauss2d([0;0], S, 1); axis equal
+
+if nargin < 3, plot_cross = 0; end
+[V,D]=eig(Sigma);
+lam1 = D(1,1);
+lam2 = D(2,2);
+v1 = V(:,1);
+v2 = V(:,2);
+%assert(approxeq(v1' * v2, 0))
+if v1(1)==0
+  theta = 0; % horizontal
+else
+  theta = atan(v1(2)/v1(1));
+end
+a = sqrt(lam1);
+b = sqrt(lam2);
+h=plot_ellipse(mu(1), mu(2), theta, a,b);
+
+if plot_cross
+  mu = mu(:);
+  held = ishold;
+  hold on
+  minor1 = mu-a*v1; minor2 = mu+a*v1;
+  hminor = line([minor1(1) minor2(1)], [minor1(2) minor2(2)]);
+  
+  major1 = mu-b*v2; major2 = mu+b*v2;
+  hmajor = line([major1(1) major2(1)], [major1(2) major2(2)]);
+  %set(hmajor,'color','r')
+  if ~held
+    hold off
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/polygon_area.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function  a = polygon_area(x,y)
+% AREA  Area of a planar polygon.
+%	AREA(X,Y) Calculates the area of a 2-dimensional
+%	polygon formed by vertices with coordinate vectors
+%	X and Y. The result is direction-sensitive: the
+%	area is positive if the bounding contour is counter-
+%	clockwise and negative if it is clockwise.
+%
+%	See also TRAPZ.
+
+%  Copyright (c) 1995 by Kirill K. Pankratov,
+%	kirill@plume.mit.edu.
+%	04/20/94, 05/20/95  
+
+ % Make polygon closed .............
+x = [x(:); x(1)];
+y = [y(:); y(1)];
+
+ % Calculate contour integral Int -y*dx  (same as Int x*dy).
+lx = length(x);
+a = -(x(2:lx)-x(1:lx-1))'*(y(1:lx-1)+y(2:lx))/2;
+a = abs(a);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/polygon_centroid.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+function [x0,y0] = centroid(x,y)
+% CENTROID Center of mass of a polygon.
+%	[X0,Y0] = CENTROID(X,Y) Calculates centroid 
+%	(center of mass) of planar polygon with vertices 
+%	coordinates X, Y.
+%	Z0 = CENTROID(X+i*Y) returns Z0=X0+i*Y0 the same
+%	as CENTROID(X,Y).
+
+%  Copyright (c) 1995 by Kirill K. Pankratov,
+%       kirill@plume.mit.edu.
+%       06/01/95, 06/07/95
+
+% Algorithm:
+%  X0 = Int{x*ds}/Int{ds}, where ds - area element
+%  so that Int{ds} is total area of a polygon.
+%    Using Green's theorem the area integral can be 
+%  reduced to a contour integral:
+%  Int{x*ds} = -Int{x^2*dy}, Int{ds} = Int{x*dy} along
+%  the perimeter of a polygon.
+%    For a polygon as a sequence of line segments
+%  this can be reduced exactly to a sum:
+%  Int{x^2*dy} = Sum{ (x_{i}^2+x_{i+1}^2+x_{i}*x_{i+1})*
+%  (y_{i+1}-y_{i})}/3;
+%  Int{x*dy} = Sum{(x_{i}+x_{i+1})(y_{i+1}-y_{i})}/2.
+%    Similarly
+%  Y0 = Int{y*ds}/Int{ds}, where
+%  Int{y*ds} = Int{y^2*dx} = 
+%  = Sum{ (y_{i}^2+y_{i+1}^2+y_{i}*y_{i+1})*
+%  (x_{i+1}-x_{i})}/3.
+
+ % Handle input ......................
+if nargin==0, help centroid, return, end
+if nargin==1
+  sz = size(x);
+  if sz(1)==2      % Matrix 2 by n
+    y = x(2,:); x = x(1,:);
+  elseif sz(2)==2  % Matrix n by 2
+    y = x(:,2); x = x(:,1);
+  else
+    y = imag(x);
+    x = real(x);
+  end
+end 
+
+ % Make a polygon closed ..............
+x = [x(:); x(1)];
+y = [y(:); y(1)];
+
+ % Check length .......................
+l = length(x);
+if length(y)~=l
+  error(' Vectors x and y must have the same length')
+end
+
+ % X-mean: Int{x^2*dy} ................
+del = y(2:l)-y(1:l-1);
+v = x(1:l-1).^2+x(2:l).^2+x(1:l-1).*x(2:l);
+x0 = v'*del;
+
+ % Y-mean: Int{y^2*dx} ................
+del = x(2:l)-x(1:l-1);
+v = y(1:l-1).^2+y(2:l).^2+y(1:l-1).*y(2:l);
+y0 = v'*del;
+
+ % Calculate area: Int{y*dx} ..........
+a = (y(1:l-1)+y(2:l))'*del;
+tol= 2*eps;
+if abs(a)<tol
+  disp(' Warning: area of polygon is close to 0')
+  a = a+sign(a)*tol+(~a)*tol;
+end
+ % Multiplier
+a = 1/3/a;
+
+ % Divide by area .....................
+x0 = -x0*a;
+y0 =  y0*a;
+
+if nargout < 2, x0 = x0+i*y0; end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/polygon_intersect.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+function [is,S] = isintpl(x1,y1,x2,y2)
+% ISINTPL Check for intersection of polygons.
+%	[IS,S] = ISINTPL(X1,Y1,X2,Y2) Accepts coordinates
+%	X1,Y1 and X2, Y2 of two polygons. Returns scalar
+%	IS equal to 1 if these polygons intersect each other
+%	and 0 if they do not.
+%	Also returns Boolean matrix S of the size length(X1)
+%	by length(X2) so that {ij} element of which is 1 if 
+%	line segments i to i+1 of the first polygon and 
+%	j to j+1 of the second polygon intersect each other,
+%	0 if they don't and .5 if they "touch" each other.
+
+%  Copyright (c) 1995 by Kirill K. Pankratov,
+%       kirill@plume.mit.edu.
+%       06/20/95, 08/25/95
+
+
+ % Handle input ...................................
+if nargin==0, help isintpl, return, end
+if nargin<4
+  error(' Not enough input arguments ')
+end
+
+ % Make column vectors and check sizes ............
+x1 = x1(:); y1 = y1(:);
+x2 = x2(:); y2 = y2(:);
+l1 = length(x1);
+l2 = length(x2);
+if length(y1)~=l1 | length(y2)~=l2
+  error('(X1,Y1) and (X2,Y2) must pair-wise have the same length.')
+end
+
+ % Quick exit if empty
+if l1<1 | l2<1, is = []; S = []; return, end
+
+ % Check if their ranges are intersecting .........
+lim1 = [min(x1) max(x1)]';
+lim2 = [min(x2) max(x2)]';
+isx = interval(lim1,lim2);  % X-ranges
+lim1 = [min(y1) max(y1)]';
+lim2 = [min(y2) max(y2)]';
+isy = interval(lim1,lim2);  % Y-ranges
+is = isx & isy;
+S = zeros(l2,l1);
+
+if ~is, return, end  % Early exit if disparate limits
+
+ % Indexing .......................................
+[i11,i12] = meshgrid(1:l1,1:l2);
+[i21,i22] = meshgrid([2:l1 1],[2:l2 1]);
+i11 = i11(:); i12 = i12(:);
+i21 = i21(:); i22 = i22(:);
+
+ % Calculate matrix of intersections ..............
+S(:) = iscross([x1(i11) x1(i21)]',[y1(i11) y1(i21)]',...
+               [x2(i12) x2(i22)]',[y2(i12) y2(i22)]')';
+
+S = S';
+is  = any(any(S));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/previewfig.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function f = previewfig(h,varargin)
+%PREVIEWFIG  Preview a figure to be exported using EXPORTFIG.
+%   F = PREVIEWFIG(H) creates a preview of H with the default
+%   EXPORTFIG options and returns the preview's figure handle in F.
+%   F = PREVIEWFIG(H,OPTIONS) creates a preview with OPTIONS as
+%   described in EXPORTFIG.
+%   PREVIEWFIG(...,PARAM1,VAL1,PARAM2,VAL2,...) creates a preview
+%   with the specified parameter-value pairs to H as described in
+%   EXPORTFIG. 
+%
+%   See also EXPORTFIG, APPLYTOFIG, RESTOREFIG.
+
+%  Copyright 2000 Ben Hinkle
+%  Email bug reports and comments to bhinkle@mathworks.com
+
+filename = [tempname, '.png'];
+args = {'resolution',0,'format','png'};
+if nargin > 1
+  exportfig(h, filename, varargin{:}, args{:});
+else
+  exportfig(h, filename, args{:});
+end
+
+X = imread(filename,'png');
+height = size(X,1);
+width = size(X,2);
+delete(filename);
+f = figure( 'Name', 'Preview', ...
+	    'Menubar', 'none', ...
+	    'NumberTitle', 'off', ...
+	    'Visible', 'off');
+image(X);
+axis image;
+ax = findobj(f, 'type', 'axes');
+axesPos = [0 0 width height];
+set(ax, 'Units', 'pixels', ...
+	'Position', axesPos, ...
+	'Visible', 'off');
+figPos = get(f,'Position');
+rootSize = get(0,'ScreenSize');
+figPos(3:4) = axesPos(3:4);
+if figPos(1) + figPos(3) > rootSize(3)
+  figPos(1) = rootSize(3) - figPos(3) - 50;
+end
+if figPos(2) + figPos(4) > rootSize(4)
+  figPos(2) = rootSize(4) - figPos(4) - 50;
+end
+set(f, 'Position',figPos, ...
+       'Visible', 'on');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/process_options.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,132 @@
+% PROCESS_OPTIONS - Processes options passed to a Matlab function.
+%                   This function provides a simple means of
+%                   parsing attribute-value options.  Each option is
+%                   named by a unique string and is given a default
+%                   value.
+%
+% Usage:  [var1, var2, ..., varn[, unused]] = ...
+%           process_options(args, ...
+%                           str1, def1, str2, def2, ..., strn, defn)
+%
+% Arguments:   
+%            args            - a cell array of input arguments, such
+%                              as that provided by VARARGIN.  Its contents
+%                              should alternate between strings and
+%                              values.
+%            str1, ..., strn - Strings that are associated with a 
+%                              particular variable
+%            def1, ..., defn - Default values returned if no option
+%                              is supplied
+%
+% Returns:
+%            var1, ..., varn - values to be assigned to variables
+%            unused          - an optional cell array of those 
+%                              string-value pairs that were unused;
+%                              if this is not supplied, then a
+%                              warning will be issued for each
+%                              option in args that lacked a match.
+%
+% Examples:
+%
+% Suppose we wish to define a Matlab function 'func' that has
+% required parameters x and y, and optional arguments 'u' and 'v'.
+% With the definition
+%
+%   function y = func(x, y, varargin)
+%
+%     [u, v] = process_options(varargin, 'u', 0, 'v', 1);
+%
+% calling func(0, 1, 'v', 2) will assign 0 to x, 1 to y, 0 to u, and 2
+% to v.  The parameter names are insensitive to case; calling 
+% func(0, 1, 'V', 2) has the same effect.  The function call
+% 
+%   func(0, 1, 'u', 5, 'z', 2);
+%
+% will result in u having the value 5 and v having value 1, but
+% will issue a warning that the 'z' option has not been used.  On
+% the other hand, if func is defined as
+%
+%   function y = func(x, y, varargin)
+%
+%     [u, v, unused_args] = process_options(varargin, 'u', 0, 'v', 1);
+%
+% then the call func(0, 1, 'u', 5, 'z', 2) will yield no warning,
+% and unused_args will have the value {'z', 2}.  This behaviour is
+% useful for functions with options that invoke other functions
+% with options; all options can be passed to the outer function and
+% its unprocessed arguments can be passed to the inner function.
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [varargout] = process_options(args, varargin)
+
+% Check the number of input arguments
+n = length(varargin);
+if (mod(n, 2))
+  error('Each option must be a string/value pair.');
+end
+
+% Check the number of supplied output arguments
+if (nargout < (n / 2))
+  error('Insufficient number of output arguments given');
+elseif (nargout == (n / 2))
+  warn = 1;
+  nout = n / 2;
+else
+  warn = 0;
+  nout = n / 2 + 1;
+end
+
+% Set outputs to be defaults
+varargout = cell(1, nout);
+for i=2:2:n
+  varargout{i/2} = varargin{i};
+end
+
+% Now process all arguments
+nunused = 0;
+for i=1:2:length(args)
+  found = 0;
+  for j=1:2:n
+    if strcmpi(args{i}, varargin{j})
+      varargout{(j + 1)/2} = args{i + 1};
+      found = 1;
+      break;
+    end
+  end
+  if (~found)
+    if (warn)
+      warning(sprintf('Option ''%s'' not used.', args{i}));
+      args{i}
+    else
+      nunused = nunused + 1;
+      unused{2 * nunused - 1} = args{i};
+      unused{2 * nunused} = args{i + 1};
+    end
+  end
+end
+
+% Assign the unused arguments
+if (~warn)
+  if (nunused)
+    varargout{nout} = unused;
+  else
+    varargout{nout} = cell(0);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/rand_psd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function M = rand_psd(d, d2, k)
+% Create a random positive definite matrix of size d by d by k (k defaults to 1)
+% M = rand_psd(d, d2, k)   default: d2 = d, k = 1
+
+if nargin<2, d2 = d; end
+if nargin<3, k = 1; end
+if d2 ~= d, error('must be square'); end
+
+M = zeros(d,d,k);
+for i=1:k
+  A = rand(d);
+  M(:,:,i) = A*A';
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/rectintC.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [overlap, normoverlap] = rectintC(A,B)
+%
+% A(i,:) = [x y w h]
+% B(j,:) = [x y w h]
+% overlap(i,j) = area of intersection
+% normoverlap(i,j) = overlap(i,j) / min(area(i), area(j))
+%
+% Same as built-in rectint, but faster and uses less memory (since avoids repmat).
+
+
+leftA = A(:,1);
+bottomA = A(:,2);
+rightA = leftA + A(:,3);
+topA = bottomA + A(:,4);
+
+leftB = B(:,1)';
+bottomB = B(:,2)';
+rightB = leftB + B(:,3)';
+topB = bottomB + B(:,4)';
+
+verbose = 0;
+[overlap, normoverlap] = rectintLoopC(leftA, rightA, topA, bottomA, leftB, rightB, topB, bottomB, verbose);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/rectintLoopC.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+
+#include "mex.h"
+#include <stdio.h>
+
+#define MAX(x,y)  ((x)>(y) ? (x) : (y))
+#define MIN(x,y)  ((x)<(y) ? (x) : (y))
+
+void mexFunction(
+        int nlhs,       mxArray *plhs[],
+        int nrhs, const mxArray *prhs[]
+        )
+{
+  int j,k,m,n,nzmax,*irs,*jcs, *irs2, *jcs2;
+  double *overlap, *overlap2, tmp, areaA, areaB;
+  double *leftA, *rightA, *topA, *bottomA;
+  double *leftB, *rightB, *topB, *bottomB;
+  double *verbose;
+
+  m = MAX(mxGetM(prhs[0]), mxGetN(prhs[0]));
+  n = MAX(mxGetM(prhs[4]), mxGetN(prhs[4]));
+  /* printf("A=%d, B=%d\n", m, n); */
+
+  leftA = mxGetPr(prhs[0]);
+  rightA = mxGetPr(prhs[1]);
+  topA = mxGetPr(prhs[2]);
+  bottomA = mxGetPr(prhs[3]);
+
+  leftB = mxGetPr(prhs[4]);
+  rightB = mxGetPr(prhs[5]);
+  topB = mxGetPr(prhs[6]);
+  bottomB = mxGetPr(prhs[7]);
+
+  verbose = mxGetPr(prhs[8]);
+
+  plhs[0] = mxCreateDoubleMatrix(m,n, mxREAL);
+  overlap  = mxGetPr(plhs[0]);
+
+  plhs[1] = mxCreateDoubleMatrix(m,n, mxREAL);
+  overlap2  = mxGetPr(plhs[1]);
+
+  k = 0; 
+  for (j = 0; (j < n); j++) {
+    int i;
+    for (i = 0; (i < m); i++) {
+      tmp = (MAX(0, MIN(rightA[i], rightB[j]) - MAX(leftA[i], leftB[j]) )) * 
+	(MAX(0, MIN(topA[i], topB[j]) - MAX(bottomA[i], bottomB[j]) ));
+
+      if (tmp > 0) {
+	overlap[k] = tmp;
+	
+	areaA = (rightA[i]-leftA[i])*(topA[i]-bottomA[i]);
+	areaB = (rightB[j]-leftB[j])*(topB[j]-bottomB[j]);
+	overlap2[k] = tmp/MIN(areaA, areaB);
+	
+	if (*verbose) {
+	  printf("j=%d,i=%d,overlap=%5.3f, norm=%5.3f\n", j,i, overlap[k], overlap2[k]);
+	}
+      }
+
+      k++;
+    }
+  }
+}
+
+
+
+
+
+
+
+
Binary file toolboxes/FullBNT-1.0.7/KPMtools/rectintLoopC.dll has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/rectintSparse.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function [overlap, normoverlap] = rectintSparse(A,B)
+%
+% A(i,:) = [x y w h]
+% B(j,:) = [x y w h]
+% overlap(i,j) = area of intersection
+% normoverla(i,j)
+%
+% Same as built-in rectint, but uses less memory.
+% Use rectintSparseC for a faster version.
+%
+
+leftA = A(:,1);
+bottomA = A(:,2);
+rightA = leftA + A(:,3);
+topA = bottomA + A(:,4);
+
+leftB = B(:,1)';
+bottomB = B(:,2)';
+rightB = leftB + B(:,3)';
+topB = bottomB + B(:,4)';
+
+numRectA = size(A,1);
+numRectB = size(B,1);
+
+%out = rectintSparseLoopC(leftA, rightA, topA, bottomA, leftB, rightB, topB, bottomB);
+
+nnz = ceil(0.2*numRectA*numRectB); % guess of number of non-zeroes
+overlap = sparse([], [], [], numRectA, numRectB, nnz);
+normoverlap = sparse([], [], [], numRectA, numRectB, nnz);
+for j=1:numRectB
+  for i=1:numRectA
+    tmp = (max(0, min(rightA(i), rightB(j)) - max(leftA(i), leftB(j)) ) ) .* ...
+	(max(0, min(topA(i), topB(j)) - max(bottomA(i), bottomB(j)) ) );
+    if tmp>0
+      overlap(i,j) = tmp;
+      areaA = (rightA(i)-leftA(i))*(topA(i)-bottomA(i));
+      areaB = (rightB(j)-leftB(j))*(topB(j)-bottomB(j));
+      normoverlap(i,j) = min(tmp/areaA, tmp/areaB);
+    end
+    %fprintf('j=%d, i=%d, overlap=%5.3f, norm=%5.3f\n',...
+    %	    j, i, overlap(i,j), normoverlap(i,j));
+  end
+end
+
+
+if 0
+N = size(bboxDense01,2); % 1000;
+rect = bboxToRect(bboxDense01)';
+A = rect(1:2,:);
+B = rect(1:N,:);
+
+tic; out1 = rectint(A, B); toc
+tic; out2 = rectintSparse(A, B); toc
+tic; out3 = rectintSparseC(A, B); toc
+tic; out4 = rectintC(A, B); toc
+assert(approxeq(out1, out2))
+assert(approxeq(out1, full(out3)))
+assert(approxeq(out1, out4))
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/rectintSparseC.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function [overlap, normoverlap] = rectintSparseC(A,B)
+%
+% function [area, normarea] = rectintSparseC(A,B)
+% A(i,:) = [x y w h]
+% B(j,:) = [x y w h]
+% out(i,j) = area of intersection
+%
+% Same as built-in rectint, but uses less memory.
+% Also, returns area of overlap normalized by area of patch.
+% See rectintSparse
+
+if isempty(A) | isempty(B)
+  overlap = [];
+  normoverlap = [];
+  return;
+end
+
+leftA = A(:,1);
+bottomA = A(:,2);
+rightA = leftA + A(:,3);
+topA = bottomA + A(:,4);
+
+leftB = B(:,1)';
+bottomB = B(:,2)';
+rightB = leftB + B(:,3)';
+topB = bottomB + B(:,4)';
+
+numRectA = size(A,1);
+numRectB = size(B,1);
+
+verbose = 0;
+[overlap, normoverlap] = rectintSparseLoopC(leftA, rightA, topA, bottomA, leftB, rightB, topB, bottomB, verbose);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/rectintSparseLoopC.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,147 @@
+/* This is based on
+http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_external/ch04cr12.shtml
+
+See rectintSparse.m for the matlab version of this code.
+
+*/
+
+#include <math.h> /* Needed for the ceil() prototype. */
+#include "mex.h"
+#include <stdio.h>
+
+/* If you are using a compiler that equates NaN to be zero, you 
+ * must compile this example using the flag  -DNAN_EQUALS_ZERO.
+ * For example:
+ *
+ *     mex -DNAN_EQUALS_ZERO fulltosparse.c
+ *
+ * This will correctly define the IsNonZero macro for your C
+ * compiler.
+ */
+
+#if defined(NAN_EQUALS_ZERO)
+#define IsNonZero(d) ((d) != 0.0 || mxIsNaN(d))
+#else
+#define IsNonZero(d) ((d) != 0.0)
+#endif
+
+#define MAX(x,y)  ((x)>(y) ? (x) : (y))
+#define MIN(x,y)  ((x)<(y) ? (x) : (y))
+
+void mexFunction(
+        int nlhs,       mxArray *plhs[],
+        int nrhs, const mxArray *prhs[]
+        )
+{
+  /* Declare variables. */
+  int j,k,m,n,nzmax,*irs,*jcs, *irs2, *jcs2;
+  double *overlap, *overlap2, tmp, areaA, areaB;
+  double percent_sparse;
+  double *leftA, *rightA, *topA, *bottomA;
+  double *leftB, *rightB, *topB, *bottomB;
+  double *verbose;
+
+  /* Get the size and pointers to input data. */
+  m = MAX(mxGetM(prhs[0]), mxGetN(prhs[0]));
+  n = MAX(mxGetM(prhs[4]), mxGetN(prhs[4]));
+  /* printf("A=%d, B=%d\n", m, n); */
+
+  leftA = mxGetPr(prhs[0]);
+  rightA = mxGetPr(prhs[1]);
+  topA = mxGetPr(prhs[2]);
+  bottomA = mxGetPr(prhs[3]);
+
+  leftB = mxGetPr(prhs[4]);
+  rightB = mxGetPr(prhs[5]);
+  topB = mxGetPr(prhs[6]);
+  bottomB = mxGetPr(prhs[7]);
+
+  verbose = mxGetPr(prhs[8]);
+
+    /* Allocate space for sparse matrix. 
+     * NOTE:  Assume at most 20% of the data is sparse.  Use ceil
+     * to cause it to round up. 
+     */
+
+  percent_sparse = 0.01;
+  nzmax = (int)ceil((double)m*(double)n*percent_sparse);
+
+  plhs[0] = mxCreateSparse(m,n,nzmax,0);
+  overlap  = mxGetPr(plhs[0]);
+  irs = mxGetIr(plhs[0]);
+  jcs = mxGetJc(plhs[0]);
+
+  plhs[1] = mxCreateSparse(m,n,nzmax,0);
+  overlap2  = mxGetPr(plhs[1]);
+  irs2 = mxGetIr(plhs[1]);
+  jcs2 = mxGetJc(plhs[1]);
+
+    
+  /* Assign nonzeros. */
+  k = 0; 
+  for (j = 0; (j < n); j++) {
+    int i;
+    jcs[j] = k; 
+    jcs2[j] = k; 
+    for (i = 0; (i < m); i++) {
+      tmp = (MAX(0, MIN(rightA[i], rightB[j]) - MAX(leftA[i], leftB[j]) )) * 
+	(MAX(0, MIN(topA[i], topB[j]) - MAX(bottomA[i], bottomB[j]) ));
+      
+      if (*verbose) {
+	printf("j=%d,i=%d,tmp=%5.3f\n", j,i,tmp);
+      }
+
+      if (IsNonZero(tmp)) {
+
+        /* Check to see if non-zero element will fit in 
+         * allocated output array.  If not, increase
+         * percent_sparse by 20%, recalculate nzmax, and augment
+         * the sparse array.
+         */
+        if (k >= nzmax) {
+          int oldnzmax = nzmax;
+          percent_sparse += 0.2;
+          nzmax = (int)ceil((double)m*(double)n*percent_sparse);
+
+          /* Make sure nzmax increases atleast by 1. */
+          if (oldnzmax == nzmax) 
+            nzmax++;
+	  printf("reallocating from %d to %d\n", oldnzmax, nzmax);
+
+          mxSetNzmax(plhs[0], nzmax); 
+          mxSetPr(plhs[0], mxRealloc(overlap, nzmax*sizeof(double)));
+          mxSetIr(plhs[0], mxRealloc(irs, nzmax*sizeof(int)));
+          overlap  = mxGetPr(plhs[0]);
+          irs = mxGetIr(plhs[0]);
+
+          mxSetNzmax(plhs[1], nzmax); 
+          mxSetPr(plhs[1], mxRealloc(overlap2, nzmax*sizeof(double)));
+          mxSetIr(plhs[1], mxRealloc(irs2, nzmax*sizeof(int)));
+          overlap2  = mxGetPr(plhs[1]);
+          irs2 = mxGetIr(plhs[1]);
+        }
+
+        overlap[k] = tmp;
+        irs[k] = i;
+	
+	areaA = (rightA[i]-leftA[i])*(topA[i]-bottomA[i]);
+	areaB = (rightB[j]-leftB[j])*(topB[j]-bottomB[j]);
+	overlap2[k] = MIN(tmp/areaA, tmp/areaB);
+	irs2[k] = i;
+
+        k++;
+      } /* IsNonZero */
+    } /* for i */
+  }
+  jcs[n] = k;
+  jcs2[n] = k;
+  
+}
+
+
+
+
+
+
+
+
Binary file toolboxes/FullBNT-1.0.7/KPMtools/rectintSparseLoopC.dll has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/repmatC.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,149 @@
+/*
+mex -c mexutil.c
+mex repmat.c mexutil.obj
+to check for warnings:
+gcc -Wall -I/cygdrive/c/MATLAB6p1/extern/include -c repmat.c
+*/
+#include "mexutil.h"
+#include <string.h>
+
+/* repeat a block of memory rep times */
+void memrep(char *dest, size_t chunk, int rep)
+{
+#if 0
+  /* slow way */
+  int i;
+  char *p = dest;
+  for(i=1;i<rep;i++) {
+    p += chunk;
+    memcpy(p, dest, chunk);
+  }
+#else
+  /* fast way */
+  if(rep == 1) return;
+  memcpy(dest + chunk, dest, chunk); 
+  if(rep & 1) {
+    dest += chunk;
+    memcpy(dest + chunk, dest, chunk);
+  }
+  /* now repeat using a block twice as big */
+  memrep(dest, chunk<<1, rep>>1);
+#endif
+}
+
+void repmat(char *dest, const char *src, int ndim, int *destdimsize, 
+	    int *dimsize, const int *dims, int *rep) 
+{
+  int d = ndim-1;
+  int i, chunk;
+  /* copy the first repetition into dest */
+  if(d == 0) {
+    chunk = dimsize[0];
+    memcpy(dest,src,chunk);
+  }
+  else {
+    /* recursively repeat each slice of src */
+    for(i=0;i<dims[d];i++) {
+      repmat(dest + i*destdimsize[d-1], src + i*dimsize[d-1], 
+	     ndim-1, destdimsize, dimsize, dims, rep);
+    }
+    chunk = destdimsize[d-1]*dims[d];
+  }
+  /* copy the result rep-1 times */
+  memrep(dest,chunk,rep[d]);
+}
+
+void mexFunction(int nlhs, mxArray *plhs[],
+                 int nrhs, const mxArray *prhs[])
+{
+  const mxArray *srcmat;
+  int ndim, *dimsize, eltsize;
+  const int *dims;
+  int ndimdest, *destdims, *destdimsize;
+  char *src, *dest;
+  int *rep;
+  int i,nrep;
+  int extra_rep = 1;
+  int empty;
+
+  if(nrhs < 2) mexErrMsgTxt("Usage: xrepmat(A, [N M ...])");
+  srcmat = prhs[0];
+  if(mxIsSparse(srcmat)) {
+    mexErrMsgTxt("Sorry, can't handle sparse matrices yet.");
+  }
+  if(mxIsCell(srcmat)) {
+    mexErrMsgTxt("Sorry, can't handle cell arrays yet.");
+  }
+  ndim = mxGetNumberOfDimensions(srcmat);
+  dims = mxGetDimensions(srcmat);
+  eltsize = mxGetElementSize(srcmat);
+
+  /* compute dimension sizes */
+  dimsize = mxCalloc(ndim, sizeof(int));
+  dimsize[0] = eltsize*dims[0];
+  for(i=1;i<ndim;i++) dimsize[i] = dimsize[i-1]*dims[i];
+
+  /* determine repetition vector */
+  ndimdest = ndim;
+  if(nrhs == 2) {
+    nrep = mxGetN(prhs[1]);
+    if(nrep > ndimdest) ndimdest = nrep;
+    rep = mxCalloc(ndimdest, sizeof(int));
+    for(i=0;i<nrep;i++) {
+      double repv = mxGetPr(prhs[1])[i];
+      rep[i] = (int)repv;
+    }
+    if(nrep == 1) {
+      /* special behavior */
+      nrep = 2;
+      rep[1] = rep[0];
+    }
+  }
+  else {
+    nrep = nrhs-1;
+    if(nrep > ndimdest) ndimdest = nrep;
+    rep = mxCalloc(ndimdest, sizeof(int));
+    for(i=0;i<nrep;i++) {
+      rep[i] = (int)*mxGetPr(prhs[i+1]);
+    }
+  }
+  for(i=nrep;i<ndimdest;i++) rep[i] = 1;
+
+  /* compute output size */
+  destdims = mxCalloc(ndimdest, sizeof(int));
+  for(i=0;i<ndim;i++) destdims[i] = dims[i]*rep[i];
+  for(;i<ndimdest;i++) { 
+    destdims[i] = rep[i];
+    extra_rep *= rep[i];
+  }
+  destdimsize = mxCalloc(ndim, sizeof(int));
+  destdimsize[0] = eltsize*destdims[0];
+  for(i=1;i<ndim;i++) destdimsize[i] = destdimsize[i-1]*destdims[i];
+
+    
+  /* for speed, array should be uninitialized */
+  plhs[0] = mxCreateNumericArray(ndimdest, destdims, mxGetClassID(srcmat), 
+				  mxIsComplex(srcmat)?mxCOMPLEX:mxREAL);
+
+  /* if any rep[i] == 0, output should be empty array.
+     Added by KPM 11/13/02.
+  */
+  empty = 0;
+  for (i=0; i < nrep; i++) {
+    if (rep[i]==0) 
+      empty = 1;
+  }
+  if (empty) 
+    return;
+
+  src = (char*)mxGetData(srcmat);
+  dest = (char*)mxGetData(plhs[0]);
+  repmat(dest,src,ndim,destdimsize,dimsize,dims,rep);
+  if(ndimdest > ndim) memrep(dest,destdimsize[ndim-1],extra_rep);
+  if(mxIsComplex(srcmat)) {
+    src = (char*)mxGetPi(srcmat);
+    dest = (char*)mxGetPi(plhs[0]);
+    repmat(dest,src,ndim,destdimsize,dimsize,dims,rep);
+    if(ndimdest > ndim) memrep(dest,destdimsize[ndim-1],extra_rep);
+  }
+}
Binary file toolboxes/FullBNT-1.0.7/KPMtools/repmatC.dll has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/rgb2grayKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function g = rgb2grayKPM(rgb)
+% function g = rgb2grayKPM(rgb)
+% rgb2grayKPM Like the built-in function, but if r is already gray, does not cause an error
+
+[nr nc ncolors] = size(rgb);
+if ncolors > 1
+  g = rgb2gray(rgb);
+else
+  g = rgb;
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/rnd_partition.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function [train, test] = rnd_partition(data, train_percent);
+% function [train, test] = rnd_partition(data, train_percent);
+%
+% data(:,i) is the i'th example
+% train_percent of these columns get put into train, the rest into test
+
+N = size(data, 2);
+ndx = randperm(N);
+k = ceil(N*train_percent);
+train_ndx = ndx(1:k);
+test_ndx = ndx(k+1:end);
+train =  data(:, train_ndx);
+test = data(:, test_ndx);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/rotate_xlabel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function hText = rotate_xlabel(degrees, newlabels)
+
+% Posted to comp.soft-sys.matlab on 2003-05-01 13:45:36 PST 
+% by David Borger (borger@ix.netcom.com)
+
+xtl = get(gca,'XTickLabel');
+set(gca,'XTickLabel','');
+lxtl = length(xtl);
+xtl = newlabels;
+if 0 % nargin>1
+    lnl = length(newlabels);
+    if lnl~=lxtl
+        error('Number of new labels must equal number of old');
+    end;
+    xtl = newlabels;
+end;
+
+
+hxLabel=get(gca,'XLabel');
+xLP=get(hxLabel,'Position');
+y=xLP(2);
+XTick=get(gca,'XTick');
+y=repmat(y,length(XTick),1);
+%fs=get(gca,'fontsize');
+fs = 12;
+hText=text(XTick,y,xtl,'fontsize',fs);
+set(hText,'Rotation',degrees,'HorizontalAlignment','right');
+
+% Modifications by KPM
+
+ylim = get(gca,'ylim');
+height = ylim(2)-ylim(1);
+N = length(hText);
+for i=1:N
+  voffset = ylim(2) - 0*height;
+  set(hText(i), 'position', [i voffset 0]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/safeStr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function s = safeStr(s)
+% Change punctuation characters to they print properly
+
+s = strrep(s, '\', '/');
+s = strrep(s, '_', '-');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/sampleUniformInts.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function M = sampleUniformInts(N, r, c)
+
+% M is an rxc matrix of integers in 1..N
+
+prob = normalize(ones(N,1));
+M = sample_discrete(prob, r, c);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/sample_discrete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function M = sample_discrete(prob, r, c)
+% SAMPLE_DISCRETE Like the built in 'rand', except we draw from a non-uniform discrete distrib.
+% M = sample_discrete(prob, r, c)
+%
+% Example: sample_discrete([0.8 0.2], 1, 10) generates a row vector of 10 random integers from {1,2},
+% where the prob. of being 1 is 0.8 and the prob of being 2 is 0.2.
+
+n = length(prob);
+
+if nargin == 1
+  r = 1; c = 1;
+elseif nargin == 2
+  c == r;
+end
+
+R = rand(r, c);
+M = ones(r, c);
+cumprob = cumsum(prob(:));
+
+if n < r*c
+  for i = 1:n-1
+    M = M + (R > cumprob(i));
+  end
+else
+  % loop over the smaller index - can be much faster if length(prob) >> r*c
+  cumprob2 = cumprob(1:end-1);
+  for i=1:r
+    for j=1:c
+      M(i,j) = sum(R(i,j) > cumprob2)+1;
+    end
+  end
+end
+
+
+% Slower, even though vectorized
+%cumprob = reshape(cumsum([0 prob(1:end-1)]), [1 1 n]);
+%M = sum(R(:,:,ones(n,1)) > cumprob(ones(r,1),ones(c,1),:), 3);
+
+% convert using a binning algorithm
+%M=bindex(R,cumprob);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/set_xtick_label.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+function set_xtick_label(tick_labels, angle, axis_label)
+% SET_XTICK_LABEL Print the xtick labels at an angle instead of horizontally
+% set_xtick_label(tick_labels, angle, axis_label)
+%
+% angle default = 90
+% axis_label default = ''
+%
+% This is derived from Solution Number: 5375 on mathworks.com
+% See set_xtick_label_demo for an example
+
+if nargin < 2, angle = 90; end
+if nargin < 3, axis_label = []; end
+
+% Reduce the size of the axis so that all the labels fit in the figure.
+pos = get(gca,'Position');
+%set(gca,'Position',[pos(1), .2, pos(3) .65])
+%set(gca,'Position',[pos(1), 0, pos(3) .45])
+%set(gca,'Position',[pos(1), 0.1, pos(3) 0.5])
+
+ax = axis;    % Current axis limits
+axis(axis);    % Fix the axis limits
+Yl = ax(3:4);  % Y-axis limits
+
+%set(gca, 'xtick', 1:length(tick_labels));
+set(gca, 'xtick', 0.7:1:length(tick_labels));
+Xt = get(gca, 'xtick');
+
+% Place the text labels
+t = text(Xt,Yl(1)*ones(1,length(Xt)),tick_labels);
+set(t,'HorizontalAlignment','right','VerticalAlignment','top', 'Rotation', angle);
+
+% Remove the default labels
+set(gca,'XTickLabel','')
+
+% Get the Extent of each text object.  This
+% loop is unavoidable.
+for i = 1:length(t)
+  ext(i,:) = get(t(i),'Extent');
+end
+
+% Determine the lowest point.  The X-label will be
+% placed so that the top is aligned with this point.
+LowYPoint = min(ext(:,2));
+
+% Place the axis label at this point
+if ~isempty(axis_label)
+  Xl = get(gca, 'Xlim');
+  XMidPoint = Xl(1)+abs(diff(Xl))/2;
+  tl = text(XMidPoint,LowYPoint, axis_label, 'VerticalAlignment','top', ...
+	    'HorizontalAlignment','center');
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/set_xtick_label_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+
+% Generate some test data.  Assume that the X-axis represents months.
+x = 1:12;
+y = 10*rand(1,length(x));
+
+% Plot the data.
+h = plot(x,y,'+');
+
+% Add a title.
+title('This is a title')
+
+% Set the X-Tick locations so that every other month is labeled.
+Xt = 1:2:11;
+Xl = [1 12];
+set(gca,'XTick',Xt,'XLim',Xl);
+
+% Add the months as tick labels.
+months = ['Jan';
+	  'Feb';
+	  'Mar';
+	  'Apr';
+	  'May';
+	  'Jun';
+	  'Jul';
+	  'Aug';
+	  'Sep';
+	  'Oct';
+	  'Nov';
+	  'Dec'];
+
+set_xtick_label(months(1:2:12, :), 90, 'xaxis label');
+
+
+
+if 0
+
+
+% Generate some test data.  Assume that the X-axis represents months.
+x = 1:8;
+y = 10*rand(1,length(x));
+
+% Plot the data.
+h = plot(x,y,'+');
+
+S = subsets(1:3);
+str = cell(1,8);
+for i=1:2^3
+  str{i} = num2str(S{i});
+end
+set_xtick_label(str);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/setdiag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function M = setdiag(M, v)
+% SETDIAG Set the diagonal of a matrix to a specified scalar/vector.
+% M = set_diag(M, v)
+
+n = length(M);
+if length(v)==1
+  v = repmat(v, 1, n);
+end
+
+% e.g., for 3x3 matrix,  elements are numbered
+% 1 4 7 
+% 2 5 8 
+% 3 6 9
+% so diagnoal = [1 5 9]
+
+
+J = 1:n+1:n^2;
+M(J) = v;
+
+%M = triu(M,1) + tril(M,-1) + diag(v);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/softeye.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function M = softeye(K, p)
+% SOFTEYE Make a stochastic matrix with p on the diagonal, and the remaining mass distributed uniformly
+% M = softeye(K, p)
+%
+% M is a K x K matrix.
+
+M = p*eye(K);
+q = 1-p;
+for i=1:K
+  M(i, [1:i-1  i+1:K]) = q/(K-1);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/sort_evec.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [evec, evals] = sort_evec(temp_evec, temp_evals, N)
+
+if ~isvectorBNT(temp_evals)
+  temp_evals = diag(temp_evals);
+end
+
+% Eigenvalues nearly always returned in descending order, but just
+% to make sure.....
+[evals perm] = sort(-temp_evals);
+evals = -evals(1:N);
+if evals == temp_evals(1:N)
+  % Originals were in order
+  evec = temp_evec(:, 1:N);
+  return
+else
+  fprintf('sorting evec\n');
+  % Need to reorder the eigenvectors
+  for i=1:N
+    evec(:,i) = temp_evec(:,perm(i));
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/splitLongSeqIntoManyShort.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function short = splitLongSeqIntoManyShort(long, Tsmall)
+% splitLongSeqIntoManyShort Put groups of columns  into a cell array of narrower matrices
+% function short = splitLongSeqIntoManyShort(long, Tsmall)
+%
+% long(:,t)
+% short{i} = long(:,ndx1:ndx2) where each segment (except maybe the last) is of length Tsmall
+
+T = length(long);
+Nsmall = ceil(T/Tsmall);
+short = cell(Nsmall,1);
+
+t = 1;
+for i=1:Nsmall
+  short{i} = long(:,t:min(T,t+Tsmall-1));
+  t = t+Tsmall;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/sprintf_intvec.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function s = sprintf_intvec(v)
+% SPRINTF_INTVEC Print a vector of ints as comma separated string, with no trailing comma
+% function s = sprintf_intvec(v)
+%
+% e.g., sprintf_intvec(1:3) returns '1,2,3' 
+
+s = sprintf('%d,', v);
+s = s(1:end-1);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/sqdist.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function m = sqdist(p, q, A)
+% SQDIST      Squared Euclidean or Mahalanobis distance.
+% SQDIST(p,q)   returns m(i,j) = (p(:,i) - q(:,j))'*(p(:,i) - q(:,j)).
+% SQDIST(p,q,A) returns m(i,j) = (p(:,i) - q(:,j))'*A*(p(:,i) - q(:,j)).
+
+%  From Tom Minka's lightspeed toolbox
+
+[d, pn] = size(p);
+[d, qn] = size(q);
+
+if nargin == 2
+  
+  pmag = sum(p .* p, 1);
+  qmag = sum(q .* q, 1);
+  m = repmat(qmag, pn, 1) + repmat(pmag', 1, qn) - 2*p'*q;
+  %m = ones(pn,1)*qmag + pmag'*ones(1,qn) - 2*p'*q;
+  
+else
+
+  if isempty(A) | isempty(p)
+    error('sqdist: empty matrices');
+  end
+  Ap = A*p;
+  Aq = A*q;
+  pmag = sum(p .* Ap, 1);
+  qmag = sum(q .* Aq, 1);
+  m = repmat(qmag, pn, 1) + repmat(pmag', 1, qn) - 2*p'*Aq;
+  
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/strmatch_multi.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function [posns] = strmatch_multi(keys, strs)
+% STRMATCH_MULTI Find where each key occurs in list of strings.
+% [pos] = strmatch_multi(key, strs) where key is a string and strs is a cell array of strings
+% works like the built-in command sequence pos = strmatch(key, strs, 'exact'),
+% except that pos is the first occurrence of key in strs; if there is no occurence, pos is 0.
+%
+% [posns] = strmatch_multi(keys, strs), where keys is a cell array of strings, 
+% matches each element of keys. It loops over whichever is shorter, keys or strs.
+
+if ~iscell(keys), keys = {keys}; end
+nkeys = length(keys);
+posns = zeros(1, nkeys);
+if length(keys) < length(strs)
+  for i=1:nkeys
+    %pos = strmatch(keys{i}, strs, 'exact');
+    ndx = strcmp(keys{i}, strs); % faster
+    pos = find(ndx);
+    if ~isempty(pos)
+      posns(i) = pos(1);
+    end
+  end
+else
+  for s=1:length(strs)
+    %ndx = strmatch(strs{s}, keys, 'exact');
+    ndx = strcmp(strs{s}, keys);
+    ndx = find(ndx);
+    posns(ndx) = s;
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/strmatch_substr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function ndx = strmatch_substr(str, strs)
+% STRMATCH_SUBSTR Like strmatch, except str can match any part of strs{i}, not just prefix.
+% ndx = strmatch_substr(str, strs)
+%
+% Example:
+% i = strmatch('max', {'max','minimax','maximum'})
+%  returns i = [1; 3] since only 1 and 3 begin with max, but
+% i = strmatch_substr('max', {'max','minimax','maximum'})
+%  returns i = [1;2;3];
+%
+% If str is also a cell array, it is like calling strmatch_substr several times
+% and concatenating the results. 
+% Example:
+% 
+% i = strmatch_substr({'foo', 'dog'}, {'foo', 'hoofoo', 'dog'}) 
+%   returns i = [1;2;3]
+
+ndx = [];
+if ~iscell(str), str = {str}; end
+for j=1:length(str)
+  for i=1:length(strs)
+    %ind = strfind(strs{i}, str{j}); % not supported in 6.0
+    ind = findstr(strs{i}, str{j});
+    if ~isempty(ind)
+      ndx = [ndx; i];
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/strsplit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function parts = strsplit(splitstr, str, option)
+%STRSPLIT Split string into pieces.
+%
+%   STRSPLIT(SPLITSTR, STR, OPTION) splits the string STR at every occurrence
+%   of SPLITSTR and returns the result as a cell array of strings.  By default,
+%   SPLITSTR is not included in the output.
+%
+%   STRSPLIT(SPLITSTR, STR, OPTION) can be used to control how SPLITSTR is
+%   included in the output.  If OPTION is 'include', SPLITSTR will be included
+%   as a separate string.  If OPTION is 'append', SPLITSTR will be appended to
+%   each output string, as if the input string was split at the position right
+%   after the occurrence SPLITSTR.  If OPTION is 'omit', SPLITSTR will not be
+%   included in the output.
+
+%   Author:      Peter J. Acklam
+%   Time-stamp:  2004-09-22 08:48:01 +0200
+%   E-mail:      pjacklam@online.no
+%   URL:         http://home.online.no/~pjacklam
+
+   nargsin = nargin;
+   error(nargchk(2, 3, nargsin));
+   if nargsin < 3
+      option = 'omit';
+   else
+      option = lower(option);
+   end
+
+   splitlen = length(splitstr);
+   parts = {};
+
+   while 1
+
+      k = strfind(str, splitstr);
+      if isempty(k)
+         parts{end+1} = str;
+         break
+      end
+
+      switch option
+         case 'include'
+            parts(end+1:end+2) = {str(1:k(1)-1), splitstr};
+         case 'append'
+            parts{end+1} = str(1 : k(1)+splitlen-1);
+         case 'omit'
+            parts{end+1} = str(1 : k(1)-1);
+         otherwise
+            error(['Invalid option string -- ', option]);
+      end
+
+
+      str = str(k(1)+splitlen : end);
+
+   end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/subplot2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function subplot2(nrows, ncols, i, j)
+% function subplot2(nrows, ncols, i, j)
+
+
+sz = [nrows ncols];
+%k = sub2ind(sz, i, j)
+k = sub2ind(sz(end:-1:1), j, i);
+subplot(nrows, ncols, k);
+
+if 0
+  ncols_plot = ceil(sqrt(Nplots));
+  nrows_plot = ceil(Nplots/ncols_plot);
+  Nplots = nrows_plot*ncols_plot;
+  for p=1:Nplots
+    subplot(nrows_plot, ncols_plot, p);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/subplot3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function fignum = subplot3(nrows, ncols, fignumBase, plotnumBase)
+% function subplot3(nrows, ncols, fignumBase, plotnumBase)
+% Choose a subplot number, opening a new figure if necessary
+% eg nrows=2, ncols = 2, we plot on (fignum, plotnum) = (1,1), (1,2), (1,3), (1,4), (2,1), ...
+
+nplotsPerFig = nrows*ncols;
+fignum = fignumBase + div(plotnumBase-1, nplotsPerFig);
+plotnum = wrap(plotnumBase, nplotsPerFig);
+figure(fignum);
+if plotnum==1, clf; end
+subplot(nrows, ncols, plotnum);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/subsets.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+function [T, bitv] = subsets(S, U, L, sorted, N)
+% SUBSETS Create a set of all the subsets of S which have cardinality <= U and >= L
+% T = subsets(S, U, L)
+% U defaults to length(S), L defaults to 0.
+% So subsets(S) generates the powerset of S.
+%
+% Example:
+% T = subsets(1:4, 2, 1) 
+% T{:} = 1, 2, [1 2], 3, [1 3], [2 3], 4, [1 4], [2 4], [3 4]
+%
+% T = subsets(S, U, L, sorted)
+% If sorted=1, return the subsets in increasing size
+%
+% Example:
+% T = subsets(1:4, 2, 1, 1) 
+% T{:} = 1, 2, 3, 4, [1 2], [1 3], [2 3], [1 4], [2 4], [3 4]
+%
+% [T, bitv] = subsets(S, U, L, sorted, N)
+% Row i of bitv is a bit vector representation of T{i},
+% where bitv has N columns (representing 1:N).
+% N defaults to max(S).
+%
+% Example:
+% [T,bitv] = subsets(2:4, 2^3, 0, 0, 5)
+% T{:} = [], 2, 3, [2 3], 4, [2 4], [3 4], [2 3 4]
+% bitv=
+%     0     0     0     0     0
+%     0     1     0     0     0
+%     0     0     1     0     0
+%     0     1     1     0     0
+%     0     0     0     1     0
+%     0     1     0     1     0
+%     0     0     1     1     0
+%     0     1     1     1     0
+
+n = length(S);
+
+if nargin < 2, U = n; end
+if nargin < 3, L = 0; end
+if nargin < 4, sorted = 0; end
+if nargin < 5, N = max(S); end
+
+bits = ind2subv(2*ones(1,n), 1:2^n)-1;
+sm = sum(bits,2);
+masks = bits((sm <= U) & (sm >= L), :);
+m = size(masks, 1);
+T = cell(1, m);
+for i=1:m
+  s = S(find(masks(i,:)));
+  T{i} = s;
+end
+
+if sorted 
+  T = sortcell(T);
+end
+
+bitv = zeros(m, N);
+bitv(:, S) = masks;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/subsets1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function sub_s=subsets1(s,k)
+% SUBSETS1 creates sub-sets of a specific from a given set
+% SS = subsets1(S, k)
+% 
+% S is the given set
+% k is the required sub-sets size
+% 
+% Example:
+% 
+% >> ss=subsets1([1:4],3);
+% >> ss{:}
+% ans =
+%      1     2     3
+% ans =
+%      1     2     4
+% ans =
+%      1     3     4
+% ans =
+%      2     3     4
+% 
+% Written by Raanan Yehezkel, 2004
+
+if k<0 % special case
+    error('subset size must be positive');
+elseif k==0 % special case
+    sub_s={[]};
+else
+    l=length(s);
+    ss={};
+    if l>=k
+        if k==1 % Exit condition
+            for I=1:l
+                ss{I}=s(I);
+            end
+        else
+            for I=1:l
+                ss1=subsets1(s([(I+1):l]),k-1);
+                for J=1:length(ss1)
+                    ss{end+1}=[s(I),ss1{J}];
+                end
+            end
+        end
+    end
+    sub_s=ss;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/subsetsFixedSize.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function sub_s=subsets1(s,k)
+% SUBSETS1 creates sub-sets of a specific size from a given set
+% SS = subsets1(S, k)
+% 
+% S is the given set
+% k is the required sub-sets size
+% 
+% Example:
+% 
+% >> ss=subsets1([1:4],3);
+% >> ss{:}
+% ans =
+%      1     2     3
+% ans =
+%      1     2     4
+% ans =
+%      1     3     4
+% ans =
+%      2     3     4
+% 
+% Written by Raanan Yehezkel, 2004
+
+if k<0 % special case
+    error('subset size must be positive');
+elseif k==0 % special case
+    sub_s={[]};
+else
+    l=length(s);
+    ss={};
+    if l>=k
+        if k==1 % Exit condition
+            for I=1:l
+                ss{I}=s(I);
+            end
+        else
+            for I=1:l
+                ss1=subsets1(s([(I+1):l]),k-1);
+                for J=1:length(ss1)
+                    ss{end+1}=[s(I),ss1{J}];
+                end
+            end
+        end
+    end
+    sub_s=ss;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/subv2ind.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function index = subv2ind(siz,sub)
+%SUBV2IND   Linear index from subscript vector.
+% SUBV2IND(SIZ,SUB) returns an equivalent single index corresponding to a
+% subscript vector for an array of size SIZ.
+% If SUB is a matrix, with subscript vectors as rows, then the result is a 
+% column vector.
+%
+% This is the opposite of IND2SUBV, so that
+%   SUBV2IND(SIZ,IND2SUBV(SIZ,IND)) == IND.
+%
+% See also IND2SUBV, SUB2IND.
+
+%index = subv2indTest(siz,sub);
+prev_cum_size = [1 cumprod(siz(1:end-1))];
+%index = (sub-1)*prev_cum_size' + 1;
+index = sub*prev_cum_size' - sum(prev_cum_size) + 1;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/subv2indKPM.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,89 @@
+/* C mex version of subv2ind*/
+/* 2 inputs, 1 output       */
+/* siz, subv                */
+/* ndx                      */
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int    i, j, k, nCol, nRow, binary, temp;
+	double *pSize, *pSubv, *pr;
+	int    *cumprod;
+
+	pSize = mxGetPr(prhs[0]);
+	pSubv = mxGetPr(prhs[1]);
+	nCol  = mxGetNumberOfElements(prhs[0]);
+	nRow  = mxGetM(prhs[1]);
+
+	
+	if(mxIsEmpty(prhs[1])){
+		plhs[0] = mxCreateDoubleMatrix(0, 0, mxREAL);
+		return;
+	}
+
+	if(mxIsEmpty(prhs[0])){
+		plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
+		*mxGetPr(plhs[0]) = 1;
+		return;
+	}
+
+	binary = 2;
+	for (i = 0; i < nCol; i++){
+		if (pSize[i] > 2.0){
+			binary = 0;
+			break;
+		}
+		else if(pSize[i] == 1.0){
+			binary = 1;
+		}
+	}
+
+	plhs[0] = mxCreateDoubleMatrix(nRow, 1, mxREAL);
+	pr = mxGetPr(plhs[0]);
+	for(i=0; i<nRow; i++){
+		pr[i] = 1.0;
+	}
+
+	if (binary == 2){
+		for(j=0; j<nCol; j++){
+			temp = j * nRow;
+			for(i=0; i<nRow; i++){
+				pr[i] += ((int)pSubv[temp + i] - 1) << j;
+			}
+		}
+	}
+	else if(binary == 1){	
+		cumprod = malloc(nCol * sizeof(int));
+		cumprod[0] = 1;
+		for(i=1; i<nCol; i++){
+			k = (int)pSize[i-1] - 1;
+			cumprod[i] = cumprod[i-1] << k;
+		}
+		for(j=0; j<nCol; j++){
+			temp = j * nRow;
+			for(i=0; i<nRow; i++){
+				k = (int)pSubv[temp + i] - 1;
+				if(k)pr[i] += cumprod[j];
+			}
+		}
+		free(cumprod);
+	}
+	else {
+		cumprod = malloc(nCol * sizeof(int));
+		cumprod[0] = 1;
+		for(i=1; i<nCol; i++){
+			k = (int)pSize[i-1];
+			cumprod[i] = cumprod[i-1] * k;
+		}
+		for(j=0; j<nCol; j++){
+			temp = j * nRow;
+			for(i=0; i<nRow; i++){
+				k = (int)pSubv[temp + i] - 1;
+				pr[i] += cumprod[j] * k;
+			}
+		}
+		free(cumprod);
+	}
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/subv2indKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+function ndx = subv2indKPM(siz, subv)
+% SUBV2IND Like the built-in sub2ind, but the subscripts are given as row vectors.
+% ind = subv2ind(siz,subv)
+%
+% siz can be a row or column vector of size d.
+% subv should be a collection of N row vectors of size d.
+% ind will be of size N * 1.
+%
+% Example:
+% subv = [1 1 1;
+%         2 1 1;
+%         ...
+%         2 2 2];
+% subv2ind([2 2 2], subv) returns [1 2 ... 8]'
+% i.e., the leftmost digit toggles fastest.
+%
+% See also IND2SUBV.
+
+
+if isempty(subv)
+  ndx = [];
+  return;
+end
+
+if isempty(siz)
+  ndx = 1;
+  return;
+end
+
+[ncases ndims] = size(subv);
+
+%if length(siz) ~= ndims
+%  error('length of subscript vector and sizes must be equal');
+%end
+
+if all(siz==2)
+  %rbits = subv(:,end:-1:1)-1; % read from right to left, convert to 0s/1s
+  %ndx = bitv2dec(rbits)+1; 
+  twos = pow2(0:ndims-1);
+  ndx = ((subv-1) * twos(:)) + 1;
+  %ndx = sum((subv-1) .* twos(ones(ncases,1), :), 2) + 1; % equivalent to matrix * vector
+  %ndx = sum((subv-1) .* repmat(twos, ncases, 1), 2) + 1; % much slower than ones
+  %ndx = ndx(:)';
+else
+  %siz = siz(:)';
+  cp = [1 cumprod(siz(1:end-1))]';
+  %ndx = ones(ncases, 1);
+  %for i = 1:ndims
+  %  ndx = ndx + (subv(:,i)-1)*cp(i);
+  %end
+  ndx = (subv-1)*cp + 1;
+end
+
+%%%%%%%%%%%
+
+function d = bitv2dec(bits)
+% BITV2DEC Convert a bit vector to a decimal integer
+% d = butv2dec(bits)
+%
+% This is just like the built-in bin2dec, except the argument is a vector, not a string.
+% If bits is an array, each row will be converted.
+
+[m n] = size(bits);
+twos = pow2(n-1:-1:0);
+d = sum(bits .* twos(ones(m,1),:),2);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/subv2indMinka.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function index = subv2indMinka(siz,sub)
+%SUBV2IND   Linear index from subscript vector.
+% SUBV2IND(SIZ,SUB) returns an equivalent single index corresponding to a
+% subscript vector for an array of size SIZ.
+% If SUB is a matrix, with subscript vectors as rows, then the result is a 
+% column vector.
+%
+% This is the opposite of IND2SUBV, so that
+%   SUBV2IND(SIZ,IND2SUBV(SIZ,IND)) == IND.
+%
+% See also IND2SUBV, SUB2IND.
+
+% Written by Tom Minka
+
+prev_cum_size = [1 cumprod(siz(1:end-1))];
+%index = (sub-1)*prev_cum_size' + 1;
+index = sub*prev_cum_size' - sum(prev_cum_size) + 1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/subv2indTest.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function ndx = subv2indTest(siz,sub)
+%SUBV2IND   Linear index from subscript vector.
+% SUBV2IND(SIZ,SUB) returns an equivalent single index corresponding to a
+% subscript vector for an array of size SIZ.
+% If SUB is a matrix, with subscript vectors as rows, then the result is a 
+% column vector.
+%
+% This is the opposite of IND2SUBV, so that
+%   SUBV2IND(SIZ,IND2SUBV(SIZ,IND)) == IND.
+%
+% See also IND2SUBV, SUB2IND.
+
+ndx = subv2indMinka(siz,sub);
+ndx2 = subv2indKPM(siz,sub);
+assert(isequalKPM(ndx,ndx2))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/sumv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function T2 = sumv(T1, sum_over)
+%
+% Like the built in sum, but will sum over several dimensions and then squeeze the result.
+
+T2 = T1;
+for i=1:length(sum_over)
+  if sum_over(i) <= ndims(T2) % prevent summing over non-existent dimensions
+    T2=sum(T2, sum_over(i));
+  end
+end
+T2 = squeeze(T2);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/suptitle.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,105 @@
+function hout=suptitle(str, fs)
+%SUPTITLE Puts a title above all subplots.
+%	SUPTITLE('text') adds text to the top of the figure
+%	above all subplots (a "super title"). Use this function
+%	after all subplot commands.
+
+% Drea Thomas 6/15/95 drea@mathworks.com
+
+% Warning: If the figure or axis units are non-default, this
+% will break.
+
+% Parameters used to position the supertitle.
+
+% Amount of the figure window devoted to subplots
+plotregion = .92;
+
+% Y position of title in normalized coordinates
+titleypos  = .95;
+
+% Fontsize for supertitle
+if nargin < 2
+  fs = get(gcf,'defaultaxesfontsize')+4;
+end
+
+% Fudge factor to adjust y spacing between subplots
+fudge=1;
+
+haold = gca;
+figunits = get(gcf,'units');
+
+% Get the (approximate) difference between full height (plot + title
+% + xlabel) and bounding rectangle.
+
+	if (~strcmp(figunits,'pixels')),
+		set(gcf,'units','pixels');
+		pos = get(gcf,'position');
+		set(gcf,'units',figunits);
+	else,
+		pos = get(gcf,'position');
+	end
+	ff = (fs-4)*1.27*5/pos(4)*fudge;
+
+        % The 5 here reflects about 3 characters of height below
+        % an axis and 2 above. 1.27 is pixels per point.
+
+% Determine the bounding rectange for all the plots
+
+% h = findobj('Type','axes');   
+
+% findobj is a 4.2 thing.. if you don't have 4.2 comment out
+% the next line and uncomment the following block.
+	
+h = findobj(gcf,'Type','axes');  % Change suggested by Stacy J. Hills
+
+% If you don't have 4.2, use this code instead
+%ch = get(gcf,'children');
+%h=[];
+%for i=1:length(ch),
+%  if strcmp(get(ch(i),'type'),'axes'),
+%    h=[h,ch(i)];
+%  end
+%end
+
+	
+
+
+max_y=0;
+min_y=1;
+
+oldtitle =0;
+for i=1:length(h),
+	if (~strcmp(get(h(i),'Tag'),'suptitle')),
+		pos=get(h(i),'pos');
+		if (pos(2) < min_y), min_y=pos(2)-ff/5*3;end;
+		if (pos(4)+pos(2) > max_y), max_y=pos(4)+pos(2)+ff/5*2;end;
+	else,
+		oldtitle = h(i);
+	end
+end
+
+if max_y > plotregion,
+	scale = (plotregion-min_y)/(max_y-min_y);
+	for i=1:length(h),
+		pos = get(h(i),'position');
+		pos(2) = (pos(2)-min_y)*scale+min_y;
+		pos(4) = pos(4)*scale-(1-scale)*ff/5*3;
+		set(h(i),'position',pos);
+	end
+end
+
+np = get(gcf,'nextplot');
+set(gcf,'nextplot','add');
+if (oldtitle),
+	delete(oldtitle);
+end
+ha=axes('pos',[0 1 1 1],'visible','off','Tag','suptitle');
+ht=text(.5,titleypos-1,str);set(ht,'horizontalalignment','center','fontsize',fs);
+set(gcf,'nextplot',np);
+axes(haold);
+if nargout,
+	hout=ht;
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/unaryEncoding.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function U = unaryEncoding(data, K)
+% unaryEncoding Encode data(s) as a 1-of-K column vector
+% function U = unaryEncoding(data, K)
+%
+% eg.
+% If data = [3 2 2] and K=3,
+% then U = [0 0 0
+%           0 1 1
+%           1 0 0]
+
+if nargin < 2, K = max(data); end
+N = length(data);
+U = zeros(K,N);
+ndx = subv2ind([K N], [data(:)'; 1:N]');
+U(ndx) = 1;
+U = reshape(U, [K N]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/wrap.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function v = wrap(u,N)
+% WRAP Wrap a vector of indices around a torus.
+% v = wrap(u,N)
+%
+% e.g., wrap([-1 0 1 2 3 4], 3)   =   2 3 1 2 3 1
+
+v = mod(u-1,N)+1;       
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/xticklabel_rotate90.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+function xticklabel_rotate90(XTick,varargin)
+%XTICKLABEL_ROTATE90 - Rotate numeric Xtick labels by 90 degrees
+%
+% Syntax: xticklabel_rotate90(XTick)
+%
+% Input:  XTick - vector array of XTick positions & values (numeric)
+%
+% Output:  none
+%
+% Example 1:  Set the positions of the XTicks and rotate them
+%    figure;  plot([1960:2004],randn(45,1)); xlim([1960 2004]);
+%    xticklabel_rotate90([1960:2:2004]);
+%    %If you wish, you may set a few text "Property-value" pairs
+%    xticklabel_rotate90([1960:2:2004],'Color','m','Fontweight','bold');
+%
+% Example 2:  %Rotate XTickLabels at their current position
+%    XTick = get(gca,'XTick');
+%    xticklabel_rotate90(XTick);
+%
+% Other m-files required: none
+% Subfunctions: none
+% MAT-files required: none
+%
+% See also: TEXT,  SET
+
+% Author: Denis Gilbert, Ph.D., physical oceanography
+% Maurice Lamontagne Institute, Dept. of Fisheries and Oceans Canada
+% email: gilbertd@dfo-mpo.gc.ca  Web: http://www.qc.dfo-mpo.gc.ca/iml/
+% February 1998; Last revision: 24-Mar-2003
+
+if ~isnumeric(XTick)
+   error('XTICKLABEL_ROTATE90 requires a numeric input argument');
+end
+
+%Make sure XTick is a column vector
+XTick = XTick(:);
+
+%Set the Xtick locations and set XTicklabel to an empty string
+set(gca,'XTick',XTick,'XTickLabel','')
+
+% Define the xtickLabels
+xTickLabels = num2str(XTick);
+
+% Determine the location of the labels based on the position
+% of the xlabel
+hxLabel = get(gca,'XLabel');  % Handle to xlabel
+xLabelString = get(hxLabel,'String');
+
+if ~isempty(xLabelString)
+   warning('You may need to manually reset the XLABEL vertical position')
+end
+
+set(hxLabel,'Units','data');
+xLabelPosition = get(hxLabel,'Position');
+y = xLabelPosition(2);
+
+%CODE below was modified following suggestions from Urs Schwarz
+y=repmat(y,size(XTick,1),1);
+% retrieve current axis' fontsize
+fs = get(gca,'fontsize');
+
+% Place the new xTickLabels by creating TEXT objects
+hText = text(XTick, y, xTickLabels,'fontsize',fs);
+
+% Rotate the text objects by 90 degrees
+set(hText,'Rotation',90,'HorizontalAlignment','right',varargin{:})
+
+%------------- END OF CODE --------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/zipload.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+%ZIPLOAD   Load compressed data file created with ZIPSAVE
+%
+%	[data] = zipload( filename )
+%	filename: string variable that contains the name of the 
+%	compressed file (do not include '.zip' extension)
+%	Use only with files created with 'zipsave'
+%	pkzip25.exe has to be in the matlab path. This file is a compression utility 
+%	made by Pkware, Inc. It can be dowloaded from:	http://www.pkware.com
+%	Or directly from ftp://ftp.pkware.com/pk250c32.exe, for the Windows 95/NT version.
+%	This function was tested using 'PKZIP 2.50 Command Line for Windows 9x/NT'
+%	It is important to use version 2.5 of the utility. Otherwise the command line below
+%	has to be changed to include the proper options of the compression utility you 
+%	wish to use.
+%	This function was tested in MATLAB Version 5.3 under Windows NT.
+%	Fernando A. Brucher - May/25/1999
+%	
+%	Example:
+%		[loadedData] = zipload('testfile');
+%--------------------------------------------------------------------
+
+function [data] = zipload( filename )
+
+%--- Decompress data file by calling pkzip (comand line command) ---
+% 	Options used: 
+%	'extract' = decompress file
+%	'silent' = no console output 
+%	'over=all' = overwrite files
+
+%eval( ['!pkzip25 -extract -silent -over=all ', filename, '.zip'] )
+eval( ['!pkzip25 -extract -silent -over=all ', filename, '.zip'] )
+
+
+%--- Load data from decompressed file ---
+%	try, catch takes care of cases when pkzip fails to decompress a 
+%	valid matlab format file
+
+try
+   tmpStruc = load( filename );
+   data = tmpStruc.data;
+catch, return, end
+
+
+%--- Delete decompressed file ---
+
+delete( [filename,'.mat'] )
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/KPMtools/zipsave.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+%ZIPSAVE   Save data in compressed format
+%
+%	zipsave( filename, data )
+%	filename: string variable that contains the name of the resulting 
+%	compressed file (do not include '.zip' extension)
+%	pkzip25.exe has to be in the matlab path. This file is a compression utility 
+%	made by Pkware, Inc. It can be dowloaded from: http://www.pkware.com
+%	This function was tested using 'PKZIP 2.50 Command Line for Windows 9x/NT'
+%	It is important to use version 2.5 of the utility. Otherwise the command line below
+%	has to be changed to include the proper options of the compression utility you 
+%	wish to use.
+%	This function was tested in MATLAB Version 5.3 under Windows NT.
+%	Fernando A. Brucher - May/25/1999
+%	
+%	Example:
+%		testData = [1 2 3; 4 5 6; 7 8 9];
+%		zipsave('testfile', testData);
+%
+% Modified by Kevin Murphy, 26 Feb 2004, to use winzip
+%------------------------------------------------------------------------
+
+function zipsave( filename, data )
+
+%--- Save data in a temporary file in matlab format (.mat)---
+
+eval( ['save ''', filename, ''' data'] )
+
+
+%--- Compress data by calling pkzip (comand line command) ---
+% 	Options used: 
+%	'add' = add compressed files to the resulting zip file
+%	'silent' = no console output 
+%	'over=all' = overwrite files
+
+%eval( ['!pkzip25 -silent -add -over=all ', filename, '.zip ', filename,'.mat'] )
+eval( ['!zip ', filename, '.zip ', filename,'.mat'] )
+
+%--- Delete temporary matlab format file ---
+
+delete( [filename,'.mat'] )
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/AR_to_SS.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function [F,H,Q,R,initx, initV] = AR_to_SS(coef, C, y)
+%
+% Convert a vector auto-regressive model of order k to state-space form.
+% [F,H,Q,R] = AR_to_SS(coef, C, y)
+% 
+% X(i) = A(1) X(i-1) + ... + A(k) X(i-k+1) + v, where v ~ N(0, C)
+% and A(i) = coef(:,:,i) is the weight matrix for i steps ago.
+% We initialize the state vector with [y(:,k)' ... y(:,1)']', since
+% the state vector stores [X(i) ... X(i-k+1)]' in order.
+
+[s s2 k] = size(coef); % s is the size of the state vector
+bs = s * ones(1,k); % size of each block
+
+F = zeros(s*k);
+for i=1:k
+   F(block(1,bs), block(i,bs)) = coef(:,:,i);
+end
+for i=1:k-1
+  F(block(i+1,bs), block(i,bs)) = eye(s);
+end
+
+H = zeros(1*s, k*s);
+% we get to see the most recent component of the state vector 
+H(block(1,bs), block(1,bs)) = eye(s); 
+%for i=1:k
+%  H(block(1,bs), block(i,bs)) = eye(s);
+%end
+
+Q = zeros(k*s);
+Q(block(1,bs), block(1,bs)) = C;
+
+R = zeros(s);
+
+initx = zeros(k*s, 1);
+for i=1:k
+  initx(block(i,bs)) = y(:, k-i+1); % concatenate the first k observation vectors
+end
+
+initV = zeros(k*s); % no uncertainty about the state (since perfectly observable)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+/AR_to_SS.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/README.txt/1.1.1.1/Mon Jun  7 14:39:28 2004//
+/SS_to_AR.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/convert_to_lagged_form.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/ensure_AR.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/eval_AR_perf.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/kalman_filter.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/kalman_forward_backward.m/1.1.1.1/Sat Nov  2 00:32:36 2002//
+/kalman_smoother.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/kalman_update.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/learn_AR.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/learn_AR_diagonal.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/learn_kalman.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/learning_demo.m/1.1.1.1/Wed Oct 23 15:17:42 2002//
+/sample_lds.m/1.1.1.1/Fri Jan 24 19:36:02 2003//
+/smooth_update.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/testKalman.m/1.1.1.1/Thu Jun  9 01:56:34 2005//
+/tracking_demo.m/1.1.1.1/Sat Jan 18 22:49:22 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/Kalman
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/README.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+Kalman filter toolbox written by Kevin Murphy, 1998.
+See http://www.ai.mit.edu/~murphyk/Software/kalman.html for details.
+
+Installation
+------------
+
+1. Install KPMtools from http://www.ai.mit.edu/~murphyk/Software/KPMtools.html
+3. Assuming you installed all these files in your matlab directory, In Matlab type
+
+addpath matlab/KPMtools
+addpath matlab/Kalman
+
+
+Demos
+-----
+See tracking_demo.m for a demo of 2D tracking.
+See learning_demo.m for a demo of parameter estimation using EM.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/SS_to_AR.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [coef, C] = SS_to_AR(F, Q, k, diagonal)
+%
+% Extract the parameters of a vector autoregresssive process of order k from the state-space form.
+% [coef, C] = SS_to_AR(F, Q, k, diagonal)
+
+if nargin<4, diagonal = 0; end
+
+s = length(Q) / k;
+bs = s*ones(1,k);
+coef = zeros(s,s,k);
+for i=1:k
+  if diagonal
+    coef(:,:,i) = diag(diag(F(block(1,bs), block(i,bs))));
+  else
+    coef(:,:,i) = F(block(1,bs), block(i,bs));
+  end
+end
+C = Q(block(1,bs), block(1,bs));
+if diagonal
+  C = diag(diag(C));
+end
+%C = sqrt(Q(block(1,bs), block(1,bs))); % since cov(1,1) of full vector = C C'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/convert_to_lagged_form.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function yy = convert_to_lagged_form(y, k)
+% Create an observation vector yy(:,t) containing the last k values of y, newest first
+% e.g., k=2, y = (a1 a2 a3)     yy  = a2 a3
+%                (b1 b2 b3)           b2 b2
+%                                     a1 a2
+%                                     b1 b2
+
+[s T] = size(y);
+bs = s*ones(1,k);
+yy = zeros(k*s, T-k+1);
+for i=1:k
+  yy(block(i,bs), :) = y(:, k-i+1:end-i+1);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/ensure_AR.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function [A, C, Q, R, initx, initV] = ensure_AR(A, C, Q, R, initx, initV, k, obs, diagonal)
+%
+% Ensure that the system matrices have the right form for an autoregressive process.
+
+ss = length(A);
+if nargin<8, obs=ones(ss, 1); end
+if nargin<9, diagonal=0; end
+
+[coef, C] = SS_to_AR(A, Q, k, diagonal);
+[A, C, Q, R, initx, initV] = AR_to_SS(coef, C, obs);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/eval_AR_perf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function [ypred, ll, mse] = eval_AR_perf(coef, C, y, model)
+% Evaluate the performance of an AR model.
+% 
+% Inputs
+% coef(:,:,k,m) - coef. matrix to use for k steps back, model m
+% C(:,:,m)      - cov. matrix for model m
+% y(:,t)        - observation at time t
+% model(t)      - which model to use at time t (defaults to 1 if not specified)
+%
+% Outputs
+% ypred(:,t)    - the predicted value of y at t based on the evidence thru t-1.
+% ll            - log likelihood
+% mse           - mean squared error = sum_t d_t . d_t, where d_t = pred(y_t) - y(t)
+
+[s T] = size(y);
+k = size(coef, 3);
+M = size(coef, 4);
+
+if nargin<4, model = ones(1, T); end
+
+ypred = zeros(s, T);
+ypred(:, 1:k) = y(:, 1:k);
+mse = 0;
+ll = 0;
+for j=1:M
+  c(j) = log(normal_coef(C(:,:,j)));
+  invC(:,:,j) = inv(C(:,:,j));
+end
+coef = reshape(coef, [s s*k M]);
+
+for t=k+1:T
+  m = model(t-k);
+  past = y(:,t-1:-1:t-k);
+  ypred(:,t) = coef(:, :, m) * past(:);
+  d = ypred(:,t) - y(:,t);
+  mse = mse + d' * d;
+  ll = ll + c(m) - 0.5*(d' * invC(:,:,m) * d);
+end
+mse = mse / (T-k+1);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/kalman_filter.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,101 @@
+function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)
+% Kalman filter.
+% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)
+%
+% INPUTS:
+% y(:,t)   - the observation at time t
+% A - the system matrix
+% C - the observation matrix 
+% Q - the system covariance 
+% R - the observation covariance
+% init_x - the initial state (column) vector 
+% init_V - the initial state covariance 
+%
+% OPTIONAL INPUTS (string/value pairs [default in brackets])
+% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]
+%     In this case, all the above matrices take an additional final dimension,
+%     i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).
+%     However, init_x and init_V are independent of model(1).
+% 'u'     - u(:,t) the control signal at time t [ [] ]
+% 'B'     - B(:,:,m) the input regression matrix for model m
+%
+% OUTPUTS (where X is the hidden state being estimated)
+% x(:,t) = E[X(:,t) | y(:,1:t)]
+% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]
+% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2
+% loglik = sum{t=1}^T log P(y(:,t))
+%
+% If an input signal is specified, we also condition on it:
+% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]
+% If a model sequence is specified, we also condition on it:
+% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]
+
+[os T] = size(y);
+ss = size(A,1); % size of state space
+
+% set default params
+model = ones(1,T);
+u = [];
+B = [];
+ndx = [];
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i}
+   case 'model', model = args{i+1};
+   case 'u', u = args{i+1};
+   case 'B', B = args{i+1};
+   case 'ndx', ndx = args{i+1};
+   otherwise, error(['unrecognized argument ' args{i}])
+  end
+end
+
+x = zeros(ss, T);
+V = zeros(ss, ss, T);
+VV = zeros(ss, ss, T);
+
+loglik = 0;
+for t=1:T
+  m = model(t);
+  if t==1
+    %prevx = init_x(:,m);
+    %prevV = init_V(:,:,m);
+    prevx = init_x;
+    prevV = init_V;
+    initial = 1;
+  else
+    prevx = x(:,t-1);
+    prevV = V(:,:,t-1);
+    initial = 0;
+  end
+  if isempty(u)
+    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...
+	kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);
+  else
+    if isempty(ndx)
+      [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...
+	  kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ... 
+			'initial', initial, 'u', u(:,t), 'B', B(:,:,m));
+    else
+      i = ndx{t};
+      % copy over all elements; only some will get updated
+      x(:,t) = prevx;
+      prevP = inv(prevV);
+      prevPsmall = prevP(i,i);
+      prevVsmall = inv(prevPsmall);
+      [x(i,t), smallV, LL, VV(i,i,t)] = ...
+	  kalman_update(A(i,i,m), C(:,i,m), Q(i,i,m), R(:,:,m), y(:,t), prevx(i), prevVsmall, ...
+			'initial', initial, 'u', u(:,t), 'B', B(i,:,m));
+      smallP = inv(smallV);
+      prevP(i,i) = smallP;
+      V(:,:,t) = inv(prevP);
+    end    
+  end
+  loglik = loglik + LL;
+end
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/kalman_forward_backward.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+% KALMAN_FORWARD_BACKWARD		Forward Backward Propogation in Information Form 
+%
+%
+% Note	:
+%
+%  M file accompanying my technical note
+%
+%    A Technique for Painless Derivation of Kalman Filtering Recursions
+%
+% available from http://www.mbfys.kun.nl/~cemgil/papers/painless-kalman.ps
+% 
+
+% Uses :
+
+% Change History :
+% Date		Time		Prog	Note
+% 07-Jun-2001	 2:24 PM	ATC	Created under MATLAB 5.3.1.29215a (R11.1)
+
+% ATC = Ali Taylan Cemgil,
+% SNN - University of Nijmegen, Department of Medical Physics and Biophysics
+% e-mail : cemgil@mbfys.kun.nl 
+
+A = [1 1;0 1];
+C = [1 0];
+Q = eye(2)*0.01^2;
+R = 0.001^2;
+mu1 = [0;1];
+P1 = 3*Q;
+
+inv_Q = inv(Q);
+inv_R = inv(R);
+
+y = [0 1.1 2 2.95 3.78];
+
+T = length(y);
+L = size(Q,1);
+
+%%%%% Forward message Passing 
+h_f = zeros(L, T);
+K_f = zeros(L, L, T);
+g_f = zeros(1, T);
+h_f_pre = zeros(L, T);
+K_f_pre = zeros(L, L, T);
+g_f_pre = zeros(1, T);
+
+
+K_f_pre(:, :, 1) = inv(P1);
+h_f_pre(:,1) = K_f_pre(:, :, 1)*mu1;
+g_f_pre(1) = -0.5*log(det(2*pi*P1)) - 0.5*mu1'*inv(P1)*mu1;
+
+for i=1:T,
+  h_f(:,i) = h_f_pre(:,i) + C'*inv_R*y(:,i);
+  K_f(:,:,i) = K_f_pre(:,:,i) + C'*inv_R*C;
+  g_f(i) = g_f_pre(i) -0.5*log(det(2*pi*R)) - 0.5*y(:,i)'*inv_R*y(:,i);
+  if i<T,
+    M = inv(A'*inv_Q*A + K_f(:,:,i));
+    h_f_pre(:,i+1) = inv_Q*A*M*h_f(:,i);
+    K_f_pre(:,:,i+1) = inv_Q - inv_Q*A*M*A'*inv_Q;
+    g_f_pre(i+1) = g_f(i) -0.5*log(det(2*pi*Q)) + 0.5*log(det(2*pi*M)) + 0.5*h_f(:,i)'*M*h_f(:,i);
+  end;
+end
+
+%%% Backward Message Passing
+h_b = zeros(L, T);
+K_b = zeros(L, L, T);
+g_b = zeros(1, T);
+
+h_b_post = zeros(L, T);
+K_b_post = zeros(L, L, T);
+g_b_post = zeros(1, T);
+
+for i=T:-1:1,
+  h_b(:,i) = h_b_post(:,i) + C'*inv_R*y(:,i);
+  K_b(:,:,i) = K_b_post(:,:,i) + C'*inv_R*C;
+  g_b(i) = g_b_post(i) - 0.5*log(det(2*pi*R)) - 0.5*y(:,i)'*inv_R*y(:,i);
+  if i>1,
+    M = inv(inv_Q + K_b(:,:,i));
+    h_b_post(:,i-1) = A'*inv(Q)*M*h_b(:,i);
+    K_b_post(:,:,i-1) = A'*inv_Q*(Q - M)*inv_Q*A;
+    g_b_post(i-1) = g_b(i) -0.5*log(det(2*pi*Q)) + 0.5*log(det(2*pi*M)) + 0.5*h_b(:,i)'*M*h_b(:,i);
+  end;
+end;
+
+
+%%%% Smoothed Estimates
+
+mu = zeros(size(h_f));
+Sig = zeros(size(K_f));
+g = zeros(size(g_f));
+lalpha = zeros(size(g_f));
+
+for i=1:T,
+  Sig(:,:,i) = inv(K_b_post(:,:,i) + K_f(:,:,i));
+  mu(:,i) = Sig(:,:,i)*(h_b_post(:,i) + h_f(:,i));
+  g(i) = g_b_post(i) + g_f(:,i);
+  lalpha(i) = g(i) + 0.5*log(det(2*pi*Sig(:,:,i))) + 0.5*mu(:,i)'*inv(Sig(:,:,i))*mu(:,i);
+end;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/kalman_smoother.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+function [xsmooth, Vsmooth, VVsmooth, loglik] = kalman_smoother(y, A, C, Q, R, init_x, init_V, varargin)
+% Kalman/RTS smoother.
+% [xsmooth, Vsmooth, VVsmooth, loglik] = kalman_smoother(y, A, C, Q, R, init_x, init_V, ...)
+%
+% The inputs are the same as for kalman_filter.
+% The outputs are almost the same, except we condition on y(:, 1:T) (and u(:, 1:T) if specified),
+% instead of on y(:, 1:t).
+
+[os T] = size(y);
+ss = length(A);
+
+% set default params
+model = ones(1,T);
+u = [];
+B = [];
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i}
+   case 'model', model = args{i+1};
+   case 'u', u = args{i+1};
+   case 'B', B = args{i+1};
+   otherwise, error(['unrecognized argument ' args{i}])
+  end
+end
+
+xsmooth = zeros(ss, T);
+Vsmooth = zeros(ss, ss, T);
+VVsmooth = zeros(ss, ss, T);
+
+% Forward pass
+[xfilt, Vfilt, VVfilt, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...
+					       'model', model, 'u', u, 'B', B);
+
+% Backward pass
+xsmooth(:,T) = xfilt(:,T);
+Vsmooth(:,:,T) = Vfilt(:,:,T);
+%VVsmooth(:,:,T) = VVfilt(:,:,T);
+
+for t=T-1:-1:1
+  m = model(t+1);
+  if isempty(B)
+    [xsmooth(:,t), Vsmooth(:,:,t), VVsmooth(:,:,t+1)] = ...
+	smooth_update(xsmooth(:,t+1), Vsmooth(:,:,t+1), xfilt(:,t), Vfilt(:,:,t), ...
+		      Vfilt(:,:,t+1), VVfilt(:,:,t+1), A(:,:,m), Q(:,:,m), [], []);
+  else
+    [xsmooth(:,t), Vsmooth(:,:,t), VVsmooth(:,:,t+1)] = ...
+	smooth_update(xsmooth(:,t+1), Vsmooth(:,:,t+1), xfilt(:,t), Vfilt(:,:,t), ...
+		      Vfilt(:,:,t+1), VVfilt(:,:,t+1), A(:,:,m), Q(:,:,m), B(:,:,m), u(:,t+1));
+  end
+end
+
+VVsmooth(:,:,1) = zeros(ss,ss);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/kalman_update.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+function [xnew, Vnew, loglik, VVnew] = kalman_update(A, C, Q, R, y, x, V, varargin)
+% KALMAN_UPDATE Do a one step update of the Kalman filter
+% [xnew, Vnew, loglik] = kalman_update(A, C, Q, R, y, x, V, ...)
+%
+% INPUTS:
+% A - the system matrix
+% C - the observation matrix 
+% Q - the system covariance 
+% R - the observation covariance
+% y(:)   - the observation at time t
+% x(:) - E[X | y(:, 1:t-1)] prior mean
+% V(:,:) - Cov[X | y(:, 1:t-1)] prior covariance
+%
+% OPTIONAL INPUTS (string/value pairs [default in brackets])
+% 'initial' - 1 means x and V are taken as initial conditions (so A and Q are ignored) [0]
+% 'u'     - u(:) the control signal at time t [ [] ]
+% 'B'     - the input regression matrix
+%
+% OUTPUTS (where X is the hidden state being estimated)
+%  xnew(:) =   E[ X | y(:, 1:t) ] 
+%  Vnew(:,:) = Var[ X(t) | y(:, 1:t) ]
+%  VVnew(:,:) = Cov[ X(t), X(t-1) | y(:, 1:t) ]
+%  loglik = log P(y(:,t) | y(:,1:t-1)) log-likelihood of innovatio
+
+% set default params
+u = [];
+B = [];
+initial = 0;
+
+args = varargin;
+for i=1:2:length(args)
+  switch args{i}
+   case 'u', u = args{i+1};
+   case 'B', B = args{i+1};
+   case 'initial', initial = args{i+1};
+   otherwise, error(['unrecognized argument ' args{i}])
+  end
+end
+
+%  xpred(:) = E[X_t+1 | y(:, 1:t)]
+%  Vpred(:,:) = Cov[X_t+1 | y(:, 1:t)]
+
+if initial
+  if isempty(u)
+    xpred = x;
+  else
+    xpred = x + B*u;
+  end
+  Vpred = V;
+else
+  if isempty(u)
+    xpred = A*x;
+  else
+    xpred = A*x + B*u;
+  end
+  Vpred = A*V*A' + Q;
+end
+
+e = y - C*xpred; % error (innovation)
+n = length(e);
+ss = length(A);
+S = C*Vpred*C' + R;
+Sinv = inv(S);
+ss = length(V);
+loglik = gaussian_prob(e, zeros(1,length(e)), S, 1);
+K = Vpred*C'*Sinv; % Kalman gain matrix
+% If there is no observation vector, set K = zeros(ss).
+xnew = xpred + K*e;
+Vnew = (eye(ss) - K*C)*Vpred;
+VVnew = (eye(ss) - K*C)*A*V;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/learn_AR.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function [coef, C] = learn_AR(data, k)
+% Find the ML parameters of a vector autoregressive process of order k.
+% [coef, C] = learn_AR(k, data)
+% data{l}(:,t) = the observations at time t in sequence l
+
+warning('learn_AR seems to be broken');
+
+nex = length(data);
+obs = cell(1, nex);
+for l=1:nex
+  obs{l} = convert_to_lagged_form(data{l}, k);
+end
+
+% The initial parameter values don't matter, since this is a perfectly observable problem.
+% However, the size of F must be set correctly.
+y = data{1};
+[s T] = size(y);
+coef = rand(s,s,k);
+C = rand_psd(s);
+[F,H,Q,R,initx,initV] = AR_to_SS(coef, C, y);
+
+max_iter = 1;
+fully_observed = 1;
+diagQ = 0;
+diagR = 0;
+[F, H, Q, R, initx, initV, loglik] = ...
+    learn_kalman(obs, F, H, Q, R, initx, initV, max_iter, diagQ, diagR, fully_observed);
+
+[coef, C] = SS_to_AR(F, Q, k);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/learn_AR_diagonal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function [coef, C] = learn_AR_diagonal(y, k)
+% Find the ML parameters for a collection of independent scalar AR processes.
+
+% sep_coef(1,1,t,i) is the coefficient to apply to compopnent i of the state vector t steps ago
+% eg. consider two components L and R and let A = coef(:,:,1,:), B = coef(:,:,2,:)
+% L3    (AL  0   BL 0)     (L2)   (CL 0 0 0)
+% R3 =  (0   AR  0  BR)    (R2)   (0 CR 0 0)
+% L2    (1   0   0  0 )    (L1) + (0 0  0 0)
+% R2    (0   1   0  0 )    (R1)   (0 0  0 0)
+
+ss = size(y, 1);
+sep_coef = zeros(1,1,k,ss);
+for i=1:ss
+  [sep_coef(:,:,:,i), sep_cov(i)] = learn_AR(k, y(i,:));
+end
+C = diag(sep_cov);
+for t=1:k
+  x = sep_coef(1,1,t,:);
+  coef(:,:,t) = diag(x(:));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/learn_kalman.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,182 @@
+function [A, C, Q, R, initx, initV, LL] = ...
+    learn_kalman(data, A, C, Q, R, initx, initV, max_iter, diagQ, diagR, ARmode, constr_fun, varargin)
+% LEARN_KALMAN Find the ML parameters of a stochastic Linear Dynamical System using EM.
+%
+% [A, C, Q, R, INITX, INITV, LL] = LEARN_KALMAN(DATA, A0, C0, Q0, R0, INITX0, INITV0) fits
+% the parameters which are defined as follows
+%   x(t+1) = A*x(t) + w(t),  w ~ N(0, Q),  x(0) ~ N(init_x, init_V)
+%   y(t)   = C*x(t) + v(t),  v ~ N(0, R)
+% A0 is the initial value, A is the final value, etc.
+% DATA(:,t,l) is the observation vector at time t for sequence l. If the sequences are of
+% different lengths, you can pass in a cell array, so DATA{l} is an O*T matrix.
+% LL is the "learning curve": a vector of the log lik. values at each iteration.
+% LL might go positive, since prob. densities can exceed 1, although this probably
+% indicates that something has gone wrong e.g., a variance has collapsed to 0.
+%
+% There are several optional arguments, that should be passed in the following order.
+% LEARN_KALMAN(DATA, A0, C0, Q0, R0, INITX0, INITV0, MAX_ITER, DIAGQ, DIAGR, ARmode)
+% MAX_ITER specifies the maximum number of EM iterations (default 10).
+% DIAGQ=1 specifies that the Q matrix should be diagonal. (Default 0).
+% DIAGR=1 specifies that the R matrix should also be diagonal. (Default 0).
+% ARMODE=1 specifies that C=I, R=0. i.e., a Gauss-Markov process. (Default 0).
+% This problem has a global MLE. Hence the initial parameter values are not important.
+% 
+% LEARN_KALMAN(DATA, A0, C0, Q0, R0, INITX0, INITV0, MAX_ITER, DIAGQ, DIAGR, F, P1, P2, ...)
+% calls [A,C,Q,R,initx,initV] = f(A,C,Q,R,initx,initV,P1,P2,...) after every M step. f can be
+% used to enforce any constraints on the params. 
+%
+% For details, see
+% - Ghahramani and Hinton, "Parameter Estimation for LDS", U. Toronto tech. report, 1996
+% - Digalakis, Rohlicek and Ostendorf, "ML Estimation of a stochastic linear system with the EM
+%      algorithm and its application to speech recognition",
+%       IEEE Trans. Speech and Audio Proc., 1(4):431--442, 1993.
+
+
+%    learn_kalman(data, A, C, Q, R, initx, initV, max_iter, diagQ, diagR, ARmode, constr_fun, varargin)
+if nargin < 8, max_iter = 10; end
+if nargin < 9, diagQ = 0; end
+if nargin < 10, diagR = 0; end
+if nargin < 11, ARmode = 0; end
+if nargin < 12, constr_fun = []; end
+verbose = 1;
+thresh = 1e-4;
+
+
+if ~iscell(data)
+  N = size(data, 3);
+  data = num2cell(data, [1 2]); % each elt of the 3rd dim gets its own cell
+else
+  N = length(data);
+end
+
+N = length(data);
+ss = size(A, 1);
+os = size(C,1);
+
+alpha = zeros(os, os);
+Tsum = 0;
+for ex = 1:N
+  %y = data(:,:,ex);
+  y = data{ex};
+  T = length(y);
+  Tsum = Tsum + T;
+  alpha_temp = zeros(os, os);
+  for t=1:T
+    alpha_temp = alpha_temp + y(:,t)*y(:,t)';
+  end
+  alpha = alpha + alpha_temp;
+end
+
+previous_loglik = -inf;
+loglik = 0;
+converged = 0;
+num_iter = 1;
+LL = [];
+
+% Convert to inline function as needed.
+if ~isempty(constr_fun)
+  constr_fun = fcnchk(constr_fun,length(varargin));
+end
+
+
+while ~converged & (num_iter <= max_iter) 
+
+  %%% E step
+  
+  delta = zeros(os, ss);
+  gamma = zeros(ss, ss);
+  gamma1 = zeros(ss, ss);
+  gamma2 = zeros(ss, ss);
+  beta = zeros(ss, ss);
+  P1sum = zeros(ss, ss);
+  x1sum = zeros(ss, 1);
+  loglik = 0;
+  
+  for ex = 1:N
+    y = data{ex};
+    T = length(y);
+    [beta_t, gamma_t, delta_t, gamma1_t, gamma2_t, x1, V1, loglik_t] = ...
+	Estep(y, A, C, Q, R, initx, initV, ARmode);
+    beta = beta + beta_t;
+    gamma = gamma + gamma_t;
+    delta = delta + delta_t;
+    gamma1 = gamma1 + gamma1_t;
+    gamma2 = gamma2 + gamma2_t;
+    P1sum = P1sum + V1 + x1*x1';
+    x1sum = x1sum + x1;
+    %fprintf(1, 'example %d, ll/T %5.3f\n', ex, loglik_t/T);
+    loglik = loglik + loglik_t;
+  end
+  LL = [LL loglik];
+  if verbose, fprintf(1, 'iteration %d, loglik = %f\n', num_iter, loglik); end
+  %fprintf(1, 'iteration %d, loglik/NT = %f\n', num_iter, loglik/Tsum);
+  num_iter =  num_iter + 1;
+  
+  %%% M step
+  
+  % Tsum =  N*T
+  % Tsum1 = N*(T-1);
+  Tsum1 = Tsum - N;
+  A = beta * inv(gamma1);
+  %A = (gamma1' \ beta')';
+  Q = (gamma2 - A*beta') / Tsum1;
+  if diagQ
+    Q = diag(diag(Q));
+  end
+  if ~ARmode
+    C = delta * inv(gamma);
+    %C = (gamma' \ delta')';
+    R = (alpha - C*delta') / Tsum;
+    if diagR
+      R = diag(diag(R));
+    end
+  end
+  initx = x1sum / N;
+  initV = P1sum/N - initx*initx';
+
+  if ~isempty(constr_fun)
+    [A,C,Q,R,initx,initV] = feval(constr_fun, A, C, Q, R, initx, initV, varargin{:});
+  end
+  
+  converged = em_converged(loglik, previous_loglik, thresh);
+  previous_loglik = loglik;
+end
+
+
+
+%%%%%%%%%
+
+function [beta, gamma, delta, gamma1, gamma2, x1, V1, loglik] = ...
+    Estep(y, A, C, Q, R, initx, initV, ARmode)
+%
+% Compute the (expected) sufficient statistics for a single Kalman filter sequence.
+%
+
+[os T] = size(y);
+ss = length(A);
+
+if ARmode
+  xsmooth = y;
+  Vsmooth = zeros(ss, ss, T); % no uncertainty about the hidden states
+  VVsmooth = zeros(ss, ss, T);
+  loglik = 0;
+else
+  [xsmooth, Vsmooth, VVsmooth, loglik] = kalman_smoother(y, A, C, Q, R, initx, initV);
+end
+
+delta = zeros(os, ss);
+gamma = zeros(ss, ss);
+beta = zeros(ss, ss);
+for t=1:T
+  delta = delta + y(:,t)*xsmooth(:,t)';
+  gamma = gamma + xsmooth(:,t)*xsmooth(:,t)' + Vsmooth(:,:,t);
+  if t>1 beta = beta + xsmooth(:,t)*xsmooth(:,t-1)' + VVsmooth(:,:,t); end
+end
+gamma1 = gamma - xsmooth(:,T)*xsmooth(:,T)' - Vsmooth(:,:,T);
+gamma2 = gamma - xsmooth(:,1)*xsmooth(:,1)' - Vsmooth(:,:,1);
+
+x1 = xsmooth(:,1);
+V1 = Vsmooth(:,:,1);
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/learning_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+% Make a point move in the 2D plane
+% State = (x y xdot ydot). We only observe (x y).
+% Generate data from this process, and try to learn the dynamics back.
+
+% X(t+1) = F X(t) + noise(Q)
+% Y(t) = H X(t) + noise(R)
+
+ss = 4; % state size
+os = 2; % observation size
+F = [1 0 1 0; 0 1 0 1; 0 0 1 0; 0 0 0 1]; 
+H = [1 0 0 0; 0 1 0 0];
+Q = 0.1*eye(ss);
+R = 1*eye(os);
+initx = [10 10 1 0]';
+initV = 10*eye(ss);
+
+seed = 1;
+rand('state', seed);
+randn('state', seed);
+T = 100;
+[x,y] = sample_lds(F, H, Q, R, initx, T);
+
+% Initializing the params to sensible values is crucial.
+% Here, we use the true values for everything except F and H,
+% which we initialize randomly (bad idea!)
+% Lack of identifiability means the learned params. are often far from the true ones.
+% All that EM guarantees is that the likelihood will increase.
+F1 = randn(ss,ss);
+H1 = randn(os,ss);
+Q1 = Q;
+R1 = R;
+initx1 = initx;
+initV1 = initV;
+max_iter = 10;
+[F2, H2, Q2, R2, initx2, initV2, LL] =  learn_kalman(y, F1, H1, Q1, R1, initx1, initV1, max_iter);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/sample_lds.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function [x,y] = sample_lds(F, H, Q, R, init_state, T, models, G, u)
+% SAMPLE_LDS Simulate a run of a (switching) stochastic linear dynamical system.
+% [x,y] = switching_lds_draw(F, H, Q, R, init_state, models, G, u)
+% 
+%   x(t+1) = F*x(t) + G*u(t) + w(t),  w ~ N(0, Q),  x(0) = init_state
+%   y(t) =   H*x(t) + v(t),  v ~ N(0, R)
+%
+% Input:
+% F(:,:,i) - the transition matrix for the i'th model
+% H(:,:,i) - the observation matrix for the i'th model
+% Q(:,:,i) - the transition covariance for the i'th model
+% R(:,:,i) - the observation covariance for the i'th model
+% init_state(:,i) - the initial mean for the i'th model
+% T - the num. time steps to run for
+%
+% Optional inputs:
+% models(t) - which model to use at time t. Default = ones(1,T)
+% G(:,:,i) - the input matrix for the i'th model. Default = 0.
+% u(:,t)   - the input vector at time t. Default = zeros(1,T)
+%
+% Output:
+% x(:,t)    - the hidden state vector at time t.
+% y(:,t)    - the observation vector at time t.
+
+
+if ~iscell(F)
+  F = num2cell(F, [1 2]);
+  H = num2cell(H, [1 2]);
+  Q = num2cell(Q, [1 2]);
+  R = num2cell(R, [1 2]);
+end
+
+M = length(F);
+%T = length(models);
+
+if nargin < 7,
+  models = ones(1,T);
+end
+if nargin < 8,
+  G = num2cell(repmat(0, [1 1 M]));
+  u = zeros(1,T);
+end
+
+[os ss] = size(H{1});
+state_noise_samples = cell(1,M);
+obs_noise_samples = cell(1,M);
+for i=1:M
+  state_noise_samples{i} = sample_gaussian(zeros(length(Q{i}),1), Q{i}, T)';
+  obs_noise_samples{i} = sample_gaussian(zeros(length(R{i}),1), R{i}, T)';
+end
+
+x = zeros(ss, T);
+y = zeros(os, T);
+
+m = models(1);
+x(:,1) = init_state(:,m);
+y(:,1) = H{m}*x(:,1) + obs_noise_samples{m}(:,1);
+
+for t=2:T
+  m = models(t);
+  x(:,t) = F{m}*x(:,t-1) + G{m}*u(:,t-1) + state_noise_samples{m}(:,t);
+  y(:,t) = H{m}*x(:,t)  + obs_noise_samples{m}(:,t);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/smooth_update.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function [xsmooth, Vsmooth, VVsmooth_future] = smooth_update(xsmooth_future, Vsmooth_future, ...
+    xfilt, Vfilt,  Vfilt_future, VVfilt_future, A, Q, B, u)
+% One step of the backwards RTS smoothing equations.
+% function [xsmooth, Vsmooth, VVsmooth_future] = smooth_update(xsmooth_future, Vsmooth_future, ...
+%    xfilt, Vfilt,  Vfilt_future, VVfilt_future, A, B, u)
+%
+% INPUTS:
+% xsmooth_future = E[X_t+1|T]
+% Vsmooth_future = Cov[X_t+1|T]
+% xfilt = E[X_t|t]
+% Vfilt = Cov[X_t|t]
+% Vfilt_future = Cov[X_t+1|t+1]
+% VVfilt_future = Cov[X_t+1,X_t|t+1]
+% A = system matrix for time t+1
+% Q = system covariance for time t+1
+% B = input matrix for time t+1 (or [] if none)
+% u = input vector for time t+1 (or [] if none)
+%
+% OUTPUTS:
+% xsmooth = E[X_t|T]
+% Vsmooth = Cov[X_t|T]
+% VVsmooth_future = Cov[X_t+1,X_t|T]
+
+%xpred = E[X(t+1) | t]
+if isempty(B)
+  xpred = A*xfilt;
+else
+  xpred = A*xfilt + B*u;
+end
+Vpred = A*Vfilt*A' + Q; % Vpred = Cov[X(t+1) | t]
+J = Vfilt * A' * inv(Vpred); % smoother gain matrix
+xsmooth = xfilt + J*(xsmooth_future - xpred);
+Vsmooth = Vfilt + J*(Vsmooth_future - Vpred)*J';
+VVsmooth_future = VVfilt_future + (Vsmooth_future - Vfilt_future)*inv(Vfilt_future)*VVfilt_future;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/testKalman.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+tracking_demo
+learning_demo
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/Kalman/tracking_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+% Make a point move in the 2D plane
+% State = (x y xdot ydot). We only observe (x y).
+
+% This code was used to generate Figure 15.9 of "Artificial Intelligence: a Modern Approach",
+% Russell and Norvig, 2nd edition, Prentice Hall, 2003.
+
+% X(t+1) = F X(t) + noise(Q)
+% Y(t) = H X(t) + noise(R)
+
+ss = 4; % state size
+os = 2; % observation size
+F = [1 0 1 0; 0 1 0 1; 0 0 1 0; 0 0 0 1]; 
+H = [1 0 0 0; 0 1 0 0];
+Q = 0.1*eye(ss);
+R = 1*eye(os);
+initx = [10 10 1 0]';
+initV = 10*eye(ss);
+
+seed = 9;
+rand('state', seed);
+randn('state', seed);
+T = 15;
+[x,y] = sample_lds(F, H, Q, R, initx, T);
+
+[xfilt, Vfilt, VVfilt, loglik] = kalman_filter(y, F, H, Q, R, initx, initV);
+[xsmooth, Vsmooth] = kalman_smoother(y, F, H, Q, R, initx, initV);
+
+dfilt = x([1 2],:) - xfilt([1 2],:);
+mse_filt = sqrt(sum(sum(dfilt.^2)))
+
+dsmooth = x([1 2],:) - xsmooth([1 2],:);
+mse_smooth = sqrt(sum(sum(dsmooth.^2)))
+
+
+figure(1)
+clf
+%subplot(2,1,1)
+hold on
+plot(x(1,:), x(2,:), 'ks-');
+plot(y(1,:), y(2,:), 'g*');
+plot(xfilt(1,:), xfilt(2,:), 'rx:');
+for t=1:T, plotgauss2d(xfilt(1:2,t), Vfilt(1:2, 1:2, t)); end
+hold off
+legend('true', 'observed', 'filtered', 3)
+xlabel('x')
+ylabel('y')
+
+
+
+% 3x3 inches
+set(gcf,'units','inches');
+set(gcf,'PaperPosition',[0 0 3 3])  
+%print(gcf,'-depsc','/home/eecs/murphyk/public_html/Bayes/Figures/aima_filtered.eps');
+%print(gcf,'-djpeg','-r100', '/home/eecs/murphyk/public_html/Bayes/Figures/aima_filtered.jpg');
+
+
+figure(2)
+%subplot(2,1,2)
+hold on
+plot(x(1,:), x(2,:), 'ks-');
+plot(y(1,:), y(2,:), 'g*');
+plot(xsmooth(1,:), xsmooth(2,:), 'rx:');
+for t=1:T, plotgauss2d(xsmooth(1:2,t), Vsmooth(1:2, 1:2, t)); end
+hold off
+legend('true', 'observed', 'smoothed', 3)
+xlabel('x')
+ylabel('y')
+
+
+% 3x3 inches
+set(gcf,'units','inches');
+set(gcf,'PaperPosition',[0 0 3 3])  
+%print(gcf,'-djpeg','-r100', '/home/eecs/murphyk/public_html/Bayes/Figures/aima_smoothed.jpg');
+%print(gcf,'-depsc','/home/eecs/murphyk/public_html/Bayes/Figures/aima_smoothed.eps');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/@assocarray/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+/assocarray.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/subsref.m/1.1.1.1/Wed Aug  4 19:36:30 2004//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/@assocarray/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/@assocarray
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/@assocarray/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/@assocarray/assocarray.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function A = assocarray(keys, vals)
+% ASSOCARRAY Make an associative array
+% function A = assocarray(keys, vals)
+%
+% keys{i} is the i'th string, vals{i} is the i'th value.
+% After construction, A('foo') will return the value associated with foo.
+
+A.keys = keys;
+A.vals = vals;
+A = class(A, 'assocarray');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/@assocarray/subsref.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function val = subsref(A, S)
+% SUBSREF Subscript reference for an associative array
+% A('foo') will return the value associated with foo.
+% If there are multiple identicaly keys, the first match is returned.
+% Currently the search is sequential.
+
+i = 1;
+while i <= length(A.keys)
+  if strcmp(S.subs{1}, A.keys{i})
+    val = A.vals{i};
+    return;
+  end
+  i = i + 1;
+end
+error(['can''t find ' S.subs{1}])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@boolean_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/boolean_CPD.m/1.1.1.1/Wed May 29 15:59:52 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@boolean_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@boolean_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@boolean_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@boolean_CPD/boolean_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,179 @@
+function CPD = boolean_CPD(bnet, self, ftype, fname, pfail)
+% BOOLEAN_CPD Make a tabular CPD representing a (noisy) boolean function
+%
+% CPD = boolean_cpd(bnet, self, 'inline', f) uses the inline function f
+% to specify the CPT.
+% e.g., suppose X4 = X2 AND (NOT X3). Then we can write
+%    bnet.CPD{4} = boolean_CPD(bnet, 4, 'inline', inline('(x(1) & ~x(2)'));  
+% Note that x(1) refers pvals(1) = X2, and x(2) refers to pvals(2)=X3.
+%
+% CPD = boolean_cpd(bnet, self, 'named', f) assumes f is a function name.
+% f can be built-in to matlab, or a file.
+% e.g., If X4 = X2 AND X3, we can write
+%    bnet.CPD{4} = boolean_CPD(bnet, 4, 'named', 'and');
+% e.g., If X4 = X2 OR X3, we can write
+%    bnet.CPD{4} = boolean_CPD(bnet, 4, 'named', 'any');
+%
+% CPD = boolean_cpd(bnet, self, 'rnd') makes a random non-redundant bool fn.
+%
+% CPD = boolean_CPD(bnet, self, 'inline'/'named', f, pfail)
+% will put probability mass 1-pfail on f(parents), and put pfail on the other value.
+% This is useful for simulating noisy boolean functions.
+% If pfail is omitted, it is set to 0.
+% (Note that adding noise to a random (non-redundant) boolean function just creates a different
+% (potentially redundant) random boolean function.)
+%
+% Note: This cannot be used to simulate a noisy-OR gate.
+% Example: suppose C has parents A and B, and the
+% link of A->C fails with prob pA and the link B->C fails with pB.
+% Then the noisy-OR gate defines the following distribution
+%
+%  A  B  P(C=0)
+%  0  0  1.0
+%  1  0  pA
+%  0  1  pB
+%  1  1  pA * PB
+% 
+% By contrast, boolean_CPD(bnet, C, 'any', p) would define
+%
+%  A  B  P(C=0) 
+%  0  0  1-p    
+%  1  0  p      
+%  0  1  p
+%  1  1  p
+
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = tabular_CPD(bnet, self);
+  return;
+elseif isa(bnet, 'boolean_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+
+if nargin < 5, pfail = 0; end
+
+ps = parents(bnet.dag, self);
+ns = bnet.node_sizes;
+psizes = ns(ps);
+self_size = ns(self);
+
+psucc = 1-pfail;
+
+k = length(ps);
+switch ftype
+ case 'inline', f = eval_bool_fn(fname, k);
+ case 'named',  f = eval_bool_fn(fname, k);
+ case 'rnd',    f = mk_rnd_bool_fn(k);
+ otherwise,     error(['unknown function type ' ftype]);
+end
+
+CPT = zeros(prod(psizes), self_size);
+ndx = find(f==0);
+CPT(ndx, 1) = psucc;
+CPT(ndx, 2) = pfail;
+ndx = find(f==1);
+CPT(ndx, 2) = psucc;
+CPT(ndx, 1) = pfail;
+if k > 0
+  CPT = reshape(CPT, [psizes self_size]);  
+end
+
+clamp = 1;
+CPD = tabular_CPD(bnet, self, CPT, [], clamp);
+
+
+
+%%%%%%%%%%%%
+
+function f = eval_bool_fn(fname, n)
+% EVAL_BOOL_FN Evaluate a boolean function on all bit vectors of length n
+% f = eval_bool_fn(fname, n)
+%
+% e.g. f = eval_bool_fn(inline('x(1) & x(3)'), 3)
+% returns   0     0     0     0     0     1     0     1
+
+ns = 2*ones(1, n);
+f = zeros(1, 2^n);
+bits = ind2subv(ns, 1:2^n);
+for i=1:2^n
+  f(i) = feval(fname, bits(i,:)-1);
+end
+
+%%%%%%%%%%%%%%%
+
+function f = mk_rnd_bool_fn(n)
+% MK_RND_BOOL_FN Make a random bit vector of length n that encodes a non-redundant boolean function
+% f = mk_rnd_bool_fn(n)
+
+red = 1;
+while red
+  f = sample_discrete([0.5 0.5], 2^n, 1)-1;
+  red = redundant_bool_fn(f);
+end
+
+%%%%%%%%
+
+
+function red = redundant_bool_fn(f)
+% REDUNDANT_BOOL_FN Does a boolean function depend on all its input values?
+% r = redundant_bool_fn(f)
+%
+% f is a vector of length 2^n, representing the output for each bit vector.
+% An input is redundant if there is no assignment to the other bits
+% which changes the output e.g., input 1 is redundant if u(2:n) s.t.,
+% f([0 u(2:n)]) <> f([1 u(2:n)]). 
+% A function is redundant it it has any redundant inputs.
+
+n = log2(length(f));
+ns = 2*ones(1,n);
+red = 0;
+for i=1:n
+  ens = ns;
+  ens(i) = 1;
+  U = ind2subv(ens, 1:2^(n-1));
+  U(:,i) = 1;
+  f1 = f(subv2ind(ns, U));
+  U(:,i) = 2;
+  f2 = f(subv2ind(ns, U));
+  if isequal(f1, f2)
+    red = 1;
+    return;
+  end
+end
+
+
+%%%%%%%%%%
+
+function [b, iter] = rnd_truth_table(N)
+% RND_TRUTH_TABLE Construct the output of a random truth table s.t. each input is non-redundant
+% b = rnd_truth_table(N)
+%
+% N is the number of inputs. 
+% b is a random bit string of length N, representing the output of the truth table.
+% Non-redundant means that, for each input position k,
+% there are at least two bit patterns, u and v, that differ only in the k'th position,
+% s.t., f(u) ~= f(v), where f is the function represented by b.
+% We use rejection sampling to ensure non-redundancy.
+%
+% Example: b = [0 0 0 1  0 0 0 1] is indep of 3rd input (AND of inputs 1 and 2)
+
+bits = ind2subv(2*ones(1,N), 1:2^N)-1;
+redundant = 1;
+iter = 0;
+while redundant & (iter < 4)
+  iter = iter + 1;
+  b = sample_discrete([0.5 0.5], 1, 2^N)-1;
+  redundant = 0;
+  for i=1:N
+    on = find(bits(:,i)==1);
+    off = find(bits(:,i)==0);
+    if isequal(b(on), b(off))
+      redundant = 1;
+      break;
+    end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@deterministic_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/deterministic_CPD.m/1.1.1.1/Mon Oct  7 13:26:36 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@deterministic_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@deterministic_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@deterministic_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@deterministic_CPD/deterministic_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function CPD = deterministic_CPD(bnet, self, fname, pfail)
+% DETERMINISTIC_CPD Make a tabular CPD representing a (noisy) deterministic function
+%
+% CPD = deterministic_CPD(bnet, self, fname)
+% This calls feval(fname, pvals) for each possible vector of parent values.
+% e.g., suppose there are 2 ternary parents, then pvals = 
+%  [1 1], [2 1], [3 1],   [1 2], [2 2], [3 2],   [1 3], [2 3], [3 3]
+% If v = feval(fname, pvals(i)), then
+%  CPD(x | parents=pvals(i)) = 1 if x==v, and = 0 if x<>v
+% e.g., suppose X4 = X2 AND (NOT X3). Then
+%    bnet.CPD{4} = deterministic_CPD(bnet, 4, inline('((x(1)-1) & ~(x(2)-1)) + 1'));  
+% Note that x(1) refers pvals(1) = X2, and x(2) refers to pvals(2)=X3
+% See also boolean_CPD.
+%
+% CPD = deterministic_CPD(bnet, self, fname, pfail)
+% will put probability mass 1-pfail on f(parents), and distribute pfail over the other values.
+% This is useful for simulating noisy deterministic functions.
+% If pfail is omitted, it is set to 0.
+%
+
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = tabular_CPD(bnet, self);
+  return;
+elseif isa(bnet, 'deterministic_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+
+if nargin < 4, pfail = 0; end
+
+ps = parents(bnet.dag, self);
+ns = bnet.node_sizes;
+psizes = ns(ps);
+self_size = ns(self);
+
+psucc = 1-pfail;
+
+CPT = zeros(prod(psizes), self_size);
+pvals = zeros(1, length(ps));
+for i=1:prod(psizes)
+  pvals = ind2subv(psizes, i);
+  x = feval(fname, pvals);
+  %fprintf('%d ', [pvals x]); fprintf('\n');
+  if psucc == 1
+    CPT(i, x) = 1;
+  else
+    CPT(i, x) = psucc;
+    rest = mysetdiff(1:self_size, x);
+    CPT(i, rest) = pfail/length(rest);
+  end
+end
+CPT = reshape(CPT, [psizes self_size]);  
+
+CPD = tabular_CPD(bnet, self, 'CPT',CPT, 'clamped',1);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CPD_to_lambda_msg.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function lam_msg = CPD_to_lambda_msg(CPD, msg_type, n, ps, msg, p, evidence)
+% CPD_TO_LAMBDA_MSG Compute lambda message (discrete)
+% lam_msg = compute_lambda_msg(CPD, msg_type, n, ps, msg, p, evidence)
+% Pearl p183 eq 4.52
+
+switch msg_type
+  case 'd',
+   T = prod_CPT_and_pi_msgs(CPD, n, ps, msg, p);
+   mysize = length(msg{n}.lambda);
+   lambda = dpot(n, mysize, msg{n}.lambda);
+   T = multiply_by_pot(T, lambda);
+   lam_msg = pot_to_marginal(marginalize_pot(T, p));
+   lam_msg = lam_msg.T;           
+ case 'g',
+  error('discrete_CPD can''t create Gaussian msgs')
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CPD_to_pi.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function pi = CPD_to_pi(CPD, msg_type, n, ps, msg, evidence)
+% COMPUTE_PI Compute pi vector (discrete) 
+% pi = compute_pi(CPD, msg_type, n, ps, msg, evidence)
+% Pearl p183 eq 4.51
+
+switch msg_type
+  case 'd',
+   T = prod_CPT_and_pi_msgs(CPD, n, ps, msg);
+   pi = pot_to_marginal(marginalize_pot(T, n));
+   pi = pi.T(:);                   
+ case 'g', 
+  error('can only convert discrete CPD to Gaussian pi if observed')
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CPD_to_scgpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function pot = CPD_to_scgpot(CPD, domain, ns, cnodes, evidence)
+% CPD_TO_SCGPOT Convert a CPD to a CG potential, incorporating any evidence (discrete)
+% pot = CPD_to_scgpot(CPD, domain, ns, cnodes, evidence)
+%
+% domain is the domain of CPD.
+% node_sizes(i) is the size of node i.
+% cnodes
+% evidence{i} is the evidence on the i'th node.
+
+%odom = domain(~isemptycell(evidence(domain)));
+
+%vals = cat(1, evidence{odom});
+%map = find_equiv_posns(odom, domain);
+%index = mk_multi_index(length(domain), map, vals);
+CPT = CPD_to_CPT(CPD);
+%CPT = CPT(index{:});
+CPT = CPT(:);
+%ns(odom) = 1;
+potarray = cell(1, length(CPT));
+for i=1:length(CPT)
+  %p = CPT(i);
+  potarray{i} = scgcpot(0, 0, CPT(i));
+  %scpot{i} = scpot(0, 0);
+end
+pot = scgpot(domain, [], [], ns, potarray);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+/CPD_to_lambda_msg.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/CPD_to_pi.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/CPD_to_scgpot.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/README/1.1.1.1/Wed May 29 15:59:52 2002//
+/convert_CPD_to_table_hidden_ps.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/convert_obs_CPD_to_table.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/convert_to_pot.m/1.1.1.1/Fri Feb 20 22:00:38 2004//
+/convert_to_sparse_table.c/1.1.1.1/Wed May 29 15:59:52 2002//
+/convert_to_table.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/discrete_CPD.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/dom_sizes.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/log_prob_node.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/prob_node.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/sample_node.m/1.1.1.1/Wed May 29 15:59:52 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+A D/Old////
+A D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@discrete_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/convert_to_pot.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/convert_to_table.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/prob_CPD.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/prob_node.m/1.1.1.1/Wed May 29 15:59:52 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@discrete_CPD/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/convert_to_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function pot = convert_to_pot(CPD, pot_type, domain, evidence)
+% CONVERT_TO_POT Convert a tabular CPD to one or more potentials
+% pots = convert_to_pot(CPD, pot_type, domain, evidence)
+%
+% pots{i} = CPD evaluated using evidence(domain(:,i))
+% If 'domains' is a single row vector, pots will be an object, not a cell array.
+
+ncases = size(domain,2);
+assert(ncases==1); % not yet vectorized
+
+sz = dom_sizes(CPD);
+ns = zeros(1, max(domain));
+ns(domain) = sz;
+
+local_ev = evidence(domain);
+obs_bitv = ~isemptycell(local_ev);
+odom = domain(obs_bitv);
+T = convert_to_table(CPD, domain, local_ev, obs_bitv);
+
+switch pot_type
+ case 'u',
+  pot = upot(domain, sz, T, 0*myones(sz));  
+ case 'd',
+  ns(odom) = 1;
+  pot = dpot(domain, ns(domain), T);          
+ case {'c','g'},
+  % Since we want the output to be a Gaussian, the whole family must be observed.
+  % In other words, the potential is really just a constant.
+  p = T;
+  %p = prob_node(CPD, evidence(domain(end)), evidence(domain(1:end-1)));
+  ns(domain) = 0;
+  pot = cpot(domain, ns(domain), log(p));       
+ case 'cg',
+  T = T(:);
+  ns(odom) = 1;
+  can = cell(1, length(T));
+  for i=1:length(T)
+    can{i} = cpot([], [], log(T(i)));
+  end
+  pot = cgpot(domain, [], ns, can);   
+ otherwise,
+  error(['unrecognized pot type ' pot_type])
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/convert_to_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function T = convert_to_table(CPD, domain, local_ev, obs_bitv)
+% CONVERT_TO_TABLE Convert a discrete CPD to a table
+% function T = convert_to_table(CPD, domain, local_ev, obs_bitv)
+%
+% We convert the CPD to a CPT, and then lookup the evidence on the discrete parents.
+% The resulting table can easily be converted to a potential.
+
+
+CPT = CPD_to_CPT(CPD);
+obs_child_only = ~any(obs_bitv(1:end-1)) & obs_bitv(end);
+
+if obs_child_only
+  sz = size(CPT);
+  CPT = reshape(CPT, prod(sz(1:end-1)), sz(end));
+  o = local_ev{end};
+  T = CPT(:, o);
+else
+  odom = domain(obs_bitv);  
+  vals = cat(1, local_ev{find(obs_bitv)}); % undo cell array
+  map = find_equiv_posns(odom, domain);
+  index = mk_multi_index(length(domain), map, vals);
+  T = CPT(index{:});
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/prob_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function p = prob_CPD(CPD, domain, ns, cnodes, evidence)
+% PROB_CPD Compute prob of a node given evidence on the parents (discrete)
+% p = prob_CPD(CPD, domain, ns, cnodes, evidence)
+%
+% domain is the domain of CPD.
+% node_sizes(i) is the size of node i.
+% cnodes = all the cts nodes
+% evidence{i} is the evidence on the i'th node.
+
+ps = domain(1:end-1);
+self = domain(end);
+CPT = CPD_to_CPT(CPD);
+
+if isempty(ps)
+  T = CPT;
+else
+  assert(~any(isemptycell(evidence(ps))));
+  pvals = cat(1, evidence{ps});
+  i = subv2ind(ns(ps), pvals(:)');
+  T = reshape(CPT, [prod(ns(ps)) ns(self)]);
+  T = T(i,:);
+end
+p = T(evidence{self});
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/Old/prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+function [P, p] = prob_node(CPD, self_ev, pev)
+% PROB_NODE Compute prod_m P(x(i,m)| x(pi_i,m), theta_i) for node i (discrete)
+% [P, p] = prob_node(CPD, self_ev, pev)
+%
+% self_ev(m) is the evidence on this node in case m.
+% pev(i,m) is the evidence on the i'th parent in case m (if there are any parents).
+% (These may also be cell arrays.)
+%
+% p(m) = P(x(i,m)| x(pi_i,m), theta_i) 
+% P = prod p(m)
+
+if iscell(self_ev), usecell = 1; else usecell = 0; end
+
+ncases = length(self_ev);
+sz = dom_sizes(CPD);
+
+nparents = length(sz)-1;
+if nparents == 0
+  assert(isempty(pev));
+else
+  assert(isequal(size(pev), [nparents ncases]));
+end
+
+n = length(sz);
+dom = 1:n;
+p = zeros(1, ncases);
+if nparents == 0
+  for m=1:ncases
+    if usecell
+      evidence = {self_ev{m}};
+    else
+      evidence = num2cell(self_ev(m));
+    end
+    T = convert_to_table(CPD, dom, evidence);
+    p(m) = T;
+  end
+else
+  for m=1:ncases
+    if usecell
+      evidence = cell(1,n);
+      evidence(1:n-1) = pev(:,m);
+      evidence(n) = self_ev(m);
+    else
+      evidence = num2cell([pev(:,m)', self_ev(m)]);
+    end
+    T = convert_to_table(CPD, dom, evidence);
+    p(m) = T;
+  end
+end
+P = prod(p);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/README	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+Any CPD on a discrete child with discrete parents
+can be represented as a table (although this might be quite big).
+discrete_CPD uses this tabular representation to implement various
+functions. Subtypes are free to implement more efficient versions.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/convert_CPD_to_table_hidden_ps.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function T = convert_CPD_to_table_hidden_ps(CPD, child_obs)
+% CONVERT_CPD_TO_TABLE_HIDDEN_PS Convert a discrete CPD to a table
+% T = convert_CPD_to_table_hidden_ps(CPD, child_obs)
+%
+% This is like convert_to_table, except that we are guaranteed that
+% none of the parents have evidence on them.
+% child_obs may be an integer (1,2,...) or [].
+
+CPT = CPD_to_CPT(CPD);
+if isempty(child_obs)
+  T = CPT(:);
+else
+  sz = dom_sizes(CPD);
+  if length(sz)==1 % no parents
+    T = CPT(child_obs);
+  else
+    CPT = reshape(CPT, prod(sz(1:end-1)), sz(end));
+    T = CPT(:, child_obs);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/convert_obs_CPD_to_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function T = convert_to_table(CPD, domain, evidence)
+% CONVERT_TO_TABLE Convert a discrete CPD to a table
+% T = convert_to_table(CPD, domain, evidence)
+%
+% We convert the CPD to a CPT, and then lookup the evidence on the discrete parents.
+% The resulting table can easily be converted to a potential.
+
+CPT = CPD_to_CPT(CPD);
+odom = domain(~isemptycell(evidence(domain)));
+vals = cat(1, evidence{odom});
+map = find_equiv_posns(odom, domain);
+index = mk_multi_index(length(domain), map, vals);
+T = CPT(index{:});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/convert_to_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+function pot = convert_to_pot(CPD, pot_type, domain, evidence)
+% CONVERT_TO_POT Convert a discrete CPD to a potential
+% pot = convert_to_pot(CPD, pot_type, domain, evidence)
+%
+% pots = CPD evaluated using evidence(domain)
+
+ncases = size(domain,2);
+assert(ncases==1); % not yet vectorized
+
+sz = dom_sizes(CPD);
+ns = zeros(1, max(domain));
+ns(domain) = sz;
+
+CPT1 = CPD_to_CPT(CPD);
+spar = issparse(CPT1);
+odom = domain(~isemptycell(evidence(domain)));
+if spar
+   T = convert_to_sparse_table(CPD, domain, evidence);
+else 
+   T = convert_to_table(CPD, domain, evidence);
+end
+
+switch pot_type
+ case 'u',
+  pot = upot(domain, sz, T, 0*myones(sz));  
+ case 'd',
+  ns(odom) = 1;
+  pot = dpot(domain, ns(domain), T);          
+ case {'c','g'},
+  % Since we want the output to be a Gaussian, the whole family must be observed.
+  % In other words, the potential is really just a constant.
+  p = T;
+  %p = prob_node(CPD, evidence(domain(end)), evidence(domain(1:end-1)));
+  ns(domain) = 0;
+  pot = cpot(domain, ns(domain), log(p));       
+
+ case 'cg',
+  T = T(:);
+  ns(odom) = 1;
+  can = cell(1, length(T));
+  for i=1:length(T)
+    if T(i) == 0 
+      can{i} = cpot([], [], -Inf); % bug fix by Bob Welch 20/2/04
+    else
+      can{i} = cpot([], [], log(T(i)));
+    end;
+  end
+  pot = cgpot(domain, [], ns, can); 
+  
+ case 'scg'
+  T = T(:);
+  ns(odom) = 1;
+  pot_array = cell(1, length(T));
+  for i=1:length(T)
+    pot_array{i} = scgcpot([], [], T(i));
+  end
+  pot = scgpot(domain, [], [], ns, pot_array);   
+
+ otherwise,
+  error(['unrecognized pot type ' pot_type])
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/convert_to_sparse_table.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,154 @@
+/* convert_to_sparse_table.c  convert a sparse discrete CPD with evidence into sparse table */
+/* convert_to_pot.m located in ../CPDs/discrete_CPD call it */
+/* 3 input */
+/* CPD      prhs[0] with 1D sparse CPT */
+/* domain   prhs[1]                    */
+/* evidence prhs[2]                    */
+/* 1 output */
+/* T        plhs[0] sparse table       */
+
+#include <math.h>
+#include "mex.h"
+
+void ind_subv(int index, const int *cumprod, const int n, int *bsubv){
+	int i;
+
+	for (i = n-1; i >= 0; i--) {
+		bsubv[i] = ((int)floor(index / cumprod[i]));
+		index = index % cumprod[i];
+	}
+}
+
+int subv_ind(const int n, const int *cumprod, const int *subv){
+	int i, index=0;
+
+	for(i=0; i<n; i++){
+		index += subv[i] * cumprod[i];
+	}
+	return index;
+}
+
+void reset_nzmax(mxArray *spArray, const int old_nzmax, const int new_nzmax){
+	double *ptr;
+	void   *newptr;
+	int    *ir, *jc;
+	int    nbytes;
+
+	if(new_nzmax == old_nzmax) return;
+	nbytes = new_nzmax * sizeof(*ptr);
+	ptr = mxGetPr(spArray);
+	newptr = mxRealloc(ptr, nbytes);
+	mxSetPr(spArray, newptr);
+	nbytes = new_nzmax * sizeof(*ir);
+	ir = mxGetIr(spArray);
+	newptr = mxRealloc(ir, nbytes);
+	mxSetIr(spArray, newptr);
+	jc = mxGetJc(spArray);
+	jc[0] = 0;
+	jc[1] = new_nzmax;
+	mxSetNzmax(spArray, new_nzmax);
+}
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, j, NS, NZB, count, bdim, match, domain, bindex, sindex, nzCounts=0;
+	int     *observed, *bsubv, *ssubv, *bir, *sir, *bjc, *sjc, *mask, *ssize, *bcumprod, *scumprod;
+	double  *pDomain, *pSize, *bpr, *spr;
+	mxArray *pTemp;
+
+	pTemp = mxGetField(prhs[0], 0, "CPT");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+	pTemp = mxGetField(prhs[0], 0, "sizes");
+	pSize = mxGetPr(pTemp);
+
+	pDomain = mxGetPr(prhs[1]);
+	bdim = mxGetNumberOfElements(prhs[1]);
+
+	mask = malloc(bdim * sizeof(int));
+	ssize = malloc(bdim * sizeof(int));
+	observed = malloc(bdim * sizeof(int));
+
+	for(i=0; i<bdim; i++){
+		ssize[i] = (int)pSize[i];
+	}
+
+	count = 0;
+	for(i=0; i<bdim; i++){
+		domain = (int)pDomain[i] - 1;
+		pTemp = mxGetCell(prhs[2], domain);
+		if(pTemp){
+			mask[count] = i;
+			ssize[i] = 1;
+			observed[count] = (int)mxGetScalar(pTemp) - 1;
+			count++;
+		}
+	}
+
+	if(count == 0){
+		pTemp = mxGetField(prhs[0], 0, "CPT");
+		plhs[0] = mxDuplicateArray(pTemp);
+		free(mask);
+		free(ssize);
+		free(observed);
+		return;
+	}
+
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(count * sizeof(int));
+	bcumprod = malloc(bdim * sizeof(int));
+	scumprod = malloc(bdim * sizeof(int));
+
+	NS = 1;
+	for(i=0; i<bdim; i++){
+		NS *= ssize[i];
+	}
+
+	plhs[0] = mxCreateSparse(NS, 1, NS, mxREAL);
+	spr = mxGetPr(plhs[0]);
+	sir = mxGetIr(plhs[0]);
+	sjc = mxGetJc(plhs[0]);
+	sjc[0] = 0;
+	sjc[1] = NS;
+
+	bcumprod[0] = 1;
+	scumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bcumprod[i+1] = bcumprod[i] * (int)pSize[i];
+		scumprod[i+1] = scumprod[i] * ssize[i];
+	}
+
+	nzCounts = 0;
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bcumprod, bdim, bsubv);
+		for(j=0; j<count; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		match = 1;
+		for(j=0; j<count; j++){
+			if((ssubv[j]) != observed[j]){
+				match = 0;
+				break;
+			}
+		}
+		if(match){
+			spr[nzCounts] = bpr[i];
+			sindex = subv_ind(bdim, scumprod, bsubv);
+			sir[nzCounts] = sindex;
+			nzCounts++;
+		}
+	}
+
+	reset_nzmax(plhs[0], NS, nzCounts);
+	free(mask);
+	free(ssize);
+	free(observed);
+	free(bsubv);
+	free(ssubv);
+	free(bcumprod);
+	free(scumprod);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/convert_to_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function T = convert_to_table(CPD, domain, evidence)
+% CONVERT_TO_TABLE Convert a discrete CPD to a table
+% T = convert_to_table(CPD, domain, evidence)
+%
+% We convert the CPD to a CPT, and then lookup the evidence on the discrete parents.
+% The resulting table can easily be converted to a potential.
+
+domain = domain(:);
+CPT = CPD_to_CPT(CPD);
+odom = domain(~isemptycell(evidence(domain)));
+vals = cat(1, evidence{odom});
+map = find_equiv_posns(odom, domain);
+index = mk_multi_index(length(domain), map, vals);
+T = CPT(index{:});
+T = T(:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/discrete_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function CPD = discrete_CPD(clamped, dom_sizes)
+% DISCRETE_CPD Virtual constructor for generic discrete CPD
+% CPD = discrete_CPD(clamped, dom_sizes)
+
+CPD.dom_sizes = dom_sizes;
+CPD = class(CPD, 'discrete_CPD', generic_CPD(clamped));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/dom_sizes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function sz = dom_sizes(CPD)
+% DOM_SIZES Return the size of each node in the domain
+% sz = dom_sizes(CPD)
+
+sz = CPD.dom_sizes;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/log_prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function L = log_prob_node(CPD, self_ev, pev)
+% LOG_PROB_NODE Compute sum_m log P(x(i,m)| x(pi_i,m), theta_i) for node i (discrete)
+% L = log_prob_node(CPD, self_ev, pev)
+%
+% self_ev(m) is the evidence on this node in case m.
+% pev(i,m) is the evidence on the i'th parent in case m (if there are any parents).
+% (These may also be cell arrays.)
+
+[P, p] = prob_node(CPD, self_ev, pev); % P may underflow, so we use p
+tiny = exp(-700);
+p = p + (p==0)*tiny; % replace 0s by tiny
+L = sum(log(p));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/prod_CPT_and_pi_msgs.m/1.1.1.1/Wed May 29 15:59:52 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@discrete_CPD/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/private/prod_CPT_and_pi_msgs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function T = prod_CPT_and_pi_msgs(CPD, n, ps, msgs, except)
+% PROD_CPT_AND_PI_MSGS Multiply the CPD and all the pi messages from parents, perhaps excepting one
+% T = prod_CPY_and_pi_msgs(CPD, n, ps, msgs, except)
+
+if nargin < 5, except = -1; end
+
+dom = [ps n];
+%ns = sparse(1, max(dom));
+ns = zeros(1, max(dom));
+CPT = CPD_to_CPT(CPD);
+ns(dom) = mysize(CPT);
+T = dpot(dom, ns(dom), CPT);
+for i=1:length(ps)
+  p = ps(i);
+  if p ~= except
+    T = multiply_by_pot(T, dpot(p, ns(p), msgs{n}.pi_from_parent{i}));
+  end
+end         
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+function [P, p] = prob_node(CPD, self_ev, pev)
+% PROB_NODE Compute prod_m P(x(i,m)| x(pi_i,m), theta_i) for node i (discrete)
+% [P, p] = prob_node(CPD, self_ev, pev)
+%
+% self_ev(m) is the evidence on this node in case m.
+% pev(i,m) is the evidence on the i'th parent in case m (if there are any parents).
+% (These may also be cell arrays.)
+%
+% p(m) = P(x(i,m)| x(pi_i,m), theta_i) 
+% P = prod p(m)
+
+if iscell(self_ev), usecell = 1; else usecell = 0; end
+
+ncases = length(self_ev);
+sz = dom_sizes(CPD);
+
+nparents = length(sz)-1;
+if nparents == 0
+  assert(isempty(pev));
+else
+  assert(isequal(size(pev), [nparents ncases]));
+end
+
+n = length(sz);
+dom = 1:n;
+p = zeros(1, ncases);
+if isa(CPD, 'tabular_CPD')
+  % speed up by looking up CPT using index Zhang Yimin  2001-12-31
+  if usecell
+    if nparents == 0
+      data = [cell2num(self_ev)]; 
+    else
+      data = [cell2num(pev); cell2num(self_ev)]; 
+    end
+  else
+    if nparents == 0
+      data = [self_ev];
+    else
+      data = [pev; self_ev];
+    end
+  end
+  
+  indices = subv2ind(sz, data'); % each row of data' is a case 
+  
+  CPT=CPD_to_CPT(CPD);
+  p = CPT(indices);
+  
+  %get the prob list
+  %cpt_size = prod(sz);
+  %prob_list=reshape(CPT, cpt_size, 1);
+  %for m=1:ncases  %here we assume we get evidence for node and all its parents
+  %  idx=indices(m);
+  %  p(m)=prob_list(idx); 
+  %end
+  
+else % eg. softmax
+  
+  for m=1:ncases
+    if usecell
+      if nparents == 0
+	evidence = {self_ev{m}};
+      else
+	evidence = cell(1,n);
+	evidence(1:n-1) = pev(:,m);
+	evidence(n) = self_ev(m);
+      end
+    else
+      if nparents == 0
+	evidence = num2cell(self_ev(m));
+      else
+	evidence = num2cell([pev(:,m)', self_ev(m)]);
+      end
+    end
+    T = convert_to_table(CPD, dom, evidence);
+    p(m) = T;
+  end
+end
+  
+P = prod(p);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@discrete_CPD/sample_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function y = sample_node(CPD, pvals)
+% SAMPLE_NODE Draw a random sample from P(Xi | x(pi_i), theta_i)  (discrete)
+% y = sample_node(CPD, parent_evidence)
+%
+% parent_evidence{i} is the value of the i'th parent
+
+if 0
+n = length(pvals)+1;
+dom = 1:n;
+evidence = cell(1,n);
+evidence(1:n-1) = pvals;
+T = convert_to_table(CPD, dom, evidence);
+y = sample_discrete(T);
+end
+
+
+CPT = CPD_to_CPT(CPD);
+sz = mysize(CPT);
+nparents = length(sz)-1;
+switch nparents
+ case 0, T = CPT;
+ case 1, T = CPT(pvals{1}, :);
+ case 2, T = CPT(pvals{1}, pvals{2}, :);
+ case 3, T = CPT(pvals{1}, pvals{2}, pvals{3}, :);
+ case 4, T = CPT(pvals{1}, pvals{2}, pvals{3}, pvals{4}, :);
+ otherwise,
+  pvals = cat(1, pvals{:});
+  psz = sz(1:end-1);
+  ssz = sz(end);
+  i = subv2ind(psz, pvals(:)');
+  T = reshape(CPT, [prod(psz) ssz]);
+  T = T(i,:);
+end
+y = sample_discrete(T);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CPD_to_lambda_msg.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function lam_msg = CPD_to_lambda_msg(CPD, msg_type, n, ps, msg, p, evidence)
+% CPD_TO_LAMBDA_MSG Compute lambda message (gaussian)
+% lam_msg = compute_lambda_msg(CPD, msg_type, n, ps, msg, p, evidence)
+% Pearl p183 eq 4.52
+
+switch msg_type
+ case 'd',
+  error('gaussian_CPD can''t create discrete msgs')
+ case 'g',
+  cps = ps(CPD.cps);
+  cpsizes = CPD.sizes(CPD.cps);
+  self_size = CPD.sizes(end);
+  i = find_equiv_posns(p, cps); % p is n's i'th cts parent
+  psz = cpsizes(i);
+  if all(msg{n}.lambda.precision == 0) % no info to send on
+    lam_msg.precision = zeros(psz, psz);
+    lam_msg.info_state = zeros(psz, 1);
+    return;
+  end
+  [m, Q, W] = gaussian_CPD_params_given_dps(CPD, [ps n], evidence);
+  Bmu = m;
+  BSigma = Q;
+  for k=1:length(cps) % only get pi msgs from cts parents
+    pk = cps(k);
+    if pk ~= p
+      %bk = block(k, cpsizes);
+      bk = CPD.cps_block_ndx{k};
+      Bk = W(:, bk);
+      m = msg{n}.pi_from_parent{k}; 
+      BSigma = BSigma + Bk * m.Sigma * Bk';
+      Bmu = Bmu + Bk * m.mu;
+    end
+  end
+  % BSigma = Q + sum_{k \neq i} B_k Sigma_k B_k'
+  %bi = block(i, cpsizes);
+  bi = CPD.cps_block_ndx{i};
+  Bi = W(:,bi);
+  P = msg{n}.lambda.precision;
+  if (rcond(P) > 1e-3) | isinf(P)
+    if isinf(P) % Y is observed
+      Sigma_lambda = zeros(self_size, self_size); % infinite precision => 0 variance
+      mu_lambda = msg{n}.lambda.mu; % observed_value;
+    else
+      Sigma_lambda = inv(P);
+      mu_lambda = Sigma_lambda * msg{n}.lambda.info_state;
+    end
+    C = inv(Sigma_lambda + BSigma);
+    lam_msg.precision = Bi' * C * Bi;
+    lam_msg.info_state = Bi' * C * (mu_lambda - Bmu);
+  else
+    % method that uses matrix inversion lemma to avoid inverting P
+    A = inv(P + inv(BSigma));
+    C = P - P*A*P;
+    lam_msg.precision = Bi' * C * Bi;
+    D = eye(self_size) - P*A;
+    z = msg{n}.lambda.info_state;
+    lam_msg.info_state = Bi' * (D*z - D*P*Bmu);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CPD_to_pi.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function pi = CPD_to_pi(CPD, msg_type, n, ps, msg, evidence)
+% CPD_TO_PI Compute the pi vector (gaussian)
+% function pi = CPD_to_pi(CPD, msg_type, n, ps, msg, evidence)
+
+switch msg_type
+ case 'd',
+  error('gaussian_CPD can''t create discrete msgs')
+ case 'g',
+  [m, Q, W] = gaussian_CPD_params_given_dps(CPD, [ps n], evidence);
+  cps = ps(CPD.cps);
+  cpsizes = CPD.sizes(CPD.cps);
+  pi.mu = m;
+  pi.Sigma = Q;
+  for k=1:length(cps) % only get pi msgs from cts parents
+    %bk = block(k, cpsizes);
+    bk = CPD.cps_block_ndx{k};
+    Bk = W(:, bk);
+    m = msg{n}.pi_from_parent{k}; 
+    pi.Sigma = pi.Sigma + Bk * m.Sigma * Bk';
+    pi.mu = pi.mu + Bk * m.mu; % m.mu = u(k)
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CPD_to_scgpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+function pot = CPD_to_scgpot(CPD, domain, ns, cnodes, evidence)
+% CPD_TO_CGPOT Convert a Gaussian CPD to a CG potential, incorporating any evidence   
+% pot = CPD_to_cgpot(CPD, domain, ns, cnodes, evidence)
+
+self = CPD.self;
+dnodes = mysetdiff(1:length(ns), cnodes);
+odom = domain(~isemptycell(evidence(domain)));
+cdom = myintersect(cnodes, domain);
+cheaddom = myintersect(self, domain);
+ctaildom = mysetdiff(cdom,cheaddom);
+ddom = myintersect(dnodes, domain);
+cobs = myintersect(cdom, odom);
+dobs = myintersect(ddom, odom);
+ens = ns; % effective node size
+ens(cobs) = 0;
+ens(dobs) = 1;
+
+% Extract the params compatible with the observations (if any) on the discrete parents (if any)
+% parents are all but the last domain element
+ps = domain(1:end-1);
+dps = myintersect(ps, ddom);
+dops = myintersect(dps, odom);
+
+map = find_equiv_posns(dops, dps);
+dpvals = cat(1, evidence{dops});
+index = mk_multi_index(length(dps), map, dpvals);
+
+dpsize = prod(ens(dps));
+cpsize = size(CPD.weights(:,:,1), 2); % cts parents size
+ss = size(CPD.mean, 1); % self size
+% the reshape acts like a squeeze
+m = reshape(CPD.mean(:, index{:}), [ss dpsize]);
+C = reshape(CPD.cov(:, :, index{:}), [ss ss dpsize]);
+W = reshape(CPD.weights(:, :, index{:}), [ss cpsize dpsize]);
+
+
+% Convert each conditional Gaussian to a canonical potential
+pot = cell(1, dpsize);
+for i=1:dpsize
+  %pot{i} = linear_gaussian_to_scgcpot(m(:,i), C(:,:,i), W(:,:,i), cdom, ns, cnodes, evidence);
+  pot{i} = scgcpot(ss, cpsize, 1, m(:,i), W(:,:,i), C(:,:,i));
+end
+
+pot = scgpot(ddom, cheaddom, ctaildom, ens, pot);
+
+
+function pot = linear_gaussian_to_scgcpot(mu, Sigma, W, domain, ns, cnodes, evidence)
+% LINEAR_GAUSSIAN_TO_CPOT Convert a linear Gaussian CPD  to a stable conditional potential element.
+% pot = linear_gaussian_to_cpot(mu, Sigma, W, domain, ns, cnodes, evidence)
+
+p = 1;
+A = mu;
+B = W;
+C = Sigma;
+ns(odom) = 0;
+%pot = scgcpot(, ns(domain), p, A, B, C);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+/CPD_to_lambda_msg.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/CPD_to_pi.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/CPD_to_scgpot.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/adjustable_CPD.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/convert_CPD_to_table_hidden_ps.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/convert_to_pot.m/1.1.1.1/Sun Mar  9 23:03:16 2003//
+/convert_to_table.m/1.1.1.1/Sun May 11 23:31:54 2003//
+/display.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/gaussian_CPD.m/1.1.1.1/Wed Jun 15 21:13:06 2005//
+/gaussian_CPD_params_given_dps.m/1.1.1.1/Sun May 11 23:13:40 2003//
+/get_field.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/learn_params.m/1.1.1.1/Thu Jun 10 01:28:10 2004//
+/log_prob_node.m/1.1.1.1/Tue Sep 10 17:44:00 2002//
+/maximize_params.m/1.1.1.1/Tue May 20 14:10:06 2003//
+/maximize_params_debug.m/1.1.1.1/Fri Jan 31 00:13:10 2003//
+/reset_ess.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/sample_node.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/set_fields.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/update_ess.m/1.1.1.1/Tue Jul 22 22:55:46 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+A D/Old////
+A D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@gaussian_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/CPD_to_lambda_msg.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+function lam_msg = CPD_to_lambda_msg(CPD, msg_type, n, ps, msg, p)
+% CPD_TO_LAMBDA_MSG Compute lambda message (gaussian)
+% lam_msg = compute_lambda_msg(CPD, msg_type, n, ps, msg, p)
+% Pearl p183 eq 4.52
+
+switch msg_type
+ case 'd',
+  error('gaussian_CPD can''t create discrete msgs')
+ case 'g',
+  self_size = CPD.sizes(end);
+  if all(msg{n}.lambda.precision == 0) % no info to send on
+    lam_msg.precision = zeros(self_size);
+    lam_msg.info_state = zeros(self_size, 1);
+    return;
+  end
+  cpsizes = CPD.sizes(CPD.cps);
+  dpval = 1;
+  Q = CPD.cov(:,:,dpval);
+  Sigmai = Q;
+  wmu = zeros(self_size, 1);
+  for k=1:length(ps)
+    pk = ps(k);
+    if pk ~= p
+      bk = block(k, cpsizes);
+      Bk = CPD.weights(:, bk, dpval);
+      m = msg{n}.pi_from_parent{k};
+      Sigmai = Sigmai + Bk * m.Sigma * Bk';
+      wmu = wmu + Bk * m.mu; % m.mu = u(k)
+    end
+  end
+  % Sigmai = Q + sum_{k \neq i} B_k Sigma_k B_k'
+  i = find_equiv_posns(p, ps);
+  bi = block(i, cpsizes);
+  Bi = CPD.weights(:,bi, dpval);
+  
+  if 0
+  P = msg{n}.lambda.precision;
+  if isinf(P) % inv(P)=Sigma_lambda=0
+    precision_temp = inv(Sigmai);
+    lam_msg.precision = Bi' * precision_temp * Bi;
+    lam_msg.info_state = precision_temp * (msg{n}.lambda.mu - wmu);
+  else
+    A = inv(P + inv(Sigmai));
+    precision_temp = P + P*A*P;
+    lam_msg.precision = Bi' * precision_temp * Bi;
+    self_size = length(P);
+    C = eye(self_size) + P*A;
+    z = msg{n}.lambda.info_state;
+    lam_msg.info_state = C*z - C*P*wmu;
+  end
+  end
+  
+  if isinf(msg{n}.lambda.precision)
+    Sigma_lambda = zeros(self_size, self_size); % infinite precision => 0 variance
+    mu_lambda = msg{n}.lambda.mu; % observed_value;
+  else
+    Sigma_lambda = inv(msg{n}.lambda.precision);
+    mu_lambda = Sigma_lambda * msg{n}.lambda.info_state;
+  end
+  precision_temp = inv(Sigma_lambda + Sigmai);
+  lam_msg.precision = Bi' * precision_temp * Bi;
+  lam_msg.info_state = Bi' * precision_temp * (mu_lambda - wmu);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/CPD_to_lambda_msg.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/gaussian_CPD.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/log_prob_node.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/maximize_params.m/1.1.1.1/Thu Jan 30 22:38:16 2003//
+/update_ess.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/update_tied_ess.m/1.1.1.1/Wed May 29 15:59:52 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@gaussian_CPD/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/gaussian_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,184 @@
+function CPD = gaussian_CPD(varargin)
+% GAUSSIAN_CPD Make a conditional linear Gaussian distrib.
+%
+% To define this CPD precisely, call the continuous (cts) parents (if any) X,
+% the discrete parents (if any) Q, and this node Y. Then the distribution on Y is:
+% - no parents: Y ~ N(mu, Sigma)
+% - cts parents : Y|X=x ~ N(mu + W x, Sigma)
+% - discrete parents: Y|Q=i ~ N(mu(i), Sigma(i))
+% - cts and discrete parents: Y|X=x,Q=i ~ N(mu(i) + W(i) x, Sigma(i))
+%
+% CPD = gaussian_CPD(bnet, node, ...) will create a CPD with random parameters,
+% where node is the number of a node in this equivalence class.
+%
+% The list below gives optional arguments [default value in brackets].
+% (Let ns(i) be the size of node i, X = ns(X), Y = ns(Y) and Q = prod(ns(Q)).)
+%
+% mean       - mu(:,i) is the mean given Q=i [ randn(Y,Q) ]
+% cov        - Sigma(:,:,i) is the covariance given Q=i [ repmat(eye(Y,Y), [1 1 Q]) ]
+% weights    - W(:,:,i) is the regression matrix given Q=i [ randn(Y,X,Q) ]
+% cov_type   - if 'diag', Sigma(:,:,i) is diagonal [ 'full' ]
+% tied_cov   - if 1, we constrain Sigma(:,:,i) to be the same for all i [0]
+% clamp_mean - if 1, we do not adjust mu(:,i) during learning [0]
+% clamp_cov  - if 1, we do not adjust Sigma(:,:,i) during learning [0]
+% clamp_weights - if 1, we do not adjust W(:,:,i) during learning [0]
+% cov_prior_weight - weight given to I prior for estimating Sigma [0.01]
+%
+% e.g., CPD = gaussian_CPD(bnet, i, 'mean', [0; 0], 'clamp_mean', 'yes')
+%
+% For backwards compatibility with BNT2, you can also specify the parameters in the following order
+%   CPD = gaussian_CPD(bnet, self, mu, Sigma, W, cov_type, tied_cov, clamp_mean, clamp_cov, clamp_weight)
+%
+% Sometimes it is useful to create an "isolated" CPD, without needing to pass in a bnet.
+% In this case, you must specify the discrete and cts parents (dps, cps) and the family sizes, followed
+% by the optional arguments above:
+%   CPD = gaussian_CPD('self', i, 'dps', dps, 'cps', cps, 'sz', fam_size, ...)
+
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  clamp = 0;
+  CPD = class(CPD, 'gaussian_CPD', generic_CPD(clamp));
+  return;
+elseif isa(varargin{1}, 'gaussian_CPD')
+  % This might occur if we are copying an object.
+  CPD = varargin{1};
+  return;
+end
+CPD = init_fields;
+ 
+CPD = class(CPD, 'gaussian_CPD', generic_CPD(0));
+
+
+% parse mandatory arguments
+if ~isstr(varargin{1}) % pass in bnet
+  bnet = varargin{1};
+  self = varargin{2};
+  args = varargin(3:end);
+  ns = bnet.node_sizes;
+  ps = parents(bnet.dag, self);
+  dps = myintersect(ps, bnet.dnodes);
+  cps = myintersect(ps, bnet.cnodes);
+  fam_sz = ns([ps self]);
+else
+  disp('parsing new style')
+  for i=1:2:length(varargin)
+    switch varargin{i},
+     case 'self', self = varargin{i+1}; 
+     case 'dps',  dps = varargin{i+1};
+     case 'cps',  cps = varargin{i+1};
+     case 'sz',   fam_sz = varargin{i+1};
+    end
+  end
+  ps = myunion(dps, cps);
+  args = varargin;
+end
+
+CPD.self = self;
+CPD.sizes = fam_sz;
+
+% Figure out which (if any) of the parents are discrete, and which cts, and how big they are
+% dps = discrete parents, cps = cts parents
+CPD.cps = find_equiv_posns(cps, ps); % cts parent index
+CPD.dps = find_equiv_posns(dps, ps);
+ss = fam_sz(end);
+psz = fam_sz(1:end-1);
+dpsz = prod(psz(CPD.dps));
+cpsz = sum(psz(CPD.cps));
+
+% set default params
+CPD.mean = randn(ss, dpsz);
+CPD.cov = 100*repmat(eye(ss), [1 1 dpsz]);    
+CPD.weights = randn(ss, cpsz, dpsz);
+CPD.cov_type = 'full';
+CPD.tied_cov = 0;
+CPD.clamped_mean = 0;
+CPD.clamped_cov = 0;
+CPD.clamped_weights = 0;
+CPD.cov_prior_weight = 0.01;
+
+nargs = length(args);
+if nargs > 0
+  if ~isstr(args{1})
+    % gaussian_CPD(bnet, self, mu, Sigma, W, cov_type, tied_cov, clamp_mean, clamp_cov, clamp_weights)
+    if nargs >= 1 & ~isempty(args{1}), CPD.mean = args{1}; end
+    if nargs >= 2 & ~isempty(args{2}), CPD.cov = args{2}; end
+    if nargs >= 3 & ~isempty(args{3}), CPD.weights = args{3}; end
+    if nargs >= 4 & ~isempty(args{4}), CPD.cov_type = args{4}; end
+    if nargs >= 5 & ~isempty(args{5}) & strcmp(args{5}, 'tied'), CPD.tied_cov = 1; end
+    if nargs >= 6 & ~isempty(args{6}), CPD.clamped_mean = 1; end
+    if nargs >= 7 & ~isempty(args{7}), CPD.clamped_cov = 1; end
+    if nargs >= 8 & ~isempty(args{8}), CPD.clamped_weights = 1; end
+  else
+    CPD = set_fields(CPD, args{:});
+  end
+end
+
+% Make sure the matrices have 1 dimension per discrete parent.
+% Bug fix due to Xuejing Sun 3/6/01
+CPD.mean = myreshape(CPD.mean, [ss ns(dps)]);
+CPD.cov = myreshape(CPD.cov, [ss ss ns(dps)]);
+CPD.weights = myreshape(CPD.weights, [ss cpsz ns(dps)]);
+  
+CPD.init_cov = CPD.cov;  % we reset to this if things go wrong during learning
+
+% expected sufficient statistics 
+CPD.Wsum = zeros(dpsz,1);
+CPD.WYsum = zeros(ss, dpsz);
+CPD.WXsum = zeros(cpsz, dpsz);
+CPD.WYYsum = zeros(ss, ss, dpsz);
+CPD.WXXsum = zeros(cpsz, cpsz, dpsz);
+CPD.WXYsum = zeros(cpsz, ss, dpsz);
+
+% For BIC
+CPD.nsamples = 0;
+switch CPD.cov_type
+  case 'full',
+    ncov_params = ss*(ss-1)/2; % since symmetric (and positive definite)
+  case 'diag',
+    ncov_params = ss;
+  otherwise
+    error(['unrecognized cov_type ' cov_type]);
+end
+% params = weights + mean + cov
+if CPD.tied_cov
+  CPD.nparams = ss*cpsz*dpsz + ss*dpsz + ncov_params;
+else
+  CPD.nparams = ss*cpsz*dpsz + ss*dpsz + dpsz*ncov_params;
+end
+
+
+
+clamped = CPD.clamped_mean & CPD.clamped_cov & CPD.clamped_weights;
+CPD = set_clamped(CPD, clamped);
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.self = [];
+CPD.sizes = [];
+CPD.cps = [];
+CPD.dps = [];
+CPD.mean = [];
+CPD.cov = [];
+CPD.weights = [];
+CPD.clamped_mean = [];
+CPD.clamped_cov = [];
+CPD.clamped_weights = [];
+CPD.init_cov = [];
+CPD.cov_type = [];
+CPD.tied_cov = [];
+CPD.Wsum = [];
+CPD.WYsum = [];
+CPD.WXsum = [];
+CPD.WYYsum = [];
+CPD.WXXsum = [];
+CPD.WXYsum = [];
+CPD.nsamples = [];
+CPD.nparams = [];            
+CPD.cov_prior_weight = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/log_prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function L = log_prob_node(CPD, self_ev, pev)
+% LOG_PROB_NODE Compute prod_m log P(x(i,m)| x(pi_i,m), theta_i) for node i (gaussian)
+% L = log_prob_node(CPD, self_ev, pev)
+%
+% self_ev(m) is the evidence on this node in case m.
+% pev(i,m) is the evidence on the i'th parent in case m (if there are any parents).
+% (These may also be cell arrays.)
+
+if iscell(self_ev), usecell = 1; else usecell = 0; end
+
+use_log = 1;
+ncases = length(self_ev);
+nparents = length(CPD.sizes)-1;
+assert(ncases == size(pev, 2));
+
+if ncases == 0
+  L = 0;
+  return;
+end
+
+if length(CPD.dps)==0 % no discrete parents, so we can vectorize
+  i = 1;
+  if usecell
+    Y = cell2num(self_ev);
+  else
+    Y = self_ev;
+  end
+  if length(CPD.cps) == 0 
+    L = gaussian_prob(Y, CPD.mean(:,i), CPD.cov(:,:,i), use_log);
+  else
+    if usecell
+      X = cell2num(pev);
+    else
+      X = pev;
+    end
+    L = gaussian_prob(Y, CPD.mean(:,i) + CPD.weights(:,:,i)*X, CPD.cov(:,:,i), use_log);
+  end
+else % each case uses a (potentially) different set of parameters
+  L = 0;
+  for m=1:ncases
+    if usecell
+      dpvals = cat(1, pev{CPD.dps, m});
+    else
+      dpvals = pev(CPD.dps, m);
+    end
+    i = subv2ind(CPD.sizes(CPD.dps), dpvals(:)');
+    y = self_ev{m};
+    if length(CPD.cps) == 0 
+      L = L + gaussian_prob(y, CPD.mean(:,i), CPD.cov(:,:,i), use_log);
+    else
+      if usecell
+	x = cat(1, pev{CPD.cps, m});
+      else
+	x = pev(CPD.cps, m);
+      end
+      L = L + gaussian_prob(y, CPD.mean(:,i) + CPD.weights(:,:,i)*x, CPD.cov(:,:,i), use_log);
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/maximize_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,147 @@
+function CPD = maximize_params(CPD, temp)
+% MAXIMIZE_PARAMS Set the params of a CPD to their ML values (Gaussian)
+% CPD = maximize_params(CPD, temperature)
+%
+% Temperature is currently only used for entropic prior on Sigma
+
+% For details, see "Fitting a Conditional Gaussian Distribution", Kevin Murphy, tech. report,
+% 1998, available at www.cs.berkeley.edu/~murphyk/papers.html
+% Refering to table 2, we use equations 1/2 to estimate the covariance matrix in the untied/tied case,
+% and equation 9 to estimate the weight matrix and mean.
+% We do not implement spherical Gaussians - the code is already pretty complicated!
+
+if ~adjustable_CPD(CPD), return; end
+
+%assert(approxeq(CPD.nsamples, sum(CPD.Wsum)));
+assert(~any(isnan(CPD.WXXsum)))
+assert(~any(isnan(CPD.WXYsum)))
+assert(~any(isnan(CPD.WYYsum)))
+
+[self_size cpsize dpsize] = size(CPD.weights);
+
+% Append 1s to the parents, and derive the corresponding cross products.
+% This is used when estimate the means and weights simultaneosuly,
+% and when estimatting Sigma.
+% Let x2 = [x 1]'
+XY = zeros(cpsize+1, self_size, dpsize); % XY(:,:,i) = sum_l w(l,i) x2(l) y(l)' 
+XX = zeros(cpsize+1, cpsize+1, dpsize); % XX(:,:,i) = sum_l w(l,i) x2(l) x2(l)' 
+YY = zeros(self_size, self_size, dpsize); % YY(:,:,i) = sum_l w(l,i) y(l) y(l)' 
+for i=1:dpsize
+  XY(:,:,i) = [CPD.WXYsum(:,:,i) % X*Y
+	       CPD.WYsum(:,i)']; % 1*Y
+  % [x  * [x' 1]  = [xx' x
+  %  1]              x'  1]
+  XX(:,:,i) = [CPD.WXXsum(:,:,i) CPD.WXsum(:,i);
+	       CPD.WXsum(:,i)'   CPD.Wsum(i)];
+  YY(:,:,i) = CPD.WYYsum(:,:,i);
+end
+
+w = CPD.Wsum(:);
+% Set any zeros to one before dividing
+% This is valid because w(i)=0 => WYsum(:,i)=0, etc
+w = w + (w==0);
+
+if CPD.clamped_mean
+  % Estimating B2 and then setting the last column (the mean) to the clamped mean is *not* equivalent
+  % to estimating B and then adding the clamped_mean to the last column.
+  if ~CPD.clamped_weights
+    B = zeros(self_size, cpsize, dpsize);
+    for i=1:dpsize
+      if det(CPD.WXXsum(:,:,i))==0
+	B(:,:,i) = 0;
+      else
+	% Eqn 9 in table 2 of TR
+	%B(:,:,i) = CPD.WXYsum(:,:,i)' * inv(CPD.WXXsum(:,:,i));
+	B(:,:,i) = (CPD.WXXsum(:,:,i) \ CPD.WXYsum(:,:,i))';
+      end
+    end
+    %CPD.weights = reshape(B, [self_size cpsize dpsize]);
+    CPD.weights = B;
+  end
+elseif CPD.clamped_weights % KPM 1/25/02
+  if ~CPD.clamped_mean % ML estimate is just sample mean of the residuals
+    for i=1:dpsize
+      CPD.mean(:,i) = (CPD.WYsum(:,i) - CPD.weights(:,:,i) * CPD.WXsum(:,i)) / w(i);
+    end
+  end
+else % nothing is clamped, so estimate mean and weights simultaneously
+  B2 = zeros(self_size, cpsize+1, dpsize);
+  for i=1:dpsize
+    if det(XX(:,:,i))==0  % fix by U. Sondhauss 6/27/99
+      B2(:,:,i)=0;          
+    else                    
+      % Eqn 9 in table 2 of TR
+      %B2(:,:,i) = XY(:,:,i)' * inv(XX(:,:,i));
+      B2(:,:,i) = (XX(:,:,i) \ XY(:,:,i))';
+    end                   
+    CPD.mean(:,i) = B2(:,cpsize+1,i);
+    CPD.weights(:,:,i) = B2(:,1:cpsize,i);
+  end
+end
+
+% Let B2 = [W mu]
+if cpsize>0
+  B2(:,1:cpsize,:) = reshape(CPD.weights, [self_size cpsize dpsize]);
+end
+B2(:,cpsize+1,:) = reshape(CPD.mean, [self_size dpsize]);
+
+% To avoid singular covariance matrices,
+% we use the regularization method suggested in "A Quasi-Bayesian approach to estimating
+% parameters for mixtures of normal distributions", Hamilton 91.
+% If the ML estimate is Sigma = M/N, the MAP estimate is (M+gamma*I) / (N+gamma),
+% where gamma >=0 is a smoothing parameter (equivalent sample size of I prior)
+
+gamma = CPD.cov_prior_weight;
+
+if ~CPD.clamped_cov
+  if CPD.cov_prior_entropic % eqn 12 of Brand AI/Stat 99
+    Z = 1-temp;
+    % When temp > 1, Z is negative, so we are dividing by a smaller
+    % number, ie. increasing the variance.
+  else
+    Z = 0;
+  end
+  if CPD.tied_cov
+    S = zeros(self_size, self_size);
+    % Eqn 2 from table 2 in TR
+    for i=1:dpsize
+      S = S + (YY(:,:,i) - B2(:,:,i)*XY(:,:,i));
+    end
+    %denom = max(1, CPD.nsamples + gamma + Z);
+    denom = CPD.nsamples + gamma + Z;
+    S = (S + gamma*eye(self_size)) / denom;
+    if strcmp(CPD.cov_type, 'diag')
+      S = diag(diag(S));
+    end
+    CPD.cov = repmat(S, [1 1 dpsize]);
+  else 
+    for i=1:dpsize      
+      % Eqn 1 from table 2 in TR
+      S = YY(:,:,i) - B2(:,:,i)*XY(:,:,i);
+      %denom = max(1, w(i) + gamma + Z); % gives wrong answers on mhmm1
+      denom = w(i) + gamma + Z;
+      S = (S + gamma*eye(self_size)) / denom;
+      CPD.cov(:,:,i) = S;
+    end
+    if strcmp(CPD.cov_type, 'diag')
+      for i=1:dpsize      
+	CPD.cov(:,:,i) = diag(diag(CPD.cov(:,:,i)));
+      end
+    end
+  end
+end
+
+
+check_covars = 0;
+min_covar = 1e-5;
+if check_covars % prevent collapsing to a point
+  for i=1:dpsize
+    if min(svd(CPD.cov(:,:,i))) < min_covar
+      disp(['resetting singular covariance for node ' num2str(CPD.self)]);
+      CPD.cov(:,:,i) = CPD.init_cov(:,:,i);
+    end
+  end
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/update_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,85 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a Gaussian node
+% function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+
+%if nargin < 6
+%  hidden_bitv = zeros(1, max(fmarginal.domain));
+%  hidden_bitv(find(isempty(evidence)))=1;
+%end
+
+dom = fmarginal.domain;
+self = dom(end);
+ps = dom(1:end-1);
+hidden_self = hidden_bitv(self);
+cps = myintersect(ps, cnodes);
+dps = mysetdiff(ps, cps);
+hidden_cps = all(hidden_bitv(cps));
+hidden_dps = all(hidden_bitv(dps));
+
+CPD.nsamples = CPD.nsamples + 1;            
+[ss cpsz dpsz] = size(CPD.weights); % ss = self size
+
+% Let X be the cts parent (if any), Y be the cts child (self).
+
+if ~hidden_self & (isempty(cps) | ~hidden_cps) & hidden_dps % all cts nodes are observed, all discrete nodes are hidden
+  % Since X and Y are observed, SYY = 0, SXX = 0, SXY = 0
+  % Since discrete parents are hidden, we do not need to add evidence to w.
+  w = fmarginal.T(:);
+  CPD.Wsum = CPD.Wsum + w;
+  y = evidence{self};
+  Cyy = y*y';
+  if ~CPD.useC
+     W = repmat(w(:)',ss,1); % W(y,i) = w(i)
+     W2 = repmat(reshape(W, [ss 1 dpsz]), [1 ss 1]); % W2(x,y,i) = w(i)
+     CPD.WYsum = CPD.WYsum +  W .* repmat(y(:), 1, dpsz);
+     CPD.WYYsum = CPD.WYYsum + W2  .* repmat(reshape(Cyy, [ss ss 1]), [1 1 dpsz]);
+  else
+     W = w(:)';
+     W2 = reshape(W, [1 1 dpsz]);
+     CPD.WYsum = CPD.WYsum +  rep_mult(W, y(:), size(CPD.WYsum)); 
+     CPD.WYYsum = CPD.WYYsum + rep_mult(W2, Cyy, size(CPD.WYYsum));
+  end
+  if cpsz > 0 % X exists
+    x = cat(1, evidence{cps}); x = x(:);
+    Cxx = x*x';
+    Cxy = x*y';
+    if ~CPD.useC
+       CPD.WXsum = CPD.WXsum + W .* repmat(x(:), 1, dpsz);
+       CPD.WXXsum = CPD.WXXsum + W2 .* repmat(reshape(Cxx, [cpsz cpsz 1]), [1 1 dpsz]);
+       CPD.WXYsum = CPD.WXYsum + W2 .* repmat(reshape(Cxy, [cpsz ss 1]), [1 1 dpsz]);
+    else
+       CPD.WXsum = CPD.WXsum + rep_mult(W, x(:), size(CPD.WXsum));
+       CPD.WXXsum = CPD.WXXsum + rep_mult(W2, Cxx, size(CPD.WXXsum));
+       CPD.WXYsum = CPD.WXYsum + rep_mult(W2, Cxy, size(CPD.WXYsum));
+    end
+  end
+  return;
+end
+
+% general (non-vectorized) case
+fullm = add_evidence_to_gmarginal(fmarginal, evidence, ns, cnodes); % slow!
+
+if dpsz == 1 % no discrete parents
+  w = 1;
+else
+  w = fullm.T(:);
+end
+
+CPD.Wsum = CPD.Wsum + w;
+xi = 1:cpsz;
+yi = (cpsz+1):(cpsz+ss);
+for i=1:dpsz
+  muY = fullm.mu(yi, i);
+  SYY = fullm.Sigma(yi, yi, i);
+  CPD.WYsum(:,i) = CPD.WYsum(:,i) + w(i)*muY;
+  CPD.WYYsum(:,:,i) = CPD.WYYsum(:,:,i) + w(i)*(SYY + muY*muY'); % E[X Y] = Cov[X,Y] + E[X] E[Y]
+  if cpsz > 0
+    muX = fullm.mu(xi, i);
+    SXX = fullm.Sigma(xi, xi, i);
+    SXY = fullm.Sigma(xi, yi, i);
+    CPD.WXsum(:,i) = CPD.WXsum(:,i) + w(i)*muX;
+    CPD.WXXsum(:,:,i) = CPD.WXXsum(:,:,i) + w(i)*(SXX + muX*muX');
+    CPD.WXYsum(:,:,i) = CPD.WXYsum(:,:,i) + w(i)*(SXY + muX*muY');
+  end
+end                
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/Old/update_tied_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,118 @@
+function CPD = update_tied_ess(CPD, domain, engine, evidence, ns, cnodes)
+
+if ~adjustable_CPD(CPD), return; end
+nCPDs = size(domain, 2);
+fmarginal = cell(1, nCPDs);
+for l=1:nCPDs
+  fmarginal{l} = marginal_family(engine, nodes(l));
+end
+
+[ss cpsz dpsz] = size(CPD.weights);
+if const_evidence_pattern(engine)
+  dom = domain(:,1);
+  dnodes = mysetdiff(1:length(ns), cnodes);
+  ddom = myintersect(dom, dnodes);
+  cdom = myintersect(dom, cnodes);
+  odom = dom(~isemptycell(evidence(dom)));
+  hdom = dom(isemptycell(evidence(dom)));
+  % If all hidden nodes are discrete and all cts nodes are observed 
+  % (e.g., HMM with Gaussian output)
+  % we can add the observed evidence in parallel
+  if mysubset(ddom, hdom) & mysubset(cdom, odom)
+    [mu, Sigma, T] = add_cts_ev_to_marginals(fmarginal, evidence, ns, cnodes);
+  else
+    mu = zeros(ss, dpsz, nCPDs);
+    Sigma = zeros(ss, ss, dpsz, nCPDs);
+    T = zeros(dpsz, nCPDs);
+    for l=1:nCPDs
+      [mu(:,:,l), Sigma(:,:,:,l), T(:,l)] = add_ev_to_marginals(fmarginal{l}, evidence, ns, cnodes);
+    end
+  end
+end
+CPD.nsamples = CPD.nsamples + nCPDs;            
+
+
+if dpsz == 1 % no discrete parents
+  w = 1;
+else
+  w = fullm.T(:);
+end
+CPD.Wsum = CPD.Wsum + w;
+% Let X be the cts parent (if any), Y be the cts child (self).
+xi = 1:cpsz;
+yi = (cpsz+1):(cpsz+ss);
+for i=1:dpsz
+  muY = fullm.mu(yi, i);
+  SYY = fullm.Sigma(yi, yi, i);
+  CPD.WYsum(:,i) = CPD.WYsum(:,i) + w(i)*muY;
+  CPD.WYYsum(:,:,i) = CPD.WYYsum(:,:,i) + w(i)*(SYY + muY*muY'); % E[X Y] = Cov[X,Y] + E[X] E[Y]
+  if cpsz > 0
+    muX = fullm.mu(xi, i);
+    SXX = fullm.Sigma(xi, xi, i);
+    SXY = fullm.Sigma(xi, yi, i);
+    CPD.WXsum(:,i) = CPD.WXsum(:,i) + w(i)*muX;
+    CPD.WXYsum(:,:,i) = CPD.WXYsum(:,:,i) + w(i)*(SXY + muX*muY');
+    CPD.WXXsum(:,:,i) = CPD.WXXsum(:,:,i) + w(i)*(SXX + muX*muX');
+  end
+end                
+
+
+%%%%%%%%%%%%%
+
+function fullm = add_evidence_to_marginal(fmarginal, evidence, ns, cnodes)
+
+
+dom = fmarginal.domain;
+
+% Find out which values of the discrete parents (if any) are compatible with 
+% the discrete evidence (if any).
+dnodes = mysetdiff(1:length(ns), cnodes);
+ddom = myintersect(dom, dnodes);
+cdom = myintersect(dom, cnodes);
+odom = dom(~isemptycell(evidence(dom)));
+hdom = dom(isemptycell(evidence(dom)));
+
+dobs = myintersect(ddom, odom);
+dvals = cat(1, evidence{dobs});
+ens = ns; % effective node sizes
+ens(dobs) = 1;
+S = prod(ens(ddom));
+subs = ind2subv(ens(ddom), 1:S);
+mask = find_equiv_posns(dobs, ddom);
+subs(mask) = dvals;
+supportedQs = subv2ind(ns(ddom), subs);
+
+if isempty(ddom)
+  Qarity = 1;
+else
+  Qarity = prod(ns(ddom));
+end
+fullm.T = zeros(Qarity, 1);
+fullm.T(supportedQs) = fmarginal.T(:);
+
+% Now put the hidden cts parts into their right blocks,
+% leaving the observed cts parts as 0.
+cobs = myintersect(cdom, odom);
+chid = myintersect(cdom, hdom);
+cvals = cat(1, evidence{cobs});
+n = sum(ns(cdom));
+fullm.mu = zeros(n,Qarity);
+fullm.Sigma = zeros(n,n,Qarity);
+
+if ~isempty(chid)
+  chid_blocks = block(find_equiv_posns(chid, cdom), ns(cdom));
+end
+if ~isempty(cobs)
+  cobs_blocks = block(find_equiv_posns(cobs, cdom), ns(cdom));
+end
+
+for i=1:length(supportedQs)
+  Q = supportedQs(i);
+  if ~isempty(chid)
+    fullm.mu(chid_blocks, Q) = fmarginal.mu(:, i);
+    fullm.Sigma(chid_blocks, chid_blocks, Q) = fmarginal.Sigma(:,:,i);
+  end
+  if ~isempty(cobs)
+    fullm.mu(cobs_blocks, Q) = cvals(:);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/adjustable_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function p = adjustable_CPD(CPD)
+% ADJUSTABLE_CPD Does this CPD have any adjustable params? (gaussian)
+% p = adjustable_CPD(CPD)
+
+p = ~CPD.clamped_mean | ~CPD.clamped_cov | ~CPD.clamped_weights;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/convert_CPD_to_table_hidden_ps.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function T = convert_CPD_to_table_hidden_ps(CPD, self_val)
+% CONVERT_CPD_TO_TABLE_HIDDEN_PS Convert a Gaussian CPD to a table
+% function T = convert_CPD_to_table_hidden_ps(CPD, self_val)
+%
+% self_val must be a non-empty vector.
+% All the parents are hidden.
+%
+% This is used by misc/convert_dbn_CPDs_to_tables
+
+m = CPD.mean;
+C = CPD.cov;
+W = CPD.weights;
+
+[ssz dpsize] = size(m);
+
+T = zeros(dpsize, 1);
+for i=1:dpsize
+  T(i) = gaussian_prob(self_val, m(:,i), C(:,:,i));
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/convert_to_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+function pot = convert_to_pot(CPD, pot_type, domain, evidence)
+% CONVERT_TO_POT Convert a Gaussian CPD to one or more potentials
+% pot = convert_to_pot(CPD, pot_type, domain, evidence)
+
+sz = CPD.sizes;
+ns = zeros(1, max(domain));
+ns(domain) = sz;
+
+odom = domain(~isemptycell(evidence(domain)));
+ps = domain(1:end-1);
+cps = ps(CPD.cps);
+dps = ps(CPD.dps);
+self = domain(end);
+cdom = [cps(:)' self];
+ddom = dps;
+cnodes = cdom;
+  
+switch pot_type
+ case 'u',
+  error('gaussian utility potentials not yet supported');
+ 
+ case 'd',
+  T = convert_to_table(CPD, domain, evidence);
+  ns(odom) = 1;
+  pot = dpot(domain, ns(domain), T);          
+
+ case {'c','g'},
+  [m, C, W] = gaussian_CPD_params_given_dps(CPD, domain, evidence);
+  pot = linear_gaussian_to_cpot(m, C, W, domain, ns, cnodes, evidence);
+
+ case 'cg',
+  [m, C, W] = gaussian_CPD_params_given_dps(CPD, domain, evidence);
+  % Convert each conditional Gaussian to a canonical potential
+  cobs = myintersect(cdom, odom);
+  dobs = myintersect(ddom, odom);
+  ens = ns; % effective node size
+  ens(cobs) = 0;
+  ens(dobs) = 1;
+  dpsize = prod(ens(dps));
+  can = cell(1, dpsize);
+  for i=1:dpsize
+    if isempty(W)
+      can{i} = linear_gaussian_to_cpot(m(:,i), C(:,:,i), [], cdom, ns, cnodes, evidence);
+    else
+      can{i} = linear_gaussian_to_cpot(m(:,i), C(:,:,i), W(:,:,i), cdom, ns, cnodes, evidence);
+    end
+  end
+  pot = cgpot(ddom, cdom, ens, can);
+
+ case 'scg',
+  [m, C, W] = gaussian_CPD_params_given_dps(CPD, domain, evidence);
+  cobs = myintersect(cdom, odom);
+  dobs = myintersect(ddom, odom);
+  ens = ns; % effective node size
+  ens(cobs) = 0;
+  ens(dobs) = 1;
+  dpsize = prod(ens(dps));
+  cpsize = size(W, 2); % cts parents size
+  ss = size(m, 1); % self size
+  cheaddom = self;
+  ctaildom = cps(:)';
+  pot_array = cell(1, dpsize);
+  for i=1:dpsize
+    pot_array{i} = scgcpot(ss, cpsize, 1, m(:,i), W(:,:,i), C(:,:,i));
+  end
+  pot = scgpot(ddom, cheaddom, ctaildom, ens, pot_array);
+
+ otherwise,
+  error(['unrecognized pot_type' pot_type])
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/convert_to_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function T = convert_to_table(CPD, domain, evidence)
+% CONVERT_TO_TABLE Convert a Gaussian CPD to a table
+% T = convert_to_table(CPD, domain, evidence)
+
+
+sz = CPD.sizes;
+ns = zeros(1, max(domain));
+ns(domain) = sz;
+
+odom = domain(~isemptycell(evidence(domain)));
+ps = domain(1:end-1);
+cps = ps(CPD.cps);
+dps = ps(CPD.dps);
+self = domain(end);
+cdom = [cps(:)' self];
+ddom = dps;
+cnodes = cdom;
+
+[m, C, W] = gaussian_CPD_params_given_dps(CPD, domain, evidence);
+
+
+ns(odom) = 1;
+dpsize = prod(ns(dps));
+self = domain(end);
+assert(myismember(self, odom));
+self_val = evidence{self};
+T = zeros(dpsize, 1);
+if length(cps) > 0 
+  assert(~any(isemptycell(evidence(cps))));
+  cps_vals = cat(1, evidence{cps});
+  for i=1:dpsize
+    T(i) = gaussian_prob(self_val, m(:,i) + W(:,:,i)*cps_vals, C(:,:,i));
+  end
+else
+  for i=1:dpsize
+    T(i) = gaussian_prob(self_val, m(:,i), C(:,:,i));
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(CPD)
+
+disp('gaussian_CPD object');
+disp(struct(CPD)); 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/gaussian_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,161 @@
+function CPD = gaussian_CPD(bnet, self, varargin)
+% GAUSSIAN_CPD Make a conditional linear Gaussian distrib.
+%
+% CPD = gaussian_CPD(bnet, node, ...) will create a CPD with random parameters,
+% where node is the number of a node in this equivalence class.
+
+% To define this CPD precisely, call the continuous (cts) parents (if any) X,
+% the discrete parents (if any) Q, and this node Y. Then the distribution on Y is:
+% - no parents: Y ~ N(mu, Sigma)
+% - cts parents : Y|X=x ~ N(mu + W x, Sigma)
+% - discrete parents: Y|Q=i ~ N(mu(i), Sigma(i))
+% - cts and discrete parents: Y|X=x,Q=i ~ N(mu(i) + W(i) x, Sigma(i))
+%
+% The list below gives optional arguments [default value in brackets].
+% (Let ns(i) be the size of node i, X = ns(X), Y = ns(Y) and Q = prod(ns(Q)).)
+% Parameters will be reshaped to the right size if necessary.
+%
+% mean       - mu(:,i) is the mean given Q=i [ randn(Y,Q) ]
+% cov        - Sigma(:,:,i) is the covariance given Q=i [ repmat(100*eye(Y,Y), [1 1 Q]) ]
+% weights    - W(:,:,i) is the regression matrix given Q=i [ randn(Y,X,Q) ]
+% cov_type   - if 'diag', Sigma(:,:,i) is diagonal [ 'full' ]
+% tied_cov   - if 1, we constrain Sigma(:,:,i) to be the same for all i [0]
+% clamp_mean - if 1, we do not adjust mu(:,i) during learning [0]
+% clamp_cov  - if 1, we do not adjust Sigma(:,:,i) during learning [0]
+% clamp_weights - if 1, we do not adjust W(:,:,i) during learning [0]
+% cov_prior_weight - weight given to I prior for estimating Sigma [0.01]
+% cov_prior_entropic - if 1, we also use an entropic prior for Sigma [0]
+%
+% e.g., CPD = gaussian_CPD(bnet, i, 'mean', [0; 0], 'clamp_mean', 1)
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  clamp = 0;
+  CPD = class(CPD, 'gaussian_CPD', generic_CPD(clamp));
+  return;
+elseif isa(bnet, 'gaussian_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+ 
+CPD = class(CPD, 'gaussian_CPD', generic_CPD(0));
+
+args = varargin;
+ns = bnet.node_sizes;
+ps = parents(bnet.dag, self);
+dps = myintersect(ps, bnet.dnodes);
+cps = myintersect(ps, bnet.cnodes);
+fam_sz = ns([ps self]);
+
+CPD.self = self;
+CPD.sizes = fam_sz;
+
+% Figure out which (if any) of the parents are discrete, and which cts, and how big they are
+% dps = discrete parents, cps = cts parents
+CPD.cps = find_equiv_posns(cps, ps); % cts parent index
+CPD.dps = find_equiv_posns(dps, ps);
+ss = fam_sz(end);
+psz = fam_sz(1:end-1);
+dpsz = prod(psz(CPD.dps));
+cpsz = sum(psz(CPD.cps));
+
+% set default params
+CPD.mean = randn(ss, dpsz);
+CPD.cov = 100*repmat(eye(ss), [1 1 dpsz]);    
+CPD.weights = randn(ss, cpsz, dpsz);
+CPD.cov_type = 'full';
+CPD.tied_cov = 0;
+CPD.clamped_mean = 0;
+CPD.clamped_cov = 0;
+CPD.clamped_weights = 0;
+CPD.cov_prior_weight = 0.01;
+CPD.cov_prior_entropic = 0;
+nargs = length(args);
+if nargs > 0
+  CPD = set_fields(CPD, args{:});
+end
+
+% Make sure the matrices have 1 dimension per discrete parent.
+% Bug fix due to Xuejing Sun 3/6/01
+CPD.mean = myreshape(CPD.mean, [ss ns(dps)]);
+CPD.cov = myreshape(CPD.cov, [ss ss ns(dps)]);
+CPD.weights = myreshape(CPD.weights, [ss cpsz ns(dps)]);
+
+% Precompute indices into block structured  matrices
+% to speed up CPD_to_lambda_msg and CPD_to_pi
+cpsizes = CPD.sizes(CPD.cps);
+CPD.cps_block_ndx = cell(1, length(cps));
+for i=1:length(cps)
+  CPD.cps_block_ndx{i} = block(i, cpsizes);
+end
+
+%%%%%%%%%%% 
+% Learning stuff
+
+% expected sufficient statistics 
+CPD.Wsum = zeros(dpsz,1);
+CPD.WYsum = zeros(ss, dpsz);
+CPD.WXsum = zeros(cpsz, dpsz);
+CPD.WYYsum = zeros(ss, ss, dpsz);
+CPD.WXXsum = zeros(cpsz, cpsz, dpsz);
+CPD.WXYsum = zeros(cpsz, ss, dpsz);
+
+% For BIC
+CPD.nsamples = 0;
+switch CPD.cov_type
+ case 'full',
+  % since symmetric 
+    %ncov_params = ss*(ss-1)/2; 
+    ncov_params = ss*(ss+1)/2; 
+  case 'diag',
+    ncov_params = ss;
+  otherwise
+    error(['unrecognized cov_type ' cov_type]);
+end
+% params = weights + mean + cov
+if CPD.tied_cov
+  CPD.nparams = ss*cpsz*dpsz + ss*dpsz + ncov_params;
+else
+  CPD.nparams = ss*cpsz*dpsz + ss*dpsz + dpsz*ncov_params;
+end
+
+% for speeding up maximize_params
+CPD.useC = exist('rep_mult');
+
+clamped = CPD.clamped_mean & CPD.clamped_cov & CPD.clamped_weights;
+CPD = set_clamped(CPD, clamped);
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.self = [];
+CPD.sizes = [];
+CPD.cps = [];
+CPD.dps = [];
+CPD.mean = [];
+CPD.cov = [];
+CPD.weights = [];
+CPD.clamped_mean = [];
+CPD.clamped_cov = [];
+CPD.clamped_weights = [];
+CPD.cov_type = [];
+CPD.tied_cov = [];
+CPD.Wsum = [];
+CPD.WYsum = [];
+CPD.WXsum = [];
+CPD.WYYsum = [];
+CPD.WXXsum = [];
+CPD.WXYsum = [];
+CPD.nsamples = [];
+CPD.nparams = [];            
+CPD.cov_prior_weight = [];
+CPD.cov_prior_entropic = [];
+CPD.useC = [];
+CPD.cps_block_ndx = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/gaussian_CPD_params_given_dps.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function [m, C, W] = gaussian_CPD_params_given_dps(CPD, domain, evidence)
+% GAUSSIAN_CPD_PARAMS_GIVEN_EV_ON_DPS Extract parameters given evidence on all discrete parents
+% function [m, C, W] = gaussian_CPD_params_given_ev_on_dps(CPD, domain, evidence)
+
+ps = domain(1:end-1);
+dps = ps(CPD.dps);
+if isempty(dps)
+  m = CPD.mean;
+  C = CPD.cov;
+  W = CPD.weights;
+else
+  odom = domain(~isemptycell(evidence(domain)));
+  dops = myintersect(dps, odom);
+  dpvals = cat(1, evidence{dops});
+  if length(dops) == length(dps)
+    dpsizes = CPD.sizes(CPD.dps);
+    dpval = subv2ind(dpsizes, dpvals(:)');
+    m = CPD.mean(:, dpval);
+    C = CPD.cov(:, :, dpval);
+    W = CPD.weights(:, :, dpval);
+  else
+    map = find_equiv_posns(dops, dps);
+    index = mk_multi_index(length(dps), map, dpvals);
+    m = CPD.mean(:, index{:});
+    C = CPD.cov(:, :, index{:});
+    W = CPD.weights(:, :, index{:});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/get_field.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function val = get_params(CPD, name)
+% GET_PARAMS Get the parameters (fields) for a gaussian_CPD object
+% val = get_params(CPD, name)
+%
+% The following fields can be accessed
+%
+% mean       - mu(:,i) is the mean given Q=i
+% cov        - Sigma(:,:,i) is the covariance given Q=i 
+% weights    - W(:,:,i) is the regression matrix given Q=i 
+%
+% e.g., mean = get_params(CPD, 'mean')
+
+switch name
+ case 'mean',      val = CPD.mean;
+ case 'cov',       val = CPD.cov;
+ case 'weights',   val = CPD.weights;
+ otherwise,
+  error(['invalid argument name ' name]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/learn_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function CPD = learn_params(CPD, fam, data, ns, cnodes)
+%function CPD = learn_params(CPD, fam, data, ns, cnodes)
+% LEARN_PARAMS Compute the maximum likelihood estimate of the params of a gaussian CPD given complete data
+% CPD = learn_params(CPD, fam, data, ns, cnodes)
+%
+% data(i,m) is the value of node i in case m (can be cell array).
+% We assume this node has a maximize_params method.
+
+ncases = size(data, 2);
+CPD = reset_ess(CPD);
+% make a fully observed joint distribution over the family
+fmarginal.domain = fam;
+fmarginal.T = 1;
+fmarginal.mu = [];
+fmarginal.Sigma = [];
+if ~iscell(data)
+  cases = num2cell(data);
+else
+  cases = data;
+end
+hidden_bitv = zeros(1, max(fam));
+for m=1:ncases
+  % specify (as a bit vector) which elements in the family domain are hidden
+  hidden_bitv = zeros(1, max(fmarginal.domain));
+  ev = cases(:,m);
+  hidden_bitv(find(isempty(ev)))=1;
+  CPD = update_ess(CPD, fmarginal, ev, ns, cnodes, hidden_bitv);
+end
+CPD = maximize_params(CPD);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/log_prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function L = log_prob_node(CPD, self_ev, pev)
+% LOG_PROB_NODE Compute prod_m log P(x(i,m)| x(pi_i,m), theta_i) for node i (gaussian)
+% L = log_prob_node(CPD, self_ev, pev)
+%
+% self_ev(m) is the evidence on this node in case m.
+% pev(i,m) is the evidence on the i'th parent in case m (if there are any parents).
+% (These may also be cell arrays.)
+
+if iscell(self_ev), usecell = 1; else usecell = 0; end
+
+use_log = 1;
+ncases = length(self_ev);
+nparents = length(CPD.sizes)-1;
+assert(ncases == size(pev, 2));
+
+if ncases == 0
+  L = 0;
+  return;
+end
+
+L = 0;
+for m=1:ncases
+  if isempty(CPD.dps)
+    i = 1;
+  else
+    if usecell
+      dpvals = cat(1, pev{CPD.dps, m});
+    else
+      dpvals = pev(CPD.dps, m);
+    end
+    i = subv2ind(CPD.sizes(CPD.dps), dpvals(:)');
+  end
+  if usecell
+    y = self_ev{m};
+  else
+    y = self_ev(m);
+  end
+  if length(CPD.cps) == 0 
+    L = L + gaussian_prob(y, CPD.mean(:,i), CPD.cov(:,:,i), use_log);
+  else
+    if usecell
+      x = cat(1, pev{CPD.cps, m});
+    else
+      x = pev(CPD.cps, m);
+    end
+    L = L + gaussian_prob(y, CPD.mean(:,i) + CPD.weights(:,:,i)*x, CPD.cov(:,:,i), use_log);
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/maximize_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+function CPD = maximize_params(CPD, temp)
+% MAXIMIZE_PARAMS Set the params of a CPD to their ML values (Gaussian)
+% CPD = maximize_params(CPD, temperature)
+%
+% Temperature is currently ignored.
+
+if ~adjustable_CPD(CPD), return; end
+
+
+if CPD.clamped_mean
+  cl_mean = CPD.mean;
+else
+  cl_mean = [];
+end
+
+if CPD.clamped_cov
+  cl_cov = CPD.cov;
+else
+  cl_cov = [];
+end
+
+if CPD.clamped_weights
+  cl_weights = CPD.weights;
+else
+  cl_weights = [];
+end
+
+[ssz psz Q] = size(CPD.weights);
+
+[ss cpsz dpsz] = size(CPD.weights); % ss = self size = ssz
+if cpsz > CPD.nsamples
+  fprintf('gaussian_CPD/maximize_params: warning: input dimension (%d) > nsamples (%d)\n', ...
+	  cpsz, CPD.nsamples);
+end
+
+prior =  repmat(CPD.cov_prior_weight*eye(ssz,ssz), [1 1 Q]);
+
+
+[CPD.mean, CPD.cov, CPD.weights] = ...
+    clg_Mstep(CPD.Wsum, CPD.WYsum, CPD.WYYsum, [], CPD.WXsum, CPD.WXXsum, CPD.WXYsum, ...
+	      'cov_type', CPD.cov_type, 'clamped_mean', cl_mean, ...
+	      'clamped_cov', cl_cov, 'clamped_weights', cl_weights, ...
+	      'tied_cov', CPD.tied_cov, ...
+	      'cov_prior', prior);
+
+if 0
+CPD.mean = reshape(CPD.mean, [ss dpsz]);
+CPD.cov = reshape(CPD.cov, [ss ss dpsz]);
+CPD.weights = reshape(CPD.weights, [ss cpsz dpsz]);
+end
+
+% Bug fix 11 May 2003 KPM
+% clg_Mstep collapses all discrete parents into one mega-node
+% but convert_to_CPT needs access to each parent separately
+sz = CPD.sizes;
+ss = sz(end);
+
+% Bug fix KPM 20 May 2003: 
+cpsz = sum(sz(CPD.cps));
+%if isempty(CPD.cps)
+%  cpsz = 0;
+%else
+%  cpsz = sz(CPD.cps);
+%end
+dpsz = sz(CPD.dps);
+CPD.mean = myreshape(CPD.mean, [ss dpsz]);
+CPD.cov = myreshape(CPD.cov, [ss ss dpsz]);
+CPD.weights = myreshape(CPD.weights, [ss cpsz dpsz]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/maximize_params_debug.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,189 @@
+function CPD = maximize_params(CPD, temp)
+% MAXIMIZE_PARAMS Set the params of a CPD to their ML values (Gaussian)
+% CPD = maximize_params(CPD, temperature)
+%
+% Temperature is currently ignored.
+
+if ~adjustable_CPD(CPD), return; end
+
+CPD1 = struct(new_maximize_params(CPD));
+CPD2 = struct(old_maximize_params(CPD));
+assert(approxeq(CPD1.mean, CPD2.mean))
+assert(approxeq(CPD1.cov, CPD2.cov))
+assert(approxeq(CPD1.weights, CPD2.weights))
+
+CPD = new_maximize_params(CPD);
+
+%%%%%%%
+function CPD = new_maximize_params(CPD)
+
+if CPD.clamped_mean
+  cl_mean = CPD.mean;
+else
+  cl_mean = [];
+end
+
+if CPD.clamped_cov
+  cl_cov = CPD.cov;
+else
+  cl_cov = [];
+end
+
+if CPD.clamped_weights
+  cl_weights = CPD.weights;
+else
+  cl_weights = [];
+end
+
+[ssz psz Q] = size(CPD.weights);
+
+prior =  repmat(CPD.cov_prior_weight*eye(ssz,ssz), [1 1 Q]);
+[CPD.mean, CPD.cov, CPD.weights] = ...
+    Mstep_clg('w', CPD.Wsum, 'YY', CPD.WYYsum, 'Y', CPD.WYsum, 'YTY', [], ...
+	      'XX', CPD.WXXsum, 'XY', CPD.WXYsum, 'X', CPD.WXsum, ...
+	      'cov_type', CPD.cov_type, 'clamped_mean', cl_mean, ...
+	      'clamped_cov', cl_cov, 'clamped_weights', cl_weights, ...
+	      'tied_cov', CPD.tied_cov, ...
+	      'cov_prior', prior);
+
+
+%%%%%%%%%%%
+
+function CPD = old_maximize_params(CPD)
+
+
+if ~adjustable_CPD(CPD), return; end
+
+%assert(approxeq(CPD.nsamples, sum(CPD.Wsum)));
+assert(~any(isnan(CPD.WXXsum)))
+assert(~any(isnan(CPD.WXYsum)))
+assert(~any(isnan(CPD.WYYsum)))
+
+[self_size cpsize dpsize] = size(CPD.weights);
+
+% Append 1s to the parents, and derive the corresponding cross products.
+% This is used when estimate the means and weights simultaneosuly,
+% and when estimatting Sigma.
+% Let x2 = [x 1]'
+XY = zeros(cpsize+1, self_size, dpsize); % XY(:,:,i) = sum_l w(l,i) x2(l) y(l)' 
+XX = zeros(cpsize+1, cpsize+1, dpsize); % XX(:,:,i) = sum_l w(l,i) x2(l) x2(l)' 
+YY = zeros(self_size, self_size, dpsize); % YY(:,:,i) = sum_l w(l,i) y(l) y(l)' 
+for i=1:dpsize
+  XY(:,:,i) = [CPD.WXYsum(:,:,i) % X*Y
+	       CPD.WYsum(:,i)']; % 1*Y
+  % [x  * [x' 1]  = [xx' x
+  %  1]              x'  1]
+  XX(:,:,i) = [CPD.WXXsum(:,:,i) CPD.WXsum(:,i);
+	       CPD.WXsum(:,i)'   CPD.Wsum(i)];
+  YY(:,:,i) = CPD.WYYsum(:,:,i);
+end
+
+w = CPD.Wsum(:);
+% Set any zeros to one before dividing
+% This is valid because w(i)=0 => WYsum(:,i)=0, etc
+w = w + (w==0);
+
+if CPD.clamped_mean
+  % Estimating B2 and then setting the last column (the mean) to the clamped mean is *not* equivalent
+  % to estimating B and then adding the clamped_mean to the last column.
+  if ~CPD.clamped_weights
+    B = zeros(self_size, cpsize, dpsize);
+    for i=1:dpsize
+      if det(CPD.WXXsum(:,:,i))==0
+	B(:,:,i) = 0;
+      else
+	% Eqn 9 in table 2 of TR
+	%B(:,:,i) = CPD.WXYsum(:,:,i)' * inv(CPD.WXXsum(:,:,i));
+	B(:,:,i) = (CPD.WXXsum(:,:,i) \ CPD.WXYsum(:,:,i))';
+      end
+    end
+    %CPD.weights = reshape(B, [self_size cpsize dpsize]);
+    CPD.weights = B;
+  end
+elseif CPD.clamped_weights % KPM 1/25/02
+  if ~CPD.clamped_mean % ML estimate is just sample mean of the residuals
+    for i=1:dpsize
+      CPD.mean(:,i) = (CPD.WYsum(:,i) - CPD.weights(:,:,i) * CPD.WXsum(:,i)) / w(i);
+    end
+  end
+else % nothing is clamped, so estimate mean and weights simultaneously
+  B2 = zeros(self_size, cpsize+1, dpsize);
+  for i=1:dpsize
+    if det(XX(:,:,i))==0  % fix by U. Sondhauss 6/27/99
+      B2(:,:,i)=0;          
+    else                    
+      % Eqn 9 in table 2 of TR
+      %B2(:,:,i) = XY(:,:,i)' * inv(XX(:,:,i));
+      B2(:,:,i) = (XX(:,:,i) \ XY(:,:,i))';
+    end                   
+    CPD.mean(:,i) = B2(:,cpsize+1,i);
+    CPD.weights(:,:,i) = B2(:,1:cpsize,i);
+  end
+end
+
+% Let B2 = [W mu]
+if cpsize>0
+  B2(:,1:cpsize,:) = reshape(CPD.weights, [self_size cpsize dpsize]);
+end
+B2(:,cpsize+1,:) = reshape(CPD.mean, [self_size dpsize]);
+
+% To avoid singular covariance matrices,
+% we use the regularization method suggested in "A Quasi-Bayesian approach to estimating
+% parameters for mixtures of normal distributions", Hamilton 91.
+% If the ML estimate is Sigma = M/N, the MAP estimate is (M+gamma*I) / (N+gamma),
+% where gamma >=0 is a smoothing parameter (equivalent sample size of I prior)
+
+gamma = CPD.cov_prior_weight;
+
+if ~CPD.clamped_cov
+  if CPD.cov_prior_entropic % eqn 12 of Brand AI/Stat 99
+    Z = 1-temp;
+    % When temp > 1, Z is negative, so we are dividing by a smaller
+    % number, ie. increasing the variance.
+  else
+    Z = 0;
+  end
+  if CPD.tied_cov
+    S = zeros(self_size, self_size);
+    % Eqn 2 from table 2 in TR
+    for i=1:dpsize
+      S = S + (YY(:,:,i) - B2(:,:,i)*XY(:,:,i));
+    end
+    %denom = CPD.nsamples + gamma + Z;
+    denom = CPD.nsamples +  Z;
+    S = (S + gamma*eye(self_size)) / denom;
+    if strcmp(CPD.cov_type, 'diag')
+      S = diag(diag(S));
+    end
+    CPD.cov = repmat(S, [1 1 dpsize]);
+  else 
+    for i=1:dpsize      
+      % Eqn 1 from table 2 in TR
+      S = YY(:,:,i) - B2(:,:,i)*XY(:,:,i);
+      %denom = w(i) + gamma + Z;
+      denom = w(i) + Z;
+      S = (S + gamma*eye(self_size)) / denom;
+      CPD.cov(:,:,i) = S;
+    end
+    if strcmp(CPD.cov_type, 'diag')
+      for i=1:dpsize      
+	CPD.cov(:,:,i) = diag(diag(CPD.cov(:,:,i)));
+      end
+    end
+  end
+end
+
+
+check_covars = 0;
+min_covar = 1e-5;
+if check_covars % prevent collapsing to a point
+  for i=1:dpsize
+    if min(svd(CPD.cov(:,:,i))) < min_covar
+      disp(['resetting singular covariance for node ' num2str(CPD.self)]);
+      CPD.cov(:,:,i) = CPD.init_cov(:,:,i);
+    end
+  end
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/private/CPD_to_linear_gaussian.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function [mu, Sigma, W] = CPD_to_linear_gaussian(CPD, domain, ns, cnodes, evidence)
+
+ps = domain(1:end-1);
+dnodes = mysetdiff(1:length(ns), cnodes);
+dps = myintersect(ps, dnodes); % discrete parents
+
+if isempty(dps)
+  Q = 1;
+else
+  assert(~any(isemptycell(evidence(dps))));
+  dpvals = cat(1, evidence{dps});
+  Q = subv2ind(ns(dps), dpvals(:)');
+end
+
+mu = CPD.mean(:,Q);
+Sigma = CPD.cov(:,:,Q);
+W = CPD.weights(:,:,Q);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/CPD_to_linear_gaussian.m/1.1.1.1/Wed May 29 15:59:52 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@gaussian_CPD/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/reset_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function CPD = reset_ess(CPD)
+% RESET_ESS Reset the Expected Sufficient Statistics for a Gaussian CPD.
+% CPD = reset_ess(CPD)
+
+CPD.nsamples = 0;    
+CPD.Wsum = zeros(size(CPD.Wsum));
+CPD.WYsum = zeros(size(CPD.WYsum));
+CPD.WYYsum = zeros(size(CPD.WYYsum));
+CPD.WXsum = zeros(size(CPD.WXsum));
+CPD.WXXsum = zeros(size(CPD.WXXsum));
+CPD.WXYsum = zeros(size(CPD.WXYsum));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/sample_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function y = sample_node(CPD, pev)
+% SAMPLE_NODE Draw a random sample from P(Xi | x(pi_i), theta_i)  (gaussian)
+% y = sample_node(CPD, parent_evidence)
+%
+% pev{i} is the value of the i'th parent (if there are any parents)
+% y is the sampled value (a scalar or vector)
+
+if length(CPD.dps)==0
+  i = 1;
+else
+  dpvals = cat(1, pev{CPD.dps});
+  i = subv2ind(CPD.sizes(CPD.dps), dpvals(:)');
+end
+
+if length(CPD.cps) == 0 
+  y = gsamp(CPD.mean(:,i), CPD.cov(:,:,i), 1);
+else
+  pev = pev(:);
+  x = cat(1, pev{CPD.cps});
+  y = gsamp(CPD.mean(:,i) + CPD.weights(:,:,i)*x(:), CPD.cov(:,:,i), 1);
+end
+y = y(:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/set_fields.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function CPD = set_fields(CPD, varargin)
+% SET_PARAMS Set the parameters (fields) for a gaussian_CPD object
+% CPD = set_params(CPD, name/value pairs)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+%
+% mean       - mu(:,i) is the mean given Q=i
+% cov        - Sigma(:,:,i) is the covariance given Q=i 
+% weights    - W(:,:,i) is the regression matrix given Q=i 
+% cov_type   - if 'diag', Sigma(:,:,i) is diagonal 
+% tied_cov   - if 1, we constrain Sigma(:,:,i) to be the same for all i
+% clamp_mean - if 1, we do not adjust mu(:,i) during learning 
+% clamp_cov  - if 1, we do not adjust Sigma(:,:,i) during learning 
+% clamp_weights - if 1, we do not adjust W(:,:,i) during learning
+% clamp      - if 1, we do not adjust any params
+% cov_prior_weight - weight given to I prior for estimating Sigma
+% cov_prior_entropic - if 1, we also use an entropic prior for Sigma [0]
+%
+% e.g., CPD = set_params(CPD, 'mean', [0;0])
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'mean',        CPD.mean = args{i+1}; 
+   case 'cov',         CPD.cov = args{i+1}; 
+   case 'weights',     CPD.weights = args{i+1}; 
+   case 'cov_type',    CPD.cov_type = args{i+1}; 
+   %case 'tied_cov',    CPD.tied_cov = strcmp(args{i+1}, 'yes');
+   case 'tied_cov',    CPD.tied_cov = args{i+1};
+   case 'clamp_mean',  CPD.clamped_mean = args{i+1};
+   case 'clamp_cov',   CPD.clamped_cov = args{i+1};
+   case 'clamp_weights',  CPD.clamped_weights = args{i+1};
+   case 'clamp',  clamp = args{i+1};
+    CPD.clamped_mean = clamp;
+    CPD.clamped_cov = clamp;
+    CPD.clamped_weights = clamp;
+   case 'cov_prior_weight',  CPD.cov_prior_weight = args{i+1};
+   case 'cov_prior_entropic',  CPD.cov_prior_entropic = args{i+1};
+   otherwise,  
+    error(['invalid argument name ' args{i}]);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gaussian_CPD/update_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,88 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a Gaussian node
+% function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+
+%if nargin < 6
+%  hidden_bitv = zeros(1, max(fmarginal.domain));
+%  hidden_bitv(find(isempty(evidence)))=1;
+%end
+
+dom = fmarginal.domain;
+self = dom(end);
+ps = dom(1:end-1);
+cps = myintersect(ps, cnodes);
+dps = mysetdiff(ps, cps);
+
+CPD.nsamples = CPD.nsamples + 1;            
+[ss cpsz dpsz] = size(CPD.weights); % ss = self size
+[ss dpsz] = size(CPD.mean);
+
+% Let X be the cts parent (if any), Y be the cts child (self).
+
+if ~hidden_bitv(self) & ~any(hidden_bitv(cps)) & all(hidden_bitv(dps))
+  % Speedup for the common case that all cts nodes are observed, all discrete nodes are hidden
+  % Since X and Y are observed, SYY = 0, SXX = 0, SXY = 0
+  % Since discrete parents are hidden, we do not need to add evidence to w.
+  w = fmarginal.T(:);
+  CPD.Wsum = CPD.Wsum + w;
+  y = evidence{self};
+  Cyy = y*y';
+  if ~CPD.useC
+     WY = repmat(w(:)',ss,1); % WY(y,i) = w(i)
+     WYY = repmat(reshape(WY, [ss 1 dpsz]), [1 ss 1]); % WYY(y,y',i) = w(i)
+     %CPD.WYsum = CPD.WYsum +  WY .* repmat(y(:), 1, dpsz);
+     CPD.WYsum = CPD.WYsum +  y(:) * w(:)';
+     CPD.WYYsum = CPD.WYYsum + WYY  .* repmat(reshape(Cyy, [ss ss 1]), [1 1 dpsz]);
+  else
+     W = w(:)';
+     W2 = reshape(W, [1 1 dpsz]);
+     CPD.WYsum = CPD.WYsum +  rep_mult(W, y(:), size(CPD.WYsum)); 
+     CPD.WYYsum = CPD.WYYsum + rep_mult(W2, Cyy, size(CPD.WYYsum));
+  end
+  if cpsz > 0 % X exists
+    x = cat(1, evidence{cps}); x = x(:);
+    Cxx = x*x';
+    Cxy = x*y';
+    WX = repmat(w(:)',cpsz,1); % WX(x,i) = w(i)
+    WXX = repmat(reshape(WX, [cpsz 1 dpsz]), [1 cpsz 1]); % WXX(x,x',i) = w(i)
+    WXY = repmat(reshape(WX, [cpsz 1 dpsz]), [1 ss 1]); % WXY(x,y,i) = w(i)
+    if ~CPD.useC
+      CPD.WXsum = CPD.WXsum + WX .* repmat(x(:), 1, dpsz);
+      CPD.WXXsum = CPD.WXXsum + WXX .* repmat(reshape(Cxx, [cpsz cpsz 1]), [1 1 dpsz]);
+      CPD.WXYsum = CPD.WXYsum + WXY .* repmat(reshape(Cxy, [cpsz ss 1]), [1 1 dpsz]);
+    else
+      CPD.WXsum = CPD.WXsum + rep_mult(W, x(:), size(CPD.WXsum));
+      CPD.WXXsum = CPD.WXXsum + rep_mult(W2, Cxx, size(CPD.WXXsum));
+      CPD.WXYsum = CPD.WXYsum + rep_mult(W2, Cxy, size(CPD.WXYsum));
+    end
+  end
+  return;
+end
+
+% general (non-vectorized) case
+fullm = add_evidence_to_gmarginal(fmarginal, evidence, ns, cnodes); % slow!
+
+if dpsz == 1 % no discrete parents
+  w = 1;
+else
+  w = fullm.T(:);
+end
+
+CPD.Wsum = CPD.Wsum + w;
+xi = 1:cpsz;
+yi = (cpsz+1):(cpsz+ss);
+for i=1:dpsz
+  muY = fullm.mu(yi, i);
+  SYY = fullm.Sigma(yi, yi, i);
+  CPD.WYsum(:,i) = CPD.WYsum(:,i) + w(i)*muY;
+  CPD.WYYsum(:,:,i) = CPD.WYYsum(:,:,i) + w(i)*(SYY + muY*muY'); % E[X Y] = Cov[X,Y] + E[X] E[Y]
+  if cpsz > 0
+    muX = fullm.mu(xi, i);
+    SXX = fullm.Sigma(xi, xi, i);
+    SXY = fullm.Sigma(xi, yi, i);
+    CPD.WXsum(:,i) = CPD.WXsum(:,i) + w(i)*muX;
+    CPD.WXXsum(:,:,i) = CPD.WXXsum(:,:,i) + w(i)*(SXX + muX*muX');
+    CPD.WXYsum(:,:,i) = CPD.WXYsum(:,:,i) + w(i)*(SXY + muX*muY');
+  end
+end                
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+/README/1.1.1.1/Wed May 29 15:59:52 2002//
+/adjustable_CPD.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/display.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/generic_CPD.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/learn_params.m/1.1.1.1/Thu Jun 10 01:53:20 2004//
+/log_prior.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/set_clamped.m/1.1.1.1/Wed May 29 15:59:52 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@generic_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/Old/BIC_score_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function score = BIC_score_CPD(CPD, fam, data, ns, cnodes)
+% BIC_score_CPD Compute the BIC score of a generic CPD
+% score = BIC_score_CPD(CPD, fam, data, ns, cnodes)
+%
+% We assume this node has a maximize_params method
+
+ncases = size(data, 2);
+CPD = reset_ess(CPD);
+% make a fully observed joint distribution over the family
+fmarginal.domain = fam;
+fmarginal.T = 1;
+fmarginal.mu = [];
+fmarginal.Sigma = [];
+if ~iscell(data)
+  cases = num2cell(data);
+else
+  cases = data;
+end
+for m=1:ncases
+  CPD = update_ess(CPD, fmarginal, cases(:,m), ns, cnodes);
+end
+CPD = maximize_params(CPD);
+self = fam(end);
+ps = fam(1:end-1);
+L = log_prob_node(CPD, cases(self,:), cases(ps,:));
+score = L - 0.5*CPD.nparams*log(ncases);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/Old/CPD_to_dpots.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function pots = CPD_to_dpots(CPD, domain, ns, cnodes, evidence)
+% CPD_TO_DPOTS Convert the CPD to several discrete potentials, for different instantiations (generic)
+% pots = CPD_to_dpots(CPD, domain, ns, cnodes, evidence)
+%
+% domain(:,i) is the domain of the i'th instantiation of CPD.
+% node_sizes(i) is the size of node i.
+% cnodes = all the cts nodes
+% evidence{i} is the evidence on the i'th node.
+%
+% This just calls CPD_to_dpot for each domain.
+    
+nCPDs = size(domain,2);
+pots = cell(1,nCPDs);
+for i=1:nCPDs
+  pots{i} = CPD_to_dpot(CPD, domain(:,i), ns, cnodes, evidence);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+/BIC_score_CPD.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/CPD_to_dpots.m/1.1.1.1/Wed May 29 15:59:52 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@generic_CPD/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/README	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+A generic CPD implements general purpose functions like 'display',
+that subtypes can inherit.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/adjustable_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function p = adjustable_CPD(CPD)
+% ADJUSTABLE_CPD Does this CPD have any adjustable params? (generic)
+% p = adjustable_CPD(CPD)
+   
+p = ~CPD.clamped;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function display(CPD)
+
+disp(struct(CPD));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/generic_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function CPD = generic_CPD(clamped)
+% GENERIC_CPD Virtual constructor for generic CPD
+% CPD = discrete_CPD(clamped)
+
+if nargin < 1, clamped = 0; end
+
+CPD.clamped = clamped;
+CPD = class(CPD, 'generic_CPD');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/learn_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function CPD = learn_params(CPD, fam, data, ns, cnodes)
+% LEARN_PARAMS Compute the maximum likelihood estimate of the params of a generic CPD given complete data
+% CPD = learn_params(CPD, fam, data, ns, cnodes)
+%
+% data(i,m) is the value of node i in case m (can be cell array).
+% We assume this node has a maximize_params method.
+
+%error('no longer supported') % KPM 1 Feb 03
+
+if 1
+ncases = size(data, 2);
+CPD = reset_ess(CPD);
+% make a fully observed joint distribution over the family
+fmarginal.domain = fam;
+fmarginal.T = 1;
+fmarginal.mu = [];
+fmarginal.Sigma = [];
+if ~iscell(data)
+  cases = num2cell(data);
+else
+  cases = data;
+end
+hidden_bitv = zeros(1, max(fam));
+for m=1:ncases
+  % specify (as a bit vector) which elements in the family domain are hidden
+  hidden_bitv = zeros(1, max(fmarginal.domain));
+  ev = cases(:,m);
+  hidden_bitv(find(isempty(evidence)))=1;
+  CPD = update_ess(CPD, fmarginal, ev, ns, cnodes, hidden_bitv);
+end
+CPD = maximize_params(CPD);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/log_prior.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function L = log_prior(CPD)
+% LOG_PRIOR Return log P(theta) for a generic CPD  - we return 0
+% L = log_prior(CPD)
+
+L = 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@generic_CPD/set_clamped.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function CPD = set_clamped(CPD, bit)
+
+CPD.clamped = bit;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CPD_to_lambda_msg.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+function lam_msg = CPD_to_lambda_msg(CPD, msg_type, n, ps, msg, p, evidence)
+% CPD_TO_LAMBDA_MSG Compute lambda message (gmux)
+% lam_msg = compute_lambda_msg(CPD, msg_type, n, ps, msg, p, evidence)
+% Pearl p183 eq 4.52
+
+% Let Y be this node, X1..Xn be the cts parents and M the discrete switch node.
+% e.g., for n=3, M=1
+%
+%  X1 X2 X3 M
+%   \
+%    \
+%      Y
+%
+% So the only case in which we send an informative message is if p=1=M.
+% To the other cts parents, we send the "know nothing" message.
+
+switch msg_type
+ case 'd',
+  error('gaussian_CPD can''t create discrete msgs')
+ case 'g',
+  cps = ps(CPD.cps);
+  cpsizes = CPD.sizes(CPD.cps);
+  self_size = CPD.sizes(end);
+  i = find_equiv_posns(p, cps); % p is n's i'th cts parent
+  psz = cpsizes(i);
+  dps = ps(CPD.dps);
+  M = evidence{dps};
+  if isempty(M)
+    error('gmux node must have observed discrete parent')
+  end
+  P = msg{n}.lambda.precision;
+  if all(P == 0) | (cps(M) ~= p) % if we know nothing, or are sending to a disconnected parent
+    lam_msg.precision = zeros(psz, psz);
+    lam_msg.info_state = zeros(psz, 1);
+    return;
+  end
+  % We are sending a message to the only effectively connected parent.
+  % There are no other incoming pi messages.
+  Bmu = CPD.mean(:,M);
+  BSigma = CPD.cov(:,:,M);
+  Bi = CPD.weights(:,:,M);
+  if (det(P) > 0) | isinf(P) 
+    if isinf(P) % Y is observed
+      Sigma_lambda = zeros(self_size, self_size); % infinite precision => 0 variance
+      mu_lambda = msg{n}.lambda.mu; % observed_value;
+    else
+      Sigma_lambda = inv(P);
+      mu_lambda = Sigma_lambda * msg{n}.lambda.info_state;
+    end
+    C = inv(Sigma_lambda + BSigma);
+    lam_msg.precision = Bi' * C * Bi;
+    lam_msg.info_state = Bi' * C * (mu_lambda - Bmu);
+  else
+    % method that uses matrix inversion lemma
+    A = inv(P + inv(BSigma));
+    C = P - P*A*P;
+    lam_msg.precision = Bi' * C * Bi;
+    D = eye(self_size) - P*A;
+    z = msg{n}.lambda.info_state;
+    lam_msg.info_state = Bi' * (D*z - D*P*Bmu);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CPD_to_pi.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function pi = CPD_to_pi(CPD, msg_type, n, ps, msg, evidence)
+% CPD_TO_PI Compute the pi vector (gaussian)
+% function pi = CPD_to_pi(CPD, msg_type, n, ps, msg, evidence)
+
+switch msg_type
+ case 'd',
+  error('gaussian_CPD can''t create discrete msgs')
+ case 'g',
+  dps = ps(CPD.dps);
+  k = evidence{dps};
+  if isempty(k)
+    error('gmux node must have observed discrete parent')
+  end
+  m = msg{n}.pi_from_parent{k}; 
+  B = CPD.weights(:,:,k);
+  pi.mu = CPD.mean(:,k) + B * m.mu;
+  pi.Sigma = CPD.cov(:,:,k) + B * m.Sigma * B';
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/CPD_to_lambda_msg.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/CPD_to_pi.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/convert_to_pot.m/1.1.1.1/Wed May 29 15:59:52 2002//
+/display.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/gmux_CPD.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sample_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@gmux_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/gmux_CPD.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@gmux_CPD/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/Old/gmux_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,92 @@
+function CPD = gmux_CPD(bnet, self, varargin)
+% GMUX_CPD Make a Gaussian multiplexer node
+%
+% CPD = gmux_CPD(bnet, node, ...) is used similarly to gaussian_CPD,
+% except we assume there is exactly one discrete parent (call it M)
+% which is used to select which cts parent to pass through to the output.
+% i.e., we define P(Y=y|M=m, X1, ..., XK) = N(y | W*x(m) + mu, Sigma)
+% where Y represents this node, and the Xi's are the cts parents.
+% All the Xi must have the same size, and the num values for M must be K.
+%
+% Currently the params for this kind of CPD cannot be learned.
+%
+% Optional arguments [ default in brackets ]
+%
+% mean       - mu  [zeros(Y,1)]
+% cov        - Sigma [eye(Y,Y)]
+% weights    - W [ randn(Y,X) ]
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  clamp = 0;
+  CPD = class(CPD, 'gmux_CPD', generic_CPD(clamp));
+  return;
+elseif isa(bnet, 'gmux_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+ 
+CPD = class(CPD, 'gmux_CPD', generic_CPD(1));
+
+ns = bnet.node_sizes;
+ps = parents(bnet.dag, self);
+dps = myintersect(ps, bnet.dnodes);
+cps = myintersect(ps, bnet.cnodes);
+fam_sz = ns([ps self]);
+
+CPD.self = self;
+CPD.sizes = fam_sz;
+
+% Figure out which (if any) of the parents are discrete, and which cts, and how big they are
+% dps = discrete parents, cps = cts parents
+CPD.cps = find_equiv_posns(cps, ps); % cts parent index
+CPD.dps = find_equiv_posns(dps, ps);
+if length(CPD.dps) ~= 1
+  error('gmux must have exactly 1 discrete parent')
+end
+ss = fam_sz(end);
+cpsz = fam_sz(CPD.cps(1)); % in gaussian_CPD, cpsz = sum(fam_sz(CPD.cps))
+if ~all(fam_sz(CPD.cps) == cpsz)
+  error('all cts parents must have same size')
+end
+dpsz = fam_sz(CPD.dps);
+if dpsz ~= length(cps)
+  error(['the arity of the mux node is ' num2str(dpsz) ...
+	 ' but there are ' num2str(length(cps)) ' cts parents']);
+end
+
+% set default params
+CPD.mean = zeros(ss, 1);
+CPD.cov = eye(ss);
+CPD.weights = randn(ss, cpsz);
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'mean',        CPD.mean = args{i+1}; 
+   case 'cov',         CPD.cov = args{i+1}; 
+   case 'weights',    CPD.weights = args{i+1}; 
+   otherwise,  
+    error(['invalid argument name ' args{i}]);
+  end
+end
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.self = [];
+CPD.sizes = [];
+CPD.cps = [];
+CPD.dps = [];
+CPD.mean = [];
+CPD.cov = [];
+CPD.weights = [];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/convert_to_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function pot = convert_to_pot(CPD, pot_type, domain, evidence)
+% CONVERT_TO_POT Convert a gmux CPD to a Gaussian potential
+% pot = convert_to_pot(CPD, pot_type, domain, evidence)
+  
+switch pot_type
+ case {'d', 'u', 'cg', 'scg'},
+  error(['can''t convert gmux to potential of type ' pot_type])
+
+ case {'c','g'},
+  % We create a large weight matrix with zeros in all blocks corresponding
+  % to the non-chosen parents, since they are effectively disconnected.
+  % The chosen parent is determined by the value, m,  of the discrete parent.
+  % Thus the potential is as large as the whole family.
+  ps = domain(1:end-1);
+  dps = ps(CPD.dps); % CPD.dps is an index, not a node number (because of param tying)
+  cps = ps(CPD.cps);
+  m = evidence{dps};
+  if isempty(m)
+    error('gmux node must have observed discrete parent')
+  end
+  bs = CPD.sizes(CPD.cps);
+  b = block(m, bs);
+  sum_cpsz = sum(CPD.sizes(CPD.cps));
+  selfsz = CPD.sizes(end);
+  W = zeros(selfsz, sum_cpsz);
+  W(:,b) = CPD.weights(:,:,m);
+
+  ns = zeros(1, max(domain));
+  ns(domain) = CPD.sizes;
+  self = domain(end);
+  cdom = [cps(:)' self];
+  pot = linear_gaussian_to_cpot(CPD.mean(:,m), CPD.cov(:,:,m), W, domain, ns, cdom, evidence);
+  
+ otherwise,
+  error(['unrecognized pot_type' pot_type])
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(CPD)
+
+disp('gmux_CPD object');
+disp(struct(CPD));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/gmux_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,95 @@
+function CPD = gmux_CPD(bnet, self, varargin)
+% GMUX_CPD Make a Gaussian multiplexer node
+%
+% CPD = gmux_CPD(bnet, node, ...) is used similarly to gaussian_CPD,
+% except we assume there is exactly one discrete parent (call it M)
+% which is used to select which cts parent to pass through to the output.
+% i.e., we define P(Y=y|M=m, X1, ..., XK) = N(y | W(m)*x(m) + mu(m), Sigma(m))
+% where Y represents this node, and the Xi's are the cts parents.
+% All the Xi must have the same size, and the num values for M must be K.
+%
+% Currently the params for this kind of CPD cannot be learned.
+%
+% Optional arguments [ default in brackets ]
+%
+% mean       - mu(:,i) is the mean given M=i [ zeros(Y,K) ]
+% cov        - Sigma(:,:,i) is the covariance given M=i [ repmat(1*eye(Y,Y), [1 1 K]) ]
+% weights    - W(:,:,i) is the regression matrix given M=i [ randn(Y,X,K) ]
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  clamp = 0;
+  CPD = class(CPD, 'gmux_CPD', generic_CPD(clamp));
+  return;
+elseif isa(bnet, 'gmux_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+ 
+CPD = class(CPD, 'gmux_CPD', generic_CPD(1));
+
+ns = bnet.node_sizes;
+ps = parents(bnet.dag, self);
+dps = myintersect(ps, bnet.dnodes);
+cps = myintersect(ps, bnet.cnodes);
+fam_sz = ns([ps self]);
+
+CPD.self = self;
+CPD.sizes = fam_sz;
+
+% Figure out which (if any) of the parents are discrete, and which cts, and how big they are
+% dps = discrete parents, cps = cts parents
+CPD.cps = find_equiv_posns(cps, ps); % cts parent index
+CPD.dps = find_equiv_posns(dps, ps);
+if length(CPD.dps) ~= 1
+  error('gmux must have exactly 1 discrete parent')
+end
+ss = fam_sz(end);
+cpsz = fam_sz(CPD.cps(1)); % in gaussian_CPD, cpsz = sum(fam_sz(CPD.cps))
+if ~all(fam_sz(CPD.cps) == cpsz)
+  error('all cts parents must have same size')
+end
+dpsz = fam_sz(CPD.dps);
+if dpsz ~= length(cps)
+  error(['the arity of the mux node is ' num2str(dpsz) ...
+	 ' but there are ' num2str(length(cps)) ' cts parents']);
+end
+
+% set default params
+%CPD.mean = zeros(ss, 1);
+%CPD.cov = eye(ss);
+%CPD.weights = randn(ss, cpsz);
+CPD.mean = zeros(ss, dpsz);
+CPD.cov = 1*repmat(eye(ss), [1 1 dpsz]);    
+CPD.weights = randn(ss, cpsz, dpsz);
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'mean',        CPD.mean = args{i+1}; 
+   case 'cov',         CPD.cov = args{i+1}; 
+   case 'weights',    CPD.weights = args{i+1}; 
+   otherwise,  
+    error(['invalid argument name ' args{i}]);
+  end
+end
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.self = [];
+CPD.sizes = [];
+CPD.cps = [];
+CPD.dps = [];
+CPD.mean = [];
+CPD.cov = [];
+CPD.weights = [];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@gmux_CPD/sample_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function y = sample_node(CPD, pev)
+% SAMPLE_NODE Draw a random sample from P(Xi | x(pi_i), theta_i)  (gmux)
+% y = sample_node(CPD, parent_evidence)
+%
+% parent_ev{i} is the value of the i'th parent
+
+dpval = pev{CPD.dps};
+x = pev{CPD.cps(dpval)};
+y = gsamp(CPD.mean(:,dpval) + CPD.weights(:,:,dpval)*x(:), CPD.cov(:,:,dpval), 1);
+y = y(:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/CPD_to_CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+function CPT = CPD_to_CPT(CPD)
+% Compute the big CPT for an HHMM Q node (including F parents)
+% by combining internal transprob and startprob
+% function CPT = CPD_to_CPT(CPD)
+
+Qsz = CPD.Qsz;
+
+if ~isempty(CPD.Fbelow_ndx)
+  if ~isempty(CPD.Fself_ndx) % general case
+    error('not implemented')
+  else % no F from self, hence no startprob (top level)
+    nps = length(CPD.dom_sz)-1; % num parents
+    CPT = 0*myones(CPD.dom_sz);
+    % when Fself=1, the CPT(i,j) = delta(i,j) for all k
+    for k=1:prod(CPD.Qpsizes)
+      Qps_vals = ind2subv(CPD.Qpsizes, k);
+      ndx = mk_multi_index(nps+1, [CPD.Fbelow_ndx CPD.Qps_ndx], [1 Qps_vals]);
+      CPT(ndx{:}) = eye(Qsz); % CPT(:,2,k,:) or CPT(:,k,2,:) etc
+    end
+    ndx = mk_multi_index(nps+1, CPD.Fbelow_ndx, 2);
+    CPT(ndx{:}) = CPD.transprob; % we assume transprob is in topo order
+  end
+else % no F signal from below
+  if ~isempty(CPD.Fself_ndx) % bottom level
+    nps = length(CPD.dom_sz)-1; % num parents
+    CPT = 0*myones(CPD.dom_sz);
+    ndx = mk_multi_index(nps+1, CPD.Fself_ndx, 1);
+    CPT(ndx{:}) = CPD.transprob;
+    ndx = mk_multi_index(nps+1, CPD.Fself_ndx, 2);
+    CPT(ndx{:}) = CPD.startprob;
+  else % no F from self
+    error('An hhmmQ node without any F parents is just a tabular_CPD')
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/CPD_to_CPT.m/1.1.1.1/Tue Sep 24 12:46:46 2002//
+/hhmm2Q_CPD.m/1.1.1.1/Tue Sep 24 22:34:40 2002//
+/maximize_params.m/1.1.1.1/Tue Sep 24 22:44:36 2002//
+/reset_ess.m/1.1.1.1/Tue Sep 24 22:36:16 2002//
+/update_ess.m/1.1.1.1/Tue Sep 24 22:43:30 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@hhmm2Q_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/hhmm2Q_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function CPD = hhmm2Q_CPD(bnet, self, varargin)
+% HHMMQ_CPD Make the CPD for a Q node in a 2 level hierarchical HMM
+% CPD = hhmmQ_CPD(bnet, self, ...)
+%
+%  Fself(t-1)   Qps
+%           \    |
+%            \   v
+%  Qold(t-1) ->  Q(t)
+%            /
+%           /
+%  Fbelow(t-1) 
+%
+%
+% optional args [defaults]
+%
+% Fself - node number <= ss
+% Fbelow  - node number  <= ss
+% Qps - node numbers (all <= 2*ss) - uses 2TBN indexing
+% transprob - CPT for when Fbelow=2 and Fself=1
+% startprob - CPT for when Fbelow=2 and Fself=2
+% If Fbelow=1, we cannot change state.
+
+ss = bnet.nnodes_per_slice;
+ns = bnet.node_sizes(:);
+
+% set default arguments
+Fself = [];
+Fbelow = [];
+Qps = [];
+startprob = [];
+transprob = [];
+
+for i=1:2:length(varargin)
+  switch varargin{i},
+   case 'Fself', Fself = varargin{i+1};
+   case 'Fbelow', Fbelow = varargin{i+1};
+   case 'Qps', Qps = varargin{i+1};
+   case 'transprob', transprob = varargin{i+1}; 
+   case 'startprob',  startprob = varargin{i+1}; 
+  end
+end
+
+ps = parents(bnet.dag, self);
+old_self = self-ss;
+ndsz = ns(:)';
+CPD.dom_sz = [ndsz(ps) ns(self)];
+CPD.Fself_ndx = find_equiv_posns(Fself, ps);
+CPD.Fbelow_ndx = find_equiv_posns(Fbelow, ps);
+Qps = mysetdiff(ps, [Fself Fbelow old_self]);
+CPD.Qps_ndx = find_equiv_posns(Qps, ps);
+CPD.old_self_ndx = find_equiv_posns(old_self, ps);
+
+Qps = ps(CPD.Qps_ndx);
+CPD.Qsz = ns(self);
+CPD.Qpsizes = ns(Qps);
+
+CPD.transprob = transprob;
+CPD.startprob = startprob;
+CPD.start_counts = [];
+CPD.trans_counts = [];
+
+CPD = class(CPD, 'hhmm2Q_CPD', discrete_CPD(0, CPD.dom_sz));
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/maximize_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function CPD = maximize_params(CPD, temp)
+% MAXIMIZE_PARAMS Set the params of a hhmmQ node to their ML/MAP values.
+% CPD = maximize_params(CPD, temperature)
+
+if sum(CPD.start_counts(:)) > 0
+  CPD.startprob = mk_stochastic(CPD.start_counts);
+end
+if sum(CPD.trans_counts(:)) > 0
+  CPD.transprob = mk_stochastic(CPD.trans_counts);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/reset_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function CPD = reset_ess(CPD)
+% RESET_ESS Reset the Expected Sufficient Statistics of a hhmm2 Q node.
+% CPD = reset_ess(CPD)
+
+domsz = CPD.dom_sz;
+domsz(CPD.Fself_ndx) = 1;
+domsz(CPD.Fbelow_ndx) = 1;
+Qdom_sz = domsz;
+Qdom_sz(Qdom_sz==1)=[]; % get rid of dimensions of size 1
+
+CPD.start_counts = zeros(Qdom_sz);
+CPD.trans_counts = zeros(Qdom_sz);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmm2Q_CPD/update_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+
+marg = add_ev_to_dmarginal(fmarginal, evidence,  ns);
+
+nps = length(CPD.dom_sz)-1; % num parents
+
+if ~isempty(CPD.Fbelow_ndx)
+  if ~isempty(CPD.Fself_ndx) % general case
+    ndx = mk_multi_index(nps+1, [CPD.Fbelow_ndx CPD.Fself_ndx], [2 1]);
+    CPD.trans_counts = CPD.trans_counts + squeeze(marg.T(ndx{:}));
+    ndx = mk_multi_index(nps+1, [CPD.Fbelow_ndx CPD.Fself_ndx], [2 2]);
+    CPD.start_counts = CPD.start_counts + squeeze(marg.T(ndx{:}));
+  else % no F from self, hence no startprob (top level)
+    ndx = mk_multi_index(nps+1, CPD.Fbelow_ndx, 2);
+    CPD.trans_counts = CPD.trans_counts + squeeze(marg.T(ndx{:}));
+  end
+else % no F signal from below
+  if ~isempty(CPD.Fself_ndx) % self F (bottom level)
+    ndx = mk_multi_index(nps+1, CPD.Fself_ndx, 1);
+    CPD.trans_counts = CPD.trans_counts + squeeze(marg.T(ndx{:}));
+    ndx = mk_multi_index(nps+1, CPD.Fself_ndx, 2);
+    CPD.start_counts = CPD.start_counts + squeeze(marg.T(ndx{:}));
+  else % no F from self or below
+    error('no F signal')
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/hhmmF_CPD.m/1.1.1.1/Mon Jun 24 23:38:24 2002//
+/log_prior.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/maximize_params.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/reset_ess.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/update_CPT.m/1.1.1.1/Mon Jun 24 22:45:04 2002//
+/update_ess.m/1.1.1.1/Mon Jun 24 23:54:30 2002//
+D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@hhmmF_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/hhmmF_CPD.m/1.1.1.1/Mon Jun 24 22:35:06 2002//
+/log_prior.m/1.1.1.1/Mon Jun 24 22:35:06 2002//
+/maximize_params.m/1.1.1.1/Mon Jun 24 22:35:06 2002//
+/reset_ess.m/1.1.1.1/Mon Jun 24 22:35:06 2002//
+/update_CPT.m/1.1.1.1/Mon Jun 24 22:35:06 2002//
+/update_ess.m/1.1.1.1/Mon Jun 24 22:35:06 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@hhmmF_CPD/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/hhmmF_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+function CPD = hhmmF_CPD(bnet, self, Qnodes, d, D, varargin)
+% HHMMF_CPD Make the CPD for an F node at depth D of a D-level hierarchical HMM
+% CPD = hhmmF_CPD(bnet, self, Qnodes, d, D, ...)
+%
+%    Q(d-1)
+%          \
+%           \
+%           F(d)
+%         /   |
+%        /    |
+%    Q(d)  F(d+1)
+%
+% We assume nodes are ordered (numbered) as follows:
+% Q(1), ... Q(d), F(d+1), F(d)
+%
+% F(d)=2 means level d has finished. The prob this happens depends on Q(d)
+% and optionally on Q(d-1), Q(d=1), ..., Q(1).
+% Also, level d can only finish if the level below has finished
+% (hence the F(d+1) -> F(d) arc).
+%
+% If d=D, there is no F(d+1), so F(d) is just a regular tabular_CPD.
+% If all models always finish in the same state (e.g., their last),
+% we don't need to condition on the state of parent models (Q(d-1), ...)
+%
+% optional args [defaults]
+%
+% termprob - termprob(k,i,2) = prob finishing given Q(d)=i and Q(1:d-1)=k [ finish in last state ]
+%
+% hhmmF_CPD is a subclass of tabular_CPD so we inherit inference methods like CPD_to_pot, etc.
+%
+% We create an isolated tabular_CPD with no F parent to learn termprob
+% so we can avail of e.g., entropic or Dirichlet priors.
+%
+% For details, see "Linear-time inference in hierarchical HMMs", Murphy and Paskin, NIPS'01.
+
+
+ps = parents(bnet.dag, self);
+Qps = myintersect(ps, Qnodes);
+F = mysetdiff(ps, Qps);
+CPD.Q = Qps(end); % Q(d)
+assert(CPD.Q == Qnodes(d));
+CPD.Qps = Qps(1:end-1); % all Q parents except Q(d), i.e., calling context
+
+ns = bnet.node_sizes(:);
+CPD.Qsizes = ns(Qnodes);
+CPD.d = d;
+CPD.D = D;
+
+Qsz = ns(CPD.Q);
+Qpsz = prod(ns(CPD.Qps));
+
+% set default arguments
+p = 0.9;
+%termprob(k,i,t) Might terminate if i=Qsz; will not terminate if i<Qsz
+termprob = zeros(Qpsz, Qsz, 2);
+termprob(:, Qsz, 2) = p; 
+termprob(:, Qsz, 1) = 1-p; 
+termprob(:, 1:(Qsz-1), 1) = 1; 
+    
+for i=1:2:length(varargin)
+  switch varargin{i},
+   case 'termprob', termprob = varargin{i+1}; 
+   otherwise, error(['unrecognized argument ' varargin{i}])
+  end
+end
+
+ps = [CPD.Qps CPD.Q];
+% ns(self) = 2 since this is an F node
+CPD.sub_CPD_term = mk_isolated_tabular_CPD(ps, ns([ps self]), {'CPT', termprob});
+S = struct(CPD.sub_CPD_term);
+CPD.termprob = S.CPT;
+
+CPD = class(CPD, 'hhmmF_CPD', tabular_CPD(bnet, self));
+
+CPD = update_CPT(CPD);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/log_prior.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function L = log_prior(CPD)
+% LOG_PRIOR Return log P(theta) for a hhmm F CPD 
+% L = log_prior(CPD)
+
+L = log_prior(CPD.sub_CPD_term);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/maximize_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function CPD = maximize_params(CPD, temp)
+% MAXIMIZE_PARAMS Set the params of a hhmmF node to their ML/MAP values.
+% CPD = maximize_params(CPD, temperature)
+
+CPD.sub_CPD_term = maximize_params(CPD.sub_CPD_term, temp);
+S = struct(CPD.sub_CPD_term);
+CPD.termprob = S.CPT;
+
+CPD = update_CPT(CPD);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/reset_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function CPD = reset_ess(CPD)
+% RESET_ESS Reset the Expected Sufficient Statistics of a hhmm F node.
+% CPD = reset_ess(CPD)
+
+CPD.sub_CPD_term = reset_ess(CPD.sub_CPD_term);   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/update_CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function CPD = update_CPT(CPD)
+% Compute the big CPT for an HHMM F node given internal termprob
+% function CPD = update_CPT(CPD)
+
+Qsz = CPD.Qsizes(CPD.Q);
+Qpsz = prod(CPD.Qsizes(CPD.Qps));
+
+% P(Q(1:d-1), Q(d), F(d+1), F(d))
+CPT = zeros(Qpsz, Qsz, 2, 2);
+CPT(:,:,1,1) = 1; % if F(d+1)=1, then F(d)=1
+CPT(:,:,2,:) = CPD.termprob;
+
+CPD = set_fields(CPD, 'CPT', CPT);          
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/Old/update_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,61 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a hhmmF node.
+% function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+
+% Figure out the node numbers associated with each parent
+% so we extract evidence from the right place
+dom = fmarginal.domain; % Q(1) .. Q(d) F(d+1) F(d)
+Qps = fmarginal.domain(1:end-2);
+Q = Qps(end);
+Qps = Qps(1:end-1);
+
+Qsz = CPD.Qsizes(CPD.Q);
+Qpsz = prod(CPD.Qsizes(CPD.Qps)); % may be 1
+
+% We assume the F node are always hidden, but allow some of the Q nodes
+% to be observed. We do case analysis for speed.
+%We only extract prob from fmarginal.T when F(d+1)=2 i.e., model below has finished.
+% wrong -> % We sum over the possibilities that F(d+1) = 1 or 2
+
+obs_self = ~hidden_bitv(Q);
+if obs_self
+  self_val = evidence{Q};
+end
+
+if isempty(Qps) % independent of parent context
+  counts = zeros(Qsz, 2);
+  %fmarginal.T(Q(d), F(d+1), F(d))
+  if obs_self
+    marg = myreshape(fmarginal.T, [1 2 2]);
+    counts(self_val,:) = marg(1,2,:);
+    %counts(self_val,:) = marg(1,1,:) + marg(1,2,:);
+  else
+    marg = myreshape(fmarginal.T, [Qsz 2 2]);
+    counts = squeeze(marg(:,2,:));
+    %counts = squeeze(marg(:,2,:)) + squeeze(marg(:,1,:));
+  end
+else
+  counts = zeros(Qpsz, Qsz, 2);
+  %fmarginal.T(Q(1:d-1), Q(d), F(d+1), F(d))
+  obs_Qps = ~any(hidden_bitv(Qps));  % we assume that all or none of the Q  parents are observed
+  if obs_Qps
+    Qps_val = subv2ind(Qpsz, cat(1, evidence{Qps}));
+  end
+  if obs_self & obs_Qps
+    marg = myreshape(fmarginal.T, [1 1 2 2]);
+    counts(Qps_val, self_val, :) = squeeze(marg(1,1,2,:));
+    %counts(Qps_val, self_val, :) = squeeze(marg(1,1,2,:)) + squeeze(marg(1,1,1,:));
+  elseif ~obs_self & obs_Qps
+    marg = myreshape(fmarginal.T, [1 Qsz 2 2]);
+    counts(Qps_val, :, :) = squeeze(marg(1,:,2,:));
+    %counts(Qps_val, :, :) = squeeze(marg(1,:,2,:)) + squeeze(marg(1,:,1,:));
+  elseif obs_self & ~obs_Qps
+    error('not yet implemented')
+  else
+    marg = myreshape(fmarginal.T, [Qpsz Qsz 2 2]);
+    counts(:, :, :) = squeeze(marg(:,:,2,:));
+    %counts(:, :, :) = squeeze(marg(:,:,2,:)) + squeeze(marg(:,:,1,:));
+  end    
+end
+
+CPD.sub_CPD_term = update_ess_simple(CPD.sub_CPD_term, counts);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/hhmmF_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+function CPD = hhmmF_CPD(bnet, self, Qself, Fbelow, varargin)
+% HHMMF_CPD Make the CPD for an F node in a hierarchical HMM
+% CPD = hhmmF_CPD(bnet, self, Qself,  Fbelow, ...)
+%
+%        Qps
+%          \
+%           \
+%           Fself
+%         /   |
+%        /    |
+%       Qself Fbelow
+%
+% We assume nodes are ordered (numbered) as follows: Qps, Q, Fbelow, F
+% All nodes numbers should be from slice 1.
+%
+% If Fbelow if missing, this becomes a regular tabular_CPD.
+% Qps may be omitted.
+%
+% optional args [defaults]
+% 
+% Qps - node numbers.
+% termprob - termprob(k,i,2) = prob finishing given Q(d)=i and Q(1:d-1)=k [ finish in last state wp 0.9]
+%
+% hhmmF_CPD is a subclass of tabular_CPD so we inherit inference methods like CPD_to_pot, etc.
+%
+% We create an isolated tabular_CPD with no F parent to learn termprob
+% so we can avail of e.g., entropic or Dirichlet priors.
+%
+% For details, see "Linear-time inference in hierarchical HMMs", Murphy and Paskin, NIPS'01.
+
+
+
+Qps = [];
+% get parents
+for i=1:2:length(varargin)
+  switch varargin{i},
+   case 'Qps', Qps = varargin{i+1}; 
+  end
+end
+
+ns = bnet.node_sizes(:);
+Qsz = ns(Qself);
+Qpsz = prod(ns(Qps));
+CPD.Qsz = Qsz;
+CPD.Qpsz = Qpsz;
+
+ps = parents(bnet.dag, self);
+CPD.Fbelow_ndx = find_equiv_posns(Fbelow, ps);
+CPD.Qps_ndx = find_equiv_posns(Qps, ps);
+CPD.Qself_ndx = find_equiv_posns(Qself, ps);
+
+% set default arguments
+p = 0.9;
+%termprob(k,i,t) Might terminate if i=Qsz; will not terminate if i<Qsz
+termprob = zeros(Qpsz, Qsz, 2);
+termprob(:, Qsz, 2) = p; 
+termprob(:, Qsz, 1) = 1-p; 
+termprob(:, 1:(Qsz-1), 1) = 1; 
+    
+for i=1:2:length(varargin)
+  switch varargin{i},
+   case 'termprob', termprob = varargin{i+1}; 
+  end
+end
+
+CPD.sub_CPD_term = mk_isolated_tabular_CPD([Qpsz Qsz 2], {'CPT', termprob});
+S = struct(CPD.sub_CPD_term);
+CPD.termprob = S.CPT;
+
+CPD = class(CPD, 'hhmmF_CPD', tabular_CPD(bnet, self));
+
+CPD = update_CPT(CPD);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/log_prior.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function L = log_prior(CPD)
+% LOG_PRIOR Return log P(theta) for a hhmm F CPD 
+% L = log_prior(CPD)
+
+L = log_prior(CPD.sub_CPD_term);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/maximize_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function CPD = maximize_params(CPD, temp)
+% MAXIMIZE_PARAMS Set the params of a hhmmF node to their ML/MAP values.
+% CPD = maximize_params(CPD, temperature)
+
+CPD.sub_CPD_term = maximize_params(CPD.sub_CPD_term, temp);
+S = struct(CPD.sub_CPD_term);
+CPD.termprob = S.CPT;
+
+CPD = update_CPT(CPD);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/reset_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function CPD = reset_ess(CPD)
+% RESET_ESS Reset the Expected Sufficient Statistics of a hhmm F node.
+% CPD = reset_ess(CPD)
+
+CPD.sub_CPD_term = reset_ess(CPD.sub_CPD_term);   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/update_CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function CPD = update_CPT(CPD)
+% Compute the big CPT for an HHMM F node given internal termprob
+% function CPD = update_CPT(CPD)
+
+Qsz = CPD.Qsz;
+Qpsz = CPD.Qpsz;
+
+% CPT(Qpsz, Q, Fbelow, Fself)
+CPT = zeros(Qpsz, Qsz, 2, 2);
+CPT(:,:,1,1) = 1; % if Fbelow=1 (off), then Fself=1 (off)
+CPT(:,:,2,:) = CPD.termprob;
+
+CPD = set_fields(CPD, 'CPT', CPT);          
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmF_CPD/update_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a hhmmF node.
+% function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+%
+% We assume the F nodes are always hidden
+
+% Figure out the node numbers associated with each parent
+dom = fmarginal.domain;
+%Fself = dom(end); 
+%Fbelow = dom(CPD.Fbelow_ndx);
+Qself = dom(CPD.Qself_ndx);
+Qps = dom(CPD.Qps_ndx);
+
+Qsz = CPD.Qsz;
+Qpsz = CPD.Qpsz;
+
+if all(hidden_bitv(Qps)) % we assume all are hidden or all are observed
+  k_ndx = 1:Qpsz;
+  eff_Qpsz = Qpsz;
+else
+  k_ndx = subv2ind(Qpsz, cat(1, evidence{Qps}));
+  eff_Qpsz = 1;
+end
+
+if hidden_bitv(Qself)
+  j_ndx = 1:Qsz;
+  eff_Qsz = Qsz;
+else
+  j_ndx = evidence{Qself};
+  eff_Qsz = 1;
+end
+
+% Fmarginal(Qps, Q, Fbelow, F)
+fmarg = myreshape(fmarginal.T, [eff_Qpsz eff_Qsz  2 2]);
+
+counts = zeros(Qpsz, Qsz, 2);
+%counts(k_ndx, j_ndx, :) = sum(fmarginal.T(:, :, :, :), 3); % sum over Fbelow
+counts(k_ndx, j_ndx, :) = fmarg(:, :, 2, :); % Fbelow = 2
+
+CPD.sub_CPD_term = update_ess_simple(CPD.sub_CPD_term, counts);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/hhmmQ_CPD.m/1.1.1.1/Tue Sep 24 04:19:26 2002//
+/log_prior.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/maximize_params.m/1.1.1.1/Tue Sep 24 13:10:18 2002//
+/reset_ess.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/update_CPT.m/1.1.1.1/Tue Sep 24 02:58:18 2002//
+/update_ess.m/1.1.1.1/Thu Jul 24 13:41:34 2003//
+D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@hhmmQ_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+/hhmmQ_CPD.m/1.1.1.1/Mon Jun 24 18:19:00 2002//
+/log_prior.m/1.1.1.1/Mon Jun 24 18:19:00 2002//
+/maximize_params.m/1.1.1.1/Mon Jun 24 18:19:00 2002//
+/reset_ess.m/1.1.1.1/Mon Jun 24 18:19:00 2002//
+/update_CPT.m/1.1.1.1/Tue Sep 24 02:30:32 2002//
+/update_ess.m/1.1.1.1/Mon Jun 24 18:19:00 2002//
+/update_ess2.m/1.1.1.1/Mon Jun 24 21:20:52 2002//
+/update_ess3.m/1.1.1.1/Mon Jun 24 22:08:08 2002//
+/update_ess4.m/1.1.1.1/Mon Jun 24 22:23:32 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@hhmmQ_CPD/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/hhmmQ_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,126 @@
+function CPD = hhmmQ_CPD(bnet, self, Qnodes, d, D, varargin)
+% HHMMQ_CPD Make the CPD for a Q node at depth D of a D-level hierarchical HMM
+% CPD = hhmmQ_CPD(bnet, self, Qnodes, d, D, ...)
+%
+%  Fd(t-1) \   Q1:d-1(t)
+%           \  |
+%            \ v
+%  Qd(t-1) -> Qd(t)
+%            /
+%           /
+%  Fd+1(t-1) 
+%
+% We assume parents are ordered (numbered) as follows:
+% Qd(t-1), Fd+1(t-1), Fd(t-1), Q1(t), ..., Qd(t)
+%
+% The parents of Qd(t) can either be just Qd-1(t) or the whole stack Q1:d-1(t) (allQ)
+% In either case, we will call them Qps.
+% If d=1, Qps does not exist. Also, the F1(t-1) -> Q1(t) arc is optional.
+% If the arc is missing, startprob does not need to be specified,
+% since the toplevel is assumed to never reset (F1 does not exist).
+% If d=D, Fd+1(t-1) does not exist (there is no signal from below).
+%
+% optional args [defaults]
+%
+% transprob - transprob(i,k,j) = prob transition from i to j given Qps = k ['leftright']
+% selfprob  - prob of a transition from i to i given Qps=k [0.1]
+% startprob - startprob(k,j) = prob start in j given Qps = k ['leftstart']
+% startargs - other args to be passed to the sub tabular_CPD for learning startprob
+% transargs - other args will be passed to the sub tabular_CPD for learning transprob
+% allQ      - 1 means use all Q nodes above d as parents, 0 means just level d-1 [0]
+% F1toQ1    - 1 means add F1(t-1) -> Q1(t) arc, 0 means level 1 never resets [0]
+%
+% For d=1, startprob(1,j) is only needed if F1toQ1=1
+% Also, transprob(i,j) can be used instead of transprob(i,1,j).
+%
+% hhmmQ_CPD is a subclass of tabular_CPD so we inherit inference methods like CPD_to_pot, etc.
+%
+% We create isolated tabular_CPDs with no F parents to learn transprob/startprob
+% so we can avail of e.g., entropic or Dirichlet priors.
+% In the future, we will be able to represent the transprob using a tree_CPD.
+%
+% For details, see "Linear-time inference in hierarchical HMMs", Murphy and Paskin, NIPS'01.
+
+
+ss = bnet.nnodes_per_slice;
+%assert(self == Qnodes(d)+ss);
+ns = bnet.node_sizes(:);
+CPD.Qsizes = ns(Qnodes);
+CPD.d = d;
+CPD.D = D;
+allQ = 0;
+
+% find out which parents to use, to get right size
+for i=1:2:length(varargin)
+  switch varargin{i},
+   case 'allQ', allQ = varargin{i+1}; 
+  end
+end
+
+if d==1
+  CPD.Qps = [];
+else
+  if allQ
+    CPD.Qps = Qnodes(1:d-1);
+  else
+    CPD.Qps = Qnodes(d-1);
+  end
+end
+
+Qsz = ns(self);
+Qpsz = prod(ns(CPD.Qps));
+
+% set default arguments
+startprob = 'leftstart';
+transprob = 'leftright';
+startargs = {};
+transargs = {};
+CPD.F1toQ1 = 0;
+selfprob = 0.1;
+
+for i=1:2:length(varargin)
+  switch varargin{i},
+   case 'transprob', transprob = varargin{i+1}; 
+   case 'selfprob',  selfprob = varargin{i+1}; 
+   case 'startprob', startprob = varargin{i+1}; 
+   case 'startargs', startargs = varargin{i+1}; 
+   case 'transargs', transargs = varargin{i+1}; 
+   case 'F1toQ1',    CPD.F1toQ1 = varargin{i+1}; 
+  end
+end
+
+Qps = CPD.Qps + ss;
+old_self = self-ss;
+
+if strcmp(transprob, 'leftright')
+  LR = mk_leftright_transmat(Qsz, selfprob);
+  transprob = repmat(reshape(LR, [1 Qsz Qsz]), [Qpsz 1 1]); % transprob(k,i,j)
+  transprob = permute(transprob, [2 1 3]); % now transprob(i,k,j)
+end
+transargs{end+1} = 'CPT';
+transargs{end+1} = transprob;
+CPD.sub_CPD_trans = mk_isolated_tabular_CPD([old_self Qps], ns([old_self Qps self]), transargs);
+S = struct(CPD.sub_CPD_trans);
+CPD.transprob = myreshape(S.CPT, [Qsz Qpsz Qsz]);
+
+
+if strcmp(startprob, 'leftstart')
+  startprob = zeros(Qpsz, Qsz);
+  startprob(:,1) = 1;
+end
+
+if (d==1) & ~CPD.F1toQ1
+  CPD.sub_CPD_start = [];
+  CPD.startprob = [];
+else
+  startargs{end+1} = 'CPT';
+  startargs{end+1} = startprob;
+  CPD.sub_CPD_start = mk_isolated_tabular_CPD(Qps, ns([Qps self]), startargs);
+  S = struct(CPD.sub_CPD_start);
+  CPD.startprob = myreshape(S.CPT, [Qpsz Qsz]);
+end
+
+CPD = class(CPD, 'hhmmQ_CPD', tabular_CPD(bnet, self));
+
+CPD = update_CPT(CPD);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/log_prior.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function L = log_prior(CPD)
+% LOG_PRIOR Return log P(theta) for a hhmm CPD 
+% L = log_prior(CPD)
+
+L = log_prior(CPD.sub_CPD_trans);
+if ~isempty(CPD.sub_CPD_start)
+  L = L + log_prior(CPD.sub_CPD_start);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/maximize_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function CPD = maximize_params(CPD, temp)
+% MAXIMIZE_PARAMS Set the params of a hhmmQ node to their ML/MAP values.
+% CPD = maximize_params(CPD, temperature)
+
+Qsz = CPD.Qsizes(CPD.d);
+Qpsz = prod(CPD.Qsizes(CPD.Qps));
+
+if ~isempty(CPD.sub_CPD_start)
+  CPD.sub_CPD_start = maximize_params(CPD.sub_CPD_start, temp);
+  S = struct(CPD.sub_CPD_start);
+  CPD.startprob = myreshape(S.CPT, [Qpsz Qsz]);
+  %CPD.startprob = S.CPT;
+end
+
+if 1
+  % If we are in a state that can only go the end state,
+  % we will never see a transition to another (non-end) state,
+  % so counts(i,k,j)=0 (and termprob(k,i)=1).
+  % We set counts(i,k,i)=1 in this case.
+  % This will cause remove_hhmm_end_state to return a
+  % stochastic matrix, but otherwise has no effect on EM.
+  counts = get_field(CPD.sub_CPD_trans, 'counts');
+  counts = reshape(counts, [Qsz Qpsz Qsz]);
+  for k=1:Qpsz
+    for i=1:Qsz
+      if sum(counts(i,k,:))==0 % never witnessed a transition out of i
+	counts(i,k,i)=1; % add self loop 
+	%fprintf('CPDQ d=%d i=%d k=%d\n', CPD.d, i, k);
+      end
+    end
+  end
+  CPD.sub_CPD_trans = set_fields(CPD.sub_CPD_trans, 'counts', counts(:)); 
+end
+ 
+CPD.sub_CPD_trans = maximize_params(CPD.sub_CPD_trans, temp);
+S = struct(CPD.sub_CPD_trans);
+%CPD.transprob = S.CPT;
+CPD.transprob = myreshape(S.CPT, [Qsz Qpsz Qsz]);
+
+CPD = update_CPT(CPD);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/reset_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function CPD = reset_ess(CPD)
+% RESET_ESS Reset the Expected Sufficient Statistics of a hhmm Q node.
+% CPD = reset_ess(CPD)
+
+if ~isempty(CPD.sub_CPD_start)
+  CPD.sub_CPD_start = reset_ess(CPD.sub_CPD_start);
+end
+CPD.sub_CPD_trans = reset_ess(CPD.sub_CPD_trans);   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/update_CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+function CPD = update_CPT(CPD)
+% Compute the big CPT for an HHMM Q node (including F parents) given internal transprob and startprob
+% function CPD = update_CPT(CPD)
+
+Qsz = CPD.Qsz;
+Qpsz = CPD.Qpsz;
+
+if ~isempty(CPD.Fbelow_ndx)
+  if ~isempty(CPD.Fself_ndx) % general case
+    % Fb(t-1) Fself(t-1)  P(Q(t)=j| Q(t-1)=i, Qps(t)=k)
+    % ------------------------------------------------------
+    % 1        1         delta(i,j)
+    % 2        1         transprob(i,k,j)
+    % 1        2         impossible
+    % 2        2         startprob(k,j)
+    CPT = zeros(Qsz, 2, 2, Qpsz, Qsz);
+    I = repmat(eye(Qsz), [1 1 Qpsz]); % i,j,k
+    I = permute(I, [1 3 2]); % i,k,j
+    CPT(:, 1, 1, :, :) = I;
+    CPT(:, 2, 1, :, :) = CPD.transprob;
+    CPT(:, 1, 2, :, :) = I;
+    CPT(:, 2, 2, :, :) = repmat(reshape(CPD.startprob, [1 Qpsz Qsz]), [Qsz 1 1]); % replicate over i
+  else % no F from self, hence no startprob
+    % Fb(t-1) P(Q(t)=j| Q(t-1)=i, Qps(t)=k)
+    % ------------------------------------------------------
+    % 1       delta(i,j)
+    % 2       transprob(i,k,j)
+    
+    nps = length(CPD.dom_sz)-1; % num parents
+    CPT = 0*myones(CPD.dom_sz);
+    %CPT = zeros(Qsz, 2, Qpsz, Qsz); % assumes CPT(Q(t-1), F(t-1), Qps, Q(t))
+    % but a member of Qps may preceed Q(t-1) or F(t-1) in the ordering
+    
+    I = repmat(eye(Qsz), [1 1 Qpsz]); % i,j,k
+    I = permute(I, [1 3 2]); % i,k,j
+
+    % the following fails if there is a member of Qps with a lower
+    % number than F
+    %CPT(:, 1, :, :) = I;
+    %CPT(:, 2, :, :) = CPD.transprob;
+
+    ndx = mk_multi_index(nps+1, CPD.Fbelow_ndx, 1);
+    CPT(ndx{:}) = I;
+    ndx = mk_multi_index(nps+1, CPD.Fbelow_ndx, 2);
+    CPT(ndx{:}) = CPD.transprob;
+    keyboard
+  end
+else % no F signal from below
+  if ~isempty(CPD.Fself_ndx)
+    % Q(t-1), Fself(t-1), Qps, Q(t)
+    
+    % if condition start on previous concrete state (as in map learning),
+    % CPT(:, 1, :, :, :) = CPD.transprob(Q(t-1), Qps, Q(t))
+    % CPT(:, 2, :, :, :) = CPD.startprob(Q(t-1), Qps, Q(t))
+    
+    % Fself(t-1)  P(Q(t-1)=i, Qps(t)=k -> Q(t)=j)
+    % ------------------------------------------------------
+    % 1         transprob(i,k,j)
+    % 2         startprob(k,j)
+    CPT = zeros(Qsz, 2, Qpsz, Qsz);
+    I = repmat(eye(Qsz), [1 1 Qpsz]); % i,j,k
+    I = permute(I, [1 3 2]); % i,k,j
+    CPT(:, 1, :, :) = CPD.transprob;
+    if CPD.fullstartprob
+      CPT(:, 2, :, :) = CPD.startprob;
+    else
+      CPT(:, 2, :, :) = repmat(reshape(CPD.startprob, [1 Qpsz Qsz]), [Qsz 1 1]); % replicate over i
+    end
+    else % no F from self
+    error('An hhmmQ node without any F parents is just a tabular_CPD')
+  end
+end
+
+CPD = set_fields(CPD, 'CPT', CPT);          
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/update_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,141 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a hhmm Q node.
+% function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, idden_bitv)
+
+% Figure out the node numbers associated with each parent
+% e.g., D=4, d=3, Qps = all Qs above, so dom = [Q3(t-1) F4(t-1) F3(t-1) Q1(t) Q2(t) Q3(t)].
+% so self = Q3(t), old_self = Q3(t-1), CPD.Qps = [1 2], Qps = [Q1(t) Q2(t)]
+dom = fmarginal.domain;
+self = dom(end);
+old_self = dom(1);
+Qps = dom(length(dom)-length(CPD.Qps):end-1);
+
+Qsz = CPD.Qsizes(CPD.d);
+Qpsz = prod(CPD.Qsizes(CPD.Qps));
+
+% If some of the Q nodes are observed (which happens during supervised training)
+% the counts will only be non-zero in positions
+% consistent with the evidence. We put the computed marginal responsibilities
+% into the appropriate slots of the big counts array.
+% (Recall that observed discrete nodes only have a single effective value.)
+% (A more general, but much slower, way is to call add_evidence_to_dmarginal.)
+% We assume the F nodes are never observed.
+
+obs_self = ~hidden_bitv(self);
+obs_Qps = (~isempty(Qps)) & (~any(hidden_bitv(Qps))); % we assume that all or none of the Q parents are observed
+
+if obs_self
+  self_val = evidence{self};
+  oldself_val = evidence{old_self};
+end
+
+if obs_Qps
+  Qps_val = subv2ind(Qpsz, cat(1, evidence{Qps}));
+  if Qps_val == 0
+    keyboard
+  end
+end
+
+if CPD.d==1 % no Qps from above
+  if ~CPD.F1toQ1 % no F from self
+    % marg(Q1(t-1), F2(t-1), Q1(t))                            
+    % F2(t-1) P(Q1(t)=j | Q1(t-1)=i)
+    % 1       delta(i,j)
+    % 2       transprob(i,j)
+    if obs_self
+      hor_counts = zeros(Qsz, Qsz);
+      hor_counts(oldself_val, self_val) = fmarginal.T(2);
+    else
+      marg = reshape(fmarginal.T, [Qsz 2 Qsz]);
+      hor_counts = squeeze(marg(:,2,:));
+    end
+  else
+    % marg(Q1(t-1), F2(t-1), F1(t-1), Q1(t))                            
+    % F2(t-1) F1(t-1)  P(Qd(t)=j| Qd(t-1)=i)
+    % ------------------------------------------------------
+    % 1        1         delta(i,j)
+    % 2        1         transprob(i,j)
+    % 1        2         impossible
+    % 2        2         startprob(j)
+    if obs_self
+      marg = myreshape(fmarginal.T, [1 2 2 1]);
+      hor_counts = zeros(Qsz, Qsz);
+      hor_counts(oldself_val, self_val) = marg(1,2,1,1);
+      ver_counts = zeros(Qsz, 1);
+      %ver_counts(self_val) = marg(1,2,2,1);
+      ver_counts(self_val) = marg(1,2,2,1) + marg(1,1,2,1);
+    else
+      marg = reshape(fmarginal.T, [Qsz 2 2 Qsz]);
+      hor_counts = squeeze(marg(:,2,1,:));
+      %ver_counts = squeeze(sum(marg(:,2,2,:),1)); % sum over i
+      ver_counts = squeeze(sum(marg(:,2,2,:),1)) + squeeze(sum(marg(:,1,2,:),1)); % sum i,b
+    end
+  end % F1toQ1
+else % d ~= 1
+  if CPD.d < CPD.D % general case
+    % marg(Qd(t-1), Fd+1(t-1), Fd(t-1), Qps(t), Qd(t))                            
+    % Fd+1(t-1) Fd(t-1)  P(Qd(t)=j| Qd(t-1)=i, Qps(t)=k)
+    % ------------------------------------------------------
+    % 1        1         delta(i,j)
+    % 2        1         transprob(i,k,j)
+    % 1        2         impossible
+    % 2        2         startprob(k,j)
+    if obs_Qps & obs_self
+      marg = myreshape(fmarginal.T, [1 2 2 1 1]);
+      k = 1;
+      hor_counts = zeros(Qsz, Qpsz, Qsz);
+      hor_counts(oldself_val, Qps_val, self_val) = marg(1, 2,1, k,1);
+      ver_counts = zeros(Qpsz, Qsz);
+      %ver_counts(Qps_val, self_val) = marg(1, 2,2, k,1);
+      ver_counts(Qps_val, self_val) = marg(1, 2,2, k,1) + marg(1, 1,2, k,1);
+    elseif obs_Qps & ~obs_self
+      marg = myreshape(fmarginal.T, [Qsz 2 2 1 Qsz]);
+      k = 1;
+      hor_counts = zeros(Qsz, Qpsz, Qsz);
+      hor_counts(:, Qps_val, :) = marg(:, 2,1, k,:);
+      ver_counts = zeros(Qpsz, Qsz);
+      %ver_counts(Qps_val, :) = sum(marg(:, 2,2, k,:), 1);
+      ver_counts(Qps_val, :) = sum(marg(:, 2,2, k,:), 1) + sum(marg(:, 1,2, k,:), 1);
+    elseif ~obs_Qps & obs_self
+      error('not yet implemented')
+    else % everything is hidden
+      marg = reshape(fmarginal.T, [Qsz 2 2 Qpsz Qsz]);
+      hor_counts = squeeze(marg(:,2,1,:,:)); % i,k,j
+      %ver_counts = squeeze(sum(marg(:,2,2,:,:),1)); % sum over i
+      ver_counts = squeeze(sum(marg(:,2,2,:,:),1)) + squeeze(sum(marg(:,1,2,:,:),1)); % sum over i,b
+    end
+  else % d == D, so no F from below
+    % marg(QD(t-1), FD(t-1), Qps(t), QD(t))                            
+    % FD(t-1) P(QD(t)=j | QD(t-1)=i, Qps(t)=k)
+    % 1      transprob(i,k,j) 
+    % 2      startprob(k,j)
+    if obs_Qps & obs_self
+      marg = myreshape(fmarginal.T, [1 2 1 1]);
+      k = 1;
+      hor_counts = zeros(Qsz, Qpsz, Qsz);
+      hor_counts(oldself_val, Qps_val, self_val) = marg(1, 1, k,1);
+      ver_counts = zeros(Qpsz, Qsz);
+      ver_counts(Qps_val, self_val) = marg(1, 2, k,1);
+    elseif obs_Qps & ~obs_self
+      marg = myreshape(fmarginal.T, [Qsz 2 1 Qsz]);
+      k = 1;
+      hor_counts = zeros(Qsz, Qpsz, Qsz);
+      hor_counts(:, Qps_val, :) = marg(:, 1, k,:);
+      ver_counts = zeros(Qpsz, Qsz);
+      ver_counts(Qps_val, :) = sum(marg(:, 2, k, :), 1);
+    elseif ~obs_Qps & obs_self
+      error('not yet implemented')
+    else % everything is hidden
+      marg = reshape(fmarginal.T, [Qsz 2 Qpsz Qsz]);
+      hor_counts = squeeze(marg(:,1,:,:));
+      ver_counts = squeeze(sum(marg(:,2,:,:),1)); % sum over i
+    end
+  end
+end
+
+CPD.sub_CPD_trans = update_ess_simple(CPD.sub_CPD_trans, hor_counts);
+
+if ~isempty(CPD.sub_CPD_start)
+  CPD.sub_CPD_start = update_ess_simple(CPD.sub_CPD_start, ver_counts);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/update_ess2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,178 @@
+function CPD = update_ess2(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a hhmm Q node.
+% function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, idden_bitv)
+
+% Figure out the node numbers associated with each parent
+dom = fmarginal.domain;
+self = dom(end); % by assumption
+old_self = dom(CPD.old_self_ndx);
+Fself = dom(CPD.Fself_ndx);
+Fbelow = dom(CPD.Fbelow_ndx);
+Qps = dom(CPD.Qps_ndx);
+
+Qsz = CPD.Qsz;
+Qpsz = CPD.Qpsz;
+
+
+fmarg = add_ev_to_dmarginal(fmarginal, evidence, ns);
+
+
+
+% hor_counts(old_self, Qps, self),
+% fmarginal(old_self, Fbelow, Fself, Qps, self)
+% hor_counts(i,k,j) = fmarginal(i,2,1,k,j) % below has finished, self has not
+% ver_counts(i,k,j) = fmarginal(i,2,2,k,j) % below has finished, and so has self (reset)
+% Since any of i,j,k may be observed, we write
+% hor_counts(counts_ndx{:}) = fmarginal(fmarg_ndx{:})
+% where e.g., counts_ndx = {1, ':', 2} if Qps is hidden but we observe old_self=1, self=2.
+% To create this counts_ndx, we write counts_ndx = mk_multi_ndx(3, obs_dim, obs_val)
+% where counts_obs_dim = [1 3], counts_obs_val = [1 2] specifies the values of dimensions 1 and 3.
+
+counts_obs_dim = [];
+fmarg_obs_dim = [];
+obs_val = []; 
+if hidden_bitv(self)
+  effQsz = Qsz;
+else
+  effQsz = 1;
+  counts_obs_dim = [counts_obs_dim 3];
+  fmarg_obs_dim = [fmarg_obs_dim 5];
+  obs_val = [obs_val evidence{self}];
+end
+  
+% e.g., D=4, d=3, Qps = all Qs above, so dom = [Q3(t-1) F4(t-1) F3(t-1) Q1(t) Q2(t) Q3(t)].
+% so self = Q3(t), old_self = Q3(t-1), CPD.Qps = [1 2], Qps = [Q1(t) Q2(t)]
+dom = fmarginal.domain;
+self = dom(end);
+old_self = dom(1);
+Qps = dom(length(dom)-length(CPD.Qps):end-1);
+
+Qsz = CPD.Qsizes(CPD.d);
+Qpsz = prod(CPD.Qsizes(CPD.Qps));
+
+% If some of the Q nodes are observed (which happens during supervised training)
+% the counts will only be non-zero in positions
+% consistent with the evidence. We put the computed marginal responsibilities
+% into the appropriate slots of the big counts array.
+% (Recall that observed discrete nodes only have a single effective value.)
+% (A more general, but much slower, way is to call add_evidence_to_dmarginal.)
+% We assume the F nodes are never observed.
+
+obs_self = ~hidden_bitv(self);
+obs_Qps = (~isempty(Qps)) & (~any(hidden_bitv(Qps))); % we assume that all or none of the Q parents are observed
+
+if obs_self
+  self_val = evidence{self};
+  oldself_val = evidence{old_self};
+end
+
+if obs_Qps
+  Qps_val = subv2ind(Qpsz, cat(1, evidence{Qps}));
+  if Qps_val == 0
+    keyboard
+  end
+end
+
+if CPD.d==1 % no Qps from above
+  if ~CPD.F1toQ1 % no F from self
+    % marg(Q1(t-1), F2(t-1), Q1(t))                            
+    % F2(t-1) P(Q1(t)=j | Q1(t-1)=i)
+    % 1       delta(i,j)
+    % 2       transprob(i,j)
+    if obs_self
+      hor_counts = zeros(Qsz, Qsz);
+      hor_counts(oldself_val, self_val) = fmarginal.T(2);
+    else
+      marg = reshape(fmarginal.T, [Qsz 2 Qsz]);
+      hor_counts = squeeze(marg(:,2,:));
+    end
+  else
+    % marg(Q1(t-1), F2(t-1), F1(t-1), Q1(t))                            
+    % F2(t-1) F1(t-1)  P(Qd(t)=j| Qd(t-1)=i)
+    % ------------------------------------------------------
+    % 1        1         delta(i,j)
+    % 2        1         transprob(i,j)
+    % 1        2         impossible
+    % 2        2         startprob(j)
+    if obs_self
+      marg = myreshape(fmarginal.T, [1 2 2 1]);
+      hor_counts = zeros(Qsz, Qsz);
+      hor_counts(oldself_val, self_val) = marg(1,2,1,1);
+      ver_counts = zeros(Qsz, 1);
+      %ver_counts(self_val) = marg(1,2,2,1);
+      ver_counts(self_val) = marg(1,2,2,1) + marg(1,1,2,1);
+    else
+      marg = reshape(fmarginal.T, [Qsz 2 2 Qsz]);
+      hor_counts = squeeze(marg(:,2,1,:));
+      %ver_counts = squeeze(sum(marg(:,2,2,:),1)); % sum over i
+      ver_counts = squeeze(sum(marg(:,2,2,:),1)) + squeeze(sum(marg(:,1,2,:),1)); % sum i,b
+    end
+  end % F1toQ1
+else % d ~= 1
+  if CPD.d < CPD.D % general case
+    % marg(Qd(t-1), Fd+1(t-1), Fd(t-1), Qps(t), Qd(t))                            
+    % Fd+1(t-1) Fd(t-1)  P(Qd(t)=j| Qd(t-1)=i, Qps(t)=k)
+    % ------------------------------------------------------
+    % 1        1         delta(i,j)
+    % 2        1         transprob(i,k,j)
+    % 1        2         impossible
+    % 2        2         startprob(k,j)
+    if obs_Qps & obs_self
+      marg = myreshape(fmarginal.T, [1 2 2 1 1]);
+      k = 1;
+      hor_counts = zeros(Qsz, Qpsz, Qsz);
+      hor_counts(oldself_val, Qps_val, self_val) = marg(1, 2,1, k,1);
+      ver_counts = zeros(Qpsz, Qsz);
+      %ver_counts(Qps_val, self_val) = marg(1, 2,2, k,1);
+      ver_counts(Qps_val, self_val) = marg(1, 2,2, k,1) + marg(1, 1,2, k,1);
+    elseif obs_Qps & ~obs_self
+      marg = myreshape(fmarginal.T, [Qsz 2 2 1 Qsz]);
+      k = 1;
+      hor_counts = zeros(Qsz, Qpsz, Qsz);
+      hor_counts(:, Qps_val, :) = marg(:, 2,1, k,:);
+      ver_counts = zeros(Qpsz, Qsz);
+      %ver_counts(Qps_val, :) = sum(marg(:, 2,2, k,:), 1);
+      ver_counts(Qps_val, :) = sum(marg(:, 2,2, k,:), 1) + sum(marg(:, 1,2, k,:), 1);
+    elseif ~obs_Qps & obs_self
+      error('not yet implemented')
+    else % everything is hidden
+      marg = reshape(fmarginal.T, [Qsz 2 2 Qpsz Qsz]);
+      hor_counts = squeeze(marg(:,2,1,:,:)); % i,k,j
+      %ver_counts = squeeze(sum(marg(:,2,2,:,:),1)); % sum over i
+      ver_counts = squeeze(sum(marg(:,2,2,:,:),1)) + squeeze(sum(marg(:,1,2,:,:),1)); % sum over i,b
+    end
+  else % d == D, so no F from below
+    % marg(QD(t-1), FD(t-1), Qps(t), QD(t))                            
+    % FD(t-1) P(QD(t)=j | QD(t-1)=i, Qps(t)=k)
+    % 1      transprob(i,k,j) 
+    % 2      startprob(k,j)
+    if obs_Qps & obs_self
+      marg = myreshape(fmarginal.T, [1 2 1 1]);
+      k = 1;
+      hor_counts = zeros(Qsz, Qpsz, Qsz);
+      hor_counts(oldself_val, Qps_val, self_val) = marg(1, 1, k,1);
+      ver_counts = zeros(Qpsz, Qsz);
+      ver_counts(Qps_val, self_val) = marg(1, 2, k,1);
+    elseif obs_Qps & ~obs_self
+      marg = myreshape(fmarginal.T, [Qsz 2 1 Qsz]);
+      k = 1;
+      hor_counts = zeros(Qsz, Qpsz, Qsz);
+      hor_counts(:, Qps_val, :) = marg(:, 1, k,:);
+      ver_counts = zeros(Qpsz, Qsz);
+      ver_counts(Qps_val, :) = sum(marg(:, 2, k, :), 1);
+    elseif ~obs_Qps & obs_self
+      error('not yet implemented')
+    else % everything is hidden
+      marg = reshape(fmarginal.T, [Qsz 2 Qpsz Qsz]);
+      hor_counts = squeeze(marg(:,1,:,:));
+      ver_counts = squeeze(sum(marg(:,2,:,:),1)); % sum over i
+    end
+  end
+end
+
+CPD.sub_CPD_trans = update_ess_simple(CPD.sub_CPD_trans, hor_counts);
+
+if ~isempty(CPD.sub_CPD_start)
+  CPD.sub_CPD_start = update_ess_simple(CPD.sub_CPD_start, ver_counts);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/update_ess3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a hhmm Q node.
+% function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, idden_bitv)
+%
+% we assume if one of the Qps is observed, all of them are 
+% We assume the F nodes are already hidden 
+
+% Figure out the node numbers associated with each parent
+dom = fmarginal.domain;
+self = dom(CPD.self_ndx);
+old_self = dom(CPD.old_self_ndx);
+%Fself = dom(CPD.Fself_ndx);
+%Fbelow = dom(CPD.Fbelow_ndx);
+Qps = dom(CPD.Qps_ndx);
+
+Qsz = CPD.Qsz;
+Qpsz = CPD.Qpsz;
+
+
+% hor_counts(old_self, Qps, self),
+% fmarginal(old_self, Fbelow, Fself, Qps, self)
+% hor_counts(i,k,j) = fmarginal(i,2,1,k,j) % below has finished, self has not
+% ver_counts(i,k,j) = fmarginal(i,2,2,k,j) % below has finished, and so has self (reset)
+% Since any of i,j,k may be observed, we write
+% hor_counts(ndx{:}) = fmarginal(...)
+% where e.g., ndx = {1, ':', 2} if Qps is hidden but we observe old_self=1, self=2.
+
+% ndx{i,k,j}
+if hidden_bitv(old_self)
+  ndx{1} = ':';
+else
+  ndx{1} = evidence{old_self};
+end
+if hidden_bitv(Qps)
+  ndx{2} = ':';
+else
+  ndx{2} = subv2ind(Qpsz, cat(1, evidence{Qps}));
+end
+if hidden_bitv(self)
+  ndx{3} = ':';
+else
+  ndx{3} = evidence{self};
+end
+
+fmarg = add_ev_to_dmarginal(fmarginal, evidence, ns);
+% marg(Qold(t-1), Fbelow(t-1), Fself(t-1), Qps(t), Qself(t))                            
+hor_counts = zeros(Qsz, Qpsz, Qsz);
+ver_counts = zeros(Qpsz, Qsz);
+    
+if ~isempty(CPD.Fbelow_ndx)
+  if ~isempty(CPD.Fself_ndx) % general case
+    fmarg.T = myreshape(fmarg.T, [Qsz 2 2 Qpsz Qsz]);
+    marg_ndx = {ndx{1}, 2, 1, ndx{2}, ndx{3}};
+    hor_counts(ndx{:}) = fmarg.T(marg_ndx{:});
+    ver_counts(ndx{2:3}) = ... % sum over Fbelow and Qold=i
+	sum(fmarg.T({ndx{1}, 1, 2, ndx{2}, ndx{3}}),1) + ..
+	sum(fmarg.T({ndx{1}, 2, 2, ndx{2}, ndx{3}}),1);
+  else % no F from self, hence no startprob
+    fmarg.T = myreshape(fmarg.T, [Qsz 2 Qpsz Qsz]);
+    hor_counts(ndx{:}) = fmarg.T({ndx{1}, 2, ndx{2}, ndx{3}});
+  end
+else % no F signal from below
+  if ~isempty(CPD.Fself_ndx) % self F
+    fmarg.T = myreshape(fmarg.T, [Qsz 2 Qpsz Qsz]);
+    hor_counts(ndx{:}) = fmarg.T({ndx{1}, 1, ndx{2}, ndx{3}});
+    ver_counts(ndx{2:3}) = ... % sum over Qold=i
+	sum(fmarg.T({ndx{1}, 2, ndx{2}, ndx{3}}),1);
+  else % no F from self
+    error('An hhmmQ node without any F parents is just a tabular_CPD')
+  end
+end
+
+
+CPD.sub_CPD_trans = update_ess_simple(CPD.sub_CPD_trans, hor_counts);
+
+if ~isempty(CPD.sub_CPD_start)
+  CPD.sub_CPD_start = update_ess_simple(CPD.sub_CPD_start, ver_counts);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/Old/update_ess4.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,95 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a hhmm Q node.
+% function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, idden_bitv)
+%
+% we assume if one of the Qps is observed, all of them are 
+% We assume the F nodes are already hidden 
+
+% Figure out the node numbers associated with each parent
+dom = fmarginal.domain;
+self = dom(CPD.self_ndx);
+old_self = dom(CPD.old_self_ndx);
+%Fself = dom(CPD.Fself_ndx);
+%Fbelow = dom(CPD.Fbelow_ndx);
+Qps = dom(CPD.Qps_ndx);
+
+Qsz = CPD.Qsz;
+Qpsz = CPD.Qpsz;
+
+
+% hor_counts(old_self, Qps, self),
+% fmarginal(old_self, Fbelow, Fself, Qps, self)
+% hor_counts(i,k,j) = fmarginal(i,2,1,k,j) % below has finished, self has not
+% ver_counts(i,k,j) = fmarginal(i,2,2,k,j) % below has finished, and so has self (reset)
+% Since any of i,j,k may be observed, we write
+% hor_counts(i_counts_ndx, kndx, jndx) = fmarginal(i_fmarg_ndx...)
+% where i_fmarg_ndx = 1 and i_counts_ndx = i if old_self is observed to have value i,
+% i_fmarg_ndx = 1:Qsz and i_counts_ndx = 1:Qsz if old_self is hidden, etc.
+
+
+if hidden_bitv(old_self)
+  i_counts_ndx = 1:Qsz;
+  i_fmarg_ndx = 1:Qsz;
+  eff_oldQsz = Qsz;
+else
+  i_counts_ndx = evidence{old_self};
+  i_fmarg_ndx = 1;
+  eff_oldQsz = 1;
+end
+
+if all(hidden_bitv(Qps)) % we assume all are hidden or all are observed
+  k_counts_ndx = 1:Qpsz;
+  k_fmarg_ndx = 1:Qpsz;
+  eff_Qpsz = Qpsz;
+else
+  k_counts_ndx = subv2ind(Qpsz, cat(1, evidence{Qps}));
+  k_fmarg_ndx = 1;
+  eff_Qpsz = 1;
+end
+
+if hidden_bitv(self)
+  j_counts_ndx = 1:Qsz;
+  j_fmarg_ndx = 1:Qsz;
+  eff_Qsz = Qsz;
+else
+  j_counts_ndx = evidence{self};
+  j_fmarg_ndx = 1;
+  eff_Qsz = 1;
+end
+
+hor_counts = zeros(Qsz, Qpsz, Qsz);
+ver_counts = zeros(Qpsz, Qsz);
+    
+if ~isempty(CPD.Fbelow_ndx)
+  if ~isempty(CPD.Fself_ndx) % general case
+    fmarg.T = myreshape(fmarg.T, [eff_oldQsz 2 2 eff_Qpsz eff_Qsz]);
+    hor_counts(i_counts_ndx, k_counts_ndx, j_counts_ndx) = ...
+	fmarg.T(:, i_fmarg_ndx, 2, 1, k_fmarg_ndx, j_fmarg_ndx);
+    ver_counts(k_counts_ndx, j_counts_ndx) = ... % sum over Fbelow and Qold
+	sum(fmarg.T(:, 1, 2, k_fmarg_ndx, j_fmarg_ndx), 1) + ...
+	sum(fmarg.T(:, 2, 2, k_fmarg_ndx, j_fmarg_ndx), 1); 
+  else % no F from self, hence no startprob
+    fmarg.T = myreshape(fmarg.T, [eff_oldQsz 2 eff_Qpsz eff_Qsz]);
+    hor_counts(i_counts_ndx, k_counts_ndx, j_counts_ndx) = ...
+	fmarg.T(i_fmarg_ndx, 2, k_fmarg_ndx, j_fmarg_ndx);
+  end
+else % no F signal from below
+  if ~isempty(CPD.Fself_ndx) % self F
+    fmarg.T = myreshape(fmarg.T, [eff_oldQsz 2 eff_Qpsz eff_Qsz]);
+    hor_counts(i_counts_ndx, k_counts_ndx, j_counts_ndx) = ...
+	fmarg.T(i_fmarg_ndx, 1, k_fmarg_ndx, j_fmarg_ndx);
+    ver_counts(k_counts_ndx, j_counts_ndx) = ... % sum over Qold
+	sum(fmarg.T(:, 2, k_fmarg_ndx, j_fmarg_ndx), 1);
+  else % no F from self
+    error('An hhmmQ node without any F parents is just a tabular_CPD')
+  end
+end
+
+
+CPD.sub_CPD_trans = update_ess_simple(CPD.sub_CPD_trans, hor_counts);
+
+if ~isempty(CPD.sub_CPD_start)
+  CPD.sub_CPD_start = update_ess_simple(CPD.sub_CPD_start, ver_counts);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/hhmmQ_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,132 @@
+function CPD = hhmmQ_CPD(bnet, self, varargin)
+% HHMMQ_CPD Make the CPD for a Q node in a hierarchical HMM
+% CPD = hhmmQ_CPD(bnet, self, ...)
+%
+%  Fself(t-1)   Qps(t)
+%           \    |
+%            \   v
+%  Qold(t-1) ->  Q(t)
+%            /
+%           /
+%  Fbelow(t-1) 
+%
+% Let ss = slice size = num. nodes per slice.
+% This node is Q(t), and has mandatory parents Qold(t-1) (assumed to be numbered Q(t)-ss)
+% and optional parents Fbelow, Fself, Qps.
+% We require parents to be ordered (numbered) as follows:
+% Qold, Fbelow, Fself, Qps, Q.
+%
+% If Fself=2, we use the transition matrix, else we use the prior matrix.
+% If Fself node is omitted (eg. top level), we always use the transition matrix.
+% If Fbelow=2, we may change state, otherwise we must stay in the same state.
+% If Fbelow node is omitted (eg., bottom level), we may change state at every step.
+% If Qps (Q parents) are specified, all parameters are conditioned on their joint value.
+% We may choose any subset of nodes to condition on, as long as they as numbered lower than self.
+%
+% optional args [defaults]
+%
+% Fself - node number <= ss
+% Fbelow  - node number  <= ss
+% Qps - node numbers (all <= 2*ss) - uses 2TBN indexing
+% transprob - transprob(i,k,j) = prob transition from i to j given Qps = k ['leftright']
+% selfprob  - prob of a transition from i to i given Qps=k [0.1]
+% startprob - startprob(k,j) = prob start in j given Qps = k ['leftstart']
+% startargs - other args to be passed to the sub tabular_CPD for learning startprob
+% transargs - other args will be passed to the sub tabular_CPD for learning transprob
+% fullstartprob - 1 means startprob depends on Q(t-1) [0]
+% hhmmQ_CPD is a subclass of tabular_CPD so we inherit inference methods like CPD_to_pot, etc.
+%
+% We create isolated tabular_CPDs with no F parents to learn transprob/startprob
+% so we can avail of e.g., entropic or Dirichlet priors.
+% In the future, we will be able to represent the transprob using a tree_CPD.
+%
+% For details, see "Linear-time inference in hierarchical HMMs", Murphy and Paskin, NIPS'01.
+
+
+ss = bnet.nnodes_per_slice;
+ns = bnet.node_sizes(:);
+
+% set default arguments
+Fself = [];
+Fbelow = [];
+Qps = [];
+startprob = 'leftstart';
+transprob = 'leftright';
+startargs = {};
+transargs = {};
+selfprob = 0.1;
+fullstartprob = 0;
+
+for i=1:2:length(varargin)
+  switch varargin{i},
+   case 'Fself', Fself = varargin{i+1};
+   case 'Fbelow', Fbelow = varargin{i+1};
+   case 'Qps', Qps = varargin{i+1};
+   case 'transprob', transprob = varargin{i+1}; 
+   case 'selfprob',  selfprob = varargin{i+1}; 
+   case 'startprob', startprob = varargin{i+1}; 
+   case 'startargs', startargs = varargin{i+1}; 
+   case 'transargs', transargs = varargin{i+1}; 
+   case 'fullstartprob', fullstartprob = varargin{i+1}; 
+  end
+end
+
+CPD.fullstartprob = fullstartprob;
+
+ps = parents(bnet.dag, self);
+ndsz = ns(:)';
+CPD.dom_sz = [ndsz(ps) ns(self)];
+CPD.Fself_ndx = find_equiv_posns(Fself, ps);
+CPD.Fbelow_ndx = find_equiv_posns(Fbelow, ps);
+%CPD.Qps_ndx = find_equiv_posns(Qps+ss, ps);
+CPD.Qps_ndx = find_equiv_posns(Qps, ps);
+old_self = self-ss;
+CPD.old_self_ndx = find_equiv_posns(old_self, ps);
+
+Qps = ps(CPD.Qps_ndx);
+CPD.Qsz = ns(self);
+CPD.Qpsz = prod(ns(Qps));
+CPD.Qpsizes = ns(Qps);
+Qsz = CPD.Qsz;
+Qpsz = CPD.Qpsz;
+
+if strcmp(transprob, 'leftright')
+  LR = mk_leftright_transmat(Qsz, selfprob);
+  transprob = repmat(reshape(LR, [1 Qsz Qsz]), [Qpsz 1 1]); % transprob(k,i,j)
+  transprob = permute(transprob, [2 1 3]); % now transprob(i,k,j)
+end
+transargs{end+1} = 'CPT';
+transargs{end+1} = transprob;
+CPD.sub_CPD_trans = mk_isolated_tabular_CPD(ns([old_self Qps self]), transargs);
+S = struct(CPD.sub_CPD_trans);
+%CPD.transprob = myreshape(S.CPT, [Qsz Qpsz Qsz]);
+CPD.transprob = S.CPT;
+
+
+if strcmp(startprob, 'leftstart')
+  startprob = zeros(Qpsz, Qsz);
+  startprob(:,1) = 1;
+end
+if isempty(CPD.Fself_ndx)
+  CPD.sub_CPD_start = [];
+  CPD.startprob = [];
+else
+  startargs{end+1} = 'CPT';
+  startargs{end+1} = startprob;
+  if CPD.fullstartprob
+    CPD.sub_CPD_start = mk_isolated_tabular_CPD(ns([self Qps self]), startargs);
+    S = struct(CPD.sub_CPD_start);
+    %CPD.startprob = myreshape(S.CPT, [Qsz Qpsz Qsz]);
+    CPD.startprob = S.CPT;
+  else
+    CPD.sub_CPD_start = mk_isolated_tabular_CPD(ns([Qps self]), startargs);
+    S = struct(CPD.sub_CPD_start);
+    %CPD.startprob = myreshape(S.CPT, [CPD.Qpsizes Qsz]);
+    CPD.startprob = S.CPT;
+  end
+end
+
+CPD = class(CPD, 'hhmmQ_CPD', tabular_CPD(bnet, self));
+
+CPD = update_CPT(CPD);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/log_prior.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function L = log_prior(CPD)
+% LOG_PRIOR Return log P(theta) for a hhmm CPD 
+% L = log_prior(CPD)
+
+L = log_prior(CPD.sub_CPD_trans);
+if ~isempty(CPD.sub_CPD_start)
+  L = L + log_prior(CPD.sub_CPD_start);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/maximize_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function CPD = maximize_params(CPD, temp)
+% MAXIMIZE_PARAMS Set the params of a hhmmQ node to their ML/MAP values.
+% CPD = maximize_params(CPD, temperature)
+
+Qsz = CPD.Qsz;
+Qpsz = CPD.Qpsz;
+
+if ~isempty(CPD.sub_CPD_start)
+  CPD.sub_CPD_start = maximize_params(CPD.sub_CPD_start, temp);
+  S = struct(CPD.sub_CPD_start);
+  CPD.startprob = myreshape(S.CPT, [Qpsz Qsz]);
+  %CPD.startprob = S.CPT;
+end
+
+if 1
+  % If we are in a state that can only go the end state,
+  % we will never see a transition to another (non-end) state,
+  % so counts(i,k,j)=0 (and termprob(k,i)=1).
+  % We set counts(i,k,i)=1 in this case.
+  % This will cause remove_hhmm_end_state to return a
+  % stochastic matrix, but otherwise has no effect on EM.
+  counts = get_field(CPD.sub_CPD_trans, 'counts');
+  counts = reshape(counts, [Qsz Qpsz Qsz]);
+  for k=1:Qpsz
+    for i=1:Qsz
+      if sum(counts(i,k,:))==0 % never witnessed a transition out of i
+	counts(i,k,i)=1; % add self loop 
+	%fprintf('CPDQ d=%d i=%d k=%d\n', CPD.d, i, k);
+      end
+    end
+  end
+  CPD.sub_CPD_trans = set_fields(CPD.sub_CPD_trans, 'counts', counts(:)); 
+end
+ 
+CPD.sub_CPD_trans = maximize_params(CPD.sub_CPD_trans, temp);
+S = struct(CPD.sub_CPD_trans);
+%CPD.transprob = S.CPT;
+CPD.transprob = myreshape(S.CPT, [Qsz Qpsz Qsz]);
+
+CPD = update_CPT(CPD);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/reset_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function CPD = reset_ess(CPD)
+% RESET_ESS Reset the Expected Sufficient Statistics of a hhmm Q node.
+% CPD = reset_ess(CPD)
+
+if ~isempty(CPD.sub_CPD_start)
+  CPD.sub_CPD_start = reset_ess(CPD.sub_CPD_start);
+end
+CPD.sub_CPD_trans = reset_ess(CPD.sub_CPD_trans);   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/update_CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,70 @@
+function CPD = update_CPT(CPD)
+% Compute the big CPT for an HHMM Q node (including F parents) given internal transprob and startprob
+% function CPD = update_CPT(CPD)
+
+Qsz = CPD.Qsz;
+Qpsz = CPD.Qpsz;
+
+if ~isempty(CPD.Fbelow_ndx)
+  if ~isempty(CPD.Fself_ndx) % general case
+    % Fb(t-1) Fself(t-1)  P(Q(t)=j| Q(t-1)=i, Qps(t)=k)
+    % ------------------------------------------------------
+    % 1        1         delta(i,j)
+    % 2        1         transprob(i,k,j)
+    % 1        2         impossible
+    % 2        2         startprob(k,j)
+    CPT = zeros(Qsz, 2, 2, Qpsz, Qsz);
+    I = repmat(eye(Qsz), [1 1 Qpsz]); % i,j,k
+    I = permute(I, [1 3 2]); % i,k,j
+    CPT(:, 1, 1, :, :) = I;
+    CPT(:, 2, 1, :, :) = CPD.transprob;
+    CPT(:, 1, 2, :, :) = I;
+    CPT(:, 2, 2, :, :) = repmat(reshape(CPD.startprob, [1 Qpsz Qsz]), ...
+				[Qsz 1 1]); % replicate  over i 
+  else % no F from self, hence no startprob
+    % Fb(t-1) P(Q(t)=j| Q(t-1)=i, Qps(t)=k)
+    % ------------------------------------------------------
+    % 1       delta(i,j)
+    % 2       transprob(i,k,j)
+    
+    nps = length(CPD.dom_sz)-1; % num parents
+    CPT = 0*myones(CPD.dom_sz);
+    %CPT = zeros(Qsz, 2, Qpsz, Qsz); % assumes CPT(Q(t-1), F(t-1), Qps, Q(t))
+    % but a member of Qps may preceed Q(t-1) or F(t-1) in the ordering
+
+    for k=1:CPD.Qpsz
+      Qps_vals = ind2subv(CPD.Qpsizes, k);
+      ndx = mk_multi_index(nps+1, [CPD.Fbelow_ndx CPD.Qps_ndx], [1 Qps_vals]);
+      CPT(ndx{:}) = eye(Qsz); % CPT(:,2,k,:) or CPT(:,k,2,:) etc
+    end
+    ndx = mk_multi_index(nps+1, CPD.Fbelow_ndx, 2);
+    CPT(ndx{:}) = CPD.transprob; % we assume transprob is in topo order
+  end
+else % no F signal from below
+  if ~isempty(CPD.Fself_ndx)
+    % Q(t-1), Fself(t-1), Qps, Q(t)
+    
+    % Fself(t-1)  P(Q(t-1)=i, Qps(t)=k -> Q(t)=j)
+    % ------------------------------------------------------
+    % 1         transprob(i,k,j)
+    % 2         startprob(k,j)
+    
+    nps = length(CPD.dom_sz)-1; % num parents
+    CPT = 0*myones(CPD.dom_sz);
+    ndx = mk_multi_index(nps+1, CPD.Fself_ndx, 1);
+    CPT(ndx{:}) = CPD.transprob;
+    if CPD.fullstartprob
+      ndx = mk_multi_index(nps+1, CPD.Fself_ndx, 2);
+      CPT(ndx{:}) = CPD.startprob;
+    else
+      for i=1:CPD.Qsz
+	ndx = mk_multi_index(nps+1, [CPD.Fself_ndx CPD.old_self_ndx], [2 i]);
+	CPT(ndx{:}) = CPD.startprob;
+      end
+    end
+  else % no F from self
+    error('An hhmmQ node without any F parents is just a tabular_CPD')
+  end
+end
+
+CPD = set_fields(CPD, 'CPT', CPT);          
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@hhmmQ_CPD/update_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a hhmm Q node.
+% function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, idden_bitv)
+%
+% we assume if one of the Qps is observed, all of them are 
+% We assume the F nodes are already hidden 
+
+% Figure out the node numbers associated with each parent
+dom = fmarginal.domain;
+self = dom(end);
+old_self = dom(CPD.old_self_ndx);
+%Fself = dom(CPD.Fself_ndx);
+%Fbelow = dom(CPD.Fbelow_ndx);
+Qps = dom(CPD.Qps_ndx);
+
+Qsz = CPD.Qsz;
+Qpsz = CPD.Qpsz;
+
+
+% hor_counts(old_self, Qps, self),
+% fmarginal(old_self, Fbelow, Fself, Qps, self)
+% hor_counts(i,k,j) = fmarginal(i,2,1,k,j) % below has finished, self has not
+% ver_counts(i,k,j) = fmarginal(i,2,2,k,j) % below has finished, and so has self (reset)
+% Since any of i,j,k may be observed, we write
+% hor_counts(i_counts_ndx, kndx, jndx) = fmarginal(i_fmarg_ndx...)
+% where i_fmarg_ndx = 1 and i_counts_ndx = i if old_self is observed to have value i,
+% i_fmarg_ndx = 1:Qsz and i_counts_ndx = 1:Qsz if old_self is hidden, etc.
+
+
+if hidden_bitv(old_self)
+  i_counts_ndx = 1:Qsz;
+  eff_oldQsz = Qsz;
+else
+  i_counts_ndx = evidence{old_self};
+  eff_oldQsz = 1;
+end
+
+if all(hidden_bitv(Qps)) % we assume all are hidden or all are observed
+  k_counts_ndx = 1:Qpsz;
+  eff_Qpsz = Qpsz;
+else
+  k_counts_ndx = subv2ind(Qpsz, cat(1, evidence{Qps}));
+  eff_Qpsz = 1;
+end
+
+if hidden_bitv(self)
+  j_counts_ndx = 1:Qsz;
+  eff_Qsz = Qsz;
+else
+  j_counts_ndx = evidence{self};
+  eff_Qsz = 1;
+end
+
+hor_counts = zeros(Qsz, Qpsz, Qsz);
+ver_counts = zeros(Qpsz, Qsz);
+    
+if ~isempty(CPD.Fbelow_ndx)
+  if ~isempty(CPD.Fself_ndx) % general case
+    fmarg = myreshape(fmarginal.T, [eff_oldQsz 2 2 eff_Qpsz eff_Qsz]);
+    hor_counts(i_counts_ndx, k_counts_ndx, j_counts_ndx) =  fmarg(:, 2, 1, :, :);
+    ver_counts(k_counts_ndx, j_counts_ndx) = ... % sum over Fbelow and Qold
+	sumv(fmarg(:, :,  2, :, :), [1 2]); % require Fself=2
+  else % no F from self, hence no startprob
+    fmarg = myreshape(fmarginal.T, [eff_oldQsz 2 eff_Qpsz eff_Qsz]);
+    hor_counts(i_counts_ndx, k_counts_ndx, j_counts_ndx) = ...
+	fmarg(:, 2, :, :); % require Fbelow = 2
+  end
+else % no F signal from below
+  if ~isempty(CPD.Fself_ndx) % self F
+    fmarg = myreshape(fmarginal.T, [eff_oldQsz 2 eff_Qpsz eff_Qsz]);
+    hor_counts(i_counts_ndx, k_counts_ndx, j_counts_ndx) =  fmarg(:, 1, :, :);
+    ver_counts(k_counts_ndx, j_counts_ndx) = ... % sum over Qold
+	squeeze(sum(fmarg(:, 2, :, :), 1)); % Fself=2
+  else % no F from self
+    error('An hhmmQ node without any F parents is just a tabular_CPD')
+  end
+end
+
+
+CPD.sub_CPD_trans = update_ess_simple(CPD.sub_CPD_trans, hor_counts);
+
+if ~isempty(CPD.sub_CPD_start)
+  CPD.sub_CPD_start = update_ess_simple(CPD.sub_CPD_start, ver_counts);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/convert_to_table.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/maximize_params.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mlp_CPD.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/reset_ess.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/update_ess.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@mlp_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/convert_to_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+function T = convert_to_table(CPD, domain, evidence)
+% CONVERT_TO_TABLE Convert a mlp CPD to a table, incorporating any evidence 
+% T = convert_to_table(CPD, domain, evidence)
+
+self = domain(end);                    
+ps = domain(1:end-1);                               % self' parents                                       
+%cps = myintersect(ps, cnodes);                      % self' continous parents      
+cnodes     = domain(CPD.cpndx);
+cps        = myintersect(ps, cnodes);
+odom = domain(~isemptycell(evidence(domain)));      % obs nodes in the net
+assert(myismember(cps, odom));                      % !ALL the CTS parents must be observed!
+ns(cps)=1;
+dps = mysetdiff(ps, cps);                           % self' discrete parents                                                    
+dobs = myintersect(dps, odom);                      % discrete obs parents
+
+% Extract the params compatible with the observations (if any) on the discrete parents (if any)
+
+if ~isempty(dobs),
+    dvals = cat(1, evidence{dobs});             
+    ns_eff= CPD.sizes;                               % effective node sizes              
+    ens=ns_eff;
+    ens(dobs) = 1;                              
+    S=prod(ens(dps));
+    subs = ind2subv(ens(dps), 1:S);
+    mask = find_equiv_posns(dobs, dps);        
+    for i=1:length(mask),
+        subs(:,mask(i)) = dvals(i);
+    end     
+    support = subv2ind(ns_eff(dps), subs)';
+else 
+    ns_eff= CPD.sizes;
+    support=[1:prod(ns_eff(dps))];
+end
+
+W1=[]; b1=[]; W2=[]; b2=[];
+
+W1 = CPD.W1(:,:,support);
+b1= CPD.b1(support,:);
+W2 = CPD.W2(:,:,support);
+b2= CPD.b2(support,:);
+ns(odom) = 1;
+dpsize = prod(ns(dps));                             % overall size of the self' discrete parents  
+
+x = cat(1, evidence{cps});    
+ndata=size(x,2);
+
+if ~isempty(evidence{self})                         %
+    app=struct(CPD);                                %
+    ns(self)=app.mlp{1}.nout;                       % pump up self to the original dimension if observed
+    clear app;                                      %
+end                                                 %
+
+T =zeros(dpsize, ns(self));                         %
+for i=1:dpsize                                      %                 
+    W1app = W1(:,:,i);                              % 
+    b1app = b1(i,:);                                % 
+    W2app = W2(:,:,i);                              % 
+    b2app = b2(i,:);                                % for each of the dpsize combinations of self'parents values 
+    z = tanh(x(:)'*W1app + ones(ndata, 1)*b1app);   % we tabulate the corrisponding glm model
+    a = z*W2app + ones(ndata, 1)*b2app;             % (element of the cell array CPD.glim)
+    appoggio = normalise(exp(a));                   %
+    T(i,:)=appoggio;                                %
+    W1app=[]; W2app=[]; b1app=[]; b2app=[];         %
+    z=[]; a=[]; appoggio=[];                        %
+end                                                 %                
+
+if ~isempty(evidence{self})
+    appoggio=[];                            %
+    appoggio=zeros(1,ns(self));             %
+    r = evidence{self};                     %...if self is observed => in output there's only the probability of the 'true' class
+    for i=1:dpsize                          % 
+          appoggio(i)=T(i,r);               % 
+    end
+    T=zeros(dpsize,1);
+    for i=1:dpsize
+        T(i,1)=appoggio(i);                        
+    end
+    clear appoggio;
+    ns(self) = 1;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/maximize_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function CPD = maximize_params(CPD, temp)
+% MAXIMIZE_PARAMS Find ML params of an MLP using Scaled Conjugated Gradient (SCG)
+% CPD = maximize_params(CPD, temperature)
+% temperature parameter is ignored
+
+if ~adjustable_CPD(CPD), return; end
+options = foptions;
+
+% options(1) >= 0 means print an annoying message when the max. num. iter. is reached
+if CPD.verbose
+  options(1) = 1;
+else
+  options(1) = -1;
+end
+%options(1) = CPD.verbose;
+
+options(2) = CPD.wthresh;
+options(3) = CPD.llthresh;
+options(14) = CPD.max_iter;
+
+dpsz=length(CPD.mlp);
+
+for i=1:dpsz
+    mask=[];
+    mask=find(CPD.eso_weights(:,:,i)>0);    % for adapting the parameters we use only positive weighted example
+    if  ~isempty(mask),
+        CPD.mlp{i} = netopt_weighted(CPD.mlp{i}, options, CPD.parent_vals(mask',:), CPD.self_vals(mask',:,i), CPD.eso_weights(mask',:,i), 'scg');
+        
+        CPD.W1(:,:,i)=CPD.mlp{i}.w1;        % update the parameters matrix
+        CPD.b1(i,:)=CPD.mlp{i}.b1;          %
+        CPD.W2(:,:,i)=CPD.mlp{i}.w2;        % update the parameters matrix
+        CPD.b2(i,:)=CPD.mlp{i}.b2;          %
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/mlp_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,139 @@
+function CPD = mlp_CPD(bnet, self, nhidden, w1, b1, w2, b2, clamped, max_iter, verbose, wthresh,  llthresh)
+% MLP_CPD Make a CPD from a Multi Layer Perceptron (i.e., feedforward neural network)
+%
+% We use a different MLP for each discrete parent combination (if there are any discrete parents).
+% We currently assume this node (the child) is discrete.
+%
+% CPD = mlp_CPD(bnet, self, nhidden)
+% will create a CPD with random parameters, where self is the number of this node and nhidden the number of the hidden nodes.
+% The params are drawn from N(0, s*I), where s = 1/sqrt(n+1), n = length(X).
+%
+% CPD = mlp_CPD(bnet, self, nhidden, w1, b1, w2, b2) allows you to specify the params, where
+%  w1 = first-layer weight matrix
+%  b1 = first-layer bias vector
+%  w2 = second-layer weight matrix
+%  b2 = second-layer bias vector
+% These are assumed to be the same for each discrete parent combination.
+% If any of these are [], random values will be created.
+%
+% CPD = mlp_CPD(bnet, self, nhidden, w1, b1, w2, b2, clamped) allows you to prevent the params from being
+% updated during learning (if clamped = 1). Default: clamped = 0.
+%
+% CPD = mlp_CPD(bnet, self, nhidden, w1, b1, w2, b2, clamped, max_iter, verbose, wthresh,  llthresh)
+% alllows you to specify params that control the M step:
+%  max_iter - the maximum number of steps to take (default: 10)
+%  verbose - controls whether to print (default: 0 means silent).
+%  wthresh - a measure of the precision required for the value of
+%     the weights W at the solution. Default: 1e-2.
+%  llthresh - a measure of the precision required of the objective
+%     function (log-likelihood) at the solution.  Both this and the previous condition must
+%     be satisfied for termination. Default: 1e-2.
+%
+% For learning, we use a weighted version of scaled conjugated gradient in the M step.
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  CPD = class(CPD, 'mlp_CPD', discrete_CPD(0,[]));
+  return;
+elseif isa(bnet, 'mlp_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+
+assert(myismember(self, bnet.dnodes));
+ns = bnet.node_sizes;
+
+ps = parents(bnet.dag, self);
+dnodes = mysetdiff(1:length(bnet.dag), bnet.cnodes);
+dps = myintersect(ps, dnodes);
+cps = myintersect(ps, bnet.cnodes);
+dpsz = prod(ns(dps));
+cpsz = sum(ns(cps));
+self_size = ns(self);
+
+% discrete/cts parent index - which ones of my parents are discrete/cts?
+CPD.dpndx = find_equiv_posns(dps, ps); 
+CPD.cpndx = find_equiv_posns(cps, ps);
+
+CPD.mlp = cell(1,dpsz);
+for i=1:dpsz
+    CPD.mlp{i} = mlp(cpsz, nhidden, self_size, 'softmax');
+    if nargin >=4 & ~isempty(w1)
+        CPD.mlp{i}.w1 = w1;
+    end
+    if nargin >=5 & ~isempty(b1)
+        CPD.mlp{i}.b1 = b1; 
+    end
+    if nargin >=6 & ~isempty(w2)
+        CPD.mlp{i}.w2 = w2; 
+    end
+    if nargin >=7 & ~isempty(b2)
+        CPD.mlp{i}.b2 = b2; 
+    end
+    W1app(:,:,i)=CPD.mlp{i}.w1;
+    W2app(:,:,i)=CPD.mlp{i}.w2;
+    b1app(i,:)=CPD.mlp{i}.b1;
+    b2app(i,:)=CPD.mlp{i}.b2;
+end
+if nargin < 8, clamped = 0; end
+if nargin < 9, max_iter = 10; end
+if nargin < 10, verbose = 0; end
+if nargin < 11, wthresh = 1e-2; end
+if nargin < 12, llthresh = 1e-2; end
+
+CPD.self = self;
+CPD.max_iter = max_iter;
+CPD.verbose = verbose;
+CPD.wthresh = wthresh;
+CPD.llthresh = llthresh;
+
+% sufficient statistics 
+% Since MLP is not in the exponential family, we must store all the raw data.
+%
+CPD.W1=W1app;                     % Extract all the parameters of the node for handling discrete obs parents
+CPD.W2=W2app;                     %
+nparaW=[size(W1app) size(W2app)]; %
+CPD.b1=b1app;                     %
+CPD.b2=b2app;                     %
+nparab=[size(b1app) size(b2app)]; %
+
+CPD.sizes=bnet.node_sizes(:);   % used in CPD_to_table to pump up the node sizes
+
+CPD.parent_vals = [];        % X(l,:) = value of cts parents in l'th example
+
+CPD.eso_weights=[];          % weights used by the SCG algorithm 
+
+CPD.self_vals = [];          % Y(l,:) = value of self in l'th example
+
+% For BIC
+CPD.nsamples = 0;   
+CPD.nparams=prod(nparaW)+prod(nparab);
+CPD = class(CPD, 'mlp_CPD', discrete_CPD(clamped, ns([ps self])));
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.mlp = {};
+CPD.self = [];
+CPD.max_iter = [];
+CPD.verbose = [];
+CPD.wthresh = [];
+CPD.llthresh = [];
+CPD.approx_hess = [];
+CPD.W1 = [];
+CPD.W2 = [];
+CPD.b1 = [];
+CPD.b2 = [];
+CPD.sizes = [];
+CPD.parent_vals = [];
+CPD.eso_weights=[];
+CPD.self_vals = [];
+CPD.nsamples = [];
+CPD.nparams = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/reset_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function CPD = reset_ess(CPD)
+% RESET_ESS Reset the Expected Sufficient Statistics for a CPD (mlp)
+% CPD = reset_ess(CPD)
+
+CPD.W1 = [];
+CPD.W2 = [];
+CPD.b1 = [];
+CPD.b2 = [];
+CPD.parent_vals = [];
+CPD.eso_weights=[];
+CPD.self_vals = [];
+CPD.nsamples = 0;  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@mlp_CPD/update_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,131 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a CPD (MLP)
+% CPD = update_ess(CPD, family_marginal, evidence, node_sizes, cnodes, hidden_bitv)
+%
+% fmarginal = overall posterior distribution of self and its parents
+% fmarginal(i1,i2...,ik,s)=prob(Pa1=i1,...,Pak=ik, self=s| X)
+% 
+% => 1) prob(self|Pa1,...,Pak)=fmarginal/prob(Pa1,...,Pak) with prob(Pa1,...,Pak)=sum{s,fmarginal}
+%       [self estimation -> CPD.self_vals]
+% 	  2) prob(Pa1,...,Pak) [SCG weights -> CPD.eso_weights]
+%
+% Hidden_bitv is ignored
+
+% Written by Pierpaolo Brutti
+
+if ~adjustable_CPD(CPD), return; end
+
+dom = fmarginal.domain;                              
+cdom = myintersect(dom, cnodes);                     
+assert(~any(isemptycell(evidence(cdom))));           
+ns(cdom)=1;
+
+self = dom(end);                                  
+ps=dom(1:end-1);                                     
+dpdom=mysetdiff(ps,cdom);                            
+
+dnodes = mysetdiff(1:length(ns), cnodes);            
+
+ddom = myintersect(ps, dnodes);                      %
+if isempty(evidence{self}),                          % if self is hidden in what follow we must 
+    ddom = myintersect(dom, dnodes);                 % consider its dimension
+end                                                  % 
+
+odom = dom(~isemptycell(evidence(dom)));    
+hdom = dom(isemptycell(evidence(dom)));              % hidden parents in domain
+ 
+dobs = myintersect(ddom, odom);             
+dvals = cat(1, evidence{dobs});             
+ens = ns;                                            % effective node sizes              
+ens(dobs) = 1;                              
+                                            
+dpsz=prod(ns(dpdom));
+S=prod(ens(ddom));
+subs = ind2subv(ens(ddom), 1:S);
+mask = find_equiv_posns(dobs, ddom);
+for i=1:length(mask),
+    subs(:,mask(i)) = dvals(i);
+end
+supportedQs = subv2ind(ns(ddom), subs);
+
+Qarity = prod(ns(ddom));
+if isempty(ddom),                      
+  Qarity = 1;                         
+end                                
+fullm.T = zeros(Qarity, 1);
+fullm.T(supportedQs) = fmarginal.T(:);
+
+% For dynamic (recurrent) net-------------------------------------------------------------
+% ----------------------------------------------------------------------------------------
+high=size(evidence,1);                                  % slice height
+ss_ns=ns(1:high);                                       % single slice nodes sizes
+pos=self;                                               %
+slice_num=0;                                            %
+while pos>high,                                         % 
+    slice_num=slice_num+1;                              % find active slice
+    pos=pos-high;                                       % pos=self posistion into a single slice
+end                                                     %
+
+last_dim=pos-1;                                         % 
+if isempty(evidence{self}),                             % 
+    last_dim=pos;                                       %
+end                                                     % last_dim=last reshaping dimension      
+reg=dom-slice_num*high;
+dex=myintersect(reg(find(reg>=0)), [1:last_dim]);       %           
+rs_dim=ss_ns(dex);                                      % reshaping dimensions
+
+if slice_num>0,
+    act_slice=[]; past_ancest=[];                       %
+    act_slice=slice_num*high+[1:high];                  % recover the active slice nodes
+    % past_ancest=mysetdiff(ddom, act_slice);
+    past_ancest=mysetdiff(ps, act_slice);               % recover ancestors contained into past slices
+    app=ns(past_ancest);
+    rs_dim=[app(:)' rs_dim(:)'];                        %
+end                                                     %
+if length(rs_dim)==1, rs_dim=[1 rs_dim]; end            %
+if size(rs_dim,1)~=1, rs_dim=rs_dim';    end            %
+
+fullm.T=reshape(fullm.T, rs_dim);                       % reshaping the marginal
+
+% ----------------------------------------------------------------------------------------
+% ----------------------------------------------------------------------------------------
+
+% X = cts parent, R = discrete self
+
+% 1) observations vector -> CPD.parents_vals -------------------------------------------------
+x = cat(1, evidence{cdom});
+
+% 2) weights vector -> CPD.eso_weights -------------------------------------------------------
+if isempty(evidence{self}) % R is hidden
+    sum_over=length(rs_dim);
+    app=sum(fullm.T, sum_over);    
+    pesi=reshape(app,[dpsz,1]);
+    clear app;
+else
+    pesi=reshape(fullm.T,[dpsz,1]);
+end
+
+assert(approxeq(sum(pesi),1));
+
+% 3) estimate (if R is hidden) or recover (if R is obs) self'value----------------------------
+if isempty(evidence{self})              % R is hidden    
+    app=mk_stochastic(fullm.T);         % P(self|Pa1,...,Pak)=fmarginal/prob(Pa1,...,Pak)
+    app=reshape(app,[dpsz ns(self)]);   % matrix size: prod{j,ns(Paj)} x ns(self)      
+    r=app;
+    clear app;
+else
+    r = zeros(dpsz,ns(self));
+    for i=1:dpsz
+        if pesi(i)~=0, r(i,evidence{self}) = 1; end
+    end
+end
+for i=1:dpsz
+    if pesi(i) ~=0, assert(approxeq(sum(r(i,:)),1)); end
+end
+
+CPD.nsamples = CPD.nsamples + 1;            
+CPD.parent_vals(CPD.nsamples,:) = x(:)';
+for i=1:dpsz
+    CPD.eso_weights(CPD.nsamples,:,i)=pesi(i);
+    CPD.self_vals(CPD.nsamples,:,i) = r(i,:); 
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CPD_to_CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function CPT = CPD_to_CPT(CPD)
+% CPD_TO_CPT Convert the discrete CPD to tabular form (noisyor)
+% CPT = CPD_to_CPT(CPD)
+%
+% CPT(U1,...,Un, X) = Pr(X|U1,...,Un) where the Us are the parents (excluding leak).
+
+if ~isempty(CPD.CPT)
+  CPT = CPD.CPT; % remember to flush cache if params change (e.g., during learning)
+  return;
+end
+
+q = [CPD.leak_inhibit CPD.inhibit(:)'];
+% q(i) is the prob. that the i'th parent will be inhibited (flipped from 1 to 0).
+% q(1) is the leak inhibition probability, and length(q) = n + 1.
+
+if length(q)==1
+  CPT = [q  1-q];
+  return;
+end
+
+n = length(q);
+Bn = ind2subv(2*ones(1,n), 1:(2^n))-1;  % all n bit vectors, with the left most column toggling fastest (LSB)
+CPT = zeros(2^n, 2);
+% Pr(X=0 | U_1 .. U_n) = prod_{i: U_i = on} q_i =  prod_i q_i ^ U_i = exp(u' * log(q_i))
+% This method is problematic when q contains zeros
+
+Q = repmat(q(:)', 2^n, 1);
+Q(logical(~Bn)) = 1;
+CPT(:,1) = prod(Q,2);
+CPT(:,2) = 1-CPT(:,1);
+
+CPT = reshape(CPT(2:2:end), 2*ones(1,n)); % skip cases in which the leak is off       
+
+CPD.CPT = CPT;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CPD_to_lambda_msg.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function lam_msg = CPD_to_lambda_msg(CPD, msg_type, n, ps, msg, p, evidence)
+% CPD_TO_LAMBDA_MSG Compute lambda message (noisyor)
+% lam_msg = CPD_to_lambda_msg(CPD, msg_type, n, ps, msg, p)
+% Pearl p190 top eqn
+
+switch msg_type
+  case 'd', 
+   l0 = msg{n}.lambda(1);
+   l1 = msg{n}.lambda(2);
+   Pi = sum_prod_CPD_and_pi_msgs(CPD, n, ps, msg, p);
+   i = find(p==ps); % p is n's i'th parent
+   q = CPD.inhibit(i);
+   lam_msg = zeros(2,1);
+   for u=0:1
+     lam_msg(u+1) = l1 - (q^u)*(l1 - l0)*Pi;
+   end       
+ case 'g',
+  error('noisyor_CPD can''t create Gaussian msgs')
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CPD_to_pi.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function pi = CPD_to_pi(CPD, msg_type, n, ps, msg, evidence)
+% CPD_TO_PI Compute pi vector (noisyor)
+% pi = CPD_to_pi(CPD, msg_type, n, ps, msg)
+% Pearl p188 eqn 4.57
+  
+switch msg_type
+ case 'd',
+   pi = sum_prod_CPD_and_pi_msgs(CPD, n, ps, msg);
+   pi = [pi 1-pi]';
+ case 'g', 
+  error('can''t convert noisy-or CPD to Gaussian pi')
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/CPD_to_CPT.m/1.1.1.1/Mon Aug  2 22:23:32 2004//
+/CPD_to_lambda_msg.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/CPD_to_pi.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/noisyor_CPD.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@noisyor_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/noisyor_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+function CPD = noisyor_CPD(bnet, self, leak_inhibit, inhibit)
+% NOISYOR_CPD Make a noisy-or CPD
+% CPD = NOISYOR_CPD(BNET, NODE_NUM, LEAK_INHIBIT, INHIBIT)
+%
+% A noisy-or node turns on if any of its parents are on, provided they are not inhibited.
+% The prob. that the i'th parent gets inhibited (flipped from 1 to 0) is inhibit(i).
+% The prob that the leak node (a dummy parent that is always on) gets inhibit is leak_inhibit.
+% These params default to random values if omitted.
+%
+% Example: suppose C has parents A and B, and the
+% link of A->C fails with prob pA and the link B->C fails with pB.
+% Then the noisy-OR gate defines the following distribution
+%
+%  A  B  P(C=0)
+%  0  0  1.0
+%  1  0  pA
+%  0  1  pB
+%  1  1  pA * PB
+%
+% Currently, learning is not supported for noisy-or nodes
+% (since the M step is somewhat complicated).
+%
+% For simple generalizations of the noisy-OR model, see e.g.,
+% - Srinivas, "A generalization of the noisy-OR model", UAI 93
+% - Meek and Heckerman, "Learning Causal interaction models", UAI 97.
+  
+
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  CPD = class(CPD, 'noisyor_CPD', discrete_CPD(1, []));
+  return;
+elseif isa(bnet, 'noisyor_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+
+
+ps = parents(bnet.dag, self);
+fam = [ps self];
+ns = bnet.node_sizes;
+assert(all(ns(fam)==2));
+assert(isempty(myintersect(fam, bnet.cnodes)));
+
+if nargin < 3, leak_inhibit = rand(1, 1); end
+if nargin < 4, inhibit = rand(1, length(ps)); end
+
+CPD.self = self;
+CPD.inhibit = inhibit;
+CPD.leak_inhibit = leak_inhibit;
+
+
+% For BIC
+CPD.nparams = 0;
+CPD.nsamples = 0;
+
+CPD.CPT = []; % cached copy, to speed up CPD_to_CPT
+
+clamped = 1;
+CPD = class(CPD, 'noisyor_CPD', discrete_CPD(clamped, ns([ps self])));
+
+
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.self = [];
+CPD.inhibit = [];
+CPD.leak_inhibit = [];
+CPD.nparams = [];
+CPD.nsamples = [];
+CPD.CPT = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/sum_prod_CPD_and_pi_msgs.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@noisyor_CPD/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@noisyor_CPD/private/sum_prod_CPD_and_pi_msgs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function pi = sum_prod_CPD_and_pi_msgs(CPD, n, ps, msg, except)
+% SUM_PROD_CPD_AND_PI_MSGS Compute pi = sum_{u\p} P(n|u) prod_{ui in ps\p} pi_msg(ui->n)
+% pi = sum_prod_CPD_and_pi_msgs(CPD, n, ps, msg, p)
+%
+% pi  = prod_i (qi pi_msg(ui->n) + 1 - pi_msg(ui->n)) = prod_i (1 - ci pi_msg(ui->n))
+% is the product of the endorsement withheld (Pearl p188 eqn 4.56)
+% We skip p from this product, if specified.
+
+if nargin < 5, except = -1; end
+pi = 1;
+for i=1:length(ps)
+  p = ps(i);
+  if p ~= except
+    pi_from_parent = msg{n}.pi_from_parent{i};
+    q = CPD.inhibit(i);
+    c = 1-q;
+    pi = pi * (1 - c*pi_from_parent(2));
+  end
+end
+% The pi msg that a leak node sends to its child is [0 1]
+% since its own pi is [0 1] and its lambda to self is [0 1].
+q = CPD.leak_inhibit;
+% 1 - c*pi_from_parent = 1-c*1 = q
+pi = pi * q;
+                 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/CPD_to_pi.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function pi = CPD_to_pi(CPD, msg_type, n, ps, msg, evidence)
+% CPD_TO_PI Compute the pi vector (root)
+% function pi = CPD_to_pi(CPD, msg_type, n, ps, msg, evidence)
+
+self_ev = evidence{n};
+switch msg_type
+ case 'd',
+  error('root_CPD can''t create discrete msgs')
+ case 'g',
+  pi.mu = self_ev;
+  pi.Sigma = zeros(size(self_ev));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/CPD_to_pi.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/convert_to_pot.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/log_marg_prob_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/log_prob_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/root_CPD.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sample_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@root_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/Old/CPD_to_CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function CPT = CPD_to_CPT(CPD)
+% CPD_TO_CPT Convert the CPD to tabular form (root)
+% CPT = CPD_to_CPT(CPD)
+
+CPT = 1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/CPD_to_CPT.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@root_CPD/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/convert_to_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function pot = convert_to_pot(CPD, pot_type, domain, evidence)
+% CONVERT_TO_POT Convert a root CPD to one or more potentials
+% pots = convert_to_pot(CPD, pot_type, domain, evidence)
+
+assert(length(domain)==1);
+assert(~isempty(evidence(domain)));
+T = 1;   
+
+sz = CPD.sizes;
+ns = zeros(1, max(domain));
+ns(domain) = sz;
+
+switch pot_type
+ case 'u',
+  pot = upot(domain, 1, T, 0);
+ case 'd',
+  ns(domain) = 1;
+  pot = dpot(domain, ns(domain), T);          
+ case {'c','g'},
+  ns(domain) = 0;
+  pot = cpot(domain, ns(domain), 0);
+ case 'cg',
+  ddom = [];
+  cdom = domain; % we assume the root node is cts
+  %pot = cgpot(ddom, cdom, ns, {cpot([],[],0)});
+  pot = cgpot(ddom, cdom, ns);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/log_marg_prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function L = log_marg_prob_node(CPD, self_ev, pev)
+% LOG_MARG_PROB_NODE Compute prod_m log int_{theta_i} P(x(i,m)| x(pi_i,m), theta_i) for node i (root)
+% L = log_marg_prob_node(CPD, self_ev, pev)
+%
+% self_ev{m} is the evidence on this node in case m
+% pev{i,m} is the evidence on the i'th parent in case m (ignored)
+% We always return L = 0.
+
+L = 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/log_prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function L = log_prob_node(CPD, self_ev, pev)
+% LOG_PROB_NODE Compute prod_m log P(x(i,m)| x(pi_i,m), theta_i) for node i (root)
+% L = log_prob_node(CPD, self_ev, pev)
+%
+% self_ev{m} is the evidence on this node in case m
+% pev{i,m} is the evidence on the i'th parent in case m (ignored)
+% We always return L = 0.
+
+L = 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/root_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+function CPD = root_CPD(bnet, self, val)
+% ROOT_CPD Make a conditional prob. distrib. which has no parameters.
+% CPD = ROOT_CPD(BNET, NODE_NUM, VAL)
+%
+% The node must not have any parents and is assumed to always be observed.
+% It is a way of modelling exogenous inputs to a model.
+% VAL is the value to which the root is clamped (default: [])
+
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  CPD = class(CPD, 'root_CPD', generic_CPD(1));
+  return;
+elseif isa(bnet, 'root_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+
+
+if nargin < 3, val = []; end
+
+ns = bnet.node_sizes;
+ps = parents(bnet.dag, self);
+if ~isempty(ps)
+  error('root CPDs should have no parents')
+end
+
+CPD.self = self;
+CPD.val = val;
+CPD.sizes = ns(self);
+
+clamped = 1;
+CPD = class(CPD, 'root_CPD', generic_CPD(clamped));
+
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.self = [];
+CPD.val = [];
+CPD.sizes = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@root_CPD/sample_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function y = sample_node(CPD, pev)
+% SAMPLE_NODE Draw a random sample from P(Y|pa(y), theta)  (root)
+% Y = SAMPLE_NODE(CPD, PEV)
+%
+% pev{i} is the evidence on the i'th parent.
+% Since a root has no parents, we ignore pev,
+% and return the value the root was clamped to when it was created.
+
+y = CPD.val;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+/convert_to_pot.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/convert_to_table.m/1.1.1.1/Tue Mar 30 17:19:22 2004//
+/display.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/get_field.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/maximize_params.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/reset_ess.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sample_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/set_fields.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/softmax_CPD.m/1.1.1.1/Tue Jan  7 16:25:14 2003//
+/update_ess.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@softmax_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/convert_to_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+function pot = convert_to_pot(CPD, pot_type, domain, evidence)
+% CONVERT_TO_POT Convert a softmax CPD to a potential
+% pots = convert_to_pot(CPD, pot_type, domain, evidence)
+%
+% pots = CPD evaluated using evidence(domain)
+
+ncases = size(domain,2);
+assert(ncases==1); % not yet vectorized
+
+sz = dom_sizes(CPD);
+ns = zeros(1, max(domain));
+ns(domain) = sz;
+
+odom = domain(~isemptycell(evidence(domain)));
+T = convert_to_table(CPD, domain, evidence);
+
+switch pot_type
+ case 'u',
+  pot = upot(domain, sz, T, 0*myones(sz));  
+ case 'd',
+  ns(odom) = 1;
+  pot = dpot(domain, ns(domain), T);          
+ 
+ case {'c','g'},
+  % Since we want the output to be a Gaussian, the whole family must be observed.
+  % In other words, the potential is really just a constant.
+  p = T;
+  %p = prob_node(CPD, evidence(domain(end)), evidence(domain(1:end-1)));
+  ns(domain) = 0;
+  pot = cpot(domain, ns(domain), log(p));       
+ 
+ case 'cg',
+  T = T(:);
+  ns(odom) = 1;
+  can = cell(1, length(T));
+  for i=1:length(T)
+    can{i} = cpot([], [], log(T(i)));
+  end
+  ps = domain(1:end-1);
+  dps = ps(CPD.dpndx);
+  cps = ps(CPD.cpndx);
+  ddom = [dps CPD.self];
+  cdom = cps;
+  pot = cgpot(ddom, cdom, ns, can);   
+  
+ case 'scg'
+  T = T(:);
+  ns(odom) = 1;
+  pot_array = cell(1, length(T));
+  for i=1:length(T)
+    pot_array{i} = scgcpot([], [], T(i));
+  end
+  pot = scgpot(domain, [], [], ns, pot_array);   
+
+ otherwise,
+  error(['unrecognized pot type ' pot_type])
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/convert_to_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function T = convert_to_table(CPD, domain, evidence)
+% CONVERT_TO_TABLE Convert a softmax CPD to a table, incorporating any evidence 
+% T = convert_to_table(CPD, domain, evidence)
+
+self       = domain(end);             
+ps         = domain(1:end-1);                            
+cnodes     = domain(CPD.cpndx);
+cps        = myintersect(ps, cnodes);
+dps        = domain(CPD.dpndx); 
+dps_as_cps = domain(CPD.dps_as_cps.ndx);
+all_dps    = union(dps,dps_as_cps);
+odom       = domain(~isemptycell(evidence(domain))); 
+if ~isempty(cps), assert(myismember(cps, odom)); end % all cts parents must be observed
+
+ns         = zeros(1, max(domain));
+ns(domain) = CPD.sizes;
+ens        = ns; % effective node sizes
+ens(odom)  = 1;
+
+% dpsize >= glimsz because the glm parameters are tied across the dps_as_cps parents
+dpsize       = prod(ens(all_dps)); % size of ALL self'discrete parents
+dpvals       = cat(1, evidence{myintersect(all_dps, odom)});
+cpvals       = cat(1, evidence{cps});
+if ~isempty(dps_as_cps),
+  separator          = CPD.dps_as_cps.separator;
+  dp_as_cpmap        = find_equiv_posns(dps_as_cps, all_dps);
+  dops_map           = find_equiv_posns(myintersect(all_dps, odom), all_dps);
+  puredp_map         = find_equiv_posns(dps, all_dps);
+  subs               = ind2subv(ens(all_dps), 1:prod(ens(all_dps)));
+  if ~isempty(dops_map), subs(:,dops_map) = subs(:,dops_map)+repmat(dpvals(:)',[size(subs,1) 1])-1; end
+end
+
+[w,b] = extract_params(CPD);
+T = zeros(dpsize, ns(self));                                       
+for i=1:dpsize,    
+  active_glm  = i;
+  dp_as_cpvals=zeros(1,sum(ns(dps_as_cps)));                                                                  
+  if ~isempty(dps_as_cps),                          
+    active_glm = max([1,subv2ind(ns(dps), subs(i,puredp_map))]);
+    % Extract the params compatible with the observations (if any) on the 'pure' discrete parents (if any)
+    where_one = separator + subs(i,dp_as_cpmap);
+    % and get in the dp_as_cp parents...
+    dp_as_cpvals(where_one)=1;                    
+  end                                               
+  T(i,:) = normalise(exp([dp_as_cpvals(:); cpvals(:)]'*w(:,:,active_glm) + b(:,active_glm)'));
+end
+if myismember(self, odom)
+  r = evidence{self};
+  T = T(:,r);
+end
+
+T = myreshape(T, ens(domain));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(CPD)
+
+disp('softmax_CPD object');
+disp(struct(CPD)); 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/get_field.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function val = get_params(CPD, name)
+% GET_PARAMS Get the parameters (fields) for a softmax_CPD object
+% val = get_params(CPD, name)
+%
+% The following fields can be accessed
+%
+% weights - W(X,Y,Q)
+% offset  - b(Y,Q)
+%
+% e.g., W = get_params(CPD, 'weights')
+
+[W, b] = extract_params(CPD);
+switch name
+ case 'weights',   val = W;
+ case 'offset',    val = b;
+ otherwise,
+  error(['invalid argument name ' name]);
+end                
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/maximize_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function CPD = maximize_params(CPD, temp)
+% MAXIMIZE_PARAMS Set the params of a CPD to their ML values (dsoftmax) using IRLS
+% CPD = maximize_params(CPD, temperature)
+% temperature parameter is ignored
+
+% Written by Pierpaolo Brutti
+
+if ~adjustable_CPD(CPD), return; end
+options = foptions;
+
+if CPD.verbose
+  options(1) = 1;
+else
+  options(1) = -1;
+end
+%options(1) = CPD.verbose;
+
+options(2) = CPD.wthresh;
+options(3) = CPD.llthresh;
+options(5) = CPD.approx_hess;
+options(14) = CPD.max_iter;
+
+dpsize = size(CPD.self_vals,3);
+for i=1:dpsize,
+  mask=find(CPD.eso_weights(:,:,i)>0); % for adapting the parameters we use only positive weighted example
+  if  ~isempty(mask),
+    if ~isempty(CPD.dps_as_cps.ndx),
+        puredp_map = find_equiv_posns(CPD.dpndx, union(CPD.dpndx, CPD.dps_as_cps.ndx)); % find the glm  structure
+        subs       = ind2subv(CPD.sizes(union(CPD.dpndx, CPD.dps_as_cps.ndx)),i);       % that corrisponds to the
+        active_glm = max([1,subv2ind(CPD.sizes(CPD.dpndx), subs(puredp_map))]);         % i-th 'fictitious' example
+        
+        CPD.glim{active_glm} = netopt_weighted(CPD.glim{active_glm}, options, CPD.parent_vals(mask',:,i),...
+            CPD.self_vals(mask',:,i), CPD.eso_weights(mask',:,i), 'scg');
+    else
+        alfa = 0.4; if CPD.solo, alfa = 1; end % learning step = 1 <=> self is all alone in the net
+        CPD.glim{i} = glmtrain_weighted(CPD.glim{i}, options, CPD.parent_vals(mask',:),...
+            CPD.self_vals(mask',:,i), CPD.eso_weights(mask',:,i), alfa);
+    end               
+  end
+  mask=[];
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/extract_params.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@softmax_CPD/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/private/extract_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function [W, b] = extract_params(CPD)
+
+% W(X,Y,Q), b(Y,Q)  where Y = ns(self), X = ns(cps), Q = prod(ns(dps))
+
+glimsz = prod(CPD.sizes(CPD.dpndx));
+ss = CPD.sizes(end);
+cpsz       = sum(CPD.sizes(CPD.cpndx));
+dp_as_cpsz = sum(CPD.sizes(CPD.dps_as_cps.ndx));
+W = zeros(dp_as_cpsz + cpsz, ss, glimsz);
+b = zeros(ss, glimsz);
+
+for i=1:glimsz
+  W(:,:,i) = CPD.glim{i}.w1;
+  b(:,i) = CPD.glim{i}.b1(:);
+end
+
+W = myreshape(W, [dp_as_cpsz + cpsz ss CPD.sizes(CPD.dpndx)]);
+b = myreshape(b, [ss CPD.sizes(CPD.dpndx)]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/reset_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function CPD = reset_ess(CPD)
+% RESET_ESS Reset the Expected Sufficient Statistics for a CPD (dsoftmax)
+% CPD = reset_ess(CPD)
+
+CPD.parent_vals = [];
+CPD.eso_weights=[];
+CPD.self_vals = [];
+CPD.nsamples = 0;  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/sample_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function y = sample_node(CPD, pvals)
+% SAMPLE_NODE Draw a random sample from P(Xi | x(pi_i), theta_i)  (discrete)
+% y = sample_node(CPD, parent_evidence)
+%
+% parent_evidence{i} is the value of the i'th parent
+
+n = length(pvals)+1;
+dom = 1:n;
+%evidence = cell(1,n);
+%evidence(1:n-1) = pvals(:)';
+evidence = pvals;
+evidence{end+1} = [];
+T = convert_to_table(CPD, dom, evidence);
+y = sample_discrete(T);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/set_fields.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function CPD = set_params(CPD, varargin)
+% SET_PARAMS Set the parameters (fields) for a softmax_CPD object
+% CPD = set_params(CPD, name/value pairs)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% (Let ns(i) be the size of node i, X = ns(X), Y = ns(Y), Q1=ns(dps(1)), Q2=ns(dps(2)), ...
+%   where dps are the discrete parents; if there are no discrete parents, we set Q1=1.)
+%
+% weights - (W(:,j,a,b,...) - W(:,j',a,b,...)) is ppn to dec. boundary
+%           between j,j' given Q1=a,Q2=b,... [ randn(X,Y,Q1,Q2,...) ]
+% offset  - (offset(j,a,b,...) - offset(j',a,b,...)) is the offset to dec. boundary
+%           between j,j' given Q1=a,Q2=b,... [ randn(Y,Q1,Q2,...) ]
+% clamped     - 'yes' means don't adjust params during learning ['no']
+% max_iter    - the maximum number of steps to take [10]
+% verbose     - 'yes' means print the LL at each step of IRLS ['no']
+% wthresh     - convergence threshold for weights [1e-2]
+% llthresh    - convergence threshold for log likelihood [1e-2]
+% approx_hess - 'yes' means approximate the Hessian for speed ['no']
+%
+% e.g., CPD = set_params(CPD,'offset', zeros(ns(i),1));
+
+args = varargin;
+nargs = length(args);
+glimsz = prod(CPD.sizes(CPD.dpndx));
+for i=1:2:nargs
+  switch args{i},
+   case 'discrete',     str='nothing to do';   
+   case 'clamped',      CPD = set_clamped(CPD, strcmp(args{i+1}, 'yes'));
+   case 'max_iter',     CPD.max_iter = args{i+1};
+   case 'verbose',      CPD.verbose = strcmp(args{i+1}, 'yes');
+   case 'max_iter',     CPD.max_iter = args{i+1};
+   case 'wthresh',      CPD.wthresh = args{i+1};
+   case 'llthresh',     CPD.llthresh = args{i+1};
+   case 'approx_hess',  CPD.approx_hess = strcmp(args{i+1}, 'yes');
+   case 'weights',      for q=1:glimsz, CPD.glim{q}.w1 = args{i+1}(:,:,q); end; 
+   case 'offset',
+    if glimsz == 1
+      CPD.glim{1}.b1 = args{i+1};
+    else
+      for q=1:glimsz, CPD.glim{q}.b1 = args{i+1}(:,q); end; 
+    end
+   otherwise,  
+    error(['invalid argument name ' args{i}]);       
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/softmax_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,187 @@
+function CPD = softmax_CPD(bnet, self, varargin)
+% SOFTMAX_CPD Make a softmax (multinomial logit) CPD
+%
+% To define this CPD precisely, let W be an (m x n) matrix with W(i,:) = {i-th row of B} 
+% => we can define the following vectorial function:
+%    
+%                                   softmax: R^n |--> R^m  
+%                  softmax(z,i-th)=exp(W(i,:)*z)/sum_k(exp(W(k,:)*z))      
+%
+% (this constructor augments z with a one at the beginning to introduce an offset term (=bias, intercept))                                   
+% Now call the continuous (cts) and always observed (obs) parents X,
+% the discrete parents (if any) Q, and this node Y then we use the discrete parent(s) just  to index
+% the parameter vectors (c.f., conditional Gaussian nodes); that is:
+%                 prob(Y=i | X=x, Q=j) = softmax(x,i-th|j)
+% where '|j' means that we are using the j-th (m x n) parameters matrix W(:,:,j).
+% If there are no discrete parents, this is a regular softmax node.
+% If Y is binary, this is a logistic (sigmoid) function.
+%
+% CPD = softmax_CPD(bnet, node_num, ...) will create a softmax CPD with random parameters,
+% where node is the number of a node in this equivalence class.
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+% (Let ns(i) be the size of node i, X = ns(X), Y = ns(Y), Q1=ns(dps(1)), Q2=ns(dps(2)), ...
+% where dps are the discrete parents; if there are no discrete parents, we set Q1=1.)
+%
+% discrete - the discrete parents that we want to treat like the cts ones [ [] ]. 
+%            This can be used to define sigmoid belief network - see below the reference.             
+%            For example suppose that Y has one cts parents X and two discrete ones: Q, C1 where:
+%            -> Q is binary (1/2) and used just to index the parameters of 'self'
+%            -> C1 is ternary (1/2/3) and treated as a cts node <=> its values appear into the linear 
+%               part of the softmax function
+%            then:
+%                     prob(Y|X=x, Q=q, C1=c1)= softmax(W(:,:,q)' * y)
+%            where y = [1 | delta(C1,1) delta(C1,2) delta(C1,3) | x(:)']' and delta(Y,a)=indicator(Y=a).
+% weights - (w(:,j,a,b,...) - w(:,j',a,b,...)) is ppn to dec. boundary
+%           between j,j' given Q1=a,Q2=b,... [ randn(X,Y,Q1,Q2,...) ]
+% offset  - (b(j,a,b,...) - b(j',a,b,...)) is the offset to dec. boundary
+%           between j,j' given Q1=a,Q2=b,... [ randn(Y,Q1,Q2,...) ]
+%
+% e.g., CPD = softmax_CPD(bnet, i, 'offset', zeros(ns(i),1));
+%
+% The following fields control the behavior of the M step, which uses 
+% a weighted version of the Iteratively Reweighted Least Squares (WIRLS) if dps_as_cps=[]; or
+% a weighted SCG otherwise, as implemented in Netlab, and modified by Pierpaolo Brutti.
+%
+% clamped     - 'yes' means don't adjust params during learning ['no']
+% max_iter    - the maximum number of steps to take [10]
+% verbose     - 'yes' means print the LL at each step of IRLS ['no']
+% wthresh     - convergence threshold for weights [1e-2]
+% llthresh    - convergence threshold for log likelihood [1e-2]
+% approx_hess - 'yes' means approximate the Hessian for speed ['no']
+%
+% For backwards compatibility with BNT2, you can also specify the parameters in the following order
+%   softmax_CPD(bnet, self, w, b, clamped, max_iter, verbose, wthresh, llthresh, approx_hess)
+%
+% REFERENCE
+% For details on the sigmoid belief nets, see:
+% - Neal (1992). Connectionist learning of belief networks, Artificial Intelligence, 56, 71-113.
+% - Saul, Jakkola, Jordan (1996). Mean field theory for sigmoid belief networks, Journal of Artificial Intelligence Reseach (4), pagg. 61-76.
+%
+% For details on the M step, see:
+% - K. Chen, L. Xu, H. Chi (1999). Improved learning algorithms for mixtures of experts in multiclass 
+%       classification. Neural Networks 12, pp. 1229-1252.
+% - M.I. Jordan, R.A. Jacobs (1994). Hierarchical Mixtures of Experts and the EM algorithm. 
+%       Neural Computation 6, pp. 181-214.
+% - S.R. Waterhouse, A.J. Robinson (1994). Classification Using Hierarchical Mixtures of Experts. In Proc. IEEE
+%       Workshop on Neural Network for Signal Processing IV, pp. 177-186
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  CPD = class(CPD, 'softmax_CPD', discrete_CPD(0, []));
+  return;
+elseif isa(bnet, 'softmax_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+
+assert(myismember(self, bnet.dnodes));
+ns = bnet.node_sizes;
+ps = parents(bnet.dag, self);
+dps = myintersect(ps, bnet.dnodes);
+cps = myintersect(ps, bnet.cnodes);
+
+clamped = 0;
+CPD = class(CPD, 'softmax_CPD', discrete_CPD(clamped, ns([ps self])));
+
+dps_as_cpssz = 0;
+dps_as_cps = [];
+% determine if any discrete parents are to be treated as cts
+if nargin >= 3 & isstr(varargin{1}) % might have passed in 'discrete'
+  for i=1:2:length(varargin)
+    if strcmp(varargin{i}, 'discrete')
+      dps_as_cps = varargin{i+1};
+      assert(myismember(dps_as_cps, dps));
+      dps = mysetdiff(dps, dps_as_cps);         % put out the dps treated as cts
+      CPD.dps_as_cps.ndx = find_equiv_posns(dps_as_cps, ps);
+      CPD.dps_as_cps.separator = [0 cumsum(ns(dps_as_cps(1:end-1)))]; % concatenated dps_as_cps dims separators
+      dps_as_cpssz = sum(ns(dps_as_cps));
+      break;
+    end
+  end
+end
+assert(~isempty(union(cps, dps_as_cps)));   % It have to be at least a cts or a dps_as_cps parents
+self_size = ns(self); 
+cpsz = sum(ns(cps));  
+glimsz = prod(ns(dps));
+CPD.dpndx = find_equiv_posns(dps, ps);  % it contains only the indeces of the 'pure' dps
+CPD.cpndx = find_equiv_posns(cps, ps);
+
+CPD.self  = self;
+CPD.solo  = (length(ns)<=2);
+CPD.sizes = bnet.node_sizes([ps self]);
+
+% set default params
+CPD.max_iter = 10;
+CPD.verbose = 0;
+CPD.wthresh = 1e-2;
+CPD.llthresh = 1e-2;
+CPD.approx_hess = 0;
+CPD.glim = cell(1,glimsz);
+for i=1:glimsz
+  CPD.glim{i} = glm(dps_as_cpssz + cpsz, self_size, 'softmax');
+end
+
+if nargin >= 3
+  args = varargin;
+  nargs = length(args);
+  if ~isstr(args{1})
+    %   softmax_CPD(bnet, self, w, b, clamped, max_iter, verbose, wthresh, llthresh, approx_hess)
+    if nargs >= 1 & ~isempty(args{1}), CPD = set_fields(CPD, 'weights', args{1}); end
+    if nargs >= 2 & ~isempty(args{2}), CPD = set_fields(CPD, 'offset', args{2});  end
+    if nargs >= 3 & ~isempty(args{3}), CPD = set_clamped(CPD, args{3});           end
+    if nargs >= 4 & ~isempty(args{4}), CPD.max_iter    = args{4}; end
+    if nargs >= 5 & ~isempty(args{5}), CPD.verbose     = args{5}; end
+    if nargs >= 6 & ~isempty(args{6}), CPD.wthresh     = args{6}; end
+    if nargs >= 7 & ~isempty(args{7}), CPD.llthresh   = args{7}; end
+    if nargs >= 8 & ~isempty(args{8}), CPD.approx_hess = args{8}; end
+  else
+    CPD = set_fields(CPD, args{:});
+  end
+end
+
+% sufficient statistics 
+% Since dsoftmax is not in the exponential family, we must store all the raw data.
+CPD.parent_vals = [];         % X(l,:) = value of cts parents in l'th example
+CPD.self_vals = [];           % Y(l,:) = value of self in l'th example
+
+CPD.eso_weights=[];           % weights used by the WIRLS algorithm
+
+% For BIC
+CPD.nsamples = 0;   
+if ~adjustable_CPD(CPD),
+   CPD.nparams=0;
+else
+   [W, b] = extract_params(CPD);
+   CPD.nparams= prod(size(W)) + prod(size(b));
+end
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.glim = {};
+CPD.self = [];
+CPD.solo = [];
+CPD.max_iter = [];
+CPD.verbose = [];
+CPD.wthresh = [];
+CPD.llthresh = [];
+CPD.approx_hess = [];
+CPD.sizes = [];
+CPD.parent_vals = [];
+CPD.eso_weights=[];
+CPD.self_vals = [];
+CPD.nsamples = [];
+CPD.nparams = [];
+CPD.dpndx = [];
+CPD.cpndx = [];
+CPD.dps_as_cps.ndx = [];
+CPD.dps_as_cps.separator = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@softmax_CPD/update_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a softmax node
+% function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+%
+% fmarginal = overall posterior distribution of self and its parents
+% fmarginal(i1,i2...,ik,s)=prob(Pa1=i1,...,Pak=ik, self=s| X)
+% 
+% => 1) prob(self|Pa1,...,Pak)=fmarginal/prob(Pa1,...,Pak) with prob(Pa1,...,Pak)=sum{s,fmarginal}
+%       [self estimation -> CPD.self_vals]
+% 	  2) prob(Pa1,...,Pak) [WIRLS weights -> CPD.eso_weights]
+%
+% Hidden_bitv is ignored
+
+% Written by Pierpaolo Brutti
+
+if ~adjustable_CPD(CPD), return; end
+
+domain     = fmarginal.domain;                              
+self       = domain(end);          
+ps         = domain(1:end-1);                                     
+cnodes     = domain(CPD.cpndx);
+cps        = myintersect(domain, cnodes);                     
+dps        = mysetdiff(ps, cps);                            
+dn_use     = dps;
+if isempty(evidence{self}) dn_use = [dn_use self]; end % if self is hidden we must consider its dimension  
+dps_as_cps = domain(CPD.dps_as_cps.ndx);
+odom       = domain(~isemptycell(evidence(domain))); 
+
+ns = zeros(1, max(domain));
+ns(domain) = CPD.sizes;     % CPD.sizes = bnet.node_sizes([ps self]);
+ens = ns;                   % effective node sizes
+ens(odom) = 1;              
+dpsize = prod(ns(dps));
+
+% Extract the params compatible with the observations (if any) on the discrete parents (if any)
+dops = myintersect(dps, odom);
+dpvals = cat(1, evidence{dops});
+
+subs = ind2subv(ens(dn_use), 1:prod(ens(dn_use)));
+dpmap = find_equiv_posns(dops, dn_use);
+if ~isempty(dpmap), subs(:,dpmap) = subs(:,dpmap)+repmat(dpvals(:)',[size(subs,1) 1])-1; end
+supportedQs = subv2ind(ns(dn_use), subs); subs=subs(1:prod(ens(dps)),1:length(dps));
+Qarity = prod(ns(dn_use));
+if isempty(dn_use), Qarity = 1; end   
+
+fullm.T              = zeros(Qarity, 1);
+fullm.T(supportedQs) = fmarginal.T(:);
+rs_dim = CPD.sizes;    rs_dim(CPD.cpndx) = 1;           %
+if ~isempty(evidence{self}), rs_dim(end)=1; end         % reshaping the marginal
+fullm.T              = reshape(fullm.T, rs_dim);        %
+
+% --------------------------------------------------------------------------------UPDATE--
+
+CPD.nsamples = CPD.nsamples + 1;
+
+% 1) observations vector -> CPD.parents_vals ---------------------------------------------
+cpvals = cat(1, evidence{cps});
+
+if ~isempty(dps_as_cps),   % ...get in the dp_as_cp parents... 
+    separator          = CPD.dps_as_cps.separator;
+    dp_as_cpmap        = find_equiv_posns(dps_as_cps, dps);       
+    for i=1:dpsize,
+        dp_as_cpvals=zeros(1,sum(ns(dps_as_cps)));
+        possible_vals = ind2subv(ns(dps),i);
+        ll=find(ismember(subs(:,dp_as_cpmap), possible_vals(dp_as_cpmap), 'rows')==1);   
+        if ~isempty(ll),
+            where_one = separator + possible_vals(dp_as_cpmap);
+            dp_as_cpvals(where_one)=1;                            
+        end
+        CPD.parent_vals(CPD.nsamples,:,i) = [dp_as_cpvals(:); cpvals(:)]';
+    end
+else
+    CPD.parent_vals(CPD.nsamples,:) = cpvals(:)';
+end
+
+% 2) weights vector -> CPD.eso_weights ----------------------------------------------------
+if isempty(evidence{self}),             % self is hidden
+    pesi=reshape(sum(fullm.T, length(rs_dim)),[dpsize,1]);
+else
+    pesi=reshape(fullm.T,[dpsize,1]);
+end
+assert(approxeq(sum(pesi),1));          % check
+
+% 3) estimate (if R is hidden) or recover (if R is obs) self'value-------------------------
+if isempty(evidence{self})                                  % P(self|Pa1,...,Pak)=fmarginal/prob(Pa1,...,Pak)
+    r=reshape(mk_stochastic(fullm.T), [dpsize ns(self)]);   % matrix size: prod{j,ns(Paj)} x ns(self)      
+else
+    r = zeros(dpsize,ns(self));
+    for i=1:dpsize, if pesi(i)~=0, r(i,evidence{self}) = 1; end; end
+end
+for i=1:dpsize, if pesi(i)~=0, assert(approxeq(sum(r(i,:)),1)); end; end     % check
+
+% 4) save the previous values --------------------------------------------------------------
+for i=1:dpsize
+    CPD.eso_weights(CPD.nsamples,:,i)=pesi(i);
+    CPD.self_vals(CPD.nsamples,:,i) = r(i,:); 
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/CPD_to_CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function CPT = CPD_to_CPT(CPD)
+% CPD_TO_CPT Convert the discrete CPD to tabular form (tabular)
+% CPT = CPD_to_CPT(CPD)
+
+CPT = CPD.CPT;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+/CPD_to_CPT.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/bayes_update_params.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/display.m/1.1.1.1/Tue Apr 22 21:00:02 2003//
+/get_field.m/1.1.1.1/Sun Jan 16 02:27:30 2005//
+/learn_params.m/1.1.1.1/Thu Jun 10 01:25:02 2004//
+/log_marg_prob_node.m/1.1.1.1/Fri Jun 11 21:16:00 2004//
+/log_nextcase_prob_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/log_prior.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/maximize_params.m/1.1.1.1/Sun Mar  9 22:44:40 2003//
+/reset_ess.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/set_fields.m/1.1.1.1/Sun Jan 16 02:27:30 2005//
+/tabular_CPD.m/1.1.1.1/Sun Jan 16 02:27:32 2005//
+/update_ess.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/update_ess_simple.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@tabular_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/BIC_score_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function score = BIC_score_CPD(CPD, fam, data, ns, cnodes)
+% BIC_score_CPD Compute the BIC score of a tabular CPD
+% score = BIC_score_CPD(CPD, fam, data, ns, cnodes)
+
+if iscell(data)
+  local_data = cell2num(data(fam,:));
+else
+  local_data = data(fam, :);
+end
+counts = compute_counts(local_data, CPD.sizes);
+CPT = mk_stochastic(counts); % MLE
+tiny = exp(-700); 
+CPT = CPT + (CPT==0)*tiny;  % replace 0s by tiny
+LL = sum(log(CPT(:)) .* counts(:));
+N = size(data, 2);
+score = LL - 0.5*CPD.nparams*log(N);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+/BIC_score_CPD.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/bayesian_score_CPD.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/log_marg_prob_node_case.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mult_CPD_and_pi_msgs.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/prob_CPT.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/prob_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sample_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sample_node_single_case.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/tabular_CPD.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/update_params.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@tabular_CPD/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/bayesian_score_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function score = bayesian_score_CPD(CPD, local_ev)
+% bayesian_score_CPD Compute the Bayesian score of a tabular CPD using uniform Dirichlet prior
+% score = bayesian_score_CPD(CPD, local_ev)
+%
+% The Bayesian score is the log marginal likelihood
+
+if iscell(local_ev)
+ data = num2cell(local_ev);
+else
+ data =	local_ev;
+end
+
+score = dirichlet_score_family(compute_counts(data, CPD.sizes));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/log_marg_prob_node_case.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function L = log_marg_prob_node_case(CPD, y, x)
+% LOG_MARG_PROB_NODE_CASE Compute prod_m log P(x(i,m)| x(pi_i,m)) for node i (tabular)
+% L = log_marg_prob_node_case(CPD, self_ev, parent_ev)
+% 
+% This is a slightly optimised version of log_marg_prob_node.
+% We assume we have exactly 1 case, i.e., y is a scalar and x is a vector (not a cell array).
+
+sz = CPD.sizes;
+nparents = length(sz)-1;
+
+% We assume the CPTs are already set to the mean of the posterior (due to update_params)
+
+switch nparents
+ case 0, p = CPD.CPT(y);
+ case 1, p = CPD.CPT(x(1), y);
+ case 2, p = CPD.CPT(x(1), x(2), y);
+ case 3, p = CPD.CPT(x(1), x(2), x(3), y);
+ otherwise,
+  ind = subv2ind(sz, [x y]);
+  p = CPD.CPT(ind);
+end
+L = log(p);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/mult_CPD_and_pi_msgs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function T = mult_CPD_and_pi_msgs(CPD, n, ps, msgs, except)
+% MULT_CPD_AND_PI_MSGS Multiply the CPD and all the pi messages from parents, perhaps excepting one
+% T = mult_CPD_and_pi_msgs(CPD, n, ps, msgs, except)
+
+if nargin < 5, except = -1; end
+
+dom = [ps n];
+%ns = sparse(1, max(dom));
+ns = zeros(1, max(dom));
+ns(dom) = mysize(CPD.CPT);
+T = dpot(dom, ns(dom), CPD.CPT);
+for i=1:length(ps)
+  p = ps(i);
+  if p ~= except
+    T = multiply_by_pot(T, dpot(p, ns(p), msgs{n}.pi_from_parent{i}.T)); 
+  end
+end         
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/prob_CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function p = prob_CPT(CPD, x)
+% PROB_CPT Lookup the prob. of a family value in a tabular CPD
+% p = prob_CPT(CPD, x)
+%
+% This is a version of prob_CPD optimized for tables.
+
+switch length(x)
+ case 1, p = CPD.CPT(x);
+ case 2, p = CPD.CPT(x(1), x(2));
+ case 3, p = CPD.CPT(x(1), x(2), x(3));
+ case 4, p = CPD.CPT(x(1), x(2), x(3), x(4));
+ otherwise,
+  ind = subv2ind(mysize(CPD.CPT), x);
+  p = CPD.CPT(ind);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function p = prob_node(CPD, self_ev, pev)
+% PROB_NODE Compute P(y|pa(y), theta) (tabular)
+% p = prob_node(CPD, self_ev, pev)
+%
+% self_ev{m} is the evidence on this node in case m
+% pev{i,m} is the evidence on the i'th parent in case m
+% If there is a single case, self_ev can be a scalar instead of a cell array
+
+ncases = size(pev, 2);
+
+%assert(~any(isemptycell(pev))); % slow
+%assert(~any(isemptycell(self_ev))); % slow
+
+CPT = CPD_to_CPT(CPD);  
+sz = mysize(CPT);
+nparents = length(sz)-1;
+assert(nparents == size(pev, 1));
+
+if ncases==1 
+  x = cat(1, pev{:});
+  if iscell(y)
+    y = self_ev{1};
+  else
+    y = self_ev;
+  end
+  switch nparents
+   case 0, p = CPT(y);
+   case 1, p = CPT(x(1), y);
+   case 2, p = CPT(x(1), x(2), y);
+   case 3, p = CPT(x(1), x(2), x(3), y);
+   otherwise,
+    ind = subv2ind(CPD.sizes, [x y]);
+    p = CPT(ind);
+  end
+else
+  x = num2cell(pev)'; % each row is a case
+  y = cat(1, self_ev{:})';
+  ind = subv2ind(CPD.sizes, [x y]);
+  p = CPT(ind);
+end     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/sample_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function y = sample_node(CPD, pev, nsamples)
+% SAMPLE_NODE Draw a random sample from P(Xi | x(pi_i), theta_i)  (tabular)
+% Y = SAMPLE_NODE(CPD, PEV, NSAMPLES)
+%
+% pev(i,m) is the value of the i'th parent in sample m (if there are any parents).
+% y(m) is the m'th sampled value (a row vector).
+% (If pev is a cell array, so is y.)
+% nsamples defaults to 1.
+
+if nargin < 3, nsamples = 1; end
+
+%if nargin < 4, usecell = 0; end
+if iscell(pev), usecell = 1; else usecell = 0; end
+
+if nsamples == 1, pev = pev(:); end
+
+sz = CPD.sizes; 
+nparents = length(sz)-1;
+if nparents==0
+  y = sample_discrete(CPD.CPT, 1, nsamples);
+  if usecell
+    y = num2cell(y);
+  end
+  return;
+end
+
+sz = CPD.sizes; 
+[nparents nsamples] = size(pev);
+
+if usecell
+  pvals = cell2num(pev)'; % each row is a case
+else
+  pvals = pev';
+end
+
+psz = sz(1:end-1);
+ssz = sz(end);
+ndx = subv2ind(psz, pvals);
+T = reshape(CPD.CPT, [prod(psz) ssz]);
+T2 = T(ndx,:); % each row is a distribution selected by the parents
+C = cumsum(T2, 2); % sum across columns
+R = rand(nsamples, 1);
+y = ones(nsamples, 1);
+for i=1:ssz-1
+  y = y + (R > C(:,i));
+end
+y = y(:)';
+if usecell
+  y = num2cell(y);
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/sample_node_single_case.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function y = sample_node(CPD, pev)
+% SAMPLE_NODE Draw a random sample from P(Xi | x(pi_i), theta_i)  (tabular)
+% y = sample_node(CPD, pev)
+%
+% pev{i} is the value of the i'th parent (if any)
+
+%assert(~any(isemptycell(pev)));
+
+%CPT = CPD_to_CPT(CPD);
+%sz = mysize(CPT);
+sz = CPD.sizes; 
+nparents = length(sz)-1;
+if nparents > 0
+  pvals = cat(1, pev{:});
+end
+switch nparents
+ case 0, T = CPD.CPT;
+ case 1, T = CPD.CPT(pvals(1), :);
+ case 2, T = CPD.CPT(pvals(1), pvals(2), :);
+ case 3, T = CPD.CPT(pvals(1), pvals(2), pvals(3), :);
+ case 4, T = CPD.CPT(pvals(1), pvals(2), pvals(3), pvals(4), :);
+ otherwise,
+  psz = sz(1:end-1);
+  ssz = sz(end);
+  i = subv2ind(psz, pvals(:)');
+  T = reshape(CPD.CPT, [prod(psz) ssz]);
+  T = T(i,:);
+end
+
+if sz(end)==2
+  r = rand(1,1);
+  if r > T(1)
+    y = 2;
+  else
+    y = 1;
+  end
+else
+  y = sample_discrete(T);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/tabular_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,186 @@
+function CPD = tabular_CPD(bnet, self, varargin)
+% TABULAR_CPD Make a multinomial conditional prob. distrib. (CPT)
+%
+% CPD = tabular_CPD(bnet, node) creates a random CPT.
+%
+% The following arguments can be specified [default in brackets]
+%
+% CPT - specifies the params ['rnd']
+%   - T means use table T; it will be reshaped to the size of node's family.
+%   - 'rnd' creates rnd params (drawn from uniform)
+%   - 'unif' creates a uniform distribution
+%   - 'leftright' only transitions from i to i/i+1 are allowed, for each non-self parent context.
+%       The non-self parents are all parents except oldself.
+% selfprob - The prob of transition from i to i if CPT = 'leftright' [0.1]
+% old_self - id of the node corresponding to self in the previous slice [self-ss]
+% adjustable - 0 means don't adjust the parameters during learning [1]
+% prior_type - defines type of prior ['none']
+%  - 'none' means do ML estimation
+%  - 'dirichlet' means add pseudo-counts to every cell
+%  - 'entropic' means use a prior P(theta) propto exp(-H(theta)) (see Brand)
+% dirichlet_weight - equivalent sample size (ess) of the dirichlet prior [1]
+% dirichlet_type - defines the type of Dirichlet prior ['BDeu']
+%  - 'unif' means put dirichlet_weight in every cell
+%  - 'BDeu' means we put 'dirichlet_weight/(r q)' in every cell
+%    where r = self_sz and q = prod(parent_sz) (see Heckerman)
+% trim - 1 means trim redundant params (rows in CPT) when using entropic prior [0]
+%
+% e.g., tabular_CPD(bnet, i, 'CPT', T)
+% e.g., tabular_CPD(bnet, i, 'CPT', 'unif', 'dirichlet_weight', 2, 'dirichlet_type', 'unif')
+%
+% REFERENCES
+% M. Brand - "Structure learning in conditional probability models via an entropic  prior
+%   and parameter extinction", Neural Computation 11 (1999): 1155--1182
+% M. Brand - "Pattern discovery via entropy minimization" [covers annealing]
+%   AI & Statistics 1999. Equation numbers refer to this paper, which is available from
+%   www.merl.com/reports/docs/TR98-21.pdf
+% D. Heckerman, D. Geiger and M. Chickering, 
+%   "Learning Bayesian networks: the combination of knowledge and statistical data",
+%   Microsoft Research Tech Report, 1994
+
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  CPD = class(CPD, 'tabular_CPD', discrete_CPD(0, []));
+  return;
+elseif isa(bnet, 'tabular_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+
+ns = bnet.node_sizes;
+ps = parents(bnet.dag, self);
+fam_sz = ns([ps self]);
+CPD.sizes = fam_sz;
+CPD.leftright = 0;
+
+% set defaults
+CPD.CPT = mk_stochastic(myrand(fam_sz));
+CPD.adjustable = 1;
+CPD.prior_type = 'none';
+dirichlet_type = 'BDeu';
+dirichlet_weight = 1;
+CPD.trim = 0;
+selfprob = 0.1;
+
+% extract optional args
+args = varargin;
+% check for old syntax CPD(bnet, i, CPT) as opposed to CPD(bnet, i, 'CPT', CPT)
+if ~isempty(args) & ~isstr(args{1})
+  CPD.CPT = myreshape(args{1}, fam_sz);
+  args = [];
+end
+
+% if old_self is specified, read in the value before CPT is created
+old_self = []; 
+for i=1:2:length(args)
+  switch args{i},
+   case 'old_self', old_self = args{i+1};
+  end
+end
+
+for i=1:2:length(args)
+  switch args{i},
+   case 'CPT',
+    T = args{i+1};
+    if ischar(T)
+      switch T
+       case 'unif', CPD.CPT = mk_stochastic(myones(fam_sz));
+       case 'rnd',  CPD.CPT = mk_stochastic(myrand(fam_sz));
+       case 'leftright', 
+	% we just initialise the CPT to leftright - this structure will
+	% be maintained by EM, assuming we don't use a prior...
+	CPD.leftright = 1;
+	if isempty(old_self) % we assume the network is a DBN
+	  ss = bnet.nnodes_per_slice;
+	  old_self = self-ss;
+	end
+	other_ps = mysetdiff(ps, old_self);
+	Qps = prod(ns(other_ps));
+	Q = ns(self);
+	p = selfprob;
+	LR = mk_leftright_transmat(Q, p);
+	transprob = repmat(reshape(LR, [1 Q Q]), [Qps 1 1]); % transprob(k,i,j)
+	transprob = permute(transprob, [2 1 3]); % now transprob(i,k,j)
+	CPD.CPT = myreshape(transprob, fam_sz);
+       otherwise,   error(['invalid CPT ' T]);       
+      end
+    else
+      CPD.CPT = myreshape(T, fam_sz);
+    end
+    
+   case 'prior_type', CPD.prior_type = args{i+1};
+   case 'dirichlet_type', dirichlet_type = args{i+1};
+   case 'dirichlet_weight', dirichlet_weight = args{i+1};
+   case 'adjustable', CPD.adjustable = args{i+1};
+   case 'clamped', CPD.adjustable = ~args{i+1};
+   case 'trim', CPD.trim = args{i+1};
+   case 'old_self', noop = 1; % already read in
+   otherwise, error(['invalid argument name: ' args{i}]);       
+  end
+end
+
+switch CPD.prior_type
+ case 'dirichlet',
+  switch dirichlet_type
+   case 'unif', CPD.dirichlet = dirichlet_weight * myones(fam_sz);
+   case 'BDeu',  CPD.dirichlet = dirichlet_weight * mk_stochastic(myones(fam_sz));
+   otherwise, error(['invalid dirichlet_type ' dirichlet_type])
+  end
+ case {'entropic', 'none'}
+  CPD.dirichlet = [];
+ otherwise, error(['invalid prior_type ' prior_type])
+end
+
+  
+
+% fields to do with learning
+if ~CPD.adjustable
+  CPD.counts = [];
+  CPD.nparams = 0;
+  CPD.nsamples = [];
+else
+  CPD.counts = zeros(size(CPD.CPT));
+  psz = fam_sz(1:end-1);
+  ss = fam_sz(end);
+  if CPD.leftright
+    % For each of the Qps contexts, we specify Q elements on the diagoanl
+    CPD.nparams = Qps * Q;
+  else
+    % sum-to-1 constraint reduces the effective arity of the node by 1
+    CPD.nparams = prod([psz ss-1]);
+  end
+  CPD.nsamples = 0;
+end
+
+fam_sz = CPD.sizes;
+psz = prod(fam_sz(1:end-1));
+ssz = fam_sz(end);
+CPD.trimmed_trans = zeros(psz, ssz); % must declare before reading
+
+CPD = class(CPD, 'tabular_CPD', discrete_CPD(~CPD.adjustable, fam_sz));
+
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.CPT = [];
+CPD.sizes = [];
+CPD.prior_type = [];
+CPD.dirichlet = [];
+CPD.adjustable = [];
+CPD.counts = [];
+CPD.nparams = [];
+CPD.nsamples = [];
+CPD.trim = [];
+CPD.trimmed_trans = [];
+CPD.leftright = [];
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/Old/update_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function CPD = update_params(CPD, ev, counts)
+% UPDATE_PARAMS Update the Dirichlet pseudo counts and compute the new MAP param estimates (tabular)
+%
+% CPD = update_params(CPD, ev) uses the evidence on the family from a single case.
+%
+% CPD = update_params(CPD, [], counts) does a batch update using the specified suff. stats.
+
+if nargin < 3
+  n = length(ev);
+  data = cat(1, ev{:}); % convert to a vector of scalars
+  counts = compute_counts(data(:)', 1:n, mysize(CPD.CPT));
+end
+  
+CPD.prior = CPD.prior + counts;
+CPD.CPT = mk_stochastic(CPD.prior);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/bayes_update_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+function CPD = bayes_update_params(CPD, self_ev, pev)
+% UPDATE_PARAMS_COMPLETE Bayesian parameter updating given completely observed data (tabular)
+% CPD = update_params_complete(CPD, self_ev, pev)
+%
+% self_ev(m) is the evidence on this node in case m.
+% pev(i,m) is the evidence on the i'th parent in case m (if there are any parents).
+% These can be arrays or cell arrays.
+%
+% We update the Dirichlet pseudo counts and set the CPT to the mean of the posterior.
+
+if iscell(self_ev), usecell = 1; else usecell = 0; end
+
+ncases = length(self_ev);
+sz = CPD.sizes;
+nparents = length(sz)-1;
+assert(nparents == size(pev,1));
+
+if ncases == 0 | ~adjustable_CPD(CPD)
+  return;
+elseif ncases == 1 % speedup the sequential learning case by avoiding normalization of the whole array
+  if usecell
+    x = cat(1, pev{:})';
+    y = self_ev{1};
+  else
+    x = pev(:)';
+    y = self_ev;
+  end
+  switch nparents
+   case 0,
+    CPD.dirichlet(y) = CPD.dirichlet(y)+1;
+    CPD.CPT = CPD.dirichlet / sum(CPD.dirichlet);
+   case 1,
+    CPD.dirichlet(x(1), y) = CPD.dirichlet(x(1), y)+1;
+    CPD.CPT(x(1), :) = CPD.dirichlet(x(1), :) ./ sum(CPD.dirichlet(x(1), :));
+   case 2,
+    CPD.dirichlet(x(1), x(2), y) = CPD.dirichlet(x(1), x(2), y)+1;
+    CPD.CPT(x(1), x(2), :) = CPD.dirichlet(x(1), x(2), :) ./ sum(CPD.dirichlet(x(1), x(2), :));
+   case 3,
+    CPD.dirichlet(x(1), x(2), x(3), y) = CPD.dirichlet(x(1), x(2), x(3), y)+1;
+    CPD.CPT(x(1), x(2), x(3), :) = CPD.dirichlet(x(1), x(2), x(3), :) ./ sum(CPD.dirichlet(x(1), x(2), x(3), :));
+   otherwise,
+    ind = subv2ind(sz, [x y]);
+    CPD.dirichlet(ind) = CPD.dirichlet(ind) + 1;
+    CPD.CPT = mk_stochastic(CPD.dirichlet);
+  end
+else  
+  if usecell
+    data = [cell2num(pev); cell2num(self_ev)]; 
+  else
+    data = [pev; self_ev];
+  end
+  counts = compute_counts(data, sz);
+  CPD.dirichlet = CPD.dirichlet + counts;
+  CPD.CPT = mk_stochastic(CPD.dirichlet);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function display(CPD)
+
+disp('tabular_CPD object');
+disp(struct(CPD)); 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/get_field.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function val = get_field(CPD, name)
+% GET_PARAMS Get the parameters (fields) for a tabular_CPD object
+% val = get_params(CPD, name)
+%
+% The following fields can be accessed
+%
+% cpt, counts
+%
+% e.g., CPT = get_params(CPD, 'cpt')
+
+switch name
+ case 'cpt',      val = CPD.CPT;
+ case 'counts',      val = CPD.counts;
+ otherwise,
+  error(['invalid argument name ' name]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/learn_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function CPD = learn_params(CPD, fam, data, ns, cnodes)
+%function CPD = learn_params(CPD, local_data)
+% LEARN_PARAMS Compute the ML/MAP estimate of the params of a tabular CPD given complete data
+% CPD = learn_params(CPD, local_data)
+%
+% local_data(i,m) is the value of i'th family member in case m (can be cell array).
+
+local_data = data(fam, :); 
+if iscell(local_data)
+  local_data = cell2num(local_data);
+end
+counts = compute_counts(local_data, CPD.sizes);
+switch CPD.prior_type
+ case 'none', CPD.CPT = mk_stochastic(counts); 
+ case 'dirichlet', CPD.CPT = mk_stochastic(counts + CPD.dirichlet); 
+ otherwise, error(['unrecognized prior ' CPD.prior_type])
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/log_marg_prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,69 @@
+function L = log_marg_prob_node(CPD, self_ev, pev, usecell)
+% LOG_MARG_PROB_NODE Compute sum_m log P(x(i,m)| x(pi_i,m)) for node i (tabular)
+% L = log_marg_prob_node(CPD, self_ev, pev)
+%
+% This differs from log_prob_node because we integrate out the parameters.
+% self_ev(m) is the evidence on this node in case m.
+% pev(i,m) is the evidence on the i'th parent in case m (if there are any parents).
+% (These may also be cell arrays.)
+
+ncases = length(self_ev);
+sz = CPD.sizes;
+nparents = length(sz)-1;
+assert(ncases == size(pev, 2)); 
+
+if nargin < 4
+  %usecell = 0;
+  if iscell(self_ev)
+    usecell = 1;
+  else
+    usecell = 0;
+  end
+end
+
+
+if ncases==0
+  L = 0;
+  return;
+elseif ncases==1  % speedup the sequential learning case
+  CPT = CPD.CPT;
+  % We assume the CPTs are already set to the mean of the posterior (due to bayes_update_params)
+  if usecell
+    x = cat(1, pev{:})';
+    y = self_ev{1};
+  else
+    %x = pev(:)';
+    x = pev;
+    y = self_ev;
+  end
+  switch nparents
+   case 0, p = CPT(y);
+   case 1, p = CPT(x(1), y);
+   case 2, p = CPT(x(1), x(2), y);
+   case 3, p = CPT(x(1), x(2), x(3), y);
+   otherwise,
+    ind = subv2ind(sz, [x y]);
+    p = CPT(ind);
+  end
+  L = log(p);
+else
+  % We ignore the CPTs here and assume the prior has not been changed
+  
+  % We arrange the data as in the following example.
+  % Let there be 2 parents and 3 cases. Let p(i,m) be parent i in case m,
+  % and y(m) be the child in case m. Then we create the data matrix
+  % 
+  % p(1,1) p(1,2) p(1,3)
+  % p(2,1) p(2,2) p(2,3)
+  % y(1)   y(2)   y(3)
+  if usecell
+    data = [cell2num(pev); cell2num(self_ev)]; 
+  else
+    data = [pev; self_ev];
+  end
+  %S = struct(CPD); fprintf('log marg prob node %d, ps\n', S.self); disp(S.parents)
+  counts = compute_counts(data, sz);
+  L = dirichlet_score_family(counts, CPD.dirichlet);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/log_nextcase_prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,72 @@
+function L = log_nextcase_prob_node(CPD, self_ev, pev, test_self_ev, test_pev)
+% LOG_NEXTCASE_PROB_NODE compute the joint distribution of a node (tabular) of a new case given
+% completely observed data.
+%
+% The input arguments are mainly similar with log_marg_prob_node(CPD, self_ev, pev, usecell),
+% but add test_self_ev, test_pev, and without usecell
+% test_self_ev(m) is the evidence on this node in a test case.
+% test_pev(i) is the evidence on the i'th parent in the test case (if there are any parents).
+%
+% Written by qian.diao@intel.com
+
+ncases = length(self_ev);
+sz = CPD.sizes;
+nparents = length(sz)-1;
+assert(ncases == size(pev, 2)); 
+
+if nargin < 6
+  %usecell = 0;
+  if iscell(self_ev)
+    usecell = 1;
+  else
+    usecell = 0;
+  end
+end
+
+
+if ncases==0
+  L = 0;
+  return;
+elseif ncases==1  % speedup the sequential learning case; here need correction!!!
+  CPT = CPD.CPT;
+  % We assume the CPTs are already set to the mean of the posterior (due to bayes_update_params)
+  if usecell
+    x = cat(1, pev{:})';
+    y = self_ev{1};
+  else
+    %x = pev(:)';
+    x = pev;
+    y = self_ev;
+  end
+  switch nparents
+   case 0, p = CPT(y);
+   case 1, p = CPT(x(1), y);
+   case 2, p = CPT(x(1), x(2), y);
+   case 3, p = CPT(x(1), x(2), x(3), y);
+   otherwise,
+    ind = subv2ind(sz, [x y]);
+    p = CPT(ind);
+  end
+  L = log(p);
+else
+  % We ignore the CPTs here and assume the prior has not been changed
+  
+  % We arrange the data as in the following example.
+  % Let there be 2 parents and 3 cases. Let p(i,m) be parent i in case m,
+  % and y(m) be the child in case m. Then we create the data matrix
+  % 
+  % p(1,1) p(1,2) p(1,3)
+  % p(2,1) p(2,2) p(2,3)
+  % y(1)   y(2)   y(3)
+  if usecell
+    data = [cell2num(pev); cell2num(self_ev)]; 
+  else
+    data = [pev; self_ev];
+  end
+  counts = compute_counts(data, sz);
+  
+  % compute the (N_ijk'+ N_ijk)/(N_ij' + N_ij) under the condition of 1_m+1,ijk = 1 
+  L = predict_family(counts, CPD.prior, test_self_ev, test_pev);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/log_prior.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function L = log_prior(CPD)
+% LOG_PRIOR Return log P(theta) for a tabular CPD 
+% L = log_prior(CPD)
+
+switch CPD.prior_type
+ case 'none',
+  L = 0;
+ case 'dirichlet',
+  D = CPD.dirichlet(:);
+  L = sum(log(D + (D==0)));
+ case 'entropic',
+  % log-prior = log exp(-H(theta)) = sum_i theta_i log (theta_i)
+  fam_sz = CPD.sizes;
+  psz = prod(fam_sz(1:end-1));
+  ssz = fam_sz(end);
+  C = reshape(CPD.CPT, psz, ssz);
+  L = sum(sum(C .* log(C + (C==0))));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/maximize_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function CPD = maximize_params(CPD, temp)
+% MAXIMIZE_PARAMS Set the params of a tabular node to their ML/MAP values.
+% CPD = maximize_params(CPD, temp)
+
+if ~adjustable_CPD(CPD), return; end
+
+%assert(approxeq(sum(CPD.counts(:)), CPD.nsamples)); % false!
+switch CPD.prior_type
+ case 'none',
+  counts = reshape(CPD.counts, size(CPD.CPT));
+  CPD.CPT = mk_stochastic(counts);
+ case 'dirichlet',
+  counts = reshape(CPD.counts, size(CPD.CPT));
+  CPD.CPT = mk_stochastic(counts + CPD.dirichlet);
+ 
+ % case 'entropic',
+%   % For an HMM,
+%   % CPT(i,j) = pr(X(t)=j | X(t-1)=i) = transprob(i,j)
+%   % counts(i,j) = E #(X(t-1)=i, X(t)=j) = exp_num_trans(i,j)
+%   Z = 1-temp;
+%   fam_sz = CPD.sizes;
+%   psz = prod(fam_sz(1:end-1));
+%   ssz = fam_sz(end);
+%   counts = reshape(CPD.counts, psz, ssz);
+%   CPT = zeros(psz, ssz);
+%   for i=CPD.entropic_pcases(:)'
+%     [CPT(i,:), logpost] = entropic_map_estimate(counts(i,:), Z);
+%   end
+%   non_entropic_pcases = mysetdiff(1:psz, CPD.entropic_pcases);
+%   for i=non_entropic_pcases(:)'
+%     CPT(i,:) = mk_stochastic(counts(i,:));
+%   end
+%   %for i=1:psz
+%   %  [CPT(i,:), logpost] = entropic_map(counts(i,:), Z);
+%   %end
+%   if CPD.trim & (temp < 2) % at high temps, we would trim everything!
+%     % grad(j) = d log lik / d theta(i ->j)
+%     % CPT(i,j) = 0 => counts(i,j) = 0
+%     % so we can safely replace 0s by 1s in the denominator
+%     denom = CPT(i,:) + (CPT(i,:)==0);
+%     grad = counts(i,:) ./ denom;
+%     trim = find(CPT(i,:) <= exp(-(1/Z)*grad)); % eqn 32
+%     if ~isempty(trim)
+%       CPT(i,trim) = 0;
+%       if all(CPD.trimmed_trans(i,trim)==0) % trimming for 1st time
+% 	disp(['trimming CPT(' num2str(i) ',' num2str(trim) ')']) 
+%       end
+%       CPD.trimmed_trans(i,trim) = 1;
+%     end
+%   end
+%   CPD.CPT = myreshape(CPT, CPD.sizes);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/reset_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function CPD = reset_ess(CPD)
+% RESET_ESS Reset the Expected Sufficient Statistics of a tabular node.
+% CPD = reset_ess(CPD)
+
+%CPD.counts = zeros(size(CPD.CPT));
+CPD.counts = zeros(prod(size(CPD.CPT)), 1);
+CPD.nsamples = 0;    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/set_fields.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function CPD = set_fields(CPD, varargin)
+% SET_PARAMS Set the parameters (fields) for a tabular_CPD object
+% CPD = set_params(CPD, name/value pairs)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+%
+% CPT, prior, clamped, counts
+%
+% e.g., CPD = set_params(CPD, 'CPT', 'rnd')
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'CPT', 
+    if ischar(args{i+1})
+      switch args{i+1}
+       case 'unif', CPD.CPT = mk_stochastic(myones(CPD.sizes));
+       case 'rnd',  CPD.CPT = mk_stochastic(myrand(CPD.sizes));
+       otherwise,   error(['invalid type ' args{i+1}]);       
+      end
+    elseif isscalarBNT(args{i+1})
+      p = args{i+1};
+      k = CPD.sizes(end);
+      % Bug fix by Hervé Boutrouille 10/1/01
+      CPD.CPT = myreshape(sample_dirichlet(p*ones(1,k), prod(CPD.sizes(1:end-1)), CPD.sizes));   
+      %CPD.CPT = myreshape(sample_dirichlet(p*ones(1,k), prod(CPD.sizes(1:end-1))), CPD.sizes);
+    else
+      CPD.CPT = myreshape(args{i+1}, CPD.sizes);
+    end
+   
+   case 'prior',       
+    if ischar(args{i+1}) & strcmp(args{i+1}, 'unif')
+      CPD.prior = myones(CPD.sizes);
+    elseif isscalarBNT(args{i+1})
+      CPD.prior = args{i+1} * normalise(myones(CPD.sizes));
+    else
+      CPD.prior = myreshape(args{i+1}, CPD.sizes);
+    end
+    
+   %case 'clamped',      CPD.clamped = strcmp(args{i+1}, 'yes');
+   %case 'clamped',      CPD = set_clamped(CPD, strcmp(args{i+1}, 'yes'));
+   case 'clamped',      CPD = set_clamped(CPD, args{i+1});
+    
+   case 'counts',      CPD.counts = args{i+1};
+   
+   otherwise,  
+    %error(['invalid argument name ' args{i}]);       
+  end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/tabular_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,173 @@
+function CPD = tabular_CPD(bnet, self, varargin)
+% TABULAR_CPD Make a multinomial conditional prob. distrib. (CPT)
+%
+% CPD = tabular_CPD(bnet, node) creates a random CPT.
+%
+% The following arguments can be specified [default in brackets]
+%
+% CPT - specifies the params ['rnd']
+%   - T means use table T; it will be reshaped to the size of node's family.
+%   - 'rnd' creates rnd params (drawn from uniform)
+%   - 'unif' creates a uniform distribution
+% adjustable - 0 means don't adjust the parameters during learning [1]
+% prior_type - defines type of prior ['none']
+%  - 'none' means do ML estimation
+%  - 'dirichlet' means add pseudo-counts to every cell
+%  - 'entropic' means use a prior P(theta) propto exp(-H(theta)) (see Brand)
+% dirichlet_weight - equivalent sample size (ess) of the dirichlet prior [1]
+% dirichlet_type - defines the type of Dirichlet prior ['BDeu']
+%  - 'unif' means put dirichlet_weight in every cell
+%  - 'BDeu' means we put 'dirichlet_weight/(r q)' in every cell
+%    where r = self_sz and q = prod(parent_sz) (see Heckerman)
+% trim - 1 means trim redundant params (rows in CPT) when using entropic prior [0]
+% entropic_pcases - list of assignments to the parents nodes when we should use 
+%      the entropic prior; all other cases will be estimated using ML [1:psz]
+% sparse - 1 means use 1D sparse array to represent CPT [0]
+%
+% e.g., tabular_CPD(bnet, i, 'CPT', T)
+% e.g., tabular_CPD(bnet, i, 'CPT', 'unif', 'dirichlet_weight', 2, 'dirichlet_type', 'unif')
+%
+% REFERENCES
+% M. Brand - "Structure learning in conditional probability models via an entropic  prior
+%   and parameter extinction", Neural Computation 11 (1999): 1155--1182
+% M. Brand - "Pattern discovery via entropy minimization" [covers annealing]
+%   AI & Statistics 1999. Equation numbers refer to this paper, which is available from
+%   www.merl.com/reports/docs/TR98-21.pdf
+% D. Heckerman, D. Geiger and M. Chickering, 
+%   "Learning Bayesian networks: the combination of knowledge and statistical data",
+%   Microsoft Research Tech Report, 1994
+
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  CPD = class(CPD, 'tabular_CPD', discrete_CPD(0, []));
+  return;
+elseif isa(bnet, 'tabular_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+
+ns = bnet.node_sizes;
+ps = parents(bnet.dag, self);
+fam_sz = ns([ps self]);
+psz = prod(ns(ps));
+CPD.sizes = fam_sz;
+CPD.leftright = 0;
+CPD.sparse = 0;
+
+% set defaults
+CPD.CPT = mk_stochastic(myrand(fam_sz));
+CPD.adjustable = 1;
+CPD.prior_type = 'none';
+dirichlet_type = 'BDeu';
+dirichlet_weight = 1;
+CPD.trim = 0;
+selfprob = 0.1;
+CPD.entropic_pcases = 1:psz;
+
+% extract optional args
+args = varargin;
+% check for old syntax CPD(bnet, i, CPT) as opposed to CPD(bnet, i, 'CPT', CPT)
+if ~isempty(args) & ~isstr(args{1})
+  CPD.CPT = myreshape(args{1}, fam_sz);
+  args = [];
+end
+
+for i=1:2:length(args)
+  switch args{i},
+   case 'CPT',
+    T = args{i+1};
+    if ischar(T)
+      switch T
+       case 'unif', CPD.CPT = mk_stochastic(myones(fam_sz));
+       case 'rnd',  CPD.CPT = mk_stochastic(myrand(fam_sz));
+       otherwise,   error(['invalid CPT ' T]);       
+      end
+    else
+      CPD.CPT = myreshape(T, fam_sz);
+    end
+   case 'prior_type', CPD.prior_type = args{i+1};
+   case 'dirichlet_type', dirichlet_type = args{i+1};
+   case 'dirichlet_weight', dirichlet_weight = args{i+1};
+   case 'adjustable', CPD.adjustable = args{i+1};
+   case 'clamped', CPD.adjustable = ~args{i+1};
+   case 'trim', CPD.trim = args{i+1};
+   case 'entropic_pcases', CPD.entropic_pcases = args{i+1};
+   case 'sparse', CPD.sparse = args{i+1};
+   otherwise, error(['invalid argument name: ' args{i}]);       
+  end
+end
+
+switch CPD.prior_type
+ case 'dirichlet',
+  switch dirichlet_type
+   case 'unif', CPD.dirichlet = dirichlet_weight * myones(fam_sz);
+   case 'BDeu',  CPD.dirichlet = (dirichlet_weight/psz) * mk_stochastic(myones(fam_sz));
+   otherwise, error(['invalid dirichlet_type ' dirichlet_type])
+  end
+ case {'entropic', 'none'}
+  CPD.dirichlet = [];
+ otherwise, error(['invalid prior_type ' prior_type])
+end
+
+  
+
+% fields to do with learning
+if ~CPD.adjustable
+  CPD.counts = [];
+  CPD.nparams = 0;
+  CPD.nsamples = [];
+else
+  %CPD.counts = zeros(size(CPD.CPT));
+  CPD.counts = zeros(prod(size(CPD.CPT)), 1);
+  psz = fam_sz(1:end-1);
+  ss = fam_sz(end);
+  if CPD.leftright
+    % For each of the Qps contexts, we specify Q elements on the diagoanl
+    CPD.nparams = Qps * Q;
+  else
+    % sum-to-1 constraint reduces the effective arity of the node by 1
+    CPD.nparams = prod([psz ss-1]);
+  end
+  CPD.nsamples = 0;
+end
+
+CPD.trimmed_trans = [];
+fam_sz = CPD.sizes;
+
+%psz = prod(fam_sz(1:end-1));
+%ssz = fam_sz(end);
+%CPD.trimmed_trans = zeros(psz, ssz); % must declare before reading
+
+%sparse CPT
+if CPD.sparse
+   CPD.CPT = sparse(CPD.CPT(:));
+end
+
+CPD = class(CPD, 'tabular_CPD', discrete_CPD(~CPD.adjustable, fam_sz));
+
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.CPT = [];
+CPD.sizes = [];
+CPD.prior_type = [];
+CPD.dirichlet = [];
+CPD.adjustable = [];
+CPD.counts = [];
+CPD.nparams = [];
+CPD.nsamples = [];
+CPD.trim = [];
+CPD.trimmed_trans = [];
+CPD.leftright = [];
+CPD.entropic_pcases = [];
+CPD.sparse = [];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/update_ess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+% UPDATE_ESS Update the Expected Sufficient Statistics of a tabular node.
+% function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)
+
+dom = fmarginal.domain;
+
+if all(hidden_bitv(dom))
+  CPD = update_ess_simple(CPD, fmarginal.T);
+  %fullm = add_ev_to_dmarginal(fmarginal, evidence, ns);
+  %assert(approxeq(fullm.T(:), fmarginal.T(:)))
+else
+  fullm = add_ev_to_dmarginal(fmarginal, evidence, ns);
+  CPD = update_ess_simple(CPD, fullm.T);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_CPD/update_ess_simple.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function CPD = update_ess_simple(CPD, counts)
+% UPDATE_ESS_SIMPLE Update the Expected Sufficient Statistics of a tabular node.
+% function CPD = update_ess_simple(CPD, counts)
+
+CPD.nsamples = CPD.nsamples + 1;            
+CPD.counts = CPD.counts + counts(:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/CPD_to_CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function CPT = CPD_to_CPT(CPD)
+% CPD_TO_CPT Convert the tabular_decision_node to a CPT
+% CPT = CPD_to_CPT(CPD)
+
+CPT = CPD.CPT;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/CPD_to_CPT.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/display.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/get_field.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/set_fields.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/tabular_decision_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@tabular_decision_node
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/tabular_decision_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@tabular_decision_node/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/Old/tabular_decision_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function CPD = tabular_decision_node(sz, CPT)
+% TABULAR_DECISION_NODE Represent the randomized policy over a discrete decision/action node as a table
+% CPD = tabular_decision_node(sz, CPT)
+%
+% sz(1:end-1) is the sizes of the parents, sz(end) is the size of this node
+% By default, CPT is set to the uniform random policy
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  CPD = class(CPD, 'tabular_decision_node');
+  return;
+elseif isa(sz, 'tabular_decision_node')
+  % This might occur if we are copying an object.
+  CPD = sz;
+  return;
+end
+CPD = init_fields;
+
+if nargin < 2
+  CPT = mk_stochastic(myones(sz)); 
+else
+  CPT = myreshape(CPT, sz);
+end
+
+CPD.CPT = CPT;
+CPD.size = sz;
+
+CPD = class(CPD, 'tabular_decision_node');
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.CPT = [];
+CPD.size = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(CPD)
+
+disp('tabular decision node object');
+disp(struct(CPD)); 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/get_field.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function vals = get_field(CPD, name)
+% GET_PARAMS Get the parameters (fields) for a tabular_decision_node object
+% vals = get_params(CPD, name)
+%
+% The following fields can be accessed
+%
+% policy - the table containing the policy
+%
+% e.g., policy = get_params(CPD, 'policy')
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'policy',  vals =  CPD.CPT;
+   otherwise,
+    error(['invalid argument name ' args{i}]);
+  end
+end               
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/set_fields.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function CPD = set_params(CPD, varargin)
+% SET_PARAMS Set the parameters (fields) for a tabular_decision_node object
+% CPD = set_params(CPD, name/value pairs)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+%
+% policy - the table containing the policy
+%
+% e.g., CPD = set_params(CPD, 'policy', T)
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'policy',   CPD.CPT = args{i+1};
+   otherwise,
+    error(['invalid argument name ' args{i}]);
+  end
+end               
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_decision_node/tabular_decision_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function CPD = tabular_decision_node(bnet, self, CPT)
+% TABULAR_DECISION_NODE Represent a stochastic policy over a discrete decision/action node as a table
+% CPD = tabular_decision_node(bnet, self, CPT)
+%
+% node is the number of a node in this equivalence class.
+% CPT is an optional argument (see tabular_CPD for details); by default, it is the uniform policy.
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  CPD = class(CPD, 'tabular_decision_node', discrete_CPD(1, []));
+  return;
+elseif isa(bnet, 'tabular_decision_node')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+
+ns = bnet.node_sizes;
+fam = family(bnet.dag, self);
+ps = parents(bnet.dag, self);
+sz = ns(fam);
+
+if nargin < 3
+  CPT = mk_stochastic(myones(sz)); 
+else
+  CPT = myreshape(CPT, sz);
+end
+
+CPD.CPT = CPT;
+CPD.sizes = sz; 
+
+clamped = 1; % don't update using EM
+CPD = class(CPD, 'tabular_decision_node', discrete_CPD(clamped, ns([ps self])));
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.CPT = [];
+CPD.sizes = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/convert_to_pot.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/convert_to_table.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/get_field.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/set_fields.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/tabular_kernel.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@tabular_kernel
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/tabular_kernel.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@tabular_kernel/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/Old/tabular_kernel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function K = tabular_kernel(fg, self)
+% TABULAR_KERNEL Make a table-based local kernel (discrete potential)
+% K = tabular_kernel(fg, self)
+%
+% fg is a factor graph
+% self is the number of a representative domain
+%
+% Use 'set_params_kernel' to adjust the following fields
+%   table - a q[1]xq[2]x... array, where q[i] is the number of values for i'th node
+%       in this domain [default: random values from [0,1], which need not sum to 1]
+
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  K = init_fields;
+  K = class(K, 'tabular_kernel');
+  return;
+elseif isa(fg, 'tabular_kernel')
+  % This might occur if we are copying an object.
+  K = fg;
+  return;
+end
+K = init_fields;
+
+ns = fg.node_sizes;
+dom = fg.doms{self};
+% we don't store the actual domain since it may vary due to parameter tieing
+K.sz = ns(dom);
+K.table = myrand(K.sz);
+
+K = class(K, 'tabular_kernel');
+
+
+%%%%%%%
+
+
+function K = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+K.table = [];
+K.sz = [];
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/convert_to_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function pot = convert_to_pot(CPD, pot_type, domain, evidence)
+% CONVERT_TO_POT Convert a tabular CPD to one or more potentials
+% pot = convert_to_pot(CPD, pot_type, domain, evidence)
+
+% This is the same as discrete_CPD/convert_to_pot,
+% except we didn't want to the kernel to inherit methods like sample_node etc.
+
+sz = CPD.sz;
+ns = zeros(1, max(domain));
+ns(domain) = sz;
+
+odom = domain(~isemptycell(evidence(domain)));
+T = convert_to_table(CPD, domain, evidence);
+
+switch pot_type
+ case 'u',
+  pot = upot(domain, sz, T, 0*myones(sz));  
+ case 'd',
+  ns(odom) = 1;
+  pot = dpot(domain, ns(domain), T);          
+ case 'c',
+  % Since we want the output to be a Gaussian, the whole family must be observed.
+  % In other words, the potential is really just a constant.
+  p = T.p;
+  %p = prob_node(CPD, evidence(domain(end)), evidence(domain(1:end-1)));
+  ns(domain) = 0;
+  pot = cpot(domain, ns(domain), log(p));       
+ case 'cg',
+  T = T(:);
+  ns(odom) = 1;
+  can = cell(1, length(T));
+  for i=1:length(T)
+    can{i} = cpot([], [], log(T(i)));
+  end
+  pot = cgpot(domain, [], ns, can);   
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/convert_to_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function T = convert_to_table(CPD, domain, evidence)
+% CONVERT_TO_TABLE Convert a discrete CPD to a table
+% T = convert_to_table(CPD, domain, evidence)
+%
+% We convert the CPD to a CPT, and then lookup the evidence on the discrete parents.
+% The resulting table can easily be converted to a potential.
+
+CPT = CPD.table;
+odom = domain(~isemptycell(evidence(domain)));
+vals = cat(1, evidence{odom});
+map = find_equiv_posns(odom, domain);
+index = mk_multi_index(length(domain), map, vals);
+T = CPT(index{:});               
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/get_field.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function val = get_params_kernel(K, name)
+% GET_PARAMS_KERNEL Accessor function for a field (tabular_kernel)
+% val = get_params_kernel(K, name)
+%
+% e.g., get_params_kernel(K, 'table')
+
+switch name
+ case 'table', val = K.table;
+ otherwise,
+  error(['invalid field name ' name]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/set_fields.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function K = set_params_kernel(K, name, val)
+% SET_PARAMS_KERNEL Accessor function for a field (table_kernel)
+% K = set_params_kernel(K, name, val)
+%
+% e.g., K = set_params_kernel(K, 'table', rand(2,3,2)) for a kernel on 3 nodes with 2,3,2 values each
+
+% We should check if the arguments are valid...
+
+switch name
+ case 'table', K.table = val;
+ otherwise,
+  error(['invalid field name ' name]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_kernel/tabular_kernel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function K = tabular_kernel(sz, table)
+% TABULAR_KERNEL Make a table-based local kernel (discrete potential)
+% K = tabular_kernel(sz, table)
+%
+% sz(i) is the number of values the i'th member of this kernel can have
+% table is an optional array of size sz[1] x sz[2] x... [default: random]
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  K = init_fields;
+  K = class(K, 'tabular_kernel');
+  return;
+elseif isa(sz, 'tabular_kernel')
+  % This might occur if we are copying an object.
+  K = sz;
+  return;
+end
+K = init_fields;
+
+if nargin < 2, table = myrand(sz); end
+
+K.sz = sz;
+K.table = table;
+
+K = class(K, 'tabular_kernel');
+
+
+%%%%%%%
+
+
+function K = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+K.sz = [];
+K.table = [];
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/convert_to_pot.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/display.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/tabular_utility_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@tabular_utility_node
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/convert_to_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function pot = convert_to_pot(CPD, pot_type, domain, evidence)
+% CONVERT_TO_POT Convert a tabular utility node to one or more potentials
+% pot = convert_to_pot(CPD, pot_type, domain, evidence)
+
+switch pot_type
+ case 'u',
+  sz = [CPD.sizes 1]; % the utility node itself has size 1
+  pot = upot(domain, sz, 1*myones(sz), myreshape(CPD.T, sz));   
+ otherwise,
+  error(['can''t convert a utility node to a ' pot_type ' potential']);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(CPD)
+
+disp('tabular utility node object');
+disp(struct(CPD)); 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tabular_utility_node/tabular_utility_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+function CPD = tabular_utility_node(bnet, node, T)
+% TABULAR_UTILITY_NODE Represent a utility function as a table
+% CPD = tabular_utility_node(bnet, node, T)
+%
+% node is the number of a node in this equivalence class.
+% T is an optional argument (same shape as the CPT in tabular_CPD, but missing the last (child)
+% dimension). By default, entries in T are chosen u.a.r. from 0:1 (using 'rand').
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  clamp = 0;
+  CPD = class(CPD, 'tabular_utility_node');
+  return;
+elseif isa(bnet, 'tabular_utility_node')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+
+
+ns = bnet.node_sizes;
+ps = parents(bnet.dag, node);
+sz = ns(ps);
+
+if nargin < 3
+  T = myrand(sz);
+else
+  T = myreshape(T, sz);
+end
+
+CPD.T = T;
+CPD.sizes = sz;
+
+CPD = class(CPD, 'tabular_utility_node');
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.T = [];
+CPD.sizes = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+/display.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/evaluate_tree_performance.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/get_field.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/learn_params.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/readme.txt/1.1.1.1/Wed May 29 15:59:54 2002//
+/set_fields.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/tree_CPD.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/@tree_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(CPD)
+
+disp('dtree_CPD object');
+disp(struct(CPD)); 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/evaluate_tree_performance.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,82 @@
+function [score,outputs] = evaluate(CPD, fam, data, ns, cnodes)
+% Evaluate evaluate the performance of the classification/regression tree on given complete data
+% score = evaluate(CPD, fam, data, ns, cnodes)
+%
+% fam(i) is the node id of the i-th node in the family of nodes, self node is the last one
+% data(i,m) is the value of node i in case m (can be cell array).
+% ns(i) is the node size for the i-th node in the whold bnet
+% cnodes(i) is the node id for the i-th continuous node in the whole bnet
+%  
+% Output
+% score is the classification accuracy (for classification) 
+%          or mean square deviation (for regression)
+%            here for every case we use the mean value at the tree leaf node as its predicted value
+% outputs(i) is the predicted output value for case i
+%
+% Author: yimin.zhang@intel.com
+% Last updated: Jan. 19, 2002
+
+
+if iscell(data)
+  local_data = cell2num(data(fam,:));
+else
+  local_data = data(fam, :);
+end
+
+%get local node sizes and node types
+node_sizes = ns(fam);
+node_types = zeros(1,size(ns,2)); %all nodes are disrete
+node_types(cnodes)=1;
+node_types=node_types(fam);
+
+fam_size=size(fam,2);
+output_type = node_types(fam_size);
+
+num_cases=size(local_data,2);
+total_error=0;
+
+outputs=zeros(1,num_cases);
+for i=1:num_cases
+  %class one case using the tree
+  cur_node=CPD.tree.root;  % at the root node of the tree
+  while (1)
+    if (CPD.tree.nodes(cur_node).is_leaf==1)
+      if (output_type==0) %output is discrete
+        %use the class with max probability as the output  
+        [maxvalue,class_id]=max(CPD.tree.nodes(cur_node).probs);
+        outputs(i)=class_id;
+        if (class_id~=local_data(fam_size,i))
+          total_error=total_error+1;
+        end
+      else   %output is continuous
+        %use the mean as the value
+        outputs(i)=CPD.tree.nodes(cur_node).mean;
+        cur_deviation = CPD.tree.nodes(cur_node).mean-local_data(fam_size,i);
+        total_error=total_error+cur_deviation*cur_deviation;
+      end
+      break;
+    end
+    cur_attr = CPD.tree.nodes(cur_node).split_id; 
+    attr_val = local_data(cur_attr,i);
+    if (node_types(cur_attr)==0)  %discrete attribute
+        % goto the attr_val -th child
+        cur_node = CPD.tree.nodes(cur_node).children(attr_val);
+    else
+        if (attr_val <= CPD.tree.nodes(cur_node).split_threshhold)
+          cur_node = CPD.tree.nodes(cur_node).children(1);
+        else
+          cur_node = CPD.tree.nodes(cur_node).children(2);  
+        end
+    end
+    if (cur_node > CPD.tree.num_node)
+      fprintf('Fatal error: Tree structure corrupted.\n');
+      return;
+    end
+  end
+  %update the classification error number
+end
+if (output_type==0)
+  score=1-total_error/num_cases;
+else
+  score=total_error/num_cases;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/get_field.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function val = get_params(CPD, name)
+% GET_PARAMS Get the parameters (fields) for a tabular_CPD object
+% val = get_params(CPD, name)
+%
+% The following fields can be accessed
+%
+% cpt       - the CPT
+%
+% e.g., CPT = get_params(CPD, 'cpt')
+
+switch name
+ case 'cpt',      val = CPD.CPT;
+ case 'tree',     val = CPD.tree;
+ otherwise,
+  error(['invalid argument name ' name]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/learn_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,642 @@
+function CPD = learn_params(CPD, fam, data, ns, cnodes, varargin)
+% LEARN_PARAMS Construct classification/regression tree given complete data
+% CPD = learn_params(CPD, fam, data, ns, cnodes)
+%
+% fam(i) is the node id of the i-th node in the family of nodes, self node is the last one
+% data(i,m) is the value of node i in case m (can be cell array).
+% ns(i) is the node size for the i-th node in the whold bnet
+% cnodes(i) is the node id for the i-th continuous node in the whole bnet
+%  
+% The following optional arguments can be specified in the form of name/value pairs:
+% stop_cases: for early stop (pruning). A node is not split if it has less than k cases. default is 0.
+% min_gain: for early stop (pruning). 
+%     For discrete output: A node is not split when the gain of best split is less than min_gain. default is 0.  
+%     For continuous (cts) outpt: A node is not split when the gain of best split is less than min_gain*score(root) 
+%                                 (we denote it cts_min_gain). default is 0.006
+% %%%%%%%%%%%%%%%%%%%Struction definition of dtree_CPD.tree%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% tree.num_node               the last position in tree.nodes array for adding new nodes,
+%                             it is not always same to number of nodes in a tree, because some position in the 
+%                             tree.nodes array can be set to unused (e.g. in tree pruning)  
+% tree.nodes is the array of nodes in the tree plus some unused nodes.
+% tree.nodes(1) is the root for the tree.
+%
+% Below is the attributes for each node
+% tree.nodes(i).used;     % flag this node is used (0 means node not used, it can be removed from tree to save memory)
+% tree.nodes(i).is_leaf;  % if 1 means this node is a leaf, if 0 not a leaf.
+% tree.nodes(i).children; % children(i) is the node number in tree.nodes array for the i-th child node
+% tree.nodes(i).split_id; % the attribute id used to split this node
+% tree.nodes(i).split_threshhold; % the threshhold for continuous attribute to split this node
+% %%%%%attributes specially for classification tree (discrete output)
+% tree.nodes(i).probs     % probs(i) is the prob for i-th value of class node 
+%                         % For three output class, the probs = [0.9 0.1 0.0] means the probability of 
+%                         % class 1 is 0.9, for class 2 is 0.1, for class 3 is 0.0.
+% %%%%%attributes specially for regression tree (continuous output)                          
+% tree.nodes(i).mean      % mean output value for this node
+% tree.nodes(i).std       % standard deviation for output values in this node
+%
+% Author: yimin.zhang@intel.com
+% Last updated: Jan. 19, 2002
+
+% Want list:
+% (1) more efficient for cts attributes: get the values of cts attributes at first (the begining of build_tree function), then doing bi_search in finding threshhold
+% (2) pruning classification tree using Pessimistic Error Pruning
+% (3) bi_search for strings (used for transform data to BNT format)
+
+global tree %tree must be global so that it can be accessed in recursive slitting function
+global cts_min_gain
+tree=[]; % clear the tree
+tree.num_node=0;
+cts_min_gain=0;
+
+stop_cases=0;
+min_gain=0;
+
+args = varargin;
+nargs = length(args);
+if (nargs>0)
+  if isstr(args{1})
+    for i=1:2:nargs
+      switch args{i},
+        case 'stop_cases', stop_cases = args{i+1};   
+        case 'min_gain', min_gain = args{i+1};
+      end
+    end
+  else
+    error(['error in input parameters']);
+  end
+end
+
+if iscell(data)
+  local_data = cell2num(data(fam,:));
+else
+  local_data = data(fam, :);
+end
+%counts = compute_counts(local_data, CPD.sizes);
+%CPD.CPT = mk_stochastic(counts + CPD.prior); % bug fix 11/5/01
+node_types = zeros(1,size(ns,2)); %all nodes are disrete
+node_types(cnodes)=1;
+%make the data be BNT compliant (values for discrete nodes are from 1-n, here n is the node size)
+%trans_data=transform_data(local_data,'tmp.dat',[]); %here no cts nodes
+
+build_dtree (CPD, local_data, ns(fam), node_types(fam),stop_cases,min_gain);
+%CPD.tree=copy_tree(tree);
+CPD.tree=tree; %copy the tree constructed to CPD
+
+
+function new_tree = copy_tree(tree)
+% copy the tree to new_tree
+new_tree.num_node=tree.num_node;
+new_tree.root = tree.root;
+for i=1:tree.num_node
+  new_tree.nodes(i)=tree.nodes(i);
+end
+
+
+function build_dtree (CPD, fam_ev, node_sizes, node_types,stop_cases,min_gain)
+global tree
+global cts_min_gain
+
+tree.num_node=0; %the current number of nodes in the tree
+tree.root=1;
+
+T = 1:size(fam_ev,2) ; %all cases
+candidate_attrs = 1:(size(node_sizes,2)-1); %all attributes
+node_id=1;  %the root node
+lastnode=size(node_sizes,2); %the last element in all nodes is the dependent variable (category node)
+num_cat=node_sizes(lastnode);
+
+% get minimum gain for cts output (used in stop splitting)
+if (node_types(size(fam_ev,1))==1) %cts output
+  N = size(fam_ev,2);
+  output_id = size(fam_ev,1);
+  cases_T = fam_ev(output_id,:); %get all the output value for cases T
+  std_T = std(cases_T);
+  avg_y_T = mean(cases_T);
+  sqr_T = cases_T - avg_y_T;
+  cts_min_gain = min_gain*(sum(sqr_T.*sqr_T)/N);  % min_gain * (R(root) = 1/N * SUM(y-avg_y)^2)
+end  
+
+split_dtree (CPD, fam_ev, node_sizes, node_types, stop_cases,min_gain, T, candidate_attrs, num_cat);
+  
+
+
+% pruning method
+% (1) Restrictions on minimum node size: A node is not split if it has smaller than k cases.
+% (2) Threshholds on impurity: a threshhold is imposed on the splitting test score. Threshhold can be 
+% imposed on local goodness measure (the gain_ratio of a node) or global goodness.
+% (3) Mininum Error Pruning (MEP), (no need pruning set)
+%     Prune if static error<=backed-up error
+%      Static error at node v: e(v) = (Nc + 1)/(N+k) (laplace estimate, prior for each class equal) 
+%        here N is # of all examples, Nc is # of majority class examples, k is number of classes 
+%      Backed-up error at node v: (Ti is the i-th subtree root)
+%         E(T) = Sum_1_to_n(pi*e(Ti))
+% (4) Pessimistic Error Pruning (PEP), used in Quilan C4.5 (no need pruning set, efficient because of pruning top-down)
+%       Probability of error (apparent error rate)
+%           q = (N-Nc+0.5)/N
+%         where N=#examples, Nc=#examples in majority class
+%     Error of a node v (if pruned)  q(v)= (Nv- Nc,v + 0.5)/Nv
+%     Error of a subtree   q(T)= Sum_of_l_leaves(Nl - Nc,l + 0.5)/Sum_of_l_leaves(Nl)
+%     Prune if q(v)<=q(T)
+% 
+% Implementation statuts:
+% (1)(2) has been implemented as the input parameters of learn_params.
+% (4) is implemented in this function
+function pruning(fam_ev,node_sizes,node_types)
+% PRUNING prune the constructed tree using PEP
+% pruning(fam_ev,node_sizes,node_types)
+%
+% fam_ev(i,j)  is the value of attribute i in j-th training cases (for whole tree), the last row is for the class label (self_ev)
+% node_sizes(i) is the node size for the i-th node in the family
+% node_types(i) is the node type for the i-th node in the family, 0 for disrete node, 1 for continous node
+% the global parameter 'tree' is for storing the input tree and the pruned tree
+
+
+function split_T = split_cases(fam_ev,node_sizes,node_types,T,node_i, threshhold)
+% SPLIT_CASES split the cases T according to values of node_i in the family
+% split_T = split_cases(fam_ev,node_sizes,node_types,T,node_i)
+%
+% fam_ev(i,j)  is the value of attribute i in j-th training cases (for whole tree), the last row is for the class label (self_ev)
+% node_sizes(i) is the node size for the i-th node in the family
+% node_types(i) is the node type for the i-th node in the family, 0 for disrete node, 1 for continous node
+% node_i is the attribute we need to split
+
+if (node_types(node_i)==0) %discrete attribute
+  %init the subsets of T
+  split_T = cell(1,node_sizes(node_i)); %T will be separated into |node_size of i| subsets according to different values of node i
+  for i=1:node_sizes(node_i)   % here we assume that the value of an attribute is 1:node_size
+    split_T{i}=zeros(1,0);
+  end
+
+  size_t = size(T,2);
+  for i=1:size_t
+    case_id = T(i);
+    %put this case into one subset of split_T according to its value for node_i
+    value = fam_ev(node_i,case_id); 
+    pos = size(split_T{value},2)+1;
+    split_T{value}(pos)=case_id;  % here assumes the value of an attribute is 1:node_size 
+  end
+else %continuous attribute
+  %init the subsets of T
+  split_T = cell(1,2); %T will be separated into 2 subsets (<=threshhold) (>threshhold)
+  for i=1:2   
+    split_T{i}=zeros(1,0);
+  end
+
+  size_t = size(T,2);
+  for i=1:size_t
+    case_id = T(i);
+    %put this case into one subset of split_T according to its value for node_i
+    value = fam_ev(node_i,case_id); 
+    subset_num=1;
+    if (value>threshhold)
+      subset_num=2;
+    end  
+    pos = size(split_T{subset_num},2)+1;
+    split_T{subset_num}(pos)=case_id;  
+  end
+end
+
+
+  
+function new_node = split_dtree (CPD, fam_ev, node_sizes, node_types, stop_cases, min_gain, T, candidate_attrs, num_cat)
+% SPLIT_TREE Split the tree at node node_id with cases T (actually it is just indexes to family evidences).
+% new_node = split_dtree (fam_ev, node_sizes, node_types, T, node_id, num_cat, method)
+%
+% fam_ev(i,j)  is the value of attribute i in j-th training cases (for whole tree), the last row is for the class label (self_ev)
+% node_sizes{i} is the node size for the i-th node in the family
+% node_types{i} is the node type for the i-th node in the family, 0 for disrete node, 1 for continous node
+% stop_cases is the threshold of number of cases to stop slitting
+% min_gain is the minimum gain need to split a node
+% T(i) is the index of i-th cases in current decision tree node, we need split it further
+% candidate_attrs(i) the node id for the i-th attribute that still need to be considered as split attribute 
+%%%%% node_id is the index of current node considered for a split
+% num_cat is the number of output categories for the decision tree
+% output:
+% new_node is the new node created
+global tree
+global cts_min_gain
+
+size_fam = size(fam_ev,1);            %number of family size
+output_type = node_types(size_fam);   %the type of output for the tree (0 is discrete, 1 is continuous)
+size_attrs = size(candidate_attrs,2); %number of candidate attributes
+size_t = size(T,2);                   %number of training cases in this tree node
+
+%(1)computeFrequenceyForEachClass(T)
+if (output_type==0) %discrete output
+  class_freqs = zeros(1,num_cat);
+  for i=1:size_t
+    case_id = T(i);
+    case_class = fam_ev(size_fam,case_id); %get the class label for this case
+    class_freqs(case_class)=class_freqs(case_class)+1;
+  end
+else  %cts output
+  N = size(fam_ev,2);
+  cases_T = fam_ev(size(fam_ev,1),T); %get the output value for cases T
+  std_T = std(cases_T);
+end
+
+%(2) if OneClass (for discrete output) or same output value (for cts output) or Class With #examples < stop_cases
+%         return a leaf;
+%    create a decision node N;
+
+% get majority class in this node
+if (output_type == 0)
+  top1_class = 0;       %the class with the largest number of cases
+  top1_class_cases = 0; %the number of cases in top1_class
+  [top1_class_cases,top1_class]=max(class_freqs);
+end
+  
+if (size_t==0)     %impossble
+  new_node=-1;
+  fprintf('Fatal error: please contact the author. \n');
+  return;
+end
+
+% stop splitting if needed
+  %for discrete output: one class 
+  %for cts output, all output value in cases are same
+  %cases too little
+if ( (output_type==0 & top1_class_cases == size_t) | (output_type==1 & std_T == 0) | (size_t < stop_cases))             
+  %create one new leaf node
+  tree.num_node=tree.num_node+1;
+  tree.nodes(tree.num_node).used=1; %flag this node is used (0 means node not used, it will be removed from tree at last to save memory)
+  tree.nodes(tree.num_node).is_leaf=1;
+  tree.nodes(tree.num_node).children=[];
+  tree.nodes(tree.num_node).split_id=0;  %the attribute(parent) id to split this tree node
+  tree.nodes(tree.num_node).split_threshhold=0;  
+  if (output_type==0)
+    tree.nodes(tree.num_node).probs=class_freqs/size_t; %the prob for each value of class node 
+
+    %  tree.nodes(tree.num_node).probs=zeros(1,num_cat); %the prob for each value of class node 
+    %  tree.nodes(tree.num_node).probs(top1_class)=1; %use the majority class of parent node, like for binary class, 
+                                                   %and majority is class 2, then the CPT is [0 1]
+                                                   %we may need to use prior to do smoothing, to get [0.001 0.999]
+    tree.nodes(tree.num_node).error.self_error=1-top1_class_cases/size_t; %the classfication error in this tree node when use default class
+    tree.nodes(tree.num_node).error.all_error=1-top1_class_cases/size_t;  %no total classfication error in this tree node and its subtree
+    tree.nodes(tree.num_node).error.all_error_num=size_t - top1_class_cases;
+    fprintf('Create leaf node(onecla) %d. Class %d Cases %d Error %d \n',tree.num_node, top1_class, size_t, size_t - top1_class_cases );
+  else
+    avg_y_T = mean(cases_T);
+    tree.nodes(tree.num_node).mean = avg_y_T; 
+    tree.nodes(tree.num_node).std = std_T;
+    fprintf('Create leaf node(samevalue) %d. Mean %8.4f Std %8.4f Cases %d \n',tree.num_node, avg_y_T, std_T, size_t);
+  end  
+  new_node = tree.num_node;
+  return;
+end
+    
+%create one new node
+tree.num_node=tree.num_node+1;
+tree.nodes(tree.num_node).used=1; %flag this node is used (0 means node not used, it will be removed from tree at last to save memory)
+tree.nodes(tree.num_node).is_leaf=1;
+tree.nodes(tree.num_node).children=[];
+tree.nodes(tree.num_node).split_id=0;
+tree.nodes(tree.num_node).split_threshhold=0;  
+if (output_type==0)
+  tree.nodes(tree.num_node).error.self_error=1-top1_class_cases/size_t; 
+  tree.nodes(tree.num_node).error.all_error=0;
+  tree.nodes(tree.num_node).error.all_error_num=0;
+else
+  avg_y_T = mean(cases_T);
+  tree.nodes(tree.num_node).mean = avg_y_T; 
+  tree.nodes(tree.num_node).std = std_T;
+end
+new_node = tree.num_node;
+
+%Stop splitting if no attributes left in this node
+if (size_attrs==0) 
+  if (output_type==0)
+    tree.nodes(tree.num_node).probs=class_freqs/size_t; %the prob for each value of class node 
+    tree.nodes(tree.num_node).error.all_error=1-top1_class_cases/size_t;  
+    tree.nodes(tree.num_node).error.all_error_num=size_t - top1_class_cases;
+    fprintf('Create leaf node(noattr) %d. Class %d Cases %d Error %d \n',tree.num_node, top1_class, size_t, size_t - top1_class_cases );
+  else
+    fprintf('Create leaf node(noattr) %d. Mean %8.4f Std %8.4f Cases %d \n',tree.num_node, avg_y_T, std_T, size_t);
+  end
+  return;
+end
+      
+  
+%(3) for each attribute A
+%        ComputeGain(A);
+max_gain=0;  %the max gain score (for discrete information gain or gain ration, for cts node the R(T))
+best_attr=0;  %the attribute with the max_gain
+best_split = []; %the split of T according to the value of best_attr
+cur_best_threshhold = 0; %the threshhold for split continuous attribute
+best_threshhold=0;
+
+% compute Info(T) (for discrete output)
+if (output_type == 0)
+  class_split_T = split_cases(fam_ev,node_sizes,node_types,T,size(fam_ev,1),0); %split cases according to class
+  info_T = compute_info (fam_ev, T, class_split_T);
+else % compute R(T) (for cts output)
+%  N = size(fam_ev,2);
+%  cases_T = fam_ev(size(fam_ev,1),T); %get the output value for cases T
+%  std_T = std(cases_T);
+%  avg_y_T = mean(cases_T);
+  sqr_T = cases_T - avg_y_T;
+  R_T = sum(sqr_T.*sqr_T)/N;  % get R(T) = 1/N * SUM(y-avg_y)^2
+  info_T = R_T;
+end
+
+for i=1:(size_fam-1)
+  if (myismember(i,candidate_attrs))  %if this attribute still in the candidate attribute set
+    if (node_types(i)==0) %discrete attibute
+      split_T = split_cases(fam_ev,node_sizes,node_types,T,i,0); %split cases according to value of attribute i
+      % For cts output, we compute the least square gain.
+      % For discrete output, we compute gain ratio
+      cur_gain = compute_gain(fam_ev,node_sizes,node_types,T,info_T,i,split_T,0,output_type); %gain ratio
+    else %cts attribute
+      %get the values of this attribute
+      ev = fam_ev(:,T);
+      values = ev(i,:);
+      sort_v = sort(values); 
+        %remove the duplicate values in sort_v
+      v_set = unique(sort_v);  
+      best_gain = 0;
+      best_threshhold = 0;
+      best_split1 = [];
+      
+      %find the best split for this cts attribute
+      % see "Quilan 96: Improved Use of Continuous Attributes in C4.5"
+      for j=1:(size(v_set,2)-1)
+        mid_v = (v_set(j)+v_set(j+1))/2; 
+        split_T = split_cases(fam_ev,node_sizes,node_types,T,i,mid_v); %split cases according to value of attribute i (<=mid_v)
+        % For cts output, we compute the least square gain.
+        % For discrete output, we use Quilan 96: use information gain instead of gain ratio to select threshhold
+        cur_gain = compute_gain(fam_ev,node_sizes,node_types,T,info_T,i,split_T,1,output_type); 
+        %if (i==6)
+        %  fprintf('gain %8.5f threshhold %6.3f spliting %d\n', cur_gain, mid_v, size(split_T{1},2));
+        %end
+
+        if (best_gain < cur_gain)
+          best_gain = cur_gain;
+          best_threshhold = mid_v;
+          %best_split1 = split_T;     %here we need to copy array, not good!!! (maybe we can compute after we get best_attr
+        end
+      end
+      %recalculate the gain_ratio of the best_threshhold
+      split_T = split_cases(fam_ev,node_sizes,node_types,T,i,best_threshhold);
+      best_gain = compute_gain(fam_ev,node_sizes,node_types,T,info_T,i,split_T,0,output_type); %gain_ratio
+      if (output_type==0) %for discrete output
+        cur_gain = best_gain-log2(size(v_set,2)-1)/size_t; % Quilan 96: use the gain_ratio-log2(N-1)/|D| as the gain of this attr
+      else                %for cts output
+        cur_gain = best_gain;
+      end
+    end
+    
+    if (max_gain < cur_gain)
+      max_gain = cur_gain;
+      best_attr = i;
+      cur_best_threshhold=best_threshhold;  %save the threshhold
+      %best_split = split_T;        %here we need to copy array, not good!!! So we will recalculate in below line 313
+    end
+  end
+end
+
+% stop splitting if gain is too small
+if (max_gain==0 | (output_type==0 & max_gain < min_gain) | (output_type==1 & max_gain < cts_min_gain)) 
+  if (output_type==0)
+    tree.nodes(tree.num_node).probs=class_freqs/size_t; %the prob for each value of class node 
+    tree.nodes(tree.num_node).error.all_error=1-top1_class_cases/size_t;  
+    tree.nodes(tree.num_node).error.all_error_num=size_t - top1_class_cases;
+    fprintf('Create leaf node(nogain) %d. Class %d Cases %d Error %d \n',tree.num_node, top1_class, size_t, size_t - top1_class_cases );
+  else
+    fprintf('Create leaf node(nogain) %d. Mean %8.4f Std %8.4f Cases %d \n',tree.num_node, avg_y_T, std_T, size_t);
+  end
+  return;
+end
+
+%get the split of cases according to the best split attribute
+if (node_types(best_attr)==0) %discrete attibute
+  best_split = split_cases(fam_ev,node_sizes,node_types,T,best_attr,0);  
+else  
+  best_split = split_cases(fam_ev,node_sizes,node_types,T,best_attr,cur_best_threshhold);
+end
+  
+%(4) best_attr = AttributeWithBestGain;
+%(5) if best_attr is continuous             ???? why need this? maybe the value in the decision tree must appeared in data
+%       find threshhold in all cases that <= max_V
+%    change the split of T
+tree.nodes(tree.num_node).split_id=best_attr;
+tree.nodes(tree.num_node).split_threshhold=cur_best_threshhold; %for cts attribute only
+
+%note: below threshhold rejust is linera search, so it is slow. A better method is described in paper "Efficient C4.5"
+%if (output_type==0)
+if (node_types(best_attr)==1)  %is a continuous attribute
+  %find the value that approximate best_threshhold from below (the largest that <= best_threshhold)
+  best_value=0;
+  for i=1:size(fam_ev,2)  %note: need to search in all cases for all tree, not just in cases for this node
+    val = fam_ev(best_attr,i);
+    if (val <= cur_best_threshhold & val > best_value) %val is more clear to best_threshhold
+      best_value=val;
+    end
+  end
+  tree.nodes(tree.num_node).split_threshhold=best_value; %for cts attribute only
+end
+%end
+  
+if (output_type == 0)
+  fprintf('Create node %d split at %d gain %8.4f Th %d. Class %d Cases %d Error %d \n',tree.num_node, best_attr, max_gain, tree.nodes(tree.num_node).split_threshhold, top1_class, size_t, size_t - top1_class_cases );
+else
+  fprintf('Create node %d split at %d gain %8.4f Th %d. Mean %8.4f Cases %d\n',tree.num_node, best_attr, max_gain, tree.nodes(tree.num_node).split_threshhold, avg_y_T, size_t );
+end
+  
+%(6) Foreach T' in the split_T
+%        if T' is Empty
+%            Child of node_id is a leaf
+%        else
+%            Child of node_id = split_tree (T')
+tree.nodes(new_node).is_leaf=0; %because this node will be split, it is not leaf now
+for i=1:size(best_split,2)
+  if (size(best_split{i},2)==0) %T(i) is empty
+    %create one new leaf node
+    tree.num_node=tree.num_node+1;
+    tree.nodes(tree.num_node).used=1; %flag this node is used (0 means node not used, it will be removed from tree at last to save memory)
+    tree.nodes(tree.num_node).is_leaf=1;
+    tree.nodes(tree.num_node).children=[];
+    tree.nodes(tree.num_node).split_id=0;
+    tree.nodes(tree.num_node).split_threshhold=0;  
+    if (output_type == 0)
+      tree.nodes(tree.num_node).probs=zeros(1,num_cat); %the prob for each value of class node 
+      tree.nodes(tree.num_node).probs(top1_class)=1; %use the majority class of parent node, like for binary class, 
+                                                   %and majority is class 2, then the CPT is [0 1]
+                                                   %we may need to use prior to do smoothing, to get [0.001 0.999]
+      tree.nodes(tree.num_node).error.self_error=0; 
+      tree.nodes(tree.num_node).error.all_error=0;  
+      tree.nodes(tree.num_node).error.all_error_num=0;
+    else
+      tree.nodes(tree.num_node).mean = avg_y_T; %just use parent node's mean value
+      tree.nodes(tree.num_node).std = std_T;
+    end
+    %add the new leaf node to parents
+    num_children=size(tree.nodes(new_node).children,2);
+    tree.nodes(new_node).children(num_children+1)=tree.num_node;
+    if (output_type==0)
+      fprintf('Create leaf node(nullset) %d. %d-th child of Father %d Class %d\n',tree.num_node, i, new_node, top1_class );
+    else
+      fprintf('Create leaf node(nullset) %d. %d-th child of Father %d \n',tree.num_node, i, new_node );
+    end
+
+  else
+    if (node_types(best_attr)==0)  % if attr is discrete, it should be removed from the candidate set  
+      new_candidate_attrs = mysetdiff(candidate_attrs,[best_attr]);
+    else
+      new_candidate_attrs = candidate_attrs;
+    end
+    new_sub_node = split_dtree (CPD, fam_ev, node_sizes, node_types, stop_cases, min_gain, best_split{i}, new_candidate_attrs, num_cat);  
+    %tree.nodes(parent_id).error.all_error += tree.nodes(new_sub_node).error.all_error;
+    fprintf('Add subtree node %d to %d. #nodes %d\n',new_sub_node,new_node, tree.num_node );
+
+%   tree.nodes(new_node).error.all_error_num = tree.nodes(new_node).error.all_error_num + tree.nodes(new_sub_node).error.all_error_num;
+    %add the new leaf node to parents
+    num_children=size(tree.nodes(new_node).children,2);
+    tree.nodes(new_node).children(num_children+1)=new_sub_node;
+  end
+end   
+  
+%(7) Compute errors of N; for doing pruning
+%    get the total error for the subtree
+if (output_type==0)
+  tree.nodes(new_node).error.all_error=tree.nodes(new_node).error.all_error_num/size_t;
+end
+%doing pruning, but doing here is not so efficient, because it is bottom up.
+%if tree.nodes()
+%after doing pruning, need to update the all_error to self_error
+
+%(8) Return N
+  
+
+
+
+%(1) For discrete output, we use GainRatio defined as below
+%  			         Gain(X,T)
+% 	GainRatio(X,T) = ----------
+% 			         SplitInfo(X,T)
+%   where
+%   Gain(X,T) = Info(T) - Info(X,T)
+%    				                       |Ti|
+% 	Info(X,T) = Sum for i from 1 to n of ( ---- * Info(Ti))
+%                                          |T|
+ 			 
+%   SplitInfo(D,T) is the information due to the split of T on the basis
+%    of the value of the categorical attribute D. Thus SplitInfo(D,T) is
+%  		 I(|T1|/|T|, |T2|/|T|, .., |Tm|/|T|)
+%    where {T1, T2, .. Tm} is the partition of T induced by the value of D.
+
+%   Definition of Info(Ti)
+%     If a set T of records is partitioned into disjoint exhaustive classes C1, C2, .., Ck on the basis of the 
+%     value of the categorical attribute, then the information needed to identify the class of an element of T 
+%     is Info(T) = I(P), where P is the probability distribution of the partition (C1, C2, .., Ck): 
+%     	P = (|C1|/|T|, |C2|/|T|, ..., |Ck|/|T|)
+%     Here I(P) is defined as
+%       I(P) = -(p1*log(p1) + p2*log(p2) + .. + pn*log(pn))
+% 
+%(2) For continuous output (regression tree), we use least squares score (adapted from Leo Breiman's book "Classification and regression trees", page 231
+%    The original support only binary split, we further extend it to permit multiple-child split
+%                                        
+%     Delta_R = R(T) - Sum for all childe nodes Ti (R(Ti))
+%     Where R(Ti)= 1/N * Sum for all cases i in node Ti ((yi - avg_y(Ti))^2)
+%     here N is the number of all training cases for construct the regression tree
+%          avg_y(Ti) is the average value for output variable for the cases in node Ti
+
+function gain_score = compute_gain (fam_ev, node_sizes, node_types, T, info_T, attr_id, split_T, score_type, output_type)
+% COMPUTE_GAIN Compute the score for the split of cases T using attribute attr_id
+% gain_score = compute_gain (fam_ev, T, attr_id, node_size, method)
+%
+% fam_ev(i,j)  is the value of attribute i in j-th training cases, the last row is for the class label (self_ev)
+% T(i) is the index of i-th cases in current decision tree node, we need split it further
+% attr_id is the index of current node considered for a split
+% split_T{i} is the i_th subset in partition of cases T according to the value of attribute attr_id
+% score_type if 0, is gain ratio, 1 is information gain (only apply to discrete output)
+% node_size(i) the node size of i-th node in the family
+% output_type: 0 means discrete output, 1 means continuous output.
+gain_score=0;
+% ***********for DISCRETE output*******************************************************
+if (output_type == 0)
+  % compute Info(T)
+  total_cnt = size(T,2);
+  if (total_cnt==0)
+    return;
+  end;
+  %class_split_T = split_cases(fam_ev,node_sizes,node_types,T,size(fam_ev,1),0); %split cases according to class
+  %info_T = compute_info (fam_ev, T, class_split_T);
+
+  % compute Info(X,T)
+  num_class = size(split_T,2); 
+  subset_sizes = zeros(1,num_class);
+  info_ti = zeros(1,num_class);
+  for i=1:num_class
+    subset_sizes(i)=size(split_T{i},2);
+    if (subset_sizes(i)~=0)
+      class_split_Ti = split_cases(fam_ev,node_sizes,node_types,split_T{i},size(fam_ev,1),0); %split cases according to class
+      info_ti(i) = compute_info(fam_ev, split_T{i}, class_split_Ti);
+    end
+  end    
+  ti_ratios = subset_sizes/total_cnt;  %get the |Ti|/|T|
+  info_X_T = sum(ti_ratios.*info_ti);
+
+  %get Gain(X,T)
+  gain_X_T = info_T - info_X_T;
+
+  if (score_type == 1) %information gain
+    gain_score=gain_X_T;
+    return;
+  end
+  %compute the SplitInfo(X,T)   //is this also for cts attr, only split into two subsets
+  splitinfo_T = compute_info (fam_ev, T, split_T);
+  if (splitinfo_T~=0)
+    gain_score = gain_X_T/splitinfo_T;
+  end
+
+% ************for continuous output**************************************************
+else 
+  N = size(fam_ev,2);
+
+  % compute R(Ti)
+  num_class = size(split_T,2); 
+  R_Ti = zeros(1,num_class);
+  for i=1:num_class
+    if (size(split_T{i},2)~=0)
+      cases_T = fam_ev(size(fam_ev,1),split_T{i});
+      avg_y_T = mean(cases_T);
+      sqr_T = cases_T - avg_y_T;
+      R_Ti(i) = sum(sqr_T.*sqr_T)/N;  % get R(Ti) = 1/N * SUM(y-avg_y)^2
+    end
+  end
+  %delta_R = R(T) - SUM(R(Ti))
+  gain_score = info_T - sum(R_Ti);
+
+end
+
+
+%   Definition of Info(Ti)
+%     If a set T of records is partitioned into disjoint exhaustive classes C1, C2, .., Ck on the basis of the 
+%     value of the categorical attribute, then the information needed to identify the class of an element of T 
+%     is Info(T) = I(P), where P is the probability distribution of the partition (C1, C2, .., Ck): 
+%     	P = (|C1|/|T|, |C2|/|T|, ..., |Ck|/|T|)
+%     Here I(P) is defined as
+%       I(P) = -(p1*log(p1) + p2*log(p2) + .. + pn*log(pn))
+function info = compute_info (fam_ev, T, split_T)
+% COMPUTE_INFO compute the information for the split of T into split_T
+% info = compute_info (fam_ev, T, split_T)
+
+total_cnt = size(T,2);
+num_class = size(split_T,2);
+subset_sizes = zeros(1,num_class);
+probs = zeros(1,num_class);
+log_probs = zeros(1,num_class);
+for i=1:num_class
+  subset_sizes(i)=size(split_T{i},2);
+end    
+
+probs = subset_sizes/total_cnt;
+%log_probs = log2(probs);  % if probs(i)=0, the log2(probs(i)) will be Inf
+for i=1:size(probs,2)
+  if (probs(i)~=0)
+    log_probs(i)=log2(probs(i));
+  end
+end
+
+info = sum(-(probs.*log_probs));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/readme.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+Decision/regression tree CPD
+Author: Yimin Zhang yimin.zhang@intel.com
+21 Jan 2002
+
+
+See also Paul Bradley's Multisurface Method-Tree matlab code
+ http://www.cs.wisc.edu/~paulb/msmt/
+http://www.cs.wisc.edu/~olvi/uwmp/msmt.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/set_fields.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function CPD = set_fields(CPD, varargin)
+% SET_PARAMS Set the parameters (fields) for a tabular_CPD object
+% CPD = set_params(CPD, name/value pairs)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+%
+% CPT     - the CPT
+% prior   - the prior
+% clamped - 1 means don't adjust during EM
+%
+% e.g., CPD = set_params(CPD, 'CPT', 'rnd')
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'CPT', 
+    if ischar(args{i+1})
+      switch args{i+1}
+       case 'unif', CPD.CPT = mk_stochastic(myones(CPD.sizes));
+       case 'rnd',  CPD.CPT = mk_stochastic(myrand(CPD.sizes));
+       otherwise,   error(['invalid type ' args{i+1}]);       
+      end
+    elseif isscalarBNT(args{i+1})
+      p = args{i+1};
+      k = CPD.sizes(end);
+      % Bug fix by Hervé BOUTROUILLE 10/1/01
+      CPD.CPT = myreshape(sample_dirichlet(p*ones(1,k), prod(CPD.sizes(1:end-1)), CPD.sizes));   
+      %CPD.CPT = myreshape(sample_dirichlet(p*ones(1,k), prod(CPD.sizes(1:end-1))), CPD.sizes);
+    else
+      CPD.CPT = myreshape(args{i+1}, CPD.sizes);
+    end
+   
+   case 'prior',       
+    if ischar(args{i+1}) & strcmp(args{i+1}, 'unif')
+      CPD.prior = myones(CPD.sizes);
+    elseif isscalarBNT(args{i+1})
+      CPD.prior = args{i+1} * normalise(myones(CPD.sizes));
+    else
+      CPD.prior = myreshape(args{i+1}, CPD.sizes);
+    end
+    
+   %case 'clamped',      CPD.clamped = strcmp(args{i+1}, 'yes');
+   %case 'clamped',      CPD = set_clamped(CPD, strcmp(args{i+1}, 'yes'));
+   case 'clamped',      CPD = set_clamped(CPD, args{i+1});
+   
+   otherwise,  
+    %error(['invalid argument name ' args{i}]);       
+  end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/@tree_CPD/tree_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function CPD = tree_CPD(varargin)
+%DTREE_CPD Make a conditional prob. distrib. which is a decision/regression tree.
+%
+% CPD =dtree_CPD() will create an empty tree.
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  clamp = 0;
+  CPD = class(CPD, 'tree_CPD', discrete_CPD(clamp, []));
+  return;
+elseif isa(varargin{1}, 'tree_CPD')
+  % This might occur if we are copying an object.
+  CPD = varargin{1};
+  return;
+end
+
+CPD = init_fields;
+
+
+clamped = 0;
+fam_sz = [];
+CPD = class(CPD, 'tree_CPD', discrete_CPD(clamped, fam_sz));
+
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+%init the decision tree set the root to null
+CPD.tree.num_node = 0;
+CPD.tree.root=1;
+CPD.tree.nodes=[];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/mk_isolated_tabular_CPD.m/1.1.1.1/Mon Jun 24 18:58:32 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+A D/@boolean_CPD////
+A D/@deterministic_CPD////
+A D/@discrete_CPD////
+A D/@gaussian_CPD////
+A D/@generic_CPD////
+A D/@gmux_CPD////
+A D/@hhmm2Q_CPD////
+A D/@hhmmF_CPD////
+A D/@hhmmQ_CPD////
+A D/@mlp_CPD////
+A D/@noisyor_CPD////
+A D/@root_CPD////
+A D/@softmax_CPD////
+A D/@tabular_CPD////
+A D/@tabular_decision_node////
+A D/@tabular_kernel////
+A D/@tabular_utility_node////
+A D/@tree_CPD////
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/linear_gaussian_CPD.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/log_marg_prob_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/update_params_complete.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/Old/@linear_gaussian_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/linear_gaussian_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,87 @@
+function CPD = linear_gaussian_CPD(bnet, self, theta, sigma, theta0, n0, alpha0, beta0)
+% LINEAR_GAUSSIAN_CPD Make a linear Gaussian distrib.
+%
+% CPD = linear_gaussian_CPD(bnet, self, theta, lambda)
+% This defines the distribution P(Y|X) =  N(y | theta'*x, sigma),
+% where y (self) is a scalar, theta is a regression vector, and sigma is the variance.
+% Pass in [] to generate a default random value for a parameter.
+%
+% CPD = linear_gaussian_CPD(bnet, self, [], [], theta0, n0, alpha0, beta0)
+% defines a Normal-Gamma prior over the parameters:
+%   P(theta | lambda) = N(theta | theta0, n0*lambda)
+%   P(lambda) = Gamma(lambda | alpha0, beta0)
+% where lambda = 1/sigma is the precision for y.
+% n0 is a precision matrix, beta0 is a scale factor.
+% Pass in [] to generate a default value for a hyperparameter.
+% theta and sigma will be set to their prior expected values.
+% See "Bayesian Theory", Bernardo and Smith (2000), p442.
+
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  CPD = class(CPD, 'linear_gaussian_CPD', generic_CPD(0));
+  return;
+elseif isa(bnet, 'linear_gaussian_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+
+
+ns = bnet.node_sizes;
+ps = parents(bnet.dag, self);
+d = sum(ns(ps));
+assert(ns(self)==1);
+
+
+if nargin < 5,
+  prior = [];
+  if isempty(theta), theta = randn(d, 1); end
+  if isempty(sigma), sigma = 1; end
+else
+  
+  %if isempty(theta0), theta0 = zeros(d, 1); end
+  %if isempty(n0), n0 = 0.1*eye(d); end
+  %if isempty(alpha0), alpha0 = 0.1; end
+  %if isempty(beta0), beta0 = 0.1; end
+   
+  % use non-informative priors
+  if isempty(theta0), theta0 = zeros(d, 1); end
+  if isempty(n0), n0 = 0.001*ones(d); end
+  if isempty(alpha0), alpha0 = -d/2 + 0.001; end
+  if isempty(beta0), beta0 = 0.001; end
+
+  prior.theta = theta0;
+  prior.n = n0;
+  prior.alpha = alpha0;
+  prior.beta = beta0;
+  
+  % set params to their mean
+  theta = prior.theta;
+  %sigma = prior.beta/prior.alpha; % mean of Gamma is E[lambda] = alpha/beta 
+end
+
+
+CPD.self = self;
+CPD.theta = theta;
+CPD.sigma = sigma;
+CPD.prior = prior;
+
+
+clamped = 0;
+CPD = class(CPD, 'linear_gaussian_CPD', generic_CPD(clamped));
+
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.self = [];
+CPD.theta = [];
+CPD.sigma = [];
+CPD.prior = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/log_marg_prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function L = log_marg_prob_node(CPD, self_ev, pev)
+% LOG_MARG_PROB_NODE Compute prod_m log P(x(i,m)| x(pi_i,m)) for node i (linear_gaussian)
+% L = log_marg_prob_node(CPD, self_ev, pev)
+%
+% This differs from log_prob_node because we integrate out the parameters.
+% self_ev{m} is the evidence on this node in case m.
+% pev{i,m} is the evidence on the i'th parent in case m 
+% We assume there is <= 1 case.
+
+ncases = length(self_ev);
+
+if ncases==0
+  L = 0;
+  return;
+elseif ncases==1 
+  y = self_ev{1};
+  x = cat(1, pev{:}); % column vector
+  f = 1-x'*inv(x*x' + CPD.prior.n)*x;
+  alpha = CPD.prior.alpha;
+  L = log_student_pdf(y, x'*CPD.prior.theta, f*alpha/CPD.prior.beta, 2*alpha);
+else
+  error('can''t handle batch data');
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@linear_gaussian_CPD/update_params_complete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function CPD = update_params_complete(CPD, self_ev, pev)
+% UPDATE_PARAMS_COMPLETE Bayesian parameter updating given completely observed data (linear_gaussian)
+% CPD = update_params_complete(CPD, self_ev, pev)
+%
+% self_ev{m} is the evidence on this node in case m.
+% pev{i,m} is the evidence on the i'th parent in case m
+%
+% We update the hyperparams and set the params to the mean of the posterior.
+
+y = cat(1, self_ev{:});
+X = cell2num(pev)';
+[N k] = size(X); % each row is a case
+
+n0 = CPD.prior.n;
+th0 = CPD.prior.theta;
+CPD.prior.theta = inv(n0 + X'*X)*(n0*th0 + X'*y);
+thn = CPD.prior.theta;
+CPD.prior.beta = CPD.prior.beta + 0.5*(y-X*thn)'*y + 0.5*(th0-thn)'*n0*th0;
+CPD.prior.alpha = CPD.prior.alpha + 0.5*N;
+CPD.prior.n = CPD.prior.n + X'*X;
+
+  
+% set params to their mean
+CPD.theta = CPD.prior.theta;
+%CPD.sigma = CPD.prior.beta/CPD.prior.alpha; % mean of Gamma is E[lambda] = alpha/beta 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/log_marg_prob_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/root_gaussian_CPD.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/update_params_complete.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/Old/@root_gaussian_CPD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/log_marg_prob_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function L = log_marg_prob_node(CPD, self_ev, pev)
+% LOG_MARG_PROB_NODE Compute prod_m log P(x(i,m)| x(pi_i,m)) for node i (root_gaussian)
+% L = log_marg_prob_node(CPD, self_ev, pev)
+%
+% This differs from log_prob_node because we integrate out the parameters.
+% self_ev{m} is the evidence on this node in case m.
+% pev{i,m} is the evidence on the i'th parent in case m (ignored).
+
+ncases = length(self_ev);
+
+if ncases==0
+  L = 0;
+  return;
+elseif ncases==1 
+  x = cat(1, self_ev{:});
+  k = length(x);
+  n0 = CPD.prior.n;
+  mu = CPD.prior.mu;
+  alpha = CPD.prior.alpha;
+  beta = CPD.prior.beta;
+  gamma = 2*alpha - k + 1;
+  % Bernardo and Smith p441
+  L = log_student_pdf(x, mu, n0/(n0+1)*0.5*gamma*inv(beta), gamma);
+else
+  error('can''t handle batch data');
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/root_gaussian_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+function CPD = root_gaussian_CPD(bnet, self, mu, Sigma, mu0, n0, alpha0, beta0)
+% ROOT_GAUSSIAN_CPD Make an unconditional Gaussian distrib.
+%
+% CPD = root_gaussian_CPD(bnet, self, mu, Sigma)
+% This defines the distribution Y ~ N(mu, Sigma),
+% Pass in [] to generate a default random value for a parameter.
+%
+% CPD = root_gaussian_CPD(bnet, self, [], [], mu0, n0, alpha0, beta0)
+% defines a Normal-Wishart prior over the parameters:
+%   P(mu | lambda) = N(mu | mu0, n0*lambda)
+%   P(lambda) = Wishart(lambda | alpha0, beta0)
+% where lambda = inv(Sigma) is the precision matrix of mu.
+% n0 is a scale factor, beta0 is a precision matrix.
+% Pass in [] to generate a default value for a hyperparameter.
+% mu and Sigma will be set to their prior expected values.
+% See "Bayesian Theory", Bernardo and Smith (2000), p441.
+
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  CPD = class(CPD, 'root_gaussian_CPD', generic_CPD(0));
+  return;
+elseif isa(bnet, 'root_gaussian_CPD')
+  % This might occur if we are copying an object.
+  CPD = bnet;
+  return;
+end
+CPD = init_fields;
+
+
+ns = bnet.node_sizes;
+d = ns(self);
+
+if nargin < 5,
+  prior = [];
+  if isempty(mu), mu = randn(d, 1); end
+  if isempty(Sigma), Sigma = eye(d); end
+else
+  if isempty(mu0), mu0 = zeros(d, 1); end
+  if isempty(n0), n0 = 0.1; end
+  if isempty(alpha0), alpha0 = (d-1)/2 + 1; end % Wishart requires 2 alpha > d-1
+  if isempty(beta0), beta0 = eye(d); end
+  
+  prior.mu = mu0;
+  prior.n = n0;
+  prior.alpha = alpha0;
+  prior.beta = beta0;
+  
+  % set params to their mean
+  mu = prior.mu;
+  Sigma = prior.beta/prior.alpha; % mean of Wishart is E[lambda] = alpha*inv(beta)
+end
+
+CPD.self = self;
+CPD.mu = mu;
+CPD.Sigma = Sigma;
+CPD.prior = prior;
+
+clamped = 0;
+CPD = class(CPD, 'root_gaussian_CPD', generic_CPD(clamped));
+
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.self = [];
+CPD.mu = [];
+CPD.Sigma = [];
+CPD.prior = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@root_gaussian_CPD/update_params_complete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function CPD = update_params_complete(CPD, self_ev, pev)
+% UPDATE_PARAMS_COMPLETE Bayesian parameter updating given completely observed data (root_gaussian)
+% CPD = update_params_complete(CPD, self_ev, pev)
+%
+% self_ev{m} is the evidence on this node in case m.
+% pev{i,m} is the evidence on the i'th parent in case m (ignored)
+%
+% We update the hyperparams and set the params to the mean of the posterior.
+
+X = cell2num(self_ev);
+[k N] = size(X); % each column is a case
+
+one = ones(N,1);
+xbar = X*one / N; % = mean(X')'
+S = X*(eye(N) - one*one'/N)*X';
+
+n0 = CPD.prior.n;
+nn = 1/(n0 + N);
+mu0 = CPD.prior.mu;
+CPD.prior.mu = nn*(n0*mu0 + N*xbar);
+CPD.prior.alpha = CPD.prior.alpha + 0.5*N;
+CPD.prior.beta = CPD.prior.beta + 0.5*S + 0.5*nn*N*n0*(mu0-xbar)*(mu0-xbar)';
+CPD.prior.n = CPD.prior.n + N;
+
+% set params to their mean
+CPD.mu = CPD.prior.mu;
+% E[Cov] = E inv(n lambda) = 1/(n (alpha-(k+1)/2)) beta
+CPD.Sigma = CPD.prior.beta /(CPD.prior.n * (CPD.prior.alpha - (k+1)/2));
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@tabular_chance_node/CPD_to_upot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function pot = CPD_to_upot(CPD, domain)
+% CPD_TO_UPOT Convert a CPD to a utility potential
+% pot = CPD_to_upot(CPD, domain)
+
+sz = CPD.size; % mysize(CPD.CPT);
+pot = upot(domain, sz, CPD.CPT, 0*myones(sz));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@tabular_chance_node/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+/CPD_to_upot.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/tabular_chance_node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@tabular_chance_node/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/Old/@tabular_chance_node
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@tabular_chance_node/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/@tabular_chance_node/tabular_chance_node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function CPD = tabular_chance_node(sz, CPT)
+% TABULAR_CHANCE_NODE Like tabular_CPD, but simplified
+% CPD = tabular_chance_node(sz, CPT)
+%
+% sz(1:end-1) is the sizes of the parents, sz(end) is the size of this node
+% By default, CPT is a random stochastic matrix.
+
+if nargin==0
+  % This occurs if we are trying to load an object from a file.
+  CPD = init_fields;
+  CPD = class(CPD, 'tabular_chance_node');
+  return;
+elseif isa(sz, 'tabular_chance_node')
+  % This might occur if we are copying an object.
+  CPD = sz;
+  return;
+end
+CPD = init_fields;
+
+if nargin < 2,
+  CPT = mk_stochastic(myones(sz)); 
+else
+  CPT = myreshape(CPT, sz);
+end
+
+CPD.CPT = CPT;
+CPD.size = sz;
+
+CPD = class(CPD, 'tabular_chance_node');
+
+%%%%%%%%%%%
+
+function CPD = init_fields()
+% This ensures we define the fields in the same order 
+% no matter whether we load an object from a file,
+% or create it from scratch. (Matlab requires this.)
+
+CPD.CPT = [];
+CPD.size = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+A D/@linear_gaussian_CPD////
+A D/@root_gaussian_CPD////
+A D/@tabular_chance_node////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/CPDs/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/CPDs/mk_isolated_tabular_CPD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function CPD = mk_isolated_tabular_CPD(fam_sz, args)
+% function CPD = mk_isolated_tabular_CPD(fam_sz, args)
+% function CPD = mk_isolated_tabular_CPD(fam_sz, args)
+% Make a single CPD by creating a mini-bnet containing just this one family.
+% This is necessary because the CPD constructor requires a bnet.
+
+n = length(fam_sz);
+dag = zeros(n,n);
+ps = 1:(n-1);
+if ~isempty(ps)
+  dag(ps,n) = 1;
+end
+bnet = mk_bnet(dag, fam_sz);
+CPD = tabular_CPD(bnet, n, args{:});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/README.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+The Bayes Net Toolbox for Matlab was written by Kevin Patrick Murphy et al.
+This version (FullBNT_1.0.6) was last updated on 5/9/2010, by Wei Sun. 
+
+BNT has moved to bnt.googlecode.com, in Jan. 2010.
+To download the latest version, and to get documentation, please go to
+   http://code.google.com/p/bnt/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/copyright.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+Written by Kevin Murphy (murphyk@ai.mit.edu), 1997-2003
+Distributed under the GNU Library GPL - see license.gpl for details.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/dummy/1.1.1.1/Sat Jan 18 22:22:06 2003//
+D/dynamic////
+D/limids////
+D/static////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+/arhmm1.m/1.1.1.1/Thu Nov 14 01:03:34 2002//
+/bat1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/bkff1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/chmm1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/cmp_inference_dbn.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/cmp_learning_dbn.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/cmp_online_inference.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/dhmm1.m/1.1.1.1/Sun May  4 22:23:18 2003//
+/ehmm1.m/1.1.1.1/Sat Jan 18 22:16:24 2003//
+/fhmm_infer.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/filter_test1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/ghmm1.m/1.1.1.1/Sun May  4 22:23:32 2003//
+/ho1.m/1.1.1.1/Fri Mar 28 17:22:36 2003//
+/jtree_clq_test.m/1.1.1.1/Sat Jan 18 22:16:38 2003//
+/jtree_clq_test2.m/1.1.1.1/Thu Oct 10 23:45:12 2002//
+/kalman1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/kjaerulff1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/loopy_dbn1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mhmm1.m/1.1.1.1/Sun May  4 22:23:40 2003//
+/mildew1.m/1.1.1.1/Thu Jun 20 20:30:24 2002//
+/mk_bat_dbn.m/1.1.1.1/Mon Jun  7 19:07:18 2004//
+/mk_chmm.m/1.1.1.1/Tue May 11 19:23:14 2004//
+/mk_collage_from_clqs.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_fhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_mildew_dbn.m/1.1.1.1/Thu Oct 10 23:14:36 2002//
+/mk_orig_bat_dbn.m/1.1.1.1/Wed Feb  4 23:53:06 2004//
+/mk_orig_water_dbn.m/1.1.1.1/Sat Jan 31 02:57:52 2004//
+/mk_ps_from_clqs.m/1.1.1.1/Wed Oct  9 20:36:56 2002//
+/mk_uffe_dbn.m/1.1.1.1/Thu Oct 10 23:14:54 2002//
+/mk_water_dbn.m/1.1.1.1/Tue May 11 18:45:38 2004//
+/orig_water1.m/1.1.1.1/Mon Nov 22 22:41:42 2004//
+/reveal1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/scg_dbn.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/skf_data_assoc_gmux.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/viterbi1.m/1.1.1.1/Tue May 13 14:35:40 2003//
+/water1.m/1.1.1.1/Thu Nov 14 20:07:56 2002//
+/water2.m/1.1.1.1/Thu Nov 14 20:33:42 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+A D/HHMM////
+A D/Old////
+A D/SLAM////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+/abcd_hhmm.m/1.1.1.1/Sat Sep 21 21:37:54 2002//
+/add_hhmm_end_state.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/hhmm_jtree_clqs.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_hhmm.m/1.1.1.1/Sat Sep 21 20:58:06 2002//
+/mk_hhmm_topo.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_hhmm_topo_F1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/pretty_print_hhmm_parse.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/remove_hhmm_end_state.m/1.1.1.1/Mon Dec 16 19:16:50 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+A D/Map////
+A D/Mgram////
+A D/Motif////
+A D/Old////
+A D/Square////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/HHMM
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/disp_map_hhmm.m/1.1.1.1/Tue Sep 24 22:45:56 2002//
+/learn_map.m/1.1.1.1/Sat Jan 11 18:48:46 2003//
+/mk_map_hhmm.m/1.1.1.1/Tue Sep 24 10:49:52 2002//
+/mk_rnd_map_hhmm.m/1.1.1.1/Tue Sep 24 22:13:48 2002//
+/sample_from_map.m/1.1.1.1/Tue Sep 24 13:02:30 2002//
+D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/HHMM/Map
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/mk_map_hhmm.m/1.1.1.1/Tue Sep 24 07:02:44 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/HHMM/Map/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/Old/mk_map_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,156 @@
+function bnet = mk_map_hhmm(varargin)
+
+% p is the prob of a successful move (defines the reliability of motors)
+p = 1;
+num_obs_nodes = 1;
+
+for i=1:2:length(varargin)
+  switch varargin{i},
+   case 'p', p = varargin{i+1};
+   case 'numobs', num_obs_node = varargin{i+1};
+  end
+end
+
+
+q = 1-p;
+
+% assign numbers to the nodes in topological order
+U = 1; A = 2; C = 3; F = 4; O = 5;
+
+% create graph structure
+
+ss = 5; % slice size
+intra = zeros(ss,ss);
+intra(U,F)=1;
+intra(A,[C F O])=1;
+intra(C,[F O])=1;
+
+inter = zeros(ss,ss);
+inter(U,[A C])=1;
+inter(A,[A C])=1;
+inter(F,[A C])=1;
+inter(C,C)=1;
+
+% node sizes
+ns = zeros(1,ss);
+ns(U) = 2; % left/right
+ns(A) = 2;
+ns(C) = 3;
+ns(F) = 2;
+ns(O) = 5; % we will assign each state a unique symbol
+l = 1; r = 2; % left/right
+L = 1; R = 2;
+
+% Make the DBN
+bnet = mk_dbn(intra, inter, ns, 'observed', O);
+eclass = bnet.equiv_class;
+
+
+
+% Define CPDs for slice 1
+% We clamp all of them, i.e., do not try to learn them.
+
+% uniform probs over actions (the input could be chosen from a policy)
+bnet.CPD{eclass(U,1)} = tabular_CPD(bnet, U, 'CPT', mk_stochastic(ones(ns(U),1)), ...
+				    'adjustable', 0);
+
+% uniform probs over starting abstract state
+bnet.CPD{eclass(A,1)} = tabular_CPD(bnet, A, 'CPT', mk_stochastic(ones(ns(A),1)), ...
+				    'adjustable', 0);
+
+% Uniform probs over starting concrete state, modulo the fact
+% that corridor 2 is only of length 2.
+CPT = zeros(ns(A), ns(C)); % CPT(i,j) = P(C starts in j | A=i)
+CPT(1, :) = [1/3 1/3 1/3];
+CPT(2, :) = [1/2 1/2 0];
+bnet.CPD{eclass(C,1)} = tabular_CPD(bnet, C, 'CPT', CPT, 'adjustable', 0);
+
+% Termination probs
+CPT = zeros(ns(U), ns(A), ns(C), ns(F));
+CPT(r,1,1,:) = [1 0];
+CPT(r,1,2,:) = [1 0];
+CPT(r,1,3,:) = [q p];
+CPT(r,2,1,:) = [1 0];
+CPT(r,2,2,:) = [q p];
+CPT(l,1,1,:) = [q p];
+CPT(l,1,2,:) = [1 0];
+CPT(l,1,3,:) = [1 0];
+CPT(l,2,1,:) = [q p];
+CPT(l,2,2,:) = [1 0];
+
+bnet.CPD{eclass(F,1)} = tabular_CPD(bnet, F, 'CPT', CPT);
+
+
+% Assign each state a unique observation
+CPT = zeros(ns(A), ns(C), ns(O));
+CPT(1,1,1)=1; 
+CPT(1,2,2)=1;
+CPT(1,3,3)=1;
+CPT(2,1,4)=1;
+CPT(2,2,5)=1;
+%CPT(2,3,:) undefined
+
+bnet.CPD{eclass(O,1)} = tabular_CPD(bnet, O, 'CPT', CPT);
+
+
+% Define the CPDs for slice 2
+
+% Abstract
+
+% Since the top level never resets, the starting distribution is irrelevant:
+% A2 will be determined by sampling from transmat(A1,:).
+% But the code requires we specify it anyway; we make it all 0s, a dummy value.
+startprob = zeros(ns(U), ns(A));
+
+transmat = zeros(ns(U), ns(A), ns(A));
+transmat(R,1,:) = [q p];
+transmat(R,2,:) = [0 1];
+transmat(L,1,:) = [1 0];
+transmat(L,2,:) = [p q];
+
+% Qps are the parents we condition the parameters on, in this case just
+% the past action.
+bnet.CPD{eclass(A,2)} = hhmm2Q_CPD(bnet, A+ss, 'Fbelow', F, ...
+				  'startprob', startprob, 'transprob', transmat);
+
+
+
+% Concrete
+
+transmat = zeros(ns(C), ns(U), ns(A), ns(C));
+transmat(1,r,1,:) = [q p 0.0];
+transmat(2,r,1,:) = [0.0 q p];
+transmat(3,r,1,:) = [0.0 0.0 1.0];
+transmat(1,r,2,:) = [q p 0.0];
+transmat(2,r,2,:) = [0.0 1.0 0.0];
+%
+transmat(1,l,1,:) = [1.0 0.0 0.0];
+transmat(2,l,1,:) = [p q 0.0];
+transmat(3,l,1,:) = [0.0 p q];
+transmat(1,l,2,:) = [1.0 0.0 0.0];
+transmat(2,l,2,:) = [p q 0.0];
+
+% Add a new dimension for A(t-1), by copying old vals,
+% so the matrix is the same size as startprob
+
+
+transmat = reshape(transmat, [ns(C) ns(U) ns(A) 1 ns(C)]);
+transmat = repmat(transmat, [1 1 1 ns(A) 1]);
+
+% startprob(C(t-1), U(t-1), A(t-1), A(t), C(t))
+startprob = zeros(ns(C), ns(U), ns(A), ns(A), ns(C));
+startprob(1,L,1,1,:) = [1.0 0.0 0.0];
+startprob(3,R,1,2,:) = [1.0 0.0 0.0];
+startprob(3,R,1,1,:) = [0.0 0.0 1.0];
+% 
+startprob(1,L,2,1,:) = [0.0 0.0 010];
+startprob(2,L,2,1,:) = [1.0 0.0 0.0];
+startprob(2,R,2,2,:) = [0.0 1.0 0.0];
+
+% want transmat(U,A,C,At,Ct), ie. in topo order
+transmat = permute(transmat, [2 3 1 4 5]);
+startprob  = permute(startprob, [2 3 1 4 5]);
+bnet.CPD{eclass(C,2)} = hhmm2Q_CPD(bnet, C+ss, 'Fself', F, ...
+				  'startprob', startprob, 'transprob', transmat);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/disp_map_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function disp_map_hhmm(bnet)
+
+eclass = bnet.equiv_class;
+U = 1; A = 2; C = 3; F = 4;
+
+S = struct(bnet.CPD{eclass(A,2)});
+disp('abstract trans')
+dispcpt(S.transprob)
+
+S = struct(bnet.CPD{eclass(C,2)});
+disp('concrete trans for go left') % UAC AC
+dispcpt(squeeze(S.transprob(1,:,:,:,:)))
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/learn_map.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+seed = 1;
+rand('state', seed);
+randn('state', seed);
+
+obs_model = 'unique';  % each cell has a unique label (essentially fully observable)
+%obs_model = 'four'; % each cell generates 4 observations, NESW
+
+% Generate the true network, and a randomization of it
+realnet = mk_map_hhmm('p', 0.9, 'obs_model', obs_model);
+rndnet = mk_rnd_map_hhmm('obs_model', obs_model);
+eclass = realnet.equiv_class;
+U = 1; A = 2; C = 3; F = 4; onodes = 5;
+
+ss = realnet.nnodes_per_slice;
+T = 100;
+evidence = sample_dbn(realnet, 'length', T);
+ev = cell(ss,T);
+ev(onodes,:) = evidence(onodes,:);
+
+infeng = jtree_dbn_inf_engine(rndnet);
+
+if 0
+% suppose we do not observe the final finish node, but only know 
+% it is more likely to be on that off
+ev2 = ev;
+infeng = enter_evidence(infeng, ev2, 'soft_evidence_nodes', [F T], 'soft_evidence',  {[0.3 0.7]'});
+end
+
+
+learnednet = learn_params_dbn_em(infeng, {evidence}, 'max_iter', 5);
+
+disp('real model')
+disp_map_hhmm(realnet)
+
+disp('learned model')
+disp_map_hhmm(learnednet)
+
+disp('rnd model')
+disp_map_hhmm(rndnet)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/mk_map_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,181 @@
+function bnet = mk_map_hhmm(varargin)
+
+% p is the prob of a successful move (defines the reliability of motors)
+p = 1;
+obs_model = 'unique';
+
+for i=1:2:length(varargin)
+  switch varargin{i},
+   case 'p', p = varargin{i+1};
+   case 'obs_model', obs_model = varargin{i+1};
+  end
+end
+
+
+q = 1-p;
+unique_obs = strcmp(obs_model, 'unique');
+
+% assign numbers to the nodes in topological order
+U = 1; A = 2; C = 3; F = 4;
+if unique_obs
+  onodes = 5;
+else
+  N = 5; E = 6; S = 7; W = 8; % north, east, south, west
+  onodes = [N E S W];
+end
+
+% create graph structure
+
+ss = 4 + length(onodes); % slice size
+intra = zeros(ss,ss);
+intra(U,F)=1;
+intra(A,[C F onodes])=1;
+intra(C,[F onodes])=1;
+
+inter = zeros(ss,ss);
+inter(U,[A C])=1;
+inter(A,[A C])=1;
+inter(F,[A C])=1;
+inter(C,C)=1;
+
+% node sizes
+ns = zeros(1,ss);
+ns(U) = 2; % left/right
+ns(A) = 2;
+ns(C) = 3;
+ns(F) = 2;
+if unique_obs
+  ns(onodes) = 5; % we will assign each state a unique symbol
+else
+  ns(onodes) = 2;
+end
+l = 1; r = 2; % left/right
+L = 1; R = 2;
+
+% Make the DBN
+bnet = mk_dbn(intra, inter, ns, 'observed', onodes);
+eclass = bnet.equiv_class;
+
+
+
+% Define CPDs for slice 1
+% We clamp all the CPDs that are not tied,
+% since we cannot learn them from a single sequence.
+
+% uniform probs over actions (the input could be chosen from a policy)
+bnet.CPD{eclass(U,1)} = tabular_CPD(bnet, U, 'CPT', mk_stochastic(ones(ns(U),1)), ...
+				    'adjustable', 0);
+
+% uniform probs over starting abstract state
+bnet.CPD{eclass(A,1)} = tabular_CPD(bnet, A, 'CPT', mk_stochastic(ones(ns(A),1)), ...
+				    'adjustable', 0);
+
+% Uniform probs over starting concrete state, modulo the fact
+% that corridor 2 is only of length 2.
+CPT = zeros(ns(A), ns(C)); % CPT(i,j) = P(C starts in j | A=i)
+CPT(1, :) = [1/3 1/3 1/3];
+CPT(2, :) = [1/2 1/2 0];
+bnet.CPD{eclass(C,1)} = tabular_CPD(bnet, C, 'CPT', CPT, 'adjustable', 0);
+
+% Termination probs
+CPT = zeros(ns(U), ns(A), ns(C), ns(F));
+CPT(r,1,1,:) = [1 0];
+CPT(r,1,2,:) = [1 0];
+CPT(r,1,3,:) = [q p];
+CPT(r,2,1,:) = [1 0];
+CPT(r,2,2,:) = [q p];
+CPT(l,1,1,:) = [q p];
+CPT(l,1,2,:) = [1 0];
+CPT(l,1,3,:) = [1 0];
+CPT(l,2,1,:) = [q p];
+CPT(l,2,2,:) = [1 0];
+
+bnet.CPD{eclass(F,1)} = tabular_CPD(bnet, F, 'CPT', CPT);
+
+
+% Observation model
+if unique_obs
+  CPT = zeros(ns(A), ns(C), 5);
+  CPT(1,1,1)=1;  % Theo state 4
+  CPT(1,2,2)=1;  % Theo state 5
+  CPT(1,3,3)=1; % Theo state 6
+  CPT(2,1,4)=1; % Theo state 9
+  CPT(2,2,5)=1; % Theo state 10
+  %CPT(2,3,:) undefined
+  O = onodes(1);
+  bnet.CPD{eclass(O,1)} = tabular_CPD(bnet, O, 'CPT', CPT);
+else
+  % north/east/south/west can see wall (1) or opening (2)
+  CPT = zeros(ns(A), ns(C), 2);
+  CPT(:,:,1) = q;
+  CPT(:,:,2) = p;
+  bnet.CPD{eclass(W,1)} = tabular_CPD(bnet, W, 'CPT', CPT);
+  bnet.CPD{eclass(E,1)} = tabular_CPD(bnet, E, 'CPT', CPT);
+  CPT = zeros(ns(A), ns(C), 2);
+  CPT(:,:,1) = p;
+  CPT(:,:,2) = q;
+  bnet.CPD{eclass(S,1)} = tabular_CPD(bnet, S, 'CPT', CPT);
+  bnet.CPD{eclass(N,1)} = tabular_CPD(bnet, N, 'CPT', CPT);
+end
+
+% Define the CPDs for slice 2
+
+% Abstract
+
+% Since the top level never resets, the starting distribution is irrelevant:
+% A2 will be determined by sampling from transmat(A1,:).
+% But the code requires we specify it anyway; we make it all 0s, a dummy value.
+startprob = zeros(ns(U), ns(A));
+
+transmat = zeros(ns(U), ns(A), ns(A));
+transmat(R,1,:) = [q p];
+transmat(R,2,:) = [0 1];
+transmat(L,1,:) = [1 0];
+transmat(L,2,:) = [p q];
+
+% Qps are the parents we condition the parameters on, in this case just
+% the past action.
+bnet.CPD{eclass(A,2)} = hhmm2Q_CPD(bnet, A+ss, 'Fbelow', F, ...
+				  'startprob', startprob, 'transprob', transmat);
+
+
+
+% Concrete
+
+transmat = zeros(ns(C), ns(U), ns(A), ns(C));
+transmat(1,r,1,:) = [q p 0.0];
+transmat(2,r,1,:) = [0.0 q p];
+transmat(3,r,1,:) = [0.0 0.0 1.0];
+transmat(1,r,2,:) = [q p 0.0];
+transmat(2,r,2,:) = [0.0 1.0 0.0];
+%
+transmat(1,l,1,:) = [1.0 0.0 0.0];
+transmat(2,l,1,:) = [p q 0.0];
+transmat(3,l,1,:) = [0.0 p q];
+transmat(1,l,2,:) = [1.0 0.0 0.0];
+transmat(2,l,2,:) = [p q 0.0];
+
+% Add a new dimension for A(t-1), by copying old vals,
+% so the matrix is the same size as startprob
+
+
+transmat = reshape(transmat, [ns(C) ns(U) ns(A) 1 ns(C)]);
+transmat = repmat(transmat, [1 1 1 ns(A) 1]);
+
+% startprob(C(t-1), U(t-1), A(t-1), A(t), C(t))
+startprob = zeros(ns(C), ns(U), ns(A), ns(A), ns(C));
+startprob(1,L,1,1,:) = [1.0 0.0 0.0];
+startprob(3,R,1,2,:) = [1.0 0.0 0.0];
+startprob(3,R,1,1,:) = [0.0 0.0 1.0];
+% 
+startprob(1,L,2,1,:) = [0.0 0.0 010];
+startprob(2,L,2,1,:) = [1.0 0.0 0.0];
+startprob(2,R,2,2,:) = [0.0 1.0 0.0];
+
+% want transmat(U,A,C,At,Ct), ie. in topo order
+transmat = permute(transmat, [2 3 1 4 5]);
+startprob  = permute(startprob, [2 3 1 4 5]);
+bnet.CPD{eclass(C,2)} = hhmm2Q_CPD(bnet, C+ss, 'Fself', F, ...
+				  'startprob', startprob, 'transprob', transmat);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/mk_rnd_map_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+function bnet = mk_rnd_map_hhmm(varargin)
+
+% We copy the deterministic structure of the real HHMM,
+% but randomize the probabilities of the adjustable CPDs.
+% The key trick is that 0s in the real HHMM remain 0
+% even when multiplied by a randon number.
+
+obs_model = 'unique';
+
+for i=1:2:length(varargin)
+  switch varargin{i},
+   case 'obs_model', obs_model = varargin{i+1};
+  end
+end
+
+
+unique_obs = strcmp(obs_model, 'unique');
+
+psuccess = 0.9;
+% must be less than 1, so that pfail > 0
+% otherwise we copy too many 0s
+bnet = mk_map_hhmm('p', psuccess, 'obs_model', obs_model);
+ns = bnet.node_sizes;
+ss = bnet.nnodes_per_slice;
+
+U = 1; A = 2; C = 3; F = 4;
+%unique_obs = (bnet.nnodes_per_slice == 5);
+if unique_obs
+  onodes = 5;
+else
+  north = 5; east = 6; south = 7; west = 8;
+  onodes = [north east south west];
+end
+
+eclass = bnet.equiv_class;
+S=struct(bnet.CPD{eclass(F,1)});
+CPT = mk_stochastic(rand(size(S.CPT)) .* S.CPT);
+bnet.CPD{eclass(F,1)} = tabular_CPD(bnet, F, 'CPT', CPT);
+
+
+% Observation model
+if unique_obs
+  CPT = zeros(ns(A), ns(C), 5);
+  CPT(1,1,1)=1;  % Theo state 4
+  CPT(1,2,2)=1;  % Theo state 5
+  CPT(1,3,3)=1; % Theo state 6
+  CPT(2,1,4)=1; % Theo state 9
+  CPT(2,2,5)=1; % Theo state 10
+  %CPT(2,3,:) undefined
+  O = onodes(1);
+  bnet.CPD{eclass(O,1)} = tabular_CPD(bnet, O, 'CPT', CPT);
+else
+  for i=[north east south west]
+    CPT = mk_stochastic(rand(ns(A), ns(C), 2));
+    bnet.CPD{eclass(i,1)} = tabular_CPD(bnet, i, 'CPT', CPT);
+  end
+end
+
+% Define the CPDs for slice 2
+
+startprob = zeros(ns(U), ns(A));
+S = struct(bnet.CPD{eclass(A,2)});
+transprob = mk_stochastic(rand(size(S.transprob)) .* S.transprob);
+bnet.CPD{eclass(A,2)} = hhmm2Q_CPD(bnet, A+ss, 'Fbelow', F, ...
+				  'startprob', startprob, 'transprob', transprob);
+
+S = struct(bnet.CPD{eclass(C,2)});
+transprob = mk_stochastic(rand(size(S.transprob)) .* S.transprob);
+startprob = mk_stochastic(rand(size(S.startprob)) .* S.startprob);
+bnet.CPD{eclass(C,2)} = hhmm2Q_CPD(bnet, C+ss, 'Fself', F, ...
+				  'startprob', startprob, 'transprob', transprob);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Map/sample_from_map.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+if 0
+% Generate some sample paths
+
+bnet = mk_map_hhmm('p', 1);
+% assign numbers to the nodes in topological order
+U = 1; A = 2; C = 3; F = 4; O = 5;
+
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+% control policy = sweep right then left
+T = 10;
+ss = 5;
+ev = cell(ss, T);
+ev(U,:) = num2cell([R*ones(1,5) L*ones(1,5)]);
+
+% fix initial conditions to be in left most state
+ev{A,1} = 1; 
+ev{C,1} = 1; 
+evidence = sample_dbn(bnet, 'length', T, 'evidence', ev)
+
+
+% Now do same but with noisy actuators
+
+bnet = mk_map_hhmm('p', 0.8);
+evidence = sample_dbn(bnet, 'length', T, 'evidence', ev)
+
+end
+
+% Now do same but with 4 observations per slice
+
+bnet = mk_map_hhmm('p', 0.8, 'obs_model', 'four');
+ss = bnet.nnodes_per_slice;
+
+ev = cell(ss, T);
+ev(U,:) = num2cell([R*ones(1,5) L*ones(1,5)]);
+ev{A,1} = 1; 
+ev{C,1} = 1; 
+evidence = sample_dbn(bnet, 'length', T, 'evidence', ev)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/letter2num.m/1.1.1.1/Fri Nov 22 23:10:20 2002//
+/mgram1.m/1.1.1.1/Fri Nov 22 23:59:00 2002//
+/mgram2.m/1.1.1.1/Tue Nov 26 22:04:24 2002//
+/mgram3.m/1.1.1.1/Tue Nov 26 22:14:10 2002//
+/num2letter.m/1.1.1.1/Fri Nov 22 23:07:40 2002//
+D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/HHMM/Mgram
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/mgram2.m/1.1.1.1/Sat Nov 23 00:44:34 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/HHMM/Mgram/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/Old/mgram2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,191 @@
+% like mgram1, except we use a durational HMM instead of an HHMM2
+
+past = 0;
+
+words = {'the', 't', 'h', 'e'};
+data = 'the';
+nwords = length(words);
+word_len = zeros(1, nwords);
+word_prob = normalise(ones(1,nwords));
+word_logprob = log(word_prob);
+for wi=1:nwords
+  word_len(wi)=length(words{wi});
+end
+D = max(word_len);
+
+
+alphasize = 26*2;
+data = letter2num(data);
+T = length(data);
+
+% node numbers
+W = 1; % top level state = word id
+L = 2; % bottom level state = letter position within word
+F = 3;
+O = 4;
+
+ss = 4;
+intra = zeros(ss,ss);
+intra(W,[F L O])=1;
+intra(L,[O F])=1;
+
+inter = zeros(ss,ss);
+inter(W,W)=1;
+inter(L,L)=1;
+inter(F,[W L O])=1;
+
+% node sizes
+ns = zeros(1,ss);
+ns(W) = nwords;
+ns(L) = D;
+ns(F) = 2;
+ns(O) = alphasize;
+ns2 = [ns ns];
+
+% Make the DBN
+bnet = mk_dbn(intra, inter, ns, 'observed', O);
+eclass = bnet.equiv_class;
+
+% uniform start distrib over words, uniform trans mat
+Wstart = normalise(ones(1,nwords));
+Wtrans = mk_stochastic(ones(nwords,nwords));
+
+% always start in state d = length(word) for each bottom level HMM
+Lstart = zeros(nwords, D);
+for i=1:nwords
+  l = length(words{i});
+  Lstart(i,l)=1;
+end
+
+% make downcounters
+RLtrans = mk_rightleft_transmat(D, 0); % 0 self loop prob
+Ltrans = repmat(RLtrans, [1 1 nwords]);
+
+% Finish when downcoutner = 1
+Fprob = zeros(nwords, D, 2);
+Fprob(:,1,2)=1;
+Fprob(:,2:end,1)=1;
+
+
+% Define CPDs for slice 
+bnet.CPD{eclass(W,1)} = tabular_CPD(bnet, W, 'CPT', Wstart);
+bnet.CPD{eclass(L,1)} = tabular_CPD(bnet, L, 'CPT', Lstart);
+bnet.CPD{eclass(F,1)} = tabular_CPD(bnet, F, 'CPT', Fprob);
+
+
+% Define CPDs for slice 2
+bnet.CPD{eclass(W,2)} = hhmmQ_CPD(bnet, W+ss, 'Fbelow', F, 'startprob', Wstart,  'transprob', Wtrans);
+bnet.CPD{eclass(L,2)} = hhmmQ_CPD(bnet, L+ss, 'Fself', F, 'Qps', W+ss, 'startprob', Lstart, 'transprob', Ltrans);
+
+
+if 0
+% To test it is generating correctly, we create an artificial
+% observation process that capitalizes at the start of a new segment
+% Oprob(Ft-1,Qt,Dt,Yt)
+Oprob = zeros(2,nwords,D,alphasize);
+Oprob(1,1,3,letter2num('t'),1)=1;
+Oprob(1,1,2,letter2num('h'),1)=1;
+Oprob(1,1,1,letter2num('e'),1)=1;
+Oprob(2,1,3,letter2num('T'),1)=1;
+Oprob(2,1,2,letter2num('H'),1)=1;
+Oprob(2,1,1,letter2num('E'),1)=1;
+Oprob(1,2,1,letter2num('a'),1)=1;
+Oprob(2,2,1,letter2num('A'),1)=1;
+Oprob(1,3,1,letter2num('b'),1)=1;
+Oprob(2,3,1,letter2num('B'),1)=1;
+Oprob(1,4,1,letter2num('c'),1)=1;
+Oprob(2,4,1,letter2num('C'),1)=1;
+
+% Oprob1(Qt,Dt,Yt)
+Oprob1 = zeros(nwords,D,alphasize);
+Oprob1(1,3,letter2num('t'),1)=1;
+Oprob1(1,2,letter2num('h'),1)=1;
+Oprob1(1,1,letter2num('e'),1)=1;
+Oprob1(2,1,letter2num('a'),1)=1;
+Oprob1(3,1,letter2num('b'),1)=1;
+Oprob1(4,1,letter2num('c'),1)=1;
+
+bnet.CPD{eclass(O,2)} = tabular_CPD(bnet, O+ss, 'CPT', Oprob);
+bnet.CPD{eclass(O,1)} = tabular_CPD(bnet, O, 'CPT', Oprob1);
+
+evidence = cell(ss,T);
+%evidence{W,1}=1;
+sample = cell2num(sample_dbn(bnet, 'length', T, 'evidence', evidence));
+str = num2letter(sample(4,:))
+end
+
+
+
+
+[log_obslik, obslik, match] = mk_mgram_obslik(lower(data), words, word_len, word_prob);
+% obslik(j,t,d)
+softCPDpot = cell(ss,T);
+ens = ns;
+ens(O)=1;
+ens2 = [ens ens];
+for t=2:T
+  dom = [F W+ss L+ss O+ss];
+  % tab(Ft-1, Q2, Dt)
+  tab = ones(2, nwords, D);
+  if past
+    tab(1,:,:)=1; % if haven't finished previous word, likelihood is 1
+    tab(2,:,:) = squeeze(obslik(:,t,:)); % otherwise likelihood of this segment
+  else
+    for d=1:max(1,min(D,T+1-t))
+      tab(2,:,d) = squeeze(obslik(:,t+d-1,d));
+    end
+  end
+  softCPDpot{O,t} = dpot(dom, ens2(dom), tab);
+end
+t = 1;
+dom = [W L O];
+% tab(Q2, Dt)
+tab = ones(nwords, D);
+if past
+  tab = squeeze(obslik(:,t,:));
+else
+  for d=1:min(D,T-t)
+    tab(:,d) = squeeze(obslik(:,t+d-1,d));
+  end
+end
+softCPDpot{O,t} = dpot(dom, ens(dom), tab);
+
+
+%bnet.observed = [];
+% uniformative observations
+%bnet.CPD{eclass(O,2)} = tabular_CPD(bnet, O+ss, 'CPT', mk_stochastic(ones(2,nwords,D,alphasize)));
+%bnet.CPD{eclass(O,1)} = tabular_CPD(bnet, O, 'CPT', mk_stochastic(ones(nwords,D,alphasize)));
+
+engine = jtree_dbn_inf_engine(bnet);
+evidence = cell(ss,T);
+% we add dummy data to O to force its effective size to be 1.
+% The actual values have already been incorporated into softCPDpot 
+evidence(O,:) = num2cell(ones(1,T));
+[engine, ll_dbn] = enter_evidence(engine, evidence, 'softCPDpot', softCPDpot);
+
+
+%evidence(F,:) = num2cell(2*ones(1,T));
+%[engine, ll_dbn] = enter_evidence(engine, evidence);
+
+
+gamma = zeros(nwords, T);
+for t=1:T
+  m = marginal_nodes(engine, [W F], t);
+  gamma(:,t) = m.T(:,2);
+end
+
+gamma
+
+xidbn = zeros(nwords, nwords);
+for t=1:T-1
+  m = marginal_nodes(engine, [W F W+ss], t);
+  xidbn = xidbn + squeeze(m.T(:,2,:));
+end
+
+% thee
+% xidbn(1,4)  = 0.9412  the->e
+% (2,3)=0.0588 t->h
+% (3,4)=0.0588 h-e
+% (4,4)=0.0588 e-e
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/letter2num.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function n = letter2num(l)
+
+% map a-z to 1:26 and A-Z to 27:52
+punct_code = [32:47 58:64 91:96 123:126];
+digits_code = 48:57;
+upper_code = 65:90;
+lower_code = 97:122;
+
+c = double(l);
+n = c-96;
+ndx = find(n <= 0); % upper case
+n(ndx) = c(ndx)  - 64 + 26;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/mgram1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,116 @@
+% a multigram is a degenerate 2HHMM where the bottom level HMMs emit deterministic strings
+% and the the top level abstract states are independent of each other
+% cf. HSMM/test_mgram2 
+
+words = {'the', 't', 'h', 'e'};
+data = 'the';
+nwords = length(words);
+word_len = zeros(1, nwords);
+word_prob = normalise(ones(1,nwords));
+word_logprob = log(word_prob);
+for wi=1:nwords
+  word_len(wi)=length(words{wi});
+end
+D = max(word_len);
+
+alphasize = 26;
+data = letter2num(data);
+T = length(data);
+
+% node numbers
+W = 1; % top level state = word id
+L = 2; % bottom level state = letter position within word
+F = 3;
+O = 4;
+
+ss = 4;
+intra = zeros(ss,ss);
+intra(W,[F L O])=1;
+intra(L,[O F])=1;
+
+inter = zeros(ss,ss);
+inter(W,W)=1;
+inter(L,L)=1;
+inter(F,[W L])=1;
+
+% node sizes
+ns = zeros(1,ss);
+ns(W) = nwords;
+ns(L) = D;
+ns(F) = 2;
+ns(O) = alphasize;
+
+
+% Make the DBN
+bnet = mk_dbn(intra, inter, ns, 'observed', O);
+eclass = bnet.equiv_class;
+
+
+
+% uniform start distrib over words, uniform trans mat
+Wstart = normalise(ones(1,nwords));
+Wtrans = mk_stochastic(ones(nwords,nwords));
+
+% always start in state 1 for each bottom level HMM
+delta1_start = zeros(1, D);
+delta1_start(1) = 1;
+Lstart = repmat(delta1_start, nwords, 1);
+LRtrans = mk_leftright_transmat(D, 0); % 0 self loop prob
+Ltrans = repmat(LRtrans, [1 1 nwords]);
+
+% Finish in the last letter of each word
+Fprob = zeros(nwords, D, 2);
+Fprob(:,:,1)=1;
+for i=1:nwords
+  Fprob(i,length(words{i}),2)=1;
+  Fprob(i,length(words{i}),1)=0;
+end
+
+% Each state uniquely emits a letter
+Oprob = zeros(nwords, D, alphasize);
+for i=1:nwords
+  for l=1:length(words{i})
+    a = double(words{i}(l))-96;
+    Oprob(i,l,a)=1;
+  end
+end
+
+
+% Define CPDs for slice 
+bnet.CPD{eclass(W,1)} = tabular_CPD(bnet, W, 'CPT', Wstart);
+bnet.CPD{eclass(L,1)} = tabular_CPD(bnet, L, 'CPT', Lstart);
+bnet.CPD{eclass(F,1)} = tabular_CPD(bnet, F, 'CPT', Fprob);
+bnet.CPD{eclass(O,1)} = tabular_CPD(bnet, O, 'CPT', Oprob);
+
+% Define CPDs for slice 2
+bnet.CPD{eclass(W,2)} = hhmmQ_CPD(bnet, W+ss, 'Fbelow', F, 'startprob', Wstart,  'transprob', Wtrans);
+bnet.CPD{eclass(L,2)} = hhmmQ_CPD(bnet, L+ss, 'Fself', F, 'Qps', W+ss, 'startprob', Lstart, 'transprob', Ltrans);
+
+evidence = cell(ss,T);
+evidence{W,1}=1;
+sample = cell2num(sample_dbn(bnet, 'length', T, 'evidence', evidence));
+str = lower(sample(4,:))
+
+engine = jtree_dbn_inf_engine(bnet);
+evidence = cell(ss,T);
+evidence(O,:) = num2cell(data);
+[engine, ll_dbn] = enter_evidence(engine, evidence);
+
+gamma = zeros(nwords, T);
+for t=1:T
+  m = marginal_nodes(engine, [W F], t);
+  gamma(:,t) = m.T(:,2);
+end
+gamma
+
+xidbn = zeros(nwords, nwords);
+for t=1:T-1
+  m = marginal_nodes(engine, [W F W+ss], t);
+  xidbn = xidbn + squeeze(m.T(:,2,:));
+end
+
+% thee
+% xidbn(1,4)  = 0.9412  the->e
+% (2,3)=0.0588 t->h
+% (3,4)=0.0588 h-e
+% (4,4)=0.0588 e-e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/mgram2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,200 @@
+% Like a durational HMM, except we use soft evidence on the observed nodes.
+% Should give the same results as HSMM/test_mgram2.
+
+past = 1;
+% If past=1, P(Yt|Qt=j,Dt=d) = P(y_{t-d+1:t}|j)
+% If past=0, P(Yt|Qt=j,Dt=d) = P(y_{t:t+d-1}|j) - future evidence
+
+words = {'the', 't', 'h', 'e'};
+data = 'the';
+nwords = length(words);
+word_len = zeros(1, nwords);
+word_prob = normalise(ones(1,nwords));
+word_logprob = log(word_prob);
+for wi=1:nwords
+  word_len(wi)=length(words{wi});
+end
+D = max(word_len);
+
+
+alphasize = 26*2;
+data = letter2num(data);
+T = length(data);
+
+% node numbers
+W = 1; % top level state = word id
+L = 2; % bottom level state = letter position within word
+F = 3;
+O = 4;
+
+ss = 4;
+intra = zeros(ss,ss);
+intra(W,[F L O])=1;
+intra(L,[O F])=1;
+
+inter = zeros(ss,ss);
+inter(W,W)=1;
+inter(L,L)=1;
+inter(F,[W L O])=1;
+
+% node sizes
+ns = zeros(1,ss);
+ns(W) = nwords;
+ns(L) = D;
+ns(F) = 2;
+ns(O) = alphasize;
+ns2 = [ns ns];
+
+% Make the DBN
+bnet = mk_dbn(intra, inter, ns, 'observed', O);
+eclass = bnet.equiv_class;
+
+% uniform start distrib over words, uniform trans mat
+Wstart = normalise(ones(1,nwords));
+Wtrans = mk_stochastic(ones(nwords,nwords));
+%Wtrans = ones(nwords,nwords);
+
+% always start in state d = length(word) for each bottom level HMM
+Lstart = zeros(nwords, D);
+for i=1:nwords
+  l = length(words{i});
+  Lstart(i,l)=1;
+end
+
+% make downcounters
+RLtrans = mk_rightleft_transmat(D, 0); % 0 self loop prob
+Ltrans = repmat(RLtrans, [1 1 nwords]);
+
+% Finish when downcoutner = 1
+Fprob = zeros(nwords, D, 2);
+Fprob(:,1,2)=1;
+Fprob(:,2:end,1)=1;
+
+
+% Define CPDs for slice 1
+bnet.CPD{eclass(W,1)} = tabular_CPD(bnet, W, 'CPT', Wstart);
+bnet.CPD{eclass(L,1)} = tabular_CPD(bnet, L, 'CPT', Lstart);
+bnet.CPD{eclass(F,1)} = tabular_CPD(bnet, F, 'CPT', Fprob);
+
+
+% Define CPDs for slice 2
+bnet.CPD{eclass(W,2)} = hhmmQ_CPD(bnet, W+ss, 'Fbelow', F, 'startprob', Wstart,  'transprob', Wtrans);
+bnet.CPD{eclass(L,2)} = hhmmQ_CPD(bnet, L+ss, 'Fself', F, 'Qps', W+ss, 'startprob', Lstart, 'transprob', Ltrans);
+
+
+if 0
+% To test it is generating correctly, we create an artificial
+% observation process that capitalizes at the start of a new segment
+% Oprob(Ft-1,Qt,Dt,Yt)
+Oprob = zeros(2,nwords,D,alphasize);
+Oprob(1,1,3,letter2num('t'),1)=1;
+Oprob(1,1,2,letter2num('h'),1)=1;
+Oprob(1,1,1,letter2num('e'),1)=1;
+Oprob(2,1,3,letter2num('T'),1)=1;
+Oprob(2,1,2,letter2num('H'),1)=1;
+Oprob(2,1,1,letter2num('E'),1)=1;
+Oprob(1,2,1,letter2num('a'),1)=1;
+Oprob(2,2,1,letter2num('A'),1)=1;
+Oprob(1,3,1,letter2num('b'),1)=1;
+Oprob(2,3,1,letter2num('B'),1)=1;
+Oprob(1,4,1,letter2num('c'),1)=1;
+Oprob(2,4,1,letter2num('C'),1)=1;
+
+% Oprob1(Qt,Dt,Yt)
+Oprob1 = zeros(nwords,D,alphasize);
+Oprob1(1,3,letter2num('t'),1)=1;
+Oprob1(1,2,letter2num('h'),1)=1;
+Oprob1(1,1,letter2num('e'),1)=1;
+Oprob1(2,1,letter2num('a'),1)=1;
+Oprob1(3,1,letter2num('b'),1)=1;
+Oprob1(4,1,letter2num('c'),1)=1;
+
+bnet.CPD{eclass(O,2)} = tabular_CPD(bnet, O+ss, 'CPT', Oprob);
+bnet.CPD{eclass(O,1)} = tabular_CPD(bnet, O, 'CPT', Oprob1);
+
+evidence = cell(ss,T);
+%evidence{W,1}=1;
+sample = cell2num(sample_dbn(bnet, 'length', T, 'evidence', evidence));
+str = num2letter(sample(4,:))
+end
+
+
+if 1
+
+[log_obslik, obslik, match] = mk_mgram_obslik(lower(data), words, word_len, word_prob);
+% obslik(j,t,d)
+softCPDpot = cell(ss,T);
+ens = ns;
+ens(O)=1;
+ens2 = [ens ens];
+for t=2:T
+  dom = [F W+ss L+ss O+ss];
+  % tab(Ft-1, Q2, Dt)
+  tab = ones(2, nwords, D);
+  if past
+    tab(1,:,:)=1; % if haven't finished previous word, likelihood is 1
+    %tab(2,:,:) = squeeze(obslik(:,t,:)); % otherwise likelihood of this segment
+    for d=1:min(t,D)
+      tab(2,:,d) = squeeze(obslik(:,t,d));
+    end
+  else
+    for d=1:max(1,min(D,T+1-t))
+      tab(2,:,d) = squeeze(obslik(:,t+d-1,d));
+    end
+  end
+  softCPDpot{O,t} = dpot(dom, ens2(dom), tab);
+end
+t = 1;
+dom = [W L O];
+% tab(Q2, Dt)
+tab = ones(nwords, D);
+if past
+  %tab = squeeze(obslik(:,t,:));
+  tab(:,1) = squeeze(obslik(:,t,1));
+else
+  for d=1:min(D,T-t)
+    tab(:,d) = squeeze(obslik(:,t+d-1,d));
+  end
+end
+softCPDpot{O,t} = dpot(dom, ens(dom), tab);
+
+
+%bnet.observed = [];
+% uniformative observations
+%bnet.CPD{eclass(O,2)} = tabular_CPD(bnet, O+ss, 'CPT', mk_stochastic(ones(2,nwords,D,alphasize)));
+%bnet.CPD{eclass(O,1)} = tabular_CPD(bnet, O, 'CPT', mk_stochastic(ones(nwords,D,alphasize)));
+
+engine = jtree_dbn_inf_engine(bnet);
+evidence = cell(ss,T);
+% we add dummy data to O to force its effective size to be 1.
+% The actual values have already been incorporated into softCPDpot 
+evidence(O,:) = num2cell(ones(1,T));
+[engine, ll_dbn] = enter_evidence(engine, evidence, 'softCPDpot', softCPDpot);
+
+
+%evidence(F,:) = num2cell(2*ones(1,T));
+%[engine, ll_dbn] = enter_evidence(engine, evidence);
+
+
+gamma = zeros(nwords, T);
+for t=1:T
+  m = marginal_nodes(engine, [W F], t);
+  gamma(:,t) = m.T(:,2);
+end
+
+gamma
+
+xidbn = zeros(nwords, nwords);
+for t=1:T-1
+  m = marginal_nodes(engine, [W F W+ss], t);
+  xidbn = xidbn + squeeze(m.T(:,2,:));
+end
+
+% thee
+% xidbn(1,4)  = 0.9412  the->e
+% (2,3)=0.0588 t->h
+% (3,4)=0.0588 h-e
+% (4,4)=0.0588 e-e
+
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/mgram3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,235 @@
+% like mgram2, except we unroll the DBN so we can use smaller
+% state spaces for the early duration nodes:
+% the state spaces are D1 in {1}, D2 in {1,2}
+
+past = 1;
+
+words = {'the', 't', 'h', 'e'};
+data = 'the';
+nwords = length(words);
+word_len = zeros(1, nwords);
+word_prob = normalise(ones(1,nwords));
+word_logprob = log(word_prob);
+for wi=1:nwords
+  word_len(wi)=length(words{wi});
+end
+D = max(word_len);
+
+
+alphasize = 26*2;
+data = letter2num(data);
+T = length(data);
+
+% node numbers
+W = 1; % top level state = word id
+L = 2; % bottom level state = letter position within word
+F = 3;
+O = 4;
+
+ss = 4;
+intra = zeros(ss,ss);
+intra(W,[F L O])=1;
+intra(L,[O F])=1;
+
+inter = zeros(ss,ss);
+inter(W,W)=1;
+inter(L,L)=1;
+inter(F,[W L O])=1;
+
+T = 3;
+dag = unroll_dbn_topology(intra, inter, T);
+
+% node sizes
+ns = zeros(1,ss);
+ns(W) = nwords;
+ns(L) = D;
+ns(F) = 2;
+ns(O) = alphasize;
+ns = repmat(ns(:), [1 T]);
+for d=1:D
+  ns(d,L)=d; % max duration
+end
+ns = ns(:);
+
+% Equiv class in brackets for D=3
+% The Lt's are not tied until t>=D, since they have different sizes.
+% W1 and W2 are not tied since they have different parent sets.
+
+% W1 (1)  W2 (5) W3 (5) W4 (5)
+% L1 (2)  L2 (6) L3 (7) L4 (7)
+% F1 (3)  F2 (3) F3 (4) F3 (4)
+% O1 (4)  O2 (4) O2 (4) O4 (4)
+
+% Since we are not learning, we can dispense with tying
+
+% Make the bnet
+Wnodes = unroll_set(W, ss, T);
+Lnodes = unroll_set(L, ss, T);
+Fnodes = unroll_set(F, ss, T);
+Onodes = unroll_set(O, ss, T);
+
+bnet = mk_bnet(dag, ns);
+eclass = bnet.equiv_class;
+
+% uniform start distrib over words, uniform trans mat
+Wstart = normalise(ones(1,nwords));
+Wtrans = mk_stochastic(ones(nwords,nwords));
+bnet.CPD{eclass(Wnodes(1))} = tabular_CPD(bnet, Wnodes(1), 'CPT', Wstart);
+for t=2:T
+bnet.CPD{eclass(Wnodes(t))} = hhmmQ_CPD(bnet, Wnodes(t), 'Fbelow', Fnodes(t-1), ...
+					'startprob', Wstart,  'transprob', Wtrans);
+end
+
+% always start in state d = length(word) for each bottom level HMM
+% and then count down
+% make downcounters
+RLtrans = mk_rightleft_transmat(D, 0); % 0 self loop prob
+Ltrans = repmat(RLtrans, [1 1 nwords]);
+
+for t=1:T
+  Lstart = zeros(nwords, min(t,D));
+  for i=1:nwords
+    l = length(words{i});
+    Lstart(i,l)=1;
+    if d==1
+      bnet.CPD{eclass(Lnodes(1))} = tabular_CPD(bnet, Lnodes(1), 'CPT', Lstart);
+    else
+      bnet.CPD{eclass(Lnodes(t))} = hhmmQ_CPD(bnet, Lnodes(t), 'Fself', Fnodes(t-1), 'Qps', Wnodes(t), ...
+					      'startprob', Lstart, 'transprob', Ltrans);
+    end
+  end
+end
+
+
+% Finish when downcoutner = 1
+Fprob = zeros(nwords, D, 2);
+Fprob(:,1,2)=1;
+Fprob(:,2:end,1)=1;
+
+
+% Define CPDs for slice 
+bnet.CPD{eclass(W,1)} = tabular_CPD(bnet, W, 'CPT', Wstart);
+bnet.CPD{eclass(L,1)} = tabular_CPD(bnet, L, 'CPT', Lstart);
+bnet.CPD{eclass(F,1)} = tabular_CPD(bnet, F, 'CPT', Fprob);
+
+
+% Define CPDs for slice 2
+bnet.CPD{eclass(W,2)} = hhmmQ_CPD(bnet, W+ss, 'Fbelow', F, 'startprob', Wstart,  'transprob', Wtrans);
+bnet.CPD{eclass(L,2)} = hhmmQ_CPD(bnet, L+ss, 'Fself', F, 'Qps', W+ss, 'startprob', Lstart, 'transprob', Ltrans);
+
+
+if 0
+% To test it is generating correctly, we create an artificial
+% observation process that capitalizes at the start of a new segment
+% Oprob(Ft-1,Qt,Dt,Yt)
+Oprob = zeros(2,nwords,D,alphasize);
+Oprob(1,1,3,letter2num('t'),1)=1;
+Oprob(1,1,2,letter2num('h'),1)=1;
+Oprob(1,1,1,letter2num('e'),1)=1;
+Oprob(2,1,3,letter2num('T'),1)=1;
+Oprob(2,1,2,letter2num('H'),1)=1;
+Oprob(2,1,1,letter2num('E'),1)=1;
+Oprob(1,2,1,letter2num('a'),1)=1;
+Oprob(2,2,1,letter2num('A'),1)=1;
+Oprob(1,3,1,letter2num('b'),1)=1;
+Oprob(2,3,1,letter2num('B'),1)=1;
+Oprob(1,4,1,letter2num('c'),1)=1;
+Oprob(2,4,1,letter2num('C'),1)=1;
+
+% Oprob1(Qt,Dt,Yt)
+Oprob1 = zeros(nwords,D,alphasize);
+Oprob1(1,3,letter2num('t'),1)=1;
+Oprob1(1,2,letter2num('h'),1)=1;
+Oprob1(1,1,letter2num('e'),1)=1;
+Oprob1(2,1,letter2num('a'),1)=1;
+Oprob1(3,1,letter2num('b'),1)=1;
+Oprob1(4,1,letter2num('c'),1)=1;
+
+bnet.CPD{eclass(O,2)} = tabular_CPD(bnet, O+ss, 'CPT', Oprob);
+bnet.CPD{eclass(O,1)} = tabular_CPD(bnet, O, 'CPT', Oprob1);
+
+evidence = cell(ss,T);
+%evidence{W,1}=1;
+sample = cell2num(sample_dbn(bnet, 'length', T, 'evidence', evidence));
+str = num2letter(sample(4,:))
+end
+
+
+
+
+[log_obslik, obslik, match] = mk_mgram_obslik(lower(data), words, word_len, word_prob);
+% obslik(j,t,d)
+softCPDpot = cell(ss,T);
+ens = ns;
+ens(O)=1;
+ens2 = [ens ens];
+for t=2:T
+  dom = [F W+ss L+ss O+ss];
+  % tab(Ft-1, Q2, Dt)
+  tab = ones(2, nwords, D);
+  if past
+    tab(1,:,:)=1; % if haven't finished previous word, likelihood is 1
+    %tab(2,:,:) = squeeze(obslik(:,t,:)); % otherwise likelihood of this segment
+    for d=1:min(t,D)
+      tab(2,:,d) = squeeze(obslik(:,t,d));
+    end
+  else
+    for d=1:max(1,min(D,T+1-t))
+      tab(2,:,d) = squeeze(obslik(:,t+d-1,d));
+    end
+  end
+  softCPDpot{O,t} = dpot(dom, ens2(dom), tab);
+end
+t = 1;
+dom = [W L O];
+% tab(Q2, Dt)
+tab = ones(nwords, D);
+if past
+  %tab = squeeze(obslik(:,t,:));
+  tab(:,1) = squeeze(obslik(:,t,1));
+else
+  for d=1:min(D,T-t)
+    tab(:,d) = squeeze(obslik(:,t+d-1,d));
+  end
+end
+softCPDpot{O,t} = dpot(dom, ens(dom), tab);
+
+
+%bnet.observed = [];
+% uniformative observations
+%bnet.CPD{eclass(O,2)} = tabular_CPD(bnet, O+ss, 'CPT', mk_stochastic(ones(2,nwords,D,alphasize)));
+%bnet.CPD{eclass(O,1)} = tabular_CPD(bnet, O, 'CPT', mk_stochastic(ones(nwords,D,alphasize)));
+
+engine = jtree_dbn_inf_engine(bnet);
+evidence = cell(ss,T);
+% we add dummy data to O to force its effective size to be 1.
+% The actual values have already been incorporated into softCPDpot 
+evidence(O,:) = num2cell(ones(1,T));
+[engine, ll_dbn] = enter_evidence(engine, evidence, 'softCPDpot', softCPDpot);
+
+
+%evidence(F,:) = num2cell(2*ones(1,T));
+%[engine, ll_dbn] = enter_evidence(engine, evidence);
+
+
+gamma = zeros(nwords, T);
+for t=1:T
+  m = marginal_nodes(engine, [W F], t);
+  gamma(:,t) = m.T(:,2);
+end
+
+gamma
+
+xidbn = zeros(nwords, nwords);
+for t=1:T-1
+  m = marginal_nodes(engine, [W F W+ss], t);
+  xidbn = xidbn + squeeze(m.T(:,2,:));
+end
+
+% thee
+% xidbn(1,4)  = 0.9412  the->e
+% (2,3)=0.0588 t->h
+% (3,4)=0.0588 h-e
+% (4,4)=0.0588 e-e
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Mgram/num2letter.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function l = num2letter(n)
+
+% map 1:26 to a-z and 27:52 to A-Z
+punct_code = [32:47 58:64 91:96 123:126];
+digits_code = 48:57;
+upper_code = 65:90;
+lower_code = 97:122;
+
+letters = [char(lower_code) char(upper_code)];
+l = letters(n);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/fixed_args_mk_motif_hhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/learn_motif_hhmm.m/1.1.1.1/Tue Jul  2 22:56:14 2002//
+/mk_motif_hhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sample_motif_hhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/HHMM/Motif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/fixed_args_mk_motif_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,99 @@
+function bnet = fixed_args_mk_motif_hhmm(motif_length, motif_pattern, background_char)
+%
+% BNET = MK_MOTIF_HHMM(MOTIF_LENGTH)
+% Make the following HHMM
+%
+%    S2 <----------------------> S1
+%    |                           |
+%    |                           |
+%   M1 -> M2 -> M3 -> end        B1 -> end
+%
+% where Mi represents the i'th letter in the motif
+% and B is the background state.
+% Si chooses between running the motif or the background.
+% The Si and B states have self loops (not shown).
+%
+% The transition params are defined to respect the above topology.
+% The background is uniform; each motif state has a random obs. distribution.
+%
+% BNET = MK_MOTIF_HHMM(MOTIF_LENGTH, MOTIF_PATTERN)
+% In this case, we make the motif submodel deterministically
+% emit the motif pattern. 
+%
+% BNET = MK_MOTIF_HHMM(MOTIF_LENGTH, MOTIF_PATTERN, BACKGROUND_CHAR)
+% In this case, we make the background submodel
+% deterministically emit the specified character (to make the pattern
+% easier to see).
+
+if nargin < 2, motif_pattern = []; end
+if nargin < 3, background_char = []; end
+
+chars = ['a', 'c', 'g', 't'];
+Osize = length(chars);
+
+motif_length = length(motif_pattern);
+Qsize = [2 motif_length];
+Qnodes = 1:2;
+D = 2;
+transprob = cell(1,D);
+termprob = cell(1,D);
+startprob = cell(1,D);
+
+% startprob{d}(k,j), startprob{1}(1,j)
+% transprob{d}(i,k,j), transprob{1}(i,j)
+% termprob{d}(k,j)
+
+
+% LEVEL 1
+
+startprob{1} = zeros(1, 2);
+startprob{1} = [1 0]; % always start in the background model
+
+% When in the background state, we stay there with high prob
+% When in the motif state, we immediately return to the background state.
+transprob{1} = [0.8 0.2;
+		1.0 0.0];
+
+
+% LEVEL 2
+startprob{2} = 'leftstart'; % both submodels start in substate 1
+transprob{2} = zeros(motif_length, 2, motif_length);
+termprob{2} = zeros(2, motif_length);
+
+% In the background model, we only use state 1.
+transprob{2}(1,1,1) = 1; % self loop
+termprob{2}(1,1) = 0.2; % prob transition to end state
+
+% Motif model
+transprob{2}(:,2,:) = mk_leftright_transmat(motif_length, 0); % no self loops
+termprob{2}(2,end) = 1.0; % last state immediately terminates
+
+
+% OBS LEVEl
+
+obsprob = zeros([Qsize Osize]);
+if isempty(background_char)
+  % uniform background model
+  obsprob(1,1,:) = normalise(ones(Osize,1));
+else
+  % deterministic background model (easy to see!)
+  m = find(chars==background_char);
+  obsprob(1,1,m) = 1.0;
+end
+
+if gen_motif
+  % initialise with true motif (cheating)
+  for i=1:motif_length
+    m = find(chars == motif_pattern(i));
+    obsprob(2,i,m) = 1.0;
+  end
+else
+  obsprob(2,:,:) = mk_stochastic(ones(motif_length, Osize));
+end
+
+Oargs = {'CPT', obsprob};
+
+[bnet, Qnodes, Fnodes, Onode] = mk_hhmm('Qsizes', Qsize, 'Osize', Osize, 'discrete_obs', 1, ...
+	       'Oargs', Oargs, 'Ops', Qnodes(1:2), ...
+	       'startprob', startprob, 'transprob', transprob, 'termprob', termprob);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/learn_motif_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,75 @@
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+chars = ['a', 'c', 'g', 't'];
+motif = 'accca';
+motif_length = length(motif);
+motif_code = zeros(1, motif_length);
+for i=1:motif_length
+  motif_code(i) = find(chars == motif(i));
+end
+
+[bnet_init, Qnodes, Fnodes, Onode] = mk_motif_hhmm('motif_length', length(motif));
+%[bnet_init, Qnodes, Fnodes, Onode] = mk_motif_hhmm('motif_pattern', motif);
+ss = bnet_init.nnodes_per_slice;
+
+
+
+% We generate a training set by creating uniform sequences,
+% and inserting a single motif at a random location.
+ntrain = 100;
+T = 20;
+cases = cell(1, ntrain);
+
+if 1
+  % uniform background 
+  background_dist = normalise(ones(1, length(chars)));
+end
+if 0
+  % use a constant background
+  background_dist = zeros(1, length(chars));
+  m = find(chars=='t');
+  background_dist(m) = 1.0;
+end
+if 0
+  % use a background skewed away from the motif
+  p = 0.01; q = (1-(2*p))/2;
+  background_dist = [p p q q];
+end
+
+unif_pos = normalise(ones(1, T-length(motif)));
+cases = cell(1, ntrain);
+data = zeros(1,T);
+for i=1:ntrain
+  data = sample_discrete(background_dist, 1, T);
+  L = sample_discrete(unif_pos, 1, 1);
+  data(L:L+length(motif)-1) = motif_code;
+  cases{i} = cell(ss, T);
+  cases{i}(Onode,:) = num2cell(data);
+end
+disp('sample training cases')
+for i=1:5
+  chars(cell2num(cases{i}(Onode,:)))
+end
+
+engine_init = hmm_inf_engine(bnet_init);
+
+[bnet_learned, LL, engine_learned] = ...
+    learn_params_dbn_em(engine_init, cases, 'max_iter', 100, 'thresh', 1e-2);
+%			'anneal', 1, 'anneal_rate', 0.7);
+
+% extract the learned motif profile
+eclass = bnet_learned.equiv_class;
+CPDO=struct(bnet_learned.CPD{eclass(Onode,1)});
+fprintf('columns = chars, rows = states\n');
+profile_learned = squeeze(CPDO.CPT(2,:,:))
+[m,ndx] = max(profile_learned, [], 2);
+map_motif_learned = chars(ndx)
+back_learned = squeeze(CPDO.CPT(1,1,:))'
+%map_back_learned = chars(argmax(back_learned))
+
+CPDO_init = struct(bnet_init.CPD{eclass(Onode,1)});
+profile_init = squeeze(CPDO_init.CPT(2,:,:));
+back_init = squeeze(CPDO_init.CPT(1,1,:))';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/mk_motif_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,137 @@
+function [bnet, Qnodes, Fnodes, Onode] = mk_motif_hhmm(varargin)
+% [bnet, Qnodes, Fnodes, Onode] = mk_motif_hhmm(...)
+%
+% Make the following HHMM
+%
+%    S2 <----------------------> S1
+%    |                           |
+%    |                           |
+%   M1 -> M2 -> M3 -> end        B1 -> end
+%
+% where Mi represents the i'th letter in the motif
+% and B is the background state.
+% Si chooses between running the motif or the background.
+% The Si and B states have self loops (not shown).
+%
+% The transition params are defined to respect the above topology.
+% The background is uniform; each motif state has a random obs. distribution.
+%
+% Optional params:
+% motif_length  - required, unless we specify motif_pattern
+% motif_pattern - if specified, we make the motif submodel deterministically
+%                  emit this pattern
+% background    - if specified, we make the background submodel
+%                  deterministically emit this (makes the motif easier to see!)
+
+
+args = varargin;
+nargs = length(args);
+
+% extract pattern, if any
+motif_pattern = [];
+for i=1:2:nargs
+  switch args{i},
+   case 'motif_pattern', motif_pattern = args{i+1}; 
+  end
+end
+
+% set defaults
+motif_length = length(motif_pattern);
+background_char = [];
+
+% get params
+for i=1:2:nargs
+  switch args{i},
+   case 'motif_length', motif_length = args{i+1}; 
+   case 'background', background_char = args{i+1};
+  end
+end
+
+
+chars = ['a', 'c', 'g', 't'];
+Osize = length(chars);
+
+Qsize = [2 motif_length];
+Qnodes = 1:2;
+D = 2;
+transprob = cell(1,D);
+termprob = cell(1,D);
+startprob = cell(1,D);
+
+% startprob{d}(k,j), startprob{1}(1,j)
+% transprob{d}(i,k,j), transprob{1}(i,j)
+% termprob{d}(k,j)
+
+
+% LEVEL 1
+
+startprob{1} = zeros(1, 2);
+startprob{1} = [1 0]; % always start in the background model
+
+% When in the background state, we stay there with high prob
+% When in the motif state, we immediately return to the background state.
+transprob{1} = [0.8 0.2;
+		1.0 0.0];
+
+
+% LEVEL 2
+startprob{2} = 'leftstart'; % both submodels start in substate 1
+transprob{2} = zeros(motif_length, 2, motif_length);
+termprob{2} = zeros(2, motif_length);
+
+% In the background model, we only use state 1.
+transprob{2}(1,1,1) = 1; % self loop
+termprob{2}(1,1) = 0.2; % prob transition to end state
+
+% Motif model
+transprob{2}(:,2,:) = mk_leftright_transmat(motif_length, 0); % no self loops
+termprob{2}(2,end) = 1.0; % last state immediately terminates
+
+
+% OBS LEVEl
+
+obsprob = zeros([Qsize Osize]);
+if isempty(background_char)
+  % uniform background model
+  %obsprob(1,1,:) = normalise(ones(Osize,1));
+  obsprob(1,1,:) = normalise(rand(Osize,1));
+else
+  % deterministic background model (easy to see!)
+  m = find(chars==background_char);
+  obsprob(1,1,m) = 1.0;
+end
+
+if ~isempty(motif_pattern)
+  % initialise with true motif (cheating)
+  for i=1:motif_length
+    m = find(chars == motif_pattern(i));
+    obsprob(2,i,m) = 1.0;
+  end
+else
+  obsprob(2,:,:) = mk_stochastic(rand(motif_length, Osize));
+end
+
+if 0
+  Oargs = {'CPT', obsprob};
+else
+  % We use a minent prior for the emission distribution for the states in the motif model
+  % (but not the background model). This encourages nearly deterministic distributions.
+  % We create an index matrix  (where M = motif length)
+  %  [2 1
+  %   2 2
+  %   ...
+  %   2 M]
+  % and then convert this to a list of integers, which
+  % specifies when to use the minent prior (Q1=2 specifies motif model).
+  M = motif_length;
+  ndx = [2*ones(M,1) (1:M)'];
+  pcases = subv2ind([2 motif_length], ndx);
+  Oargs = {'CPT', obsprob, 'prior_type', 'entropic', 'entropic_pcases', pcases};
+end
+
+
+
+[bnet, Qnodes, Fnodes, Onode] = mk_hhmm('Qsizes', Qsize, 'Osize', Osize, 'discrete_obs', 1, ...
+	       'Oargs', Oargs, 'Ops', Qnodes(1:2), ...
+	       'startprob', startprob, 'transprob', transprob, 'termprob', termprob);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Motif/sample_motif_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+%bnet = mk_motif_hhmm('motif_pattern', 'acca', 'background', 't');
+bnet = mk_motif_hhmm('motif_pattern', 'accaggggga', 'background', []);
+
+chars = ['a', 'c', 'g', 't'];
+Tmax = 100;
+
+for seqi=1:5
+  evidence = cell2num(sample_dbn(bnet, 'length', Tmax));
+  chars(evidence(end,:))
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+/mk_abcd_hhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_arrow_alpha_hhmm3.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_hhmm2.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_hhmm3.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_hhmm3_args.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/motif_hhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/remove_hhmm_end_state.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/HHMM/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/mk_abcd_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,109 @@
+% Make the HHMM in Figure 1 of the NIPS'01 paper
+
+Qsize = [2 3 2];
+D = 3;
+
+% transprob{d}(i,k,j), transprob{1}(i,j)
+% termprob{d}(k,j), termprob{1}(1,j)
+% startprob{d}(k,j), startprob{1}(1,j)
+% obsprob(k, o) for discrete outputs
+    
+% LEVEL 1
+%       1 2 e
+A{1} = [0 0 1;
+	0 0 1];
+[transprob{1}, termprob{1}] = remove_hhmm_end_state(A{1});
+startprob{1} = [0.5 0.5];
+Q1args = {'startprob', startprob{1}, 'transprob', transprob{1}};
+
+% LEVEL 2
+A{2} = zeros(Qsize(2), Qsize(1), Qsize(2)+1);
+
+%              1 2 3 e
+A{2}(:,1,:) = [0 1 0 0
+	       0 0 1 0
+	       0 0 0 1];
+
+%              1 2 3 e
+A{2}(:,2,:) = [0 1 0 0
+	       0 0 1 0
+	       0 0 0 1];
+
+[transprob{2}, termprob{2}] = remove_hhmm_end_state(A{2});	       
+
+% always enter level 2 in state 1
+startprob{2} = [1 0 0
+		1 0 0];
+
+Q2args = {'startprob', startprob{2}, 'transprob', transprob{2}};
+F2args = {'CPT', termprob{2}};
+
+
+% LEVEL 3
+
+A{3} = zeros([Qsize(3) Qsize(1:2) Qsize(3)+1]);
+endstate = Qsize(3)+1;
+%    Qt-1(3) Qt(1) Qt(2) Qt(3)
+%                               1   2   e
+A{3}(1,      1,    1,    endstate) = 1.0;
+A{3}(:,      1,    2,    :) = [0.0 1.0 0.0
+            	               0.5 0.0 0.5];
+A{3}(1,      1,    3,    endstate) = 1.0;
+
+A{3}(1,      2,    1,    endstate) = 1.0;
+A{3}(:,      2,    2,    :) = [0.0 1.0 0.0
+            	               0.5 0.0 0.5];
+A{3}(1,      2,    3,    endstate) = 1.0;
+
+A{3} = reshape(A{3}, [Qsize(3) prod(Qsize(1:2)) Qsize(3)+1]);
+[transprob{3}, termprob{3}] = remove_hhmm_end_state(A{3});	       
+
+% define the vertical entry points to level 3
+startprob{3} = zeros(Qsize);
+%            Q1 Q2 Q3
+startprob{3}(1, 1, 1) = 1.0;
+startprob{3}(1, 2, 1) = 1.0;
+startprob{3}(1, 3, 1) = 1.0;
+
+startprob{3}(2, 1, 1) = 1.0;
+startprob{3}(2, 2, 1) = 1.0;
+startprob{3}(2, 3, 1) = 1.0;
+
+startprob{3} = reshape(startprob{3}, prod(Qsize(1:2)), Qsize(3));
+
+chars = ['a', 'b', 'c', 'd', 'x', 'y'];
+Osize = length(chars);
+
+obsprob = zeros([Qsize Osize]);
+%       1 2 3 O
+obsprob(1,1,1,find(chars == 'a')) =  1.0;
+
+obsprob(1,2,1,find(chars == 'x')) =  1.0;
+obsprob(1,2,2,find(chars == 'y')) =  1.0;
+
+obsprob(1,3,1,find(chars == 'b')) =  1.0;
+
+obsprob(2,1,1,find(chars == 'c')) =  1.0;
+
+obsprob(2,2,1,find(chars == 'x')) =  1.0;
+obsprob(2,2,2,find(chars == 'y')) =  1.0;
+
+obsprob(2,3,1,find(chars == 'd')) =  1.0;
+
+obsprob = reshape(obsprob, prod(Qsize), Osize);
+
+[intra, inter, Qnodes, Fnodes, Onode] = mk_hhmm_topo(D);
+
+hhmm.Qnodes = Qnodes;
+hhmm.Fnodes = Fnodes;
+hhmm.Onode = Onode;
+hhmm.D = D;
+hhmm.Qsize = Qsize;
+hhmm.Osize = Osize;
+hhmm.startprob = startprob;
+hhmm.transprob = transprob;
+hhmm.termprob = termprob;
+hhmm.obsprob = obsprob;
+hhmm.A = A;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/mk_arrow_alpha_hhmm3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+% Make the following HHMM
+%
+%     LH                  RH
+%    /                      \
+%   /                        \
+%  LR -> UD -> RL -> DU       RL -> UD -> LR -> DU
+%   \
+%    \
+%     Q1 -> Q2
+%
+% where level 1 is fully interconnected (not shown)
+% level 2 is left-right
+% and each model at level 3 is a 2 state LR shared HMM 
+
+Qsizes = [2 4 2];
+D = 3;
+
+% LEVEL 1
+
+startprob1 = 'ergodic';
+transprob1 = 'ergodic';
+
+
+% LEVEL 2
+
+startprob = zeros(2, 4);
+%        Q1  Q2
+startprob(1, 1) = 1;
+startprob(2, 3) = 1;
+
+transprob = zeros(2, 4, 4);
+transprob(1,:,:) = [0 1 0 0
+		    0 0 1 0
+		    0 0 0 1
+		    0 0 0 1];
+transprob(2,:,:) = [0 0 0 1
+		    1 0 0 0
+		    0 1 0 0
+		    0 0 0 1];
+
+Q2args = {'startprob', startprob, 'transprob', transprob};
+
+% always terminate in state 4 (default)
+% F2args
+
+% LEVEL 3
+
+% Defaults are fine: always start in state 1, left-right model, finish in state 2
+
+
+% OBS LEVEl
+
+chars = ['L', 'l', 'U', 'u', 'R', 'r', 'D', 'd'];
+Osize = length(chars);
+
+obsprob = zeros([4 2 Osize]);
+%       Q2 Q3 O
+obsprob(1, 1, find(chars == 'L')) =  1.0;
+obsprob(1, 2, find(chars == 'l')) =  1.0;
+
+obsprob(2, 1, find(chars == 'U')) =  1.0;
+obsprob(2, 2, find(chars == 'u')) =  1.0;
+
+obsprob(3, 1, find(chars == 'R')) =  1.0;
+obsprob(3, 2, find(chars == 'r')) =  1.0;
+
+obsprob(4, 1, find(chars == 'D')) =  1.0;
+obsprob(4, 2, find(chars == 'd')) =  1.0;
+
+Oargs = {'CPT', obsprob};
+
+
+bnet = mk_hhmm3('Qsizes', Qsizes, 'Osize', Osize', 'discrete_obs', 1, 'Oargs', Oargs, 'Q1args', Q1args, 'Q2args', Q2args);
+
+T = 20;
+usecell = 0;
+evidence = sample_dbn(bnet, T, usecell);      
+%chars(evidence(end,:))
+
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; obs = 6;
+Qnodes = [Q1 Q2 Q3]; Fnodes = [F2 F3];
+
+pretty_print_hhmm_parse(evidence, Qnodes, Fnodes, obs, chars);
+
+eclass = bnet.equiv_class;
+S=struct(bnet.CPD{eclass(Q2,2)})
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/mk_hhmm2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,111 @@
+function bnet = mk_hhmm2(varargin)
+% MK_HHMM2 Make a 2 level Hierarchical HMM
+% bnet = mk_hhmm2(...)
+%
+% 2-layer hierarchical HMM  (node numbers in parens)
+%
+%   Q1(1) ---------> Q1(5)
+% /  | \            / |
+% |  |  v          /  |
+% |  |  F2(3) --- /   |
+% |  |  ^         \   |
+% |  | /           \  |
+% |  v              \ v
+% |  Q2(2)--------> Q2 (6)
+% |  |    
+% \  | 
+%  v v    
+%   O(4)
+%
+%
+% Optional arguments [default]
+%
+% discrete_obs - 1 means O is tabular_CPD, 0 means O is gaussian_CPD [0]
+% obsCPT       - CPT(o,q1,q2) params for O ['rnd']
+% mu           - mu(:,q1,q2) params for O [ [] ]
+% Sigma        - Sigma(:,q1,q2) params for O [ [] ]
+%
+% F2toQ1       - 1 if Q2 is an hhmm_CPD, 0 if F2 -> Q2 arc is absent, so level 2 never resets [1]
+% Q1args        - arguments to be passed to the constructors for Q1(t=2) [ {} ]
+% Q2args        - arguments to be passed to the constructors for Q2(t=2) [ {} ]
+%
+% F2 only turns on (wp 0.5) when Q2 enters its final state.
+% Q1 (slice 1) is clamped to be uniform.
+% Q2 (slice 1) is clamped to always start in state 1.
+
+[os nmodels nstates] = size(mu);
+
+ss = 4;
+Q1 = 1; Q2 = 2; F2 = 3; obs = 4;
+Qnodes = [Q1 Q2];
+names = {'Q1', 'Q2', 'F2', 'obs'};
+intra = zeros(ss);
+intra(Q1, [Q2 F2 obs]) = 1;
+intra(Q2, [F2 obs]) = 1;
+
+inter = zeros(ss);
+inter(Q1,Q1) = 1;
+inter(F2,Q1) = 1;
+if F2toQ2
+  inter(F2,Q2)=1;
+end
+inter(Q2,Q2) = 1;
+
+ns = zeros(1,ss);
+
+ns(Q1) = nmodels;
+ns(Q2) = nstates;
+ns(F2) = 2;
+ns(obs) = os;
+
+dnodes = [Q1 Q2 F2];
+if discrete_obs
+  dnodes = [dnodes obs];
+end
+onodes = [obs];
+
+bnet = mk_dbn(intra, inter, ns, 'observed', onodes, 'discrete', dnodes, 'names', names);
+eclass = bnet.equiv_class;
+
+% SLICE 1
+
+% We clamp untied nodes in the first slice, since their params can't be estimated
+% from just one sequence
+
+% uniform prior on initial model
+CPT = normalise(ones(1,nmodels));
+bnet.CPD{eclass(Q1,1)} = tabular_CPD(bnet, Q1, 'CPT', CPT, 'adjustable', 0);
+
+% each model always starts in state 1
+CPT = zeros(ns(Q1), ns(Q2));
+CPT(:, 1) = 1.0;
+bnet.CPD{eclass(Q2,1)} = tabular_CPD(bnet, Q2, 'CPT', CPT, 'adjustable', 0);
+
+% Termination probability
+CPT = zeros(ns(Q1), ns(Q2), 2);
+if 1
+  % Each model can only terminate in its final state.
+  % 0 params will remain 0 during EM, thus enforcing this constraint.
+  CPT(:, :, 1) = 1.0; % all states turn F off ...
+  p = 0.5;
+  CPT(:, ns(Q2), 2) = p; % except the last one
+  CPT(:, ns(Q2), 1) = 1-p;
+end
+bnet.CPD{eclass(F2,1)}  = tabular_CPD(bnet, F2, 'CPT', CPT);
+
+if discrete_obs
+  bnet.CPD{eclass(obs,1)} = tabular_CPD(bnet, obs, obs_args{:});
+else
+  bnet.CPD{eclass(obs,1)} = gaussian_CPD(bnet, obs, obs_args{:});
+end
+
+% SLICE 2
+
+
+bnet.CPD{eclass(Q1,2)} = hhmm_CPD(bnet, Q1+ss, Qnodes, 1, D, 'args', Q1args);
+
+if F2toQ2
+  bnet.CPD{eclass(Q2,2)} = hhmmQD_CPD(bnet, Q2+ss, Qnodes, 2, D, Q2args{:});
+else
+  bnet.CPD{eclass(Q2,2)} = tabular_CPD(bnet, Q2+ss, Q2args{:});
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/mk_hhmm3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,181 @@
+function bnet = mk_hhmm3(varargin)
+% MK_HHMM3 Make a 3 level Hierarchical HMM
+% bnet = mk_hhmm3(...)
+%
+% 3-layer hierarchical HMM where level 1 only connects to level 2, not 3 or obs.
+% This enforces sub-models (which differ only in their Q1 index) to be shared.
+% Also, we enforce the fact that each model always starts in its initial state
+% and only finishes in its final state. However, the prob. of finishing (as opposed to
+% self-transitioning to the final state) can be learned.
+% The fact that we always finish from the same state means we do not need to condition
+% F(i) on Q(i-1), since finishing prob is indep of calling context.
+%
+% The DBN is the same as Fig 10 in my tech report.
+%
+%   Q1 ---------->  Q1
+%   |              / |
+%   |             /  |
+%   |  F2 -------    |
+%   |  ^         \   |
+%   | /|          \  |
+%   v  |           v v
+%   Q2-| -------->   Q2
+%  /|  |             ^
+% / |  |            /|
+% | |  F3 ---------/ |
+% | |  ^           \ |
+% | v /              v
+% | Q3 ----------->  Q3
+% |  |    
+% \  | 
+%  v v    
+%   O
+%
+%
+% Optional arguments in name/value format [default]
+%
+% Qsizes      - sizes at each level [ none ]
+% Osize       - size of O node [ none ]
+% discrete_obs - 1 means O is tabular_CPD, 0 means O is gaussian_CPD [0]
+% Oargs       - cell array of args to pass to the O CPD  [ {} ]
+% transprob1  - transprob1(i,j) = P(Q1(t)=j|Q1(t-1)=i)  ['ergodic']
+% startprob1  - startprob1(j) = P(Q1(t)=j)  ['leftstart']
+% transprob2  - transprob2(i,k,j) = P(Q2(t)=j|Q2(t-1)=i,Q1(t)=k)  ['leftright']
+% startprob2  - startprob2(k,j) = P(Q2(t)=j|Q1(t)=k)  ['leftstart']
+% termprob2   - termprob2(j,f) = P(F2(t)=f|Q2(t)=j)  ['rightstop']
+% transprob3  - transprob3(i,k,j) = P(Q3(t)=j|Q3(t-1)=i,Q2(t)=k)  ['leftright']
+% startprob3  - startprob3(k,j) = P(Q3(t)=j|Q2(t)=k)  ['leftstart']
+% termprob3   - termprob3(j,f) = P(F3(t)=f|Q3(t)=j)  ['rightstop']
+%
+% leftstart means the model always starts in state 1.
+% rightstop means the model always finished in its last state (Qsize(d)).
+%
+% Q1:Q3 in slice 1 are of type tabular_CPD
+% Q1:Q3 in slice 2 are of type hhmmQ_CPD.
+% F2 is of type hhmmF_CPD, F3 is of type tabular_CPD.
+
+ss = 6; D = 3;
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; obs = 6;
+Qnodes = [Q1 Q2 Q3]; Fnodes = [F2 F3];
+names = {'Q1', 'Q2', 'Q3', 'F3', 'F2', 'obs'};
+
+intra = zeros(ss);
+intra(Q1, Q2) = 1;
+intra(Q2, [F2 Q3 obs]) = 1;
+intra(Q3, [F3 obs]) = 1;
+intra(F3, F2) = 1;
+
+inter = zeros(ss);
+inter(Q1,Q1) = 1;
+inter(Q2,Q2) = 1;
+inter(Q3,Q3) = 1;
+inter(F2,[Q1 Q2]) = 1;
+inter(F3,[Q2 Q3]) = 1;
+
+
+% get sizes of nodes
+args = varargin;
+nargs = length(args);
+Qsizes = [];
+Osize = 0;
+for i=1:2:nargs
+  switch args{i},
+   case 'Qsizes', Qsizes = args{i+1}; 
+   case 'Osize', Osize = args{i+1}; 
+  end
+end
+if isempty(Qsizes), error('must specify Qsizes'); end
+if Osize==0, error('must specify Osize'); end
+  
+% set default params
+discrete_obs = 0;
+Oargs = {};
+startprob1 = 'ergodic';
+startprob2 = 'leftstart';
+startprob3 = 'leftstart';
+transprob1 = 'ergodic';
+transprob2 = 'leftright';
+transprob3 = 'leftright';
+termprob2 = 'rightstop';
+termprob3 = 'rightstop';
+
+
+for i=1:2:nargs
+  switch args{i},
+   case 'discrete_obs', discrete_obs = args{i+1}; 
+   case 'Oargs',        Oargs = args{i+1};
+   case 'Q1args',       Q1args = args{i+1};
+   case 'Q2args',       Q2args = args{i+1};
+   case 'Q3args',       Q3args = args{i+1};
+   case 'F2args',       F2args = args{i+1};
+   case 'F3args',       F3args = args{i+1};
+  end
+end
+
+
+ns = zeros(1,ss);
+ns(Qnodes) = Qsizes;
+ns(obs) = Osize;
+ns(Fnodes) = 2;
+
+dnodes = [Qnodes Fnodes];
+if discrete_obs
+  dnodes = [dnodes obs];
+end
+onodes = [obs];
+
+bnet = mk_dbn(intra, inter, ns, 'observed', onodes, 'discrete', dnodes, 'names', names);
+eclass = bnet.equiv_class;
+
+if strcmp(startprob1, 'ergodic')
+  startprob1 = normalise(ones(1,ns(Q1)));
+end
+if strcmp(startprob2, 'leftstart')
+  startprob2 = zeros(ns(Q1), ns(Q2));
+  starpbrob2(:, 1) = 1.0;
+end
+if strcmp(startprob3, 'leftstart')
+  startprob3 = zeros(ns(Q2), ns(Q3));
+  starpbrob3(:, 1) = 1.0;
+end
+
+if strcmp(termprob2, 'rightstop')
+  p = 0.9;
+  termprob2 = zeros(Qsize(2),2);
+  termprob2(:, 2) = p; 
+  termprob2(:, 1) = 1-p; 
+  termprob2(1:(Qsize(2)-1), 1) = 1; 
+end
+if strcmp(termprob3, 'rightstop')
+  p = 0.9;
+  termprob3 = zeros(Qsize(3),2);
+  termprob3(:, 2) = p; 
+  termprob3(:, 1) = 1-p; 
+  termprob3(1:(Qsize(3)-1), 1) = 1; 
+end
+
+
+% SLICE 1
+
+% We clamp untied nodes in the first slice, since their params can't be estimated
+% from just one sequence
+
+bnet.CPD{eclass(Q1,1)} = tabular_CPD(bnet, Q1, 'CPT', startprob1, 'adjustable', 0);
+bnet.CPD{eclass(Q2,1)} = tabular_CPD(bnet, Q2, 'CPT', startprob2, 'adjustable', 0);
+bnet.CPD{eclass(Q3,1)} = tabular_CPD(bnet, Q3, 'CPT', startprob3, 'adjustable', 0);
+
+bnet.CPD{eclass(F2,1)}  = hhmmF_CPD(bnet, F2, Qnodes, 2, D, 'termprob', termprob2);
+bnet.CPD{eclass(F3,1)}  = tabular_CPD(bnet, F3, 'CPT', termprob3);
+
+if discrete_obs
+  bnet.CPD{eclass(obs,1)} = tabular_CPD(bnet, obs, Oargs{:});
+else
+  bnet.CPD{eclass(obs,1)} = gaussian_CPD(bnet, obs, Oargs{:});
+end
+
+% SLICE 2
+
+bnet.CPD{eclass(Q1,2)} = hhmmQ_CPD(bnet, Q1+ss, Qnodes, 1, D, 'transprob', transprob1, 'startprob', startprob1);
+bnet.CPD{eclass(Q2,2)} = hhmmQ_CPD(bnet, Q2+ss, Qnodes, 2, D, 'transprob', transprob2, 'startprob', startprob2);
+bnet.CPD{eclass(Q3,2)} = hhmmQ_CPD(bnet, Q3+ss, Qnodes, 3, D, 'transprob', transprob3, 'startprob', startprob3);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/mk_hhmm3_args.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,165 @@
+function bnet = mk_hhmm3(varargin)
+% MK_HHMM3 Make a 3 level Hierarchical HMM
+% bnet = mk_hhmm3(...)
+%
+% 3-layer hierarchical HMM where level 1 only connects to level 2, not 3 or obs.
+% This enforces sub-models (which differ only in their Q1 index) to be shared.
+% Also, we enforce the fact that each model always starts in its initial state
+% and only finishes in its final state. However, the prob. of finishing (as opposed to
+% self-transitioning to the final state) can be learned.
+% The fact that we always finish from the same state means we do not need to condition
+% F(i) on Q(i-1), since finishing prob is indep of calling context.
+%
+% The DBN is the same as Fig 10 in my tech report.
+%
+%   Q1 ---------->  Q1
+%   |              / |
+%   |             /  |
+%   |  F2 -------    |
+%   |  ^         \   |
+%   | /|          \  |
+%   v  |           v v
+%   Q2-| -------->   Q2
+%  /|  |             ^
+% / |  |            /|
+% | |  F3 ---------/ |
+% | |  ^           \ |
+% | v /              v
+% | Q3 ----------->  Q3
+% |  |    
+% \  | 
+%  v v    
+%   O
+%
+% Q1 (slice 1) is clamped to be uniform.
+% Q2 (slice 1) is clamped to always start in state 1.
+% Q3 (slice 1) is clamped to always start in state 1.
+% F3 by default will only finish if Q3 is in its last state (F3 is a tabular_CPD)
+% F2 by default gets the default hhmmF_CPD params.
+% Q1:Q3 (slice 2) by default gets the default hhmmQ_CPD params.
+% O by default gets the default tabular/Gaussian params.
+%
+% Optional arguments in name/value format [default]
+%
+% Qsizes      - sizes at each level [ none ]
+% Osize       - size of O node [ none ]
+% discrete_obs - 1 means O is tabular_CPD, 0 means O is gaussian_CPD [0]
+% Oargs       - cell array of args to pass to the O CPD  [ {} ]
+% Q1args      - args to be passed to constructor for Q1 (slice 2) [ {} ]
+% Q2args      - args to be passed to constructor for Q2 (slice 2) [ {} ]
+% Q3args      - args to be passed to constructor for Q3 (slice 2) [ {} ]
+% F2args       - args to be passed to constructor for F2 [ {} ]
+% F3args       - args to be passed to constructor for F3 [ {'CPT', finish in last Q3 state} ]
+%
+
+ss = 6; D = 3;
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; obs = 6;
+Qnodes = [Q1 Q2 Q3]; Fnodes = [F2 F3];
+names = {'Q1', 'Q2', 'Q3', 'F3', 'F2', 'obs'};
+
+intra = zeros(ss);
+intra(Q1, Q2) = 1;
+intra(Q2, [F2 Q3 obs]) = 1;
+intra(Q3, [F3 obs]) = 1;
+intra(F3, F2) = 1;
+
+inter = zeros(ss);
+inter(Q1,Q1) = 1;
+inter(Q2,Q2) = 1;
+inter(Q3,Q3) = 1;
+inter(F2,[Q1 Q2]) = 1;
+inter(F3,[Q2 Q3]) = 1;
+
+
+% get sizes of nodes
+args = varargin;
+nargs = length(args);
+Qsizes = [];
+Osize = 0;
+for i=1:2:nargs
+  switch args{i},
+   case 'Qsizes', Qsizes = args{i+1}; 
+   case 'Osize', Osize = args{i+1}; 
+  end
+end
+if isempty(Qsizes), error('must specify Qsizes'); end
+if Osize==0, error('must specify Osize'); end
+  
+% set default params
+discrete_obs = 0;
+Oargs = {};
+Q1args = {};
+Q2args = {};
+Q3args = {};
+F2args = {};
+
+% P(Q3, F3)
+CPT = zeros(Qsizes(3), 2);
+% Each model can only terminate in its final state.
+% 0 params will remain 0 during EM, thus enforcing this constraint.
+CPT(:, 1) = 1.0; % all states turn F off ...
+p = 0.5;
+CPT(Qsizes(3), 2) = p; % except the last one
+CPT(Qsizes(3), 1) = 1-p;
+F3args = {'CPT', CPT};
+
+for i=1:2:nargs
+  switch args{i},
+   case 'discrete_obs', discrete_obs = args{i+1}; 
+   case 'Oargs',        Oargs = args{i+1};
+   case 'Q1args',       Q1args = args{i+1};
+   case 'Q2args',       Q2args = args{i+1};
+   case 'Q3args',       Q3args = args{i+1};
+   case 'F2args',       F2args = args{i+1};
+   case 'F3args',       F3args = args{i+1};
+  end
+end
+
+ns = zeros(1,ss);
+ns(Qnodes) = Qsizes;
+ns(obs) = Osize;
+ns(Fnodes) = 2;
+
+dnodes = [Qnodes Fnodes];
+if discrete_obs
+  dnodes = [dnodes obs];
+end
+onodes = [obs];
+
+bnet = mk_dbn(intra, inter, ns, 'observed', onodes, 'discrete', dnodes, 'names', names);
+eclass = bnet.equiv_class;
+
+% SLICE 1
+
+% We clamp untied nodes in the first slice, since their params can't be estimated
+% from just one sequence
+
+% uniform prior on initial model
+CPT = normalise(ones(1,ns(Q1)));
+bnet.CPD{eclass(Q1,1)} = tabular_CPD(bnet, Q1, 'CPT', CPT, 'adjustable', 0);
+
+% each model always starts in state 1
+CPT = zeros(ns(Q1), ns(Q2));
+CPT(:, 1) = 1.0;
+bnet.CPD{eclass(Q2,1)} = tabular_CPD(bnet, Q2, 'CPT', CPT, 'adjustable', 0);
+
+% each model always starts in state 1
+CPT = zeros(ns(Q2), ns(Q3));
+CPT(:, 1) = 1.0;
+bnet.CPD{eclass(Q3,1)} = tabular_CPD(bnet, Q3, 'CPT', CPT, 'adjustable', 0);
+
+bnet.CPD{eclass(F2,1)}  = hhmmF_CPD(bnet, F2, Qnodes, 2, D, F2args{:});
+
+bnet.CPD{eclass(F3,1)}  = tabular_CPD(bnet, F3, F3args{:});
+
+if discrete_obs
+  bnet.CPD{eclass(obs,1)} = tabular_CPD(bnet, obs, Oargs{:});
+else
+  bnet.CPD{eclass(obs,1)} = gaussian_CPD(bnet, obs, Oargs{:});
+end
+
+% SLICE 2
+
+bnet.CPD{eclass(Q1,2)} = hhmmQ_CPD(bnet, Q1+ss, Qnodes, 1, D, Q1args{:});
+bnet.CPD{eclass(Q2,2)} = hhmmQ_CPD(bnet, Q2+ss, Qnodes, 2, D, Q2args{:});
+bnet.CPD{eclass(Q3,2)} = hhmmQ_CPD(bnet, Q3+ss, Qnodes, 3, D, Q3args{:});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/motif_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,95 @@
+% Make the following HHMM
+%
+%    S1 <----------------------> S2
+%    |                           |
+%    |                           |
+%   M1 -> M2 -> M3 -> end        B1 -> end
+%
+% where Mi represents the i'th letter in the motif
+% and B is the background state.
+% Si chooses between running the motif or the background.
+% The Si and B states have self loops (not shown).
+
+if 0
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+end
+
+chars = ['a', 'c', 'g', 't'];
+Osize = length(chars);
+
+motif_pattern = 'acca';
+motif_length = length(motif_pattern);
+Qsize = [2 motif_length];
+Qnodes = 1:2;
+D = 2;
+transprob = cell(1,D);
+termprob = cell(1,D);
+startprob = cell(1,D);
+
+% startprob{d}(k,j), startprob{1}(1,j)
+% transprob{d}(i,k,j), transprob{1}(i,j)
+% termprob{d}(k,j)
+
+
+% LEVEL 1
+
+startprob{1} = zeros(1, 2);
+startprob{1} = [1 0]; % always start in the background model
+
+% When in the background state, we stay there with high prob
+% When in the motif state, we immediately return to the background state.
+transprob{1} = [0.8 0.2;
+		1.0 0.0];
+
+
+% LEVEL 2
+startprob{2} = 'leftstart'; % both submodels start in substate 1
+transprob{2} = zeros(motif_length, 2, motif_length);
+termprob{2} = zeros(2, motif_length);
+
+% In the background model, we only use state 1.
+transprob{2}(1,1,1) = 1; % self loop
+termprob{2}(1,1) = 0.2; % prob transition to end state
+
+% Motif model
+transprob{2}(:,2,:) = mk_leftright_transmat(motif_length, 0);
+termprob{2}(2,end) = 1.0; % last state immediately terminates
+
+
+% OBS LEVEl
+
+obsprob = zeros([Qsize Osize]);
+if 0
+  % uniform background model
+  obsprob(1,1,:) = normalise(ones(Osize,1));
+else
+  % deterministic background model (easy to see!)
+  m = find(chars=='t');
+  obsprob(1,1,m) = 1.0;
+end
+if 1
+  % initialise with true motif (cheating)
+  for i=1:motif_length
+    m = find(chars == motif_pattern(i));
+    obsprob(2,i,m) = 1.0;
+  end
+end
+
+Oargs = {'CPT', obsprob};
+
+[bnet, Qnodes, Fnodes, Onode] = mk_hhmm('Qsizes', Qsize, 'Osize', Osize, 'discrete_obs', 1, ...
+	       'Oargs', Oargs, 'Ops', Qnodes(1:2), ...
+	       'startprob', startprob, 'transprob', transprob, 'termprob', termprob);
+
+
+Tmax = 20;
+usecell = 0;
+
+for seqi=1:5
+  evidence = sample_dbn(bnet, Tmax, usecell);
+  chars(evidence(end,:))
+  %T = size(evidence, 2)
+  %pretty_print_hhmm_parse(evidence, Qnodes, Fnodes, Onode, chars);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Old/remove_hhmm_end_state.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function [transprob, termprob] = remove_hhmm_end_state(A)
+% REMOVE_END_STATE Infer transition and termination probabilities from automaton with an end state
+% [transprob, termprob] = remove_end_state(A)
+% A(i,k,j) = Pr( i->j | Qps=k), where i in 1:Q, j in 1:(Q+1), and Q+1 is the end state
+
+if ndims(A)==2 % top level
+  Q = size(A,1);
+  transprob = A(:,1:Q);
+  termprob = A(:,Q+1)';
+  
+  % rescale
+  for i=1:Q
+    for j=1:Q
+      denom = (1-termprob(i));
+      denom = denom + (denom==0)*eps;
+      transprob(i,j) = transprob(i,j) / denom;
+    end
+  end    
+else
+  Q = size(A,1);
+  Qk = size(A,2);
+  transprob = A(:, :, 1:Q);
+  termprob = A(:,:,Q+1)';
+
+  % rescale
+  for k=1:Qk
+    for i=1:Q
+      for j=1:Q
+	denom = (1-termprob(k,i));
+	denom = denom + (denom==0)*eps;
+	transprob(i,k,j) = transprob(i,k,j) / denom;
+      end
+    end    
+  end
+  
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+/get_square_data.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/hhmm_inference.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/is_F2_true_D3.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/learn_square_hhmm_cts.m/1.1.1.1/Thu Jun 20 00:19:22 2002//
+/learn_square_hhmm_discrete.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_square_hhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/plot_square_hhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sample_square_hhmm_cts.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sample_square_hhmm_discrete.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/square4.mat/1.1.1.1/Wed May 29 15:59:54 2002//
+/square4_cases.mat/1.1.1.1/Wed May 29 15:59:54 2002//
+/test_square_fig.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/test_square_fig.mat/1.1.1.1/Wed May 29 15:59:54 2002//
+D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/HHMM/Square
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/learn_square_hhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_square_hhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/plot_square_hhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sample_square_hhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/HHMM/Square/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/learn_square_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,294 @@
+% Learn a 3 level HHMM similar to mk_square_hhmm
+
+% Because startprob should be shared for t=1:T,
+% but in the DBN is shared for t=2:T, we train using a single long sequence.
+
+discrete_obs = 0;
+supervised = 1;
+obs_finalF2 = 0;
+% It is not possible to observe F2 if we learn
+% because the update_ess method for hhmmF_CPD and hhmmQ_CPD assume
+% the F nodes are always hidden (for speed).
+% However, for generating, we might want to set the final F2=true
+% to force all subroutines to finish.
+
+ss = 6;
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; Onode = 6;
+Qnodes = [Q1 Q2 Q3]; Fnodes = [F2 F3];
+
+seed = 1;
+rand('state', seed);
+randn('state', seed);
+
+if discrete_obs
+  Qsizes = [2 4 2];
+else
+  Qsizes = [2 4 1];
+end
+
+D = 3;
+Qnodes = 1:D;
+startprob = cell(1,D);
+transprob = cell(1,D);
+termprob = cell(1,D);
+
+startprob{1} = 'unif';
+transprob{1} = 'unif';
+
+% In the unsupervised case, it is essential that we break symmetry
+% in the initial param estimates.
+%startprob{2} = 'unif';
+%transprob{2} = 'unif';
+%termprob{2} = 'unif';
+startprob{2} = 'rnd';
+transprob{2} = 'rnd';
+termprob{2} = 'rnd';
+
+leftright = 0;
+if leftright
+  % Initialise base-level models as left-right.
+  % If we initialise with delta functions,
+  % they will remain delat funcitons after learning
+  startprob{3} = 'leftstart';
+  transprob{3}  = 'leftright';
+  termprob{3} = 'rightstop';
+else
+  % If we want to be able to run a base-level model backwards...
+  startprob{3} = 'rnd';
+  transprob{3}  = 'rnd';
+  termprob{3} = 'rnd';
+end
+
+if discrete_obs
+  % Initialise observations of lowest level primitives in a way which we can interpret
+  chars = ['L', 'l', 'U', 'u', 'R', 'r', 'D', 'd'];
+  L=find(chars=='L'); l=find(chars=='l');
+  U=find(chars=='U'); u=find(chars=='u');
+  R=find(chars=='R'); r=find(chars=='r');
+  D=find(chars=='D'); d=find(chars=='d');
+  Osize = length(chars);
+  
+  p = 0.9;
+  obsprob = (1-p)*ones([4 2 Osize]);
+  %       Q2 Q3 O
+  obsprob(1, 1, L) =  p;
+  obsprob(1, 2, l) =  p;
+  obsprob(2, 1, U) =  p;
+  obsprob(2, 2, u) =  p;
+  obsprob(3, 1, R) =  p;
+  obsprob(3, 2, r) =  p;
+  obsprob(4, 1, D) =  p;
+  obsprob(4, 2, d) =  p;
+  obsprob = mk_stochastic(obsprob);
+  Oargs = {'CPT', obsprob};
+
+else
+  % Initialise means of lowest level primitives in a way which we can interpret
+  % These means are little vectors in the east, south, west, north directions.
+  % (left-right=east, up-down=south, right-left=west, down-up=north)
+  Osize = 2;
+  mu = zeros(2, Qsizes(2), Qsizes(3));
+  noise = 0;
+  scale = 3;
+  for q3=1:Qsizes(3)
+    mu(:, 1, q3) = scale*[1;0] + noise*rand(2,1);
+  end
+  for q3=1:Qsizes(3)
+    mu(:, 2, q3) = scale*[0;-1] + noise*rand(2,1);
+  end
+  for q3=1:Qsizes(3)
+    mu(:, 3, q3) = scale*[-1;0] + noise*rand(2,1);
+  end
+  for q3=1:Qsizes(3)
+    mu(:, 4, q3) = scale*[0;1] + noise*rand(2,1);
+  end
+  Sigma = repmat(reshape(scale*eye(2), [2 2 1 1 ]), [1 1 Qsizes(2) Qsizes(3)]);
+  Oargs = {'mean', mu, 'cov', Sigma, 'cov_type', 'diag'};
+end
+
+bnet = mk_hhmm('Qsizes', Qsizes, 'Osize', Osize', 'discrete_obs', discrete_obs,...
+	       'Oargs', Oargs, 'Ops', Qnodes(2:3), ...
+	       'startprob', startprob, 'transprob', transprob, 'termprob', termprob);
+
+if supervised
+  bnet.observed = [Q1 Q2 Onode];
+else
+  bnet.observed = [Onode];
+end
+
+if obs_finalF2
+  engine = jtree_dbn_inf_engine(bnet);
+  % can't use ndx version because sometimes F2 is hidden, sometimes observed
+  error('can''t observe F when learning')
+else
+  if supervised
+    engine = jtree_ndx_dbn_inf_engine(bnet);
+  else
+    engine = jtree_hmm_inf_engine(bnet);
+  end
+end
+  
+if discrete_obs
+  % generate some synthetic data (easier to debug)
+  cases = {};
+
+  T = 8;
+  ev = cell(ss, T);
+  ev(Onode,:) = num2cell([L l U u R r D d]);
+  if supervised
+    ev(Q1,:) = num2cell(1*ones(1,T));
+    ev(Q2,:) = num2cell( [1 1 2 2 3 3 4 4]);
+  end
+  cases{1} = ev;
+  cases{3} = ev;
+    
+  T  = 8;
+  ev = cell(ss, T);
+  if leftright % base model is left-right
+    ev(Onode,:) = num2cell([R r U u L l D d]);
+  else
+    ev(Onode,:) = num2cell([r R u U l L d D]);
+  end
+  if supervised
+    ev(Q1,:) = num2cell(2*ones(1,T));
+    ev(Q2,:) = num2cell( [3 3 2 2 1 1 4 4]);
+  end
+    
+  cases{2} = ev;
+  cases{4} = ev;
+
+  if obs_finalF2
+    for i=1:length(cases)
+      T = size(cases{i},2);
+      cases{i}(F2,T)={2}; % force F2 to be finished at end of seq
+    end
+  end
+
+  if 0
+    ev = cases{4};
+    engine2 = enter_evidence(engine2, ev);
+    T = size(ev,2);
+    for t=1:T
+      m=marginal_family(engine2, F2, t);
+      fprintf('t=%d\n', t);
+      reshape(m.T, [2 2])
+    end
+  end
+  
+  %  [bnet2, LL] = learn_params_dbn_em(engine, cases, 'max_iter', 10);
+  long_seq = cat(2, cases{:});
+  [bnet2, LL, engine2] = learn_params_dbn_em(engine, {long_seq}, 'max_iter', 200);
+  
+  % figure out which subsequence each model is responsible for
+  mpe = calc_mpe_dbn(engine2, long_seq);
+  pretty_print_hhmm_parse(mpe, Qnodes, Fnodes, Onode, chars);
+
+else
+  load 'square4_cases' % cases{seq}{i,t} for i=1:ss 
+  %plot_square_hhmm(cases{1})
+  %long_seq = cat(2, cases{:});
+  train_cases = cases(1:2);
+  long_seq = cat(2, train_cases{:});
+  if ~supervised
+    T = size(long_seq,2);
+    for t=1:T
+      long_seq{Q1,t} = [];
+      long_seq{Q2,t} = [];
+    end
+  end
+  [bnet2, LL, engine2] = learn_params_dbn_em(engine, {long_seq}, 'max_iter', 100);
+
+  CPDO=struct(bnet2.CPD{eclass(Onode,1)});
+  mu = CPDO.mean;
+  Sigma = CPDO.cov;
+  CPDO_full = CPDO;
+  
+  % force diagonal covs after training
+  for k=1:size(Sigma,3)
+    Sigma(:,:,k) = diag(diag(Sigma(:,:,k)));
+  end
+  bnet2.CPD{6} = set_fields(bnet.CPD{6}, 'cov', Sigma);
+  
+  if 0
+  % visualize each model by concatenating means for each model for nsteps in a row
+  nsteps = 5;
+  ev = cell(ss, nsteps*prod(Qsizes(2:3)));
+  t = 1;
+  for q2=1:Qsizes(2)
+    for q3=1:Qsizes(3)
+      for i=1:nsteps
+	ev{Onode,t} = mu(:,q2,q3);
+	ev{Q2,t} = q2;
+	t = t + 1;
+      end
+    end
+  end
+  plot_square_hhmm(ev)      
+  end
+
+  % bnet3 is the same as the learned model, except we will use it in testing mode
+  if supervised
+    bnet3 = bnet2;
+    bnet3.observed = [Onode];
+    engine3 = hmm_inf_engine(bnet3);
+    %engine3 = jtree_ndx_dbn_inf_engine(bnet3);
+  else
+    bnet3 = bnet2;
+    engine3 = engine2;
+  end
+  
+  if 0
+  % segment whole sequence
+  mpe = calc_mpe_dbn(engine3, long_seq);
+  pretty_print_hhmm_parse(mpe, Qnodes, Fnodes, Onode, []);
+  end
+  
+  % segment each sequence
+  test_cases = cases(3:4);
+  for i=1:2
+    ev = test_cases{i};
+    T = size(ev, 2);
+    for t=1:T
+      ev{Q1,t} = [];
+      ev{Q2,t} = [];
+    end
+    mpe = calc_mpe_dbn(engine3, ev);
+    subplot(1,2,i)
+    plot_square_hhmm(mpe)      
+    %pretty_print_hhmm_parse(mpe, Qnodes, Fnodes, Onode, []);
+    q1s = cell2num(mpe(Q1,:));
+    h = hist(q1s, 1:Qsizes(1));
+    map_q1 = argmax(h);
+    str = sprintf('test seq %d is of type %d\n', i, map_q1);
+    title(str)
+  end
+
+end
+
+if 0
+% Estimate gotten by couting transitions in the labelled data
+% Note that a self transition shouldnt count if F2=off.
+Q2ev = cell2num(ev(Q2,:));
+Q2a = Q2ev(1:end-1);
+Q2b = Q2ev(2:end);
+counts = compute_counts([Q2a; Q2b], [4 4]);
+end
+
+eclass = bnet2.equiv_class;
+CPDQ1=struct(bnet2.CPD{eclass(Q1,2)});
+CPDQ2=struct(bnet2.CPD{eclass(Q2,2)});
+CPDQ3=struct(bnet2.CPD{eclass(Q3,2)});
+CPDF2=struct(bnet2.CPD{eclass(F2,1)});
+CPDF3=struct(bnet2.CPD{eclass(F3,1)});
+
+
+A=add_hhmm_end_state(CPDQ2.transprob, CPDF2.termprob(:,:,2));
+squeeze(A(:,1,:))
+squeeze(A(:,2,:))
+CPDQ2.startprob
+ 
+if 0
+S=struct(CPDF2.sub_CPD_term);
+S.nsamples
+reshape(S.counts, [2 4 2])
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/mk_square_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,183 @@
+function bnet = mk_square_hhmm(discrete_obs, true_params, topright)
+
+% Make a 3 level  HHMM described by the following grammar
+%
+% Square -> CLK | CCK % clockwise or counterclockwise
+% CLK -> LR UD RL DU start on top left (1 2 3 4)
+% CCK -> RL UD LR DU  if start at top right (3 2 1 4)
+% CCK -> UD LR DU RL if start at top left (2 1 4 3)
+%
+% LR = left-right, UD = up-down, RL = right-left, DU = down-up
+% LR, UD, RL, DU are sub HMMs.
+%
+% For discrete observations, the subHMMs are 2-state left-right.
+% LR emits L then l, etc.
+%
+% For cts observations, the subHMMs are 1 state.
+% LR emits a vector in the -> direction, with a little noise.
+% Since there is no constraint that we remain in the LR state as long as the RL state,
+% the sides of the square might have different lengths,
+% so the result is not really a square!
+%
+% If true_params = 0, we use random parameters at the top 2 levels
+% (ready for learning). At the bottom level, we use noisy versions
+% of the "true" observations.
+%
+% If topright=1, counter-clockwise starts at top right, not top left
+% This example was inspired by Ivanov and Bobick.
+
+if nargin < 3, topright = 1; end
+
+if 1 % discrete_obs
+  Qsizes = [2 4 2];
+else
+  Qsizes = [2 4 1];
+end
+
+D = 3;
+Qnodes = 1:D;
+startprob = cell(1,D);
+transprob = cell(1,D);
+termprob = cell(1,D);
+
+% LEVEL 1
+
+startprob{1} = 'unif';
+transprob{1} = 'unif';
+
+% LEVEL 2
+
+if true_params
+  startprob{2} = zeros(2, 4);
+  startprob{2}(1, :) = [1 0 0 0];
+  if topright
+    startprob{2}(2, :) = [0 0 1 0];
+  else
+    startprob{2}(2, :) = [0 1 0 0];
+  end
+  
+  transprob{2} = zeros(4, 2, 4);
+  
+  transprob{2}(:,1,:) = [0 1 0 0
+		    0 0 1 0
+		    0 0 0 1
+		    0 0 0 1]; % 4->e
+  if topright
+    transprob{2}(:,2,:) = [0 0 0 1
+		    1 0 0 0
+		    0 1 0 0
+		    0 0 0 1]; % 4->e
+  else
+    transprob{2}(:,2,:) = [0 0 0 1
+		    1 0 0 0
+		    0 0 1 0 % 3->e
+		    0 0 1 0];
+  end
+  
+  %termprob{2} = 'rightstop';
+  termprob{2} = zeros(2,4,2);
+  pfin = 0.8;
+  termprob{2}(1,:,2) = [0 0 0 pfin]; % finish in state 4 (DU)
+  termprob{2}(1,:,1) = 1 - [0 0 0 pfin];
+  if topright
+    termprob{2}(2,:,2) = [0 0 0 pfin];
+    termprob{2}(2,:,1) = 1 - [0 0 0 pfin];
+  else
+    termprob{2}(2,:,2) = [0 0 pfin 0];  % finish in state 3 (RL)
+    termprob{2}(2,:,1) = 1 - [0 0 pfin 0];
+  end
+else
+  % In the unsupervised case, it is essential that we break symmetry
+  % in the initial param estimates.
+  %startprob{2} = 'unif';
+  %transprob{2} = 'unif';
+  %termprob{2} = 'unif';
+  startprob{2} = 'rnd';
+  transprob{2} = 'rnd';
+  termprob{2} = 'rnd';
+end
+
+% LEVEL 3
+
+if 1 |  true_params
+  startprob{3} = 'leftstart';
+  transprob{3}  = 'leftright';
+  termprob{3} = 'rightstop';
+else
+  % If we want to be able to run a base-level model backwards...
+  startprob{3} = 'rnd';
+  transprob{3}  = 'rnd';
+  termprob{3} = 'rnd';
+end
+ 
+
+% OBS LEVEl
+
+if discrete_obs
+  % Initialise observations of lowest level primitives in a way which we can interpret
+  chars = ['L', 'l', 'U', 'u', 'R', 'r', 'D', 'd'];
+  L=find(chars=='L'); l=find(chars=='l');
+  U=find(chars=='U'); u=find(chars=='u');
+  R=find(chars=='R'); r=find(chars=='r');
+  D=find(chars=='D'); d=find(chars=='d');
+  Osize = length(chars);
+  
+  if true_params
+    p = 1; % makes each state fully observed
+  else
+    p = 0.9;
+  end
+  
+  obsprob = (1-p)*ones([4 2 Osize]);
+  %       Q2 Q3 O
+  obsprob(1, 1, L) =  p;
+  obsprob(1, 2, l) =  p;
+  obsprob(2, 1, U) =  p;
+  obsprob(2, 2, u) =  p;
+  obsprob(3, 1, R) =  p;
+  obsprob(3, 2, r) =  p;
+  obsprob(4, 1, D) =  p;
+  obsprob(4, 2, d) =  p;
+  obsprob = mk_stochastic(obsprob);
+  Oargs = {'CPT', obsprob};
+else
+  % Initialise means of lowest level primitives in a way which we can interpret
+  % These means are little vectors in the east, south, west, north directions.
+  % (left-right=east, up-down=south, right-left=west, down-up=north)
+  Osize = 2;
+  mu = zeros(2, Qsizes(2), Qsizes(3));
+  scale = 3;
+  if true_params
+    noise = 0;
+  else
+    noise = 0.5*scale;
+  end
+  for q3=1:Qsizes(3)
+    mu(:, 1, q3) = scale*[1;0] + noise*rand(2,1);
+  end
+  for q3=1:Qsizes(3)
+    mu(:, 2, q3) = scale*[0;-1] + noise*rand(2,1);
+  end
+  for q3=1:Qsizes(3)
+    mu(:, 3, q3) = scale*[-1;0] + noise*rand(2,1);
+  end
+  for q3=1:Qsizes(3)
+    mu(:, 4, q3) = scale*[0;1] + noise*rand(2,1);
+  end
+  Sigma = repmat(reshape(scale*eye(2), [2 2 1 1 ]), [1 1 Qsizes(2) Qsizes(3)]);
+  Oargs = {'mean', mu, 'cov', Sigma, 'cov_type', 'diag'};
+end
+
+if discrete_obs
+  selfprob = 0.5;
+else
+  selfprob = 0.95;
+  % If less than this, it won't look like a square
+  % because it doesn't spend enough time in each state
+  % Unfortunately, the variance on durations (lengths of each side)
+  % is very large
+end
+bnet = mk_hhmm('Qsizes', Qsizes, 'Osize', Osize', 'discrete_obs', discrete_obs, ...
+	       'Oargs', Oargs, 'Ops', Qnodes(2:3), 'selfprob', selfprob, ...
+	       'startprob', startprob, 'transprob', transprob, 'termprob', termprob);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/plot_square_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function plot_square_hhmm(ev)
+% Plot the square shape implicit in the evidence.
+% ev{i,t} is the value of node i in slice t.
+% The observed node contains a velocity (delta increment), which is converted
+% into a position.
+% The Q2 node specifies which model is used; each segment is color-coded
+% in the order red, green, blue, black.
+
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; Onode = 6;
+
+delta = cell2num(ev(Onode,:)); % delta(:,t)
+Q2label = cell2num(ev(Q2,:)); 
+
+T = size(delta, 2);
+pos = zeros(2,T+1);
+clf
+hold on
+cols = {'r', 'g', 'b', 'k'};
+boundary = 0;
+coli = 1;
+for t=2:T+1
+  pos(:,t) = pos(:,t-1) + delta(:,t-1);
+  plot(pos(1,t), pos(2,t), sprintf('%c.', cols{coli}));
+  if t < T
+    boundary = (Q2label(t) ~= Q2label(t-1));
+  end
+  if boundary
+    coli = coli + 1;
+    coli = mod(coli-1, length(cols)) + 1;
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/Old/sample_square_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,160 @@
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+discrete_obs = 1;
+topright = 0;
+
+Qsizes = [2 4 2];
+D = 3;
+Qnodes = 1:D;
+startprob = cell(1,D);
+transprob = cell(1,D);
+termprob = cell(1,D);
+
+% LEVEL 1
+
+startprob{1} = 'ergodic';
+transprob{1} = 'ergodic';
+
+% LEVEL 2
+
+startprob{2} = zeros(2, 4);
+startprob{2}(1, :) = [1 0 0 0];
+if topright
+  startprob{2}(2, :) = [0 0 1 0];
+else
+  startprob{2}(2, :) = [0 1 0 0];
+end
+
+transprob{2} = zeros(4, 2, 4);
+
+transprob{2}(:,1,:) = [0 1 0 0
+		       0 0 1 0
+		       0 0 0 1
+		       0 0 0 1]; % 4->e
+if topright
+  transprob{2}(:,2,:) = [0 0 0 1
+		    1 0 0 0
+		    0 1 0 0
+		    0 0 0 1]; % 4->e
+else
+  transprob{2}(:,2,:) = [0 0 0 1
+		    1 0 0 0
+		    0 0 1 0 % 3->e
+		    0 0 1 0];
+end
+
+%termprob{2} = 'rightstop';
+termprob{2} = zeros(2,4,2);
+pfin = 0.8;
+termprob{2}(1,:,2) = [0 0 0 pfin]; % finish in state 4 (DU)
+termprob{2}(1,:,1) = 1 - [0 0 0 pfin];
+if topright
+  termprob{2}(2,:,2) = [0 0 0 pfin];
+  termprob{2}(2,:,1) = 1 - [0 0 0 pfin];
+else
+  termprob{2}(2,:,2) = [0 0 pfin 0];  % finish in state 3 (RL)
+  termprob{2}(2,:,1) = 1 - [0 0 pfin 0];
+end
+
+% LEVEL 3
+
+startprob{3} = 'leftstart';
+transprob{3}  = 'leftright';
+termprob{3} = 'rightstop';
+
+
+% OBS LEVEl
+
+if discrete_obs
+  chars = ['L', 'l', 'U', 'u', 'R', 'r', 'D', 'd'];
+  L=find(chars=='L'); l=find(chars=='l');
+  U=find(chars=='U'); u=find(chars=='u');
+  R=find(chars=='R'); r=find(chars=='r');
+  D=find(chars=='D'); d=find(chars=='d');
+  Osize = length(chars);
+  
+  obsprob = zeros([4 2 Osize]);
+  %       Q2 Q3 O
+  obsprob(1, 1, L) =  1.0;
+  obsprob(1, 2, l) =  1.0;
+  obsprob(2, 1, U) =  1.0;
+  obsprob(2, 2, u) =  1.0;
+  obsprob(3, 1, R) =  1.0;
+  obsprob(3, 2, r) =  1.0;
+  obsprob(4, 1, D) =  1.0;
+  obsprob(4, 2, d) =  1.0;
+  
+  Oargs = {'CPT', obsprob};
+else
+  Osize = 2;
+  mu = zeros(2, 4, 2);
+  noise = 0;
+  scale = 10;
+  for q3=1:2
+    mu(:, 1, q3) = scale*[1;0] + noise*rand(2,1);
+  end
+  for q3=1:2
+    mu(:, 2, q3) = scale*[0;-1] + noise*rand(2,1);
+  end
+  for q3=1:2
+    mu(:, 3, q3) = scale*[-1;0] + noise*rand(2,1);
+  end
+  for q3=1:2
+    mu(:, 4, q3) = scale*[0;1] + noise*rand(2,1);
+  end
+  Sigma = repmat(reshape(0.01*eye(2), [2 2 1 1 ]), [1 1 4 2]);
+  Oargs = {'mean', mu, 'cov', Sigma};
+end
+
+bnet = mk_hhmm('Qsizes', Qsizes, 'Osize', Osize', 'discrete_obs', discrete_obs, ...
+	       'Oargs', Oargs, 'Ops', Qnodes(2:3), ...
+	       'startprob', startprob, 'transprob', transprob, 'termprob', termprob);
+
+if discrete_obs
+  Tmax = 30;
+else
+  Tmax = 200;
+end
+usecell = ~discrete_obs;
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; Onode = 6;
+Qnodes = [Q1 Q2 Q3]; Fnodes = [F2 F3];
+
+for seqi=1:3
+  evidence = sample_dbn(bnet, Tmax, usecell, 'stop_sampling_F2');      
+  T = size(evidence, 2)
+  if discrete_obs
+    pretty_print_hhmm_parse(evidence, Qnodes, Fnodes, Onode, chars);
+  else
+    pos = zeros(2,T+1);
+    delta = cell2num(evidence(Onode,:));
+    clf
+    hold on
+    cols = {'r', 'g', 'k', 'b'};
+    boundary = cell2num(evidence(F3,:))-1;
+    coli = 1;
+    for t=2:T+1
+      pos(:,t) = pos(:,t-1) + delta(:,t-1);
+      plot(pos(1,t), pos(2,t), sprintf('%c.', cols{coli}));
+      if boundary(t-1)
+	coli = coli + 1;
+	coli = mod(coli-1, length(cols)) + 1;
+      end
+    end
+    %plot(pos(1,:), pos(2,:), '.')
+    %pretty_print_hhmm_parse(evidence, Qnodes, Fnodes, Onode, []);
+    pause
+  end
+end
+
+eclass = bnet.equiv_class;
+S=struct(bnet.CPD{eclass(Q2,2)});
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/get_square_data.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,70 @@
+% Let the user draw a square with the mouse,
+% and then click on the corners to do a manual segmentation
+
+ss = 6;
+Q1 = 1; Q2 = 2; Q3 = 3; obsvel = 6;
+CLOCKWISE = 1; ANTICLOCK = 2;
+LR = 1; UD = 2; RL = 3; DU = 4;
+
+% repeat this block manually incrementing the sequence number
+% and setting ori.
+% (since I don't know how to call getmouse as a call-return function).
+seq = 4;
+%ori = CLOCKWISE
+ori = ANTICLOCK;
+clear xpos ypos
+getmouse
+% end block
+
+% manual segmentation with the mouse
+startseg(1) = 1;
+for i=2:4
+  fprintf('click on start of segment %d\n', i);
+  [x,y] = ginput(1);
+  plot(x,y,'ro')
+  d = dist2([xpos; ypos]', [x y]);
+  startseg(i) = argmin(d);
+end
+
+% plot corners in green 
+%ti = first point in (i+1)st segment
+t1 = startseg(1); t2 = startseg(2); t3 = startseg(3); t4 = startseg(4); 
+plot(xpos(t2), ypos(t2), 'g*')
+plot(xpos(t3), ypos(t3), 'g*')
+plot(xpos(t4), ypos(t4), 'g*')
+
+
+xvel = xpos(2:end) - xpos(1:end-1);
+yvel = ypos(2:end) - ypos(1:end-1);
+speed = [xvel(:)'; yvel(:)'];
+pos_data{seq} = [xpos(:)'; ypos(:)'];
+vel_data{seq} = [xvel(:)'; yvel(:)'];
+T = length(xvel);
+Q1label{seq} = num2cell(repmat(ori, 1, T));
+Q2label{seq} = zeros(1, T);
+if ori == CLOCKWISE
+  Q2label{seq}(t1:t2) = LR;
+  Q2label{seq}(t2+1:t3) = UD;
+  Q2label{seq}(t3+1:t4) = RL;
+  Q2label{seq}(t4+1:T) = DU;
+else
+  Q2label{seq}(t1:t2) = RL;
+  Q2label{seq}(t2+1:t3) = UD;
+  Q2label{seq}(t3+1:t4) = LR;
+  Q2label{seq}(t4+1:T) = DU;
+end
+
+% pos_data{seq}(:,t), vel_data{seq}(:,t) Q1label{seq}(t) Q2label{seq}(t)
+save 'square4' pos_data vel_data Q1label Q2label
+
+nseq = 4;
+cases = cell(1,nseq);
+for seq=1:nseq
+  T = size(vel_data{seq},2);
+  ev = cell(ss,T);
+  ev(obsvel,:) = num2cell(vel_data{seq},1);
+  ev(Q1,:) = Q1label{seq};
+  ev(Q2,:) = num2cell(Q2label{seq});
+  cases{seq} = ev;
+end
+save 'square4_cases' cases 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/hhmm_inference.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+bnet = mk_square_hhmm(1, 1);
+
+engine = {};
+engine{end+1} = hmm_inf_engine(bnet);
+engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+
+exact = 1:length(engine);
+filter = 0;
+single = 0;
+maximize = 0;
+T = 4;
+
+[err, inf_time, engine] = cmp_inference(bnet, engine, exact, T, filter, single, maximize);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/is_F2_true_D3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function stop = is_F2_true_D3(vals)
+% function stop = is_F2_true_D3(vals)
+% 
+% If vals(F2)=2 then level 2 has finished, so we return stop=1
+% to stop sample_dbn. Otherwise we return stop=0.
+% We assume this is for a D=3 level HHMM.
+
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; Onode = 6;
+stop = 0;
+if (iscell(vals) & vals{F2}==2) | (~iscell(vals) & vals(F2)==2)
+  stop = 1;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,152 @@
+% Try to learn a 3 level HHMM similar to mk_square_hhmm
+% from hand-drawn squares.
+
+% Because startprob should be shared for t=1:T,
+% but in the DBN is shared for t=2:T, we train using a single long sequence.
+
+discrete_obs = 0;
+supervised = 1;
+obs_finalF2 = 0;
+% It is not possible to observe F2 if we learn
+% because the update_ess method for hhmmF_CPD and hhmmQ_CPD assume
+% the F nodes are always hidden (for speed).
+% However, for generating, we might want to set the final F2=true
+% to force all subroutines to finish.
+
+seed = 1;
+rand('state', seed);
+randn('state', seed);
+
+bnet = mk_square_hhmm(discrete_obs, 0);
+ 
+ss = 6;
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; Onode = 6;
+Qnodes = [Q1 Q2 Q3]; Fnodes = [F2 F3];
+Qsizes = [2 4 1];
+  
+if supervised
+  bnet.observed = [Q1 Q2 Onode];
+else
+  bnet.observed = [Onode];
+end
+
+if obs_finalF2
+  engine = jtree_dbn_inf_engine(bnet);
+  % can't use ndx version because sometimes F2 is hidden, sometimes observed
+  error('can''t observe F when learning')
+else
+  if supervised
+    engine = jtree_ndx_dbn_inf_engine(bnet);
+  else
+    engine = jtree_hmm_inf_engine(bnet);
+  end
+end
+
+load 'square4_cases' % cases{seq}{i,t} for i=1:ss 
+%plot_square_hhmm(cases{1})
+%long_seq = cat(2, cases{:});
+train_cases = cases(1:2);
+long_seq = cat(2, train_cases{:});
+if ~supervised
+  T = size(long_seq,2);
+  for t=1:T
+    long_seq{Q1,t} = [];
+    long_seq{Q2,t} = [];
+  end
+end
+[bnet2, LL, engine2] = learn_params_dbn_em(engine, {long_seq}, 'max_iter', 2);
+
+eclass = bnet2.equiv_class;
+CPDO=struct(bnet2.CPD{eclass(Onode,1)});
+mu = CPDO.mean;
+Sigma = CPDO.cov;
+CPDO_full = CPDO;
+
+% force diagonal covs after training
+for k=1:size(Sigma,3)
+  Sigma(:,:,k) = diag(diag(Sigma(:,:,k)));
+end
+bnet2.CPD{6} = set_fields(bnet.CPD{6}, 'cov', Sigma);
+
+if 0
+  % visualize each model by concatenating means for each model for nsteps in a row
+  nsteps = 5;
+  ev = cell(ss, nsteps*prod(Qsizes(2:3)));
+  t = 1;
+  for q2=1:Qsizes(2)
+    for q3=1:Qsizes(3)
+      for i=1:nsteps
+	ev{Onode,t} = mu(:,q2,q3);
+	ev{Q2,t} = q2;
+	t = t + 1;
+      end
+    end
+  end
+  plot_square_hhmm(ev)      
+end
+
+% bnet3 is the same as the learned model, except we will use it in testing mode
+if supervised
+  bnet3 = bnet2;
+  bnet3.observed = [Onode];
+  engine3 = hmm_inf_engine(bnet3);
+  %engine3 = jtree_ndx_dbn_inf_engine(bnet3);
+else
+  bnet3 = bnet2;
+  engine3 = engine2;
+end
+
+if 0
+  % segment whole sequence
+  mpe = calc_mpe_dbn(engine3, long_seq);
+  pretty_print_hhmm_parse(mpe, Qnodes, Fnodes, Onode, []);
+end
+
+% segment each sequence
+test_cases = cases(3:4);
+for i=1:2
+  ev = test_cases{i};
+  T = size(ev, 2);
+  for t=1:T
+    ev{Q1,t} = [];
+    ev{Q2,t} = [];
+  end
+  %mpe = calc_mpe_dbn(engine3, ev);
+  mpe = find_mpe(engine3, ev)
+  subplot(1,2,i)
+  plot_square_hhmm(mpe)      
+  %pretty_print_hhmm_parse(mpe, Qnodes, Fnodes, Onode, []);
+  q1s = cell2num(mpe(Q1,:));
+  h = hist(q1s, 1:Qsizes(1));
+  map_q1 = argmax(h);
+  str = sprintf('test seq %d is of type %d\n', i, map_q1);
+  title(str)
+end
+
+
+if 0
+% Estimate gotten by couting transitions in the labelled data
+% Note that a self transition shouldnt count if F2=off.
+Q2ev = cell2num(ev(Q2,:));
+Q2a = Q2ev(1:end-1);
+Q2b = Q2ev(2:end);
+counts = compute_counts([Q2a; Q2b], [4 4]);
+end
+
+eclass = bnet2.equiv_class;
+CPDQ1=struct(bnet2.CPD{eclass(Q1,2)});
+CPDQ2=struct(bnet2.CPD{eclass(Q2,2)});
+CPDQ3=struct(bnet2.CPD{eclass(Q3,2)});
+CPDF2=struct(bnet2.CPD{eclass(F2,1)});
+CPDF3=struct(bnet2.CPD{eclass(F3,1)});
+
+
+A=add_hhmm_end_state(CPDQ2.transprob, CPDF2.termprob(:,:,2));
+squeeze(A(:,1,:));
+CPDQ2.startprob;
+ 
+if 0
+S=struct(CPDF2.sub_CPD_term);
+S.nsamples
+reshape(S.counts, [2 4 2])
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/learn_square_hhmm_discrete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,171 @@
+% Try to learn a 3 level HHMM similar to mk_square_hhmm
+% from synthetic discrete sequences
+
+
+discrete_obs = 1;
+supervised = 0;
+obs_finalF2 = 0;
+
+seed = 1;
+rand('state', seed);
+randn('state', seed);
+
+bnet_init = mk_square_hhmm(discrete_obs, 0);
+
+ss = 6;
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; Onode = 6;
+Qnodes = [Q1 Q2 Q3]; Fnodes = [F2 F3];
+
+if supervised
+  bnet_init.observed = [Q1 Q2 Onode];
+else
+  bnet_init.observed = [Onode];
+end
+
+if obs_finalF2
+  engine_init = jtree_dbn_inf_engine(bnet_init);
+  % can't use ndx version because sometimes F2 is hidden, sometimes observed
+  error('can''t observe F when learning')
+  % It is not possible to observe F2 if we learn
+  % because the update_ess method for hhmmF_CPD and hhmmQ_CPD assume
+  % the F nodes are always hidden (for speed).
+  % However, for generating, we might want to set the final F2=true
+  % to force all subroutines to finish.
+else
+  if supervised
+    engine_init = jtree_ndx_dbn_inf_engine(bnet_init);
+  else
+    engine_init = hmm_inf_engine(bnet_init);
+  end
+end
+  
+% generate some synthetic data (easier to debug)
+chars = ['L', 'l', 'U', 'u', 'R', 'r', 'D', 'd'];
+L=find(chars=='L'); l=find(chars=='l');
+U=find(chars=='U'); u=find(chars=='u');
+R=find(chars=='R'); r=find(chars=='r');
+D=find(chars=='D'); d=find(chars=='d');
+
+cases = {};
+
+T = 8;
+ev = cell(ss, T);
+ev(Onode,:) = num2cell([L l U u R r D d]);
+if supervised
+  ev(Q1,:) = num2cell(1*ones(1,T));
+  ev(Q2,:) = num2cell( [1 1 2 2 3 3 4 4]);
+end
+cases{1} = ev;
+cases{3} = ev;
+
+T  = 8;
+ev = cell(ss, T);
+%we start with R then r, even though we are running the model 'backwards'!
+ev(Onode,:) = num2cell([R r U u L l D d]);
+
+if supervised
+  ev(Q1,:) = num2cell(2*ones(1,T));
+  ev(Q2,:) = num2cell( [3 3 2 2 1 1 4 4]);
+end
+
+cases{2} = ev;
+cases{4} = ev;
+
+if obs_finalF2
+  for i=1:length(cases)
+    T = size(cases{i},2);
+    cases{i}(F2,T)={2}; % force F2 to be finished at end of seq
+  end
+end
+
+
+% startprob should be shared for t=1:T,
+% but in the DBN it is shared for t=2:T,
+% so we train using a single long sequence.
+long_seq = cat(2, cases{:});
+[bnet_learned, LL, engine_learned] = ...
+    learn_params_dbn_em(engine_init, {long_seq}, 'max_iter', 200);
+
+% figure out which subsequence each model is responsible for
+mpe = calc_mpe_dbn(engine_learned, long_seq);
+pretty_print_hhmm_parse(mpe, Qnodes, Fnodes, Onode, chars);
+
+
+% The "true" segmentation of the training sequence  is
+% Q1: 1                 2
+% O:  L l U u R r D d | R r U u L l D d | etc.
+% 
+% When we learn in a supervised fashion, we recover the "truth".
+
+% When we learn in an unsupervised fashion with seed=1, we get
+% Q1: 2                       1
+% O:  L l U u R r D d  R r | U u L l D d | etc.
+%
+% This means for model 1:
+% starts in state 2
+% transitions 2->1, 1->4, 4->e, 3->2
+%
+% For model 2,
+% starts in state 1
+% transitions 1->2, 2->3, 3->4 or e, 4->3
+
+% examine the params
+eclass = bnet_learned.equiv_class;
+CPDQ1=struct(bnet_learned.CPD{eclass(Q1,2)});
+CPDQ2=struct(bnet_learned.CPD{eclass(Q2,2)});
+CPDQ3=struct(bnet_learned.CPD{eclass(Q3,2)});
+CPDF2=struct(bnet_learned.CPD{eclass(F2,1)});
+CPDF3=struct(bnet_learned.CPD{eclass(F3,1)});
+CPDO=struct(bnet_learned.CPD{eclass(Onode,1)});
+
+A_learned =add_hhmm_end_state(CPDQ2.transprob, CPDF2.termprob(:,:,2));
+squeeze(A_learned(:,1,:))
+squeeze(A_learned(:,2,:))
+
+
+% Does the "true" model have higher likelihood than the learned one?
+% i.e., Does the unsupervised method learn the wrong model because
+% we have the wrong cost fn, or because of local minima?
+
+bnet_true = mk_square_hhmm(discrete_obs,1);
+
+% examine the params
+eclass = bnet_learned.equiv_class;
+CPDQ1_true=struct(bnet_true.CPD{eclass(Q1,2)});
+CPDQ2_true=struct(bnet_true.CPD{eclass(Q2,2)});
+CPDQ3_true=struct(bnet_true.CPD{eclass(Q3,2)});
+CPDF2_true=struct(bnet_true.CPD{eclass(F2,1)});
+CPDF3_true=struct(bnet_true.CPD{eclass(F3,1)});
+
+A_true =add_hhmm_end_state(CPDQ2_true.transprob, CPDF2_true.termprob(:,:,2));
+squeeze(A_true(:,1,:))
+
+
+if supervised
+  engine_true = jtree_ndx_dbn_inf_engine(bnet_true);
+else
+  engine_true = hmm_inf_engine(bnet_true);
+end
+
+%[engine_learned, ll_learned] = enter_evidence(engine_learned, long_seq);
+%[engine_true, ll_true] = enter_evidence(engine_true, long_seq);
+[engine_learned, ll_learned] = enter_evidence(engine_learned, cases{2});
+[engine_true, ll_true] = enter_evidence(engine_true, cases{2});
+ll_learned
+ll_true
+
+
+% remove concatentation artefacts
+ll_learned = 0;
+ll_true = 0;
+for m=1:length(cases)
+  [engine_learned, ll_learned_tmp] = enter_evidence(engine_learned, cases{m});
+  [engine_true, ll_true_tmp] = enter_evidence(engine_true, cases{m});
+  ll_learned = ll_learned + ll_learned_tmp;
+  ll_true = ll_true + ll_true_tmp;
+end
+ll_learned
+ll_true
+
+% In both cases, ll_learned >> ll_true
+% which shows we are using the wrong cost function!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/mk_square_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,180 @@
+function bnet = mk_square_hhmm(discrete_obs, true_params, topright)
+
+% Make a 3 level  HHMM described by the following grammar
+%
+% Square -> CLK | CCK % clockwise or counterclockwise
+% CLK -> LR UD RL DU start on top left (1 2 3 4)
+% CCK -> RL UD LR DU  if start at top right (3 2 1 4)
+% CCK -> UD LR DU RL if start at top left (2 1 4 3)
+%
+% LR = left-right, UD = up-down, RL = right-left, DU = down-up
+% LR, UD, RL, DU are sub HMMs.
+%
+% For discrete observations, the subHMMs are 2-state left-right.
+% LR emits L then l, etc.
+%
+% For cts observations, the subHMMs are 1 state.
+% LR emits a vector in the -> direction, with a little noise.
+% Since there is no constraint that we remain in the LR state as long as the RL state,
+% the sides of the square might have different lengths,
+% so the result is not really a square!
+%
+% If true_params = 0, we use random parameters at the top 2 levels
+% (ready for learning). At the bottom level, we use noisy versions
+% of the "true" observations.
+%
+% If topright=1, counter-clockwise starts at top right, not top left
+% This example was inspired by Ivanov and Bobick.
+
+if nargin < 3, topright = 1; end
+
+if 1 % discrete_obs
+  Qsizes = [2 4 2];
+else
+  Qsizes = [2 4 1];
+end
+
+D = 3;
+Qnodes = 1:D;
+startprob = cell(1,D);
+transprob = cell(1,D);
+termprob = cell(1,D);
+
+% LEVEL 1
+
+startprob{1} = 'unif';
+transprob{1} = 'unif';
+
+% LEVEL 2
+
+if true_params
+  startprob{2} = zeros(2, 4);
+  startprob{2}(1, :) = [1 0 0 0];
+  if topright
+    startprob{2}(2, :) = [0 0 1 0];
+  else
+    startprob{2}(2, :) = [0 1 0 0];
+  end
+  
+  transprob{2} = zeros(4, 2, 4);
+  
+  transprob{2}(:,1,:) = [0 1 0 0
+		    0 0 1 0
+		    0 0 0 1
+		    0 0 0 1]; % 4->e
+  if topright
+    transprob{2}(:,2,:) = [0 0 0 1
+		    1 0 0 0
+		    0 1 0 0
+		    0 0 0 1]; % 4->e
+  else
+    transprob{2}(:,2,:) = [0 0 0 1
+		    1 0 0 0
+		    0 0 1 0 % 3->e
+		    0 0 1 0];
+  end
+  
+  %termprob{2} = 'rightstop';
+  termprob{2} = zeros(2,4);
+  pfin = 0.8;
+  termprob{2}(1,:) = [0 0 0 pfin]; % finish in state 4 (DU)
+  if topright
+    termprob{2}(2,:) = [0 0 0 pfin];
+  else
+    termprob{2}(2,:) = [0 0 pfin 0];  % finish in state 3 (RL)
+  end
+else
+  % In the unsupervised case, it is essential that we break symmetry
+  % in the initial param estimates.
+  %startprob{2} = 'unif';
+  %transprob{2} = 'unif';
+  %termprob{2} = 'unif';
+  startprob{2} = 'rnd';
+  transprob{2} = 'rnd';
+  termprob{2} = 'rnd';
+end
+
+% LEVEL 3
+
+if 1 |  true_params
+  startprob{3} = 'leftstart';
+  transprob{3}  = 'leftright';
+  termprob{3} = 'rightstop';
+else
+  % If we want to be able to run a base-level model backwards...
+  startprob{3} = 'rnd';
+  transprob{3}  = 'rnd';
+  termprob{3} = 'rnd';
+end
+ 
+
+% OBS LEVEl
+
+if discrete_obs
+  % Initialise observations of lowest level primitives in a way which we can interpret
+  chars = ['L', 'l', 'U', 'u', 'R', 'r', 'D', 'd'];
+  L=find(chars=='L'); l=find(chars=='l');
+  U=find(chars=='U'); u=find(chars=='u');
+  R=find(chars=='R'); r=find(chars=='r');
+  D=find(chars=='D'); d=find(chars=='d');
+  Osize = length(chars);
+  
+  if true_params
+    p = 1; % makes each state fully observed
+  else
+    p = 0.9;
+  end
+  
+  obsprob = (1-p)*ones([4 2 Osize]);
+  %       Q2 Q3 O
+  obsprob(1, 1, L) =  p;
+  obsprob(1, 2, l) =  p;
+  obsprob(2, 1, U) =  p;
+  obsprob(2, 2, u) =  p;
+  obsprob(3, 1, R) =  p;
+  obsprob(3, 2, r) =  p;
+  obsprob(4, 1, D) =  p;
+  obsprob(4, 2, d) =  p;
+  obsprob = mk_stochastic(obsprob);
+  Oargs = {'CPT', obsprob};
+else
+  % Initialise means of lowest level primitives in a way which we can interpret
+  % These means are little vectors in the east, south, west, north directions.
+  % (left-right=east, up-down=south, right-left=west, down-up=north)
+  Osize = 2;
+  mu = zeros(2, Qsizes(2), Qsizes(3));
+  scale = 3;
+  if true_params
+    noise = 0;
+  else
+    noise = 0.5*scale;
+  end
+  for q3=1:Qsizes(3)
+    mu(:, 1, q3) = scale*[1;0] + noise*rand(2,1);
+  end
+  for q3=1:Qsizes(3)
+    mu(:, 2, q3) = scale*[0;-1] + noise*rand(2,1);
+  end
+  for q3=1:Qsizes(3)
+    mu(:, 3, q3) = scale*[-1;0] + noise*rand(2,1);
+  end
+  for q3=1:Qsizes(3)
+    mu(:, 4, q3) = scale*[0;1] + noise*rand(2,1);
+  end
+  Sigma = repmat(reshape(scale*eye(2), [2 2 1 1 ]), [1 1 Qsizes(2) Qsizes(3)]);
+  Oargs = {'mean', mu, 'cov', Sigma, 'cov_type', 'diag'};
+end
+
+if discrete_obs
+  selfprob = 0.5;
+else
+  selfprob = 0.95;
+  % If less than this, it won't look like a square
+  % because it doesn't spend enough time in each state
+  % Unfortunately, the variance on durations (lengths of each side)
+  % is very large
+end
+bnet = mk_hhmm('Qsizes', Qsizes, 'Osize', Osize', 'discrete_obs', discrete_obs, ...
+	       'Oargs', Oargs, 'Ops', Qnodes(2:3), 'selfprob', selfprob, ...
+	       'startprob', startprob, 'transprob', transprob, 'termprob', termprob);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/plot_square_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function plot_square_hhmm(ev)
+% Plot the square shape implicit in the evidence.
+% ev{i,t} is the value of node i in slice t.
+% The observed node contains a velocity (delta increment), which is converted
+% into a position.
+% The Q2 node specifies which model is used, and hence which color
+% to use: 1=red, 2=green, 3=blue, 4=black.
+
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; Onode = 6;
+
+delta = cell2num(ev(Onode,:)); % delta(:,t)
+Q2label = cell2num(ev(Q2,:)); 
+
+T = size(delta, 2);
+pos = zeros(2,T+1);
+hold on
+cols = {'r', 'g', 'b', 'k'};
+for t=2:T+1
+  pos(:,t) = pos(:,t-1) + delta(:,t-1);
+  plot(pos(1,t), pos(2,t), sprintf('%c.', cols{Q2label(t-1)}));
+  if (t==2)
+    text(pos(1,t-1),pos(2,t-1),sprintf('%d',t))
+  elseif (mod(t,20)==0)
+    text(pos(1,t),pos(2,t),sprintf('%d',t))
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/sample_square_hhmm_cts.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+% Generate samples from the HHMM with the true params.
+
+seed = 1;
+rand('state', seed);
+randn('state', seed);
+
+discrete_obs = 0;
+
+bnet = mk_square_hhmm(discrete_obs, 1);
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; Onode = 6;
+Qnodes = [Q1 Q2 Q3]; Fnodes = [F2 F3];
+
+for seqi=1:1
+  evidence = sample_dbn(bnet, 'stop_test', 'is_F2_true_D3');      
+  clf
+  plot_square_hhmm(evidence);
+  %pretty_print_hhmm_parse(evidence, Qnodes, Fnodes, Onode, []);
+  fprintf('sequence %d has length %d; press key to continue\n', seqi, size(evidence,2))
+  pause
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/sample_square_hhmm_discrete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+% Generate samples from the HHMM with the true params.
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+discrete_obs = 1;
+
+bnet = mk_square_hhmm(discrete_obs, 1);
+
+Tmax = 30;
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; Onode = 6;
+Qnodes = [Q1 Q2 Q3]; Fnodes = [F2 F3];
+chars = ['L', 'l', 'U', 'u', 'R', 'r', 'D', 'd'];
+  
+for seqi=1:3
+  evidence = cell2num(sample_dbn(bnet, 'stop_test', 'is_F2_true_D3'));
+  T = size(evidence, 2)
+  pretty_print_hhmm_parse(evidence, Qnodes, Fnodes, Onode, chars);
+end
Binary file toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/square4.mat has changed
Binary file toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/square4_cases.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/test_square_fig.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1310 @@
+function fig = test_square_fig()
+% This is the machine-generated representation of a Handle Graphics object
+% and its children.  Note that handle values may change when these objects
+% are re-created. This may cause problems with any callbacks written to
+% depend on the value of the handle at the time the object was saved.
+%
+% To reopen this object, just type the name of the M-file at the MATLAB
+% prompt. The M-file and its associated MAT-file must be on your path.
+
+load test_square_fig
+
+h0 = figure('Color',[0.8 0.8 0.8], ...
+	'Colormap',mat0, ...
+	'PointerShapeCData',mat1, ...
+	'Position',[540 374 476 292]);
+h1 = axes('Parent',h0, ...
+	'CameraUpVector',[0 1 0], ...
+	'Color',[1 1 1], ...
+	'ColorOrder',mat2, ...
+	'NextPlot','add', ...
+	'Position',[0.13 0.11 0.3270231213872832 0.8149999999999998], ...
+	'XColor',[0 0 0], ...
+	'XLim',[-10 50], ...
+	'XLimMode','manual', ...
+	'YColor',[0 0 0], ...
+	'YLim',[-60 10], ...
+	'YLimMode','manual', ...
+	'ZColor',[0 0 0]);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',0.4608294930875587, ...
+	'YData',0.2923976608187218);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'String','2');
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',1.152073732718893, ...
+	'YData',0.2923976608187218);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',2.995391705069125, ...
+	'YData',0.8771929824561511);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',3.686635944700463, ...
+	'YData',0.8771929824561511);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',6.451612903225808, ...
+	'YData',0.8771929824561511);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',9.677419354838712, ...
+	'YData',1.461988304093566);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',10.36866359447005, ...
+	'YData',1.461988304093566);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',15.43778801843318, ...
+	'YData',2.046783625730996);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',17.51152073732719, ...
+	'YData',2.046783625730996);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',19.81566820276498, ...
+	'YData',2.046783625730996);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',20.50691244239631, ...
+	'YData',2.046783625730996);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',23.73271889400922, ...
+	'YData',2.046783625730996);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',25.57603686635945, ...
+	'YData',2.046783625730996);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',29.95391705069125, ...
+	'YData',2.046783625730996);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',31.79723502304147, ...
+	'YData',2.046783625730996);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',35.02304147465438, ...
+	'YData',2.046783625730996);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',35.71428571428572, ...
+	'YData',2.046783625730996);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',38.47926267281106, ...
+	'YData',1.461988304093566);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',40.3225806451613, ...
+	'YData',1.461988304093566);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'Position',[40.3225806451613 1.461988304093566 0], ...
+	'String','20');
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',42.62672811059908, ...
+	'YData',mat3);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',43.31797235023042, ...
+	'YData',mat4);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',43.31797235023042, ...
+	'YData',0.8771929824561511);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',43.54838709677419, ...
+	'YData',0);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',43.77880184331798, ...
+	'YData',-0.5847953216374293);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',44.47004608294931, ...
+	'YData',-2.339181286549703);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',44.93087557603687, ...
+	'YData',-4.385964912280699);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',46.7741935483871, ...
+	'YData',-9.064327485380119);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.00460829493088, ...
+	'YData',-10.81871345029239);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.69585253456221, ...
+	'YData',mat5);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.69585253456221, ...
+	'YData',-15.20467836257309);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.23502304147466, ...
+	'YData',-19.00584795321637);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.23502304147466, ...
+	'YData',-19.88304093567251);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.23502304147466, ...
+	'YData',-22.51461988304093);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.23502304147466, ...
+	'YData',-23.09941520467836);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.23502304147466, ...
+	'YData',-26.02339181286549);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.23502304147466, ...
+	'YData',-26.31578947368421);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.23502304147466, ...
+	'YData',-27.77777777777777);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.23502304147466, ...
+	'YData',-28.3625730994152);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.23502304147466, ...
+	'YData',-30.99415204678362);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'Position',[47.23502304147466 -30.99415204678362 0], ...
+	'String','40');
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.46543778801843, ...
+	'YData',-31.57894736842105);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.46543778801843, ...
+	'YData',-33.62573099415204);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.46543778801843, ...
+	'YData',-34.50292397660818);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.46543778801843, ...
+	'YData',-37.42690058479531);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.46543778801843, ...
+	'YData',-38.01169590643274);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.00460829493088, ...
+	'YData',-42.39766081871344);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.00460829493088, ...
+	'YData',-42.98245614035087);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',47.00460829493088, ...
+	'YData',-46.49122807017543);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',46.7741935483871, ...
+	'YData',-46.78362573099415);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',46.54377880184332, ...
+	'YData',-49.41520467836257);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',46.54377880184332, ...
+	'YData',-49.70760233918128);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',45.85253456221199, ...
+	'YData',-51.46198830409356);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',45.85253456221199, ...
+	'YData',-51.75438596491227);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',44.93087557603687, ...
+	'YData',-53.21637426900584);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',44.70046082949308, ...
+	'YData',-53.21637426900584);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',44.00921658986175, ...
+	'YData',-54.09356725146198);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',43.77880184331798, ...
+	'YData',-54.38596491228069);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',41.93548387096774, ...
+	'YData',-54.97076023391811);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',41.47465437788019, ...
+	'YData',-55.26315789473683);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',39.1705069124424, ...
+	'YData',-55.55555555555554);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'Position',[39.1705069124424 -55.55555555555554 0], ...
+	'String','60');
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',38.94009216589862, ...
+	'YData',-55.84795321637426);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',36.63594470046083, ...
+	'YData',-55.55555555555554);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',36.17511520737327, ...
+	'YData',-55.55555555555554);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',32.94930875576037, ...
+	'YData',-54.97076023391811);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',32.48847926267281, ...
+	'YData',-54.97076023391811);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',28.11059907834102, ...
+	'YData',-53.80116959064326);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',27.64976958525346, ...
+	'YData',-53.50877192982455);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',23.963133640553, ...
+	'YData',-53.50877192982455);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',23.27188940092166, ...
+	'YData',-53.50877192982455);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',19.5852534562212, ...
+	'YData',-54.97076023391811);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',19.12442396313364, ...
+	'YData',-54.97076023391811);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',mat6, ...
+	'YData',-56.14035087719297);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',mat7, ...
+	'YData',-56.14035087719297);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',9.907834101382491, ...
+	'YData',-57.30994152046782);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',9.447004608294932, ...
+	'YData',-57.30994152046782);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',6.221198156682029, ...
+	'YData',-57.30994152046782);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',4.838709677419356, ...
+	'YData',-56.7251461988304);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',2.764976958525345, ...
+	'YData',-56.14035087719297);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',2.534562211981569, ...
+	'YData',-56.14035087719297);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',0.9216589861751174, ...
+	'YData',-53.80116959064327);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'Position',[0.9216589861751174 -53.80116959064327 0], ...
+	'String','80');
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',0.6912442396313381, ...
+	'YData',-53.21637426900584);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-1.152073732718893, ...
+	'YData',-48.24561403508771);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-1.152073732718893, ...
+	'YData',-47.953216374269);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-1.843317972350228, ...
+	'YData',-44.73684210526315);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-1.843317972350228, ...
+	'YData',-44.44444444444444);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-2.304147465437787, ...
+	'YData',-39.76608187134502);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-2.764976958525345, ...
+	'YData',-38.01169590643274);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-3.225806451612904, ...
+	'YData',-30.99415204678362);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-3.225806451612904, ...
+	'YData',-29.82456140350877);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-3.225806451612904, ...
+	'YData',-24.85380116959064);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-3.225806451612904, ...
+	'YData',-24.26900584795321);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-2.534562211981566, ...
+	'YData',-17.5438596491228);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-2.304147465437787, ...
+	'YData',-16.95906432748537);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-1.612903225806452, ...
+	'YData',-11.98830409356725);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-1.612903225806452, ...
+	'YData',-11.40350877192982);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',mat8, ...
+	'YData',-8.47953216374269);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',mat9, ...
+	'YData',-8.187134502923968);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-1.152073732718893, ...
+	'YData',-5.263157894736835);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-1.152073732718893, ...
+	'YData',-4.970760233918128);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-0.9216589861751139, ...
+	'YData',-2.923976608187132);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'Position',[-0.9216589861751139 -2.923976608187132 0], ...
+	'String','100');
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-0.9216589861751139, ...
+	'YData',-2.631578947368411);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-0.6912442396313345, ...
+	'YData',mat10);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-0.6912442396313345, ...
+	'YData',-0.8771929824561369);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-0.6912442396313345, ...
+	'YData',-0.5847953216374293);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[19.80645161290322 12.0675105485232 17.32050807568877], ...
+	'VerticalAlignment','bottom');
+set(get(h2,'Parent'),'Title',h2);
+h1 = axes('Parent',h0, ...
+	'CameraUpVector',[0 1 0], ...
+	'Color',[1 1 1], ...
+	'ColorOrder',mat11, ...
+	'NextPlot','add', ...
+	'Position',[0.5779768786127169 0.11 0.3270231213872832 0.8149999999999998], ...
+	'XColor',[0 0 0], ...
+	'YColor',[0 0 0], ...
+	'ZColor',[0 0 0]);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-0.4608294930875587, ...
+	'YData',0);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'String','2');
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-2.764976958525345, ...
+	'YData',-0.2923976608187076);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-3.456221198156683, ...
+	'YData',-0.2923976608187076);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-7.834101382488477, ...
+	'YData',-0.2923976608187076);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-11.52073732718894, ...
+	'YData',-0.2923976608187076);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',mat12, ...
+	'YData',-0.2923976608187076);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-19.35483870967742, ...
+	'YData',0.2923976608187076);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-23.50230414746544, ...
+	'YData',0.2923976608187076);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-24.88479262672811, ...
+	'YData',0.8771929824561369);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-28.11059907834102, ...
+	'YData',0.8771929824561369);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-29.49308755760369, ...
+	'YData',1.461988304093566);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-31.10599078341014, ...
+	'YData',1.461988304093566);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-32.02764976958525, ...
+	'YData',1.461988304093566);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-33.17972350230414, ...
+	'YData',1.461988304093566);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-33.6405529953917, ...
+	'YData',1.461988304093566);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 1], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-34.7926267281106, ...
+	'YData',1.461988304093566);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-35.02304147465438, ...
+	'YData',1.461988304093566);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-35.48387096774194, ...
+	'YData',1.461988304093566);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-35.71428571428572, ...
+	'YData',1.461988304093566);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'Position',[-35.71428571428572 1.461988304093566 0], ...
+	'String','20');
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.17511520737327, ...
+	'YData',mat13);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.40552995391705, ...
+	'YData',0.8771929824561369);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.63594470046083, ...
+	'YData',0.2923976608187076);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.63594470046083, ...
+	'YData',0);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.63594470046083, ...
+	'YData',mat14);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.40552995391705, ...
+	'YData',-2.339181286549703);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.40552995391705, ...
+	'YData',-2.631578947368425);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.40552995391705, ...
+	'YData',-4.67836257309942);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.40552995391705, ...
+	'YData',-5.555555555555557);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.40552995391705, ...
+	'YData',-8.187134502923982);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.40552995391705, ...
+	'YData',-8.771929824561397);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.86635944700461, ...
+	'YData',-13.15789473684211);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.09677419354839, ...
+	'YData',mat15);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.09677419354839, ...
+	'YData',-16.08187134502924);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.09677419354839, ...
+	'YData',-17.54385964912281);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.09677419354839, ...
+	'YData',-18.12865497076023);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.32718894009217, ...
+	'YData',-19.88304093567251);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.32718894009217, ...
+	'YData',-20.17543859649123);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.09677419354839, ...
+	'YData',-21.92982456140351);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.09677419354839, ...
+	'YData',-22.22222222222222);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'Position',[-37.09677419354839 -22.22222222222222 0], ...
+	'String','40');
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.09677419354839, ...
+	'YData',-23.09941520467836);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.09677419354839, ...
+	'YData',-23.39181286549707);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.32718894009217, ...
+	'YData',-25.14619883040935);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.32718894009217, ...
+	'YData',-25.43859649122807);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.32718894009217, ...
+	'YData',-28.3625730994152);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.55760368663595, ...
+	'YData',-28.94736842105263);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.78801843317973, ...
+	'YData',-31.87134502923976);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.78801843317973, ...
+	'YData',-32.16374269005848);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.78801843317973, ...
+	'YData',-34.7953216374269);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.78801843317973, ...
+	'YData',-35.38011695906432);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.78801843317973, ...
+	'YData',-38.88888888888889);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.78801843317973, ...
+	'YData',-39.76608187134503);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.78801843317973, ...
+	'YData',-43.27485380116958);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.78801843317973, ...
+	'YData',-43.5672514619883);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.78801843317973, ...
+	'YData',-44.44444444444444);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.55760368663595, ...
+	'YData',-45.32163742690058);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.55760368663595, ...
+	'YData',-45.61403508771929);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.32718894009217, ...
+	'YData',-47.36842105263158);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-37.32718894009217, ...
+	'YData',-47.95321637426901);
+h2 = line('Parent',h1, ...
+	'Color',[0 1 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.86635944700461, ...
+	'YData',-49.70760233918129);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'Position',[-36.86635944700461 -49.70760233918129 0], ...
+	'String','60');
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-36.86635944700461, ...
+	'YData',-50);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-35.71428571428572, ...
+	'YData',-50.29239766081872);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-35.25345622119816, ...
+	'YData',-50.29239766081872);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-32.02764976958527, ...
+	'YData',-50.29239766081872);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-31.33640552995393, ...
+	'YData',-50.29239766081872);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-27.88018433179725, ...
+	'YData',-50.58479532163743);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-27.41935483870969, ...
+	'YData',-50.58479532163743);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-18.20276497695854, ...
+	'YData',-50.58479532163743);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-16.82027649769586, ...
+	'YData',-51.16959064327486);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-12.21198156682029, ...
+	'YData',-50.58479532163743);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-11.52073732718895, ...
+	'YData',-50.58479532163743);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-6.912442396313377, ...
+	'YData',-51.16959064327486);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-5.069124423963142, ...
+	'YData',-51.75438596491229);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',mat16, ...
+	'YData',-52.046783625731);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',-0.9216589861751281, ...
+	'YData',-52.33918128654972);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',0.2304147465437687, ...
+	'YData',-52.33918128654972);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',0.4608294930875481, ...
+	'YData',-52.33918128654972);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',2.304147465437776, ...
+	'YData',-52.63157894736843);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',2.534562211981548, ...
+	'YData',-52.63157894736843);
+h2 = line('Parent',h1, ...
+	'Color',[1 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',3.917050691244224, ...
+	'YData',-52.63157894736843);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'Position',[3.917050691244224 -52.63157894736843 0], ...
+	'String','80');
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',4.147465437788011, ...
+	'YData',-52.63157894736843);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',4.147465437788011, ...
+	'YData',-52.33918128654972);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',5.529953917050673, ...
+	'YData',-46.19883040935674);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',5.990783410138231, ...
+	'YData',-44.44444444444446);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',7.834101382488466, ...
+	'YData',-28.0701754385965);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',8.294930875576025, ...
+	'YData',-22.80701754385966);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',8.755760368663584, ...
+	'YData',mat17);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',8.525345622119797, ...
+	'YData',-14.9122807017544);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',7.373271889400908, ...
+	'YData',-10.23391812865498);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',7.142857142857135, ...
+	'YData',-9.94152046783627);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',6.221198156682018, ...
+	'YData',-7.602339181286567);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',6.221198156682018, ...
+	'YData',-7.309941520467845);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',5.760368663594459, ...
+	'YData',-5.555555555555571);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',5.529953917050673, ...
+	'YData',-5.555555555555571);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',5.2995391705069, ...
+	'YData',-4.093567251462005);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',5.069124423963128, ...
+	'YData',-2.631578947368439);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',5.069124423963128, ...
+	'YData',-2.339181286549717);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',5.069124423963128, ...
+	'YData',mat18);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',5.069124423963128, ...
+	'YData',-1.169590643274873);
+h2 = line('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'LineStyle','none', ...
+	'Marker','.', ...
+	'XData',4.838709677419342, ...
+	'YData',-0.2923976608187218);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'Position',[4.838709677419342 -0.2923976608187218 0], ...
+	'String','100');
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[-10.38961038961038 12.0675105485232 17.32050807568877], ...
+	'VerticalAlignment','bottom');
+set(get(h2,'Parent'),'Title',h2);
+if nargout > 0, fig = h0; end
Binary file toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/Square/test_square_fig.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/abcd_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+% Make the HHMM in Figure 1 of the NIPS'01 paper
+
+Qsize = [2 3 2];
+Qnodes = 1:3;
+D = 3;
+transprob = cell(1,D);
+termprob = cell(1,D);
+startprob = cell(1,D);
+clear A;
+
+% transprob{d}(i,k,j), transprob{1}(i,j)
+% termprob{d}(k,j), termprob{1}(1,j)
+% startprob{d}(k,j), startprob{1}(1,j)
+
+
+% LEVEL 1
+
+%       1 2 e
+A{1} = [0 0 1;
+	0 0 1];
+[transprob{1}, termprob{1}] = remove_hhmm_end_state(A{1});
+startprob{1} = [0.5 0.5];
+
+% LEVEL 2
+A{2} = zeros(Qsize(2), Qsize(1), Qsize(2)+1);
+
+%              1 2 3 e
+A{2}(:,1,:) = [0 1 0 0  % Q1=1 => model below state 0
+	       0 0 1 0
+	       0 0 0 1];
+
+%              1 2 3 e
+A{2}(:,2,:) = [0 1 0 0 % Q1=2 => model below state 1
+	       0 0 1 0
+	       0 0 0 1];
+
+[transprob{2}, termprob{2}] = remove_hhmm_end_state(A{2});	       
+
+% always enter level 2 in state 1
+startprob{2} = [1 0 0
+		1 0 0];
+
+% LEVEL 3
+
+A{3} = zeros([Qsize(3) Qsize(2) Qsize(3)+1]);
+endstate = Qsize(3)+1;
+%    Qt-1(3) Qt(2) Qt(3)
+%                        1   2   e
+A{3}(1,      1,    endstate) = 1.0; % Q2=1 => model below state 2/5
+A{3}(:,      2,    :) = [0.0 1.0 0.0 % Q2=2 => model below state 3/6
+            	         0.5 0.0 0.5]; 
+A{3}(1,      3,    endstate) = 1.0; % Q2=3 => model below state 4/7
+
+[transprob{3}, termprob{3}] = remove_hhmm_end_state(A{3});	       
+
+startprob{3} = 'leftstart';
+
+
+
+% OBS LEVEl
+
+chars = ['a', 'b', 'c', 'd', 'x', 'y'];
+Osize = length(chars);
+
+obsprob = zeros([Qsize Osize]);
+%       1 2 3 O
+obsprob(1,1,1,find(chars == 'a')) =  1.0;
+
+obsprob(1,2,1,find(chars == 'x')) =  1.0;
+obsprob(1,2,2,find(chars == 'y')) =  1.0;
+
+obsprob(1,3,1,find(chars == 'b')) =  1.0;
+
+obsprob(2,1,1,find(chars == 'c')) =  1.0;
+
+obsprob(2,2,1,find(chars == 'x')) =  1.0;
+obsprob(2,2,2,find(chars == 'y')) =  1.0;
+
+obsprob(2,3,1,find(chars == 'd')) =  1.0;
+
+Oargs = {'CPT', obsprob};
+
+bnet = mk_hhmm('Qsizes', Qsize, 'Osize', Osize, 'discrete_obs', 1, ...
+	       'Oargs', Oargs, 'Ops', Qnodes(1:3), ...
+	       'startprob', startprob, 'transprob', transprob, 'termprob', termprob);
+
+
+Q1 = 1; Q2 = 2; Q3 = 3; F3 = 4; F2 = 5; Onode = 6;
+Qnodes = [Q1 Q2 Q3]; Fnodes = [F2 F3];
+
+for seqi=1:3
+  evidence = sample_dbn(bnet, 'stop_test', 'is_F2_true_D3');      
+  ev = cell2num(evidence);
+  chars(ev(end,:))
+  %T = size(evidence, 2)
+  %pretty_print_hhmm_parse(evidence, Qnodes, Fnodes, Onode, chars);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/add_hhmm_end_state.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function A = add_hhmm_end_state(transprob, termprob)
+% ADD_HMM_END_STATE Combine trans and term probs into transmat for automaton with an end state
+% function A = add_hhmm_end_state(transprob, termprob)
+%
+% A(i,k,j) = Pr( i->j | Qps=k), where i in 1:Q, j in 1:(Q+1), and Q+1 is the end state
+% This implements the equation in sec 4.6 of my tech report, where
+% transprob(i,k,j) = \tilde{A}_k(i,j), termprob(k,j) = \tau_k(j)
+%
+% For the top level, the k index is missing.
+
+Q = size(transprob,1);
+toplevel = (ndims(transprob)==2);
+if toplevel
+  Qk = 1;
+  transprob = reshape(transprob, [Q 1 Q]);
+  termprob = reshape(termprob, [1 Q]);
+else
+  Qk = size(transprob, 2);
+end
+
+A = zeros(Q, Qk, Q+1);
+A(:,:,Q+1) = termprob';
+
+for k=1:Qk
+  for i=1:Q
+    for j=1:Q
+      A(i,k,j) = transprob(i,k,j) * (1-termprob(k,i));
+    end
+  end    
+end
+
+if toplevel
+  A = squeeze(A);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/hhmm_jtree_clqs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,143 @@
+% Find out how big the cliques are in an HHMM as a function of depth
+% (This is how we get the complexity bound of O(D K^{1.5D}).)
+
+if 0
+Qsize = [];
+Fsize = [];
+Nclqs = [];
+end
+
+ds = 1:15;
+
+for d = ds
+  allQ = 1;
+  [intra, inter, Qnodes, Fnodes, Onode] = mk_hhmm_topo(d, allQ);
+  
+  N = length(intra);
+  ns = 2*ones(1,N);
+  
+  bnet = mk_dbn(intra, inter, ns);
+  for i=1:N
+    bnet.CPD{i} = tabular_CPD(bnet, i);
+  end
+  
+  if 0
+    T = 5;
+    dag = unroll_dbn_topology(intra, inter, T);
+    engine = jtree_unrolled_dbn_inf_engine(bnet, T, 'constrained', 1);
+    S = struct(engine);
+    S1 = struct(S.sub_engine);
+  end
+  
+  engine = jtree_dbn_inf_engine(bnet);
+  S = struct(engine);
+  J = S.jtree_struct;
+  
+  ss = 2*d+1;
+  Qnodes2 = Qnodes + ss;
+  QQnodes = [Qnodes Qnodes2];
+  
+  % find out how many Q nodes in each clique, and how many F nodes
+  C = length(J.cliques);
+  Nclqs(d) = 0;
+  for c=1:C
+    Qsize(c,d) = length(myintersect(J.cliques{c}, QQnodes));
+    Fsize(c,d) = length(myintersect(J.cliques{c}, Fnodes));
+    if length(J.cliques{c}) > 1 % exclude observed leaves
+      Nclqs(d) = Nclqs(d) + 1;
+    end
+  end
+  %pred_max_Qsize(d) = ceil(d+(d+1)/2);
+  pred_max_Qsize(d) = ceil(1.5*d);
+  
+  fprintf('d=%d\n', d);
+  %fprintf('D=%d, max F = %d. max Q = %d, pred max Q = %d\n', ...
+	%  D, max(Fsize), max(Qsize), ceil(D+(D+1)/2));
+	     
+  %histc(Qsize,1:max(Qsize)) % how many of each size?
+end % next d
+
+
+Q = 2;
+pred_mass = ds.*(Q.^ds) + Q.^(ceil(1.5 * ds))
+pred_mass2 = Q.^(ceil(1.5 * ds))
+
+for d=ds
+  mass(d) = 0;
+  for c=1:C
+    mass(d) = mass(d) + Q^Qsize(c,d);
+  end
+end
+    
+
+if 0
+%plot(ds, max(Qsize), 'o-',  ds, pred_max_Qsize, '*--');
+%plot(ds, max(Qsize), 'o-',  ds, 1.5*ds, '*--');
+%plot(ds, mass, 'o-',  ds, pred_mass, '*--');
+D = 15;
+%plot(ds(1:D), mass(1:D), 'bo-',  ds(1:D), pred_mass(1:D), 'g*--', ds(1:D), pred_mass2(1:D), 'k+-.');
+plot(ds(1:D), log(mass(1:D)), 'bo-',  ds(1:D), log(pred_mass(1:D)), 'g*--', ds(1:D), log(pred_mass2(1:D)), 'k+-.');
+
+grid on
+xlabel('depth of hierarchy')
+title('max num Q nodes in any clique vs. depth')
+legend('actual', 'predicted')
+
+%previewfig(gcf, 'width', 3, 'height', 1.5, 'color', 'bw');
+%exportfig(gcf, '/home/cs/murphyk/WP/ConferencePapers/HHMM/clqsize2.eps', ...
+%          'width', 3, 'height', 1.5, 'color', 'bw');   
+
+end
+
+
+if 0
+for d=ds
+  effnumclqs(d) = length(find(Qsize(:,d)>0));
+end
+ds = 1:10;
+Qs = 2:10;
+maxC = size(Qsize, 1);
+cost = [];
+cost_bound = [];
+for qi=1:length(Qs)
+  Q = Qs(qi);
+  for d=ds
+    cost(d,qi) = 0;
+    for c=1:maxC
+      if length(Qsize(c,d) > 0) % this clique contains Q nodes
+	cost(d,qi) = cost(d,qi) + Q^Qsize(c,d)*2^Fsize(c,d);
+      end
+    end
+    %cost_bound(d,qi) = effnumclqs(d) * 8 * Q^(max(Qsize(:,d)));
+    cost_bound(d,qi) = (effnumclqs(d)*8) + Q^(max(Qsize(:,d)));
+  end
+end
+
+qi=2; plot(ds, cost(:,qi), 'o-',  ds, cost_bound(:,qi), '*--');
+end
+
+
+if 0
+% convert numbers in cliques into names
+for d=1:D
+  Fdecode(Fnodes(d)) = d;
+end
+for c=8:15
+  clqs = J.cliques{c};
+  fprintf('clique %d: ', c);
+  for k=clqs
+    if myismember(k, Qnodes)
+      fprintf('Q%d ', k)
+    elseif myismember(k, Fnodes)
+      fprintf('F%d ', Fdecode(k))
+    elseif isequal(k, Onode)
+      fprintf('O ')
+    elseif myismember(k, Qnodes2)
+      fprintf('Q%d* ', k-ss)
+    else
+      error(['unrecognized node ' k])
+    end
+  end
+  fprintf('\n');
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/mk_hhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,258 @@
+function [bnet, Qnodes, Fnodes, Onode] = mk_hhmm(varargin)
+% MK_HHMM Make a Hierarchical HMM
+% function [bnet, Qnodes, Fnodes, Onode] = mk_hhmm(...)
+%
+% e.g. 3-layer hierarchical HMM where level 1 only connects to level 2
+% and the parents of the observed node are levels 2 and 3.
+% (This DBN is the same as Fig 10 in my tech report.)
+%
+%   Q1 ---------->   Q1
+%   |  \            ^ |
+%   |   v          /  |
+%   |    F2 ------/   |
+%   |   ^ ^        \  |
+%   |  /  |         \ |
+%   | /   |          ||
+%   v     |          vv
+%   Q2----| --------> Q2
+%  /| \   |          ^|
+% / |  v  |         / |
+% | |   F3 --------/  |
+% | |   ^          \  |
+% | v  /            v v
+% | Q3 ----------->  Q3
+% |  |    
+% \  | 
+%  v v    
+%   O
+%
+%
+% Optional arguments in name/value format [default value in brackets]
+%
+% Qsizes      - sizes at each level [ none ]
+% allQ       - 1 means level i connects to all Q levels below, 0 means just to i+1 [0]
+% transprob  - transprob{d}(i,k,j) = P(Q(d,t)=j|Q(d,t-1)=i,Q(1:d-1,t)=k)  ['leftright']
+% startprob  - startprob{d}(k,j) = P(Q(d,t)=j|Q(1:d-1,t)=k)  ['leftstart']
+% termprob   - termprob{d}(k,j) = P(F(d,t)=2|Q(1:d-1,t)=k,Q(d,t)=j) for d>1 ['rightstop']
+% selfprop   - prob of a self transition (termprob default = 1-selfprop) [0.8]
+% Osize       - size of O node
+% discrete_obs - 1 means O is tabular_CPD, 0 means gaussian_CPD [0]
+% Oargs       - cell array of args to pass to the O CPD  [ {} ]
+% Ops         - Q parents of O [Qnodes(end)]
+% F1          - 1 means level 1 can finish (restart), else there is no F1->Q1 arc [0]
+% clamp1     - 1 means we clamp the params of the Q nodes in slice 1 (Qt1params) [1]
+%   Note: the Qt1params are startprob, which should be shared with other slices.
+%   However, in the current implementation, the Qt1params will only be estimated
+%   from the initial state of each sequence.
+%
+% For d=1, startprob{1}(1,j) is only used in the first slice and
+% termprob{1} is ignored, since we assume the top level never resets.
+% Also, transprob{1}(i,j) can be used instead of transprob{1}(i,1,j).
+%
+% leftstart means the model always starts in state 1.
+% rightstop means the model can only finish in its last state (Qsize(d)).
+% unif means each state is equally like to reach any other
+% rnd means the transition/starting probs are random (drawn from rand)
+%
+% Q1:QD in slice 1 are of type tabular_CPD
+% Q1:QD in slice 2 are of type hhmmQ_CPD.
+% F(2:D-1) is of type hhmmF_CPD, FD is of type tabular_CPD.
+
+args = varargin;
+nargs = length(args);
+
+% get sizes of nodes and topology
+Qsizes = [];
+Osize = [];
+allQ = 0;
+Ops = [];
+F1 = 0;
+for i=1:2:nargs
+  switch args{i},
+   case 'Qsizes', Qsizes = args{i+1}; 
+   case 'Osize',  Osize = args{i+1}; 
+   case 'allQ',   allQ = args{i+1}; 
+   case 'Ops',    Ops = args{i+1}; 
+   case 'F1',     F1 = args{i+1}; 
+  end
+end
+if isempty(Qsizes), error('must specify Qsizes'); end
+if Osize==0, error('must specify Osize'); end
+D = length(Qsizes);
+Qnodes = 1:D;
+
+if isempty(Ops), Ops = Qnodes(end); end
+
+
+[intra, inter, Qnodes, Fnodes, Onode] = mk_hhmm_topo(D, allQ, Ops, F1);
+ss = length(intra);
+names = {};
+
+if F1
+  Fnodes_ndx = Fnodes;
+else
+  Fnodes_ndx = [-1 Fnodes]; % Fnodes(1) is a dummy index
+end
+		
+% set default params
+discrete_obs = 0;
+Oargs = {};
+startprob = cell(1,D);
+startprob{1} = 'unif';
+for d=2:D
+  startprob{d} = 'leftstart';
+end
+transprob = cell(1,D);
+transprob{1} = 'unif';
+for d=2:D
+  transprob{d} = 'leftright';
+end
+termprob = cell(1,D);
+for d=2:D
+  termprob{d} = 'rightstop';
+end
+selfprob = 0.8;
+clamp1 = 1;
+
+for i=1:2:nargs
+  switch args{i},
+   case 'discrete_obs', discrete_obs = args{i+1}; 
+   case 'Oargs',        Oargs = args{i+1};
+   case 'startprob',    startprob = args{i+1};
+   case 'transprob',    transprob = args{i+1};
+   case 'termprob',     termprob = args{i+1};
+   case 'selfprob',     selfprob = args{i+1};
+   case 'clamp1',       clamp1 = args{i+1};
+  end
+end
+
+ns = zeros(1,ss);
+ns(Qnodes) = Qsizes;
+ns(Onode) = Osize;
+ns(Fnodes) = 2;
+
+dnodes = [Qnodes Fnodes];
+if discrete_obs
+  dnodes = [dnodes Onode];
+end
+onodes = [Onode];
+
+bnet = mk_dbn(intra, inter, ns, 'observed', onodes, 'discrete', dnodes, 'names', names);
+eclass = bnet.equiv_class;
+
+for d=1:D
+  if d==1
+    Qps = [];
+  elseif allQ
+    Qps = Qnodes(1:d-1);
+  else
+    Qps = Qnodes(d-1);
+  end
+  Qpsz = prod(ns(Qps));
+  Qsz = ns(Qnodes(d));
+  if isstr(startprob{d})
+    switch startprob{d}
+     case 'unif', startprob{d} = mk_stochastic(ones(Qpsz, Qsz));
+     case 'rnd', startprob{d} = mk_stochastic(rand(Qpsz, Qsz));
+     case 'leftstart', startprob{d} = zeros(Qpsz, Qsz); startprob{d}(:,1) = 1;
+    end
+  end
+  if isstr(transprob{d})
+    switch transprob{d}
+     case 'unif', transprob{d} = mk_stochastic(ones(Qsz, Qpsz, Qsz));
+     case 'rnd', transprob{d} = mk_stochastic(rand(Qsz, Qpsz, Qsz));
+     case 'leftright',
+      LR = mk_leftright_transmat(Qsz, selfprob);
+      temp = repmat(reshape(LR, [1 Qsz Qsz]), [Qpsz 1 1]); % transprob(k,i,j)
+      transprob{d} = permute(temp, [2 1 3]); % now transprob(i,k,j)
+    end
+  end
+  if isstr(termprob{d})
+    switch termprob{d}
+     case 'unif', termprob{d} = mk_stochastic(ones(Qpsz, Qsz, 2));
+     case 'rnd', termprob{d} = mk_stochastic(rand(Qpsz, Qsz, 2));
+     case 'rightstop',
+      %termprob(k,i,t) Might terminate if i=Qsz; will not terminate if i<Qsz
+      stopprob = 1-selfprob;
+      termprob{d} = zeros(Qpsz, Qsz, 2);
+      termprob{d}(:,Qsz,2) = stopprob;
+      termprob{d}(:,Qsz,1) = 1-stopprob;
+      termprob{d}(:,1:(Qsz-1),1) = 1;
+     otherwise, error(['unrecognized termprob ' termprob{d}])
+    end
+  elseif d>1 % passed in termprob{d}(k,j)
+    temp = termprob{d};
+    termprob{d} = zeros(Qpsz, Qsz, 2);
+    termprob{d}(:,:,2) = temp;
+    termprob{d}(:,:,1) = ones(Qpsz,Qsz) - temp;
+  end
+end
+
+
+% SLICE 1
+
+for d=1:D
+  bnet.CPD{eclass(Qnodes(d),1)} = tabular_CPD(bnet, Qnodes(d), 'CPT', startprob{d}, 'adjustable', clamp1);
+end
+
+if F1
+  d = 1;
+  bnet.CPD{eclass(Fnodes_ndx(d),1)}  = hhmmF_CPD(bnet, Fnodes_ndx(d), Qnodes(d), Fnodes_ndx(d+1), ...
+						 'termprob', termprob{d});
+end
+for d=2:D-1
+  if allQ
+    Qps = Qnodes(1:d-1);
+  else
+    Qps = Qnodes(d-1);
+  end
+  bnet.CPD{eclass(Fnodes_ndx(d),1)}  = hhmmF_CPD(bnet, Fnodes_ndx(d), Qnodes(d), Fnodes_ndx(d+1), ...
+						 'Qps', Qps, 'termprob', termprob{d});
+end
+bnet.CPD{eclass(Fnodes_ndx(D),1)}  = tabular_CPD(bnet, Fnodes_ndx(D), 'CPT', termprob{D});
+
+if discrete_obs
+  bnet.CPD{eclass(Onode,1)} = tabular_CPD(bnet, Onode, Oargs{:});
+else
+  bnet.CPD{eclass(Onode,1)} = gaussian_CPD(bnet, Onode, Oargs{:});
+end
+
+% SLICE 2
+
+%for d=1:D
+%  bnet.CPD{eclass(Qnodes(d),2)} = hhmmQ_CPD(bnet, Qnodes(d)+ss, Qnodes, d, D, ...
+%					    'startprob', startprob{d}, 'transprob', transprob{d}, ...
+%					    'allQ', allQ);
+%end
+
+d = 1;
+if F1
+  bnet.CPD{eclass(Qnodes(d),2)} = hhmmQ_CPD(bnet, Qnodes(d)+ss, 'Fself', Fnodes_ndx(d), ...
+					    'Fbelow', Fnodes_ndx(d+1), ...
+					    'startprob', startprob{d}, 'transprob', transprob{d});
+else
+    bnet.CPD{eclass(Qnodes(d),2)} = hhmmQ_CPD(bnet, Qnodes(d)+ss, ...
+					    'Fbelow', Fnodes_ndx(d+1), ...
+					    'startprob', startprob{d}, 'transprob', transprob{d});
+end
+for d=2:D-1
+  if allQ
+    Qps = Qnodes(1:d-1);
+  else
+    Qps = Qnodes(d-1);
+  end
+  Qps = Qps + ss; % since all in slice 2
+  bnet.CPD{eclass(Qnodes(d),2)} = hhmmQ_CPD(bnet, Qnodes(d)+ss, 'Fself', Fnodes_ndx(d), ...
+					    'Fbelow', Fnodes_ndx(d+1), 'Qps', Qps, ...
+					    'startprob', startprob{d}, 'transprob', transprob{d});
+end
+d = D;
+if allQ
+  Qps = Qnodes(1:d-1);
+else
+  Qps = Qnodes(d-1);
+end
+Qps = Qps + ss; % since all in slice 2
+bnet.CPD{eclass(Qnodes(d),2)} = hhmmQ_CPD(bnet, Qnodes(d)+ss, 'Fself', Fnodes_ndx(d), ...
+					  'Qps', Qps, ...
+					  'startprob', startprob{d}, 'transprob', transprob{d});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/mk_hhmm_topo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+function [intra, inter, Qnodes, Fnodes, Onode] = mk_hhmm_topo(D, all_Q_to_Qs, Ops, F1)
+% MK_HHMM_TOPO Make Hierarchical HMM topology
+% function [intra, inter, Qnodes, Fnodes, Onode] = mk_hhmm_topo(D, all_Q_to_Qs, Ops, F1)
+%
+% D is the depth of the hierarchy
+% If all_Q_to_Qs = 1, level i connects to all levels below, else just to i+1 [0]
+% Ops are the Q parents of the observed node [Qnodes(end)]
+% If F1=1, level 1 can finish (restart), else there is no F1->Q1 arc [0]
+
+Qnodes = 1:D;
+
+if nargin < 2, all_Q_to_Qs = 1; end
+if nargin < 3, Ops = Qnodes(D); end
+if nargin < 4, F1 = 0; end
+
+if F1
+  Fnodes = 2*D:-1:D+1; % must number from bottom to top
+  Onode = 2*D+1;
+  ss = 2*D+1;
+else
+  Fnodes = [-1 (2*D)-1:-1:D+1]; % Fnodes(1) is a dummy index
+  Onode = 2*D;
+  ss = 2*D;
+end
+
+intra = zeros(ss);
+intra(Ops, Onode) = 1;
+for d=1:D-1
+  if all_Q_to_Qs
+    intra(Qnodes(d), Qnodes(d+1:end)) = 1;
+  else
+    intra(Qnodes(d), Qnodes(d+1)) = 1;
+  end
+end
+for d=D:-1:3
+  intra(Fnodes(d), Fnodes(d-1)) = 1;
+end
+if F1
+  intra(Fnodes(2), Fnodes(1)) = 1;
+end
+if all_Q_to_Qs
+  if F1
+    intra(Qnodes(1), Fnodes(1:end)) = 1;
+  else
+    intra(Qnodes(1), Fnodes(2:end)) = 1;
+  end
+  for d=2:D
+    intra(Qnodes(d), Fnodes(d:end)) = 1;
+  end
+else
+  if F1
+    intra(Qnodes(1), Fnodes([1 2])) = 1;
+  else
+    intra(Qnodes(1), Fnodes(2)) = 1;
+  end
+  for d=2:D-1
+    intra(Qnodes(d), Fnodes([d d+1])) = 1;
+  end
+  intra(Qnodes(D), Fnodes(D)) = 1;
+end
+
+
+inter = zeros(ss);
+for d=1:D
+  inter(Qnodes(d), Qnodes(d)) = 1;
+end
+if F1
+  inter(Fnodes(1), Qnodes(1)) = 1;
+end
+for d=2:D
+  inter(Fnodes(d), Qnodes([d-1 d])) = 1;
+end
+
+if ~F1
+  Fnodes = Fnodes(2:end); % strip off dummy -1 term
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/mk_hhmm_topo_F1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function [intra, inter, Qnodes, Fnodes, Onode] = mk_hhmm_topo_F1(D, all_Q_to_Qs, Ops)
+% MK_HHMM_TOPO Make Hierarchical HMM topology assuming level 1 can finish 
+% function [intra, inter, Qnodes, Fnodes, Onode] = mk_hhmm_topo(D, all_Q_to_Qs, Ops, F1)
+%
+% D is the depth of the hierarchy
+% If all_Q_to_Qs = 1, level i connects to all levels below, else just to i+1 [0]
+% Ops are the Q parents of the observed node [Qnodes(end)]
+% If F1=1, level 1 can finish (restart), else there is no F1->Q1 arc [0]
+
+Qnodes = 1:D;
+
+if nargin < 2, all_Q_to_Qs = 1; end
+if nargin < 3, Ops = Qnodes(D); end
+if nargin < 4, F1 = 0; end
+
+if F1
+  Fnodes = 2*D:-1:D+1; % must number from bottom to top
+  Onode = 2*D+1;
+  ss = 2*D+1;
+else
+  Fnodes = (2*D)-1:-1:D+1;
+  Onode = 2*D;
+  ss = 2*D;
+end
+
+intra = zeros(ss);
+intra(Ops, Onode) = 1;
+for d=1:D-1
+  if all_Q_to_Qs
+    intra(Qnodes(d), Qnodes(d+1:end)) = 1;
+  else
+    intra(Qnodes(d), Qnodes(d+1)) = 1;
+  end
+end
+for d=D:-1:3
+  intra(Fnodes(d), Fnodes(d-1)) = 1;
+end
+if F1
+  intra(Fnodes(2), Fnodes(1)) = 1;
+end
+if all_Q_to_Qs
+  for d=1:D
+    intra(Qnodes(d), Fnodes(d:end)) = 1;
+  end
+else
+  for d=1:D
+    if d < D
+      intra(Qnodes(d), Fnodes([d d+1])) = 1;
+    else
+      intra(Qnodes(d), Fnodes(d)) = 1;
+    end
+  end
+end
+
+inter = zeros(ss);
+for d=1:D
+  inter(Qnodes(d), Qnodes(d)) = 1;
+end
+for d=1:D
+  if d==1
+    inter(Fnodes(d), Qnodes(d)) = 1;
+  else
+    inter(Fnodes(d), Qnodes([d-1 d])) = 1;
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/pretty_print_hhmm_parse.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+function pretty_print_hhmm_parse(mpe, Qnodes, Fnodes, Onode, alphabet)
+% function pretty_print_hhmm_parse(mpe, Qnodes, Fnodes, Onode, alphabet)
+%
+% mpe(i,t) is the most probable value of node i at time t
+% Qnodes(1:D), Fnodes = [F2 .. FD], Onode contain the node ids
+% alphabet(i) is the i'th output symbol, or [] if don't want displayed
+
+T = size(mpe,2);
+ncols = 20;
+t1 = 1; t2 = min(T, t1+ncols-1);
+while (t1 < T)
+  %fprintf('%d:%d\n', t1, t2);
+  if iscell(mpe)
+    print_block_cell(mpe(:,t1:t2), Qnodes, Fnodes, Onode, alphabet, t1);
+  else
+    print_block(mpe(:,t1:t2), Qnodes, Fnodes, Onode, alphabet, t1);
+  end
+  fprintf('\n\n');
+  t1 = t2+1; t2 = min(T, t1+ncols-1);
+end
+
+%%%%%%
+
+function print_block_cell(mpe, Qnodes, Fnodes, Onode, alphabet, start)
+
+D = length(Qnodes);
+T = size(mpe, 2);
+fprintf('%3d ', start:start+T-1); fprintf('\n');
+for d=1:D
+  for t=1:T
+    if (d > 1) & (mpe{Fnodes(d-1),t} == 2)
+      fprintf('%3d|', mpe{Qnodes(d), t});
+    else
+      fprintf('%3d ', mpe{Qnodes(d), t});
+    end
+  end
+  fprintf('\n');
+end
+if ~isempty(alphabet)
+  a = cell2num(mpe(Onode,:));
+  %fprintf('%3c ', alphabet(mpe{Onode,:}));
+  fprintf('%3c ', alphabet(a))
+  fprintf('\n');
+end
+
+
+%%%%%%
+
+function print_block(mpe, Qnodes, Fnodes, Onode, alphabet, start)
+
+D = length(Qnodes);
+T = size(mpe, 2);
+fprintf('%3d ', start:start+T-1); fprintf('\n');
+for d=1:D
+  for t=1:T
+    if (d > 1) & (mpe(Fnodes(d-1),t) == 2)
+      fprintf('%3d|', mpe(Qnodes(d), t));
+    else
+      fprintf('%3d ', mpe(Qnodes(d), t));
+    end
+  end
+  fprintf('\n');
+end
+if ~isempty(alphabet)
+  fprintf('%3c ', alphabet(mpe(Onode,:)));
+  fprintf('\n');
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/HHMM/remove_hhmm_end_state.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function [transprob, termprob] = remove_hhmm_end_state(A)
+% REMOVE_END_STATE Infer transition and termination probabilities from automaton with an end state
+% [transprob, termprob] = remove_end_state(A)
+%
+% A(i,k,j) = Pr( i->j | Qps=k), where i in 1:Q, j in 1:(Q+1), and Q+1 is the end state
+% This implements the equation in footnote 3 of my NIPS 01 paper,
+% transprob(i,k,j) = \tilde{A}_k(i,j)
+% termprob(k,j) = \tau_k(j)
+%
+% For the top level, the k index is missing.
+
+Q = size(A,1);
+toplevel = (ndims(A)==2);
+if toplevel
+  Qk = 1;
+  A = reshape(A, [Q 1 Q+1]);
+else
+  Qk = size(A, 2);
+end
+
+transprob = A(:, :, 1:Q);
+term = A(:,:,Q+1)'; % term(k,j) = P(Qj -> end | k)
+termprob = term;
+%termprob = zeros(Qk, Q, 2);
+%termprob(:,:,2) = term;
+%termprob(:,:,1) = 1-term;
+
+for k=1:Qk
+  for i=1:Q
+    for j=1:Q
+      denom = (1-termprob(k,i));
+      denom = denom + (denom==0)*eps;
+      transprob(i,k,j) = transprob(i,k,j) / denom;
+    end
+  end    
+end
+
+if toplevel
+  termprob = squeeze(termprob);
+  transprob = squeeze(transprob);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+/chmm1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/cmp_inference.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/kalman1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/old.water1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/online1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/online2.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/scg_dbn.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/chmm1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+% Compare the speeds of various inference engines on a coupled HMM
+
+N = 2;
+Q = 2;
+rand('state', 0);
+randn('state', 0);
+discrete = 1;
+if discrete
+  Y = 2; % size of output alphabet
+else
+  Y = 1;
+end
+coupled = 1;
+[bnet, onodes] = mk_chmm(N, Q, Y, discrete, coupled);
+ss = N*2;
+
+T = 3;
+
+
+engine = {};
+tic; engine{end+1} = jtree_dbn_inf_engine(bnet, 'observed', onodes);  toc
+%tic; engine{end+1} = jtree_ndxSD_dbn_inf_engine(bnet, onodes);  toc
+%tic; engine{end+1} = jtree_ndxB_dbn_inf_engine(bnet, onodes);  toc
+engine{end+1} = hmm_inf_engine(bnet, onodes);
+%engine{end+1} = dhmm_inf_engine(bnet, onodes);
+tic; engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T, onodes);  toc
+
+%engine{end+1} = bk_inf_engine(bnet, 'ff', onodes);
+%engine{end+1} = loopy_dbn_inf_engine(bnet, onodes);
+
+exact = [1 2 3];
+
+filter = 0;
+single = 0;
+maximize = 0;
+
+[err, time, engine] = cmp_inference(bnet, onodes, engine, exact, T, filter, single, maximize);
+%err = cmp_learning(bnet, onodes, engine, exact, T);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/cmp_inference.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,75 @@
+function [err, time, engine] = cmp_inference(bnet, engine, exact, T, filter, singletons, maximize)
+% CMP_INFERENCE Compare several inference engines on a DBN
+% [err, time, engine] = cmp_inference(bnet, engine, exact, T, filter, singletons, maximize)
+%
+% engine{i} is the i'th inference engine.
+% 'exact' specifies which engines do exact inference - 
+%   we check that these all give the same results.
+% 'T' is the length of the random sequence we generate.
+% If filter=1, we do filtering, else smoothing (default: smoothing)
+% If singletons=1, we compare marginal_nodes, else marginal_family (default: family)
+%
+% err(e,n,t) = sum_i | Pr_exact(X(n,t)=i) - Pr_e(X(n,t)=i) |
+%   where Pr_e = prob. according to engine e
+% time(e) = elapsed time for doing inference with engine e
+
+err = [];
+
+if nargin < 5, filter = 0; end
+if nargin < 6, singletons = 0; end
+if nargin < 7, maximize = 0; end
+
+check_ll = 1;
+
+assert(~maximize);
+
+E = length(engine);
+ref = exact(1); % reference
+
+ss = length(bnet.intra);
+ev = sample_dbn(bnet, 'length', T);
+evidence = cell(ss,T);
+onodes = bnet.observed;
+evidence(onodes,:) = ev(onodes, :);
+
+assert(~filter);
+for i=1:E
+  tic;
+  %[engine{i}, ll(i)] = enter_evidence(engine{i}, evidence, 'maximize', maximize);
+  [engine{i}, ll(i)] = enter_evidence(engine{i}, evidence);
+  time(i)=toc;
+  fprintf('engine %d took %6.4f seconds\n', i, time(i));
+end
+
+cmp = mysetdiff(exact, ref);
+if check_ll
+for i=cmp(:)'
+  if ~approxeq(ll(ref), ll(i))
+    error(['engine ' num2str(i) ' has wrong ll'])
+  end
+end
+end
+ll
+
+hnodes = mysetdiff(1:ss, onodes);
+m = cell(1,E);
+for t=1:T
+  for n=hnodes(:)'
+    for e=1:E
+      if singletons
+	m{e} = marginal_nodes(engine{e}, n, t);
+      else
+	m{e} = marginal_family(engine{e}, n, t);
+      end
+    end
+    for e=1:E
+      assert(isequal(m{e}.domain, m{ref}.domain));
+    end
+    for e=cmp(:)'
+      if ~approxeq(m{ref}.T(:), m{e}.T(:))
+	str= sprintf('engine %d is wrong; n=%d, t=%d', e, n, t);
+	error(str)
+      end
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/kalman1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,127 @@
+% Make a linear dynamical system
+%   X1 -> X2
+%   |     | 
+%   v     v
+%   Y1    Y2 
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+X = 2; % size of hidden state
+Y = 2; % size of observable state
+
+ns = [X Y];
+dnodes = [];
+onodes = [2];
+eclass1 = [1 2];
+eclass2 = [3 2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2, ...
+	      'observed', onodes);
+
+x0 = rand(X,1);
+V0 = eye(X);
+C0 = rand(Y,X);
+R0 = eye(Y);
+A0 = rand(X,X);
+Q0 = eye(X);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', x0, 'cov', V0, 'cov_prior_weight', 0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(Y,1), 'cov', R0, 'weights', C0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', zeros(X,1), 'cov', Q0, 'weights', A0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+
+
+T = 5; % fixed length sequences
+
+clear engine;
+engine{1} = kalman_inf_engine(bnet);
+engine{2} = jtree_unrolled_dbn_inf_engine(bnet, T);
+engine{3} = jtree_dbn_inf_engine(bnet);
+N = length(engine);
+
+% inference
+
+ev = sample_dbn(bnet, T);
+evidence = cell(n,T);
+evidence(onodes,:) = ev(onodes, :);
+
+t = 1;
+query = [1 3];
+m = cell(1, N);
+ll = zeros(1, N);
+for i=1:N
+  [engine{i}, ll(i)] = enter_evidence(engine{i}, evidence);
+  m{i} = marginal_nodes(engine{i}, query, t);
+end
+
+% compare all engines to engine{1}
+for i=2:N
+  assert(approxeq(m{1}.mu, m{i}.mu));
+  assert(approxeq(m{1}.Sigma, m{i}.Sigma));
+  assert(approxeq(ll(1), ll(i)));
+end
+
+if 0
+for i=2:N
+  approxeq(m{1}.mu, m{i}.mu)
+  approxeq(m{1}.Sigma, m{i}.Sigma)
+  approxeq(ll(1), ll(i))
+end
+end
+
+% learning
+
+ncases = 5;
+cases = cell(1, ncases);
+for i=1:ncases
+  ev = sample_dbn(bnet, T);
+  cases{i} = cell(n,T);
+  cases{i}(onodes,:) = ev(onodes, :);
+end
+
+max_iter = 2;
+bnet2 = cell(1,N);
+LLtrace = cell(1,N);
+for i=1:N
+  [bnet2{i}, LLtrace{i}] = learn_params_dbn_em(engine{i}, cases, 'max_iter', max_iter);
+end
+
+for i=1:N
+  temp = bnet2{i};
+  for e=1:3
+    CPD{i,e} = struct(temp.CPD{e});
+  end
+end
+
+for i=2:N
+  assert(approxeq(LLtrace{i}, LLtrace{1}));
+  for e=1:3
+    assert(approxeq(CPD{i,e}.mean, CPD{1,e}.mean));
+    assert(approxeq(CPD{i,e}.cov, CPD{1,e}.cov));
+    assert(approxeq(CPD{i,e}.weights, CPD{1,e}.weights));
+  end
+end
+
+
+% Compare to KF toolbox
+
+data = zeros(Y, T, ncases);
+for i=1:ncases
+  data(:,:,i) = cell2num(cases{i}(onodes, :));
+end   
+[A2, C2, Q2, R2, x2, V2, LL2trace] =  learn_kalman(data, A0, C0, Q0, R0, x0, V0, max_iter);
+
+
+e = 1;
+assert(approxeq(x2, CPD{e,1}.mean))
+assert(approxeq(V2, CPD{e,1}.cov))
+assert(approxeq(C2, CPD{e,2}.weights))
+assert(approxeq(R2, CPD{e,2}.cov));
+assert(approxeq(A2, CPD{e,3}.weights))
+assert(approxeq(Q2, CPD{e,3}.cov));
+assert(approxeq(LL2trace, LLtrace{1}))
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/old.water1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+% Compare the speeds of various inference engines on the water DBN
+
+[bnet, onodes] = mk_water_dbn;
+
+T = 3;
+
+engine = {};
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T, onodes);
+engine{end+1} = hmm_inf_engine(bnet, onodes);
+engine{end+1} = frontier_inf_engine(bnet, onodes);
+engine{end+1} = jtree_dbn_inf_engine(bnet, onodes);
+engine{end+1} = bk_inf_engine(bnet, 'exact', onodes);
+
+engine{end+1} = bk_inf_engine(bnet, 'ff', onodes);
+engine{end+1} = bk_inf_engine(bnet, { [1 2], [3 4 5 6], [7 8] }, onodes);
+
+N = length(engine);
+exact = 1:5;
+
+
+filter = 0;
+err = cmp_inference(bnet, onodes, engine, exact, T, filter);
+
+% elapsed times for enter_evidence  (matlab 5.3 on PIII with 256MB running Redhat linux)  
+
+% T = 5, 4/20/00
+%     0.6266 unrolled *
+%     0.3490 hmm *
+%     1.1743 frontier
+%     1.4621 old frontier
+%     0.3270 fast frontier *
+%     1.3926 jtree 
+%     1.3790 bk 
+%     0.4916 fast bk
+%     0.4190 fast bk compiled
+%     0.3574 fast jtree *
+
+
+err = cmp_learning(bnet, onodes, engine, exact, T);
+
+% elapsed times for learn_params_dbn_em (matlab 5.3 on PIII with 256MB running Redhat linux)  
+
+% T = 5, 2cases, 2 iter, 4/20/00
+% 3.5750 unrolled
+% 3.7475 hmm
+% 2.1452 fast frontier
+% 2.5724 fast bk compiled
+% 2.3387 fast jtree
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/online1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+% Check that online inference gives same results as filtering for various algorithms
+
+N = 3;
+Q = 2;
+ss = N*2;
+
+rand('state', 0);
+randn('state', 0);
+
+
+obs_size = 1;
+discrete_obs = 0;
+bnet = mk_chmm(N, Q, obs_size, discrete_obs);
+ns = bnet.node_sizes_slice;
+
+engine = {};
+engine{end+1} = hmm_inf_engine(bnet);
+E = length(engine);
+
+onodes = (1:N)+N;
+
+T = 4;
+ev = cell(ss,T);
+ev(onodes,:) = num2cell(randn(N, T));
+
+
+filter = 1;
+loglik2 = zeros(1,E);
+for e=1:E
+  [engine2{e}, loglik2(e)] = enter_evidence(engine{e}, ev, 'filter', filter);
+end
+
+loglik = zeros(1,E);
+marg1 = cell(E,N,T);
+for e=1:E
+  ll = zeros(1,T);
+  engine{e} = dbn_init_bel(engine{e});
+  for t=1:T
+    [engine{e}, ll(t)] = dbn_update_bel(engine{e}, ev(:,t), t);
+    for i=1:N
+      marg1{e,i,t} = dbn_marginal_from_bel(engine{e}, i);
+    end
+  end
+  loglik1(e) = sum(ll);
+end
+
+assert(approxeq(loglik1, loglik2))
+
+a = zeros(E,N,T);
+for e=1:E
+  for t=1:T
+    for i=1:N
+      marg2{e,i,t} = marginal_nodes(engine2{e}, i, t);
+      a(e,i,t) = (approxeq(marg2{e,i,t}.T(:), marg1{e,i,t}.T(:)));
+    end
+  end
+end
+
+assert(all(a(:)==1))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/online2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+N = 1; % regular HMM
+Q = 2;
+ss = 2;
+hnodes = 1;
+onodes = 2;
+
+rand('state', 0);
+randn('state', 0);
+O = 2;
+discrete_obs = 1;
+bnet = mk_chmm(N, Q, O, discrete_obs);
+ns = bnet.node_sizes_slice;
+
+engine = hmm_inf_engine(bnet, onodes);
+
+T = 4;
+ev = cell(ss,T);
+ev(onodes,:) = num2cell(sample_discrete([0.5 0.5], N, T));
+
+
+engine = dbn_init_bel(engine);
+for t=1:T
+  if t==1
+    [engine, ll(t)] = dbn_update_bel1(engine, ev(:,t));
+  else
+    [engine, ll(t)] = dbn_update_bel(engine, ev(:,t-1:t));
+  end
+  % one-step ahead prediction
+  lag = 1;
+  engine2 = dbn_predict_bel(engine, lag);  
+  marg = dbn_marginal_from_bel(engine2, 1)
+  marg = dbn_marginal_from_bel(engine2, 2)
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/Old/scg_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,70 @@
+% to test whether scg inference engine can handl dynameic BN
+% Make a linear dynamical system
+%   X1 -> X2
+%   |     | 
+%   v     v
+%   Y1    Y2 
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+X = 2; % size of hidden state
+Y = 2; % size of observable state
+
+ns = [X Y];
+dnodes = [];
+onodes = [2];
+eclass1 = [1 2];
+eclass2 = [3 2];
+bnet = mk_dbn(intra, inter, ns, dnodes, eclass1, eclass2);
+
+x0 = rand(X,1);
+V0 = eye(X);
+C0 = rand(Y,X);
+R0 = eye(Y);
+A0 = rand(X,X);
+Q0 = eye(X);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', x0, 'cov', V0);
+%bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(Y,1), 'cov', R0, 'weights', C0, 'full', 'untied', 'clamped_mean');
+%bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', zeros(X,1), 'cov', Q0, 'weights', A0, 'full', 'untied', 'clamped_mean');
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(Y,1), 'cov', R0, 'weights', C0);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', zeros(X,1), 'cov', Q0, 'weights', A0);
+
+
+T = 5; % fixed length sequences
+
+clear engine;
+%engine{1} = kalman_inf_engine(bnet, onodes);
+engine{1} = scg_unrolled_dbn_inf_engine(bnet, T, onodes);
+engine{2} = jtree_unrolled_dbn_inf_engine(bnet, T);
+
+N = length(engine);
+
+% inference
+
+ev = sample_dbn(bnet, T);
+evidence = cell(n,T);
+evidence(onodes,:) = ev(onodes, :);
+
+t = 2;
+query = [1 3];
+m = cell(1, N);
+ll = zeros(1, N);
+
+engine{1} = enter_evidence(engine{1}, evidence);
+[engine{2}, ll(2)] = enter_evidence(engine{2}, evidence);
+m{1} = marginal_nodes(engine{1}, query);
+m{2} = marginal_nodes(engine{2}, query, t);
+
+
+% compare all engines to engine{1}
+for i=2:N
+  assert(approxeq(m{1}.mu, m{i}.mu));
+  assert(approxeq(m{1}.Sigma, m{i}.Sigma));
+%  assert(approxeq(ll(1), ll(i)));
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/mk_gmux_robot_dbn.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_linear_slam.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/slam_kf.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/slam_offline_loopy.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/slam_partial_kf.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/slam_stationary_loopy.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/SLAM
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/offline_loopy_slam.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/paskin1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/skf_data_assoc_gmux2.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/slam_kf.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/dynamic/SLAM/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/offline_loopy_slam.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,231 @@
+% We navigate a robot around a square using a fixed control policy and no noise.
+% We assume the robot observes the relative distance to the nearest landmark.
+% Everything is linear-Gaussian.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Create toy data set
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+if 1
+  T = 20;
+  ctrl_signal = [repmat([1 0]', 1, T/4) repmat([0 1]', 1, T/4) ...
+		 repmat([-1 0]', 1, T/4) repmat([0 -1]', 1, T/4)];
+else
+  T = 5;
+  ctrl_signal = repmat([1 0]', 1, T);
+end
+
+nlandmarks = 4;
+true_landmark_pos = [1 1;
+		     4 1;
+		     4 4;
+		     1 4]';
+init_robot_pos = [0 0]';
+
+true_robot_pos = zeros(2, T);
+true_data_assoc = zeros(1, T);
+true_rel_dist = zeros(2, T);
+for t=1:T
+  if t>1
+    true_robot_pos(:,t) = true_robot_pos(:,t-1) + ctrl_signal(:,t);
+  else
+    true_robot_pos(:,t) = init_robot_pos + ctrl_signal(:,t);
+  end
+  nn = argmin(dist2(true_robot_pos(:,t)', true_landmark_pos'));
+  %nn = t; % observe 1, 2, 3
+  true_data_assoc(t) = nn;
+  true_rel_dist(:,t) = true_landmark_pos(:, nn) - true_robot_pos(:,t);
+end
+
+figure(1);
+%clf; 
+hold on
+%plot(true_landmark_pos(1,:), true_landmark_pos(2,:), '*');
+for i=1:nlandmarks
+  text(true_landmark_pos(1,i), true_landmark_pos(2,i), sprintf('L%d',i));
+end
+for t=1:T
+  text(true_robot_pos(1,t), true_robot_pos(2,t), sprintf('%d',t));
+end
+hold off
+axis([-1 6 -1 6])
+
+R = 1e-3*eye(2); % noise added to observation
+Q = 1e-3*eye(2); % noise added to robot motion
+
+% Create data set
+obs_noise_seq = sample_gaussian([0 0]', R, T)';
+obs_rel_pos = true_rel_dist + obs_noise_seq;
+%obs_rel_pos = true_rel_dist;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Create params for inference
+
+% X(t) = A X(t-1) + B U(t) + noise(Q)
+
+% [L1]  = [1     ]  * [L1]       + [0]  * Ut  + [0   ]
+% [L2]    [  1   ]    [L2]         [0]          [ 0  ]
+% [R ]t   [     1]    [R ]t-1      [1]          [   Q]
+
+% Y(t)|S(t)=s  = C(s) X(t) + noise(R)
+% Yt|St=1 = [1 0 -1]  * [L1]  + R
+%                       [L2]    
+%                       [R ]    
+
+% Create indices into block structure
+bs = 2*ones(1, nlandmarks+1); % sizes of blocks in state space
+robot_block =  block(nlandmarks+1, bs);
+for i=1:nlandmarks
+  landmark_block(:,i) = block(i, bs)';
+end
+Xsz = 2*(nlandmarks+1); % 2 values for each landmark plus robot
+Ysz = 2; % observe relative location
+Usz = 2; % input is (dx, dy)
+
+
+% create block-diagonal trans matrix for each switch
+A = zeros(Xsz, Xsz);
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  A(bi, bi) = eye(2);
+end
+bi = robot_block;
+A(bi, bi) = eye(2);
+A = repmat(A, [1 1 nlandmarks]); % same for all switch values
+
+% create block-diagonal system cov
+
+
+Qbig = zeros(Xsz, Xsz);
+bi = robot_block;
+Qbig(bi,bi) = Q; % only add noise to robot motion
+Qbig = repmat(Qbig, [1 1 nlandmarks]);
+
+% create input matrix
+B = zeros(Xsz, Usz);
+B(robot_block,:) = eye(2); % only add input to robot position
+B = repmat(B, [1 1 nlandmarks]);
+
+% create observation matrix for each value of the switch node
+% C(:,:,i) = (0 ... I ... -I) where the I is in the i'th posn.
+% This computes L(i) - R
+C = zeros(Ysz, Xsz, nlandmarks);
+for i=1:nlandmarks
+  C(:, landmark_block(:,i), i) = eye(2); 
+  C(:, robot_block, i) = -eye(2);
+end
+
+% create observation cov for each value of the switch node
+Rbig = repmat(R, [1 1 nlandmarks]);
+
+% initial conditions
+init_x = zeros(Xsz, 1);
+init_v = zeros(Xsz, Xsz);
+bi = robot_block;
+init_x(bi) = init_robot_pos;
+init_V(bi, bi) = 1e-5*eye(2); % very sure of robot posn
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  init_V(bi,bi)= 1e5*eye(2); % very uncertain of landmark psosns
+  %init_x(bi) = true_landmark_pos(:,i);
+  %init_V(bi,bi)= 1e-5*eye(2); % very sure of landmark psosns
+end
+
+%%%%%%%%%%%%%%%%%%%%%
+% Inference
+if 1
+[xsmooth, Vsmooth] = kalman_smoother(obs_rel_pos, A, C, Qbig, Rbig, init_x, init_V, ...
+				     'model', true_data_assoc, 'u', ctrl_signal, 'B', B);
+
+est_robot_pos = xsmooth(robot_block, :);
+est_robot_pos_cov = Vsmooth(robot_block, robot_block, :);
+
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  est_landmark_pos(:,i) = xsmooth(bi, T);
+  est_landmark_pos_cov(:,:,i) = Vsmooth(bi, bi, T);
+end
+end
+
+
+if 0
+figure(1); hold on
+for i=1:nlandmarks
+  h=plotgauss2d(est_landmark_pos(:,i), est_landmark_pos_cov(:,:,i));
+  set(h, 'color', 'r')
+end
+hold off
+
+hold on
+for t=1:T
+  h=plotgauss2d(est_robot_pos(:,t), est_robot_pos_cov(:,:,t));
+  set(h,'color','r')
+  h=text(est_robot_pos(1,t), est_robot_pos(2,2), sprintf('R%d', t));
+  set(h,'color','r')
+end
+hold off
+end
+
+
+if 0
+figure(3)
+if 0
+  for t=1:T
+    imagesc(inv(Vsmooth(:,:,t)))
+    colorbar
+    fprintf('t=%d; press key to continue\n', t);
+    pause
+  end
+else
+  for t=1:T
+    subplot(5,4,t)
+    imagesc(inv(Vsmooth(:,:,t)))
+  end
+end
+end
+
+
+
+
+
+%%%%%%%%%%%%%%%%%
+% DBN inference
+
+if 1
+  [bnet, Unode, Snode, Lnodes, Rnode, Ynode, Lsnode] = ...
+      mk_gmux_robot_dbn(nlandmarks, Q, R, init_x, init_V, robot_block, landmark_block);
+  engine = pearl_unrolled_dbn_inf_engine(bnet, 'max_iter', 50, 'filename', ...
+					 '/home/eecs/murphyk/matlab/loopyslam.txt');
+else
+  [bnet, Unode, Snode, Lnodes, Rnode, Ynode] = ...
+      mk_gmux2_robot_dbn(nlandmarks, Q, R, init_x, init_V, robot_block, landmark_block);
+  engine = jtree_dbn_inf_engine(bnet);
+end
+
+nnodes = bnet.nnodes_per_slice;
+evidence = cell(nnodes, T);
+evidence(Ynode, :) = num2cell(obs_rel_pos, 1);
+evidence(Unode, :) = num2cell(ctrl_signal, 1);
+evidence(Snode, :) = num2cell(true_data_assoc);
+
+
+[engine, ll, niter] = enter_evidence(engine, evidence);
+niter
+
+loopy_est_robot_pos = zeros(2, T);
+for t=1:T
+  m = marginal_nodes(engine, Rnode, t);
+  loopy_est_robot_pos(:,t) = m.mu;
+end
+
+for i=1:nlandmarks
+  m = marginal_nodes(engine, Lnodes(i), T);
+  loopy_est_landmark_pos(:,i) = m.mu;
+  loopy_est_landmark_pos_cov(:,:,i) = m.Sigma;
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/paskin1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,238 @@
+% This is like robot1, except we only use a Kalman filter.
+% The goal is to study how the precision matrix changes.
+
+seed = 1;
+rand('state', seed);
+randn('state', seed);
+
+if 0
+  T = 20;
+  ctrl_signal = [repmat([1 0]', 1, T/4) repmat([0 1]', 1, T/4) ...
+		 repmat([-1 0]', 1, T/4) repmat([0 -1]', 1, T/4)];
+else
+  T = 60;
+  ctrl_signal = repmat([1 0]', 1, T);
+end
+
+nlandmarks = 6;
+if 0
+  true_landmark_pos = [1 1;
+		    4 1;
+		    4 4;
+		    1 4]';
+else
+  true_landmark_pos = 10*rand(2,nlandmarks);
+end
+if 0
+figure(1); clf
+hold on
+for i=1:nlandmarks
+  %text(true_landmark_pos(1,i), true_landmark_pos(2,i), sprintf('L%d',i));
+  plot(true_landmark_pos(1,i), true_landmark_pos(2,i), '*')
+end
+hold off
+end
+
+init_robot_pos = [0 0]';
+
+true_robot_pos = zeros(2, T);
+true_data_assoc = zeros(1, T);
+true_rel_dist = zeros(2, T);
+for t=1:T
+  if t>1
+    true_robot_pos(:,t) = true_robot_pos(:,t-1) + ctrl_signal(:,t);
+  else
+    true_robot_pos(:,t) = init_robot_pos + ctrl_signal(:,t);
+  end
+  nn = argmin(dist2(true_robot_pos(:,t)', true_landmark_pos'));
+  %true_data_assoc(t) = nn;
+  %true_data_assoc = wrap(t, nlandmarks); % observe 1, 2, 3, 4, 1, 2, ...
+  true_data_assoc  = sample_discrete(normalise(ones(1,nlandmarks)),1,T);
+  true_rel_dist(:,t) = true_landmark_pos(:, nn) - true_robot_pos(:,t);
+end
+
+R = 1e-3*eye(2); % noise added to observation
+Q = 1e-3*eye(2); % noise added to robot motion
+
+% Create data set
+obs_noise_seq = sample_gaussian([0 0]', R, T)';
+obs_rel_pos = true_rel_dist + obs_noise_seq;
+%obs_rel_pos = true_rel_dist;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Create params for inference
+
+% X(t) = A X(t-1) + B U(t) + noise(Q) 
+
+% [L1]  = [1     ]  * [L1]       + [0]  * Ut  + [0   ]
+% [L2]    [  1   ]    [L2]         [0]          [ 0  ]
+% [R ]t   [     1]    [R ]t-1      [1]          [   Q]
+
+% Y(t)|S(t)=s  = C(s) X(t) + noise(R)
+% Yt|St=1 = [1 0 -1]  * [L1]  + R
+%                       [L2]    
+%                       [R ]    
+
+% Create indices into block structure
+bs = 2*ones(1, nlandmarks+1); % sizes of blocks in state space
+robot_block =  block(nlandmarks+1, bs);
+for i=1:nlandmarks
+  landmark_block(:,i) = block(i, bs)';
+end
+Xsz = 2*(nlandmarks+1); % 2 values for each landmark plus robot
+Ysz = 2; % observe relative location
+Usz = 2; % input is (dx, dy)
+
+
+% create block-diagonal trans matrix for each switch
+A = zeros(Xsz, Xsz);
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  A(bi, bi) = eye(2);
+end
+bi = robot_block;
+A(bi, bi) = eye(2);
+A = repmat(A, [1 1 nlandmarks]); % same for all switch values
+
+% create block-diagonal system cov
+
+
+Qbig = zeros(Xsz, Xsz);
+bi = robot_block;
+Qbig(bi,bi) = Q; % only add noise to robot motion
+Qbig = repmat(Qbig, [1 1 nlandmarks]);
+
+% create input matrix
+B = zeros(Xsz, Usz);
+B(robot_block,:) = eye(2); % only add input to robot position
+B = repmat(B, [1 1 nlandmarks]);
+
+% create observation matrix for each value of the switch node
+% C(:,:,i) = (0 ... I ... -I) where the I is in the i'th posn.
+% This computes L(i) - R
+C = zeros(Ysz, Xsz, nlandmarks);
+for i=1:nlandmarks
+  C(:, landmark_block(:,i), i) = eye(2); 
+  C(:, robot_block, i) = -eye(2);
+end
+
+% create observation cov for each value of the switch node
+Rbig = repmat(R, [1 1 nlandmarks]);
+
+% initial conditions
+init_x = zeros(Xsz, 1);
+init_v = zeros(Xsz, Xsz);
+bi = robot_block;
+init_x(bi) = init_robot_pos;
+%init_V(bi, bi) = 1e-5*eye(2); % very sure of robot posn
+init_V(bi, bi) = Q; % simualate uncertainty due to 1 motion step
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  init_V(bi,bi)= 1e5*eye(2); % very uncertain of landmark psosns
+  %init_x(bi) = true_landmark_pos(:,i);
+  %init_V(bi,bi)= 1e-5*eye(2); % very sure of landmark psosns
+end
+
+%k = nlandmarks-1; % exact
+k = 3;
+ndx = {};
+for t=1:T
+  landmarks = unique(true_data_assoc(t:-1:max(t-k,1)));
+  tmp = [landmark_block(:, landmarks) robot_block'];
+  ndx{t} = tmp(:);
+end
+
+[xa, Va] = kalman_filter(obs_rel_pos, A, C, Qbig, Rbig, init_x, init_V, ...
+				     'model', true_data_assoc, 'u', ctrl_signal, 'B', B, ...
+		       'ndx', ndx);
+
+[xe, Ve] = kalman_filter(obs_rel_pos, A, C, Qbig, Rbig, init_x, init_V, ...
+				     'model', true_data_assoc, 'u', ctrl_signal, 'B', B);
+
+
+if 0
+est_robot_pos = x(robot_block, :);
+est_robot_pos_cov = V(robot_block, robot_block, :);
+
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  est_landmark_pos(:,i) = x(bi, T);
+  est_landmark_pos_cov(:,:,i) = V(bi, bi, T);
+end
+end
+
+
+
+nrows = 10;
+stepsize = T/(2*nrows);
+ts = 1:stepsize:T;
+
+if 1 % plot
+  
+clim = [0 max(max(Va(:,:,end)))];
+
+figure(2)
+if 0
+  imagesc(Ve(1:2:end,1:2:end, T))
+  clim = get(gca,'clim');
+else
+  i = 1;
+  for t=ts(:)'
+    subplot(nrows,2,i)
+    i = i + 1;
+    imagesc(Ve(1:2:end,1:2:end, t))
+    set(gca, 'clim', clim)
+    colorbar
+  end
+end
+suptitle('exact')
+
+
+figure(3)
+if 0
+  imagesc(Va(1:2:end,1:2:end, T))
+  set(gca,'clim', clim)
+else
+  i = 1;
+  for t=ts(:)'
+    subplot(nrows,2,i)
+    i = i+1;
+    imagesc(Va(1:2:end,1:2:end, t))
+    set(gca, 'clim', clim)
+    colorbar
+  end
+end
+suptitle('approx')
+
+
+figure(4)
+i = 1;
+for t=ts(:)'
+  subplot(nrows,2,i)
+  i = i+1;
+  Vd = Va(1:2:end,1:2:end, t) - Ve(1:2:end,1:2:end,t);
+  imagesc(Vd)
+  set(gca, 'clim', clim)
+  colorbar
+end
+suptitle('diff')
+
+end % all plot
+
+
+for t=1:T
+  i = 1:2*nlandmarks;
+  denom = Ve(i,i,t) + (Ve(i,i,t)==0);
+  Vd =(Va(i,i,t)-Ve(i,i,t)) ./ denom;
+  Verr(t) = max(Vd(:));
+end
+figure(6); plot(Verr)
+title('max relative Verr')
+
+for t=1:T
+  %err(t)=rms(xa(:,t), xe(:,t));
+  err(t)=rms(xa(1:end-2,t), xe(1:end-2,t)); % exclude robot
+end
+figure(5);plot(err)
+title('rms mean pos')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/skf_data_assoc_gmux2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,155 @@
+% This is like skf_data_assoc_gmux, except the objects don't move.
+% We are uncertain of their initial positions, and get more and more observations
+% over time. The goal is to test deterministic links (0 covariance).
+% This is like robot1, except the robot doesn't move and is always at [0 0],
+% so the relative location is simply L(s).
+
+nobj = 2;
+N = nobj+2;
+Xs = 1:nobj;
+S = nobj+1;
+Y = nobj+2;
+
+intra = zeros(N,N);
+inter = zeros(N,N);
+intra([Xs S], Y) =1;
+for i=1:nobj
+  inter(Xs(i), Xs(i))=1;
+end
+
+Xsz = 2; % state space = (x y)
+Ysz = 2;
+ns = zeros(1,N);
+ns(Xs) = Xsz;
+ns(Y) = Ysz;
+ns(S) = nobj;
+
+bnet = mk_dbn(intra, inter, ns, 'discrete', S, 'observed', [S Y]);
+
+% For each object, we have
+% X(t+1) = F X(t) + noise(Q)
+% Y(t) = H X(t) + noise(R)
+F = eye(2);
+H = eye(2);
+Q = 0*eye(Xsz); % no noise in dynamics
+R = eye(Ysz);
+
+init_state{1} = [10 10]';
+init_state{2} = [10 -10]';
+init_cov = eye(2);
+
+% Uncertain of initial state (position)
+for i=1:nobj
+  bnet.CPD{Xs(i)} = gaussian_CPD(bnet, Xs(i), 'mean', init_state{i}, 'cov', init_cov);
+end
+bnet.CPD{S} = root_CPD(bnet, S); % always observed
+bnet.CPD{Y} = gmux_CPD(bnet, Y, 'cov', repmat(R, [1 1 nobj]), 'weights', repmat(H, [1 1 nobj]));
+% slice 2
+eclass = bnet.equiv_class;
+for i=1:nobj
+  bnet.CPD{eclass(Xs(i), 2)} = gaussian_CPD(bnet, Xs(i)+N, 'mean', zeros(Xsz,1), 'cov', Q, 'weights', F);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Create LDS params 
+
+% X(t) = A X(t-1) + B U(t) + noise(Q)
+
+% [L11]  = [1  ]  * [L1]       +   [Q ]
+% [L2]     [  1]    [L2]           [ Q]
+
+% Y(t)|S(t)=s  = C(s) X(t) + noise(R)
+% Yt|St=1 = [1 0]  * [L1]  + R
+%                    [L2]    
+
+nlandmarks = nobj;
+
+% Create indices into block structure
+bs = 2*ones(1, nobj); % sizes of blocks in state space
+for i=1:nlandmarks
+  landmark_block(:,i) = block(i, bs)';
+end
+Xsz = 2*(nlandmarks); % 2 values for each landmark plus robot
+Ysz = 2; % observe relative location
+
+% create block-diagonal trans matrix for each switch
+A = zeros(Xsz, Xsz);
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  A(bi, bi) = eye(2);
+end
+A = repmat(A, [1 1 nlandmarks]); % same for all switch values
+
+% create block-diagonal system cov
+Qbig = zeros(Xsz, Xsz);
+Qbig = repmat(Qbig, [1 1 nlandmarks]);
+
+
+% create observation matrix for each value of the switch node
+% C(:,:,i) = (0 ... I ...) where the I is in the i'th posn.
+C = zeros(Ysz, Xsz, nlandmarks);
+for i=1:nlandmarks
+  C(:, landmark_block(:,i), i) = eye(2);
+end
+
+% create observation cov for each value of the switch node
+Rbig = repmat(R, [1 1 nlandmarks]);
+
+% initial conditions
+init_x = [init_state{1}; init_state{2}];
+init_V = zeros(Xsz, Xsz);
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  init_V(bi,bi) = init_cov;
+end
+
+
+
+%%%%%%%%%%%%%%%%
+% Observe objects at random
+T = 10;
+evidence = cell(N, T);
+data_assoc = sample_discrete(normalise(ones(1,nobj)), 1, T);
+evidence(S,:) = num2cell(data_assoc);
+evidence = sample_dbn(bnet, 'evidence', evidence);
+
+
+% Inference
+ev = cell(N,T);
+ev(bnet.observed,:) = evidence(bnet.observed, :);
+y = cell2num(evidence(Y,:));
+
+engine = pearl_unrolled_dbn_inf_engine(bnet);
+engine = enter_evidence(engine, ev);
+
+loopy_est_pos = zeros(2, nlandmarks);
+loopy_est_pos_cov = zeros(2, 2, nlandmarks);
+for i=1:nobj
+  m = marginal_nodes(engine, Xs(i), T);
+  loopy_est_pos(:,i) = m.mu;
+  loopy_est_pos_cov(:,:,i) = m.Sigma;
+end
+
+
+[xsmooth, Vsmooth] = kalman_smoother(y, A, C, Qbig, Rbig, init_x, init_V, 'model', data_assoc);
+
+kf_est_pos = zeros(2, nlandmarks);
+kf_est_pos_cov = zeros(2, 2, nlandmarks);
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  kf_est_pos(:,i) = xsmooth(bi, T);
+  kf_est_pos_cov(:,:,i) = Vsmooth(bi, bi, T);
+end
+
+
+kf_est_pos
+loopy_est_pos
+
+kf_est_pos_time = zeros(2, nlandmarks, T);
+for t=1:T
+  for i=1:nlandmarks
+    bi = landmark_block(:,i);
+    kf_est_pos_time(:,i,t) = xsmooth(bi, t);
+  end
+end
+kf_est_pos_time % same for all t since smoothed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/Old/slam_kf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,172 @@
+% This is like robot1, except we only use a Kalman filter.
+% The goal is to study how the precision matrix changes.
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+if 0
+  T = 20;
+  ctrl_signal = [repmat([1 0]', 1, T/4) repmat([0 1]', 1, T/4) ...
+		 repmat([-1 0]', 1, T/4) repmat([0 -1]', 1, T/4)];
+else
+  T = 12;
+  ctrl_signal = repmat([1 0]', 1, T);
+end
+
+nlandmarks = 6;
+if 0
+  true_landmark_pos = [1 1;
+		    4 1;
+		    4 4;
+		    1 4]';
+else
+  true_landmark_pos = 10*rand(2,nlandmarks);
+end
+figure(1); clf
+hold on
+for i=1:nlandmarks
+  %text(true_landmark_pos(1,i), true_landmark_pos(2,i), sprintf('L%d',i));
+  plot(true_landmark_pos(1,i), true_landmark_pos(2,i), '*')
+end
+hold off
+
+init_robot_pos = [0 0]';
+
+true_robot_pos = zeros(2, T);
+true_data_assoc = zeros(1, T);
+true_rel_dist = zeros(2, T);
+for t=1:T
+  if t>1
+    true_robot_pos(:,t) = true_robot_pos(:,t-1) + ctrl_signal(:,t);
+  else
+    true_robot_pos(:,t) = init_robot_pos + ctrl_signal(:,t);
+  end
+  %nn = argmin(dist2(true_robot_pos(:,t)', true_landmark_pos'));
+  nn = wrap(t, nlandmarks); % observe 1, 2, 3, 4, 1, 2, ...
+  true_data_assoc(t) = nn;
+  true_rel_dist(:,t) = true_landmark_pos(:, nn) - true_robot_pos(:,t);
+end
+
+R = 1e-3*eye(2); % noise added to observation
+Q = 1e-3*eye(2); % noise added to robot motion
+
+% Create data set
+obs_noise_seq = sample_gaussian([0 0]', R, T)';
+obs_rel_pos = true_rel_dist + obs_noise_seq;
+%obs_rel_pos = true_rel_dist;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Create params for inference
+
+% X(t) = A X(t-1) + B U(t) + noise(Q)
+
+% [L1]  = [1     ]  * [L1]       + [0]  * Ut  + [0   ]
+% [L2]    [  1   ]    [L2]         [0]          [ 0  ]
+% [R ]t   [     1]    [R ]t-1      [1]          [   Q]
+
+% Y(t)|S(t)=s  = C(s) X(t) + noise(R)
+% Yt|St=1 = [1 0 -1]  * [L1]  + R
+%                       [L2]    
+%                       [R ]    
+
+% Create indices into block structure
+bs = 2*ones(1, nlandmarks+1); % sizes of blocks in state space
+robot_block =  block(nlandmarks+1, bs);
+for i=1:nlandmarks
+  landmark_block(:,i) = block(i, bs)';
+end
+Xsz = 2*(nlandmarks+1); % 2 values for each landmark plus robot
+Ysz = 2; % observe relative location
+Usz = 2; % input is (dx, dy)
+
+
+% create block-diagonal trans matrix for each switch
+A = zeros(Xsz, Xsz);
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  A(bi, bi) = eye(2);
+end
+bi = robot_block;
+A(bi, bi) = eye(2);
+A = repmat(A, [1 1 nlandmarks]); % same for all switch values
+
+% create block-diagonal system cov
+
+
+Qbig = zeros(Xsz, Xsz);
+bi = robot_block;
+Qbig(bi,bi) = Q; % only add noise to robot motion
+Qbig = repmat(Qbig, [1 1 nlandmarks]);
+
+% create input matrix
+B = zeros(Xsz, Usz);
+B(robot_block,:) = eye(2); % only add input to robot position
+B = repmat(B, [1 1 nlandmarks]);
+
+% create observation matrix for each value of the switch node
+% C(:,:,i) = (0 ... I ... -I) where the I is in the i'th posn.
+% This computes L(i) - R
+C = zeros(Ysz, Xsz, nlandmarks);
+for i=1:nlandmarks
+  C(:, landmark_block(:,i), i) = eye(2); 
+  C(:, robot_block, i) = -eye(2);
+end
+
+% create observation cov for each value of the switch node
+Rbig = repmat(R, [1 1 nlandmarks]);
+
+% initial conditions
+init_x = zeros(Xsz, 1);
+init_v = zeros(Xsz, Xsz);
+bi = robot_block;
+init_x(bi) = init_robot_pos;
+init_V(bi, bi) = 1e-5*eye(2); % very sure of robot posn
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  init_V(bi,bi)= 1e5*eye(2); % very uncertain of landmark psosns
+  %init_x(bi) = true_landmark_pos(:,i);
+  %init_V(bi,bi)= 1e-5*eye(2); % very sure of landmark psosns
+end
+
+[xsmooth, Vsmooth] = kalman_filter(obs_rel_pos, A, C, Qbig, Rbig, init_x, init_V, ...
+				     'model', true_data_assoc, 'u', ctrl_signal, 'B', B);
+
+est_robot_pos = xsmooth(robot_block, :);
+est_robot_pos_cov = Vsmooth(robot_block, robot_block, :);
+
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  est_landmark_pos(:,i) = xsmooth(bi, T);
+  est_landmark_pos_cov(:,:,i) = Vsmooth(bi, bi, T);
+end
+
+
+
+P = zeros(size(Vsmooth));
+for t=1:T
+  P(:,:,t) = inv(Vsmooth(:,:,t));
+end
+
+figure(1)
+for t=1:T
+  subplot(T/2,2,t)
+  imagesc(P(1:2:end,1:2:end, t))
+  colorbar
+end
+
+figure(2)
+for t=1:T
+  subplot(T/2,2,t)
+  imagesc(Vsmooth(1:2:end,1:2:end, t))
+  colorbar
+end
+
+
+
+% marginalize out robot position and then check structure
+bi = landmark_block(:);
+V = Vsmooth(bi,bi,T); 
+P = inv(V);
+P(1:2:end,1:2:end)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/mk_gmux_robot_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,85 @@
+function [bnet, Unode, Snode, Lnodes, Rnode, Ynode, Lsnode] = ...
+    mk_gmux_robot_dbn(nlandmarks, Q, R, init_x, init_V, robot_block, landmark_block)
+
+% Make DBN
+
+% S
+% | L1 -------> L1'
+% |  | L2 ----------> L2'
+% \  | /
+%  v v v
+%    Ls
+%    |
+%    v
+%    Y
+%    ^
+%    |
+%    R ------->  R'
+%    ^      
+%    |      
+%    U      
+%
+%
+% S is a switch, Ls is a deterministic gmux, Y = Ls-R,
+% R(t+1) = R(t) + U(t+1), L(t+1) = L(t)
+
+
+% number nodes topologically
+Snode = 1;
+Lnodes = 2:nlandmarks+1;
+Lsnode = nlandmarks+2;
+Unode = nlandmarks+3;
+Rnode = nlandmarks+4;
+Ynode = nlandmarks+5;
+
+nnodes = nlandmarks+5; 
+intra = zeros(nnodes, nnodes);
+intra([Snode Lnodes], Lsnode) =1;
+intra(Unode,Rnode)=1;
+intra([Rnode Lsnode], Ynode)=1;
+
+inter = zeros(nnodes, nnodes);
+inter(Rnode, Rnode)=1;
+for i=1:nlandmarks
+  inter(Lnodes(i), Lnodes(i))=1;
+end
+
+Lsz = 2; % (x y) posn of landmark
+Rsz = 2; % (x y) posn of robot
+Ysz = 2; % relative distance
+Usz = 2; % (dx dy) ctrl
+Ssz = nlandmarks; % can switch between any landmark
+
+ns = zeros(1,nnodes);
+ns(Snode) = Ssz;
+ns(Lnodes) = Lsz;
+ns(Lsnode) = Lsz;
+ns(Ynode) = Ysz;
+ns(Rnode) = Rsz;
+ns(Ynode) = Usz;
+ns(Unode) = Usz;
+
+bnet = mk_dbn(intra, inter, ns, 'discrete', Snode, 'observed', [Snode Ynode Unode]);
+
+
+bnet.CPD{Snode} = root_CPD(bnet, Snode); % always observed
+bnet.CPD{Unode} = root_CPD(bnet, Unode); % always observed
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  bnet.CPD{Lnodes(i)} = gaussian_CPD(bnet, Lnodes(i), 'mean', init_x(bi), 'cov', init_V(bi,bi));
+end
+bi = robot_block;
+bnet.CPD{Rnode} = gaussian_CPD(bnet, Rnode, 'mean', init_x(bi), 'cov', init_V(bi,bi), 'weights', eye(2));
+bnet.CPD{Lsnode} = gmux_CPD(bnet, Lsnode, 'cov', repmat(zeros(Lsz,Lsz), [1 1 nlandmarks]), ...
+			    'weights', repmat(eye(Lsz,Lsz), [1 1 nlandmarks]));
+W = [eye(2) -eye(2)]; % Y = Ls - R, where Ls is the lower-numbered parent
+bnet.CPD{Ynode} = gaussian_CPD(bnet, Ynode, 'mean', zeros(Ysz,1), 'cov', R, 'weights', W);
+
+% slice 2
+eclass = bnet.equiv_class;
+W = [eye(2) eye(2)]; % R(t) = R(t-1) + U(t), where R(t-1) is the lower-numbered parent
+bnet.CPD{eclass(Rnode,2)} = gaussian_CPD(bnet, Rnode+nnodes, 'mean', zeros(Rsz,1), 'cov', Q, 'weights', W);
+for i=1:nlandmarks
+  bnet.CPD{eclass(Lnodes(i), 2)} = gaussian_CPD(bnet, Lnodes(i)+nnodes, 'mean', zeros(2,1), ...
+						   'cov', zeros(2,2), 'weights', eye(2));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/mk_linear_slam.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,164 @@
+function [A,B,C,Q,R,Qbig,Rbig,init_x,init_V,robot_block,landmark_block,...
+	  true_landmark_pos, true_robot_pos, true_data_assoc, ...
+	  obs_rel_pos, ctrl_signal] = mk_linear_slam(varargin)
+
+% We create data from a linear system for testing SLAM algorithms.
+% i.e. , new robot pos = old robot pos + ctrl_signal, which is just a displacement vector.
+% and  observation = landmark_pos - robot_pos, which is just a displacement vector.
+%
+% The behavior is determined by the following optional arguments:
+%
+% 'nlandmarks' - num. landmarks
+% 'landmarks' - 'rnd' means random locations in the unit sqyare
+%               'square' means at [1 1], [4 1], [4 4] and [1 4]
+% 'T' - num steps to run
+% 'ctrl' - 'stationary' means the robot remains at [0 0],
+%          'leftright' means the robot receives a constant contol of [1 0],
+%          'square' means we navigate the robot around the square
+% 'data-assoc' - 'rnd' means we observe landmarks at random
+%                'nn' means we observe the nearest neighbor landmark
+%                'cycle' means we observe landmarks in order 1,2,.., 1, 2, ...
+
+args = varargin;
+% get mandatory params
+for i=1:2:length(args)
+  switch args{i},
+   case 'nlandmarks', nlandmarks = args{i+1};
+   case 'T', T = args{i+1};
+  end
+end
+
+% set defaults
+true_landmark_pos = rand(2,nlandmarks);
+true_data_assoc = [];
+
+% get args
+for i=1:2:length(args)
+  switch args{i},
+   case 'landmarks',
+    switch args{i+1},
+     case 'rnd',   true_landmark_pos = rand(2,nlandmarks);
+     case 'square',   true_landmark_pos = [1 1; 4 1; 4 4; 1 4]';
+    end
+   case 'ctrl',
+    switch args{i+1},
+     case 'stationary', ctrl_signal = repmat([0 0]', 1, T);
+     case 'leftright', ctrl_signal = repmat([1 0]', 1, T);
+     case 'square',   ctrl_signal = [repmat([1 0]', 1, T/4) repmat([0 1]', 1, T/4) ...
+		    repmat([-1 0]', 1, T/4) repmat([0 -1]', 1, T/4)];
+    end
+   case 'data-assoc', 
+    switch args{i+1},
+     case 'rnd', true_data_assoc  = sample_discrete(normalise(ones(1,nlandmarks)),1,T);
+     case 'cycle', true_data_assoc = wrap(1:T, nlandmarks);
+    end
+  end
+end
+if isempty(true_data_assoc)
+  use_nn = 1;
+else
+  use_nn = 0;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%
+% generate data
+
+init_robot_pos = [0 0]';
+true_robot_pos = zeros(2, T);
+true_rel_dist = zeros(2, T);
+for t=1:T
+  if t>1
+    true_robot_pos(:,t) = true_robot_pos(:,t-1) + ctrl_signal(:,t);
+  else
+    true_robot_pos(:,t) = init_robot_pos + ctrl_signal(:,t);
+  end
+  nn = argmin(dist2(true_robot_pos(:,t)', true_landmark_pos'));
+  if use_nn
+    true_data_assoc(t) = nn;
+  end
+  true_rel_dist(:,t) = true_landmark_pos(:, nn) - true_robot_pos(:,t);
+end
+
+
+R = 1e-3*eye(2); % noise added to observation
+Q = 1e-3*eye(2); % noise added to robot motion
+
+% Create data set
+obs_noise_seq = sample_gaussian([0 0]', R, T)';
+obs_rel_pos = true_rel_dist + obs_noise_seq;
+%obs_rel_pos = true_rel_dist;
+
+%%%%%%%%%%%%%%%%%%
+% Create params
+
+
+% X(t) = A X(t-1) + B U(t) + noise(Q) 
+
+% [L1]  = [1     ]  * [L1]       + [0]  * Ut  + [0   ]
+% [L2]    [  1   ]    [L2]         [0]          [ 0  ]
+% [R ]t   [     1]    [R ]t-1      [1]          [   Q]
+
+% Y(t)|S(t)=s  = C(s) X(t) + noise(R)
+% Yt|St=1 = [1 0 -1]  * [L1]  + R
+%                       [L2]    
+%                       [R ]    
+
+% Create indices into block structure
+bs = 2*ones(1, nlandmarks+1); % sizes of blocks in state space
+robot_block =  block(nlandmarks+1, bs);
+for i=1:nlandmarks
+  landmark_block(:,i) = block(i, bs)';
+end
+Xsz = 2*(nlandmarks+1); % 2 values for each landmark plus robot
+Ysz = 2; % observe relative location
+Usz = 2; % input is (dx, dy)
+
+
+% create block-diagonal trans matrix for each switch
+A = zeros(Xsz, Xsz);
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  A(bi, bi) = eye(2);
+end
+bi = robot_block;
+A(bi, bi) = eye(2);
+A = repmat(A, [1 1 nlandmarks]); % same for all switch values
+
+% create block-diagonal system cov
+
+
+Qbig = zeros(Xsz, Xsz);
+bi = robot_block;
+Qbig(bi,bi) = Q; % only add noise to robot motion
+Qbig = repmat(Qbig, [1 1 nlandmarks]);
+
+% create input matrix
+B = zeros(Xsz, Usz);
+B(robot_block,:) = eye(2); % only add input to robot position
+B = repmat(B, [1 1 nlandmarks]);
+
+% create observation matrix for each value of the switch node
+% C(:,:,i) = (0 ... I ... -I) where the I is in the i'th posn.
+% This computes L(i) - R
+C = zeros(Ysz, Xsz, nlandmarks);
+for i=1:nlandmarks
+  C(:, landmark_block(:,i), i) = eye(2); 
+  C(:, robot_block, i) = -eye(2);
+end
+
+% create observation cov for each value of the switch node
+Rbig = repmat(R, [1 1 nlandmarks]);
+
+% initial conditions
+init_x = zeros(Xsz, 1);
+init_v = zeros(Xsz, Xsz);
+bi = robot_block;
+init_x(bi) = init_robot_pos;
+%init_V(bi, bi) = 1e-5*eye(2); % very sure of robot posn
+init_V(bi, bi) = Q; % simualate uncertainty due to 1 motion step
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  init_V(bi,bi)= 1e5*eye(2); % very uncertain of landmark psosns
+  %init_x(bi) = true_landmark_pos(:,i);
+  %init_V(bi,bi)= 1e-5*eye(2); % very sure of landmark psosns
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/slam_kf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,78 @@
+% Plot how precision matrix changes over time for KF solution
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+[A,B,C,Q,R,Qbig,Rbig,init_x,init_V,robot_block,landmark_block,...
+	  true_landmark_pos, true_robot_pos, true_data_assoc, ...
+	  obs_rel_pos, ctrl_signal] = mk_linear_slam(...
+	      'nlandmarks', 6, 'T', 12, 'ctrl', 'leftright', 'data-assoc', 'cycle');
+
+figure(1); clf
+hold on
+for i=1:nlandmarks
+  %text(true_landmark_pos(1,i), true_landmark_pos(2,i), sprintf('L%d',i));
+  plot(true_landmark_pos(1,i), true_landmark_pos(2,i), '*')
+end
+hold off
+
+
+[x, V] = kalman_filter(obs_rel_pos, A, C, Qbig, Rbig, init_x, init_V, ...
+				     'model', true_data_assoc, 'u', ctrl_signal, 'B', B);
+
+est_robot_pos = x(robot_block, :);
+est_robot_pos_cov = V(robot_block, robot_block, :);
+
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  est_landmark_pos(:,i) = x(bi, T);
+  est_landmark_pos_cov(:,:,i) = V(bi, bi, T);
+end
+
+
+if 0
+figure(1); hold on
+for i=1:nlandmarks
+  h=plotgauss2d(est_landmark_pos(:,i), est_landmark_pos_cov(:,:,i));
+  set(h, 'color', 'r')
+end
+hold off
+
+hold on
+for t=1:T
+  h=plotgauss2d(est_robot_pos(:,t), est_robot_pos_cov(:,:,t));
+  set(h,'color','r')
+  h=text(est_robot_pos(1,t), est_robot_pos(2,2), sprintf('R%d', t));
+  set(h,'color','r')
+end
+hold off
+end
+
+
+P = zeros(size(V));
+for t=1:T
+  P(:,:,t) = inv(V(:,:,t));
+end
+
+if 0
+  figure(2)
+  for t=1:T
+    subplot(T/2,2,t)
+    imagesc(P(1:2:end,1:2:end, t))
+    colorbar
+  end
+else
+  figure(2)
+  for t=1:T
+    subplot(T/2,2,t)
+    imagesc(V(1:2:end,1:2:end, t))
+    colorbar
+  end
+end
+
+% marginalize out robot position and then check structure
+bi = landmark_block(:);
+V = V(bi,bi,T); 
+P = inv(V);
+P(1:2:end,1:2:end)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/slam_offline_loopy.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+% Compare Kalman smoother with loopy
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+nlandmarks = 6;
+T = 12;
+
+[A,B,C,Q,R,Qbig,Rbig,init_x,init_V,robot_block,landmark_block,...
+	  true_landmark_pos, true_robot_pos, true_data_assoc, ...
+	  obs_rel_pos, ctrl_signal] = mk_linear_slam(...
+	      'nlandmarks', nlandmarks, 'T', T, 'ctrl', 'leftright', 'data-assoc', 'cycle');
+
+[xsmooth, Vsmooth] = kalman_smoother(obs_rel_pos, A, C, Qbig, Rbig, init_x, init_V, ...
+				     'model', true_data_assoc, 'u', ctrl_signal, 'B', B);
+
+est_robot_pos = xsmooth(robot_block, :);
+est_robot_pos_cov = Vsmooth(robot_block, robot_block, :);
+
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  est_landmark_pos(:,i) = xsmooth(bi, T);
+  est_landmark_pos_cov(:,:,i) = Vsmooth(bi, bi, T);
+end
+
+
+if 1
+  [bnet, Unode, Snode, Lnodes, Rnode, Ynode, Lsnode] = ...
+      mk_gmux_robot_dbn(nlandmarks, Q, R, init_x, init_V, robot_block, landmark_block);
+  engine = pearl_unrolled_dbn_inf_engine(bnet, 'max_iter', 50, 'filename', ...
+					 '/home/eecs/murphyk/matlab/loopyslam.txt');
+else
+  [bnet, Unode, Snode, Lnodes, Rnode, Ynode] = ...
+      mk_gmux2_robot_dbn(nlandmarks, Q, R, init_x, init_V, robot_block, landmark_block);
+  engine = jtree_dbn_inf_engine(bnet);
+end
+
+nnodes = bnet.nnodes_per_slice;
+evidence = cell(nnodes, T);
+evidence(Ynode, :) = num2cell(obs_rel_pos, 1);
+evidence(Unode, :) = num2cell(ctrl_signal, 1);
+evidence(Snode, :) = num2cell(true_data_assoc);
+
+[engine, ll, niter] = enter_evidence(engine, evidence);
+niter
+
+loopy_est_robot_pos = zeros(2, T);
+for t=1:T
+  m = marginal_nodes(engine, Rnode, t);
+  loopy_est_robot_pos(:,t) = m.mu;
+end
+
+for i=1:nlandmarks
+  m = marginal_nodes(engine, Lnodes(i), T);
+  loopy_est_landmark_pos(:,i) = m.mu;
+  loopy_est_landmark_pos_cov(:,:,i) = m.Sigma;
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/slam_partial_kf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,107 @@
+% See how well partial Kalman filter updates work
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+nlandmarks = 6;
+T = 12;
+
+[A,B,C,Q,R,Qbig,Rbig,init_x,init_V,robot_block,landmark_block,...
+	  true_landmark_pos, true_robot_pos, true_data_assoc, ...
+	  obs_rel_pos, ctrl_signal] = mk_linear_slam(...
+	      'nlandmarks', nlandmarks, 'T', T, 'ctrl', 'leftright', 'data-assoc', 'cycle');
+
+% exact
+[xe, Ve] = kalman_filter(obs_rel_pos, A, C, Qbig, Rbig, init_x, init_V, ...
+				     'model', true_data_assoc, 'u', ctrl_signal, 'B', B);
+
+
+% approx
+%k = nlandmarks-1; % exact
+k = 3;
+ndx = {};
+for t=1:T
+  landmarks = unique(true_data_assoc(t:-1:max(t-k,1)));
+  tmp = [landmark_block(:, landmarks) robot_block'];
+  ndx{t} = tmp(:);
+end
+
+[xa, Va] = kalman_filter(obs_rel_pos, A, C, Qbig, Rbig, init_x, init_V, ...
+			 'model', true_data_assoc, 'u', ctrl_signal, 'B', B, ...
+		       'ndx', ndx);
+
+
+
+nrows = 10;
+stepsize = T/(2*nrows);
+ts = 1:stepsize:T;
+
+if 1 % plot
+  
+clim = [0 max(max(Va(:,:,end)))];
+
+figure(2)
+if 0
+  imagesc(Ve(1:2:end,1:2:end, T))
+  clim = get(gca,'clim');
+else
+  i = 1;
+  for t=ts(:)'
+    subplot(nrows,2,i)
+    i = i + 1;
+    imagesc(Ve(1:2:end,1:2:end, t))
+    set(gca, 'clim', clim)
+    colorbar
+  end
+end
+suptitle('exact')
+
+
+figure(3)
+if 0
+  imagesc(Va(1:2:end,1:2:end, T))
+  set(gca,'clim', clim)
+else
+  i = 1;
+  for t=ts(:)'
+    subplot(nrows,2,i)
+    i = i+1;
+    imagesc(Va(1:2:end,1:2:end, t))
+    set(gca, 'clim', clim)
+    colorbar
+  end
+end
+suptitle('approx')
+
+
+figure(4)
+i = 1;
+for t=ts(:)'
+  subplot(nrows,2,i)
+  i = i+1;
+  Vd = Va(1:2:end,1:2:end, t) - Ve(1:2:end,1:2:end,t);
+  imagesc(Vd)
+  set(gca, 'clim', clim)
+  colorbar
+end
+suptitle('diff')
+
+end % all plot
+
+
+for t=1:T
+  %err(t)=rms(xa(:,t), xe(:,t));
+  err(t)=rms(xa(1:end-2,t), xe(1:end-2,t)); % exclude robot
+end
+figure(5);plot(err)
+title('rms mean pos')
+
+
+for t=1:T
+  i = 1:2*nlandmarks;
+  denom = Ve(i,i,t) + (Ve(i,i,t)==0);
+  Vd =(Va(i,i,t)-Ve(i,i,t)) ./ denom;
+  Verr(t) = max(Vd(:));
+end
+figure(6); plot(Verr)
+title('max relative Verr')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/SLAM/slam_stationary_loopy.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,155 @@
+% This is like skf_data_assoc_gmux, except the objects don't move.
+% We are uncertain of their initial positions, and get more and more observations
+% over time. The goal is to test deterministic links (0 covariance).
+% This is like robot1, except the robot doesn't move and is always at [0 0],
+% so the relative location is simply L(s).
+
+nobj = 2;
+N = nobj+2;
+Xs = 1:nobj;
+S = nobj+1;
+Y = nobj+2;
+
+intra = zeros(N,N);
+inter = zeros(N,N);
+intra([Xs S], Y) =1;
+for i=1:nobj
+  inter(Xs(i), Xs(i))=1;
+end
+
+Xsz = 2; % state space = (x y)
+Ysz = 2;
+ns = zeros(1,N);
+ns(Xs) = Xsz;
+ns(Y) = Ysz;
+ns(S) = nobj;
+
+bnet = mk_dbn(intra, inter, ns, 'discrete', S, 'observed', [S Y]);
+
+% For each object, we have
+% X(t+1) = F X(t) + noise(Q)
+% Y(t) = H X(t) + noise(R)
+F = eye(2);
+H = eye(2);
+Q = 0*eye(Xsz); % no noise in dynamics
+R = eye(Ysz);
+
+init_state{1} = [10 10]';
+init_state{2} = [10 -10]';
+init_cov = eye(2);
+
+% Uncertain of initial state (position)
+for i=1:nobj
+  bnet.CPD{Xs(i)} = gaussian_CPD(bnet, Xs(i), 'mean', init_state{i}, 'cov', init_cov);
+end
+bnet.CPD{S} = root_CPD(bnet, S); % always observed
+bnet.CPD{Y} = gmux_CPD(bnet, Y, 'cov', repmat(R, [1 1 nobj]), 'weights', repmat(H, [1 1 nobj]));
+% slice 2
+eclass = bnet.equiv_class;
+for i=1:nobj
+  bnet.CPD{eclass(Xs(i), 2)} = gaussian_CPD(bnet, Xs(i)+N, 'mean', zeros(Xsz,1), 'cov', Q, 'weights', F);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Create LDS params 
+
+% X(t) = A X(t-1) + B U(t) + noise(Q)
+
+% [L11]  = [1  ]  * [L1]       +   [Q ]
+% [L2]     [  1]    [L2]           [ Q]
+
+% Y(t)|S(t)=s  = C(s) X(t) + noise(R)
+% Yt|St=1 = [1 0]  * [L1]  + R
+%                    [L2]    
+
+nlandmarks = nobj;
+
+% Create indices into block structure
+bs = 2*ones(1, nobj); % sizes of blocks in state space
+for i=1:nlandmarks
+  landmark_block(:,i) = block(i, bs)';
+end
+Xsz = 2*(nlandmarks); % 2 values for each landmark plus robot
+Ysz = 2; % observe relative location
+
+% create block-diagonal trans matrix for each switch
+A = zeros(Xsz, Xsz);
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  A(bi, bi) = eye(2);
+end
+A = repmat(A, [1 1 nlandmarks]); % same for all switch values
+
+% create block-diagonal system cov
+Qbig = zeros(Xsz, Xsz);
+Qbig = repmat(Qbig, [1 1 nlandmarks]);
+
+
+% create observation matrix for each value of the switch node
+% C(:,:,i) = (0 ... I ...) where the I is in the i'th posn.
+C = zeros(Ysz, Xsz, nlandmarks);
+for i=1:nlandmarks
+  C(:, landmark_block(:,i), i) = eye(2);
+end
+
+% create observation cov for each value of the switch node
+Rbig = repmat(R, [1 1 nlandmarks]);
+
+% initial conditions
+init_x = [init_state{1}; init_state{2}];
+init_V = zeros(Xsz, Xsz);
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  init_V(bi,bi) = init_cov;
+end
+
+
+
+%%%%%%%%%%%%%%%%
+% Observe objects at random
+T = 10;
+evidence = cell(N, T);
+data_assoc = sample_discrete(normalise(ones(1,nobj)), 1, T);
+evidence(S,:) = num2cell(data_assoc);
+evidence = sample_dbn(bnet, 'evidence', evidence);
+
+
+% Inference
+ev = cell(N,T);
+ev(bnet.observed,:) = evidence(bnet.observed, :);
+y = cell2num(evidence(Y,:));
+
+engine = pearl_unrolled_dbn_inf_engine(bnet);
+engine = enter_evidence(engine, ev);
+
+loopy_est_pos = zeros(2, nlandmarks);
+loopy_est_pos_cov = zeros(2, 2, nlandmarks);
+for i=1:nobj
+  m = marginal_nodes(engine, Xs(i), T);
+  loopy_est_pos(:,i) = m.mu;
+  loopy_est_pos_cov(:,:,i) = m.Sigma;
+end
+
+
+[xsmooth, Vsmooth] = kalman_smoother(y, A, C, Qbig, Rbig, init_x, init_V, 'model', data_assoc);
+
+kf_est_pos = zeros(2, nlandmarks);
+kf_est_pos_cov = zeros(2, 2, nlandmarks);
+for i=1:nlandmarks
+  bi = landmark_block(:,i);
+  kf_est_pos(:,i) = xsmooth(bi, T);
+  kf_est_pos_cov(:,:,i) = Vsmooth(bi, bi, T);
+end
+
+
+kf_est_pos
+loopy_est_pos
+
+kf_est_pos_time = zeros(2, nlandmarks, T);
+for t=1:T
+  for i=1:nlandmarks
+    bi = landmark_block(:,i);
+    kf_est_pos_time(:,i,t) = xsmooth(bi, t);
+  end
+end
+kf_est_pos_time % same for all t since smoothed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/arhmm1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+% Make an HMM with autoregressive Gaussian observations (switching AR model)
+%   X1 -> X2
+%   |     | 
+%   v     v
+%   Y1 -> Y2 
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+inter(2,2) = 1;
+n = 2;
+
+Q = 2; % num hidden states
+O = 2; % size of observed vector
+
+ns = [Q O];
+dnodes = 1;
+onodes = [2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'observed', onodes);
+
+bnet.CPD{1} = tabular_CPD(bnet, 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2);
+bnet.CPD{3} = tabular_CPD(bnet, 3);
+bnet.CPD{4} = gaussian_CPD(bnet, 4);
+
+
+T = 10; % fixed length sequences
+
+engine = {};
+%engine{end+1} = hmm_inf_engine(bnet);
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T);
+%engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet));
+%engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+
+inf_time = cmp_inference_dbn(bnet, engine, T, 'check_ll',1);
+learning_time = cmp_learning_dbn(bnet, engine, T, 'check_ll', 1);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/bat1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+% Compare the speeds of various inference engines on the BAT DBN
+[bnet, names] = mk_bat_dbn;
+
+T = 3; % fixed length sequence - we make it short just for speed
+
+USEC = exist('@jtree_C_inf_engine/collect_evidence','file');
+
+disp('constructing engines for BAT');
+engine = {}; % time in seconds for inference
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T, 'useC', USEC);  % 0.39
+engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet)); % 4.89
+engine{end+1} = jtree_dbn_inf_engine(bnet); % 4.45
+if 0
+engine{end+1} = jtree_ndx_dbn_inf_engine(bnet, 'ndx_type', 'SD'); % 2.98
+engine{end+1} = jtree_ndx_dbn_inf_engine(bnet, 'ndx_type', 'D'); % 3.52
+engine{end+1} = jtree_ndx_dbn_inf_engine(bnet, 'ndx_type', 'B'); % 2.40
+if USEC, engine{end+1} = jtree_C_dbn_inf_engine(bnet); end % 3.54
+%engine{end+1} = hmm_inf_engine(bnet, onodes); % too big
+end
+
+%tic; engine{end+1} = frontier_inf_engine(bnet); toc % very slow
+% The frontier engine thrashes badly on the BAT network
+%tic; engine{end+1} = bk_inf_engine(bnet, 'exact', onodes); toc  % SLOW!
+
+%tic; engine{end+1} = bk_inf_engine(bnet, 'ff', onodes); toc
+
+%clusters{1} = [stringmatch({'LeftClr', 'RightClr', 'LatAct', 'Xdot', 'InLane'}, names)];
+%clusters{2} = [stringmatch({'FwdAct', 'Ydot', 'Stopped', 'EngStatus', 'FBStatus'}, names)];      
+
+%tic; engine{end+1} = bk_inf_engine(bnet, clusters, onodes); toc
+
+disp('inference')
+time = cmp_inference_dbn(bnet, engine, T)
+
+disp('learning')
+time = cmp_learning_dbn(bnet, engine, T)
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/bkff1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+% Compare different implementations of fully factored Boyen Koller
+
+water = 1;
+if water
+  bnet = mk_water_dbn;
+else
+  N = 5;
+  Q = 2;
+  Y = 2;
+  bnet = mk_chmm(N, Q, Y);
+end
+ss = length(bnet.intra);
+
+engine = {};
+engine{end+1} = bk_inf_engine(bnet, 'clusters', 'ff');        
+engine{end+1} = bk_ff_hmm_inf_engine(bnet);   
+E = length(engine);
+
+T = 5;
+time = cmp_inference_dbn(bnet, engine, T, 'singletons_only', 1)
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/chmm1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+% Compare the speeds of various inference engines on a coupled HMM
+
+N = 3;
+Q = 2;
+rand('state', 0);
+randn('state', 0);
+discrete = 0;
+if discrete
+  Y = 2; % size of output alphabet
+else
+  Y = 3; % size of observed vectors
+end
+coupled = 1;
+bnet = mk_chmm(N, Q, Y, discrete, coupled); 
+%bnet = mk_fhmm(N, Q, Y, discrete);  % factorial HMM
+ss = length(bnet.node_sizes_slice);
+
+T = 3;
+
+USEC = exist('@jtree_C_inf_engine/collect_evidence','file');
+
+engine = {};
+engine{end+1} = jtree_dbn_inf_engine(bnet);
+%engine{end+1} = jtree_ndx_dbn_inf_engine(bnet, 'ndx_type', 'SD');
+%engine{end+1} = jtree_ndx_dbn_inf_engine(bnet, 'ndx_type', 'D');
+%engine{end+1} = jtree_ndx_dbn_inf_engine(bnet, 'ndx_type', 'B');
+if USEC, engine{end+1} = jtree_C_dbn_inf_engine(bnet); end
+engine{end+1} = hmm_inf_engine(bnet);
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T); 
+
+% times in matlab N=4 Q=4 T=5 (* = winner)
+%     jtree    SD       B          hmm       dhmm      unrolled
+%    0.6266    1.1563    8.3815    0.3069    0.1948*    0.8654  inf
+%    0.9057*   2.1522   12.6314    2.6847    2.3107    3.1905  learn
+
+%engine{end+1} = bk_inf_engine(bnet, 'ff', onodes);
+%engine{end+1} = pearl_unrolled_dbn_inf_engine(bnet, T);
+
+inf_time = cmp_inference_dbn(bnet, engine, T)
+learning_time = cmp_learning_dbn(bnet, engine, T)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/cmp_inference_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,100 @@
+function [time, engine] = cmp_inference_dbn(bnet, engine, T, varargin)
+% CMP_INFERENCE_DBN Compare several inference engines on a DBN
+% function [time, engine] = cmp_inference_dbn(bnet, engine, T, ...)
+%
+% engine{i} is the i'th inference engine.
+% time(e) = elapsed time for doing inference with engine e
+%
+% The list below gives optional arguments [default value in brackets].
+%
+% exact - specifies which engines do exact inference [ 1:length(engine) ]
+% singletons_only - if 1, we only call marginal_nodes, else this  and marginal_family [0]
+% check_ll - 1 means we check that the log-likelihoods are correct [1]
+
+% set default params
+exact = 1:length(engine);
+singletons_only = 0;
+check_ll = 1;
+onodes = bnet.observed;
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'exact', exact = args{i+1};
+   case 'singletons_only', singletons_only = args{i+1};
+   case 'check_ll', check_ll = args{i+1};
+   case 'observed', onodes = args{i+1};
+   otherwise,
+    error(['unrecognized argument ' args{i}])
+  end
+end
+
+E = length(engine);
+ref = exact(1); % reference
+
+ss = length(bnet.intra);
+ev = sample_dbn(bnet, 'length', T);
+evidence = cell(ss,T);
+evidence(onodes,:) = ev(onodes, :);
+
+for i=1:E
+  tic;
+  [engine{i}, ll(i)] = enter_evidence(engine{i}, evidence);
+  time(i)=toc;
+  fprintf('engine %d took %6.4f seconds\n', i, time(i));
+end
+
+cmp = mysetdiff(exact, ref);
+if check_ll
+  for i=cmp(:)'
+    if ~approxeq(ll(ref), ll(i))
+      error(['engine ' num2str(i) ' has wrong ll'])
+    end
+  end
+end
+ll
+
+hnodes = mysetdiff(1:ss, onodes);
+
+if ~singletons_only
+  get_marginals(engine, hnodes, exact, 0, T);
+end
+get_marginals(engine, hnodes, exact, 1, T);
+
+%%%%%%%%%%
+
+function get_marginals(engine, hnodes, exact, singletons, T)
+
+bnet = bnet_from_engine(engine{1});
+N = length(bnet.intra);
+cnodes_bitv = zeros(1,N);
+cnodes_bitv(bnet.cnodes) = 1;
+ref = exact(1); % reference
+cmp = exact(2:end);
+E = length(engine);
+m = cell(1,E);
+
+for t=1:T
+  for n=1:N
+  %for n=hnodes(:)'
+    for e=1:E
+      if singletons
+	m{e} = marginal_nodes(engine{e}, n, t);
+      else
+	m{e} = marginal_family(engine{e}, n, t);
+      end
+    end
+    for e=cmp(:)'
+      assert(isequal(m{e}.domain, m{ref}.domain));
+      if cnodes_bitv(n) & isfield(m{e}, 'mu') & isfield(m{ref}, 'mu')
+	wrong = ~approxeq(m{ref}.mu, m{e}.mu) | ~approxeq(m{ref}.Sigma, m{e}.Sigma);
+      else
+	wrong = ~approxeq(m{ref}.T(:), m{e}.T(:));
+      end
+      if wrong
+	error(sprintf('engine %d is wrong; n=%d, t=%d, fam=%d', e, n, t, ~singletons))
+      end
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/cmp_learning_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,89 @@
+function [time, CPD, LL, cases] = cmp_learning_dbn(bnet, engine, T, varargin)
+% CMP_LEARNING_DBN Compare a bunch of inference engines by learning a DBN
+% function [time, CPD, LL, cases] = cmp_learning_dbn(bnet, engine, exact, T, ncases, max_iter)
+%
+% engine{i} is the i'th inference engine.
+% time(e) = elapsed time for doing inference with engine e
+% CPD{e,c} is the learned CPD for eclass c in engine e
+% LL{e} is the learning curve for engine e
+% cases{i} is the i'th training case
+%
+% The list below gives optional arguments [default value in brackets].
+%
+% exact - specifies which engines do exact inference [ 1:length(engine) ]
+% check_ll - 1 means we check that the log-likelihoods are correct [1]
+% ncases - num. random training cases [2]
+% max_iter - max. num EM iterations [2]
+
+% set default params
+exact = 1:length(engine);
+check_ll = 1;
+ncases = 2;
+max_iter = 2;
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'exact', exact = args{i+1};
+   case 'check_ll', check_ll = args{i+1};
+   case 'ncases', ncases = args{i+1};
+   case 'max_iter', max_iter = args{i+1};
+   otherwise,
+    error(['unrecognized argument ' args{i}])
+  end
+end
+
+E = length(engine);
+ss = length(bnet.intra);
+onodes = bnet.observed;
+
+cases = cell(1, ncases);
+for i=1:ncases
+  ev = sample_dbn(bnet, 'length', T);
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = ev(onodes, :);
+end
+
+LL = cell(1,E);
+time = zeros(1,E);
+for i=1:E
+  tic
+  [bnet2{i}, LL{i}] = learn_params_dbn_em(engine{i}, cases, 'max_iter', max_iter);
+  time(i) = toc;
+  fprintf('engine %d took %6.4f seconds\n', i, time(i));
+end
+
+ref = exact(1); % reference
+cmp = mysetdiff(exact, ref);
+if check_ll
+  for i=cmp(:)'
+    if ~approxeq(LL{ref}, LL{i})
+      error(['engine ' num2str(i) ' has wrong ll'])
+    end
+  end
+end
+
+nCPDs = length(bnet.CPD);
+CPD = cell(E, nCPDs);
+tabular = zeros(1, nCPDs);
+for i=1:E
+  temp = bnet2{i};
+  for c=1:nCPDs
+    tabular(c) = isa(temp.CPD{c}, 'tabular_CPD');
+    CPD{i,c} = struct(temp.CPD{c});
+  end
+end
+
+for i=cmp(:)'
+  for c=1:nCPDs
+    if tabular(c)
+      assert(approxeq(CPD{i,c}.CPT, CPD{ref,c}.CPT));
+    else
+      assert(approxeq(CPD{i,c}.mean, CPD{ref,c}.mean));
+      assert(approxeq(CPD{i,c}.cov, CPD{ref,c}.cov));
+      assert(approxeq(CPD{i,c}.weights, CPD{ref,c}.weights));
+    end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/cmp_online_inference.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+function [time, engine] = cmp_online_inference(bnet, engine, T, varargin)
+% CMP_ONLINE_INFERENCE Compare several online inference engines on a DBN
+% function [time, engine] = cmp_online_inference(bnet, engine, T, ...)
+%
+% engine{i} is the i'th inference engine.
+% time(e) = elapsed time for doing inference with engine e
+%
+% The list below gives optional arguments [default value in brackets].
+%
+% exact - specifies which engines do exact inference [ 1:length(engine) ]
+% singletons_only - if 1, we only call marginal_nodes, else this  and marginal_family [0]
+% check_ll - 1 means we check that the log-likelihoods are correct [1]
+
+% set default params
+exact = 1:length(engine);
+singletons_only = 0;
+check_ll = 1;
+onodes = bnet.observed;
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'exact', exact = args{i+1};
+   case 'singletons_only', singletons_only = args{i+1};
+   case 'check_ll', check_ll = args{i+1};
+   case 'observed', onodes = args{i+1};
+   otherwise,
+    error(['unrecognized argument ' args{i}])
+  end
+end
+
+E = length(engine);
+ref = exact(1); % reference
+cmp = mysetdiff(exact, ref);
+
+ss = length(bnet.intra);
+hnodes = mysetdiff(1:ss, onodes);
+ev = sample_dbn(bnet, 'length', T);
+evidence = cell(ss,T);
+evidence(onodes,:) = ev(onodes, :);
+
+time = zeros(1,E);
+for t=1:T
+  for e=1:E
+    tic;
+    [engine{e}, ll(e)] = enter_evidence(engine{e}, evidence(:,t), t);
+    time(e)= time(e) + toc;
+  end
+  if check_ll
+    for e=cmp(:)'
+      if ~approxeq(ll(ref), ll(e))
+	error(['engine ' num2str(e) ' has wrong ll'])
+      end
+    end
+  end
+  if ~singletons_only
+    check_marginals(engine, hnodes, exact, 0, t);
+  end
+  check_marginals(engine, hnodes, exact, 1, t);
+end
+
+
+%%%%%%%%%%
+
+function check_marginals(engine, hnodes, exact, singletons, t)
+
+bnet = bnet_from_engine(engine{1});
+N = length(bnet.intra);
+cnodes_bitv = zeros(1,N);
+cnodes_bitv(bnet.cnodes) = 1;
+ref = exact(1); % reference
+cmp = exact(2:end);
+E = length(engine);
+m = cell(1,E);
+
+for n=1:N
+  %for n=hnodes(:)'
+  for e=1:E
+    if singletons
+      m{e} = marginal_nodes(engine{e}, n, t);
+    else
+      m{e} = marginal_family(engine{e}, n, t);
+    end
+  end
+  for e=cmp(:)'
+    assert(isequal(m{e}.domain, m{ref}.domain));
+    if cnodes_bitv(n) & isfield(m{e}, 'mu') & isfield(m{ref}, 'mu')
+      wrong = ~approxeq(m{ref}.mu, m{e}.mu) | ~approxeq(m{ref}.Sigma, m{e}.Sigma);
+    else
+      wrong = ~approxeq(m{ref}.T(:), m{e}.T(:));
+    end
+    if wrong
+      error(sprintf('engine %d is wrong; n=%d, t=%d, fam=%d', e, n, t, ~singletons))
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/dhmm1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+% Make an HMM with discrete observations
+%   X1 -> X2
+%   |     | 
+%   v     v
+%   Y1    Y2 
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+Q = 2; % num hidden states
+O = 2; % num observable symbols
+
+ns = [Q O];
+dnodes = 1:2;
+onodes = [2];
+eclass1 = [1 2];
+eclass2 = [3 2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2, ...
+	      'observed', onodes);
+
+rand('state', 0);
+prior1 = normalise(rand(Q,1));
+transmat1 = mk_stochastic(rand(Q,Q));
+obsmat1 = mk_stochastic(rand(Q,O));
+bnet.CPD{1} = tabular_CPD(bnet, 1, prior1);
+bnet.CPD{2} = tabular_CPD(bnet, 2, obsmat1);
+bnet.CPD{3} = tabular_CPD(bnet, 3, transmat1);
+
+
+T = 5; % fixed length sequences
+
+engine = {};
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T);
+engine{end+1} = hmm_inf_engine(bnet);
+engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet));
+engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+if 1
+%engine{end+1} = frontier_inf_engine(bnet); % broken
+engine{end+1} = bk_inf_engine(bnet, 'clusters', {[1]});
+engine{end+1} = jtree_dbn_inf_engine(bnet);
+end
+
+inf_time = cmp_inference_dbn(bnet, engine, T);
+
+ncases = 2;
+max_iter = 2;
+[learning_time, CPD, LL, cases] = cmp_learning_dbn(bnet, engine, T, 'ncases', ncases, 'max_iter', max_iter);
+
+% Compare to HMM toolbox
+
+data = zeros(ncases, T);
+for i=1:ncases
+  %data(i,:) = cat(2, cases{i}{onodes,:});
+  data(i,:) = cell2num(cases{i}(onodes,:));
+end
+[LL2, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', max_iter);
+
+e = 1;
+assert(approxeq(prior2, CPD{e,1}.CPT))
+assert(approxeq(obsmat2, CPD{e,2}.CPT))
+assert(approxeq(transmat2, CPD{e,3}.CPT))
+assert(approxeq(LL2, LL{e}))        
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/ehmm1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+% make the structure of an embedded HMM with 2 rows and 3 columns
+
+% 1------------>2
+% |\   \        | \  \
+% 3->4->5       6->7->8
+
+n = 8;
+dag = zeros(n);
+dag(1,[2 3 4 5])=1;
+dag(2,[6 7 8])=1;
+for i=3:4
+  dag(i,i+1)=1;
+end
+for i=6:7
+  dag(i,i+1)=1;
+end
+ns = 2*ones(1,n);
+bnet = mk_bnet(dag,ns);
+for i=1:n
+  bnet.CPD{i}=tabular_CPD(bnet,i);
+end
+[jtree, root, cliques] =  graph_to_jtree(moralize(bnet.dag), ones(1,n), {}, {});
+%[jtree, root, cliques, B, w, elim_order, moral_edges, fill_in_edges] = dag_to_jtree(bnet);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/fhmm_infer.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,324 @@
+function [loglik, gamma] = fhmm_infer(inter, CPTs_slice1, CPTs, obsmat, node_sizes)
+% FHMM_INFER Exact inference for a factorial HMM.
+% [loglik, gamma] = fhmm_infer(inter, CPTs_slice1, CPTs, obsmat, node_sizes)
+%
+% Inputs:
+% inter - the inter-slice adjacency matrix
+% CPTs_slice1{s}(j) = Pr(Q(s,1) = j) where Q(s,t) = hidden node s in slice t
+% CPT{s}(i1, i2, ..., j) = Pr(Q(s,t) = j | Pa(s,t-1) = i1, i2, ...),
+% obsmat(i,t) = Pr(y(t) | Q(t)=i)
+% node_sizes is a vector with the cardinality of the hidden nodes
+%
+% Outputs:
+% gamma(i,t) = Pr(X(t)=i | O(1:T)) as in an HMM,
+% except that i is interpreted as an M digit, base-K number (if there are M chains each of cardinality K).
+%
+%
+% For M chains each of cardinality K, the frontiers  (i.e., cliques)
+% contain M+1 nodes, and it takes M steps to advance the frontier by one time step,
+% so the run time is O(T M K^(M+1)).
+% An HMM takes O(T S^2) where S is the size of the state space.
+% Collapsing the FHMM to an HMM results in S = K^M.
+% For details, see
+%   "The Factored Frontier Algorithm for Approximate Inference in DBNs",
+%    Kevin Murphy and Yair Weiss, submitted to NIPS 2000.
+%
+% The frontier algorithm makes the following topological assumptions:
+% 
+%  - All nodes are persistent (connect to the next slice)
+%  - No connections within a timeslice
+%  - There is a single observation variable, which depends on all the hidden nodes
+%  - Each node can have several parents in the previous time slice (generalizes a FHMM slightly)
+%
+
+% The forwards pass of the frontier algorithm can be explained with the following example.
+% Suppose we have 3 hidden nodes per slice, A, B, C.
+% The goal is to compute alpha(j, t) = Pr( (A_t,B_t,C_t)=j | Y(1:t))
+% We move alpha from t to t+1 one node at a time, as follows.
+% We define the following quantities:
+% s([a1 b1 c1], 1) = Prob(A(t)=a1, B(t)=b1, C(t)=c1 | Y(1:t)) = alpha(j, t)
+% s([a2 b1 c1], 2) = Prob(A(t+1)=a2, B(t)=b1, C(t)=c1 | Y(1:t))
+% s([a2 b2 c1], 3) = Prob(A(t+1)=a2, B(t+1)=b2, C(t)=c1 | Y(1:t))
+% s([a2 b2 c2], 4) = Prob(A(t+1)=a2, B(t+1)=b2, C(t+1)=c2 | Y(1:t))
+% s([a2 b2 c2], 5) = Prob(A(t+1)=a2, B(t+1)=b2, C(t+1)=c2 | Y(1:t+1)) = alpha(j, t+1)
+%
+% These can be computed recursively as follows:
+%
+% s([a2 b1 c1], 2) = sum_{a1} P(a2|a1) s([a1 b1 c1], 1)
+% s([a2 b2 c1], 3) = sum_{b1} P(b2|b1) s([a2 b1 c1], 2)
+% s([a2 b2 c2], 4) = sum_{c1} P(c2|c1) s([a2 b2 c1], 1)
+% s([a2 b2 c2], 5) = normalise( s([a2 b2 c2], 4) .* P(Y(t+1)|a2,b2,c2)
+
+
+[kk,ll,mm] = make_frontier_indices(inter, node_sizes); % can pass in as args
+
+scaled = 1;
+
+M = length(node_sizes);
+S = prod(node_sizes);
+T = size(obsmat, 2);
+
+alpha = zeros(S, T);
+beta = zeros(S, T);
+gamma = zeros(S, T);
+scale = zeros(1,T);
+tiny = exp(-700);
+
+
+alpha(:,1) = make_prior_from_CPTs(CPTs_slice1, node_sizes);
+alpha(:,1) = alpha(:,1) .* obsmat(:, 1);
+
+if scaled
+  s = sum(alpha(:,1));
+  if s==0, s = s + tiny; end
+  scale(1) = 1/s;
+else
+  scale(1) = 1;
+end
+alpha(:,1) = alpha(:,1) * scale(1);
+
+%a = zeros(S, M+1);
+%b = zeros(S, M+1);
+anew = zeros(S,1);
+aold = zeros(S,1);
+bnew = zeros(S,1);
+bold = zeros(S,1);
+
+for t=2:T
+  %a(:,1) = alpha(:,t-1);
+  aold =  alpha(:,t-1);
+  
+  c = 1;
+  for i=1:M
+    ns = node_sizes(i);
+    cpt = CPTs{i};
+    for j=1:S
+      s = 0;
+      for xx=1:ns
+	%k = kk(xx,j,i);
+	%l = ll(xx,j,i);
+	k = kk(c);
+	l = ll(c);
+	c = c + 1;
+	% s = s + a(k,i) * CPTs{i}(l);
+	s = s + aold(k) * cpt(l);
+      end
+      %a(j,i+1) = s;
+      anew(j) = s;
+    end
+    aold = anew;
+  end
+  
+  %alpha(:,t) = a(:,M+1) .* obsmat(:, obs(t));
+  alpha(:,t) = anew .* obsmat(:, t);
+
+  if scaled
+    s = sum(alpha(:,t));
+    if s==0, s = s + tiny; end
+    scale(t) = 1/s;
+  else
+    scale(t) = 1;
+  end
+  alpha(:,t) = alpha(:,t) * scale(t);
+
+end
+
+
+beta(:,T) = ones(S,1) * scale(T);
+for t=T-1:-1:1
+  %b(:,1) = beta(:,t+1) .* obsmat(:, obs(t+1));
+  bold = beta(:,t+1) .* obsmat(:, t+1);
+
+  c = 1;
+  for i=1:M
+    ns = node_sizes(i);
+    cpt = CPTs{i};
+    for j=1:S
+      s = 0;
+      for xx=1:ns
+	%k = kk(xx,j,i);
+	%m = mm(xx,j,i);
+	k = kk(c);
+	m = mm(c);
+	c = c + 1;
+	% s = s + b(k,i) * CPTs{i}(m);
+	s = s + bold(k) * cpt(m);
+      end
+      %b(j,i+1) = s;
+      bnew(j) = s;
+    end
+    bold = bnew;
+  end
+  % beta(:,t) = b(:,M+1) * scale(t);
+  beta(:,t) = bnew * scale(t);
+end
+
+
+if scaled
+  loglik = -sum(log(scale)); % scale(i) is finite
+else
+  lik = alpha(:,1)' * beta(:,1);
+  loglik = log(lik+tiny);
+end
+
+for t=1:T
+  gamma(:,t) = normalise(alpha(:,t) .* beta(:,t));
+end
+
+%%%%%%%%%%%
+
+function [kk,ll,mm] = make_frontier_indices(inter, node_sizes)
+%
+% Precompute indices for use in the frontier algorithm.
+% These only depend on the topology, not the parameters or data.
+% Hence we can compute them outside of fhmm_infer.
+% This saves a lot of run-time computation.
+
+M = length(node_sizes);
+S = prod(node_sizes);
+
+mns = max(node_sizes);
+kk = zeros(mns, S, M);
+ll = zeros(mns, S, M);
+mm = zeros(mns, S, M);
+
+for i=1:M
+  for j=1:S
+    u = ind2subv(node_sizes, j);
+    x = u(i);
+    for xx=1:node_sizes(i)
+      uu = u;
+      uu(i) = xx;
+      k = subv2ind(node_sizes, uu);
+      kk(xx,j,i) = k;
+      ps = find(inter(:,i)==1);
+      ps = ps(:)';
+      l = subv2ind(node_sizes([ps i]), [uu(ps) x]); % sum over parent
+      ll(xx,j,i) = l;
+      m = subv2ind(node_sizes([ps i]), [u(ps) xx]); % sum over child
+      mm(xx,j,i) = m;
+    end
+  end
+end
+
+%%%%%%%%%
+
+function prior=make_prior_from_CPTs(indiv_priors, node_sizes)
+%
+% composite_prior=make_prior(individual_priors, node_sizes)
+% Make the prior for the first node in a Markov chain
+% from the priors on each node in the equivalent DBN.
+% prior{i}(j) = Pr(X_i=j), where X_i is the i'th node in slice 1.
+% composite_prior(i) = Pr(slice1 = i).
+
+n = length(indiv_priors);
+S = prod(node_sizes);
+prior = zeros(S,1);
+for i=1:S
+  vi = ind2subv(node_sizes, i);
+  p = 1;
+  for k=1:n
+    p = p * indiv_priors{k}(vi(k));
+  end
+  prior(i) = p;
+end
+
+
+
+%%%%%%%%%%%
+
+function [loglik, alpha, beta] = FHMM_slow(inter, CPTs_slice1, CPTs, obsmat, node_sizes, data)
+% 
+% Same as the above, except we don't use the optimization of computing the indices outside the loop.
+
+
+scaled = 1;
+
+M = length(node_sizes);
+S = prod(node_sizes);
+[numex T] = size(data);
+
+obs = data;
+
+alpha = zeros(S, T);
+beta = zeros(S, T);
+a = zeros(S, M+1);
+b = zeros(S, M+1);
+scale = zeros(1,T);
+
+alpha(:,1) = make_prior_from_CPTs(CPTs_slice1, node_sizes);
+alpha(:,1) = alpha(:,1) .* obsmat(:, obs(1));
+if scaled
+  s = sum(alpha(:,1));
+  if s==0, s = s + tiny; end
+  scale(1) = 1/s;
+else
+  scale(1) = 1;
+end
+alpha(:,1) = alpha(:,1) * scale(1);
+
+for t=2:T
+  fprintf(1, 't %d\n', t);
+  a(:,1) = alpha(:,t-1);
+  for i=1:M
+    for j=1:S
+      u = ind2subv(node_sizes, j);
+      xnew = u(i);
+      s = 0;
+      for xold=1:node_sizes(i)
+	uold = u;
+	uold(i) = xold;
+	k = subv2ind(node_sizes, uold);
+	ps = find(inter(:,i)==1);
+	ps = ps(:)';
+	l = subv2ind(node_sizes([ps i]), [uold(ps) xnew]);
+	s = s + a(k,i) * CPTs{i}(l);
+      end
+      a(j,i+1) = s;
+    end
+  end
+  alpha(:,t) = a(:,M+1) .* obsmat(:, obs(t));
+
+  if scaled
+    s = sum(alpha(:,t));
+    if s==0, s = s + tiny; end
+    scale(t) = 1/s;
+  else
+    scale(t) = 1;
+  end
+  alpha(:,t) = alpha(:,t) * scale(t);
+
+end
+
+
+beta(:,T) = ones(S,1) * scale(T);
+for t=T-1:-1:1
+  fprintf(1, 't %d\n', t);
+  b(:,1) = beta(:,t+1) .* obsmat(:, obs(t+1));
+  for i=1:M
+    for j=1:S
+      u = ind2subv(node_sizes, j);
+      xold = u(i);
+      s = 0;
+      for xnew=1:node_sizes(i)
+	unew = u;
+	unew(i) = xnew;
+	k = subv2ind(node_sizes, unew);
+	ps = find(inter(:,i)==1);
+	ps = ps(:)';
+	l = subv2ind(node_sizes([ps i]), [u(ps) xnew]);
+	s = s + b(k,i) * CPTs{i}(l);
+      end
+      b(j,i+1) = s;
+    end
+  end
+  beta(:,t) = b(:,M+1) * scale(t);
+end
+
+
+if scaled
+  loglik = -sum(log(scale)); % scale(i) is finite
+else
+  lik = alpha(:,1)' * beta(:,1);
+  loglik = log(lik+tiny);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/filter_test1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+% Compare online filtering algorithms on some DBNs
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+if 0
+  N = 3;
+  Q = 2;
+  obs_size = 1;
+  discrete_obs = 0;
+  bnet = mk_chmm(N, Q, obs_size, discrete_obs);
+else
+  %bnet = mk_bat_dbn;
+  bnet = mk_water_dbn;
+end
+
+T = 3;
+
+engine = {};
+engine{end+1} = filter_engine(hmm_2TBN_inf_engine(bnet));
+engine{end+1} = filter_engine(jtree_2TBN_inf_engine(bnet));
+
+time = cmp_online_inference(bnet, engine, T);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/ghmm1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+% Make an HMM with Gaussian observations
+%   X1 -> X2
+%   |     | 
+%   v     v
+%   Y1    Y2 
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+Q = 2; % num hidden states
+O = 2; % size of observed vector
+ns = [Q O];
+bnet = mk_dbn(intra, inter, ns, 'discrete', 1, 'observed', 2);
+
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+mu0 = rand(O,Q);
+Sigma0 = repmat(eye(O), [1 1 Q]);
+bnet.CPD{1} = tabular_CPD(bnet, 1, prior0);
+%% we set the cov prior to 0 to give same results as HMM toolbox
+%bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', mu0, 'cov', Sigma0, 'cov_prior_weight', 0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', mu0, 'cov', Sigma0);
+bnet.CPD{3} = tabular_CPD(bnet, 3, transmat0);
+
+
+T = 5; % fixed length sequences
+
+engine = {};
+engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet));
+engine{end+1} = hmm_inf_engine(bnet);
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T);
+%engine{end+1} = frontier_inf_engine(bnet);
+engine{end+1} = bk_inf_engine(bnet, 'clusters', {[1]});
+engine{end+1} = jtree_dbn_inf_engine(bnet);
+
+
+inf_time = cmp_inference_dbn(bnet, engine, T);
+
+ncases = 2;
+max_iter = 2;
+[learning_time, CPD, LL, cases] = cmp_learning_dbn(bnet, engine, T, 'ncases', ncases, 'max_iter', max_iter);
+
+% Compare to HMM toolbox
+
+data = zeros(O, T, ncases);
+for i=1:ncases
+  data(:,:,i) = cell2num(cases{i}(bnet.observed, :));  
+end
+
+tic
+[LL2, prior2, transmat2, mu2, Sigma2] = mhmm_em(data, prior0, transmat0, mu0, Sigma0, [],  'max_iter', max_iter);
+t=toc;
+disp(['HMM toolbox took ' num2str(t) ' seconds '])
+
+e = 1;
+assert(approxeq(prior2, CPD{e,1}.CPT))
+assert(approxeq(mu2, CPD{e,2}.mean))
+assert(approxeq(Sigma2, CPD{e,2}.cov))
+assert(approxeq(transmat2, CPD{e,3}.CPT))
+assert(approxeq(LL2, LL{e}))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/ho1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,156 @@
+function ho1()
+
+% Example of how to create a higher order DBN
+% Written by Rainer Deventer <deventer@informatik.uni-erlangen.de> 3/28/03
+
+bnet = createBNetNL();
+
+%%%%%%%%%%%%
+
+
+function bnet = createBNetNL(varargin)
+     % Generate a Bayesian network, which is able to model nonlinearities at
+% the input. The only input is the order of the dynamic system. If this 
+% parameter is missing, the an order of two is assumed
+if nargin > 0 
+    order = varargin{1}
+else
+    order = 2;
+end
+
+ss = 6; % For each time slice the following nodes are modeled
+        % ud(t_k) Discrete node, which decides whether saturation is reached.
+        %         Node number 2
+        % uv(t_k) Visible input node with node number  2
+        % uh(t_k) Hidden  input node with node number 3     
+        % y(t_k)  Modeled output, Number 4
+        % z(t_k)  Disturbing variable, number 5
+        % q(t_k), number6 6
+
+intra = zeros(ss,ss);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Within each timeslice ud(t_k) is connected with uv(t_k) and uh(t_k)    %
+% This part is used to model saturation                                  %
+% A connection from  uv(t_k) to uh(t_k) is omitted                       %
+% Additionally   y(t_k) is connected with q(t_k). To model the disturbing%
+% value z(t_k) is connected with q(t_k).                                 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+intra(1,2:3) = 1; % Connections ud(t_k) -> uv(t_k) and ud(t_k) -> uh(t_k)
+intra(4:5,6) = 1; % Connectios  y(t_k)  -> q(t_k)  and z(t_k)  -> q(t_k) 
+
+
+  
+inter = zeros(ss,ss,order);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The Markov assumption is not met as connections from time slice t to t+2 %
+% exist.                                                                   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+for i = 1:order
+    if i == 1
+        inter(1,1,i) = 1; %Connect the discrete nodes. This is necessary to improve
+                          %the disturbing reaction
+        inter(3,4,i) = 1; %Connect uh(t_{k-1}) with y(t_k)
+        inter(4,4,i) = 1; %Connect y(t_{k-1})  with y(t_k)    
+        inter(5,5,i) = 1; %Connect z(t_{k-1})  with z(t_k)
+    else
+        inter(3,4,i) = 1; %Connect uh(t_{k-i}) with y(t_k)
+        inter(4,4,i) = 1; %Connect  y(t_{k-i}) with y(t_k)
+    end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define the dimensions of the discrete nodes. Node 1 has two states     %
+% 1 = lower saturation reached                                           %
+% 2 = Upper saturation reached                                           %
+% Values in between are model by probabilities between 0 and 1           %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+node_sizes = ones(1,ss);
+node_sizes(1) = 2;
+dnodes = [1];
+
+eclass = [1:6;7 2:3 8 9 6;7 2:3 10 11 6];
+bnet = mk_higher_order_dbn(intra,inter,node_sizes,...
+                           'discrete',dnodes,...
+                           'eclass',eclass);
+
+cov_high = 400;
+cov_low  = 0.01;
+weight1 = randn(1,1);
+weight2 = randn(1,1);
+weight3 = randn(1,1);
+weight4 = randn(1,1);
+
+numOfNodes = 5 + order;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Nodes of the first time-slice   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Discrete input node, 
+bnet.CPD{1} = tabular_CPD(bnet,1,'CPT',[1/2 1/2],'adjustable',0);
+
+
+% Modeled visible input
+bnet.CPD{2} = gaussian_CPD(bnet,2,'mean',[0 10],'clamp_mean',1,...
+                            'cov',[10 10],'clamp_cov',1);
+
+% Modeled hidden input
+bnet.CPD{3} = gaussian_CPD(bnet,3,'mean',[0, 10],'clamp_mean',1,...
+			          'cov',[0.1 0.1],'clamp_cov',1);
+
+% Modeled output in the first timeslice, thus there are no parents
+% Usuallz the output nodes get a low covariance. But in the first
+% time-slice a prediction of the output is not possible due to 
+% missing information
+bnet.CPD{4} = gaussian_CPD(bnet,4,'mean',0,'clamp_mean',1,...
+			          'cov',cov_high,'clamp_cov',1);
+
+%Disturbance
+bnet.CPD{5} = gaussian_CPD(bnet,5,'mean',0,...
+                                  'cov',[4],...
+                                  'clamp_mean',1,...
+                                  'clamp_cov',1);
+
+%Observed output. 
+bnet.CPD{6} = gaussian_CPD(bnet,6,'mean',0,...
+                                  'clamp_mean',1,...
+                                  'cov',cov_low,'clamp_cov',1,...
+                                  'weights',[1 1],'clamp_weights',1);
+
+% Discrete node at second time slice
+bnet.CPD{7} = tabular_CPD(bnet,7,'CPT',[0.6 0.4 0.4 0.6],'adjustable',0);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Node for the model output %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+bnet.CPD{8} = gaussian_CPD(bnet,10,'mean',0,...
+				   'cov',cov_high,...
+				   'clamp_mean',1,...
+			           'clamp_cov',1);
+%                                   'weights',[0.0791 0.9578]);
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Node for the disturbance %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%                        
+bnet.CPD{9} = gaussian_CPD(bnet,11,'mean',0,'clamp_mean',1,...
+                                   'cov',[4],'clamp_cov',1,...
+                                   'weights',[1],'clamp_weights',1);
+                                   
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Node for the model output %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+bnet.CPD{10} = gaussian_CPD(bnet,16,'mean',0,'clamp_mean',1,...
+                                    'cov',cov_low,'clamp_cov',1);
+%                                   'weights',[0.0188 -0.0067 0.0791 0.9578]);
+
+
+
+    
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Node for the disturbance %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%                        
+bnet.CPD{11} = gaussian_CPD(bnet,17,'mean',0,'clamp_mean',1,...
+                                           'cov',[0.2],'clamp_cov',1,...
+                                           'weights',[1],'clamp_weights',1);
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/jtree_clq_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,150 @@
+% Construct various DBNs and examine their clique structure.
+% This was used to generate various figures in chap 3-4 of my thesis.
+
+% Examine the cliques in the unrolled mildew net
+
+%dbn = mk_mildew_dbn;
+dbn = mk_chmm(4);
+ss = dbn.nnodes_per_slice;
+T = 7;
+N = ss*T;
+bnet = dbn_to_bnet(dbn, T);
+
+constrained = 0;
+if constrained
+  stages = num2cell(unroll_set(1:ss, ss, T), 1);
+else
+  stages = { 1:N; };
+end
+clusters = {};
+%[jtree, root, cliques, B, w, elim_order, moral_edges, fill_in_edges] = ...
+%    dag_to_jtree(bnet, bnet.observed, stages, clusters);
+[jtree, root, cliques] =  graph_to_jtree(moralize(bnet.dag), ones(1,N), stages, clusters);
+
+flip=1;
+clf;[dummyx, dummyy, h] = draw_dbn(dbn.intra, dbn.inter, flip, T, -1);
+dir = '/home/eecs/murphyk/WP/Thesis/Figures/Inf/MildewUnrolled';
+mk_ps_from_clqs(dbn, T, cliques, [])
+%mk_collage_from_clqs(dir, cliques)
+
+
+% Examine the cliques in the cascade DBN
+
+% A-A
+%  \
+% B B
+%  \
+% C C
+%  \
+% D D
+ss = 4;
+intra = zeros(ss);
+inter = zeros(ss);
+inter(1, [1 2])=1;
+for i=2:ss-1
+  inter(i,i+1)=1;
+end
+
+
+% 2 coupled HMMs 1,3  and 2,4
+ss = 4;
+intra = zeros(ss);
+inter = zeros(ss); % no persistent edges
+%inter = diag(ones(ss,1)); % persitence edges
+inter(1,3)=1; inter(3,1)=1;
+inter(2,4)=1; inter(4,2)=1;
+
+%bnet = mk_fhmm(3);
+bnet = mk_chmm(4);
+intra = bnet.intra;
+inter = bnet.inter;
+
+clqs = compute_minimal_interface(intra, inter);
+celldisp(clqs)
+
+
+
+
+% A A
+%  \
+% B B
+%  \
+% C C
+%  \
+% D-D
+ss = 4;
+intra = zeros(ss);
+inter = zeros(ss);
+for i=1:ss-1
+  inter(i,i+1)=1;
+end
+inter(4,4)=1;
+
+
+
+ns = 2*ones(1,ss);
+dbn = mk_dbn(intra, inter, ns);
+for i=2*ss
+  dbn.CPD{i} = tabular_CPD(bnet, i);
+end
+
+T = 4;
+N = ss*T;
+bnet = dbn_to_bnet(dbn, T);
+
+constrained = 1;
+if constrained
+  % elim first 3 slices first in any order
+  stages = {1:12, 13:16};
+  %stages = num2cell(unroll_set(1:ss, ss, T), 1);
+else
+  stages = { 1:N; };
+end
+clusters = {};
+%[jtree, root, cliques, B, w, elim_order, moral_edges, fill_in_edges] = ...
+%    dag_to_jtree(bnet, bnet.observed, stages, clusters);
+[jtree, root, cliques] =  graph_to_jtree(moralize(bnet.dag), ones(1,N), stages, clusters);
+
+
+
+
+
+% Examine the cliques in the 1.5 slice DBN
+
+%dbn = mk_mildew_dbn;
+dbn = mk_water_dbn;
+%dbn = mk_bat_dbn;
+ss = dbn.nnodes_per_slice;
+int = compute_fwd_interface(dbn);
+bnet15 = mk_slice_and_half_dbn(dbn, int);
+N = length(bnet15.dag);
+stages = {1:N};
+
+% bat
+%cl1 = [16 17 19 7 14];
+%cl2 = [27 25 21 23 20];
+%clusters = {cl1, cl2, cl1+ss, cl2+ss};
+
+% water
+%cl1 = 1:2; cl2 = 3:6; cl3 = 7:8;
+%clusters = {cl1, cl2, cl3, cl1+ss, cl2+ss, cl3+ss};
+
+%clusters = {};
+clusters = {int, int+ss};
+%[jtree, root, cliques, B, w, elim_order, moral_edges, fill_in_edges] = ...
+%    dag_to_jtree(bnet15, bnet.observed, stages, clusters);
+[jtree, root, cliques] =  graph_to_jtree(moralize(bnet15.dag), ones(1,N), stages, clusters);
+
+clq_len = [];
+for c=1:length(cliques)
+  clq_len(c) = length(cliques{c});
+end
+hist(clq_len, 1:max(clq_len));
+h=hist(clq_len, 1:max(clq_len));
+axis([1 max(clq_len)+1 0 max(h)+1])
+xlabel('clique size','fontsize',16)
+ylabel('number','fontsize',16)
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/jtree_clq_test2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+
+%bnet = mk_uffe_dbn;
+bnet = mk_mildew_dbn;
+ss = length(bnet.intra);
+
+% construct jtree from 1.5 slice DBN
+
+int = compute_fwd_interface(bnet.intra, bnet.inter);
+bnet15 = mk_slice_and_half_dbn(bnet, int);
+
+% use unconstrained elimination,
+% but force there to be a clique containing both interfaces
+clusters = {int, int+ss};
+jtree_engine = jtree_inf_engine(bnet15, 'clusters', clusters, 'root', int+ss);
+S=struct(jtree_engine)
+in_clq = clq_containing_nodes(jtree_engine, int);
+out_clq = clq_containing_nodes(jtree_engine, int+ss)
+
+
+% Also make a jtree from slice 1
+bnet1 = mk_bnet(bnet.intra1, bnet.node_sizes_slice);
+jtree_engine1 = jtree_inf_engine(bnet1, 'clusters', {int}, 'root', int);
+S1=struct(jtree_engine1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/kalman1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+% Make a linear dynamical system
+%   X1 -> X2
+%   |     | 
+%   v     v
+%   Y1    Y2 
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+X = 2; % size of hidden state
+Y = 2; % size of observable state
+ns = [X Y];
+bnet = mk_dbn(intra, inter, ns, 'discrete', [], 'observed', 2);
+
+x0 = rand(X,1);
+V0 = eye(X);
+C0 = rand(Y,X);
+R0 = eye(Y);
+A0 = rand(X,X);
+Q0 = eye(X);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', x0, 'cov', V0, 'cov_prior_weight', 0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(Y,1), 'cov', R0, 'weights', C0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', zeros(X,1), 'cov', Q0, 'weights', A0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+
+
+T = 5; % fixed length sequences
+
+clear engine;
+engine{1} = kalman_inf_engine(bnet);
+engine{2} = jtree_unrolled_dbn_inf_engine(bnet, T);
+engine{3} = jtree_dbn_inf_engine(bnet);
+engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+N = length(engine);
+
+
+inf_time = cmp_inference_dbn(bnet, engine, T);
+
+ncases = 2;
+max_iter = 2;
+[learning_time, CPD, LL, cases] = cmp_learning_dbn(bnet, engine, T, 'ncases', ncases, 'max_iter', max_iter);
+
+
+% Compare to KF toolbox
+
+data = zeros(Y, T, ncases);
+for i=1:ncases
+  data(:,:,i) = cell2num(cases{i}(onodes, :));
+end   
+[A2, C2, Q2, R2, x2, V2, LL2trace] =  learn_kalman(data, A0, C0, Q0, R0, x0, V0, max_iter);
+
+
+e = 1;
+assert(approxeq(x2, CPD{e,1}.mean))
+assert(approxeq(V2, CPD{e,1}.cov))
+assert(approxeq(C2, CPD{e,2}.weights))
+assert(approxeq(R2, CPD{e,2}.cov));
+assert(approxeq(A2, CPD{e,3}.weights))
+assert(approxeq(Q2, CPD{e,3}.cov));
+assert(approxeq(LL2trace, LL{1}))
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/kjaerulff1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+% Compare the speeds of various inference engines on the DBN in Kjaerulff
+% "dHugin: A computational system for dynamic time-sliced {B}ayesian networks",
+% Intl. J. Forecasting 11:89-111, 1995.
+%
+% The intra structure is (all arcs point downwards)
+%
+%  1 -> 2
+%   \  /
+%     3
+%     |
+%     4
+%    / \
+%   5   6
+%   \  /
+%     7
+%     |
+%     8
+%
+% The inter structure is 1->1, 4->4, 8->8
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+ss = 8;
+intra = zeros(ss);
+intra(1,[2 3])=1;
+intra(2,3)=1;
+intra(3,4)=1;
+intra(4,[5 6])=1;
+intra([5 6], 7)=1;
+intra(7,8)=1;
+
+inter = zeros(ss);
+inter(1,1)=1;
+inter(4,4)=1;
+inter(8,8)=1;
+
+ns = 2*ones(1,ss);
+onodes = 2;
+bnet = mk_dbn(intra, inter, ns, 'observed', onodes, 'eclass2', (1:ss)+ss);
+for i=1:2*ss
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+T = 4;
+
+engine = {};
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T);
+engine{end+1} = jtree_dbn_inf_engine(bnet);
+engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+%engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet)); % observed nodes have children
+
+inf_time = cmp_inference_dbn(bnet, engine, T)
+learning_time = cmp_learning_dbn(bnet, engine, T)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/loopy_dbn1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+N = 1; % single chain = HMM - should give exact answers
+Q = 2;
+rand('state', 0);
+randn('state', 0);
+discrete = 1;
+if discrete
+  Y = 2; % size of output alphabet
+else
+  Y = 1;
+end
+coupled = 1;
+bnet  = mk_chmm(N, Q, Y, discrete, coupled);
+ss = N*2;
+
+T = 3;
+
+engine = {};
+engine{end+1} = jtree_dbn_inf_engine(bnet); 
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T); 
+engine{end+1} = pearl_unrolled_dbn_inf_engine(bnet, 'protocol', 'tree');  
+
+inf_time = cmp_inference_dbn(bnet, engine, T)
+learning_time = cmp_learning_dbn(bnet, engine, T)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mhmm1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,85 @@
+% Make an HMM with mixture of Gaussian observations
+%    Q1 ---> Q2
+%  /  |   /  |
+% M1  |  M2  | 
+%  \  v   \  v
+%    Y1     Y2 
+% where Pr(m=j|q=i) is a multinomial and Pr(y|m,q) is a Gaussian     
+
+%seed = 3;
+%rand('state', seed);
+%randn('state', seed);
+
+intra = zeros(3);
+intra(1,[2 3]) = 1;
+intra(2,3) = 1;
+inter = zeros(3);
+inter(1,1) = 1;
+n = 3;
+
+Q = 2; % num hidden states
+O = 2; % size of observed vector
+M = 2; % num mixture components per state
+
+ns = [Q M O];
+dnodes = [1 2];
+onodes = [3];
+eclass1 = [1 2 3];
+eclass2 = [4 2 3];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2, ...
+	      'observed', onodes);
+
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+mixmat0 = mk_stochastic(rand(Q,M));
+mu0 = rand(O,Q,M);
+Sigma0 = repmat(eye(O), [1 1 Q M]);
+bnet.CPD{1} = tabular_CPD(bnet, 1, prior0);
+bnet.CPD{2} = tabular_CPD(bnet, 2, mixmat0);
+%% we set the cov prior to 0 to give same results as HMM toolbox
+%bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', mu0, 'cov', Sigma0, 'cov_prior_weight', 0);
+% new version of HMM toolbox uses the same default prior on Gaussians as BNT
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', mu0, 'cov', Sigma0);
+bnet.CPD{4} = tabular_CPD(bnet, 4, transmat0);
+
+
+
+T = 5; % fixed length sequences
+
+engine = {};
+engine{end+1} = hmm_inf_engine(bnet);
+engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet));
+if 0
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T);
+%engine{end+1} = frontier_inf_engine(bnet);
+engine{end+1} = bk_inf_engine(bnet, 'clusters', 'exact');
+engine{end+1} = jtree_dbn_inf_engine(bnet);
+end
+
+inf_time = cmp_inference_dbn(bnet, engine, T);
+
+ncases = 2;
+max_iter = 2;
+[learning_time, CPD, LL, cases] = cmp_learning_dbn(bnet, engine, T, 'ncases', ncases, 'max_iter', max_iter);
+
+% Compare to HMM toolbox
+
+data = zeros(O, T, ncases);
+for i=1:ncases
+  data(:,:,i) = reshape(cell2num(cases{i}(onodes,:)), [O T]);
+end
+tic;
+[LL2, prior2, transmat2, mu2, Sigma2, mixmat2] = ...
+    mhmm_em(data, prior0, transmat0,  mu0, Sigma0, mixmat0, 'max_iter', max_iter);
+t=toc;
+disp(['HMM toolbox took ' num2str(t) ' seconds '])
+
+for e = 1:length(engine)
+  assert(approxeq(prior2, CPD{e,1}.CPT))
+  assert(approxeq(mixmat2, CPD{e,2}.CPT))
+  assert(approxeq(mu2, CPD{e,3}.mean))
+  assert(approxeq(Sigma2, CPD{e,3}.cov))
+  assert(approxeq(transmat2, CPD{e,4}.CPT))
+  assert(approxeq(LL2, LL{e}))
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mildew1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+bnet = mk_mildew_dbn;
+
+T = 4;
+engine = {};
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T);
+engine{end+1} = jtree_dbn_inf_engine(bnet); 
+%engine{end+1} = hmm_inf_engine(bnet); % 8 is observed but has kids
+engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+%engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet));
+
+inf_time = cmp_inference_dbn(bnet, engine, T, 'check_ll', 0)
+%learning_time = cmp_learning_dbn(bnet, engine, T)
+
+S = struct(engine{1});
+S1 = struct(S.unrolled_engine);
+G = S1.jtree;
+%graph_to_dot(G, 'directed', 0, 'leftright', 1, ...
+%	     'filename', '/home/eecs/murphyk/WP/Thesis/Figures/Inf/Mildew/jtree.dot')
+%!dot -Tps jtree.dot -o jtree.ps
+% The resulting ps file cannot be converted using ps2pdf.
+
+N = length(G);
+for i=1:N
+  for j=1:N
+    if G(i,j)
+      G(j,i)=1;
+    end
+  end
+end
+draw_graph(G)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_bat_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,63 @@
+function [bnet, names] = mk_bat_dbn()
+% MK_BAT_DBN Make the BAT DBN
+% [bnet, names] = mk_bat_dbn()
+% See
+% - Forbes, Huang, Kanazawa and Russell, "The BATmobile: Towards a Bayesian Automated Taxi", IJCAI 95
+% - Boyen and Koller, "Tractable Inference for Complex Stochastic Processes", UAI98.
+
+names = {'LeftClr', 'RightClr', 'LatAct', 'Xdot', 'InLane', 'FwdAct', ...
+      'Ydot', 'Stopped', 'EngStatus', 'FBStatus', ...
+      'LeftClrSens', 'RightClrSens', 'TurnSignalSens', 'XdotSens', 'YdotSens', ...
+      'FYdotDiffSens', 'FclrSens', 'BXdotSens', 'BclrSens', 'BYdotDiffSens', ...
+      'SensorValid', 'FYdotDiff', 'FcloseSlow', 'Fclr', 'BXdot', 'BcloseFast', 'Bclr', 'BYdotDiff'};
+ss = length(names);
+
+intrac = {...
+      'LeftClr', 'LeftClrSens';
+  'RightClr', 'RightClrSens';
+  'LatAct', 'TurnSignalSens'; 'LatAct', 'Xdot';
+  'Xdot', 'XdotSens';
+  'FwdAct', 'Ydot';
+  'Ydot', 'YdotSens'; 'Ydot', 'Stopped';
+  'EngStatus', 'Ydot'; 'EngStatus', 'FYdotDiff'; 'EngStatus', 'Fclr'; 'EngStatus', 'BXdot';
+  'SensorValid', 'XdotSens';   'SensorValid', 'YdotSens';
+  'FYdotDiff', 'FYdotDiffSens'; 'FYdotDiff', 'FcloseSlow';
+  'FcloseSlow', 'FBStatus';
+  'Fclr', 'FclrSens'; 'Fclr', 'FcloseSlow';
+  'BXdot', 'BXdotSens';
+  'Bclr', 'BclrSens'; 'Bclr', 'BXdot'; 'Bclr', 'BcloseFast';
+  'BcloseFast', 'FBStatus';
+  'BYdotDiff', 'BYdotDiffSens'; 'BYdotDiff', 'BcloseFast'};
+[intra, names] = mk_adj_mat(intrac, names, 1);
+
+
+interc = {...
+      'LeftClr', 'LeftClr'; 'LeftClr', 'LatAct';
+  'RightClr', 'RightClr'; 'RightClr', 'LatAct';
+  'LatAct', 'LatAct'; 'LatAct', 'FwdAct';
+  'Xdot', 'Xdot'; 'Xdot', 'InLane';
+  'InLane', 'InLane'; 'InLane', 'LatAct';
+  'FwdAct', 'FwdAct';
+  'Ydot', 'Ydot';
+  'Stopped', 'Stopped';
+  'EngStatus', 'EngStatus';
+  'FBStatus', 'FwdAct'; 'FBStatus', 'LatAct'};
+inter = mk_adj_mat(interc, names, 0);  
+
+obs = {'LeftClrSens', 'RightClrSens', 'TurnSignalSens', 'XdotSens', 'YdotSens', 'FYdotDiffSens', ...
+      'FclrSens', 'BXdotSens', 'BclrSens', 'BYdotDiffSens'};
+
+for i=1:length(obs)
+  onodes(i) = strmatch(obs{i}, names); %stringmatch(obs{i}, names);
+end
+onodes = sort(onodes);
+
+dnodes = 1:ss; 
+ns = 2*ones(1,ss); % binary nodes
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'observed', onodes, 'eclass2', (1:ss)+ss);
+
+% make rnd params
+for i=1:2*ss
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_chmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,103 @@
+function bnet = mk_chmm(N, Q, Y, discrete_obs, coupled, CPD)
+% MK_CHMM Make a coupled Hidden Markov Model
+%
+% There are N hidden nodes, each connected to itself and its two nearest neighbors in the next
+% slice (apart from the edges, where there is 1 nearest neighbor).
+%
+% Example: If N = 3, the hidden backbone is as follows, where all arrows point to the righ+t
+%
+% X1--X2
+%   \/ 
+%   /\
+% X2--X2
+%   \/ 
+%   /\
+% X3--X3
+%
+% Each hidden node has a "private" observed child (not shown).
+%
+% BNET = MK_CHMM(N, Q, Y)
+% Each hidden node is discrete and has Q values.
+% Each observed node is a Gaussian vector of length Y.
+%
+% BNET = MK_CHMM(N, Q, Y, DISCRETE_OBS)
+% If discrete_obs = 1, the observations are discrete (values in {1, .., Y}).
+%
+% BNET = MK_CHMM(N, Q, Y, DISCRETE_OBS, COUPLED)
+% If coupled = 0, the chains are not coupled, i.e., we make N parallel HMMs.
+%
+% BNET = MK_CHMM(N, Q, Y, DISCRETE_OBS, COUPLED, CPDs)
+% means use the specified CPD structures instead of creating random params.
+%  CPD{i}.CPT, i=1:N specifies the prior
+%  CPD{i}.CPT, i=2N+1:3N specifies the transition model
+%  CPD{i}.mean, CPD{i}.cov, i=N+1:2N specifies the observation model if Gaussian
+%  CPD{i}.CPT, i=N+1:2N if discrete
+
+
+if nargin < 2, Q = 2; end
+if nargin < 3, Y = 1; end
+if nargin < 4, discrete_obs = 0; end
+if nargin < 5, coupled = 1; end
+if nargin < 6, rnd = 1; else rnd = 0; end
+  
+ss = N*2;
+hnodes = 1:N;
+onodes = (1:N)+N;
+
+intra = zeros(ss);
+for i=1:N
+  intra(hnodes(i), onodes(i))=1;
+end
+
+inter = zeros(ss);
+if coupled
+  for i=1:N
+    inter(i, max(i-1,1):min(i+1,N))=1;
+  end
+else
+  inter(1:N, 1:N) = eye(N);
+end  
+
+ns = [Q*ones(1,N) Y*ones(1,N)]; 
+
+eclass1 = [hnodes onodes];
+eclass2 = [hnodes+ss onodes];
+if discrete_obs
+  dnodes = 1:ss;
+else
+  dnodes = hnodes;
+end
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2, ...
+	      'observed', onodes);
+
+if rnd
+  for i=hnodes(:)'
+    bnet.CPD{i} = tabular_CPD(bnet, i);
+  end
+  for i=onodes(:)'
+    if discrete_obs
+      bnet.CPD{i} = tabular_CPD(bnet, i);
+    else
+      bnet.CPD{i} = gaussian_CPD(bnet, i);
+    end
+  end
+  for i=hnodes(:)'+ss
+    bnet.CPD{i} = tabular_CPD(bnet, i);
+  end
+else
+  for i=hnodes(:)'
+    bnet.CPD{i} = tabular_CPD(bnet, i, CPD{i}.CPT);
+  end
+  for i=onodes(:)'
+    if discrete_obs
+      bnet.CPD{i} = tabular_CPD(bnet, i, CPD{i}.CPT);
+    else
+      bnet.CPD{i} = gaussian_CPD(bnet, i, CPD{i}.mean, CPD{i}.cov);
+    end
+  end
+  for i=hnodes(:)'+ss
+    bnet.CPD{i} = tabular_CPD(bnet, i, CPD{i}.CPT);
+  end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_collage_from_clqs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function mk_collage_from_clqs(dir, cliques)
+
+% For use with mk_ps_from_clqs.
+% This generates a latex file that glues all the .ps files
+% into one big figure.
+
+cd(dir)
+C = length(cliques);
+
+ncols = 4;
+width = 1.5;
+fid = fopen('collage.tex', 'w');
+fprintf(fid, '\\documentclass{article}\n');
+fprintf(fid, '\\usepackage{psfig}\n');
+fprintf(fid, '\\begin{document}\n');
+fprintf(fid, '\\centerline{\n');
+fprintf(fid, '\\begin{tabular}{');
+for col=1:ncols,  fprintf(fid, 'c'); end
+fprintf(fid, '}\n');
+c = 1;
+for row = 1:floor(C/ncols)
+  for col=1:ncols-1
+    fname = sprintf('%s/clq%d.ps', dir, c);
+    fprintf(fid, '\\psfig{file=%s,width=%3fin} & \n', fname, width);
+    c = c + 1;
+  end
+  fname = sprintf('%s/clq%d.ps', dir, c);
+  fprintf(fid, '\\psfig{file=%s,width=%3fin} \\\\ \n', fname, width);
+  c = c + 1;
+end
+% last row
+while (c <= C)
+  fname = sprintf('%s/clq%d.ps', dir, c);
+  fprintf(fid, '\\psfig{file=%s,width=%3fin} & \n', fname, width);
+  c = c + 1;
+end
+fprintf(fid, '\\end{tabular}\n');
+fprintf(fid, '}\n');
+fprintf(fid, '\\end{document}');
+fclose(fid);
+
+!latex collage.tex &
+!dvips -o collage.ps collage.dvi &
+!ghostview collage.ps &
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_fhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+function bnet = mk_fhmm(N, Q, Y, discrete_obs)
+% MK_FHMM Make a factorial Hidden Markov Model
+%
+% There are N independent parallel hidden chains, each connected to the output
+%
+% e.g., N = 2 (vertical/diagonal edges point down)
+%
+% A1--->A2
+% | B1--|->B2
+% | /   |/
+% Y1    Y2
+%
+% [bnet, onode] = mk_chmm(n, q, y, discrete_obs)
+%
+% Each hidden node is discrete and has Q values.
+% If discrete_obs = 1, each observed node is discrete and has values 1..Y.
+% If discrete_obs = 0, each observed node is a Gaussian vector of length Y.
+
+if nargin < 2, Q = 2; end
+if nargin < 3, Y = 2; end
+if nargin < 4, discrete_obs = 1; end
+
+ss = N+1;
+hnodes = 1:N;
+onode = N+1;
+
+intra = zeros(ss);
+intra(hnodes, onode) = 1;
+
+inter = eye(ss);
+inter(onode,onode) = 0;
+
+ns = [Q*ones(1,N) Y];
+
+eclass1 = [hnodes onode];
+eclass2 = [hnodes+ss onode];
+if discrete_obs
+  dnodes = 1:ss;
+else
+  dnodes = hnodes;
+end
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2, ...
+	      'observed', onode);
+
+for i=hnodes(:)'
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+i = onode;
+if discrete_obs
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+else
+  bnet.CPD{i} = gaussian_CPD(bnet, i);
+end
+for i=hnodes(:)'+ss
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_mildew_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function bnet = mk_mildew_dbn()
+
+% DBN for foreacasting the gross yield of wheat based on climatic data,
+% observations of leaf area index (LAI) and extension of mildew,
+% and knowledge of amount of fungicides used and time of usage.
+% From Kjaerulff '95.
+
+Fungi=1; Mildew=2; LAI=3; Precip=4; Temp=5; Micro=6; Solar=7; Photo=8; Dry=9;
+n = 9;
+intra = zeros(n,n);
+intra(Mildew, LAI)=1;
+intra(LAI,[Micro Photo])=1;
+intra(Precip,Micro)=1;
+intra(Temp,[Micro Photo])=1;
+intra(Solar,Photo)=1;
+intra(Photo,Dry)=1;
+
+inter = zeros(n,n);
+inter(Fungi,Mildew)=1;
+inter(Mildew,Mildew)=1;
+inter(LAI,LAI)=1;
+inter(Micro,Mildew)=1;
+inter(Dry,Dry)=1;
+
+ns = 2*ones(1,n);
+bnet = mk_dbn(intra, inter, ns, 'observed', [Photo]);
+
+for e=1:max(bnet.equiv_class(:))
+  i = bnet.rep_of_eclass(e);
+  bnet.CPD{e} = tabular_CPD(bnet,i);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_orig_bat_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,198 @@
+function [bnet, names] = mk_orig_bat_dbn()
+% MK_BAT_DBN Make the BAT DBN
+% [bnet, names] = mk_bat_dbn()
+% See
+% - Forbes, Huang, Kanazawa and Russell, "The BATmobile: Towards a Bayesian Automated Taxi", IJCAI 95
+% - Boyen and Koller, "Tractable Inference for Complex Stochastic Processes", UAI98.
+
+names = {'LeftClr', 'RightClr', 'LatAct', 'Xdot', 'InLane', 'FwdAct', ...
+      'Ydot', 'Stopped', 'EngStatus', 'FBStatus', ...
+      'LeftClrSens', 'RightClrSens', 'TurnSignalSens', 'XdotSens', 'YdotSens', ...
+      'FYdotDiffSens', 'FclrSens', 'BXdotSens', 'BclrSens', 'BYdotDiffSens', ...
+      'SensorValid', 'FYdotDiff', 'FcloseSlow', 'Fclr', 'BXdot', 'BcloseFast', 'Bclr', 'BYdotDiff'};
+ss = length(names);
+
+intrac = {...
+      'LeftClr', 'LeftClrSens';
+  'RightClr', 'RightClrSens';
+  'LatAct', 'TurnSignalSens'; 'LatAct', 'Xdot';
+  'Xdot', 'XdotSens';
+  'FwdAct', 'Ydot';
+  'Ydot', 'YdotSens'; 'Ydot', 'Stopped';
+  'EngStatus', 'Ydot'; 'EngStatus', 'FYdotDiff'; 'EngStatus', 'Fclr'; 'EngStatus', 'BXdot';
+  'SensorValid', 'XdotSens';   'SensorValid', 'YdotSens';
+  'FYdotDiff', 'FYdotDiffSens'; 'FYdotDiff', 'FcloseSlow';
+  'FcloseSlow', 'FBStatus';
+  'Fclr', 'FclrSens'; 'Fclr', 'FcloseSlow';
+  'BXdot', 'BXdotSens';
+  'Bclr', 'BclrSens'; 'Bclr', 'BXdot'; 'Bclr', 'BcloseFast';
+  'BcloseFast', 'FBStatus';
+  'BYdotDiff', 'BYdotDiffSens'; 'BYdotDiff', 'BcloseFast'};
+[intra, names] = mk_adj_mat(intrac, names, 1);
+
+
+interc = {...
+      'LeftClr', 'LeftClr'; 'LeftClr', 'LatAct';
+  'RightClr', 'RightClr'; 'RightClr', 'LatAct';
+  'LatAct', 'LatAct'; 'LatAct', 'FwdAct';
+  'Xdot', 'Xdot'; 'Xdot', 'InLane';
+  'InLane', 'InLane'; 'InLane', 'LatAct';
+  'FwdAct', 'FwdAct';
+  'Ydot', 'Ydot';
+  'Stopped', 'Stopped';
+  'EngStatus', 'EngStatus';
+  'FBStatus', 'FwdAct'; 'FBStatus', 'LatAct'};
+inter = mk_adj_mat(interc, names, 0);  
+
+obs = {'LeftClrSens', 'RightClrSens', 'TurnSignalSens', 'XdotSens', 'YdotSens', 'FYdotDiffSens', ...
+      'FclrSens', 'BXdotSens', 'BclrSens', 'BYdotDiffSens'};
+
+for i=1:length(obs)
+  onodes(i) = stringmatch(obs{i}, names);
+end
+onodes = sort(onodes);
+
+dnodes = 1:ss; 
+ns = zeros(1,ss);
+
+ns(stringmatch('LeftClr', names)) = 2;
+ns(stringmatch('RightClr', names)) = 2;
+ns(stringmatch('LatAct', names)) = 3;
+ns(stringmatch('Xdot', names)) = 7;
+ns(stringmatch('InLane', names)) = 2;
+ns(stringmatch('FwdAct', names)) = 3;
+ns(stringmatch('Ydot', names)) = 11;
+ns(stringmatch('Stopped', names)) = 2;
+ns(stringmatch('EngStatus', names)) = 2;
+ns(stringmatch('FBStatus', names)) = 3;
+ns(stringmatch('LeftClrSens', names)) = 2;
+ns(stringmatch('RightClrSens', names)) = 2;
+ns(stringmatch('TurnSignalSens', names)) = 3;
+ns(stringmatch('XdotSens', names)) = 7;
+ns(stringmatch('YdotSens', names)) = 11;
+ns(stringmatch('FYdotDiffSens', names)) = 8;
+ns(stringmatch('FclrSens', names)) = 20;
+ns(stringmatch('BXdotSens', names)) = 8;
+ns(stringmatch('BclrSens', names)) = 20;
+ns(stringmatch('BYdotDiffSens', names)) = 8;
+ns(stringmatch('SensorValid', names)) = 2;
+ns(stringmatch('FYdotDiff', names)) = 4;
+ns(stringmatch('FcloseSlow', names)) = 2;
+ns(stringmatch('Fclr', names)) = 3;
+ns(stringmatch('BXdot', names)) = 8;
+ns(stringmatch('BcloseFast', names)) = 2;
+ns(stringmatch('Bclr', names)) = 3;
+ns(stringmatch('BYdotDiff', names)) = 4;
+
+%ns = 2*ones(1,ss);
+
+
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'observed', onodes, 'eclass2', (1:ss)+ss);
+
+% make unif params
+for i=1:2*ss
+  bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', 'unif');
+end
+
+i = stringmatch('LeftClr', names)+ss;
+bnet.CPD{i} = tabular_CPD(bnet, i, [0.99 0.01 0.01 0.99]);
+
+i = stringmatch('RightClr', names)+ss;
+bnet.CPD{i} = tabular_CPD(bnet, i, [0.99 0.01 0.01 0.99]);
+
+i = stringmatch('LatAct', names)+ss;
+bnet.CPD{i} = tabular_CPD(bnet, i, [0.166666666666667 0.975609756097561 0.111111111111111 0.961538461538462 0.00980392156862745 0.0380952380952381 0.00952380952380952 0.037037037037037 0.166666666666667 0.444444444444444 0.0048780487804878 0.0192307692307692 0.0384615384615385 0.888888888888889 0.0344827586206897 0.87719298245614 0.00819672131147541 0.032 0.008 0.03125 0.0384615384615385 0.137931034482759 0.00444444444444444 0.0175438596491228 0.166666666666667 0.975609756097561 0.111111111111111 0.961538461538462 0.166666666666667 0.8 0.04 0.454545454545455 0.166666666666667 0.444444444444444 0.0048780487804878 0.0192307692307692 0.0384615384615385 0.888888888888889 0.0344827586206897 0.87719298245614 0.0384615384615385 0.444444444444444 0.0222222222222222 0.3125 0.0384615384615385 0.137931034482759 0.00444444444444444 0.0175438596491228 0.166666666666667 0.975609756097561 0.111111111111111 0.961538461538462 0.166666666666667 0.8 0.04 0.454545454545455 0.166666666666667 0.444444444444444 0.0048780487804878 0.0192307692307692 0.0384615384615385 0.888888888888889 0.0344827586206897 0.87719298245614 0.0384615384615385 0.444444444444444 0.0222222222222222 0.3125 0.0384615384615385 0.137931034482759 0.00444444444444444 0.0175438596491228 0.666666666666667 0.0195121951219512 0.444444444444444 0.0192307692307692 0.980392156862745 0.952380952380952 0.952380952380952 0.925925925925926 0.666666666666667 0.444444444444444 0.0195121951219512 0.0192307692307692 0.923076923076923 0.106666666666667 0.827586206896552 0.105263157894737 0.983606557377049 0.96 0.96 0.9375 0.923076923076923 0.827586206896552 0.106666666666667 0.105263157894737 0.666666666666667 0.0195121951219512 0.444444444444444 0.0192307692307692 0.666666666666667 0.16 0.16 0.0909090909090909 0.666666666666667 0.444444444444444 0.0195121951219512 0.0192307692307692 0.923076923076923 0.106666666666667 0.827586206896552 0.105263157894737 0.923076923076923 0.533333333333333 0.533333333333333 0.375 0.923076923076923 0.827586206896552 0.106666666666667 0.105263157894737 0.666666666666667 0.0195121951219512 0.444444444444444 0.0192307692307692 0.666666666666667 0.16 0.16 0.0909090909090909 0.666666666666667 0.444444444444444 0.0195121951219512 0.0192307692307692 0.923076923076923 0.106666666666667 0.827586206896552 0.105263157894737 0.923076923076923 0.533333333333333 0.533333333333333 0.375 0.923076923076923 0.827586206896552 0.106666666666667 0.105263157894737 0.166666666666667 0.0048780487804878 0.444444444444444 0.0192307692307692 0.00980392156862745 0.00952380952380952 0.0380952380952381 0.037037037037037 0.166666666666667 0.111111111111111 0.975609756097561 0.961538461538462 0.0384615384615385 0.00444444444444444 0.137931034482759 0.0175438596491228 0.00819672131147541 0.008 0.032 0.03125 0.0384615384615385 0.0344827586206897 0.888888888888889 0.87719298245614 0.166666666666667 0.0048780487804878 0.444444444444444 0.0192307692307692 0.166666666666667 0.04 0.8 0.454545454545455 0.166666666666667 0.111111111111111 0.975609756097561 0.961538461538462 0.0384615384615385 0.00444444444444444 0.137931034482759 0.0175438596491228 0.0384615384615385 0.0222222222222222 0.444444444444444 0.3125 0.0384615384615385 0.0344827586206897 0.888888888888889 0.87719298245614 0.166666666666667 0.0048780487804878 0.444444444444444 0.0192307692307692 0.166666666666667 0.04 0.8 0.454545454545455 0.166666666666667 0.111111111111111 0.975609756097561 0.961538461538462 0.0384615384615385 0.00444444444444444 0.137931034482759 0.0175438596491228 0.0384615384615385 0.0222222222222222 0.444444444444444 0.3125 0.0384615384615385 0.0344827586206897 0.888888888888889 0.87719298245614]);
+
+i = stringmatch('Xdot', names)+ss;
+bnet.CPD{i} = tabular_CPD(bnet, i, [0.497512437810945 0.115207373271889 0.0564971751412429 0.0290697674418605 0.075187969924812 0.0300751879699248 0.0298507462686567 0.0980392156862745 0.0392156862745098 0.043956043956044 0.0294117647058824 0.0283687943262411 0.0392156862745098 0.0392156862745098 0.0373134328358209 0.0300751879699248 0.0300751879699248 0.0232558139534884 0.0225988700564972 0.0184331797235023 0.0199004975124378 0.373134328358209 0.460829493087558 0.282485875706215 0.290697674418605 0.37593984962406 0.075187969924812 0.0373134328358209 0.490196078431373 0.0980392156862745 0.043956043956044 0.0294117647058824 0.0283687943262411 0.0392156862745098 0.0392156862745098 0.0746268656716418 0.037593984962406 0.0300751879699248 0.0232558139534884 0.0225988700564972 0.0184331797235023 0.0199004975124378 0.0497512437810945 0.345622119815668 0.564971751412429 0.581395348837209 0.37593984962406 0.37593984962406 0.0746268656716418 0.245098039215686 0.490196078431373 0.21978021978022 0.0735294117647059 0.0354609929078014 0.0490196078431373 0.0392156862745098 0.373134328358209 0.075187969924812 0.037593984962406 0.0232558139534884 0.0225988700564972 0.0184331797235023 0.0199004975124378 0.0199004975124378 0.0230414746543779 0.0282485875706215 0.0290697674418605 0.075187969924812 0.37593984962406 0.373134328358209 0.0490196078431373 0.245098039215686 0.54945054945055 0.735294117647059 0.709219858156028 0.245098039215686 0.0490196078431373 0.373134328358209 0.37593984962406 0.075187969924812 0.0290697674418605 0.0282485875706215 0.0230414746543779 0.0199004975124378 0.0199004975124378 0.0184331797235023 0.0225988700564972 0.0232558139534884 0.037593984962406 0.075187969924812 0.373134328358209 0.0392156862745098 0.0490196078431373 0.0549450549450549 0.0735294117647059 0.141843971631206 0.490196078431373 0.245098039215686 0.0746268656716418 0.37593984962406 0.37593984962406 0.581395348837209 0.564971751412429 0.345622119815668 0.0497512437810945 0.0199004975124378 0.0184331797235023 0.0225988700564972 0.0232558139534884 0.0300751879699248 0.037593984962406 0.0746268656716418 0.0392156862745098 0.0392156862745098 0.043956043956044 0.0294117647058824 0.0283687943262411 0.0980392156862745 0.490196078431373 0.0373134328358209 0.075187969924812 0.37593984962406 0.290697674418605 0.282485875706215 0.460829493087558 0.373134328358209 0.0199004975124378 0.0184331797235023 0.0225988700564972 0.0232558139534884 0.0300751879699248 0.0300751879699248 0.0373134328358209 0.0392156862745098 0.0392156862745098 0.043956043956044 0.0294117647058824 0.0283687943262411 0.0392156862745098 0.0980392156862745 0.0298507462686567 0.0300751879699248 0.075187969924812 0.0290697674418605 0.0564971751412429 0.115207373271889 0.497512437810945]);
+
+i = stringmatch('InLane', names)+ss;
+bnet.CPD{i} = tabular_CPD(bnet, i, [0.5 0.3 0.5 0.3 0.5 0.3 0.9 0.01 0.5 0.3 0.5 0.3 0.5 0.3 0.5 0.7 0.5 0.7 0.5 0.7 0.1 0.99 0.5 0.7 0.5 0.7 0.5 0.7]);
+
+i = stringmatch('FwdAct', names)+ss;
+bnet.CPD{i} = tabular_CPD(bnet, i, [0.4 0.4 0.4 0.949050949050949 0.949050949050949 0.949050949050949 0.4 0.4 0.4 0.6 0.1 0.1 0.949050949050949 0.949050949050949 0.949050949050949 0.05 0.05 0.05 0.4 0.4 0.4 0.949050949050949 0.949050949050949 0.949050949050949 0.4 0.4 0.4 0.4 0.4 0.4 0.04995004995005 0.04995004995005 0.04995004995005 0.4 0.4 0.4 0.3 0.8 0.3 0.04995004995005 0.04995004995005 0.04995004995005 0.7 0.7 0.7 0.4 0.4 0.4 0.04995004995005 0.04995004995005 0.04995004995005 0.4 0.4 0.4 0.2 0.2 0.2 0.000999000999000999 0.000999000999000999 0.000999000999000999 0.2 0.2 0.2 0.1 0.1 0.6 0.000999000999000999 0.000999000999000999 0.000999000999000999 0.25 0.25 0.25 0.2 0.2 0.2 0.000999000999000999 0.000999000999000999 0.000999000999000999 0.2 0.2 0.2]);
+
+i = stringmatch('Ydot', names)+ss;
+bnet.CPD{i} = tabular_CPD(bnet, i, [0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.999880014398272 0.72463768115942 0.595238095238095 0.230414746543779 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.595238095238095 0.230414746543779 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.230414746543779 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.0144927536231884 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 9.99880014398272e-005 0.144927536231884 0.297619047619048 0.460829493087558 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.297619047619048 0.460829493087558 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.460829493087558 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.0144927536231884 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 0.0144927536231884 0.0595238095238095 0.230414746543779 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.0595238095238095 0.230414746543779 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.230414746543779 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.0144927536231884 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 9.99880014398272e-006 0.0144927536231884 0.00595238095238095 0.0460829493087558 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.0460829493087558 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.0460829493087558 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.0144927536231884 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0144927536231884 0.00595238095238095 0.00460829493087558 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.00460829493087558 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.00460829493087558 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.0144927536231884 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0144927536231884 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00442477876106195 0.00460829493087558 0.00595238095238095 0.0144927536231884 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0144927536231884 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00460829493087558 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00460829493087558 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0442477876106195 0.00460829493087558 0.00595238095238095 0.0144927536231884 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0144927536231884 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0460829493087558 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0460829493087558 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.221238938053097 0.0460829493087558 0.00595238095238095 0.0144927536231884 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0144927536231884 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.230414746543779 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.230414746543779 0.0595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.442477876106195 0.230414746543779 0.0595238095238095 0.0144927536231884 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0144927536231884 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.460829493087558 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.460829493087558 0.297619047619048 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.221238938053097 0.460829493087558 0.297619047619048 0.144927536231884 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0144927536231884 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.230414746543779 0.00595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.230414746543779 0.595238095238095 0.00460829493087558 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.00442477876106195 0.0442477876106195 0.230414746543779 0.595238095238095 0.72463768115942]);
+
+i = stringmatch('Stopped', names)+ss;
+bnet.CPD{i} = tabular_CPD(bnet, i, [0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0]);
+
+i = stringmatch('EngStatus', names)+ss;
+bnet.CPD{i} = tabular_CPD(bnet, i, [0.9 1.0e-006 0.1 0.999999]);
+
+i = stringmatch('FBStatus', names)+ss;
+bnet.CPD{i} = tabular_CPD(bnet, i, [1.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0]);
+
+i = stringmatch('SensorValid', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [1.0e-004 0.9999]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [1.0e-004 0.9999]);
+
+i = stringmatch('FYdotDiff', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.908182726364545 0.238095238095238 0.000908182726364545 0.476190476190476 9.08182726364545e-005 0.238095238095238 0.0908182726364545 0.0476190476190476]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.908182726364545 0.238095238095238 0.000908182726364545 0.476190476190476 9.08182726364545e-005 0.238095238095238 0.0908182726364545 0.0476190476190476]);
+
+i = stringmatch('FcloseSlow', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0]);
+
+i = stringmatch('Fclr', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.000499750124937531 0.142857142857143 0.499750124937531 0.285714285714286 0.499750124937531 0.571428571428571]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.000499750124937531 0.142857142857143 0.499750124937531 0.285714285714286 0.499750124937531 0.571428571428571]);
+
+i = stringmatch('BXdot', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.00980392156862745 0.00980392156862745 0.00980392156862745 0.00980392156862745 0.0454545454545455 0.00980392156862745 0.0490196078431373 0.0490196078431373 0.0490196078431373 0.0490196078431373 0.136363636363636 0.0490196078431373 0.196078431372549 0.196078431372549 0.196078431372549 0.196078431372549 0.136363636363636 0.196078431372549 0.392156862745098 0.392156862745098 0.392156862745098 0.392156862745098 0.181818181818182 0.392156862745098 0.196078431372549 0.196078431372549 0.196078431372549 0.196078431372549 0.136363636363636 0.196078431372549 0.0490196078431373 0.0490196078431373 0.0490196078431373 0.0490196078431373 0.136363636363636 0.0490196078431373 0.00980392156862745 0.00980392156862745 0.00980392156862745 0.00980392156862745 0.0454545454545455 0.00980392156862745 0.0980392156862745 0.0980392156862745 0.0980392156862745 0.0980392156862745 0.181818181818182 0.0980392156862745]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.00980392156862745 0.00980392156862745 0.00980392156862745 0.00980392156862745 0.0454545454545455 0.00980392156862745 0.0490196078431373 0.0490196078431373 0.0490196078431373 0.0490196078431373 0.136363636363636 0.0490196078431373 0.196078431372549 0.196078431372549 0.196078431372549 0.196078431372549 0.136363636363636 0.196078431372549 0.392156862745098 0.392156862745098 0.392156862745098 0.392156862745098 0.181818181818182 0.392156862745098 0.196078431372549 0.196078431372549 0.196078431372549 0.196078431372549 0.136363636363636 0.196078431372549 0.0490196078431373 0.0490196078431373 0.0490196078431373 0.0490196078431373 0.136363636363636 0.0490196078431373 0.00980392156862745 0.00980392156862745 0.00980392156862745 0.00980392156862745 0.0454545454545455 0.00980392156862745 0.0980392156862745 0.0980392156862745 0.0980392156862745 0.0980392156862745 0.181818181818182 0.0980392156862745]);
+
+i = stringmatch('BcloseFast', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0]);
+
+i = stringmatch('Bclr', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.142857142857143 0.285714285714286 0.571428571428571]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.142857142857143 0.285714285714286 0.571428571428571]);
+
+i = stringmatch('BYdotDiff', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.238095238095238 0.476190476190476 0.238095238095238 0.0476190476190476]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.238095238095238 0.476190476190476 0.238095238095238 0.0476190476190476]);
+
+i = stringmatch('LeftClrSens', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.909090909090909 0.0909090909090909 0.0909090909090909 0.909090909090909]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.909090909090909 0.0909090909090909 0.0909090909090909 0.909090909090909]);
+
+i = stringmatch('RightClrSens', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.909090909090909 0.0909090909090909 0.0909090909090909 0.909090909090909]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.909090909090909 0.0909090909090909 0.0909090909090909 0.909090909090909]);
+
+i = stringmatch('TurnSignalSens', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.75 0.000998003992015968 0.01 0.24 0.998003992015968 0.24 0.01 0.000998003992015968 0.75]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.75 0.000998003992015968 0.01 0.24 0.998003992015968 0.24 0.01 0.000998003992015968 0.75]);
+
+i = stringmatch('XdotSens', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.142857142857143 0.897666068222621 0.142857142857143 0.0824402308326463 0.142857142857143 0.00818330605564648 0.142857142857143 0.000818330605564648 0.142857142857143 0.000818330605564648 0.142857142857143 0.000824402308326463 0.142857142857143 0.000897666068222621 0.142857142857143 0.0897666068222621 0.142857142857143 0.824402308326463 0.142857142857143 0.0818330605564648 0.142857142857143 0.00818330605564648 0.142857142857143 0.000818330605564648 0.142857142857143 0.000824402308326463 0.142857142857143 0.000897666068222621 0.142857142857143 0.00897666068222621 0.142857142857143 0.0824402308326463 0.142857142857143 0.818330605564648 0.142857142857143 0.0818330605564648 0.142857142857143 0.00818330605564648 0.142857142857143 0.000824402308326463 0.142857142857143 0.000897666068222621 0.142857142857143 0.000897666068222621 0.142857142857143 0.00824402308326463 0.142857142857143 0.0818330605564648 0.142857142857143 0.818330605564648 0.142857142857143 0.0818330605564648 0.142857142857143 0.00824402308326463 0.142857142857143 0.000897666068222621 0.142857142857143 0.000897666068222621 0.142857142857143 0.000824402308326463 0.142857142857143 0.00818330605564648 0.142857142857143 0.0818330605564648 0.142857142857143 0.818330605564648 0.142857142857143 0.0824402308326463 0.142857142857143 0.00897666068222621 0.142857142857143 0.000897666068222621 0.142857142857143 0.000824402308326463 0.142857142857143 0.000818330605564648 0.142857142857143 0.00818330605564648 0.142857142857143 0.0818330605564648 0.142857142857143 0.824402308326463 0.142857142857143 0.0897666068222621 0.142857142857143 0.000897666068222621 0.142857142857143 0.000824402308326463 0.142857142857143 0.000818330605564648 0.142857142857143 0.000818330605564648 0.142857142857143 0.00818330605564648 0.142857142857143 0.0824402308326463 0.142857142857143 0.897666068222621]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.142857142857143 0.897666068222621 0.142857142857143 0.0824402308326463 0.142857142857143 0.00818330605564648 0.142857142857143 0.000818330605564648 0.142857142857143 0.000818330605564648 0.142857142857143 0.000824402308326463 0.142857142857143 0.000897666068222621 0.142857142857143 0.0897666068222621 0.142857142857143 0.824402308326463 0.142857142857143 0.0818330605564648 0.142857142857143 0.00818330605564648 0.142857142857143 0.000818330605564648 0.142857142857143 0.000824402308326463 0.142857142857143 0.000897666068222621 0.142857142857143 0.00897666068222621 0.142857142857143 0.0824402308326463 0.142857142857143 0.818330605564648 0.142857142857143 0.0818330605564648 0.142857142857143 0.00818330605564648 0.142857142857143 0.000824402308326463 0.142857142857143 0.000897666068222621 0.142857142857143 0.000897666068222621 0.142857142857143 0.00824402308326463 0.142857142857143 0.0818330605564648 0.142857142857143 0.818330605564648 0.142857142857143 0.0818330605564648 0.142857142857143 0.00824402308326463 0.142857142857143 0.000897666068222621 0.142857142857143 0.000897666068222621 0.142857142857143 0.000824402308326463 0.142857142857143 0.00818330605564648 0.142857142857143 0.0818330605564648 0.142857142857143 0.818330605564648 0.142857142857143 0.0824402308326463 0.142857142857143 0.00897666068222621 0.142857142857143 0.000897666068222621 0.142857142857143 0.000824402308326463 0.142857142857143 0.000818330605564648 0.142857142857143 0.00818330605564648 0.142857142857143 0.0818330605564648 0.142857142857143 0.824402308326463 0.142857142857143 0.0897666068222621 0.142857142857143 0.000897666068222621 0.142857142857143 0.000824402308326463 0.142857142857143 0.000818330605564648 0.142857142857143 0.000818330605564648 0.142857142857143 0.00818330605564648 0.142857142857143 0.0824402308326463 0.142857142857143 0.897666068222621]);
+
+i = stringmatch('YdotSens', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.0909090909090909 0.894454382826476 0.0909090909090909 0.0821692686935086 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.0894454382826476 0.0909090909090909 0.821692686935086 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.00894454382826476 0.0909090909090909 0.0821692686935086 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.00821692686935086 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0821692686935086 0.0909090909090909 0.00894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.821692686935086 0.0909090909090909 0.0894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0821692686935086 0.0909090909090909 0.894454382826476]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.0909090909090909 0.894454382826476 0.0909090909090909 0.0821692686935086 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.0894454382826476 0.0909090909090909 0.821692686935086 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.00894454382826476 0.0909090909090909 0.0821692686935086 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.00821692686935086 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.00821692686935086 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.815660685154976 0.0909090909090909 0.0821692686935086 0.0909090909090909 0.00894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0815660685154976 0.0909090909090909 0.821692686935086 0.0909090909090909 0.0894454382826476 0.0909090909090909 0.000894454382826476 0.0909090909090909 0.000821692686935086 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.000815660685154976 0.0909090909090909 0.00815660685154975 0.0909090909090909 0.0821692686935086 0.0909090909090909 0.894454382826476]);
+
+i = stringmatch('FYdotDiffSens', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.53191206429753 0.00806445109313635 0.0053191206429753 9.9930048965724e-005 0.265956032148765 0.00806445109313635 0.0053191206429753 9.9930048965724e-005 0.132978016074383 0.0806445109313634 0.0053191206429753 9.9930048965724e-005 0.053191206429753 0.806445109313635 0.053191206429753 9.9930048965724e-005 0.0053191206429753 0.0806445109313634 0.132978016074383 9.9930048965724e-005 0.0053191206429753 0.00806445109313635 0.265956032148765 9.9930048965724e-005 0.0053191206429753 0.00806445109313635 0.53191206429753 9.9930048965724e-005 5.3191206429753e-006 8.06445109313635e-006 5.3191206429753e-006 0.99930048965724]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.53191206429753 0.00806445109313635 0.0053191206429753 9.9930048965724e-005 0.265956032148765 0.00806445109313635 0.0053191206429753 9.9930048965724e-005 0.132978016074383 0.0806445109313634 0.0053191206429753 9.9930048965724e-005 0.053191206429753 0.806445109313635 0.053191206429753 9.9930048965724e-005 0.0053191206429753 0.0806445109313634 0.132978016074383 9.9930048965724e-005 0.0053191206429753 0.00806445109313635 0.265956032148765 9.9930048965724e-005 0.0053191206429753 0.00806445109313635 0.53191206429753 9.9930048965724e-005 5.3191206429753e-006 8.06445109313635e-006 5.3191206429753e-006 0.99930048965724]);
+
+i = stringmatch('FclrSens', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.472366556447804 0.0044762757385855 6.20655412115194e-005 0.472366556447804 0.044762757385855 6.20655412115194e-005 0.0472366556447804 0.44762757385855 0.000620655412115194 0.000472366556447804 0.44762757385855 0.00620655412115194 0.000472366556447804 0.044762757385855 0.0620655412115194 0.000472366556447804 0.0044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.472366556447804 0.0044762757385855 6.20655412115194e-005 0.472366556447804 0.044762757385855 6.20655412115194e-005 0.0472366556447804 0.44762757385855 0.000620655412115194 0.000472366556447804 0.44762757385855 0.00620655412115194 0.000472366556447804 0.044762757385855 0.0620655412115194 0.000472366556447804 0.0044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194]);
+
+i = stringmatch('BXdotSens', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.689655172413793 0.172413793103448 0.0546448087431694 0.00546448087431694 0.00546448087431694 0.00546448087431694 0.00574712643678161 0.00689655172413793 0.206896551724138 0.574712643678161 0.163934426229508 0.0546448087431694 0.00546448087431694 0.00546448087431694 0.00574712643678161 0.00689655172413793 0.0689655172413793 0.172413793103448 0.546448087431694 0.163934426229508 0.0546448087431694 0.00546448087431694 0.00574712643678161 0.00689655172413793 0.00689655172413793 0.0574712643678161 0.163934426229508 0.546448087431694 0.163934426229508 0.0546448087431694 0.00574712643678161 0.00689655172413793 0.00689655172413793 0.00574712643678161 0.0546448087431694 0.163934426229508 0.546448087431694 0.163934426229508 0.0574712643678161 0.00689655172413793 0.00689655172413793 0.00574712643678161 0.00546448087431694 0.0546448087431694 0.163934426229508 0.546448087431694 0.172413793103448 0.0689655172413793 0.00689655172413793 0.00574712643678161 0.00546448087431694 0.00546448087431694 0.0546448087431694 0.163934426229508 0.574712643678161 0.206896551724138 0.00689655172413793 0.00574712643678161 0.00546448087431694 0.00546448087431694 0.00546448087431694 0.0546448087431694 0.172413793103448 0.689655172413793]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.689655172413793 0.172413793103448 0.0546448087431694 0.00546448087431694 0.00546448087431694 0.00546448087431694 0.00574712643678161 0.00689655172413793 0.206896551724138 0.574712643678161 0.163934426229508 0.0546448087431694 0.00546448087431694 0.00546448087431694 0.00574712643678161 0.00689655172413793 0.0689655172413793 0.172413793103448 0.546448087431694 0.163934426229508 0.0546448087431694 0.00546448087431694 0.00574712643678161 0.00689655172413793 0.00689655172413793 0.0574712643678161 0.163934426229508 0.546448087431694 0.163934426229508 0.0546448087431694 0.00574712643678161 0.00689655172413793 0.00689655172413793 0.00574712643678161 0.0546448087431694 0.163934426229508 0.546448087431694 0.163934426229508 0.0574712643678161 0.00689655172413793 0.00689655172413793 0.00574712643678161 0.00546448087431694 0.0546448087431694 0.163934426229508 0.546448087431694 0.172413793103448 0.0689655172413793 0.00689655172413793 0.00574712643678161 0.00546448087431694 0.00546448087431694 0.0546448087431694 0.163934426229508 0.574712643678161 0.206896551724138 0.00689655172413793 0.00574712643678161 0.00546448087431694 0.00546448087431694 0.00546448087431694 0.0546448087431694 0.172413793103448 0.689655172413793]);
+
+i = stringmatch('BclrSens', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.472366556447804 0.0044762757385855 6.20655412115194e-005 0.472366556447804 0.044762757385855 6.20655412115194e-005 0.0472366556447804 0.44762757385855 0.000620655412115194 0.000472366556447804 0.44762757385855 0.00620655412115194 0.000472366556447804 0.044762757385855 0.0620655412115194 0.000472366556447804 0.0044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.472366556447804 0.0044762757385855 6.20655412115194e-005 0.472366556447804 0.044762757385855 6.20655412115194e-005 0.0472366556447804 0.44762757385855 0.000620655412115194 0.000472366556447804 0.44762757385855 0.00620655412115194 0.000472366556447804 0.044762757385855 0.0620655412115194 0.000472366556447804 0.0044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194 0.000472366556447804 0.00044762757385855 0.0620655412115194]);
+
+i = stringmatch('BYdotDiffSens', names);
+%bnet.CPD{i} = tabular_CPD(bnet, i, [0.53191206429753 0.00806445109313635 0.0053191206429753 9.9930048965724e-005 0.265956032148765 0.00806445109313635 0.0053191206429753 9.9930048965724e-005 0.132978016074383 0.0806445109313634 0.0053191206429753 9.9930048965724e-005 0.053191206429753 0.806445109313635 0.053191206429753 9.9930048965724e-005 0.0053191206429753 0.0806445109313634 0.132978016074383 9.9930048965724e-005 0.0053191206429753 0.00806445109313635 0.265956032148765 9.9930048965724e-005 0.0053191206429753 0.00806445109313635 0.53191206429753 9.9930048965724e-005 5.3191206429753e-006 8.06445109313635e-006 5.3191206429753e-006 0.99930048965724]);
+bnet.CPD{i+ss} = tabular_CPD(bnet, i+ss, [0.53191206429753 0.00806445109313635 0.0053191206429753 9.9930048965724e-005 0.265956032148765 0.00806445109313635 0.0053191206429753 9.9930048965724e-005 0.132978016074383 0.0806445109313634 0.0053191206429753 9.9930048965724e-005 0.053191206429753 0.806445109313635 0.053191206429753 9.9930048965724e-005 0.0053191206429753 0.0806445109313634 0.132978016074383 9.9930048965724e-005 0.0053191206429753 0.00806445109313635 0.265956032148765 9.9930048965724e-005 0.0053191206429753 0.00806445109313635 0.53191206429753 9.9930048965724e-005 5.3191206429753e-006 8.06445109313635e-006 5.3191206429753e-006 0.99930048965724]);
+%BIF2BNT added a bunch of zeros at the end of this cpd. Hopefully the only occurence of this bug!  0 0 0 0 0 0 0 0]);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_orig_water_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,121 @@
+function dbn = mk_orig_water_dbn
+% Converted by Frank Hutter:
+%   Provided in Phrog format by Xavier Boyen.
+%   Manually converted into BIF.
+%   Converted to BNT from BIF by Web-based bif2bnt (2004-01-30T05:28:10)
+%   Manually converted into function creating DBN.
+%   Manually changed the node numbering s.t. A-B-C-D-E-F-G-H from the BK paper correspond to 1-2-3-4-5-6-7-8
+
+node = struct('C_NI_12_ANT', 1, ...
+              'CKNI_12_ANT', 2, ...
+              'CBODD_12_ANT', 3, ...
+              'CNOD_12_ANT', 4, ...
+              'CBODN_12_ANT', 5, ...
+              'CNON_12_ANT', 6, ...
+              'CKND_12_ANT', 7, ...
+              'CKNN_12_ANT', 8, ...
+              'C_NI_12_OBS', 9, ...
+              'CKNI_12_OBS', 10, ...
+              'CBODD_12_OBS', 11, ...
+              'CNOD_12_OBS', 12, ...
+              'CBODN_12_OBS', 13, ...
+              'CNON_12_OBS', 14, ...
+              'CKND_12_OBS', 15, ...
+              'CKNN_12_OBS', 16, ...
+              'C_NI_12_ULT', 17, ...
+              'CKNI_12_ULT', 18, ...
+              'CBODD_12_ULT', 19, ...
+              'CNOD_12_ULT', 20, ...
+              'CBODN_12_ULT', 21, ...
+              'CNON_12_ULT', 22, ...
+              'CKND_12_ULT', 23, ...
+              'CKNN_12_ULT', 24);
+
+adjacency = zeros(24);
+adjacency([node.C_NI_12_ANT], node.C_NI_12_OBS) = 1;
+adjacency([node.CKNI_12_ANT], node.CKNI_12_OBS) = 1;
+adjacency([node.CBODD_12_ANT], node.CBODD_12_OBS) = 1;
+adjacency([node.CKND_12_ANT], node.CKND_12_OBS) = 1;
+adjacency([node.CNOD_12_ANT], node.CNOD_12_OBS) = 1;
+adjacency([node.CBODN_12_ANT], node.CBODN_12_OBS) = 1;
+adjacency([node.CKNN_12_ANT], node.CKNN_12_OBS) = 1;
+adjacency([node.CNON_12_ANT], node.CNON_12_OBS) = 1;
+adjacency([node.C_NI_12_ANT], node.C_NI_12_ULT) = 1;
+adjacency([node.CKNI_12_ANT], node.CKNI_12_ULT) = 1;
+adjacency([node.CBODN_12_ANT node.CNOD_12_ANT node.CBODD_12_ANT node.CKNI_12_ANT node.C_NI_12_ANT], node.CBODD_12_ULT) = 1;
+adjacency([node.CKNN_12_ANT node.CKND_12_ANT node.CKNI_12_ANT], node.CKND_12_ULT) = 1;
+adjacency([node.CNON_12_ANT node.CNOD_12_ANT node.CBODD_12_ANT], node.CNOD_12_ULT) = 1;
+adjacency([node.CNON_12_ANT node.CBODN_12_ANT node.CBODD_12_ANT], node.CBODN_12_ULT) = 1;
+adjacency([node.CKNN_12_ANT node.CKND_12_ANT], node.CKNN_12_ULT) = 1;
+adjacency([node.CNON_12_ANT node.CKNN_12_ANT node.CBODN_12_ANT node.CNOD_12_ANT], node.CNON_12_ULT) = 1;
+
+ss = 16;
+dnodes = 1:ss;
+ant = 1:8;
+onodes = 9:16;
+ult = 17:24;
+intra = adjacency(1:ss, 1:ss);
+inter_real = adjacency(ant, ult);
+inter = zeros(ss);
+inter(ant,1:length(ult)) = inter_real;
+
+eclass1 = 1:16;
+eclass2 = [17:24 9:16];
+
+value = {{'zz3num'; 'zz4num'; 'zz5num'; 'zz6num'}, ...
+         {'zz20mgl'; 'zz30mgl'; 'zz40mgl'}, ...
+         {'zz15mgl'; 'zz20mgl'; 'zz25mgl'; 'zz30mgl'}, ...
+         {'zz05mgl'; 'zz1mgl'; 'zz2mgl'; 'zz4mgl'}, ...
+         {'zz5mgl'; 'zz10mgl'; 'zz15mgl'; 'zz20mgl'}, ...
+         {'zz2mgl'; 'zz4mgl'; 'zz6mgl'; 'zz10mgl'}, ...
+         {'zz2mgl'; 'zz4mgl'; 'zz6mgl'}, ...
+         {'zz05mgl'; 'zz1mgl'; 'zz2mgl'}, ...
+         {'zz3num'; 'zz4num'; 'zz5num'; 'zz6num'}, ...
+         {'zz20mgl'; 'zz30mgl'; 'zz40mgl'}, ...
+         {'zz15mgl'; 'zz20mgl'; 'zz25mgl'; 'zz30mgl'}, ...
+         {'zz05mgl'; 'zz1mgl'; 'zz2mgl'; 'zz4mgl'}, ...
+         {'zz5mgl'; 'zz10mgl'; 'zz15mgl'; 'zz20mgl'}, ...
+         {'zz2mgl'; 'zz4mgl'; 'zz6mgl'; 'zz10mgl'}, ...
+         {'zz2mgl'; 'zz4mgl'; 'zz6mgl'}, ...
+         {'zz05mgl'; 'zz1mgl'; 'zz2mgl'}, ...
+         {'zz3num'; 'zz4num'; 'zz5num'; 'zz6num'}, ...
+         {'zz20mgl'; 'zz30mgl'; 'zz40mgl'}, ...
+         {'zz15mgl'; 'zz20mgl'; 'zz25mgl'; 'zz30mgl'}, ...
+         {'zz05mgl'; 'zz1mgl'; 'zz2mgl'; 'zz4mgl'}, ...
+         {'zz5mgl'; 'zz10mgl'; 'zz15mgl'; 'zz20mgl'}, ...
+         {'zz2mgl'; 'zz4mgl'; 'zz6mgl'; 'zz10mgl'}, ...
+         {'zz2mgl'; 'zz4mgl'; 'zz6mgl'}, ...
+         {'zz05mgl'; 'zz1mgl'; 'zz2mgl'}};
+          
+ns = zeros(1,24);
+for i=1:24
+    ns(i) = length(value{i});
+end
+
+dbn = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2, ...
+	      'observed', onodes);
+
+dbn.CPD{node.C_NI_12_ANT} = tabular_CPD(dbn, node.C_NI_12_ANT, 1/ns(1) * ones(1,ns(1)));
+dbn.CPD{node.CKNI_12_ANT} = tabular_CPD(dbn, node.CKNI_12_ANT, 1/ns(2) * ones(1,ns(2)));
+dbn.CPD{node.CBODD_12_ANT} = tabular_CPD(dbn, node.CBODD_12_ANT, 1/ns(3) * ones(1,ns(3)));
+dbn.CPD{node.CNOD_12_ANT} = tabular_CPD(dbn, node.CNOD_12_ANT, 1/ns(4) * ones(1,ns(4)));
+dbn.CPD{node.CBODN_12_ANT} = tabular_CPD(dbn, node.CBODN_12_ANT, 1/ns(5) * ones(1,ns(5)));
+dbn.CPD{node.CNON_12_ANT} = tabular_CPD(dbn, node.CNON_12_ANT, 1/ns(6) * ones(1,ns(6)));
+dbn.CPD{node.CKND_12_ANT} = tabular_CPD(dbn, node.CKND_12_ANT, 1/ns(7) * ones(1,ns(7)));
+dbn.CPD{node.CKNN_12_ANT} = tabular_CPD(dbn, node.CKNN_12_ANT, 1/ns(8) * ones(1,ns(8)));
+dbn.CPD{node.C_NI_12_OBS} = tabular_CPD(dbn, node.C_NI_12_OBS, [0.7 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.1 0.7]);
+dbn.CPD{node.CKNI_12_OBS} = tabular_CPD(dbn, node.CKNI_12_OBS, [0.8 0.1 0.1 0.1 0.8 0.1 0.1 0.1 0.8]);
+dbn.CPD{node.CBODD_12_OBS} = tabular_CPD(dbn, node.CBODD_12_OBS, [0.7 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.1 0.7]);
+dbn.CPD{node.CKND_12_OBS} = tabular_CPD(dbn, node.CKND_12_OBS, [0.8 0.1 0.1 0.1 0.8 0.1 0.1 0.1 0.8]);
+dbn.CPD{node.CNOD_12_OBS} = tabular_CPD(dbn, node.CNOD_12_OBS, [0.7 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.1 0.7]);
+dbn.CPD{node.CBODN_12_OBS} = tabular_CPD(dbn, node.CBODN_12_OBS, [0.7 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.1 0.7]);
+dbn.CPD{node.CKNN_12_OBS} = tabular_CPD(dbn, node.CKNN_12_OBS, [0.8 0.1 0.1 0.1 0.8 0.1 0.1 0.1 0.8]);
+dbn.CPD{node.CNON_12_OBS} = tabular_CPD(dbn, node.CNON_12_OBS, [0.7 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.1 0.7 0.1 0.1 0.1 0.1 0.7]);
+dbn.CPD{node.C_NI_12_ULT} = tabular_CPD(dbn, node.C_NI_12_ULT, [0.5 0.2 0.1 0 0.4 0.55 0.3 0.15 0.1 0.2 0.5 0.25 0 0.05 0.1 0.6]);
+dbn.CPD{node.CKNI_12_ULT} = tabular_CPD(dbn, node.CKNI_12_ULT, [0.48 0.2 0.04 0.48 0.6 0.48 0.04 0.2 0.48]);
+dbn.CPD{node.CBODD_12_ULT} = tabular_CPD(dbn, node.CBODD_12_ULT, [1 1 0.9791 0.9473 0.9949 0.9473 0.8997 0.8521 0.9473 0.8838 0.8203 0.7568 0.0903 0.0585 0.0268 0 0.0426 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0.9951 0.9634 1 0.9634 0.9158 0.8681 0.9634 0.8999 0.8364 0.7729 0.109 0.0773 0.0455 0.0138 0.0614 0.0138 0 0 0.0138 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0.9762 1 0.9762 0.9286 0.881 0.9762 0.9127 0.8493 0.7858 0.124 0.0923 0.0605 0.0288 0.0764 0.0288 0 0 0.0288 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0.9848 1 0.9848 0.9372 0.8896 0.9848 0.9213 0.8578 0.7943 0.134 0.1023 0.0705 0.0388 0.0864 0.0388 0 0 0.0388 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0.9791 0.9473 0.9156 0.9632 0.9156 0.8679 0.8203 0.9156 0.8521 0.7886 0.7251 0.0585 0.0268 0 0 0.0109 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0.9951 0.9634 0.9316 0.9793 0.9316 0.884 0.8364 0.9316 0.8681 0.8046 0.7412 0.0773 0.0455 0.0138 0 0.0296 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0.9762 0.9445 0.9921 0.9445 0.8969 0.8493 0.9445 0.881 0.8175 0.754 0.0923 0.0605 0.0288 0 0.0446 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0.9848 0.9531 1 0.9531 0.9054 0.8578 0.9531 0.8896 0.8261 0.7626 0.1023 0.0705 0.0388 0.007 0.0546 0.007 0 0 0.007 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9791 0.9473 0.9156 0.8838 0.9314 0.8838 0.8362 0.7886 0.8838 0.8203 0.7568 0.6933 0.0268 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9951 0.9634 0.9316 0.8999 0.9475 0.8999 0.8523 0.8046 0.8999 0.8364 0.7729 0.7094 0.0455 0.0138 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0.9762 0.9445 0.9127 0.9604 0.9127 0.8651 0.8175 0.9127 0.8493 0.7858 0.7223 0.0605 0.0288 0 0 0.0129 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0.9848 0.9531 0.9213 0.9689 0.9213 0.8737 0.8261 0.9213 0.8578 0.7943 0.7308 0.0705 0.0388 0.007 0 0.0229 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9473 0.9156 0.8838 0.8521 0.8997 0.8521 0.8045 0.7568 0.8521 0.7886 0.7251 0.6616 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9634 0.9316 0.8999 0.8681 0.9158 0.8681 0.8205 0.7729 0.8681 0.8046 0.7412 0.6777 0.0138 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9762 0.9445 0.9127 0.881 0.9286 0.881 0.8334 0.7858 0.881 0.8175 0.754 0.6905 0.0288 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9848 0.9531 0.9213 0.8896 0.9372 0.8896 0.842 0.7943 0.8896 0.8261 0.7626 0.6991 0.0388 0.007 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0209 0.0527 0.0051 0.0527 0.1003 0.1479 0.0527 0.1162 0.1797 0.2432 0.9097 0.9415 0.9732 0.995 0.9574 0.995 0.9474 0.8998 0.995 0.9315 0.868 0.8045 0.1362 0.1045 0.0727 0.041 0.0886 0.041 0 0 0.041 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0049 0.0366 0 0.0366 0.0842 0.1319 0.0366 0.1001 0.1636 0.2271 0.891 0.9227 0.9545 0.9862 0.9386 0.9862 0.9662 0.9185 0.9862 0.9503 0.8868 0.8233 0.157 0.1253 0.0935 0.0618 0.1094 0.0618 0.0142 0 0.0618 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0238 0 0.0238 0.0714 0.119 0.0238 0.0873 0.1507 0.2142 0.876 0.9077 0.9395 0.9712 0.9236 0.9712 0.9812 0.9335 0.9712 0.9653 0.9018 0.8383 0.1737 0.142 0.1102 0.0785 0.1261 0.0785 0.0308 0 0.0785 0.015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0152 0 0.0152 0.0628 0.1104 0.0152 0.0787 0.1422 0.2057 0.866 0.8977 0.9295 0.9612 0.9136 0.9612 0.9912 0.9435 0.9612 0.9753 0.9118 0.8483 0.1848 0.1531 0.1213 0.0896 0.1372 0.0896 0.042 0 0.0896 0.0261 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0209 0.0527 0.0844 0.0368 0.0844 0.1321 0.1797 0.0844 0.1479 0.2114 0.2749 0.9415 0.9732 0.995 0.9633 0.9891 0.9633 0.9157 0.868 0.9633 0.8998 0.8363 0.7728 0.1045 0.0727 0.041 0.0092 0.0568 0.0092 0 0 0.0092 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0049 0.0366 0.0684 0.0207 0.0684 0.116 0.1636 0.0684 0.1319 0.1954 0.2588 0.9227 0.9545 0.9862 0.982 0.9704 0.982 0.9344 0.8868 0.982 0.9185 0.855 0.7916 0.1253 0.0935 0.0618 0.03 0.0777 0.03 0 0 0.03 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0238 0.0555 0.0079 0.0555 0.1031 0.1507 0.0555 0.119 0.1825 0.246 0.9077 0.9395 0.9712 0.997 0.9554 0.997 0.9494 0.9018 0.997 0.9335 0.87 0.8066 0.142 0.1102 0.0785 0.0467 0.0943 0.0467 0 0 0.0467 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0152 0.0469 0 0.0469 0.0946 0.1422 0.0469 0.1104 0.1739 0.2374 0.8977 0.9295 0.9612 0.993 0.9454 0.993 0.9594 0.9118 0.993 0.9435 0.88 0.8166 0.1531 0.1213 0.0896 0.0578 0.1054 0.0578 0.0102 0 0.0578 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0209 0.0527 0.0844 0.1162 0.0686 0.1162 0.1638 0.2114 0.1162 0.1797 0.2432 0.3067 0.9732 0.995 0.9633 0.9315 0.9792 0.9315 0.8839 0.8363 0.9315 0.868 0.8045 0.7411 0.0727 0.041 0.0092 0 0.0251 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0049 0.0366 0.0684 0.1001 0.0525 0.1001 0.1477 0.1954 0.1001 0.1636 0.2271 0.2906 0.9545 0.9862 0.982 0.9503 0.9979 0.9503 0.9027 0.855 0.9503 0.8868 0.8233 0.7598 0.0935 0.0618 0.03 0 0.0459 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0238 0.0555 0.0873 0.0396 0.0873 0.1349 0.1825 0.0873 0.1507 0.2142 0.2777 0.9395 0.9712 0.997 0.9653 0.9871 0.9653 0.9177 0.87 0.9653 0.9018 0.8383 0.7748 0.1102 0.0785 0.0467 0.015 0.0626 0.015 0 0 0.015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0152 0.0469 0.0787 0.0311 0.0787 0.1263 0.1739 0.0787 0.1422 0.2057 0.2692 0.9295 0.9612 0.993 0.9753 0.9771 0.9753 0.9277 0.88 0.9753 0.9118 0.8483 0.7848 0.1213 0.0896 0.0578 0.0261 0.0737 0.0261 0 0 0.0261 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0527 0.0844 0.1162 0.1479 0.1003 0.1479 0.1955 0.2432 0.1479 0.2114 0.2749 0.3384 0.995 0.9633 0.9315 0.8998 0.9474 0.8998 0.8522 0.8045 0.8998 0.8363 0.7728 0.7093 0.041 0.0092 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0366 0.0684 0.1001 0.1319 0.0842 0.1319 0.1795 0.2271 0.1319 0.1954 0.2588 0.3223 0.9862 0.982 0.9503 0.9185 0.9662 0.9185 0.8709 0.8233 0.9185 0.855 0.7916 0.7281 0.0618 0.03 0 0 0.0142 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0238 0.0555 0.0873 0.119 0.0714 0.119 0.1666 0.2142 0.119 0.1825 0.246 0.3095 0.9712 0.997 0.9653 0.9335 0.9812 0.9335 0.8859 0.8383 0.9335 0.87 0.8066 0.7431 0.0785 0.0467 0.015 0 0.0308 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0152 0.0469 0.0787 0.1104 0.0628 0.1104 0.158 0.2057 0.1104 0.1739 0.2374 0.3009 0.9612 0.993 0.9753 0.9435 0.9912 0.9435 0.8959 0.8483 0.9435 0.88 0.8166 0.7531 0.0896 0.0578 0.0261 0 0.042 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.005 0 0.005 0.0526 0.1002 0.005 0.0685 0.132 0.1955 0.8638 0.8955 0.9273 0.959 0.9114 0.959 0.9933 0.9457 0.959 0.9775 0.914 0.8505 0.1809 0.1491 0.1174 0.0856 0.1333 0.0856 0.038 0 0.0856 0.0221 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0338 0.0815 0 0.0497 0.1132 0.1767 0.843 0.8747 0.9065 0.9382 0.8906 0.9382 0.9858 0.9666 0.9382 0.9983 0.9348 0.8713 0.2034 0.1716 0.1399 0.1081 0.1558 0.1081 0.0605 0.0129 0.1081 0.0446 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0188 0.0665 0 0.0347 0.0982 0.1617 0.8263 0.858 0.8898 0.9215 0.8739 0.9215 0.9692 0.9832 0.9215 0.985 0.9515 0.888 0.2214 0.1896 0.1579 0.1261 0.1738 0.1261 0.0785 0.0309 0.1261 0.0626 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0088 0.0565 0 0.0247 0.0882 0.1517 0.8152 0.8469 0.8787 0.9104 0.8628 0.9104 0.958 0.9943 0.9104 0.9739 0.9626 0.8991 0.2334 0.2016 0.1699 0.1381 0.1858 0.1381 0.0905 0.0429 0.1381 0.0746 0.0112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.005 0.0367 0 0.0367 0.0843 0.132 0.0367 0.1002 0.1637 0.2272 0.8955 0.9273 0.959 0.9908 0.9432 0.9908 0.9616 0.914 0.9908 0.9457 0.8822 0.8187 0.1491 0.1174 0.0856 0.0539 0.1015 0.0539 0.0063 0 0.0539 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.018 0 0.018 0.0656 0.1132 0.018 0.0815 0.145 0.2084 0.8747 0.9065 0.9382 0.97 0.9223 0.97 0.9824 0.9348 0.97 0.9666 0.9031 0.8396 0.1716 0.1399 0.1081 0.0764 0.124 0.0764 0.0288 0 0.0764 0.0129 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.003 0 0.003 0.0506 0.0982 0.003 0.0665 0.13 0.1934 0.858 0.8898 0.9215 0.9533 0.9057 0.9533 0.9991 0.9515 0.9533 0.9832 0.9197 0.8562 0.1896 0.1579 0.1261 0.0944 0.142 0.0944 0.0468 0 0.0944 0.0309 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0406 0.0882 0 0.0565 0.12 0.1834 0.8469 0.8787 0.9104 0.9422 0.8946 0.9422 0.9898 0.9626 0.9422 0.9943 0.9308 0.8673 0.2016 0.1699 0.1381 0.1064 0.154 0.1064 0.0588 0.0112 0.1064 0.0429 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.005 0.0367 0.0685 0.0208 0.0685 0.1161 0.1637 0.0685 0.132 0.1955 0.2589 0.9273 0.959 0.9908 0.9775 0.9749 0.9775 0.9298 0.8822 0.9775 0.914 0.8505 0.787 0.1174 0.0856 0.0539 0.0221 0.0698 0.0221 0 0 0.0221 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.018 0.0497 0.0021 0.0497 0.0973 0.145 0.0497 0.1132 0.1767 0.2402 0.9065 0.9382 0.97 0.9983 0.9541 0.9983 0.9507 0.9031 0.9983 0.9348 0.8713 0.8078 0.1399 0.1081 0.0764 0.0446 0.0923 0.0446 0 0 0.0446 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.003 0.0347 0 0.0347 0.0823 0.13 0.0347 0.0982 0.1617 0.2252 0.8898 0.9215 0.9533 0.985 0.9374 0.985 0.9673 0.9197 0.985 0.9515 0.888 0.8245 0.1579 0.1261 0.0944 0.0626 0.1103 0.0626 0.015 0 0.0626 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0247 0 0.0247 0.0723 0.12 0.0247 0.0882 0.1517 0.2152 0.8787 0.9104 0.9422 0.9739 0.9263 0.9739 0.9785 0.9308 0.9739 0.9626 0.8991 0.8356 0.1699 0.1381 0.1064 0.0746 0.1223 0.0746 0.027 0 0.0746 0.0112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.005 0.0367 0.0685 0.1002 0.0526 0.1002 0.1478 0.1955 0.1002 0.1637 0.2272 0.2907 0.959 0.9908 0.9775 0.9457 0.9933 0.9457 0.8981 0.8505 0.9457 0.8822 0.8187 0.7552 0.0856 0.0539 0.0221 0 0.038 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.018 0.0497 0.0815 0.0338 0.0815 0.1291 0.1767 0.0815 0.145 0.2084 0.2719 0.9382 0.97 0.9983 0.9666 0.9858 0.9666 0.9189 0.8713 0.9666 0.9031 0.8396 0.7761 0.1081 0.0764 0.0446 0.0129 0.0605 0.0129 0 0 0.0129 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.003 0.0347 0.0665 0.0188 0.0665 0.1141 0.1617 0.0665 0.13 0.1934 0.2569 0.9215 0.9533 0.985 0.9832 0.9692 0.9832 0.9356 0.888 0.9832 0.9197 0.8562 0.7927 0.1261 0.0944 0.0626 0.0309 0.0785 0.0309 0 0 0.0309 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0247 0.0565 0.0088 0.0565 0.1041 0.1517 0.0565 0.12 0.1834 0.2469 0.9104 0.9422 0.9739 0.9943 0.958 0.9943 0.9467 0.8991 0.9943 0.9308 0.8673 0.8039 0.1381 0.1064 0.0746 0.0429 0.0905 0.0429 0 0 0.0429 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0067 0.0543 0 0.0225 0.086 0.1495 0.8191 0.8509 0.8826 0.9144 0.8667 0.9144 0.962 1 0.9144 0.9779 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0334 0 0.0017 0.0652 0.1287 0.7966 0.8284 0.8601 0.8919 0.8442 0.8919 0.9395 0.9871 0.8919 0.9554 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0168 0 0 0.0485 0.112 0.7786 0.8104 0.8421 0.8739 0.8262 0.8739 0.9215 0.9691 0.8739 0.9374 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0057 0 0 0.0374 0.1009 0.7666 0.7984 0.8301 0.8619 0.8142 0.8619 0.9095 0.9571 0.8619 0.9254 0.9888 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0384 0.086 0 0.0543 0.1178 0.1813 0.8509 0.8826 0.9144 0.9461 0.8985 0.9461 0.9937 1 0.9461 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0176 0.0652 0 0.0334 0.0969 0.1604 0.8284 0.8601 0.8919 0.9236 0.876 0.9236 0.9712 1 0.9236 0.9871 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0009 0.0485 0 0.0168 0.0803 0.1438 0.8104 0.8421 0.8739 0.9056 0.858 0.9056 0.9532 1 0.9056 0.9691 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0374 0 0.0057 0.0692 0.1327 0.7984 0.8301 0.8619 0.8936 0.846 0.8936 0.9412 0.9888 0.8936 0.9571 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0225 0 0.0225 0.0702 0.1178 0.0225 0.086 0.1495 0.213 0.8826 0.9144 0.9461 0.9779 0.9302 0.9779 1 1 0.9779 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0017 0 0.0017 0.0493 0.0969 0.0017 0.0652 0.1287 0.1922 0.8601 0.8919 0.9236 0.9554 0.9077 0.9554 1 1 0.9554 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0327 0.0803 0 0.0485 0.112 0.1755 0.8421 0.8739 0.9056 0.9374 0.8897 0.9374 0.985 1 0.9374 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0215 0.0692 0 0.0374 0.1009 0.1644 0.8301 0.8619 0.8936 0.9254 0.8777 0.9254 0.973 1 0.9254 0.9888 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0225 0.0543 0.0067 0.0543 0.1019 0.1495 0.0543 0.1178 0.1813 0.2448 0.9144 0.9461 0.9779 1 0.962 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0017 0.0334 0 0.0334 0.0811 0.1287 0.0334 0.0969 0.1604 0.2239 0.8919 0.9236 0.9554 0.9871 0.9395 0.9871 1 1 0.9871 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0168 0 0.0168 0.0644 0.112 0.0168 0.0803 0.1438 0.2073 0.8739 0.9056 0.9374 0.9691 0.9215 0.9691 1 1 0.9691 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0057 0 0.0057 0.0533 0.1009 0.0057 0.0692 0.1327 0.1961 0.8619 0.8936 0.9254 0.9571 0.9095 0.9571 1 1 0.9571 1 1 1]);
+dbn.CPD{node.CKND_12_ULT} = tabular_CPD(dbn, node.CKND_12_ULT, [0.9524 0.9127 0.873 0 0 0 0 0 0 0.9444 0.9048 0.8651 0 0 0 0 0 0 0.9286 0.8889 0.8492 0 0 0 0 0 0 0.0476 0.0873 0.127 0.9921 0.9524 0.9127 0.0317 0 0 0.0556 0.0952 0.1349 0.9841 0.9444 0.9048 0.0238 0 0 0.0714 0.1111 0.1508 0.9683 0.9286 0.8889 0.0079 0 0 0 0 0 0.0079 0.0476 0.0873 0.9683 1 1 0 0 0 0.0159 0.0556 0.0952 0.9762 1 1 0 0 0 0.0317 0.0714 0.1111 0.9921 1 1]);
+dbn.CPD{node.CNOD_12_ULT} = tabular_CPD(dbn, node.CNOD_12_ULT, [1 1 1 1 0.3675 0.4905 0.5862 0.6627 0 0 0 0 0 0 0 0 1 1 1 1 0.2405 0.3635 0.4592 0.5358 0 0 0 0 0 0 0 0 0.8893 0.9816 1 1 0.1135 0.2366 0.3322 0.4088 0 0 0 0 0 0 0 0 0.6354 0.7276 0.7994 0.8568 0 0 0.0783 0.1548 0 0 0 0 0 0 0 0 0 0 0 0 0.6325 0.5095 0.4138 0.3373 0.2972 0.3711 0.4285 0.4744 0 0 0 0 0 0 0 0 0.7595 0.6365 0.5408 0.4642 0.2338 0.3076 0.365 0.4109 0 0 0 0 0.1107 0.0184 0 0 0.8865 0.7634 0.6678 0.5912 0.1703 0.2441 0.3015 0.3474 0 0 0 0 0.3646 0.2724 0.2006 0.1432 0.9298 0.9913 0.9217 0.8452 0.0433 0.1171 0.1745 0.2204 0 0 0 0 0 0 0 0 0 0 0 0 0.7028 0.6289 0.5715 0.5256 0.2129 0.2539 0.2858 0.3113 0 0 0 0 0 0 0 0 0.7662 0.6924 0.635 0.5891 0.1812 0.2222 0.2541 0.2796 0 0 0 0 0 0 0 0 0.8297 0.7559 0.6985 0.6526 0.1494 0.1904 0.2223 0.2478 0 0 0 0 0.0702 0.0087 0 0 0.9567 0.8829 0.8255 0.7796 0.0859 0.1269 0.1588 0.1843 0 0 0 0 0 0 0 0 0 0 0 0 0.7871 0.7461 0.7142 0.6887 0 0 0 0 0 0 0 0 0 0 0 0 0.8188 0.7778 0.7459 0.7204 0 0 0 0 0 0 0 0 0 0 0 0 0.8506 0.8096 0.7777 0.7522 0 0 0 0 0 0 0 0 0 0 0 0 0.9141 0.8731 0.8412 0.8157]);
+dbn.CPD{node.CBODN_12_ULT} = tabular_CPD(dbn, node.CBODN_12_ULT, [0.9557 0.9067 0.8577 0.8087 0.0406 0 0 0 0 0 0 0 0 0 0 0 0.9561 0.9071 0.8581 0.809 0.0412 0 0 0 0 0 0 0 0 0 0 0 0.9562 0.9072 0.8582 0.8092 0.0414 0 0 0 0 0 0 0 0 0 0 0 0.9564 0.9073 0.8583 0.8093 0.0416 0 0 0 0 0 0 0 0 0 0 0 0.0443 0.0933 0.1423 0.1913 0.9594 0.9916 0.9426 0.8936 0.1152 0.0662 0.0172 0 0 0 0 0 0.0439 0.0929 0.1419 0.191 0.9588 0.9922 0.9432 0.8942 0.116 0.067 0.018 0 0 0 0 0 0.0438 0.0928 0.1418 0.1908 0.9586 0.9924 0.9434 0.8944 0.1163 0.0673 0.0183 0 0 0 0 0 0.0436 0.0927 0.1417 0.1907 0.9584 0.9926 0.9436 0.8946 0.1166 0.0676 0.0185 0 0 0 0 0 0 0 0 0 0 0.0084 0.0574 0.1064 0.8848 0.9338 0.9828 0.9682 0.1835 0.1344 0.0854 0.0364 0 0 0 0 0 0.0078 0.0568 0.1058 0.884 0.933 0.982 0.969 0.1844 0.1354 0.0863 0.0373 0 0 0 0 0 0.0076 0.0566 0.1056 0.8837 0.9327 0.9817 0.9693 0.1847 0.1357 0.0867 0.0377 0 0 0 0 0 0.0074 0.0564 0.1054 0.8834 0.9324 0.9815 0.9695 0.185 0.136 0.087 0.038 0 0 0 0 0 0 0 0 0 0 0 0.0318 0.8165 0.8656 0.9146 0.9636 0 0 0 0 0 0 0 0 0 0 0 0.031 0.8156 0.8646 0.9137 0.9627 0 0 0 0 0 0 0 0 0 0 0 0.0307 0.8153 0.8643 0.9133 0.9623 0 0 0 0 0 0 0 0 0 0 0 0.0305 0.815 0.864 0.913 0.962]);
+dbn.CPD{node.CKNN_12_ULT} = tabular_CPD(dbn, node.CKNN_12_ULT, [1 1 0.8234 0.4459 0.2499 0.0538 0 0 0 0 0 0.1766 0.5541 0.7501 0.9462 0.3627 0.2646 0.1666 0 0 0 0 0 0 0.6373 0.7354 0.8334]);
+dbn.CPD{node.CNON_12_ULT} = tabular_CPD(dbn, node.CNON_12_ULT, [0.9555 0.9432 0.9187 0.8697 0.9618 0.9495 0.925 0.876 0.9662 0.954 0.9295 0.8804 0.9696 0.9573 0.9328 0.8838 0.9102 0.8979 0.8734 0.8244 0.9164 0.9042 0.8797 0.8306 0.9209 0.9086 0.8841 0.8351 0.9243 0.912 0.8875 0.8385 0.8648 0.8526 0.8281 0.779 0.8711 0.8588 0.8343 0.7853 0.8756 0.8633 0.8388 0.7898 0.8789 0.8667 0.8422 0.7931 0.0056 0 0 0 0.0125 0.0003 0 0 0.0175 0.0052 0 0 0.0212 0.009 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0445 0.0568 0.0813 0.1303 0.0382 0.0505 0.075 0.124 0.0338 0.046 0.0705 0.1196 0.0304 0.0427 0.0672 0.1162 0.0898 0.1021 0.1266 0.1756 0.0836 0.0958 0.1203 0.1694 0.0791 0.0914 0.1159 0.1649 0.0757 0.088 0.1125 0.1615 0.1352 0.1474 0.1719 0.221 0.1289 0.1412 0.1657 0.2147 0.1244 0.1367 0.1612 0.2102 0.1211 0.1333 0.1578 0.2069 0.9944 0.9933 0.9688 0.9198 0.9875 0.9997 0.9758 0.9267 0.9825 0.9948 0.9807 0.9317 0.9788 0.991 0.9845 0.9354 0.9602 0.948 0.9235 0.8744 0.9672 0.9549 0.9304 0.8814 0.9722 0.9599 0.9354 0.8864 0.9759 0.9636 0.9391 0.8901 0.9149 0.9026 0.8781 0.8291 0.9219 0.9096 0.8851 0.8361 0.9268 0.9146 0.8901 0.841 0.9306 0.9183 0.8938 0.8448 0.055 0.0427 0.0182 0 0.0622 0.05 0.0254 0 0.0674 0.0551 0.0306 0 0.0712 0.059 0.0345 0 0.0096 0 0 0 0.0169 0.0046 0 0 0.022 0.0098 0 0 0.0259 0.0137 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0067 0.0312 0.0802 0 0 0.0242 0.0733 0 0 0.0193 0.0683 0 0 0.0155 0.0646 0.0398 0.052 0.0765 0.1256 0.0328 0.0451 0.0696 0.1186 0.0278 0.0401 0.0646 0.1136 0.0241 0.0364 0.0609 0.1099 0.0851 0.0974 0.1219 0.1709 0.0781 0.0904 0.1149 0.1639 0.0732 0.0854 0.1099 0.159 0.0694 0.0817 0.1062 0.1552 0.945 0.9573 0.9818 0.9846 0.9378 0.95 0.9746 0.9882 0.9326 0.9449 0.9694 0.9908 0.9288 0.941 0.9655 0.9927 0.9904 0.9987 0.9864 0.9619 0.9831 0.9954 0.9901 0.9655 0.978 0.9902 0.9926 0.9681 0.9741 0.9863 0.9946 0.9701 0.9822 0.976 0.9638 0.9393 0.9858 0.9796 0.9674 0.9429 0.9884 0.9822 0.97 0.9455 0.9903 0.9842 0.9719 0.9474 0.0767 0.0706 0.0583 0.0338 0.0804 0.0743 0.062 0.0375 0.0831 0.0769 0.0647 0.0402 0.0851 0.0789 0.0667 0.0422 0.054 0.0479 0.0356 0.0111 0.0577 0.0516 0.0394 0.0149 0.0604 0.0543 0.042 0.0175 0.0624 0.0563 0.044 0.0195 0.0313 0.0252 0.013 0 0.0351 0.0289 0.0167 0 0.0377 0.0316 0.0194 0 0.0397 0.0336 0.0214 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0154 0 0 0 0.0118 0 0 0 0.0092 0 0 0 0.0073 0 0.0013 0.0136 0.0381 0 0 0.0099 0.0345 0 0 0.0074 0.0319 0 0 0.0054 0.0299 0.0178 0.024 0.0362 0.0607 0.0142 0.0204 0.0326 0.0571 0.0116 0.0178 0.03 0.0545 0.0097 0.0158 0.0281 0.0526 0.9233 0.9294 0.9417 0.9662 0.9196 0.9257 0.938 0.9625 0.9169 0.9231 0.9353 0.9598 0.9149 0.9211 0.9333 0.9578 0.946 0.9521 0.9644 0.9889 0.9423 0.9484 0.9606 0.9851 0.9396 0.9457 0.958 0.9825 0.9376 0.9437 0.956 0.9805 0.9687 0.9748 0.987 1 0.9649 0.9711 0.9833 1 0.9623 0.9684 0.9806 1 0.9603 0.9664 0.9786 1]);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_ps_from_clqs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function mk_ps_from_clqs(dbn, T, cliques, dir)
+
+% Draw multiple copies of the DBN,
+% and indicate the nodes in each clique by shading the nodes.
+% Generate a series of color postscript files,
+% or, if dir=[], displays them to the screen and pauses.
+
+if isempty(dir)
+  print_to_file = 0;
+else
+  print_to_file = 1;
+end
+
+if print_to_file, cd(dir), end
+flip = 1;
+clf;
+[dummyx, dummyy, h] = draw_dbn(dbn.intra, dbn.inter, flip, T, -1);
+
+C = length(cliques);
+
+% nodes = [];
+% for i=1:C
+%   cl = cliques{i};
+%   nodes = [nodes cl(:)'];
+% end
+%nodes = unique(nodes);
+ss = length(dbn.intra);
+nodes = 1:(ss*T);
+
+for c=1:C
+  for i=cliques{c}
+    set(h(i,2), 'facecolor', 'r'); 
+  end
+  rest = mysetdiff(nodes, cliques{c});
+  for i=rest
+    set(h(i,2), 'facecolor', 'w'); 
+  end
+  if print_to_file
+    print(gcf, '-depsc', sprintf('clq%d.ps', c))
+  else
+   disp(['clique ' num2str(c) ' = ' num2str(cliques{c}) '; hit key for next'])
+    pause
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_uffe_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function bnet = mk_uffe_dbn()
+
+% Make the Uffe DBN from fig 3.4 p55 of my thesis
+
+ss = 4;
+intra = zeros(ss,ss);
+intra(1,[2 3])=1;
+intra(2,3)=1;
+intra(3,4)=1;
+inter = zeros(ss,ss);
+inter(1,1)=1;
+inter(4,4)=1;
+ns = 2*ones(1,ss);
+bnet = mk_dbn(intra, inter, ns);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/mk_water_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+function bnet = mk_water_dbn(discrete_obs, obs_leaves)
+% MK_WATER_DBN
+% bnet = mk_water_dbn(discrete_obs, obs_leaves)
+%
+% If discrete_obs = 1 (default), the leaves are binary, else scalar Gaussians
+% If obs_leaves = 1, all the leaves are observed, otherwise rnd nodes are observed
+%
+% This is a model of the biological processes of a water purification plant, developed
+% by Finn V. Jensen, Uffe Kjærulff, Kristian G. Olesen, and Jan Pedersen.
+% See http://www-nt.cs.berkeley.edu/home/nir/public_html/Repository/water.htm
+% See also Boyen and Koller, "Tractable Inference for Complex Stochastic Processes", UAI98
+
+if nargin < 1, discrete_obs = 1; end
+if nargin < 1, obs_leaves = 1; end
+
+ss = 12;
+intra = zeros(ss);
+intra(1,9) = 1;
+intra(3,10) = 1;
+intra(4,11) = 1;
+intra(8,12) = 1;
+
+inter = zeros(ss);
+inter(1, [1 3]) = 1;
+inter(2, [2 3 7]) = 1;
+inter(3, [3 4 5]) = 1;
+inter(4, [3 4 6]) = 1;
+inter(5, [3 5 6]) = 1;
+inter(6, [4 5 6]) = 1;
+inter(7, [7 8]) = 1;
+inter(8, [6 7 8]) = 1;
+
+if obs_leaves
+  onodes = 9:12; % leaves
+else
+  onodes = [1 5 9:12]; % throw in some other nodes
+end
+hnodes = 1:8;
+if discrete_obs
+  ns = 2*ones(1 ,ss);
+  dnodes = 1:ss;
+else
+  ns = [2*ones(1,length(hnodes)) 1*ones(length(onodes))];
+  dnodes = hnodes;
+end
+
+eclass1 = 1:12;
+eclass2 = [13:20 9:12];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2, ...
+	      'observed', onodes);
+if discrete_obs
+  for i=1:max(eclass2)
+    bnet.CPD{i} = tabular_CPD(bnet, i);
+  end
+else
+  for i=hnodes(:)'
+    bnet.CPD{i} = tabular_CPD(bnet, i);
+  end
+  for i=onodes(:)'
+    bnet.CPD{i} = gaussian_CPD(bnet, i);
+  end
+  for i=hnodes(:)'+ss
+    bnet.CPD{i} = tabular_CPD(bnet, i);
+  end
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/orig_water1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+% Compare the speeds of various inference engines on the water DBN
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+%bnet = mk_water_dbn;
+bnet = mk_orig_water_dbn;
+
+T = 3;
+engine = {};
+%engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+%engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet));
+%engine{end+1} = jtree_dbn_inf_engine(bnet);
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T);
+engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1],[2],[3],[4],[5],[6],[7],[8]}); %ff
+engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1 2],[3 4 5 6],[7 8]}); %manually designed marginally independent by BK
+engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1:5], [3:7], [7:8]}); %manually designed conditionally independent by BK
+engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1 3], [2 3 7], [3 5], [3 4 7], [6 7 8]}); %automatically found using TJTs offline 
+engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1 3 5], [2 3 5 7], [3 4 7], [4 6 7], [6 7 8]}); %automatically found using TJTs offline 
+engine{end+1} = cbk_inf_engine(bnet, 'clusters', {[1 3 4 5], [2 3 4 7 8], [4 6 7 8]}); %automatically found using TJTs offline 
+
+% bk_inf_engine yields exactly the same results for the marginally independent cases. 
+%engine{end+1} = bk_inf_engine(bnet, 'clusters', 'ff');
+%engine{end+1} = bk_inf_engine(bnet, 'clusters', { [1 2], [3 4 5 6], [7 8] });
+
+
+inf_time = cmp_inference_dbn(bnet, engine, T, 'exact', 1)
+learning_time = cmp_learning_dbn(bnet, engine, T, 'exact', 1)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/reveal1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+% Make a DBN with the following inter-connectivity matrix
+%    1
+%   /  \
+%  2   3
+%   \ /
+%    4 
+%    |
+%    5
+% where all arcs point down. In addition, there are persistence arcs from each node to itself.
+% There are no intra-slice connections.
+% Nodes have noisy-or CPDs.
+% Node 1 turns on spontaneously due to its leaky source.
+% This effect trickles down to the other nodes in the order shown.
+% All the other nodes inhibit their leaks.
+% None of the nodes inhibit the connection from themselves, so that once they are on, they remain
+% on (persistence).
+%
+% This model was used in the experiments reported in
+% - "Learning the structure of DBNs", Friedman, Murphy and Russell, UAI 1998.
+% where the structure was learned even in the presence of missing data.
+% In that paper, we used the structural EM algorithm.
+% Here, we assume full observability and tabular CPDs for the learner, so we can use a much
+% simpler learning algorithm.
+
+ss = 5;
+
+inter = eye(ss);
+inter(1,[2 3]) = 1;
+inter(2,4)=1;
+inter(3,4)=1;
+inter(4,5)=1;
+
+intra = zeros(ss);
+ns = 2*ones(1,ss);
+
+bnet = mk_dbn(intra, inter, ns);
+
+% All nodes start out off
+for i=1:ss
+  bnet.CPD{i} = tabular_CPD(bnet, i, [1.0 0.0]');
+end
+
+% The following params correspond to Fig 4a in the UAI 98 paper
+% The first arg is the leak inhibition prob.
+% The vector contains the inhib probs from the parents in the previous slice;
+% the last element is self, which is never inhibited.
+bnet.CPD{1+ss} = noisyor_CPD(bnet, 1+ss, 0.8, 0);
+bnet.CPD{2+ss} = noisyor_CPD(bnet, 2+ss, 1, [0.9 0]);
+bnet.CPD{3+ss} = noisyor_CPD(bnet, 3+ss, 1, [0.8 0]);
+bnet.CPD{4+ss} = noisyor_CPD(bnet, 4+ss, 1, [0.7 0.6 0]);
+bnet.CPD{5+ss} = noisyor_CPD(bnet, 5+ss, 1, [0.5 0]);
+
+
+% Generate some training data
+
+nseqs = 20;
+seqs = cell(1,nseqs);
+T = 30;
+for i=1:nseqs
+  seqs{i} = sample_dbn(bnet, T);
+end
+
+max_fan_in = 3; % let's cheat a little here
+
+% computing num. incorrect edges as a fn of the size of the training set
+%sz = [5 10 15 20];    
+sz = [5 10];    
+h = zeros(1, length(sz));
+for i=1:length(sz)
+  inter2 = learn_struct_dbn_reveal(seqs(1:sz(i)), ns, max_fan_in);
+  h(i) = sum(abs(inter(:)-inter2(:))); % hamming distance
+end
+h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/scg_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+% Test whether stable conditional Gaussian inference works
+% Make a linear dynamical system
+%   X1 -> X2
+%   |     | 
+%   v     v
+%   Y1    Y2 
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+X = 2; % size of hidden state
+Y = 2; % size of observable state
+
+ns = [X Y];
+bnet = mk_dbn(intra, inter, ns, 'discrete', [], 'observed', 2);
+
+x0 = rand(X,1);
+V0 = eye(X);
+C0 = rand(Y,X);
+R0 = eye(Y);
+A0 = rand(X,X);
+Q0 = eye(X);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', x0, 'cov', V0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(Y,1), 'cov', R0, 'weights', C0);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', zeros(X,1), 'cov', Q0, 'weights', A0);
+
+
+T = 5; % fixed length sequences
+
+engine = {};
+engine{end+1} = kalman_inf_engine(bnet);
+engine{end+1} = scg_unrolled_dbn_inf_engine(bnet, T);
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T);
+
+inf_time = cmp_inference_dbn(bnet, engine, T, 'check_ll', 0);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/skf_data_assoc_gmux.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,139 @@
+% We consider a switching Kalman filter of the kind studied
+% by Zoubin Ghahramani, i.e., where the switch node determines
+% which of the hidden chains we get to observe (data association).
+% e.g., for n=2 chains
+% 
+% X1 -> X1
+% | X2 -> X2
+% \ |
+%  v
+%  Y
+%  ^
+%  |
+%  S
+%
+% Y is a gmux (multiplexer) node, where S switches in one of the parents.
+% We differ from Zoubin by not connecting the S nodes over time (which
+% doesn't make sense for data association).
+% Indeed, we assume the S nodes are always observed.
+% 
+%
+% We will track 2 objects (points) moving in the plane, as in BNT/Kalman/tracking_demo.
+% We will alternate between observing them.
+
+nobj = 2;
+N = nobj+2;
+Xs = 1:nobj;
+S = nobj+1;
+Y = nobj+2;
+
+intra = zeros(N,N);
+inter = zeros(N,N);
+intra([Xs S], Y) =1;
+for i=1:nobj
+  inter(Xs(i), Xs(i))=1;
+end
+
+Xsz = 4; % state space = (x y xdot ydot)
+Ysz = 2;
+ns = zeros(1,N);
+ns(Xs) = Xsz;
+ns(Y) = Ysz;
+ns(S) = n;
+
+bnet = mk_dbn(intra, inter, ns, 'discrete', S, 'observed', [S Y]);
+
+% For each object, we have
+% X(t+1) = F X(t) + noise(Q)
+% Y(t) = H X(t) + noise(R)
+F = [1 0 1 0; 0 1 0 1; 0 0 1 0; 0 0 0 1];
+H = [1 0 0 0; 0 1 0 0];
+Q = 1e-3*eye(Xsz);
+%R = 1e-3*eye(Ysz);
+R = eye(Ysz);
+
+% We initialise object 1 moving to the right, and object 2 moving to the left
+% (Here, we assume nobj=2)
+init_state{1} = [10 10 1 0]';
+init_state{2} = [10 -10 -1 0]';
+
+for i=1:nobj
+  bnet.CPD{Xs(i)} = gaussian_CPD(bnet, Xs(i), 'mean', init_state{i}, 'cov', 1e-4*eye(Xsz));
+end
+bnet.CPD{S} = root_CPD(bnet, S); % always observed
+bnet.CPD{Y} = gmux_CPD(bnet, Y, 'cov', repmat(R, [1 1 nobj]), 'weights', repmat(H, [1 1 nobj]));
+% slice 2
+eclass = bnet.equiv_class;
+for i=1:nobj
+  bnet.CPD{eclass(Xs(i), 2)} = gaussian_CPD(bnet, Xs(i)+N, 'mean', zeros(Xsz,1), 'cov', Q, 'weights', F);
+end
+
+% Observe objects at random
+T = 10;
+evidence = cell(N, T);
+data_assoc = sample_discrete(normalise(ones(1,nobj)), 1, T);
+evidence(S,:) = num2cell(data_assoc);
+evidence = sample_dbn(bnet, 'evidence', evidence);
+
+% plot the data
+true_state = cell(1,nobj);
+for i=1:nobj
+  true_state{i} = cell2num(evidence(Xs(i), :)); % true_state{i}(:,t) = [x y xdot ydot]'
+end
+obs_pos = cell2num(evidence(Y,:));
+figure(1)
+clf
+hold on
+styles = {'rx', 'go', 'b+', 'k*'};
+for i=1:nobj
+  plot(true_state{i}(1,:), true_state{i}(2,:), styles{i});
+end
+for t=1:T
+  text(obs_pos(1,t), obs_pos(2,t), sprintf('%d', t));
+end
+hold off
+relax_axes(0.1)
+
+
+% Inference
+ev = cell(N,T);
+ev(bnet.observed,:) = evidence(bnet.observed, :);
+
+engines = {};
+engines{end+1} = jtree_dbn_inf_engine(bnet);
+%engines{end+1} = scg_unrolled_dbn_inf_engine(bnet, T);
+engines{end+1} = pearl_unrolled_dbn_inf_engine(bnet);
+E = length(engines);
+
+inferred_state = cell(nobj,E); % inferred_state{i,e}(:,t)
+for e=1:E
+  engines{e} = enter_evidence(engines{e}, ev);
+  for i=1:nobj
+    inferred_state{i,e} = zeros(4, T);
+    for t=1:T
+      m = marginal_nodes(engines{e}, Xs(i), t);
+      inferred_state{i,e}(:,t) = m.mu;
+    end
+  end
+end
+inferred_state{1,1}
+inferred_state{1,2}
+
+% Plot results
+figure(2)
+clf
+hold on
+styles = {'rx', 'go', 'b+', 'k*'};
+nstyles = length(styles);
+c = 1;
+for e=1:E
+  for i=1:nobj
+    plot(inferred_state{i,e}(1,:), inferred_state{i,e}(2,:), styles{mod(c-1,nstyles)+1});
+    c = c + 1;
+  end
+end
+for t=1:T
+  text(obs_pos(1,t), obs_pos(2,t), sprintf('%d', t));
+end
+hold off
+relax_axes(0.1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/viterbi1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+% Compute Viterbi path discrete HMM by different methods
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+Q = 2; % num hidden states
+O = 2; % num observable symbols
+
+ns = [Q O];
+dnodes = 1:2;
+onodes = [2];
+eclass1 = [1 2];
+eclass2 = [3 2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2, ...
+	      'observed', onodes);
+
+for seed=1:10
+rand('state', seed);
+prior = normalise(rand(Q,1));
+transmat = mk_stochastic(rand(Q,Q));
+obsmat = mk_stochastic(rand(Q,O));
+bnet.CPD{1} = tabular_CPD(bnet, 1, prior);
+bnet.CPD{2} = tabular_CPD(bnet, 2, obsmat);
+bnet.CPD{3} = tabular_CPD(bnet, 3, transmat);
+
+
+% Create a sequence
+T = 5; 
+ev = sample_dbn(bnet, T);
+evidence = cell(2,T);
+evidence(2,:) = ev(2,:); % extract observed component
+data = cell2num(ev(2,:));
+
+%obslik = mk_dhmm_obs_lik(data, obsmat);
+obslik = multinomial_prob(data, obsmat);
+path = viterbi_path(prior, transmat, obslik);
+
+engine = {};
+engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+
+mpe = find_mpe(engine{1}, evidence);
+
+assert(isequal(cell2num(mpe(1,:)), path)) % extract values of hidden nodes
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/water1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+% Compare the speeds of various inference engines on the water DBN
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+bnet = mk_water_dbn;
+
+T = 3;
+engine = {};
+engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet));
+engine{end+1} = jtree_dbn_inf_engine(bnet);
+engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T); 
+
+%engine{end+1} = bk_inf_engine(bnet, 'ff', onodes);
+%engine{end+1} = bk_inf_engine(bnet, { [1 2], [3 4 5 6], [7 8] }, onodes);
+
+inf_time = cmp_inference_dbn(bnet, engine, T)
+learning_time = cmp_learning_dbn(bnet, engine, T)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/dynamic/water2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+% Compare the speeds of various inference engines on the water DBN
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+bnet = mk_water_dbn;
+
+T = 3;
+
+engine = {};
+engine{end+1} = smoother_engine(jtree_2TBN_inf_engine(bnet));
+engine{end+1} = smoother_engine(jtree_sparse_2TBN_inf_engine(bnet));
+engine{end+1} = smoother_engine(hmm_2TBN_inf_engine(bnet));
+engine{end+1} = jtree_dbn_inf_engine(bnet);
+%engine{end+1} = jtree_unrolled_dbn_inf_engine(bnet, T); 
+
+%engine{end+1} = bk_inf_engine(bnet, 'ff', onodes);
+%engine{end+1} = bk_inf_engine(bnet, { [1 2], [3 4 5 6], [7 8] }, onodes);
+
+inf_time = cmp_inference_dbn(bnet, engine, T)
+%learning_time = cmp_learning_dbn(bnet, engine, T)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/limids/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/amnio.m/1.1.1.1/Mon Sep 13 03:21:04 2004//
+/asia_dt1.m/1.1.1.1/Mon Jun  7 15:53:54 2004//
+/id1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/oil1.m/1.1.1.1/Mon Sep 13 02:27:08 2004//
+/pigs1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/limids/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/limids
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/limids/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/limids/amnio.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,135 @@
+
+clear all
+B0 = 1; Rtriple = 2; Damnio = 3;
+B1 = 4; Ramnio = 5; Dabort = 6; 
+B2 = 7; U = 8;
+
+N = 8;
+dag = zeros(N,N);
+dag(B0, [Rtriple B1 Ramnio]) = 1;
+dag(Rtriple, [Damnio Dabort]) = 1;
+dag(Damnio, [B1 Ramnio]) = 1;
+dag(B1, B2) = 1;
+dag(Ramnio, [Dabort U]) = 1;
+dag(Dabort, B2) = 1;
+dag(B2, U) = 1;
+
+
+
+ns = zeros(1,N);
+ns(B0) = 2;
+ns(B1) = 3;
+ns(B2) = 4;
+ns(Rtriple) = 2;
+ns(Ramnio) = 3;
+ns(Damnio) = 2;
+ns(Dabort) = 2;
+ns(U) = 1;
+
+limid = mk_limid(dag, ns, 'chance', [B0 B1 B2], ...
+		 'decision', [Damnio Dabort], 'utility', [U]);
+
+% states of nature
+healthy = 1; downs = 2; miscarry = 3; aborted = 4;
+% test results
+pos = 1; neg = 2; unk = 3;
+% actions
+yes = 1; no = 2;
+
+% Prior probability baby has downs syndrome
+tbl = zeros(2,1);
+p = 1/1000; % from www.downs-syndrome.org.uk figure
+p = 24/10000; % www-personal.umich.edu/~bobwolfe/560/review/Downs.pdf (for women agen 35-40)
+tbl(healthy) = 1-p;
+tbl(downs) = p;
+limid.CPD{B0} = tabular_CPD(limid, B0, tbl);
+
+% Reliability of triple screen test
+% Unreliable sensor
+% B0 -> Rtriple
+tbl = zeros(2,2); % Rtriple = pos, neg
+p = 0.5;  % high false positive rate (guess)
+tbl(healthy, :) = [p 1-p];
+p = 0.6; % low detection rate (march of dimes figure)
+tbl(downs, :) = [p 1-p]; 
+limid.CPD{Rtriple} = tabular_CPD(limid, Rtriple, tbl);
+
+limid.CPD{Damnio} = tabular_decision_node(limid, Damnio);
+
+% Effect of amnio on baby  B0,Damnio -> B1
+ % 1/200 risk of miscarry 
+p = 1/200; % (march of dimes figure)
+tbl = zeros(2, 2, 3); % B1 = healthy, downs, miscarry
+tbl(healthy, no, :) =  [1     0     0];
+tbl(downs, no, :) =    [0     1     0];
+tbl(healthy, yes, :) = [1-p     0   p];
+tbl(downs, yes, :) =   [0     1-p   p];
+limid.CPD{B1} = tabular_CPD(limid, B1, tbl);
+
+% Reliability of amnio  B0, Damnio -> Ramnio
+% Perfect sensor
+tbl = zeros(2,2,3); % Ramnio = pos, neg, unk
+tbl(:, no, :) =        repmat([0 0 1], 2 ,1);
+tbl(healthy, yes, :) = [0 1 0]; 
+tbl(downs, yes, :) =   [1 0 0]; 
+limid.CPD{Ramnio} = tabular_CPD(limid, Ramnio, tbl);
+
+limid.CPD{Dabort} = tabular_decision_node(limid, Dabort);
+
+% Effect of abortion on baby  B1, Dabort -> B2
+tbl = zeros(3, 2, 4); % B2 = healthy, downs, miscarry, aborted
+tbl(:, yes, :) =       repmat([0 0 0 1], 3, 1);
+tbl(healthy, no, :) =  [1 0 0 0];
+tbl(downs, no, :) =    [0 1 0 0];
+tbl(miscarry, no, :) = [0 0 1 0];
+limid.CPD{B2} = tabular_CPD(limid, B2, tbl);
+
+% Utility U(Ramnio, B2)
+tbl = zeros(3, 4);
+tbl(:, healthy) = 5000;
+tbl(:, downs) = -50000;
+tbl(:, miscarry) = -1000;
+tbl(:, aborted) = -1000;
+
+if 0
+%tbl(unk, miscarry) = 0; % this case is impossible
+tbl(pos, miscarry) = -1;
+tbl(neg, miscarry) = -1000;
+if 1
+  tbl(unk, aborted) = -100;
+  tbl(pos, aborted) = -1;
+  tbl(neg, aborted) = -500;
+else % pro-life utility fn
+  tbl(unk, aborted) = -500000;
+  tbl(pos, aborted) = -500000;
+  tbl(neg, aborted) = -500000;
+end 
+end
+
+limid.CPD{U} = tabular_utility_node(limid, U,  tbl);
+
+
+
+engine = jtree_limid_inf_engine(limid);
+[strategy, MEU] = solve_limid(engine);
+
+% Rtriple U(Damnio=1=yes)  U(Damnio=2=no)
+% 1=pos    0               1
+% 2=neg    0               1
+dispcpt(strategy{Damnio})
+if isequal(strategy{Damnio}(1,:), strategy{Damnio}(2,:))
+  % Rtriple result irrelevant
+  doAmnio = argmax(strategy{Damnio}(1,:))
+else
+  doAmnio = 1;
+end
+
+% Rtriple Ramnio U(Dabort=yes=1) U(Dabort=no=2)
+% 1=pos   1=pos  1               0
+% 2=neg   1=pos  1               0
+% 1=pos   2=neg  0               1
+% 2=neg   2=neg  0               1
+% 1=pos   3=unk  0               1
+% 2=neg   3=unk  0               1
+dispcpt(strategy{Dabort})
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/limids/asia_dt1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,100 @@
+% decision theoretic version of asia network
+% Cowell et al, p177
+% We explicitely add the no-forgetting arcs.
+
+Smoking = 1;
+VisitToAsia = 2;
+Bronchitis = 3;
+LungCancer = 4;
+TB = 5;
+Do_Xray = 6;
+TBorCancer = 7;
+Util_Xray = 8;
+Dys = 9;
+posXray = 10;
+Do_Hosp = 11;
+Util_Hosp = 12;
+
+n = 12;
+dag = zeros(n);
+dag(Smoking, [Bronchitis LungCancer]) = 1;
+dag(VisitToAsia, [TB Do_Xray Do_Hosp]) = 1;
+dag(Bronchitis, Dys) = 1;
+dag(LungCancer, [Util_Hosp TBorCancer]) = 1;
+dag(TB, [Util_Hosp TBorCancer Util_Xray]) = 1;
+dag(Do_Xray, [posXray Util_Xray Do_Hosp]) = 1;
+dag(TBorCancer, [Dys posXray]) = 1;
+dag(Dys, Do_Hosp) = 1;
+dag(posXray, Do_Hosp) = 1;
+dag(Do_Hosp, Util_Hosp) = 1;
+
+dnodes = [Do_Xray Do_Hosp];
+unodes = [Util_Xray Util_Hosp];
+cnodes = mysetdiff(1:n, [dnodes unodes]); % chance nodes
+ns = 2*ones(1,n);
+ns(unodes) = 1;
+limid = mk_limid(dag, ns, 'chance', cnodes, 'decision', dnodes, 'utility', unodes);
+
+% 1 = yes, 2 = no
+limid.CPD{VisitToAsia} = tabular_CPD(limid, VisitToAsia, [0.01 0.99]);
+limid.CPD{Bronchitis} = tabular_CPD(limid, Bronchitis, [0.6 0.3  0.4 0.7]);
+limid.CPD{Dys} = tabular_CPD(limid, Dys, [0.9 0.7 0.8 0.1  0.1 0.3 0.2 0.9]);
+limid.CPD{TBorCancer} = tabular_CPD(limid, TBorCancer, [1 1 1 0  0 0 0 1]);
+
+limid.CPD{LungCancer} = tabular_CPD(limid, LungCancer, [0.1 0.01  0.9 0.99]);
+limid.CPD{Smoking} = tabular_CPD(limid, Smoking, [0.5 0.5]);
+limid.CPD{TB} = tabular_CPD(limid, TB, [0.05 0.01  0.95 0.99]);
+limid.CPD{posXray} = tabular_CPD(limid, posXray, [0.98 0.5 0.05 0.5  0.02 0.5 0.95 0.5]);
+
+limid.CPD{Util_Hosp} = tabular_utility_node(limid, Util_Hosp, [180 120 160 15  2 4 0 40]);
+limid.CPD{Util_Xray} = tabular_utility_node(limid, Util_Xray, [0 1 10 10]);
+
+for i=dnodes(:)'
+  limid.CPD{i} = tabular_decision_node(limid, i);
+end
+
+engines = {};
+engines{end+1} = global_joint_inf_engine(limid);
+engines{end+1} = jtree_limid_inf_engine(limid);
+%engines{end+1} = belprop_inf_engine(limid);
+
+exact = [1 2];
+%approx = 3;
+approx = [];
+
+
+NE = length(engines);
+MEU = zeros(1, NE);
+niter = zeros(1, NE);
+strategy = cell(1, NE);
+
+tol = 1e-2;
+for e=1:length(engines)
+  [strategy{e}, MEU(e), niter(e)] = solve_limid(engines{e});
+end
+
+for e=exact(:)'
+  assert(approxeq(MEU(e), 47.49, tol))
+  assert(isequal(strategy{e}{Do_Xray}(:)', [1 0 0 1]))
+  
+  % Check the hosptialize strategy is correct (p180)
+  % We assume the patient has not been to Asia and therefore did not have an Xray.
+  % In this case it is optimal not to hospitalize regardless of whether the patient has
+  % dyspnoea or not (and of course regardless of the value of pos_xray).
+  asia = 2;
+  do_xray = 2;
+  for dys = 1:2
+    for pos_xray = 1:2
+      assert(argmax(squeeze(strategy{e}{Do_Hosp}(asia, do_xray, dys, pos_xray, :))) == 2)
+    end
+  end
+end
+
+
+for e=approx(:)'
+  approxeq(strategy{exact(1)}{Do_Xray}, strategy{e}{Do_Xray})
+  approxeq(strategy{exact(1)}{Do_Hosp}, strategy{e}{Do_Hosp})
+end
+
+ 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/limids/id1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+% influence diagram with no loops
+%
+% rv  dec
+%  \  /
+%  utility
+
+N = 3;
+dag = zeros(N);
+X = 1; D = 2; U = 3;
+dag([X D], U)=1;
+
+ns = zeros(1,N);
+ns(X) = 2; ns(D) = 2; ns(U) = 1;
+
+limid = mk_limid(dag, ns, 'chance', X, 'decision', D, 'utility', U);
+
+% use random params
+limid.CPD{X} = tabular_CPD(limid, X);
+limid.CPD{D} = tabular_decision_node(limid, D);
+limid.CPD{U} = tabular_utility_node(limid, U);
+
+%fname = '/home/cs/murphyk/matlab/Misc/loopybel.txt';
+global BNT_HOME
+fname = sprintf('%s/loopybel.txt', BNT_HOME);
+
+engines = {};
+engines{end+1} = global_joint_inf_engine(limid);
+engines{end+1} = jtree_limid_inf_engine(limid);
+%engines{end+1} = belprop_inf_engine(limid, 'max_iter', 2*N, 'filename', fname);
+engines{end+1} = belprop_inf_engine(limid, 'max_iter', 2*N);
+
+exact = [1 2];
+approx = 3;
+
+E = length(engines);
+strategy = cell(1, E);
+MEU = zeros(1, E);
+for e=1:E
+  [strategy{e}, MEU(e)] = solve_limid(engines{e});
+  MEU
+end
+MEU
+
+for e=exact(:)'
+  assert(approxeq(strategy{exact(1)}{D}, strategy{e}{D}))
+end
+
+for e=approx(:)'
+  approxeq(strategy{exact(1)}{D}, strategy{e}{D})
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/limids/oil1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,91 @@
+% oil wildcatter influence diagram in Cowell et al p172
+
+% T = test for oil?
+% UT = utility (negative cost) of testing
+% O = amount of oil = Dry, Wet or Soaking
+% R = results of test = NoStrucure, OpenStructure, ClosedStructure or NoResult
+% D = drill?
+% UD = utility of drilling
+
+% Decision sequence = T R D O
+
+T = 1; UT = 2; O = 3; R = 4; D = 5; UD = 6;
+N = 6;
+dag = zeros(N);
+dag(T, [UT R D]) = 1;
+dag(O, [R UD]) = 1;
+dag(R, D) = 1;
+dag(D, UD) = 1;
+
+ns = zeros(1,N);
+ns(O) = 3; ns(R) = 4; ns(T) = 2; ns(D) = 2; ns(UT) = 1; ns(UD) = 1;
+
+limid = mk_limid(dag, ns, 'chance', [O R], 'decision', [T D], 'utility', [UT UD]);
+
+limid.CPD{O} = tabular_CPD(limid, O, [0.5 0.3 0.2]);
+tbl = [0.6 0 0.3 0 0.1 0  0.3 0 0.4 0 0.4 0  0.1 0 0.3 0 0.5 0  0 1 0 1 0 1];
+limid.CPD{R} = tabular_CPD(limid, R, tbl);
+
+limid.CPD{UT} = tabular_utility_node(limid, UT,  [-10 0]);
+limid.CPD{UD} = tabular_utility_node(limid, UD, [-70 50 200  0 0 0]);
+
+if 1
+  % start with uniform policies
+  limid.CPD{T} = tabular_decision_node(limid, T);
+  limid.CPD{D} = tabular_decision_node(limid, D);
+else
+  % hard code optimal policies
+  limid.CPD{T} = tabular_decision_node(limid, T, [1.0 0.0]);        
+  a = 0.5; b = 1-a; % arbitrary value
+  tbl = myreshape([0 a 1 a 1 a a a  1 b 0 b 0 b b b], ns([T R D]));
+  limid.CPD{D} = tabular_decision_node(limid, D,  tbl);
+end
+
+%fname = '/home/cs/murphyk/matlab/Misc/loopybel.txt';
+
+engines = {};
+engines{end+1} = global_joint_inf_engine(limid);
+engines{end+1} = jtree_limid_inf_engine(limid);
+%engines{end+1} = belprop_inf_engine(limid, 'max_iter', 3*N, 'filename', fname);
+
+exact = [1 2];
+%approx = 3;
+approx = [];
+
+E = length(engines);
+strategy = cell(1, E);
+MEU = zeros(1, E);
+for e=1:E
+  [strategy{e}, MEU(e)] = solve_limid(engines{e});
+  MEU
+end
+MEU
+
+for e=exact(:)'
+  assert(approxeq(MEU(e), 22.5))
+  % U(T=yes)  U(T=no)
+  % 1         0
+  assert(argmax(strategy{e}{T}) == 1); % test = yes
+  t = 1; % test = yes
+  % strategy{D} T       R      U(D=yes=1)  U(D=no=2)
+  %             1=yes   1=noS  0           1         Don't drill
+  %             2=no    1=noS  1           0
+  %             1=yes   2=opS  1           0
+  %             2=no    2=opS  1           0
+  %             1=yes   3=clS  1           0
+  %             2=no    3=clS  1           0
+  %             1=yes   4=unk  1           0
+  %             2=no    4=unk  1           0
+  
+  for r=[2 3] % OpS, ClS
+    assert(argmax(squeeze(strategy{e}{D}(t,r,:))) == 1); % drill = yes
+  end
+  r = 1; % noS
+  assert(argmax(squeeze(strategy{e}{D}(t,r,:))) == 2); % drill = no
+end
+
+
+for e=approx(:)'
+  approxeq(strategy{exact(1)}{T}, strategy{e}{T})
+  approxeq(strategy{exact(1)}{D}, strategy{e}{D})
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/limids/pigs1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,153 @@
+% pigs model from Lauritzen and Nilsson, 2001
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+% we number nodes down and to the right
+h = [1 5 9 13];
+t = [2 6 10];
+d = [3 7 11];
+u = [4 8 12 14];
+
+N = 14;
+dag = zeros(N);
+
+% causal arcs
+for i=1:3
+  dag(h(i), [t(i) h(i+1)]) = 1;
+  dag(d(i), [u(i) h(i+1)]) = 1;
+end
+dag(h(4), u(4)) = 1;
+
+% information arcs
+fig = 2;
+switch fig
+ case 0,
+  % no info arcs
+ case 1,
+   % no-forgetting policy (figure 1)
+   for i=1:3
+     dag(t(i), d(i:3)) = 1;
+   end
+ case 2,
+  % reactive policy (figure 2)
+  for i=1:3
+    dag(t(i), d(i)) = 1;
+  end
+ case 7,
+  % omniscient policy (figure 7: di has access to hidden state h(i-1))
+  dag(t(1), d(1)) = 1;
+  for i=2:3
+    %dag([h(i-1) t(i-1) d(i-1)], d(i)) = 1;
+    dag([h(i-1) d(i-1)], d(i)) = 1; % t(i-1) is redundant given h(i-1)
+  end
+end
+
+
+ns = 2*ones(1,N);
+ns(u) = 1;
+
+% parameter tying
+params = ones(1,N);
+uparam = 1;
+final_uparam = 2;
+tparam = 3;
+h1_param = 4;
+hparam = 5;
+dparams = 6:8;
+
+params(u(1:3)) = uparam;
+params(u(4)) = final_uparam;
+params(t) = tparam;
+params(h(1)) = h1_param;
+params(h(2:end)) = hparam;
+params(d) = dparams;
+
+limid = mk_limid(dag, ns, 'chance', [h t], 'decision', d, 'utility', u, 'equiv_class', params);
+
+% h = 1 means healthy, h = 2 means diseased
+% d = 1 means don't treat, d = 2 means treat
+% t = 1 means test shows healthy, t = 2 means test shows diseased
+
+if 0
+  % use random params
+  limid.CPD{final_uparam} = tabular_utility_node(limid, u(4));
+  limid.CPD{uparam} = tabular_utility_node(limid, u(1));
+  limid.CPD{tparam} = tabular_CPD(limid, t(1));
+  limid.CPD{h1_param} = tabular_CPD(limid, h(1));
+  limid.CPD{hparam} = tabular_CPD(limid, h(2));
+else
+  limid.CPD{final_uparam} = tabular_utility_node(limid, u(4), [1000 300]);
+  limid.CPD{uparam} = tabular_utility_node(limid, u(1), [0 -100]); % costs have negative utility!
+  
+  % h  P(t=1) P(t=2)
+  % 1  0.9   0.1
+  % 2  0.2   0.8
+  limid.CPD{tparam} = tabular_CPD(limid, t(1), [0.9 0.2 0.1 0.8]);
+  
+  % P(h1)
+  limid.CPD{h1_param} = tabular_CPD(limid, h(1), [0.9 0.1]);
+  
+  % hi di P(hj=1) P(hj=2),  j = i+1, i=1:3
+  % 1  1  0.8     0.2
+  % 2  1  0.1     0.9
+  % 1  2  0.9     0.1
+  % 2  2  0.5     0.5
+  limid.CPD{hparam} = tabular_CPD(limid, h(2), [0.8 0.1 0.9 0.5 0.2 0.9 0.1 0.5]);
+end
+
+% Decision nodes get assigned uniform policies by default
+for i=1:3
+  limid.CPD{dparams(i)} = tabular_decision_node(limid, d(i));
+end
+
+
+fname = '/home/cs/murphyk/matlab/Misc/loopybel.txt';
+
+engines = {};
+engines{end+1} = global_joint_inf_engine(limid);
+engines{end+1} = jtree_limid_inf_engine(limid);
+%engines{end+1} = belprop_inf_engine(limid, 'max_iter', 1*N, 'filename', fname, 'tol', 1e-3);
+
+exact = [1 2];
+%approx = 3;
+approx = [];
+
+max_iter = 1;
+order = d(end:-1:1);
+%order = d(1:end);
+
+NE = length(engines);
+MEU = zeros(1, NE);
+niter = zeros(1, NE);
+strategy = cell(1, NE);
+for e=1:NE
+  [strategy{e}, MEU(e), niter(e)] = solve_limid(engines{e}, 'max_iter', max_iter, 'order',  order);
+end
+MEU
+
+% check results match those in the paper (p. 22)
+direct_policy = eye(2); % treat iff test is positive
+never_policy = [1 0; 1 0]; % never treat
+tol = 1e-0; % results in paper are reported to 0dp
+for e=exact(:)'
+  switch fig
+   case 2, % reactive policy
+    assert(approxeq(MEU(e), 727, tol));
+    assert(approxeq(strategy{e}{d(1)}(:), never_policy(:)))
+    assert(approxeq(strategy{e}{d(2)}(:), direct_policy(:)))
+    assert(approxeq(strategy{e}{d(3)}(:), direct_policy(:)))
+   case 1, assert(approxeq(MEU(e), 729, tol));
+   case 7, assert(approxeq(MEU(e), 732, tol));
+  end
+end
+
+
+for e=approx(:)'
+  for i=1:3
+    approxeq(strategy{exact(1)}{d(i)}, strategy{e}{d(i)})
+    dispcpt(strategy{e}{d(i)})
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+/belprop_loop1_discrete.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/belprop_loop1_gauss.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/belprop_loopy_cg.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/belprop_loopy_discrete.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/belprop_loopy_gauss.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/belprop_polytree_cg.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/belprop_polytree_discrete.m/1.1.1.1/Tue Oct  1 18:21:26 2002//
+/belprop_polytree_gauss.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/bp1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/gmux1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static/Belprop
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_loop1_discrete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+% Compare different loopy belief propagation algorithms on a graph with a single loop.
+% LBP should give exact results if it converges.
+
+N = 4;
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+ns = 2*ones(1,N); 
+bnet = mk_bnet(dag, ns);
+for i=1:N
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+engines = {};
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = pearl_inf_engine(bnet, 'protocol', 'parallel');
+engines{end+1} = belprop_fg_inf_engine(bnet_to_fgraph(bnet));
+engines{end+1} = belprop_inf_engine(bnet, 'protocol', 'parallel');
+
+% belprop_fg does not support marginal_family
+% belprop_fg and belprop do not support loglik even on discrete
+[time, engines] = cmp_inference_static(bnet, engines, 'maximize', 0, 'exact', 1, 'observed', 2, ...
+				   'check_ll', 0, 'singletons_only', 1, 'check_converged', 2:4);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_loop1_gauss.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+% Compare different loopy belief propagation algorithms on a graph with a single loop.
+% LBP should give exact results if it converges.
+
+N = 4;
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+ns = 2*ones(1,N); 
+bnet = mk_bnet(dag, ns, 'discrete', []);
+for i=1:N
+  bnet.CPD{i} = gaussian_CPD(bnet, i);
+end
+
+engines = {};
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = pearl_inf_engine(bnet, 'protocol', 'parallel', 'max_iter', 20);
+%engines{end+1} = pearl_inf_engine(bnet, 'protocol', 'parallel', 'max_iter', 20, 'filename', ...
+%				  '/home/eecs/murphyk/matlab/gausspearl.txt', 'tol', 1e-5);
+
+% pearl gaussian does not compute loglik
+[time, engines] = cmp_inference_static(bnet, engines, 'maximize', 0, 'exact', 1, 'observed', [2], ...
+				   'check_ll', 0, 'singletons_only', 0, 'check_converged', [2]);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_loopy_cg.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+% Same as cg1, except we assume all discretes are observed,
+% and use loopy for approximate inference.
+
+ns = 2*ones(1,9);
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+dnodes = [B F W];
+cnodes = mysetdiff(1:n, dnodes);
+
+%bnet  = mk_incinerator_bnet(ns);
+bnet  = mk_incinerator_bnet;
+
+bnet.observed = [dnodes E];
+
+engines = {};
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = pearl_inf_engine(bnet, 'protocol', 'parallel');
+nengines = length(engines);
+
+
+[time, engines] = cmp_inference_static(bnet, engines, 'maximize', 0, 'check_ll', 0, ...
+				      'singletons_only', 0, 'exact', 1, 'check_converged', 2);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_loopy_discrete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+% Compare different loopy belief propagation algorithms on a graph with many loops
+
+bnet = mk_asia_bnet('orig');
+
+engines = {};
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = pearl_inf_engine(bnet, 'protocol', 'parallel');
+engines{end+1} = belprop_fg_inf_engine(bnet_to_fgraph(bnet));
+engines{end+1} = belprop_inf_engine(bnet, 'protocol', 'parallel');
+
+[time, engines] = cmp_inference_static(bnet, engines, 'maximize', 0, 'exact', 1, 'observed', [1 3 5], ...
+				   'check_ll', 0, 'singletons_only', 1, 'check_converged', 2:4);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_loopy_gauss.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+% Compare different loopy belief propagation algorithms on a graph with many loops
+% If LBP converges, the means should be exact
+
+bnet = mk_asia_bnet('gauss');
+
+engines = {};
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = pearl_inf_engine(bnet, 'protocol', 'parallel');
+
+[time, engines] = cmp_inference_static(bnet, engines, 'maximize', 0, 'exact', 1, 'observed', [1 3 5], ...
+				   'check_ll', 0, 'singletons_only', 0, 'check_converged', 2);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_polytree_cg.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+% Inference on a conditional Gaussian model
+
+% Make the following polytree, where all arcs point down
+
+% 1   2
+%  \ /
+%   3
+%  / \
+% 4   5
+
+N = 5;
+dag = zeros(N,N);
+dag(1,3) = 1;
+dag(2,3) = 1;
+dag(3, [4 5]) = 1;
+
+ns = [2 1 2 1 2];
+
+dnodes = 1;
+%onodes = [1 5];
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'observed', dnodes);
+
+bnet.CPD{1} = tabular_CPD(bnet, 1);
+for i=2:N
+  bnet.CPD{i} = gaussian_CPD(bnet, i);
+end
+
+engine = {};
+engine{end+1} = jtree_inf_engine(bnet);
+engine{end+1} = pearl_inf_engine(bnet, 'protocol', 'parallel');
+
+[time, engine] = cmp_inference_static(bnet, engine, 'maximize', 0, 'check_ll', 0, ...
+				      'singletons_only', 0, 'observed', [1 3]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_polytree_discrete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+% Make the following polytree, where all arcs point down
+
+% 1   2
+%  \ /
+%   3
+%  / \
+% 4   5
+
+N = 5;
+dag = zeros(N,N);
+dag(1,3) = 1;
+dag(2,3) = 1;
+dag(3, [4 5]) = 1;
+
+ns = 2*ones(1,N); % binary nodes
+
+onodes = [1 5];
+
+bnet = mk_bnet(dag, ns, 'observed', onodes);
+
+if 0
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+end
+
+for i=1:N
+  %bnet.CPD{i} = tabular_CPD(bnet, i);
+  bnet.CPD{i} = noisyor_CPD(bnet, i);
+end
+
+engine = {};
+engine{end+1} = jtree_inf_engine(bnet);
+engine{end+1} = pearl_inf_engine(bnet, 'protocol', 'tree');
+engine{end+1} = pearl_inf_engine(bnet, 'protocol', 'parallel');
+
+[err, time] = cmp_inference_static(bnet, engine, 'maximize', 0, 'check_ll', 1);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/belprop_polytree_gauss.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,135 @@
+% Do the example from Satnam Alag's PhD thesis, UCB ME dept 1996 p46
+
+% Make the following polytree, where all arcs point down
+
+% 1   2
+%  \ /
+%   3
+%  / \
+% 4   5
+
+N = 5;
+dag = zeros(N,N);
+dag(1,3) = 1;
+dag(2,3) = 1;
+dag(3, [4 5]) = 1;
+
+ns = [2 1 2 1 2];
+
+bnet = mk_bnet(dag, ns, 'discrete', []);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', [1 0]', 'cov', [4 1; 1 4]);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', 1, 'cov', 1);
+B1 = [1 2; 1 0]; B2 = [2 1]';
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', [0 0]', 'cov', [2 1; 1 1], ...
+			   'weights', [B1 B2]);
+H1 = [1 1];
+bnet.CPD{4} = gaussian_CPD(bnet, 4, 'mean', 0, 'cov', 1, 'weights', H1);
+H2 = [1 0; 1 1];
+bnet.CPD{5} = gaussian_CPD(bnet, 5, 'mean', [0 0]', 'cov', eye(2), 'weights', H2);
+
+engine = {};
+engine{end+1} = jtree_inf_engine(bnet);
+engine{end+1} = pearl_inf_engine(bnet, 'protocol', 'tree');
+engine{end+1} = pearl_inf_engine(bnet, 'protocol', 'parallel');
+E = length(engine);
+
+if 1
+% no evidence
+evidence = cell(1,N);
+ll = zeros(1,E);
+for e=1:E
+  [engine{e}, ll(e)] = enter_evidence(engine{e}, evidence);
+  add_ev = 1;
+  m = marginal_nodes(engine{e}, 3, add_ev);
+  assert(approxeq(m.mu, [3 2]'))
+  assert(approxeq(m.Sigma, [30 9; 9 6]))
+
+  m = marginal_nodes(engine{e}, 4, add_ev);
+  assert(approxeq(m.mu, 5))
+  assert(approxeq(m.Sigma, 55))
+
+  m = marginal_nodes(engine{e}, 5, add_ev);
+  assert(approxeq(m.mu, [3 5]'))
+  assert(approxeq(m.Sigma, [31 39; 39 55]))
+end
+end
+
+if 1
+% evidence on leaf 5
+evidence = cell(1,N);
+evidence{5} = [5 5]';
+for e=1:E
+  [engine{e}, ll(e)] = enter_evidence(engine{e}, evidence);
+  add_ev = 1;
+  m = marginal_nodes(engine{e}, 3, add_ev);
+  assert(approxeq(m.mu, [4.4022 1.0217]'))
+  assert(approxeq(m.Sigma, [0.7011 -0.4891; -0.4891 1.1087]))
+
+  m = marginal_nodes(engine{e}, 4, add_ev);
+  assert(approxeq(m.mu, 5.4239))
+  assert(approxeq(m.Sigma, 1.8315))
+
+  m = marginal_nodes(engine{e}, 1, add_ev);
+  assert(approxeq(m.mu, [0.3478 1.1413]'))
+  assert(approxeq(m.Sigma, [1.8261 -0.1957; -0.1957 1.0924]))
+
+  m = marginal_nodes(engine{e}, 2, add_ev);
+  assert(approxeq(m.mu, 0.9239))
+  assert(approxeq(m.Sigma, 0.8315))
+
+  m = marginal_nodes(engine{e}, 5, add_ev);
+  assert(approxeq(m.mu, evidence{5}))
+  assert(approxeq(m.Sigma, zeros(2)))
+end
+end
+
+if 1
+% evidence on leaf 4 (non-info-state version is uninvertible)
+evidence = cell(1,N);
+evidence{4} = 10;
+for e=1:E
+  [engine{e}, ll(e)] = enter_evidence(engine{e}, evidence);
+  add_ev = 1;
+  m = marginal_nodes(engine{e}, 3, add_ev);
+  assert(approxeq(m.mu, [6.5455 3.3636]'))
+  assert(approxeq(m.Sigma, [2.3455 -1.6364; -1.6364 1.9091]))
+
+  m = marginal_nodes(engine{e}, 5, add_ev);
+  assert(approxeq(m.mu, [6.5455 9.9091]'))
+  assert(approxeq(m.Sigma, [3.3455 0.7091; 0.7091 1.9818]))
+
+  m = marginal_nodes(engine{e}, 1, add_ev);
+  assert(approxeq(m.mu, [1.9091 0.9091]'))
+  assert(approxeq(m.Sigma, [2.1818 -0.8182; -0.8182 2.1818]))
+
+  m = marginal_nodes(engine{e}, 2, add_ev);
+  assert(approxeq(m.mu, 1.2727))
+  assert(approxeq(m.Sigma, 0.8364))
+end
+end
+
+
+if 1
+% evidence on leaves 4,5 and root 2
+evidence = cell(1,N);
+evidence{2} = 0;
+evidence{4} = 10;
+evidence{5} = [5 5]';
+for e=1:E
+  [engine{e}, ll(e)] = enter_evidence(engine{e}, evidence);
+  add_ev = 1;
+  m = marginal_nodes(engine{e}, 3, add_ev);
+  assert(approxeq(m.mu, [4.9964 2.4444]'));
+  assert(approxeq(m.Sigma, [0.6738 -0.5556; -0.5556 0.8889]));
+
+  m = marginal_nodes(engine{e}, 1, add_ev);
+  assert(approxeq(m.mu, [2.2043 1.2151]'));
+  assert(approxeq(m.Sigma, [1.2903 -0.4839; -0.4839 0.8065]));
+end
+end
+
+if 1
+  [time, engine] = cmp_inference_static(bnet, engine, 'maximize', 0, 'check_ll', 0, ...
+				     'singletons_only', 0, 'observed', [1 3 5]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/bp1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+% Compare different loopy belief propagation algorithms on a graph with a single loop.
+% LBP should give exact results if it converges.
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+N = 2;
+dag = zeros(N,N);
+dag(1,2)=1;
+ns = ones(1,N); 
+bnet = mk_bnet(dag, ns, 'discrete', []);
+for i=1:N
+  %bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', 0);
+  bnet.CPD{i} = gaussian_CPD(bnet, i);
+end
+
+engines = {};
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = pearl_inf_engine(bnet, 'protocol', 'tree');
+
+[time, engines] = cmp_inference_static(bnet, engines, 'maximize', 0, 'exact', 1:2, 'observed', [2], ...
+				   'check_ll', 0, 'singletons_only', 1, 'check_converged', []);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Belprop/gmux1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,90 @@
+% Test gmux.
+% The following model, where Y is a gmux node,
+% and M is set to 1, should be equivalent to X1 -> Y
+%
+% X1 Xn M
+% \ |  /
+%   Y
+
+n = 3;
+N = n+2;
+Xs = 1:n;
+M = n+1; 
+Y = n+2;
+dag = zeros(N,N);
+dag([Xs M], Y)=1; 
+
+dnodes = M;
+ns = zeros(1, N);
+sz = 2;
+ns(Xs) = sz;
+ns(M) = n;
+ns(Y) = sz;
+
+bnet = mk_bnet(dag, ns, 'discrete', M, 'observed', [M Y]);
+
+psz = ns(Xs(1));
+selfsz = ns(Y);
+
+W = randn(selfsz, psz);
+mu = randn(selfsz, 1);
+Sigma = eye(selfsz, selfsz);
+
+bnet.CPD{M} = root_CPD(bnet, M);
+for i=Xs(:)'
+  bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', zeros(psz, 1), 'cov', eye(psz, psz));
+end
+bnet.CPD{Y} = gmux_CPD(bnet, Y, 'mean', mu, 'weights', W, 'cov', Sigma);
+  
+evidence = cell(1,N);
+yval = randn(selfsz, 1);
+evidence{Y} = yval;
+m = 2;
+%notm = not(m-1)+1; % only valid for n=2
+notm = mysetdiff(1:n, m);
+evidence{M} = m;
+
+engines = {};
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = pearl_inf_engine(bnet, 'protocol', 'parallel');
+
+for e=1:length(engines)
+  engines{e} = enter_evidence(engines{e}, evidence);
+  mXm{e} = marginal_nodes(engines{e}, Xs(m));
+
+  % Since M=m, only Xm was updated.
+  % Hence the posterior on Xnotm should equal the prior.
+  for i=notm(:)'
+    mXnotm = marginal_nodes(engines{e}, Xs(i));
+    assert(approxeq(mXnotm.mu, zeros(psz,1)))
+    assert(approxeq(mXnotm.Sigma, eye(psz, psz)))
+  end
+end
+
+% Check that all engines give the same posterior
+for e=2:length(engines)
+  assert(approxeq(mXm{e}.mu, mXm{1}.mu))
+  assert(approxeq(mXm{e}.Sigma, mXm{1}.Sigma))
+end
+
+
+% Compute the correct posterior by building Xm -> Y
+
+N = 2;
+dag = zeros(N,N);
+dag(1, 2)=1;
+ns = [psz selfsz];
+bnet = mk_bnet(dag, ns, 'discrete', [], 'observed', 2);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(psz, 1), 'cov', eye(psz, psz));
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', mu, 'cov', Sigma, 'weights', W);
+
+jengine  = jtree_inf_engine(bnet);
+evidence = {[], yval};
+jengine = enter_evidence(jengine, evidence); % apply Bayes rule to invert the arc
+mX = marginal_nodes(jengine, 1);
+
+for e=1:length(engines)
+  assert(approxeq(mX.mu, mXm{e}.mu))
+  assert(approxeq(mX.Sigma, mXm{e}.Sigma))
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/Belief_IOhmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+% Sigmoid Belief IOHMM
+% Here is the model
+%
+%  X \  X \
+%  | |  | |
+%  Q-|->Q-|-> ...
+%  | /  | /
+%  Y    Y
+%
+clear all;
+clc;
+rand('state',0); randn('state',0);
+X = 1; Q = 2; Y = 3;
+% intra time-slice graph
+intra=zeros(3);
+intra(X,[Q Y])=1;
+intra(Q,Y)=1;
+% inter time-slice graph
+inter=zeros(3);
+inter(Q,Q)=1;
+
+ns = [1 3 1]; 
+dnodes = [2];
+eclass1 = [1 2 3];
+eclass2 = [1 4 3];
+bnet = mk_dbn(intra, inter, ns, dnodes, eclass1, eclass2);
+bnet.CPD{1} = root_CPD(bnet, 1);
+% ==========================================================
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{4} = softmax_CPD(bnet, 5, 'discrete', [2]);
+% ==========================================================
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+
+% make some data
+T=20;
+cases = cell(3, T);
+cases(1,:)=num2cell(round(rand(1,T)*2)+1);
+%cases(2,:)=num2cell(round(rand(1,T))+1);
+cases(3,:)=num2cell(rand(1,T));
+
+engine = bk_inf_engine(bnet, 'exact', [1 2 3]);
+
+% log lik before learning
+[engine, loglik] = enter_evidence(engine, cases);
+
+% do learning
+ev=cell(1,1);
+ev{1}=cases;
+[bnet2, LL2] = learn_params_dbn_em(engine, ev, 3);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/Belief_hmdt.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+% Sigmoid Belief Hidden Markov Decision Tree    (Jordan/Gharhamani 1996)
+% 
+clear all;
+%clc;
+rand('state',0); randn('state',0);
+X = 1; Q1 = 2; Q2 = 3; Y = 4;
+% intra time-slice graph
+intra=zeros(4);
+intra(X,[Q1 Q2 Y])=1;
+intra(Q1,[Q2 Y])=1;
+intra(Q2, Y)=1;
+% inter time-slice graph
+inter=zeros(4);
+inter(Q1,Q1)=1;
+inter(Q2,Q2)=1;
+
+ns = [1 2 3 1]; 
+dnodes = [2 3]; 
+eclass1 = [1 2 3 4];
+eclass2 = [1 5 6 4];
+bnet = mk_dbn(intra, inter, ns, dnodes, eclass1, eclass2);
+
+bnet.CPD{1} = root_CPD(bnet, 1);
+% =========================================
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = softmax_CPD(bnet, 3, 'discrete', [2]);
+bnet.CPD{5} = softmax_CPD(bnet, 6);
+bnet.CPD{6} = softmax_CPD(bnet, 7, 'discrete', [3 6]);
+% =========================================
+bnet.CPD{4} = gaussian_CPD(bnet, 4);
+
+% make some data
+T=20;
+cases = cell(4, T);
+cases(1,:)=num2cell(round(rand(1,T)*2)+1);
+%cases(2,:)=num2cell(round(rand(1,T))+1);
+%cases(3,:)=num2cell(round(rand(1,T)*2)+1);
+cases(4,:)=num2cell(rand(1,T));
+
+engine = bk_inf_engine(bnet, 'exact', [1 2 3 4]);
+
+% log lik before learning
+[engine, loglik] = enter_evidence(engine, cases);
+
+% do learning
+ev=cell(1,1);
+ev{1}=cases;
+[bnet2, LL2] = learn_params_dbn_em(engine, ev, 10);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/Belief_hme.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+% Sigmoid Belief Hierarchical Mixtures of Experts
+
+clear all
+clc
+X = 1;
+Q1 = 2;
+Q2 = 3;
+Y = 4;
+dag = zeros(4,4);
+dag(X,[Q1 Q2 Y]) = 1;
+dag(Q1, [Q2 Y]) = 1;
+dag(Q2,Y)=1;
+ns = [1 3 4 3];
+dnodes = [2 3 4];
+onodes=[1 2 3 4];
+bnet = mk_bnet(dag,ns, dnodes);
+
+rand('state',0); randn('state',0);
+
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2, 'max_iter', 3);
+bnet.CPD{3} = softmax_CPD(bnet, 3, 'discrete', [2], 'max_iter', 3);
+bnet.CPD{4} = softmax_CPD(bnet, 4, 'discrete', [2 3], 'max_iter', 3);
+
+T=5;
+cases = cell(4, T);
+cases(1,:)=num2cell(rand(1,T));
+%cases(2,:)=num2cell(round(rand(1,T)*2)+1);
+%cases(3,:)=num2cell(round(rand(1,T)*3)+1);
+cases(4,:)=num2cell(round(rand(1,T)*2)+1);
+
+engine = jtree_inf_engine(bnet, onodes);
+
+[engine, loglik] = enter_evidence(engine, cases);
+
+disp('learning-------------------------------------------')
+[bnet2, LL2] = learn_params_em(engine, cases, 4);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/Belief_IOhmm.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/Belief_hmdt.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/Belief_hme.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/Sigmoid_Belief.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static/Brutti
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Brutti/Sigmoid_Belief.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+% Sigmoid Belief Net
+
+clear all
+clc
+dum1 = 1;
+dum2 = 2;
+dum3 = 3;
+Q1 = 4;
+Q2 = 5;
+Y = 6;
+dag = zeros(6,6);
+dag(dum1,[Q1 Y]) = 1;
+dag(dum2, Q2)=1;
+dag(dum3, [Q1 Q2])=1;
+dag(Q1,[Q2 Y]) = 1;
+dag(Q2, Y)=1;
+
+ns = [2 2 3 3 4 3];
+dnodes = [1:6];
+bnet = mk_bnet(dag,ns, dnodes);
+
+rand('state',0); randn('state',0);
+n_iter=10;
+clamped=0;
+
+bnet.CPD{1} = tabular_CPD(bnet, 1);
+bnet.CPD{2} = tabular_CPD(bnet, 2);
+bnet.CPD{3} = tabular_CPD(bnet, 3);
+% CPD = dsoftmax_CPD(bnet, self, dummy_pars, w, b, clamped, max_iter, verbose, wthresh,...
+%    llthresh, approx_hess)
+bnet.CPD{4} = softmax_CPD(bnet, 4, 'discrete', [1 3]);
+bnet.CPD{5} = softmax_CPD(bnet, 5, 'discrete', [2 3]);
+bnet.CPD{6} = softmax_CPD(bnet, 6, 'discrete', [1 4]);
+
+T=5;
+cases = cell(6, T);
+cases(1,:)=num2cell(round(rand(1,T)*1)+1);
+%cases(2,:)=num2cell(round(rand(1,T)*1)+1);
+cases(3,:)=num2cell(round(rand(1,T)*2)+1);
+cases(4,:)=num2cell(round(rand(1,T)*2)+1); 
+%cases(5,:)=num2cell(round(rand(1,T)*3)+1);
+cases(6,:)=num2cell(round(rand(1,T)*2)+1);
+
+engine = jtree_inf_engine(bnet);
+
+[engine, loglik] = enter_evidence(engine, cases);
+
+disp('learning-------------------------------------------')
+[bnet2, LL2, eng2] = learn_params_em(engine, cases, n_iter);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+/brainy.m/1.1.1.1/Sun Feb 22 19:43:32 2004//
+/burglar-alarm-net.lisp.txt/1.1.1.1/Thu Mar  4 22:27:48 2004//
+/burglary.m/1.1.1.1/Thu Mar  4 22:34:14 2004//
+/cg1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/cg2.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/cmp_inference_static.m/1.2/Sat Sep 17 16:59:57 2005//
+/discrete1.m/1.1.1.1/Mon Jun  7 19:45:06 2004//
+/discrete2.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/discrete3.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/fa1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/gaussian1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/gaussian2.m/1.1.1.1/Thu Jun 10 01:31:02 2004//
+/gibbs_test1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/learn1.m/1.1.1.1/Sat Feb 28 17:25:40 2004//
+/lw1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mfa1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mixexp1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mixexp2.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mixexp3.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mog1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mpe1.m/1.1.1.1/Wed Jun 19 22:08:58 2002//
+/mpe2.m/1.1.1.1/Wed Jun 19 22:09:08 2002//
+/nodeorderExample.m/1.1.1.1/Thu Jun 10 01:42:04 2004//
+/qmr1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/qmr2.m/1.1.1.1/Thu Nov 14 01:01:46 2002//
+/sample1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/softev1.m/1.1.1.1/Wed Jun 19 23:59:18 2002//
+/softmax1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sprinkler1.m/1.1.1.1/Sun Sep 12 21:01:38 2004//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+A D/Belprop////
+A D/Brutti////
+A D/HME////
+A D/Misc////
+A D/Models////
+A D/SCG////
+A D/StructLearn////
+A D/Zoubin////
+A D/dtree////
+A D/fgraph////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+/HMEforMatlab.jpg/1.1.1.1/Wed May 29 15:59:54 2002//
+/README/1.1.1.1/Wed May 29 15:59:54 2002//
+/fhme.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/gen_data.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/hme_class_plot.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/hme_reg_plot.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/hme_topobuilder.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/hmemenu.m/1.1.1.1/Thu Feb 12 12:57:28 2004//
+/test_data_class.mat/1.1.1.1/Wed May 29 15:59:54 2002//
+/test_data_class2.mat/1.1.1.1/Wed May 29 15:59:54 2002//
+/test_data_reg.mat/1.1.1.1/Wed May 29 15:59:54 2002//
+/train_data_class.mat/1.1.1.1/Wed May 29 15:59:54 2002//
+/train_data_reg.mat/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static/HME
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
Binary file toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/HMEforMatlab.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/README	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+This directory contains code for hierarchical mixture of experts,
+written by Pierpaolo Brutti (May 2001). Run the file hmemenu to get started.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/fhme.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,109 @@
+function risultati = fhme(net, nodes_info, data, n)
+%HMEFWD	Forward propagation through an HME model
+%
+% Each row of the (n x class_num) matrix 'risultati' containes the estimated class posterior prob.
+%
+% ----------------------------------------------------------------------------------------------------
+% -> pierpaolo_b@hotmail.com   or   -> pampo@interfree.it
+% ----------------------------------------------------------------------------------------------------
+%
+ns=net.node_sizes;
+if nargin==3
+    ndata=n;
+else
+    ndata=size(data, 1);
+end
+altezza=size(ns,2);
+coeff=cell(altezza-1,1);
+for m=1:ndata
+    %- i=2 --------------------------------------------------------------------------------------
+    s=struct(net.CPD{2});    
+    if nodes_info(1,2)==0,
+        mu=[]; W=[]; predict=[];
+        mu=s.mean(:,:);
+        W=s.weights(:,:,:);
+        predict=mu(:,:)+W(:,:,:)*data(m,:)';            
+        coeff{1,1}=predict';            
+    elseif nodes_info(1,2)==1,
+        coeff{1,1}=fglm(s.glim{1}, data(m,:));
+    else,
+        coeff{1,1}=fmlp(s.mlp{1}, data(m,:));
+    end
+    %----------------------------------------------------------------------------------------------
+    if altezza>3,
+        for i=3:altezza-1,
+            s=[]; f=[]; dpsz=[];
+            f=family(net.dag,i); f=f(2:end-1); dpsz=prod(ns(f));
+            s=struct(net.CPD{i});
+            for j=1:dpsz,
+                if nodes_info(1,i)==1,
+                    coeff{i-1,1}(j,:)=coeff{i-2,1}(1,j)*fglm(s.glim{j}, data(m,:));
+                else
+                    coeff{i-1,1}(j,:)=coeff{i-2,1}(1,j)*fmlp(s.mlp{j}, data(m,:));
+                end
+            end       
+            app=cat(2, coeff{i-1,1}(:)); coeff{i-1,1}=app'; clear app;
+        end
+    end
+    %- i=altezza ----------------------------------------------------------------------------------
+    if altezza>2,
+        i=altezza;
+        s=[]; f=[]; dpsz=[];
+        f=family(net.dag,i); f=f(2:end-1); dpsz=prod(ns(f));
+        s=struct(net.CPD{i});
+        if nodes_info(1,i)==0,            
+            mu=[]; W=[];
+            mu=s.mean(:,:);
+            W=s.weights(:,:,:);
+        end
+        for j=1:dpsz,
+            if nodes_info(1,i)==0,            
+                predict=[];
+                predict=mu(:,j)+W(:,:,j)*data(m,:)';            
+                coeff{i-1,1}(j,:)=coeff{i-2,1}(1,j)*predict';            
+            elseif nodes_info(1,i)==1,
+                coeff{i-1,1}(j,:)=coeff{i-2,1}(1,j)*fglm(s.glim{j}, data(m,:));
+            else
+                coeff{i-1,1}(j,:)=coeff{i-2,1}(1,j)*fmlp(s.mlp{j}, data(m,:));
+            end
+        end
+    end
+    %----------------------------------------------------------------------------------------------
+    risultati(m,:)=sum(coeff{altezza-1,1},1);
+    clear coeff; coeff=cell(altezza-1,1);
+end
+return
+
+%-------------------------------------------------------------------
+
+function [y, a] = fglm(net, x)
+%GLMFWD	Forward propagation through 1-layer net->GLM statistical model
+
+ndata = size(x, 1);
+
+a = x*net.w1 + ones(ndata, 1)*net.b1;
+
+nout = size(a,2);
+% Ensure that sum(exp(a), 2) does not overflow
+maxcut = log(realmax) - log(nout);
+% Ensure that exp(a) > 0
+mincut = log(realmin);
+a = min(a, maxcut);
+a = max(a, mincut);
+temp = exp(a);
+y = temp./(sum(temp, 2)*ones(1,nout));
+
+%-------------------------------------------------------------------
+
+function [y, z, a] = fmlp(net, x)
+%MLPFWD	Forward propagation through 2-layer network.
+
+ndata = size(x, 1);
+
+z = tanh(x*net.w1 + ones(ndata, 1)*net.b1);
+a = z*net.w2 + ones(ndata, 1)*net.b2;  
+temp = exp(a);
+nout = size(a,2);
+y = temp./(sum(temp,2)*ones(1,nout));
+
+%-------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/gen_data.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function [data, ndata1, ndata2, targets]=gen_data(ndata, seed)
+% Generate data from three classes in 2d
+% Setting 'seed' for reproducible results
+% OUTPUT
+% data : data set
+% ndata1, ndata2: separator
+
+if nargin<1,
+   error('Missing data size');
+end
+
+input_dim = 2;
+num_classes = 3;
+
+if nargin==2,
+   % Fix seeds for reproducible results
+   randn('state', seed);
+   rand('state', seed);
+end
+
+% Generate mixture of three Gaussians in two dimensional space
+data = randn(ndata, input_dim);
+targets = zeros(ndata, 3);
+
+% Priors for the clusters
+prior(1) = 0.4;
+prior(2) = 0.3;
+prior(3) = 0.3;
+
+% Cluster centres
+c = [2.0, 2.0; 0.0, 0.0; 1, -1];
+
+ndata1 = round(prior(1)*ndata);
+ndata2 = round((prior(1) + prior(2))*ndata);
+% Put first cluster at (2, 2)
+data(1:ndata1, 1) = data(1:ndata1, 1) * 0.5 + c(1,1);
+data(1:ndata1, 2) = data(1:ndata1, 2) * 0.5 + c(1,2);
+targets(1:ndata1, 1) = 1;
+
+% Leave second cluster at (0,0)
+data((ndata1 + 1):ndata2, :) = data((ndata1 + 1):ndata2, :);
+targets((ndata1+1):ndata2, 2) = 1;
+
+data((ndata2+1):ndata, 1) = data((ndata2+1):ndata,1) *0.6 + c(3, 1);
+data((ndata2+1):ndata, 2) = data((ndata2+1):ndata,2) *0.6 + c(3, 2);
+targets((ndata2+1):ndata, 3) = 1;
+
+if 0
+  ndata = 1;
+  data = x;
+  targets = [1 0 0];
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/hme_class_plot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,142 @@
+function fh=hme_class_plot(net, nodes_info, train_data, test_data)
+% 
+% Use this function ONLY when the input dimension is 2
+% and the problem is a classification one.
+% We assume that each row of 'train_data' & 'test_data' is an example.
+%
+%------Line Spec------------------------------------------------------------------------
+%
+% LineWidth       - specifies the width (in points) of the line
+% MarkerEdgeColor - specifies the color of the marker or the edge color
+%                   forfilled markers (circle, square, diamond, pentagram, hexagram, and the
+%                   four triangles).
+% MarkerFaceColor - specifies the color of the face of filled markers.
+% MarkerSize      - specifies the size of the marker in points.
+%
+% Example
+% -------
+% plot(t,sin(2*t),'-mo',...
+%                'LineWidth',2,...
+%                'MarkerEdgeColor','k',...                          % 'k'=black
+%                'MarkerFaceColor',[.49 1 .63],...                  % RGB color
+%                'MarkerSize',12)
+%----------------------------------------------------------------------------------------
+
+class_num=nodes_info(2,end);
+mn_x = round(min(train_data(:,1)));     mx_x = round(max(train_data(:,1)));
+mn_y = round(min(train_data(:,2)));     mx_y = round(max(train_data(:,2)));
+if nargin==4,
+    mn_x = round(min([train_data(:,1); test_data(:,1)]));     
+    mx_x = round(max([train_data(:,1); test_data(:,1)]));
+    mn_y = round(min([train_data(:,2); test_data(:,2)]));
+    mx_y = round(max([train_data(:,1); test_data(:,2)]));
+end
+x = mn_x(1)-1:0.2:mx_x(1)+1;
+y = mn_y(1)-1:0.2:mx_y(1)+1;
+[X, Y] = meshgrid(x,y);
+X = X(:); 
+Y = Y(:);
+num_g=size(X,1);
+griglia = [X Y];
+rand('state',1);
+if class_num<=6,
+    colors=['r'; 'g'; 'b'; 'c'; 'm'; 'y'];
+else
+    colors=rand(class_num, 3);  % each row is an RGB color
+end
+fh = figure('Name','Data & decision boundaries', 'MenuBar', 'none', 'NumberTitle', 'off');
+ms=5;           % Marker Size
+if nargin==4,
+%    ms=4;       % Marker Size
+    subplot(1,2,1);
+end
+% Plot of train_set -------------------------------------------------------------------------
+axis([mn_x-1 mx_x+1 mn_y-1 mx_y+1]);
+set(gca, 'Box', 'on');
+c_max_train = max(train_data(:,3));
+hold on
+for m=1:c_max_train,
+    app_x=train_data(:,1);
+    app_y=train_data(:,2);
+    thisX=app_x(train_data(:,3)==m);
+    thisY=app_y(train_data(:,3)==m);
+    if class_num<=6,
+       str_col=[];
+       str_col=['o', colors(m,:)];
+       plot(thisX, thisY, str_col, 'MarkerSize', ms);
+    else
+        plot(thisX, thisY, 'o',...
+            'LineWidth', 1,...            
+            'MarkerEdgeColor', colors(m,:), 'MarkerSize', ms)
+    end
+end
+%---hmefwd_generale(net,data,ndata)-----------------------------------------------------------
+Z=fhme(net, nodes_info, griglia, num_g);      % forward propagation trougth the HME
+%---------------------------------------------------------------------------------------------
+[foo , class] = max(Z'); % 0/1 loss function => we assume that the true class is the one with the
+                         % maximum posterior prob.
+class = class';
+for m = 1:class_num,
+  thisX=[]; thisY=[];
+  thisX = X(class == m);
+  thisY = Y(class == m);
+  if class_num<=6,
+      str_col=[];
+      str_col=['d', colors(m,:)];
+      h=plot(thisX, thisY, str_col);      
+  else
+      h = plot(thisX, thisY, 'd',...
+          'MarkerEdgeColor',colors(m,:),...
+          'MarkerFaceColor','w');
+  end
+  set(h, 'MarkerSize', 4);
+end
+title('Training set and Decision Boundaries (0/1 loss)')
+hold off
+
+% Plot of test_set --------------------------------------------------------------------------
+if nargin==4,
+    subplot(1,2,2);
+    axis([mn_x-1 mx_x+1 mn_y-1 mx_y+1]);
+    set(gca, 'Box', 'on');
+    hold on     
+    if size(test_data,2)==3,  % we know the classification of the test set examples
+        c_max_test = max(test_data(:,3));
+        for m=1:c_max_test,
+            app_x=test_data(:,1);
+            app_y=test_data(:,2);
+            thisX=app_x(test_data(:,3)==m);
+            thisY=app_y(test_data(:,3)==m);
+            if class_num<=6,
+                str_col=[];
+                str_col=['o', colors(m,:)];
+                plot(thisX, thisY, str_col, 'MarkerSize', ms);
+            else
+                plot(thisX, thisY, 'o',...
+                     'LineWidth', 1,...
+                     'MarkerEdgeColor', colors(m,:),...
+                     'MarkerSize',ms);
+            end
+        end
+    else
+        plot(test_data(:,1), test_data(:,2), 'ko',...
+            'MarkerSize', ms);
+    end
+    for m = 1:class_num,
+        thisX=[]; thisY=[];
+        thisX = X(class == m);
+        thisY = Y(class == m);
+        if class_num<=6,
+          str_col=[];
+          str_col=['d', colors(m,:)];
+          h=plot(thisX, thisY, str_col);  
+        else
+           h = plot(thisX, thisY, 'd',...
+                    'MarkerEdgeColor', colors(m,:),...
+                    'MarkerFaceColor','w');
+        end
+        set(h, 'MarkerSize', 4);
+    end
+    title('Test set and Decision Boundaries (0/1 loss)')
+    hold off
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/hme_reg_plot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function fh=hme_reg_plot(net, nodes_info, train_data, test_data)
+% 
+% Use this function ONLY when the input dimension is 1
+% and the problem is a regression one.
+% We assume that each row of 'train_data' & 'test_data' is an example.
+%
+% ----------------------------------------------------------------------------------------------------
+% -> pierpaolo_b@hotmail.com   or   -> pampo@interfree.it
+% ----------------------------------------------------------------------------------------------------
+
+fh=figure('Name','HME based regression', 'MenuBar', 'none', 'NumberTitle', 'off');
+
+mn_x_train = round(min(train_data(:,1)));
+mx_x_train = round(max(train_data(:,1)));     
+x_train = mn_x_train(1):0.01:mx_x_train(1);
+Z_train=fhme(net, nodes_info, x_train',size(x_train,2));      % forward propagation trougth the HME
+
+if nargin==4,
+    subplot(2,1,1);
+    mn_x_test = round(min(test_data(:,1)));
+    mx_x_test = round(max(test_data(:,1)));
+    x_test = mn_x_test(1):0.01:mx_x_test(1);
+    Z_test=fhme(net, nodes_info, x_test',size(x_test,2));      % forward propagation trougth the HME
+end
+
+hold on;
+set(gca, 'Box', 'on');
+plot(x_train', Z_train, 'r');
+plot(train_data(:,1),train_data(:,2),'+k');
+title('Training set and prediction');
+hold off
+
+if nargin==4,
+    subplot(2,1,2);
+    hold on;
+    set(gca, 'Box', 'on');
+    plot(x_train', Z_train, 'r');
+    if size(test_data,2)==2,
+        plot(test_data(:,1),test_data(:,2),'+k');
+    end
+    title('Test set and prediction');
+    hold off
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/hme_topobuilder.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+function [bnet, onodes]=hme_topobuilder(nodes_info);
+%
+% HME topology builder
+%
+% ----------------------------------------------------------------------------------------------------
+% -> pierpaolo_b@hotmail.com   or   -> pampo@interfree.it
+% ----------------------------------------------------------------------------------------------------
+
+nodes_num=size(nodes_info,2);
+dag = zeros(nodes_num);
+list=[1:nodes_num];
+for i=1:(nodes_num-1)
+    app=[];
+    app=list((i+1):end);
+    dag(i,app) = 1;
+end
+onodes = [1 nodes_num];                           
+dnodes = list(2:end-1);
+if nodes_info(1,end)>0,
+    dnodes=[dnodes nodes_num];
+end
+ns = nodes_info(2,:);
+
+bnet = mk_bnet(dag, ns, dnodes);
+clamped = 0;
+
+bnet.CPD{1} = root_CPD(bnet, 1);
+
+rand('state', 50);
+randn('state', 50);
+
+for i=2:nodes_num,
+    if (nodes_info(1,i)==0)&(nodes_info(4,i)==1),
+        bnet.CPD{i} = gaussian_CPD(bnet, i, [], [], [], 'full');
+    elseif (nodes_info(1,i)==0)&(nodes_info(4,i)==2),
+        bnet.CPD{i} = gaussian_CPD(bnet, i, [], [], [], 'diag');
+    elseif (nodes_info(1,i)==0)&(nodes_info(4,i)==3),
+        bnet.CPD{i} = gaussian_CPD(bnet, i, [], [], [], 'full', 'tied');
+    elseif (nodes_info(1,i)==0)&(nodes_info(4,i)==4),
+        bnet.CPD{i} = gaussian_CPD(bnet, i, [], [], [], 'diag', 'tied');        
+    elseif nodes_info(1,i)==1,
+        %bnet.CPD{i} = dsoftmax_CPD(bnet, i, [], [], clamped, nodes_info(4,i));
+	bnet.CPD{i} = softmax_CPD(bnet, i, 'clamped', clamped, 'max_iter', nodes_info(4,i));
+    else
+        bnet.CPD{i} = mlp_CPD(bnet, i, nodes_info(3,i), [], [], [], [], clamped, nodes_info(4,i));
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/hmemenu.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,552 @@
+% dataset      -> (1=>user data) or (2=>toy example)
+% type         -> (1=> Regression model) or (2=>Classification model)
+% num_glevel   -> number of hidden nodes in the net (gating levels)
+% num_exp      -> number of experts in the net
+% branch_fact  -> dimension of the hidden nodes in the net
+% cov_dim      -> root node dimension
+% res_dim      -> output node dimension
+% nodes_info   -> 4 x num_glevel+2 matrix that contain all the info about the nodes:
+%                 nodes_info(1,:) = nodes type: (0=>gaussian)or(1=>softmax)or(2=>mlp)
+%                 nodes_info(2,:) = nodes size: [cov_dim   num_glevel x branch_fact   res_dim]
+%                 nodes_info(3,:) = hidden units number (for mlp nodes)
+%                                  |- optimizer iteration number (for softmax & mlp CPD)
+%                 nodes_info(4,:) =|- covariance type (for gaussian CPD)-> 
+%                                  | (1=>Full)or(2=>Diagonal)or(3=>Full&Tied)or(4=>Diagonal&Tied)
+% fh1 -> Figure: data & decizion boundaries; fh2 -> confusion matrix; fh3 -> LL trace                                                                       
+% test_data    -> test data matrix
+% train_data   -> training data matrix
+% ntrain       -> size(train_data,2)
+% ntest        -> size(test_data,2)
+% cases        -> (cell array) training data formatted for the learning engine
+% bnet         -> bayesian net before learning
+% bnet2        -> bayesian net after learning
+% ll           -> log-likelihood before learning
+% LL2          -> log-likelihood trace
+% onodes       -> obs nodes in bnet & bnet2
+% max_em_iter  -> maximum number of interations of the EM algorithm
+% train_result -> prediction on the training set (as test_result)
+% 
+% IMPORTANT: CHECK the loading path (lines 64 & 364)
+% ----------------------------------------------------------------------------------------------------
+% -> pierpaolo_b@hotmail.com   or   -> pampo@interfree.it
+% ----------------------------------------------------------------------------------------------------
+
+error('this no longer works with the latest version of BNT')
+
+clear all;
+clc;
+disp('---------------------------------------------------');
+disp('  Hierarchical Mixtures of Experts models builder ');
+disp('---------------------------------------------------');
+disp(' ')
+disp('   Using this script you can build both an HME model')
+disp('as in [Wat94] and [Jor94] i.e. with ''softmax'' gating')
+disp('nodes and ''gaussian'' ( for regression ) or ''softmax''') 
+disp('( for classification ) expert node, and its variants')
+disp('called ''gated nets'' where we use ''mlp'' models in')
+disp('place of a number of ''softmax'' ones [Mor98], [Wei95].')
+disp('  You can decide to train and test the model on your')
+disp('datasets  or  to evaluate its  performance on  a toy')
+disp('example.')
+disp(' ')
+disp('Reference')
+disp('[Mor98] P. Moerland (1998):')
+disp('        Localized mixtures of experts. (http://www.idiap.ch/~perry/)')
+disp('[Jor94] M.I. Jordan, R.A. Jacobs (1994):')
+disp('        HME and the EM algorithm. (http://www.cs.berkeley.edu/~jordan/)')
+disp('[Wat94] S.R. Waterhouse, A.J. Robinson (1994):') 
+disp('        Classification using HME. (http://www.oigeeza.com/steve/)')
+disp('[Wei95] A.S. Weigend, M. Mangeas (1995):') 
+disp('        Nonlinear gated experts for time series.')
+disp(' ')
+
+if 0
+disp('(See the figure)')
+pause(5);
+%%%%%WARNING!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+im_path=which('HMEforMatlab.jpg');
+fig=imread(im_path, 'jpg');
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+figure('Units','pixels','MenuBar','none','NumberTitle','off', 'Name', 'HME model');
+image(fig); 
+axis image;
+axis off;
+clear fig;
+set(gca,'Position',[0 0 1 1])
+disp('(Press any key to continue)')
+pause
+end
+
+clc
+disp('---------------------------------------------------');
+disp('              Specify the Architecture             ');
+disp('---------------------------------------------------');
+disp(' ');
+disp('What kind of model do you need?')
+disp(' ')
+disp('1) Regression ')
+disp('2) Classification')
+disp(' ')
+type=input('1 or 2?: ');
+if (isempty(type)|(~ismember(type,[1 2]))), error('Invalid value'); end
+clc
+disp('----------------------------------------------------');
+disp('               Specify the Architecture             ');
+disp('----------------------------------------------------');
+disp(' ')
+disp('Now you have to set the number of experts and gating')
+disp('levels in the net.  This script builds only balanced')
+disp('hierarchy with the same branching factor (>1)at each')
+disp('(gating) level. So remember that: ')
+disp(' ')
+disp('         num_exp = branch_fact^num_glevel           ')
+disp(' ')
+disp('with branch_fact >=2.')
+disp('You can also set to zeros the number of gating level')
+disp('in order to obtain a classical GLM model.           ')
+disp(' ')
+disp('----------------------------------------------------');
+disp(' ')
+num_glevel=input('Insert the number of gating levels {0,...,20}: ');
+if (isempty(num_glevel)|(~ismember(num_glevel,[0:20]))), error('Invalid value'); end
+nodes_info=zeros(4,num_glevel+2);
+if num_glevel>0, %------------------------------------------------------------------------------------
+    for i=2:num_glevel+1,
+        clc
+        disp('----------------------------------------------------');
+        disp('               Specify the Architecture             ');
+        disp('----------------------------------------------------');
+        disp(' ')   
+        disp(['-> Gating network ', num2str(i-1), ' is a: '])
+        disp(' ')
+        disp('   1) Softmax model');
+        disp('   2) Two layer perceptron model')
+        disp(' ')
+        nodes_info(1,i)=input('1 or 2?: ');
+        if (isempty(nodes_info(1,i))|(~ismember(nodes_info(1,i),[1 2]))), error('Invalid value'); end
+        disp(' ')
+        if nodes_info(1,i)==2,
+           nodes_info(3,i)=input('Insert the number of units in the hidden layer: ');
+           if (isempty(nodes_info(3,i))|(floor(nodes_info(3,i))~=nodes_info(3,i))|(nodes_info(3,i)<=0)), 
+              error(['Invalid value: ', num2str(nodes_info(3,i)), ' is not a positive integer!']);
+           end
+           disp(' ')
+        end
+        nodes_info(4,i)=input('Insert the optimizer iteration number: ');
+        if (isempty(nodes_info(4,i))|(floor(nodes_info(4,i))~=nodes_info(4,i))|(nodes_info(4,i)<=0)), 
+           error(['Invalid value: ', num2str(nodes_info(4,i)), ' is not a positive integer!']);
+        end    
+    end
+    clc
+    disp('---------------------------------------------------------');
+    disp('                 Specify the Architecture                ');
+    disp('---------------------------------------------------------');
+    disp(' ')
+    disp('Now you have to set the number  of experts in the network');
+    disp('The value will be adjusted in order to obtain a hierarchy');
+    disp('as said above.')
+    disp(' ');    
+    num_exp=input(['Insert the approximative number of experts (>=', num2str(2^num_glevel), '): ']);
+    if (isempty(num_exp)|(num_exp<=0)|(num_exp<2^num_glevel)), 
+        error('Invalid value');
+    end
+    app1=0; base=2;
+    while app1<num_exp,
+        app1=base^num_glevel;
+        base=base+1;
+    end
+    app2=(base-2)^num_glevel;
+    branch_fact=base-1;
+    if app2>=(2^num_glevel)&(abs(app2-num_exp)<abs(app1-num_exp)),
+        branch_fact=base-2;
+    end
+    clear app1 app2 base;
+    disp(' ')
+    disp(['The effective number of experts in the net is: ', num2str(branch_fact^num_glevel), '.'])
+    disp(' ');
+else
+    clc
+    disp('---------------------------------------------------------');
+    disp('        Specify the Architecture (GLM model)             ');
+    disp('---------------------------------------------------------');
+    disp(' ')
+end % END of: if num_glevel>0-------------------------------------------------------------------------
+
+if type==2,
+    disp(['-> Expert node is a: '])
+    disp(' ')
+    disp('   1) Softmax model');
+    disp('   2) Two layer perceptron model')
+    disp(' ')
+    nodes_info(1,end)=input('1 or 2?: ');
+    if (isempty(nodes_info(1,end))|(~ismember(nodes_info(1,end),[1 2]))), 
+        error('Invalid value'); 
+    end
+    disp(' ')
+    if nodes_info(1,end)==2,
+       nodes_info(3,end)=input('Insert the number of units in the hidden layer: ');
+       if (isempty(nodes_info(3,end))|(floor(nodes_info(3,end))~=nodes_info(3,end))|(nodes_info(3,end)<=0)), 
+           error(['Invalid value: ', num2str(nodes_info(3,end)), ' is not a positive integer!']);
+       end
+       disp(' ')
+    end
+    nodes_info(4,end)=input('Insert the optimizer iteration number: ');
+    if (isempty(nodes_info(4,end))|(floor(nodes_info(4,end))~=nodes_info(4,end))|(nodes_info(4,end)<=0)), 
+        error(['Invalid value: ', num2str(nodes_info(4,end)), ' is not a positive integer!']);
+    end
+elseif type==1,
+    disp('What kind of covariance matrix structure do you want?')
+    disp(' ')
+    disp('   1) Full');
+    disp('   2) Diagonal')
+    disp('   3) Full & Tied');
+    disp('   4) Diagonal & Tied')
+
+    disp(' ')
+    nodes_info(4,end)=input('1, 2, 3 or 4?: ');
+    if (isempty(nodes_info(4,end))|(~ismember(nodes_info(4,end),[1 2 3 4]))), 
+        error('Invalid value'); 
+    end  
+end
+clc
+disp('----------------------------------------------------');
+disp('                    Specify the Input               ');
+disp('----------------------------------------------------');
+disp(' ')
+disp('Do you want to...')
+disp(' ')
+disp('1) ...use your own dataset?')
+disp('2) ...apply the model on a toy example?')
+disp(' ')
+dataset=input('1 or 2?: ');
+if (isempty(dataset)|(~ismember(dataset,[1 2]))), error('Invalid value'); end
+if dataset==1,
+    if type==1,
+        clc
+        disp('-------------------------------------------------------');
+        disp('        Specify the Input - Regression problem         ');
+        disp('-------------------------------------------------------');
+        disp(' ')
+        disp('Be sure that each row of your data matrix is an example');
+        disp('with the covariate values that precede the respond ones')
+        disp(' ')
+        disp('-------------------------------------------------------');
+        disp(' ')
+        cov_dim=input('Insert the covariate space dimension: ');
+        if (isempty(cov_dim)|(floor(cov_dim)~=cov_dim)|(cov_dim<=0)), 
+          error(['Invalid value: ', num2str(cov_dim), ' is not a positive integer!']);
+        end
+        disp(' ')
+        res_dim=input('Insert the dimension of the respond variable: ');
+        if (isempty(res_dim)|(floor(res_dim)~=res_dim)|(res_dim<=0)), 
+            error(['Invalid value: ', num2str(res_dim), ' is not a positive integer!']);
+        end 
+        disp(' ');
+    elseif type==2
+        clc
+        disp('-------------------------------------------------------');
+        disp('      Specify the Input - Classification problem       ');
+        disp('-------------------------------------------------------');
+        disp(' ')
+        disp('Be sure that each row of your data matrix is an example');
+        disp('with the covariate values that precede the class labels');
+        disp('(integer value >=1).                                   ');
+        disp(' ')
+        disp('-------------------------------------------------------');
+        disp(' ')
+        cov_dim=input('Insert the covariate space dimension: ');
+        if (isempty(cov_dim)|(floor(cov_dim)~=cov_dim)|(cov_dim<=0)), 
+          error(['Invalid value: ', num2str(cov_dim), ' is not a positive integer!']);
+        end
+        disp(' ')
+        res_dim=input('Insert the number of classes: ');
+        if (isempty(res_dim)|(floor(res_dim)~=res_dim)|(res_dim<=0)), 
+          error(['Invalid value: ', num2str(res_dim), ' is not a positive integer!']);
+        end        
+        disp(' ')               
+    end    
+    % ------------------------------------------------------------------------------------------------
+    % Loading training data --------------------------------------------------------------------------
+    % ------------------------------------------------------------------------------------------------
+    train_path=input('Insert the complete (with extension) path of the training data file:\n >> ','s');    
+    if isempty(train_path), error('You must specify a data set for training!'); end
+    if ~isempty(findstr('.mat',train_path)),
+        ap=load(train_path); app=fieldnames(ap); train_data=eval(['ap.', app{1,1}]);
+        clear ap app;
+    elseif ~isempty(findstr('.txt',train_path)),
+        train_data=load(train_path, '-ascii');
+    else
+        error('Invalid data format: not a .mat or a .txt file')
+    end
+    if (size(train_data,2)~=cov_dim+res_dim)&(type==1),
+        error(['Invalid data matrix size: ', num2str(size(train_data,2)), ' columns rather than ',...
+            num2str(cov_dim+res_dim),'!']);
+    elseif (size(train_data,2)~=cov_dim+1)&(type==2),
+        error(['Invalid data matrix size: ', num2str(size(train_data,2)), ' columns rather than ',...
+            num2str(cov_dim+1),'!']);    
+    elseif (~isempty(find(ismember(intersect([train_data(:,end)' 1:res_dim],...
+            train_data(:,end)'),[1:res_dim])==0)))&(type==2),
+        error('Invalid class label');
+    end    
+    ntrain=size(train_data,1);
+    train_d=train_data(:,1:cov_dim);
+    if type==2,
+        train_t=zeros(ntrain, res_dim);
+        for m=1:res_dim,
+            train_t((find(train_data(:,end)==m))',m)=1;
+        end
+    else
+        train_t=train_data(:,cov_dim+1:end);
+    end        
+    disp(' ')
+    % ------------------------------------------------------------------------------------------------
+    % Loading test data ------------------------------------------------------------------------------
+    % ------------------------------------------------------------------------------------------------
+    disp('(If you don''t want to specify a test-set press ''return'' only)');
+    test_path=input('Insert the complete (with extension) path of the test data file:\n >> ','s');  
+    if ~isempty(test_path),
+        if ~isempty(findstr('.mat',test_path)),        
+            ap=load(test_path); app=fieldnames(ap); test_data=eval(['ap.', app{1,1}]);
+            clear ap app;
+        elseif ~isempty(findstr('.txt',test_path)),
+            test_data=load(test_path, '-ascii');
+        else
+            error('Invalid data format: not a .mat or a .txt file')
+        end
+        if (size(test_data,2)~=cov_dim)&(size(test_data,2)~=cov_dim+res_dim)&(type==1),
+            error(['Invalid data matrix size: ', num2str(size(test_data,2)), ' columns rather than ',...
+                num2str(cov_dim+res_dim), ' or ', num2str(cov_dim), '!']);
+        elseif (size(test_data,2)~=cov_dim)&(size(test_data,2)~=cov_dim+1)&(type==2),
+            error(['Invalid data matrix size: ', num2str(size(test_data,2)), ' columns rather than ',...
+                num2str(cov_dim+1), ' or ', num2str(cov_dim), '!']);
+        elseif (~isempty(find(ismember(intersect([test_data(:,end)' 1:res_dim],...
+                test_data(:,end)'),[1:res_dim])==0)))&(type==2)&(size(test_data,2)==cov_dim+1),
+            error('Invalid class label');
+        end
+        ntest=size(test_data,1);        
+        test_d=test_data(:,1:cov_dim);
+        if (type==2)&(size(test_data,2)>cov_dim),
+            test_t=zeros(ntest, res_dim);
+            for m=1:res_dim,
+                test_t((find(test_data(:,end)==m))',m)=1;
+            end
+        elseif (type==1)&(size(test_data,2)>cov_dim),
+            test_t=test_data(:,cov_dim+1:end);
+        end
+        disp(' ');
+    end
+else    
+    clc
+    disp('----------------------------------------------------');
+    disp('                  Specify the Input                 ');
+    disp('----------------------------------------------------');
+    disp(' ')
+    ntrain = input('Insert the number of examples in training (<500): ');
+    if (isempty(ntrain)|(floor(ntrain)~=ntrain)|(ntrain<=0)|(ntrain>500)), 
+          error(['Invalid value: ', num2str(ntrain), ' is not a positive integer <500!']);
+    end        
+    disp(' ')
+    test_path='toy';
+    ntest = input('Insert the number of examples in test (<500): ');
+    if (isempty(ntest)|(floor(ntest)~=ntest)|(ntest<=0)|(ntest>500)), 
+          error(['Invalid value: ', num2str(ntest), ' is not a positive integer <500!']);
+    end        
+
+    if type==2,
+        cov_dim=2;
+        res_dim=3;
+        seed = 42;
+        [train_d, ntrain1, ntrain2, train_t]=gen_data(ntrain, seed);
+        for m=1:ntrain
+            q=[]; q = find(train_t(m,:)==1);
+            train_data(m,:)=[train_d(m,:) q];
+        end
+        [test_d, ntest1, ntest2, test_t]=gen_data(ntest);
+        for m=1:ntest
+            q=[]; q = find(test_t(m,:)==1);
+            test_data(m,:)=[test_d(m,:) q];
+        end
+    else
+        cov_dim=1;
+        res_dim=1;
+        global HOME
+        %%%%%WARNING!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+        load([HOME '/examples/static/Misc/mixexp_data.txt'], '-ascii');
+        %%%%%WARNING!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+        train_data = mixexp_data(1:ntrain, :);
+        train_d=train_data(:,1:cov_dim); train_t=train_data(:,cov_dim+1:end);
+        test_data = mixexp_data(ntrain+1:ntrain+ntest, :);
+        test_d=test_data(:,1:cov_dim); 
+        if size(test_data,2)>cov_dim,
+            test_t=test_data(:,cov_dim+1:end);
+        end
+    end    
+end
+% Set the nodes dimension-----------------------------------
+if num_glevel>0,
+    nodes_info(2,2:num_glevel+1)=branch_fact;
+end
+nodes_info(2,1)=cov_dim; nodes_info(2,end)=res_dim;
+%-----------------------------------------------------------
+% Prepare the training data for the learning engine---------
+%-----------------------------------------------------------
+cases = cell(size(nodes_info,2), ntrain);
+for m=1:ntrain,
+    cases{1,m}=train_data(m,1:cov_dim)';
+    cases{end,m}=train_data(m,cov_dim+1:end)';
+end
+%-----------------------------------------------------------------------------------------------------
+[bnet onodes]=hme_topobuilder(nodes_info);
+engine = jtree_inf_engine(bnet, onodes);
+clc
+disp('---------------------------------------------------------------------');
+disp('                         L  E  A  R  N  I  N  G                      ');
+disp('---------------------------------------------------------------------');
+disp(' ')
+ll = 0;
+for l=1:ntrain
+  scritta=['example number: ', int2str(l),'---------------------------------------------'];
+  disp(scritta);
+  ev = cases(:,l);
+  [engine, loglik] = enter_evidence(engine, ev);
+  ll = ll + loglik;
+end
+disp(' ')
+disp(['Log-likelihood before learning: ', num2str(ll)]);
+disp(' ')
+disp('(Press any key to continue)');
+pause
+%-----------------------------------------------------------
+clc
+disp('---------------------------------------------------------------------');
+disp('                         L  E  A  R  N  I  N  G                      ');
+disp('---------------------------------------------------------------------');
+disp(' ')
+max_em_iter=input('Insert the maximum number of the EM algorithm iterations: ');
+if (isempty(max_em_iter)|(floor(max_em_iter)~=max_em_iter)|(max_em_iter<=1)), 
+          error(['Invalid value: ', num2str(ntest), ' is not a positive integer >1!']);
+end 
+disp(' ')
+disp(['Log-likelihood before learning: ', num2str(ll)]);
+disp(' ')
+
+[bnet2, LL2] = learn_params_em(engine, cases, max_em_iter);
+disp(' ')
+fprintf('HME: loglik before learning %f, after %d iters %f\n', ll, length(LL2),  LL2(end));
+disp(' ')
+disp('(Press any key to continue)');
+pause
+%-----------------------------------------------------------------------------------
+% Classification problem: plot data & decision boundaries if the input data size = 2
+% Regression problem: plot data & prediction if the input data size = 1
+%-----------------------------------------------------------------------------------
+if (type==2)&(nodes_info(2,1)==2)&(~isempty(test_path)),
+    fh1=hme_class_plot(bnet2, nodes_info, train_data, test_data);
+    disp(' ');
+    disp('(See the figure)');
+elseif (type==2)&(nodes_info(2,1)==2)&(isempty(test_path)),
+    fh1=hme_class_plot(bnet2, nodes_info, train_data);
+    disp(' ');
+    disp('(See the figure)');
+elseif (type==1)&(nodes_info(2,1)==1)&(~isempty(test_path)),
+    fh1=hme_reg_plot(bnet2, nodes_info, train_data, test_data);
+    disp(' ');
+    disp('(See the figure)');
+elseif (type==1)&(nodes_info(2,1)==1)&(isempty(test_path)),
+    fh1=hme_reg_plot(bnet2, nodes_info, train_data);
+    disp(' ')
+    disp('(See the figure)');
+end
+%-----------------------------------------------------------------------------------
+% Classification problem: plot confusion matrix
+%-----------------------------------------------------------------------------------
+if (type==2)
+    ztrain=fhme(bnet2, nodes_info, train_d, size(train_d,1));  
+    [Htrain, trainRate]=confmat(ztrain, train_t); % CM on the training set
+    fh2=figure('Name','Confusion matrix', 'MenuBar', 'none', 'NumberTitle', 'off');
+    if (~isempty(test_path))&(size(test_data,2)>cov_dim),
+        ztest=fhme(bnet2, nodes_info, test_d, size(test_d,1));
+        [Htest, testRate]=confmat(ztest, test_t);   % CM on the test set
+        subplot(1,2,1);
+    end
+    plotmat(Htrain,'b','k',12)
+    tick=[0.5:1:(0.5+nodes_info(2,end)-1)];
+    set(gca,'XTick',tick)
+    set(gca,'YTick',tick)
+    grid('off')
+    ylabel('True')
+    xlabel('Prediction')
+    title(['Confusion Matrix: training set (' num2str(trainRate(1)) '%)'])
+    if (~isempty(test_path))&(size(test_data,2)>cov_dim),
+        subplot(1,2,2)
+        plotmat(Htest,'b','k',12)
+        set(gca,'XTick',tick)
+        set(gca,'YTick',tick)
+        grid('off')
+        ylabel('True')
+        xlabel('Prediction')
+        title(['Confusion Matrix: test set (' num2str(testRate(1)) '%)'])
+    end
+    disp(' ')
+    disp('(Press any key to continue)');
+    pause
+end
+%-----------------------------------------------------------------------------------
+% Regression & Classification problem: calculate the predictions & plot the LL trace
+%-----------------------------------------------------------------------------------
+train_result=fhme(bnet2,nodes_info,train_d,size(train_d,1));
+if ~isempty(test_path),
+    test_result=fhme(bnet2,nodes_info,test_d,size(test_d,1));
+end
+fh3=figure('Name','Log-likelihood trace', 'MenuBar', 'none', 'NumberTitle', 'off')
+plot(LL2,'-ro',...
+                'MarkerEdgeColor','k',...
+                'MarkerFaceColor',[1 1 0],...
+                'MarkerSize',4)
+title('Log-likelihood trace')
+%-----------------------------------------------------------------------------------
+% Regression & Classification problem: save the predictions
+%-----------------------------------------------------------------------------------
+clc
+disp('------------------------------------------------------------------');
+disp('                           Save the results                       ');
+disp('------------------------------------------------------------------');
+disp(' ')
+%-----------------------------------------------------------------------------------
+save_quest_m=input('Do you want to save the HME model (Y/N)? [Y default]: ', 's');
+if isempty(save_quest_m),
+    save_quest_m='Y';
+end
+if ~findstr(save_quest_m, ['Y', 'N']), error('Invalid input'); end
+if save_quest_m=='Y',
+    disp(' ');
+    m_save=input('Insert the complete path for save the HME model (.mat):\n >> ', 's');
+    if isempty(m_save), error('You must specify a path!'); end
+    save(m_save, 'bnet2');
+end
+%-----------------------------------------------------------------------------------    
+disp(' ')
+save_quest=input('Do you want to save the HME predictions (Y/N)? [Y default]: ', 's');
+disp(' ')
+if isempty(save_quest),
+    save_quest='Y';
+end
+if ~findstr(save_quest, ['Y', 'N']), error('Invalid input'); end
+if save_quest=='Y',
+    tr_save=input('Insert the complete path for save the training data prediction (.mat):\n >> ', 's');    
+    if isempty(tr_save), error('You must specify a path!'); end
+    save(tr_save, 'train_result');  
+    if ~isempty(test_path),
+        disp(' ')
+        te_save=input('Insert the complete path for save the test data prediction (.mat):\n >> ', 's');
+        if isempty(te_save), error('You must specify a path!'); end
+        save(te_save, 'test_result');
+    end
+end
+clc
+disp('----------------------------------------------------');
+disp('                      B  Y  E !                     ');
+disp('----------------------------------------------------');
+pause(2)
+%clear 
+clc
Binary file toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/test_data_class.mat has changed
Binary file toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/test_data_class2.mat has changed
Binary file toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/test_data_reg.mat has changed
Binary file toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/train_data_class.mat has changed
Binary file toolboxes/FullBNT-1.0.7/bnt/examples/static/HME/train_data_reg.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/mixexp_data.txt/1.1.1.1/Wed May 29 15:59:54 2002//
+/mixexp_graddesc.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mixexp_plot.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sprinkler.bif/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static/Misc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/mixexp_data.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1000 @@
+  0.68   0.65
+ -0.31  -0.24
+  0.85   0.94
+ -0.34  -0.31
+ -0.58   0.62
+ -0.04  -0.11
+ -0.82   0.61
+ -0.38   0.16
+  0.71   0.75
+  0.80   0.95
+  0.66   0.64
+ -0.11  -0.03
+ -0.16   0.11
+ -0.47   0.75
+  0.09   0.43
+  0.04  -0.36
+ -0.80   0.77
+ -0.63   0.79
+ -0.13   0.46
+  0.49   0.78
+  0.93   1.12
+  0.08  -0.35
+  0.27  -0.19
+ -0.66   0.56
+  0.98   1.02
+  0.13  -0.16
+ -0.21   0.10
+  0.41   0.29
+  0.18   0.34
+ -0.46   0.21
+  0.03  -0.24
+  0.96   1.42
+  0.96   1.45
+  0.93   1.12
+  0.08  -0.21
+ -0.49   0.39
+  0.66   0.21
+ -0.70   0.45
+ -0.81   0.57
+ -0.17   0.10
+ -0.22   0.03
+  0.24   0.32
+ -0.07   0.31
+ -0.47   0.58
+  0.41   0.28
+ -0.16   0.03
+  0.97   0.79
+ -0.07  -0.09
+  0.22   0.32
+ -0.71   0.73
+  0.51   0.22
+  0.21   0.57
+  0.64   0.58
+ -0.65   0.74
+  0.05   0.55
+  0.41   0.67
+ -0.96   1.36
+ -0.35   0.03
+ -0.38  -0.15
+  0.61   0.71
+ -0.93   0.75
+  0.98   0.99
+  0.58   0.61
+  0.53   0.62
+ -0.24  -0.04
+ -0.84   1.07
+ -0.35   0.42
+ -0.12   0.15
+ -0.38   0.18
+ -0.87   1.15
+  0.38   0.38
+ -0.58   0.57
+  0.42   0.48
+  0.64   0.59
+ -0.52   0.54
+  0.56   0.54
+ -0.22   0.21
+ -0.64   0.94
+  0.92   0.99
+  0.73   0.31
+ -0.04   0.39
+ -0.42   0.40
+ -0.73   1.08
+ -0.67   0.51
+ -0.51  -0.11
+ -0.71   0.81
+ -0.44   0.32
+  0.34   0.15
+  0.45   0.27
+  0.83   0.57
+ -0.91   1.07
+ -0.27   0.46
+ -0.51   0.23
+ -0.90   0.66
+  0.09   0.03
+  0.05  -0.16
+ -0.87   0.45
+ -0.43   0.61
+ -0.00   0.16
+  0.48   0.49
+ -0.84   1.06
+ -0.45   0.34
+ -0.25   0.30
+ -0.91   1.03
+ -0.82   0.88
+ -0.45   0.23
+  0.77   0.59
+ -0.40   0.30
+  0.45   0.28
+ -0.56   0.17
+ -0.81   1.00
+  0.68   0.81
+  0.18   0.03
+  0.64   1.01
+  0.63   0.61
+ -0.16   0.48
+  0.66   0.92
+ -0.22   0.14
+ -0.49   0.36
+ -0.66   0.92
+  0.77   0.91
+ -0.10  -0.28
+ -0.42   0.22
+  0.96   1.23
+  0.85   0.72
+  0.87   0.71
+  0.86   0.85
+ -0.53   0.72
+ -0.60   0.54
+  0.43   0.65
+ -0.37   0.29
+ -0.84   0.72
+ -0.46   0.35
+  0.11  -0.39
+  0.72   0.97
+  0.92   0.89
+ -0.32   0.29
+  0.27   0.05
+  0.45   0.44
+ -0.25   0.34
+ -0.45   1.16
+ -0.52   0.85
+ -0.78   0.90
+  0.03  -0.11
+ -0.88   0.33
+ -0.56   1.02
+  0.83   0.54
+ -0.01   0.14
+  0.86   1.05
+ -0.53   0.21
+ -0.60   0.10
+  0.89   1.15
+  0.65   0.61
+ -0.04   0.29
+  0.72   0.51
+ -0.32   0.40
+ -0.75   0.69
+  0.47   0.48
+  0.49   0.69
+  0.55   0.59
+ -0.20  -0.15
+ -0.52   0.36
+ -0.61   1.07
+ -0.02  -0.02
+ -0.67   0.63
+  0.42   0.46
+ -0.20   0.66
+  0.84   0.27
+  0.05  -0.12
+  0.96   0.51
+ -0.71   0.72
+  0.04  -0.16
+ -0.68   0.91
+ -0.38   0.26
+  0.11   0.18
+  0.40   0.32
+ -0.75   0.59
+ -0.43   0.54
+  0.96   1.53
+ -0.20   0.31
+ -0.14  -0.48
+  0.84   0.50
+  0.12  -0.28
+  0.66   1.07
+ -0.15   0.19
+  0.28   0.48
+  0.78   0.54
+ -0.75   0.73
+  0.37   0.26
+ -0.67   0.39
+ -0.71   0.31
+ -0.96   0.82
+  0.68   0.75
+ -0.36   0.56
+  0.59   0.44
+  0.68   0.23
+  0.10  -0.04
+  0.13   0.43
+  0.28   0.52
+ -0.83   0.55
+ -0.41   0.38
+ -0.21  -0.00
+  0.08   0.23
+  0.04  -0.02
+ -0.11   0.14
+  0.40   0.34
+  0.22   0.43
+  0.30   0.19
+ -0.85   0.83
+  0.13  -0.12
+ -0.55   0.49
+  0.15   0.09
+  0.48   0.15
+ -0.19   0.24
+ -0.39  -0.11
+ -0.79   0.50
+ -0.53   0.73
+  0.07  -0.17
+  0.51   0.75
+  0.84   0.78
+  0.70   0.39
+  0.94   0.55
+ -0.73   1.00
+  0.95   1.10
+ -0.44   0.55
+ -0.50   0.54
+ -0.34   0.00
+  0.31   0.61
+  0.02   0.14
+  0.85   0.57
+  0.74   0.58
+ -0.05  -0.14
+ -0.94   0.80
+ -0.59   0.18
+  0.28  -0.32
+  0.98   0.88
+  0.64   0.20
+ -0.20   0.13
+  0.58   1.10
+  0.08  -0.05
+ -0.39   0.66
+  0.22   0.36
+  0.07  -0.08
+ -0.87   1.11
+ -0.05   0.14
+  0.91   0.91
+  0.87   1.19
+ -0.99   1.14
+  0.55   1.30
+ -0.90   0.81
+  0.49   0.42
+  0.11   0.30
+ -0.90   0.64
+ -0.38   0.52
+  0.38   0.61
+ -0.67   0.58
+ -0.05   0.25
+  0.36   0.85
+  0.84   0.51
+  0.04   0.08
+  0.05   0.08
+ -0.20   0.22
+ -0.98   0.74
+  0.14   0.29
+  0.93   1.22
+  0.19   0.41
+ -0.85   1.16
+  0.44   0.84
+  0.34  -0.04
+ -0.33   0.16
+  0.90   0.73
+  0.58   0.39
+ -0.97   0.70
+ -0.18   0.09
+ -1.00   0.83
+ -0.75   1.07
+  0.98   1.01
+ -0.94   1.11
+  0.46   1.00
+  0.64   0.38
+ -0.21  -0.10
+ -0.18   0.04
+ -0.39   0.61
+ -0.85   0.46
+ -0.94   1.08
+  0.49   0.26
+ -0.94   0.87
+  0.08   0.19
+ -0.05   0.45
+ -0.98   0.94
+  0.75   0.86
+  0.67   0.83
+  0.62   0.21
+ -0.29  -0.33
+  0.64   0.42
+ -0.32   0.48
+  0.39   0.34
+ -0.88   1.29
+ -0.03  -0.23
+  0.77   0.68
+  0.15   0.18
+ -0.99   1.20
+ -0.38   0.25
+ -0.58   0.45
+  0.08   0.00
+  0.30   0.29
+ -0.78   0.61
+  0.85   0.55
+ -0.79   0.57
+  0.75   0.40
+ -0.13  -0.03
+ -0.34  -0.00
+ -0.27  -0.03
+  0.76   1.15
+  0.12   0.66
+  0.91   1.48
+  0.10  -0.07
+ -0.17  -0.18
+ -0.65   0.98
+ -0.54   0.18
+  0.02   0.07
+  0.15   0.43
+ -0.82   0.94
+  0.73   0.40
+ -0.47   0.41
+ -0.32   0.59
+ -0.33   0.41
+  0.66   0.70
+  0.88   0.79
+  0.24   0.29
+ -0.89   1.25
+  0.83   0.84
+  0.35   0.74
+  0.16   0.32
+ -0.70   0.83
+  0.71   0.58
+  0.17  -0.38
+ -0.83   0.77
+  0.47   0.47
+  0.28   0.51
+  0.18   0.54
+ -0.86   0.79
+ -0.36  -0.00
+  0.22  -0.04
+ -0.07   0.57
+  0.49   0.31
+ -0.96   0.58
+ -0.85   0.80
+  0.92   0.93
+ -0.96   0.94
+  0.19  -0.39
+ -0.33   0.07
+ -0.71   0.67
+  0.30  -0.22
+ -0.29   0.67
+ -0.18  -0.17
+  0.68   0.52
+  0.57   0.39
+ -0.17   0.41
+ -0.08   0.06
+  0.89   0.86
+  0.99   0.88
+ -0.69   0.71
+  0.09   0.42
+ -0.95   1.04
+  0.71   0.57
+  0.67   0.95
+  0.24   0.13
+ -0.34   0.22
+ -0.00  -0.00
+ -0.05   0.71
+  0.93   1.59
+ -0.29   0.32
+  0.27   0.50
+ -0.90   0.91
+  0.17   0.17
+  0.23   0.16
+  0.19  -0.16
+  0.93   0.50
+  0.11  -0.39
+  0.96   1.11
+  0.64   1.04
+ -0.75   0.89
+ -0.55   0.11
+  0.20   0.12
+ -0.10  -0.50
+  0.40   0.75
+  0.91   0.84
+ -0.60   0.31
+  0.20   0.38
+ -0.85   0.87
+  0.91   1.19
+  0.27   0.42
+  0.18  -0.01
+ -0.47   0.33
+  0.02  -0.30
+  0.84   1.08
+  0.75   1.10
+  0.06  -0.20
+ -0.32   0.31
+ -0.03  -0.19
+  0.40   0.07
+ -0.33   0.20
+  0.50   0.81
+  0.57   1.11
+ -0.70   0.96
+  0.09  -0.01
+ -0.99   0.86
+  0.67   0.68
+  0.15   0.04
+  0.29   0.58
+  0.03  -0.25
+ -0.59   0.75
+ -0.98   0.48
+ -0.33   0.25
+ -0.10   0.51
+ -0.78   0.67
+ -0.89   0.84
+ -0.23   0.13
+ -0.55   0.20
+  0.61   0.79
+ -0.34   0.31
+  0.90   0.79
+  0.15   0.60
+ -0.48   0.04
+ -0.89   1.15
+ -0.92   1.34
+  0.91   0.87
+ -0.34   0.12
+  0.08   0.51
+  0.82   0.58
+ -0.66   0.72
+  0.02  -0.23
+ -0.05   0.51
+  0.39   0.44
+ -0.64   0.79
+  0.22  -0.30
+ -0.13   0.56
+ -0.03   0.14
+  0.67   0.68
+ -0.02   0.05
+ -0.35   0.22
+ -0.50   0.57
+ -0.71   0.63
+  0.70   0.73
+ -0.52   1.35
+  0.51   0.38
+ -0.67   0.48
+ -0.34   0.56
+ -0.45   0.32
+  0.82   0.73
+ -0.32  -0.31
+ -0.06   0.23
+ -0.33   0.00
+ -0.28   0.39
+  0.98   1.13
+  0.11   0.08
+ -0.01  -0.05
+  0.36   0.13
+ -0.35   0.47
+  0.84   1.12
+ -0.45   0.14
+ -0.48   0.03
+  0.01  -0.27
+  0.04  -0.14
+  0.37   0.78
+  0.58  -0.14
+  0.56   0.50
+  0.71   0.63
+ -0.79   0.64
+ -0.35   0.16
+  0.16  -0.10
+  0.73   1.05
+ -0.11   0.23
+ -0.76   0.56
+  0.88   0.71
+  0.43   0.26
+ -0.33   0.51
+ -0.55   0.53
+ -0.17   0.23
+ -0.16  -0.32
+  0.53   0.29
+  0.99   1.28
+  0.30   0.24
+ -0.29   0.54
+  0.23   0.34
+  0.19  -0.00
+  0.71   1.04
+ -0.35   0.39
+  0.54   0.73
+ -0.25   0.03
+ -0.16   0.12
+  0.43   0.51
+  0.07   0.12
+  0.58  -0.60
+ -0.59   0.36
+ -0.68   0.89
+ -0.24   0.08
+  0.52   0.36
+  0.23   0.14
+  0.26   0.48
+  0.50   0.68
+  1.00   0.86
+  0.25  -0.21
+ -0.37   0.24
+  0.13  -0.40
+  0.86   0.78
+  0.81   1.03
+  0.52   0.57
+  0.79   0.79
+ -0.54   0.99
+  0.19  -0.14
+  0.09  -0.06
+ -0.73   0.52
+ -0.70   0.35
+ -0.16   0.47
+ -0.10   0.25
+ -0.19   0.08
+ -0.41  -0.05
+ -0.71   1.07
+  0.19  -0.01
+  0.94   1.21
+  0.23   0.05
+ -0.25   0.25
+ -0.03  -0.48
+ -0.10   0.12
+ -0.59   0.73
+  0.66   1.12
+  0.36   0.29
+ -0.18   0.17
+  0.99   1.20
+  0.22  -0.22
+ -0.82   0.99
+ -0.54   0.93
+ -0.73   0.74
+  0.34   0.63
+  0.66   0.75
+ -0.72   0.68
+  0.73   0.87
+  0.72   0.60
+ -0.36   0.59
+ -0.01  -0.03
+ -0.20   0.33
+ -0.22  -0.30
+  0.90   1.11
+  0.37   0.13
+ -0.92   0.69
+ -0.93   1.00
+  0.84   1.16
+ -0.70   0.99
+ -0.51   0.50
+ -0.78   1.09
+ -0.65   1.21
+ -0.85   0.68
+  0.42   0.37
+  0.65   0.37
+ -0.25   0.13
+ -0.61   0.40
+ -0.54   0.29
+  0.98   1.38
+ -0.16   0.43
+  0.66   0.41
+ -0.27   0.25
+  0.40   0.76
+  0.97   1.05
+  0.81   1.14
+ -0.67   0.26
+ -0.39   0.49
+  0.57   0.71
+  0.84   0.65
+  0.42   0.81
+ -0.73   0.85
+  0.54  -0.01
+  0.82   0.47
+ -0.20   0.51
+  0.15   0.16
+  0.79   1.09
+ -0.22   0.19
+ -0.78   0.89
+ -0.51   0.16
+  0.69   0.56
+ -0.87   0.79
+ -0.95   1.23
+  0.02  -0.14
+ -0.47   0.50
+  0.82   0.83
+ -0.25   0.08
+ -0.14   0.42
+  0.20   0.55
+  0.97   1.04
+  0.30   0.44
+ -0.66   0.85
+ -0.02  -0.34
+  0.02   0.34
+  0.27  -0.23
+  0.51   0.26
+ -0.00  -0.15
+  0.70   0.80
+ -0.74   0.83
+  0.05  -0.09
+ -0.97   0.64
+  0.98   1.12
+  0.92   0.76
+ -0.43   0.58
+  0.74   0.87
+  0.42   0.74
+ -0.00  -0.27
+ -0.78   0.59
+ -0.15   0.24
+  0.19  -0.09
+ -0.57   0.40
+ -0.45   0.43
+ -0.46   0.39
+ -0.63   0.83
+ -0.50   0.32
+  0.46   0.59
+ -0.96   0.81
+ -0.69   0.45
+ -0.51   0.93
+  0.35   0.33
+ -0.17   0.13
+ -0.70   0.54
+ -0.17   0.07
+  0.32   0.59
+ -0.01  -0.17
+ -0.77   0.55
+ -0.35   0.25
+ -0.19  -0.20
+ -0.08   0.16
+  0.77   0.60
+  0.52   1.07
+  0.41   0.62
+  0.09  -0.35
+  0.24   0.74
+ -0.64   0.65
+  0.96   0.80
+  0.28   0.09
+  0.51   0.54
+ -0.79   0.77
+ -0.73   0.96
+ -0.57   0.59
+ -0.75   0.78
+ -0.44   0.13
+  0.61   0.40
+ -0.24   0.13
+  0.64   1.05
+ -0.48   0.04
+ -0.87   0.61
+ -0.34   0.23
+  0.23   0.17
+ -0.67   0.58
+  0.33  -0.01
+ -0.86   1.48
+  0.71   0.97
+  0.16  -0.33
+ -0.49   0.46
+  0.21   0.66
+  0.46   0.58
+  0.99   1.08
+ -0.36   0.49
+  0.09  -0.12
+ -0.10  -0.35
+  0.33   0.52
+ -0.97   1.56
+ -0.53   0.17
+  0.31   0.38
+  0.71   0.85
+ -0.56   0.81
+  0.74   0.77
+  0.48   0.65
+  0.65   1.18
+  0.70   0.73
+ -0.97   0.62
+  0.75   0.32
+  0.76   0.57
+  0.32   0.49
+  0.46   0.62
+  0.95   1.14
+  0.84   0.74
+ -0.78   0.37
+  0.19   0.44
+  0.39   0.44
+  0.16   0.04
+ -0.88   1.11
+ -0.62   0.78
+ -0.20   0.06
+ -0.73   0.87
+  0.49   0.56
+ -0.68   0.67
+  0.31  -0.22
+  0.99   0.74
+  0.50   0.35
+ -0.46   0.75
+ -0.50   0.53
+ -0.02   0.03
+ -0.42   0.23
+  0.91   0.59
+ -0.12   0.03
+ -0.57   0.73
+  0.67   0.50
+ -0.52   0.32
+ -0.35   0.15
+ -0.07   0.01
+ -0.02   0.22
+  0.23   0.29
+ -0.10  -0.44
+ -0.22   0.24
+ -0.34  -0.07
+  0.43   0.51
+  0.94   1.08
+ -0.80   1.10
+  0.31   0.21
+  0.82   0.78
+ -0.19   0.14
+ -0.07   0.07
+ -0.86   0.83
+  0.97   0.99
+ -0.18   0.11
+ -0.49   0.18
+ -0.88   0.69
+ -0.13  -0.01
+ -0.29   0.19
+  0.58   0.37
+ -0.64   0.28
+ -0.49   0.44
+ -0.85   0.72
+  0.73   0.74
+  0.43   0.32
+ -0.36   0.44
+  0.30   0.08
+ -0.58   0.28
+ -0.40   0.40
+ -0.69   0.99
+ -0.54   0.30
+ -0.04   0.03
+  0.13   0.33
+  0.10   0.02
+  0.20   0.42
+  0.97   0.93
+ -0.98   1.33
+ -0.60   0.05
+ -0.11  -0.23
+ -0.82   0.75
+ -0.35   0.47
+  0.14   0.11
+  0.87   1.13
+ -0.34   0.66
+ -0.84   1.18
+ -0.82   1.03
+ -0.53   0.61
+  0.60   0.40
+  0.90   1.08
+ -0.56   0.73
+  0.89   0.47
+ -0.72   0.70
+  0.15   0.24
+  0.95   1.05
+  0.63   0.36
+ -0.76   0.64
+  0.38   0.53
+  0.55   0.62
+  0.42   0.35
+ -0.91   0.88
+ -0.93   0.94
+ -0.64   0.18
+ -0.99   1.08
+ -0.71   1.04
+  0.64   0.13
+ -0.48   0.51
+ -0.10  -0.10
+  0.67   0.86
+ -0.83   0.69
+ -0.25   0.18
+ -0.07   0.17
+  0.13   0.11
+  0.77   1.05
+  0.01   0.34
+ -0.12   0.02
+  0.50   0.62
+ -0.07  -0.19
+  0.76   1.08
+ -0.68   0.23
+  0.18   0.01
+ -0.55   1.31
+  0.68   0.83
+ -0.08   0.12
+  0.31   0.53
+  0.35   0.29
+ -0.61   0.51
+ -0.18   0.25
+  0.50   0.58
+ -0.36   0.33
+  0.46  -0.02
+  0.72   0.96
+ -0.56   0.41
+  0.73   0.96
+ -0.14  -0.15
+  0.08   0.08
+  0.76   0.62
+  0.15  -0.25
+  0.23   0.13
+ -0.12   0.11
+  0.12  -0.57
+ -0.24   0.44
+ -0.63   0.67
+ -0.44   0.31
+  0.84   0.99
+ -0.74   0.56
+ -0.74   0.51
+  0.25   0.20
+  0.76   0.88
+  0.44   0.49
+  0.32   0.42
+ -0.44   0.87
+  0.33   0.62
+ -0.76   1.23
+  0.74   1.40
+  0.81   0.39
+ -0.40   0.23
+  0.16   0.15
+ -0.54   0.92
+ -0.44   0.64
+  0.85   1.25
+  0.27   0.41
+ -0.94   0.76
+  0.65   0.56
+  0.87   0.82
+ -0.04  -0.10
+ -0.43   0.35
+ -0.78   0.77
+ -0.80   0.54
+ -0.04   0.23
+  0.21   0.30
+  0.71   0.64
+  0.51   0.43
+ -0.38   0.33
+ -0.32   0.37
+  0.77   0.95
+ -0.91   0.89
+  0.79   0.70
+ -0.94   0.78
+ -0.05  -0.18
+  0.85   0.98
+ -0.33   0.61
+ -0.51   0.82
+ -0.63   0.47
+ -0.77   0.40
+ -0.56   0.89
+  0.67   0.68
+ -0.87   1.17
+ -0.25   0.43
+  0.17   0.44
+ -0.13   0.20
+ -0.01  -0.14
+  0.87  -0.02
+  0.22   0.05
+ -0.77   0.75
+ -0.73   0.38
+  0.68   0.53
+ -0.69   0.55
+ -0.17   0.28
+ -0.42   0.40
+ -0.53   1.08
+ -0.46   0.66
+  0.89   0.73
+ -0.15  -0.02
+  0.30   0.44
+  0.42   0.43
+  0.68   0.87
+ -0.66   0.84
+ -0.18  -0.03
+ -0.86   0.96
+ -0.93   1.08
+ -0.34   0.05
+  0.42   0.40
+ -0.36   0.34
+ -0.44  -0.30
+  0.80   0.66
+ -0.01   0.24
+ -0.40  -0.03
+ -0.47   0.46
+ -0.15   0.07
+ -0.41  -0.54
+  0.25  -0.16
+  0.86   0.92
+  0.35   0.51
+  0.90   1.17
+ -0.82   0.74
+ -0.90   1.10
+  0.88   1.01
+  0.95   0.89
+  0.01   0.23
+  0.54   0.70
+ -0.37   0.33
+ -0.12  -0.71
+ -0.47   0.88
+  0.24   0.47
+ -0.17   0.35
+  0.68   0.56
+ -0.93   0.82
+  0.60   0.86
+  0.49   0.86
+  0.78   0.81
+ -0.01   0.26
+ -0.96   1.34
+ -0.71   0.96
+  0.17   0.37
+ -0.94   0.53
+ -0.42   0.77
+  0.12  -0.05
+  0.84   0.87
+ -0.57   0.48
+ -0.54   0.51
+ -0.98   0.56
+ -0.07  -0.16
+ -0.49   0.47
+ -0.08   0.28
+ -0.59   0.89
+  0.32   0.11
+ -0.59   0.63
+  0.08   0.34
+  0.24   0.21
+ -0.35   0.52
+ -0.18  -0.07
+  0.70   0.56
+ -0.05   0.24
+ -0.13  -0.36
+  0.24   0.14
+  0.54   0.55
+  0.17  -0.32
+ -0.36   0.61
+ -0.64   0.70
+  0.92   1.14
+  0.35   0.29
+ -0.47   0.70
+ -0.96   0.97
+  0.79   0.53
+  0.54   0.32
+ -0.19   0.41
+ -0.41   0.57
+  0.77   0.79
+ -0.53   0.53
+ -0.90   0.85
+  0.54   0.38
+ -0.42   0.77
+  0.02   0.19
+ -0.68   0.34
+ -0.87   0.48
+ -0.37   0.60
+ -0.46   0.47
+  0.08  -0.01
+  0.51   0.64
+ -0.53   0.06
+  0.87   0.82
+ -0.25   0.41
+ -0.46  -0.06
+  0.33   0.36
+ -0.05   0.01
+ -1.00   0.66
+ -0.42   0.10
+  0.08   0.53
+ -0.98   0.72
+  0.24   0.41
+  0.18   0.36
+ -0.24   0.62
+  0.56   0.35
+  0.39   0.18
+  0.76   0.27
+  1.00   0.68
+ -0.52   0.39
+ -0.66   0.75
+  0.53   0.67
+  0.77   0.62
+  0.84   0.70
+  0.07  -0.28
+ -0.67   0.86
+ -0.75   0.92
+  0.42   0.48
+ -0.32   0.59
+  0.39   0.43
+  0.79   1.31
+  0.34   0.43
+  0.48   0.86
+ -0.50   0.81
+  0.94   1.67
+  0.66   0.02
+ -0.28   0.02
+  0.89   1.28
+ -0.74   1.16
+  0.81   0.75
+  0.96   0.12
+ -0.63   0.53
+ -0.86   1.20
+  0.61   0.56
+  0.53   0.95
+  0.20   0.50
+ -0.07  -0.15
+  0.28  -0.11
+ -0.23   0.47
+  0.02   0.29
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/mixexp_graddesc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+
+%%%%%%%%%%
+
+function [theta, eta] = mixture_of_experts(q, data, num_iter, theta, eta)
+% MIXTURE_OF_EXPERTS Fit a piecewise linear regression model using stochastic gradient descent.
+% [theta, eta] = mixture_of_experts(q, data, num_iter)
+%
+% Inputs:
+% q = number of pieces (experts)
+% data(l,:) = input example l 
+% 
+% Outputs:
+% theta(i,:) = regression vector for expert i
+% eta(i,:) = softmax (gating) params for expert i
+
+[num_cases dim] = size(data);
+data = [ones(num_cases,1) data]; % prepend with offset
+mu = 0.5; % step size
+sigma = 1; % variance of noise
+
+if nargin < 4
+  theta = 0.1*rand(q, dim);
+  eta = 0.1*rand(q, dim);
+end
+
+for t=1:num_iter
+  for iter=1:num_cases
+    x = data(iter, 1:dim);
+    ystar = data(iter, dim+1); % target
+    % yhat(i) = E[y | Q=i, x] = prediction of i'th expert
+    yhat = theta * x'; 
+    % gate_prior(i,:) = Pr(Q=i | x)
+    gate_prior = exp(eta * x');
+    gate_prior = gate_prior / sum(gate_prior);
+    % lik(i) = Pr(y | Q=i, x)
+    lik = (1/(sqrt(2*pi)*sigma)) * exp(-(0.5/sigma^2) * ((ystar - yhat) .* (ystar - yhat)));
+    % gate_posterior(i,:) = Pr(Q=i | x, y)
+    gate_posterior = gate_prior .* lik;
+    gate_posterior = gate_posterior / sum(gate_posterior);
+    % Update
+    eta = eta + mu*(gate_posterior - gate_prior)*x;
+    theta = theta + mu*(gate_posterior .* (ystar - yhat))*x;
+  end
+
+  if mod(t,100)==0
+    fprintf(1, 'iter %d\n', t);
+  end
+
+end
+fprintf(1, '\n');
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/mixexp_plot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function plot_mixexp(theta, eta, data)
+% PLOT_MIXEXP  Plot the results for a piecewise linear regression model
+% plot_mixexp(theta, eta, data)
+% 
+% data(l,:) = [x y] for example l
+% theta(i,:) = regression vector for expert i
+% eta(i,:) = softmax (gating) params for expert i
+
+numexp = size(theta, 1);
+
+mn = min(data);
+mx = max(data);
+xa = mn(1):0.01:mx(1);
+x = [ones(length(xa),1) xa'];
+% pr(i,l) = posterior probability of expert i on example l
+pr = exp(eta * x');
+pr = pr ./ (ones(numexp,1) * sum(pr));
+% y(i,l) = prediction of expert i for example l
+y = theta * x';
+% yg(l) = weighted prediction  for example l
+yg = sum(y .* pr)';
+
+subplot(3,2,1);
+plot(xa, y(1,:));
+title('expert 1');
+
+subplot(3,2,2);
+plot(xa, y(2,:));
+title('expert 2');
+
+subplot(3,2,3);
+plot(xa, pr(1,:));
+title('gating 1');
+
+subplot(3,2,4);
+plot(xa, pr(2,:));
+title('gating 2');
+
+subplot(3,2,5);
+plot(xa, yg);
+axis([-1 1 -1 2])
+title('prediction');
+
+subplot(3,2,6);
+title('data');
+hold on
+plot(data(:,1), data(:,2), '+');
+hold off
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Misc/sprinkler.bif	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+network Grass
+    {}
+variable Cloudy
+    { type discrete[2] {false true}; }
+variable Sprinkler
+    { type discrete[2] {false true}; }
+variable Rain
+    { type discrete[2] {false true}; }
+variable WetGrass
+    { type discrete[2] {false true}; }
+probability (Cloudy)
+    { table 0.5 0.5; }
+probability (Sprinkler | Cloudy)
+    { table 0.5 0.9 0.5 0.1; }
+probability (Rain | Cloudy)
+    { table 0.8 0.2 0.2 0.8; }
+probability (WetGrass | Rain Sprinkler)
+    { table 1.0 0.1 0.1 0.01 0.0 0.9 0.9 0.99; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+/mk_alarm_bnet.m/1.1.1.1/Sun Nov  3 16:44:14 2002//
+/mk_asia_bnet.m/1.1.1.1/Wed Mar 26 00:06:42 2003//
+/mk_cancer_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_car_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_hmm_bnet.m/1.1.1.1/Thu Jan 15 01:06:12 2004//
+/mk_ideker_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_incinerator_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_markov_chain_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_minimal_qmr_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_qmr_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_vstruct_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static/Models
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/mk_hmm_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static/Models/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/Old/mk_hmm_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+function [bnet, onodes] = mk_hmm_bnet(T, Q, O, cts_obs, param_tying)
+% MK_HMM_BNET Make a (static( bnet to represent a hidden Markov model
+% [bnet, onodes] = mk_hmm_bnet(T, Q, O, cts_obs, param_tying)
+%
+% T = num time slices
+% Q = num hidden states
+% O = size of the observed node (num discrete values or length of vector)
+% cts_obs - 1 means the observed node is a continuous-valued vector, 0 means it's discrete
+% param_tying - 1 means we create 3 CPDs, 0 means we create 1 CPD per node
+
+N = 2*T;
+dag = zeros(N);
+for i=1:T-1
+  dag(i,i+1)=1;
+end
+onodes = T+1:N;
+for i=1:T
+  dag(i, onodes(i)) = 1;
+end
+
+if cts_obs
+  dnodes = 1:T;
+else
+  dnodes = 1:N;
+end
+ns = [Q*ones(1,T) O*ones(1,T)];
+
+if param_tying
+  eclass = [1 2*ones(1,T-1) 3*ones(1,T)];
+else
+  eclass = 1:N;
+end
+
+bnet = mk_bnet(dag, ns, dnodes, eclass);
+
+hnodes = mysetdiff(1:N, onodes);
+if ~param_tying
+  for i=hnodes(:)'
+    bnet.CPD{i} = tabular_CPD(bnet, i);
+  end
+  if cts_obs
+    for i=onodes(:)'
+      bnet.CPD{i} = gaussian_CPD(bnet, i);
+    end
+  else
+    for i=onodes(:)'
+      bnet.CPD{i} = tabular_CPD(bnet, i);
+    end
+  end
+else
+  bnet.CPD{1} = tabular_CPD(bnet, 1);
+  bnet.CPD{2} = tabular_CPD(bnet, 2);
+  if cts_obs
+    bnet.CPD{3} = gaussian_CPD(bnet, 3);
+  else
+    bnet.CPD{3} = tabular_CPD(bnet, 3);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_alarm_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,118 @@
+function bnet = mk_alarm_bnet()
+
+% Written by Qian Diao <qian.diao@intel.com> on 11 Dec 01
+
+N = 37;
+dag = zeros(N,N);
+dag(21,23) = 1 ;
+dag(21,24) = 1 ;
+dag(1,24) = 1 ;
+dag(1,23) = 1 ;
+dag(2,26) = 1 ;
+dag(2,25) = 1 ;
+dag(2,24) = 1 ;
+dag(2,13) = 1 ;
+dag(2,23) = 1 ;
+dag(13,30) = 1 ;
+dag(30,31) = 1 ;
+dag(3,14) = 1 ;
+dag(3,19) = 1 ;
+dag(4,36) = 1 ;
+dag(14,35) = 1 ;
+dag(32,33) = 1 ;
+dag(32,35) = 1 ;
+dag(32,34) = 1 ;
+dag(32,36) = 1 ;
+dag(15,21) = 1 ;
+dag(5,31) = 1 ;
+dag(27,30) = 1 ;
+dag(28,31) = 1 ;
+dag(28,29) = 1 ;
+dag(26,28) = 1 ;
+dag(26,27) = 1 ;
+dag(16,31) = 1 ;
+dag(16,37) = 1 ;
+dag(23,26) = 1 ;
+dag(23,29) = 1 ;
+dag(23,25) = 1 ;
+dag(6,15) = 1 ;
+dag(7,27) = 1 ;
+dag(8,21) = 1 ;
+dag(19,20) = 1 ;
+dag(19,22) = 1 ;
+dag(31,32) = 1 ;
+dag(9,14) = 1 ;
+dag(9,17) = 1 ;
+dag(9,19) = 1 ;
+dag(10,33) = 1 ;
+dag(10,34) = 1 ;
+dag(11,16) = 1 ;
+dag(12,13) = 1 ;
+dag(12,18) = 1 ;
+dag(35,37) = 1 ;
+
+node_sizes = 2*ones(1,N);
+node_sizes(2) = 3;
+node_sizes(6) = 3;
+node_sizes(14) = 3;
+node_sizes(15) = 4;
+node_sizes(16) = 3;
+node_sizes(18) = 3;
+node_sizes(19) = 3;
+node_sizes(20) = 3;
+node_sizes(21) = 4;
+node_sizes(22) = 3;
+node_sizes(23) = 4;
+node_sizes(24) = 4;
+node_sizes(25) = 4;
+node_sizes(26) = 4;
+node_sizes(27) = 3;
+node_sizes(28) = 3;
+node_sizes(29) = 4;
+node_sizes(30) = 3;
+node_sizes(32) = 3;
+node_sizes(33) = 3;
+node_sizes(34) = 3;
+node_sizes(35) = 3;
+node_sizes(36) = 3;
+node_sizes(37) = 3;
+
+bnet = mk_bnet(dag, node_sizes);
+
+bnet.CPD{1} = tabular_CPD(bnet, 1,[0.96 0.04 ]);
+bnet.CPD{2} = tabular_CPD(bnet, 2,[0.92 0.03 0.05 ]);
+bnet.CPD{3} = tabular_CPD(bnet, 3,[0.8 0.2 ]);
+bnet.CPD{4} = tabular_CPD(bnet, 4,[0.95 0.05 ]);
+bnet.CPD{5} = tabular_CPD(bnet, 5,[0.8 0.2 ]);
+bnet.CPD{6} = tabular_CPD(bnet, 6,[0.01 0.98 0.01 ]);
+bnet.CPD{7} = tabular_CPD(bnet, 7,[0.01 0.99 ]);
+bnet.CPD{8} = tabular_CPD(bnet, 8,[0.95 0.05 ]);
+bnet.CPD{9} = tabular_CPD(bnet, 9,[0.95 0.05 ]);
+bnet.CPD{10} = tabular_CPD(bnet, 10,[0.9 0.1 ]);
+bnet.CPD{11} = tabular_CPD(bnet, 11,[0.99 0.01 ]);
+bnet.CPD{12} = tabular_CPD(bnet, 12,[0.99 0.01 ]);
+bnet.CPD{13} = tabular_CPD(bnet, 13,[0.95 0.95 0.05 0.1 0.1 0.01 0.05 0.05 0.95 0.9 0.9 0.99 ]);
+bnet.CPD{14} = tabular_CPD(bnet, 14,[0.05 0.95 0.5 0.98 0.9 0.04 0.49 0.01 0.05 0.01 0.01 0.01 ]);
+bnet.CPD{15} = tabular_CPD(bnet, 15,[0.01 0.01 0.01 0.97 0.01 0.01 0.01 0.97 0.01 0.01 0.01 0.97 ]);
+bnet.CPD{16} = tabular_CPD(bnet, 16,[0.3 0.98 0.4 0.01 0.3 0.01 ]);
+bnet.CPD{17} = tabular_CPD(bnet, 17,[0.99 0.1 0.01 0.9 ]);
+bnet.CPD{18} = tabular_CPD(bnet, 18,[0.05 0.01 0.9 0.19 0.05 0.8 ]);
+bnet.CPD{19} = tabular_CPD(bnet, 19,[0.05 0.98 0.01 0.95 0.9 0.01 0.09 0.04 0.05 0.01 0.9 0.01 ]);
+bnet.CPD{20} = tabular_CPD(bnet, 20,[0.95 0.04 0.01 0.04 0.95 0.29 0.01 0.01 0.7 ]);
+bnet.CPD{21} = tabular_CPD(bnet, 21,[0.97 0.97 0.01 0.97 0.01 0.97 0.01 0.97 0.01 0.01 0.97 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.01 ]);
+bnet.CPD{22} = tabular_CPD(bnet, 22,[0.95 0.04 0.01 0.04 0.95 0.04 0.01 0.01 0.95 ]);
+bnet.CPD{23} = tabular_CPD(bnet, 23,[0.97 0.97 0.97 0.97 0.97 0.97 0.01 0.95 0.97 0.97 0.01 0.95 0.01 0.4 0.97 0.97 0.01 0.5 0.01 0.3 0.97 0.97 0.01 0.3 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.03 0.01 0.01 0.97 0.03 0.01 0.58 0.01 0.01 0.01 0.48 0.01 0.68 0.01 0.01 0.01 0.68 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.01 0.01 0.01 0.97 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.01 0.01 0.01 0.97 0.01 ]);
+bnet.CPD{24} = tabular_CPD(bnet, 24,[0.97 0.97 0.97 0.97 0.97 0.97 0.01 0.01 0.4 0.1 0.01 0.01 0.01 0.01 0.2 0.05 0.01 0.01 0.01 0.01 0.2 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.49 0.58 0.84 0.9 0.29 0.01 0.01 0.75 0.25 0.01 0.01 0.01 0.01 0.7 0.15 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.3 0.01 0.05 0.08 0.3 0.97 0.08 0.04 0.25 0.38 0.08 0.01 0.01 0.09 0.25 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.2 0.01 0.01 0.01 0.4 0.01 0.9 0.01 0.45 0.6 0.9 0.97 0.97 0.01 0.59 0.97 0.97 ]);
+bnet.CPD{25} = tabular_CPD(bnet, 25,[0.97 0.97 0.97 0.01 0.6 0.01 0.01 0.5 0.01 0.01 0.5 0.01 0.01 0.01 0.01 0.97 0.38 0.97 0.01 0.48 0.01 0.01 0.48 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.01 0.97 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.01 0.97 ]);
+bnet.CPD{26} = tabular_CPD(bnet, 26,[0.97 0.97 0.97 0.01 0.01 0.03 0.01 0.01 0.01 0.97 0.01 0.01 0.01 0.01 0.01 0.97 0.97 0.95 0.01 0.01 0.94 0.01 0.01 0.88 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.97 0.04 0.01 0.01 0.1 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.97 0.01 ]);
+bnet.CPD{27} = tabular_CPD(bnet, 27,[0.98 0.98 0.98 0.98 0.95 0.01 0.95 0.01 0.01 0.01 0.01 0.01 0.04 0.95 0.04 0.01 0.01 0.01 0.01 0.01 0.01 0.04 0.01 0.98 ]);
+bnet.CPD{28} = tabular_CPD(bnet, 28,[0.01 0.01 0.04 0.9 0.01 0.01 0.92 0.09 0.98 0.98 0.04 0.01 ]);
+bnet.CPD{29} = tabular_CPD(bnet, 29,[0.97 0.01 0.01 0.01 0.97 0.01 0.01 0.01 0.97 0.01 0.01 0.01 0.01 0.97 0.97 0.97 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.97 0.97 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.97 0.97 0.43 ]);
+bnet.CPD{30} = tabular_CPD(bnet, 30,[0.98 0.98 0.01 0.98 0.01 0.69 0.01 0.01 0.98 0.01 0.01 0.3 0.01 0.01 0.01 0.01 0.98 0.01 ]);
+bnet.CPD{31} = tabular_CPD(bnet, 31,[0.05 0.01 0.05 0.01 0.05 0.01 0.05 0.01 0.05 0.01 0.05 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.1 0.01 0.95 0.01 0.95 0.05 0.1 0.01 0.95 0.01 0.95 0.05 0.1 0.01 0.3 0.01 0.3 0.01 0.95 0.01 0.99 0.05 0.95 0.05 0.95 0.01 0.99 0.05 0.99 0.05 0.3 0.01 0.99 0.01 0.3 0.01 0.95 0.99 0.95 0.99 0.95 0.99 0.95 0.99 0.95 0.99 0.95 0.99 0.99 0.99 0.99 0.99 0.99 0.99 0.9 0.99 0.05 0.99 0.05 0.95 0.9 0.99 0.05 0.99 0.05 0.95 0.9 0.99 0.7 0.99 0.7 0.99 0.05 0.99 0.00999999 0.95 0.05 0.95 0.05 0.99 0.01 0.95 0.01 0.95 0.7 0.99 0.01 0.99 0.7 0.99 ]);
+bnet.CPD{32} = tabular_CPD(bnet, 32,[0.1 0.01 0.89 0.09 0.01 0.9 ]);
+bnet.CPD{33} = tabular_CPD(bnet, 33,[0.98 0.33333334 0.01 0.33333334 0.01 0.33333334 0.01 0.33333334 0.98 0.33333334 0.01 0.33333334 0.01 0.33333334 0.01 0.33333334 0.98 0.33333334 ]);
+bnet.CPD{34} = tabular_CPD(bnet, 34,[0.98 0.33333334 0.01 0.33333334 0.01 0.33333334 0.01 0.33333334 0.98 0.33333334 0.01 0.33333334 0.01 0.33333334 0.01 0.33333334 0.98 0.33333334 ]);
+bnet.CPD{35} = tabular_CPD(bnet, 35,[0.98 0.95 0.3 0.95 0.04 0.01 0.8 0.01 0.01 0.01 0.04 0.69 0.04 0.95 0.3 0.19 0.04 0.01 0.01 0.01 0.01 0.01 0.01 0.69 0.01 0.95 0.98 ]);
+bnet.CPD{36} = tabular_CPD(bnet, 36,[0.98 0.98 0.01 0.4 0.01 0.3 0.01 0.01 0.98 0.59 0.01 0.4 0.01 0.01 0.01 0.01 0.98 0.3 ]);
+bnet.CPD{37} = tabular_CPD(bnet, 37,[0.98 0.98 0.3 0.98 0.1 0.05 0.9 0.05 0.01 0.01 0.01 0.6 0.01 0.85 0.4 0.09 0.2 0.09 0.01 0.01 0.1 0.01 0.05 0.55 0.01 0.75 0.9 ]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_asia_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+function bnet = mk_asia_bnet(CPD_type, p, arity)
+% MK_ASIA_BNET Make the 'Asia' bayes net.
+%
+% BNET = MK_ASIA_BNET uses the parameters specified on p21 of Cowell et al, 
+% "Probabilistic networks and expert systems", Springer Verlag 1999.
+% 
+% BNET = MK_ASIA_BNET('cpt', p) uses random parameters drawn from a Dirichlet(p,p,...)
+% distribution. If p << 1, this is nearly deterministic; if p >> 1, this is nearly uniform.
+% 
+% BNET = MK_ASIA_BNET('bool') makes each CPT a random boolean function.
+%
+% BNET = MK_ASIA_BNET('gauss') makes each CPT a random linear Gaussian distribution.
+%
+% BNET = MK_ASIA_BNET('orig') is the same as MK_ASIA_BNET.
+%
+% BNET = MK_ASIA_BNET('cpt', p, arity) can specify non-binary nodes.
+
+
+if nargin == 0, CPD_type = 'orig'; end
+if nargin < 3, arity = 2; end
+
+Smoking = 1;
+Bronchitis = 2;
+LungCancer = 3;
+VisitToAsia = 4;
+TB = 5;
+TBorCancer = 6;
+Dys = 7;
+Xray = 8;
+
+n = 8;
+dag = zeros(n);
+dag(Smoking, [Bronchitis LungCancer]) = 1;
+dag(Bronchitis, Dys) = 1;
+dag(LungCancer, TBorCancer) = 1;
+dag(VisitToAsia, TB) = 1;
+dag(TB, TBorCancer) = 1;
+dag(TBorCancer, [Dys Xray]) = 1;
+
+ns = arity*ones(1,n);
+if strcmp(CPD_type, 'gauss')
+  dnodes = [];
+else
+  dnodes = 1:n;
+end
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+
+switch CPD_type
+  case 'orig', 
+    % true is 2, false is 1
+    bnet.CPD{VisitToAsia} = tabular_CPD(bnet, VisitToAsia, [0.99   0.01]);
+    bnet.CPD{Bronchitis} = tabular_CPD(bnet, Bronchitis, [0.7 0.4   0.3 0.6]);
+    % minka: bug fix
+    bnet.CPD{Dys} = tabular_CPD(bnet, Dys, [0.9 0.2 0.3 0.1   0.1 0.8 0.7 0.9]);
+    bnet.CPD{TBorCancer} = tabular_CPD(bnet, TBorCancer, [1 0 0 0   0 1 1 1]);
+    % minka: bug fix
+    bnet.CPD{LungCancer} = tabular_CPD(bnet, LungCancer, [0.99 0.9  0.01 0.1]);
+    bnet.CPD{Smoking} = tabular_CPD(bnet, Smoking, [0.5 0.5]);
+    bnet.CPD{TB} = tabular_CPD(bnet, TB, [0.99 0.95  0.01 0.05]);
+    bnet.CPD{Xray} = tabular_CPD(bnet, Xray, [0.95 0.02  0.05 0.98]);
+ case 'bool',
+  for i=1:n
+    bnet.CPD{i} = boolean_CPD(bnet, i, 'rnd');
+  end
+ case 'gauss',
+  for i=1:n
+    bnet.CPD{i} = gaussian_CPD(bnet, i, 'cov', 1*eye(ns(i)));
+  end
+ case 'cpt',
+  for i=1:n
+    bnet.CPD{i} = tabular_CPD(bnet, i, p);
+  end
+end
+
+  
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_cancer_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,61 @@
+function bnet = mk_cancer_bnet(CPD_type, p)
+% MK_CANCER_BNET Make the 'Cancer' Bayes net.
+%
+% BNET = MK_CANCER_BNET uses the noisy-or parameters specified in Fig 4a of the UAI98 paper by
+% Friedman, Murphy and Russell, "Learning the Structure of DPNs", p145.
+%
+% BNET = MK_CANCER_BNET('noisyor', p) makes each CPD a noisy-or, with probability p of
+% suppression for each parent; leaks are turned off.
+%
+% BNET = MK_CANCER_BNET('cpt', p) uses random CPT parameters drawn from a Dirichlet(p,p,...)
+% distribution. If p << 1, this is near deterministic; if p >> 1, this is near 1/k.
+% p defaults to 1.0 (uniform distribution).
+%
+% BNET = MK_CANCER_BNET('bool') makes each CPT a random boolean function.
+%
+% In all cases, the root is set to a uniform distribution.
+
+if nargin == 0
+  rnd = 0;
+else
+  rnd = 1;
+end
+
+n = 5;
+dag = zeros(n);
+dag(1,[2 3]) = 1;
+dag(2,4) = 1;
+dag(3,4) = 1;
+dag(4,5) = 1;
+
+ns = 2*ones(1,n);
+bnet = mk_bnet(dag, ns);
+    
+if ~rnd
+  bnet.CPD{1} = tabular_CPD(bnet, 1, [0.5 0.5]);
+  bnet.CPD{2} = noisyor_CPD(bnet, 2, 1.0, 1-0.9);
+  bnet.CPD{3} = noisyor_CPD(bnet, 3, 1.0, 1-0.2);
+  bnet.CPD{4} = noisyor_CPD(bnet, 4, 1.0, 1-[0.7 0.6]);
+  bnet.CPD{5} = noisyor_CPD(bnet, 5, 1.0, 1-0.5);
+else
+  switch CPD_type
+   case 'noisyor',
+    for i=1:n
+      ps = parents(dag, i);
+      bnet.CPD{i} = noisyor_CPD(bnet, i, 1.0, p*ones(1,length(ps)));
+    end
+   case 'bool',
+    for i=1:n
+      bnet.CPD{i} = boolean_CPD(bnet, i, 'rnd');
+    end
+   case 'cpt',
+    for i=1:n
+      bnet.CPD{i} = tabular_CPD(bnet, i, p);
+    end
+   otherwise
+    error(['bad CPD type ' CPD_type]);
+  end
+end
+  
+  
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_car_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function bnet = mk_car_bnet()
+% MK_CAR_BNET Make the car trouble-shooter bayes net.
+%
+% This network is from p13 of "Troubleshooting under uncertainty", Heckerman, Breese and
+% Rommelse, Microsoft Research Tech Report 1994.
+
+
+BatteryAge = 1;
+Battery = 2;
+Starter = 3;
+Lights = 4;
+TurnsOver = 5;
+FuelPump = 6;
+FuelLine = 7;
+FuelSubsys =8;
+Fuel = 9;
+Spark = 10;
+Starts = 11;
+Gauge = 12;
+
+n = 12;
+dag = zeros(n);
+dag(1,2) = 1;
+dag(2,[4 5])=1;
+dag(3,5) = 1;
+dag(6,8) = 1;
+dag(7,8) = 1;
+dag(8,11) = 1;
+dag(9,12) = 1;
+dag(10,11) = 1;
+
+arity = 2;
+ns = arity*ones(1,n);
+bnet = mk_bnet(dag, ns);
+for i=1:n
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_hmm_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+function bnet = mk_hmm_bnet(T, Q, O, cts_obs, param_tying)
+% MK_HMM_BNET Make a (static) bnet to represent a hidden Markov model
+% bnet = mk_hmm_bnet(T, Q, O, cts_obs, param_tying)
+%
+% T = num time slices
+% Q = num hidden states
+% O = size of the observed node (num discrete values or length of vector)
+% cts_obs - 1 means the observed node is a continuous-valued vector, 0 means it's discrete
+% param_tying - 1 means we create 3 CPDs, 0 means we create 1 CPD per node
+
+N = 2*T;
+dag = zeros(N);
+%hnodes = 1:2:2*T;
+hnodes = 1:T;
+for i=1:T-1
+  dag(hnodes(i), hnodes(i+1))=1;
+end
+%onodes = 2:2:2*T;
+onodes = T+1:2*T;
+for i=1:T
+  dag(hnodes(i), onodes(i)) = 1;
+end
+
+if cts_obs
+  dnodes = hnodes;
+else
+  dnodes = 1:N;
+end
+ns = ones(1,N);
+ns(hnodes) = Q;
+ns(onodes) = O;
+
+if param_tying
+  H1class = 1; Hclass = 2; Oclass = 3;
+  eclass = ones(1,N);
+  eclass(hnodes(2:end)) = Hclass;
+  eclass(hnodes(1)) = H1class;
+  eclass(onodes) = Oclass;
+else
+  eclass = 1:N;
+end
+
+bnet = mk_bnet(dag, ns, 'observed', onodes, 'discrete', dnodes, 'equiv_class', eclass);
+
+hnodes = mysetdiff(1:N, onodes);
+if ~param_tying
+  for i=hnodes(:)'
+    bnet.CPD{i} = tabular_CPD(bnet, i);
+  end
+  if cts_obs
+    for i=onodes(:)'
+      bnet.CPD{i} = gaussian_CPD(bnet, i);
+    end
+  else
+    for i=onodes(:)'
+      bnet.CPD{i} = tabular_CPD(bnet, i);
+    end
+  end
+else
+  bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+  bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+  if cts_obs
+    bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+  else
+    bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_ideker_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function bnet = mk_ideker_bnet(CPD_type, p)
+% MK_IDEKER_BNET Make the Bayes net in the PSB'00 paper by Ideker, Thorsson and Karp.
+%
+% BNET = MK_IDEKER_BNET uses the boolean functions specified in the paper 
+% "Discovery of regulatory interactions through perturbation: inference and experimental design",
+% Pacific Symp. on Biocomputing, 2000.
+% 
+% BNET = MK_IDEKER_BNET('root') uses the above boolean functions, but puts a uniform
+% distribution on the root nodes.
+%
+% BNET = MK_IDEKER_BNET('cpt', p) uses random parameters drawn from a Dirichlet(p,p,...)
+% distribution. If p << 1, this is nearly deterministic; if p >> 1, this is nearly uniform.
+% 
+% BNET = MK_IDEKER_BNET('bool') makes each CPT a random boolean function.
+%
+% BNET = MK_IDEKER_BNET('orig') is the same as MK_IDEKER_BNET.
+
+
+if nargin == 0
+  CPD_type = 'orig';
+end
+
+n = 4;
+dag = zeros(n);
+dag(1,3)=1;
+dag(2,[3 4])=1;
+dag(3,4)=1;
+ns = 2*ones(1,n);
+bnet = mk_bnet(dag, ns);
+
+switch CPD_type
+ case 'orig',
+  bnet.CPD{1} = tabular_CPD(bnet, 1, [0 1]);
+  bnet.CPD{2} = tabular_CPD(bnet, 2, [0 1]);
+  bnet.CPD{3} = boolean_CPD(bnet, 3, 'inline', inline('x(1) & x(2)'));
+  bnet.CPD{4} = boolean_CPD(bnet, 4, 'inline', inline('x(1) & ~x(2)'));
+ case 'root',
+  bnet.CPD{1} = tabular_CPD(bnet, 1, [0.5 0.5]);
+  bnet.CPD{2} = tabular_CPD(bnet, 2, [0.5 0.5]);
+  bnet.CPD{3} = boolean_CPD(bnet, 3, 'inline', inline('x(1) & x(2)'));
+  bnet.CPD{4} = boolean_CPD(bnet, 4, 'inline', inline('x(1) & ~x(2)'));
+ case 'bool',
+  for i=1:n
+    bnet.CPD{i} = boolean_CPD(bnet, i, 'rnd');
+  end
+ case 'cpt',
+  for i=1:n
+    bnet.CPD{i} = tabular_CPD(bnet, i, p);
+  end
+ otherwise,
+  error(['unknown type ' CPD_type]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_incinerator_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,61 @@
+function bnet  = mk_incinerator_bnet(ns)
+% MK_INCINERATOR_BNET The waste incinerator emissions example from Cowell et al p145
+% function bnet  = mk_incinerator_bnet(ns)
+% 
+% If ns is omitted, we use the scalars and binary nodes and the original params.
+% Otherwise, we use random params of the desired size.
+%
+% Lauritzen, "Propogation of Probabilities, Means and Variances in Mixed Graphical Association Models", 
+% JASA 87(420): 1098--1108
+% This example is reprinted on p145 of "Probabilistic Networks and Expert Systems",
+% Cowell, Dawid, Lauritzen and Spiegelhalter, 1999, Springer. 
+% For a picture, see http://www.cs.berkeley.edu/~murphyk/Bayes/usage.html#cg_model
+
+% node numbers
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+names = {'F', 'W', 'E', 'B', 'C', 'D', 'Min', 'Mout', 'L'};
+n = 9;
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+if nargin < 1
+  ns = ones(1, n);
+  ns(dnodes) = 2;
+  rnd = 0;
+else
+  rnd = 1;
+end
+  
+% topology (p 1099, fig 1)
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% params (p 1102)
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'names', names);
+
+if rnd
+  for i=dnodes(:)'
+    bnet.CPD{i} = tabular_CPD(bnet, i);
+  end
+  for i=cnodes(:)'
+    bnet.CPD{i} = gaussian_CPD(bnet, i);
+  end
+else
+  bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+  bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+  bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+  bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			     'cov', [0.00002 0.0001 0.00002 0.0001]);
+  bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			     'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+  bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+  bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+  bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+  bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_markov_chain_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function bnet = mk_markov_chain_bnet(N, Q)
+
+dag = zeros(N);
+dag(1,2)=1; dag(2,3)=1;
+ns = Q*ones(1,N); 
+bnet = mk_bnet(dag, ns);
+for i=1:N
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_minimal_qmr_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,82 @@
+function [bnet, vals] = mk_minimal_qmr_bnet(G, inhibit, leak, prior, pos, neg, pos_only)
+% MK_MINIMAL_QMR_BNET Make a QMR model which only contains the observed findings
+% [bnet, vals] = mk_minimal_qmr_bnet(G, inhibit, prior, leak, pos, neg)
+%
+% Input:
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+% pos = list of leaves that have positive observations
+% neg = list of leaves that have negative observations
+% pos_only = 1 means only include positively observed leaves in the model - the negative
+%   ones are absorbed into the prior terms
+%
+% Output:
+% bnet
+% vals is their value
+
+if pos_only
+  obs = pos;
+else
+  obs = myunion(pos, neg);
+end
+Nfindings = length(obs);
+[Ndiseases maxNfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+
+% j = finding_node(i) means the i'th finding node is the j'th node in the bnet
+% k = obs(i) means the i'th observed (positive) finding is the k'th finding overall
+% If all findings are observed, and posonly = 0, we have i = obs(i) for all i.
+
+%dag = sparse(N, N);
+dag = zeros(N, N);
+dag(1:Ndiseases, Ndiseases+1:N) = G(:,obs);
+
+ns = 2*ones(1,N);
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+CPT = cell(1, Ndiseases);
+for d=1:Ndiseases
+  CPT{d} = [1-prior(d) prior(d)];
+end
+
+if pos_only
+  % Fold in the negative evidence into the prior
+  for i=1:length(neg)
+    n = neg(i);
+    ps = parents(G,n);
+    for pi=1:length(ps)
+      p = ps(pi);
+      q = inhibit(p,n);
+      CPT{p} = CPT{p} .* [1 q];
+    end
+    % Arbitrarily attach the leak term to the first parent
+    p = ps(1);
+    q = leak(n);
+    CPT{p} = CPT{p} .* [q q];
+  end
+end
+
+for d=1:Ndiseases
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT{d}');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  fid = obs(i);
+  ps = parents(G, fid);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(fid), inhibit(ps, fid));
+end
+
+obs_nodes = finding_node;
+vals = sparse(1, maxNfindings);
+vals(pos) = 2;
+vals(neg) = 1;
+vals = full(vals(obs));
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_qmr_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior, tabular_findings, onodes)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+% tabular_findings = 1 means multinomial leaves (ignores leak/inhibit params)
+%   = 0 means noisy-OR leaves (default = 0)
+
+if nargin < 5, tabular_findings = 0; end
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+if nargin < 6, onodes = finding_node; end
+bnet = mk_bnet(dag, ns, 'observed', onodes);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  if tabular_findings
+    bnet.CPD{fnode} = tabular_CPD(bnet, fnode); 
+  else
+    bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+  end
+end
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Models/mk_vstruct_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function oracle = mk_vstruct_bnet()
+% MK_VSTRUCT_BNET Make a simple V-structured 3-node noisy-AND Bayes net
+% oracle = mk_vstruct_bnet()
+
+N = 3;
+dag = zeros(N);
+A = 1; B = 2; C = 3;
+dag(A,C)=1;
+dag(B,C)=1;
+ns = 2*ones(1,N);
+
+oracle = mk_bnet(dag, ns);
+oracle.CPD{1} = tabular_CPD(oracle, 1, [0.5 0.5]);
+oracle.CPD{2} = tabular_CPD(oracle, 2, [0.5 0.5]);
+pnoise = 0.1; % degree of noise
+oracle.CPD{3} = boolean_CPD(oracle, 3, 'named', 'all', pnoise);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/scg1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/scg2.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/scg3.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/scg_3node.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/scg_unstable.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static/SCG
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/scg1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,77 @@
+% Same as cg1, except we call stab_cond_gauss_inf_engine
+
+bnet  = mk_incinerator_bnet;
+
+engines = {};
+engines{end+1} = stab_cond_gauss_inf_engine(bnet);
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = cond_gauss_inf_engine(bnet);
+nengines = length(engines);
+
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+dnodes = [B F W];
+cnodes = mysetdiff(1:n, dnodes);
+
+evidence = cell(1,n); % no evidence
+ll = zeros(1, nengines);
+for e=1:nengines
+  [engines{e}, ll(e)] = enter_evidence(engines{e}, evidence);
+end
+%assert(approxeq(ll(1), ll)))
+ll
+
+% Compare to the results in table on p1107.
+% These results are printed to 3dp in Cowell p150
+
+mu = zeros(1,n);
+sigma = zeros(1,n);
+dprob = zeros(1,n);
+addev = 1;
+tol = 1e-2;
+for e=1:nengines
+  for i=cnodes(:)'
+    m = marginal_nodes(engines{e}, i, addev);
+    mu(i) = m.mu;
+    sigma(i) = sqrt(m.Sigma);
+  end
+  for i=dnodes(:)'
+    m = marginal_nodes(engines{e}, i, addev);
+    dprob(i) = m.T(1);
+  end
+  assert(approxeq(mu([E D C L Min Mout]), [-3.25 3.04 -1.85 1.48 -0.214 2.83], tol))
+  assert(approxeq(sigma([E D C L Min Mout]), [0.709 0.770 0.507 0.631 0.459 0.860], tol))
+  assert(approxeq(dprob([B F W]), [0.85 0.95 0.29], tol))
+  %m = marginal_nodes(engines{e}, bnet.names('E'), addev);
+  %assert(approxeq(m.mu, -3.25, tol))
+  %assert(approxeq(sqrt(m.Sigma), 0.709, tol))
+end
+
+% Add evidence (p 1105, top right)
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+
+ll = zeros(1, nengines);
+for e=1:nengines
+  [engines{e}, ll(e)] = enter_evidence(engines{e}, evidence);
+end
+%assert(all(approxeq(ll(1), ll)))
+ll
+
+for e=1:nengines
+  for i=cnodes(:)'
+    m = marginal_nodes(engines{e}, i, addev);
+    mu(i) = m.mu;
+    sigma(i) = sqrt(m.Sigma);
+  end
+  for i=dnodes(:)'
+    m = marginal_nodes(engines{e}, i, addev);
+    dprob(i) = m.T(1);
+  end
+  assert(approxeq(mu([E D C L Min Mout]), [-3.90 3.61 -0.9 1.1 0.5 4.11], tol))
+  assert(approxeq(sigma([E D C L Min Mout]), [0.076 0.326 0 0 0.1 0.344], tol))
+  assert(approxeq(dprob([B F W]), [0.0122 0.9995 1], tol))
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/scg2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+% Same as cg2, except we call stab_cond_gauss_inf_engine
+
+ns = 2*ones(1,9);
+bnet  = mk_incinerator_bnet(ns);
+
+engines = {};
+engines{end+1} = stab_cond_gauss_inf_engine(bnet);
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = cond_gauss_inf_engine(bnet);
+nengines = length(engines);
+
+[err, time] = cmp_inference_static(bnet, engines, 'singletons_only', 1);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/scg3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+% Compare various inference engines on the following network (from Jensen (1996) p84 fig 4.17)
+%    1
+%  / | \
+% 2  3  4
+% |  |  |
+% 5  6  7
+%  \/ \/
+%  8   9
+% where all arcs point downwards
+
+N = 9;
+dag = zeros(N,N);
+dag(1,2)=1; dag(1,3)=1; dag(1,4)=1;
+dag(2,5)=1; dag(3,6)=1; dag(4,7)=1;
+dag(5,8)=1; dag(6,8)=1; dag(6,9)=1; dag(7,9) = 1;
+
+gauss = 1;
+if gauss
+  ns = ones(1,N); % scalar nodes
+  ns(1) = 2;
+  ns(9) = 3;
+  dnodes = [];
+else
+  ns = 2*ones(1,N); % binary nodes
+  dnodes = 1:N;
+end
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+% use random params
+for i=1:N
+  if gauss
+    bnet.CPD{i} = gaussian_CPD(bnet, i);
+  else
+    bnet.CPD{i} = tabular_CPD(bnet, i);
+  end
+end
+
+engines = {};
+engines{1} = jtree_inf_engine(bnet);
+engines{2} = stab_cond_gauss_inf_engine(bnet);
+
+[err, time] = cmp_inference_static(bnet, engines);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/scg_3node.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+% This example is from Page.143 of "Probabilistic Networks and Expert Systems",
+% Cowell, Dawid, Lauritzen and Spiegelhalter, 1999, Springer.
+
+X = 1; Y = 2; Z = 3;
+n = 3;
+
+dag = zeros(n);
+dag(X, Y)=1;
+dag(Y, Z)=1;
+
+ns = ones(1, n);
+dnodes = [];
+
+bnet = mk_bnet(dag, ns, dnodes);
+bnet.CPD{X} = gaussian_CPD(bnet, X, 'mean', 0, 'cov', 1);
+bnet.CPD{Y} = gaussian_CPD(bnet, Y, 'mean', 0, 'cov', 1, 'weights', 1);
+bnet.CPD{Z} = gaussian_CPD(bnet, Z, 'mean', 0, 'cov', 1, 'weights', 1);
+
+engines = {};
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = stab_cond_gauss_inf_engine(bnet);
+nengines = length(engines);
+
+evidence = cell(1,n);
+evidence{Y} = 1.5; 
+
+for e=1:nengines
+  engines{e} = enter_evidence(engines{e}, evidence);
+  margX = marginal_nodes(engines{e}, X);
+  assert(approxeq(margX.mu, 0.75))
+  assert(approxeq(margX.Sigma, 0.5))
+  
+  margZ = marginal_nodes(engines{e}, Z);
+  assert(approxeq(margZ.mu, 1.5))
+  assert(approxeq(margZ.Sigma, 1))
+end
+
+
+evidence = cell(1,n);
+evidence{Z} = 1.5; 
+
+for e=1:nengines
+  engines{e} = enter_evidence(engines{e}, evidence);
+  margX = marginal_nodes(engines{e}, X);
+  assert(approxeq(margX.mu, 1/2))
+  assert(approxeq(margX.Sigma, 2/3))
+  
+  margY = marginal_nodes(engines{e}, Y);
+  assert(approxeq(margY.mu, 1))
+  assert(approxeq(margY.Sigma, 2/3))
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/SCG/scg_unstable.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,91 @@
+function scg_unstable()
+
+% the objective of this script is to test if the stable conditonal gaussian
+% inference can handle the numerical instability problem described on
+% page.151 of 'Probabilistic networks and expert system' by Cowell, Dawid, Lauritzen and
+% Spiegelhalter, 1999.
+
+A = 1; Y = 2;
+n = 2;
+
+ns = ones(1, n);
+dnodes = [A];
+cnodes = Y;
+ns = [2 1];
+
+dag = zeros(n);
+dag(A, Y) = 1;
+
+bnet = mk_bnet(dag, ns, dnodes);
+
+bnet.CPD{A} = tabular_CPD(bnet, A, [0.5 0.5]'); 
+bnet.CPD{Y} = gaussian_CPD(bnet, Y, 'mean', [0 1], 'cov', [1e-5 1e-6]);
+
+evidence = cell(1, n);
+
+pot_type = 'cg';
+potYgivenA = convert_to_pot(bnet.CPD{Y}, pot_type, [A Y], evidence);
+potA = convert_to_pot(bnet.CPD{A}, pot_type, A, evidence);
+potYandA = multiply_by_pot(potYgivenA, potA);
+potA2 = marginalize_pot(potYandA, A);
+
+thresh = 1; % 0dp
+
+[g,h,K] = extract_can(potA);
+assert(approxeq(g(:)', [-0.693147 -0.693147], thresh))
+
+
+[g,h,K] = extract_can(potYgivenA);
+assert(approxeq(g(:)', [4.83752 -499994], thresh))
+assert(approxeq(h(:)', [0 1e6]))
+assert(approxeq(K(:)', [1e5 1e6]))
+
+[g,h,K] = extract_can(potYandA);
+assert(approxeq(g(:)', [4.14437 -499995], thresh))
+assert(approxeq(h(:)', [0 1e6]))
+assert(approxeq(K(:)', [1e5 1e6]))
+
+
+[g,h,K] = extract_can(potA2);
+%assert(approxeq(g(:)', [-0.69315 -1]))
+g
+assert(approxeq(g(:)', [-0.69315 -0.69315]))
+
+
+
+if 0
+pot_type = 'scg';
+spotYgivenA = convert_to_pot(bnet.CPD{Y}, pot_type, [A Y], evidence);
+spotA = convert_to_pot(bnet.CPD{A}, pot_type, A, evidence);
+spotYandA = direct_combine_pots(spotYgivenA, spotA); 
+spotA2 = marginalize_pot(spotYandA, A);
+
+spotA=struct(spotA);
+spotA2=struct(spotA2);
+for i=1:2
+  assert(approxeq(spotA2.scgpotc{i}.p, spotA.scgpotc{i}.p))
+  assert(approxeq(spotA2.scgpotc{i}.A, spotA.scgpotc{i}.A))
+  assert(approxeq(spotA2.scgpotc{i}.B, spotA.scgpotc{i}.B))
+  assert(approxeq(spotA2.scgpotc{i}.C, spotA.scgpotc{i}.C))
+end
+
+end
+
+
+%%%%%%%%%%%
+
+function [g,h,K] = extract_can(pot)
+
+pot = struct(pot);
+D = length(pot.can);
+g = zeros(1, D);
+h = zeros(1, D);
+K = zeros(1, D);
+for i=1:D
+  S = struct(pot.can{i});
+  g(i) = S.g;
+  if length(S.h) > 0
+    h(i) = S.h;
+    K(i) = S.K;
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+/bic1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/cooper_yoo.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/k2demo1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mcmc1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/model_select1.m/1.1.1.1/Sat Nov  6 20:55:18 2004//
+/model_select2.m/1.1.1.1/Sat Nov  6 21:52:42 2004//
+/pc1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/pc2.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static/StructLearn
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/bic1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+% compare BIC and Bayesian score 
+
+N = 4;
+dag = zeros(N,N);
+%C = 1; S = 2; R = 3; W = 4; % topological order
+C = 4; S = 2; R = 3; W = 1; % arbitrary order
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+
+
+false = 1; true = 2;
+ns = 2*ones(1,N); % binary nodes
+bnet = mk_bnet(dag, ns);
+bnet.CPD{C} = tabular_CPD(bnet, C, 'CPT', [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, 'CPT', [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, 'CPT', [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+ncases = 1000;
+data = cell(N, ncases);
+for m=1:ncases
+  data(:,m) = sample_bnet(bnet);
+end
+
+priors = [0.1 1 10];
+P = length(priors);
+params = cell(1,P);
+for p=1:P
+  params{p} = cell(1,N);
+  for i=1:N
+    %params{p}{i} = {'prior', priors(p)};
+    params{p}{i} = {'prior_type', 'dirichlet', 'dirichlet_weight', priors(p)};
+  end
+end
+
+%sz = 1000:1000:10000;
+sz = 10:10:100;
+S = length(sz);
+bic_score = zeros(S, 1);
+bayes_score = zeros(S, P);
+for i=1:S
+  bic_score(i) = score_dags(data(:,1:sz(i)), ns, {dag}, 'scoring_fn', 'bic', 'params', []);
+end
+diff = zeros(S,P);
+for p=1:P
+  for i=1:S
+    bayes_score(i,p) = score_dags(data(:,1:sz(i)), ns, {dag}, 'params', params{p});
+  end
+end
+
+for p=1:P
+  for i=1:S
+    diff(i,p) = bayes_score(i,p)/ bic_score(i);
+    %diff(i,p) = abs(bayes_score(i,p) - bic_score(i));
+  end
+end
+
+if 0
+plot(sz, diff(:,1), 'g--*', sz, diff(:,2), 'b-.+', sz, diff(:,3), 'k:s');
+title('Relative BIC error vs. size of data set')
+legend('BDeu 0.1', 'BDeu 1', 'Bdeu 10', 2)
+end
+
+if 0
+plot(sz, bic_score, 'r-o',  sz, bayes_score(:,1), 'g--*', sz, bayes_score(:,2), 'b-.+', sz, bayes_score(:,3), 'k:s');
+legend('bic', 'BDeu 0.01', 'BDeu 1', 'Bdeu 100')
+ylabel('score')
+title('score vs. size of data set')
+end
+
+%xlabel('num. data cases')
+
+%previewfig(gcf, 'format', 'png', 'height', 2, 'color', 'rgb')
+%exportfig(gcf, '/home/cs/murphyk/public_html/Bayes/Figures/bic.png', 'format', 'png', 'height', 2, 'color', 'rgb')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/cooper_yoo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+% Do the example in Cooper and Yoo, "Causal discovery from a mixture of experimental and
+% observational data", UAI 99, p120
+
+N = 2;
+dag = zeros(N);
+A = 1; B = 2;
+dag(A,B) = 1;
+ns = 2*ones(1,N);
+
+bnet0 = mk_bnet(dag, ns);
+%bnet0.CPD{A} = tabular_CPD(bnet0, A, 'unif', 1);
+bnet0.CPD{A} = tabular_CPD(bnet0, A, 'CPT', 'unif', 'prior_type', 'dirichlet');
+bnet0.CPD{B} = tabular_CPD(bnet0, B, 'CPT', 'unif', 'prior_type', 'dirichlet');
+
+samples = [2 2;
+	   2 1; 
+	   2 2;
+	   1 1;
+	   1 2;
+	   2 2;
+	   1 1;
+	   2 2;
+	   1 2;
+	   2 1;
+	   1 1];
+
+clamped = [0 0;
+	   0 0;
+	   0 0;
+	   0 0;
+	   0 0;
+	   1 0;
+	   1 0;
+	   0 1;
+	   0 1;
+	   0 1;
+	   0 1];
+
+nsamples = size(samples, 1);
+
+% sequential version
+LL = 0;
+bnet = bnet0;
+for l=1:nsamples
+  ev = num2cell(samples(l,:)');
+  manip = find(clamped(l,:)');
+  LL = LL + log_marg_lik_complete(bnet, ev, manip);
+  bnet = bayes_update_params(bnet, ev, manip);
+end
+assert(approxeq(exp(LL), 5.97e-7)) % compare with result from UAI paper
+
+
+% batch version
+cases = num2cell(samples');
+LL2 = log_marg_lik_complete(bnet0, cases, clamped');
+bnet2 = bayes_update_params(bnet0, cases, clamped');
+
+assert(approxeq(LL, LL2))
+
+for j=1:N
+  s1 = struct(bnet.CPD{j}); % violate object privacy
+  s2 = struct(bnet2.CPD{j});
+  assert(approxeq(s1.CPT, s2.CPT))
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/k2demo1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+N = 4;
+dag = zeros(N,N);
+%C = 1; S = 2; R = 3; W = 4;
+C = 4; S = 2; R = 3; W = 1; % arbitrary order
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+
+false = 1; true = 2;
+ns = 2*ones(1,N); % binary nodes
+
+bnet = mk_bnet(dag, ns);
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+ncases = 100;
+data = zeros(N, ncases);
+for m=1:ncases
+  data(:,m) = cell2num(sample_bnet(bnet));
+end
+
+order = [C S R W];
+max_fan_in = 2;
+
+%dag2 = learn_struct_K2(data, ns, order, 'max_fan_in', max_fan_in, 'verbose', 'yes');
+  
+sz = 5:5:50;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), ns, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+correct
+
+for i=1:length(sz)
+  dag3 = learn_struct_K2(data(:,1:sz(i)), ns, order, 'max_fan_in', max_fan_in, 'scoring_fn', 'bic', 'params', []);
+  correct(i) = isequal(dag, dag3);
+end
+correct
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/mcmc1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+% We compare MCMC structure learning with exhaustive enumeration of all dags.
+
+N = 3;
+%N = 4;
+dag = mk_rnd_dag(N);
+ns = 2*ones(1,N);
+bnet = mk_bnet(dag, ns);
+for i=1:N
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+ncases = 100;
+data = zeros(N, ncases);
+for m=1:ncases
+  data(:,m) = cell2num(sample_bnet(bnet));
+end
+
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+post  = normalise(exp(score));
+
+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, dags);
+
+if 0
+  subplot(2,1,1)
+  bar(post)
+  subplot(2,1,2)
+  bar(mcmc_post)
+  print(gcf, '-djpeg', '/home/cs/murphyk/public_html/Bayes/Figures/mcmc_post.jpg')
+
+  clf
+  plot(accept_ratio)
+  print(gcf, '-djpeg', '/home/cs/murphyk/public_html/Bayes/Figures/mcmc_accept.jpg')
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/model_select1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,121 @@
+% Bayesian model selection demo.
+
+% We generate data from the model A->B
+% and compute the posterior prob of all 3 dags on 2 nodes:
+%  (1) A B,  (2) A <- B , (3) A -> B
+% Models 2 and 3 are Markov equivalent, and therefore indistinguishable from 
+% observational data alone.
+% Using the "difficult" params, the true model only gets a higher posterior after 2000 trials!
+% However, using the noisy NOT gate, the true model wins after 12 trials.
+
+% ground truth
+N = 2;
+dag = zeros(N);
+A = 1; B = 2; 
+dag(A,B) = 1;
+
+difficult = 0;
+if difficult
+  ntrials = 2000;
+  ns = 3*ones(1,N);
+  true_bnet = mk_bnet(dag, ns);
+  rand('state', 0);
+  temp = 5;
+  for i=1:N
+    %true_bnet.CPD{i} = tabular_CPD(true_bnet, i, temp);
+    true_bnet.CPD{i} = tabular_CPD(true_bnet, i);
+  end
+else
+  ntrials = 25;
+  ns = 2*ones(1,N);
+  true_bnet = mk_bnet(dag, ns);
+  true_bnet.CPD{1} = tabular_CPD(true_bnet, 1, [0.5 0.5]);
+  pfail = 0.1;
+  psucc = 1-pfail;
+  true_bnet.CPD{2} = tabular_CPD(true_bnet, 2, [pfail psucc; psucc pfail]); % NOT gate
+end
+
+G = mk_all_dags(N);
+nhyp = length(G);
+hyp_bnet = cell(1, nhyp);
+for h=1:nhyp
+  hyp_bnet{h} = mk_bnet(G{h}, ns);
+  for i=1:N
+    % We must set the CPTs to the mean of the prior for sequential log_marg_lik to be correct
+    % The BDeu prior is score equivalent, so models 2,3 will be indistinguishable.
+    % The uniform Dirichlet prior is not score equivalent...
+    fam = family(G{h}, i);
+    hyp_bnet{h}.CPD{i}= tabular_CPD(hyp_bnet{h}, i, 'prior_type', 'dirichlet', ...
+				    'CPT', 'unif');
+  end
+end
+prior = normalise(ones(1, nhyp));
+
+% save results before doing sequential updating
+init_hyp_bnet = hyp_bnet; 
+init_prior = prior;
+
+
+rand('state', 0);
+hyp_w = zeros(ntrials+1, nhyp);
+hyp_w(1,:) = prior(:)';
+
+data = zeros(N, ntrials);
+
+% First we compute the posteriors sequentially
+
+LL = zeros(1, nhyp);
+ll = zeros(1, nhyp);
+for t=1:ntrials
+  ev = cell2num(sample_bnet(true_bnet));
+  data(:,t) = ev;
+  for i=1:nhyp
+    ll(i) = log_marg_lik_complete(hyp_bnet{i}, ev);
+    hyp_bnet{i} = bayes_update_params(hyp_bnet{i}, ev);
+  end
+  prior = normalise(prior .* exp(ll));
+  LL = LL + ll;
+  hyp_w(t+1,:) = prior;
+end
+
+% Plot posterior model probabilities
+% Red = model 1 (no arcs), blue/green = models 2/3 (1 arc)
+% Blue = model 2 (2->1)
+% Green = model 3 (1->2, "ground truth")
+
+if 1
+  figure;
+m = size(hyp_w, 1);
+h=plot(1:m, hyp_w(:,1), 'r-',  1:m, hyp_w(:,2), 'b-.', 1:m, hyp_w(:,3), 'g:');
+axis([0 m   0 1])
+title('model posterior vs. time')
+%previewfig(gcf, 'format', 'png', 'height', 2, 'color', 'rgb')
+%exportfig(gcf, '/home/cs/murphyk/public_html/Bayes/Figures/model_select.png',...
+%'format', 'png', 'height', 2, 'color', 'rgb')
+drawnow
+end
+
+
+% Now check that batch updating gives same result
+hyp_bnet2 = init_hyp_bnet;
+prior2 = init_prior;
+
+cases = num2cell(data);
+LL2 = zeros(1, nhyp);
+for i=1:nhyp
+  LL2(i) = log_marg_lik_complete(hyp_bnet2{i}, cases);
+  hyp_bnet2{i} = bayes_update_params(hyp_bnet2{i}, cases);
+end
+
+
+assert(approxeq(LL, LL2))
+LL
+
+for i=1:nhyp
+  for j=1:N
+    s1 = struct(hyp_bnet{i}.CPD{j});
+    s2 = struct(hyp_bnet2{i}.CPD{j});
+    assert(approxeq(s1.CPT, s2.CPT))
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/model_select2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,83 @@
+% Online Bayesian model selection demo.
+
+% We generate data from the model A->B
+% and compute the posterior prob of all 3 dags on 2 nodes:
+%  (1) A B,  (2) A <- B , (3) A -> B
+% Models 2 and 3 are Markov equivalent, and therefore indistinguishable from 
+% observational data alone.
+
+% We control the dependence of B on A by setting
+% P(B|A) = 0.5 - epislon and vary epsilon
+% as in Koller & Friedman book p512
+
+% ground truth
+N = 2;
+dag = zeros(N);
+A = 1; B = 2; 
+dag(A,B) = 1;
+
+ntrials = 100;
+ns = 2*ones(1,N);
+true_bnet = mk_bnet(dag, ns);
+true_bnet.CPD{1} = tabular_CPD(true_bnet, 1, [0.5 0.5]);
+
+% hypothesis space
+G = mk_all_dags(N);
+nhyp = length(G);
+hyp_bnet = cell(1, nhyp);
+for h=1:nhyp
+  hyp_bnet{h} = mk_bnet(G{h}, ns);
+  for i=1:N
+    % We must set the CPTs to the mean of the prior for sequential log_marg_lik to be correct
+    % The BDeu prior is score equivalent, so models 2,3 will be indistinguishable.
+    % The uniform Dirichlet prior is not score equivalent...
+    fam = family(G{h}, i);
+    hyp_bnet{h}.CPD{i}= tabular_CPD(hyp_bnet{h}, i, 'prior_type', 'dirichlet', ...
+				    'CPT', 'unif');
+  end
+end
+
+clf
+seeds = 1:3;
+expt = 1;
+for seedi=1:length(seeds)
+  seed = seeds(seedi);
+  rand('state', seed);
+  randn('state', seed);
+    
+  es = [0.05 0.1 0.15 0.2];
+  for ei=1:length(es)
+    e = es(ei);
+    true_bnet.CPD{2} = tabular_CPD(true_bnet, 2, [0.5+e 0.5-e; 0.5-e 0.5+e]);
+
+    prior = normalise(ones(1, nhyp));
+    hyp_w = zeros(ntrials+1, nhyp);
+    hyp_w(1,:) = prior(:)';
+    LL = zeros(1, nhyp);
+    ll = zeros(1, nhyp);
+    for t=1:ntrials
+      ev = cell2num(sample_bnet(true_bnet));
+      for i=1:nhyp
+	ll(i) = log_marg_lik_complete(hyp_bnet{i}, ev);
+	hyp_bnet{i} = bayes_update_params(hyp_bnet{i}, ev);
+      end
+      prior = normalise(prior .* exp(ll));
+      LL = LL + ll;
+      hyp_w(t+1,:) = prior;
+    end
+
+    % Plot posterior model probabilities
+    % Red = model 1 (no arcs), blue/green = models 2/3 (1 arc)
+    % Blue = model 2 (2->1)
+    % Green = model 3 (1->2, "ground truth")
+    
+    subplot2(length(seeds), length(es), seedi, ei);
+    m = size(hyp_w,1);
+    h=plot(1:m, hyp_w(:,1), 'r-',  1:m, hyp_w(:,2), 'b-.', 1:m, hyp_w(:,3), 'g:');
+    axis([0 m   0 1])
+    %title('model posterior vs. time')
+    title(sprintf('e=%3.2f, seed=%d', e, seed));
+    drawnow
+    expt = expt + 1;
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/pc1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+% SGS p118
+% Try learning the structure using an oracle for the cond indep tests
+
+n = 5;
+
+A = 1; B = 2; C = 3; D = 4; E = 5;
+
+G = zeros(n);
+G(A,B)=1;
+G(B,[C D]) = 1;
+G(C,E)=1;
+G(D,E)=1;
+
+k = 2;
+
+pdag = learn_struct_pdag_pc('dsep', n, k, G)
+
+
+
+
+if 0
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+
+pdag = learn_struct_pdag_pc('dsep', N, 2, dag)
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/StructLearn/pc2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+% SGS p141 (female orgasm data set)
+
+C = eye(7,7);
+C(2,1:1) = [-0.132];
+C(3,1:2) = [0.009 -0.136];
+C(4,1:3) = [0.22 -0.166 0.403];
+C(5,1:4) = [-0.008 0.008 0.598 0.282];
+C(6,1:5) = [0.119 -0.076 0.264 0.514 0.176];
+C(7,1:6) = [0.118 -0.137 0.368 0.414 0.336 0.338];
+
+n = 7;
+for i=1:n
+  for j=i+1:n
+    C(i,j)=C(j,i);
+  end
+end
+
+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+/README/1.1.1.1/Wed May 29 15:59:54 2002//
+/csum.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/ffa.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mfa.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mfa_cl.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mfademo.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/rdiv.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/rprod.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/rsum.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static/Zoubin
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/README	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,61 @@
+This software was downloaded from
+   http://www.gatsby.ucl.ac.uk/~zoubin/software.html
+with permission of the author.
+
+
+This software was written by 
+
+Zoubin Ghahramani
+Dept of Computer Science
+University of Toronto
+zoubin@cs.toronto.edu
+
+This software is written in Matlab 4.2c and should run on all platforms
+supporting this version of Matlab. Matlab is a commercial software
+package available from The MathWorks (http://www.mathworks.com/). 
+
+This software is meant for free non-commercial use and distribution. See the
+copyright notice at the bottom of this page.
+
+If you use it, please refer to the accompanying technical report: 
+
+Ghahramani, Z. and Hinton, G.E. (1996) The EM Algorithm for Mixtures
+of Factor Analyzers. University of Toronto Technical Report CRG-TR-96-1. 
+Available at ftp://ftp.cs.toronto.edu/pub/zoubin/tr-96-1.ps.gz  
+
+If you find bugs, or would like to see if I've implemented any
+extensions, please send me email at zoubin@cs.toronto.edu. The
+software is provided "as is", and I cannot guarantee I will be able
+to fix all problems or answer all inquiries. 
+
+See mfademo.m for a demo.
+
+Hope you find it useful. Please send me email if you find it useful
+and I will put you on a mailing list announcing releases of other
+statistical machine learning software in Matlab.
+
+
+----------------------------------------------------------------------
+	Copyright (c) 1996 by Zoubin Ghahramani
+                Toronto, Ontario, Canada. 
+                   All Rights Reserved 
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for non-commercial purposes only is hereby granted
+without fee, provided that the above copyright notice appears in all
+copies and that both the copyright notice and this permission notice
+appear in supporting documentation, and that my name not be used in
+advertising or publicity pertaining to distribution of the software
+without specific, written prior permission. I make no representations
+about the suitability of this software for any purpose. It is provided
+"as is" without express or implied warranty.
+
+I disclaim all warranties with regard to this software, including all
+implied warranties of merchantability and fitness. In no event shall I
+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.
+
+Zoubin Ghahramani					 Dec 17, 1996
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/csum.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+% column sum
+% function Z=csum(X)
+
+function Z=csum(X)
+
+N=length(X(:,1));
+if (N>1)
+  Z=sum(X);
+else
+  Z=X;
+end;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/ffa.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,75 @@
+% function [L,Ph,LL]=ffa(X,K,cyc,tol);
+% 
+% Fast Maximum Likelihood Factor Analysis using EM
+%
+% X - data matrix
+% K - number of factors
+% cyc - maximum number of cycles of EM (default 100)
+% tol - termination tolerance (prop change in likelihood) (default 0.0001)
+%
+% L - factor loadings 
+% Ph - diagonal uniquenesses matrix
+% LL - log likelihood curve
+%
+% Iterates until a proportional change < tol in the log likelihood 
+% or cyc steps of EM 
+%
+
+function [L,Ph,LL]=ffa(X,K,cyc,tol);
+
+if nargin<4  tol=0.0001; end;
+if nargin<3  cyc=100; end;
+
+N=length(X(:,1));
+D=length(X(1,:));
+tiny=exp(-700);
+
+X=X-ones(N,1)*mean(X);
+XX=X'*X/N;
+diagXX=diag(XX);
+
+randn('seed', 0);
+cX=cov(X);
+scale=det(cX)^(1/D);
+L=randn(D,K)*sqrt(scale/K);
+Ph=diag(cX);
+
+I=eye(K);
+
+lik=0; LL=[];
+
+const=-D/2*log(2*pi);
+
+
+for i=1:cyc;
+
+  %%%% E Step %%%%
+  Phd=diag(1./Ph);
+  LP=Phd*L;
+  MM=Phd-LP*inv(I+L'*LP)*LP';
+  dM=sqrt(det(MM));
+  beta=L'*MM;
+  XXbeta=XX*beta';
+  EZZ=I-beta*L +beta*XXbeta;
+
+  %%%% Compute log likelihood %%%%
+  
+  oldlik=lik;
+  lik=N*const+N*log(dM)-0.5*N*sum(diag(MM*XX));
+  fprintf('cycle %i lik %g \n',i,lik);
+  LL=[LL lik];
+  
+  %%%% M Step %%%%
+
+  L=XXbeta*inv(EZZ);
+  Ph=diagXX-diag(L*XXbeta');
+
+  if (i<=2)    
+    likbase=lik;
+  elseif (lik<oldlik)     
+    disp('VIOLATION');
+  elseif ((lik-likbase)<(1+tol)*(oldlik-likbase)||~isfinite(lik))  
+    break;
+  end;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/mfa.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,153 @@
+% function [Lh,Ph,Mu,Pi,LL]=mfa(X,M,K,cyc,tol);
+% 
+% Maximum Likelihood Mixture of Factor Analysis using EM
+%
+% X - data matrix
+% M - number of mixtures (default 1)
+% K - number of factors in each mixture (default 2)
+% cyc - maximum number of cycles of EM (default 100)
+% tol - termination tolerance (prop change in likelihood) (default 0.0001)
+%
+% Lh - factor loadings 
+% Ph - diagonal uniquenesses matrix
+% Mu - mean vectors
+% Pi - priors
+% LL - log likelihood curve
+%
+% Iterates until a proportional change < tol in the log likelihood 
+% or cyc steps of EM 
+
+function [Lh, Ph,  Mu, Pi, LL] = mfa(X,M,K,cyc,tol)
+
+if nargin<5   tol=0.0001; end;
+if nargin<4   cyc=100; end;
+if nargin<3   K=2; end;
+if nargin<2   M=1; end;
+
+N=length(X(:,1));
+D=length(X(1,:));
+tiny=exp(-700);
+
+%rand('state',0);
+
+fprintf('\n');
+
+if (M==1)
+  [Lh,Ph,LL]=ffa(X,K,cyc,tol);
+  Mu=mean(X);
+  Pi=1;
+else
+  if N==1
+    mX = X;
+  else
+    mX=mean(X);
+  end
+  cX=cov(X);
+  scale=det(cX)^(1/D);
+  randn('state',0); 
+  Lh=randn(D*M,K)*sqrt(scale/K);
+  Ph=diag(cX)+tiny;
+  Pi=ones(M,1)/M;
+  %randn('state',0); 
+  Mu=randn(M,D)*sqrtm(cX)+ones(M,1)*mX;
+  oldMu=Mu;
+  I=eye(K);
+
+  lik=0;
+  LL=[];
+
+  H=zeros(N,M); 	% E(w|x) 
+  EZ=zeros(N*M,K);
+  EZZ=zeros(K*M,K);
+  XX=zeros(D*M,D);
+  s=zeros(M,1);
+  const=(2*pi)^(-D/2);
+  %%%%%%%%%%%%%%%%%%%%
+  for i=1:cyc;
+
+    %%%% E Step %%%%
+
+    Phi=1./Ph;
+    Phid=diag(Phi);
+    for k=1:M
+      Lht=Lh((k-1)*D+1:k*D,:);
+      LP=Phid*Lht;
+      MM=Phid-LP*inv(I+Lht'*LP)*LP';
+      dM=sqrt(det(MM));      	
+      Xk=(X-ones(N,1)*Mu(k,:)); 
+      XM=Xk*MM;
+      H(:,k)=const*Pi(k)*dM*exp(-0.5*rsum(XM.*Xk)); 	
+      EZ((k-1)*N+1:k*N,:)=XM*Lht;
+    end;
+    
+    Hsum=rsum(H);
+    oldlik=lik;
+    lik=sum(log(Hsum+(Hsum==0)*exp(-744)));
+
+    Hzero=(Hsum==0); Nz=sum(Hzero); 
+    H(Hzero,:)=tiny*ones(Nz,M)/M; 
+    Hsum(Hzero)=tiny*ones(Nz,1);
+    
+    H=rdiv(H,Hsum); 				
+    s=csum(H);
+    s=s+(s==0)*tiny;
+    s2=sum(s)+tiny;
+    
+    for k=1:M  
+      kD=(k-1)*D+1:k*D;
+      Lht=Lh(kD,:);
+      LP=Phid*Lht;
+      MM=Phid-LP*inv(I+Lht'*LP)*LP';
+      Xk=(X-ones(N,1)*Mu(k,:)); 
+      XX(kD,:)=rprod(Xk,H(:,k))'*Xk/s(k); 
+      beta=Lht'*MM;
+      EZZ((k-1)*K+1:k*K,:)=I-beta*Lht +beta*XX(kD,:)*beta'; 
+    end;
+
+    %%%% log likelihood %%%%
+
+    LL=[LL lik];
+    fprintf('cycle %g   \tlog likelihood %g ',i,lik);
+    
+    if (i<=2)
+      likbase=lik;
+    elseif (lik<oldlik) 
+      fprintf(' violation');
+    elseif ((lik-likbase)<(1 + tol)*(oldlik-likbase)||~isfinite(lik)) 
+      break;
+    end;
+
+    fprintf('\n');
+    
+    %%%% M Step %%%%
+    
+    % means and covariance structure
+    
+    Ph=zeros(D,1);
+    for k=1:M
+      kD=(k-1)*D+1:k*D;
+      kK=(k-1)*K+1:k*K;
+      kN=(k-1)*N+1:k*N;
+
+      T0=rprod(X,H(:,k));
+      T1=T0'*[EZ(kN,:) ones(N,1)];
+      XH=EZ(kN,:)'*H(:,k);
+      T2=inv([s(k)*EZZ(kK,:) XH; XH' s(k)]);
+      T3=T1*T2;
+      Lh(kD,:)=T3(:,1:K);
+      Mu(k,:)=T3(:,K+1)';
+      T4=diag(T0'*X-T3*T1')/s2;
+      Ph=Ph+T4.*(T4>0); 
+    end;
+
+    Phmin=exp(-700);
+    Ph=Ph.*(Ph>Phmin)+(Ph<=Phmin)*Phmin; % to avoid zero variances
+
+    % priors
+    Pi=s'/s2;
+    
+  end;
+  fprintf('\n');
+end;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/mfa_cl.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,54 @@
+% function [lik, likv]=mfa_cl(X,Lh,Ph,Mu,Pi);
+% 
+% Calculates log likelihoods of a data set under a mixture of factor
+% analysis model.
+%
+% X - data matrix
+% Lh - factor loadings 
+% Ph - diagonal uniquenesses matrix
+% Mu - mean vectors
+% Pi - priors
+%
+% lik - log likelihood of X 
+% likv - vector of log likelihoods
+% 
+% If 0 or 1 output arguments requested, lik is returned. If 2 output
+% arguments requested, [lik likv] is returned.
+
+function [lik, likv]=mfa_cl(X,Lh,Ph,Mu,Pi);
+
+N=length(X(:,1));
+D=length(X(1,:));
+K=length(Lh(1,:));
+M=length(Pi);
+
+if (abs(sum(Pi)-1) > 1e-6) 
+  disp('ERROR: Pi should sum to 1');
+  return;
+elseif ((size(Lh) ~= [D*M K]) | (size(Ph) ~= [D 1]) | (size(Mu) ~= [M D]) ...
+  | (size(Pi) ~= [M 1] & size(Pi) ~= [1 M]))   
+  disp('ERROR in input matrix sizes');
+  return;
+end;  
+
+tiny=exp(-744);
+const=(2*pi)^(-D/2);
+
+I=eye(K);
+Phi=1./Ph;
+Phid=diag(Phi);
+for k=1:M  
+  Lht=Lh((k-1)*D+1:k*D,:);
+  LP=Phid*Lht;
+  MM=Phid-LP*inv(I+Lht'*LP)*LP';
+  dM=sqrt(det(MM));      	
+  Xk=(X-ones(N,1)*Mu(k,:)); 
+  XM=Xk*MM; 
+  H(:,k)=const*Pi(k)*dM*exp(-0.5*sum((XM.*Xk)'))'; 	
+end;
+
+Hsum=rsum(H); 				
+
+likv=log(Hsum+(Hsum==0)*tiny);
+lik=sum(likv);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/mfademo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+echo on;
+
+clc;
+
+% This is a very basic demo of the mixture of factor analyzer software
+% written in Matlab by	Zoubin Ghahramani
+%			Dept of Computer Science
+%			University of Toronto
+
+pause;		% Hit any key to continue 
+
+% To demonstrate the software we generate a sample data set
+% from a mixture of two Gaussians
+
+pause;		% Hit any key to continue 
+
+X1=randn(300,5);	% zero mean 5 dim Gaussian data 
+X2=randn(200,5)+2;	% 5 dim Gaussian data with mean [1 1 1 1 1]
+X=[X1;X2];		% total 500 data points from mixture
+
+% Fitting the model is very easy. For example to fit a mixture of 2
+% factor analyzers with three factors each...
+
+pause;		% Hit any key to continue 
+
+
+[Lh,Ph,Mu,Pi,LL]=mfa(X,2,3);
+
+% Lh, Ph, Mu, and Pi are the factor loadings, observervation
+% variances, observation means for each mixture, and mixing
+% proportions. LL is the vector of log likelihoods (the learning
+% curve). For more information type: help mfa
+
+% to plot the learning curve (log likelihood at each step of EM)...
+
+pause;		% Hit any key to continue 
+
+plot(LL);
+
+% you get a more informative picture of convergence by looking at the
+% log of the first difference of the log likelihoods...
+
+pause;		% Hit any key to continue 
+
+semilogy(diff(LL)); 
+
+% you can look at some of the parameters of the fitted model... 
+
+pause;		% Hit any key to continue 
+
+Mu
+
+Pi
+
+% ...to see whether they make any sense given that me know how the
+% data was generated. 
+
+% you can also evaluate the log likelihood of another data set under
+% the model we have just fitted using the mfa_cl (for Calculate
+% Likelihood) function. For example, here we generate a test from the
+% same distribution. 
+
+
+X1=randn(300,5);
+X2=randn(200,5)+2;
+Xtest=[X1; X2];
+
+pause;		% Hit any key to continue 
+
+mfa_cl(Xtest,Lh,Ph,Mu,Pi)
+
+% we should expect the log likelihood of the test set to be lower than
+% that of the training set.
+
+% finally, we can also fit a regular factor analyzer using the ffa
+% function (Fast Factor Analysis)...
+
+pause;		% Hit any key to continue 
+
+[L,Ph,LL]=ffa(X,3);
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/rdiv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+% function Z=rdiv(X,Y)
+%
+% row division: Z = X / Y row-wise
+% Y must have one column 
+
+function Z=rdiv(X,Y)
+
+[N M]=size(X);
+[K L]=size(Y);
+if(N ~= K | L ~=1)
+  disp('Error in RDIV');
+  return;
+end
+
+Z=zeros(N,M);
+
+if M<N,
+  for m=1:M
+    Z(:,m)=X(:,m)./Y;
+  end
+else
+  for n=1:N
+    Z(n,:)=X(n,:)/Y(n);
+  end;
+end;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/rprod.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+% row product
+% function Z=rprod(X,Y)
+
+function Z=rprod(X,Y)
+
+if(length(X(:,1)) ~= length(Y(:,1)) | length(Y(1,:)) ~=1)
+  disp('Error in RPROD');
+  return;
+end
+
+Z=zeros(size(X));
+
+for i=1:length(X(1,:))
+  Z(:,i)=X(:,i).*Y;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/Zoubin/rsum.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+% row sum
+% function Z=rsum(X)
+
+function Z=rsum(X)
+
+[N M]=size(X);
+
+Z=zeros(N,1);
+
+if M==1,
+  Z=X;
+elseif M<2*N,
+  for m=1:M,
+    Z=Z+X(:,m);
+  end;
+else
+  for n=1:N
+    Z(n)=sum(X(n,:));
+  end;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/brainy.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+% Example of explaining away from
+% http://www.ai.mit.edu/~murphyk/Bayes/bnintro.html#explainaway
+%
+% Suppose you have to be brainy or smart to get into college.
+% B S P(C=1) P(C=2)  1=false 2=true
+% 1 1 1.0    0.0 
+% 2 1 0.0    1.0
+% 1 2 0.0    1.0
+% 2 2 0.0    1.0
+%
+%
+% If we observe that you are in college, you must be either brainy or sporty or both.
+% If we observre you are in college and sporty, it is less likely you are brainy, 
+% since brainy-ness and sporty-ness compete as causal explanations of the effect.
+
+% B  S
+%  \/
+%   C
+
+B = 1; S = 2; C = 3;
+dag = zeros(3,3);
+dag([B S], C)=1;
+ns = 2*ones(1,3);
+bnet = mk_bnet(dag, ns);
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.5 0.5]');
+bnet.CPD{S} = tabular_CPD(bnet, S, 'CPT', [0.5 0.5]');
+CPT = zeros(2,2,2);
+CPT(1,1,:) = [1 0];
+CPT(2,1,:) = [0 1];
+CPT(1,2,:) = [0 1];
+CPT(2,2,:) = [0 1];
+bnet.CPD{C} = tabular_CPD(bnet, C, 'CPT', CPT);
+
+engine = jtree_inf_engine(bnet);
+ev = cell(1,3);
+ev{C} = 2;
+engine = enter_evidence(engine, ev);
+m = marginal_nodes(engine, B);
+fprintf('P(B=true|C=true) = %5.3f\n', m.T(2)) % 0.67
+
+ev{S} = 2;
+engine = enter_evidence(engine, ev);
+m = marginal_nodes(engine, B);
+fprintf('P(B=true|C=true,S=true) = %5.3f\n', m.T(2)) % 0.5 = unconditional baseline P(B=true)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/burglar-alarm-net.lisp.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+#|
+The following code represents the burglar alarm Bayes network from
+Chapter 14 of Russell & Norvig, 2nd Edition.  This network representation
+is used in the corresponding Bayes net code found in this directory.
+
+The conditional probability tables consist of the values listed here
+(along with the probabilities of the corresponding complementary events):
+
+P(Burglary = true) = 0.001    (=> P(Burglary = false) = 0.999)
+P(Earthquake = true) = 0.002  (=> P(Earthquake = false) = 0.998)
+
+P(Alarm = true | Burglary = true, Earthquake = true) = 0.95
+P(Alarm = true | Burglary = true, Earthquake = false) = 0.94
+P(Alarm = true | Burglary = false, Earthquake = true) = 0.29
+P(Alarm = true | Burglary = false, Earthquake = false) = 0.001
+
+P(JohnCalls = true | Alarm = true) = 0.90
+P(JohnCalls = true | Alarm = false) = 0.05
+
+P(MaryCalls = true | Alarm = true) = 0.70
+P(MaryCalls = true | Alarm = false) = 0.01
+|#
+
+(setf *burglar-alarm-net*
+      '((MaryCalls (true false)
+		   (Alarm)
+		   ((true) 0.70 0.30)
+		   ((false) 0.01 0.99))
+	(JohnCalls (true false)
+		   (Alarm)
+		   ((true) 0.90 0.10)
+		   ((false) 0.05 0.95))
+	(Alarm (true false)
+	       (Burglary Earthquake)
+	       ((true true) 0.95 0.05)
+	       ((true false) 0.94 0.06)
+	       ((false true) 0.29 0.71)
+	       ((false false) 0.001 0.999))
+	(Burglary (true false)
+		  ()
+		  (0.001 0.999))
+	(Earthquake (true false)
+		    ()
+		    (0.002 0.998))
+	))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/burglary.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+% Burglar alarm example
+
+N = 5;
+dag = zeros(N,N);
+E = 1; B = 2; R = 3; A = 4; C = 5;
+dag(E,[R A]) = 1;
+dag(B,A) = 1;
+dag(A,C)=1;
+
+% true = state 1, false = state 2
+ns = 2*ones(1,N); % binary nodes
+bnet = mk_bnet(dag, ns);
+
+bnet.CPD{E} = tabular_CPD(bnet, E, [0.1 0.9]);
+bnet.CPD{B} = tabular_CPD(bnet, B, [0.01 0.99]);
+%bnet.CPD{R} = tabular_CPD(bnet, R, [0.65 0.00001 0.35 0.99999]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.65 0.01 0.35 0.99]);
+bnet.CPD{A} = tabular_CPD(bnet, A, [0.95 0.8 0.3 0.001 0.05 0.2 0.7 0.999]);
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.7 0.05 0.3 0.95]);
+
+
+engine = jtree_inf_engine(bnet);
+ev  = cell(1,N);
+ev{C} = 1;
+engine = enter_evidence(engine, ev);
+mE = marginal_nodes(engine, E);
+mB = marginal_nodes(engine, B);
+fprintf('P(E|c)=%5.3f, P(B|c)=%5.3f\n', mE.T(1), mB.T(1))
+
+ev{C} = 1;
+ev{R} = 1;
+engine = enter_evidence(engine, ev);
+mE = marginal_nodes(engine, E);
+mB = marginal_nodes(engine, B);
+fprintf('P(E|c,r)=%5.3f, P(B|c,r)=%5.3f\n', mE.T(1), mB.T(1))
+
+
+if 0
+nsamples = 100;
+samples = zeros(nsamples, 5);
+for i=1:nsamples
+  samples(i,:) = cell2num(sample_bnet(bnet))';
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/cg1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+% Conditional Gaussian network
+% The waste incinerator emissions example from Lauritzen (1992),
+% "Propogation of Probabilities, Means and Variances in Mixed Graphical Association Models", 
+% JASA 87(420): 1098--1108
+%
+% This example is reprinted on p145 of "Probabilistic Networks and Expert Systems",
+% Cowell, Dawid, Lauritzen and Spiegelhalter, 1999, Springer.
+%
+% For a picture, see http://www.cs.berkeley.edu/~murphyk/Bayes/usage.html#cg_model
+
+ns = 2*ones(1,9);
+%bnet  = mk_incinerator_bnet(ns);
+bnet  = mk_incinerator_bnet;
+
+engines = {};
+%engines{end+1} = stab_cond_gauss_inf_engine(bnet);
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = cond_gauss_inf_engine(bnet);
+nengines = length(engines);
+
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+dnodes = [B F W];
+cnodes = mysetdiff(1:n, dnodes);
+
+evidence = cell(1,n); % no evidence
+ll = zeros(1, nengines);
+for e=1:nengines
+  [engines{e}, ll(e)] = enter_evidence(engines{e}, evidence);
+end
+%assert(approxeq(ll(1), ll)))
+ll
+
+% Compare to the results in table on p1107.
+% These results are printed to 3dp in Cowell p150
+
+mu = zeros(1,n);
+sigma = zeros(1,n);
+dprob = zeros(1,n);
+addev = 1;
+tol = 1e-2;
+for e=1:nengines
+  for i=cnodes(:)'
+    m = marginal_nodes(engines{e}, i, addev);
+    mu(i) = m.mu;
+    sigma(i) = sqrt(m.Sigma);
+  end
+  for i=dnodes(:)'
+    m = marginal_nodes(engines{e}, i, addev);
+    dprob(i) = m.T(1);
+  end
+  assert(approxeq(mu([E D C L Min Mout]), [-3.25 3.04 -1.85 1.48 -0.214 2.83], tol))
+  assert(approxeq(sigma([E D C L Min Mout]), [0.709 0.770 0.507 0.631 0.459 0.860], tol))
+  assert(approxeq(dprob([B F W]), [0.85 0.95 0.29], tol))
+  %m = marginal_nodes(engines{e}, bnet.names('E'), addev);
+  %assert(approxeq(m.mu, -3.25, tol))
+  %assert(approxeq(sqrt(m.Sigma), 0.709, tol))
+end
+
+% Add evidence (p 1105, top right)
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+
+ll = zeros(1, nengines);
+for e=1:nengines
+  [engines{e}, ll(e)] = enter_evidence(engines{e}, evidence);
+end
+assert(all(approxeq(ll(1), ll)))
+
+for e=1:nengines
+  for i=cnodes(:)'
+    m = marginal_nodes(engines{e}, i, addev);
+    mu(i) = m.mu;
+    sigma(i) = sqrt(m.Sigma);
+  end
+  for i=dnodes(:)'
+    m = marginal_nodes(engines{e}, i, addev);
+    dprob(i) = m.T(1);
+  end
+  assert(approxeq(mu([E D C L Min Mout]), [-3.90 3.61 -0.9 1.1 0.5 4.11], tol))
+  assert(approxeq(sigma([E D C L Min Mout]), [0.076 0.326 0 0 0.1 0.344], tol))
+  assert(approxeq(dprob([B F W]), [0.0122 0.9995 1], tol))
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/cg2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+% Conditional Gaussian network with vector-valued nodes and random params
+
+ns = 2*ones(1,9);
+bnet  = mk_incinerator_bnet(ns);
+
+engines = {};
+%engines{end+1} = stab_cond_gauss_inf_engine(bnet);
+engines{end+1} = jtree_inf_engine(bnet);
+engines{end+1} = cond_gauss_inf_engine(bnet);
+
+[err, time] = cmp_inference_static(bnet, engines, 'singletons_only', 1);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/cmp_inference_static.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,114 @@
+function [time, engine] = cmp_inference_static(bnet, engine, varargin)
+% CMP_INFERENCE Compare several inference engines on a BN
+% function [time, engine] = cmp_inference_static(bnet, engine, ...)
+%
+% engine{i} is the i'th inference engine.
+% time(e) = elapsed time for doing inference with engine e
+%
+% The list below gives optional arguments [default value in brackets].
+%
+% exact - specifies which engines do exact inference [ 1:length(engine) ]
+% singletons_only - if 1, we only call marginal_nodes, else this  and marginal_family [0]
+% maximize - 1 means we do max-propagation, 0 means sum-propagation [0]
+% check_ll - 1 means we check that the log-likelihoods are correct [1]
+% observed - list of the observed ndoes [ bnet.observed ]
+% check_converged - list of loopy engines that should be checked for convergence [ [] ]
+%    If an engine has converged, it is added to the exact list.
+
+
+% set default params
+exact = 1:length(engine);
+singletons_only = 0;
+maximize = 0;
+check_ll = 1;
+observed = bnet.observed;
+check_converged = [];
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'exact', exact = args{i+1};
+   case 'singletons_only', singletons_only = args{i+1};
+   case 'maximize', maximize = args{i+1};
+   case 'check_ll', check_ll = args{i+1};
+   case 'observed', observed = args{i+1};
+   case 'check_converged', check_converged = args{i+1};
+   otherwise,
+    error(['unrecognized argument ' args{i}])
+  end
+end
+
+E = length(engine);
+ref = exact(1); % reference
+
+N = length(bnet.dag);
+ev = sample_bnet(bnet);
+evidence = cell(1,N);
+evidence(observed) = ev(observed);
+%celldisp(evidence(observed))
+
+for i=1:E
+  tic;
+  if check_ll
+    [engine{i}, ll(i)] = enter_evidence(engine{i}, evidence, 'maximize', maximize);
+  else
+    engine{i} = enter_evidence(engine{i}, evidence, 'maximize', maximize);
+  end
+  time(i)=toc;
+end
+
+for i=check_converged(:)'
+  niter = loopy_converged(engine{i});
+  if niter > 0
+    fprintf('loopy engine %d  converged in %d iterations\n', i, niter);
+%    exact = myunion(exact, i);
+  else
+    fprintf('loopy engine %d has not converged\n', i);
+  end
+end
+
+cmp = exact(2:end);
+if check_ll
+  for i=cmp(:)'
+    assert(approxeq(ll(ref), ll(i)));
+  end
+end
+
+hnodes = mysetdiff(1:N, observed);
+
+if ~singletons_only
+  get_marginals(engine, hnodes, exact, 0);
+end
+get_marginals(engine, hnodes, exact, 1);
+
+%%%%%%%%%%
+
+function get_marginals(engine, hnodes, exact, singletons)
+
+bnet = bnet_from_engine(engine{1});
+N = length(bnet.dag);
+cnodes_bitv = zeros(1,N);
+cnodes_bitv(bnet.cnodes) = 1;
+ref = exact(1); % reference
+cmp = exact(2:end);
+E = length(engine);
+
+for n=hnodes(:)'
+  for e=1:E
+    if singletons
+      m{e} = marginal_nodes(engine{e}, n);
+    else
+      m{e} = marginal_family(engine{e}, n);
+    end
+  end
+  for e=cmp(:)'
+    if cnodes_bitv(n)
+      assert(approxeq(m{ref}.mu, m{e}.mu))
+      assert(approxeq(m{ref}.Sigma, m{e}.Sigma))
+    else
+      assert(approxeq(m{ref}.T, m{e}.T))
+    end
+    assert(isequal(m{e}.domain, m{ref}.domain));
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/discrete1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+% Compare various inference engines on the following network (from Jensen (1996) p84 fig 4.17)
+%    1
+%  / | \
+% 2  3  4
+% |  |  |
+% 5  6  7
+%  \/ \/
+%  8   9
+% where all arcs point downwards
+
+N = 9;
+dag = zeros(N,N);
+dag(1,2)=1; dag(1,3)=1; dag(1,4)=1;
+dag(2,5)=1; dag(3,6)=1; dag(4,7)=1;
+dag(5,8)=1; dag(6,8)=1; dag(6,9)=1; dag(7,9) = 1;
+
+dnodes = 1:N;
+false = 1; true = 2;
+ns = 2*ones(1,N); % binary nodes
+
+onodes = [2 7];
+bnet = mk_bnet(dag, ns, 'observed', onodes);
+% use random params
+for i=1:N
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+query = [3];
+engine = {};
+engine{end+1} = jtree_inf_engine(bnet);
+engine{end+1} = var_elim_inf_engine(bnet);
+%engine{end+1} = global_joint_inf_engine(bnet);
+% global joint is designed for limids because does not normalize
+
+%engine{end+1} = enumerative_inf_engine(bnet);
+%engine{end+1} = jtree_onepass_inf_engine(bnet, query, onodes);
+
+maximize = 0;  % jtree_ndx crashes on max-prop
+[err, time] = cmp_inference_static(bnet, engine, 'maximize', maximize);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/discrete2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+% Compare various inference engines on the following network (from Jensen (1996) p84 fig 4.17)
+%    1
+%  / | \
+% 2  3  4
+% |  |  |
+% 5  6  7
+%  \/ \/
+%  8   9
+% where all arcs point downwards
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+N = 9;
+dag = zeros(N,N);
+dag(1,2)=1; dag(1,3)=1; dag(1,4)=1;
+dag(2,5)=1; dag(3,6)=1; dag(4,7)=1;
+dag(5,8)=1; dag(6,8)=1; dag(6,9)=1; dag(7,9) = 1;
+
+dnodes = 1:N;
+false = 1; true = 2;
+ns = 2*ones(1,N); % binary nodes
+
+onodes = [2 4];
+bnet = mk_bnet(dag, ns, 'observed', onodes);
+% use random params
+for i=1:N
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+%USEC = exist('@jtree_C_inf_engine/collect_evidence','file');
+query = [3];
+engine = {};
+engine{end+1} = jtree_inf_engine(bnet);
+engine{end+1} = jtree_sparse_inf_engine(bnet);
+%engine{end+1} = jtree_ndx_inf_engine(bnet, 'ndx_type', 'SD');
+%engine{end+1} = jtree_ndx_inf_engine(bnet, 'ndx_type', 'B');
+%engine{end+1} = jtree_ndx_inf_engine(bnet, 'ndx_type', 'D');
+%if USEC, engine{end+1} = jtree_C_inf_engine(bnet); end
+%engine{end+1} = var_elim_inf_engine(bnet);
+%engine{end+1} = enumerative_inf_engine(bnet);
+%engine{end+1} = jtree_onepass_inf_engine(bnet, query, onodes);
+
+maximize = 0;  % jtree_ndx crashes on max-prop
+[err, time] = cmp_inference_static(bnet, engine, 'maximize', maximize);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/discrete3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+% Compare various inference engines on the following network (from Jensen (1996) p84 fig 4.17)
+%    1
+%  / | \
+% 2  3  4
+% |  |  |
+% 5  6  7
+%  \/ \/
+%  8   9
+% where all arcs point downwards
+
+N = 9;
+dag = zeros(N,N);
+dag(1,2)=1; dag(1,3)=1; dag(1,4)=1;
+dag(2,5)=1; dag(3,6)=1; dag(4,7)=1;
+dag(5,8)=1; dag(6,8)=1; dag(6,9)=1; dag(7,9) = 1;
+
+dnodes = 1:N;
+false = 1; true = 2;
+ns = 2*ones(1,N); % binary nodes
+
+onodes = [1];
+evidence = cell(1,N);
+evidence(onodes) = num2cell(1);
+bnet = mk_bnet(dag, ns, 'observed', onodes);
+% use random params
+%for i=1:N
+%  bnet.CPD{i} = tabular_CPD(bnet, i);
+%end
+bnet.CPD{1} = tabular_CPD(bnet, 1, 'sparse', 1, 'CPT', [0.8, 0.2]);
+bnet.CPD{2} = tabular_CPD(bnet, 2, 'sparse', 1, 'CPT', [1 0 0 1]);
+bnet.CPD{3} = tabular_CPD(bnet, 3, 'sparse', 1, 'CPT', [0 1 1 0]);
+bnet.CPD{4} = tabular_CPD(bnet, 4, 'sparse', 1, 'CPT', [1 1 0 0]);
+bnet.CPD{5} = tabular_CPD(bnet, 5, 'sparse', 1, 'CPT', [0 0 1 1]);
+bnet.CPD{6} = tabular_CPD(bnet, 6, 'sparse', 1, 'CPT', [1 0 0 1]);
+bnet.CPD{7} = tabular_CPD(bnet, 7, 'sparse', 1, 'CPT', [0 1 1 0]);
+bnet.CPD{8} = tabular_CPD(bnet, 8, 'sparse', 1, 'CPT', [1 1 0 0 0 0 1 1]);
+bnet.CPD{9} = tabular_CPD(bnet, 9, 'sparse', 1, 'CPT', [0 1 0 1 1 0 1 0]);
+
+engine = jtree_sparse_inf_engine(bnet);
+tic
+[engine, ll] = enter_evidence(engine, evidence);
+toc
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/test_housing.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/test_restaurants.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/test_zoo1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/tmp.dot/1.1.1.1/Wed May 29 15:59:54 2002//
+/transform_data_into_bnt_format.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static/dtree
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/test_housing.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,87 @@
+% Here the training data is adapted from UCI ML repository, 'housing' data
+% Input variables: 12 continous, one binary
+% Ouput variables: continous
+% The testing result trace is in the end of this script, it is same to the graph in page 219 of 
+% Leo Brieman etc. 1984 book titled "Classification and regression trees".
+
+dtreeCPD=tree_CPD;
+
+% load data
+fname = fullfile(BNT_HOME, 'examples', 'static', 'uci_data', 'housing', 'housing.data');
+data=load(fname);
+data=data';
+data=transform_data_into_bnt_format(data,[1:3,5:14]); 
+
+% learn decision tree from data 
+ns=1*ones(1,14);
+ns(4)=2;
+dtreeCPD1=learn_params(dtreeCPD,1:14,data,ns,[1:3,5:14],'stop_cases',5,'min_gain',0.006); 
+
+% evaluate on data
+[score,outputs]=evaluate_tree_performance(dtreeCPD1,1:14,data,ns,[1:3,5:14]);
+fprintf('Mean square deviation (using regression tree to predict) in old training data %6.3f\n',score);
+
+
+% show decision tree using graphpad
+% It should be easy, but still not implemented
+
+
+
+% >> test_housing
+% Create node 1 split at 6 gain  38.2205 Th 6.939000e+000. Mean  22.5328 Cases 506
+% Create node 2 split at 13 gain  14.4503 Th 1.437000e+001. Mean  19.9337 Cases 430
+% Create node 3 split at 8 gain   4.9809 Th 1.358000e+000. Mean  23.3498 Cases 255
+% Create node 4 split at 1 gain   0.7722 Th 1.023300e+001. Mean  45.5800 Cases 5
+% Create leaf node(samevalue) 5. Mean  50.0000 Std   0.0000 Cases 4 
+% Add subtree node 5 to 4. #nodes 5
+% Create leaf node(samevalue) 6. Mean  27.9000 Std   0.0000 Cases 1 
+% Add subtree node 6 to 4. #nodes 6
+% Add subtree node 4 to 3. #nodes 6
+% Create node 7 split at 6 gain   2.8497 Th 6.540000e+000. Mean  22.9052 Cases 250
+% Create node 8 split at 13 gain   0.5970 Th 7.560000e+000. Mean  21.6297 Cases 195
+% Create leaf node(nogain) 9. Mean  23.9698 Std   1.7568 Cases 43 
+% Add subtree node 9 to 8. #nodes 9
+% Create leaf node(nogain) 10. Mean  20.9678 Std   2.8242 Cases 152 
+% Add subtree node 10 to 8. #nodes 10
+% Add subtree node 8 to 7. #nodes 10
+% Create leaf node(nogain) 11. Mean  27.4273 Std   3.4512 Cases 55 
+% Add subtree node 11 to 7. #nodes 11
+% Add subtree node 7 to 3. #nodes 11
+% Add subtree node 3 to 2. #nodes 11
+% Create node 12 split at 1 gain   2.2467 Th 6.962150e+000. Mean  14.9560 Cases 175
+% Create node 13 split at 5 gain   0.5172 Th 5.240000e-001. Mean  17.1376 Cases 101
+% Create leaf node(nogain) 14. Mean  20.0208 Std   3.0672 Cases 24 
+% Add subtree node 14 to 13. #nodes 14
+% Create leaf node(nogain) 15. Mean  16.2390 Std   2.9746 Cases 77 
+% Add subtree node 15 to 13. #nodes 15
+% Add subtree node 13 to 12. #nodes 15
+% Create node 16 split at 5 gain   0.6133 Th 6.050000e-001. Mean  11.9784 Cases 74
+% Create leaf node(nogain) 17. Mean  16.6333 Std   4.5052 Cases 12 
+% Add subtree node 17 to 16. #nodes 17
+% Create leaf node(nogain) 18. Mean  11.0774 Std   3.0090 Cases 62 
+% Add subtree node 18 to 16. #nodes 18
+% Add subtree node 16 to 12. #nodes 18
+% Add subtree node 12 to 2. #nodes 18
+% Add subtree node 2 to 1. #nodes 18
+% Create node 19 split at 6 gain   6.0493 Th 7.420000e+000. Mean  37.2382 Cases 76
+% Create node 20 split at 1 gain   1.9900 Th 7.367110e+000. Mean  32.1130 Cases 46
+% Create node 21 split at 8 gain   0.6273 Th 1.877300e+000. Mean  33.3488 Cases 43
+% Create leaf node(samevalue) 22. Mean  45.6500 Std   6.1518 Cases 2 
+% Add subtree node 22 to 21. #nodes 22
+% Create leaf node(nogain) 23. Mean  32.7488 Std   3.5690 Cases 41 
+% Add subtree node 23 to 21. #nodes 23
+% Add subtree node 21 to 20. #nodes 23
+% Create leaf node(samevalue) 24. Mean  14.4000 Std   3.7363 Cases 3 
+% Add subtree node 24 to 20. #nodes 24
+% Add subtree node 20 to 19. #nodes 24
+% Create node 25 split at 1 gain   1.1001 Th 2.733970e+000. Mean  45.0967 Cases 30
+% Create leaf node(nogain) 26. Mean  45.8966 Std   4.4005 Cases 29 
+% Add subtree node 26 to 25. #nodes 26
+% Create leaf node(samevalue) 27. Mean  21.9000 Std   0.0000 Cases 1 
+% Add subtree node 27 to 25. #nodes 27
+% Add subtree node 25 to 19. #nodes 27
+% Add subtree node 19 to 1. #nodes 27
+% Mean square deviation (using regression tree to predict) in old training data  9.405
+% 
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/test_restaurants.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,98 @@
+% Here the training data is adapted from Russell95 book. See restaurant.names for description.
+% (1) Use infomation-gain as the split testing score, we get the the same decision tree as the book Russell 95 (page 537),
+% and the Gain(Patrons) is 0.5409, equal to the result in Page 541 of Russell 95. (see below output trace)
+% (Note: the dtree in that book has small compilation error, the Type node is from YES of Hungry node, not NO.)
+% (2) Use gain-ratio (Quilan 93), the splitting defavorite attribute with more values. (e.g. the Type attribute here)
+
+dtreeCPD=tree_CPD;
+
+% load data
+fname = fullfile(BNT_HOME, 'examples', 'static', 'uci_data', 'restaurant', 'restaurant.data');
+data=load(fname);
+data=data';
+
+%make the data be BNT compliant (values for discrete nodes are from 1-n, here n is the node size)
+  % e.g. if the values are [0 1 6], they must be mapping to [1 2 3]
+%data=transform_data(data,'tmp.dat',[]); %here no cts nodes
+
+% learn decision tree from data 
+ns=2*ones(1,11);
+ns(5:6)=3;
+ns(9:10)=4;
+dtreeCPD1=learn_params(dtreeCPD,1:11,data,ns,[]);
+
+% evaluate on data
+[score,outputs]=evaluate_tree_performance(dtreeCPD1,1:11,data,ns,[]);
+fprintf('Accuracy in training data %6.3f\n',score);
+
+% show decision tree using graphpad
+
+
+
+% --------------------------Output trace: using Information-Gain------------------------------
+% The splits are Patron, Hungry, Type, Fri/Sat
+% *********************************
+% Create node 1 split at 5 gain 0.5409 Th 0. Class 1 Cases 12 Error 6 
+% Create leaf node(onecla) 2. Class 1 Cases 2 Error 0 
+% Add subtree node 2 to 1. #nodes 2
+% Create leaf node(onecla) 3. Class 2 Cases 4 Error 0 
+% Add subtree node 3 to 1. #nodes 3
+% Create node 4 split at 4 gain 0.2516 Th 0. Class 1 Cases 6 Error 2 
+% Create leaf node(onecla) 5. Class 1 Cases 2 Error 0 
+% Add subtree node 5 to 4. #nodes 5
+% Create node 6 split at 9 gain 0.5000 Th 0. Class 1 Cases 4 Error 2 
+% Create leaf node(nullset) 7. Father 6 Class 1
+% Create node 8 split at 3 gain 1.0000 Th 0. Class 1 Cases 2 Error 1 
+% Create leaf node(onecla) 9. Class 1 Cases 1 Error 0 
+% Add subtree node 9 to 8. #nodes 9
+% Create leaf node(onecla) 10. Class 2 Cases 1 Error 0 
+% Add subtree node 10 to 8. #nodes 10
+% Add subtree node 8 to 6. #nodes 10
+% Create leaf node(onecla) 11. Class 2 Cases 1 Error 0 
+% Add subtree node 11 to 6. #nodes 11
+% Create leaf node(onecla) 12. Class 1 Cases 1 Error 0 
+% Add subtree node 12 to 6. #nodes 12
+% Add subtree node 6 to 4. #nodes 12
+% Add subtree node 4 to 1. #nodes 12
+% ********************************
+% 
+% Note:
+% ***Create node 4 split at 4 gain 0.2516 Th 0. Class 1 Cases 6 Error 2 
+% This mean we create a new node number 4, it is splitting at the attribute 4, and info-gain is 0.2516, 
+% "Th 0" means threshhold for splitting continous attribute, "Class 1" means the majority class at node 4 is 1,
+% and "Cases 6" means it has 6 cases attached to it, "Error 2" means it has two errors if changing the class lable of 
+% all the cases in it to the majority class.
+% *** Add subtree node 12 to 6. #nodes 12
+% It means we add the child node 12 to node 6.
+% *** Create leaf node(onecla) 10. Class 2 Cases 1 Error 0 
+% here 'onecla' means all cases in this node belong to one class, so no need to split further. 
+%      'nullset' means no training cases belong to this node, we use its parent node majority class as its class
+% 
+% 
+% 
+% ---------------Output trace: using GainRatio-----------------------
+% The splits are Patron, Hungry, Fri/Sat, Price
+% 
+% 
+% Create node 1 split at 5 gain 0.3707 Th 0. Class 1 Cases 12 Error 6 
+% Create leaf node(onecla) 2. Class 1 Cases 2 Error 0 
+% Add subtree node 2 to 1. #nodes 2
+% Create leaf node(onecla) 3. Class 2 Cases 4 Error 0 
+% Add subtree node 3 to 1. #nodes 3
+% Create node 4 split at 4 gain 0.2740 Th 0. Class 1 Cases 6 Error 2 
+% Create leaf node(onecla) 5. Class 1 Cases 2 Error 0 
+% Add subtree node 5 to 4. #nodes 5
+% Create node 6 split at 3 gain 0.3837 Th 0. Class 1 Cases 4 Error 2 
+% Create leaf node(onecla) 7. Class 1 Cases 1 Error 0 
+% Add subtree node 7 to 6. #nodes 7
+% Create node 8 split at 6 gain 1.0000 Th 0. Class 2 Cases 3 Error 1 
+% Create leaf node(onecla) 9. Class 2 Cases 2 Error 0 
+% Add subtree node 9 to 8. #nodes 9
+% Create leaf node(nullset) 10. Father 8 Class 2
+% Create leaf node(onecla) 11. Class 1 Cases 1 Error 0 
+% Add subtree node 11 to 8. #nodes 11
+% Add subtree node 8 to 6. #nodes 11
+% Add subtree node 6 to 4. #nodes 11
+% Add subtree node 4 to 1. #nodes 11
+% 
+% 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/test_zoo1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+% Here the training data is adapted from UCI ML repository, 'zoo' data
+
+dtreeCPD=tree_CPD;
+
+% load data
+fname = fullfile(BNT_HOME, 'examples', 'static', 'uci_data', 'zoo', 'zoo1.data')
+data=load(fname);
+data=data';
+
+data=transform_data_into_bnt_format(data, []);
+
+% learn decision tree from data 
+ns=2*ones(1,17);
+ns(13)=6;
+ns(17)=7;
+dtreeCPD1=learn_params(dtreeCPD,1:17,data,ns,[],'stop_cases',5); % a node with less than 5 cases will not be splitted
+
+% evaluate on data
+[score,outputs]=evaluate_tree_performance(dtreeCPD1,1:17,data,ns,[]);
+fprintf('Accuracy in old training data %6.3f\n',score);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/tmp.dot	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+digraph G {
+center = 1;
+size="4,4";
+n1 [ label = "1 :" ];
+n2 [ label = "2 :" ];
+n3 [ label = "3 :" ];
+n4 [ label = "4 :" ];
+n5 [ label = "5 :" ];
+n6 [ label = "6 :" ];
+n7 [ label = "7 :" ];
+n8 [ label = "8 :" ];
+n9 [ label = "9 :" ];
+n10 [ label = "10 :" ];
+n1 -> n5 [label="1.000"];
+n2 -> n7 [label="0.800"];
+n2 -> n10 [label="0.200"];
+n3 -> n2 [label="1.000"];
+n4 -> n8 [label="1.000"];
+n5 -> n3 [label="0.143"];
+n5 -> n5 [label="0.571"];
+n5 -> n8 [label="0.286"];
+n6 -> n4 [label="1.000"];
+n7 -> n6 [label="0.333"];
+n7 -> n9 [label="0.667"];
+n8 -> n1 [label="0.333"];
+n8 -> n5 [label="0.333"];
+n8 -> n10 [label="0.333"];
+n9 -> n2 [label="1.000"];
+n10 -> n9 [label="1.000"];
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/dtree/transform_data_into_bnt_format.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+function [bnt_data, old_values] = transform_data_into_bnt_format(data,cnodes)
+% TRANSFORM_DATA_TO_BNT_FORMAT Ensures discrete variables have values 1,2,..,k
+% e.g., if the values of a discrete are [0 1 6], they must be mapped to [1 2 3]
+%
+% data(i,j) is the value for i-th node in j-th case.
+% bnt_data(i,j) is the new value.
+% old_values{i} are the original values for node i.
+% cnodes is the list of all continous nodes, e.g. [3 5] means the 3rd and 5th node is continuous
+%
+% Author: yimin.zhang@intel.com
+% Last updated: Jan. 22, 2002 by Kevin Murphy.
+
+num_nodes=size(data,1);
+num_cases=size(data,2);
+old_values=cell(1,num_nodes);
+
+for i=1:num_nodes
+  if (myismember(i,cnodes)==1)  %cts nodes no need to be transformed 
+    %just copy the data
+    bnt_data(i,:)=data(i,:);
+    continue;
+  end
+  values = data(i,:);
+  sort_v = sort(values); 
+  %remove the duplicate values in sort_v
+  v_set = unique(sort_v);  
+  
+  %transform the values
+  for j=1:size(values,2)
+    index = binary_search(v_set,values(j));
+    if (index==-1)
+      fprintf('value not found in tranforming data to bnt format.\n');   
+      return;
+    end
+    bnt_data(i,j)=index;
+  end
+  old_values{i}=v_set;
+end
+
+
+%%%%%%%%%%%%
+
+function index=binary_search(vector, value)
+% BI_SEARCH do binary search for value in the vector
+% Author: yimin.zhang@intel.com
+% Last updated: Jan. 19, 2002
+
+begin_index=1;
+end_index=size(vector,2); 
+index=-1;
+while (begin_index<=end_index)
+  mid=floor((begin_index+end_index)/2);
+  if (isstr(vector(mid)))
+    % need to write a strcmp to return three result (< = >)
+  else
+    if (value==vector(mid))
+      index=mid;
+      return;
+    elseif (value>vector(mid))
+      begin_index=mid+1;    
+    else
+      end_index=mid-1;
+    end
+  end
+end
+return;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/fa1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+% Factor analysis
+% Z -> X,  Z in R^k, X in R^D, k << D (high dimensional observations explained by small source)
+% Z ~ N(0,I),   X|Z ~ N(L z, Psi), where Psi is diagonal.
+%
+% We compare to Zoubin Ghahramani's code.
+
+state = 0;
+rand('seed', state);
+randn('seed', state);
+max_iter = 3;
+k = 2;
+D = 4;
+N = 10;
+X = randn(N, D);
+
+% Initialize as in Zoubin's ffa (fast factor analysis)
+X=X-ones(N,1)*mean(X);
+XX=X'*X/N;
+diagXX=diag(XX);
+cX=cov(X);
+scale=det(cX)^(1/D);
+randn('seed', 0);  % must reset seed here so initial params are identical to mfa
+L0=randn(D,k)*sqrt(scale/k);
+W0 = L0;
+Psi0=diag(cX);
+
+[L1, Psi1, LL1] = ffa(X,k,max_iter);
+
+
+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', [], 'observed', 2);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+			   'cov_type', 'diag', 'cov_prior_weight', 0, 'clamp_mean', 1);
+
+engine = jtree_inf_engine(bnet);
+evidence = cell(2,N);
+evidence(2,:) = num2cell(X', 1);
+
+[bnet2, LL2] = learn_params_em(engine, evidence, max_iter);
+
+s = struct(bnet2.CPD{2});
+L2 = s.weights;
+Psi2 = s.cov;
+
+
+
+% Compare to Zoubin's code
+assert(approxeq(LL2, LL1));
+assert(approxeq(Psi2, diag(Psi1)));
+assert(approxeq(L2, L1));
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/fg1.m/1.1.1.1/Thu Jun 20 00:03:30 2002//
+/fg2.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/fg3.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/fg_mrf1.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/fg_mrf2.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/examples/static/fgraph
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/fg1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,98 @@
+% make an unrolled HMM, convert to factor graph, and check that 
+% loopy propagation on the fgraph gives the exact answers.
+
+seed = 1;
+rand('state', seed);
+randn('state', seed);
+
+T = 3;
+Q = 3;
+O = 3;
+cts_obs = 0;
+param_tying = 1;
+bnet = mk_hmm_bnet(T, Q, O, cts_obs, param_tying);
+
+data = sample_bnet(bnet);
+
+fgraph = bnet_to_fgraph(bnet);
+big_bnet = fgraph_to_bnet(fgraph);
+% converting factor graph back does not recover the structure of the original bnet
+
+max_iter = 2*T;
+
+engine = {};
+engine{1} = jtree_inf_engine(bnet);
+engine{2} = belprop_inf_engine(bnet, 'max_iter', max_iter);
+engine{3} = belprop_fg_inf_engine(fgraph, 'max_iter', max_iter);
+engine{4} = jtree_inf_engine(big_bnet);
+nengines = length(engine);
+
+big_engine = 4;
+fgraph_engine = 3;
+
+
+N = 2*T;
+evidence = cell(1,N);
+onodes = bnet.observed;
+evidence(onodes) = data(onodes);
+hnodes = mysetdiff(1:N, onodes);
+
+bigN = length(big_bnet.dag);
+big_evidence = cell(1, bigN);
+big_evidence(onodes) = data(onodes);
+big_evidence(N+1:end) = {1}; % factors are observed to be 1
+
+ll = zeros(1, nengines);
+for i=1:nengines
+  if i==big_engine
+    tic; [engine{i}, ll(i)] = enter_evidence(engine{i}, big_evidence); toc
+  else
+    tic; [engine{i}, ll(i)] = enter_evidence(engine{i}, evidence); toc
+  end
+end
+
+% compare all engines to engine{1}
+
+% the log likelihood values may be bogus...
+for i=2:nengines
+  %assert(approxeq(ll(1), ll(i)));
+end
+
+
+marg = zeros(T, nengines, Q); % marg(t,e,:)
+for t=1:T
+  for e=1:nengines
+    m = marginal_nodes(engine{e}, t);
+    marg(t,e,:) = m.T;
+  end
+end
+marg
+
+
+m = cell(nengines, T);
+for i=1:T
+  for e=1:nengines
+    m{e,i} = marginal_nodes(engine{e}, hnodes(i));
+  end
+  for e=2:nengines
+    assert(approxeq(m{e,i}.T, m{1,i}.T));
+  end
+end
+
+mpe = {};
+ll = zeros(1, nengines);
+for e=1:nengines
+  if e==big_engine
+    mpe{e} = find_mpe(engine{e}, big_evidence);
+    mpe{e} = mpe{e}(1:N); % chop off dummy nodes
+  else
+    mpe{e} = find_mpe(engine{e}, evidence);
+  end
+end
+
+% fgraph can't compute loglikelihood for software reasons
+% jtree on the big_bnet gives the wrong ll
+for e=2:nengines
+  %assert(approxeq(ll(1), ll(e)));
+  assert(approxeq(cell2num(mpe{1}), cell2num(mpe{e})))
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/fg2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,104 @@
+% make a factor graph corresponding to an  HMM, where we absorb the evidence up front,
+% and then eliminate the observed nodes.
+% Compare this with not absorbing the evidence.
+
+seed = 1;
+rand('state', seed);
+randn('state', seed);
+
+T = 3;
+Q = 3;
+O = 2;
+cts_obs = 0;
+param_tying = 1;
+bnet = mk_hmm_bnet(T, Q, O, cts_obs, param_tying);
+N = 2*T;
+onodes = bnet.observed;
+hnodes = mysetdiff(1:N, onodes);
+
+data = sample_bnet(bnet);
+
+init_factor = bnet.CPD{1};
+obs_factor = bnet.CPD{3};
+edge_factor = bnet.CPD{2}; % trans matrix
+
+nfactors = T;
+nvars = T; % hidden only
+G = zeros(nvars, nfactors);
+G(1,1) = 1;
+for t=1:T-1
+  G(t:t+1, t+1)=1;
+end
+
+node_sizes = Q*ones(1,T);
+
+% We tie params as follows:
+% the first hidden node use init_factor (number 1)
+% all hidden nodes on the backbone use edge_factor (number 2)
+% all observed nodes use the same factor, namely obs_factor
+
+small_fg = mk_fgraph_given_ev(G, node_sizes, {init_factor, edge_factor}, {obs_factor}, data(onodes), ...
+			 'equiv_class', [1 2*ones(1,T-1)], 'ev_equiv_class', ones(1,T));
+
+small_bnet = fgraph_to_bnet(small_fg);
+
+% don't pre-process evidence
+big_fg = bnet_to_fgraph(bnet);
+big_bnet = fgraph_to_bnet(big_fg);
+
+
+
+engine = {};
+engine{1} = jtree_inf_engine(bnet);
+engine{2} = belprop_fg_inf_engine(small_fg, 'max_iter', 2*T);
+engine{3} = jtree_inf_engine(small_bnet);
+engine{4} = belprop_fg_inf_engine(big_fg, 'max_iter', 3*T);
+engine{5} = jtree_inf_engine(big_bnet);
+nengines = length(engine);
+
+
+% on BN, use the original evidence
+evidence = cell(1, 2*T);
+evidence(onodes) = data(onodes);
+tic; [engine{1}, ll(1)] = enter_evidence(engine{1}, evidence); toc
+
+
+% on small_fg, we have already included the evidence
+evidence = cell(1,T);
+tic; [engine{2}, ll(2)] = enter_evidence(engine{2}, evidence); toc
+
+
+% on small_bnet, we must add evidence to the dummy nodes 
+V = small_fg.nvars;
+dummy = V+1:V+small_fg.nfactors;
+N = max(dummy);
+evidence = cell(1, N);
+evidence(dummy) = {1};
+tic; [engine{3}, ll(3)] = enter_evidence(engine{3}, evidence); toc
+
+
+% on big_fg, use the original evidence
+evidence = cell(1, 2*T);
+evidence(onodes) = data(onodes);
+tic; [engine{4}, ll(4)] = enter_evidence(engine{4}, evidence); toc
+
+
+% on big_bnet, we must add evidence to the dummy nodes
+V = big_fg.nvars;
+assert(V == 2*T);
+dummy = V+1:V+big_fg.nfactors;
+N = max(dummy);
+evidence = cell(1, N);
+evidence(onodes) = data(onodes);
+evidence(dummy) = {1};
+tic; [engine{5}, ll(5)] = enter_evidence(engine{5}, evidence); toc
+
+
+marg = zeros(T, nengines, Q); % marg(t,e,:)
+for t=1:T
+  for e=1:nengines
+    m = marginal_nodes(engine{e}, t);
+    marg(t,e,:) = m.T;
+  end
+end
+marg(:,:,1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/fg3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,83 @@
+% make a factor graph corresponding to an  HMM with Gaussian outputs, where we absorb the
+% evidence up front 
+
+seed = 1;
+rand('state', seed);
+randn('state', seed);
+
+T = 3;
+Q = 3;
+O = 2;
+cts_obs = 1;
+param_tying = 1;
+bnet = mk_hmm_bnet(T, Q, O, cts_obs, param_tying);
+N = 2*T;
+onodes = bnet.observed;
+hnodes = mysetdiff(1:N, onodes);
+
+data = sample_bnet(bnet);
+
+init_factor = bnet.CPD{1};
+obs_factor = bnet.CPD{3};
+edge_factor = bnet.CPD{2}; % trans matrix
+
+nfactors = T;
+nvars = T; % hidden only
+G = zeros(nvars, nfactors);
+G(1,1) = 1;
+for t=1:T-1
+  G(t:t+1, t+1)=1;
+end
+
+node_sizes = Q*ones(1,T);
+
+% We tie params as follows:
+% the first hidden node use init_factor (number 1)
+% all hidden nodes on the backbone use edge_factor (number 2)
+% all observed nodes use the same factor, namely obs_factor
+
+small_fg = mk_fgraph_given_ev(G, node_sizes, {init_factor, edge_factor}, {obs_factor}, data(onodes), ...
+			 'equiv_class', [1 2*ones(1,T-1)], 'ev_equiv_class', ones(1,T));
+
+small_bnet = fgraph_to_bnet(small_fg);
+
+% don't pre-process evidence
+% big_fg = bnet_to_fgraph(bnet); % can't handle Gaussian node
+
+
+engine = {};
+engine{1} = jtree_inf_engine(bnet);
+engine{2} = belprop_fg_inf_engine(small_fg, 'max_iter', 2*T);
+engine{3} = jtree_inf_engine(small_bnet);
+nengines = length(engine);
+
+
+% on BN, use the original evidence
+evidence = cell(1, 2*T);
+evidence(onodes) = data(onodes);
+tic; [engine{1}, ll(1)] = enter_evidence(engine{1}, evidence); toc
+
+
+% on small_fg, we have already included the evidence
+evidence = cell(1,T);
+tic; [engine{2}, ll(2)] = enter_evidence(engine{2}, evidence); toc
+
+
+% on small_bnet, we must add evidence to the dummy nodes 
+V = small_fg.nvars;
+dummy = V+1:V+small_fg.nfactors;
+N = max(dummy);
+evidence = cell(1, N);
+evidence(dummy) = {1};
+tic; [engine{3}, ll(3)] = enter_evidence(engine{3}, evidence); toc
+
+
+
+marg = zeros(T, nengines, Q); % marg(t,e,:)
+for t=1:T
+  for e=1:nengines
+    m = marginal_nodes(engine{e}, t);
+    marg(t,e,:) = m.T;
+  end
+end
+marg(:,:,1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/fg_mrf1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,113 @@
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+nrows = 3;
+ncols = 3;
+npixels = nrows*ncols;
+
+% we number pixels in transposed raster scan order (top to bottom, left to right)
+
+% hidden var
+HV = reshape(1:npixels, nrows, ncols);
+% observed var
+OV = reshape(1:npixels, nrows, ncols) + length(HV(:));
+
+% observed factor
+OF = reshape(1:npixels, nrows, ncols);
+% vertical edge factor VEF(i,j) is the factor for edge HV(i,j) - HV(i+1,j)
+VEF = reshape((1:(nrows-1)*ncols), nrows-1, ncols) + length(OF(:));
+% horizontal edge factor HEF(i,j) is the factor for edge HV(i,j) - HV(i,j+1)
+HEF = reshape((1:nrows*(ncols-1)), nrows, ncols-1) + length(OF(:)) + length(VEF(:));
+
+nvars = length(HV(:))+length(OV(:));
+assert(nvars == 2*npixels);
+nfac = length(OF(:)) + length(VEF(:)) + length(HEF(:));
+
+K = 2; % number of discrete values for the hidden vars
+%O = 1; % each observed pixel is a scalar
+O = 2; % each observed pixel is binary
+
+factors = cell(1,3);
+
+% hidden states generate observed 0 or 1 plus noise
+%factors{2} = cond_gauss1_kernel(K, O, 'mean', [0 1], 'cov', [0.1 0.1]);
+pnoise = 0.2;
+factors{1} = tabular_kernel([K O], [1-pnoise pnoise; pnoise 1-pnoise]);
+ofactor = 1;
+
+% encourage compatibility between neighboring vertical pixels
+factors{2} = tabular_kernel([K K], [0.8 0.2; 0.2 0.8]);
+vedge_factor = 2;
+
+%% no constraint between neighboring horizontal pixels
+%factors{3} = tabular_kernel([K K], [0.5 0.5; 0.5 0.5]);
+
+factors{3} = tabular_kernel([K K], [0.8 0.2; 0.2 0.8]);
+hedge_factor = 3;
+
+
+
+factor_ndx = zeros(1, 3);
+G = zeros(nvars, nfac);
+ns = [K*ones(1,length(HV(:))) O*ones(1,length(OV(:)))];
+
+N = length(ns);
+%cnodes = OV(:);
+cnodes = [];
+dnodes = 1:N;
+
+for i=1:nrows
+  for j=1:ncols
+    G([HV(i,j), OV(i,j)], OF(i,j)) = 1;
+    factor_ndx(OF(i,j)) = ofactor;
+
+    if i < nrows
+      G(HV(i:i+1,j), VEF(i,j)) = 1;
+      factor_ndx(VEF(i,j)) = vedge_factor;
+    end
+
+    if j < ncols
+      G(HV(i,j:j+1), HEF(i,j)) = 1;
+      factor_ndx(HEF(i,j)) = hedge_factor;
+    end
+
+  end
+end
+
+
+fg = mk_fgraph(G, ns, factors, 'discrete', dnodes, 'equiv_class', factor_ndx);
+
+if 1
+  % make image with vertical stripes
+  I = zeros(nrows, ncols);
+  for j=1:2:ncols
+    I(:,j) = 1;
+  end
+else
+  % make image with square in middle
+  I = zeros(nrows, ncols);
+  I(3:6,3:6) = 1;
+end
+
+  
+% corrupt image
+O = mod(I + (rand(nrows,ncols)> (1-pnoise)), 2);
+
+maximize = 1;
+engine = belprop_fg_inf_engine(fg, 'maximize', maximize, 'max_iter', npixels*5);
+
+evidence = cell(1, nvars);
+onodes = OV(:);
+evidence(onodes) = num2cell(O+1); % values must be in range {1,2}
+
+engine = enter_evidence(engine, evidence);
+
+for i=1:nrows
+  for j=1:ncols
+    m = marginal_nodes(engine, HV(i,j));
+    Ihat(i,j) = argmax(m.T)-1;
+  end
+end
+
+Ihat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/fgraph/fg_mrf2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,150 @@
+seed = 0;
+rand('state', seed);
+randn('state', seed);
+
+nrows = 5;
+ncols = 5;
+npixels = nrows*ncols;
+
+% we number pixels in transposed raster scan order (top to bottom, left to right)
+
+% H(i,j) is the number of the hidden node at (i,j)
+H = reshape(1:npixels, nrows, ncols);
+% O(i,j) is the number of the obsevred node at (i,j)
+O = reshape(1:npixels, nrows, ncols) + length(H(:));
+
+
+% Make a Bayes net where each hidden pixel generates an observed pixel
+% but there are no connections between the hidden pixels.
+% We use this just to generate noisy versions of known images.
+N = 2*npixels;
+dag = zeros(N);
+for i=1:nrows
+  for j=1:ncols
+    dag(H(i,j), O(i,j)) = 1;
+  end
+end
+
+
+K = 2; % number of discrete values for the hidden vars
+ns = ones(N,1);
+ns(H(:)) = K;
+ns(O(:)) = 1;
+
+
+% make image with vertical stripes
+I = zeros(nrows, ncols);
+for j=1:2:ncols
+  I(:,j) = 1;
+end
+
+% each "hidden" node will be instantiated to the pixel in the known image
+% each observed node has conditional Gaussian distribution
+eclass = ones(1,N);
+%eclass(H(:)) = 1;
+%eclass(O(:)) = 2;
+eclass(H(:)) = 1:npixels;
+eclass(O(:)) = npixels+1;
+bnet = mk_bnet(dag, ns, 'discrete', H(:), 'equiv_class', eclass);
+
+
+%bnet.CPD{1} = tabular_CPD(bnet, H(1), 'CPT', normalise(ones(1,K)));
+for i=1:nrows
+  for j=1:ncols
+    bnet.CPD{H(i,j)} = root_CPD(bnet, H(i,j), I(i,j) + 1);
+  end
+end
+
+% If H(i,j)=1, O(i,j)=+1 plus noise
+% If H(i,j)=2, O(i,j)=-1 plus noise
+sigma = 0.5;
+bnet.CPD{eclass(O(1,1))} = gaussian_CPD(bnet, O(1,1), 'mean', [1 -1], 'cov', reshape(sigma*ones(1,K), [1 1 K]));
+ofactor = bnet.CPD{eclass(O(1,1))};
+%ofactor = gaussian_CPD('self', 2, 'dps', 1, 'cps', [], 'sz', [K O], 'mean', [1 -1], 'cov', reshape(sigma*ones(1,K), [1 1 K)));
+
+
+data = sample_bnet(bnet);
+img = reshape(data(O(:)), nrows, ncols)
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Now create MRF represented as a factor graph to try and recover the scene
+
+% VEF(i,j) is the number of the factor for the vertical edge between HV(i,j) - HV(i+1,j)
+VEF = reshape((1:(nrows-1)*ncols), nrows-1, ncols);
+% HEF(i,j) is the number of the factor for the horizontal edge between HV(i,j) - HV(i,j+1)
+HEF = reshape((1:nrows*(ncols-1)), nrows, ncols-1) + length(VEF(:));
+
+nvars = npixels;
+nfac = length(VEF(:)) + length(HEF(:));
+
+G = zeros(nvars, nfac);
+N = length(ns);
+eclass = zeros(1, nfac); % eclass(i)=j  means factor i gets its params from factors{j}
+vfactor_ndx = 1; % all vertcial edges get their params from factors{1}
+hfactor_ndx = 2; % all vertcial edges get their params from factors{2}
+for i=1:nrows
+  for j=1:ncols
+    if i < nrows
+      G(H(i:i+1,j), VEF(i,j)) = 1;
+      eclass(VEF(i,j)) = vfactor_ndx;
+    end
+    if j < ncols
+      G(H(i,j:j+1), HEF(i,j)) = 1;
+      eclass(HEF(i,j)) = hfactor_ndx;
+    end
+  end
+end
+
+
+% "kitten raised in cage" prior - more likely to see continguous vertical lines
+vfactor = tabular_kernel([K K], softeye(K, 0.9));
+hfactor = tabular_kernel([K K], softeye(K, 0.5));
+factors = cell(1,2);
+factors{vfactor_ndx} = vfactor;
+factors{hfactor_ndx} = hfactor;
+
+ev_eclass = ones(1,N); % every observation factor gets is params from ofactor
+ns = K*ones(1,nvars);
+%fg = mk_fgraph_given_ev(G, ns, factors, {ofactor}, num2cell(img), 'equiv_class', eclass, 'ev_equiv_class', ev_eclass);
+fg = mk_fgraph_given_ev(G, ns, factors, {ofactor}, img, 'equiv_class', eclass, 'ev_equiv_class', ev_eclass);
+
+bnet2 = fgraph_to_bnet(fg);
+
+% inference
+
+
+maximize = 1;
+
+engine = {};
+engine{1} = belprop_fg_inf_engine(fg, 'max_iter', npixels*2);
+engine{2} = jtree_inf_engine(bnet2);
+nengines = length(engine);
+
+% on fg, we have already included the evidence
+evidence = cell(1,npixels);
+tic; [engine{1}, ll(1)] = enter_evidence(engine{1}, evidence, 'maximize', maximize); toc
+
+
+% on bnet2, we must add evidence to the dummy nodes 
+V = fg.nvars;
+dummy = V+1:V+fg.nfactors;
+N = max(dummy);
+evidence = cell(1, N);
+evidence(dummy) = {1};
+tic; [engine{2}, ll(2)] = enter_evidence(engine{2}, evidence); toc
+
+
+Ihat = zeros(nrows, ncols, nengines);
+for e=1:nengines
+  for i=1:nrows
+    for j=1:ncols
+      m = marginal_nodes(engine{e}, H(i,j));
+      Ihat(i,j,e) = argmax(m.T)-1;
+    end
+  end
+end
+Ihat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/gaussian1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+% Make the following network (from Jensen (1996) p84 fig 4.17)
+%    1
+%  / | \
+% 2  3  4
+% |  |  |
+% 5  6  7
+%  \/ \/
+%  8   9
+% where all arcs point downwards
+
+
+N = 9;
+dag = zeros(N,N);
+dag(1,2)=1; dag(1,3)=1; dag(1,4)=1;
+dag(2,5)=1; dag(3,6)=1; dag(4,7)=1;
+dag(5,8)=1; dag(6,8)=1; dag(6,9)=1; dag(7,9) = 1;
+
+ns = [5 4 3 2 2 1 2 2 2]; % vector-valued nodes
+%ns = ones(1,9); % scalar nodes
+dnodes = [];
+
+bnet = mk_bnet(dag, ns, 'discrete', []);
+rand('state', 0);
+randn('state', 0);
+for i=1:N
+  bnet.CPD{i} = gaussian_CPD(bnet, i);
+end
+
+clear engine;
+engine{1} = gaussian_inf_engine(bnet);
+engine{2} = jtree_inf_engine(bnet);
+
+[err, time] = cmp_inference_static(bnet, engine);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/gaussian2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+% Make the following network (from Jensen (1996) p84 fig 4.17)
+%    1
+%  / | \
+% 2  3  4
+% |  |  |
+% 5  6  7
+%  \/ \/
+%  8   9
+% where all arcs point downwards
+
+
+N = 9;
+dag = zeros(N,N);
+dag(1,2)=1; dag(1,3)=1; dag(1,4)=1;
+dag(2,5)=1; dag(3,6)=1; dag(4,7)=1;
+dag(5,8)=1; dag(6,8)=1; dag(6,9)=1; dag(7,9) = 1;
+
+ns = [5 4 3 2 2 1 2 2 2]; % vector-valued nodes
+%ns = ones(1,9); % scalar nodes
+dnodes = [];
+
+bnet = mk_bnet(dag, ns, 'discrete', []);
+rand('state', 0);
+randn('state', 0);
+for i=1:N
+  bnet.CPD{i} = gaussian_CPD(bnet, i);
+end
+
+clear engine;
+engine{1} = gaussian_inf_engine(bnet);
+engine{2} = jtree_inf_engine(bnet);
+
+[err, time] = cmp_inference_static(bnet, engine);
+
+Nsamples = 100;
+samples = cell(N, Nsamples);
+for s=1:Nsamples
+  samples(:,s) = sample_bnet(bnet);
+end
+bnet2 = learn_params(bnet, samples);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/gibbs_test1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,107 @@
+function gibbs_test1()
+
+disp('gibbs test 1')
+
+rand('state', 0);
+randn('state', 0);
+
+%[bnet onodes hnodes qnodes] = gibbs_ex_1;
+[bnet onodes hnodes qnodes] = gibbs_ex_2;
+
+je = jtree_inf_engine(bnet);
+ge = gibbs_sampling_inf_engine (bnet, 'T', 50, 'burnin', 0, ...
+				'order', [2 2 1 2 1]);
+
+ev = sample_bnet(bnet);
+
+evidence = cell(length(bnet.dag), 1);
+evidence(onodes) = ev(onodes);
+[je lj] = enter_evidence(je, evidence);
+[ge lg] = enter_evidence(ge, evidence);
+
+
+mj = marginal_nodes(je, qnodes);
+
+[mg ge] = marginal_nodes (ge, qnodes);
+for t = 1:100
+  [mg ge] = marginal_nodes (ge, qnodes, 'reset_counts', 0);
+  diff = mj.T - mg.T;
+  err(t) = norm (diff(:), 1);
+end
+clf
+plot(err);
+%title('error vs num. Gibbs samples')
+
+
+%%%%%%%
+
+function [bnet, onodes, hnodes, qnodes] = gibbs_ex_1
+% bnet = gibbs_ex_1
+% a simple network to test the gibbs sampling engine
+%    1
+%  / | \
+% 2  3  4
+% |  |  |
+% 5  6  7
+%  \/ \/
+%  8   9
+% where all arcs point downwards
+
+N = 9;
+dag = zeros(N,N);
+dag(1,2)=1; dag(1,3)=1; dag(1,4)=1;
+dag(2,5)=1; dag(3,6)=1; dag(4,7)=1;
+dag(5,8)=1; dag(6,8)=1; dag(6,9)=1; dag(7,9) = 1;
+
+onodes = 8:9;
+hnodes = 1:7;
+qnodes = [1 2 6];
+ns = [2 3 4 3 5 2 4 3 2];
+
+eclass = [1 2 3 2 4 5 6 7 8];
+
+bnet = mk_bnet (dag, ns, 'equiv_class', eclass);
+
+for i = 1:3
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+for i = 4:8
+  bnet.CPD{i} = tabular_CPD(bnet, i+1);
+end
+
+
+
+%%%%%%%
+
+function [bnet, onodes, hnodes, qnodes] = gibbs_ex_2
+% bnet = gibbs_ex_2
+% a very simple network
+%
+% 1   2
+%  \ /
+%   3
+
+N = 3;
+dag = zeros(N,N);
+dag(1,3)=1; dag(2,3)=1;
+
+onodes = 3;
+hnodes = 1:2;
+qnodes = 1:2;
+ns = [2 4 3];
+
+eclass = [1 2 3];
+
+bnet = mk_bnet (dag, ns, 'equiv_class', eclass);
+
+for i = 1:3
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/learn1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+% Lawn sprinker example from Russell and Norvig p454
+% See www.cs.berkeley.edu/~murphyk/Bayes/usage.html for details.
+
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+
+false = 1; true = 2;
+ns = 2*ones(1,N); % binary nodes
+
+bnet = mk_bnet(dag, ns);
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+
+CPT = cell(1,N);
+for i=1:N
+  s=struct(bnet.CPD{i});  % violate object privacy
+  CPT{i}=s.CPT;
+end
+
+% Generate training data
+nsamples = 50;
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+data = cell2num(samples);
+
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, ns);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C, 'clamped', 1, 'CPT', [0.5 0.5], ...
+			   'prior_type', 'dirichlet', 'dirichlet_weight', 0);
+bnet2.CPD{R} = tabular_CPD(bnet2, R, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);
+bnet2.CPD{S} = tabular_CPD(bnet2, S, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);
+bnet2.CPD{W} = tabular_CPD(bnet2, W, 'prior_type', 'dirichlet', 'dirichlet_weight', 0);
+
+
+% Find MLEs from fully observed data
+bnet4 = learn_params(bnet2, samples);
+
+% Bayesian updating with 0 prior is equivalent to ML estimation
+bnet5 = bayes_update_params(bnet2, samples);
+
+CPT4 = cell(1,N);
+for i=1:N
+  s=struct(bnet4.CPD{i});  % violate object privacy
+  CPT4{i}=s.CPT;
+end
+
+CPT5 = cell(1,N);
+for i=1:N
+  s=struct(bnet5.CPD{i});  % violate object privacy
+  CPT5{i}=s.CPT;
+  assert(approxeq(CPT5{i}, CPT4{i}))
+end
+
+
+if 1
+% Find MLEs from partially observed data
+
+% hide 50% of the nodes
+samplesH = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samplesH{I(k), J(k)} = [];
+end
+
+engine = jtree_inf_engine(bnet2);
+max_iter = 5;
+[bnet6, LL] = learn_params_em(engine, samplesH, max_iter);
+
+CPT6 = cell(1,N);
+for i=1:N
+  s=struct(bnet6.CPD{i});  % violate object privacy
+  CPT6{i}=s.CPT;
+end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/lw1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+% Evaluate effectiveness of likelihood weighting on the lawn sprinkler example
+
+N = 4; 
+dag = zeros(N,N);
+C = 1; R = 2; S = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+
+false = 1; true = 2;
+ns = 2*ones(1,N); % binary nodes
+
+bnet = mk_bnet(dag, ns);
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+
+
+clear engine;
+engine{1} = jtree_inf_engine(bnet);
+engine{2} = likelihood_weighting_inf_engine(bnet);
+
+nengines = length(engine);
+m = cell(1, nengines);
+ll = zeros(1, nengines);
+
+evidence = cell(1,N);
+%evidence{C} = true; % evidence at the top is the easiest
+evidence{W} = true; % evidence at the bottom is the hardets
+
+query = [R];
+
+i=1;
+engine{i}  = enter_evidence(engine{i}, evidence);
+exact_m = marginal_nodes(engine{i}, query);
+
+i=2;
+samples = 100:100:500;
+err = zeros(1, length(samples));
+for j=1:length(samples)
+  nsamples = samples(j);
+  engine{i}  = enter_evidence(engine{i}, evidence, nsamples);
+  approx_m = marginal_nodes(engine{i}, query);
+  a1=approxeq(approx_m.T,exact_m.T,1e-1);
+  a2=approxeq(approx_m.T,exact_m.T,1e-2);
+  a3=approxeq(approx_m.T,exact_m.T,1e-3);
+  e = sum(abs(approx_m.T(:) - exact_m.T(:)));
+  fprintf('%d samples, 1dp %d, 2dp %d, 3dp %d,  err %f\n', nsamples, a1, a2, a3, e);
+  err(j) = e;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/mfa1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+% Factor analysis
+% Z -> X,  Z in R^k, X in R^D, k << D (high dimensional observations explained by small source)
+% Z ~ N(0,I),   X|Z ~ N(L z, Psi), where Psi is diagonal.
+%
+% Mixtures of FA
+% Now X|Z,W=i ~ N(mu(i) + L(i) Z, Psi(i))
+%
+% We compare to Zoubin Ghahramani's code.
+
+randn('state', 0);
+max_iter = 3;
+M = 2;
+k = 3;
+D = 5;
+
+n = 5;
+X1 = randn(n, D);
+X2 = randn(n, D) + 2; % move the mean to (2,2,2...)
+X = [X1; X2];
+N = size(X, 1);
+
+% initialise as in mfa
+tiny=exp(-700);
+mX = mean(X);
+cX=cov(X);
+scale=det(cX)^(1/D);
+randn('state',0); % must reset seed here so initial params are identical to mfa
+L0=randn(D*M,k)*sqrt(scale/k);
+W0 = permute(reshape(L0, [D M k]), [1 3 2]); % use D,K,M 
+Psi0=diag(cX)+tiny;
+Pi0=ones(M,1)/M;
+Mu0=randn(M,D)*sqrtm(cX)+ones(M,1)*mX;
+
+[Lh1, Ph1, Mu1, Pi1, LL1] = mfa(X,M,k,max_iter);
+Lh1 = permute(reshape(Lh1, [D M k]), [1 3 2]); % use D,K,M 
+
+
+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+dnodes = 1;
+onodes = 3;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'observed', onodes);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+
+%bnet.CPD{2} = gaussian_CPD(bnet, 2, zeros(k, 1), eye(k), [], 'diag', 'untied', 'clamp_mean',  'clamp_cov');
+
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'cov_prior_weight', 0, 'clamp_mean', 1, 'clamp_cov', 1);
+
+%bnet.CPD{3} = gaussian_CPD(bnet, 3, Mu0', repmat(diag(Psi0), [1 1 M]), W0, 'diag', 'tied');
+
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'cov_prior_weight', 0, 'tied_cov', 1);
+
+engine = jtree_inf_engine(bnet);
+evidence = cell(3, N);
+evidence(3,:) = num2cell(X', 1);
+
+[bnet2, LL2, engine2] = learn_params_em(engine, evidence, max_iter);
+
+s = struct(bnet2.CPD{1});
+Pi2 = s.CPT(:);
+s = struct(bnet2.CPD{3});
+Mu2 = s.mean;
+W2 = s.weights;
+Sigma2 = s.cov;
+
+
+% Compare to Zoubin's code
+assert(approxeq(LL1,LL2));
+for i=1:M
+  assert(approxeq(W2(:,:,i), Lh1(:,:,i)));
+  assert(approxeq(Sigma2(:,:,i), diag(Ph1)));
+  assert(approxeq(Mu2(:,i), Mu1(i,:)));
+  assert(approxeq(Pi2(:), Pi1(:)));
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/mixexp1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,72 @@
+% Fit a piece-wise linear regression model.
+% Here is the model
+%
+%  X \
+%  | |
+%  Q |
+%  | /
+%  Y
+%
+% where all arcs point down.
+% We condition everything on X, so X is a root node. Q is a softmax, and Y is a linear Gaussian.
+% Q is hidden, X and Y are observed.
+
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1;
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+dnodes = [2];
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'observed', onodes);
+
+
+w = [-5 5];  % w(:,i) is the normal vector to the i'th decisions boundary
+b = [0 0];  % b(i) is the offset (bias) to the i'th decisions boundary
+
+mu = [0 0];
+sigma = 1;
+Sigma = repmat(sigma*eye(ns(Y)), [ns(Y) ns(Y) ns(Q)]);
+W = [-1 1];
+W2 = reshape(W, [ns(Y) ns(X) ns(Q)]);
+
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2, w, b);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', mu, 'cov', Sigma, 'weights', W2);
+
+
+
+% Check inference
+
+x = 0.1;
+ystar = 1;
+
+engine = jtree_inf_engine(bnet);
+[engine, loglik] = enter_evidence(engine, {x, [], ystar});
+Qpost = marginal_nodes(engine, 2);
+
+% eta(i,:) = softmax (gating) params for expert i
+eta = [b' w'];
+
+% theta(i,:) = regression vector for expert i
+theta = [mu' W'];
+
+% yhat(i) = E[y | Q=i, x] = prediction of i'th expert
+x1 = [1 x]';
+yhat = theta * x1;
+
+% gate_prior(i,:) = Pr(Q=i | x)
+gate_prior = normalise(exp(eta * x1));
+
+% cond_lik(i) = Pr(y | Q=i, x)
+cond_lik = (1/(sqrt(2*pi)*sigma)) * exp(-(0.5/sigma^2) * ((ystar - yhat) .* (ystar - yhat)));
+
+% gate_posterior(i,:) = Pr(Q=i | x, y)
+[gate_posterior, lik] = normalise(gate_prior .* cond_lik);
+
+assert(approxeq(gate_posterior(:), Qpost.T(:)));
+assert(approxeq(log(lik), loglik));
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/mixexp2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,104 @@
+% Fit a piece-wise linear regression model.
+% Here is the model
+%
+%  X \
+%  | |
+%  Q |
+%  | /
+%  Y
+%
+% where all arcs point down.
+% We condition everything on X, so X is a root node. Q is a softmax, and Y is a linear Gaussian.
+% Q is hidden, X and Y are observed.
+
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1;
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+dnodes = [2];
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'observed', onodes);
+
+IRLS_iter = 10;
+clamped = 0;
+
+bnet.CPD{1} = root_CPD(bnet, 1);
+
+if 0
+  % start with good initial params
+  w = [-5 5];  % w(:,i) is the normal vector to the i'th decisions boundary
+  b = [0 0];  % b(i) is the offset (bias) to the i'th decisions boundary
+  
+  mu = [0 0];
+  sigma = 1;
+  Sigma = repmat(sigma*eye(ns(Y)), [ns(Y) ns(Y) ns(Q)]);
+  W = [-1 1];
+  W2 = reshape(W, [ns(Y) ns(X) ns(Q)]);
+
+  bnet.CPD{2} = softmax_CPD(bnet, 2, w, b,  clamped, IRLS_iter);
+  bnet.CPD{3} = gaussian_CPD(bnet, 3, mu, Sigma, W2);
+else
+  % start with rnd initial params
+  rand('state', 0);
+  randn('state', 0);
+  bnet.CPD{2} = softmax_CPD(bnet, 2, 'clamped', clamped, 'max_iter', IRLS_iter);
+  bnet.CPD{3} = gaussian_CPD(bnet, 3);
+end
+
+
+
+load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+% Just use 1/10th of the data, to speed things up
+data = mixexp_data(1:10:end, :);
+%data = mixexp_data;
+ 
+%plot(data(:,1), data(:,2), '.')
+
+
+s = struct(bnet.CPD{2}); % violate object privacy
+%eta0 = [s.glim.b1; s.glim.w1]';
+eta0 = [s.glim{1}.b1; s.glim{1}.w1]';
+s = struct(bnet.CPD{3}); % violate object privacy
+W = reshape(s.weights, [1 2]);
+theta0 = [s.mean; W]';
+
+%figure(1)
+%mixexp_plot(theta0, eta0, data);
+%suptitle('before learning')
+
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+
+engine = jtree_inf_engine(bnet);
+
+% log lik before learning
+ll = 0;
+for l=1:ncases
+  ev = cases(:,l);
+  [engine, loglik] = enter_evidence(engine, ev);
+  ll = ll + loglik;
+end
+
+% do learning
+max_iter = 5;
+[bnet2, LL2] = learn_params_em(engine, cases, max_iter);
+
+s = struct(bnet2.CPD{2});
+%eta2 = [s.glim.b1; s.glim.w1]';
+eta2 = [s.glim{1}.b1; s.glim{1}.w1]';
+s = struct(bnet2.CPD{3});
+W = reshape(s.weights, [1 2]);
+theta2 = [s.mean; W]';
+
+%figure(2)
+%mixexp_plot(theta2, eta2, data);
+%suptitle('after learning')
+
+fprintf('mixexp2: loglik before learning %f, after %d iters %f\n', ll, length(LL2),  LL2(end));
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/mixexp3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+% Fit a piece-wise linear regression model.
+% Here is the model
+%
+%  X \
+%  | |
+%  Q |
+%  | /
+%  Y
+%
+% where all arcs point down.
+% We condition everything on X, so X is a root node. Q is a softmax, and Y is a linear Gaussian.
+% Q is hidden, X and Y are observed.
+
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1;
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+dnodes = [2];
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'observed', onodes);
+
+IRLS_iter = 10;
+clamped = 0;
+
+bnet.CPD{1} = root_CPD(bnet, 1);
+
+% start with good initial params
+w = [-5 5];  % w(:,i) is the normal vector to the i'th decisions boundary
+b = [0 0];  % b(i) is the offset (bias) to the i'th decisions boundary
+
+mu = [0 0];
+sigma = 1;
+Sigma = repmat(sigma*eye(ns(Y)), [ns(Y) ns(Y) ns(Q)]);
+W = [-1 1];
+W2 = reshape(W, [ns(Y) ns(X) ns(Q)]);
+
+bnet.CPD{2} = softmax_CPD(bnet, 2, w, b,  clamped, IRLS_iter);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', mu, 'cov', Sigma, 'weights', W2);
+
+
+engine = jtree_inf_engine(bnet);
+
+evidence = cell(1,3);
+evidence{X} = 0.68;
+
+engine = enter_evidence(engine, evidence);
+
+m = marginal_nodes(engine, Y);
+m.mu
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/mog1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+% Fit a mixture of Gaussians using netlab and BNT
+
+rand('state', 0);
+randn('state', 0);
+
+% Q -> Y
+ncenters = 2; dim = 2;
+cov_type = 'full';
+
+% Generate the data from a mixture of 2 Gaussians
+%mu = randn(dim, ncenters);
+mu = zeros(dim, ncenters);
+mu(:,1) = [-1 -1]';
+mu(:,1) = [1 1]';
+Sigma = repmat(0.1*eye(dim),[1 1 ncenters]);
+ndat1 = 8; ndat2 = 8;
+%ndat1 = 2; ndat2 = 2;
+ndata = ndat1+ndat2;
+x1 = gsamp(mu(:,1), Sigma(:,:,1), ndat1);
+x2 = gsamp(mu(:,2), Sigma(:,:,2), ndat2);
+data = [x1; x2];
+%plot(x1(:,1),x1(:,2),'ro', x2(:,1),x2(:,2),'bx')
+
+% Fit using netlab
+max_iter = 3;
+mix = gmm(dim, ncenters, cov_type);
+options = foptions;
+options(1) = 1; % verbose
+options(14) = max_iter;
+
+% extract initial params
+%mix = gmminit(mix, x, options); % Initialize with K-means
+mu0 = mix.centres';
+pi0 = mix.priors(:);
+Sigma0 = mix.covars; % repmat(eye(dim), [1 1 ncenters]);
+
+[mix, options] = gmmem(mix, data, options);
+
+% Final params
+ll1 = options(8);
+mu1 = mix.centres';
+pi1 = mix.priors(:);
+Sigma1 = mix.covars;
+
+
+
+
+% BNT
+
+dag = zeros(2);
+dag(1,2) = 1;
+node_sizes = [ncenters dim];
+discrete_nodes = 1;
+onodes = 2;
+
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+bnet.CPD{1} = tabular_CPD(bnet, 1, pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', mu0, 'cov', Sigma0, 'cov_type', cov_type, ...
+			   'cov_prior_weight', 0);
+
+engine = jtree_inf_engine(bnet);
+
+evidence = cell(2, ndata);
+evidence(2,:) = num2cell(data', 1);
+
+[bnet2, LL] = learn_params_em(engine, evidence, max_iter);
+
+ll2 = LL(end);
+s1 = struct(bnet2.CPD{1});
+pi2 = s1.CPT(:);
+
+s2 = struct(bnet2.CPD{2});
+mu2 = s2.mean;
+Sigma2 = s2.cov;
+
+% assert(approxeq(ll1, ll2)); % gmmem returns the value after the final M step, GMT before
+assert(approxeq(mu1, mu2));
+assert(approxeq(Sigma1, Sigma2))
+assert(approxeq(pi1, pi2))
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/mpe1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+seed = 1;
+rand('state', seed);
+randn('state', seed);
+
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+
+false = 1; true = 2;
+ns = 2*ones(1,N); % binary nodes
+
+bnet = mk_bnet(dag, ns);
+if 0
+  bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+  bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+  bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+  bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+else
+  for i=1:N, bnet.CPD{i} = tabular_CPD(bnet, i); end
+end
+
+
+
+evidence = cell(1,N);
+onodes = [1 3];
+data = sample_bnet(bnet);
+evidence(onodes) = data(onodes);
+
+clear engine;
+engine{1} = belprop_inf_engine(bnet);
+engine{2} = jtree_inf_engine(bnet);
+engine{3} = global_joint_inf_engine(bnet);
+engine{4} = var_elim_inf_engine(bnet);
+E = length(engine);
+
+clear mpe;
+for e=1:E
+  mpe{e} = find_mpe(engine{e}, evidence);
+end
+for e=2:E
+  assert(isequal(mpe{1}, mpe{e}))
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/mpe2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+% Computing most probable explanation.
+
+% If you don't break ties consistently, loopy can give wrong mpe
+% even though the graph has no cycles, and even though the max-marginals are the same.
+% This example was contributed by Wentau Yih <wtyih@yahoo.com> 29 Jan 02.
+
+% define loop-free graph structure (all edges point down)
+%
+% Xe1   Xe2
+%  |    |
+%  E1   E2
+%    \ /
+%     R1
+%     |
+%    Xr1
+
+N = 6;
+dag = zeros(N,N);
+Xe1 = 1; Xe2 = 2; E1 = 3; E2 = 4; R1 = 5; Xr1 = 6;
+dag(Xe1, E1) = 1;
+dag(Xe2, E2) = 1;
+dag([E1 E2], R1) = 1;
+dag(R1, Xr1) = 1;
+
+node_sizes = [ 1 1 2 2 2 1 ];
+
+% create BN
+
+bnet = mk_bnet(dag, node_sizes, 'observed', [Xe1 Xe2 Xr1]);
+
+% fill in CPT
+
+bnet.CPD{Xe1} = tabular_CPD(bnet, Xe1, [1]);
+bnet.CPD{Xe2} = tabular_CPD(bnet, Xe2, [1]);
+bnet.CPD{E1} = tabular_CPD(bnet, E1, [0.2 0.8]);
+bnet.CPD{E2} = tabular_CPD(bnet, E2, [0.3 0.7]);
+bnet.CPD{R1} = tabular_CPD(bnet, R1, [1 1 1 0.8 0 0 0 0.2]);
+bnet.CPD{Xr1} = tabular_CPD(bnet, Xr1, [0.15 0.85]);
+
+clear engine;
+engine{1} = belprop_inf_engine(bnet);
+engine{2} = jtree_inf_engine(bnet);
+engine{3} = global_joint_inf_engine(bnet);
+engine{4} = var_elim_inf_engine(bnet);
+
+evidence = cell(1,N);
+evidence{Xe1} = 1;  evidence{Xe2} = 1;  evidence{Xr1} = 1;
+
+mpe = find_mpe(engine{1}, evidence, 'break_ties', 0) % gives wrong results
+mpe = find_mpe(engine{1}, evidence)
+for i=2:4
+  mpe = find_mpe(engine{i}, evidence)
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/nodeorderExample.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+% example to illustrate why nodes must be numbered topologically.
+% Due to Shinya OHTANI <ohtani@pdp.crl.sony.co.jp>
+% 9 June 2004
+
+%%%%%%%%% WRONG RESULTS because 2 -> 1 
+% should have P(parent|no evidence) = prior = [03. 0.7]
+
+node = struct('ChildNode', 1, ...
+               'ParentNode', 2);
+
+adjacency = zeros(2);
+adjacency([node.ParentNode], node.ChildNode) = 1;
+
+value = {{'TRUE'; 'FALSE'}, ...
+          {'TRUE'; 'FALSE'}};
+
+bnet = mk_bnet(adjacency, [2 2]);
+bnet.CPD{node.ChildNode} = tabular_CPD(bnet, node.ChildNode, [0.2 0.4 0.8 0.6]);
+bnet.CPD{node.ParentNode} = tabular_CPD(bnet, node.ParentNode, [0.3 0.7]);
+
+evidence = cell(1,2);
+% evidence{node.ChildNode} = 1;
+% evidence{node.ParentNode} = 1;
+
+engine = jtree_inf_engine(bnet);
+[engine, loglik] = enter_evidence(engine, evidence);
+
+
+marg = marginal_nodes(engine, node.ChildNode);
+disp(sprintf('    ChildNode     : %8.6f   %8.6f',marg.T(1),marg.T(2)) );
+marg = marginal_nodes(engine, node.ParentNode);
+disp(sprintf('    ParentNode    : %8.6f   %8.6f',marg.T(1),marg.T(2)) );
+
+% 
+%     ChildNode   : 0.534483   0.465517
+%     ParentNode  : 0.155172   0.844828
+% loglik = 0.15
+
+
+
+%%%%%%%%% RIGHT RESULTS because 1 -> 2
+
+node = struct('ChildNode', 2, ...
+               'ParentNode', 1);
+
+
+adjacency = zeros(2);
+adjacency([node.ParentNode], node.ChildNode) = 1;
+
+value = {{'TRUE'; 'FALSE'}, ...
+          {'TRUE'; 'FALSE'}};
+
+bnet = mk_bnet(adjacency, [2 2]);
+bnet.CPD{node.ChildNode} = tabular_CPD(bnet, node.ChildNode, [0.2 0.4 0.8 0.6]);
+bnet.CPD{node.ParentNode} = tabular_CPD(bnet, node.ParentNode, [0.3 0.7]);
+
+evidence = cell(1,2);
+% evidence{node.ChildNode} = 1;
+% evidence{node.ParentNode} = 1;
+
+engine = jtree_inf_engine(bnet);
+[engine, loglik] = enter_evidence(engine, evidence);
+
+
+marg = marginal_nodes(engine, node.ChildNode);
+disp(sprintf('    ChildNode     : %8.6f   %8.6f',marg.T(1),marg.T(2)) );
+marg = marginal_nodes(engine, node.ParentNode);
+disp(sprintf('    ParentNode    : %8.6f   %8.6f',marg.T(1),marg.T(2)) );
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/qmr1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,112 @@
+% Make a QMR-like network 
+% This is a bipartite graph, where the top layer contains hidden disease nodes,
+% and the bottom later contains observed finding nodes.
+% The diseases have Bernoulli CPDs, the findings noisy-or CPDs.
+% See quickscore_inf_engine for references.
+
+pMax = 0.01;
+Nfindings = 10;
+Ndiseases = 5;
+%Nfindings = 20;
+%Ndiseases = 10;
+
+N=Nfindings+Ndiseases;
+findings = Ndiseases+1:N;
+diseases = 1:Ndiseases;
+
+G = zeros(Ndiseases, Nfindings);
+for i=1:Nfindings
+  v= rand(1,Ndiseases);
+  rents = find(v<0.8);
+  if (length(rents)==0)
+    rents=ceil(rand(1)*Ndiseases);
+  end
+  G(rents,i)=1;
+end       
+
+prior = pMax*rand(1,Ndiseases);
+leak = 0.5*rand(1,Nfindings); % in real QMR, leak approx exp(-0.02) = 0.98     
+%leak = ones(1,Nfindings); % turns off leaks, which makes inference much harder
+inhibit = rand(Ndiseases, Nfindings);
+inhibit(not(G)) = 1;
+
+
+% first half of findings are +ve, second half -ve
+% The very first and last findings are hidden
+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+
+% Make the bnet in the straightforward way
+tabular_leaves = 0;
+obs_nodes = myunion(pos, neg) + Ndiseases;
+big_bnet = mk_qmr_bnet(G, inhibit, leak, prior, tabular_leaves, obs_nodes);
+big_evidence = cell(1, N);
+big_evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+big_evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+%clf;draw_layout(big_bnet.dag);
+%filename = '../public_html/Bayes/Figures/qmr.rnd.jpg';
+%% 3x3 inches
+%set(gcf,'units','inches');
+%set(gcf,'PaperPosition',[0 0 3 3])  
+%print(gcf,'-djpeg','-r100',filename);
+
+
+% Marginalize out hidden leaves apriori
+positive_leaves_only = 1;
+[bnet, vals] = mk_minimal_qmr_bnet(G, inhibit, leak, prior, pos, neg, positive_leaves_only);
+obs_nodes = bnet.observed;
+evidence = cell(1, Ndiseases + length(obs_nodes));
+evidence(obs_nodes) = num2cell(vals);
+
+
+clear engine;
+engine{1} = quickscore_inf_engine(inhibit, leak, prior);
+engine{2} = jtree_inf_engine(big_bnet);
+engine{3} = jtree_inf_engine(bnet);
+
+%fname = '/home/cs/murphyk/matlab/Misc/loopybel.txt';
+global BNT_HOME
+fname = sprintf('%s/loopybel.txt', BNT_HOME);
+
+
+max_iter = 6;
+engine{4} = pearl_inf_engine(bnet, 'protocol', 'parallel', 'max_iter', max_iter);
+%engine{5} = belprop_inf_engine(bnet, 'max_iter', max_iter, 'filename', fname);
+engine{5} = belprop_inf_engine(bnet, 'max_iter', max_iter);
+
+E = length(engine);
+exact = 1:3;
+loopy = [4 5];
+
+ll = zeros(1,E);
+tic; engine{1} = enter_evidence(engine{1}, pos, neg); toc
+tic; [engine{2}, ll(2)] = enter_evidence(engine{2}, big_evidence); toc
+tic; [engine{3}, ll(3)] = enter_evidence(engine{3}, evidence); toc
+tic; [engine{4}, ll(4), niter(4)] = enter_evidence(engine{4}, evidence); toc
+tic; [engine{5}, niter(5)] = enter_evidence(engine{5}, evidence); toc
+
+ll
+
+post = zeros(E, Ndiseases);
+for e=1:E
+  for i=diseases(:)'
+    m = marginal_nodes(engine{e}, i);
+    post(e, i) = m.T(2);
+  end
+end
+
+for e=exact(:)'
+  for i=diseases(:)'
+    assert(approxeq(post(1, i), post(e, i)));
+  end
+end
+
+a = zeros(Ndiseases, 2);
+for ei=1:length(loopy)
+  for i=diseases(:)'
+    a(i,ei) = approxeq(post(1, i), post(loopy(ei), i));
+  end
+end
+disp('is the loopy posterior correct?');
+disp(a)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/qmr2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,77 @@
+% Test jtree_compiled on a toy QMR network.
+
+rand('state', 0);
+randn('state', 0);
+pMax = 0.01;
+Nfindings = 10;
+Ndiseases = 5;
+
+N=Nfindings+Ndiseases;
+findings = Ndiseases+1:N;
+diseases = 1:Ndiseases;
+
+G = zeros(Ndiseases, Nfindings);
+for i=1:Nfindings
+  v= rand(1,Ndiseases);
+  rents = find(v<0.8);
+  if (length(rents)==0)
+    rents=ceil(rand(1)*Ndiseases);
+  end
+  G(rents,i)=1;
+end       
+
+prior = pMax*rand(1,Ndiseases);
+leak = 0.5*rand(1,Nfindings); % in real QMR, leak approx exp(-0.02) = 0.98     
+%leak = ones(1,Nfindings); % turns off leaks, which makes inference much harder
+inhibit = rand(Ndiseases, Nfindings);
+inhibit(not(G)) = 1;
+
+% first half of findings are +ve, second half -ve
+% The very first and last findings are hidden
+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+
+big = 1;
+
+if big
+  % Make the bnet in the straightforward way
+  tabular_leaves = 1;
+  obs_nodes = myunion(pos, neg) + Ndiseases;
+  bnet = mk_qmr_bnet(G, inhibit, leak, prior, tabular_leaves, obs_nodes);
+  evidence = cell(1, N);
+  evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+  evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+else
+  % Marginalize out hidden leaves apriori
+  positive_leaves_only = 1;
+  [bnet, vals] = mk_minimal_qmr_bnet(G, inhibit, leak, prior, pos, neg, positive_leaves_only);
+  obs_nodes = bnet.observed;
+  evidence = cell(1, Ndiseases + length(obs_nodes));
+  evidence(obs_nodes) = num2cell(vals);
+end
+
+engine = {};
+engine{end+1} = jtree_inf_engine(bnet);
+
+E = length(engine);
+exact = 1:E;
+ll = zeros(1,E);
+for e=1:E
+  tic; [engine{e}, ll(e)] = enter_evidence(engine{e}, evidence); toc
+end
+
+assert(all(approxeq(ll(exact), ll(exact(1)))))
+
+post = zeros(E, Ndiseases);
+for e=1:E
+  for i=diseases(:)'
+    m = marginal_nodes(engine{e}, i);
+    post(e, i) = m.T(2);
+  end
+end
+for e=exact(:)'
+  for i=diseases(:)'
+    assert(approxeq(post(1, i), post(e, i)));
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/sample1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+% Check sampling on a mixture of experts model
+%
+%  X \
+%  | |
+%  Q |
+%  | /
+%  Y
+%
+% where all arcs point down.
+% We condition everything on X, so X is a root node. Q is a softmax, and Y is a linear Gaussian.
+% Q is hidden, X and Y are observed.
+
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1;
+dag(Q,Y) = 1;
+ns = [1 2 2];
+dnodes = [2];
+bnet = mk_bnet(dag, ns, dnodes);
+
+x = 0.5;
+bnet.CPD{1} = root_CPD(bnet, 1, x);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+
+data_case = sample_bnet(bnet, 'evidence', {0.8, [], []})
+ll = log_lik_complete(bnet, data_case)
+
+data_case = sample_bnet(bnet, 'evidence', {-11, [], []})
+ll = log_lik_complete(bnet, data_case)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/softev1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+% Check that adding soft evidence to a hidden node is equivalent to evaluating its leaf CPD.
+
+% Make an HMM
+T = 3; Q = 2; O = 2; cts_obs = 0; param_tying = 0;
+bnet = mk_hmm_bnet(T, Q, O, cts_obs, param_tying);
+N = 2*T;
+onodes = bnet.observed;
+hnodes = mysetdiff(1:N, onodes);
+for i=1:N
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+ev = sample_bnet(bnet);
+evidence = cell(1,N);
+evidence(onodes) = ev(onodes);
+
+engine = jtree_inf_engine(bnet);
+
+[engine, ll] = enter_evidence(engine, evidence);
+query = 1;
+m = marginal_nodes(engine, query);
+
+
+% Make a Markov chain with the same backbone
+bnet2 = mk_markov_chain_bnet(T, Q);
+for i=1:T
+  S = struct(bnet.CPD{hnodes(i)}); % violate object privacy
+  bnet2.CPD{i} = tabular_CPD(bnet2, i, S.CPT);
+end
+
+% Evaluate the observed leaves of the HMM
+soft_ev = cell(1,T);
+for i=1:T
+  S = struct(bnet.CPD{onodes(i)}); % violate object privacy
+  dist = S.CPT(:, evidence{onodes(i)});
+  soft_ev{i} = dist;
+end
+
+% Use the leaf potentials as soft evidence
+engine2 = jtree_inf_engine(bnet2);
+[engine2, ll2] = enter_evidence(engine2, cell(1,T), 'soft', soft_ev);
+m2 = marginal_nodes(engine2, query);
+
+assert(approxeq(m2.T, m.T))
+assert(approxeq(ll2, ll))
+
+
+
+% marginal on node 1 without evidence
+[engine2, ll2] = enter_evidence(engine2, cell(1,T));
+m2 = marginal_nodes(engine2, 1);
+
+% add soft evidence
+soft_ev=cell(1,T);
+soft_ev{1}=[0.7 0.3]; 
+[engine2, ll2] = enter_evidence(engine2, cell(1,T), 'soft', soft_ev);
+m3 = marginal_nodes(engine2, 1);
+
+assert(approxeq(normalise(m2.T .* [0.7 0.3]'), m3.T))
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/softmax1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,109 @@
+% Check that softmax works with a simple classification demo.
+% Based on netlab's demglm2
+% X -> Q where X is an input node, and Q is a softmax
+
+rand('state', 0);
+randn('state', 0);
+  
+% Check inference
+
+input_dim = 2;
+num_classes = 3;
+IRLS_iter = 3;
+
+net = glm(input_dim, num_classes, 'softmax');
+
+dag = zeros(2);
+dag(1,2) = 1;
+discrete_nodes = [2];
+bnet = mk_bnet(dag, [input_dim num_classes], 'discrete', discrete_nodes, 'observed', 1);
+bnet.CPD{1} = root_CPD(bnet, 1);
+clamped = 0;
+bnet.CPD{2} = softmax_CPD(bnet, 2, net.w1, net.b1, clamped, IRLS_iter);
+
+engine = jtree_inf_engine(bnet);
+
+x = rand(1, input_dim);
+q = glmfwd(net, x);
+
+[engine, ll] = enter_evidence(engine, {x, []});
+m = marginal_nodes(engine, 2);
+assert(approxeq(m.T(:), q(:)));
+
+
+% Check learning
+% We use EM, but in fact there is no hidden data.
+% The M step will call IRLS on the softmax node.
+
+% Generate data from three classes in 2d
+input_dim = 2;
+num_classes = 3;
+
+% Fix seeds for reproducible results
+randn('state', 42);
+rand('state', 42);
+
+ndata = 10;
+% Generate mixture of three Gaussians in two dimensional space
+data = randn(ndata, input_dim);
+targets = zeros(ndata, 3);
+
+% Priors for the clusters
+prior(1) = 0.4;
+prior(2) = 0.3;
+prior(3) = 0.3;
+
+% Cluster centres
+c = [2.0, 2.0; 0.0, 0.0; 1, -1];
+
+ndata1 = prior(1)*ndata;
+ndata2 = (prior(1) + prior(2))*ndata;
+% Put first cluster at (2, 2)
+data(1:ndata1, 1) = data(1:ndata1, 1) * 0.5 + c(1,1);
+data(1:ndata1, 2) = data(1:ndata1, 2) * 0.5 + c(1,2);
+targets(1:ndata1, 1) = 1;
+
+% Leave second cluster at (0,0)
+data((ndata1 + 1):ndata2, :) = ...
+  data((ndata1 + 1):ndata2, :);
+targets((ndata1+1):ndata2, 2) = 1;
+
+data((ndata2+1):ndata, 1) = data((ndata2+1):ndata,1) *0.6 + c(3, 1);
+data((ndata2+1):ndata, 2) = data((ndata2+1):ndata,2) *0.6 + c(3, 2);
+targets((ndata2+1):ndata, 3) = 1;
+
+
+if 0
+  ndata = 1;
+  data = x;
+  targets = [1 0 0];
+end
+
+options = foptions;
+options(1) = -1; % verbose
+options(14) = IRLS_iter;
+[net2, options2] = glmtrain(net, options, data, targets);
+net2.ll = options2(8); % type 'help foptions' for details
+
+cases = cell(2, ndata);
+for l=1:ndata
+  q = find(targets(l,:)==1);
+  x = data(l,:);
+  cases{1,l} = x(:);
+  cases{2,l} = q;
+end
+
+max_iter = 2; % we have complete observability, so 1 iter is enough
+[bnet2, ll2] = learn_params_em(engine, cases, max_iter);
+
+w = get_field(bnet2.CPD{2},'weights');
+b = get_field(bnet2.CPD{2},'offset')';
+
+w
+net2.w1
+
+b
+net2.b1
+
+% assert(approxeq(net2.ll, ll2)); % glmtrain returns ll after final M step, learn_params before
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/examples/static/sprinkler1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,112 @@
+% Lawn sprinker example from Russell and Norvig p454
+% For a picture, see http://www.cs.berkeley.edu/~murphyk/Bayes/usage.html#basics
+
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+
+false = 1; true = 2;
+ns = 2*ones(1,N); % binary nodes
+
+%bnet = mk_bnet(dag, ns);
+bnet = mk_bnet(dag, ns, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+names = bnet.names;
+%C = names{'cloudy'};
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+
+
+CPD{C} = reshape([0.5 0.5], 2, 1);
+CPD{R} = reshape([0.8 0.2 0.2 0.8], 2, 2);
+CPD{S} = reshape([0.5 0.9 0.5 0.1], 2, 2);
+CPD{W} = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], 2, 2, 2);
+joint = zeros(2,2,2,2);
+for c=1:2
+  for r=1:2
+    for s=1:2
+      for w=1:2
+	joint(c,s,r,w) = CPD{C}(c) * CPD{S}(c,s) * CPD{R}(c,r) * ...
+	    CPD{W}(s,r,w);
+      end
+    end
+  end
+end
+
+joint2 = repmat(reshape(CPD{C}, [2 1 1 1]), [1 2 2 2]) .* ...
+	 repmat(reshape(CPD{S}, [2 2 1 1]), [1 1 2 2]) .* ...
+	 repmat(reshape(CPD{R}, [2 1 2 1]), [1 2 1 2]) .* ...
+	 repmat(reshape(CPD{W}, [1 2 2 2]), [2 1 1 1]);
+
+assert(approxeq(joint, joint2));
+
+
+engine = jtree_inf_engine(bnet);
+
+evidence = cell(1,N);
+evidence{W} = true;
+
+[engine, ll] = enter_evidence(engine, evidence);
+
+m = marginal_nodes(engine, S);
+p1 = m.T(true) % P(S=true|W=true) = 0.4298
+lik1 = exp(ll); % P(W=true) = 0.6471
+assert(approxeq(p1, 0.4298));
+assert(approxeq(lik1, 0.6471));
+
+pSandW = sumv(joint(:,true,:,true), [C R]); % P(S,W) = sum_cr P(CSRW)
+pW = sumv(joint(:,:,:,true), [C S R]);
+pSgivenW = pSandW / pW; % P(S=t|W=t) = P(S=t,W=t)/P(W=t)
+assert(approxeq(pW, lik1))
+assert(approxeq(pSgivenW, p1))
+
+
+m = marginal_nodes(engine, R);
+p2 = m.T(true)  % P(R=true|W=true) =  0.7079     
+
+pRandW = sumv(joint(:,:,true,true), [C S]); % P(R,W) = sum_cr P(CSRW)
+pRgivenW = pRandW / pW; % P(R=t|W=t) = P(R=t,W=t)/P(W=t)
+assert(approxeq(pRgivenW, p2))
+
+
+% Add extra evidence that R=true
+evidence{R} = true;
+
+[engine, ll] = enter_evidence(engine, evidence);
+
+m = marginal_nodes(engine, S);
+p3 = m.T(true) % P(S=true|W=true,R=true) = 0.1945 
+assert(approxeq(p3, 0.1945))
+
+
+pSandRandW = sumv(joint(:,true,true,true), [C]); % P(S,R,W) = sum_c P(cSRW)
+pRandW = sumv(joint(:,:,true,true), [C S]); % P(R,W) = sum_cs P(cSRW)
+pSgivenWR = pSandRandW / pRandW; % P(S=t|W=t,R=t) = P(S=t,R=t,W=t)/P(W=t,R=t)
+assert(approxeq(pSgivenWR, p3))
+
+% So the sprinkler is less likely to be on if we know that
+% it is raining, since the rain can "explain away" the fact
+% that the grass is wet.
+
+lik3 = exp(ll); % P(W=true, R=true) = 0.4581
+% So the combined evidence is less likely (of course)
+
+
+
+
+% Joint distributions
+
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+
+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+/add_ev_to_dmarginal.m/1.1.1.1/Thu Jun 27 20:34:32 2002//
+/add_evidence_to_gmarginal.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/bnet_to_fgraph.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/compute_fwd_interface.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/compute_interface_nodes.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/compute_joint_pot.m/1.1.1.1/Mon Jun  7 15:50:34 2004//
+/compute_minimal_interface.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/convert_dbn_CPDs_to_pots.m/1.1.1.1/Fri Nov 22 22:35:00 2002//
+/convert_dbn_CPDs_to_tables.m/1.1.1.1/Thu Jan 23 18:44:50 2003//
+/convert_dbn_CPDs_to_tables1.m/1.1.1.1/Thu Jan 23 18:49:48 2003//
+/convert_dbn_CPDs_to_tables_slow.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/dbn_to_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/dbn_to_hmm.m/1.1.1.1/Sun Feb  2 00:23:38 2003//
+/determine_elim_constraints.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/dispcpt.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/do_intervention.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/dsep.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/dsep_test.m/1.1.1.1/Sat Jan 18 23:10:16 2003//
+/enumerate_scenarios.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/fgraph_to_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/hodbn_to_bnet.m/1.1.1.1/Wed Jul 24 14:48:06 2002//
+/is_mnet.m/1.1.1.1/Sun Jun 16 20:01:22 2002//
+/linear_gaussian_to_cpot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/log_lik_complete.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/log_marg_lik_complete.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_bnet.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_dbn.m/1.1.1.1/Sat Feb  1 19:42:14 2003//
+/mk_fgraph.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_fgraph_given_ev.m/1.1.1.1/Mon Jun 24 18:56:26 2002//
+/mk_higher_order_dbn.m/1.1.1.1/Tue Jul 23 13:17:04 2002//
+/mk_limid.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_mnet.m/1.1.1.1/Sun Jun 16 19:52:12 2002//
+/mk_mrf2.m/1.1.1.1/Tue Dec 31 22:06:48 2002//
+/mk_mutilated_samples.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_named_CPT.m/1.1.1.1/Tue Mar 30 17:18:54 2004//
+/mk_slice_and_half_dbn.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/noisyORtoTable.m/1.1.1.1/Mon Aug  2 22:05:58 2004//
+/partition_dbn_nodes.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/partition_matrix_vec_3.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/sample_bnet.m/1.1.1.1/Thu Jun 10 01:17:46 2004//
+/sample_bnet_nocell.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/sample_dbn.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/score_bnet_complete.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/shrink_obs_dims_in_gaussian.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/shrink_obs_dims_in_table.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/solve_limid.m/1.1.1.1/Mon Jun  7 15:48:02 2004//
+/unroll_dbn_topology.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/unroll_higher_order_topology.m/1.1.1.1/Fri May 31 10:25:58 2002//
+/unroll_set.m/1.1.1.1/Mon Dec 16 17:57:14 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/general
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+/bnet_to_gdl_graph.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/calc_mpe.m/1.1.1.1/Mon Jun 17 21:58:38 2002//
+/calc_mpe_bucket.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/calc_mpe_dbn.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/calc_mpe_given_inf_engine.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/calc_mpe_global.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/compute_interface_nodes.m/1.1.1.1/Wed May 29 15:59:54 2002//
+/mk_gdl_graph.m/1.1.1.1/Wed May 29 15:59:54 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/general/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/Old/bnet_to_gdl_graph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function gdl = bnet_to_gdl_graph(bnet)
+% BNET_TO_GDL_GRAPH Convert a Bayesian network to a GDL graph
+% gdl = bnet_to_gdl_graph(bnet)
+%
+% Each node in the BN gets converted to a single node in the GDL graph,
+% representing its family; its kernel function is the corresponding CPD.
+
+N = length(bnet.dag);
+doms = cell(1,N);
+for i=1:N
+  doms{i} = family(bnet.dag, i);
+end
+
+U = mk_undirected(bnet.dag);
+gdl = mk_gdl_graph(U, doms, bnet.node_sizes, bnet.CPD, 'equiv_class', bnet.equiv_class, ...
+		   'discrete', bnet.dnodes, 'chance', bnet.chance_nodes, ...
+		   'decision', bnet.decision_nodes, 'utility', bnet.utility_nodes);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/Old/calc_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+function [mpe, ll] = calc_mpe(engine, evidence, break_ties)
+% CALC_MPE Computes the most probable explanation of the evidence
+% [mpe, ll] = calc_mpe_given_inf_engine(engine, evidence, break_ties)
+%
+% INPUT
+% engine must support max-propagation
+% evidence{i} is the observed value of node i, or [] if hidden
+% break_ties is optional. If 1, we will force ties to be broken consistently
+%  by calling enter_evidence N times.
+%
+% OUTPUT
+% mpe{i} is the most likely value of node i (cell array!)
+% ll is the log-likelihood of the globally best assignment
+%
+% This currently only works when all hidden nodes are discrete
+
+if nargin < 3, break_ties = 0; end
+
+
+[engine, ll] = enter_evidence(engine, evidence, 'maximize', 1);
+
+observed = ~isemptycell(evidence);
+
+if 0 % fgraphs don't support bnet_from_engine
+onodes = find(observed);
+bnet = bnet_from_engine(engine);
+pot_type = determine_pot_type(bnet, onodes);
+assert(pot_type == 'd');
+end
+
+scalar = 1;
+evidence = evidence(:); % hack to handle unrolled DBNs
+N = length(evidence);
+mpe = cell(1,N);
+for i=1:N
+  m = marginal_nodes(engine, i);
+  % observed nodes are all set to 1 inside the inference engine, so we must undo this
+  if observed(i)
+    mpe{i} = evidence{i};
+  else
+    mpe{i} = argmax(m.T);
+    % Bug fix by Ron Zohar, 8/15/01
+    % If there are ties, we must break them as follows (see Jensen96, p106)
+    if break_ties
+      evidence{i} = mpe{i};                             
+      [engine, ll] = enter_evidence(engine, evidence, 'maximize', 1);  
+    end
+  end
+  if length(mpe{i}) > 1, scalar = 0; end
+end
+
+if nargout >= 2
+  bnet = bnet_from_engine(engine);
+  ll = log_lik_complete(bnet, mpe(:));
+end
+if 0 % scalar
+  mpe = cell2num(mpe);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/Old/calc_mpe_bucket.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,160 @@
+function [mpe, ll] = calc_mpe_bucket(bnet, new_evidence, max_over)
+%
+% PURPOSE:
+%       CALC_MPE Computes the most probable explanation to the network nodes
+%       given the evidence.
+%       
+%       [mpe, ll] = calc_mpe(engine, new_evidence, max_over)
+%
+% INPUT:
+%       bnet  - the bayesian network
+%       new_evidence - optional, if specified - evidence to be incorporated [cell(1,n)]
+%       max_over - optional, if specified determines the variable elimination order [1:n]
+%
+% OUTPUT:
+%       mpe - the MPE assignmet for the net variables (or [] if no satisfying assignment)
+%       ll - log assignment probability.
+%
+% Notes:
+% 1. Adapted from '@var_elim_inf_engine\marginal_nodes' for MPE by Ron Zohar, 8/7/01
+% 2. Only discrete potentials are supported at this time.
+% 3. Complexity: O(nw*) where n is the number of nodes and w* is the induced tree width.
+% 4. Implementation based on:
+%  - R. Dechter, "Bucket Elimination: A Unifying Framework for Probabilistic Inference", 
+%                 UA1 96, pp. 211-219.
+
+
+ns = bnet.node_sizes;
+n = length(bnet.dag);
+evidence = cell(1,n);
+if (nargin<2)
+    new_evidence = evidence;
+end
+
+onodes = find(~isemptycell(new_evidence));  % observed nodes
+hnodes = find(isemptycell(new_evidence));  % hidden nodes
+pot_type = determine_pot_type(bnet, onodes);
+
+if pot_type ~= 'd'
+  error('only disrete potentials supported at this time')    
+end
+
+for i=1:n
+  fam = family(bnet.dag, i);
+  CPT{i} = convert_to_pot(bnet.CPD{bnet.equiv_class(i)}, pot_type, fam(:), evidence);        
+end 
+
+% handle observed nodes: set impossible cases' probability to zero
+% rather than prun matrix (this makes backtracking easier)
+
+for ii=onodes
+  lIdx = 1:ns(ii);
+  lIdx = setdiff(lIdx, new_evidence{ii});
+  
+  sCPT=struct(CPT{ii});  % violate object privacy
+  
+  sargs = '';
+  for jj=1:(length(sCPT.domain)-1)
+    sargs = [sargs, ':,']; 
+  end        
+  for jj=lIdx
+    eval(['sCPT.T(', sargs, num2str(jj), ')=0;']);
+  end
+  CPT{ii}=dpot(sCPT.domain, sCPT.sizes, sCPT.T);        
+end
+
+B = cell(1,n); 
+for b=1:n
+  B{b} = mk_initial_pot(pot_type, [], [], [], []);
+end
+
+if (nargin<3)
+  max_over = (1:n);
+end   
+order = max_over; % no attempt to optimize this
+
+
+% Initialize the buckets with the CPDs assigned to them
+for i=1:n
+  b = bucket_num(domain_pot(CPT{i}), order);
+  B{b} = multiply_pots(B{b}, CPT{i});
+end
+
+% Do backward phase
+max_over = max_over(length(max_over):-1:1); % reverse
+for i=max_over(1:end-1)        
+  % max-ing over variable i which occurs in bucket j
+  j = bucket_num(i, order);
+  rest = mysetdiff(domain_pot(B{j}), i);
+  %temp = marginalize_pot_max(B{j}, rest);
+  temp = marginalize_pot(B{j}, rest, 1);
+  b = bucket_num(domain_pot(temp), order);
+  %        fprintf('maxing over bucket %d (var %d), putting result into bucket %d\n', j, i, b);
+  sB=struct(B{b});  % violate object privacy
+  if ~isempty(sB.domain)
+    B{b} = multiply_pots(B{b}, temp);
+  else
+    B{b} = temp;
+  end
+end
+result = B{1};
+marginal = pot_to_marginal(result);
+[prob, mpe] = max(marginal.T);
+
+% handle impossible cases
+if ~(prob>0)
+  mpe = [];    
+  ll = -inf;
+  %warning('evidence has zero probability')
+  return
+end
+
+ll = log(prob);
+
+% Do forward phase    
+for ii=2:n
+  marginal = pot_to_marginal(B{ii});
+  mpeidx = [];
+  for jj=order(1:length(mpe))
+    assert(ismember(jj, marginal.domain)) %%% bug
+    temp = find_equiv_posns(jj, marginal.domain);
+    mpeidx = [mpeidx, temp] ;
+    if isempty(temp)
+      mpeidx = [mpeidx, Inf] ;
+    end
+  end
+  [mpeidxsorted sortedtompe] = sort(mpeidx) ;
+  
+  % maximize the matrix obtained from assigning values from previous buckets.
+  % this is done by building a string and using eval.
+  
+  kk=1;
+  sargs = '(';
+  for jj=1:length(marginal.domain)
+    if (jj~=1)
+      sargs = [sargs, ','];
+    end
+    if (mpeidxsorted(kk)==jj)
+      sargs = [sargs, num2str(mpe(sortedtompe(kk)))];
+      if (kk<length(mpe))
+	kk = kk+1 ;
+      end
+    else
+      sargs = [sargs, ':'];
+    end
+  end
+  sargs = [sargs, ')'] ;   
+  eval(['[val, loc] = max(marginal.T', sargs, ');'])        
+  mpe = [mpe loc];
+end     
+[I,J] = sort(order);
+mpe = mpe(J);
+
+
+
+%%%%%%%%%
+
+function b = bucket_num(domain, order)
+
+b = max(find_equiv_posns(domain, order));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/Old/calc_mpe_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function [mpe, ll] = calc_mpe_dbn(engine, evidence, break_ties)
+% CALC_MPE Computes the most probable explanation of the evidence
+% [mpe, ll] = calc_mpe_dbn(engine, evidence, break_ties)
+%
+% INPUT
+% engine must support max-propagation
+% evidence{i,t} is the observed value of node i in slice t, or [] if hidden
+%
+% OUTPUT
+% mpe{i,t} is the most likely value of node i (cell array!)
+% ll is the log-likelihood of the globally best assignment
+%
+% This currently only works when all hidden nodes are discrete
+
+if nargin < 3, break_ties = 0; end
+
+if break_ties
+  disp('warning: break ties is ignored')
+end
+
+[engine, ll] = enter_evidence(engine, evidence, 'maximize', 1);
+
+observed = ~isemptycell(evidence);
+[ss T] = size(evidence);
+scalar = 1;
+N = length(evidence);
+mpe = cell(ss,T);
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+for t=1:T
+  for i=1:ss
+    m = marginal_nodes(engine, i, t);
+    % observed nodes are all set to 1 inside the inference engine, so we must undo this
+    if observed(i,t)
+      mpe{i,t} = evidence{i,t};
+    else
+      assert(length(m.T) == ns(i));
+      mpe{i,t} = argmax(m.T);
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/Old/calc_mpe_given_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function [mpe, prob] = calc_mpe_given_inf_engine(engine, evidence)
+% CALC_MPE_GIVEN_ENGINE Computes the most probable explanation of the evidence
+% [mpe, prob] = calc_mpe_given_inf_engine(engine, evidence)
+%
+% INPUT
+% engine must support max-propagation
+% evidence{i} is the obsevred value of node i, or [] if hidden
+%
+% OUTPUT
+% mpe(i) is the most likely value of node i
+% prob is the likelihood of the globally best assignment
+%
+% This currently only works when all nodes are discrete
+
+[engine, ll] = enter_evidence(engine, evidence);
+
+observed = ~isemptycell(evidence);
+N = length(evidence);
+mpe = zeros(1,N);
+for i=1:N
+  m = marginal_nodes(engine, i);
+  % discrete observed nodes are all set to 1 inside the inference engine, so we must undo this
+  if observed(i)
+    mpe(i) = evidence{i};
+  else
+    mpe(i) = argmax(m.T);
+  end
+end
+
+bnet = bnet_from_engine(engine);
+ll = log_lik_complete(bnet, num2cell(mpe(:)));
+prob = exp(ll);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/Old/calc_mpe_global.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function [mpe, ll] = calc_mpe_global(bnet, evidence)
+% CALC_MPE_GLOBAL Compute the most probable explanation(s) from the global joint
+% [mpe, ll] = calc_mpe_global(bnet, evidence)
+%
+% mpe(k,i) is the most probable value of node i in the k'th global mode 
+% ll is the log likelihood
+%
+% We assume all nodes are discrete
+
+engine = global_joint_inf_engine(bnet);
+engine = enter_evidence(engine, evidence);
+S1 = struct(engine); % violate object privacy
+S2 = struct(S1.jpot); % joint potential
+prob = max(S2.T(:));
+modes = find(S2.T(:) == prob);
+
+ens = bnet.node_sizes;
+onodes = find(~isemptycell(evidence));
+ens(onodes) = 1;
+mpe = ind2subv(ens, modes);
+for k=1:length(modes)
+  for i=onodes(:)'
+    mpe(k,i) = evidence{i};
+  end
+end
+ll = log(prob);
+
+mpe = num2cell(mpe);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/Old/compute_interface_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function [int, persist, transient] = compute_interface_nodes(intra, inter)
+% COMPUTE_INTERFACE_NODES Find the nodes in a DBN that represent a sufficient statistic
+% [int, persist, transient] = compute_interface_nodes(intra, inter)
+%
+% The interface nodes are all those that has an incoming temporal arc,
+% or which have a child which has an incoming temporal arc,
+% where a temporal arc means one coming from the previous slice.
+% (The parents of nodes with incoming temporal arcs are needed
+% because moralization will bring them into the clique.)
+%
+% The persisent nodes are all those that have one or more incoming temporal arc.
+% The transient nodes are all the non-persistent.
+%
+% See U. Kjaerulff, "dHugin: A computational system for dynamic
+% time-sliced Bayesian networks", Intl. J. Forecasting (11) 89-111, 1995
+
+n = length(intra);
+int = [];
+persist = [];
+for u=1:n
+  if any(inter(:,u))
+    int = [int u];
+    persist = [persist u];
+  end
+  if any(inter(:, children(intra, u)))
+    int = [int u];
+  end
+end
+int = unique(int);
+persist = unique(persist);
+transient = mysetdiff(1:n, persist);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/Old/mk_gdl_graph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+function gdl = mk_gdl_graph(G, domains, node_sizes, kernels, varargin)
+% MK_GDL_GRAPH Make a GDL (generalized distributed law) graph
+% gdl = mk_gdl_graph(G, domains, node_sizes, kernels, ...)
+%
+% A GDL graph is like a moralized, but untriangulated, Bayes net:
+% each "node" represents a domain with a corresponding kernel function.
+% For details, see "The Generalized Distributive Law", Aji and McEliece,
+% IEEE Trans. Info. Theory, 46(2): 325--343, 2000
+% 
+% G(i,j) = 1 if there is an (undirected) edge between domains i,j
+%
+% domains{i} is the domain of node i
+%
+% node_sizes(i) is the number of values node i can take on,
+%   or the length of node i if i is a continuous-valued vector.
+% node_sizes(i) = 1 if i is a utility node.
+%
+% kernels is the list of kernel functions
+%
+% The list below gives optional arguments [default value in brackets].
+% 
+% equiv_class - equiv_class(i)=j  means factor node i gets its params from factors{j} [1:F]
+% discrete - the list of nodes which are discrete random variables [1:N]
+% chance   - the list of nodes which are random variables [1:N]
+% decision - the list of nodes which are decision nodes [ [] ]
+% utility  - the list of nodes which are utility nodes [ [] ]
+
+
+ns = node_sizes;
+N = length(domains);
+vars = [];
+for i=1:N
+  vars = myunion(vars, domains{i});
+end
+Nvars  = length(vars);
+
+gdl.equiv_class = 1:length(kernels);
+gdl.chance_nodes = 1:Nvars;
+gdl.utility_nodes = [];
+gdl.decision_nodes = [];
+gdl.dnodes = 1:Nvars;
+
+if nargin >= 5
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'equiv_class', bnet.equiv_class = args{i+1}; 
+     case 'chance',      bnet.chance_nodes = args{i+1}; 
+     case 'utility',     bnet.utility_nodes = args{i+1}; 
+     case 'decision',    bnet.decision_nodes = args{i+1}; 
+     case 'discrete',    bnet.dnodes = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+
+gdl.G = G;
+gdl.vars = vars;
+gdl.doms = domains;
+gdl.node_sizes = node_sizes;
+gdl.cnodes = mysetdiff(vars, gdl.dnodes);
+gdl.kernels = kernels;
+gdl.type = 'gdl';
+
+% Compute a bit vector representation of the set of domains
+% dom_bitv(i,j) = 1 iff variable j occurs in domain i
+gdl.dom_bitv = zeros(N, length(vars));
+for i=1:N
+  gdl.dom_bitv(i, domains{i}) = 1;
+end
+
+% compute the interesection of the domains on either side of each edge (separating set)
+gdl.sepset = cell(N, N);
+gdl.nbrs = cell(1,N);
+for i=1:N
+  nbrs = neighbors(G, i);
+  gdl.nbrs{i} = nbrs;
+  for j = nbrs(:)'
+    gdl.sepset{i,j} = myintersect(domains{i}, domains{j});
+  end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/add_ev_to_dmarginal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function fmarginal = add_ev_to_dmarginal(fmarginal, evidence, ns)
+% ADD_EV_TO_DMARGINAL 'pump up' observed nodes back to their original size.
+% fmarginal = add_ev_to_dmarginal(fmarginal, evidence, ns)
+%
+% We introduce 0s into the array in positions which are incompatible with the evidence.
+
+dom = fmarginal.domain;
+odom = dom(~isemptycell(evidence(dom)));
+vals = cat(1, evidence{odom});
+index = mk_multi_index(length(dom), find_equiv_posns(odom, dom), vals);
+T = 0*myones(ns(dom));
+ens = ns(:)';
+ens(odom) = 1;
+T(index{:}) = myreshape(fmarginal.T, ens(dom));
+fmarginal.T = T;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/add_evidence_to_gmarginal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,78 @@
+function fullm = add_evidence_to_gmarginal(fmarginal, evidence, ns, cnodes)
+% ADD_EVIDENCE_TO_GMARGINAL 'pump up' observed nodes back to their original size.
+% function fullm = add_evidence_to_gmarginal(fmarginal, evidence, ns, cnodes)
+%
+% We introduce 0s into the array in positions which are incompatible with the evidence.
+% for both discrete and continuous nodes.
+%
+% See also add_ev_to_dmarginal
+
+dom = fmarginal.domain;
+fullm.domain = fmarginal.domain;
+
+% Find out which values of the discrete parents (if any) are compatible with 
+% the discrete evidence (if any).
+dnodes = mysetdiff(1:length(ns), cnodes);
+ddom = myintersect(dom, dnodes);
+cdom = myintersect(dom, cnodes);
+odom = dom(~isemptycell(evidence(dom)));
+hdom = dom(isemptycell(evidence(dom)));
+
+% Find the entries in the big table that are compatible with the discrete evidence.
+% (We will put the probabilities from the small inferred table into these positions.)
+% We could use add_ev_to_dmarginal to do this.
+dobs = myintersect(ddom, odom);
+dvals = cat(1, evidence{dobs});
+ens = ns; % effective node sizes
+ens(dobs) = 1;
+S = prod(ens(ddom));
+subs = ind2subv(ens(ddom), 1:S);
+mask = find_equiv_posns(dobs, ddom);
+%subs(mask) = dvals; % bug fix by P. Brutti
+for i=1:length(mask),
+  subs(:,mask(i)) = dvals(i);
+end       
+supportedQs = subv2ind(ns(ddom), subs);
+
+if isempty(ddom)
+  Qarity = 1;
+else
+  Qarity = prod(ns(ddom));
+end
+fullm.T = zeros(Qarity, 1);
+fullm.T(supportedQs) = fmarginal.T(:);
+fullm.T = myreshape(fullm.T, ns(ddom));
+
+
+if isempty(cdom)
+  fullm.mu = [];
+  fullm.sigma = [];
+  return;
+end
+
+% Now put the hidden cts parts into their right blocks,
+% leaving the observed cts parts as 0.
+cobs = myintersect(cdom, odom);
+chid = myintersect(cdom, hdom);
+cvals = cat(1, evidence{cobs});
+n = sum(ns(cdom));
+fullm.mu = zeros(n,Qarity);
+fullm.Sigma = zeros(n,n,Qarity);
+
+if ~isempty(chid)
+  chid_blocks = block(find_equiv_posns(chid, cdom), ns(cdom));
+end
+if ~isempty(cobs)
+  cobs_blocks = block(find_equiv_posns(cobs, cdom), ns(cdom));
+end
+
+for i=1:length(supportedQs)
+  Q = supportedQs(i);
+  if ~isempty(chid)
+    fullm.mu(chid_blocks, Q) = fmarginal.mu(:, i);
+    fullm.Sigma(chid_blocks, chid_blocks, Q) = fmarginal.Sigma(:,:,i);
+  end
+  if ~isempty(cobs)
+    fullm.mu(cobs_blocks, Q) = cvals(:);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/bnet_to_fgraph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function fg = bnet_to_fgraph(bnet)
+% BNET_TO_FGRAPH Convert a Bayes net to a factor graph
+% fg = bnet_to_fgraph(bnet)
+%
+% We create one factor per family, whose kernel is the CPD
+
+nnodes = length(bnet.dag);
+G = zeros(nnodes, nnodes);
+for i=1:nnodes
+  G(family(bnet.dag, i), i) = 1;
+end
+
+fg = mk_fgraph(G, bnet.node_sizes, bnet.CPD, 'equiv_class', bnet.equiv_class, 'discrete', bnet.dnodes);
+
+	       
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/compute_fwd_interface.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function int = compute_fwd_interface(intra, inter)
+% COMPUTE_FWD_INTERFACE Compute nodes with children in the next slice
+% function int = compute_fwd_interface(intra, inter)
+
+int = [];
+ss = length(intra);
+for u=1:ss
+  if any(inter(u,:))
+    int = [int u];
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/compute_interface_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+function [interface, persist, transient] = compute_interface_nodes(intra, inter)
+% COMPUTE_INTERFACE_NODES Find the nodes in a DBN that represent a sufficient statistic
+% [interface, persist, transient] = compute_interface_nodes(intra, inter)
+%
+% The interface nodes are all those that has an incoming temporal arc,
+% or which are parents of such nodes.
+% If the parents are in the previous slice, this just means they have an
+% outgoing temporal arc.
+% (The parents of nodes with incoming temporal arcs are needed
+% because moralization will bring them into the clique.)
+%
+% The persisent nodes are all those that have one or more incoming temporal arc.
+% The transient nodes are all the non-persistent.
+%
+% See U. Kjaerulff, "dHugin: A computational system for dynamic
+% time-sliced Bayesian networks", Intl. J. Forecasting (11) 89-111, 1995
+
+n = length(intra);
+interface = [];
+persist = [];
+% any nodes with incoming arcs
+for u=1:n
+  if any(inter(:,u))
+    interface = [interface u];
+    persist = [persist u];
+  end
+end
+% Any nodes which are parents of nodes with incoming arcs
+for u=1:n
+  cs = children(intra, u);
+  if any(inter(:, cs))
+    interface = [interface u];
+  end
+  %cs = children(inter, u);
+  % if ~isempty(myintersect(cs, persist))
+  %  interface = [interface u];
+  %end
+end
+interface = unique(interface);
+persist = unique(persist);
+transient = mysetdiff(1:n, persist);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/compute_joint_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function [jpot, loglik] = compute_joint_pot(bnet, nodes, evidence, domain)
+% COMPUTE_JOINT_POT Compute the global joint potential of a Bayes net
+% function jpot = compute_joint_pot(bnet, nodes, evidence, domain)
+
+if nargin < 4, domain = nodes; end
+
+onodes = find(~isemptycell(evidence));
+pot_type = determine_pot_type(bnet, onodes, domain);
+
+jpot = mk_initial_pot(pot_type, domain, bnet.node_sizes, bnet.cnodes, onodes);
+for i=nodes(:)'
+  e = bnet.equiv_class(i);
+  fam = family(bnet.dag, i);
+  pot = convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence);
+  jpot = multiply_by_pot(jpot, pot);
+end                                                  
+%[jpot, loglik] = normalize_pot(jpot); % causes errors in asia_dt1 etc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/compute_minimal_interface.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function clqs = compute_minimal_interface(intra, inter)
+
+int = compute_fwd_interface(intra, inter);
+ss  = length(intra);
+Z = zeros(ss);
+dag = [intra inter;
+       Z     intra];
+G = moralize(dag);
+intra2 = G(1:ss,1:ss);
+inter2 = G(1:ss,(1:ss)+ss);
+G = unroll_dbn_topology(intra2, inter2, ss);
+T = ss;
+last_slice = (1:ss) + (T-1)*ss;
+G = (G + G')/2; % mk symmetric
+G2 = (expm(full(G)) > 0); % closure of graph
+G3 = G2(last_slice, last_slice);
+[c,v] = scc(G3); % connected components
+ncomp = size(v,1);
+clqs = cell(1,ncomp);
+for i=1:ncomp
+  ndx = find(v(i,:)>0);
+  clqs{i} = v(i,ndx);
+  clqs{i} = myintersect(clqs{i}, int);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/convert_dbn_CPDs_to_pots.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function CPDpot = convert_dbn_CPDs_to_pots(bnet, evidence, pot_type, softCPDpot)
+% CONVERT_DBN_CPDS_TO_POTS Convert CPDs of (possibly instantiated) DBN nodes to potentials
+% CPDpot = convert_dbn_CPDs_to_pots(bnet, evidence, pot_type, softCPDpot)
+%
+% CPDpot{n,t} is a potential containing P(n,t|pa(n,t), ev)
+% softCPDpot{n,t} is a potential containing P(n,t|pa(n,t), ev) insted of using n's CPD
+
+[ss T] = size(evidence);
+
+if nargin < 4, softCPDpot = cell(ss,T); end
+CPDpot = softCPDpot;
+
+% Convert CPDs of instantiated nodes to potential form
+t = 1;
+for n=1:ss
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n, 1);
+  if isempty(softCPDpot{n,t})
+    CPDpot{n,t} = convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence(:,1));
+  end
+end
+for n=1:ss
+  fam = family(bnet.dag, n, 2);
+  e = bnet.equiv_class(n, 2);
+  for t=2:T
+    if isempty(softCPDpot{n,t})
+      CPDpot{n,t} = convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence(:,t-1:t));
+    end
+  end       
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/convert_dbn_CPDs_to_tables.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,201 @@
+function CPDpot = convert_dbn_CPDs_to_tables(bnet, evidence)
+% CONVERT_DBN_CPDS_TO_TABLES Convert CPDs of (possibly instantiated) DBN nodes to tables
+% CPDpot = convert_dbn_CPDs_to_tables(bnet, evidence)
+%
+% CPDpot{n,t} is a table containing P(n,t|pa(n,t), ev)
+% All hidden nodes are assumed to be discrete.
+% We assume the observed nodes are the same in every slice.
+%
+% Evaluating the conditional likelihood of long evidence sequences can be very slow,
+% so we take pains to vectorize where possible.
+
+[ss T] = size(evidence);
+%obs_bitv = ~isemptycell(evidence(:));
+obs_bitv = zeros(1, 2*ss);
+obs_bitv(bnet.observed) = 1;
+obs_bitv(bnet.observed+ss) = 1;
+
+ns = bnet.node_sizes(:);
+CPDpot = cell(ss,T); 
+
+for n=1:ss
+  % slice 1
+  t = 1;
+  ps = parents(bnet.dag, n);
+  e = bnet.equiv_class(n, 1);
+  if ~any(obs_bitv(ps))
+    CPDpot{n,t} = convert_CPD_to_table_hidden_ps(bnet.CPD{e}, evidence{n,t});
+  else
+    CPDpot{n,t} = convert_to_table(bnet.CPD{e}, [ps n], evidence(:,1));
+  end
+
+% special cases: c=child, p=parents, d=discrete, h=hidden, 1sl=1slice
+% if c=h=1 then c=d=1, since hidden nodes must be discrete
+% c=h c=d p=h p=d 1sl method
+% ---------------------------
+% 1   1   1   1   -   replicate CPT
+% -   1   -   1   -   evaluate CPT on evidence *
+% 0   1   1   1   1   dhmm
+% 0   0   1   1   1   ghmm
+% other               loop
+%
+% * = any subset of the domain may be observed
+
+% Example where all of the special cases occur - a hierarchical HMM
+% where the top layer (G) and leaves (Y) are observed and
+% all nodes are discrete except Y.
+% (O turns on if Y is an outlier)
+
+% G ---------> G 
+% |            |
+% v            v
+% S  --------> S
+% |            |
+% v            v
+% Y            Y
+% ^            ^
+% |            |
+% O            O
+
+% Evaluating P(yt|St,Ot) is the ghmm case
+% Evaluating P(St|S(t-1),gt) is the eval CPT case
+% Evaluating P(gt|g(t-1) is the eval CPT case (hdom = [])
+% Evaluating P(Ot) is the replicated CPT case
+
+% Cts parents (e.g., inputs) would require an additional special case for speed
+
+
+  % slices 2..T
+  [ss T] = size(evidence);
+  self = n+ss;
+  ps = parents(bnet.dag, self);
+  e = bnet.equiv_class(n, 2);
+
+  if 1
+  debug = 0;
+  hidden_child = ~obs_bitv(n);
+  discrete_child = myismember(n, bnet.dnodes);
+  hidden_ps = all(~obs_bitv(ps));
+  discrete_ps = mysubset(ps, bnet.dnodes);
+  parents_in_same_slice = all(ps > ss);
+  
+  if hidden_child & discrete_child & hidden_ps & discrete_ps
+    CPDpot = helper_repl(bnet, evidence, n, CPDpot, obs_bitv, debug);
+  elseif discrete_child & discrete_ps
+    CPDpot = helper_eval(bnet, evidence, n, CPDpot, obs_bitv, debug);
+  elseif discrete_child & hidden_ps & discrete_ps & parents_in_same_slice
+    CPDpot = helper_dhmm(bnet, evidence, n, CPDpot, obs_bitv, debug);
+  elseif ~discrete_child & hidden_ps & discrete_ps & parents_in_same_slice
+    CPDpot = helper_ghmm(bnet, evidence, n, CPDpot, obs_bitv, debug);
+  else
+    if debug, fprintf('node %d, slow\n', n); end
+    for t=2:T
+      CPDpot{n,t} = convert_to_table(bnet.CPD{e}, [ps self], evidence(:,t-1:t));
+    end
+  end
+  end
+  
+  if 0
+  for t=2:T
+    CPDpot2{n,t} = convert_to_table(bnet.CPD{e}, [ps self], evidence(:,t-1:t));
+    if ~approxeq(CPDpot{n,t}, CPDpot2{n,t})
+      fprintf('CPDpot n=%d, t=%d\n',n,t);
+      keyboard
+    end
+  end
+  end
+
+  
+end
+
+
+
+
+%%%%%%%
+function CPDpot = helper_repl(bnet, evidence, n, CPDpot, obs_bitv, debug)
+
+[ss T] = size(evidence);
+if debug, fprintf('node %d, repl\n', n); end
+e = bnet.equiv_class(n, 2);
+CPT = convert_CPD_to_table_hidden_ps(bnet.CPD{e}, []);
+CPDpot(n,2:T) = num2cell(repmat(CPT, [1 1 T-1]), [1 2]);
+
+
+
+%%%%%%%
+function CPDpot = helper_eval(bnet, evidence, n, CPDpot, obs_bitv, debug)
+
+[ss T] = size(evidence);
+self = n+ss;
+ps = parents(bnet.dag, self);
+e = bnet.equiv_class(n, 2);
+ns = bnet.node_sizes(:);
+% Example: given CPT(p1, p2, p3, p4, c), where p1,p3 are observed
+% we create CPT([p2 p4 c], [p1 p3]).
+% We then convert all observed p1,p3 into indices ndx
+% and return CPT(:, ndx)
+CPT = CPD_to_CPT(bnet.CPD{e});
+domain = [ps self];
+% if dom is [3 7 8] and 3,8 are observed, odom_rel = [1 3], hdom_rel = 2,
+% odom = [3 8], hdom = 7
+odom_rel = find(obs_bitv(domain));
+hdom_rel = find(~obs_bitv(domain));
+odom = domain(odom_rel);
+hdom = domain(hdom_rel);
+if isempty(hdom)
+  CPT = CPT(:);
+else
+  CPT = permute(CPT, [hdom_rel odom_rel]);
+  CPT = reshape(CPT, prod(ns(hdom)), prod(ns(odom)));
+end
+parents_in_same_slice = all(ps > ss);
+if parents_in_same_slice
+  if debug, fprintf('node %d eval 1 slice\n', n); end
+  data = cell2num(evidence(odom-ss,2:T)); %data(i,t) = val of i'th obs parent at t+1
+else
+  if debug, fprintf('node %d eval 2 slice\n', n); end
+  % there's probably a way of vectorizing this...
+  data = zeros(length(odom), T-1);
+  for t=2:T
+    ev = evidence(:,t-1:t);
+    ev = ev(:);
+    ev2 = ev(odom);
+    data(:,t-1) = cat(1, ev2{:});
+    %data(:,t-1) = cell2num(ev2);
+  end
+end
+ndx = subv2ind(ns(odom), data'); % ndx(t) encodes data(:,t)
+if isempty(hdom)
+  CPDpot(n,2:T) = num2cell(CPT(ndx)); % a cell array of floats
+else
+  CPDpot(n,2:T) = num2cell(CPT(:, ndx), 1); % a cell array of column vectors
+end
+
+%%%%%%%
+function CPDpot = helper_dhmm(bnet, evidence, n, CPDpot, obs_bitv, debug)
+
+if debug, fprintf('node %d, dhmm\n', n); end
+[ss T] = size(evidence);
+self = n+ss;
+ps = parents(bnet.dag, self);
+e = bnet.equiv_class(n, 2);
+ns = bnet.node_sizes(:);
+CPT = CPD_to_CPT(bnet.CPD{e});
+CPT = reshape(CPT, [prod(ns(ps)) ns(self)]); % what if no parents?
+%obslik = mk_dhmm_obs_lik(cell2num(evidence(n,2:T)), CPT);
+obslik = eval_pdf_cond_multinomial(cell2num(evidence(n,2:T)), CPT);
+CPDpot(n,2:T) = num2cell(obslik, 1);
+
+
+%%%%%%%
+function CPDpot = helper_ghmm(bnet, evidence, n, CPDpot, obs_bitv, debug)
+
+if debug, fprintf('node %d, ghmm\n', n); end
+[ss T] = size(evidence);
+e = bnet.equiv_class(n, 2);
+S = struct(bnet.CPD{e}); 
+ev2 = cell2num(evidence(n,2:T));
+%obslik = mk_ghmm_obs_lik(ev2, S.mean, S.cov);
+obslik = eval_pdf_cond_gauss(ev2, S.mean, S.cov);
+CPDpot(n,2:T) = num2cell(obslik, 1);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/convert_dbn_CPDs_to_tables1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,162 @@
+function CPDpot = convert_dbn_CPDs_to_tables1(bnet, evidence)
+% CONVERT_DBN_CPDS_TO_TABLES Convert CPDs of (possibly instantiated) DBN nodes to tables
+% CPDpot = convert_dbn_CPDs_to_tables(bnet, evidence)
+%
+% CPDpot{n,t} is a table containing P(n,t|pa(n,t), ev)
+% All hidden nodes are assumed to be discrete
+% We assume the observed nodes are the same in every slice
+%
+% Evaluating the conditional likelihood of the evidence can be very slow,
+% so we take pains to vectorize where possible, i.e., we try to avoid
+% calling convert_to_table
+
+[ss T] = size(evidence);
+%obs_bitv = ~isemptycell(evidence(:));
+obs_bitv = zeros(1, 2*ss);
+obs_bitv(bnet.observed) = 1;
+obs_bitv(bnet.observed+ss) = 1;
+
+ns = bnet.node_sizes(:);
+CPDpot = cell(ss,T); 
+
+for n=1:ss
+  % slice 1
+  t = 1;
+  ps = parents(bnet.dag, n);
+  e = bnet.equiv_class(n, 1);
+  if ~any(obs_bitv(ps))
+    CPDpot{n,t} = convert_CPD_to_table_hidden_ps(bnet.CPD{e}, evidence{n,t});
+  else
+    CPDpot{n,t} = convert_to_table(bnet.CPD{e}, [ps n], evidence(:,1));
+  end
+  
+  % slices 2..T
+  debug = 1;
+  if ~obs_bitv(n)
+    CPDpot = helper_hidden_child(bnet, evidence, n, CPDpot, obs_bitv, debug);
+  else
+    CPDpot = helper_obs_child(bnet, evidence, n, CPDpot, obs_bitv, debug);
+  end
+end
+
+if 0
+CPDpot2 = convert_dbn_CPDs_to_tables_slow(bnet, evidence);
+for t=1:T
+  for n=1:ss
+    if ~approxeq(CPDpot{n,t}, CPDpot2{n,t})
+      fprintf('CPDpot n=%d, t=%d\n',n,t);
+      keyboard
+    end
+  end
+end
+end
+
+
+% special cases: c=child, p=parents, d=discrete, h=hidden, 1=1slice
+% if c=h=1 then c=d=1, since hidden nodes must be discrete
+% c=h c=d p=h p=d p=1 method
+% ---------------------------
+% 1   1   1   1   -   replicate CPT
+% 0   1   1   1   1   dhmm
+% 0   0   1   1   1   ghmm
+% -   1   -   1   -   evaluate CPT on evidence
+% other               loop
+
+%%%%%%%
+function CPDpot = helper_hidden_child(bnet, evidence, n, CPDpot, obs_bitv, debug)
+
+[ss T] = size(evidence);
+self = n+ss;
+ps = parents(bnet.dag, self);
+e = bnet.equiv_class(n, 2);
+ns = bnet.node_sizes(:);
+if ~any(obs_bitv(ps)) % all parents are hidden (hence discrete)
+  if debug, fprintf('node %d is hidden, all ps are hidden\n', n); end
+  if myismember(n, bnet.dnodes) 
+    %CPT = CPD_to_CPT(bnet.CPD{e});
+    %CPT = reshape(CPT, [prod(ns(ps)) ns(self)]);
+    CPT = convert_CPD_to_table_hidden_ps(bnet.CPD{e}, []);
+    CPDpot(n,2:T) = num2cell(repmat(CPT, [1 1 T-1]), [1 2]);
+  else
+    error(['hidden cts node disallowed'])
+  end
+else % some parents are observed - slow
+  if mysubset(ps, bnet.dnodes) % all parents are discrete
+    % given CPT(p1, p2, p3, p4, c), where p1,p3 are observed
+    % we create CPT([p2 p4 c], [p1 p3]).
+    % We then convert all observed p1,p3 into indices ndx
+    % and return CPT(:, ndx)
+    CPT = CPD_to_CPT(bnet.CPD{e});
+    domain = [ps self];
+    % if dom is [3 7 8] and 3,8 are observed, odom_rel = [1 3], hdom_rel = 2,
+    % odom = [3 8], hdom = 7
+    odom_rel = find(obs_bitv(domain));
+    hdom_rel = find(~obs_bitv(domain));
+    odom = domain(odom_rel);
+    hdom = domain(hdom_rel);
+    CPT = permute(CPT, [hdom_rel odom_rel]);
+    CPT = reshape(CPT, prod(ns(hdom)), prod(ns(odom)));
+    parents_in_same_slice = all(ps > ss);
+    if parents_in_same_slice
+      if debug, fprintf('node %d is hidden, some ps are obs, all ps discrete, 1 slice\n', n); end
+      data = cell2num(evidence(odom-ss,2:T)); %data(i,t) = val of i'th obs parent at t+1
+    else
+      if debug, fprintf('node %d is hidden, some ps are obs, all ps discrete, 2 slice\n', n); end
+      data = zeros(length(odom), T-1);
+      for t=2:T
+	ev = evidence(:,t-1:t);
+	data(:,t-1) = cell2num(ev(odom));
+      end
+    end
+    ndx = subv2ind(ns(odom), data'); % ndx(t) encodes data(:,t)
+    CPDpot(n,2:T) = num2cell(CPT(:, ndx), [1 2]);
+  else % some parents are cts - v slow
+    if debug, fprintf('node %d is hidden, some ps are obs, some ps cts\n', n); end
+    for t=2:T
+      CPDpot{n,t} = convert_to_table(bnet.CPD{e}, [ps self], evidence(:,t-1:t));
+    end
+  end
+end
+  
+%%%%%%%
+function CPDpot = helper_obs_child(bnet, evidence, n, CPDpot, obs_bitv, debug)
+
+[ss T] = size(evidence);
+self = n+ss;
+ps = parents(bnet.dag, self);
+e = bnet.equiv_class(n, 2);
+ns = bnet.node_sizes(:);
+if ~any(obs_bitv(ps)) % all parents are hidden
+  parents_in_same_slice = all(ps > ss);
+  if parents_in_same_slice
+    if debug, fprintf('node %d is obs, all ps are hidden, 1 slice\n', n); end
+    ps1 = ps - ss;
+    if myismember(n, bnet.dnodes) 
+      CPT = CPD_to_CPT(bnet.CPD{e});
+      CPT = reshape(CPT, [prod(ns(ps)) ns(self)]); % what if no parents?
+      obslik = eval_pdf_cond_multinomial(cell2num(evidence(n,2:T)), CPT);
+      CPDpot(n,2:T) = num2cell(obslik, 1);
+    else
+      S = struct(bnet.CPD{e}); 
+      obslik = eval_pdf_cond_gauss(cell2num(evidence(n,2:T)), S.mean, S.cov);
+      CPDpot(n,2:T) = num2cell(obslik, 1);
+    end
+  else % parents span 2 slices - slow
+    if debug, fprintf('node %d is obs, all ps are hidden , 2 slice\n', n); end
+    for t=2:T
+      CPDpot{n,t} = convert_to_table(bnet.CPD{e}, [ps self], evidence(:,t-1:t));
+    end
+  end
+else 
+  if isempty(ps) % observed root
+    if debug, fprintf('node %d is obs, no ps\n', n); end
+    CPT = CPD_to_CPT(bnet.CPD{e});
+    data = cell2num(evidence(n,2:T));
+    CPDpot(n,2:T) = CPT(data);
+  else  % some parents are observed  - slow
+    if debug, fprintf('node %d is obs, some ps are obs\n', n); end
+    for t=2:T
+      CPDpot{n,t} = convert_to_table(bnet.CPD{e}, [ps self], evidence(:,t-1:t));
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/convert_dbn_CPDs_to_tables_slow.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function CPDpot = convert_dbn_CPDs_to_tables_slow(bnet, evidence)
+% CONVERT_DBN_CPDS_TO_TABLES_SLOW Convert CPDs of (possibly instantiated) DBN nodes to tables
+% CPDpot = convert_dbn_CPDs_to_tables_slow(bnet, evidence)
+%
+% CPDpot{n,t} is a table containing P(n,t|pa(n,t), ev)
+% All hidden nodes are assumed to be discrete
+%
+% Non-vectorized method; this is less efficient for long sequences of observed Gaussian
+% nodes, because of the (unnecessary) repeated matrix inversion.
+
+obs_bitv = ~isemptycell(evidence(:));
+[ss T] = size(evidence);
+ns = bnet.node_sizes(:);
+
+CPDpot = cell(ss,T); 
+
+t = 1;
+for n=1:ss
+  %ps = engine.bnet_parents{n};
+  ps = parents(bnet.dag, n);
+  e = bnet.equiv_class(n, 1);
+  if ~any(obs_bitv(ps))
+    CPDpot{n,t} = convert_CPD_to_table_hidden_ps(bnet.CPD{e}, evidence{n,t});
+  else
+    CPDpot{n,t} = convert_to_table(bnet.CPD{e}, [ps n], evidence(:,1));
+  end
+end
+for t=2:T
+  for n=1:ss
+    self = n+ss;
+    ps = parents(bnet.dag, self);
+    e = bnet.equiv_class(n, 2);
+    if ~any(obs_bitv(ps))
+      CPDpot{n,t} = convert_CPD_to_table_hidden_ps(bnet.CPD{e}, evidence{n,t});
+    else
+      CPDpot{n,t} = convert_to_table(bnet.CPD{e}, [ps self], evidence(:,t-1:t));
+    end
+  end
+end       
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/dbn_to_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function bnet = dbn_to_bnet(dbn, T)
+% DBN_TO_BNET Convert a DBN to a static network by unroll for T slices
+% bnet = dbn_to_bnet(dbn, T)
+
+ss = length(dbn.intra);
+eclass = [dbn.equiv_class(:,1) repmat(dbn.equiv_class(:,2), 1, T-1)];
+dnodes = unroll_set(dbn.dnodes_slice, ss, T);
+ns = repmat(dbn.node_sizes_slice(:), 1, T);
+dag = unroll_dbn_topology(dbn.intra, dbn.inter, T, dbn.intra1);
+onodes = unroll_set(dbn.observed(:), ss, T);
+bnet = mk_bnet(dag, ns(:), 'discrete', dnodes(:), 'equiv_class', eclass(:), 'observed', onodes(:));
+bnet.CPD = dbn.CPD;
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/dbn_to_hmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+function [startprob, transprob, obsprob] = dbn_to_hmm(bnet)
+% DBN_TO_HMM % Convert DBN params to HMM params
+% [startprob, transprob, obsprob] = dbn_to_hmm(bnet, onodes)
+% startprob(i)
+% transprob(i,j)
+% obsprob{k}.big_CPT(i,o) if k'th observed node is discrete
+% obsprob{k}.big_mu(:,i), .big_Sigma(:,:,i) if k'th observed node is Gaussian
+% Big means the domain contains all the hidden discrete nodes, not just the parents.
+
+% Called by constructor and by update_engine
+
+ss = length(bnet.intra);
+onodes = bnet.observed;
+hnodes = mysetdiff(1:ss, onodes);
+evidence = cell(ss, 2);
+ns = bnet.node_sizes(:);
+Qh = prod(ns(hnodes));
+tmp = dpot_to_table(compute_joint_pot(bnet, hnodes, evidence));
+startprob = reshape(tmp, Qh, 1);
+
+tmp = dpot_to_table(compute_joint_pot(bnet, hnodes+ss, evidence, [hnodes hnodes+ss]));
+transprob = mk_stochastic(reshape(tmp, Qh, Qh));
+
+% P(o|ps) is used by mk_hmm_obs_lik_vec for a single time slice
+% P(o|h) (the big version), where h = all hidden nodes, is used by enter_evidence
+
+obsprob = cell(1, length(onodes));
+for i=1:length(onodes)
+  o = onodes(i);
+  if bnet.auto_regressive(o)
+    % We assume the parents of this node are all the hidden nodes in the slice,
+    % so the params already are "big". Also, we assume we regress only on our old selves.
+    % slice 1
+    e = bnet.equiv_class(o);
+    CPD = struct(bnet.CPD{e});
+    O = ns(o);
+    ps = bnet.parents{o};
+    Qps = prod(ns(ps));
+    obsprob{i}.big_mu0 = reshape(CPD.mean, [O Qps]);
+    obsprob{i}.big_Sigma0 = reshape(CPD.cov, [O O Qps]);
+
+    % slice t>1
+    e = bnet.equiv_class(o+ss);
+    CPD = struct(bnet.CPD{e});
+    O = ns(o);
+    dps = mysetdiff(bnet.parents{o+ss}, o);
+    Qdps = prod(ns(dps));
+    obsprob{i}.big_mu = reshape(CPD.mean, [O Qdps]);
+    obsprob{i}.big_Sigma = reshape(CPD.cov, [O O Qdps]);
+    obsprob{i}.big_W = reshape(CPD.weights, [O O Qdps]);
+  else
+    e = bnet.equiv_class(o+ss);
+    CPD = struct(bnet.CPD{e});
+    O = ns(o);
+    ps = bnet.parents{o};
+    Qps = prod(ns(ps));
+    % We make a big potential, replicating the params if necessary
+    % e.g., for a 2 chain coupled HMM, mu(:,Q1) becomes mu(:,Q1,Q2)
+    bigpot = pot_to_marginal(compute_joint_pot(bnet, onodes(i), evidence, [hnodes onodes(i)]));
+
+    if myismember(o, bnet.dnodes)
+      obsprob{i}.CPT = reshape(CPD.CPT, [Qps O]);
+      obsprob{i}.big_CPT = reshape(bigpot.T, Qh, O); 
+    else
+      obsprob{i}.big_mu = bigpot.mu;
+      obsprob{i}.big_Sigma = bigpot.Sigma;
+      
+      if 1
+      obsprob{i}.mu = reshape(CPD.mean, [O Qps]);
+      C = reshape(CPD.cov, [O O Qps]);
+      obsprob{i}.Sigma = C;
+      d = size(obsprob{i}.mu, 1);
+      for j=1:Qps
+	obsprob{i}.inv_Sigma(:,:,j) = inv(C(:,:,j));
+	obsprob{i}.denom(j) = (2*pi)^(d/2)*sqrt(abs(det(C(:,:,j))));
+      end
+      end
+      
+    end % if discrete
+  end % if ar
+end % for
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/determine_elim_constraints.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function partial_order = determine_elim_constraints(bnet, onodes)
+% DETERMINE_ELIM_CONSTRAINTS Determine what the constraints are (if any) on the elimination ordering.
+% partial_order = determine_elim_constraints(bnet, onodes)
+%
+% A graph with different kinds of nodes (e.g., discrete and cts, or decision and rnd) is called marked. 
+% A strong root is guaranteed to exist if the marked graph is triangulated and does not have any paths of
+% the form discrete -> cts -> discrete. In general we need to add extra edges to
+% the moral graph to ensure this (see example in Lauritzen (1992) fig 3b).
+% However, a simpler sufficient condition is to eliminate all the cts nodes before the discrete ones,
+% because then, as we move from the leaves to the root, the cts nodes get marginalized away
+% and we are left with purely discrete cliques.
+%
+% partial_order(i,j)=1 if we must marginalize j *before* i
+% (so i will be nearer the strong root).
+% If the hidden nodes are either all discrete or all cts, we set partial_order = [].
+%
+% For details, see
+% - Jensen, Jensen and Dittmer, "From influence diagrams to junction trees", UAI 94.
+% - Lauritzen, "Propgation of probabilities, means, and variances in mixed graphical
+%   association models", JASA 87(420):1098--1108, 1992.
+% - K. Olesen, "Causal probabilistic networks with both discrete and continuous variables",
+%      IEEE Pami 15(3), 1993
+
+
+n = length(bnet.dag);
+pot_type = determine_pot_type(bnet, onodes);
+if (pot_type == 'd') | (pot_type == 'g')
+  partial_order = [];
+  return;
+end
+
+
+partial_order = sparse(n,n);
+partial_order(bnet.dnodes, bnet.cnodes) = 1;
+
+% Integrate out cts nodes before their discrete parents - see Olesen (1993) p9
+% This method gives the wrong results on cg1.m!
+if 0
+for i=bnet.cnodes(:)'
+  dps = myintersect(parents(bnet.dag, i), bnet.dnodes);
+  partial_order(dps, i)=1;
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/dispcpt.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function display_CPT(CPT)
+
+n = ndims(CPT);
+parents_size = size(CPT);
+parents_size = parents_size(1:end-1);
+child_size = size(CPT,n);
+c = 1;
+for i=1:prod(parents_size)
+  parent_inst = ind2subv(parents_size, i);
+  fprintf(1, '%d ', parent_inst);
+  fprintf(1, ': ');
+  index = num2cell([parent_inst 1]);
+  index{n} = ':';
+  fprintf(1, '%6.4f ', CPT(index{:}));
+  fprintf(1, '\n');
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/do_intervention.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function bnet = mutilate_bnet(bnet, nodes, vals)
+% MUTILATE_BNET Clamp nodes to specific values (perform a surgical intervention)
+% bnet = mutilate_bnet(bnet, nodes, vals)
+%
+% We make all the clamped nodes roots.
+
+ns = bnet.node_sizes;
+for i=1:length(nodes)
+  X = nodes(i);
+  x = vals(i);
+  bnet.dag(:,X) = 0;
+  bnet.CPD{X} = root_CPD(bnet, X, x);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/dsep.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function sep = dsep(X, Y, S, G)
+% DSEP Is X indep Y given S wrt DAG G?
+% sep = dsep(X, Y, S, G)
+%
+% Instead of using the Bayes-Ball criterion, we see if S separates X and Y
+% in the moralized ancestral graph.
+
+conn = reachability_graph(G);
+M = myunion(myunion(X, Y), S);
+[A,junk] = find(conn(:, M));
+A = unique(A);
+A = myunion(A, M);
+GM = moralize(G(A,A));
+%sep = graph_separated(GM, X, Y, S);
+sep = graph_separated(GM, find_equiv_posns(X,A), find_equiv_posns(Y,A), find_equiv_posns(S,A));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/dsep_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+
+% Cowell et al p72
+G = zeros(10);
+G(1,2)=1;
+G(2,3)=1;
+G(3,7)=1;
+G(4,[5 8])=1;
+G(5,6)=1;
+G(6,7)=1;
+G(7,[9 10])=1;
+G(8,9)=1;
+
+dsep(1, 4, [5 7], G)
+dsep(1, 4, [7], G)
+dsep(1, 4, [10 5], G)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/enumerate_scenarios.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function [scenarios, log_probs] = enumerate_scenarios(bnet, evidence)
+% ENUMERATE_SCENARIOS Enumerate all assignments, and return the prob. of the non-zeros ones
+% function [scenarios, log_probs] = enumerate_scenarios(bnet, evidence)
+
+assert(isempty(bnet.cnodes));
+n = length(bnet.dag);
+observed = ~isemptycell(evidence);
+vals = cat(1,evidence{observed});
+vals = vals(:)';
+ns = bnet.node_sizes;
+
+log_probs = [];
+scenarios = [];
+for i=1:prod(ns)
+  inst = ind2subv(ns, i); % i'th instantiation
+  if isempty(vals) | inst(observed) == vals % agrees with evidence
+    ll = log_lik_complete(bnet, num2cell(inst(:)));
+    log_probs = [log_probs ll];
+    scenarios = [scenarios(:)' inst];
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/fgraph_to_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function bnet = fgraph_to_bnet(fg)
+% FGRAPH_TO_BNET Convert a factor graph to a Bayes net
+% bnet = fgraph_to_bnet(fg)
+%
+% We assume all factors are tabular_CPD.
+% We create 1 dummy observed node for every factor.
+
+N = fg.nvars + fg.nfactors;
+vnodes = 1:fg.nvars;
+fnodes = fg.nvars+1:N;
+dag = zeros(N);
+for x=1:fg.nvars
+  dag(x, fnodes(fg.dep{x})) = 1;
+end
+ns = [fg.node_sizes ones(1, fg.nfactors)];
+discrete = [fg.dnodes fnodes];
+bnet = mk_bnet(dag, ns, 'discrete', discrete);
+for x=1:fg.nvars
+  bnet.CPD{x} = tabular_CPD(bnet, x, 'CPT', 'unif');
+end
+ev = cell(1, fg.nvars); % no evidence
+for i=1:fg.nfactors
+  f = fnodes(i);
+  e = fg.equiv_class(i);
+  pot = convert_to_pot(fg.factors{e}, 'd', fg.dom{i}, ev);
+  m = pot_to_marginal(pot);
+  bnet.CPD{f} = tabular_CPD(bnet, f, 'CPT', m.T);
+end
+  
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/hodbn_to_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function bnet = hodbn_to_bnet(dbn, T)
+% DBN_TO_BNET Convert a DBN to a static network by unroll for T slices
+% bnet = dbn_to_bnet(dbn, T)
+ss = length(dbn.intra);
+[row,order] = size(dbn.equiv_class);
+eclass = [];
+for i = 1:min(order,T)
+     eclass = [eclass ; dbn.equiv_class(:,i)];
+end
+if T > order
+    eclass = [eclass ; repmat(dbn.equiv_class(:,order),T-order,1)]; 
+end
+
+dnodes = unroll_set(dbn.dnodes_slice, ss, T);
+ns = repmat(dbn.node_sizes_slice(:), 1, T);
+dag = unroll_higher_order_topology(dbn.intra, dbn.inter, T, dbn.intra1);
+onodes = unroll_set(dbn.observed(:), ss, T);
+bnet = mk_bnet(dag, ns(:), 'discrete', dnodes(:), 'equiv_class', eclass(:), 'observed', onodes(:));
+bnet.CPD = dbn.CPD;
+ 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/is_mnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function m = is_mnet(model)
+
+m = isfield(model, 'markov_net');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/linear_gaussian_to_cpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function pot = linear_gaussian_to_cpot(mu, Sigma, W, domain, ns, cnodes, evidence)
+% LINEAR_GAUSSIAN_TO_CPOT Convert a linear Gaussian CPD  to a canonical potential.
+% pot = linear_gaussian_to_cpot(mu, Sigma, W, domain, ns, cnodes, evidence)
+%
+% We include any cts evidence, but ignore any discrete evidence.
+% (Use gaussian_CPD_params_given_dps to use discrete evidence to select mu, Sigma, W.)
+
+odom = domain(~isemptycell(evidence(domain)));
+hdom = domain(isemptycell(evidence(domain)));
+cobs = myintersect(cnodes, odom);
+chid = myintersect(cnodes, hdom);
+cvals = cat(1, evidence{cobs});
+
+%[g,h,K] = gaussian_to_canonical(mu, Sigma, W);
+Sinv = inv(Sigma);
+g = -0.5*mu'*Sinv*mu + log(normal_coef(Sigma));
+if isempty(W) | (size(W,2)==0)  % no cts parents
+  h = Sinv*mu;
+  K = Sinv;
+else
+  h = [-W'*Sinv*mu; Sinv*mu];
+  K = [W'*Sinv*W  -W'*Sinv';
+       -Sinv*W     Sinv]; 
+end
+
+if ~isempty(cvals)
+  %[g, h, K] = enter_evidence_canonical(g, h, K, chid, cobs, cvals(:), ns);  
+  [hx, hy, KXX, KXY, KYX, KYY] = partition_matrix_vec(h, K, chid, cobs, ns);
+  y = cvals(:);
+  g = g + hy'*y - 0.5*y'*KYY*y;
+  if length(hx)==0 % isempty(X) % i.e., we have instantiated everything away
+    h = [];
+    K = [];
+  else
+    h = hx - KXY*y;
+    K = KXX;
+  end
+end
+
+ns(odom) = 0;
+pot = cpot(domain, ns(domain), g, h, K);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/log_lik_complete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function L = log_lik_complete(bnet, cases, clamped)
+% LOG_LIK_COMPLETE Compute sum_m sum_i log P(x(i,m)| x(pi_i,m), theta_i) for a completely observed data set
+% L = log_lik_complete(bnet, cases, clamped)
+%
+% If there is a missing data, you must use an inference engine.
+% cases(i,m) is the value assigned to node i in case m.
+% (If there are vector-valued nodes, cases should be a cell array.)
+% clamped(i,m) = 1 if node i was set by intervention in case m (default: clamped = zeros)
+% Clamped nodes contribute a factor of 1.0 to the likelihood.
+
+if iscell(cases), usecell = 1; else usecell = 0; end
+
+n = length(bnet.dag);
+ncases = size(cases, 2);
+if n ~= size(cases, 1)
+  error('data should be of size nnodes * ncases');
+end
+
+if nargin < 3, clamped = zeros(n,ncases); end
+
+L = 0;
+for i=1:n
+  ps = parents(bnet.dag, i);
+  e = bnet.equiv_class(i);
+  u = find(clamped(i,:)==0);
+  ll = log_prob_node(bnet.CPD{e}, cases(i,u), cases(ps,u));
+  if approxeq(exp(ll), 0),  fprintf('node %d has very low likelihood\n'); end
+  L = L + ll;
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/log_marg_lik_complete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function L = log_marg_lik_complete(bnet, cases, clamped)
+% LOG_MARG_LIK_COMPLETE Compute sum_m sum_i log P(x(i,m)| x(pi_i,m)) for a completely observed data set
+% L = log_marg_lik_complete(bnet, cases, clamped)
+%
+% This differs from log_lik_complete because we integrate out the parameters.   
+% If there is a missing data, you must use an inference engine.
+% cases(i,m) is the value assigned to node i in case m.
+% (If there are vector-valued nodes, cases should be a cell array.)
+% clamped(i,m) = 1 if node i was set by intervention in case m (default: clamped = zeros)
+% Clamped nodes contribute a factor of 1.0 to the likelihood.
+%
+% If there is a single case, clamped is a list of the clamped nodes, not a bit vector.
+
+if iscell(cases), usecell = 1; else usecell = 0; end
+
+n = length(bnet.dag);
+ncases = size(cases, 2);
+if n ~= size(cases, 1)
+  error('data should be of size nnodes * ncases');
+end
+
+if ncases == 1
+  if nargin < 3, clamped = []; end
+  clamp_set = clamped;
+  clamped = zeros(n,1);
+  clamped(clamp_set) = 1;
+else
+  if nargin < 3, clamped = zeros(n,ncases); end
+end
+
+L = 0;
+for i=1:n
+  ps = parents(bnet.dag, i);
+  e = bnet.equiv_class(i);
+  u = find(clamped(i,:)==0);
+  L = L + log_marg_prob_node(bnet.CPD{e}, cases(i,u), cases(ps,u));
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/mk_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,93 @@
+function bnet = mk_bnet(dag, node_sizes, varargin)
+% MK_BNET Make a Bayesian network.
+%
+% BNET = MK_BNET(DAG, NODE_SIZES, ...) makes a graphical model with an arc from i to j iff DAG(i,j) = 1.
+% Thus DAG is the adjacency matrix for a directed acyclic graph.
+% The nodes are assumed to be in topological order. Use TOPOLOGICAL_SORT if necessary.
+%
+% node_sizes(i) is the number of values node i can take on,
+%   or the length of node i if i is a continuous-valued vector.
+% node_sizes(i) = 1 if i is a utility node.
+% 
+% Below are the names of optional arguments [and their default value in brackets].
+% Pass as 'PropertyName1', PropertyValue1, 'PropertyName2', PropertyValue2, ...
+% 
+% discrete - the list of nodes which are discrete random variables [1:N]
+% equiv_class - equiv_class(i)=j  means node i gets its params from CPD{j} [1:N]
+% observed - the list of nodes which will definitely be observed in every case [ [] ]
+% 'names' - a cell array of strings to be associated with nodes 1:n [{}]
+%    This creates an associative array, so you write e.g.
+%     'evidence(bnet.names{'bar'}) = 42' instead of  'evidence(2} = 42' 
+%     assuming names = { 'foo', 'bar', ...}.
+%
+% e.g., bnet = mk_bnet(dag, ns, 'discrete', [1 3])
+%
+% For backwards compatibility with BNT2, you can also specify the parameters in the following order
+%   bnet = mk_bnet(dag, node_sizes, discrete_nodes, equiv_class)
+
+n = length(dag);
+
+% default values for parameters
+bnet.equiv_class = 1:n;
+bnet.dnodes = 1:n; % discrete 
+bnet.observed = [];
+bnet.names = {};
+
+if nargin >= 3
+  args = varargin;
+  nargs = length(args);
+  if ~isstr(args{1})
+    if nargs >= 1, bnet.dnodes = args{1}; end
+    if nargs >= 2, bnet.equiv_class = args{2}; end
+  else    
+    for i=1:2:nargs
+      switch args{i},
+       case 'equiv_class', bnet.equiv_class = args{i+1}; 
+       case 'discrete',    bnet.dnodes = args{i+1}; 
+       case 'observed',    bnet.observed = args{i+1}; 
+       case 'names',  bnet.names = assocarray(args{i+1}, num2cell(1:n)); 
+       otherwise,  
+	error(['invalid argument name ' args{i}]);       
+      end
+    end
+  end
+end
+
+bnet.observed = sort(bnet.observed); % for comparing sets
+bnet.hidden = mysetdiff(1:n, bnet.observed(:)');
+bnet.hidden_bitv = zeros(1,n);
+bnet.hidden_bitv(bnet.hidden) = 1;
+bnet.dag = dag;
+bnet.node_sizes = node_sizes(:)';
+
+bnet.cnodes = mysetdiff(1:n, bnet.dnodes);
+% too many functions refer to cnodes to rename it to cts_nodes - 
+% We hope it won't be confused with chance nodes!
+
+bnet.parents = cell(1,n);
+for i=1:n
+  bnet.parents{i} = parents(dag, i);
+end
+
+E = max(bnet.equiv_class);
+mem = cell(1,E);
+for i=1:n
+  e = bnet.equiv_class(i);
+  mem{e} = [mem{e} i];
+end
+bnet.members_of_equiv_class = mem;
+
+bnet.CPD = cell(1, E);
+
+bnet.rep_of_eclass = zeros(1,E);
+for e=1:E
+  mems = bnet.members_of_equiv_class{e};
+  bnet.rep_of_eclass(e) = mems(1);
+end
+
+directed = 1;
+if ~acyclic(dag,directed)
+  error('graph must be acyclic')
+end
+
+bnet.order = topological_sort(bnet.dag);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/mk_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,133 @@
+function bnet = mk_dbn(intra, inter, node_sizes, varargin)
+% MK_DBN Make a Dynamic Bayesian Network.
+%
+% BNET = MK_DBN(INTRA, INTER, NODE_SIZES, ...) makes a DBN with arcs
+% from i in slice t to j in slice t iff intra(i,j) = 1, and 
+% from i in slice t to j in slice t+1 iff inter(i,j) = 1,
+% for i,j in {1, 2, ..., n}, where n = num. nodes per slice, and t >= 1.
+% node_sizes(i) is the number of values node i can take on.
+% The nodes are assumed to be in topological order. Use TOPOLOGICAL_SORT if necessary.
+% See also mk_bnet.
+%
+% Optional arguments [default in brackets]
+% 'discrete' - list of discrete nodes [1:n]
+% 'observed' - the list of nodes which will definitely be observed in every slice of every case [ [] ]
+% 'eclass1' - equiv class for slice 1 [1:n]
+% 'eclass2' - equiv class for slice 2 [tie nodes with equivalent parents to slice 1]
+%    equiv_class1(i) = j means node i in slice 1 gets its parameters from bnet.CPD{j},
+%    i.e., nodes i and j have tied parameters.
+% 'intra1' - topology of first slice, if different from others
+% 'names' - a cell array of strings to be associated with nodes 1:n [{}]
+%    This creates an associative array, so you write e.g.
+%     'evidence(bnet.names{'bar'}) = 42' instead of  'evidence(2} = 42' 
+%     assuming names = { 'foo', 'bar', ...}.
+%    
+% For backwards compatibility with BNT2, arguments can also be specified as follows
+%   bnet = mk_dbn(intra, inter, node_sizes, dnodes, eclass1, eclass2, intra1)
+%
+% After calling this function, you must specify the parameters (conditional probability
+% distributions) using bnet.CPD{i} = gaussian_CPD(...) or tabular_CPD(...) etc.
+
+
+n = length(intra);
+ss = n;
+bnet.nnodes_per_slice = ss;
+bnet.intra = intra;
+bnet.inter = inter;
+bnet.intra1 = intra;
+dag = zeros(2*n);
+dag(1:n,1:n) = bnet.intra1;
+dag(1:n,(1:n)+n) = bnet.inter;
+dag((1:n)+n,(1:n)+n) = bnet.intra;
+bnet.dag = dag;
+bnet.names = {};
+
+directed = 1;
+if ~acyclic(dag,directed)
+  error('graph must be acyclic')
+end
+
+
+bnet.eclass1 = 1:n;
+%bnet.eclass2 = (1:n)+n;
+bnet.eclass2 = bnet.eclass1;
+for i=1:ss
+  if isequal(parents(dag, i+ss), parents(dag, i)+ss)
+    %fprintf('%d has isomorphic parents, eclass %d\n', i, bnet.eclass2(i))
+  else
+    bnet.eclass2(i) = max(bnet.eclass2) + 1;
+    %fprintf('%d has non isomorphic parents, eclass %d\n', i, bnet.eclass2(i))
+  end
+end
+
+dnodes = 1:n;
+bnet.observed = [];
+
+if nargin >= 4
+  args = varargin;
+  nargs = length(args);
+  if ~isstr(args{1})
+    if nargs >= 1, dnodes = args{1}; end
+    if nargs >= 2, bnet.eclass1 = args{2}; end
+    if nargs >= 3, bnet.eclass2 = args{3}; end
+    if nargs >= 4, bnet.intra1 = args{4}; end
+  else
+    for i=1:2:nargs
+      switch args{i},
+       case 'discrete', dnodes = args{i+1}; 
+       case 'observed', bnet.observed = args{i+1}; 
+       case 'eclass1',  bnet.eclass1 = args{i+1}; 
+       case 'eclass2',  bnet.eclass2 = args{i+1}; 
+       case 'intra1',  bnet.intra1 = args{i+1}; 
+       %case 'ar_hmm',  bnet.ar_hmm = args{i+1};  % should check topology
+       case 'names',  bnet.names = assocarray(args{i+1}, num2cell(1:n)); 
+       otherwise,  
+	error(['invalid argument name ' args{i}]);       
+      end
+    end
+  end
+end
+
+
+bnet.observed = sort(bnet.observed); % for comparing sets
+ns = node_sizes;
+bnet.node_sizes_slice = ns(:)';
+bnet.node_sizes = [ns(:) ns(:)];
+
+cnodes = mysetdiff(1:n, dnodes);
+bnet.dnodes_slice = dnodes;
+bnet.cnodes_slice = cnodes;
+bnet.dnodes = [dnodes dnodes+n];
+bnet.cnodes = [cnodes cnodes+n];
+
+bnet.equiv_class = [bnet.eclass1(:) bnet.eclass2(:)];
+bnet.CPD = cell(1,max(bnet.equiv_class(:)));
+eclass = bnet.equiv_class(:);
+E = max(eclass);
+bnet.rep_of_eclass = zeros(1,E);
+for e=1:E
+  mems = find(eclass==e);
+  bnet.rep_of_eclass(e) = mems(1);
+end
+
+ss = n;
+onodes = bnet.observed;
+hnodes = mysetdiff(1:ss, onodes);
+bnet.hidden_bitv = zeros(1,2*ss);
+bnet.hidden_bitv(hnodes) = 1;
+bnet.hidden_bitv(hnodes+ss) = 1;
+
+bnet.parents = cell(1, 2*ss);
+for i=1:ss
+  bnet.parents{i} = parents(bnet.dag, i);
+  bnet.parents{i+ss} = parents(bnet.dag, i+ss);
+end
+
+bnet.auto_regressive = zeros(1,ss);
+% ar(i)=1 means (observed) node i depends on i in the  previous slice
+for o=bnet.observed(:)'
+  if any(bnet.parents{o+ss} <= ss)
+    bnet.auto_regressive(o) = 1;
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/mk_fgraph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+function fg = mk_fgraph(G, node_sizes, factors, varargin)
+% MK_FGRAPH Make a factor graph
+% fg = mk_fgraph(G, node_sizes, factors, ...)
+%
+% A factor graph is a bipartite graph, with one side containing variables,
+% and the other containing functions of (subsets of) these variables.
+% For details, see "Factor Graphs and the Sum-Product Algorithm",
+%  F. Kschischang and B. Frey and H-A. Loeliger,
+%  IEEE Trans. Info. Theory, 2001
+%
+% G(i,j) = 1 if there is an arc from variable i to factor j
+%
+% node_sizes(i) is the number of values node i can take on,
+%   or the length of node i if i is a continuous-valued vector.
+%
+% 'factors' is the list of factors (kernel functions)
+%
+% The list below gives optional arguments [default value in brackets].
+% 
+% equiv_class - equiv_class(i)=j  means factor node i gets its params from factors{j} [1:F]
+% discrete - the list of nodes which are discrete random variables [1:N]
+%
+% e.g., fg = mk_fgraph(G, [2 2], {bnet.CPD{1},bnet.CPD{2}}, 'discrete', [1 2])
+
+fg.G = G;
+fg.node_sizes = node_sizes;
+fg.factors = factors;
+[fg.nvars fg.nfactors] = size(G);
+
+% default values for parameters
+fg.equiv_class = 1:fg.nfactors;
+fg.dnodes = 1:fg.nvars;
+
+if nargin >= 4
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'equiv_class', fg.equiv_class = args{i+1}; 
+     case 'discrete',    fg.dnodes = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+% so that determine_pot_type will work...
+fg.utility_nodes = [];
+%fg.decision_nodes = [];
+%fg.chance_nodes = fg.nvars;
+
+fg.dom = cell(1, fg.nfactors);
+for f=1:fg.nfactors
+  fg.dom{f} = find(G(:,f));
+end
+fg.dep = cell(1, fg.nvars);
+for x=1:fg.nvars
+  fg.dep{x} = find(G(x,:));
+end
+fg.cnodes = mysetdiff(1:fg.nvars, fg.dnodes);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/mk_fgraph_given_ev.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+function fg = mk_fgraph_given_ev(G, node_sizes, factors, ev_CPD, evidence, varargin)
+% MK_FGRAPH_GIVEN_EV Make a factor graph where each node has its own private evidence term
+% fg = mk_fgraph(G, node_sizes, factors, ev_CPD, evidence, ...)
+%
+% G, node_sizes and factors are as in mk_fgraph, but they refer to the hidden nodes.
+% ev_CPD{i} is a CPD for the i'th hidden node; this will be converted into a factor
+% for node i using evidence{i}.
+% We currently assume all hidden nodes are discrete, for simplicity.
+%
+% The list below gives optional arguments [default value in brackets].
+% 
+% equiv_class - equiv_class(i)=j  means factor node i gets its params from factors{j} [1:F]
+% ev_equiv_class - ev_equiv_class(i)=j  means evidence node i gets its params from ev_CPD{j} [1:N]
+
+
+N = length(node_sizes);
+nfactors = length(factors);
+
+% default values for parameters
+eclass = 1:nfactors;
+ev_eclass = 1:N;
+
+if nargin >= 6
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'equiv_class', eclass = args{i+1}; 
+     case 'ev_equiv_class', ev_eclass = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+pot_type = 'd';
+for x=1:N
+  ev = cell(1,2); % cell 1 is the hidden parent, cell 2 is the observed child
+  ev(2) = evidence(x); 
+  dom = 1:2;
+  F = convert_to_pot(ev_CPD{ev_eclass(x)}, pot_type, dom(:), ev);
+  M = pot_to_marginal(F);
+  %factors{end+1} = tabular_CPD('self', 1, 'ps', [], 'sz', node_sizes(x), 'CPT', M.T);
+  factors{end+1} = mk_isolated_tabular_CPD(node_sizes(x), {'CPT', M.T});
+end
+
+E = max(eclass);
+fg = mk_fgraph([G eye(N)], node_sizes, factors, 'equiv_class', [eclass E+1:E+N]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/mk_higher_order_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,181 @@
+function bnet = mk_higher_order_dbn(intra, inter, node_sizes, varargin)
+% MK_DBN Make a Dynamic Bayesian Network.
+%
+% BNET = MK_DBN(INTRA, INTER, NODE_SIZES, ...) makes a DBN with arcs
+% from i in slice t to j in slice t iff intra(i,j) = 1, and 
+% from i in slice t to j in slice t+1 iff inter(i,j) = 1,
+% for i,j in {1, 2, ..., n}, where n = num. nodes per slice, and t >= 1.
+% node_sizes(i) is the number of values node i can take on.
+% The nodes are assumed to be in topological order. Use TOPOLOGICAL_SORT if necessary.
+% See also mk_bnet.
+%
+% Optional arguments [default in brackets]
+% 'discrete' - list of discrete nodes [1:n]
+% 'observed' - the list of nodes which will definitely be observed in every slice of every case [ [] ]
+% 'eclass1' - equiv class for slice 1 [1:n]
+% 'eclass2' - equiv class for slice 2 [tie nodes with equivalent parents to slice 1]
+%    equiv_class1(i) = j means node i in slice 1 gets its parameters from bnet.CPD{j},
+%    i.e., nodes i and j have tied parameters.
+% 'intra1' - topology of first slice, if different from others
+% 'names' - a cell array of strings to be associated with nodes 1:n [{}]
+%    This creates an associative array, so you write e.g.
+%     'evidence(bnet.names{'bar'}) = 42' instead of  'evidence(2} = 42' 
+%     assuming names = { 'foo', 'bar', ...}.
+%    
+% For backwards compatibility with BNT2, arguments can also be specified as follows
+%   bnet = mk_dbn(intra, inter, node_sizes, dnodes, eclass1, eclass2, intra1)
+%
+% After calling this function, you must specify the parameters (conditional probability
+% distributions) using bnet.CPD{i} = gaussian_CPD(...) or tabular_CPD(...) etc.
+
+
+n = length(intra);
+ss = n;
+bnet.nnodes_per_slice = ss;
+bnet.intra = intra;
+bnet.inter = inter;
+bnet.intra1 = intra;
+
+% As this method is used to generate a higher order Markov Model
+% also connect from time slice t - i -> t with i > 1 has to be 
+% taken into account.
+
+%inter should be a three dimensional array where inter(:,:,i)
+%describes the connections from time-slice t - i to t.  
+[rows,columns,order] = size(inter);
+assert(rows    == n);
+assert(columns == n);
+dag = zeros((order + 1)*n);
+
+i = 0;
+while i <= order
+    j = i;
+    while j <= order
+        if j == i
+            dag(1 + i*n:(i+1)*n,1+i*n:(i+1)*n) = intra;
+        else
+            dag(1+i*n:(i+1)*n,1+j*n:(j+1)*n) = inter(:,:,j - i);
+        end
+        j = j + 1;
+    end;
+    i = i + 1;
+end;
+
+bnet.dag = dag;
+bnet.names = {};
+
+directed = 1;
+if ~acyclic(dag,directed)
+  error('graph must be acyclic')
+end
+
+% Calculation of the equivalence classes
+bnet.eclass1 = 1:n;
+bnet.eclass = zeros(order + 1,ss);
+bnet.eclass(1,:) = 1:n;
+for i = 1:order
+    bnet.eclass(i+1,:) = bnet.eclass(i,:);
+    for j = 1:ss 
+        if(isequal(parents(dag,(i-1)*n+j)+ss,parents(dag,(i*n + j))))
+	   %fprintf('%d has isomorphic parents, eclass %d \n',j,bnet.eclass(i,j))
+        else
+	   bnet.eclass(i + 1,j) = max(bnet.eclass(i+1,:))+1;
+	   %fprintf('%d has non isomorphic parents, eclass %d \n',j,bnet.eclass(i,j))  
+	end;
+    end;
+end;
+bnet.eclass1 = 1:n;
+
+% To be compatible with whe rest of the code 
+bnet.eclass2 = bnet.eclass(2,:);
+
+dnodes = 1:n;
+bnet.observed = [];
+
+if nargin >= 4
+  args = varargin;
+  nargs = length(args);
+  if ~isstr(args{1})
+    if nargs >= 1 dnodes = args{1}; end
+    if nargs >= 2 bnet.eclass1 = args{2}; bnet.eclass(1,:) = args{2}; end
+    if nargs >= 3 bnet.eclass2 = args{3}; bnet.eclass(2,:) = args{2}; end
+    if nargs >= 4 bnet.intra1 = args{4}; end
+  else
+    for i=1:2:nargs
+      switch args{i},
+       case 'discrete', dnodes = args{i+1}; 
+       case 'observed', bnet.observed = args{i+1}; 
+       case 'eclass1',  bnet.eclass1 = args{i+1}; bnet.eclass(1,:) = args{i+1}; 
+       case 'eclass2',  bnet.eclass2 = args{i+1}; bnet.eclass(2,:) = args{i+1};
+       case 'eclass',   bnet.eclass = args{i+1};  
+       case 'intra1',  bnet.intra1 = args{i+1}; 
+       %case 'ar_hmm',  bnet.ar_hmm = args{i+1};  % should check topology
+       case 'names',  bnet.names = assocarray(args{i+1}, num2cell(1:n)); 
+       otherwise,  
+	error(['invalid argument name ' args{i}]);       
+      end
+    end
+  end
+end
+
+bnet.observed = sort(bnet.observed); % for comparing sets
+ns = node_sizes;
+bnet.node_sizes_slice = ns(:)';
+bnet.node_sizes = repmat(ns(:),1,order + 1);
+
+cnodes = mysetdiff(1:n, dnodes);
+bnet.dnodes_slice = dnodes;
+bnet.cnodes_slice = cnodes;
+bnet.dnodes = dnodes;
+bnet.cnodes = cnodes;
+% To adapt the function to higher order Markov models include dnodes for more 
+% time slices
+for i = 1:order
+    bnet.dnodes = [bnet.dnodes dnodes+i*n];
+    bnet.cnodes = [bnet.cnodes cnodes+i*n];
+end
+
+% Generieren einer Matrix, deren i-te Spalte die Aequivalenzklassen
+% der i-ten Zeitscheibe enthaelt. 
+bnet.equiv_class = [bnet.eclass(1,:)]';
+for i = 2:(order + 1)
+    bnet.equiv_class = [bnet.equiv_class   bnet.eclass(i,:)'];
+end
+
+bnet.CPD = cell(1,max(bnet.equiv_class(:)));
+
+ss = n;
+onodes = bnet.observed;
+hnodes = mysetdiff(1:ss, onodes);
+bnet.hidden_bitv = zeros(1,(order + 1)*ss);
+for i = 0:order
+    bnet.hidden_bitv(hnodes +i*ss) = 1;
+end;
+
+bnet.parents = cell(1, (order + 1)*ss);
+for i=1:(order + 1)*ss
+  bnet.parents{i} = parents(bnet.dag, i);
+end
+
+bnet.auto_regressive = zeros(1,ss);
+% ar(i)=1 means (observed) node i depends on i in the  previous slice
+for o=bnet.observed(:)'
+  if any(bnet.parents{o+ss} <= ss)
+    bnet.auto_regressive(o) = 1;
+  end
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/mk_limid.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,93 @@
+function bnet = mk_limid(dag, node_sizes, varargin)
+% MK_LIMID Make a limited information influence diagram
+%
+% BNET = MK_LIMID(DAG, NODE_SIZES, ...) 
+% DAG is the adjacency matrix for a directed acyclic graph.
+% The nodes are assumed to be in topological order. Use TOPOLOGICAL_SORT if necessary.
+% For decision nodes, the parents must explicitely include all nodes
+% on which it can depends, in contrast to the implicit no-forgetting assumption of influence diagrams.
+% (For details, see "Representing and solving decision problems with limited information",
+%    Lauritzen and Nilsson, Management Science, 2001.)
+%
+% node_sizes(i) is the number of values node i can take on,
+%   or the length of node i if i is a continuous-valued vector.
+% node_sizes(i) = 1 if i is a utility node.
+% 
+% The list below gives optional arguments [default value in brackets].
+% 
+% chance   - the list of nodes which are random variables [1:N]
+% decision - the list of nodes which are decision nodes [ [] ]
+% utility  - the list of nodes which are utility nodes [ [] ]
+% equiv_class - equiv_class(i)=j  means node i gets its params from CPD{j} [1:N]
+%
+% e.g., limid = mk_limid(dag, ns, 'chance', [1 3], 'utility', [2])
+
+n = length(dag);
+
+% default values for parameters
+bnet.chance_nodes = 1:n;
+bnet.equiv_class = 1:n;
+bnet.utility_nodes = [];
+bnet.decision_nodes = [];
+bnet.dnodes = 1:n; % discrete 
+
+if nargin >= 3
+  args = varargin;
+  nargs = length(args);
+  if ~isstr(args{1})
+    if nargs >= 1, bnet.dnodes = args{1}; end
+    if nargs >= 2, bnet.equiv_class = args{2}; end
+  else    
+    for i=1:2:nargs
+      switch args{i},
+       case 'equiv_class', bnet.equiv_class = args{i+1}; 
+       case 'chance',      bnet.chance_nodes = args{i+1}; 
+       case 'utility',     bnet.utility_nodes = args{i+1}; 
+       case 'decision',    bnet.decision_nodes = args{i+1}; 
+       case 'discrete',    bnet.dnodes = args{i+1}; 
+        otherwise,  
+	error(['invalid argument name ' args{i}]);       
+      end
+    end
+  end
+end
+ 
+bnet.limid = 1;
+
+bnet.dag = dag;
+bnet.node_sizes = node_sizes(:)';
+
+bnet.cnodes = mysetdiff(1:n, bnet.dnodes);
+% too many functions refer to cnodes to rename it to cts_nodes - 
+% We hope it won't be confused with chance nodes!
+
+bnet.parents = cell(1,n);
+for i=1:n
+  bnet.parents{i} = parents(dag, i);
+end
+
+E = max(bnet.equiv_class);
+mem = cell(1,E);
+for i=1:n
+  e = bnet.equiv_class(i);
+  mem{e} = [mem{e} i];
+end
+bnet.members_of_equiv_class = mem;
+
+bnet.CPD = cell(1, E);
+
+% for e=1:E
+%   i = bnet.members_of_equiv_class{e}(1); % pick arbitrary member
+%   switch type{e}
+%     case 'tabular',  bnet.CPD{e} = tabular_CPD(bnet, i);
+%     case 'gaussian', bnet.CPD{e} = gaussian_CPD(bnet, i);
+%     otherwise, error(['unrecognized CPD type ' type{e}]);
+%   end
+% end
+
+directed = 1;
+if ~acyclic(dag,directed)
+  error('graph must be acyclic')
+end
+
+bnet.order = topological_sort(bnet.dag);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/mk_mnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function mnet = mk_mnet(graph, node_sizes, cliques, potentials)
+% MK_MNET Make a Markov network (Markov Random Field)
+%
+% mnet = mk_mnet(adj_mat, node_sizes, cliques, potentials)
+%
+% cliques{i} is a list of the nodes in clq i
+% potentials{i} is a dpot object corresponding to the potential for clique i
+%
+
+mnet.markov_net = 1;
+mnet.graph = graph;
+mnet.node_sizes = node_sizes;
+mnet.user_cliques = cliques;
+mnet.user_potentials = potentials;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/mk_mrf2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function mrf2 = mk_mrf2(adj_mat, pot)
+% MK_MRF2 Make a Markov random field with pairwise potentials
+% function mrf2 = mk_mrf2(adj_mat, pot)
+%
+% pot{i,j}(k1,k2)
+
+mrf2.adj_mat = adj_mat;
+mrf2.pot = pot;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/mk_mutilated_samples.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function [data, clamped] = mk_mutilated_samples(bnet, ncases, max_clamp, usecell)
+% GEN_MUTILATED_SAMPLES Do random interventions and then draw random samples
+% [data, clamped] = gen_mutilated_samples(bnet, ncases, max_clamp, usecell)
+%
+% At each step, we pick a random subset of size 0 .. max_clamp, and 
+% clamp these nodes to random values.
+%
+% data(i,m) is the value of node i in case m.
+% clamped(i,m) = 1 if node i in case m was set by intervention.
+
+if nargin < 4, usecell = 1; end
+
+ns = bnet.node_sizes;
+n = length(bnet.dag);
+if usecell
+  data = cell(n, ncases);
+else
+  data = zeros(n, ncases);
+end
+clamped = zeros(n, ncases);
+
+csubsets = subsets(1:n, max_clamp, 0); % includes the empty set
+distrib_cset = normalise(ones(1, length(csubsets)));
+
+for m=1:ncases
+  cset = csubsets{sample_discrete(distrib_cset)};
+  nvals = prod(ns(cset));
+  distrib_cvals = normalise(ones(1, nvals));
+  cvals = ind2subv(ns(cset), sample_discrete(distrib_cvals));
+  mutilated_bnet = do_intervention(bnet, cset, cvals);
+  ev = sample_bnet(mutilated_bnet);
+  if usecell
+    data(:,m) = ev;
+  else
+    data(:,m) = cell2num(ev);
+  end
+  clamped(cset,m) = 1;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/mk_named_CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function CPT2 = mk_named_CPT(family_names, names, dag, CPT1)
+% MK_NAMED_CPT Permute the dimensions of a CPT so they agree with the internal numbering convention
+% CPT2 = mk_named_CPT(family_names, names, dag, CPT1)
+%
+% This is best explained by example.
+% Consider the following directed acyclic graph
+%
+%     C
+%   /   \
+%  R     S
+%   \   /
+%     W
+%
+% where all arcs point down.
+% When we create the CPT for node W, we consider S as its first parent, and R as its
+% second, and hence write
+%
+%      S R W
+% CPT1(1,1,:) = [1.0 0.0];
+% CPT1(2,1,:) = [0.2 0.8];  % P(W=1 | R=1, S=2) = 0.2
+% CPT1(1,2,:) = [0.1 0.9]; 
+% CPT1(2,2,:) = [0.01 0.99];
+%
+% However, when we create the dag using mk_adj_mat, the nodes get topologically sorted,
+% and by chance, node R preceeds node S in this ordering.
+% Hence we should have written
+%
+%      R S W
+% CPT2(1,1,:) = [1.0 0.0];
+% CPT2(2,1,:) = [0.1 0.9];
+% CPT2(1,2,:) = [0.2 0.8]; % P(W=1 | R=1, S=2) = 0.2
+% CPT2(2,2,:) = [0.01 0.99];
+%
+% Since we do not know the order of the nodes in advance, we can write
+%   CPT2 = mk_named_CPT({'S', 'R', 'W'}, names, dag, CPT1)
+% where 'S', 'R', 'W' are the order of the dimensions we assumed (the child node must be last in this list),
+% and names{i} is the name of the i'th node.
+
+n = length(family_names);
+family_nums = zeros(1,n);
+for i=1:n
+  family_nums(i) = stringmatch(family_names{i}, names); % was strmatch
+end
+
+fam = family(dag, family_nums(end));
+perm = zeros(1,n);
+for i=1:n
+  %  perm(i) = find(family_nums(i) == fam);
+  perm(i) = find(fam(i) == family_nums);
+end
+
+CPT2 = permute(CPT1, perm);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/mk_slice_and_half_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function bnet15 = mk_slice_and_half_dbn(bnet, int)
+% function bnet = mk_slice_and_half_dbn(bnet, int)
+% function bnet = mk_slice_and_half_dbn(bnet, int)
+%
+% Create a "1.5 slice" jtree, containing the interface nodes of slice 1
+% and all the nodes of slice 2
+% To keep the node numbering the same, we simply disconnect the non-interface nodes
+% from slice 1, and set their size to 1.
+% We do this to speed things up, and so that the likelihood is computed correctly.
+% We do not need to do
+% this if we just want to compute marginals (i.e., we can include nodes whose potentials will
+% be left as all 1s).
+
+intra15 = bnet.intra;
+ss = length(bnet.intra);
+nonint = mysetdiff(1:ss, int);
+for i=nonint(:)'
+  intra15(:,i) = 0;
+  intra15(i,:) = 0;
+  %assert(~any(bnet.inter(i,:)))
+end
+dag15 = [intra15      bnet.inter;
+	 zeros(ss)    bnet.intra];
+ns = bnet.node_sizes(:);
+ns(nonint) = 1; % disconnected nodes get size 1
+obs_nodes = [bnet.observed(:) bnet.observed(:)+ss];
+bnet15 = mk_bnet(dag15, ns, 'discrete', bnet.dnodes, 'equiv_class', bnet.equiv_class(:), ...
+		 'observed', obs_nodes(:));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/noisyORtoTable.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function CPT = noisyORtoTable(inhibit, leak_inhibit)
+% NOISYORTOTABLE Convert noisyOR distribution to CPT
+% function CPT = noisyORtoTable(inhibit, leak_inhibit)
+%
+% inhibit(i) = prob i'th parent will be inhibited (flipped from 1 to 0)
+% leak_inhibit - optional suppression of leak
+% CPT(U1,...,Un, X) = Pr(X|U1,...,Un) where the Us are the parents (excluding leak).
+% State 1 = off, 2 = on
+
+if nargin < 2, leak_inhibit = 1; end
+
+q = [leak_inhibit inhibit(:)'];
+
+if length(q)==1
+  CPT = [q  1-q];
+  return;
+end
+
+n = length(q);
+Bn = ind2subv(2*ones(1,n), 1:(2^n))-1;  % all n bit vectors, with the left most column toggling fastest (LSB)
+CPT = zeros(2^n, 2);
+% Pr(X=0 | U_1 .. U_n) = prod_{i: U_i = on} q_i =  prod_i q_i ^ U_i = exp(u' * log(q_i))
+% This method is problematic when q contains zeros
+
+Q = repmat(q(:)', 2^n, 1);
+Q(logical(~Bn)) = 1;
+CPT(:,1) = prod(Q,2);
+CPT(:,2) = 1-CPT(:,1);
+
+CPT = reshape(CPT(2:2:end), 2*ones(1,n)); % skip cases in which the leak is off       
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/partition_dbn_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function [pnodes, tnodes] = partition_dbn_nodes(intra, inter)
+% PARTITION_DBN_NODES Divide the nodes into a DBN into persistent and transient.
+% [pnodes, tnodes] = partition_dbn_nodes(intra, inter)
+% Persistent nodes have children in the next time slice, transient nodes do not.
+ 
+ss = length(intra);
+pnodes = []; 
+tnodes = [];
+for i=1:ss
+  cs = children(inter, i);
+  if isempty(cs)
+    tnodes = [tnodes i];
+  else
+    pnodes = [pnodes i];
+  end
+end
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/partition_matrix_vec_3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [A1, A2, B1, B2, C11, C12, C21, C22] = partition_matrix_vec_3(A, B, C, n1, n2, bs)
+
+dom = myunion(n1, n2);
+n1i = block(find_equiv_posns(n1, dom), bs(dom));
+n2i = block(find_equiv_posns(n2, dom), bs(dom));
+
+
+    A1 = A(n1i);
+    A2 = A(n2i);
+    if isempty(B)
+        B1 = zeros(size(n1i, 2),size(B, 2));
+        B2 = zeros(size(n2i, 2),size(B, 2));
+    else
+        B1 = B(n1i, :);
+        B2 = B(n2i, :);
+    end
+    
+    
+    C11 = C(n1i, n1i);
+    C12 = C(n1i, n2i);
+    C21 = C(n2i, n1i);
+    C22 = C(n2i, n2i);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/sample_bnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function sample = sample_bnet(bnet, varargin)
+% SAMPLE_BNET Generate a random sample from a Bayes net.
+% SAMPLE = SAMPLE_BNET(BNET, ...)
+%
+% sample{i} contains the value of the i'th node.
+% i.e., the result is an Nx1 cell array.
+% Nodes are sampled in the order given by bnet.order.
+%
+% Optional arguments:
+%
+% evidence - initial evidence; if evidence{i} is non-empty, node i won't be sampled.
+
+% set defauly params
+n = length(bnet.dag);
+sample = cell(n,1);
+
+% get optional params
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'evidence',    sample = args{i+1}(:);
+   otherwise, error(['unrecognized argument ' args{i}])
+  end
+end
+
+for j=bnet.order(:)'
+  if isempty(sample{j})
+    %ps = parents(bnet.dag, j);
+    ps = bnet.parents{j};
+    e = bnet.equiv_class(j);
+    sample{j} = sample_node(bnet.CPD{e}, sample(ps));
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/sample_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+function seq = sample_dbn(bnet, varargin)
+% SAMPLE_DBN Generate a random sequence from a DBN.
+% seq = sample_dbn(bnet, ...)
+%
+% seq{i,t} contains the values of the i'th node in the t'th slice.
+%
+% Optional arguments:
+%
+% length - length of sequence  to be generated (can also just use sample_dbn(bnet,T))
+% stop_test - name of a function which is used to decide when to stop;
+%   This will be called as feval(stop_test, seq(:,t))
+%   i.e., stop_test is passed a cell array containing all the nodes in the current slice.   
+% evidence - initial evidence; if evidence{i,t} is non-empty, this node won't be sampled.
+
+args = varargin;
+nargs = length(args);
+
+if (nargs == 1) & ~isstr(args{1})
+  % Old syntax: sample_dbn(bnet, T)
+  T = args{1};
+else
+  % get length
+  T = 1;
+  for i=1:2:nargs
+    switch args{i},
+     case 'length',      T = args{i+1}; 
+     case 'evidence',    T = size(args{i+1}, 2);
+    end
+  end
+end
+
+ss = length(bnet.intra);
+% set default arguments
+seq = cell(ss, T);
+stop_test = [];
+for i=1:2:nargs
+  switch args{i},
+   case 'evidence',    seq = args{i+1}; % initialise observed nodes
+   case 'stop_test',  stop_test = args{i+1};
+  end
+end
+
+t = 1;
+for i=1:ss
+  if ~isempty(stop_test) | isempty(seq{i,t})
+    ps = parents(bnet.dag, i);
+    e = bnet.equiv_class(i,1);
+    pvals = seq(ps);
+    seq{i,t} = sample_node(bnet.CPD{e}, pvals);
+    %fprintf('sample i=%d,t=%d,val=%d,ps\n', i, t, seq(i,t)); pvals(:)'
+  end
+end
+t = 2;
+done = 0;
+while ~done
+  for i=1:ss
+    if ~isempty(stop_test) | isempty(seq{i,t})
+      ps = parents(bnet.dag, i+ss) + (t-2)*ss;
+      e = bnet.equiv_class(i,2);
+      pvals = seq(ps);
+      seq{i,t} = sample_node(bnet.CPD{e}, pvals);
+      %fprintf('sample i=%d,t=%d,val=%d,ps\n', i, t, seq(i,t)); pvals(:)'
+    end
+  end
+  if ~isempty(stop_test)
+    done = feval(stop_test, seq(:,t));
+  else
+    if t==T
+      done = 1;
+    end
+  end
+  t = t + 1;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/score_bnet_complete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function L = log_lik_complete(bnet, cases, clamped)
+% LOG_LIK_COMPLETE Compute sum_m sum_i log P(x(i,m)| x(pi_i,m), theta_i) for a completely observed data set
+% L = log_lik_complete(bnet, cases, clamped)
+%
+% If there is a missing data, you must use an inference engine.
+% cases(i,m) is the value assigned to node i in case m.
+% (If there are vector-valued nodes, cases should be a cell array.)
+% clamped(i,m) = 1 if node i was set by intervention in case m (default: clamped = zeros)
+% Clamped nodes contribute a factor of 1.0 to the likelihood.
+
+if iscell(cases), usecell = 1; else usecell = 0; end
+
+n = length(bnet.dag);
+ncases = size(cases, 2);
+if n ~= size(cases, 1)
+  error('data should be of size nnodes * ncases');
+end
+
+if nargin < 3, clamped = zeros(n,ncases); end
+
+L = 0;
+for i=1:n
+  ps = parents(bnet.dag, i);
+  e = bnet.equiv_class(i);
+  u = find(clamped(i,:)==0);
+  L = L + log_prob_node(bnet.CPD{e}, cases(i,u), cases(ps,u));
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/shrink_obs_dims_in_gaussian.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function marg2 = shrink_obs_dims_in_gaussian(marg1, dom, evidence, ns)
+% SHRINK_OBS_DIMS_IN_GAUSSIAN Remove observed dimensions from mu/Sigma
+% function marg2 = shrink_obs_dims_in_gaussian(marg1, dom, evidence, ns)
+
+% This is used by loopy
+
+hdom = dom(isemptycell(evidence(dom)));
+ndx = find_equiv_posns(hdom, dom);
+b = block(ndx, ns(dom));
+marg2.mu = marg1.mu(b);
+marg2.Sigma = marg1.Sigma(b,b);
+marg2.domain = marg1.domain;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/shrink_obs_dims_in_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function T2 = shrink_obs_dims_in_table(T1, dom, evidence)
+% SHRINK_OBS_DIMS_IN_TABLE Set observed dimensions to size 1
+% T2 = shrink_obs_dims_in_table(T1, dom, evidence)
+%
+% If 'T1' contains observed nodes, it will have 0s in the positions that are
+% inconsistent with the evidence. We now remove these 0s and set the corresponding dimensions to
+% size 1, to be consistent with the way most inference engines handle evidence, which is to
+% shrink observed nodes before doing inference.
+
+% This is used by pearl and enumerative inf. engines.
+
+odom = dom(~isemptycell(evidence(dom)));
+vals = cat(1,evidence{odom});
+ndx = mk_multi_index(length(dom), find_equiv_posns(odom, dom), vals(:));
+T2 = T1(ndx{:});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/solve_limid.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+function [strategy, MEU, niter] = solve_limid(engine, varargin)
+% SOLVE_LIMID Find the (locally) optimal strategy for a LIMID
+% [strategy, MEU, niter] = solve_limid(inf_engine, ...)
+%
+% strategy{d} = stochastic policy for node d (a decision node)
+% MEU = maximum expected utility
+% niter = num iterations used
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default in brackets]
+%
+% max_iter - max. num. iterations [ 1 ]
+% tol - tolerance required of consecutive MEU values, used to assess convergence [1e-3]
+% order - order in which decision nodes are optimized [ reverse numerical order ]
+%
+% e.g., solve_limid(engine, 'tol', 1e-2, 'max_iter', 10)
+
+bnet = bnet_from_engine(engine);
+
+% default values
+max_iter = 1;
+tol = 1e-3;
+D = bnet.decision_nodes;
+order = D(end:-1:1);
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'max_iter', max_iter  = args{i+1}; 
+   case 'tol',      tol = args{i+1}; 
+   case 'order',    order = args{i+1}; 
+   otherwise,  
+    error(['invalid argument name ' args{i}]);       
+  end
+end
+
+CPDs = bnet.CPD;
+ns = bnet.node_sizes;
+N = length(ns);
+evidence = cell(1,N);
+strategy = cell(1, N);
+
+iter = 1;
+converged = 0;
+oldMEU = 0;
+while ~converged & (iter <= max_iter)
+  for d=order(:)'
+    engine = enter_evidence(engine, evidence, 'exclude', d);
+    [m, pot] = marginal_family(engine, d);
+    %pot = marginal_family_pot(engine, d);
+    [policy, score] = upot_to_opt_policy(pot);    
+    e = bnet.equiv_class(d);
+    CPDs{e} = set_fields(CPDs{e}, 'policy', policy);
+    engine = update_engine(engine, CPDs);
+    strategy{d} = policy;
+  end  
+  engine = enter_evidence(engine, evidence);
+  [m, pot] = marginal_nodes(engine, []);
+  %pot = marginal_family_pot(engine, []);
+  [dummy, MEU] = upot_to_opt_policy(pot);    
+  if approxeq(MEU, oldMEU, tol)
+    converged = 1;
+  end
+  oldMEU = MEU;
+  iter = iter + 1;
+end
+niter = iter - 1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/unroll_dbn_topology.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function M = unroll_dbn_topology(intra, inter, T, intra1)
+% UNROLL_DBN_TOPOLOGY Make the block diagonal adjacency matrix for a DBN consisting of T slices
+% M = unroll_dbn_topology(intra, inter, T, intra1)
+%
+% intra is the connectivity within a slice, inter between two slices.
+% M will have intra along the diagonal, and inter one above the diagonal.
+% intra1 is an optional argumnet, in case the intra is different for the first slice.
+
+if nargin < 4, intra1 = intra; end
+
+ss = length(intra); % slice size
+M = sparse(ss*T, ss*T);
+
+b = 1:ss;
+M(b,b) = intra1;
+M(b,b+ss) = inter;
+
+for t=2:T-1
+  b = (1:ss) + (t-1)*ss;
+  M(b,b) = intra;
+  M(b,b+ss) = inter;
+end
+
+t = T;
+b = (1:ss) + (t-1)*ss;
+M(b,b) = intra;
+
+   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/unroll_higher_order_topology.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function M = unroll_higher_order_topology(intra, inter, T, intra1)
+% UNROLL_DBN_TOPOLOGY Make the block diagonal adjacency matrix for a DBN consisting of T slices
+% M = unroll_dbn_topology(intra, inter, T, intra1)
+%
+% intra is the connectivity within a slice, inter between two slices.
+% M will have intra along the diagonal, and inter one above the diagonal.
+% intra1 is an optional argumnet, in case the intra is different for the first slice.
+
+if nargin < 4 
+    intra1 = intra; 
+end;
+
+
+ss = length(intra); % slice size
+M = sparse(ss*T, ss*T);
+[rows,columns,order] = size(inter);
+for t1 = 1:T
+  b = 1 + (t1 - 1)*ss : t1*ss;
+  if t1 == 1
+      M(b,b) = intra1;
+  else
+      M(b,b) = intra;
+  end
+  for t2 = 1:order
+    if t1 + t2 <= T
+      M(b,b+t2*ss) = inter(:,:,t2);
+    end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/general/unroll_set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function U = unroll_set(S, ss, T)
+% UNROLL_SET Make T shifted copies of the set of nodes S in a slice of size ss.
+% U = unroll_set(S, ss, T)
+
+offset = repmat(0:ss:(T-1)*ss, [length(S) 1]);
+U = repmat(S(:), [1 T]) + offset;
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/bnet_from_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/get_field.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/set_fields.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/update_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/@inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+/marginal_family_pot.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/observed_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/@inf_engine/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/Old/marginal_family_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function pot = marginal_family_pot(engine, i)
+% MARGINAL_FAMILY_POT Compute the marginal on i's family and return as a potentila (inf_engine)
+% function pot = marginal_family_pot(engine,i)
+
+% This function is only called by solve_limid.
+% It requires that engine's marginal_family function return a potential.
+% This is true for jtree_inf_engine, but not for, say, jtree_ndx_inf_engine.
+% All limids must be solved using potentials,
+% but this is not true for bnets.
+
+%[m, pot] = marginal_family(engine, i);
+
+bnet = bnet_from_engine(engine);
+[m, pot] = marginal_nodes(engine, family(bnet.dag, i));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/Old/observed_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function onodes = observed_nodes(engine)
+% OBSERVED_NODES  Return nodes that are guaranteed to be observed, indep of evidence (generic inf_engine)
+% onodes = observed_nodes(engine)
+
+onodes = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/bnet_from_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function bnet = bnet_from_engine(engine)
+% BNET_FROM_ENGINE Return the bnet structure stored inside the engine (inf_engine)
+% bnet = bnet_from_engine(engine)
+
+bnet = engine.bnet;
+
+% We cannot write 'engine.bnet' without writing a 'subsref' function,
+% since engine is an object with private parts.
+% The bnet field should be the only thing external users of the engine should need access to.
+% We do not pass bnet as a separate argument, since it could get out of synch with the one
+% encoded inside the engine.
+       
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/get_field.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function val = get_field(engine, name)
+% GET_FIELD Get the value of a named field from a generic engine
+% val = get_field(engine, name)
+%
+% The following fields can be accessed
+%
+% bnet
+%
+% e.g., bnet = get_field(engine, 'bnet')
+
+switch name
+ case 'bnet',      val = engine.bnet;
+ otherwise,
+  error(['invalid argument name ' name]);
+end                                  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function engine = inf_engine(bnet)
+
+engine.bnet = bnet;
+engine = class(engine, 'inf_engine');
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function m = marginal_family(engine, i, t)
+% MARGINAL_FAMILY Compute the marginal on i's family (inf_engine)
+% m = marginal_family(engine, i, t)
+%
+% t defaults to 1.
+
+if nargin < 3, t = 1; end
+
+bnet = bnet_from_engine(engine);
+if t==1
+  m = marginal_nodes(engine, family(bnet.dag, i));
+else
+  ss = length(bnet.intra);
+  fam = family(bnet.dag, i+ss);
+  if any(fam<=ss)
+    % i has a parent in the preceeding slice
+    % Hence the lowest numbered slice containing the family is t-1
+    m = marginal_nodes(engine, fam, t-1);
+  else
+    % The family all fits inside slice t
+    % Hence shift the indexes back to slice 1
+    m = marginal_nodes(engine, fam-ss, t);
+  end
+end     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/set_fields.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function engine = set_fields(engine, varargin)
+% SET_FIELDS Set the fields for a generic engine
+% engine = set_fields(engine, name/value pairs)
+%
+% e.g., engine = set_fields(engine, 'maximize', 1)
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'maximize', engine.maximize = args{i+1};
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/@inf_engine/update_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function engine = update_engine(engine, newCPDs)
+% UPDATE_ENGINE Update the engine to take into account the new parameters (inf_engine).
+% engine = update_engine(engine, newCPDs)
+%
+% This generic method is suitable for engines that do not process the parameters until 'enter_evidence'.
+
+engine.bnet.CPD = newCPDs;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/dummy/1.1.1.1/Sat Jan 18 22:22:22 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+A D/@inf_engine////
+A D/dynamic////
+A D/online////
+A D/static////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+/bk_ff_hmm_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dbn_init_bel.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dbn_marginal_from_bel.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dbn_predict_bel.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dbn_update_bel.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dbn_update_bel1.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@bk_ff_hmm_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/bk_ff_hmm_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function engine = bk_ff_hmm_inf_engine(bnet)
+% BK_FF_HMM_INF_ENGINE Naive (HMM-based) implementation of fully factored form of Boyen-Koller 
+% engine = bk_ff_hmm_inf_engine(bnet)
+%
+% This is implemented on top of the forwards-backwards algo for HMMs,
+% so it is *less* efficient than exact inference! However, it is good for educational purposes,
+% because it illustrates the BK algorithm very clearly.
+
+[persistent_nodes, transient_nodes] = partition_dbn_nodes(bnet.intra, bnet.inter);
+assert(isequal(sort(bnet.observed), transient_nodes));
+[engine.prior, engine.transmat] = dbn_to_hmm(bnet);
+
+ss = length(bnet.intra);
+
+engine.bel = [];
+engine.bel_marginals = [];
+engine.marginals = [];
+
+
+engine = class(engine, 'bk_ff_hmm_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_init_bel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function engine = dbn_init_bel(engine)
+% DBN_INIT_BEL Compute the initial belief state (bk_ff_hmm)
+% engine = dbn_init_bel(engine)
+
+engine.bel = engine.prior(:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_marginal_from_bel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function marginal = dbn_marginal_from_bel(engine, i)
+% DBN_MARGINAL_FROM_BEL Compute the marginal on a node given the current belief state (bk_ff_hmm)
+% marginal = dbn_marginal_from_bel(engine, i)
+
+marginal = pot_to_marginal(engine.bel_marginals{i});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_predict_bel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function engine = dbn_predict_bel(engine, lag)
+% DBN_PREDICT_BEL Predict the belief state 'lag' steps into the future (bk_ff_hmm)
+% engine = dbn_predict_bel(engine, lag)
+% 'lag' defaults to 1
+
+if nargin < 2, lag = 1; end
+
+for d=1:lag
+  %newbel = engine.transmat' * engine.bel;
+  newbel = normalise(engine.transmat' * engine.bel); 
+  
+  hnodes = engine.hnodes;
+  bnet = bnet_from_engine(engine);
+  ns = bnet.node_sizes;
+  [marginals, marginalsT] = project_joint_onto_marginals(newbel, hnodes, ns);
+  newbel = combine_marginals_into_joint(marginalsT, hnodes, ns);          
+  engine.bel_marginals = marginalsT;
+  engine.bel = newbel;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function [engine, loglik] = dbn_update_bel(engine, evidence)
+% DBN_UPDATE_BEL Update the belief state (bk_ff_hmm)
+% [engine, loglik] = dbn_update_bel(engine, evidence)
+%
+% evidence{i,1} contains the evidence on node i in slice t-1
+% evidence{i,2} contains the evidence on node i in slice t
+
+oldbel = engine.bel;
+bnet = bnet_from_engine(engine);
+obslik = mk_hmm_obs_lik_vec(bnet, evidence);
+[newbel, lik] = normalise((engine.transmat' * oldbel) .* obslik);
+loglik = log(lik);
+
+hnodes = engine.hnodes;
+ns = bnet.node_sizes;
+[marginals, marginalsT] = project_joint_onto_marginals(newbel, hnodes, ns);
+newbel = combine_marginals_into_joint(marginalsT, hnodes, ns);          
+engine.bel_marginals = marginalsT;
+engine.bel = newbel;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function [engine, loglik] = dbn_update_bel1(engine, evidence)
+% DBN_UPDATE_BEL Update the initial belief state (bk_ff_hmm)
+% [engine, loglik] = dbn_update_bel(engine, evidence)
+%
+%  evidence{i} contains the evidence on node i in slice 1
+
+oldbel = engine.bel;
+bnet = bnet_from_engine(engine);
+obslik = mk_hmm_obs_lik_vec1(bnet, evidence);
+[newbel, lik] = normalise(oldbel .* obslik);
+loglik = log(lik);
+
+hnodes = engine.hnodes;
+ns = bnet.node_sizes;
+[marginals, marginalsT] = project_joint_onto_marginals(newbel, hnodes, ns);
+newbel = combine_marginals_into_joint(marginalsT, hnodes, ns);          
+engine.bel_marginals = marginalsT;
+engine.bel = newbel;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (bk_ff_hmm)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product (not yet supported), else sum-product [0]
+% filter -   if 1, do filtering, else smoothing [0]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+maximize = 0;
+filter = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1}; 
+     case 'filter', filter = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+assert(~maximize);
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+onodes = bnet.observed;
+hnodes = mysetdiff(1:ss, onodes);
+T = size(evidence, 2);
+assertBNT(~any(isemptycell(evidence(onodes,:))));
+
+obslik = mk_hmm_obs_lik_mat(bnet, onodes, evidence);
+
+ns = bnet.node_sizes_slice;
+ns(onodes) = 1;
+
+[gamma, loglik, marginals, marginalsT] = bk_ff_fb(engine.prior, engine.transmat, obslik, filter, hnodes, ns);
+  
+for t=1:T
+  for i=hnodes(:)'
+    engine.marginals{i,t} = pot_to_marginal(marginalsT{i,t});
+  end
+  for i=onodes(:)'
+    m.domain = i + (t-1)*ss;
+    m.T = 1;
+    engine.marginals{i,t} = m;
+  end
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function m = marginal_family(engine, i, t)
+% MARGINAL_FAMILY Compute the marginal on the specified family (bk_ff_hmm)
+% marginal = marginal_family(engine, i, t)
+
+error('bk_ff_hmm doesn''t support marginal_family');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function marginal = marginal_nodes(engine, nodes, t)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (bk_ff_hmm)
+% marginal = marginal_nodes(engine, i, t)
+
+assert(length(nodes)==1);
+i = nodes(end);
+%assert(myismember(i, engine.hnodes));
+marginal = engine.marginals{i,t};
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+marginal.domain = i + (t-1)*ss;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+/bk_ff_fb.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/combine_marginals_into_joint.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dbn_to_hmm.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/mk_hmm_obs_lik_mat.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/mk_hmm_obs_lik_vec.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/mk_hmm_obs_lik_vec1.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/project_joint_onto_marginals.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/bk_ff_fb.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function [gamma, loglik, marginals, marginalsT] = bk_ff_fb(prior, transmat, obslik, filter_only, hnodes, ns)
+% BK_FF_FB Fully factored Boyen-Koller version of forwards-backwards
+% [gamma, loglik, marginals, marginalsT] = bk_ff_hmm(prior, transmat, obslik, filter_only, hnodes, ns)
+
+ss  = length(ns);
+S = length(prior);
+T = size(obslik, 2);
+marginals = cell(ss,T);
+marginalsT = cell(ss,T);
+scale = zeros(1,T);
+alpha = zeros(S, T);
+
+transmat2 = transmat';
+for t=1:T
+  if t==1
+    [alpha(:,t), scale(t)] = normalise(prior(:) .* obslik(:,t));
+  else
+    [alpha(:,t), scale(t)] = normalise((transmat2 * alpha(:,t-1)) .* obslik(:,t));
+  end
+  [marginals(:,t), marginalsT(:,t)] = project_joint_onto_marginals(alpha(:,t), hnodes, ns);
+  alpha(:,t) = combine_marginals_into_joint(marginalsT(:,t), hnodes, ns);
+  %fprintf('alpha t=%d\n', t);
+  %celldisp(marginals(1:8,t))
+end
+loglik = sum(log(scale));
+
+if filter_only
+  gamma = alpha;
+  return;
+end
+
+beta = zeros(S,T);
+gamma = zeros(S,T);
+t = T;
+beta(:,t) = ones(S,1);
+gamma(:,t) = normalise(alpha(:,t) .* beta(:,t));
+[marginals(:,t), marginalsT(:,t)] = project_joint_onto_marginals(gamma(:,t), hnodes, ns);
+
+for t=T-1:-1:1
+  b = beta(:,t+1) .* obslik(:,t+1); 
+  beta(:,t) = normalise((transmat * b));
+  [junk, tempT] = project_joint_onto_marginals(beta(:,t), hnodes, ns);
+  beta(:,t) = combine_marginals_into_joint(tempT, hnodes, ns);
+  %gamma(:,t) = normalise(alpha(:,t) .* beta(:,t));
+  %[marginals(:,t), marginalsT(:,t)] = project_joint_onto_marginals(gamma(:,t), hnodes, ns);
+end
+
+gamma2 = zeros(S,T);
+for t=T-1:-1:1
+  b = beta(:,t+1) .* obslik(:,t+1); 
+  xi(:,:,t) = normalise((transmat .* (alpha(:,t) * b')));      
+  if t==T-1
+    gamma2(:,T) = sum(xi(:,:,T-1), 1)';
+  end
+  gamma2(:,t) = sum(xi(:,:,t), 2);
+  [marginals(:,t), marginalsT(:,t)] = project_joint_onto_marginals(gamma2(:,t), hnodes, ns);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/combine_marginals_into_joint.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function joint = combine_marginals_into_joint(marginalsT, hnodes, ns)
+
+jointT = dpot(hnodes, ns(hnodes));
+for i=hnodes(:)'
+  jointT = multiply_by_pot(jointT, marginalsT{i});
+end
+m = pot_to_marginal(jointT);
+joint = m.T(:);           
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/dbn_to_hmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function [prior, transmat] = dbn_to_hmm(bnet)
+% DBN_TO_HMM Compute the discrete HMM matrices from a simple DBN
+% [prior, transmat] = dbn_to_hmm(bnet)
+
+onodes = bnet.observed;
+ss = length(bnet.intra);
+evidence = cell(1,2*ss);
+hnodes = mysetdiff(1:ss, onodes);
+prior = multiply_CPTs(bnet, [], hnodes, evidence);
+transmat = multiply_CPTs(bnet, hnodes, hnodes+ss, evidence);
+%obsmat1 = multiply_CPTs(bnet, hnodes, onodes, evidence);
+%obsmat = multiply_CPTs(bnet, hnodes+ss, onodes+ss, evidence);
+%obsmat1 = obsmat if the observation matrices are tied across slices
+
+
+
+%%%%%%%%%%%%
+
+function mat = multiply_CPTs(bnet, pdom, cdom, evidence)
+
+% MULTIPLY_CPTS Make a matrix Pr(Y|X), where X represents all the parents, and Y all the children
+% We assume the children have no intra-connections.
+%
+% e.g., Consider the DBN with interconnectivity i->i', j->j',k', k->i',k'
+% Then transition matrix = Pr(i,j,k -> i',j',k') = Pr(i,k->i') Pr(j->j') Pr(j,k->k')
+
+dom = [pdom cdom];
+ns = bnet.node_sizes;
+bigpot = dpot(dom, ns(dom));
+for j=cdom(:)'
+  e = bnet.equiv_class(j);
+  fam = family(bnet.dag, j);
+  pot = convert_to_pot(bnet.CPD{e}, 'd', fam(:), evidence);
+  bigpot = multiply_by_pot(bigpot, pot);
+end
+psize = prod(ns(pdom));
+csize = prod(ns(cdom));
+T = pot_to_marginal(bigpot);
+mat = reshape(T.T, [psize csize]);
+
+          
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_mat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function obslik = mk_hmm_obs_lik_mat(bnet, onodes, evidence)
+% MK_HMM_OBS_LIK_MAT Make the observation likelihood matrix for all slices
+% obslik = mk_hmm_obs_lik_mat(bnet, onodes, evidence)
+%
+% obslik(i,t) = Pr(Y(t) | X(t)=i)
+
+[ss T] = size(evidence);
+
+hnodes = mysetdiff(1:ss, onodes);
+ns = bnet.node_sizes_slice;
+ns(onodes) = 1;
+Q = prod(ns(hnodes));
+obslik = zeros(Q,T);
+
+dom = 1:ss;
+for t=1:T
+  bigpot = dpot(dom, ns(dom));
+  for i=onodes(:)'
+    if t==1
+      e = bnet.equiv_class(i,1);
+      fam = family(bnet.dag, i);
+    else
+      e = bnet.equiv_class(i,2);
+      fam = family(bnet.dag, i, 2) + ss*(t-2);
+    end
+    pot = convert_to_pot(bnet.CPD{e}, 'd', fam(:), evidence);
+    pot = set_domain_pot(pot, family(bnet.dag, i));
+    bigpot = multiply_by_pot(bigpot, pot);
+  end
+  m = pot_to_marginal(bigpot);
+  obslik(:,t) = m.T(:);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function obslik = mk_hmm_obs_lik_vec(bnet, evidence)
+% MK_HMM_OBS_LIK_VEC Make the observation likelihood vector for one slice
+% obslik = mk_obs_lik(bnet, evidence)
+%
+% obslik(i) = Pr(y(t) | X(t)=i)
+% evidence{i,1} contains the evidence on node i in slice t-1
+% evidence{i,2} contains the evidence on node i in slice t
+
+ns = bnet.node_sizes;
+ss = length(bnet.intra);
+onodes = find(~isemptycell(evidence(:)));
+hnodes = find(isemptycell(evidence(:)));
+ens = ns;
+ens(onodes) = 1;
+Q = prod(ens(hnodes));
+obslik = zeros(1,Q);
+dom = (1:ss)+ss;
+bigpot = dpot(dom, ens(dom));
+onodes1 = find(~isemptycell(evidence(:,1)));
+for i=onodes1(:)'
+  e = bnet.equiv_class(i,2);
+  fam = family(bnet.dag, i, 2);
+  pot = convert_to_pot(bnet.CPD{e}, 'd', fam, evidence);
+  bigpot = multiply_by_pot(bigpot, pot);
+end
+m = pot_to_marginal(bigpot);
+obslik = m.T(:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function obslik = mk_hmm_obs_lik_vec1(bnet, evidence)
+% MK_HMM_OBS_LIK_VEC1 Make the observation likelihood vector for the first slice
+% obslik = mk_hmm_obs_lik_vec1(engine, evidence)
+%
+% obslik(i) = Pr(y(1) | X(1)=i)
+% evidence{i} contains the evidence on node i in slice 1
+
+ns = bnet.node_sizes;
+ss = length(ns);
+onodes = find(~isemptycell(evidence(:)));
+hnodes = find(isemptycell(evidence(:)));
+ens = ns;
+ens(onodes) = 1;
+Q = prod(ens(hnodes));
+obslik = zeros(1,Q);
+dom = (1:ss);
+bigpot = dpot(dom, ens(dom));
+for i=onodes(:)'
+  e = bnet.equiv_class(i,1);
+  fam = family(bnet.dag, i);
+  pot = convert_to_pot(bnet.CPD{e}, 'd', fam(:), evidence);
+  bigpot = multiply_by_pot(bigpot, pot);
+end
+m = pot_to_marginal(bigpot);
+obslik = m.T(:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_ff_hmm_inf_engine/private/project_joint_onto_marginals.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function [marginals, marginalsT] = project_joint_onto_marginals(joint, hnodes, ns)
+
+ss = length(ns);
+jointT = dpot(hnodes, ns(hnodes), joint);
+marginalsT = cell(1, ss);
+marginals = cell(1,ss);
+for i=hnodes(:)'
+  marginalsT{i} = marginalize_pot(jointT, i);
+  m = pot_to_marginal(marginalsT{i});
+  marginals{i} = m.T(:);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+/bk_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dbn_init_bel.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dbn_marginal_from_bel.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dbn_update_bel.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dbn_update_bel1.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_soft_evidence.m/1.1.1.1/Sat Jan 11 18:13:50 2003//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/update_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@bk_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/bk_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,107 @@
+function engine = bk_inf_engine(bnet, varargin)
+% BK_INF_ENGINE Boyen-Koller approximate inference algorithm for DBNs.
+%
+% In the BK algorithm, the belief state is represented as a product of marginals,
+% even though the factors may not be independent.
+%
+% engine = bk_inf_engine(bnet, ...)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+% 
+% clusters - if a cell array, clusters{i} specifies the terms in the i'th factor.
+%          - 'exact' means create one cluster that contains all the nodes in a slice [exact]
+%          - 'ff' means create one cluster per node (ff = fully factorised).
+%
+%
+% For details, see
+% - "Tractable Inference for Complex Stochastic Processes", X. Boyen and D. Koller, UAI 98.
+% - "Approximate learning of dynamic models",  X. Boyen and D. Koller, NIPS 98.
+% (The UAI98 paper discusses filtering and theory, and the NIPS98 paper discusses smoothing.)
+
+ss = length(bnet.intra);
+% set default params
+clusters = 'exact';
+
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'clusters',  clusters = args{i+1};
+     otherwise, error(['unrecognized argument ' args{i}])
+    end
+  end
+end
+
+if strcmp(clusters, 'exact')
+  %clusters = { compute_interface_nodes(bnet.intra, bnet.inter) };
+  clusters = { 1:ss }; 
+elseif strcmp(clusters, 'ff')
+  clusters = num2cell(1:ss);
+end
+
+
+% We need to insert the prior on the clusters in slice 1,
+% and extract the posterior on the clusters in slice 2.
+C = length(clusters);
+clusters2 = cell(1,2*C);
+clusters2(1:C) = clusters;
+for c=1:C
+  clusters2{c+C} = clusters{c} + ss;
+end
+
+onodes = bnet.observed;
+obs_nodes = [onodes(:) onodes(:)+ss];
+engine.sub_engine = jtree_inf_engine(bnet, 'clusters', clusters2);
+
+engine.clq_ass_to_cluster = zeros(C, 2);
+for c=1:C
+  engine.clq_ass_to_cluster(c,1) = clq_containing_nodes(engine.sub_engine, clusters{c});
+  engine.clq_ass_to_cluster(c,2) = clq_containing_nodes(engine.sub_engine, clusters{c}+ss);
+end
+engine.clusters = clusters;
+
+engine.clq_ass_to_node = zeros(ss, 2);
+for i=1:ss
+  engine.clq_ass_to_node(i, 1) = clq_containing_nodes(engine.sub_engine, i);
+  engine.clq_ass_to_node(i, 2) = clq_containing_nodes(engine.sub_engine, i+ss);
+end
+
+
+
+% Also create an engine just for slice 1
+bnet1 = mk_bnet(bnet.intra1, bnet.node_sizes_slice, 'discrete', myintersect(bnet.dnodes, 1:ss), ...
+		'equiv_class', bnet.equiv_class(:,1), 'observed', onodes);
+for i=1:max(bnet1.equiv_class)
+  bnet1.CPD{i} = bnet.CPD{i};
+end
+
+engine.sub_engine1 = jtree_inf_engine(bnet1, 'clusters', clusters);
+
+engine.clq_ass_to_cluster1 = zeros(1,C);
+for c=1:C
+  engine.clq_ass_to_cluster1(c) = clq_containing_nodes(engine.sub_engine1, clusters{c});
+end
+
+engine.clq_ass_to_node1 = zeros(1, ss);
+for i=1:ss
+  engine.clq_ass_to_node1(i) = clq_containing_nodes(engine.sub_engine1, i);
+end
+
+engine.clpot = []; % this is where we store the results between enter_evidence and marginal_nodes
+engine.filter = [];
+engine.maximize = [];
+engine.T = [];
+
+engine.bel = [];
+engine.bel_clpot = [];
+engine.slice1 = [];
+%engine.pot_type = 'cg';
+% hack for online inference so we can cope with hidden Gaussians and discrete
+% it will not affect the pot type used in enter_evidence
+engine.pot_type = determine_pot_type(bnet, onodes);
+
+engine = class(engine, 'bk_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/dbn_init_bel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function engine = dbn_init_bel(engine)
+% DBN_INIT_BEL Compute the initial belief state (bk)
+% engine = dbn_init_bel(engine))
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+evidence = cell(1,ss);
+engine = dbn_update_bel1(engine, evidence);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/dbn_marginal_from_bel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function marginal = dbn_marginal_from_bel(engine, i)
+% DBN_MARGINAL_FROM_BEL Compute the marginal on a node given the current belief state (bk)
+% marginal = dbn_marginal_from_bel(engine, i)
+  
+if engine.slice1
+  j = i;
+  c = clq_containing_nodes(engine.sub_engine1, j);
+else
+  bnet = bnet_from_engine(engine);
+  ss = length(bnet.intra);
+  j = i+ss;
+  c = clq_containing_nodes(engine.sub_engine, j);
+end
+assert(c >= 1);
+bigpot = engine.bel_clpot{c};
+
+pot = marginalize_pot(bigpot, j);
+marginal = pot_to_marginal(pot);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/dbn_update_bel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function [engine, loglik] = dbn_update_bel(engine, evidence)
+% DBN_UPDATE_BEL Update the belief state (bk)
+% [engine, loglik] = dbn_update_bel(engine, evidence)
+%
+% evidence{i,1} contains the evidence on node i in slice t-1
+% evidence{i,2} contains the evidence on node i in slice t
+
+oldbel = engine.bel;
+
+ss = size(evidence, 1);
+bnet = bnet_from_engine(engine);
+CPDpot = cell(1, ss);
+for n=1:ss
+  fam = family(bnet.dag, n, 2);
+  e = bnet.equiv_class(n, 2);
+  CPDpot{n} = convert_to_pot(bnet.CPD{e}, engine.pot_type, fam(:), evidence);
+end
+
+observed = ~isemptycell(evidence);
+onodes2 = find(observed(:));
+clqs = [engine.clq_ass_to_cluster(:,1); engine.clq_ass_to_node(:,2)];
+pots = [oldbel(:); CPDpot(:)];
+
+[clpot, loglik] = enter_soft_evidence(engine.sub_engine, clqs, pots, onodes2(:), engine.pot_type);
+
+C = length(engine.clusters);
+newbel = cell(1,C);
+for c=1:C
+  k = engine.clq_ass_to_cluster(c,2);
+  cl = engine.clusters{c};
+  newbel{c} = marginalize_pot(clpot{k}, cl+ss); % extract slice 2 posterior
+  newbel{c} = set_domain_pot(newbel{c}, cl); % shift back to slice 1 for re-use as prior
+end
+
+engine.bel = newbel;
+engine.bel_clpot = clpot;
+engine.slice1 = 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/dbn_update_bel1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function [engine, loglik] = dbn_update_bel1(engine, evidence)
+% DBN_UPDATE_BEL1 Update  the initial belief state (bk)
+% engine = dbn_update_bel1(engine, evidence)
+%
+% evidence{i} has the evidence on node i for slice 1
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+CPDpot = cell(1,ss);      
+t = 1;
+for n=1:ss
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n, 1);
+  CPDpot{n} = convert_to_pot(bnet.CPD{e}, engine.pot_type, fam(:), evidence);
+end
+
+onodes = find(~isemptycell(evidence));
+
+[clpot, loglik] = enter_soft_evidence(engine.sub_engine1, engine.clq_ass_to_node1, CPDpot, onodes, engine.pot_type);
+
+C  = length(engine.clusters);
+newbel = cell(1,C);
+for c=1:C
+  k = engine.clq_ass_to_cluster1(c);
+  newbel{c} = marginalize_pot(clpot{k}, engine.clusters{c});
+end
+
+engine.bel = newbel;
+engine.bel_clpot = clpot;
+engine.slice1 = 1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (bk)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product instead of sum-product [0]
+% filter -   if 1, do filtering, else smoothing [0]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+maximize = 0;
+filter = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1}; 
+     case 'filter', filter = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+[ss T] = size(evidence);
+engine.filter = filter;
+engine.maximize = maximize;
+engine.T = T;
+
+if maximize
+  error('BK does not yet support max propagation')
+  % because it calls enter_soft_evidence, not enter_evidence
+end
+
+observed_bitv = ~isemptycell(evidence);
+onodes = find(observed_bitv);
+bnet = bnet_from_engine(engine);
+pot_type = determine_pot_type(bnet, onodes); 
+CPDpot = convert_dbn_CPDs_to_pots(bnet, evidence, pot_type);
+[engine.clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed_bitv, pot_type, filter);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/enter_soft_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,88 @@
+function [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (bk)
+% [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+
+[ss T] = size(CPDpot);
+C = length(engine.clusters);
+Q = length(cliques_from_engine(engine.sub_engine));
+Q1 = length(cliques_from_engine(engine.sub_engine1));
+clpot = cell(Q,T);
+alpha = cell(C,T);
+
+% Forwards
+% The method is a generalization of the following HMM equation:
+% alpha(j,t) = normalise( (sum_i alpha(i,t-1) * transmat(i,j)) * obsmat(j,t) )
+% where alpha(j,t) = Pr(Q(t)=j | y(1:t))
+t = 1;
+[clpot(1:Q1,t), logscale(t)] = enter_soft_evidence(engine.sub_engine1, engine.clq_ass_to_node1(:), ...
+					   CPDpot(:,1), find(observed(:,1)), pot_type);
+for c=1:C
+  k = engine.clq_ass_to_cluster1(c);
+  alpha{c,t} = marginalize_pot(clpot{k,t}, engine.clusters{c});
+end
+% For filtering, clpot{1} contains evidence on slice 1 only
+
+%fprintf('alphas t=%d\n', t);
+%for c=1:8
+%  temp = pot_to_marginal(alpha{c,t});
+%  temp.T
+%end
+
+% clpot{t} contains evidence from slices t-1, t for t > 1
+clqs = [engine.clq_ass_to_cluster(:,1); engine.clq_ass_to_node(:,2)];
+for t=2:T
+  pots = [alpha(:,t-1); CPDpot(:,t)];
+  [clpot(:,t), logscale(t)] = enter_soft_evidence(engine.sub_engine, clqs, pots, find(observed(:,t-1:t)),  pot_type);
+  for c=1:C
+    k = engine.clq_ass_to_cluster(c,2);
+    cl = engine.clusters{c};
+    alpha{c,t} = marginalize_pot(clpot{k,t}, cl+ss); % extract slice 2 posterior
+    alpha{c,t} = set_domain_pot(alpha{c,t}, cl); % shift back to slice 1 for re-use as prior
+  end
+
+end
+
+loglik = sum(logscale);
+
+if filter
+  return;
+end
+
+% Backwards
+% The method is a generalization of the following HMM equation:
+% beta(i,t) = (sum_j transmat(i,j) * obsmat(j,t+1) * beta(j,t+1))
+% where beta(i,t) = Pr(y(t+1:T) | Q(t)=i)
+t = T;
+bnet = bnet_from_engine(engine);
+beta = cell(C,T);
+for c=1:C
+  beta{c,t} = mk_initial_pot(pot_type, engine.clusters{c} + ss, bnet.node_sizes(:), bnet.cnodes(:), ...
+			     find(observed(:,t-1:t)));
+end
+for t=T-1:-1:1
+  clqs = [engine.clq_ass_to_cluster(:,2); engine.clq_ass_to_node(:,2)];
+  pots = [beta(:,t+1); CPDpot(:,t+1)];
+  temp = enter_soft_evidence(engine.sub_engine, clqs, pots, find(observed(:,t:t+1)),  pot_type);
+  for c=1:C
+    k = engine.clq_ass_to_cluster(c,1);
+    cl = engine.clusters{c};
+    beta{c,t} = marginalize_pot(temp{k}, cl); % extract slice 1
+    beta{c,t} = set_domain_pot(beta{c,t}, cl + ss); % shift fwd to slice 2
+  end
+end
+
+% Combine
+% The method is a generalization of the following HMM equation:
+% xi(i,j,t) = normalise( alpha(i,t) * transmat(i,j) * obsmat(j,t+1) * beta(j,t+1) )
+% where xi(i,j,t) = Pr(Q(t)=i, Q(t+1)=j | y(1:T))
+for t=1:T-1
+  clqs = [engine.clq_ass_to_cluster(:); engine.clq_ass_to_node(:,2)];
+  pots = [alpha(:,t); beta(:,t+1); CPDpot(:,t+1)];
+  clpot(:,t+1) = enter_soft_evidence(engine.sub_engine, clqs, pots, find(observed(:,t:t+1)),  pot_type);
+end
+% for smoothing, clpot{1} is undefined
+for k=1:Q1
+  clpot{k,1} = []; 
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function m = marginal_family(engine, i, t)
+% MARGINAL_FAMILY Compute the marginal on the specified family (bk)
+% marginal = marginal_family(engine, i, t)
+
+% This is just like inf_engine/marginal_family, except when we call
+% marginal_nodes, we provide a 4th argument, to tell it's a family.
+
+if nargin < 3, t = 1; end
+
+bnet = bnet_from_engine(engine);
+if t==1
+  m = marginal_nodes(engine, family(bnet.dag, i), t, 1);
+else
+  ss = length(bnet.intra);
+  fam = family(bnet.dag, i+ss);
+  if any(fam<=ss)
+    % i has a parent in the preceeding slice
+    % Hence the lowest numbered slice containing the family is t-1
+    m = marginal_nodes(engine, fam, t-1, 1);
+  else
+    % The family all fits inside slice t
+    % Hence shift the indexes back to slice 1
+    m = marginal_nodes(engine, fam-ss, t, 1);
+  end
+end     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+function marginal = marginal_nodes(engine, nodes, t, fam)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (bk)
+%
+%   marginal = marginal_nodes(engine, i, t)
+% returns Pr(X(i,t) | Y(1:T)), where X(i,t) is the i'th node in the t'th slice.
+% If enter_evidence used filtering instead of smoothing, this will return  Pr(X(i,t) | Y(1:t)).
+%
+%   marginal = marginal_nodes(engine, query, t)
+% returns Pr(X(query(1),t), ... X(query(end),t) | Y(1:T)),
+% where X(q,t) is the q'th node in the t'th slice. If q > ss (slice size), this is equal
+% to X(q mod ss, t+1). That is, 't' specifies the time slice of the earliest node.
+% 'query' cannot span more than 2 time slices.
+% Example:
+% Consider a DBN with 2 nodes per slice.
+% Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3.
+
+if nargin < 3, t = 1; end
+if nargin < 4, fam = 0; else fam = 1; end
+
+
+% clpot{t} contains slice t-1 and t
+% Example
+% clpot #: 1    2    3
+% slices:  1  1,2  2,3
+% For filtering, we must take care not to take future evidence into account.
+% For smoothing, clpot{1} does not exist.
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+
+nodes2 = nodes;
+if ~engine.filter
+  if t < engine.T
+    slice = t+1;
+  else % earliest t is T, so all nodes fit in one slice
+    slice = engine.T;
+    nodes2 = nodes + ss;
+  end
+else
+  if t == 1
+   slice = 1;
+  else
+    if all(nodes<=ss)
+      slice = t;
+      nodes2 = nodes + ss;
+    elseif t == engine.T
+      slice = t;
+    else
+      slice = t + 1;
+    end
+  end
+end
+  
+if engine.filter & t==1
+  c = clq_containing_nodes(engine.sub_engine1, nodes2, fam);
+else
+  c = clq_containing_nodes(engine.sub_engine, nodes2, fam);
+end
+assert(c >= 1);
+bigpot = engine.clpot{c, slice};
+
+pot = marginalize_pot(bigpot, nodes2);
+marginal = pot_to_marginal(pot);
+
+% we convert the domain to the unrolled numbering system
+% so that update_ess extracts the right evidence.
+marginal.domain = nodes+(t-1)*ss;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@bk_inf_engine/update_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function engine = update_engine(engine, newCPDs)
+% UPDATE_ENGINE Update the engine to take into account the new parameters (bk)
+% engine = update_engine(engine, newCPDs)
+
+engine.inf_engine = update_engine(engine.inf_engine, newCPDs);
+engine.sub_engine = update_engine(engine.sub_engine, newCPDs);
+
+bnet = bnet_from_engine(engine);
+eclass1 = bnet.equiv_class(:,1);
+engine.sub_engine1 = update_engine(engine.sub_engine1, newCPDs(1:max(eclass1)));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+/cbk_inf_engine.m/1.1.1.1/Mon Nov 22 22:15:34 2004//
+/dbn_init_bel.m/1.1.1.1/Tue Jul 29 02:44:58 2003//
+/dbn_marginal_from_bel.m/1.1.1.1/Tue Jul 29 02:44:58 2003//
+/dbn_update_bel.m/1.1.1.1/Tue Jul 29 02:44:58 2003//
+/dbn_update_bel1.m/1.1.1.1/Tue Jul 29 02:44:58 2003//
+/enter_evidence.m/1.1.1.1/Mon Jan 12 20:53:54 2004//
+/enter_soft_evidence.m/1.1.1.1/Wed Feb  4 07:42:38 2004//
+/junk/1.1.1.1/Wed Nov 24 20:12:38 2004//
+/marginal_family.m/1.1.1.1/Tue Jul 29 02:44:58 2003//
+/marginal_nodes.m/1.1.1.1/Tue Dec 16 06:17:18 2003//
+/update_engine.m/1.1.1.1/Tue Jul 29 02:44:58 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@cbk_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/cbk_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,175 @@
+function engine = cbk_inf_engine(bnet, varargin)
+% Just the same as bk_inf_engine, but you can specify overlapping clusters.
+
+ss = length(bnet.intra);
+% set default params
+clusters = 'exact';
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'clusters',  clusters = args{i+1};
+     otherwise, error(['unrecognized argument ' args{i}])
+    end
+  end
+end
+
+if strcmp(clusters, 'exact')
+  %clusters = { compute_interface_nodes(bnet.intra, bnet.inter) };
+  clusters = { 1:ss };
+elseif strcmp(clusters, 'ff')
+  clusters = num2cell(1:ss);
+end
+
+
+% We need to insert the prior on the clusters in slice 1,
+% and extract the posterior on the clusters in slice 2.
+% We don't need to care about the separators, b/c they're subsets of the clusters.
+C = length(clusters);
+clusters2 = cell(1,2*C);
+clusters2(1:C) = clusters;
+for c=1:C
+  clusters2{c+C} = clusters{c} + ss;
+end
+
+onodes = bnet.observed;
+obs_nodes = [onodes(:) onodes(:)+ss];
+engine.sub_engine = jtree_inf_engine(bnet, 'clusters', clusters2);
+
+%FH >>>
+%Compute separators. 
+ns = bnet.node_sizes(:,1);
+ns(onodes) = 1;
+[clusters, separators] = build_jt(clusters, 1:length(ns), ns);
+S = length(separators);
+engine.separators = separators;
+
+%Compute size of clusters.
+cl_sizes = zeros(1,C);
+for c=1:C
+    cl_sizes(c) = prod(ns(clusters{c}));
+end
+
+%Assign separators to the smallest cluster subsuming them.
+engine.cluster_ass_to_separator = zeros(S, 1);
+for s=1:S
+    subsuming_clusters = [];
+    %find smallest cluster containing s
+    for c=1:C
+        if mysubset(separators{s}, clusters{c}) 
+            subsuming_clusters(end+1) = c;
+        end
+    end
+    c = argmin(cl_sizes(subsuming_clusters));
+    engine.cluster_ass_to_separator(s) = subsuming_clusters(c);
+end
+
+%<<< FH
+
+engine.clq_ass_to_cluster = zeros(C, 2);
+for c=1:C
+  engine.clq_ass_to_cluster(c,1) = clq_containing_nodes(engine.sub_engine, clusters{c});
+  engine.clq_ass_to_cluster(c,2) = clq_containing_nodes(engine.sub_engine, clusters{c}+ss);
+end
+engine.clusters = clusters;
+
+engine.clq_ass_to_node = zeros(ss, 2);
+for i=1:ss
+  engine.clq_ass_to_node(i, 1) = clq_containing_nodes(engine.sub_engine, i);
+  engine.clq_ass_to_node(i, 2) = clq_containing_nodes(engine.sub_engine, i+ss);
+end
+
+
+
+% Also create an engine just for slice 1
+bnet1 = mk_bnet(bnet.intra1, bnet.node_sizes_slice, 'discrete', myintersect(bnet.dnodes, 1:ss), ...
+		'equiv_class', bnet.equiv_class(:,1), 'observed', onodes);
+for i=1:max(bnet1.equiv_class)
+  bnet1.CPD{i} = bnet.CPD{i};
+end
+
+engine.sub_engine1 = jtree_inf_engine(bnet1, 'clusters', clusters);
+
+engine.clq_ass_to_cluster1 = zeros(1,C);
+for c=1:C
+  engine.clq_ass_to_cluster1(c) = clq_containing_nodes(engine.sub_engine1, clusters{c});
+end
+
+engine.clq_ass_to_node1 = zeros(1, ss);
+for i=1:ss
+  engine.clq_ass_to_node1(i) = clq_containing_nodes(engine.sub_engine1, i);
+end
+
+engine.clpot = []; % this is where we store the results between enter_evidence and marginal_nodes
+engine.filter = [];
+engine.maximize = [];
+engine.T = [];
+
+engine.bel = [];
+engine.bel_clpot = [];
+engine.slice1 = [];
+%engine.pot_type = 'cg';
+% hack for online inference so we can cope with hidden Gaussians and discrete
+% it will not affect the pot type used in enter_evidence
+engine.pot_type = determine_pot_type(bnet, onodes);
+
+engine = class(engine, 'cbk_inf_engine', inf_engine(bnet));
+
+
+
+
+function [cliques, seps, jt_size] = build_jt(cliques, vars, ns)
+% BUILD_JT connects the cliques into a jtree, computes the respective 
+% separators and the size of the resulting jtree.
+%
+% [cliques, seps, jt_size] = build_jt(cliques, vars, ns)
+% ns(i) has to hold the size of vars(i)
+% vars has to be a superset of the union of cliques.
+
+%======== Compute the jtree with tool from BNT. This wants the vars to be 1:N.
+%==== Map from nodes to their indices.
+%disp('Computing jtree for cliques with vars and ns:');
+%cliques
+%vars
+%ns'
+
+inv_nodes = sparse(1,max(vars));
+N = length(vars);
+for i=1:N
+    inv_nodes(vars(i)) = i;
+end
+
+tmp_cliques = cell(1,length(cliques));
+%==== Temporarily map clique vars to their indices.
+for i=1:length(cliques)
+    tmp_cliques{i} = inv_nodes(cliques{i});
+end
+
+%=== Compute the jtree, using BNT.
+[jtree, root, B, w] = cliques_to_jtree(tmp_cliques, ns);
+
+
+%======== Now, compute the separators between connected cliques and their weights.
+seps = {};
+s_w = [];
+[is,js] = find(jtree > 0);
+for k=1:length(is)
+  i = is(k); j = js(k);
+  sep = vars(find(B(i,:) & B(j,:))); % intersect(cliques{i}, cliques{j});
+  if i>j | length(sep) == 0, continue; end;
+  seps{end+1} = sep;
+  s_w(end+1) = prod(ns(inv_nodes(seps{end})));
+end
+
+cl_w = sum(w);
+sep_w = sum(s_w);
+assert(cl_w > sep_w, 'Weight of cliques must be bigger than weight of separators');
+
+jt_size = cl_w + sep_w;
+% jt.cliques = cliques;
+% jt.seps = seps;
+% jt.size = jt_size;
+% jt.ns = ns';
+% jt;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/dbn_init_bel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function engine = dbn_init_bel(engine)
+% DBN_INIT_BEL Compute the initial belief state (bk)
+% engine = dbn_init_bel(engine))
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+evidence = cell(1,ss);
+engine = dbn_update_bel1(engine, evidence);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/dbn_marginal_from_bel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function marginal = dbn_marginal_from_bel(engine, i)
+% DBN_MARGINAL_FROM_BEL Compute the marginal on a node given the current belief state (bk)
+% marginal = dbn_marginal_from_bel(engine, i)
+  
+if engine.slice1
+  j = i;
+  c = clq_containing_nodes(engine.sub_engine1, j);
+else
+  bnet = bnet_from_engine(engine);
+  ss = length(bnet.intra);
+  j = i+ss;
+  c = clq_containing_nodes(engine.sub_engine, j);
+end
+assert(c >= 1);
+bigpot = engine.bel_clpot{c};
+
+pot = marginalize_pot(bigpot, j);
+marginal = pot_to_marginal(pot);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/dbn_update_bel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function [engine, loglik] = dbn_update_bel(engine, evidence)
+% DBN_UPDATE_BEL Update the belief state (bk)
+% [engine, loglik] = dbn_update_bel(engine, evidence)
+%
+% evidence{i,1} contains the evidence on node i in slice t-1
+% evidence{i,2} contains the evidence on node i in slice t
+
+oldbel = engine.bel;
+
+ss = size(evidence, 1);
+bnet = bnet_from_engine(engine);
+CPDpot = cell(1, ss);
+for n=1:ss
+  fam = family(bnet.dag, n, 2);
+  e = bnet.equiv_class(n, 2);
+  CPDpot{n} = convert_to_pot(bnet.CPD{e}, engine.pot_type, fam(:), evidence);
+end
+
+observed = ~isemptycell(evidence);
+onodes2 = find(observed(:));
+clqs = [engine.clq_ass_to_cluster(:,1); engine.clq_ass_to_node(:,2)];
+pots = [oldbel(:); CPDpot(:)];
+
+[clpot, loglik] = enter_soft_evidence(engine.sub_engine, clqs, pots, onodes2(:), engine.pot_type);
+
+C = length(engine.clusters);
+newbel = cell(1,C);
+for c=1:C
+  k = engine.clq_ass_to_cluster(c,2);
+  cl = engine.clusters{c};
+  newbel{c} = marginalize_pot(clpot{k}, cl+ss); % extract slice 2 posterior
+  newbel{c} = set_domain_pot(newbel{c}, cl); % shift back to slice 1 for re-use as prior
+end
+
+engine.bel = newbel;
+engine.bel_clpot = clpot;
+engine.slice1 = 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/dbn_update_bel1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function [engine, loglik] = dbn_update_bel1(engine, evidence)
+% DBN_UPDATE_BEL1 Update  the initial belief state (bk)
+% engine = dbn_update_bel1(engine, evidence)
+%
+% evidence{i} has the evidence on node i for slice 1
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+CPDpot = cell(1,ss);      
+t = 1;
+for n=1:ss
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n, 1);
+  CPDpot{n} = convert_to_pot(bnet.CPD{e}, engine.pot_type, fam(:), evidence);
+end
+
+onodes = find(~isemptycell(evidence));
+
+[clpot, loglik] = enter_soft_evidence(engine.sub_engine1, engine.clq_ass_to_node1, CPDpot, onodes, engine.pot_type);
+
+C  = length(engine.clusters);
+newbel = cell(1,C);
+for c=1:C
+  k = engine.clq_ass_to_cluster1(c);
+  newbel{c} = marginalize_pot(clpot{k}, engine.clusters{c});
+end
+
+engine.bel = newbel;
+engine.bel_clpot = clpot;
+engine.slice1 = 1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% this is unchanged from bk_inf_engine.
+% ENTER_EVIDENCE Add the specified evidence to the network (bk)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product instead of sum-product [0]
+% filter -   if 1, do filtering, else smoothing [0]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+maximize = 0;
+filter = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1}; 
+     case 'filter', filter = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+[ss T] = size(evidence);
+engine.filter = filter;
+engine.maximize = maximize;
+engine.T = T;
+
+if maximize
+  error('BK does not yet support max propagation')
+  % because it calls enter_soft_evidence, not enter_evidence
+end
+
+observed_bitv = ~isemptycell(evidence);
+onodes = find(observed_bitv);
+bnet = bnet_from_engine(engine);
+pot_type = determine_pot_type(bnet, onodes); 
+CPDpot = convert_dbn_CPDs_to_pots(bnet, evidence, pot_type);
+[engine.clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed_bitv, pot_type, filter);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/enter_soft_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,115 @@
+function [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (bk)
+% [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+
+[ss T] = size(CPDpot);
+C = length(engine.clusters);
+S = length(engine.separators);
+Q = length(cliques_from_engine(engine.sub_engine));
+Q1 = length(cliques_from_engine(engine.sub_engine1));
+clpot = cell(Q,T);
+alpha = cell(C,T);
+
+% Forwards
+% The method is a generalization of the following HMM equation:
+% alpha(j,t) = normalise( (sum_i alpha(i,t-1) * transmat(i,j)) * obsmat(j,t) )
+% where alpha(j,t) = Pr(Q(t)=j | y(1:t))
+t = 1;
+[clpot(1:Q1,t), logscale(t)] = enter_soft_evidence(engine.sub_engine1, engine.clq_ass_to_node1(:), ...
+					   CPDpot(:,1), find(observed(:,1)), pot_type);
+for c=1:C
+  k = engine.clq_ass_to_cluster1(c);
+  alpha{c,t} = marginalize_pot(clpot{k,t}, engine.clusters{c});
+end
+
+%=== FH: For each separator s, divide some cluster potential by s's potential
+alpha_orig = alpha(:,t);
+for s=1:S
+  c = engine.cluster_ass_to_separator(s);
+  alpha{c,t} = divide_by_pot(alpha{c,t}, marginalize_pot(alpha_orig{c}, engine.separators{s}));
+end
+
+% For filtering, clpot{1} contains evidence on slice 1 only
+
+%fprintf('alphas t=%d\n', t);
+%for c=1:8
+%  temp = pot_to_marginal(alpha{c,t});
+%  temp.T
+%end
+
+% clpot{t} contains evidence from slices t-1, t for t > 1
+clqs = [engine.clq_ass_to_cluster(:,1); engine.clq_ass_to_node(:,2)];
+for t=2:T
+  pots = [alpha(:,t-1); CPDpot(:,t)];
+  [clpot(:,t), logscale(t)] = enter_soft_evidence(engine.sub_engine, clqs, pots, find(observed(:,t-1:t)),  pot_type);
+  for c=1:C
+    k = engine.clq_ass_to_cluster(c,2);
+    cl = engine.clusters{c};
+    alpha{c,t} = marginalize_pot(clpot{k,t}, cl+ss); % extract slice 2 posterior
+    alpha{c,t} = set_domain_pot(alpha{c,t}, cl); % shift back to slice 1 for re-use as prior
+  end
+  %=== FH: For each separator s, divide some cluster potential by s's potential
+  alpha_orig = alpha(:,t);
+  for s=1:S
+    c = engine.cluster_ass_to_separator(s);
+    alpha{c,t} = divide_by_pot(alpha{c,t}, marginalize_pot(alpha_orig{c}, engine.separators{s}));
+  end
+end
+
+loglik = sum(logscale); 
+
+if filter
+  return;
+end
+
+% Backwards
+% The method is a generalization of the following HMM equation:
+% beta(i,t) = (sum_j transmat(i,j) * obsmat(j,t+1) * beta(j,t+1))
+% where beta(i,t) = Pr(y(t+1:T) | Q(t)=i)
+t = T;
+bnet = bnet_from_engine(engine);
+beta = cell(C,T);
+for c=1:C
+  beta{c,t} = mk_initial_pot(pot_type, engine.clusters{c} + ss, bnet.node_sizes(:), bnet.cnodes(:), ...
+			     find(observed(:,t-1:t)));
+end
+%=== FH: For each separator s, divide some cluster potential by s's potential
+beta_orig = beta(:,t);
+for s=1:S
+  c = engine.cluster_ass_to_separator(s);
+  beta{c,t} = divide_by_pot(beta{c,t}, marginalize_pot(beta_orig{c}, engine.separators{s}+ss));
+end
+
+for t=T-1:-1:1
+  clqs = [engine.clq_ass_to_cluster(:,2); engine.clq_ass_to_node(:,2)];
+  pots = [beta(:,t+1); CPDpot(:,t+1)];
+  temp = enter_soft_evidence(engine.sub_engine, clqs, pots, find(observed(:,t:t+1)),  pot_type);
+  for c=1:C
+    k = engine.clq_ass_to_cluster(c,1);
+    cl = engine.clusters{c};
+    beta{c,t} = marginalize_pot(temp{k}, cl); % extract slice 1
+    beta{c,t} = set_domain_pot(beta{c,t}, cl + ss); % shift fwd to slice 2
+  end
+  %=== FH: For each separator s, divide some cluster potential by s's potential
+  beta_orig = beta(:,t);
+  for s=1:S
+    c = engine.cluster_ass_to_separator(s);
+    beta{c,t} = divide_by_pot(beta{c,t}, marginalize_pot(beta_orig{c}, engine.separators{s}+ss));
+  end
+end
+
+% Combine
+% The method is a generalization of the following HMM equation:
+% xi(i,j,t) = normalise( alpha(i,t) * transmat(i,j) * obsmat(j,t+1) * beta(j,t+1) )
+% where xi(i,j,t) = Pr(Q(t)=i, Q(t+1)=j | y(1:T))
+for t=1:T-1
+  clqs = [engine.clq_ass_to_cluster(:); engine.clq_ass_to_node(:,2)];
+  pots = [alpha(:,t); beta(:,t+1); CPDpot(:,t+1)];
+  clpot(:,t+1) = enter_soft_evidence(engine.sub_engine, clqs, pots, find(observed(:,t:t+1)),  pot_type);
+end
+% for smoothing, clpot{1} is undefined
+for k=1:Q1
+  clpot{k,1} = []; 
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/junk	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,176 @@
+function engine = cbk_inf_engine(bnet, varargin)
+% Just the same as bk_inf_engine, but you can specify overlapping clusters.
+
+ss = length(bnet.intra);
+% set default params
+clusters = 'exact';
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'clusters',  clusters = args{i+1};
+     otherwise, error(['unrecognized argument ' args{i}])
+    end
+  end
+end
+
+if strcmp(clusters, 'exact')
+  %clusters = { compute_interface_nodes(bnet.intra, bnet.inter) };
+  clusters = { 1:ss };
+elseif strcmp(clusters, 'ff')
+  clusters = num2cell(1:ss);
+end
+
+
+% We need to insert the prior on the clusters in slice 1,
+% and extract the posterior on the clusters in slice 2.
+% We don't need to care about the separators, b/c they're subsets of the clusters.
+C = length(clusters);
+clusters2 = cell(1,2*C);
+clusters2(1:C) = clusters;
+for c=1:C
+  clusters2{c+C} = clusters{c} + ss;
+end
+
+onodes = bnet.observed;
+obs_nodes = [onodes(:) onodes(:)+ss];
+engine.sub_engine = jtree_inf_engine(bnet, 'clusters', clusters2);
+
+%FH >>>
+%Compute separators. 
+ns = bnet.node_sizes(:,1);
+ns(onodes) = 1;
+[clusters, separators] = build_jt(clusters, 1:length(ns), ns);
+S = length(separators);
+engine.separators = separators;
+
+%Compute size of clusters.
+cl_sizes = zeros(1,C);
+for c=1:C
+    cl_sizes(c) = prod(ns(clusters{c}));
+end
+
+%Assign separators to the smallest cluster subsuming them.
+engine.cluster_ass_to_separator = zeros(S, 1);
+for s=1:S
+    subsuming_clusters = [];
+    %find smaunk
+    
+    for c=1:C
+        if mysubset(separators{s}, clusters{c}) 
+            subsuming_clusters(end+1) = c;
+        end
+    end
+    c = argmin(cl_sizes(subsuming_clusters));
+    engine.cluster_ass_to_separator(s) = subsuming_clusters(c);
+end
+
+%<<< FH
+
+engine.clq_ass_to_cluster = zeros(C, 2);
+for c=1:C
+  engine.clq_ass_to_cluster(c,1) = clq_containing_nodes(engine.sub_engine, clusters{c});
+  engine.clq_ass_to_cluster(c,2) = clq_containing_nodes(engine.sub_engine, clusters{c}+ss);
+end
+engine.clusters = clusters;
+
+engine.clq_ass_to_node = zeros(ss, 2);
+for i=1:ss
+  engine.clq_ass_to_node(i, 1) = clq_containing_nodes(engine.sub_engine, i);
+  engine.clq_ass_to_node(i, 2) = clq_containing_nodes(engine.sub_engine, i+ss);
+end
+
+
+
+% Also create an engine just for slice 1
+bnet1 = mk_bnet(bnet.intra1, bnet.node_sizes_slice, 'discrete', myintersect(bnet.dnodes, 1:ss), ...
+		'equiv_class', bnet.equiv_class(:,1), 'observed', onodes);
+for i=1:max(bnet1.equiv_class)
+  bnet1.CPD{i} = bnet.CPD{i};
+end
+
+engine.sub_engine1 = jtree_inf_engine(bnet1, 'clusters', clusters);
+
+engine.clq_ass_to_cluster1 = zeros(1,C);
+for c=1:C
+  engine.clq_ass_to_cluster1(c) = clq_containing_nodes(engine.sub_engine1, clusters{c});
+end
+
+engine.clq_ass_to_node1 = zeros(1, ss);
+for i=1:ss
+  engine.clq_ass_to_node1(i) = clq_containing_nodes(engine.sub_engine1, i);
+end
+
+engine.clpot = []; % this is where we store the results between enter_evidence and marginal_nodes
+engine.filter = [];
+engine.maximize = [];
+engine.T = [];
+
+engine.bel = [];
+engine.bel_clpot = [];
+engine.slice1 = [];
+%engine.pot_type = 'cg';
+% hack for online inference so we can cope with hidden Gaussians and discrete
+% it will not affect the pot type used in enter_evidence
+engine.pot_type = determine_pot_type(bnet, onodes);
+
+engine = class(engine, 'cbk_inf_engine', inf_engine(bnet));
+
+
+
+
+function [cliques, seps, jt_size] = build_jt(cliques, vars, ns)
+% BUILD_JT connects the cliques into a jtree, computes the respective 
+% separators and the size of the resulting jtree.
+%
+% [cliques, seps, jt_size] = build_jt(cliques, vars, ns)
+% ns(i) has to hold the size of vars(i)
+% vars has to be a superset of the union of cliques.
+
+%======== Compute the jtree with tool from BNT. This wants the vars to be 1:N.
+%==== Map from nodes to their indices.
+%disp('Computing jtree for cliques with vars and ns:');
+%cliques
+%vars
+%ns'
+
+inv_nodes = sparse(1,max(vars));
+N = length(vars);
+for i=1:N
+    inv_nodes(vars(i)) = i;
+end
+
+tmp_cliques = cell(1,length(cliques));
+%==== Temporarily map clique vars to their indices.
+for i=1:length(cliques)
+    tmp_cliques{i} = inv_nodes(cliques{i});
+end
+
+%=== Compute the jtree, using BNT.
+[jtree, root, B, w] = cliques_to_jtree(tmp_cliques, ns);
+
+
+%======== Now, compute the separators between connected cliques and their weights.
+seps = {};
+s_w = [];
+[is,js] = find(jtree > 0);
+for k=1:length(is)
+  i = is(k); j = js(k);
+  sep = vars(find(B(i,:) & B(j,:))); % intersect(cliques{i}, cliques{j});
+  if i>j | length(sep) == 0, continue; end;
+  seps{end+1} = sep;
+  s_w(end+1) = prod(ns(inv_nodes(seps{end})));
+end
+
+cl_w = sum(w);
+sep_w = sum(s_w);
+assert(cl_w > sep_w, 'Weight of cliques must be bigger than weight of separators');
+
+jt_size = cl_w + sep_w;
+% jt.cliques = cliques;
+% jt.seps = seps;
+% jt.size = jt_size;
+% jt.ns = ns';
+% jt;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function m = marginal_family(engine, i, t)
+% MARGINAL_FAMILY Compute the marginal on the specified family (bk)
+% marginal = marginal_family(engine, i, t)
+
+% This is just like inf_engine/marginal_family, except when we call
+% marginal_nodes, we provide a 4th argument, to tell it's a family.
+
+if nargin < 3, t = 1; end
+
+bnet = bnet_from_engine(engine);
+if t==1
+  m = marginal_nodes(engine, family(bnet.dag, i), t, 1);
+else
+  ss = length(bnet.intra);
+  fam = family(bnet.dag, i+ss);
+  if any(fam<=ss)
+    % i has a parent in the preceeding slice
+    % Hence the lowest numbered slice containing the family is t-1
+    m = marginal_nodes(engine, fam, t-1, 1);
+  else
+    % The family all fits inside slice t
+    % Hence shift the indexes back to slice 1
+    m = marginal_nodes(engine, fam-ss, t, 1);
+  end
+end     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+function marginal = marginal_nodes(engine, nodes, t, fam)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (bk)
+%
+%   marginal = marginal_nodes(engine, i, t)
+% returns Pr(X(i,t) | Y(1:T)), where X(i,t) is the i'th node in the t'th slice.
+% If enter_evidence used filtering instead of smoothing, this will return  Pr(X(i,t) | Y(1:t)).
+%
+%   marginal = marginal_nodes(engine, query, t)
+% returns Pr(X(query(1),t), ... X(query(end),t) | Y(1:T)),
+% where X(q,t) is the q'th node in the t'th slice. If q > ss (slice size), this is equal
+% to X(q mod ss, t+1). That is, 't' specifies the time slice of the earliest node.
+% 'query' cannot span more than 2 time slices.
+% Example:
+% Consider a DBN with 2 nodes per slice.
+% Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3.
+
+if nargin < 3, t = 1; end
+if nargin < 4, fam = 0; else fam = 1; end
+
+
+% clpot{t} contains slice t-1 and t
+% Example
+% clpot #: 1    2    3
+% slices:  1  1,2  2,3
+% For filtering, we must take care not to take future evidence into account.
+% For smoothing, clpot{1} does not exist.
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+
+nodes2 = nodes;
+if ~engine.filter
+  if t < engine.T
+    slice = t+1;
+  else % earliest t is T, so all nodes fit in one slice
+    slice = engine.T;
+    nodes2 = nodes + ss;
+  end
+else
+  if t == 1
+   slice = 1;
+  else
+    if all(nodes<=ss)
+      slice = t;
+      nodes2 = nodes + ss;
+    elseif t == engine.T
+      slice = t;
+    else
+      slice = t + 1;
+    end
+  end
+end
+  
+if engine.filter & t==1
+  c = clq_containing_nodes(engine.sub_engine1, nodes2, fam);
+else
+  c = clq_containing_nodes(engine.sub_engine, nodes2, fam);
+end
+assert(c >= 1);
+bigpot = engine.clpot{c, slice};
+
+pot = marginalize_pot(bigpot, nodes2);
+marginal = pot_to_marginal(pot);
+
+% we convert the domain to the unrolled numbering system
+% so that update_ess extracts the right evidence.
+marginal.domain = nodes+(t-1)*ss;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@cbk_inf_engine/update_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function engine = update_engine(engine, newCPDs)
+% UPDATE_ENGINE Update the engine to take into account the new parameters (bk)
+% engine = update_engine(engine, newCPDs)
+
+engine.inf_engine = update_engine(engine.inf_engine, newCPDs);
+engine.sub_engine = update_engine(engine.sub_engine, newCPDs);
+
+bnet = bnet_from_engine(engine);
+eclass1 = bnet.equiv_class(:,1);
+engine.sub_engine1 = update_engine(engine.sub_engine1, newCPDs(1:max(eclass1)));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_soft_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/ff_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/filter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/smooth_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@ff_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/enter_soft_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_soft_evidence1.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@ff_inf_engine/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function [marginals, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (bk_ff)
+% [marginals, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+
+assert(pot_type == 'd');
+[ss T] = size(CPDpot);
+fwd = cell(ss,T);
+hnodes = engine.hnodes(:)';
+onodes = engine.onodes(:)';
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+onodes2 = [onodes onodes+ss];
+ns(onodes2) = 1;
+
+logscale = zeros(1,T);
+local_logscale = zeros(1,length(hnodes));
+
+t = 1;
+for i=hnodes
+  fwd{i,t} = CPDpot{i,t};
+end
+for i=onodes
+  p = parents(bnet.dag, i);
+  assert(length(p)==1);
+  ev = marginalize_pot(CPDpot{i,t}, p);
+  fwd{p,t} = multiply_by_pot(fwd{p,t}, ev);
+end
+for i=hnodes
+  [fwd{i,t}, local_logscale(i)] = normalize_pot(fwd{i,t});
+end
+logscale(t) = sum(local_logscale);
+
+for t=2:T
+  for i=hnodes
+    ps = parents(bnet.dag, i+ss);
+    assert(all(ps<=ss)); % in previous slice
+    prior = CPDpot{i,t};
+    for p=ps(:)'
+      prior = multiply_by_pot(prior, fwd{p,t-1});
+    end
+    fwd{i,t} = marginalize_pot(prior, i+ss);
+    fwd{i,t} = set_domain_pot(fwd{i,t}, i);
+  end
+  for i=onodes
+    p = parents(bnet.dag, i);
+    assert(length(p)==1);
+    temp = pot_to_marginal(CPDpot{i,t}); 
+    ev = dpot(p, ns(p), temp.T);
+    fwd{p,t} = multiply_by_pot(fwd{p,t}, ev);
+  end
+  
+  for i=hnodes
+    [fwd{i,t}, local_logscale(i)] = normalize_pot(fwd{i,t});
+  end
+  logscale(t) = sum(local_logscale);
+end
+
+marginals = fwd;
+loglik = sum(logscale);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,94 @@
+function [marginals, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (ff)
+% [marginals, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+
+assert(pot_type == 'd');
+[ss T] = size(CPDpot);
+fwd = cell(ss,T);
+hnodes = engine.hnodes(:)';
+onodes = engine.onodes(:)';
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+onodes2 = [onodes onodes+ss];
+ns(onodes2) = 1;
+
+logscale = zeros(1,T);
+H = length(hnodes);
+local_logscale = zeros(1,ss);
+
+obschild = zeros(1,ss);
+for i=hnodes
+  ocs = myintersect(children(bnet.dag, i), onodes);
+  assert(length(ocs)==1);
+  obschild(i) = ocs(1);
+end  
+  
+t = 1;
+for i=hnodes
+  fwd{i,t} = CPDpot{i,t};
+  c = obschild(i);
+  temp = pot_to_marginal(CPDpot{c,t}); 
+  ev = dpot(i, ns(i), temp.T);
+  fwd{i,t} = multiply_by_pot(fwd{i,t}, ev);
+  [fwd{i,t}, local_logscale(i)] = normalize_pot(fwd{i,t});
+end
+logscale(t) = sum(local_logscale);
+
+for t=2:T
+  for i=hnodes
+    ps = parents(bnet.dag, i+ss);
+    assert(all(ps<=ss)); % in previous slice
+    prior = CPDpot{i,t};
+    for p=ps(:)'
+      prior = multiply_by_pot(prior, fwd{p,t-1});
+    end
+    fwd{i,t} = marginalize_pot(prior, i+ss);
+    fwd{i,t} = set_domain_pot(fwd{i,t}, i);
+    c = obschild(i);
+    temp = pot_to_marginal(CPDpot{c,t});
+    ev = dpot(i, ns(i), temp.T);
+    fwd{i,t} = multiply_by_pot(fwd{i,t}, ev);
+    [fwd{i,t}, local_logscale(i)] = normalize_pot(fwd{i,t});
+  end
+  logscale(t) = sum(local_logscale);
+end
+
+loglik = sum(logscale);
+
+
+if filter
+  marginals = fwd;
+  return;
+end
+
+back = cell(ss,T);
+t = T;
+for i=hnodes
+  back{i,t} = dpot(i, ns(i));
+  back{i,t} = set_domain_pot(back{i,t}, i+ss);
+end
+for t=T-1:-1:1
+  for i=hnodes
+    pot = CPDpot{i,t+1};
+    pot = multiply_by_pot(pot, back{i,t+1});
+    c = obschild(i);
+    temp = pot_to_marginal(CPDpot{c,t+1});
+    ev = dpot(i, ns(i), temp.T);
+    pot = multiply_by_pot(pot, ev);
+    back{i,t} = marginalize_pot(pot, i);
+    back{i,t} = normalize_pot(back{i,t});
+    back{i,t} = set_domain_pot(back{i,t}, i+ss);
+  end
+end
+
+
+
+% COMBINE
+for t=1:T
+  for i=hnodes
+    back{i,t} = set_domain_pot(back{i,t}, i);
+    fwd{i,t} = multiply_by_pot(fwd{i,t}, back{i,t});
+    marginals{i,t} = normalize_pot(fwd{i,t});
+    %fwdback{i,t} = normalize_pot(multiply_pots(fwd{i,t}, back{i,t}));
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/Old/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function marginal = marginal_family(engine, i, t)
+% MARGINAL_FAMILY Compute the marginal on the specified family (ff)
+% marginal = marginal_family(engine, i, t)
+
+if nargin < 3, t = 1; end
+
+% The method is similar to the following HMM equation:
+% xi(i,j,t) = normalise( alpha(i,t) * transmat(i,j) * obsmat(j,t+1) * beta(j,t+1) )
+% where xi(i,j,t) = Pr(Q(t)=i, Q(t+1)=j | y(1:T))
+
+bnet = bnet_from_engine(engine);
+
+if myismember(i, engine.onodes)
+  ps = parents(bnet.dag, i);
+  p = ps(1);
+  marginal = pot_to_marginal(engine.marginals{p,t});
+  marginal.domain = [p i];
+  return;
+end
+
+if t==1
+  marginal = pot_to_marginal(engine.marginals{i,t});
+  return;
+end
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+pot = engine.CPDpot{i,t};
+c = engine.obschild(i);
+pot = multiply_by_pot(pot, engine.CPDpot{c,t});
+pot = multiply_by_pot(pot, engine.back{i,t});
+ps = parents(bnet.dag, i+ss);
+for p=ps(:)'
+  pot = multiply_by_pot(pot, engine.fwd{p,t-1});
+end
+marginal = pot_to_marginal(normalize_pot(pot));
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (ff)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or
+% column vector)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product (not yet supported), else sum-product [0]
+% filter -   if 1, do filtering, else smoothing [0]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+maximize = 0;
+filter = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1}; 
+     case 'filter', filter = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+assert(~maximize);
+
+
+[ss T] = size(evidence);
+observed = ~isemptycell(evidence);
+bnet = bnet_from_engine(engine);
+%pot_type = determine_pot_type(find(observed(:,1)), bnet.cnodes_slice, bnet.intra);
+pot_type = determine_pot_type(bnet, observed);
+% we assume we can use the same pot_type in all slices
+
+CPDpot = convert_dbn_CPDs_to_pots(bnet, evidence, pot_type);
+
+% Now convert CPDs on observed nodes to be potentials just on their parents
+assert(pot_type == 'd');
+onodes = bnet.observed(:);
+ns = bnet.node_sizes_slice;
+ns(onodes) = 1;
+for t=1:T
+  for i=onodes
+    p = parents(bnet.dag, i);
+    %CPDpot{i,t} = set_domain_pot(CPDpot{i,t}, p); % leaves size too long
+    temp = pot_to_marginal(CPDpot{i,t});
+    CPDpot{i,t} = dpot(p, ns(p), temp.T); % assumes pot_type = d
+  end
+end
+
+[engine.marginals, engine.fwd, engine.back, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter);
+
+engine.CPDpot = CPDpot;
+engine.filter = filter;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/enter_soft_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function [marginals, fwd, back, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (ff)
+% [marginals, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+
+if filter
+  [fwd, loglik] = filter_evidence(engine, CPDpot, observed, pot_type);
+  marginals = fwd;
+  back = [];
+else
+  [marginals, fwd, back, loglik] = smooth_evidence(engine, CPDpot, observed, pot_type);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/ff_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function engine = ff_inf_engine(bnet)
+% FF_INF_ENGINE Factored frontier inference engine for DBNs
+% engine = ff_inf_engine(bnet)
+%
+% The model must be topologically isomorphic to an HMM.
+% In addition, each hidden node is assumed to have at most one observed child,
+% and each observed child is assumed to have exactly one hidden parent.
+%
+% For details of this algorithm, see
+%  "The Factored Frontier Algorithm for Approximate Inference in DBNs",
+%   Kevin Murphy and Yair Weiss, UAI 2001.
+%
+% THIS IS HIGHLY EXPERIMENTAL CODE!
+
+ss = length(bnet.intra);
+onodes = bnet.observed;
+hnodes = mysetdiff(1:ss, onodes);
+
+[persistent_nodes, transient_nodes] = partition_dbn_nodes(bnet.intra, bnet.inter);
+assert(isequal(onodes, transient_nodes));
+assert(isequal(hnodes, persistent_nodes));
+
+engine.onodes = onodes;
+engine.hnodes = hnodes;
+engine.marginals = [];
+engine.fwd = [];
+engine.back = [];
+engine.CPDpot = [];
+engine.filter = [];
+
+obschild = zeros(1,ss);
+for i=engine.hnodes(:)'
+  %ocs = myintersect(children(bnet.dag, i), onodes);
+  ocs = children(bnet.intra, i);
+  assert(length(ocs) <= 1);
+  if length(ocs)==1
+    obschild(i) = ocs(1);
+  end
+end  
+engine.obschild = obschild;
+
+
+engine = class(engine, 'ff_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/filter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+function [fwd, loglik] = filter_evidence(engine, CPDpot, observed, pot_type)
+% [fwd, loglik] = filter_evidence(engine, CPDpot, observed, pot_type) (ff)
+
+[ss T] = size(CPDpot);
+fwd = cell(ss,T);
+hnodes = engine.hnodes(:)';
+onodes = engine.onodes(:)';
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+onodes2 = [onodes onodes+ss];
+ns(onodes2) = 1;
+
+logscale = zeros(1,T);
+H = length(hnodes);
+local_logscale = zeros(1,ss);
+  
+t = 1;
+for i=hnodes
+  fwd{i,t} = CPDpot{i,t};
+  c = engine.obschild(i);
+  if c > 0
+    fwd{i,t} = multiply_by_pot(fwd{i,t}, CPDpot{c, t});
+  end
+  [fwd{i,t}, local_logscale(i)] = normalize_pot(fwd{i,t});
+end
+logscale(t) = sum(local_logscale);
+
+for t=2:T
+  for i=hnodes
+    ps = parents(bnet.dag, i+ss);
+    assert(all(ps<=ss)); % in previous slice
+    prior = CPDpot{i,t};
+    for p=ps(:)'
+      prior = multiply_by_pot(prior, fwd{p,t-1});
+    end
+    fwd{i,t} = marginalize_pot(prior, i+ss);
+    fwd{i,t} = set_domain_pot(fwd{i,t}, i);
+    c = engine.obschild(i);
+    if c > 0
+      fwd{i,t} = multiply_by_pot(fwd{i,t}, CPDpot{c,t});
+    end
+    [fwd{i,t}, local_logscale(i)] = normalize_pot(fwd{i,t});
+  end
+  logscale(t) = sum(local_logscale);
+end
+
+loglik = sum(logscale);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function marginal = marginal_family(engine, i, t)
+% MARGINAL_FAMILY Compute the marginal on the specified family (ff)
+% marginal = marginal_family(engine, i, t)
+
+
+if engine.filter
+  error('can''t currently use marginal_family when filtering with ff');
+end
+
+if nargin < 3, t = 1; end
+
+% The method is similar to the following HMM equation:
+% xi(i,j,t) = normalise( alpha(i,t) * transmat(i,j) * obsmat(j,t+1) * beta(j,t+1) )
+% where xi(i,j,t) = Pr(Q(t)=i, Q(t+1)=j | y(1:T))
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+
+if myismember(i, engine.onodes)
+  ps = parents(bnet.dag, i);
+  p = ps(1);
+  marginal = pot_to_marginal(engine.marginals{ps(1),t});
+  fam = ([ps i]) + (t-1)*ss;
+elseif t==1
+  marginal = pot_to_marginal(engine.marginals{i,t});
+  fam = i + (t-1)*ss;
+else
+  pot = engine.CPDpot{i,t};
+  c = engine.obschild(i);
+  if c>0
+    pot = multiply_by_pot(pot, engine.CPDpot{c,t});
+  end
+  pot = multiply_by_pot(pot, engine.back{i,t});
+  ps = parents(bnet.dag, i+ss);
+  for p=ps(:)'
+    pot = multiply_by_pot(pot, engine.fwd{p,t-1});
+  end
+  marginal = pot_to_marginal(normalize_pot(pot));
+  fam = ([ps i+ss]) + (t-2)*ss;
+end
+
+% we convert the domain to the unrolled numbering system
+% so that update_ess extracts the right evidence.
+marginal.domain = fam;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function marginal = marginal_nodes(engine, nodes, t)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (ff)
+% marginal = marginal_nodes(engine, i, t)
+% returns Pr(X(i,t) | Y(1:T)), where X(i,t) is the i'th node in the t'th slice.
+% If enter_evidence used filtering instead of smoothing, this will return  Pr(X(i,t) | Y(1:t)).
+
+if nargin < 3, t = 1; end
+assert(length(nodes)==1);
+i = nodes(end);
+if myismember(i, engine.hnodes)
+  marginal = pot_to_marginal(engine.marginals{i,t});
+else
+  marginal = pot_to_marginal(dpot(i, 1, 1)); % observed
+end
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+% we convert the domain to the unrolled numbering system
+% so that update_ess extracts the right evidence.
+marginal.domain = nodes+(t-1)*ss;   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@ff_inf_engine/smooth_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,89 @@
+function [marginals, fwd, back, loglik] = smooth_evidence(engine, CPDpot, observed, pot_type)
+% [marginals, fwd, back, loglik] = smooth_evidence(engine, CPDpot, observed, pot_type) (ff)
+
+error('ff smoothing is broken');
+
+[ss T] = size(CPDpot);
+fwd = cell(ss,T);
+hnodes = engine.hnodes(:)';
+onodes = engine.onodes(:)';
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+onodes2 = [onodes onodes+ss];
+ns(onodes2) = 1;
+
+logscale = zeros(1,T);
+H = length(hnodes);
+local_logscale = zeros(1,ss);
+  
+t = 1;
+for i=hnodes
+  fwd{i,t} = CPDpot{i,t};
+  c = engine.obschild(i);
+  if 0 %  c > 0
+    fwd{i,t} = multiply_by_pot(fwd{i,t}, CPDpot{c, t});
+  end
+  [fwd{i,t}, local_logscale(i)] = normalize_pot(fwd{i,t});
+end
+logscale(t) = sum(local_logscale);
+
+for t=2:T
+  for i=hnodes
+    ps = parents(bnet.dag, i+ss);
+    assert(all(ps<=ss)); % in previous slice
+    prior = CPDpot{i,t};
+    for p=ps(:)'
+      prior = multiply_by_pot(prior, fwd{p,t-1});
+    end
+    fwd{i,t} = marginalize_pot(prior, i+ss);
+    fwd{i,t} = set_domain_pot(fwd{i,t}, i);
+    c = engine.obschild(i);
+    if 0 % c > 0
+      fwd{i,t} = multiply_by_pot(fwd{i,t}, CPDpot{c,t});
+    end
+    [fwd{i,t}, local_logscale(i)] = normalize_pot(fwd{i,t});
+  end
+  logscale(t) = sum(local_logscale);
+end
+
+loglik = sum(logscale);
+
+back = cell(ss,T);
+t = T;
+for i=hnodes
+  pot = dpot(i, ns(i));
+  cs = children(bnet.intra, i);
+  for c=cs(:)'
+    pot = multiply_pots(pot, CPDpot{c,t});
+  end
+  back{i,t} = marginalize_pot(pot, i);
+  back{i,t} = normalize_pot(back{i,t});
+  back{i,t} = set_domain_pot(back{i,t}, i+ss);
+end
+for t=T-1:-1:1
+  for i=hnodes
+    pot = dpot(i, ns(i));
+    cs = children(bnet.inter, i);
+    for c=cs(:)'
+      pot = multiply_pots(pot, back{c,t+1});
+      pot = multiply_pots(pot, CPDpot{c,t+1});
+    end
+    cs = children(bnet.intra, i);
+    for c=cs(:)'
+      pot = multiply_pots(pot, CPDpot{c,t});
+    end
+    back{i,t} = marginalize_pot(pot, i);
+    back{i,t} = normalize_pot(back{i,t});
+    back{i,t} = set_domain_pot(back{i,t}, i+ss);
+  end
+end
+
+
+% COMBINE
+for t=1:T
+  for i=hnodes
+    back{i,t} = set_domain_pot(back{i,t}, i);
+    fwd{i,t} = multiply_by_pot(fwd{i,t}, back{i,t});
+    marginals{i,t} = normalize_pot(fwd{i,t});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_soft_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/frontier_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/set_fwdback.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@frontier_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (frontier)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product (not yet supported), else sum-product [0]
+% filter -   if 1, do filtering, else smoothing [0]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+maximize = 0;
+filter = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1}; 
+     case 'filter', filter = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+assert(~maximize);
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+onodes = find(~isemptycell(evidence));
+cnodes = unroll_set(bnet.cnodes(:), ss, T);
+pot_type = determine_pot_type(bnet, onodes);
+
+CPDpot = convert_dbn_CPDs_to_pots(bnet, evidence, pot_type);
+
+[engine.fwdback, loglik, engine.fwd_frontier, engine.back_frontier] = ...
+    enter_soft_evidence(engine, CPDpot, onodes, pot_type, filter);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/enter_soft_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,142 @@
+function [fwdback, loglik, fwd_frontier, back_frontier] = enter_soft_evidence(engine, CPD, onodes, pot_type, filter)
+% ENTER_SOFT_EVIDENCE Add soft evidence to network (frontier)
+% [fwdback, loglik] = enter_soft_evidence(engine, CPDpot, onodes, filter)
+
+if nargin < 3, filter = 0; end
+
+[ss T] = size(CPD);
+bnet = bnet_from_engine(engine);
+ns = repmat(bnet.node_sizes_slice(:), 1, T);
+cnodes = unroll_set(bnet.cnodes(:), ss, T);
+
+% FORWARDS
+fwd = cell(ss,T);
+ll = zeros(1,T);
+S = 2*ss; % num. intermediate frontiers to get from t to t+1
+frontier = cell(S,T);
+
+% Start with empty frontier, and add each node in slice 1
+init = mk_initial_pot(pot_type, [], ns, cnodes, onodes);  
+t = 1;
+s = 1;
+j = 1;
+frontier{s,t} = update(init, j, 1, CPD{j}, engine.fdom1{s}, pot_type, ns, cnodes, onodes);
+fwd{j} = frontier{s,t};
+for s=2:ss
+  j = s; % add node j at step s
+  frontier{s,t} = update(frontier{s-1,t}, j, 1, CPD{j}, engine.fdom1{s}, pot_type, ns, cnodes, onodes);
+  fwd{j} = frontier{s,t};
+end
+frontier{S,t} = frontier{ss,t};
+[frontier{S,t}, ll(1)] = normalize_pot(frontier{S,t});
+
+% Now move frontier from slice to slice
+OPS = engine.ops;
+add = OPS>0;
+nodes = [zeros(S,1) unroll_set(abs(OPS(:)), ss, T-1)];
+for t=2:T
+  offset = (t-2)*ss;
+  for s=1:S
+    if s==1
+      prev_ndx = (t-2)*S + S; % S,t-1
+    else
+      prev_ndx = (t-1)*S + s-1; % s-1,t
+    end
+    j = nodes(s,t);
+    frontier{s,t} = update(frontier{prev_ndx}, j, add(s), CPD{j}, engine.fdom{s}+offset, pot_type, ns, cnodes, onodes);
+    if add(s)
+      fwd{j} = frontier{s,t};
+    end
+  end
+  [frontier{S,t}, ll(t)] = normalize_pot(frontier{S,t});
+end
+loglik = sum(ll);
+
+
+fwd_frontier = frontier;
+
+if filter
+  fwdback = fwd;
+  return;
+end
+
+
+% BACKWARDS
+back = cell(ss,T);
+add = ~add; % forwards add = backwards remove 
+frontier = cell(S,T+1);
+t = T;
+dom = (1:ss) + (t-1)*ss;
+frontier{1,T+1} = mk_initial_pot(pot_type, dom, ns, cnodes, onodes); % all 1s for last slice
+for t=T:-1:2
+  offset = (t-2)*ss;
+  for s=S:-1:1 % reverse order
+    if s==S
+      prev_ndx = t*S + 1; % 1,t+1
+    else
+      prev_ndx = (t-1)*S + (s+1); % s+1,t
+    end
+    j = nodes(s,t);
+    if ~add(s)
+      back{j} = frontier{prev_ndx}; % save frontier before removing
+    end
+    frontier{s,t} = rev_update(frontier{prev_ndx}, t, s, j, add(s), CPD{j}, engine.fdom{s}+offset, pot_type, ns, cnodes, onodes);
+  end
+  frontier{1,t} = normalize_pot(frontier{1,t});
+end
+% Remove each node in first slice until left with empty set
+t = 1;
+frontier{ss+1,t} = frontier{1,2};
+add = 0;
+for s=ss:-1:1
+  j = s; % remove node j at step s
+  back{j} = frontier{s+1,t};
+  frontier{s,t} = rev_update(frontier{s+1,t}, t, s, j, add, CPD{j}, 1:s, pot_type, ns, cnodes, onodes);
+end
+
+% COMBINE
+for t=1:T
+  for i=1:ss
+    %fwd{i,t} = multiply_by_pot(fwd{i,t}, back{i,t});
+    %fwdback{i,t} = normalize_pot(fwd{i,t});
+    fwdback{i,t} = normalize_pot(multiply_pots(fwd{i,t}, back{i,t}));
+  end
+end
+
+back_frontier = frontier;
+
+%%%%%%%%%%
+function new_frontier = update(old_frontier, j, add, CPD, newdom, pot_type, ns, cnodes, onodes)
+
+if add
+  new_frontier = mk_initial_pot(pot_type, newdom, ns, cnodes, onodes);      
+  new_frontier = multiply_by_pot(new_frontier, old_frontier);
+  new_frontier = multiply_by_pot(new_frontier, CPD);
+else
+  new_frontier = marginalize_pot(old_frontier, mysetdiff(domain_pot(old_frontier), j));    
+end
+
+
+%%%%%%
+function new_frontier = rev_update(old_frontier, t, s, j, add, CPD, junk, pot_type, ns, cnodes, onodes)
+
+olddom = domain_pot(old_frontier);
+assert(isequal(junk, olddom));
+
+if add
+  % add: extend domain to include j by multiplying by 1
+  newdom = myunion(olddom, j);
+  new_frontier = mk_initial_pot(pot_type, newdom, ns, cnodes, onodes);      
+  new_frontier = multiply_by_pot(new_frontier, old_frontier);
+  %fprintf('t=%d, s=%d, add %d to %s to make %s\n', t, s, j, num2str(olddom), num2str(newdom));
+else 
+  % remove: multiply in CPT and then marginalize out j
+  % parents of j are guaranteed to be in old_frontier, else couldn't have added j on fwds pass
+  old_frontier = multiply_by_pot(old_frontier, CPD);
+  newdom = mysetdiff(olddom, j);
+  new_frontier = marginalize_pot(old_frontier, newdom);
+  %newdom2 = domain_pot(new_frontier);
+  %fprintf('t=%d, s=%d, rem %d from %s to make %s\n', t, s, j, num2str(olddom), num2str(newdom2));
+end
+
+       
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/frontier_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,121 @@
+function engine = frontier_inf_engine(bnet)
+% FRONTIER_INF_ENGINE Inference engine for DBNs which which uses the frontier algorithm.
+% engine = frontier_inf_engine(bnet)
+%
+% The frontier algorithm extends the forwards-backwards algorithm to DBNs in the obvious way,
+% maintaining a joint distribution (frontier) over all the nodes in a time slice.
+% When all the hidden nodes in the DBN are persistent (have children in the next time slice),
+% its theoretical running time is often similar to that of the junction tree algorithm,
+% although in practice, this algorithm seems to very slow (at least in matlab).
+% However, it is extremely simple to describe and implement.
+%
+% Suppose there are n binary nodes per slice, so the frontier takes O(2^n) space.
+% Each time step takes between O(n 2^{n+1}) and O(n 2^{2n}) operations, depending on the graph structure.
+% The lower bound is achieved by a set of n independent chains, as in a factorial HMM.
+% The upper bound is achieved by a set of n fully interconnected chains, as in an HMM.
+%
+% The factor of n arises because we need to multiply in each CPD from slice t+1.
+% The second factor depends on the size of the frontier to which we add the new node.
+% In an FHMM, once we have added X(i,t+1), we can marginalize out X(i,t) from the frontier, since
+% no other nodes depend on it; hence the frontier never contains more than n+1 nodes.
+% In a fully coupled HMM, we must leave X(i,t) in the frontier until all X(j,t+1) have been
+% added; hence the frontier will contain 2*n nodes at its peak.
+%
+% For details, see
+%   "The Factored Frontier Algorithm for Approximate Inference in DBNs",
+%   Kevin Murphy and Yair Weiss, UAI 01.
+
+ns = bnet.node_sizes_slice;
+onodes = bnet.observed;
+ns(onodes) = 1;
+ss = length(bnet.intra);
+
+[engine.ops, engine.fdom] = best_first_frontier_seq(ns, bnet.dag);
+engine.ops1 = 1:ss;
+
+engine.fwdback = [];
+engine.fwd_frontier = [];
+engine.back_frontier = [];
+
+engine.fdom1 = cell(1,ss);
+for s=1:ss
+  engine.fdom1{s} = 1:s;
+end
+
+engine = class(engine, 'frontier_inf_engine', inf_engine(bnet));
+
+
+%%%%%%%%%
+
+function [ops, frontier_set] = best_first_frontier_seq(ns, dag)
+% BEST_FIRST_FRONTIER_SEQ Do a greedy search for the sequence of additions/removals to the frontier.
+% [ops, frontier_set] = best_first_frontier_seq(ns, dag)
+%
+% We maintain 3 sets: the frontier (F), the right set (R), and the left set (L).
+% The invariant is that the nodes in R are d-separated from L given F.
+% We start with slice 1 in F and slice 2 in R.
+% The goal is to move slice 1 from F to L, and slice 2 from R to F, so as to minimize the size
+% of the frontier at each step, where the size(F) = product of the node-sizes of nodes in F.
+% A node may be removed (from F to L) if it has no children in R.
+% A node may be added (from R to F) if its parents are in F.
+%
+% ns(i) = num. discrete values node i can take on (i=1..ss, where ss = slice size)
+% dag is the (2*ss) x (2*ss) adjacency matrix for the 2-slice DBN.
+
+% Example:
+%
+% 4    9
+% ^    ^
+% |    |
+% 2 -> 7
+% ^    ^
+% |    |
+% 1 -> 6
+% |    |
+% v    v
+% 3 -> 8
+% |    |
+% v    V
+% 5    10
+%
+% ops = -4, -5, 6, -1, 7, -2, 8, -3, 9, 10
+
+ss = length(ns);
+ns = [ns(:)' ns(:)'];
+ops = zeros(1,ss);
+L = []; F = 1:ss; R = (1:ss)+ss;
+frontier_set = cell(1,2*ss);
+for s=1:2*ss
+  remcost = inf*ones(1,2*ss);
+  %disp(['L: ' num2str(L) ', F: ' num2str(F) ', R: ' num2str(R)]);
+  maybe_removable = myintersect(F, 1:ss);
+  for n=maybe_removable(:)'
+    cs = children(dag, n);
+    if isempty(myintersect(cs, R))
+      remcost(n) = prod(ns(mysetdiff(F, n)));
+    end
+  end
+  %remcost
+  if any(remcost < inf)
+    n = argmin(remcost);
+    ops(s) = -n;
+    L = myunion(L, n);
+    F = mysetdiff(F, n);
+  else
+    addcost = inf*ones(1,2*ss);
+    for n=R(:)'
+      ps = parents(dag, n);
+      if mysubset(ps, F)
+	addcost(n) = prod(ns(myunion(F, [ps n])));
+      end
+    end
+    %addcost
+    assert(any(addcost < inf));
+    n = argmin(addcost);
+    ops(s) = n;
+    R  = mysetdiff(R, n);
+    F = myunion(F, n);
+  end
+  %fprintf('op at step %d = %d\n\n', s, ops(s));
+  frontier_set{s} = F;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function marginal = marginal_family(engine, i, t)
+% MARGINAL_FAMILY Compute the marginal on node i in slice t and its parents  (frontier)
+% marginal = marginal_family(engine, i, t)
+
+bnet = bnet_from_engine(engine);    
+fam = family(bnet.dag, i, t);
+marginal = pot_to_marginal(normalize_pot(marginalize_pot(engine.fwdback{i,t}, fam)));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function marginal = marginal_nodes(engine, nodes, t)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (frontier)
+% marginal = marginal_nodes(engine, nodes, t)
+%
+% 't' specifies the time slice of the earliest node in 'nodes'.
+% 'nodes' cannot span more than 2 time slices.
+%
+% Example:
+% Consider a DBN with 2 nodes per slice.
+% Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3,
+% i.e., nodes 3 and 5 in the unrolled network,
+
+if nargin < 3, t = 1; end
+assert(length(nodes)==1);
+i = nodes(1);
+bigpot = engine.fwdback{i,t};
+bnet = bnet_from_engine(engine);
+ss  = length(bnet.intra);
+nodes = nodes + (t-1)*ss;
+%if t > 1, nodes = nodes + ss; end
+marginal = pot_to_marginal(marginalize_pot(bigpot, nodes));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@frontier_inf_engine/set_fwdback.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function engine = set_fwdback(engine, fb)
+% SET_FWDBACK Set the field 'fwdback', which contains the frontiers after propagation
+% engine = set_fwdback(engine, fb)
+%
+% This is used by frontier_fast_inf_engine/enter_evidence
+% as a workaround for Matlab's annoying privacy control
+    
+engine.fwdback = fb;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+/enter_evidence.m/1.2/Sat Sep 17 17:00:30 2005//
+/find_mpe.m/1.1.1.1/Thu Jun 20 00:18:24 2002//
+/fwdback_twoslice.m/1.1/Sat Nov 26 01:24:09 2005//
+/hmm_inf_engine.m/1.1.1.1/Thu Nov 14 20:05:36 2002//
+/marginal_family.m/1.1.1.1/Thu Nov 14 20:05:36 2002//
+/marginal_nodes.m/1.1.1.1/Thu Nov 14 20:03:28 2002//
+/update_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D/Old////
+D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@hmm_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/dhmm_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@hmm_inf_engine/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/dhmm_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function engine = dhmm_inf_engine(bnet, onodes)
+% DHMM_INF_ENGINE Inference engine for discrete DBNs which uses the forwards-backwards algorithm.
+% engine = dhmm_inf_engine(bnet, onodes)
+%
+% 'onodes' specifies which nodes are observed; these must be leaves, and can be discrete or continuous.
+% The remaining nodes are all hidden, and must be discrete.
+% The DBN is converted to an HMM, with a single meganode, but which may have factored obs.
+
+ss = length(bnet.intra);
+hnodes = mysetdiff(1:ss, onodes);
+evidence = cell(ss, 2);
+ns = bnet.node_sizes;
+Q = prod(ns(hnodes));
+tmp = dpot_to_table(compute_joint_pot(bnet, hnodes, evidence));
+engine.startprob = reshape(tmp, Q, 1);
+tmp = dpot_to_table(compute_joint_pot(bnet, [hnodes hnodes+ss], evidence));
+engine.transprob = mk_stochastic(reshape(tmp, Q, Q));
+engine.obsprob = cell(1, length(onodes));
+for i=1:length(onodes)
+  tmp = dpot_to_table(compute_joint_pot(bnet, [hnodes onodes(i)], evidence));
+  O = ns(onodes(i));
+  engine.obsprob{i} = mk_stochastic(reshape(tmp, Q, O));
+end
+
+% This is where we will store the results between enter_evidence and marginal_nodes
+engine.gamma = [];
+engine.xi = [];
+
+engine.onodes = onodes;
+engine.hnodes = hnodes;
+engine.maximize = [];
+
+engine = class(engine, 'dhmm_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function marginal = marginal_family(engine, i, t, add_ev)
+% MARGINAL_FAMILY Compute the marginal on the specified family  (hmm)
+% marginal = marginal_nodes(engine, i, t, add_ev)
+%
+
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+if t==1
+ fam = family(bnet.dag, i);
+ bigpot = engine.one_slice_marginal{t};
+ nodes = fam;
+else
+  fam = family(bnet.dag, i+ss);
+  if any(fam <= ss) % family spans 2 slices
+    bigpot = engine.two_slice_marginal{t-1}; % t-1 and t
+    nodes = fam + (t-2)*ss;
+  else
+    bigpot = engine.one_slice_marginal{t};
+    nodes = fam-ss + (t-1)*ss;
+  end
+end
+
+marginal = pot_to_marginal(marginalize_pot(bigpot, nodes, engine.maximize));
+
+if add_ev
+  marginal = add_ev_to_dmarginal(marginal, engine.evidence, engine.node_sizes);
+end    
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/Old/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function marginal = marginal_nodes(engine, nodes, t, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (hmm)
+% marginal = marginal_nodes(engine, nodes, t, add_ev)
+%
+% 't' specifies the time slice of the earliest node in 'nodes'.
+% 'nodes' cannot span more than 2 time slices.
+%
+% Example:
+% Consider a DBN with 2 nodes per slice.
+% Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3,
+% i.e., nodes 3 and 5 in the unrolled network,
+
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+if all(nodes <= ss)
+  bigpot = engine.one_slice_marginal{t};
+else
+  bigpot = engine.two_slice_marginal{t};
+end
+
+nodes = nodes + (t-1)*ss;
+marginal = pot_to_marginal(marginalize_pot(bigpot, nodes, engine.maximize));
+
+if add_ev
+  marginal = add_ev_to_dmarginal(marginal, engine.evidence, engine.node_sizes);
+end    
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (hmm)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product (not yet supported), else sum-product [0]
+% filter   - if 1, does filtering, else smoothing [0]
+% oneslice - 1 means only compute marginals on nodes within a single slice [0]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+maximize = 0;
+filter = 0;
+oneslice = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1}; 
+     case 'filter',  filter = args{i+1}; 
+     case 'oneslice', oneslice = args{i+1};
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+[ss T] = size(evidence);
+engine.maximize = maximize;
+engine.evidence = evidence;
+bnet = bnet_from_engine(engine);
+engine.node_sizes = repmat(bnet.node_sizes_slice(:), [1 T]);
+
+obs_bitv = ~isemptycell(evidence(:));
+bitv = reshape(obs_bitv, ss, T);
+for t=1:T
+  onodes = find(bitv(:,t));
+  if ~isequal(onodes, bnet.observed(:))
+    error(['dbn was created assuming observed nodes per slice were '...
+	   num2str(bnet.observed(:)')  ' but the evidence in slice ' num2str(t) ...
+	   ' has observed nodes ' num2str(onodes(:)')]);
+  end
+end
+
+obslik = mk_hmm_obs_lik_matrix(engine, evidence);
+
+%[alpha, beta, gamma, loglik, xi] = fwdback(engine.startprob, engine.transprob, obslik, ...
+[alpha, beta, gamma, loglik, xi] = fwdback_twoslice(engine, engine.startprob,...
+                                                    engine.transprob, obslik, ...
+                                                    'maximize', maximize, 'fwd_only', filter, ...
+                                                    'compute_xi', ~oneslice);
+
+engine.one_slice_marginal = gamma; % gamma(:,t) for t=1:T
+if ~oneslice
+  Q = size(gamma,1);
+  engine.two_slice_marginal = reshape(xi, [Q*Q T-1]); % xi(:,t) for t=1:T-1
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/find_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function mpe = find_mpe(engine, evidence)
+% FIND_MPE Find the most probable explanation (Viterbi)
+% mpe = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+
+obslik = mk_hmm_obs_lik_matrix(engine, evidence);
+path = viterbi_path(engine.startprob, engine.transprob, obslik);
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes_slice;
+ns(bnet.observed) = 1;
+ass = ind2subv(ns, path);
+mpe = num2cell(ass');
+mpe(bnet.observed,:) = evidence(bnet.observed,:);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,198 @@
+function [alpha, beta, gamma, loglik, xi, gamma2] = fwdback_twoslice(engine, init_state_distrib, transmat, obslik, varargin)
+% FWDBACK Compute the posterior probs. in an HMM using the forwards backwards algo.
+%
+% [alpha, beta, gamma, loglik, xi, gamma2] = fwdback(init_state_distrib, transmat, obslik, ...)
+%
+% Notation:
+% Y(t) = observation, Q(t) = hidden state, M(t) = mixture variable (for MOG outputs)
+% A(t) = discrete input (action) (for POMDP models)
+%
+% INPUT:
+% init_state_distrib(i) = Pr(Q(1) = i)
+% transmat(i,j) = Pr(Q(t) = j | Q(t-1)=i)
+%  or transmat{a}(i,j) = Pr(Q(t) = j | Q(t-1)=i, A(t-1)=a) if there are discrete inputs
+% obslik(i,t) = Pr(Y(t)| Q(t)=i)
+%   (Compute obslik using eval_pdf_xxx on your data sequence first.)
+%
+% Optional parameters may be passed as 'param_name', param_value pairs.
+% Parameter names are shown below; default values in [] - if none, argument is mandatory.
+%
+% For HMMs with MOG outputs: if you want to compute gamma2, you must specify
+% 'obslik2' - obslik(i,j,t) = Pr(Y(t)| Q(t)=i,M(t)=j)  []
+% 'mixmat' - mixmat(i,j) = Pr(M(t) = j | Q(t)=i)  []
+%
+% For HMMs with discrete inputs:
+% 'act' - act(t) = action performed at step t
+%
+% Optional arguments:
+% 'fwd_only' - if 1, only do a forwards pass and set beta=[], gamma2=[]  [0]
+% 'scaled' - if 1,  normalize alphas and betas to prevent underflow [1]
+% 'maximize' - if 1, use max-product instead of sum-product [0]
+%
+% OUTPUTS:
+% alpha(i,t) = p(Q(t)=i | y(1:t)) (or p(Q(t)=i, y(1:t)) if scaled=0)
+% beta(i,t) = p(y(t+1:T) | Q(t)=i)*p(y(t+1:T)|y(1:t)) (or p(y(t+1:T) | Q(t)=i) if scaled=0)
+% gamma(i,t) = p(Q(t)=i | y(1:T))
+% loglik = log p(y(1:T))
+% xi(i,j,t-1)  = p(Q(t-1)=i, Q(t)=j | y(1:T))
+% gamma2(j,k,t) = p(Q(t)=j, M(t)=k | y(1:T)) (only for MOG  outputs)
+%
+% If fwd_only = 1, these become
+% alpha(i,t) = p(Q(t)=i | y(1:t))
+% beta = []
+% gamma(i,t) = p(Q(t)=i | y(1:t))
+% xi(i,j,t-1)  = p(Q(t-1)=i, Q(t)=j | y(1:t))
+% gamma2 = []
+%
+% Note: we only compute xi if it is requested as a return argument, since it can be very large.
+% Similarly, we only compute gamma2 on request (and if using MOG outputs).
+%
+% Examples:
+%
+% [alpha, beta, gamma, loglik] = fwdback(pi, A, multinomial_prob(sequence, B));
+%
+% [B, B2] = mixgauss_prob(data, mu, Sigma, mixmat);
+% [alpha, beta, gamma, loglik, xi, gamma2] = fwdback(pi, A, B, 'obslik2', B2, 'mixmat', mixmat);
+
+
+if nargout >= 5, compute_xi = 1; else compute_xi = 0; end
+if nargout >= 6, compute_gamma2 = 1; else compute_gamma2 = 0; end
+
+[obslik2, mixmat, fwd_only, scaled, act, maximize, compute_xi, compute_gamma2] = process_options(varargin, 'obslik2', [], 'mixmat', [], 'fwd_only', 0, 'scaled', 1, 'act', [], 'maximize', 0, 'compute_xi', compute_xi, 'compute_gamma2', compute_gamma2);
+
+
+[Q T] = size(obslik);
+
+if isempty(obslik2)
+  compute_gamma2 = 0;
+end
+
+if isempty(act)
+  act = ones(1,T);
+  transmat = { transmat } ;
+end
+
+scale = ones(1,T);
+
+% scale(t) = Pr(O(t) | O(1:t-1)) = 1/c(t) as defined by Rabiner (1989).
+% Hence prod_t scale(t) = Pr(O(1)) Pr(O(2)|O(1)) Pr(O(3) | O(1:2)) = Pr(O(1), ... ,O(T))
+% or log P = sum_t log scale(t).
+% Rabiner suggests multiplying beta(t) by scale(t), but we can instead
+% normalise beta(t) - the constants will cancel when we compute gamma.
+
+loglik = 0;
+
+alpha = zeros(Q,T);
+gamma = zeros(Q,T);
+if compute_xi
+  xi = zeros(Q,Q,T-1);
+else
+  xi = [];
+end
+
+
+%%%%%%%%% Forwards %%%%%%%%%%
+
+t = 1;
+alpha(:,1) = init_state_distrib(:) .* obslik(:,t);
+if scaled
+  %[alpha(:,t), scale(t)] = normaliseC(alpha(:,t));
+  [alpha(:,t), scale(t)] = normalise(alpha(:,t));
+end
+if scaled, assert(approxeq(sum(alpha(:,t)),1)), end
+for t=2:T
+  %trans = transmat(:,:,act(t-1))';
+  trans = transmat{act(t-1)};
+  if maximize
+    m = max_mult(trans', alpha(:,t-1));
+    %A = repmat(alpha(:,t-1), [1 Q]);
+    %m = max(trans .* A, [], 1);
+  else
+    m = trans' * alpha(:,t-1);
+  end
+  alpha(:,t) = m(:) .* obslik(:,t);
+  if scaled
+    %[alpha(:,t), scale(t)] = normaliseC(alpha(:,t));
+    [alpha(:,t), scale(t)] = normalise(alpha(:,t));
+  end
+  if compute_xi & fwd_only  % useful for online EM
+    %xi(:,:,t-1) = normaliseC((alpha(:,t-1) * obslik(:,t)') .* trans);
+    xi(:,:,t-1) = normalise((alpha(:,t-1) * obslik(:,t)') .* trans);
+  end
+  if scaled, assert(approxeq(sum(alpha(:,t)),1)), end
+end
+if scaled
+  if any(scale==0)
+    loglik = -inf;
+  else
+    loglik = sum(log(scale));
+  end
+else
+  loglik = log(sum(alpha(:,T)));
+end
+
+if fwd_only
+  gamma = alpha;
+  beta = [];
+  gamma2 = [];
+  return;
+end
+
+
+%%%%%%%%% Backwards %%%%%%%%%%
+
+beta = zeros(Q,T);
+if compute_gamma2
+  M = size(mixmat, 2);
+  gamma2 = zeros(Q,M,T);
+else
+  gamma2 = [];
+end
+
+beta(:,T) = ones(Q,1);
+%gamma(:,T) = normaliseC(alpha(:,T) .* beta(:,T));
+gamma(:,T) = normalise(alpha(:,T) .* beta(:,T));
+t=T;
+if compute_gamma2
+  denom = obslik(:,t) + (obslik(:,t)==0); % replace 0s with 1s before dividing
+  gamma2(:,:,t) = obslik2(:,:,t) .* mixmat .* repmat(gamma(:,t), [1 M]) ./ repmat(denom, [1 M]);
+  %gamma2(:,:,t) = normaliseC(obslik2(:,:,t) .* mixmat .* repmat(gamma(:,t), [1 M])); % wrong!
+end
+for t=T-1:-1:1
+  b = beta(:,t+1) .* obslik(:,t+1);
+  %trans = transmat(:,:,act(t));
+  trans = transmat{act(t)};
+  if maximize
+    B = repmat(b(:)', Q, 1);
+    beta(:,t) = max(trans .* B, [], 2);
+  else
+    beta(:,t) = trans * b;
+  end
+  if scaled
+    %beta(:,t) = normaliseC(beta(:,t));
+    beta(:,t) = normalise(beta(:,t));
+  end
+  %gamma(:,t) = normaliseC(alpha(:,t) .* beta(:,t));
+  gamma(:,t) = normalise(alpha(:,t) .* beta(:,t));
+  if compute_xi
+    %xi(:,:,t) = normaliseC((trans .* (alpha(:,t) * b')));
+    xi(:,:,t) = normalise((trans .* (alpha(:,t) * b')));
+    %xi(:,:,t) = (trans .* (alpha(:,t) * b'));
+  end
+  if compute_gamma2
+    denom = obslik(:,t) + (obslik(:,t)==0); % replace 0s with 1s before dividing
+    gamma2(:,:,t) = obslik2(:,:,t) .* mixmat .* repmat(gamma(:,t), [1 M]) ./ repmat(denom, [1 M]);
+    %gamma2(:,:,t) = normaliseC(obslik2(:,:,t) .* mixmat .* repmat(gamma(:,t), [1 M]));
+  end
+end
+
+
+% We now explain the equation for gamma2
+% Let zt=y(1:t-1,t+1:T) be all observations except y(t)
+% gamma2(Q,M,t) = P(Qt,Mt|yt,zt) = P(yt|Qt,Mt,zt) P(Qt,Mt|zt) / P(yt|zt)
+%                = P(yt|Qt,Mt) P(Mt|Qt) P(Qt|zt) / P(yt|zt)
+% Now gamma(Q,t) = P(Qt|yt,zt) = P(yt|Qt) P(Qt|zt) / P(yt|zt)
+% hence
+% P(Qt,Mt|yt,zt) = P(yt|Qt,Mt) P(Mt|Qt) [P(Qt|yt,zt) P(yt|zt) / P(yt|Qt)] / P(yt|zt)
+%                = P(yt|Qt,Mt) P(Mt|Qt) P(Qt|yt,zt) / P(yt|Qt)
+%
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/hmm_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+function engine = hmm_inf_engine(bnet, varargin)
+% HMM_INF_ENGINE Inference engine for DBNs which uses the forwards-backwards algorithm.
+% engine = hmm_inf_engine(bnet, ...)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - 1 means max-product, 0 means sum-product [0]
+%
+% The DBN is converted to an HMM with a single meganode, but the observed nodes remain factored.
+% This can be faster than jtree if the num. hidden nodes is low, because of lower constant factors.
+%
+% All hidden nodes must be discrete.
+% All observed nodes are assumed to be leaves, i.e., they cannot be parents of anything.
+% The parents of each observed leaf are assumed to be a subset of the hidden nodes within the same slice.
+% The only exception is if bnet is an AR-HMM, where the parents are assumed to be self in the
+% previous slice (continuous), plus all the discrete nodes in the current slice.
+
+ss = bnet.nnodes_per_slice;
+
+engine.maximize = 0;
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', engine.maximize = args{i+1};
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+% Stuff to do with speeding up marginal_family
+[int, engine.persist, engine.transient] = compute_interface_nodes(bnet.intra, bnet.inter);
+engine.persist_bitv = zeros(1, ss);
+engine.persist_bitv(engine.persist) = 1;
+
+
+ns = bnet.node_sizes(:);
+ns(bnet.observed) = 1;
+ns(bnet.observed+ss) = 1;
+engine.eff_node_sizes = ns;
+
+for o=bnet.observed(:)'
+  %if bnet.equiv_class(o,1) ~= bnet.equiv_class(o,2)
+  %  error(['observed node ' num2str(o) ' is not tied'])
+  %end
+  cs = children(bnet.dag, o);
+  if ~isempty(cs)
+    error(['observed node ' num2str(o) ' is not allowed children'])
+  end
+end
+
+[engine.startprob, engine.transprob, engine.obsprob] = dbn_to_hmm(bnet);
+
+% This is where we will store the results between enter_evidence and marginal_nodes
+engine.one_slice_marginal = [];
+engine.two_slice_marginal = [];
+
+ss = length(bnet.intra);
+engine.evidence = [];
+engine.node_sizes = [];
+
+% avoid the need to do bnet_from_engine, which is slow
+engine.slice_size = ss;
+engine.parents = bnet.parents;
+
+engine = class(engine, 'hmm_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+function marginal = marginal_family(engine, i, t, add_ev)
+% MARGINAL_FAMILY Compute the marginal on the specified family (hmm)
+% marginal = marginal_family(engine, i, t, add_ev)
+
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+
+ns = engine.eff_node_sizes(:);
+ss = engine.slice_size;
+
+if t==1 | ~engine.persist_bitv(i)
+  bigT = engine.one_slice_marginal(:,t);
+  ps = engine.parents{i};
+  dom = [ps i] + (t-1)*ss;
+  bigdom = 1:ss;
+  bigsz = ns(bigdom);
+  bigdom = bigdom + (t-1)*ss;
+else % some parents are in previous slice
+  bigT = engine.two_slice_marginal(:,t-1); % t-1 and t
+  ps = engine.parents{i+ss};
+  dom = [ps i+ss] + (t-2)*ss; 
+  bigdom = 1:(2*ss); % domain of xi(:,:,t)
+  bigsz = ns(bigdom);
+  bigdom = bigdom + (t-2)*ss;
+end
+marginal.domain = dom;
+
+marginal.T = marg_table(bigT, bigdom, bigsz, dom, engine.maximize); 
+marginal.mu = []; 
+marginal.Sigma = [];
+
+if add_ev
+  marginal = add_ev_to_dmarginal(marginal, engine.evidence, engine.node_sizes);
+end    
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function marginal = marginal_nodes(engine, nodes, t, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (hmm)
+% marginal = marginal_nodes(engine, nodes, t, add_ev)
+%
+% 'nodes' must be a single node.
+% t is the time slice.
+
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+
+assert(length(nodes)==1)
+ss = engine.slice_size;
+
+i = nodes(1);
+bigT = engine.one_slice_marginal(:,t);
+dom = i + (t-1)*ss;
+
+ns = engine.eff_node_sizes(:);
+bigdom = 1:ss;
+marginal.T = marg_table(bigT, bigdom + (t-1)*ss, ns(bigdom), dom, engine.maximize);
+
+marginal.domain = dom;
+marginal.mu = [];
+marginal.Sigma = [];
+
+if add_ev
+  marginal = add_ev_to_dmarginal(marginal, engine.evidence, engine.node_sizes);
+end    
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+/mk_hmm_obs_lik_matrix.m/1.1.1.1/Sun May  4 21:42:26 2003//
+/mk_hmm_obs_lik_vec.m/1.1.1.1/Thu Jan 23 18:50:10 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@hmm_inf_engine/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_matrix.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function obslik = mk_hmm_obs_lik_matrix(engine, evidence)
+
+T  = size(evidence,2);
+Q = length(engine.startprob);
+obslik = ones(Q, T);
+bnet = bnet_from_engine(engine);
+% P(o1,o2| Q1,Q2) = P(o1|Q1,Q2) * P(o2|Q1,Q2)
+onodes = bnet.observed;
+for i=1:length(onodes)
+  data = cell2num(evidence(onodes(i),:));
+  if bnet.auto_regressive(onodes(i))
+    params = engine.obsprob{i};
+    mu = params.big_mu;
+    Sigma = params.big_Sigma,
+    W = params.big_W;
+    mu0 = params.big_mu0;
+    Sigma0 = params.big_Sigma0;
+    %obslik_i = mk_arhmm_obs_lik(data, mu, Sigma, W, mu0, Sigma0
+    obslik_i = clg_prob(data(:,1:T-1), data(:,2:T), mu, Sigma, W);
+    obslik_i = [mixgauss_prob(data(:,1), mu0, Sigma0) obslik_i];
+  elseif myismember(onodes(i), bnet.dnodes)
+    %obslik_i = eval_pdf_cond_multinomial(data, engine.obsprob{i}.big_CPT);
+    obslik_i = multinomial_prob(data, engine.obsprob{i}.big_CPT);
+  else
+    %obslik_i = eval_pdf_cond_gauss(data, engine.obsprob{i}.big_mu, engine.obsprob{i}.big_Sigma);
+    obslik_i = mixgauss_prob(data, engine.obsprob{i}.big_mu, engine.obsprob{i}.big_Sigma);
+  end
+  obslik = obslik .* obslik_i;
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_vec.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function obslik = mk_hmm_obs_lik_vec(engine, evidence)
+
+% P(o1,o2| h) = P(o1|h) * P(o2|h) where h = Q1,Q2,...
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+onodes = bnet.observed;
+hnodes = mysetdiff(1:ss, onodes);
+ns = bnet.node_sizes(:);
+ns(onodes) = 1;
+
+Q = length(engine.startprob);
+obslik = ones(Q, 1);
+
+for i=1:length(onodes)
+  o = onodes(i);
+  %data = cell2num(evidence(o,1));
+  data = evidence{o,1};
+  if myismember(o, bnet.dnodes)
+    obslik_i = eval_pdf_cond_multinomial(data, engine.obsprob{i}.CPT);
+  else
+    if bnet.auto_regressive(o)
+      error('can''t handle AR nodes')
+    end
+    %% calling mk_ghmm_obs_lik, which calls gaussian_prob, is slow, so we inline it
+    %% and use the pre-computed  inverse matrix
+    %obslik_i = mk_ghmm_obs_lik(data, engine.obsprob{i}.mu, engine.obsprob{i}.Sigma);
+    x = data(:);
+    m = engine.obsprob{i}.mu;
+    Qi = size(m, 2);
+    obslik_i = size(Qi, 1);
+    invC = engine.obsprob{i}.inv_Sigma;
+    denom = engine.obsprob{i}.denom;
+    for j=1:Qi
+      numer = exp(-0.5 * (x-m(:,j))' * invC(:,:,j) * (x-m(:,j)));
+      obslik_i(j) = numer / denom(j);
+    end
+  end
+  % convert P(o|ps) into P(o|h) by multiplying onto a (h,o) potential of all 1s
+  ps = bnet.parents{o};
+  dom = [ps o];
+  obspot_i = dpot(dom, ns(dom), obslik_i);
+  dom = [hnodes o];
+  obspot = dpot(dom, ns(dom));
+  obspot = multiply_by_pot(obspot, obspot_i);
+  % compute p(oi|h) * p(oj|h)
+  S = struct(obspot);
+  obslik = obslik .* S.T(:);
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@hmm_inf_engine/update_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function engine = update_engine(engine, newCPDs)
+% UPDATE_ENGINE Update the engine to take into account the new parameters (hmm)
+% engine = update_engine(engine, newCPDs)
+
+%engine.inf_engine.bnet.CPD = newCPDs;
+engine.inf_engine = update_engine(engine.inf_engine, newCPDs);
+[engine.startprob, engine.transprob, engine.obsprob] = dbn_to_hmm(bnet_from_engine(engine));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/enter_soft_evidence1.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_soft_evidence2.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_soft_evidence3.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_soft_evidence4.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,119 @@
+function [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (jtree_dbn)
+% [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+
+[ss T] = size(CPDpot);
+Q = length(engine.jtree_struct.cliques);
+clpot = cell(Q,T); % clpot{t} contains evidence from slices (t-1, t) 
+seppot = cell(Q,Q,T);
+ll = zeros(1,Q);
+logscale = zeros(1,T);
+bnet = bnet_from_engine(engine);
+
+% Forwards pass.
+% Compute distribution on clq C,
+% where C is the out interface to (t-1,t).
+% Then pass this to clq D, where D is the in inferface to (t+1,t).
+% Then propagate from D to later slices.
+
+C = engine.out_clq;
+assert(C==engine.jtree_struct.root_clq);
+D = engine.in_clq;
+slice1 = 1:ss;
+slice2 = slice1 + ss;
+for t=2:T
+  if t==2
+    clqs = engine.jtree_struct.clq_ass_to_node([slice1 slice2]);
+    pots = CPDpot(:,t-1:t);
+  else
+    %clqs = [D; engine.clq_ass_to_node(:,2)];
+    clqs = [D engine.jtree_struct.clq_ass_to_node(slice2)];
+    phiC = set_domain_pot(phiC, engine.interface); % shift back to slice 1
+    pots = [ {phiC}; CPDpot(:,t)]; % CPDpot domains are always slice 2
+  end
+  [clpot(:,t), seppot(:,:,t)] =  init_pot(engine.jtree_struct.cliques, clqs, pots, pot_type, ...
+					 find(observed(:,t-1:t)), bnet.node_sizes(:), bnet.cnodes);
+  [clpot(:,t), seppot(:,:,t)] = collect_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.postorder, ...
+						    engine.jtree_struct.postorder_parents,...
+						    engine.jtree_struct.separator);
+
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  logscale(t) = ll(C);
+
+  phiC = marginalize_pot(clpot{C,t}, engine.interface+ss, engine.maximize);
+end
+
+
+
+% Backwards pass.
+% Pass evidence from clq C to clq D,
+% where C is the in interface to (t,t+1) and D is the out inferface to (t-1,t)
+% Then propagate evidence from D to earlier slices.
+C = engine.in_clq;
+D = engine.out_clq;
+for t=T:-1:2
+  [clpot(:,t), seppot(:,:,t)] = distribute_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.preorder, ...
+						    engine.jtree_struct.preorder_children, ...
+						    engine.jtree_struct.separator);
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  logscale(t) = ll(C);
+  
+  if t >= 3
+    phiC = marginalize_pot(clpot{C,t}, engine.interface, engine.maximize);
+    phiC = set_domain_pot(phiC, engine.interface+ss); % shift forward to slice 2
+    phiD = marginalize_pot(clpot{D,t-1}, engine.interface+ss, engine.maximize);
+    ratio = divide_by_pot(phiC, phiD);
+    clpot{D,t-1} = multiply_by_pot(clpot{D,t-1}, ratio);
+  end
+end
+
+loglik = sum(logscale);
+
+
+%%%%%%%
+function [clpot, seppot] = init_pot(cliques, clqs, pots, pot_type, onodes, ns, cnodes);
+
+% Set the clique potentials to all 1s
+C = length(cliques);
+clpot = cell(1,C);
+for i=1:C
+  clpot{i} = mk_initial_pot(pot_type, cliques{i}, ns, cnodes, onodes);
+end
+
+% Multiply on specified potentials
+for i=1:length(clqs)
+  c = clqs(i);
+  clpot{c} = multiply_by_pot(clpot{c}, pots{i});
+end
+
+seppot = cell(C,C); % implicitely initialized to 1
+
+
+%%%%
+function [clpot, seppot] = collect_evidence(clpot, seppot, maximize, postorder, postorder_parents,...
+					    separator)
+for n=postorder %postorder(1:end-1)
+  for p=postorder_parents{n}
+    %clpot{p} = divide_by_pot(clpot{n}, seppot{p,n}); % dividing by 1 is redundant
+    seppot{p,n} = marginalize_pot(clpot{n}, separator{p,n}, maximize);
+    clpot{p} = multiply_by_pot(clpot{p}, seppot{p,n});
+  end
+end
+
+
+%%%%
+function [clpot, seppot] = distribute_evidence(clpot, seppot, maximize, preorder, preorder_children,...
+					       separator)
+for n=preorder
+  for c=preorder_children{n}
+    clpot{c} = divide_by_pot(clpot{c}, seppot{n,c}); 
+    seppot{n,c} = marginalize_pot(clpot{n}, separator{n,c}, maximize);
+    clpot{c} = multiply_by_pot(clpot{c}, seppot{n,c});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,143 @@
+function [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (jtree_dbn)
+% [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+
+[ss T] = size(CPDpot);
+Q = length(engine.jtree_struct.cliques);
+clpot = cell(Q,T); % clpot{t} contains evidence from slices (t-1, t) 
+seppot = cell(Q,Q,T);
+ll = zeros(1,Q);
+logscale = ones(1,T); % log(logscale(1)) = 0
+bnet = bnet_from_engine(engine);
+
+slice1 = 1:ss;
+slice2 = slice1+ss;
+
+% calibrate each 2-slice jtree in isolation
+for t=2:T
+  if t==2
+    clqs = engine.jtree_struct.clq_ass_to_node([slice1 slice2]);
+    pots = CPDpot(:,t-1:t);
+  else
+    clqs = engine.jtree_struct.clq_ass_to_node(slice2);
+    pots = CPDpot(:,t); % CPDpot domains are always slice 2
+  end
+  [clpot(:,t), sepot(:,:,t)] =  init_pot(engine.jtree_struct.cliques, clqs, pots, pot_type, ...
+					 find(observed(:,t-1:t)), bnet.node_sizes(:), bnet.cnodes);
+  [clpot(:,t), seppot(:,:,t)] = collect_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.postorder, ...
+						    engine.jtree_struct.postorder_parents,...
+						    engine.jtree_struct.separator);
+  [clpot(:,t), seppot(:,:,t)] = distribute_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.preorder, ...
+						    engine.jtree_struct.preorder_children, ...
+						    engine.jtree_struct.separator);
+end
+
+% Forwards pass.
+% Compute distribution on clq C,
+% where C is the out interface to (t-1,t).
+% Then pass this to clq D, where D is the in inferface to (t+1,t).
+% Then propagate from D to later slices.
+
+C = engine.out_clq;
+D = engine.in_clq;
+for t=2:T-1
+  phiC = marginalize_pot(clpot{C,t}, engine.interface+ss, engine.maximize);
+  phiC = set_domain_pot(phiC, engine.interface); % shift back to slice 1
+  phiD = marginalize_pot(clpot{D,t+1}, engine.interface, engine.maximize);
+  ratio = divide_by_pot(phiC, phiD);
+  clpot{D,t+1} = multiply_by_pot(clpot{D,t+1}, ratio);
+
+  [clpot(:,t), seppot(:,:,t)] = distribute_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.preorder, ...
+						    engine.jtree_struct.preorder_children, ...
+						    engine.jtree_struct.separator);
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  logscale(t) = ll(1);
+end
+
+% Backwards pass.
+% Pass evidence from clq C to clq D,
+% where C is the in interface to (t,t+1) and D is the out inferface to (t-1,t)
+% Then propagate evidence from D to earlier slices.
+C = engine.in_clq;
+D = engine.out_clq;
+for t=T:-1:2
+  [clpot(:,t), seppot(:,:,t)] = collect_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						 engine.jtree_struct.postorder, ...
+						 engine.jtree_struct.postorder_parents,...
+						 engine.jtree_struct.separator);
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  logscale(t) = ll(1);
+
+  if t >= 3
+    phiC = marginalize_pot(clpot{C,t}, engine.interface, engine.maximize);
+    phiC = set_domain_pot(phiC, engine.interface+ss); % shift forward to slice 2
+    phiD = marginalize_pot(clpot{D,t-1}, engine.interface+ss, engine.maximize);
+    ratio = divide_by_pot(phiC, phiD);
+    clpot{D,t-1} = multiply_by_pot(clpot{D,t-1}, ratio);
+  end
+end
+
+loglik = sum(logscale);
+
+%%%%%%%%%%
+
+function [clpot, seppot] = calibrate(engine, clpot, seppot)
+
+  [clpot(:,t), seppot(:,:,t)] = collect_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.postorder, ...
+						    engine.jtree_struct.postorder_parents,...
+						    engine.jtree_struct.separator);
+  [clpot(:,t), seppot(:,:,t)] = distribute_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.preorder, ...
+						    engine.jtree_struct.preorder_children, ...
+						    engine.jtree_struct.separator);
+
+
+%%%%%%%
+function [clpot, seppot] = init_pot(cliques, clqs, pots, pot_type, onodes, ns, cnodes);
+
+% Set the clique potentials to all 1s
+C = length(cliques);
+clpot = cell(1,C);
+for i=1:C
+  clpot{i} = mk_initial_pot(pot_type, cliques{i}, ns, cnodes, onodes);
+end
+
+% Multiply on specified potentials
+for i=1:length(clqs)
+  c = clqs(i);
+  clpot{c} = multiply_by_pot(clpot{c}, pots{i});
+end
+
+seppot = cell(C,C); % implicitely initialized to 1
+
+
+%%%%
+function [clpot, seppot] = collect_evidence(clpot, seppot, maximize, postorder, postorder_parents,...
+					    separator)
+for n=postorder %postorder(1:end-1)
+  for p=postorder_parents{n}
+    %clpot{p} = divide_by_pot(clpot{n}, seppot{p,n}); % dividing by 1 is redundant
+    seppot{p,n} = marginalize_pot(clpot{n}, separator{p,n}, maximize);
+    clpot{p} = multiply_by_pot(clpot{p}, seppot{p,n});
+  end
+end
+
+
+%%%%
+function [clpot, seppot] = distribute_evidence(clpot, seppot, maximize, preorder, preorder_children,...
+					       separator)
+for n=preorder
+  for c=preorder_children{n}
+    clpot{c} = divide_by_pot(clpot{c}, seppot{n,c}); 
+    seppot{n,c} = marginalize_pot(clpot{n}, separator{n,c}, maximize);
+    clpot{c} = multiply_by_pot(clpot{c}, seppot{n,c});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,125 @@
+function [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (jtree_dbn)
+% [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+
+[ss T] = size(CPDpot);
+Q = length(engine.jtree_struct.cliques);
+clpot = cell(Q,T); % clpot{t} contains evidence from slices (t-1, t) 
+seppot = cell(Q,Q,T);
+ll = zeros(1,Q);
+logscale = zeros(1,T);
+bnet = bnet_from_engine(engine);
+
+% Forwards pass.
+% Compute distribution on clq C,
+% where C is the out interface to (t-1,t).
+% Then pass this to clq D, where D is the in inferface to (t+1,t).
+% Then propagate from D to later slices.
+
+C = engine.out_clq;
+assert(C==engine.jtree_struct.root_clq);
+D = engine.in_clq;
+slice1 = 1:ss;
+slice2 = slice1 + ss;
+Ntransient = length(engine.transient);
+trans = cell(Ntransient,1);
+for t=2:T
+  if t==2
+    clqs = engine.jtree_struct.clq_ass_to_node([slice1 slice2]);
+    pots = CPDpot(:,t-1:t);
+  else
+    %clqs = [D; engine.clq_ass_to_node(:,2)];
+    clqs = [D engine.jtree_struct.clq_ass_to_node([engine.transient slice2])];
+    phiC = set_domain_pot(phiC, engine.interface); % shift back to slice 1
+    for i=1:Ntransient
+      trans{i} = CPDpot{engine.transient(i), t-1};
+      trans{i} = set_domain_pot(trans{i}, domain_pot(trans{i})-ss); % shift back to slice 1
+    end
+    pots = [ {phiC}; trans; CPDpot(:,t)]; 
+  end
+  [clpot(:,t), seppot(:,:,t)] =  init_pot(engine.jtree_struct.cliques, clqs, pots, pot_type, ...
+					 find(observed(:,t-1:t)), bnet.node_sizes(:), bnet.cnodes);
+  [clpot(:,t), seppot(:,:,t)] = collect_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.postorder, ...
+						    engine.jtree_struct.postorder_parents,...
+						    engine.jtree_struct.separator);
+
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  logscale(t) = ll(C);
+
+  phiC = marginalize_pot(clpot{C,t}, engine.interface+ss, engine.maximize);
+end
+
+
+
+% Backwards pass.
+% Pass evidence from clq C to clq D,
+% where C is the in interface to (t,t+1) and D is the out inferface to (t-1,t)
+% Then propagate evidence from D to earlier slices.
+C = engine.in_clq;
+D = engine.out_clq;
+for t=T:-1:2
+  [clpot(:,t), seppot(:,:,t)] = distribute_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.preorder, ...
+						    engine.jtree_struct.preorder_children, ...
+						    engine.jtree_struct.separator);
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  logscale(t) = ll(C);
+  
+  if t >= 3
+    phiC = marginalize_pot(clpot{C,t}, engine.interface, engine.maximize);
+    phiC = set_domain_pot(phiC, engine.interface+ss); % shift forward to slice 2
+    phiD = marginalize_pot(clpot{D,t-1}, engine.interface+ss, engine.maximize);
+    ratio = divide_by_pot(phiC, phiD);
+    clpot{D,t-1} = multiply_by_pot(clpot{D,t-1}, ratio);
+  end
+end
+
+loglik = sum(logscale);
+
+
+%%%%%%%
+function [clpot, seppot] = init_pot(cliques, clqs, pots, pot_type, onodes, ns, cnodes);
+
+% Set the clique potentials to all 1s
+C = length(cliques);
+clpot = cell(1,C);
+for i=1:C
+  clpot{i} = mk_initial_pot(pot_type, cliques{i}, ns, cnodes, onodes);
+end
+
+% Multiply on specified potentials
+for i=1:length(clqs)
+  c = clqs(i);
+  clpot{c} = multiply_by_pot(clpot{c}, pots{i});
+end
+
+seppot = cell(C,C); % implicitely initialized to 1
+
+
+%%%%
+function [clpot, seppot] = collect_evidence(clpot, seppot, maximize, postorder, postorder_parents,...
+					    separator)
+for n=postorder %postorder(1:end-1)
+  for p=postorder_parents{n}
+    %clpot{p} = divide_by_pot(clpot{n}, seppot{p,n}); % dividing by 1 is redundant
+    seppot{p,n} = marginalize_pot(clpot{n}, separator{p,n}, maximize);
+    clpot{p} = multiply_by_pot(clpot{p}, seppot{p,n});
+  end
+end
+
+
+%%%%
+function [clpot, seppot] = distribute_evidence(clpot, seppot, maximize, preorder, preorder_children,...
+					       separator)
+for n=preorder
+  for c=preorder_children{n}
+    clpot{c} = divide_by_pot(clpot{c}, seppot{n,c}); 
+    seppot{n,c} = marginalize_pot(clpot{n}, separator{n,c}, maximize);
+    clpot{c} = multiply_by_pot(clpot{c}, seppot{n,c});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence4.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,149 @@
+function [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (jtree_dbn)
+% [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+
+[ss T] = size(CPDpot);
+Q = length(engine.jtree_struct.cliques);
+clpot = cell(Q,T); % clpot{t} contains evidence from slices (t-1, t) 
+seppot = cell(Q,Q,T);
+ll = zeros(1,Q);
+logscale = ones(1,T); % log(logscale(1)) = 0
+bnet = bnet_from_engine(engine);
+
+slice1 = 1:ss;
+slice2 = slice1+ss;
+Ntransient = length(engine.transient);
+trans = cell(Ntransient,1);
+
+% calibrate each 2-slice jtree in isolation
+for t=2:T
+  if t==2
+    clqs = engine.jtree_struct.clq_ass_to_node([slice1 slice2]);
+    pots = CPDpot(:,t-1:t);
+  else
+    clqs = engine.jtree_struct.clq_ass_to_node([engine.transient slice2]);
+    for i=1:Ntransient
+      trans{i} = CPDpot{engine.transient(i), t-1};
+      trans{i} = set_domain_pot(trans{i}, domain_pot(trans{i})-ss); % shift back to slice 1
+    end
+    pots = [ trans; CPDpot(:,t)]; 
+  end
+  [clpot(:,t), sepot(:,:,t)] =  init_pot(engine.jtree_struct.cliques, clqs, pots, pot_type, ...
+					 find(observed(:,t-1:t)), bnet.node_sizes(:), bnet.cnodes);
+  [clpot(:,t), seppot(:,:,t)] = collect_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.postorder, ...
+						    engine.jtree_struct.postorder_parents,...
+						    engine.jtree_struct.separator);
+  [clpot(:,t), seppot(:,:,t)] = distribute_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.preorder, ...
+						    engine.jtree_struct.preorder_children, ...
+						    engine.jtree_struct.separator);
+end
+
+% Forwards pass.
+% Compute distribution on clq C,
+% where C is the out interface to (t-1,t).
+% Then pass this to clq D, where D is the in inferface to (t+1,t).
+% Then propagate from D to later slices.
+
+C = engine.out_clq;
+D = engine.in_clq;
+for t=2:T-1
+  phiC = marginalize_pot(clpot{C,t}, engine.interface+ss, engine.maximize);
+  phiC = set_domain_pot(phiC, engine.interface); % shift back to slice 1
+  phiD = marginalize_pot(clpot{D,t+1}, engine.interface, engine.maximize);
+  ratio = divide_by_pot(phiC, phiD);
+  clpot{D,t+1} = multiply_by_pot(clpot{D,t+1}, ratio);
+
+  [clpot(:,t), seppot(:,:,t)] = distribute_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.preorder, ...
+						    engine.jtree_struct.preorder_children, ...
+						    engine.jtree_struct.separator);
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  logscale(t) = ll(1);
+end
+
+% Backwards pass.
+% Pass evidence from clq C to clq D,
+% where C is the in interface to (t,t+1) and D is the out inferface to (t-1,t)
+% Then propagate evidence from D to earlier slices.
+C = engine.in_clq;
+D = engine.out_clq;
+for t=T:-1:2
+  [clpot(:,t), seppot(:,:,t)] = collect_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						 engine.jtree_struct.postorder, ...
+						 engine.jtree_struct.postorder_parents,...
+						 engine.jtree_struct.separator);
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  logscale(t) = ll(1);
+
+  if t >= 3
+    phiC = marginalize_pot(clpot{C,t}, engine.interface, engine.maximize);
+    phiC = set_domain_pot(phiC, engine.interface+ss); % shift forward to slice 2
+    phiD = marginalize_pot(clpot{D,t-1}, engine.interface+ss, engine.maximize);
+    ratio = divide_by_pot(phiC, phiD);
+    clpot{D,t-1} = multiply_by_pot(clpot{D,t-1}, ratio);
+  end
+end
+
+loglik = sum(logscale);
+
+%%%%%%%%%%
+
+function [clpot, seppot] = calibrate(engine, clpot, seppot)
+
+  [clpot(:,t), seppot(:,:,t)] = collect_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.postorder, ...
+						    engine.jtree_struct.postorder_parents,...
+						    engine.jtree_struct.separator);
+  [clpot(:,t), seppot(:,:,t)] = distribute_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.preorder, ...
+						    engine.jtree_struct.preorder_children, ...
+						    engine.jtree_struct.separator);
+
+
+%%%%%%%
+function [clpot, seppot] = init_pot(cliques, clqs, pots, pot_type, onodes, ns, cnodes);
+
+% Set the clique potentials to all 1s
+C = length(cliques);
+clpot = cell(1,C);
+for i=1:C
+  clpot{i} = mk_initial_pot(pot_type, cliques{i}, ns, cnodes, onodes);
+end
+
+% Multiply on specified potentials
+for i=1:length(clqs)
+  c = clqs(i);
+  clpot{c} = multiply_by_pot(clpot{c}, pots{i});
+end
+
+seppot = cell(C,C); % implicitely initialized to 1
+
+
+%%%%
+function [clpot, seppot] = collect_evidence(clpot, seppot, maximize, postorder, postorder_parents,...
+					    separator)
+for n=postorder %postorder(1:end-1)
+  for p=postorder_parents{n}
+    %clpot{p} = divide_by_pot(clpot{n}, seppot{p,n}); % dividing by 1 is redundant
+    seppot{p,n} = marginalize_pot(clpot{n}, separator{p,n}, maximize);
+    clpot{p} = multiply_by_pot(clpot{p}, seppot{p,n});
+  end
+end
+
+
+%%%%
+function [clpot, seppot] = distribute_evidence(clpot, seppot, maximize, preorder, preorder_children,...
+					       separator)
+for n=preorder
+  for c=preorder_children{n}
+    clpot{c} = divide_by_pot(clpot{c}, seppot{n,c}); 
+    seppot{n,c} = marginalize_pot(clpot{n}, separator{n,c}, maximize);
+    clpot{c} = multiply_by_pot(clpot{c}, seppot{n,c});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Broken/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+function marginal = marginal_nodes(engine, nodes, t, fam)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (bk)
+%
+%   marginal = marginal_nodes(engine, i, t)
+% returns Pr(X(i,t) | Y(1:T)), where X(i,t) is the i'th node in the t'th slice.
+%
+%   marginal = marginal_nodes(engine, query, t)
+% returns Pr(X(query(1),t), ... X(query(end),t) | Y(1:T)),
+% where 't' specifies the time slice of the earliest node in the query.
+% 'query' cannot span more than 2 time slices.
+%
+% Example:
+% Consider a DBN with 2 nodes per slice.
+% Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3.
+
+if nargin < 3, t = 1; end
+if nargin < 4, fam = 0; else fam = 1; end
+
+
+% clpot{t} contains slice t-1 and t
+% Example
+% clpot #: 1    2    3
+% slices:  1  1,2  2,3
+% For filtering, we must take care not to take future evidence into account.
+% For smoothing, clpot{1} does not exist.
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+
+if t < engine.T
+  slice = t+1;
+  nodes2 = nodes;
+else % earliest t is T, so all nodes fit in one slice
+  slice = engine.T;
+  nodes2 = nodes + ss;
+end
+  
+c = clq_containing_nodes(engine.jtree_engine, nodes2, fam);
+assert(c >= 1);
+
+%disp(['computing marginal on ' num2str(nodes) ' t = ' num2str(t)]);
+%disp(['using ' num2str(nodes2) ' slice = ' num2str(slice) 'clq = ' num2str(c)]);
+
+bigpot = engine.clpot{c, slice};
+
+pot = marginalize_pot(bigpot, nodes2, engine.maximize);
+marginal = pot_to_marginal(pot);
+
+% we convert the domain to the unrolled numbering system
+% so that update_ess extracts the right evidence.
+marginal.domain = nodes+(t-1)*ss;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/enter_evidence.m/1.1.1.1/Sat Jan 11 18:41:30 2003//
+/enter_soft_evidence.m/1.1.1.1/Thu Feb 19 01:12:08 2004//
+/jtree_dbn_inf_engine.m/1.1.1.1/Thu Nov 14 16:32:00 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Fri Nov 22 23:51:58 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+A D/Broken////
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@jtree_dbn_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/enter_soft_evidence_nonint.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_soft_evidence_trans.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/jtree_dbn_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/jtree_dbn_inf_engine1.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/jtree_dbn_inf_engine2.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@jtree_dbn_inf_engine/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_nonint.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,135 @@
+function [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (jtree_dbn)
+% [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+
+[ss T] = size(CPDpot);
+Q = length(engine.jtree_struct.cliques);
+clpot = cell(Q,T); % clpot{t} contains evidence from slices (t-1, t) 
+seppot = cell(Q,Q,T);
+ll = zeros(1,Q);
+logscale = zeros(1,T);
+bnet = bnet_from_engine(engine);
+
+% Forwards pass.
+% Compute distribution on clq C,
+% where C is the out interface to (t-1,t).
+% Then pass this to clq D, where D is the in inferface to (t+1,t).
+% Then propagate from D to later slices.
+
+C = engine.out_clq;
+assert(C==engine.jtree_struct.root_clq);
+D = engine.in_clq;
+slice1 = 1:ss;
+slice2 = slice1 + ss;
+Nnonint = length(engine.nonint);
+nonint = cell(Nnonint, 1);
+for t=1:T
+  if t==1
+    pots = [CPDpot(:,1); CPDpot(engine.interface, 2)];
+    clqs = engine.jtree_struct.clq_ass_to_node([slice1 engine.interface+ss]);
+    obs = find(observed(:,1:2));
+  elseif t==T
+    clqs = [D engine.jtree_struct.clq_ass_to_node(engine.nonint)];
+    phiC = set_domain_pot(phiC, engine.interface); % shift back to slice 1
+    for i=1:Nnonint
+      nonint{i} = CPDpot{engine.nonint(i), t};
+      nonint{i} = set_domain_pot(nonint{i}, domain_pot(nonint{i})-ss); % shift back to slice 1
+    end
+    pots = [ {phiC}; nonint]; 
+    obs = find(observed(:,T));
+  else
+    clqs = [D engine.jtree_struct.clq_ass_to_node([engine.nonint engine.interface+ss])];
+    phiC = set_domain_pot(phiC, engine.interface); % shift back to slice 1
+    for i=1:Nnonint
+      nonint{i} = CPDpot{engine.nonint(i), t};
+      nonint{i} = set_domain_pot(nonint{i}, domain_pot(nonint{i})-ss); % shift back to slice 1
+    end
+    pots = [ {phiC}; nonint; CPDpot(engine.interface, t+1)]; 
+    obs = find(observed(:,t:t+1));
+  end
+  [clpot(:,t), seppot(:,:,t)] =  init_pot(engine.jtree_struct.cliques, clqs, pots, pot_type, ...
+					 obs, bnet.node_sizes(:), bnet.cnodes);
+  [clpot(:,t), seppot(:,:,t)] = collect_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.postorder, ...
+						    engine.jtree_struct.postorder_parents,...
+						    engine.jtree_struct.separator);
+
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  logscale(t) = ll(C);
+
+  phiC = marginalize_pot(clpot{C,t}, engine.interface+ss, engine.maximize);
+end
+
+
+
+% Backwards pass.
+% Pass evidence from clq C to clq D,
+% where C is the in interface to (t,t+1) and D is the out inferface to (t-1,t)
+% Then propagate evidence from D to earlier slices.
+C = engine.in_clq;
+D = engine.out_clq;
+for t=T:-1:1
+  [clpot(:,t), seppot(:,:,t)] = distribute_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.preorder, ...
+						    engine.jtree_struct.preorder_children, ...
+						    engine.jtree_struct.separator);
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  %logscale(t) = ll(C);
+  
+  if t >= 2
+    phiC = marginalize_pot(clpot{C,t}, engine.interface, engine.maximize);
+    phiC = set_domain_pot(phiC, engine.interface+ss); % shift forward to slice 2
+    phiD = marginalize_pot(clpot{D,t-1}, engine.interface+ss, engine.maximize);
+    ratio = divide_by_pot(phiC, phiD);
+    clpot{D,t-1} = multiply_by_pot(clpot{D,t-1}, ratio);
+  end
+end
+
+loglik = sum(logscale);
+
+
+%%%%%%%
+function [clpot, seppot] = init_pot(cliques, clqs, pots, pot_type, onodes, ns, cnodes);
+
+% Set the clique potentials to all 1s
+C = length(cliques);
+clpot = cell(1,C);
+for i=1:C
+  clpot{i} = mk_initial_pot(pot_type, cliques{i}, ns, cnodes, onodes);
+end
+
+% Multiply on specified potentials
+for i=1:length(clqs)
+  c = clqs(i);
+  clpot{c} = multiply_by_pot(clpot{c}, pots{i});
+end
+
+seppot = cell(C,C); % implicitely initialized to 1
+
+
+%%%%
+function [clpot, seppot] = collect_evidence(clpot, seppot, maximize, postorder, postorder_parents,...
+					    separator)
+for n=postorder %postorder(1:end-1)
+  for p=postorder_parents{n}
+    %clpot{p} = divide_by_pot(clpot{n}, seppot{p,n}); % dividing by 1 is redundant
+    seppot{p,n} = marginalize_pot(clpot{n}, separator{p,n}, maximize);
+    clpot{p} = multiply_by_pot(clpot{p}, seppot{p,n});
+  end
+end
+
+
+%%%%
+function [clpot, seppot] = distribute_evidence(clpot, seppot, maximize, preorder, preorder_children,...
+					       separator)
+for n=preorder
+  for c=preorder_children{n}
+    clpot{c} = divide_by_pot(clpot{c}, seppot{n,c}); 
+    seppot{n,c} = marginalize_pot(clpot{n}, separator{n,c}, maximize);
+    clpot{c} = multiply_by_pot(clpot{c}, seppot{n,c});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_trans.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,135 @@
+function [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (jtree_dbn)
+% [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type, filter)
+
+[ss T] = size(CPDpot);
+Q = length(engine.jtree_struct.cliques);
+clpot = cell(Q,T); % clpot{t} contains evidence from slices (t-1, t) 
+seppot = cell(Q,Q,T);
+ll = zeros(1,Q);
+logscale = zeros(1,T);
+bnet = bnet_from_engine(engine);
+
+% Forwards pass.
+% Compute distribution on clq C,
+% where C is the out interface to (t-1,t).
+% Then pass this to clq D, where D is the in inferface to (t+1,t).
+% Then propagate from D to later slices.
+
+C = engine.out_clq;
+assert(C==engine.jtree_struct.root_clq);
+D = engine.in_clq;
+slice1 = 1:ss;
+slice2 = slice1 + ss;
+Ntransient = length(engine.transient);
+trans = cell(Ntransient,1);
+for t=1:T
+  if t==1
+    pots = [CPDpot(:,1); CPDpot(engine.persist, 2)];
+    clqs = engine.jtree_struct.clq_ass_to_node([slice1 engine.persist+ss]);
+    obs = find(observed(:,1:2));
+  elseif t==T
+    clqs = [D engine.jtree_struct.clq_ass_to_node(engine.transient)];
+    phiC = set_domain_pot(phiC, engine.interface); % shift back to slice 1
+    for i=1:Ntransient
+      trans{i} = CPDpot{engine.transient(i), t};
+      trans{i} = set_domain_pot(trans{i}, domain_pot(trans{i})-ss); % shift back to slice 1
+    end
+    pots = [ {phiC}; trans]; 
+    obs = find(observed(:,T));
+  else
+    clqs = [D engine.jtree_struct.clq_ass_to_node([engine.transient engine.persist+ss])];
+    phiC = set_domain_pot(phiC, engine.interface); % shift back to slice 1
+    for i=1:Ntransient
+      trans{i} = CPDpot{engine.transient(i), t};
+      trans{i} = set_domain_pot(trans{i}, domain_pot(trans{i})-ss); % shift back to slice 1
+    end
+    pots = [ {phiC}; trans; CPDpot(engine.persist, t+1)]; 
+    obs = find(observed(:,t:t+1));
+  end
+  [clpot(:,t), seppot(:,:,t)] =  init_pot(engine.jtree_struct.cliques, clqs, pots, pot_type, ...
+					 obs, bnet.node_sizes(:), bnet.cnodes);
+  [clpot(:,t), seppot(:,:,t)] = collect_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.postorder, ...
+						    engine.jtree_struct.postorder_parents,...
+						    engine.jtree_struct.separator);
+
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  logscale(t) = ll(C);
+
+  phiC = marginalize_pot(clpot{C,t}, engine.interface+ss, engine.maximize);
+end
+
+
+
+% Backwards pass.
+% Pass evidence from clq C to clq D,
+% where C is the in interface to (t,t+1) and D is the out inferface to (t-1,t)
+% Then propagate evidence from D to earlier slices.
+C = engine.in_clq;
+D = engine.out_clq;
+for t=T:-1:1
+  [clpot(:,t), seppot(:,:,t)] = distribute_evidence(clpot(:,t), seppot(:,:,t), engine.maximize, ...
+						    engine.jtree_struct.preorder, ...
+						    engine.jtree_struct.preorder_children, ...
+						    engine.jtree_struct.separator);
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  %logscale(t) = ll(C);
+  
+  if t >= 2
+    phiC = marginalize_pot(clpot{C,t}, engine.interface, engine.maximize);
+    phiC = set_domain_pot(phiC, engine.interface+ss); % shift forward to slice 2
+    phiD = marginalize_pot(clpot{D,t-1}, engine.interface+ss, engine.maximize);
+    ratio = divide_by_pot(phiC, phiD);
+    clpot{D,t-1} = multiply_by_pot(clpot{D,t-1}, ratio);
+  end
+end
+
+loglik = sum(logscale);
+
+
+%%%%%%%
+function [clpot, seppot] = init_pot(cliques, clqs, pots, pot_type, onodes, ns, cnodes);
+
+% Set the clique potentials to all 1s
+C = length(cliques);
+clpot = cell(1,C);
+for i=1:C
+  clpot{i} = mk_initial_pot(pot_type, cliques{i}, ns, cnodes, onodes);
+end
+
+% Multiply on specified potentials
+for i=1:length(clqs)
+  c = clqs(i);
+  clpot{c} = multiply_by_pot(clpot{c}, pots{i});
+end
+
+seppot = cell(C,C); % implicitely initialized to 1
+
+
+%%%%
+function [clpot, seppot] = collect_evidence(clpot, seppot, maximize, postorder, postorder_parents,...
+					    separator)
+for n=postorder %postorder(1:end-1)
+  for p=postorder_parents{n}
+    %clpot{p} = divide_by_pot(clpot{n}, seppot{p,n}); % dividing by 1 is redundant
+    seppot{p,n} = marginalize_pot(clpot{n}, separator{p,n}, maximize);
+    clpot{p} = multiply_by_pot(clpot{p}, seppot{p,n});
+  end
+end
+
+
+%%%%
+function [clpot, seppot] = distribute_evidence(clpot, seppot, maximize, preorder, preorder_children,...
+					       separator)
+for n=preorder
+  for c=preorder_children{n}
+    clpot{c} = divide_by_pot(clpot{c}, seppot{n,c}); 
+    seppot{n,c} = marginalize_pot(clpot{n}, separator{n,c}, maximize);
+    clpot{c} = multiply_by_pot(clpot{c}, seppot{n,c});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+function engine = jtree_dbn_inf_engine(bnet, varargin)
+% JTREE_DBN_INF_ENGINE Junction tree inference algorithm for DBNs.
+
+ss = length(bnet.intra);
+
+onodes = [];
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'observed', onodes = args{i+1};
+    end
+  end
+end
+
+[int, engine.persist, engine.transient] = compute_interface_nodes(bnet.intra, bnet.inter);
+%engine.interface = engine.persist; % WRONG!
+engine.interface = int;
+engine.nonint = mysetdiff(1:ss, int);
+
+if 0
+  % Create a 2 slice jtree
+  % We force there to be cliques containing the in and out interfaces for slices t and t+1.
+  obs_nodes = [onodes(:) onodes(:)+ss];
+  engine.jtree_engine = jtree_inf_engine(bnet, 'observed', obs_nodes(:), ...
+					 'clusters', {int, int+ss}, 'root', int+ss);
+else
+  % Create a "1.5 slice" jtree, containing slice 1 and the interface nodes of slice 2
+  nodes15 = [1:ss int+ss];
+  N = length(nodes15);
+  dag15 = bnet.dag(nodes15, nodes15);
+  ns15 = bnet.node_sizes(nodes15);
+  eclass15 = bnet.equiv_class(nodes15);
+  discrete_bitv = zeros(1,2*ss);
+  discrete_bitv(bnet.dnodes) = 1;
+  discrete15 = find(discrete_bitv(nodes15));
+  bnet15 = mk_bnet(dag15, ns15, 'equiv_class', eclass15, 'discrete', discrete15);
+  bnet15.CPD = bnet.CPD; % CPDs for non-interface nodes in slice 2 will not be used
+  obs_bitv = zeros(1, 2*ss);
+  obs_bitv([onodes onodes+ss]) = 1;
+  obs_nodes15 = find(obs_bitv(nodes15));
+  int_bitv = zeros(1,ss);
+  int_bitv(int) = 1;
+  engine.jtree_engine = jtree_inf_engine(bnet15, 'observed', obs_nodes15(:), ...
+				     'clusters', {int, int+ss}, 'root', int+ss);
+end
+
+engine.in_clq = clq_containing_nodes(engine.jtree_engine, int);
+engine.out_clq = clq_containing_nodes(engine.jtree_engine, int+ss);
+
+engine.clq_ass_to_node = zeros(ss, 2);
+for i=1:ss
+  engine.clq_ass_to_node(i, 1) = clq_containing_nodes(engine.jtree_engine, i);
+  engine.clq_ass_to_node(i, 2) = clq_containing_nodes(engine.jtree_engine, i+ss);
+end
+
+engine.jtree_struct = struct(engine.jtree_engine); % violate object privacy
+
+% stuff needed by marginal_nodes
+engine.clpot = [];
+engine.maximize = [];
+engine.T = [];
+
+engine = class(engine, 'jtree_dbn_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+function engine = jtree_dbn_inf_engine(bnet, varargin)
+% JTREE_DBN_INF_ENGINE Junction tree inference algorithm for DBNs.
+
+ss = length(bnet.intra);
+
+onodes = [];
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'observed', onodes = args{i+1};
+    end
+  end
+end
+
+[int, engine.persist, engine.transient] = compute_interface_nodes(bnet.intra, bnet.inter);
+%engine.interface = engine.persist; % WRONG!
+engine.interface = int;
+engine.nonint = mysetdiff(1:ss, int);
+
+if 1
+  % Create a 2 slice jtree
+  % We force there to be cliques containing the in and out interfaces for slices t and t+1.
+  obs_nodes = [onodes(:) onodes(:)+ss];
+  engine.jtree_engine = jtree_inf_engine(bnet, 'observed', obs_nodes(:), ...
+					 'clusters', {int, int+ss}, 'root', int+ss);
+else
+  % Create a "1.5 slice" jtree, containing slice 1 and the interface nodes of slice 2
+  % To keep the node numbering the same, we simply disconnect the non-interface nodes
+  % from slice 2.
+  intra15 = bnet.intra;
+  for i=engine.nonint(:)'
+    intra15(i,:) = 0;
+    intra15(:,i) = 0;
+  end
+  bnet15 = mk_dbn(intra15, bnet.inter, bnet.node_sizes_slice, bnet.dnodes_slice, ...
+		  bnet.equiv_class(:,1), bnet.equiv_class(:,2), bnet.intra);
+  obs_nodes = [onodes(:) onodes(:)+ss];
+  engine.jtree_engine = jtree_inf_engine(bnet15, 'observed', obs_nodes(:), ...
+				     'clusters', {int, int+ss}, 'root', int+ss);
+end
+
+engine.in_clq = clq_containing_nodes(engine.jtree_engine, int);
+engine.out_clq = clq_containing_nodes(engine.jtree_engine, int+ss);
+
+engine.clq_ass_to_node = zeros(ss, 2);
+for i=1:ss
+  engine.clq_ass_to_node(i, 1) = clq_containing_nodes(engine.jtree_engine, i);
+  engine.clq_ass_to_node(i, 2) = clq_containing_nodes(engine.jtree_engine, i+ss);
+end
+
+engine.jtree_struct = struct(engine.jtree_engine); % violate object privacy
+
+% stuff needed by marginal_nodes
+engine.clpot = [];
+engine.maximize = [];
+engine.T = [];
+
+engine = class(engine, 'jtree_dbn_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function engine = jtree_dbn_inf_engine(bnet, varargin)
+% JTREE_DBN_INF_ENGINE Junction tree inference algorithm for DBNs.
+
+ss = length(bnet.intra);
+
+onodes = [];
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'observed', onodes = args{i+1};
+    end
+  end
+end
+
+[int, engine.persist, engine.transient] = compute_interface_nodes(bnet.intra, bnet.inter);
+%engine.interface = engine.persist; % WRONG!
+engine.interface = int;
+engine.nonint = mysetdiff(1:ss, int);
+
+
+% Create a 2 slice jtree
+% We force there to be cliques containing the in and out interfaces for slices t and t+1.
+obs_nodes = [onodes(:) onodes(:)+ss];
+engine.jtree_engine = jtree_inf_engine(bnet, 'observed', obs_nodes(:), ...
+					 'clusters', {int, int+ss}, 'root', int+ss);
+
+engine.in_clq = clq_containing_nodes(engine.jtree_engine, int);
+engine.out_clq = clq_containing_nodes(engine.jtree_engine, int+ss);
+engine.jtree_struct = struct(engine.jtree_engine); % violate object privacy
+
+
+
+% Also create an engine just for slice 1
+bnet1 = mk_bnet(bnet.intra1, bnet.node_sizes_slice, bnet.dnodes, bnet.equiv_class(:,1));
+for i=1:max(bnet1.equiv_class)
+  bnet1.CPD{i} = bnet.CPD{i};
+end
+
+engine.jtree_engine1 = jtree_inf_engine(bnet1, 'observed', onodes, 'clusters', {int}, ...
+					'root', int);
+
+engine.in_clq1 = clq_containing_nodes(engine.jtree_engine1, int);
+engine.jtree_struct1 = struct(engine.jtree_engine1); % violate object privacy
+
+
+
+
+% stuff needed by marginal_nodes
+engine.clpot = [];
+engine.T = [];
+engine.maximize = [];
+
+engine = class(engine, 'jtree_dbn_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,70 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (jtree_dbn)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product instead of sum-product [engine.maximize]
+% softCPDpot{n,t} - use soft potential for node n instead of its CPD; set to [] to use CPD
+% soft_evidence_nodes(i,1:2) = [n t] means the i'th piece of soft evidence is on node n in slice t 
+% soft_evidence{i} - prob distribution over values for soft_evidence_nodes(i,:)
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+
+% for add_ev in marginal_nodes
+T = size(evidence, 2);
+engine.evidence = evidence;
+bnet = bnet_from_engine(engine);
+ss = length(bnet.node_sizes_slice);
+ns = bnet.node_sizes_slice(:);
+engine.node_sizes = repmat(ns, [1 T]);
+softCPDpot = cell(ss,T);
+soft_evidence = {};
+soft_evidence_nodes = [];
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', engine.maximize = args{i+1}; 
+     case 'softCPDpot', softCPDpot = args{i+1};
+     case 'soft_evidence', soft_evidence = args{i+1};
+     case 'soft_evidence_nodes', soft_evidence_nodes = args{i+1};
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+engine.jtree_engine = set_fields(engine.jtree_engine, 'maximize', engine.maximize);
+engine.jtree_engine1 = set_fields(engine.jtree_engine1, 'maximize', engine.maximize);
+
+[ss T] = size(evidence);
+engine.T = T;
+observed_bitv = ~isemptycell(evidence);
+onodes = find(observed_bitv);
+pot_type = determine_pot_type(bnet, onodes);
+CPDpot = convert_dbn_CPDs_to_pots(bnet, evidence, pot_type, softCPDpot);
+
+if ~isempty(soft_evidence_nodes)
+  nsoft = size(soft_evidence_nodes,1);
+  for i=1:nsoft
+    n = soft_evidence_nodes(i,1);
+    t = soft_evidence_nodes(i,2);
+    if t==1
+      dom = n;
+    else
+      dom = n+ss;
+    end
+    pot = dpot(dom, ns(n), soft_evidence{i});
+    CPDpot{n,t} = multiply_by_pot(CPDpot{n,t}, pot);
+  end
+end
+  
+[engine.clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed_bitv, pot_type);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/enter_soft_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,126 @@
+function [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type)
+% ENTER_SOFT_EVIDENCE Add the specified soft evidence to the network (jtree_dbn)
+% [clpot, loglik] = enter_soft_evidence(engine, CPDpot, observed, pot_type)
+
+scale = 1;
+verbose = 0;
+
+[ss T] = size(CPDpot);
+Q = length(engine.jtree_struct.cliques);
+clpot = cell(Q,T); % clpot{t} contains evidence from slices (t-1, t) 
+seppot = cell(Q,Q,T);
+ll = zeros(1,Q);
+logscale = zeros(1,T);
+bnet = bnet_from_engine(engine);
+root = engine.jtree_struct.root_clq;
+
+% Forwards pass.
+% Compute distribution on clq C,
+% where C is the out interface to (t-1,t).
+% Then pass this to clq D, where D is the in inferface to (t+1,t).
+
+% Then propagate from D to later slices.
+
+slice1 = 1:ss;
+slice2 = slice1 + ss; 
+transient = engine.transient;
+persist = engine.persist;
+Ntransient = length(transient);
+trans = cell(Ntransient,1);
+if verbose, fprintf('forward pass\n'); end
+for t=1:T
+  if verbose, fprintf('%d ', t); end
+  if t==1
+    pots = [CPDpot(:,1); CPDpot(persist, 2)];
+    clqs = engine.jtree_struct.clq_ass_to_node([slice1 persist+ss]);
+    obs = find(observed(:,1:2));
+  elseif t==T
+    clqs = [engine.in_clq1 engine.jtree_struct1.clq_ass_to_node(transient)];
+    phi = set_domain_pot(phi, engine.interface); % shift back to slice 1
+    for i=1:Ntransient
+      trans{i} = CPDpot{transient(i), t};
+      trans{i} = set_domain_pot(trans{i}, domain_pot(trans{i})-ss); % shift back to slice 1
+    end
+    pots = [ {phi}; trans]; 
+    obs = find(observed(:,T));
+  else
+    clqs = [engine.in_clq engine.jtree_struct.clq_ass_to_node([transient persist+ss])];
+    phi = set_domain_pot(phi, engine.interface); % shift back to slice 1
+    for i=1:Ntransient
+      trans{i} = CPDpot{transient(i), t};
+      trans{i} = set_domain_pot(trans{i}, domain_pot(trans{i})-ss); % shift back to slice 1
+    end
+    pots = [ {phi}; trans; CPDpot(persist, t+1)]; 
+    obs = find(observed(:,t:t+1));
+  end
+
+  if t < T
+    [clpot(1:Q,t), seppot(1:Q,1:Q,t)] =  init_pot(engine.jtree_engine, clqs, pots, pot_type, obs);
+    [clpot(1:Q,t), seppot(1:Q,1:Q,t)] = collect_evidence(engine.jtree_engine, clpot(1:Q,t), seppot(1:Q,1:Q,t));
+  else
+    Q = length(engine.jtree_struct1.cliques);
+    root = engine.jtree_struct1.root_clq;
+    [clpot(1:Q,t), seppot(1:Q,1:Q,t)] =  init_pot(engine.jtree_engine1, clqs, pots, pot_type, obs);
+    [clpot(1:Q,t), seppot(1:Q,1:Q,t)] = collect_evidence(engine.jtree_engine1, clpot(1:Q,t), seppot(1:Q,1:Q,t));
+  end
+
+
+  if scale
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  logscale(t) = ll(root);
+  end
+  
+  if t < T
+    % bug fix by Bob Welch 30 Jan 04
+    phi = marginalize_pot(clpot{engine.out_clq,t}, engine.interface+ss,engine.maximize);
+    %phi = marginalize_pot(clpot{root,t}, engine.interface+ss, engine.maximize);
+  end
+end
+
+if scale
+loglik = sum(logscale);
+else
+loglik = [];
+end
+
+
+% Backwards pass.
+% Pass evidence from clq C to clq D,
+% where C is the in interface to (t,t+1) and D is the out inferface to (t-1,t)
+% Then propagate evidence from D to earlier slices.
+% (C and D are reversed names from the tech report!)
+D = engine.out_clq;
+if verbose, fprintf('\nbackwards pass\n'); end
+for t=T:-1:1
+  if verbose, fprintf('%d ', t); end
+  
+  if t == T
+    Q = length(engine.jtree_struct1.cliques);
+    C = engine.in_clq1;
+    [clpot(1:Q,t), seppot(1:Q,1:Q,t)] = distribute_evidence(engine.jtree_engine1, clpot(1:Q,t), seppot(1:Q,1:Q,t));
+  else
+    Q = length(engine.jtree_struct.cliques);
+    C = engine.in_clq;
+    [clpot(1:Q,t), seppot(1:Q,1:Q,t)] = distribute_evidence(engine.jtree_engine, clpot(1:Q,t), seppot(1:Q,1:Q,t));
+  end
+
+  if scale
+  for c=1:Q
+    [clpot{c,t}, ll(c)] = normalize_pot(clpot{c,t});
+  end
+  end
+  
+  if t >= 2
+    phiC = marginalize_pot(clpot{C,t}, engine.interface, engine.maximize);
+    phiC = set_domain_pot(phiC, engine.interface+ss); % shift forward to slice 2
+    phiD = marginalize_pot(clpot{D,t-1}, engine.interface+ss, engine.maximize);
+    ratio = divide_by_pot(phiC, phiD);
+    clpot{D,t-1} = multiply_by_pot(clpot{D,t-1}, ratio);
+  end
+end
+if verbose, fprintf('\n'); end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/jtree_dbn_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,109 @@
+function engine = jtree_dbn_inf_engine(bnet, varargin)
+% JTREE_DBN_INF_ENGINE Junction tree inference algorithm for DBNs.
+% engine = jtree_inf_engine(bnet, ...)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% clusters - specifies variables that must be grouped in the 1.5 slice DBN
+% maximize - 1 means max-product, 0 means sum-product [0]
+%
+% e.g., engine = jtree_dbn_inf_engine(dbn, 'clusters', {[1 2]});
+%
+% This uses all of slice t-1 plus the backwards interface of slice t.
+% By contrast, jtree_2TBN_inf_engine in the online directory uses
+% the forwards interface of slice t-1 plus all of slice t.
+% See my thesis for details.
+
+ss = length(bnet.intra);
+
+engine.maximize = 0;
+clusters = {};
+
+args = varargin;
+for i=1:2:length(args)
+  switch args{i},
+   case 'clusters', clusters = args{i+1};
+   case 'maximize', engine.maximize = args{i+1};
+   otherwise, error(['unrecognized argument ' args{i}])
+  end
+end
+
+
+engine.evidence = [];
+engine.node_sizes = [];
+
+[int, engine.persist, engine.transient] = compute_interface_nodes(bnet.intra, bnet.inter);
+engine.interface = int;
+engine.nonint = mysetdiff(1:ss, int);
+
+onodes = bnet.observed;
+
+if 0
+  % Create a 2 slice jtree
+  % We force there to be cliques containing the in and out interfaces for slices t and t+1.
+  obs_nodes = [onodes(:) onodes(:)+ss];
+  engine.jtree_engine = jtree_inf_engine(bnet, 'observed', obs_nodes(:), ...
+					 'clusters', {int, int+ss}, 'root', int+ss);
+else
+  % Create a "1.5 slice" jtree, containing slice 1 and the interface nodes of slice 2
+  % To keep the node numbering the same, we simply disconnect the non-interface nodes
+  % from slice 2, and set their size to 1.
+  % We do this to speed things up, and so that the likelihood is computed correctly - we do not need to do
+  % this if we just want to compute marginals. 
+  intra15 = bnet.intra;
+  for i=engine.nonint(:)'
+    intra15(i,:) = 0;
+    intra15(:,i) = 0;
+  end
+  dag15 = [bnet.intra bnet.inter;
+	 zeros(ss)    intra15];
+  ns = bnet.node_sizes(:);
+  ns(engine.nonint+ss) = 1; % disconnected nodes get size 1
+  obs_nodes = [onodes(:) onodes(:)+ss];
+  bnet15 = mk_bnet(dag15, ns, 'discrete', bnet.dnodes, 'equiv_class', bnet.equiv_class(:), ...
+		   'observed', obs_nodes(:));
+
+  %bnet15 = mk_dbn(intra15, bnet.inter, bnet.node_sizes_slice, bnet.dnodes_slice, ...
+  %		  bnet.equiv_class(:,1), bnet.equiv_class(:,2), bnet.intra);
+  % with the dbn, we can't independently control the sizes of slice 2 nodes
+  
+  if 1
+    % use unconstrained elimination,
+    % but force there to be a clique containing both interfaces
+    clusters(end+1:end+2) = {int, int+ss};
+    engine.jtree_engine = jtree_inf_engine(bnet15, 'clusters', clusters, 'root', int+ss);
+  else
+    % Use constrained elimination - this induces a clique that contain the 2nd interface,
+    % but not the first.
+    % Hence we throw in the first interface as an extra.
+    stages = {1:ss, [1:ss]+ss};
+    clusters(end+1:end+2) = {int, int+ss};
+    engine.jtree_engine = jtree_inf_engine(bnet15, 'clusters', clusters, ...
+					   'stages', stages, 'root', int+ss);
+  end
+end
+
+engine.in_clq = clq_containing_nodes(engine.jtree_engine, int);
+engine.out_clq = clq_containing_nodes(engine.jtree_engine, int+ss);
+engine.jtree_struct = struct(engine.jtree_engine); % violate object privacy
+
+
+% Also create an engine just for slice 1
+bnet1 = mk_bnet(bnet.intra1, bnet.node_sizes_slice, 'discrete', myintersect(bnet.dnodes,1:ss), ...
+		'equiv_class', bnet.equiv_class(:,1), 'observed', onodes);
+for i=1:max(bnet1.equiv_class)
+  bnet1.CPD{i} = bnet.CPD{i};
+end
+
+engine.jtree_engine1 = jtree_inf_engine(bnet1, 'clusters', {int}, 'root', int);
+
+engine.in_clq1 = clq_containing_nodes(engine.jtree_engine1, int);
+engine.jtree_struct1 = struct(engine.jtree_engine1); % violate object privacy
+
+% stuff needed by marginal_nodes
+engine.clpot = [];
+engine.T = [];
+
+engine = class(engine, 'jtree_dbn_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function m = marginal_family(engine, i, t, add_ev)
+% MARGINAL_FAMILY Compute the marginal on the specified family (jtree_dbn)
+% marginal = marginal_family(engine, i, t)
+
+% This is just like inf_engine/marginal_family, except when we call
+% marginal_nodes, we provide a 4th argument, to tell it's a family.
+
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+
+bnet = bnet_from_engine(engine);
+if t==1
+  m = marginal_nodes(engine, family(bnet.dag, i), t, add_ev, 1);
+else
+  ss = length(bnet.intra);
+  fam = family(bnet.dag, i+ss);
+  if any(fam<=ss)
+    % i has a parent in the preceeding slice
+    % Hence the lowest numbered slice containing the family is t-1
+    m = marginal_nodes(engine, fam, t-1, add_ev, 1);
+  else
+    % The family all fits inside slice t
+    % Hence shift the indexes back to slice 1
+    m = marginal_nodes(engine, fam-ss, t, add_ev, 1);
+  end
+end     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_dbn_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+function marginal = marginal_nodes(engine, nodes, t, add_ev, fam)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (bk)
+%
+%   marginal = marginal_nodes(engine, i, t)
+% returns Pr(X(i,t) | Y(1:T)), where X(i,t) is the i'th node in the t'th slice.
+%
+%   marginal = marginal_nodes(engine, query, t)
+% returns Pr(X(query(1),t), ... X(query(end),t) | Y(1:T)),
+% where 't' specifies the time slice of the earliest node in the query.
+% 'query' cannot span more than 2 time slices.
+%
+% Example:
+% Consider a DBN with 2 nodes per slice.
+% Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3.
+%
+% marginal = marginal_nodes(engine, nodes, t, add_ev, fam)
+% add_ev is an optional argument; if 1, we will "inflate" the marginal of observed nodes
+% to their original size, adding 0s to the positions which contradict the evidence
+   
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+if nargin < 5, fam = 0; end
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+
+if t==1 | t==engine.T
+  slice = t;
+  nodes2 = nodes;
+elseif mysubset(nodes, engine.persist)
+  slice = t-1;
+  nodes2 = nodes+ss;
+else
+  slice = t;
+  nodes2 = nodes;
+end
+
+%disp(['computing marginal on ' num2str(nodes) ' t = ' num2str(t) ' fam = ' num2str(fam)]);
+
+if t==engine.T
+  c = clq_containing_nodes(engine.jtree_engine1, nodes2, fam);
+else
+  c = clq_containing_nodes(engine.jtree_engine, nodes2, fam);
+end
+if c == -1
+  error(['no clique contains ' nodes2])
+end
+
+
+%disp(['using ' num2str(nodes2) ' slice = ' num2str(slice) ' clq = ' num2str(c)]);
+
+bigpot = engine.clpot{c, slice};
+
+pot = marginalize_pot(bigpot, nodes2, engine.maximize);
+%pot = normalize_pot(pot);
+marginal = pot_to_marginal(pot);
+
+
+% we convert the domain to the unrolled numbering system
+% so that add_ev_to_dmarginal (maybe called in update_ess) extracts the right evidence.
+marginal.domain = nodes+(t-1)*ss;
+
+if add_ev
+  marginal = add_ev_to_dmarginal(marginal, engine.evidence, engine.node_sizes);
+end    
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/jtree_unrolled_dbn_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/update_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function marginal = marginal_family(engine, i, t)
+% MARGINAL_FAMILY Compute the marginal on the specified family (jtree_unrolled_dbn)
+% marginal = marginal_family(engine, i, t)
+
+if nargin < 3, t = 1; end
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+marginal = marginal_family(engine.sub_engine, i + (t-1)*ss);
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function marginal = marginal_nodes(engine, nodes, t)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (jtree_unrolled_dbn)
+% marginal = marginal_nodes(engine, nodes, t)
+%
+% 't' specifies the time slice of the earliest node in 'nodes'.
+% 'nodes' must occur in some clique.
+%
+% Example:
+% Consider a DBN with 2 nodes per slice.
+% Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3,
+% i.e., nodes 3 and 5 in the unrolled network,
+
+if nargin < 3, t = 1; end
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+query = nodes + (t-1)*ss;
+marginal = marginal_nodes(engine.sub_engine, query);    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (jtree_unrolled_dbn)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+% 
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product instead of sum-product [0]
+% filter   - if 1, does filtering (not supported), else smoothing [0]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+maximize = 0;
+filter = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1}; 
+     case 'filter',  filter = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+if filter
+  error('jtree_unrolled_dbn does not support filtering')
+end
+
+if size(evidence,2) ~= engine.nslices
+  error(['engine was created assuming there are ' num2str(engine.nslices) ...
+	 ' slices, but evidence has ' num2str(size(evidence,2))])
+end
+
+[engine.unrolled_engine, loglik] = enter_evidence(engine.unrolled_engine, evidence, 'maximize', maximize);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/jtree_unrolled_dbn_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function engine = jtree_unrolled_dbn_inf_engine(bnet, T, varargin)
+% JTREE_UNROLLED_DBN_INF_ENGINE Unroll the DBN for T time-slices and apply jtree to the resulting static net
+% engine = jtree_unrolled_dbn_inf_engine(bnet, T, ...)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% useC      - 1 means use jtree_C_inf_engine instead of jtree_inf_engine [0]
+% constrained - 1 means we constrain ourselves to eliminate slice t before t+1 [1]
+%
+% e.g., engine = jtree_unrolled_inf_engine(bnet, 'useC', 1);
+
+% set default params
+N = length(bnet.intra);
+useC = 0;
+constrained = 1;
+
+if nargin >= 3
+  args = varargin;
+  nargs = length(args);
+  if isstr(args{1})
+    for i=1:2:nargs
+      switch args{i},
+       case 'useC',   useC = args{i+1};
+       case 'constrained',  constrained = args{i+1};
+       otherwise,  
+	error(['invalid argument name ' args{i}]);       
+      end
+    end
+  else
+    error(['invalid argument name ' args{1}]);       
+  end
+end
+
+bnet2 = dbn_to_bnet(bnet, T);
+ss = length(bnet.intra);
+engine.ss = ss;
+
+% If constrained_order = 1 we constrain ourselves to eliminate slice t before t+1.
+% This prevents cliques containing nodes from far-apart time-slices.
+if constrained
+  stages = num2cell(unroll_set(1:ss, ss, T), 1);
+else
+  stages = { 1:length(bnet2.dag) };
+end
+if useC
+  jengine = jtree_C_inf_engine(bnet2, 'stages', stages);
+else
+  jengine = jtree_inf_engine(bnet2, 'stages', stages);
+end
+
+engine.unrolled_engine = jengine;
+% we don't inherit from jtree_inf_engine, because that would only store bnet2,
+% and we would lose access to the DBN-specific fields like intra/inter
+
+engine.nslices = T;
+engine = class(engine, 'jtree_unrolled_dbn_inf_engine', inf_engine(bnet));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function marginal = marginal_family(engine, i, t, add_ev)
+% MARGINAL_FAMILY Compute the marginal on the specified family (jtree_unrolled_dbn)
+% marginal = marginal_family(engine, i, t)
+
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+assert(~add_ev);
+
+%marginal = marginal_family(engine.unrolled_engine, i + (t-1)*engine.ss, add_ev);
+marginal = marginal_family(engine.unrolled_engine, i + (t-1)*engine.ss);
+              
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function marginal = marginal_nodes(engine, nodes, t, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (loopy_unrolled_dbn)
+% marginal = marginal_nodes(engine, nodes, t)
+%
+% 't' specifies the time slice of the earliest node in 'nodes'.
+% 'nodes' must occur in some clique.
+%
+% Example:
+% Consider a DBN with 2 nodes per slice.
+% Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3,
+% i.e., nodes 3 and 5 in the unrolled network,
+
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+
+marginal = marginal_nodes(engine.unrolled_engine, nodes + (t-1)*engine.ss, add_ev);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@jtree_unrolled_dbn_inf_engine/update_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function engine = update_engine(engine, newCPDs)
+% UPDATE_ENGINE Update the engine to take into account the new parameters (jtree_unrolled_dbn)
+% engine = update_engine(engine, newCPDs)
+
+engine.inf_engine = update_engine(engine.inf_engine, newCPDs);
+engine.unrolled_engine = update_engine(engine.unrolled_engine, newCPDs);
+                                                            
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/kalman_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/update_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@kalman_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,83 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (kalman)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product (same as sum-product for Gaussians!), else sum-product [0]
+% filter -   if 1, do filtering, else smoothing [0]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+maximize = 0;
+filter = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1}; 
+     case 'filter', filter = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+assert(~maximize);
+
+bnet = bnet_from_engine(engine);
+n = length(bnet.intra);
+onodes = bnet.observed;
+hnodes = mysetdiff(1:n, onodes);
+T = size(evidence, 2);
+ns = bnet.node_sizes;
+O = sum(ns(onodes));
+data = reshape(cat(1, evidence{onodes,:}), [O T]);
+
+A = engine.trans_mat;
+C = engine.obs_mat;
+Q = engine.trans_cov;
+R = engine.obs_cov;
+init_x = engine.init_state;
+init_V = engine.init_cov;
+
+if filter
+  [x, V, VV, loglik] = kalman_filter(data, A, C, Q, R, init_x, init_V);
+else
+  [x, V, VV, loglik] = kalman_smoother(data, A, C, Q, R, init_x, init_V);
+end
+
+  
+% Wrap the posterior inside a potential, so it can be marginalized easily
+engine.one_slice_marginal = cell(1,T);
+engine.two_slice_marginal = cell(1,T);
+ns(onodes) = 0;
+ns(onodes+n) = 0;
+ss = length(bnet.intra);
+for t=1:T
+  dom = (1:n);
+  engine.one_slice_marginal{t} = mpot(dom+(t-1)*ss, ns(dom), 1, x(:,t), V(:,:,t));
+end
+% for t=1:T-1
+%   dom = (1:(2*n));
+%   mu = [x(:,t); x(:,t)];
+%   Sigma = [V(:,:,t) VV(:,:,t+1)';
+% 	   VV(:,:,t+1) V(:,:,t+1)];
+%   engine.two_slice_marginal{t} = mpot(dom+(t-1)*ss, ns(dom), 1, mu, Sigma);
+% end
+for t=2:T
+  %dom = (1:(2*n));
+  current_slice = hnodes;
+  next_slice = hnodes + ss;
+  dom = [current_slice next_slice];   
+  mu = [x(:,t-1); x(:,t)];
+  Sigma = [V(:,:,t-1) VV(:,:,t)';
+	   VV(:,:,t) V(:,:,t)];
+  engine.two_slice_marginal{t-1} = mpot(dom+(t-2)*ss, ns(dom), 1, mu, Sigma);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/kalman_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function engine = kalman_inf_engine(bnet)
+% KALMAN_INF_ENGINE Inference engine for Linear-Gaussian state-space models.
+% engine = kalman_inf_engine(bnet)
+%
+% 'onodes' specifies which nodes are observed; these must be leaves.
+% The remaining nodes are all hidden. All nodes must have linear-Gaussian CPDs.
+% The hidden nodes must be persistent, i.e., they must have children in
+% the next time slice. In addition, they may not have any children within the current slice,
+% except to the observed leaves. In other words, the topology must be isomorphic to a standard LDS.
+%
+% There are many derivations of the filtering and smoothing equations for Linear Dynamical
+% Systems in the literature. I particularly like the following
+% - "From HMMs to LDSs", T. Minka, MIT Tech Report, (no date), available from
+%    ftp://vismod.www.media.mit.edu/pub/tpminka/papers/minka-lds-tut.ps.gz
+
+[engine.trans_mat, engine.trans_cov, engine.obs_mat, engine.obs_cov, engine.init_state, engine.init_cov] = ...
+    dbn_to_lds(bnet);
+
+% This is where we will store the results between enter_evidence and marginal_nodes
+engine.one_slice_marginal = [];
+engine.two_slice_marginal = [];
+
+engine = class(engine, 'kalman_inf_engine', inf_engine(bnet));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function marginal = marginal_nodes(engine, nodes, t)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (kalman)
+% marginal = marginal_nodes(engine, nodes, t)
+%
+% 't' specifies the time slice of the earliest node in 'nodes'.
+% 'nodes' cannot span more than 2 time slices.
+%
+% Example:
+% Consider a DBN with 2 nodes per slice.
+% Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3,
+% i.e., nodes 3 and 5 in the unrolled network,
+
+if nargin < 3, t = 1; end
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+if all(nodes <= ss)
+  bigpot = engine.one_slice_marginal{t};
+else
+  bigpot = engine.two_slice_marginal{t};
+end
+
+nodes = nodes + (t-1)*ss;
+pot = marginalize_pot(bigpot, nodes);
+marginal = pot_to_marginal(pot);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+/dbn_to_lds.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/extract_params_from_gbn.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@kalman_inf_engine/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/private/dbn_to_lds.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function [trans_mat, trans_cov, obs_mat, obs_cov, init_state, init_cov] = dbn_to_lds(bnet)
+% DBN_TO_LDS Compute the Linear Dynamical System parameters from the Gaussian DBN.
+% [trans_mat, trans_cov, obs_mat, obs_cov, init_state, init_cov] = dbn_to_lds(bnet)
+
+onodes = bnet.observed;
+ss = length(bnet.intra);
+num_nodes = ss*2;
+assert(isequal(bnet.cnodes_slice, 1:ss));
+[W,D,mu] = extract_params_from_gbn(bnet);
+
+hnodes = mysetdiff(1:ss, onodes);
+bs = bnet.node_sizes(:); % block sizes
+
+obs_mat = W(block(hnodes,bs), block(onodes,bs))';
+u = block(onodes,bs);
+obs_cov = D(u,u);
+
+trans_mat = W(block(hnodes,bs), block(hnodes + ss, bs))';
+u = block(hnodes + ss, bs);
+trans_cov = D(u,u);
+
+u = block(hnodes,bs);
+init_cov = D(u,u);
+init_state = mu(u);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/private/extract_params_from_gbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function [B,D,mu] = extract_params_from_gbn(bnet)
+% Extract all the local parameters of each Gaussian node, and collect them into global matrices.
+% [B,D,mu] = extract_params_from_gbn(bnet)
+%
+% B(i,j) is a block matrix that contains the transposed weight matrix from node i to node j.
+% D(i,i) is a block matrix that contains the noise covariance matrix for node i.
+% mu(i) is a block vector that contains the shifted noise mean for node i.
+
+% In Shachter's model, the mean of each node in the global gaussian is
+% the same as the node's local unconditional mean.
+% In Alag's model (which we use), the global mean gets shifted.
+
+
+num_nodes = length(bnet.dag);
+bs = bnet.node_sizes(:); % bs = block sizes
+N = sum(bs); % num scalar nodes
+
+B = zeros(N,N);
+D = zeros(N,N);
+mu = zeros(N,1);
+
+for i=1:num_nodes % in topological order
+  ps = parents(bnet.dag, i);
+  e = bnet.equiv_class(i);
+  %[m, Sigma, weights] = extract_params_from_CPD(bnet.CPD{e});
+  s = struct(bnet.CPD{e}); % violate privacy of object
+  m = s.mean; Sigma = s.cov; weights = s.weights;
+  if length(ps) == 0
+    mu(block(i,bs)) = m;
+  else
+    mu(block(i,bs)) = m + weights *  mu(block(ps,bs));
+  end
+  B(block(ps,bs), block(i,bs)) = weights';
+  D(block(i,bs), block(i,bs)) = Sigma;
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@kalman_inf_engine/update_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function engine = update_engine(engine, newCPDs)
+% UPDATE_ENGINE Update the engine to take into account the new parameters (kalman)
+% engine = update_engine(engine, newCPDs)
+
+engine.inf_engine = update_engine(engine.inf_engine, newCPDs);
+[engine.trans_mat, engine.trans_cov, engine.obs_mat, engine.obs_cov, engine.init_state, engine.init_cov] = ...
+    dbn_to_lds(bnet_from_engine(engine));
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_soft_ev.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/pearl_dbn_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D/Old////
+D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@pearl_dbn_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+/correct_smooth.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/filter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/filter_evidence_obj_oriented.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/smooth_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/smooth_evidence_fast.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/wrong_smooth.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@pearl_dbn_inf_engine/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/correct_smooth.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,244 @@
+function [marginal, msg, loglik] = smooth_evidence(engine, evidence)
+% [marginal, msg, loglik] = smooth_evidence(engine, evidence) (pearl_dbn)
+
+disp('warning: broken');
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+bnet2 = dbn_to_bnet(bnet, T);
+ns = bnet2.node_sizes;
+hnodes = mysetdiff(1:ss, engine.onodes);
+hnodes = hnodes(:)';
+
+onodes2 = unroll_set(engine.onodes(:), ss, T);
+onodes2 = onodes2(:)';
+
+hnodes2 = unroll_set(hnodes(:), ss, T);
+hnodes2 = hnodes2(:)';
+
+[engine.parent_index, engine.child_index] = mk_pearl_msg_indices(bnet2);
+
+msg = init_msgs(bnet2.dag, ns, evidence, bnet2.equiv_class, bnet2.CPD);
+
+verbose = 0;
+
+niter = 1;
+for iter=1:niter
+  % FORWARD
+  for t=1:T
+    if verbose, fprintf('t=%d\n', t); end
+    % observed leaves send lambda to parents
+    for i=engine.onodes(:)'
+      n = i + (t-1)*ss;
+      ps = parents(bnet2.dag, n);
+      for p=ps(:)'
+	j = engine.child_index{p}(n); % n is p's j'th child
+	if t > 1
+	  e = bnet.equiv_class(i, 2);
+	else
+	  e = bnet.equiv_class(i, 1);
+	end
+	lam_msg = normalise(compute_lambda_msg(bnet.CPD{e}, n, ps, msg, p));
+	msg{p}.lambda_from_child{j} = lam_msg;
+	if verbose, fprintf('%d sends lambda to %d\n', n, p); disp(lam_msg); end
+      end 
+    end
+
+    % update pi
+    for i=hnodes
+      n = i + (t-1)*ss;
+      ps = parents(bnet2.dag, n);
+      if t==1
+	e = bnet.equiv_class(i,1);
+      else
+	e = bnet.equiv_class(i,2);
+      end
+      msg{n}.pi = compute_pi(bnet.CPD{e}, n, ps, msg);
+      if verbose, fprintf('%d computes pi\n', n); disp(msg{n}.pi); end
+    end
+    
+    % send pi msg to children
+    for i=hnodes
+      n = i + (t-1)*ss;
+      %cs = myintersect(children(bnet2.dag, n), hnodes2);
+      cs = children(bnet2.dag, n);
+      for c=cs(:)'
+	j = engine.parent_index{c}(n); % n is c's j'th parent
+	pi_msg = normalise(compute_pi_msg(n, cs, msg, c, ns));
+	msg{c}.pi_from_parent{j} = pi_msg;
+	if verbose, fprintf('%d sends pi to %d\n', n, c); disp(pi_msg); end
+      end
+    end
+  end
+
+  % BACKWARD
+  for t=T:-1:1
+    if verbose, fprintf('t = %d\n', t); end
+    % update lambda
+    for i=hnodes
+      n = i + (t-1)*ss;
+      cs = children(bnet2.dag, n);
+      msg{n}.lambda = compute_lambda(n, cs, msg, ns);
+      if verbose, fprintf('%d computes lambda\n', n); disp(msg{n}.lambda); end
+    end
+    % send lambda msgs to parents
+    for i=hnodes
+      n = i + (t-1)*ss;
+      %ps = myintersect(parents(bnet2.dag, n), hnodes2);
+      ps = parents(bnet2.dag, n);
+      for p=ps(:)'
+	j = engine.child_index{p}(n); % n is p's j'th child
+	if t > 1
+	  e = bnet.equiv_class(i, 2);
+	else
+	  e = bnet.equiv_class(i, 1);
+	end
+	lam_msg = normalise(compute_lambda_msg(bnet.CPD{e}, n, ps, msg, p));
+	msg{p}.lambda_from_child{j} = lam_msg;
+	if verbose, fprintf('%d sends lambda to %d\n', n, p); disp(lam_msg); end
+      end 
+    end
+  end
+  
+end
+
+
+marginal = cell(ss,T);
+lik = zeros(1,ss*T);
+for t=1:T
+  for i=1:ss
+    n = i + (t-1)*ss;
+    [bel, lik(n)] = normalise(msg{n}.pi .* msg{n}.lambda);     
+    marginal{i,t} = bel;
+  end
+end
+
+loglik = sum(log(lik));
+
+
+
+%%%%%%%
+
+function lambda = compute_lambda(n, cs, msg, ns)
+% Pearl p183 eq 4.50
+lambda = prod_lambda_msgs(n, cs, msg, ns);
+
+%%%%%%%
+
+function pi_msg = compute_pi_msg(n, cs, msg, c, ns)
+% Pearl p183 eq 4.53 and 4.51
+pi_msg = msg{n}.pi .* prod_lambda_msgs(n, cs, msg, ns, c);
+
+%%%%%%%%%
+
+function lam = prod_lambda_msgs(n, cs, msg, ns, except)
+
+if nargin < 5, except = -1; end
+
+lam = msg{n}.lambda_from_self(:);
+lam = ones(ns(n), 1);
+for i=1:length(cs)
+  c = cs(i);
+  if c ~= except
+    lam = lam .* msg{n}.lambda_from_child{i};
+  end
+end   
+
+
+%%%%%%%%%
+
+function msg = init_msgs(dag, ns, evidence, eclass, CPD)
+% INIT_MSGS Initialize the lambda/pi message and state vectors (pearl_dbn)
+% msg =  init_msgs(dag, ns, evidence)
+
+N = length(dag);
+msg = cell(1,N);
+observed = ~isemptycell(evidence(:));
+
+for n=1:N
+  ps = parents(dag, n);
+  msg{n}.pi_from_parent = cell(1, length(ps));
+  for i=1:length(ps)
+    p = ps(i);
+    msg{n}.pi_from_parent{i} = ones(ns(p), 1);
+  end
+  
+  cs = children(dag, n);
+  msg{n}.lambda_from_child = cell(1, length(cs));
+  for i=1:length(cs)
+    c = cs(i);
+    msg{n}.lambda_from_child{i} = ones(ns(n), 1);
+  end
+
+  msg{n}.lambda = ones(ns(n), 1);
+  msg{n}.lambda_from_self = ones(ns(n), 1);
+  msg{n}.pi = ones(ns(n), 1);
+
+ % Initialize the lambdas with any evidence
+  if observed(n)
+    v = evidence{n};
+    %msg{n}.lambda_from_self = zeros(ns(n), 1);
+    %msg{n}.lambda_from_self(v) = 1; % delta function
+    msg{n}.lambda = zeros(ns(n), 1);
+    msg{n}.lambda(v) = 1; % delta function
+  end      
+  
+end
+
+
+%%%%%%%%
+
+function msg = init_ev_msgs(engine, evidence, msg)
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+pot_type = 'd';
+t = 1;
+hnodes = mysetdiff(1:ss, engine.onodes);
+for i=engine.onodes(:)'
+  fam = family(bnet.dag, i);
+  e = bnet.equiv_class(i, 1);
+  CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,1));
+  temp = pot_to_marginal(CPDpot);
+  msg{i}.lambda_from_self = temp.T;
+end
+for t=2:T
+  for i=engine.onodes(:)'
+    fam = family(bnet.dag, i, 2); % extract from slice t
+    e = bnet.equiv_class(i, 2);
+    CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,t-1:t));
+    temp = pot_to_marginal(CPDpot);
+    n = i + (t-1)*ss;
+    msg{n}.lambda_from_self = temp.T;
+  end
+end
+
+
+%%%%%%%%%%%
+
+function msg = init_ev_msgs2(engine, evidence, msg)
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+pot_type = 'd';
+t = 1;
+hnodes = mysetdiff(1:ss, engine.onodes);
+for i=engine.onodes(:)'
+  fam = family(bnet.dag, i);
+  e = bnet.equiv_class(i, 1);
+  CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,1));
+  temp = pot_to_marginal(CPDpot);
+  msg{i}.lambda_from_self = temp.T;
+end
+for t=2:T
+  for i=engine.onodes(:)'
+    fam = family(bnet.dag, i, 2); % extract from slice t
+    e = bnet.equiv_class(i, 2);
+    CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,t-1:t));
+    temp = pot_to_marginal(CPDpot);
+    n = i + (t-1)*ss;
+    msg{n}.lambda_from_self = temp.T;
+  end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,123 @@
+function [engine, loglik] = enter_evidence(engine, evidence, filter)
+% ENTER_EVIDENCE Add the specified evidence to the network (pearl_dbn)
+% [engine, loglik] = enter_evidence(engine, evidence, filter)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+% If filter = 1, we do filtering, otherwise smoothing (default).
+
+if nargin < 3, filter = 0; end
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+bnet2 = dbn_to_bnet(bnet, T);
+ns = bnet2.node_sizes;
+hnodes = mysetdiff(1:ss, engine.onodes);
+hnodes = hnodes(:)';
+
+[engine.parent_index, engine.child_index] = mk_pearl_msg_indices(bnet2);
+
+msg = init_msgs(bnet2.dag, ns, evidence);
+msg = init_ev_msgs(engine, evidence, msg);
+
+niter = 1;
+for iter=1:niter
+  % FORWARD
+  for t=1:T
+    % update pi
+    for i=1:ss %hnodes
+      n = i + (t-1)*ss;
+      ps = parents(bnet2.dag, n);
+      if t==1
+	e = bnet.equiv_class(i,1);
+      else
+	e = bnet.equiv_class(i,2);
+      end
+      msg{n}.pi = compute_pi(bnet.CPD{e}, n, ps, msg);
+      %msg{n}.pi = normalise(msg{n}.pi(:) .* msg{n}.lambda_from_self(:));
+    end
+    % send pi msg to children
+    for i=1:ss % hnodes
+      n = i + (t-1)*ss;
+      cs = children(bnet2.dag, n);
+      for c=cs(:)'
+	j = engine.parent_index{c}(n); % n is c's j'th parent
+	msg{c}.pi_from_parent{j} = normalise(compute_pi_msg(n, cs, msg, c, ns));
+      end
+    end
+  end
+
+  if filter
+    disp('skipping smoothing');
+    break;
+  end
+    
+  % BACKWARD
+  for t=T:-1:1
+    % update lambda
+    for i=1:ss % hnodes
+      n = i + (t-1)*ss;
+      cs = children(bnet2.dag, n);
+      msg{n}.lambda = compute_lambda(n, cs, msg, ns);
+    end
+    % send lambda msgs to parents
+    for i=1:ss % hnodes
+      n = i + (t-1)*ss;
+      ps = parents(bnet2.dag, n);
+      for p=ps(:)'
+	j = engine.child_index{p}(n); % n is p's j'th child
+	if t > 1
+	  e = bnet.equiv_class(i, 2);
+	else
+	  e = bnet.equiv_class(i, 1);
+	end
+	msg{p}.lambda_from_child{j} = normalise(compute_lambda_msg(bnet.CPD{e}, n, ps, msg, p));
+      end 
+    end
+  end
+  
+end
+
+
+engine.marginal = cell(ss,T);
+lik = zeros(1,ss*T);
+for t=1:T
+  for i=1:ss
+    n = i + (t-1)*ss;
+    [bel, lik(n)] = normalise(msg{n}.pi .* msg{n}.lambda);     
+    engine.marginal{i,t} = bel;
+  end
+end
+
+engine.evidence = evidence; % needed by marginal_nodes and marginal_family
+engine.msg = msg;  % needed by marginal_family
+loglik = sum(log(lik));
+
+
+
+%%%%%%%
+
+function lambda = compute_lambda(n, cs, msg, ns)
+% Pearl p183 eq 4.50
+lambda = prod_lambda_msgs(n, cs, msg, ns);
+
+%%%%%%%
+
+function pi_msg = compute_pi_msg(n, cs, msg, c, ns)
+% Pearl p183 eq 4.53 and 4.51
+pi_msg = msg{n}.pi .* prod_lambda_msgs(n, cs, msg, ns, c);
+
+%%%%%%%%%
+
+function lam = prod_lambda_msgs(n, cs, msg, ns, except)
+
+if nargin < 5, except = -1; end
+
+lam = msg{n}.lambda_from_self(:);
+%lam = ones(ns(n), 1);
+for i=1:length(cs)
+  c = cs(i);
+  if c ~= except
+    lam = lam .* msg{n}.lambda_from_child{i};
+  end
+end   
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,146 @@
+function [marginal, msg, loglik] = filter_evidence(engine, evidence)
+
+error('broken');
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+onodes = engine.onodes;
+hnodes = mysetdiff(1:ss, onodes);
+hnodes = hnodes(:)';
+
+ns = bnet.node_sizes(:);
+onodes2 = [onodes(:); onodes(:)+ss];
+ns(onodes2) = 1;
+	   
+verbose = 1;
+if verbose, fprintf('\nnew filtering\n'); end
+  
+pot_type = 'd';
+niter = engine.max_iter;
+
+% msg(i1,t1,i2,j2) (i1,t1) -> (i2,t2)
+%lambda_msg = cell(ss,T,ss,T);
+%pi_msg = cell(ss,T,ss,T);
+
+% intra_lambda_msg(i,j,t) (i,t) -> (j,t), i is child
+% inter_lambda_msg(i,j,t) (i,t+1) -> (j,t), i is child
+% inter_pi_msg(i,j,t) (i,t-1) -> (j,t), i is parent
+intra_lambda_msg = cell(ss,ss,T);
+inter_lambda_msg = cell(ss,ss,T);
+inter_pi_msg = cell(ss,ss,T);
+
+lambda = cell(ss,T);
+pi = cell(ss,T);
+
+for t=1:T
+  for i=1:ss
+    lambda{i,t} = ones(ns(i), 1);
+    pi{i,t} = ones(ns(i), 1);
+    
+    cs = children(bnet.intra, i);
+    for c=cs(:)'
+      intra_lambda_msg{c,i,t} = ones(ns(i),1);
+    end
+    
+    cs = children(bnet.inter, i);
+    for c=cs(:)'
+      inter_lambda_msg{c,i,t} = ones(ns(i),1);
+    end
+    
+    ps = parents(bnet.inter, i);
+    for p=ps(:)'
+      inter_pi_msg{p,i,t} = ones(ns(i), 1); % not used for t==1
+    end
+  end
+end
+
+% each hidden node absorbs lambda from its observed child (if any)
+for t=1:T
+  for i=hnodes
+    c = engine.obschild(i);
+    if c > 0
+      if t==1
+	fam = family(bnet.dag, c);
+	e = bnet.equiv_class(c, 1);
+	CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,1));
+      else
+	fam = family(bnet.dag, c, 2); % within 2 slice network
+	e = bnet.equiv_class(c, 2);
+	CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,t-1:t));
+      end
+      temp = pot_to_marginal(CPDpot);
+      lam_msg = normalise(temp.T);
+      %if verbose, fprintf('(%d,%d) sends lambda to (%d,%d)\n', c,t, i,t); disp(lam_msg); end
+      intra_lambda_msg{c,i,t} = lam_msg;
+    end
+  end
+end
+
+% FORWARD
+for t=1:T
+  % update pi
+  for i=hnodes
+    if t==1
+      e = bnet.equiv_class(i,1);
+      temp = struct(bnet.CPD{e});
+      pi{i,t} = temp.CPT;
+    else
+      e = bnet.equiv_class(i,2);
+      temp = struct(bnet.CPD{e});
+      ps = parents(bnet.inter, i);
+      dom = [ps i+ss];
+      pot = dpot(dom, ns(dom), temp.CPT);
+      for p=ps(:)'
+	temp = dpot(p, ns(p), inter_pi_msg{p,i,t});
+	pot = multiply_by_pot(pot, temp);
+      end
+      pot = marginalize_pot(pot, i+ss);
+      temp = pot_to_marginal(pot);
+      pi{i,t} = temp.T;
+      %if verbose, fprintf('(%d,%d) computes pi\n', i,t); disp(pi{i,t}); end
+    end
+    
+    c = engine.obschild(i);
+    if c > 0
+      pi{i,t} = normalise(pi{i,t} .* intra_lambda_msg{c,i,t});
+    end
+    %if verbose, fprintf('(%d,%d) recomputes pi\n', i,t); disp(pi{i,t}); end
+    if verbose, fprintf('%d recomputes pi\n', i+(t-1)*ss); disp(pi{i,t}); end
+  end
+  
+  % send pi msg to children 
+  for i=hnodes
+    cs = children(bnet.inter, i);
+    for c=cs(:)'
+      pot = pi{i,t};
+      for k=cs(:)'
+	if k ~= c
+	  pot = pot .* inter_lambda_msg{k,i,t};
+	end
+      end
+      cs2 = children(bnet.intra, i);
+      for k=cs2(:)'
+	pot = pot .* intra_lambda_msg{k,i,t};
+      end
+      pot = normalise(pot);
+      %if verbose, fprintf('(%d,%d) sends pi to (%d,%d)\n', i,t, c,t+1); disp(pot); end
+      if verbose, fprintf('%d sends pi to %d\n', i+(t-1)*ss, c+t*ss); disp(pot); end
+      inter_pi_msg{i,c,t+1} = pot;
+    end
+  end
+end
+
+
+marginal = cell(ss,T);
+for t=1:T
+  for i=hnodes
+    %marginal{i,t} = normalise(pi{i,t} .* lambda{i,t});     
+    marginal{i,t} = normalise(pi{i,t});
+  end
+end
+
+loglik = 0;
+
+msg.inter_pi_msg = inter_pi_msg;
+msg.inter_lambda_msg = inter_lambda_msg;
+msg.intra_lambda_msg = intra_lambda_msg;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence_obj_oriented.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,158 @@
+function [marginal, msg, loglik] = filter_evidence_old(engine, evidence)
+% [marginal, msg, loglik] = filter_evidence(engine, evidence) (pearl_dbn)
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+bnet2 = dbn_to_bnet(bnet, T);
+ns = bnet2.node_sizes;
+hnodes = mysetdiff(1:ss, engine.onodes);
+hnodes = hnodes(:)';
+
+[engine.parent_index, engine.child_index] = mk_pearl_msg_indices(bnet2);
+
+msg = init_msgs(bnet2.dag, ns, evidence);
+msg = init_ev_msgs(engine, evidence, msg);
+
+verbose = 1;
+if verbose, fprintf('\nold filtering\n'); end
+
+for t=1:T
+  % update pi
+  for i=hnodes
+    n = i + (t-1)*ss;
+    ps = parents(bnet2.dag, n);
+    if t==1
+      e = bnet.equiv_class(i,1);
+    else
+      e = bnet.equiv_class(i,2);
+    end
+    msg{n}.pi = compute_pi(bnet.CPD{e}, n, ps, msg);
+    %if verbose, fprintf('%d computes pi\n', n); disp(msg{n}.pi); end
+    msg{n}.pi = normalise(msg{n}.pi(:) .* msg{n}.lambda_from_self(:));
+    if verbose, fprintf('%d recomputes pi\n', n); disp(msg{n}.pi); end
+  end
+  % send pi msg to children
+  for i=hnodes
+    n = i + (t-1)*ss;
+    cs = children(bnet2.dag, n);
+    for c=cs(:)'
+      j = engine.parent_index{c}(n); % n is c's j'th parent
+      pi_msg = normalise(compute_pi_msg(n, cs, msg, c, ns));
+      msg{c}.pi_from_parent{j} = pi_msg;
+      if verbose, fprintf('%d sends pi to %d\n', n,c); disp(pi_msg); end
+    end
+  end
+end
+
+
+marginal = cell(ss,T);
+lik = zeros(1,ss*T);
+for t=1:T
+  for i=1:ss
+    n = i + (t-1)*ss;
+    %[bel, lik(n)] = normalise(msg{n}.pi .* msg{n}.lambda);     
+    [bel, lik(n)] = normalise(msg{n}.pi);
+    marginal{i,t} = bel;
+  end
+end
+
+loglik = sum(log(lik));
+
+
+
+%%%%%%%
+
+function lambda = compute_lambda(n, cs, msg, ns)
+% Pearl p183 eq 4.50
+lambda = prod_lambda_msgs(n, cs, msg, ns);
+
+%%%%%%%
+
+function pi_msg = compute_pi_msg(n, cs, msg, c, ns)
+% Pearl p183 eq 4.53 and 4.51
+pi_msg = msg{n}.pi .* prod_lambda_msgs(n, cs, msg, ns, c);
+
+%%%%%%%%%
+
+function lam = prod_lambda_msgs(n, cs, msg, ns, except)
+
+if nargin < 5, except = -1; end
+
+%lam = msg{n}.lambda_from_self(:);
+lam = ones(ns(n), 1);
+for i=1:length(cs)
+  c = cs(i);
+  if c ~= except
+    lam = lam .* msg{n}.lambda_from_child{i};
+  end
+end   
+
+
+%%%%%%%%%%%
+
+function msg = init_msgs(dag, ns, evidence)
+% INIT_MSGS Initialize the lambda/pi message and state vectors (pearl_dbn)
+% msg =  init_msgs(dag, ns, evidence)
+%
+% We assume all the hidden nodes are discrete.
+
+N = length(dag);
+msg = cell(1,N);
+observed = ~isemptycell(evidence(:));
+
+for n=1:N
+  ps = parents(dag, n);
+  msg{n}.pi_from_parent = cell(1, length(ps));
+  for i=1:length(ps)
+    p = ps(i);
+    msg{n}.pi_from_parent{i} = ones(ns(p), 1);
+  end
+  
+  cs = children(dag, n);
+  msg{n}.lambda_from_child = cell(1, length(cs));
+  for i=1:length(cs)
+    c = cs(i);
+    msg{n}.lambda_from_child{i} = ones(ns(n), 1);
+  end
+
+  msg{n}.lambda = ones(ns(n), 1);
+  msg{n}.pi = ones(ns(n), 1);
+  
+  msg{n}.lambda_from_self = ones(ns(n), 1);
+end
+
+
+%%%%%%%%%
+
+function msg = init_ev_msgs(engine, evidence, msg)
+% Initialize the lambdas with any evidence
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+pot_type = 'd';
+t = 1;
+hnodes = mysetdiff(1:ss, engine.onodes);
+for i=hnodes(:)'
+  c = engine.obschild(i);
+  if c > 0
+    fam = family(bnet.dag, c);
+    e = bnet.equiv_class(c, 1);
+    CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,1));
+    temp = pot_to_marginal(CPDpot);
+    n = i;
+    msg{n}.lambda_from_self = temp.T;
+  end
+end
+for t=2:T
+  for i=hnodes(:)'
+    c = engine.obschild(i);
+    if c > 0 
+      fam = family(bnet.dag, c, 2);
+      e = bnet.equiv_class(c, 2);
+      CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,t-1:t));
+      temp = pot_to_marginal(CPDpot);
+      n = i + (t-1)*ss;
+      msg{n}.lambda_from_self = temp.T;
+    end
+  end
+end       
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,181 @@
+function [marginal, msg, loglik] = smooth_evidence(engine, evidence)
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+onodes = engine.onodes;
+hnodes = mysetdiff(1:ss, onodes);
+hnodes = hnodes(:)';
+
+ns = bnet.node_sizes(:);
+onodes2 = [onodes(:); onodes(:)+ss];
+ns(onodes2) = 1;
+	   
+verbose = 0;
+pot_type = 'd';
+niter = engine.max_iter;
+
+if verbose, fprintf('new smooth\n'); end
+
+% msg(i1,t1,i2,j2) (i1,t1) -> (i2,t2)
+%lambda_msg = cell(ss,T,ss,T);
+%pi_msg = cell(ss,T,ss,T);
+
+% intra_lambda_msg(i,j,t) (i,t) -> (j,t), i is child
+% inter_lambda_msg(i,j,t) (i,t+1) -> (j,t), i is child
+% inter_pi_msg(i,j,t) (i,t-1) -> (j,t), i is parent
+intra_lambda_msg = cell(ss,ss,T);
+inter_lambda_msg = cell(ss,ss,T);
+inter_pi_msg = cell(ss,ss,T);
+
+lambda = cell(ss,T);
+pi = cell(ss,T);
+
+for t=1:T
+  for i=1:ss
+    lambda{i,t} = ones(ns(i), 1);
+    pi{i,t} = ones(ns(i), 1);
+    
+    cs = children(bnet.intra, i);
+    for c=cs(:)'
+      intra_lambda_msg{c,i,t} = ones(ns(i),1);
+    end
+    
+    cs = children(bnet.inter, i);
+    for c=cs(:)'
+      inter_lambda_msg{c,i,t} = ones(ns(i),1);
+    end
+    
+    ps = parents(bnet.inter, i);
+    for p=ps(:)'
+      inter_pi_msg{p,i,t} = ones(ns(i), 1); % not used for t==1
+    end
+  end
+end
+
+
+% each hidden node absorbs lambda from its observed child (if any)
+for t=1:T
+  for i=hnodes
+    c = engine.obschild(i);
+    if c > 0
+      if t==1
+	fam = family(bnet.dag, c);
+	e = bnet.equiv_class(c, 1);
+	CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,1));
+      else
+	fam = family(bnet.dag, c, 2); % within 2 slice network
+	e = bnet.equiv_class(c, 2);
+	CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,t-1:t));
+      end
+      temp = pot_to_marginal(CPDpot);
+      lam_msg = normalise(temp.T);
+      intra_lambda_msg{c,i,t} = lam_msg;
+    end
+  end
+end
+
+for iter=1:engine.max_iter
+  % FORWARD
+  for t=1:T
+    % update pi
+    for i=hnodes
+      if t==1
+	e = bnet.equiv_class(i,1);
+	CPD = struct(bnet.CPD{e});
+	pi{i,t} = CPD.CPT;
+      else
+	e = bnet.equiv_class(i,2);
+	CPD = struct(bnet.CPD{e});
+	ps = parents(bnet.inter, i);
+	dom = [ps i+ss];
+	pot = dpot(dom, ns(dom), CPD.CPT);
+	for p=ps(:)'
+	  temp = dpot(p, ns(p), inter_pi_msg{p,i,t});
+	  pot = multiply_by_pot(pot, temp);
+	end
+	pot = marginalize_pot(pot, i+ss);
+	temp = pot_to_marginal(pot);
+	pi{i,t} = temp.T;
+      end
+      if verbose, fprintf('%d updates pi\n', i+(t-1)*ss); disp(pi{i,t}); end
+    end
+    
+    % send pi msg to children 
+    for i=hnodes
+      cs = children(bnet.inter, i);
+      for c=cs(:)'
+	pot = pi{i,t};
+	for k=cs(:)'
+	  if k ~= c
+	    pot = pot .* inter_lambda_msg{k,i,t};
+	  end
+	end
+	cs2 = children(bnet.intra, i);
+	for k=cs2(:)'
+	  pot = pot .* intra_lambda_msg{k,i,t};
+	end
+	inter_pi_msg{i,c,t+1} = normalise(pot);
+	if verbose, fprintf('%d sends pi to %d\n', i+(t-1)*ss, c+t*ss); disp(inter_pi_msg{i,c,t+1}); end
+      end
+    end
+  end
+
+  if verbose, fprintf('backwards\n'); end
+  % BACKWARD
+  for t=T:-1:1
+    % update lambda
+    for i=hnodes
+      pot = ones(ns(i), 1);
+      cs = children(bnet.inter, i);
+      for c=cs(:)'
+	pot = pot .* inter_lambda_msg{c,i,t};
+      end
+      cs = children(bnet.intra, i);
+      for c=cs(:)'
+	pot = pot .* intra_lambda_msg{c,i,t};
+      end
+      lambda{i,t} = normalise(pot);
+      if verbose, fprintf('%d computes lambda\n', i+(t-1)*ss); disp(lambda{i,t}); end
+    end
+    
+    % send lambda msgs to hidden parents in prev slcie
+    for i=hnodes
+      ps = parents(bnet.inter, i);
+      if t > 1
+	e = bnet.equiv_class(i, 2);
+	CPD = struct(bnet.CPD{e});
+	fam = [ps i+ss];
+	for p=ps(:)'
+	  pot = dpot(fam, ns(fam), CPD.CPT);
+	  temp = dpot(i+ss, ns(i), lambda{i,t});
+	  pot = multiply_by_pot(pot, temp);
+	  for k=ps(:)'
+	    if k ~= p
+	      temp = dpot(k, ns(k), inter_pi_msg{k,i,t});
+	      pot = multiply_by_pot(pot, temp);
+	    end
+	  end
+	  pot = marginalize_pot(pot, p);
+	  temp = pot_to_marginal(pot);
+	  inter_lambda_msg{i,p,t-1} = normalise(temp.T);
+	  if verbose, fprintf('%d sends lambda to %d\n', i+(t-1)*ss, p+(t-2)*ss); disp(inter_lambda_msg{i,p,t-1}); end
+	end
+      end
+    end
+  end
+end
+
+
+
+marginal = cell(ss,T);
+for t=1:T
+  for i=hnodes
+    marginal{i,t} = normalise(pi{i,t} .* lambda{i,t});     
+  end
+end
+
+loglik = 0;
+
+msg.inter_pi_msg = inter_pi_msg;
+msg.inter_lambda_msg = inter_lambda_msg;
+msg.intra_lambda_msg = intra_lambda_msg;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence_fast.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,179 @@
+function [marginal, msg, loglik] = smooth_evidence_fast(engine, evidence)
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+onodes = engine.onodes;
+hnodes = mysetdiff(1:ss, onodes);
+hnodes = hnodes(:)';
+
+ns = bnet.node_sizes(:);
+onodes2 = [onodes(:); onodes(:)+ss];
+ns(onodes2) = 1;
+	   
+verbose = 0;
+pot_type = 'd';
+niter = engine.max_iter;
+
+if verbose, fprintf('new smooth\n'); end
+
+% msg(i1,t1,i2,j2) (i1,t1) -> (i2,t2)
+%lambda_msg = cell(ss,T,ss,T);
+%pi_msg = cell(ss,T,ss,T);
+
+% intra_lambda_msg(i,j,t) (i,t) -> (j,t), i is child
+% inter_lambda_msg(i,j,t) (i,t+1) -> (j,t), i is child
+% inter_pi_msg(i,j,t) (i,t-1) -> (j,t), i is parent
+intra_lambda_msg = cell(ss,ss,T);
+inter_lambda_msg = cell(ss,ss,T);
+inter_pi_msg = cell(ss,ss,T);
+
+lambda = cell(ss,T);
+pi = cell(ss,T);
+
+for t=1:T
+  for i=1:ss
+    lambda{i,t} = ones(ns(i), 1);
+    pi{i,t} = ones(ns(i), 1);
+    
+    cs = children(bnet.intra, i);
+    for c=cs(:)'
+      intra_lambda_msg{c,i,t} = ones(ns(i),1);
+    end
+    
+    cs = children(bnet.inter, i);
+    for c=cs(:)'
+      inter_lambda_msg{c,i,t} = ones(ns(i),1);
+    end
+    
+    ps = parents(bnet.inter, i);
+    for p=ps(:)'
+      inter_pi_msg{p,i,t} = ones(ns(i), 1); % not used for t==1
+    end
+  end
+end
+
+
+% each hidden node absorbs lambda from its observed child (if any)
+for t=1:T
+  for i=hnodes
+    c = engine.obschild(i);
+    if c > 0
+      if t==1
+	fam = family(bnet.dag, c);
+	e = bnet.equiv_class(c, 1);
+	CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,1));
+      else
+	fam = family(bnet.dag, c, 2); % within 2 slice network
+	e = bnet.equiv_class(c, 2);
+	CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,t-1:t));
+      end
+      temp = pot_to_marginal(CPDpot);
+      lam_msg = normalise(temp.T);
+      intra_lambda_msg{c,i,t} = lam_msg;
+    end
+  end
+end
+
+for iter=1:engine.max_iter
+  % FORWARD
+  for t=1:T
+    % update pi
+    for i=hnodes
+      if t==1
+	e = bnet.equiv_class(i,1);
+	temp = struct(bnet.CPD{e});
+	pi{i,t} = temp.CPT;
+      else
+	e = bnet.equiv_class(i,2);
+	CPD = struct(bnet.CPD{e});
+	ps = parents(bnet.inter, i);
+	temp = CPD.CPT;
+	for p=ps(:)'
+	  temp(:) = temp(:) .* inter_pi_msg{p,i,t}(engine.mult_parent_ndx{i,p});
+	end
+	dom = [ps i+ss];
+	pot = dpot(dom, ns(dom), temp);
+	pot = marginalize_pot(pot, i+ss);
+	temp = pot_to_marginal(pot);
+	pi{i,t} = temp.T;
+      end
+      if verbose, fprintf('%d updates pi\n', i+(t-1)*ss); disp(pi{i,t}); end
+    end
+    
+    % send pi msg to children 
+    for i=hnodes
+      cs = children(bnet.inter, i);
+      for c=cs(:)'
+	pot = pi{i,t};
+	for k=cs(:)'
+	  if k ~= c
+	    pot = pot .* inter_lambda_msg{k,i,t};
+	  end
+	end
+	cs2 = children(bnet.intra, i);
+	for k=cs2(:)'
+	  pot = pot .* intra_lambda_msg{k,i,t};
+	end
+	inter_pi_msg{i,c,t+1} = normalise(pot);
+	if verbose, fprintf('%d sends pi to %d\n', i+(t-1)*ss, c+t*ss); disp(inter_pi_msg{i,c,t+1}); end
+      end
+    end
+  end
+
+  if verbose, fprintf('backwards\n'); end
+  % BACKWARD
+  for t=T:-1:1
+    % update lambda
+    for i=hnodes
+      pot = ones(ns(i), 1);
+      cs = children(bnet.inter, i);
+      for c=cs(:)'
+	pot = pot .* inter_lambda_msg{c,i,t};
+      end
+      cs = children(bnet.intra, i);
+      for c=cs(:)'
+	pot = pot .* intra_lambda_msg{c,i,t};
+      end
+      lambda{i,t} = normalise(pot);
+      if verbose, fprintf('%d computes lambda\n', i+(t-1)*ss); disp(lambda{i,t}); end
+    end
+    
+    % send lambda msgs to hidden parents in prev slcie
+    for i=hnodes
+      ps = parents(bnet.inter, i);
+      if t > 1
+	e = bnet.equiv_class(i, 2);
+	CPD = struct(bnet.CPD{e});
+	for p=ps(:)'
+	  temp = CPD.CPT(:) .* lambda{i,t}(engine.mult_self_ndx{i});
+	  for k=ps(:)'
+	    if k ~= p
+	      temp(:) = temp(:) .* inter_pi_msg{k,i,t}(engine.mult_parent_ndx{i,k});
+	    end
+	  end
+	  fam = [ps i+ss];
+	  pot = dpot(fam, ns(fam), temp);
+	  pot = marginalize_pot(pot, p);
+	  temp = pot_to_marginal(pot);
+	  inter_lambda_msg{i,p,t-1} = normalise(temp.T);
+	  if verbose, fprintf('%d sends lambda to %d\n', i+(t-1)*ss, p+(t-2)*ss); disp(inter_lambda_msg{i,p,t-1}); end
+	end
+      end
+    end
+  end
+end
+
+
+
+marginal = cell(ss,T);
+for t=1:T
+  for i=hnodes
+    marginal{i,t} = normalise(pi{i,t} .* lambda{i,t});     
+  end
+end
+
+loglik = 0;
+
+msg.inter_pi_msg = inter_pi_msg;
+msg.inter_lambda_msg = inter_lambda_msg;
+msg.intra_lambda_msg = intra_lambda_msg;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/Old/wrong_smooth.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,210 @@
+function [marginal, msg, loglik] = smooth_evidence(engine, evidence)
+% [marginal, msg, loglik] = smooth_evidence(engine, evidence) (pearl_dbn)
+
+disp('warning: pearl_dbn smoothing is broken');
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+bnet2 = dbn_to_bnet(bnet, T);
+ns = bnet2.node_sizes;
+hnodes = mysetdiff(1:ss, engine.onodes);
+hnodes = hnodes(:)';
+
+onodes2 = unroll_set(engine.onodes(:), ss, T);
+onodes2 = onodes2(:)';
+
+hnodes2 = unroll_set(hnodes(:), ss, T);
+hnodes2 = hnodes2(:)';
+
+[engine.parent_index, engine.child_index] = mk_pearl_msg_indices(bnet2);
+
+msg = init_msgs(bnet2.dag, ns, evidence, bnet2.equiv_class, bnet2.CPD);
+
+verbose = 0;
+pot_type = 'd';
+niter = 1;
+for iter=1:niter
+  % FORWARD
+  for t=1:T
+    if verbose, fprintf('t=%d\n', t); end
+
+    % each hidden node absorbs lambda from its observed child (if any)
+    for i=hnodes
+      c = engine.obschild(i);
+      if c > 0
+	if t==1
+	  fam = family(bnet.dag, c);
+	  e = bnet.equiv_class(c, 1);
+	  CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,1));
+	else
+	  fam = family(bnet.dag, 2); % within 2 slice network
+	  e = bnet.equiv_class(c, 2);
+	  CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,t-1:t));
+	end
+	temp = pot_to_marginal(CPDpot);
+	n = i + (t-1)*ss;
+	lam_msg = normalise(temp.T);
+	j = engine.child_index{n}(c+(t-1)*ss);
+	assert(j==1);
+	msg{n}.lambda_from_child{j} = lam_msg;
+	if verbose, fprintf('%d sends lambda to %d\n', c + (t-1)*ss, n); disp(lam_msg); end
+      end
+    end
+    
+    % update pi
+    for i=hnodes
+      n = i + (t-1)*ss;
+      ps = parents(bnet2.dag, n);
+      if t==1
+	e = bnet.equiv_class(i,1);
+      else
+	e = bnet.equiv_class(i,2);
+      end
+      msg{n}.pi = compute_pi(bnet.CPD{e}, n, ps, msg);
+      if verbose, fprintf('%d computes pi\n', n); disp(msg{n}.pi); end
+    end
+    
+    % send pi msg to children in next slice
+    for i=hnodes
+      n = i + (t-1)*ss;
+      %cs = myintersect(children(bnet2.dag, n), hnodes2);
+      cs = children(bnet2.dag, n);
+      for c=cs(:)'
+	j = engine.parent_index{c}(n); % n is c's j'th parent
+	pi_msg = normalise(compute_pi_msg(n, cs, msg, c, ns));
+	msg{c}.pi_from_parent{j} = pi_msg;
+	if verbose, fprintf('%d sends pi to %d\n', n, c); disp(pi_msg); end
+      end
+    end
+  end
+
+  % BACKWARD
+  for t=T:-1:1
+    if verbose, fprintf('t = %d\n', t); end
+
+    % update lambda
+    for i=hnodes
+      n = i + (t-1)*ss;
+      cs = children(bnet2.dag, n);
+      msg{n}.lambda = compute_lambda(n, cs, msg, ns);
+      if verbose, fprintf('%d computes lambda\n', n); disp(msg{n}.lambda); end
+    end
+    
+    % send lambda msgs to hidden parents in prev slcie
+    for i=hnodes
+      n = i + (t-1)*ss;
+      %ps = myintersect(parents(bnet2.dag, n), hnodes2);
+      ps = parents(bnet2.dag, n);
+      for p=ps(:)'
+	j = engine.child_index{p}(n); % n is p's j'th child
+	if t > 1
+	  e = bnet.equiv_class(i, 2);
+	else
+	  e = bnet.equiv_class(i, 1);
+	end
+	lam_msg = normalise(compute_lambda_msg(bnet.CPD{e}, n, ps, msg, p));
+	msg{p}.lambda_from_child{j} = lam_msg;
+	if verbose, fprintf('%d sends lambda to %d\n', n, p); disp(lam_msg); end
+      end 
+    end
+        
+    % send pi msg to observed children 
+    if 0
+    for i=hnodes
+      n = i + (t-1)*ss;
+      cs = myintersect(children(bnet2.dag, n), onodes2);
+      %cs = children(bnet2.dag, n);
+      for c=cs(:)'
+	j = engine.parent_index{c}(n); % n is c's j'th parent
+	pi_msg = normalise(compute_pi_msg(n, cs, msg, c, ns));
+	msg{c}.pi_from_parent{j} = pi_msg;
+	if verbose, fprintf('%d sends pi to %d\n', n, c); disp(pi_msg); end
+      end
+    end
+    end
+    
+  end
+end
+
+
+marginal = cell(ss,T);
+lik = zeros(1,ss*T);
+for t=1:T
+  for i=hnodes
+    n = i + (t-1)*ss;
+    [bel, lik(n)] = normalise(msg{n}.pi .* msg{n}.lambda);     
+    marginal{i,t} = bel;
+  end
+end
+
+loglik = 0;
+%loglik = sum(log(lik));
+
+
+
+%%%%%%%
+
+function lambda = compute_lambda(n, cs, msg, ns)
+% Pearl p183 eq 4.50
+lambda = prod_lambda_msgs(n, cs, msg, ns);
+
+%%%%%%%
+
+function pi_msg = compute_pi_msg(n, cs, msg, c, ns)
+% Pearl p183 eq 4.53 and 4.51
+pi_msg = msg{n}.pi .* prod_lambda_msgs(n, cs, msg, ns, c);
+
+%%%%%%%%%
+
+function lam = prod_lambda_msgs(n, cs, msg, ns, except)
+
+if nargin < 5, except = -1; end
+
+%lam = msg{n}.lambda_from_self(:);
+lam = ones(ns(n), 1);
+for i=1:length(cs)
+  c = cs(i);
+  if c ~= except
+    lam = lam .* msg{n}.lambda_from_child{i};
+  end
+end   
+
+
+%%%%%%%%%
+
+function msg = init_msgs(dag, ns, evidence, eclass, CPD)
+% INIT_MSGS Initialize the lambda/pi message and state vectors (pearl_dbn)
+% msg =  init_msgs(dag, ns, evidence)
+
+N = length(dag);
+msg = cell(1,N);
+observed = ~isemptycell(evidence(:));
+
+for n=1:N
+  ps = parents(dag, n);
+  msg{n}.pi_from_parent = cell(1, length(ps));
+  for i=1:length(ps)
+    p = ps(i);
+    msg{n}.pi_from_parent{i} = ones(ns(p), 1);
+  end
+  
+  cs = children(dag, n);
+  msg{n}.lambda_from_child = cell(1, length(cs));
+  for i=1:length(cs)
+    c = cs(i);
+    msg{n}.lambda_from_child{i} = ones(ns(n), 1);
+  end
+
+  msg{n}.lambda = ones(ns(n), 1);
+  msg{n}.pi = ones(ns(n), 1);
+
+  % Initialize the lambdas with any evidence
+  if observed(n)
+    v = evidence{n};
+    msg{n}.lambda = zeros(ns(n), 1);
+    msg{n}.lambda(v) = 1; % delta function
+    msg{n}.lambda = [];
+  end      
+  
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (loopy_dbn)
+% [engine, loglik] = enter_evidence(engine, evidence, ....)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product (not yet supported), else sum-product [0]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+maximize = 0;
+filter = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1}; 
+     case 'filter', filter = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+assert(~maximize);
+assert(~filter);
+
+[engine.marginal, engine.msg, loglik] = enter_soft_ev(engine, evidence);
+engine.evidence = evidence; % needed by marginal_nodes and marginal_family
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/enter_soft_ev.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,137 @@
+function [marginal, msg, loglik] = enter_soft_ev(engine, evidence)
+% [marginal, msg, loglik] = smooth_evidence(engine, evidence) (pearl_dbn)
+
+
+[ss T] = size(evidence);
+bnet = bnet_from_engine(engine);
+bnet2 = dbn_to_bnet(bnet, T);
+ns = bnet2.node_sizes;
+hnodes = mysetdiff(1:ss, engine.onodes);
+hnodes = hnodes(:)';
+
+onodes2 = unroll_set(engine.onodes(:), ss, T);
+onodes2 = onodes2(:)';
+
+hnodes2 = unroll_set(hnodes(:), ss, T);
+hnodes2 = hnodes2(:)';
+
+[engine.parent_index, engine.child_index] = mk_pearl_msg_indices(bnet2);
+
+rand_init = 0;
+use_ev = 0;
+msg = init_pearl_msgs(bnet2.dag, ns, evidence, rand_init, use_ev);
+msg = init_pearl_dbn_ev_msgs(bnet, evidence, engine);
+
+verbose = 0;
+pot_type = 'd';
+niter = engine.max_iter;
+
+if verbose, fprintf('old smooth\n'); end
+
+for iter=1:niter
+  % FORWARD
+  for t=1:T
+    if verbose, fprintf('t=%d\n', t); end
+    
+    % update pi
+    for i=hnodes
+      n = i + (t-1)*ss;
+      ps = parents(bnet2.dag, n);
+      if t==1
+	e = bnet.equiv_class(i,1);
+      else
+	e = bnet.equiv_class(i,2);
+      end
+      msg{n}.pi = compute_pi(bnet.CPD{e}, n, ps, msg);
+      if verbose, fprintf('%d computes pi\n', n); disp(msg{n}.pi); end
+    end
+    
+    % send pi msg to children 
+    for i=hnodes
+      n = i + (t-1)*ss;
+      %cs = myintersect(children(bnet2.dag, n), hnodes2);
+      cs = children(bnet2.dag, n); % must use all children to get index right
+      for c=cs(:)'
+	j = engine.parent_index{c}(n); % n is c's j'th parent
+	pi_msg = normalise(compute_pi_msg(n, cs, msg, c, ns));
+	msg{c}.pi_from_parent{j} = pi_msg;
+	if verbose, fprintf('%d sends pi to %d\n', n, c); disp(pi_msg); end
+      end
+    end
+  end
+
+  % BACKWARD
+  for t=T:-1:1
+    if verbose, fprintf('t = %d\n', t); end
+
+    % update lambda
+    for i=hnodes
+      n = i + (t-1)*ss;
+      cs = children(bnet2.dag, n);
+      msg{n}.lambda = compute_lambda(n, cs, msg, ns);
+      if verbose, fprintf('%d computes lambda\n', n); disp(msg{n}.lambda); end
+    end
+    
+    % send lambda msgs to hidden parents in prev slcie
+    for i=hnodes
+      n = i + (t-1)*ss;
+      ps = parents(bnet2.dag, n);
+      for p=ps(:)'
+	j = engine.child_index{p}(n); % n is p's j'th child
+	if t > 1
+	  e = bnet.equiv_class(i, 2);
+	else
+	  e = bnet.equiv_class(i, 1);
+	end
+	lam_msg = normalise(compute_lambda_msg(bnet.CPD{e}, n, ps, msg, p));
+	msg{p}.lambda_from_child{j} = lam_msg;
+	if verbose, fprintf('%d sends lambda to %d\n', n, p); disp(lam_msg); end
+      end 
+    end
+    
+  end
+end
+
+
+marginal = cell(ss,T);
+lik = zeros(1,ss*T);
+for t=1:T
+  for i=hnodes
+    n = i + (t-1)*ss;
+    [bel, lik(n)] = normalise(msg{n}.pi .* msg{n}.lambda);     
+    marginal{i,t} = bel;
+  end
+end
+
+loglik = 0;
+%loglik = sum(log(lik));
+
+
+
+%%%%%%%
+
+function lambda = compute_lambda(n, cs, msg, ns)
+% Pearl p183 eq 4.50
+lambda = prod_lambda_msgs(n, cs, msg, ns);
+
+%%%%%%%
+
+function pi_msg = compute_pi_msg(n, cs, msg, c, ns)
+% Pearl p183 eq 4.53 and 4.51
+pi_msg = msg{n}.pi .* prod_lambda_msgs(n, cs, msg, ns, c);
+
+%%%%%%%%%
+
+function lam = prod_lambda_msgs(n, cs, msg, ns, except)
+
+if nargin < 5, except = -1; end
+
+%lam = msg{n}.lambda_from_self(:);
+lam = ones(ns(n), 1);
+for i=1:length(cs)
+  c = cs(i);
+  if c ~= except
+    lam = lam .* msg{n}.lambda_from_child{i};
+  end
+end   
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function marginal = marginal_nodes(engine, nodes, t)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (pearl_dbn)
+% marginal = marginal_nodes(engine, i, t)
+% returns Pr(X(i,t) | Y(1:T)), where X(i,t) is the i'th node in the t'th slice.
+% If enter_evidence used filtering instead of smoothing, this will return  Pr(X(i,t) | Y(1:t)).
+
+if nargin < 3, t = 1; end
+assert(length(nodes)==1);
+i = nodes(end);
+if ~myismember(i, engine.onodes)
+  marginal.T = engine.marginal{i,t};
+else
+  marginal.T = 1; % observed
+end
+
+% we convert the domain to the unrolled numbering system
+% so that update_ess extracts the right evidence.
+marginal.domain = nodes+(t-1)*engine.ss;       
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/pearl_dbn_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function engine = pearl_dbn_inf_engine(bnet, varargin)
+% LOOPY_DBN_INF_ENGINE Loopy Pearl version of forwards-backwards
+% engine = loopy_dbn_inf_engine(bnet, ...)
+%
+% Optional arguments
+% 'max_iter' - specifies the max num. forward-backward passes to perform [1]
+% 'tol' - as in loopy_pearl [1e-3]
+% 'momentum' - as in loopy_pearl [0]
+
+error('pearl_dbn does not work yet')
+
+max_iter = 1;
+tol = 1e-3;
+momentum = 0;
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'max_iter', max_iter = args{i+1};
+     case 'tol', tol = args{i+1};
+     case 'momentum', momentum = args{i+1};
+    end
+  end
+end
+
+          
+engine.max_iter = max_iter;
+engine.tol = tol;
+engine.momentum = momentum;
+engine.pearl_engine = [];
+engine.T = [];
+engine.ss = length(bnet.intra);
+
+engine.marginal = [];
+engine.evidence = [];
+engine.msg = [];
+engine.parent_index = [];
+engine.child_index = [];
+%[engine.parent_index, engine.child_index] = mk_pearl_msg_indices(bnet); % need to unroll first
+
+ss = length(bnet.intra);
+engines.ss = ss;
+onodes = bnet.observed;
+hnodes = mysetdiff(1:ss, onodes);
+obschild = zeros(1,ss);
+for i=hnodes(:)'
+  %ocs = myintersect(children(bnet.dag, i), onodes);
+  ocs = children(bnet.intra, i);
+  assert(length(ocs) <= 1);
+  if length(ocs)==1
+    obschild(i) = ocs(1);
+  end
+end
+engine.obschild = obschild;
+
+engine.mult_self_ndx = [];
+engine.mult_parent_ndx = [];
+engine.marg_self_ndx = [];
+engine.marg_parent_ndx = [];
+
+
+engine = class(engine, 'loopy_dbn_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/init_pearl_dbn_ev_msgs.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@pearl_dbn_inf_engine/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_dbn_inf_engine/private/init_pearl_dbn_ev_msgs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function msg = init_pearl_dbn_ev_msgs(bnet, evidence, engine)
+
+[ss T] = size(evidence);
+pot_type = 'd';
+
+% each hidden node absorbs lambda from its observed child (if any)
+for t=1:T
+  for i=hnodes
+    c = engine.obschild(i);
+    if c > 0
+      if t==1
+	fam = family(bnet.dag, c);
+	e = bnet.equiv_class(c, 1);
+	CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,1));
+      else
+	fam = family(bnet.dag, c, 2); % within 2 slice network
+	e = bnet.equiv_class(c, 2);
+	CPDpot = CPD_to_pot(pot_type, bnet.CPD{e}, fam, bnet.node_sizes(:), bnet.cnodes(:), evidence(:,t-1:t));
+      end
+      temp = pot_to_marginal(CPDpot);
+      n = i + (t-1)*ss;
+      lam_msg = normalise(temp.T);
+      j = engine.child_index{n}(c+(t-1)*ss);
+      assert(j==1);
+      msg{n}.lambda_from_child{j} = lam_msg;
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/pearl_unrolled_dbn_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/update_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function [engine, loglik, niter] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (loopy_unrolled_dbn)
+% [engine, loglik, niter] = enter_evidence(engine, evidence, ....)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product (not yet supported), else sum-product [0]
+% filename - as in loopy_pearl
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+maximize = 0;
+filename = engine.filename;
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1};
+     case 'filename', filename = args{i+1};
+    end
+  end
+end
+
+
+[ss T] = size(evidence);
+if T ~= engine.T
+  bnetT = dbn_to_bnet(bnet_from_engine(engine), T);
+  engine.unrolled_engine = pearl_inf_engine(bnetT, 'protocol', engine.protocol, ...
+					    'max_iter', engine.max_iter_per_slice * T, ...
+					    'tol', engine.tol, 'momentum', engine.momentum);
+  engine.T = T;
+end
+[engine.unrolled_engine, loglik, niter] = enter_evidence(engine.unrolled_engine, evidence(:), ...
+						  'maximize', maximize, 'filename', filename);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function marginal = marginal_family(engine, i, t, add_ev)
+% MARGINAL_FAMILY Compute the marginal on the specified family (jtree_unrolled_dbn)
+% marginal = marginal_family(engine, i, t)
+
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+assert(~add_ev);
+
+%marginal = marginal_family(engine.unrolled_engine, i + (t-1)*engine.ss, add_ev);
+marginal = marginal_family(engine.unrolled_engine, i + (t-1)*engine.ss);
+              
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function marginal = marginal_nodes(engine, nodes, t, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (loopy_unrolled_dbn)
+% marginal = marginal_nodes(engine, nodes, t)
+%
+% 't' specifies the time slice of the earliest node in 'nodes'.
+% 'nodes' must occur in some clique.
+%
+% Example:
+% Consider a DBN with 2 nodes per slice.
+% Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3,
+% i.e., nodes 3 and 5 in the unrolled network,
+
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+
+marginal = marginal_nodes(engine.unrolled_engine, nodes + (t-1)*engine.ss, add_ev);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/pearl_unrolled_dbn_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function engine = pearl_unrolled_dbn_inf_engine(bnet, varargin)
+% LOOPY_DBN_INF_ENGINE Loopy Pearl version of forwards-backwards
+% engine = loopy_unrolld_dbn_inf_engine(bnet, ...)
+%
+% Optional arguments
+% 'max_iter' - specifies the max num. forward-backward passes to perform PER SLICE [2]
+% 'tol' - as in loopy_pearl [1e-3]
+% 'momentum' - as in loopy_pearl [0]
+% protocol - tree or parallel [parallel]
+% filename - as in pearl [ '' ]
+
+max_iter_per_slice = 2;
+tol = 1e-3;
+momentum = 0;
+protocol = 'parallel';
+filename = '';
+
+args = varargin;
+for i=1:2:length(args)
+  switch args{i},
+   case 'max_iter', max_iter_per_slice = args{i+1};
+   case 'tol', tol = args{i+1};
+   case 'momentum', momentum = args{i+1};
+   case 'protocol', protocol = args{i+1};
+   case 'filename', filename = args{i+1};
+  end
+end
+
+engine.filename = filename;
+engine.max_iter_per_slice = max_iter_per_slice;
+engine.tol = tol;
+engine.momentum = momentum;
+engine.unrolled_engine = [];
+engine.T = -1;
+engine.ss = length(bnet.intra);
+engine.protocol = protocol;
+
+engine = class(engine, 'pearl_unrolled_dbn_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@pearl_unrolled_dbn_inf_engine/update_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function engine = update_engine(engine, newCPDs) 
+% UPDATE_ENGINE Update the engine to take into account the new parameters (pearl_unrolled_dbn)
+% engine = update_engine(engine, newCPDs)
+
+engine.inf_engine = update_engine(engine.inf_engine, newCPDs);
+engine.unrolled_engine = update_engine(engine.unrolled_engine, newCPDs);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/enter_evidence.m/1.1.1.1/Wed Feb 19 09:52:12 2003//
+/marginal_family.m/1.1.1.1/Wed Feb 19 09:52:12 2003//
+/marginal_nodes.m/1.1.1.1/Wed Feb 19 09:52:12 2003//
+/stable_ho_inf_engine.m/1.1.1.1/Fri Mar 14 09:45:34 2003//
+/test_ho_inf_enginge.m/1.1.1.1/Wed Feb 19 09:52:12 2003//
+/update_engine.m/1.1.1.1/Wed Feb 19 09:52:12 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic/@stable_ho_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (jtree_unrolled_dbn)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+% 
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product instead of sum-product [0]
+% filter   - if 1, does filtering (not supported), else smoothing [0]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+maximize = 0;
+filter = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1}; 
+     case 'filter',  filter = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+if filter
+  error('jtree_unrolled_dbn does not support filtering')
+end
+
+if size(evidence,2) ~= engine.nslices
+  error(['engine was created assuming there are ' num2str(engine.nslices) ...
+	 ' slices, but evidence has ' num2str(size(evidence,2))])
+end
+
+[engine.unrolled_engine, loglik] = enter_evidence(engine.unrolled_engine, evidence, 'maximize', maximize);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function marginal = marginal_family(engine, i, t, add_ev)
+% MARGINAL_FAMILY Compute the marginal on the specified family (jtree_unrolled_dbn)
+% marginal = marginal_family(engine, i, t)
+
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+assert(~add_ev);
+
+%marginal = marginal_family(engine.unrolled_engine, i + (t-1)*engine.ss, add_ev);
+marginal = marginal_family(engine.unrolled_engine, i + (t-1)*engine.ss);
+              
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function marginal = marginal_nodes(engine, nodes, t, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (loopy_unrolled_dbn)
+% marginal = marginal_nodes(engine, nodes, t)
+%
+% 't' specifies the time slice of the earliest node in 'nodes'.
+% 'nodes' must occur in some clique.
+%
+% Example:
+% Consider a DBN with 2 nodes per slice.
+% Then t=2, nodes=[1 3] refers to node 1 in slice 2 and node 1 in slice 3,
+% i.e., nodes 3 and 5 in the unrolled network,
+
+if nargin < 3, t = 1; end
+if nargin < 4, add_ev = 0; end
+
+marginal = marginal_nodes(engine.unrolled_engine, nodes + (t-1)*engine.ss, add_ev);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/stable_ho_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+function engine = dv_unrolled_dbn_inf_engine(bnet, T, varargin)
+% JTREE_UNROLLED_DBN_INF_ENGINE Unroll the DBN for T time-slices and apply jtree to the resulting static net
+% engine = jtree_unrolled_dbn_inf_engine(bnet, T, ...)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% useC      - 1 means use jtree_C_inf_engine instead of jtree_inf_engine [0]
+% constrained - 1 means we constrain ourselves to eliminate slice t before t+1 [1]
+%
+% e.g., engine = jtree_unrolled_inf_engine(bnet, 'useC', 1);
+
+% set default params
+N = length(bnet.intra);
+useC = 0;
+constrained = 1;
+
+if nargin >= 3
+  args = varargin;
+  nargs = length(args);
+  if isstr(args{1})
+    for i=1:2:nargs
+      switch args{i},
+       case 'useC',   useC = args{i+1};
+       case 'constrained',  constrained = args{i+1};
+       otherwise,  
+	error(['invalid argument name ' args{i}]);       
+      end
+    end
+  else
+    error(['invalid argument name ' args{1}]);       
+  end
+end
+
+bnet2 = hodbn_to_bnet(bnet, T);
+ss = length(bnet.intra);
+engine.ss = ss;
+
+% If constrained_order = 1 we constrain ourselves to eliminate slice t before t+1.
+% This prevents cliques containing nodes from far-apart time-slices.
+if constrained
+  stages = num2cell(unroll_set(1:ss, ss, T), 1);
+else
+  stages = { 1:length(bnet2.dag) };
+end
+if useC
+  %jengine = jtree_C_inf_engine(bnet2, 'stages', stages);
+  %function is not implemented
+  assert(0)
+else
+  jengine = stab_cond_gauss_inf_engine(bnet2);
+end
+
+engine.unrolled_engine = jengine;
+% we don't inherit from jtree_inf_engine, because that would only store bnet2,
+% and we would lose access to the DBN-specific fields like intra/inter
+
+engine.nslices = T;
+engine = class(engine, 'stable_ho_inf_engine', inf_engine(bnet));
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/test_ho_inf_enginge.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,87 @@
+function [engine,engine2] = test_ho_inf_enginge(order,T)
+
+assert(order >= 1)
+% Model a SISO system, i. e. all node are one-dimensional
+% The nodes are numbered as follows
+% u(t) = 1 input
+% y(t) = 2 model output
+% z(t) = 3 noise
+% q(t) = 4 observed output = noise + model output
+
+ns = [1 1 1 1];
+
+% Model a linear system, i.e. there are no discrete nodes
+dn = [];
+
+% Modeling of connections within a time slice
+intra = zeros(4);
+intra(2,4) = 1; % Connection y(t) -> q(t)
+intra(3,4) = 1; % Connection z(t) -> q(t)
+
+% Connections to the next time slice
+inter = zeros(4,4,order);
+inter(1,2,1) = 1; % u(t) -> y(t+1);
+inter(2,2,1) = 1; %y(t) -> y(t+1);
+inter(3,3,1) = 1; %z(t) -> z(t+1);
+
+if order >= 2
+    inter(1,2,2) = 1; % u(t) -> y(t+2);
+    inter(2,2,2) = 1; % y(t) -> y(t+2);
+end
+
+for i = 3: order
+    inter(:,:,i) = inter(:,:,i-1); %u(t) -> y(t+i) y(t) -> y(t) +i
+end;
+
+
+% Compution of a higer order Markov Model
+bnet = mk_higher_order_dbn(intra,inter,ns,'discrete',dn);
+bnet2 = mk_dbn(intra,inter(:,:,1),ns,'discrete',dn)
+
+
+%Calculation of the number of nodes with different parameters
+%There is one input and one output nodes  2
+%There are two different disturbance node 2
+%There are order +1 nodes for y           1 + order
+numOfNodes = 5 + order; 
+
+% First input node
+bnet.CPD{1} = gaussian_CPD(bnet,1,'mean',0);
+bnet2.CPD{1} = gaussian_CPD(bnet,1,'mean',0);
+% Modeled output
+bnet.CPD{2} = gaussian_CPD(bnet,2,'mean',0);
+bnet2.CPD{2} = gaussian_CPD(bnet,2,'mean',0);
+%Disturbance
+bnet.CPD{3} = gaussian_CPD(bnet,3,'mean',0);
+bnet2.CPD{3} = gaussian_CPD(bnet,3,'mean',0);
+
+%Qutput
+bnet.CPD{4} = gaussian_CPD(bnet,4,'mean',0);
+bnet2.CPD{4} = gaussian_CPD(bnet,4,'mean',0);
+
+
+%Output node in the second time-slice
+%Remember that node number 6 is an example for 
+%the fifth equivalence class
+bnet.CPD{5} = gaussian_CPD(bnet,6,'mean',0);
+bnet2.CPD{5} = gaussian_CPD(bnet,6,'mean',0);
+
+%Disturbance node in the second time slice
+bnet.CPD{6} = gaussian_CPD(bnet,7,'mean',0);
+bnet2.CPD{6} = gaussian_CPD(bnet,7,'mean',0);
+
+% Modeling of the remaining nodes for y
+for i = 7:numOfNodes
+    bnet.CPD{i} = gaussian_CPD(bnet,(i - 6)*4 + 7,'mean',0);
+end
+
+% Generation of the inference engine
+engine = dv_unrolled_dbn_inf_engine(bnet,T);
+engine2 = jtree_unrolled_dbn_inf_engine(bnet,T);
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/@stable_ho_inf_engine/update_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function engine = update_engine(engine, newCPDs)
+% UPDATE_ENGINE Update the engine to take into account the new parameters (jtree_unrolled_dbn)
+% engine = update_engine(engine, newCPDs)
+
+engine.inf_engine = update_engine(engine.inf_engine, newCPDs);
+engine.unrolled_engine = update_engine(engine.unrolled_engine, newCPDs);
+                                                            
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/dummy/1.1.1.1/Sat Jan 18 22:22:28 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+A D/@bk_ff_hmm_inf_engine////
+A D/@bk_inf_engine////
+A D/@cbk_inf_engine////
+A D/@ff_inf_engine////
+A D/@frontier_inf_engine////
+A D/@hmm_inf_engine////
+A D/@jtree_dbn_inf_engine////
+A D/@jtree_unrolled_dbn_inf_engine////
+A D/@kalman_inf_engine////
+A D/@pearl_dbn_inf_engine////
+A D/@pearl_unrolled_dbn_inf_engine////
+A D/@stable_ho_inf_engine////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/dynamic
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/dynamic/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/bnet_from_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/filter_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/online/@filter_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/bnet_from_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function bnet = bnet_from_engine(engine)
+% BNET_FROM_ENGINE Return the bnet structure stored inside the engine (smoother_engine)
+% bnet = bnet_from_engine(engine)
+
+bnet = bnet_from_engine(engine.tbn_engine);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function [engine, LL] = enter_evidence(engine, ev, t)
+% ENTER_EVIDENCE Call the online filter
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value (scalar or column vector)
+
+engine.old_f = engine.f;
+if t==1
+  [engine.f, LL] = fwd1(engine.tbn_engine, ev, 1);
+else
+  [engine.f, LL] = fwd(engine.tbn_engine, engine.old_f, ev, t);
+end
+engine.b = backT(engine.tbn_engine, engine.f, t);
+engine.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/filter_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function engine = filter_engine(tbn_engine)
+% FILTER_ENGINE Create an engine which does online filtering
+% function engine = filter_engine(tbn_engine)
+
+engine.tbn_engine = tbn_engine;
+engine.f = [];  % space to store filtered message
+engine.old_f = [];
+engine.b = []; % space to store smoothed message
+engine.t = [];
+engine = class(engine, 'filter_engine');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function marginal = marginal_family(engine, i, t, add_ev)
+% MARGINAL_FAMILY Compute the joint distribution on a set of family (filter_engine)
+% function marginal = marginal_family(engine, i, t, add_ev)
+
+if nargin < 4, add_ev = 0; end
+
+if t ~= engine.t
+  error('mixed up time stamps')
+end
+
+marginal = marginal_family(engine.tbn_engine, engine.b, i, t, add_ev);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@filter_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function marginal = marginal_nodes(engine, nodes, t, add_ev)
+% MARGINAL_NODES Compute the joint distribution on a set of nodes (filter_engine)
+% function marginal = marginal_nodes(engine, nodes, t, add_ev)
+
+if nargin < 4, add_ev = 0; end
+
+if t ~= engine.t
+  error('mixed up time stamps')
+end
+marginal = marginal_nodes(engine.tbn_engine, engine.b, nodes, t, add_ev);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+/back.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/backT.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/fwd.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/fwd1.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/hmm_2TBN_inf_engine.m/1.1.1.1/Thu Nov 14 20:03:50 2002//
+/marginal_family.m/1.1.1.1/Thu Nov 14 20:05:36 2002//
+/marginal_nodes.m/1.1.1.1/Thu Nov 14 20:02:46 2002//
+/update_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/online/@hmm_2TBN_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/back.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function b = back(engine, bfuture, f, t)
+
+if f.t ~= t
+  error('mixed up time stamps')
+end
+
+b.t = t;
+b.obslik = f.obslik;
+bb_future = bfuture.beta .* bfuture.obslik;
+if engine.maximize
+  B = repmat(bb_future(:)', length(bfuture.beta), 1);
+  b.beta = normalise(max(engine.transprob .* B, [], 2));
+else
+  b.beta = normalise((engine.transprob * bb_future));
+end
+b.gamma = normalise(f.alpha .* b.beta);
+if t > 1
+  bb_t = b.beta .* b.obslik;
+  b.xi = normalise((engine.transprob .* (f.past_alpha * bb_t'))); % t-1,t
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/backT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function b = backT(engine, f, t)
+
+b.t = t;
+b.obslik = f.obslik;
+Q = length(f.alpha);
+b.beta = ones(Q,1);
+b.gamma = f.alpha;
+if t > 1
+  bb_t = b.obslik;
+  b.xi = normalise((engine.transprob .* (f.past_alpha * bb_t'))); % T-1,T
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/fwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function [f, logscale] = fwd(engine, fpast, ev, t)
+% Forwards pass.
+
+f.obslik = mk_hmm_obs_lik_vec(engine, ev);
+transmat = engine.transprob;
+f.past_alpha = fpast.alpha;
+if engine.maximize
+  Q = length(fpast.alpha);
+  A = repmat(fpast.alpha, [1 Q]);
+  m = max(transmat .* A, [], 1);
+  [f.alpha, scale] = normalise(m(:) .* f.obslik);
+else
+  [f.alpha, scale] = normalise((transmat' * fpast.alpha) .* f.obslik);
+end
+logscale = log(scale);
+%f.xi = normalise((fpast.alpha * obslik') .* transmat); % t-1,t
+f.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/fwd1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function [f, logscale] = fwd1(engine, ev, t)
+% Forwards pass for slice 1.
+
+if t ~= 1
+  error('mixed up time stamps')
+end
+prior = engine.startprob(:);
+f.obslik = mk_hmm_obs_lik_vec(engine, ev);
+[f.alpha, lik] = normalise(prior .* f.obslik);
+logscale = log(lik);
+f.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/hmm_2TBN_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+function engine = hmm_2TBN_inf_engine(bnet, varargin)
+% HMM_2TBN_INF_ENGINE Inference engine for DBNs which uses the forwards-backwards algorithm.
+% engine = hmm_2TBN_inf_engine(bnet, ...)
+%
+% The DBN is converted to an HMM with a single meganode, but the observed nodes remain factored.
+% This can be faster than jtree if the num. hidden nodes is low, because of lower constant factors.
+%
+% All hidden nodes must be discrete.
+% All observed nodes are assumed to be leaves.
+% The parents of each observed leaf are assumed to be a subset of the hidden nodes within the same slice.
+% The only exception is if bnet is an AR-HMM, where the parents are assumed to be self in the
+% previous slice (continuous), plus all the discrete nodes in the current slice.
+
+
+%% Optional arguments
+%% ndx_type - 'B', 'D', or 'SD', used in marginal_family [ 'SD' ]
+
+ndx_type = 'SD';
+ss = bnet.nnodes_per_slice;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     %case 'ndx_type', ndx_type = args{i+1};
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+% Stuff to do with speeding up marginal_family
+%engine.ndx_type = ndx_type;
+
+[int, engine.persist, engine.transient] = compute_interface_nodes(bnet.intra, bnet.inter);
+engine.persist_bitv = zeros(1, ss);
+engine.persist_bitv(engine.persist) = 1;
+
+
+ns = bnet.node_sizes(:);
+ns(bnet.observed) = 1;
+ns(bnet.observed+ss) = 1;
+engine.eff_node_sizes = ns;
+
+% for n=1:ss
+%   dom = 1:(2*ss); % domain of xi(:,:,1)
+%   fam = family(bnet.dag, n+ss);
+%   engine.marg_fam2_ndx_id(n) = add_ndx(dom, fam, ns, ndx_type);
+ 
+%   dom = 1:ss; % domain of gamma(:,:,1)
+%   fam = family(bnet.dag, n);
+%   engine.marg_fam1_ndx_id(n) = add_ndx(dom, fam, ns, ndx_type);
+
+%   engine.marg_singleton_ndx_id(n) = add_ndx(dom, n, ns, ndx_type);
+% end
+
+for o=bnet.observed(:)'
+  %if bnet.equiv_class(o,1) ~= bnet.equiv_class(o,2)
+  %  error(['observed node ' num2str(o) ' is not tied'])
+  %end
+  cs = children(bnet.dag, o);
+  if ~isempty(cs)
+    error(['observed node ' num2str(o) ' is not allowed children'])
+  end
+end
+
+[engine.startprob, engine.transprob, engine.obsprob] = dbn_to_hmm(bnet);
+
+% This is where we will store the results between enter_evidence and marginal_nodes
+engine.one_slice_marginal = [];
+engine.two_slice_marginal = [];
+
+ss = length(bnet.intra);
+engine.maximize = [];
+engine.evidence = [];
+engine.node_sizes = [];
+
+% avoid the need to do bnet_from_engine, which is slow
+engine.slice_size = ss;
+engine.parents = bnet.parents;
+
+engine.bel = [];
+engine = class(engine, 'hmm_2TBN_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+function marginal = marginal_family(engine, b, i, t, add_ev)
+% MARGINAL_FAMILY Compute the marginal on the specified family (hmm_2TBN)
+% marginal = marginal_family(engine, b, i, t, add_ev)
+
+ns = engine.eff_node_sizes(:);
+ss = engine.slice_size;
+
+if t==1 % | ~engine.persist_bitv(i)
+  bigT = b.gamma;
+  ps = engine.parents{i};
+  dom = [ps i];
+  %id = engine.marg_fam1_ndx_id(i);
+  bigdom = 1:ss;
+  bigsz = ns(bigdom);
+  bigdom = bigdom + (t-1)*ss;
+else % some parents are in previous slice
+  bigT = b.xi; % (t-1,t)
+  ps = engine.parents{i+ss};
+  dom = [ps i+ss] + (t-2)*ss;
+  %id = engine.marg_fam2_ndx_id(i);
+  bigdom = 1:(2*ss); % domain of xi(:,:,t)
+  bigsz = ns(bigdom);
+  bigdom = bigdom + (t-2)*ss;
+end
+marginal.domain = dom;
+
+%ndx = get_ndx(id, engine.ndx_type);
+%marginal.T = marg_table_ndx(bigT, engine.maximize, ndx, engine.ndx_type);
+%global SD_NDX
+%ndx = SD_NDX{id};
+%marginal.T = marg_table_ndxSD(bigT, engine.maximize, ndx);
+marginal.T = marg_table(bigT, bigdom, bigsz, dom, engine.maximize); 
+
+assert(~add_ev);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function marginal = marginal_nodes(engine, b, nodes, t, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified nodes (hmm_2TBN)
+% marginal = marginal_nodes(engine, b, nodes, t, add_ev)
+%
+% nodes must be a singleton set 
+
+assert(length(nodes)==1)
+ss = engine.slice_size;
+
+i = nodes(1);
+bigT = b.gamma;
+dom = i + (t-1)*ss;
+
+%id = engine.marg_singleton_ndx_id(i);
+%global SD_NDX
+%ndx = SD_NDX{id};
+%marginal.T = marg_table_ndxSD(bigT, engine.maximize, ndx);
+
+ns = engine.eff_node_sizes(:);
+bigdom = 1:ss;
+marginal.T = marg_table(bigT, bigdom + (t-1)*ss, ns(bigdom), dom, engine.maximize);
+
+marginal.domain = dom;
+assert(~add_ev);
+%if add_ev
+%  marginal = add_ev_to_dmarginal(marginal, engine.evidence, engine.node_sizes);
+%end    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/mk_hmm_obs_lik_vec.m/1.1.1.1/Sun May  4 21:47:44 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/online/@hmm_2TBN_inf_engine/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/private/mk_hmm_obs_lik_vec.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function obslik = mk_hmm_obs_lik_vec(engine, evidence)
+
+% P(o1,o2| h) = P(o1|h) * P(o2|h) where h = Q1,Q2,...
+
+bnet = bnet_from_engine(engine);
+ss = length(bnet.intra);
+onodes = bnet.observed;
+hnodes = mysetdiff(1:ss, onodes);
+ns = bnet.node_sizes(:);
+ns(onodes) = 1;
+
+Q = length(engine.startprob);
+obslik = ones(Q, 1);
+
+for i=1:length(onodes)
+  o = onodes(i);
+  %data = cell2num(evidence(o,1));
+  data = evidence{o,1};
+  if myismember(o, bnet.dnodes)
+    %obslik_i = eval_pdf_cond_multinomial(data, engine.obsprob{i}.CPT);
+    obslik_i = multinomial_prob(data, engine.obsprob{i}.CPT);
+  else
+    if bnet.auto_regressive(o)
+      error('can''t handle AR nodes')
+    end
+    %% calling mk_ghmm_obs_lik, which calls gaussian_prob, is slow, so we inline it
+    %% and use the pre-computed  inverse matrix
+    %obslik_i = mk_ghmm_obs_lik(data, engine.obsprob{i}.mu, engine.obsprob{i}.Sigma);
+    x = data(:);
+    m = engine.obsprob{i}.mu;
+    Qi = size(m, 2);
+    obslik_i = size(Qi, 1);
+    invC = engine.obsprob{i}.inv_Sigma;
+    denom = engine.obsprob{i}.denom;
+    for j=1:Qi
+      numer = exp(-0.5 * (x-m(:,j))' * invC(:,:,j) * (x-m(:,j)));
+      obslik_i(j) = numer / denom(j);
+    end
+  end
+  % convert P(o|ps) into P(o|h) by multiplying onto a (h,o) potential of all 1s
+  ps = bnet.parents{o};
+  dom = [ps o];
+  obspot_i = dpot(dom, ns(dom), obslik_i);
+  dom = [hnodes o];
+  obspot = dpot(dom, ns(dom));
+  obspot = multiply_by_pot(obspot, obspot_i);
+  % compute p(oi|h) * p(oj|h)
+  S = struct(obspot);
+  obslik = obslik .* S.T(:);
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@hmm_2TBN_inf_engine/update_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function engine = update_engine(engine, newCPDs)
+% UPDATE_ENGINE Update the engine to take into account the new parameters (hmm)
+% engine = update_engine(engine, newCPDs)
+
+%engine.inf_engine.bnet.CPD = newCPDs;
+engine.inf_engine = update_engine(engine.inf_engine, newCPDs);
+[engine.startprob, engine.transprob, engine.obsprob] = dbn_to_hmm(bnet_from_engine(engine));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+/back.m/1.1.1.1/Mon Jun 17 23:34:12 2002//
+/back1.m/1.1.1.1/Mon Jun 17 23:34:26 2002//
+/back1_mpe.m/1.1.1.1/Mon Jun 17 23:49:40 2002//
+/backT.m/1.1.1.1/Mon Jun 17 23:34:20 2002//
+/backT_mpe.m/1.1.1.1/Mon Jun 17 23:38:56 2002//
+/back_mpe.m/1.1.1.1/Sun Jul 21 00:32:52 2002//
+/fwd.m/1.1.1.1/Mon Jun 17 23:46:06 2002//
+/fwd1.m/1.1.1.1/Mon Jun 17 23:46:20 2002//
+/jtree_2TBN_inf_engine.m/1.1.1.1/Thu Nov 14 16:31:58 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/set_fields.m/1.1.1.1/Sun Jul 21 01:25:30 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/online/@jtree_2TBN_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/jtree_2TBN_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/online/@jtree_2TBN_inf_engine/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/Old/jtree_2TBN_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,116 @@
+function engine = jtree_2TBN_inf_engine(bnet, varargin)
+% JTREE_ONLINE_INF_ENGINE Online Junction tree inference algorithm for DBNs.
+% engine = jtree_online_inf_engine(bnet, ...)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% clusters - specifies variables that must be grouped in the 1.5 slice DBN
+% maximize - 1 means do max-product, 0 means sum-product [0]
+%
+% The same nodes must be observed in every slice.
+
+ss = length(bnet.intra);
+clusters = {};
+engine.maximize = 0;
+
+args = varargin;
+nargs = length(args);
+for i=1:2:length(args)
+  switch args{i},
+   case 'clusters', clusters = args{i+1};
+   case 'maximize', engine.maximize = args{i+1};
+   otherwise, error(['unrecognized argument ' args{i}])
+  end
+end
+
+engine.evidence = [];
+engine.node_sizes = [];
+
+%int = compute_interface_nodes(bnet.intra, bnet.inter);
+int = [];
+
+if 1
+% include nodes with any outgoing arcs
+for u=1:ss
+  if any(bnet.inter(u,:))
+    int = [int u];
+  end
+end
+end
+
+if 0
+% include nodes with any incoming  arcs
+incoming = [];
+for u=1:ss
+  if any(bnet.inter(:,u))
+    int = [int u];
+    incoming = [incoming u];
+  end
+end
+% include nodes which are parents of nodes with incoming
+for u=1:ss
+  cs = children(bnet.intra, u);
+  if ~isempty(cs) & mysubset(cs, incoming)
+    int = [int u];
+  end
+end
+int = unique(int);
+end % if
+
+int
+engine.interface = int;
+engine.nonint = mysetdiff(1:ss, int);
+
+onodes = bnet.observed;
+
+% Create a "1.5 slice" jtree, containing the interface nodes of slice 1
+% and all the nodes of slice 2
+% To keep the node numbering the same, we simply disconnect the non-interface nodes
+% from slice 1, and set their size to 1.
+% We do this to speed things up, and so that the likelihood is computed correctly - we do not need to do
+% this if we just want to compute marginals (i.e., we can include nodes whose potentials will
+% be left as all 1s).
+intra15 = bnet.intra;
+for i=engine.nonint(:)'
+  intra15(:,i) = 0;
+  intra15(i,:) = 0;
+end
+dag15 = [intra15      bnet.inter;
+	 zeros(ss)    bnet.intra];
+ns = bnet.node_sizes(:);
+%ns(engine.nonint) = 1; % disconnected nodes get size 1
+obs_nodes = [onodes(:) onodes(:)+ss];
+bnet15 = mk_bnet(dag15, ns, 'discrete', bnet.dnodes, 'equiv_class', bnet.equiv_class(:), ...
+		 'observed', obs_nodes(:));
+
+% use unconstrained elimination,
+% but force there to be a clique containing both interfaces
+clusters(end+1:end+2) = {int, int+ss};
+engine.jtree_engine = jtree_inf_engine(bnet15, 'clusters', clusters, 'root', int+ss);
+jtree_engine = struct(engine.jtree_engine); % violate object privacy
+
+engine.in_clq = clq_containing_nodes(engine.jtree_engine, int);
+engine.out_clq = clq_containing_nodes(engine.jtree_engine, int+ss);
+engine.clq_ass_to_node = jtree_engine.clq_ass_to_node;
+engine.root = jtree_engine.root_clq;
+
+% Also create an engine just for slice 1
+bnet1 = mk_bnet(bnet.intra1, bnet.node_sizes_slice, 'discrete', myintersect(bnet.dnodes,1:ss), ...
+		'equiv_class', bnet.equiv_class(:,1), 'observed', onodes);
+for i=1:max(bnet1.equiv_class)
+  bnet1.CPD{i} = bnet.CPD{i};
+end
+engine.jtree_engine1 = jtree_inf_engine(bnet1, 'clusters', {int}, 'root', int);
+jtree_engine1 = struct(engine.jtree_engine1); % violate object privacy
+engine.int_clq1 = clq_containing_nodes(engine.jtree_engine1, int);
+engine.clq_ass_to_node1 = jtree_engine1.clq_ass_to_node;
+engine.root1 = jtree_engine1.root_clq;
+
+engine.observed = [onodes onodes+ss];
+engine.observed1 = onodes;
+engine.pot_type = determine_pot_type(bnet, onodes);
+engine.slice_size = bnet.nnodes_per_slice;
+
+engine = class(engine, 'jtree_2TBN_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/back.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function b = back(engine, bfuture, f, t)
+
+if f.t ~= t
+  error('mixed up time stamps')
+end
+if t==1
+  b = back1(engine, bfuture, f, t);
+  return;
+end
+
+bnet = bnet_from_engine(engine);
+ss = bnet.nnodes_per_slice;
+
+int = engine.interface;
+D = engine.in_clq;
+C = engine.out_clq;
+phiD = marginalize_pot(bfuture.clpot{D}, int, engine.maximize);
+phiD = set_domain_pot(phiD, int+ss); % shift to slice 2
+phiC = marginalize_pot(f.clpot{C}, int+ss, engine.maximize);
+ratio = divide_by_pot(phiD, phiC);
+f.clpot{C} = multiply_by_pot(f.clpot{C}, ratio);
+
+[b.clpot, seppot] = distribute_evidence(engine.jtree_engine, f.clpot, f.seppot);
+for c=1:length(b.clpot)
+  [b.clpot{c}, ll(c)] = normalize_pot(b.clpot{c});
+end
+b.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/back1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function b = back1(engine, bfuture, f, t)
+
+if t ~= 1
+  error('mixed up time stamps')
+end
+bnet = bnet_from_engine(engine);
+ss = bnet.nnodes_per_slice;
+
+int = engine.interface;
+D = engine.in_clq; % from J2
+C = engine.int_clq1; % from J1
+phiD = marginalize_pot(bfuture.clpot{D}, int, engine.maximize);
+phiC = marginalize_pot(f.clpot{C}, int, engine.maximize);
+ratio = divide_by_pot(phiD, phiC);
+f.clpot{C} = multiply_by_pot(f.clpot{C}, ratio);
+
+[b.clpot, seppot] = distribute_evidence(engine.jtree_engine1, f.clpot, f.seppot);
+for c=1:length(b.clpot)
+  [b.clpot{c}, ll(c)] = normalize_pot(b.clpot{c});
+end
+b.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/back1_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [b, mpe] = back1_mpe(engine, bfuture, f, ev1, t)
+
+if t ~= 1
+  error('mixed up time stamps')
+end
+bnet = bnet_from_engine(engine);
+ss = bnet.nnodes_per_slice;
+maximize = 1;
+
+int = engine.interface;
+D = engine.in_clq; % from J2
+C = engine.int_clq1; % from J1
+phiD = marginalize_pot(bfuture.clpot{D}, int, maximize);
+phiC = marginalize_pot(f.clpot{C}, int, maximize);
+ratio = divide_by_pot(phiD, phiC);
+f.clpot{C} = multiply_by_pot(f.clpot{C}, ratio);
+
+[mpe, b.clpot] = find_max_config(engine.jtree_engine1, f.clpot, f.seppot, ev1);
+for c=1:length(b.clpot)
+  [b.clpot{c}, ll(c)] = normalize_pot(b.clpot{c});
+end
+b.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/backT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function b = backT(engine, f, t)
+
+if t==1
+  [b.clpot, seppot] = distribute_evidence(engine.jtree_engine1, f.clpot, f.seppot);
+else
+  [b.clpot, seppot] = distribute_evidence(engine.jtree_engine, f.clpot, f.seppot);
+end
+for c=1:length(b.clpot)
+  [b.clpot{c}, ll(c)] = normalize_pot(b.clpot{c});
+end
+b.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/backT_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function [b, mpe] = backT_mpe(engine, f, ev2, t)
+
+bnet = bnet_from_engine(engine);
+ss = bnet.nnodes_per_slice;
+
+if t==1
+  % ev2 is just the evidence on slice 1
+  [mpe, b.clpot] = find_max_config(engine.jtree_engine1, f.clpot, f.seppot, ev2);
+else
+  [mpe, b.clpot] = find_max_config(engine.jtree_engine, f.clpot, f.seppot, ev2);
+  mpe = mpe((1:ss)+ss); % extract values for slice 2
+end
+for c=1:length(b.clpot)
+  [b.clpot{c}, ll(c)] = normalize_pot(b.clpot{c});
+end
+b.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/back_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function [b, mpe] = back_mpe(engine, bfuture, f, ev2, t)
+
+if f.t ~= t
+  error('mixed up time stamps')
+end
+if t==1
+  error('should call back1_mpe')
+end
+
+maximize = 1;
+bnet = bnet_from_engine(engine);
+ss = bnet.nnodes_per_slice;
+
+int = engine.interface;
+D = engine.in_clq;
+C = engine.out_clq;
+phiD = marginalize_pot(bfuture.clpot{D}, int, maximize);
+phiD = set_domain_pot(phiD, int+ss); % shift to slice 2
+phiC = marginalize_pot(f.clpot{C}, int+ss, maximize);
+ratio = divide_by_pot(phiD, phiC);
+f.clpot{C} = multiply_by_pot(f.clpot{C}, ratio);
+
+[mpe, b.clpot] = find_max_config(engine.jtree_engine, f.clpot, f.seppot, ev2);
+mpe = mpe((1:ss)+ss); % extract values for slice 2
+for c=1:length(b.clpot)
+  [b.clpot{c}, ll(c)] = normalize_pot(b.clpot{c});
+end
+b.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/fwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function [f, logscale] = fwd(engine, fpast, ev, t)
+% Forwards pass.
+
+bnet = bnet_from_engine(engine);
+ss = bnet.nnodes_per_slice;
+
+ev2 = cell(ss, 2);
+ev2(:,1) = fpast.evidence;
+ev2(:,2) = ev;
+
+CPDpot = cell(1,ss);
+for n=1:ss
+  fam = family(bnet.dag, n, 2);
+  e = bnet.equiv_class(n, 2);
+  CPDpot{n} = convert_to_pot(bnet.CPD{e}, engine.pot_type, fam(:), ev2);
+end       
+f.evidence = ev;
+f.t = t;
+
+% get prior
+int = engine.interface;
+if fpast.t==1
+  prior = marginalize_pot(fpast.clpot{engine.int_clq1}, int, engine.maximize);
+else
+  prior = marginalize_pot(fpast.clpot{engine.out_clq}, int+ss, engine.maximize);
+  prior = set_domain_pot(prior, int); % shift back to slice 1
+end
+
+pots = [ {prior} CPDpot ];
+slice1 = 1:ss;
+slice2 = slice1 + ss; 
+CPDclqs = engine.clq_ass_to_node(slice2);
+D = engine.in_clq;
+clqs = [D CPDclqs];
+
+[f.clpot, f.seppot] =  init_pot(engine.jtree_engine, clqs, pots, engine.pot_type, engine.observed);
+[f.clpot, f.seppot] = collect_evidence(engine.jtree_engine, f.clpot, f.seppot);
+for c=1:length(f.clpot)
+  [f.clpot{c}, ll(c)] = normalize_pot(f.clpot{c});
+end
+logscale = ll(engine.root);
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/fwd1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function [f, logscale] = fwd1(engine, ev, t)
+% Forwards pass for slice 1.
+
+bnet = bnet_from_engine(engine);
+ss = bnet.nnodes_per_slice;
+
+CPDpot = cell(1,ss);
+for n=1:ss
+  fam = family(bnet.dag, n, 1);
+  e = bnet.equiv_class(n, 1);
+  CPDpot{n} = convert_to_pot(bnet.CPD{e}, engine.pot_type, fam(:), ev);
+end       
+f.t = t;
+f.evidence = ev;
+
+pots = CPDpot;
+slice1 = 1:ss;
+CPDclqs = engine.clq_ass_to_node1(slice1);
+
+[f.clpot, f.seppot] =  init_pot(engine.jtree_engine1, CPDclqs, CPDpot, engine.pot_type, engine.observed1);
+[f.clpot, f.seppot] = collect_evidence(engine.jtree_engine1, f.clpot, f.seppot);
+for c=1:length(f.clpot)
+  [f.clpot{c}, ll(c)] = normalize_pot(f.clpot{c});
+end
+logscale = ll(engine.root1);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/jtree_2TBN_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,69 @@
+function engine = jtree_2TBN_inf_engine(bnet, varargin)
+% JTREE_ONLINE_INF_ENGINE Online Junction tree inference algorithm for DBNs.
+% engine = jtree_online_inf_engine(bnet, ...)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% clusters - specifies variables that must be grouped in the 1.5 slice DBN
+%
+% The same nodes must be observed in every slice.
+%
+% This uses the forwards interface of slice t-1 plus all of slice t.
+% By contrast, jtree_dbn uses all of slice t-1 plus the backwards interface of slice t.
+% See my thesis for details.
+
+
+clusters = {};
+
+args = varargin;
+nargs = length(args);
+for i=1:2:length(args)
+  switch args{i},
+   case 'clusters', clusters = args{i+1};
+   otherwise, error(['unrecognized argument ' args{i}])
+  end
+end
+
+engine.maximize = 0;
+engine.evidence = [];
+engine.node_sizes = [];
+
+int = compute_fwd_interface(bnet.intra, bnet.inter);
+engine.interface = int;
+ss = length(bnet.intra);
+engine.nonint = mysetdiff(1:ss, int);
+onodes = bnet.observed;
+
+bnet15 = mk_slice_and_half_dbn(bnet, int);
+
+% use unconstrained elimination,
+% but force there to be a clique containing both interfaces
+clusters(end+1:end+2) = {int, int+ss};
+engine.jtree_engine = jtree_inf_engine(bnet15, 'clusters', clusters, 'root', int+ss);
+jtree_engine = struct(engine.jtree_engine); % violate object privacy
+
+engine.in_clq = clq_containing_nodes(engine.jtree_engine, int);
+engine.out_clq = clq_containing_nodes(engine.jtree_engine, int+ss);
+engine.clq_ass_to_node = jtree_engine.clq_ass_to_node;
+engine.root = jtree_engine.root_clq;
+
+% Also create an engine just for slice 1
+bnet1 = mk_bnet(bnet.intra1, bnet.node_sizes_slice, 'discrete', myintersect(bnet.dnodes,1:ss), ...
+		'equiv_class', bnet.equiv_class(:,1), 'observed', onodes);
+for i=1:max(bnet1.equiv_class)
+  bnet1.CPD{i} = bnet.CPD{i};
+end
+engine.jtree_engine1 = jtree_inf_engine(bnet1, 'clusters', {int}, 'root', int);
+jtree_engine1 = struct(engine.jtree_engine1); % violate object privacy
+engine.int_clq1 = clq_containing_nodes(engine.jtree_engine1, int);
+engine.clq_ass_to_node1 = jtree_engine1.clq_ass_to_node;
+engine.root1 = jtree_engine1.root_clq;
+
+engine.observed = [onodes onodes+ss];
+engine.observed1 = onodes;
+engine.pot_type = determine_pot_type(bnet, onodes);
+engine.slice_size = bnet.nnodes_per_slice;
+
+engine = class(engine, 'jtree_2TBN_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function m = marginal_family(engine, b, i, t, add_ev)
+% MARGINAL_FAMILY Compute the marginal on the specified family (jtree_2TBN)
+% marginal = marginal_family(engine, b, i, t, add_ev)
+
+bnet = bnet_from_engine(engine);
+if t==1
+  m = marginal_nodes(engine, b, family(bnet.dag, i), t, add_ev, 1);
+else
+  ss = length(bnet.intra);
+  fam = family(bnet.dag, i+ss);
+  m = marginal_nodes(engine, b, fam, t, add_ev, 1);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function marginal = marginal_nodes(engine, b, nodes, t, add_ev, is_fam)
+% function marginal = marginal_nodes(engine, b, nodes, t, add_ev, is_fam) (jtree_2TBN)
+
+if nargin < 6, is_fam = 0; end
+ss = engine.slice_size;
+
+if ~is_fam & (t > 1) & all(nodes<=ss)
+  nodes = nodes + ss;
+end
+
+if t==1
+  c = clq_containing_nodes(engine.jtree_engine1, nodes, is_fam);
+else
+  c = clq_containing_nodes(engine.jtree_engine, nodes, is_fam);
+end
+if c == -1
+  error(['no clique contains ' nodes])
+end
+bigpot = b.clpot{c};
+pot = marginalize_pot(bigpot, nodes, engine.maximize);
+marginal = pot_to_marginal(pot);
+
+% we convert the domain to the unrolled numbering system
+% so that add_ev_to_dmarginal (maybe called in update_ess) extracts the right evidence.
+if t > 1
+  marginal.domain = nodes+(t-2)*engine.slice_size;
+end
+assert(~add_ev);
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_2TBN_inf_engine/set_fields.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function engine = set_fields(engine, varargin)
+% SET_FIELDS Set the fields for a generic engine
+% engine = set_fields(engine, name/value pairs)
+%
+% e.g., engine = set_fields(engine, 'maximize', 1)
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'maximize',
+     engine.maximize = args{i+1};
+     engine.jtree_engine = set_fields(engine.jtree_engine, 'maximize', args{i+1});
+     engine.jtree_engine1 = set_fields(engine.jtree_engine1, 'maximize', args{i+1});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+/back.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/back1.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/backT.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/fwd.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/fwd1.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/jtree_sparse_2TBN_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/online/@jtree_sparse_2TBN_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/back.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function b = back(engine, bfuture, f, t)
+
+if f.t ~= t
+  error('mixed up time stamps')
+end
+if t==1
+  b = back1(engine, bfuture, f, t);
+  return;
+end
+
+bnet = bnet_from_engine(engine);
+ss = bnet.nnodes_per_slice;
+
+int = engine.interface;
+D = engine.in_clq;
+C = engine.out_clq;
+phiD = marginalize_pot(bfuture.clpot{D}, int, engine.maximize);
+phiD = set_domain_pot(phiD, int+ss); % shift to slice 2
+phiC = marginalize_pot(f.clpot{C}, int+ss, engine.maximize);
+ratio = divide_by_pot(phiD, phiC);
+f.clpot{C} = multiply_by_pot(f.clpot{C}, ratio);
+
+[b.clpot, seppot] = distribute_evidence(engine.jtree_engine, f.clpot, f.seppot);
+for c=1:length(b.clpot)
+  [b.clpot{c}, ll(c)] = normalize_pot(b.clpot{c});
+end
+b.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/back1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function b = back1(engine, bfuture, f, t)
+
+if t ~= 1
+  error('mixed up time stamps')
+end
+bnet = bnet_from_engine(engine);
+ss = bnet.nnodes_per_slice;
+
+int = engine.interface;
+D = engine.in_clq; % from J2
+C = engine.int_clq1; % from J1
+phiD = marginalize_pot(bfuture.clpot{D}, int, engine.maximize);
+phiC = marginalize_pot(f.clpot{C}, int, engine.maximize);
+ratio = divide_by_pot(phiD, phiC);
+f.clpot{C} = multiply_by_pot(f.clpot{C}, ratio);
+
+[b.clpot, seppot] = distribute_evidence(engine.jtree_engine1, f.clpot, f.seppot);
+for c=1:length(b.clpot)
+  [b.clpot{c}, ll(c)] = normalize_pot(b.clpot{c});
+end
+b.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/backT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function b = backT(engine, f, t)
+
+if t==1
+  [b.clpot, seppot] = distribute_evidence(engine.jtree_engine1, f.clpot, f.seppot);
+else
+  [b.clpot, seppot] = distribute_evidence(engine.jtree_engine, f.clpot, f.seppot);
+end
+for c=1:length(b.clpot)
+  [b.clpot{c}, ll(c)] = normalize_pot(b.clpot{c});
+end
+b.t = t;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (jtree_online)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product instead of sum-product [0]
+%
+
+engine.maximize = 0;
+args = varargin;
+for i=1:2:length(args)
+  switch args{i}
+   case 'maximize', engine.maximize = args{i+1};
+   otherwise, error(['unrecognized argument ' args{i}])
+  end
+end
+
+[engine, loglik] = offline_smoother(engine, evidence);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/fwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+function [f, logscale] = fwd(engine, fpast, ev, t)
+% Forwards pass.
+
+bnet = bnet_from_engine(engine);
+ss = bnet.nnodes_per_slice;
+
+ev2 = cell(ss, 2);
+ev2(:,1) = fpast.evidence;
+ev2(:,2) = ev;
+CPDpot = cell(1,ss);
+for n=1:ss
+  fam = family(bnet.dag, n, 2);
+  e = bnet.equiv_class(n, 2);
+  CPDpot{n} = convert_to_pot(bnet.CPD{e}, engine.pot_type, fam(:), ev2);
+end       
+f.evidence = ev;
+f.t = t;
+
+% get prior
+int = engine.interface;
+if fpast.t==1
+  prior = marginalize_pot(fpast.clpot{engine.int_clq1}, int, engine.maximize);
+else
+  prior = marginalize_pot(fpast.clpot{engine.out_clq}, int+ss, engine.maximize);
+  prior = set_domain_pot(prior, int); % shift back to slice 1
+end
+
+pots = [ {prior} CPDpot ];
+slice1 = 1:ss;
+slice2 = slice1 + ss; 
+CPDclqs = engine.clq_ass_to_node(slice2);
+D = engine.in_clq;
+clqs = [D CPDclqs];
+
+[f.clpot, f.seppot] =  init_pot(engine.jtree_engine, clqs, pots, engine.pot_type, engine.observed);
+[f.clpot, f.seppot] = collect_evidence(engine.jtree_engine, f.clpot, f.seppot);
+for c=1:length(f.clpot)
+  if isa(f.clpot{c}, 'struct')
+     domain = f.clpot{c}.domain;
+     sizes = f.clpot{c}.sizes;
+     T = f.clpot{c}.T;
+     f.clpot{c} = dpot(domain, sizes, T);
+  end
+  [f.clpot{c}, ll(c)] = normalize_pot(f.clpot{c});
+end
+logscale = ll(engine.root);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/fwd1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function [f, logscale] = fwd1(engine, ev, t)
+% Forwards pass for slice 1.
+
+bnet = bnet_from_engine(engine);
+ss = bnet.nnodes_per_slice;
+
+CPDpot = cell(1,ss);
+for n=1:ss
+  fam = family(bnet.dag, n, 1);
+  e = bnet.equiv_class(n, 1);
+  CPDpot{n} = convert_to_pot(bnet.CPD{e}, engine.pot_type, fam(:), ev);
+end       
+f.evidence = ev;
+f.t = t;
+
+pots = CPDpot;
+slice1 = 1:ss;
+CPDclqs = engine.clq_ass_to_node1(slice1);
+
+[f.clpot, f.seppot] =  init_pot(engine.jtree_engine1, CPDclqs, CPDpot, engine.pot_type, engine.observed1);
+[f.clpot, f.seppot] = collect_evidence(engine.jtree_engine1, f.clpot, f.seppot);
+for c=1:length(f.clpot)
+  if isa(f.clpot{c}, 'struct')
+     domain = f.clpot{c}.domain;
+     sizes = f.clpot{c}.sizes;
+     T = f.clpot{c}.T;
+     f.clpot{c} = dpot(domain, sizes, T);
+  end
+  [f.clpot{c}, ll(c)] = normalize_pot(f.clpot{c});
+end
+logscale = ll(engine.root1);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/jtree_sparse_2TBN_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,95 @@
+function engine = jtree_sparse_2TBN_inf_engine(bnet, varargin)
+% JTREE_ONLINE_INF_ENGINE Online Junction tree inference algorithm for DBNs.
+% engine = jtree_online_inf_engine(bnet, ...)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% clusters - specifies variables that must be grouped in the 1.5 slice DBN
+% maximize - 1 means do max-product, 0 means sum-product [0]
+%
+% The same nodes must be observed in every slice.
+
+ss = length(bnet.intra);
+clusters = {};
+engine.maximize = 0;
+
+args = varargin;
+nargs = length(args);
+for i=1:2:length(args)
+  switch args{i},
+   case 'clusters', clusters = args{i+1};
+   case 'maximize', engine.maximize = args{i+1};
+   otherwise, error(['unrecognized argument ' args{i}])
+  end
+end
+
+engine.evidence = [];
+engine.node_sizes = [];
+
+int = [];
+% include nodes with any outgoing arcs
+for u=1:ss
+  if any(bnet.inter(u,:))
+    int = [int u];
+  end
+end
+
+engine.interface = int;
+engine.nonint = mysetdiff(1:ss, int);
+
+onodes = bnet.observed;
+
+% Create a "1.5 slice" jtree, containing the interface nodes of slice 1
+% and all the nodes of slice 2
+% To keep the node numbering the same, we simply disconnect the non-interface nodes
+% from slice 1, and set their size to 1.
+% We do this to speed things up, and so that the likelihood is computed correctly - we do not need to do
+% this if we just want to compute marginals (i.e., we can include nodes whose potentials will
+% be left as all 1s).
+intra15 = bnet.intra;
+for i=engine.nonint(:)'
+  intra15(:,i) = 0;
+  intra15(i,:) = 0;
+  assert(~any(bnet.inter(i,:)))
+end
+dag15 = [intra15      bnet.inter;
+	 zeros(ss)    bnet.intra];
+ns = bnet.node_sizes(:);
+ns(engine.nonint) = 1; % disconnected nodes get size 1
+obs_nodes = [onodes(:) onodes(:)+ss];
+bnet15 = mk_bnet(dag15, ns, 'discrete', bnet.dnodes, 'equiv_class', bnet.equiv_class(:), ...
+		 'observed', obs_nodes(:));
+
+% use unconstrained elimination,
+% but force there to be a clique containing both interfaces
+clusters(end+1:end+2) = {int, int+ss};
+%engine.jtree_engine = jtree_inf_engine(bnet15, 'clusters', clusters, 'root', int+ss);
+engine.jtree_engine = jtree_sparse_inf_engine(bnet15, 'clusters', clusters, 'root', int+ss);
+jtree_engine = struct(engine.jtree_engine); % violate object privacy
+
+engine.in_clq = clq_containing_nodes(engine.jtree_engine, int);
+engine.out_clq = clq_containing_nodes(engine.jtree_engine, int+ss);
+engine.clq_ass_to_node = jtree_engine.clq_ass_to_node;
+engine.root = jtree_engine.root_clq;
+
+% Also create an engine just for slice 1
+bnet1 = mk_bnet(bnet.intra1, bnet.node_sizes_slice, 'discrete', myintersect(bnet.dnodes,1:ss), ...
+		'equiv_class', bnet.equiv_class(:,1), 'observed', onodes);
+for i=1:max(bnet1.equiv_class)
+  bnet1.CPD{i} = bnet.CPD{i};
+end
+%engine.jtree_engine1 = jtree_inf_engine(bnet1, 'clusters', {int}, 'root', int);
+engine.jtree_engine1 = jtree_sparse_inf_engine(bnet1, 'clusters', {int}, 'root', int);
+jtree_engine1 = struct(engine.jtree_engine1); % violate object privacy
+engine.int_clq1 = clq_containing_nodes(engine.jtree_engine1, int);
+engine.clq_ass_to_node1 = jtree_engine1.clq_ass_to_node;
+engine.root1 = jtree_engine1.root_clq;
+
+engine.observed = [onodes onodes+ss];
+engine.observed1 = onodes;
+engine.pot_type = determine_pot_type(bnet, onodes);
+engine.slice_size = bnet.nnodes_per_slice;
+
+engine = class(engine, 'jtree_sparse_2TBN_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function m = marginal_family(engine, b, i, t, add_ev)
+% MARGINAL_FAMILY Compute the marginal on the specified family (jtree_2TBN)
+% marginal = marginal_family(engine, b, i, t, add_ev)
+
+bnet = bnet_from_engine(engine);
+if t==1
+  m = marginal_nodes(engine, b, family(bnet.dag, i), t, add_ev, 1);
+else
+  ss = length(bnet.intra);
+  fam = family(bnet.dag, i+ss);
+  m = marginal_nodes(engine, b, fam, t, add_ev, 1);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function marginal = marginal_nodes(engine, b, nodes, t, add_ev, is_fam)
+% function marginal = marginal_nodes(engine, b, nodes, t, add_ev, is_fam) (jtree_2TBN)
+
+if nargin < 6, is_fam = 0; end
+ss = engine.slice_size;
+
+if ~is_fam & (t > 1) & all(nodes<=ss)
+  nodes = nodes + ss;
+end
+
+if t==1
+  c = clq_containing_nodes(engine.jtree_engine1, nodes, is_fam);
+else
+  c = clq_containing_nodes(engine.jtree_engine, nodes, is_fam);
+end
+if c == -1
+  error(['no clique contains ' nodes])
+end
+bigpot = b.clpot{c};
+pot = marginalize_pot(bigpot, nodes, engine.maximize);
+marginal = pot_to_marginal(pot);
+
+% we convert the domain to the unrolled numbering system
+% so that add_ev_to_dmarginal (maybe called in update_ess) extracts the right evidence.
+if t > 1
+  marginal.domain = nodes+(t-2)*engine.slice_size;
+end
+assert(~add_ev);
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+/bnet_from_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence.m/1.1.1.1/Mon Jun 17 23:46:46 2002//
+/find_mpe.m/1.1.1.1/Mon Jun 17 23:50:16 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/smoother_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/update_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/online/@smoother_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/bnet_from_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function bnet = bnet_from_engine(engine)
+% BNET_FROM_ENGINE Return the bnet structure stored inside the engine (smoother_engine)
+% bnet = bnet_from_engine(engine)
+
+bnet = bnet_from_engine(engine.tbn_engine);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function [engine, LL] = enter_evidence(engine, ev)
+% ENTER_EVIDENCE Call the offline smoother
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+
+T = size(ev, 2);
+f = cell(1,T);
+b = cell(1,T); % b{t}.clpot{c}
+ll = zeros(1,T);
+[f{1}, ll(1)] = fwd1(engine.tbn_engine, ev(:,1), 1);
+for t=2:T
+  [f{t}, ll(t)] = fwd(engine.tbn_engine, f{t-1}, ev(:,t), t);
+end
+LL = sum(ll);
+b{T} = backT(engine.tbn_engine, f{T}, T);
+for t=T-1:-1:1
+  b{t} = back(engine.tbn_engine, b{t+1}, f{t}, t);
+end
+engine.b = b;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/find_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+function mpe = find_mpe(engine, ev)
+% FIND_MPE Find the most probable explanation (Viterbi)
+% mpe = enter_evidence(engine, evidence, ...)
+%
+% evidence{i,t} = [] if if X(i,t) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+
+mpe = cell(size(ev));
+engine.tbn_engine = set_fields(engine.tbn_engine, 'maximize', 1);
+
+T = size(ev, 2);
+f = cell(1,T);
+b = cell(1,T); % b{t}.clpot{c}
+ll = zeros(1,T);
+[f{1}, ll(1)] = fwd1(engine.tbn_engine, ev(:,1), 1);
+for t=2:T
+  [f{t}, ll(t)] = fwd(engine.tbn_engine, f{t-1}, ev(:,t), t);
+end
+
+if T==1
+  [b{1}, mpe(:,1)] = backT_mpe(engine.tbn_engine, f{1}, ev(:,1), 1);
+else
+  [b{T}, mpe(:,T)] = backT_mpe(engine.tbn_engine, f{T}, ev(:,T-1:T), T);
+  for t=T-1:-1:2
+    [b{t}, mpe(:,t)] = back_mpe(engine.tbn_engine, b{t+1}, f{t}, ev(:,t-1:t), t);
+  end
+  t = 1;
+  [b{t}, mpe(:,t)] = back1_mpe(engine.tbn_engine, b{t+1}, f{t}, ev(:,1), t);
+end
+engine.b = b;
+  
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function marginal = marginal_family(engine, i, t, add_ev)
+% MARGINAL_FAMILY Compute the joint distribution on a set of family (smoother_engine)
+% function marginal = marginal_family(engine, i, t, add_ev)
+
+if nargin < 4, add_ev = 0; end
+marginal = marginal_family(engine.tbn_engine, engine.b{t}, i, t, add_ev);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function marginal = marginal_nodes(engine, nodes, t, add_ev)
+% MARGINAL_NODES Compute the joint distribution on a set of nodes (smoother_engine)
+% function marginal = marginal_nodes(engine, nodes, t, add_ev)
+
+if nargin < 4, add_ev = 0; end
+
+marginal = marginal_nodes(engine.tbn_engine, engine.b{t}, nodes, t, add_ev);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/smoother_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function engine = smoother_engine(tbn_engine)
+% SMOOTHER_ENGINE Create an engine which does offline (fixed-interval) smoothing in O(T) space/time
+% function engine = smoother_engine(tbn_engine)
+%
+% tbn_engine is any 2TBN inference engine which supports the following methods:
+% fwd, fwd1, back, backT, back, marginal_nodes and marginal_family.
+
+engine.tbn_engine = tbn_engine;
+engine.b = []; % space to store smoothed messages
+engine = class(engine, 'smoother_engine');
+%engine = class(engine, 'smoother_engine', inf_engine(bnet_from_engine(tbn_engine)));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/@smoother_engine/update_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function engine = update_engine(engine, newCPDs)
+% UPDATE_ENGINE Update the engine to take into account the new parameters (smoother_engine).
+% engine = update_engine(engine, newCPDs)
+
+engine.tbn_engine = update_engine(engine.tbn_engine, newCPDs);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/dummy/1.1.1.1/Sat Jan 18 22:22:38 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+A D/@filter_engine////
+A D/@hmm_2TBN_inf_engine////
+A D/@jtree_2TBN_inf_engine////
+A D/@jtree_sparse_2TBN_inf_engine////
+A D/@smoother_engine////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/online
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/online/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/belprop_fg_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/find_mpe.m/1.1.1.1/Thu Jun 20 00:02:12 2002//
+/loopy_converged.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/set_params.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@belprop_fg_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/belprop_fg_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+function engine = belprop_fg_inf_engine(fg, varargin) 
+% BELPROP_FG_INF_ENGINE Make a belief propagation inference engine for factor graphs
+% engine = belprop_fg_inf_engine(factor_graph, ...)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default in brackets]
+% e.g., engine = belprop_inf_engine(fg, 'tol', 1e-2, 'max_iter', 10)
+%
+% max_iter - max. num. iterations [ 2*num_nodes ]
+% momentum - weight assigned to old message in convex combination (useful for damping oscillations) [0]
+% tol - tolerance used to assess convergence [1e-3]
+% maximize - 1 means use max-product, 0 means use sum-product [0]
+%
+% This uses potential objects, like belprop_inf_engine, and hence is quite slow.
+
+engine = init_fields;
+engine = class(engine, 'belprop_fg_inf_engine');
+
+% set params to default values
+N = length(fg.G);
+engine.max_iter = 2*N;
+engine.momentum = 0;
+engine.tol = 1e-3;
+engine.maximize = 0;
+
+% parse optional arguments
+engine = set_params(engine, varargin);
+
+engine.fgraph = fg;
+
+% store results computed by enter_evidence here
+engine.marginal_nodes = cell(1, fg.nvars);
+engine.evidence = [];
+
+
+%%%%%%%%%%%%
+
+function engine = init_fields()
+
+engine.fgraph = [];
+engine.max_iter = [];
+engine.momentum = [];
+engine.tol = [];
+engine.maximize = [];
+engine.marginal_nodes = [];
+engine.evidence = [];
+engine.niter = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,126 @@
+function [engine, ll, niter] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Propagate evidence using belief propagation
+% [engine, ll, niter] = enter_evidence(engine, evidence, ...)
+%
+% The log-likelihood is not computed; ll = 0.
+% niter contains the number of iterations used 
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - 1 means use max-product, 0 means use sum-product [0]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+ll = 0;
+maximize = 0;
+
+if nargin >= 3
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1};
+     otherwise,
+      error(['invalid argument name ' args{i}]);
+    end
+  end
+end
+
+verbose = 0;
+
+ns = engine.fgraph.node_sizes;
+onodes = find(~isemptycell(evidence));
+hnodes = find(isemptycell(evidence));
+cnodes = engine.fgraph.cnodes;
+pot_type = determine_pot_type(engine.fgraph, onodes);
+
+% prime each local kernel with evidence (if any)
+nfactors = engine.fgraph.nfactors;
+nvars = engine.fgraph.nvars;
+factors = cell(1,nfactors);
+for f=1:nfactors
+  K = engine.fgraph.factors{engine.fgraph.equiv_class(f)};
+  factors{f} = convert_to_pot(K, pot_type, engine.fgraph.dom{f}(:), evidence);
+end
+  
+% initialise msgs
+msg_var_to_fac = cell(nvars, nfactors);
+for x=1:nvars
+  for f=engine.fgraph.dep{x}
+    msg_var_to_fac{x,f} = mk_initial_pot(pot_type, x, ns, cnodes, onodes);
+  end
+end
+msg_fac_to_var = cell(nfactors, nvars);
+dom = cell(1, nfactors);
+for f=1:nfactors
+  %hdom{f} = myintersect(engine.fgraph.dom{f}, hnodes);
+  dom{f} = engine.fgraph.dom{f}(:)';
+  for x=dom{f}
+    msg_fac_to_var{f,x} = mk_initial_pot(pot_type, x, ns, cnodes, onodes);
+    %msg_fac_to_var{f,x} = marginalize_pot(factors{f}, x);
+  end
+end
+
+
+
+converged = 0;
+iter = 1;
+var_prod = cell(1, nvars);
+fac_prod = cell(1, nfactors);
+
+while ~converged & (iter <= engine.max_iter)
+  if verbose, fprintf('iter %d\n', iter);  end
+  
+  % absorb
+  old_var_prod = var_prod;
+  for x=1:nvars
+    var_prod{x} = mk_initial_pot(pot_type, x, ns, cnodes, onodes);
+    for f=engine.fgraph.dep{x}
+      var_prod{x} = multiply_by_pot(var_prod{x}, msg_fac_to_var{f,x});
+    end
+  end
+  for f=1:nfactors
+    fac_prod{f} = mk_initial_pot(pot_type, dom{f}, ns, cnodes, onodes);
+    for x=dom{f}
+      fac_prod{f} = multiply_by_pot(fac_prod{f}, msg_var_to_fac{x,f});
+    end
+  end
+
+  % send msgs to neighbors
+  old_msg_var_to_fac = msg_var_to_fac;
+  old_msg_fac_to_var = msg_fac_to_var;
+  converged = 1;
+  for x=1:nvars
+    %if verbose, disp(['var ' num2str(x) ' sending to fac ' num2str(engine.fgraph.dep{x})]); end
+    for f=engine.fgraph.dep{x}
+      temp = divide_by_pot(var_prod{x}, old_msg_fac_to_var{f,x});
+      msg_var_to_fac{x,f} = normalize_pot(temp);
+      if ~approxeq_pot(msg_var_to_fac{x,f}, old_msg_var_to_fac{x,f}, engine.tol), converged = 0; end
+    end
+  end
+  for f=1:nfactors
+    %if verbose, disp(['fac ' num2str(f) ' sending to var ' num2str(dom{f})]); end
+    for x=dom{f}
+      temp = divide_by_pot(fac_prod{f}, old_msg_var_to_fac{x,f});
+      temp2 = multiply_by_pot(factors{f}, temp);
+      temp3 = marginalize_pot(temp2, x, maximize);
+      msg_fac_to_var{f,x} = normalize_pot(temp3);
+      if ~approxeq_pot(msg_fac_to_var{f,x}, old_msg_fac_to_var{f,x}, engine.tol), converged = 0; end
+    end
+  end
+
+  if iter==1
+    converged = 0;
+  end
+  iter = iter + 1;
+end
+
+niter = iter - 1;
+engine.niter = niter;
+
+for x=1:nvars
+  engine.marginal_nodes{x} = normalize_pot(var_prod{x});
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/find_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function mpe = find_mpe(engine, evidence, varargin)
+% FIND_MPE Find the most probable explanation of the data  (belprop_fg)
+% function mpe = find_mpe(engine, evidence,...)
+%
+% evidence{i} = [] if X(i) is hidden, and otherwise contains its observed value (scalar or column vector).
+%
+% This finds the marginally most likely value for each hidden node,
+% and may give the wrong results even if the graph is acyclic,
+% unless you set break_ties = 1.
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% break_ties is optional. If 1, we will force ties to be broken consistently
+%  by calling enter_evidence N times. (see Jensen96, p106) Default = 1.
+
+break_ties = 1;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'break_ties',    break_ties = args{i+1}; 
+   otherwise,  
+    error(['invalid argument name ' args{i}]);       
+  end
+end
+
+engine = enter_evidence(engine, evidence, 'maximize', 1);
+
+observed = ~isemptycell(evidence);
+evidence = evidence(:); % hack to handle unrolled DBNs
+N = length(evidence);
+mpe = cell(1,N);
+for i=1:N
+  m = marginal_nodes(engine, i);
+  % observed nodes are all set to 1 inside the inference engine, so we must undo this
+  if observed(i)
+    mpe{i} = evidence{i};
+  else
+    mpe{i} = argmax(m.T);
+    if break_ties
+      evidence{i} = mpe{i};                             
+      [engine, ll] = enter_evidence(engine, evidence, 'maximize', 1);  
+    end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/loopy_converged.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function niter = loopy_converged(engine)
+% LOOPY_CONVERGED Did loopy belief propagation converge? 0 means no, eles we return the num. iterations.
+% function niter = loopy_converged(engine)
+%
+% We use a simple heuristic: we say convergence occurred if the number of iterations
+% used was less than the maximum allowed.
+
+if engine.niter == engine.max_iter
+  niter = 0;
+else
+  niter = engine.niter;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function marginal = marginal_nodes(engine, query)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (belprop)
+% marginal = marginal_nodes(engine, query)
+
+assert(length(query)==1);
+marginal = pot_to_marginal(engine.marginal_nodes{query});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_fg_inf_engine/set_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function engine = set_params(engine, varargin)
+% SET_PARAMS Set the parameters (fields) for a belprop_inf_engine object
+% engine = set_params(engine, name/value pairs)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% e.g., engine = set_params(engine, 'tol', 1e-2, 'max_iter', 10)
+%
+% max_iter - max. num. loopy iterations 
+% momentum - weight assigned to old message in convex combination 
+% tol - tolerance used to assess convergence 
+% maximize - 1 means use max-product, 0 means use sum-product
+
+args = varargin{1};
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'max_iter', engine.max_iter = args{i+1};
+   case 'momentum', engine.momentum = args{i+1};
+   case 'tol',      engine.tol = args{i+1};
+   case 'maximize', engine.maximize = args{i+1};
+   otherwise,
+    error(['invalid argument name ' args{i}]);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/belprop_inf_engine.m/1.1.1.1/Tue Dec 31 19:00:06 2002//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/find_mpe.m/1.1.1.1/Wed Jun 19 22:08:40 2002//
+/loopy_converged.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+A D/Old////
+A D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@belprop_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/belprop_gdl_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/belprop_inf_engine_nostr.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence1.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_domain.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@belprop_inf_engine/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/belprop_gdl_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+function engine = belprop_gdl_inf_engine(gdl, varargin) 
+% BELPROP_GDL_INF_ENGINE Make a belief propagation inference engine for a GDL graph
+% engine = belprop_gdl_inf_engine(gdl_graph, ...)
+%
+% If the GDL graph is a tree, this will give exact results.
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default in brackets]
+% e.g., engine = belprop_inf_engine(gdl, 'tol', 1e-2, 'max_iter', 10)
+%
+% protocol - 'tree' means send messages up then down the tree,
+%            'parallel' means use synchronous updates ['parallel']
+% max_iter - max. num. iterations [ 2*num_nodes ]
+% momentum - weight assigned to old message in convex combination (useful for damping oscillations) [0]
+% tol - tolerance used to assess convergence [1e-3]
+% maximize - 1 means use max-product, 0 means use sum-product [0]
+
+
+engine = init_fields;
+engine = class(engine, 'belprop_gdl_inf_engine');
+
+% set default params
+N = length(gdl.G);
+engine.protocol = 'parallel';
+engine.max_iter = 2*N;
+engine.momentum = 0;
+engine.tol = 1e-3;
+engine.maximize = 0;
+
+engine = set_params(engine, varargin);
+
+engine.gdl = gdl;
+
+if strcmp(engine.protocol, 'tree')
+  % Make a rooted tree, so there is a fixed message passing order.
+  root = N;
+  [engine.tree, engine.preorder, engine.postorder, height, cyclic] = mk_rooted_tree(gdl.G, root);
+  assert(~cyclic);
+end
+
+% store results computed by enter_evidence here
+ndoms = length(gdl.doms);
+nvars = length(gdl.vars);
+engine.marginal_domains = cell(1, ndoms);
+
+% to compute the marginal on each variable, we need to know which domain to marginalize
+% and we want to choose the lightest. We compute the weight once we have seen the evidence.
+engine.dom_weight = [];
+engine.evidence = [];
+
+
+%%%%%%%%%
+
+function engine = init_fields()
+
+engine.protocol = [];
+engine.gdl = [];
+engine.max_iter = [];
+engine.momentum = [];
+engine.tol = [];
+engine.maximize = [];
+engine.marginal_domains = [];
+engine.evidence = [];
+engine.tree = [];
+engine.preorder = [];
+engine.postorder = [];
+engine.dom_weight = [];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/belprop_inf_engine_nostr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function engine = belprop_inf_engine(fg, max_iter, momentum, tol, maximize)
+
+if nargin < 2, max_iter = length(fg.G); end
+if nargin < 3, momentum = 0; end
+if nargin < 4, tol = 1e-3; end
+if nargin < 5, maximize = 0; end
+
+engine.fgraph = fg;
+engine.max_iter = max_iter;
+engine.momentum = momentum;
+engine.tol = tol;
+engine.maximize = maximize;
+
+% store results computed by enter_evidence here
+ndoms = length(fg.doms);
+nvars = length(fg.vars);
+engine.marginal_domains = cell(1, ndoms);
+
+% to compute the marginal on each variable, we need to know which domain to marginalize
+% so we represent each domain as a bit vector, and compute its (pre-evidence) weight
+engine.dom_weight = [];
+
+% engine.dom_bitv = sparse(ndoms, nvars);
+% ns = fg.node_sizes;
+% for i=1:ndoms
+%   engine.dom_bitv(i, fg.doms{i}) = 1;
+%   engine.dom_weight(i) = prod(ns(fg.doms{i}));
+% end
+
+
+engine = class(engine, 'belprop_inf_engine');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+function engine = enter_evidence(engine, evidence)
+
+doms = engine.fg.doms;
+ndoms = length(doms);
+ns = engine.fg.node_sizes;
+obs = find(~isemptycell(evidence));
+cobs = myintersect(obs, engine.fg.cnodes);
+dobs = myintersect(obs, engine.fg.dnodes);
+ns(cobs) = 0;
+ns(dobs) = 1;
+
+% prime each local kernel with evidence (if any)
+local_kernel = cell(1, ndoms);
+for i=1:length(engine.fg.kernels_of_type)
+  u = engine.fg.kernels_of_type{i};
+  local_kernel(u) = kernel_to_dpots(engine.fg.kernels{i}, evidence, engine.fg.domains_of_type{i});
+end
+  
+% initialise all msgs to 1s
+nedges = engine.fg.nedges;
+msg = cell(1, nedges);
+for i=1:nedges
+  msg{i} = dpot(engine.fg.sepset{i}, ns(engine.fg.sepset{i}));
+end
+
+prod_of_msg = cell(1, ndoms);
+bel = cell(1, ndoms);
+old_bel = cell(1, ndoms);
+
+converged = 0;
+iter = 1;
+while ~converged & (iter <= engine.max_iter)
+  
+  % each node multiplies all its incoming msgs
+  for i=1:ndoms
+    prod_of_msg{i} = dpot(doms{i}, ns(doms{i}));
+    nbrs = engine.fg.nbrs{i};
+    for j=1:length(nbrs)
+      ndx = engine.fg.edge_ndx(j,i);
+      prod_of_msg{i} = multiply_by_pot(prod_of_msg{i}, msg{ndx});
+    end
+  end
+  old_msg = msg;
+  
+  % each node computes its local belief
+  for i=1:ndoms
+    bel{i} = normalize_pot(multiply_pots(prod_of_msg{i}, local_kernel{i}));
+  end
+
+  % converged?
+  converged = 1;
+  for i=1:ndoms
+    if ~approxeq(bel{i}, old_bel{i}, engine.tol)
+      converged = 0;
+      break;
+    end
+  end
+
+  if ~converged
+    % each node sends a msg to each of its neighbors
+    for i=1:ndoms
+      nbrs = engine.fg.nbrs{i};
+      for j=1:length(nbrs)
+	% multiply all incoming msgs except from j
+	temp = prod_of_msg{i};
+	ndx = engine.fg.edge_ndx(j,i);
+	temp = divide_by_pot(temp, old_msg{ndx});
+	% send msg from i to j
+	temp = multiply_by_pot(temp, local_kernel{i});
+	ndx = engine.fg.edge_ndx(i,j);
+	msg{ndx} = normalize_pot(marginalize_pot(temp, engine.fg.sepset{ndx}));
+      end
+    end
+  end
+
+  iter = iter + 1;
+end
+
+  
+engine.marginal = bel;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/enter_evidence1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,94 @@
+function engine = enter_evidence(engine, evidence)
+
+doms = engine.fgraph.doms;
+ndoms = length(doms);
+ns = engine.fgraph.node_sizes;
+obs = find(~isemptycell(evidence));
+cobs = myintersect(obs, engine.fgraph.cnodes);
+dobs = myintersect(obs, engine.fgraph.dnodes);
+ns(cobs) = 0;
+ns(dobs) = 1;
+
+% recompute the weight of each domain now that we know what nodes are observed
+for i=1:ndoms
+  engine.dom_weight(i) = prod(ns(engine.fgraph.doms{i}));
+end
+
+% prime each local kernel with evidence (if any)
+local_kernel = cell(1, ndoms);
+for i=1:length(engine.fgraph.kernels_of_type)
+  u = engine.fgraph.kernels_of_type{i};
+  local_kernel(u) = kernel_to_dpots(engine.fgraph.kernels{i}, evidence, engine.fgraph.domains_of_type{i});
+end
+  
+% initialise all msgs to 1s
+msg = cell(ndoms, ndoms);
+for i=1:ndoms
+  nbrs = engine.fgraph.nbrs{i};
+  for j=nbrs(:)'
+    dom = engine.fgraph.sepset{i,j};
+    msg{i,j} = dpot(dom, ns(dom));
+  end
+end
+
+prod_of_msg = cell(1, ndoms);
+bel = cell(1, ndoms);
+old_bel = cell(1, ndoms);
+
+converged = 0;
+iter = 1;
+while ~converged & (iter <= engine.max_iter)
+  
+  % each node multiplies all its incoming msgs
+  for i=1:ndoms
+    prod_of_msg{i} = dpot(doms{i}, ns(doms{i}));
+    nbrs = engine.fgraph.nbrs{i};
+    for j=nbrs(:)'
+      prod_of_msg{i} = multiply_by_pot(prod_of_msg{i}, msg{j,i});
+    end
+  end
+  
+  % each node computes its local belief
+  old_bel = bel;
+  for i=1:ndoms
+    bel{i} = normalize_pot(multiply_pots(prod_of_msg{i}, local_kernel{i}));
+  end
+
+  % converged?
+  if iter==1
+    converged = 0;
+  else
+    converged = 1;
+    for i=1:ndoms
+      belT = get_params(bel{i}, 'table');
+      old_belT = get_params(old_bel{i}, 'table');
+      if ~approxeq(belT, old_belT, engine.tol)
+	converged = 0;
+	break;
+      end
+    end
+  end
+
+  if ~converged
+    old_msg = msg;
+    % each node sends a msg to each of its neighbors
+    for i=1:ndoms
+      nbrs = engine.fgraph.nbrs{i};
+      for j=nbrs(:)'
+	% multiply all incoming msgs except from j
+	temp = prod_of_msg{i};
+	temp = divide_by_pot(temp, old_msg{j,i});
+	% send msg from i to j
+	temp = multiply_by_pot(temp, local_kernel{i});
+	msg{i,j} = normalize_pot(marginalize_pot(temp, engine.fgraph.sepset{i,j}));
+      end
+    end
+  end
+
+  iter = iter + 1
+end
+
+engine.marginal_domains = bel;
+%for i=1:ndoms  
+  %engine.marginal_domains{i} = get_params(bel{i}, 'table');
+%end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/Old/marginal_domain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function marginal = marginal_domain(engine, i)
+% MARGINAL_DOMAIN Return the marginal on the specified domain (belprop)
+% marginal = marginal_domain(engine, i)
+
+marginal = pot_to_marginal(engine.marginal_domains{i});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/belprop_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,90 @@
+function engine = belprop_inf_engine(bnet, varargin) 
+% BELPROP_INF_ENGINE Make a loopy belief propagation inference engine
+% engine = belprop_inf_engine(bnet, ...)
+%
+% This is like pearl_inf_engine, except it uses potential objects,
+% instead of lambda/pi structs. Hence it is slower.
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default in brackets]
+%
+% protocol - 'tree' means send messages up then down the tree,
+%            'parallel' means use synchronous updates ['parallel']
+% max_iter - max. num. iterations [ 2*num_nodes ]
+% momentum - weight assigned to old message in convex combination (useful for damping oscillations) [0]
+% tol      - tolerance used to assess convergence [1e-3]
+% maximize - 1 means use max-product, 0 means use sum-product [0]
+% filename - name of file to write beliefs to after each iteration within enter_evidence [ [] ]
+%
+% e.g., engine = belprop_inf_engine(bnet, 'maximize', 1, 'max_iter', 10)
+
+% gdl = general distributive law
+engine.gdl = bnet_to_gdl(bnet);
+
+% set default params
+N = length(engine.gdl.G);
+engine.protocol = 'parallel';
+engine.max_iter = 2*N;
+engine.momentum = 0;
+engine.tol = 1e-3;
+engine.maximize = 0;
+engine.filename = [];
+engine.fid = [];
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'max_iter', engine.max_iter = args{i+1};
+   case 'momentum', engine.momentum = args{i+1};
+   case 'tol',      engine.tol = args{i+1};
+   case 'protocol', engine.protocol = args{i+1};
+   case 'filename', engine.filename = args{i+1};
+   otherwise,
+    error(['invalid argument name ' args{i}]);
+  end
+end
+
+
+if strcmp(engine.protocol, 'tree')
+  % Make a rooted tree, so there is a fixed message passing order.
+  root = N;
+  [engine.tree, engine.preorder, engine.postorder, height, cyclic] = mk_rooted_tree(engine.gdl.G, root);
+  assert(~cyclic);
+end
+
+% store results computed by enter_evidence here
+engine.marginal_domains = cell(1, N);
+
+engine.niter = [];
+
+engine = class(engine, 'belprop_inf_engine', inf_engine(bnet));
+
+%%%%%%%%%
+
+function gdl = bnet_to_gdl(bnet)
+
+gdl.G = mk_undirected(bnet.dag);
+N = length(bnet.dag);
+gdl.doms = cell(1,N);
+for i=1:N
+  gdl.doms{i} = family(bnet.dag, i);
+end 
+
+% Compute a bit vector representation of the set of domains
+% dom_bitv(i,j) = 1 iff variable j occurs in domain i
+gdl.dom_bitv = zeros(N, N);
+for i=1:N
+  gdl.dom_bitv(i, gdl.doms{i}) = 1;
+end
+   
+% compute the interesection of the domains on either side of each edge (separating set)
+gdl.sepset = cell(N, N);
+gdl.nbrs = cell(1,N);
+for i=1:N
+  nbrs = neighbors(gdl.G, i);
+  gdl.nbrs{i} = nbrs;
+  for j = nbrs(:)'
+    gdl.sepset{i,j} = myintersect(gdl.doms{i}, gdl.doms{j});
+  end
+end  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+function [engine, ll, niter] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Propagate evidence using belief propagation
+% [engine, ll, niter] = enter_evidence(engine, evidence, ...)
+%
+% The log-likelihood is not computed; ll = 0.
+% niter contains the number of iterations used (if engine.protocol = 'parallel')
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - 1 means use max-product, 0 means use sum-product [0]
+% exclude  - list of nodes whose potential will not be included in the joint [ [] ]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+
+ll = 0;
+exclude = [];
+maximize = 0;
+
+if nargin >= 3
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'exclude', exclude = args{i+1};
+     case 'maximize', maximize = args{i+1};
+     otherwise,
+      error(['invalid argument name ' args{i}]);
+    end
+  end
+end
+
+engine.maximize = maximize;
+
+if ~isempty(engine.filename)
+  engine.fid = fopen(engine.filename, 'w');
+  if engine.fid == 0
+    error(['can''t open ' engine.filename]);
+  end
+else
+  engine.fid = [];
+end
+
+gdl = engine.gdl;
+bnet = bnet_from_engine(engine);
+
+ndoms = length(gdl.doms);
+ns = bnet.node_sizes;
+onodes = find(~isemptycell(evidence));
+pot_type = determine_pot_type(bnet, onodes);
+
+% prime each local kernel with evidence (if any)
+local_kernel = cell(1, ndoms);
+for i=1:ndoms
+  if myismember(i, exclude)
+    local_kernel{i} =  mk_initial_pot(pot_type, gdl.doms{i}, ns, bnet.cnodes, onodes);
+  else
+    e = bnet.equiv_class(i);
+    local_kernel{i} =  convert_to_pot(bnet.CPD{e}, pot_type, gdl.doms{i}(:), evidence);
+  end
+end
+  
+% initialise all msgs to 1s
+msg = cell(ndoms, ndoms);
+for i=1:ndoms
+  nbrs = gdl.nbrs{i};
+  for j=nbrs(:)'
+    dom = gdl.sepset{i,j};
+    msg{i,j} = mk_initial_pot(pot_type, dom, ns, bnet.cnodes, onodes);
+  end
+end
+
+switch engine.protocol
+ case 'parallel', 
+   [engine.marginal_domains, niter] = parallel_protocol(engine, evidence, pot_type, local_kernel, msg);
+ case 'tree',
+  engine.marginal_domains = serial_protocol(engine, evidence, pot_type, local_kernel, msg);
+  niter = 1;
+end
+engine.niter = niter;
+
+%fprintf('just finished %d iterations of belprop\n', niter);
+
+if ~isempty(engine.filename)
+  fclose(engine.fid);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/find_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function mpe = find_mpe(engine, evidence, varargin)
+% FIND_MPE Find the most probable explanation of the data  (belprop)
+% function mpe = find_mpe(engine, evidence,...)
+%
+% evidence{i} = [] if X(i) is hidden, and otherwise contains its observed value (scalar or column vector).
+%
+% This finds the marginally most likely value for each hidden node,
+% and may give the wrong results even if the graph is acyclic,
+% unless you set break_ties = 1.
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% break_ties is optional. If 1, we will force ties to be broken consistently
+%  by calling enter_evidence N times. (see Jensen96, p106) Default = 1.
+
+break_ties = 1;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'break_ties',    break_ties = args{i+1}; 
+   otherwise,  
+    error(['invalid argument name ' args{i}]);       
+  end
+end
+
+engine = enter_evidence(engine, evidence, 'maximize', 1);
+
+observed = ~isemptycell(evidence);
+evidence = evidence(:); % hack to handle unrolled DBNs
+N = length(evidence);
+mpe = cell(1,N);
+for i=1:N
+  m = marginal_nodes(engine, i);
+  % observed nodes are all set to 1 inside the inference engine, so we must undo this
+  if observed(i)
+    mpe{i} = evidence{i};
+  else
+    mpe{i} = argmax(m.T);
+    if break_ties
+      evidence{i} = mpe{i};                             
+      [engine, ll] = enter_evidence(engine, evidence, 'maximize', 1);  
+    end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/loopy_converged.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function niter = loopy_converged(engine)
+% LOOPY_CONVERGED Did loopy belief propagation converge? 0 means no, eles we return the num. iterations.
+% function niter = loopy_converged(engine)
+%
+% We use a simple heuristic: we say convergence occurred if the number of iterations
+% used was less than the maximum allowed.
+
+if engine.niter == engine.max_iter
+  niter = 0;
+else
+  niter = engine.niter;
+end
+%conv = (strcmp(engine.protocol, 'tree') | (engine.niter < engine.max_iter));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function [marginal, pot] = marginal_family(engine, query)
+% MARGINAL_NODES Compute the marginal on the family of the specified query node (belprop)
+% [marginal, pot] = marginal_family(engine, query)
+
+pot = engine.marginal_domains{query};
+marginal = pot_to_marginal(pot);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function [marginal, pot] = marginal_nodes(engine, query)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (belprop)
+% [marginal, pot] = marginal_nodes(engine, query)
+%
+% query must be a subset of a family
+
+if isempty(query)
+  big_pot = engine.marginal_domains{1}; % pick an arbitrary domain
+else
+  big_pot = engine.marginal_domains{query(end)};   
+end
+pot = marginalize_pot(big_pot, query);
+marginal = pot_to_marginal(pot);
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/junk/1.1.1.1/Wed May 29 15:59:56 2002//
+/parallel_protocol.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/tree_protocol.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@belprop_inf_engine/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/junk	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+fgraph
+fgraph%fgraph%fgraph%fgraph%fgraph%fgraph%fgraph%fgraph%fgraph%fgraph%fgraph%fgraph
+fgraph
+fgraphffgraphufgraphnfgraphcfgraphtfgraphifgraphofgraphnfgraph fgraph[fgraphbfgraphefgraphlfgraph,fgraph fgraphifgraphtfgraphefgraphrfgraph]fgraph fgraph=fgraph fgraphpfgraphafgraphrfgraphafgraphlfgraphlfgraphefgraphlfgraph_fgraphpfgraphrfgraphofgraphtfgraphofgraphcfgraphofgraphlfgraph(fgraphefgraphnfgraphgfgraphifgraphnfgraphefgraph,fgraph fgraphefgraphvfgraphifgraphdfgraphefgraphnfgraphcfgraphefgraph,fgraph fgraphpfgraphofgraphtfgraph_fgraphtfgraphyfgraphpfgraphefgraph,fgraph fgraphlfgraphofgraphcfgraphafgraphlfgraph_fgraphkfgraphefgraphrfgraphnfgraphefgraphlfgraph,fgraph fgraphmfgraphsfgraphgfgraph)fgraph
+fgraph
+fgraphdfgraphofgraphmfgraphsfgraph fgraph=fgraph fgraphefgraphnfgraphgfgraphifgraphnfgraphefgraph.fgraphffgraphgfgraphrfgraphafgraphpfgraphhfgraph.fgraphdfgraphofgraphmfgraphsfgraph;fgraph
+fgraphnfgraphdfgraphofgraphmfgraphsfgraph fgraph=fgraph fgraphlfgraphefgraphnfgraphgfgraphtfgraphhfgraph(fgraphdfgraphofgraphmfgraphsfgraph)fgraph;fgraph
+fgraphnfgraphsfgraph fgraph=fgraph fgraphefgraphnfgraphgfgraphifgraphnfgraphefgraph.fgraphffgraphgfgraphrfgraphafgraphpfgraphhfgraph.fgraphnfgraphofgraphdfgraphefgraph_fgraphsfgraphifgraphzfgraphefgraphsfgraph;fgraph
+fgraphofgraphnfgraphofgraphdfgraphefgraphsfgraph fgraph=fgraph fgraphffgraphifgraphnfgraphdfgraph(fgraph~fgraphifgraphsfgraphefgraphmfgraphpfgraphtfgraphyfgraphcfgraphefgraphlfgraphlfgraph(fgraphefgraphvfgraphifgraphdfgraphefgraphnfgraphcfgraphefgraph)fgraph)fgraph;fgraph
+fgraphcfgraphnfgraphofgraphdfgraphefgraphsfgraph fgraph=fgraph fgraphefgraphnfgraphgfgraphifgraphnfgraphefgraph.fgraphffgraphgfgraphrfgraphafgraphpfgraphhfgraph.fgraphcfgraphnfgraphofgraphdfgraphefgraphsfgraph;fgraph
+fgraph
+fgraphpfgraphrfgraphofgraphdfgraph_fgraphofgraphffgraph_fgraphmfgraphsfgraphgfgraph fgraph=fgraph fgraphcfgraphefgraphlfgraphlfgraph(fgraph1fgraph,fgraph fgraphnfgraphdfgraphofgraphmfgraphsfgraph)fgraph;fgraph
+fgraphbfgraphefgraphlfgraph fgraph=fgraph fgraphcfgraphefgraphlfgraphlfgraph(fgraph1fgraph,fgraph fgraphnfgraphdfgraphofgraphmfgraphsfgraph)fgraph;fgraph
+fgraphofgraphlfgraphdfgraph_fgraphbfgraphefgraphlfgraph fgraph=fgraph fgraphcfgraphefgraphlfgraphlfgraph(fgraph1fgraph,fgraph fgraphnfgraphdfgraphofgraphmfgraphsfgraph)fgraph;fgraph
+fgraph
+fgraphcfgraphofgraphnfgraphvfgraphefgraphrfgraphgfgraphefgraphdfgraph fgraph=fgraph fgraph0fgraph;fgraph
+fgraphifgraphtfgraphefgraphrfgraph fgraph=fgraph fgraph1fgraph;fgraph
+fgraphwfgraphhfgraphifgraphlfgraphefgraph fgraph~fgraphcfgraphofgraphnfgraphvfgraphefgraphrfgraphgfgraphefgraphdfgraph fgraph&fgraph fgraph(fgraphifgraphtfgraphefgraphrfgraph fgraph<fgraph=fgraph fgraphefgraphnfgraphgfgraphifgraphnfgraphefgraph.fgraphmfgraphafgraphxfgraph_fgraphifgraphtfgraphefgraphrfgraph)fgraph
+fgraph fgraph fgraph
+fgraph fgraph fgraph%fgraph fgraphefgraphafgraphcfgraphhfgraph fgraphnfgraphofgraphdfgraphefgraph fgraphmfgraphufgraphlfgraphtfgraphifgraphpfgraphlfgraphifgraphefgraphsfgraph fgraphafgraphlfgraphlfgraph fgraphifgraphtfgraphsfgraph fgraphifgraphnfgraphcfgraphofgraphmfgraphifgraphnfgraphgfgraph fgraphmfgraphsfgraphgfgraphsfgraph fgraphafgraphnfgraphdfgraph fgraphcfgraphofgraphmfgraphpfgraphufgraphtfgraphefgraphsfgraph fgraphifgraphtfgraphsfgraph fgraphlfgraphofgraphcfgraphafgraphlfgraph fgraphbfgraphefgraphlfgraphifgraphefgraphffgraph
+fgraph fgraph fgraphofgraphlfgraphdfgraph_fgraphbfgraphefgraphlfgraph fgraph=fgraph fgraphbfgraphefgraphlfgraph;fgraph
+fgraph fgraph fgraphffgraphofgraphrfgraph fgraphifgraph=fgraph1fgraph:fgraphnfgraphdfgraphofgraphmfgraphsfgraph
+fgraph fgraph fgraph fgraph fgraphpfgraphrfgraphofgraphdfgraph_fgraphofgraphffgraph_fgraphmfgraphsfgraphgfgraph{fgraphifgraph}fgraph fgraph=fgraph fgraphmfgraphkfgraph_fgraphifgraphnfgraphifgraphtfgraphifgraphafgraphlfgraph_fgraphpfgraphofgraphtfgraph(fgraphpfgraphofgraphtfgraph_fgraphtfgraphyfgraphpfgraphefgraph,fgraph fgraphdfgraphofgraphmfgraphsfgraph{fgraphifgraph}fgraph,fgraph fgraphnfgraphsfgraph,fgraph fgraphcfgraphnfgraphofgraphdfgraphefgraphsfgraph,fgraph fgraphofgraphnfgraphofgraphdfgraphefgraphsfgraph)fgraph;fgraph
+fgraph fgraph fgraph fgraph fgraphnfgraphbfgraphrfgraphsfgraph fgraph=fgraph fgraphefgraphnfgraphgfgraphifgraphnfgraphefgraph.fgraphffgraphgfgraphrfgraphafgraphpfgraphhfgraph.fgraphnfgraphbfgraphrfgraphsfgraph{fgraphifgraph}fgraph;fgraph
+fgraph fgraph fgraph fgraph fgraphffgraphofgraphrfgraph fgraphjfgraph=fgraphnfgraphbfgraphrfgraphsfgraph(fgraph:fgraph)fgraph'fgraph
+fgraph fgraph fgraph fgraph fgraph fgraph fgraphpfgraphrfgraphofgraphdfgraph_fgraphofgraphffgraph_fgraphmfgraphsfgraphgfgraph{fgraphifgraph}fgraph fgraph=fgraph fgraphmfgraphufgraphlfgraphtfgraphifgraphpfgraphlfgraphyfgraph_fgraphbfgraphyfgraph_fgraphpfgraphofgraphtfgraph(fgraphpfgraphrfgraphofgraphdfgraph_fgraphofgraphffgraph_fgraphmfgraphsfgraphgfgraph{fgraphifgraph}fgraph,fgraph fgraphmfgraphsfgraphgfgraph{fgraphjfgraph,fgraphifgraph}fgraph)fgraph;fgraph
+fgraph fgraph fgraph fgraph fgraphefgraphnfgraphdfgraph
+fgraph fgraph fgraph fgraph fgraphbfgraphefgraphlfgraph{fgraphifgraph}fgraph fgraph=fgraph fgraphnfgraphofgraphrfgraphmfgraphafgraphlfgraphifgraphzfgraphefgraph_fgraphpfgraphofgraphtfgraph(fgraphmfgraphufgraphlfgraphtfgraphifgraphpfgraphlfgraphyfgraph_fgraphpfgraphofgraphtfgraphsfgraph(fgraphpfgraphrfgraphofgraphdfgraph_fgraphofgraphffgraph_fgraphmfgraphsfgraphgfgraph{fgraphifgraph}fgraph,fgraph fgraphlfgraphofgraphcfgraphafgraphlfgraph_fgraphkfgraphefgraphrfgraphnfgraphefgraphlfgraph{fgraphifgraph}fgraph)fgraph)fgraph;fgraph
+fgraph fgraph fgraphefgraphnfgraphdfgraph
+fgraph
+fgraph fgraph fgraph%fgraph fgraphcfgraphofgraphnfgraphvfgraphefgraphrfgraphgfgraphefgraphdfgraph?fgraph
+fgraph fgraph fgraphifgraphffgraph fgraphifgraphtfgraphefgraphrfgraph=fgraph=fgraph1fgraph
+fgraph fgraph fgraph fgraph fgraphcfgraphofgraphnfgraphvfgraphefgraphrfgraphgfgraphefgraphdfgraph fgraph=fgraph fgraph0fgraph;fgraph
+fgraph fgraph fgraphefgraphlfgraphsfgraphefgraph
+fgraph fgraph fgraph fgraph fgraphcfgraphofgraphnfgraphvfgraphefgraphrfgraphgfgraphefgraphdfgraph fgraph=fgraph fgraph1fgraph;fgraph
+fgraph fgraph fgraph fgraph fgraphffgraphofgraphrfgraph fgraphifgraph=fgraph1fgraph:fgraphnfgraphdfgraphofgraphmfgraphsfgraph
+fgraph fgraph fgraph fgraph fgraph fgraph fgraphifgraphffgraph fgraph~fgraphafgraphpfgraphpfgraphrfgraphofgraphxfgraphefgraphqfgraph_fgraphpfgraphofgraphtfgraph(fgraphbfgraphefgraphlfgraph{fgraphifgraph}fgraph,fgraph fgraphofgraphlfgraphdfgraph_fgraphbfgraphefgraphlfgraph{fgraphifgraph}fgraph,fgraph fgraphefgraphnfgraphgfgraphifgraphnfgraphefgraph.fgraphtfgraphofgraphlfgraph)fgraph
+fgraph	fgraphcfgraphofgraphnfgraphvfgraphefgraphrfgraphgfgraphefgraphdfgraph fgraph=fgraph fgraph0fgraph;fgraph
+fgraph	fgraphbfgraphrfgraphefgraphafgraphkfgraph;fgraph
+fgraph fgraph fgraph fgraph fgraph fgraph fgraphefgraphnfgraphdfgraph
+fgraph fgraph fgraph fgraph fgraphefgraphnfgraphdfgraph
+fgraph fgraph fgraphefgraphnfgraphdfgraph
+fgraph
+fgraph fgraph fgraphifgraphffgraph fgraph~fgraphcfgraphofgraphnfgraphvfgraphefgraphrfgraphgfgraphefgraphdfgraph
+fgraph fgraph fgraph fgraph fgraphofgraphlfgraphdfgraph_fgraphmfgraphsfgraphgfgraph fgraph=fgraph fgraphmfgraphsfgraphgfgraph;fgraph
+fgraph fgraph fgraph fgraph fgraph%fgraph fgraphefgraphafgraphcfgraphhfgraph fgraphnfgraphofgraphdfgraphefgraph fgraphsfgraphefgraphnfgraphdfgraphsfgraph fgraphafgraph fgraphmfgraphsfgraphgfgraph fgraphtfgraphofgraph fgraphefgraphafgraphcfgraphhfgraph fgraphofgraphffgraph fgraphifgraphtfgraphsfgraph fgraphnfgraphefgraphifgraphgfgraphhfgraphbfgraphofgraphrfgraphsfgraph
+fgraph fgraph fgraph fgraph fgraphffgraphofgraphrfgraph fgraphifgraph=fgraph1fgraph:fgraphnfgraphdfgraphofgraphmfgraphsfgraph
+fgraph fgraph fgraph fgraph fgraph fgraph fgraphnfgraphbfgraphrfgraphsfgraph fgraph=fgraph fgraphefgraphnfgraphgfgraphifgraphnfgraphefgraph.fgraphffgraphgfgraphrfgraphafgraphpfgraphhfgraph.fgraphnfgraphbfgraphrfgraphsfgraph{fgraphifgraph}fgraph;fgraph
+fgraph fgraph fgraph fgraph fgraph fgraph fgraphffgraphofgraphrfgraph fgraphjfgraph=fgraphnfgraphbfgraphrfgraphsfgraph(fgraph:fgraph)fgraph'fgraph
+fgraph	fgraph%fgraph fgraphmfgraphufgraphlfgraphtfgraphifgraphpfgraphlfgraphyfgraph fgraphafgraphlfgraphlfgraph fgraphifgraphnfgraphcfgraphofgraphmfgraphifgraphnfgraphgfgraph fgraphmfgraphsfgraphgfgraphsfgraph fgraphefgraphxfgraphcfgraphefgraphpfgraphtfgraph fgraphffgraphrfgraphofgraphmfgraph fgraphjfgraph
+fgraph	fgraphtfgraphefgraphmfgraphpfgraph fgraph=fgraph fgraphpfgraphrfgraphofgraphdfgraph_fgraphofgraphffgraph_fgraphmfgraphsfgraphgfgraph{fgraphifgraph}fgraph;fgraph
+fgraph	fgraphtfgraphefgraphmfgraphpfgraph fgraph=fgraph fgraphdfgraphifgraphvfgraphifgraphdfgraphefgraph_fgraphbfgraphyfgraph_fgraphpfgraphofgraphtfgraph(fgraphtfgraphefgraphmfgraphpfgraph,fgraph fgraphofgraphlfgraphdfgraph_fgraphmfgraphsfgraphgfgraph{fgraphjfgraph,fgraphifgraph}fgraph)fgraph;fgraph
+fgraph	fgraph%fgraph fgraphsfgraphefgraphnfgraphdfgraph fgraphmfgraphsfgraphgfgraph fgraphffgraphrfgraphofgraphmfgraph fgraphifgraph fgraphtfgraphofgraph fgraphjfgraph
+fgraph	fgraphtfgraphefgraphmfgraphpfgraph fgraph=fgraph fgraphmfgraphufgraphlfgraphtfgraphifgraphpfgraphlfgraphyfgraph_fgraphbfgraphyfgraph_fgraphpfgraphofgraphtfgraph(fgraphtfgraphefgraphmfgraphpfgraph,fgraph fgraphlfgraphofgraphcfgraphafgraphlfgraph_fgraphkfgraphefgraphrfgraphnfgraphefgraphlfgraph{fgraphifgraph}fgraph)fgraph;fgraph
+fgraph	fgraphifgraphffgraph fgraphefgraphnfgraphgfgraphifgraphnfgraphefgraph.fgraphmfgraphafgraphxfgraphifgraphmfgraphifgraphzfgraphefgraph
+fgraph	fgraph fgraph fgraphtfgraphefgraphmfgraphpfgraph2fgraph fgraph=fgraph fgraphmfgraphafgraphrfgraphgfgraphifgraphnfgraphafgraphlfgraphifgraphzfgraphefgraph_fgraphpfgraphofgraphtfgraph_fgraphmfgraphafgraphxfgraph(fgraphtfgraphefgraphmfgraphpfgraph,fgraph fgraphefgraphnfgraphgfgraphifgraphnfgraphefgraph.fgraphffgraphgfgraphrfgraphafgraphpfgraphhfgraph.fgraphsfgraphefgraphpfgraphsfgraphefgraphtfgraph{fgraphifgraph,fgraphjfgraph}fgraph)fgraph;fgraph
+fgraph	fgraphefgraphlfgraphsfgraphefgraph
+fgraph	fgraph fgraph fgraphtfgraphefgraphmfgraphpfgraph2fgraph fgraph=fgraph fgraphmfgraphafgraphrfgraphgfgraphifgraphnfgraphafgraphlfgraphifgraphzfgraphefgraph_fgraphpfgraphofgraphtfgraph(fgraphtfgraphefgraphmfgraphpfgraph,fgraph fgraphefgraphnfgraphgfgraphifgraphnfgraphefgraph.fgraphffgraphgfgraphrfgraphafgraphpfgraphhfgraph.fgraphsfgraphefgraphpfgraphsfgraphefgraphtfgraph{fgraphifgraph,fgraphjfgraph}fgraph)fgraph;fgraph
+fgraph	fgraphefgraphnfgraphdfgraph
+fgraph	fgraphmfgraphsfgraphgfgraph{fgraphifgraph,fgraphjfgraph}fgraph fgraph=fgraph fgraphnfgraphofgraphrfgraphmfgraphafgraphlfgraphifgraphzfgraphefgraph_fgraphpfgraphofgraphtfgraph(fgraphtfgraphefgraphmfgraphpfgraph2fgraph)fgraph;fgraph
+fgraph fgraph fgraph fgraph fgraph fgraph fgraphefgraphnfgraphdfgraph
+fgraph fgraph fgraph fgraph fgraphefgraphnfgraphdfgraph
+fgraph fgraph fgraphefgraphnfgraphdfgraph
+fgraph
+fgraph fgraph fgraphifgraphtfgraphefgraphrfgraph fgraph=fgraph fgraphifgraphtfgraphefgraphrfgraph fgraph+fgraph fgraph1fgraph;fgraph
+fgraphefgraphnfgraphdfgraph
+fgraph
+gdl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/parallel_protocol.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+function [bel, niter] = parallel_protocol(engine, evidence, pot_type, local_kernel, msg)
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+onodes = find(~isemptycell(evidence));
+
+ndoms = length(engine.gdl.doms);
+prod_of_msg = cell(1, ndoms);
+bel = cell(1, ndoms);
+old_bel = cell(1, ndoms);
+
+converged = 0;
+iter = 1;
+while ~converged & (iter <= engine.max_iter)
+  
+  % each node multiplies all its incoming msgs and computes its local belief
+  old_bel = bel;
+  for i=1:ndoms
+    prod_of_msg{i} = mk_initial_pot(pot_type, engine.gdl.doms{i}, ns, bnet.cnodes, onodes);
+    nbrs = engine.gdl.nbrs{i};
+    for j=nbrs(:)'
+      prod_of_msg{i} = multiply_by_pot(prod_of_msg{i}, msg{j,i});
+    end
+    bel{i} = normalize_pot(multiply_by_pot(local_kernel{i}, prod_of_msg{i}));
+  end
+
+  if ~isempty(engine.fid)
+    for i=1:ndoms
+      tmp = pot_to_marginal(bel{i});
+      %fprintf(engine.fid, '%9.7f ', tmp.T(1));
+      fprintf(engine.fid, '%9.7f ', tmp.U(1));
+    end
+    %fprintf(engine.fid, '  U ');
+    %for i=1:ndoms
+    %  tmp = pot_to_marginal(bel{i});
+    %  fprintf(engine.fid, '%9.7f ', tmp.U(1));
+    %end
+    fprintf(engine.fid, '\n');
+  end
+
+  % converged?
+  if iter==1
+    converged = 0;
+  else
+    converged = 1;
+    for i=1:ndoms
+      if ~approxeq_pot(bel{i}, old_bel{i}, engine.tol)
+	converged = 0;
+	break;
+      end
+    end
+  end
+
+  if ~converged
+    old_msg = msg;
+    % each node sends a msg to each of its neighbors
+    for i=1:ndoms
+      nbrs = engine.gdl.nbrs{i};
+      for j=nbrs(:)'
+	% multiply all incoming msgs except from j
+	temp = prod_of_msg{i};
+	temp = divide_by_pot(temp, old_msg{j,i});
+	% send msg from i to j
+	temp = multiply_by_pot(temp, local_kernel{i});
+	temp2 = marginalize_pot(temp, engine.gdl.sepset{i,j}, engine.maximize);
+	msg{i,j} = normalize_pot(temp2);
+      end
+    end
+  end
+
+  iter = iter + 1;
+end
+
+
+niter = iter-1;
+
+if 0
+for i=1:ndoms
+  prod_of_msg{i} = mk_initial_pot(pot_type, engine.gdl.doms{i}, ns, bnet.cnodes, onodes);
+  nbrs = engine.gdl.nbrs{i};
+  for j=nbrs(:)'
+    prod_of_msg{i} = multiply_by_pot(prod_of_msg{i}, msg{j,i});
+  end
+  bel{i} = normalize_pot(multiply_by_pot(local_kernel{i}, prod_of_msg{i}));
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_inf_engine/private/tree_protocol.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+function bel = tree_protocol(engine, evidence, pot_type, local_kernel, msg)
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+onodes = find(~isemptycell(evidence));
+
+ndoms = length(engine.gdl.doms);
+prod_of_msg = cell(1, ndoms);
+bel = cell(1, ndoms);
+  
+% collect to root (node to parents)
+for n=engine.postorder
+  % absorb msgs from children
+  prod_of_msg{n} = mk_initial_pot(pot_type, engine.gdl.doms{n}, ns, bnet.cnodes, onodes);
+  for c=children(engine.tree, n)
+    prod_of_msg{n} = multiply_by_pot(prod_of_msg{n}, msg{c,n});
+  end
+  % send msg to parents
+  for p=parents(engine.tree, n)
+    if iter==1
+      temp = prod_of_msg{n};
+    else
+      temp = divide_by_pot(prod_of_msg{n}, old_msg{p,n});
+    end
+    temp = multiply_by_pot(temp, local_kernel{n});
+    temp2 = marginalize_pot(temp, engine.gdl.sepset{n,p}, engine.maximize);
+    %fprintf('%d sends %d\n', n, p);
+    msg{n,p} = normalize_pot(temp2);
+  end
+end
+
+% distribute from root (node to children)
+for n=engine.preorder
+  % absorb from parents
+  %prod_of_msg{n} = mk_initial_pot(pot_type, doms{n}, ns, cnodes, onodes);
+  for p=parents(engine.tree, n)
+    prod_of_msg{n} = multiply_by_pot(prod_of_msg{n}, msg{p,n});
+  end
+  bel{n} = normalize_pot(multiply_pots(prod_of_msg{n}, local_kernel{n}));
+  % send msg to children
+  for c=children(engine.tree, n)
+    temp = divide_by_pot(prod_of_msg{n}, msg{c,n});
+    temp = multiply_by_pot(temp, local_kernel{n});
+    temp2 = marginalize_pot(temp, engine.gdl.sepset{n,c}, engine.maximize);
+    %fprintf('%d sends %d\n', n, c);
+    msg{n,c} = normalize_pot(temp2);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/belprop_mrf2_inf_engine.m/1.1.1.1/Fri Jan  3 22:01:56 2003//
+/bp_mrf2.m/1.1.1.1/Mon Jan  5 01:23:34 2004//
+/enter_soft_evidence.m/1.1.1.1/Thu Jan  2 17:29:54 2003//
+/find_mpe.m/1.1.1.1/Thu Jan  2 17:49:18 2003//
+/marginal_nodes.m/1.1.1.1/Tue Dec 31 21:24:30 2002//
+/set_params.m/1.1.1.1/Thu Jan  2 17:28:56 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@belprop_mrf2_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/belprop_mrf2_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+function engine = belprop_mrf2_inf_engine(mrf2, varargin) 
+% BELPROP_MRF2_INF_ENGINE Belief propagation for MRFs with discrete pairwise potentials
+% engine = belprop_mrf2_inf_engine(mrf2, ...)
+%
+% This is like belprop_inf_engine, except it is designed for mrf2, so is much faster.
+%
+% [ ... ] = belprop_mrf2_inf_engine(..., 'param1',val1, 'param2',val2, ...)
+% allows you to specify optional parameters as name/value pairs.
+% Parameters modifying behavior of enter_evidence are below [default value in brackets]
+%
+% max_iter - max. num. iterations [ 5*nnodes]
+% momentum - weight assigned to old message in convex combination
+%            (useful for damping oscillations) [0]
+% tol      - tolerance used to assess convergence [1e-3]
+% verbose - 1 means print error at every iteration [0]
+%
+% Parameters can be changed later using set_params 
+
+
+% The advantages of pairwise potentials are
+% (1) we can compute messages using vector-matrix multiplication
+% (2) we can easily specify the parameters: one potential per edge
+% In contrast, potentials on larger cliques are more complicated to deal with.
+
+
+nnodes = length(mrf2.adj_mat);
+
+[engine.max_iter, engine.momentum, engine.tol, engine.verbose] = ...
+    process_options(varargin, 'max_iter', [], 'momentum', 0, 'tol', 1e-3, ...
+		   'verbose', 0);
+
+if isempty(engine.max_iter) % no user supplied value, so compute default
+  engine.max_iter = 5*nnodes;
+  %if acyclic(mrf2.adj_mat, 0) --- can be very slow!
+  %  engine.max_iter = nnodes;
+  %else
+  %  engine.max_iter = 5*nnodes;
+  %end
+end
+
+engine.bel = cell(1, nnodes); % store results of enter_evidence here
+engine.mrf2 = mrf2;
+
+engine = class(engine, 'belprop_mrf2_inf_engine');
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/bp_mrf2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,209 @@
+function [new_bel, niter, new_msg, edge_id, nstates] = bp_mrf2_general(adj_mat, pot, local_evidence, varargin)
+% BP_MRF2_GENERAL Belief propagation on an MRF with pairwise potentials
+% function [bel, niter] = bp_mrf2_general(adj_mat, pot, local_evidence, varargin)
+%
+% Input:
+% adj_mat(i,j) = 1 iff there is an edge between nodes i and j
+% pot(ki,kj,i,j) or pot{i,j}(ki,kj) = potential on edge between nodes i,j
+%   If the potentials on all edges are the same,
+%   you can just pass in 1 array, pot(ki,kj)
+% local_evidence(state, node) or local_evidence{i}(k) = Pr(observation at node i | Xi=k)
+%
+% Use cell arrays if the hidden nodes do not all have the same number of values.
+%
+% Output:
+% bel(k,i) or bel{i}(k) = P(Xi=k|evidence)
+% niter contains the number of iterations used 
+%
+% [ ... ] = bp_mrf2(..., 'param1',val1, 'param2',val2, ...)
+% allows you to specify optional parameters as name/value pairs.
+% Parameters names are below [default value in brackets]
+%
+% max_iter - max. num. iterations [ 5*nnodes]
+% momentum - weight assigned to old message in convex combination
+%            (useful for damping oscillations) - currently ignored i[0]
+% tol      - tolerance used to assess convergence [1e-3]
+% maximize - 1 means use max-product, 0 means use sum-product [0]
+% verbose - 1 means print error at every iteration [0]
+%
+% fn - name of function to call at end of every iteration [ [] ]
+% fnargs - we call feval(fn, bel, iter, fnargs{:}) [ [] ]
+
+nnodes = length(adj_mat);
+
+[max_iter, momentum, tol, maximize, verbose, fn, fnargs] = ...
+    process_options(varargin, 'max_iter', 5*nnodes, 'momentum', 0, ...
+		    'tol', 1e-3, 'maximize', 0, 'verbose', 0, ...
+		    'fn', [], 'fnargs', []);
+
+if iscell(local_evidence)
+  use_cell = 1;
+else
+  use_cell = 0;
+  [nstates nnodes] = size(local_evidence);
+end
+
+if iscell(pot)
+  tied_pot = 0;
+else
+  tied_pot = (ndims(pot)==2);
+end
+
+
+% give each edge a unique number
+ndx = find(adj_mat);
+nedges = length(ndx);
+edge_id = zeros(1, nnodes*nnodes);
+edge_id(ndx) = 1:nedges; 
+edge_id = reshape(edge_id, nnodes, nnodes);
+
+% initialise messages
+if use_cell
+  prod_of_msgs = cell(1, nnodes);
+  old_bel = cell(1, nnodes);
+  nstates = zeros(1, nnodes);
+  old_msg = cell(1, nedges);
+  for i=1:nnodes
+    nstates(i) = length(local_evidence{i});
+    prod_of_msgs{i} = local_evidence{i};
+    old_bel{i} = local_evidence{i};
+  end
+  for i=1:nnodes
+    nbrs = find(adj_mat(:,i));
+    for j=nbrs(:)'
+      old_msg{edge_id(i,j)} = normalise(ones(nstates(j),1));
+    end
+  end
+else
+  prod_of_msgs = local_evidence;
+  old_bel = local_evidence;
+  %old_msg = zeros(nstates, nnodes, nnodes); 
+  old_msg = zeros(nstates, nedges); 
+  m = normalise(ones(nstates,1));
+  for i=1:nnodes
+    nbrs = find(adj_mat(:,i));
+    for j=nbrs(:)'
+      old_msg(:, edge_id(i,j)) = m;
+      %old_msg(:,i,j) = m;
+    end
+  end
+end
+
+
+converged = 0;
+iter = 1;
+
+while ~converged & (iter <= max_iter)
+  
+  % each node sends a msg to each of its neighbors
+  for i=1:nnodes
+    nbrs = find(adj_mat(i,:));
+    for j=nbrs(:)'
+      if tied_pot
+	pot_ij = pot;
+      else
+	if iscell(pot)
+	  pot_ij = pot{i,j};
+	else
+	  pot_ij = pot(:,:,i,j);
+	end
+      end
+      pot_ij = pot_ij'; % now pot_ij(xj, xi) 
+      % so pot_ij * msg(xi) = sum_xi pot(xj,xi) msg(xi) = f(xj)
+
+      if 1
+	% Compute temp = product of all incoming msgs except from j
+	% by dividing out old msg from j from the product of all msgs sent to i
+	if use_cell
+	  temp = prod_of_msgs{i};
+	  m = old_msg{edge_id(j,i)};
+	else
+	  temp = prod_of_msgs(:,i);
+	  m = old_msg(:, edge_id(j,i));
+	end
+	if any(m==0)
+	  fprintf('iter=%d, send from i=%d to j=%d\n', iter, i, j);
+	  keyboard
+	end
+	m = m + (m==0); % valid since m(k)=0 => temp(k)=0, so can replace 0's with anything
+	temp = temp ./ m;
+	temp_div = temp;
+      end
+      
+      if 1
+	% Compute temp = product of all incoming msgs except from j in obvious way
+	if use_cell
+	  %temp = ones(nstates(i),1);
+	  temp = local_evidence{i};
+	  for k=nbrs(:)'
+	    if k==j, continue, end;
+	    temp = temp .* old_msg{edge_id(k,i)};
+	  end
+	else
+	  %temp = ones(nstates,1);
+	  temp = local_evidence(:,i);
+	  for k=nbrs(:)'
+	    if k==j, continue, end;
+	    temp = temp .* old_msg(:, edge_id(k,i));
+	  end
+	end
+      end
+      %assert(approxeq(temp, temp_div))
+      assert(approxeq(normalise(pot_ij * temp), normalise(pot_ij * temp_div)))
+	
+      if maximize
+	newm = max_mult(pot_ij, temp); % bottleneck
+      else
+	newm = pot_ij * temp;
+      end
+      newm = normalise(newm);
+      if use_cell
+	new_msg{edge_id(i,j)} = newm;
+      else
+	new_msg(:, edge_id(i,j)) = newm;
+      end
+    end % for j 
+  end % for i
+  old_prod_of_msgs = prod_of_msgs;
+  
+  % each node multiplies all its incoming msgs and computes its local belief
+  if use_cell
+    for i=1:nnodes
+      nbrs = find(adj_mat(:,i));
+      prod_of_msgs{i} = local_evidence{i};
+      for j=nbrs(:)'
+	prod_of_msgs{i} = prod_of_msgs{i} .* new_msg{edge_id(j,i)};
+      end
+      new_bel{i} = normalise(prod_of_msgs{i});
+    end
+    err = abs(cat(1,new_bel{:}) - cat(1, old_bel{:}));
+  else
+    for i=1:nnodes
+      nbrs = find(adj_mat(:,i));
+      prod_of_msgs(:,i) = local_evidence(:,i);
+      for j=nbrs(:)'
+	prod_of_msgs(:,i) = prod_of_msgs(:,i) .* new_msg(:,edge_id(j,i));
+      end
+      new_bel(:,i) = normalise(prod_of_msgs(:,i));
+    end
+    err = abs(new_bel(:) - old_bel(:));
+  end
+  converged = all(err < tol);
+  if verbose, fprintf('error at iter %d = %f\n', iter, sum(err)); end
+  if ~isempty(fn)
+    if isempty(fnargs)
+      feval(fn, new_bel);
+    else
+      feval(fn, new_bel, iter, fnargs{:});
+    end
+  end
+  
+  iter = iter + 1;
+  old_msg = new_msg;
+  old_bel = new_bel;
+end % while
+
+niter = iter-1;
+
+fprintf('converged in %d iterations\n', niter);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/enter_soft_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function [engine, ll, niter] = enter_soft_evidence(engine, local_evidence)
+% ENTER_SOFT_EVIDENCE Propagate evidence using belief propagation
+% [engine, ll, niter] = enter_soft_evidence(engine, local_evidence)
+%
+% local_evidence{i}(j) = Pr(observation at node i | S(i)=j)
+%
+% The log-likelihood is not computed; ll = 0.
+% niter contains the number of iterations used 
+
+ll = 0;
+mrf2 = engine.mrf2;
+[bel, niter] = bp_mrf2(mrf2.adj_mat, mrf2.pot, local_evidence, ...
+		       'max_iter', engine.max_iter, 'momentum', engine.momentum, ...
+		       'tol', engine.tol, 'maximize', 0, 'verbose', engine.verbose);
+engine.bel = bel;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/find_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function mpe = find_mpe(engine, local_evidence)
+% FIND_MPE Find the most probable explanation of the data  
+% function mpe = find_mpe(engine, local_evidence
+%
+% local_evidence{i}(j) = Pr(observation at node i | S(i)=j)
+%
+% This finds the marginally most likely value for each hidden node.
+% It may give inconsistent results if there are ties.
+
+[mpe, niter] = bp_mpe_mrf2(engine.mrf2.adj_mat, engine.mrf2.pot, local_evidence, ...
+			   'max_iter', engine.max_iter, 'momentum', engine.momentum, ...
+			   'tol', engine.tol);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function marginal = marginal_nodes(engine, query)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (belprop)
+% marginal = marginal_nodes(engine, query)
+%
+% query must be a single node
+
+if length(query)>1
+  error('can only handle single node marginals')
+end
+marginal = engine.bel{query};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@belprop_mrf2_inf_engine/set_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function engine = set_params(engine, varargin)
+% SET_PARAMS Modify parameters of the inference engine
+% engine = set_params(engine, 'param1',val1, 'param2',val2, ...)
+%
+% Parameter names are listed below.
+%
+% max_iter - max. num. iterations 
+% momentum - weight assigned to old message in convex combination
+%            (useful for damping oscillations) 
+% tol      - tolerance used to assess convergence
+% verbose - 1 means print error at every iteration [0]
+
+[engine.max_iter, engine.momentum, engine.tol, engine.verbose] = ...
+    process_options('max_iter', engine.max_iter, 'momentum', engine.momentum, ...
+		    'tol', engine.tol, 'verbose', engine.verbose);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/cond_gauss_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@cond_gauss_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/cond_gauss_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function engine = cond_gauss_inf_engine(bnet)
+% COND_GAUSS_INF_ENGINE Conditional Gaussian inference engine
+% engine = cond_gauss_inf_engine(bnet)
+%
+% Enumerates all the discrete roots, and runs jtree on the remaining Gaussian nodes.
+
+dnodes = mysetdiff(1:length(bnet.dag), bnet.cnodes);
+
+%onodes = dnodes; % all the discrete ndoes will be observed
+%engine.sub_engine = jtree_inf_engine(bnet, onodes);
+bnet2 = bnet;
+bnet2.observed = dnodes;
+engine.sub_engine = jtree_inf_engine(bnet2);
+
+% This is where we will store the results between enter_evidence and marginal_nodes
+engine.T = [];
+engine.mu = [];
+engine.Sigma = [];
+engine.joint_dmarginal = [];
+engine.onodes = []; % needed for marginal_nodes
+engine.evidence = []; % needed for marginal_nodes add_ev
+
+engine = class(engine, 'cond_gauss_inf_engine', inf_engine(bnet));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (cond_gauss)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value (scalar or column vector)
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes(:);
+observed = ~isemptycell(evidence);
+onodes = find(observed);
+hnodes = find(isemptycell(evidence));
+engine.evidence = evidence;
+
+% check there are no C->D links where C is hidden
+pot_type = determine_pot_type(bnet, onodes);
+
+dhid = myintersect(hnodes, bnet.dnodes);
+S = prod(ns(dhid));
+T = zeros(S,1);
+
+N = length(bnet.dag);
+mu = cell(1,N);
+Sigma = cell(1,N); 
+cobs = myintersect(bnet.cnodes, onodes);
+chid = myintersect(bnet.cnodes, hnodes);
+ens = ns;
+ens(cobs) = 0;
+for j=chid(:)'
+  mu{j} = zeros(ens(j), S);
+  Sigma{j} = zeros(ens(j), ens(j), S);
+end
+ 
+for i=1:S
+  dvals = ind2subv(ns(dhid), i);
+  evidence(dhid) = num2cell(dvals);
+  [sub_engine, loglik] = enter_evidence(engine.sub_engine, evidence);
+  for j=chid(:)'
+    m = marginal_nodes(sub_engine, j);
+    mu{j}(:,i) = m.mu;
+    Sigma{j}(:,:,i) = m.Sigma;
+  end
+  T(i) = exp(loglik);
+end
+
+[T, lik] = normalise(T);
+loglik = log(lik);
+
+engine.T = T;
+engine.mu = mu;
+engine.Sigma = Sigma;
+
+dnodes = bnet.dnodes;
+dobs = myintersect(dnodes, onodes);
+ens(dobs) = 1;
+engine.joint_dmarginal = dpot(dnodes, ens(dnodes), myreshape(engine.T, ens(dnodes)));
+
+engine.onodes = onodes;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@cond_gauss_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function marginal = marginal_nodes(engine, query, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (cond_gauss)
+% marginal = marginal_nodes(engine, query, add_ev)
+%
+% 'query' must be a singleton set
+% add_ev is an optional argument; if 1, we will "inflate" the marginal of observed nodes
+% to their original size, adding 0s to the positions which contradict the evidence
+
+if nargin < 3, add_ev = 0; end
+
+if length(query) ~= 1
+  error('cond_gauss_inf_engine can only handle marginal queries on single nodes')
+end
+j = query;
+bnet = bnet_from_engine(engine);
+
+if myismember(j, bnet.cnodes)
+  if ~myismember(j, engine.onodes)
+    [m, C] = collapse_mog(engine.mu{j}, engine.Sigma{j}, engine.T);    
+    marginal.mu = m;
+    marginal.Sigma = C;
+    marginal.T = 1.0; % single mixture component
+  else
+    marginal.mu = engine.evidence{j};
+    k = bnet.node_sizes(j);
+    marginal.Sigma = zeros(k,k);
+    marginal.T = 1.0; % since P(E|E)=1
+  end
+else
+  marginal = pot_to_marginal(marginalize_pot(engine.joint_dmarginal, j));
+  if add_ev
+    marginal = add_ev_to_dmarginal(marginal, engine.evidence, bnet.node_sizes);
+  end
+end
+
+marginal.domain = query;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enumerative_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@enumerative_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function [engine, loglik] = enter_evidence(engine, evidence)
+% ENTER_EVIDENCE Add the specified evidence to the network (enumerative_inf)
+% [engine, loglik] = enter_evidence(engine, evidence)
+%
+% evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value (scalar or column vector)
+
+engine.evidence = evidence;
+if nargout == 2
+  [m, loglik] = marginal_nodes(engine, []);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/enumerative_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function engine = enumerative_inf_engine(bnet)
+% ENUMERATIVE_INF_ENGINE Inference engine for fully discrete BNs that uses exhaustive enumeration.
+% engine = enumerative_inf_engine(bnet)
+
+
+assert(isempty(bnet.cnodes));
+
+% This is where we store stuff between enter_evidence and marginal_nodes
+engine.evidence = [];
+
+engine = class(engine, 'enumerative_inf_engine', inf_engine(bnet));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@enumerative_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function [marginal, loglik] = marginal_nodes(engine, query)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (enumerative_inf)
+% [marginal, loglik] = marginal_nodes(engine, query)
+
+
+if isempty(query) & nargout < 2
+  marginal.T = 1;
+  marginal.domain = [];
+  return;
+end
+
+evidence = engine.evidence;
+bnet = bnet_from_engine(engine);
+assert(isempty(bnet.cnodes));
+n = length(bnet.dag);
+observed = ~isemptycell(evidence);
+vals = cat(1,evidence{observed});
+vals = vals(:)';
+ns = bnet.node_sizes;
+
+sz = ns(query);
+T = 0*myones(sz);
+p = 0;
+for i=1:prod(ns)
+  inst = ind2subv(ns, i); % i'th instantiation
+  if isempty(vals) | inst(observed) == vals % agrees with evidence
+    prob = exp(log_lik_complete(bnet, num2cell(inst(:))));
+    p = p + prob;
+    v = inst(query);
+    j = subv2ind(sz, v);
+    T(j) = T(j) + prob;
+  end
+end
+
+[T, lik] = normalise(T);
+lik = p;
+loglik = log(lik);
+
+Tsmall = shrink_obs_dims_in_table(T, query, evidence);
+marginal.domain = query;
+marginal.T = Tsmall;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/gaussian_inf_engine.m/1.1.1.1/Fri May 14 01:13:26 2004//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@gaussian_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (gaussian_inf_engine)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value (scalar or column vector)
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+O = find(~isemptycell(evidence));
+H = find(isemptycell(evidence));
+vals = cat(1, evidence{O});
+
+% Compute Pr(H|o)
+[Hmu, HSigma, loglik] = condition_gaussian(engine.mu, engine.Sigma, H, O, vals(:), ns);
+
+engine.Hmu = Hmu;
+engine.HSigma = HSigma;
+engine.hnodes = H;
+
+%%%%%%%%
+
+function [mu2, Sigma2, loglik] = condition_gaussian(mu, Sigma, X, Y, y, ns)
+% CONDITION_GAUSSIAN Compute Pr(X|Y=y) where X and Y are jointly Gaussian.
+% [mu2, Sigma2, ll] = condition_gaussian(mu, Sigma, X, Y, y, ns)
+
+if isempty(y)
+  mu2 = mu;
+  Sigma2 = Sigma;
+  loglik = 0;
+  return;
+end
+
+use_log = 1;
+
+if length(Y)==length(mu) % instantiating every variable
+  mu2 = y;
+  Sigma2 = zeros(length(y));
+  loglik = gaussian_prob(y, mu, Sigma, use_log);
+  return;
+end
+
+[muX, muY, SXX, SXY, SYX, SYY] = partition_matrix_vec(mu, Sigma, X, Y, ns);
+K = SXY*inv(SYY);
+mu2 = muX + K*(y-muY);
+Sigma2 = SXX - K*SYX;
+loglik = gaussian_prob(y, muY, SYY, use_log);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/gaussian_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function engine = gaussian_inf_engine(bnet)
+% GAUSSIAN_INF_ENGINE Computes the joint multivariate Gaussian corresponding to the bnet
+% engine = gaussian_inf_engine(bnet)
+%
+% For details on how to compute the joint Gaussian from the bnet, see
+% - "Gaussian Influence Diagrams", R. Shachter and C. R. Kenley, Management Science, 35(5):527--550, 1989.
+% Once we have the Gaussian, we can apply the standard formulas for conditioning and marginalization.
+
+assert(isequal(bnet.cnodes, 1:length(bnet.dag)));
+
+[W, D, mu] = extract_params_from_gbn(bnet);
+U = inv(eye(size(W)) - W')';
+Sigma = U' * D * U;
+
+engine.mu = mu;
+engine.Sigma = Sigma;
+%engine.logp = log(normal_coef(Sigma));
+
+% This is where we will store the results between enter_evidence and marginal_nodes  
+engine.Hmu = [];
+engine.HSigma = [];
+engine.hnodes = [];
+
+engine = class(engine, 'gaussian_inf_engine', inf_engine(bnet));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function marginal = marginal_nodes(engine, query)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (gaussian)
+% marginal = marginal_nodes(engine, query)
+
+% Compute sum_{Hsum} Pr(Hkeep, Hsum | o)
+H = engine.hnodes;
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+Hkeep = myintersect(H, query);
+Hsum = mysetdiff(H, Hkeep);
+
+[marginal.mu, marginal.Sigma] = marginalize_gaussian(engine.Hmu, engine.HSigma, Hkeep, Hsum, ns);
+marginal.domain = query;
+marginal.T = 1;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/extract_params_from_gbn.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@gaussian_inf_engine/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gaussian_inf_engine/private/extract_params_from_gbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function [B,D,mu] = extract_params_from_gbn(bnet)
+% Extract all the local parameters of each Gaussian node, and collect them into global matrices.
+% [B,D,mu] = extract_params_from_gbn(bnet)
+%
+% B(i,j) is a block matrix that contains the transposed weight matrix from node i to node j.
+% D(i,i) is a block matrix that contains the noise covariance matrix for node i.
+% mu(i) is a block vector that contains the shifted noise mean for node i.
+
+% In Shachter's model, the mean of each node in the global gaussian is
+% the same as the node's local unconditional mean.
+% In Alag's model (which we use), the global mean gets shifted.
+
+
+num_nodes = length(bnet.dag);
+bs = bnet.node_sizes(:); % bs = block sizes
+N = sum(bs); % num scalar nodes
+
+B = zeros(N,N);
+D = zeros(N,N);
+mu = zeros(N,1);
+
+for i=1:num_nodes % in topological order
+  ps = parents(bnet.dag, i);
+  e = bnet.equiv_class(i);
+  %[m, Sigma, weights] = extract_params_from_CPD(bnet.CPD{e});
+  s = struct(bnet.CPD{e}); % violate privacy of object
+  m = s.mean; Sigma = s.cov; weights = s.weights;
+  if length(ps) == 0
+    mu(block(i,bs)) = m;
+  else
+    mu(block(i,bs)) = m + weights *  mu(block(ps,bs));
+  end
+  B(block(ps,bs), block(i,bs)) = weights';
+  D(block(i,bs), block(i,bs)) = Sigma;
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/gibbs_sampling_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@gibbs_sampling_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function [engine, loglik] = enter_evidence(engine, evidence)
+% ENTER_EVIDENCE Add the specified evidence to the network (gibbs_sampling_inf_engine)
+% [engine, loglik] = enter_evidence(engine, evidence)
+%
+% evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value 
+%
+% loglik is not computed... we just return a 0 value
+
+bnet = bnet_from_engine(engine);
+
+engine.hnodes = find(isemptycell(evidence));
+engine.onodes = mysetdiff(1:length(evidence), engine.hnodes);
+
+engine.evidence = zeros(engine.slice_size, 1);
+
+% Reset all counts since they are no longer valid
+engine.marginal_counts = {};
+%engine.state = sample_bnet (bnet, 1, 0);
+engine.state = cell2num(sample_bnet(bnet));
+
+% For speed, we use a normal (not cell) array.  We're making use of
+% the current restriction to discrete nodes.
+for i = engine.onodes
+    engine.evidence(i) = evidence{i};
+end
+
+loglik = 0;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/gibbs_sampling_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,104 @@
+function engine = gibbs_sampling_inf_engine(bnet, varargin)
+% GIBBS_SAMPLING_INF_ENGINE
+%
+% engine = gibbs_sampling_inf_engine(bnet, ...) 
+%
+% Optional parameters [default in brackets]
+% 'burnin' - How long before you start using the samples [100].
+% 'gap' - how often you use the samples in the estimate [1].
+% 'T' - number of samples [1000]
+%   i.e, number of node flips (so, for
+%   example if there are 10 nodes in the bnet, and T is 1000, each
+%   node will get flipped 100 times (assuming a deterministic schedule)) 
+%   The total running time is proportional to burnin + T*gap.
+%
+% 'order' - if the sampling schedule is deterministic, use this
+% parameter to specify the order in which nodes are sampled.
+% Order is allowed to include multiple copies of nodes, which is
+% useful if you want to, say, focus sampling on particular nodes.
+% Default is to use a deterministic schedule that goes through the
+% nodes in order.
+%
+% 'sampling_dist' - when using a stochastic sampling method, at
+% each step the node to sample is chosen according to this
+% distribution (may be unnormalized)
+% 
+% The sampling_dist and order parameters shouldn't both be used,
+% and this will cause an assert.
+%
+%
+% Written by "Bhaskara Marthi" <bhaskara@cs.berkeley.edu> Feb 02.
+
+
+engine.burnin = 100;
+engine.gap = 1;
+engine.T = 1000; 
+use_default_order = 1;
+engine.deterministic = 1;
+engine.order = {};
+engine.sampling_dist = {};
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  for i = 1:2:nargs
+    switch args{i}
+     case 'burnin'
+      engine.burnin = args{i+1};
+     case 'gap'
+      engine.gap = args{i+1};
+     case 'T'
+      engine.T = args{i+1};
+     case 'order'
+      assert (use_default_order);
+      use_default_order = 0;
+      engine.order = args{i+1};
+     case 'sampling_dist'
+      assert (use_default_order);
+      use_default_order = 0;
+      engine.deterministic = 0;
+      engine.sampling_dist = args{i+1};
+     otherwise
+      error(['unrecognized parameter to gibbs_sampling_inf_engine']);
+    end
+  end
+end
+
+engine.slice_size = size(bnet.dag, 2);
+if (use_default_order)
+  engine.order = 1:engine.slice_size;
+end
+engine.hnodes = [];
+engine.onodes = [];
+engine.evidence = [];
+engine.state = [];
+engine.marginal_counts = {};
+
+% Precompute the strides for each CPT
+engine.strides = compute_strides(bnet);
+
+% Precompute graphical information
+engine.families = compute_families(bnet);
+engine.children = compute_children(bnet);
+
+% For convenience, store the CPTs as tables rather than objects
+engine.CPT = get_cpts(bnet);
+
+engine = class(engine, 'gibbs_sampling_inf_engine', inf_engine(bnet));
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,135 @@
+function [marginal, engine] = marginal_nodes(engine, nodes, varargin);
+% MARGINAL_NODES Compute the marginal on the specified query nodes
+% (gibbs_sampling_engine)
+% [marginal, engine] = marginal_nodes(engine, nodes, ...)
+%
+% returns Pr(X(nodes) | X(observedNodes))
+%
+% The engine is also modified, and so it is returned as well, since
+% Matlab doesn't support passing by reference(!)  So
+% if you want to, for example, incrementally run gibbs for a few 100
+% steps at a time, you should use the returned value.
+%
+% Optional arguments :
+%
+% 'reset_counts' is 1 if you want to reset the counts made in the
+% past, and 0 otherwise (if the current query nodes are different
+% from the previous query nodes, or if marginal_nodes has not been
+% called before, reset_counts should be set to 1).
+% By default it is 1.
+
+
+reset_counts = 1;
+
+if (nargin > 3)
+  args = varargin;
+  nargs = length(args);
+  for i = 1:2:nargs
+    switch args{i}
+     case 'reset_counts'
+      reset_counts = args{i+1};
+     otherwise
+      error(['Incorrect argument to gibbs_sampling_engine/' ...
+	     ' marginal_nodes']);
+    end
+  end
+end
+
+% initialization stuff 
+bnet = bnet_from_engine(engine);
+slice_size = engine.slice_size;
+hnodes = engine.hnodes;
+onodes = engine.onodes;
+nonqnodes = mysetdiff(1:slice_size, nodes);
+gap = engine.gap;
+burnin = engine.burnin;
+T_max = engine.T;
+ns = bnet.node_sizes(nodes);
+
+
+% Cache the strides for the marginal table
+marg_strides = [1 cumprod(ns(1:end-1))];
+  
+% Reset counts if necessary
+if (reset_counts == 1) 
+  %state = sample_bnet(bnet, 1, 0);
+  %state = cell2num(sample_bnet(bnet, 'evidence', num2cell(engine.evidence)));
+  state = cell2num(sample_bnet(bnet));
+  state(onodes) = engine.evidence(onodes);
+  if (length(ns) == 1)
+    marginal_counts = zeros(ns(1),1);
+  else
+    marginal_counts = zeros(ns);
+  end
+  
+% Otherwise, use the counts that have been stored in the engine  
+else
+  state = engine.state;
+  state(onodes, :) = engine.evidence(onodes, :);
+  marginal_counts = engine.marginal_counts;
+end
+
+if (engine.deterministic == 1)
+  pos = 1;
+  order = engine.order;
+  orderSize = length(engine.order);
+else
+  sampling_dist = normalise(engine.sampling_dist);
+end
+
+
+for t = 1:(T_max*gap+burnin)
+
+  % First, select node m to sample
+  if (engine.deterministic == 1)
+    m = engine.order(pos);
+    pos = pos+1;
+    if (pos > orderSize)
+      pos = 1;
+    end
+  else
+    m = my_sample_discrete(sampling_dist);
+  end
+
+  
+  % If the node is observed, then don't bother resampling
+  if (myismember(m, onodes))
+    continue;
+  end
+
+  % Next, compute the posterior
+  post = compute_posterior (bnet, state, m, engine.strides, engine.families, ...
+			    engine.children, engine.CPT);
+  state(m) = my_sample_discrete(post);
+
+  % Now update our monte carlo estimate of the posterior
+  % distribution on the query node 
+  if ((mod(t-burnin, gap) == 0) & (t > burnin))
+
+    vals = state(nodes);
+    index = 1+marg_strides*(vals-1);
+    marginal_counts(index) = marginal_counts(index)+1;
+  end
+end
+
+% Store results for future computation.  Note that we store
+% unnormalized counts
+engine.state = state;
+engine.marginal_counts = marginal_counts;
+
+marginal.T = normalise(marginal_counts);
+
+
+  
+    
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/CPT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function c = CPT(bnet, i)
+% CPT Helper function avoid having to type in
+% CPD_to_CPT(bnet.CPD{i}) every time
+
+c = CPD_to_CPT(bnet.CPD{i});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+/CPT.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/compute_children.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/compute_families.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/compute_families_dbn.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/compute_posterior.c/1.1.1.1/Wed May 29 15:59:56 2002//
+/compute_posterior_dbn.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/compute_strides.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/get_cpts.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/get_slice_dbn.c/1.1.1.1/Wed May 29 15:59:56 2002//
+/get_slice_dbn.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/my_sample_discrete.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/sample_single_discrete.c/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@gibbs_sampling_inf_engine/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_children.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function c = compute_children(bnet)
+% COMPUTE_CHILDREN
+% precomputes the children of nodes in a bnet
+%
+% The return value is a cell array for now
+
+ss = size(bnet.dag, 1);
+c = cell(ss, 1);
+for i = 1:ss
+  c{i} = children(bnet.dag, i);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_families.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function families = compute_families(bnet)
+% COMPUTE_FAMILIES 
+% precomputes the families of nodes in a bnet
+%
+% The return value is a cell array for now
+
+ss = size(bnet.dag, 1);
+families = cell(ss, 1);
+for i = 1:ss
+  families{i} = family(bnet.dag, i);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_families_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function families = compute_families_dbn(bnet)
+% COMPUTE_FAMILIES 
+% precomputes the families of nodes in a dbn
+%
+% The return value is a cell array for now
+
+ss = size(bnet.intra, 1);
+families = cell(ss, 2);
+for i = 1:ss
+  families{i, 1} = family(bnet.dag, i, 1);
+  families{i, 2} = family(bnet.dag, i, 2);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,107 @@
+#include "mex.h"
+
+/* Helper function that extracts a one-dimensional slice from a cpt */
+/*
+void multiplySlice(mxArray *bnet, mxArray *state, int i, int nsi, int j,
+		   mxArray *strides, mxArray *fam, mxArray *cpts,
+		   double *y)
+*/
+void multiplySlice(const mxArray *bnet, const mxArray *state, int i, int nsi, int j,
+		   const mxArray *strides, const mxArray *fam, const mxArray *cpts,
+		   double *y)
+{
+  mxArray *ec, *cpt, *family;
+  double *ecElts, *cptElts, *famElts, *strideElts, *ev;
+  int c1, k, famSize, startInd, strideStride, pos, stride;
+  
+  strideStride = mxGetM(strides);
+  strideElts = mxGetPr(strides);
+
+  ev = mxGetPr(state);
+
+  /* Get the CPT */
+  ec = mxGetField (bnet, 0, "equiv_class");
+  ecElts = mxGetPr(ec);
+  k = (int) ecElts[j-1];
+  cpt = mxGetCell (cpts, k-1);
+  cptElts = mxGetPr (cpt);
+
+  /* Get the family vector for this cpt */
+  family = mxGetCell (fam, j-1);
+  famSize = mxGetNumberOfElements (family);
+  famElts = mxGetPr (family);
+
+  /* Figure out starting position and stride */
+  startInd = 0;
+  for (c1 = 0, pos = k-1; c1 < famSize; c1++, pos +=strideStride) {
+    if (famElts[c1] != i) {
+      startInd += strideElts[pos]*(ev[(int)famElts[c1]-1]-1);
+    }
+    else {
+      stride = strideElts[pos];
+    }
+  }
+
+  for (c1 = 0, pos = startInd; c1 < nsi; c1++, pos+=stride) {
+    y[c1] *= cptElts[pos];
+  }
+}
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray
+		 *prhs[])
+{
+  double *pi, *nsElts, *y, *childrenElts;
+  mxArray *ns, *children;
+  double sum;
+  int i, nsi, c1, numChildren;
+
+  pi = mxGetPr(prhs[2]);
+  i = (int) pi[0];
+
+  ns = mxGetField(prhs[0], 0, "node_sizes");
+  nsElts = mxGetPr(ns);
+  nsi = (int) nsElts[i-1];
+
+  /* Initialize the posterior */
+  plhs[0] = mxCreateDoubleMatrix (1, nsi, mxREAL);
+  y = mxGetPr(plhs[0]);
+  for (c1 = 0; c1 < nsi; c1++) {
+    y[c1] = 1;
+  }
+
+  /* Multiply in the cpt of the node i */
+  multiplySlice(prhs[0], prhs[1], i, nsi, i, prhs[3], prhs[4],
+		prhs[6], y);
+
+
+  /* Multiply in cpts of children of i */
+  children = mxGetCell (prhs[5], i-1);
+  numChildren = mxGetNumberOfElements (children);
+  childrenElts = mxGetPr (children);
+  
+  for (c1 = 0; c1 < numChildren; c1++) {
+    int j;
+    j = (int) childrenElts[c1];
+    multiplySlice (prhs[0], prhs[1], i, nsi, j, prhs[3], prhs[4],
+		   prhs[6], y);
+  }
+
+  sum = 0;
+  /* normalize! */
+  for (c1 = 0; c1 < nsi; c1++) {
+    sum += y[c1];
+  }
+
+  for (c1 = 0; c1 < nsi; c1++) {
+    y[c1] /= sum;
+  }
+}
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function post = compute_posterior_dbn(bnet, state, i, n, strides, families, ...
+				  CPT)
+% COMPUTE_POSTERIOR
+%
+% post = compute_posterior(bnet, state, i, n, strides, families,
+% cpts)
+%
+% Compute the posterior distribution on node X_i^n of a DBN,
+% conditional on evidence in the cell array state
+%
+% strides is the cached result of compute_strides(bnet)
+% families is the cached result of compute_families(bnet)
+% cpt is the cached result of get_cpts(bnet)
+%
+% post is a one-dimensional table
+
+
+
+% First multiply in the cpt of the node itself
+post = get_slice_dbn(bnet, state, i, n, i, n, strides, families, CPT);
+post = post(:);
+
+% Then multiply in CPTs of children that are in this slice
+for j = children(bnet.intra, i)
+  slice = get_slice_dbn(bnet, state, j, n, i, n, strides, families, CPT);
+  post = post.*slice(:);
+end
+
+% Finally, if necessary, multiply in CPTs of children in the next
+% slice 
+if (n < size(state,2))
+  for j = children(bnet.inter, i)
+    slice = get_slice_dbn(bnet, state, j, n+1, i, n, strides, families, ...
+			    CPT);
+    post = post.*slice(:);
+  end
+end
+
+post = normalise(post);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/compute_strides.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function strides = compute_strides(bnet)
+% COMPUTE_STRIDES For each CPT and each variable in that CPT,
+% returns the stride of that variable.  So in future, we can
+% quickly extract a slice of the CPT.
+%
+% The return value is a 2d array, where strides(i,j) contains the
+% stride of the jth variable in the ith CPT.  Cell arrays would
+% have saved space but they are slower.
+% 
+
+num_cpts = size(bnet.CPD, 2);
+max_cpt_dim = 1 + max(sum(bnet.dag));
+strides = zeros(num_cpts, max_cpt_dim);
+
+for i = 1:num_cpts
+  c = CPT(bnet, i);
+  siz = size(CPT(bnet, i));
+  
+  % Deal with the special case of a 1-d array separately
+  if siz(2) == 1
+    dim = 1;
+  else
+    dim = size(siz, 2);
+  end
+
+  strides(i, 1:dim ) = [1 cumprod(siz(1:dim-1))];
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/get_cpts.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function c = get_cpts(bnet)
+% Get all the cpts in tabular form
+
+cpds = bnet.CPD;
+c = cell(size(cpds));
+for i = 1:length(c)
+  c{i} = CPT(bnet, i);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,116 @@
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray
+		 *prhs[]) 
+{
+  double *pn, *pi, *pj, *pm, *y, *ecElts, *pcpt, *famElts, *strideElts,
+    *ev, *nsElts;
+  int i, k, j, m, n;
+  mxArray *ec, *cpt, *fam, *ns;
+  int c1, famSize, nsj;
+  int strideStride, startInd, stride, pos, numNodes;
+
+  const int BNET = 0;
+  const int STATE = 1;
+  const int STRIDES = 6;
+  const int FAMILIES = 7;
+  const int CPT = 8;
+
+  pn = mxGetPr(prhs[3]);
+  n = (int) pn[0];
+  pi = mxGetPr(prhs[2]);
+  i = (int) pi[0];
+  pj = mxGetPr(prhs[4]);
+  j = (int) pj[0];
+  pm = mxGetPr(prhs[5]);
+  m = (int) pm[0];
+  ev = mxGetPr(prhs[STATE]);
+  ns = mxGetField (prhs[BNET], 0, "node_sizes");
+  nsElts = mxGetPr (ns);
+  numNodes = mxGetM(ns);
+
+  strideStride = mxGetM(prhs[STRIDES]);
+  strideElts = mxGetPr(prhs[STRIDES]);
+
+
+  
+  /* Treat the case n = 1 separately */
+  if (pn[0] == 1) {
+
+    /* Get the appropriate CPT */
+    ec = mxGetField (prhs[BNET], 0, "eclass1");
+    ecElts = mxGetPr(ec);
+    k = (int) ecElts[i-1];
+    cpt = mxGetCell (prhs[8], k-1);
+    pcpt = mxGetPr(cpt);
+
+    nsj = (int) nsElts[j-1];
+
+    /* Get the correct family vector */
+    /* (Note : MEX is painful) */
+    fam = mxGetCell (prhs[FAMILIES], i - 1);
+    famSize = mxGetNumberOfElements(fam);
+    famElts = mxGetPr(fam);
+
+
+    /* Figure out starting position and stride */
+    startInd = 0;
+    for (c1 = 0, pos = k-1; c1 < famSize; c1++, pos+=strideStride) {
+      if (famElts[c1] != j) {
+	startInd += strideElts[pos]*(ev[(int)famElts[c1]-1]-1);
+      }
+      else {
+	stride = strideElts[pos];
+      }
+    }
+    
+    plhs[0] = mxCreateDoubleMatrix (1, nsj, mxREAL);
+    y = mxGetPr(plhs[0]);
+    for (c1 = 0, pos = startInd; c1 < nsj; c1++, pos+=stride) {
+      y[c1] = pcpt[pos];
+    }
+  }
+
+  /* Handle the case n > 1 */
+  else {
+
+    /* Get the appropriate CPT */
+    ec = mxGetField (prhs[BNET], 0, "eclass2");
+    ecElts = mxGetPr(ec);
+    k = (int) ecElts[i-1];
+    cpt = mxGetCell (prhs[8], k-1);
+    pcpt = mxGetPr(cpt);
+
+    /* Figure out size of slice */
+    if (m == 1) {
+      nsj = (int) nsElts[j-1];
+    }
+    else {
+      nsj = (int) nsElts[j-1+numNodes];
+    }
+
+    /* Figure out family */
+    fam = mxGetCell (prhs[FAMILIES], i - 1 + numNodes);
+    famSize = mxGetNumberOfElements(fam);
+    famElts = mxGetPr(fam);
+    
+    startInd = 0;
+    for (c1 = 0, pos = k-1; c1 < famSize; c1++, pos+=strideStride) {
+      int f = (int) famElts[c1];
+
+      if (((f == j+numNodes) && (m == n)) || ((f == j) && (m ==
+							    n-1))) {
+	stride = strideElts[pos];
+      }
+      else {
+	startInd += strideElts[pos] * (ev[f-1+((n-2)*numNodes)]-1);
+      }
+    }
+
+    plhs[0] = mxCreateDoubleMatrix(1,nsj, mxREAL);
+    y = mxGetPr(plhs[0]);
+    for (c1 = 0, pos = startInd; c1 < nsj; c1++, pos+=stride) {
+      y[c1] = pcpt[pos];
+    }
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,87 @@
+function slice = get_slice_dbn(bnet, state, i, n, j, m, strides, families, ...
+				 CPT)
+% slice = get_slice(bnet, state, i, n, j, m, strides, families, cpt)
+%
+% GET_SLICE get one-dimensional slice of the CPT for node X_i^n
+% that corresponds to the different values of X_j^m, where all
+% other nodes have values given by state.  
+% strides is the result of
+% calling compute_strides(bnet)
+% families is the result of calling compute_families(bnet)
+% cpts is the result of calling get_cpts(bnet)
+%
+% slice is a 1-d array
+
+
+if (n == 1)
+
+  k = bnet.eclass1(i);
+  c = CPT{k};
+  
+  % Figure out evidence on family
+  fam = families{i, 1};
+  ev = state(fam, 1);
+  
+  % Remove evidence on node j
+  pos = find(fam == j);
+  ev(pos) = 1;
+  dim = size(ev, 1);
+  
+  % Compute initial index and stride
+  start_ind = 1+strides(k, 1:dim)*(ev-1);
+  stride = strides(k, pos);
+
+  % Compute the slice
+  slice = c(start_ind:stride:start_ind+(bnet.node_sizes(j, 1)-1)*stride);
+						  
+else
+  
+  k = bnet.eclass2(i);
+  c = CPT{k};
+  
+  fam = families{i, 2};
+  ss = length(bnet.intra);
+  
+  % Divide the family into nodes in this time step and nodes in the
+  % previous time step
+  this_time_step = fam(find(fam > ss));
+  prev_time_step = fam(find(fam <= ss));
+
+  % Normalize the node numbers
+  this_time_step = this_time_step - ss;
+  
+  % Get the evidence
+  this_step_ev = state(this_time_step, n);
+  prev_step_ev = state(prev_time_step, n-1);
+  
+  % Remove the evidence for X_j^m
+  if (m == n)
+    pos = find(this_time_step == j);
+    this_step_ev(pos) = 1;
+    pos = pos + size(prev_time_step, 2);
+  else
+    assert (m == n-1);
+    pos = find(prev_time_step == j);
+    prev_step_ev(pos) = 1;
+  end
+  
+  % Combine the two time steps
+  ev = [prev_step_ev; this_step_ev];
+  dim = size(ev, 1);
+
+
+  % Compute starting index and stride
+  start_ind = 1 + strides(k, 1:dim)*(ev-1);
+  stride = strides(k, pos);
+  
+  % Compute slice 
+  if (m == 1)
+    q = 1;
+  else
+    q = 2;
+  end
+  slice = c(start_ind:stride:start_ind+(bnet.node_sizes(j, q)-1)*stride);
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/my_sample_discrete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function M = my_sample_discrete(prob)
+% A faster version that calls a c subfunction.  Will update one
+% day to have r and c parameters as well
+
+R = rand (1,1);
+M = sample_single_discrete(R, prob);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@gibbs_sampling_inf_engine/private/sample_single_discrete.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray
+		 *prhs[]) 
+{
+  double *y, *pr, *dist;
+  int k, distSize;
+  double r, cumSum;
+  
+  plhs[0] = mxCreateDoubleMatrix(1,1, mxREAL);
+  y = mxGetPr (plhs[0]);
+
+  pr = mxGetPr (prhs[0]);
+  r = pr[0];
+
+  dist = mxGetPr (prhs[1]);
+  distSize = mxGetNumberOfElements (prhs[1]);
+
+  for (k = 0, cumSum = 0; (k < distSize) && (r >= cumSum); cumSum += dist[k], k++);
+
+  y[0] = k;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/enter_evidence.m/1.1.1.1/Mon Jun  7 19:05:42 2004//
+/find_mpe.m/1.1.1.1/Wed Jun 19 21:56:32 2002//
+/global_joint_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Mon Jun  7 19:04:48 2004//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@global_joint_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (global_joint)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value.
+%
+% Warning: Computing the log likelihood requires marginalizing all the nodes and can be slow.
+%
+% The list below gives optional arguments [default value in brackets].      
+%
+% exclude - list of nodes whose potential will not be included in the joint [ [] ]
+%
+% e.g., engine = enter_evidence(engine, ev, 'exclude', 3)
+
+exclude = [];
+maximize = 0;
+
+if nargin >= 3
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'exclude', exclude = args{i+1};
+     case 'maximize', maximize = args{i+1};
+     otherwise,
+      error(['invalid argument name ' args{i}]);
+    end
+  end
+end
+  
+assert(~maximize)
+bnet = bnet_from_engine(engine);
+N = length(bnet.node_sizes);
+%[engine.jpot, loglik] = compute_joint_pot(bnet, mysetdiff(1:N, exclude), evidence, 1:N);
+[engine.jpot] = compute_joint_pot(bnet, mysetdiff(1:N, exclude), evidence, 1:N);
+% jpot should not be normalized, otherwise it gives wrong resutls for limids like asia_dt1
+if nargout == 2
+  [m] = marginal_nodes(engine, []);
+  [T, lik] = normalize(m.T);
+  loglik = log(lik);
+end     
+%[engine.jpot loglik] = normalize_pot(engine.jpot);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/find_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function [mpe, ll] = find_mpe(engine, evidence)
+% FIND_MPE_GLOBAL Compute the most probable explanation(s) from the global joint
+% [mpe, ll] = find_mpe(engine, evidence)
+%
+% mpe(k,i) is the most probable value of node i in the k'th global mode  (cell array)
+%
+% We assume all nodes are discrete
+
+%engine = global_joint_inf_engine(bnet);
+bnet = bnet_from_engine(engine);
+engine = enter_evidence(engine, evidence);
+S1 = struct(engine); % violate object privacy
+S2 = struct(S1.jpot); % joint potential
+prob = max(S2.T(:));
+modes = find(S2.T(:) == prob);
+
+ens = bnet.node_sizes;
+onodes = find(~isemptycell(evidence));
+ens(onodes) = 1;
+mpe = ind2subv(ens, modes);
+for k=1:length(modes)
+  for i=onodes(:)'
+    mpe(k,i) = evidence{i};
+  end
+end
+ll = log(prob);
+
+mpe = num2cell(mpe);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/global_joint_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function engine = global_joint_inf_engine(bnet)
+% GLOBAL_JOINT_INF_ENGINE Construct the global joint distribution as a potential
+% engine = global_joint_inf_engine(bnet)
+%
+% Warning: this has size exponential in the number of discrete hidden variables
+
+engine.jpot = [];
+engine = class(engine, 'global_joint_inf_engine', inf_engine(bnet));    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function [m, pot] = marginal_family(engine, i)
+% MARGINAL_FAMILY Compute the marginal on i's family (global_inf_engine)
+% [m, pot] = marginal_family(engine, i)
+%
+
+bnet = bnet_from_engine(engine);
+[m, pot] = marginal_nodes(engine, family(bnet.dag, i));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@global_joint_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function [m, pot] = marginal_nodes(engine, query)
+% MARGINAL_NODES Compute the marginal on the specified set of nodes (global_joint)
+% [m, pot] = marginal_nodes(engine, query)
+
+pot = marginalize_pot(engine.jpot, query);
+m = pot_to_marginal(pot);
+%[m.T, lik] = normalize(m.T);
+%loglik = log(lik);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+/cliques_from_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/clq_containing_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/collect_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/distribute_evidence.m/1.1.1.1/Mon Jun 17 21:00:08 2002//
+/enter_evidence.m/1.1.1.1/Mon Jun 17 20:59:30 2002//
+/enter_soft_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/find_max_config.m/1.1.1.1/Mon Jun 17 23:14:52 2002//
+/find_mpe.m/1.1.1.1/Mon Jun 17 23:14:08 2002//
+/init_pot.m/1.1.1.1/Sun Jun 16 19:34:56 2002//
+/jtree_inf_engine.m/1.1.1.1/Fri Oct 31 22:37:48 2003//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/set_fields.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@jtree_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/collect_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/distribute_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_soft_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@jtree_inf_engine/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/collect_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function engine = collect_evidence(engine, root)
+
+if isempty(engine.postorder{root})
+  % this is the first time we have collected to this root
+  % memoize the order
+  [jtree, preorder, postorder] = mk_rooted_tree(engine.jtree, root);
+  postorder_parents = cell(1,length(postorder));
+  for n=postorder(1:end-1)
+    postorder_parents{n} = parents(jtree, n);
+  end
+  engine.postorder{root} = postorder;
+  engine.postorder_parents{root} = postorder_parents;
+else
+  postorder = engine.postorder{root};
+  postorder_parents = engine.postorder_parents{root};
+end
+
+C = length(engine.clpot);
+seppot = cell(C, C);
+% separators are implicitely initialized to 1s
+
+% collect to root (node to parents)
+for n=postorder(1:end-1)
+  for p=postorder_parents{n}
+    %clpot{p} = divide_by_pot(clpot{n}, seppot{p,n}); % dividing by 1 is redundant
+    engine.seppot{p,n} = marginalize_pot(engine.clpot{n}, engine.separator{p,n}, engine.maximize);
+    engine.clpot{p} = multiply_by_pot(engine.clpot{p}, engine.seppot{p,n});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/distribute_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function engine = distribute_evidence(engine, root)
+
+if isempty(engine.preorder{root})
+  % this is the first time we have distributed from this root
+  % memoize the order
+  [jtree, preorder, postorder] = mk_rooted_tree(engine.jtree, root);
+  preorder_children = cell(1,length(preorder));
+  for n=preorder
+    preorder_children{n} = children(jtree, n);
+  end
+  engine.preorder{root} = preorder;
+  engine.preorder_children{root} = preorder_children;
+else
+  preorder = engine.preorder{root};
+  preorder_children = engine.preorder_children{root};
+end
+
+
+% distribute from root (node to children)
+for n=preorder(:)'
+  for c=preorder_children{n}(:)'
+    engine.clpot{c} = divide_by_pot(engine.clpot{c}, engine.seppot{n,c}); 
+    engine.seppot{n,c} = marginalize_pot(engine.clpot{n}, engine.separator{n,c}, engine.maximize);
+    engine.clpot{c} = multiply_by_pot(engine.clpot{c}, engine.seppot{n,c});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,107 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (jtree)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i} = [] if X(i) is hidden, and otherwise contains its observed value (scalar or column vector).
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product instead of sum-product [0]
+% soft    - a cell array of soft/virtual evidence;
+%           soft{i} is a prob. distrib. over i's values, or [] [ cell(1,N) ]
+%
+% e.g., engine = enter_evidence(engine, ev, 'soft', soft_ev)
+%
+% For backwards compatibility with BNT2, you can also specify the parameters in the following order
+%  engine = enter_evidence(engine, ev, soft_ev)
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes(:);
+N = length(bnet.dag);
+
+% set default params
+exclude = [];
+soft_evidence = cell(1,N);
+maximize = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  if iscell(args{1})
+    soft_evidence = args{1};
+  else
+    for i=1:2:nargs
+      switch args{i},
+       case 'soft',    soft_evidence = args{i+1}; 
+       case 'maximize', maximize = args{i+1}; 
+       otherwise,  
+	error(['invalid argument name ' args{i}]);       
+      end
+    end
+  end
+end
+
+engine.maximize = maximize;
+
+onodes = find(~isemptycell(evidence));
+hnodes = find(isemptycell(evidence));
+pot_type = determine_pot_type(bnet, onodes);
+ if strcmp(pot_type, 'cg')
+  check_for_cd_arcs(onodes, bnet.cnodes, bnet.dag);
+end
+
+
+hard_nodes = 1:N;
+soft_nodes = find(~isemptycell(soft_evidence));
+S = length(soft_nodes);
+if S > 0
+  assert(pot_type == 'd');
+  assert(mysubset(soft_nodes, bnet.dnodes));
+end
+ 
+% Evaluate CPDs with evidence, and convert to potentials  
+pot = cell(1, N+S);
+for n=1:N
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n);
+  pot{n} = convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence);
+end
+
+for i=1:S
+  n = soft_nodes(i);
+  pot{N+i} = dpot(n, ns(n), soft_evidence{n});
+end
+
+%clqs = engine.clq_ass_to_node([hard_nodes soft_nodes]); 
+%[clpot, loglik] = enter_soft_evidence(engine, clqs, pot, onodes, pot_type);
+%engine.clpot = clpot; % save the results for marginal_nodes
+
+
+clique = engine.clq_ass_to_node([hard_nodes soft_nodes]); 
+potential = pot;
+
+
+% Set the clique potentials to all 1s
+C = length(engine.cliques);
+for i=1:C
+  engine.clpot{i} = mk_initial_pot(pot_type, engine.cliques{i}, ns, bnet.cnodes, onodes);
+end
+
+% Multiply on specified potentials
+for i=1:length(clique)
+  c = clique(i);
+  engine.clpot{c} = multiply_by_pot(engine.clpot{c}, potential{i});
+end
+
+root = 1; % arbitrary
+engine = collect_evidence(engine, root);
+engine = distribute_evidence(engine, root);
+
+ll = zeros(1, C);
+for i=1:C
+  [engine.clpot{i}, ll(i)] = normalize_pot(engine.clpot{i});
+end
+loglik = ll(1); % we can extract the likelihood from any clique
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/Old/enter_soft_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function [clpot, loglik] = enter_soft_evidence(engine, clique, potential, onodes, pot_type)
+% ENTER_SOFT_EVIDENCE Add the specified potentials to the network (jtree)
+% [clpot, loglik] = enter_soft_evidence(engine, clique, potential, onodes, pot_type, maximize)
+%
+% We multiply potential{i} onto clique(i) before propagating.
+% We return all the modified clique potentials.
+
+[clpot, seppot] = init_pot(engine, clique, potential, pot_type, onodes);
+[clpot, seppot] = collect_evidence(engine, clpot, seppot);
+[clpot, seppot] = distribute_evidence(engine, clpot, seppot);
+
+C = length(clpot);
+ll = zeros(1, C);
+for i=1:C
+  [clpot{i}, ll(i)] = normalize_pot(clpot{i});
+end
+loglik = ll(1); % we can extract the likelihood from any clique
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/cliques_from_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function cliques = cliques_from_engine(engine)
+% CLIQUES_FROM_ENGINE Return the cliques stored inside the inf. engine (jtree)
+% cliques = cliques_from_engine(engine)
+
+cliques = engine.cliques;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/clq_containing_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function c = clq_containing_nodes(engine, nodes, fam)
+% CLQ_CONTAINING_NODES Find the lightest clique (if any) that contains the set of nodes
+% c = clq_containing_nodes(engine, nodes, family)
+%
+% If the optional 'family' argument is specified, it means nodes = family(nodes(end)).
+% (This is useful since clq_ass_to_node is not accessible to outsiders.)
+% Returns c=-1 if there is no such clique.
+
+if nargin < 3, fam = 0; else fam = 1; end
+
+if length(nodes)==1
+  c = engine.clq_ass_to_node(nodes(1));
+%elseif fam
+%  c = engine.clq_ass_to_node(nodes(end));
+else
+  B = engine.cliques_bitv;
+  w = engine.clique_weight;
+  clqs = find(all(B(:,nodes), 2)); % all selected columns must be 1
+  if isempty(clqs)
+    c = -1;
+  else
+    c = clqs(argmin(w(clqs)));     
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/collect_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function [clpot, seppot] = collect_evidence(engine, clpot, seppot)
+% COLLECT_EVIDENCE Do message passing from leaves to root (children then parents)
+% [clpot, seppot] = collect_evidence(engine, clpot, seppot)
+
+for n=engine.postorder %postorder(1:end-1)
+  for p=engine.postorder_parents{n}
+    %clpot{p} = divide_by_pot(clpot{n}, seppot{p,n}); % dividing by 1 is redundant
+    seppot{p,n} = marginalize_pot(clpot{n}, engine.separator{p,n}, engine.maximize);
+    clpot{p} = multiply_by_pot(clpot{p}, seppot{p,n});
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/distribute_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function [clpot, seppot] = distribute_evidence(engine, clpot, seppot)
+% DISTRIBUTE_EVIDENCE Do message passing from root to leaves (parents then children)
+% [clpot, seppot] = distribute_evidence(engine, clpot, seppot)
+
+for n=engine.preorder
+  for c=engine.preorder_children{n}
+    clpot{c} = divide_by_pot(clpot{c}, seppot{n,c}); 
+    seppot{n,c} = marginalize_pot(clpot{n}, engine.separator{n,c}, engine.maximize);
+    clpot{c} = multiply_by_pot(clpot{c}, seppot{n,c});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,88 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (jtree)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i} = [] if X(i) is hidden, and otherwise contains its observed value (scalar or column vector).
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% soft    - a cell array of soft/virtual evidence;
+%           soft{i} is a prob. distrib. over i's values, or [] [ cell(1,N) ]
+%
+% e.g., engine = enter_evidence(engine, ev, 'soft', soft_ev)
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes(:);
+N = length(bnet.dag);
+
+engine.evidence = evidence; % store this for marginal_nodes with add_ev option
+engine.maximize = 0;
+
+% set default params
+exclude = [];
+soft_evidence = cell(1,N);
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'soft',    soft_evidence = args{i+1}; 
+   case 'maximize', engine.maximize = args{i+1};
+   otherwise,  
+    error(['invalid argument name ' args{i}]);       
+  end
+end
+
+onodes = find(~isemptycell(evidence));
+hnodes = find(isemptycell(evidence));
+pot_type = determine_pot_type(bnet, onodes);
+ if strcmp(pot_type, 'cg')
+  check_for_cd_arcs(onodes, bnet.cnodes, bnet.dag);
+end
+
+if is_mnet(bnet)
+  pot = engine.user_pot;
+  clqs = engine.nums_ass_to_user_clqs;
+else
+  % Evaluate CPDs with evidence, and convert to potentials  
+  pot = cell(1, N);
+  for n=1:N
+    fam = family(bnet.dag, n);
+    e = bnet.equiv_class(n);
+    if isempty(bnet.CPD{e})
+      error(['must define CPD ' num2str(e)])
+    else
+      pot{n} = convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence);
+    end
+  end
+  clqs = engine.clq_ass_to_node(1:N);
+end
+
+% soft evidence
+soft_nodes = find(~isemptycell(soft_evidence));
+S = length(soft_nodes);
+if S > 0
+  assert(pot_type == 'd');
+  assert(mysubset(soft_nodes, bnet.dnodes));
+end
+for i=1:S
+  n = soft_nodes(i);
+  pot{end+1} = dpot(n, ns(n), soft_evidence{n});
+end
+clqs = [clqs engine.clq_ass_to_node(soft_nodes)]; 
+
+
+[clpot, seppot] = init_pot(engine, clqs, pot, pot_type, onodes);
+[clpot, seppot] = collect_evidence(engine, clpot, seppot);
+[clpot, seppot] = distribute_evidence(engine, clpot, seppot);
+
+C = length(clpot);
+ll = zeros(1, C);
+for i=1:C
+  [clpot{i}, ll(i)] = normalize_pot(clpot{i});
+end
+loglik = ll(1); % we can extract the likelihood from any clique
+
+engine.clpot = clpot;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/enter_soft_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function [clpot, loglik] = enter_soft_evidence(engine, clique, potential, onodes, pot_type)
+% ENTER_SOFT_EVIDENCE Add the specified potentials to the network (jtree)
+% [clpot, loglik] = enter_soft_evidence(engine, clique, potential, onodes, pot_type, maximize)
+%
+% We multiply potential{i} onto clique(i) before propagating.
+% We return all the modified clique potentials.
+
+% only used by BK!
+
+[clpot, seppot] = init_pot(engine, clique, potential, pot_type, onodes);
+[clpot, seppot] = collect_evidence(engine, clpot, seppot);
+[clpot, seppot] = distribute_evidence(engine, clpot, seppot);
+
+C = length(clpot);
+ll = zeros(1, C);
+for i=1:C
+  [clpot{i}, ll(i)] = normalize_pot(clpot{i});
+end
+loglik = ll(1); % we can extract the likelihood from any clique
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/find_max_config.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+function [mpe, clpot, seppot] = find_max_config(engine, clpot, seppot, evidence)
+% FIND_MAX_CONFIG Backwards pass of Viterbi fro jtree
+% function [mpe, clpot, seppot] = find_max_config(engine, clpot, seppot, evidence)
+% See Cowell99 p98
+
+bnet = bnet_from_engine(engine);
+nnodes = length(bnet.dag);
+mpe = cell(1, nnodes);
+maximize = 1;
+
+c = engine.root_clq;
+pot = struct(clpot{c}); % violate object privacy
+dom = pot.domain;
+[indices, clpot{c}] = find_most_prob_entry(clpot{c});
+mpe(dom) = num2cell(indices);
+
+for n=engine.preorder
+  for c=engine.preorder_children{n}
+    clpot{c} = divide_by_pot(clpot{c}, seppot{n,c}); 
+    seppot{n,c} = marginalize_pot(clpot{n}, engine.separator{n,c}, maximize);
+    clpot{c} = multiply_by_pot(clpot{c}, seppot{n,c});
+    
+    pot = struct(clpot{c}); % violate object privacy
+    dom = pot.domain;
+    [indices, clpot{c}] = find_most_prob_entry(clpot{c});
+    mpe(dom) = num2cell(indices);
+  end
+end
+
+obs_nodes = find(~isemptycell(evidence));
+% indices for observed nodes will be 1 - need to overwrite these
+mpe(obs_nodes) = evidence(obs_nodes);
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/find_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+function mpe = find_mpe(engine, evidence, varargin)
+% FIND_MPE Find the most probable explanation of the data (assignment to the hidden nodes)
+% function mpe = find_mpe(engine, evidence,...)
+%
+% evidence{i} = [] if X(i) is hidden, and otherwise contains its observed value (scalar or column vector).
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% soft    - a cell array of soft/virtual evidence;
+%           soft{i} is a prob. distrib. over i's values, or [] [ cell(1,N) ]
+%
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes(:);
+N = length(bnet.dag);
+
+engine.evidence = evidence;
+  
+% set default params
+exclude = [];
+soft_evidence = cell(1,N);
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'soft',    soft_evidence = args{i+1}; 
+   otherwise,  
+    error(['invalid argument name ' args{i}]);       
+  end
+end
+engine.maximize = 1;
+
+onodes = find(~isemptycell(evidence));
+hnodes = find(isemptycell(evidence));
+pot_type = determine_pot_type(bnet, onodes);
+ if strcmp(pot_type, 'cg')
+  check_for_cd_arcs(onodes, bnet.cnodes, bnet.dag);
+end
+
+hard_nodes = 1:N;
+soft_nodes = find(~isemptycell(soft_evidence));
+S = length(soft_nodes);
+if S > 0
+  assert(pot_type == 'd');
+  assert(mysubset(soft_nodes, bnet.dnodes));
+end
+ 
+% Evaluate CPDs with evidence, and convert to potentials  
+pot = cell(1, N+S);
+for n=1:N
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n);
+  if isempty(bnet.CPD{e})
+    error(['must define CPD ' num2str(e)])
+  else
+    pot{n} = convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence);
+  end
+end
+
+for i=1:S
+  n = soft_nodes(i);
+  pot{N+i} = dpot(n, ns(n), soft_evidence{n});
+end
+clqs = engine.clq_ass_to_node([hard_nodes soft_nodes]); 
+
+[clpot, seppot] = init_pot(engine, clqs, pot, pot_type, onodes);
+[clpot, seppot] = collect_evidence(engine, clpot, seppot);
+mpe = find_max_config(engine, clpot, seppot, evidence); % instead of distribute evidence
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/init_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function [clpot, seppot] = init_pot(engine, clqs, pots, pot_type, onodes, ndx)
+% INIT_POT Initialise potentials with evidence (jtree_inf)
+% function [clpot, seppot] = init_pot(engine, clqs, pots, pot_type, onodes)
+
+cliques = engine.cliques;
+bnet = bnet_from_engine(engine);
+% Set the clique potentials to all 1s
+C = length(cliques);
+clpot = cell(1,C);
+for i=1:C
+  clpot{i} = mk_initial_pot(pot_type, cliques{i}, bnet.node_sizes(:), bnet.cnodes(:), onodes);
+end
+
+% Multiply on specified potentials
+for i=1:length(clqs)
+  c = clqs(i);
+  clpot{c} = multiply_by_pot(clpot{c}, pots{i});
+end
+
+seppot = cell(C,C); % implicitely initialized to 1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/jtree_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,141 @@
+function engine = jtree_inf_engine(bnet, varargin)
+% JTREE_INF_ENGINE Junction tree inference engine
+% engine = jtree_inf_engine(bnet, ...)
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% clusters  - a cell array of sets of nodes we want to ensure are in the same clique (in addition to families) [ {} ]
+% root      - the root of the junction tree will be a clique that contains this set of nodes [N]
+% stages    - stages{t} is a set of nodes we want to eliminate before stages{t+1}, ... [ {1:N} ]
+%
+% e.g., engine = jtree_inf_engine(bnet, 'maximize', 1);
+%
+% For more details on the junction tree algorithm, see
+% - "Probabilistic networks and expert systems", Cowell, Dawid, Lauritzen and Spiegelhalter, Springer, 1999
+% - "Inference in Belief Networks: A procedural guide", C. Huang and A. Darwiche, 
+%      Intl. J. Approximate Reasoning, 15(3):225-263, 1996.
+
+
+% set default params
+N = length(bnet.dag);
+clusters = {};
+root = N;
+stages = { 1:N };
+maximize = 0;
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  if ~isstr(args{1})
+    error('the interface to jtree has changed; now, onodes is not allowed and all optional params must be passed by name')
+  end
+  for i=1:2:nargs
+    switch args{i},
+     case 'clusters', clusters = args{i+1}; 
+     case 'root',     root = args{i+1}; 
+     case 'stages',   stages = args{i+1}; 
+     case 'maximize', maximize = args{i+1};
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+engine = init_fields;
+engine = class(engine, 'jtree_inf_engine', inf_engine(bnet));
+
+engine.maximize = maximize;
+
+onodes = bnet.observed;
+
+%[engine.jtree, dummy, engine.cliques, B, w, elim_order, moral_edges, fill_in_edges, strong] = ...
+%    dag_to_jtree(bnet, onodes, stages, clusters);
+
+porder = determine_elim_constraints(bnet, onodes);
+strong = ~isempty(porder);
+ns = bnet.node_sizes(:);
+ns(onodes) = 1; % observed nodes have only 1 possible value
+[engine.jtree, root2, engine.cliques, B, w] = ...
+    graph_to_jtree(moralize(bnet.dag), ns, porder, stages, clusters);
+
+
+engine.cliques_bitv = B;
+engine.clique_weight = w;
+C = length(engine.cliques);
+engine.clpot = cell(1,C);
+
+% Compute the separators between connected cliques.
+[is,js] = find(engine.jtree > 0);
+engine.separator = cell(C,C);
+for k=1:length(is)
+  i = is(k); j = js(k);
+  engine.separator{i,j} = find(B(i,:) & B(j,:)); % intersect(cliques{i}, cliques{j});
+end
+
+% A node can be a member of many cliques, but is assigned to exactly one, to avoid
+% double-counting its CPD. We assign node i to clique c if c is the "lightest" clique that
+% contains i's family, so it can accomodate its CPD.
+
+engine.clq_ass_to_node = zeros(1, N);
+for i=1:N
+  %c = clq_containing_nodes(engine, family(bnet.dag, i));
+  clqs_containing_family = find(all(B(:,family(bnet.dag, i)), 2)); % all selected columns must be 1
+  c = clqs_containing_family(argmin(w(clqs_containing_family)));  
+  engine.clq_ass_to_node(i) = c; 
+end
+
+% Make the jtree rooted, so there is a fixed message passing order.
+if strong
+  % the last clique is guaranteed to be a strong root
+  % engine.root_clq = length(engine.cliques);
+  
+  % --- 4/17/2010, by Wei Sun (George Mason University):
+  % It has been proved that the last clique is not necessary to be the  
+  % strong root, instead, a clique called interface clique, that contains
+  % all discrete parents and at least one continuous node from a connected
+  % continuous component in a CLG, is guaranteed to be a strong root.
+  engine.root_clq = findroot(bnet, engine.cliques) ;
+else
+  % jtree_dbn_inf_engine requires the root to contain the interface.
+  % This may conflict with the strong root requirement! *********** BUG *************
+  engine.root_clq = clq_containing_nodes(engine, root);
+  if engine.root_clq <= 0
+    error(['no clique contains ' num2str(root)]);
+  end
+end  
+
+[engine.jtree, engine.preorder, engine.postorder] = mk_rooted_tree(engine.jtree, engine.root_clq);
+
+% collect 
+engine.postorder_parents = cell(1,length(engine.postorder));
+for n=engine.postorder(:)'
+  engine.postorder_parents{n} = parents(engine.jtree, n);
+end
+% distribute
+engine.preorder_children = cell(1,length(engine.preorder));
+for n=engine.preorder(:)'
+  engine.preorder_children{n} = children(engine.jtree, n);
+end
+
+  
+
+%%%%%%%%
+
+function engine = init_fields()
+
+engine.jtree = [];
+engine.cliques = [];
+engine.separator = [];
+engine.cliques_bitv = [];
+engine.clique_weight = [];
+engine.clpot = [];
+engine.clq_ass_to_node = [];
+engine.root_clq = [];
+engine.preorder = [];
+engine.postorder = [];
+engine.preorder_children = [];
+engine.postorder_parents = [];
+engine.maximize = [];
+engine.evidence = [];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function marginal = marginal_family(engine, i, add_ev)
+% MARGINAL_FAMILY Compute the marginal on the specified family (jtree)
+% marginal = marginal_family(engine, i)
+
+if nargin < 3, add_ev = 0; end
+assert(~add_ev);
+
+bnet = bnet_from_engine(engine);
+fam = family(bnet.dag, i);
+c = engine.clq_ass_to_node(i);
+marginal = pot_to_marginal(marginalize_pot(engine.clpot{c}, fam));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function marginal = marginal_nodes(engine, query, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (jtree)
+% marginal = marginal_nodes(engine, query, add_ev)
+%
+% 'query' must be a subset of some clique; an error will be raised if not.
+% add_ev is an optional argument; if 1, we will "inflate" the marginal of observed nodes
+% to their original size, adding 0s to the positions which contradict the evidence
+
+if nargin < 3, add_ev = 0; end
+
+c = clq_containing_nodes(engine, query);
+if c == -1
+  error(['no clique contains ' num2str(query)]);
+end
+marginal = pot_to_marginal(marginalize_pot(engine.clpot{c}, query, engine.maximize));
+
+if add_ev
+  bnet = bnet_from_engine(engine);
+  %marginal = add_ev_to_dmarginal(marginal, engine.evidence, bnet.node_sizes);
+  marginal = add_evidence_to_gmarginal(marginal, engine.evidence, bnet.node_sizes, bnet.cnodes);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_inf_engine/set_fields.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function engine = set_fields(engine, varargin)
+% SET_FIELDS Set the fields for a generic engine
+% engine = set_fields(engine, name/value pairs)
+%
+% e.g., engine = set_fields(engine, 'maximize', 1)
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'maximize', engine.maximize = args{i+1};
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/jtree_limid_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@jtree_limid_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes_SS.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@jtree_limid_inf_engine/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/Old/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function [m, pot] = marginal_family(engine, query)
+% MARGINAL_NODES Compute the marginal on the family of the specified node (jtree_limid)
+% [m, pot] = marginal_family(engine, query)
+%
+% query should be a single decision node, or [] (to compute global max expected utility)
+
+bnet = bnet_from_engine(engine);
+if isempty(query)
+  compute_meu = 1;
+  d = bnet.decision_nodes(1); % pick an arbitrary root to collect to
+  fam = []; % marginalize root pot down to a point
+else
+  compute_meu = 0;
+  d = query;
+  assert(myismember(d, bnet.decision_nodes));
+  fam = family(bnet.dag, d);
+end
+
+clpot = init_clpot(bnet, engine.cliques, engine.clq_ass_to_node, engine.evidence, engine.exclude);
+
+% collect to root (clique containing d) 
+C = length(engine.cliques);
+seppot = cell(C, C);    % separators are implicitely initialized to 1s
+for n=engine.postorder{d}(1:end-1)
+  for p=parents(engine.rooted_jtree{d}, n)
+    %clpot{p} = divide_by_pot(clpot{n}, seppot{p,n}); % dividing by 1 is redundant
+    seppot{p,n} = marginalize_pot(clpot{n}, engine.separator{p,n});
+    clpot{p} = multiply_by_pot(clpot{p}, seppot{p,n});
+  end
+end
+
+root = engine.clq_ass_to_node(d);
+assert(root == engine.postorder{d}(end));
+pot = marginalize_pot(clpot{root}, fam);
+m = pot_to_marginal(pot);
+
+%%%%%%%%%%%
+
+
+function clpot = init_clpot(bnet, cliques, clq_ass_to_node, evidence, exclude)
+
+% Set the clique potentials to all 1s
+C = length(cliques);
+clpot = cell(1, C);
+ns = bnet.node_sizes;
+for i=1:C
+  clpot{i} = upot(cliques{i}, ns(cliques{i}));
+end
+
+N = length(bnet.dag);
+nodes = mysetdiff(1:N, exclude);
+
+for n=nodes(:)'
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n);
+  c = clq_ass_to_node(n);
+  pot = convert_to_pot(bnet.CPD{e}, 'u', ns, fam, evidence);
+  clpot{c} = multiply_by_pot(clpot{c}, pot);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/Old/marginal_nodes_SS.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function [pot, MEU] = marginal_nodes(engine, d)
+
+C = length(cliques);
+%clpot = init_clpot(limid, cliques, d, clq_ass_to_node);
+clpot = init_clpot(limid, cliques, [], clq_ass_to_node);
+
+% collect to root
+if 1
+  % HUGIN
+  seppot = cell(C, C);    % separators are implicitely initialized to 1s
+  for n=postorder{di}(1:end-1)
+    for p=parents(rooted_jtree{di}, n)
+      %clpot{p} = divide_by_pot(clpot{n}, seppot{p,n}); % dividing by 1 is redundant
+      seppot{p,n} = marginalize_pot(clpot{n}, separator{p,n});
+      clpot{p} = multiply_by_pot(clpot{p}, seppot{p,n});
+    end
+  end
+else
+  % Shafer-Shenoy
+  msg = cell(C,C);
+  for n=postorder{di}(1:end-1)
+    for c=children(rooted_jtree{di}, n)
+      clpot{n} = multiply_by_pot(clpot{n}, msg{c,n});
+    end
+    p = parents(rooted_jtree{di}, n);
+    %msg{n,p} = marginalize_pot(clpot{n}, cliques{p});
+    msg{n,p} = marginalize_pot(clpot{n}, separator{n,p});
+  end
+  root = clq_ass_to_node(d);
+  n=postorder{di}(end);
+  assert(n == root);
+  for c=children(rooted_jtree{di}, n)
+    clpot{n} = multiply_by_pot(clpot{n}, msg{c,n});
+  end
+end	
+
+fam = family(limid.dag, d);
+pot = marginalize_pot(clpot{root}, fam);
+
+%%%%%%%
+jpot = compute_joint_pot_limid(limid);
+pot2 = marginalize_pot(jpot, fam);
+assert(approxeq_pot(pot, pot2))
+%%%%%%
+
+[policy, score] = extract_policy(pot);
+
+e = limid.equiv_class(d);
+limid.CPD{e} = set_params(limid.CPD{e}, 'policy', policy);
+
+  
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function engine = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (jtree_limid)
+% engine = enter_evidence(engine, evidence, ...)
+%
+% evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value.
+%
+% The list below gives optional arguments [default value in brackets].      
+%
+% exclude - list of nodes whose potential will not be included in the joint [ [] ]
+%
+% e.g., engine = enter_evidence(engine, ev, 'exclude', 3)
+
+exclude = [];
+
+if nargin >= 3
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'exclude', exclude = args{i+1};
+     otherwise,
+      error(['invalid argument name ' args{i}]);
+    end
+  end
+end
+  
+engine.exclude = exclude;
+engine.evidence = evidence;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/jtree_limid_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function engine = jtree_limid_inf_engine(bnet)
+% JTREE_LIMID_INF_ENGINE Make a junction tree engine for use by solve_limid
+% engine = jtree_limid_inf_engine(bnet)
+%
+% This engine is designed to compute marginals on decision nodes
+
+
+MG = moralize(bnet.dag);
+% We do not remove the utility nodes, because that complicates the book-keeping.
+% Leaving them in will not introduce any un-necessary triangulation arcs, because they are always leaves.
+% Also, since utility nodes have size 1, they do not increase the size of the potentials.
+
+ns = bnet.node_sizes;
+elim_order = best_first_elim_order(MG, ns);
+[MTG, engine.cliques]  = triangulate(MG, elim_order);
+[engine.jtree, root, B, w] = cliques_to_jtree(engine.cliques, ns);
+
+% A node can be a member of many cliques, but is assigned to exactly one, to avoid
+% double-counting its CPD. We assign node i to clique c if c is the "lightest" clique that
+% contains i's family, so it can accomodate its CPD.
+N = length(bnet.dag);
+engine.clq_ass_to_node = zeros(1, N);
+for i=1:N
+  clqs_containing_family = find(all(B(:,family(bnet.dag, i)), 2)); % all selected columns must be 1
+  c = clqs_containing_family(argmin(w(clqs_containing_family)));  
+  engine.clq_ass_to_node(i) = c; 
+end
+
+
+% Compute the separators between connected cliques.
+[is,js] = find(engine.jtree > 0);
+num_cliques = length(engine.cliques);
+engine.separator = cell(num_cliques, num_cliques);
+for k=1:length(is)
+  i = is(k); j = js(k);
+  engine.separator{i,j} = find(B(i,:) & B(j,:)); % intersect(cliques{i}, cliques{j});
+end
+
+
+% create |D| different rooted jtree's
+engine.rooted_jtree = cell(1, N);
+engine.preorder = cell(1, N);
+engine.postorder = cell(1, N);
+for d=bnet.decision_nodes(:)'
+  root = engine.clq_ass_to_node(d);
+  [engine.rooted_jtree{d}, engine.preorder{d}, engine.postorder{d}] = mk_rooted_tree(engine.jtree, root);
+end
+
+engine.exclude = [];
+engine.evidence = [];
+
+engine = class(engine, 'jtree_limid_inf_engine', inf_engine(bnet));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function [m, pot] = marginal_family(engine, query)
+% MARGINAL_NODES Compute the marginal on the family of the specified node (jtree_limid)
+% [m, pot] = marginal_family(engine, query)
+%
+% query should be a single decision node
+
+bnet = bnet_from_engine(engine);
+d = query;
+assert(myismember(d, bnet.decision_nodes));
+fam = family(bnet.dag, d);
+
+clpot = init_clpot(bnet, engine.cliques, engine.clq_ass_to_node, engine.evidence, engine.exclude);
+
+% collect to root (clique containing d) 
+C = length(engine.cliques);
+seppot = cell(C, C);    % separators are implicitely initialized to 1s
+for n=engine.postorder{d}(1:end-1)
+  for p=parents(engine.rooted_jtree{d}, n)
+    %clpot{p} = divide_by_pot(clpot{n}, seppot{p,n}); % dividing by 1 is redundant
+    seppot{p,n} = marginalize_pot(clpot{n}, engine.separator{p,n});
+    clpot{p} = multiply_by_pot(clpot{p}, seppot{p,n});
+  end
+end
+
+root = engine.clq_ass_to_node(d);
+assert(root == engine.postorder{d}(end));
+pot = marginalize_pot(clpot{root}, fam);
+m = pot_to_marginal(pot);
+
+%%%%%%%%%%%
+
+
+function clpot = init_clpot(bnet, cliques, clq_ass_to_node, evidence, exclude)
+
+% Set the clique potentials to all 1s
+C = length(cliques);
+clpot = cell(1, C);
+ns = bnet.node_sizes;
+for i=1:C
+  clpot{i} = upot(cliques{i}, ns(cliques{i}));
+end
+
+N = length(bnet.dag);
+nodes = mysetdiff(1:N, exclude);
+
+for n=nodes(:)'
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n);
+  c = clq_ass_to_node(n);
+  pot = convert_to_pot(bnet.CPD{e}, 'u', fam(:), evidence);
+  clpot{c} = multiply_by_pot(clpot{c}, pot);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_limid_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function [m, pot] = marginal_nodes(engine, query)
+% MARGINAL_NODES Compute the marginal on the specified nodes (jtree_limid)
+% [m, pot] = marginal_nodes(engine, query)
+%
+% query should be a subset of a family of a decision node
+
+if isempty(query)
+  bnet = bnet_from_engine(engine);
+  d = bnet.decision_nodes(1); % pick an arbitrary decision node
+  [dummy, big_pot] = marginal_family(engine, d); 
+else
+  [dummy, big_pot] = marginal_family(engine, query);
+end
+pot = marginalize_pot(big_pot, query);
+m = pot_to_marginal(pot);
+
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/enter_evidence.m/1.1.1.1/Mon Jun 17 20:30:02 2002//
+/find_mpe.m/1.1.1.1/Mon Jun 17 20:29:40 2002//
+/jtree_mnet_inf_engine.m/1.1.1.1/Sat Jan 18 22:13:32 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@jtree_mnet_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,82 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (jtree)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i} = [] if X(i) is hidden, and otherwise contains its observed value (scalar or column vector).
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% soft    - a cell array of soft/virtual evidence;
+%           soft{i} is a prob. distrib. over i's values, or [] [ cell(1,N) ]
+%
+% e.g., engine = enter_evidence(engine, ev, 'soft', soft_ev)
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes(:);
+N = length(bnet.dag);
+
+engine.evidence = evidence; % store this for marginal_nodes with add_ev option
+engine.maximize = 0;
+
+% set default params
+exclude = [];
+soft_evidence = cell(1,N);
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'soft',    soft_evidence = args{i+1}; 
+   otherwise,  
+    error(['invalid argument name ' args{i}]);       
+  end
+end
+
+onodes = find(~isemptycell(evidence));
+hnodes = find(isemptycell(evidence));
+pot_type = determine_pot_type(bnet, onodes);
+ if strcmp(pot_type, 'cg')
+  check_for_cd_arcs(onodes, bnet.cnodes, bnet.dag);
+end
+
+% Evaluate CPDs with evidence, and convert to potentials  
+pot = cell(1, N);
+for n=1:N
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n);
+  if isempty(bnet.CPD{e})
+    error(['must define CPD ' num2str(e)])
+  else
+    pot{n} = convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence);
+  end
+end
+clqs = engine.clq_ass_to_node(1:N);
+
+% soft evidence
+soft_nodes = find(~isemptycell(soft_evidence));
+S = length(soft_nodes);
+if S > 0
+  assert(pot_type == 'd');
+  assert(mysubset(soft_nodes, bnet.dnodes));
+end
+for i=1:S
+  n = soft_nodes(i);
+  pot{end+1} = dpot(n, ns(n), soft_evidence{n});
+end
+clqs = [clqs engine.clq_ass_to_node(soft_nodes)]; 
+
+
+[clpot, seppot] = init_pot(engine, clqs, pot, pot_type, onodes);
+[clpot, seppot] = collect_evidence(engine, clpot, seppot);
+[clpot, seppot] = distribute_evidence(engine, clpot, seppot);
+
+C = length(clpot);
+ll = zeros(1, C);
+for i=1:C
+  [clpot{i}, ll(i)] = normalize_pot(clpot{i});
+end
+loglik = ll(1); % we can extract the likelihood from any clique
+
+engine.clpot = clpot;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/find_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+function mpe = find_mpe(engine, evidence, varargin)
+% FIND_MPE Find the most probable explanation of the data (assignment to the hidden nodes)
+% function mpe = find_mpe(engine, evidence,...)
+%
+% evidence{i} = [] if X(i) is hidden, and otherwise contains its observed value (scalar or column vector).
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% soft    - a cell array of soft/virtual evidence;
+%           soft{i} is a prob. distrib. over i's values, or [] [ cell(1,N) ]
+%
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes(:);
+N = length(bnet.dag);
+
+engine.evidence = evidence;
+  
+% set default params
+exclude = [];
+soft_evidence = cell(1,N);
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'soft',    soft_evidence = args{i+1}; 
+   otherwise,  
+    error(['invalid argument name ' args{i}]);       
+  end
+end
+engine.maximize = 1;
+
+onodes = find(~isemptycell(evidence));
+hnodes = find(isemptycell(evidence));
+pot_type = determine_pot_type(bnet, onodes);
+ if strcmp(pot_type, 'cg')
+  check_for_cd_arcs(onodes, bnet.cnodes, bnet.dag);
+end
+
+hard_nodes = 1:N;
+soft_nodes = find(~isemptycell(soft_evidence));
+S = length(soft_nodes);
+if S > 0
+  assert(pot_type == 'd');
+  assert(mysubset(soft_nodes, bnet.dnodes));
+end
+ 
+% Evaluate CPDs with evidence, and convert to potentials  
+pot = cell(1, N+S);
+for n=1:N
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n);
+  if isempty(bnet.CPD{e})
+    error(['must define CPD ' num2str(e)])
+  else
+    pot{n} = convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence);
+  end
+end
+
+for i=1:S
+  n = soft_nodes(i);
+  pot{N+i} = dpot(n, ns(n), soft_evidence{n});
+end
+clqs = engine.clq_ass_to_node([hard_nodes soft_nodes]); 
+
+[clpot, seppot] = init_pot(engine, clqs, pot, pot_type, onodes);
+[clpot, seppot] = collect_evidence(engine, clpot, seppot);
+mpe = find_max_config(engine, clpot, seppot);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_mnet_inf_engine/jtree_mnet_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,101 @@
+function engine = jtree_mnet_inf_engine(model, varargin)
+% JTREE_MNET_INF_ENGINE Junction tree inference engine for Markov nets
+% engine = jtree_inf_engine(mnet, ...)
+%
+
+% set default params
+N = length(mnet.graph);
+root = N;
+
+engine = init_fields;
+engine = class(engine, 'jtree_mnet_inf_engine', inf_engine(bnet));
+
+onodes = bnet.observed;
+if is_mnet(bnet)
+  MG = bnet.graph;
+else
+  error('should be a mnet')
+end
+
+%[engine.jtree, dummy, engine.cliques, B, w, elim_order, moral_edges, fill_in_edges, strong] = ...
+%    dag_to_jtree(bnet, onodes, stages, clusters);
+
+porder = determine_elim_constraints(bnet, onodes);
+strong = ~isempty(porder);
+ns = bnet.node_sizes(:);
+ns(onodes) = 1; % observed nodes have only 1 possible value
+[engine.jtree, root2, engine.cliques, B, w] = ...
+    graph_to_jtree(MG, ns, porder, stages, clusters);
+
+engine.cliques_bitv = B;
+engine.clique_weight = w;
+C = length(engine.cliques);
+engine.clpot = cell(1,C);
+
+% Compute the separators between connected cliques.
+[is,js] = find(engine.jtree > 0);
+engine.separator = cell(C,C);
+for k=1:length(is)
+  i = is(k); j = js(k);
+  engine.separator{i,j} = find(B(i,:) & B(j,:)); % intersect(cliques{i}, cliques{j});
+end
+
+% A node can be a member of many cliques, but is assigned to exactly one, to avoid
+% double-counting its CPD. We assign node i to clique c if c is the "lightest" clique that
+% contains i's family, so it can accomodate its CPD.
+
+engine.clq_ass_to_node = zeros(1, N);
+for i=1:N
+  %c = clq_containing_nodes(engine, family(bnet.dag, i));
+  clqs_containing_family = find(all(B(:,family(bnet.dag, i)), 2)); % all selected columns must be 1
+  c = clqs_containing_family(argmin(w(clqs_containing_family)));  
+  engine.clq_ass_to_node(i) = c; 
+end
+
+% Make the jtree rooted, so there is a fixed message passing order.
+if strong
+  % the last clique is guaranteed to be a strong root
+  engine.root_clq = length(engine.cliques);
+else
+  % jtree_dbn_inf_engine requires the root to contain the interface.
+  % This may conflict with the strong root requirement! *********** BUG *************
+  engine.root_clq = clq_containing_nodes(engine, root);
+  if engine.root_clq <= 0
+    error(['no clique contains ' num2str(root)]);
+  end
+end  
+
+[engine.jtree, engine.preorder, engine.postorder] = mk_rooted_tree(engine.jtree, engine.root_clq);
+
+% collect 
+engine.postorder_parents = cell(1,length(engine.postorder));
+for n=engine.postorder(:)'
+  engine.postorder_parents{n} = parents(engine.jtree, n);
+end
+% distribute
+engine.preorder_children = cell(1,length(engine.preorder));
+for n=engine.preorder(:)'
+  engine.preorder_children{n} = children(engine.jtree, n);
+end
+
+  
+
+%%%%%%%%
+
+function engine = init_fields()
+
+engine.jtree = [];
+engine.cliques = [];
+engine.separator = [];
+engine.cliques_bitv = [];
+engine.clique_weight = [];
+engine.clpot = [];
+engine.clq_ass_to_node = [];
+engine.root_clq = [];
+engine.preorder = [];
+engine.postorder = [];
+engine.preorder_children = [];
+engine.postorder_parents = [];
+engine.maximize = [];
+engine.evidence = [];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+/cliques_from_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/clq_containing_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/collect_evidence.c/1.1.1.1/Wed May 29 15:59:56 2002//
+/distribute_evidence.c/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/enter_soft_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/init_pot.c/1.1.1.1/Wed May 29 15:59:56 2002//
+/jtree_sparse_inf_engine.m/1.1.1.1/Sat Jan 18 22:11:32 2003//
+/marginal_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/set_fields.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@jtree_sparse_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/cliques_from_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function cliques = cliques_from_engine(engine)
+% CLIQUES_FROM_ENGINE Return the cliques stored inside the inf. engine (jtree)
+% cliques = cliques_from_engine(engine)
+
+cliques = engine.cliques;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/clq_containing_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function c = clq_containing_nodes(engine, nodes, fam)
+% CLQ_CONTAINING_NODES Find the lightest clique (if any) that contains the set of nodes
+% c = clq_containing_nodes(engine, nodes, family)
+%
+% If the optional 'family' argument is specified, it means nodes = family(nodes(end)).
+% (This is useful since clq_ass_to_node is not accessible to outsiders.)
+% Returns c=-1 if there is no such clique.
+
+if nargin < 3, fam = 0; else fam = 1; end
+
+if length(nodes)==1
+  c = engine.clq_ass_to_node(nodes(1));
+%elseif fam
+%  c = engine.clq_ass_to_node(nodes(end));
+else
+  B = engine.cliques_bitv;
+  w = engine.clique_weight;
+  clqs = find(all(B(:,nodes), 2)); % all selected columns must be 1
+  if isempty(clqs)
+    c = -1;
+  else
+    c = clqs(argmin(w(clqs)));     
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/collect_evidence.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,634 @@
+/* C mex for collect_evidence.c in @jtree_sparse_inf_engine directory */
+/* File enter_evidence.m in directory @jtree_sparse_inf_engine call it*/
+
+/******************************************/
+/* collect_evidence has 3 input & 2 output*/
+/* engine                                 */
+/* clpot                                  */
+/* seppot                                 */
+/*                                        */
+/* clpot                                  */
+/* seppot                                 */
+/******************************************/
+
+#include <math.h>
+#include <stdlib.h>
+#include "mex.h"
+
+int compare(const void* src1, const void* src2){
+	int i1 = *(int*)src1 ;
+	int i2 = *(int*)src2 ;
+	return i1-i2 ;
+}
+
+void ind_subv(int index, const int *cumprod, int n, int *bsubv){
+	int i;
+
+	for (i = n-1; i >= 0; i--) {
+		bsubv[i] = ((int)floor(index / cumprod[i]));
+		index = index % cumprod[i];
+	}
+}
+
+int subv_ind(const int n, const int *cumprod, const int *subv){
+	int i, index=0;
+
+	for(i=0; i<n; i++){
+		index += subv[i] * cumprod[i];
+	}
+	return index;
+}
+
+void compute_fixed_weight(int *weight, const double *pbSize, const int *dmask, const int *bCumprod, const int ND, const int diffdim){
+	int i, j;
+	int *eff_cumprod, *subv, *diffsize, *diff_cumprod;
+
+	subv = malloc(diffdim * sizeof(int));
+	eff_cumprod = malloc(diffdim * sizeof(int));
+	diffsize = malloc(diffdim * sizeof(int));
+	diff_cumprod = malloc(diffdim * sizeof(int));
+	for(i=0; i<diffdim; i++){
+		eff_cumprod[i] = bCumprod[dmask[i]];
+		diffsize[i] = (int)pbSize[dmask[i]];
+	}
+	diff_cumprod[0] = 1;
+	for(i=0; i<diffdim-1; i++){
+		diff_cumprod[i+1] = diff_cumprod[i] * diffsize[i];
+	}
+	for(i=0; i<ND; i++){
+		ind_subv(i, diff_cumprod, diffdim, subv);
+		weight[i] = 0;
+		for(j=0; j<diffdim; j++){
+			weight[i] += eff_cumprod[j] * subv[j];
+		}
+	}
+	free(eff_cumprod);
+	free(subv);
+	free(diffsize);
+	free(diff_cumprod);
+}
+
+void reset_nzmax(mxArray *spArray, const int old_nzmax, const int new_nzmax){
+	double *ptr;
+	void   *newptr;
+	int    *ir, *jc;
+	int    nbytes;
+
+	if(new_nzmax == old_nzmax) return;
+	nbytes = new_nzmax * sizeof(*ptr);
+	ptr = mxGetPr(spArray);
+	newptr = mxRealloc(ptr, nbytes);
+	mxSetPr(spArray, newptr);
+	nbytes = new_nzmax * sizeof(*ir);
+	ir = mxGetIr(spArray);
+	newptr = mxRealloc(ir, nbytes);
+	mxSetIr(spArray, newptr);
+	jc = mxGetJc(spArray);
+	jc[0] = 0;
+	jc[1] = new_nzmax;
+	mxSetNzmax(spArray, new_nzmax);
+}
+
+mxArray* convert_ill_table_to_sparse(const double *Table, const int *sequence, const int nzCounts, const int N){
+	mxArray *spTable;
+	int     i, temp, *irs, *jcs, count=0;
+	double  *sr;
+
+	spTable = mxCreateSparse(N, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+		irs[i] = sequence[count];
+		count++;
+		temp = sequence[count];
+		sr[i] = Table[temp];
+		count++;
+	}
+	return spTable;
+}
+
+void multiply_null_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, count1, match, temp, bdim, sdim, diffdim, NB, NS, ND, NZB, NZS, bindex, sindex, nzCounts=0;
+	int     *samemask, *diffmask, *sir, *sjc, *bCumprod, *sCumprod, *ssubv, *sequence, *weight;
+	double  *bigTable, *pbDomain, *psDomain, *pbSize, *psSize, *spr, *bpr;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	if(sdim == 0){
+		pTemp = mxCreateSparse(NB, 1, NB, mxREAL);
+		mxSetField(bigPot, 0, "T", pTemp);
+		bpr = mxGetPr(pTemp);
+		sir = mxGetIr(pTemp);
+		sjc = mxGetJc(pTemp);
+		sjc[0] = 0;
+		sjc[1] = NB;
+		for(i=0; i<NB; i++){
+			bpr[i] = *spr;
+			sir[i] = i;
+		}	
+		return;
+	}
+
+	NS = 1;
+	for(i=0; i<sdim; i++){
+		NS *= (int)psSize[i];
+	}
+	ND = NB / NS;
+
+	if(ND == 1){
+		pTemp1 = mxGetField(smallPot, 0, "T");
+		pTemp = mxDuplicateArray(pTemp1);
+		mxSetField(bigPot, 0, "T", pTemp);
+		return;
+	}
+
+
+	NZB = ND * NZS;
+
+	diffdim = bdim - sdim;
+	sequence = malloc(NZB * 2 * sizeof(int));
+	bigTable = malloc(NZB * sizeof(double));
+	samemask = malloc(sdim * sizeof(int));
+	diffmask = malloc(diffdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	weight = malloc(ND * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	count1 = 0;
+	for(i=0; i<bdim; i++){
+		match = 0;
+		for(j=0; j<sdim; j++){
+			if(pbDomain[i] == psDomain[j]){
+				samemask[count] = i;
+				match = 1;
+				count++;
+				break;
+			}
+		}
+		if(match == 0){
+			diffmask[count1] = i; 
+			count1++;
+		}
+	}
+
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	count = 0;
+	compute_fixed_weight(weight, pbSize, diffmask, bCumprod, ND, diffdim);
+	for(i=0; i<NZS; i++){
+		sindex = sir[i];
+		ind_subv(sindex, sCumprod, sdim, ssubv);
+		temp = 0;
+		for(j=0; j<sdim; j++){
+			temp += ssubv[j] * bCumprod[samemask[j]];
+		}
+		for(j=0; j<ND; j++){
+			bindex = weight[j] + temp;
+			bigTable[nzCounts] = spr[i];
+			sequence[count] = bindex;
+			count++;
+			sequence[count] = nzCounts;
+			nzCounts++;
+			count++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	qsort(sequence, nzCounts, sizeof(int) * 2, compare);
+	pTemp = convert_ill_table_to_sparse(bigTable, sequence, nzCounts, NB);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(sequence); 
+	free(bigTable);
+	free(samemask);
+	free(diffmask);
+	free(bCumprod);
+	free(sCumprod);
+	free(weight);
+	free(ssubv);
+}
+
+void multiply_spPot_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, NZS, position, bindex, sindex, nzCounts=0;
+	int     *mask, *result, *bir, *sir, *rir, *bjc, *sjc, *rjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, *rpr;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	if(sdim == 0){
+		for(i=0; i<NZB; i++){
+			bpr[i] *= *spr;
+		}	
+		return;
+	}
+
+	pTemp1 = mxCreateSparse(NB, 1, NZB, mxREAL);
+	rpr = mxGetPr(pTemp1);
+	rir = mxGetIr(pTemp1);
+	rjc = mxGetJc(pTemp1);
+	rjc[0] = 0;
+	rjc[1] = NZB;
+
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sir, NZS, sizeof(int), compare);
+		if(result){
+			position = result - sir;
+			rpr[nzCounts] = bpr[i] * spr[position];
+			rir[nzCounts] = bindex;
+			nzCounts++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	reset_nzmax(pTemp1, NZB, nzCounts);
+	mxSetField(bigPot, 0, "T", pTemp1);
+
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+mxArray* marginal_null_to_spPot(const mxArray *bigPot, const mxArray *sDomain, const int maximize){
+	int     i, j, count, bdim, sdim, NB, NS, ND;
+	int     *mask, *sir, *sjc;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *spr;
+	mxArray *pTemp, *smallPot;
+	const char *field_names[] = {"domain", "T", "sizes"};
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	psDomain = mxGetPr(sDomain);
+	sdim = mxGetNumberOfElements(sDomain);
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+
+	smallPot = mxCreateStructMatrix(1, 1, 3, field_names);
+	pTemp = mxDuplicateArray(sDomain);
+	mxSetField(smallPot, 0, "domain", pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	if(sdim == 0){
+		pTemp = mxCreateSparse(1, 1, 1, mxREAL);
+		mxSetField(smallPot, 0, "T", pTemp);
+		spr = mxGetPr(pTemp);
+		sir = mxGetIr(pTemp);
+		sjc = mxGetJc(pTemp);
+		*spr = 0;
+		*sir = 0;
+		sjc[0] = 0;
+		sjc[1] = 1;
+		if(maximize) *spr = 1;
+		else *spr = NB;
+
+		pTemp = mxCreateDoubleMatrix(1, 1, mxREAL);
+		*mxGetPr(pTemp) = 1;
+		mxSetField(smallPot, 0, "sizes", pTemp);
+		return smallPot;
+	}
+
+	mask = malloc(sdim * sizeof(int));
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	pTemp = mxCreateDoubleMatrix(1, count, mxREAL);
+	psSize = mxGetPr(pTemp);
+	NS = 1;
+	for(i=0; i<count; i++){
+		psSize[i] = pbSize[mask[i]];
+		NS *= (int)psSize[i];
+	}
+	mxSetField(smallPot, 0, "sizes", pTemp);
+
+	ND = NB / NS;
+
+	pTemp = mxCreateSparse(NS, 1, NS, mxREAL);
+	mxSetField(smallPot, 0, "T", pTemp);
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	if(maximize){
+		for(i=0; i<NS; i++){
+			spr[i] = 1;
+			sir[i] = i;
+		}
+	}
+	else{
+		for(i=0; i<NS; i++){
+			spr[i] = ND;
+			sir[i] = i;
+		}
+	}
+	sjc[0] = 0;
+	sjc[1] = NS;
+
+	free(mask);
+	return smallPot;
+}
+
+mxArray* marginal_spPot_to_spPot(const mxArray *bigPot, const mxArray *sDomain, const int maximize){
+	int     i, j, count, bdim, sdim, NB, NS, NZB, position, bindex, sindex, nzCounts=0;
+	int     *mask, *sequence, *result, *bir, *bjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *sTable, *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr;
+	mxArray *pTemp, *smallPot;
+	const char *field_names[] = {"domain", "T", "sizes"};
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	psDomain = mxGetPr(sDomain);
+	sdim = mxGetNumberOfElements(sDomain);
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	smallPot = mxCreateStructMatrix(1, 1, 3, field_names);
+	pTemp = mxDuplicateArray(sDomain);
+	mxSetField(smallPot, 0, "domain", pTemp);
+
+	if(sdim == 0){
+		pTemp = mxCreateSparse(1, 1, 1, mxREAL);
+		mxSetField(smallPot, 0, "T", pTemp);
+		spr = mxGetPr(pTemp);
+		bir = mxGetIr(pTemp);
+		bjc = mxGetJc(pTemp);
+		*spr = 0;
+		*bir = 0;
+		bjc[0] = 0;
+		bjc[1] = 1;
+		if(maximize){
+			for(i=0; i<NZB; i++){
+				*spr = (*spr < bpr[i])? bpr[i] : *spr;
+			}
+		}
+		else{
+			for(i=0; i<NZB; i++){
+				*spr += bpr[i];
+			}
+		}
+
+		pTemp = mxCreateDoubleMatrix(1, 1, mxREAL);
+		*mxGetPr(pTemp) = 1;
+		mxSetField(smallPot, 0, "sizes", pTemp);
+		return smallPot;
+	}
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	mask = malloc(sdim * sizeof(int));
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	pTemp = mxCreateDoubleMatrix(1, count, mxREAL);
+	psSize = mxGetPr(pTemp);
+	NS = 1;
+	for(i=0; i<count; i++){
+		psSize[i] = pbSize[mask[i]];
+		NS *= (int)psSize[i];
+	}
+	mxSetField(smallPot, 0, "sizes", pTemp);
+
+
+	sTable = malloc(NZB * sizeof(double));
+	sequence = malloc(NZB * 2 * sizeof(double));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	for(i=0; i<NZB; i++)sTable[i] = 0;
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	count = 0;
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sequence, nzCounts, sizeof(int)*2, compare);
+		if(result){
+			position = (result - sequence) / 2;
+			if(maximize) 
+				sTable[position] = (sTable[position] < bpr[i]) ? bpr[i] : sTable[position];
+			else sTable[position] += bpr[i];
+		}
+		else {
+			if(maximize) 
+				sTable[nzCounts] = (sTable[nzCounts] < bpr[i]) ? bpr[i] : sTable[nzCounts];
+			else sTable[nzCounts] += bpr[i];
+			sequence[count] = sindex;
+			count++;
+			sequence[count] = nzCounts;
+			nzCounts++;
+			count++;
+		}
+	}
+	
+	qsort(sequence, nzCounts, sizeof(int) * 2, compare);
+	pTemp = convert_ill_table_to_sparse(sTable, sequence, nzCounts, NS);
+	mxSetField(smallPot, 0, "T", pTemp);
+
+	free(sTable);
+	free(sequence);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+
+	return smallPot;
+}
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, n, p, np, pn, loop, loops, nCliques, temp, maximize;
+	int     *collect_order;
+	double  *pr, *pr1;
+	mxArray *pTemp, *pTemp1, *pPostP, *pClpot, *pSeppot, *pSeparator;
+
+	pTemp = mxGetField(prhs[0], 0, "cliques");
+	nCliques = mxGetNumberOfElements(pTemp);
+	loops = nCliques - 1;
+	pTemp = mxGetField(prhs[0], 0, "maximize");
+	maximize = (int)mxGetScalar(pTemp);
+	pSeparator = mxGetField(prhs[0], 0, "separator");
+
+	collect_order = malloc(2 * loops * sizeof(int));
+
+	pTemp = mxGetField(prhs[0], 0, "postorder");
+	pr = mxGetPr(pTemp);
+	pPostP = mxGetField(prhs[0], 0, "postorder_parents");
+	for(i=0; i<loops; i++){
+		temp = (int)pr[i] - 1;
+		pTemp = mxGetCell(pPostP, temp);
+		pr1 = mxGetPr(pTemp);
+		collect_order[i] = (int)pr1[0] - 1;
+		collect_order[i+loops] = temp;
+	}
+
+	plhs[0] = mxDuplicateArray(prhs[1]);
+	plhs[1] = mxDuplicateArray(prhs[2]);
+
+	for(loop=0; loop<loops; loop++){
+		p = collect_order[loop];
+		n = collect_order[loop+loops];
+		np = p * nCliques + n;
+		pn = n * nCliques + p;
+		pClpot = mxGetCell(plhs[0], n);
+		pTemp1 = mxGetField(pClpot, 0, "T");
+		pTemp = mxGetCell(pSeparator, pn);
+		if(pTemp1)
+			pSeppot = marginal_spPot_to_spPot(pClpot, pTemp, maximize);
+		else pSeppot = marginal_null_to_spPot(pClpot, pTemp, maximize);
+		mxSetCell(plhs[1], pn, pSeppot);
+
+		pClpot = mxGetCell(plhs[0], p);
+		pTemp1 = mxGetField(pClpot, 0, "T");
+		if(pTemp1)
+			multiply_spPot_by_spPot(pClpot, pSeppot);
+		else multiply_null_by_spPot(pClpot, pSeppot);
+	}
+	free(collect_order);
+}
+	
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/distribute_evidence.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,618 @@
+/* C mex for distribute_evidence.c in @jtree_sparse_inf_engine directory*/
+/* File enter_evidence.m in directory @jtree_sparse_inf_engine call it  */
+
+/*********************************************/
+/* distribute_evidence has 3 input & 2 output*/
+/* engine                                    */
+/* clpot                                     */
+/* seppot                                    */
+/*                                           */
+/* clpot                                     */
+/* seppot                                    */
+/*********************************************/
+
+#include <math.h>
+#include <stdlib.h>
+#include "mex.h"
+
+int compare(const void* src1, const void* src2){
+	int i1 = *(int*)src1 ;
+	int i2 = *(int*)src2 ;
+	return i1-i2 ;
+}
+
+void ind_subv(int index, const int *cumprod, int n, int *bsubv){
+	int i;
+
+	for (i = n-1; i >= 0; i--) {
+		bsubv[i] = ((int)floor(index / cumprod[i]));
+		index = index % cumprod[i];
+	}
+}
+
+int subv_ind(const int n, const int *cumprod, const int *subv){
+	int i, index=0;
+
+	for(i=0; i<n; i++){
+		index += subv[i] * cumprod[i];
+	}
+	return index;
+}
+
+void reset_nzmax(mxArray *spArray, const int old_nzmax, const int new_nzmax){
+	double *ptr;
+	void   *newptr;
+	int    *ir, *jc;
+	int    nbytes;
+
+	if(new_nzmax == old_nzmax) return;
+	nbytes = new_nzmax * sizeof(*ptr);
+	ptr = mxGetPr(spArray);
+	newptr = mxRealloc(ptr, nbytes);
+	mxSetPr(spArray, newptr);
+	nbytes = new_nzmax * sizeof(*ir);
+	ir = mxGetIr(spArray);
+	newptr = mxRealloc(ir, nbytes);
+	mxSetIr(spArray, newptr);
+	jc = mxGetJc(spArray);
+	jc[0] = 0;
+	jc[1] = new_nzmax;
+	mxSetNzmax(spArray, new_nzmax);
+}
+
+void compute_fixed_weight(int *weight, const double *pbSize, const int *dmask, const int *bCumprod, const int ND, const int diffdim){
+	int i, j;
+	int *eff_cumprod, *subv, *diffsize, *diff_cumprod;
+
+	subv = malloc(diffdim * sizeof(int));
+	eff_cumprod = malloc(diffdim * sizeof(int));
+	diffsize = malloc(diffdim * sizeof(int));
+	diff_cumprod = malloc(diffdim * sizeof(int));
+	for(i=0; i<diffdim; i++){
+		eff_cumprod[i] = bCumprod[dmask[i]];
+		diffsize[i] = (int)pbSize[dmask[i]];
+	}
+	diff_cumprod[0] = 1;
+	for(i=0; i<diffdim-1; i++){
+		diff_cumprod[i+1] = diff_cumprod[i] * diffsize[i];
+	}
+	for(i=0; i<ND; i++){
+		ind_subv(i, diff_cumprod, diffdim, subv);
+		weight[i] = 0;
+		for(j=0; j<diffdim; j++){
+			weight[i] += eff_cumprod[j] * subv[j];
+		}
+	}
+	free(eff_cumprod);
+	free(subv);
+	free(diffsize);
+	free(diff_cumprod);
+}
+
+mxArray* convert_ill_table_to_sparse(const double *Table, const int *sequence, const int nzCounts, const int N){
+	mxArray *spTable;
+	int     i, temp, *irs, *jcs, count=0;
+	double  *sr;
+
+	spTable = mxCreateSparse(N, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+		irs[i] = sequence[count];
+		count++;
+		temp = sequence[count];
+		sr[i] = Table[temp];
+		count++;
+	}
+	return spTable;
+}
+
+void multiply_spPot_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, NZS, position, bindex, sindex, nzCounts=0;
+	int     *mask, *result, *bir, *sir, *rir, *bjc, *sjc, *rjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, *rpr;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	if(sdim == 0){
+		for(i=0; i<NZB; i++){
+			bpr[i] *= *spr;
+		}	
+		return;
+	}
+
+	pTemp1 = mxCreateSparse(NB, 1, NZB, mxREAL);
+	rpr = mxGetPr(pTemp1);
+	rir = mxGetIr(pTemp1);
+	rjc = mxGetJc(pTemp1);
+	rjc[0] = 0;
+	rjc[1] = NZB;
+
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sir, NZS, sizeof(int), compare);
+		if(result){
+			position = result - sir;
+			rpr[nzCounts] = bpr[i] * spr[position];
+			rir[nzCounts] = bindex;
+			nzCounts++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	reset_nzmax(pTemp1, NZB, nzCounts);
+	mxSetField(bigPot, 0, "T", pTemp1);
+
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+void marginal_spPot_to_spPot(const mxArray *bigPot, mxArray *smallPot, const int maximize){
+	int     i, j, count, bdim, sdim, NB, NS, NZB, position, bindex, sindex, nzCounts=0;
+	int     *mask, *sequence, *result, *bir, *bjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *sTable, *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr;
+	mxArray *pTemp;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+	NS = 1;
+	for(i=0; i<sdim; i++){
+		NS *= (int)psSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	if(sdim == 0){
+		pTemp = mxGetField(smallPot, 0, "T");
+		spr = mxGetPr(pTemp);
+		*spr = 0;
+		if(maximize){
+			for(i=0; i<NZB; i++){
+				*spr = (*spr < bpr[i])? bpr[i] : *spr;
+			}
+		}
+		else{
+			for(i=0; i<NZB; i++){
+				*spr += bpr[i];
+			}
+		}	
+		return;
+	}
+
+	mask = malloc(sdim * sizeof(int));
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+
+
+	sTable = malloc(NZB * sizeof(double));
+	sequence = malloc(NZB * 2 * sizeof(double));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	for(i=0; i<NZB; i++){
+		sTable[i] = 0;
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	count = 0;
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sequence, nzCounts, sizeof(int)*2, compare);
+		if(result){
+			position = (result - sequence) / 2;
+			if(maximize)
+				sTable[position] = (sTable[position] < bpr[i]) ? bpr[i] : sTable[position];
+			else sTable[position] += bpr[i];
+		}
+		else {
+			if(maximize) 
+				sTable[nzCounts] = (sTable[nzCounts] < bpr[i]) ? bpr[i] : sTable[nzCounts];
+			else sTable[nzCounts] += bpr[i];
+			sequence[count] = sindex;
+			count++;
+			sequence[count] = nzCounts;
+			nzCounts++;
+			count++;
+		}
+	}
+	
+	pTemp = mxGetField(smallPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	qsort(sequence, nzCounts, sizeof(int) * 2, compare);
+	pTemp = convert_ill_table_to_sparse(sTable, sequence, nzCounts, NS);
+	mxSetField(smallPot, 0, "T", pTemp);
+
+	free(sTable);
+	free(sequence);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+void divide_null_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, count1, match, temp, bdim, sdim, diffdim, NB, NS, ND, NZB, NZS, bindex, sindex;
+	int     *samemask, *diffmask, *rir, *rjc, *sir, *sjc, *bCumprod, *sCumprod, *ssubv, *weight;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *rpr, *spr, value;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	if(sdim == 0){
+		pTemp1 = mxGetField(bigPot, 0, "T");
+		if(pTemp1)mxDestroyArray(pTemp1);
+		pTemp = mxCreateSparse(NB, 1, NB, mxREAL);
+		mxSetField(bigPot, 0, "T", pTemp);
+		rpr = mxGetPr(pTemp);
+		rir = mxGetIr(pTemp);
+		rjc = mxGetJc(pTemp);
+		rjc[0] = 0;
+		rjc[1] = NB;
+		value = *spr;
+		if(value == 0) value = 1;
+		for(i=0; i<NB; i++){
+			rpr[i] = 1 / value;
+			rir[i] = i;
+		}	
+		return;
+	}
+
+	NS = 1;
+	for(i=0; i<sdim; i++){
+		NS *= (int)psSize[i];
+	}
+	ND = NB / NS;
+
+	pTemp = mxCreateSparse(NB, 1, NB, mxREAL);
+	rpr = mxGetPr(pTemp);
+	rir = mxGetIr(pTemp);
+	rjc = mxGetJc(pTemp);
+	rjc[0] = 0;
+	rjc[1] = NB;
+	for(i=0; i<NB; i++){
+		rpr[i] = 1;
+		rir[i] = i;
+	}
+
+	NZB = ND * NZS;
+
+	diffdim = bdim - sdim;
+	samemask = malloc(sdim * sizeof(int));
+	diffmask = malloc(diffdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	weight = malloc(ND * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	count1 = 0;
+	for(i=0; i<bdim; i++){
+		match = 0;
+		for(j=0; j<sdim; j++){
+			if(pbDomain[i] == psDomain[j]){
+				samemask[count] = i;
+				match = 1;
+				count++;
+				break;
+			}
+		}
+		if(match == 0){
+			diffmask[count1] = i; 
+			count1++;
+		}
+	}
+
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	count = 0;
+	compute_fixed_weight(weight, pbSize, diffmask, bCumprod, ND, diffdim);
+	for(i=0; i<NZS; i++){
+		sindex = sir[i];
+		ind_subv(sindex, sCumprod, sdim, ssubv);
+		temp = 0;
+		for(j=0; j<sdim; j++){
+			temp += ssubv[j] * bCumprod[samemask[j]];
+		}
+		for(j=0; j<ND; j++){
+			bindex = weight[j] + temp;
+			rpr[bindex] = 1 / (spr[i]);
+		}
+	}
+
+	pTemp1 = mxGetField(bigPot, 0, "T");
+	if(pTemp1)mxDestroyArray(pTemp1);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(samemask);
+	free(diffmask);
+	free(bCumprod);
+	free(sCumprod);
+	free(weight);
+	free(ssubv);
+}
+
+void divide_spPot_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, NZS, position, bindex, sindex;
+	int     *mask, *result, *bir, *sir, *bjc, *sjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, value;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp1 = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp1);
+	bir = mxGetIr(pTemp1);
+	bjc = mxGetJc(pTemp1);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	if(sdim == 0){
+		value = *spr;
+		if(value == 0)value = 1;
+		for(i=0; i<NZB; i++){
+			bpr[i] /= value;
+		}	
+		return;
+	}
+
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sir, NZS, sizeof(int), compare);
+		if(result){
+			position = result - sir;
+			bpr[i] /= spr[position];
+		}
+	}
+
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, j, loop, loops, nCliques, temp, count, parent, child, maximize, *distribute_order;
+	double  *pr, *pr1;
+	mxArray *pTemp, *pPreCh, *pClpot, *pSeppot;
+
+	pTemp = mxGetField(prhs[0], 0, "cliques");
+	nCliques = mxGetNumberOfElements(pTemp);
+	loops = nCliques - 1;
+	pTemp = mxGetField(prhs[0], 0, "maximize");
+	maximize = (int)mxGetScalar(pTemp);
+
+	distribute_order = malloc(2 * loops * sizeof(int));
+	pTemp = mxGetField(prhs[0], 0, "preorder");
+	pr = mxGetPr(pTemp);
+	pPreCh = mxGetField(prhs[0], 0, "preorder_children");
+	count = 0;
+	for(i=0; i<nCliques; i++){
+		temp = (int)pr[i] - 1;
+		pTemp = mxGetCell(pPreCh, temp);
+		pr1 = mxGetPr(pTemp);
+		loop = mxGetNumberOfElements(pTemp);
+		for(j=0; j<loop; j++){
+			distribute_order[count] = temp;
+			distribute_order[count + loops] = (int)pr1[j] - 1;
+			count++;
+		}
+	}
+
+	plhs[0] = mxDuplicateArray(prhs[1]);
+	plhs[1] = mxDuplicateArray(prhs[2]);
+
+	for(loop=0; loop<loops; loop++){
+		parent = distribute_order[loop];
+		child  = distribute_order[loop+loops];
+		i = nCliques * child + parent;
+		pClpot = mxGetCell(plhs[0], child);
+		pTemp = mxGetField(pClpot, 0, "T");
+		pSeppot = mxGetCell(plhs[1], i);
+		if(pTemp){
+			if(mxIsEmpty(pTemp)) 
+				divide_null_by_spPot(pClpot, pSeppot);
+			else 
+				divide_spPot_by_spPot(pClpot, pSeppot);
+		}
+		else divide_null_by_spPot(pClpot, pSeppot);
+
+		pClpot = mxGetCell(plhs[0], parent);
+		marginal_spPot_to_spPot(pClpot, pSeppot, maximize);
+		mxSetCell(plhs[1], i, pSeppot);
+
+		pClpot = mxGetCell(plhs[0], child);
+		multiply_spPot_by_spPot(pClpot, pSeppot); 
+	}
+	free(distribute_order);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,100 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (jtree)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i} = [] if X(i) is hidden, and otherwise contains its observed value (scalar or column vector).
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product instead of sum-product [0]
+% soft    - a cell array of soft/virtual evidence;
+%           soft{i} is a prob. distrib. over i's values, or [] [ cell(1,N) ]
+%
+% e.g., engine = enter_evidence(engine, ev, 'soft', soft_ev)
+%
+% For backwards compatibility with BNT2, you can also specify the parameters in the following order
+%  engine = enter_evidence(engine, ev, soft_ev)
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes(:);
+N = length(bnet.dag);
+
+engine.evidence = evidence; % store this for marginal_nodes with add_ev option
+  
+% set default params
+exclude = [];
+soft_evidence = cell(1,N);
+maximize = 0;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  if iscell(args{1})
+    soft_evidence = args{1};
+  else
+    for i=1:2:nargs
+      switch args{i},
+       case 'soft',    soft_evidence = args{i+1}; 
+       case 'maximize', maximize = args{i+1}; 
+       otherwise,  
+	error(['invalid argument name ' args{i}]);       
+      end
+    end
+  end
+end
+
+engine.maximize = maximize;
+
+onodes = find(~isemptycell(evidence));
+hnodes = find(isemptycell(evidence));
+pot_type = determine_pot_type(bnet, onodes);
+ if strcmp(pot_type, 'cg')
+  check_for_cd_arcs(onodes, bnet.cnodes, bnet.dag);
+end
+
+hard_nodes = 1:N;
+soft_nodes = find(~isemptycell(soft_evidence));
+S = length(soft_nodes);
+if S > 0
+  assert(pot_type == 'd');
+  assert(mysubset(soft_nodes, bnet.dnodes));
+end
+ 
+% Evaluate CPDs with evidence, and convert to potentials  
+pot = cell(1, N+S);
+for n=1:N
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n);
+  if isempty(bnet.CPD{e})
+    error(['must define CPD ' num2str(e)])
+  else
+    pot{n} = convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence);
+  end
+end
+
+for i=1:S
+  n = soft_nodes(i);
+  pot{N+i} = dpot(n, ns(n), soft_evidence{n});
+end
+clqs = engine.clq_ass_to_node([hard_nodes soft_nodes]); 
+
+[clpot, seppot] = init_pot(engine, clqs, pot, pot_type, onodes);
+[clpot, seppot] = collect_evidence(engine, clpot, seppot);
+[clpot, seppot] = distribute_evidence(engine, clpot, seppot);
+C = length(clpot);
+ll = zeros(1, C);
+for i=1:C
+   domain = clpot{i}.domain;
+   sizes = clpot{i}.sizes;
+   T = clpot{i}.T;
+   clpot{i} = dpot(domain, sizes, T);
+end
+   
+for i=1:C
+  [clpot{i}, ll(i)] = normalize_pot(clpot{i});
+end
+loglik = ll(1); % we can extract the likelihood from any clique
+
+engine.clpot = clpot;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/enter_soft_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function [clpot, loglik] = enter_soft_evidence(engine, clique, potential, onodes, pot_type)
+% ENTER_SOFT_EVIDENCE Add the specified potentials to the network (jtree)
+% [clpot, loglik] = enter_soft_evidence(engine, clique, potential, onodes, pot_type, maximize)
+%
+% We multiply potential{i} onto clique(i) before propagating.
+% We return all the modified clique potentials.
+
+[clpot, seppot] = init_pot(engine, clique, potential, pot_type, onodes);
+[clpot, seppot] = collect_evidence(engine, clpot, seppot);
+[clpot, seppot] = distribute_evidence(engine, clpot, seppot);
+
+C = length(clpot);
+ll = zeros(1, C);
+for i=1:C
+  [clpot{i}, ll(i)] = normalize_pot(clpot{i});
+end
+loglik = ll(1); % we can extract the likelihood from any clique
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/init_pot.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,624 @@
+/* C mex init_pot for in @jtree_sparse_inf_engine directory               */
+/* The file enter_evidence.m in directory @jtree_sparse_inf_engine call it*/
+
+/**************************************/
+/* init_pot.c has 5 input & 2 output  */
+/* engine                             */
+/* clqs                               */
+/* pots                               */
+/* pot_type                           */
+/* onodes                             */
+/*                                    */
+/* clpot                              */
+/* seppot                             */
+/**************************************/
+#include <math.h>
+#include <stdlib.h>
+#include "mex.h"
+
+int compare(const void* src1, const void* src2){
+	int i1 = *(int*)src1 ;
+	int i2 = *(int*)src2 ;
+	return i1-i2 ;
+}
+
+void ind_subv(int index, const int *cumprod, int n, int *bsubv){
+	int i;
+
+	for (i = n-1; i >= 0; i--) {
+		bsubv[i] = ((int)floor(index / cumprod[i]));
+		index = index % cumprod[i];
+	}
+}
+
+int subv_ind(const int n, const int *cumprod, const int *subv){
+	int i, index=0;
+
+	for(i=0; i<n; i++){
+		index += subv[i] * cumprod[i];
+	}
+	return index;
+}
+
+void compute_fixed_weight(int *weight, const double *pbSize, const int *dmask, const int *bCumprod, const int ND, const int diffdim){
+	int i, j;
+	int *eff_cumprod, *subv, *diffsize, *diff_cumprod;
+
+	subv = malloc(diffdim * sizeof(int));
+	eff_cumprod = malloc(diffdim * sizeof(int));
+	diffsize = malloc(diffdim * sizeof(int));
+	diff_cumprod = malloc(diffdim * sizeof(int));
+	for(i=0; i<diffdim; i++){
+		eff_cumprod[i] = bCumprod[dmask[i]];
+		diffsize[i] = (int)pbSize[dmask[i]];
+	}
+	diff_cumprod[0] = 1;
+	for(i=0; i<diffdim-1; i++){
+		diff_cumprod[i+1] = diff_cumprod[i] * diffsize[i];
+	}
+	for(i=0; i<ND; i++){
+		ind_subv(i, diff_cumprod, diffdim, subv);
+		weight[i] = 0;
+		for(j=0; j<diffdim; j++){
+			weight[i] += eff_cumprod[j] * subv[j];
+		}
+	}
+	free(eff_cumprod);
+	free(subv);
+	free(diffsize);
+	free(diff_cumprod);
+}
+
+void reset_nzmax(mxArray *spArray, const int old_nzmax, const int new_nzmax){
+	double *ptr;
+	void   *newptr;
+	int    *ir, *jc;
+	int    nbytes;
+
+	if(new_nzmax == old_nzmax) return;
+	nbytes = new_nzmax * sizeof(*ptr);
+	ptr = mxGetPr(spArray);
+	newptr = mxRealloc(ptr, nbytes);
+	mxSetPr(spArray, newptr);
+	nbytes = new_nzmax * sizeof(*ir);
+	ir = mxGetIr(spArray);
+	newptr = mxRealloc(ir, nbytes);
+	mxSetIr(spArray, newptr);
+	jc = mxGetJc(spArray);
+	jc[0] = 0;
+	jc[1] = new_nzmax;
+	mxSetNzmax(spArray, new_nzmax);
+}
+
+mxArray* convert_ill_table_to_sparse(const double *bigTable, const int *sequence, const int nzCounts, const int NB){
+	mxArray *spTable;
+	int     i, temp, *irs, *jcs, count=0;
+	double  *sr;
+
+	spTable = mxCreateSparse(NB, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+		irs[i] = sequence[count];
+		count++;
+		temp = sequence[count];
+		sr[i] = bigTable[temp];
+		count++;
+	}
+	return spTable;
+}
+
+void multiply_null_by_fuPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, NB, NS, siz_b, siz_s, ndim, nzCounts=0;
+	int     *mask, *sx, *sy, *cpsy, *subs, *s, *cpsy2, *bir, *bjc;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *spr, *bpr, value;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	siz_b = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	siz_s = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<siz_b; i++){
+		NB *= (int)pbSize[i];
+	}
+	NS = 1;
+	for(i=0; i<siz_s; i++){
+		NS *= (int)psSize[i];
+	}
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+
+	pTemp1 = mxCreateSparse(NB, 1, NB, mxREAL);
+	bpr = mxGetPr(pTemp1);
+	bir = mxGetIr(pTemp1);
+	bjc = mxGetJc(pTemp1);
+	bjc[0] = 0;
+	bjc[1] = NB;
+
+	if(NS == 1){
+		value = *spr;
+		for(i=0; i<NB; i++){
+			bpr[i] = value;
+			bir[i] = i;
+		}
+		nzCounts = NB;
+		pTemp = mxGetField(bigPot, 0, "T");
+		if(pTemp)mxDestroyArray(pTemp);
+		reset_nzmax(pTemp1, NB, nzCounts);
+		mxSetField(bigPot, 0, "T", pTemp1);
+		return;
+	}
+
+	if(NS == NB){
+		for(i=0; i<NB; i++){
+			if(spr[i] != 0){
+				bpr[nzCounts] = spr[i];
+				bir[nzCounts] = i;
+				nzCounts++;
+			}
+		}
+		pTemp = mxGetField(bigPot, 0, "T");
+		if(pTemp)mxDestroyArray(pTemp);
+		reset_nzmax(pTemp1, NB, nzCounts);
+		mxSetField(bigPot, 0, "T", pTemp1);
+		return;
+	}
+
+	mask = malloc(siz_s * sizeof(int));
+	count = 0;
+	for(i=0; i<siz_s; i++){
+		for(j=0; j<siz_b; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	ndim = siz_b;
+	sx = (int *)malloc(sizeof(int)*ndim);
+	sy = (int *)malloc(sizeof(int)*ndim);
+	for(i=0; i<ndim; i++){
+		sx[i] = (int)pbSize[i];
+		sy[i] = 1;
+	}
+	for(i=0; i<count; i++){
+		sy[mask[i]] = sx[mask[i]];
+	}
+
+	s = (int *)malloc(sizeof(int)*ndim);
+	*(cpsy = (int *)malloc(sizeof(int)*ndim)) = 1;
+	subs =   (int *)malloc(sizeof(int)*ndim);
+	cpsy2 =  (int *)malloc(sizeof(int)*ndim);
+	for(i = 0; i < ndim; i++){
+		subs[i] = 0;
+		s[i] = sx[i] - 1;
+	}
+			
+	for(i = 0; i < ndim-1; i++){
+		cpsy[i+1] = cpsy[i]*sy[i]--;
+		cpsy2[i] = cpsy[i]*sy[i];
+	}
+	cpsy2[ndim-1] = cpsy[ndim-1]*(--sy[ndim-1]);
+
+	for(j=0; j<NB; j++){
+		if(*spr != 0){
+			bpr[nzCounts] = *spr;
+			bir[nzCounts] = j;
+			nzCounts++;
+		}
+		for(i = 0; i < ndim; i++){
+			if(subs[i] == s[i]){
+				subs[i] = 0;
+				if(sy[i])
+					spr -= cpsy2[i];
+			}
+			else{
+				subs[i]++;
+				if(sy[i])
+					spr += cpsy[i];
+				break;
+			}
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	reset_nzmax(pTemp1, NB, nzCounts);
+	mxSetField(bigPot, 0, "T", pTemp1);
+
+	free(sx);
+	free(sy);
+	free(s);
+	free(cpsy);
+	free(subs);
+	free(cpsy2);
+    free(mask);
+}
+
+void multiply_null_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, count1, match, temp, bdim, sdim, diffdim, NB, NS, ND, NZB, NZS, bindex, sindex, nzCounts=0;
+	int     *samemask, *diffmask, *sir, *sjc, *bCumprod, *sCumprod, *ssubv, *sequence, *weight;
+	double  *bigTable, *pbDomain, *psDomain, *pbSize, *psSize, *spr;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+	NS = 1;
+	for(i=0; i<sdim; i++){
+		NS *= (int)psSize[i];
+	}
+	ND = NB / NS;
+
+	if(ND == 1){
+		pTemp = mxGetField(bigPot, 0, "T");
+		if(pTemp)mxDestroyArray(pTemp);
+		pTemp1 = mxGetField(smallPot, 0, "T");
+		pTemp = mxDuplicateArray(pTemp1);
+		mxSetField(bigPot, 0, "T", pTemp);
+		return;
+	}
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	NZB = ND * NZS;
+
+	diffdim = bdim - sdim;
+	sequence = malloc(NZB * 2 * sizeof(int));
+	bigTable = malloc(NZB * sizeof(double));
+	samemask = malloc(sdim * sizeof(int));
+	diffmask = malloc(diffdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	weight = malloc(ND * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	count1 = 0;
+	for(i=0; i<bdim; i++){
+		match = 0;
+		for(j=0; j<sdim; j++){
+			if(pbDomain[i] == psDomain[j]){
+				samemask[count] = i;
+				match = 1;
+				count++;
+				break;
+			}
+		}
+		if(match == 0){
+			diffmask[count1] = i; 
+			count1++;
+		}
+	}
+
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	count = 0;
+	compute_fixed_weight(weight, pbSize, diffmask, bCumprod, ND, diffdim);
+	for(i=0; i<NZS; i++){
+		sindex = sir[i];
+		ind_subv(sindex, sCumprod, sdim, ssubv);
+		temp = 0;
+		for(j=0; j<sdim; j++){
+			temp += ssubv[j] * bCumprod[samemask[j]];
+		}
+		for(j=0; j<ND; j++){
+			bindex = weight[j] + temp;
+			bigTable[nzCounts] = spr[i];
+			sequence[count] = bindex;
+			count++;
+			sequence[count] = nzCounts;
+			nzCounts++;
+			count++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	qsort(sequence, nzCounts, sizeof(int) * 2, compare);
+	pTemp = convert_ill_table_to_sparse(bigTable, sequence, nzCounts, NB);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(sequence); 
+	free(bigTable);
+	free(samemask);
+	free(diffmask);
+	free(bCumprod);
+	free(sCumprod);
+	free(weight);
+	free(ssubv);
+}
+
+void multiply_spPot_by_fuPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, bindex, sindex, nzCounts=0;
+	int     *mask, *bir, *bjc, *rir, *rjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, *rpr, value;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+
+	pTemp1 = mxCreateSparse(NB, 1, NZB, mxREAL);
+	rpr = mxGetPr(pTemp1);
+	rir = mxGetIr(pTemp1);
+	rjc = mxGetJc(pTemp1);
+	rjc[0] = 0;
+	rjc[1] = NZB;
+
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		value = spr[sindex];
+		if(value != 0){
+			rpr[nzCounts] = bpr[i] * value;
+			rir[nzCounts] = bindex;
+			nzCounts++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	reset_nzmax(pTemp1, NZB, nzCounts);
+	mxSetField(bigPot, 0, "T", pTemp1);
+
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+void multiply_spPot_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, NZS, position, bindex, sindex, nzCounts=0;
+	int     *mask, *result, *bir, *sir, *rir, *bjc, *sjc, *rjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, *rpr;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	pTemp1 = mxCreateSparse(NB, 1, NZB, mxREAL);
+	rpr = mxGetPr(pTemp1);
+	rir = mxGetIr(pTemp1);
+	rjc = mxGetJc(pTemp1);
+	rjc[0] = 0;
+	rjc[1] = NZB;
+
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sir, NZS, sizeof(int), compare);
+		if(result){
+			position = result - sir;
+			rpr[nzCounts] = bpr[i] * spr[position];
+			rir[nzCounts] = bindex;
+			nzCounts++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	reset_nzmax(pTemp1, NZB, nzCounts);
+	mxSetField(bigPot, 0, "T", pTemp1);
+
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, j, c, loop, nNodes, nCliques, ndomain, ns_num, nOnodes, dims[2];
+	double  *pClqs, *pr, *pt, *pSize, *eff_ns;
+	mxArray *pTemp, *pTemp1, *pStruct, *pCliques, *pBigpot, *pSmallpot;
+	const char *field_names[] = {"domain", "T", "sizes"};
+
+	nNodes = mxGetNumberOfElements(prhs[1]);
+	pCliques = mxGetField(prhs[0], 0, "cliques");
+	nCliques = mxGetNumberOfElements(pCliques);
+	pTemp = mxGetField(prhs[0], 0, "actual_node_sizes");
+	ns_num = mxGetNumberOfElements(pTemp);
+	pSize = mxGetPr(pTemp);
+
+	eff_ns = (double *)malloc(ns_num * sizeof(double));
+	for(i=0; i<ns_num; i++) eff_ns[i] = pSize[i];
+	nOnodes = mxGetNumberOfElements(prhs[4]);
+	pr = mxGetPr(prhs[4]);
+	for(i=0; i<nOnodes; i++) eff_ns[(int)pr[i] - 1] = 1;
+
+	plhs[0] = mxCreateCellArray(1, &nCliques);
+    for(i=0; i<nCliques; i++){
+        pStruct = mxCreateStructMatrix(1, 1, 3, field_names);
+		mxSetCell(plhs[0], i, pStruct);
+		pTemp = mxGetCell(pCliques, i);
+		ndomain = mxGetNumberOfElements(pTemp);
+		pt = mxGetPr(pTemp);
+		pTemp1 = mxDuplicateArray(pTemp);
+		mxSetField(pStruct, 0, "domain", pTemp1);
+		
+		pTemp = mxCreateDoubleMatrix(1, ndomain, mxREAL);
+		mxSetField(pStruct, 0, "sizes", pTemp);
+		pr = mxGetPr(pTemp);
+        for(j=0; j<ndomain; j++){
+            pr[j] = eff_ns[(int)pt[j]-1];
+        }
+    }
+
+	pClqs = mxGetPr(prhs[1]);
+	for(loop=0; loop<nNodes; loop++){
+		c = (int)pClqs[loop] - 1;
+		pSmallpot = mxGetCell(prhs[2], loop);
+		pTemp = mxGetField(pSmallpot, 0, "T");
+		pBigpot = mxGetCell(plhs[0], c);
+		pTemp1 = mxGetField(pBigpot, 0, "T");
+		if(pTemp1){
+			if(mxIsSparse(pTemp))
+				multiply_spPot_by_spPot(pBigpot, pSmallpot);
+			else multiply_spPot_by_fuPot(pBigpot, pSmallpot);
+		}
+		else{
+			if(mxIsSparse(pTemp))
+				multiply_null_by_spPot(pBigpot, pSmallpot);
+			else multiply_null_by_fuPot(pBigpot, pSmallpot);
+		}		
+	}
+
+	free(eff_ns);
+	dims[0] = nCliques;
+	dims[1] = nCliques;
+	plhs[1] = mxCreateCellArray(2, dims);
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/jtree_sparse_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,126 @@
+function engine = jtree_sparse_inf_engine(bnet, varargin)
+% JTREE_SPARSE_INF_ENGINE Junction tree inference engine when CPTs and Potentials are sparse
+% engine = jtree_sparse_inf_engine(bnet, ...)
+% It differs from jtree_inf_engine with all CPTs and potentials are 1D sparse arrays.
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% clusters  - a cell array of sets of nodes we want to ensure are in the same clique (in addition to families) [ {} ]
+% root      - the root of the junction tree will be a clique that contains this set of nodes [N]
+% stages    - stages{t} is a set of nodes we want to eliminate before stages{t+1}, ... [ {1:N} ]
+%
+% e.g., engine = jtree_inf_engine(bnet, 'maximize', 1);
+%
+% For more details on the junction tree algorithm, see
+% - "Probabilistic networks and expert systems", Cowell, Dawid, Lauritzen and Spiegelhalter, Springer, 1999
+% - "Inference in Belief Networks: A procedural guide", C. Huang and A. Darwiche, 
+%      Intl. J. Approximate Reasoning, 15(3):225-263, 1996.
+
+
+% set default params
+N = length(bnet.dag);
+clusters = {};
+root = N;
+stages = { 1:N };
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  if ~isstr(args{1})
+    error('the interface to jtree has changed; now, onodes is not allowed and all optional params must be passed by name')
+  end
+  for i=1:2:nargs
+    switch args{i},
+     case 'clusters', clusters = args{i+1}; 
+     case 'root',     root = args{i+1}; 
+     case 'stages',   stages = args{i+1}; 
+     otherwise,  
+      error(['invalid argument name ' args{i}]);       
+    end
+  end
+end
+
+engine = init_fields;
+engine = class(engine, 'jtree_sparse_inf_engine', inf_engine(bnet));
+
+onodes = bnet.observed;
+%[engine.jtree, dummy, engine.cliques, B, w] = dag_to_jtree(bnet, onodes, stages, clusters);
+
+porder = determine_elim_constraints(bnet, onodes);
+strong = ~isempty(porder);
+ns = bnet.node_sizes(:);
+ns(onodes) = 1; % observed nodes have only 1 possible value
+[engine.jtree, root2, engine.cliques, B, w] = ...
+    graph_to_jtree(moralize(bnet.dag), ns, porder, stages, clusters);
+
+engine.cliques_bitv = B;
+engine.clique_weight = w;
+C = length(engine.cliques);
+engine.clpot = cell(1,C);
+
+% Compute the separators between connected cliques.
+[is,js] = find(engine.jtree > 0);
+engine.separator = cell(C,C);
+for k=1:length(is)
+  i = is(k); j = js(k);
+  engine.separator{i,j} = find(B(i,:) & B(j,:)); % intersect(cliques{i}, cliques{j});
+end
+
+% A node can be a member of many cliques, but is assigned to exactly one, to avoid
+% double-counting its CPD. We assign node i to clique c if c is the "lightest" clique that
+% contains i's family, so it can accomodate its CPD.
+
+engine.clq_ass_to_node = zeros(1, N);
+for i=1:N
+  %c = clq_containing_nodes(engine, family(bnet.dag, i));
+  clqs_containing_family = find(all(B(:,family(bnet.dag, i)), 2)); % all selected columns must be 1
+  c = clqs_containing_family(argmin(w(clqs_containing_family)));  
+  engine.clq_ass_to_node(i) = c; 
+end
+
+% Make the jtree rooted, so there is a fixed message passing order.
+engine.root_clq = clq_containing_nodes(engine, root);
+if engine.root_clq <= 0
+  error(['no clique contains ' num2str(root)]);
+end
+
+[engine.jtree, engine.preorder, engine.postorder] = mk_rooted_tree(engine.jtree, engine.root_clq);
+
+% collect 
+engine.postorder_parents = cell(1,length(engine.postorder));
+for n=engine.postorder(:)'
+  engine.postorder_parents{n} = parents(engine.jtree, n);
+end
+% distribute
+engine.preorder_children = cell(1,length(engine.preorder));
+for n=engine.preorder(:)'
+  engine.preorder_children{n} = children(engine.jtree, n);
+end
+
+ns = bnet.node_sizes;
+engine.actual_node_sizes = ns;
+ 
+
+%%%%%%%%
+
+function engine = init_fields()
+
+engine.jtree = [];
+engine.cliques = [];
+engine.separator = [];
+engine.cliques_bitv = [];
+engine.clique_weight = [];
+engine.clpot = [];
+engine.clq_ass_to_node = [];
+engine.root_clq = [];
+engine.preorder = [];
+engine.postorder = [];
+engine.preorder_children = [];
+engine.postorder_parents = [];
+engine.maximize = [];
+engine.evidence = [];
+engine.actual_node_sizes = [];
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function marginal = marginal_family(engine, i, add_ev)
+% MARGINAL_FAMILY Compute the marginal on the specified family (jtree)
+% marginal = marginal_family(engine, i)
+
+if nargin < 3, add_ev = 0; end
+assert(~add_ev);
+
+bnet = bnet_from_engine(engine);
+fam = family(bnet.dag, i);
+c = engine.clq_ass_to_node(i);
+marginal = pot_to_marginal(marginalize_pot(engine.clpot{c}, fam));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function marginal = marginal_nodes(engine, query, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (jtree)
+% marginal = marginal_nodes(engine, query, add_ev)
+%
+% 'query' must be a subset of some clique; an error will be raised if not.
+% add_ev is an optional argument; if 1, we will "inflate" the marginal of observed nodes
+% to their original size, adding 0s to the positions which contradict the evidence
+
+if nargin < 3, add_ev = 0; end
+
+c = clq_containing_nodes(engine, query);
+if c == -1
+  error(['no clique contains ' num2str(query)]);
+end
+marginal = pot_to_marginal(marginalize_pot(engine.clpot{c}, query, engine.maximize));
+
+if add_ev
+  bnet = bnet_from_engine(engine);
+  %marginal = add_ev_to_dmarginal(marginal, engine.evidence, bnet.node_sizes);
+  marginal = add_evidence_to_gmarginal(marginal, engine.evidence, bnet.node_sizes, bnet.cnodes);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/collect_evidence.c/1.1.1.1/Wed May 29 15:59:56 2002//
+/distribute_evidence.c/1.1.1.1/Wed May 29 15:59:56 2002//
+/init_pot.c/1.1.1.1/Wed May 29 15:59:56 2002//
+/init_pot1.c/1.1.1.1/Wed May 29 15:59:56 2002//
+/init_pot1.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@jtree_sparse_inf_engine/old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/collect_evidence.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,635 @@
+/* C mex for collect_evidence.c in @jtree_sparse_inf_engine directory */
+/* File enter_evidence.m in directory @jtree_sparse_inf_engine call it*/
+
+/******************************************/
+/* collect_evidence has 3 input & 2 output*/
+/* engine                                 */
+/* clpot                                  */
+/* seppot                                 */
+/*                                        */
+/* clpot                                  */
+/* seppot                                 */
+/******************************************/
+
+#include <math.h>
+#include <search.h>
+#include "mex.h"
+
+int compare(const void* src1, const void* src2){
+	int i1 = *(int*)src1 ;
+	int i2 = *(int*)src2 ;
+	return i1-i2 ;
+}
+
+void ind_subv(int index, const int *cumprod, int n, int *bsubv){
+	int i;
+
+	for (i = n-1; i >= 0; i--) {
+		bsubv[i] = ((int)floor(index / cumprod[i]));
+		index = index % cumprod[i];
+	}
+}
+
+int subv_ind(const int n, const int *cumprod, const int *subv){
+	int i, index=0;
+
+	for(i=0; i<n; i++){
+		index += subv[i] * cumprod[i];
+	}
+	return index;
+}
+
+void compute_fixed_weight(int *weight, const double *pbSize, const int *dmask, const int *bCumprod, const int ND, const int diffdim){
+	int i, j;
+	int *eff_cumprod, *subv, *diffsize, *diff_cumprod;
+
+	subv = malloc(diffdim * sizeof(int));
+	eff_cumprod = malloc(diffdim * sizeof(int));
+	diffsize = malloc(diffdim * sizeof(int));
+	diff_cumprod = malloc(diffdim * sizeof(int));
+	for(i=0; i<diffdim; i++){
+		eff_cumprod[i] = bCumprod[dmask[i]];
+		diffsize[i] = (int)pbSize[dmask[i]];
+	}
+	diff_cumprod[0] = 1;
+	for(i=0; i<diffdim-1; i++){
+		diff_cumprod[i+1] = diff_cumprod[i] * diffsize[i];
+	}
+	for(i=0; i<ND; i++){
+		ind_subv(i, diff_cumprod, diffdim, subv);
+		weight[i] = 0;
+		for(j=0; j<diffdim; j++){
+			weight[i] += eff_cumprod[j] * subv[j];
+		}
+	}
+	free(eff_cumprod);
+	free(subv);
+	free(diffsize);
+	free(diff_cumprod);
+}
+
+mxArray* convert_table_to_sparse(const double *bT, const int *index, const int nzCounts, const int N){
+	mxArray  *spTable;
+    int      i, *irs, *jcs;
+    double   *sr;
+    
+	spTable = mxCreateSparse(N, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+			sr[i] = bT[i];
+			irs[i] = index[i];
+    }
+	return spTable;	
+}
+
+mxArray* convert_ill_table_to_sparse(const double *Table, const int *sequence, const int nzCounts, const int N){
+	mxArray *spTable;
+	int     i, temp, *irs, *jcs, count=0;
+	double  *sr;
+
+	spTable = mxCreateSparse(N, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+		irs[i] = sequence[count];
+		count++;
+		temp = sequence[count];
+		sr[i] = Table[temp];
+		count++;
+	}
+	return spTable;
+}
+
+void multiply_null_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, count1, match, temp, bdim, sdim, diffdim, NB, NS, ND, NZB, NZS, bindex, sindex, nzCounts=0;
+	int     *samemask, *diffmask, *sir, *sjc, *bCumprod, *sCumprod, *ssubv, *sequence, *weight;
+	double  *bigTable, *pbDomain, *psDomain, *pbSize, *psSize, *spr, *bpr;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	if(sdim == 0){
+		pTemp = mxCreateSparse(NB, 1, NB, mxREAL);
+		mxSetField(bigPot, 0, "T", pTemp);
+		bpr = mxGetPr(pTemp);
+		sir = mxGetIr(pTemp);
+		sjc = mxGetJc(pTemp);
+		sjc[0] = 0;
+		sjc[1] = NB;
+		for(i=0; i<NB; i++){
+			bpr[i] = *spr;
+			sir[i] = i;
+		}	
+		return;
+	}
+
+	NS = 1;
+	for(i=0; i<sdim; i++){
+		NS *= (int)psSize[i];
+	}
+	ND = NB / NS;
+
+	if(ND == 1){
+		pTemp1 = mxGetField(smallPot, 0, "T");
+		pTemp = mxDuplicateArray(pTemp1);
+		mxSetField(bigPot, 0, "T", pTemp);
+		return;
+	}
+
+
+	NZB = ND * NZS;
+
+	diffdim = bdim - sdim;
+	sequence = malloc(NZB * 2 * sizeof(int));
+	bigTable = malloc(NZB * sizeof(double));
+	samemask = malloc(sdim * sizeof(int));
+	diffmask = malloc(diffdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	weight = malloc(ND * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	count1 = 0;
+	for(i=0; i<bdim; i++){
+		match = 0;
+		for(j=0; j<sdim; j++){
+			if(pbDomain[i] == psDomain[j]){
+				samemask[count] = i;
+				match = 1;
+				count++;
+				break;
+			}
+		}
+		if(match == 0){
+			diffmask[count1] = i; 
+			count1++;
+		}
+	}
+
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	count = 0;
+	compute_fixed_weight(weight, pbSize, diffmask, bCumprod, ND, diffdim);
+	for(i=0; i<NZS; i++){
+		sindex = sir[i];
+		ind_subv(sindex, sCumprod, sdim, ssubv);
+		temp = 0;
+		for(j=0; j<sdim; j++){
+			temp += ssubv[j] * bCumprod[samemask[j]];
+		}
+		for(j=0; j<ND; j++){
+			bindex = weight[j] + temp;
+			bigTable[nzCounts] = spr[i];
+			sequence[count] = bindex;
+			count++;
+			sequence[count] = nzCounts;
+			nzCounts++;
+			count++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	qsort(sequence, nzCounts, sizeof(int) * 2, compare);
+	pTemp = convert_ill_table_to_sparse(bigTable, sequence, nzCounts, NB);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(sequence); 
+	free(bigTable);
+	free(samemask);
+	free(diffmask);
+	free(bCumprod);
+	free(sCumprod);
+	free(weight);
+	free(ssubv);
+}
+
+void multiply_spPot_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, NZS, position, bindex, sindex, nzCounts=0;
+	int     *mask, *index, *result, *bir, *sir, *bjc, *sjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *bigTable, *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, value;
+	mxArray *pTemp;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	if(sdim == 0){
+		for(i=0; i<NZB; i++){
+			bpr[i] *= *spr;
+		}	
+		return;
+	}
+
+	bigTable = malloc(NZB * sizeof(double));
+	index = malloc(NZB * sizeof(double));
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	for(i=0; i<NZB; i++){
+		bigTable[i] = 0;
+	}
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		value = bpr[i];
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sir, NZS, sizeof(int), compare);
+		if(result){
+			position = result - sir;
+			value *= spr[position];
+			bigTable[nzCounts] = value;
+			index[nzCounts] = bindex;
+			nzCounts++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	pTemp = convert_table_to_sparse(bigTable, index, nzCounts, NB);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(bigTable);
+	free(index);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+mxArray* marginal_null_to_spPot(const mxArray *bigPot, const mxArray *sDomain, const int maximize){
+	int     i, j, count, bdim, sdim, NB, NS, ND;
+	int     *mask, *sir, *sjc;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *spr;
+	mxArray *pTemp, *smallPot;
+	const char *field_names[] = {"domain", "T", "sizes"};
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	psDomain = mxGetPr(sDomain);
+	sdim = mxGetNumberOfElements(sDomain);
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+
+	smallPot = mxCreateStructMatrix(1, 1, 3, field_names);
+	pTemp = mxDuplicateArray(sDomain);
+	mxSetField(smallPot, 0, "domain", pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	if(sdim == 0){
+		pTemp = mxCreateSparse(1, 1, 1, mxREAL);
+		mxSetField(smallPot, 0, "T", pTemp);
+		spr = mxGetPr(pTemp);
+		sir = mxGetIr(pTemp);
+		sjc = mxGetJc(pTemp);
+		*spr = 0;
+		*sir = 0;
+		sjc[0] = 0;
+		sjc[1] = 1;
+		if(maximize) *spr = 1;
+		else *spr = NB;
+
+		pTemp = mxCreateDoubleMatrix(1, 1, mxREAL);
+		*mxGetPr(pTemp) = 1;
+		mxSetField(smallPot, 0, "sizes", pTemp);
+		return smallPot;
+	}
+
+	mask = malloc(sdim * sizeof(int));
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	pTemp = mxCreateDoubleMatrix(1, count, mxREAL);
+	psSize = mxGetPr(pTemp);
+	NS = 1;
+	for(i=0; i<count; i++){
+		psSize[i] = pbSize[mask[i]];
+		NS *= (int)psSize[i];
+	}
+	mxSetField(smallPot, 0, "sizes", pTemp);
+
+	ND = NB / NS;
+
+	pTemp = mxCreateSparse(NS, 1, NS, mxREAL);
+	mxSetField(smallPot, 0, "T", pTemp);
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	if(maximize){
+		for(i=0; i<NS; i++){
+			spr[i] = 1;
+			sir[i] = i;
+		}
+	}
+	else{
+		for(i=0; i<NS; i++){
+			spr[i] = ND;
+			sir[i] = i;
+		}
+	}
+	sjc[0] = 0;
+	sjc[1] = NS;
+
+	free(mask);
+	return smallPot;
+}
+
+mxArray* marginal_spPot_to_spPot(const mxArray *bigPot, const mxArray *sDomain, const int maximize){
+	int     i, j, count, bdim, sdim, NB, NS, NZB, position, bindex, sindex, nzCounts=0;
+	int     *mask, *sequence, *result, *bir, *bjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *sTable, *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr;
+	mxArray *pTemp, *smallPot;
+	const char *field_names[] = {"domain", "T", "sizes"};
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	psDomain = mxGetPr(sDomain);
+	sdim = mxGetNumberOfElements(sDomain);
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	smallPot = mxCreateStructMatrix(1, 1, 3, field_names);
+	pTemp = mxDuplicateArray(sDomain);
+	mxSetField(smallPot, 0, "domain", pTemp);
+
+	if(sdim == 0){
+		pTemp = mxCreateSparse(1, 1, 1, mxREAL);
+		mxSetField(smallPot, 0, "T", pTemp);
+		spr = mxGetPr(pTemp);
+		bir = mxGetIr(pTemp);
+		bjc = mxGetJc(pTemp);
+		*spr = 0;
+		*bir = 0;
+		bjc[0] = 0;
+		bjc[1] = 1;
+		if(maximize){
+			for(i=0; i<NZB; i++){
+				*spr = (*spr < bpr[i])? bpr[i] : *spr;
+			}
+		}
+		else{
+			for(i=0; i<NZB; i++){
+				*spr += bpr[i];
+			}
+		}
+
+		pTemp = mxCreateDoubleMatrix(1, 1, mxREAL);
+		*mxGetPr(pTemp) = 1;
+		mxSetField(smallPot, 0, "sizes", pTemp);
+		return smallPot;
+	}
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	mask = malloc(sdim * sizeof(int));
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	pTemp = mxCreateDoubleMatrix(1, count, mxREAL);
+	psSize = mxGetPr(pTemp);
+	NS = 1;
+	for(i=0; i<count; i++){
+		psSize[i] = pbSize[mask[i]];
+		NS *= (int)psSize[i];
+	}
+	mxSetField(smallPot, 0, "sizes", pTemp);
+
+
+	sTable = malloc(NZB * sizeof(double));
+	sequence = malloc(NZB * 2 * sizeof(double));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	for(i=0; i<NZB; i++)sTable[i] = 0;
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	count = 0;
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sequence, nzCounts, sizeof(int)*2, compare);
+		if(result){
+			position = (result - sequence) / 2;
+			if(maximize) 
+				sTable[position] = (sTable[position] < bpr[i]) ? bpr[i] : sTable[position];
+			else sTable[position] += bpr[i];
+		}
+		else {
+			if(maximize) 
+				sTable[nzCounts] = (sTable[nzCounts] < bpr[i]) ? bpr[i] : sTable[nzCounts];
+			else sTable[nzCounts] += bpr[i];
+			sequence[count] = sindex;
+			count++;
+			sequence[count] = nzCounts;
+			nzCounts++;
+			count++;
+		}
+	}
+	
+	qsort(sequence, nzCounts, sizeof(int) * 2, compare);
+	pTemp = convert_ill_table_to_sparse(sTable, sequence, nzCounts, NS);
+	mxSetField(smallPot, 0, "T", pTemp);
+
+	free(sTable);
+	free(sequence);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+
+	return smallPot;
+}
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, n, p, np, pn, loop, loops, nCliques, temp, maximize;
+	int     *collect_order;
+	double  *pr, *pr1;
+	mxArray *pTemp, *pTemp1, *pPostP, *pClpot, *pSeppot, *pSeparator;
+
+	pTemp = mxGetField(prhs[0], 0, "cliques");
+	nCliques = mxGetNumberOfElements(pTemp);
+	loops = nCliques - 1;
+	pTemp = mxGetField(prhs[0], 0, "maximize");
+	maximize = (int)mxGetScalar(pTemp);
+	pSeparator = mxGetField(prhs[0], 0, "separator");
+
+	collect_order = malloc(2 * loops * sizeof(int));
+
+	pTemp = mxGetField(prhs[0], 0, "postorder");
+	pr = mxGetPr(pTemp);
+	pPostP = mxGetField(prhs[0], 0, "postorder_parents");
+	for(i=0; i<loops; i++){
+		temp = (int)pr[i] - 1;
+		pTemp = mxGetCell(pPostP, temp);
+		pr1 = mxGetPr(pTemp);
+		collect_order[i] = (int)pr1[0] - 1;
+		collect_order[i+loops] = temp;
+	}
+
+	plhs[0] = mxDuplicateArray(prhs[1]);
+	plhs[1] = mxDuplicateArray(prhs[2]);
+
+	for(loop=0; loop<loops; loop++){
+		p = collect_order[loop];
+		n = collect_order[loop+loops];
+		np = p * nCliques + n;
+		pn = n * nCliques + p;
+		pClpot = mxGetCell(plhs[0], n);
+		pTemp1 = mxGetField(pClpot, 0, "T");
+		pTemp = mxGetCell(pSeparator, pn);
+		if(pTemp1)
+			pSeppot = marginal_spPot_to_spPot(pClpot, pTemp, maximize);
+		else pSeppot = marginal_null_to_spPot(pClpot, pTemp, maximize);
+		mxSetCell(plhs[1], pn, pSeppot);
+
+		pClpot = mxGetCell(plhs[0], p);
+		pTemp1 = mxGetField(pClpot, 0, "T");
+		if(pTemp1)
+			multiply_spPot_by_spPot(pClpot, pSeppot);
+		else multiply_null_by_spPot(pClpot, pSeppot);
+	}
+	free(collect_order);
+}
+	
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/distribute_evidence.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,613 @@
+/* C mex for distribute_evidence.c in @jtree_sparse_inf_engine directory*/
+/* File enter_evidence.m in directory @jtree_sparse_inf_engine call it  */
+
+/*********************************************/
+/* distribute_evidence has 3 input & 2 output*/
+/* engine                                    */
+/* clpot                                     */
+/* seppot                                    */
+/*                                           */
+/* clpot                                     */
+/* seppot                                    */
+/*********************************************/
+
+#include "mex.h"
+
+#include <math.h>
+#include <search.h>
+#include "mex.h"
+
+int compare(const void* src1, const void* src2){
+	int i1 = *(int*)src1 ;
+	int i2 = *(int*)src2 ;
+	return i1-i2 ;
+}
+
+void ind_subv(int index, const int *cumprod, int n, int *bsubv){
+	int i;
+
+	for (i = n-1; i >= 0; i--) {
+		bsubv[i] = ((int)floor(index / cumprod[i]));
+		index = index % cumprod[i];
+	}
+}
+
+int subv_ind(const int n, const int *cumprod, const int *subv){
+	int i, index=0;
+
+	for(i=0; i<n; i++){
+		index += subv[i] * cumprod[i];
+	}
+	return index;
+}
+
+void compute_fixed_weight(int *weight, const double *pbSize, const int *dmask, const int *bCumprod, const int ND, const int diffdim){
+	int i, j;
+	int *eff_cumprod, *subv, *diffsize, *diff_cumprod;
+
+	subv = malloc(diffdim * sizeof(int));
+	eff_cumprod = malloc(diffdim * sizeof(int));
+	diffsize = malloc(diffdim * sizeof(int));
+	diff_cumprod = malloc(diffdim * sizeof(int));
+	for(i=0; i<diffdim; i++){
+		eff_cumprod[i] = bCumprod[dmask[i]];
+		diffsize[i] = (int)pbSize[dmask[i]];
+	}
+	diff_cumprod[0] = 1;
+	for(i=0; i<diffdim-1; i++){
+		diff_cumprod[i+1] = diff_cumprod[i] * diffsize[i];
+	}
+	for(i=0; i<ND; i++){
+		ind_subv(i, diff_cumprod, diffdim, subv);
+		weight[i] = 0;
+		for(j=0; j<diffdim; j++){
+			weight[i] += eff_cumprod[j] * subv[j];
+		}
+	}
+	free(eff_cumprod);
+	free(subv);
+	free(diffsize);
+	free(diff_cumprod);
+}
+
+mxArray* convert_table_to_sparse(const double *bT, const int *index, const int nzCounts, const int N){
+	mxArray  *spTable;
+    int      i, *irs, *jcs;
+    double   *sr;
+    
+	spTable = mxCreateSparse(N, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+			sr[i] = bT[i];
+			irs[i] = index[i];
+    }
+	return spTable;	
+}
+
+mxArray* convert_ill_table_to_sparse(const double *Table, const int *sequence, const int nzCounts, const int N){
+	mxArray *spTable;
+	int     i, temp, *irs, *jcs, count=0;
+	double  *sr;
+
+	spTable = mxCreateSparse(N, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+		irs[i] = sequence[count];
+		count++;
+		temp = sequence[count];
+		sr[i] = Table[temp];
+		count++;
+	}
+	return spTable;
+}
+
+void multiply_spPot_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, NZS, position, bindex, sindex, nzCounts=0;
+	int     *mask, *index, *result, *bir, *sir, *bjc, *sjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *bigTable, *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, value;
+	mxArray *pTemp;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	if(sdim == 0){
+		for(i=0; i<NZB; i++){
+			bpr[i] *= *spr;
+		}	
+		return;
+	}
+
+	bigTable = malloc(NZB * sizeof(double));
+	index = malloc(NZB * sizeof(double));
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		value = bpr[i];
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sir, NZS, sizeof(int), compare);
+		if(result){
+			position = result - sir;
+			value *= spr[position];
+			bigTable[nzCounts] = value;
+			index[nzCounts] = bindex;
+			nzCounts++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	pTemp = convert_table_to_sparse(bigTable, index, nzCounts, NB);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(bigTable);
+	free(index);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+void marginal_spPot_to_spPot(const mxArray *bigPot, mxArray *smallPot, const int maximize){
+	int     i, j, count, bdim, sdim, NB, NS, NZB, position, bindex, sindex, nzCounts=0;
+	int     *mask, *sequence, *result, *bir, *bjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *sTable, *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr;
+	mxArray *pTemp;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+	NS = 1;
+	for(i=0; i<sdim; i++){
+		NS *= (int)psSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	if(sdim == 0){
+		pTemp = mxGetField(smallPot, 0, "T");
+		spr = mxGetPr(pTemp);
+		*spr = 0;
+		if(maximize){
+			for(i=0; i<NZB; i++){
+				*spr = (*spr < bpr[i])? bpr[i] : *spr;
+			}
+		}
+		else{
+			for(i=0; i<NZB; i++){
+				*spr += bpr[i];
+			}
+		}	
+		return;
+	}
+
+	mask = malloc(sdim * sizeof(int));
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+
+
+	sTable = malloc(NZB * sizeof(double));
+	sequence = malloc(NZB * 2 * sizeof(double));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	for(i=0; i<NZB; i++){
+		sTable[i] = 0;
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	count = 0;
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sequence, nzCounts, sizeof(int)*2, compare);
+		if(result){
+			position = (result - sequence) / 2;
+			if(maximize)
+				sTable[position] = (sTable[position] < bpr[i]) ? bpr[i] : sTable[position];
+			else sTable[position] += bpr[i];
+		}
+		else {
+			if(maximize) 
+				sTable[nzCounts] = (sTable[nzCounts] < bpr[i]) ? bpr[i] : sTable[nzCounts];
+			else sTable[nzCounts] += bpr[i];
+			sequence[count] = sindex;
+			count++;
+			sequence[count] = nzCounts;
+			nzCounts++;
+			count++;
+		}
+	}
+	
+	pTemp = mxGetField(smallPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	qsort(sequence, nzCounts, sizeof(int) * 2, compare);
+	pTemp = convert_ill_table_to_sparse(sTable, sequence, nzCounts, NS);
+	mxSetField(smallPot, 0, "T", pTemp);
+
+	free(sTable);
+	free(sequence);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+void divide_null_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, count1, match, temp, bdim, sdim, diffdim, NB, NS, ND, NZB, NZS, bindex, sindex;
+	int     *samemask, *diffmask, *rir, *rjc, *sir, *sjc, *bCumprod, *sCumprod, *ssubv, *weight;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *rpr, *spr, value;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	if(sdim == 0){
+		pTemp = mxCreateSparse(NB, 1, NB, mxREAL);
+		mxSetField(bigPot, 0, "T", pTemp);
+		rpr = mxGetPr(pTemp);
+		rir = mxGetIr(pTemp);
+		rjc = mxGetJc(pTemp);
+		rjc[0] = 0;
+		rjc[1] = NB;
+		value = *spr;
+		if(value == 0) value = 1;
+		for(i=0; i<NB; i++){
+			rpr[i] = 1 / value;
+			rir[i] = i;
+		}	
+		return;
+	}
+
+	NS = 1;
+	for(i=0; i<sdim; i++){
+		NS *= (int)psSize[i];
+	}
+	ND = NB / NS;
+
+
+	pTemp = mxCreateSparse(NB, 1, NB, mxREAL);
+	rpr = mxGetPr(pTemp);
+	rir = mxGetIr(pTemp);
+	rjc = mxGetJc(pTemp);
+	rjc[0] = 0;
+	rjc[1] = NB;
+	for(i=0; i<NB; i++){
+		rpr[i] = 1;
+		rir[i] = i;
+	}
+
+	NZB = ND * NZS;
+
+	diffdim = bdim - sdim;
+	samemask = malloc(sdim * sizeof(int));
+	diffmask = malloc(diffdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	weight = malloc(ND * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	count1 = 0;
+	for(i=0; i<bdim; i++){
+		match = 0;
+		for(j=0; j<sdim; j++){
+			if(pbDomain[i] == psDomain[j]){
+				samemask[count] = i;
+				match = 1;
+				count++;
+				break;
+			}
+		}
+		if(match == 0){
+			diffmask[count1] = i; 
+			count1++;
+		}
+	}
+
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	count = 0;
+	compute_fixed_weight(weight, pbSize, diffmask, bCumprod, ND, diffdim);
+	for(i=0; i<NZS; i++){
+		sindex = sir[i];
+		ind_subv(sindex, sCumprod, sdim, ssubv);
+		temp = 0;
+		for(j=0; j<sdim; j++){
+			temp += ssubv[j] * bCumprod[samemask[j]];
+		}
+		for(j=0; j<ND; j++){
+			bindex = weight[j] + temp;
+			rpr[bindex] = 1 / (spr[i]);
+		}
+	}
+
+	pTemp1 = mxGetField(bigPot, 0, "T");
+	if(pTemp1)mxDestroyArray(pTemp1);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(samemask);
+	free(diffmask);
+	free(bCumprod);
+	free(sCumprod);
+	free(weight);
+	free(ssubv);
+}
+
+void divide_spPot_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, NZS, position, bindex, sindex;
+	int     *mask, *result, *bir, *sir, *bjc, *sjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, value;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp1 = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp1);
+	bir = mxGetIr(pTemp1);
+	bjc = mxGetJc(pTemp1);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	if(sdim == 0){
+		value = *spr;
+		if(value == 0)value = 1;
+		for(i=0; i<NZB; i++){
+			bpr[i] /= value;
+		}	
+		return;
+	}
+
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sir, NZS, sizeof(int), compare);
+		if(result){
+			position = result - sir;
+			bpr[i] /= spr[position];
+		}
+	}
+
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, j, loop, loops, nCliques, temp, count, parent, child, maximize, *distribute_order;
+	double  *pr, *pr1;
+	mxArray *pTemp, *pPreCh, *pClpot, *pSeppot;
+
+	pTemp = mxGetField(prhs[0], 0, "cliques");
+	nCliques = mxGetNumberOfElements(pTemp);
+	loops = nCliques - 1;
+	pTemp = mxGetField(prhs[0], 0, "maximize");
+	maximize = (int)mxGetScalar(pTemp);
+
+	distribute_order = malloc(2 * loops * sizeof(int));
+	pTemp = mxGetField(prhs[0], 0, "preorder");
+	pr = mxGetPr(pTemp);
+	pPreCh = mxGetField(prhs[0], 0, "preorder_children");
+	count = 0;
+	for(i=0; i<nCliques; i++){
+		temp = (int)pr[i] - 1;
+		pTemp = mxGetCell(pPreCh, temp);
+		pr1 = mxGetPr(pTemp);
+		loop = mxGetNumberOfElements(pTemp);
+		for(j=0; j<loop; j++){
+			distribute_order[count] = temp;
+			distribute_order[count + loops] = (int)pr1[j] - 1;
+			count++;
+		}
+	}
+
+	plhs[0] = mxDuplicateArray(prhs[1]);
+	plhs[1] = mxDuplicateArray(prhs[2]);
+
+	for(loop=0; loop<loops; loop++){
+		parent = distribute_order[loop];
+		child  = distribute_order[loop+loops];
+		i = nCliques * child + parent;
+		pClpot = mxGetCell(plhs[0], child);
+		pTemp = mxGetField(pClpot, 0, "T");
+		pSeppot = mxGetCell(plhs[1], i);
+		if(pTemp)
+			divide_spPot_by_spPot(pClpot, pSeppot);
+		else divide_null_by_spPot(pClpot, pSeppot);
+
+		pClpot = mxGetCell(plhs[0], parent);
+		marginal_spPot_to_spPot(pClpot, pSeppot, maximize);
+		mxSetCell(plhs[1], i, pSeppot);
+
+		pClpot = mxGetCell(plhs[0], child);
+		multiply_spPot_by_spPot(pClpot, pSeppot); 
+	}
+	free(distribute_order);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/init_pot.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,637 @@
+/* C mex init_pot for in @jtree_sparse_inf_engine directory               */
+/* The file enter_evidence.m in directory @jtree_sparse_inf_engine call it*/
+
+/**************************************/
+/* init_pot.c has 6 input & 2 output  */
+/* engine                             */
+/* clqs                               */
+/* pots                               */
+/* pot_type                           */
+/* onodes                             */
+/* ndx                                */
+/*                                    */
+/* clpot                              */
+/* seppot                             */
+/**************************************/
+#include <math.h>
+#include <search.h>
+#include "mex.h"
+
+int compare(const void* src1, const void* src2){
+	int i1 = *(int*)src1 ;
+	int i2 = *(int*)src2 ;
+	return i1-i2 ;
+}
+
+void ind_subv(int index, const int *cumprod, int n, int *bsubv){
+	int i;
+
+	for (i = n-1; i >= 0; i--) {
+		bsubv[i] = ((int)floor(index / cumprod[i]));
+		index = index % cumprod[i];
+	}
+}
+
+int subv_ind(const int n, const int *cumprod, const int *subv){
+	int i, index=0;
+
+	for(i=0; i<n; i++){
+		index += subv[i] * cumprod[i];
+	}
+	return index;
+}
+
+void compute_fixed_weight(int *weight, const double *pbSize, const int *dmask, const int *bCumprod, const int ND, const int diffdim){
+	int i, j;
+	int *eff_cumprod, *subv, *diffsize, *diff_cumprod;
+
+	subv = malloc(diffdim * sizeof(int));
+	eff_cumprod = malloc(diffdim * sizeof(int));
+	diffsize = malloc(diffdim * sizeof(int));
+	diff_cumprod = malloc(diffdim * sizeof(int));
+	for(i=0; i<diffdim; i++){
+		eff_cumprod[i] = bCumprod[dmask[i]];
+		diffsize[i] = (int)pbSize[dmask[i]];
+	}
+	diff_cumprod[0] = 1;
+	for(i=0; i<diffdim-1; i++){
+		diff_cumprod[i+1] = diff_cumprod[i] * diffsize[i];
+	}
+	for(i=0; i<ND; i++){
+		ind_subv(i, diff_cumprod, diffdim, subv);
+		weight[i] = 0;
+		for(j=0; j<diffdim; j++){
+			weight[i] += eff_cumprod[j] * subv[j];
+		}
+	}
+	free(eff_cumprod);
+	free(subv);
+	free(diffsize);
+	free(diff_cumprod);
+}
+
+mxArray* convert_to_sparse(const double *table, const int NB, const int counts){
+	mxArray  *spTable;
+    int      i, k, *ir, *jc;
+    double   *sr;
+    
+	spTable = mxCreateSparse(NB, 1, counts, mxREAL);
+    sr = mxGetPr(spTable);
+    ir = mxGetIr(spTable);
+    jc = mxGetJc(spTable);
+
+    k = 0; 
+	jc[0] = 0;
+	jc[1] = counts;
+	for(i=0; i<NB; i++){
+		if(table[i] != 0.0){
+			sr[k] = table[i];
+			ir[k] = i;
+			k++;
+		}
+    }
+
+	return spTable;
+}
+
+mxArray* convert_table_to_sparse(const double *bT, const int *index, const int nzCounts, const int NB){
+	mxArray  *spTable;
+    int      i, *irs, *jcs;
+    double   *sr;
+    
+	spTable = mxCreateSparse(NB, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+			sr[i] = bT[i];
+			irs[i] = index[i];
+    }
+	return spTable;	
+}
+
+mxArray* convert_ill_table_to_sparse(const double *bigTable, const int *sequence, const int nzCounts, const int NB){
+	mxArray *spTable;
+	int     i, temp, *irs, *jcs, count=0;
+	double  *sr;
+
+	spTable = mxCreateSparse(NB, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+		irs[i] = sequence[count];
+		count++;
+		temp = sequence[count];
+		sr[i] = bigTable[temp];
+		count++;
+	}
+	return spTable;
+}
+
+void multiply_null_by_fuPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, NB, NS, siz_b, siz_s, ndim, nzCounts=0;
+	int     *mask, *sx, *sy, *cpsy, *subs, *s, *cpsy2, *jc;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *bTable, *sTable, value;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	siz_b = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	siz_s = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<siz_b; i++){
+		NB *= (int)pbSize[i];
+	}
+	NS = 1;
+	for(i=0; i<siz_s; i++){
+		NS *= (int)psSize[i];
+	}
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	sTable = mxGetPr(pTemp);
+	bTable = malloc(NB * sizeof(double));
+	for(i=0; i<NB; i++){
+		bTable[i] = 0;
+	}
+
+	if(NS == 1){
+		value = *sTable;
+		for(i=0; i<NB; i++){
+			bTable[i] = value;
+		}
+		nzCounts = NB;
+		pTemp = mxGetField(bigPot, 0, "T");
+		if(pTemp)mxDestroyArray(pTemp);
+		pTemp = convert_to_sparse(bTable, NB, NB);
+		mxSetField(bigPot, 0, "T", pTemp);
+		free(bTable);
+		return;
+	}
+
+	if(NS == NB){
+		for(i=0; i<NB; i++){
+			bTable[i] = sTable[i];
+			if(sTable[i] != 0) nzCounts++;
+		}
+		pTemp = mxGetField(bigPot, 0, "T");
+		if(pTemp)mxDestroyArray(pTemp);
+		pTemp = convert_to_sparse(bTable, NB, nzCounts);
+		mxSetField(bigPot, 0, "T", pTemp);
+		free(bTable);
+		return;
+	}
+
+	mask = malloc(siz_s * sizeof(int));
+	count = 0;
+	for(i=0; i<siz_s; i++){
+		for(j=0; j<siz_b; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	ndim = siz_b;
+	sx = (int *)malloc(sizeof(int)*ndim);
+	sy = (int *)malloc(sizeof(int)*ndim);
+	for(i=0; i<ndim; i++){
+		sx[i] = (int)pbSize[i];
+		sy[i] = 1;
+	}
+	for(i=0; i<count; i++){
+		sy[mask[i]] = sx[mask[i]];
+	}
+
+	s = (int *)malloc(sizeof(int)*ndim);
+	*(cpsy = (int *)malloc(sizeof(int)*ndim)) = 1;
+	subs =   (int *)malloc(sizeof(int)*ndim);
+	cpsy2 =  (int *)malloc(sizeof(int)*ndim);
+	for(i = 0; i < ndim; i++){
+		subs[i] = 0;
+		s[i] = sx[i] - 1;
+	}
+			
+	for(i = 0; i < ndim-1; i++){
+		cpsy[i+1] = cpsy[i]*sy[i]--;
+		cpsy2[i] = cpsy[i]*sy[i];
+	}
+	cpsy2[ndim-1] = cpsy[ndim-1]*(--sy[ndim-1]);
+
+	for(j=0; j<NB; j++){
+		bTable[j] = *sTable;
+		if(*sTable != 0.0) nzCounts++;
+		for(i = 0; i < ndim; i++){
+			if(subs[i] == s[i]){
+				subs[i] = 0;
+				if(sy[i])
+					sTable -= cpsy2[i];
+			}
+			else{
+				subs[i]++;
+				if(sy[i])
+					sTable += cpsy[i];
+				break;
+			}
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	pTemp = convert_to_sparse(bTable, NB, nzCounts);
+	mxSetField(bigPot, 0, "T", pTemp);
+	pTemp1 = mxGetField(bigPot, 0, "T");
+	jc = mxGetJc(pTemp1);
+
+	free(sx);
+	free(sy);
+	free(s);
+	free(cpsy);
+	free(subs);
+	free(cpsy2);
+    free(mask);
+	free(bTable);
+}
+
+void multiply_null_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, count1, match, temp, bdim, sdim, diffdim, NB, NS, ND, NZB, NZS, bindex, sindex, nzCounts=0;
+	int     *samemask, *diffmask, *sir, *sjc, *bCumprod, *sCumprod, *ssubv, *sequence, *weight;
+	double  *bigTable, *pbDomain, *psDomain, *pbSize, *psSize, *spr;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+	NS = 1;
+	for(i=0; i<sdim; i++){
+		NS *= (int)psSize[i];
+	}
+	ND = NB / NS;
+
+	if(ND == 1){
+		pTemp = mxGetField(bigPot, 0, "T");
+		if(pTemp)mxDestroyArray(pTemp);
+		pTemp1 = mxGetField(smallPot, 0, "T");
+		pTemp = mxDuplicateArray(pTemp1);
+		mxSetField(bigPot, 0, "T", pTemp);
+		return;
+	}
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	NZB = ND * NZS;
+
+	diffdim = bdim - sdim;
+	sequence = malloc(NZB * 2 * sizeof(int));
+	bigTable = malloc(NZB * sizeof(double));
+	samemask = malloc(sdim * sizeof(int));
+	diffmask = malloc(diffdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	weight = malloc(ND * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	count1 = 0;
+	for(i=0; i<bdim; i++){
+		match = 0;
+		for(j=0; j<sdim; j++){
+			if(pbDomain[i] == psDomain[j]){
+				samemask[count] = i;
+				match = 1;
+				count++;
+				break;
+			}
+		}
+		if(match == 0){
+			diffmask[count1] = i; 
+			count1++;
+		}
+	}
+
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	count = 0;
+	compute_fixed_weight(weight, pbSize, diffmask, bCumprod, ND, diffdim);
+	for(i=0; i<NZS; i++){
+		sindex = sir[i];
+		ind_subv(sindex, sCumprod, sdim, ssubv);
+		temp = 0;
+		for(j=0; j<sdim; j++){
+			temp += ssubv[j] * bCumprod[samemask[j]];
+		}
+		for(j=0; j<ND; j++){
+			bindex = weight[j] + temp;
+			bigTable[nzCounts] = spr[i];
+			sequence[count] = bindex;
+			count++;
+			sequence[count] = nzCounts;
+			nzCounts++;
+			count++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	qsort(sequence, nzCounts, sizeof(int) * 2, compare);
+	pTemp = convert_ill_table_to_sparse(bigTable, sequence, nzCounts, NB);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(sequence); 
+	free(bigTable);
+	free(samemask);
+	free(diffmask);
+	free(bCumprod);
+	free(sCumprod);
+	free(weight);
+	free(ssubv);
+}
+
+void multiply_spPot_by_fuPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, bindex, sindex, nzCounts=0;
+	int     *mask, *index, *bir, *bjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *bigTable, *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, value;
+	mxArray *pTemp;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+
+	bigTable = malloc(NZB * sizeof(double));
+	index = malloc(NZB * sizeof(double));
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	for(i=0; i<NZB; i++){
+		bigTable[i] = 0;
+	}
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		value = spr[sindex];
+		if(value != 0){
+			bigTable[nzCounts] = bpr[i] * value;
+			index[nzCounts] = bindex;
+			nzCounts++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	pTemp = convert_table_to_sparse(bigTable, index, nzCounts, NB);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(bigTable);
+	free(index);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+void multiply_spPot_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, NZS, position, bindex, sindex, nzCounts=0;
+	int     *mask, *index, *result, *bir, *sir, *bjc, *sjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *bigTable, *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, value;
+	mxArray *pTemp;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	bigTable = malloc(NZB * sizeof(double));
+	index = malloc(NZB * sizeof(double));
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	for(i=0; i<NZB; i++){
+		bigTable[i] = 0;
+	}
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		value = bpr[i];
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sir, NZS, sizeof(int), compare);
+		if(result){
+			position = result - sir;
+			value *= spr[position];
+			bigTable[nzCounts] = value;
+			index[nzCounts] = bindex;
+			nzCounts++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	pTemp = convert_table_to_sparse(bigTable, index, nzCounts, NB);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(bigTable);
+	free(index);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, j, c, loop, nNodes, nCliques, ndomain, dims[2];
+	double  *pClqs, *pr, *pt, *pSize;
+	mxArray *pTemp, *pTemp1, *pStruct, *pCliques, *pBigpot, *pSmallpot;
+	const char *field_names[] = {"domain", "T", "sizes"};
+
+	nNodes = mxGetNumberOfElements(prhs[1]);
+	pCliques = mxGetField(prhs[0], 0, "cliques");
+	nCliques = mxGetNumberOfElements(pCliques);
+	pTemp = mxGetField(prhs[0], 0, "eff_node_sizes");
+	pSize = mxGetPr(pTemp);
+
+	plhs[0] = mxCreateCellArray(1, &nCliques);
+    for(i=0; i<nCliques; i++){
+        pStruct = mxCreateStructMatrix(1, 1, 3, field_names);
+		mxSetCell(plhs[0], i, pStruct);
+		pTemp = mxGetCell(pCliques, i);
+		ndomain = mxGetNumberOfElements(pTemp);
+		pt = mxGetPr(pTemp);
+		pTemp1 = mxDuplicateArray(pTemp);
+		mxSetField(pStruct, 0, "domain", pTemp1);
+		
+		pTemp = mxCreateDoubleMatrix(1, ndomain, mxREAL);
+		mxSetField(pStruct, 0, "sizes", pTemp);
+		pr = mxGetPr(pTemp);
+        for(j=0; j<ndomain; j++){
+            pr[j] = pSize[(int)pt[j]-1];
+        }
+    }
+
+	pClqs = mxGetPr(prhs[1]);
+	for(loop=0; loop<nNodes; loop++){
+		c = (int)pClqs[loop] - 1;
+		pSmallpot = mxGetCell(prhs[2], loop);
+		pTemp = mxGetField(pSmallpot, 0, "T");
+		pBigpot = mxGetCell(plhs[0], c);
+		pTemp1 = mxGetField(pBigpot, 0, "T");
+		if(pTemp1){
+			if(mxIsSparse(pTemp))
+				multiply_spPot_by_spPot(pBigpot, pSmallpot);
+			else multiply_spPot_by_fuPot(pBigpot, pSmallpot);
+		}
+		else{
+			if(mxIsSparse(pTemp))
+				multiply_null_by_spPot(pBigpot, pSmallpot);
+			else multiply_null_by_fuPot(pBigpot, pSmallpot);
+		}		
+	}
+
+	dims[0] = nCliques;
+	dims[1] = nCliques;
+	plhs[1] = mxCreateCellArray(2, dims);
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/init_pot1.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,636 @@
+/* C mex init_pot for in @jtree_sparse_inf_engine directory               */
+/* The file enter_evidence.m in directory @jtree_sparse_inf_engine call it*/
+
+/**************************************/
+/* init_pot.c has 6 input & 2 output  */
+/* engine                             */
+/* clqs                               */
+/* pots                               */
+/* pot_type                           */
+/* onodes                             */
+/* ndx                                */
+/*                                    */
+/* clpot                              */
+/* seppot                             */
+/**************************************/
+#include <math.h>
+#include <search.h>
+#include "mex.h"
+
+int compare(const void* src1, const void* src2){
+	int i1 = *(int*)src1 ;
+	int i2 = *(int*)src2 ;
+	return i1-i2 ;
+}
+
+void ind_subv(int index, const int *cumprod, int n, int *bsubv){
+	int i;
+
+	for (i = n-1; i >= 0; i--) {
+		bsubv[i] = ((int)floor(index / cumprod[i]));
+		index = index % cumprod[i];
+	}
+}
+
+int subv_ind(const int n, const int *cumprod, const int *subv){
+	int i, index=0;
+
+	for(i=0; i<n; i++){
+		index += subv[i] * cumprod[i];
+	}
+	return index;
+}
+
+void compute_fixed_weight(int *weight, const double *pbSize, const int *dmask, const int *bCumprod, const int ND, const int diffdim){
+	int i, j;
+	int *eff_cumprod, *subv, *diffsize, *diff_cumprod;
+
+	subv = malloc(diffdim * sizeof(int));
+	eff_cumprod = malloc(diffdim * sizeof(int));
+	diffsize = malloc(diffdim * sizeof(int));
+	diff_cumprod = malloc(diffdim * sizeof(int));
+	for(i=0; i<diffdim; i++){
+		eff_cumprod[i] = bCumprod[dmask[i]];
+		diffsize[i] = (int)pbSize[dmask[i]];
+	}
+	diff_cumprod[0] = 1;
+	for(i=0; i<diffdim-1; i++){
+		diff_cumprod[i+1] = diff_cumprod[i] * diffsize[i];
+	}
+	for(i=0; i<ND; i++){
+		ind_subv(i, diff_cumprod, diffdim, subv);
+		weight[i] = 0;
+		for(j=0; j<diffdim; j++){
+			weight[i] += eff_cumprod[j] * subv[j];
+		}
+	}
+	free(eff_cumprod);
+	free(subv);
+	free(diffsize);
+	free(diff_cumprod);
+}
+
+void reset_nzmax(mxArray *spArray, const int old_nzmax, const int new_nzmax){
+	double *ptr;
+	void   *newptr;
+	int    *ir, *jc;
+	int    nbytes;
+
+	if(new_nzmax == old_nzmax) return;
+	nbytes = new_nzmax * sizeof(*ptr);
+	ptr = mxGetPr(spArray);
+	newptr = mxRealloc(ptr, nbytes);
+	mxSetPr(spArray, newptr);
+	nbytes = new_nzmax * sizeof(*ir);
+	ir = mxGetIr(spArray);
+	newptr = mxRealloc(ir, nbytes);
+	mxSetIr(spArray, newptr);
+	jc = mxGetJc(spArray);
+	jc[0] = 0;
+	jc[1] = new_nzmax;
+	mxSetNzmax(spArray, new_nzmax);
+}
+
+mxArray* convert_table_to_sparse(const double *bT, const int *index, const int nzCounts, const int NB){
+	mxArray  *spTable;
+    int      i, *irs, *jcs;
+    double   *sr;
+    
+	spTable = mxCreateSparse(NB, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+			sr[i] = bT[i];
+			irs[i] = index[i];
+    }
+	return spTable;	
+}
+
+mxArray* convert_ill_table_to_sparse(const double *bigTable, const int *sequence, const int nzCounts, const int NB){
+	mxArray *spTable;
+	int     i, temp, *irs, *jcs, count=0;
+	double  *sr;
+
+	spTable = mxCreateSparse(NB, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+		irs[i] = sequence[count];
+		count++;
+		temp = sequence[count];
+		sr[i] = bigTable[temp];
+		count++;
+	}
+	return spTable;
+}
+
+void multiply_null_by_fuPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, NB, NS, siz_b, siz_s, ndim, nzCounts=0;
+	int     *mask, *sx, *sy, *cpsy, *subs, *s, *cpsy2, *bir, *bjc;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *spr, *bpr, value;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	siz_b = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	siz_s = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<siz_b; i++){
+		NB *= (int)pbSize[i];
+	}
+	NS = 1;
+	for(i=0; i<siz_s; i++){
+		NS *= (int)psSize[i];
+	}
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+
+	pTemp1 = mxCreateSparse(NB, 1, NB, mxREAL);
+	bpr = mxGetPr(pTemp1);
+	bir = mxGetIr(pTemp1);
+	bjc = mxGetJc(pTemp1);
+	bjc[0] = 0;
+	bjc[1] = NB;
+
+	if(NS == 1){
+		value = *spr;
+		for(i=0; i<NB; i++){
+			bpr[i] = value;
+			bir[i] = i;
+		}
+		nzCounts = NB;
+		pTemp = mxGetField(bigPot, 0, "T");
+		if(pTemp)mxDestroyArray(pTemp);
+		reset_nzmax(pTemp1, NB, nzCounts);
+		mxSetField(bigPot, 0, "T", pTemp1);
+		return;
+	}
+
+	if(NS == NB){
+		for(i=0; i<NB; i++){
+			if(spr[i] != 0){
+				bpr[nzCounts] = spr[i];
+				bir[nzCounts] = i;
+				nzCounts++;
+			}
+		}
+		pTemp = mxGetField(bigPot, 0, "T");
+		if(pTemp)mxDestroyArray(pTemp);
+		reset_nzmax(pTemp1, NB, nzCounts);
+		mxSetField(bigPot, 0, "T", pTemp1);
+		return;
+	}
+
+	mask = malloc(siz_s * sizeof(int));
+	count = 0;
+	for(i=0; i<siz_s; i++){
+		for(j=0; j<siz_b; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	ndim = siz_b;
+	sx = (int *)malloc(sizeof(int)*ndim);
+	sy = (int *)malloc(sizeof(int)*ndim);
+	for(i=0; i<ndim; i++){
+		sx[i] = (int)pbSize[i];
+		sy[i] = 1;
+	}
+	for(i=0; i<count; i++){
+		sy[mask[i]] = sx[mask[i]];
+	}
+
+	s = (int *)malloc(sizeof(int)*ndim);
+	*(cpsy = (int *)malloc(sizeof(int)*ndim)) = 1;
+	subs =   (int *)malloc(sizeof(int)*ndim);
+	cpsy2 =  (int *)malloc(sizeof(int)*ndim);
+	for(i = 0; i < ndim; i++){
+		subs[i] = 0;
+		s[i] = sx[i] - 1;
+	}
+			
+	for(i = 0; i < ndim-1; i++){
+		cpsy[i+1] = cpsy[i]*sy[i]--;
+		cpsy2[i] = cpsy[i]*sy[i];
+	}
+	cpsy2[ndim-1] = cpsy[ndim-1]*(--sy[ndim-1]);
+
+	for(j=0; j<NB; j++){
+		if(*spr != 0){
+			bpr[nzCounts] = *spr;
+			bir[nzCounts] = j;
+			nzCounts++;
+		}
+		for(i = 0; i < ndim; i++){
+			if(subs[i] == s[i]){
+				subs[i] = 0;
+				if(sy[i])
+					spr -= cpsy2[i];
+			}
+			else{
+				subs[i]++;
+				if(sy[i])
+					spr += cpsy[i];
+				break;
+			}
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	reset_nzmax(pTemp1, NB, nzCounts);
+	mxSetField(bigPot, 0, "T", pTemp1);
+
+	free(sx);
+	free(sy);
+	free(s);
+	free(cpsy);
+	free(subs);
+	free(cpsy2);
+    free(mask);
+}
+
+void multiply_null_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, count1, match, temp, bdim, sdim, diffdim, NB, NS, ND, NZB, NZS, bindex, sindex, nzCounts=0;
+	int     *samemask, *diffmask, *sir, *sjc, *bCumprod, *sCumprod, *ssubv, *sequence, *weight;
+	double  *bigTable, *pbDomain, *psDomain, *pbSize, *psSize, *spr;
+	mxArray *pTemp, *pTemp1;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+	NS = 1;
+	for(i=0; i<sdim; i++){
+		NS *= (int)psSize[i];
+	}
+	ND = NB / NS;
+
+	if(ND == 1){
+		pTemp = mxGetField(bigPot, 0, "T");
+		if(pTemp)mxDestroyArray(pTemp);
+		pTemp1 = mxGetField(smallPot, 0, "T");
+		pTemp = mxDuplicateArray(pTemp1);
+		mxSetField(bigPot, 0, "T", pTemp);
+		return;
+	}
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	NZB = ND * NZS;
+
+	diffdim = bdim - sdim;
+	sequence = malloc(NZB * 2 * sizeof(int));
+	bigTable = malloc(NZB * sizeof(double));
+	samemask = malloc(sdim * sizeof(int));
+	diffmask = malloc(diffdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	weight = malloc(ND * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	count1 = 0;
+	for(i=0; i<bdim; i++){
+		match = 0;
+		for(j=0; j<sdim; j++){
+			if(pbDomain[i] == psDomain[j]){
+				samemask[count] = i;
+				match = 1;
+				count++;
+				break;
+			}
+		}
+		if(match == 0){
+			diffmask[count1] = i; 
+			count1++;
+		}
+	}
+
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	count = 0;
+	compute_fixed_weight(weight, pbSize, diffmask, bCumprod, ND, diffdim);
+	for(i=0; i<NZS; i++){
+		sindex = sir[i];
+		ind_subv(sindex, sCumprod, sdim, ssubv);
+		temp = 0;
+		for(j=0; j<sdim; j++){
+			temp += ssubv[j] * bCumprod[samemask[j]];
+		}
+		for(j=0; j<ND; j++){
+			bindex = weight[j] + temp;
+			bigTable[nzCounts] = spr[i];
+			sequence[count] = bindex;
+			count++;
+			sequence[count] = nzCounts;
+			nzCounts++;
+			count++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	qsort(sequence, nzCounts, sizeof(int) * 2, compare);
+	pTemp = convert_ill_table_to_sparse(bigTable, sequence, nzCounts, NB);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(sequence); 
+	free(bigTable);
+	free(samemask);
+	free(diffmask);
+	free(bCumprod);
+	free(sCumprod);
+	free(weight);
+	free(ssubv);
+}
+
+void multiply_spPot_by_fuPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, bindex, sindex, nzCounts=0;
+	int     *mask, *index, *bir, *bjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *bigTable, *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, value;
+	mxArray *pTemp;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+
+	bigTable = malloc(NZB * sizeof(double));
+	index = malloc(NZB * sizeof(double));
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		value = spr[sindex];
+		if(value != 0){
+			bigTable[nzCounts] = bpr[i] * value;
+			index[nzCounts] = bindex;
+			nzCounts++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	pTemp = convert_table_to_sparse(bigTable, index, nzCounts, NB);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(bigTable);
+	free(index);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+void multiply_spPot_by_spPot(mxArray *bigPot, const mxArray *smallPot){
+	int     i, j, count, bdim, sdim, NB, NZB, NZS, position, bindex, sindex, nzCounts=0;
+	int     *mask, *index, *result, *bir, *sir, *bjc, *sjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *bigTable, *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, value;
+	mxArray *pTemp;
+
+	pTemp = mxGetField(bigPot, 0, "domain");
+	pbDomain = mxGetPr(pTemp);
+	bdim = mxGetNumberOfElements(pTemp);
+	pTemp = mxGetField(smallPot, 0, "domain");
+	psDomain = mxGetPr(pTemp);
+	sdim = mxGetNumberOfElements(pTemp);
+
+	pTemp = mxGetField(bigPot, 0, "sizes");
+	pbSize = mxGetPr(pTemp);
+	pTemp = mxGetField(smallPot, 0, "sizes");
+	psSize = mxGetPr(pTemp);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	bpr = mxGetPr(pTemp);
+	bir = mxGetIr(pTemp);
+	bjc = mxGetJc(pTemp);
+	NZB = bjc[1];
+
+	pTemp = mxGetField(smallPot, 0, "T");
+	spr = mxGetPr(pTemp);
+	sir = mxGetIr(pTemp);
+	sjc = mxGetJc(pTemp);
+	NZS = sjc[1];
+
+	bigTable = malloc(NZB * sizeof(double));
+	index = malloc(NZB * sizeof(double));
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	for(i=0; i<NZB; i++){
+		bigTable[i] = 0;
+	}
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		value = bpr[i];
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sir, NZS, sizeof(int), compare);
+		if(result){
+			position = result - sir;
+			value *= spr[position];
+			bigTable[nzCounts] = value;
+			index[nzCounts] = bindex;
+			nzCounts++;
+		}
+	}
+
+	pTemp = mxGetField(bigPot, 0, "T");
+	if(pTemp)mxDestroyArray(pTemp);
+	pTemp = convert_table_to_sparse(bigTable, index, nzCounts, NB);
+	mxSetField(bigPot, 0, "T", pTemp);
+
+	free(bigTable);
+	free(index);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, j, c, loop, nNodes, nCliques, ndomain, dims[2];
+	double  *pClqs, *pr, *pt, *pSize;
+	mxArray *pTemp, *pTemp1, *pStruct, *pCliques, *pBigpot, *pSmallpot;
+	const char *field_names[] = {"domain", "T", "sizes"};
+
+	nNodes = mxGetNumberOfElements(prhs[1]);
+	pCliques = mxGetField(prhs[0], 0, "cliques");
+	nCliques = mxGetNumberOfElements(pCliques);
+	pTemp = mxGetField(prhs[0], 0, "eff_node_sizes");
+	pSize = mxGetPr(pTemp);
+
+	plhs[0] = mxCreateCellArray(1, &nCliques);
+    for(i=0; i<nCliques; i++){
+        pStruct = mxCreateStructMatrix(1, 1, 3, field_names);
+		mxSetCell(plhs[0], i, pStruct);
+		pTemp = mxGetCell(pCliques, i);
+		ndomain = mxGetNumberOfElements(pTemp);
+		pt = mxGetPr(pTemp);
+		pTemp1 = mxDuplicateArray(pTemp);
+		mxSetField(pStruct, 0, "domain", pTemp1);
+		
+		pTemp = mxCreateDoubleMatrix(1, ndomain, mxREAL);
+		mxSetField(pStruct, 0, "sizes", pTemp);
+		pr = mxGetPr(pTemp);
+        for(j=0; j<ndomain; j++){
+            pr[j] = pSize[(int)pt[j]-1];
+        }
+    }
+
+	pClqs = mxGetPr(prhs[1]);
+	for(loop=0; loop<nNodes; loop++){
+		c = (int)pClqs[loop] - 1;
+		pSmallpot = mxGetCell(prhs[2], loop);
+		pTemp = mxGetField(pSmallpot, 0, "T");
+		pBigpot = mxGetCell(plhs[0], c);
+		pTemp1 = mxGetField(pBigpot, 0, "T");
+		if(pTemp1){
+			if(mxIsSparse(pTemp))
+				multiply_spPot_by_spPot(pBigpot, pSmallpot);
+			else multiply_spPot_by_fuPot(pBigpot, pSmallpot);
+		}
+		else{
+			if(mxIsSparse(pTemp))
+				multiply_null_by_spPot(pBigpot, pSmallpot);
+			else multiply_null_by_fuPot(pBigpot, pSmallpot);
+		}		
+	}
+
+	dims[0] = nCliques;
+	dims[1] = nCliques;
+	plhs[1] = mxCreateCellArray(2, dims);
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/old/init_pot1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function [clpot, seppot] = init_pot(engine, clqs, pots, pot_type, onodes, ndx)
+% INIT_POT Initialise potentials with evidence (jtree_inf)
+% function [clpot, seppot] = init_pot(engine, clqs, pots, pot_type, onodes)
+
+cliques = engine.cliques;
+bnet = bnet_from_engine(engine);
+% Set the clique potentials to all 1s
+C = length(cliques);
+clpot = cell(1,C);
+for i=1:C
+  clpot{i} = mk_initial_pot(pot_type, cliques{i}, bnet.node_sizes(:), bnet.cnodes(:), onodes);
+end
+
+% Multiply on specified potentials
+for i=1:length(clqs)
+  c = clqs(i);
+  clpot{c} = multiply_by_pot(clpot{c}, pots{i});
+end
+
+seppot = cell(C,C); % implicitely initialized to 1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@jtree_sparse_inf_engine/set_fields.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function engine = set_fields(engine, varargin)
+% SET_FIELDS Set the fields for a generic engine
+% engine = set_fields(engine, name/value pairs)
+%
+% e.g., engine = set_fields(engine, 'maximize', 1)
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'maximize', engine.maximize = args{i+1};
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/likelihood_weighting_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@likelihood_weighting_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function [engine, ll] = enter_evidence(engine, evidence, nsamples)
+% ENTER_EVIDENCE Add the specified evidence to the network (likelihood_weighting)
+% [engine, ll] = enter_evidence(engine, evidence, nsamples)
+% evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% If nsamples is not specified, the value specified when the engine was created will be used.
+% ll (log-likelihood) is set to [].
+
+ll = [];
+if nargin < 3, nsamples = engine.nsamples; end
+
+bnet = bnet_from_engine(engine);
+N = length(bnet.dag);
+samples = cell(nsamples, N);
+weights = zeros(1, nsamples);
+
+ns = bnet.node_sizes;
+original_evidence = evidence;
+observed = ~isemptycell(original_evidence);
+for s=1:nsamples
+  evidence = original_evidence(:); % must be a column vector
+  w = 1;
+  for i=1:N
+    ps = parents(bnet.dag, i);
+    e = bnet.equiv_class(i);
+    if observed(i)
+      p = exp(log_prob_node(bnet.CPD{e}, evidence(i), evidence(ps)));
+      w = w * p;
+    else
+      x = sample_node(bnet.CPD{e}, evidence(ps));
+      evidence{i} = x;
+    end
+  end
+  samples(s,:) = evidence;
+  weights(s) = w;
+end                 
+
+engine.samples = samples;
+engine.weights = weights;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/likelihood_weighting_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function engine = likelihood_weighting_inf_engine(bnet, varargin)
+% LIKELIHOOD_WEIGHTING_INF_ENGINE 
+% engine = likelihood_weighting_inf_engine(bnet, ...)
+%
+% Optional arguments [defaults]
+% nsamples - [500]
+
+nsamples = 500;
+
+if nargin >= 2
+  args = varargin;
+  nargs = length(args);
+  for i=1:2:nargs
+    switch args{i},
+     case 'nsamples', nsamples= args{i+1};
+     otherwise,
+      error(['invalid argument name ' args{i}]);
+    end
+  end
+end   
+
+engine.nsamples = nsamples;
+engine.samples = [];
+engine.weights = [];
+engine = class(engine, 'likelihood_weighting_inf_engine', inf_engine(bnet));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@likelihood_weighting_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function marginal = marginal_nodes(engine, nodes)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (likelihood_weighting)
+% marginal = marginal_nodes(engine, nodes)
+
+bnet = bnet_from_engine(engine);
+ddom = myintersect(nodes, bnet.dnodes);
+cdom = myintersect(nodes, bnet.cnodes);
+nsamples = size(engine.samples, 1);
+ns = bnet.node_sizes;
+
+%w = normalise(engine.weights);
+w = engine.weights;
+if mysubset(nodes, ddom)
+  T = 0*myones(ns(nodes));
+  P = prod(ns(nodes));
+  indices = ind2subv(ns(nodes), 1:P);
+  samples = reshape(cat(1, engine.samples{:,nodes}), nsamples, length(nodes));
+  for j = 1:P
+    rows = find_rows(samples, indices(j,:));
+    T(j) = sum(w(rows));
+  end
+  T = normalise(T);
+  marginal.T = T;
+elseif subset(nodes, cdom)
+  samples = reshape(cat(1, engine.samples{:,nodes}), nsamples*sum(ns(nodes)), length(nodes));
+  [marginal.mu, marginal.Sigma] =  wstats(samples', normalise(w));
+else
+  error('can''t handle mixed marginals yet');
+end
+
+marginal.domain = nodes;
+
+%%%%%%%%%
+
+function rows = find_rows(M, v)
+% FINDROWS Find rows which are equal to a specified vector
+% rows = findrows(M, v)
+% Each row of M is a sample
+
+temp = abs(M - repmat(v, size(M, 1), 1));
+rows = find(sum(temp,2) == 0);      
+
+%%%%%%%%
+
+function [mu, Sigma] = wstats(X, w)
+
+% Computes the weighted mean and weighted covariance matrix for a given
+% set of observations X(:,i), and a set of normalised weights w(i).
+% Each column of X is a sample.
+
+d = X - repmat(X * w', 1, size(X, 2));
+mu = sum(X .* repmat(w, size(X, 1), 1), 2);
+Sigma = d * diag(w) * d';          
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/bethe_free_energy.m/1.1.1.1/Sun Jul  6 20:57:18 2003//
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/loopy_converged.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_family.m/1.1.1.1/Fri Oct 18 20:05:16 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/pearl_inf_engine.m/1.1.1.1/Sat Jan 11 18:53:28 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@pearl_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/bethe_free_energy.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+function loglik = bethe_free_energy(engine, evidence)
+% BETHE_FREE_ENERGY Compute Bethe free energy approximation to the log likelihood
+% loglik = bethe_free_energy(engine, evidence)
+%
+% The Bethe free energy is given by an exact energy term and an approximate entropy term.
+% Energy
+%  E = -sum_f sum_i b(f,i) ln theta(f,i)
+% where b(f,i) = approximate Pr(family f = i) 
+% and theta(f,i) = Pr(f = i)
+% Entropy
+%  S = H1 - H2
+%  H1 = sum_f sum_p H(b(f))
+% where b(f) = belief on family f, H(.) = entropy
+%  H2 = sum_n (q(n)-1) H(b(n))
+% where q(n) = num. neighbors of n
+%
+% This function was written by Yair Weiss, 8/22/01.
+
+hidden = find(isemptycell(evidence));
+bnet = bnet_from_engine(engine);
+N = length(bnet.dag);
+
+add_ev = 1;
+E=0;H1=0;H2=0;
+loglik=0;
+for n=1:N
+  ps=parents(bnet.dag,n);
+  if (length(ps)==0) % root node
+    qi=length(children(bnet.dag,n))-1;
+  else
+    qi=length(children(bnet.dag,n));
+  end
+  bf = marginal_family(engine, n, add_ev);
+  bf = bf.T(:);
+  e = bnet.equiv_class(n);
+  T = CPD_to_CPT(bnet.CPD{e});
+  T = T(:);
+  E = E-sum(log(T+(T==0)).*bf);
+
+  if length(ps) > 0
+    % root nodes don't count as fmailies
+    H1 = H1+sum(log(bf+(bf==0)).*bf);
+  end
+  
+  bi = marginal_nodes(engine, n, add_ev);
+  bi = bi.T(:);
+  H2 = H2+qi*sum(log(bi+(bi==0)).*bi);
+end
+loglik=E+H1-H2;
+loglik=-loglik;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,153 @@
+function [engine, loglik, niter] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (pearl)
+% [engine, loglik, num_iter] = enter_evidence(engine, evidence, ...)
+% evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value (scalar or column vector)
+%
+% The following optional arguments can be specified in the form of name/value pa irs:
+% [default value in brackets]
+%
+% maximize - if 1, does max-product instead of sum-product [0]
+% 'filename' -  msgs will be printed to this file, so you can assess convergence while it runs [engine.filename]
+%
+% e.g., engine = enter_evidence(engine, ev, 'maximize', 1)
+%     
+% For discrete nodes, loglik is the negative Bethe free energy evaluated at the final beliefs.
+% For Gaussian nodes, loglik is currently always 0.
+%
+% 'num_iter' returns the number of iterations used.
+
+maximize = 0;
+filename = engine.filename;
+
+% parse optional params
+args = varargin;
+nargs = length(args);
+if nargs > 0
+  for i=1:2:nargs
+    switch args{i},
+     case 'maximize', maximize = args{i+1};
+     case 'filename', filename = args{i+1};
+     otherwise,
+      error(['invalid argument name ' args{i}]);
+    end
+  end
+end
+    
+
+if maximize
+  error('can''t handle max-prop yet')
+end
+
+engine.maximize = maximize;
+engine.filename = filename;
+engine.bel = []; % reset if necessary
+
+bnet = bnet_from_engine(engine);
+N = length(bnet.dag);
+ns = bnet.node_sizes(:);
+
+observed_bitv = ~isemptycell(evidence);
+disconnected = find(engine.disconnected_nodes_bitv);
+if ~all(observed_bitv(disconnected))
+  error(['The following discrete nodes must be observed: ' num2str(disconnected)])
+end
+msg = init_pearl_msgs(engine.msg_type, engine.msg_dag, ns, evidence);
+
+niter = 1;
+switch engine.protocol
+ case 'parallel', [msg, niter] = parallel_protocol(engine, evidence, msg);
+ case 'tree', msg = tree_protocol(engine, evidence, msg);
+ otherwise,
+  error(['unrecognized protocol ' engine.protocol])
+end
+engine.niter = niter;
+
+engine.marginal = cell(1,N);
+nodes = find(~engine.disconnected_nodes_bitv);
+for n=nodes(:)'
+  engine.marginal{n} = compute_bel(engine.msg_type, msg{n}.pi, msg{n}.lambda);
+end
+
+engine.evidence = evidence; % needed by marginal_nodes and marginal_family
+engine.msg = msg;  % needed by marginal_family
+
+if (nargout >= 2)
+  if (engine.msg_type == 'd')
+    loglik = bethe_free_energy(engine, evidence);
+  else
+    loglik = 0;
+  end
+end
+
+
+
+%%%%%%%%%%%
+
+function msg =  init_pearl_msgs(msg_type, dag, ns, evidence)
+% INIT_MSGS Initialize the lambda/pi message and state vectors
+% msg =  init_msgs(dag, ns, evidence)
+%
+
+N = length(dag);
+msg = cell(1,N);
+observed = ~isemptycell(evidence);
+lam_msg = 1;
+
+for n=1:N
+  ps = parents(dag, n);
+  msg{n}.pi_from_parent = cell(1, length(ps));
+  for i=1:length(ps)
+    p = ps(i);
+    msg{n}.pi_from_parent{i} = mk_msg(msg_type, ns(p));
+  end
+  
+  cs = children(dag, n);
+  msg{n}.lambda_from_child = cell(1, length(cs));
+  for i=1:length(cs)
+    c = cs(i);
+    msg{n}.lambda_from_child{i} = mk_msg(msg_type, ns(n), lam_msg);
+  end
+
+  msg{n}.lambda = mk_msg(msg_type, ns(n), lam_msg);
+  msg{n}.pi = mk_msg(msg_type, ns(n));
+  
+  if observed(n)
+    msg{n}.lambda_from_self = mk_msg_with_evidence(msg_type, ns(n), evidence{n});
+  else
+    msg{n}.lambda_from_self = mk_msg(msg_type, ns(n), lam_msg);
+  end
+end
+
+
+
+%%%%%%%%%
+
+function msg =  mk_msg(msg_type, sz, is_lambda_msg)
+
+if nargin < 3, is_lambda_msg = 0; end
+
+switch msg_type
+ case 'd', msg = ones(sz, 1);
+ case 'g', 
+  if is_lambda_msg
+    msg.precision = zeros(sz, sz);
+    msg.info_state = zeros(sz, 1);
+  else
+    msg.Sigma = zeros(sz, sz);
+    msg.mu = zeros(sz,1);
+  end
+end
+
+%%%%%%%%%%%%
+
+function msg = mk_msg_with_evidence(msg_type, sz, val)
+
+switch msg_type
+ case 'd',
+  msg = zeros(sz, 1);
+  msg(val) = 1;
+ case 'g',
+  %msg.observed_val = val(:);
+  msg.precision = inf;
+  msg.mu = val(:);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/loopy_converged.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function niter = loopy_converged(engine)
+% LOOPY_CONVERGED Did loopy belief propagation converge? 0 means no, eles we return the num. iterations.
+% function niter = loopy_converged(engine)
+%
+% We use a simple heuristic: we say convergence occurred if the number of iterations
+% used was less than the maximum allowed.
+
+if engine.niter == engine.max_iter
+  niter = 0;
+else
+  niter = engine.niter;
+end
+%conv = (strcmp(engine.protocol, 'tree') | (engine.niter < engine.max_iter));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/marginal_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+function m = marginal_family(engine, n, add_ev)
+% MARGINAL_FAMILY Compute the marginal on i's family (loopy)
+% m = marginal_family(engine, n, add_ev)
+
+if nargin < 3, add_ev = 0; end
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+ps = parents(bnet.dag, n);
+dom = [ps n];
+CPD = bnet.CPD{bnet.equiv_class(n)};
+
+switch engine.msg_type
+  case 'd',
+   % The method is similar to the following HMM equation:
+   % xi(i,j,t) = normalise( alpha(i,t) * transmat(i,j) * obsmat(j,t+1) * beta(j,t+1) )
+   % where xi(i,j,t) = Pr(Q(t)=i, Q(t+1)=j | y(1:T))   
+   % beta == lambda, alpha == pi, alpha from each parent = pi msg
+   % In general, if A,B are parents of C,
+   % P(A,B,C) = P(C|A,B) pi_msg(A->C) pi_msg(B->C) lambda(C)
+   % where lambda(C) = P(ev below and including C|C) = prod incoming lamba_msg(children->C)
+   % and pi_msg(X->C) = P(X|ev above) etc
+   
+   T = dpot(dom, ns(dom), CPD_to_CPT(CPD));
+   for j=1:length(ps)
+     p = ps(j);
+     pi_msg = dpot(p, ns(p), engine.msg{n}.pi_from_parent{j});
+     T = multiply_by_pot(T, pi_msg);
+   end         
+   lambda = dpot(n, ns(n), engine.msg{n}.lambda);
+   T = multiply_by_pot(T, lambda);
+   T = normalize_pot(T);
+   m = pot_to_marginal(T);
+   if ~add_ev
+     m.T = shrink_obs_dims_in_table(m.T, dom, engine.evidence);
+   end
+ case 'g',
+  if engine.disconnected_nodes_bitv(n)
+    m.T = 1;
+    m.domain = dom;
+    if add_ev
+      m = add_ev_to_dmarginal(m, engine.evidence, ns)
+    end
+    return;
+  end
+
+  [m, C, W] = gaussian_CPD_params_given_dps(CPD, dom, engine.evidence);
+  cdom = myintersect(dom, bnet.cnodes);
+  pot = linear_gaussian_to_cpot(m, C, W, dom, ns, cdom, engine.evidence); 
+  % linear_gaussian_to_cpot will set the effective size of observed nodes to 0,
+  % so we need to do this explicitely for the messages, too,
+  % so they are all the same size.
+  obs_bitv = ~isemptycell(engine.evidence);
+  ps = parents(engine.msg_dag, n);
+  for j=1:length(ps)
+    p = ps(j);
+    msg = engine.msg{n}.pi_from_parent{j};
+    if obs_bitv(p)
+      pi_msg = mpot(p, 0);
+    else
+      pi_msg = mpot(p, ns(p), 0, msg.mu, msg.Sigma);
+    end
+    pot = multiply_by_pot(pot, mpot_to_cpot(pi_msg));
+  end         
+  msg = engine.msg{n}.lambda;
+  if obs_bitv(n)
+    lambda = cpot(n, 0);
+  else
+    lambda = cpot(n, ns(n), 0, msg.info_state, msg.precision);
+  end
+  pot = multiply_by_pot(pot, lambda);
+  m = pot_to_marginal(pot);
+  if add_ev
+    m = add_evidence_to_gmarginal(m, engine.evidence, bnet.node_sizes, bnet.cnodes);
+  end
+end
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function marginal = marginal_nodes(engine, query, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (loopy)
+% marginal = marginal_nodes(engine, query, add_ev)
+%
+% 'query' must be a single node.
+% add_ev is an optional argument; if 1, observed nodes will be set to their original size,
+% otherwise they will be treated like points.
+   
+if nargin < 3, add_ev = 0; end
+
+if length(query) > 1
+  error('can only compute marginal on single nodes or families')
+end
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes(:);
+
+switch engine.msg_type
+ case 'd',
+  T = engine.marginal{query};
+  if ~add_ev
+    marginal.T = shrink_obs_dims_in_table(T, query, engine.evidence);
+  else
+    marginal.T = T;
+  end
+  marginal.domain = query;
+ 
+ case 'g',
+  if engine.disconnected_nodes_bitv(query)
+    marginal.T = 1;
+    marginal.domain = query;
+    if add_ev
+      marginal = add_ev_to_dmarginal(marginal, engine.evidence, ns)
+    end
+    return;
+  end
+
+  marginal = engine.marginal{query};
+  marginal.domain = query;
+  if ~add_ev
+    marginal = shrink_obs_dims_in_gaussian(marginal, query, engine.evidence, ns);
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/pearl_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,158 @@
+function engine = pearl_inf_engine(bnet, varargin)
+% PEARL_INF_ENGINE Pearl's algorithm (belief propagation)
+% engine = pearl_inf_engine(bnet, ...)
+%
+% If the graph has no loops (undirected cycles), you should use the tree protocol,
+% and the results will be exact.
+% Otherwise, you should use the parallel protocol, and the results may be approximate.
+%
+% Optional arguments [default in brackets]
+% 'protocol' - tree or parallel ['parallel']
+%
+% Optional arguments for the loopy case
+% 'max_iter' - specifies the max num. iterations to perform [2*num nodes]
+% 'tol' - convergence criterion on messages  [1e-3]
+% 'momentum' - msg = (m*old + (1-m)*new). [m=0]
+% 'filename' -  msgs will be printed to this file, so you can assess convergence while it runs [[]]
+% 'storebel' - 1 means save engine.bel{n,t} for every iteration t and hidden node n [0]
+%
+% If there are discrete and cts nodes, we assume all the discretes are observed. In this
+% case, you must use the parallel protocol, and the evidence pattern must be fixed.
+
+
+N = length(bnet.dag);
+protocol = 'parallel';
+max_iter = 2*N;
+% We use N+2 for the following reason:
+% In N iterations, we get the exact answer for a tree.
+% In the N+1st iteration, we notice that the results are the same as before, and terminate.
+% In loopy_converged, we see that N+1 < max = N+2, and declare convergence.
+tol = 1e-3;
+momentum = 0;
+filename = [];
+storebel = 0;
+
+args = varargin;
+for i=1:2:length(args)
+  switch args{i},
+   case 'protocol', protocol = args{i+1};
+   case 'max_iter', max_iter = args{i+1};
+   case 'tol', tol = args{i+1};
+   case 'momentum', momentum = args{i+1};
+   case 'filename', filename = args{i+1};
+   case 'storebel', storebel = args{i+1};
+  end
+end
+
+engine.filename = filename;
+engine.storebel = storebel;
+engine.bel = [];
+
+if strcmp(protocol, 'tree')
+  % We first send messages up to the root (pivot node), and then back towards the leaves.
+  % If the bnet is a singly connected graph (no loops), choosing a root induces a directed tree.
+  % Peot and Shachter discuss ways to pick the root so as to minimize the work,
+  % taking into account which nodes have changed.
+  % For simplicity, we always pick the root to be the last node in the graph.
+  % This means the first pass is equivalent to going forward in time in a DBN.
+
+  engine.root = N;
+  [engine.adj_mat, engine.preorder, engine.postorder, loopy] = ...
+    mk_rooted_tree(bnet.dag, engine.root);
+  % engine.adj_mat might have different edge orientations from bnet.dag
+  if loopy
+    error('can only apply tree protocol to loop-less graphs')
+  end
+else
+  engine.root = [];
+  engine.adj_mat = [];
+  engine.preorder = [];
+  engine.postorder = [];
+end
+
+engine.niter = [];
+engine.protocol = protocol;
+engine.max_iter = max_iter;
+engine.tol = tol;
+engine.momentum = momentum;
+engine.maximize = [];
+
+%onodes = find(~isemptycell(evidence));
+onodes = bnet.observed;
+engine.msg_type = determine_pot_type(bnet, onodes, 1:N); % needed also by marginal_nodes
+if strcmp(engine.msg_type, 'cg')
+  error('messages must be discrete or Gaussian')
+end
+[engine.msg_dag, disconnected_nodes] = mk_msg_dag(bnet, engine.msg_type, onodes);
+engine.disconnected_nodes_bitv = zeros(1,N);
+engine.disconnected_nodes_bitv(disconnected_nodes) = 1;
+
+
+% this is where we store stuff between enter_evidence and marginal_nodes
+engine.marginal = cell(1,N);
+engine.evidence = []; 
+engine.msg = [];
+
+[engine.parent_index, engine.child_index] = mk_loopy_msg_indices(engine.msg_dag);
+
+engine = class(engine, 'pearl_inf_engine', inf_engine(bnet));
+ 
+
+%%%%%%%%%
+
+function [dag, disconnected_nodes] = mk_msg_dag(bnet, msg_type, onodes)
+
+% If we are using Gaussian msgs, all discrete nodes must be observed;
+% they are then disconnected from the graph, so we don't try to send
+% msgs to/from them: their observed value simply serves to index into
+% the right set of parameters for the Gaussian nodes (which use CPD.ps
+% instead of parents(dag), and hence are unaffected by this "surgery").
+
+disconnected_nodes = [];
+switch msg_type
+ case 'd', dag = bnet.dag;
+ case 'g',
+  disconnected_nodes = bnet.dnodes;
+  dag = bnet.dag;
+  for i=disconnected_nodes(:)'
+    ps = parents(bnet.dag, i);
+    cs = children(bnet.dag, i);
+    if ~isempty(ps), dag(ps, i) = 0; end
+    if ~isempty(cs), dag(i, cs) = 0; end
+  end
+end
+
+
+%%%%%%%%%%
+function [parent_index, child_index] = mk_loopy_msg_indices(dag)
+% MK_LOOPY_MSG_INDICES Compute "port numbers" for message passing
+% [parent_index, child_index] = mk_loopy_msg_indices(bnet)
+%
+% child_index{n}(c) = i means c is n's i'th child, i.e., i = find_equiv_posns(c, children(n))
+% child_index{n}(c) = 0 means c is not a child of n.
+% parent_index{n}{p} is defined similarly.
+% We need to use these indices since the pi_from_parent/ lambda_from_child cell arrays
+% cannot be sparse, and hence cannot be indexed by the actual number of the node.
+% Instead, we use the number of the "port" on which the message arrived.
+
+N = length(dag);
+child_index = cell(1,N);
+parent_index = cell(1,N);
+for n=1:N
+  cs = children(dag, n);
+  child_index{n} = sparse(1,N);
+  for i=1:length(cs)
+    c = cs(i);
+    child_index{n}(c) = i;
+  end
+  ps = parents(dag, n);
+  parent_index{n} = sparse(1,N);
+  for i=1:length(ps)
+    p = ps(i);
+    parent_index{n}(p) = i;
+  end
+end
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/compute_bel.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/parallel_protocol.m/1.1.1.1/Sun Aug 21 20:00:12 2005//
+/prod_lambda_msgs.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/tree_protocol.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@pearl_inf_engine/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/compute_bel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function bel = compute_bel(msg_type, pi, lambda)
+
+switch msg_type,
+ case 'd', bel = normalise(pi .* lambda);
+ case 'g',
+  if isinf(lambda.precision) % ignore pi because lambda is completely certain (observed)
+    bel.mu = lambda.mu;
+    bel.Sigma = zeros(length(bel.mu)); % infinite precision => 0 variance
+  elseif all(pi.Sigma==0) % ignore lambda because pi is completely certain (delta fn prior)
+    bel.Sigma = pi.Sigma;
+    bel.mu = pi.mu;
+  elseif all(isinf(pi.Sigma)) % ignore pi because pi is completely uncertain
+    bel.Sigma  = inv(lambda.precision);
+    bel.mu = bel.Sigma * lambda.info_state;
+  elseif all(lambda.precision == 0) % ignore lambda because lambda is completely uncertain
+    bel.Sigma = pi.Sigma;
+    bel.mu = pi.mu;
+  else % combine both pi and lambda
+    pi_precision = inv(pi.Sigma);
+    bel.Sigma = inv(pi_precision + lambda.precision);
+    bel.mu = bel.Sigma*(pi_precision * pi.mu + lambda.info_state);
+  end
+ otherwise, error(['unrecognized msg type ' msg_type])
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/parallel_protocol.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,114 @@
+function [msg, niter] = parallel_protocol(engine, evidence, msg)
+
+bnet = bnet_from_engine(engine);
+N = length(bnet.dag);
+ns = bnet.node_sizes(:);
+
+if ~isempty(engine.filename)
+  fid = fopen(engine.filename, 'w');
+  if fid == 0
+    error(['could not open ' engine.filename ' for writing'])
+  end
+else
+  fid = [];
+end
+
+converged = 0;
+iter = 1;
+hidden = find(isemptycell(evidence));
+bel = cell(1,N);
+old_bel = cell(1,N);
+%nodes = mysetdiff(1:N, engine.disconnected_nodes);
+nodes = find(~engine.disconnected_nodes_bitv);
+while ~converged & (iter <= engine.max_iter)
+  % Everybody updates their state in parallel
+  for n=nodes(:)'
+    cs_msg = children(engine.msg_dag, n);
+    %msg{n}.lambda = compute_lambda(n, cs, msg);
+    msg{n}.lambda = prod_lambda_msgs(n, cs_msg, msg, engine.msg_type);
+    ps_orig = parents(bnet.dag, n);
+    msg{n}.pi = CPD_to_pi(bnet.CPD{bnet.equiv_class(n)}, engine.msg_type, n, ps_orig, msg, evidence);
+  end
+  
+  changed = 0;
+  if ~isempty(fid)
+    fprintf(fid, 'ITERATION %d\n', iter);
+  end
+  for n=hidden(:)' % this will not contain any disconnected nodes
+    old_bel{n} = bel{n};
+    bel{n}  = compute_bel(engine.msg_type, msg{n}.pi, msg{n}.lambda);
+    if ~isempty(fid)
+      fprintf(fid, 'node %d: %s\n', n, bel_to_str(bel{n}, engine.msg_type));
+    end
+    if engine.storebel
+      engine.bel{n,iter} = bel{n};
+    end
+    if (iter == 1) | ~approxeq_bel(bel{n}, old_bel{n}, engine.tol, engine.msg_type)
+      changed = 1;
+    end
+  end
+  %converged = ~changed;
+  converged = ~changed & (iter > 1);  % Sonia Leach changed this
+
+  if ~converged
+    % Everybody sends to all their neighbors in parallel
+    for n=nodes(:)'
+      % lambda msgs to parents
+      ps_msg = parents(engine.msg_dag, n);
+      ps_orig = parents(bnet.dag, n);
+      for p=ps_msg(:)'
+	j = engine.child_index{p}(n); % n is p's j'th child
+	old_msg = msg{p}.lambda_from_child{j}(:);
+	new_msg = CPD_to_lambda_msg(bnet.CPD{bnet.equiv_class(n)}, engine.msg_type, n, ps_orig, ...
+				    msg, p, evidence);
+	lam_msg = convex_combination_msg(old_msg, new_msg, engine.momentum, engine.msg_type);
+	msg{p}.lambda_from_child{j} = lam_msg;
+      end 
+
+      % pi msgs to children
+      cs_msg = children(engine.msg_dag, n);
+      for c=cs_msg(:)'
+	j = engine.parent_index{c}(n); % n is c's j'th parent
+	old_msg = msg{c}.pi_from_parent{j}(:);
+	%new_msg = compute_pi_msg(n, cs, msg, c));
+	new_msg = compute_bel(engine.msg_type, msg{n}.pi, prod_lambda_msgs(n, cs_msg, msg, engine.msg_type, c));
+	pi_msg = convex_combination_msg(old_msg, new_msg, engine.momentum, engine.msg_type);
+	msg{c}.pi_from_parent{j} = pi_msg;
+      end
+    end
+    iter = iter + 1;
+  end
+end
+
+if fid > 0, fclose(fid); end
+%niter = iter - 1;
+niter = iter;
+
+%%%%%%%%%%
+
+function str = bel_to_str(bel, type)
+
+switch type
+ case 'd', str = sprintf('%9.4f ', bel(:)');
+ case 'g', str = sprintf('%9.4f ', bel.mu(:)');
+end
+
+
+%%%%%%%
+
+function a = approxeq_bel(bel1, bel2, tol, type)
+
+switch type
+ case 'd', a = approxeq(bel1, bel2, tol);
+ case 'g', a = approxeq(bel1.mu, bel2.mu, tol) & approxeq(bel1.Sigma, bel2.Sigma, tol);
+end
+
+
+%%%%%%%
+
+function msg = convex_combination_msg(old_msg, new_msg, old_weight, type)
+
+switch type
+ case 'd', msg = old_weight * old_msg + (1-old_weight)*new_msg;
+ case 'g', msg = new_msg;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/prod_lambda_msgs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function lam = prod_lambda_msgs(n, cs, msg, msg_type, except)
+
+if nargin < 5, except = -1; end
+
+lam = msg{n}.lambda_from_self;
+switch msg_type
+  case 'd',
+   for i=1:length(cs)
+     c = cs(i);
+     if c ~= except
+       lam = lam .* msg{n}.lambda_from_child{i};
+     end
+   end  
+ case 'g',
+  if isinf(lam.precision) % isfield(lam, 'observed_val')
+    return; % pass on the observed msg
+  end
+   for i=1:length(cs)
+     c = cs(i);
+     if c ~= except
+       m = msg{n}.lambda_from_child{i};
+       lam.precision = lam.precision + m.precision;
+       lam.info_state = lam.info_state + m.info_state;
+     end
+   end  
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@pearl_inf_engine/private/tree_protocol.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+function msg = tree_protocol(engine, evidence, msg)
+
+bnet = bnet_from_engine(engine);
+N = length(bnet.dag);
+
+% Send messages from leaves to root
+for i=1:N-1
+  n = engine.postorder(i);
+  above = parents(engine.adj_mat, n);
+  msg = send_msgs_to_some_neighbors(n, msg, above, bnet, engine.child_index, engine.parent_index, ...
+				    engine.msg_type, evidence);
+end
+
+% Process root
+n = engine.root;
+cs = children(bnet.dag, n);
+%msg{n}.lambda = compute_lambda(n, cs, msg, engine.msg_type);
+msg{n}.lambda = prod_lambda_msgs(n, cs, msg, engine.msg_type);
+ps = parents(bnet.dag, n);
+msg{n}.pi = CPD_to_pi(bnet.CPD{bnet.equiv_class(n)}, engine.msg_type, n, ps, msg, evidence);
+
+% Send messages from root to leaves
+for i=1:N
+  n = engine.preorder(i);
+  below = children(engine.adj_mat, n);
+  msg = send_msgs_to_some_neighbors(n, msg, below, bnet, engine.child_index, engine.parent_index, ...
+				    engine.msg_type, evidence);
+end
+
+  
+%%%%%%%%%%
+
+function msg = send_msgs_to_some_neighbors(n, msg, valid_nbrs, bnet, child_index, parent_index, ...
+					   msg_type, evidence)
+
+verbose = 0;
+
+ns = bnet.node_sizes;
+dag = bnet.dag;
+e = bnet.equiv_class(n);
+CPD = bnet.CPD{e};
+
+
+cs = children(dag, n);
+%msg{n}.lambda = compute_lambda(n, cs, msg);
+msg{n}.lambda = prod_lambda_msgs(n, cs, msg, msg_type);
+if verbose, fprintf('%d computes lambda\n', n); display(msg{n}.lambda); end
+
+ps = parents(dag, n);
+msg{n}.pi = CPD_to_pi(CPD, msg_type, n, ps, msg, evidence);
+if verbose, fprintf('%d computes pi\n', n); display(msg{n}.pi); end
+
+ps2 = myintersect(parents(dag, n), valid_nbrs);
+for p=ps2(:)'
+  lam_msg = CPD_to_lambda_msg(CPD, msg_type, n, ps, msg, p, evidence);
+  j = child_index{p}(n); % n is p's j'th child
+  msg{p}.lambda_from_child{j} = lam_msg;
+  if verbose, fprintf('%d sends lambda to %d\n', n, p); display(lam_msg); end
+end
+
+cs2 = myintersect(cs, valid_nbrs);
+for c=cs2(:)'
+  %pi_msg = compute_pi_msg(n, cs, msg, c);
+  pi_msg = compute_bel(msg_type, msg{n}.pi, prod_lambda_msgs(n, cs, msg, msg_type, c));
+  j = parent_index{c}(n); % n is c's j'th parent
+  msg{c}.pi_from_parent{j} = pi_msg;
+  if verbose, fprintf('%d sends pi to %d\n', n, c); display(pi_msg); end
+end
+
+
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/enter_evidence.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/marginal_nodes.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/quickscore_inf_engine.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D/private////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@quickscore_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function engine = enter_evidence(engine, pos, neg)
+% ENTER_EVIDENCE Add evidence to the QMR network
+% engine = enter_evidence(engine, pos, neg)
+%
+% pos = list of leaves that have positive observations
+% neg = list of leaves that have negative observations
+
+% Extract params for the observed findings
+obs = myunion(pos, neg);
+%inhibit_obs = engine.inhibit(obs, :);
+inhibit_obs = engine.inhibit(:,obs)';
+leak_obs = engine.leak(obs);
+
+% Find what nodes correspond to the original observed leaves
+pos2 = find_equiv_posns(pos, obs);
+neg2 = find_equiv_posns(neg, obs);
+engine.post = quickscore(pos2, neg2, inhibit_obs, engine.prior, leak_obs); 
+%engine.post = C_quickscore(pos2, neg2, inhibit_obs, engine.prior, leak_obs); 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function m = marginal_nodes(engine, query)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (quickscore)
+% marginal = marginal_nodes(engine, query)
+%
+% 'query' must be a single disease (root) node.
+
+assert(length(query)==1);
+p = engine.post(query);
+m.T = [1-p p]';
+m.domain = query;
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/C_quickscore.c/1.1.1.1/Wed May 29 15:59:56 2002//
+/nr.h/1.1.1.1/Wed May 29 15:59:56 2002//
+/nrutil.c/1.1.1.1/Wed May 29 15:59:56 2002//
+/nrutil.h/1.1.1.1/Wed May 29 15:59:56 2002//
+/quickscore.m/1.1.1.1/Wed May 29 15:59:56 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@quickscore_inf_engine/private
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/C_quickscore.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,164 @@
+/* To compile, type "mex C_quickscore.c" */
+
+#include <stdio.h>
+#include "nrutil.h"
+#include "nrutil.c"
+#include <math.h>
+#include "mex.h"
+
+#define MAX(X,Y) (X)>(Y)?(X):(Y)
+
+int two_to_the(int n)
+{
+  return 1 << n;
+}
+
+void int2bin(int num, int nbits, int bits[])
+{
+  int i, mask;
+  mask = 1 << (nbits-1); /* mask = 0010...0 , where the 1 is in col nbits (rightmost = col 1) */
+  for (i = 0; i < nbits; i++) {
+    bits[i] = ((num & mask) == 0) ? 0 : 1;
+    num <<= 1;
+  }
+}
+
+
+void quickscore(int ndiseases, int nfindings, const double *fpos, int npos, const double *fneg, int nneg,
+                  const double *inhibit, const double *prior, const double *leak, double *prob)
+{
+  double *Pon, *Poff, **Uon, **Uoff, **post, *pterm, *ptermOff, *ptermOn, temp, p, myp;
+  int *bits, nsubsets, *fmask;
+  int f, d, i, j, si, size_subset, sign;
+
+  Pon = dvector(0, ndiseases);
+  Poff = dvector(0, ndiseases);
+  Pon[0] = 1;
+  Poff[0] = 0;
+  for (i=1; i <= ndiseases; i++) {
+    Pon[i] = prior[i-1];
+    Poff[i] = 1-Pon[i];
+  }
+
+  Uon = dmatrix(0, nfindings-1, 0, ndiseases);
+  Uoff = dmatrix(0, nfindings-1, 0, ndiseases);
+  d = 0;
+  for (f=0; f < nfindings; f++) {
+    Uon[f][d] = leak[f];
+    Uoff[f][d] = leak[f];
+  }
+  for (f=0; f < nfindings; f++) {
+    for (d=1; d <= ndiseases; d++) {
+      Uon[f][d] = inhibit[f + nfindings*(d-1)];
+      Uoff[f][d] = 1;
+    }
+  }
+  
+  post = dmatrix(0, ndiseases, 0, 1);
+  for (d = 0; d <= ndiseases; d++) {
+    post[d][0] = 0;
+    post[d][1] = 0;
+  }
+  
+  bits = ivector(0, npos-1);
+  fmask = ivector(0, nfindings-1);
+  pterm = dvector(0, ndiseases);
+  ptermOff = dvector(0, ndiseases);
+  ptermOn = dvector(0, ndiseases);
+
+  nsubsets = two_to_the(npos);
+
+  for (si = 0; si < nsubsets; si++) {
+    int2bin(si, npos, bits);
+    for (i=0; i < nfindings; i++) fmask[i] = 0;
+    for (i=0; i < nneg; i++) fmask[(int)fneg[i]-1] = 1;
+    size_subset = 0;
+    for (i=0; i < npos; i++) {
+      if (bits[i]) {
+	size_subset++;
+	fmask[(int)fpos[i]-1] = 1;
+      }
+    }
+    p = 1;
+    for (d=0; d <= ndiseases; d++) {
+      temp = 1;
+      for (j = 0; j < nfindings; j++) {
+	if (fmask[j]) temp *= Uoff[j][d];
+      }
+      ptermOff[d] = temp;
+
+      temp = 1;
+      for (j = 0; j < nfindings; j++) {
+	if (fmask[j]) temp *= Uon[j][d];
+      }
+      ptermOn[d] = temp;
+
+      pterm[d] = Poff[d]*ptermOff[d] + Pon[d]*ptermOn[d];
+      p *= pterm[d];
+    }
+    sign = (int) pow(-1, size_subset);
+    for (d=0; d <= ndiseases; d++) {
+      myp = p / pterm[d];
+      post[d][0] += sign*(myp * ptermOff[d]);
+      post[d][1] += sign*(myp * ptermOn[d]);
+    }
+  } /* next si */
+
+  
+  for (d=0; d <= ndiseases; d++) {
+    post[d][0] *= Poff[d];
+    post[d][1] *= Pon[d];
+  }
+  for (d=0; d <= ndiseases; d++) {
+    temp = post[d][0] + post[d][1];
+    post[d][0] /= temp;
+    post[d][1] /= temp;
+    if (d>0) { prob[d-1] = post[d][1]; }
+  }
+
+  
+  free_dvector(Pon, 0, ndiseases);
+  free_dvector(Poff, 0, ndiseases);
+  free_dmatrix(Uon, 0, nfindings-1, 0, ndiseases);
+  free_dmatrix(Uoff, 0, nfindings-1, 0, ndiseases);
+  free_dmatrix(post, 0, ndiseases, 0, 1);
+  free_ivector(bits, 0, npos-1);
+  free_ivector(fmask, 0, nfindings-1);
+  free_dvector(pterm, 0, ndiseases);
+  free_dvector(ptermOff, 0, ndiseases);
+  free_dvector(ptermOn, 0, ndiseases);
+}
+
+
+void mexFunction(
+                 int nlhs,       mxArray *plhs[],
+                 int nrhs, const mxArray *prhs[]
+                 )
+{
+  double *fpos, *fneg, *inhibit, *prior, *leak, *prob;
+  int npos, nneg, ndiseases, nfindings;
+  double *p;
+
+  /* read the input args */
+  fpos = mxGetPr(prhs[0]);
+  npos = MAX(mxGetM(prhs[0]), mxGetN(prhs[0]));
+
+  fneg = mxGetPr(prhs[1]);
+  nneg = MAX(mxGetM(prhs[1]), mxGetN(prhs[1]));
+
+  inhibit = mxGetPr(prhs[2]); /* inhibit(finding, disease) */
+  nfindings = mxGetM(prhs[2]);
+  ndiseases = mxGetN(prhs[2]);
+
+  prior = mxGetPr(prhs[3]);
+
+  leak = mxGetPr(prhs[4]);
+
+
+ /* set the output pointers */
+  plhs[0] = mxCreateDoubleMatrix(1, ndiseases, mxREAL);
+  prob = mxGetPr(plhs[0]);
+
+  quickscore(ndiseases, nfindings, fpos, npos, fneg, nneg, inhibit, prior, leak, prob);
+}
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/nr.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,536 @@
+/* CAUTION: This is the ANSI C (only) version of the Numerical Recipes
+   utility file nr.h.  Do not confuse this file with the same-named
+   file nr.h that is supplied in the 'misc' subdirectory.
+   *That* file is the one from the book, and contains both ANSI and
+   traditional K&R versions, along with #ifdef macros to select the
+   correct version.  *This* file contains only ANSI C.               */
+
+#ifndef _NR_H_
+#define _NR_H_
+
+#ifndef _FCOMPLEX_DECLARE_T_
+typedef struct FCOMPLEX {float r,i;} fcomplex;
+#define _FCOMPLEX_DECLARE_T_
+#endif /* _FCOMPLEX_DECLARE_T_ */
+
+#ifndef _ARITHCODE_DECLARE_T_
+typedef struct {
+	unsigned long *ilob,*iupb,*ncumfq,jdif,nc,minint,nch,ncum,nrad;
+} arithcode;
+#define _ARITHCODE_DECLARE_T_
+#endif /* _ARITHCODE_DECLARE_T_ */
+
+#ifndef _HUFFCODE_DECLARE_T_
+typedef struct {
+	unsigned long *icod,*ncod,*left,*right,nch,nodemax;
+} huffcode;
+#define _HUFFCODE_DECLARE_T_
+#endif /* _HUFFCODE_DECLARE_T_ */
+
+#include <stdio.h>
+
+void addint(double **uf, double **uc, double **res, int nf);
+void airy(float x, float *ai, float *bi, float *aip, float *bip);
+void amebsa(float **p, float y[], int ndim, float pb[],	float *yb,
+	float ftol, float (*funk)(float []), int *iter, float temptr);
+void amoeba(float **p, float y[], int ndim, float ftol,
+	float (*funk)(float []), int *iter);
+float amotry(float **p, float y[], float psum[], int ndim,
+	float (*funk)(float []), int ihi, float fac);
+float amotsa(float **p, float y[], float psum[], int ndim, float pb[],
+	float *yb, float (*funk)(float []), int ihi, float *yhi, float fac);
+void anneal(float x[], float y[], int iorder[], int ncity);
+double anorm2(double **a, int n);
+void arcmak(unsigned long nfreq[], unsigned long nchh, unsigned long nradd,
+	arithcode *acode);
+void arcode(unsigned long *ich, unsigned char **codep, unsigned long *lcode,
+	unsigned long *lcd, int isign, arithcode *acode);
+void arcsum(unsigned long iin[], unsigned long iout[], unsigned long ja,
+	int nwk, unsigned long nrad, unsigned long nc);
+void asolve(unsigned long n, double b[], double x[], int itrnsp);
+void atimes(unsigned long n, double x[], double r[], int itrnsp);
+void avevar(float data[], unsigned long n, float *ave, float *var);
+void balanc(float **a, int n);
+void banbks(float **a, unsigned long n, int m1, int m2, float **al,
+	unsigned long indx[], float b[]);
+void bandec(float **a, unsigned long n, int m1, int m2, float **al,
+	unsigned long indx[], float *d);
+void banmul(float **a, unsigned long n, int m1, int m2, float x[], float b[]);
+void bcucof(float y[], float y1[], float y2[], float y12[], float d1,
+	float d2, float **c);
+void bcuint(float y[], float y1[], float y2[], float y12[],
+	float x1l, float x1u, float x2l, float x2u, float x1,
+	float x2, float *ansy, float *ansy1, float *ansy2);
+void beschb(double x, double *gam1, double *gam2, double *gampl,
+	double *gammi);
+float bessi(int n, float x);
+float bessi0(float x);
+float bessi1(float x);
+void bessik(float x, float xnu, float *ri, float *rk, float *rip,
+	float *rkp);
+float bessj(int n, float x);
+float bessj0(float x);
+float bessj1(float x);
+void bessjy(float x, float xnu, float *rj, float *ry, float *rjp,
+	float *ryp);
+float bessk(int n, float x);
+float bessk0(float x);
+float bessk1(float x);
+float bessy(int n, float x);
+float bessy0(float x);
+float bessy1(float x);
+float beta(float z, float w);
+float betacf(float a, float b, float x);
+float betai(float a, float b, float x);
+float bico(int n, int k);
+void bksub(int ne, int nb, int jf, int k1, int k2, float ***c);
+float bnldev(float pp, int n, long *idum);
+float brent(float ax, float bx, float cx,
+	float (*f)(float), float tol, float *xmin);
+float brent_arg(float ax, float bx, float cx,
+	float (*f)(float, void*), float tol, float *xmin, void *arg);
+void broydn(float x[], int n, int *check,
+	void (*vecfunc)(int, float [], float []));
+void bsstep(float y[], float dydx[], int nv, float *xx, float htry,
+	float eps, float yscal[], float *hdid, float *hnext,
+	void (*derivs)(float, float [], float []));
+void caldat(long julian, int *mm, int *id, int *iyyy);
+void chder(float a, float b, float c[], float cder[], int n);
+float chebev(float a, float b, float c[], int m, float x);
+void chebft(float a, float b, float c[], int n, float (*func)(float));
+void chebpc(float c[], float d[], int n);
+void chint(float a, float b, float c[], float cint[], int n);
+float chixy(float bang);
+void choldc(float **a, int n, float p[]);
+void cholsl(float **a, int n, float p[], float b[], float x[]);
+void chsone(float bins[], float ebins[], int nbins, int knstrn,
+	float *df, float *chsq, float *prob);
+void chstwo(float bins1[], float bins2[], int nbins, int knstrn,
+	float *df, float *chsq, float *prob);
+void cisi(float x, float *ci, float *si);
+void cntab1(int **nn, int ni, int nj, float *chisq,
+	float *df, float *prob, float *cramrv, float *ccc);
+void cntab2(int **nn, int ni, int nj, float *h, float *hx, float *hy,
+	float *hygx, float *hxgy, float *uygx, float *uxgy, float *uxy);
+void convlv(float data[], unsigned long n, float respns[], unsigned long m,
+	int isign, float ans[]);
+void copy(double **aout, double **ain, int n);
+void correl(float data1[], float data2[], unsigned long n, float ans[]);
+void cosft(float y[], int n, int isign);
+void cosft1(float y[], int n);
+void cosft2(float y[], int n, int isign);
+void covsrt(float **covar, int ma, int ia[], int mfit);
+void crank(unsigned long n, float w[], float *s);
+void cyclic(float a[], float b[], float c[], float alpha, float beta,
+	float r[], float x[], unsigned long n);
+void daub4(float a[], unsigned long n, int isign);
+float dawson(float x);
+float dbrent(float ax, float bx, float cx,
+	float (*f)(float), float (*df)(float), float tol, float *xmin);
+void ddpoly(float c[], int nc, float x, float pd[], int nd);
+int decchk(char string[], int n, char *ch);
+void derivs(float x, float y[], float dydx[]);
+float df1dim(float x);
+void dfour1(double data[], unsigned long nn, int isign);
+void dfpmin(float p[], int n, float gtol, int *iter, float *fret,
+	float (*func)(float []), void (*dfunc)(float [], float []));
+float dfridr(float (*func)(float), float x, float h, float *err);
+void dftcor(float w, float delta, float a, float b, float endpts[],
+	float *corre, float *corim, float *corfac);
+void dftint(float (*func)(float), float a, float b, float w,
+	float *cosint, float *sinint);
+void difeq(int k, int k1, int k2, int jsf, int is1, int isf,
+	int indexv[], int ne, float **s, float **y);
+void dlinmin(float p[], float xi[], int n, float *fret,
+	float (*func)(float []), void (*dfunc)(float [], float[]));
+double dpythag(double a, double b);
+void drealft(double data[], unsigned long n, int isign);
+void dsprsax(double sa[], unsigned long ija[], double x[], double b[],
+	unsigned long n);
+void dsprstx(double sa[], unsigned long ija[], double x[], double b[],
+	unsigned long n);
+void dsvbksb(double **u, double w[], double **v, int m, int n, double b[],
+	double x[]);
+void dsvdcmp(double **a, int m, int n, double w[], double **v);
+void eclass(int nf[], int n, int lista[], int listb[], int m);
+void eclazz(int nf[], int n, int (*equiv)(int, int));
+float ei(float x);
+void eigsrt(float d[], float **v, int n);
+float elle(float phi, float ak);
+float ellf(float phi, float ak);
+float ellpi(float phi, float en, float ak);
+void elmhes(float **a, int n);
+float erfcc(float x);
+float erff(float x);
+float erffc(float x);
+void eulsum(float *sum, float term, int jterm, float wksp[]);
+float evlmem(float fdt, float d[], int m, float xms);
+float expdev(long *idum);
+float expint(int n, float x);
+float f1(float x);
+float f1dim(float x);
+float f1dim_arg(float x, void *arg);
+float f2(float y);
+float f3(float z);
+float factln(int n);
+float factrl(int n);
+void fasper(float x[], float y[], unsigned long n, float ofac, float hifac,
+	float wk1[], float wk2[], unsigned long nwk, unsigned long *nout,
+	unsigned long *jmax, float *prob);
+void fdjac(int n, float x[], float fvec[], float **df,
+	void (*vecfunc)(int, float [], float []));
+void fgauss(float x, float a[], float *y, float dyda[], int na);
+void fill0(double **u, int n);
+void fit(float x[], float y[], int ndata, float sig[], int mwt,
+	float *a, float *b, float *siga, float *sigb, float *chi2, float *q);
+void fitexy(float x[], float y[], int ndat, float sigx[], float sigy[],
+	float *a, float *b, float *siga, float *sigb, float *chi2, float *q);
+void fixrts(float d[], int m);
+void fleg(float x, float pl[], int nl);
+void flmoon(int n, int nph, long *jd, float *frac);
+float fmin(float x[]);
+void four1(float data[], unsigned long nn, int isign);
+void fourew(FILE *file[5], int *na, int *nb, int *nc, int *nd);
+void fourfs(FILE *file[5], unsigned long nn[], int ndim, int isign);
+void fourn(float data[], unsigned long nn[], int ndim, int isign);
+void fpoly(float x, float p[], int np);
+void fred2(int n, float a, float b, float t[], float f[], float w[],
+	float (*g)(float), float (*ak)(float, float));
+float fredin(float x, int n, float a, float b, float t[], float f[], float w[],
+	float (*g)(float), float (*ak)(float, float));
+void frenel(float x, float *s, float *c);
+void frprmn(float p[], int n, float ftol, int *iter, float *fret,
+	float (*func)(float []), void (*dfunc)(float [], float []));
+void frprmn_arg(float p[], int n, float ftol, int *iter, float *fret,
+	float (*func)(float [], void*), void (*dfunc)(float [], float [], void*), void* arg);
+void ftest(float data1[], unsigned long n1, float data2[], unsigned long n2,
+	float *f, float *prob);
+float gamdev(int ia, long *idum);
+float gammln(float xx);
+float gammp(float a, float x);
+float gammq(float a, float x);
+float gasdev(long *idum);
+void gaucof(int n, float a[], float b[], float amu0, float x[], float w[]);
+void gauher(float x[], float w[], int n);
+void gaujac(float x[], float w[], int n, float alf, float bet);
+void gaulag(float x[], float w[], int n, float alf);
+void gauleg(float x1, float x2, float x[], float w[], int n);
+void gaussj(float **a, int n, float **b, int m);
+void gcf(float *gammcf, float a, float x, float *gln);
+float golden(float ax, float bx, float cx, float (*f)(float), float tol,
+	float *xmin);
+void gser(float *gamser, float a, float x, float *gln);
+void hpsel(unsigned long m, unsigned long n, float arr[], float heap[]);
+void hpsort(unsigned long n, float ra[]);
+void hqr(float **a, int n, float wr[], float wi[]);
+void hufapp(unsigned long index[], unsigned long nprob[], unsigned long n,
+	unsigned long i);
+void hufdec(unsigned long *ich, unsigned char *code, unsigned long lcode,
+	unsigned long *nb, huffcode *hcode);
+void hufenc(unsigned long ich, unsigned char **codep, unsigned long *lcode,
+	unsigned long *nb, huffcode *hcode);
+void hufmak(unsigned long nfreq[], unsigned long nchin, unsigned long *ilong,
+	unsigned long *nlong, huffcode *hcode);
+void hunt(float xx[], unsigned long n, float x, unsigned long *jlo);
+void hypdrv(float s, float yy[], float dyyds[]);
+fcomplex hypgeo(fcomplex a, fcomplex b, fcomplex c, fcomplex z);
+void hypser(fcomplex a, fcomplex b, fcomplex c, fcomplex z,
+	fcomplex *series, fcomplex *deriv);
+unsigned short icrc(unsigned short crc, unsigned char *bufptr,
+	unsigned long len, short jinit, int jrev);
+unsigned short icrc1(unsigned short crc, unsigned char onech);
+unsigned long igray(unsigned long n, int is);
+void iindexx(unsigned long n, long arr[], unsigned long indx[]);
+void indexx(unsigned long n, float arr[], unsigned long indx[]);
+void interp(double **uf, double **uc, int nf);
+int irbit1(unsigned long *iseed);
+int irbit2(unsigned long *iseed);
+void jacobi(float **a, int n, float d[], float **v, int *nrot);
+void jacobn(float x, float y[], float dfdx[], float **dfdy, int n);
+long julday(int mm, int id, int iyyy);
+void kendl1(float data1[], float data2[], unsigned long n, float *tau, float *z,
+	float *prob);
+void kendl2(float **tab, int i, int j, float *tau, float *z, float *prob);
+void kermom(double w[], double y, int m);
+void ks2d1s(float x1[], float y1[], unsigned long n1,
+	void (*quadvl)(float, float, float *, float *, float *, float *),
+	float *d1, float *prob);
+void ks2d2s(float x1[], float y1[], unsigned long n1, float x2[], float y2[],
+	unsigned long n2, float *d, float *prob);
+void ksone(float data[], unsigned long n, float (*func)(float), float *d,
+	float *prob);
+void kstwo(float data1[], unsigned long n1, float data2[], unsigned long n2,
+	float *d, float *prob);
+void laguer(fcomplex a[], int m, fcomplex *x, int *its);
+void lfit(float x[], float y[], float sig[], int ndat, float a[], int ia[],
+	int ma, float **covar, float *chisq, void (*funcs)(float, float [], int));
+void linbcg(unsigned long n, double b[], double x[], int itol, double tol,
+	 int itmax, int *iter, double *err);
+void linmin(float p[], float xi[], int n, float *fret,
+	float (*func)(float []));
+void linmin_arg(float p[], float xi[], int n, float *fret,
+	float (*func)(float [], void*), void *arg);
+void lnsrch(int n, float xold[], float fold, float g[], float p[], float x[],
+	 float *f, float stpmax, int *check, float (*func)(float []));
+void load(float x1, float v[], float y[]);
+void load1(float x1, float v1[], float y[]);
+void load2(float x2, float v2[], float y[]);
+void locate(float xx[], unsigned long n, float x, unsigned long *j);
+void lop(double **out, double **u, int n);
+void lubksb(float **a, int n, int *indx, float b[]);
+void ludcmp(float **a, int n, int *indx, float *d);
+void machar(int *ibeta, int *it, int *irnd, int *ngrd,
+	int *machep, int *negep, int *iexp, int *minexp, int *maxexp,
+	float *eps, float *epsneg, float *xmin, float *xmax);
+void matadd(double **a, double **b, double **c, int n);
+void matsub(double **a, double **b, double **c, int n);
+void medfit(float x[], float y[], int ndata, float *a, float *b, float *abdev);
+void memcof(float data[], int n, int m, float *xms, float d[]);
+int metrop(float de, float t);
+void mgfas(double **u, int n, int maxcyc);
+void mglin(double **u, int n, int ncycle);
+float midexp(float (*funk)(float), float aa, float bb, int n);
+float midinf(float (*funk)(float), float aa, float bb, int n);
+float midpnt(float (*func)(float), float a, float b, int n);
+float midsql(float (*funk)(float), float aa, float bb, int n);
+float midsqu(float (*funk)(float), float aa, float bb, int n);
+void miser(float (*func)(float []), float regn[], int ndim, unsigned long npts,
+	float dith, float *ave, float *var);
+void mmid(float y[], float dydx[], int nvar, float xs, float htot,
+	int nstep, float yout[], void (*derivs)(float, float[], float[]));
+void mnbrak(float *ax, float *bx, float *cx, float *fa, float *fb,
+	float *fc, float (*func)(float));
+void mnbrak_arg(float *ax, float *bx, float *cx, float *fa, float *fb,
+	float *fc, float (*func)(float, void*), void *arg);
+void mnewt(int ntrial, float x[], int n, float tolx, float tolf);
+void moment(float data[], int n, float *ave, float *adev, float *sdev,
+	float *var, float *skew, float *curt);
+void mp2dfr(unsigned char a[], unsigned char s[], int n, int *m);
+void mpadd(unsigned char w[], unsigned char u[], unsigned char v[], int n);
+void mpdiv(unsigned char q[], unsigned char r[], unsigned char u[],
+	unsigned char v[], int n, int m);
+void mpinv(unsigned char u[], unsigned char v[], int n, int m);
+void mplsh(unsigned char u[], int n);
+void mpmov(unsigned char u[], unsigned char v[], int n);
+void mpmul(unsigned char w[], unsigned char u[], unsigned char v[], int n,
+	int m);
+void mpneg(unsigned char u[], int n);
+void mppi(int n);
+void mprove(float **a, float **alud, int n, int indx[], float b[],
+	float x[]);
+void mpsad(unsigned char w[], unsigned char u[], int n, int iv);
+void mpsdv(unsigned char w[], unsigned char u[], int n, int iv, int *ir);
+void mpsmu(unsigned char w[], unsigned char u[], int n, int iv);
+void mpsqrt(unsigned char w[], unsigned char u[], unsigned char v[], int n,
+	int m);
+void mpsub(int *is, unsigned char w[], unsigned char u[], unsigned char v[],
+	int n);
+void mrqcof(float x[], float y[], float sig[], int ndata, float a[],
+	int ia[], int ma, float **alpha, float beta[], float *chisq,
+	void (*funcs)(float, float [], float *, float [], int));
+void mrqmin(float x[], float y[], float sig[], int ndata, float a[],
+	int ia[], int ma, float **covar, float **alpha, float *chisq,
+	void (*funcs)(float, float [], float *, float [], int), float *alamda);
+void newt(float x[], int n, int *check,
+	void (*vecfunc)(int, float [], float []));
+void odeint(float ystart[], int nvar, float x1, float x2,
+	float eps, float h1, float hmin, int *nok, int *nbad,
+	void (*derivs)(float, float [], float []),
+	void (*rkqs)(float [], float [], int, float *, float, float,
+	float [], float *, float *, void (*)(float, float [], float [])));
+void orthog(int n, float anu[], float alpha[], float beta[], float a[],
+	float b[]);
+void pade(double cof[], int n, float *resid);
+void pccheb(float d[], float c[], int n);
+void pcshft(float a, float b, float d[], int n);
+void pearsn(float x[], float y[], unsigned long n, float *r, float *prob,
+	float *z);
+void period(float x[], float y[], int n, float ofac, float hifac,
+	float px[], float py[], int np, int *nout, int *jmax, float *prob);
+void piksr2(int n, float arr[], float brr[]);
+void piksrt(int n, float arr[]);
+void pinvs(int ie1, int ie2, int je1, int jsf, int jc1, int k,
+	float ***c, float **s);
+float plgndr(int l, int m, float x);
+float poidev(float xm, long *idum);
+void polcoe(float x[], float y[], int n, float cof[]);
+void polcof(float xa[], float ya[], int n, float cof[]);
+void poldiv(float u[], int n, float v[], int nv, float q[], float r[]);
+void polin2(float x1a[], float x2a[], float **ya, int m, int n,
+	float x1, float x2, float *y, float *dy);
+void polint(float xa[], float ya[], int n, float x, float *y, float *dy);
+void powell(float p[], float **xi, int n, float ftol, int *iter, float *fret,
+	float (*func)(float []));
+void predic(float data[], int ndata, float d[], int m, float future[], int nfut);
+float probks(float alam);
+void psdes(unsigned long *lword, unsigned long *irword);
+void pwt(float a[], unsigned long n, int isign);
+void pwtset(int n);
+float pythag(float a, float b);
+void pzextr(int iest, float xest, float yest[], float yz[], float dy[],
+	int nv);
+float qgaus(float (*func)(float), float a, float b);
+void qrdcmp(float **a, int n, float *c, float *d, int *sing);
+float qromb(float (*func)(float), float a, float b);
+float qromo(float (*func)(float), float a, float b,
+	float (*choose)(float (*)(float), float, float, int));
+void qroot(float p[], int n, float *b, float *c, float eps);
+void qrsolv(float **a, int n, float c[], float d[], float b[]);
+void qrupdt(float **r, float **qt, int n, float u[], float v[]);
+float qsimp(float (*func)(float), float a, float b);
+float qtrap(float (*func)(float), float a, float b);
+float quad3d(float (*func)(float, float, float), float x1, float x2);
+void quadct(float x, float y, float xx[], float yy[], unsigned long nn,
+	float *fa, float *fb, float *fc, float *fd);
+void quadmx(float **a, int n);
+void quadvl(float x, float y, float *fa, float *fb, float *fc, float *fd);
+float ran0(long *idum);
+float ran1(long *idum);
+float ran2(long *idum);
+float ran3(long *idum);
+float ran4(long *idum);
+void rank(unsigned long n, unsigned long indx[], unsigned long irank[]);
+void ranpt(float pt[], float regn[], int n);
+void ratint(float xa[], float ya[], int n, float x, float *y, float *dy);
+void ratlsq(double (*fn)(double), double a, double b, int mm, int kk,
+	double cof[], double *dev);
+double ratval(double x, double cof[], int mm, int kk);
+float rc(float x, float y);
+float rd(float x, float y, float z);
+void realft(float data[], unsigned long n, int isign);
+void rebin(float rc, int nd, float r[], float xin[], float xi[]);
+void red(int iz1, int iz2, int jz1, int jz2, int jm1, int jm2, int jmf,
+	int ic1, int jc1, int jcf, int kc, float ***c, float **s);
+void relax(double **u, double **rhs, int n);
+void relax2(double **u, double **rhs, int n);
+void resid(double **res, double **u, double **rhs, int n);
+float revcst(float x[], float y[], int iorder[], int ncity, int n[]);
+void reverse(int iorder[], int ncity, int n[]);
+float rf(float x, float y, float z);
+float rj(float x, float y, float z, float p);
+void rk4(float y[], float dydx[], int n, float x, float h, float yout[],
+	void (*derivs)(float, float [], float []));
+void rkck(float y[], float dydx[], int n, float x, float h,
+	float yout[], float yerr[], void (*derivs)(float, float [], float []));
+void rkdumb(float vstart[], int nvar, float x1, float x2, int nstep,
+	void (*derivs)(float, float [], float []));
+void rkqs(float y[], float dydx[], int n, float *x,
+	float htry, float eps, float yscal[], float *hdid, float *hnext,
+	void (*derivs)(float, float [], float []));
+void rlft3(float ***data, float **speq, unsigned long nn1,
+	unsigned long nn2, unsigned long nn3, int isign);
+float rofunc(float b);
+void rotate(float **r, float **qt, int n, int i, float a, float b);
+void rsolv(float **a, int n, float d[], float b[]);
+void rstrct(double **uc, double **uf, int nc);
+float rtbis(float (*func)(float), float x1, float x2, float xacc);
+float rtflsp(float (*func)(float), float x1, float x2, float xacc);
+float rtnewt(void (*funcd)(float, float *, float *), float x1, float x2,
+	float xacc);
+float rtsafe(void (*funcd)(float, float *, float *), float x1, float x2,
+	float xacc);
+float rtsec(float (*func)(float), float x1, float x2, float xacc);
+void rzextr(int iest, float xest, float yest[], float yz[], float dy[], int nv);
+void savgol(float c[], int np, int nl, int nr, int ld, int m);
+void score(float xf, float y[], float f[]);
+void scrsho(float (*fx)(float));
+float select(unsigned long k, unsigned long n, float arr[]);
+float selip(unsigned long k, unsigned long n, float arr[]);
+void shell(unsigned long n, float a[]);
+void shoot(int n, float v[], float f[]);
+void shootf(int n, float v[], float f[]);
+void simp1(float **a, int mm, int ll[], int nll, int iabf, int *kp,
+	float *bmax);
+void simp2(float **a, int n, int l2[], int nl2, int *ip, int kp, float *q1);
+void simp3(float **a, int i1, int k1, int ip, int kp);
+void simplx(float **a, int m, int n, int m1, int m2, int m3, int *icase,
+	int izrov[], int iposv[]);
+void simpr(float y[], float dydx[], float dfdx[], float **dfdy,
+	int n, float xs, float htot, int nstep, float yout[],
+	void (*derivs)(float, float [], float []));
+void sinft(float y[], int n);
+void slvsm2(double **u, double **rhs);
+void slvsml(double **u, double **rhs);
+void sncndn(float uu, float emmc, float *sn, float *cn, float *dn);
+double snrm(unsigned long n, double sx[], int itol);
+void sobseq(int *n, float x[]);
+void solvde(int itmax, float conv, float slowc, float scalv[],
+	int indexv[], int ne, int nb, int m, float **y, float ***c, float **s);
+void sor(double **a, double **b, double **c, double **d, double **e,
+	double **f, double **u, int jmax, double rjac);
+void sort(unsigned long n, float arr[]);
+void sort2(unsigned long n, float arr[], float brr[]);
+void sort3(unsigned long n, float ra[], float rb[], float rc[]);
+void spctrm(FILE *fp, float p[], int m, int k, int ovrlap);
+void spear(float data1[], float data2[], unsigned long n, float *d, float *zd,
+	float *probd, float *rs, float *probrs);
+void sphbes(int n, float x, float *sj, float *sy, float *sjp, float *syp);
+void splie2(float x1a[], float x2a[], float **ya, int m, int n, float **y2a);
+void splin2(float x1a[], float x2a[], float **ya, float **y2a, int m, int n,
+	float x1, float x2, float *y);
+void spline(float x[], float y[], int n, float yp1, float ypn, float y2[]);
+void splint(float xa[], float ya[], float y2a[], int n, float x, float *y);
+void spread(float y, float yy[], unsigned long n, float x, int m);
+void sprsax(float sa[], unsigned long ija[], float x[], float b[],
+	unsigned long n);
+void sprsin(float **a, int n, float thresh, unsigned long nmax, float sa[],
+	unsigned long ija[]);
+void sprspm(float sa[], unsigned long ija[], float sb[], unsigned long ijb[],
+	float sc[], unsigned long ijc[]);
+void sprstm(float sa[], unsigned long ija[], float sb[], unsigned long ijb[],
+	float thresh, unsigned long nmax, float sc[], unsigned long ijc[]);
+void sprstp(float sa[], unsigned long ija[], float sb[], unsigned long ijb[]);
+void sprstx(float sa[], unsigned long ija[], float x[], float b[],
+	unsigned long n);
+void stifbs(float y[], float dydx[], int nv, float *xx,
+	float htry, float eps, float yscal[], float *hdid, float *hnext,
+	void (*derivs)(float, float [], float []));
+void stiff(float y[], float dydx[], int n, float *x,
+	float htry, float eps, float yscal[], float *hdid, float *hnext,
+	void (*derivs)(float, float [], float []));
+void stoerm(float y[], float d2y[], int nv, float xs,
+	float htot, int nstep, float yout[],
+	void (*derivs)(float, float [], float []));
+void svbksb(float **u, float w[], float **v, int m, int n, float b[],
+	float x[]);
+void svdcmp(float **a, int m, int n, float w[], float **v);
+void svdfit(float x[], float y[], float sig[], int ndata, float a[],
+	int ma, float **u, float **v, float w[], float *chisq,
+	void (*funcs)(float, float [], int));
+void svdvar(float **v, int ma, float w[], float **cvm);
+void toeplz(float r[], float x[], float y[], int n);
+void tptest(float data1[], float data2[], unsigned long n, float *t, float *prob);
+void tqli(float d[], float e[], int n, float **z);
+float trapzd(float (*func)(float), float a, float b, int n);
+void tred2(float **a, int n, float d[], float e[]);
+void tridag(float a[], float b[], float c[], float r[], float u[],
+	unsigned long n);
+float trncst(float x[], float y[], int iorder[], int ncity, int n[]);
+void trnspt(int iorder[], int ncity, int n[]);
+void ttest(float data1[], unsigned long n1, float data2[], unsigned long n2,
+	float *t, float *prob);
+void tutest(float data1[], unsigned long n1, float data2[], unsigned long n2,
+	float *t, float *prob);
+void twofft(float data1[], float data2[], float fft1[], float fft2[],
+	unsigned long n);
+void vander(double x[], double w[], double q[], int n);
+void vegas(float regn[], int ndim, float (*fxn)(float [], float), int init,
+	unsigned long ncall, int itmx, int nprn, float *tgral, float *sd,
+	float *chi2a);
+void voltra(int n, int m, float t0, float h, float *t, float **f,
+	float (*g)(int, float), float (*ak)(int, int, float, float));
+void wt1(float a[], unsigned long n, int isign,
+	void (*wtstep)(float [], unsigned long, int));
+void wtn(float a[], unsigned long nn[], int ndim, int isign,
+	void (*wtstep)(float [], unsigned long, int));
+void wwghts(float wghts[], int n, float h,
+	void (*kermom)(double [], double ,int));
+int zbrac(float (*func)(float), float *x1, float *x2);
+void zbrak(float (*fx)(float), float x1, float x2, int n, float xb1[],
+	float xb2[], int *nb);
+float zbrent(float (*func)(float), float x1, float x2, float tol);
+void zrhqr(float a[], int m, float rtr[], float rti[]);
+float zriddr(float (*func)(float), float x1, float x2, float xacc);
+void zroots(fcomplex a[], int m, fcomplex roots[], int polish);
+
+#endif /* _NR_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/nrutil.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,321 @@
+/* CAUTION: This is the ANSI C (only) version of the Numerical Recipes
+   utility file nrutil.c.  Do not confuse this file with the same-named
+   file nrutil.c that is supplied in the 'misc' subdirectory.
+   *That* file is the one from the book, and contains both ANSI and
+   traditional K&R versions, along with #ifdef macros to select the
+   correct version.  *This* file contains only ANSI C.               */
+
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#define NR_END 1
+#define FREE_ARG char*
+
+void nrerror(char error_text[])
+/* Numerical Recipes standard error handler */
+{
+	fprintf(stderr,"Numerical Recipes run-time error...\n");
+	fprintf(stderr,"%s\n",error_text);
+	fprintf(stderr,"...now exiting to system...\n");
+	exit(1);
+}
+
+float *vector(long nl, long nh)
+/* allocate a float vector with subscript range v[nl..nh] */
+{
+	float *v;
+
+	v=(float *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(float)));
+	if (!v) nrerror("allocation failure in vector()");
+	return v-nl+NR_END;
+}
+
+int *ivector(long nl, long nh)
+/* allocate an int vector with subscript range v[nl..nh] */
+{
+	int *v;
+
+	v=(int *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(int)));
+	if (!v) nrerror("allocation failure in ivector()");
+	return v-nl+NR_END;
+}
+
+unsigned char *cvector(long nl, long nh)
+/* allocate an unsigned char vector with subscript range v[nl..nh] */
+{
+	unsigned char *v;
+
+	v=(unsigned char *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(unsigned char)));
+	if (!v) nrerror("allocation failure in cvector()");
+	return v-nl+NR_END;
+}
+
+unsigned long *lvector(long nl, long nh)
+/* allocate an unsigned long vector with subscript range v[nl..nh] */
+{
+	unsigned long *v;
+
+	v=(unsigned long *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(long)));
+	if (!v) nrerror("allocation failure in lvector()");
+	return v-nl+NR_END;
+}
+
+double *dvector(long nl, long nh)
+/* allocate a double vector with subscript range v[nl..nh] */
+{
+	double *v;
+
+	v=(double *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(double)));
+	if (!v) nrerror("allocation failure in dvector()");
+	return v-nl+NR_END;
+}
+
+float **matrix(long nrl, long nrh, long ncl, long nch)
+/* allocate a float matrix with subscript range m[nrl..nrh][ncl..nch] */
+{
+	long i, nrow=nrh-nrl+1,ncol=nch-ncl+1;
+	float **m;
+
+	/* allocate pointers to rows */
+	m=(float **) malloc((size_t)((nrow+NR_END)*sizeof(float*)));
+	if (!m) nrerror("allocation failure 1 in matrix()");
+	m += NR_END;
+	m -= nrl;
+
+	/* allocate rows and set pointers to them */
+	m[nrl]=(float *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(float)));
+	if (!m[nrl]) nrerror("allocation failure 2 in matrix()");
+	m[nrl] += NR_END;
+	m[nrl] -= ncl;
+
+	for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol;
+
+	/* return pointer to array of pointers to rows */
+	return m;
+}
+
+double **dmatrix(long nrl, long nrh, long ncl, long nch)
+/* allocate a double matrix with subscript range m[nrl..nrh][ncl..nch] */
+{
+	long i, nrow=nrh-nrl+1,ncol=nch-ncl+1;
+	double **m;
+
+	/* allocate pointers to rows */
+	m=(double **) malloc((size_t)((nrow+NR_END)*sizeof(double*)));
+	if (!m) nrerror("allocation failure 1 in matrix()");
+	m += NR_END;
+	m -= nrl;
+
+	/* allocate rows and set pointers to them */
+	m[nrl]=(double *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(double)));
+	if (!m[nrl]) nrerror("allocation failure 2 in matrix()");
+	m[nrl] += NR_END;
+	m[nrl] -= ncl;
+
+	for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol;
+
+	/* return pointer to array of pointers to rows */
+	return m;
+}
+
+int **imatrix(long nrl, long nrh, long ncl, long nch)
+/* allocate a int matrix with subscript range m[nrl..nrh][ncl..nch] */
+{
+	long i, nrow=nrh-nrl+1,ncol=nch-ncl+1;
+	int **m;
+
+	/* allocate pointers to rows */
+	m=(int **) malloc((size_t)((nrow+NR_END)*sizeof(int*)));
+	if (!m) nrerror("allocation failure 1 in matrix()");
+	m += NR_END;
+	m -= nrl;
+
+
+	/* allocate rows and set pointers to them */
+	m[nrl]=(int *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(int)));
+	if (!m[nrl]) nrerror("allocation failure 2 in matrix()");
+	m[nrl] += NR_END;
+	m[nrl] -= ncl;
+
+	for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol;
+
+	/* return pointer to array of pointers to rows */
+	return m;
+}
+
+float **submatrix(float **a, long oldrl, long oldrh, long oldcl, long oldch,
+	long newrl, long newcl)
+/* point a submatrix [newrl..][newcl..] to a[oldrl..oldrh][oldcl..oldch] */
+{
+	long i,j,nrow=oldrh-oldrl+1,ncol=oldcl-newcl;
+	float **m;
+
+	/* allocate array of pointers to rows */
+	m=(float **) malloc((size_t) ((nrow+NR_END)*sizeof(float*)));
+	if (!m) nrerror("allocation failure in submatrix()");
+	m += NR_END;
+	m -= newrl;
+
+	/* set pointers to rows */
+	for(i=oldrl,j=newrl;i<=oldrh;i++,j++) m[j]=a[i]+ncol;
+
+	/* return pointer to array of pointers to rows */
+	return m;
+}
+
+float **convert_matrix(float *a, long nrl, long nrh, long ncl, long nch)
+/* allocate a float matrix m[nrl..nrh][ncl..nch] that points to the matrix
+declared in the standard C manner as a[nrow][ncol], where nrow=nrh-nrl+1
+and ncol=nch-ncl+1. The routine should be called with the address
+&a[0][0] as the first argument. */
+{
+	long i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1;
+	float **m;
+
+	/* allocate pointers to rows */
+	m=(float **) malloc((size_t) ((nrow+NR_END)*sizeof(float*)));
+	if (!m) nrerror("allocation failure in convert_matrix()");
+	m += NR_END;
+	m -= nrl;
+
+	/* set pointers to rows */
+	m[nrl]=a-ncl;
+	for(i=1,j=nrl+1;i<nrow;i++,j++) m[j]=m[j-1]+ncol;
+	/* return pointer to array of pointers to rows */
+	return m;
+}
+
+double **convert_dmatrix(double *a, long nrl, long nrh, long ncl, long nch)
+/* allocate a float matrix m[nrl..nrh][ncl..nch] that points to the matrix
+declared in the standard C manner as a[nrow][ncol], where nrow=nrh-nrl+1
+and ncol=nch-ncl+1. The routine should be called with the address
+&a[0][0] as the first argument. */
+{
+	long i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1;
+	double **m;
+
+	/* allocate pointers to rows */
+	m=(double **) malloc((size_t) ((nrow+NR_END)*sizeof(double*)));
+	if (!m) nrerror("allocation failure in convert_dmatrix()");
+	m += NR_END;
+	m -= nrl;
+
+	/* set pointers to rows */
+	m[nrl]=a-ncl;
+	for(i=1,j=nrl+1;i<nrow;i++,j++) m[j]=m[j-1]+ncol;
+	/* return pointer to array of pointers to rows */
+	return m;
+}
+
+float ***f3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh)
+/* allocate a float 3tensor with range t[nrl..nrh][ncl..nch][ndl..ndh] */
+{
+	long i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1,ndep=ndh-ndl+1;
+	float ***t;
+
+	/* allocate pointers to pointers to rows */
+	t=(float ***) malloc((size_t)((nrow+NR_END)*sizeof(float**)));
+	if (!t) nrerror("allocation failure 1 in f3tensor()");
+	t += NR_END;
+	t -= nrl;
+
+	/* allocate pointers to rows and set pointers to them */
+	t[nrl]=(float **) malloc((size_t)((nrow*ncol+NR_END)*sizeof(float*)));
+	if (!t[nrl]) nrerror("allocation failure 2 in f3tensor()");
+	t[nrl] += NR_END;
+	t[nrl] -= ncl;
+
+	/* allocate rows and set pointers to them */
+	t[nrl][ncl]=(float *) malloc((size_t)((nrow*ncol*ndep+NR_END)*sizeof(float)));
+	if (!t[nrl][ncl]) nrerror("allocation failure 3 in f3tensor()");
+	t[nrl][ncl] += NR_END;
+	t[nrl][ncl] -= ndl;
+
+	for(j=ncl+1;j<=nch;j++) t[nrl][j]=t[nrl][j-1]+ndep;
+	for(i=nrl+1;i<=nrh;i++) {
+		t[i]=t[i-1]+ncol;
+		t[i][ncl]=t[i-1][ncl]+ncol*ndep;
+		for(j=ncl+1;j<=nch;j++) t[i][j]=t[i][j-1]+ndep;
+	}
+
+	/* return pointer to array of pointers to rows */
+	return t;
+}
+
+void free_vector(float *v, long nl, long nh)
+/* free a float vector allocated with vector() */
+{
+	free((FREE_ARG) (v+nl-NR_END));
+}
+
+void free_ivector(int *v, long nl, long nh)
+/* free an int vector allocated with ivector() */
+{
+	free((FREE_ARG) (v+nl-NR_END));
+}
+
+void free_cvector(unsigned char *v, long nl, long nh)
+/* free an unsigned char vector allocated with cvector() */
+{
+	free((FREE_ARG) (v+nl-NR_END));
+}
+
+void free_lvector(unsigned long *v, long nl, long nh)
+/* free an unsigned long vector allocated with lvector() */
+{
+	free((FREE_ARG) (v+nl-NR_END));
+}
+
+void free_dvector(double *v, long nl, long nh)
+/* free a double vector allocated with dvector() */
+{
+	free((FREE_ARG) (v+nl-NR_END));
+}
+
+void free_matrix(float **m, long nrl, long nrh, long ncl, long nch)
+/* free a float matrix allocated by matrix() */
+{
+	free((FREE_ARG) (m[nrl]+ncl-NR_END));
+	free((FREE_ARG) (m+nrl-NR_END));
+}
+
+void free_dmatrix(double **m, long nrl, long nrh, long ncl, long nch)
+/* free a double matrix allocated by dmatrix() */
+{
+	free((FREE_ARG) (m[nrl]+ncl-NR_END));
+	free((FREE_ARG) (m+nrl-NR_END));
+}
+
+void free_imatrix(int **m, long nrl, long nrh, long ncl, long nch)
+/* free an int matrix allocated by imatrix() */
+{
+	free((FREE_ARG) (m[nrl]+ncl-NR_END));
+	free((FREE_ARG) (m+nrl-NR_END));
+}
+
+void free_submatrix(float **b, long nrl, long nrh, long ncl, long nch)
+/* free a submatrix allocated by submatrix() */
+{
+	free((FREE_ARG) (b+nrl-NR_END));
+}
+
+void free_convert_matrix(float **b, long nrl, long nrh, long ncl, long nch)
+/* free a matrix allocated by convert_matrix() */
+{
+	free((FREE_ARG) (b+nrl-NR_END));
+}
+
+void free_convert_dmatrix(double **b, long nrl, long nrh, long ncl, long nch)
+/* free a matrix allocated by convert_matrix() */
+{
+	free((FREE_ARG) (b+nrl-NR_END));
+}
+
+void free_f3tensor(float ***t, long nrl, long nrh, long ncl, long nch,
+	long ndl, long ndh)
+/* free a float f3tensor allocated by f3tensor() */
+{
+	free((FREE_ARG) (t[nrl][ncl]+ndl-NR_END));
+	free((FREE_ARG) (t[nrl]+ncl-NR_END));
+	free((FREE_ARG) (t+nrl-NR_END));
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/nrutil.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+/* CAUTION: This is the ANSI C (only) version of the Numerical Recipes
+   utility file nrutil.h.  Do not confuse this file with the same-named
+   file nrutil.h that is supplied in the 'misc' subdirectory.
+   *That* file is the one from the book, and contains both ANSI and
+   traditional K&R versions, along with #ifdef macros to select the
+   correct version.  *This* file contains only ANSI C.               */
+
+#ifndef _NR_UTILS_H_
+#define _NR_UTILS_H_
+
+static float sqrarg;
+#define SQR(a) ((sqrarg=(a)) == 0.0 ? 0.0 : sqrarg*sqrarg)
+
+static double dsqrarg;
+#define DSQR(a) ((dsqrarg=(a)) == 0.0 ? 0.0 : dsqrarg*dsqrarg)
+
+static double dmaxarg1,dmaxarg2;
+#define DMAX(a,b) (dmaxarg1=(a),dmaxarg2=(b),(dmaxarg1) > (dmaxarg2) ?\
+        (dmaxarg1) : (dmaxarg2))
+
+static double dminarg1,dminarg2;
+#define DMIN(a,b) (dminarg1=(a),dminarg2=(b),(dminarg1) < (dminarg2) ?\
+        (dminarg1) : (dminarg2))
+
+static float maxarg1,maxarg2;
+#define FMAX(a,b) (maxarg1=(a),maxarg2=(b),(maxarg1) > (maxarg2) ?\
+        (maxarg1) : (maxarg2))
+
+static float minarg1,minarg2;
+#define FMIN(a,b) (minarg1=(a),minarg2=(b),(minarg1) < (minarg2) ?\
+        (minarg1) : (minarg2))
+
+static long lmaxarg1,lmaxarg2;
+#define LMAX(a,b) (lmaxarg1=(a),lmaxarg2=(b),(lmaxarg1) > (lmaxarg2) ?\
+        (lmaxarg1) : (lmaxarg2))
+
+static long lminarg1,lminarg2;
+#define LMIN(a,b) (lminarg1=(a),lminarg2=(b),(lminarg1) < (lminarg2) ?\
+        (lminarg1) : (lminarg2))
+
+static int imaxarg1,imaxarg2;
+#define IMAX(a,b) (imaxarg1=(a),imaxarg2=(b),(imaxarg1) > (imaxarg2) ?\
+        (imaxarg1) : (imaxarg2))
+
+static int iminarg1,iminarg2;
+#define IMIN(a,b) (iminarg1=(a),iminarg2=(b),(iminarg1) < (iminarg2) ?\
+        (iminarg1) : (iminarg2))
+
+#define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a))
+
+void nrerror(char error_text[]);
+float *vector(long nl, long nh);
+int *ivector(long nl, long nh);
+unsigned char *cvector(long nl, long nh);
+unsigned long *lvector(long nl, long nh);
+double *dvector(long nl, long nh);
+float **matrix(long nrl, long nrh, long ncl, long nch);
+double **dmatrix(long nrl, long nrh, long ncl, long nch);
+int **imatrix(long nrl, long nrh, long ncl, long nch);
+float **submatrix(float **a, long oldrl, long oldrh, long oldcl, long oldch,
+	long newrl, long newcl);
+float **convert_matrix(float *a, long nrl, long nrh, long ncl, long nch);
+double **convert_dmatrix(double *a, long nrl, long nrh, long ncl, long nch);
+float ***f3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh);
+void free_vector(float *v, long nl, long nh);
+void free_ivector(int *v, long nl, long nh);
+void free_cvector(unsigned char *v, long nl, long nh);
+void free_lvector(unsigned long *v, long nl, long nh);
+void free_dvector(double *v, long nl, long nh);
+void free_matrix(float **m, long nrl, long nrh, long ncl, long nch);
+void free_dmatrix(double **m, long nrl, long nrh, long ncl, long nch);
+void free_imatrix(int **m, long nrl, long nrh, long ncl, long nch);
+void free_submatrix(float **b, long nrl, long nrh, long ncl, long nch);
+void free_convert_matrix(float **b, long nrl, long nrh, long ncl, long nch);
+void free_convert_dmatrix(double **b, long nrl, long nrh, long ncl, long nch);
+void free_f3tensor(float ***t, long nrl, long nrh, long ncl, long nch,
+	long ndl, long ndh);
+
+#endif /* _NR_UTILS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/private/quickscore.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+function prob = quickscore(fpos, fneg, inhibit, prior, leak)
+% QUICKSCORE Heckerman's algorithm for BN2O networks.
+% prob = quickscore(fpos, fneg, inhibit, prior, leak)
+% 
+% Consider a BN2O (Binary Node 2-layer Noisy-or) network such as QMR with
+% dieases on the top and findings on the bottom. (We assume all findings are observed,
+% since hidden leaves can be marginalized away.)
+% This algorithm takes O(2^|fpos|) time to compute the marginal on all the diseases.
+%
+% Inputs:
+% fpos = the positive findings (a vector of numbers in {1, ..., Nfindings})
+% fneg = the negative findings (a vector of numbers in {1, ..., Nfindings})
+% inhibit(i,j) = inhibition prob. for finding i, disease j, or 1.0 if j is not a parent.
+% prior(j) = prior prob. disease j is ON. We assume prior(off) = 1-prior(on).
+% leak(i) = inhibition prob. for the leak node for finding i
+%
+% Output:
+% prob(d) = Pr(disease d = on | ev)
+%
+% For details, see
+% - Heckerman, "A tractable inference algorithm for diagnosing multiple diseases", UAI89.
+% - Rish and Dechter, "On the impact of causal independence", UCI tech report, 1998.
+%
+% Note that this algorithm is numerically unstable, since it adds a large number of positive and
+% negative terms and hopes that some of them exactly cancel.
+%
+% For matlab experts, use 'mex' to compile C_quickscore, which has identical behavior to this function.
+
+[nfindings ndiseases] = size(inhibit);
+
+% make the first disease be always on, for the leak term
+Pon = [1 prior(:)'];
+Poff = 1-Pon;
+Uon = [leak(:) inhibit]; % U(f,d) = Pr(f=0|d=1)
+Uoff = [leak(:) ones(nfindings, ndiseases)]; % Uoff(f,d) = Pr(f=0|d=0)
+ndiseases = ndiseases + 1;
+
+npos = length(fpos);
+post = zeros(ndiseases, 2);
+% post(d,1) = alpha Pr(d=off), post(d,2) = alpha Pr(d=m)
+
+FP = length(fpos);
+%allbits = logical(dec2bitv(0:(2^FP - 1), FP));
+allbits = logical(ind2subv(2*ones(1,FP), 1:(2^FP))-1);
+
+for si=1:2^FP
+  bits = allbits(si,:);
+  fprime = fpos(bits);
+  fmask = zeros(1, nfindings);
+  fmask(fneg)=1;
+  fmask(fprime)=1;
+  fmask = logical(fmask);
+  p = 1;
+  pterm = zeros(1, ndiseases);
+  ptermOff = zeros(1, ndiseases);
+  ptermOn = zeros(1, ndiseases);
+  for d=1:ndiseases
+    ptermOff(d) = prod(Uoff(fmask,d));
+    ptermOn(d) = prod(Uon(fmask,d));
+    pterm(d) = Poff(d)*ptermOff(d) + Pon(d)*ptermOn(d);
+  end
+  p = prod(pterm);
+  sign = (-1)^(length(fprime));
+  for d=1:ndiseases
+    myp = p / pterm(d);
+    post(d,1) = post(d,1) + sign*(myp * ptermOff(d));
+    post(d,2) = post(d,2) + sign*(myp * ptermOn(d));
+  end
+end
+
+post(:,1) = post(:,1) .* Poff(:);
+post(:,2) = post(:,2) .* Pon(:);
+post = mk_stochastic(post);
+prob = post(2:end,2)'; % skip the leak term
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@quickscore_inf_engine/quickscore_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function engine = quickscore_inf_engine(inhibit, leak, prior)
+% QUICKSCORE_INF_ENGINE Exact inference for the QMR network
+% engine = quickscore_inf_engine(inhibit, leak, prior)
+%
+% We create an inference engine for QMR-like networks.
+% QMR is a bipartite graph, where the top layer contains hidden disease nodes,
+% and the bottom later contains observed finding nodes.
+% The diseases have Bernoulli CPDs, the findings noisy-or CPDs.
+% The original QMR (Quick Medical Reference) network has specific parameter values which we are not
+% allowed to release, for commercial reasons.
+%
+% inhibit(f,d) = inhibition probability on f->d arc for disease d, finding f
+% If inhibit(f,d) = 1, there is effectively no arc from d->f
+% leak(j) = inhibition prob. on leak node -> finding j arc
+% prior(i) = prob. disease i is on
+%
+% We use exact inference, which takes O(2^P) time, where P is the number of positive findings.
+% For details, see
+% - Heckerman, "A tractable inference algorithm for diagnosing multiple diseases", UAI 89.
+% - Rish and Dechter, "On the impact of causal independence", UCI tech report, 1998.
+% Note that this algorithm is numerically unstable, since it adds a large number of positive and
+% negative terms and hopes that some of them exactly cancel.
+%
+% For an interesting variational approximation, see
+% - Jaakkola and Jordan, "Variational probabilistic inference and the QMR-DT network", JAIR 10, 1999.
+%
+% See also 
+% - "Loopy belief propagation for approximate inference: an empirical study",
+%      K. Murphy, Y. Weiss and M. Jordan, UAI 99.
+
+engine.inhibit = inhibit;
+engine.leak = leak;
+engine.prior = prior;
+
+% store results here between enter_evidence and marginal_nodes
+engine.post = [];
+
+engine = class(engine, 'quickscore_inf_engine'); % not a child of the inf_engine class!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+/README/1.1.1.1/Sun May 11 15:39:50 2003//
+/clq_containing_nodes.m/1.1.1.1/Wed May 29 11:59:46 2002//
+/enter_evidence.m/1.1.1.1/Wed Mar 12 10:38:00 2003//
+/marginal_difclq_nodes.m/1.1.1.1/Fri Feb 21 11:20:32 2003//
+/marginal_nodes.m/1.1.1.1/Fri Feb 21 11:13:10 2003//
+/marginal_singleclq_nodes.m/1.1.1.1/Wed Jan 29 11:23:58 2003//
+/problems.txt/1.1.1.1/Wed May 29 11:59:46 2002//
+/push.m/1.1.1.1/Mon Feb 10 15:38:04 2003//
+/push_pot_toclique.m/1.1.1.1/Wed May 29 11:59:46 2002//
+/stab_cond_gauss_inf_engine.m/1.1.1.1/Fri Mar 28 17:12:42 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@stab_cond_gauss_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/initialize_engine.m/1.1.1.1/Wed May 29 11:59:46 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@stab_cond_gauss_inf_engine/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/Old/initialize_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function [engine, loglik] = initialize_engine(engine)
+%initialize
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes(:);
+N = length(bnet.dag);
+
+pot_type = 'scg'
+check_for_cd_arcs([], bnet.cnodes, bnet.dag);
+
+% Evaluate CPDs with evidence, and convert to potentials  
+pot = cell(1, N);
+C = length(engine.cliques);
+inited = zeros(1, C);
+clpot = cell(1, C);
+evidence = cell(1, N);
+for n=1:N
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n);
+  pot{n} = CPD_to_scgpot(bnet.CPD{e}, fam, ns, bnet.cnodes, evidence);
+  cindex = engine.clq_ass_to_node(n);
+  if inited(cindex)
+      %clpot{cindex} = direct_combine_pots(clpot{cindex}, pot{n});
+      clpot{cindex} = direct_combine_pots(pot{n}, clpot{cindex});
+  else
+      clpot{cindex} = pot{n};
+      inited(cindex) = 1;
+  end
+end
+
+for i=1:C
+    if inited(i) == 0
+        clpot{i} = scgpot([], [], [], []);
+    end
+end
+
+seppot = cell(C, C);
+% separators are is not need to initialize
+
+% collect to root (node to parents)
+for n=engine.postorder(1:end-1)
+  for p=parents(engine.jtree, n)
+      [margpot, comppot] = complement_pot(clpot{n}, engine.separator{p,n});
+      margpot = marginalize_pot(clpot{n}, engine.separator{p,n});
+      clpot{n} = comppot;
+      %seppot{p, n} = margpot;
+      clpot{p} = combine_pots(clpot{p}, margpot);
+      %clpot{p} = combine_pots(margpot, clpot{p});
+  end
+end
+
+temppot = clpot;
+%temppot = clpot{engine.root};
+for n=engine.preorder
+  for c=children(engine.jtree, n)
+    seppot{n,c} = marginalize_pot(temppot{n}, engine.separator{n,c});
+    %seppot{n,c} = marginalize_pot(clpot{n}, engine.separator{n,c});
+    %clpot{c} = direct_combine_pots(clpot{c}, seppot{n,c});
+    temppot{c} = direct_combine_pots(temppot{c}, seppot{n,c});
+  end
+end
+
+engine.clpot = clpot;
+engine.seppot = seppot;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/README	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+% Stable conditional Gaussian inference
+% Originally written by Huang, Shan <shan.huang@intel.com> 2001
+% Fixed by Rainer Deventer 2003
+
+
+@techreport{Lauritzen99,
+  author = "S. Lauritzen and F. Jensen",
+  title = "Stable Local Computation with Conditional {G}aussian Distributions",
+  year = 1999,
+  number = "R-99-2014",
+  institution = "Dept. Math. Sciences, Aalborg Univ."
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/clq_containing_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function c = clq_containing_nodes(engine, nodes, fam)
+% CLQ_CONTAINING_NODES Find the lightest clique (if any) that contains the set of nodes
+% c = clq_containing_nodes(engine, nodes, family)
+%
+% If the optional 'family' argument is specified, it means nodes = family(nodes(end)).
+% (This is useful since clq_ass_to_node is not accessible to outsiders.)
+% Returns c=-1 if there is no such clique.
+
+if nargin < 3, fam = 0; else fam = 1; end
+
+if length(nodes)==1
+  c = engine.clq_ass_to_node(nodes(1));
+elseif fam
+  c = engine.clq_ass_to_node(nodes(end));
+else
+  B = engine.cliques_bitv;
+  w = engine.clique_weight;
+  clqs = find(all(B(:,nodes), 2)); % all selected columns must be 1
+  if isempty(clqs)
+    c = -1;
+  else
+    c = clqs(argmin(w(clqs)));     
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,260 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE enter evidence to engine including discrete and continuous evidence
+% [engine, ll] = enter_evidence(engine, evidence)
+%
+% ll is always 0, which is wrong.
+
+if ~isempty(engine.evidence)
+    bnet = bnet_from_engine(engine);
+    engine = stab_cond_gauss_inf_engine(bnet);
+    engine.evidence = evidence;
+else
+    engine.evidence = evidence;
+    bnet = bnet_from_engine(engine);
+end
+
+engine.evidence = evidence;
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes(:);
+observed = ~isemptycell(evidence);
+onodes = find(observed);
+hnodes = find(isemptycell(evidence));
+cobs = myintersect(bnet.cnodes, onodes);
+dobs = myintersect(bnet.dnodes, onodes);
+
+engine = incorporate_dis_evidence(engine, dobs, evidence);
+l = length(cobs);
+for i = 1:l
+    node = cobs(i);
+    engine = incorporate_singleconts_evidence(engine, node, evidence);
+end
+clpot = engine.clpot;
+
+clq_num = length(engine.cliques);
+for n=engine.postorder(1:end-1)
+  for p=parents(engine.jtree, n)
+      [margpot, comppot] = complement_pot(clpot{n}, engine.separator{p,n});
+      clpot{n} = comppot;
+      clpot{p} = combine_pots(clpot{p}, margpot);
+  end
+end
+
+temppot = clpot;
+for n=engine.preorder
+  for c=children(engine.jtree, n)
+    seppot{n,c} = marginalize_pot(temppot{n}, engine.separator{n,c});
+    temppot{c} = direct_combine_pots(temppot{c}, seppot{n,c});
+  end
+end
+engine.clpot = clpot;
+engine.seppot = seppot;
+
+[pot,loglik]=normalize_pot(clpot{engine.root});
+
+%%%%%%%%%%%%%%%%%%
+function engine = incorporate_dis_evidence(engine, donodes, evidence)
+l = length(donodes);
+for i=donodes(:)'
+    node = i;
+    clqid = engine.clq_ass_to_node(node);
+    pot = struct(engine.clpot{clqid});
+    ns = zeros(1, max(pot.domain));
+    ns(pot.ddom) = pot.dsizes;
+    ns(pot.cheaddom) = pot.cheadsizes;
+    ns(pot.ctaildom) = pot.ctailsizes;
+    ddom = pot.ddom;
+    
+    potcarray = cell(1, pot.dsize);
+    for j =1:pot.dsize
+        tpotc = struct(pot.scgpotc{j});
+        potcarray{j} = scgcpot(tpotc.cheadsize, tpotc.ctailsize, 0, tpotc.A, tpotc.B, tpotc.C);
+    end
+    
+    if length(ns(ddom)) == 1
+        matrix = pot.scgpotc;
+    else
+        matrix = reshape(pot.scgpotc,ns(ddom)); 
+        potcarray = reshape(potcarray, ns(ddom));
+    end
+    
+    map = find_equiv_posns(node, ddom);
+    vals = cat(1, evidence{node});
+    index = mk_multi_index(length(ddom), map, vals);
+    potcarray(index{:}) = matrix(index{:});
+    potcarray = potcarray(:);
+    %keyboard;
+    engine.clpot{clqid} = scgpot(pot.ddom, pot.cheaddom, pot.ctaildom, ns, potcarray);
+end
+
+%%%%%%%%%%%%%%%%%%
+function engine = incorporate_singleconts_evidence(engine, node, evidence)
+%incorporate_singleconts_evidence incorporate evidence of 1 continuous node
+B = engine.cliques_bitv;
+clqs_containnode = find(all(B(:,node), 2)); % all selected columns must be 1
+% Every continuous node necessarily apears as head in exactly one clique,
+% which is the clique where it appears closest to the strong root. In all other
+% clique potentials where it appears, it must be a tail node.
+clq_ev_as_head = [];
+for i = clqs_containnode(:)'
+    pot = struct(engine.clpot{i});
+    if myismember(node, pot.cheaddom)
+        clq_ev_as_head = [clq_ev_as_head i];
+        break;
+    end
+end
+	       
+% If we will incorporate the evidence node which is head of a potential we must rearrange
+% the juntion tree by push operation until the tail of the include potential is empty
+if ~isempty(clq_ev_as_head)
+    assert(1 == length(clq_ev_as_head));
+    i = clq_ev_as_head;
+    pot = struct(engine.clpot{i});
+    while ~isempty(pot.ctaildom)
+        [engine, clqtoroot] = push(engine, i, node);
+        i = clqtoroot;
+        pot = struct(engine.clpot{i});
+    end
+    B = engine.cliques_bitv;
+    clqs_containnode = find(all(B(:,node), 2));
+end
+
+for i = clqs_containnode(:)'
+    pot = struct(engine.clpot{i});
+    if myismember(node, pot.cheaddom)
+        engine.clpot{i} = incoporate_evidence_headnode(engine.clpot{i}, node, evidence);
+    else
+        %assert(myismember(node, pot.ctaildom));
+        engine.clpot{i} = incoporate_evidence_tailnode(engine.clpot{i}, node, evidence);
+    end
+end
+
+%%%%%%%%%%%%%%%%%%
+function newscgpot = incoporate_evidence_tailnode(pot, node, evidence)
+%ENTER_EVIDENCE_TAILNODE enter the evidence of 1 tailnode of the scgpot
+newscgpot = pot;
+pot = struct(pot);
+%if isempty(pot.ctaildom)
+if ~myismember(node, pot.ctaildom)
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    % In this case there is no real dependency of the head nodes %
+    % on the tail. The potential should be returned unchanged    %
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    return;
+end
+%newscgpot = scgpot([], [], [], []);
+assert(myismember(node, pot.ctaildom));
+ni = block(find_equiv_posns(node, pot.ctaildom), pot.ctailsizes);
+
+ctaildom = mysetdiff(pot.ctaildom, node);
+cheaddom = pot.cheaddom;
+ddom = pot.ddom;
+domain = mysetdiff(pot.domain, node);
+dsize = pot.dsize;
+ns = zeros(1, max(pot.domain));
+ns(pot.ddom) = pot.dsizes;
+ns(pot.cheaddom) = pot.cheadsizes;
+ns(pot.ctaildom) = pot.ctailsizes;
+cheadsizes = pot.cheadsizes;
+cheadsize = pot.cheadsize;
+ctailsizes = ns(ctaildom);
+ctailsize = sum(ns(ctaildom));
+
+potarray = cell(1, dsize);
+for i=1:dsize
+    potc = struct(pot.scgpotc{i});
+    B = potc.B;
+    A = potc.A + B(:, ni)*evidence{node};
+    B(:, ni) = [];
+    potarray{i} = scgcpot(cheadsize, ctailsize, potc.p, A, B, potc.C);
+end
+
+newscgpot = scgpot(ddom, cheaddom, ctaildom, ns, potarray);
+
+%%%%%%%%%%%%%%%%
+function newscgpot = incoporate_evidence_headnode(pot, node, evidence)
+%ENTER_EVIDENCE_HEADNODE 
+pot = struct(pot);
+y2 = evidence{node};
+assert(myismember(node, pot.cheaddom));
+assert(isempty(pot.ctaildom));
+ddom = pot.ddom;
+cheaddom = mysetdiff(pot.cheaddom, node);
+ctaildom = pot.ctaildom;
+dsize = pot.dsize;
+domain = mysetdiff(pot.domain, node);
+
+ns = zeros(1, max(pot.domain));
+ns(pot.ddom) = pot.dsizes;
+ns(pot.cheaddom) = pot.cheadsizes;
+ns(pot.ctaildom) = pot.ctailsizes;
+ctailsizes = ns(ctaildom);
+ctailsize = sum(ctailsizes);
+cheadsizes = ns(cheaddom);
+cheadsize = sum(cheadsizes);
+onodesize = ns(node);
+
+p = zeros(1,dsize);
+A1 = zeros(cheadsize, dsize);
+A2 = zeros(onodesize, dsize);
+C11 = zeros(cheadsize, cheadsize, dsize);
+C12 = zeros(cheadsize, onodesize, dsize);
+C21 = zeros(onodesize, cheadsize, dsize);
+C22 = zeros(onodesize, onodesize, dsize);
+ZM = zeros(onodesize, onodesize);
+
+n1i = block(find_equiv_posns(cheaddom, pot.cheaddom), pot.cheadsizes);
+n2i = block(find_equiv_posns(node, pot.cheaddom), pot.cheadsizes);
+
+indic = 0;
+for i=1:dsize
+    potc = struct(pot.scgpotc{i});
+    p(i) = potc.p;
+    if ~isempty(n1i)
+        A1(:,i) = potc.A(n1i);
+    end 
+    if ~isempty(n2i)
+        A2(:,i) = potc.A(n2i);
+    end
+    C11(:,:,i) = potc.C(n1i, n1i);
+    C12(:,:,i) = potc.C(n1i, n2i);
+    C21(:,:,i) = potc.C(n2i, n1i);
+    C22(:,:,i) = potc.C(n2i, n2i);
+    if isequal(0, C22(:,:,i)) & isequal(evidence{node}, A2(:, i))
+        indic = i;
+    end
+end
+
+np = zeros(1,dsize);
+nA = zeros(cheadsize, dsize);
+nC = zeros(cheadsize, cheadsize, dsize);
+
+if indic
+    np(:) = 0;
+    np(indic) = p(indic);
+    nA = A1;
+    nC = C11;
+else
+    for i=1:dsize
+        if isequal(0, C22(:,:,i))
+            p(i) = 0;
+            nA(:, i) = A1(:, i);
+            nC(:,:,i) = C11(:,:,i);
+        else
+            sq = (y2 - A2(:,i))' * inv(C22(:,:,i)) * (y2 - A2(:,i));
+            ex = exp(-0.5*sq);
+            %np(i) = p(i) * ex / ( (2 * pi)^(-onodesize/2) * sqrt(det(C22(:,:,i))) );
+            np(i) = p(i) * ex / ( (2 * pi)^(onodesize/2) * sqrt(det(C22(:,:,i))) );
+            nA(:,i) = A1(:,i) + C12(:,:,i) * inv(C22(:,:,i)) * (y2 - A2(:,i));
+            tmp1 = C12(:,:,i) * inv(C22(:,:,i)) * C21(:,:,i);
+            nC(:,:,i) = C11(:,:,i) - tmp1;
+        end
+    end
+end 
+
+scpot = cell(1, dsize);
+W = zeros(cheadsize,ctailsize);
+for i=1:dsize
+    scpot{i} = scgcpot(cheadsize, ctailsize, np(i), nA(:,i), W, nC(:,:,i));
+end
+ns(node) = 0;
+newscgpot = scgpot(ddom, cheaddom, ctaildom, ns, scpot);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/marginal_difclq_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+function marginal = marginal_difclq_nodes(engine, query_nodes)
+% MARGINAL_DIFCLQ_NODES get the marginal distribution of nodes which is not in a single clique
+% marginal = marginal_difclq_nodes(engine, query_nodes)
+
+keyboard
+num_clique = length(engine.cliques);
+B = engine.cliques_bitv;
+clqs_containnodes = [];
+for i=1:length(query_nodes)
+    node = query_nodes(i);
+    tnodes = find(all(B(:, node), 2));
+    clqs_containnodes = myunion(clqs_containnodes, tnodes);
+end
+% get all cliques contains query nodes
+
+% get the minimal sub tree in junction which contains these cliques and the node closest to the root of jtree
+[subtree, nroot_node] = min_subtree_conti_nodes(engine.jtree, engine.root, clqs_containnodes);
+if ~mysubset(query_nodes, engine.cliques{nroot_node});
+    % if query nodes is not all memers of the clique closest to the root clique performe push operation
+    engine = push_tree(engine, subtree, query_nodes, nroot_node);
+end
+
+if ~(nroot_node == engine.root)
+    % if the clique closest to the root clique is not the root clique we must direct combine the 
+    % potential with the potential stored in separator toward to root
+    p = parents(engine.jtree, nroot_node);
+    tpot = direct_combine_pots(engine.clpot{nroot_node}, engine.seppot{p, nroot_node});
+else
+    tpot = engine.clpot{nroot_node};
+end
+
+pot = marginalize_pot(tpot, query_nodes);
+marginal = pot_to_marginal(pot);
+marginal.T = normalise(marginal.T);
+
+
+
+function engine = push_tree(engine, tree, query_nodes, inode)
+% PUSH_TREE recursive perform push opeartion on tree
+% engine = push_tree(engine, tree, query_nodes, inode)
+
+cs = children(tree, inode);
+for i = 1:length(cs)
+    node = cs(i);
+    push_tree(engine, tree, query_nodes, node);
+    push_dom = myintersect(engine.cliques{node}, query_nodes);
+    [engine, clqtoroot] = push(engine, node, push_dom);
+end
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,77 @@
+function marginal = marginal_nodes(engine, query, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (stab_cond_gauss)
+% marginal = marginal_nodes(engine, query, add_ev)
+%
+% 'query' must be a singleton set.
+% add_ev is an optional argument; if 1, we will "inflate" the marginal of observed nodes
+% to their original size, adding 0s to the positions which contradict the evidence
+
+if nargin < 3, add_ev = 0; end
+if isempty(engine.evidence)
+    hquery = query;  
+else   
+    hquery = [];
+    for i = query
+        if isempty(engine.evidence{i})
+        hquery = [hquery i];
+        end
+    end
+end
+
+bnet = bnet_from_engine(engine);
+
+nclq = length(engine.cliques);
+clique = 0;
+for i = 1:nclq
+  if mysubset(hquery, engine.cliques{i})
+    pot = struct(engine.clpot{i});
+    %if mysubset(hquery, pot.cheaddom) | mysubset(hquery, pot.ddom)
+    if mysubset(hquery, pot.domain)
+     clique = i;
+      break;
+    end
+  end
+end
+
+if isempty(hquery)
+     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+     % If all requested variables are observed, no query is necessary %
+     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+     marginal.mu = [];
+     marginal.Sigma = [];
+     marginal.T = 1.0;
+     marginal.domain = query;
+else
+    if clique == 0
+        marginal = marginal_difclq_nodes(engine, hquery);
+    else 
+        marginal = marginal_singleclq_nodes(engine, clique, hquery);
+    end
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    % Change the format of output, so that it is identical to the %
+    % format obtained by the same request for the junction-tree   %
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    marginal.domain = query;
+    bnet = bnet_from_engine(engine);
+    dquery = myintersect(bnet.dnodes,hquery);
+    ns = bnet.node_sizes(dquery);
+    if length(ns) == 0
+    marginal.T = 1;
+    else
+        if length(ns) == 1
+            ns = [1 ns];
+        end
+        marginal.T = reshape(marginal.T,ns);
+    end
+end
+if add_ev
+  bnet = bnet_from_engine(engine);
+  %marginal = add_ev_to_dmarginal(marginal, engine.evidence, bnet.node_sizes);
+  marginal = add_evidence_to_gmarginal(marginal, engine.evidence, bnet.node_sizes, bnet.cnodes);
+end
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/marginal_singleclq_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function marginal = marginal_singleclq_nodes(engine, i, query)
+% MARGINAL_SINGLECLQ_NODES get the marginal distribution of nodes which is in a single clique
+% marginal = marginal_singleclq_nodes(engine, i, query)
+
+pot = struct(engine.clpot{i});
+if isempty(pot.ctaildom)
+    if i ~= engine.root
+        p = parents(engine.jtree, i);
+        tpot = direct_combine_pots(engine.clpot{i}, engine.seppot{p, i});
+    else
+        tpot = engine.clpot{i};
+    end
+    pot = marginalize_pot(tpot, query);
+    
+    marginal = pot_to_marginal(pot);
+    marginal.T = normalise(marginal.T);
+else
+    [engine, clqtoroot] = push(engine, i, query);
+    if clqtoroot == engine.root
+        tpot = engine.clpot{clqtoroot};
+    else
+        p = parents(engine.jtree, clqtoroot);
+        tpot = direct_combine_pots(engine.clpot{clqtoroot}, engine.seppot{p, clqtoroot});
+    end
+    pot = marginalize_pot(tpot, query);
+    
+    marginal = pot_to_marginal(pot);
+    marginal.T = normalise(marginal.T);
+end
+                
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/problems.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+PROBLEMS WITH STAB_COND_GAUSS_INF_ENGINE
+
+
+- enter_evidence always returns ll=0
+  (I set ll=0 since it is not computed)
+
+- fails on scg_3node, probably because the engine needs to be
+re-initialized every time before enter_evidence is called, not just
+when the engine is constructed.
+
+??? Error using ==> assert
+assertion violated: 
+
+K>> dbstack
+dbstack
+> In /home/eecs/murphyk/matlab/BNT/HMM/assert.m at line 9
+  In /home/eecs/murphyk/matlab/BNT/examples/static/SCG/scg_3node.m at line 45
+
+
+
+- crashes on scg3
+
+Error in ==> /home/eecs/murphyk/matlab/BNT/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m
+On line 77  ==>       clpot{cindex} = direct_combine_pots(pot{n}, clpot{cindex});
+
+K>> dbstack
+dbstack
+> In /home/eecs/murphyk/matlab/BNT/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m at line 77
+  In /home/eecs/murphyk/matlab/BNT/examples/static/SCG/scg3.m at line 41
+K>> 
+
+
+
+
+
+- fails on scg1 and scg2
+
+Warning: One or more output arguments not assigned during call to 'min_subtree_conti_nodes (nearsest_node2)'.
+Warning in ==> /home/eecs/murphyk/matlab/BNT/graph/min_subtree_conti_nodes.m (nearsest_node2)
+On line 60  ==>     nea_node = nearsest_node2(tree, nodes, n);
+
+K>> dbstack
+dbstack
+> In /home/eecs/murphyk/matlab/BNT/graph/min_subtree_conti_nodes.m (nearsest_node2) at line 60
+  In /home/eecs/murphyk/matlab/BNT/graph/min_subtree_conti_nodes.m (nearest_node) at line 50
+  In /home/eecs/murphyk/matlab/BNT/graph/min_subtree_conti_nodes.m at line 11
+  In /home/eecs/murphyk/matlab/BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_difclq_nodes.m at line 17
+  In /home/eecs/murphyk/matlab/BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_nodes.m at line 23
+  In /home/eecs/murphyk/matlab/BNT/examples/static/SCG/scg1.m at line 42
+
+
+
+
+
+- This code fragment, from BNT/graph/min_subtree_conti_nodes, is clearly redundant
+
+function nea_node = nearest_node(tree, root, nodes)
+%get the nearest node to the root in the tree
+nea_node = nearsest_node2(tree, nodes, root);
+
+function nea_node = nearsest_node2(tree, nodes, inode)
+if myismember(inode, nodes)
+    nea_node = inode;
+    return;
+end
+cs = children(tree, inode);
+for i = 1:length(cs)
+    n = cs(i);
+    nea_node = nearsest_node2(tree, nodes, n);
+end
+    
+
+- Some names are badly chosen. 'nearsest' is a mis-spelling. 'min_subtree_conti_nodes' should be
+'min_subtree_containing_nodes' or 'min_subtree_con_nodes'.
+
+- In general, the code needs some heavy polishing.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/push.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function [engine, clqtoroot] = push(engine, clq, pushdom)
+%PUSH_POT push the variables in putshdom which is subset of clq to the clique toword the root and get new engine
+%pushdom is pushed variables set
+%clq is the index of the clique that pushdom belongs to
+
+clqdom = engine.cliques{clq};
+assert( mysubset(pushdom, clqdom));
+clqtoroot = parents(engine.jtree, clq);
+%sepdom = engine.separator{clq, clqtoroot};
+sepdom = engine.separator{clqtoroot, clq};
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Calculate the strong marginal of the union of pushdom and and the separatordomain and  %
+% the corresponding complement                                                           %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%[margpot, comppot] = complement_pot(engine.clpot{clq}, pushdom);
+newsepdom = myunion(pushdom,sepdom);
+[margpot,comppot] = complement_pot(engine.clpot{clq}, newsepdom);
+engine.clpot{clqtoroot} = direct_combine_pots(engine.clpot{clqtoroot}, margpot);
+engine.clpot{clq} = comppot;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Calculation of the new separator and separatorpotential of the junction tree %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+engine.seppot{clqtoroot, clq} = direct_combine_pots(engine.seppot{clqtoroot, clq}, margpot);
+engine.separator{clqtoroot, clq} = myunion(engine.separator{clqtoroot, clq}, pushdom);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Add pushdomain to the clique towards the root %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+engine.cliques{clqtoroot} = myunion(engine.cliques{clqtoroot}, pushdom);
+
+num_cliques = length(engine.cliques);
+B = sparse(num_cliques, 1);
+for i=1:num_cliques
+  B(i, engine.cliques{i}) = 1;
+end
+engine.cliques_bitv = B;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/push_pot_toclique.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function engine = push_pot_toclique(engine, clqtarget, clq, nodes)
+% PUSH_POT push the variables in putshdom which is subset of clq to the target clique toword the root and get new engine
+% engine = push_pot_toclique(engine, clqtarget, clq, nodes)
+[engine, clqtoroot] = push_pot(engine, clq, nodes)
+while clqtoroot ~= clqtarget
+    [engine, clqtoroot] = push_pot(engine, clqtoroot, nodes)
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,178 @@
+function engine = stab_cond_gauss_inf_engine(bnet)
+% STAB_COND_GAUSS_INF_ENGINE Junction tree using stable CG potentials
+% engine = cond_gauss_inf_engine(bnet)
+% 
+% This class was written by Shan Huang (shan.huang@intel.com) 2001
+% and fixed by Rainer Deventer deventer@informatik.uni-erlangen.de March 2003
+N = length(bnet.dag);
+clusters = {};
+root = N;
+stages = { 1:N };
+onodes = [];
+engine = init_fields;
+engine.evidence = [];
+engine = class(engine, 'stab_cond_gauss_inf_engine', inf_engine(bnet));
+
+ns = bnet.node_sizes(:);
+ns(onodes) = 1; % observed nodes have only 1 possible value
+
+%[engine.jtree, dummy, engine.cliques, B, w, elim_order, moral_edges, fill_in_edges, strong] = ...
+%    dag_to_jtree(bnet, onodes, stages, clusters);
+
+
+partial_order = determine_elim_constraints(bnet, onodes);
+strong = ~isempty(partial_order);
+stages = {};
+clusters = {};
+[engine.jtree, dummy_root, engine.cliques, B, w, elim_order] = 
+    graph_to_jtree(moralize(bnet.dag), ns, partial_order, stages, clusters);
+
+    
+engine.cliques_bitv = B;
+engine.clique_weight = w;
+C = length(engine.cliques);
+engine.clpot = cell(1,C);
+
+% A node can be a member of many cliques, but is assigned to exactly one, to avoid
+% double-counting its CPD. We assign node i to clique c if c is the "lightest" clique that
+% contains i's family, so it can accomodate its CPD.
+
+engine.clq_ass_to_node = zeros(1, N);
+num_cliques = length(engine.cliques);
+for i=1:N
+  clqs_containing_family = find(all(B(:,family(bnet.dag, i)), 2)); % all selected columns must be 1
+  c = clqs_containing_family(argmin(w(clqs_containing_family)));  
+  engine.clq_ass_to_node(i) = c; 
+end
+
+% Compute the separators between connected cliques.
+[is,js] = find(engine.jtree > 0);
+engine.separator = cell(num_cliques, num_cliques);
+for k=1:length(is)
+  i = is(k); j = js(k);
+  engine.separator{i,j} = find(B(i,:) & B(j,:)); % intersect(cliques{i}, cliques{j});
+end
+%keyboard;
+engine.seppot = cell(C,C);
+
+pot_type = 'scg';
+check_for_cd_arcs([], bnet.cnodes, bnet.dag);
+
+% Make the jtree rooted, so there is a fixed message passing order.
+if strong
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  % Start the search for the strong root at the clique with the  %
+  % highest number.                                              %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  root = length(engine.cliques);
+  root_found = 0;
+  
+  while ((~root_found) & (root >= 1))
+      root_found = test_strong_root(engine.jtree,engine.cliques,bnet.dnodes,root);
+      if ~root_found
+          root = root - 1;
+      end
+  end
+  assert(root > 0)
+  engine.root = root;
+  % the last clique is guaranteed to be a strong root
+  %engine.root = length(engine.cliques);
+else
+  % jtree_dbn_inf_engine requires the root to contain the interface.
+  % This may conflict with the strong root requirement! *********** BUG *************
+  engine.root = clq_containing_nodes(engine, root);
+  if engine.root <= 0
+    error(['no clique contains ' num2str(root)]);
+  end
+end  
+
+[engine.jtree, engine.preorder, engine.postorder] = mk_rooted_tree(engine.jtree, engine.root);
+
+% Evaluate CPDs with evidence, and convert to potentials  
+pot = cell(1, N);
+inited = zeros(1, C);
+clpot = cell(1, C);
+evidence = cell(1, N);
+for n=1:N
+  fam = family(bnet.dag, n);
+  e = bnet.equiv_class(n);
+  %pot{n} = CPD_to_scgpot(bnet.CPD{e}, fam, ns, bnet.cnodes, evidence);
+  pot{n} = convert_to_pot(bnet.CPD{e}, pot_type, fam(:), evidence);
+  cindex = engine.clq_ass_to_node(n);
+  if inited(cindex)
+      clpot{cindex} = direct_combine_pots(pot{n}, clpot{cindex});
+  else
+      clpot{cindex} = pot{n};
+      inited(cindex) = 1;
+  end
+end
+
+for i=1:C
+    if inited(i) == 0
+        clpot{i} = scgpot([], [], [], []);
+    end
+end
+
+seppot = cell(C, C);
+% separators are is not need to initialize
+
+% collect to root (node to parents)
+% Unlike the HUGIN architecture the complements are stored in the cliques during COLLECT 
+% and the separators are not playing a specific role during this process
+for n=engine.postorder(1:end-1)
+  for p=parents(engine.jtree, n)
+    if ~isempty(engine.separator{p,n})
+      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+      % The empty case might happen for unlinked nodes, i.e. the DAG is not %
+      % a single tree, but a forest                                           %
+      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+      [margpot, comppot] = complement_pot(clpot{n}, engine.separator{p,n});
+      clpot{n} = comppot;
+      clpot{p} = combine_pots(clpot{p}, margpot);
+    end
+  end
+end
+
+% distribute message from root
+% We have not to store the weak clique marginals and keep the original complement potentials. 
+% This is a minor variation of HUGIN architecture.
+temppot = clpot;
+for n=engine.preorder
+  for c=children(engine.jtree, n)
+    seppot{n,c} = marginalize_pot(temppot{n}, engine.separator{n,c});
+    temppot{c} = direct_combine_pots(temppot{c}, seppot{n,c});
+  end
+end
+
+engine.clpot = clpot;
+engine.seppot = seppot;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% init_fields()                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function engine = init_fields()
+
+engine.evidence = [];
+engine.jtree = [];
+engine.cliques = [];
+engine.cliques_bitv = [];
+engine.clique_weight = [];
+engine.preorder = [];
+engine.postorder = [];
+engine.root = []; 
+engine.clq_ass_to_node = [];
+engine.separator = [];
+engine.clpot =[];
+engine.seppot = [];
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+/enter_evidence.m/1.1.1.1/Wed Jun 19 22:05:04 2002//
+/find_mpe.m/1.1.1.1/Wed Jun 19 22:11:42 2002//
+/marginal_nodes.m/1.1.1.1/Thu Sep 30 03:09:00 2004//
+/var_elim_inf_engine.m/1.1.1.1/Wed Jun 19 22:04:50 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static/@var_elim_inf_engine
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/enter_evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function [engine, loglik] = enter_evidence(engine, evidence, varargin)
+% ENTER_EVIDENCE Add the specified evidence to the network (var_elim)
+% [engine, loglik] = enter_evidence(engine, evidence, ...)
+%
+% evidence{i} = [] if if X(i) is hidden, and otherwise contains its observed value (scalar or column vector)
+
+% we could pre-process the evidence here, to prevent repeated work, but we don't.
+engine.evidence = evidence;
+
+if nargout == 2
+  [m, loglik] = marginal_nodes(engine, [1]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/find_mpe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,163 @@
+function mpe = find_mpe(engine, new_evidence, max_over)
+% FIND_MPE Find the most probable explanation of the data (assignment to the hidden nodes)
+% function mpe = find_mpe(engine, evidence, order)
+%
+% PURPOSE:
+%       CALC_MPE Computes the most probable explanation to the network nodes
+%       given the evidence.
+%       
+%       [mpe, ll] = calc_mpe(engine, new_evidence, max_over)
+%
+% INPUT:
+%       bnet  - the bayesian network
+%       new_evidence - optional, if specified - evidence to be incorporated [cell(1,n)]
+%       max_over - optional, if specified determines the variable elimination order [1:n]
+%
+% OUTPUT:
+%       mpe - the MPE assignmet for the net variables (or [] if no satisfying assignment)
+%       ll - log assignment probability.
+%
+% Notes:
+% 1. Adapted from '@var_elim_inf_engine\marginal_nodes' for MPE by Ron Zohar, 8/7/01
+% 2. Only discrete potentials are supported at this time.
+% 3. Complexity: O(nw*) where n is the number of nodes and w* is the induced tree width.
+% 4. Implementation based on:
+%  - R. Dechter, "Bucket Elimination: A Unifying Framework for Probabilistic Inference", 
+%                 UA1 96, pp. 211-219.
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+n = length(bnet.dag);
+evidence = cell(1,n);
+if (nargin<2)
+    new_evidence = evidence;
+end
+
+onodes = find(~isemptycell(new_evidence));  % observed nodes
+hnodes = find(isemptycell(new_evidence));  % hidden nodes
+pot_type = determine_pot_type(bnet, onodes);
+
+if pot_type ~= 'd'
+  error('only disrete potentials supported at this time')    
+end
+
+for i=1:n
+  fam = family(bnet.dag, i);
+  CPT{i} = convert_to_pot(bnet.CPD{bnet.equiv_class(i)}, pot_type, fam(:), evidence);        
+end 
+
+% handle observed nodes: set impossible cases' probability to zero
+% rather than prun matrix (this makes backtracking easier)
+
+for ii=onodes
+  lIdx = 1:ns(ii);
+  lIdx = setdiff(lIdx, new_evidence{ii});
+  
+  sCPT=struct(CPT{ii});  % violate object privacy
+  
+  sargs = '';
+  for jj=1:(length(sCPT.domain)-1)
+    sargs = [sargs, ':,']; 
+  end        
+  for jj=lIdx
+    eval(['sCPT.T(', sargs, num2str(jj), ')=0;']);
+  end
+  CPT{ii}=dpot(sCPT.domain, sCPT.sizes, sCPT.T);        
+end
+
+B = cell(1,n); 
+for b=1:n
+  B{b} = mk_initial_pot(pot_type, [], [], [], []);
+end
+
+if (nargin<3)
+  max_over = (1:n);
+end   
+order = max_over; % no attempt to optimize this
+
+
+% Initialize the buckets with the CPDs assigned to them
+for i=1:n
+  b = bucket_num(domain_pot(CPT{i}), order);
+  B{b} = multiply_pots(B{b}, CPT{i});
+end
+
+% Do backward phase
+max_over = max_over(length(max_over):-1:1); % reverse
+maximize = 1;
+for i=max_over(1:end-1)        
+  % max-ing over variable i which occurs in bucket j
+  j = bucket_num(i, order);
+  rest = mysetdiff(domain_pot(B{j}), i);
+  %temp = marginalize_pot_max(B{j}, rest);
+  temp = marginalize_pot(B{j}, rest, maximize);
+  b = bucket_num(domain_pot(temp), order);
+  %        fprintf('maxing over bucket %d (var %d), putting result into bucket %d\n', j, i, b);
+  sB=struct(B{b});  % violate object privacy
+  if ~isempty(sB.domain)
+    B{b} = multiply_pots(B{b}, temp);
+  else
+    B{b} = temp;
+  end
+end
+result = B{1};
+marginal = pot_to_marginal(result);
+[prob, mpe] = max(marginal.T);
+
+% handle impossible cases
+if ~(prob>0)
+  mpe = [];    
+  ll = -inf;
+  %warning('evidence has zero probability')
+  return
+end
+
+ll = log(prob);
+
+% Do forward phase    
+for ii=2:n
+  marginal = pot_to_marginal(B{ii});
+  mpeidx = [];
+  for jj=order(1:length(mpe))
+    %assert(ismember(jj, marginal.domain)) %%% bug
+    temp = find_equiv_posns(jj, marginal.domain);
+    mpeidx = [mpeidx, temp] ;
+    if isempty(temp)
+      mpeidx = [mpeidx, Inf] ;
+    end
+  end
+  [mpeidxsorted sortedtompe] = sort(mpeidx) ;
+  
+  % maximize the matrix obtained from assigning values from previous buckets.
+  % this is done by building a string and using eval.
+  
+  kk=1;
+  sargs = '(';
+  for jj=1:length(marginal.domain)
+    if (jj~=1)
+      sargs = [sargs, ','];
+    end
+    if (mpeidxsorted(kk)==jj)
+      sargs = [sargs, num2str(mpe(sortedtompe(kk)))];
+      if (kk<length(mpe))
+	kk = kk+1 ;
+      end
+    else
+      sargs = [sargs, ':'];
+    end
+  end
+  sargs = [sargs, ')'] ;   
+  eval(['[val, loc] = max(marginal.T', sargs, ');'])        
+  mpe = [mpe loc];
+end     
+[I,J] = sort(order);
+mpe = mpe(J);
+
+mpe = num2cell(mpe);
+
+%%%%%%%%%
+
+function b = bucket_num(domain, order)
+
+b = max(find_equiv_posns(domain, order));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/marginal_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+function [marginal, loglik] = marginal_nodes(engine, query, add_ev)
+% MARGINAL_NODES Compute the marginal on the specified query nodes (var_elim)
+% [marginal, loglik] = marginal_nodes(engine, query)
+
+if nargin < 3, add_ev = 0; end
+
+assert(length(query)>=1);
+
+evidence = engine.evidence;
+
+bnet = bnet_from_engine(engine);
+ns = bnet.node_sizes;
+n = length(bnet.dag);
+
+onodes = find(~isemptycell(evidence));
+hnodes = find(isemptycell(evidence));
+pot_type = determine_pot_type(bnet, onodes);
+
+% Fold the evidence into the CPTs - this could be done in 'enter_evidence'
+CPT = cell(1,n);
+for i=1:n
+  fam = family(bnet.dag, i);
+  CPT{i} = convert_to_pot(bnet.CPD{bnet.equiv_class(i)}, pot_type, fam(:), evidence);
+end
+
+
+
+sum_over = mysetdiff(1:n, query);
+order = [query sum_over]; % no attempt to optimize this
+
+% Initialize the buckets with the product of the CPTs assigned to them
+B = cell(1,n+1); 
+for b=1:n+1
+  B{b} = mk_initial_pot(pot_type, [], [], [], []);
+end
+for i=1:n
+  b = bucket_num(domain_pot(CPT{i}), order);
+  B{b} = multiply_pots(B{b}, CPT{i});
+end
+
+% Do the marginalization
+sum_over = sum_over(length(sum_over):-1:1); % reverse
+for i=sum_over(:)'
+  % summing over variable i which occurs in bucket j
+  j = bucket_num(i, order);
+  rest = mysetdiff(domain_pot(B{j}), i);
+  % minka
+  if ~isempty(rest)
+    temp = marginalize_pot(B{j}, rest);
+    b = bucket_num(domain_pot(temp), order);
+    %fprintf('summing over bucket %d (var %d), putting result into bucket %d\n', j, i, b);
+    B{b} = multiply_pots(B{b}, temp);
+  end
+end
+
+% Combine all the remaining buckets into one
+result = B{1};
+for i=2:length(query)
+  if ~isempty(domain_pot(B{i}))
+    result = multiply_pots(result, B{i});
+  end
+end
+[result, loglik] = normalize_pot(result);
+
+
+marginal = pot_to_marginal(result);
+% minka: from jtree_inf_engine
+if add_ev
+  bnet = bnet_from_engine(engine);
+  %marginal = add_ev_to_dmarginal(marginal, engine.evidence, bnet.node_sizes);
+  marginal = add_evidence_to_gmarginal(marginal, engine.evidence, bnet.node_sizes, bnet.cnodes);
+end
+
+%%%%%%%%%
+
+function b = bucket_num(domain, order)
+
+b = max(find_equiv_posns(domain, order));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/@var_elim_inf_engine/var_elim_inf_engine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function engine = var_elim_inf_engine(bnet, varargin)
+% VAR_ELIM_INF_ENGINE Variable elimination inference engine
+% engine = var_elim_inf_engine(bnet)
+%
+% For details on variable elimination, see
+% - R. Dechter, "Bucket Elimination: A Unifying Framework for Probabilistic Inference", UA1 96, pp. 211-219. 
+% - Z. Li and B. D'Ambrosio, "Efficient inference in Bayes networks as a combinatorial
+%     optimization problem", Intl. J. Approximate Reasoning, 11(1):55-81, 1994
+% - R. McEliece and S. M. Aji, "The Generalized Distributive Law", IEEE Trans. Inform. Theory, 46(2), 2000
+
+
+% This is where we will store the results between enter_evidence and marginal_nodes
+engine.evidence = [];
+
+engine = class(engine, 'var_elim_inf_engine', inf_engine(bnet));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/dummy/1.1.1.1/Sat Jan 18 22:22:46 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+A D/@belprop_fg_inf_engine////
+A D/@belprop_inf_engine////
+A D/@belprop_mrf2_inf_engine////
+A D/@cond_gauss_inf_engine////
+A D/@enumerative_inf_engine////
+A D/@gaussian_inf_engine////
+A D/@gibbs_sampling_inf_engine////
+A D/@global_joint_inf_engine////
+A D/@jtree_inf_engine////
+A D/@jtree_limid_inf_engine////
+A D/@jtree_mnet_inf_engine////
+A D/@jtree_sparse_inf_engine////
+A D/@likelihood_weighting_inf_engine////
+A D/@pearl_inf_engine////
+A D/@quickscore_inf_engine////
+A D/@stab_cond_gauss_inf_engine////
+A D/@var_elim_inf_engine////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/inference/static
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/inference/static/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/installC_BNT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+BNT_HOME = '/home/ai2/murphyk/matlab/FullBNT'; % edit this
+
+d = fullfile(BNT_HOME, 'BNT');
+%PC = (strncmp(computer,'PC',2));
+
+cd(sprintf('%s/potentials/Tables', d))
+mex marg_table.c % used by @dpot/marginalize_pot.m
+mex marg_sparse_table.c %used by sparse jtree
+mex mult_by_table.c
+mex mult_by_sparse_table.c
+mex divide_by_table.c
+mex divide_by_sparse_table.c
+mex rep_mult.c
+
+% Written by Wei Hu
+cd(sprintf('%s/CPDs/@discrete_CPD', d))
+mex convert_to_sparse_table.c
+
+% Written by Wei Hu
+cd(sprintf('%s/inference/static/@jtree_sparse_inf_engine', d))
+mex init_pot.c
+mex collect_evidence.c
+mex distribute_evidence.c
+
+% written by Bhaskara Marthi 
+cd(sprintf('%s/inference/static/@gibbs_sampling_inf_engine/private', d))
+mex compute_posterior.c
+mex get_slice_dbn.c
+mex sample_single_discrete.c
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/installC_graph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+% These C functions were written by Ilya Shpitser.
+
+if isunix
+  mex -c elim.c;
+  mex -c cell.c;
+  mex -c map.c;
+  mex -DUNIX  best_first_elim_order.c  elim.o  cell.o  map.o;
+  mex -DUNIX  triangulate.c  elim.o  cell.o  map.o;
+else
+  mex -c elim.c;
+  mex -c cell.c;
+  mex -c map.c;
+  mex  best_first_elim_order.c  elim.obj  cell.obj  map.obj;
+  mex  triangulate.c  elim.obj  cell.obj  map.obj;
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+/CovMat.m/1.1.1.1/Sun Jul 28 23:09:42 2002//
+/bayes_update_params.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/bic_score_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/compute_cooling_schedule.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/dirichlet_score_family.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/kpm_learn_struct_mcmc.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/learn_params.m/1.1.1.1/Thu Jun 10 01:28:08 2004//
+/learn_params_dbn.m/1.1.1.1/Sun Feb  2 00:23:38 2003//
+/learn_params_dbn_em.m/1.1.1.1/Mon Aug 18 21:50:34 2003//
+/learn_params_em.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/learn_struct_K2.m/1.1.1.1/Thu Sep 26 08:39:16 2002//
+/learn_struct_dbn_reveal.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/learn_struct_mcmc.m/1.1.1.1/Fri Sep  5 14:06:40 2003//
+/learn_struct_pdag_ic_star.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/learn_struct_pdag_pc.m/1.2/Mon Feb 12 01:15:13 2007//
+/learn_struct_pdag_pc_constrain.m/1.1.1.1/Sun Jul 28 23:09:38 2002//
+/mcmc_sample_to_hist.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/mk_schedule.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/mk_tetrad_data_file.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/score_dags.m/1.1.1.1/Mon Apr  4 01:39:46 2005//
+/score_dags_old.m/1.1.1.1/Wed May 29 15:59:56 2002//
+/score_family.m/1.1.1.1/Thu Jun 10 01:33:14 2004//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/learning
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/CovMat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function [CovMatrix, obs, varfields] = CovMat(filename,row_cols)
+%[CovMatrix, obs, varfields] = CovMat(filename,row_cols)
+%% generates a Covariance Matrix from a file of data consisting of N columns of M data rows
+%%      filename        string name (with path and extension) of file to open
+%%      row_cols        Number_of_converstions_per_row  (turns into  [3 inf])
+%% Return
+%%      CovMatrix       Covariance matrix
+%%      obs             Number of observations read in
+%%      varfields       Labels of the variables see filename structure below
+%%
+%%  Filename structure: 
+%%      Comma separated, starting with the variable labels, then the data in rows.
+%%    filename test.txt consists of:
+%%
+%%      Earthquake,Burglar,Radio,Alarm,Call
+%%      1,2,3,4,5
+%%      11,22,33,44,55
+%%      . . .
+%%
+%% Example call: 
+%%  [cvmat numdat lables] = CovMat('test.txt',5);
+%%
+%%      Returns Covariance matrix, number of date rows and variable field names
+%% Gary R. Bradski   7/2002
+
+fmtstr = '%f';
+for i = 2:row_cols
+    fmtstr = strcat(fmtstr,',%f');
+end
+
+%% load data
+fidCov = fopen(filename,'r');
+
+varfields = fgetl(fidCov);
+Corx = fscanf(fidCov,fmtstr,[row_cols inf]);
+Corx= Corx';
+[obs bla] = size(Corx);
+CovMatrix = cov(Corx); 
+fclose(fidCov);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/bayes_update_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function bnet = bayes_update_params(bnet, cases, clamped)
+% BAYES_UPDATE_PARAMS Bayesian parameter updating given completely observed data
+% bnet = bayes_update_params(bnet, cases, clamped)
+%
+% If there is a missing data, you must use EM.
+% cases(i,m) is the value assigned to node i in case m (this can also be a cell array).
+% clamped(i,m) = 1 if node i was set by intervention in case m (default: clamped = zeros).
+% Clamped nodes are not updated.
+% If there is a single case, clamped is a list of the clamped nodes, not a bit vector.
+
+
+%if iscell(cases), usecell = 1; else usecell = 0; end
+
+n = length(bnet.dag);
+ncases = size(cases, 2);
+if n ~= size(cases, 1)
+  error('data must be of size nnodes * ncases');
+end
+
+if ncases == 1 % clamped is a list of nodes
+  if nargin < 3, clamped = []; end
+  clamp_set = clamped;
+  clamped = zeros(n,1);
+  clamped(clamp_set) = 1;
+else % each row of clamped is a bit vector
+  if nargin < 3, clamped = zeros(n,ncases); end
+end
+
+for i=1:n
+  e = bnet.equiv_class(i);
+  if adjustable_CPD(bnet.CPD{e})
+    u = find(clamped(i,:)==0);
+    ps = parents(bnet.dag, i);
+    bnet.CPD{e} = bayes_update_params(bnet.CPD{e}, cases(i,u), cases(ps,u));
+  end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/bic_score_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function [S, LL] = bic_score(counts, CPT, ncases)
+% BIC_SCORE Bayesian Information Criterion score for a single family
+% [S, LL] = bic_score(counts, CPT, ncases)
+%
+% S is a large sample approximation to the log marginal likelihood,
+% which can be computed using dirichlet_score.
+%
+% S  = \log [ prod_j _prod_k theta_ijk ^ N_ijk ]  - 0.5*d*log(ncases) 
+% where counts encode N_ijk, theta_ijk is the MLE comptued from counts,
+% and d is the num of free parameters.
+
+%CPT = mk_stochastic(counts);
+tiny = exp(-700);
+LL = sum(log(CPT(:)  + tiny) .* counts(:));
+% CPT(i) = 0 iff counts(i) = 0 so it is okay to add tiny
+
+ns = mysize(counts);
+ns_ps = ns(1:end-1);
+ns_self = ns(end);
+nparams = prod([ns_ps (ns_self-1)]);
+% sum-to-1 constraint reduces the effective num. vals of the node by 1
+
+S = LL - 0.5*nparams*log(ncases);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/compute_cooling_schedule.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function temp_schedule = compute_cooling_schedule(init_temp, final_temp, anneal_rate)
+
+temp_schedule = [];
+i = 1;
+temp_schedule(i)=init_temp;
+while temp_schedule(i) > final_temp
+  i = i + 1;
+  temp_schedule(i)=temp_schedule(i-1)*anneal_rate;
+end
+
+  
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/dirichlet_score_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+function LL = dirichlet_score_family(counts, prior)
+% DIRICHLET_SCORE Compute the log marginal likelihood of a single family
+% LL = dirichlet_score(counts, prior)
+%
+% counts(a, b, ..., z) is the number of times parent 1 = a, parent 2 = b, ..., child = z
+% prior is an optional multidimensional array of the same shape as counts.
+% It defaults to a uniform prior.
+% 
+% We marginalize out the parameters:
+% LL = log \int \prod_m P(x(i,m) | x(Pa_i,m), theta_i) P(theta_i) d(theta_i)
+
+
+% LL = log[  prod_j gamma(alpha_ij)/gamma(alpha_ij + N_ij)  *
+%            prod_k gamma(alpha_ijk + N_ijk)/gamma(alpha_ijk)  ]
+% Call the prod_k term U and the prod_j term  V.
+% We reshape all quantities into (j,k) matrices
+% This formula was first derived by Cooper and Herskovits, 1992.
+% See also "Learning Bayesian Networks", Heckerman, Geiger and Chickering, MLJ 95.
+
+ns = mysize(counts);
+ns_ps = ns(1:end-1);
+ns_self = ns(end);
+
+if nargin < 2, prior = normalise(myones(ns)); end
+
+
+if 1
+  prior = reshape(prior(:), [prod(ns_ps) ns_self]);
+  counts = reshape(counts,  [prod(ns_ps) ns_self]);
+  %U = prod(gamma(prior + counts) ./ gamma(prior), 2); % mult over k
+  LU = sum(gammaln(prior + counts) - gammaln(prior), 2);
+  alpha_ij = sum(prior, 2); % sum over k
+  N_ij = sum(counts, 2);
+  %V = gamma(alpha_ij) ./ gamma(alpha_ij + N_ij);
+  LV = gammaln(alpha_ij) - gammaln(alpha_ij + N_ij);
+  %L = prod(U .* V);
+  LL = sum(LU + LV);
+else
+  CPT = mk_stochastic(prior + counts);
+  LL = sum(log(CPT(:) .* counts(:)));
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/kpm_learn_struct_mcmc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,265 @@
+function [sampled_graphs, accept_ratio, num_edges] = learn_struct_mcmc(data, ns, varargin)
+% LEARN_STRUCT_MCMC  Monte Carla Markov Chain search over DAGs assuming fully observed data
+% [sampled_graphs, accept_ratio, num_edges] = learn_struct_mcmc(data, ns, ...)
+% 
+% data(i,m) is the value of node i in case m.
+% ns(i) is the number of discrete values node i can take on.
+%
+% sampled_graphs{m} is the m'th sampled graph.
+% accept_ratio(t) = acceptance ratio at iteration t
+% num_edges(t) = number of edges in model at iteration t
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% scoring_fn - 'bayesian' or 'bic' [ 'bayesian' ]
+%              Currently, only networks with all tabular nodes support Bayesian scoring.
+% type       - type{i} is the type of CPD to use for node i, where the type is a string
+%              of the form 'tabular', 'noisy_or', 'gaussian', etc. [ all cells contain 'tabular' ]
+% params     - params{i} contains optional arguments passed to the CPD constructor for node i,
+%              or [] if none.  [ all cells contain {'prior', 1}, meaning use uniform Dirichlet priors ]
+% discrete   - the list of discrete nodes [ 1:N ]
+% clamped    - clamped(i,m) = 1 if node i is clamped in case m [ zeros(N, ncases) ]
+% nsamples   - number of samples to draw from the chain after burn-in [ 100*N ]
+% burnin     - number of steps to take before drawing samples [ 5*N ]
+% init_dag   - starting point for the search [ zeros(N,N) ]
+%
+% e.g., samples = learn_struct_mcmc(data, ns, 'nsamples', 1000);
+%
+% This interface is not backwards compatible with BNT2,
+% but is designed to be compatible with the other learn_struct_xxx routines.
+%
+% Note: We currently assume a uniform structural prior.
+
+[n ncases] = size(data);
+
+
+% set default params
+type = cell(1,n);
+params = cell(1,n);
+for i=1:n
+  type{i} = 'tabular';
+  %params{i} = { 'prior', 1 };
+  params{i} = { 'prior_type', 'dirichlet', 'dirichlet_weight', 1 };
+end
+scoring_fn = 'bayesian';
+discrete = 1:n;
+clamped = zeros(n, ncases);
+nsamples = 100*n;
+burnin = 5*n;
+dag = zeros(n);
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'nsamples',   nsamples = args{i+1};
+   case 'burnin',     burnin = args{i+1};
+   case 'init_dag',   dag = args{i+1};
+   case 'scoring_fn', scoring_fn = args{i+1};
+   case 'type',       type = args{i+1}; 
+   case 'discrete',   discrete = args{i+1}; 
+   case 'clamped',    clamped = args{i+1}; 
+   case 'params',     if isempty(args{i+1}), params = cell(1,n); else params = args{i+1};  end
+  end
+end
+
+% We implement the fast acyclicity check described by P. Giudici and R. Castelo,
+% "Improving MCMC model search for data mining", submitted to J. Machine Learning, 2001.
+use_giudici = 1;
+if use_giudici
+  [nbrs, ops, nodes] = mk_nbrs_of_digraph(dag);
+  A = init_ancestor_matrix(dag);
+else
+  [nbrs, ops, nodes] = mk_nbrs_of_dag(dag);
+  A = [];
+end
+
+num_accepts = 1;
+num_rejects = 1;
+T = burnin + nsamples;
+accept_ratio = zeros(1, T);
+num_edges = zeros(1, T);
+sampled_graphs = cell(1, nsamples);
+%sampled_bitv = zeros(nsamples, n^2);
+
+for t=1:T
+  [dag, nbrs, ops, nodes, A, accept] = take_step(dag, nbrs, ops, nodes, ns, data, clamped, A, ...
+						 scoring_fn, discrete, type, params);
+  num_edges(t) = sum(dag(:));
+  num_accepts = num_accepts + accept;
+  num_rejects = num_rejects + (1-accept);
+  accept_ratio(t) =  num_accepts/num_rejects;
+  if t > burnin
+    sampled_graphs{t-burnin} = dag;
+    %sampled_bitv(t-burnin, :) = dag(:)';
+  end
+end
+
+
+%%%%%%%%%
+
+
+function [new_dag, new_nbrs, new_ops, new_nodes, A, accept] = ...
+    take_step(dag, nbrs, ops, nodes, ns, data, clamped, A, ...
+	      scoring_fn, discrete, type, params)
+
+
+use_giudici = ~isempty(A);
+if use_giudici
+  [new_dag, op, i, j] = pick_digraph_nbr(dag, nbrs, ops, nodes, A);
+  %assert(acyclic(new_dag));
+  [new_nbrs, new_ops, new_nodes] = mk_nbrs_of_digraph(new_dag);
+else
+  d = sample_discrete(normalise(ones(1, length(nbrs))));
+  new_dag = nbrs{d};
+  op = ops{d};
+  i = nodes(d, 1); j = nodes(d, 2);
+  [new_nbrs, new_ops, new_nodes] = mk_nbrs_of_dag(new_dag);
+end
+
+bf =  bayes_factor(dag, new_dag, op, i, j, ns, data, clamped, scoring_fn, discrete, type, params);
+
+%R = bf * (new_prior / prior) * (length(nbrs) / length(new_nbrs)); 
+R = bf * (length(nbrs) / length(new_nbrs)); 
+u = rand(1,1);
+if u > min(1,R) % reject the move
+  accept = 0;
+  new_dag = dag;
+  new_nbrs = nbrs;
+  new_ops = ops;
+  new_nodes = nodes;
+else
+  accept = 1;
+  if use_giudici
+    A = update_ancestor_matrix(A, op, i, j, new_dag);
+  end
+end
+
+
+%%%%%%%%%
+
+function bfactor = bayes_factor(old_dag, new_dag, op, i, j, ns, data, clamped, scoring_fn, discrete, type, params)
+
+u = find(clamped(j,:)==0);
+LLnew = score_family(j, parents(new_dag, j), type{j}, scoring_fn, ns, discrete, data(:,u), params{j});
+LLold = score_family(j, parents(old_dag, j), type{j}, scoring_fn, ns, discrete, data(:,u), params{j});
+bf1 = exp(LLnew - LLold);
+
+if strcmp(op, 'rev')  % must also multiply in the changes to i's family
+  u = find(clamped(i,:)==0);
+  LLnew = score_family(i, parents(new_dag, i), type{i}, scoring_fn, ns, discrete, data(:,u), params{i});
+  LLold = score_family(i, parents(old_dag, i), type{i}, scoring_fn, ns, discrete, data(:,u), params{i});
+  bf2 = exp(LLnew - LLold);
+else
+  bf2 = 1;
+end
+bfactor = bf1 * bf2;
+
+
+%%%%%%%% Giudici stuff follows %%%%%%%%%%
+
+
+function [new_dag, op, i, j] = pick_digraph_nbr(dag, digraph_nbrs, ops, nodes, A)
+
+legal = 0;
+while ~legal
+  d = sample_discrete(normalise(ones(1, length(digraph_nbrs))));
+  i = nodes(d, 1); j = nodes(d, 2);
+  switch ops{d}
+   case 'add',
+    if A(i,j)==0
+      legal = 1;
+    end
+   case 'del',
+    legal = 1;
+   case 'rev',
+    ps = mysetdiff(parents(dag, j), i);
+    % if any(A(ps,i)) then there is a path i -> parent of j -> j
+    % so reversing i->j would create a cycle
+    legal = ~any(A(ps, i));
+  end
+end
+%new_dag = digraph_nbrs{d};
+new_dag = digraph_nbrs(:,:,d);
+op = ops{d};
+i = nodes(d, 1); j = nodes(d, 2);
+
+
+%%%%%%%%%%%%%%
+
+
+function A = update_ancestor_matrix(A, op, i, j, dag)
+
+switch op
+ case 'add',
+  A = do_addition(A, op, i, j, dag);
+ case 'del', 
+  A = do_removal(A, op, i, j, dag);
+ case 'rev', 
+  A = do_removal(A, op, i, j, dag);
+  A = do_addition(A, op, j, i, dag);
+end
+
+  
+%%%%%%%%%%%%
+
+function A = do_addition(A, op, i, j, dag)
+
+A(j,i) = 1; % i is an ancestor of j
+anci = find(A(i,:));
+if ~isempty(anci)
+  A(j,anci) = 1; % all of i's ancestors are added to Anc(j)
+end
+ancj = find(A(j,:));
+descj = find(A(:,j)); 
+if ~isempty(ancj)
+  for k=descj(:)'
+    A(k,ancj) = 1; % all of j's ancestors are added to each descendant of j
+  end
+end
+
+%%%%%%%%%%%
+
+function A = do_removal(A, op, i, j, dag)
+
+% find all the descendants of j, and put them in topological order
+%descj = find(A(:,j)); 
+R = reachability_graph(dag);
+descj = find(R(j,:)); 
+order = topological_sort(dag);
+descj_topnum = order(descj);
+[junk, perm] = sort(descj_topnum);
+descj = descj(perm);
+% Update j and all its descendants
+A = update_row(A, j, dag);
+for k = descj(:)'
+  A = update_row(A, k, dag);
+end
+
+%%%%%%%%%
+
+function A = update_row(A, j, dag)
+
+% We compute row j of A
+A(j, :) = 0;
+ps = parents(dag, j);
+if ~isempty(ps)
+  A(j, ps) = 1;
+end
+for k=ps(:)'
+  anck = find(A(k,:));
+  if ~isempty(anck)
+    A(j, anck) = 1;
+  end
+end
+  
+%%%%%%%%
+
+function A = init_ancestor_matrix(dag)
+
+order = topological_sort(dag);
+A = zeros(length(dag));
+for j=order(:)'
+  A = update_row(A, j, dag);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/learn_params.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function bnet = learn_params(bnet, data)
+% LEARN_PARAMS Find the maximum likelihood params for a fully observed model
+% bnet = learn_params(bnet, data)
+%
+% data(i,m) is the value of node i in case m (can be a cell array)
+%
+% We set bnet.CPD{i} to its ML/MAP estimate.
+%
+% Currently we assume no param tying
+
+% AND THAT EACH DATA POINT IS A SCALAR - no longer assumed
+
+%if iscell(data)
+%  data=cell2num(data);
+%end
+[n ncases] = size(data);
+for j=1:n
+  e = bnet.equiv_class(j);
+  assert(e==j);
+  if adjustable_CPD(bnet.CPD{e})
+    fam = family(bnet.dag,j);
+    %bnet.CPD{j} = learn_params(bnet.CPD{j}, data(fam,:));
+    bnet.CPD{j} = learn_params(bnet.CPD{j}, fam, data, bnet.node_sizes, bnet.cnodes);
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/learn_params_dbn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function bnet = learn_params_dbn(bnet, data)
+% LEARN_PARAM_DBN Estimate params of a DBN for a fully observed model
+% bnet = learn_params_dbn(bnet, data)
+%
+% data(i,t) is the value of node i in slice t (can be a cell array)
+% We currently assume there is a single time series
+%
+% We set bnet.CPD{i} to its ML/MAP estimate.
+%
+% Currently we assume each node in the first 2 slices has its own CPD (no param tying);
+% all nodes in slices >2 share their params with slice 2 as usual.
+
+[ss T] = size(data);
+
+% slice 1
+for j=1:ss
+  if adjustable_CPD(bnet.CPD{j})
+    fam = family(bnet.dag,j);
+    bnet.CPD{j} = learn_params(bnet.CPD{j}, data(fam,1));
+  end
+end
+
+
+% slices 2:T
+% data2(:,t) contains [data(:,t-1); data(:,t)].
+% Then we extract out the rows corresponding to the parents in the current and previous slice.
+data2 = [data(:,1:T-1);
+	 data(:,2:T)];
+for j=1:ss
+  j2 = j+ss;
+  if adjustable_CPD(bnet.CPD{j2})
+    fam = family(bnet.dag,j2);
+    bnet.CPD{j2} = learn_params(bnet.CPD{j2}, data2(fam,:));
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/learn_params_dbn_em.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,179 @@
+function [bnet, LL, engine] = learn_params_dbn_em(engine, evidence, varargin)
+% LEARN_PARAMS_DBN Set the parameters in a DBN to their ML/MAP values using batch EM.
+% [bnet, LLtrace, engine] = learn_params_dbn_em(engine, data, ...)
+%
+% data{l}{i,t} = value of node i in slice t of time-series l, or [] if hidden.
+%   Suppose you have L time series, each of length T, in an O*T*L array D, 
+%   where O is the num of observed scalar nodes, and N is the total num nodes per slice.
+%   Then you can create data as follows, where onodes is the index of the observable nodes:
+%      data = cell(1,L);
+%      for l=1:L
+%        data{l} = cell(N, T);
+%        data{l}(onodes,:) = num2cell(D(:,:,l));
+%      end
+% Of course it is possible for different sets of nodes to be observed in
+% each slice/ sequence, and for each sequence to be a different length.
+%
+% LLtrace is the learning curve: the vector of log-likelihood scores at each iteration.
+%
+% Optional arguments [default]
+%
+% max_iter - specifies the maximum number of iterations [100]
+% thresh - specifies the thresold for stopping EM [1e-3]
+%   We stop when |f(t) - f(t-1)| / avg < threshold,
+%   where avg = (|f(t)| + |f(t-1)|)/2 and f is log lik.
+% verbose - display loglik at each iteration [1]
+% anneal - 1 means do deterministic annealing (only for entropic priors) [0]
+% anneal_rate - geometric cooling rate [0.8]
+% init_temp - initial annealing temperature [10]
+% final_temp - final annealing temperature [1e-3]
+%
+
+max_iter = 100;
+thresh = 1e-3;
+anneal = 0;
+anneal_rate = 0.8;
+init_temp = 10;
+final_temp = 1e-3;
+verbose = 1;
+
+for i=1:2:length(varargin)
+  switch varargin{i}
+   case 'max_iter', max_iter = varargin{i+1}; 
+   case 'thresh', thresh = varargin{i+1}; 
+   case 'anneal', anneal = varargin{i+1}; 
+   case 'anneal_rate', anneal_rate = varargin{i+1}; 
+   case 'init_temp', init_temp = varargin{i+1}; 
+   case 'final_temp', final_temp = varargin{i+1}; 
+   otherwise, error(['unrecognized argument' varargin{i}])
+  end
+end
+
+% take 1 EM step at each temperature value, then when temp=0, run to convergence
+% When using an entropic prior, Z = 1-T, so 
+% T=2 => Z=-1 (max entropy)
+% T=1 => Z=0 (max likelihood)
+% T=0 => Z=1 (min entropy / max structure)
+num_iter = 1;
+LL = [];
+if anneal
+  temperature = init_temp;
+  while temperature > final_temp
+    [engine, loglik, logpost] = EM_step(engine, evidence, temperature);
+    if verbose
+      fprintf('EM iteration %d, loglik = %8.4f, logpost = %8.4f, temp=%8.4f\n', ...
+	      num_iter, loglik, logpost, temperature);
+    end
+    num_iter = num_iter + 1;
+    LL = [LL loglik];
+    temperature = temperature * anneal_rate;
+  end
+  temperature = 0;
+  previous_loglik = loglik;
+  previous_logpost = logpost;
+else
+  temperature = 0;
+  previous_loglik = -inf;
+  previous_logpost = -inf;
+end
+
+converged = 0;
+while ~converged & (num_iter <= max_iter)
+  [engine, loglik, logpost] = EM_step(engine, evidence, temperature);
+  if verbose
+    %fprintf('EM iteration %d, loglik = %8.4f, logpost = %8.4f\n', ...
+    %	    num_iter, loglik, logpost);
+    fprintf('EM iteration %d, loglik = %8.4f\n', num_iter, loglik);
+  end
+  num_iter = num_iter + 1;
+  [converged, decreased] = em_converged(loglik, previous_loglik, thresh);
+  %[converged, decreased] = em_converged(logpost, previous_logpost, thresh);
+  previous_loglik = loglik;
+  previous_logpost = logpost;
+  LL = [LL loglik];
+end
+
+bnet = bnet_from_engine(engine);
+
+%%%%%%%%%
+
+function [engine, loglik, logpost] = EM_step(engine, cases, temp)
+
+bnet = bnet_from_engine(engine); % engine contains the old params that are used for the E step
+ss = length(bnet.intra);
+CPDs = bnet.CPD; % these are the new params that get maximized
+num_CPDs = length(CPDs);
+
+% log P(theta|D) = (log P(D|theta) + log P(theta)) - log(P(D))
+% where log P(D|theta) = sum_cases log P(case|theta)
+% and log P(theta) = sum_CPDs log P(CPD) - only count once even if tied!
+% logpost = log P(theta,D) (un-normalized)
+% This should be negative, and increase at every step.
+
+adjustable = zeros(1,num_CPDs);
+logprior = zeros(1, num_CPDs);
+for e=1:num_CPDs
+  adjustable(e) = adjustable_CPD(CPDs{e});
+end
+adj = find(adjustable);
+
+for e=adj(:)'
+  logprior(e) = log_prior(CPDs{e});
+  CPDs{e} = reset_ess(CPDs{e});
+end
+
+loglik = 0;
+for l=1:length(cases)
+  evidence = cases{l};
+  if ~iscell(evidence)
+    error('training data must be a cell array of cell arrays')
+  end
+  [engine, ll] = enter_evidence(engine, evidence);
+  assert(~isnan(ll))
+  loglik = loglik + ll;
+  T = size(evidence, 2);
+  
+  % We unroll ns etc because in update_ess, we refer to nodes by their unrolled number
+  % so that they extract evidence from the right place.
+  % (The CPD should really store its own version of ns and cnodes...)
+  ns = repmat(bnet.node_sizes_slice(:), [1 T]);
+  cnodes = unroll_set(bnet.cnodes_slice, ss, T);
+ 
+  %hidden_bitv = repmat(bnet.hidden_bitv(1:ss), [1 T]);
+  hidden_bitv = zeros(ss, T);
+  hidden_bitv(isemptycell(evidence))=1;
+  % hidden_bitv(i) = 1 means node i is hidden.
+  % We pass this in, rather than using isemptycell(evidence(dom)), because
+  % isemptycell is very slow.
+  
+  t = 1;
+  for i=1:ss
+    e = bnet.equiv_class(i,1);
+    if adjustable(e)
+      fmarg = marginal_family(engine, i, t);
+      CPDs{e} = update_ess(CPDs{e}, fmarg, evidence, ns(:), cnodes(:), hidden_bitv(:)); 
+    end
+  end
+  
+  for i=1:ss   
+    e = bnet.equiv_class(i,2);
+    if adjustable(e)
+      for t=2:T
+	fmarg = marginal_family(engine, i, t);
+	CPDs{e} = update_ess(CPDs{e}, fmarg, evidence, ns(:), cnodes(:), hidden_bitv(:));
+      end
+    end
+  end
+end
+
+logpost = loglik + sum(logprior(:));
+
+for e=adj(:)'
+  CPDs{e} = maximize_params(CPDs{e}, temp);
+end
+
+engine = update_engine(engine, CPDs);
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/learn_params_em.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,88 @@
+function [bnet, LL, engine] = learn_params_em(engine, evidence, max_iter, thresh)
+% LEARN_PARAMS_EM Set the parameters of each adjustable node to their ML/MAP values using batch EM.
+% [bnet, LLtrace, engine] = learn_params_em(engine, data, max_iter, thresh)
+%
+% data{i,l} is the value of node i in case l, or [] if hidden.
+%   Suppose you have L training cases in an O*L array, D, where O is the num observed
+%   scalar nodes, and N is the total num nodes.
+%   Then you can create 'data' as follows, where onodes is the index of the observable nodes:
+%      data = cell(N, L);
+%      data(onodes,:) = num2cell(D);
+%   Of course it is possible for different sets of nodes to be observed in each case.
+%
+% We return the modified bnet and engine.
+% To see the learned parameters for node i, use the construct
+%   s = struct(bnet.CPD{i}); % violate object privacy
+% LLtrace is the learning curve: the vector of log-likelihood scores at each iteration.
+%
+% max_iter specifies the maximum number of iterations. Default: 10.
+%
+% thresh specifies the thresold for stopping EM. Default: 1e-3.
+% We stop when |f(t) - f(t-1)| / avg < threshold,
+% where avg = (|f(t)| + |f(t-1)|)/2 and f is log lik.  
+
+if nargin < 3, max_iter = 10; end
+if nargin < 4, thresh = 1e-3; end
+
+verbose = 1;
+
+loglik = 0;
+previous_loglik = -inf;
+converged = 0;
+num_iter = 1;
+LL = [];
+
+while ~converged & (num_iter <= max_iter)
+  [engine, loglik] = EM_step(engine, evidence);
+  if verbose, fprintf('EM iteration %d, ll = %8.4f\n', num_iter, loglik); end
+  num_iter = num_iter + 1;
+  converged = em_converged(loglik, previous_loglik, thresh);
+  previous_loglik = loglik;
+  LL = [LL loglik];
+end
+if verbose, fprintf('\n'); end
+
+bnet = bnet_from_engine(engine);
+
+%%%%%%%%%
+
+function [engine, loglik] = EM_step(engine, cases)
+
+bnet = bnet_from_engine(engine); % engine contains the old params that are used for the E step
+CPDs = bnet.CPD; % these are the new params that get maximized
+num_CPDs = length(CPDs);
+adjustable = zeros(1,num_CPDs);
+for e=1:num_CPDs
+  adjustable(e) = adjustable_CPD(CPDs{e});
+end
+adj = find(adjustable);
+n = length(bnet.dag);
+
+for e=adj(:)'
+  CPDs{e} = reset_ess(CPDs{e});
+end
+
+loglik = 0;
+ncases = size(cases, 2);
+for l=1:ncases
+  evidence = cases(:,l);
+  [engine, ll] = enter_evidence(engine, evidence);
+  loglik = loglik + ll;
+  hidden_bitv = zeros(1,n);
+  hidden_bitv(isemptycell(evidence))=1;
+  for i=1:n
+    e = bnet.equiv_class(i);
+    if adjustable(e)
+      fmarg = marginal_family(engine, i);
+      CPDs{e} = update_ess(CPDs{e}, fmarg, evidence, bnet.node_sizes, bnet.cnodes, hidden_bitv);
+    end
+  end
+end
+
+for e=adj(:)'
+  CPDs{e} = maximize_params(CPDs{e});
+end
+
+engine = update_engine(engine, CPDs);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_K2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,104 @@
+function dag = learn_struct_K2(data, ns, order, varargin)
+% LEARN_STRUCT_K2 Greedily learn the best structure compatible with a fixed node ordering
+% best_dag = learn_struct_K2(data, node_sizes, order, ...)
+%
+% data(i,m) = value of node i in case m (can be a cell array).
+% node_sizes(i) is the size of node i.
+% order(i) is the i'th node in the topological ordering.
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% max_fan_in - this the largest number of parents we allow per node [N]
+% scoring_fn - 'bayesian' or 'bic' [ 'bayesian' ]
+%              Currently, only networks with all tabular nodes support Bayesian scoring.
+% type       - type{i} is the type of CPD to use for node i, where the type is a string
+%              of the form 'tabular', 'noisy_or', 'gaussian', etc. [ all cells contain 'tabular' ]
+% params     - params{i} contains optional arguments passed to the CPD constructor for node i,
+%              or [] if none.  [ all cells contain {'prior', 1}, meaning use uniform Dirichlet priors ]
+% discrete   - the list of discrete nodes [ 1:N ]
+% clamped    - clamped(i,m) = 1 if node i is clamped in case m [ zeros(N, ncases) ]
+% verbose    - 'yes' means display output while running [ 'no' ]
+%
+% e.g., dag = learn_struct_K2(data, ns, order, 'scoring_fn', 'bic', 'params', [])
+%
+% To be backwards compatible with BNT2, you can also specify arguments as follows
+%   dag = learn_struct_K2(data, node_sizes, order, max_fan_in)    
+%
+% This algorithm is described in
+% - Cooper and Herskovits,  "A Bayesian method for the induction of probabilistic
+%      networks from data", Machine Learning Journal 9:308--347, 1992
+
+[n ncases] = size(data);
+
+% set default params
+type = cell(1,n);
+params = cell(1,n);
+for i=1:n
+  type{i} = 'tabular';
+  %params{i} = { 'prior', 1 };
+  params{i} = { 'prior_type', 'dirichlet', 'dirichlet_weight', 1 };
+end
+scoring_fn = 'bayesian';
+discrete = 1:n;
+clamped = zeros(n, ncases);
+
+max_fan_in = n;
+verbose = 0;
+
+args = varargin;
+nargs = length(args);
+if length(args) > 0 
+  if isstr(args{1})
+    for i=1:2:nargs
+      switch args{i},
+       case 'verbose',    verbose = strcmp(args{i+1}, 'yes');
+       case 'max_fan_in', max_fan_in = args{i+1}; 
+       case 'scoring_fn', scoring_fn = args{i+1};
+       case 'type',       type = args{i+1}; 
+       case 'discrete',   discrete = args{i+1}; 
+       case 'clamped',    clamped = args{i+1}; 
+       case 'params',     if isempty(args{i+1}), params = cell(1,n); else params = args{i+1};  end
+      end
+    end
+  else
+    max_fan_in = args{1};
+  end
+end
+
+dag = zeros(n,n);
+
+for i=1:n
+  ps = [];
+  j = order(i);
+  u = find(clamped(j,:)==0);    
+  score = score_family(j, ps, type{j}, scoring_fn, ns, discrete, data(:,u), params{j});
+  if verbose, fprintf('\nnode %d, empty score %6.4f\n', j, score); end
+  done = 0;
+  while ~done & (length(ps) <= max_fan_in)
+    pps = mysetdiff(order(1:i-1), ps); % potential parents
+    nps = length(pps);
+    pscore = zeros(1, nps);
+    for pi=1:nps
+      p = pps(pi);
+      pscore(pi) = score_family(j, [ps p], type{j}, scoring_fn, ns, discrete, data(:,u), params{j});
+      if verbose, fprintf('considering adding %d to %d, score %6.4f\n', p, j, pscore(pi)); end
+    end
+    [best_pscore, best_p] = max(pscore);
+    best_p = pps(best_p);
+    if best_pscore > score
+      score = best_pscore;
+      ps = [ps best_p];
+      if verbose, fprintf('* adding %d to %d, score %6.4f\n', best_p, j, best_pscore); end
+    else
+      done = 1;
+    end
+  end
+  if ~isempty(ps) % need this check for matlab 5.2
+    dag(ps, j) = 1;
+  end
+end
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_dbn_reveal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,101 @@
+function inter = learn_struct_dbn_reveal(seqs, ns, max_fan_in, penalty)
+% LEARN_STRUCT_DBN_REVEAL Learn inter-slice adjacency matrix given fully observable discrete time series
+% inter = learn_struct_dbn_reveal(seqs, node_sizes, max_fan_in, penalty)
+% 
+% seqs{l}{i,t} = value of node i in slice t of time-series l.
+%   If you have a single time series in an N*T array D, use
+%      seqs = { num2cell(D) }.
+%   If you have L time series, each of length T, in an N*T*L array D, use
+%      seqs= cell(1,L); for l=1:L, seqs{l} = num2cell(D(:,:,l)); end
+%   or, in vectorized form,
+%      seqs = squeeze(num2cell(num2cell(D),[1 2]));
+% Currently the data is assumed to be discrete (1,2,...)
+%
+% node_sizes(i) is the number of possible values for node i
+% max_fan_in is the largest number of parents we allow per node (default: N)
+% penalty is weight given to the complexity penalty (default: 0.5)
+%  A penalty of 0.5 gives the BIC score.
+%  A penalty of 0 gives the ML score.
+%  Maximizing likelihood is equivalent to maximizing mutual information between parents and child.
+%
+% inter(i,j) = 1 iff node in slice t connects to node j in slice t+1
+%
+% The parent set for each node in slice 2 is computed by evaluating all subsets of nodes in slice 1,
+% and picking the largest scoring one. This takes O(n^k) time per node, where n is the num. nodes
+% per slice, and k <= n is the max fan in.
+% Since all the nodes are observed, we do not need to use an inference engine.
+% And since we are only learning the inter-slice matrix, we do not need to check for cycles.
+%
+% This algorithm is described in
+% - "REVEAL: A general reverse engineering algorithm for inference of genetic network
+%      architectures", Liang et al. PSB 1998
+% - "Extended dependency analysis of large systems",
+%       Roger Conant, Intl. J. General Systems, 1988, vol 14, pp 97-141
+% - "Learning the structure of DBNs", Friedman, Murphy and Russell, UAI 1998.
+
+n = length(ns);
+
+if nargin < 3, max_fan_in = n; end
+if nargin < 4, penalty = 0.5; end
+
+inter = zeros(n,n);
+
+if ~iscell(seqs)
+  data{1} = seqs;
+end
+
+nseq = length(seqs);
+nslices = 0;
+data = cell(1, nseq);
+for l=1:nseq
+  nslices = nslices + size(seqs{l}, 2);
+  data{l} = cell2num(seqs{l})'; % each row is a case
+end
+ndata = nslices - nseq; % subtract off the initial slice of each sequence
+
+% We concatenate the sequences as in the following example.
+% Let there be 2 sequences of lengths 4 and 5, with n nodes per slice,
+% and let i be the target node.
+% Then we construct following matrix D 
+%
+% s{1}{1,1} ... s{1}{1,3}     s{2}{1,1} ... s{2}{1,4}
+% ....
+% s{1}{n,1} ... s{1}{n,3}     s{2}{n,1} ... s{2}{n,4}
+% s{1}{i,2} ... s{1}{i,4}     s{2}{i,2} ... s{2}{i,5}
+%
+% D(1:n, i) is the i'th input and D(n+1, i) is the i'th output.
+% 
+% We concatenate each sequence separately to avoid treating the transition
+% from the end of one sequence to the beginning of another as a "normal" transition.
+
+
+for i=1:n
+  D = [];
+  for l=1:nseq
+    T = size(seqs{l}, 2);
+    A = cell2num(seqs{l}(:, 1:T-1));
+    B = cell2num(seqs{l}(i, 2:T));
+    C = [A;B];
+    D = [D C];
+  end
+  SS = subsets(1:n, max_fan_in, 1); % skip the empty set 
+  nSS = length(SS);
+  bic_score = zeros(1, nSS);
+  ll_score = zeros(1, nSS);
+  target = n+1;
+  ns2 = [ns ns(i)];
+  for h=1:nSS
+    ps = SS{h};
+    dom = [ps target];
+    counts = compute_counts(D(dom, :), ns2(dom));
+    CPT = mk_stochastic(counts);
+    [bic_score(h), ll_score(h)] = bic_score_family(counts, CPT, ndata);
+  end
+  if penalty == 0
+    h = argmax(ll_score);
+  else
+    h = argmax(bic_score);
+  end
+  ps = SS{h};
+  inter(ps, i) = 1;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_mcmc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,284 @@
+function [sampled_graphs, accept_ratio, num_edges] = learn_struct_mcmc(data, ns, varargin)
+% MY_LEARN_STRUCT_MCMC  Monte Carlo Markov Chain search over DAGs assuming fully observed data
+% [sampled_graphs, accept_ratio, num_edges] = learn_struct_mcmc(data, ns, ...)
+% 
+% data(i,m) is the value of node i in case m.
+% ns(i) is the number of discrete values node i can take on.
+%
+% sampled_graphs{m} is the m'th sampled graph.
+% accept_ratio(t) = acceptance ratio at iteration t
+% num_edges(t) = number of edges in model at iteration t
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% scoring_fn - 'bayesian' or 'bic' [ 'bayesian' ]
+%              Currently, only networks with all tabular nodes support Bayesian scoring.
+% type       - type{i} is the type of CPD to use for node i, where the type is a string
+%              of the form 'tabular', 'noisy_or', 'gaussian', etc. [ all cells contain 'tabular' ]
+% params     - params{i} contains optional arguments passed to the CPD constructor for node i,
+%              or [] if none.  [ all cells contain {'prior', 1}, meaning use uniform Dirichlet priors ]
+% discrete   - the list of discrete nodes [ 1:N ]
+% clamped    - clamped(i,m) = 1 if node i is clamped in case m [ zeros(N, ncases) ]
+% nsamples   - number of samples to draw from the chain after burn-in [ 100*N ]
+% burnin     - number of steps to take before drawing samples [ 5*N ]
+% init_dag   - starting point for the search [ zeros(N,N) ]
+%
+% e.g., samples = my_learn_struct_mcmc(data, ns, 'nsamples', 1000);
+%
+% Modified by Sonia Leach (SML) 2/4/02, 9/5/03
+
+
+
+[n ncases] = size(data);
+
+
+% set default params
+type = cell(1,n);
+params = cell(1,n);
+for i=1:n
+ type{i} = 'tabular';
+ %params{i} = { 'prior', 1};
+ params{i} = { 'prior_type', 'dirichlet', 'dirichlet_weight', 1 };
+end
+scoring_fn = 'bayesian';
+discrete = 1:n;
+clamped = zeros(n, ncases);
+nsamples = 100*n;
+burnin = 5*n;
+dag = zeros(n);
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+ switch args{i},
+  case 'nsamples',   nsamples = args{i+1};
+  case 'burnin',     burnin = args{i+1};
+  case 'init_dag',   dag = args{i+1};
+  case 'scoring_fn', scoring_fn = args{i+1};
+  case 'type',       type = args{i+1}; 
+  case 'discrete',   discrete = args{i+1}; 
+  case 'clamped',    clamped = args{i+1}; 
+  case 'params',     if isempty(args{i+1}), params = cell(1,n); else params = args{i+1};  end
+ end
+end
+
+% We implement the fast acyclicity check described by P. Giudici and R. Castelo,
+% "Improving MCMC model search for data mining", submitted to J. Machine Learning, 2001.
+
+% SML: also keep descendant matrix C
+use_giudici = 1;
+if use_giudici
+ [nbrs, ops, nodes, A] = mk_nbrs_of_digraph(dag);
+else
+ [nbrs, ops, nodes] = mk_nbrs_of_dag(dag);
+ A = [];
+end
+
+num_accepts = 1;
+num_rejects = 1;
+T = burnin + nsamples;
+accept_ratio = zeros(1, T);
+num_edges = zeros(1, T);
+sampled_graphs = cell(1, nsamples);
+%sampled_bitv = zeros(nsamples, n^2);
+
+for t=1:T
+ [dag, nbrs, ops, nodes, A, accept] = take_step(dag, nbrs, ops, ...
+                    nodes, ns, data, clamped, A, ...
+                      scoring_fn, discrete, type, params);
+ num_edges(t) = sum(dag(:));
+ num_accepts = num_accepts + accept;
+ num_rejects = num_rejects + (1-accept);
+ accept_ratio(t) =  num_accepts/num_rejects;
+ if t > burnin
+   sampled_graphs{t-burnin} = dag;
+   %sampled_bitv(t-burnin, :) = dag(:)';
+ end
+end
+
+
+%%%%%%%%%
+
+
+function [new_dag, new_nbrs, new_ops, new_nodes, A,  accept] = ...
+   take_step(dag, nbrs, ops, nodes, ns, data, clamped, A,  ...
+     scoring_fn, discrete, type, params, prior_w)
+
+
+use_giudici = ~isempty(A);
+if use_giudici
+ [new_dag, op, i, j, new_A] =  pick_digraph_nbr(dag, nbrs, ops, nodes,A); % updates A
+ [new_nbrs, new_ops, new_nodes] =  mk_nbrs_of_digraph(new_dag, new_A);
+else
+ d = sample_discrete(normalise(ones(1, length(nbrs))));
+ new_dag = nbrs{d};
+ op = ops{d};
+ i = nodes(d, 1); j = nodes(d, 2);
+ [new_nbrs, new_ops, new_nodes] = mk_nbrs_of_dag(new_dag);
+end
+
+bf =  bayes_factor(dag, new_dag, op, i, j, ns, data, clamped, scoring_fn, discrete, type, params);
+
+%R = bf * (new_prior / prior) * (length(nbrs) / length(new_nbrs)); 
+R = bf * (length(nbrs) / length(new_nbrs)); 
+u = rand(1,1);
+if u > min(1,R) % reject the move
+ accept = 0;
+ new_dag = dag;
+ new_nbrs = nbrs;
+ new_ops = ops;
+ new_nodes = nodes;
+else
+ accept = 1;
+ if use_giudici
+A = new_A; % new_A already updated in pick_digraph_nbr
+ end
+end
+
+
+%%%%%%%%%
+
+function bfactor = bayes_factor(old_dag, new_dag, op, i, j, ns, data, clamped, scoring_fn, discrete, type, params)
+
+u = find(clamped(j,:)==0);
+LLnew = score_family(j, parents(new_dag, j), type{j}, scoring_fn, ns, discrete, data(:,u), params{j});
+LLold = score_family(j, parents(old_dag, j), type{j}, scoring_fn, ns, discrete, data(:,u), params{j});
+bf1 = exp(LLnew - LLold);
+
+if strcmp(op, 'rev')  % must also multiply in the changes to i's family
+ u = find(clamped(i,:)==0);
+ LLnew = score_family(i, parents(new_dag, i), type{i}, scoring_fn, ns, discrete, data(:,u), params{i});
+ LLold = score_family(i, parents(old_dag, i), type{i}, scoring_fn, ns, discrete, data(:,u), params{i});
+ bf2 = exp(LLnew - LLold);
+else
+ bf2 = 1;
+end
+bfactor = bf1 * bf2;
+
+
+%%%%%%%% Giudici stuff follows %%%%%%%%%%
+
+
+% SML: This now updates A as it goes from digraph it choses
+function [new_dag, op, i, j, new_A] = pick_digraph_nbr(dag, digraph_nbrs, ops, nodes, A)
+
+d = sample_discrete(normalise(ones(1, length(digraph_nbrs))));
+%d = myunidrnd(length(digraph_nbrs),1,1);
+i = nodes(d, 1); j = nodes(d, 2);
+new_dag = digraph_nbrs(:,:,d);
+op = ops{d};
+new_A = update_ancestor_matrix(A, op, i, j, new_dag); 
+
+
+%%%%%%%%%%%%%%
+
+
+function A = update_ancestor_matrix(A,  op, i, j, dag)
+
+switch op
+case 'add',
+ A = do_addition(A,  op, i, j, dag);
+case 'del', 
+ A = do_removal(A,  op, i, j, dag);
+case 'rev', 
+ A = do_removal(A,  op, i, j, dag);
+ A = do_addition(A,  op, j, i, dag);
+end
+
+ 
+%%%%%%%%%%%%
+
+function A = do_addition(A, op, i, j, dag)
+
+A(j,i) = 1; % i is an ancestor of j
+anci = find(A(i,:));
+if ~isempty(anci)
+ A(j,anci) = 1; % all of i's ancestors are added to Anc(j)
+end
+ancj = find(A(j,:));
+descj = find(A(:,j)); 
+if ~isempty(ancj)
+ for k=descj(:)'
+   A(k,ancj) = 1; % all of j's ancestors are added to each descendant of j
+ end
+end
+
+%%%%%%%%%%%
+function A = do_removal(A, op, i, j, dag)
+
+% find all the descendants of j, and put them in topological order
+
+% SML: originally Kevin had the next line commented and the %* lines
+% being used but I think this is equivalent and much less expensive
+% I assume he put it there for debugging and never changed it back...?
+descj = find(A(:,j));
+%*  R = reachability_graph(dag);
+%*  descj = find(R(j,:));
+
+order = topological_sort(dag);
+
+% SML: originally Kevin used the %* line but this was extracting the
+% wrong things to sort
+%* descj_topnum = order(descj);
+[junk, perm] = sort(order); %SML:node i is perm(i)-TH in order
+descj_topnum = perm(descj); %SML:descj(i) is descj_topnum(i)-th in order
+
+% SML: now re-sort descj by rank in descj_topnum
+[junk, perm] = sort(descj_topnum);
+descj = descj(perm);
+
+% Update j and all its descendants
+A = update_row(A, j, dag);
+for k = descj(:)'
+   A = update_row(A, k, dag);
+end
+
+%%%%%%%%%%%
+
+function A = old_do_removal(A, op, i, j, dag)
+
+% find all the descendants of j, and put them in topological order
+% SML: originally Kevin had the next line commented and the %* lines
+% being used but I think this is equivalent and much less expensive
+% I assume he put it there for debugging and never changed it back...?
+descj = find(A(:,j)); 
+%*  R = reachability_graph(dag);
+%*  descj = find(R(j,:)); 
+
+order = topological_sort(dag);
+descj_topnum = order(descj);
+[junk, perm] = sort(descj_topnum);
+descj = descj(perm);
+% Update j and all its descendants
+A = update_row(A, j, dag);
+for k = descj(:)'
+ A = update_row(A, k, dag);
+end
+
+%%%%%%%%%
+
+function A = update_row(A, j, dag)
+
+% We compute row j of A
+A(j, :) = 0;
+ps = parents(dag, j);
+if ~isempty(ps)
+ A(j, ps) = 1;
+end
+for k=ps(:)'
+ anck = find(A(k,:));
+ if ~isempty(anck)
+   A(j, anck) = 1;
+ end
+end
+ 
+%%%%%%%%
+
+function A = init_ancestor_matrix(dag)
+
+order = topological_sort(dag);
+A = zeros(length(dag));
+for j=order(:)'
+ A = update_row(A, j, dag);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_pdag_ic_star.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,155 @@
+function [pdag, G] = learn_struct_pdag_ic_star(cond_indep, n, k, varargin)
+% LEARN_STRUCT_PDAG_IC_STAR Learn a partially oriented DAG (pattern) with latent 
+% variables using the IC* algorithm
+% P = learn_struct_pdag_ic_star(cond_indep, n, k, ...)
+%
+% n is the number of nodes.
+% k is an optional upper bound on the fan-in (default: n)
+% cond_indep is a boolean function that will be called as follows:
+% feval(cond_indep, x, y, S, ...)
+% where x and y are nodes, and S is a set of nodes (positive integers),
+% and ... are any optional parameters passed to this function.
+%
+% The output P is an adjacency matrix, in which
+% P(i,j) = -1 if there is either a latent variable L such that i <-L-> j 
+% OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+%
+% The IC* algorithm learns a latent structure associated with a set of observed 
+% variables. 
+% The latent structure revealed is the projection in which every latent variable is
+% 1) a root node
+% 2) linked to exactly two observed variables.
+% Latent variables in the projection are represented using a bidirectional graph, 
+% and thus remain implicit.
+%
+% See Pearl, "Causality: Models, Reasoning, and Inference", 2000, p52 for more details.
+% Written by Tamar Kushnir, 2000
+
+sep = cell(n,n);
+ord = 0;
+done = 0;
+G = ones(n,n);
+G = setdiag(G,0);
+while ~done
+  done = 1;
+  [X,Y] = find(G); 
+  for i=1:length(X)
+    x = X(i); y = Y(i);
+    nbrs = mysetdiff(myunion(neighbors(G, x), neighbors(G,y)), [x y]);
+    if length(nbrs) >= ord & G(x,y) ~= 0
+      done = 0;
+      SS = subsets(nbrs, ord, ord); % all subsets of size ord
+      for si=1:length(SS)
+	S = SS{si};
+	if feval(cond_indep, x, y, S, varargin{:})  
+	  G(x,y) = 0;
+	  G(y,x) = 0;
+	  sep{x,y} = myunion(sep{x,y}, S);
+	  sep{y,x} = myunion(sep{y,x}, S);
+	  break; % no need to check any more subsets 
+	end
+      end
+    end
+  end
+  ord = ord + 1;
+end
+
+% Create the minimal pattern,
+% i.e., the only directed edges are V structures.
+pdag = G;
+[X, Y] = find(G);
+% We want to generate all unique triples x,y,z
+% where y is a common neighbor to x and z
+for i=1:length(X)
+  x = X(i);
+  y = Y(i);
+  Z = find(G(y,:));
+  Z = mysetdiff(Z, x);
+  for z=Z(:)'
+    if G(x,z)==0 & ~ismember(y, sep{x,z}) & ~ismember(y, sep{z,x})
+      pdag(x,y) = -1; pdag(y,x) = 0;
+      pdag(z,y) = -1; pdag(y,z) = 0;
+    end
+  end
+end
+
+% Convert the minimal pattern to a complete one using the following rules:
+% Rule 1:
+% if a and b are non-adjacent nodes with a common neighbor c,
+% if a->c and not b->c then c-*>b (marked arrow).
+% Rule 2:
+% if a and b are adjacent and there is a directed path (marked links) from a to b
+% then a->b (add arrowhead).
+%Pearl (2000)
+
+arrowin = [-1 -2 2];
+old_pdag = zeros(n);
+iter = 0;
+while ~isequal(pdag, old_pdag)
+  iter = iter + 1;
+  old_pdag = pdag;
+  % rule 1
+  [X, Y] = find(pdag);
+  for i=1:length(X)
+    x = X(i);
+    y = Y(i);
+    Z = find(pdag(y,:));
+    Z = mysetdiff(Z, x);
+    for z=Z(:)'
+      if G(x,z)==0 & ismember(pdag(x,y),arrowin) & ~ismember(pdag(z,y),arrowin)
+        pdag(y,z) = -2; pdag(z,y) = 0;
+      end
+    end
+  end
+  % rule 2
+  [X, Y] = find(G); 
+  %check all adjacent nodes because if pdag(x,y) = -1 
+  %and pdag(y,x) = 0 there could still be an bidirected edge between x & y.
+  for i=1:length(X)
+    x = X(i);
+    y = Y(i);
+    if ~ismember(pdag(x,y), arrowin) %x->y doesn't exist yet
+      %find marked path from x to y
+      add_arrow = marked_path(x,y,pdag);
+      if add_arrow 
+        if pdag(y,x)==-1 %bidirected edge
+          pdag(x,y) = 2; pdag(y,x) = 2;
+        else
+          pdag(x,y) = -1;pdag(y,x) = 0;
+        end
+      end
+    end
+  end
+end
+
+
+%%%%%%%%%%%%%
+
+function t = marked_path(x,y,L)
+% MARKED_PATH is a boolean function which returns 1 if a marked path 
+% between nodes x and y exists in the partially directed latent structure L.
+%
+% t = marked_path(x,y,L)
+%
+% x and y are the starting and ending nodes in the path, respectively.
+% L is a latent structure (partially directed graph with possible latent variables).
+%
+% Rule 2 of IC* algorithm (see Pearl, 2000)
+
+t=0;
+
+%find set of marked links from x
+marked = find(L(x,:)==-2);
+if ismember(y,marked)
+  t=1; %marked path found
+else
+  for m=marked(:)'
+    t = marked_path(m,y,L);
+    if t==1
+      break; %stop when marked path found
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_pdag_pc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,129 @@
+function [pdag, G] = learn_struct_pdag_pc(cond_indep, n, k, varargin)
+% LEARN_STRUCT_PDAG_PC Learn a partially oriented DAG (pattern) using the PC algorithm
+% P = learn_struct_pdag_pc(cond_indep, n, k, ...)
+%
+% n is the number of nodes.
+% k is an optional upper bound on the fan-in (default: n)
+% cond_indep is a boolean function that will be called as follows:
+%   feval(cond_indep, x, y, S, ...)
+% where x and y are nodes, and S is a set of nodes (positive integers),
+% and ... are any optional parameters passed to this function.
+%
+% The output P is an adjacency matrix, in which
+% P(i,j) = -1 if there is an i->j edge.
+% P(i,j) = P(j,i) = 1 if there is an undirected edge i <-> j
+%
+% The PC algorithm does structure learning assuming all variables are observed.
+% See Spirtes, Glymour and Scheines, "Causation, Prediction and Search", 1993, p117.
+% This algorithm may take O(n^k) time if there are n variables and k is the max fan-in,
+% but this is quicker than the Verma-Pearl IC algorithm, which is always O(n^n).
+
+  
+sep = cell(n,n);
+ord = 0;
+done = 0;
+G = ones(n,n);
+G=setdiag(G,0);
+while ~done
+  done = 1;
+  [X,Y] = find(G); 
+  for i=1:length(X)
+    x = X(i); y = Y(i);
+    %nbrs = mysetdiff(myunion(neighbors(G, x), neighbors(G,y)), [x y]);
+    nbrs = mysetdiff(neighbors(G, y), x);  % bug fix by Raanan Yehezkel <raanany@ee.bgu.ac.il> 6/27/04
+    if length(nbrs) >= ord & G(x,y) ~= 0
+      done = 0;
+      %SS = subsets(nbrs, ord, ord); % all subsets of size ord
+      SS = subsets1(nbrs, ord);
+      for si=1:length(SS)
+	S = SS{si};
+	if feval(cond_indep, x, y, S, varargin{:})
+	  %if isempty(S)
+ 	  %  fprintf('%d indep of %d ', x, y);
+	  %else
+ 	  %  fprintf('%d indep of %d given ', x, y); fprintf('%d ', S);
+ 	  %end
+ 	  %fprintf('\n');
+	  
+	  % diagnostic
+	  %[CI, r] = cond_indep_fisher_z(x, y, S, varargin{:});
+	  %fprintf(': r = %6.4f\n', r);
+	  
+	  G(x,y) = 0;
+	  G(y,x) = 0;
+	  sep{x,y} = myunion(sep{x,y}, S);
+	  sep{y,x} = myunion(sep{y,x}, S);
+	  break; % no need to check any more subsets 
+	end
+      end
+    end 
+  end
+  ord = ord + 1;
+end
+
+
+% Create the minimal pattern,
+% i.e., the only directed edges are V structures.
+pdag = G;
+[X, Y] = find(G);
+% We want to generate all unique triples x,y,z
+% This code generates x,y,z and z,y,x.
+for i=1:length(X)
+  x = X(i);
+  y = Y(i);
+  Z = find(G(y,:));
+  Z = mysetdiff(Z, x);
+  for z=Z(:)'
+    if G(x,z)==0 & ~ismember(y, sep{x,z}) & ~ismember(y, sep{z,x})
+      %fprintf('%d -> %d <- %d\n', x, y, z);
+      pdag(x,y) = -1; pdag(y,x) = 0;
+      pdag(z,y) = -1; pdag(y,z) = 0;
+    end
+  end
+end
+
+% Convert the minimal pattern to a complete one,
+% i.e., every directed edge in P is compelled
+% (must be directed in all Markov equivalent models),
+% and every undirected edge in P is reversible.
+% We use the rules of Pearl (2000) p51 (derived in Meek (1995))
+
+old_pdag = zeros(n);
+iter = 0;
+while ~isequal(pdag, old_pdag)
+  iter = iter + 1;
+  old_pdag = pdag;
+  % rule 1
+  [A,B] = find(pdag==-1); % a -> b
+  for i=1:length(A)
+    a = A(i); b = B(i);
+    C = find(pdag(b,:)==1 & G(a,:)==0); % all nodes adj to b but not a
+    if ~isempty(C)
+      pdag(b,C) = -1; pdag(C,b) = 0;
+      %fprintf('rule 1: a=%d->b=%d and b=%d-c=%d implies %d->%d\n', a, b, b, C, b, C);
+    end
+  end
+  % rule 2
+  [A,B] = find(pdag==1); % unoriented a-b edge
+  for i=1:length(A)
+    a = A(i); b = B(i);
+    if any( (pdag(a,:)==-1) & (pdag(:,b)==-1)' );
+      pdag(a,b) = -1; pdag(b,a) = 0;
+      %fprintf('rule 2: %d -> %d\n', a, b);
+    end
+  end
+  % rule 3
+  [A,B] = find(pdag==1); % a-b
+  for i=1:length(A)
+    a = A(i); b = B(i);
+    C = find( (pdag(a,:)==1) & (pdag(:,b)==-1)' );
+    % C contains nodes c s.t. a-c->ba
+    G2 = setdiag(G(C, C), 1);
+    if any(G2(:)==0) % there are 2 different non adjacent elements of C
+      pdag(a,b) = -1; pdag(b,a) = 0;
+      %fprintf('rule 3: %d -> %d\n', a, b);
+    end
+  end
+end
+
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/learn_struct_pdag_pc_constrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,177 @@
+function [pdag, G] = dn_learn_struct_pdag_pc_constrain(adj, cond_indep, n, k, varargin)
+% LEARN_STRUCT_PDAG_PC Learn a partially oriented DAG (pattern) using the PC algorithm
+% Pdag = learn_struct_pdag_pc_constrain(adj, cond_indep, n, k, ...)
+%
+% adj = adjacency matrix learned from dependency network P(i,j) = 1 => i--j; 0 => i  j
+% n is the number of nodes.
+% k is an optional upper bound on the fan-in (default: n)
+% cond_indep is a boolean function that will be called as follows:
+%   feval(cond_indep, x, y, S, ...)
+% where x and y are nodes, and S is a set of nodes (positive integers),
+% and ... are any optional parameters passed to this function.
+%
+%Output
+% pdag  Partially directed graph
+% G     Resulting adjacency graph prior to setting direction arrows
+%
+% The output P is an adjacency matrix, in which
+% P(i,j) = -1 if there is an i->j edge.
+% P(i,j) = P(j,i) = 1 if there is an undirected edge i <-> j
+%
+% The PC algorithm does structure learning assuming all variables are observed.
+% See Spirtes, Glymour and Scheines, "Causation, Prediction and Search", 1993, p117.
+% This algorithm may take O(n^k) time if there are n variables and k is the max fan-in,
+% but this is quicker than the Verma-Pearl IC algorithm, which is always O(n^n).
+% 
+%%  Example
+%%  Given data in a comma separated, filename starting with the variable labels, then the data in rows.
+%%    filename test.txt consists of:
+%%
+%%      Earthquake,Burglar,Radio,Alarm,Call
+%%      1,2,2,2,1
+%%      1,1,2,1,2
+%%      . . .
+%[CovMatrix, obs, varfields] = CovMat('test.txt',5);
+%
+%dn = zeros(5,5); 
+%dn(1,2) = 1;   % This was the known Markov blanket of the system that generated test.txt
+%dn(2,1) = 1;
+%dn(2,4) = 1;
+%dn(4,2) = 1;
+%dn(1,3) = 1;
+%dn(3,1) = 1;
+%dn(1,4) = 1;
+%dn(4,1) = 1;
+%dn(4,5) = 1;
+%dn(5,4) = 1;
+%dn(3,5) = 1; %loop r->c
+%dn(5,3) = 1; %loop c-r
+%dn(3,4) = 1;
+%dn(4,3) = 1;
+%
+%max_fan_in = 4;
+%alpha = 0.05;
+%
+%[pdag G] = learn_struct_pdag_pc_constrain(dn,'cond_indep_fisher_z', 5, max_fan_in, CovMatrix, obs, alpha);
+%%
+%%
+%% Gary Bradski, 7/2002 Modified this to take an adjacency matrix from a dependency network.
+
+  
+sep = cell(n,n);
+ord = 0;
+done = 0;
+G = ones(n,n);
+G=setdiag(G,0);
+
+while ~done
+    done = 1;
+    [X,Y] = find(G);
+    for i=1:length(X)
+        x = X(i); y = Y(i);
+%        nbrs = mysetdiff(myunion(neighbors(G, x), neighbors(G,y)), [x y]);%parents, children, but not self
+        nbrs = mysetdiff(myunion(neighbors(adj, x), neighbors(adj,y)), [x y]);%parents, children, but not self
+
+        if length(nbrs) >= ord & G(x,y) ~= 0
+            done = 0;
+            SS = subsets(nbrs, ord, ord); % all subsets of size ord
+            for si=1:length(SS)
+                S = SS{si};
+                 %if (feval(dsep,x,y,S,adj)) | (feval(cond_indep, x, y, S, varargin{:}))
+                 if feval(cond_indep, x, y, S, varargin{:})
+                     %if isempty(S)
+                    %  fprintf('%d indep of %d ', x, y);
+                    %else
+                    %  fprintf('%d indep of %d given ', x, y); fprintf('%d ', S);
+                    %end
+                    %fprintf('\n');
+                    
+                    % diagnostic
+                    %[CI, r] = cond_indep_fisher_z(x, y, S, varargin{:});
+                    %fprintf(': r = %6.4f\n', r);
+                    
+                    G(x,y) = 0;
+                    G(y,x) = 0;
+                    adj(x,y) = 0;  %make sure found cond. independencies are marked out
+                    adj(y,x) = 0;
+                    sep{x,y} = myunion(sep{x,y}, S);
+                    sep{y,x} = myunion(sep{y,x}, S);
+                    break; % no need to check any more subsets 
+                end
+            end
+        end 
+    end
+    ord = ord + 1;
+end
+
+
+
+
+% Create the minimal pattern,
+% i.e., the only directed edges are V structures.
+
+pdag = G;
+[X, Y] = find(G);
+% We want to generate all unique triples x,y,z
+% This code generates x,y,z and z,y,x.
+for i=1:length(X)
+  x = X(i);
+  y = Y(i);
+  Z = find(G(y,:));
+  Z = mysetdiff(Z, x);
+  for z=Z(:)'
+    if G(x,z)==0 & ~ismember(y, sep{x,z}) & ~ismember(y, sep{z,x})
+      %fprintf('%d -> %d <- %d\n', x, y, z);
+      pdag(x,y) = -1; pdag(y,x) = 0;
+      pdag(z,y) = -1; pdag(y,z) = 0;
+    end
+  end
+end
+
+% Convert the minimal pattern to a complete one,
+% i.e., every directed edge in P is compelled
+% (must be directed in all Markov equivalent models),
+% and every undirected edge in P is reversible.
+% We use the rules of Pearl (2000) p51 (derived in Meek (1995))
+
+old_pdag = zeros(n);
+iter = 0;
+while ~isequal(pdag, old_pdag)
+  iter = iter + 1;
+  old_pdag = pdag;
+  % rule 1
+  [A,B] = find(pdag==-1); % a -> b
+  for i=1:length(A)
+    a = A(i); b = B(i);
+    C = find(pdag(b,:)==1 & G(a,:)==0); % all nodes adj to b but not a
+    if ~isempty(C)
+      pdag(b,C) = -1; pdag(C,b) = 0;
+      %fprintf('rule 1: a=%d->b=%d and b=%d-c=%d implies %d->%d\n', a, b, b, C, b, C);
+    end
+  end
+  % rule 2
+  [A,B] = find(pdag==1); % unoriented a-b edge
+  for i=1:length(A)
+    a = A(i); b = B(i);
+    if any( (pdag(a,:)==-1) & (pdag(:,b)==-1)' );
+      pdag(a,b) = -1; pdag(b,a) = 0;
+      %fprintf('rule 2: %d -> %d\n', a, b);
+    end
+  end
+  % rule 3
+  [A,B] = find(pdag==1); % a-b
+  for i=1:length(A)
+    a = A(i); b = B(i);
+    C = find( (G(a,:)==1) & (pdag(:,b)==-1)' );
+    % C contains nodes c s.t. a-c->ba
+    G2 = setdiag(G(C, C), 1);
+    if any(G2(:)==0) % there are 2 different non adjacent elements of C
+      pdag(a,b) = -1; pdag(b,a) = 0;
+      %fprintf('rule 3: %d -> %d\n', a, b);
+    end
+  end
+end
+
+
+  
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/mcmc_sample_to_hist.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function mcmc_post = mcmc_sample_to_hist(sampled_graphs, dags)
+% MCMC_SAMPLE_TO_HIST Convert a set of sampled dags into a histogram over dags
+% hist = mcmc_sample_to_hist(sampled_graphs, dags)
+%
+% sampled_graphs{m} is the m'th sampled dag
+% dags{i} is the i'th dag in the hypothesis space
+% hist(i) = Pr(model i | data)
+
+ndags = length(dags);
+nsamples = length(sampled_graphs);
+nnodes = length(dags{1});
+% sampled_bitv(m, :) is the m'th sampled graph represented as a vector of n^2 bits, computed
+% by stacking the columns of the adjacency matrix vertically.
+sampled_bitvs = zeros(nsamples, nnodes*nnodes);
+for m=1:nsamples
+  sampled_bitvs(m, :) = sampled_graphs{m}(:)';
+end
+  
+[ugraphs, I, J] = unique(sampled_bitvs, 'rows');  % each row of ugraphs is a unique bit vector
+sampled_indices  = subv2ind(2*ones(1,nnodes*nnodes), ugraphs+1);
+counts = hist(J, 1:size(ugraphs,1)); % counts(i) = number of times graphs(i,:) occurs in the sample
+
+mcmc_post = zeros(1, ndags);
+for i=1:ndags
+  bitv = dags{i}(:)';
+  % Find the samples that corresponds to this graph by converting the graphs to bitvectors and
+  % then to integers.
+  ndx = subv2ind(2*ones(1,nnodes*nnodes), bitv+1);
+  locn = find(ndx == sampled_indices);
+  if ~isempty(locn)
+    mcmc_post(i) = counts(locn);
+  end
+end
+mcmc_post = normalise(mcmc_post);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/mk_schedule.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function schedule = mk_schedule(init_temp, final_temp, anneal_rate)
+
+init_temp = 10; final_temp = 1e-2; anneal_rate = 0.8;
+schedule = [];
+temp=init_temp;
+schedule = [schedule temp];
+while temp > final_temp
+  temp = temp * anneal_rate;
+  schedule = [schedule temp];
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/mk_tetrad_data_file.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function mk_tetrad_data_file(filename, samples, sig)
+% MK_TETRAD_DATA_FILE Make a file containing raw discrete data for input to TETRAD
+% mk_tetrad_data_file(filename, samples, sig)
+%
+% samples(i,j) is the value for case i, variable j
+% The resulting file can be used for the 'build' part of Tetrad.
+% For details on tetrad, see hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html
+
+[nsamples N] = size(samples);
+
+fid = fopen(filename, 'w');
+fprintf(fid, '/Raw\n');
+fprintf(fid, '%d\n', nsamples);
+for i=1:N
+  fprintf(fid, 'x%d ', i);
+end
+fprintf(fid, '\n');
+for i=1:nsamples
+  fprintf(fid, '%d ', samples(i,:)-1); % tetrad counts from 0
+  fprintf(fid, '\n');
+end
+%fprintf(fid, '/Knowledge\n');
+%fprintf(fid, 'Significance %4.2f\n', sig);
+fclose(fid);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/score_dags.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+function score = score_dags(data, ns, dags, varargin)
+% SCORE_DAGS Compute the score of one or more DAGs
+% score = score_dags(data, ns, dags, varargin)
+%
+% data{i,m} = value of node i in case m (can be a cell array).
+% node_sizes(i) is the number of size of node i.
+% dags{g} is the g'th dag
+% score(g) is the score of the i'th dag
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% scoring_fn - 'bayesian' or 'bic' [ 'bayesian' ]
+%              Currently, only networks with all tabular nodes support Bayesian scoring.
+% type       - type{i} is the type of CPD to use for node i, where the type is a string
+%              of the form 'tabular', 'noisy_or', 'gaussian', etc. [ all cells contain 'tabular' ]
+% params     - params{i} contains optional arguments passed to the CPD constructor for node i,
+%              or [] if none.  [ all cells contain {'prior', 1}, meaning use uniform Dirichlet priors ]
+% discrete   - the list of discrete nodes [ 1:N ]
+% clamped    - clamped(i,m) = 1 if node i is clamped in case m [ zeros(N, ncases) ]
+%
+% e.g., score = score_dags(data, ns, mk_all_dags(n), 'scoring_fn', 'bic', 'params', []);
+%
+% If the DAGs have a lot of families in common, we can cache the sufficient statistics,
+% making this potentially more efficient than scoring the DAGs one at a time.
+% (Caching is not currently implemented, however.)
+
+[n ncases] = size(data);
+
+% set default params
+type = cell(1,n);
+params = cell(1,n);
+for i=1:n
+  type{i} = 'tabular';
+  params{i} = { 'prior_type', 'dirichlet', 'dirichlet_weight', 1 };
+end
+scoring_fn = 'bayesian';
+discrete = 1:n;
+
+u = [1:ncases]'; % DWH
+isclamped = 0; %DWH
+clamped = zeros(n, ncases);
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'scoring_fn', scoring_fn = args{i+1};
+   case 'type',       type = args{i+1}; 
+   case 'discrete',   discrete = args{i+1}; 
+   case 'clamped',    clamped = args{i+1}, isclamped = 1; %DWH
+   case 'params',     if isempty(args{i+1}), params = cell(1,n); else params = args{i+1};  end
+  end
+end
+
+NG = length(dags);
+score = zeros(1, NG);
+for g=1:NG
+  dag = dags{g};
+  for j=1:n
+    if isclamped %DWH
+        u = find(clamped(j,:)==0);    
+    end
+    ps = parents(dag, j);
+    score(g) = score(g) + score_family(j, ps, type{j}, scoring_fn, ns, discrete, data(:,u), params{j});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/score_dags_old.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+function score = score_dags(data, ns, dags, varargin)
+% SCORE_DAGS Compute the score of one or more DAGs
+% score = score_dags(data, ns, dags, varargin)
+%
+% data{i,m} = value of node i in case m (can be a cell array).
+% node_sizes(i) is the number of size of node i.
+% dags{g} is the g'th dag
+% score(g) is the score of the i'th dag
+%
+% The following optional arguments can be specified in the form of name/value pairs:
+% [default value in brackets]
+%
+% scoring_fn - 'bayesian' or 'bic' [ 'bayesian' ]
+%              Currently, only networks with all tabular nodes support Bayesian scoring.
+% type       - type{i} is the type of CPD to use for node i, where the type is a string
+%              of the form 'tabular', 'noisy_or', 'gaussian', etc. [ all cells contain 'tabular' ]
+% params     - params{i} contains optional arguments passed to the CPD constructor for node i,
+%              or [] if none.  [ all cells contain {'prior', 1}, meaning use uniform Dirichlet priors ]
+% discrete   - the list of discrete nodes [ 1:N ]
+% clamped    - clamped(i,m) = 1 if node i is clamped in case m [ zeros(N, ncases) ]
+%
+% e.g., score = score_dags(data, ns, mk_all_dags(n), 'scoring_fn', 'bic', 'params', []);
+%
+% If the DAGs have a lot of families in common, we can cache the sufficient statistics,
+% making this potentially more efficient than scoring the DAGs one at a time.
+% (Caching is not currently implemented, however.)
+
+[n ncases] = size(data);
+
+% set default params
+type = cell(1,n);
+params = cell(1,n);
+for i=1:n
+  type{i} = 'tabular';
+  params{i} = { 'prior_type', 'dirichlet', 'dirichlet_weight', 1 };
+end
+scoring_fn = 'bayesian';
+discrete = 1:n;
+clamped = zeros(n, ncases);
+
+args = varargin;
+nargs = length(args);
+for i=1:2:nargs
+  switch args{i},
+   case 'scoring_fn', scoring_fn = args{i+1};
+   case 'type',       type = args{i+1}; 
+   case 'discrete',   discrete = args{i+1}; 
+   case 'clamped',    clamped = args{i+1}; 
+   case 'params',     if isempty(args{i+1}), params = cell(1,n); else params = args{i+1};  end
+  end
+end
+
+NG = length(dags);
+score = zeros(1, NG);
+for g=1:NG
+  dag = dags{g};
+  for j=1:n
+    u = find(clamped(j,:)==0);    
+    ps = parents(dag, j);
+    score(g) = score(g) + score_family(j, ps, type{j}, scoring_fn, ns, discrete, data(:,u), params{j});
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/learning/score_family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function score = score_family(j, ps, node_type, scoring_fn, ns, discrete, data, args)
+% SCORE_FAMILY_COMPLETE Compute the score of a node and its parents given completely observed data
+% score = score_family(j, ps, node_type, scoring_fn, ns, discrete, data, args)
+%
+% data(i,m) is the value of node i in case m (can be a cell array)
+% args is a cell array containing optional arguments passed to the constructor,
+% or is [] if none
+%
+% We create a whole Bayes net which only connects parents to node,
+% where node has a CPD of the specified type (with default parameters).
+% We then evaluate its score ('bic' or 'bayesian')
+
+% We should use a cache to avoid unnecessary computation.
+% In particular, log_marginal_prob_node for tabular CPDs calls gammaln
+% and compute_counts, both of which are slow.
+
+[n ncases] = size(data);
+dag = zeros(n,n);
+% SML added to sort ps b/c mk_bnet, learn_params use sorted ps to make
+% CPTs
+% Kevin had: if ~isempty(ps), dag(ps, j) = 1; end
+if ~isempty(ps), dag(ps, j) = 1;, ps = sort(ps);, end
+
+bnet = mk_bnet(dag, ns, 'discrete', discrete);
+%bnet.CPD{j} = xxx_CPD(bnet, j);
+%eval(sprintf('bnet.CPD{j} = %s_CPD(bnet, j);', node_type));
+fname = sprintf('%s_CPD', node_type);
+%fprintf('score CPD %d\n', j);
+if isempty(args)
+  bnet.CPD{j} = feval(fname, bnet, j);
+else
+  bnet.CPD{j} = feval(fname, bnet, j, args{:});
+end
+switch scoring_fn
+ case 'bic',
+  fam = [ps j];
+  %score = BIC_score_CPD(bnet.CPD{j}, fam, data, ns, bnet.cnodes);
+  %bnet.CPD{j} = learn_params(bnet.CPD{j}, fam, data, ns, bnet.cnodes);
+  
+  % SML 03/16/04 had to special case gaussian b/c generic_CPD/learn_params
+  % no longer supported because of simple interface to learn_params
+  % introduced by KPM for tabular nodes below:
+  % KPM 9 June 04 - tabular nodes have changed back!
+  if 1 % (isempty(find(j==discrete)))
+     bnet.CPD{j} = learn_params(bnet.CPD{j},  fam, data, ns, bnet.cnodes);
+  else 
+  	bnet.CPD{j} = learn_params(bnet.CPD{j}, data(fam, :));
+  end
+  L = log_prob_node(bnet.CPD{j}, data(j,:), data(ps,:));
+  S = struct(bnet.CPD{j}); % violate object privacy
+  score = L - 0.5*S.nparams*log(ncases);
+ case 'bayesian', 
+  %score = bayesian_score_CPD(bnet.CPD{j}, data(fam, :));
+  score = log_marg_prob_node(bnet.CPD{j}, data(j,:), data(ps,:));
+ otherwise,
+  error(['unrecognized scoring fn ' scoring_fn]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/license.gpl.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,450 @@
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License version 2 as published by the Free Software Foundation.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+
+GNU Library General Public License
+
+----------------------------------------------------------------------------
+
+Table of Contents
+
+   * GNU LIBRARY GENERAL PUBLIC LICENSE
+        o Preamble
+        o TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+----------------------------------------------------------------------------
+
+GNU LIBRARY GENERAL PUBLIC LICENSE
+
+Version 2, June 1991
+
+Copyright (C) 1991 Free Software Foundation, Inc.
+675 Mass Ave, Cambridge, MA 02139, USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to
+share and change it. By contrast, the GNU General Public Licenses are
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users.
+
+This license, the Library General Public License, applies to some specially
+designated Free Software Foundation software, and to any other libraries
+whose authors decide to use it. You can use it for your libraries, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you
+wish), that you receive source code or can get it if you want it, that you
+can change the software or use pieces of it in new free programs; and that
+you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These
+restrictions translate to certain responsibilities for you if you distribute
+copies of the library, or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for
+a fee, you must give the recipients all the rights that we gave you. You
+must make sure that they, too, receive or can get the source code. If you
+link a program with the library, you must provide complete object files to
+the recipients so that they can relink them with the library, after making
+changes to the library and recompiling it. And you must show them these
+terms so they know their rights.
+
+Our method of protecting your rights has two steps: (1) copyright the
+library, and (2) offer you this license which gives you legal permission to
+copy, distribute and/or modify the library.
+
+Also, for each distributor's protection, we want to make certain that
+everyone understands that there is no warranty for this free library. If the
+library is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original version, so that any problems
+introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that companies distributing free software will
+individually obtain patent licenses, thus in effect transforming the program
+into proprietary software. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary one;
+be sure to read it in full, and don't assume that anything in it is the same
+as in the ordinary license.
+
+The reason we have a separate public license for some libraries is that they
+blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in a
+textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+Because of this blurred distinction, using the ordinary General Public
+License for libraries did not effectively promote software sharing, because
+most developers did not use the libraries. We concluded that weaker
+conditions might promote sharing better.
+
+However, unrestricted linking of non-free programs would deprive the users
+of those programs of all benefit from the free status of the libraries
+themselves. This Library General Public License is intended to permit
+developers of non-free programs to use free libraries, while preserving your
+freedom as a user of such programs to change the free libraries that are
+incorporated in them. (We have not seen how to achieve this as regards
+changes in header files, but we have achieved it as regards changes in the
+actual functions of the Library.) The hope is that this will lead to faster
+development of free libraries.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code
+derived from the library, while the latter only works together with the
+library.
+
+Note that it is possible for a library to be covered by the ordinary General
+Public License rather than by this special one.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library which contains a
+notice placed by the copyright holder or other authorized party saying it
+may be distributed under the terms of this Library General Public License
+(also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared so
+as to be conveniently linked with application programs (which use some of
+those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means
+either the Library or any derivative work under copyright law: that is to
+say, a work containing the Library or a portion of it, either verbatim or
+with modifications and/or translated straightforwardly into another
+language. (Hereinafter, translation is included without limitation in the
+term "modification".)
+
+"Source code" for a work means the preferred form of the work for making
+modifications to it. For a library, complete source code means all the
+source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and
+installation of the library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is
+covered only if its contents constitute a work based on the Library
+(independent of the use of the Library in a tool for writing it). Whether
+that is true depends on what the Library does and what the program that uses
+the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the notices
+that refer to this License and to the absence of any warranty; and
+distribute a copy of this License along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it,
+thus forming a work based on the Library, and copy and distribute such
+modifications or work under the terms of Section 1 above, provided that you
+also meet all of these conditions:
+
+        o a) The modified work must itself be a software library.
+
+        o b) You must cause the files modified to carry prominent notices
+          stating that you changed the files and the date of any change.
+
+        o c) You must cause the whole of the work to be licensed at no
+          charge to all third parties under the terms of this License.
+
+        o d) If a facility in the modified Library refers to a function or a
+          table of data to be supplied by an application program that uses
+          the facility, other than as an argument passed when the facility
+          is invoked, then you must make a good faith effort to ensure that,
+          in the event an application does not supply such function or
+          table, the facility still operates, and performs whatever part of
+          its purpose remains meaningful.
+
+          (For example, a function in a library to compute square roots has
+          a purpose that is entirely well-defined independent of the
+          application. Therefore, Subsection 2d requires that any
+          application-supplied function or table used by this function must
+          be optional: if the application does not supply it, the square
+          root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, and can be
+reasonably considered independent and separate works in themselves, then
+this License, and its terms, do not apply to those sections when you
+distribute them as separate works. But when you distribute the same sections
+as part of a whole which is a work based on the Library, the distribution of
+the whole must be on the terms of this License, whose permissions for other
+licensees extend to the entire whole, and thus to each and every part
+regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise
+the right to control the distribution of derivative or collective works
+based on the Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License
+instead of this License to a given copy of the Library. To do this, you must
+alter all the notices that refer to this License, so that they refer to the
+ordinary GNU General Public License, version 2, instead of to this License.
+(If a newer version than version 2 of the ordinary GNU General Public
+License has appeared, then you can specify that version instead if you
+wish.) Do not make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy,
+so the ordinary GNU General Public License applies to all subsequent copies
+and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of
+it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you accompany it with the complete
+corresponding machine-readable source code, which must be distributed under
+the terms of Sections 1 and 2 above on a medium customarily used for
+software interchange.
+
+If distribution of object code is made by offering access to copy from a
+designated place, then offering equivalent access to copy the source code
+from the same place satisfies the requirement to distribute the source code,
+even though third parties are not compelled to copy the source along with
+the object code.
+
+5. A program that contains no derivative of any portion of the Library, but
+is designed to work with the Library by being compiled or linked with it, is
+called a "work that uses the Library". Such a work, in isolation, is not a
+derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for
+distribution of such executables.
+
+When a "work that uses the Library" uses material from a header file that is
+part of the Library, the object code for the work may be a derivative work
+of the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not
+precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure
+layouts and accessors, and small macros and small inline functions (ten
+lines or less in length), then the use of the object file is unrestricted,
+regardless of whether it is legally a derivative work. (Executables
+containing this object code plus portions of the Library will still fall
+under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute
+the object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are
+linked directly with the Library itself.
+
+6. As an exception to the Sections above, you may also compile or link a
+"work that uses the Library" with the Library to produce a work containing
+portions of the Library, and distribute that work under terms of your
+choice, provided that the terms permit modification of the work for the
+customer's own use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library
+is used in it and that the Library and its use are covered by this License.
+You must supply a copy of this License. If the work during execution
+displays copyright notices, you must include the copyright notice for the
+Library among them, as well as a reference directing the user to the copy of
+this License. Also, you must do one of these things:
+
+        o a) Accompany the work with the complete corresponding
+          machine-readable source code for the Library including whatever
+          changes were used in the work (which must be distributed under
+          Sections 1 and 2 above); and, if the work is an executable linked
+          with the Library, with the complete machine-readable "work that
+          uses the Library", as object code and/or source code, so that the
+          user can modify the Library and then relink to produce a modified
+          executable containing the modified Library. (It is understood that
+          the user who changes the contents of definitions files in the
+          Library will not necessarily be able to recompile the application
+          to use the modified definitions.)
+
+        o b) Accompany the work with a written offer, valid for at least
+          three years, to give the same user the materials specified in
+          Subsection 6a, above, for a charge no more than the cost of
+          performing this distribution.
+
+        o c) If distribution of the work is made by offering access to copy
+          from a designated place, offer equivalent access to copy the above
+          specified materials from the same place.
+
+        o d) Verify that the user has already received a copy of these
+          materials or that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library"
+must include any data and utility programs needed for reproducing the
+executable from it. However, as a special exception, the source code
+distributed need not include anything that is normally distributed (in
+either source or binary form) with the major components (compiler, kernel,
+and so on) of the operating system on which the executable runs, unless that
+component itself accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating
+system. Such a contradiction means you cannot use both them and the Library
+together in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library
+side-by-side in a single library together with other library facilities not
+covered by this License, and distribute such a combined library, provided
+that the separate distribution of the work based on the Library and of the
+other library facilities is otherwise permitted, and provided that you do
+these two things:
+
+        o a) Accompany the combined library with a copy of the same work
+          based on the Library, uncombined with any other library
+          facilities. This must be distributed under the terms of the
+          Sections above.
+
+        o b) Give prominent notice with the combined library of the fact
+          that part of it is a work based on the Library, and explaining
+          where to find the accompanying uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the
+Library except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, link with, or distribute the Library
+is void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed
+it. However, nothing else grants you permission to modify or distribute the
+Library or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the
+Library (or any work based on the Library), you indicate your acceptance of
+this License to do so, and all its terms and conditions for copying,
+distributing or modifying the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the original
+licensor to copy, distribute, link with or modify the Library subject to
+these terms and conditions. You may not impose any further restrictions on
+the recipients' exercise of the rights granted herein. You are not
+responsible for enforcing compliance by third parties to this License.
+
+11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot distribute so
+as to satisfy simultaneously your obligations under this License and any
+other pertinent obligations, then as a consequence you may not distribute
+the Library at all. For example, if a patent license would not permit
+royalty-free redistribution of the Library by all those who receive copies
+directly or indirectly through you, then the only way you could satisfy both
+it and this License would be to refrain entirely from distribution of the
+Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents
+or other property right claims or to contest validity of any such claims;
+this section has the sole purpose of protecting the integrity of the free
+software distribution system which is implemented by public license
+practices. Many people have made generous contributions to the wide range of
+software distributed through that system in reliance on consistent
+application of that system; it is up to the author/donor to decide if he or
+she is willing to distribute software through any other system and a
+licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Library under this License may add an
+explicit geographical distribution limitation excluding those countries, so
+that distribution is permitted only in or among countries not thus excluded.
+In such case, this License incorporates the limitation as if written in the
+body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of
+the Library General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Library does not specify a license version
+number, you may choose any version ever published by the Free Software
+Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs
+whose distribution conditions are incompatible with these, write to the
+author to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals of
+preserving the free status of all derivatives of our free software and of
+promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO
+THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY
+PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO
+LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
+THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER
+SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License version 2 as published by the Free Software Foundation.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+/cg_can_to_mom.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/cg_mom_to_can.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/cgpot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/display.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/divide_by_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/domain_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/enter_cts_evidence_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/enter_discrete_evidence_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/marginalize_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/multiply_by_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/multiply_pots.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/normalize_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/pot_to_marginal.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/set_domain_pot.m/1.1.1.1/Wed Jul 30 13:38:24 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials/@cgpot
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+/normalize_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/set_domain_pot.m/1.1.1.1/Wed Jul 30 13:38:08 2003//
+/simple_marginalize_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials/@cgpot/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/normalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function [pot, loglik] = normalize_pot(pot)
+% NORMALIZE_POT Convert the CG potential Pr(X,E) into Pr(X|E) and return log Pr(E).
+% [pot, loglik] = normalize_pot(pot)
+
+% Marginalize down to [], so that the normalizing constant becomes Pr(E)
+temp = marginalize_pot(cg_can_to_mom(pot), []); 
+%loglik = temp.mom{1}.logp;
+[temp2, loglik] = normalize_pot(temp.mom{1});
+  
+% Adjust scale factor to reflect the fact that the pot now represents Pr(X | E) instead of Pr(X,E).
+
+scale = -loglik;
+if 1
+switch pot.subtype
+  case 'm'
+    for i=1:pot.dsize
+      pot.mom{i} = rescale_pot(pot.mom{i}, scale);
+    end
+  case 'c'
+    for i=1:pot.dsize
+      pot.can{i} = rescale_pot(pot.can{i}, scale);
+    end
+end        
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/set_domain_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function pot = set_domain_pot(pot, domain)
+% SET_DOMAIN_POT Change the domain of a potential (cgpot)
+% pot = set_domain_pot(pot, domain)
+
+delta = domain(1) - pot.domain(1);
+assert(all(domain == pot.domain + delta));
+pot.domain = pot.domain + delta;
+pot.ddom = pot.ddom + delta;
+pot.cdom = pot.cdom + delta;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/Old/simple_marginalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+function smallpot = marginalize_pot(bigpot, keep)
+% MARGINALIZE_POT Marginalize a cgpot onto a smaller domain.
+% smallpot = marginalize_pot(bigpot, keep)
+
+sumover = mysetdiff(bigpot.domain, keep);
+csumover = myintersect(sumover, bigpot.cdom);
+dsumover = myintersect(sumover, bigpot.ddom);
+dkeep = myintersect(keep, bigpot.ddom);
+ckeep = myintersect(keep, bigpot.cdom);
+%ns = sparse(1, max(bigpot.domain)); % must be full, so I is an integer
+ns = zeros(1, max(bigpot.domain));
+ns(bigpot.ddom) = bigpot.dsizes;
+ns(bigpot.cdom) = bigpot.csizes;
+
+% sum(ns(csumover))==0 is like isempty(csumover) but handles observed nodes.
+% Similarly, prod(ns(dsumover))==1 is like isempty(dsumover)
+
+% Marginalize the cts parts.
+% If we are in canonical form, we stay that way, since moment form might not exist.
+% Besides, we would like to minimize the number of conversions.
+if sum(ns(csumover)) > 0
+  if bigpot.subtype == 'm'
+    for i=1:bigpot.dsize
+      bigpot.mom{i} = marginalize_pot(bigpot.mom{i}, ckeep);
+    end
+  else
+    for i=1:bigpot.dsize
+      bigpot.can{i} = marginalize_pot(bigpot.can{i}, ckeep);
+    end
+  end
+end
+
+% If we are not marginalizing over any discrete nodes, we are done.
+if prod(ns(dsumover))==1
+  smallpot = cgpot(dkeep, ckeep, ns, bigpot.can, bigpot.mom, bigpot.subtype);
+  return;
+end
+
+% To marginalize the discrete parts, we must be in moment form.
+bigpot = cg_can_to_mom(bigpot);
+
+I = prod(ns(dkeep));
+J = prod(ns(dsumover));
+C = sum(ns(ckeep));
+
+% Reshape bigpot into the form mu1(:,j,i), where i is in dkeep, j is in dsumover
+T1 = zeros(I,J);
+mu1 = zeros(C,J,I);
+Sigma1 = zeros(C,C,J,I);
+sum_map = find_equiv_posns(dsumover, bigpot.ddom);
+keep_map = find_equiv_posns(dkeep, bigpot.ddom);
+iv = zeros(1, length(bigpot.ddom)); % index vector
+for i=1:I
+  keep_iv = ind2subv(ns(dkeep), i);
+  iv(keep_map) = keep_iv;
+  for j=1:J
+    sum_iv = ind2subv(ns(dsumover), j);
+    iv(sum_map) = sum_iv;
+    k = subv2ind(ns(bigpot.ddom), iv);
+    mom = struct(bigpot.mom{k}); % violate object privacy
+    T1(i,j) = exp(mom.logp);
+    if C > 0 % so mu1 and Sigma1 are non-empty
+      mu1(:,j,i) = mom.mu;
+      Sigma1(:,:,j,i) = mom.Sigma;
+    end
+  end
+end
+
+% Collapse the mixture of Gaussians
+coef = mk_stochastic(T1); % coef must be convex combination
+T2 = sum(T1,2);
+T2 = T2 + (T2==0)*eps;
+%if C > 0, disp('collapsing onto '); disp(leep); end
+mu = [];
+Sigma = [];
+mom = cell(1,I);
+for i=1:I
+  if C > 0
+    [mu, Sigma] = collapse_mog(mu1(:,:,i), Sigma1(:,:,:,i), coef(i,:));
+  end
+  logp = log(T2(i));
+  mom{i} = mpot(ckeep, ns(ckeep), logp, mu, Sigma);
+end
+
+smallpot = cgpot(dkeep, ckeep, ns, [], mom, 'm');
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/cg_can_to_mom.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function pot = cg_can_to_mom(pot)
+% CG_CAN_TO_MOM Convert a CG potential from canonical to moment form, if necessary.
+% pot = cg_can_to_mom(pot)
+
+if pot.subtype ~= 'm'
+  for i=1:pot.dsize
+    pot.mom{i} = cpot_to_mpot(pot.can{i});
+  end
+  pot.subtype = 'm';
+end   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/cg_mom_to_can.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function pot = cg_mom_to_can(pot)
+% CG_MOM_TO_CAN Convert a CG potential from moment to canonical form, if necessary.
+% pot = cg_mom_to_can(pot)
+
+if pot.subtype ~= 'c'
+  for i=1:pot.dsize
+    pot.can{i} = mpot_to_cpot(pot.mom{i});
+  end
+  pot.subtype = 'c';
+end   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/cgpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function pot = cgpot(ddom, cdom, node_sizes, can, mom, subtype)
+% CPOT Make a canonical CG potential.
+% function pot = cgpot(ddom, cdom, node_sizes, can, mom, subtype)
+%
+% node_sizes(i) is the size of the i'th node.
+% can and mom default to 0s.
+% subtype defaults to 'c'.
+
+if nargin < 6, subtype = 'c'; end
+
+pot.ddom = ddom;
+pot.cdom = cdom;
+node_sizes = node_sizes(:)'; % row vectors print better
+pot.domain = myunion(ddom, cdom);
+pot.dsizes = node_sizes(pot.ddom);
+pot.dsize = prod(node_sizes(pot.ddom));
+pot.csizes = node_sizes(pot.cdom);
+pot.csize = sum(node_sizes(pot.cdom));
+pot.subtype = subtype;
+
+if nargin < 4
+  can = cell(1, pot.dsize);
+  for i=1:pot.dsize
+    can{i} = cpot(cdom, node_sizes(cdom));
+  end
+end
+pot.can = can;              
+
+if nargin < 5
+  mom = cell(1, pot.dsize);
+  for i=1:pot.dsize
+    mom{i} = mpot(cdom, node_sizes(cdom));
+  end
+end
+pot.mom = mom;
+
+pot = class(pot, 'cgpot');
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(pot)
+
+disp('conditional Gaussian potential object');
+disp(struct(pot));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/divide_by_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function bigpot = divide_by_pot(bigpot, smallpot)
+% DIVIDE_BY_POT bigpot /= smallpot for cgpot
+% bigpot = divide_by_pot(bigpot, smallpot)
+%
+% smallpot's domain must be a subset of bigpot's domain.
+
+bigpot = cg_mom_to_can(bigpot);
+smallpot = cg_mom_to_can(smallpot);
+
+mask = find_equiv_posns(smallpot.ddom, bigpot.ddom);
+for i=1:bigpot.dsize
+  if isempty(smallpot.ddom)
+    src = 1;
+  else
+    sub = ind2subv(bigpot.dsizes, i);
+    src = subv2ind(smallpot.dsizes, sub(mask));
+  end
+  bigpot.can{i} = divide_by_pot(bigpot.can{i}, smallpot.can{src});
+end                   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/domain_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function dom = domain_pot(pot)
+% DOMAIN_POT Return the domain of this cgpot.
+% dom = domain_pot(pot)
+
+dom = pot.domain;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/enter_cts_evidence_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function pot = enter_cts_evidence_pot(pot, Y, y)
+% function pot = enter_cts_evidence_pot(pot, Y, y) cgpot
+
+
+pot = cg_mom_to_can(pot);
+for i=1:pot.dsize
+  pot.can{i} = enter_cts_evidence_pot(pot.can{i}, Y, y);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/enter_discrete_evidence_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function pot = enter_discrete_evidence_pot(pot, Y, y)
+
+%ns = sparse(1, max(pot.domain));
+ns = zeros(1, max(pot.domain));
+ns(pot.ddom) = pot.dsizes;
+ns(pot.cdom) = pot.csizes;
+
+ddom = pot.ddom;
+S = prod(ns(ddom));
+sub = ind2subv(ns(ddom), 1:S);
+mask = find_equiv_posns(Y, ddom);
+sub(mask) = y;
+ndx = subv2ind(ns(ddom), sub);
+
+pot.can = pot.can(ndx);
+pot.mom = pot.mom(ndx);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/marginalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,153 @@
+function smallpot = marginalize_pot(bigpot, keep, maximize, useC)
+% MARGINALIZE_POT Marginalize a cgpot onto a smaller domain.
+% smallpot = marginalize_pot(bigpot, keep, maximize, useC)
+%
+% If maximize = 1, we raise an error.
+% useC is ignored.
+
+if nargin < 3, maximize = 0; end
+assert(~maximize);
+
+
+sumover = mysetdiff(bigpot.domain, keep);
+csumover = myintersect(sumover, bigpot.cdom);
+dsumover = myintersect(sumover, bigpot.ddom);
+dkeep = myintersect(keep, bigpot.ddom);
+ckeep = myintersect(keep, bigpot.cdom);
+%ns = sparse(1, max(bigpot.domain)); % must be full, so I is an integer
+ns = zeros(1, max(bigpot.domain));
+ns(bigpot.ddom) = bigpot.dsizes;
+ns(bigpot.cdom) = bigpot.csizes;
+
+% sum(ns(csumover))==0 is like isempty(csumover) but handles observed nodes.
+% Similarly, prod(ns(dsumover))==1 is like isempty(dsumover)
+
+% Marginalize the cts parts.
+% If we are in canonical form, we stay that way, since moment form might not exist.
+% Besides, we would like to minimize the number of conversions.
+if sum(ns(csumover)) > 0
+  if bigpot.subtype == 'm'
+    for i=1:bigpot.dsize
+      bigpot.mom{i} = marginalize_pot(bigpot.mom{i}, ckeep);
+    end
+  else
+    for i=1:bigpot.dsize
+      bigpot.can{i} = marginalize_pot(bigpot.can{i}, ckeep);
+    end
+  end
+end
+
+% If we are not marginalizing over any discrete nodes, we are done.
+if prod(ns(dsumover))==1
+  smallpot = cgpot(dkeep, ckeep, ns, bigpot.can, bigpot.mom, bigpot.subtype);
+  return;
+end
+
+% To marginalize the discrete parts, we partition the cts parts into those that depend
+% on dkeep (i) and those that depend on on dsumover (j).
+
+I = prod(ns(dkeep));
+J = prod(ns(dsumover));
+C = sum(ns(ckeep));   
+sum_map = find_equiv_posns(dsumover, bigpot.ddom);
+keep_map = find_equiv_posns(dkeep, bigpot.ddom);
+iv = zeros(1, length(bigpot.ddom)); % index vector
+
+% If in canonical form, marginalize if possible, else convert to moment form.
+if 0 & bigpot.subtype == 'c'
+  p1 = zeros(I,J);
+  h1 = zeros(C,J,I);
+  K1 = zeros(C,C,J,I);
+  for i=1:I
+    keep_iv = ind2subv(ns(dkeep), i);
+    iv(keep_map) = keep_iv;
+    for j=1:J
+      sum_iv = ind2subv(ns(dsumover), j);
+      iv(sum_map) = sum_iv;
+      k = subv2ind(ns(bigpot.ddom), iv);
+      can = struct(bigpot.can{k}); % violate object privacy
+      p1(i,j) = exp(can.g);
+      if C > 0 % so mu1 and Sigma1 are non-empty
+	h1(:,j,i) = can.h;
+	K1(:,:,j,i) = can.K;
+      end
+    end
+  end
+  
+  % If the cts parts do not depend on j, we can just marginalize the weighting coefficient g.
+  jdepends = 0;
+  for i=1:I
+    for j=2:J
+      if ~approxeq(h1(:,j,i), h1(:,1,i)) | ~approxeq(K1(:,:,j,i), K1(:,:,1,i))
+	jdepends = 1;
+	break
+      end
+    end
+  end
+
+  if ~jdepends
+    %g2 = log(sum(p1, 2));
+    g2 = zeros(I,1);
+    for i=1:I
+      s = sum(p1(i,:));
+      if s > 0
+	g2(i) = log(s);
+      end
+    end
+    h2 = h1;
+    K2 = K1;
+    can = cell(1,I);
+    j = 1; % arbitrary
+    for i=1:I
+      can{i} = cpot(ckeep, ns(ckeep), g2(i), h2(:,j,i), K2(:,:,j,i));
+    end
+    smallpot = cgpot(dkeep, ckeep, ns, can, [], 'c');  
+    return;
+  else
+    % Since the cts parts depend on j, we must convert to moment form
+    bigpot = cg_can_to_mom(bigpot);
+  end
+end
+
+
+% Marginalize in moment form
+bigpot = cg_can_to_mom(bigpot);
+
+% Now partition the moment components.
+T1 = zeros(I,J);
+mu1 = zeros(C,J,I);
+Sigma1 = zeros(C,C,J,I);
+for i=1:I
+  keep_iv = ind2subv(ns(dkeep), i);
+  iv(keep_map) = keep_iv;
+  for j=1:J
+    sum_iv = ind2subv(ns(dsumover), j);
+    iv(sum_map) = sum_iv;
+    k = subv2ind(ns(bigpot.ddom), iv);
+    mom = struct(bigpot.mom{k}); % violate object privacy
+    T1(i,j) = exp(mom.logp);
+    if C > 0 % so mu1 and Sigma1 are non-empty
+      mu1(:,j,i) = mom.mu;
+      Sigma1(:,:,j,i) = mom.Sigma;
+    end
+  end
+end
+
+% Collapse the mixture of Gaussians
+coef = mk_stochastic(T1); % coef must be convex combination
+T2 = sum(T1,2);
+T2 = T2 + (T2==0)*eps;
+%if C > 0, disp('collapsing onto '); disp(leep); end
+mu = [];
+Sigma = [];
+mom = cell(1,I);
+for i=1:I
+  if C > 0
+    [mu, Sigma] = collapse_mog(mu1(:,:,i), Sigma1(:,:,:,i), coef(i,:));
+  end
+  logp = log(T2(i));
+  mom{i} = mpot(ckeep, ns(ckeep), logp, mu, Sigma);
+end
+
+smallpot = cgpot(dkeep, ckeep, ns, [], mom, 'm');
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/multiply_by_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function bigpot = multiply_by_pot(bigpot, smallpot, varargin)
+% MULTIPLY_BY_POT bigpot *= smallpot for cgpot
+% bigpot = multiply_by_pot(bigpot, smallpot)
+%
+% smallpot's domain must be a subset of bigpot's domain.
+
+bigpot = cg_mom_to_can(bigpot);
+smallpot = cg_mom_to_can(smallpot);
+
+mask = find_equiv_posns(smallpot.ddom, bigpot.ddom);
+for i=1:bigpot.dsize
+  if isempty(smallpot.ddom)
+    src = 1;
+  else
+    sub = ind2subv(bigpot.dsizes, i);
+    src = subv2ind(smallpot.dsizes, sub(mask));
+  end
+  bigpot.can{i} = multiply_by_pot(bigpot.can{i}, smallpot.can{src});
+end                   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/multiply_pots.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function T = multiply_pots(T1, T2)
+% MULTIPLY_POTS Multiply a pair of dpots together pointwise (cgpot)
+% T = multiply_pots(pots)
+
+ddom = myunion(T1.ddom, T2.ddom);
+cdom = myunion(T1.cdom, T2.cdom);
+dom = myunion(ddom, cdom);
+ns = zeros(1, max(dom));
+ns(T1.ddom) = T1.dsizes;
+ns(T2.ddom) = T2.dsizes;
+ns(T1.cdom) = T1.csizes;
+ns(T2.cdom) = T2.csizes;
+
+T = cgpot(ddom, cdom, ns);
+T = multiply_by_pot(T, T1);
+T = multiply_by_pot(T, T2);   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/normalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function [pot, loglik] = normalize_pot(pot)
+% NORMALIZE_POT Convert the CG potential Pr(X,E) into Pr(X|E) and return log Pr(E).
+% [pot, loglik] = normalize_pot(pot)
+
+% Marginalize down to [], so that the normalizing constant becomes Pr(E)
+temp = cg_can_to_mom(marginalize_pot(pot, []));
+%loglik = temp.mom{1}.logp;
+[temp2, loglik] = normalize_pot(temp.mom{1});
+  
+% Adjust scale factor to reflect the fact that the pot now represents Pr(X | E) instead of Pr(X,E).
+
+scale = -loglik;
+if 1
+switch pot.subtype
+  case 'm'
+    for i=1:pot.dsize
+      pot.mom{i} = rescale_pot(pot.mom{i}, scale);
+    end
+  case 'c'
+    for i=1:pot.dsize
+      pot.can{i} = rescale_pot(pot.can{i}, scale);
+    end
+end        
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/pot_to_marginal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function m = pot_to_marginal(pot)
+% POT_TO_MARGINAL Convert a cgpot to a marginal structure.
+% m = pot_to_marginal(pot)
+
+pot = cg_can_to_mom(pot);
+m.domain = pot.domain;
+n = pot.csize;
+d = length(pot.mom);
+if n==0
+  m.mu = [];
+  m.Sigma = [];
+else
+  m.mu = zeros(n, d);
+  m.Sigma = zeros(n, n, d);
+end
+m.T = 0*myones(pot.dsizes);
+for i=1:pot.dsize
+  s = struct(pot.mom{i}); % violate privacy of object
+  if n > 0
+    m.mu(:,i) = s.mu;
+    m.Sigma(:,:,i) = s.Sigma;
+  end
+  m.T(i) = exp(s.logp);
+end     
+if isvectorBNT(m.T)
+  m.T = m.T(:)';
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cgpot/set_domain_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function pot = set_domain_pot(pot, domain)
+% SET_DOMAIN_POT Change the domain of a potential (cgpot)
+% pot = set_domain_pot(pot, domain)
+
+delta = domain(1) - pot.domain(1);
+assert(all(domain == pot.domain + delta));
+pot.domain = pot.domain + delta;
+pot.ddom = pot.ddom + delta;
+pot.cdom = pot.cdom + delta;
+cdomain = pot.cdom;
+n = prod(pot.dsizes);
+if(pot.subtype == 'm')
+    for i = 1: n
+        pot.mom{i} = set_domain_pot(pot.mom{i}, cdomain);
+    end
+end
+if(pot.subtype == 'c')
+    for i = 1: n
+        pot.can{i} = set_domain_pot(pot.can{i}, cdomain);
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+/cpot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/cpot_to_mpot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/display.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/divide_by_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/domain_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/enter_cts_evidence_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/marginalize_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/multiply_by_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/multiply_pots.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/normalize_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/pot_to_marginal.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/rescale_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/set_domain_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials/@cpot
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+/cpot_to_mpot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/normalize_pot.convert.m/1.1.1.1/Wed May 29 15:59:58 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials/@cpot/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/Old/cpot_to_mpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function mom = cpot_to_mpot(can)
+% CPOT_TO_MPOT Convert a canonical potential to moment form.
+% mom = cpot_to_mpot(can)
+
+[logp, mu, Sigma] = canonical_to_moment(can.g, can.h, can.K);
+mom = mpot(can.domain, can.sizes, logp, mu, Sigma);
+
+%%%%%%%
+
+function [logp, mu, Sigma] = canonical_to_moment(g, h, K)
+% CANONICAL_TO_MOMENT Convert canonical characteristics to moment form.
+% [logp, mu, Sigma] = canonical_to_moment(g, h, K)
+
+if det(K)==0
+  Sigma = inf*size(K);
+else
+  Sigma = inv(K);
+end
+mu = Sigma*h;
+n = length(mu);
+if isempty(mu)
+  logp = g - 0.5*(log(det(K)) - n*log(2*pi));
+else
+  logp = g - 0.5*(log(det(K)) - n*log(2*pi) - mu'*K*mu);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/Old/normalize_pot.convert.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function [mom2, loglik] = normalize_pot(can)
+% NORMALIZE_POT Convert the canonical potential Pr(X,E) into moment potential Pr(X|E) and return log Pr(E).
+% [mom, loglik] = normalize_pot(can)
+
+mom = cpot_to_mpot(can);
+mom = struct(mom); % violate privacy of object
+loglik = mom.logp;
+%mom.logp = 0; % now represents Pr(X | E) instead of Pr(X, E). 
+mom2 = mpot(mom.domain, mom.sizes, 0, mom.mu, mom.Sigma);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/cpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function pot = cpot(members, sizes, g, h, K)
+% CPOT Make a canonical Gaussian potential.
+% pot = cpot(members, sizes, g, h, K)
+%
+% All params default to 0 if omitted.
+
+n = sum(sizes);
+if nargin < 3, g = 0; end
+if nargin < 4, h = zeros(n,1); end
+if nargin < 5, K = zeros(n,n); end
+  
+pot.domain = members;
+pot.sizes = sizes(:)';
+pot.g = g;
+pot.h = h;
+pot.K = K;
+pot = class(pot, 'cpot');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/cpot_to_mpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function mom = cpot_to_mpot(can)
+% CPOT_TO_MPOT Convert a canonical potential to moment form.
+% mom = cpot_to_mpot(can)
+
+[logp, mu, Sigma] = canonical_to_moment(can.g, can.h, can.K);
+mom = mpot(can.domain, can.sizes, logp, mu, Sigma);
+
+%%%%%%%
+
+function [logp, mu, Sigma] = canonical_to_moment(g, h, K)
+% CANONICAL_TO_MOMENT Convert canonical characteristics to moment form.
+% [logp, mu, Sigma] = canonical_to_moment(g, h, K)
+
+n = length(K);
+if isempty(K)
+  logp = g - 0.5*(log(det(K)) - n*log(2*pi));
+  Sigma = [];
+  mu = [];
+else
+  if det(K)==0
+    Sigma = inf*ones(n,n);
+    mu = zeros(n,1); % if the precision is zero, the mean is arbitrary
+    logp = g; % the scaling factor for the uniform distribution is 1
+  else
+    Sigma = inv(K);
+    mu = Sigma*h;
+    logp = g - 0.5*(log(det(K)) - n*log(2*pi) - mu'*K*mu);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(pot)
+
+disp('canonical potential object');
+disp(struct(pot));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/divide_by_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function bigpot = divide_by_pot(bigpot, smallpot)
+% DIVIDE_BY_POT bigpot /= smallpot for cpot
+% bigpot = divide_by_pot(bigpot, smallpot)
+%
+% smallpot's domain must be a subset of bigpot's domain.
+
+bigpot.g = bigpot.g - smallpot.g;
+if sum(smallpot.sizes) > 0
+  mask = find_equiv_posns(smallpot.domain, bigpot.domain);
+  u = block(mask, bigpot.sizes);
+  bigpot.h(u) = bigpot.h(u) - smallpot.h;
+  bigpot.K(u, u) = bigpot.K(u, u) - smallpot.K;
+end               
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/domain_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function dom = domain_pot(pot)
+% DOMAIN_POT Return the domain of this cpot.
+% dom = domain_pot(pot)
+
+dom = pot.domain;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/enter_cts_evidence_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function pot = enter_cts_evidence_pot(pot, Y, y)
+% function pot = enter_cts_evidence_pot(pot, Y, y) (cpot)
+
+ns = sparse(1, max(pot.domain));
+ns(pot.domain) = pot.sizes;
+
+X = mysetdiff(pot.domain, Y);
+[hx, hy, KXX, KXY, KYX, KYY] = partition_matrix_vec(pot.h, pot.K, X, Y, ns);
+pot.g = pot.g + hy'*y - 0.5*y'*KYY*y;
+if ~isempty(X)
+  pot.h = hx - KXY*y;
+  pot.K = KXX;
+end
+
+pot.sizes(find_equiv_posns(Y,pot.domain)) = 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/marginalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function smallpot = marginalize_pot(bigpot, keep, maximize, useC)
+% MARGINALIZE_POT Marginalize a cpot onto a smaller domain.
+% smallpot = marginalize_pot(bigpot, keep, maximize, useC)
+%
+% The maximize argument is ignored - maxing out a Gaussian is the same as summing it out,
+% since the mode and mean are equal.
+% The useC argument is ignored.
+
+node_sizes = sparse(1, max(bigpot.domain));
+node_sizes(bigpot.domain) = bigpot.sizes;
+sum_over = mysetdiff(bigpot.domain, keep);
+
+if sum(node_sizes(sum_over))==0 % isempty(sum_over)
+  %smallpot = bigpot;
+  smallpot = cpot(keep, node_sizes(keep), bigpot.g, bigpot.h, bigpot.K);
+else
+  [h1, h2, K11, K12, K21, K22] = partition_matrix_vec(bigpot.h, bigpot.K, sum_over, keep, node_sizes);
+  n = length(h1);
+  K11inv = inv(K11);
+  g = bigpot.g + 0.5*(n*log(2*pi) - log(det(K11)) + h1'*K11inv*h1);
+  if length(h2) > 0 % ~isempty(keep) % we are are actually keeping something
+    A = K21*K11inv;
+    h = h2 - A*h1;
+    K = K22 - A*K12;
+  else
+    h = [];
+    K = [];
+  end
+  smallpot = cpot(keep, node_sizes(keep), g, h, K);
+end
+           
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/multiply_by_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function bigpot = multiply_by_pot(bigpot, smallpot, varargin)
+% MULTIPLY_BY_POT bigpot *= smallpot for cpot
+% bigpot = multiply_by_pot(bigpot, smallpot)
+%
+% smallpot's domain must be a subset of bigpot's domain.
+
+bigpot.g = bigpot.g + smallpot.g;
+if sum(smallpot.sizes) > 0
+  mask = find_equiv_posns(smallpot.domain, bigpot.domain);
+  u = block(mask, bigpot.sizes);
+  bigpot.h(u) = bigpot.h(u) + smallpot.h;
+  bigpot.K(u, u) = bigpot.K(u, u) + smallpot.K;
+end               
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/multiply_pots.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function T = multiply_pots(T1, T2)
+% MULTIPLY_POTS Multiply a pair of dpots together pointwise (cpot)
+% T = multiply_pots(pots)
+
+dom = myunion(T1.domain, T2.domain);
+ns = sparse(1, max(dom));
+ns(T1.domain) = T1.sizes;
+ns(T2.domain) = T2.sizes;
+T = cpot(dom, ns(dom));
+T = multiply_by_pot(T, T1);
+T = multiply_by_pot(T, T2);   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/normalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function [pot, loglik] = normalize_pot(pot)
+% NORMALIZE_POT Convert the canonical potential Pr(X,E) into Pr(X|E) and return log Pr(E).
+% [pot, loglik] = normalize_pot(pot)
+
+mom = cpot_to_mpot(pot);  % move the normalizing constant out of g, to reveal the coefficient          
+%loglik = scaling_factor_pot(mom);
+%loglik = mom.logp; 
+[temp, loglik] = normalize_pot(mom);
+pot.g = pot.g - loglik;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/pot_to_marginal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function m = pot_to_marginal(pot)
+% POT_TO_MARGINAL Convert a cpot to a marginal structure.
+% m = pot_to_marginal(pot)
+
+mom = cpot_to_mpot(pot);
+m = pot_to_marginal(mom);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/rescale_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function pot = rescale_pot(pot, s)
+% RESCALE_POT Add a constant to the cpot scale factor.
+% pot = rescale_pot(pot, s)
+
+pot.g = pot.g + s;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@cpot/set_domain_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function pot = set_domain_pot(pot, domain)
+% SET_DOMAIN_POT Change the domain of a potential (dpot)
+% pot = set_domain_pot(pot, domain)
+
+pot.domain = domain;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+/approxeq_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/display.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/divide_by_pot.m/1.1.1.1/Thu Aug  5 15:25:08 2004//
+/domain_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/dpot.m/1.1.1.1/Tue Oct  1 19:04:44 2002//
+/dpot_to_table.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/find_most_prob_entry.m/1.1.1.1/Sun Jun 16 19:06:20 2002//
+/get_fields.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/marginalize_pot.m/1.1.1.1/Wed Aug  4 19:59:14 2004//
+/multiply_by_pot.m/1.1.1.1/Wed Aug  4 19:59:14 2004//
+/multiply_pots.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/normalize_pot.m/1.1.1.1/Wed Aug  4 15:54:48 2004//
+/pot_to_marginal.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/set_domain_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/subsasgn.m/1.1.1.1/Wed Apr 27 18:34:48 2005//
+/subsref.m/1.1.1.1/Wed Apr 27 18:34:48 2005//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials/@dpot
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/approxeq_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function p = approxeq_pot(A, B, tol)
+
+if nargin < 3, tol = 1e-3; end
+
+p = approxeq(A.T, B.T, tol);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(pot)
+
+disp('discrete potential object');
+disp(struct(pot));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/divide_by_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function Tbig = divide_by_pot(Tbig, Tsmall)
+% DIVIDE_BY_POT Tbig /= Tsmall
+% Tbig = divide_by_pot(Tbig, Tsmall)
+%
+% Tsmall's domain must be a subset of Tbig's domain.
+
+%process sparse dpot, we do not concern only one of the two pots is sparse
+if issparse(Tbig.T) & issparse(Tsmall.T)
+   Tbig.T = divide_by_sparse_table(Tbig.T, Tbig.domain, Tbig.sizes, Tsmall.T, Tsmall.domain, Tsmall.sizes);
+else
+   Tbig.T = divide_by_table(Tbig.T, Tbig.domain, Tbig.sizes, Tsmall.T, Tsmall.domain, Tsmall.sizes);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/domain_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function dom = domain_pot(pot)
+% DOMAIN_POT Return the domain of this dpot.
+% dom = domain_pot(pot)
+
+dom = pot.domain;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/dpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function pot = dpot(domain, sizes, T)
+% DPOT Make a discrete (sparse) potential.
+% pot = dpot(domain, sizes, T, spar)
+%
+% sizes(i) is the size of the i'th domain element.
+% T defaults to all 1s.
+
+%assert(length(sizes) == length(domain));
+
+pot.domain = domain(:)'; % so we can see it when we display
+if nargin < 3
+  pot.T = myones(sizes);
+  %pot.T = ones(1,prod(sizes)); % 1D vector
+else 
+   if isempty(T)
+      pot.T = [];
+   else
+      if issparse(T)
+         pot.T = T;   
+      else
+         pot.T = myreshape(T, sizes);  
+      end
+   end
+end
+pot.sizes = sizes(:)';
+pot = class(pot, 'dpot');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/dpot_to_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function T = dpot_to_table(pot)
+
+T = pot.T;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/find_most_prob_entry.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function [indices, pot] = find_most_prob_entry(pot)
+% function [indices, pot] = find_most_prob_entry(pot)
+% function [indices, pot] = find_most_prob_entry(pot)
+% Find the indices of the argmax, and set all other enties to 0.
+
+%indices = argmax(pot.T);
+[m i] = max(pot.T(:));
+indices = ind2subv(pot.sizes, i);
+pot.T = 0*myones(pot.sizes);
+pot.T(i) = m;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/get_fields.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function val = get_params(pot, name)
+% GET_PARAMS Accessor function for a field (dpot)
+% val = get_params(pot, name)
+%
+% e.g., get_params(pot, 'table') or 'domain'
+
+switch name
+ case 'table', val = pot.T;
+ case 'domain', val = pot.domain;
+ otherwise,
+  error(['invalid field name ' name]);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/marginalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function smallpot = marginalize_pot(bigpot, onto, maximize)
+% MARGINALIZE_POT Marginalize a dpot onto a smaller domain.
+% smallpot = marginalize_pot(bigpot, onto, maximize)
+%
+% 'onto' must be in ascending order.
+
+if nargin < 3, maximize = 0; end
+
+ns = zeros(1, max(bigpot.domain));
+ns(bigpot.domain) = bigpot.sizes;
+%assert(isequal(bigpot.sizes, mysize(bigpot.T))); % may fail if there are trailing dimensions of size 1
+if issparse(bigpot.T)
+   smallT = marg_sparse_table(bigpot.T, bigpot.domain, bigpot.sizes, onto, maximize);
+else 
+   smallT = marg_table(bigpot.T, bigpot.domain, bigpot.sizes, onto, maximize);
+end
+smallpot = dpot(onto, ns(onto), smallT);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/multiply_by_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function Tbig = multiply_by_pot(Tbig, Tsmall)
+% MULTIPLY_BY_POT Tbig *= Tsmall
+% Tbig = multiply_by_pot(Tbig, Tsmall)
+%
+% Tsmall's domain must be a subset of Tbig's domain.
+
+%process sparse dpot, we do not consider only one of the two pots is sparse
+if issparse(Tbig.T) & issparse(Tsmall.T)
+   Tbig.T = mult_by_sparse_table(Tbig.T, Tbig.domain, Tbig.sizes, Tsmall.T, Tsmall.domain, Tsmall.sizes);
+else 
+   Tbig.T = mult_by_table(Tbig.T, Tbig.domain, Tbig.sizes, Tsmall.T, Tsmall.domain, Tsmall.sizes);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/multiply_pots.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function T = multiply_pots(T1, T2)
+% MULTIPLY_POTS Multiply a pair of dpots together pointwise.
+% T = multiply_pots(pots)
+
+dom = myunion(T1.domain, T2.domain);
+%ns = sparse(1, max(dom)); % causes problems in myreshape on NT
+ns = zeros(1, max(dom));
+ns(T1.domain) = T1.sizes;
+ns(T2.domain) = T2.sizes;
+T = dpot(dom, ns(dom));
+T = multiply_by_pot(T, T1);
+T = multiply_by_pot(T, T2);   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/normalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function [pot, loglik] = normalize_pot(pot)
+% NORMALIZE_POT Convert the discrete potential Pr(X,E) into Pr(X|E) and return log Pr(E).
+% [pot, loglik] = normalize_pot(pot)
+
+if isempty(pot.T)  %add to process sparse
+   loglik = 0;
+   return;
+end
+[pot.T, lik] = normalise(pot.T);
+loglik = log(lik + (lik==0)*eps);
+
+      
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/pot_to_marginal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function m = pot_to_marginal(pot)
+% POT_TO_MARGINAL Convert a dpot to a marginal structure.
+% m = pot_to_marginal(pot)
+
+m.domain = pot.domain;
+m.T = pot.T;
+m.mu = [];
+m.Sigma = [];  
+
+%if isvector(m.T)
+%  m.T = m.T(:);
+%end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/set_domain_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function pot = set_domain_pot(pot, domain)
+% SET_DOMAIN_POT Change the domain of a potential (dpot)
+% pot = set_domain_pot(pot, domain)
+
+pot.domain = domain;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/subsasgn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function B = subsasgn(A, S, B)
+
+B = builtin('subsasgn', A, S, B);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@dpot/subsref.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function B = subsref(A, S)
+
+B = builtin('subsref', A, S);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+/display.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/marginalize_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/mpot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/mpot_to_cpot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/normalize_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/pot_to_marginal.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/rescale_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/set_domain_pot.m/1.1.1.1/Wed Jul 30 13:37:52 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials/@mpot
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(pot)
+
+disp('moment Gaussian potential object');
+disp(struct(pot));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/marginalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function smallpot = marginalize_pot(bigpot, keep, maximize, useC)
+% MARGINALIZE_POT Marginalize a mpot onto a smaller domain.
+% smallpot = marginalize_pot(bigpot, keep, maximize, useC)
+%
+% The maximize argument is ignored - maxing out a Gaussian is the same as summing it out,
+% since the mode and mean are equal.
+% The useC argument is ignored.
+
+
+node_sizes = sparse(1, max(bigpot.domain));
+node_sizes(bigpot.domain) = bigpot.sizes;
+sum_over = mysetdiff(bigpot.domain, keep);
+
+[logp, mu, Sigma] = marginalize_gaussian(bigpot.logp, bigpot.mu, bigpot.Sigma, ...
+					 keep, sum_over, node_sizes);
+smallpot = mpot(keep, node_sizes(keep), logp, mu, Sigma);
+
+%%%%%%
+
+function [logpX, muX, SXX] = marginalize_gaussian(logp, mu, Sigma, X, Y, ns)
+% MARGINALIZE_GAUSSIAN Compute Pr(X) from Pr(X,Y) where X and Y are jointly Gaussian.
+% [logpX, muX, SXX] = marginalize_gaussian(logp, mu, Sigma, X, Y, ns)
+%
+% sizes(i) is the size of the i'th block in domain.
+ 
+[muX, muY, SXX, SXY, SYX, SYY] = partition_matrix_vec(mu, Sigma, X, Y, ns);
+logpX = logp; % Lauritzen (1996) p161          
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/mpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function pot = mpot(members, sizes, logp, mu, Sigma)
+% MPOT Make a moment Gaussian potential.
+% pot = mpot(members, sizes, logp, mu, Sigma)
+%
+% All params default to 0 if omitted.
+
+n = sum(sizes);
+if nargin < 3, logp = 0; end
+if nargin < 4, mu = zeros(n,1); end
+if nargin < 5, Sigma = zeros(n,n); end
+  
+pot.domain = members;
+pot.sizes = sizes;
+pot.logp = logp;
+pot.mu = mu;
+pot.Sigma = Sigma;zeros(n,n);      
+pot = class(pot, 'mpot');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/mpot_to_cpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function can = mpot_to_cpot(mom)
+% MPOT_TO_CPOT Convert a moment potential to canonical form.
+% mom = mpot_to_cpot(can)
+
+[g, h, K] = moment_to_canonical(mom.logp, mom.mu, mom.Sigma);
+can = cpot(mom.domain, mom.sizes, g, h, K);
+
+%%%%%%%%%%%
+
+function [g, h, K] = moment_to_canonical(logp, mu, Sigma)
+% MOMENT_TO_CANONICAL Convert moment characteristics to canonical form.
+% [g, h, K] = moment_to_canonical(logp, mu, Sigma)
+
+K = inv(Sigma);
+h = K*mu;
+n = length(K);
+if isempty(mu)
+  g = logp + 0.5*(log(det(K)) - n*log(2*pi));
+else
+  g = logp + 0.5*(log(det(K)) - n*log(2*pi) - mu'*K*mu);
+end        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/normalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function [pot, loglik] = normalize_pot(pot)
+% NORMALIZE_POT Convert the moment potential Pr(X,E) into Pr(X|E) and return log Pr(E).
+% [pot, loglik] = normalize_pot(pot)
+
+loglik = pot.logp;
+pot.logp = 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/pot_to_marginal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function m = pot_to_marginal(pot)
+% POT_TO_MARGINAL Convert a mpot to a marginal structure.
+% m = pot_to_marginal(pot)
+
+m.domain = pot.domain;
+m.T = exp(pot.logp);
+m.mu = pot.mu;
+m.Sigma = pot.Sigma;
+
+if isvectorBNT(m.T)
+  m.T = m.T(:)';
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/rescale_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function pot = rescale_pot(pot, s)
+% RESCALE_POT Add a constant to the mpot scale factor.
+% pot = rescale_pot(pot, s)
+
+pot.logp = pot.logp + s;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@mpot/set_domain_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function pot = set_domain_pot(pot, domain)
+% SET_DOMAIN_POT Change the domain of a potential (mpot)
+% pot = set_domain_pot(pot, domain)
+
+pot.domain = domain;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/marginalize_pot.m/1.1.1.1/Sun May 19 22:11:08 2002//
+/normalize_pot.m/1.1.1.1/Sun May 19 22:11:08 2002//
+/reduce_pot.m/1.1.1.1/Tue Mar 11 17:37:02 2003//
+/rescale_pot.m/1.1.1.1/Sun May 19 22:11:08 2002//
+/scgcpot.m/1.1.1.1/Sun May 19 22:11:08 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials/@scgcpot
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/marginalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function smallpot = marginalize_pot(bigpot, keepdom, sumoverdom, nodesizes)
+% MARGINALIZE_POT Marginalize a mpot onto a smaller domain.
+% smallpot = marginalize_pot(bigpot, keep)
+
+keepsize = sum(nodesizes(keepdom));
+[A1, A2, B1, B2, C11, C12, C21, C22] = partition_matrix_vec_3(bigpot.A, bigpot.B, bigpot.C, keepdom, sumoverdom, nodesizes);
+smallpot = scgcpot(keepsize, bigpot.ctailsize, bigpot.p, A1, B1, C11);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/normalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function [pot, loglik] = normalize_pot(pot)
+% NORMALIZE_POT Convert the element of stable conditional gaussian potential Pr(X,E) into Pr(X|E) and return log Pr(E).
+% [pot, loglik] = normalize_pot(pot)
+
+loglik = log(pot.p);
+pot.p = 1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/reduce_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function [reduced_pot,successful] = reduce(pot,tailnodes)
+% Executes the reduce operation defined in 
+% Stable Local Computation with Conditional Gaussian Distributions
+% Steffen L. Lauritzen
+% Frank Jensen
+% September 1999
+% The potential pot is reduced if B contains any zero columns 
+% The test are restricted to the positions in tailnodes.
+% Any columns successfully deleted are entered in the array successful
+
+if nargin < 2
+    tailnodes = 1:pot.ctailsize;
+end
+
+successful = [];
+
+% Look for all columns beeing equal to zero
+for i = tailnodes
+    if ~any(pot.B(:,i))
+        successful = [successful i]; 
+    end
+end
+
+remain = mysetdiff(1:pot.ctailsize,successful);
+
+% Erase the zero-columns and decrease the tailsize
+pot.B = pot.B(:,remain);
+pot.ctailsize = pot.ctailsize - length(successful);
+
+% Return the reduced potential
+reduced_pot = pot;
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/rescale_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function pot = rescale_pot(pot, s)
+% RESCALE_POT Add a constant to the mpot scale factor.
+% pot = rescale_pot(pot, s)
+
+pot.p = pot.p*s;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgcpot/scgcpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function pot = scgcpot(cheadsize, ctailsize, p, A, B, C)
+% SCGCPOT Make a base object of stable conditional gaussian potential.
+% pot = scgcpot(cheadsize, ctailsize, p, A, B, C)
+%
+% cheadsize is the demension of head nodes.
+% ctailsize is the demension of tail nodes.
+% r = cheadsize, s = ctailsize
+% p is discrete probability.
+% A is table of r*1 vectors;
+% B is r*s matrices
+% C is r*r positive semidefinite symmetric matrices
+
+if nargin < 3
+    p = 1; 
+end
+if nargin < 4
+    A = zeros(cheadsize,1); 
+end
+if nargin < 5
+    B = zeros(cheadsize,ctailsize); 
+end
+if nargin < 6
+    C = zeros(cheadsize,cheadsize); 
+end
+
+if isempty(A)
+    A = zeros(cheadsize,1); 
+end
+if isempty(B)
+    B = zeros(cheadsize,ctailsize); 
+end
+if isempty(C)
+    C = zeros(cheadsize,cheadsize); 
+end
+  
+pot.cheadsize = cheadsize;
+pot.ctailsize = ctailsize;
+
+pot.p = p;
+pot.A = A;
+pot.B = B;
+pot.C = C;
+%if cheadsize == 0
+%   pot.A = [];
+%end
+%if ctailsize == 0
+%    pot.B = [];
+%end
+pot = class(pot, 'scgcpot');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+/README/1.1.1.1/Thu Mar 20 15:07:16 2003//
+/combine_pots.m/1.1.1.1/Tue Mar 11 17:49:28 2003//
+/complement_pot.m/1.1.1.1/Wed May 21 13:49:34 2003//
+/direct_combine_pots.m/1.1.1.1/Sun May 19 22:11:08 2002//
+/extension_pot.m/1.1.1.1/Fri Jan 24 12:52:34 2003//
+/marginalize_pot.m/1.1.1.1/Tue Mar 11 17:06:08 2003//
+/normalize_pot.m/1.1.1.1/Wed May 21 13:49:44 2003//
+/pot_to_marginal.m/1.1.1.1/Sun May 19 22:11:08 2002//
+/recursive_combine_pots.m/1.1.1.1/Wed May 21 13:49:48 2003//
+/reduce_pot.m/1.1.1.1/Tue Mar 11 18:07:12 2003//
+/scgpot.m/1.1.1.1/Tue Mar 11 14:04:48 2003//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials/@scgpot
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/README	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+% Stable conditional Gaussian inference
+% Written by Rainer Deventer
+
+
+@techreport{Lauritzen99,
+  author = "S. Lauritzen and F. Jensen",
+  title = "Stable Local Computation with Conditional {G}aussian Distributions",
+  year = 1999,
+  number = "R-99-2014",
+  institution = "Dept. Math. Sciences, Aalborg Univ."
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/combine_pots.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function pot = combine_pots(pot1, pot2)
+% COMBINE_POTS combine two potentials 
+% pot = combine_pots(pot1, pot2)
+
+% Reduce both potentials before trying to combine them. 
+% Cf. "Stable Local computation with Conditional Gaussian Distributions", page 9
+% Consider again two potentials with minimal tail
+
+% Guarantee minimal tails. If pot1 or pot2 are minimal, they are not changed
+pot1 = reduce_pot(pot1);
+pot2 = reduce_pot(pot2);
+
+%if the intersect set of these two potentials' head conts. combination is undifined
+if ~isempty( myintersect(pot1.cheaddom, pot2.cheaddom) )
+    return;
+end
+
+if  isempty( myintersect(pot1.domain, pot2.cheaddom) ) | isempty( myintersect(pot2.domain, pot1.cheaddom))
+    % if satisfy the condition of directed combine
+    pot = direct_combine_pots(pot1, pot2);
+else
+    % perform recursive combine
+    pot = recursive_combine_pots(pot1, pot2);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/complement_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,221 @@
+function [margpot, comppot] = complement_pot(pot, keep)
+% COMPLEMENT_POT complement means decompose of a potential into its strong marginal and 
+% its complement corresponds exactly to the decomposition of a probability distribution 
+% into its marginal and conditional
+% [margpot, comppot] = complement_pot(pot, keep)
+
+% keep can only include continuous head nodes and discrete nodes
+% margpot is the stable CG potential of keep nodes
+% comppot is the stable CG potential of others in corresponds exactly to 
+% the discomposition of a probability distribution of its marginal and conditional
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Calculation of the marginal requires integration over      %
+% all variables in csumover. Thus cheadkeep contains all     %
+% continuous variables in the marginal potential             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%keyboard;
+csumover = mysetdiff(pot.cheaddom, keep);
+cheadkeep = mysetdiff(pot.cheaddom, csumover);
+
+nodesizes = zeros(1, max(pot.domain));
+nodesizes(pot.ddom) = pot.dsizes;
+nodesizes(pot.cheaddom) = pot.cheadsizes;
+nodesizes(pot.ctaildom) = pot.ctailsizes;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Description of the variables in the marginal domain        %
+% For the calculation of a strong marginal first integration %
+% over all continuous variables in the head takes place.     %
+% The calculation of the marginal over the head variables    %
+% might result in a smaller or empty tail                    %
+% If there are no head variables, and therefore no tail      %
+% variables, left marginalisation over discrete variables    %
+% may take place                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
+margdom      = mysetdiff(pot.domain,keep);
+% margddom   = pot.ddom;
+margcheaddom = cheadkeep;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Marginalisation over discrete variables is only allowed when %
+% the tail is empty                                            %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+margddom = myintersect(pot.ddom,keep);               % Discrete domain of marginal
+margctaildom = myintersect(pot.ctaildom,keep);       % Tail domain
+assert(isempty(mysetdiff(pot.ddom,margddom)) | isempty(margctaildom))  
+
+
+%margctaildom = pot.ctaildom;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Even if marginalisation over continuous variables is only defined %
+% for head variables, the marginalisation over haed-variables might %
+% result in a smaller tail                                          %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+margctaildom = myintersect(pot.ctaildom,keep);
+
+margcheadsizes = nodesizes(margcheaddom);
+margcheadsize = sum(margcheadsizes);
+margctailsizes = nodesizes(margctaildom);
+margctailsize = sum(margctailsizes);
+
+compdom = pot.domain;
+compddom = pot.ddom;
+compcheaddom = csumover;
+compctaildom = myunion(pot.ctaildom, cheadkeep);
+compcheadsizes = nodesizes(compcheaddom);
+compcheadsize = sum(compcheadsizes);
+compctailsizes = nodesizes(compctaildom);
+compctailsize = sum(compctailsizes);
+
+dkeep = myintersect(pot.ddom, keep);
+%if dom is only contain discrete node
+if isempty(pot.cheaddom)
+    dsumover = mysetdiff(pot.ddom, dkeep);
+    
+    if isempty(dsumover)
+        margpot = pot;
+        comppot = scgpot([], [], [], []);
+        return;
+    end
+        
+    
+    I = prod(nodesizes(dkeep));
+    J = prod(nodesizes(dsumover));
+    sum_map = find_equiv_posns(dsumover, pot.ddom);
+    keep_map = find_equiv_posns(dkeep, pot.ddom);
+    iv = zeros(1, length(pot.ddom)); % index vector
+    p1 = zeros(I,J);
+    for i=1:I
+        keep_iv = ind2subv(nodesizes(dkeep), i);
+        iv(keep_map) = keep_iv;
+        for j=1:J
+            sum_iv = ind2subv(nodesizes(dsumover), j);
+            iv(sum_map) = sum_iv;
+            k = subv2ind(nodesizes(pot.ddom), iv);
+            potc = struct(pot.scgpotc{k}); % violate object privacy
+            p1(i,j) = potc.p;
+        end
+    end
+    p2 = sum(p1,2);
+    p2 = p2 + (p2==0)*eps;
+    
+    margscpot = cell(1, I);
+    compscpot = cell(1, I*J);
+    iv = zeros(1, length(pot.ddom)); % index vector
+    for i=1:I
+        margscpot{i} = scgcpot(0, 0, p2(i));
+        keep_iv = ind2subv(nodesizes(dkeep), i);
+        iv(keep_map) = keep_iv;
+        for j=1:J
+            sum_iv = ind2subv(nodesizes(dsumover), j);
+            iv(sum_map) = sum_iv;
+            k = subv2ind(nodesizes(pot.ddom), iv);
+            q = p1(i,j)/p2(i);
+            compscpot{k} = scgcpot(0, 0, q);
+        end
+    end
+    
+    margpot = scgpot(dkeep, [], [], nodesizes, margscpot);
+    comppot = scgpot(pot.ddom, [], [], nodesizes,compscpot);
+    return;
+end
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% head of the potential is not empty %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+dsize = pot.dsize;
+compscpot = cell(1, dsize);
+
+fmaskh = find_equiv_posns(margcheaddom, compctaildom);
+fmaskt = find_equiv_posns(margctaildom, compctaildom);
+
+fh = block(fmaskh, compctailsizes);
+ft = block(fmaskt, compctailsizes);
+
+
+if ~isempty(margcheaddom)
+    for i=1:dsize
+        potc = struct(pot.scgpotc{i});
+        q = 1;
+        p = potc.p;
+        [A1, A2, B1, B2, C11, C12, C21, C22] = partition_matrix_vec_3(potc.A, potc.B, potc.C, margcheaddom, compcheaddom, nodesizes);
+
+        if ~isempty(margcheaddom)
+            margscpot{i} = scgcpot(margcheadsize, margctailsize, p, A1, B1, C11);
+        else
+            margscpot{i} = scgcpot(margcheadsize, margctailsize, p);
+        end 
+    
+        if ~isempty(compcheaddom)
+            if ~isempty(margcheaddom)
+                E = A2 - C21*pinv(C11)*A1;
+                tmp1 = C21*pinv(C11);
+                tmp2 = B2 - C21*pinv(C11)*B1;
+                F = zeros(compcheadsize, compctailsize);
+                F(:, fh) = tmp1;
+                F(:, ft) = tmp2;
+                G = C22 - C21*pinv(C11)*C12;
+            else
+                E = A2;
+                F = B2;
+                G = C22;
+            end
+            compscpot{i} = scgcpot(compcheadsize, compctailsize, q, E, F, G);
+        else
+            compscpot{i} = scgcpot(compcheadsize, 0, q);
+        end
+        if isempty(margcheaddom)
+            margpot = scgpot(margddom, [], [], nodesizes, margscpot);
+        else
+            margpot = scgpot(margddom, margcheaddom, margctaildom, nodesizes, margscpot);
+        end
+    end
+else
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    % Marginalisation took place over all head variables.                               %
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    % Calculate the strong marginal %
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    margpot = marginalize_pot(pot,keep);
+    mPot    = struct(margpot); 
+    for i =1:dsize
+        potc = struct(pot.scgpotc{i});  
+        % Get the probability of the original potential % 
+	q = potc.p;
+         
+        % Get the configuration defined by the index i%
+        config = ind2subv(pot.dsizes,i);
+        
+        % Calculate the corresponding configuration in the marginal potential
+        if isempty(margpot.dsizes)
+            % keep == []
+	    indMargPot = 1;
+        else
+            equivPos   = find_equiv_posns(dkeep,pot.ddom);
+            indMargPot = subv2ind(margpot.dsizes,config(equivPos));
+        end
+        % Figure out the corresponding marginal potential
+        mPotC = struct(mPot.scgpotc{indMargPot});
+        p = mPotC.p;
+        if p == 0
+            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+            % The following assignment is correct as p is only zero if q is also zero %
+            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+            compscpot{i} = scgcpot(compcheadsize,compctailsize,0,potc.A,potc.B,potc.C);
+        else
+            compscpot{i} = scgcpot(compcheadsize,compctailsize,q/p,potc.A,potc.B,potc.C);
+        end
+    end
+end
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Put all components in one potential %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+if isempty(compcheaddom)
+    comppot = scgpot(compddom, [], [], nodesizes,compscpot);
+else
+    comppot = scgpot(compddom, compcheaddom, compctaildom, nodesizes,compscpot);
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/direct_combine_pots.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,161 @@
+function pot = direct_combine_pots(pot1, pot2)
+% DIRECTED_COMBINE_POTS The combination operation corresponds to ordinary composition of conditional distributions. 
+% In some sense is similar to that of forming disjoint union of set.
+% pot = direct_combine_pots(pot1, pot2)
+
+% directed combine can be performed under the conditon that the head node set of pot1 is disjoint from the domain of 
+% pot2 or vice versa. if the last conditon was satisfied we exchange the pot1 and pot2 firstly then perform the operation.
+% If neither of them was satified the directed combine is undifined.
+
+
+if isempty( myintersect(pot1.domain, pot2.cheaddom) )
+    pot1 = pot1;
+    pot2 = pot2;
+elseif  isempty( myintersect(pot2.domain, pot1.cheaddom))
+    temppot = pot1;
+    pot1 = pot2;
+    pot2 = temppot;
+else
+    assert(0);
+    return;
+end
+
+domain = myunion(pot1.domain, pot2.domain);
+nodesizes = zeros(1,max(domain));
+nodesizes(pot2.ctaildom) = pot2.ctailsizes;
+nodesizes(pot2.cheaddom) = pot2.cheadsizes;
+nodesizes(pot2.ddom) = pot2.dsizes;
+nodesizes(pot1.ctaildom) = pot1.ctailsizes;
+nodesizes(pot1.cheaddom) = pot1.cheadsizes;
+nodesizes(pot1.ddom) = pot1.dsizes;
+
+dom_u = mysetdiff(pot2.ctaildom, pot1.cheaddom);
+if ~isempty(dom_u) & ~mysubset(dom_u, pot1.ctaildom)
+    pot1 = extension_pot(pot1, [], [], dom_u, nodesizes(dom_u));
+end
+
+dom_u = myunion(pot1.cheaddom, pot1.ctaildom);
+if ~isempty(dom_u) & ~mysubset(dom_u, pot2.ctaildom)
+    pot2 = extension_pot(pot2, [], [], dom_u, nodesizes(dom_u));
+end
+
+
+cheaddom = myunion(pot1.cheaddom, pot2.cheaddom);
+ctaildom = mysetdiff(myunion(pot1.ctaildom, pot2.ctaildom), cheaddom);
+cdom = myunion(cheaddom, ctaildom);
+ddom = mysetdiff(domain, cdom);
+dsizes = nodesizes(ddom);
+dsize = prod(nodesizes(ddom));
+cheadsizes = nodesizes(cheaddom);
+cheadsize = sum(nodesizes(cheaddom));
+ctailsizes = nodesizes(ctaildom);
+ctailsize = sum(nodesizes(ctaildom));
+
+r1 = pot1.cheadsize;
+s1 = pot1.ctailsize;
+scpot = cell(1, dsize);
+mask1 = [];
+mask2 = [];
+if ~isempty(pot1.ddom)
+    mask1 = find_equiv_posns(pot1.ddom, ddom);
+end
+if ~isempty(pot2.ddom)
+    mask2 = find_equiv_posns(pot2.ddom, ddom);
+end
+cmask1 = [];
+cmask2 = [];
+if ~isempty(pot1.cheaddom)
+    cmask1 = find_equiv_posns(pot1.cheaddom, cheaddom);
+end
+if ~isempty(pot2.cheaddom)
+    cmask2 = find_equiv_posns(pot2.cheaddom, cheaddom);
+end
+
+u1 = block(cmask1, cheadsizes);
+u2 = block(cmask2, cheadsizes);
+
+fmaskh = find_equiv_posns(pot1.cheaddom, pot2.ctaildom);
+fmaskt = find_equiv_posns(pot1.ctaildom, pot2.ctaildom);
+
+fh = block(fmaskh, pot2.ctailsizes);
+ft = block(fmaskt, pot2.ctailsizes);
+
+for i=1:dsize
+    sub = ind2subv(dsizes, i);
+    sub1 = sub(mask1);
+    sub2 = sub(mask2);
+    ind1 = subv2ind(pot1.dsizes, sub1);
+    ind2 = subv2ind(pot2.dsizes, sub2);
+    
+    if isempty(ind1)
+        ind1 = 1;
+    end
+    if isempty(ind2)
+        ind2 = 1;
+    end
+    potc1 = struct(pot1.scgpotc{ind1});
+    potc2 = struct(pot2.scgpotc{ind2});
+    p = potc1.p;
+    q = potc2.p;
+    ro = p*q;
+    
+    A = potc1.A;
+    B = potc1.B;
+    C = potc1.C;
+   
+    E = potc2.A;
+    F = potc2.B;
+    G = potc2.C;
+    
+    F1 = F(:, fh);
+    F2 = F(:, ft);
+    
+    if ~isempty(F1)
+        K1 = F1*A;
+        K2 = F1*B;
+        FCF = F1*C*F1';
+        FC = F1*C;
+        CFT = C*F1';
+    else
+        K1 = zeros(size(E));
+        K2 = zeros(size(F2));
+        FCF = zeros(size(G));
+        FC = zeros(size(C, 1), size(G, 2));
+        CFT = zeros(size(G, 2), size(C, 1));
+    end
+    
+    
+    U = zeros(cheadsize,1); 
+    W = zeros(cheadsize,cheadsize);
+    V = zeros(cheadsize,ctailsize); 
+    
+    if cheadsize > 0
+        U(u1) = A;
+        U(u2) = E + K1;
+        W(u1, u1) = C;
+        W(u2, u2) = G + FCF;
+        W(u1, u2) = CFT;
+        W(u2, u1) = FC;
+    else
+        U = zeros(cheadsize,1); 
+        W = zeros(cheadsize,cheadsize); 
+    end
+    if cheadsize > 0 | ctailsize > 0
+        if ~isempty(u1)
+            V(u1, :) = B;
+        else
+            V(u1, :) = zeros(potc1.cheadsize, ctailsize);
+        end
+        if ~isempty(u2)
+            V(u2, :) = F2 + K2;
+        else
+            V(u2, :) = zeros(potc2.cheadsize, ctailsize);
+        end
+    else
+        V = zeros(cheadsize,ctailsize); 
+    end
+
+    scpot{i} = scgcpot(cheadsize, ctailsize, ro, U, V, W);
+end
+
+pot = scgpot(ddom, cheaddom, ctaildom, nodesizes, scpot);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/extension_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+function pot = extension_pot(oldpot, ddom_u, dsizes, ctaildom_u, csizes)
+% EXTENSION_POT Extense a stable CG potential.
+% pot = extension_pot(oldpot, ddom_u, ctaildom_u, dsizes, csizes)
+% ddom_u Added discrete nodes
+% ctaildom_u Added continuous tail nodes
+% csizes is the size of the tail nodes.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% A CG potential can be extended by adding discrete variables to its %
+% domain of continuous variables to its tail                         %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ddom = myunion(oldpot.ddom, ddom_u);
+ctaildom = myunion(oldpot.ctaildom, ctaildom_u);
+cheaddom = oldpot.cheaddom;
+udom = myunion(ddom_u, ctaildom_u);
+domain = myunion(oldpot.domain, udom);
+
+ns = zeros(1,max(domain));
+ns(ddom_u) = dsizes;
+ns(ctaildom_u) = csizes;
+ns(oldpot.ddom) = oldpot.dsizes;
+ns(oldpot.cheaddom) = oldpot.cheadsizes;
+ns(oldpot.ctaildom) = oldpot.ctailsizes;
+
+dsizes = ns(ddom);
+dsize = prod(ns(ddom));
+cheadsizes = ns(cheaddom);
+cheadsize = sum(ns(cheaddom));
+ctailsizes = ns(ctaildom);
+ctailsize = sum(ns(ctaildom));
+
+BZ = zeros(cheadsize, ctailsize);
+potarray = cell(1, dsize);
+mask = find_equiv_posns(oldpot.ddom, ddom);
+
+tmask = find_equiv_posns(oldpot.ctaildom, ctaildom);
+tu = block(tmask, ctailsizes);
+
+for i=1:dsize
+    sub1 = ind2subv(dsizes, i);
+    sub2 = sub1(mask);
+    ind = subv2ind(oldpot.dsizes, sub2);
+    if isempty(ind)
+        ind = 1;
+    end
+    potc = struct(oldpot.scgpotc{ind});
+    p = potc.p;
+    B = BZ;
+    if ~isempty(B)
+        B(:, tu) = potc.B;
+    end
+    potarray{i} = scgcpot(cheadsize, ctailsize, p, potc.A, B, potc.C);
+end
+
+pot = scgpot(ddom, cheaddom, ctaildom, ns,potarray);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/marginalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,92 @@
+function smallpot = marginalize_pot(bigpot, keep)
+% MARGINALIZE_POT Marginalize a cgpot onto a smaller domain.
+% smallpot = marginalize_pot(bigpot, keep)
+
+sumover = mysetdiff(bigpot.domain, keep);
+cdom = myunion(bigpot.cheaddom, bigpot.ctaildom);
+csumover = myintersect(sumover, bigpot.cheaddom);
+dsumover = myintersect(sumover, bigpot.ddom);
+
+dkeep = myintersect(keep, bigpot.ddom);
+ckeep = myintersect(keep, bigpot.cheaddom);
+cheaddom = myintersect(keep, bigpot.cheaddom);
+
+assert(isempty(myintersect(csumover,bigpot.ctaildom)));
+ns = zeros(1, max(bigpot.domain));
+ns(bigpot.ddom) = bigpot.dsizes;
+ns(bigpot.cheaddom) = bigpot.cheadsizes;
+ns(bigpot.ctaildom) = bigpot.ctailsizes;
+
+
+if sum(ns(csumover)) > 0
+    for i=1:bigpot.dsize
+      bigpot.scgpotc{i} = marginalize_pot(bigpot.scgpotc{i}, ckeep, csumover, ns);
+    end
+end
+
+if (isequal(csumover, cheaddom))
+    bigpot.ctaildom = [];
+end
+% If we are not marginalizing over any discrete nodes, we are done.
+if prod(ns(dsumover))==1
+  smallpot = scgpot(dkeep, cheaddom, bigpot.ctaildom, ns, bigpot.scgpotc);
+  return;
+end
+
+if (~isempty(bigpot.ctaildom))
+    assert(0);
+    return;
+end
+
+I = prod(ns(dkeep));
+J = prod(ns(dsumover));
+C = sum(ns(ckeep));   
+sum_map = find_equiv_posns(dsumover, bigpot.ddom);
+keep_map = find_equiv_posns(dkeep, bigpot.ddom);
+iv = zeros(1, length(bigpot.ddom)); % index vector
+
+p1 = zeros(I,J);
+A1 = zeros(C,J,I);
+C1 = zeros(C,C,J,I);
+for i=1:I
+  keep_iv = ind2subv(ns(dkeep), i);
+  iv(keep_map) = keep_iv;
+  for j=1:J
+    sum_iv = ind2subv(ns(dsumover), j);
+    iv(sum_map) = sum_iv;
+    k = subv2ind(ns(bigpot.ddom), iv);
+    pot = struct(bigpot.scgpotc{k}); % violate object privacy
+    p1(i,j) = pot.p;
+    if C > 0 % so mu1 and Sigma1 are non-empty
+      A1(:,j,i) = pot.A;
+      C1(:,:,j,i) = pot.C;
+    end
+  end
+end
+
+% Collapse the mixture of Gaussians
+coef = mk_stochastic(p1); % coef must be convex combination
+%keyboard
+p2 = sum(p1,2);
+if (all(p2 == 0))
+    p2 = p2 + (p2==0)*eps;
+end
+A = [];
+S = [];
+
+pot = cell(1,I);
+ctailsize = sum(ns(bigpot.ctaildom));
+tB = zeros(C, ctailsize);
+for i=1:I
+  if C > 0
+    [A, S] = collapse_mog(A1(:,:,i), C1(:,:,:,i), coef(i,:));
+  end
+  p = p2(i);
+  pot{i} = scgcpot(C, ctailsize, p, A, tB, S);
+end
+
+smallpot = scgpot(dkeep, ckeep, bigpot.ctaildom, ns, pot);
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/normalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function [pot, loglik] = normalize_pot(pot)
+% NORMALIZE_POT Convert the SCG potential Pr(X,E) into Pr(X|E) and return log Pr(E).
+% [pot, loglik] = normalize_pot(pot)
+
+% Marginalize down to [], so that the normalizing constant becomes Pr(E)
+temp = marginalize_pot(pot, []);
+[temp2, loglik] = normalize_pot(temp.scgpotc{1});
+  
+% Adjust scale factor to reflect the fact that the pot now represents Pr(X | E) instead of Pr(X,E).
+
+scale = -loglik;
+if 1
+    for i=1:pot.dsize
+        pot.scgpotc{i} = rescale_pot( pot.scgpotc{i}, scale);
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/pot_to_marginal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function m = pot_to_marginal(pot)
+% POT_TO_MARGINAL Convert a scgpot to a marginal structure.
+% m = pot_to_marginal(pot)
+
+assert(isempty(pot.ctaildom))
+m.domain = pot.domain;
+n = pot.cheadsize;
+d = pot.dsize;
+
+if n==0
+  m.mu = [];
+  m.Sigma = [];
+else
+  m.mu = zeros(n, d);
+  m.Sigma = zeros(n, n, d);
+end
+%m.T = 0*myones(pot.dsizes);
+m.T = 0*myones(pot.dsize);
+for i=1:pot.dsize
+  potc = struct(pot.scgpotc{i}); % violate privacy of object
+  if n > 0
+    m.mu(:,i) = potc.A;
+    m.Sigma(:,:,i) = potc.C;
+  end
+  m.T(i) = potc.p;
+end     
+if isvectorBNT(m.T)
+  m.T = m.T(:)';
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/recursive_combine_pots.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function pot = recursive_combine_pots(pot1, pot2)
+% RECURSIVE_COMBINE_POTS recursive combine two potentials
+% pot = recursive_combine_pots(pot1, pot2)
+
+pot1 = reduce_pot(pot1);
+pot2 = reduce_pot(pot2);
+% Recursion is stopped, if recusive-combination is defined by direct combination, 
+% i.e. if the domain of one potential is disjoint from the head of the other.
+if (isempty(myintersect(pot1.domain,pot2.cheaddom))|...
+    isempty(myintersect(pot1.cheaddom,pot2.domain)))    
+    pot = direct_combine_pots(pot1,pot2);
+else 
+    % Test wether one of the set-differences is not empty 
+    % as defined in Lauritzen99 "Stable Local Computation with Conditional Gaussian Distributions"
+    % on page 9
+    D12 = mysetdiff(pot1.cheaddom, pot2.domain);
+    D21 = mysetdiff(pot2.cheaddom, pot1.domain);
+    if (isempty(D12) & isempty(D21))
+       assert(0,'Recursive combination is not defined');
+    end
+
+    if ~isempty(D12)
+        % Calculate the complementary potential for the set 
+        % D1\D12 as defined in Lauritzen 99, page 9
+    keep = mysetdiff(pot1.domain,D12);
+        [margpot, comppot] = complement_pot(pot1,keep);
+        margpot = reduce_pot(margpot);
+        comppot = reduce_pot(comppot);
+        pot = direct_combine_pots( recursive_combine_pots(margpot, pot2), comppot);
+    elseif ~isempty(D21)
+        keep = mysetdiff(pot2.domain,D21);
+        [margpot, comppot] = complement_pot(pot2,D21);
+        margpot = reduce_pot(margpot);
+        comppot = reduce_pot(comppot);
+        pot = direct_combine_pots( recursive_combine_pots(pot1, margpot), comppot);
+    end
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/reduce_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function [reduced_pot,successful] = reduce_pot(pot,tailnodes)
+% Executes the reduce operation defined in
+% Stable Local Computation with Conditional Gaussian Distributions
+% Steffen L. Lauritzen
+% Frank Jensen
+% September 1999
+% The potential pot is reduced if B contains any zero columns
+% The test are restricted to the positions in tailnodes.
+% Any columns successfully deleted are entered in the array successful
+if nargin < 2
+    tailnodes = pot.ctaildom;
+end
+
+successful = [];
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Keep track of remaining tailnodes %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+rem_tailnodes = pot.ctaildom;
+for i = tailnodes
+    pos = find(i==rem_tailnodes);
+    successful_red = [pos];
+    red_scgcpot = cell(1,pot.dsize);
+    j = 1;
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    % Test whether all components of pot.scgpotc can be reduced %
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    while ((j <= pot.dsize) & ~isempty(successful_red))
+        [cpot,successful_red] = reduce_pot(pot.scgpotc{j},pos);
+        red_scgcpot{j} = cpot;
+        j = j + 1;
+    end
+
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    % If i is a reducible tailnode, then reduce the potential %
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    if ~isempty(successful_red)
+        successful = [successful i];
+        pot.scgpotc = red_scgcpot;
+        rem_tailnodes = mysetdiff(rem_tailnodes,i);
+    end;
+end
+
+pot.ctaildom = rem_tailnodes;
+positions = find_equiv_posns(rem_tailnodes,pot.ctaildom);
+pot.ctailsizes = pot.ctailsizes(positions);
+pot.ctailsize = sum(pot.ctailsizes);
+pot.domain = mysetdiff(pot.domain,successful);
+reduced_pot = pot;
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@scgpot/scgpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function pot = scgpot(ddom, cheaddom, ctaildom, node_sizes, scgpotc)
+% SCGPOT Make a stable CG potential.
+% pot = scgpot(ddom, cheaddom, ctaildom, node_sizes, scgpotc)
+%
+% ddom is discrete nodes contains in the potential
+% cheaddom is head nodes constains in the potential
+% ctaildom is tail nodes contains in the potential
+% node_sizes(i) is the size of the i'th node.
+% scgpotc is list of scgcpot objects.
+
+pot.ddom = ddom;
+pot.cheaddom = cheaddom;
+pot.ctaildom = ctaildom;
+pot.domain = myunion(ddom, myunion(cheaddom, ctaildom));
+pot.dsizes = node_sizes(pot.ddom);
+pot.dsize = prod(node_sizes(pot.ddom));
+pot.cheadsizes = node_sizes(pot.cheaddom);
+pot.cheadsize = sum(node_sizes(pot.cheaddom));
+pot.ctailsizes = node_sizes(pot.ctaildom);
+pot.ctailsize = sum(node_sizes(pot.ctaildom));
+
+if nargin < 5
+    scgpotc = cell(1, pot.dsize);
+    for i=1:pot.dsize
+        scgpotc{i} = scgcpot(pot.cheadsize, pot.ctailsize);
+    end
+end
+pot.scgpotc = scgpotc;              
+
+pot = class(pot, 'scgpot');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+/approxeq_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/display.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/divide_by_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/marginalize_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/multiply_by_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/normalize_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/pot_to_marginal.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/upot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/upot_to_opt_policy.m/1.1.1.1/Wed May 29 15:59:58 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials/@upot
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/approxeq_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function p = approxeq_pot(A, B, tol)
+
+if nargin < 3, tol = 1e-3; end
+
+p = approxeq(A.p, B.p, tol) & approxeq(A.u, B.u, tol);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(pot)
+
+disp('utility potential object');
+disp(struct(pot));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/divide_by_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function Tbig = divide_by_pot(Tbig, Tsmall)
+% DIVIDE_BY_POT Tbig /= Tsmall
+% Tbig = divide_by_pot(Tbig, Tsmall)
+%
+% Tsmall's domain must be a subset of Tbig's domain.
+
+smallp = extend_domain_table(Tsmall.p, Tsmall.domain, Tsmall.sizes, Tbig.domain, Tbig.sizes);
+smallp = smallp + (smallp==0);
+Tbig.p = Tbig.p ./ smallp;
+
+smallu = extend_domain_table(Tsmall.u, Tsmall.domain, Tsmall.sizes, Tbig.domain, Tbig.sizes);
+Tbig.u = Tbig.u - smallu;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/marginalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function smallpot = marginalize_pot(bigpot, onto, maximize)
+% MARGINALIZE_POT Marginalize a upot onto a smaller domain.
+% smallpot = marginalize_pot(bigpot, onto, maximize)
+%
+% The maximize argument is ignored
+
+numer = marg_table(bigpot.p .* bigpot.u, bigpot.domain, bigpot.sizes, onto);
+denom = marg_table(bigpot.p, bigpot.domain, bigpot.sizes, onto);
+
+p = denom;
+% replace 0s by 1s before dividing. This is valid since demon(i) = 0 => numer(i) = 0
+denom = denom + (denom == 0); 
+u = numer ./ denom;
+
+ns = zeros(1, max(bigpot.domain));
+ns(bigpot.domain) = bigpot.sizes;
+
+smallpot = upot(onto, ns(onto), p, u);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/multiply_by_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function Tbig = multiply_by_pot(Tbig, Tsmall)
+% MULTIPLY_BY_POT Tbig *= Tsmall
+% Tbig = multiply_by_pot(Tbig, Tsmall)
+%
+% Tsmall's domain must be a subset of Tbig's domain.
+
+smallp = extend_domain_table(Tsmall.p, Tsmall.domain, Tsmall.sizes, Tbig.domain, Tbig.sizes);
+Tbig.p = Tbig.p .* smallp;
+
+smallu = extend_domain_table(Tsmall.u, Tsmall.domain, Tsmall.sizes, Tbig.domain, Tbig.sizes);
+Tbig.u = Tbig.u + smallu;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/normalize_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function [pot, loglik] = normalize_pot(pot)
+% NORMALIZE_POT Convert the probability part of a utility potential
+% [pot, loglik] = normalize_pot(pot)
+
+[pot.p, lik] = normalise(pot.p);
+%pot.u = pot.u - sum(pot.u(:));
+%pot.u = pot.u ./ sum(pot.u(:)); % same as normalise(pot.u)
+%pot.u = normalise(pot.u);
+%pot.u = pot.u / 726.8121;
+pot.u = pot.u / 10;
+loglik = log(lik + (lik==0)*eps);
+
+      
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/pot_to_marginal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function m = pot_to_marginal(pot)
+% POT_TO_MARGINAL Convert a upot to a structure.
+% m = pot_to_marginal(pot)
+
+m.domain = pot.domain;
+m.T = pot.p;
+m.U = pot.u;
+
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/upot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function pot = upot(domain, sizes, p, u)
+% UPOT Make a discrete utility potential.
+% pot = upot(domain, sizes, p, u)
+%
+% sizes(i) is the size of the i'th domain element.
+% p defaults to all 1s, u defaults to all 0s.
+
+if nargin < 3, p = myones(sizes); end
+if nargin < 4, u = 0*myones(sizes); end
+
+pot.domain = domain;
+pot.p = myreshape(p, sizes);
+pot.u = myreshape(u, sizes);
+pot.sizes = sizes(:)';
+pot = class(pot, 'upot');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/@upot/upot_to_opt_policy.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function [policy, EU] = upot_to_opt_policy(pot)
+% UPOT_TO_OPT_POLICY Compute an optimal deterministic policy given a utility potential
+% [policy, EU] = upot_to_opt_policy(pot)
+%
+% policy(a,b, ..., z) = P(do z | a, b, ..), which will be a delta function
+% EU is the contraction of this potential, i.e., P .* U
+
+sz = pot.sizes; % mysize(pot.p);
+if isempty(sz)
+  EU = pot.u;
+  policy = [];
+  return;
+end
+
+parent_size = prod(sz(1:end-1));
+self_size = sz(end); 
+C = pot.p .* pot.u; % contraction
+C = reshape(C, parent_size, self_size);
+policy = zeros(parent_size, self_size);
+for i=1:parent_size
+  act = argmax(C(i,:));
+  policy(i, act) = 1;
+end
+policy = myreshape(policy, sz);
+EU = sum(C(:));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/CPD_to_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function pot = CPD_to_pot(pot_type, CPD, domain, ns, cnodes, evidence)
+% CPD_TO_POT Convert a CPD to a potential of the specified form, incorporating any evidence
+% pot = CPD_to_pot(pot_type, CPD, domain, node_sizes, cnodes, evidence)
+%
+% pot_type is one of 'd', 'g', or 'cg'.
+% domain is the domain of CPD.
+% node_sizes(i) is the size of node i.
+% cnodes = the cts nodes
+% evidence{i} is the evidence on the i'th node.
+
+switch pot_type
+ case 'd',
+  pot = CPD_to_dpot(CPD, domain, ns, cnodes, evidence);
+ case 'g',
+  pot = CPD_to_cpot(CPD, domain, ns, cnodes, evidence);
+ case 'cg',
+  pot = CPD_to_cgpot(CPD, domain, ns, cnodes, evidence);
+ otherwise,
+  error(['can''t handle pot_type ' pot_type]);
+end
+              
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+/CPD_to_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/README/1.1.1.1/Wed May 29 15:59:58 2002//
+/check_for_cd_arcs.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/determine_pot_type.m/1.1.1.1/Wed May 29 15:59:58 2002//
+/genops.c/1.1.1.1/Sat Jul 28 15:43:40 2001//
+/mk_initial_pot.m/1.1.1.1/Wed May 29 15:59:58 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+A D/@cgpot////
+A D/@cpot////
+A D/@dpot////
+A D/@mpot////
+A D/@scgcpot////
+A D/@scgpot////
+A D/@upot////
+A D/Old////
+A D/Tables////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+/comp_eff_node_sizes.m/1.1.1.1/Wed May 29 15:59:58 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Old/comp_eff_node_sizes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function ens = comp_eff_node_sizes(ns, cnodes, ev, domain)
+
+dnodes = mysetdiff(1:length(ns), cnodes);
+odom = domain(~isemptycell(evidence(domain)));
+cdom = myintersect(cnodes, domain);
+ddom = myintersect(dnodes, domain);
+cobs = myintersect(cdom, odom);
+dobs = myintersect(ddom, odom);
+ens = ns; 
+ens(cobs) = 0;
+ens(dobs) = 1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/README	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,100 @@
+The following kinds of potentials are supported
+- dpot: discrete
+- upot: utility
+- mpot: Gaussian in moment form
+- cpot: Gaussian in canonical form
+- cgpot: conditional (mixture) Gaussian, a list of mpots/cpot
+- scgpot: stable conditional Gaussian, a list of scgcpots
+- scgcpot: just used by scgpot
+
+Many of these are described in the following book
+
+@book{Cowell99,
+  author = "R. G. Cowell and A. P. Dawid and S. L. Lauritzen and D. J. Spiegelhalter",
+  title = "Probabilistic Networks and Expert Systems",
+  year = 1999,
+  publisher = "Springer"
+}
+
+CPD_to_pot converts P(Z|A,B,...) to phi(A,B,...,Z).
+
+A table is like a dpot, except it is a structure, not an object.
+Code that uses tables is faster but less flexible.
+
+                         -----------
+
+A potential is a joint probability distribution on a set of nodes,
+which we call the potential's domain (which is always sorted).
+A potential supports the operations of multiplication and
+marginalization.
+
+If the nodes are discrete, the potential can be represented as a table
+(multi-dimensional array). If the nodes are Gaussian, the potential
+can be represented as a quadratic form. If there are both discrete and
+Gaussian nodes, we use a table of quadratic forms. For details on the
+Gaussian case, see below.
+
+For discrete potentials, the 'sizes' field specifies the number of
+values each node in the domain can take on. For continuous potentials,
+the 'sizes' field specifies the block-size of each node.
+
+If some of the nodes are observed, extra complications arise.  We
+handle the discrete and continuous cases differently.  Suppose the
+domain is [X Y], with sizes [6 2], where X is observed to have value x.
+In the discrete case, the potential will have many zeros in it
+(T(X,:) will be 0 for all X ~= x), which can be inefficient. Instead,
+we set sizes to [1 2], to indicate that X has only one possible value
+(namely x). For continuous nodes, we set sizes = [0 2], to indicate that X no
+longer appears in the mean vector or covariance matrix (we must avoid
+0s in Sigma, lest it be uninvertible). When a potential is created, we
+assume the sizes of the nodes have been adjusted to include the
+evidence. This is so that the evidence can be incorporated at the
+outset, and thereafter the inference algorithms can ignore it.
+
+                         ------------
+
+A Gaussian potential can be represented in terms of its
+moment characteristics (mu, Sigma, logp), or in terms of its canonical
+characteristics (g, h, K). Although the moment characteristics are
+more familiar, it turns out that canonical characteristics are
+more convenient for the junction tree algorithm, for the same kinds of
+reasons why backwards inference in an LDS uses the information form of
+the Kalman filter (see Murphy (1998a) for a discussion).
+
+When working with *conditional* Gaussian potentials, the method proposed
+by Lauritzen (1992), and implemented here, requires converting from
+canonical to moment form before marginalizing the discrete variables,
+and converting back from moment to canonical form before
+multiplying/dividing. A new algorithm, due to Lauritzen and Jensen
+(1999), works exclusively in moment form, and
+hence is more numerically stable. It can also handle 0s in the
+covariance matrix, i.e., deterministic relationships between cts
+variables. However, it has not yet been implemented,
+since it requires major changes to the jtree algorithm.
+
+In Murphy (1998b) we extend Lauritzen (1992) to handle
+vector-valued nodes. This means the vectors and matrices become block
+vectors and matrices. This manifests itself in the code as in the
+following example.
+Suppose we have a potential on nodes dom=[3,4,7] with block sizes=[2,1,3].
+Then nodes 3 and 7 correspond to blocks 1,3 which correspond to indices 1,2,4,5,6.
+>> find_equiv_posns([3 7], dom)=[1,3]
+>> block([1,3],blocks)=[1,2,4,5,6].
+
+For more details, see
+
+- "Filtering and Smoothing in Linear Dynamical Systems using the Junction Tree Algorithm",
+   K. Murphy, 1998a. UCB Tech Report.
+
+- "Inference and learning in hybrid Bayesian networks",
+   K. Murphy. UCB Technical Report CSD-98-990, 1998b.
+
+- "Propagation of probabilities, means and variances in mixed
+  graphical association models", S. L. Lauritzen, 1992, JASA 87(420):1098--1108.
+
+- "Causal probabilistic networks with both discrete and continuous variables",
+  K. G. Olesen, 1993. PAMI 3(15). This discusses implementation details.
+
+- "Stable local computation with Conditional Gaussian distributions",
+  S. Lauritzen and F. Jensen, 1999. Univ. Aalborg Tech Report R-99-2014.
+  www.math.auc.dk/research/Reports.html.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+/divide_by_sparse_table.c/1.1.1.1/Wed May 29 15:59:58 2002//
+/divide_by_table.c/1.1.1.1/Wed May 29 15:59:58 2002//
+/divide_by_table.m/1.1.1.1/Thu Aug  5 15:25:54 2004//
+/extend_domain_table.m/1.1.1.1/Wed Aug  4 15:53:26 2004//
+/marg_sparse_table.c/1.1.1.1/Wed May 29 15:59:58 2002//
+/marg_table.c/1.1.1.1/Wed May 29 15:59:58 2002//
+/marg_table.m/1.1.1.1/Wed Aug  4 15:51:48 2004//
+/marg_tableC.c/1.1.1.1/Wed Oct  2 15:39:02 2002//
+/marg_tableM.m/1.1.1.1/Tue Oct  1 17:39:08 2002//
+/mult_by_sparse_table.c/1.1.1.1/Wed May 29 15:59:58 2002//
+/mult_by_table.c/1.1.1.1/Tue Oct  1 21:23:22 2002//
+/mult_by_table.m/1.1.1.1/Wed Aug  4 15:52:58 2004//
+/mult_by_table2.m/1.1.1.1/Wed Oct  2 15:30:32 2002//
+/mult_by_tableC.c/1.1.1.1/Tue Oct  1 21:33:50 2002//
+/mult_by_tableM.m/1.1.1.1/Wed Oct  2 15:28:48 2002//
+/mult_by_table_global.m/1.1.1.1/Sun Sep 29 10:21:30 2002//
+/rep_mult.c/1.1.1.1/Wed May 29 15:59:58 2002//
+/repmat_and_mult.c/1.1.1.1/Tue Oct  1 21:20:00 2002//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/BNT/potentials/Tables
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/divide_by_sparse_table.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,126 @@
+/* divide_by_sparse_table.c ../potential/tables*/
+
+/******************************************/
+/* 6 input & 1 output                     */
+/* Big table    [0]                       */
+/* Big domain   [1]                       */
+/* big sizes    [2]                       */
+/* Small table  [3]                       */
+/* small domain [4]                       */
+/* small sizes  [5]                       */
+/*                                        */
+/* New big table[0]                       */
+/******************************************/
+
+#include <math.h>
+#include <stdlib.h>
+#include "mex.h"
+
+int compare(const void* src1, const void* src2){
+	int i1 = *(int*)src1 ;
+	int i2 = *(int*)src2 ;
+	return i1-i2 ;
+}
+
+void ind_subv(int index, const int *cumprod, int n, int *bsubv){
+	int i;
+
+	for (i = n-1; i >= 0; i--) {
+		bsubv[i] = ((int)floor(index / cumprod[i]));
+		index = index % cumprod[i];
+	}
+}
+
+int subv_ind(const int n, const int *cumprod, const int *subv){
+	int i, index=0;
+
+	for(i=0; i<n; i++){
+		index += subv[i] * cumprod[i];
+	}
+	return index;
+}
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, j, count, bdim, sdim, NB, NZB, NZS, position, bindex, sindex;
+	int     *mask, *result, *bir, *sir, *bjc, *sjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, value;
+
+	plhs[0] = mxDuplicateArray(prhs[0]);
+	pbDomain = mxGetPr(prhs[1]);
+	bdim = mxGetNumberOfElements(prhs[1]);
+	psDomain = mxGetPr(prhs[4]);
+	sdim = mxGetNumberOfElements(prhs[4]);
+
+	pbSize = mxGetPr(prhs[2]);
+	psSize = mxGetPr(prhs[5]);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	bpr = mxGetPr(plhs[0]);
+	bir = mxGetIr(plhs[0]);
+	bjc = mxGetJc(plhs[0]);
+	NZB = bjc[1];
+
+	spr = mxGetPr(prhs[3]);
+	sir = mxGetIr(prhs[3]);
+	sjc = mxGetJc(prhs[3]);
+	NZS = sjc[1];
+
+	if(sdim == 0){
+		value = *spr;
+		if(value == 0)value = 1;
+		for(i=0; i<NZB; i++){
+			bpr[i] /= value;
+		}	
+		return;
+	}
+
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sir, NZS, sizeof(int), compare);
+		if(result){
+			position = result - sir;
+			bpr[i] /= spr[position];
+		}
+	}
+
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/divide_by_table.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,120 @@
+/* divide_by_table.c  ../potential/tables  */
+
+
+/******************************************/
+/* 6 input & 1 output                     */
+/* Big table    [0]                       */
+/* Big domain   [1]                       */
+/* big sizes    [2]                       */
+/* Small table  [3]                       */
+/* small domain [4]                       */
+/* small sizes  [5]                       */
+/*                                        */
+/* New big table[0]                       */
+/******************************************/
+
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, j, count, NB, NS, siz_b, siz_s, ndim, temp;
+	int     *mask, *sx, *sy, *cpsy, *subs, *s, *cpsy2;
+	double  *pbDomain, *psDomain, *sp, *zp, *bs, value;
+
+	plhs[0] = mxDuplicateArray(prhs[0]);
+	zp = mxGetPr(plhs[0]);
+
+	siz_b = mxGetNumberOfElements(prhs[1]);
+	siz_s = mxGetNumberOfElements(prhs[4]);
+	pbDomain = mxGetPr(prhs[1]);
+	psDomain = mxGetPr(prhs[4]);
+
+	NB = mxGetNumberOfElements(prhs[0]);
+	NS = mxGetNumberOfElements(prhs[3]);
+	sp = mxGetPr(prhs[3]);
+
+	bs = mxGetPr(prhs[2]);
+
+	if(NS == 1){
+		value = *sp;
+		if(value == 0) value = 1;
+		for(i=0; i<NB; i++){
+			zp[i] /= value;
+		}
+		return;
+	}
+
+	if(NS == NB){
+		for(i=0; i<NB; i++){
+			value = sp[i];
+			if(value == 0) value = 1;
+			zp[i] /= value;
+		}
+		return;
+	}
+
+	mask = malloc(siz_s * sizeof(int));
+	count = 0;
+	for(i=0; i<siz_s; i++){
+		for(j=0; j<siz_b; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	ndim = siz_b;
+	sx = (int *)malloc(sizeof(int)*ndim);
+	sy = (int *)malloc(sizeof(int)*ndim);
+	for(i=0; i<ndim; i++){
+		sx[i] = (int)bs[i];
+		sy[i] = 1;
+	}
+	for(i=0; i<count; i++){
+		temp = mask[i];
+		sy[temp] = sx[temp];
+	}
+
+	s = (int *)malloc(sizeof(int)*ndim);
+	*(cpsy = (int *)malloc(sizeof(int)*ndim)) = 1;
+	subs =   (int *)malloc(sizeof(int)*ndim);
+	cpsy2 =  (int *)malloc(sizeof(int)*ndim);
+	for(i = 0; i < ndim; i++){
+		subs[i] = 0;
+		s[i] = sx[i] - 1;
+	}
+			
+	for(i = 0; i < ndim-1; i++){
+		cpsy[i+1] = cpsy[i]*sy[i]--;
+		cpsy2[i] = cpsy[i]*sy[i];
+	}
+	cpsy2[ndim-1] = cpsy[ndim-1]*(--sy[ndim-1]);
+
+	for(j=0; j<NB; j++){
+		value = *sp;
+		if(value == 0) value = 1;
+		*zp++ /= value;
+		for(i = 0; i < ndim; i++){
+			if(subs[i] == s[i]){
+				subs[i] = 0;
+				if(sy[i])
+					sp -= cpsy2[i];
+			}
+			else{
+				subs[i]++;
+				if(sy[i])
+					sp += cpsy[i];
+				break;
+			}
+		}
+	}
+	free(sx);
+	free(sy);
+	free(s);
+	free(cpsy);
+	free(subs);
+	free(cpsy2);
+    free(mask);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/divide_by_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function bigT = divide_by_table(bigT, bigdom, bigsz, smallT, smalldom, smallsz)
+% DIVIDE_BY_TABLE 
+% bigT = divide_by_table(bigT, bigdom, bigsz, smallT, smalldom, smallsz)
+%
+
+
+Ts = extend_domain_table(smallT, smalldom, smallsz, bigdom, bigsz);
+% Replace 0s by 1s before dividing. This is valid, Ts(i)=0 iff Tbig(i)=0.
+Ts = Ts + (Ts==0);
+%Tbig.T(:) = Tbig.T(:) ./ Ts(:);
+bigT(:) = bigT(:) ./ Ts(:);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/extend_domain_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function B = extend_domain_table(A, smalldom, smallsz, bigdom, bigsz)
+% EXTEND_DOMAIN_TABLE Expand an array so it has the desired size.
+% B = extend_domain_table(A, smalldom, smallsz, bigdom, bigsz)
+%
+% A is the array with domain smalldom and sizes smallsz.
+% bigdom is the desired domain, with sizes bigsz.
+%
+% Example:
+% smalldom = [1 3], smallsz = [2 4], bigdom = [1 2 3 4], bigsz = [2 1 4 5],
+% so B(i,j,k,l) = A(i,k) for i in 1:2, j in 1:1, k in 1:4, l in 1:5
+
+if isequal(size(A), [1 1]) % a scalar
+  B = A; % * myones(bigsz);
+  return;
+end
+
+map = find_equiv_posns(smalldom, bigdom);
+sz = ones(1, length(bigdom));
+sz(map) = smallsz;
+B = myreshape(A, sz); % add dimensions for the stuff not in A
+sz = bigsz;
+sz(map) = 1; % don't replicate along A's dimensions
+B = myrepmat(B, sz(:)');
+                           
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/marg_sparse_table.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,181 @@
+/* marg_sparse_table.c ../potential/tables*/
+
+/******************************************/
+/* 5 input & 1 output                     */
+/* Big sparse table                       */
+/* Big domain                             */
+/* Big sizes                              */
+/* onto                                   */
+/* maximize, if missed, maximize=0        */
+/*                                        */
+/* small sparse table                     */
+/******************************************/
+
+#include <math.h>
+#include <stdlib.h>
+#include "mex.h"
+
+int compare(const void* src1, const void* src2){
+	int i1 = *(int*)src1 ;
+	int i2 = *(int*)src2 ;
+	return i1-i2 ;
+}
+
+void ind_subv(int index, const int *cumprod, int n, int *bsubv){
+	int i;
+
+	for (i = n-1; i >= 0; i--) {
+		bsubv[i] = ((int)floor(index / cumprod[i]));
+		index = index % cumprod[i];
+	}
+}
+
+int subv_ind(const int n, const int *cumprod, const int *subv){
+	int i, index=0;
+
+	for(i=0; i<n; i++){
+		index += subv[i] * cumprod[i];
+	}
+	return index;
+}
+
+mxArray* convert_table_to_sparse(const double *Table, const int *sequence, const int nzCounts, const int N){
+	mxArray *spTable;
+	int     i, temp, *irs, *jcs, count=0;
+	double  *sr;
+
+	spTable = mxCreateSparse(N, 1, nzCounts, mxREAL);
+    sr  = mxGetPr(spTable);
+    irs = mxGetIr(spTable);
+    jcs = mxGetJc(spTable);
+
+	jcs[0] = 0;
+	jcs[1] = nzCounts;
+
+	for(i=0; i<nzCounts; i++){
+		irs[i] = sequence[count];
+		count++;
+		temp = sequence[count];
+		sr[i] = Table[temp];
+		count++;
+	}
+	return spTable;
+}
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int        i, j, count, bdim, sdim, NS, NZB, position, bindex, sindex, maximize, nzCounts=0;
+	int        *mask, *sequence, *result, *bir, *bjc, *ssize, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double     *sTable, *pbDomain, *psDomain, *pbSize, *bpr, *spr;
+	const char *field_names[] = {"domain", "T", "sizes"};
+
+	if(nrhs < 5) maximize = 0;
+	else maximize = (int)mxGetScalar(prhs[4]);
+
+	bdim = mxGetNumberOfElements(prhs[1]);
+	sdim = mxGetNumberOfElements(prhs[3]);
+	pbSize = mxGetPr(prhs[2]);
+	pbDomain = mxGetPr(prhs[1]);
+	psDomain = mxGetPr(prhs[3]);
+	bpr = mxGetPr(prhs[0]);
+	bir = mxGetIr(prhs[0]);
+	bjc = mxGetJc(prhs[0]);
+	NZB = bjc[1];
+
+	if(sdim == 0){
+		plhs[0] = mxCreateSparse(1, 1, 1, mxREAL);
+		spr = mxGetPr(plhs[0]);
+		bir = mxGetIr(plhs[0]);
+		bjc = mxGetJc(plhs[0]);
+		*spr = 0;
+		*bir = 0;
+		bjc[0] = 0;
+		bjc[1] = 1;
+		if(maximize){
+			for(i=0; i<NZB; i++){
+				*spr = (*spr < bpr[i])? bpr[i] : *spr;
+			}
+		}
+		else{
+			for(i=0; i<NZB; i++){
+				*spr += bpr[i];
+			}
+		}	
+		return;
+	}
+
+	mask = malloc(sdim * sizeof(int));
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+		
+	sTable = malloc(NZB * sizeof(double));
+	sequence = malloc(NZB * 2 * sizeof(double));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+	ssize = malloc(sdim * sizeof(int));
+
+	NS = 1;
+	for(i=0; i<count; i++){
+		ssize[i] = (int)pbSize[mask[i]];
+		NS *= ssize[i];
+	}
+
+	for(i=0; i<NZB; i++)sTable[i] = 0;
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * ssize[i];
+	}
+
+	count = 0;
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sequence, nzCounts, sizeof(int)*2, compare);
+		if(result){
+			position = (result - sequence) / 2;
+			if(maximize) 
+				sTable[position] = (sTable[position] < bpr[i]) ? bpr[i] : sTable[position];
+			else sTable[position] += bpr[i];
+		}
+		else {
+			if(maximize) 
+				sTable[nzCounts] = (sTable[nzCounts] < bpr[i]) ? bpr[i] : sTable[nzCounts];
+			else sTable[nzCounts] += bpr[i];
+			sequence[count] = sindex;
+			count++;
+			sequence[count] = nzCounts;
+			nzCounts++;
+			count++;
+		}
+	}
+	
+	qsort(sequence, nzCounts, sizeof(int) * 2, compare);
+	plhs[0] = convert_table_to_sparse(sTable, sequence, nzCounts, NS);
+
+	free(sTable);
+	free(sequence);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+	free(ssize);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/marg_table.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,175 @@
+/* marg_table.c  ../potential/tables     */
+
+
+/******************************************/
+/* 5 input & 1 output                     */
+/* Big table                              */
+/* Big domain                             */
+/* Big sizes                              */
+/* onto                                   */
+/* maximize, if missed, maximize=0        */
+/*                                        */
+/* small table                            */
+/******************************************/
+
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, j, count, NB, NS, siz_b, siz_s, ndim, temp, maximize;
+	int     *mask, *sx, *sy, *cpsy, *subs, *s, *cpsy2, *ssize;
+	double  *pb, *ps, *bp, *sp, *pbd;
+
+
+	siz_b = mxGetNumberOfElements(prhs[1]);
+	siz_s = mxGetNumberOfElements(prhs[3]);
+	pb = mxGetPr(prhs[1]);
+	ps = mxGetPr(prhs[3]);
+
+	NB = mxGetNumberOfElements(prhs[0]);
+	bp = mxGetPr(prhs[0]);
+
+	pbd = mxGetPr(prhs[2]);
+
+	if(nrhs < 5) maximize = 0;
+	else maximize = (int)mxGetScalar(prhs[4]);
+
+	if(siz_s == 0){
+		plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
+		sp = mxGetPr(plhs[0]);
+		if(maximize){
+			for(i=0; i<NB; i++){
+				*sp = (*sp < bp[i])? bp[i] : *sp;
+			}
+		}
+		else{
+			for(i=0; i<NB; i++){
+				*sp += bp[i];
+			}
+		}
+		return;
+	}
+
+	mask = malloc(siz_s * sizeof(int));
+	ssize = malloc(siz_s * sizeof(int));
+	count = 0;
+	for(i=0; i<siz_s; i++){
+		for(j=0; j<siz_b; j++){
+			if(ps[i] == pb[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	ndim = siz_b;
+	sx = (int *)malloc(sizeof(int)*ndim);
+	sy = (int *)malloc(sizeof(int)*ndim);
+	for(i=0; i<ndim; i++){
+		sx[i] = (int)pbd[i];
+		sy[i] = 1;
+	}
+	for(i=0; i<siz_s; i++){
+		temp = mask[i];
+		sy[temp] = sx[temp];
+		ssize[i] = sx[temp];
+	}
+
+	NS = 1;
+	for(i=0; i<ndim; i++){
+		NS *= sy[i];
+	}
+
+	plhs[0] = mxCreateNumericArray(siz_s, ssize, mxDOUBLE_CLASS, mxREAL);
+	sp = mxGetPr(plhs[0]);
+
+	if(NS == 1){
+		if(maximize){
+			for(i=0; i<NB; i++){
+				*sp = (*sp < bp[i])? bp[i] : *sp;
+			}
+		}
+		else{
+			for(i=0; i<NB; i++){
+				*sp += bp[i];
+			}
+		}
+		free(mask);
+		free(sx);
+		free(sy);
+		free(ssize);
+		return;
+	}
+
+	if(NS == NB){
+		for(i=0; i<NB; i++) *sp++ = *bp++;
+		free(mask);
+		free(sx);
+		free(sy);
+		free(ssize);
+		return;
+	}
+
+	s = (int *)malloc(sizeof(int)*ndim);
+	*(cpsy = (int *)malloc(sizeof(int)*ndim)) = 1;
+	subs =   (int *)malloc(sizeof(int)*ndim);
+	cpsy2 =  (int *)malloc(sizeof(int)*ndim);
+	for(i = 0; i < ndim; i++){
+		subs[i] = 0;
+		s[i] = sx[i] - 1;
+	}
+			
+	for(i = 0; i < ndim-1; i++){
+		cpsy[i+1] = cpsy[i]*sy[i]--;
+		cpsy2[i] = cpsy[i]*sy[i];
+	}
+	cpsy2[ndim-1] = cpsy[ndim-1]*(--sy[ndim-1]);
+
+	if(maximize){
+		for(j=0; j<NB; j++){
+			*sp = (*sp < *bp)? *bp : *sp;
+			bp++;
+			for(i = 0; i < ndim; i++){
+				if(subs[i] == s[i]){
+					subs[i] = 0;
+					if(sy[i])
+						sp -= cpsy2[i];
+				}
+				else{
+					subs[i]++;
+					if(sy[i])
+						sp += cpsy[i];
+					break;
+				}
+			}
+		}
+	}
+	else{
+		for(j=0; j<NB; j++){
+			*sp += *bp++;
+			for(i = 0; i < ndim; i++){
+				if(subs[i] == s[i]){
+					subs[i] = 0;
+					if(sy[i])
+						sp -= cpsy2[i];
+				}
+				else{
+					subs[i]++;
+					if(sy[i])
+						sp += cpsy[i];
+					break;
+				}
+			}
+		}
+	}
+
+	free(sx);
+	free(sy);
+	free(s);
+	free(cpsy);
+	free(subs);
+	free(cpsy2);
+    free(mask);
+	free(ssize);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/marg_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function smallT = marg_table(bigT, bigdom, bigsz, onto, maximize)
+% MARG_TABLE Marginalize a table
+% smallT = marg_table(bigT, bigdom, bigsz, onto, maximize)
+
+if nargin < 5, maximize = 0; end
+
+
+smallT = myreshape(bigT, bigsz); % make sure it is a multi-dim array
+sum_over = mysetdiff(bigdom, onto);
+ndx = find_equiv_posns(sum_over, bigdom);
+if maximize
+  for i=1:length(ndx)
+    smallT = max(smallT, [], ndx(i));
+  end
+else
+  for i=1:length(ndx)
+    smallT = sum(smallT, ndx(i));
+  end
+end
+
+
+ns = zeros(1, max(bigdom));
+%ns(bigdom) = mysize(bigT); % ignores trailing dimensions of size 1
+ns(bigdom) = bigsz;
+
+smallT = squeeze(smallT); % remove all dimensions of size 1
+smallT = myreshape(smallT, ns(onto)); % put back relevant dims of size 1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/marg_tableC.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,175 @@
+/* marg_table.c  ../potential/tables     */
+
+
+/******************************************/
+/* 5 input & 1 output                     */
+/* Big table                              */
+/* Big domain                             */
+/* Big sizes                              */
+/* onto                                   */
+/* maximize, if missed, maximize=0        */
+/*                                        */
+/* small table                            */
+/******************************************/
+
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, j, count, NB, NS, siz_b, siz_s, ndim, temp, maximize;
+	int     *mask, *sx, *sy, *cpsy, *subs, *s, *cpsy2, *ssize;
+	double  *pb, *ps, *bp, *sp, *pbd;
+
+
+	siz_b = mxGetNumberOfElements(prhs[1]);
+	siz_s = mxGetNumberOfElements(prhs[3]);
+	pb = mxGetPr(prhs[1]);
+	ps = mxGetPr(prhs[3]);
+
+	NB = mxGetNumberOfElements(prhs[0]);
+	bp = mxGetPr(prhs[0]);
+
+	pbd = mxGetPr(prhs[2]);
+
+	if(nrhs < 5) maximize = 0;
+	else maximize = (int)mxGetScalar(prhs[4]);
+
+	if(siz_s == 0){
+		plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
+		sp = mxGetPr(plhs[0]);
+		if(maximize){
+			for(i=0; i<NB; i++){
+				*sp = (*sp < bp[i])? bp[i] : *sp;
+			}
+		}
+		else{
+			for(i=0; i<NB; i++){
+				*sp += bp[i];
+			}
+		}
+		return;
+	}
+
+	mask = malloc(siz_s * sizeof(int));
+	ssize = malloc(siz_s * sizeof(int));
+	count = 0;
+	for(i=0; i<siz_s; i++){
+		for(j=0; j<siz_b; j++){
+			if(ps[i] == pb[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	ndim = siz_b;
+	sx = (int *)malloc(sizeof(int)*ndim);
+	sy = (int *)malloc(sizeof(int)*ndim);
+	for(i=0; i<ndim; i++){
+		sx[i] = (int)pbd[i];
+		sy[i] = 1;
+	}
+	for(i=0; i<siz_s; i++){
+		temp = mask[i];
+		sy[temp] = sx[temp];
+		ssize[i] = sx[temp];
+	}
+
+	NS = 1;
+	for(i=0; i<ndim; i++){
+		NS *= sy[i];
+	}
+
+	plhs[0] = mxCreateNumericArray(siz_s, ssize, mxDOUBLE_CLASS, mxREAL);
+	sp = mxGetPr(plhs[0]);
+
+	if(NS == 1){
+		if(maximize){
+			for(i=0; i<NB; i++){
+				*sp = (*sp < bp[i])? bp[i] : *sp;
+			}
+		}
+		else{
+			for(i=0; i<NB; i++){
+				*sp += bp[i];
+			}
+		}
+		free(mask);
+		free(sx);
+		free(sy);
+		free(ssize);
+		return;
+	}
+
+	if(NS == NB){
+		for(i=0; i<NB; i++) *sp++ = *bp++;
+		free(mask);
+		free(sx);
+		free(sy);
+		free(ssize);
+		return;
+	}
+
+	s = (int *)malloc(sizeof(int)*ndim);
+	*(cpsy = (int *)malloc(sizeof(int)*ndim)) = 1;
+	subs =   (int *)malloc(sizeof(int)*ndim);
+	cpsy2 =  (int *)malloc(sizeof(int)*ndim);
+	for(i = 0; i < ndim; i++){
+		subs[i] = 0;
+		s[i] = sx[i] - 1;
+	}
+			
+	for(i = 0; i < ndim-1; i++){
+		cpsy[i+1] = cpsy[i]*sy[i]--;
+		cpsy2[i] = cpsy[i]*sy[i];
+	}
+	cpsy2[ndim-1] = cpsy[ndim-1]*(--sy[ndim-1]);
+
+	if(maximize){
+		for(j=0; j<NB; j++){
+			*sp = (*sp < *bp)? *bp : *sp;
+			bp++;
+			for(i = 0; i < ndim; i++){
+				if(subs[i] == s[i]){
+					subs[i] = 0;
+					if(sy[i])
+						sp -= cpsy2[i];
+				}
+				else{
+					subs[i]++;
+					if(sy[i])
+						sp += cpsy[i];
+					break;
+				}
+			}
+		}
+	}
+	else{
+		for(j=0; j<NB; j++){
+			*sp += *bp++;
+			for(i = 0; i < ndim; i++){
+				if(subs[i] == s[i]){
+					subs[i] = 0;
+					if(sy[i])
+						sp -= cpsy2[i];
+				}
+				else{
+					subs[i]++;
+					if(sy[i])
+						sp += cpsy[i];
+					break;
+				}
+			}
+		}
+	}
+
+	free(sx);
+	free(sy);
+	free(s);
+	free(cpsy);
+	free(subs);
+	free(cpsy2);
+    free(mask);
+	free(ssize);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/marg_tableM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function smallT = marg_tableM(bigT, bigdom, bigsz, onto, maximize)
+% MARG_TABLE Marginalize a table
+% smallT = marg_table(bigT, bigdom, bigsz, onto, maximize)
+
+  % marg_tableM is the same as marg_table.m, but we are sure
+  % it is not marg_table.c
+
+if nargin < 5, maximize = 0; end
+
+
+smallT = myreshape(bigT, bigsz); % make sure it is a multi-dim array
+sum_over = mysetdiff(bigdom, onto);
+ndx = find_equiv_posns(sum_over, bigdom);
+if maximize
+  for i=1:length(ndx)
+    smallT = max(smallT, [], ndx(i));
+  end
+else
+  for i=1:length(ndx)
+    smallT = sum(smallT, ndx(i));
+  end
+end
+
+
+ns = zeros(1, max(bigdom));
+%ns(bigdom) = mysize(bigT); % ignores trailing dimensions of size 1
+ns(bigdom) = bigsz;
+
+smallT = squeeze(smallT); % remove all dimensions of size 1
+smallT = myreshape(smallT, ns(onto)); % put back relevant dims of size 1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_sparse_table.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,155 @@
+/* mult_by_sparse_table.c ../potential/tables*/
+
+
+/******************************************/
+/* 6 input & 1 output                     */
+/* Big table    [0]                       */
+/* Big domain   [1]                       */
+/* big sizes    [2]                       */
+/* Small table  [3]                       */
+/* small domain [4]                       */
+/* small sizes  [5]                       */
+/*                                        */
+/* New big table[0]                       */
+/******************************************/
+
+#include <math.h>
+#include <stdlib.h>
+#include "mex.h"
+
+int compare(const void* src1, const void* src2){
+	int i1 = *(int*)src1 ;
+	int i2 = *(int*)src2 ;
+	return i1-i2 ;
+}
+
+void ind_subv(int index, const int *cumprod, int n, int *bsubv){
+	int i;
+
+	for (i = n-1; i >= 0; i--) {
+		bsubv[i] = ((int)floor(index / cumprod[i]));
+		index = index % cumprod[i];
+	}
+}
+
+int subv_ind(const int n, const int *cumprod, const int *subv){
+	int i, index=0;
+
+	for(i=0; i<n; i++){
+		index += subv[i] * cumprod[i];
+	}
+	return index;
+}
+
+void reset_nzmax(mxArray *spArray, const int old_nzmax, const int new_nzmax){
+	double *ptr;
+	void   *newptr;
+	int    *ir, *jc;
+	int    nbytes;
+
+	if(new_nzmax == old_nzmax) return;
+	nbytes = new_nzmax * sizeof(*ptr);
+	ptr = mxGetPr(spArray);
+	newptr = mxRealloc(ptr, nbytes);
+	mxSetPr(spArray, newptr);
+	nbytes = new_nzmax * sizeof(*ir);
+	ir = mxGetIr(spArray);
+	newptr = mxRealloc(ir, nbytes);
+	mxSetIr(spArray, newptr);
+	jc = mxGetJc(spArray);
+	jc[0] = 0;
+	jc[1] = new_nzmax;
+	mxSetNzmax(spArray, new_nzmax);
+}
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+	int     i, j, count, bdim, sdim, NB, NZB, NZS, position, bindex, sindex, nzCounts=0;
+	int     *mask, *result, *bir, *sir, *rir, *bjc, *sjc, *rjc, *bCumprod, *sCumprod, *bsubv, *ssubv;
+	double  *pbDomain, *psDomain, *pbSize, *psSize, *bpr, *spr, *rpr;
+
+	pbDomain = mxGetPr(prhs[1]);
+	bdim = mxGetNumberOfElements(prhs[1]);
+	psDomain = mxGetPr(prhs[4]);
+	sdim = mxGetNumberOfElements(prhs[4]);
+
+	pbSize = mxGetPr(prhs[2]);
+	psSize = mxGetPr(prhs[5]);
+
+	NB = 1;
+	for(i=0; i<bdim; i++){
+		NB *= (int)pbSize[i];
+	}
+
+	bpr = mxGetPr(prhs[0]);
+	bir = mxGetIr(prhs[0]);
+	bjc = mxGetJc(prhs[0]);
+	NZB = bjc[1];
+
+	spr = mxGetPr(prhs[3]);
+	sir = mxGetIr(prhs[3]);
+	sjc = mxGetJc(prhs[3]);
+	NZS = sjc[1];
+
+	plhs[0] = mxDuplicateArray(prhs[0]);
+	rpr = mxGetPr(plhs[0]);
+	rir = mxGetIr(plhs[0]);
+	rjc = mxGetJc(plhs[0]);
+	rjc[0] = 0;
+	rjc[1] = NZB;
+
+	if(sdim == 0){
+		for(i=0; i<NZB; i++){
+			rpr[i] *= *spr;
+		}	
+		return;
+	}
+
+	mask = malloc(sdim * sizeof(int));
+	bCumprod = malloc(bdim * sizeof(int));
+	sCumprod = malloc(sdim * sizeof(int));
+	bsubv = malloc(bdim * sizeof(int));
+	ssubv = malloc(sdim * sizeof(int));
+
+	count = 0;
+	for(i=0; i<sdim; i++){
+		for(j=0; j<bdim; j++){
+			if(psDomain[i] == pbDomain[j]){
+				mask[count] = j;
+				count++;
+				break;
+			}
+		}
+	}
+	
+	bCumprod[0] = 1;
+	for(i=0; i<bdim-1; i++){
+		bCumprod[i+1] = bCumprod[i] * (int)pbSize[i];
+	}
+	sCumprod[0] = 1;
+	for(i=0; i<sdim-1; i++){
+		sCumprod[i+1] = sCumprod[i] * (int)psSize[i];
+	}
+
+	for(i=0; i<NZB; i++){
+		bindex = bir[i];
+		ind_subv(bindex, bCumprod, bdim, bsubv);
+		for(j=0; j<sdim; j++){
+			ssubv[j] = bsubv[mask[j]];
+		}
+		sindex = subv_ind(sdim, sCumprod, ssubv);
+		result = (int *) bsearch(&sindex, sir, NZS, sizeof(int), compare);
+		if(result){
+			position = result - sir;
+			rpr[nzCounts] = bpr[i] * spr[position];
+			rir[nzCounts] = bindex;
+			nzCounts++;
+		}
+	}
+
+	reset_nzmax(plhs[0], NZB, nzCounts);
+	free(mask);
+	free(bCumprod);
+	free(sCumprod);
+	free(bsubv);
+	free(ssubv);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_table.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,114 @@
+/* mult_by_table.c  ../potential/tables  */
+
+
+/******************************************/
+/* 6 input & 1 output                     */
+/* Big table    [0]                       */
+/* Big domain   [1]                       */
+/* big sizes    [2]                       */
+/* Small table  [3]                       */
+/* small domain [4]                       */
+/* small sizes  [5]                       */
+/*                                        */
+/* New big table[0]                       */
+/******************************************/
+
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+  int     i, j, count, NB, NS, siz_b, siz_s, ndim, temp;
+  int     *mask, *sx, *sy, *cpsy, *subs, *s, *cpsy2;
+  double  *pbDomain, *psDomain, *sp, *zp, *bs;
+  
+  plhs[0] = mxDuplicateArray(prhs[0]);
+  zp = mxGetPr(plhs[0]);
+  
+  siz_b = mxGetNumberOfElements(prhs[1]);
+  siz_s = mxGetNumberOfElements(prhs[4]);
+  pbDomain = mxGetPr(prhs[1]);
+  psDomain = mxGetPr(prhs[4]);
+  
+  NB = mxGetNumberOfElements(prhs[0]);
+  NS = mxGetNumberOfElements(prhs[3]);
+  sp = mxGetPr(prhs[3]);
+  
+  bs = mxGetPr(prhs[2]);
+  
+  if(NS == 1){
+    for(i=0; i<NB; i++){
+      zp[i] *= *sp;
+    }
+    return;
+  }
+  
+  if(NS == NB){
+    for(i=0; i<NB; i++){
+      zp[i] *= sp[i];
+    }
+    return;
+  }
+  
+  mask = malloc(siz_s * sizeof(int));
+  count = 0;
+  for(i=0; i<siz_s; i++){
+    for(j=0; j<siz_b; j++){
+      if(psDomain[i] == pbDomain[j]){
+	mask[count] = j;
+	count++;
+	break;
+      }
+    }
+  }
+  
+  ndim = siz_b;
+  sx = (int *)malloc(sizeof(int)*ndim);
+  sy = (int *)malloc(sizeof(int)*ndim);
+  for(i=0; i<ndim; i++){
+    sx[i] = (int)bs[i];
+    sy[i] = 1;
+  }
+  for(i=0; i<count; i++){
+    temp = mask[i];
+    sy[temp] = sx[temp];
+  }
+  
+  s = (int *)malloc(sizeof(int)*ndim);
+  *(cpsy = (int *)malloc(sizeof(int)*ndim)) = 1;
+  subs =   (int *)malloc(sizeof(int)*ndim);
+  cpsy2 =  (int *)malloc(sizeof(int)*ndim);
+  for(i = 0; i < ndim; i++){
+    subs[i] = 0;
+    s[i] = sx[i] - 1;
+  }
+  
+  for(i = 0; i < ndim-1; i++){
+    cpsy[i+1] = cpsy[i]*sy[i]--;
+    cpsy2[i] = cpsy[i]*sy[i];
+  }
+  cpsy2[ndim-1] = cpsy[ndim-1]*(--sy[ndim-1]);
+  
+  for(j=0; j<NB; j++){
+    *zp++ *= *sp;
+    for(i = 0; i < ndim; i++){
+      if(subs[i] == s[i]){
+	subs[i] = 0;
+	if(sy[i])
+	  sp -= cpsy2[i];
+      }
+      else{
+	subs[i]++;
+	if(sy[i])
+	  sp += cpsy[i];
+	break;
+      }
+    }
+  }
+  free(sx);
+  free(sy);
+  free(s);
+  free(cpsy);
+  free(subs);
+  free(cpsy2);
+  free(mask);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function bigT = mult_by_table(bigT, bigdom, bigsz, smallT, smalldom, smallsz)
+% MULT_BY_TABLE 
+% bigT = mult_by_table(bigT, bigdom, bigsz, smallT, smalldom, smallsz)
+%
+
+Ts = extend_domain_table(smallT, smalldom, smallsz, bigdom, bigsz);
+bigT(:) = bigT(:) .* Ts(:); % must have bigT(:) on LHS to preserve shape
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_table2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function bigT = mult_by_table2(bigT, bigdom, bigsz, smallT, smalldom, smallsz)
+% MULT_BY_TABLE 
+% bigT = mult_by_table(bigT, bigdom, bigsz, smallT, smalldom, smallsz)
+%
+
+%Ts = extend_domain_table(smallT, smalldom, smallsz, bigdom, bigsz);
+%bigT(:) = bigT(:) .* Ts(:); % must have bigT(:) on LHS to preserve shape
+
+% extend_domain_table has a lot of overhead for small tables,
+% since it calls myreshape and myrepmat, which check for 1 dimensional case.
+% Here, we check up front.
+
+if length(bigdom)==1 % vector
+  bigT = bigT .* smallT; % smallT can be scalar or vector
+else
+  if (length(bigsz) == length(smallsz)) & all(bigsz == smallsz)
+    bigT = bigT .* smallT;
+  else
+    map = find_equiv_posns(smalldom, bigdom);
+    sz = ones(1, length(bigdom));
+    sz(map) = smallsz;
+    smallT = reshape(smallT, sz); % add dimensions of size 1 for missing domain
+    % we can use reshape instead of myreshape, because we know length(sz)>1
+    sz = bigsz;
+    sz(map) = 1; % don't replicate along small domain, which is shared
+    % we can use repmat instead of myrepmat, because we know length(sz)>1
+    smallT = repmat(smallT, sz(:)');
+    bigT(:) = bigT(:) .* smallT(:);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_tableC.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,114 @@
+/* mult_by_table.c  ../potential/tables  */
+
+
+/******************************************/
+/* 6 input & 1 output                     */
+/* Big table    [0]                       */
+/* Big domain   [1]                       */
+/* big sizes    [2]                       */
+/* Small table  [3]                       */
+/* small domain [4]                       */
+/* small sizes  [5]                       */
+/*                                        */
+/* New big table[0]                       */
+/******************************************/
+
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+  int     i, j, count, NB, NS, siz_b, siz_s, ndim, temp;
+  int     *mask, *sx, *sy, *cpsy, *subs, *s, *cpsy2;
+  double  *pbDomain, *psDomain, *sp, *zp, *bs;
+  
+  plhs[0] = mxDuplicateArray(prhs[0]);
+  zp = mxGetPr(plhs[0]);
+  
+  siz_b = mxGetNumberOfElements(prhs[1]);
+  siz_s = mxGetNumberOfElements(prhs[4]);
+  pbDomain = mxGetPr(prhs[1]);
+  psDomain = mxGetPr(prhs[4]);
+  
+  NB = mxGetNumberOfElements(prhs[0]);
+  NS = mxGetNumberOfElements(prhs[3]);
+  sp = mxGetPr(prhs[3]);
+  
+  bs = mxGetPr(prhs[2]);
+  
+  if(NS == 1){
+    for(i=0; i<NB; i++){
+      zp[i] *= *sp;
+    }
+    return;
+  }
+  
+  if(NS == NB){
+    for(i=0; i<NB; i++){
+      zp[i] *= sp[i];
+    }
+    return;
+  }
+  
+  mask = malloc(siz_s * sizeof(int));
+  count = 0;
+  for(i=0; i<siz_s; i++){
+    for(j=0; j<siz_b; j++){
+      if(psDomain[i] == pbDomain[j]){
+	mask[count] = j;
+	count++;
+	break;
+      }
+    }
+  }
+  
+  ndim = siz_b;
+  sx = (int *)malloc(sizeof(int)*ndim);
+  sy = (int *)malloc(sizeof(int)*ndim);
+  for(i=0; i<ndim; i++){
+    sx[i] = (int)bs[i];
+    sy[i] = 1;
+  }
+  for(i=0; i<count; i++){
+    temp = mask[i];
+    sy[temp] = sx[temp];
+  }
+  
+  s = (int *)malloc(sizeof(int)*ndim);
+  *(cpsy = (int *)malloc(sizeof(int)*ndim)) = 1;
+  subs =   (int *)malloc(sizeof(int)*ndim);
+  cpsy2 =  (int *)malloc(sizeof(int)*ndim);
+  for(i = 0; i < ndim; i++){
+    subs[i] = 0;
+    s[i] = sx[i] - 1;
+  }
+  
+  for(i = 0; i < ndim-1; i++){
+    cpsy[i+1] = cpsy[i]*sy[i]--;
+    cpsy2[i] = cpsy[i]*sy[i];
+  }
+  cpsy2[ndim-1] = cpsy[ndim-1]*(--sy[ndim-1]);
+  
+  for(j=0; j<NB; j++){
+    *zp++ *= *sp;
+    for(i = 0; i < ndim; i++){
+      if(subs[i] == s[i]){
+	subs[i] = 0;
+	if(sy[i])
+	  sp -= cpsy2[i];
+      }
+      else{
+	subs[i]++;
+	if(sy[i])
+	  sp += cpsy[i];
+	break;
+      }
+    }
+  }
+  free(sx);
+  free(sy);
+  free(s);
+  free(cpsy);
+  free(subs);
+  free(cpsy2);
+  free(mask);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_tableM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function bigT = mult_by_table(bigT, bigdom, bigsz, smallT, smalldom, smallsz)
+% MULT_BY_TABLE 
+% bigT = mult_by_table(bigT, bigdom, bigsz, smallT, smalldom, smallsz)
+%
+
+Ts = extend_domain_table(smallT, smalldom, smallsz, bigdom, bigsz);
+bigT(:) = bigT(:) .* Ts(:); % must have bigT(:) on LHS to preserve shape
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/mult_by_table_global.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function mult_by_table_global(bigT, bigdom, bigsz, smallT, smalldom, smallsz)
+
+% all arguments are read only
+global NEWBIGT_GLOBAL
+
+Ts = extend_domain_table(smallT, smalldom, smallsz, bigdom, bigsz);
+NEWBIGT_GLOBAL = bigT(:) .* Ts(:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/rep_mult.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,92 @@
+/* rep_mult.c  repmat first two operands to the size provided by */
+/* the third operand, then perform point multiply                */
+/* 3 input, 1 output                                             */
+/* C = rep_mult(A, B, sizes)                                     */
+
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+	double		*xp, *yp, *zp, *pSizes;
+	int			xnd, ynd, numElements = 1;
+	const int	*xdim, *ydim;
+	int         i, j, ndim;
+	int			*s, *sx, *sy, *cpsx, *cpsy;
+	int			*subs, *s1, *cpsx2, *cpsy2;
+
+	if (nrhs != 3)
+		mexErrMsgTxt("Incorrect number of inputs.");
+	
+	if (nlhs > 1)
+		mexErrMsgTxt("Too many output arguments.");
+	
+	xnd = mxGetNumberOfDimensions(prhs[0]);
+	ynd = mxGetNumberOfDimensions(prhs[1]);
+	xdim = mxGetDimensions(prhs[0]);
+	ydim = mxGetDimensions(prhs[1]);
+	ndim = mxGetNumberOfElements(prhs[2]);
+
+	pSizes = mxGetPr(prhs[2]);
+
+	sx = (int *)malloc(sizeof(int)*ndim);
+	sy = (int *)malloc(sizeof(int)*ndim);
+	s =  (int *)malloc(sizeof(int)*ndim);
+	s1 = (int *)malloc(sizeof(int)*ndim);
+	*(cpsx = (int *)malloc(sizeof(int)*ndim)) = 1;
+	*(cpsy = (int *)malloc(sizeof(int)*ndim)) = 1;
+	subs =   (int *)malloc(sizeof(int)*ndim);
+	cpsx2 =  (int *)malloc(sizeof(int)*ndim);
+	cpsy2 =  (int *)malloc(sizeof(int)*ndim);
+	for(i=0; i<ndim; i++){
+		subs[i] = 0;
+		sx[i] = (i < xnd) ? xdim[i] : 1;
+		sy[i] = (i < ynd) ? ydim[i] : 1;
+		s[i] = (int)pSizes[i];
+		s1[i] = s[i] - 1;
+		numElements *= s[i];
+	}
+				
+	for(i=0; i<ndim-1; i++){
+		cpsx[i+1] = cpsx[i]*sx[i]--;
+		cpsy[i+1] = cpsy[i]*sy[i]--;
+		cpsx2[i] = cpsx[i]*sx[i];
+		cpsy2[i] = cpsy[i]*sy[i];
+	}
+	cpsx2[ndim-1] = cpsx[ndim-1]*(--sx[ndim-1]);
+	cpsy2[ndim-1] = cpsy[ndim-1]*(--sy[ndim-1]);
+	
+	plhs[0] = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxREAL);
+	zp = mxGetPr(plhs[0]);
+	xp = mxGetPr(prhs[0]);
+	yp = mxGetPr(prhs[1]);
+
+	for(j=0; j<numElements; j++){
+		*zp++ = *xp * *yp;
+		for(i=0; i<ndim; i++){
+			if(subs[i] == s1[i]){
+				subs[i] = 0;
+				if(sx[i])
+					xp -= cpsx2[i];
+				if(sy[i])
+					yp -= cpsy2[i];
+			}
+			else{
+				subs[i]++;
+				if(sx[i])
+					xp += cpsx[i];
+				if(sy[i])
+					yp += cpsy[i];
+				break;
+			}
+		}
+	}
+	free(sx);
+	free(sy);
+	free(s);
+	free(s1);
+	free(cpsx);
+	free(cpsy);
+	free(subs);
+	free(cpsx2);
+	free(cpsy2);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/Tables/repmat_and_mult.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+/****************************************************
+A = mult_by_array(big, small)
+implicitely copies small |big|/|small| times 
+and then does element-wise multiplication.
+
+i.e.,
+C = repmat(small(:), 1, length(big(:))/length(small(:)))
+A = reshape(big(:) .* C(:), size(big))
+
+However, this C version avoids the expense of the repmat.
+
+Written by wei.hu@intel.com, 28 Jan 2002.
+/****************************************************/
+
+
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+  double		*sp, *zp;
+  int			i, j, NB, NS, xnd, ynd, ndim;
+  const int	*xdim, *ydim;
+  int			*s, *sx, *sy, *cpsy, *subs, *cpsy2;
+  
+  if (nrhs != 2)
+    mexErrMsgTxt("Incorrect number of inputs.");
+  
+  if (nlhs > 1)
+    mexErrMsgTxt("Too many output arguments.");
+  
+  plhs[0] = mxDuplicateArray(prhs[0]);
+  zp = mxGetPr(plhs[0]);
+  sp = mxGetPr(prhs[1]);
+  
+  xnd = mxGetNumberOfDimensions(prhs[0]);
+  ynd = mxGetNumberOfDimensions(prhs[1]);
+  xdim = mxGetDimensions(prhs[0]);
+  ydim = mxGetDimensions(prhs[1]);
+  ndim = xnd;
+  
+  NB = mxGetNumberOfElements(prhs[0]);
+  NS = mxGetNumberOfElements(prhs[1]);
+  
+  if(NS == 1){
+    for(i=0; i<NB; i++){
+      *zp++ *= *sp;
+    }
+    return;
+  }
+  
+  if(NS == NB){
+    for(i=0; i<NB; i++){
+      *zp++ *= *sp++;
+    }
+    return;
+  }
+  
+  sx = (int *)malloc(sizeof(int)*ndim);
+  sy = (int *)malloc(sizeof(int)*ndim);
+  s =  (int *)malloc(sizeof(int)*ndim);
+  *(cpsy = (int *)malloc(sizeof(int)*ndim)) = 1;
+  subs =   (int *)malloc(sizeof(int)*ndim);
+  cpsy2 =  (int *)malloc(sizeof(int)*ndim);
+  for(i=0; i<ndim; i++){
+    subs[i] = 0;
+    sx[i] = xdim[i];
+    sy[i] = (i < ynd) ? ydim[i] : 1;
+    s[i] = sx[i] - 1;
+  }
+  
+  for (i = 0; i < ndim-1; i++){
+    cpsy[i+1] = cpsy[i]*sy[i]--;
+    cpsy2[i] = cpsy[i]*sy[i];
+  }
+  cpsy2[ndim-1] = cpsy[ndim-1]*(--sy[ndim-1]);
+  
+  for(j=0; j<NB; j++){
+    *zp++ *= *sp;
+    for(i=0; i<ndim; i++){
+      if(subs[i] == s[i]){
+	subs[i] = 0;
+	if(sy[i]) sp -= cpsy2[i];
+      }
+      else{
+	subs[i]++;
+	if(sy[i]) sp += cpsy[i];
+	break;
+      }
+    }
+  }
+  free(sx);
+  free(sy);
+  free(s);
+  free(cpsy);
+  free(subs);
+  free(cpsy2);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/check_for_cd_arcs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function check_for_cd_arcs(onodes, cnodes, dag)
+% CHECK_FOR_CD_ARCS Raise an error if there are any C->D links where the C node is hidden.
+% check_for_cd_arcs(onodes, cnodes, dag)
+%
+% We cannot convert the logistic/softmax function (C->D CPD) to a Gaussian potential
+% unless we use the variational approximation discussed in 
+% "A variational approximation for Bayesian networks with discrete and continuous latent
+% variables", K. Murphy, UAI 1999.
+
+n = length(dag);
+hnodes = mysetdiff(1:n, onodes);
+chid = myintersect(cnodes, hnodes);
+dnodes = mysetdiff(1:n, cnodes);
+for i=chid(:)'
+  dcs = myintersect(children(dag, i), dnodes);
+  if ~isempty(dcs)
+    error(['hidden cts node ' num2str(i) ' has a discrete child']);
+  end
+end
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/determine_pot_type.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function pot_type = determine_pot_type(model, onodes, nodes)
+% DETERMINE_POT_TYPE Determine the type of potential based on the evidence pattern.
+% pot_type = determine_pot_type(model, onodes, nodes)
+%
+% If there are any utility nodes, pot_type = 'u'
+% else
+% If all hidden nodes are discrete, pot_type = 'd'.
+% If all hidden nodes are continuous, pot_type = 'g' (Gaussian).
+% If some hidden nodes are discrete, and some cts, pot_type = 'cg' (conditional Gaussian).
+%
+% nodes defaults to all nodes in graph
+
+nnodes = length(model.node_sizes);
+if nargin < 3, nodes = 1:nnodes; end
+
+hnodes = mysetdiff(nodes, onodes);
+if isfield(model, 'limid') %~isempty(model.utility_nodes)
+  pot_type = 'u';
+elseif isempty(myintersect(model.cnodes, hnodes))
+  pot_type = 'd';
+elseif mysubset(hnodes, model.cnodes)
+  pot_type = 'g';
+else
+  pot_type = 'cg';
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/genops.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,707 @@
+/*
+
+	GENOPS.C
+		Generalized arithmetic operators overloading built-in functions.
+
+	written by Douglas M. Schwarz
+	schwarz@servtech.com
+	26 December 1998
+	Last modified: 2 April 1999
+
+	Copyright 1998-1999 by Douglas M. Schwarz.  All rights reserved.
+
+*/
+
+
+/*
+
+Build MEX file by entering the appropriate command at the MATLAB prompt
+(-D<name> option is equivalent to #define <name> in source file):
+
+mex genops.c -DPLUS_MEX -output plus
+mex genops.c -DMINUS_MEX -output minus
+mex genops.c -DTIMES_MEX -output times
+mex genops.c -DRDIVIDE_MEX -output rdivide
+mex genops.c -DLDIVIDE_MEX -output ldivide
+mex genops.c -DPOWER_MEX -output power
+mex genops.c -DEQ_MEX -output eq
+mex genops.c -DNE_MEX -output ne
+mex genops.c -DLT_MEX -output lt
+mex genops.c -DGT_MEX -output gt
+mex genops.c -DLE_MEX -output le
+mex genops.c -DGE_MEX -output ge
+
+*/
+
+/*	This file has been formatted for a tab equal to 4 spaces. */
+
+#if defined(EQ_MEX) || defined(NE_MEX) || defined(LT_MEX) || defined(GT_MEX) \
+		|| defined(LE_MEX) || defined(GE_MEX)
+#define	RELOP_MEX
+#endif
+
+#include "mex.h"
+#include "matrix.h"
+#ifdef POWER_MEX
+#include <math.h>
+#define PI 3.141592653589793
+#endif
+
+bool allequal(int, const int *, const int *);
+void removeZeroImag(double *, double *, int, const int *, int, mxArray **);
+
+#define	xMat  prhs[0]
+#define	yMat  prhs[1]
+#define	zMat  plhs[0]
+
+#define	min(A,B)  ((A) < (B) ? (A) : (B))
+#define	max(A,B)  ((A) > (B) ? (A) : (B))
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+	double		*xrp, *xip, *yrp, *yip;
+#ifndef RELOP_MEX
+	double		*zr, *zi, *zip;
+#endif
+	double		*zrp, *zrend;
+	int			xnd, ynd, numElements = 1;
+	const int	*xdim, *ydim;
+	bool		xcmplx, ycmplx;
+	mxClassID	yclass;
+	int			*s, ndim, *sx, *sy, i, *cpsx, *cpsy;
+	int			*subs, *s1, *cpsx2, *cpsy2;
+	int			ix = 0, iy = 0;
+	mxArray		*args[3], *result[1];
+#if defined(RDIVIDE_MEX) || defined(LDIVIDE_MEX)
+	double		denom;
+#endif
+#ifdef POWER_MEX
+	double		mag, theta, phi, magx;
+	int			flops = 0;
+#endif
+	
+	
+	if (nrhs != 2)
+		mexErrMsgTxt("Incorrect number of inputs.");
+	
+	if (nlhs > 1)
+		mexErrMsgTxt("Too many output arguments.");
+	
+	xnd = mxGetNumberOfDimensions(xMat);
+	ynd = mxGetNumberOfDimensions(yMat);
+	xdim = mxGetDimensions(xMat);
+	ydim = mxGetDimensions(yMat);
+	
+	yclass = mxGetClassID(yMat);
+	
+/*	If the built-in function in MATLAB can handle the arguments
+	then use that. */
+	if (yclass != mxDOUBLE_CLASS || 
+		(xnd == 2  &&  xdim[0] == 1  &&  xdim[1] == 1) || 
+		(ynd == 2  &&  ydim[0] == 1  &&  ydim[1] == 1) || 
+		(xnd == ynd  &&  allequal(xnd,xdim,ydim)))
+	{
+#ifdef PLUS_MEX
+		args[0] = mxCreateString("plus");
+#elif defined(MINUS_MEX)
+		args[0] = mxCreateString("minus");
+#elif defined(TIMES_MEX)
+		args[0] = mxCreateString("times");
+#elif defined(RDIVIDE_MEX)
+		args[0] = mxCreateString("rdivide");
+#elif defined(LDIVIDE_MEX)
+		args[0] = mxCreateString("ldivide");
+#elif defined(POWER_MEX)
+		args[0] = mxCreateString("power");
+#elif defined(EQ_MEX)
+		args[0] = mxCreateString("eq");
+#elif defined(NE_MEX)
+		args[0] = mxCreateString("ne");
+#elif defined(LT_MEX)
+		args[0] = mxCreateString("lt");
+#elif defined(GT_MEX)
+		args[0] = mxCreateString("gt");
+#elif defined(LE_MEX)
+		args[0] = mxCreateString("le");
+#elif defined(GE_MEX)
+		args[0] = mxCreateString("ge");
+#endif
+		args[1] = (mxArray *)xMat;
+		args[2] = (mxArray *)yMat;
+		mexCallMATLAB(1, result, 3, args, "builtin");
+		mxDestroyArray(args[0]);
+		zMat = result[0];
+	}
+	else  /* X and Y are both N-D and different dimensionality. */
+	{
+		ndim = max(xnd,ynd);
+		sx = (int *)mxMalloc(sizeof(int)*ndim);
+		sy = (int *)mxMalloc(sizeof(int)*ndim);
+		s =  (int *)mxMalloc(sizeof(int)*ndim);
+		s1 = (int *)mxMalloc(sizeof(int)*ndim);
+		*(cpsx = (int *)mxMalloc(sizeof(int)*ndim)) = 1;
+		*(cpsy = (int *)mxMalloc(sizeof(int)*ndim)) = 1;
+		subs =   (int *)mxMalloc(sizeof(int)*ndim);
+		cpsx2 =  (int *)mxMalloc(sizeof(int)*ndim);
+		cpsy2 =  (int *)mxMalloc(sizeof(int)*ndim);
+		for (i = 0; i < ndim; i++)
+		{
+			subs[i] = 0;
+			sx[i] = (i < xnd) ? xdim[i] : 1;
+			sy[i] = (i < ynd) ? ydim[i] : 1;
+			if (sx[i] == sy[i])
+				s[i] = sx[i];
+			else if (sx[i] == 1)
+				s[i] = sy[i];
+			else if (sy[i] == 1)
+				s[i] = sx[i];
+			else
+			{
+				mxFree(sx);
+				mxFree(sy);
+				mxFree(s);
+				mxFree(s1);
+				mxFree(cpsx);
+				mxFree(cpsy);
+				mxFree(subs);
+				mxFree(cpsx2);
+				mxFree(cpsy2);
+				mexErrMsgTxt("Array dimensions are not appropriate.");
+			}
+			s1[i] = s[i] - 1;
+			numElements *= s[i];
+		}
+				
+		for (i = 0; i < ndim-1; i++)
+		{
+			cpsx[i+1] = cpsx[i]*sx[i]--;
+			cpsy[i+1] = cpsy[i]*sy[i]--;
+			cpsx2[i] = cpsx[i]*sx[i];
+			cpsy2[i] = cpsy[i]*sy[i];
+		}
+		cpsx2[ndim-1] = cpsx[ndim-1]*(--sx[ndim-1]);
+		cpsy2[ndim-1] = cpsy[ndim-1]*(--sy[ndim-1]);
+		
+		xcmplx = mxIsComplex(xMat);
+		ycmplx = mxIsComplex(yMat);
+		
+		if (!xcmplx && !ycmplx)  /* X and Y both N-D, both real. */
+		{
+#ifdef POWER_MEX
+			zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxCOMPLEX);
+			zrp = zr = mxGetPr(zMat);
+			zip = zi = mxGetPi(zMat);
+#elif defined(RELOP_MEX)
+			zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxREAL);
+			mxSetLogical(zMat);
+			zrp = mxGetPr(zMat);
+#else
+			zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxREAL);
+			zrp = mxGetPr(zMat);
+#endif
+			xrp = mxGetPr(xMat);
+			yrp = mxGetPr(yMat);
+			zrend = zrp + numElements;
+			while (zrp < zrend)
+			{
+#ifdef PLUS_MEX
+				*zrp++ = *xrp + *yrp;
+#elif defined(MINUS_MEX)
+				*zrp++ = *xrp - *yrp;
+#elif defined(TIMES_MEX)
+				*zrp++ = *xrp * *yrp;
+#elif defined(RDIVIDE_MEX)
+				*zrp++ = *xrp / *yrp;
+#elif defined(LDIVIDE_MEX)
+				*zrp++ = *yrp / *xrp;
+#elif defined(POWER_MEX)
+				if (*xrp < 0.0 && *yrp != floor(*yrp))
+				{
+					mag = pow(-*xrp,*yrp);
+					theta = PI * *yrp;
+					*zrp++ = mag*cos(theta);
+					*zip++ = mag*sin(theta);
+					flops += 18;
+				}
+				else
+				{
+					*zrp++ = pow(*xrp,*yrp);
+					*zip++ = 0.0;
+					flops++;
+				}
+#elif defined(EQ_MEX)
+				*zrp++ = (*xrp == *yrp);
+#elif defined(NE_MEX)
+				*zrp++ = (*xrp != *yrp);
+#elif defined(LT_MEX)
+				*zrp++ = (*xrp < *yrp);
+#elif defined(GT_MEX)
+				*zrp++ = (*xrp > *yrp);
+#elif defined(LE_MEX)
+				*zrp++ = (*xrp <= *yrp);
+#elif defined(GE_MEX)
+				*zrp++ = (*xrp >= *yrp);
+#endif
+				for (i = 0; i < ndim; i++)
+				{
+					if (subs[i] == s1[i])
+					{
+						subs[i] = 0;
+						if (sx[i])
+							xrp -= cpsx2[i];
+						if (sy[i])
+							yrp -= cpsy2[i];
+					}
+					else
+					{
+						subs[i]++;
+						if (sx[i])
+							xrp += cpsx[i];
+						if (sy[i])
+							yrp += cpsy[i];
+						break;
+					}
+				}
+			}
+#ifdef POWER_MEX
+			mexAddFlops(flops);
+			removeZeroImag(zr, zi, ndim, (const int *)s, numElements, &zMat);
+#elif !defined(RELOP_MEX)
+			mexAddFlops(numElements);
+#endif
+		}
+		else if (!xcmplx && ycmplx)  /* X and Y both N-D, X real, Y complex. */
+		{
+#ifdef POWER_MEX
+			zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxCOMPLEX);
+			zrp = zr = mxGetPr(zMat);
+			zip = zi = mxGetPi(zMat);
+#elif defined(RELOP_MEX)
+			zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxREAL);
+			mxSetLogical(zMat);
+			zrp = mxGetPr(zMat);
+#else
+			zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxCOMPLEX);
+			zrp = mxGetPr(zMat);
+			zip = mxGetPi(zMat);
+#endif
+			xrp = mxGetPr(xMat);
+			yrp = mxGetPr(yMat);
+			yip = mxGetPi(yMat);
+			zrend = zrp + numElements;
+			while (zrp < zrend)
+			{
+#ifdef PLUS_MEX
+				*zrp++ = *xrp + *yrp;
+				*zip++ = *yip;
+#elif defined(MINUS_MEX)
+				*zrp++ = *xrp - *yrp;
+				*zip++ = -*yip;
+#elif defined(TIMES_MEX)
+				*zrp++ = *xrp * *yrp;
+				*zip++ = *xrp * *yip;
+#elif defined(RDIVIDE_MEX)
+				denom = *yrp * *yrp + *yip * *yip;
+				*zrp++ = (*xrp * *yrp)/denom;
+				*zip++ = (-*xrp * *yip)/denom;
+#elif defined(LDIVIDE_MEX)
+				*zrp++ = *yrp / *xrp;
+				*zip++ = *yip / *xrp;
+#elif defined(POWER_MEX)
+				if (*yip == 0.0)
+				{
+					if (*xrp < 0.0 && *yrp != floor(*yrp))
+					{
+						mag = pow(-*xrp,*yrp);
+						theta = PI * *yrp;
+						*zrp++ = mag*cos(theta);
+						*zip++ = mag*sin(theta);
+						flops += 18;
+					}
+					else
+					{
+						*zrp++ = pow(*xrp,*yrp);
+						*zip++ = 0.0;
+						flops++;
+					}
+				}
+				else
+				{
+					if (*xrp < 0.0)
+					{
+						mag = pow(-*xrp,*yrp)*exp(-PI * *yip);
+						theta = *yip * log(-*xrp) + PI * *yrp;
+						*zrp++ = mag*cos(theta);
+						*zip++ = mag*sin(theta);
+						flops += 18;
+					}
+					else
+					{
+						mag = pow(*xrp,*yrp);
+						theta = *yip * log(*xrp);
+						*zrp++ = mag*cos(theta);
+						*zip++ = mag*sin(theta);
+						flops += 13;
+					}
+				}
+#elif defined(EQ_MEX)
+				*zrp++ = (*xrp == *yrp) && (*yip == 0.0);
+#elif defined(NE_MEX)
+				*zrp++ = (*xrp != *yrp) || (*yip != 0.0);
+#elif defined(LT_MEX)
+				*zrp++ = (*xrp < *yrp);
+#elif defined(GT_MEX)
+				*zrp++ = (*xrp > *yrp);
+#elif defined(LE_MEX)
+				*zrp++ = (*xrp <= *yrp);
+#elif defined(GE_MEX)
+				*zrp++ = (*xrp >= *yrp);
+#endif
+				for (i = 0; i < ndim; i++)
+				{
+					if (subs[i] == s1[i])
+					{
+						subs[i] = 0;
+						if (sx[i])
+							xrp -= cpsx2[i];
+						if (sy[i])
+						{
+							yrp -= cpsy2[i];
+							yip -= cpsy2[i];
+						}
+					}
+					else
+					{
+						subs[i]++;
+						if (sx[i])
+							xrp += cpsx[i];
+						if (sy[i])
+						{
+							yrp += cpsy[i];
+							yip += cpsy[i];
+						}
+						break;
+					}
+				}
+			}
+#if defined(PLUS_MEX) || defined(MINUS_MEX)
+			mexAddFlops(2*numElements);
+#elif defined(TIMES_MEX) || defined(RDIVIDE_MEX) || defined(LDIVIDE_MEX)
+			mexAddFlops(6*numElements);
+#elif defined(POWER_MEX)
+			mexAddFlops(flops);
+			removeZeroImag(zr, zi, ndim, (const int *)s, numElements, &zMat);
+#endif
+		}
+		else if (xcmplx && !ycmplx)  /* X and Y both N-D, X complex, Y real. */
+		{
+#ifdef POWER_MEX
+			zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxCOMPLEX);
+			zrp = zr = mxGetPr(zMat);
+			zip = zi = mxGetPi(zMat);
+#elif defined(RELOP_MEX)
+			zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxREAL);
+			mxSetLogical(zMat);
+			zrp = mxGetPr(zMat);
+#else
+			zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxCOMPLEX);
+			zrp = mxGetPr(zMat);
+			zip = mxGetPi(zMat);
+#endif
+			xrp = mxGetPr(xMat);
+			xip = mxGetPi(xMat);
+			yrp = mxGetPr(yMat);
+			zrend = zrp + numElements;
+			while (zrp < zrend)
+			{
+#ifdef PLUS_MEX
+				*zrp++ = *xrp + *yrp;
+				*zip++ = *xip;
+#elif defined(MINUS_MEX)
+				*zrp++ = *xrp - *yrp;
+				*zip++ = *xip;
+#elif defined(TIMES_MEX)
+				*zrp++ = *xrp * *yrp;
+				*zip++ = *xip * *yrp;
+#elif defined(RDIVIDE_MEX)
+				*zrp++ = *xrp / *yrp;
+				*zip++ = *xip / *yrp;
+#elif defined(LDIVIDE_MEX)
+				denom = *xrp * *xrp + *xip * *xip;
+				*zrp++ = (*xrp * *yrp)/denom;
+				*zip++ = (-*xip * *yrp)/denom;
+#elif defined(POWER_MEX)
+				if (*xip == 0.0)
+				{
+					if (*xrp < 0.0 && *yrp != floor(*yrp))
+					{
+						mag = pow(-*xrp,*yrp);
+						theta = PI * *yrp;
+						*zrp++ = mag*cos(theta);
+						*zip++ = mag*sin(theta);
+						flops += 18;
+					}
+					else
+					{
+						*zrp++ = pow(*xrp,*yrp);
+						*zip++ = 0.0;
+						flops++;
+					}
+				}
+				else
+				{
+					mag = pow(*xrp * *xrp + *xip * *xip,0.5 * *yrp);
+					theta = *yrp*atan2(*xip,*xrp);
+					*zrp++ = mag*cos(theta);
+					*zip++ = mag*sin(theta);
+					flops += 18;
+				}
+#elif defined(EQ_MEX)
+				*zrp++ = (*xrp == *yrp) && (*xip == 0.0);
+#elif defined(NE_MEX)
+				*zrp++ = (*xrp != *yrp) || (*xip != 0.0);
+#elif defined(LT_MEX)
+				*zrp++ = (*xrp < *yrp);
+#elif defined(GT_MEX)
+				*zrp++ = (*xrp > *yrp);
+#elif defined(LE_MEX)
+				*zrp++ = (*xrp <= *yrp);
+#elif defined(GE_MEX)
+				*zrp++ = (*xrp >= *yrp);
+#endif
+				for (i = 0; i < ndim; i++)
+				{
+					if (subs[i] == s1[i])
+					{
+						subs[i] = 0;
+						if (sx[i])
+						{
+							xrp -= cpsx2[i];
+							xip -= cpsx2[i];
+						}
+						if (sy[i])
+							yrp -= cpsy2[i];
+					}
+					else
+					{
+						subs[i]++;
+						if (sx[i])
+						{
+							xrp += cpsx[i];
+							xip += cpsx[i];
+						}
+						if (sy[i])
+							yrp += cpsy[i];
+						break;
+					}
+				}
+			}
+#if defined(PLUS_MEX) || defined(MINUS_MEX)
+			mexAddFlops(2*numElements);
+#elif defined(TIMES_MEX) || defined(RDIVIDE_MEX) || defined(LDIVIDE_MEX)
+			mexAddFlops(6*numElements);
+#elif defined(POWER_MEX)
+			mexAddFlops(flops);
+			removeZeroImag(zr, zi, ndim, (const int *)s, numElements, &zMat);
+#endif
+		}
+		else if (xcmplx && ycmplx)  /* X and Y both N-D, both complex. */
+		{
+#if defined(RELOP_MEX)
+			zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxREAL);
+			mxSetLogical(zMat);
+			zrp = mxGetPr(zMat);
+#else
+			zMat = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxCOMPLEX);
+			zrp = zr = mxGetPr(zMat);
+			zip = zi = mxGetPi(zMat);
+#endif
+			xrp = mxGetPr(xMat);
+			xip = mxGetPi(xMat);
+			yrp = mxGetPr(yMat);
+			yip = mxGetPi(yMat);
+			zrend = zrp + numElements;
+			while (zrp < zrend)
+			{
+#ifdef PLUS_MEX
+				*zrp++ = *xrp + *yrp;
+				*zip++ = *xip + *yip;
+#elif defined(MINUS_MEX)
+				*zrp++ = *xrp - *yrp;
+				*zip++ = *xip - *yip;
+#elif defined(TIMES_MEX)
+				*zrp++ = *xrp * *yrp - *xip * *yip;
+				*zip++ = *xip * *yrp + *xrp * *yip;
+#elif defined(RDIVIDE_MEX)
+				denom = *yrp * *yrp + *yip * *yip;
+				*zrp++ = (*xrp * *yrp + *xip * *yip)/denom;
+				*zip++ = (*xip * *yrp - *xrp * *yip)/denom;
+#elif defined(LDIVIDE_MEX)
+				denom = *xrp * *xrp + *xip * *xip;
+				*zrp++ = (*xrp * *yrp + *xip * *yip)/denom;
+				*zip++ = (*xrp * *yip - *xip * *yrp)/denom;
+#elif defined(POWER_MEX)
+				if (*xip == 0.0 && *yip == 0.0)
+				{
+					if (*xrp < 0.0 && *yrp != floor(*yrp))
+					{
+						mag = pow(-*xrp,*yrp);
+						theta = PI * *yrp;
+						*zrp++ = mag*cos(theta);
+						*zip++ = mag*sin(theta);
+						flops += 18;
+					}
+					else
+					{
+						*zrp++ = pow(*xrp,*yrp);
+						*zip++ = 0.0;
+						flops++;
+					}
+				}
+				else if (*xip == 0.0)
+				{
+					if (*xrp < 0.0)
+					{
+						mag = pow(-*xrp,*yrp)*exp(-PI * *yip);
+						theta = *yip * log(-*xrp) + PI * *yrp;
+						*zrp++ = mag*cos(theta);
+						*zip++ = mag*sin(theta);
+						flops += 18;
+					}
+					else
+					{
+						mag = pow(*xrp,*yrp);
+						theta = *yip * log(*xrp);
+						*zrp++ = mag*cos(theta);
+						*zip++ = mag*sin(theta);
+						flops += 13;
+					}
+				}
+				else if (*yip == 0.0)
+				{
+					mag = pow(*xrp * *xrp + *xip * *xip,0.5 * *yrp);
+					theta = *yrp * atan2(*xip,*xrp);
+					*zrp++ = mag*cos(theta);
+					*zip++ = mag*sin(theta);
+					flops += 18;
+				}
+				else
+				{
+					magx = sqrt(*xrp * *xrp + *xip * *xip);
+					phi = atan2(*xip,*xrp);
+					mag = pow(magx,*yrp)*exp(-*yip * phi);
+					theta = *yip * log(magx) + *yrp * phi;
+					*zrp++ = mag*cos(theta);
+					*zip++ = mag*sin(theta);
+					flops += 18;
+				}
+#elif defined(EQ_MEX)
+				*zrp++ = (*xrp == *yrp) && (*xip == *yip);
+#elif defined(NE_MEX)
+				*zrp++ = (*xrp != *yrp) || (*xip != *yip);
+#elif defined(LT_MEX)
+				*zrp++ = (*xrp < *yrp);
+#elif defined(GT_MEX)
+				*zrp++ = (*xrp > *yrp);
+#elif defined(LE_MEX)
+				*zrp++ = (*xrp <= *yrp);
+#elif defined(GE_MEX)
+				*zrp++ = (*xrp >= *yrp);
+#endif
+				for (i = 0; i < ndim; i++)
+				{
+					if (subs[i] == s1[i])
+					{
+						subs[i] = 0;
+						if (sx[i])
+						{
+							xrp -= cpsx2[i];
+							xip -= cpsx2[i];
+						}
+						if (sy[i])
+						{
+							yrp -= cpsy2[i];
+							yip -= cpsy2[i];
+						}
+					}
+					else
+					{
+						subs[i]++;
+						if (sx[i])
+						{
+							xrp += cpsx[i];
+							xip += cpsx[i];
+						}
+						if (sy[i])
+						{
+							yrp += cpsy[i];
+							yip += cpsy[i];
+						}
+						break;
+					}
+				}
+			}
+#if defined(PLUS_MEX) || defined(MINUS_MEX)
+			mexAddFlops(2*numElements);
+#elif defined(TIMES_MEX) || defined(RDIVIDE_MEX) || defined(LDIVIDE_MEX)
+			mexAddFlops(6*numElements);
+#elif defined(POWER_MEX)
+			mexAddFlops(flops);
+#endif
+#ifndef RELOP_MEX
+			removeZeroImag(zr, zi, ndim, (const int *)s, numElements, &zMat);
+#endif
+		}
+	}
+}
+
+
+/***********************************************************
+*                                                          *
+*   Tests to see if the vectors xdim and ydim are equal.   *
+*                                                          *
+***********************************************************/
+bool allequal(int ndim, const int *xdim, const int *ydim)
+{
+	int		i;
+	bool	result = true;
+	
+	for (i = 0; i < ndim; i++)
+		result = result && (xdim[i] == ydim[i]);
+	
+	return(result);
+}
+
+
+/******************************************************************************
+*                                                                             *
+*   Tests to see if every imaginary element is identically zero and, if so,   *
+*   creates a new array which is real and copies the real elements to it.     *
+*                                                                             *
+******************************************************************************/
+void removeZeroImag(double *zr, double *zi, int ndim, const int *s,
+					int numElements, mxArray *plhs[])
+{
+	double			*zrend, *ziend, *zip, *z1p, *z2p;
+	bool			allImZero = true;
+	mxArray			*temp;
+	
+	zip = zi;
+	ziend = zi + numElements;
+	while (zip < ziend)
+	{
+		allImZero = allImZero && (*zip++ == 0.0);
+		if (!allImZero)
+			return;
+	}
+	
+	temp = mxCreateNumericArray(ndim, s, mxDOUBLE_CLASS, mxREAL);
+	z1p = zr;
+	z2p = mxGetPr(temp);
+	zrend = z1p + numElements;
+	while (z1p < zrend)
+		*z2p++ = *z1p++;
+	mxDestroyArray(plhs[0]);
+	plhs[0] = temp;
+	return;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/potentials/mk_initial_pot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function pot = mk_initial_pot(pot_type, dom, ns, cnodes, onodes)
+% MK_INITIAL_POT A "initial" potential is one which has not had any evidence entered into it.
+% pot = mk_initial_pot(pot_type, domain, node_sizes, cnodes, onodes)
+%
+% pot_type is one of 'd', 'g', 'cg' or 'u'
+% domain is the set of nodes to be included in the potential.
+% node_sizes(i) is the size of node i.
+
+switch pot_type 
+ case 'd',
+  ns(onodes) = 1;
+  pot = dpot(dom, ns(dom));
+ case 'u',
+  ns(onodes) = 1;
+  pot = upot(dom, ns(dom));
+ case 'g',
+  ns(onodes) = 0;
+  pot = cpot(dom, ns(dom));
+ case 'cg',
+  dnodes = mysetdiff(1:length(ns), cnodes);
+  ddom = myintersect(dnodes, dom);
+  cdom = myintersect(cnodes, dom);
+  dobs = myintersect(dnodes, onodes);
+  cobs = myintersect(cnodes, onodes);
+  ns(dobs) = 1;
+  ns(cobs) = 0;
+  pot = cgpot(ddom, cdom, ns);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/test_BNT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,108 @@
+% If all is well, all of these scripts should run without errors.
+
+
+% bnets
+cg1
+cg2
+discrete1
+fa1
+gaussian1
+gaussian2
+if exist('@gibbs_sampling_inf_engine/private/compute_posterior','file')
+  % only exists if installC has been run
+  gibbs_test1
+end
+learn1
+lw1
+mfa1
+mixexp1
+mixexp2
+mixexp3
+mog1
+mpe1
+mpe2
+qmr1
+qmr2
+sample1
+softev1
+softmax1
+sprinkler1
+
+
+% belief propagation
+belprop_polytree_discrete
+belprop_polytree_gauss % alag
+belprop_polytree_cg
+belprop_loop1_discrete
+belprop_loop1_gauss
+belprop_loopy_discrete
+belprop_loopy_gauss
+belprop_loopy_cg % like cg1
+
+
+% factor graphs
+%fg1   failed since marginals were not exact
+
+fg2
+fg3
+fg_mrf1
+fg_mrf2
+
+
+% Structure learning
+bic1
+cooper_yoo
+k2demo1
+mcmc1
+model_select1
+pc1
+%pc2   failed due to numerical problems in KPMstats/cond_indep_fisher_z
+
+
+
+
+% limids
+asia_dt1
+id1
+oil1
+pigs1
+
+
+% dbns
+arhmm1
+bat1
+bkff1
+chmm1
+dhmm1
+filter_test1
+ghmm1
+kalman1
+kjaerulff1
+loopy_dbn1
+mhmm1
+mildew1
+reveal1
+viterbi1
+water1
+
+
+% HHMMs
+abcd_hhmm
+sample_square_hhmm_discrete
+%learn_square_hhmm_cts
+sample_motif_hhmm
+
+%sparse jtree engine & ndx 2TBN engine
+if exist('@jtree_sparse_inf_engine/init_pot','file')
+  % only exists if installC has been run
+  discrete2
+  discrete3 
+  filter_test1
+  water2
+end
+
+%find . -path '*.m' -exec wc -l {} \; | ~/count.pl
+
+% we cannot use tic;toc to time test_BNT, since functions within this script
+% reset the tic;toc timer. Hence we use the following:
+%clock0=clock; cpu0 = cputime; test_BNT; cpu=cputime-cpu0; elapsed=etime(clock, clock0)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bnt/uninstallC_BNT.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+dirs = {'potentials/Tables', ...
+	'CPDs/@discrete_CPD', ...
+      'inference/static/@jtree_sparse_inf_engine', ...
+      'inference/static/@gibbs_sampling_inf_engine/private'};
+
+BNT_HOME = '/home/ai2/murphyk/matlab/FullBNT'; % edit this
+%global BNT_HOME
+
+for d=1:length(dirs)
+  f = fullfile(BNT_HOME, 'BNT', dirs{d});
+  fprintf('removing Cmex files from %s\n', f);
+  cd(f)
+  delete *.mex*
+  delete *.dll
+  delete *.obj
+  delete *.o
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/bntRoot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function r = bntRoot()
+% Return directory name where bnt is stored
+    r = fileparts(which(mfilename));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/ChangeLog.Sourceforge.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4436 @@
+
+
+2007-02-11 17:12  nsaunier
+
+	* BNT/learning/learn_struct_pdag_pc.m: Bug submitted by Imme Ebert-Uphoff (ebert@tree.com) (see Thu Feb 8, 2007 email on the BNT mailing list).
+
+2005-11-26 12:12  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: merged
+	  fwdback_twoslice.m to release branch
+
+2005-11-25 17:24  nsaunier
+
+	* BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: adding
+	  old missing fwdback_twoslice.m
+
+2005-11-25 17:24  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/fwdback_twoslice.m: file
+	  fwdback_twoslice.m was added on branch release-1_0 on 2005-11-26
+	  20:12:05 +0000
+
+2005-09-25 15:54  yozhik
+
+	* BNT/add_BNT_to_path.m: fix paths
+
+2005-09-25 15:30  yozhik
+
+	* BNT/add_BNT_to_path.m: Restored directories to path.
+
+2005-09-25 15:29  yozhik
+
+	* HMM/fwdback_twoslice.m: added missing fwdback_twoslice
+
+2005-09-17 11:14  yozhik
+
+	* ChangeLog, BNT/add_BNT_to_path.m, BNT/test_BNT.m,
+	  BNT/examples/static/cmp_inference_static.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Merged
+	  bug fixes from HEAD.
+
+2005-09-17 11:11  yozhik
+
+	* ChangeLog: added change log
+
+2005-09-17 11:11  yozhik
+
+	* ChangeLog: file ChangeLog was added on branch release-1_0 on
+	  2005-09-17 18:14:47 +0000
+
+2005-09-17 10:00  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Temporary
+	  rollback to fix error, per Kevin.
+
+2005-09-17 09:59  yozhik
+
+	* BNT/examples/static/cmp_inference_static.m: Commented out
+	  erroneous line, per Kevin.
+
+2005-09-17 09:58  yozhik
+
+	* BNT/add_BNT_to_path.m: Changed to require BNT_HOME to be
+	  predefined.
+
+2005-09-17 09:56  yozhik
+
+	* BNT/test_BNT.m: Commented out problematic tests.
+
+2005-09-17 09:38  yozhik
+
+	* BNT/test_BNT.m: renable tests
+
+2005-09-12 22:18  yozhik
+
+	* KPMtools/pca_kpm.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-09-12 22:18  yozhik
+
+	* KPMtools/pca_kpm.m: Initial revision
+
+2005-08-29 10:44  yozhik
+
+	* graph/: README.txt, Old/best_first_elim_order.m,
+	  Old/dag_to_jtree.m, Old/dfs.m, Old/dsep_test.m,
+	  Old/mk_2D_lattice_slow.m, acyclic.m, assignEdgeNums.m,
+	  best_first_elim_order.m, check_jtree_property.m,
+	  check_triangulated.m, children.m, cliques_to_jtree.m,
+	  cliques_to_strong_jtree.m, connected_graph.m,
+	  dag_to_essential_graph.m, dfs.m, dfs_test.m, dijkstra.m,
+	  family.m, graph_separated.m, graph_to_jtree.m,
+	  min_subtree_con_nodes.m, minimum_spanning_tree.m, minspan.m,
+	  mk_2D_lattice.m, mk_2D_lattice_slow.m, mk_adj_mat.m,
+	  mk_adjmat_chain.m, mk_all_dags.m, mk_nbrs_of_dag.m,
+	  mk_nbrs_of_digraph.m, mk_nbrs_of_digraph_broken.m,
+	  mk_nbrs_of_digraph_not_vectorized.m, mk_rnd_dag.m,
+	  mk_rnd_dag_given_edge_prob.m, mk_rooted_tree.m, mk_undirected.m,
+	  moralize.m, neighbors.m, parents.m, pred2path.m,
+	  reachability_graph.m, scc.m, strong_elim_order.m, test.m,
+	  test_strong_root.m, topological_sort.m, trees.txt, triangulate.c,
+	  triangulate.m, triangulate_2Dlattice_demo.m, triangulate_test.m:
+	  Initial import of code base from Kevin Murphy.
+
+2005-08-29 10:44  yozhik
+
+	* graph/: README.txt, Old/best_first_elim_order.m,
+	  Old/dag_to_jtree.m, Old/dfs.m, Old/dsep_test.m,
+	  Old/mk_2D_lattice_slow.m, acyclic.m, assignEdgeNums.m,
+	  best_first_elim_order.m, check_jtree_property.m,
+	  check_triangulated.m, children.m, cliques_to_jtree.m,
+	  cliques_to_strong_jtree.m, connected_graph.m,
+	  dag_to_essential_graph.m, dfs.m, dfs_test.m, dijkstra.m,
+	  family.m, graph_separated.m, graph_to_jtree.m,
+	  min_subtree_con_nodes.m, minimum_spanning_tree.m, minspan.m,
+	  mk_2D_lattice.m, mk_2D_lattice_slow.m, mk_adj_mat.m,
+	  mk_adjmat_chain.m, mk_all_dags.m, mk_nbrs_of_dag.m,
+	  mk_nbrs_of_digraph.m, mk_nbrs_of_digraph_broken.m,
+	  mk_nbrs_of_digraph_not_vectorized.m, mk_rnd_dag.m,
+	  mk_rnd_dag_given_edge_prob.m, mk_rooted_tree.m, mk_undirected.m,
+	  moralize.m, neighbors.m, parents.m, pred2path.m,
+	  reachability_graph.m, scc.m, strong_elim_order.m, test.m,
+	  test_strong_root.m, topological_sort.m, trees.txt, triangulate.c,
+	  triangulate.m, triangulate_2Dlattice_demo.m, triangulate_test.m:
+	  Initial revision
+
+2005-08-26 18:08  yozhik
+
+	* KPMtools/fullfileKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-08-26 18:08  yozhik
+
+	* KPMtools/fullfileKPM.m: Initial revision
+
+2005-08-21 13:00  yozhik
+
+	*
+	  BNT/inference/static/@pearl_inf_engine/private/parallel_protocol.m:
+	  Initial import of code base from Kevin Murphy.
+
+2005-08-21 13:00  yozhik
+
+	*
+	  BNT/inference/static/@pearl_inf_engine/private/parallel_protocol.m:
+	  Initial revision
+
+2005-07-11 12:07  yozhik
+
+	* KPMtools/plotcov2New.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-07-11 12:07  yozhik
+
+	* KPMtools/plotcov2New.m: Initial revision
+
+2005-07-06 12:32  yozhik
+
+	* KPMtools/montageKPM2.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-07-06 12:32  yozhik
+
+	* KPMtools/montageKPM2.m: Initial revision
+
+2005-06-27 18:35  yozhik
+
+	* KPMtools/montageKPM3.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-27 18:35  yozhik
+
+	* KPMtools/montageKPM3.m: Initial revision
+
+2005-06-27 18:30  yozhik
+
+	* KPMtools/cell2matPad.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-27 18:30  yozhik
+
+	* KPMtools/cell2matPad.m: Initial revision
+
+2005-06-15 14:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD.m: Initial import of code
+	  base from Kevin Murphy.
+
+2005-06-15 14:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD.m: Initial revision
+
+2005-06-08 18:56  yozhik
+
+	* Kalman/testKalman.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-08 18:56  yozhik
+
+	* Kalman/testKalman.m: Initial revision
+
+2005-06-08 18:25  yozhik
+
+	* HMM/: testHMM.m, fixed_lag_smoother_demo.m: Initial import of
+	  code base from Kevin Murphy.
+
+2005-06-08 18:25  yozhik
+
+	* HMM/: testHMM.m, fixed_lag_smoother_demo.m: Initial revision
+
+2005-06-08 18:22  yozhik
+
+	* HMM/: README.txt, dhmm_em.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-06-08 18:22  yozhik
+
+	* HMM/: README.txt, dhmm_em.m: Initial revision
+
+2005-06-08 18:17  yozhik
+
+	* HMM/fwdback.m: Initial import of code base from Kevin Murphy.
+
+2005-06-08 18:17  yozhik
+
+	* HMM/fwdback.m: Initial revision
+
+2005-06-05 11:46  yozhik
+
+	* KPMtools/: rectintLoopC.c, rectintLoopC.dll: Initial import of
+	  code base from Kevin Murphy.
+
+2005-06-05 11:46  yozhik
+
+	* KPMtools/: rectintLoopC.c, rectintLoopC.dll: Initial revision
+
+2005-06-01 12:39  yozhik
+
+	* KPMtools/montageKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-06-01 12:39  yozhik
+
+	* KPMtools/montageKPM.m: Initial revision
+
+2005-05-31 21:49  yozhik
+
+	* KPMtools/initFigures.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-31 21:49  yozhik
+
+	* KPMtools/initFigures.m: Initial revision
+
+2005-05-31 11:19  yozhik
+
+	* KPMstats/unidrndKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-31 11:19  yozhik
+
+	* KPMstats/unidrndKPM.m: Initial revision
+
+2005-05-30 15:08  yozhik
+
+	* KPMtools/filepartsLast.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-30 15:08  yozhik
+
+	* KPMtools/filepartsLast.m: Initial revision
+
+2005-05-29 23:01  yozhik
+
+	* KPMtools/plotBox.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-29 23:01  yozhik
+
+	* KPMtools/plotBox.m: Initial revision
+
+2005-05-25 18:31  yozhik
+
+	* KPMtools/plotColors.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-25 18:31  yozhik
+
+	* KPMtools/plotColors.m: Initial revision
+
+2005-05-25 12:11  yozhik
+
+	* KPMtools/genpathKPM.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-25 12:11  yozhik
+
+	* KPMtools/genpathKPM.m: Initial revision
+
+2005-05-23 17:03  yozhik
+
+	* netlab3.3/demhmc1.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-23 17:03  yozhik
+
+	* netlab3.3/demhmc1.m: Initial revision
+
+2005-05-23 16:44  yozhik
+
+	* netlab3.3/gmminit.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-23 16:44  yozhik
+
+	* netlab3.3/gmminit.m: Initial revision
+
+2005-05-23 16:07  yozhik
+
+	* netlab3.3/metrop.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-23 16:07  yozhik
+
+	* netlab3.3/metrop.m: Initial revision
+
+2005-05-22 23:23  yozhik
+
+	* netlab3.3/demmet1.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-22 23:23  yozhik
+
+	* netlab3.3/demmet1.m: Initial revision
+
+2005-05-22 16:32  yozhik
+
+	* KPMstats/: dirichletrnd.m, dirichletpdf.m, test_dir.m,
+	  multirnd.m, multipdf.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-22 16:32  yozhik
+
+	* KPMstats/: dirichletrnd.m, dirichletpdf.m, test_dir.m,
+	  multirnd.m, multipdf.m: Initial revision
+
+2005-05-13 13:52  yozhik
+
+	* KPMtools/: asort.m, dirKPM.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-05-13 13:52  yozhik
+
+	* KPMtools/: asort.m, dirKPM.m: Initial revision
+
+2005-05-09 18:32  yozhik
+
+	* netlab3.3/dem2ddat.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-09 18:32  yozhik
+
+	* netlab3.3/dem2ddat.m: Initial revision
+
+2005-05-09 15:20  yozhik
+
+	* KPMtools/: mkdirKPM.m, optimalMatching.m, optimalMatchingTest.m,
+	  subsets1.m: Initial import of code base from Kevin Murphy.
+
+2005-05-09 15:20  yozhik
+
+	* KPMtools/: mkdirKPM.m, optimalMatching.m, optimalMatchingTest.m,
+	  subsets1.m: Initial revision
+
+2005-05-09 09:47  yozhik
+
+	* KPMtools/bipartiteMatchingDemo.m: Initial import of code base
+	  from Kevin Murphy.
+
+2005-05-09 09:47  yozhik
+
+	* KPMtools/bipartiteMatchingDemo.m: Initial revision
+
+2005-05-08 22:25  yozhik
+
+	* KPMtools/bipartiteMatchingIntProg.m: Initial import of code base
+	  from Kevin Murphy.
+
+2005-05-08 22:25  yozhik
+
+	* KPMtools/bipartiteMatchingIntProg.m: Initial revision
+
+2005-05-08 21:45  yozhik
+
+	* KPMtools/bipartiteMatchingDemoPlot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2005-05-08 21:45  yozhik
+
+	* KPMtools/bipartiteMatchingDemoPlot.m: Initial revision
+
+2005-05-08 19:55  yozhik
+
+	* KPMtools/subsetsFixedSize.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-05-08 19:55  yozhik
+
+	* KPMtools/subsetsFixedSize.m: Initial revision
+
+2005-05-08 15:48  yozhik
+
+	* KPMtools/centeringMatrix.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-05-08 15:48  yozhik
+
+	* KPMtools/centeringMatrix.m: Initial revision
+
+2005-05-08 10:51  yozhik
+
+	* netlab3.3/demgmm1.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-08 10:51  yozhik
+
+	* netlab3.3/demgmm1.m: Initial revision
+
+2005-05-06 18:09  yozhik
+
+	* BNT/add_BNT_to_path.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-06 18:09  yozhik
+
+	* BNT/add_BNT_to_path.m: Initial revision
+
+2005-05-03 21:35  yozhik
+
+	* KPMstats/standardize.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-03 21:35  yozhik
+
+	* KPMstats/standardize.m: Initial revision
+
+2005-05-03 13:18  yozhik
+
+	* KPMstats/histCmpChi2.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-03 13:18  yozhik
+
+	* KPMstats/histCmpChi2.m: Initial revision
+
+2005-05-03 12:01  yozhik
+
+	* KPMtools/strsplit.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-05-03 12:01  yozhik
+
+	* KPMtools/strsplit.m: Initial revision
+
+2005-05-02 13:19  yozhik
+
+	* KPMtools/hsvKPM.m: Initial import of code base from Kevin Murphy.
+
+2005-05-02 13:19  yozhik
+
+	* KPMtools/hsvKPM.m: Initial revision
+
+2005-04-27 11:34  yozhik
+
+	* BNT/potentials/@dpot/: subsasgn.m, subsref.m: Initial import of
+	  code base from Kevin Murphy.
+
+2005-04-27 11:34  yozhik
+
+	* BNT/potentials/@dpot/: subsasgn.m, subsref.m: Initial revision
+
+2005-04-27 10:58  yozhik
+
+	* KPMtools/mahal2conf.m, nethelp3.3/conffig.htm,
+	  nethelp3.3/confmat.htm, nethelp3.3/conjgrad.htm,
+	  nethelp3.3/consist.htm, nethelp3.3/convertoldnet.htm,
+	  nethelp3.3/datread.htm, nethelp3.3/datwrite.htm,
+	  nethelp3.3/dem2ddat.htm, nethelp3.3/demard.htm,
+	  nethelp3.3/demev1.htm, nethelp3.3/demev2.htm,
+	  nethelp3.3/demev3.htm, nethelp3.3/demgauss.htm,
+	  nethelp3.3/demglm1.htm, nethelp3.3/demglm2.htm,
+	  nethelp3.3/demgmm1.htm, nethelp3.3/demgmm2.htm,
+	  nethelp3.3/demgmm3.htm, nethelp3.3/demgmm4.htm,
+	  nethelp3.3/demgmm5.htm, nethelp3.3/demgp.htm,
+	  nethelp3.3/demgpard.htm, nethelp3.3/demgpot.htm,
+	  nethelp3.3/demgtm1.htm, nethelp3.3/demgtm2.htm,
+	  nethelp3.3/demhint.htm, nethelp3.3/demhmc1.htm,
+	  nethelp3.3/demhmc2.htm, nethelp3.3/demhmc3.htm,
+	  nethelp3.3/demkmn1.htm, nethelp3.3/demknn1.htm,
+	  nethelp3.3/demmdn1.htm, nethelp3.3/demmet1.htm,
+	  nethelp3.3/demmlp1.htm, nethelp3.3/demmlp2.htm,
+	  nethelp3.3/demnlab.htm, nethelp3.3/demns1.htm,
+	  nethelp3.3/demolgd1.htm, nethelp3.3/demopt1.htm,
+	  nethelp3.3/dempot.htm, nethelp3.3/demprgp.htm,
+	  nethelp3.3/demprior.htm, nethelp3.3/demrbf1.htm,
+	  nethelp3.3/demsom1.htm, nethelp3.3/demtrain.htm,
+	  nethelp3.3/dist2.htm, nethelp3.3/eigdec.htm,
+	  nethelp3.3/errbayes.htm, nethelp3.3/evidence.htm,
+	  nethelp3.3/fevbayes.htm, nethelp3.3/gauss.htm,
+	  nethelp3.3/gbayes.htm, nethelp3.3/glm.htm,
+	  nethelp3.3/glmderiv.htm, nethelp3.3/glmerr.htm,
+	  nethelp3.3/glmevfwd.htm, nethelp3.3/glmfwd.htm,
+	  nethelp3.3/glmgrad.htm, nethelp3.3/glmhess.htm,
+	  nethelp3.3/glminit.htm, nethelp3.3/glmpak.htm,
+	  nethelp3.3/glmtrain.htm, nethelp3.3/glmunpak.htm,
+	  nethelp3.3/gmm.htm, nethelp3.3/gmmactiv.htm,
+	  nethelp3.3/gmmem.htm, nethelp3.3/gmminit.htm,
+	  nethelp3.3/gmmpak.htm, nethelp3.3/gmmpost.htm,
+	  nethelp3.3/gmmprob.htm, nethelp3.3/gmmsamp.htm,
+	  nethelp3.3/gmmunpak.htm, nethelp3.3/gp.htm,
+	  nethelp3.3/gpcovar.htm, nethelp3.3/gpcovarf.htm,
+	  nethelp3.3/gpcovarp.htm, nethelp3.3/gperr.htm,
+	  nethelp3.3/gpfwd.htm, nethelp3.3/gpgrad.htm,
+	  nethelp3.3/gpinit.htm, nethelp3.3/gppak.htm,
+	  nethelp3.3/gpunpak.htm, nethelp3.3/gradchek.htm,
+	  nethelp3.3/graddesc.htm, nethelp3.3/gsamp.htm,
+	  nethelp3.3/gtm.htm, nethelp3.3/gtmem.htm, nethelp3.3/gtmfwd.htm,
+	  nethelp3.3/gtminit.htm, nethelp3.3/gtmlmean.htm,
+	  nethelp3.3/gtmlmode.htm, nethelp3.3/gtmmag.htm,
+	  nethelp3.3/gtmpost.htm, nethelp3.3/gtmprob.htm,
+	  nethelp3.3/hbayes.htm, nethelp3.3/hesschek.htm,
+	  nethelp3.3/hintmat.htm, nethelp3.3/hinton.htm,
+	  nethelp3.3/histp.htm, nethelp3.3/hmc.htm, nethelp3.3/index.htm,
+	  nethelp3.3/kmeans.htm, nethelp3.3/knn.htm, nethelp3.3/knnfwd.htm,
+	  nethelp3.3/linef.htm, nethelp3.3/linemin.htm,
+	  nethelp3.3/maxitmess.htm, nethelp3.3/mdn.htm,
+	  nethelp3.3/mdn2gmm.htm, nethelp3.3/mdndist2.htm,
+	  nethelp3.3/mdnerr.htm, nethelp3.3/mdnfwd.htm,
+	  nethelp3.3/mdngrad.htm, nethelp3.3/mdninit.htm,
+	  nethelp3.3/mdnpak.htm, nethelp3.3/mdnpost.htm,
+	  nethelp3.3/mdnprob.htm, nethelp3.3/mdnunpak.htm,
+	  nethelp3.3/metrop.htm, nethelp3.3/minbrack.htm,
+	  nethelp3.3/mlp.htm, nethelp3.3/mlpbkp.htm,
+	  nethelp3.3/mlpderiv.htm, nethelp3.3/mlperr.htm,
+	  nethelp3.3/mlpevfwd.htm, nethelp3.3/mlpfwd.htm,
+	  nethelp3.3/mlpgrad.htm, nethelp3.3/mlphdotv.htm,
+	  nethelp3.3/mlphess.htm, nethelp3.3/mlphint.htm,
+	  nethelp3.3/mlpinit.htm, nethelp3.3/mlppak.htm,
+	  nethelp3.3/mlpprior.htm, nethelp3.3/mlptrain.htm,
+	  nethelp3.3/mlpunpak.htm, nethelp3.3/netderiv.htm,
+	  nethelp3.3/neterr.htm, nethelp3.3/netevfwd.htm,
+	  nethelp3.3/netgrad.htm, nethelp3.3/nethelp3.3.zip,
+	  nethelp3.3/nethess.htm, nethelp3.3/netinit.htm,
+	  nethelp3.3/netopt.htm, nethelp3.3/netpak.htm,
+	  nethelp3.3/netunpak.htm, nethelp3.3/olgd.htm, nethelp3.3/pca.htm,
+	  nethelp3.3/plotmat.htm, nethelp3.3/ppca.htm,
+	  nethelp3.3/quasinew.htm, nethelp3.3/rbf.htm,
+	  nethelp3.3/rbfbkp.htm, nethelp3.3/rbfderiv.htm,
+	  nethelp3.3/rbferr.htm, nethelp3.3/rbfevfwd.htm,
+	  nethelp3.3/rbffwd.htm, nethelp3.3/rbfgrad.htm,
+	  nethelp3.3/rbfhess.htm, nethelp3.3/rbfjacob.htm,
+	  nethelp3.3/rbfpak.htm, nethelp3.3/rbfprior.htm,
+	  nethelp3.3/rbfsetbf.htm, nethelp3.3/rbfsetfw.htm,
+	  nethelp3.3/rbftrain.htm, nethelp3.3/rbfunpak.htm,
+	  nethelp3.3/rosegrad.htm, nethelp3.3/rosen.htm,
+	  nethelp3.3/scg.htm, nethelp3.3/som.htm, nethelp3.3/somfwd.htm,
+	  nethelp3.3/sompak.htm, nethelp3.3/somtrain.htm,
+	  nethelp3.3/somunpak.htm, netlab3.3/Contents.m, netlab3.3/LICENSE,
+	  netlab3.3/conffig.m, netlab3.3/confmat.m, netlab3.3/conjgrad.m,
+	  netlab3.3/consist.m, netlab3.3/convertoldnet.m,
+	  netlab3.3/datread.m, netlab3.3/datwrite.m, netlab3.3/demard.m,
+	  netlab3.3/demev1.m, netlab3.3/demev2.m, netlab3.3/demev3.m,
+	  netlab3.3/demgauss.m, netlab3.3/demglm1.m, netlab3.3/demglm2.m,
+	  netlab3.3/demgmm2.m, netlab3.3/demgmm3.m, netlab3.3/demgmm4.m,
+	  netlab3.3/demgmm5.m, netlab3.3/demgp.m, netlab3.3/demgpard.m,
+	  netlab3.3/demgpot.m, netlab3.3/demgtm1.m, netlab3.3/demgtm2.m,
+	  netlab3.3/demhint.m, netlab3.3/demhmc2.m, netlab3.3/demhmc3.m,
+	  netlab3.3/demkmn1.m, netlab3.3/demknn1.m, netlab3.3/demmdn1.m,
+	  netlab3.3/demmlp1.m, netlab3.3/demmlp2.m, netlab3.3/demnlab.m,
+	  netlab3.3/demns1.m, netlab3.3/demolgd1.m, netlab3.3/demopt1.m,
+	  netlab3.3/dempot.m, netlab3.3/demprgp.m, netlab3.3/demprior.m,
+	  netlab3.3/demrbf1.m, netlab3.3/demsom1.m, netlab3.3/demtrain.m,
+	  netlab3.3/dist2.m, netlab3.3/eigdec.m, netlab3.3/errbayes.m,
+	  netlab3.3/evidence.m, netlab3.3/fevbayes.m, netlab3.3/gauss.m,
+	  netlab3.3/gbayes.m, netlab3.3/glm.m, netlab3.3/glmderiv.m,
+	  netlab3.3/glmerr.m, netlab3.3/glmevfwd.m, netlab3.3/glmfwd.m,
+	  netlab3.3/glmgrad.m, netlab3.3/glmhess.m, netlab3.3/glminit.m,
+	  netlab3.3/glmpak.m, netlab3.3/glmtrain.m, netlab3.3/glmunpak.m,
+	  netlab3.3/gmm.m, netlab3.3/gmmactiv.m, netlab3.3/gmmem.m,
+	  netlab3.3/gmmpak.m, netlab3.3/gmmpost.m, netlab3.3/gmmprob.m,
+	  netlab3.3/gmmsamp.m, netlab3.3/gmmunpak.m, netlab3.3/gp.m,
+	  netlab3.3/gpcovar.m, netlab3.3/gpcovarf.m, netlab3.3/gpcovarp.m,
+	  netlab3.3/gperr.m, netlab3.3/gpfwd.m, netlab3.3/gpgrad.m,
+	  netlab3.3/gpinit.m, netlab3.3/gppak.m, netlab3.3/gpunpak.m,
+	  netlab3.3/gradchek.m, netlab3.3/graddesc.m, netlab3.3/gsamp.m,
+	  netlab3.3/gtm.m, netlab3.3/gtmem.m, netlab3.3/gtmfwd.m,
+	  netlab3.3/gtminit.m, netlab3.3/gtmlmean.m, netlab3.3/gtmlmode.m,
+	  netlab3.3/gtmmag.m, netlab3.3/gtmpost.m, netlab3.3/gtmprob.m,
+	  netlab3.3/hbayes.m, netlab3.3/hesschek.m, netlab3.3/hintmat.m,
+	  netlab3.3/hinton.m, netlab3.3/histp.m, netlab3.3/hmc.m,
+	  netlab3.3/kmeansNetlab.m, netlab3.3/knn.m, netlab3.3/knnfwd.m,
+	  netlab3.3/linef.m, netlab3.3/linemin.m, netlab3.3/maxitmess.m,
+	  netlab3.3/mdn.m, netlab3.3/mdn2gmm.m, netlab3.3/mdndist2.m,
+	  netlab3.3/mdnerr.m, netlab3.3/mdnfwd.m, netlab3.3/mdngrad.m,
+	  netlab3.3/mdninit.m, netlab3.3/mdnnet.mat, netlab3.3/mdnpak.m,
+	  netlab3.3/mdnpost.m, netlab3.3/mdnprob.m, netlab3.3/mdnunpak.m,
+	  netlab3.3/minbrack.m, netlab3.3/mlp.m, netlab3.3/mlpbkp.m,
+	  netlab3.3/mlpderiv.m, netlab3.3/mlperr.m, netlab3.3/mlpevfwd.m,
+	  netlab3.3/mlpfwd.m, netlab3.3/mlpgrad.m, netlab3.3/mlphdotv.m,
+	  netlab3.3/mlphess.m, netlab3.3/mlphint.m, netlab3.3/mlpinit.m,
+	  netlab3.3/mlppak.m, netlab3.3/mlpprior.m, netlab3.3/mlptrain.m,
+	  netlab3.3/mlpunpak.m, netlab3.3/netderiv.m, netlab3.3/neterr.m,
+	  netlab3.3/netevfwd.m, netlab3.3/netgrad.m, netlab3.3/nethess.m,
+	  netlab3.3/netinit.m, netlab3.3/netlab3.3.zip,
+	  netlab3.3/netlogo.mat, netlab3.3/netopt.m, netlab3.3/netpak.m,
+	  netlab3.3/netunpak.m, netlab3.3/oilTrn.dat, netlab3.3/oilTst.dat,
+	  netlab3.3/olgd.m, netlab3.3/pca.m, netlab3.3/plotmat.m,
+	  netlab3.3/ppca.m, netlab3.3/quasinew.m, netlab3.3/rbf.m,
+	  netlab3.3/rbfbkp.m, netlab3.3/rbfderiv.m, netlab3.3/rbferr.m,
+	  netlab3.3/rbfevfwd.m, netlab3.3/rbffwd.m, netlab3.3/rbfgrad.m,
+	  netlab3.3/rbfhess.m, netlab3.3/rbfjacob.m, netlab3.3/rbfpak.m,
+	  netlab3.3/rbfprior.m, netlab3.3/rbfsetbf.m, netlab3.3/rbfsetfw.m,
+	  netlab3.3/rbftrain.m, netlab3.3/rbfunpak.m, netlab3.3/rosegrad.m,
+	  netlab3.3/rosen.m, netlab3.3/scg.m, netlab3.3/som.m,
+	  netlab3.3/somfwd.m, netlab3.3/sompak.m, netlab3.3/somtrain.m,
+	  netlab3.3/somunpak.m, netlab3.3/xor.dat, netlabKPM/README.txt,
+	  netlabKPM/demgmm1_movie.m, netlabKPM/evidence_weighted.m,
+	  netlabKPM/glmerr_weighted.m, netlabKPM/glmgrad_weighted.m,
+	  netlabKPM/glmhess_weighted.m, netlabKPM/glmtrain_weighted.m,
+	  netlabKPM/gmm1.avi, netlabKPM/gmmem2.m,
+	  netlabKPM/gmmem_multi_restart.m, netlabKPM/kmeans_demo.m,
+	  netlabKPM/mlperr_weighted.m, netlabKPM/mlpgrad_weighted.m,
+	  netlabKPM/mlphdotv_weighted.m, netlabKPM/mlphess_weighted.m,
+	  netlabKPM/neterr_weighted.m, netlabKPM/netgrad_weighted.m,
+	  netlabKPM/nethess_weighted.m, netlabKPM/netopt_weighted.m,
+	  netlabKPM/process_options.m: Initial import of code base from
+	  Kevin Murphy.
+
+2005-04-27 10:58  yozhik
+
+	* KPMtools/mahal2conf.m, nethelp3.3/conffig.htm,
+	  nethelp3.3/confmat.htm, nethelp3.3/conjgrad.htm,
+	  nethelp3.3/consist.htm, nethelp3.3/convertoldnet.htm,
+	  nethelp3.3/datread.htm, nethelp3.3/datwrite.htm,
+	  nethelp3.3/dem2ddat.htm, nethelp3.3/demard.htm,
+	  nethelp3.3/demev1.htm, nethelp3.3/demev2.htm,
+	  nethelp3.3/demev3.htm, nethelp3.3/demgauss.htm,
+	  nethelp3.3/demglm1.htm, nethelp3.3/demglm2.htm,
+	  nethelp3.3/demgmm1.htm, nethelp3.3/demgmm2.htm,
+	  nethelp3.3/demgmm3.htm, nethelp3.3/demgmm4.htm,
+	  nethelp3.3/demgmm5.htm, nethelp3.3/demgp.htm,
+	  nethelp3.3/demgpard.htm, nethelp3.3/demgpot.htm,
+	  nethelp3.3/demgtm1.htm, nethelp3.3/demgtm2.htm,
+	  nethelp3.3/demhint.htm, nethelp3.3/demhmc1.htm,
+	  nethelp3.3/demhmc2.htm, nethelp3.3/demhmc3.htm,
+	  nethelp3.3/demkmn1.htm, nethelp3.3/demknn1.htm,
+	  nethelp3.3/demmdn1.htm, nethelp3.3/demmet1.htm,
+	  nethelp3.3/demmlp1.htm, nethelp3.3/demmlp2.htm,
+	  nethelp3.3/demnlab.htm, nethelp3.3/demns1.htm,
+	  nethelp3.3/demolgd1.htm, nethelp3.3/demopt1.htm,
+	  nethelp3.3/dempot.htm, nethelp3.3/demprgp.htm,
+	  nethelp3.3/demprior.htm, nethelp3.3/demrbf1.htm,
+	  nethelp3.3/demsom1.htm, nethelp3.3/demtrain.htm,
+	  nethelp3.3/dist2.htm, nethelp3.3/eigdec.htm,
+	  nethelp3.3/errbayes.htm, nethelp3.3/evidence.htm,
+	  nethelp3.3/fevbayes.htm, nethelp3.3/gauss.htm,
+	  nethelp3.3/gbayes.htm, nethelp3.3/glm.htm,
+	  nethelp3.3/glmderiv.htm, nethelp3.3/glmerr.htm,
+	  nethelp3.3/glmevfwd.htm, nethelp3.3/glmfwd.htm,
+	  nethelp3.3/glmgrad.htm, nethelp3.3/glmhess.htm,
+	  nethelp3.3/glminit.htm, nethelp3.3/glmpak.htm,
+	  nethelp3.3/glmtrain.htm, nethelp3.3/glmunpak.htm,
+	  nethelp3.3/gmm.htm, nethelp3.3/gmmactiv.htm,
+	  nethelp3.3/gmmem.htm, nethelp3.3/gmminit.htm,
+	  nethelp3.3/gmmpak.htm, nethelp3.3/gmmpost.htm,
+	  nethelp3.3/gmmprob.htm, nethelp3.3/gmmsamp.htm,
+	  nethelp3.3/gmmunpak.htm, nethelp3.3/gp.htm,
+	  nethelp3.3/gpcovar.htm, nethelp3.3/gpcovarf.htm,
+	  nethelp3.3/gpcovarp.htm, nethelp3.3/gperr.htm,
+	  nethelp3.3/gpfwd.htm, nethelp3.3/gpgrad.htm,
+	  nethelp3.3/gpinit.htm, nethelp3.3/gppak.htm,
+	  nethelp3.3/gpunpak.htm, nethelp3.3/gradchek.htm,
+	  nethelp3.3/graddesc.htm, nethelp3.3/gsamp.htm,
+	  nethelp3.3/gtm.htm, nethelp3.3/gtmem.htm, nethelp3.3/gtmfwd.htm,
+	  nethelp3.3/gtminit.htm, nethelp3.3/gtmlmean.htm,
+	  nethelp3.3/gtmlmode.htm, nethelp3.3/gtmmag.htm,
+	  nethelp3.3/gtmpost.htm, nethelp3.3/gtmprob.htm,
+	  nethelp3.3/hbayes.htm, nethelp3.3/hesschek.htm,
+	  nethelp3.3/hintmat.htm, nethelp3.3/hinton.htm,
+	  nethelp3.3/histp.htm, nethelp3.3/hmc.htm, nethelp3.3/index.htm,
+	  nethelp3.3/kmeans.htm, nethelp3.3/knn.htm, nethelp3.3/knnfwd.htm,
+	  nethelp3.3/linef.htm, nethelp3.3/linemin.htm,
+	  nethelp3.3/maxitmess.htm, nethelp3.3/mdn.htm,
+	  nethelp3.3/mdn2gmm.htm, nethelp3.3/mdndist2.htm,
+	  nethelp3.3/mdnerr.htm, nethelp3.3/mdnfwd.htm,
+	  nethelp3.3/mdngrad.htm, nethelp3.3/mdninit.htm,
+	  nethelp3.3/mdnpak.htm, nethelp3.3/mdnpost.htm,
+	  nethelp3.3/mdnprob.htm, nethelp3.3/mdnunpak.htm,
+	  nethelp3.3/metrop.htm, nethelp3.3/minbrack.htm,
+	  nethelp3.3/mlp.htm, nethelp3.3/mlpbkp.htm,
+	  nethelp3.3/mlpderiv.htm, nethelp3.3/mlperr.htm,
+	  nethelp3.3/mlpevfwd.htm, nethelp3.3/mlpfwd.htm,
+	  nethelp3.3/mlpgrad.htm, nethelp3.3/mlphdotv.htm,
+	  nethelp3.3/mlphess.htm, nethelp3.3/mlphint.htm,
+	  nethelp3.3/mlpinit.htm, nethelp3.3/mlppak.htm,
+	  nethelp3.3/mlpprior.htm, nethelp3.3/mlptrain.htm,
+	  nethelp3.3/mlpunpak.htm, nethelp3.3/netderiv.htm,
+	  nethelp3.3/neterr.htm, nethelp3.3/netevfwd.htm,
+	  nethelp3.3/netgrad.htm, nethelp3.3/nethelp3.3.zip,
+	  nethelp3.3/nethess.htm, nethelp3.3/netinit.htm,
+	  nethelp3.3/netopt.htm, nethelp3.3/netpak.htm,
+	  nethelp3.3/netunpak.htm, nethelp3.3/olgd.htm, nethelp3.3/pca.htm,
+	  nethelp3.3/plotmat.htm, nethelp3.3/ppca.htm,
+	  nethelp3.3/quasinew.htm, nethelp3.3/rbf.htm,
+	  nethelp3.3/rbfbkp.htm, nethelp3.3/rbfderiv.htm,
+	  nethelp3.3/rbferr.htm, nethelp3.3/rbfevfwd.htm,
+	  nethelp3.3/rbffwd.htm, nethelp3.3/rbfgrad.htm,
+	  nethelp3.3/rbfhess.htm, nethelp3.3/rbfjacob.htm,
+	  nethelp3.3/rbfpak.htm, nethelp3.3/rbfprior.htm,
+	  nethelp3.3/rbfsetbf.htm, nethelp3.3/rbfsetfw.htm,
+	  nethelp3.3/rbftrain.htm, nethelp3.3/rbfunpak.htm,
+	  nethelp3.3/rosegrad.htm, nethelp3.3/rosen.htm,
+	  nethelp3.3/scg.htm, nethelp3.3/som.htm, nethelp3.3/somfwd.htm,
+	  nethelp3.3/sompak.htm, nethelp3.3/somtrain.htm,
+	  nethelp3.3/somunpak.htm, netlab3.3/Contents.m, netlab3.3/LICENSE,
+	  netlab3.3/conffig.m, netlab3.3/confmat.m, netlab3.3/conjgrad.m,
+	  netlab3.3/consist.m, netlab3.3/convertoldnet.m,
+	  netlab3.3/datread.m, netlab3.3/datwrite.m, netlab3.3/demard.m,
+	  netlab3.3/demev1.m, netlab3.3/demev2.m, netlab3.3/demev3.m,
+	  netlab3.3/demgauss.m, netlab3.3/demglm1.m, netlab3.3/demglm2.m,
+	  netlab3.3/demgmm2.m, netlab3.3/demgmm3.m, netlab3.3/demgmm4.m,
+	  netlab3.3/demgmm5.m, netlab3.3/demgp.m, netlab3.3/demgpard.m,
+	  netlab3.3/demgpot.m, netlab3.3/demgtm1.m, netlab3.3/demgtm2.m,
+	  netlab3.3/demhint.m, netlab3.3/demhmc2.m, netlab3.3/demhmc3.m,
+	  netlab3.3/demkmn1.m, netlab3.3/demknn1.m, netlab3.3/demmdn1.m,
+	  netlab3.3/demmlp1.m, netlab3.3/demmlp2.m, netlab3.3/demnlab.m,
+	  netlab3.3/demns1.m, netlab3.3/demolgd1.m, netlab3.3/demopt1.m,
+	  netlab3.3/dempot.m, netlab3.3/demprgp.m, netlab3.3/demprior.m,
+	  netlab3.3/demrbf1.m, netlab3.3/demsom1.m, netlab3.3/demtrain.m,
+	  netlab3.3/dist2.m, netlab3.3/eigdec.m, netlab3.3/errbayes.m,
+	  netlab3.3/evidence.m, netlab3.3/fevbayes.m, netlab3.3/gauss.m,
+	  netlab3.3/gbayes.m, netlab3.3/glm.m, netlab3.3/glmderiv.m,
+	  netlab3.3/glmerr.m, netlab3.3/glmevfwd.m, netlab3.3/glmfwd.m,
+	  netlab3.3/glmgrad.m, netlab3.3/glmhess.m, netlab3.3/glminit.m,
+	  netlab3.3/glmpak.m, netlab3.3/glmtrain.m, netlab3.3/glmunpak.m,
+	  netlab3.3/gmm.m, netlab3.3/gmmactiv.m, netlab3.3/gmmem.m,
+	  netlab3.3/gmmpak.m, netlab3.3/gmmpost.m, netlab3.3/gmmprob.m,
+	  netlab3.3/gmmsamp.m, netlab3.3/gmmunpak.m, netlab3.3/gp.m,
+	  netlab3.3/gpcovar.m, netlab3.3/gpcovarf.m, netlab3.3/gpcovarp.m,
+	  netlab3.3/gperr.m, netlab3.3/gpfwd.m, netlab3.3/gpgrad.m,
+	  netlab3.3/gpinit.m, netlab3.3/gppak.m, netlab3.3/gpunpak.m,
+	  netlab3.3/gradchek.m, netlab3.3/graddesc.m, netlab3.3/gsamp.m,
+	  netlab3.3/gtm.m, netlab3.3/gtmem.m, netlab3.3/gtmfwd.m,
+	  netlab3.3/gtminit.m, netlab3.3/gtmlmean.m, netlab3.3/gtmlmode.m,
+	  netlab3.3/gtmmag.m, netlab3.3/gtmpost.m, netlab3.3/gtmprob.m,
+	  netlab3.3/hbayes.m, netlab3.3/hesschek.m, netlab3.3/hintmat.m,
+	  netlab3.3/hinton.m, netlab3.3/histp.m, netlab3.3/hmc.m,
+	  netlab3.3/kmeansNetlab.m, netlab3.3/knn.m, netlab3.3/knnfwd.m,
+	  netlab3.3/linef.m, netlab3.3/linemin.m, netlab3.3/maxitmess.m,
+	  netlab3.3/mdn.m, netlab3.3/mdn2gmm.m, netlab3.3/mdndist2.m,
+	  netlab3.3/mdnerr.m, netlab3.3/mdnfwd.m, netlab3.3/mdngrad.m,
+	  netlab3.3/mdninit.m, netlab3.3/mdnnet.mat, netlab3.3/mdnpak.m,
+	  netlab3.3/mdnpost.m, netlab3.3/mdnprob.m, netlab3.3/mdnunpak.m,
+	  netlab3.3/minbrack.m, netlab3.3/mlp.m, netlab3.3/mlpbkp.m,
+	  netlab3.3/mlpderiv.m, netlab3.3/mlperr.m, netlab3.3/mlpevfwd.m,
+	  netlab3.3/mlpfwd.m, netlab3.3/mlpgrad.m, netlab3.3/mlphdotv.m,
+	  netlab3.3/mlphess.m, netlab3.3/mlphint.m, netlab3.3/mlpinit.m,
+	  netlab3.3/mlppak.m, netlab3.3/mlpprior.m, netlab3.3/mlptrain.m,
+	  netlab3.3/mlpunpak.m, netlab3.3/netderiv.m, netlab3.3/neterr.m,
+	  netlab3.3/netevfwd.m, netlab3.3/netgrad.m, netlab3.3/nethess.m,
+	  netlab3.3/netinit.m, netlab3.3/netlab3.3.zip,
+	  netlab3.3/netlogo.mat, netlab3.3/netopt.m, netlab3.3/netpak.m,
+	  netlab3.3/netunpak.m, netlab3.3/oilTrn.dat, netlab3.3/oilTst.dat,
+	  netlab3.3/olgd.m, netlab3.3/pca.m, netlab3.3/plotmat.m,
+	  netlab3.3/ppca.m, netlab3.3/quasinew.m, netlab3.3/rbf.m,
+	  netlab3.3/rbfbkp.m, netlab3.3/rbfderiv.m, netlab3.3/rbferr.m,
+	  netlab3.3/rbfevfwd.m, netlab3.3/rbffwd.m, netlab3.3/rbfgrad.m,
+	  netlab3.3/rbfhess.m, netlab3.3/rbfjacob.m, netlab3.3/rbfpak.m,
+	  netlab3.3/rbfprior.m, netlab3.3/rbfsetbf.m, netlab3.3/rbfsetfw.m,
+	  netlab3.3/rbftrain.m, netlab3.3/rbfunpak.m, netlab3.3/rosegrad.m,
+	  netlab3.3/rosen.m, netlab3.3/scg.m, netlab3.3/som.m,
+	  netlab3.3/somfwd.m, netlab3.3/sompak.m, netlab3.3/somtrain.m,
+	  netlab3.3/somunpak.m, netlab3.3/xor.dat, netlabKPM/README.txt,
+	  netlabKPM/demgmm1_movie.m, netlabKPM/evidence_weighted.m,
+	  netlabKPM/glmerr_weighted.m, netlabKPM/glmgrad_weighted.m,
+	  netlabKPM/glmhess_weighted.m, netlabKPM/glmtrain_weighted.m,
+	  netlabKPM/gmm1.avi, netlabKPM/gmmem2.m,
+	  netlabKPM/gmmem_multi_restart.m, netlabKPM/kmeans_demo.m,
+	  netlabKPM/mlperr_weighted.m, netlabKPM/mlpgrad_weighted.m,
+	  netlabKPM/mlphdotv_weighted.m, netlabKPM/mlphess_weighted.m,
+	  netlabKPM/neterr_weighted.m, netlabKPM/netgrad_weighted.m,
+	  netlabKPM/nethess_weighted.m, netlabKPM/netopt_weighted.m,
+	  netlabKPM/process_options.m: Initial revision
+
+2005-04-25 19:29  yozhik
+
+	* KPMstats/KLgauss.m, KPMstats/README.txt, KPMstats/beta_sample.m,
+	  KPMstats/chisquared_histo.m, KPMstats/chisquared_prob.m,
+	  KPMstats/chisquared_readme.txt, KPMstats/chisquared_table.m,
+	  KPMstats/clg_Mstep.m, KPMstats/clg_Mstep_simple.m,
+	  KPMstats/clg_prob.m, KPMstats/condGaussToJoint.m,
+	  KPMstats/cond_indep_fisher_z.m,
+	  KPMstats/condgaussTrainObserved.m, KPMstats/condgauss_sample.m,
+	  KPMstats/convertBinaryLabels.m, KPMstats/cwr_demo.m,
+	  KPMstats/cwr_em.m, KPMstats/cwr_predict.m, KPMstats/cwr_prob.m,
+	  KPMstats/cwr_readme.txt, KPMstats/cwr_test.m,
+	  KPMstats/dirichlet_sample.m, KPMstats/distchck.m,
+	  KPMstats/eigdec.m, KPMstats/est_transmat.m,
+	  KPMstats/fit_paritioned_model_testfn.m,
+	  KPMstats/fit_partitioned_model.m, KPMstats/gamma_sample.m,
+	  KPMstats/gaussian_prob.m, KPMstats/gaussian_sample.m,
+	  KPMstats/linear_regression.m, KPMstats/logist2.m,
+	  KPMstats/logist2Apply.m, KPMstats/logist2ApplyRegularized.m,
+	  KPMstats/logist2Fit.m, KPMstats/logist2FitRegularized.m,
+	  KPMstats/logistK.m, KPMstats/logistK_eval.m,
+	  KPMstats/marginalize_gaussian.m, KPMstats/matrix_T_pdf.m,
+	  KPMstats/matrix_normal_pdf.m, KPMstats/mc_stat_distrib.m,
+	  KPMstats/mixgauss_Mstep.m, KPMstats/mixgauss_classifier_apply.m,
+	  KPMstats/mixgauss_classifier_train.m, KPMstats/mixgauss_em.m,
+	  KPMstats/mixgauss_init.m, KPMstats/mixgauss_prob.m,
+	  KPMstats/mixgauss_prob_test.m, KPMstats/mixgauss_sample.m,
+	  KPMstats/mkPolyFvec.m, KPMstats/mk_unit_norm.m,
+	  KPMstats/multinomial_prob.m, KPMstats/multinomial_sample.m,
+	  KPMstats/normal_coef.m, KPMstats/partial_corr_coef.m,
+	  KPMstats/parzen.m, KPMstats/parzenC.c, KPMstats/parzenC.dll,
+	  KPMstats/parzenC.mexglx, KPMstats/parzenC_test.m,
+	  KPMstats/parzen_fit_select_unif.m, KPMstats/pca.m,
+	  KPMstats/rndcheck.m, KPMstats/sample.m,
+	  KPMstats/sample_discrete.m, KPMstats/sample_gaussian.m,
+	  KPMstats/student_t_logprob.m, KPMstats/student_t_prob.m,
+	  KPMstats/unif_discrete_sample.m, KPMstats/weightedRegression.m,
+	  KPMtools/README.txt, KPMtools/approx_unique.m,
+	  KPMtools/approxeq.m, KPMtools/argmax.m, KPMtools/argmin.m,
+	  KPMtools/assert.m, KPMtools/assignEdgeNums.m,
+	  KPMtools/assign_cols.m, KPMtools/axis_pct.m, KPMtools/block.m,
+	  KPMtools/cell2num.m, KPMtools/chi2inv.m, KPMtools/choose.m,
+	  KPMtools/collapse_mog.m, KPMtools/colmult.c,
+	  KPMtools/colmult.mexglx, KPMtools/computeROC.m,
+	  KPMtools/compute_counts.m, KPMtools/conf2mahal.m,
+	  KPMtools/cross_entropy.m, KPMtools/div.m, KPMtools/draw_circle.m,
+	  KPMtools/draw_ellipse.m, KPMtools/draw_ellipse_axes.m,
+	  KPMtools/em_converged.m, KPMtools/entropy.m,
+	  KPMtools/exportfig.m, KPMtools/extend_domain_table.m,
+	  KPMtools/factorial.m, KPMtools/find_equiv_posns.m,
+	  KPMtools/hash_add.m, KPMtools/hash_del.m, KPMtools/hash_lookup.m,
+	  KPMtools/hungarian.m, KPMtools/image_rgb.m,
+	  KPMtools/imresizeAspect.m, KPMtools/ind2subv.c,
+	  KPMtools/ind2subv.m, KPMtools/installC_KPMtools.m,
+	  KPMtools/is_psd.m, KPMtools/is_stochastic.m,
+	  KPMtools/isemptycell.m, KPMtools/isposdef.m, KPMtools/isscalar.m,
+	  KPMtools/isvector.m, KPMtools/junk.c, KPMtools/loadcell.m,
+	  KPMtools/logb.m, KPMtools/logdet.m, KPMtools/logsum.m,
+	  KPMtools/logsum_simple.m, KPMtools/logsum_test.m,
+	  KPMtools/logsumexp.m, KPMtools/logsumexpv.m,
+	  KPMtools/marg_table.m, KPMtools/marginalize_table.m,
+	  KPMtools/matprint.m, KPMtools/max_mult.c, KPMtools/max_mult.m,
+	  KPMtools/mexutil.c, KPMtools/mexutil.h,
+	  KPMtools/mk_multi_index.m, KPMtools/mk_stochastic.m,
+	  KPMtools/mult_by_table.m, KPMtools/myintersect.m,
+	  KPMtools/myismember.m, KPMtools/myones.m, KPMtools/myplot.m,
+	  KPMtools/myrand.m, KPMtools/myrepmat.m, KPMtools/myreshape.m,
+	  KPMtools/mysetdiff.m, KPMtools/mysize.m, KPMtools/mysubset.m,
+	  KPMtools/mysymsetdiff.m, KPMtools/bipartiteMatchingHungarian.m,
+	  KPMtools/myunion.m, KPMtools/nchoose2.m, KPMtools/ncols.m,
+	  KPMtools/nonmaxsup.m, KPMtools/normalise.m,
+	  KPMtools/normaliseC.c, KPMtools/normaliseC.dll,
+	  KPMtools/normalize.m, KPMtools/nrows.m, KPMtools/num2strcell.m,
+	  KPMtools/partitionData.m, KPMtools/partition_matrix_vec.m,
+	  KPMtools/pca_netlab.m, KPMtools/pick.m, KPMtools/plotROC.m,
+	  KPMtools/plotROCkpm.m, KPMtools/plot_axis_thru_origin.m,
+	  KPMtools/plot_ellipse.m, KPMtools/plot_matrix.m,
+	  KPMtools/plot_polygon.m, KPMtools/plotcov2.m,
+	  KPMtools/plotcov3.m, KPMtools/plotgauss1d.m,
+	  KPMtools/plotgauss2d.m, KPMtools/plotgauss2d_old.m,
+	  KPMtools/polygon_area.m, KPMtools/polygon_centroid.m,
+	  KPMtools/polygon_intersect.m, KPMtools/previewfig.m,
+	  KPMtools/process_options.m, KPMtools/rand_psd.m,
+	  KPMtools/rectintC.m, KPMtools/rectintLoopC.mexglx,
+	  KPMtools/rectintSparse.m, KPMtools/rectintSparseC.m,
+	  KPMtools/rectintSparseLoopC.c, KPMtools/rectintSparseLoopC.dll,
+	  KPMtools/repmatC.c, KPMtools/repmatC.dll,
+	  KPMtools/repmatC.mexglx, KPMtools/rgb2grayKPM.m,
+	  KPMtools/rnd_partition.m, KPMtools/rotate_xlabel.m,
+	  KPMtools/safeStr.m, KPMtools/sampleUniformInts.m,
+	  KPMtools/sample_discrete.m, KPMtools/set_xtick_label.m,
+	  KPMtools/set_xtick_label_demo.m, KPMtools/setdiag.m,
+	  KPMtools/softeye.m, KPMtools/sort_evec.m,
+	  KPMtools/splitLongSeqIntoManyShort.m, KPMtools/sprintf_intvec.m,
+	  KPMtools/sqdist.m, KPMtools/strmatch_multi.m,
+	  KPMtools/strmatch_substr.m, KPMtools/subplot2.m,
+	  KPMtools/subplot3.m, KPMtools/subsets.m, KPMtools/subv2ind.c,
+	  KPMtools/subv2ind.m, KPMtools/sumv.m, KPMtools/suptitle.m,
+	  KPMtools/unaryEncoding.m, KPMtools/wrap.m,
+	  KPMtools/xticklabel_rotate90.m, KPMtools/zipload.m,
+	  KPMtools/zipsave.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-04-25 19:29  yozhik
+
+	* KPMstats/KLgauss.m, KPMstats/README.txt, KPMstats/beta_sample.m,
+	  KPMstats/chisquared_histo.m, KPMstats/chisquared_prob.m,
+	  KPMstats/chisquared_readme.txt, KPMstats/chisquared_table.m,
+	  KPMstats/clg_Mstep.m, KPMstats/clg_Mstep_simple.m,
+	  KPMstats/clg_prob.m, KPMstats/condGaussToJoint.m,
+	  KPMstats/cond_indep_fisher_z.m,
+	  KPMstats/condgaussTrainObserved.m, KPMstats/condgauss_sample.m,
+	  KPMstats/convertBinaryLabels.m, KPMstats/cwr_demo.m,
+	  KPMstats/cwr_em.m, KPMstats/cwr_predict.m, KPMstats/cwr_prob.m,
+	  KPMstats/cwr_readme.txt, KPMstats/cwr_test.m,
+	  KPMstats/dirichlet_sample.m, KPMstats/distchck.m,
+	  KPMstats/eigdec.m, KPMstats/est_transmat.m,
+	  KPMstats/fit_paritioned_model_testfn.m,
+	  KPMstats/fit_partitioned_model.m, KPMstats/gamma_sample.m,
+	  KPMstats/gaussian_prob.m, KPMstats/gaussian_sample.m,
+	  KPMstats/linear_regression.m, KPMstats/logist2.m,
+	  KPMstats/logist2Apply.m, KPMstats/logist2ApplyRegularized.m,
+	  KPMstats/logist2Fit.m, KPMstats/logist2FitRegularized.m,
+	  KPMstats/logistK.m, KPMstats/logistK_eval.m,
+	  KPMstats/marginalize_gaussian.m, KPMstats/matrix_T_pdf.m,
+	  KPMstats/matrix_normal_pdf.m, KPMstats/mc_stat_distrib.m,
+	  KPMstats/mixgauss_Mstep.m, KPMstats/mixgauss_classifier_apply.m,
+	  KPMstats/mixgauss_classifier_train.m, KPMstats/mixgauss_em.m,
+	  KPMstats/mixgauss_init.m, KPMstats/mixgauss_prob.m,
+	  KPMstats/mixgauss_prob_test.m, KPMstats/mixgauss_sample.m,
+	  KPMstats/mkPolyFvec.m, KPMstats/mk_unit_norm.m,
+	  KPMstats/multinomial_prob.m, KPMstats/multinomial_sample.m,
+	  KPMstats/normal_coef.m, KPMstats/partial_corr_coef.m,
+	  KPMstats/parzen.m, KPMstats/parzenC.c, KPMstats/parzenC.dll,
+	  KPMstats/parzenC.mexglx, KPMstats/parzenC_test.m,
+	  KPMstats/parzen_fit_select_unif.m, KPMstats/pca.m,
+	  KPMstats/rndcheck.m, KPMstats/sample.m,
+	  KPMstats/sample_discrete.m, KPMstats/sample_gaussian.m,
+	  KPMstats/student_t_logprob.m, KPMstats/student_t_prob.m,
+	  KPMstats/unif_discrete_sample.m, KPMstats/weightedRegression.m,
+	  KPMtools/README.txt, KPMtools/approx_unique.m,
+	  KPMtools/approxeq.m, KPMtools/argmax.m, KPMtools/argmin.m,
+	  KPMtools/assert.m, KPMtools/assignEdgeNums.m,
+	  KPMtools/assign_cols.m, KPMtools/axis_pct.m, KPMtools/block.m,
+	  KPMtools/cell2num.m, KPMtools/chi2inv.m, KPMtools/choose.m,
+	  KPMtools/collapse_mog.m, KPMtools/colmult.c,
+	  KPMtools/colmult.mexglx, KPMtools/computeROC.m,
+	  KPMtools/compute_counts.m, KPMtools/conf2mahal.m,
+	  KPMtools/cross_entropy.m, KPMtools/div.m, KPMtools/draw_circle.m,
+	  KPMtools/draw_ellipse.m, KPMtools/draw_ellipse_axes.m,
+	  KPMtools/em_converged.m, KPMtools/entropy.m,
+	  KPMtools/exportfig.m, KPMtools/extend_domain_table.m,
+	  KPMtools/factorial.m, KPMtools/find_equiv_posns.m,
+	  KPMtools/hash_add.m, KPMtools/hash_del.m, KPMtools/hash_lookup.m,
+	  KPMtools/hungarian.m, KPMtools/image_rgb.m,
+	  KPMtools/imresizeAspect.m, KPMtools/ind2subv.c,
+	  KPMtools/ind2subv.m, KPMtools/installC_KPMtools.m,
+	  KPMtools/is_psd.m, KPMtools/is_stochastic.m,
+	  KPMtools/isemptycell.m, KPMtools/isposdef.m, KPMtools/isscalar.m,
+	  KPMtools/isvector.m, KPMtools/junk.c, KPMtools/loadcell.m,
+	  KPMtools/logb.m, KPMtools/logdet.m, KPMtools/logsum.m,
+	  KPMtools/logsum_simple.m, KPMtools/logsum_test.m,
+	  KPMtools/logsumexp.m, KPMtools/logsumexpv.m,
+	  KPMtools/marg_table.m, KPMtools/marginalize_table.m,
+	  KPMtools/matprint.m, KPMtools/max_mult.c, KPMtools/max_mult.m,
+	  KPMtools/mexutil.c, KPMtools/mexutil.h,
+	  KPMtools/mk_multi_index.m, KPMtools/mk_stochastic.m,
+	  KPMtools/mult_by_table.m, KPMtools/myintersect.m,
+	  KPMtools/myismember.m, KPMtools/myones.m, KPMtools/myplot.m,
+	  KPMtools/myrand.m, KPMtools/myrepmat.m, KPMtools/myreshape.m,
+	  KPMtools/mysetdiff.m, KPMtools/mysize.m, KPMtools/mysubset.m,
+	  KPMtools/mysymsetdiff.m, KPMtools/bipartiteMatchingHungarian.m,
+	  KPMtools/myunion.m, KPMtools/nchoose2.m, KPMtools/ncols.m,
+	  KPMtools/nonmaxsup.m, KPMtools/normalise.m,
+	  KPMtools/normaliseC.c, KPMtools/normaliseC.dll,
+	  KPMtools/normalize.m, KPMtools/nrows.m, KPMtools/num2strcell.m,
+	  KPMtools/partitionData.m, KPMtools/partition_matrix_vec.m,
+	  KPMtools/pca_netlab.m, KPMtools/pick.m, KPMtools/plotROC.m,
+	  KPMtools/plotROCkpm.m, KPMtools/plot_axis_thru_origin.m,
+	  KPMtools/plot_ellipse.m, KPMtools/plot_matrix.m,
+	  KPMtools/plot_polygon.m, KPMtools/plotcov2.m,
+	  KPMtools/plotcov3.m, KPMtools/plotgauss1d.m,
+	  KPMtools/plotgauss2d.m, KPMtools/plotgauss2d_old.m,
+	  KPMtools/polygon_area.m, KPMtools/polygon_centroid.m,
+	  KPMtools/polygon_intersect.m, KPMtools/previewfig.m,
+	  KPMtools/process_options.m, KPMtools/rand_psd.m,
+	  KPMtools/rectintC.m, KPMtools/rectintLoopC.mexglx,
+	  KPMtools/rectintSparse.m, KPMtools/rectintSparseC.m,
+	  KPMtools/rectintSparseLoopC.c, KPMtools/rectintSparseLoopC.dll,
+	  KPMtools/repmatC.c, KPMtools/repmatC.dll,
+	  KPMtools/repmatC.mexglx, KPMtools/rgb2grayKPM.m,
+	  KPMtools/rnd_partition.m, KPMtools/rotate_xlabel.m,
+	  KPMtools/safeStr.m, KPMtools/sampleUniformInts.m,
+	  KPMtools/sample_discrete.m, KPMtools/set_xtick_label.m,
+	  KPMtools/set_xtick_label_demo.m, KPMtools/setdiag.m,
+	  KPMtools/softeye.m, KPMtools/sort_evec.m,
+	  KPMtools/splitLongSeqIntoManyShort.m, KPMtools/sprintf_intvec.m,
+	  KPMtools/sqdist.m, KPMtools/strmatch_multi.m,
+	  KPMtools/strmatch_substr.m, KPMtools/subplot2.m,
+	  KPMtools/subplot3.m, KPMtools/subsets.m, KPMtools/subv2ind.c,
+	  KPMtools/subv2ind.m, KPMtools/sumv.m, KPMtools/suptitle.m,
+	  KPMtools/unaryEncoding.m, KPMtools/wrap.m,
+	  KPMtools/xticklabel_rotate90.m, KPMtools/zipload.m,
+	  KPMtools/zipsave.m: Initial revision
+
+2005-04-03 18:39  yozhik
+
+	* BNT/learning/score_dags.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-04-03 18:39  yozhik
+
+	* BNT/learning/score_dags.m: Initial revision
+
+2005-03-31 11:20  yozhik
+
+	* BNT/installC_BNT.m: Initial import of code base from Kevin
+	  Murphy.
+
+2005-03-31 11:20  yozhik
+
+	* BNT/installC_BNT.m: Initial revision
+
+2005-03-30 11:59  yozhik
+
+	* KPMtools/asdemo.html: Initial import of code base from Kevin
+	  Murphy.
+
+2005-03-30 11:59  yozhik
+
+	* KPMtools/asdemo.html: Initial revision
+
+2005-03-26 18:51  yozhik
+
+	* KPMtools/asdemo.m: Initial import of code base from Kevin Murphy.
+
+2005-03-26 18:51  yozhik
+
+	* KPMtools/asdemo.m: Initial revision
+
+2005-01-15 18:27  yozhik
+
+	* BNT/CPDs/@tabular_CPD/: get_field.m, set_fields.m, tabular_CPD.m:
+	  Initial import of code base from Kevin Murphy.
+
+2005-01-15 18:27  yozhik
+
+	* BNT/CPDs/@tabular_CPD/: get_field.m, set_fields.m, tabular_CPD.m:
+	  Initial revision
+
+2004-11-24 12:12  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/junk: Initial import of
+	  code base from Kevin Murphy.
+
+2004-11-24 12:12  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/junk: Initial revision
+
+2004-11-22 14:41  yozhik
+
+	* BNT/examples/dynamic/orig_water1.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-11-22 14:41  yozhik
+
+	* BNT/examples/dynamic/orig_water1.m: Initial revision
+
+2004-11-22 14:15  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/cbk_inf_engine.m: Initial
+	  import of code base from Kevin Murphy.
+
+2004-11-22 14:15  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/cbk_inf_engine.m: Initial
+	  revision
+
+2004-11-06 13:52  yozhik
+
+	* BNT/examples/static/StructLearn/model_select2.m: Initial import
+	  of code base from Kevin Murphy.
+
+2004-11-06 13:52  yozhik
+
+	* BNT/examples/static/StructLearn/model_select2.m: Initial revision
+
+2004-11-06 12:55  yozhik
+
+	* BNT/examples/static/StructLearn/model_select1.m: Initial import
+	  of code base from Kevin Murphy.
+
+2004-11-06 12:55  yozhik
+
+	* BNT/examples/static/StructLearn/model_select1.m: Initial revision
+
+2004-10-22 18:18  yozhik
+
+	* HMM/viterbi_path.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-10-22 18:18  yozhik
+
+	* HMM/viterbi_path.m: Initial revision
+
+2004-09-29 20:09  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-09-29 20:09  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2004-09-12 20:21  yozhik
+
+	* BNT/examples/limids/amnio.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-09-12 20:21  yozhik
+
+	* BNT/examples/limids/amnio.m: Initial revision
+
+2004-09-12 19:27  yozhik
+
+	* BNT/examples/limids/oil1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-09-12 19:27  yozhik
+
+	* BNT/examples/limids/oil1.m: Initial revision
+
+2004-09-12 14:01  yozhik
+
+	* BNT/examples/static/sprinkler1.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-09-12 14:01  yozhik
+
+	* BNT/examples/static/sprinkler1.m: Initial revision
+
+2004-08-29 05:41  yozhik
+
+	* HMM/transmat_train_observed.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-08-29 05:41  yozhik
+
+	* HMM/transmat_train_observed.m: Initial revision
+
+2004-08-05 08:25  yozhik
+
+	* BNT/potentials/: @dpot/divide_by_pot.m, Tables/divide_by_table.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-08-05 08:25  yozhik
+
+	* BNT/potentials/: @dpot/divide_by_pot.m, Tables/divide_by_table.m:
+	  Initial revision
+
+2004-08-04 12:59  yozhik
+
+	* BNT/potentials/@dpot/: marginalize_pot.m, multiply_by_pot.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-08-04 12:59  yozhik
+
+	* BNT/potentials/@dpot/: marginalize_pot.m, multiply_by_pot.m:
+	  Initial revision
+
+2004-08-04 12:36  yozhik
+
+	* BNT/@assocarray/subsref.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-08-04 12:36  yozhik
+
+	* BNT/@assocarray/subsref.m: Initial revision
+
+2004-08-04 08:54  yozhik
+
+	* BNT/potentials/@dpot/normalize_pot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-08-04 08:54  yozhik
+
+	* BNT/potentials/@dpot/normalize_pot.m: Initial revision
+
+2004-08-04 08:51  yozhik
+
+	* BNT/potentials/Tables/: marg_table.m, mult_by_table.m,
+	  extend_domain_table.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-08-04 08:51  yozhik
+
+	* BNT/potentials/Tables/: marg_table.m, mult_by_table.m,
+	  extend_domain_table.m: Initial revision
+
+2004-08-02 15:23  yozhik
+
+	* BNT/CPDs/@noisyor_CPD/CPD_to_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-08-02 15:23  yozhik
+
+	* BNT/CPDs/@noisyor_CPD/CPD_to_CPT.m: Initial revision
+
+2004-08-02 15:05  yozhik
+
+	* BNT/general/noisyORtoTable.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-08-02 15:05  yozhik
+
+	* BNT/general/noisyORtoTable.m: Initial revision
+
+2004-06-29 10:46  yozhik
+
+	* BNT/learning/learn_struct_pdag_pc.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-06-29 10:46  yozhik
+
+	* BNT/learning/learn_struct_pdag_pc.m: Initial revision
+
+2004-06-15 10:50  yozhik
+
+	* GraphViz/graph_to_dot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-06-15 10:50  yozhik
+
+	* GraphViz/graph_to_dot.m: Initial revision
+
+2004-06-11 14:16  yozhik
+
+	* BNT/CPDs/@tabular_CPD/log_marg_prob_node.m: Initial import of
+	  code base from Kevin Murphy.
+
+2004-06-11 14:16  yozhik
+
+	* BNT/CPDs/@tabular_CPD/log_marg_prob_node.m: Initial revision
+
+2004-06-09 18:56  yozhik
+
+	* BNT/README.txt: Initial import of code base from Kevin Murphy.
+
+2004-06-09 18:56  yozhik
+
+	* BNT/README.txt: Initial revision
+
+2004-06-09 18:53  yozhik
+
+	* BNT/CPDs/@generic_CPD/learn_params.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-06-09 18:53  yozhik
+
+	* BNT/CPDs/@generic_CPD/learn_params.m: Initial revision
+
+2004-06-09 18:42  yozhik
+
+	* BNT/examples/static/nodeorderExample.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-06-09 18:42  yozhik
+
+	* BNT/examples/static/nodeorderExample.m: Initial revision
+
+2004-06-09 18:33  yozhik
+
+	* BNT/: learning/score_family.m, test_BNT.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-06-09 18:33  yozhik
+
+	* BNT/: learning/score_family.m, test_BNT.m: Initial revision
+
+2004-06-09 18:28  yozhik
+
+	* BNT/: learning/learn_params.m, CPDs/@gaussian_CPD/learn_params.m,
+	  examples/static/gaussian2.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-09 18:28  yozhik
+
+	* BNT/: learning/learn_params.m, CPDs/@gaussian_CPD/learn_params.m,
+	  examples/static/gaussian2.m: Initial revision
+
+2004-06-09 18:25  yozhik
+
+	* BNT/CPDs/@tabular_CPD/learn_params.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-06-09 18:25  yozhik
+
+	* BNT/CPDs/@tabular_CPD/learn_params.m: Initial revision
+
+2004-06-09 18:17  yozhik
+
+	* BNT/general/sample_bnet.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-06-09 18:17  yozhik
+
+	* BNT/general/sample_bnet.m: Initial revision
+
+2004-06-07 12:45  yozhik
+
+	* BNT/examples/static/discrete1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-07 12:45  yozhik
+
+	* BNT/examples/static/discrete1.m: Initial revision
+
+2004-06-07 12:04  yozhik
+
+	* BNT/: inference/static/@global_joint_inf_engine/marginal_nodes.m,
+	  inference/static/@global_joint_inf_engine/enter_evidence.m,
+	  examples/dynamic/mk_bat_dbn.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-07 12:04  yozhik
+
+	* BNT/: inference/static/@global_joint_inf_engine/marginal_nodes.m,
+	  inference/static/@global_joint_inf_engine/enter_evidence.m,
+	  examples/dynamic/mk_bat_dbn.m: Initial revision
+
+2004-06-07 08:53  yozhik
+
+	* BNT/examples/limids/asia_dt1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-06-07 08:53  yozhik
+
+	* BNT/examples/limids/asia_dt1.m: Initial revision
+
+2004-06-07 08:48  yozhik
+
+	* BNT/general/: solve_limid.m, compute_joint_pot.m: Initial import
+	  of code base from Kevin Murphy.
+
+2004-06-07 08:48  yozhik
+
+	* BNT/general/: solve_limid.m, compute_joint_pot.m: Initial
+	  revision
+
+2004-06-07 07:39  yozhik
+
+	* Kalman/README.txt: Initial import of code base from Kevin Murphy.
+
+2004-06-07 07:39  yozhik
+
+	* Kalman/README.txt: Initial revision
+
+2004-06-07 07:33  yozhik
+
+	* GraphViz/README.txt: Initial import of code base from Kevin
+	  Murphy.
+
+2004-06-07 07:33  yozhik
+
+	* GraphViz/README.txt: Initial revision
+
+2004-05-31 15:19  yozhik
+
+	* HMM/dhmm_sample.m: Initial import of code base from Kevin Murphy.
+
+2004-05-31 15:19  yozhik
+
+	* HMM/dhmm_sample.m: Initial revision
+
+2004-05-25 17:32  yozhik
+
+	* HMM/mhmm_sample.m: Initial import of code base from Kevin Murphy.
+
+2004-05-25 17:32  yozhik
+
+	* HMM/mhmm_sample.m: Initial revision
+
+2004-05-24 15:26  yozhik
+
+	* HMM/mc_sample.m: Initial import of code base from Kevin Murphy.
+
+2004-05-24 15:26  yozhik
+
+	* HMM/mc_sample.m: Initial revision
+
+2004-05-18 07:50  yozhik
+
+	* BNT/installC_graph.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-05-18 07:50  yozhik
+
+	* BNT/installC_graph.m: Initial revision
+
+2004-05-13 18:13  yozhik
+
+	* BNT/inference/static/@gaussian_inf_engine/gaussian_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-05-13 18:13  yozhik
+
+	* BNT/inference/static/@gaussian_inf_engine/gaussian_inf_engine.m:
+	  Initial revision
+
+2004-05-11 12:23  yozhik
+
+	* BNT/examples/dynamic/mk_chmm.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-05-11 12:23  yozhik
+
+	* BNT/examples/dynamic/mk_chmm.m: Initial revision
+
+2004-05-11 11:45  yozhik
+
+	* BNT/examples/dynamic/mk_water_dbn.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-05-11 11:45  yozhik
+
+	* BNT/examples/dynamic/mk_water_dbn.m: Initial revision
+
+2004-05-05 06:32  yozhik
+
+	* GraphViz/draw_dot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-05-05 06:32  yozhik
+
+	* GraphViz/draw_dot.m: Initial revision
+
+2004-03-30 09:18  yozhik
+
+	* BNT/: general/mk_named_CPT.m,
+	  CPDs/@softmax_CPD/convert_to_table.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-03-30 09:18  yozhik
+
+	* BNT/: general/mk_named_CPT.m,
+	  CPDs/@softmax_CPD/convert_to_table.m: Initial revision
+
+2004-03-22 14:32  yozhik
+
+	* GraphViz/draw_graph.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-03-22 14:32  yozhik
+
+	* GraphViz/draw_graph.m: Initial revision
+
+2004-03-12 15:21  yozhik
+
+	* GraphViz/dot_to_graph.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-03-12 15:21  yozhik
+
+	* GraphViz/dot_to_graph.m: Initial revision
+
+2004-03-04 14:34  yozhik
+
+	* BNT/examples/static/burglary.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-03-04 14:34  yozhik
+
+	* BNT/examples/static/burglary.m: Initial revision
+
+2004-03-04 14:27  yozhik
+
+	* BNT/examples/static/burglar-alarm-net.lisp.txt: Initial import of
+	  code base from Kevin Murphy.
+
+2004-03-04 14:27  yozhik
+
+	* BNT/examples/static/burglar-alarm-net.lisp.txt: Initial revision
+
+2004-02-28 09:25  yozhik
+
+	* BNT/examples/static/learn1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-28 09:25  yozhik
+
+	* BNT/examples/static/learn1.m: Initial revision
+
+2004-02-22 11:43  yozhik
+
+	* BNT/examples/static/brainy.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-22 11:43  yozhik
+
+	* BNT/examples/static/brainy.m: Initial revision
+
+2004-02-20 14:00  yozhik
+
+	* BNT/CPDs/@discrete_CPD/convert_to_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-02-20 14:00  yozhik
+
+	* BNT/CPDs/@discrete_CPD/convert_to_pot.m: Initial revision
+
+2004-02-18 17:12  yozhik
+
+	*
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_soft_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-02-18 17:12  yozhik
+
+	*
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_soft_evidence.m:
+	  Initial revision
+
+2004-02-13 18:06  yozhik
+
+	* HMM/mhmmParzen_train_observed.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-13 18:06  yozhik
+
+	* HMM/mhmmParzen_train_observed.m: Initial revision
+
+2004-02-12 15:08  yozhik
+
+	* HMM/gausshmm_train_observed.m: Initial import of code base from
+	  Kevin Murphy.
+
+2004-02-12 15:08  yozhik
+
+	* HMM/gausshmm_train_observed.m: Initial revision
+
+2004-02-12 04:57  yozhik
+
+	* BNT/examples/static/HME/hmemenu.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-02-12 04:57  yozhik
+
+	* BNT/examples/static/HME/hmemenu.m: Initial revision
+
+2004-02-07 20:52  yozhik
+
+	* HMM/mhmm_em.m: Initial import of code base from Kevin Murphy.
+
+2004-02-07 20:52  yozhik
+
+	* HMM/mhmm_em.m: Initial revision
+
+2004-02-04 15:53  yozhik
+
+	* BNT/examples/dynamic/mk_orig_bat_dbn.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-02-04 15:53  yozhik
+
+	* BNT/examples/dynamic/mk_orig_bat_dbn.m: Initial revision
+
+2004-02-03 23:42  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_soft_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2004-02-03 23:42  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_soft_evidence.m:
+	  Initial revision
+
+2004-02-03 09:15  yozhik
+
+	* GraphViz/Old/graphToDot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-02-03 09:15  yozhik
+
+	* GraphViz/Old/graphToDot.m: Initial revision
+
+2004-01-30 18:57  yozhik
+
+	* BNT/examples/dynamic/mk_orig_water_dbn.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-01-30 18:57  yozhik
+
+	* BNT/examples/dynamic/mk_orig_water_dbn.m: Initial revision
+
+2004-01-27 13:08  yozhik
+
+	* GraphViz/: my_call.m, editGraphGUI.m: Initial import of code base
+	  from Kevin Murphy.
+
+2004-01-27 13:08  yozhik
+
+	* GraphViz/: my_call.m, editGraphGUI.m: Initial revision
+
+2004-01-27 13:01  yozhik
+
+	* GraphViz/Old/: dot_to_graph.m, draw_graph.m: Initial import of
+	  code base from Kevin Murphy.
+
+2004-01-27 13:01  yozhik
+
+	* GraphViz/Old/: dot_to_graph.m, draw_graph.m: Initial revision
+
+2004-01-27 12:47  yozhik
+
+	* GraphViz/Old/pre_pesha_graph_to_dot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-01-27 12:47  yozhik
+
+	* GraphViz/Old/pre_pesha_graph_to_dot.m: Initial revision
+
+2004-01-27 12:42  yozhik
+
+	* GraphViz/Old/draw_dot.m: Initial import of code base from Kevin
+	  Murphy.
+
+2004-01-27 12:42  yozhik
+
+	* GraphViz/Old/draw_dot.m: Initial revision
+
+2004-01-14 17:06  yozhik
+
+	* BNT/examples/static/Models/mk_hmm_bnet.m: Initial import of code
+	  base from Kevin Murphy.
+
+2004-01-14 17:06  yozhik
+
+	* BNT/examples/static/Models/mk_hmm_bnet.m: Initial revision
+
+2004-01-12 12:53  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_evidence.m: Initial
+	  import of code base from Kevin Murphy.
+
+2004-01-12 12:53  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/enter_evidence.m: Initial
+	  revision
+
+2004-01-04 17:23  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/bp_mrf2.m: Initial
+	  import of code base from Kevin Murphy.
+
+2004-01-04 17:23  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/bp_mrf2.m: Initial
+	  revision
+
+2003-12-15 22:17  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/marginal_nodes.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-12-15 22:17  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/marginal_nodes.m: Initial
+	  revision
+
+2003-10-31 14:37  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/jtree_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-10-31 14:37  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/jtree_inf_engine.m:
+	  Initial revision
+
+2003-09-05 07:06  yozhik
+
+	* BNT/learning/learn_struct_mcmc.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-09-05 07:06  yozhik
+
+	* BNT/learning/learn_struct_mcmc.m: Initial revision
+
+2003-08-18 14:50  yozhik
+
+	* BNT/learning/learn_params_dbn_em.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-08-18 14:50  yozhik
+
+	* BNT/learning/learn_params_dbn_em.m: Initial revision
+
+2003-07-30 06:37  yozhik
+
+	* BNT/potentials/: @mpot/set_domain_pot.m,
+	  @cgpot/Old/set_domain_pot.m, @cgpot/set_domain_pot.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-07-30 06:37  yozhik
+
+	* BNT/potentials/: @mpot/set_domain_pot.m,
+	  @cgpot/Old/set_domain_pot.m, @cgpot/set_domain_pot.m: Initial
+	  revision
+
+2003-07-28 19:44  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/: dbn_init_bel.m,
+	  dbn_marginal_from_bel.m, dbn_update_bel.m, dbn_update_bel1.m,
+	  marginal_family.m, update_engine.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-07-28 19:44  yozhik
+
+	* BNT/inference/dynamic/@cbk_inf_engine/: dbn_init_bel.m,
+	  dbn_marginal_from_bel.m, dbn_update_bel.m, dbn_update_bel1.m,
+	  marginal_family.m, update_engine.m: Initial revision
+
+2003-07-28 15:44  yozhik
+
+	* GraphViz/: approxeq.m, process_options.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-07-28 15:44  yozhik
+
+	* GraphViz/: approxeq.m, process_options.m: Initial revision
+
+2003-07-24 06:41  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_ess.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-07-24 06:41  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_ess.m: Initial revision
+
+2003-07-22 15:55  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/update_ess.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-07-22 15:55  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/update_ess.m: Initial revision
+
+2003-07-06 13:57  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/bethe_free_energy.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-07-06 13:57  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/bethe_free_energy.m:
+	  Initial revision
+
+2003-05-21 06:49  yozhik
+
+	* BNT/potentials/@scgpot/: complement_pot.m, normalize_pot.m,
+	  recursive_combine_pots.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-21 06:49  yozhik
+
+	* BNT/potentials/@scgpot/: complement_pot.m, normalize_pot.m,
+	  recursive_combine_pots.m: Initial revision
+
+2003-05-20 07:10  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-05-20 07:10  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params.m: Initial revision
+
+2003-05-13 09:11  yozhik
+
+	* HMM/mhmm_em_demo.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-13 09:11  yozhik
+
+	* HMM/mhmm_em_demo.m: Initial revision
+
+2003-05-13 07:35  yozhik
+
+	* BNT/examples/dynamic/viterbi1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-05-13 07:35  yozhik
+
+	* BNT/examples/dynamic/viterbi1.m: Initial revision
+
+2003-05-11 16:31  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_table.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-05-11 16:31  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_table.m: Initial revision
+
+2003-05-11 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD_params_given_dps.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-05-11 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/gaussian_CPD_params_given_dps.m: Initial
+	  revision
+
+2003-05-11 08:39  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/README: Initial
+	  import of code base from Kevin Murphy.
+
+2003-05-11 08:39  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/README: Initial
+	  revision
+
+2003-05-04 15:31  yozhik
+
+	* BNT/uninstallC_BNT.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-04 15:31  yozhik
+
+	* BNT/uninstallC_BNT.m: Initial revision
+
+2003-05-04 15:23  yozhik
+
+	* BNT/examples/dynamic/: dhmm1.m, ghmm1.m, mhmm1.m: Initial import
+	  of code base from Kevin Murphy.
+
+2003-05-04 15:23  yozhik
+
+	* BNT/examples/dynamic/: dhmm1.m, ghmm1.m, mhmm1.m: Initial
+	  revision
+
+2003-05-04 15:11  yozhik
+
+	* HMM/mhmm_logprob.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-05-04 15:11  yozhik
+
+	* HMM/mhmm_logprob.m: Initial revision
+
+2003-05-04 15:01  yozhik
+
+	* HMM/: dhmm_logprob.m, dhmm_em_online.m, dhmm_em_online_demo.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 15:01  yozhik
+
+	* HMM/: dhmm_logprob.m, dhmm_em_online.m, dhmm_em_online_demo.m:
+	  Initial revision
+
+2003-05-04 14:58  yozhik
+
+	* HMM/: pomdp_sample.m, dhmm_sample_endstate.m, dhmm_em_demo.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 14:58  yozhik
+
+	* HMM/: pomdp_sample.m, dhmm_sample_endstate.m, dhmm_em_demo.m:
+	  Initial revision
+
+2003-05-04 14:47  yozhik
+
+	*
+	  BNT/inference/online/@hmm_2TBN_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 14:47  yozhik
+
+	*
+	  BNT/inference/online/@hmm_2TBN_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial revision
+
+2003-05-04 14:42  yozhik
+
+	*
+	  BNT/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_matrix.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-05-04 14:42  yozhik
+
+	*
+	  BNT/inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_matrix.m:
+	  Initial revision
+
+2003-04-22 14:00  yozhik
+
+	* BNT/CPDs/@tabular_CPD/display.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-04-22 14:00  yozhik
+
+	* BNT/CPDs/@tabular_CPD/display.m: Initial revision
+
+2003-03-28 09:22  yozhik
+
+	* BNT/examples/dynamic/ho1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-03-28 09:22  yozhik
+
+	* BNT/examples/dynamic/ho1.m: Initial revision
+
+2003-03-28 09:12  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-03-28 09:12  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/stab_cond_gauss_inf_engine.m:
+	  Initial revision
+
+2003-03-28 08:35  yozhik
+
+	* GraphViz/arrow.m: Initial import of code base from Kevin Murphy.
+
+2003-03-28 08:35  yozhik
+
+	* GraphViz/arrow.m: Initial revision
+
+2003-03-25 16:06  yozhik
+
+	* BNT/examples/static/Models/mk_asia_bnet.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-25 16:06  yozhik
+
+	* BNT/examples/static/Models/mk_asia_bnet.m: Initial revision
+
+2003-03-20 07:07  yozhik
+
+	* BNT/potentials/@scgpot/README: Initial import of code base from
+	  Kevin Murphy.
+
+2003-03-20 07:07  yozhik
+
+	* BNT/potentials/@scgpot/README: Initial revision
+
+2003-03-14 01:45  yozhik
+
+	*
+	  BNT/inference/dynamic/@stable_ho_inf_engine/stable_ho_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-03-14 01:45  yozhik
+
+	*
+	  BNT/inference/dynamic/@stable_ho_inf_engine/stable_ho_inf_engine.m:
+	  Initial revision
+
+2003-03-12 02:38  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/enter_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-03-12 02:38  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/enter_evidence.m:
+	  Initial revision
+
+2003-03-11 10:07  yozhik
+
+	* BNT/potentials/@scgpot/reduce_pot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-03-11 10:07  yozhik
+
+	* BNT/potentials/@scgpot/reduce_pot.m: Initial revision
+
+2003-03-11 09:49  yozhik
+
+	* BNT/potentials/@scgpot/combine_pots.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-11 09:49  yozhik
+
+	* BNT/potentials/@scgpot/combine_pots.m: Initial revision
+
+2003-03-11 09:37  yozhik
+
+	* BNT/potentials/@scgcpot/reduce_pot.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-03-11 09:37  yozhik
+
+	* BNT/potentials/@scgcpot/reduce_pot.m: Initial revision
+
+2003-03-11 09:06  yozhik
+
+	* BNT/potentials/@scgpot/marginalize_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-11 09:06  yozhik
+
+	* BNT/potentials/@scgpot/marginalize_pot.m: Initial revision
+
+2003-03-11 06:04  yozhik
+
+	* BNT/potentials/@scgpot/scgpot.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-03-11 06:04  yozhik
+
+	* BNT/potentials/@scgpot/scgpot.m: Initial revision
+
+2003-03-09 15:03  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-09 15:03  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/convert_to_pot.m: Initial revision
+
+2003-03-09 14:44  yozhik
+
+	* BNT/CPDs/@tabular_CPD/maximize_params.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-03-09 14:44  yozhik
+
+	* BNT/CPDs/@tabular_CPD/maximize_params.m: Initial revision
+
+2003-02-21 03:20  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_difclq_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-02-21 03:20  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_difclq_nodes.m:
+	  Initial revision
+
+2003-02-21 03:13  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-02-21 03:13  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2003-02-19 01:52  yozhik
+
+	* BNT/inference/dynamic/@stable_ho_inf_engine/: enter_evidence.m,
+	  marginal_family.m, marginal_nodes.m, test_ho_inf_enginge.m,
+	  update_engine.m: Initial import of code base from Kevin Murphy.
+
+2003-02-19 01:52  yozhik
+
+	* BNT/inference/dynamic/@stable_ho_inf_engine/: enter_evidence.m,
+	  marginal_family.m, marginal_nodes.m, test_ho_inf_enginge.m,
+	  update_engine.m: Initial revision
+
+2003-02-10 07:38  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/push.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-02-10 07:38  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/push.m: Initial
+	  revision
+
+2003-02-06 18:25  yozhik
+
+	* KPMtools/checkpsd.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-02-06 18:25  yozhik
+
+	* KPMtools/checkpsd.m: Initial revision
+
+2003-02-05 19:16  yozhik
+
+	* GraphViz/draw_hmm.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-02-05 19:16  yozhik
+
+	* GraphViz/draw_hmm.m: Initial revision
+
+2003-02-01 16:23  yozhik
+
+	* BNT/: general/dbn_to_hmm.m, learning/learn_params_dbn.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-02-01 16:23  yozhik
+
+	* BNT/: general/dbn_to_hmm.m, learning/learn_params_dbn.m: Initial
+	  revision
+
+2003-02-01 11:42  yozhik
+
+	* BNT/general/mk_dbn.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-02-01 11:42  yozhik
+
+	* BNT/general/mk_dbn.m: Initial revision
+
+2003-01-30 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params_debug.m: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-30 16:13  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/maximize_params_debug.m: Initial revision
+
+2003-01-30 14:38  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/Old/maximize_params.m: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-30 14:38  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/Old/maximize_params.m: Initial revision
+
+2003-01-29 03:23  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_singleclq_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-29 03:23  yozhik
+
+	*
+	  BNT/inference/static/@stab_cond_gauss_inf_engine/marginal_singleclq_nodes.m:
+	  Initial revision
+
+2003-01-24 11:36  yozhik
+
+	* Kalman/sample_lds.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-24 11:36  yozhik
+
+	* Kalman/sample_lds.m: Initial revision
+
+2003-01-24 04:52  yozhik
+
+	* BNT/potentials/@scgpot/extension_pot.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-01-24 04:52  yozhik
+
+	* BNT/potentials/@scgpot/extension_pot.m: Initial revision
+
+2003-01-23 10:49  yozhik
+
+	* BNT/: general/convert_dbn_CPDs_to_tables1.m,
+	  inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-23 10:49  yozhik
+
+	* BNT/: general/convert_dbn_CPDs_to_tables1.m,
+	  inference/dynamic/@hmm_inf_engine/private/mk_hmm_obs_lik_vec.m:
+	  Initial revision
+
+2003-01-23 10:44  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_tables.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-01-23 10:44  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_tables.m: Initial revision
+
+2003-01-22 13:38  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-01-22 13:38  yozhik
+
+	* BNT/inference/dynamic/@hmm_inf_engine/enter_evidence.m: Initial
+	  revision
+
+2003-01-22 12:32  yozhik
+
+	* HMM/mc_sample_endstate.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-22 12:32  yozhik
+
+	* HMM/mc_sample_endstate.m: Initial revision
+
+2003-01-22 09:56  yozhik
+
+	* HMM/fixed_lag_smoother.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-22 09:56  yozhik
+
+	* HMM/fixed_lag_smoother.m: Initial revision
+
+2003-01-20 08:56  yozhik
+
+	* GraphViz/draw_graph_test.m: Initial import of code base from
+	  Kevin Murphy.
+
+2003-01-20 08:56  yozhik
+
+	* GraphViz/draw_graph_test.m: Initial revision
+
+2003-01-18 15:10  yozhik
+
+	* BNT/general/dsep_test.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-18 15:10  yozhik
+
+	* BNT/general/dsep_test.m: Initial revision
+
+2003-01-18 15:00  yozhik
+
+	* BNT/copyright.txt: Initial import of code base from Kevin Murphy.
+
+2003-01-18 15:00  yozhik
+
+	* BNT/copyright.txt: Initial revision
+
+2003-01-18 14:49  yozhik
+
+	* Kalman/tracking_demo.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-18 14:49  yozhik
+
+	* Kalman/tracking_demo.m: Initial revision
+
+2003-01-18 14:22  yozhik
+
+	* BNT/: examples/dummy, inference/dummy, inference/dynamic/dummy,
+	  inference/online/dummy, inference/static/dummy: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-18 14:22  yozhik
+
+	* BNT/: examples/dummy, inference/dummy, inference/dynamic/dummy,
+	  inference/online/dummy, inference/static/dummy: Initial revision
+
+2003-01-18 14:16  yozhik
+
+	* BNT/examples/dynamic/: ehmm1.m, jtree_clq_test.m: Initial import
+	  of code base from Kevin Murphy.
+
+2003-01-18 14:16  yozhik
+
+	* BNT/examples/dynamic/: ehmm1.m, jtree_clq_test.m: Initial
+	  revision
+
+2003-01-18 14:11  yozhik
+
+	* BNT/inference/static/:
+	  @jtree_sparse_inf_engine/jtree_sparse_inf_engine.m,
+	  @jtree_mnet_inf_engine/jtree_mnet_inf_engine.m: Initial import of
+	  code base from Kevin Murphy.
+
+2003-01-18 14:11  yozhik
+
+	* BNT/inference/static/:
+	  @jtree_sparse_inf_engine/jtree_sparse_inf_engine.m,
+	  @jtree_mnet_inf_engine/jtree_mnet_inf_engine.m: Initial revision
+
+2003-01-18 13:17  yozhik
+
+	* GraphViz/draw_dbn_test.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-18 13:17  yozhik
+
+	* GraphViz/draw_dbn_test.m: Initial revision
+
+2003-01-11 10:53  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/pearl_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-11 10:53  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/pearl_inf_engine.m:
+	  Initial revision
+
+2003-01-11 10:48  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/learn_map.m: Initial import of code
+	  base from Kevin Murphy.
+
+2003-01-11 10:48  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/learn_map.m: Initial revision
+
+2003-01-11 10:41  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-11 10:41  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/enter_evidence.m:
+	  Initial revision
+
+2003-01-11 10:13  yozhik
+
+	* BNT/inference/dynamic/@bk_inf_engine/enter_soft_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-11 10:13  yozhik
+
+	* BNT/inference/dynamic/@bk_inf_engine/enter_soft_evidence.m:
+	  Initial revision
+
+2003-01-07 08:25  yozhik
+
+	* BNT/CPDs/@softmax_CPD/softmax_CPD.m: Initial import of code base
+	  from Kevin Murphy.
+
+2003-01-07 08:25  yozhik
+
+	* BNT/CPDs/@softmax_CPD/softmax_CPD.m: Initial revision
+
+2003-01-03 14:01  yozhik
+
+	*
+	  BNT/inference/static/@belprop_mrf2_inf_engine/belprop_mrf2_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2003-01-03 14:01  yozhik
+
+	*
+	  BNT/inference/static/@belprop_mrf2_inf_engine/belprop_mrf2_inf_engine.m:
+	  Initial revision
+
+2003-01-02 09:49  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2003-01-02 09:49  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/find_mpe.m: Initial
+	  revision
+
+2003-01-02 09:28  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/: set_params.m,
+	  enter_soft_evidence.m: Initial import of code base from Kevin
+	  Murphy.
+
+2003-01-02 09:28  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/: set_params.m,
+	  enter_soft_evidence.m: Initial revision
+
+2002-12-31 14:06  yozhik
+
+	* BNT/general/mk_mrf2.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-12-31 14:06  yozhik
+
+	* BNT/general/mk_mrf2.m: Initial revision
+
+2002-12-31 13:24  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-12-31 13:24  yozhik
+
+	* BNT/inference/static/@belprop_mrf2_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2002-12-31 11:00  yozhik
+
+	* BNT/inference/static/@belprop_inf_engine/belprop_inf_engine.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-12-31 11:00  yozhik
+
+	* BNT/inference/static/@belprop_inf_engine/belprop_inf_engine.m:
+	  Initial revision
+
+2002-12-16 11:16  yozhik
+
+	* BNT/examples/dynamic/HHMM/remove_hhmm_end_state.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-12-16 11:16  yozhik
+
+	* BNT/examples/dynamic/HHMM/remove_hhmm_end_state.m: Initial
+	  revision
+
+2002-12-16 09:57  yozhik
+
+	* BNT/general/unroll_set.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-12-16 09:57  yozhik
+
+	* BNT/general/unroll_set.m: Initial revision
+
+2002-11-26 14:14  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram3.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-26 14:14  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram3.m: Initial revision
+
+2002-11-26 14:04  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram2.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-26 14:04  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram2.m: Initial revision
+
+2002-11-22 16:44  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/Old/mgram2.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-22 16:44  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/Old/mgram2.m: Initial revision
+
+2002-11-22 15:59  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram1.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-22 15:59  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/mgram1.m: Initial revision
+
+2002-11-22 15:51  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_nodes.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-11-22 15:51  yozhik
+
+	* BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_nodes.m:
+	  Initial revision
+
+2002-11-22 15:07  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/: num2letter.m, letter2num.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-11-22 15:07  yozhik
+
+	* BNT/examples/dynamic/HHMM/Mgram/: num2letter.m, letter2num.m:
+	  Initial revision
+
+2002-11-22 14:35  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_pots.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-11-22 14:35  yozhik
+
+	* BNT/general/convert_dbn_CPDs_to_pots.m: Initial revision
+
+2002-11-22 13:45  yozhik
+
+	* HMM/mk_rightleft_transmat.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-11-22 13:45  yozhik
+
+	* HMM/mk_rightleft_transmat.m: Initial revision
+
+2002-11-14 12:33  yozhik
+
+	* BNT/examples/dynamic/water2.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-11-14 12:33  yozhik
+
+	* BNT/examples/dynamic/water2.m: Initial revision
+
+2002-11-14 12:07  yozhik
+
+	* BNT/examples/dynamic/water1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-11-14 12:07  yozhik
+
+	* BNT/examples/dynamic/water1.m: Initial revision
+
+2002-11-14 12:02  yozhik
+
+	* BNT/inference/: online/@hmm_2TBN_inf_engine/marginal_nodes.m,
+	  dynamic/@hmm_inf_engine/marginal_nodes.m,
+	  online/@hmm_2TBN_inf_engine/hmm_2TBN_inf_engine.m,
+	  dynamic/@hmm_inf_engine/hmm_inf_engine.m,
+	  dynamic/@hmm_inf_engine/marginal_family.m,
+	  online/@hmm_2TBN_inf_engine/marginal_family.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-14 12:02  yozhik
+
+	* BNT/inference/: online/@hmm_2TBN_inf_engine/marginal_nodes.m,
+	  dynamic/@hmm_inf_engine/marginal_nodes.m,
+	  online/@hmm_2TBN_inf_engine/hmm_2TBN_inf_engine.m,
+	  dynamic/@hmm_inf_engine/hmm_inf_engine.m,
+	  dynamic/@hmm_inf_engine/marginal_family.m,
+	  online/@hmm_2TBN_inf_engine/marginal_family.m: Initial revision
+
+2002-11-14 08:31  yozhik
+
+	* BNT/inference/:
+	  online/@jtree_2TBN_inf_engine/jtree_2TBN_inf_engine.m,
+	  dynamic/@jtree_dbn_inf_engine/jtree_dbn_inf_engine.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-11-14 08:31  yozhik
+
+	* BNT/inference/:
+	  online/@jtree_2TBN_inf_engine/jtree_2TBN_inf_engine.m,
+	  dynamic/@jtree_dbn_inf_engine/jtree_dbn_inf_engine.m: Initial
+	  revision
+
+2002-11-13 17:01  yozhik
+
+	* BNT/examples/: static/qmr2.m, dynamic/arhmm1.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-13 17:01  yozhik
+
+	* BNT/examples/: static/qmr2.m, dynamic/arhmm1.m: Initial revision
+
+2002-11-03 08:44  yozhik
+
+	* BNT/examples/static/Models/mk_alarm_bnet.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-11-03 08:44  yozhik
+
+	* BNT/examples/static/Models/mk_alarm_bnet.m: Initial revision
+
+2002-11-01 16:32  yozhik
+
+	* Kalman/kalman_forward_backward.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-11-01 16:32  yozhik
+
+	* Kalman/kalman_forward_backward.m: Initial revision
+
+2002-10-23 08:17  yozhik
+
+	* Kalman/learning_demo.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-10-23 08:17  yozhik
+
+	* Kalman/learning_demo.m: Initial revision
+
+2002-10-18 13:05  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/marginal_family.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-10-18 13:05  yozhik
+
+	* BNT/inference/static/@pearl_inf_engine/marginal_family.m: Initial
+	  revision
+
+2002-10-10 16:45  yozhik
+
+	* BNT/examples/dynamic/jtree_clq_test2.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-10 16:45  yozhik
+
+	* BNT/examples/dynamic/jtree_clq_test2.m: Initial revision
+
+2002-10-10 16:14  yozhik
+
+	* BNT/examples/dynamic/: mk_mildew_dbn.m, mk_uffe_dbn.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-10-10 16:14  yozhik
+
+	* BNT/examples/dynamic/: mk_mildew_dbn.m, mk_uffe_dbn.m: Initial
+	  revision
+
+2002-10-09 13:36  yozhik
+
+	* BNT/examples/dynamic/mk_ps_from_clqs.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-09 13:36  yozhik
+
+	* BNT/examples/dynamic/mk_ps_from_clqs.m: Initial revision
+
+2002-10-07 06:26  yozhik
+
+	* BNT/CPDs/@deterministic_CPD/deterministic_CPD.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-10-07 06:26  yozhik
+
+	* BNT/CPDs/@deterministic_CPD/deterministic_CPD.m: Initial revision
+
+2002-10-02 08:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableC.c: Initial import of code base
+	  from Kevin Murphy.
+
+2002-10-02 08:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableC.c: Initial revision
+
+2002-10-02 08:28  yozhik
+
+	* BNT/potentials/Tables/: mult_by_tableM.m, mult_by_table2.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-10-02 08:28  yozhik
+
+	* BNT/potentials/Tables/: mult_by_tableM.m, mult_by_table2.m:
+	  Initial revision
+
+2002-10-01 14:33  yozhik
+
+	* BNT/potentials/Tables/mult_by_tableC.c: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-01 14:33  yozhik
+
+	* BNT/potentials/Tables/mult_by_tableC.c: Initial revision
+
+2002-10-01 14:23  yozhik
+
+	* BNT/potentials/Tables/mult_by_table.c: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-01 14:23  yozhik
+
+	* BNT/potentials/Tables/mult_by_table.c: Initial revision
+
+2002-10-01 14:20  yozhik
+
+	* BNT/potentials/Tables/repmat_and_mult.c: Initial import of code
+	  base from Kevin Murphy.
+
+2002-10-01 14:20  yozhik
+
+	* BNT/potentials/Tables/repmat_and_mult.c: Initial revision
+
+2002-10-01 12:04  yozhik
+
+	* BNT/potentials/@dpot/dpot.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-10-01 12:04  yozhik
+
+	* BNT/potentials/@dpot/dpot.m: Initial revision
+
+2002-10-01 11:21  yozhik
+
+	* BNT/examples/static/Belprop/belprop_polytree_discrete.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-10-01 11:21  yozhik
+
+	* BNT/examples/static/Belprop/belprop_polytree_discrete.m: Initial
+	  revision
+
+2002-10-01 11:16  yozhik
+
+	* BNT/examples/static/cmp_inference_static.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-10-01 11:16  yozhik
+
+	* BNT/examples/static/cmp_inference_static.m: Initial revision
+
+2002-10-01 10:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableM.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-10-01 10:39  yozhik
+
+	* BNT/potentials/Tables/marg_tableM.m: Initial revision
+
+2002-09-29 03:21  yozhik
+
+	* BNT/potentials/Tables/mult_by_table_global.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-09-29 03:21  yozhik
+
+	* BNT/potentials/Tables/mult_by_table_global.m: Initial revision
+
+2002-09-26 01:39  yozhik
+
+	* BNT/learning/learn_struct_K2.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-09-26 01:39  yozhik
+
+	* BNT/learning/learn_struct_K2.m: Initial revision
+
+2002-09-24 15:43  yozhik
+
+	* BNT/: CPDs/@hhmm2Q_CPD/update_ess.m,
+	  CPDs/@hhmm2Q_CPD/maximize_params.m,
+	  examples/dynamic/HHMM/Map/disp_map_hhmm.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-24 15:43  yozhik
+
+	* BNT/: CPDs/@hhmm2Q_CPD/update_ess.m,
+	  CPDs/@hhmm2Q_CPD/maximize_params.m,
+	  examples/dynamic/HHMM/Map/disp_map_hhmm.m: Initial revision
+
+2002-09-24 15:34  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/: hhmm2Q_CPD.m, reset_ess.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 15:34  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/: hhmm2Q_CPD.m, reset_ess.m: Initial
+	  revision
+
+2002-09-24 15:13  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_rnd_map_hhmm.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 15:13  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_rnd_map_hhmm.m: Initial revision
+
+2002-09-24 06:10  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/maximize_params.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-24 06:10  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/maximize_params.m: Initial revision
+
+2002-09-24 06:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/sample_from_map.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 06:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/sample_from_map.m: Initial revision
+
+2002-09-24 05:46  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/CPD_to_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-24 05:46  yozhik
+
+	* BNT/CPDs/@hhmm2Q_CPD/CPD_to_CPT.m: Initial revision
+
+2002-09-24 03:49  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_map_hhmm.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-09-24 03:49  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/mk_map_hhmm.m: Initial revision
+
+2002-09-24 00:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/Old/mk_map_hhmm.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-09-24 00:02  yozhik
+
+	* BNT/examples/dynamic/HHMM/Map/Old/mk_map_hhmm.m: Initial revision
+
+2002-09-23 21:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/hhmmQ_CPD.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-09-23 21:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/hhmmQ_CPD.m: Initial revision
+
+2002-09-23 19:58  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-23 19:58  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/update_CPT.m: Initial revision
+
+2002-09-23 19:30  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-23 19:30  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_CPT.m: Initial revision
+
+2002-09-21 14:37  yozhik
+
+	* BNT/examples/dynamic/HHMM/abcd_hhmm.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-21 14:37  yozhik
+
+	* BNT/examples/dynamic/HHMM/abcd_hhmm.m: Initial revision
+
+2002-09-21 13:58  yozhik
+
+	* BNT/examples/dynamic/HHMM/mk_hhmm.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-09-21 13:58  yozhik
+
+	* BNT/examples/dynamic/HHMM/mk_hhmm.m: Initial revision
+
+2002-09-10 10:44  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/log_prob_node.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-09-10 10:44  yozhik
+
+	* BNT/CPDs/@gaussian_CPD/log_prob_node.m: Initial revision
+
+2002-07-28 16:09  yozhik
+
+	* BNT/learning/: learn_struct_pdag_pc_constrain.m, CovMat.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-07-28 16:09  yozhik
+
+	* BNT/learning/: learn_struct_pdag_pc_constrain.m, CovMat.m:
+	  Initial revision
+
+2002-07-24 07:48  yozhik
+
+	* BNT/general/hodbn_to_bnet.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-07-24 07:48  yozhik
+
+	* BNT/general/hodbn_to_bnet.m: Initial revision
+
+2002-07-23 06:17  yozhik
+
+	* BNT/general/mk_higher_order_dbn.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-07-23 06:17  yozhik
+
+	* BNT/general/mk_higher_order_dbn.m: Initial revision
+
+2002-07-20 18:25  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/set_fields.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-07-20 18:25  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/set_fields.m: Initial
+	  revision
+
+2002-07-20 17:32  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/back_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-07-20 17:32  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/back_mpe.m: Initial
+	  revision
+
+2002-07-02 15:56  yozhik
+
+	* BNT/examples/dynamic/HHMM/Motif/learn_motif_hhmm.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-07-02 15:56  yozhik
+
+	* BNT/examples/dynamic/HHMM/Motif/learn_motif_hhmm.m: Initial
+	  revision
+
+2002-06-27 13:34  yozhik
+
+	* BNT/general/add_ev_to_dmarginal.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-27 13:34  yozhik
+
+	* BNT/general/add_ev_to_dmarginal.m: Initial revision
+
+2002-06-24 16:54  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_ess.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-24 16:54  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_ess.m: Initial revision
+
+2002-06-24 16:38  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/hhmmF_CPD.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-24 16:38  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/hhmmF_CPD.m: Initial revision
+
+2002-06-24 15:45  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_CPT.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-24 15:45  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/update_CPT.m: Initial revision
+
+2002-06-24 15:35  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/Old/: hhmmF_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_CPT.m, update_ess.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-06-24 15:35  yozhik
+
+	* BNT/CPDs/@hhmmF_CPD/Old/: hhmmF_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_CPT.m, update_ess.m:
+	  Initial revision
+
+2002-06-24 15:23  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess4.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-24 15:23  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess4.m: Initial revision
+
+2002-06-24 15:08  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess3.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-24 15:08  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess3.m: Initial revision
+
+2002-06-24 14:20  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess2.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-24 14:20  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/update_ess2.m: Initial revision
+
+2002-06-24 11:56  yozhik
+
+	* BNT/: general/mk_fgraph_given_ev.m,
+	  CPDs/mk_isolated_tabular_CPD.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-24 11:56  yozhik
+
+	* BNT/: general/mk_fgraph_given_ev.m,
+	  CPDs/mk_isolated_tabular_CPD.m: Initial revision
+
+2002-06-24 11:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/: hhmmQ_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_ess.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-06-24 11:19  yozhik
+
+	* BNT/CPDs/@hhmmQ_CPD/Old/: hhmmQ_CPD.m, log_prior.m,
+	  maximize_params.m, reset_ess.m, update_ess.m: Initial revision
+
+2002-06-20 13:30  yozhik
+
+	* BNT/examples/dynamic/mildew1.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-20 13:30  yozhik
+
+	* BNT/examples/dynamic/mildew1.m: Initial revision
+
+2002-06-19 17:18  yozhik
+
+	* BNT/: inference/dynamic/@hmm_inf_engine/find_mpe.m,
+	  examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 17:18  yozhik
+
+	* BNT/: inference/dynamic/@hmm_inf_engine/find_mpe.m,
+	  examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m: Initial
+	  revision
+
+2002-06-19 17:03  yozhik
+
+	* BNT/examples/static/fgraph/fg1.m: Initial import of code base
+	  from Kevin Murphy.
+
+2002-06-19 17:03  yozhik
+
+	* BNT/examples/static/fgraph/fg1.m: Initial revision
+
+2002-06-19 16:59  yozhik
+
+	* BNT/: examples/static/softev1.m,
+	  inference/static/@belprop_fg_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 16:59  yozhik
+
+	* BNT/: examples/static/softev1.m,
+	  inference/static/@belprop_fg_inf_engine/find_mpe.m: Initial
+	  revision
+
+2002-06-19 15:11  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 15:11  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/find_mpe.m: Initial
+	  revision
+
+2002-06-19 15:08  yozhik
+
+	* BNT/: inference/static/@belprop_inf_engine/find_mpe.m,
+	  examples/static/mpe1.m, examples/static/mpe2.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-06-19 15:08  yozhik
+
+	* BNT/: inference/static/@belprop_inf_engine/find_mpe.m,
+	  examples/static/mpe1.m, examples/static/mpe2.m: Initial revision
+
+2002-06-19 15:04  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/:
+	  var_elim_inf_engine.m, enter_evidence.m: Initial import of code
+	  base from Kevin Murphy.
+
+2002-06-19 15:04  yozhik
+
+	* BNT/inference/static/@var_elim_inf_engine/:
+	  var_elim_inf_engine.m, enter_evidence.m: Initial revision
+
+2002-06-19 14:56  yozhik
+
+	* BNT/inference/static/@global_joint_inf_engine/find_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-19 14:56  yozhik
+
+	* BNT/inference/static/@global_joint_inf_engine/find_mpe.m: Initial
+	  revision
+
+2002-06-17 16:49  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/back1_mpe.m,
+	  @smoother_engine/find_mpe.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-17 16:49  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/back1_mpe.m,
+	  @smoother_engine/find_mpe.m: Initial revision
+
+2002-06-17 16:46  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/fwd.m,
+	  @jtree_2TBN_inf_engine/fwd1.m, @smoother_engine/enter_evidence.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-06-17 16:46  yozhik
+
+	* BNT/inference/online/: @jtree_2TBN_inf_engine/fwd.m,
+	  @jtree_2TBN_inf_engine/fwd1.m, @smoother_engine/enter_evidence.m:
+	  Initial revision
+
+2002-06-17 16:38  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/backT_mpe.m: Initial
+	  import of code base from Kevin Murphy.
+
+2002-06-17 16:38  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/backT_mpe.m: Initial
+	  revision
+
+2002-06-17 16:34  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/: back.m, backT.m,
+	  back1.m: Initial import of code base from Kevin Murphy.
+
+2002-06-17 16:34  yozhik
+
+	* BNT/inference/online/@jtree_2TBN_inf_engine/: back.m, backT.m,
+	  back1.m: Initial revision
+
+2002-06-17 16:14  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: find_mpe.m,
+	  find_max_config.m: Initial import of code base from Kevin Murphy.
+
+2002-06-17 16:14  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: find_mpe.m,
+	  find_max_config.m: Initial revision
+
+2002-06-17 14:58  yozhik
+
+	* BNT/general/Old/calc_mpe.m: Initial import of code base from
+	  Kevin Murphy.
+
+2002-06-17 14:58  yozhik
+
+	* BNT/general/Old/calc_mpe.m: Initial revision
+
+2002-06-17 13:59  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: enter_evidence.m,
+	  distribute_evidence.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-06-17 13:59  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/: enter_evidence.m,
+	  distribute_evidence.m: Initial revision
+
+2002-06-17 13:29  yozhik
+
+	* BNT/inference/static/@jtree_mnet_inf_engine/: find_mpe.m,
+	  enter_evidence.m: Initial import of code base from Kevin Murphy.
+
+2002-06-17 13:29  yozhik
+
+	* BNT/inference/static/@jtree_mnet_inf_engine/: find_mpe.m,
+	  enter_evidence.m: Initial revision
+
+2002-06-16 13:01  yozhik
+
+	* BNT/general/is_mnet.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-06-16 13:01  yozhik
+
+	* BNT/general/is_mnet.m: Initial revision
+
+2002-06-16 12:52  yozhik
+
+	* BNT/general/mk_mnet.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-06-16 12:52  yozhik
+
+	* BNT/general/mk_mnet.m: Initial revision
+
+2002-06-16 12:34  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/init_pot.m: Initial import
+	  of code base from Kevin Murphy.
+
+2002-06-16 12:34  yozhik
+
+	* BNT/inference/static/@jtree_inf_engine/init_pot.m: Initial
+	  revision
+
+2002-06-16 12:06  yozhik
+
+	* BNT/potentials/@dpot/find_most_prob_entry.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-06-16 12:06  yozhik
+
+	* BNT/potentials/@dpot/find_most_prob_entry.m: Initial revision
+
+2002-05-31 03:25  yozhik
+
+	* BNT/general/unroll_higher_order_topology.m: Initial import of
+	  code base from Kevin Murphy.
+
+2002-05-31 03:25  yozhik
+
+	* BNT/general/unroll_higher_order_topology.m: Initial revision
+
+2002-05-29 08:59  yozhik
+
+	* BNT/@assocarray/assocarray.m,
+	  BNT/CPDs/@boolean_CPD/boolean_CPD.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@discrete_CPD/README,
+	  BNT/CPDs/@discrete_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@discrete_CPD/convert_obs_CPD_to_table.m,
+	  BNT/CPDs/@discrete_CPD/convert_to_sparse_table.c,
+	  BNT/CPDs/@discrete_CPD/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/discrete_CPD.m,
+	  BNT/CPDs/@discrete_CPD/dom_sizes.m,
+	  BNT/CPDs/@discrete_CPD/log_prob_node.m,
+	  BNT/CPDs/@discrete_CPD/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/sample_node.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_pot.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_CPD.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/private/prod_CPT_and_pi_msgs.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@gaussian_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@gaussian_CPD/display.m,
+	  BNT/CPDs/@gaussian_CPD/get_field.m,
+	  BNT/CPDs/@gaussian_CPD/reset_ess.m,
+	  BNT/CPDs/@gaussian_CPD/sample_node.m,
+	  BNT/CPDs/@gaussian_CPD/set_fields.m,
+	  BNT/CPDs/@gaussian_CPD/Old/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/Old/gaussian_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/Old/log_prob_node.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_ess.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_tied_ess.m,
+	  BNT/CPDs/@gaussian_CPD/private/CPD_to_linear_gaussian.m,
+	  BNT/CPDs/@generic_CPD/README,
+	  BNT/CPDs/@generic_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@generic_CPD/display.m,
+	  BNT/CPDs/@generic_CPD/generic_CPD.m,
+	  BNT/CPDs/@generic_CPD/log_prior.m,
+	  BNT/CPDs/@generic_CPD/set_clamped.m,
+	  BNT/CPDs/@generic_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@generic_CPD/Old/CPD_to_dpots.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gmux_CPD/convert_to_pot.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_pi.m, BNT/CPDs/@gmux_CPD/display.m,
+	  BNT/CPDs/@gmux_CPD/gmux_CPD.m, BNT/CPDs/@gmux_CPD/sample_node.m,
+	  BNT/CPDs/@gmux_CPD/Old/gmux_CPD.m,
+	  BNT/CPDs/@hhmmF_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmF_CPD/maximize_params.m,
+	  BNT/CPDs/@hhmmF_CPD/reset_ess.m, BNT/CPDs/@hhmmQ_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmQ_CPD/reset_ess.m,
+	  BNT/CPDs/@mlp_CPD/convert_to_table.m,
+	  BNT/CPDs/@mlp_CPD/maximize_params.m, BNT/CPDs/@mlp_CPD/mlp_CPD.m,
+	  BNT/CPDs/@mlp_CPD/reset_ess.m, BNT/CPDs/@mlp_CPD/update_ess.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@noisyor_CPD/noisyor_CPD.m,
+	  BNT/CPDs/@noisyor_CPD/private/sum_prod_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@root_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@root_CPD/convert_to_pot.m,
+	  BNT/CPDs/@root_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/@root_CPD/log_prob_node.m,
+	  BNT/CPDs/@root_CPD/root_CPD.m, BNT/CPDs/@root_CPD/sample_node.m,
+	  BNT/CPDs/@root_CPD/Old/CPD_to_CPT.m,
+	  BNT/CPDs/@softmax_CPD/convert_to_pot.m,
+	  BNT/CPDs/@softmax_CPD/display.m,
+	  BNT/CPDs/@softmax_CPD/get_field.m,
+	  BNT/CPDs/@softmax_CPD/maximize_params.m,
+	  BNT/CPDs/@softmax_CPD/reset_ess.m,
+	  BNT/CPDs/@softmax_CPD/sample_node.m,
+	  BNT/CPDs/@softmax_CPD/set_fields.m,
+	  BNT/CPDs/@softmax_CPD/update_ess.m,
+	  BNT/CPDs/@softmax_CPD/private/extract_params.m,
+	  BNT/CPDs/@tabular_CPD/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_CPD/bayes_update_params.m,
+	  BNT/CPDs/@tabular_CPD/log_nextcase_prob_node.m,
+	  BNT/CPDs/@tabular_CPD/log_prior.m,
+	  BNT/CPDs/@tabular_CPD/reset_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess_simple.m,
+	  BNT/CPDs/@tabular_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/bayesian_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/log_marg_prob_node_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/mult_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_CPT.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node_single_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/tabular_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/update_params.m,
+	  BNT/CPDs/@tabular_decision_node/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_decision_node/display.m,
+	  BNT/CPDs/@tabular_decision_node/get_field.m,
+	  BNT/CPDs/@tabular_decision_node/set_fields.m,
+	  BNT/CPDs/@tabular_decision_node/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_decision_node/Old/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_pot.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_table.m,
+	  BNT/CPDs/@tabular_kernel/get_field.m,
+	  BNT/CPDs/@tabular_kernel/set_fields.m,
+	  BNT/CPDs/@tabular_kernel/tabular_kernel.m,
+	  BNT/CPDs/@tabular_kernel/Old/tabular_kernel.m,
+	  BNT/CPDs/@tabular_utility_node/convert_to_pot.m,
+	  BNT/CPDs/@tabular_utility_node/display.m,
+	  BNT/CPDs/@tabular_utility_node/tabular_utility_node.m,
+	  BNT/CPDs/@tree_CPD/display.m,
+	  BNT/CPDs/@tree_CPD/evaluate_tree_performance.m,
+	  BNT/CPDs/@tree_CPD/get_field.m,
+	  BNT/CPDs/@tree_CPD/learn_params.m, BNT/CPDs/@tree_CPD/readme.txt,
+	  BNT/CPDs/@tree_CPD/set_fields.m, BNT/CPDs/@tree_CPD/tree_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/linear_gaussian_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/root_gaussian_CPD.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@tabular_chance_node/CPD_to_upot.m,
+	  BNT/CPDs/Old/@tabular_chance_node/tabular_chance_node.m,
+	  BNT/examples/dynamic/bat1.m, BNT/examples/dynamic/bkff1.m,
+	  BNT/examples/dynamic/chmm1.m,
+	  BNT/examples/dynamic/cmp_inference_dbn.m,
+	  BNT/examples/dynamic/cmp_learning_dbn.m,
+	  BNT/examples/dynamic/cmp_online_inference.m,
+	  BNT/examples/dynamic/fhmm_infer.m,
+	  BNT/examples/dynamic/filter_test1.m,
+	  BNT/examples/dynamic/kalman1.m,
+	  BNT/examples/dynamic/kjaerulff1.m,
+	  BNT/examples/dynamic/loopy_dbn1.m,
+	  BNT/examples/dynamic/mk_collage_from_clqs.m,
+	  BNT/examples/dynamic/mk_fhmm.m, BNT/examples/dynamic/reveal1.m,
+	  BNT/examples/dynamic/scg_dbn.m,
+	  BNT/examples/dynamic/skf_data_assoc_gmux.m,
+	  BNT/examples/dynamic/HHMM/add_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/hhmm_jtree_clqs.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo_F1.m,
+	  BNT/examples/dynamic/HHMM/pretty_print_hhmm_parse.m,
+	  BNT/examples/dynamic/HHMM/Motif/fixed_args_mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/sample_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_abcd_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_arrow_alpha_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm2.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3_args.m,
+	  BNT/examples/dynamic/HHMM/Old/motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/remove_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/Square/get_square_data.m,
+	  BNT/examples/dynamic/HHMM/Square/hhmm_inference.m,
+	  BNT/examples/dynamic/HHMM/Square/is_F2_true_D3.m,
+	  BNT/examples/dynamic/HHMM/Square/learn_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_cts.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/square4.mat,
+	  BNT/examples/dynamic/HHMM/Square/square4_cases.mat,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.m,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.mat,
+	  BNT/examples/dynamic/HHMM/Square/Old/learn_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/sample_square_hhmm.m,
+	  BNT/examples/dynamic/Old/chmm1.m,
+	  BNT/examples/dynamic/Old/cmp_inference.m,
+	  BNT/examples/dynamic/Old/kalman1.m,
+	  BNT/examples/dynamic/Old/old.water1.m,
+	  BNT/examples/dynamic/Old/online1.m,
+	  BNT/examples/dynamic/Old/online2.m,
+	  BNT/examples/dynamic/Old/scg_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_gmux_robot_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_linear_slam.m,
+	  BNT/examples/dynamic/SLAM/slam_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_offline_loopy.m,
+	  BNT/examples/dynamic/SLAM/slam_partial_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_stationary_loopy.m,
+	  BNT/examples/dynamic/SLAM/Old/offline_loopy_slam.m,
+	  BNT/examples/dynamic/SLAM/Old/paskin1.m,
+	  BNT/examples/dynamic/SLAM/Old/skf_data_assoc_gmux2.m,
+	  BNT/examples/dynamic/SLAM/Old/slam_kf.m,
+	  BNT/examples/limids/id1.m, BNT/examples/limids/pigs1.m,
+	  BNT/examples/static/cg1.m, BNT/examples/static/cg2.m,
+	  BNT/examples/static/discrete2.m, BNT/examples/static/discrete3.m,
+	  BNT/examples/static/fa1.m, BNT/examples/static/gaussian1.m,
+	  BNT/examples/static/gibbs_test1.m, BNT/examples/static/lw1.m,
+	  BNT/examples/static/mfa1.m, BNT/examples/static/mixexp1.m,
+	  BNT/examples/static/mixexp2.m, BNT/examples/static/mixexp3.m,
+	  BNT/examples/static/mog1.m, BNT/examples/static/qmr1.m,
+	  BNT/examples/static/sample1.m, BNT/examples/static/softmax1.m,
+	  BNT/examples/static/Belprop/belprop_loop1_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loop1_gauss.m,
+	  BNT/examples/static/Belprop/belprop_loopy_cg.m,
+	  BNT/examples/static/Belprop/belprop_loopy_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loopy_gauss.m,
+	  BNT/examples/static/Belprop/belprop_polytree_cg.m,
+	  BNT/examples/static/Belprop/belprop_polytree_gauss.m,
+	  BNT/examples/static/Belprop/bp1.m,
+	  BNT/examples/static/Belprop/gmux1.m,
+	  BNT/examples/static/Brutti/Belief_IOhmm.m,
+	  BNT/examples/static/Brutti/Belief_hmdt.m,
+	  BNT/examples/static/Brutti/Belief_hme.m,
+	  BNT/examples/static/Brutti/Sigmoid_Belief.m,
+	  BNT/examples/static/HME/HMEforMatlab.jpg,
+	  BNT/examples/static/HME/README, BNT/examples/static/HME/fhme.m,
+	  BNT/examples/static/HME/gen_data.m,
+	  BNT/examples/static/HME/hme_class_plot.m,
+	  BNT/examples/static/HME/hme_reg_plot.m,
+	  BNT/examples/static/HME/hme_topobuilder.m,
+	  BNT/examples/static/HME/test_data_class.mat,
+	  BNT/examples/static/HME/test_data_class2.mat,
+	  BNT/examples/static/HME/test_data_reg.mat,
+	  BNT/examples/static/HME/train_data_class.mat,
+	  BNT/examples/static/HME/train_data_reg.mat,
+	  BNT/examples/static/Misc/mixexp_data.txt,
+	  BNT/examples/static/Misc/mixexp_graddesc.m,
+	  BNT/examples/static/Misc/mixexp_plot.m,
+	  BNT/examples/static/Misc/sprinkler.bif,
+	  BNT/examples/static/Models/mk_cancer_bnet.m,
+	  BNT/examples/static/Models/mk_car_bnet.m,
+	  BNT/examples/static/Models/mk_ideker_bnet.m,
+	  BNT/examples/static/Models/mk_incinerator_bnet.m,
+	  BNT/examples/static/Models/mk_markov_chain_bnet.m,
+	  BNT/examples/static/Models/mk_minimal_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_vstruct_bnet.m,
+	  BNT/examples/static/Models/Old/mk_hmm_bnet.m,
+	  BNT/examples/static/SCG/scg1.m, BNT/examples/static/SCG/scg2.m,
+	  BNT/examples/static/SCG/scg3.m,
+	  BNT/examples/static/SCG/scg_3node.m,
+	  BNT/examples/static/SCG/scg_unstable.m,
+	  BNT/examples/static/StructLearn/bic1.m,
+	  BNT/examples/static/StructLearn/cooper_yoo.m,
+	  BNT/examples/static/StructLearn/k2demo1.m,
+	  BNT/examples/static/StructLearn/mcmc1.m,
+	  BNT/examples/static/StructLearn/pc1.m,
+	  BNT/examples/static/StructLearn/pc2.m,
+	  BNT/examples/static/Zoubin/README,
+	  BNT/examples/static/Zoubin/csum.m,
+	  BNT/examples/static/Zoubin/ffa.m,
+	  BNT/examples/static/Zoubin/mfa.m,
+	  BNT/examples/static/Zoubin/mfa_cl.m,
+	  BNT/examples/static/Zoubin/mfademo.m,
+	  BNT/examples/static/Zoubin/rdiv.m,
+	  BNT/examples/static/Zoubin/rprod.m,
+	  BNT/examples/static/Zoubin/rsum.m,
+	  BNT/examples/static/dtree/test_housing.m,
+	  BNT/examples/static/dtree/test_restaurants.m,
+	  BNT/examples/static/dtree/test_zoo1.m,
+	  BNT/examples/static/dtree/tmp.dot,
+	  BNT/examples/static/dtree/transform_data_into_bnt_format.m,
+	  BNT/examples/static/fgraph/fg2.m,
+	  BNT/examples/static/fgraph/fg3.m,
+	  BNT/examples/static/fgraph/fg_mrf1.m,
+	  BNT/examples/static/fgraph/fg_mrf2.m,
+	  BNT/general/bnet_to_fgraph.m,
+	  BNT/general/compute_fwd_interface.m,
+	  BNT/general/compute_interface_nodes.m,
+	  BNT/general/compute_minimal_interface.m,
+	  BNT/general/dbn_to_bnet.m,
+	  BNT/general/determine_elim_constraints.m,
+	  BNT/general/do_intervention.m, BNT/general/dsep.m,
+	  BNT/general/enumerate_scenarios.m, BNT/general/fgraph_to_bnet.m,
+	  BNT/general/log_lik_complete.m,
+	  BNT/general/log_marg_lik_complete.m, BNT/general/mk_bnet.m,
+	  BNT/general/mk_fgraph.m, BNT/general/mk_limid.m,
+	  BNT/general/mk_mutilated_samples.m,
+	  BNT/general/mk_slice_and_half_dbn.m,
+	  BNT/general/partition_dbn_nodes.m,
+	  BNT/general/sample_bnet_nocell.m, BNT/general/sample_dbn.m,
+	  BNT/general/score_bnet_complete.m,
+	  BNT/general/unroll_dbn_topology.m,
+	  BNT/general/Old/bnet_to_gdl_graph.m,
+	  BNT/general/Old/calc_mpe_bucket.m,
+	  BNT/general/Old/calc_mpe_dbn.m,
+	  BNT/general/Old/calc_mpe_given_inf_engine.m,
+	  BNT/general/Old/calc_mpe_global.m,
+	  BNT/general/Old/compute_interface_nodes.m,
+	  BNT/general/Old/mk_gdl_graph.m, GraphViz/draw_dbn.m,
+	  GraphViz/make_layout.m, BNT/license.gpl.txt,
+	  BNT/general/add_evidence_to_gmarginal.m,
+	  BNT/inference/@inf_engine/bnet_from_engine.m,
+	  BNT/inference/@inf_engine/get_field.m,
+	  BNT/inference/@inf_engine/inf_engine.m,
+	  BNT/inference/@inf_engine/marginal_family.m,
+	  BNT/inference/@inf_engine/set_fields.m,
+	  BNT/inference/@inf_engine/update_engine.m,
+	  BNT/inference/@inf_engine/Old/marginal_family_pot.m,
+	  BNT/inference/@inf_engine/Old/observed_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/bk_ff_hmm_inf_engine.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_predict_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/bk_ff_fb.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/combine_marginals_into_joint.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/dbn_to_hmm.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_mat.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/project_joint_onto_marginals.m,
+	  BNT/inference/dynamic/@bk_inf_engine/bk_inf_engine.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/ff_inf_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/filter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@ff_inf_engine/smooth_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/frontier_inf_engine.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/set_fwdback.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/dhmm_inf_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence2.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence3.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence4.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_nonint.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_trans.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine2.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/jtree_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/kalman_inf_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/dbn_to_lds.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_soft_ev.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/pearl_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/correct_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence_obj_oriented.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence_fast.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/wrong_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/private/init_pearl_dbn_ev_msgs.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/pearl_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/online/@filter_engine/bnet_from_engine.m,
+	  BNT/inference/online/@filter_engine/enter_evidence.m,
+	  BNT/inference/online/@filter_engine/filter_engine.m,
+	  BNT/inference/online/@filter_engine/marginal_family.m,
+	  BNT/inference/online/@filter_engine/marginal_nodes.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/update_engine.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/Old/jtree_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/enter_evidence.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/jtree_sparse_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/bnet_from_engine.m,
+	  BNT/inference/online/@smoother_engine/marginal_family.m,
+	  BNT/inference/online/@smoother_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/smoother_engine.m,
+	  BNT/inference/online/@smoother_engine/update_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/belprop_fg_inf_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/set_params.m,
+	  BNT/inference/static/@belprop_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_family.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_gdl_inf_engine.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_inf_engine_nostr.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence1.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/marginal_domain.m,
+	  BNT/inference/static/@belprop_inf_engine/private/junk,
+	  BNT/inference/static/@belprop_inf_engine/private/parallel_protocol.m,
+	  BNT/inference/static/@belprop_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/cond_gauss_inf_engine.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@enumerative_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@enumerative_inf_engine/enumerative_inf_engine.m,
+	  BNT/inference/static/@enumerative_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gaussian_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/gibbs_sampling_inf_engine.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/CPT.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_children.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_strides.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_cpts.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/my_sample_discrete.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/sample_single_discrete.c,
+	  BNT/inference/static/@global_joint_inf_engine/global_joint_inf_engine.m,
+	  BNT/inference/static/@global_joint_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/distribute_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/jtree_limid_inf_engine.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_nodes_SS.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/likelihood_weighting_inf_engine.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@pearl_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@pearl_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/private/compute_bel.m,
+	  BNT/inference/static/@pearl_inf_engine/private/prod_lambda_msgs.m,
+	  BNT/inference/static/@pearl_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@quickscore_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@quickscore_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@quickscore_inf_engine/quickscore_inf_engine.m,
+	  BNT/inference/static/@quickscore_inf_engine/private/C_quickscore.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nr.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/quickscore.m,
+	  BNT/learning/bayes_update_params.m,
+	  BNT/learning/bic_score_family.m,
+	  BNT/learning/compute_cooling_schedule.m,
+	  BNT/learning/dirichlet_score_family.m,
+	  BNT/learning/kpm_learn_struct_mcmc.m,
+	  BNT/learning/learn_params_em.m,
+	  BNT/learning/learn_struct_dbn_reveal.m,
+	  BNT/learning/learn_struct_pdag_ic_star.m,
+	  BNT/learning/mcmc_sample_to_hist.m, BNT/learning/mk_schedule.m,
+	  BNT/learning/mk_tetrad_data_file.m,
+	  BNT/learning/score_dags_old.m, HMM/dhmm_logprob_brute_force.m,
+	  HMM/dhmm_logprob_path.m, HMM/mdp_sample.m, Kalman/AR_to_SS.m,
+	  Kalman/SS_to_AR.m, Kalman/convert_to_lagged_form.m,
+	  Kalman/ensure_AR.m, Kalman/eval_AR_perf.m,
+	  Kalman/kalman_filter.m, Kalman/kalman_smoother.m,
+	  Kalman/kalman_update.m, Kalman/learn_AR.m,
+	  Kalman/learn_AR_diagonal.m, Kalman/learn_kalman.m,
+	  Kalman/smooth_update.m,
+	  BNT/general/convert_dbn_CPDs_to_tables_slow.m,
+	  BNT/general/dispcpt.m, BNT/general/linear_gaussian_to_cpot.m,
+	  BNT/general/partition_matrix_vec_3.m,
+	  BNT/general/shrink_obs_dims_in_gaussian.m,
+	  BNT/general/shrink_obs_dims_in_table.m,
+	  BNT/potentials/CPD_to_pot.m, BNT/potentials/README,
+	  BNT/potentials/check_for_cd_arcs.m,
+	  BNT/potentials/determine_pot_type.m,
+	  BNT/potentials/mk_initial_pot.m,
+	  BNT/potentials/@cgpot/cg_can_to_mom.m,
+	  BNT/potentials/@cgpot/cg_mom_to_can.m,
+	  BNT/potentials/@cgpot/cgpot.m, BNT/potentials/@cgpot/display.m,
+	  BNT/potentials/@cgpot/divide_by_pot.m,
+	  BNT/potentials/@cgpot/domain_pot.m,
+	  BNT/potentials/@cgpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cgpot/enter_discrete_evidence_pot.m,
+	  BNT/potentials/@cgpot/marginalize_pot.m,
+	  BNT/potentials/@cgpot/multiply_by_pot.m,
+	  BNT/potentials/@cgpot/multiply_pots.m,
+	  BNT/potentials/@cgpot/normalize_pot.m,
+	  BNT/potentials/@cgpot/pot_to_marginal.m,
+	  BNT/potentials/@cgpot/Old/normalize_pot.m,
+	  BNT/potentials/@cgpot/Old/simple_marginalize_pot.m,
+	  BNT/potentials/@cpot/cpot.m, BNT/potentials/@cpot/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/display.m,
+	  BNT/potentials/@cpot/divide_by_pot.m,
+	  BNT/potentials/@cpot/domain_pot.m,
+	  BNT/potentials/@cpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cpot/marginalize_pot.m,
+	  BNT/potentials/@cpot/multiply_by_pot.m,
+	  BNT/potentials/@cpot/multiply_pots.m,
+	  BNT/potentials/@cpot/normalize_pot.m,
+	  BNT/potentials/@cpot/pot_to_marginal.m,
+	  BNT/potentials/@cpot/rescale_pot.m,
+	  BNT/potentials/@cpot/set_domain_pot.m,
+	  BNT/potentials/@cpot/Old/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/Old/normalize_pot.convert.m,
+	  BNT/potentials/@dpot/approxeq_pot.m,
+	  BNT/potentials/@dpot/display.m,
+	  BNT/potentials/@dpot/domain_pot.m,
+	  BNT/potentials/@dpot/dpot_to_table.m,
+	  BNT/potentials/@dpot/get_fields.m,
+	  BNT/potentials/@dpot/multiply_pots.m,
+	  BNT/potentials/@dpot/pot_to_marginal.m,
+	  BNT/potentials/@dpot/set_domain_pot.m,
+	  BNT/potentials/@mpot/display.m,
+	  BNT/potentials/@mpot/marginalize_pot.m,
+	  BNT/potentials/@mpot/mpot.m, BNT/potentials/@mpot/mpot_to_cpot.m,
+	  BNT/potentials/@mpot/normalize_pot.m,
+	  BNT/potentials/@mpot/pot_to_marginal.m,
+	  BNT/potentials/@mpot/rescale_pot.m,
+	  BNT/potentials/@upot/approxeq_pot.m,
+	  BNT/potentials/@upot/display.m,
+	  BNT/potentials/@upot/divide_by_pot.m,
+	  BNT/potentials/@upot/marginalize_pot.m,
+	  BNT/potentials/@upot/multiply_by_pot.m,
+	  BNT/potentials/@upot/normalize_pot.m,
+	  BNT/potentials/@upot/pot_to_marginal.m,
+	  BNT/potentials/@upot/upot.m,
+	  BNT/potentials/@upot/upot_to_opt_policy.m,
+	  BNT/potentials/Old/comp_eff_node_sizes.m,
+	  BNT/potentials/Tables/divide_by_sparse_table.c,
+	  BNT/potentials/Tables/divide_by_table.c,
+	  BNT/potentials/Tables/marg_sparse_table.c,
+	  BNT/potentials/Tables/marg_table.c,
+	  BNT/potentials/Tables/mult_by_sparse_table.c,
+	  BNT/potentials/Tables/rep_mult.c, HMM/mk_leftright_transmat.m:
+	  Initial import of code base from Kevin Murphy.
+
+2002-05-29 08:59  yozhik
+
+	* BNT/@assocarray/assocarray.m,
+	  BNT/CPDs/@boolean_CPD/boolean_CPD.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@discrete_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@discrete_CPD/README,
+	  BNT/CPDs/@discrete_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@discrete_CPD/convert_obs_CPD_to_table.m,
+	  BNT/CPDs/@discrete_CPD/convert_to_sparse_table.c,
+	  BNT/CPDs/@discrete_CPD/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/discrete_CPD.m,
+	  BNT/CPDs/@discrete_CPD/dom_sizes.m,
+	  BNT/CPDs/@discrete_CPD/log_prob_node.m,
+	  BNT/CPDs/@discrete_CPD/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/sample_node.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_pot.m,
+	  BNT/CPDs/@discrete_CPD/Old/convert_to_table.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_CPD.m,
+	  BNT/CPDs/@discrete_CPD/Old/prob_node.m,
+	  BNT/CPDs/@discrete_CPD/private/prod_CPT_and_pi_msgs.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@gaussian_CPD/CPD_to_scgpot.m,
+	  BNT/CPDs/@gaussian_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/convert_CPD_to_table_hidden_ps.m,
+	  BNT/CPDs/@gaussian_CPD/display.m,
+	  BNT/CPDs/@gaussian_CPD/get_field.m,
+	  BNT/CPDs/@gaussian_CPD/reset_ess.m,
+	  BNT/CPDs/@gaussian_CPD/sample_node.m,
+	  BNT/CPDs/@gaussian_CPD/set_fields.m,
+	  BNT/CPDs/@gaussian_CPD/Old/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gaussian_CPD/Old/gaussian_CPD.m,
+	  BNT/CPDs/@gaussian_CPD/Old/log_prob_node.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_ess.m,
+	  BNT/CPDs/@gaussian_CPD/Old/update_tied_ess.m,
+	  BNT/CPDs/@gaussian_CPD/private/CPD_to_linear_gaussian.m,
+	  BNT/CPDs/@generic_CPD/README,
+	  BNT/CPDs/@generic_CPD/adjustable_CPD.m,
+	  BNT/CPDs/@generic_CPD/display.m,
+	  BNT/CPDs/@generic_CPD/generic_CPD.m,
+	  BNT/CPDs/@generic_CPD/log_prior.m,
+	  BNT/CPDs/@generic_CPD/set_clamped.m,
+	  BNT/CPDs/@generic_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@generic_CPD/Old/CPD_to_dpots.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@gmux_CPD/convert_to_pot.m,
+	  BNT/CPDs/@gmux_CPD/CPD_to_pi.m, BNT/CPDs/@gmux_CPD/display.m,
+	  BNT/CPDs/@gmux_CPD/gmux_CPD.m, BNT/CPDs/@gmux_CPD/sample_node.m,
+	  BNT/CPDs/@gmux_CPD/Old/gmux_CPD.m,
+	  BNT/CPDs/@hhmmF_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmF_CPD/maximize_params.m,
+	  BNT/CPDs/@hhmmF_CPD/reset_ess.m, BNT/CPDs/@hhmmQ_CPD/log_prior.m,
+	  BNT/CPDs/@hhmmQ_CPD/reset_ess.m,
+	  BNT/CPDs/@mlp_CPD/convert_to_table.m,
+	  BNT/CPDs/@mlp_CPD/maximize_params.m, BNT/CPDs/@mlp_CPD/mlp_CPD.m,
+	  BNT/CPDs/@mlp_CPD/reset_ess.m, BNT/CPDs/@mlp_CPD/update_ess.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_lambda_msg.m,
+	  BNT/CPDs/@noisyor_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@noisyor_CPD/noisyor_CPD.m,
+	  BNT/CPDs/@noisyor_CPD/private/sum_prod_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@root_CPD/CPD_to_pi.m,
+	  BNT/CPDs/@root_CPD/convert_to_pot.m,
+	  BNT/CPDs/@root_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/@root_CPD/log_prob_node.m,
+	  BNT/CPDs/@root_CPD/root_CPD.m, BNT/CPDs/@root_CPD/sample_node.m,
+	  BNT/CPDs/@root_CPD/Old/CPD_to_CPT.m,
+	  BNT/CPDs/@softmax_CPD/convert_to_pot.m,
+	  BNT/CPDs/@softmax_CPD/display.m,
+	  BNT/CPDs/@softmax_CPD/get_field.m,
+	  BNT/CPDs/@softmax_CPD/maximize_params.m,
+	  BNT/CPDs/@softmax_CPD/reset_ess.m,
+	  BNT/CPDs/@softmax_CPD/sample_node.m,
+	  BNT/CPDs/@softmax_CPD/set_fields.m,
+	  BNT/CPDs/@softmax_CPD/update_ess.m,
+	  BNT/CPDs/@softmax_CPD/private/extract_params.m,
+	  BNT/CPDs/@tabular_CPD/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_CPD/bayes_update_params.m,
+	  BNT/CPDs/@tabular_CPD/log_nextcase_prob_node.m,
+	  BNT/CPDs/@tabular_CPD/log_prior.m,
+	  BNT/CPDs/@tabular_CPD/reset_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess.m,
+	  BNT/CPDs/@tabular_CPD/update_ess_simple.m,
+	  BNT/CPDs/@tabular_CPD/Old/BIC_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/bayesian_score_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/log_marg_prob_node_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/mult_CPD_and_pi_msgs.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_CPT.m,
+	  BNT/CPDs/@tabular_CPD/Old/prob_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node.m,
+	  BNT/CPDs/@tabular_CPD/Old/sample_node_single_case.m,
+	  BNT/CPDs/@tabular_CPD/Old/tabular_CPD.m,
+	  BNT/CPDs/@tabular_CPD/Old/update_params.m,
+	  BNT/CPDs/@tabular_decision_node/CPD_to_CPT.m,
+	  BNT/CPDs/@tabular_decision_node/display.m,
+	  BNT/CPDs/@tabular_decision_node/get_field.m,
+	  BNT/CPDs/@tabular_decision_node/set_fields.m,
+	  BNT/CPDs/@tabular_decision_node/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_decision_node/Old/tabular_decision_node.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_pot.m,
+	  BNT/CPDs/@tabular_kernel/convert_to_table.m,
+	  BNT/CPDs/@tabular_kernel/get_field.m,
+	  BNT/CPDs/@tabular_kernel/set_fields.m,
+	  BNT/CPDs/@tabular_kernel/tabular_kernel.m,
+	  BNT/CPDs/@tabular_kernel/Old/tabular_kernel.m,
+	  BNT/CPDs/@tabular_utility_node/convert_to_pot.m,
+	  BNT/CPDs/@tabular_utility_node/display.m,
+	  BNT/CPDs/@tabular_utility_node/tabular_utility_node.m,
+	  BNT/CPDs/@tree_CPD/display.m,
+	  BNT/CPDs/@tree_CPD/evaluate_tree_performance.m,
+	  BNT/CPDs/@tree_CPD/get_field.m,
+	  BNT/CPDs/@tree_CPD/learn_params.m, BNT/CPDs/@tree_CPD/readme.txt,
+	  BNT/CPDs/@tree_CPD/set_fields.m, BNT/CPDs/@tree_CPD/tree_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/linear_gaussian_CPD.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@linear_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/log_marg_prob_node.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/root_gaussian_CPD.m,
+	  BNT/CPDs/Old/@root_gaussian_CPD/update_params_complete.m,
+	  BNT/CPDs/Old/@tabular_chance_node/CPD_to_upot.m,
+	  BNT/CPDs/Old/@tabular_chance_node/tabular_chance_node.m,
+	  BNT/examples/dynamic/bat1.m, BNT/examples/dynamic/bkff1.m,
+	  BNT/examples/dynamic/chmm1.m,
+	  BNT/examples/dynamic/cmp_inference_dbn.m,
+	  BNT/examples/dynamic/cmp_learning_dbn.m,
+	  BNT/examples/dynamic/cmp_online_inference.m,
+	  BNT/examples/dynamic/fhmm_infer.m,
+	  BNT/examples/dynamic/filter_test1.m,
+	  BNT/examples/dynamic/kalman1.m,
+	  BNT/examples/dynamic/kjaerulff1.m,
+	  BNT/examples/dynamic/loopy_dbn1.m,
+	  BNT/examples/dynamic/mk_collage_from_clqs.m,
+	  BNT/examples/dynamic/mk_fhmm.m, BNT/examples/dynamic/reveal1.m,
+	  BNT/examples/dynamic/scg_dbn.m,
+	  BNT/examples/dynamic/skf_data_assoc_gmux.m,
+	  BNT/examples/dynamic/HHMM/add_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/hhmm_jtree_clqs.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo.m,
+	  BNT/examples/dynamic/HHMM/mk_hhmm_topo_F1.m,
+	  BNT/examples/dynamic/HHMM/pretty_print_hhmm_parse.m,
+	  BNT/examples/dynamic/HHMM/Motif/fixed_args_mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/mk_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Motif/sample_motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_abcd_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_arrow_alpha_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm2.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3.m,
+	  BNT/examples/dynamic/HHMM/Old/mk_hhmm3_args.m,
+	  BNT/examples/dynamic/HHMM/Old/motif_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Old/remove_hhmm_end_state.m,
+	  BNT/examples/dynamic/HHMM/Square/get_square_data.m,
+	  BNT/examples/dynamic/HHMM/Square/hhmm_inference.m,
+	  BNT/examples/dynamic/HHMM/Square/is_F2_true_D3.m,
+	  BNT/examples/dynamic/HHMM/Square/learn_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_cts.m,
+	  BNT/examples/dynamic/HHMM/Square/sample_square_hhmm_discrete.m,
+	  BNT/examples/dynamic/HHMM/Square/square4.mat,
+	  BNT/examples/dynamic/HHMM/Square/square4_cases.mat,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.m,
+	  BNT/examples/dynamic/HHMM/Square/test_square_fig.mat,
+	  BNT/examples/dynamic/HHMM/Square/Old/learn_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/mk_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/plot_square_hhmm.m,
+	  BNT/examples/dynamic/HHMM/Square/Old/sample_square_hhmm.m,
+	  BNT/examples/dynamic/Old/chmm1.m,
+	  BNT/examples/dynamic/Old/cmp_inference.m,
+	  BNT/examples/dynamic/Old/kalman1.m,
+	  BNT/examples/dynamic/Old/old.water1.m,
+	  BNT/examples/dynamic/Old/online1.m,
+	  BNT/examples/dynamic/Old/online2.m,
+	  BNT/examples/dynamic/Old/scg_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_gmux_robot_dbn.m,
+	  BNT/examples/dynamic/SLAM/mk_linear_slam.m,
+	  BNT/examples/dynamic/SLAM/slam_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_offline_loopy.m,
+	  BNT/examples/dynamic/SLAM/slam_partial_kf.m,
+	  BNT/examples/dynamic/SLAM/slam_stationary_loopy.m,
+	  BNT/examples/dynamic/SLAM/Old/offline_loopy_slam.m,
+	  BNT/examples/dynamic/SLAM/Old/paskin1.m,
+	  BNT/examples/dynamic/SLAM/Old/skf_data_assoc_gmux2.m,
+	  BNT/examples/dynamic/SLAM/Old/slam_kf.m,
+	  BNT/examples/limids/id1.m, BNT/examples/limids/pigs1.m,
+	  BNT/examples/static/cg1.m, BNT/examples/static/cg2.m,
+	  BNT/examples/static/discrete2.m, BNT/examples/static/discrete3.m,
+	  BNT/examples/static/fa1.m, BNT/examples/static/gaussian1.m,
+	  BNT/examples/static/gibbs_test1.m, BNT/examples/static/lw1.m,
+	  BNT/examples/static/mfa1.m, BNT/examples/static/mixexp1.m,
+	  BNT/examples/static/mixexp2.m, BNT/examples/static/mixexp3.m,
+	  BNT/examples/static/mog1.m, BNT/examples/static/qmr1.m,
+	  BNT/examples/static/sample1.m, BNT/examples/static/softmax1.m,
+	  BNT/examples/static/Belprop/belprop_loop1_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loop1_gauss.m,
+	  BNT/examples/static/Belprop/belprop_loopy_cg.m,
+	  BNT/examples/static/Belprop/belprop_loopy_discrete.m,
+	  BNT/examples/static/Belprop/belprop_loopy_gauss.m,
+	  BNT/examples/static/Belprop/belprop_polytree_cg.m,
+	  BNT/examples/static/Belprop/belprop_polytree_gauss.m,
+	  BNT/examples/static/Belprop/bp1.m,
+	  BNT/examples/static/Belprop/gmux1.m,
+	  BNT/examples/static/Brutti/Belief_IOhmm.m,
+	  BNT/examples/static/Brutti/Belief_hmdt.m,
+	  BNT/examples/static/Brutti/Belief_hme.m,
+	  BNT/examples/static/Brutti/Sigmoid_Belief.m,
+	  BNT/examples/static/HME/HMEforMatlab.jpg,
+	  BNT/examples/static/HME/README, BNT/examples/static/HME/fhme.m,
+	  BNT/examples/static/HME/gen_data.m,
+	  BNT/examples/static/HME/hme_class_plot.m,
+	  BNT/examples/static/HME/hme_reg_plot.m,
+	  BNT/examples/static/HME/hme_topobuilder.m,
+	  BNT/examples/static/HME/test_data_class.mat,
+	  BNT/examples/static/HME/test_data_class2.mat,
+	  BNT/examples/static/HME/test_data_reg.mat,
+	  BNT/examples/static/HME/train_data_class.mat,
+	  BNT/examples/static/HME/train_data_reg.mat,
+	  BNT/examples/static/Misc/mixexp_data.txt,
+	  BNT/examples/static/Misc/mixexp_graddesc.m,
+	  BNT/examples/static/Misc/mixexp_plot.m,
+	  BNT/examples/static/Misc/sprinkler.bif,
+	  BNT/examples/static/Models/mk_cancer_bnet.m,
+	  BNT/examples/static/Models/mk_car_bnet.m,
+	  BNT/examples/static/Models/mk_ideker_bnet.m,
+	  BNT/examples/static/Models/mk_incinerator_bnet.m,
+	  BNT/examples/static/Models/mk_markov_chain_bnet.m,
+	  BNT/examples/static/Models/mk_minimal_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_qmr_bnet.m,
+	  BNT/examples/static/Models/mk_vstruct_bnet.m,
+	  BNT/examples/static/Models/Old/mk_hmm_bnet.m,
+	  BNT/examples/static/SCG/scg1.m, BNT/examples/static/SCG/scg2.m,
+	  BNT/examples/static/SCG/scg3.m,
+	  BNT/examples/static/SCG/scg_3node.m,
+	  BNT/examples/static/SCG/scg_unstable.m,
+	  BNT/examples/static/StructLearn/bic1.m,
+	  BNT/examples/static/StructLearn/cooper_yoo.m,
+	  BNT/examples/static/StructLearn/k2demo1.m,
+	  BNT/examples/static/StructLearn/mcmc1.m,
+	  BNT/examples/static/StructLearn/pc1.m,
+	  BNT/examples/static/StructLearn/pc2.m,
+	  BNT/examples/static/Zoubin/README,
+	  BNT/examples/static/Zoubin/csum.m,
+	  BNT/examples/static/Zoubin/ffa.m,
+	  BNT/examples/static/Zoubin/mfa.m,
+	  BNT/examples/static/Zoubin/mfa_cl.m,
+	  BNT/examples/static/Zoubin/mfademo.m,
+	  BNT/examples/static/Zoubin/rdiv.m,
+	  BNT/examples/static/Zoubin/rprod.m,
+	  BNT/examples/static/Zoubin/rsum.m,
+	  BNT/examples/static/dtree/test_housing.m,
+	  BNT/examples/static/dtree/test_restaurants.m,
+	  BNT/examples/static/dtree/test_zoo1.m,
+	  BNT/examples/static/dtree/tmp.dot,
+	  BNT/examples/static/dtree/transform_data_into_bnt_format.m,
+	  BNT/examples/static/fgraph/fg2.m,
+	  BNT/examples/static/fgraph/fg3.m,
+	  BNT/examples/static/fgraph/fg_mrf1.m,
+	  BNT/examples/static/fgraph/fg_mrf2.m,
+	  BNT/general/bnet_to_fgraph.m,
+	  BNT/general/compute_fwd_interface.m,
+	  BNT/general/compute_interface_nodes.m,
+	  BNT/general/compute_minimal_interface.m,
+	  BNT/general/dbn_to_bnet.m,
+	  BNT/general/determine_elim_constraints.m,
+	  BNT/general/do_intervention.m, BNT/general/dsep.m,
+	  BNT/general/enumerate_scenarios.m, BNT/general/fgraph_to_bnet.m,
+	  BNT/general/log_lik_complete.m,
+	  BNT/general/log_marg_lik_complete.m, BNT/general/mk_bnet.m,
+	  BNT/general/mk_fgraph.m, BNT/general/mk_limid.m,
+	  BNT/general/mk_mutilated_samples.m,
+	  BNT/general/mk_slice_and_half_dbn.m,
+	  BNT/general/partition_dbn_nodes.m,
+	  BNT/general/sample_bnet_nocell.m, BNT/general/sample_dbn.m,
+	  BNT/general/score_bnet_complete.m,
+	  BNT/general/unroll_dbn_topology.m,
+	  BNT/general/Old/bnet_to_gdl_graph.m,
+	  BNT/general/Old/calc_mpe_bucket.m,
+	  BNT/general/Old/calc_mpe_dbn.m,
+	  BNT/general/Old/calc_mpe_given_inf_engine.m,
+	  BNT/general/Old/calc_mpe_global.m,
+	  BNT/general/Old/compute_interface_nodes.m,
+	  BNT/general/Old/mk_gdl_graph.m, GraphViz/draw_dbn.m,
+	  GraphViz/make_layout.m, BNT/license.gpl.txt,
+	  BNT/general/add_evidence_to_gmarginal.m,
+	  BNT/inference/@inf_engine/bnet_from_engine.m,
+	  BNT/inference/@inf_engine/get_field.m,
+	  BNT/inference/@inf_engine/inf_engine.m,
+	  BNT/inference/@inf_engine/marginal_family.m,
+	  BNT/inference/@inf_engine/set_fields.m,
+	  BNT/inference/@inf_engine/update_engine.m,
+	  BNT/inference/@inf_engine/Old/marginal_family_pot.m,
+	  BNT/inference/@inf_engine/Old/observed_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/bk_ff_hmm_inf_engine.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_predict_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/bk_ff_fb.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/combine_marginals_into_joint.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/dbn_to_hmm.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_mat.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/mk_hmm_obs_lik_vec1.m,
+	  BNT/inference/dynamic/@bk_ff_hmm_inf_engine/private/project_joint_onto_marginals.m,
+	  BNT/inference/dynamic/@bk_inf_engine/bk_inf_engine.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_init_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_marginal_from_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel.m,
+	  BNT/inference/dynamic/@bk_inf_engine/dbn_update_bel1.m,
+	  BNT/inference/dynamic/@bk_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@bk_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@bk_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/ff_inf_engine.m,
+	  BNT/inference/dynamic/@ff_inf_engine/filter_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@ff_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@ff_inf_engine/smooth_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@ff_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/frontier_inf_engine.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@frontier_inf_engine/set_fwdback.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/dhmm_inf_engine.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@hmm_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence2.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence3.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/enter_soft_evidence4.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Broken/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_nonint.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/enter_soft_evidence_trans.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine1.m,
+	  BNT/inference/dynamic/@jtree_dbn_inf_engine/Old/jtree_dbn_inf_engine2.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/jtree_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_family.m,
+	  BNT/inference/dynamic/@jtree_unrolled_dbn_inf_engine/Old/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/kalman_inf_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/update_engine.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/dbn_to_lds.m,
+	  BNT/inference/dynamic/@kalman_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/enter_soft_ev.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/pearl_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/correct_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/filter_evidence_obj_oriented.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/smooth_evidence_fast.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/Old/wrong_smooth.m,
+	  BNT/inference/dynamic/@pearl_dbn_inf_engine/private/init_pearl_dbn_ev_msgs.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/enter_evidence.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_family.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/marginal_nodes.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/pearl_unrolled_dbn_inf_engine.m,
+	  BNT/inference/dynamic/@pearl_unrolled_dbn_inf_engine/update_engine.m,
+	  BNT/inference/online/@filter_engine/bnet_from_engine.m,
+	  BNT/inference/online/@filter_engine/enter_evidence.m,
+	  BNT/inference/online/@filter_engine/filter_engine.m,
+	  BNT/inference/online/@filter_engine/marginal_family.m,
+	  BNT/inference/online/@filter_engine/marginal_nodes.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@hmm_2TBN_inf_engine/update_engine.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@jtree_2TBN_inf_engine/Old/jtree_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/back1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/backT.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/enter_evidence.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/fwd1.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/jtree_sparse_2TBN_inf_engine.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_family.m,
+	  BNT/inference/online/@jtree_sparse_2TBN_inf_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/bnet_from_engine.m,
+	  BNT/inference/online/@smoother_engine/marginal_family.m,
+	  BNT/inference/online/@smoother_engine/marginal_nodes.m,
+	  BNT/inference/online/@smoother_engine/smoother_engine.m,
+	  BNT/inference/online/@smoother_engine/update_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/belprop_fg_inf_engine.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_fg_inf_engine/set_params.m,
+	  BNT/inference/static/@belprop_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_family.m,
+	  BNT/inference/static/@belprop_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_gdl_inf_engine.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/belprop_inf_engine_nostr.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/enter_evidence1.m,
+	  BNT/inference/static/@belprop_inf_engine/Old/marginal_domain.m,
+	  BNT/inference/static/@belprop_inf_engine/private/junk,
+	  BNT/inference/static/@belprop_inf_engine/private/parallel_protocol.m,
+	  BNT/inference/static/@belprop_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/cond_gauss_inf_engine.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@cond_gauss_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@enumerative_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@enumerative_inf_engine/enumerative_inf_engine.m,
+	  BNT/inference/static/@enumerative_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gaussian_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gaussian_inf_engine/private/extract_params_from_gbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/gibbs_sampling_inf_engine.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/CPT.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_children.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_families_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_posterior_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/compute_strides.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_cpts.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.c,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/get_slice_dbn.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/my_sample_discrete.m,
+	  BNT/inference/static/@gibbs_sampling_inf_engine/private/sample_single_discrete.c,
+	  BNT/inference/static/@global_joint_inf_engine/global_joint_inf_engine.m,
+	  BNT/inference/static/@global_joint_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/collect_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/distribute_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_evidence.m,
+	  BNT/inference/static/@jtree_inf_engine/Old/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/jtree_limid_inf_engine.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_family.m,
+	  BNT/inference/static/@jtree_limid_inf_engine/Old/marginal_nodes_SS.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/cliques_from_engine.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/clq_containing_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/enter_soft_evidence.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_family.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/set_fields.m,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/collect_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/distribute_evidence.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.c,
+	  BNT/inference/static/@jtree_sparse_inf_engine/old/init_pot1.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/likelihood_weighting_inf_engine.m,
+	  BNT/inference/static/@likelihood_weighting_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@pearl_inf_engine/loopy_converged.m,
+	  BNT/inference/static/@pearl_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@pearl_inf_engine/private/compute_bel.m,
+	  BNT/inference/static/@pearl_inf_engine/private/prod_lambda_msgs.m,
+	  BNT/inference/static/@pearl_inf_engine/private/tree_protocol.m,
+	  BNT/inference/static/@quickscore_inf_engine/enter_evidence.m,
+	  BNT/inference/static/@quickscore_inf_engine/marginal_nodes.m,
+	  BNT/inference/static/@quickscore_inf_engine/quickscore_inf_engine.m,
+	  BNT/inference/static/@quickscore_inf_engine/private/C_quickscore.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nr.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.c,
+	  BNT/inference/static/@quickscore_inf_engine/private/nrutil.h,
+	  BNT/inference/static/@quickscore_inf_engine/private/quickscore.m,
+	  BNT/learning/bayes_update_params.m,
+	  BNT/learning/bic_score_family.m,
+	  BNT/learning/compute_cooling_schedule.m,
+	  BNT/learning/dirichlet_score_family.m,
+	  BNT/learning/kpm_learn_struct_mcmc.m,
+	  BNT/learning/learn_params_em.m,
+	  BNT/learning/learn_struct_dbn_reveal.m,
+	  BNT/learning/learn_struct_pdag_ic_star.m,
+	  BNT/learning/mcmc_sample_to_hist.m, BNT/learning/mk_schedule.m,
+	  BNT/learning/mk_tetrad_data_file.m,
+	  BNT/learning/score_dags_old.m, HMM/dhmm_logprob_brute_force.m,
+	  HMM/dhmm_logprob_path.m, HMM/mdp_sample.m, Kalman/AR_to_SS.m,
+	  Kalman/SS_to_AR.m, Kalman/convert_to_lagged_form.m,
+	  Kalman/ensure_AR.m, Kalman/eval_AR_perf.m,
+	  Kalman/kalman_filter.m, Kalman/kalman_smoother.m,
+	  Kalman/kalman_update.m, Kalman/learn_AR.m,
+	  Kalman/learn_AR_diagonal.m, Kalman/learn_kalman.m,
+	  Kalman/smooth_update.m,
+	  BNT/general/convert_dbn_CPDs_to_tables_slow.m,
+	  BNT/general/dispcpt.m, BNT/general/linear_gaussian_to_cpot.m,
+	  BNT/general/partition_matrix_vec_3.m,
+	  BNT/general/shrink_obs_dims_in_gaussian.m,
+	  BNT/general/shrink_obs_dims_in_table.m,
+	  BNT/potentials/CPD_to_pot.m, BNT/potentials/README,
+	  BNT/potentials/check_for_cd_arcs.m,
+	  BNT/potentials/determine_pot_type.m,
+	  BNT/potentials/mk_initial_pot.m,
+	  BNT/potentials/@cgpot/cg_can_to_mom.m,
+	  BNT/potentials/@cgpot/cg_mom_to_can.m,
+	  BNT/potentials/@cgpot/cgpot.m, BNT/potentials/@cgpot/display.m,
+	  BNT/potentials/@cgpot/divide_by_pot.m,
+	  BNT/potentials/@cgpot/domain_pot.m,
+	  BNT/potentials/@cgpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cgpot/enter_discrete_evidence_pot.m,
+	  BNT/potentials/@cgpot/marginalize_pot.m,
+	  BNT/potentials/@cgpot/multiply_by_pot.m,
+	  BNT/potentials/@cgpot/multiply_pots.m,
+	  BNT/potentials/@cgpot/normalize_pot.m,
+	  BNT/potentials/@cgpot/pot_to_marginal.m,
+	  BNT/potentials/@cgpot/Old/normalize_pot.m,
+	  BNT/potentials/@cgpot/Old/simple_marginalize_pot.m,
+	  BNT/potentials/@cpot/cpot.m, BNT/potentials/@cpot/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/display.m,
+	  BNT/potentials/@cpot/divide_by_pot.m,
+	  BNT/potentials/@cpot/domain_pot.m,
+	  BNT/potentials/@cpot/enter_cts_evidence_pot.m,
+	  BNT/potentials/@cpot/marginalize_pot.m,
+	  BNT/potentials/@cpot/multiply_by_pot.m,
+	  BNT/potentials/@cpot/multiply_pots.m,
+	  BNT/potentials/@cpot/normalize_pot.m,
+	  BNT/potentials/@cpot/pot_to_marginal.m,
+	  BNT/potentials/@cpot/rescale_pot.m,
+	  BNT/potentials/@cpot/set_domain_pot.m,
+	  BNT/potentials/@cpot/Old/cpot_to_mpot.m,
+	  BNT/potentials/@cpot/Old/normalize_pot.convert.m,
+	  BNT/potentials/@dpot/approxeq_pot.m,
+	  BNT/potentials/@dpot/display.m,
+	  BNT/potentials/@dpot/domain_pot.m,
+	  BNT/potentials/@dpot/dpot_to_table.m,
+	  BNT/potentials/@dpot/get_fields.m,
+	  BNT/potentials/@dpot/multiply_pots.m,
+	  BNT/potentials/@dpot/pot_to_marginal.m,
+	  BNT/potentials/@dpot/set_domain_pot.m,
+	  BNT/potentials/@mpot/display.m,
+	  BNT/potentials/@mpot/marginalize_pot.m,
+	  BNT/potentials/@mpot/mpot.m, BNT/potentials/@mpot/mpot_to_cpot.m,
+	  BNT/potentials/@mpot/normalize_pot.m,
+	  BNT/potentials/@mpot/pot_to_marginal.m,
+	  BNT/potentials/@mpot/rescale_pot.m,
+	  BNT/potentials/@upot/approxeq_pot.m,
+	  BNT/potentials/@upot/display.m,
+	  BNT/potentials/@upot/divide_by_pot.m,
+	  BNT/potentials/@upot/marginalize_pot.m,
+	  BNT/potentials/@upot/multiply_by_pot.m,
+	  BNT/potentials/@upot/normalize_pot.m,
+	  BNT/potentials/@upot/pot_to_marginal.m,
+	  BNT/potentials/@upot/upot.m,
+	  BNT/potentials/@upot/upot_to_opt_policy.m,
+	  BNT/potentials/Old/comp_eff_node_sizes.m,
+	  BNT/potentials/Tables/divide_by_sparse_table.c,
+	  BNT/potentials/Tables/divide_by_table.c,
+	  BNT/potentials/Tables/marg_sparse_table.c,
+	  BNT/potentials/Tables/marg_table.c,
+	  BNT/potentials/Tables/mult_by_sparse_table.c,
+	  BNT/potentials/Tables/rep_mult.c, HMM/mk_leftright_transmat.m:
+	  Initial revision
+
+2002-05-29 04:59  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/:
+	  clq_containing_nodes.m, problems.txt, push_pot_toclique.m,
+	  Old/initialize_engine.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-05-29 04:59  yozhik
+
+	* BNT/inference/static/@stab_cond_gauss_inf_engine/:
+	  clq_containing_nodes.m, problems.txt, push_pot_toclique.m,
+	  Old/initialize_engine.m: Initial revision
+
+2002-05-19 15:11  yozhik
+
+	* BNT/potentials/: @scgcpot/marginalize_pot.m,
+	  @scgcpot/normalize_pot.m, @scgcpot/rescale_pot.m,
+	  @scgcpot/scgcpot.m, @scgpot/direct_combine_pots.m,
+	  @scgpot/pot_to_marginal.m: Initial import of code base from Kevin
+	  Murphy.
+
+2002-05-19 15:11  yozhik
+
+	* BNT/potentials/: @scgcpot/marginalize_pot.m,
+	  @scgcpot/normalize_pot.m, @scgcpot/rescale_pot.m,
+	  @scgcpot/scgcpot.m, @scgpot/direct_combine_pots.m,
+	  @scgpot/pot_to_marginal.m: Initial revision
+
+2001-07-28 08:43  yozhik
+
+	* BNT/potentials/genops.c: Initial import of code base from Kevin
+	  Murphy.
+
+2001-07-28 08:43  yozhik
+
+	* BNT/potentials/genops.c: Initial revision
+
Binary file toolboxes/FullBNT-1.0.7/docs/Eqns/lin_reg_eqn.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/CPTgrass.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/HMEforMatlab.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/ar1.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 450 300 225 600 450 900 675
+1 1 0 1 -1 0 0 0 -1 0.000 1 0.0000 1725 450 300 225 1725 450 2025 675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 450 1425 450
+4 0 -1 0 0 0 12 0.0000 4 180 2310 300 1050 Auto Regressive model AR(1)\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 450 525 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1575 525 X2\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/ar1.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/batnet.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,318 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 32 #dfdfdf
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 5250.000 2175.000 2250 1500 2175 2175 2250 2850
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 6594.530 5137.500 2250 4200 2150 5137 2250 6075
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 3562.500 3450.000 2250 3000 2175 3450 2250 3900
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 2576.560 6412.500 2250 6225 2200 6412 2250 6600
+6 6075 3300 7125 3600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7125 3600 7125 3300 6075 3300 6075 3600 7125 3600
+4 1 -1 0 0 0 12 0.0000 4 135 1020 6600 3525 SensorValid1\001
+-6
+6 6450 3975 7500 4275
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7500 4275 7500 3975 6450 3975 6450 4275 7500 4275
+4 1 -1 0 0 0 12 0.0000 4 135 870 6975 4200 FYdotDiff1\001
+-6
+6 6600 4575 7650 4875
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7650 4875 7650 4575 6600 4575 6600 4875 7650 4875
+4 1 -1 0 0 0 12 0.0000 4 135 975 7125 4800 FcloseSlow1\001
+-6
+6 2400 3075 3000 3375
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3000 3375 3000 3075 2400 3075 2400 3375 3000 3375
+4 1 -1 0 0 0 12 0.0000 4 135 465 2700 3300 Xdot0\001
+-6
+6 5025 3075 5625 3375
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 3375 5625 3075 5025 3075 5025 3375 5625 3375
+4 1 -1 0 0 0 12 0.0000 4 135 465 5325 3300 Xdot1\001
+-6
+6 2400 3600 3150 3900
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 3900 3150 3600 2400 3600 2400 3900 3150 3900
+4 1 -1 0 0 0 12 0.0000 4 135 615 2775 3825 InLane0\001
+-6
+6 4875 3600 5625 3900
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 3900 5625 3600 4875 3600 4875 3900 5625 3900
+4 1 -1 0 0 0 12 0.0000 4 135 615 5250 3825 InLane1\001
+-6
+6 2400 1500 3150 1800
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 1800 3150 1500 2400 1500 2400 1800 3150 1800
+4 1 -1 0 0 0 12 0.0000 4 135 630 2775 1725 LeftClr0\001
+-6
+6 4875 1500 5625 1800
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 1800 5625 1500 4875 1500 4875 1800 5625 1800
+4 1 -1 0 0 0 12 0.0000 4 135 630 5250 1725 LeftClr1\001
+-6
+6 2400 2025 3300 2325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 2325 3300 2025 2400 2025 2400 2325 3300 2325
+4 1 -1 0 0 0 12 0.0000 4 180 720 2850 2250 RightClr0\001
+-6
+6 4800 2025 5625 2325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 2325 5625 2025 4800 2025 4800 2325 5625 2325
+4 1 -1 0 0 0 12 0.0000 4 180 720 5250 2250 RightClr1\001
+-6
+6 2400 2550 3300 2850
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 2850 3300 2550 2400 2550 2400 2850 3300 2850
+4 1 -1 0 0 0 12 0.0000 4 135 855 2850 2775 LatAction0\001
+-6
+6 4725 2550 5625 2850
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 2850 5625 2550 4725 2550 4725 2850 5625 2850
+4 1 -1 0 0 0 12 0.0000 4 135 855 5175 2775 LatAction1\001
+-6
+6 2400 4200 3450 4500
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3450 4500 3450 4200 2400 4200 2400 4500 3450 4500
+4 1 -1 0 0 0 12 0.0000 4 135 930 2925 4425 FwdAction0\001
+-6
+6 4575 4200 5625 4500
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 4500 5625 4200 4575 4200 4575 4500 5625 4500
+4 1 -1 0 0 0 12 0.0000 4 135 930 5100 4425 FwdAction1\001
+-6
+6 2400 4725 3000 5025
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3000 5025 3000 4725 2400 4725 2400 5025 3000 5025
+4 1 -1 0 0 0 12 0.0000 4 135 465 2700 4950 Ydot0\001
+-6
+6 5025 4725 5625 5025
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 5025 5625 4725 5025 4725 5025 5025 5625 5025
+4 1 -1 0 0 0 12 0.0000 4 135 465 5325 4950 Ydot1\001
+-6
+6 2400 5250 3150 5550
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 5550 3150 5250 2400 5250 2400 5550 3150 5550
+4 1 -1 0 0 0 12 0.0000 4 180 705 2775 5475 Stopped0\001
+-6
+6 4500 5250 5250 5550
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5250 5550 5250 5250 4500 5250 4500 5550 5250 5550
+4 1 -1 0 0 0 12 0.0000 4 180 705 4875 5475 Stopped1\001
+-6
+6 6450 5325 7200 5625
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 5625 7200 5325 6450 5325 6450 5625 7200 5625
+4 1 -1 0 0 0 12 0.0000 4 135 585 6825 5550 BXdot1\001
+-6
+6 2400 5775 3300 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 6075 3300 5775 2400 5775 2400 6075 3300 6075
+4 1 -1 0 0 0 12 0.0000 4 180 885 2850 6000 EngStatus0\001
+-6
+6 4575 5775 5475 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5475 6075 5475 5775 4575 5775 4575 6075 5475 6075
+4 1 -1 0 0 0 12 0.0000 4 180 885 5025 6000 EngStatus1\001
+-6
+6 6150 5775 7200 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 6075 7200 5775 6150 5775 6150 6075 7200 6075
+4 1 -1 0 0 0 12 0.0000 4 135 960 6675 6000 BcloseFast1\001
+-6
+6 2400 6300 3750 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3750 6600 3750 6300 2400 6300 2400 6600 3750 6600
+4 1 -1 0 0 0 12 0.0000 4 135 1380 3075 6525 FrontBackStatus0\001
+-6
+6 4125 6300 5475 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5475 6600 5475 6300 4125 6300 4125 6600 5475 6600
+4 1 -1 0 0 0 12 0.0000 4 135 1380 4800 6525 FrontBackStatus1\001
+-6
+6 6150 6300 7200 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 6600 7200 6300 6150 6300 6150 6600 7200 6600
+4 1 -1 0 0 0 12 0.0000 4 135 885 6675 6525 BYdotDiff1\001
+-6
+6 7650 5025 8250 5325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 8250 5325 8250 5025 7650 5025 7650 5325 8250 5325
+4 1 -1 0 0 0 12 0.0000 4 135 390 7950 5250 Fclr1\001
+-6
+6 7650 5775 8250 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 8250 6075 8250 5775 7650 5775 7650 6075 8250 6075
+4 1 -1 0 0 0 12 0.0000 4 135 405 7950 6000 Bclr1\001
+-6
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 3750 4725 2775
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 3225 4875 3675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5175 5025 5025 5250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5325 5775 5475 5025
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5400 5775 6450 4200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5175 2850 5325 3075
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5100 4500 5175 4725
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 1650 4800 2550
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3750 6375 4650 4500
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2700 4650 4200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5475 6000 6450 5475
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7725 5775 7200 5550
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3675 6300 4800 2850
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6150 6000 5475 6525
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3
+	3 1 1.00 60.00 120.00
+	 5625 4800 6375 3750 8850 3750
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6600 4800 5475 6375
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6675 6300 6675 6075
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3
+	3 1 1.00 60.00 120.00
+	 5475 5850 6150 5175 7650 5175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 3225 5025 3225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 3225 8850 3225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 3450 8850 3300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 3750 4875 3750
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 3450 8850 3675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 1650 4875 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 1650 8700 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2175 4800 2175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 2175 8550 2175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2700 4725 2700
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2100 4725 2625
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 2700 8700 2700
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3450 4350 4575 4350
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7500 4125 8400 4350
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 4275 7125 4575
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 4875 5025 4875
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7800 5025 7650 4800
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 5400 4500 5400
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7200 5400 8700 5400
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 5925 4575 5925
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7650 5925 7200 5925
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7200 6450 8400 6450
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 8250 5175 8850 4875
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 8250 5925 8850 5925
+2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5
+	 3975 6700 1875 6700 1875 4100 3975 4100 3975 6700
+2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5
+	 3975 4000 1875 4000 1875 1400 3975 1400 3975 4000
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 6600 9750 6300 8400 6300 8400 6600 9750 6600
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 6075 9750 5775 8850 5775 8850 6075 9750 6075
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 5550 9750 5250 8700 5250 8700 5550 9750 5550
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 5025 9750 4725 8850 4725 8850 5025 9750 5025
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 4500 9750 4200 8400 4200 8400 4500 9750 4500
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 3900 9750 3600 8850 3600 8850 3900 9750 3900
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 3375 9750 3075 8850 3075 8850 3375 9750 3375
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 2850 9750 2550 8700 2550 8700 2850 9750 2850
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 2325 9750 2025 8550 2025 8550 2325 9750 2325
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 1800 9750 1500 8700 1500 8700 1800 9750 1800
+4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3300 XdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3825 YdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1005 9225 1725 LeftClrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 180 1095 9150 2250 RightClrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 180 900 9225 2775 TurnSignal1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1245 9075 4425 FYdotDiffSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 765 9300 4950 FclrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 960 9225 5475 BXdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 780 9300 6000 BclrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1260 9075 6525 BYdotDiffSens1\001
+4 1 -1 0 0 0 16 0.0000 4 165 585 2925 7050 slice t\001
+4 1 -1 0 0 0 16 0.0000 4 165 840 4800 7050 slice t+1\001
+4 1 -1 0 0 0 16 0.0000 4 165 855 9150 7050 evidence\001
+
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/batnet.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/batnet_numbered.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,345 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 32 #dfdfdf
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 5250.000 2175.000 2250 1500 2175 2175 2250 2850
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 6594.530 5137.500 2250 4200 2150 5137 2250 6075
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 3562.500 3450.000 2250 3000 2175 3450 2250 3900
+5 1 1 1 -1 -1 0 0 -1 4.000 0 1 0 0 2576.560 6412.500 2250 6225 2200 6412 2250 6600
+6 6075 3300 7125 3600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7125 3600 7125 3300 6075 3300 6075 3600 7125 3600
+4 1 -1 0 0 0 12 0.0000 4 135 1020 6600 3525 SensorValid1\001
+-6
+6 6450 3975 7500 4275
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7500 4275 7500 3975 6450 3975 6450 4275 7500 4275
+4 1 -1 0 0 0 12 0.0000 4 135 870 6975 4200 FYdotDiff1\001
+-6
+6 6600 4575 7650 4875
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7650 4875 7650 4575 6600 4575 6600 4875 7650 4875
+4 1 -1 0 0 0 12 0.0000 4 135 975 7125 4800 FcloseSlow1\001
+-6
+6 2400 3075 3000 3375
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3000 3375 3000 3075 2400 3075 2400 3375 3000 3375
+4 1 -1 0 0 0 12 0.0000 4 135 465 2700 3300 Xdot0\001
+-6
+6 5025 3075 5625 3375
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 3375 5625 3075 5025 3075 5025 3375 5625 3375
+4 1 -1 0 0 0 12 0.0000 4 135 465 5325 3300 Xdot1\001
+-6
+6 2400 3600 3150 3900
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 3900 3150 3600 2400 3600 2400 3900 3150 3900
+4 1 -1 0 0 0 12 0.0000 4 135 615 2775 3825 InLane0\001
+-6
+6 4875 3600 5625 3900
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 3900 5625 3600 4875 3600 4875 3900 5625 3900
+4 1 -1 0 0 0 12 0.0000 4 135 615 5250 3825 InLane1\001
+-6
+6 2400 1500 3150 1800
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 1800 3150 1500 2400 1500 2400 1800 3150 1800
+4 1 -1 0 0 0 12 0.0000 4 135 630 2775 1725 LeftClr0\001
+-6
+6 4875 1500 5625 1800
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 1800 5625 1500 4875 1500 4875 1800 5625 1800
+4 1 -1 0 0 0 12 0.0000 4 135 630 5250 1725 LeftClr1\001
+-6
+6 2400 2025 3300 2325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 2325 3300 2025 2400 2025 2400 2325 3300 2325
+4 1 -1 0 0 0 12 0.0000 4 180 720 2850 2250 RightClr0\001
+-6
+6 4800 2025 5625 2325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 2325 5625 2025 4800 2025 4800 2325 5625 2325
+4 1 -1 0 0 0 12 0.0000 4 180 720 5250 2250 RightClr1\001
+-6
+6 2400 2550 3300 2850
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 2850 3300 2550 2400 2550 2400 2850 3300 2850
+4 1 -1 0 0 0 12 0.0000 4 135 855 2850 2775 LatAction0\001
+-6
+6 4725 2550 5625 2850
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 2850 5625 2550 4725 2550 4725 2850 5625 2850
+4 1 -1 0 0 0 12 0.0000 4 135 855 5175 2775 LatAction1\001
+-6
+6 2400 4200 3450 4500
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3450 4500 3450 4200 2400 4200 2400 4500 3450 4500
+4 1 -1 0 0 0 12 0.0000 4 135 930 2925 4425 FwdAction0\001
+-6
+6 4575 4200 5625 4500
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 4500 5625 4200 4575 4200 4575 4500 5625 4500
+4 1 -1 0 0 0 12 0.0000 4 135 930 5100 4425 FwdAction1\001
+-6
+6 2400 4725 3000 5025
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3000 5025 3000 4725 2400 4725 2400 5025 3000 5025
+4 1 -1 0 0 0 12 0.0000 4 135 465 2700 4950 Ydot0\001
+-6
+6 5025 4725 5625 5025
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5625 5025 5625 4725 5025 4725 5025 5025 5625 5025
+4 1 -1 0 0 0 12 0.0000 4 135 465 5325 4950 Ydot1\001
+-6
+6 2400 5250 3150 5550
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3150 5550 3150 5250 2400 5250 2400 5550 3150 5550
+4 1 -1 0 0 0 12 0.0000 4 180 705 2775 5475 Stopped0\001
+-6
+6 4500 5250 5250 5550
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5250 5550 5250 5250 4500 5250 4500 5550 5250 5550
+4 1 -1 0 0 0 12 0.0000 4 180 705 4875 5475 Stopped1\001
+-6
+6 6450 5325 7200 5625
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 5625 7200 5325 6450 5325 6450 5625 7200 5625
+4 1 -1 0 0 0 12 0.0000 4 135 585 6825 5550 BXdot1\001
+-6
+6 2400 5775 3300 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3300 6075 3300 5775 2400 5775 2400 6075 3300 6075
+4 1 -1 0 0 0 12 0.0000 4 180 885 2850 6000 EngStatus0\001
+-6
+6 4575 5775 5475 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5475 6075 5475 5775 4575 5775 4575 6075 5475 6075
+4 1 -1 0 0 0 12 0.0000 4 180 885 5025 6000 EngStatus1\001
+-6
+6 6150 5775 7200 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 6075 7200 5775 6150 5775 6150 6075 7200 6075
+4 1 -1 0 0 0 12 0.0000 4 135 960 6675 6000 BcloseFast1\001
+-6
+6 2325 6300 3825 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 3750 6600 3750 6300 2400 6300 2400 6600 3750 6600
+4 1 -1 0 0 0 12 0.0000 4 135 1380 3075 6525 FrontBackStatus0\001
+-6
+6 4050 6300 5550 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 5475 6600 5475 6300 4125 6300 4125 6600 5475 6600
+4 1 -1 0 0 0 12 0.0000 4 135 1380 4800 6525 FrontBackStatus1\001
+-6
+6 6150 6300 7200 6600
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 7200 6600 7200 6300 6150 6300 6150 6600 7200 6600
+4 1 -1 0 0 0 12 0.0000 4 135 885 6675 6525 BYdotDiff1\001
+-6
+6 7650 5025 8250 5325
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 8250 5325 8250 5025 7650 5025 7650 5325 8250 5325
+4 1 -1 0 0 0 12 0.0000 4 135 390 7950 5250 Fclr1\001
+-6
+6 7650 5775 8250 6075
+2 4 0 1 -1 7 0 0 -1 0.000 0 0 7 0 0 5
+	 8250 6075 8250 5775 7650 5775 7650 6075 8250 6075
+4 1 -1 0 0 0 12 0.0000 4 135 405 7950 6000 Bclr1\001
+-6
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 3750 4725 2775
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 3225 4875 3675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5175 5025 5025 5250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5325 5775 5475 5025
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5400 5775 6450 4200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5175 2850 5325 3075
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5100 4500 5175 4725
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 1650 4800 2550
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3750 6375 4650 4500
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2700 4650 4200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5475 6000 6450 5475
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7725 5775 7200 5550
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3675 6300 4800 2850
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6150 6000 5475 6525
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3
+	3 1 1.00 60.00 120.00
+	 5625 4800 6375 3750 8850 3750
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6600 4800 5475 6375
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 6675 6300 6675 6075
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 3
+	3 1 1.00 60.00 120.00
+	 5475 5850 6150 5175 7650 5175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 3225 5025 3225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 3225 8850 3225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 3450 8850 3300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 3750 4875 3750
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 3450 8850 3675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 1650 4875 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 1650 8700 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2175 4800 2175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 2175 8550 2175
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2700 4725 2700
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 2100 4725 2625
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 5625 2700 8700 2700
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3450 4350 4575 4350
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7500 4125 8400 4350
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7125 4275 7125 4575
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3000 4875 5025 4875
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7800 5025 7650 4800
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3150 5400 4500 5400
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7200 5400 8700 5400
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 3300 5925 4575 5925
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7650 5925 7200 5925
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 7200 6450 8400 6450
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 8250 5175 8850 4875
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 8250 5925 8850 5925
+2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5
+	 3975 6700 1875 6700 1875 4100 3975 4100 3975 6700
+2 4 1 1 -1 -1 0 0 -1 4.000 0 0 20 0 0 5
+	 3975 4000 1875 4000 1875 1400 3975 1400 3975 4000
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 6600 9750 6300 8400 6300 8400 6600 9750 6600
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 6075 9750 5775 8850 5775 8850 6075 9750 6075
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 5550 9750 5250 8700 5250 8700 5550 9750 5550
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 5025 9750 4725 8850 4725 8850 5025 9750 5025
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 4500 9750 4200 8400 4200 8400 4500 9750 4500
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 3900 9750 3600 8850 3600 8850 3900 9750 3900
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 3375 9750 3075 8850 3075 8850 3375 9750 3375
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 2850 9750 2550 8700 2550 8700 2850 9750 2850
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 2325 9750 2025 8550 2025 8550 2325 9750 2325
+2 4 0 1 -1 32 0 0 20 0.000 0 0 7 0 0 5
+	 9750 1800 9750 1500 8700 1500 8700 1800 9750 1800
+4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3300 XdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 840 9300 3825 YdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1005 9225 1725 LeftClrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 180 1095 9150 2250 RightClrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 180 900 9225 2775 TurnSignal1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1245 9075 4425 FYdotDiffSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 765 9300 4950 FclrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 960 9225 5475 BXdotSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 780 9300 6000 BclrSens1\001
+4 1 -1 0 0 0 12 0.0000 4 135 1260 9075 6525 BYdotDiffSens1\001
+4 1 -1 0 0 0 16 0.0000 4 165 585 2925 7050 slice t\001
+4 1 -1 0 0 0 16 0.0000 4 165 840 4800 7050 slice t+1\001
+4 1 -1 0 0 0 16 0.0000 4 165 855 9150 7050 evidence\001
+4 0 0 50 0 0 12 0.0000 4 135 180 2025 6525 14\001
+4 0 0 50 0 0 12 0.0000 4 135 90 1950 6075 7\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 5475 19\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 4950 17\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 4425 16\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 3825 20\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 3375 23\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 2775 21\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 2250 25\001
+4 0 0 50 0 0 12 0.0000 4 135 180 1950 1800 27\001
+4 0 0 50 0 0 12 0.0000 4 135 90 5925 3600 6\001
+4 0 0 50 0 0 12 0.0000 4 135 180 6225 4200 12\001
+4 0 0 50 0 0 12 0.0000 4 135 180 6375 4800 13\001
+4 0 0 50 0 0 12 0.0000 4 135 180 7875 5025 10\001
+4 0 0 50 0 0 12 0.0000 4 135 90 6300 5475 8\001
+4 0 0 50 0 0 12 0.0000 4 135 90 6000 6075 4\001
+4 0 0 50 0 0 12 0.0000 4 135 90 6000 6600 1\001
+4 0 0 50 0 0 12 0.0000 4 135 90 7575 6150 3\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 1725 28\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 2250 26\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 2775 22\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 3300 24\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 3825 18\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 4425 15\001
+4 0 0 50 0 0 12 0.0000 4 135 180 9825 4950 11\001
+4 0 0 50 0 0 12 0.0000 4 135 90 9825 5475 9\001
+4 0 0 50 0 0 12 0.0000 4 135 90 9825 6075 5\001
+4 0 0 50 0 0 12 0.0000 4 135 90 9825 6525 2\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/bic.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/cg1.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 1200 3000 300 300 1200 3000 1200 3300
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3900 3000 300 300 3900 3000 3900 3300
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3900 4500 300 300 3900 4500 3900 4800
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 2100 5700 300 300 2100 5700 2100 6000
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 5700 5700 300 300 5700 5700 5700 6000
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3600 1200 4200 1200 4200 1800 3600 1800 3600 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 6600 1200 7200 1200 7200 1800 6600 1800 6600 1200
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 1800 1200 2700
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 1800 3600 2850
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 1800 3600 4350
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 3300 2100 5400
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3750 4800 2100 5400
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4050 4800 5400 5550
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3900 1800 3900 2700
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3900 3300 3900 4200
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6900 1800 4200 4350
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6900 1800 6900 2700
+2 2 0 1 0 0 100 0 2 0.000 0 0 7 0 0 5
+	 900 1200 1500 1200 1500 1800 900 1800 900 1200
+4 0 0 100 0 0 12 0.0000 4 135 180 1050 1650 W\001
+4 0 0 100 0 0 12 0.0000 4 135 300 1050 3150 Min\001
+4 0 0 100 0 0 12 0.0000 4 135 105 3750 1650 F\001
+4 0 0 100 0 0 12 0.0000 4 135 120 3750 3150 E\001
+4 0 0 100 0 0 12 0.0000 4 135 135 3750 4650 D\001
+4 0 0 100 0 0 12 0.0000 4 135 405 1950 5850 Mout\001
+4 0 0 100 0 0 12 0.0000 4 135 120 6750 1650 B\001
+4 0 0 100 0 0 12 0.0000 4 135 120 6750 3150 C\001
+4 0 0 100 0 0 12 0.0000 4 135 105 5550 5850 L\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/cg1.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.T5.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,323 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 300 600 4500 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1200 3900 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3300 3900 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5400 3900 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7500 3900 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9300 3900 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1200 1200 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3300 1200 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5400 1200 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7500 1200 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9300 1200 9000
+-6
+6 3600 600 7200 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1200 6600 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3300 6600 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5400 6600 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7500 6600 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9300 6600 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 7800
+-6
+6 6300 600 9900 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 5100 300 300 9600 5100 9600 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 7200 300 300 9600 7200 9600 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 9000 300 300 9600 9000 9600 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 900 300 300 9600 900 9600 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 9600 3000 300 300 9600 3000 9600 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 8400 1200 9000 1200 9000 1800 8400 1800 8400 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 8400 3300 9000 3300 9000 3900 8400 3900 8400 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 8400 5400 9000 5400 9000 6000 8400 6000 8400 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 8400 7500 9000 7500 9000 8100 8400 8100 8400 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 8400 9300 9000 9300 9000 9900 8400 9900 8400 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 1200 9300 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 3300 9300 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 5400 9300 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 7500 9300 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 9300 9300 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1500 8400 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3600 8400 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1500 8400 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3600 8400 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5700 8400 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3600 8400 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5700 8400 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5700 8400 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7800 8400 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7800 8400 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7800 8400 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9600 8400 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9600 8400 7800
+-6
+6 9000 600 12600 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 5100 300 300 12300 5100 12300 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 7200 300 300 12300 7200 12300 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 9000 300 300 12300 9000 12300 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 900 300 300 12300 900 12300 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 12300 3000 300 300 12300 3000 12300 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 11100 1200 11700 1200 11700 1800 11100 1800 11100 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 11100 3300 11700 3300 11700 3900 11100 3900 11100 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 11100 5400 11700 5400 11700 6000 11100 6000 11100 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 11100 7500 11700 7500 11700 8100 11100 8100 11100 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 11100 9300 11700 9300 11700 9900 11100 9900 11100 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 11700 1200 12000 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 11700 3300 12000 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 11700 5400 12000 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 11700 7500 12000 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 11700 9300 12000 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 1500 11100 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 3600 11100 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 1500 11100 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 3600 11100 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 5700 11100 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 3600 11100 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 5700 11100 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 5700 11100 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 7800 11100 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 7800 11100 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 7800 11100 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 9600 11100 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 9000 9600 11100 7800
+-6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,187 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 225 1125 975 9975
+6 225 1125 975 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+-6
+-6
+6 2925 1125 3675 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+-6
+6 5625 1125 6375 9975
+6 5625 1125 6375 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+-6
+-6
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+1 3 0 2 7 0 50 0 20 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7500 1200 7200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5400 1200 5100
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3300 1200 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1200 1200 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1200 3900 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1500 3000 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1500 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3300 3900 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9600 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9300 1200 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9600 3000 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9600 5700 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9300 3900 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9600 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7500 3900 7200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1500 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1500 5700 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 1200 6600 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 3300 6600 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 5400 6600 5100
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 9300 6600 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 7500 6600 7200
+2 1 0 3 0 0 100 0 5 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5400 3900 5100
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.influence.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,200 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7500 1200 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9300 1200 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9300 3900 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7500 3900 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7500 6600 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9300 6600 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5400 3900 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5400 6600 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5400 1200 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3300 1200 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1200 1200 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1200 3900 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3300 3900 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3300 6600 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1200 6600 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 900 9600 3000 7800
+3 2 1 3 0 7 100 0 -1 8.000 0 1 0 4
+	2 0 6.00 180.00 360.00
+	 750 1950 2775 3750 975 5475 2925 5550
+	 0.000 -1.000 -1.000 0.000
+3 0 1 3 0 7 100 0 -1 8.000 0 1 0 3
+	2 0 6.00 180.00 360.00
+	 900 1875 3900 3450 5700 5550
+	 0.000 1.000 0.000
+4 0 0 100 0 0 25 0.0000 4 255 435 375 1575 A1\001
+4 0 0 100 0 0 25 0.0000 4 255 420 375 3750 B1\001
+4 0 0 100 0 0 25 0.0000 4 255 420 375 5775 C1\001
+4 0 0 100 0 0 25 0.0000 4 255 435 375 7950 D1\001
+4 0 0 100 0 0 25 0.0000 4 255 405 375 9750 E1\001
+4 0 0 100 0 0 25 0.0000 4 255 435 3075 1575 A2\001
+4 0 0 100 0 0 25 0.0000 4 255 420 3075 3750 B2\001
+4 0 0 100 0 0 25 0.0000 4 255 420 3075 5775 C2\001
+4 0 0 100 0 0 25 0.0000 4 255 435 3075 7875 D2\001
+4 0 0 100 0 0 25 0.0000 4 255 405 3075 9675 E2\001
+4 0 0 100 0 0 25 0.0000 4 255 435 5775 1575 A3\001
+4 0 0 100 0 0 25 0.0000 4 255 420 5700 3675 B3\001
+4 0 0 100 0 0 25 0.0000 4 255 420 5850 5775 C3\001
+4 0 0 100 0 0 25 0.0000 4 255 435 5775 7875 D3\001
+4 0 0 100 0 0 25 0.0000 4 255 405 5850 9675 E3\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.named.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,192 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7500 1200 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9300 1200 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9300 3900 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7500 3900 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7500 6600 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9300 6600 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5400 3900 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5400 6600 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5400 1200 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3300 1200 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1200 1200 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1200 3900 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3300 3900 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3300 6600 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1200 6600 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 900 9600 3000 7800
+4 0 0 100 0 0 25 0.0000 4 255 435 375 1575 A1\001
+4 0 0 100 0 0 25 0.0000 4 255 420 375 3750 B1\001
+4 0 0 100 0 0 25 0.0000 4 255 420 375 5775 C1\001
+4 0 0 100 0 0 25 0.0000 4 255 435 375 7950 D1\001
+4 0 0 100 0 0 25 0.0000 4 255 405 375 9750 E1\001
+4 0 0 100 0 0 25 0.0000 4 255 435 3075 1575 A2\001
+4 0 0 100 0 0 25 0.0000 4 255 420 3075 3750 B2\001
+4 0 0 100 0 0 25 0.0000 4 255 420 3075 5775 C2\001
+4 0 0 100 0 0 25 0.0000 4 255 435 3075 7875 D2\001
+4 0 0 100 0 0 25 0.0000 4 255 405 3075 9675 E2\001
+4 0 0 100 0 0 25 0.0000 4 255 435 5775 1575 A3\001
+4 0 0 100 0 0 25 0.0000 4 255 420 5700 3675 B3\001
+4 0 0 100 0 0 25 0.0000 4 255 420 5850 5775 C3\001
+4 0 0 100 0 0 25 0.0000 4 255 435 5775 7875 D3\001
+4 0 0 100 0 0 25 0.0000 4 255 405 5850 9675 E3\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/chmm5.small.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,181 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 300 600 4500 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1200 3900 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3300 3900 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5400 3900 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7500 3900 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9300 3900 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1200 1200 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3300 1200 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5400 1200 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7500 1200 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9300 1200 9000
+-6
+6 3600 600 7200 9900
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1200 6600 1050
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3300 6600 3000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5400 6600 5100
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7500 6600 7200
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9300 6600 9000
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 1500
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 3600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 5700
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 7800
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 9600
+2 1 0 1 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 7800
+-6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/chmm5_circle.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,162 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 3534 300 300 602 3534 602 3834
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 5634 300 300 602 5634 602 5934
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 7734 300 300 602 7734 602 8034
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 602 9459 300 300 602 9459 602 9759
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 600 1425 300 300 600 1425 600 1725
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 1500 300 300 3300 1500 3300 1800
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 3600 300 300 3300 3600 3300 3900
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 5700 300 300 3300 5700 3300 6000
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 7800 300 300 3300 7800 3300 8100
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 3300 9600 300 300 3300 9600 3300 9900
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6077 1509 300 300 6077 1509 6077 1809
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6077 3534 300 300 6077 3534 6077 3834
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6075 5700 300 300 6075 5700 6075 6000
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6077 7809 300 300 6077 7809 6077 8109
+1 3 0 1 0 7 100 0 -1 0.000 1 0.0000 6002 9534 300 300 6002 9534 6002 9834
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7500 1200 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9300 1200 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 9600 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 7800 3000 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9300 3900 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 9600 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 9600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7800 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 7500 3900 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 7800
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 7500 6600 7200
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 9300 6600 9000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5700 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 5400 3900 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 5400 6600 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5700 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 5400 1200 5100
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 5700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3600 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 3300 1200 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1200 1200 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1500 3000 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1200 3900 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 1500 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 1500
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3300 3900 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 3300 6600 3000
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 3600 3600 5700 3600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.00 60.00 120.00
+	 6300 1200 6600 1050
+2 1 0 2 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 900 9600 3000 7800
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/chmm5_nobold.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,187 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 225 1125 975 9975
+6 225 1125 975 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 1200 900 1200 900 1800 300 1800 300 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 3300 900 3300 900 3900 300 3900 300 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 5400 900 5400 900 6000 300 6000 300 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 7500 900 7500 900 8100 300 8100 300 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 300 9300 900 9300 900 9900 300 9900 300 9300
+-6
+-6
+6 2925 1125 3675 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 1200 3600 1200 3600 1800 3000 1800 3000 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 3300 3600 3300 3600 3900 3000 3900 3000 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 5400 3600 5400 3600 6000 3000 6000 3000 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 7500 3600 7500 3600 8100 3000 8100 3000 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 3000 9300 3600 9300 3600 9900 3000 9900 3000 9300
+-6
+6 5625 1125 6375 9975
+6 5625 1125 6375 9975
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 1200 6300 1200 6300 1800 5700 1800 5700 1200
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 3300 6300 3300 6300 3900 5700 3900 5700 3300
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 5400 6300 5400 6300 6000 5700 6000 5700 5400
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 7500 6300 7500 6300 8100 5700 8100 5700 7500
+2 2 0 4 0 0 100 0 -1 0.000 0 0 7 0 0 5
+	 5700 9300 6300 9300 6300 9900 5700 9900 5700 9300
+-6
+-6
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 7200 300 300 6900 7200 6900 7500
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 9000 300 300 6900 9000 6900 9300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 9000 300 300 4200 9000 4200 9300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 7200 300 300 4200 7200 4200 7500
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 5100 300 300 4200 5100 4200 5400
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 3000 300 300 4200 3000 4200 3300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4200 900 300 300 4200 900 4200 1200
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 900 300 300 1500 900 1500 1200
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 3000 300 300 1500 3000 1500 3300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 5100 300 300 1500 5100 1500 5400
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 7200 300 300 1500 7200 1500 7500
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 1500 9000 300 300 1500 9000 1500 9300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 5100 300 300 6900 5100 6900 5400
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 3000 300 300 6900 3000 6900 3300
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 6900 900 300 300 6900 900 6900 1200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7500 1200 7200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5400 1200 5100
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3300 1200 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1200 1200 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1200 3900 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1500 3000 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 1500 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 3600 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3300 3900 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 5700 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9600 3000 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9300 1200 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 7800 3000 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 900 9600 3000 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9600 5700 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9300 3900 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 9600 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 9600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7800 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 7500 3900 7200
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 7800
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 5700
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5700 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 3600 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1500 5700 3600
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 1500 5700 1500
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 1200 6600 1050
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 3300 6600 3000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 5400 6600 5100
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 9300 6600 9000
+2 1 0 3 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 6300 7500 6600 7200
+2 1 0 3 0 0 100 0 5 0.000 0 0 7 1 0 2
+	0 0 1.50 90.00 180.00
+	 3600 5400 3900 5100
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/fa.eps	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,356 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (fa.eps)
+%%CreationDate: (Tue Nov 16 19:51:50 2004)
+%%BoundingBox: 0 0 131 161
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image.  The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+  %
+  % Get a DirectClass packet.
+  %
+  % Parameters:
+  %   red.
+  %   green.
+  %   blue.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+  %
+  % Display a DirectClass image.
+  %
+  systemdict /colorimage known
+  {
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { DirectClassPacket } false 3 colorimage
+  }
+  {
+    %
+    % No colorimage operator;  convert to grayscale.
+    %
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { GrayDirectClassPacket } image
+  } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+  %
+  % Get a DirectClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   red
+  %   green
+  %   blue
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+  %
+  % Display a PseudoClass image.
+  %
+  % Parameters:
+  %   class: 0-PseudoClass or 1-Grayscale.
+  %
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  class 0 gt
+  {
+    currentfile buffer readline pop
+    token pop /depth exch def pop
+    /grays columns 8 add depth sub depth mul 8 idiv string def
+    columns rows depth
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { currentfile grays readhexstring pop } image
+  }
+  {
+    %
+    % Parameters:
+    %   colors: number of colors in the colormap.
+    %   colormap: red, green, blue color packets.
+    %
+    currentfile buffer readline pop
+    token pop /colors exch def pop
+    /colors colors 3 mul def
+    /colormap colors string def
+    currentfile colormap readhexstring pop pop
+    systemdict /colorimage known
+    {
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { PseudoClassPacket } false 3 colorimage
+    }
+    {
+      %
+      % No colorimage operator;  convert to grayscale.
+      %
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { GrayPseudoClassPacket } image
+    } ifelse
+  } ifelse
+} bind def
+
+/DisplayImage
+{
+  %
+  % Display a DirectClass or PseudoClass image.
+  %
+  % Parameters:
+  %   x & y translation.
+  %   x & y scale.
+  %   label pointsize.
+  %   image label.
+  %   image columns & rows.
+  %   class: 0-DirectClass or 1-PseudoClass.
+  %   compression: 0-none or 1-RunlengthEncoded.
+  %   hex color packets.
+  %
+  gsave
+  /buffer 512 string def
+  /byte 1 string def
+  /color_packet 3 string def
+  /pixels 768 string def
+
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  x y translate
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  currentfile buffer readline pop
+  token pop /pointsize exch def pop
+  /Times-Roman findfont pointsize scalefont setfont
+  x y scale
+  currentfile buffer readline pop
+  token pop /columns exch def
+  token pop /rows exch def pop
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  currentfile buffer readline pop
+  token pop /compression exch def pop
+  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+  grestore
+} bind def
+%%EndProlog
+%%Page:  1 1
+%%PageBoundingBox: 0 0 131 161
+userdict begin
+DisplayImage
+0 0
+131 161
+12.000000
+131 161
+1
+1
+1
+1
+ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffff
+ffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffff
+ffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffff
+ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff
+ffffffffffffffffe0fffffffffff001ffffffffffffffffffe0ffffffffff8ffe3fffff
+ffffffffffffe0fffffffffc7fffc7ffffffffffffffffe0fffffffffbfffffbffffffff
+ffffffffe0ffffffffe7fffffcffffffffffffffffe0ffffffffdfffffff7fffffffffff
+ffffe0ffffffffbfffffffbfffffffffffffffe0ffffffff7fffffffdfffffffffffffff
+e0fffffffeffffffffefffffffffffffffe0fffffffeffffffffefffffffffffffffe0ff
+fffffdfffffffff7ffffffffffffffe0fffffffdfe31fffff7ffffffffffffffe0ffffff
+fbff7bfffffbffffffffffffffe0fffffffbffb7fffffbffffffffffffffe0fffffffbff
+8ffffffbffffffffffffffe0fffffffbffcffffffbffffffffffffffe0fffffffbffa7ff
+fffbffffffffffffffe0fffffffbffb7fffffbffffffffffffffe0fffffffbff7bfffffb
+ffffffffffffffe0fffffffdfe31fffff7ffffffffffffffe0fffffffdfffffffff7ffff
+ffffffffffe0fffffffeffffffffefffffffffffffffe0fffffffeffffffffefffffffff
+ffffffe0ffffffff7fffffffdfffffffffffffffe0ffffffffbfffffffbfffffffffffff
+ffe0ffffffffdfffffff7fffffffffffffffe0ffffffffe7fffffcffffffffffffffffe0
+fffffffffbfffffbffffffffffffffffe0fffffffffc7fffc7ffffffffffffffffe0ffff
+ffffff8ffe3fffffffffffffffffe0fffffffffff001ffffffffffffffffffe0ffffffff
+ffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffff
+ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffbfff
+ffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffff
+ffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffff
+ffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffff
+ffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffff
+e0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ff
+ffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffff
+ffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffff
+ffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbf
+ffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffff
+ffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffff
+ffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffffbfffffffffffff
+ffffffe0ffffffffffffbfffffffffffffffffffe0fffffffffffeafffffffffffffffff
+ffe0fffffffffffeafffffffffffffffffffe0fffffffffffe9fffffffffffffffffffe0
+ffffffffffff1fffffffffffffffffffe0ffffffffffff1fffffffffffffffffffe0ffff
+ffffffff1fffffffffffffffffffe0ffffffffffff3fffffffffffffffffffe0ffffffff
+ffffbfffffffffffffffffffe0ffffffffffffbfffffffffffffffffffe0ffffffffffff
+ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff
+ffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffff
+ffffffffffffe0ffffffffffffffffffffffffffffffffe0fffffffffff001ffffffffff
+ffffffffe0ffffffffff8ffe3fffffffffffffffffe0fffffffffc6eeec7ffffffffffff
+ffffe0fffffffffbfffffbffffffffffffffffe0ffffffffe3bbfbb8ffffffffffffffff
+e0ffffffffdfffffff7fffffffffffffffe0ffffffffaeeeeeeebfffffffffffffffe0ff
+ffffff7fffffffdfffffffffffffffe0fffffffebfbfbfbfafffffffffffffffe0ffffff
+feffffffffefffffffffffffffe0fffffffceeeeeeeee7ffffffffffffffe0fffffffdfe
+38fffff7ffffffffffffffe0fffffffbfb79fbfbfbffffffffffffffe0fffffffbffbbff
+fffbffffffffffffffe0fffffffaeecaeeeeebffffffffffffffe0fffffffbffc7fffffb
+ffffffffffffffe0fffffffbbfafbfbfbbffffffffffffffe0fffffffbffeffffffbffff
+ffffffffffe0fffffffaeeeeeeeeebffffffffffffffe0fffffffdffc7fffff7ffffffff
+ffffffe0fffffffdfbbbfbbbf7ffffffffffffffe0fffffffeffffffffefffffffffffff
+ffe0fffffffeeeeeeeeeefffffffffffffffe0ffffffff7fffffffdfffffffffffffffe0
+ffffffffbfbfbfbfbfffffffffffffffe0ffffffffdfffffff7fffffffffffffffe0ffff
+ffffe6eeeeecffffffffffffffffe0fffffffffbfffffbffffffffffffffffe0ffffffff
+fc7bfbc7ffffffffffffffffe0ffffffffff8ffe3fffffffffffffffffe0fffffffffff0
+01ffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff
+ffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffff
+ffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff
+ffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffff
+ffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffff
+e0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ff
+ffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffff
+ffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffff
+ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffff
+ffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ff80ffffffffbfffcf
+ffdff01c5f7fffe0ffdeffffffffbfffeffffff5c99f7fffe0ffdffffbffff5fffefffff
+f5ebdebfffe0ffdde790cd3f5d3ce9989c6dc7febfffe0ffc1db6bb67eeedb6db6db6c17
+fddfffe0ffdde37bb6fe0edc6d33d9edf7fc1fffe0ffdfdb7bb6feeedb6d7cde5dfbdddf
+ffe0ffdfdb6bb6fdf6db6e76db5df99befffe0ff87e59ccc78e04c86f188d8fc31c7ffe0
+fffffffffffffffffeffffffffffffffe0fffffffffffffffffdffffffffffffffe0ffff
+fffffffffffff9ffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffff
+ffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffff
+ffffffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffff
+ffffffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffff
+ffffffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff
+ffffffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffff
+ffffe0ffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffff
+e0
+end
+%%PageTrailer
+%%Trailer
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/fa.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 900 1950 300 225 900 1950 1200 2175
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 900 825 300 225 900 825 1200 1050
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1125 900 1650
+4 0 -1 0 0 0 12 0.0000 4 135 135 825 900 X\001
+4 0 -1 0 0 0 12 0.0000 4 135 135 825 2025 Y\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/fa.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/fa_caption.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 900 1950 300 225 900 1950 1200 2175
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 900 825 300 225 900 825 1200 1050
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1125 900 1650
+4 0 -1 0 0 0 12 0.0000 4 135 135 750 2025 Y\001
+4 0 -1 0 0 0 12 0.0000 4 135 120 750 900 X\001
+4 0 -1 0 0 0 12 0.0000 4 180 1620 300 2625 Factor Analysis/PCA\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/fa_discrete.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 975 600 300 225 975 600 1275 825
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2100 600 300 225 2100 600 2400 825
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 825 525 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 825 1425 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2025 825 600 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2025 825 1425 1425
+2 2 0 1 -1 0 0 0 2 0.000 0 0 7 0 0 5
+	 300 1425 750 1425 750 1875 300 1875 300 1425
+2 2 0 1 -1 0 0 0 2 0.000 0 0 7 0 0 5
+	 1275 1425 1725 1425 1725 1875 1275 1875 1275 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 825 3000 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2025 825 3000 1425
+2 2 0 1 0 0 100 0 2 3.000 0 0 7 0 0 5
+	 2775 1425 3225 1425 3225 1875 2775 1875 2775 1425
+4 0 -1 0 0 0 24 0.0000 4 30 270 1350 750 ...\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1350 1725 R2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 825 675 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1950 675 Xn\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 375 1725 R1\001
+4 0 -1 0 0 0 12 0.0000 4 180 1920 600 2325 Discrete Factor Analysis\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 2100 1650 ...\001
+4 0 0 100 0 -1 12 0.0000 4 135 210 2850 1725 Rn\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/fa_discrete.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/fa_discrete_single.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 1 0 1 0 7 100 0 -1 0.000 1 0.0000 825 375 300 225 825 375 1125 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 600 825 1275
+2 2 0 1 0 0 100 0 2 0.000 0 0 7 0 0 5
+	 600 1275 975 1275 975 1725 600 1725 600 1275
+4 0 -1 0 0 0 12 0.0000 4 135 120 750 1575 R\001
+4 0 -1 0 0 0 12 0.0000 4 135 135 750 450 X\001
+4 0 0 100 0 0 12 0.0000 4 180 1785 300 2025 discrete factor analysis\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/fa_regular.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 225 300 3450 3150
+1 3 0 1 -1 7 0 0 -1 0.000 1 0.0000 999 1082 335 335 999 1082 1149 1382
+1 3 0 1 -1 7 0 0 -1 0.000 1 0.0000 2124 1082 335 335 2124 1082 2274 1382
+1 3 0 1 -1 0 0 0 2 0.000 1 0.0000 624 2807 335 335 624 2807 774 3107
+1 3 0 1 -1 0 0 0 2 0.000 1 0.0000 1674 2807 335 335 1674 2807 1824 3107
+1 3 0 1 -1 0 0 0 2 0.000 1 0.0000 2874 2807 335 335 2874 2807 3024 3107
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1425 675 2475
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 975 1425 1575 2400
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 975 1425 2775 2475
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1425 750 2475
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1425 1650 2325
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1425 2775 2400
+4 0 -1 0 0 0 24 0.0000 4 330 3225 225 600 regular factor analysis\001
+-6
+4 0 -1 0 0 0 12 0.0000 4 135 210 825 1200 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1950 1200 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 525 2925 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1500 2850 Y2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2700 2850 Y3\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/fa_regular.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/fa_scalar.eps	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,414 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (fa_scalar.eps)
+%%CreationDate: (Tue Nov 16 19:52:00 2004)
+%%BoundingBox: 0 0 246 156
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image.  The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+  %
+  % Get a DirectClass packet.
+  %
+  % Parameters:
+  %   red.
+  %   green.
+  %   blue.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+  %
+  % Display a DirectClass image.
+  %
+  systemdict /colorimage known
+  {
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { DirectClassPacket } false 3 colorimage
+  }
+  {
+    %
+    % No colorimage operator;  convert to grayscale.
+    %
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { GrayDirectClassPacket } image
+  } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+  %
+  % Get a DirectClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   red
+  %   green
+  %   blue
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+  %
+  % Display a PseudoClass image.
+  %
+  % Parameters:
+  %   class: 0-PseudoClass or 1-Grayscale.
+  %
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  class 0 gt
+  {
+    currentfile buffer readline pop
+    token pop /depth exch def pop
+    /grays columns 8 add depth sub depth mul 8 idiv string def
+    columns rows depth
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { currentfile grays readhexstring pop } image
+  }
+  {
+    %
+    % Parameters:
+    %   colors: number of colors in the colormap.
+    %   colormap: red, green, blue color packets.
+    %
+    currentfile buffer readline pop
+    token pop /colors exch def pop
+    /colors colors 3 mul def
+    /colormap colors string def
+    currentfile colormap readhexstring pop pop
+    systemdict /colorimage known
+    {
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { PseudoClassPacket } false 3 colorimage
+    }
+    {
+      %
+      % No colorimage operator;  convert to grayscale.
+      %
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { GrayPseudoClassPacket } image
+    } ifelse
+  } ifelse
+} bind def
+
+/DisplayImage
+{
+  %
+  % Display a DirectClass or PseudoClass image.
+  %
+  % Parameters:
+  %   x & y translation.
+  %   x & y scale.
+  %   label pointsize.
+  %   image label.
+  %   image columns & rows.
+  %   class: 0-DirectClass or 1-PseudoClass.
+  %   compression: 0-none or 1-RunlengthEncoded.
+  %   hex color packets.
+  %
+  gsave
+  /buffer 512 string def
+  /byte 1 string def
+  /color_packet 3 string def
+  /pixels 768 string def
+
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  x y translate
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  currentfile buffer readline pop
+  token pop /pointsize exch def pop
+  /Times-Roman findfont pointsize scalefont setfont
+  x y scale
+  currentfile buffer readline pop
+  token pop /columns exch def
+  token pop /rows exch def pop
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  currentfile buffer readline pop
+  token pop /compression exch def pop
+  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+  grestore
+} bind def
+%%EndProlog
+%%Page:  1 1
+%%PageBoundingBox: 0 0 246 156
+userdict begin
+DisplayImage
+0 0
+246 156
+12.000000
+246 156
+1
+1
+1
+1
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffff800fff
+fffffffffffffffffff800fffffffffffffffffffffcfffffffffffc7ff1ffffffffffff
+ffffffffc7ff1ffffffffffffffffffffcffffffffffe3fffe3ffffffffffffffffffe3f
+ffe3fffffffffffffffffffcffffffffffdfffffdffffffffffffffffffdfffffdffffff
+fffffffffffffcffffffffff3fffffe7fffffffffffffffff3fffffe7fffffffffffffff
+fffcfffffffffefffffffbffffffffffffffffefffffffbffffffffffffffffffcffffff
+fffdfffffffdffffffffffffffffdfffffffdffffffffffffffffffcfffffffffbffffff
+feffffffffffffffffbfffffffeffffffffffffffffffcfffffffff7ffffffff7fffffff
+ffffffff7ffffffff7fffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7f
+fffffff7fffffffffffffffffcffffffffefffffffffbffffffffffffffefffffffffbff
+fffffffffffffffcffffffffefff8c6fffbffffffffffffffeff18fffffbffffffffffff
+fffffcffffffffdfffdecfffdffffffffffffffdffbdfffffdfffffffffffffffffcffff
+ffffdfffedafffdffffffffffffffdffdbfffffdfffffffffffffffffcffffffffdfffe3
+efffdffffffffffffffdffc74ffffdfffffffffffffffffcffffffffdffff3efffdfffff
+fffffffffdffe7b7fffdfffffffffffffffffcffffffffdfffe9efffdffffffffffffffd
+ffd3b7fffdfffffffffffffffffcffffffffdfffedefffdffffffffffffffdffdbb7fffd
+fffffffffffffffffcffffffffdfffdeefffdffffffffffffffdffbdb7fffdffffffffff
+fffffffcffffffffefff8c47ffbffffffffffffffeff1813fffbfffffffffffffffffcff
+ffffffefffffffffbffffffffffffffefffffffffbfffffffffffffffffcfffffffff7ff
+ffffff7fffffffffffffff7ffffffff7fffffffffffffffffcfffffffff7ffffffff7fff
+ffffffffffff7ffffffff7fffffffffffffffffcfffffffffbfffffffeffffff3cf3ffff
+ffbfffffffeffffffffffffffffffcfffffffffdfffffffdffffff3cf3ffffffdfffffff
+dffffffffffffffffffcfffffffffefffffff9ffffffffffffffffefffffffbfffffffff
+fffffffffcffffffffff3fffffe67ffffffffffffffff3fffffe7ffffffffffffffffffc
+ffffffffffdfffffdf8ffffffffffffffffdfffffdfffffffffffffffffffcffffffffff
+e3fffe3ff3fffffffffffffffe3fffe3fffffffffffffffffffcfffffffffffc7ff1fffc
+7fffffffffffffffc7ff1ffffffffffffffffffffcfffffffffff7800f7fff9fffffffff
+fffffff000f7fffffffffffffffffffcfffffffffff7ffff7fffe3ffffffffffffff87ff
+fbfffffffffffffffffffcffffffffffefffffbffffcfffffffffffffe5ffffdffffffff
+fffffffffffcffffffffffefffffbfffff1ffffffffffff13ffffeffffffffffffffffff
+fcffffffffffdfffffdfffffe7ffffffffff8effffff7ffffffffffffffffffcffffffff
+ffdfffffdffffff8fffffffffc7dffffffbffffffffffffffffffcffffffffffdfffffef
+ffffff3ffffffff3f3ffffffdffffffffffffffffffcffffffffffbfffffefffffffc7ff
+ffff8fefffffffeffffffffffffffffffcffffffffffbffffff7fffffff9fffffc7f9fff
+fffff7fffffffffffffffffcffffffffffbffffff7fffffffe3fffe3ff7ffffffffbffff
+fffffffffffffcffffffffff7ffffffbffffffffcfff9ffcfffffffffdffffffffffffff
+fffcffffffffff7ffffffbfffffffff1fc7ffbfffffffffefffffffffffffffffcffffff
+fffefffffffdfffffffffe63fff7ffffffffff7ffffffffffffffffcfffffffffeffffff
+fdffffffffff0fffcfffffffffffbffffffffffffffffcfffffffffefffffffeffffffff
+fcf3ffbfffffffffffdffffffffffffffffcfffffffffdfffffffeffffffffe3fc7e7fff
+ffffffffeffffffffffffffffcfffffffffdffffffff7fffffff1fff9dfffffffffffff7
+fffffffffffffffcfffffffffdffffffff7ffffff8ffffe3fffffffffffffbffffffffff
+fffffcfffffffffbffffffffbfffffe7ffffecfffffffffffffdfffffffffffffffcffff
+fffffbffffffffbfffff1fffffdf1ffffffffffffefffffffffffffffcfffffffff7ffff
+ffffdffff8ffffff3fe7ffffffffffff7ffffffffffffffcfffffffff7ffffffffdfffc7
+fffffefff8ffffffffffffbffffffffffffffcfffffffff7ffffffffefff3ffffff9ffff
+3fffffffffffdffffffffffffffcffffffffefffffffffeff8fffffff7ffffc7ffffffff
+ffeffffffffffffffcffffffffeffffffffff7c7ffffffcffffff9fffffffffff7ffffff
+fffffffcffffffffeffffffffff63fffffffbffffffe3ffffffffffbfffffffffffffcff
+ffffffdffffffffff9ffffffff7fffffffcffffffffffdfffffffffffffcffffffffdfff
+ffffffc3fffffffcfffffffff1fffffffffefffffffffffffcffffffffbffffffffe3dff
+ffffdbfffffffffe7fffffffff7ffffffffffffcffffffffbffffffff1fdffffffa7ffff
+ffffff8fffffffffbffffffffffffcfffffffebfffffffcffebfffff5ffffffffffff3ff
+ffffffdffffffffffffcfffffffe7ffffffe3ffebffffe27fffffffffffc7fffffffefff
+fffffffffcfffffffe5ffffff1fffd3ffffe9fffffffffffff9ffffffff6fffffffffffc
+fffffffe3fffff8ffffe5ffffc7fffffffffffffe3fffffffb7ffffffffffcfffffffcbf
+fffe7fffff1ffff9fffffffffffffffcfffffffd7ffffffffffcfffffffc7fff71ffffff
+1fffffffffffffffffffff1ffffff6bffffffffffcfffffffcfffc8fffffff9fffffffff
+ffffffffffffe7fffff93ffffffffffcfffffffcfff07fffffffcfffffffffffffffffff
+fff8fffffe1ffffffffffcfffffffdffc3ffffffffefffffffffffffffffffffff3fffff
+9ffffffffffcffffffffff803fffffffffffffffffffffffffffffffc7ffffefffffffff
+fcffffff001fffffffffffff800ffffffffffffffffffff9dffff800fffffffcfffff8ff
+e3fffffffffffc7ff1fffffffffffffffffffe27ffc7ff1ffffffcffffc6eeec7fffffff
+ffe377763fffffffffffffffffffcbfe377763fffffcffffbfffffbfffffffffdfffffdf
+ffffffffffffffffff00fdfffffdfffffcfffe3bbfbb8fffffffff1ddfddc7ffffffffff
+fffffffff871ddfddc7ffffcfffdfffffff7fffffffefffffffbffffffffffffffffffff
+efffffffbffffcfffaeeeeeeebfffffffd77777775ffffffffffffffffffffd77777775f
+fffcfff7fffffffdfffffffbfffffffeffffffffffffffffffffbfffffffeffffcffebfb
+fbfbfafffffff5fdfdfdfd7fffffffffffffffffff5fdfdfdfd7fffcffeffffffffeffff
+fff7ffffffff7fffffffffffffffffff7ffffffff7fffcffceeeeeeeee7fffffe7777777
+773ffffffffffffffffffe7777777773fffcffdfe38dffff7fffffeff1c47fffbfffffff
+fffffffffffefe38fffffbfffcffbfb799bfbfbfffffdfdbcb9fdfdfffffffffffffffff
+fdfd7dfdfdfdfffcffbffbb5ffffbfffffdffddfbfffdfffff3cf3fffffffffdffbbffff
+fdfffcffaeecaceeeebfffffd7765737775fffff3cf3fffffffffd7753417775fffcffbf
+fc7dffffbfffffdffe3f7fffdffffffffffffffffffdffc7b6fffdfffcffbbfaf9fbfbbf
+ffffddfd7cfdfddffffffffffffffffffddfcf96dfddfffcffbffefdffffbfffffdfff7d
+ffffdffffffffffffffffffdffefb6fffdfffcffaeeeeceeeebfffffd7777337775fffff
+fffffffffffffd7767367775fffcffdffc78ffff7fffffeffe383fffbfffffffffffffff
+fffeffc7127ffbfffcffdfbbbfbbbf7fffffefdddfdddfbffffffffffffffffffefdddfd
+ddfbfffcffeffffffffefffffff7ffffffff7fffffffffffffffffff7ffffffff7fffcff
+eeeeeeeeeefffffff7777777777fffffffffffffffffff7777777777fffcfff7fffffffd
+fffffffbfffffffeffffffffffffffffffffbfffffffeffffcfffbfbfbfbfbfffffffdfd
+fdfdfdffffffffffffffffffffdfdfdfdfdffffcfffdfffffff7fffffffefffffffbffff
+ffffffffffffffffefffffffbffffcfffe6eeeeecfffffffff37777767ffffffffffffff
+fffffff37777767ffffcffffbfffffbfffffffffdfffffdffffffffffffffffffffffdff
+fffdfffffcffffc7bfbc7fffffffffe3dfde3ffffffffffffffffffffffe3dfde3fffffc
+fffff8ffe3fffffffffffc7ff1ffffffffffffffffffffffffc7ff1ffffffcffffff001f
+ffffffffffff800ffffffffffffffffffffffffff800fffffffcffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffff
+fffffffffffff80fffffffffffe7ffeffffffffffffffffffffffffffcffffffffffffff
+fffdeffffffffffff7fffffffffffffffffffffffffffffcfffffffffffffffffdffffbf
+fffffff7fffffffffffffffffffffffffffffcfffffffffffffffffdde790cd3e69e74cc
+4e3ffffffffffffffffffffffffcfffffffffffffffffc1db6bb67db6db6db6dbfffffff
+fffffffffffffffffcfffffffffffffffffdde37bb6fe36e3699ecffffffffffffffffff
+fffffffcfffffffffffffffffdfdb7bb6fdb6db6be6f3ffffffffffffffffffffffffcff
+fffffffffffffffdfdb6bb6fdb6db73b6dbffffffffffffffffffffffffcffffffffffff
+fffff87e59ccc7e4264378c47ffffffffffffffffffffffffcffffffffffffffffffffff
+ffffffffff7ffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffe
+fffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffff
+fffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffc
+end
+%%PageTrailer
+%%Trailer
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/fa_scalar.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 300 375 3675 1950
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 975 600 300 225 975 600 1275 825
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2475 600 300 225 2475 600 2775 825
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 1650 300 225 600 1650 900 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3315 1654 300 225 3315 1654 3615 1879
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 600 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 750 3075 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2400 825 750 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2625 825 3225 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 825 1425 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2400 825 1650 1350
+4 0 -1 0 0 0 12 0.0000 4 135 225 900 675 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2325 675 Xn\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 450 1725 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 270 3150 1725 Ym\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 1575 750 ...\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1425 1725 Y2\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 2175 1650 ...\001
+-6
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/fa_scalar.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/fa_scalar_caption.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 300 375 3675 1950
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 975 600 300 225 975 600 1275 825
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2475 600 300 225 2475 600 2775 825
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 1650 300 225 600 1650 900 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3315 1654 300 225 3315 1654 3615 1879
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 600 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1200 750 3075 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2400 825 750 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2625 825 3225 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 825 1425 1425
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2400 825 1650 1350
+4 0 -1 0 0 0 12 0.0000 4 135 210 900 675 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 2325 675 Xn\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 450 1725 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 270 3150 1725 Ym\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 1575 750 ...\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1425 1725 Y2\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 2175 1650 ...\001
+-6
+4 0 -1 0 0 0 12 0.0000 4 180 1170 1200 2325 Factor analysis\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/factorial_hmm3.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 2587.500 3637.500 1500 2775 1200 3675 1500 4500
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 2772.051 3261.376 1500 1875 900 3450 1425 4575
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 5962.500 3637.500 4875 2775 4575 3675 4875 4500
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 4162.500 3637.500 3075 2775 2775 3675 3075 4500
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 4347.051 3261.376 3075 1875 2475 3450 3000 4575
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 0 100 0 -1 0.000 0 1 1 0 6147.051 3261.376 4875 1875 4275 3450 4800 4575
+	0 0 1.00 60.00 120.00
+6 1425 4350 2100 4875
+1 1 0 1 0 0 100 0 5 0.000 1 0.0000 1749 4596 300 225 1749 4596 2049 4821
+4 0 0 100 0 0 20 0.0000 4 195 345 1575 4725 Y1\001
+-6
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1770 3645 300 225 1770 3645 2070 3870
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3420 3645 300 225 3420 3645 3720 3870
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 5220 3645 300 225 5220 3645 5520 3870
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1770 2745 300 225 1770 2745 2070 2970
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3420 2745 300 225 3420 2745 3720 2970
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 5220 2745 300 225 5220 2745 5520 2970
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 5220 1845 300 225 5220 1845 5520 2070
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3420 1845 300 225 3420 1845 3720 2070
+1 1 0 1 0 7 100 0 -1 0.000 1 0.0000 1770 1845 300 225 1770 1845 2070 2070
+1 1 0 1 0 0 100 0 5 0.000 1 0.0000 3399 4596 300 225 3399 4596 3699 4821
+1 1 0 1 0 0 100 0 5 0.000 1 0.0000 5199 4521 300 225 5199 4521 5499 4746
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 1
+	 4200 4200
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 3600 3150 3600
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3750 3600 4950 3600
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 1
+	 4200 3300
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 2700 3150 2700
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3750 2700 4950 2700
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 1
+	 4200 2400
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 1800 3150 1800
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3750 1800 4950 1800
+2 1 0 1 0 0 100 0 5 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1725 3900 1725 4350
+2 1 0 1 0 0 100 0 5 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5175 3825 5175 4275
+2 1 0 1 0 0 100 0 5 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 3900 3450 4350
+4 0 0 100 0 0 20 0.0000 4 195 345 1575 1950 A1\001
+4 0 0 100 0 0 20 0.0000 4 195 330 1575 2850 B1\001
+4 0 0 100 0 0 20 0.0000 4 195 330 1575 3750 C1\001
+4 0 0 100 0 0 20 0.0000 4 195 345 3225 1950 A2\001
+4 0 0 100 0 0 20 0.0000 4 195 330 3225 2850 B2\001
+4 0 0 100 0 0 20 0.0000 4 195 330 3225 3750 C2\001
+4 0 0 100 0 0 20 0.0000 4 195 345 5025 1950 A3\001
+4 0 0 100 0 0 20 0.0000 4 195 330 5025 2850 B3\001
+4 0 0 100 0 0 20 0.0000 4 195 330 5025 3750 C3\001
+4 0 0 100 0 0 30 0.0000 4 30 525 6375 3000 . . .\001
+4 0 0 100 0 0 20 0.0000 4 195 345 3225 4725 Y2\001
+4 0 0 100 0 0 20 0.0000 4 195 345 5025 4650 Y3\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/filter.eps	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9861 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (filter.eps)
+%%CreationDate: (Tue Nov 16 20:04:33 2004)
+%%BoundingBox: 0 0 657 525
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image.  The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+  %
+  % Get a DirectClass packet.
+  %
+  % Parameters:
+  %   red.
+  %   green.
+  %   blue.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+  %
+  % Display a DirectClass image.
+  %
+  systemdict /colorimage known
+  {
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { DirectClassPacket } false 3 colorimage
+  }
+  {
+    %
+    % No colorimage operator;  convert to grayscale.
+    %
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { GrayDirectClassPacket } image
+  } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+  %
+  % Get a DirectClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   red
+  %   green
+  %   blue
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+  %
+  % Display a PseudoClass image.
+  %
+  % Parameters:
+  %   class: 0-PseudoClass or 1-Grayscale.
+  %
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  class 0 gt
+  {
+    currentfile buffer readline pop
+    token pop /depth exch def pop
+    /grays columns 8 add depth sub depth mul 8 idiv string def
+    columns rows depth
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { currentfile grays readhexstring pop } image
+  }
+  {
+    %
+    % Parameters:
+    %   colors: number of colors in the colormap.
+    %   colormap: red, green, blue color packets.
+    %
+    currentfile buffer readline pop
+    token pop /colors exch def pop
+    /colors colors 3 mul def
+    /colormap colors string def
+    currentfile colormap readhexstring pop pop
+    systemdict /colorimage known
+    {
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { PseudoClassPacket } false 3 colorimage
+    }
+    {
+      %
+      % No colorimage operator;  convert to grayscale.
+      %
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { GrayPseudoClassPacket } image
+    } ifelse
+  } ifelse
+} bind def
+
+/DisplayImage
+{
+  %
+  % Display a DirectClass or PseudoClass image.
+  %
+  % Parameters:
+  %   x & y translation.
+  %   x & y scale.
+  %   label pointsize.
+  %   image label.
+  %   image columns & rows.
+  %   class: 0-DirectClass or 1-PseudoClass.
+  %   compression: 0-none or 1-RunlengthEncoded.
+  %   hex color packets.
+  %
+  gsave
+  /buffer 512 string def
+  /byte 1 string def
+  /color_packet 3 string def
+  /pixels 768 string def
+
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  x y translate
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  currentfile buffer readline pop
+  token pop /pointsize exch def pop
+  /Times-Roman findfont pointsize scalefont setfont
+  x y scale
+  currentfile buffer readline pop
+  token pop /columns exch def
+  token pop /rows exch def pop
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  currentfile buffer readline pop
+  token pop /compression exch def pop
+  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+  grestore
+} bind def
+%%EndProlog
+%%Page:  1 1
+%%PageBoundingBox: 0 0 657 525
+userdict begin
+DisplayImage
+0 0
+657 525
+12.000000
+657 525
+1
+1
+1
+8
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff000000000000000000ffffffffffffffff0000ff00000000
+00000000ffffff0000000000ffffffffffffff0000ffffffffffffffff00ffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffff00000000ffffffff
+ff0000ffffffff00000000ffffffffffff0000ffffffffffffffff0000ffffffffffffff
+ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff
+ff00000000ffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffff000000ffffffff00ffffffffffff00000000ffffffffff00ffffffffffffffffff
+00ffffffffffff00ffffffffff00ffffffffff0000ffffffffffffffffffffffffffffff
+ffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffff00ffffffffff00
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffff0000ffffff00ffffffffffffffff000000ffffffff0000
+ffffffffffffffff00ffffffffffff0000ffffffffff0000ffffffff0000ffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffff0000ffffffffffffffffffffffffff
+ff0000ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffffffffff
+ff000000ffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffff0000ffff
+ff0000ffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffff
+ffffffffffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff00
+00ffffffffffffffffffff0000ffff00ffffffffffffffffff0000ffffffff0000000000
+00ffffffff0000ffffff0000ffffff0000000000ffff000000ffffff0000ffffffffffff
+ffffff0000ffffffffffffff0000ffffff000000000000ffffffff0000ffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffff000000ff0000ffffffffffffffffffffff00000000ffffffffffffffffff0000ff
+ffffffffffff0000ffffffffffff000000ffff0000ffffffff0000ffffffffff00ffffff
+0000ffffffffffffffffffff0000ffffffffffffff000000ffffffff0000ffffffffffff
+000000ffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffff000000ffff0000ffffffffffffffffffffffff000000ffffff
+ffffffffffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ffffffff0000
+ffffffffff00ffffff0000ffffffffffffffffffff0000ffffffffffffff0000ffffffff
+ff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00000000000000ffffffff0000ffffffffffffffffff
+ffffff00000000ffffffffffffffff0000ffffffffffffff0000ffffffffffffff0000ff
+ff0000ffffffff000000ffffff0000ffffff0000ffffffffffffffffffff0000ffffffff
+ffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000
+ffffffffffffffffffffff0000000000ffffffffffffffff0000ffffffffffffff0000ff
+ffffffffffff0000ffff0000ffffffffff0000ffffff00ffffffff0000ffffffffffffff
+ffffff0000ffffffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffffffffffff0000ffffffffffffffffffffff00ffff000000ffffffffffffff0000ff
+ffffffffffff0000ffffffffffffff0000ffff0000ffffffffff000000ff0000ffffffff
+0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff
+ff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffff0000ffffffffffffffffffff00ffffffff000000
+ffffffffffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ffffffffffff
+0000ff0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff
+ff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00000000ff0000ffffff000000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffff
+00ffffffffff000000ffffffffffff0000ffffffffffffff0000ffffffffffffff0000ff
+ff0000ffffffffffff00000000ffffffffff0000ffffffffffffffffffff0000ffffffff
+ffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00ffff0000ff0000ffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000
+00ffffffffffffff0000ffffffffffff000000ffffffffff000000ffffffffffff0000ff
+ffffffffffff0000ffff0000ffffffffffffff000000ffffffffff000000ffffffffffff
+ffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffff0000ffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffffffffffffff0000ffffffffffff0000ffffffffffffff00000000ffffffffff0000
+ffffffffffff0000ff00ffffffff0000ffffff0000ffffffffffffff0000ffffffffffff
+ff0000ffffffffffffffffff0000ffffffffffffff000000ffffffff0000ff00ffffffff
+0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffff0000ffffffff00ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000ffffffffffffffff0000ffffffff000000000000ffffffff000000
+00000000ffffff0000ffffffffffffff000000ffffffff0000ffffff0000ffffffffffff
+ffff00ffffffffffffff0000ffffffffffffff00000000000000ffffffff0000ffffffff
+ffff000000ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffffff00ffffffff0000ffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffff00ffffffff0000ffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00000000000000ff000000ffffffff0000ffff0000000000ff
+ffff000000000000ffff0000ff000000ff000000ffffff00000000000000ffffffffff00
+000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff00ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+ffffffff00ffffffffffffffffffffffffffff00ffffffffffffffffffff00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffff00
+00ffffff0000ffffffff0000ffffff0000ffff000000ffff00ffff0000ffffffff0000ff
+ffff0000ffffff00ffffff000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffffffffffffffff00ffffffffffffffffffffffffffff0000ffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffff0000ffffffff0000ffffff0000ffffffff0000000000000000ff0000ffffffffffff
+0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffff000000
+00ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffff0000ffffffff0000ffffff0000ffffff0000ffffffffffffff
+ff0000ffffffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffff0000ffffffff0000ffffff0000ffffff
+0000ffffffffffffffff0000ffffffffffff0000ffffffff0000ffffff0000ffffff0000
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffff00
+00ffffff0000ffffff000000ffffffffffffff0000ffffffffffff0000ffffffff0000ff
+ffff0000ffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffff0000ffffffff0000ffffff0000ffffffff0000ffffffffff00ff0000ffffffffffff
+0000ffffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffff0000ffffffff0000ffffff0000ffffffff00000000000000ff
+ff0000ffffffffffff0000ffffffff0000ffffff0000ffffff00000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000000000ffff00000000ffff0000000000ffff000000ff
+ffff0000000000ffff0000000000ffffff00000000ffff00000000ff00000000ffff0000
+0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffff0000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000000000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff00ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000
+ffffffffff00000000ffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00000000ffffffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000000000000000ffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffff00ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff000000ffffffffffffffff0000ffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffff00000000ffffffffff0000
+ffffffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffffffffff
+ffffffffffffffffffffffffffff00ffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffffffffffffff
+ffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff000000ffffffffffffffff0000ffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff
+000000ffffffff00ffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+0000ffffffffffffffffffffffffffffff00ffffffffffff00ffffffffffffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff0000
+ffffffffffffffffffffffffffffff00ffffffffffff00ffffffffffffff00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffff00ffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffffffff0000ffffff00ffffffffffffffffffffffffffffffffffffff00
+ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff0000ff
+ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff00ffff
+ffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff0000ffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ff
+ffffffffff0000ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffff0000
+ffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffff
+ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffffffff0000ffffffffff0000ffffff000000000000ffffffff
+0000000000ffffffff0000ff000000ffff0000ff00000000ffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff0000000000ffffffffff0000ff000000ffffffff0000
+0000ffffffffffff0000ffff00000000ffff00000000ffffffffff0000000000ffffff00
+0000000000ff00000000ffffffffffffffffffff0000ffffffffffff0000ffff0000ffff
+ffff000000000000ff00000000ffffff0000ffffffffffffffffff0000ffffffffffffff
+0000ffffff000000000000ffffffffff0000ffffffffffffffffff0000ffffffffffffff
+ff0000000000ffff000000ffffff0000ffffffffffffffffff0000ffffffffffffff0000
+ffffff000000000000ffffffffff0000ffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffffffffff00ffffffffff000000ffffffff
+ff0000ffffffffff0000ffffff0000ff0000000000000000ffff0000000000000000ffff
+ff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffff000000ffff000000ffff0000000000
+000000ffffff0000ffff0000000000ff0000000000ffff0000000000ffff0000ffff0000
+00ffff000000ffffffff000000ffff0000ffffffffffffffffffffffff0000ffffffffff
+000000ff0000ffffffffffffff000000ffff0000ffffffff0000ffffffffffffffffffff
+0000ffffffffffffff000000ffffffff0000ffffffffffffff000000ffffffffffffffff
+0000ffffffffffffffffff0000ffffffffff00ffffff0000ffffffffffffffffffff0000
+ffffffffffffff000000ffffffff0000ffffffffffffff000000ffffffffff000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff0000ffffff
+ffffff0000ffffffffff0000ffffffff0000ffffffff000000ffff0000ffffffffffff00
+0000ffff00000000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff
+0000ffffffff0000ffffffffffff0000ffffff000000ffffffff000000ffffffff000000
+ffffff0000ffff000000ffffff0000ffffffffff0000ff0000ffffffffffffffffffffff
+ffff0000ffffffff000000ffff0000ffffffffffffffff0000ff0000ffffffffff0000ff
+ffffffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffffff00
+00ffffffffffffffff0000ffffffffffffffffff0000ffffffffff00ffffff0000ffffff
+ffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffffff0000ff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+00ffffff00ffffffffffffff0000ffffffffff0000ffffffff000000000000000000ffff
+0000ffffffffffff0000ffffffff000000ffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00ffffffff0000ffffffff0000ffffffffffff0000ffffffff0000ffffffff00
+00ffffffffff0000ffffffff0000ffffff00ffffffff0000ffffffffffff000000ffffff
+ffffffffffffffffffffff00000000000000ffffffff0000ffffffffffffffffff000000
+ffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000
+ffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffff000000ffffff00
+00ffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffff
+ffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff000000ff0000ffffffffffffff0000ffffffffff0000ffffffff0000
+ffffffffffffffffff0000ffffffffffff0000ffffffffff0000ffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00000000ffffffff0000ffffffffffff0000ffff
+ffff0000ffffffff0000ffffffffff0000ffffffff0000ffffffffffff00000000ffffff
+ffffff000000ffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffff
+ffffffffffff000000ffffffffffff0000ffffffffffffffffffff0000ffffffffffffff
+ffffffffffffff0000ffffffffffffffff0000ffffffffffffffff0000ffffffffffffff
+ffffff0000ffffff00ffffffff0000ffffffffffffffffffff0000ffffffffffffffffff
+ffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff000000ff0000ffffffffffffff0000ffffffff
+ff0000ffffff000000ffffffffffffffffff0000ffffffffffff0000ffffffffff0000ff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000ffffffff0000ff
+ffffffffff0000ffffffff0000ffffffff0000ffffffffff0000ffffffff0000ffffffff
+0000ffff0000ffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffff
+ffffffff0000ffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffff
+0000ffffffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffff
+0000ffffffffffffffffffff000000ff0000ffffffff0000ffffffffffffffffffff0000
+ffffffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffffff0000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffff
+ffffff0000ffffffffff0000ffffff000000ffffffffffffffffff0000ffffffffffff00
+00ffffffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+0000ffffffff0000ffffffffffffff0000ffff0000ffffffffff0000ffffffffff0000ff
+ffffff0000ffffff0000ffffff0000ffffffffffff00000000ffffffffffffffffffffff
+ffff0000ffffffffffffffffff0000ffffffffffffffffff00000000ffffffffff0000ff
+ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffffff00
+00ffffffffffffffff0000ffffffffffffffffffffff0000ff0000ffffffff0000ffffff
+ffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffffff0000ff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00000000ffffffffffffffff0000ffffffffff0000ffffffff0000ffffffffffff00ffff
+0000ffffffffffff0000ffffffffff0000ffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffff0000ffffffff0000ffffffffffffff0000000000ffffffffffff00
+00ffffffffff0000ffffffff0000ffff0000ffffffff0000ffffffffff0000ff000000ff
+ffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffff0000ff00
+0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000
+ffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffff00000000ff
+ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffff
+ffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffff0000ffffffffff0000ffffffff0000
+00ffffffff0000ffff0000ffffffffffff0000ffffffff0000ffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffff0000ffffffff0000ffffffffffff0000ffff
+ffffffffffffffff0000ffffffffff0000ffffffff0000ffff0000ffffffff0000ffffff
+ff0000ffffff0000ffffffffffffffffffffffff0000ffffffffffffffffff000000ffff
+ffffffff0000ffffff0000ffffffff000000ffffffffffffffffff0000ffffffffffffff
+0000ffffffffff0000ffffffffffffffff0000ffffffffffffffff0000ffffffffffffff
+ffffffffff000000ffffffffff000000ffffffffffffffffff0000ffffffffffffff0000
+ffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffff
+ff0000ff00ffffff00000000000000ffffff0000ffffffffffff0000ffffffff00ffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffff00000000ffffffff0000ff
+ffffffffff00000000000000ffffffffff0000ffffffffff0000ffffffff0000ffff0000
+ffff00000000ffffffff00ffffffff000000ffffffffffffffffffffff0000ffffffffff
+ffffffffff0000ffffffffffff00ffffffff000000ffffffff0000ffffffffffffffffff
+0000ffffffffffffff000000ffffffff0000ff00ffffffffff0000ffffffffffffffffff
+0000ffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffffffffff0000
+ffffffffffffff000000ffffffff0000ff00ffffffffff0000ffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffff0000000000ffffffff000000ffffffff0000000000ffff000000000000ffffffffff
+0000000000ffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff
+00000000000000000000ffffffff0000000000000000ffff000000000000ff0000000000
+00ff0000000000ff00000000ff00000000ff000000ffff000000000000ffffffffffffff
+000000000000ffffffffffffffff0000ffffffffff000000ffff000000000000ffff0000
+ffffffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffffff0000
+ffffffffffffffffff0000ffffffffffffffffffffffffff00ffffffffffffff0000ffff
+ffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffffff0000ffff
+ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ff000000000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff000000ffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffff0000ffffffffffffffffffffffffffffff00ffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff00ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffffff
+0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff000000000000ff00000000ffffff0000ffffffffffffffffff0000ffffffffff
+ffff0000ffffff000000000000ffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000ffff0000ffffffff0000ffffffffffffffff
+ffff0000ffffffffffffff000000ffffffff0000ffffffffffff000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ff0000ffffffffff00
+00ffffffffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+0000ffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff
+0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff000000ffffffffffff0000ffffffffffffffffffff0000ffffffffff
+ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffff
+ffff0000ffffffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffff00
+00ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ff000000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff
+0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffff0000ffffffff000000ffffffffffffffffff0000ffffffffff
+ffff0000ffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffff000000ffffffff0000ffffffffffffff
+ffff0000ffffffffffffff000000ffffffff0000ff00ffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff000000ffff000000000000ffff
+0000ffffffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff0000ff00
+00000000000000ffffff0000000000ffffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff0000ffffffffff
+ffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff00000000ff
+ffffffff0000ffffffff00000000ffffffffffff0000ffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff00ffffffff
+ffff0000ffffffffffffffffffffffffffffffffff0000ffffffffff00000000ffffffff
+ffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffff000000ffffffff00ffffffffffff00000000ffffffffff00ffffffffffff
+ffffff00ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffff0000ffffffffff00ffffffffffffffffffffffff
+ffffffffff00ffffffffff0000ffffffffffffffffffffffffffffffffff00ffffffffff
+ffffff0000ffffffffffffffffffffffffffffff00ffffffffffff00ffffffffffffff00
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffff0000ffffff00ffffffffffffffff000000ffffff
+ff0000ffffffffffffffff00ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffff0000ffffffff0000ffffff
+ffffffffffffffffffffffffffff0000ffffffff0000ffffffffffffffffffffffffffff
+ffff00ffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff
+0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffff
+ffffffff000000ffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffff
+ff0000ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff0000
+ffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffff0000ffffffffff
+ffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffffffff
+ff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000
+ffff0000ffffffffffffffffffff0000ffff00ffffffffffffffffff0000ffffffff0000
+00000000ffffffffffff0000ffffffffffffffffffff000000ff0000ffffffffff000000
+0000ffffffffff0000ffff000000000000ffffffff0000000000ffffffffffffff0000ff
+ffff0000ffff0000000000ffff000000ffffff0000ffffffffffffffffff0000ffffffff
+ffffff0000ffffff000000000000ffffffffff0000ffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffff000000ff0000ffffffffffffffffffffff00000000ffffffffffffffffff
+0000ffffffffffffff0000ffffffffffffffff0000ffffffffffffffff0000ffffff0000
+00ffffffff0000ffffff0000ffffffff0000ffffffff0000ffffffff000000ffff000000
+ffffffffffff000000ffff0000ffffff0000ffffffffff00ffffff0000ffffffffffffff
+ffffff0000ffffffffffffff000000ffffffff0000ffffffffffffff000000ffffffffff
+000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffff000000ffff0000ffffffffffffffffffffffff000000
+ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffff0000ffffffffffff
+ffff0000ffffffff0000ffffff0000ffffffff000000ffffff0000ffffffff0000ffffff
+ff000000ffffff0000ffffffffffffff0000ffff0000ffffff0000ffffffffff00ffffff
+0000ffffffffffffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffff
+ffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff00000000000000ffffffff0000ffffffffffff
+ffffffffffff00000000ffffffffffffffff0000ffffffffffffff0000ffffffffffffff
+ff0000ffffffffffffff0000ffffffffff0000ffffff000000000000000000ffffff0000
+ffffffff0000ffffffffff00ffffffff0000ffffffffffffff0000ffff0000ffffff0000
+00ffffff0000ffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff
+ff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ff0000ffffffffffffffffffffff0000000000ffffffffffffffff0000ffffffffffffff
+0000ffff00000000000000000000000000ffff0000ffffffffff0000ffffff0000ffffff
+ffffffffffffff0000ffffffff0000ffffffffffffffff00000000ffffffffffffff0000
+ffff0000ffffffff0000ffffff00ffffffff0000ffffffffffffffffffff0000ffffffff
+ffffffffffffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffff0000ffffffffffffffffffffff00ffff000000ffffffffffffff
+0000ffffffffffffff0000ffff00000000000000000000000000ffff0000ffffffffff00
+00ffff000000ffffffffffffffffffff0000ffffffff0000ffffffffffff0000ffff0000
+ffffffffffffff0000ffff0000ffffffff000000ff0000ffffffff0000ffffffffffffff
+ffffff0000ffffffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffff00ffffffff
+000000ffffffffffff0000ffffffffffffff0000ffffffffffffffff0000ffffffffffff
+ff0000ffffffffff0000ffff000000ffffffffffffffffffff0000ffffffff0000ffffff
+ffff0000ffffff0000ffffffffffffff0000ffff0000ffffffffff0000ff0000ffffffff
+0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffff
+ffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff000000ffffff0000ffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffff
+ffffff00ffffffffff000000ffffffffffff0000ffffffffffffff0000ffffffffffffff
+ff0000ffffffffffffff0000ffffffffff0000ffffff0000ffffffffffff00ffffff0000
+ffffffff0000ffffffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffffff
+00000000ffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff
+ff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffff0000ffffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ff000000ffffffffffffff0000ffffffffffff000000ffffffffff000000ffffffffffff
+0000ffffffffffffffff0000ffffffffffffff000000ffffffff0000ffffff000000ffff
+ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffffffffffff0000
+ffff0000ffffffffffff000000ffffffffff000000ffffffffffffffffff0000ffffffff
+ffffff0000ffffffffff0000ffffffffffffffff0000ffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffff0000ffffffffffff0000ffffffffffffff00000000ffffffff
+ff0000ffffffffffff0000ff00ffffffffffff0000ffffffffffffffff000000ffff0000
+000000ffff00000000000000ffffffff0000ffffffff0000ff00ffff0000ffff00000000
+ffffffffffff0000ffffff0000ffffffffffff0000ffffffffffffff0000ffffffffffff
+ffffff0000ffffffffffffff000000ffffffff0000ff00ffffffffff0000ffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000ffffffffffffffff0000ffffffff000000000000ffffffff
+00000000000000ffffff0000ffffffffffffff000000ffffffffffff0000ffffffffffff
+ffffff0000000000000000ffffffff0000000000ffffffff0000000000ffffff000000ff
+ffff00000000ff00000000ffffffff0000ffffff0000ffffffffffffff00ffffffffffff
+ff0000ffffffffffffff00000000000000ffffffff0000ffffffffffff000000ffffffff
+ff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffff00ffffffffffffffffffffffff0000ffffffffffff00
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff
+ff0000ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ff00000000ffffffff0000ff0000
+00ff000000000000ffffffffff000000000000ffff000000ffffffff000000000000ff00
+00000000ffff000000ffffffffff0000000000ffffffff00000000000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff
+ffffffffffffffffffff00ffffffffffffffffffff00ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff00
+00ffffff000000ffff000000ffffff0000ffffff0000ffffffff0000ffffff0000ffffff
+0000ffffff0000ffff0000ffffffffff0000ffffffff0000ffff000000ffffffff0000ff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00ffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffff000000ffff0000ffffffff0000000000000000ffff00ffffffffff00
+00ffffff0000ffffff00ffffffffff00ffff0000ffffffffff0000ffffff0000ffffffff
+000000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffff00000000ffffffffffffffff
+ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000ffffffffff0000ffff0000ffffff0000ffffffffffffff
+ff0000ffffffffff0000ffffff0000ffff0000ffffffffffffffff0000ffffffffff0000
+ffffff0000ffffffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffff0000ffffff
+0000ffffffffffffffff0000ffffffffff0000ffffff0000ffff0000ffffffffffffffff
+0000ffffffffff0000ffffff0000ffffffffff0000ffffff0000ffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff
+0000ffff0000ffffff000000ffffffffffffff0000ffffffffff0000ffffff0000ffff00
+0000ffffffffffffff0000ffffffffff0000ffffff0000ffffffffff0000ffffff0000ff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffffff00ffffff0000ffffffff0000ffffffffff00ff000000ffffffff00
+00ffffff0000ffff00000000ffffff0000ff0000ffffffffff0000ffffff0000ffffffff
+ff00ffffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff000000ffffff0000ffffff0000ffffffff00000000000000ff
+ffff000000ffffff000000ffff0000ffffff00000000000000ffff0000ffffffffff0000
+ffffffff0000ffffff0000ffffffff0000ffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff000000000000ffffffff0000000000ff
+ffff0000000000ffffffffff00000000ff000000ff00000000ffffff0000000000ffffff
+ff000000ffff00000000ffffffff00000000ffffffffff00000000ff00000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffff
+ffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffff0000ffffff00ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff0000ffff0000
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff000000000000ffffff00000000ff
+ffffff0000ff00000000ffffff00000000ffffffffffffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff0000
+00ffff00ffffff0000ffffff0000ffff0000ffffff0000ffff0000ffffffffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff0000ffffffff0000ffff000000000000ffffff0000ffff0000ffffff00ffffff0000
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0000ffffffff0000ff0000ffffffffffffffff0000ffff0000
+ffffffffff00000000ffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000ffffffff0000ff0000ffffffffff
+ffffff0000ffff0000ffffffff00ffff0000ffffffffffffffffff00ff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff00
+00ff0000ffffffffff00ffff0000ffff0000ffffff0000ffff0000ffffffffffffffffff
+00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffff0000ffff0000ffffff00ffffff0000ffff0000ffff000000ff000000
+ffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff000000000000ffffff00000000ffffff000000ffff0000
+0000ff00000000000000ffffffffffffffff00ff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff000000000000000000000000000000000000000000000000000000000000000000
+0000000000ffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00000000ffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff000000000000000000ffffffffffffffff0000ff0000000000000000ff
+ffff0000000000ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff
+ffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffff00000000ffffffffff0000ffff
+ffff00000000ffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffff
+ffffff00000000ffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000
+00ffffffff00ffffffffffff00000000ffffffffff00ffffffffffffffffff00ffffffff
+ffff00ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffffff0000ffffffffffffffffffffffffff
+ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffff00ffffffff
+ff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffffffff0000ffffff00ffffffffffffffff000000ffffffff0000ffffffffff
+ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff0000ffffffff
+ffffffffffffffffffffffffff00ffffffffffffffffff0000ffffffffffffffffffffff
+ffffff0000ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffff0000ffff0000ffffffffffffffffff000000ff
+ff0000ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffff0000ffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffff
+ffffffffffffffffffffffff0000ffffffffffff0000ffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffff0000ffffffff
+ffffffffffff0000ffff00ffffffffffffffffff0000ffffffff000000000000ffffffff
+ffffffffffffffffffff000000000000ffffffff0000000000ffff00000000ffff000000
+00ffffffffffff0000ffffff0000ffffff0000000000ffff000000ffffff0000ffffffff
+ffffffffff0000ffffffffffffff0000ffffff000000000000ffffffff0000ffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000
+00ff0000ffffffffffffffffffffff00000000ffffffffffffffffff0000ffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffff0000ffffffff000000ffff000000ff
+ffff0000ffffffff0000ffffffffffff000000ffff0000ffffffff0000ffffffffff00ff
+ffff0000ffffffffffffffffffff0000ffffffffffffff000000ffffffff0000ffffffff
+ffff000000ffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffff000000ffff0000ffffffffffffffffffffffff000000ffffffffffffffff
+ff0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff
+000000ffffff0000ffffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffff
+0000ffffffffff00ffffff0000ffffffffffffffffffff0000ffffffffffffff0000ffff
+ffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00000000000000ffffffff0000ffffffffffffffffffffffff0000
+0000ffffffffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffff0000ffffffffff00ffffffff0000ffffff0000ffffffff0000ffffffffffffff00
+00ffff0000ffffffff000000ffffff0000ffffff0000ffffffffffffffffffff0000ffff
+ffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffffff
+ffffffffffff0000000000ffffffffffffffff0000ffffffffffffff0000ffff00000000
+000000000000000000ffffff0000ffffffffffffffff00000000ffffff0000ffffffff00
+00ffffffffffffff0000ffff0000ffffffffff0000ffffff00ffffffff0000ffffffffff
+ffffffffff0000ffffffffffffffffffffffffffff0000ffffffffffffff0000ffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffff0000ffffffffffffffffffffff00ffff000000ffffffffffffff0000ffffffffffff
+ff0000ffff00000000000000000000000000ffffff0000ffffffffffff0000ffff0000ff
+ffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffffff000000ff0000ffff
+ffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffff0000ffffffff
+ffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffffffffffffff0000ffffffffffffffffffff00ffffffff000000ffffffffff
+ff0000ffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffff
+ff0000ffffff0000ffffff0000ffffffff0000ffffffffffffff0000ffff0000ffffffff
+ffff0000ff0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffff
+ffffff0000ffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffff00ffffffff
+ff000000ffffffffffff0000ffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffff0000ffffffff0000ffffffff0000ffffff0000ffffffff0000ffffffffffffff00
+00ffff0000ffffffffffff00000000ffffffffff0000ffffffffffffffffffff0000ffff
+ffffffffffffffffffffffff0000ffffffffffffff0000ffffffffffff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff000000ffffffff
+ffffff0000ffffffffffff000000ffffffffff000000ffffffffffff0000ffffffffffff
+ffffffffffffffffffffffff0000ffffffff0000ffffffff0000ffffff0000ffffffff00
+00ffffffffffffff0000ffff0000ffffffffffffff000000ffffffffff000000ffffffff
+ffffffffff0000ffffffffffffff0000ffffffffff0000ffffffffffffff0000ffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffff0000ffffffffffff0000ffffffffffffff00000000ffffffffff0000ffffffffff
+ff0000ff00ffffffffffffffffffffffffffffffff0000ff00ffff0000ffff00000000ff
+ffff000000ff0000000000ffffffffff0000ffffff0000ffffffffffffff0000ffffffff
+ffffff0000ffffffffffffffffff0000ffffffffffffff000000ffffffff0000ff00ffff
+ffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+00000000ffffffffffffffff0000ffffffff000000000000ffffffff00000000000000ff
+ffff0000ffffffffffffff000000ffffffffffffffffffffffffffffffffff000000ffff
+ff00000000ff00000000ffff00000000ff000000ffffffffff0000ffffff0000ffffffff
+ffffffff00ffffffffffffff0000ffffffffffffff00000000000000ffffffff0000ffff
+ffffffff000000ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffffffffffff0000ffffffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00000000ff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffff000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff
+ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff00ffffffffffffffffffffffffffff00ffffffffffffffffffff00ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ffff0000ff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff0000ffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff00
+000000ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff0000ffffffffffffffffffffffffffffff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffff00ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff0000ffff
+ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00000000000000ff000000ffff000000
+0000ff000000ffffff000000000000ffffffffff000000000000ffffffffffffffffffff
+ffffffffff0000ffffffff0000000000ffffffffff00000000000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffff0000ffffffffff0000ff00ffffffff0000ffffff0000ffffff0000ffffffff0000ff
+ffffffffffffffffffffffffffff0000ffffff0000ffffff0000ffffff00ffffff000000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffff0000ffffffffff000000ffffffffff0000000000000000ffff
+00ffffffffff0000ffffffffffffffffffffffffffffff0000ffffff00ffffffff0000ff
+ffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffff0000ffffffffffff0000ffffffff0000
+ffffffffffffffff0000ffffffffff0000ffff00000000000000000000ffffff0000ffff
+ffffffff00000000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff
+ff0000ffffffff0000ffffffffffffffff0000ffffffffff0000ffffffffffffffffffff
+ffffffffff0000ffffffff0000ffff0000ffffff0000ffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffff0000ffffffffff00ff0000ffffff000000ffffffffffffff0000ffffffffff0000ff
+ffffffffffffffffffffffffffff0000ffffff0000ffffff0000ffffffff00000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffff0000ffffffffff00ffff0000ffffff0000ffffffffff00ff00
+0000ffffffff0000ffffffffffffffffffffffffffffff0000ffffff0000ffffff0000ff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffff0000ffffffff00ffffff000000ffff00
+000000000000ffffff000000ffffff000000ffffffffffffffffffffffffffff0000ffff
+ff0000ffff000000ffffff00000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000000000ffff00000000ff000000
+00ffff00000000ffff0000000000ffffffffff00000000ff000000ffffffffffffffffff
+ffffffff0000000000ff00000000ff000000ffff00000000000000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00000000
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffff00ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+0000ffffffffffffffffffffff00ffffffff0000ffffffffffffffffffffffff00ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff
+ffff000000ff00000000ff00000000ffffffffffff0000000000ffffffffff0000000000
+ffffff0000000000ff0000ff00000000ffffffff000000ffffff00000000000000ffffff
+ffff00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffff00000000ffffff00000000ffffff0000ffff000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff00ffffff0000ffffff0000ffffff0000ffffffff0000ffffffff0000ffff000000
+ffffff0000ffff000000ffffff0000ffffff000000ffffff0000ffffffff0000ffffffff
+0000ffffff0000ffffff00ffffff000000ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffff0000ffffff0000ffff0000ffff
+0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffff0000ffffff0000ffffffff0000ffff
+ff0000ffffffff000000ff0000ffffffff000000ffff0000ffffff0000ffffffff0000ff
+ffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff0000ffff
+ff00ffffff0000ffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff000000ffffffffff0000ffffff00
+00ffffffff0000ffffff0000ffffffffff0000ff0000ffffffffff0000ffff0000ffffff
+0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffff00000000ffff0000ffffff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ff
+ffffff0000ffffff0000ffffffff0000ffffff0000ffffffffff0000ff0000ffffffffff
+0000ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffff
+ff0000ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffff
+ffffffffffffffffffffffffffff0000ffffffff00ffff0000ffff0000ffffff0000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000ffffff0000ffffff0000ffffffff0000ffffff0000ffffffffff00
+00ff0000ffffffffff0000ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff
+0000ffffff0000ffffffff00000000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ff0000ffffffffffffffffffffffffffffffffffffff0000ffffff0000ffff0000ffff
+0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00ffffffff00ffffff0000ffffff0000ffffffff0000ffff
+ff0000ffffffffff00ffff0000ffffffffff00ffffff0000ffffff0000ffffffff0000ff
+ffffff0000ffffffff0000ffffff0000ffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffffff0000ffff
+000000ff000000ffff0000ffff000000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff0000ffffff00
+00ffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffff0000ffffff
+0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff00000000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffff
+ffffffffff00000000ff00000000000000ffff000000ff0000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff
+ff0000000000ff0000000000ff00000000ffffffff00000000ffffffffffff00000000ff
+ffffffffff0000000000000000ff00000000ffff00000000ffff00000000ff00000000ff
+ff00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00ffff0000000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffff0000000000000000000000000000
+000000000000000000000000000000000000000000000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff000000
+00ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00ffffff0000ffffffff00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ff
+ffffffffffffff0000ff0000000000000000ffffff0000000000ffffffffffffff0000ff
+ffffffffffffff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff
+0000ffffffffffff0000ffffffffffffffffffffffff0000000000000000000000000000
+ff00ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffff00000000ffffffffff0000ffffffff00000000ffffffffffff0000ffffff
+ffffffffff0000ffffffffffffffffffff00ffffffffffff0000ffffffffffffffffffff
+ffffffffffffffff0000ffffffffff00000000ffffffffffffffffffffffff0000ffffff
+ff0000ffffffff0000ffff00ffffffffffffff00ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff0000ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffff000000ffffffff00ffffffffffff00000000ff
+ffffffff00ffffffffffffffffff00ffffffffffff00ffffffffff00ffffffffff0000ff
+ffffffffffffffffffffffffffffffffff00ffffffffffffffff0000ffffffffffffffff
+ffffffff0000ffffffff0000ffffffffff00ffffff00ffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffff0000ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ffffff00ffffff
+ffffffffff000000ffffffff0000ffffffffffffffff00ffffffffffff0000ffffffffff
+0000ffffffff0000ffffffffffffffffffffffffffffffffff00ffffffffffffffffff00
+00ffffffffffffffffffffffff00ffffffffff0000ffffffffff00ffffff0000ffffffff
+ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+0000ffff0000ffffffffffffffffff000000ffff0000ffffffffffffffff0000ffffffff
+ffff0000ffffffffffff0000ffffff0000ffffffffffffffffffffffffffffffff0000ff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffff0000ffff0000ffffffffffffffffffff0000ffff00ffffffffffff
+ffffff0000ffffffff000000000000ffffffff0000ffffff0000ffffff0000000000ffff
+000000ffffff0000ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffff
+ff0000ffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffff00ffffffff0000ffffffffffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffff000000ff0000ffffffffffffffffffffff0000
+0000ffffffffffffffffff0000ffffffffffffff0000ffffffffffff000000ffff0000ff
+ffffff0000ffffffffff00ffffff0000ffffffffffffffffffff0000ffffffffffffff00
+0000ffffffffffffffff0000ffffffffffffffffffff000000ffffffffff000000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+00000000ff000000ffff0000000000ff000000ffffff000000000000ffffffffff000000
+000000ffffffffffffff000000ffffff00000000000000ffffff0000000000ffffff0000
+00000000ffff0000ff0000000000000000ffff000000ffff0000000000ffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffff000000ffff0000ffffffff
+ffffffffffffffff000000ffffffffffffffffff0000ffffffffffffff0000ffffffffff
+ffff0000ffff0000ffffffff0000ffffffffff00ffffff0000ffffffffffffffffffff00
+00ffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffff0000ffff
+ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffff0000ffffffffff0000ff00ffffffff0000ffffff00
+00ffffff0000ffffffff0000ffffffffffffffff0000ffffffff0000ffffff0000ffffff
+0000ffffffff0000ffffff0000ffff000000ffff00ffff0000ffffffff00ffff0000ffff
+ff0000ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000ff
+ffffff0000ffffffffffffffffffffffff00000000ffffffffffffffff0000ffffffffff
+ffff0000ffffffffffffff0000ffff0000ffffffff000000ffffff0000ffffff0000ffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff000000ffff
+ffffff0000000000000000ffff00ffffffffff0000ffffffffffffffff0000ffffffff00
+00ffffff0000ffffff0000ffffffff0000000000000000ff0000ffffffffffff0000ffff
+ff0000ffff00ffffffff0000ffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffff0000ffffffffffffffffffffff0000000000ffffffffffff
+ffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ffffffffff0000ffffff
+00ffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ff
+ffffffffff0000ffffffff0000ffffffffffffffff0000ffffffffff0000ffffffffffff
+ffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffffffffffffffff0000ff
+ffffffffffff0000ffff00ffffffffffff00000000ffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffff0000ffffffffffffffffffffff00ff
+ff000000ffffffffffffff0000ffffffffffffff0000ffffffffffffff0000ffff0000ff
+ffffffff000000ff0000ffffffff0000ffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffff0000ffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffff0000ffffffffffff0000ffffffff0000ffffffffffffffff0000ffffffff
+ff0000ffffffffffffffff0000ffffffff0000ffffff0000ffffff0000ffffff0000ffff
+ffffffffffff0000ffffffffffffff0000ff0000ffffffff0000ffff0000ffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff0000ffffffff
+ffffffffffff00ffffffff000000ffffffffffff0000ffffffffffffff0000ffffffffff
+ffff0000ffff0000ffffffffffff0000ff0000ffffffff0000ffffffffffffffffffff00
+00ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff0000ffff
+ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffff0000ffffffffff00ff0000ffffff000000ffffffff
+ffffff0000ffffffffff0000ffffffffffffffff0000ffffffff0000ffffff0000ffffff
+0000ffffff000000ffffffffffffff0000ffffffffffffffff000000ffffffff0000ffff
+ff0000ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffff0000ffffffffffffffffff00ffffffffff000000ffffffffffff0000ffffffffff
+ffff0000ffffffffffffff0000ffff0000ffffffffffff00000000ffffffffff0000ffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff00ffff0000
+ffffff0000ffffffffff00ff000000ffffffff0000ffffffffffffffff0000ffffffff00
+00ffffff0000ffffff0000ffffffff0000ffffffffff00ff0000ffffffffffffffff0000
+00ffffffff0000ffffff0000ffffffff0000ffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffff000000ffffffffffffff0000ffffffffffff000000ffffff
+ffff000000ffffffffffff0000ffffffffffffff0000ffff0000ffffffffffffff000000
+ffffffffff000000ffffffffffffffffff0000ffffffffffffff0000ffffffffffffffff
+ff0000ffffffffffffffffffffff0000ffffffffffff0000ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ff
+ffffff00ffffff000000ffff00000000000000ffffff000000ffffff000000ffffffffff
+ffff0000ffffffff0000ffffff0000ffffff0000ffffffff00000000000000ffff0000ff
+ffffffffffffff000000ffffffff0000ffff000000ffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffff0000ffffffff
+ffffff00000000ffffffffff0000ffffffffffff0000ff00ffffffff0000ffffff0000ff
+ffffffffffff0000ffffffffffffff0000ffffffffffffffffff0000ffffffffffffff00
+0000ffffffffffffffff000000ffffffffffffffffff0000ffffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+000000ffff00000000ff00000000ffff00000000ffff0000000000ffffffffff00000000
+ff000000ffffffffffff00000000ffff00000000ff00000000ffffff000000ffffff0000
+000000ffff0000000000ffffffffffffff00ffffffffff00000000ff000000ffff000000
+0000ffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff
+ffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff0000ffffff
+ff000000000000ffffffff00000000000000ffffff0000ffffffffffffff000000ffffff
+ff0000ffffff0000ffffffffffffffff00ffffffffffffff0000ffffffffffffff000000
+00000000ffffffff0000ffffffffffffff00000000000000ffffffffffffff0000ffffff
+ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffff0000ffffffffffffffffffffffffff0000ffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffff0000ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff
+ffffffffff00ffffffffffffffffffffffff00ffffffffffffffffffffffffffff00ffff
+ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff00ffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
+ffffffffffffffffffffffffffff0000ffffffffffffffffffff00ffffffffffffffffff
+ffffffffff0000ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffff00ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff007f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff0000
+ffffffffffffffffffffff00000000ffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
+00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000
+00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff0000ffffffffffffffffffff0000ffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffff0000ffffffffffffffffffffff00ffffffff0000ffffff
+ffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00000000ffffff000000ff00000000ff00000000ffffffffffff0000
+000000ffffffffff0000000000ffffff0000000000ff0000ff00000000ffffffff000000
+ffffff00000000000000ffffffffff00000000000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff00ffffff0000ffffff0000ffffff0000ffffffff
+0000ffffffff0000ffff000000ffffff0000ffff000000ffffff0000ffffff000000ffff
+ff0000ffffffff0000ffffffff0000ffffff0000ffffff00ffffff000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff0000
+ffffff0000ffffffff0000ffffff0000ffffffff000000ff0000ffffffff000000ffff00
+00ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000ffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+0000ffffffffff0000ffffff0000ffffffff0000ffffff0000ffffffffff0000ff0000ff
+ffffffff0000ffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff
+0000ffffff0000ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff000000ffffffff0000ffffff0000ffffffff0000ffffff0000ffff
+ffffff0000ff0000ffffffffff0000ffff0000ffffff0000ffffffff0000ffffffff0000
+ffffffff0000ffffff0000ffffff0000ffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ff0000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff000000ffffff0000ffffff0000ffffffff
+0000ffffff0000ffffffffff0000ff0000ffffffffff0000ffff0000ffffff0000ffffff
+ff0000ffffffff0000ffffffff0000ffffff0000ffffffff00000000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff0000
+ffffff0000ffffffff0000ffffff0000ffffffffff00ffff0000ffffffffff00ffffff00
+00ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+00ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffff00ffffff0000ffffff0000ffffffff0000ffffffff0000ffffff0000ffffff0000
+ffffff0000ffffff0000ffffff0000ffffffff0000ffffffff0000ffffffff0000ffffff
+0000ffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff00ff0000ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000000000ffff0000000000ff0000000000ff00000000ffffffff0000
+0000ffffffffffff00000000ffffffffffff0000000000000000ff00000000ffff000000
+00ffff00000000ff00000000ffff00000000000000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffff00ffff0000000000ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff
+ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff0000ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffff00000000ffffff0000
+0000000000ffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff00ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff00
+ffff0000ffff00ffff0000ff0000ffffffff0000ffffffffffffffffffffffffffffffff
+ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+ffffffffffffff0000ffffffffff0000ffffffffff0000ffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
+00ffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff0000ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff0000ffffffffffffffffffffffffffffff0000ffffffffff0000ffff
+ffffff0000ffffffffff00ffffffff0000ffffffffffffffffffffffffffffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff000000ffffffffffff0000000000ffff00000000
+00000000000000000000ffff0000ffffff000000ffffff00000000000000ffffffffff00
+0000000000ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff0000ff
+ff000000ffffff0000ffffffffff0000ffffffffff0000ffffffff0000ffffffff0000ff
+ffff0000ffffff0000ffffff0000ffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffff0000ffffffff000000ffff0000ffffffffff0000ffffffffff0000ffffffff
+0000ffffffff0000ffffff0000ffffff0000000000000000ffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff0000ffffffffff0000ffffffffff0000ffff0000ffffffffff0000ffff
+ffffff0000ffffffff0000ffffffff0000ffffff0000ffff0000ffffffffffffffffffff
+ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff0000ffffffffff0000ffffffffff0000ffff0000
+ffffffffff0000ffffffffff0000ffffffff0000ffffffff0000ffffff0000ffff0000ff
+ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff0000ffff
+ffffff0000ffff0000ffffffffff0000ffffffffff0000ffffffff0000ffffffff0000ff
+ffff0000ffff000000ffffffffffffffffffff0000ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffff0000ffffffffff00ffffff0000ffffffffff0000ffffffffff0000ffffffff
+0000ffffffff0000ffffff0000ffffff0000ffffffffff00ffffffff0000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffff00ffffffffffff0000ffffff0000ffffff0000ffffffffff0000ffff
+ffffff0000ffffffff0000ffffffff0000ffffff0000ffffff00000000000000ffffffff
+ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff0000ffffffffffff00000000ffffffff000000
+0000ffff0000000000ffff0000000000ff00000000ffff00000000ff00000000ffffff00
+00000000ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff
+end
+%%PageTrailer
+%%Trailer
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/filter.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2550 5100 6300 6375
+2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5
+	 2550 5475 4050 5475 4050 5775 2550 5775 2550 5475
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2
+	 4050 5475 6300 5475
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3300 6375 3300 5925
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 1 2
+	0 0 1.00 60.00 120.00
+	0 0 1.00 60.00 120.00
+	 3450 6225 4050 6225
+4 0 0 100 0 0 18 0.0000 4 165 90 4050 5325 t\001
+4 0 0 100 0 0 18 0.0000 4 165 345 3600 6075 tau\001
+-6
+2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5
+	 2550 2025 4050 2025 4050 2325 2550 2325 2550 2025
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2
+	 4050 2025 6300 2025
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4050 2925 4050 2475
+2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5
+	 2550 7200 6375 7200 6375 7500 2550 7500 2550 7200
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3975 8025 3975 7575
+2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5
+	 2475 3525 3975 3525 3975 3825 2475 3825 2475 3525
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2
+	 3975 3525 6225 3525
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 1 2
+	0 0 1.00 60.00 120.00
+	0 0 1.00 60.00 120.00
+	 3975 4275 4575 4275
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4650 4425 4650 3975
+2 2 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 5
+	 2550 600 4050 600 4050 900 2550 900 2550 600
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 0 0 2
+	 4050 600 6300 600
+2 1 0 1 0 0 100 0 10 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4050 1500 4050 1050
+4 0 0 100 0 0 18 0.0000 4 165 90 4050 1875 t\001
+4 0 0 50 0 0 24 0.0000 4 330 3540 6675 2175 argmax P(x(1:t) | y(1:t))\001
+4 0 0 50 0 0 24 0.0000 4 330 810 6975 2550 x(1:t)\001
+4 0 0 100 0 0 18 0.0000 4 165 90 3975 7125 t\001
+4 0 0 100 0 0 18 0.0000 4 195 180 6225 7125 T\001
+4 0 0 100 0 0 18 0.0000 4 165 90 3975 3375 t\001
+4 0 0 100 0 0 18 0.0000 4 195 540 3975 4125 delta\001
+4 0 0 100 0 0 18 0.0000 4 165 90 4050 450 t\001
+4 0 0 50 0 0 24 0.0000 4 330 1950 6675 750 P(X(t)|y(1:t))\001
+4 0 0 50 0 0 24 0.0000 4 330 2865 6450 3600 P(X(t+delta)|y(1:t))\001
+4 0 0 50 0 0 24 0.0000 4 330 2550 6600 5550 P(X(t-tau)|y(1:t))\001
+4 0 0 50 0 0 24 0.0000 4 330 2085 6750 7425 P(X(t)|y(1:T))\001
+4 0 0 50 0 0 24 0.0000 4 330 1140 600 900 filtering\001
+4 0 0 50 0 0 24 0.0000 4 330 1470 450 3750 prediction\001
+4 0 0 50 0 0 24 0.0000 4 255 1005 600 2175 Viterbi\001
+4 0 0 50 0 0 24 0.0000 4 330 1305 600 5775 fixed-lag\001
+4 0 0 50 0 0 24 0.0000 4 330 1575 525 7740 smoothing\001
+4 0 0 50 0 0 24 0.0000 4 330 1170 525 8055 (offline)\001
+4 0 0 50 0 0 24 0.0000 4 330 1575 600 6090 smoothing\001
+4 0 0 50 0 0 24 0.0000 4 255 1920 525 7425 fixed interval\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/filter.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/filter.tex	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+%Latex
+\documentstyle[fleqn,psfig,12pt,pstricks,pst-node,pst-tree]{article}
+
+%\documentclass[fleqn,12pt]{article}
+%\usepackage{pstricks,pst-node,pst-tree}
+ 
+%latex2e
+%\documentclass{article}
+%\usepackage{epsfig,alltt,fancybox}
+
+\setlength{\textwidth}{6.5in}
+\setlength{\oddsidemargin}{0in}
+\setlength{\textheight}{8.5in}
+\setlength{\headheight}{0in}
+\setlength{\headsep}{-0.5in}
+\setlength{\parindent}{0in} % block style
+\setlength{\parskip}{0.3cm}
+
+\newcommand{\mytitle}[1]{\newpage \huge \begin{center}#1\vspace{0.8cm}\end{center} \LARGE}
+
+
+\begin{document}
+
+\mytitle{Hello world}
+
+Hello world
+
+\centering
+$
+\pstree[treemode=R]{\Tcircle{b}}{%
+  \pstree{\TC*^{a_1}}{%
+     \Tr{b_{11}}^{x_1}
+     \Tr{b_{12}}_{x_2}
+   }
+  \pstree{\TC*_{a_2}}{%
+     \Tr{b_{21}}^{x_1}
+     \Tr{b_{22}}_{x_2}
+   }
+}
+$
+
+
+
+\mytitle{Hello world 2}
+
+\psline[linewidth=0.5cm](0,0)(2,0)
+\psline[linewidth=0.05cm](2,-1)(6,-1)
+
+
+
+\end{document}
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/gaussplot.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hme.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 225 150 2625 3825
+6 300 150 1800 3450
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 2212.500 2250.000 825 1425 600 2325 825 3075
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 3083.468 1905.242 750 525 375 2025 675 3150
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 -1 0 0 -1 0.000 0 0 1 0 679.747 1409.810 1200 450 1725 1725 1275 2325
+	0 0 1.00 60.00 120.00
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 975 375 300 225 975 375 1275 600
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1050 3225 300 225 1050 3225 1350 3450
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 825 1050 1200 1050 1200 1500 825 1500 825 1050
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 825 2100 1200 2100 1200 2550 825 2550 825 2100
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 600 1050 1050
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 1575 1050 2100
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 2625 1050 3000
+-6
+4 0 -1 0 0 0 12 0.0000 4 180 2370 225 3750 Hierarchical Mixture of Experts\001
+4 0 -1 0 0 0 12 0.0000 4 135 120 825 450 X\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 900 1350 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 900 2400 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 135 900 3300 Y\001
+-6
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hme.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hme_dec_boundary.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hme_dec_boundary.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm3.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 525 1650 270 270 525 1650 675 1875
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1575 1650 270 270 1575 1650 1725 1875
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2625 1650 270 270 2625 1650 2775 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 1050 525 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 1350 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1050 1575 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 825 2325 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2400 600 2775 600 2775 1050 2400 1050 2400 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 1050 2550 1425
+4 0 0 100 0 2 12 0.0000 4 135 90 525 975 1\001
+4 0 0 100 0 2 12 0.0000 4 135 90 1575 975 3\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2475 900 5\001
+4 0 0 100 0 2 12 0.0000 4 135 90 450 1725 2\001
+4 0 0 100 0 2 12 0.0000 4 135 90 1425 1725 4\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2550 1725 6\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm3.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm3letter.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 525 1650 270 270 525 1650 675 1875
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1575 1650 270 270 1575 1650 1725 1875
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2625 1650 270 270 2625 1650 2775 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 1050 525 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 1350 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1050 1575 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 825 2325 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2400 600 2775 600 2775 1050 2400 1050 2400 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 1050 2550 1425
+4 0 0 100 0 0 12 0.0000 4 135 225 450 1725 Y1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1425 1725 Y2\001
+4 0 0 100 0 0 12 0.0000 4 135 225 2475 1725 Y3\001
+4 0 0 100 0 0 12 0.0000 4 135 225 450 900 X1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 2475 900 X3\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1500 900 X2\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm3letter.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm3letter.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm4.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 600 1200 300 300 600 1200 900 1200
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 1800 1200 300 300 1800 1200 2100 1200
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 3000 1200 300 300 3000 1200 3300 1200
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 4200 1200 300 300 4200 1200 4500 1200
+1 3 0 2 0 0 50 0 7 0.000 1 0.0000 600 2400 300 300 600 2400 900 2400
+1 3 0 2 0 0 50 0 7 0.000 1 0.0000 3000 2400 300 300 3000 2400 3300 2400
+1 3 0 2 0 0 50 0 7 0.000 1 0.0000 4200 2400 300 300 4200 2400 4500 2400
+1 3 0 2 0 0 50 0 7 0.000 1 0.0000 1800 2400 300 300 1800 2400 2100 2400
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 600 1500 600 2100
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 900 1200 1500 1200
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2100 1200 2700 1200
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3375 1200 3900 1200
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 1800 1500 1800 2100
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3000 1500 3000 2100
+2 1 0 2 0 0 50 0 7 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 4200 1500 4200 2100
+4 0 0 100 0 0 30 0.0000 4 60 600 5025 1200 . . .\001
+4 0 0 50 0 0 24 0.0000 4 255 270 450 1275 X\001
+4 0 0 50 0 0 24 0.0000 4 255 270 1650 1275 X\001
+4 0 0 50 0 0 24 0.0000 4 255 270 2850 1275 X\001
+4 0 0 50 0 0 24 0.0000 4 255 240 450 2475 Y\001
+4 0 0 50 0 0 24 0.0000 4 255 240 2850 2475 Y\001
+4 0 0 50 0 0 24 0.0000 4 255 240 4050 2475 Y\001
+4 0 0 50 0 0 24 0.0000 4 255 180 675 1425 1\001
+4 0 0 50 0 0 24 0.0000 4 255 180 1875 1350 2\001
+4 0 0 50 0 0 24 0.0000 4 255 180 3075 1350 3\001
+4 0 0 50 0 0 24 0.0000 4 255 180 4275 1425 4\001
+4 0 0 50 0 0 24 0.0000 4 255 180 600 2550 1\001
+4 0 0 50 0 0 24 0.0000 4 255 180 3000 2550 3\001
+4 0 0 50 0 0 24 0.0000 4 255 180 4200 2550 4\001
+4 0 0 50 0 0 24 0.0000 4 255 270 4050 1275 X\001
+4 0 0 50 0 0 24 0.0000 4 255 180 1800 2625 2\001
+4 0 0 50 0 0 24 0.0000 4 255 240 1650 2475 Y\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm4.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm4_params.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3150 2550 270 270 3150 2550 3300 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3975 2550 270 270 3975 2550 4125 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1350 2550 270 270 1350 2550 1500 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2250 2550 270 270 2250 2550 2400 2775
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 2625 3825 270 270 2625 3825 2775 4050
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 1425 600 270 270 1425 600 1575 825
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 3000 600 270 270 3000 600 3150 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2925 1500 3300 1500 3300 1950 2925 1950 2925 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 1950 3075 2325
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3750 1500 4125 1500 4125 1950 3750 1950 3750 1500
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3300 1725 3750 1725
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3975 1950 3975 2250
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1725 2100 1725
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2475 1725 2925 1725
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1200 1500 1575 1500 1575 1950 1200 1950 1200 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1350 1950 1350 2325
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2100 1500 2475 1500 2475 1950 2100 1950 2100 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2250 1950 2250 2325
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2475 3600 1500 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 3600 2400 2850
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2700 3525 3075 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2850 3675 3825 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1425 900 1425 1500
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2925 900 2400 1500
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 900 3075 1425
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3225 750 3900 1500
+4 0 0 100 0 0 12 0.0000 4 135 225 3000 2625 Y3\001
+4 0 0 100 0 0 12 0.0000 4 165 225 3825 1800 Q4\001
+4 0 0 100 0 0 12 0.0000 4 165 225 3000 1800 Q3\001
+4 0 0 100 0 0 12 0.0000 4 135 225 3825 2625 Y4\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1275 2625 Y1\001
+4 0 0 100 0 0 12 0.0000 4 165 225 1275 1800 Q1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 2100 2625 Y2\001
+4 0 0 100 0 0 12 0.0000 4 165 225 2175 1800 Q2\001
+4 0 0 100 0 0 12 0.0000 4 135 195 1275 675 P1\001
+4 0 0 100 0 0 12 0.0000 4 135 195 2850 675 P2\001
+4 0 0 100 0 0 12 0.0000 4 135 195 2550 3900 P3\001
+4 0 0 100 0 0 30 0.0000 4 30 525 4350 1800 . . .\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm4_params.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm4_paramsX.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3150 2550 270 270 3150 2550 3300 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3975 2550 270 270 3975 2550 4125 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1350 2550 270 270 1350 2550 1500 2775
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2250 2550 270 270 2250 2550 2400 2775
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 1425 600 270 270 1425 600 1575 825
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 3000 600 270 270 3000 600 3150 825
+1 3 1 1 0 7 100 0 -1 4.000 1 0.0000 2615 3863 270 270 2615 3863 2765 4088
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2925 1500 3300 1500 3300 1950 2925 1950 2925 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 1950 3075 2325
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3750 1500 4125 1500 4125 1950 3750 1950 3750 1500
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3300 1725 3750 1725
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3975 1950 3975 2250
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1725 2100 1725
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2475 1725 2925 1725
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1200 1500 1575 1500 1575 1950 1200 1950 1200 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1350 1950 1350 2325
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2100 1500 2475 1500 2475 1950 2100 1950 2100 1500
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2250 1950 2250 2325
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2475 3600 1500 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 3600 2400 2850
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2700 3525 3075 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2850 3675 3825 2775
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1425 900 1425 1500
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2925 900 2400 1500
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 900 3075 1425
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3225 750 3900 1500
+4 0 0 100 0 0 12 0.0000 4 135 225 3000 2625 Y3\001
+4 0 0 100 0 0 12 0.0000 4 135 225 3825 2625 Y4\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1275 2625 Y1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 2100 2625 Y2\001
+4 0 0 100 0 0 30 0.0000 4 60 600 4350 1800 . . .\001
+4 0 0 50 0 0 12 0.0000 4 135 225 1275 1800 X1\001
+4 0 0 50 0 0 12 0.0000 4 135 225 2175 1800 X2\001
+4 0 0 50 0 0 12 0.0000 4 135 225 3000 1800 X3\001
+4 0 0 50 0 0 12 0.0000 4 135 225 3825 1800 X4\001
+4 0 0 50 0 0 18 0.0000 4 195 180 2550 3975 B\001
+4 0 0 50 0 0 18 0.0000 4 255 210 1275 750 pi\001
+4 0 0 50 0 0 18 0.0000 4 195 225 2850 750 A\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm4_square.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+6 1425 600 2025 1950
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 1725 1650 270 270 1725 1650 1875 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1575 600 1950 600 1950 1050 1575 1050 1575 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1725 1050 1725 1425
+4 0 0 100 0 0 12 0.0000 4 135 225 1575 1725 Y2\001
+4 0 0 100 0 0 12 0.0000 4 165 225 1650 900 Q2\001
+-6
+6 525 600 1125 1950
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 825 1650 270 270 825 1650 975 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 600 1050 600 1050 1050 675 1050 675 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1050 825 1425
+4 0 0 100 0 0 12 0.0000 4 135 225 750 1725 Y1\001
+4 0 0 100 0 0 12 0.0000 4 165 225 750 900 Q1\001
+-6
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 2625 1650 270 270 2625 1650 2775 1875
+1 3 0 1 0 0 100 0 2 0.000 1 0.0000 3450 1650 270 270 3450 1650 3600 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2400 600 2775 600 2775 1050 2400 1050 2400 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 1050 2550 1425
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3225 600 3600 600 3600 1050 3225 1050 3225 600
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2775 825 3225 825
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 1050 3450 1350
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 825 1575 825
+2 1 0 1 0 0 100 0 20 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 825 2400 825
+4 0 0 100 0 0 12 0.0000 4 135 225 2475 1725 Y3\001
+4 0 0 100 0 0 12 0.0000 4 165 225 3300 900 Q4\001
+4 0 0 100 0 0 12 0.0000 4 165 225 2475 900 Q3\001
+4 0 0 100 0 0 12 0.0000 4 135 225 3300 1725 Y4\001
+4 0 0 100 0 0 30 0.0000 4 30 525 3825 975 . . .\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm_ar.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 225 225 2025 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1275 300 225 525 1275 825 1500
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1275 300 225 1575 1275 1875 1500
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 450 1350 450
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 375 225 750 225 750 675 375 675 375 225
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 675 525 1050
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1425 225 1800 225 1800 675 1425 675 1425 225
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 675 1575 1050
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1275 1275 1275
+4 0 -1 0 0 0 12 0.0000 4 165 225 450 525 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1500 525 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 375 1350 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1425 1350 Y2\001
+4 0 -1 0 0 0 12 0.0000 4 180 1785 225 1800 Auto Regressive HMM\001
+-6
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm_ar.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm_coupled.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+6 300 225 1950 675
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 450 300 225 600 450 900 675
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1650 450 300 225 1650 450 1950 675
+-6
+6 450 1875 1875 2325
+6 450 1875 1875 2325
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 2100 1425 2100
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 450 1875 825 1875 825 2325 450 2325 450 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1500 1875 1875 1875 1875 2325 1500 2325 1500 1875
+-6
+-6
+6 450 1050 1875 1500
+6 450 1050 1875 1500
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1275 1425 1275
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 450 1050 825 1050 825 1500 450 1500 450 1050
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1500 1050 1875 1050 1875 1500 1500 1500 1500 1050
+-6
+-6
+6 300 2700 1950 3150
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 600 2925 300 225 600 2925 900 3150
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1650 2925 300 225 1650 2925 1950 3150
+-6
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 600 2325 600 2700
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1650 2325 1650 2700
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 600 1050 600 675
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1650 1050 1650 675
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 2100 1425 1350
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 900 1275 1350 2025
+4 0 -1 0 0 0 12 0.0000 4 135 210 450 525 C1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 525 1350 A1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 525 2175 B1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 450 3000 D1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1500 3075 D2\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1500 525 C2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1575 1350 A2\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1575 2175 B2\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm_coupled.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm_factorial.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 1501.355 1323.343 675 450 300 1275 525 2025
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2263.600 1307.555 1650 525 1275 1200 1575 2025
+	0 0 1.00 60.00 120.00
+6 675 1050 2100 1500
+6 675 1050 2100 1500
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1275 1650 1275
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 1050 1050 1050 1050 1500 675 1500 675 1050
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1725 1050 2100 1050 2100 1500 1725 1500 1725 1050
+-6
+-6
+6 675 225 2100 675
+6 675 225 2100 675
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 450 1650 450
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 225 1050 225 1050 675 675 675 675 225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1725 225 2100 225 2100 675 1725 675 1725 225
+-6
+-6
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2100 300 225 825 2100 1125 2325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 2100 300 225 1875 2100 2175 2325
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1500 825 1875
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 1500 1875 1875
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 2175 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2250 Y2\001
+4 0 -1 0 0 0 12 0.0000 4 135 1185 675 2850 Factorial HMM\001
+4 0 0 100 0 0 12 0.0000 4 135 225 750 525 A1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1800 525 A2\001
+4 0 0 100 0 0 12 0.0000 4 135 210 750 1350 B1\001
+4 0 0 100 0 0 12 0.0000 4 135 210 1800 1350 B2\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm_factorial.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm_gauss.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 225 600 1875 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 1350 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 1050 525 1425
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1050 1575 1425
+-6
+4 0 -1 0 0 0 12 0.0000 4 165 225 450 900 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 375 1725 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1500 1725 Y2\001
+4 0 -1 0 0 0 12 0.0000 4 180 2130 150 2250 HMM with Gaussian output\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1500 900 Q2\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm_gauss.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm_io.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 1725.000 1200.000 600 450 375 1275 600 1950
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2859.375 1303.125 1650 525 1425 1200 1575 1950
+	0 0 1.00 60.00 120.00
+6 525 150 2175 2325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 2100 300 225 1875 2100 2175 2325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2100 300 225 825 2100 1125 2325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 900 375 300 225 900 375 1200 600
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 375 300 225 1875 375 2175 600
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1275 1650 1275
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 1050 1050 1050 1050 1500 675 1500 675 1050
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1500 825 1875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1725 1050 2100 1050 2100 1500 1725 1500 1725 1050
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 1500 1875 1875
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 675 825 1050
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 675 1875 1050
+-6
+4 0 -1 0 0 0 12 0.0000 4 165 225 750 1350 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1800 1350 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 750 450 U1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 750 2175 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1725 450 U2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1725 2175 Y2\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm_io.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm_mixgauss.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+6 675 1650 1275 2100
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 975 1875 300 225 975 1875 1275 2100
+4 0 -1 0 0 0 12 0.0000 4 135 225 825 1950 Y1\001
+-6
+6 1725 1725 2325 2175
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 2025 1950 300 225 2025 1950 2325 2175
+4 0 -1 0 0 0 12 0.0000 4 135 225 1950 2025 Y2\001
+-6
+6 1500 900 1875 1350
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1500 900 1875 900 1875 1350 1500 1350 1500 900
+4 0 -1 0 0 0 12 0.0000 4 135 255 1575 1200 M2\001
+-6
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1275 450 1800 450
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 825 225 1200 225 1200 675 825 675 825 225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1875 225 2250 225 2250 675 1875 675 1875 225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 225 900 600 900 600 1350 225 1350 225 900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 675 450 900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 1350 750 1650
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 675 1050 1650
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 675 1725 900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 1350 1950 1725
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 675 2100 1725
+4 0 -1 0 0 0 12 0.0000 4 165 225 900 525 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 135 255 300 1200 M1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1950 525 Q2\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm_mixgauss.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm_zoo.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,162 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 2784.375 4153.125 1575 3375 1350 4050 1500 4800
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 1650.000 4050.000 525 3300 300 4125 525 4800
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 6376.355 4323.343 5550 3450 5175 4275 5400 5025
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 7138.600 4307.555 6525 3525 6150 4200 6450 5025
+	1 1 1.00 60.00 120.00
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 750 4950 300 225 750 4950 1050 5175
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 1800 4950 300 225 1800 4950 2100 5175
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 825 3225 300 225 825 3225 1125 3450
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 1800 3225 300 225 1800 3225 2100 3450
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 3150 3150 300 225 3150 3150 3450 3375
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 4200 3150 300 225 4200 3150 4500 3375
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 3150 5625 300 225 3150 5625 3450 5850
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 4200 5625 300 225 4200 5625 4500 5850
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 5700 5100 300 225 5700 5100 6000 5325
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 6750 5100 300 225 6750 5100 7050 5325
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 3375 1800 300 225 3375 1800 3675 2025
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 4425 1875 300 225 4425 1875 4725 2100
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 5550 1425 300 225 5550 1425 5850 1650
+1 1 0 2 7 0 50 0 20 0.000 1 0.0000 6600 1425 300 225 6600 1425 6900 1650
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3150 3750 3150 3375
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6750 4500 6750 4875
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 4275 150 4650 150 4650 600 4275 600 4275 150
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3225 600 2850 825
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 600 3900 975 3900 975 4350 600 4350 600 3900
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 750 4350 750 4725
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 750 3525 750 3900
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 1800 4350 1800 4725
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 1050 4125 1575 4125
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 1800 3525 1800 3900
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 1650 3900 2025 3900 2025 4350 1650 4350 1650 3900
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 3000 3750 3375 3750 3375 4200 3000 4200 3000 3750
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3450 3975 3900 4725
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3450 3975 3975 3975
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 3000 4575 3375 4575 3375 5025 3000 5025 3000 4575
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3150 5025 3150 5400
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3450 4800 3975 4050
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3450 4800 3975 4800
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 4050 4575 4425 4575 4425 5025 4050 5025 4050 4575
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 4050 3750 4425 3750 4425 4200 4050 4200 4050 3750
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 4200 3750 4200 3375
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 4200 5025 4200 5400
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 5550 4050 5925 4050 5925 4500 5550 4500 5550 4050
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 5700 4500 5700 4875
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 3450 6525 3450
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 4275 6525 4275
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 6600 3225 6975 3225 6975 3675 6600 3675 6600 3225
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 6600 4050 6975 4050 6975 4500 6600 4500 6600 4050
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 825 825 1350 825
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 1575 1050 1575 1425
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 525 1050 525 1425
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 2625 825 3000 825 3000 1275 2625 1275 2625 825
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 2925 1275 3150 1575
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3450 600 3450 1575
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 3225 150 3600 150 3600 600 3225 600 3225 150
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 3675 375 4200 375
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 3900 825 4275 825 4275 1275 3900 1275 3900 825
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 600 4125 825
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 4200 1275 4350 1650
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 4500 600 4500 1650
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 5550 825 5550 1200
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 5400 375 5775 375 5775 825 5400 825 5400 375
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 5850 600 6375 600
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 6450 375 6825 375 6825 825 6450 825 6450 375
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 6600 825 6600 1200
+2 1 0 2 0 0 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 1.00 60.00 120.00
+	 5850 1425 6300 1425
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 5550 3225 5925 3225 5925 3675 5550 3675 5550 3225
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/hmm_zoo.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm_zoo_names.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,169 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 1650.000 4050.000 525 3300 300 4125 525 4800
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2784.375 4153.125 1575 3375 1350 4050 1500 4800
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 6376.355 4323.343 5550 3450 5175 4275 5400 5025
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 7138.600 4307.555 6525 3525 6150 4200 6450 5025
+	0 0 1.00 60.00 120.00
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 5550 1425 300 225 5550 1425 5850 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 6600 1425 300 225 6600 1425 6900 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1800 4950 300 225 1800 4950 2100 5175
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 3225 300 225 825 3225 1125 3450
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1800 3225 300 225 1800 3225 2100 3450
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3150 3150 300 225 3150 3150 3450 3375
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 4200 3150 300 225 4200 3150 4500 3375
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3150 5625 300 225 3150 5625 3450 5850
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 4200 5625 300 225 4200 5625 4500 5850
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 5700 5100 300 225 5700 5100 6000 5325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3375 1800 300 225 3375 1800 3675 2025
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 750 4950 300 225 750 4950 1050 5175
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 6750 5100 300 225 6750 5100 7050 5325
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 4425 1875 300 225 4425 1875 4725 2100
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1575 1650 300 225 1575 1650 1875 1875
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5850 600 6375 600
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 5400 375 5775 375 5775 825 5400 825 5400 375
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5550 825 5550 1200
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 6450 375 6825 375 6825 825 6450 825 6450 375
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6600 825 6600 1200
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5850 1425 6300 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 825 1350 825
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 1050 525 1425
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 1050 1575 1425
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 4125 1575 4125
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 600 3900 975 3900 975 4350 600 4350 600 3900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 750 4350 750 4725
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1650 3900 2025 3900 2025 4350 1650 4350 1650 3900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 4350 1800 4725
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 750 3525 750 3900
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 3525 1800 3900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3150 5025 3150 5400
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4200 5025 4200 5400
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3150 3750 3150 3375
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4200 3750 4200 3375
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 4800 3975 4050
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 3975 3900 4725
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 4800 3975 4800
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3000 4575 3375 4575 3375 5025 3000 5025 3000 4575
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 4050 4575 4425 4575 4425 5025 4050 5025 4050 4575
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 3975 3975 3975
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3000 3750 3375 3750 3375 4200 3000 4200 3000 3750
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 4050 3750 4425 3750 4425 4200 4050 4200 4050 3750
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5700 4500 5700 4875
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6750 4500 6750 4875
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6000 3450 6525 3450
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 5550 3225 5925 3225 5925 3675 5550 3675 5550 3225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 6600 3225 6975 3225 6975 3675 6600 3675 6600 3225
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6000 4275 6525 4275
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 5550 4050 5925 4050 5925 4500 5550 4500 5550 4050
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 6600 4050 6975 4050 6975 4500 6600 4500 6600 4050
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3675 375 4200 375
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3225 150 3600 150 3600 600 3225 600 3225 150
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 4275 150 4650 150 4650 600 4275 600 4275 150
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2625 825 3000 825 3000 1275 2625 1275 2625 825
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3225 600 2850 825
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2925 1275 3150 1575
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3450 600 3450 1575
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4275 600 4125 825
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4200 1275 4350 1650
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4500 600 4500 1650
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 3900 825 4275 825 4275 1275 3900 1275 3900 825
+4 0 -1 0 0 0 12 0.0000 4 180 2130 150 2400 HMM with Gaussian output\001
+4 0 -1 0 0 0 12 0.0000 4 180 1785 5100 2400 Auto Regressive HMM\001
+4 0 0 50 0 0 12 0.0000 4 180 1440 300 6075 Input-output HMM\001
+4 0 0 50 0 0 12 0.0000 4 180 1125 3000 6225 Coupled HMM\001
+4 0 -1 0 0 0 12 0.0000 4 135 1185 5475 6225 Factorial HMM\001
+4 0 0 50 0 0 12 0.0000 4 180 1530 2925 2625 of Gaussians output\001
+4 0 0 50 0 0 12 0.0000 4 135 1455 2925 2400 HMM with mixture\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/hmm_zoo_small.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,104 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+75.00
+Single
+-2
+1200 2
+5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 10209.375 1303.125 9000 525 8775 1200 8925 1950
+	0 0 2.00 120.00 240.00
+5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 9075.000 1200.000 7950 450 7725 1275 7950 1950
+	0 0 2.00 120.00 240.00
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 525 1650 300 225 525 1650 825 1875
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 1590 1654 300 225 1590 1654 1890 1879
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 3375 1800 300 225 3375 1800 3675 2025
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 4427 1882 300 225 4427 1882 4727 2107
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 5925 1800 300 225 5925 1800 6225 2025
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 6975 1800 300 225 6975 1800 7275 2025
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 8173 2107 300 225 8173 2107 8473 2332
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 9225 2100 300 225 9225 2100 9525 2325
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 8250 375 300 225 8250 375 8550 600
+1 1 0 2 0 0 50 0 20 0.000 1 0.0000 9225 375 300 225 9225 375 9525 600
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 1575 1050 1575 1425
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 825 825 1350 825
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 525 1050 525 1425
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 375 600 750 600 750 1050 375 1050 375 600
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 1425 600 1800 600 1800 1050 1425 1050 1425 600
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 3450 600 3450 1575
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 3225 600 2850 825
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 2625 825 3000 825 3000 1275 2625 1275 2625 825
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 3225 150 3600 150 3600 600 3225 600 3225 150
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 3675 375 4200 375
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 3900 825 4275 825 4275 1275 3900 1275 3900 825
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 4200 1275 4350 1650
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 4500 600 4500 1650
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 4275 150 4650 150 4650 600 4275 600 4275 150
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	0 0 2.00 120.00 240.00
+	 4275 600 3975 825
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	0 0 2.00 120.00 240.00
+	 2925 1275 3225 1575
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 8175 675 8175 1050
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 9225 675 9225 1050
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 9225 1500 9225 1875
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 8475 1275 9000 1275
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 8175 1500 8175 1875
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 8025 1050 8400 1050 8400 1500 8025 1500 8025 1050
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 9075 1050 9450 1050 9450 1500 9075 1500 9075 1050
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 5925 1200 5925 1575
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 6225 975 6750 975
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 6225 1800 6675 1800
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 6975 1200 6975 1575
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 6825 750 7200 750 7200 1200 6825 1200 6825 750
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 5775 750 6150 750 6150 1200 5775 1200 5775 750
+4 0 0 50 0 0 24 0.0000 4 255 945 375 2400 HMM\001
+4 0 0 50 0 0 24 0.0000 4 255 2580 2625 2475 MixGauss HMM\001
+4 0 0 50 0 0 24 0.0000 4 255 1470 8025 2700 IO-HMM\001
+4 0 0 50 0 0 24 0.0000 4 255 1575 5625 2475 AR-HMM\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/ifa.eps	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,470 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (ifa.eps)
+%%CreationDate: (Tue Nov 16 19:52:10 2004)
+%%BoundingBox: 0 0 246 221
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image.  The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+  %
+  % Get a DirectClass packet.
+  %
+  % Parameters:
+  %   red.
+  %   green.
+  %   blue.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+  %
+  % Display a DirectClass image.
+  %
+  systemdict /colorimage known
+  {
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { DirectClassPacket } false 3 colorimage
+  }
+  {
+    %
+    % No colorimage operator;  convert to grayscale.
+    %
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { GrayDirectClassPacket } image
+  } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+  %
+  % Get a DirectClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   red
+  %   green
+  %   blue
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+  %
+  % Display a PseudoClass image.
+  %
+  % Parameters:
+  %   class: 0-PseudoClass or 1-Grayscale.
+  %
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  class 0 gt
+  {
+    currentfile buffer readline pop
+    token pop /depth exch def pop
+    /grays columns 8 add depth sub depth mul 8 idiv string def
+    columns rows depth
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { currentfile grays readhexstring pop } image
+  }
+  {
+    %
+    % Parameters:
+    %   colors: number of colors in the colormap.
+    %   colormap: red, green, blue color packets.
+    %
+    currentfile buffer readline pop
+    token pop /colors exch def pop
+    /colors colors 3 mul def
+    /colormap colors string def
+    currentfile colormap readhexstring pop pop
+    systemdict /colorimage known
+    {
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { PseudoClassPacket } false 3 colorimage
+    }
+    {
+      %
+      % No colorimage operator;  convert to grayscale.
+      %
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { GrayPseudoClassPacket } image
+    } ifelse
+  } ifelse
+} bind def
+
+/DisplayImage
+{
+  %
+  % Display a DirectClass or PseudoClass image.
+  %
+  % Parameters:
+  %   x & y translation.
+  %   x & y scale.
+  %   label pointsize.
+  %   image label.
+  %   image columns & rows.
+  %   class: 0-DirectClass or 1-PseudoClass.
+  %   compression: 0-none or 1-RunlengthEncoded.
+  %   hex color packets.
+  %
+  gsave
+  /buffer 512 string def
+  /byte 1 string def
+  /color_packet 3 string def
+  /pixels 768 string def
+
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  x y translate
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  currentfile buffer readline pop
+  token pop /pointsize exch def pop
+  /Times-Roman findfont pointsize scalefont setfont
+  x y scale
+  currentfile buffer readline pop
+  token pop /columns exch def
+  token pop /rows exch def pop
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  currentfile buffer readline pop
+  token pop /compression exch def pop
+  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+  grestore
+} bind def
+%%EndProlog
+%%Page:  1 1
+%%PageBoundingBox: 0 0 246 221
+userdict begin
+DisplayImage
+0 0
+246 221
+12.000000
+246 221
+1
+1
+1
+1
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffc00000007f
+ffffffffffffffffff00000001fffffffffffffffffcffffffffdfffffff7fffffffffff
+ffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7f
+fffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdffff
+fffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdffffffffffffff
+fffcffffffffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffff
+ffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff
+7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffff
+ffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff
+7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdff
+fffffffffffffffcffffffffdf87dfff7fffffffffffffffffff7e1ffffdffffffffffff
+fffffcffffffffdf339fff7fffffffffffffffffff7ccffffdfffffffffffffffffcffff
+ffffdf7b5fff7fffffffffffffffffff7deffffdfffffffffffffffffcffffffffdefddf
+ff7fffffffffffffffffff7bf53ffdfffffffffffffffffcffffffffdefddfff7fffffff
+ffffffffffff7bf6dffdfffffffffffffffffcffffffffdefddfff7fffffffffffffffff
+ff7bf6dffdfffffffffffffffffcffffffffdf7bdfff7fffffffffffffffffff7deedffd
+fffffffffffffffffcffffffffdf33dfff7fffffffffffffffffff7ccedffdffffffffff
+fffffffcffffffffdf878fff7fffffffffffffffffff7e1c4ffdfffffffffffffffffcff
+ffffffdfe7ffff7fffffffffffffffffff7f9ffffdfffffffffffffffffcffffffffdff9
+ffff7fffffffffffffffffff7fe7fffdfffffffffffffffffcffffffffdfffffff7fffff
+ffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffff
+ffff7ffffffdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7fffff
+fdfffffffffffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdffffffff
+fffffffffcffffffffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffc
+ffffffffdfffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdf
+ffffff7fffffffffffffffffff7ffffffdfffffffffffffffffcffffffffdfffffff7fff
+ffffffffffffffff7ffffffdfffffffffffffffffcffffffffc00000007fffffffffffff
+ffffff00000001fffffffffffffffffcffffffffffffbffffffffffffffffffffffffffe
+fffffffffffffffffffffcffffffffffffbffffffffffffffffffffffffffeffffffffff
+fffffffffffcffffffffffffbffffffffffffffffffffffffffeffffffffffffffffffff
+fcffffffffffffbffffffffffffffffffffffffffefffffffffffffffffffffcffffffff
+fffeaffffffffffffffffffffffffffabffffffffffffffffffffcfffffffffffeafffff
+fffffffffffffffffffffabffffffffffffffffffffcfffffffffffe9fffffffffffffff
+fffffffffffa7ffffffffffffffffffffcffffffffffff1fffffffffffffffffffffffff
+fc7ffffffffffffffffffffcffffffffffff1ffffffffffffffffffffffffffc7fffffff
+fffffffffffffcffffffffffff1ffffffffffffffffffffffffffc7fffffffffffffffff
+fffcffffffffffff3ffffffffffffffffffffffffffcfffffffffffffffffffffcffffff
+ffffffbffffffffffffffffffffffffffefffffffffffffffffffffcffffffffffffbfff
+fffffffffffffffffffffffefffffffffffffffffffffcffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffcffffffffffff800fffffffffffffffffffff
+f800fffffffffffffffffffffcfffffffffffc7ff1ffffffffffffffffffffc7ff1fffff
+fffffffffffffffcffffffffffe3fffe3ffffffffffffffffffe3fffe3ffffffffffffff
+fffffcffffffffffdfffffdffffffffffffffffffdfffffdfffffffffffffffffffcffff
+ffffff3fffffe7fffffffffffffffff3fffffe7ffffffffffffffffffcfffffffffeffff
+fffbffffffffffffffffefffffffbffffffffffffffffffcfffffffffdfffffffdffffff
+ffffffffffdfffffffdffffffffffffffffffcfffffffffbfffffffeffffffffffffffff
+bfffffffeffffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7ffffffff7
+fffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7ffffffff7ffffffffff
+fffffffcffffffffefffffffffbffffffffffffffefffffffffbfffffffffffffffffcff
+ffffffefff8c6fffbffffffffffffffeff18fffffbfffffffffffffffffcffffffffdfff
+decfffdffffffffffffffdffbdfffffdfffffffffffffffffcffffffffdfffedafffdfff
+fffffffffffdffdbfffffdfffffffffffffffffcffffffffdfffe3efffdfffffffffffff
+fdffc74ffffdfffffffffffffffffcffffffffdffff3efffdffffffffffffffdffe7b7ff
+fdfffffffffffffffffcffffffffdfffe9efffdffffffffffffffdffd3b7fffdffffffff
+fffffffffcffffffffdfffedefffdffffffffffffffdffdbb7fffdfffffffffffffffffc
+ffffffffdfffdeefffdffffffffffffffdffbdb7fffdfffffffffffffffffcffffffffef
+ff8c47ffbffffffffffffffeff1813fffbfffffffffffffffffcffffffffefffffffffbf
+fffffffffffffefffffffffbfffffffffffffffffcfffffffff7ffffffff7fffffffffff
+ffff7ffffffff7fffffffffffffffffcfffffffff7ffffffff7fffffffffffffff7fffff
+fff7fffffffffffffffffcfffffffffbfffffffeffffff3cf3ffffffbfffffffefffffff
+fffffffffffcfffffffffdfffffffdffffff3cf3ffffffdfffffffdfffffffffffffffff
+fcfffffffffefffffff9ffffffffffffffffefffffffbffffffffffffffffffcffffffff
+ff3fffffe67ffffffffffffffff3fffffe7ffffffffffffffffffcffffffffffdfffffdf
+8ffffffffffffffffdfffffdfffffffffffffffffffcffffffffffe3fffe3ff3ffffffff
+fffffffe3fffe3fffffffffffffffffffcfffffffffffc7ff1fffc7fffffffffffffffc7
+ff1ffffffffffffffffffffcfffffffffff7800f7fff9ffffffffffffffff000f7ffffff
+fffffffffffffcfffffffffff7ffff7fffe3ffffffffffffff87fffbffffffffffffffff
+fffcffffffffffefffffbffffcfffffffffffffe5ffffdfffffffffffffffffffcffffff
+ffffefffffbfffff1ffffffffffff13ffffefffffffffffffffffffcffffffffffdfffff
+dfffffe7ffffffffff8effffff7ffffffffffffffffffcffffffffffdfffffdffffff8ff
+fffffffc7dffffffbffffffffffffffffffcffffffffffdfffffefffffff3ffffffff3f3
+ffffffdffffffffffffffffffcffffffffffbfffffefffffffc7ffffff8fefffffffefff
+fffffffffffffffcffffffffffbffffff7fffffff9fffffc7f9ffffffff7ffffffffffff
+fffffcffffffffffbffffff7fffffffe3fffe3ff7ffffffffbfffffffffffffffffcffff
+ffffff7ffffffbffffffffcfff9ffcfffffffffdfffffffffffffffffcffffffffff7fff
+fffbfffffffff1fc7ffbfffffffffefffffffffffffffffcfffffffffefffffffdffffff
+fffe63fff7ffffffffff7ffffffffffffffffcfffffffffefffffffdffffffffff0fffcf
+ffffffffffbffffffffffffffffcfffffffffefffffffefffffffffcf3ffbfffffffffff
+dffffffffffffffffcfffffffffdfffffffeffffffffe3fc7e7fffffffffffefffffffff
+fffffffcfffffffffdffffffff7fffffff1fff9dfffffffffffff7fffffffffffffffcff
+fffffffdffffffff7ffffff8ffffe3fffffffffffffbfffffffffffffffcfffffffffbff
+ffffffbfffffe7ffffecfffffffffffffdfffffffffffffffcfffffffffbffffffffbfff
+ff1fffffdf1ffffffffffffefffffffffffffffcfffffffff7ffffffffdffff8ffffff3f
+e7ffffffffffff7ffffffffffffffcfffffffff7ffffffffdfffc7fffffefff8ffffffff
+ffffbffffffffffffffcfffffffff7ffffffffefff3ffffff9ffff3fffffffffffdfffff
+fffffffffcffffffffefffffffffeff8fffffff7ffffc7ffffffffffeffffffffffffffc
+ffffffffeffffffffff7c7ffffffcffffff9fffffffffff7fffffffffffffcffffffffef
+fffffffff63fffffffbffffffe3ffffffffffbfffffffffffffcffffffffdffffffffff9
+ffffffff7fffffffcffffffffffdfffffffffffffcffffffffdfffffffffc3fffffffcff
+fffffff1fffffffffefffffffffffffcffffffffbffffffffe3dffffffdbfffffffffe7f
+ffffffff7ffffffffffffcffffffffbffffffff1fdffffffa7ffffffffff8fffffffffbf
+fffffffffffcfffffffebfffffffcffebfffff5ffffffffffff3ffffffffdfffffffffff
+fcfffffffe7ffffffe3ffebffffe27fffffffffffc7fffffffeffffffffffffcfffffffe
+5ffffff1fffd3ffffe9fffffffffffff9ffffffff6fffffffffffcfffffffe3fffff8fff
+fe5ffffc7fffffffffffffe3fffffffb7ffffffffffcfffffffcbffffe7fffff1ffff9ff
+fffffffffffffcfffffffd7ffffffffffcfffffffc7fff71ffffff1fffffffffffffffff
+ffff1ffffff6bffffffffffcfffffffcfffc8fffffff9fffffffffffffffffffffe7ffff
+f93ffffffffffcfffffffcfff07fffffffcffffffffffffffffffffff8fffffe1fffffff
+fffcfffffffdffc3ffffffffefffffffffffffffffffffff3fffff9ffffffffffcffffff
+ffff803fffffffffffffffffffffffffffffffc7ffffeffffffffffcffffff001fffffff
+ffffff800ffffffffffffffffffff9dffff800fffffffcfffff8ffe3fffffffffffc7ff1
+fffffffffffffffffffe27ffc7ff1ffffffcffffc6eeec7fffffffffe377763fffffffff
+ffffffffffcbfe377763fffffcffffbfffffbfffffffffdfffffdfffffffffffffffffff
+00fdfffffdfffffcfffe3bbfbb8fffffffff1ddfddc7fffffffffffffffffff871ddfddc
+7ffffcfffdfffffff7fffffffefffffffbffffffffffffffffffffefffffffbffffcfffa
+eeeeeeebfffffffd77777775ffffffffffffffffffffd77777775ffffcfff7fffffffdff
+fffffbfffffffeffffffffffffffffffffbfffffffeffffcffebfbfbfbfafffffff5fdfd
+fdfd7fffffffffffffffffff5fdfdfdfd7fffcffeffffffffefffffff7ffffffff7fffff
+ffffffffffffff7ffffffff7fffcffceeeeeeeee7fffffe7777777773fffffffffffffff
+fffe7777777773fffcffdfe38dffff7fffffeff1c47fffbffffffffffffffffffefe38ff
+fffbfffcffbfb799bfbfbfffffdfdbcb9fdfdffffffffffffffffffdfd7dfdfdfdfffcff
+bffbb5ffffbfffffdffddfbfffdfffff3cf3fffffffffdffbbfffffdfffcffaeecaceeee
+bfffffd7765737775fffff3cf3fffffffffd7753417775fffcffbffc7dffff8000001ffe
+3f7fffdfffffffffffff800001ffc7b6fffdfffcffbbfaf9fbfbbfffffddfd7cfdfddfff
+fffffffffffffffddfcf96dfddfffcffbffefdffffbfffffdfff7dffffdfffffffffffff
+fffffdffefb6fffdfffcffaeeeeceeeebfffffd7777337775ffffffffffffffffffd7767
+367775fffcffdffc78ffff7fffffeffe383fffbffffffffffffffffffeffc7127ffbfffc
+ffdfbbbfbbbf7fffffefdddfdddfbffffffffffffffffffefdddfdddfbfffcffefffffff
+fefffffff7ffffffff7fffffffffffffffffff7ffffffff7fffcffeeeeeeeeeefffffff7
+777777777fffffffffffffffffff7777777777fffcfff7fffffffdfffffffbfffffffeff
+ffffffffffffffffffbfffffffeffffcfffbfbfbfbfbfffffffdfdfdfdfdffffffffffff
+ffffffffdfdfdfdfdffffcfffdfffffff7fffffffefffffffbffffffffffffffffffffef
+ffffffbffffcfffe6eeeeecfffffffff37777763ffffffffffffffffffffe37777767fff
+fcffffbfffffbfffffffffdfffffddffffffffffffffffffffddfffffdfffffcffffc7bf
+bc7fffffffffe3dfde3e7fffffffffffffffffff3e3dfde3fffffcfffff8ffe3ffffffff
+fffc7ff1ffbffffffffffffffffffeffc7ff1ffffffcffffff001effffffffffff800fff
+cffffffffffffffffff9fff800fffffffcffffffffff7ffffffffffffffffff7ffffffff
+fffffffff7ffff7ffffffffcffffffffff9ffffffffffffffffff9ffffffffffffffffcf
+fffcfffffffffcffffffffffeffffffffffffffffffe7fffffffffffffff3ffffbffffff
+fffcfffffffffff7ffffffffffffffffff9ffffffffffffffcfffff7fffffffffcffffff
+fffff9ffffffffffffffffffe7fffffffffffff3ffffcffffffffffcfffffffffffeffff
+fffffffffffffff9ffffffffffffcfffffbffffffffffcffffffffffff3fffffffffffff
+fffffe3ffffffffffe3ffffe7ffffffffffcffffffffffffdfffffffffffffffffffc7ff
+fffffff1fffffdfffffffffffcffffffffffffe7fffffffffffffffffff87fffffff0fff
+fff3fffffffffffcfffffffffffffbffffffffffffffffffff83ffffe0ffffffefffffff
+fffffcfffffffffffffcfffffffffffffffffffffc00001fffffff9ffffffffffffcffff
+ffffffffff3ffffffffffffffffffffffffffffffffe7ffffffffffffcffffffffffffff
+cffffffffffffffffffffffffffffffff9fffffffffffffcfffffffffffffff7ffffffff
+fffffffffffffffffffffff7fffffffffffffcfffffffffffffff9ffffffffffffffffff
+ffffffffffffcffffffffffffffcfffffffffffffffe7fffffffffffffffffffffffffff
+ff3ffffffffffffffcffffffffffffffff8ffffffffffffffffffffffffffff8ffffffff
+fffffffcfffffffffffffffff3ffffffffffffffffffffffffffe7fffffffffffffffcff
+fffffffffffffffcffffffffffffffffffffffffff9ffffffffffffffffcffffffffffff
+ffffff1ffffffffffffffffffffffffc7ffffffffffffffffcffffffffffffffffffe7ff
+fffffffffffffffffffff3fffffffffffffffffcfffffffffffffffffff8ffffffffffff
+ffffffffff8ffffffffffffffffffcffffffffffffffffffff1ffffffffffffffffffffc
+7ffffffffffffffffffcffffffffffffffffffffe3ffffffffffffffffffe3ffffffffff
+fffffffffcfffffffffffffffffffffc3ffffffffffffffffe1ffffffffffffffffffffc
+ffffffffffffffffffffffc3ffffffffffffffe1fffffffffffffffffffffcffffffffff
+fffffffffffffc3ffffffffffffe1ffffffffffffffffffffffcffffffffffffffffffff
+ffffc0ffffffffff81fffffffffffffffffffffffcffffffffffffffffffffffffff00ff
+ffff807ffffffffffffffffffffffffcffffffffffffffffffffffffffff0000007fffff
+fffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffff
+fffff1ff9ffffffe7ffff80ffffffffbfffcfffdfffffffffffffffcfffffffffffbffdf
+ffffff7ffffdeffffffffbfffefffffffffffffffffffcfffffffffffbffdfffffff7ffe
+fdffffbffff5fffefffffffffffffffffffcfffffffffffb4f1cc3cd3c734c3dde790cd3
+f5d3ce9989c7fffffffffffffcfffffffffffbb6db6db6db6db6fc1db6bb67eeedb6db6d
+b7fffffffffffffcfffffffffffbb6d86d86db61b6fdde37bb6fe0edc6d33d9fffffffff
+fffffcfffffffffffbb6dbedbedb6fb6fdfdb7bb6feeedb6d7cde7fffffffffffffcffff
+fffffffbb6d9ad9adb66b6fdfdb6bb6fdf6db6e76db7fffffffffffffcfffffffffff113
+2c63c44cb113387e59ccc78e04c86f188ffffffffffffffcffffffffffffffffefffffff
+ffffffffffffffffffeffffffffffffffffffcffffffffffffffffefffffffffffffffff
+ffffffffdffffffffffffffffffcffffffffffffffffc7ffffffffffffffffffffffff9f
+fffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffc
+end
+%%PageTrailer
+%%Trailer
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/ifa.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 0 0 2362.500 1537.500 1725 2325 2400 2550 3000 2325
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 0 0 1950.000 818.750 675 2400 1950 2850 3225 2400
+6 225 900 3600 2475
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 900 1125 300 225 900 1125 1200 1350
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2400 1125 300 225 2400 1125 2700 1350
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 2175 300 225 525 2175 825 2400
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3240 2179 300 225 3240 2179 3540 2404
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1500 2175 300 225 1500 2175 1800 2400
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 750 1350 525 1950
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1275 3000 2025
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2325 1350 675 1950
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2550 1350 3150 1950
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 1350 1350 1950
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2325 1350 1575 1875
+4 0 -1 0 0 0 12 0.0000 4 135 225 825 1200 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2250 1200 Xn\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 375 2250 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 270 3075 2250 Ym\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 1500 1275 ...\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1350 2250 Y2\001
+4 0 -1 0 0 0 24 0.0000 4 30 270 2100 2175 ...\001
+-6
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 600 225 1050 225 1050 675 600 675 600 225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2250 225 2700 225 2700 675 2250 675 2250 225
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 675 825 900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2475 675 2475 900
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 825 2175 1200 2175
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 2625 2175 2925 2175
+4 0 -1 0 0 0 12 0.0000 4 165 225 675 525 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 2325 525 Qn\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/ifa.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/kf.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 225 225 1950 2250
+6 225 225 1950 675
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 525 450 300 225 525 450 825 675
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1650 450 300 225 1650 450 1950 675
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 450 1350 450
+-6
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 525 1575 300 225 525 1575 825 1800
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1650 1575 300 225 1650 1575 1950 1800
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 750 525 1275
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1650 750 1650 1275
+4 0 -1 0 0 0 12 0.0000 4 135 1455 225 2250 Kalman filter model\001
+-6
+4 0 -1 0 0 0 12 0.0000 4 135 210 375 525 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1500 525 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 375 1650 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1500 1650 Y2\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/kf.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/kf_input.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 100 0 -1 0.000 0 1 1 0 3131.250 1462.500 1575 450 1275 1425 1575 2475
+	0 0 1.00 60.00 120.00
+5 1 0 1 0 7 100 0 -1 0.000 0 1 1 0 4272.606 1559.043 2775 525 2475 1275 2700 2475
+	0 0 1.00 60.00 120.00
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1875 2550 300 225 1875 2550 2175 2775
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3000 2550 300 225 3000 2550 3300 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1875 1425 300 225 1875 1425 2175 1650
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3000 1425 300 225 3000 1425 3300 1650
+1 1 0 1 0 0 100 0 2 0.000 1 0.0000 1875 375 300 225 1875 375 2175 600
+1 1 0 1 0 0 100 0 2 0.000 1 0.0000 3000 375 300 225 3000 375 3300 600
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 1725 1875 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3000 1725 3000 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2175 1425 2700 1425
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1875 600 1875 1200
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3000 600 3000 1200
+4 0 -1 0 0 0 12 0.0000 4 135 225 1725 1500 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2850 1500 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1725 2625 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2850 2625 Y2\001
+4 0 0 100 0 0 12 0.0000 4 135 225 1725 450 U1\001
+4 0 0 100 0 0 12 0.0000 4 135 225 2850 450 U2\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/kf_input.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/kf_notime.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 1 0 2 0 0 100 0 2 0.000 1 0.0000 525 1575 300 225 525 1575 825 1800
+1 1 0 2 0 0 100 0 2 0.000 1 0.0000 1650 1575 300 225 1650 1575 1950 1800
+1 1 0 2 0 0 100 0 -1 0.000 1 0.0000 525 450 300 225 525 450 825 675
+1 1 0 2 0 0 100 0 -1 0.000 1 0.0000 1650 450 300 225 1650 450 1950 675
+2 1 0 2 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 525 750 525 1275
+2 1 0 2 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 1650 750 1650 1275
+2 1 0 2 0 0 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 2.00 120.00 240.00
+	 825 450 1350 450
+4 0 0 100 0 0 20 0.0000 4 195 210 375 525 X\001
+4 0 0 100 0 0 20 0.0000 4 195 210 1500 525 X\001
+4 0 0 100 0 0 20 0.0000 4 195 210 1500 1650 Y\001
+4 0 0 100 0 0 20 0.0000 4 195 210 375 1650 Y\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/kf_obs_track.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 1500 335 335 1200 1200 1500 1800
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 2700 335 335 1200 2400 1500 3000
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 3900 335 335 1200 3600 1500 4200
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 5100 335 335 1200 4800 1500 5400
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 5100 335 335 2700 4800 3000 5400
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 3900 335 335 2700 3600 3000 4200
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 2700 335 335 2700 2400 3000 3000
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 1500 335 335 2700 1200 3000 1800
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 1500 2550 1500
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 2700 2550 1650
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 3900 2475 3900
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 5100 2625 4125
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 5100 2475 5100
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 2700 2550 2700
+4 0 0 100 0 0 20 0.0000 4 195 405 1125 2850 dx1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 1125 4050 x2\001
+4 0 0 100 0 0 20 0.0000 4 195 405 1200 5175 dx2\001
+4 0 0 100 0 0 20 0.0000 4 195 270 1200 1650 x1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 2700 1650 x1\001
+4 0 0 100 0 0 20 0.0000 4 195 405 2700 2850 dx1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 2700 4050 x2\001
+4 0 0 100 0 0 20 0.0000 4 195 405 2700 5250 dx2\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/kf_scalar_track.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 2726.786 5448.214 1125 4125 675 5775 1050 6675
+	0 0 4.00 120.00 240.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 6809.923 4980.705 1050 1725 225 5625 975 8100
+	0 0 4.00 120.00 240.00
+5 1 0 2 0 7 100 0 -1 0.000 0 0 1 0 1778.571 5400.000 3225 3900 3750 6075 3225 6900
+	0 0 4.00 120.00 240.00
+5 1 0 2 0 7 100 0 -1 0.000 0 0 1 0 -75.000 4837.500 3225 1500 4575 5475 3225 8175
+	0 0 4.00 120.00 240.00
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 1500 335 335 1200 1200 1500 1800
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 2700 335 335 1200 2400 1500 3000
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 3900 335 335 1200 3600 1500 4200
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 1350 5100 335 335 1200 4800 1500 5400
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 5100 335 335 2700 4800 3000 5400
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 3900 335 335 2700 3600 3000 4200
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 2700 335 335 2700 2400 3000 3000
+1 4 0 2 0 7 100 0 -1 0.000 1 0.0000 2850 1500 335 335 2700 1200 3000 1800
+1 4 0 2 0 0 100 0 2 0.000 1 0.0000 1350 6900 335 335 1200 6600 1500 7200
+1 4 0 2 0 0 100 0 2 0.000 1 0.0000 2850 6900 335 335 2700 6600 3000 7200
+1 4 0 2 0 0 100 0 2 0.000 1 0.0000 2850 8100 335 335 2700 7800 3000 8400
+1 4 0 2 0 0 100 0 2 0.000 1 0.0000 1350 8100 335 335 1200 7800 1500 8400
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 1500 2550 1500
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 2700 2550 1650
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 3900 2475 3900
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 5100 2625 4125
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 5100 2475 5100
+2 1 0 2 0 0 100 0 2 0.000 0 0 -1 1 0 2
+	0 0 4.00 120.00 240.00
+	 1725 2700 2550 2700
+4 0 0 100 0 0 20 0.0000 4 195 405 1125 2850 dx1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 1125 4050 x2\001
+4 0 0 100 0 0 20 0.0000 4 195 405 1200 5175 dx2\001
+4 0 0 100 0 0 20 0.0000 4 195 270 1200 1650 x1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 2700 1650 x1\001
+4 0 0 100 0 0 20 0.0000 4 195 405 2700 2850 dx1\001
+4 0 0 100 0 0 20 0.0000 4 195 270 2700 4050 x2\001
+4 0 0 100 0 0 20 0.0000 4 195 405 2700 5250 dx2\001
+4 0 0 100 0 0 20 0.0000 4 255 270 1200 6975 y2\001
+4 0 0 100 0 0 20 0.0000 4 255 270 1200 8175 y1\001
+4 0 0 100 0 0 20 0.0000 4 255 270 2700 7050 y2\001
+4 0 0 100 0 0 20 0.0000 4 255 270 2700 8175 y1\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/kfhead.jpg has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/mathbymatlab.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/mcmc_accept.jpg has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/mcmc_post.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/mfa.eps	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,347 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (mfa.eps)
+%%CreationDate: (Tue Nov 16 19:52:06 2004)
+%%BoundingBox: 0 0 126 151
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image.  The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+  %
+  % Get a DirectClass packet.
+  %
+  % Parameters:
+  %   red.
+  %   green.
+  %   blue.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+  %
+  % Display a DirectClass image.
+  %
+  systemdict /colorimage known
+  {
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { DirectClassPacket } false 3 colorimage
+  }
+  {
+    %
+    % No colorimage operator;  convert to grayscale.
+    %
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { GrayDirectClassPacket } image
+  } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+  %
+  % Get a DirectClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   red
+  %   green
+  %   blue
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+  %
+  % Display a PseudoClass image.
+  %
+  % Parameters:
+  %   class: 0-PseudoClass or 1-Grayscale.
+  %
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  class 0 gt
+  {
+    currentfile buffer readline pop
+    token pop /depth exch def pop
+    /grays columns 8 add depth sub depth mul 8 idiv string def
+    columns rows depth
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { currentfile grays readhexstring pop } image
+  }
+  {
+    %
+    % Parameters:
+    %   colors: number of colors in the colormap.
+    %   colormap: red, green, blue color packets.
+    %
+    currentfile buffer readline pop
+    token pop /colors exch def pop
+    /colors colors 3 mul def
+    /colormap colors string def
+    currentfile colormap readhexstring pop pop
+    systemdict /colorimage known
+    {
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { PseudoClassPacket } false 3 colorimage
+    }
+    {
+      %
+      % No colorimage operator;  convert to grayscale.
+      %
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { GrayPseudoClassPacket } image
+    } ifelse
+  } ifelse
+} bind def
+
+/DisplayImage
+{
+  %
+  % Display a DirectClass or PseudoClass image.
+  %
+  % Parameters:
+  %   x & y translation.
+  %   x & y scale.
+  %   label pointsize.
+  %   image label.
+  %   image columns & rows.
+  %   class: 0-DirectClass or 1-PseudoClass.
+  %   compression: 0-none or 1-RunlengthEncoded.
+  %   hex color packets.
+  %
+  gsave
+  /buffer 512 string def
+  /byte 1 string def
+  /color_packet 3 string def
+  /pixels 768 string def
+
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  x y translate
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  currentfile buffer readline pop
+  token pop /pointsize exch def pop
+  /Times-Roman findfont pointsize scalefont setfont
+  x y scale
+  currentfile buffer readline pop
+  token pop /columns exch def
+  token pop /rows exch def pop
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  currentfile buffer readline pop
+  token pop /compression exch def pop
+  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+  grestore
+} bind def
+%%EndProlog
+%%Page:  1 1
+%%PageBoundingBox: 0 0 126 151
+userdict begin
+DisplayImage
+0 0
+126 151
+12.000000
+126 151
+1
+1
+1
+1
+fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff
+fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc
+ff8000001fffffffffffff800ffffffcffbfffffdffffffffffffc7ff1fffffcffbfffff
+dfffffffffffe3fffe3ffffcffbfffffdfffffffffffdfffffdffffcffbfffffdfffffff
+ffff3fffffe7fffcffbfffffdffffffffffefffffffbfffcffbfffffdffffffffffdffff
+fffdfffcffbfffffdffffffffffbfffffffefffcffbfffffdffffffffff7ffffffff7ffc
+ffbfffffdffffffffff7ffffffff7ffcffbfffffdfffffffffefffffffffbffcffbf0fff
+dfffffffffeff18fffffbffcffbe67ffdfffffffffdffbdfffffdffcffbef7ffdfffffff
+ffdffdbfffffdffcffbdfbffdfffffffffdffc7fffffdffcffbdfbffdfffffffffdffe7f
+ffffdffcffbdfbffdfffffffffdffd3fffffdffcffbef7ffdfffffffffdffdbfffffdffc
+ffbe67ffdfffffffffdffbdfffffdffcffbf0fffdfffffffffeff18fffffbffcffbfcfff
+dfffffffffefffffffffbffcffbff3ffdffffffffff7ffffffff7ffcffbfffffdfffffff
+fff7ffffffff7ffcffbfffffdffffffffffbfffffffefffcffbfffffdffffffffffdffff
+fffdfffcffbfffffdffffffffffefffffffbfffcffbfffffdfffffffffff3fffffe7fffc
+ffbfffffdfffffffffffdfffffdffffcffbfffffdfffffffffffe3fffe3ffffcffbfffff
+dffffffffffffc7ff1fffffcff8000001fffffffffffff800ffffffcfffffffdffffffff
+ffffff7ffffffffcfffffffdffffffffffffff7ffffffffcfffffffefffffffffffffeff
+fffffffcffffffff7ffffffffffffdfffffffffcffffffffbffffffffffffbfffffffffc
+ffffffffbffffffffffffbfffffffffcffffffffdffffffffffff7fffffffffcffffffff
+efffffffffffeffffffffffcffffffffefffffffffffeffffffffffcfffffffff7ffffff
+ffffdffffffffffcfffffffffbffffffffffbffffffffffcfffffffffdffffffffff7fff
+fffffffcfffffffffdffffffffff7ffffffffffcfffffffffefffffffffefffffffffffc
+ffffffffff7ffffffffdfffffffffffcffffffffff7ffffffffdfffffffffffcffffffff
+ffbffffffffbfffffffffffcffffffffffdffffffff7fffffffffffcffffffffffefffff
+ffeffffffffffffcffffffffffefffffffeffffffffffffcfffffffffff7ffffffdfffff
+fffffffcfffffffffffbffffffbffffffffffffcfffffffffffbffffffbffffffffffffc
+fffffffffffdffffff7ffffffffffffcfffffffffffefffffefffffffffffffcffffffff
+ffff5ffff5fffffffffffffcffffffffffff5ffff5fffffffffffffcfffffffffffeafff
+eafffffffffffffcffffffffffff4fffe5fffffffffffffcffffffffffff8fffd3ffffff
+fffffffcffffffffffffc7ffc7fffffffffffffcffffffffffffe7ffcffffffffffffffc
+fffffffffffff3ff9ffffffffffffffcfffffffffffffbffbffffffffffffffcffffffff
+fffffc007ffffffffffffffcffffffffffffe3ff8ffffffffffffffcffffffffffff1bbb
+b1fffffffffffffcfffffffffffefffffefffffffffffffcfffffffffff8eefeee3fffff
+fffffffcfffffffffff7ffffffdffffffffffffcffffffffffebbbbbbbaffffffffffffc
+ffffffffffdffffffff7fffffffffffcffffffffffafefefefebfffffffffffcffffffff
+ffbffffffffbfffffffffffcffffffffff3bbbbbbbb9fffffffffffcffffffffff7f8e3f
+fffdfffffffffffcfffffffffefede7efefefffffffffffcfffffffffeffeefffffeffff
+fffffffcfffffffffebbb2bbbbbafffffffffffcfffffffffefff1fffffefffffffffffc
+fffffffffeefebefefeefffffffffffcfffffffffefffbfffffefffffffffffcffffffff
+febbbbbbbbbafffffffffffcffffffffff7ff1fffffdfffffffffffcffffffffff7eeefe
+eefdfffffffffffcffffffffffbffffffffbfffffffffffcffffffffffbbbbbbbbbbffff
+fffffffcffffffffffdffffffff7fffffffffffcffffffffffefefefefeffffffffffffc
+fffffffffff7ffffffdffffffffffffcfffffffffff9bbbbbb3ffffffffffffcffffffff
+fffefffffefffffffffffffcffffffffffff1efef1fffffffffffffcffffffffffffe3ff
+8ffffffffffffffcfffffffffffffc007ffffffffffffffcffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff
+fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff
+fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffff3f97ffffff
+ffee03effffffffcffffff9f3fffffffffdf7beffffffffcffffff9f3ffbffffffdf7fd7
+fffffffcffffffaea6402533f98f77d7c7fffffcffffffaeb75bb66df6df07bbb7fffffc
+ffffffb5b7bbb6e1f6df77839ffffffcffffffb5b7bbb6eff6df7fbbe7fffffcffffffbb
+b75bb6e6f6df7f7db7fffffcffffff1b024cc871f9de1e388ffffffcffffffffffffffff
+fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff
+fffffffcfffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffff
+fffffffffffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffff
+fffffffffffffffcfffffffffffffffffffffffffffffffcffffffffffffffffffffffff
+fffffffc
+end
+%%PageTrailer
+%%Trailer
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/mfa.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 225 225 1800 1650
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1500 450 300 225 1500 450 1800 675
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 975 1425 300 225 975 1425 1275 1650
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 225 225 600 225 600 675 225 675 225 225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 525 675 900 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1425 675 1050 1200
+-6
+4 0 -1 0 0 0 12 0.0000 4 135 135 825 1500 Y\001
+4 0 -1 0 0 0 12 0.0000 4 165 135 300 525 Q\001
+4 0 -1 0 0 0 12 0.0000 4 135 135 1350 525 X\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/mfa.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/mixexp.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 525 300 1575 2925
+5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 2055.000 1650.000 975 675 600 1650 975 2625
+	0 0 1.00 60.00 120.00
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1275 525 300 225 1275 525 1575 750
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1275 2700 300 225 1275 2700 1575 2925
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1050 1350 1425 1350 1425 1800 1050 1800 1050 1350
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1275 825 1275 1350
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1275 1800 1275 2475
+-6
+4 0 -1 0 0 0 12 0.0000 4 180 1425 450 3300 Mixture of Experts\001
+4 0 -1 0 0 0 12 0.0000 4 135 120 1200 600 X\001
+4 0 -1 0 0 0 12 0.0000 4 165 135 1125 1650 Q\001
+4 0 -1 0 0 0 12 0.0000 4 135 135 1200 2775 Y\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/mixexp.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/mixexp_after.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/mixexp_before.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/mixexp_data.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/model_select.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/qmr.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 750 2700 309 309 750 2700 1050 2775
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 3225 2700 309 309 3225 2700 3525 2775
+1 3 0 3 0 0 100 0 5 0.000 1 0.0000 4500 2700 309 309 4500 2700 4800 2775
+1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 1950 2700 309 309 1950 2700 2025 3000
+1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 5775 2700 309 309 5775 2700 5850 3000
+1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 4125 1200 309 309 4125 1200 4200 1500
+1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 3000 1200 309 309 3000 1200 3075 1500
+1 3 0 3 0 0 100 0 -1 0.000 1 0.0000 1875 1200 309 309 1875 1200 1950 1500
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 1 2
+	0 0 3.00 180.00 360.00
+	0 0 3.00 180.00 360.00
+	 450 3750 6150 3750
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 1 2
+	0 0 3.00 180.00 360.00
+	0 0 3.00 180.00 360.00
+	 1350 525 4650 525
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 1725 1500 900 2475
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 2850 1500 1050 2475
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 2925 1500 2100 2400
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 3975 1500 2100 2400
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 3075 1575 3150 2325
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 3150 1575 4200 2400
+2 1 0 3 0 7 100 0 -1 0.000 0 0 7 1 0 2
+	0 0 3.00 180.00 360.00
+	 4200 1500 5475 2475
+4 0 0 100 0 0 24 0.0000 4 255 720 1950 4200 4000\001
+4 0 0 100 0 0 24 0.0000 4 330 1575 2850 4200 Symptoms\001
+4 0 0 100 0 0 24 0.0000 4 255 540 2100 375 600\001
+4 0 0 100 0 0 24 0.0000 4 255 1290 2775 375 Diseases\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/qmr.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/qmr.jpg has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/qmr.rnd.jpg has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/rainer_dbn.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/rainer_tied.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,88 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 3196.875 3000.000 1275 1875 975 3150 1275 4125
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5596.875 3000.000 3675 1875 3375 3150 3675 4125
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 0 1 0 3849.948 3549.006 2475 3375 3075 2400 4500 2325
+	1 1 1.00 60.00 120.00
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 1500 1875 237 237 1500 1875 1575 2100
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 1500 2775 237 237 1500 2775 1575 3000
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2400 2325 237 237 2400 2325 2475 2550
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2325 3600 237 237 2325 3600 2400 3825
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 1500 4275 237 237 1500 4275 1575 4500
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 3900 1875 237 237 3900 1875 3975 2100
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 3900 2775 237 237 3900 2775 3975 3000
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4800 2325 237 237 4800 2325 4875 2550
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4725 3600 237 237 4725 3600 4800 3825
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 3900 4275 237 237 3900 4275 3975 4500
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 2625 1875 1725 300 2625 1875 4350 2175
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 2625 4275 1800 300 2625 4275 4425 4575
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 3375 3600 1725 300 3375 3600 5100 3900
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 1500 2775 375 300 1500 2775 1875 3075
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 3900 2775 375 300 3900 2775 4275 3075
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 4800 2325 375 300 4800 2325 5175 2625
+1 1 1 2 0 7 100 0 -1 6.000 1 0.0000 2400 2325 375 225 2400 2325 2775 2550
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 1725 1950 2175 2250
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 2400 1725 2700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2400 2550 2400 3375
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 1575 3000 2100 3450
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 3
+	1 1 1.00 60.00 120.00
+	 1725 1950 2175 3375 2175 3375
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 3750 1650 4125
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4125 1950 4575 2250
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4575 2400 4125 2700
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4800 2550 4800 3375
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 3975 3000 4500 3450
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 3
+	1 1 1.00 60.00 120.00
+	 4125 1950 4575 3375 4575 3375
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4575 3750 4050 4125
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2700 2325 3675 2700
+4 0 0 100 0 2 12 0.0000 4 135 90 1425 1950 1\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2325 2400 2\001
+4 0 0 100 0 2 12 0.0000 4 135 90 1425 2850 3\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2250 3675 4\001
+4 0 0 100 0 2 12 0.0000 4 135 90 1425 4350 5\001
+4 0 0 100 0 2 12 0.0000 4 135 90 3750 1950 6\001
+4 0 0 100 0 2 12 0.0000 4 135 90 4650 2400 7\001
+4 0 0 100 0 2 12 0.0000 4 135 90 3750 2850 8\001
+4 0 0 100 0 2 12 0.0000 4 135 90 4650 3675 9\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3750 4350 10\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2475 2700 E2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 1350 4725 E5\001
+4 0 0 100 0 2 12 0.0000 4 135 210 1725 3900 E4\001
+4 0 0 100 0 2 12 0.0000 4 135 210 1350 3300 E3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 1350 2325 E1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3750 3225 E7\001
+4 0 0 100 0 2 12 0.0000 4 135 210 4800 2850 E6\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/rainer_tied.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/sar.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 375 225 2175 2325
+6 375 1350 2100 1800
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 675 1575 300 225 675 1575 975 1800
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1800 1575 300 225 1800 1575 2100 1800
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 975 1575 1500 1575
+-6
+6 450 225 1950 675
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 450 225 825 225 825 675 450 675 450 225
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1575 225 1950 225 1950 675 1575 675 1575 225
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 450 1575 450
+-6
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 675 675 675 1350
+2 1 0 1 -1 0 0 0 2 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1800 675 1800 1350
+2 1 1 1 -1 0 0 0 2 4.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 975 1425 1500 525
+4 0 -1 0 0 0 12 0.0000 4 180 1530 600 2250 Switching AR model\001
+-6
+4 0 -1 0 0 0 12 0.0000 4 165 225 525 525 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1650 525 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 525 1650 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1650 1650 Y2\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/sar.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/skf.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+#FIG 3.1
+Landscape
+Center
+Inches
+1200 2
+6 300 300 2550 3375
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 3718.581 1734.122 1725 600 1425 1725 1575 2550
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 2652.330 1587.076 600 600 375 1575 525 2400
+	0 0 1.00 60.00 120.00
+6 1650 1200 2250 2775
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1725 1950 2250
+-6
+6 675 300 2175 750
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 300 1050 300 1050 750 675 750 675 300
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1800 300 2175 300 2175 750 1800 750 1800 300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 525 1800 525
+-6
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 750 825 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 750 1950 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1425 1650 1425
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1725 825 2250
+4 0 -1 0 0 0 12 0.0000 4 180 1740 750 3300 Switching Kalman filter\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 750 600 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1875 600 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 675 1500 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 210 1800 1500 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 2625 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2625 Y2\001
+-6
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/skf.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/skf3.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 300 300 3750 3450
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 2100.000 1950.000 675 975 375 1875 675 2925
+	1 1 2.00 120.00 240.00
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 3300.000 1950.000 1875 975 1575 1875 1875 2925
+	1 1 2.00 120.00 240.00
+5 1 0 2 0 0 50 0 -1 0.000 0 1 1 0 4500.000 1950.000 3075 975 2775 1875 3075 2925
+	1 1 2.00 120.00 240.00
+1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 975 1875 335 335 975 1875 1125 2175
+1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 3375 1875 335 335 3375 1875 3525 2175
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 975 3075 335 335 975 3075 1125 3375
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2175 3075 335 335 2175 3075 2325 3375
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 3375 3075 335 335 3375 3075 3525 3375
+1 3 0 2 0 0 50 0 -1 0.000 1 0.0000 2175 1875 335 335 2175 1875 2325 2175
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 675 375 1275 375 1275 975 675 975 675 375
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 1875 375 2475 375 2475 975 1875 975 1875 375
+2 2 0 2 0 0 50 0 -1 0.000 0 0 7 0 0 5
+	 3075 375 3675 375 3675 975 3075 975 3075 375
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 975 975 975 1575
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 975 2175 975 2775
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2175 975 2175 1575
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2175 2175 2175 2775
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3375 975 3375 1575
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3375 2175 3375 2775
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 1275 1875 1875 1875
+2 1 0 2 0 0 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2475 1875 3075 1875
+4 0 0 50 0 0 24 0.0000 4 255 225 750 750 Z\001
+4 0 0 50 0 0 24 0.0000 4 255 225 1950 750 Z\001
+4 0 0 50 0 0 24 0.0000 4 255 180 2175 900 2\001
+4 0 0 50 0 0 24 0.0000 4 255 225 3150 750 Z\001
+4 0 0 50 0 0 24 0.0000 4 255 180 3375 900 3\001
+4 0 0 50 0 0 24 0.0000 4 255 270 825 2025 X\001
+4 0 0 50 0 0 24 0.0000 4 255 180 1050 2175 1\001
+4 0 0 50 0 0 24 0.0000 4 255 180 2250 2175 2\001
+4 0 0 50 0 0 24 0.0000 4 255 180 3450 2175 3\001
+4 0 0 50 0 0 24 0.0000 4 255 270 3225 2025 X\001
+4 0 0 50 0 0 24 0.0000 4 255 270 2025 2025 X\001
+4 0 7 50 0 0 24 0.0000 4 255 240 825 3150 Y\001
+4 0 7 50 0 0 24 0.0000 4 255 240 2025 3150 Y\001
+4 0 7 50 0 0 24 0.0000 4 255 240 3225 3150 Y\001
+4 0 7 50 0 0 24 0.0000 4 255 180 1050 3300 1\001
+4 0 7 50 0 0 24 0.0000 4 255 180 2175 3375 2\001
+4 0 7 50 0 0 24 0.0000 4 255 180 3375 3300 3\001
+4 0 0 50 0 0 24 0.0000 4 255 180 975 900 1\001
+-6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/skf3_nobold.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 2652.330 1587.076 600 600 375 1575 525 2400
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 3718.581 1734.122 1725 600 1425 1725 1575 2550
+	0 0 1.00 60.00 120.00
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 1 0 4843.581 1734.122 2850 600 2550 1725 2700 2550
+	0 0 1.00 60.00 120.00
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3075 1425 300 225 3075 1425 3375 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3075 2550 300 225 3075 2550 3375 2775
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 750 825 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1725 825 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 750 1950 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1425 1650 1425
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 750 3075 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2250 1425 2775 1425
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 300 1050 300 1050 750 675 750 675 300
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1800 300 2175 300 2175 750 1800 750 1800 300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 525 1800 525
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1725 1950 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 1725 3075 2250
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2850 300 3225 300 3225 750 2850 750 2850 300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 525 2850 525
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 1500 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 2625 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 1500 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2625 Y2\001
+4 0 0 50 0 0 12 0.0000 4 135 225 2850 1500 X3\001
+4 0 0 0 0 0 12 0.0000 4 135 225 2925 2625 Y3\001
+4 0 0 50 0 0 12 0.0000 4 135 210 750 600 Z1\001
+4 0 0 50 0 0 12 0.0000 4 135 210 1875 600 Z2\001
+4 0 0 50 0 0 12 0.0000 4 135 210 2925 600 Z3\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/skf3_nosolid.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 2652.330 1587.076 600 600 375 1575 525 2400
+	1 1 2.00 120.00 240.00
+5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 3718.581 1734.122 1725 600 1425 1725 1575 2550
+	1 1 2.00 120.00 240.00
+5 1 0 2 0 7 50 0 -1 0.000 0 1 1 0 4843.581 1734.122 2850 600 2550 1725 2700 2550
+	1 1 2.00 120.00 240.00
+1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650
+1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650
+1 1 0 2 0 0 50 0 7 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775
+1 1 0 2 0 0 50 0 7 0.000 1 0.0000 3075 2550 300 225 3075 2550 3375 2775
+1 1 0 2 0 0 50 0 7 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775
+1 1 0 2 0 7 50 0 -1 0.000 1 0.0000 3075 1425 300 225 3075 1425 3375 1650
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 825 1725 825 2250
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 1125 1425 1650 1425
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 1800 300 2175 300 2175 750 1800 750 1800 300
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 2100 525 2850 525
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 2850 300 3225 300 3225 750 2850 750 2850 300
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 1950 1725 1950 2250
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 2250 1425 2775 1425
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 1950 750 1950 1200
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 3075 750 3075 1200
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 3075 1725 3075 2250
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 825 750 825 1200
+2 2 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 675 300 1050 300 1050 750 675 750 675 300
+2 1 0 2 0 0 50 0 7 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 1050 525 1800 525
+4 0 0 50 0 2 12 0.0000 4 135 225 675 2625 Y1\001
+4 0 0 50 0 2 12 0.0000 4 135 225 2925 2625 Y3\001
+4 0 0 50 0 2 12 0.0000 4 135 225 675 1500 X1\001
+4 0 0 50 0 2 12 0.0000 4 135 225 1800 1500 X2\001
+4 0 0 50 0 2 12 0.0000 4 135 225 2850 1500 X3\001
+4 0 0 50 0 2 12 0.0000 4 135 210 750 600 Z1\001
+4 0 0 50 0 2 12 0.0000 4 135 210 1875 600 Z2\001
+4 0 0 50 0 2 12 0.0000 4 135 210 2925 600 Z3\001
+4 0 0 50 0 2 12 0.0000 4 135 225 1875 2625 Y2\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/skf3_polytree.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 825 2550 300 225 825 2550 1125 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 825 1425 300 225 825 1425 1125 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 1950 2550 300 225 1950 2550 2250 2775
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1950 1425 300 225 1950 1425 2250 1650
+1 1 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3075 1425 300 225 3075 1425 3375 1650
+1 1 0 1 -1 0 0 0 2 0.000 1 0.0000 3075 2550 300 225 3075 2550 3375 2775
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 750 825 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 825 1725 825 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 750 1950 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1125 1425 1650 1425
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 750 3075 1200
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2250 1425 2775 1425
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 675 300 1050 300 1050 750 675 750 675 300
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 1800 300 2175 300 2175 750 1800 750 1800 300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1050 525 1800 525
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 1725 1950 2250
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3075 1725 3075 2250
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2850 300 3225 300 3225 750 2850 750 2850 300
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2100 525 2850 525
+4 0 -1 0 0 0 12 0.0000 4 165 225 750 600 Q1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 1500 X1\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 675 2625 Y1\001
+4 0 -1 0 0 0 12 0.0000 4 165 225 1875 600 Q2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 1500 X2\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 1800 2625 Y2\001
+4 0 0 50 0 0 12 0.0000 4 165 225 2925 600 Q3\001
+4 0 0 50 0 0 12 0.0000 4 135 225 2850 1500 X3\001
+4 0 0 0 0 0 12 0.0000 4 135 225 2925 2625 Y3\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 3675 1275 6000 3450
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 4125 2400 450 225 4125 2400 4575 2625
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 4800 1500 450 225 4800 1500 5250 1725
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 5550 2400 450 225 5550 2400 6000 2625
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 4875 3225 450 225 4875 3225 5325 3450
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4650 1725 4200 2175
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5025 1725 5400 2175
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4350 2625 4800 3000
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 5475 2700 5100 3000
+4 0 -1 0 0 0 12 0.0000 4 180 525 4575 1575 Cloudy\001
+4 0 -1 0 0 0 12 0.0000 4 180 675 3825 2475 Sprinkler\001
+4 0 -1 0 0 0 12 0.0000 4 135 345 5400 2475 Rain\001
+4 0 -1 0 0 0 12 0.0000 4 135 795 4500 3300 WetGrass\001
+-6
+6 3975 3900 6000 5775
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 3975 4275 6000 4275
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 1
+	 4425 3975
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 4485 3960 4485 5730
+4 0 -1 0 0 0 12 0.0000 4 135 300 4050 4500 F  F\001
+4 0 -1 0 0 0 12 0.0000 4 135 810 4650 4500 1.0        0.0\001
+4 0 -1 0 0 0 12 0.0000 4 135 300 4050 4875 T  F\001
+4 0 -1 0 0 0 12 0.0000 4 135 300 4050 5250 F  T\001
+4 0 -1 0 0 0 12 0.0000 4 135 345 4050 5625 T   T\001
+4 0 -1 0 0 0 12 0.0000 4 135 855 4650 4875 0.1         0.9\001
+4 0 -1 0 0 0 12 0.0000 4 135 855 4650 5250 0.1         0.9\001
+4 0 -1 0 0 0 12 0.0000 4 135 900 4650 5625 0.01      0.99\001
+4 0 -1 0 0 0 12 0.0000 4 180 1785 4125 4230 S  R  P(W=F)  P(W=T)\001
+-6
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 4125 525 5700 525
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 1650 2625 3375 2625
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 2025 2325 2025 3300
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 6525 2700 8250 2700
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 6900 2400 6900 3450
+4 0 -1 0 0 0 12 0.0000 4 180 1260 4290 450 P(C=F)  P(C=T)\001
+4 0 -1 0 0 0 12 0.0000 4 135 855 4425 825 0.5         0.5\001
+4 0 -1 0 0 0 12 0.0000 4 135 105 1725 2925 F\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2175 2925 0.5\001
+4 0 -1 0 0 0 12 0.0000 4 135 225 2775 2925 0.5\001
+4 0 -1 0 0 0 12 0.0000 4 135 105 1725 3225 T\001
+4 0 -1 0 0 0 12 0.0000 4 135 900 2175 3225 0.9          0.1\001
+4 0 -1 0 0 0 12 0.0000 4 135 120 6600 2625 C\001
+4 0 -1 0 0 0 12 0.0000 4 135 105 6600 3000 F\001
+4 0 -1 0 0 0 12 0.0000 4 135 105 6525 3375 T\001
+4 0 -1 0 0 0 12 0.0000 4 135 945 7050 3375 0.2           0.8\001
+4 0 -1 0 0 0 12 0.0000 4 135 945 7050 3000 0.8           0.2\001
+4 0 0 100 0 0 12 0.0000 4 135 120 1650 2550 C\001
+4 0 0 100 0 0 12 0.0000 4 180 1185 2100 2550 P(S=F) P(S=T)\001
+4 0 0 100 0 0 12 0.0000 4 180 1215 6975 2625 P(R=F) P(R=T)\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler.noparams.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 600 300 2925 2475
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 1050 1425 450 225 1050 1425 1500 1650
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 1725 525 450 225 1725 525 2175 750
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 2475 1425 450 225 2475 1425 2925 1650
+1 1 0 1 -1 7 0 0 -1 0.000 1 0.0000 1800 2250 450 225 1800 2250 2250 2475
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1575 750 1125 1200
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1950 750 2325 1200
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 1275 1650 1725 2025
+2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2400 1725 2025 2025
+4 0 -1 0 0 0 12 0.0000 4 180 525 1500 600 Cloudy\001
+4 0 -1 0 0 0 12 0.0000 4 180 675 750 1500 Sprinkler\001
+4 0 -1 0 0 0 12 0.0000 4 135 345 2325 1500 Rain\001
+4 0 -1 0 0 0 12 0.0000 4 135 795 1425 2325 WetGrass\001
+-6
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler_bar.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler_bar.jpg has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/sprinkler_bar.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/water3.cts.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,266 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3229.069 1880.389 1950 3450 1275 1350 1875 375
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 4200.000 6900.000 1950 5700 1650 6900 1950 8100
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 3787.500 6900.000 1950 4950 1125 7200 1950 8850
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 7387.500 6975.000 5775 5700 5400 7500 5775 8250
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 7188.461 6911.539 5775 4950 5175 8250 5850 8925
+	1 1 1.00 60.00 120.00
+6 2100 75 4425 9225
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 5437.500 6975.000 3825 5700 3450 7500 3825 8250
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 1 1 0 5238.461 6911.539 3825 4950 3225 8250 3900 8925
+	1 1 1.00 60.00 120.00
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4125 8250 237 237 4125 8250 4200 8475
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4125 8925 237 237 4125 8925 4200 9150
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 375 237 237 4050 375 4125 600
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 1050 237 237 4050 1050 4125 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7050 3825 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7125 3825 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7200 3825 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6525 3825 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6450 3825 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5700 3825 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5025 3825 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5625 3825 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2850 3825 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4350 3825 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5550 3825 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4950 3825 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3600 3825 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4200 3825 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4800 3825 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3525 3825 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4125 3825 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3450 3825 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2775 3825 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2025 3825 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2700 3825 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 1950 3825 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425
+2 1 0 2 0 0 100 0 3 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 1650 2175 1200
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 1725 4050 1275
+-6
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8250 237 237 2175 8250 2250 8475
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8925 237 237 2175 8925 2250 9150
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 300 237 237 2175 300 2250 525
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 975 237 237 2175 975 2250 1200
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6075 8250 237 237 6075 8250 6150 8475
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6075 8925 237 237 6075 8925 6150 9150
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 375 237 237 6000 375 6075 600
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 1050 237 237 6000 1050 6075 1275
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7050 5775 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7125 5775 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7200 5775 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6525 5775 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6450 5775 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5700 5775 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5025 5775 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5625 5775 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2850 5775 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4350 5775 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5550 5775 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4950 5775 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3600 5775 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4200 5775 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4800 5775 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3525 5775 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4125 5775 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3450 5775 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2775 5775 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2025 5775 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2700 5775 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 1950 5775 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 1725 6000 1275
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2025 A1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2025 A2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2025 A3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2775 B1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2775 B2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2775 B3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 3525 C1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 3525 C2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 3525 C3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 4275 D1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 4275 D2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 4275 D3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5025 E1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5025 E2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5025 E3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5775 F2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5775 F1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5775 F3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 6525 G1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3975 6525 G2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 6525 G3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 3900 7275 H2\001
+4 0 0 100 0 2 12 0.0000 4 135 240 5925 7275 H3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 2025 7275 H1\001
+4 0 0 100 0 2 12 0.0000 4 135 360 1950 1050 YA1\001
+4 0 0 100 0 2 12 0.0000 4 135 360 3900 1125 YA2\001
+4 0 0 100 0 2 12 0.0000 4 135 360 5850 1125 YA3\001
+4 0 0 100 0 2 12 0.0000 4 135 345 1950 375 YC1\001
+4 0 0 100 0 2 12 0.0000 4 135 345 3900 450 YC2\001
+4 0 0 100 0 2 12 0.0000 4 135 345 5850 450 YC3\001
+4 0 0 100 0 2 12 0.0000 4 135 345 2025 8325 YE1\001
+4 0 0 100 0 2 12 0.0000 4 135 345 3975 8325 YE2\001
+4 0 0 100 0 2 12 0.0000 4 135 345 5925 8325 YE3\001
+4 0 0 100 0 2 12 0.0000 4 135 345 3975 9000 YF2\001
+4 0 0 100 0 2 12 0.0000 4 135 345 5925 9000 YF3\001
+4 0 0 100 0 2 12 0.0000 4 135 345 2025 9000 YF1\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/water3.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,279 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5445.833 6562.500 1950 4200 1275 7200 1950 8925
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7595.833 6637.500 3825 4275 3150 6825 3825 9000
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 8419.351 6558.096 5700 4200 5100 7950 5775 9000
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3332.812 2025.000 1875 3525 1275 1650 1875 525
+	1 1 1.00 60.00 120.00
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7050 5775 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7125 5775 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7200 5775 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6525 5775 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6450 5775 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5700 5775 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5025 5775 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5625 5775 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2850 5775 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4350 5775 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5550 5775 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4950 5775 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3600 5775 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4200 5775 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4800 5775 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3525 5775 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4125 5775 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3450 5775 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2775 5775 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2025 5775 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2700 5775 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 1950 5775 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 1725 6000 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7050 3825 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7125 3825 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7200 3825 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6525 3825 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6450 3825 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5700 3825 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5025 3825 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5625 3825 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2850 3825 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4350 3825 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5550 3825 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4950 3825 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3600 3825 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4200 3825 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4800 3825 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3525 3825 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4125 3825 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3450 3825 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2775 3825 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2025 3825 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2700 3825 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 1950 3825 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 1725 4050 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 1275 6225 825 5775 825 5775 1275 6225 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 600 6225 150 5775 150 5775 600 6225 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 600 4275 150 3825 150 3825 600 4275 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 1275 4275 825 3825 825 3825 1275 4275 1275
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 7425 2175 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 8400 2400 7950 1950 7950 1950 8400 2400 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 8400 4275 7950 3825 7950 3825 8400 4275 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 8400 6225 7950 5775 7950 5775 8400 6225 8400
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 7425 4050 7950
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 7425 6000 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 9150 2400 8700 1950 8700 1950 9150 2400 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 9150 4275 8700 3825 8700 3825 9150 4275 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 9150 6225 8700 5775 8700 5775 9150 6225 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 1200 2400 750 1950 750 1950 1200 2400 1200
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 600 2400 150 1950 150 1950 600 2400 600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 1650 2175 1200
+4 0 0 100 0 2 12 0.0000 4 135 90 2100 2025 1\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2100 2775 2\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2100 3525 3\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2025 4275 4\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2025 5025 5\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2025 5775 6\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2025 6525 7\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2025 7275 8\001
+4 0 0 100 0 2 12 0.0000 4 135 180 2025 9000 11\001
+4 0 0 100 0 2 12 0.0000 4 135 180 2100 8250 12\001
+4 0 0 100 0 2 12 0.0000 4 135 90 2100 1050 9\001
+4 0 0 100 0 2 12 0.0000 4 135 180 2100 450 10\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 2025 13\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 2775 14\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 3525 15\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 4275 16\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 5025 17\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 5775 18\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 6525 19\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 7275 20\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 1125 21\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3975 450 22\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 9000 23\001
+4 0 0 100 0 2 12 0.0000 4 135 180 3900 8250 24\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 2025 25\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 2775 26\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 3525 27\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 4275 28\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 5025 29\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 5775 30\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 6525 31\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 7275 32\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 1125 33\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5925 450 34\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 8250 36\001
+4 0 0 100 0 2 12 0.0000 4 135 180 5850 9000 35\001
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/water3.gif has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Figures/water3_75.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/water3_circle.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,231 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3229.069 1880.389 1950 3450 1275 1350 1875 375
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 6931.999 6519.041 1875 4275 1425 7050 1950 8925
+	0 0 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7187.500 6562.500 3825 4275 3150 6075 3825 8850
+	0 0 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 9787.500 6592.500 5775 4275 5175 6150 5700 8775
+	0 0 1.00 60.00 120.00
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8925 237 237 2175 8925 2250 9150
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 300 237 237 2175 300 2250 525
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 975 237 237 2175 975 2250 1200
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2100 1950 237 237 2100 1950 2175 2175
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 2700 237 237 2175 2700 2250 2925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 3450 237 237 2175 3450 2250 3675
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2100 4200 237 237 2100 4200 2175 4425
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 4950 237 237 2175 4950 2250 5175
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 5700 237 237 2175 5700 2250 5925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 6450 237 237 2175 6450 2250 6675
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 2175 7125 237 237 2175 7125 2250 7350
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 375 237 237 4050 375 4125 600
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 1050 237 237 4050 1050 4125 1275
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 1950 237 237 4050 1950 4125 2175
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 2700 237 237 4050 2700 4125 2925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 3450 237 237 4050 3450 4125 3675
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 4200 237 237 4050 4200 4125 4425
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 4950 237 237 4050 4950 4125 5175
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 5700 237 237 4050 5700 4125 5925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 6450 237 237 4050 6450 4125 6675
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 4050 7200 237 237 4050 7200 4125 7425
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 1950 237 237 6000 1950 6075 2175
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 2700 237 237 6000 2700 6075 2925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 4200 237 237 6000 4200 6075 4425
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 4875 237 237 6000 4875 6075 5100
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 5700 237 237 6000 5700 6075 5925
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 6450 237 237 6000 6450 6075 6675
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 7200 237 237 6000 7200 6075 7425
+1 3 0 2 0 7 100 0 -1 0.000 1 0.0000 6000 3450 237 237 6000 3450 6075 3675
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 2175 8250 237 237 2175 8250 2250 8475
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 8250 237 237 4050 8250 4125 8475
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 4050 8925 237 237 4050 8925 4125 9150
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 8175 237 237 6000 8175 6075 8400
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 8850 237 237 6000 8850 6075 9075
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 375 237 237 6000 375 6075 600
+1 3 0 2 0 0 100 0 3 0.000 1 0.0000 6000 1050 237 237 6000 1050 6075 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7050 5775 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7125 5775 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7200 5775 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6525 5775 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6450 5775 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5700 5775 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5025 5775 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5625 5775 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2850 5775 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4350 5775 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5550 5775 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4950 5775 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3600 5775 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4200 5775 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4800 5775 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3525 5775 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4125 5775 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3450 5775 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2775 5775 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2025 5775 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2700 5775 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 1950 5775 1950
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 1725 6000 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7050 3825 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7125 3825 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7200 3825 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6525 3825 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6450 3825 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5700 3825 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5025 3825 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5625 3825 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2850 3825 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4350 3825 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5550 3825 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4950 3825 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3600 3825 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4200 3825 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4800 3825 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3525 3825 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4125 3825 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3450 3825 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2775 3825 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2025 3825 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2700 3825 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 1950 3825 1950
+2 1 0 2 0 0 100 0 3 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 1650 2175 1200
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 1725 4050 1275
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 2175 7350 2175 7950
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4050 7425 4050 8025
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6000 7425 6000 7950
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2025 A1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2025 A2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2025 A3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2775 B1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2775 B2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2775 B3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 3525 C1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 3525 C2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 3525 C3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 4275 D1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 4275 D2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 4275 D3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5025 E1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5025 E2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5025 E3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5775 F2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5775 F1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5775 F3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 6525 G1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3975 6525 G2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 6525 G3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 3900 7275 H2\001
+4 0 0 100 0 2 12 0.0000 4 135 240 5925 7275 H3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 2025 7275 H1\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/water3_named_nodes.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,279 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3229.069 1880.389 1950 3450 1275 1350 1875 375
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5445.833 6562.500 1950 4200 1275 7200 1950 8925
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7595.833 6637.500 3825 4275 3150 6825 3825 9000
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 8419.351 6558.096 5700 4200 5100 7950 5775 9000
+	1 1 1.00 60.00 120.00
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7050 5775 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7125 5775 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7200 5775 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6525 5775 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6450 5775 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5700 5775 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5025 5775 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5625 5775 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2850 5775 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4350 5775 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5550 5775 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4950 5775 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3600 5775 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4200 5775 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4800 5775 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3525 5775 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4125 5775 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3450 5775 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2775 5775 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2025 5775 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2700 5775 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 1950 5775 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 1725 6000 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7050 3825 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7125 3825 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7200 3825 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6525 3825 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6450 3825 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5700 3825 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5025 3825 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5625 3825 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2850 3825 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4350 3825 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5550 3825 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4950 3825 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3600 3825 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4200 3825 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4800 3825 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3525 3825 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4125 3825 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3450 3825 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2775 3825 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2025 3825 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2700 3825 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 1950 3825 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425
+2 1 0 2 0 0 100 0 3 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 1650 2175 1200
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 1725 4050 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 1275 6225 825 5775 825 5775 1275 6225 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 600 6225 150 5775 150 5775 600 6225 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 600 4275 150 3825 150 3825 600 4275 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 1275 4275 825 3825 825 3825 1275 4275 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2325 1200 2325 750 1875 750 1875 1200 2325 1200
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2325 525 2325 75 1875 75 1875 525 2325 525
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 7425 2175 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 8400 2400 7950 1950 7950 1950 8400 2400 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 8400 4275 7950 3825 7950 3825 8400 4275 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 8400 6225 7950 5775 7950 5775 8400 6225 8400
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 7425 4050 7950
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 7425 6000 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 9150 2400 8700 1950 8700 1950 9150 2400 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 9150 4275 8700 3825 8700 3825 9150 4275 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 9150 6225 8700 5775 8700 5775 9150 6225 9150
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2025 A1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2025 A2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2025 A3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 2775 B1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 2775 B2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 2775 B3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 3525 C1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 3525 C2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 3525 C3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 4275 D1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3900 4275 D2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 4275 D3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5025 E1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5025 E2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5025 E3\001
+4 0 0 100 0 2 12 0.0000 4 135 210 3900 5775 F2\001
+4 0 0 100 0 2 12 0.0000 4 135 210 2025 5775 F1\001
+4 0 0 100 0 2 12 0.0000 4 135 210 5850 5775 F3\001
+4 0 0 100 0 2 12 0.0000 4 135 225 2025 6525 G1\001
+4 0 0 100 0 2 12 0.0000 4 135 225 3975 6525 G2\001
+4 0 0 100 0 2 12 0.0000 4 135 225 5850 6525 G3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 3900 7275 H2\001
+4 0 0 100 0 2 12 0.0000 4 135 240 5925 7275 H3\001
+4 0 0 100 0 2 12 0.0000 4 135 240 2025 7275 H1\001
+4 0 0 100 0 2 12 0.0000 4 135 360 1950 1050 YA1\001
+4 0 0 100 0 2 12 0.0000 4 135 360 3900 1125 YA2\001
+4 0 0 100 0 2 12 0.0000 4 135 360 5850 1125 YA3\001
+4 0 0 100 0 2 12 0.0000 4 135 345 1950 375 YC1\001
+4 0 0 100 0 2 12 0.0000 4 135 345 3900 450 YC2\001
+4 0 0 100 0 2 12 0.0000 4 135 345 5850 450 YC3\001
+4 0 0 100 0 2 12 0.0000 4 135 375 2025 8250 YH1\001
+4 0 0 100 0 2 12 0.0000 4 135 375 3900 8250 YH2\001
+4 0 0 100 0 2 12 0.0000 4 135 375 5850 8250 YH3\001
+4 0 0 100 0 2 12 0.0000 4 135 360 2025 9000 YD1\001
+4 0 0 100 0 2 12 0.0000 4 135 360 3900 9000 YD2\001
+4 0 0 100 0 2 12 0.0000 4 135 360 5850 9000 YD3\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/Figures/water3_nolabels.fig	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,243 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 7232.812 1950.000 5775 3450 5175 1575 5775 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 5282.812 1950.000 3825 3450 3225 1575 3825 450
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 5445.833 6562.500 1950 4200 1275 7200 1950 8925
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 7595.833 6637.500 3825 4275 3150 6825 3825 9000
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 7 100 0 -1 0.000 0 1 1 0 8419.351 6558.096 5700 4200 5100 7950 5775 9000
+	1 1 1.00 60.00 120.00
+5 1 0 2 0 0 100 0 -1 0.000 0 0 1 0 3332.812 2025.000 1875 3525 1275 1650 1875 525
+	1 1 1.00 60.00 120.00
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 7425 2400 6975 1950 6975 1950 7425 2400 7425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 6675 2400 6225 1950 6225 1950 6675 2400 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5925 2400 5475 1950 5475 1950 5925 2400 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 5175 2400 4725 1950 4725 1950 5175 2400 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 4425 2400 3975 1950 3975 1950 4425 2400 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 3675 2400 3225 1950 3225 1950 3675 2400 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2175 2400 1725 1950 1725 1950 2175 2400 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 2400 2925 2400 2475 1950 2475 1950 2925 2400 2925
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7050 5775 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7125 5775 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 7200 5775 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6525 5775 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 6450 5775 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5700 5775 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5025 5775 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5625 5775 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2850 5775 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4350 5775 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 5550 5775 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4950 5775 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3600 5775 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4200 5775 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4800 5775 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3525 5775 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 4125 5775 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 3450 5775 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2775 5775 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2025 5775 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 2700 5775 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 4350 1950 5775 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2175 6225 1725 5775 1725 5775 2175 6225 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 2925 6225 2475 5775 2475 5775 2925 6225 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 3675 6225 3225 5775 3225 5775 3675 6225 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 4425 6225 3975 5775 3975 5775 4425 6225 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5175 6225 4725 5775 4725 5775 5175 6225 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 5925 6225 5475 5775 5475 5775 5925 6225 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 6675 6225 6225 5775 6225 5775 6675 6225 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 6225 7425 6225 6975 5775 6975 5775 7425 6225 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 1725 6000 1275
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7050 3825 5850
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7125 3825 6525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 7200 3825 7200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6525 3825 7125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 6450 3825 6450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5700 3825 5700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5025 3825 5625
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5625 3825 5025
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2850 3825 6300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4350 3825 5550
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 5550 3825 4350
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4950 3825 4950
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3600 3825 4800
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4200 3825 4200
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4800 3825 3600
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3525 3825 4125
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 4125 3825 3525
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 3450 3825 3450
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2775 3825 3375
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2025 3825 3300
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 2700 3825 2700
+2 1 0 3 -1 -1 0 0 -1 0.000 0 0 -1 1 0 2
+	3 1 1.00 60.00 120.00
+	 2400 1950 3825 1950
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2175 4275 1725 3825 1725 3825 2175 4275 2175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 2925 4275 2475 3825 2475 3825 2925 4275 2925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 3675 4275 3225 3825 3225 3825 3675 4275 3675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 4425 4275 3975 3825 3975 3825 4425 4275 4425
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5175 4275 4725 3825 4725 3825 5175 4275 5175
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 5925 4275 5475 3825 5475 3825 5925 4275 5925
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 6675 4275 6225 3825 6225 3825 6675 4275 6675
+2 2 0 3 -1 -1 0 0 -1 0.000 0 0 7 0 0 5
+	 4275 7425 4275 6975 3825 6975 3825 7425 4275 7425
+2 1 0 2 0 0 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 1725 4050 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 1275 6225 825 5775 825 5775 1275 6225 1275
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 600 6225 150 5775 150 5775 600 6225 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 600 4275 150 3825 150 3825 600 4275 600
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 1275 4275 825 3825 825 3825 1275 4275 1275
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 7425 2175 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 8400 2400 7950 1950 7950 1950 8400 2400 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 8400 4275 7950 3825 7950 3825 8400 4275 8400
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 8400 6225 7950 5775 7950 5775 8400 6225 8400
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4050 7425 4050 7950
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6000 7425 6000 7950
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 9150 2400 8700 1950 8700 1950 9150 2400 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 4275 9150 4275 8700 3825 8700 3825 9150 4275 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 6225 9150 6225 8700 5775 8700 5775 9150 6225 9150
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 1200 2400 750 1950 750 1950 1200 2400 1200
+2 2 0 2 0 0 100 0 3 0.000 0 0 7 0 0 5
+	 2400 600 2400 150 1950 150 1950 600 2400 600
+2 1 0 2 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2175 1650 2175 1200
Binary file toolboxes/FullBNT-1.0.7/docs/GR03~1.PDF has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Talks/BNT_mathworks.ppt has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Talks/gR03.ppt has changed
Binary file toolboxes/FullBNT-1.0.7/docs/Talks/stair_BNT_mathworks.ppt has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/adj2pajek2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+% ADJ2PAJEK2 Converts an adjacency matrix representation to a Pajek .net read format
+% adj2pajek2(adj, filename-stem, 'argname1', argval1, ...)
+%
+% Set A(i,j)=-1 to get a dotted line
+%
+% Optional arguments
+%
+%  nodeNames - cell array, defaults to {'v1','v2,...}
+%  shapes - cell array, defaults to {'ellipse','ellipse',...}
+%     Choices are 'ellipse', 'box', 'diamond', 'triangle', 'cross', 'empty'
+%  partition - vector of integers, defaults to [1 1 ... 1]
+%    This will automatically color-code the vertices by their partition
+%
+% Run pajek (available from http://vlado.fmf.uni-lj.si/pub/networks/pajek/)
+% Choose File->Network->Read from the menu
+% Then press ctrl-G (Draw->Draw)
+% Optional: additionally load the partition file then press ctrl-P (Draw->partition)
+%
+% Examples
+% A=zeros(5,5);A(1,2)=-1;A(2,1)=-1;A(1,[3 4])=1;A(2,5)=1;
+% adj2pajek2(A,'foo') % makes foo.net
+%
+% adj2pajek2(A,'foo','partition',[1 1 2 2 2]) % makes foo.net and foo.clu
+% 
+% adj2pajek2(A,'foo',...
+%            'nodeNames',{'TF1','TF2','G1','G2','G3'},...
+%            'shapes',{'box','box','ellipse','ellipse','ellipse'});
+%
+%
+% The file format is documented on p68 of the pajek manual
+% and good examples are on p58, p72
+%
+% Written by Kevin Murphy, 30 May 2007
+% Based on adj2pajek by Gergana Bounova
+% http://stuff.mit.edu/people/gerganaa/www/matlab/routines.html
+% Fixes a small bug (opens files as 'wt' instead of 'w' so it works in windows)
+% Also, simplified her code and added some features.
+
+function []=adj2pajek2(adj,filename, varargin)
+
+N = length(adj);
+for i=1:N
+  nodeNames{i} = strcat('"v',num2str(i),'"');
+  shapes{i} = 'ellipse';
+end
+
+[nodeNames, shapes, partition] = process_options(varargin, ...
+    'nodeNames', nodeNames, 'shapes', shapes, 'partition', []);
+
+if ~isempty(partition)
+  fid = fopen(sprintf('%s.clu', filename),'wt','native'); 
+  fprintf(fid,'*Vertices  %6i\n',N);
+  for i=1:N
+    fprintf(fid, '%d\n', partition(i));
+  end
+  fclose(fid);
+end
+
+fid = fopen(sprintf('%s.net', filename),'wt','native'); 
+
+fprintf(fid,'*Vertices  %6i\n',N);
+for i=1:N
+  fprintf(fid,'%3i %s %s\n', i, nodeNames{i}, shapes{i});
+end
+
+%fprintf(fid,'*Edges\n');
+fprintf(fid,'*Arcs\n'); % directed
+for i=1:N
+  for j=1:N
+    if adj(i,j) ~= 0
+      fprintf(fid,' %4i   %4i   %2i\n',i,j,adj(i,j));
+    end
+  end
+end
+fclose(fid)
+
+
+if 0
+adj2pajek2(A,'foo',...
+            'nodeNames',{'TF1','TF2','G1','G2','G3'},...
+            'shapes',{'box','box','ellipse','ellipse','ellipse'});
+
+N = 100; part = ones(1,N); part(intersect(reg.tfidxTest,1:N))=2;
+G = reg.Atest(1:N, 1:N)';
+adj2pajek2(G, 'Ecoli100', 'partition', part)
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/bnsoftOld.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1078 @@
+<head>
+<TITLE>Software Packages for Graphical Models / Bayesian Networks</TITLE>
+</head>
+ 
+<body>
+
+<h1>
+Software Packages for Graphical Models / Bayesian Networks
+</h1>
+<p>
+Written by Kevin Murphy.
+<br>
+Last updated 31 October  2005.
+
+<h3>Remarks</h3>
+<ul>
+
+<li>
+A much more detailed comparison of some of these software packages is
+available from Appendix B of 
+<a href="http://www.csse.monash.edu.au/bai/">Bayesian AI</a>, by 
+Ann Nicholson and Kevin Korb.
+This appendix is
+available
+<a
+href="http://www.csse.monash.edu.au/bai/book/appendix_b.pdf">here</a>,
+and is based on the online comparison below.
+
+<li>
+An online <a
+href="http://servasi.insa-rouen.fr/enseignement/siteUV/rna/BNT/software.html">French
+version</a> of this page is also available (not necessarily up-to-date).
+
+<!--
+<li>
+Matt Turk has made a
+<a href="http://ilab.cs.ucsb.edu/BayesNets/Bayesia_Software.pdf">pdf
+version of this page</a> (not necessarily up-to-date) with some extra
+comments on the packages.
+-->
+<!--
+<br>
+(He also has a
+<a href="http://ilab.cs.ucsb.edu/BayesNets">cached copy</a> of several of
+the packages listed below, which you can look at if links are down.)
+-->
+
+</ul>
+
+<h3>What do the headers in the table mean?</h3>
+
+<ul>
+<li> Src = source code included? (N=no) If so, what language?
+
+<li> API = application program interface included?
+(N means the program cannot be integrated into your code, i.e., it
+must be run as a standalone executable.)
+
+<li> Exec = Executable runs on W = Windows (95/98/NT), U = Unix, M =
+Mac, or - = any machine with a compiler.
+
+<li> Cts = are continuous (latent) nodes supported?
+G = (conditionally) Gaussians nodes supported analytically,
+Cs = continuous nodes supported by sampling,
+Cd = continuous nodes supported by discretization,
+Cx = continuous nodes supported by some unspecified method,
+D = only discrete nodes supported.
+
+
+<li> GUI = Graphical User Interface included?
+
+<li> Learns parameters?
+
+<li> Learns structure? CI = means uses conditional independency tests
+
+<!--
+<li> Sample = sampling methods (e.g., likelihood weighting, MCMC) supported?
+-->
+
+<li> Utility = utility and decision nodes (i.e., influence diagrams)
+supported?
+
+<li> Free?
+0 = free (although possibly only for academic use).
+$ = commercial software (although most have free versions
+which are restricted in
+various ways, e.g., the model size is limited, or models cannot be
+saved, or there is no API.)
+
+
+<li> Undir?
+What kind of graphs are supported?
+U = only undirected graphs,
+D = only directed graphs,
+UD = both undirected and directed,
+CG = chain graphs (mixed directed/undirected).
+
+
+<li> Inference = which inference algorithm is used?
+jtree = junction tree,
+varelim = variable (bucket) elimination,
+MH = Metropols Hastings,
+G = Gibbs sampling,
+IS = importance sampling,
+sampling = some other Monte Carlo method,
+polytree = Pearl's algorithm restricted to a graph with no cycles, 
+none = no inference supported (hence the program is only designed for
+structure learning from completely observed data) 
+
+<li> Comments.
+If in "quotes", I am quoting the authors at their request.
+
+</ul>
+
+
+
+<!--
+The following table is automatically generated as follows
+bnsoft_to_html.pl < bnsoft.txt > ! soft.html  
+Then soft.html is inserted and the last line is tidied up.
+-->
+
+<table border>
+<tr>
+<td> Name
+<td> Authors
+<td> Src
+<td> API
+<td> Exec
+<td> Cts
+<td> GUI
+<td> Params
+<td> Struct
+<td> Utility
+<td> Free
+<td> Undir
+<td> Inference
+<td> Comments
+
+
+<tr>
+<td> <!--Name--> <a href=http://www.agenarisk.com > AgenaRisk</a>
+<td> <!--Authors-->Agena
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->W,U
+<td> <!--Cts-->Cx
+<td> <!--GUI-->Y
+<td> <!--Params-->Y
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->$
+<td> <!--Undir-->D
+<td> <!--Inference-->JTree
+<td> <!--Comments-->Simulation by Dynamic discretisation
+
+<tr>
+<td> <!--Name--> <a href=http://www.lumina.com > Analytica</a>
+<td> <!--Authors-->Lumina
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->W,M
+<td> <!--Cts-->G
+<td> <!--GUI-->Y
+<td> <!--Params-->N
+<td> <!--Struct-->N
+<td> <!--Utility-->Y
+<td> <!--Free-->$
+<td> <!--Undir-->D
+<td> <!--Inference-->sampling
+<td> <!--Comments-->spread sheet compatible
+
+<tr>
+<td> <!--Name--> <a href=http://www.cs.duke.edu/~amink/software/banjo/> Banjo</a>
+<td> <!--Authors-->Hartemink
+<td> <!--Src-->Java
+<td> <!--API-->Y
+<td> <!--Exec-->W,U,M
+<td> <!--Cts-->Cd
+<td> <!--GUI-->N
+<td> <!--Params-->N
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->none
+<td> <!--Comments--> structure learning of
+static or dynamic networks of discrete variables
+
+
+<tr>
+<td><a href=http://www.cs.Helsinki.FI/research/fdk/bassist/> Bassist</a>
+<td>        U. Helsinki
+<td>            C++
+<td>            Y
+<td>           U
+<td>            G
+<td>            N
+<td>     Y
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      MH
+<td>       Generates C++ for MCMC.
+
+<tr>
+<td><a href=http://www.cs.Helsinki.FI/research/cosco/Projects/NONE/SW/ > Bayda</a>
+<td>        U. Helsinki
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>            G
+<td>            Y
+<td>     Y
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      ?
+<td>       Bayesian Naive Bayes classifier.
+
+<tr>
+<td><a href=http://www.mbfys.kun.nl/snn/Research/bayesbuilder/  >  BayesBuilder</a>
+<td>        Nijman (U. Nijmegen)
+<td>            N
+<td>            N
+<td>           W
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        N
+<td>         0
+<td>      D
+<td>      ?
+<td>       -
+
+<tr>
+<td> <!--Name--> <a
+href="http://www.bayesia.com">BayesiaLab</a>
+<td> <!--Authors-->Bayesia Ltd
+<td> <!--Src-->N
+<td> <!--API-->N
+<td> <!--Exec-->-
+<td> <!--Cts-->Cd
+<td> <!--GUI-->Y
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->$
+<td> <!--Undir-->CG
+<td> <!--Inference-->jtree,G
+<td> <!--Comments-->
+<!--
+Structural learning (association discovery,
+classification), Bayesian clustering with analysis report generation,
+missing values 
+processing, essential graphs, analysis toolbox, adaptive
+questionnaires, dynamic models
+-->
+Structural learning, adaptive
+questionnaires, dynamic models
+
+
+
+
+<tr>
+
+<td><a href=http://www.bayesware.com>Bayesware Discoverer</a>
+<td>        Bayesware
+<td>            N
+<td>            N
+<td>           WUM
+<td>            Cd
+<td>            Y
+<td>     Y
+<td>     Y
+<td>        N
+<td>            $
+<td>      D
+<td>      ?
+<td>       Uses bound and collapse for learning with missing data.
+
+<tr>
+<td><a href=http://B-Course.hiit.fi/> B-course</a>
+<td>        U.  Helsinki
+<td>            N
+<td>            N
+<td>           WUM
+<td>            Cd
+<td>            Y
+<td>     Y
+<td>     Y
+<td>        N
+<td>            0
+<td>      D
+<td>      ?
+<td>       Runs on their server: view results using a web browser.
+
+<!--
+<tr>
+<td><a href="http://www.aist.go.jp/ETL/etl/suri/motomura/BN/bn-java.html">Bayonnet</a>
+<td>        Motomura (ETL)
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>            NN
+<td>            Cx
+<td>     Y
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      ?
+<td>       For learning, represents BN as a neural net.
+-->
+
+<tr>
+<td><a href=http://www.cs.ualberta.ca/~jcheng/bnpc.htm  >  Belief net power constructor</a>
+<td>        Cheng (U.Alberta)
+<td>            N
+<td>            W
+<td>           W
+<td>            D
+<td>            Y
+<td>     Y
+<td>     CI
+<td>        N
+<td>            0
+<td>      D
+<td>      ?
+<td>       -
+
+<tr>
+<td><a href=http://www.cs.berkeley.edu/~murphyk/Bayes/bnt.html  >  BNT</a>
+<td>        Murphy (U.C.Berkeley)
+<td>            Matlab/C
+<td>            Y
+<td>           WUM
+<td>            G
+<td>            N
+<td>     Y
+<td>     Y
+<td>        Y
+<td>            0
+<td>      D,U
+<td>      Many
+<td>       Also handles dynamic models, like HMMs and Kalman filters.
+
+
+<tr>
+<td> <!--Name--> <a href="http://bndev.sourceforge.net/">BNJ</a>
+<td> <!--Authors-->Hsu (Kansas)
+<td> <!--Src-->Java
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->D
+<td> <!--GUI-->Y
+<td> <!--Params-->N
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->jtree, IS
+<td> <!--Comments-->-
+
+<!--
+<tr>
+<td><a href=http://94.parkview-court.net/project/  >  BN Toolkit</a>
+<td>        Gowans (Imperial)
+<td>            Visual Basic
+<td>            Y
+<td>           W
+<td>            D
+<td>            Y
+<td>     N
+<td>     Y
+<td>        N
+<td>            0
+<td>      D
+<td>      Polytree
+<td>       Parser and GUI for the XML-BIF format.
+-->
+
+<tr>
+<td><a href=http://www.ics.uci.edu/~irinar  >  BucketElim</a>
+<td>        Rish (U.C.Irvine)
+<td>            C++
+<td>            Y
+<td>           WU
+<td>            D
+<td>            N
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Varelim
+<td>       -
+
+<tr>
+<td><a href=http://www.mrc-bsu.cam.ac.uk/bugs  >  BUGS</a>
+<td>        MRC/Imperial College
+<td>            N
+<td>            N
+<td>           WU
+<td>            Cs
+<td>            W
+<td>     Y
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Gibbs
+<td>       -
+
+<tr>
+<td><a href=http://www.data-digest.com  >  Business Navigator 5</a>
+<td>        Data Digest Corp
+<td>            N
+<td>            N
+<td>           W
+<td>            Cd
+<td>            Y
+<td>     Y
+<td>     Y
+<td>        N
+<td>            $
+<td>      D
+<td>      Jtree
+<td>       -
+
+<tr>
+<td><a href=http://www-pcd.stanford.edu/cousins/caben-1.1.tar.gz  >  CABeN</a>
+<td>        Cousins et al. (Wash. U.)
+<td>            C
+<td>            Y
+<td>           WU
+<td>            D
+<td>            N
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      5 Sampling methods
+<td>       -
+
+<tr>
+<td> <!--Name--> <a href=
+http://discover1.mc.vanderbilt.edu/discover/public/>Causal discoverer</a>
+<td> <!--Authors-->Vanderbilt
+<td> <!--Src-->N
+<td> <!--API-->N
+<td> <!--Exec-->W
+<td> <!--Cts-->-
+<td> <!--GUI-->-
+<td> <!--Params-->N
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->-
+<td> <!--Comments-->structure learning only
+
+
+<tr>
+<td><a href=http://www.math.auc.dk/~jhb/CoCo/information.html  >  CoCo+Xlisp</a>
+<td>        Badsberg (U. Aalborg)
+<td>            C/lisp
+<td>            Y
+<td>           U
+<td>            D
+<td>            Y
+<td>     Y
+<td>     CI
+<td>        N
+<td>            0
+<td>      U
+<td>      Jtree
+<td>       Designed for contingency tables.
+
+<tr>
+<td><a href=http://www.cs.ubc.ca/labs/lci/CIspace/  >  CIspace</a>
+<td>        Poole et al. (UBC)
+<td>            Java
+<td>            N
+<td>           WU
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Varelim
+<td>       -
+
+<tr>
+<td> <!--Name--> <a href="http://www.robots.ox.ac.uk/~parg/software.html">DBNbox</a>
+<td> <!--Authors-->Roberts et al
+<td> <!--Src-->Matlab
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->Y
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+
+<td> <!--Free-->Y
+<td> <!--Undir-->D
+<td> <!--Inference-->Various
+<td> <!--Comments-->DBNs
+
+<tr>
+<td> <!--Name--><a href=http://www.math.auc.dk/novo/deal>Deal</a>
+<td> <!--Authors-->Bottcher et al
+<td> <!--Src-->R
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->G
+<td> <!--GUI-->Y
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->None
+<td> <!--Comments-->
+Structure learning.
+
+<tr>
+<td><a href=http://www.deriveit.com >DeriveIt</a>
+<td> <!--Authors-->DeriveIt LLC
+<td> <!--Src-->N
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->?
+<td> <!--GUI-->?
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->?
+<td> <!--Free-->$
+<td> <!--Undir-->D
+<td> <!--Inference-->Jtree
+<td> <!--Comments-->
+Exploits local structure in CPDs.
+
+
+<tr>
+<td><a href=http://www.noeticsystems.com>Ergo</>
+<td> <!--Authors-->Noetic systems
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->W,M
+<td> <!--Cts-->D
+<td> <!--GUI-->Y
+<td> <!--Params-->N
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->$
+<td> <!--Undir-->D
+<td> <!--Inference-->jtree
+<td> <!--Comments-->-
+
+<!--
+<tr>
+<td><a href=http://www.ens-lyon.fr/~jnarboux/Floue/index.html>FLoUE/BIFtoN</a>
+<td>        ENS Lyon
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>           D
+<td>            N
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Jtree
+<td>       -
+-->
+
+<tr>
+<td><a href=http://www.staff.ncl.ac.uk/d.j.wilkinson/software/gdagsim/  >  GDAGsim</a>
+<td>        Wilkinson (U. Newcastle)
+<td>            C
+<td>            Y
+<td>           WUM
+<td>            G
+<td>            N
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Exact
+<td>    Bayesian analysis of large linear Gaussian directed models.
+
+
+<tr>
+<td><a href=http://www2.sis.pitt.edu/~genie  >  Genie</a>
+<td>        U. Pittsburgh
+<td>            N
+<td>            WU
+<td>           WU
+<td>            D
+<td>            W
+<td>     N
+<td>     N
+<td>        Y
+<td>            0
+<td>      D
+<td>      Jtree
+<td>       -
+
+<tr>
+<td><a href=http://www.math.ntnu.no/~hrue/GMRFsim/  >  GMRFsim</a>
+<td>        Rue (U. Trondheim)
+<td>            C
+<td>            Y
+<td>           WUM
+<td>            G
+<td>            N
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      U
+<td>      MCMC
+<td>       Bayesian analysis of large linear Gaussian undirected models.
+
+
+<tr>
+<td> <!--Name--> <a href=http://ssli.ee.washington.edu/~bilmes/gmtk/>GMTk</a>
+<td> <!--Authors-->Bilmes (UW), Zweig (IBM)
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->U
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->Jtree
+<td> <!--Comments-->
+Designed for speech recognition.
+
+<tr>
+<td> <!--Name--> <a href=http://www.r-project.org/gR>gR</a>
+<td> <!--Authors-->Lauritzen et al.
+<td> <!--Src-->R
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->-
+<td> <!--GUI-->-
+<td> <!--Params-->-
+<td> <!--Struct-->-
+<td> <!--Utility-->-
+<td> <!--Free-->0
+<td> <!--Undir-->-
+<td> <!--Inference-->-
+<td> <!--Comments-->Currently vaporware
+
+
+<tr>
+<td> <!--Name--> <a href=http://www.stats.bris.ac.uk/~peter/Grappa/>Grappa</a>
+<td> <!--Authors-->Green (Bristol)
+<td> <!--Src-->R
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->N)
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->Jtree
+<td> <!--Comments-->-
+
+
+<tr>
+<td><a href=http://www.hugin.com  >  Hugin Expert</a>
+<td>        Hugin
+<td>            N
+<td>            Y
+<td>           W
+<td>            G
+<td>            W
+<td>     Y
+<td>     CI
+<td>        Y
+<td>            $
+<td>      CG
+<td>      Jtree
+<td>       -
+
+
+<tr>
+<td> <!--Name--> <a href=http://www.warnes.net/GregsSoftwareLinks/index_html?Tab=MCMC>Hydra</a>
+<td> <!--Authors-->Warnes (U.Wash.)
+<td> <!--Src-->Java
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->Cs
+<td> <!--GUI-->Y
+<td> <!--Params-->Y
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->U,D
+<td> <!--Inference-->MCMC
+<td> <!--Comments-->-
+
+
+<tr>
+<!-- http://www.rpal.rockwell.com/ideal.html  -->
+<td><a href=http://yoda.cis.temple.edu:8080/ideal>Ideal</a>
+<td>        Rockwell
+<td>            Lisp
+<td>            Y
+<td>           WUM
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        Y
+<td>            0
+<td>      D
+<td>      Jtree
+<td>       GUI requires Allegro Lisp.
+
+<tr>
+<td><a href=http://www.cs.cmu.edu/~javabayes/Home/  >  Java Bayes</a>
+<td>        Cozman (CMU)
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        Y
+<td>            0
+<td>      D
+<td>      Varelim, jtree
+<td>       -
+
+
+<tr>
+<td> <!--Name--><a href="http://www.codeas.com/kbaseai.php" >KBaseAI</a>
+<td> <!--Authors-->Codeas
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->W,U
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->N
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->$
+<td> <!--Undir-->D
+<td> <!--Inference-->varelim
+<td> <!--Comments-->client/server architecture, multiple users, access
+control, query language
+
+
+<tr>
+<td> <!--Name--> <a href=http://www.cs.huji.ac.il/labs/compbio/LibB>LibB</a>
+<td> <!--Authors-->Friedman (Hebrew U)
+<td> <!--Src-->N
+<td> <!--API-->Y
+<td> <!--Exec-->W
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->none
+<td> <!--Comments-->
+Structure learning
+
+<tr>
+<td><a href=http://www.hypergraph.dk/  >  MIM</a>
+<td>        HyperGraph Software
+<td>            N
+<td>            N
+<td>           W
+<td>            G
+<td>            Y
+<td>     Y
+<td>     Y
+<td>        N
+<td>            $
+<td>      CG
+<td>      Jtree
+<td>       Up to 52 variables.
+
+<tr>
+<td><a href=http://research.microsoft.com/adapt/MSBNx/  >  MSBNx</a>
+<td>        Microsoft
+<td>            N
+<td>            Y
+<td>           W
+<td>            D
+<td>            W
+<td>     N
+<td>     N
+<td>        Y
+<td>            0
+<td>      D
+<td>      Jtree
+<td>       -
+
+<tr>
+<td><a href=http://www.norsys.com  >  Netica</a>
+<td>        Norsys
+<td>            N
+<td>            WUM
+<td>           W
+<td>            G
+<td>            W
+<td>     Y
+<td>     N
+<td>        Y
+<td>            $
+<td>      D
+<td>      jtree
+<td>       -
+
+<tr>
+<td> <!--Name--> <a href="http://www.autonlab.org/autonweb/showSoftware/149/">Optimal
+Reinsertion</a>
+<td> <!--Authors-->Moore, Wong (CMU)
+<td> <!--Src-->N
+<td> <!--API-->N
+<td> <!--Exec-->W,U
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->none
+<td> <!--Comments-->structure learning
+
+
+<tr>
+<td> <!--Name--> <a href="http://people.bu.edu/vladimir/pmt/index.html">PMT</a>
+<td> <!--Authors-->Pavlovic (BU)
+<td> <!--Src-->Matlab/C
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->N
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->special purpose
+<td> <!--Comments-->-
+
+
+
+<tr>
+<td> <!--Name--> <a href=http://www.intel.com/research/mrl/pnl/>PNL</a>
+<td> <!--Authors-->Eruhimov (Intel)
+<td> <!--Src-->C++
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->D
+<td> <!--GUI-->N
+<td> <!--Params-->Y
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->U,D
+<td> <!--Inference-->Jtree
+<td> <!--Comments-->
+A C++ version of BNT; will be released 12/03.
+
+
+<tr>
+<td><a href=http://iridia.ulb.ac.be/pulcinella/Welcome.html  >  Pulcinella</a>
+<td>        IRIDIA
+<td>            Lisp
+<td>            Y
+<td>           WUM
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      ?
+<td>       Uses valuation systems for non-probabilistic calculi.
+
+<tr>
+<!-- http://civil.colorado.edu/~dodier/sonero-mirror/index.html  -->
+<td><a href=http://sourceforge.net/projects/riso>RISO</a>
+<td>        Dodier (U.Colorado)
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>            G
+<td>            Y
+<td>     N
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Polytree
+<td>       Distributed implementation.
+
+
+
+<tr>
+<td> <!--Name--> <a href=http://reasoning.cs.ucla.edu/samiam/> Sam Iam</a>
+<td> <!--Authors-->Darwiche (UCLA)
+<td> <!--Src-->N
+<td> <!--API-->N ?
+<td> <!--Exec-->WU ? (Java executable)
+<td> <!--Cts-->G ?
+<td> <!--GUI-->Y
+<td> <!--Params-->Y
+<td> <!--Struct-->N ?
+<td> <!--Utility-->Y
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->Recursive conditioning
+<td> <!--Comments-->Also does sensitivity Analysis
+
+
+<tr>
+<td><a href=http://www.phil.cmu.edu/tetrad/>Tetrad</a>
+<td>        CMU
+<td>            N
+<td>            N
+<td>           WU
+<td>            G
+<td>            N
+<td>     Y
+<td>     CI
+<td>        N
+<td>            0
+<td>      U,D
+<td>      None
+<td>       -
+
+
+<tr>
+<td> <!--Name--> <a href="https://sourceforge.net/projects/unbbayes/">UnBBayes</a>
+<td> <!--Authors-->?
+<td> <!--Src-->Java
+<td> <!--API-->-
+<td> <!--Exec-->-
+<td> <!--Cts-->D
+<td> <!--GUI-->Y
+<td> <!--Params-->N
+<td> <!--Struct-->Y
+<td> <!--Utility-->N
+<td> <!--Free-->0
+<td> <!--Undir-->D
+<td> <!--Inference-->jtree
+<td> <!--Comments-->K2 for struct learning
+
+
+<tr>
+<td><a href=http://www.inference.phy.cam.ac.uk/jmw39/>Vibes</a>
+<td>        Winn & Bishop (U. Cambridge)
+<td>            Java
+<td>            Y
+<td>           WU
+<td>            Cx
+<td>            Y
+<td>     Y
+<td>     N
+<td>        N
+<td>            0
+<td>      D
+<td>      Variational
+<td>    
+Not yet available.
+
+
+<tr>
+<td><a href=http://snowhite.cis.uoguelph.ca/faculty_info/yxiang/ww3/>  Web Weaver</a>
+<td>        Xiang (U.Regina)
+<td>            Java
+<td>            Y
+<td>           WUM
+<td>            D
+<td>            Y
+<td>     N
+<td>     N
+<td>        Y
+<td>            0
+<td>      D
+<td>      ?
+<td>       -
+
+<tr>
+<td><a href=http://research.microsoft.com/~dmax/WinMine/tooldoc.htm  >  WinMine</a>
+<td>        Microsoft
+<td>            N
+<td>            N
+<td>           W
+<td>            Cx
+<td>            Y
+<td>     Y
+<td>     Y
+<td>        N
+<td>            0
+<td>      U,D
+<td>      None
+<td>       Learns BN or dependency net structure.
+
+<tr>
+<td><a href=http://www.staff.city.ac.uk/~rgc/webpages/xbpage.html >  XBAIES 2.0</a>
+<td>        Cowell (City U.)
+<td>            N
+<td>            N
+<td>           W
+<td>            G
+<td>            Y
+<td>     Y
+<td>     N
+<td>        Y
+<td>            0
+<td>      CG
+<td>      Jtree
+<td>       -
+
+<tr>
+
+</table>
+
+
+<p>
+<h2>Other sites related to (software for) graphical models</h2>
+<ul>
+
+
+<li>
+<a
+href="http://directory.google.com/Top/Computers/Artificial_Intelligence/Belief_Networks/Software/">
+Google's list</a> of Bayes net software.
+
+<!--
+<li> <a href="http://www.sis.pitt.edu/~dsl/da-software.html">
+Decision analysis programs</a>, list maintained by 
+Marek Druzdzel.
+-->
+
+<li> <a href="http://www.cs.cmu.edu/~lorens/papers/mscthesis.html">
+Comparison of decision analysis software packages</a> by
+Håkan L. Younes. The emphasis is on real-time decision making.
+
+<li> <a href="http://bayes.stat.washington.edu/almond/belief.html">
+Older belief net programs</a> (c 1996), a list created (but no longer maintained)
+by Russ Almond. 
+
+<li>
+<a
+href="http://www.cs.huji.ac.il/labs/compbio/Repository">
+Repository of Bayes nets</a>.
+
+</document>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/bnt.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,359 @@
+<html> <head>
+<title>Bayes Net Toolbox for Matlab</title>
+</head>
+
+<body>
+<!--<body  bgcolor="#FFFFFF"> -->
+
+<h1>Bayes Net Toolbox for Matlab</h1>
+Written by Kevin Murphy, 1997--2002.
+Last updated: 19 October 2007.
+
+<P><P>
+<table>
+<tr>
+<td>
+<img align=left src="Figures/mathbymatlab.gif" alt="Matlab logo">
+<!-- <img align=left src="toolbox.gif" alt="Toolbox logo">-->
+<td>
+<!--<center>-->
+<a href="http://groups.yahoo.com/group/BayesNetToolbox/join">
+<img src="http://groups.yahoo.com/img/ui/join.gif" border=0><br>
+Click to subscribe to the BNT email list</a>
+<br>
+(<a href="http://groups.yahoo.com/group/BayesNetToolbox">
+http://groups.yahoo.com/group/BayesNetToolbox</a>)
+<!--</center>-->
+</table>
+
+
+<p>
+<ul>
+<li> <a href="changelog.html">Changelog</a>
+
+<li> <a
+href="http://www.cs.ubc.ca/~murphyk/Software/BNT/FullBNT-1.0.4.zip">Download
+zip file</a>.
+
+<li> <a href="install.html">Installation</a>
+
+<li> <a href="license.gpl">Terms and conditions of use (GNU Library GPL)</a>
+
+
+<li> <a href="usage.html">How to use the toolbox</a>
+
+<li> <a href="whyNotSourceforge.html">Why I closed the sourceforge
+site</a>.
+
+<!--
+<li> <a href="Talks/BNT_mathworks.ppt">Powerpoint slides on graphical models
+and BNT</a>, presented to the Mathworks, June 2003
+
+
+<li> <a href="Talks/gR03.ppt">Powerpoint slides on BNT and object
+recognition</a>, presented at the <a
+href="http://www.math.auc.dk/gr/gr2003.html">gR</a> workshop,
+September 2003. 
+-->
+
+<!--
+<li> <a href="gR03.pdf">Proposed design for gR, a graphical models
+toolkit in R</a>, September 2003.
+(For more information on the gR project,
+click <a href="http://www.r-project.org/gR/">here</a>.)
+-->
+
+<li>
+<!--
+<img src = "../new.gif" alt="new">
+-->
+
+<a href="../../Papers/bnt.pdf">Invited paper on BNT</a>,
+published in
+Computing Science and Statistics, 2001.
+
+<li> <a href="../bnsoft.html">Other Bayes net software</a>
+
+<!--<li> <a href="software.html">Other Matlab software</a>-->
+
+<li> <a href="../../Bayes/bnintro.html">A brief introduction to
+Bayesian Networks</a>
+
+
+<li> <a href="#features">Major features</a>
+<li> <a href="#models">Supported models</a>
+<!--<li> <a href="#future">Future work</a>-->
+<li> <a href="#give_away">Why do I give the code away?</a>
+<li> <a href="#why_matlab">Why Matlab?</a>
+<li> <a href="#ack">Acknowledgments</a>
+</ul>
+<p>
+
+
+
+<h2><a name="features">Major features</h2>
+<ul>
+
+<li> BNT supports many types of
+<b>conditional probability distributions</b> (nodes),
+and it is easy to add more.
+<ul>
+<li>Tabular (multinomial)
+<li>Gaussian
+<li>Softmax (logistic/ sigmoid)
+<li>Multi-layer perceptron (neural network)
+<li>Noisy-or
+<li>Deterministic
+</ul>
+<p>
+
+<li> BNT supports <b>decision and utility nodes</b>, as well as chance
+nodes,
+i.e., influence diagrams as well as Bayes nets.
+<p>
+
+<li> BNT supports static and dynamic BNs (useful for modelling dynamical systems
+and sequence data).
+<p>
+
+<li> BNT supports many different <b>inference algorithms</b>,
+and it is easy to add more.
+
+<ul>
+<li> Exact inference for static BNs:
+<ul>
+<li>junction tree
+<li>variable elimination
+<li>brute force enumeration (for discrete nets)
+<li>linear algebra (for Gaussian nets)
+<li>Pearl's algorithm (for polytrees)
+<li>quickscore (for QMR)
+</ul>
+
+<p>
+<li> Approximate inference for static BNs:
+<ul>
+<li>likelihood weighting
+<li> Gibbs sampling
+<li>loopy belief propagation
+</ul>
+
+<p>
+<li> Exact inference for DBNs:
+<ul>
+<li>junction tree
+<li>frontier algorithm
+<li>forwards-backwards (for HMMs)
+<li>Kalman-RTS (for LDSs)
+</ul>
+
+<p>
+<li> Approximate inference for DBNs:
+<ul>
+<li>Boyen-Koller
+<li>factored-frontier/loopy belief propagation
+</ul>
+
+</ul>
+<p>
+
+<li>
+BNT supports several methods for <b>parameter learning</b>,
+and it is easy to add more.
+<ul>
+
+<li> Batch MLE/MAP parameter learning using EM.
+(Each node type has its own M method, e.g. softmax nodes use IRLS,<br>
+and each inference engine has its own E method, so the code is fully modular.)
+
+<li> Sequential/batch Bayesian parameter learning (for fully observed tabular nodes only).
+</ul>
+
+
+<p>
+<li>
+BNT supports several methods for <b>regularization</b>,
+and it is easy to add more.
+<ul>
+<li> Any node can have its parameters clamped (made non-adjustable).
+<li> Any set of compatible nodes can have their parameters tied (c.f.,
+weight sharing in a neural net).
+<li> Some node types (e.g., tabular) supports priors for MAP estimation.
+<li> Gaussian covariance matrices can be declared full or diagonal, and can
+be tied across states of their discrete parents (if any).
+</ul>
+
+<p>
+<li>
+BNT supports several methods for <b>structure learning</b>,
+and it is easy to add more.
+<ul>
+
+<li> Bayesian structure learning,
+using MCMC or local search (for fully observed tabular nodes only).
+
+<li> Constraint-based structure learning (IC/PC and IC*/FCI).
+</ul>
+
+
+<p>
+<li> The source code is extensively documented, object-oriented, and free, making it
+an excellent tool for teaching, research and rapid prototyping.
+
+</ul>
+
+
+
+<h2><a name="models">Supported probabilistic models</h2>
+<p>
+It is trivial to implement all of
+the following probabilistic models using the toolbox.
+<ul>
+<li>Static
+<ul>
+<li> Linear regression, logistic regression, hierarchical mixtures of experts
+
+<li> Naive Bayes classifiers, mixtures of Gaussians,
+sigmoid belief nets
+
+<li> Factor analysis, probabilistic
+PCA, probabilistic ICA, mixtures of these models
+
+</ul>
+
+<li>Dynamic
+<ul>
+
+<li> HMMs, Factorial HMMs, coupled HMMs, input-output HMMs, DBNs
+
+<li> Kalman filters, ARMAX models, switching Kalman filters,
+tree-structured Kalman filters, multiscale AR models
+
+</ul>
+
+<li> Many other combinations, for which there are (as yet) no names!
+
+</ul>
+
+
+<!--
+<h2><a name="future">Future work</h2>
+
+I have a long <a href="wish.txt">wish list</a>
+of features I would like to add to BNT
+at some point in the future.
+Please email me (<a
+href="mailto:murphyk@cs.berkeley.edu">murphyk@cs.berkeley.edu</a>)
+if you are interested in contributing!
+-->
+
+
+
+<h2><a name="give_away">Why do I give the code away?</h2>
+
+<ul>
+
+<li>
+I was hoping for a Linux-style effect, whereby people would contribute
+their own Matlab code so that the package would grow. With a few
+exceptions, this has not happened, 
+although several people have provided bug-fixes (see the <a
+href="#ack">acknowledgements</a>). 
+Perhaps the <a
+href="http://www.cs.berkeley.edu/~murphyk/OpenBayes/index.html">Open
+Bayes Project</a> will be more 
+succesful in this regard, although the evidence to date is not promising.
+
+<p>
+<li>
+Knowing that someone else might read your code forces one to
+document it properly, a good practice in any case, as anyone knows who
+has revisited old code.
+In addition, by having many "eye balls", it is easier to spot bugs.
+
+
+<p>
+<li>
+I believe in the concept of
+<a href="http://www-stat.stanford.edu/~donoho/Reports/1995/wavelab.pdf">
+reproducible research</a>.
+Good science requires that other people be able 
+to replicate your experiments.
+Often a paper does not give enough details about how exactly an
+algorithm was implemented (e.g., how were the parameters chosen? what
+initial conditions were used?), and these can make a big difference in
+practice.
+Hence one should release the code that
+was actually used to generate the results in one's paper.
+This also prevents re-inventing the wheel.
+
+<p>
+<li>
+I was fed up with reading papers where all people do is figure out how 
+to do exact inference and/or learning
+in a model which is just a trivial special case of a general Bayes net, e.g.,
+input-output HMMs, coupled-HMMs, auto-regressive HMMs.
+My hope is that, by releasing general purpose software, the field can
+move on to more interesting questions.
+As Alfred North Whitehead said in 1911,
+"Civilization advances by extending the number of important operations
+that we can do without thinking about them."
+
+</ul>
+
+
+
+
+
+<h2><a name="why_matlab">Why Matlab?</h2>
+
+Matlab is an interactive, matrix-oriented programming language that
+enables one to express one's (mathematical) ideas very concisely and directly,
+without having to worry about annoying details like memory allocation
+or type checking. This considerably reduces development time and
+keeps code short, readable and fully portable.
+Matlab has excellent built-in support for many data analysis and
+visualization routines. In addition, there are many useful toolboxes, e.g., for
+neural networks, signal and image processing.
+The main disadvantages of Matlab are that it can be slow (which is why
+we are currently rewriting parts of BNT in C), and that the commercial
+license is expensive (although the student version is only $100 in the US).
+<p>
+Many people ask me why I did not use
+<a href="http://www.octave.org/">Octave</a>,
+an open-source Matlab clone.
+The reason is that
+Octave does not support multi-dimensional arrays,
+cell arrays, objects, etc.
+<p>
+Click <a href="../which_language.html">here</a> for a more detailed
+comparison of matlab and other languages.
+
+
+
+<h2><a name="ack">Acknowledgments</h2>
+
+I would like to thank numerous people for bug fixes, including:
+Rainer Deventer, Michael Robert James, Philippe Leray, Pedrito Maynard-Reid II, Andrew Ng,
+Ron Parr, Ilya Shpitser, Xuejing Sun, Ursula Sondhauss.
+<p>
+I would like to thank the following people for contributing code:
+Pierpaolo Brutti, Ali Taylan Cemgil, Tamar Kushnir, 
+Tom Murray,
+Nicholas Saunier,
+Ken Shan,
+Yair Weiss,
+Bob Welch,
+Ron Zohar.
+<p>
+The following Intel employees have also contributed code:
+Qian Diao, Shan Huang, Yimin Zhang and especially Wei Hu.
+
+<p>
+I would like to thank Stuart Russell for funding me over the years as
+I developed BNT, and Gary Bradksi for hiring me as an intern at Intel,
+which has supported much of the recent developments of BNT.
+
+       
+</body>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/bnt_download.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+<title>Download BNT</title>
+
+Download BNT from <a href="http://bnt.sourceforge.net/">BNT sourceforge site</a>
+
+<!--
+Number of hits since 13 November 2002:
+<!-- Begin of WebCounter.com code. Do not modify -->
+<applet codebase="http://vc.webcounter.com/" code="vc5.class" width=88 height=31>
+<param name=a value=37322><a href="http://www.webcounter.com/">
+<img src="http://vc.webcounter.com/0/t?a=37322&s=&g=" width=88 height=31></a></applet>
+<!-- End of WebCounter.com code. Do not modify -->
+
+<p>
+<a href="../FullBNT.zip">Download BNT</a>
+<p>
+-->
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/bnt_pre_sf.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,350 @@
+<html> <head>
+<title>Bayes Net Toolbox for Matlab</title>
+</head>
+
+<body>
+<!--<body  bgcolor="#FFFFFF"> -->
+
+<h1>Bayes Net Toolbox for Matlab</h1>
+Written by Kevin Murphy.
+<br>
+<b>BNT is now  available from <a href="http://bnt.sourceforge.net/">sourceforge</a>!</b>
+<!--
+Last updated on 9 June 2004 (<a href="changelog.html">Detailed
+changelog</a>)
+-->
+<p>
+
+<P><P>
+<table>
+<tr>
+<td>
+<img align=left src="Figures/mathbymatlab.gif" alt="Matlab logo">
+<!-- <img align=left src="toolbox.gif" alt="Toolbox logo">-->
+<td>
+<!--<center>-->
+<a href="http://groups.yahoo.com/group/BayesNetToolbox/join">
+<img src="http://groups.yahoo.com/img/ui/join.gif" border=0><br>
+Click to subscribe to the BNT email list</a>
+<br>
+(<a href="http://groups.yahoo.com/group/BayesNetToolbox">
+http://groups.yahoo.com/group/BayesNetToolbox</a>)
+<!--</center>-->
+</table>
+
+
+<p>
+<ul>
+<!--<li> <a href="bnt_download.html">Download toolbox</a>-->
+<li> Download BNT from <a href="http://bnt.sourceforge.net/">BNT sourceforge site</a>
+
+<li> <a href="license.gpl">Terms and conditions of use (GNU Library GPL)</a>
+
+<li> <a href="usage.html">How to use the toolbox</a>
+
+
+<li> <a href="Talks/BNT_mathworks.ppt">Powerpoint slides on graphical models
+and BNT</a>, presented to the Mathworks, June 2003
+
+<!--
+<li> <a href="Talks/gR03.ppt">Powerpoint slides on BNT and object
+recognition</a>, presented at the <a
+href="http://www.math.auc.dk/gr/gr2003.html">gR</a> workshop,
+September 2003. 
+-->
+
+<li> <a href="gR03.pdf">Proposed design for gR, a graphical models
+toolkit in R</a>, September 2003.
+<!--
+(For more information on the gR project,
+click <a href="http://www.r-project.org/gR/">here</a>.)
+-->
+
+<li>
+<!--
+<img src = "../new.gif" alt="new">
+-->
+<a href="../../Papers/bnt.pdf">Invited paper on BNT</a>,
+published in
+Computing Science and Statistics, 2001.
+
+<li> <a href="bnsoft.html">Other Bayes net software</a>
+
+<!--<li> <a href="software.html">Other Matlab software</a>-->
+
+<li> <a href="../../Bayes/bnintro.html">A brief introduction to
+Bayesian Networks</a>
+
+<li> <a href="#features">Major features</a>
+<li> <a href="#models">Supported models</a>
+<!--<li> <a href="#future">Future work</a>-->
+<li> <a href="#give_away">Why do I give the code away?</a>
+<li> <a href="#why_matlab">Why Matlab?</a>
+<li> <a href="#ack">Acknowledgments</a>
+</ul>
+<p>
+
+
+
+<h2><a name="features">Major features</h2>
+<ul>
+
+<li> BNT supports many types of
+<b>conditional probability distributions</b> (nodes),
+and it is easy to add more.
+<ul>
+<li>Tabular (multinomial)
+<li>Gaussian
+<li>Softmax (logistic/ sigmoid)
+<li>Multi-layer perceptron (neural network)
+<li>Noisy-or
+<li>Deterministic
+</ul>
+<p>
+
+<li> BNT supports <b>decision and utility nodes</b>, as well as chance
+nodes,
+i.e., influence diagrams as well as Bayes nets.
+<p>
+
+<li> BNT supports static and dynamic BNs (useful for modelling dynamical systems
+and sequence data).
+<p>
+
+<li> BNT supports many different <b>inference algorithms</b>,
+and it is easy to add more.
+
+<ul>
+<li> Exact inference for static BNs:
+<ul>
+<li>junction tree
+<li>variable elimination
+<li>brute force enumeration (for discrete nets)
+<li>linear algebra (for Gaussian nets)
+<li>Pearl's algorithm (for polytrees)
+<li>quickscore (for QMR)
+</ul>
+
+<p>
+<li> Approximate inference for static BNs:
+<ul>
+<li>likelihood weighting
+<li> Gibbs sampling
+<li>loopy belief propagation
+</ul>
+
+<p>
+<li> Exact inference for DBNs:
+<ul>
+<li>junction tree
+<li>frontier algorithm
+<li>forwards-backwards (for HMMs)
+<li>Kalman-RTS (for LDSs)
+</ul>
+
+<p>
+<li> Approximate inference for DBNs:
+<ul>
+<li>Boyen-Koller
+<li>factored-frontier/loopy belief propagation
+</ul>
+
+</ul>
+<p>
+
+<li>
+BNT supports several methods for <b>parameter learning</b>,
+and it is easy to add more.
+<ul>
+
+<li> Batch MLE/MAP parameter learning using EM.
+(Each node type has its own M method, e.g. softmax nodes use IRLS,<br>
+and each inference engine has its own E method, so the code is fully modular.)
+
+<li> Sequential/batch Bayesian parameter learning (for fully observed tabular nodes only).
+</ul>
+
+
+<p>
+<li>
+BNT supports several methods for <b>regularization</b>,
+and it is easy to add more.
+<ul>
+<li> Any node can have its parameters clamped (made non-adjustable).
+<li> Any set of compatible nodes can have their parameters tied (c.f.,
+weight sharing in a neural net).
+<li> Some node types (e.g., tabular) supports priors for MAP estimation.
+<li> Gaussian covariance matrices can be declared full or diagonal, and can
+be tied across states of their discrete parents (if any).
+</ul>
+
+<p>
+<li>
+BNT supports several methods for <b>structure learning</b>,
+and it is easy to add more.
+<ul>
+
+<li> Bayesian structure learning,
+using MCMC or local search (for fully observed tabular nodes only).
+
+<li> Constraint-based structure learning (IC/PC and IC*/FCI).
+</ul>
+
+
+<p>
+<li> The source code is extensively documented, object-oriented, and free, making it
+an excellent tool for teaching, research and rapid prototyping.
+
+</ul>
+
+
+
+<h2><a name="models">Supported probabilistic models</h2>
+<p>
+It is trivial to implement all of
+the following probabilistic models using the toolbox.
+<ul>
+<li>Static
+<ul>
+<li> Linear regression, logistic regression, hierarchical mixtures of experts
+
+<li> Naive Bayes classifiers, mixtures of Gaussians,
+sigmoid belief nets
+
+<li> Factor analysis, probabilistic
+PCA, probabilistic ICA, mixtures of these models
+
+</ul>
+
+<li>Dynamic
+<ul>
+
+<li> HMMs, Factorial HMMs, coupled HMMs, input-output HMMs, DBNs
+
+<li> Kalman filters, ARMAX models, switching Kalman filters,
+tree-structured Kalman filters, multiscale AR models
+
+</ul>
+
+<li> Many other combinations, for which there are (as yet) no names!
+
+</ul>
+
+
+<!--
+<h2><a name="future">Future work</h2>
+
+I have a long <a href="wish.txt">wish list</a>
+of features I would like to add to BNT
+at some point in the future.
+Please email me (<a
+href="mailto:murphyk@cs.berkeley.edu">murphyk@cs.berkeley.edu</a>)
+if you are interested in contributing!
+-->
+
+
+
+<h2><a name="give_away">Why do I give the code away?</h2>
+
+<ul>
+
+<li>
+I was hoping for a Linux-style effect, whereby people would contribute
+their own Matlab code so that the package would grow. With a few
+exceptions, this has not happened, 
+although several people have provided bug-fixes (see the <a
+href="#ack">acknowledgements</a>). 
+Perhaps the <a
+href="http://www.cs.berkeley.edu/~murphyk/OpenBayes/index.html">Open
+Bayes Project</a> will be more 
+succesful in this regard, although the evidence to date is not promising.
+
+<p>
+<li>
+Knowing that someone else might read your code forces one to
+document it properly, a good practice in any case, as anyone knows who
+has revisited old code.
+In addition, by having many "eye balls", it is easier to spot bugs.
+
+
+<p>
+<li>
+I believe in the concept of
+<a href="http://www-stat.stanford.edu/~donoho/Reports/1995/wavelab.pdf">
+reproducible research</a>.
+Good science requires that other people be able 
+to replicate your experiments.
+Often a paper does not give enough details about how exactly an
+algorithm was implemented (e.g., how were the parameters chosen? what
+initial conditions were used?), and these can make a big difference in
+practice.
+Hence one should release the code that
+was actually used to generate the results in one's paper.
+This also prevents re-inventing the wheel.
+
+<p>
+<li>
+I was fed up with reading papers where all people do is figure out how 
+to do exact inference and/or learning
+in a model which is just a trivial special case of a general Bayes net, e.g.,
+input-output HMMs, coupled-HMMs, auto-regressive HMMs.
+My hope is that, by releasing general purpose software, the field can
+move on to more interesting questions.
+As Alfred North Whitehead said in 1911,
+"Civilization advances by extending the number of important operations
+that we can do without thinking about them."
+
+</ul>
+
+
+
+
+
+<h2><a name="why_matlab">Why Matlab?</h2>
+
+Matlab is an interactive, matrix-oriented programming language that
+enables one to express one's (mathematical) ideas very concisely and directly,
+without having to worry about annoying details like memory allocation
+or type checking. This considerably reduces development time and
+keeps code short, readable and fully portable.
+Matlab has excellent built-in support for many data analysis and
+visualization routines. In addition, there are many useful toolboxes, e.g., for
+neural networks, signal and image processing.
+The main disadvantages of Matlab are that it can be slow (which is why
+we are currently rewriting parts of BNT in C), and that the commercial
+license is expensive (although the student version is only $100 in the US).
+<p>
+Many people ask me why I did not use
+<a href="http://www.octave.org/">Octave</a>,
+an open-source Matlab clone.
+The reason is that
+Octave does not support multi-dimensional arrays,
+cell arrays, objects, etc.
+<p>
+Click <a href="../which_language.html">here</a> for a more detailed
+comparison of matlab and other languages.
+
+
+
+<h2><a name="ack">Acknowledgments</h2>
+
+I would like to thank numerous people for bug fixes, including:
+Rainer Deventer, Michael Robert James, Philippe Leray, Pedrito Maynard-Reid II, Andrew Ng,
+Ron Parr, Ilya Shpitser, Xuejing Sun, Ursula Sondhauss.
+<p>
+I would like to thank the following people for contributing code:
+Pierpaolo Brutti, Ali Taylan Cemgil, Tamar Kushnir, Ken Shan,
+<a href="http://www.cs.berkeley.edu/~yweiss">Yair Weiss</a>,
+Ron Zohar.
+<p>
+The following Intel employees have also contributed code:
+Qian Diao, Shan Huang, Yimin Zhang and especially Wei Hu.
+
+<p>
+I would like to thank Stuart Russell for funding me over the years as
+I developed BNT, and Gary Bradksi for hiring me as an intern at Intel,
+which has supported much of the recent developments of BNT.
+
+       
+</body>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/cellarray.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+Cell arrays are a little tricky in Matlab.
+Consider this example.
+
+C=num2cell(rand(2,3))
+C = 
+    [0.4565]    [0.8214]    [0.6154]
+    [0.0185]    [0.4447]    [0.7919]
+
+C{1,2}  % this is the contents of this cell (could be a vector or a string)
+ans =
+    0.8214
+
+C{1:2,2} % this is the contents of these cells - returns multiple
+answers!
+ans =
+    0.8214
+ans =
+    0.4447
+
+A = C(1:2,2)  % this is a slice of the cell array
+ans = 
+    [0.8214]
+    [0.4447]
+
+A{1}  % A is itself a cell array
+ans =
+    0.8214
+
+
+
+>> C(1:2,2)=0 % can't assign a scalar to a cell array
+C(1:2,2)=0
+??? Conversion to cell from double is not possible.
+
+
+>> C(1:2,2)={0;0} % can assign a cell array to a cell array
+C(1:2,2)={0;0}
+C = 
+    [0.4565]    [0]    [0.6154]
+    [0.0185]    [0]    [0.7919]
+
+
+BTW, I use cell arrays for evidence for 2 reasons:
+
+1. [] indicates missing values
+2. it can easily represent vector-valued nodes
+
+The following example  makes this clear
+
+C{1,1} = []
+C{2,1} = rand(3,1)
+
+C = 
+              []    [0]    [0.6154]
+    [3x1 double]    [0]    [0.7919]
+
+
+Hope this helps,
+Kevin
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/changelog.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1617 @@
+<title>History of changes to BNT</title>
+<h1>History of changes to BNT</h1>
+
+
+<h2>Changes since 4 Oct 2007</h2>
+
+<pre>
+- 19 Oct 07 murphyk
+
+* BNT\CPDs\@noisyor_CPD\CPD_to_CPT.m: 2nd half of the file is a repeat
+of the first half and was deleted (thanks to Karl Kuschner)
+
+* KPMtools\myismember.m should return logical for use in "assert" so add line at end
+                p=logical(p);  this prevents "assert" from failing on an integer input.
+(thanks to Karl Kuschner)
+
+
+
+- 17 Oct 07 murphyk
+
+* Updated subv2ind and ind2subv in KPMtools to Tom Minka's implementation.
+His ind2subv is faster (vectorized), but I had to modify it so it
+matched the behavior of my version when called with siz=[].
+His subv2inv is slightly simpler than mine because he does not treat
+the siz=[2 2 ... 2] case separately.
+Note: there is now no need to ever use the C versions of these
+functions (or any others, for that matter).
+
+* removed BNT/add_BNT_to_path since no longer needed.
+
+
+
+- 4 Oct 07 murphyk
+
+*  moved code from sourceforge to UBC website, made version 1.0.4
+
+* @pearl_inf_engine/pearl_inf_engine line 24, default
+argument for protocol changed from [] to 'parallel'.
+Also, changed private/parallel_protocol so it doesn't write to an
+empty file id (Matlab 7 issue)
+
+* added foptions (Matlab 7 issue)
+
+* changed genpathKPM to exclude svn. Put it in toplevel directory to
+massively simplify the installation process.
+
+</pre>
+
+
+<h2>Sourceforge changelog</h2>
+
+BNT was first ported to sourceforge on 28 July 2001 by yozhik.
+BNT was removed from sourceforge on 4 October 2007 by Kevin Murphy;
+that version is cached as <a
+href="FullBNT-1.0.3.zip">FullBNT-1.0.3.zip</a>. 
+See  <a href="ChangeLog.Sourceforge.txt">Changelog from
+sourceforge</a> for a history of that version of the code,
+which formed the basis of the branch currently on Murphy's web page.
+
+
+<h2> Changes from August 1998 -- July 2004</h2>
+
+Kevin Murphy made the following changes to his own private copy.
+(Other small changes were made between July 2004 and October 2007, but were
+not documented.)
+These may or may not be reflected in the sourceforge version of the
+code (which was independently maintained).
+
+
+<ul>
+<li> 9 June 2004
+<ul>
+<li> Changed tabular_CPD/learn_params back to old syntax, to make it
+compatible with gaussian_CPD/learn_params (and re-enabled
+generic_CPD/learn_params).
+Modified learning/learn_params.m and learning/score_family
+appropriately.
+(In particular, I undid the change Sonia Leach had to make to
+score_family to handle this asymmetry.)
+Added examples/static/gaussian2 to test this new functionality.
+
+<li> Added bp_mrf2 (for generic pairwise MRFs) to
+inference/static/@bp_belprop_mrf2_inf_engine. [MRFs are not
+"officially" supported in BNT, so this code is just for expert
+hackers.]
+
+<li> Added examples/static/nodeorderExample.m to illustrate importance
+of using topological ordering.
+
+<li> Ran dos2unix on all *.c files within BNT to eliminate compiler
+warnings.
+
+</ul>
+
+<li> 7 June 2004
+<ul>
+<li> Replaced normaliseC with normalise in HMM/fwdback, for maximum
+portability (and negligible loss in speed).
+<li> Ensured FullBNT versions of HMM, KPMstats etc were as up-to-date
+as stand-alone versions.
+<li> Changed add_BNT_to_path so it no longer uses addpath(genpath()),
+which caused Old versions of files to mask new ones.
+</ul>
+
+<li> 18 February 2004
+<ul>
+<li> A few small bug fixes to BNT, as posted to the Yahoo group.
+<li> Several new functions added to KPMtools, KPMstats and Graphviz
+(none needed by BNT).
+<li> Added CVS to some of my toolboxes.
+</ul>
+
+<li> 30 July 2003
+<ul>
+<li> qian.diao fixed @mpot/set_domain_pot and @cgpot/set_domain_pot
+<li> Marco Grzegorczyk found, and Sonia Leach fixed, a bug in
+do_removal inside learn_struct_mcmc
+</ul>
+
+
+<li> 28 July 2003
+<ul>
+<li> Sebastian Luehr provided 2 minor bug fixes, to HMM/fwdback (if any(scale==0))
+and FullBNT\HMM\CPDs\@hhmmQ_CPD\update_ess.m (wrong transpose).
+</ul>
+
+<li> 8 July 2003
+<ul>
+<li> Removed buggy  BNT/examples/static/MRF2/Old/mk_2D_lattice.m which was
+masking correct graph/mk_2D_lattice.
+<li> Fixed bug in graph/mk_2D_lattice_slow in the non-wrap-around case
+(line 78)
+</ul>
+
+
+<li> 2 July 2003
+<ul>
+<li> Sped up normalize(., 1) in KPMtools by avoiding general repmat
+<li> Added assign_cols and marginalize_table to KPMtools
+</ul>
+
+
+<li> 29 May 2003
+<ul>
+<li> Modified KPMstats/mixgauss_Mstep so it repmats Sigma in the tied
+covariance case (bug found by galt@media.mit.edu).
+
+<li> Bob Welch found bug in gaussian_CPDs/maximize_params in the way
+cpsz was computed.
+
+<li> Added KPMstats/mixgauss_em, because my code is easier to
+understand/modify than netlab's (at least for me!).
+
+<li> Modified BNT/examples/dynamic/viterbi1 to call multinomial_prob
+instead of mk_dhmm_obs_lik.
+
+<li> Moved parzen window and partitioned models code to KPMstats.
+
+<li> Rainer Deventer fixed some bugs in his scgpot code, as follows:
+1. complement_pot.m
+Problems occured for probabilities equal to zero. The result is an
+division by zero error.
+<br>
+2. normalize_pot.m
+This function is used during the calculation of the log-likelihood.
+For a probability of zero a warning "log of zero" occurs. I have not
+realy fixed the bug. As a workaround I suggest to calculate the 
+likelihhod based on realmin (the smallest real number) instead of
+zero.
+<br>
+3. recursive_combine_pots
+At the beginning of the function there was no test for the trivial case,
+which defines the combination of two potentials as equal to the direct
+combination. The result might be an infinite recursion which leads to
+a stack overflow in matlab.
+</ul>
+
+
+
+<li> 11 May 2003
+<ul> 
+<li> Fixed bug in gaussian_CPD/maximize_params so it is compatible
+with the new clg_Mstep routine
+<li> Modified KPMstats/cwr_em to handle single cluster case 
+separately.
+<li> Fixed bug in netlab/gmminit.
+<li> Added hash tables to KPMtools.
+</ul>
+
+
+<li> 4 May 2003
+<ul>
+<li>
+Renamed many functions in KPMstats so the name of the
+distribution/model type comes first, 
+Mstep_clg -> clg_Mstep,
+Mstep_cond_gauss -> mixgauss_Mstep.
+Also, renamed eval_pdf_xxx functions to xxx_prob, e.g.
+eval_pdf_cond_mixgauss -> mixgauss_prob.
+This is simpler and shorter.
+
+<li> 
+Renamed many functions in HMM toolbox so the name of the
+distribution/model type comes first, 
+log_lik_mhmm -> mhmm_logprob, etc.
+mk_arhmm_obs_lik has finally been re-implemented in terms of clg_prob
+and mixgauss_prob (for slice 1).
+Removed the Demos directory, and put them in the main directory.
+This code is not backwards compatible.
+
+<li> Removed some of the my_xxx functions from KPMstats (these were
+mostly copies of functions from the Mathworks stats toolbox).
+
+
+<li> Modified BNT to take into account changes to KPMstats and
+HMM toolboxes.
+
+<li> Fixed KPMstats/Mstep_clg (now called clg_Mstep) for spherical Gaussian case.
+(Trace was wrongly parenthesised, and I used YY instead of YTY.
+The spherical case now gives the same result as the full case
+for cwr_demo.)
+Also, mixgauss_Mstep now adds 0.01 to the ML estimate of Sigma,
+to act as a regularizer (it used to add 0.01 to  E[YY'], but this was
+ignored in the spherical case).
+
+<li> Added cluster weighted regression to KPMstats.
+
+<li> Added KPMtools/strmatch_substr.
+</ul>
+
+
+
+<li>  28 Mar 03 
+<ul>
+<li> Added mc_stat_distrib and eval_pdf_cond_prod_parzen to KPMstats
+<li> Fixed GraphViz/arrow.m incompatibility with matlab 6.5
+(replace all NaN's with 0).
+Modified GraphViz/graph_to_dot so it also works on windows.
+<li> I removed dag_to_jtree and added graph_to_jtree to the graph
+toolbox; the latter expects an undirected graph as input.
+<li> I added triangulate_2Dlattice_demo.m to graph.
+<li> Rainer Deventer fixed the stable conditional Gaussian potential
+classes (scgpot and scgcpot) and inference engine
+(stab_cond_gauss_inf_engine).
+<li> Rainer Deventer added (stable) higher-order Markov models (see
+inference/dynamic/@stable_ho_inf_engine).
+</ul>
+
+
+<li> 14 Feb 03
+<ul>
+<li> Simplified learning/learn_params so it no longer returns BIC
+score. Also, simplified @tabular_CPD/learn_params so it only takes
+local evidence.
+Added learn_params_dbn, which does ML estimation of fully observed
+DBNs.
+<li> Vectorized KPMstats/eval_pdf_cond_mixgauss for tied Sigma
+case (much faster!).
+Also, now works in log-domain to prevent underflow.
+eval_pdf_mixgauss now calls eval_pdf_cond_mixgauss and inherits these benefits.
+<li> add_BNT_to_path now calls genpath with 2 arguments if using
+matlab version 5.
+</ul>
+
+
+<li>  30 Jan 03
+<ul>
+<li> Vectorized KPMstats/eval_pdf_cond_mixgauss for scalar Sigma
+case (much faster!)
+<li> Renamed mk_dotfile_from_hmm to draw_hmm and moved it to the
+GraphViz library.
+<li> Rewrote @gaussian_CPD/maximize_params.m so it calls
+KPMstats/Mstep_clg.
+This fixes bug when using clamped means (found by Rainer Deventer
+and Victor Eruhimov)
+and a bug when using a Wishart prior (no gamma term in the denominator).
+It is also easier to read.
+I rewrote the technical report re-deriving all the equations in a
+clearer notation, making the solution to the bugs more obvious.
+(See www.ai.mit.edu/~murphyk/Papers/learncg.pdf)
+Modified Mstep_cond_gauss to handle priors.
+<li> Fixed bug reported by Ramgopal Mettu in which add_BNT_to_path
+calls genpath with only 1 argument, whereas version 5 requires 2.
+<li> Fixed installC and uninstallC to search in FullBNT/BNT.
+</ul>
+
+
+<li> 24 Jan 03
+<ul>
+<li> Major simplification of HMM code.
+The API is not backwards compatible.
+No new functionality has been added, however.
+There is now only one fwdback function, instead of 7;
+different behaviors are controlled through optional arguments. 
+I renamed 'evaluate observation likelihood' (local evidence)
+to 'evaluate conditional pdf', since this is more general.
+i.e., renamed
+mk_dhmm_obs_lik to eval_pdf_cond_multinomial,
+mk_ghmm_obs_lik to eval_pdf_cond_gauss,
+mk_mhmm_obs_lik to eval_pdf_cond_mog.
+These functions have been moved to KPMstats,
+so they can be used by other toolboxes.
+ghmm's have been eliminated, since they are just a special case of
+mhmm's with M=1 mixture component.
+mixgauss HMMs can now handle a different number of
+mixture components per state.
+init_mhmm has been eliminated, and replaced with init_cond_mixgauss
+(in KPMstats) and mk_leftright/rightleft_transmat.
+learn_dhmm can no longer handle inputs (although this is easy to add back).
+</ul>
+
+
+
+
+
+<li> 20 Jan 03
+<ul>
+<li> Added arrow.m to GraphViz directory, and commented out line 922,
+in response to a bug report.
+</ul>
+
+<li> 18 Jan 03
+<ul>
+<li> Major restructuring of BNT file structure:
+all code that is not specific to Bayes nets has been removed;
+these packages must be downloaded separately. (Or just download FullBNT.)
+This makes it easier to ensure different toolboxes are consistent.
+misc has been slimmed down and renamed KPMtools, so it can be shared by other toolboxes,
+such as HMM and Kalman; some of the code has been moved to BNT/general.
+The Graphics directory has been slimmed down and renamed GraphViz.
+The graph directory now has no dependence on BNT (dag_to_jtree has
+been renamed graph_to_jtree and has a new API).
+netlab2 no longer contains any netlab files, only netlab extensions.
+None of the functionality has changed.
+</ul>
+
+
+
+<li> 11 Jan 03
+<ul>
+<li> jtree_dbn_inf_engine can now support soft evidence.
+
+<li> Rewrote graph/dfs to make it clearer.
+Return arguments have changed, as has mk_rooted_tree.
+The acyclicity check for large undirected graphs can cause a stack overflow.
+It turns out that this was not a bug, but is because Matlab's stack depth
+bound is very low by default.
+
+<li> Renamed examples/dynamic/filter2 to filter_test1, so it does not
+conflict with the filter2 function in the image processing toolbox.
+
+<li> Ran test_BNT on various versions of matlab to check compatibility.
+On matlab 6.5 (r13), elapsed time = 211s, cpu time = 204s.
+On matlab 6.1 (r12), elapsed time = 173s, cpu time = 164s.
+On matlab 5.3 (r11), elapsed time = 116s, cpu time = 114s.
+So matlab is apparently getting slower with time!!
+(All results were with a linux PIII machine.)
+</ul>
+
+
+<li> 14 Nov 02
+<ul>
+<li> Removed all ndx inference routines, since they are only
+marginally faster on toy problems,
+and are slower on large problems due to having to store and lookup 
+the indices (causes cache misses).
+In particular, I removed jtree_ndx_inf_eng and jtree_ndx_dbn_inf_eng, all the *ndx*
+routines from potentials/Tables, and all the UID stuff from
+add_BNT_to_path,
+thus simplifying the code.
+This required fixing hmm_(2TBN)_inf_engine/marginal_nodes\family,
+and updating installC.
+
+
+<li> Removed jtree_C_inf_engine and jtree_C_dbn_inf_engine.
+The former is basically the same as using jtree_inf_engine with
+mutliply_by_table.c and marginalize_table.c.
+The latter benefited slightly by assuming potentials were tables
+(arrays not objects), but these negligible savings don't justify the
+complexity and code duplication.
+
+<li> Removed stab_cond_gauss_inf_engine and
+scg_unrolled_dbn_inf_engine,
+written by shan.huang@intel.com, since the code was buggy.
+
+<li> Removed potential_engine, which was only experimental anyway.
+
+</ul>
+
+
+
+<li> 13 Nov 02
+<ul>
+<li> <b>Released version 5</b>.
+The previous version, released on 7/28/02, is available
+<a href="BNT4.zip">here</a>.
+
+<li> Moved code and documentation to MIT.
+
+<li> Added repmat.c from Thomas Minka's lightspeed library.
+Modified it so it can return an empty matrix.
+
+<li> Tomas Kocka fixed bug in the BDeu option for tabular_CPD,
+and contributed graph/dag_to_eg, to convert to essential graphs.
+
+<!--<li> Wrote a <a href="../Papers/fastmult.pdf">paper</a> which explains
+the ndx methods and the ndx cache BNT uses for fast
+multiplication/ marginalization of multi-dimensional arrays.
+-->
+
+<li> Modified definition of hhmmQ_CPD, so that Qps can now accept
+parents in either the current or previous slice.
+
+<li> Added hhmm2Q_CPD class, which is simpler than hhmmQ (no embedded
+sub CPDs, etc), and which allows the conditioning parents, Qps, to
+be before (in the topological ordering) the F or Q(t-1) nodes.
+See BNT/examples/dynamic/HHMM/Map/mk_map_hhmm for an example.
+</ul>
+
+
+<li> 7/28/02
+<ul>
+<li> Changed graph/best_first_elim_order from min-fill to min-weight.
+<li> Ernest Chan fixed bug in Kalman/sample_lds (G{i} becomes G{m} in
+line 61).
+<li> Tal Blum <bloom@cs.huji.ac.il> fixed bug in HMM/init_ghmm (Q
+becomes K, the number of states).
+<li> Fixed jtree_2tbn_inf_engine/set_fields so it correctly sets the
+maximize flag to 1 even in subengines.
+<li> Gary Bradksi did a simple mod to the PC struct learn alg so you can pass it an
+adjacency matrix as a constraint. Also, CovMat.m reads a file and
+produces a covariance matrix.
+<li> KNOWN BUG in CPDs/@hhmmQ_CPD/update_ess.m at line 72 caused by 
+examples/dynamic/HHMM/Square/learn_square_hhmm_cts.m at line 57.
+<li>
+The old version is available from www.cs.berkeley.edu/~murphyk/BNT.24june02.zip
+</ul>
+
+
+<li> 6/24/02
+<ul>
+<li> Renamed dag_to_dot as graph_to_dot and added support for
+undirected graphs.
+<li> Changed syntax for HHMM CPD constructors: no need to specify d/D
+anymore,so they can be used for more complex models.
+<li> Removed redundant first argument to mk_isolated_tabular_CPD.
+</ul>
+
+
+<li> 6/19/02
+<ul>
+<li>
+Fixed most probable explanation code.
+Replaced calc_mpe with find_mpe, which is now a method of certain
+inference engines, e.g., jtree, belprop.
+calc_mpe_global has become the find_mpe method of global_joint.
+calc_mpe_bucket has become the find_mpe method of var_elim.
+calc_mpe_dbn has become the find_mpe method of smoother.
+These routines now correctly find the jointly most probable
+explanation, instead of the marginally most probable assignments.
+See examples/static/mpe1\mpe2 and examples/dynamic/viterbi1
+for examples.
+Removed maximize flag from constructor and enter_evidence
+methods, since this no longer needs to be specified by the user.
+
+<li> Rainer Deventer fixed in a bug in 
+CPDs/@gaussian_CPD/udpate_ess.m: 
+now, hidden_cps = any(hidden_bitv(cps)), whereas it used to be
+hidden_cps = all(hidden_bitv(cps)).
+
+</ul>
+
+
+<li> 5/29/02
+<ul>
+<li> CPDs/@gaussian_CPD/udpate_ess.m fixed WX,WXX,WXY (thanks to Rainer Deventer and
+Yohsuke Minowa for spotting the bug). Does the C version work??
+<li> potentials/@cpot/mpot_to_cpot fixed K==0 case (thanks to Rainer Deventer).
+<li> CPDs/@gaussian_CPD/log_prob_node now accepts non-cell array data
+on self (thanks to rishi <rishi@capsl.udel.edu> for catching this).
+</ul>
+
+
+<li> 5/19/02
+<ul>
+
+<!--
+<li> Finally added <a href="../Papers/wei_ndx.ps.gz">paper</a> by Wei Hu (written
+November 2001)
+describing ndxB, ndxD, and ndxSD.
+-->
+
+<li> Wei Hu made the following changes.
+<ul>
+<li>   Memory leak repair:
+     a.  distribute_evidence.c   in  static/@jtree_C directory
+     b.  distribute_evidence.c   in  static/@jtree_ndx directory
+     c.  marg_tablec.            in  Tables dir
+
+<li>   Add "@jtree_ndx_2TBN_inf_engine"  in inference/online dir
+
+<li>   Add "@jtree_sparse_inf_engine"    in inference/static dir
+
+<li>   Add "@jtree_sparse_2TBN_inf_engine"   in inference/online  dir
+
+<li>   Modify "tabular_CPD.m" in CPDs/@tabular_CPD dir , used for sparse
+
+<li>   In "@discrete_CPD" dir:
+     a.  modify "convert_to_pot.m", used for sparse
+     b.  add "convert_to_sparse_table.c"
+
+<li>   In "potentials/@dpot" dir:
+     a.  remove "divide_by_pot.c" and "multiply_by_pot.c"
+     b.  add "divide_by_pot.m" and "multiply_by_pot.m"
+     c.  modify "dpot.m", "marginalize_pot.m" and "normalize_pot.m"
+
+<li>   In "potentials/Tables" dir:
+     a.  modify mk_ndxB.c;(for speedup)
+     b.  add "mult_by_table.m", 
+             "divide_by_table.m",
+             "divide_by_table.c",
+             "marg_sparse_table.c",
+             "mult_by_sparse_table.c",
+             "divide_by_sparse_table.c".
+
+<li>   Modify "normalise.c" in misc dir, used for sparse.
+
+<li>And, add discrete2, discrete3, filter2 and filter3 as test applications in test_BNT.m
+Modify installC.m
+</ul>
+
+<li> Kevin made the following changes related to strong junction
+trees:
+<ul>
+<li> jtree_inf_engin line 75:
+engine.root_clq = length(engine.cliques);
+the last clq is guaranteed to be a strong root
+
+<li> dag_to_jtree line 38: [jtree, root, B, w] =
+cliques_to_jtree(cliques, ns);
+never call cliques_to_strong_jtree
+
+<li> strong_elim_order: use Ilya's code instead of topological sorting.
+</ul>
+
+<li> Kevin fixed CPDs/@generic_CPD/learn_params, so it always passes
+in the correct hidden_bitv field to update_params.
+
+</ul>.
+
+
+<li> 5/8/02
+<ul>
+
+<li> Jerod Weinman helped fix some bugs in HHMMQ_CPD/maximize_params.
+
+<li> Removed broken online inference from hmm_inf_engine.
+It has been replaced filter_inf_engine, which can take hmm_inf_engine
+as an argument.
+
+<li> Changed graph visualization function names.
+'draw_layout' is now 'draw_graph',
+'draw_layout_dbn' is now 'draw_dbn',
+'plotgraph' is now 'dag_to_dot',
+'plothmm' is now 'hmm_to_dot',
+added 'dbn_to_dot',
+'mkdot' no longer exists': its functioality has been subsumed by dag_to_dot.
+The dot functions now all take optional args in string/value format.
+</ul>
+
+
+<li> 4/1/02
+<ul>
+<li> Added online inference classes.
+See BNT/inference/online and BNT/examples/dynamic/filter1.
+This is work in progress.
+<li> Renamed cmp_inference to cmp_inference_dbn, and made its
+    interface and behavior more similar to cmp_inference_static.
+<li> Added field rep_of_eclass to bnet and dbn, to simplify
+parameter tying (see ~murphyk/Bayes/param_tieing.html).
+<li> Added gmux_CPD (Gaussian mulitplexers).
+See BNT/examples/dynamic/SLAM/skf_data_assoc_gmux for an example.
+<li> Modified the forwards sampling routines.
+general/sample_dbn and sample_bnet now take optional arguments as
+strings, and can sample with pre-specified evidence.
+sample_bnet can only generate a single sample, and it is always a cell
+array. 
+sample_node can only generate a single sample, and it is always a
+scalar or vector.
+This eliminates the false impression that the function was
+ever vectorized (which was only true for tabular_CPDs).
+(Calling sample_bnet inside a for-loop is unlikely to be a bottleneck.)
+<li> Updated usage.html's description of CPDs (gmux) and inference
+(added gibbs_sampling and modified the description of pearl).
+<li> Modified BNT/Kalman/kalman_filter\smoother so they now optionally
+take an observed input (control) sequence.
+Also, optional arguments are now passed as strings.
+<li> Removed BNT/examples/static/uci_data to save space.
+</ul>
+
+<li> 3/14/02
+<ul>
+<li> pearl_inf_engine now works for (vector) Gaussian nodes, as well
+as discrete. compute_pi has been renamed CPD_to_pi. compute_lambda_msg
+    has been renamed CPD_to_lambda_msg. These are now implemented for
+    the discrete_CPD class instead of tabular_CPD. noisyor and
+    Gaussian have their own private implemenations.
+Created examples/static/Belprop subdirectory.
+<li> Added examples/dynamic/HHMM/Motif.
+<li> Added Matt Brand's entropic prior code.
+<li> cmp_inference_static has changed. It no longer returns err. It
+    can check for convergence. It can accept 'observed'.
+</ul>
+
+
+<li> 3/4/02
+<ul>
+<li> Fixed HHMM code. Now BNT/examples/dynamic/HHMM/mk_abcd_hhmm
+implements the example in the NIPS paper. See also
+Square/sample_square_hhmm_discrete and other files.
+
+<li> Included Bhaskara Marthi's gibbs_sampling_inf_engine. Currently
+this only works if all CPDs are tabular and if you call installC.
+
+<li> Modified Kalman/tracking_demo  so it calls plotgauss2d instead of
+    gaussplot.
+
+<li> Included Sonia Leach's speedup of mk_rnd_dag.
+My version created all NchooseK subsets, and then picked among them. Sonia
+reorders the possible parents randomly and choose
+the first k. This saves on having to enumerate the large number of
+possible subsets before picking from one. 
+
+<li> Eliminated BNT/inference/static/Old, which contained some old
+.mexglx files which wasted space.
+</ul>
+
+
+
+<li> 2/15/02
+<ul>
+<li> Removed the netlab directory, since most of it was not being
+used, and it took up too much space (the goal is to have BNT.zip be
+less than 1.4MB, so if fits on a floppy).
+The required files have been copied into netlab2.
+</ul>
+
+<li> 2/14/02
+<ul>
+<li> Shan Huang fixed most (all?) of the bugs in his stable CG code.
+scg1-3 now work, but scg_3node and scg_unstable give different
+    behavior than that reported in the Cowell book.
+
+<li> I changed gaussplot so it plots an ellipse representing the
+    eigenvectors of the covariance matrix, rather than numerically
+    evaluating the density and using a contour plot; this
+    is much faster and gives better pictures. The new function is
+    called plotgauss2d in BNT/Graphics.
+
+<li> Joni Alon <jalon@cs.bu.edu> fixed some small bugs:
+    mk_dhmm_obs_lik called forwards with the wrong args, and
+    add_BNT_to_path should quote filenames with spaces.
+
+<li> I added BNT/stats2/myunidrnd which is called by learn_struct_mcmc.
+
+<li> I changed BNT/potentials/@dpot/multiply_by_dpot so it now says
+Tbig.T(:) = Tbig.T(:) .* Ts(:);
+</ul>
+
+
+<li> 2/6/02
+<ul>
+<li> Added hierarchical HMMs. See BNT/examples/dynamic/HHMM and
+CPDs/@hhmmQ_CPD and @hhmmF_CPD.
+<li> sample_dbn can now sample until a certain condition is true.
+<li> Sonia Leach fixed learn_struct_mcmc and changed mk_nbrs_of_digraph
+so it only returns DAGs.
+Click <a href="sonia_mcmc.txt">here</a> for details of her changes.
+</ul>
+
+
+<li> 2/4/02
+<ul>
+<li> Wei Hu fixed a bug in
+jtree_ndx_inf_engine/collect\distribute_evidence.c which failed when
+maximize=1.
+<li>
+I fixed various bugs to do with conditional Gaussians,
+so mixexp3 now works (thansk to Gerry Fung <gerry.fung@utoronto.ca>
+      for spotting the error). Specifically:
+Changed softmax_CPD/convert_to_pot so it now puts cts nodes in cdom, and no longer inherits 
+      this function from discrete_CPD.
+     Changed root_CPD/convert_to_put so it puts self in cdom.
+</ul>
+
+
+<li> 1/31/02
+<ul>
+<li> Fixed log_lik_mhmm (thanks to ling chen <real_lingchen@yahoo.com>
+for spotting the typo)
+<li> Now many scripts in examples/static  call cmp_inference_static.
+Also, SCG scripts have been simplified (but still don't work!).
+<li> belprop and belprop_fg enter_evidence now returns [engine, ll,
+      niter], with ll=0, so the order of the arguments is compatible with other engines.
+<li> Ensured that all enter_evidence methods support optional
+      arguments such as 'maximize', even if they ignore them.
+<li> Added Wei Hu's potentials/Tables/rep_mult.c, which is used to
+      totally eliminate all repmats from gaussian_CPD/update_ess.
+</ul>
+
+
+<li> 1/30/02
+<ul>
+<li> update_ess now takes hidden_bitv instead of hidden_self and
+hidden_ps. This allows gaussian_CPD to distinguish hidden discrete and 
+cts parents. Now learn_params_em, as well as learn_params_dbn_em,
+    passes in this info, for speed.
+
+<li> gaussian_CPD update_ess is now vectorized for any case where all
+    the continuous nodes are observed (eg., Gaussian HMMs,  AR-HMMs).
+
+<li> mk_dbn now automatically detects autoregressive nodes.
+
+<li> hmm_inf_engine now uses indexes in marginal_nodes/family for
+    speed. Marginal_ndoes can now only handle single nodes.
+   (SDndx is hard-coded, to avoid the overhead of using marg_ndx,
+    which is slow because of the case and global statements.)
+
+<li> add_ev_to_dmarginal now retains the domain field.
+
+<li> Wei Hu wrote potentials/Tables/repmat_and_mult.c, which is used to
+    avoid some of the repmat's in gaussian_CPD/update_ess.
+
+<li> installC now longer sets the global USEC, since USEC is set to 0
+    by add_BNT_to_path, even if the C files have already been compiled 
+    in a previous session. Instead, gaussian_CPD checks to
+    see if repmat_and_mult exists, and (bat1, chmm1, water1, water2)
+    check to see if jtree_C_inf_engine/collect_evidence exists.
+    Note that checking if a file exists is slow, so we do the check
+    inside the gaussian_CPD constructor, not inside update_ess.
+
+<li> uninstallC now deletes both .mex and .dll files, just in case I
+    accidently ship a .zip file with binaries.  It also deletes mex
+   files from jtree_C_inf_engine.
+   
+<li> Now marginal_family for both jtree_limid_inf_engine and
+	    global_joint_inf_engine returns a marginal structure and
+	    potential, as required by solve_limid.
+    Other engines (eg. jtree_ndx, hmm) are not required to return a potential.
+</ul>
+
+
+
+<li> 1/22/02
+<ul>
+<li> Added an optional argument to mk_bnet and mk_dbn which lets you
+add names to nodes. This uses the new assoc_array class.
+
+<li> Added Yimin Zhang's (unfinished) classification/regression tree
+code to CPDs/tree_CPD.
+
+</ul>
+
+
+
+<li> 1/14/02
+<ul> 
+<li> Incorporated some of Shan Huang's (still broken) stable CG code.
+</ul>
+
+
+<li> 1/9/02
+<ul>
+<li> Yimin Zhang vectorized @discrete_CPD/prob_node, which speeds up
+structure learning considerably. I fixed this to handle softmax CPDs.
+
+<li> Shan Huang changed the stable conditional Gaussian code to handle
+vector-valued nodes, but it is buggy.
+
+<li> I vectorized @gaussian_CPD/update_ess for a special case.
+
+<li> Removed denom=min(1, ... Z) from gaussian_CPD/maximize_params
+(added to cope with negative temperature for entropic prior), which
+gives wrong results on mhmm1.
+</ul>
+
+
+<li> 1/7/02
+
+<ul>
+<li> Removed the 'xo' typo from mk_qmr_bnet.
+
+<li> convert_dbn_CPDs_to_tables has been vectorized; it is now
+substantially faster to compute the conditional likelihood for long sequences.
+
+<li> Simplified constructors for tabular_CPD and gaussian_CPD, so they
+now both only take the form CPD(bnet, i, ...) for named arguments -
+the CPD('self', i, ...) format is gone. Modified mk_fgraph_given_ev
+to use mk_isolated_tabular_CPD instead.
+
+<li> Added entropic prior to tabular and Gaussian nodes.
+For tabular_CPD, changed name of arguments to the constructor to
+distinguish Dirichlet and entropic priors. In particular,
+tabular_CPD(bnet, i, 'prior', 2) is now
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_weight', 2).
+
+<li> Added deterministic annealing to learn_params_dbn_em for use with
+entropic priors. The old format learn(engine, cases, max_iter) has
+been replaced by learn(engine, cases, 'max_iter', max_iter).
+
+<li> Changed examples/dynamic/bat1 and kjaerulff1, since default
+equivalence classes have changed from untied to tied.
+</ul>
+
+<li> 12/30/01
+<ul>
+<li> DBN default equivalence classes for slice 2 has changed, so that
+now parameters are tied for nodes with 'equivalent' parents in slices
+1 and 2 (e.g., observed leaf nodes). This essentially makes passing in
+the eclass arguments redundant (hooray!).
+</ul>
+
+
+<li> 12/20/01
+<ul>
+<li> <b>Released version 4</b>.
+Version 4 is considered a major new release
+since it is not completely backwards compatible with V3.
+Observed nodes are now specified when the bnet/dbn is created,
+not when the engine is created. This changes the interface to many of
+the engines, making the code no longer backwards compatible.
+Hence support for non-named optional arguments (BNT2 style) has also
+been removed; hence mk_dbn etc. requires arguments to be passed by name.
+
+<li> Ilya Shpitser's C code for triangulation now compiles under
+Windows as well as Unix, thanks to Wei Hu.
+
+<li> All the ndx engines have been combined, and now take an optional
+argument specifying what kind of index to use.
+
+<li> learn_params_dbn_em is now more efficient:
+@tabular_CPD/update_ess for nodes whose families
+are hidden does not need need to call add_evidence_to_dmarginal, which
+is slow.
+
+<li> Wei Hu fixed bug in jtree_ndxD, so now the matlab and C versions
+both work.
+
+<li> dhmm_inf_engine replaces hmm_inf_engine, since the former can
+handle any kind of topology and is slightly more efficient. dhmm is
+extended to handle Gaussian, as well as discrete,
+observed nodes. The new hmm_inf_engine no longer supports online
+inference (which was broken anyway).
+
+<li> Added autoregressive HMM special case to hmm_inf_engine for
+speed.
+
+<li> jtree_ndxSD_dbn_inf_engine now computes likelihood of the
+evidence in a vectorized manner, where possible, just like
+hmm_inf_engine.
+
+<li> Added mk_limid, and hence simplified mk_bnet and mk_dbn.
+
+
+<li> Gaussian_CPD now uses 0.01*I prior on covariance matrix by
+default. To do ML estimation, set 'cov_prior_weight' to 0.
+
+<li> Gaussian_CPD and tabular_CPD
+optional binary arguments are now set using 0/1 rather no 'no'/'yes'.
+
+<li> Removed Shan Huang's PDAG and decomposable graph code, which will
+be put in a separate structure learning library.
+</ul>
+
+
+<li> 12/11/01
+<ul>
+<li> Wei Hu fixed jtree_ndx*_dbn_inf_engine and marg_table.c.
+
+<li> Shan Huang contributed his implementation of stable conditional
+Gaussian code (Lauritzen 1999), and methods to search through the
+space of PDAGs (Markov equivalent DAGs) and undirected decomposable
+graphs. The latter is still under development.
+</ul>
+
+
+<li> 12/10/01
+<ul>
+<li> Included Wei Hu's new versions of the ndx* routines, which use
+integers instead of doubles. The new versions are about 5 times faster
+in C. In general, ndxSD is the best choice.
+
+<li> Fixed misc/add_ev_to_dmarginal so it works with the ndx routines
+in bat1.
+
+<li> Added calc_mpe_dbn to do Viterbi parsing.
+
+<li> Updated dhmm_inf_engine so it computes marginals.
+</ul>
+
+
+
+<li> 11/23/01
+<ul>
+<li> learn_params now does MAP estimation (i.e., uses Dirichlet prior,
+if define). Thanks to Simon Keizer skeizer@cs.utwente.nl for spotting
+this.
+<li> Changed plotgraph so it calls ghostview with the output of dotty,
+instead of converting from .ps to .tif. The resulting image is much
+easier to read.
+<li> Fixed cgpot/multiply_by_pots.m.
+<li> Wei Hu fixed ind2subv.c.
+<li> Changed arguments to compute_joint_pot.
+</ul>
+
+
+<li> 11/1/01
+<ul>
+<li> Changed sparse to dense in @dpot/multiply_pots, because sparse
+arrays apparently cause a bug in the NT version of Matlab.
+
+<li> Fixed the bug in gaussian_CPD/log_prob_node.m which
+incorrectly called the vectorized gaussian_prob with different means
+when there were continuous parents and more than one case.
+(Thanks to Dave Andre for finding this.)
+
+<li> Fixed the bug in root_CPD/convert_to_pot which did not check for
+pot_type='g'. 
+(Thanks to Dave Andre for finding this.)
+
+<li> Changed calc_mpe and calc_mpe_global so they now return a cell array.
+
+<li> Combine pearl and loopy_pearl into a single inference engine
+called 'pearl_inf_engine', which now takes optional arguments passed
+in using the name/value pair syntax.
+marginal_nodes/family now takes the optional add_ev argument (same as
+jtree), which is the opposite of the previous shrink argument.
+
+<li> Created pearl_unrolled_dbn_inf_engine and "resurrected"
+pearl_dbn_inf_engine in a simplified (but still broken!) form.
+
+<li> Wei Hi fixed the bug in ind2subv.c, so now ndxSD works.
+He also made C versions of ndxSD and ndxB, and added (the unfinished) ndxD.
+
+</ul>
+
+
+<li> 10/20/01
+
+<ul>
+<li>  Removed the use_ndx option from jtree_inf,
+and created 2 new inference engines: jtree_ndxSD_inf_engine and
+jtree_ndxB_inf_engine.
+The former stores 2 sets of indices for the small and difference
+domains; the latter stores 1 set of indices for the big domain.
+In Matlab, the ndxB version is often significantly faster than ndxSD
+and regular jree, except when the clique size is large.
+When compiled to C, the difference between ndxB and ndxSD (in terms of
+speed) vanishes; again, both are faster than compiled jtree, except
+when the clique size is large.
+Note: ndxSD currently has a bug in it, so it gives the wrong results!
+(The DBN analogs are jtree_dbn_ndxSD_inf_engine and 
+jtree_dbn_ndxB_inf_engine.)
+
+<li> Removed duplicate files from the HMM and Kalman subdirectories.
+e.g., normalise is now only in BNT/misc, so when compiled to C, it
+masks the unique copy of the Matlab version.
+</ul>
+
+
+
+<li> 10/17/01
+<ul>
+<li> Fixed bugs introduced on 10/15:
+Renamed extract_gaussian_CPD_params_given_ev_on_dps.m to
+gaussian_CPD_params_given_dps.m since Matlab can't cope with such long
+names (this caused cg1 to fail). Fixed bug in
+gaussian_CPD/convert_to_pot, which now calls convert_to_table in the
+discrete case.
+
+<li> Fixed bug in bk_inf_engine/marginal_nodes.
+The test 'if nodes < ss' is now
+'if nodes <= ss' (bug fix due to Stephen seg_ma@hotmail.com)
+
+<li> Simplified uninstallC.
+</ul>
+
+
+<li> 10/15/01
+<ul>
+
+<li> Added use_ndx option to jtree_inf and jtree_dbn_inf.
+This pre-computes indices for multiplying, dividing and marginalizing
+discrete potentials.
+This is like the old jtree_fast_inf_engine, but we use an extra level
+of indirection to reduce the number of indices needed (see
+uid_generator object).
+Sometimes this is faster than the original way...
+This is work in progress.
+
+<li> The constructor for dpot no longer calls myreshape, which is very
+slow.
+But new dpots still must call myones.
+Hence discrete potentials are only sometimes 1D vectors (but should
+always be thought of as multi-D arrays). This is work in progress.
+</ul>
+
+
+<li> 10/6/01
+<ul>
+<li> Fixed jtree_dbn_inf_engine, and added kjaerulff1 to test this.
+<li> Added option to jtree_inf_engine/marginal_nodes to return "full
+sized" marginals, even on observed nodes.
+<li> Clustered BK in examples/dynamic/bat1 seems to be broken,
+so it has been commented out.
+BK will be re-implemented on top of jtree_dbn, which should much more
+efficient.
+</ul>
+
+<li> 9/25/01
+<ul>
+<li> jtree_dbn_inf_engine is now more efficient than calling BK with
+clusters = exact, since it only uses the interface nodes, instead of
+all of them, to maintain the belief state.
+<li> Uninstalled the broken C version of strong_elim_order.
+<li> Changed order of arguments to unroll_dbn_topology, so that intra1
+is no longer required.
+<li> Eliminated jtree_onepass, which can be simulated by calling
+collect_evidence on jtree.
+<li> online1 is no longer in the test_BNT suite, since there is some
+problem with online prediction with mixtures of Gaussians using BK.
+This functionality is no longer supported, since doing it properly is
+too much work.
+</ul>
+</li>
+
+<li> 9/7/01
+<ul>
+<li> Added Ilya Shpitser's C triangulation code (43x faster!).
+Currently this only compiles under linux; windows support is being added.
+</ul>
+
+
+<li> 9/5/01
+<ul>
+<li> Fixed typo in CPDs/@tabular_kernel/convert_to_table (thanks,
+Philippe!)
+<li> Fixed problems with clamping nodes in tabular_CPD, learn_params,
+learn_params_tabular, and bayes_update_params. See
+BNT/examples/static/learn1 for a demo.
+</ul>
+
+
+<li> 9/3/01
+<ul>
+<li> Fixed typo on line 87 of gaussian_CPD which caused error in cg1.m
+<li> Installed Wei Hu's latest version of jtree_C_inf_engine, which
+can now compute marginals on any clique/cluster.
+<li> Added Yair Weiss's code to compute the Bethe free energy
+approximation to the log likelihood in loopy_pearl (still need to add
+this to belprop). The return arguments are now: engine, loglik and
+niter, which is different than before.
+</ul>
+
+
+
+<li> 8/30/01
+<ul>
+<li> Fixed bug in BNT/examples/static/id1 which passed hard-coded
+directory name to belprop_inf_engine.
+
+<li> Changed tabular_CPD and gaussian_CPD so they can now be created
+without having to pass in a bnet.
+
+<li> Finished mk_fgraph_given_ev. See the fg* files in examples/static
+for demos of factor graphs (work in progress).
+</ul>
+
+
+
+<li> 8/22/01
+<ul>
+
+<li> Removed jtree_compiled_inf_engine,
+since the C code it generated was so big that it would barf on large
+models.
+
+<li> Tidied up the potentials/Tables directory.
+Removed mk_marg/mult_ndx.c,
+which have been superceded by the much faster mk_marg/mult_index.c
+(written by Wei Hu).
+Renamed the Matlab versions mk_marginalise/multiply_table_ndx.m
+to be mk_marg/mult_index.m to be compatible with the C versions.
+Note: nobody calls these routines anymore!
+(jtree_C_inf_engine/enter_softev.c has them built-in.)
+Removed mk_ndx.c, which was only used by jtree_compiled.
+Removed mk_cluster_clq_ndx.m, mk_CPD_clq_ndx, and marginalise_table.m
+which were not used.
+Moved shrink_obs_dims_in_table.m to misc.
+
+<li> In potentials/@dpot directory: removed multiply_by_pot_C_old.c.
+Now marginalize_pot.c can handle maximization,
+and divide_by_pot.c has been implmented.
+marginalize/multiply/divide_by_pot.m no longer have useC or genops options.
+(To get the C versions, use installC.m)
+
+<li> Removed useC and genops options from jtree_inf_engine.m
+To use the C versions, install the C code.
+
+<li> Updated BNT/installC.m.
+
+<li> Added fclose to @loopy_pearl_inf/enter_evidence.
+
+<li> Changes to MPE routines in BNT/general.
+The maximize parameter is now specified inside enter_evidence
+instead of when the engine is created.
+Renamed calc_mpe_given_inf_engine to just calc_mpe.
+Added Ron Zohar's optional fix to handle the case of ties.
+Now returns log-likelihood instead of likelihood.
+Added calc_mpe_global.
+Removed references to genops in calc_mpe_bucket.m
+Test file is now called mpe1.m
+
+<li> For DBN inference, filter argument is now passed by name,
+as is maximize. This is NOT BACKWARDS COMPATIBLE.
+
+<li> Removed @loopy_dbn_inf_engine, which will was too complicated.
+In the future, a new version, which applies static loopy to the
+unrolled DBN, will be provided.
+
+<li> discrete_CPD class now contains the family sizes and supports the
+method dom_sizes. This is because it could not access the child field
+CPD.sizes, and mysize(CPT) may give the wrong answer.
+
+<li> Removed all functions of the form CPD_to_xxx, where xxx = dpot, cpot,
+cgpot, table, tables.  These have been replaced by convert_to_pot,
+which takes a pot_type argument.
+@discrete_CPD calls convert_to_table to implement a default
+convert_to_pot.
+@discrete_CPD calls CPD_to_CPT to implement a default
+convert_to_table.
+The convert_to_xxx routines take fewer arguments (no need to pass in
+the globals node_sizes and cnodes!).
+Eventually, convert_to_xxx will be vectorized, so it will operate on
+all nodes in the same equivalence class "simultaneously", which should
+be significantly quicker, at least for Gaussians.
+
+<li> Changed discrete_CPD/sample_node and prob_node to use
+convert_to_table, instead of CPD_to_CPT, so mlp/softmax nodes can
+benefit.
+
+<li> Removed @tabular_CPD/compute_lambda_msg_fast and
+private/prod_CPD_and_pi_msgs_fast, since no one called them.
+
+<li> Renamed compute_MLE to learn_params,
+by analogy with bayes_update_params (also because it may compute an
+MAP estimate).
+
+<li> Renamed set_params to set_fields
+and get_params to get_field for CPD and dpot objects, to
+avoid confusion with the parameters of the CPD.
+
+<li> Removed inference/doc, which has been superceded
+by the web page.
+
+<li> Removed inference/static/@stab_cond_gauss_inf_engine, which is
+broken, and all references to stable CG.
+
+</ul>
+
+
+
+
+
+<li> 8/12/01
+<ul>
+<li> I removed potentials/@dpot/marginalize_pot_max.
+Now marginalize_pot for all potential classes take an optional third
+argument, specifying whether to sum out or max out.
+The dpot class also takes in optional arguments specifying whether to
+use C or genops (the global variable USE_GENOPS has been eliminated).
+
+<li> potentials/@dpot/marginalize_pot has been simplified by assuming
+that 'onto' is always in ascending order (i.e., we remove
+Maynard-Reid's patch). This is to keep the code identical to the C
+version and the other class implementations.
+
+<li> Added Ron Zohar's general/calc_mpe_bucket function,
+and my general/calc_mpe_given_inf_engine, for calculating the most
+probable explanation.
+
+
+<li> Added Wei Hu's jtree_C_inf_engine.
+enter_softev.c is about 2 times faster than enter_soft_evidence.m.
+
+<li> Added the latest version of jtree_compiled_inf_engine by Wei Hu.
+The 'C' ndx_method now calls potentials/Tables/mk_marg/mult_index,
+and the 'oldC' ndx_method calls potentials/Tables/mk_marg/mult_ndx.
+
+<li> Added potentials/@dpot/marginalize_pot_C.c and
+multiply_by_pot_C.c by Wei Hu.
+These can be called by setting the 'useC' argument in
+jtree_inf_engine. 
+
+<li> Added BNT/installC.m to compile all the mex files.
+
+<li> Renamed prob_fully_instantiated_bnet to log_lik_complete.
+
+<li> Added Shan Huang's unfinished stable conditional Gaussian
+inference routines.
+</ul>
+
+
+
+<li> 7/13/01
+<ul>
+<li> Added the latest version of jtree_compiled_inf_engine by Wei Hu.
+<li> Added the genops class by Doug Schwarz (see
+BNT/genopsfun/README). This provides a 1-2x speed-up of
+potentials/@dpot/multiply_by_pot and divide_by_pot.
+<li> The function BNT/examples/static/qmr_compiled compares the
+performance gains of these new functions.
+</ul>
+
+<li> 7/6/01
+<ul>
+<li> Made bk_inf_engine use the name/value argument syntax. This can
+now do max-product (Viterbi) as well as sum-product
+(forward-backward).
+<li> Changed examples/static/mfa1 to use the new name/value argument
+syntax.
+</ul>
+
+
+<li> 6/28/01
+
+<ul>
+
+<li> <b>Released version 3</b>.
+Version 3 is considered a major new release
+since it is not completely backwards compatible with V2.
+V3 supports decision and utility nodes, loopy belief propagation on
+general graphs (including undirected), structure learning for non-tabular nodes,
+a simplified way of handling optional
+arguments to functions,
+and many other features which are described below.
+In addition, the documentation has been substantially rewritten.
+
+<li> The following functions can now take optional arguments specified
+as name/value pairs, instead of passing arguments in a fixed order:
+mk_bnet, jtree_inf_engine, tabular_CPD, gaussian_CPD, softmax_CPD, mlp_CPD,
+enter_evidence.
+This is very helpful if you want to use default values for most parameters.
+The functions remain backwards compatible with BNT2.
+
+<li> dsoftmax_CPD has been renamed softmax_CPD, replacing the older
+version of softmax. The directory netlab2 has been updated, and
+contains weighted versions of some of the learning routines in netlab.
+(This code is still being developed by P. Brutti.)
+
+<li> The "fast" versions of the inference engines, which generated
+matlab code, have been removed.
+@jtree_compiled_inf_engine now generates C code.
+(This feature is currently being developed by Wei Hu of Intel (China), 
+and is not yet ready for public use.)
+
+<li> CPD_to_dpot, CPD_to_cpot, CPD_to_cgpot and CPD_to_upot 
+are in the process of being replaced by convert_to_pot.
+
+<li> determine_pot_type now takes as arguments (bnet, onodes)
+instead of (onodes, cnodes, dag),
+so it can detect the presence of utility nodes as well as continuous
+nodes.
+Hence this function is not backwards compatible with BNT2.
+
+<li> The structure learning code (K2, mcmc) now works with any node
+type, not just tabular.
+mk_bnets_tabular has been eliminated.
+bic_score_family and dirichlet_score_family will be replaced by score_family.
+Note: learn_struct_mcmc has a new interface that is not backwards
+compatible with BNT2.
+
+<li> update_params_complete has been renamed bayes_update_params.
+Also, learn_params_tabular has been replaced by learn_params, which
+works for any CPD type.
+
+<li> Added decision/utility nodes.
+</ul>
+
+
+<li> 6/6/01
+<ul>
+<li> Added soft evidence to jtree_inf_engine.
+<li> Changed the documentation slightly (added soft evidence and
+parameter tying, and separated parameter and structure learning).
+<li> Changed the parameters of determine_pot_type, so it no longer
+needs to be passed a DAG argument.
+<li> Fixed parameter tying in mk_bnet (num. CPDs now equals num. equiv
+classes).
+<li> Made learn_struct_mcmc work in matlab version 5.2 (thanks to
+Nimrod Megiddo for finding this bug).
+<li> Made 'acyclic.m' work for undirected graphs.
+</ul>
+
+
+<li> 5/23/01
+<ul>
+<li> Added Tamar Kushnir's code for the IC* algorithm
+(learn_struct_pdag_ic_star). This learns the
+structure of a PDAG, and can identify the presence of latent
+variables.
+
+<li> Added Yair Weiss's code for computing the MAP assignment using
+junction tree (i.e., a new method called @dpot/marginalize_pot_max
+instead of marginalize_pot.)
+
+<li> Added @discrete_CPD/prob_node in addition to log_prob_node to handle
+deterministic CPDs.
+</ul>
+
+
+<li> 5/12/01
+<ul>
+<li> Pierpaolo Brutti updated his mlp and dsoftmax CPD classes,
+and improved the HME code.
+
+<li> HME example now added to web page. (The previous example was non-hierarchical.)
+
+<li> Philippe Leray (author of the French documentation for BNT)
+pointed out that I was including netlab.tar unnecessarily.
+</ul>
+
+
+<li> 5/4/01
+<ul>
+<li> Added mlp_CPD which defines a CPD as a (conditional) multi-layer perceptron.
+This class was written by Pierpaolo Brutti.
+
+<li> Added hierarchical mixtures of experts demo (due to Pierpaolo Brutti).
+
+<li> Fixed some bugs in dsoftmax_CPD.
+
+<li> Now the BNT distribution includes the whole
+<a href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a> library in a
+subdirectory.
+It also includes my HMM and Kalman filter toolboxes, instead of just
+fragments of them.
+</ul>
+
+
+<li> 5/2/01
+<ul>
+<li> gaussian_inf_engine/enter_evidence now correctly returns the
+loglik, even if all nodes are instantiated (bug fix due to
+Michael Robert James).
+
+<li> Added dsoftmax_CPD which allows softmax nodes to have discrete
+and continuous parents; the discrete parents act as indices into the
+parameters for the continuous node, by analogy with conditional
+Gaussian nodes. This class was written by Pierpaolo Brutti.
+</ul>
+
+
+<li> 3/27/01
+<ul>
+<li> learn_struct_mcmc  no longer returns sampled_bitv.
+<li> Added mcmc_sample_to_hist to post-process the set of samples.
+</ul>
+
+<li> 3/21/01
+<ul>
+<li> Changed license from UC to GNU Library GPL.
+
+<li> Made all CPD constructors accept 0 arguments, so now bnets can be
+saved to and loaded from files.
+
+<li> Improved the implementation of sequential and batch Bayesian
+parameter learning for tabular CPDs with completely observed data (see
+log_marg_lik_complete and update_params_complete). This code also
+handles interventional data.
+
+<li> Added MCMC structure learning for completely observed, discrete,
+static BNs.
+
+<li> Started implementing Bayesian estimation of linear Gaussian
+nodes. See root_gaussian_CPD and
+linear_gaussian_CPD. The old gaussian_CPD class has not been changed.
+
+<li> Renamed evaluate_CPD to log_prob_node, and simplified its
+arguments.
+
+<li> Renamed sample_CPD to sample_node, simplified its
+arguments, and vectorized it.
+
+<li> Renamed "learn_params_tabular" to "update_params_complete".
+This does Bayesian updating, but no longer computes the BIC score.
+
+<li> Made routines for completely observed networks (sampling,
+complete data likelihood, etc.) handle cell arrays or regular arrays,
+which are faster.
+If some nodes are not scalars, or are hidden, you must use cell arrays.
+You must convert to a cell array before passing to an inference routine.
+
+<li> Fixed bug in gaussian_CPD constructor. When creating CPD with
+more than 1 discrete parent with random parameters, the matrices were
+the wrong shape (Bug fix due to Xuejing Sun).
+</ul>
+
+
+
+<li> 11/24/00
+<ul>
+<li> Renamed learn_params and learn_params_dbn to learn_params_em/
+learn_params_dbn_em. The return arguments are now [bnet, LLtrace,
+engine] instead of [engine, LLtrace].
+<li> Added structure learning code for static nets (K2, PC).
+<li> Renamed learn_struct_inter_full_obs as learn_struct_dbn_reveal,
+and reimplemented it to make it simpler and faster.
+<li> Added sequential Bayesian parameter learning (learn_params_tabular).
+<li> Major rewrite of the documentation.
+</ul>
+
+<!--
+<li> 6/1/00
+<ul>
+<li> Subtracted 1911 off the counter, so now it counts hits from
+5/22/00. (The initial value of 1911 was a conservative lower bound on the number of
+hits from the time the page was created.)
+</ul>
+-->
+
+<li> 5/22/00
+<ul>
+<li> Added online filtering and prediction.
+<li> Added the factored frontier and loopy_dbn algorithms.
+<li> Separated the online user manual into two, for static and dynamic
+networks.
+<!--
+<li> Added a counter to the BNT web page, and initialized it to 1911,
+which is the number of people who have downloaded my software (BNT and
+other toolboxes) since 8/24/98.
+-->
+<li> Added a counter to the BNT web page.
+<!--
+Up to this point, 1911 people had downloaded my software (BNT and
+other toolboxes) since 8/24/98.
+-->
+</ul>
+
+
+<li> 4/27/00
+<ul>
+<li> Fixed the typo in bat1.m
+<li> Added preliminary code for online inference in DBNs
+<li> Added coupled HMM example
+</ul>
+
+<li> 4/23/00
+<ul>
+<li> Fixed the bug in the fast inference routines where the indices
+are empty (arises in bat1.m).
+<li> Sped up marginal_family for the fast engines by precomputing indices.
+</ul>
+
+<li> 4/17/00
+<ul>
+<li> Simplified implementation of BK_inf_engine by using soft evidence.
+<li> Added jtree_onepass_inf_engine (which computes a single marginal)
+and modified jtree_dbn_fast to use it.
+</ul>
+
+<li> 4/14/00
+<ul>
+<li> Added fast versions of jtree and BK, which are
+designed for models where the division into hidden/observed is fixed,
+and all hidden variables are discrete. These routines are 2-3 times
+faster than their non-fast counterparts.
+
+<li> Added graph drawing code
+contributed by Ali Taylan Cemgil from the University of Nijmegen.
+</ul>
+
+<li> 4/10/00
+<ul>
+<li> Distinguished cnodes and cnodes_slice in DBNs so that kalman1
+works with BK.
+<li> Removed dependence on cellfun (which only exists in matlab 5.3)
+by adding isemptycell. Now the code works in 5.2.
+<li> Changed the UC copyright notice.
+</ul>
+
+
+ 
+<li> 3/29/00
+<ul>
+<li><b>Released BNT 2.0</b>, now with objects!
+Here are the major changes.
+
+<li> There are now 3 classes of objects in BNT:
+Conditional Probability Distributions, potentials (for junction tree),
+and inference engines. 
+Making an inference algorithm (junction tree, sampling, loopy belief
+propagation, etc.) an object might seem counter-intuitive, but in
+fact turns out to be a good idea, since the code and documentation
+can be made modular.
+(In Java, each algorithm would be a class that implements the
+inferenceEngine interface. Since Matlab doesn't support interfaces,
+inferenceEngine is an abstract (virtual) base class.)
+
+<p>
+<li>
+In version 1, instead of Matlab's built-in objects,
+I used structs and a
+  simulated dispatch mechanism based on the type-tag system in the
+  classic textbook by Abelson
+  and Sussman ("Structure and Interpretation of Computer Programs",
+  MIT Press, 1985). This required editing the dispatcher every time a
+  new object type was added. It also required unique (and hence long)
+  names for each method, and allowed the user unrestricted access to
+  the internal state of objects.
+
+<p>
+<li> The Bayes net itself is now a lightweight struct, and can be
+used to specify a model independently of the inference algorithm used
+to process it.
+In version 1, the inference engine was stored inside the Bayes net.
+              
+<!--
+See the list of <a href="differences2.html">changes from version
+1</a>.
+-->
+</ul>
+
+
+
+<li> 11/24/99
+<ul>
+<li> Added fixed lag smoothing, online EM and the ability to learn
+switching HMMs (POMDPs) to the HMM toolbox.
+<li> Renamed the HMM toolbox function 'mk_dhmm_obs_mat' to
+'mk_dhmm_obs_lik', and similarly for ghmm and mhmm. Updated references
+to these functions in BNT.
+<li> Changed the order of return params from kalman_filter to make it
+more natural. Updated references to this function in BNT.
+</ul>
+
+
+
+<li>10/27/99
+<ul>
+<li>Fixed line 42 of potential/cg/marginalize_cgpot and lines 32-39 of bnet/add_evidence_to_marginal
+(thanks to Rainer Deventer for spotting these bugs!)
+</ul>
+
+
+<li>10/21/99
+<ul>
+<li>Completely changed the blockmatrix class to make its semantics
+more sensible. The constructor is not backwards compatible!
+</ul>
+
+<li>10/6/99
+<ul>
+<li>Fixed all_vals = cat(1, vals{:}) in user/enter_evidence
+<li>Vectorized ind2subv and sub2indv and removed the C versions.
+<li>Made mk_CPT_from_mux_node much faster by having it call vectorized
+ind2subv
+<li>Added Sondhauss's bug fix to line 68 of bnet/add_evidence_to_marginal
+<li>In dbn/update_belief_state, instead of adding eps to likelihood if 0,
+we leave it at 0, and set the scale factor to 0 instead of dividing.
+</ul>
+
+<li>8/19/99
+<ul>
+<li>Added Ghahramani's mfa code to examples directory to compare with
+fa1, which uses BNT
+<li>Changed all references of assoc to stringmatch (e.g., in
+examples/mk_bat_topology)
+</ul>
+
+<li>June 1999
+<ul>
+<li><b>Released BNT 1.0</b> on the web.
+</ul>
+
+
+<li>August 1998
+<ul>
+<li><b>Released BNT 0.0</b> via email.
+</ul>
+
+
+<li>October 1997
+<ul>
+<li>First started working on Matlab version of BNT.
+</ul>
+
+<li>Summer 1997
+<ul>
+<li> First started working on C++ version of BNT while working at DEC (now Compaq) CRL.
+</ul>
+
+<!--
+<li>Fall 1996
+<ul>
+<li>Made a C++ program that generates DBN-specific C++ code
+for inference using the frontier algorithm.
+</ul>
+
+<li>Fall 1995
+<ul>
+<li>Arrive in Berkeley, and first learn about Bayes Nets. Start using
+Geoff Zweig's C++ code.
+</ul>
+-->
+
+</ul>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/dbn_hmm_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+ Example due to Wang Hee Lin" <engp1622@nus.edu.sg
+
+
+intra = zeros(2);
+intra(1,2) = 1; 
+inter = zeros(2);
+inter(1,1) = 1; 
+
+Q = 2; % num hidden states
+O = 2; % num observable symbols
+ns = [Q O];%number of states
+dnodes = 1:2;
+%onodes = [1:2]; % only possible with jtree, not hmm
+onodes = [2]; 
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'observed', onodes);
+for i=1:4
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+obsmat0 = mk_stochastic(rand(Q,O));
+
+%engine = smoother_engine(hmm_2TBN_inf_engine(bnet));
+engine = smoother_engine(jtree_2TBN_inf_engine(bnet));
+
+ss = 2;%slice size(ss)
+ncases = 10;%number of examples
+T=10;
+max_iter=2;%iterations for EM
+cases = cell(1, ncases);
+for i=1:ncases
+  ev = sample_dbn(bnet, T);
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = ev(onodes, :);
+end
+[bnet2, LLtrace] = learn_params_dbn_em(engine, cases, 'max_iter', 4);
Binary file toolboxes/FullBNT-1.0.7/docs/gr03.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/graph_to_dot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+function graph_to_dot(adj, varargin)
+%GRAPH_TO_DOT  Makes a GraphViz (AT&T) file representing an adjacency matrix
+% graph_to_dot(adj, ...) writes to the specified filename.
+%
+% Optional arguments can be passed as name/value pairs: [default]
+%
+% 'filename' - if omitted, writes to 'tmp.dot'
+% 'arc_label' - arc_label{i,j} is a string attached to the i-j arc [""]
+% 'node_label' - node_label{i} is a string attached to the node i ["i"]
+% 'width'     - width in inches [10]
+% 'height'    - height in inches [10]
+% 'leftright' - 1 means layout left-to-right, 0 means top-to-bottom [0]
+% 'directed'  - 1 means use directed arcs, 0 means undirected [1]
+%
+% For details on graphviz, See http://www.research.att.com/sw/tools/graphviz
+%
+% See also dot_to_graph and draw_dot.
+
+% First version written by Kevin Murphy 2002.
+% Modified by Leon Peshkin, Jan 2004.
+% Bugfix by Tom Minka, Mar 2004.
+                   
+node_label = [];   arc_label = [];   % set default args
+width = 10;        height = 10;
+leftright = 0;     directed = 1;     filename = 'tmp.dot';
+
+for i = 1:2:nargin-1                    % get optional args
+  switch varargin{i}
+    case 'filename', filename = varargin{i+1};
+    case 'node_label', node_label = varargin{i+1};
+    case 'arc_label', arc_label = varargin{i+1};
+    case 'width', width = varargin{i+1};
+    case 'height', height = varargin{i+1};
+    case 'leftright', leftright = varargin{i+1};
+    case 'directed', directed = varargin{i+1};
+  end
+end
+% minka
+if ~directed
+  adj = triu(adj | adj');
+end
+
+fid = fopen(filename, 'w');
+if directed
+  fprintf(fid, 'digraph G {\n');
+  arctxt = '->'; 
+  if isempty(arc_label)
+    labeltxt = '';
+  else
+    labeltxt = '[label="%s"]';
+  end
+else
+  fprintf(fid, 'graph G {\n');
+  arctxt = '--'; 
+  if isempty(arc_label)
+    labeltxt = '[dir=none]';
+  else
+    labeltext = '[label="%s",dir=none]';
+  end
+end
+edgeformat = strcat(['%d ',arctxt,' %d ',labeltxt,';\n']);
+fprintf(fid, 'center = 1;\n');
+fprintf(fid, 'size=\"%d,%d\";\n', width, height);
+if leftright
+  fprintf(fid, 'rankdir=LR;\n');
+end
+Nnds = length(adj);
+for node = 1:Nnds               %  process nodes 
+  if isempty(node_label)
+    fprintf(fid, '%d;\n', node);
+  else
+    fprintf(fid, '%d [ label = "%s" ];\n', node, node_label{node});
+  end
+end
+for node1 = 1:Nnds   % process edges
+  arcs = find(adj(node1,:));         % children(adj, node);
+  for node2 = arcs
+    if  ~isempty(arc_label)
+      fprintf(fid, edgeformat,node1,node2,arc_label{node1,node2});
+    else
+      fprintf(fid, edgeformat, node1, node2);    
+    end    
+  end
+end
+fprintf(fid, '}');
+fclose(fid); 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/graphviz.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+<h1>Visualizing graph structures in matlab</h1>
+
+We discuss some methods for visualizing graphs/ networks, including automatic
+layout of the nodes.
+We assume the graph is represented as an adjacency matrix.
+If using BNT, you can access the DAG using
+<pre>
+G = bnet.dag;
+</pre>
+
+<h2>Matlab's biograph function</h2>
+
+The Mathworks computational biology toolbox
+has many useful graph related functions, including visualization.
+<br>
+Click 
+<a href="http://www.mathworks.com/products/bioinfo/demos.html?file=/products/demos/shipping/bioinfo/graphtheorydemo.html#4">
+here</a>
+for a demo.
+
+
+
+<h2>Cemgil's draw_graph</h2>
+
+You can visualize an arbitrary graph (such as one learned using the
+structure learning routines) with Matlab code written by
+<a href="http://www-sigproc.eng.cam.ac.uk/~atc27/matlab/layout.html">
+Ali Taylan Cemgil</a>
+from the University of Cambridge.
+A modified version of this code
+is <a href="GraphViz.zip">here</a>
+(this is already bundled with BNT).
+Just type
+<pre>
+draw_graph(G);
+</pre>
+For example, this is the output produced on a
+<a href="http://www.cs.ubc.ca/~murphyk/Software/BNT/usage.html#qmr">random QMR-like model</a>:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+<p>
+
+<h2>Pajek</h2>
+
+<a href="http://vlado.fmf.uni-lj.si/pub/networks/pajek">Pajek</a>
+is an excellent, free Windows program for graph layout.
+Use <a href="adj2pajek2.m">adj2pajek2.m</a> to convert a graph to the
+Pajek file format.
+<br>
+Then Choose File->Network->Read from the menu.
+
+<h2>AT&T Graphviz</h2>
+
+<a href="http://www.research.att.com/sw/tools/graphviz">graphhviz</a>
+is an 
+open-source graph visualization package from AT&T.
+Use
+<a href="graph_to_dot.m">graph_to_dot</a>
+to convert an adjacency matrix to 
+the AT&T file format (the "dot" format).
+You then use dot to convert it to postscript:
+<pre>
+graph_to_dot(G, 'filename', 'foo.dot');
+dot -Tps foo.dot -o foo.ps
+ghostview foo.ps &
+</pre>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/install.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+To install, just unzip FullBNT.zip, start Matlab, and proceed as
+follows
+<pre>
+>> cd C:\kmurphy\FullBNT\FullBNT-1.0.4
+>> addpath(genpathKPM(pwd))
+
+Warning: Function C:\kmurphy\FullBNT\FullBNT-1.0.4\KPMtools\isvector.m has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.
+> In path at 110
+  In addpath at 89
+Warning: Function C:\kmurphy\FullBNT\FullBNT-1.0.4\KPMtools\isscalar.m has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.
+> In path at 110
+  In addpath at 89
+Warning: Function C:\kmurphy\FullBNT\FullBNT-1.0.4\KPMtools\assert.m has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.
+> In path at 110
+  In addpath at 89
+
+>> test_BNT
+</pre>
+The genpathKPM function is like the builtin genpath function, but it
+does not add directories called 'Old' to the path, thus preventing old
+versions of functions accidently shadowing new ones.
+The warnings occur because Matlab 7 added functions with the same
+names as my functions. The BNT versions will shadow the built-in ones,
+but this should be harmless.
+<p>
+Note: the functions installC_BNT etc. are not needed anymore: all C
+code has either been removed or is unnecessary.
+<p> Note: as mentioned above, with new versions of matlab you
+will get lots of warning messages, but everything should still work.
+<p> Note: Cory Reith tells me that, as of
+15 Sep 2009,  octave 3.2.2 can run most of BNT.
+Please send email to crieth@ucsd.edu if you have questions.
Binary file toolboxes/FullBNT-1.0.7/docs/join.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/license.gpl	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,450 @@
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License version 2 as published by the Free Software Foundation.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+
+GNU Library General Public License
+
+----------------------------------------------------------------------------
+
+Table of Contents
+
+   * GNU LIBRARY GENERAL PUBLIC LICENSE
+        o Preamble
+        o TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+----------------------------------------------------------------------------
+
+GNU LIBRARY GENERAL PUBLIC LICENSE
+
+Version 2, June 1991
+
+Copyright (C) 1991 Free Software Foundation, Inc.
+675 Mass Ave, Cambridge, MA 02139, USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to
+share and change it. By contrast, the GNU General Public Licenses are
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users.
+
+This license, the Library General Public License, applies to some specially
+designated Free Software Foundation software, and to any other libraries
+whose authors decide to use it. You can use it for your libraries, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you
+wish), that you receive source code or can get it if you want it, that you
+can change the software or use pieces of it in new free programs; and that
+you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These
+restrictions translate to certain responsibilities for you if you distribute
+copies of the library, or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for
+a fee, you must give the recipients all the rights that we gave you. You
+must make sure that they, too, receive or can get the source code. If you
+link a program with the library, you must provide complete object files to
+the recipients so that they can relink them with the library, after making
+changes to the library and recompiling it. And you must show them these
+terms so they know their rights.
+
+Our method of protecting your rights has two steps: (1) copyright the
+library, and (2) offer you this license which gives you legal permission to
+copy, distribute and/or modify the library.
+
+Also, for each distributor's protection, we want to make certain that
+everyone understands that there is no warranty for this free library. If the
+library is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original version, so that any problems
+introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that companies distributing free software will
+individually obtain patent licenses, thus in effect transforming the program
+into proprietary software. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary one;
+be sure to read it in full, and don't assume that anything in it is the same
+as in the ordinary license.
+
+The reason we have a separate public license for some libraries is that they
+blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in a
+textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+Because of this blurred distinction, using the ordinary General Public
+License for libraries did not effectively promote software sharing, because
+most developers did not use the libraries. We concluded that weaker
+conditions might promote sharing better.
+
+However, unrestricted linking of non-free programs would deprive the users
+of those programs of all benefit from the free status of the libraries
+themselves. This Library General Public License is intended to permit
+developers of non-free programs to use free libraries, while preserving your
+freedom as a user of such programs to change the free libraries that are
+incorporated in them. (We have not seen how to achieve this as regards
+changes in header files, but we have achieved it as regards changes in the
+actual functions of the Library.) The hope is that this will lead to faster
+development of free libraries.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code
+derived from the library, while the latter only works together with the
+library.
+
+Note that it is possible for a library to be covered by the ordinary General
+Public License rather than by this special one.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License Agreement applies to any software library which contains a
+notice placed by the copyright holder or other authorized party saying it
+may be distributed under the terms of this Library General Public License
+(also called "this License"). Each licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared so
+as to be conveniently linked with application programs (which use some of
+those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means
+either the Library or any derivative work under copyright law: that is to
+say, a work containing the Library or a portion of it, either verbatim or
+with modifications and/or translated straightforwardly into another
+language. (Hereinafter, translation is included without limitation in the
+term "modification".)
+
+"Source code" for a work means the preferred form of the work for making
+modifications to it. For a library, complete source code means all the
+source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and
+installation of the library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is
+covered only if its contents constitute a work based on the Library
+(independent of the use of the Library in a tool for writing it). Whether
+that is true depends on what the Library does and what the program that uses
+the Library does.
+
+1. You may copy and distribute verbatim copies of the Library's complete
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the notices
+that refer to this License and to the absence of any warranty; and
+distribute a copy of this License along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Library or any portion of it,
+thus forming a work based on the Library, and copy and distribute such
+modifications or work under the terms of Section 1 above, provided that you
+also meet all of these conditions:
+
+        o a) The modified work must itself be a software library.
+
+        o b) You must cause the files modified to carry prominent notices
+          stating that you changed the files and the date of any change.
+
+        o c) You must cause the whole of the work to be licensed at no
+          charge to all third parties under the terms of this License.
+
+        o d) If a facility in the modified Library refers to a function or a
+          table of data to be supplied by an application program that uses
+          the facility, other than as an argument passed when the facility
+          is invoked, then you must make a good faith effort to ensure that,
+          in the event an application does not supply such function or
+          table, the facility still operates, and performs whatever part of
+          its purpose remains meaningful.
+
+          (For example, a function in a library to compute square roots has
+          a purpose that is entirely well-defined independent of the
+          application. Therefore, Subsection 2d requires that any
+          application-supplied function or table used by this function must
+          be optional: if the application does not supply it, the square
+          root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, and can be
+reasonably considered independent and separate works in themselves, then
+this License, and its terms, do not apply to those sections when you
+distribute them as separate works. But when you distribute the same sections
+as part of a whole which is a work based on the Library, the distribution of
+the whole must be on the terms of this License, whose permissions for other
+licensees extend to the entire whole, and thus to each and every part
+regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise
+the right to control the distribution of derivative or collective works
+based on the Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage
+or distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may opt to apply the terms of the ordinary GNU General Public License
+instead of this License to a given copy of the Library. To do this, you must
+alter all the notices that refer to this License, so that they refer to the
+ordinary GNU General Public License, version 2, instead of to this License.
+(If a newer version than version 2 of the ordinary GNU General Public
+License has appeared, then you can specify that version instead if you
+wish.) Do not make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy,
+so the ordinary GNU General Public License applies to all subsequent copies
+and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+4. You may copy and distribute the Library (or a portion or derivative of
+it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you accompany it with the complete
+corresponding machine-readable source code, which must be distributed under
+the terms of Sections 1 and 2 above on a medium customarily used for
+software interchange.
+
+If distribution of object code is made by offering access to copy from a
+designated place, then offering equivalent access to copy the source code
+from the same place satisfies the requirement to distribute the source code,
+even though third parties are not compelled to copy the source along with
+the object code.
+
+5. A program that contains no derivative of any portion of the Library, but
+is designed to work with the Library by being compiled or linked with it, is
+called a "work that uses the Library". Such a work, in isolation, is not a
+derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for
+distribution of such executables.
+
+When a "work that uses the Library" uses material from a header file that is
+part of the Library, the object code for the work may be a derivative work
+of the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not
+precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure
+layouts and accessors, and small macros and small inline functions (ten
+lines or less in length), then the use of the object file is unrestricted,
+regardless of whether it is legally a derivative work. (Executables
+containing this object code plus portions of the Library will still fall
+under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute
+the object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are
+linked directly with the Library itself.
+
+6. As an exception to the Sections above, you may also compile or link a
+"work that uses the Library" with the Library to produce a work containing
+portions of the Library, and distribute that work under terms of your
+choice, provided that the terms permit modification of the work for the
+customer's own use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library
+is used in it and that the Library and its use are covered by this License.
+You must supply a copy of this License. If the work during execution
+displays copyright notices, you must include the copyright notice for the
+Library among them, as well as a reference directing the user to the copy of
+this License. Also, you must do one of these things:
+
+        o a) Accompany the work with the complete corresponding
+          machine-readable source code for the Library including whatever
+          changes were used in the work (which must be distributed under
+          Sections 1 and 2 above); and, if the work is an executable linked
+          with the Library, with the complete machine-readable "work that
+          uses the Library", as object code and/or source code, so that the
+          user can modify the Library and then relink to produce a modified
+          executable containing the modified Library. (It is understood that
+          the user who changes the contents of definitions files in the
+          Library will not necessarily be able to recompile the application
+          to use the modified definitions.)
+
+        o b) Accompany the work with a written offer, valid for at least
+          three years, to give the same user the materials specified in
+          Subsection 6a, above, for a charge no more than the cost of
+          performing this distribution.
+
+        o c) If distribution of the work is made by offering access to copy
+          from a designated place, offer equivalent access to copy the above
+          specified materials from the same place.
+
+        o d) Verify that the user has already received a copy of these
+          materials or that you have already sent this user a copy.
+
+For an executable, the required form of the "work that uses the Library"
+must include any data and utility programs needed for reproducing the
+executable from it. However, as a special exception, the source code
+distributed need not include anything that is normally distributed (in
+either source or binary form) with the major components (compiler, kernel,
+and so on) of the operating system on which the executable runs, unless that
+component itself accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating
+system. Such a contradiction means you cannot use both them and the Library
+together in an executable that you distribute.
+
+7. You may place library facilities that are a work based on the Library
+side-by-side in a single library together with other library facilities not
+covered by this License, and distribute such a combined library, provided
+that the separate distribution of the work based on the Library and of the
+other library facilities is otherwise permitted, and provided that you do
+these two things:
+
+        o a) Accompany the combined library with a copy of the same work
+          based on the Library, uncombined with any other library
+          facilities. This must be distributed under the terms of the
+          Sections above.
+
+        o b) Give prominent notice with the combined library of the fact
+          that part of it is a work based on the Library, and explaining
+          where to find the accompanying uncombined form of the same work.
+
+8. You may not copy, modify, sublicense, link with, or distribute the
+Library except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, link with, or distribute the Library
+is void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+9. You are not required to accept this License, since you have not signed
+it. However, nothing else grants you permission to modify or distribute the
+Library or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the
+Library (or any work based on the Library), you indicate your acceptance of
+this License to do so, and all its terms and conditions for copying,
+distributing or modifying the Library or works based on it.
+
+10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the original
+licensor to copy, distribute, link with or modify the Library subject to
+these terms and conditions. You may not impose any further restrictions on
+the recipients' exercise of the rights granted herein. You are not
+responsible for enforcing compliance by third parties to this License.
+
+11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot distribute so
+as to satisfy simultaneously your obligations under this License and any
+other pertinent obligations, then as a consequence you may not distribute
+the Library at all. For example, if a patent license would not permit
+royalty-free redistribution of the Library by all those who receive copies
+directly or indirectly through you, then the only way you could satisfy both
+it and this License would be to refrain entirely from distribution of the
+Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents
+or other property right claims or to contest validity of any such claims;
+this section has the sole purpose of protecting the integrity of the free
+software distribution system which is implemented by public license
+practices. Many people have made generous contributions to the wide range of
+software distributed through that system in reliance on consistent
+application of that system; it is up to the author/donor to decide if he or
+she is willing to distribute software through any other system and a
+licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+12. If the distribution and/or use of the Library is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Library under this License may add an
+explicit geographical distribution limitation excluding those countries, so
+that distribution is permitted only in or among countries not thus excluded.
+In such case, this License incorporates the limitation as if written in the
+body of this License.
+
+13. The Free Software Foundation may publish revised and/or new versions of
+the Library General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Library does not specify a license version
+number, you may choose any version ever published by the Free Software
+Foundation.
+
+14. If you wish to incorporate parts of the Library into other free programs
+whose distribution conditions are incompatible with these, write to the
+author to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals of
+preserving the free status of all derivatives of our free software and of
+promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO
+THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY
+PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO
+LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
+THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER
+SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License version 2 as published by the Free Software Foundation.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/majorFeatures.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,113 @@
+
+<h2><a name="features">Major features</h2> 
+<ul> 
+ 
+<li> BNT supports many types of
+<b>conditional probability distributions</b> (nodes),
+and it is easy to add more.
+<ul> 
+<li>Tabular (multinomial)
+<li>Gaussian
+<li>Softmax (logistic/ sigmoid)
+<li>Multi-layer perceptron (neural network)
+<li>Noisy-or
+<li>Deterministic
+</ul> 
+<p> 
+ 
+<li> BNT supports <b>decision and utility nodes</b>, as well as chance
+nodes,
+i.e., influence diagrams as well as Bayes nets.
+<p> 
+ 
+<li> BNT supports static and dynamic BNs (useful for modelling dynamical systems
+and sequence data).
+<p> 
+ 
+<li> BNT supports many different <b>inference algorithms</b>,
+and it is easy to add more.
+ 
+<ul> 
+<li> Exact inference for static BNs:
+<ul> 
+<li>junction tree
+<li>variable elimination
+<li>brute force enumeration (for discrete nets)
+<li>linear algebra (for Gaussian nets)
+<li>Pearl's algorithm (for polytrees)
+<li>quickscore (for QMR)
+</ul> 
+ 
+<p> 
+<li> Approximate inference for static BNs:
+<ul> 
+<li>likelihood weighting
+<li> Gibbs sampling
+<li>loopy belief propagation
+</ul> 
+ 
+<p> 
+<li> Exact inference for DBNs:
+<ul> 
+<li>junction tree
+<li>frontier algorithm
+<li>forwards-backwards (for HMMs)
+<li>Kalman-RTS (for LDSs)
+</ul> 
+ 
+<p> 
+<li> Approximate inference for DBNs:
+<ul> 
+<li>Boyen-Koller
+<li>factored-frontier/loopy belief propagation
+</ul> 
+ 
+</ul> 
+<p> 
+ 
+<li> 
+BNT supports several methods for <b>parameter learning</b>,
+and it is easy to add more.
+<ul> 
+ 
+<li> Batch MLE/MAP parameter learning using EM.
+(Each node type has its own M method, e.g. softmax nodes use IRLS,<br> 
+and each inference engine has its own E method, so the code is fully modular.)
+ 
+<li> Sequential/batch Bayesian parameter learning (for fully observed tabular nodes only).
+</ul> 
+ 
+ 
+<p> 
+<li> 
+BNT supports several methods for <b>regularization</b>,
+and it is easy to add more.
+<ul> 
+<li> Any node can have its parameters clamped (made non-adjustable).
+<li> Any set of compatible nodes can have their parameters tied (c.f.,
+weight sharing in a neural net).
+<li> Some node types (e.g., tabular) supports priors for MAP estimation.
+<li> Gaussian covariance matrices can be declared full or diagonal, and can
+be tied across states of their discrete parents (if any).
+</ul> 
+ 
+<p> 
+<li> 
+BNT supports several methods for <b>structure learning</b>,
+and it is easy to add more.
+<ul> 
+ 
+<li> Bayesian structure learning,
+using MCMC or local search (for fully observed tabular nodes only).
+ 
+<li> Constraint-based structure learning (IC/PC and IC*/FCI).
+</ul> 
+ 
+ 
+<p> 
+<li> The source code is extensively documented, object-oriented, and free, making it
+an excellent tool for teaching, research and rapid prototyping.
+ 
+</ul> 
+ 
+ 
\ No newline at end of file
Binary file toolboxes/FullBNT-1.0.7/docs/mathbymatlab.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/matlab_comparison.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+<html> <head>
+<title>Comparison of Matlab, R/S/Splus, Gauss, etc.</title>
+</head>
+
+<body>
+<!--<body  bgcolor="#FFFFFF"> -->
+
+<h1>Comparison of Matlab, R/S/Splus, Gauss,  etc.</h1>
+
+<ul>
+<li> <a href="http://www.scientificweb.com/ncrunch/">Comparison of
+mathematical programs for data analysis</a>,
+Stefan Steinhaus, tech report, 2000.
+<br>
+This is a very detailed comparison of features and speed of several
+interactive scientific programming environments, e.g. Matlab,
+Mathematica, Splus.
+
+
+<!--
+<p>
+<li> <a href="Papers/gauss.econ.review.ps">Econometric
+programming environments: Gauss, Ox and S-PLUS</a>,
+Francisco Cribari-Neto.
+J. of Applied Econometrics, 12(1):77-89, 1997
+<br>
+Ox can not be used interactively, and has a C-style syntax (it even
+requires users to pre-declare variables!). Its only advantage is speed.
+S-Plus has tons of features and good documentation, but is slow.
+Gauss is somewhere in between.
+
+
+<p>
+<li> <a href="Papers/matlab.econ.review.ps">MATLAB as an econometric
+programming environment</a>,
+Francisco Cribari-Neto and Mark J. Jensen.
+J. of Applied Econometrics, 12(6):735-432, 1997.
+<br>
+The basic conclusion is that Matlab has excellent graphics and
+sparse-matrix facilities, but is slower than Gauss/Ox (especially on
+code 
+with loops), and has few statistical routines built-in (one must buy the
+stats toolbox).
+
+
+
+<p>
+<li> <a href="Papers/R.econ.review.ps">R: Yet another  econometric
+programming environment</a>,
+Francisco Cribari-Neto and S. Zarkos.
+J. of Applied Econometrics, 14(3):319-329, 1999.
+<br>
+The basic conclusion is that R is much faster than Splus on
+code with loops, but a little bit slower on vectorized code. (Gauss/
+Ox is much faster than both; in my experience, R and Matlab have about
+the same speed.)
+However, R has much better memory management than Splus, and R is free. Otherwise, R/S/Splus
+are essentially the same.
+-->
+
+
+</ul>
Binary file toolboxes/FullBNT-1.0.7/docs/numDAGsEqn.png has changed
Binary file toolboxes/FullBNT-1.0.7/docs/numDAGsEqn2.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/param_tieing.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+
+<h2>Example of more complex parameter tieing</h2>
+
+We now give a more complex pattern of parameter tieing.
+(This example is due to Rainer Deventer.)
+The structure is as follows:
+<p>
+<img src="Figures/rainer_tied.gif" height="400">
+<!--<img src="rainer_dbn.jpg" height="600">-->
+<p>
+Since nodes 2 and 3 in slice 2 (N7 and N8)
+have different parents than their counterparts in slice 1 (N2 and N3),
+they must be put into different equivalence classes.
+Hence we define
+<pre>
+eclass1 = [1 2 3 4 5];
+eclass2 = [1 6 7 4 5];
+</pre>
+The dotted bubbles represent the equivalence classes.
+Node 7 is the representative node for equivalence class
+6, and node 8 is the rep. for class 7, so we need to write
+<pre>
+bnet.CPD{6} = xxx_CPD(bnet, 7, xxx);
+bnet.CPD{7} = xxx_CPD(bnet, 8, xxx);
+</pre>
+In general, you can use the following code fragment:
+<pre>
+eclass = bnet.equiv_class(:);
+for e=1:max(eclass)
+  i = bnet.rep_of_eclass(e);
+  bnet.CPD{e} = xxx_CPD(bnet,i);
+end
+</pre>
+<!--
+which is equivalent to
+<pre>
+E = max(eclass);
+rep = zeros(1,E);
+for e=1:E
+  mems = find(eclass==e);
+  rep(e) = mems(1);
+end
+for e=1:E
+  bnet.CPD{e} = xxx_CPD(bnet, rep(e));
+end
+</pre>
+-->
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/supportedModels.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+ <h2><a name="models">Supported probabilistic models</h2> 
+<p> 
+It is trivial to implement all of
+the following probabilistic models using the toolbox.
+<ul> 
+<li>Static
+<ul> 
+<li> Linear regression, logistic regression, hierarchical mixtures of experts
+ 
+<li> Naive Bayes classifiers, mixtures of Gaussians,
+sigmoid belief nets
+ 
+<li> Factor analysis, probabilistic
+PCA, probabilistic ICA, mixtures of these models
+ 
+</ul> 
+ 
+<li>Dynamic
+<ul> 
+ 
+<li> HMMs, Factorial HMMs, coupled HMMs, input-output HMMs, DBNs
+ 
+<li> Kalman filters, ARMAX models, switching Kalman filters,
+tree-structured Kalman filters, multiscale AR models
+ 
+</ul> 
+ 
+<li> Many other combinations, for which there are (as yet) no names!
+ 
+</ul> 
+ 
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/usage.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3072 @@
+<HEAD>
+<TITLE>How to use the Bayes Net Toolbox</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+<h1>How to use the Bayes Net Toolbox</h1>
+
+This documentation was last updated on 29 October 2007.
+<br>
+Click
+<a href="http://bnt.insa-rouen.fr/">here</a>
+for a French version of this documentation (last updated in 2005).
+<p>
+
+<ul>
+<li> <a href="install.html">Installation</a>
+
+<li> <a href="#basics">Creating your first Bayes net</a>
+  <ul>
+  <li> <a href="#basics">Creating a model by hand</a>
+  <li> <a href="#file">Loading a model from a file</a>
+  <li> <a href="#GUI">Creating a model using a GUI</a>
+  <li> <a href="graphviz.html">Graph visualization</a>
+  </ul>
+
+<li> <a href="#inference">Inference</a>
+  <ul>
+  <li> <a href="#marginal">Computing marginal distributions</a>
+  <li> <a href="#joint">Computing joint distributions</a>
+  <li> <a href="#soft">Soft/virtual evidence</a>
+  <li> <a href="#mpe">Most probable explanation</a>
+  </ul>
+
+<li> <a href="#cpd">Conditional Probability Distributions</a>
+  <ul>
+  <li> <a href="#tabular">Tabular (multinomial) nodes</a>
+  <li> <a href="#noisyor">Noisy-or nodes</a>
+  <li> <a href="#deterministic">Other (noisy) deterministic nodes</a>
+  <li> <a href="#softmax">Softmax (multinomial logit) nodes</a>
+  <li> <a href="#mlp">Neural network nodes</a>
+  <li> <a href="#root">Root nodes</a>
+  <li> <a href="#gaussian">Gaussian nodes</a>
+  <li> <a href="#glm">Generalized linear model nodes</a>
+  <li> <a href="#dtree">Classification/regression tree nodes</a>
+  <li> <a href="#nongauss">Other continuous distributions</a>
+  <li> <a href="#cpd_summary">Summary of CPD types</a>
+  </ul>
+
+<li> <a href="#examples">Example models</a>
+  <ul>
+  <li> <a
+  href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">
+Gaussian mixture models</a>
+  <li> <a href="#pca">PCA, ICA, and all that</a>
+  <li> <a href="#mixep">Mixtures of experts</a>
+  <li> <a href="#hme">Hierarchical mixtures of experts</a>
+  <li> <a href="#qmr">QMR</a>
+  <li> <a href="#cg_model">Conditional Gaussian models</a>
+  <li> <a href="#hybrid">Other hybrid models</a>
+  </ul>
+
+<li> <a href="#param_learning">Parameter learning</a>
+  <ul>
+  <li> <a href="#load_data">Loading data from a file</a>
+  <li> <a href="#mle_complete">Maximum likelihood parameter estimation from complete data</a>
+  <li> <a href="#prior">Parameter priors</a>
+  <li> <a href="#bayes_learn">(Sequential) Bayesian parameter updating from complete data</a>
+  <li> <a href="#em">Maximum likelihood parameter estimation with  missing values (EM)</a>
+  <li> <a href="#tying">Parameter tying</a>
+  </ul>
+
+<li> <a href="#structure_learning">Structure learning</a>
+  <ul>
+  <li> <a href="#enumerate">Exhaustive search</a>
+  <li> <a href="#K2">K2</a>
+  <li> <a href="#hill_climb">Hill-climbing</a>
+  <li> <a href="#mcmc">MCMC</a>
+  <li> <a href="#active">Active learning</a>
+  <li> <a href="#struct_em">Structural EM</a>
+  <li> <a href="#graphdraw">Visualizing the learned graph  structure</a>
+  <li> <a href="#constraint">Constraint-based methods</a>
+  </ul>
+
+
+<li> <a href="#engines">Inference engines</a>
+  <ul>
+  <li> <a href="#jtree">Junction tree</a>
+  <li> <a href="#varelim">Variable elimination</a>
+  <li> <a href="#global">Global inference methods</a>
+  <li> <a href="#quickscore">Quickscore</a>
+  <li> <a href="#belprop">Belief propagation</a>
+  <li> <a href="#sampling">Sampling (Monte Carlo)</a>
+  <li> <a href="#engine_summary">Summary of inference engines</a>
+  </ul>
+
+
+<li> <a href="#influence">Influence diagrams/ decision making</a>
+
+
+<li> <a href="usage_dbn.html">DBNs, HMMs, Kalman filters and all that</a>
+</ul>
+
+</ul>
+
+
+
+<h1><a name="basics">Creating your first Bayes net</h1>
+
+To define a Bayes net, you must specify the graph structure and then
+the parameters. We look at each in turn, using a simple example
+(adapted from Russell and
+Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall,
+1995, p454).
+
+
+<h2>Graph structure</h2>
+
+
+Consider the following network.
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler.gif">
+</center>
+<p>
+
+<P>
+To specify this directed acyclic graph (dag), we create an adjacency matrix:
+<PRE>
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+</PRE>
+<P>
+We have numbered the nodes as follows:
+Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4.
+<b>The nodes must always be numbered in topological order, i.e.,
+ancestors before descendants.</b>
+For a more complicated graph, this is a little inconvenient: we will
+see how to get around this <a href="usage_dbn.html#bat">below</a>.
+<p>
+In Matlab 6, you can use logical arrays instead of double arrays,
+which are 4 times smaller:
+<pre>
+dag = false(N,N);
+dag(C,[R S]) = true;
+...
+</pre>
+However, <b>some graph functions (eg acyclic) do not work on
+logical arrays</b>!
+<p>
+You can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>.
+For details on GUIs,
+click <a href="#GUI">here</a>.
+
+<h2>Creating the Bayes net shell</h2>
+
+In addition to specifying the graph structure,
+we must specify the size and type of each node.
+If a node is discrete, its size is the
+number of possible values
+each node can take on; if a node is continuous,
+it can be a vector, and its size is the length of this vector.
+In this case, we will assume all nodes are discrete and binary.
+<PRE>
+discrete_nodes = 1:N;
+node_sizes = 2*ones(1,N); 
+</pre>
+If the nodes were not binary, you could type e.g., 
+<pre>
+node_sizes = [4 2 3 5];
+</pre>
+meaning that Cloudy has 4 possible values, 
+Sprinkler has 2 possible values, etc.
+Note that these are cardinal values, not ordinal, i.e., 
+they are not ordered in any way, like 'low', 'medium', 'high'.
+<p>
+We are now ready to make the Bayes net:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
+</PRE>
+By default, all nodes are assumed to be discrete, so we can also just
+write
+<pre>
+bnet = mk_bnet(dag, node_sizes);
+</PRE>
+You may also specify which nodes will be observed.
+If you don't know, or if this not fixed in advance,
+just use the empty list (the default).
+<pre>
+onodes = [];
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+</PRE>
+Note that optional arguments are specified using a name/value syntax.
+This is common for many BNT functions.
+In general, to find out more about a function (e.g., which optional
+arguments it takes), please see its
+documentation string by typing
+<pre>
+help mk_bnet
+</pre>
+See also other <a href="matlab_tips.html">useful Matlab tips</a>.
+<p>
+It is possible to associate names with nodes, as follows:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+</pre>
+You can then refer to a node by its name:
+<pre>
+C = bnet.names('cloudy'); % bnet.names is an associative array
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+</pre>
+This feature uses my own associative array class.
+
+
+<h2><a name="cpt">Parameters</h2>
+
+A model consists of the graph structure and the parameters.
+The parameters are represented by CPD objects (CPD = Conditional
+Probability Distribution), which define the probability distribution
+of a node given its parents.
+(We will use the terms "node" and "random variable" interchangeably.)
+The simplest kind of CPD is a table (multi-dimensional array), which
+is suitable when all the nodes are discrete-valued. Note that the discrete
+values are not assumed to be ordered in any way; that is, they
+represent categorical quantities, like male and female, rather than
+ordinal quantities, like low, medium and high.
+(We will discuss CPDs in more detail <a href="#cpd">below</a>.)
+<p>
+Tabular CPDs, also called CPTs (conditional probability tables),
+are stored as multidimensional arrays, where the dimensions
+are arranged in the same order as the nodes, e.g., the CPT for node 4
+(WetGrass) is indexed by Sprinkler (2), Rain (3) and then WetGrass (4) itself.
+Hence the child is always the last dimension.
+If a node has no parents, its CPT is a column vector representing its
+prior.
+Note that in Matlab (unlike C), arrays are indexed
+from 1, and are layed out in memory such that the first index toggles
+fastest, e.g., the CPT for node 4 (WetGrass) is as follows
+<P>
+<P><IMG ALIGN=BOTTOM SRC="Figures/CPTgrass.gif"><P>
+<P>
+where we have used the convention that false==1, true==2.
+We can create this CPT in Matlab as follows
+<PRE>
+CPT = zeros(2,2,2);
+CPT(1,1,1) = 1.0;
+CPT(2,1,1) = 0.1;
+...
+</PRE>
+Here is an easier way:
+<PRE>
+CPT = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], [2 2 2]);
+</PRE>
+In fact, we don't need to reshape the array, since the CPD constructor
+will do that for us. So we can just write
+<pre>
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</pre>
+The other nodes are created similarly (using the old syntax for
+optional parameters)
+<PRE>
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</PRE>
+
+
+<h2><a name="rnd_cpt">Random Parameters</h2>
+
+If we do not specify the CPT, random parameters will be
+created, i.e., each "row" of the CPT will be drawn from the uniform distribution.
+To ensure repeatable results, use
+<pre>
+rand('state', seed);
+randn('state', seed);
+</pre>
+To control the degree of randomness (entropy),
+you can sample each row of the CPT from a Dirichlet(p,p,...) distribution.
+If p << 1, this encourages "deterministic" CPTs (one entry near 1, the rest near 0).
+If p = 1, each entry is drawn from U[0,1].
+If p >> 1, the entries will all be near 1/k, where k is the arity of
+this node, i.e., each row will be nearly uniform.
+You can do this as follows, assuming this node
+is number i, and ns is the node_sizes.
+<pre>
+k = ns(i);
+ps = parents(dag, i);
+psz = prod(ns(ps));
+CPT = sample_dirichlet(p*ones(1,k), psz);
+bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', CPT);
+</pre>
+
+
+<h2><a name="file">Loading a network from a file</h2>
+
+If you already have a Bayes net represented in the XML-based
+<a href="http://www.cs.cmu.edu/afs/cs/user/fgcozman/www/Research/InterchangeFormat/">
+Bayes Net Interchange Format (BNIF)</a> (e.g., downloaded from the 
+<a
+href="http://www.cs.huji.ac.il/labs/compbio/Repository">
+Bayes Net repository</a>),
+you can convert it to BNT format using
+the 
+<a href="http://www.digitas.harvard.edu/~ken/bif2bnt/">BIF-BNT Java
+program</a> written by Ken Shan.
+(This is not necessarily up-to-date.)
+<p>
+<b>It is currently not possible to save/load a BNT matlab object to
+file</b>, but this is easily fixed if you modify all the constructors
+for all the classes (see matlab documentation).
+
+<h2><a name="GUI">Creating a model using a GUI</h2>
+
+<ul>
+<li>Senthil Nachimuthu
+has started (Oct 07) an open source
+GUI for BNT called
+<a href="http://projeny.sourceforge.net">projeny</a>
+using Java. This is a successor to BNJ.
+
+<li>
+Philippe LeRay has written (Sep 05)
+a
+<a href="http://banquiseasi.insa-rouen.fr/projects/bnt-editor/">
+BNT GUI</a> in matlab.
+
+<li>
+<a
+href="http://www.dataonstage.com/BNT/PACKAGES/LinkStrength/index.html">
+LinkStrength</a>,
+ a package by Imme Ebert-Uphoff for visualizing the strength of
+dependencies between nodes.
+
+</ul>
+
+<h2>Graph visualization</h2>
+
+Click <a href="graphviz.html">here</a> for more information
+on graph visualization.
+
+
+<h1><a name="inference">Inference</h1>
+
+Having created the BN, we can now use it for inference.
+There are many different algorithms for doing inference in Bayes nets,
+that make different tradeoffs between speed, 
+complexity, generality, and accuracy.
+BNT therefore offers a variety of different inference
+"engines". We will discuss these
+in more detail <a href="#engines">below</a>.
+For now, we will use the junction tree
+engine, which is the mother of all exact inference algorithms.
+This can be created as follows.
+<pre>
+engine = jtree_inf_engine(bnet);
+</pre>
+The other engines have similar constructors, but might take
+additional, algorithm-specific parameters.
+All engines are used in the same way, once they have been created.
+We illustrate this in the following sections.
+
+
+<h2><a name="marginal">Computing marginal distributions</h2>
+
+Suppose we want to compute the probability that the sprinker was on
+given that the grass is wet.
+The evidence consists of the fact that W=2. All the other nodes
+are hidden (unobserved). We can specify this as follows.
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+</pre>
+We use a 1D cell array instead of a vector to
+cope with the fact that nodes can be vectors of different lengths.
+In addition, the value [] can be used
+to denote 'no evidence', instead of having to specify the observation
+pattern as a separate argument.
+(Click <a href="cellarray.html">here</a> for a quick tutorial on cell
+arrays in matlab.)
+<p>
+We are now ready to add the evidence to the engine.
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence);
+</pre>
+The behavior of this function is algorithm-specific, and is discussed
+in more detail <a href="#engines">below</a>.
+In the case of the jtree engine,
+enter_evidence implements a two-pass message-passing scheme.
+The first return argument contains the modified engine, which
+incorporates the evidence. The second return argument contains the
+log-likelihood of the evidence. (Not all engines are capable of
+computing the log-likelihood.)
+<p>
+Finally, we can compute p=P(S=2|W=2) as follows.
+<PRE>
+marg = marginal_nodes(engine, S);
+marg.T
+ans =
+      0.57024
+      0.42976
+p = marg.T(2);
+</PRE>
+We see that p = 0.4298.
+<p>
+Now let us add the evidence that it was raining, and see what
+difference it makes.
+<PRE>
+evidence{R} = 2;
+[engine, loglik] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, S);
+p = marg.T(2);
+</PRE>
+We find that p = P(S=2|W=2,R=2) = 0.1945,
+which is lower than
+before, because the rain can ``explain away'' the
+fact that the grass is wet.
+<p>
+You can plot a marginal distribution over a discrete variable
+as a barchart using the built 'bar' function:
+<pre>
+bar(marg.T)
+</pre>
+This is what it looks like
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler_bar.gif">
+</center>
+<p>
+
+<h2><a name="observed">Observed nodes</h2>
+
+What happens if we ask for the marginal on an observed node, e.g. P(W|W=2)?
+An observed discrete node effectively only has 1 value (the observed
+      one) --- all other values would result in 0 probability.
+For efficiency, BNT treats observed (discrete) nodes as if they were
+      set to 1, as we see below:
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, W);
+m.T
+ans =
+     1
+</pre>
+This can get a little confusing, since we assigned W=2.
+So we can ask BNT to add the evidence back in by passing in an optional argument:
+<pre>
+m = marginal_nodes(engine, W, 1);
+m.T
+ans =
+     0
+     1
+</pre>
+This shows that P(W=1|W=2) = 0 and P(W=2|W=2) = 1.
+
+
+
+<h2><a name="joint">Computing joint distributions</h2>
+
+We can compute the joint probability on a set of nodes as in the
+following example.
+<pre>
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+</pre>
+m is a structure. The 'T' field is a multi-dimensional array (in
+this case, 3-dimensional) that contains the joint probability
+distribution on the specified nodes.
+<pre>
+>> m.T
+ans(:,:,1) =
+    0.2900    0.0410
+    0.0210    0.0009
+ans(:,:,2) =
+         0    0.3690
+    0.1890    0.0891
+</pre>
+We see that P(S=1,R=1,W=2) = 0, since it is impossible for the grass
+to be wet if both the rain and sprinkler are off.
+<p>
+Let us now add some evidence to R.
+<pre>
+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W])
+m = 
+    domain: [2 3 4]
+         T: [2x1x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+    0.0820
+    0.0018
+ans(:,:,2) =
+    0.7380
+    0.1782
+</pre>
+The joint T(i,j,k) = P(S=i,R=j,W=k|evidence)
+should have T(i,1,k) = 0 for all i,k, since R=1 is incompatible
+with the evidence that R=2.
+Instead of creating large tables with many 0s, BNT sets the effective
+size of observed (discrete) nodes to 1, as explained above.
+This is why m.T has size 2x1x2.
+To get a 2x2x2 table, type
+<pre>
+m = marginal_nodes(engine, [S R W], 1)
+m = 
+    domain: [2 3 4]
+         T: [2x2x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+            0        0.082
+            0       0.0018
+ans(:,:,2) =
+            0        0.738
+            0       0.1782
+</pre>
+
+<p>
+Note: It is not always possible to compute the joint on arbitrary
+sets of nodes: it depends on which inference engine you use, as discussed 
+in more detail <a href="#engines">below</a>. 
+
+
+<h2><a name="soft">Soft/virtual evidence</h2>
+
+Sometimes a node is not observed, but we have some distribution over
+its possible values; this is often called "soft" or "virtual"
+evidence.
+One can use this as follows
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence, 'soft', soft_evidence);
+</pre>
+where soft_evidence{i} is either [] (if node i has no soft evidence)
+or is a vector representing the probability distribution over i's
+possible values.
+For example, if we don't know i's exact value, but we know its
+likelihood ratio is 60/40, we can write evidence{i} = [] and
+soft_evidence{i} = [0.6 0.4].
+<p>
+Currently only jtree_inf_engine supports this option.
+It assumes that all hidden nodes, and all nodes for
+which we have soft evidence, are discrete.
+For a longer example, see BNT/examples/static/softev1.m. 
+
+
+<h2><a name="mpe">Most probable explanation</h2>
+
+To compute the most probable explanation (MPE) of the evidence (i.e.,
+the most probable assignment, or a mode of the joint), use
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence);     
+</pre>
+mpe{i} is the most likely value of node i.
+This calls enter_evidence with the 'maximize' flag set to 1, which
+causes the engine to do max-product instead of sum-product.
+The resulting max-marginals are then thresholded.
+If there is more than one maximum probability assignment, we must take 
+    care to break ties in a consistent manner (thresholding the
+    max-marginals may give the wrong result). To force this behavior,
+    type
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence, 1);     
+</pre>
+Note that computing the MPE is someties called abductive reasoning.
+    
+<p>
+You can also use <tt>calc_mpe_bucket</tt> written by Ron Zohar,
+that does a forwards max-product pass, and then a backwards traceback
+pass, which is how Viterbi is traditionally implemented.
+
+
+
+<h1><a name="cpd">Conditional Probability Distributions</h1>
+
+A Conditional Probability Distributions (CPD)
+defines P(X(i) | X(Pa(i))), where X(i) is the i'th node, and X(Pa(i))
+are the parents of node i. There are many ways to represent this
+distribution, which depend in part on whether X(i) and X(Pa(i)) are
+discrete, continuous, or a combination.
+We will discuss various representations below.
+
+
+<h2><a name="tabular">Tabular nodes</h2>
+
+If the CPD is represented as a table (i.e., if it is a multinomial
+distribution), it has a number of parameters that is exponential in
+the number of parents. See the example <a href="#cpt">above</a>.
+
+
+<h2><a name="noisyor">Noisy-or nodes</h2>
+
+A noisy-OR node is like a regular logical OR gate except that
+sometimes the effects of parents that are on get inhibited.
+Let the prob. that parent i gets inhibited be q(i).
+Then a node, C, with 2 parents, A and B, has the following CPD, where
+we use F and T to represent off and on (1 and 2 in BNT).
+<pre>
+A  B  P(C=off)      P(C=on)
+---------------------------
+F  F  1.0           0.0
+T  F  q(A)          1-q(A)
+F  T  q(B)          1-q(B)
+T  T  q(A)q(B)      1-q(A)q(B)
+</pre>
+Thus we see that the causes get inhibited independently.
+It is common to associate a "leak" node with a noisy-or CPD, which is
+like a parent that is always on. This can account for all other unmodelled
+causes which might turn the node on.
+<p>
+The noisy-or distribution is similar to the logistic distribution.
+To see this, let the nodes, S(i), have values in {0,1}, and let q(i,j)
+be the prob. that j inhibits i. Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = 1 - prod_{j} q(i,j)^S(j)
+</pre>
+Now define w(i,j) = -ln q(i,j) and rho(x) = 1-exp(-x). Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = rho(sum_j w(i,j) S(j))
+</pre>
+For a sigmoid node, we have
+<pre>
+Pr(S(i)=1 | parents(S(i))) = sigma(-sum_j w(i,j) S(j))
+</pre>
+where sigma(x) = 1/(1+exp(-x)). Hence they differ in the choice of
+the activation function (although both are monotonically increasing).
+In addition, in the case of a noisy-or, the weights are constrained to be
+positive, since they derive from probabilities q(i,j).
+In both cases, the number of parameters is <em>linear</em> in the
+number of parents, unlike the case of a multinomial distribution,
+where the number of parameters is exponential in the number of parents.
+We will see an example of noisy-OR nodes <a href="#qmr">below</a>.
+
+
+<h2><a name="deterministic">Other (noisy) deterministic nodes</h2>
+
+Deterministic CPDs for discrete random variables can be created using
+the deterministic_CPD class. It is also possible to 'flip' the output
+of the function with some probability, to simulate noise.
+The boolean_CPD class is just a special case of a
+deterministic CPD, where the parents and child are all binary.
+<p>
+Both of these classes are just "syntactic sugar" for the tabular_CPD
+class.
+
+
+
+<h2><a name="softmax">Softmax nodes</h2>
+
+If we have a discrete node with a continuous parent,
+we can define its CPD using a softmax function 
+(also known as the multinomial logit function).
+This acts like a soft thresholding operator, and is defined as follows:
+<pre>
+                    exp(w(:,i)'*x + b(i)) 
+Pr(Q=i | X=x)  =  -----------------------------
+                  sum_j   exp(w(:,j)'*x + b(j))
+
+</pre>
+The parameters of a softmax node, w(:,i) and b(i), i=1..|Q|, have the
+following interpretation: w(:,i)-w(:,j) is the normal vector to the
+decision boundary between classes i and j,
+and b(i)-b(j) is its offset (bias). For example, suppose
+X is a 2-vector, and Q is binary. Then
+<pre>
+w = [1 -1;
+     0 0];
+
+b = [0 0];
+</pre>
+means class 1 are points in the 2D plane with positive x coordinate,
+and class 2 are points in the 2D plane with negative x coordinate.
+If w has large magnitude, the decision boundary is sharp, otherwise it
+is soft.
+In the special case that Q is binary (0/1), the softmax function reduces to the logistic
+(sigmoid) function.
+<p>
+Fitting a softmax function can be done using the iteratively reweighted
+least squares (IRLS) algorithm.
+We use the implementation from
+<a href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+Note that since
+the softmax distribution is not in the exponential family, it does not
+have finite sufficient statistics, and hence we must store all the
+training data in uncompressed form.
+If this takes too much space, one should use online (stochastic) gradient
+descent (not implemented in BNT).
+<p>
+If a softmax node also has discrete parents,
+we use a different set of w/b parameters for each combination of
+parent values, as in the <a href="#gaussian">conditional linear
+Gaussian CPD</a>.
+This feature was implemented by Pierpaolo Brutti.
+He is currently extending it so that discrete parents can be treated
+as if they were continuous, by adding indicator variables to the X
+vector.
+<p>
+We will see an example of softmax nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="mlp">Neural network nodes</h2>
+
+Pierpaolo Brutti has implemented the mlp_CPD class, which uses a multi layer perceptron
+to implement a mapping from continuous parents to discrete children,
+similar to the softmax function.
+(If there are also discrete parents, it creates a mixture of MLPs.)
+It uses code from <a
+href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+This is work in progress.
+
+<h2><a name="root">Root nodes</h2>
+
+A root node has no parents and no parameters; it can be used to model
+an observed, exogeneous input variable, i.e., one which is "outside"
+the model. 
+This is useful for conditional density models.
+We will see an example of root nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="gaussian">Gaussian nodes</h2>
+
+We now consider a distribution suitable for the continuous-valued nodes.
+Suppose the node is called Y, its continuous parents (if any) are
+called X, and its discrete parents (if any) are called Q.
+The distribution on Y is defined as follows:
+<pre>
+- no parents: Y ~ N(mu, Sigma)
+- cts parents : Y|X=x ~ N(mu + W x, Sigma)
+- discrete parents: Y|Q=i ~ N(mu(:,i), Sigma(:,:,i))
+- cts and discrete parents: Y|X=x,Q=i ~ N(mu(:,i) + W(:,:,i) * x, Sigma(:,:,i))
+</pre>
+where N(mu, Sigma) denotes a Normal distribution with mean mu and
+covariance Sigma. Let |X|, |Y| and |Q| denote the sizes of X, Y and Q
+respectively.
+If there are no discrete parents, |Q|=1; if there is
+more than one, then |Q| = a vector of the sizes of each discrete parent.
+If there are no continuous parents, |X|=0; if there is more than one,
+then |X| = the sum of their sizes.
+Then mu is a |Y|*|Q| vector, Sigma is a |Y|*|Y|*|Q| positive
+semi-definite matrix, and W is a |Y|*|X|*|Q| regression (weight)
+matrix.
+<p>
+We can create a Gaussian node with random parameters as follows.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i);
+</pre>
+We can specify the value of one or more of the parameters as in the
+following example, in which |Y|=2, and |Q|=1.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', [0; 0], 'weights', randn(Y,X), 'cov', eye(Y));
+</pre>
+<p>
+We will see an example of conditional linear Gaussian nodes <a
+href="#cg_model">below</a>. 
+<p>
+<b>When learning Gaussians from data</b>, it is helpful to ensure the
+data has a small magnitde
+(see e.g., KPMstats/standardize) to prevent numerical problems.
+Unless you have a lot of data, it is also a very good idea to use
+diagonal instead of full covariance matrices.
+(BNT does not currently support spherical covariances, although it
+would be easy to add, since  KPMstats/clg_Mstep supports this option;
+you would just need to modify gaussian_CPD/update_ess to accumulate
+weighted inner products.)
+
+
+
+<h2><a name="nongauss">Other continuous distributions</h2>
+
+Currently BNT does not support any CPDs for continuous nodes other
+than the Gaussian.
+However, you can use a mixture of Gaussians to
+approximate other continuous distributions. We will see some an example
+of this with the IFA model <a href="#pca">below</a>.
+
+
+<h2><a name="glm">Generalized linear model nodes</h2>
+
+In the future, we may incorporate some of the functionality of
+<a href =
+"http://www.sci.usq.edu.au/staff/dunn/glmlab/glmlab.html">glmlab</a>
+into BNT.
+
+
+<h2><a name="dtree">Classification/regression tree nodes</h2>
+
+We plan to add classification and regression trees to define CPDs for
+discrete and continuous nodes, respectively.
+Trees have many advantages: they are easy to interpret, they can do
+feature selection, they can
+handle discrete and continuous inputs, they do not make strong
+assumptions about the form of the distribution, the number of
+parameters can grow in a data-dependent way (i.e., they are
+semi-parametric), they can handle missing data, etc.
+However, they are not yet implemented.
+<!--
+Yimin Zhang is currently (Feb '02) implementing this.
+-->
+
+
+<h2><a name="cpd_summary">Summary of CPD types</h2>
+
+We list all the different types of CPDs supported by BNT.
+For each CPD, we specify if the child and parents can be discrete (D) or
+continuous (C) (Binary (B) nodes are a special case).
+We also specify which methods each class supports.
+If a method is inherited, the name of the  parent class is mentioned.
+If a parent class calls a child method, this is mentioned.
+<p>
+The <tt>CPD_to_CPT</tt> method converts a CPD to a table; this
+requires that the child and all parents are discrete.
+The CPT might be exponentially big...
+<tt>convert_to_table</tt> evaluates a CPD with evidence, and
+represents the the resulting potential as an array.
+This requires that the child is discrete, and any continuous parents
+are observed.
+<tt>convert_to_pot</tt> evaluates a CPD with evidence, and
+represents the resulting potential as a dpot, gpot, cgpot or upot, as
+requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u =
+utility).
+
+<p>
+When we sample a node, all the parents are observed.
+When we compute the (log) probability of a node, all the parents and
+the child are observed.
+<p>
+We also specify if the parameters are learnable.
+For learning with EM, we require
+the methods <tt>reset_ess</tt>, <tt>update_ess</tt> and
+<tt>maximize_params</tt>. 
+For learning from fully observed data, we require
+the method <tt>learn_params</tt>.
+By default, all classes inherit this from generic_CPD, which simply
+calls <tt>update_ess</tt> N times, once for each data case, followed
+by <tt>maximize_params</tt>, i.e., it is like EM, without the E step.
+Some classes implement a batch formula, which is quicker.
+<p>
+Bayesian learning means computing a posterior over the parameters
+given fully observed data.
+<p>
+Pearl means we implement the methods <tt>compute_pi</tt> and
+<tt>compute_lambda_msg</tt>, used by
+<tt>pearl_inf_engine</tt>, which runs on directed graphs.
+<tt>belprop_inf_engine</tt> only needs <tt>convert_to_pot</tt>.H
+The pearl methods can exploit special properties of the CPDs for
+computing the messages efficiently, whereas belprop does not.
+<p>
+The only method implemented by generic_CPD is <tt>adjustable_CPD</tt>,
+which is not shown, since it is not very interesting.
+
+
+<p>
+
+
+<table>
+<table border units = pixels><tr>
+<td align=center>Name
+<td align=center>Child
+<td align=center>Parents
+<td align=center>Comments
+<td align=center>CPD_to_CPT
+<td align=center>conv_to_table
+<td align=center>conv_to_pot
+<td align=center>sample
+<td align=center>prob
+<td align=center>learn
+<td align=center>Bayes
+<td align=center>Pearl
+
+
+<tr>
+<!-- Name--><td>
+<!-- Child--><td>
+<!-- Parents--><td>
+<!-- Comments--><td>
+<!-- CPD_to_CPT--><td>
+<!-- conv_to_table--><td>
+<!-- conv_to_pot--><td>
+<!-- sample--><td>
+<!-- prob--><td>
+<!-- learn--><td>
+<!-- Bayes--><td>
+<!-- Pearl--><td>
+
+<tr>
+<!-- Name--><td>boolean
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>deterministic
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>Discrete
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Calls CPD_to_CPT
+<!-- conv_to_pot--><td>Calls conv_to_table
+<!-- sample--><td>Calls conv_to_table
+<!-- prob--><td>Calls conv_to_table
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>Gaussian
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>gmux
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multiplexer
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>MLP
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multi layer perceptron
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>noisy-or
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>root
+<!-- Child--><td>C/D
+<!-- Parents--><td>none
+<!-- Comments--><td>no params
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>softmax
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>generic
+<!-- Child--><td>C/D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>N
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>Tabular
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>Y
+<!-- Pearl--><td>Y
+
+</table>
+
+
+
+<h1><a name="examples">Example models</h1>
+
+
+<h2>Gaussian mixture models</h2>
+
+Richard W. DeVaul has made a detailed tutorial on how to fit mixtures
+of Gaussians using BNT. Available
+<a href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">here</a>.
+
+
+<h2><a name="pca">PCA, ICA, and all that </h2>
+
+In Figure (a) below, we show how Factor Analysis can be thought of as a
+graphical model. Here, X has an N(0,I) prior, and
+Y|X=x ~ N(mu + Wx, Psi),
+where Psi is diagonal and W is called the "factor loading matrix".
+Since the noise on both X and Y is diagonal, the components of these
+vectors are uncorrelated, and hence can be represented as individual
+scalar nodes, as we show in (b).
+(This is useful if parts of the observations on the Y vector are occasionally missing.)
+We usually take k=|X| << |Y|=D, so the model tries to explain
+many observations using a low-dimensional subspace.
+
+
+<center>
+<table>
+<tr>
+<td><img src="Figures/fa.gif">
+<td><img src="Figures/fa_scalar.gif">
+<td><img src="Figures/mfa.gif">
+<td><img src="Figures/ifa.gif">
+<tr>
+<td align=center> (a)
+<td align=center> (b)
+<td align=center> (c)
+<td align=center> (d)
+</table>
+</center>
+
+<p>
+We can create this model in BNT as follows.
+<pre>
+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+</pre>
+
+The root node is clamped to the N(0,I) distribution, so that we will
+not update these parameters during learning.
+The mean of the leaf node is clamped to 0,
+since we assume the data has been centered (had its mean subtracted
+off); this is just for simplicity.
+Finally, the covariance of the leaf node is constrained to be
+diagonal. W0 and Psi0 are the initial parameter guesses.
+
+<p>
+We can fit this model (i.e., estimate its parameters in a maximum
+likelihood (ML) sense) using EM, as we
+explain <a href="#em">below</a>.
+Not surprisingly, the ML estimates for mu and Psi turn out to be
+identical to the
+sample mean and variance, which can be computed directly as
+<pre>
+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+</pre>
+Note that W can only be identified up to a rotation matrix, because of
+the spherical symmetry of the source.
+
+<p>
+If we restrict Psi to be spherical, i.e., Psi = sigma*I,
+there is a closed-form solution for W as well,
+i.e., we do not need to use EM.
+In particular, W contains the first |X| eigenvectors of the sample covariance
+matrix, with scalings determined by the eigenvalues and sigma.
+Classical PCA can be obtained by taking the sigma->0 limit.
+For details, see
+
+<ul>
+<li> <a href="ftp://hope.caltech.edu/pub/roweis/Empca/empca.ps">
+"EM algorithms for PCA and SPCA"</a>, Sam Roweis, NIPS 97.
+(<a href="ftp://hope.caltech.edu/pub/roweis/Code/empca.tar.gz">
+Matlab software</a>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+By adding a hidden discrete variable, we can create mixtures of FA
+models, as shown in (c).
+Now we can explain the data using a set of subspaces.
+We can create this model in BNT as follows.
+<pre>
+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+</pre>
+Notice how the covariance matrix for Y is the same for all values of
+Q; that is, the noise level in each sub-space is assumed the same.
+However, we allow the offset, mu, to vary.
+For details, see
+<ul>
+
+<LI> 
+<a HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/tr-96-1.ps.gz"> The EM 
+Algorithm for Mixtures of Factor Analyzers </A>,
+Ghahramani, Z. and Hinton, G.E. (1996),
+University of Toronto
+Technical Report CRG-TR-96-1.
+(<A HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/mfa.tar.gz">Matlab software</A>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+I have included Zoubin's specialized MFA code (with his permission)
+with the toolbox, so you can check that BNT gives the same results:
+see 'BNT/examples/static/mfa1.m'. 
+
+<p>
+Independent Factor Analysis (IFA) generalizes FA by allowing a
+non-Gaussian prior on each component of X.
+(Note that we can approximate a non-Gaussian prior using a mixture of
+Gaussians.)
+This means that the likelihood function is no longer rotationally
+invariant, so we can uniquely identify W and the hidden
+sources X.
+IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y).
+We recover classical Independent Components Analysis (ICA)
+in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the
+weight matrix W is square and invertible.
+For details, see
+<ul>
+<li>
+<a href="http://www.gatsby.ucl.ac.uk/~hagai/ifa.ps">Independent Factor
+Analysis</a>, H. Attias, Neural Computation 11: 803--851, 1998.
+</ul>
+
+
+
+<h2><a name="mixexp">Mixtures of experts</h2>
+
+As an example of the use of the softmax function,
+we introduce the Mixture of Experts model.
+<!--
+We also show
+the Hierarchical Mixture of Experts model, where the hierarchy has two
+levels.
+(This is essentially a probabilistic decision tree of height two.)
+-->
+As before,
+circles denote continuous-valued nodes,
+squares denote discrete nodes, clear
+means hidden, and shaded means observed.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/mixexp.gif">
+<!--
+<td><img src="Figures/hme.gif">
+-->
+</table>
+</center>
+<p>
+X is the observed
+input, Y is the output, and
+the Q nodes are hidden "gating" nodes, which select the appropriate
+set of parameters for Y. During training, Y is assumed observed,
+but for testing, the goal is to predict Y given X.
+Note that this is a <em>conditional</em> density model, so we don't
+associate any parameters with X.
+Hence X's CPD will be a root CPD, which is a way of modelling
+exogenous nodes.
+If the output is a continuous-valued quantity,
+we assume the "experts" are linear-regression units,
+and set Y's CPD to linear-Gaussian.
+If the output is discrete, we set Y's CPD to a softmax function.
+The Q CPDs will always be softmax functions.
+
+<p>
+As a concrete example, consider the mixture of experts model where X and Y are
+scalars, and Q is binary.
+This is just piecewise linear regression, where
+we have two line segments, i.e.,
+<P>
+<IMG ALIGN=BOTTOM SRC="Eqns/lin_reg_eqn.gif">
+<P>
+We can create this model with random parameters as follows.
+(This code is bundled in BNT/examples/static/mixexp2.m.)
+<PRE>
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+</PRE>
+Now let us fit this model using <a href="#em">EM</a>.
+First we <a href="#load_data">load the data</a> (1000 training cases) and plot them.
+<P>
+<PRE>
+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+</PRE>
+<p>
+<center>
+<IMG SRC="Figures/mixexp_data.gif">
+</center>
+<p>
+This is what the model looks like before training.
+(Thanks to Thomas Hofman for writing this plotting routine.)
+<p>
+<center>
+<IMG SRC="Figures/mixexp_before.gif">
+</center>
+<p>
+Now let's train the model, and plot the final performance.
+(We will discuss how to train models in more detail <a href="#param_learning">below</a>.)
+<P>
+<PRE>
+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+</PRE>
+(We specify which nodes will be observed when we create the engine.
+Hence BNT knows that the hidden nodes are all discrete.
+For complex models, this can lead to a significant speedup.)
+Below we show what the model looks like after 16 iterations of EM
+(with 100 IRLS iterations per M step), when it converged
+using the default convergence tolerance (that the
+fractional change in the log-likelihood be less than 1e-3).
+Before learning, the log-likelihood was
+-322.927442; afterwards, it was -13.728778.
+<p>
+<center>
+<IMG SRC="Figures/mixexp_after.gif">
+</center>
+(See BNT/examples/static/mixexp2.m for details of the code.)
+
+
+
+<h2><a name="hme">Hierarchical mixtures of experts</h2>
+
+A hierarchical mixture of experts (HME) extends the mixture of experts
+model by having more than one hidden node. A two-level example is shown below, along
+with its more traditional representation as a neural network.
+This is like a (balanced) probabilistic decision tree of height 2.
+<p>
+<center>
+<IMG SRC="Figures/HMEforMatlab.jpg">
+</center>
+<p>
+<a href="mailto:pbrutti@stat.cmu.edu">Pierpaolo Brutti</a>
+has written an extensive set of routines for HMEs,
+which are bundled with BNT: see the examples/static/HME directory.
+These routines allow you to choose the number of hidden (gating)
+layers, and the form of the experts (softmax or MLP).
+See the file hmemenu, which provides a demo.
+For example, the figure below shows the decision boundaries learned
+for a ternary classification problem, using a 2 level HME with softmax
+gates and softmax experts; the training set is on the left, the
+testing set on the right.
+<p>
+<center>
+<!--<IMG SRC="Figures/hme_dec_boundary.gif">-->
+<IMG SRC="Figures/hme_dec_boundary.png">
+</center>
+<p>
+
+
+<p>
+For more details, see the following:
+<ul>
+
+<li> <a href="http://www.cs.berkeley.edu/~jordan/papers/hierarchies.ps.Z">
+Hierarchical mixtures of experts and the EM algorithm</a>
+M. I. Jordan and R. A. Jacobs. Neural Computation, 6, 181-214, 1994.
+
+<li> <a href =
+"http://www.cs.berkeley.edu/~dmartin/software">David Martin's
+matlab code for HME</a>
+
+<li> <a
+href="http://www.cs.berkeley.edu/~jordan/papers/uai.ps.Z">Why the
+logistic function? A tutorial discussion on 
+probabilities and neural networks.</a> M. I. Jordan. MIT Computational
+Cognitive Science Report 9503, August 1995. 
+
+<li> "Generalized Linear Models", McCullagh and Nelder, Chapman and
+Halll, 1983.
+
+<li>
+"Improved learning algorithms for mixtures of experts in multiclass
+classification".
+K. Chen, L. Xu, H. Chi.
+Neural Networks (1999) 12: 1229-1252.
+
+<li> <a href="http://www.oigeeza.com/steve/">
+Classification Using Hierarchical Mixtures of Experts</a>
+S.R. Waterhouse and A.J. Robinson.
+In Proc. IEEE Workshop on Neural Network for Signal Processing IV (1994), pp. 177-186
+
+<li> <a href="http://www.idiap.ch/~perry/">
+Localized mixtures of experts</a>,
+P. Moerland, 1998.
+
+<li> "Nonlinear gated experts for time series",
+A.S. Weigend and M. Mangeas, 1995.
+
+</ul>
+
+
+<h2><a name="qmr">QMR</h2>
+
+Bayes nets originally arose out of an attempt to add probabilities to
+expert systems, and this is still the most common use for BNs.
+A famous example is
+QMR-DT, a decision-theoretic reformulation of the Quick Medical
+Reference (QMR) model.
+<p>
+<center>
+<IMG ALIGN=BOTTOM SRC="Figures/qmr.gif">
+</center>
+Here, the top layer represents hidden disease nodes, and the bottom
+layer represents observed symptom nodes.
+The goal is to infer the posterior probability of each disease given
+all the symptoms (which can be present, absent or unknown).
+Each node in the top layer has a Bernoulli prior (with a low prior
+probability that the disease is present).
+Since each node in the bottom layer has a high fan-in, we use a
+noisy-OR parameterization; each disease has an independent chance of
+causing each symptom.
+The real QMR-DT model is copyright, but
+we can create a random QMR-like model as follows.
+<pre>
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+</pre>
+In the file BNT/examples/static/qmr1, we create a random bipartite
+graph G, with 5 diseases and 10 findings, and random parameters.
+(In general, to create a random dag, use 'mk_random_dag'.)
+We can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>, with the
+following results:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+
+<p>
+Now let us put some random evidence on all the leaves except the very
+first and very last, and compute the disease posteriors.
+<pre>
+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+</pre>
+Junction tree can be quite slow on large QMR models.
+Fortunately, it is possible to exploit properties of the noisy-OR
+function to speed up exact inference using an algorithm called
+<a href="#quickscore">quickscore</a>, discussed below.
+
+
+
+
+
+<h2><a name="cg_model">Conditional Gaussian models</h2>
+
+A conditional Gaussian model is one in which, conditioned on all the discrete
+nodes, the distribution over the remaining (continuous) nodes is
+multivariate Gaussian. This means we can have arcs from discrete (D)
+to continuous (C) nodes, but not vice versa.
+(We <em>are</em> allowed C->D arcs if the continuous nodes are observed,
+as in the <a href="#mixexp">mixture of experts</a> model,
+since this distribution can be represented with a discrete potential.)
+<p>
+We now give an example of a CG model, from
+the paper "Propagation of Probabilities, Means amd
+Variances in Mixed Graphical Association Models", Steffen Lauritzen,
+JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert
+Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and
+D. J. Spiegelhalter, Springer, 1999.)
+
+<h3>Specifying the graph</h3>
+
+Consider the model of waste emissions from an incinerator plant shown below.
+We follow the standard convention that shaded nodes are observed,
+clear nodes are hidden.
+We also use the non-standard convention that
+square nodes are discrete (tabular) and round nodes are
+Gaussian.
+
+<p>
+<center>
+<IMG SRC="Figures/cg1.gif">
+</center>
+<p>
+
+We can create this model as follows.
+<pre>
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+</pre>
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous
+nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'.
+<p>
+
+
+<h3>Specifying the parameters</h3>
+
+The parameters of the discrete nodes can be specified as follows.
+<pre>
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+</pre>
+
+<p>
+The parameters of the continuous nodes can be specified as follows.
+<pre>
+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+</pre>
+
+
+<h3><a name="cg_infer">Inference</h3>
+
+<!--Let us perform inference in the <a href="#cg_model">waste incinerator example</a>.-->
+First we compute the unconditional marginals.
+<pre>
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+</pre>
+<!--(Of course, we could use <tt>cond_gauss_inf_engine</tt> instead of jtree.)-->
+'marg' is a structure that contains the fields 'mu' and 'Sigma', which
+contain the mean and (co)variance of the marginal on E.
+In this case, they are both scalars.
+Let us check they match the published figures (to 2 decimal places).
+<!--(We can't expect
+more precision than this in general because I have implemented the algorithm of
+Lauritzen (1992), which can be numerically unstable.)-->
+<pre>
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+</pre>
+We can compute the other posteriors similarly.
+Now let us add some evidence.
+<pre>
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+</pre>
+Now we find
+<pre>
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+</pre>
+
+
+We can also compute the joint probability on a set of nodes.
+For example, P(D, Mout | evidence) is a 2D Gaussian:
+<pre>
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+</pre>
+The mean is
+<pre>
+marg.mu
+ans =
+    3.6077
+    4.1077
+</pre>
+and the covariance matrix is
+<pre>
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+</pre>
+It is easy to visualize this posterior using standard Matlab plotting
+functions, e.g.,
+<pre>
+gaussplot2d(marg.mu, marg.Sigma);
+</pre>
+produces the following picture.
+
+<p>
+<center>
+<IMG SRC="Figures/gaussplot.png">
+</center>
+<p>
+
+
+The T field indicates that the mixing weight of this Gaussian
+component is 1.0.
+If the joint contains discrete and continuous variables, the result
+will be a mixture of Gaussians, e.g.,
+<pre>
+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+</pre>
+The interpretation is
+Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ].
+In this case, E is a scalar, so i=j=1; k specifies the mixture component.
+<p>
+We saw in the sprinkler network that BNT sets the effective size of
+observed discrete nodes to 1, since they only have one legal value.
+For continuous nodes, BNT sets their length to 0,
+since they have been reduced to a point.
+For example,
+<pre>
+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+</pre>
+It is simple to post-process the output of marginal_nodes.
+For example, the file BNT/examples/static/cg1 sets the mu term of
+observed nodes to their observed value, and the Sigma term to 0 (since
+observed nodes have no variance).
+
+<p>
+Note that the implemented version of the junction tree is numerically
+unstable when using CG potentials
+(which is why, in the example above, we only required our answers to agree with
+the published ones to 2dp.)
+This is why you might want to use <tt>stab_cond_gauss_inf_engine</tt>,
+implemented by Shan Huang. This is described in
+
+<ul>
+<li> "Stable Local Computation with Conditional Gaussian Distributions",
+S. Lauritzen and F. Jensen, Tech Report R-99-2014,
+Dept. Math. Sciences, Allborg Univ., 1999.
+</ul>
+
+However, even the numerically stable version
+can be computationally intractable if there are many hidden discrete
+nodes, because the number of mixture components grows exponentially e.g., in a
+<a href="usage_dbn.html#lds">switching linear dynamical system</a>.
+In general, one must resort to approximate inference techniques: see
+the discussion on <a href="#engines">inference engines</a> below.
+
+
+<h2><a name="hybrid">Other hybrid models</h2>
+
+When we have C->D arcs, where C is hidden, we need to use
+approximate inference.
+One approach (not implemented in BNT) is described in
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/hybrid_uai99.ps.gz">A
+Variational Approximation for Bayesian Networks with 
+Discrete and Continuous Latent Variables</a>,
+K. Murphy, UAI 99.
+</ul>
+Of course, one can always use <a href="#sampling">sampling</a> methods
+for approximate inference in such models.
+
+
+
+<h1><a name="param_learning">Parameter Learning</h1>
+
+The parameter estimation routines in BNT can be classified into 4
+types, depending on whether the goal is to compute
+a full (Bayesian) posterior over the parameters or just a point
+estimate (e.g., Maximum Likelihood or Maximum A Posteriori),
+and whether all the variables are fully observed or there is missing
+data/ hidden variables (partial observability).
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_params</tt></td>
+ <td><tt>learn_params_em</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>bayes_update_params</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="load_data">Loading data from a file</h2>
+
+To load numeric data from an ASCII text file called 'dat.txt', where each row is a
+case and columns are separated by white-space, such as
+<pre>
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+</pre>
+you can use
+<pre>
+data = load('dat.txt');
+</pre>
+or
+<pre>
+load dat.txt -ascii
+</pre>
+In the latter case, the data is stored in a variable called 'dat' (the
+filename minus the extension).
+Alternatively, suppose the data is stored in a .csv file (has commas
+separating the columns, and contains a header line), such as
+<pre>
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+</pre>
+You can load this using
+<pre>
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+</pre>
+If your file is not in either of these formats, you can either use Perl to convert
+it to this format, or use the Matlab scanf command.
+Type
+<tt>
+help iofun
+</tt>
+for more information on Matlab's file functions.
+<!--
+<p>
+To load data directly from Excel,
+you should buy the 
+<a href="http://www.mathworks.com/products/excellink/">Excel Link</a>.
+To load data directly from a relational database,
+you should buy the 
+<a href="http://www.mathworks.com/products/database">Database
+toolbox</a>.
+-->
+<p>
+BNT learning routines require data to be stored in a cell array.
+data{i,m} is the value of node i in case (example) m, i.e., each
+<em>column</em> is a case.
+If node i is not observed in case m (missing value), set
+data{i,m} = [].
+(Not all the learning routines can cope with such missing values, however.)
+In the special case that all the nodes are observed and are
+scalar-valued (as opposed to vector-valued), the data can be
+stored in a matrix (as opposed to a cell-array).
+<p>
+Suppose, as in the <a href="#mixexp">mixture of experts example</a>,
+that we have 3 nodes in the graph: X(1) is the observed input, X(3) is
+the observed output, and X(2) is a hidden (gating) node. We can
+create the dataset as follows.
+<pre>
+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+</pre>
+Notice how we transposed the data, to convert rows into columns.
+Also, cases{2,m} = [] for all m, since X(2) is always hidden.
+
+
+<h2><a name="mle_complete">Maximum likelihood parameter estimation from complete data</h2>
+
+As an example, let's generate some data from the sprinkler network, randomize the parameters,
+and then try to recover the original model.
+First we create some training data using forwards sampling.
+<pre>
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+</pre>
+samples{j,i} contains the value of the j'th node in case i.
+sample_bnet returns a cell array because, in general, each node might
+be a vector of different length.
+In this case, all nodes are discrete (and hence scalars), so we
+could have used a regular array instead (which can be quicker):
+<pre>
+data = cell2num(samples);
+</pre
+So now data(j,i) = samples{j,i}.
+<p>
+Now we create a network with random parameters.
+(The initial values of bnet2 don't matter in this case, since we can find the
+globally optimal MLE independent of where we start.)
+<pre>
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+</pre>
+Finally, we find the maximum likelihood estimates of the parameters.
+<pre>
+bnet3 = learn_params(bnet2, samples);
+</pre>
+To view the learned parameters, we use a little Matlab hackery.
+<pre>
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+</pre>
+Here are the parameters learned for node 4.
+<pre>
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+</pre>
+So we see that the learned parameters are fairly close to the "true"
+ones, which we display below.
+<pre>
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+</pre>
+We can get better results by using a larger training set, or using
+informative priors (see <a href="#prior">below</a>).
+
+
+
+<h2><a name="prior">Parameter priors</h2>
+
+Currently, only tabular CPDs can have priors on their parameters.
+The conjugate prior for a multinomial is the Dirichlet.
+(For binary random variables, the multinomial is the same as the
+Bernoulli, and the Dirichlet is the same as the Beta.)
+<p>
+The Dirichlet has a simple interpretation in terms of pseudo counts.
+If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the
+training set, where Pa_i are the parents of X_i,
+then the maximum likelihood (ML) estimate is
+T_ijk = N_ijk  / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0.
+To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this
+event was not seen in the training set,
+we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk)
+of times in the past.
+The MAP (maximum a posterior) estimate is then
+<pre>
+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+</pre>
+and is never 0 if all alpha_ijk > 0.
+For example, consider the network A->B, where A is binary and B has 3
+values.
+A uniform prior for B has the form
+<pre>
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+</pre>
+which can be created using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+</pre>
+This prior does not satisfy the likelihood equivalence principle,
+which says that <a href="#markov_equiv">Markov equivalent</a> models
+should have the same marginal likelihood.
+A prior that does satisfy this principle is shown below.
+Heckerman (1995) calls this the
+BDeu prior (likelihood equivalent uniform Bayesian Dirichlet).
+<pre>
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+</pre>
+where we put N/(q*r) in each bin; N is the equivalent sample size,
+r=|A|, q = |B|.
+This can be created as follows
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+</pre>
+Here, 1 is the equivalent sample size, and is the strength of the
+prior.
+You can change this using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+</pre>
+<!--where counts is an array of pseudo-counts of the same size as the
+CPT.-->
+<!--
+<p>
+When you specify a prior, you should set row i of the CPT to the
+normalized version of row i of the pseudo-count matrix, i.e., to the
+expected values of the parameters. This will ensure that computing the
+marginal likelihood sequentially (see <a
+href="#bayes_learn">below</a>) and in batch form gives the same
+results.
+To do this, proceed as follows.
+<pre>
+tabular_CPD(bnet, i, 'prior', counts, 'CPT', mk_stochastic(counts));
+</pre>
+For a non-informative prior, you can just write
+<pre>
+tabular_CPD(bnet, i, 'prior', 'unif', 'CPT', 'unif');
+</pre>
+-->
+
+
+<h2><a name="bayes_learn">(Sequential) Bayesian parameter updating from complete data</h2>
+
+If we use conjugate priors and have fully observed data, we can
+compute the posterior over the parameters in batch form as follows.
+<pre>
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+</pre>
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts,
+and bnet.CPD{i}.CPT is set to the mean of the posterior (the
+normalized counts).
+(Hence if the initial pseudo counts are 0,
+<tt>bayes_update_params</tt> and <tt>learn_params</tt> will give the
+same result.)
+
+
+
+
+<p>
+We can compute the same result sequentially (on-line) as follows.
+<pre>
+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+</pre>
+
+The file <tt>BNT/examples/static/StructLearn/model_select1</tt> has an example of
+sequential model selection which uses the same idea.
+We generate data from the model A->B
+and compute the posterior prob of all 3 dags on 2 nodes:
+ (1) A B,  (2) A <- B , (3) A -> B
+Models 2 and 3 are <a href="#markov_equiv">Markov equivalent</a>, and therefore indistinguishable from 
+observational data alone, so we expect their posteriors to be the same
+(assuming a prior which satisfies likelihood equivalence).
+If we use random parameters, the "true" model only gets a higher posterior after 2000 trials!
+However, if we make B a noisy NOT gate, the true model "wins" after 12
+trials, as shown below (red = model 1, blue/green (superimposed)
+represents models 2/3).
+<p>
+<img src="Figures/model_select.png">
+<p>
+The use of marginal likelihood for model selection is discussed in
+greater detail in the 
+section on <a href="structure_learning">structure learning</a>.
+
+
+
+
+<h2><a name="em">Maximum likelihood parameter estimation with missing values</h2>
+
+Now we consider learning when some values are not observed.
+Let us randomly hide half the values generated from the water
+sprinkler example.
+<pre>
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+</pre>
+samples2{i,l} is the value of node i in training case l, or [] if unobserved.
+<p>
+Now we will compute the MLEs using the EM algorithm.
+We need to use an inference algorithm to compute the expected
+sufficient statistics in the E step; the M (maximization) step is as
+above.
+<pre>
+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+</pre>
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as
+follows:
+<pre>
+plot(LLtrace, 'x-')
+</pre>
+Let's display the results after 10 iterations of EM.
+<pre>
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+</pre>
+We can get improved performance by using one or more of the following
+methods:
+<ul>
+<li> Increasing the size of the training set.
+<li> Decreasing the amount of hidden data.
+<li> Running EM for longer.
+<li> Using informative priors.
+<li> Initialising EM from multiple starting points.
+</ul>
+
+Click <a href="#gaussian">here</a> for a discussion of learning
+Gaussians, which can cause numerical problems.
+<p>
+For a more complete example of learning with EM,
+see the script BNT/examples/static/learn1.m.
+
+<h2><a name="tying">Parameter tying</h2>
+
+In networks with repeated structure (e.g., chains and grids), it is
+common to assume that the parameters are the same at every node. This
+is called parameter tying, and reduces the amount of data needed for
+learning.
+<p>
+When we have tied parameters, there is no longer a one-to-one
+correspondence between nodes and CPDs.
+Rather, each CPD species the parameters for a whole equivalence class
+of nodes.
+It is easiest to see this by example.
+Consider the following <a href="usage_dbn.html#hmm">hidden Markov
+model (HMM)</a>
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+<!--
+We can create this graph structure, assuming we have T time-slices,
+as follows.
+(We number the nodes as shown in the figure, but we could equally well
+number the hidden nodes 1:T, and the observed nodes T+1:2T.)
+<pre>
+N = 2*T;
+dag = zeros(N);
+hnodes = 1:2:2*T;
+for i=1:T-1
+  dag(hnodes(i), hnodes(i+1))=1;
+end
+onodes = 2:2:2*T;
+for i=1:T
+  dag(hnodes(i), onodes(i)) = 1;
+end
+</pre>
+<p>
+The hidden nodes are always discrete, and have Q possible values each,
+but the observed nodes can be discrete or continuous, and have O possible values/length.
+<pre>
+if cts_obs
+  dnodes = hnodes;
+else
+  dnodes = 1:N;
+end
+ns = ones(1,N);
+ns(hnodes) = Q;
+ns(onodes) = O;
+</pre>
+-->
+When HMMs are used for semi-infinite processes like speech recognition,
+we assume the transition matrix
+P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant
+or homogenous Markov chain.
+Hence hidden nodes 2, 3, ..., T
+are all in the same equivalence class, say class Hclass.
+Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the
+same for all t, so the observed nodes are all in the same equivalence
+class, say class Oclass.
+Finally, the prior term P(H(1)) is in a class all by itself, say class
+H1class.
+This is illustrated below, where we explicitly represent the
+parameters as random variables (dotted nodes).
+<p>
+<img src="Figures/hmm4_params.gif">
+<p>
+In BNT, we cannot represent parameters as random variables (nodes).
+Instead, we "hide" the
+parameters inside one CPD for each equivalence class,
+and then specify that the other CPDs should share these parameters, as
+follows.
+<pre>
+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+</pre>
+Finally, we define the parameters for each equivalence class:
+<pre>
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+</pre>
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a
+member of e's equivalence class; that is, it is not always the case
+that e == j. You can use bnet.rep_of_eclass(e) to return the
+representative of equivalence class e.
+BNT will look up the parents of j to determine the size
+of the CPT to use. It assumes that this is the same for all members of
+the equivalence class.
+Click <a href="param_tieing.html">here</a> for
+a more complex example of parameter tying.
+<p>
+Note:
+Normally one would define an HMM as a
+<a href = "usage_dbn.html">Dynamic Bayes Net</a>
+(see the function BNT/examples/dynamic/mk_chmm.m).
+However, one can define an HMM as a static BN using the function
+BNT/examples/static/Models/mk_hmm_bnet.m.
+
+
+
+<h1><a name="structure_learning">Structure learning</h1>
+
+Update (9/29/03):
+Phillipe LeRay is developing some additional structure learning code
+on top of BNT. Click
+<a href="http://banquiseasi.insa-rouen.fr/projects/bnt-slp/">
+here</a>
+for details.
+
+<p>
+
+There are two very different approaches to structure learning:
+constraint-based and search-and-score.
+In the <a href="#constraint">constraint-based approach</a>,
+we start with a fully connected graph, and remove edges if certain
+conditional independencies are measured in the data.
+This has the disadvantage that repeated independence tests lose
+statistical power.
+<p>
+In the more popular search-and-score approach,
+we perform a search through the space of possible DAGs, and either
+return the best one found (a point estimate), or return a sample of the
+models found (an approximation to the Bayesian posterior).
+<p>
+The number of DAGs as a function of the number of
+nodes, G(n), is super-exponential in n,
+and is given by the following recurrence
+<!--(where R(i)=G(n)):-->
+<p>
+<center>
+<IMG SRC="numDAGsEqn2.png">
+</center>
+<p>
+The first few values
+are shown below.
+
+<table>
+<tr>  <th>n</th>    <th align=left>G(n)</th> </tr>
+<tr>  <td>1</td>    <td>1</td> </tr>
+<tr>  <td>2</td>    <td>3</td> </tr>
+<tr>  <td>3</td>    <td>25</td> </tr>
+<tr>   <td>4</td>    <td>543</td> </tr> 
+<tr>   <td>5</td>    <td>29,281</td> </tr>
+<tr>   <td>6</td>    <td>3,781,503</td> </tr>
+<tr>   <td>7</td>    <td>1.1 x 10^9</td> </tr>
+<tr>   <td>8</td>    <td>7.8 x 10^11</td> </tr>
+<tr>   <td>9</td>    <td>1.2 x 10^15</td> </tr>
+<tr>   <td>10</td>    <td>4.2 x 10^18</td> </tr>
+</table>
+
+Since the number of DAGs is super-exponential in the number of nodes,
+we cannot exhaustively search the space, so we either use a local
+search algorithm (e.g., greedy hill climbining, perhaps with multiple
+restarts) or a global search algorithm (e.g., Markov Chain Monte
+Carlo). 
+<p>
+If we know a total ordering on the nodes,
+finding the best structure amounts to picking the best set of parents
+for each node independently.
+This is what the K2 algorithm does.
+If the ordering is unknown, we can search over orderings,
+which is more efficient than searching over DAGs (Koller and Friedman, 2000).
+<p>
+In addition to the search procedure, we must specify the scoring
+function. There are two popular choices. The Bayesian score integrates
+out the parameters, i.e., it is the marginal likelihood of the model.
+The BIC (Bayesian Information Criterion) is defined as
+log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is
+the ML estimate of the parameters, d is the number of parameters, and
+N is the number of data cases.
+The BIC method has the advantage of not requiring a prior.
+<p>
+BIC can be derived as a large sample
+approximation to the marginal likelihood.
+(It is also equal to the Minimum Description Length of a model.)
+However, in practice, the sample size does not need to be very large
+for the approximation to be good.
+For example, in the figure below, we plot the ratio between the log marginal likelihood
+and the BIC score against data-set size; we see that the ratio rapidly
+approaches 1, especially for non-informative priors. 
+(This plot was generated by the file BNT/examples/static/bic1.m. It
+uses the water sprinkler BN with BDeu Dirichlet priors with different
+equivalent sample sizes.)
+
+<p>
+<center>
+<IMG SRC="Figures/bic.png">
+</center>
+<p>
+
+<p>
+As with parameter learning, handling missing data/ hidden variables is
+much harder than the fully observed case.
+The structure learning routines in BNT can therefore be classified into 4
+types, analogously to the parameter learning case.
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_struct_K2</tt>  <br>
+<!--     <tt>learn_struct_hill_climb</tt></td> -->
+ <td><tt>not yet supported</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>learn_struct_mcmc</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="markov_equiv">Markov equivalence</h2>
+
+If two DAGs encode the same conditional independencies, they are
+called Markov equivalent. The set of all DAGs can be paritioned into
+Markov equivalence classes. Graphs within the same class can 
+have
+the direction of some of their arcs reversed without changing any of
+the CI relationships.
+Each class can be represented by a PDAG
+(partially directed acyclic graph) called an essential graph or
+pattern. This specifies which edges must be oriented in a certain
+direction, and which may be reversed.
+
+<p>
+When learning graph structure from observational data,
+the best one can hope to do is to identify the model up to Markov
+equivalence. To distinguish amongst graphs within the same equivalence
+class, one needs interventional data: see the discussion on <a
+href="#active">active learning</a> below.
+
+
+
+<h2><a name="enumerate">Exhaustive search</h2>
+
+The brute-force approach to structure learning is to enumerate all
+possible DAGs, and score each one. This provides a "gold standard"
+with which to compare other algorithms. We can do this as follows.
+<pre>
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+</pre>
+where data(i,m) is the value of node i in case m,
+and ns(i) is the size of node i.
+If the DAGs have a lot of families in common, we can cache the sufficient statistics,
+making this potentially more efficient than scoring the DAGs one at a time.
+(Caching is not currently implemented, however.)
+<p>
+By default, we use the Bayesian scoring metric, and assume CPDs are
+represented by tables with BDeu(1) priors.
+We can override these defaults as follows.
+If we want to use uniform priors, we can say
+<pre>
+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+</pre>
+params{i} is a cell-array, containing optional arguments that are
+passed to the constructor for CPD i.
+<p>
+Now suppose we want to use different node types, e.g., 
+Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both
+these CPDs can support discrete and continuous parents, which is
+necessary since all other nodes will be considered as parents).
+The Bayesian scoring metric currently only works for tabular CPDs, so
+we will use BIC:
+<pre>
+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+</pre>
+In practice, one can't enumerate all possible DAGs for N > 5,
+but one can evaluate any reasonably-sized set of hypotheses in this
+way (e.g., nearest neighbors of your current best guess).
+Think of this as "computer assisted model refinement" as opposed to de
+novo learning.
+
+
+<h2><a name="K2">K2</h2>
+
+The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows.
+Initially each node has no parents. It then adds incrementally that parent whose addition most
+increases the score of the resulting structure. When the addition of no single
+parent can increase the score, it stops adding parents to the node.
+Since we are using a fixed ordering, we do not need to check for
+cycles, and can choose the parents for each node independently.
+<p>
+The original paper used the Bayesian scoring
+metric with tabular CPDs and Dirichlet priors.
+BNT generalizes this to allow any kind of CPD, and either the Bayesian
+scoring metric or BIC, as in the example <a href="#enumerate">above</a>.
+In addition, you can specify
+an optional upper bound on the number of parents for each node.
+The file BNT/examples/static/k2demo1.m gives an example of how to use K2.
+We use the water sprinkler network and sample 100 cases from it as before.
+Then we see how much data it takes to recover the generating structure:
+<pre>
+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+</pre>
+Here are the results.
+<pre>
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+</pre>
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly,
+showing that the prior doesn't matter too much.)
+In general, we cannot hope to recover the "true" generating structure,
+only one that is in its <a href="#markov_equiv">Markov equivalence
+class</a>.
+
+
+<h2><a name="hill_climb">Hill-climbing</h2>
+
+Hill-climbing starts at a specific point in space,
+considers all nearest neighbors, and moves to the neighbor
+that has the highest score; if no neighbors have higher
+score than the current point (i.e., we have reached a local maximum),
+the algorithm stops. One can then restart in another part of the space.
+<p>
+A common definition of "neighbor" is all graphs that can be
+generated from the current graph by adding, deleting or reversing a
+single arc, subject to the acyclicity constraint.
+Other neighborhoods are possible: see
+<a href="http://research.microsoft.com/~dmax/publications/jmlr02.pdf">
+Optimal Structure Identification with Greedy Search</a>, Max
+Chickering, JMLR 2002.
+
+<!--
+Note: This algorithm is currently (Feb '02) being implemented by Qian
+Diao.
+-->
+
+
+<h2><a name="mcmc">MCMC</h2>
+
+We can use a Markov Chain Monte Carlo (MCMC) algorithm called
+Metropolis-Hastings (MH) to search the space of all 
+DAGs.
+The standard proposal distribution is to consider moving to all
+nearest neighbors in the sense defined <a href="#hill_climb">above</a>.
+<p>
+The function can be called
+as in the following example.
+<pre>
+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+</pre>
+We can convert our set of sampled graphs to a histogram
+(empirical posterior over all the DAGs) thus
+<pre>
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+</pre>
+To see how well this performs, let us compute the exact posterior exhaustively.
+<p>
+<pre>
+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+</pre>
+We plot the results below.
+(The data set was 100 samples drawn from a random 4 node bnet; see the
+file BNT/examples/static/mcmc1.)
+<pre>
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+</pre>
+<img src="Figures/mcmc_post.jpg" width="800" height="500">
+<p>
+We can also plot the acceptance ratio versus number of MCMC steps,
+as a crude convergence diagnostic.
+<pre>
+clf
+plot(accept_ratio)
+</pre>
+<img src="Figures/mcmc_accept.jpg" width="800" height="300">
+<p>
+Even though the number of samples needed by MCMC is theoretically
+polynomial (not exponential) in the dimensionality of the search space, in practice it has been
+found that MCMC does not converge in reasonable time for graphs with
+more than about 10 nodes.
+
+
+
+
+<h2><a name="active">Active structure learning</h2>
+
+As was mentioned <a href="#markov_equiv">above</a>,
+one can only learn a DAG up to Markov equivalence, even given infinite data.
+If one is interested in learning the structure of a causal network,
+one needs interventional data.
+(By "intervention" we mean forcing a node to take on a specific value,
+thereby effectively severing its incoming arcs.)
+<p>
+Most of the scoring functions accept an optional argument
+that specifies whether a node was observed to have a certain value, or
+was forced to have that value: we set clamped(i,m)=1 if node i was
+forced in training case m. e.g., see the file
+BNT/examples/static/cooper_yoo.
+<p>
+An interesting question is to decide which interventions to perform
+(c.f., design of experiments). For details, see the following tech
+report
+<ul>
+<li> <a href = "../../Papers/alearn.ps.gz">
+Active learning of causal Bayes net structure</a>, Kevin Murphy, March
+2001.
+</ul>
+
+
+<h2><a name="struct_em">Structural EM</h2>
+
+Computing the Bayesian score when there is partial observability is
+computationally challenging, because the parameter posterior becomes
+multimodal (the hidden nodes induce a mixture distribution).
+One therefore needs to use approximations such as BIC.
+Unfortunately, search algorithms are still expensive, because we need
+to run EM at each step to compute the MLE, which is needed to compute
+the score of each model. An alternative approach is
+to do the local search steps inside of the M step of EM, which is more
+efficient since the data has been "filled in" - this is
+called the structural EM algorithm (Friedman 1997), and provably
+converges to a local maximum of the BIC score.
+<p> 
+Wei Hu has implemented SEM for discrete nodes.
+You can download his package from
+<a href="../SEM.zip">here</a>.
+Please address all questions about this code to
+wei.hu@intel.com.
+See also <a href="#phl">Phl's implementation of SEM</a>.
+
+<!--
+<h2><a name="reveal">REVEAL algorithm</h2>
+
+A simple way to learn the structure of a fully observed, discrete,
+factored DBN from a time series is described <a
+href="usage_dbn.html#struct_learn">here</a>.
+-->
+
+
+<h2><a name="graphdraw">Visualizing the graph</h2>
+
+Click <a href="graphviz.html">here</a> for more information
+on graph visualization.
+
+<h2><a name = "constraint">Constraint-based methods</h2>
+
+The IC algorithm (Pearl and Verma, 1991),
+and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993),
+computes many conditional independence tests,
+and combines these constraints into a
+PDAG to represent the whole
+<a href="#markov_equiv">Markov equivalence class</a>.
+<p>
+IC*/FCI extend IC/PC to handle latent variables: see <a href="#ic_star">below</a>.
+(IC stands for inductive causation; PC stands for Peter and Clark,
+the first names of Spirtes and Glymour; FCI stands for fast causal
+inference.
+What we, following Pearl (2000), call IC* was called
+IC in the original Pearl and Verma paper.)
+For details, see
+<ul>
+<li>
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Causation,
+Prediction, and Search</a>, Spirtes, Glymour and 
+Scheines (SGS), 2001 (2nd edition), MIT Press.
+<li> 
+<a href="http://bayes.cs.ucla.edu/BOOK-2K/index.html">Causality: Models, Reasoning and Inference</a>, J. Pearl, 
+2000, Cambridge University Press.
+</ul>
+
+<p>
+
+The PC algorithm takes as arguments a function f, the number of nodes N,
+the maximum fan in K, and additional arguments A which are passed to f.
+The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0
+otherwise.
+For example, suppose we cheat by
+passing in a CI "oracle" which has access to the true DAG; the oracle
+tests for d-separation in this DAG, i.e.,
+f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows.
+<pre>
+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+</pre>
+pdag(i,j) = -1 if there is definitely an i->j arc,
+and pdag(i,j) = 1 if there is either an i->j or and i<-j arc.
+<p>
+Applied to the sprinkler network, this returns
+<pre>
+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+</pre>
+So as expected, we see that the V-structure at the W node is uniquely identified,
+but the other arcs have ambiguous orientation.
+<p>
+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS
+book.
+This example concerns the female orgasm.
+We are given a correlation matrix C between 7 measured factors (such
+as subjective experiences of coital and masturbatory experiences),
+derived from 281 samples, and want to learn a causal model of the
+data. We will not discuss the merits of this type of work here, but
+merely show how to reproduce the results in the SGS book.
+Their program,
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Tetrad</a>,
+makes use of the Fisher Z-test for conditional
+independence, so we do the same:
+<pre>
+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+</pre>
+In this case, the CI test is
+<pre>
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+</pre>
+The results match those of Fig 12a of SGS apart from two edge
+differences; presumably this is due to rounding error (although it
+could be a bug, either in BNT or in Tetrad).
+This example can be found in the file BNT/examples/static/pc2.m.
+
+<p>
+
+The IC* algorithm (Pearl and Verma, 1991),
+and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993),
+are like the IC/PC algorithm, except that they can detect the presence
+of latent variables.
+See the file <tt>learn_struct_pdag_ic_star</tt> written by Tamar
+Kushnir. The output is a matrix P, defined as follows
+(see Pearl (2000), p52 for details):
+<pre>
+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+</pre>
+
+
+<h2><a name="phl">Philippe Leray's structure learning package</h2>
+
+Philippe Leray has written a 
+<a href="http://bnt.insa-rouen.fr/ajouts.html">
+structure learning package</a> that uses BNT.
+
+It currently (Juen 2003) has the following features:
+<ul>
+<li>PC with Chi2 statistical test 
+<li>             MWST : Maximum weighted Spanning Tree 
+<li>             Hill Climbing 
+<li>             Greedy Search 
+<li>             Structural EM 
+<li>             hist_ic : optimal Histogram based on IC information criterion 
+<li>             cpdag_to_dag 
+<li>             dag_to_cpdag 
+<li>             ... 
+</ul>
+
+
+</a>
+
+
+<!--
+<h2><a name="read_learning">Further reading on learning</h2>
+
+I recommend the following tutorials for more details on learning.
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/intel.ps.gz">My short
+tutorial</a> on graphical models, which contains an overview of learning.
+
+<li> 
+<A HREF="ftp://ftp.research.microsoft.com/pub/tr/TR-95-06.PS">
+A tutorial on learning with Bayesian networks</a>, D. Heckerman,
+Microsoft Research Tech Report, 1995.
+
+<li> <A HREF="http://www-cad.eecs.berkeley.edu/~wray/Mirror/lwgmja">
+Operations for Learning with Graphical Models</a>,
+W. L. Buntine, JAIR'94, 159--225.
+</ul>
+<p>
+-->
+
+
+
+
+
+<h1><a name="engines">Inference engines</h1>
+
+Up until now, we have used the junction tree algorithm for inference.
+However, sometimes this is too slow, or not even applicable.
+In general, there are many inference algorithms each of which make
+different tradeoffs between speed, accuracy, complexity and
+generality. Furthermore, there might be many implementations of the
+same algorithm; for instance, a general purpose, readable version,
+and a highly-optimized, specialized one.
+To cope with this variety, we treat each inference algorithm as an
+object, which we call an inference engine.
+
+<p>
+An inference engine is an object that contains a bnet and supports the
+'enter_evidence' and 'marginal_nodes' methods.  The engine constructor
+takes the bnet as argument and may do some model-specific processing.
+When 'enter_evidence' is called, the engine may do some
+evidence-specific processing.  Finally, when 'marginal_nodes' is
+called, the engine may do some query-specific processing.
+
+<p>
+The amount of work done when each stage is specified -- structure,
+parameters, evidence, and query -- depends on the engine.  The cost of
+work done early in this sequence can be amortized.  On the other hand,
+one can make better optimizations if one waits until later in the
+sequence.
+For example, the parameters might imply
+conditional indpendencies that are not evident in the graph structure,
+but can nevertheless be exploited; the evidence indicates which nodes
+are observed and hence can effectively be disconnected from the
+graph; and the query might indicate that large parts of the network
+are d-separated from the query nodes.  (Since it is not the actual
+<em>values</em> of the evidence that matters, just which nodes are observed,
+many engines allow you to specify which nodes will be observed when they are constructed,
+i.e., before calling 'enter_evidence'. Some engines can still cope if
+the actual pattern of evidence is different, e.g., if there is missing
+data.)
+<p>
+
+Although being maximally lazy (i.e., only doing work when a query is
+issued) may seem desirable,
+this is not always the most efficient.
+For example,
+when learning using EM, we need to call marginal_nodes N times, where N is the
+number of nodes. <a href="varelim">Variable elimination</a> would end
+up repeating a lot of work
+each time marginal_nodes is called, making it inefficient for
+learning. The junction tree algorithm, by contrast, uses dynamic
+programming to avoid this redundant computation --- it calculates all
+marginals in two passes during 'enter_evidence', so calling
+'marginal_nodes' takes constant time.
+<p>
+We will discuss some of the inference algorithms implemented in BNT
+below, and finish with a <a href="#engine_summary">summary</a> of all
+of them.
+
+
+
+
+
+
+
+<h2><a name="varelim">Variable elimination</h2>
+
+The variable elimination algorithm, also known as bucket elimination
+or peeling, is one of the simplest inference algorithms.
+The basic idea is to "push sums inside of products"; this is explained
+in more detail
+<a
+href="http://HTTP.CS.Berkeley.EDU/~murphyk/Bayes/bayes.html#infer">here</a>. 
+<p>
+The principle of distributing sums over products can be generalized
+greatly to apply to any commutative semiring.
+This forms the basis of many common algorithms, such as Viterbi
+decoding and the Fast Fourier Transform. For details, see
+
+<ul>
+<li> R. McEliece and S. M. Aji, 2000.
+<!--<a href="http://www.systems.caltech.edu/EE/Faculty/rjm/papers/GDL.ps">-->
+<a href="GDL.pdf">
+The Generalized Distributive Law</a>,
+IEEE Trans. Inform. Theory, vol. 46, no. 2 (March 2000),
+pp. 325--343. 
+
+
+<li>
+F. R. Kschischang, B. J. Frey and H.-A. Loeliger, 2001.
+<a href="http://www.cs.toronto.edu/~frey/papers/fgspa.abs.html">
+Factor graphs and the sum-product algorithm</a>
+IEEE Transactions on Information Theory, February, 2001.
+
+</ul>
+
+<p>
+Choosing an order in which to sum out the variables so as to minimize
+computational cost is known to be NP-hard.
+The implementation of this algorithm in
+<tt>var_elim_inf_engine</tt> makes no attempt to optimize this
+ordering (in contrast, say, to <tt>jtree_inf_engine</tt>, which uses a
+greedy search procedure to find a good ordering).
+<p>
+Note: unlike most algorithms, var_elim does all its computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+
+
+<h2><a name="global">Global inference methods</h2>
+
+The simplest inference algorithm of all is to explicitely construct
+the joint distribution over all the nodes, and then to marginalize it.
+This is implemented in <tt>global_joint_inf_engine</tt>.
+Since the size of the joint is exponential in the
+number of discrete (hidden) nodes, this is not a very practical algorithm.
+It is included merely for pedagogical and debugging purposes.
+<p>
+Three specialized versions of this algorithm have also been implemented,
+corresponding to the cases where all the nodes are discrete (D), all
+are Gaussian (G), and some are discrete and some Gaussian (CG).
+They are called <tt>enumerative_inf_engine</tt>,
+<tt>gaussian_inf_engine</tt>,
+and <tt>cond_gauss_inf_engine</tt> respectively.
+<p>
+Note: unlike most algorithms, these global inference algorithms do all their computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+<h2><a name="quickscore">Quickscore</h2>
+
+The junction tree algorithm is quite slow on the <a href="#qmr">QMR</a> network,
+since the cliques are so big.
+One simple trick we can use is to notice that hidden leaves do not
+affect the posteriors on the roots, and hence do not need to be
+included in the network.
+A second trick is to notice that the negative findings can be
+"absorbed" into the prior:
+see the file
+BNT/examples/static/mk_minimal_qmr_bnet for details.
+<p>
+
+A much more significant speedup is obtained by exploiting special
+properties of the noisy-or node, as done by the quickscore
+algorithm. For details, see
+<ul>
+<li> Heckerman, "A tractable inference algorithm for diagnosing multiple diseases", UAI 89.
+<li> Rish and Dechter, "On the impact of causal independence", UCI
+tech report, 1998.
+</ul>
+
+This has been implemented in BNT as a special-purpose inference
+engine, which can be created and used as follows:
+<pre>
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+</pre>
+
+
+<h2><a name="belprop">Belief propagation</h2>
+
+Even using quickscore, exact inference takes time that is exponential
+in the number of positive findings.
+Hence for large networks we need to resort to approximate inference techniques.
+See for example
+<ul>
+<li> T. Jaakkola and M. Jordan, "Variational probabilistic inference and the
+QMR-DT network", JAIR 10, 1999.
+
+<li> K. Murphy, Y. Weiss and M. Jordan, "Loopy belief propagation for approximate inference: an empirical study",
+   UAI 99.
+</ul>
+The latter approximation
+entails applying Pearl's belief propagation algorithm to a model even
+if it has loops (hence the name loopy belief propagation).
+Pearl's algorithm, implemented as <tt>pearl_inf_engine</tt>, gives
+exact results when applied to singly-connected graphs
+(a.k.a. polytrees, since
+the underlying undirected topology is a tree, but a node may have
+multiple parents).
+To apply this algorithm to a graph with loops, 
+use <tt>pearl_inf_engine</tt>.
+This can use a centralized or distributed message passing protocol.
+You can use it as in the following example.
+<pre>
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+</pre>
+We found that this algorithm often converges, and when it does, often
+is very accurate, but it depends on the precise setting of the
+parameter values of the network.
+(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.)
+Understanding when and why belief propagation converges/ works
+is a topic of ongoing research.
+<p>
+<tt>pearl_inf_engine</tt> can exploit special structure in noisy-or
+and gmux nodes to compute messages efficiently.
+<p>
+<tt>belprop_inf_engine</tt> is like pearl, but uses potentials to
+represent messages. Hence this is slower.
+<p>
+<tt>belprop_fg_inf_engine</tt> is like belprop,
+but is designed for factor graphs.
+
+
+
+<h2><a name="sampling">Sampling</h2>
+
+BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms:
+<ul>
+<li> <tt>likelihood_weighting_inf_engine</tt> which does importance
+sampling and can handle any node type.
+<li> <tt>gibbs_sampling_inf_engine</tt>, written by Bhaskara Marthi.
+Currently this can only handle tabular CPDs.
+For a much faster and more powerful Gibbs sampling program, see
+<a href="http://www.mrc-bsu.cam.ac.uk/bugs">BUGS</a>.
+</ul>
+Note: To generate samples from a network (which is not the same as inference!),
+use <tt>sample_bnet</tt>.
+
+
+
+<h2><a name="engine_summary">Summary of inference engines</h2>
+
+
+The inference engines differ in many ways. Here are
+some of the major "axes":
+<ul>
+<li> Works for all topologies or makes restrictions? 
+<li> Works for all node types or makes restrictions?
+<li> Exact or approximate inference?
+</ul>
+
+<p>
+In terms of topology, most engines handle any kind of DAG.
+<tt>belprop_fg</tt> does approximate inference on factor graphs (FG), which
+can be used to represent directed, undirected, and mixed (chain)
+graphs.
+(In the future, we plan to support exact inference on chain graphs.)
+<tt>quickscore</tt> only works on QMR-like models.
+<p>
+In terms of node types: algorithms that use potentials can handle
+discrete (D), Gaussian (G) or conditional Gaussian (CG) models.
+Sampling algorithms can essentially handle any kind of node (distribution).
+Other algorithms make more restrictive assumptions in exchange for
+speed.
+<p>
+Finally, most algorithms are designed to give the exact answer.
+The belief propagation algorithms are exact if applied to trees, and
+in some other cases.
+Sampling is considered approximate, even though, in the limit of an
+infinite number of samples, it gives the exact answer.
+
+<p>
+
+Here is a summary of the properties 
+of all the engines in BNT which work on static networks.
+<p>
+<table>
+<table border units = pixels><tr>
+<td align=left width=0>Name
+<td align=left width=0>Exact?
+<td align=left width=0>Node type?
+<td align=left width=0>topology
+<tr>
+<tr>
+<td align=left> belprop
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> belprop_fg
+<td align=left> approx
+<td align=left> D
+<td align=left> factor graph
+<tr>
+<td align=left> cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> enumerative
+<td align=left> exact
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> gaussian
+<td align=left> exact
+<td align=left> G
+<td align=left> DAG
+<tr>
+<td align=left> gibbs
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> global_joint
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+<tr>
+<td align=left> jtree
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+b<tr>
+<td align=left> likelihood_weighting
+<td align=left> approx
+<td align=left> any
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> approx
+<td align=left> D,G
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> exact
+<td align=left> D,G
+<td align=left> polytree
+<tr>
+<td align=left> quickscore
+<td align=left> exact
+<td align=left> noisy-or
+<td align=left> QMR
+<tr>
+<td align=left> stab_cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> var_elim
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+</table>
+
+
+
+<h1><a name="influence">Influence diagrams/ decision making</h1>
+
+BNT implements an exact algorithm for solving LIMIDs (limited memory
+influence diagrams), described in
+<ul>
+<li> S. L. Lauritzen and D. Nilsson.
+<a href="http://www.math.auc.dk/~steffen/papers/limids.pdf">
+Representing and solving decision problems with limited
+information</a>
+Management Science, 47, 1238 - 1251. September 2001.
+</ul>
+LIMIDs explicitely show all information arcs, rather than implicitely
+assuming no forgetting. This allows them to model forgetful
+controllers.
+<p>
+See the examples in <tt>BNT/examples/limids</tt> for details.
+
+
+
+
+<h1>DBNs, HMMs, Kalman filters and all that</h1>
+
+Click <a href="usage_dbn.html">here</a> for documentation about how to
+use BNT for dynamical systems and sequence data.
+
+
+</BODY>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/usage_02nov13.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3215 @@
+<HEAD>
+<TITLE>How to use the Bayes Net Toolbox</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+<h1>How to use the Bayes Net Toolbox</h1>
+
+This documentation was last updated on 13 November 2002.
+<br>
+Click <a href="changelog.html">here</a> for a list of changes made to
+BNT.
+<br>
+Click 
+<a href="http://bnt.insa-rouen.fr/">here</a>
+for a French version of this documentation (which might not
+be up-to-date).
+
+
+<p>
+
+<ul>
+<li> <a href="#install">Installation</a>
+<ul>
+<li> <a href="#installM">Installing the Matlab code</a>
+<li> <a href="#installC">Installing the C code</a>
+<li> <a href="../matlab_tips.html">Useful Matlab tips</a>.
+</ul>
+
+<li> <a href="#basics">Creating your first Bayes net</a>
+  <ul>
+  <li> <a href="#basics">Creating a model by hand</a>
+  <li> <a href="#file">Loading a model from a file</a>
+  <li> <a href="http://bnt.insa-rouen.fr/ajouts.html">Creating a model using a GUI</a>
+  </ul>
+
+<li> <a href="#inference">Inference</a>
+  <ul>
+  <li> <a href="#marginal">Computing marginal distributions</a>
+  <li> <a href="#joint">Computing joint distributions</a>
+  <li> <a href="#soft">Soft/virtual evidence</a>
+  <li> <a href="#mpe">Most probable explanation</a>
+  </ul>
+
+<li> <a href="#cpd">Conditional Probability Distributions</a>
+  <ul>
+  <li> <a href="#tabular">Tabular (multinomial) nodes</a>
+  <li> <a href="#noisyor">Noisy-or nodes</a>
+  <li> <a href="#deterministic">Other (noisy) deterministic nodes</a>
+  <li> <a href="#softmax">Softmax (multinomial logit) nodes</a>
+  <li> <a href="#mlp">Neural network nodes</a>
+  <li> <a href="#root">Root nodes</a>
+  <li> <a href="#gaussian">Gaussian nodes</a>
+  <li> <a href="#glm">Generalized linear model nodes</a>
+  <li> <a href="#dtree">Classification/regression tree nodes</a>
+  <li> <a href="#nongauss">Other continuous distributions</a>
+  <li> <a href="#cpd_summary">Summary of CPD types</a>
+  </ul>
+
+<li> <a href="#examples">Example models</a>
+  <ul>
+  <li> <a
+  href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">
+Gaussian mixture models</a>
+  <li> <a href="#pca">PCA, ICA, and all that</a>
+  <li> <a href="#mixep">Mixtures of experts</a>
+  <li> <a href="#hme">Hierarchical mixtures of experts</a>
+  <li> <a href="#qmr">QMR</a>
+  <li> <a href="#cg_model">Conditional Gaussian models</a>
+  <li> <a href="#hybrid">Other hybrid models</a>
+  </ul>
+
+<li> <a href="#param_learning">Parameter learning</a>
+  <ul>
+  <li> <a href="#load_data">Loading data from a file</a>
+  <li> <a href="#mle_complete">Maximum likelihood parameter estimation from complete data</a>
+  <li> <a href="#prior">Parameter priors</a>
+  <li> <a href="#bayes_learn">(Sequential) Bayesian parameter updating from complete data</a>
+  <li> <a href="#em">Maximum likelihood parameter estimation with  missing values (EM)</a>
+  <li> <a href="#tying">Parameter tying</a>
+  </ul>
+
+<li> <a href="#structure_learning">Structure learning</a>
+  <ul>
+  <li> <a href="#enumerate">Exhaustive search</a>
+  <li> <a href="#K2">K2</a>
+  <li> <a href="#hill_climb">Hill-climbing</a>
+  <li> <a href="#mcmc">MCMC</a>
+  <li> <a href="#active">Active learning</a>
+  <li> <a href="#struct_em">Structural EM</a>
+  <li> <a href="#graphdraw">Visualizing the learned graph  structure</a>
+  <li> <a href="#constraint">Constraint-based methods</a>
+  </ul>
+
+
+<li> <a href="#engines">Inference engines</a>
+  <ul>
+  <li> <a href="#jtree">Junction tree</a>
+  <li> <a href="#varelim">Variable elimination</a>
+  <li> <a href="#global">Global inference methods</a>
+  <li> <a href="#quickscore">Quickscore</a>
+  <li> <a href="#belprop">Belief propagation</a>
+  <li> <a href="#sampling">Sampling (Monte Carlo)</a>
+  <li> <a href="#engine_summary">Summary of inference engines</a>
+  </ul>
+
+
+<li> <a href="#influence">Influence diagrams/ decision making</a>
+
+
+<li> <a href="usage_dbn.html">DBNs, HMMs, Kalman filters and all that</a>
+</ul>
+
+</ul>
+
+
+
+
+<h1><a name="install">Installation</h1>
+
+<h2><a name="installM">Installing the Matlab code</h2>
+
+<ul>
+<li> <a href="bnt_download.html">Download</a> the BNT.zip file.
+
+<p>
+<li> Unpack the file. In Unix, type
+<!--"tar xvf BNT.tar".-->
+"unzip FullBNT.zip".
+In Windows, use
+a program like <a href="http://www.winzip.com">Winzip</a>. This will
+create a directory called FullBNT, which contains BNT and other libraries.
+
+<p>
+<li> Read the file <tt>BNT/README</tt> to make sure the date
+matches the one on the top of <a href=bnt.html>the BNT home page</a>.
+If not, you may need to press 'refresh' on your browser, and download
+again, to get the most recent version.
+
+<p>
+<li> <b>Edit the file "BNT/add_BNT_to_path.m"</b> so it contains the correct
+pathname.
+For example, in Windows,
+I download FullBNT.zip into C:\kpmurphy\matlab, and 
+then comment out the second line (with the % character), and uncomment
+the third line, which reads
+<pre>
+BNT_HOME = 'C:\kpmurphy\matlab\FullBNT';
+</pre>
+
+<p>
+<li> Start up Matlab.
+
+<p>
+<li> Type "ver" at the Matlab prompt (">>").
+<b>You need Matlab version 5.2 or newer to run BNT</b>.
+(Versions 5.0 and 5.1 have a memory leak which seems to sometimes
+crash BNT.)
+
+<p>
+<li> Move to the BNT directory.
+For example, in Windows, I type
+<pre>
+>> cd C:\kpmurphy\matlab\FullBNT\BNT
+</pre>
+
+<p>
+<li> Type "add_BNT_to_path".
+This executes the command
+<tt>addpath(genpath(BNT_HOME))</tt>,
+which adds all directories below FullBNT to the matlab path.
+
+<p>
+<li> Type "test_BNT".
+
+If all goes well, this will produce a bunch of numbers and maybe some
+warning messages (which you can ignore), but no error messages.
+(The warnings should only be of the form
+"Warning: Maximum number of iterations has been exceeded", and are
+produced by Netlab.)
+
+<p>
+<li> <a href="http://groups.yahoo.com/group/BayesNetToolbox/join">
+Join the BNT email list</a>
+
+</ul>
+
+
+If you are new to Matlab, you might like to check out
+<a href="matlab_tips.html">some useful Matlab tips</a>.
+For instance, this explains how to create a startup file, which can be
+used to set your path variable automatically, so you can avoid having
+to type the above commands every time.
+
+
+
+
+<h2><a name="installC">Installing the C code</h2>
+
+Some BNT functions also have C implementations.
+<b>It is not necessary to install the C code</b>, but it can result in a speedup
+of a factor of 5-10.
+To install all the C code, 
+edit installC_BNT.m so it contains the right path,
+then type <tt>installC_BNT</tt>.
+To uninstall all the C code,
+edit uninstallC_BNT.m so it contains the right path,
+then type <tt>uninstallC_BNT</tt>.
+For an up-to-date list of the files which have C implementations, see
+BNT/installC_BNT.m.
+
+<p>
+mex is a script that lets you call C code from Matlab - it does not compile matlab to
+C (see mcc below).
+If your C/C++ compiler  is set up correctly, mex should work out of
+the box.
+If not, you might need to type
+<p>
+<tt> mex -setup</tt>
+<p>
+before calling installC.
+<p>
+To make mex call gcc on Windows,
+you must install <a
+href="http://www.mrc-cbu.cam.ac.uk/Imaging/gnumex20.html">gnumex</a>.
+You can use the <a href="http://www.mingw.org/">minimalist GNU for
+Windows</a> version of gcc, or
+the <a href="http://sources.redhat.com/cygwin/">cygwin</a> version.
+<p>
+In general, typing 
+'mex foo.c' from inside Matlab creates a file called
+'foo.mexglx' or 'foo.dll' (the exact file
+extension is system dependent - on Linux it is 'mexglx', on Windows it is '.dll').
+The resulting file will hide the original 'foo.m' (if it existed), i.e., 
+typing 'foo' at the prompt will call the compiled C version.
+To reveal the original matlab version, just delete foo.mexglx (this is
+what uninstallC does).
+<p>
+Sometimes it takes time for Matlab to realize that the file has
+changed from matlab to C or vice versa; try typing 'clear all' or
+restarting Matlab to refresh it.
+To find out which version of a file you are running, type
+'which foo'.
+<p>
+<a href="http://www.mathworks.com/products/compiler">mcc</a>, the
+Matlab to C compiler, is a separate product, 
+and is quite different from mex. It does not yet support
+objects/classes, which is why we can't compile all of BNT to C automatically.
+Also, hand-written C code is usually much
+better than the C code generated by mcc.
+
+
+<p>
+Acknowledgements:
+Although I wrote some of the C code, most of
+the C code (e.g., for jtree and dpot) was written by Wei Hu;
+the triangulation C code was written by Ilya Shpitser.
+
+
+<h1><a name="basics">Creating your first Bayes net</h1>
+
+To define a Bayes net, you must specify the graph structure and then
+the parameters. We look at each in turn, using a simple example
+(adapted from Russell and
+Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall,
+1995, p454).
+
+
+<h2>Graph structure</h2>
+
+
+Consider the following network.
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler.gif">
+</center>
+<p>
+
+<P>
+To specify this directed acyclic graph (dag), we create an adjacency matrix:
+<PRE>
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+</PRE>
+<P>
+We have numbered the nodes as follows:
+Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4.
+<b>The nodes must always be numbered in topological order, i.e.,
+ancestors before descendants.</b>
+For a more complicated graph, this is a little inconvenient: we will
+see how to get around this <a href="usage_dbn.html#bat">below</a>.
+<p>
+In Matlab 6, you can use logical arrays instead of double arrays,
+which are 4 times smaller:
+<pre>
+dag = false(N,N);
+dag(C,[R S]) = true;
+...
+</pre>
+<p>
+A preliminary attempt to make a <b>GUI</b>
+has been writte by Philippe LeRay and can be downloaded
+from <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+<p>
+You can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>.
+
+<h2>Creating the Bayes net shell</h2>
+
+In addition to specifying the graph structure,
+we must specify the size and type of each node.
+If a node is discrete, its size is the
+number of possible values
+each node can take on; if a node is continuous,
+it can be a vector, and its size is the length of this vector.
+In this case, we will assume all nodes are discrete and binary.
+<PRE>
+discrete_nodes = 1:N;
+node_sizes = 2*ones(1,N); 
+</pre>
+If the nodes were not binary, you could type e.g., 
+<pre>
+node_sizes = [4 2 3 5];
+</pre>
+meaning that Cloudy has 4 possible values, 
+Sprinkler has 2 possible values, etc.
+Note that these are cardinal values, not ordinal, i.e., 
+they are not ordered in any way, like 'low', 'medium', 'high'.
+<p>
+We are now ready to make the Bayes net:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
+</PRE>
+By default, all nodes are assumed to be discrete, so we can also just
+write
+<pre>
+bnet = mk_bnet(dag, node_sizes);
+</PRE>
+You may also specify which nodes will be observed.
+If you don't know, or if this not fixed in advance,
+just use the empty list (the default).
+<pre>
+onodes = [];
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+</PRE>
+Note that optional arguments are specified using a name/value syntax.
+This is common for many BNT functions.
+In general, to find out more about a function (e.g., which optional
+arguments it takes), please see its
+documentation string by typing
+<pre>
+help mk_bnet
+</pre>
+See also other <a href="matlab_tips.html">useful Matlab tips</a>.
+<p>
+It is possible to associate names with nodes, as follows:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+</pre>
+You can then refer to a node by its name:
+<pre>
+C = bnet.names{'cloudy'}; % bnet.names is an associative array
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+</pre>
+
+
+<h2><a name="cpt">Parameters</h2>
+
+A model consists of the graph structure and the parameters.
+The parameters are represented by CPD objects (CPD = Conditional
+Probability Distribution), which define the probability distribution
+of a node given its parents.
+(We will use the terms "node" and "random variable" interchangeably.)
+The simplest kind of CPD is a table (multi-dimensional array), which
+is suitable when all the nodes are discrete-valued. Note that the discrete
+values are not assumed to be ordered in any way; that is, they
+represent categorical quantities, like male and female, rather than
+ordinal quantities, like low, medium and high.
+(We will discuss CPDs in more detail <a href="#cpd">below</a>.)
+<p>
+Tabular CPDs, also called CPTs (conditional probability tables),
+are stored as multidimensional arrays, where the dimensions
+are arranged in the same order as the nodes, e.g., the CPT for node 4
+(WetGrass) is indexed by Sprinkler (2), Rain (3) and then WetGrass (4) itself.
+Hence the child is always the last dimension.
+If a node has no parents, its CPT is a column vector representing its
+prior.
+Note that in Matlab (unlike C), arrays are indexed
+from 1, and are layed out in memory such that the first index toggles
+fastest, e.g., the CPT for node 4 (WetGrass) is as follows
+<P>
+<P><IMG ALIGN=BOTTOM SRC="Figures/CPTgrass.gif"><P>
+<P>
+where we have used the convention that false==1, true==2.
+We can create this CPT in Matlab as follows
+<PRE>
+CPT = zeros(2,2,2);
+CPT(1,1,1) = 1.0;
+CPT(2,1,1) = 0.1;
+...
+</PRE>
+Here is an easier way:
+<PRE>
+CPT = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], [2 2 2]);
+</PRE>
+In fact, we don't need to reshape the array, since the CPD constructor
+will do that for us. So we can just write
+<pre>
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</pre>
+The other nodes are created similarly (using the old syntax for
+optional parameters)
+<PRE>
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</PRE>
+
+
+<h2><a name="rnd_cpt">Random Parameters</h2>
+
+If we do not specify the CPT, random parameters will be
+created, i.e., each "row" of the CPT will be drawn from the uniform distribution.
+To ensure repeatable results, use
+<pre>
+rand('state', seed);
+randn('state', seed);
+</pre>
+To control the degree of randomness (entropy),
+you can sample each row of the CPT from a Dirichlet(p,p,...) distribution.
+If p << 1, this encourages "deterministic" CPTs (one entry near 1, the rest near 0).
+If p = 1, each entry is drawn from U[0,1].
+If p >> 1, the entries will all be near 1/k, where k is the arity of
+this node, i.e., each row will be nearly uniform.
+You can do this as follows, assuming this node
+is number i, and ns is the node_sizes.
+<pre>
+k = ns(i);
+ps = parents(dag, i);
+psz = prod(ns(ps));
+CPT = sample_dirichlet(p*ones(1,k), psz);
+bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', CPT);
+</pre>
+
+
+<h2><a name="file">Loading a network from a file</h2>
+
+If you already have a Bayes net represented in the XML-based
+<a href="http://www.cs.cmu.edu/afs/cs/user/fgcozman/www/Research/InterchangeFormat/">
+Bayes Net Interchange Format (BNIF)</a> (e.g., downloaded from the 
+<a
+href="http://www.cs.huji.ac.il/labs/compbio/Repository">
+Bayes Net repository</a>),
+you can convert it to BNT format using
+the 
+<a href="http://www.digitas.harvard.edu/~ken/bif2bnt/">BIF-BNT Java
+program</a> written by Ken Shan.
+(This is not necessarily up-to-date.)
+
+
+<h2>Creating a model using a GUI</h2>
+
+Click <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+
+
+
+<h1><a name="inference">Inference</h1>
+
+Having created the BN, we can now use it for inference.
+There are many different algorithms for doing inference in Bayes nets,
+that make different tradeoffs between speed, 
+complexity, generality, and accuracy.
+BNT therefore offers a variety of different inference
+"engines". We will discuss these
+in more detail <a href="#engines">below</a>.
+For now, we will use the junction tree
+engine, which is the mother of all exact inference algorithms.
+This can be created as follows.
+<pre>
+engine = jtree_inf_engine(bnet);
+</pre>
+The other engines have similar constructors, but might take
+additional, algorithm-specific parameters.
+All engines are used in the same way, once they have been created.
+We illustrate this in the following sections.
+
+
+<h2><a name="marginal">Computing marginal distributions</h2>
+
+Suppose we want to compute the probability that the sprinker was on
+given that the grass is wet.
+The evidence consists of the fact that W=2. All the other nodes
+are hidden (unobserved). We can specify this as follows.
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+</pre>
+We use a 1D cell array instead of a vector to
+cope with the fact that nodes can be vectors of different lengths.
+In addition, the value [] can be used
+to denote 'no evidence', instead of having to specify the observation
+pattern as a separate argument.
+(Click <a href="cellarray.html">here</a> for a quick tutorial on cell
+arrays in matlab.)
+<p>
+We are now ready to add the evidence to the engine.
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence);
+</pre>
+The behavior of this function is algorithm-specific, and is discussed
+in more detail <a href="#engines">below</a>.
+In the case of the jtree engine,
+enter_evidence implements a two-pass message-passing scheme.
+The first return argument contains the modified engine, which
+incorporates the evidence. The second return argument contains the
+log-likelihood of the evidence. (Not all engines are capable of
+computing the log-likelihood.)
+<p>
+Finally, we can compute p=P(S=2|W=2) as follows.
+<PRE>
+marg = marginal_nodes(engine, S);
+marg.T
+ans =
+      0.57024
+      0.42976
+p = marg.T(2);
+</PRE>
+We see that p = 0.4298.
+<p>
+Now let us add the evidence that it was raining, and see what
+difference it makes.
+<PRE>
+evidence{R} = 2;
+[engine, loglik] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, S);
+p = marg.T(2);
+</PRE>
+We find that p = P(S=2|W=2,R=2) = 0.1945,
+which is lower than
+before, because the rain can ``explain away'' the
+fact that the grass is wet.
+<p>
+You can plot a marginal distribution over a discrete variable
+as a barchart using the built 'bar' function:
+<pre>
+bar(marg.T)
+</pre>
+This is what it looks like
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler_bar.gif">
+</center>
+<p>
+
+<h2><a name="observed">Observed nodes</h2>
+
+What happens if we ask for the marginal on an observed node, e.g. P(W|W=2)?
+An observed discrete node effectively only has 1 value (the observed
+      one) --- all other values would result in 0 probability.
+For efficiency, BNT treats observed (discrete) nodes as if they were
+      set to 1, as we see below:
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, W);
+m.T
+ans =
+     1
+</pre>
+This can get a little confusing, since we assigned W=2.
+So we can ask BNT to add the evidence back in by passing in an optional argument:
+<pre>
+m = marginal_nodes(engine, W, 1);
+m.T
+ans =
+     0
+     1
+</pre>
+This shows that P(W=1|W=2) = 0 and P(W=2|W=2) = 1.
+
+
+
+<h2><a name="joint">Computing joint distributions</h2>
+
+We can compute the joint probability on a set of nodes as in the
+following example.
+<pre>
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+</pre>
+m is a structure. The 'T' field is a multi-dimensional array (in
+this case, 3-dimensional) that contains the joint probability
+distribution on the specified nodes.
+<pre>
+>> m.T
+ans(:,:,1) =
+    0.2900    0.0410
+    0.0210    0.0009
+ans(:,:,2) =
+         0    0.3690
+    0.1890    0.0891
+</pre>
+We see that P(S=1,R=1,W=2) = 0, since it is impossible for the grass
+to be wet if both the rain and sprinkler are off.
+<p>
+Let us now add some evidence to R.
+<pre>
+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W])
+m = 
+    domain: [2 3 4]
+         T: [2x1x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+    0.0820
+    0.0018
+ans(:,:,2) =
+    0.7380
+    0.1782
+</pre>
+The joint T(i,j,k) = P(S=i,R=j,W=k|evidence)
+should have T(i,1,k) = 0 for all i,k, since R=1 is incompatible
+with the evidence that R=2.
+Instead of creating large tables with many 0s, BNT sets the effective
+size of observed (discrete) nodes to 1, as explained above.
+This is why m.T has size 2x1x2.
+To get a 2x2x2 table, type
+<pre>
+m = marginal_nodes(engine, [S R W], 1)
+m = 
+    domain: [2 3 4]
+         T: [2x2x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+            0        0.082
+            0       0.0018
+ans(:,:,2) =
+            0        0.738
+            0       0.1782
+</pre>
+
+<p>
+Note: It is not always possible to compute the joint on arbitrary
+sets of nodes: it depends on which inference engine you use, as discussed 
+in more detail <a href="#engines">below</a>. 
+
+
+<h2><a name="soft">Soft/virtual evidence</h2>
+
+Sometimes a node is not observed, but we have some distribution over
+its possible values; this is often called "soft" or "virtual"
+evidence.
+One can use this as follows
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence, 'soft', soft_evidence);
+</pre>
+where soft_evidence{i} is either [] (if node i has no soft evidence)
+or is a vector representing the probability distribution over i's
+possible values.
+For example, if we don't know i's exact value, but we know its
+likelihood ratio is 60/40, we can write evidence{i} = [] and
+soft_evidence{i} = [0.6 0.4].
+<p>
+Currently only jtree_inf_engine supports this option.
+It assumes that all hidden nodes, and all nodes for
+which we have soft evidence, are discrete.
+For a longer example, see BNT/examples/static/softev1.m. 
+
+
+<h2><a name="mpe">Most probable explanation</h2>
+
+To compute the most probable explanation (MPE) of the evidence (i.e.,
+the most probable assignment, or a mode of the joint), use
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence);     
+</pre>
+mpe{i} is the most likely value of node i.
+This calls enter_evidence with the 'maximize' flag set to 1, which
+causes the engine to do max-product instead of sum-product.
+The resulting max-marginals are then thresholded.
+If there is more than one maximum probability assignment, we must take 
+    care to break ties in a consistent manner (thresholding the
+    max-marginals may give the wrong result). To force this behavior,
+    type
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence, 1);     
+</pre>
+Note that computing the MPE is someties called abductive reasoning.
+    
+<p>
+You can also use <tt>calc_mpe_bucket</tt> written by Ron Zohar,
+that does a forwards max-product pass, and then a backwards traceback
+pass, which is how Viterbi is traditionally implemented.
+
+
+
+<h1><a name="cpd">Conditional Probability Distributions</h1>
+
+A Conditional Probability Distributions (CPD)
+defines P(X(i) | X(Pa(i))), where X(i) is the i'th node, and X(Pa(i))
+are the parents of node i. There are many ways to represent this
+distribution, which depend in part on whether X(i) and X(Pa(i)) are
+discrete, continuous, or a combination.
+We will discuss various representations below.
+
+
+<h2><a name="tabular">Tabular nodes</h2>
+
+If the CPD is represented as a table (i.e., if it is a multinomial
+distribution), it has a number of parameters that is exponential in
+the number of parents. See the example <a href="#cpt">above</a>.
+
+
+<h2><a name="noisyor">Noisy-or nodes</h2>
+
+A noisy-OR node is like a regular logical OR gate except that
+sometimes the effects of parents that are on get inhibited.
+Let the prob. that parent i gets inhibited be q(i).
+Then a node, C, with 2 parents, A and B, has the following CPD, where
+we use F and T to represent off and on (1 and 2 in BNT).
+<pre>
+A  B  P(C=off)      P(C=on)
+---------------------------
+F  F  1.0           0.0
+T  F  q(A)          1-q(A)
+F  T  q(B)          1-q(B)
+T  T  q(A)q(B)      q-q(A)q(B)
+</pre>
+Thus we see that the causes get inhibited independently.
+It is common to associate a "leak" node with a noisy-or CPD, which is
+like a parent that is always on. This can account for all other unmodelled
+causes which might turn the node on.
+<p>
+The noisy-or distribution is similar to the logistic distribution.
+To see this, let the nodes, S(i), have values in {0,1}, and let q(i,j)
+be the prob. that j inhibits i. Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = 1 - prod_{j} q(i,j)^S(j)
+</pre>
+Now define w(i,j) = -ln q(i,j) and rho(x) = 1-exp(-x). Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = rho(sum_j w(i,j) S(j))
+</pre>
+For a sigmoid node, we have
+<pre>
+Pr(S(i)=1 | parents(S(i))) = sigma(-sum_j w(i,j) S(j))
+</pre>
+where sigma(x) = 1/(1+exp(-x)). Hence they differ in the choice of
+the activation function (although both are monotonically increasing).
+In addition, in the case of a noisy-or, the weights are constrained to be
+positive, since they derive from probabilities q(i,j).
+In both cases, the number of parameters is <em>linear</em> in the
+number of parents, unlike the case of a multinomial distribution,
+where the number of parameters is exponential in the number of parents.
+We will see an example of noisy-OR nodes <a href="#qmr">below</a>.
+
+
+<h2><a name="deterministic">Other (noisy) deterministic nodes</h2>
+
+Deterministic CPDs for discrete random variables can be created using
+the deterministic_CPD class. It is also possible to 'flip' the output
+of the function with some probability, to simulate noise.
+The boolean_CPD class is just a special case of a
+deterministic CPD, where the parents and child are all binary.
+<p>
+Both of these classes are just "syntactic sugar" for the tabular_CPD
+class.
+
+
+
+<h2><a name="softmax">Softmax nodes</h2>
+
+If we have a discrete node with a continuous parent,
+we can define its CPD using a softmax function 
+(also known as the multinomial logit function).
+This acts like a soft thresholding operator, and is defined as follows:
+<pre>
+                    exp(w(:,i)'*x + b(i)) 
+Pr(Q=i | X=x)  =  -----------------------------
+                  sum_j   exp(w(:,j)'*x + b(j))
+
+</pre>
+The parameters of a softmax node, w(:,i) and b(i), i=1..|Q|, have the
+following interpretation: w(:,i)-w(:,j) is the normal vector to the
+decision boundary between classes i and j,
+and b(i)-b(j) is its offset (bias). For example, suppose
+X is a 2-vector, and Q is binary. Then
+<pre>
+w = [1 -1;
+     0 0];
+
+b = [0 0];
+</pre>
+means class 1 are points in the 2D plane with positive x coordinate,
+and class 2 are points in the 2D plane with negative x coordinate.
+If w has large magnitude, the decision boundary is sharp, otherwise it
+is soft.
+In the special case that Q is binary (0/1), the softmax function reduces to the logistic
+(sigmoid) function.
+<p>
+Fitting a softmax function can be done using the iteratively reweighted
+least squares (IRLS) algorithm.
+We use the implementation from
+<a href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+Note that since
+the softmax distribution is not in the exponential family, it does not
+have finite sufficient statistics, and hence we must store all the
+training data in uncompressed form.
+If this takes too much space, one should use online (stochastic) gradient
+descent (not implemented in BNT).
+<p>
+If a softmax node also has discrete parents,
+we use a different set of w/b parameters for each combination of
+parent values, as in the <a href="#gaussian">conditional linear
+Gaussian CPD</a>.
+This feature was implemented by Pierpaolo Brutti.
+He is currently extending it so that discrete parents can be treated
+as if they were continuous, by adding indicator variables to the X
+vector.
+<p>
+We will see an example of softmax nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="mlp">Neural network nodes</h2>
+
+Pierpaolo Brutti has implemented the mlp_CPD class, which uses a multi layer perceptron
+to implement a mapping from continuous parents to discrete children,
+similar to the softmax function.
+(If there are also discrete parents, it creates a mixture of MLPs.)
+It uses code from <a
+href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+This is work in progress.
+
+<h2><a name="root">Root nodes</h2>
+
+A root node has no parents and no parameters; it can be used to model
+an observed, exogeneous input variable, i.e., one which is "outside"
+the model. 
+This is useful for conditional density models.
+We will see an example of root nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="gaussian">Gaussian nodes</h2>
+
+We now consider a distribution suitable for the continuous-valued nodes.
+Suppose the node is called Y, its continuous parents (if any) are
+called X, and its discrete parents (if any) are called Q.
+The distribution on Y is defined as follows:
+<pre>
+- no parents: Y ~ N(mu, Sigma)
+- cts parents : Y|X=x ~ N(mu + W x, Sigma)
+- discrete parents: Y|Q=i ~ N(mu(:,i), Sigma(:,:,i))
+- cts and discrete parents: Y|X=x,Q=i ~ N(mu(:,i) + W(:,:,i) * x, Sigma(:,:,i))
+</pre>
+where N(mu, Sigma) denotes a Normal distribution with mean mu and
+covariance Sigma. Let |X|, |Y| and |Q| denote the sizes of X, Y and Q
+respectively.
+If there are no discrete parents, |Q|=1; if there is
+more than one, then |Q| = a vector of the sizes of each discrete parent.
+If there are no continuous parents, |X|=0; if there is more than one,
+then |X| = the sum of their sizes.
+Then mu is a |Y|*|Q| vector, Sigma is a |Y|*|Y|*|Q| positive
+semi-definite matrix, and W is a |Y|*|X|*|Q| regression (weight)
+matrix.
+<p>
+We can create a Gaussian node with random parameters as follows.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i);
+</pre>
+We can specify the value of one or more of the parameters as in the
+following example, in which |Y|=2, and |Q|=1.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', [0; 0], 'weights', randn(Y,X), 'cov', eye(Y));
+</pre>
+<p>
+We will see an example of conditional linear Gaussian nodes <a
+href="#cg_model">below</a>. 
+<p>
+<b>When learning Gaussians from data</b>, it is helpful to ensure the
+data has a small magnitde
+(see e.g., KPMstats/standardize) to prevent numerical problems.
+Unless you have a lot of data, it is also a very good idea to use
+diagonal instead of full covariance matrices.
+(BNT does not currently support spherical covariances, although it
+would be easy to add, since  KPMstats/clg_Mstep supports this option;
+you would just need to modify gaussian_CPD/update_ess to accumulate
+weighted inner products.)
+
+
+
+<h2><a name="nongauss">Other continuous distributions</h2>
+
+Currently BNT does not support any CPDs for continuous nodes other
+than the Gaussian.
+However, you can use a mixture of Gaussians to
+approximate other continuous distributions. We will see some an example
+of this with the IFA model <a href="#pca">below</a>.
+
+
+<h2><a name="glm">Generalized linear model nodes</h2>
+
+In the future, we may incorporate some of the functionality of
+<a href =
+"http://www.sci.usq.edu.au/staff/dunn/glmlab/glmlab.html">glmlab</a>
+into BNT.
+
+
+<h2><a name="dtree">Classification/regression tree nodes</h2>
+
+We plan to add classification and regression trees to define CPDs for
+discrete and continuous nodes, respectively.
+Trees have many advantages: they are easy to interpret, they can do
+feature selection, they can
+handle discrete and continuous inputs, they do not make strong
+assumptions about the form of the distribution, the number of
+parameters can grow in a data-dependent way (i.e., they are
+semi-parametric), they can handle missing data, etc.
+However, they are not yet implemented.
+<!--
+Yimin Zhang is currently (Feb '02) implementing this.
+-->
+
+
+<h2><a name="cpd_summary">Summary of CPD types</h2>
+
+We list all the different types of CPDs supported by BNT.
+For each CPD, we specify if the child and parents can be discrete (D) or
+continuous (C) (Binary (B) nodes are a special case).
+We also specify which methods each class supports.
+If a method is inherited, the name of the  parent class is mentioned.
+If a parent class calls a child method, this is mentioned.
+<p>
+The <tt>CPD_to_CPT</tt> method converts a CPD to a table; this
+requires that the child and all parents are discrete.
+The CPT might be exponentially big...
+<tt>convert_to_table</tt> evaluates a CPD with evidence, and
+represents the the resulting potential as an array.
+This requires that the child is discrete, and any continuous parents
+are observed.
+<tt>convert_to_pot</tt> evaluates a CPD with evidence, and
+represents the resulting potential as a dpot, gpot, cgpot or upot, as
+requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u =
+utility).
+
+<p>
+When we sample a node, all the parents are observed.
+When we compute the (log) probability of a node, all the parents and
+the child are observed.
+<p>
+We also specify if the parameters are learnable.
+For learning with EM, we require
+the methods <tt>reset_ess</tt>, <tt>update_ess</tt> and
+<tt>maximize_params</tt>. 
+For learning from fully observed data, we require
+the method <tt>learn_params</tt>.
+By default, all classes inherit this from generic_CPD, which simply
+calls <tt>update_ess</tt> N times, once for each data case, followed
+by <tt>maximize_params</tt>, i.e., it is like EM, without the E step.
+Some classes implement a batch formula, which is quicker.
+<p>
+Bayesian learning means computing a posterior over the parameters
+given fully observed data.
+<p>
+Pearl means we implement the methods <tt>compute_pi</tt> and
+<tt>compute_lambda_msg</tt>, used by
+<tt>pearl_inf_engine</tt>, which runs on directed graphs.
+<tt>belprop_inf_engine</tt> only needs <tt>convert_to_pot</tt>.H
+The pearl methods can exploit special properties of the CPDs for
+computing the messages efficiently, whereas belprop does not.
+<p>
+The only method implemented by generic_CPD is <tt>adjustable_CPD</tt>,
+which is not shown, since it is not very interesting.
+
+
+<p>
+
+
+<table>
+<table border units = pixels><tr>
+<td align=center>Name
+<td align=center>Child
+<td align=center>Parents
+<td align=center>Comments
+<td align=center>CPD_to_CPT
+<td align=center>conv_to_table
+<td align=center>conv_to_pot
+<td align=center>sample
+<td align=center>prob
+<td align=center>learn
+<td align=center>Bayes
+<td align=center>Pearl
+
+
+<tr>
+<!-- Name--><td>
+<!-- Child--><td>
+<!-- Parents--><td>
+<!-- Comments--><td>
+<!-- CPD_to_CPT--><td>
+<!-- conv_to_table--><td>
+<!-- conv_to_pot--><td>
+<!-- sample--><td>
+<!-- prob--><td>
+<!-- learn--><td>
+<!-- Bayes--><td>
+<!-- Pearl--><td>
+
+<tr>
+<!-- Name--><td>boolean
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>deterministic
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>Discrete
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Calls CPD_to_CPT
+<!-- conv_to_pot--><td>Calls conv_to_table
+<!-- sample--><td>Calls conv_to_table
+<!-- prob--><td>Calls conv_to_table
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>Gaussian
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>gmux
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multiplexer
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>MLP
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multi layer perceptron
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>noisy-or
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>root
+<!-- Child--><td>C/D
+<!-- Parents--><td>none
+<!-- Comments--><td>no params
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>softmax
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>generic
+<!-- Child--><td>C/D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>N
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>Tabular
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>Y
+<!-- Pearl--><td>Y
+
+</table>
+
+
+
+<h1><a name="examples">Example models</h1>
+
+
+<h2>Gaussian mixture models</h2>
+
+Richard W. DeVaul has made a detailed tutorial on how to fit mixtures
+of Gaussians using BNT. Available
+<a href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">here</a>.
+
+
+<h2><a name="pca">PCA, ICA, and all that </h2>
+
+In Figure (a) below, we show how Factor Analysis can be thought of as a
+graphical model. Here, X has an N(0,I) prior, and
+Y|X=x ~ N(mu + Wx, Psi),
+where Psi is diagonal and W is called the "factor loading matrix".
+Since the noise on both X and Y is diagonal, the components of these
+vectors are uncorrelated, and hence can be represented as individual
+scalar nodes, as we show in (b).
+(This is useful if parts of the observations on the Y vector are occasionally missing.)
+We usually take k=|X| << |Y|=D, so the model tries to explain
+many observations using a low-dimensional subspace.
+
+
+<center>
+<table>
+<tr>
+<td><img src="Figures/fa.gif">
+<td><img src="Figures/fa_scalar.gif">
+<td><img src="Figures/mfa.gif">
+<td><img src="Figures/ifa.gif">
+<tr>
+<td align=center> (a)
+<td align=center> (b)
+<td align=center> (c)
+<td align=center> (d)
+</table>
+</center>
+
+<p>
+We can create this model in BNT as follows.
+<pre>
+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+</pre>
+
+The root node is clamped to the N(0,I) distribution, so that we will
+not update these parameters during learning.
+The mean of the leaf node is clamped to 0,
+since we assume the data has been centered (had its mean subtracted
+off); this is just for simplicity.
+Finally, the covariance of the leaf node is constrained to be
+diagonal. W0 and Psi0 are the initial parameter guesses.
+
+<p>
+We can fit this model (i.e., estimate its parameters in a maximum
+likelihood (ML) sense) using EM, as we
+explain <a href="#em">below</a>.
+Not surprisingly, the ML estimates for mu and Psi turn out to be
+identical to the
+sample mean and variance, which can be computed directly as
+<pre>
+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+</pre>
+Note that W can only be identified up to a rotation matrix, because of
+the spherical symmetry of the source.
+
+<p>
+If we restrict Psi to be spherical, i.e., Psi = sigma*I,
+there is a closed-form solution for W as well,
+i.e., we do not need to use EM.
+In particular, W contains the first |X| eigenvectors of the sample covariance
+matrix, with scalings determined by the eigenvalues and sigma.
+Classical PCA can be obtained by taking the sigma->0 limit.
+For details, see
+
+<ul>
+<li> <a href="ftp://hope.caltech.edu/pub/roweis/Empca/empca.ps">
+"EM algorithms for PCA and SPCA"</a>, Sam Roweis, NIPS 97.
+(<a href="ftp://hope.caltech.edu/pub/roweis/Code/empca.tar.gz">
+Matlab software</a>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+By adding a hidden discrete variable, we can create mixtures of FA
+models, as shown in (c).
+Now we can explain the data using a set of subspaces.
+We can create this model in BNT as follows.
+<pre>
+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+</pre>
+Notice how the covariance matrix for Y is the same for all values of
+Q; that is, the noise level in each sub-space is assumed the same.
+However, we allow the offset, mu, to vary.
+For details, see
+<ul>
+
+<LI> 
+<a HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/tr-96-1.ps.gz"> The EM 
+Algorithm for Mixtures of Factor Analyzers </A>,
+Ghahramani, Z. and Hinton, G.E. (1996),
+University of Toronto
+Technical Report CRG-TR-96-1.
+(<A HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/mfa.tar.gz">Matlab software</A>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+I have included Zoubin's specialized MFA code (with his permission)
+with the toolbox, so you can check that BNT gives the same results:
+see 'BNT/examples/static/mfa1.m'. 
+
+<p>
+Independent Factor Analysis (IFA) generalizes FA by allowing a
+non-Gaussian prior on each component of X.
+(Note that we can approximate a non-Gaussian prior using a mixture of
+Gaussians.)
+This means that the likelihood function is no longer rotationally
+invariant, so we can uniquely identify W and the hidden
+sources X.
+IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y).
+We recover classical Independent Components Analysis (ICA)
+in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the
+weight matrix W is square and invertible.
+For details, see
+<ul>
+<li>
+<a href="http://www.gatsby.ucl.ac.uk/~hagai/ifa.ps">Independent Factor
+Analysis</a>, H. Attias, Neural Computation 11: 803--851, 1998.
+</ul>
+
+
+
+<h2><a name="mixexp">Mixtures of experts</h2>
+
+As an example of the use of the softmax function,
+we introduce the Mixture of Experts model.
+<!--
+We also show
+the Hierarchical Mixture of Experts model, where the hierarchy has two
+levels.
+(This is essentially a probabilistic decision tree of height two.)
+-->
+As before,
+circles denote continuous-valued nodes,
+squares denote discrete nodes, clear
+means hidden, and shaded means observed.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/mixexp.gif">
+<!--
+<td><img src="Figures/hme.gif">
+-->
+</table>
+</center>
+<p>
+X is the observed
+input, Y is the output, and
+the Q nodes are hidden "gating" nodes, which select the appropriate
+set of parameters for Y. During training, Y is assumed observed,
+but for testing, the goal is to predict Y given X.
+Note that this is a <em>conditional</em> density model, so we don't
+associate any parameters with X.
+Hence X's CPD will be a root CPD, which is a way of modelling
+exogenous nodes.
+If the output is a continuous-valued quantity,
+we assume the "experts" are linear-regression units,
+and set Y's CPD to linear-Gaussian.
+If the output is discrete, we set Y's CPD to a softmax function.
+The Q CPDs will always be softmax functions.
+
+<p>
+As a concrete example, consider the mixture of experts model where X and Y are
+scalars, and Q is binary.
+This is just piecewise linear regression, where
+we have two line segments, i.e.,
+<P>
+<IMG ALIGN=BOTTOM SRC="Eqns/lin_reg_eqn.gif">
+<P>
+We can create this model with random parameters as follows.
+(This code is bundled in BNT/examples/static/mixexp2.m.)
+<PRE>
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+</PRE>
+Now let us fit this model using <a href="#em">EM</a>.
+First we <a href="#load_data">load the data</a> (1000 training cases) and plot them.
+<P>
+<PRE>
+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+</PRE>
+<p>
+<center>
+<IMG SRC="Figures/mixexp_data.gif">
+</center>
+<p>
+This is what the model looks like before training.
+(Thanks to Thomas Hofman for writing this plotting routine.)
+<p>
+<center>
+<IMG SRC="Figures/mixexp_before.gif">
+</center>
+<p>
+Now let's train the model, and plot the final performance.
+(We will discuss how to train models in more detail <a href="#param_learning">below</a>.)
+<P>
+<PRE>
+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+</PRE>
+(We specify which nodes will be observed when we create the engine.
+Hence BNT knows that the hidden nodes are all discrete.
+For complex models, this can lead to a significant speedup.)
+Below we show what the model looks like after 16 iterations of EM
+(with 100 IRLS iterations per M step), when it converged
+using the default convergence tolerance (that the
+fractional change in the log-likelihood be less than 1e-3).
+Before learning, the log-likelihood was
+-322.927442; afterwards, it was -13.728778.
+<p>
+<center>
+<IMG SRC="Figures/mixexp_after.gif">
+</center>
+(See BNT/examples/static/mixexp2.m for details of the code.)
+
+
+
+<h2><a name="hme">Hierarchical mixtures of experts</h2>
+
+A hierarchical mixture of experts (HME) extends the mixture of experts
+model by having more than one hidden node. A two-level example is shown below, along
+with its more traditional representation as a neural network.
+This is like a (balanced) probabilistic decision tree of height 2.
+<p>
+<center>
+<IMG SRC="Figures/HMEforMatlab.jpg">
+</center>
+<p>
+<a href="mailto:pbrutti@stat.cmu.edu">Pierpaolo Brutti</a>
+has written an extensive set of routines for HMEs,
+which are bundled with BNT: see the examples/static/HME directory.
+These routines allow you to choose the number of hidden (gating)
+layers, and the form of the experts (softmax or MLP).
+See the file hmemenu, which provides a demo.
+For example, the figure below shows the decision boundaries learned
+for a ternary classification problem, using a 2 level HME with softmax
+gates and softmax experts; the training set is on the left, the
+testing set on the right.
+<p>
+<center>
+<!--<IMG SRC="Figures/hme_dec_boundary.gif">-->
+<IMG SRC="Figures/hme_dec_boundary.png">
+</center>
+<p>
+
+
+<p>
+For more details, see the following:
+<ul>
+
+<li> <a href="http://www.cs.berkeley.edu/~jordan/papers/hierarchies.ps.Z">
+Hierarchical mixtures of experts and the EM algorithm</a>
+M. I. Jordan and R. A. Jacobs. Neural Computation, 6, 181-214, 1994.
+
+<li> <a href =
+"http://www.cs.berkeley.edu/~dmartin/software">David Martin's
+matlab code for HME</a>
+
+<li> <a
+href="http://www.cs.berkeley.edu/~jordan/papers/uai.ps.Z">Why the
+logistic function? A tutorial discussion on 
+probabilities and neural networks.</a> M. I. Jordan. MIT Computational
+Cognitive Science Report 9503, August 1995. 
+
+<li> "Generalized Linear Models", McCullagh and Nelder, Chapman and
+Halll, 1983.
+
+<li>
+"Improved learning algorithms for mixtures of experts in multiclass
+classification".
+K. Chen, L. Xu, H. Chi.
+Neural Networks (1999) 12: 1229-1252.
+
+<li> <a href="http://www.oigeeza.com/steve/">
+Classification Using Hierarchical Mixtures of Experts</a>
+S.R. Waterhouse and A.J. Robinson.
+In Proc. IEEE Workshop on Neural Network for Signal Processing IV (1994), pp. 177-186
+
+<li> <a href="http://www.idiap.ch/~perry/">
+Localized mixtures of experts</a>,
+P. Moerland, 1998.
+
+<li> "Nonlinear gated experts for time series",
+A.S. Weigend and M. Mangeas, 1995.
+
+</ul>
+
+
+<h2><a name="qmr">QMR</h2>
+
+Bayes nets originally arose out of an attempt to add probabilities to
+expert systems, and this is still the most common use for BNs.
+A famous example is
+QMR-DT, a decision-theoretic reformulation of the Quick Medical
+Reference (QMR) model.
+<p>
+<center>
+<IMG ALIGN=BOTTOM SRC="Figures/qmr.gif">
+</center>
+Here, the top layer represents hidden disease nodes, and the bottom
+layer represents observed symptom nodes.
+The goal is to infer the posterior probability of each disease given
+all the symptoms (which can be present, absent or unknown).
+Each node in the top layer has a Bernoulli prior (with a low prior
+probability that the disease is present).
+Since each node in the bottom layer has a high fan-in, we use a
+noisy-OR parameterization; each disease has an independent chance of
+causing each symptom.
+The real QMR-DT model is copyright, but
+we can create a random QMR-like model as follows.
+<pre>
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+</pre>
+In the file BNT/examples/static/qmr1, we create a random bipartite
+graph G, with 5 diseases and 10 findings, and random parameters.
+(In general, to create a random dag, use 'mk_random_dag'.)
+We can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>, with the
+following results:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+
+<p>
+Now let us put some random evidence on all the leaves except the very
+first and very last, and compute the disease posteriors.
+<pre>
+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+</pre>
+Junction tree can be quite slow on large QMR models.
+Fortunately, it is possible to exploit properties of the noisy-OR
+function to speed up exact inference using an algorithm called
+<a href="#quickscore">quickscore</a>, discussed below.
+
+
+
+
+
+<h2><a name="cg_model">Conditional Gaussian models</h2>
+
+A conditional Gaussian model is one in which, conditioned on all the discrete
+nodes, the distribution over the remaining (continuous) nodes is
+multivariate Gaussian. This means we can have arcs from discrete (D)
+to continuous (C) nodes, but not vice versa.
+(We <em>are</em> allowed C->D arcs if the continuous nodes are observed,
+as in the <a href="#mixexp">mixture of experts</a> model,
+since this distribution can be represented with a discrete potential.)
+<p>
+We now give an example of a CG model, from
+the paper "Propagation of Probabilities, Means amd
+Variances in Mixed Graphical Association Models", Steffen Lauritzen,
+JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert
+Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and
+D. J. Spiegelhalter, Springer, 1999.)
+
+<h3>Specifying the graph</h3>
+
+Consider the model of waste emissions from an incinerator plant shown below.
+We follow the standard convention that shaded nodes are observed,
+clear nodes are hidden.
+We also use the non-standard convention that
+square nodes are discrete (tabular) and round nodes are
+Gaussian.
+
+<p>
+<center>
+<IMG SRC="Figures/cg1.gif">
+</center>
+<p>
+
+We can create this model as follows.
+<pre>
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+</pre>
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous
+nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'.
+<p>
+
+
+<h3>Specifying the parameters</h3>
+
+The parameters of the discrete nodes can be specified as follows.
+<pre>
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+</pre>
+
+<p>
+The parameters of the continuous nodes can be specified as follows.
+<pre>
+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+</pre>
+
+
+<h3><a name="cg_infer">Inference</h3>
+
+<!--Let us perform inference in the <a href="#cg_model">waste incinerator example</a>.-->
+First we compute the unconditional marginals.
+<pre>
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+</pre>
+<!--(Of course, we could use <tt>cond_gauss_inf_engine</tt> instead of jtree.)-->
+'marg' is a structure that contains the fields 'mu' and 'Sigma', which
+contain the mean and (co)variance of the marginal on E.
+In this case, they are both scalars.
+Let us check they match the published figures (to 2 decimal places).
+<!--(We can't expect
+more precision than this in general because I have implemented the algorithm of
+Lauritzen (1992), which can be numerically unstable.)-->
+<pre>
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+</pre>
+We can compute the other posteriors similarly.
+Now let us add some evidence.
+<pre>
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+</pre>
+Now we find
+<pre>
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+</pre>
+
+
+We can also compute the joint probability on a set of nodes.
+For example, P(D, Mout | evidence) is a 2D Gaussian:
+<pre>
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+</pre>
+The mean is
+<pre>
+marg.mu
+ans =
+    3.6077
+    4.1077
+</pre>
+and the covariance matrix is
+<pre>
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+</pre>
+It is easy to visualize this posterior using standard Matlab plotting
+functions, e.g.,
+<pre>
+gaussplot2d(marg.mu, marg.Sigma);
+</pre>
+produces the following picture.
+
+<p>
+<center>
+<IMG SRC="Figures/gaussplot.png">
+</center>
+<p>
+
+
+The T field indicates that the mixing weight of this Gaussian
+component is 1.0.
+If the joint contains discrete and continuous variables, the result
+will be a mixture of Gaussians, e.g.,
+<pre>
+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+</pre>
+The interpretation is
+Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ].
+In this case, E is a scalar, so i=j=1; k specifies the mixture component.
+<p>
+We saw in the sprinkler network that BNT sets the effective size of
+observed discrete nodes to 1, since they only have one legal value.
+For continuous nodes, BNT sets their length to 0,
+since they have been reduced to a point.
+For example,
+<pre>
+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+</pre>
+It is simple to post-process the output of marginal_nodes.
+For example, the file BNT/examples/static/cg1 sets the mu term of
+observed nodes to their observed value, and the Sigma term to 0 (since
+observed nodes have no variance).
+
+<p>
+Note that the implemented version of the junction tree is numerically
+unstable when using CG potentials
+(which is why, in the example above, we only required our answers to agree with
+the published ones to 2dp.)
+This is why you might want to use <tt>stab_cond_gauss_inf_engine</tt>,
+implemented by Shan Huang. This is described in
+
+<ul>
+<li> "Stable Local Computation with Conditional Gaussian Distributions",
+S. Lauritzen and F. Jensen, Tech Report R-99-2014,
+Dept. Math. Sciences, Allborg Univ., 1999.
+</ul>
+
+However, even the numerically stable version
+can be computationally intractable if there are many hidden discrete
+nodes, because the number of mixture components grows exponentially e.g., in a
+<a href="usage_dbn.html#lds">switching linear dynamical system</a>.
+In general, one must resort to approximate inference techniques: see
+the discussion on <a href="#engines">inference engines</a> below.
+
+
+<h2><a name="hybrid">Other hybrid models</h2>
+
+When we have C->D arcs, where C is hidden, we need to use
+approximate inference.
+One approach (not implemented in BNT) is described in
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/hybrid_uai99.ps.gz">A
+Variational Approximation for Bayesian Networks with 
+Discrete and Continuous Latent Variables</a>,
+K. Murphy, UAI 99.
+</ul>
+Of course, one can always use <a href="#sampling">sampling</a> methods
+for approximate inference in such models.
+
+
+
+<h1><a name="param_learning">Parameter Learning</h1>
+
+The parameter estimation routines in BNT can be classified into 4
+types, depending on whether the goal is to compute
+a full (Bayesian) posterior over the parameters or just a point
+estimate (e.g., Maximum Likelihood or Maximum A Posteriori),
+and whether all the variables are fully observed or there is missing
+data/ hidden variables (partial observability).
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_params</tt></td>
+ <td><tt>learn_params_em</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>bayes_update_params</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="load_data">Loading data from a file</h2>
+
+To load numeric data from an ASCII text file called 'dat.txt', where each row is a
+case and columns are separated by white-space, such as
+<pre>
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+</pre>
+you can use
+<pre>
+data = load('dat.txt');
+</pre>
+or
+<pre>
+load dat.txt -ascii
+</pre>
+In the latter case, the data is stored in a variable called 'dat' (the
+filename minus the extension).
+Alternatively, suppose the data is stored in a .csv file (has commas
+separating the columns, and contains a header line), such as
+<pre>
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+</pre>
+You can load this using
+<pre>
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+</pre>
+If your file is not in either of these formats, you can either use Perl to convert
+it to this format, or use the Matlab scanf command.
+Type
+<tt>
+help iofun
+</tt>
+for more information on Matlab's file functions.
+<!--
+<p>
+To load data directly from Excel,
+you should buy the 
+<a href="http://www.mathworks.com/products/excellink/">Excel Link</a>.
+To load data directly from a relational database,
+you should buy the 
+<a href="http://www.mathworks.com/products/database">Database
+toolbox</a>.
+-->
+<p>
+BNT learning routines require data to be stored in a cell array.
+data{i,m} is the value of node i in case (example) m, i.e., each
+<em>column</em> is a case.
+If node i is not observed in case m (missing value), set
+data{i,m} = [].
+(Not all the learning routines can cope with such missing values, however.)
+In the special case that all the nodes are observed and are
+scalar-valued (as opposed to vector-valued), the data can be
+stored in a matrix (as opposed to a cell-array).
+<p>
+Suppose, as in the <a href="#mixexp">mixture of experts example</a>,
+that we have 3 nodes in the graph: X(1) is the observed input, X(3) is
+the observed output, and X(2) is a hidden (gating) node. We can
+create the dataset as follows.
+<pre>
+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+</pre>
+Notice how we transposed the data, to convert rows into columns.
+Also, cases{2,m} = [] for all m, since X(2) is always hidden.
+
+
+<h2><a name="mle_complete">Maximum likelihood parameter estimation from complete data</h2>
+
+As an example, let's generate some data from the sprinkler network, randomize the parameters,
+and then try to recover the original model.
+First we create some training data using forwards sampling.
+<pre>
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+</pre>
+samples{j,i} contains the value of the j'th node in case i.
+sample_bnet returns a cell array because, in general, each node might
+be a vector of different length.
+In this case, all nodes are discrete (and hence scalars), so we
+could have used a regular array instead (which can be quicker):
+<pre>
+data = cell2num(samples);
+</pre
+So now data(j,i) = samples{j,i}.
+<p>
+Now we create a network with random parameters.
+(The initial values of bnet2 don't matter in this case, since we can find the
+globally optimal MLE independent of where we start.)
+<pre>
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+</pre>
+Finally, we find the maximum likelihood estimates of the parameters.
+<pre>
+bnet3 = learn_params(bnet2, samples);
+</pre>
+To view the learned parameters, we use a little Matlab hackery.
+<pre>
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+</pre>
+Here are the parameters learned for node 4.
+<pre>
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+</pre>
+So we see that the learned parameters are fairly close to the "true"
+ones, which we display below.
+<pre>
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+</pre>
+We can get better results by using a larger training set, or using
+informative priors (see <a href="#prior">below</a>).
+
+
+
+<h2><a name="prior">Parameter priors</h2>
+
+Currently, only tabular CPDs can have priors on their parameters.
+The conjugate prior for a multinomial is the Dirichlet.
+(For binary random variables, the multinomial is the same as the
+Bernoulli, and the Dirichlet is the same as the Beta.)
+<p>
+The Dirichlet has a simple interpretation in terms of pseudo counts.
+If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the
+training set, where Pa_i are the parents of X_i,
+then the maximum likelihood (ML) estimate is
+T_ijk = N_ijk  / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0.
+To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this
+event was not seen in the training set,
+we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk)
+of times in the past.
+The MAP (maximum a posterior) estimate is then
+<pre>
+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+</pre>
+and is never 0 if all alpha_ijk > 0.
+For example, consider the network A->B, where A is binary and B has 3
+values.
+A uniform prior for B has the form
+<pre>
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+</pre>
+which can be created using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+</pre>
+This prior does not satisfy the likelihood equivalence principle,
+which says that <a href="#markov_equiv">Markov equivalent</a> models
+should have the same marginal likelihood.
+A prior that does satisfy this principle is shown below.
+Heckerman (1995) calls this the
+BDeu prior (likelihood equivalent uniform Bayesian Dirichlet).
+<pre>
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+</pre>
+where we put N/(q*r) in each bin; N is the equivalent sample size,
+r=|A|, q = |B|.
+This can be created as follows
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+</pre>
+Here, 1 is the equivalent sample size, and is the strength of the
+prior.
+You can change this using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+</pre>
+<!--where counts is an array of pseudo-counts of the same size as the
+CPT.-->
+<!--
+<p>
+When you specify a prior, you should set row i of the CPT to the
+normalized version of row i of the pseudo-count matrix, i.e., to the
+expected values of the parameters. This will ensure that computing the
+marginal likelihood sequentially (see <a
+href="#bayes_learn">below</a>) and in batch form gives the same
+results.
+To do this, proceed as follows.
+<pre>
+tabular_CPD(bnet, i, 'prior', counts, 'CPT', mk_stochastic(counts));
+</pre>
+For a non-informative prior, you can just write
+<pre>
+tabular_CPD(bnet, i, 'prior', 'unif', 'CPT', 'unif');
+</pre>
+-->
+
+
+<h2><a name="bayes_learn">(Sequential) Bayesian parameter updating from complete data</h2>
+
+If we use conjugate priors and have fully observed data, we can
+compute the posterior over the parameters in batch form as follows.
+<pre>
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+</pre>
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts,
+and bnet.CPD{i}.CPT is set to the mean of the posterior (the
+normalized counts).
+(Hence if the initial pseudo counts are 0,
+<tt>bayes_update_params</tt> and <tt>learn_params</tt> will give the
+same result.)
+
+
+
+
+<p>
+We can compute the same result sequentially (on-line) as follows.
+<pre>
+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+</pre>
+
+The file <tt>BNT/examples/static/StructLearn/model_select1</tt> has an example of
+sequential model selection which uses the same idea.
+We generate data from the model A->B
+and compute the posterior prob of all 3 dags on 2 nodes:
+ (1) A B,  (2) A <- B , (3) A -> B
+Models 2 and 3 are <a href="#markov_equiv">Markov equivalent</a>, and therefore indistinguishable from 
+observational data alone, so we expect their posteriors to be the same
+(assuming a prior which satisfies likelihood equivalence).
+If we use random parameters, the "true" model only gets a higher posterior after 2000 trials!
+However, if we make B a noisy NOT gate, the true model "wins" after 12
+trials, as shown below (red = model 1, blue/green (superimposed)
+represents models 2/3).
+<p>
+<img src="Figures/model_select.png">
+<p>
+The use of marginal likelihood for model selection is discussed in
+greater detail in the 
+section on <a href="structure_learning">structure learning</a>.
+
+
+
+
+<h2><a name="em">Maximum likelihood parameter estimation with missing values</h2>
+
+Now we consider learning when some values are not observed.
+Let us randomly hide half the values generated from the water
+sprinkler example.
+<pre>
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+</pre>
+samples2{i,l} is the value of node i in training case l, or [] if unobserved.
+<p>
+Now we will compute the MLEs using the EM algorithm.
+We need to use an inference algorithm to compute the expected
+sufficient statistics in the E step; the M (maximization) step is as
+above.
+<pre>
+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+</pre>
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as
+follows:
+<pre>
+plot(LLtrace, 'x-')
+</pre>
+Let's display the results after 10 iterations of EM.
+<pre>
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+</pre>
+We can get improved performance by using one or more of the following
+methods:
+<ul>
+<li> Increasing the size of the training set.
+<li> Decreasing the amount of hidden data.
+<li> Running EM for longer.
+<li> Using informative priors.
+<li> Initialising EM from multiple starting points.
+</ul>
+
+Click <a href="#gaussian">here</a> for a discussion of learning
+Gaussians, which can cause numerical problems.
+
+<h2><a name="tying">Parameter tying</h2>
+
+In networks with repeated structure (e.g., chains and grids), it is
+common to assume that the parameters are the same at every node. This
+is called parameter tying, and reduces the amount of data needed for
+learning.
+<p>
+When we have tied parameters, there is no longer a one-to-one
+correspondence between nodes and CPDs.
+Rather, each CPD species the parameters for a whole equivalence class
+of nodes.
+It is easiest to see this by example.
+Consider the following <a href="usage_dbn.html#hmm">hidden Markov
+model (HMM)</a>
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+<!--
+We can create this graph structure, assuming we have T time-slices,
+as follows.
+(We number the nodes as shown in the figure, but we could equally well
+number the hidden nodes 1:T, and the observed nodes T+1:2T.)
+<pre>
+N = 2*T;
+dag = zeros(N);
+hnodes = 1:2:2*T;
+for i=1:T-1
+  dag(hnodes(i), hnodes(i+1))=1;
+end
+onodes = 2:2:2*T;
+for i=1:T
+  dag(hnodes(i), onodes(i)) = 1;
+end
+</pre>
+<p>
+The hidden nodes are always discrete, and have Q possible values each,
+but the observed nodes can be discrete or continuous, and have O possible values/length.
+<pre>
+if cts_obs
+  dnodes = hnodes;
+else
+  dnodes = 1:N;
+end
+ns = ones(1,N);
+ns(hnodes) = Q;
+ns(onodes) = O;
+</pre>
+-->
+When HMMs are used for semi-infinite processes like speech recognition,
+we assume the transition matrix
+P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant
+or homogenous Markov chain.
+Hence hidden nodes 2, 3, ..., T
+are all in the same equivalence class, say class Hclass.
+Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the
+same for all t, so the observed nodes are all in the same equivalence
+class, say class Oclass.
+Finally, the prior term P(H(1)) is in a class all by itself, say class
+H1class.
+This is illustrated below, where we explicitly represent the
+parameters as random variables (dotted nodes).
+<p>
+<img src="Figures/hmm4_params.gif">
+<p>
+In BNT, we cannot represent parameters as random variables (nodes).
+Instead, we "hide" the
+parameters inside one CPD for each equivalence class,
+and then specify that the other CPDs should share these parameters, as
+follows.
+<pre>
+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+</pre>
+Finally, we define the parameters for each equivalence class:
+<pre>
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+</pre>
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a
+member of e's equivalence class; that is, it is not always the case
+that e == j. You can use bnet.rep_of_eclass(e) to return the
+representative of equivalence class e.
+BNT will look up the parents of j to determine the size
+of the CPT to use. It assumes that this is the same for all members of
+the equivalence class.
+Click <a href="http://www.cs.berkeley.edu/~murphyk/Bayes/param_tieing.html">here</a> for
+a more complex example of parameter tying.
+<p>
+Note:
+Normally one would define an HMM as a
+<a href = "usage_dbn.html">Dynamic Bayes Net</a>
+(see the function BNT/examples/dynamic/mk_chmm.m).
+However, one can define an HMM as a static BN using the function
+BNT/examples/static/Models/mk_hmm_bnet.m.
+
+
+
+<h1><a name="structure_learning">Structure learning</h1>
+
+Update (9/29/03):
+Phillipe LeRay is developing some additional structure learning code
+on top of BNT. Click <a
+href="http://bnt.insa-rouen.fr/ajouts.html">here</a>
+for details.
+
+<p>
+
+There are two very different approaches to structure learning:
+constraint-based and search-and-score.
+In the <a href="#constraint">constraint-based approach</a>,
+we start with a fully connected graph, and remove edges if certain
+conditional independencies are measured in the data.
+This has the disadvantage that repeated independence tests lose
+statistical power.
+<p>
+In the more popular search-and-score approach,
+we perform a search through the space of possible DAGs, and either
+return the best one found (a point estimate), or return a sample of the
+models found (an approximation to the Bayesian posterior).
+<p>
+Unfortunately, the number of DAGs as a function of the number of
+nodes, G(n), is super-exponential in n.
+A closed form formula for G(n) is not known, but the first few values
+are shown below (from Cooper, 1999).
+
+<table>
+<tr>  <th>n</th>    <th align=left>G(n)</th> </tr>
+<tr>  <td>1</td>    <td>1</td> </tr>
+<tr>  <td>2</td>    <td>3</td> </tr>
+<tr>  <td>3</td>    <td>25</td> </tr>
+<tr>   <td>4</td>    <td>543</td> </tr> 
+<tr>   <td>5</td>    <td>29,281</td> </tr>
+<tr>   <td>6</td>    <td>3,781,503</td> </tr>
+<tr>   <td>7</td>    <td>1.1 x 10^9</td> </tr>
+<tr>   <td>8</td>    <td>7.8 x 10^11</td> </tr>
+<tr>   <td>9</td>    <td>1.2 x 10^15</td> </tr>
+<tr>   <td>10</td>    <td>4.2 x 10^18</td> </tr>
+</table>
+
+Since the number of DAGs is super-exponential in the number of nodes,
+we cannot exhaustively search the space, so we either use a local
+search algorithm (e.g., greedy hill climbining, perhaps with multiple
+restarts) or a global search algorithm (e.g., Markov Chain Monte
+Carlo). 
+<p>
+If we know a total ordering on the nodes,
+finding the best structure amounts to picking the best set of parents
+for each node independently.
+This is what the K2 algorithm does.
+If the ordering is unknown, we can search over orderings,
+which is more efficient than searching over DAGs (Koller and Friedman, 2000).
+<p>
+In addition to the search procedure, we must specify the scoring
+function. There are two popular choices. The Bayesian score integrates
+out the parameters, i.e., it is the marginal likelihood of the model.
+The BIC (Bayesian Information Criterion) is defined as
+log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is
+the ML estimate of the parameters, d is the number of parameters, and
+N is the number of data cases.
+The BIC method has the advantage of not requiring a prior.
+<p>
+BIC can be derived as a large sample
+approximation to the marginal likelihood.
+(It is also equal to the Minimum Description Length of a model.)
+However, in practice, the sample size does not need to be very large
+for the approximation to be good.
+For example, in the figure below, we plot the ratio between the log marginal likelihood
+and the BIC score against data-set size; we see that the ratio rapidly
+approaches 1, especially for non-informative priors. 
+(This plot was generated by the file BNT/examples/static/bic1.m. It
+uses the water sprinkler BN with BDeu Dirichlet priors with different
+equivalent sample sizes.)
+
+<p>
+<center>
+<IMG SRC="Figures/bic.png">
+</center>
+<p>
+
+<p>
+As with parameter learning, handling missing data/ hidden variables is
+much harder than the fully observed case.
+The structure learning routines in BNT can therefore be classified into 4
+types, analogously to the parameter learning case.
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_struct_K2</tt>  <br>
+<!--     <tt>learn_struct_hill_climb</tt></td> -->
+ <td><tt>not yet supported</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>learn_struct_mcmc</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="markov_equiv">Markov equivalence</h2>
+
+If two DAGs encode the same conditional independencies, they are
+called Markov equivalent. The set of all DAGs can be paritioned into
+Markov equivalence classes. Graphs within the same class can 
+have
+the direction of some of their arcs reversed without changing any of
+the CI relationships.
+Each class can be represented by a PDAG
+(partially directed acyclic graph) called an essential graph or
+pattern. This specifies which edges must be oriented in a certain
+direction, and which may be reversed.
+
+<p>
+When learning graph structure from observational data,
+the best one can hope to do is to identify the model up to Markov
+equivalence. To distinguish amongst graphs within the same equivalence
+class, one needs interventional data: see the discussion on <a
+href="#active">active learning</a> below.
+
+
+
+<h2><a name="enumerate">Exhaustive search</h2>
+
+The brute-force approach to structure learning is to enumerate all
+possible DAGs, and score each one. This provides a "gold standard"
+with which to compare other algorithms. We can do this as follows.
+<pre>
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+</pre>
+where data(i,m) is the value of node i in case m,
+and ns(i) is the size of node i.
+If the DAGs have a lot of families in common, we can cache the sufficient statistics,
+making this potentially more efficient than scoring the DAGs one at a time.
+(Caching is not currently implemented, however.)
+<p>
+By default, we use the Bayesian scoring metric, and assume CPDs are
+represented by tables with BDeu(1) priors.
+We can override these defaults as follows.
+If we want to use uniform priors, we can say
+<pre>
+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+</pre>
+params{i} is a cell-array, containing optional arguments that are
+passed to the constructor for CPD i.
+<p>
+Now suppose we want to use different node types, e.g., 
+Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both
+these CPDs can support discrete and continuous parents, which is
+necessary since all other nodes will be considered as parents).
+The Bayesian scoring metric currently only works for tabular CPDs, so
+we will use BIC:
+<pre>
+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+</pre>
+In practice, one can't enumerate all possible DAGs for N > 5,
+but one can evaluate any reasonably-sized set of hypotheses in this
+way (e.g., nearest neighbors of your current best guess).
+Think of this as "computer assisted model refinement" as opposed to de
+novo learning.
+
+
+<h2><a name="K2">K2</h2>
+
+The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows.
+Initially each node has no parents. It then adds incrementally that parent whose addition most
+increases the score of the resulting structure. When the addition of no single
+parent can increase the score, it stops adding parents to the node.
+Since we are using a fixed ordering, we do not need to check for
+cycles, and can choose the parents for each node independently.
+<p>
+The original paper used the Bayesian scoring
+metric with tabular CPDs and Dirichlet priors.
+BNT generalizes this to allow any kind of CPD, and either the Bayesian
+scoring metric or BIC, as in the example <a href="#enumerate">above</a>.
+In addition, you can specify
+an optional upper bound on the number of parents for each node.
+The file BNT/examples/static/k2demo1.m gives an example of how to use K2.
+We use the water sprinkler network and sample 100 cases from it as before.
+Then we see how much data it takes to recover the generating structure:
+<pre>
+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+</pre>
+Here are the results.
+<pre>
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+</pre>
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly,
+showing that the prior doesn't matter too much.)
+In general, we cannot hope to recover the "true" generating structure,
+only one that is in its <a href="#markov_equiv">Markov equivalence
+class</a>.
+
+
+<h2><a name="hill_climb">Hill-climbing</h2>
+
+Hill-climbing starts at a specific point in space,
+considers all nearest neighbors, and moves to the neighbor
+that has the highest score; if no neighbors have higher
+score than the current point (i.e., we have reached a local maximum),
+the algorithm stops. One can then restart in another part of the space.
+<p>
+A common definition of "neighbor" is all graphs that can be
+generated from the current graph by adding, deleting or reversing a
+single arc, subject to the acyclicity constraint.
+Other neighborhoods are possible: see
+<a href="http://research.microsoft.com/~dmax/publications/jmlr02.pdf">
+Optimal Structure Identification with Greedy Search</a>, Max
+Chickering, JMLR 2002.
+
+<!--
+Note: This algorithm is currently (Feb '02) being implemented by Qian
+Diao.
+-->
+
+
+<h2><a name="mcmc">MCMC</h2>
+
+We can use a Markov Chain Monte Carlo (MCMC) algorithm called
+Metropolis-Hastings (MH) to search the space of all 
+DAGs.
+The standard proposal distribution is to consider moving to all
+nearest neighbors in the sense defined <a href="#hill_climb">above</a>.
+<p>
+The function can be called
+as in the following example.
+<pre>
+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+</pre>
+We can convert our set of sampled graphs to a histogram
+(empirical posterior over all the DAGs) thus
+<pre>
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+</pre>
+To see how well this performs, let us compute the exact posterior exhaustively.
+<p>
+<pre>
+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+</pre>
+We plot the results below.
+(The data set was 100 samples drawn from a random 4 node bnet; see the
+file BNT/examples/static/mcmc1.)
+<pre>
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+</pre>
+<img src="Figures/mcmc_post.jpg" width="800" height="500">
+<p>
+We can also plot the acceptance ratio versus number of MCMC steps,
+as a crude convergence diagnostic.
+<pre>
+clf
+plot(accept_ratio)
+</pre>
+<img src="Figures/mcmc_accept.jpg" width="800" height="300">
+<p>
+Even though the number of samples needed by MCMC is theoretically
+polynomial (not exponential) in the dimensionality of the search space, in practice it has been
+found that MCMC does not converge in reasonable time for graphs with
+more than about 10 nodes.
+
+
+
+
+<h2><a name="active">Active structure learning</h2>
+
+As was mentioned <a href="#markov_equiv">above</a>,
+one can only learn a DAG up to Markov equivalence, even given infinite data.
+If one is interested in learning the structure of a causal network,
+one needs interventional data.
+(By "intervention" we mean forcing a node to take on a specific value,
+thereby effectively severing its incoming arcs.)
+<p>
+Most of the scoring functions accept an optional argument
+that specifies whether a node was observed to have a certain value, or
+was forced to have that value: we set clamped(i,m)=1 if node i was
+forced in training case m. e.g., see the file
+BNT/examples/static/cooper_yoo.
+<p>
+An interesting question is to decide which interventions to perform
+(c.f., design of experiments). For details, see the following tech
+report
+<ul>
+<li> <a href = "../../Papers/alearn.ps.gz">
+Active learning of causal Bayes net structure</a>, Kevin Murphy, March
+2001.
+</ul>
+
+
+<h2><a name="struct_em">Structural EM</h2>
+
+Computing the Bayesian score when there is partial observability is
+computationally challenging, because the parameter posterior becomes
+multimodal (the hidden nodes induce a mixture distribution).
+One therefore needs to use approximations such as BIC.
+Unfortunately, search algorithms are still expensive, because we need
+to run EM at each step to compute the MLE, which is needed to compute
+the score of each model. An alternative approach is
+to do the local search steps inside of the M step of EM, which is more
+efficient since the data has been "filled in" - this is
+called the structural EM algorithm (Friedman 1997), and provably
+converges to a local maximum of the BIC score.
+<p> 
+Wei Hu has implemented SEM for discrete nodes.
+You can download his package from
+<a href="../SEM.zip">here</a>.
+Please address all questions about this code to
+wei.hu@intel.com.
+See also <a href="#phl">Phl's implementation of SEM</a>.
+
+<!--
+<h2><a name="reveal">REVEAL algorithm</h2>
+
+A simple way to learn the structure of a fully observed, discrete,
+factored DBN from a time series is described <a
+href="usage_dbn.html#struct_learn">here</a>.
+-->
+
+
+<h2><a name="graphdraw">Visualizing the graph</h2>
+
+You can visualize an arbitrary graph (such as one learned using the
+structure learning routines) with Matlab code contributed by
+<a href="http://www.mbfys.kun.nl/~cemgil/matlab/layout.html">Ali
+Taylan Cemgil</a>
+from the University of Nijmegen.
+For static BNs, call it as follows:
+<pre>
+draw_graph(bnet.dag);
+</pre>
+For example, this is the output produced on a
+<a href="#qmr">random QMR-like model</a>:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+<p>
+If you install the excellent <a
+href="http://www.research.att.com/sw/tools/graphviz">graphhviz</a>, an
+open-source graph visualization package from AT&T,
+you can create a much better visualization as follows
+<pre>
+graph_to_dot(bnet.dag)
+</pre>
+This works by converting the adjacency matrix to a file suitable
+for input to graphviz (using the dot format),
+then converting the output of graphviz to postscript, and displaying the results using
+ghostview.
+You can do each of these steps separately for more control, as shown
+below.
+<pre>
+graph_to_dot(bnet.dag, 'filename', 'foo.dot');
+dot -Tps foo.dot -o foo.ps
+ghostview foo.ps &
+</pre>
+
+<h2><a name = "constraint">Constraint-based methods</h2>
+
+The IC algorithm (Pearl and Verma, 1991),
+and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993),
+computes many conditional independence tests,
+and combines these constraints into a
+PDAG to represent the whole
+<a href="#markov_equiv">Markov equivalence class</a>.
+<p>
+IC*/FCI extend IC/PC to handle latent variables: see <a href="#ic_star">below</a>.
+(IC stands for inductive causation; PC stands for Peter and Clark,
+the first names of Spirtes and Glymour; FCI stands for fast causal
+inference.
+What we, following Pearl (2000), call IC* was called
+IC in the original Pearl and Verma paper.)
+For details, see
+<ul>
+<li>
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Causation,
+Prediction, and Search</a>, Spirtes, Glymour and 
+Scheines (SGS), 2001 (2nd edition), MIT Press.
+<li> 
+<a href="http://bayes.cs.ucla.edu/BOOK-2K/index.html">Causality: Models, Reasoning and Inference</a>, J. Pearl, 
+2000, Cambridge University Press.
+</ul>
+
+<p>
+
+The PC algorithm takes as arguments a function f, the number of nodes N,
+the maximum fan in K, and additional arguments A which are passed to f.
+The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0
+otherwise.
+For example, suppose we cheat by
+passing in a CI "oracle" which has access to the true DAG; the oracle
+tests for d-separation in this DAG, i.e.,
+f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows.
+<pre>
+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+</pre>
+pdag(i,j) = -1 if there is definitely an i->j arc,
+and pdag(i,j) = 1 if there is either an i->j or and i<-j arc.
+<p>
+Applied to the sprinkler network, this returns
+<pre>
+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+</pre>
+So as expected, we see that the V-structure at the W node is uniquely identified,
+but the other arcs have ambiguous orientation.
+<p>
+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS
+book.
+This example concerns the female orgasm.
+We are given a correlation matrix C between 7 measured factors (such
+as subjective experiences of coital and masturbatory experiences),
+derived from 281 samples, and want to learn a causal model of the
+data. We will not discuss the merits of this type of work here, but
+merely show how to reproduce the results in the SGS book.
+Their program,
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Tetrad</a>,
+makes use of the Fisher Z-test for conditional
+independence, so we do the same:
+<pre>
+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+</pre>
+In this case, the CI test is
+<pre>
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+</pre>
+The results match those of Fig 12a of SGS apart from two edge
+differences; presumably this is due to rounding error (although it
+could be a bug, either in BNT or in Tetrad).
+This example can be found in the file BNT/examples/static/pc2.m.
+
+<p>
+
+The IC* algorithm (Pearl and Verma, 1991),
+and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993),
+are like the IC/PC algorithm, except that they can detect the presence
+of latent variables.
+See the file <tt>learn_struct_pdag_ic_star</tt> written by Tamar
+Kushnir. The output is a matrix P, defined as follows
+(see Pearl (2000), p52 for details):
+<pre>
+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+</pre>
+
+
+<h2><a name="phl">Philippe Leray's structure learning package</h2>
+
+Philippe Leray has written a 
+<a href="http://bnt.insa-rouen.fr/ajouts.html">
+structure learning package</a> that uses BNT.
+
+It currently (Juen 2003) has the following features:
+<ul>
+<li>PC with Chi2 statistical test 
+<li>             MWST : Maximum weighted Spanning Tree 
+<li>             Hill Climbing 
+<li>             Greedy Search 
+<li>             Structural EM 
+<li>             hist_ic : optimal Histogram based on IC information criterion 
+<li>             cpdag_to_dag 
+<li>             dag_to_cpdag 
+<li>             ... 
+</ul>
+
+
+</a>
+
+
+<!--
+<h2><a name="read_learning">Further reading on learning</h2>
+
+I recommend the following tutorials for more details on learning.
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/intel.ps.gz">My short
+tutorial</a> on graphical models, which contains an overview of learning.
+
+<li> 
+<A HREF="ftp://ftp.research.microsoft.com/pub/tr/TR-95-06.PS">
+A tutorial on learning with Bayesian networks</a>, D. Heckerman,
+Microsoft Research Tech Report, 1995.
+
+<li> <A HREF="http://www-cad.eecs.berkeley.edu/~wray/Mirror/lwgmja">
+Operations for Learning with Graphical Models</a>,
+W. L. Buntine, JAIR'94, 159--225.
+</ul>
+<p>
+-->
+
+
+
+
+
+<h1><a name="engines">Inference engines</h1>
+
+Up until now, we have used the junction tree algorithm for inference.
+However, sometimes this is too slow, or not even applicable.
+In general, there are many inference algorithms each of which make
+different tradeoffs between speed, accuracy, complexity and
+generality. Furthermore, there might be many implementations of the
+same algorithm; for instance, a general purpose, readable version,
+and a highly-optimized, specialized one.
+To cope with this variety, we treat each inference algorithm as an
+object, which we call an inference engine.
+
+<p>
+An inference engine is an object that contains a bnet and supports the
+'enter_evidence' and 'marginal_nodes' methods.  The engine constructor
+takes the bnet as argument and may do some model-specific processing.
+When 'enter_evidence' is called, the engine may do some
+evidence-specific processing.  Finally, when 'marginal_nodes' is
+called, the engine may do some query-specific processing.
+
+<p>
+The amount of work done when each stage is specified -- structure,
+parameters, evidence, and query -- depends on the engine.  The cost of
+work done early in this sequence can be amortized.  On the other hand,
+one can make better optimizations if one waits until later in the
+sequence.
+For example, the parameters might imply
+conditional indpendencies that are not evident in the graph structure,
+but can nevertheless be exploited; the evidence indicates which nodes
+are observed and hence can effectively be disconnected from the
+graph; and the query might indicate that large parts of the network
+are d-separated from the query nodes.  (Since it is not the actual
+<em>values</em> of the evidence that matters, just which nodes are observed,
+many engines allow you to specify which nodes will be observed when they are constructed,
+i.e., before calling 'enter_evidence'. Some engines can still cope if
+the actual pattern of evidence is different, e.g., if there is missing
+data.)
+<p>
+
+Although being maximally lazy (i.e., only doing work when a query is
+issued) may seem desirable,
+this is not always the most efficient.
+For example,
+when learning using EM, we need to call marginal_nodes N times, where N is the
+number of nodes. <a href="varelim">Variable elimination</a> would end
+up repeating a lot of work
+each time marginal_nodes is called, making it inefficient for
+learning. The junction tree algorithm, by contrast, uses dynamic
+programming to avoid this redundant computation --- it calculates all
+marginals in two passes during 'enter_evidence', so calling
+'marginal_nodes' takes constant time.
+<p>
+We will discuss some of the inference algorithms implemented in BNT
+below, and finish with a <a href="#engine_summary">summary</a> of all
+of them.
+
+
+
+
+
+
+
+<h2><a name="varelim">Variable elimination</h2>
+
+The variable elimination algorithm, also known as bucket elimination
+or peeling, is one of the simplest inference algorithms.
+The basic idea is to "push sums inside of products"; this is explained
+in more detail
+<a
+href="http://HTTP.CS.Berkeley.EDU/~murphyk/Bayes/bayes.html#infer">here</a>. 
+<p>
+The principle of distributing sums over products can be generalized
+greatly to apply to any commutative semiring.
+This forms the basis of many common algorithms, such as Viterbi
+decoding and the Fast Fourier Transform. For details, see
+
+<ul>
+<li> R. McEliece and S. M. Aji, 2000.
+<!--<a href="http://www.systems.caltech.edu/EE/Faculty/rjm/papers/GDL.ps">-->
+<a href="GDL.pdf">
+The Generalized Distributive Law</a>,
+IEEE Trans. Inform. Theory, vol. 46, no. 2 (March 2000),
+pp. 325--343. 
+
+
+<li>
+F. R. Kschischang, B. J. Frey and H.-A. Loeliger, 2001.
+<a href="http://www.cs.toronto.edu/~frey/papers/fgspa.abs.html">
+Factor graphs and the sum-product algorithm</a>
+IEEE Transactions on Information Theory, February, 2001.
+
+</ul>
+
+<p>
+Choosing an order in which to sum out the variables so as to minimize
+computational cost is known to be NP-hard.
+The implementation of this algorithm in
+<tt>var_elim_inf_engine</tt> makes no attempt to optimize this
+ordering (in contrast, say, to <tt>jtree_inf_engine</tt>, which uses a
+greedy search procedure to find a good ordering).
+<p>
+Note: unlike most algorithms, var_elim does all its computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+
+
+<h2><a name="global">Global inference methods</h2>
+
+The simplest inference algorithm of all is to explicitely construct
+the joint distribution over all the nodes, and then to marginalize it.
+This is implemented in <tt>global_joint_inf_engine</tt>.
+Since the size of the joint is exponential in the
+number of discrete (hidden) nodes, this is not a very practical algorithm.
+It is included merely for pedagogical and debugging purposes.
+<p>
+Three specialized versions of this algorithm have also been implemented,
+corresponding to the cases where all the nodes are discrete (D), all
+are Gaussian (G), and some are discrete and some Gaussian (CG).
+They are called <tt>enumerative_inf_engine</tt>,
+<tt>gaussian_inf_engine</tt>,
+and <tt>cond_gauss_inf_engine</tt> respectively.
+<p>
+Note: unlike most algorithms, these global inference algorithms do all their computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+<h2><a name="quickscore">Quickscore</h2>
+
+The junction tree algorithm is quite slow on the <a href="#qmr">QMR</a> network,
+since the cliques are so big.
+One simple trick we can use is to notice that hidden leaves do not
+affect the posteriors on the roots, and hence do not need to be
+included in the network.
+A second trick is to notice that the negative findings can be
+"absorbed" into the prior:
+see the file
+BNT/examples/static/mk_minimal_qmr_bnet for details.
+<p>
+
+A much more significant speedup is obtained by exploiting special
+properties of the noisy-or node, as done by the quickscore
+algorithm. For details, see
+<ul>
+<li> Heckerman, "A tractable inference algorithm for diagnosing multiple diseases", UAI 89.
+<li> Rish and Dechter, "On the impact of causal independence", UCI
+tech report, 1998.
+</ul>
+
+This has been implemented in BNT as a special-purpose inference
+engine, which can be created and used as follows:
+<pre>
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+</pre>
+
+
+<h2><a name="belprop">Belief propagation</h2>
+
+Even using quickscore, exact inference takes time that is exponential
+in the number of positive findings.
+Hence for large networks we need to resort to approximate inference techniques.
+See for example
+<ul>
+<li> T. Jaakkola and M. Jordan, "Variational probabilistic inference and the
+QMR-DT network", JAIR 10, 1999.
+
+<li> K. Murphy, Y. Weiss and M. Jordan, "Loopy belief propagation for approximate inference: an empirical study",
+   UAI 99.
+</ul>
+The latter approximation
+entails applying Pearl's belief propagation algorithm to a model even
+if it has loops (hence the name loopy belief propagation).
+Pearl's algorithm, implemented as <tt>pearl_inf_engine</tt>, gives
+exact results when applied to singly-connected graphs
+(a.k.a. polytrees, since
+the underlying undirected topology is a tree, but a node may have
+multiple parents).
+To apply this algorithm to a graph with loops, 
+use <tt>pearl_inf_engine</tt>.
+This can use a centralized or distributed message passing protocol.
+You can use it as in the following example.
+<pre>
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+</pre>
+We found that this algorithm often converges, and when it does, often
+is very accurate, but it depends on the precise setting of the
+parameter values of the network.
+(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.)
+Understanding when and why belief propagation converges/ works
+is a topic of ongoing research.
+<p>
+<tt>pearl_inf_engine</tt> can exploit special structure in noisy-or
+and gmux nodes to compute messages efficiently.
+<p>
+<tt>belprop_inf_engine</tt> is like pearl, but uses potentials to
+represent messages. Hence this is slower.
+<p>
+<tt>belprop_fg_inf_engine</tt> is like belprop,
+but is designed for factor graphs.
+
+
+
+<h2><a name="sampling">Sampling</h2>
+
+BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms:
+<ul>
+<li> <tt>likelihood_weighting_inf_engine</tt> which does importance
+sampling and can handle any node type.
+<li> <tt>gibbs_sampling_inf_engine</tt>, written by Bhaskara Marthi.
+Currently this can only handle tabular CPDs.
+For a much faster and more powerful Gibbs sampling program, see
+<a href="http://www.mrc-bsu.cam.ac.uk/bugs">BUGS</a>.
+</ul>
+Note: To generate samples from a network (which is not the same as inference!),
+use <tt>sample_bnet</tt>.
+
+
+
+<h2><a name="engine_summary">Summary of inference engines</h2>
+
+
+The inference engines differ in many ways. Here are
+some of the major "axes":
+<ul>
+<li> Works for all topologies or makes restrictions? 
+<li> Works for all node types or makes restrictions?
+<li> Exact or approximate inference?
+</ul>
+
+<p>
+In terms of topology, most engines handle any kind of DAG.
+<tt>belprop_fg</tt> does approximate inference on factor graphs (FG), which
+can be used to represent directed, undirected, and mixed (chain)
+graphs.
+(In the future, we plan to support exact inference on chain graphs.)
+<tt>quickscore</tt> only works on QMR-like models.
+<p>
+In terms of node types: algorithms that use potentials can handle
+discrete (D), Gaussian (G) or conditional Gaussian (CG) models.
+Sampling algorithms can essentially handle any kind of node (distribution).
+Other algorithms make more restrictive assumptions in exchange for
+speed.
+<p>
+Finally, most algorithms are designed to give the exact answer.
+The belief propagation algorithms are exact if applied to trees, and
+in some other cases.
+Sampling is considered approximate, even though, in the limit of an
+infinite number of samples, it gives the exact answer.
+
+<p>
+
+Here is a summary of the properties 
+of all the engines in BNT which work on static networks.
+<p>
+<table>
+<table border units = pixels><tr>
+<td align=left width=0>Name
+<td align=left width=0>Exact?
+<td align=left width=0>Node type?
+<td align=left width=0>topology
+<tr>
+<tr>
+<td align=left> belprop
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> belprop_fg
+<td align=left> approx
+<td align=left> D
+<td align=left> factor graph
+<tr>
+<td align=left> cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> enumerative
+<td align=left> exact
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> gaussian
+<td align=left> exact
+<td align=left> G
+<td align=left> DAG
+<tr>
+<td align=left> gibbs
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> global_joint
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+<tr>
+<td align=left> jtree
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+b<tr>
+<td align=left> likelihood_weighting
+<td align=left> approx
+<td align=left> any
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> approx
+<td align=left> D,G
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> exact
+<td align=left> D,G
+<td align=left> polytree
+<tr>
+<td align=left> quickscore
+<td align=left> exact
+<td align=left> noisy-or
+<td align=left> QMR
+<tr>
+<td align=left> stab_cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> var_elim
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+</table>
+
+
+
+<h1><a name="influence">Influence diagrams/ decision making</h1>
+
+BNT implements an exact algorithm for solving LIMIDs (limited memory
+influence diagrams), described in
+<ul>
+<li> S. L. Lauritzen and D. Nilsson.
+<a href="http://www.math.auc.dk/~steffen/papers/limids.pdf">
+Representing and solving decision problems with limited
+information</a>
+Management Science, 47, 1238 - 1251. September 2001.
+</ul>
+LIMIDs explicitely show all information arcs, rather than implicitely
+assuming no forgetting. This allows them to model forgetful
+controllers.
+<p>
+See the examples in <tt>BNT/examples/limids</tt> for details.
+
+
+
+
+<h1>DBNs, HMMs, Kalman filters and all that</h1>
+
+Click <a href="usage_dbn.html">here</a> for documentation about how to
+use BNT for dynamical systems and sequence data.
+
+
+</BODY>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/usage_cropped.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3232 @@
+<HEAD>
+<TITLE>How to use the Bayes Net Toolbox</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+<h1>How to use the Bayes Net Toolbox</h1>
+
+This documentation was last updated on 13 November 2002.
+<br>
+Click <a href="changelog.html">here</a> for a list of changes made to
+BNT.
+<br>
+Click 
+<a href="http://bnt.insa-rouen.fr/">here</a>
+for a French version of this documentation (which might not
+be up-to-date).
+
+
+<p>
+
+<ul>
+<li> <a href="#install">Installation</a>
+<ul>
+<li> <a href="#installM">Installing the Matlab code</a>
+<li> <a href="#installC">Installing the C code</a>
+<li> <a href="../matlab_tips.html">Useful Matlab tips</a>.
+</ul>
+
+<li> <a href="#basics">Creating your first Bayes net</a>
+  <ul>
+  <li> <a href="#basics">Creating a model by hand</a>
+  <li> <a href="#file">Loading a model from a file</a>
+  <li> <a href="http://bnt.insa-rouen.fr/ajouts.html">Creating a model using a GUI</a>
+  </ul>
+
+<li> <a href="#inference">Inference</a>
+  <ul>
+  <li> <a href="#marginal">Computing marginal distributions</a>
+  <li> <a href="#joint">Computing joint distributions</a>
+  <li> <a href="#soft">Soft/virtual evidence</a>
+  <li> <a href="#mpe">Most probable explanation</a>
+  </ul>
+
+<li> <a href="#cpd">Conditional Probability Distributions</a>
+  <ul>
+  <li> <a href="#tabular">Tabular (multinomial) nodes</a>
+  <li> <a href="#noisyor">Noisy-or nodes</a>
+  <li> <a href="#deterministic">Other (noisy) deterministic nodes</a>
+  <li> <a href="#softmax">Softmax (multinomial logit) nodes</a>
+  <li> <a href="#mlp">Neural network nodes</a>
+  <li> <a href="#root">Root nodes</a>
+  <li> <a href="#gaussian">Gaussian nodes</a>
+  <li> <a href="#glm">Generalized linear model nodes</a>
+  <li> <a href="#dtree">Classification/regression tree nodes</a>
+  <li> <a href="#nongauss">Other continuous distributions</a>
+  <li> <a href="#cpd_summary">Summary of CPD types</a>
+  </ul>
+
+<li> <a href="#examples">Example models</a>
+  <ul>
+  <li> <a
+  href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">
+Gaussian mixture models</a>
+  <li> <a href="#pca">PCA, ICA, and all that</a>
+  <li> <a href="#mixep">Mixtures of experts</a>
+  <li> <a href="#hme">Hierarchical mixtures of experts</a>
+  <li> <a href="#qmr">QMR</a>
+  <li> <a href="#cg_model">Conditional Gaussian models</a>
+  <li> <a href="#hybrid">Other hybrid models</a>
+  </ul>
+
+<li> <a href="#param_learning">Parameter learning</a>
+  <ul>
+  <li> <a href="#load_data">Loading data from a file</a>
+  <li> <a href="#mle_complete">Maximum likelihood parameter estimation from complete data</a>
+  <li> <a href="#prior">Parameter priors</a>
+  <li> <a href="#bayes_learn">(Sequential) Bayesian parameter updating from complete data</a>
+  <li> <a href="#em">Maximum likelihood parameter estimation with  missing values (EM)</a>
+  <li> <a href="#tying">Parameter tying</a>
+  </ul>
+
+<li> <a href="#structure_learning">Structure learning</a>
+  <ul>
+  <li> <a href="#enumerate">Exhaustive search</a>
+  <li> <a href="#K2">K2</a>
+  <li> <a href="#hill_climb">Hill-climbing</a>
+  <li> <a href="#mcmc">MCMC</a>
+  <li> <a href="#active">Active learning</a>
+  <li> <a href="#struct_em">Structural EM</a>
+  <li> <a href="#graphdraw">Visualizing the learned graph  structure</a>
+  <li> <a href="#constraint">Constraint-based methods</a>
+  </ul>
+
+
+<li> <a href="#engines">Inference engines</a>
+  <ul>
+  <li> <a href="#jtree">Junction tree</a>
+  <li> <a href="#varelim">Variable elimination</a>
+  <li> <a href="#global">Global inference methods</a>
+  <li> <a href="#quickscore">Quickscore</a>
+  <li> <a href="#belprop">Belief propagation</a>
+  <li> <a href="#sampling">Sampling (Monte Carlo)</a>
+  <li> <a href="#engine_summary">Summary of inference engines</a>
+  </ul>
+
+
+<li> <a href="#influence">Influence diagrams/ decision making</a>
+
+
+<li> <a href="usage_dbn.html">DBNs, HMMs, Kalman filters and all that</a>
+</ul>
+
+</ul>
+
+
+
+
+<h1><a name="install">Installation</h1>
+
+<h2><a name="installM">Installing the Matlab code</h2>
+
+<ul>
+<li> <a href="bnt_download.html">Download</a> the BNT.zip file.
+
+<p>
+<li> Unpack the file. In Unix, type
+<!--"tar xvf BNT.tar".-->
+"unzip FullBNT.zip".
+In Windows, use
+a program like <a href="http://www.winzip.com">Winzip</a>. This will
+create a directory called FullBNT, which contains BNT and other libraries.
+
+<p>
+<li> Read the file <tt>BNT/README</tt> to make sure the date
+matches the one on the top of <a href=bnt.html>the BNT home page</a>.
+If not, you may need to press 'refresh' on your browser, and download
+again, to get the most recent version.
+
+<p>
+<li> <b>Edit the file "BNT/add_BNT_to_path.m"</b> so it contains the correct
+pathname.
+For example, in Windows,
+I download FullBNT.zip into C:\kpmurphy\matlab, and 
+then comment out the second line (with the % character), and uncomment
+the third line, which reads
+<pre>
+BNT_HOME = 'C:\kpmurphy\matlab\FullBNT';
+</pre>
+
+<p>
+<li> Start up Matlab.
+
+<p>
+<li> Type "ver" at the Matlab prompt (">>").
+<b>You need Matlab version 5.2 or newer to run BNT</b>.
+(Versions 5.0 and 5.1 have a memory leak which seems to sometimes
+crash BNT.)
+
+<p>
+<li> Move to the BNT directory.
+For example, in Windows, I type
+<pre>
+>> cd C:\kpmurphy\matlab\FullBNT\BNT
+</pre>
+
+<p>
+<li> Type "add_BNT_to_path".
+This executes the command
+<tt>addpath(genpath(BNT_HOME))</tt>,
+which adds all directories below FullBNT to the matlab path.
+
+<p>
+<li> Type "test_BNT".
+<b>If all goes well, this will just produce a bunch of numbers and pictures.</b>
+It may produce some
+warning messages (which you can ignore), but should not produce any  error messages.
+(The warnings should only be of the form
+"Warning: Maximum number of iterations has been exceeded", and are
+produced by Netlab.)
+
+<p>
+<li> <a href="http://groups.yahoo.com/group/BayesNetToolbox/join">
+Join the BNT email list</a>
+
+</ul>
+
+
+If you are new to Matlab, you might like to check out
+<a href="matlab_tips.html">some useful Matlab tips</a>.
+For instance, this explains how to create a startup file, which can be
+used to set your path variable automatically, so you can avoid having
+to type the above commands every time.
+
+
+
+
+<h2><a name="installC">Installing the C code</h2>
+
+Some BNT functions also have C implementations.
+<b>It is not necessary to install the C code</b>, but it can result in a speedup
+of a factor of 2-5 of certain simple functions.
+To install all the C code, 
+edit installC_BNT.m so it contains the right path,
+then type <tt>installC_BNT</tt>.
+To uninstall all the C code,
+edit uninstallC_BNT.m so it contains the right path,
+then type <tt>uninstallC_BNT</tt>.
+For an up-to-date list of the files which have C implementations, see
+BNT/installC_BNT.m.
+
+<p>
+mex is a script that lets you call C code from Matlab - it does not compile matlab to
+C (see mcc below).
+If your C/C++ compiler  is set up correctly, mex should work out of
+the box. (Matlab 6 now ships with its own minimal C compiler.)
+If not, you might need to type
+<p>
+<tt> mex -setup</tt>
+<p>
+before calling installC.
+<p>
+To make mex call gcc on Windows,
+you must install <a
+href="http://www.mrc-cbu.cam.ac.uk/Imaging/gnumex20.html">gnumex</a>.
+You can use the <a href="http://www.mingw.org/">minimalist GNU for
+Windows</a> version of gcc, or
+the <a href="http://sources.redhat.com/cygwin/">cygwin</a> version.
+<p>
+In general, typing 
+'mex foo.c' from inside Matlab creates a file called
+'foo.mexglx' or 'foo.dll' (the exact file
+extension is system dependent - on Linux it is 'mexglx', on Windows it is '.dll').
+The resulting file will hide the original 'foo.m' (if it existed), i.e., 
+typing 'foo' at the prompt will call the compiled C version.
+To reveal the original matlab version, just delete foo.mexglx (this is
+what uninstallC does).
+<p>
+Sometimes it takes time for Matlab to realize that the file has
+changed from matlab to C or vice versa; try typing 'clear all' or
+restarting Matlab to refresh it.
+To find out which version of a file you are running, type
+'which foo'.
+<p>
+<a href="http://www.mathworks.com/products/compiler">mcc</a>, the
+Matlab to C compiler, is a separate product, 
+and is quite different from mex. It does not yet support
+objects/classes, which is why we can't compile all of BNT to C automatically.
+Also, hand-written C code is usually much
+better than the C code generated by mcc.
+
+
+<p>
+Acknowledgements:
+Although I wrote some of the C code, most of
+the C code (e.g., for jtree and dpot) was written by Wei Hu;
+the triangulation C code was written by Ilya Shpitser.
+
+
+<h1><a name="basics">Creating your first Bayes net</h1>
+
+To define a Bayes net, you must specify the graph structure and then
+the parameters. We look at each in turn, using a simple example
+(adapted from Russell and
+Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall,
+1995, p454).
+
+
+<h2>Graph structure</h2>
+
+
+Consider the following network.
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler.gif">
+</center>
+<p>
+
+<P>
+To specify this directed acyclic graph (dag), we create an adjacency matrix:
+<PRE>
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+</PRE>
+<P>
+We have numbered the nodes as follows:
+Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4.
+<b>The nodes must always be numbered in topological order, i.e.,
+ancestors before descendants.</b>
+For a more complicated graph, this is a little inconvenient: we will
+see how to get around this <a href="usage_dbn.html#bat">below</a>.
+<p>
+<!--
+In Matlab 6, you can use logical arrays instead of double arrays,
+which are 4 times smaller:
+<pre>
+dag = false(N,N);
+dag(C,[R S]) = true;
+...
+</pre>
+--
+<p>
+A preliminary attempt to make a <b>GUI</b>
+has been writte by Philippe LeRay and can be downloaded
+from <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+<p>
+You can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>.
+
+<h2>Creating the Bayes net shell</h2>
+
+In addition to specifying the graph structure,
+we must specify the size and type of each node.
+If a node is discrete, its size is the
+number of possible values
+each node can take on; if a node is continuous,
+it can be a vector, and its size is the length of this vector.
+In this case, we will assume all nodes are discrete and binary.
+<PRE>
+discrete_nodes = 1:N;
+node_sizes = 2*ones(1,N); 
+</pre>
+If the nodes were not binary, you could type e.g., 
+<pre>
+node_sizes = [4 2 3 5];
+</pre>
+meaning that Cloudy has 4 possible values, 
+Sprinkler has 2 possible values, etc.
+Note that these are cardinal values, not ordinal, i.e., 
+they are not ordered in any way, like 'low', 'medium', 'high'.
+<p>
+We are now ready to make the Bayes net:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
+</PRE>
+By default, all nodes are assumed to be discrete, so we can also just
+write
+<pre>
+bnet = mk_bnet(dag, node_sizes);
+</PRE>
+You may also specify which nodes will be observed.
+If you don't know, or if this not fixed in advance,
+just use the empty list (the default).
+<pre>
+onodes = [];
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+</PRE>
+Note that optional arguments are specified using a name/value syntax.
+This is common for many BNT functions.
+In general, to find out more about a function (e.g., which optional
+arguments it takes), please see its
+documentation string by typing
+<pre>
+help mk_bnet
+</pre>
+See also other <a href="matlab_tips.html">useful Matlab tips</a>.
+<p>
+It is possible to associate names with nodes, as follows:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+</pre>
+You can then refer to a node by its name:
+<pre>
+C = bnet.names{'cloudy'}; % bnet.names is an associative array
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+</pre>
+
+
+<h2><a name="cpt">Parameters</h2>
+
+A model consists of the graph structure and the parameters.
+The parameters are represented by CPD objects (CPD = Conditional
+Probability Distribution), which define the probability distribution
+of a node given its parents.
+(We will use the terms "node" and "random variable" interchangeably.)
+The simplest kind of CPD is a table (multi-dimensional array), which
+is suitable when all the nodes are discrete-valued. Note that the discrete
+values are not assumed to be ordered in any way; that is, they
+represent categorical quantities, like male and female, rather than
+ordinal quantities, like low, medium and high.
+(We will discuss CPDs in more detail <a href="#cpd">below</a>.)
+<p>
+Tabular CPDs, also called CPTs (conditional probability tables),
+are stored as multidimensional arrays, where the dimensions
+are arranged in the same order as the nodes, e.g., the CPT for node 4
+(WetGrass) is indexed by Sprinkler (2), Rain (3) and then WetGrass (4) itself.
+Hence the child is always the last dimension.
+If a node has no parents, its CPT is a column vector representing its
+prior.
+Note that in Matlab (unlike C), arrays are indexed
+from 1, and are layed out in memory such that the first index toggles
+fastest, e.g., the CPT for node 4 (WetGrass) is as follows
+<P>
+<P><IMG ALIGN=BOTTOM SRC="Figures/CPTgrass.gif"><P>
+<P>
+where we have used the convention that false==1, true==2.
+We can create this CPT in Matlab as follows
+<PRE>
+CPT = zeros(2,2,2);
+CPT(1,1,1) = 1.0;
+CPT(2,1,1) = 0.1;
+...
+</PRE>
+Here is an easier way:
+<PRE>
+CPT = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], [2 2 2]);
+</PRE>
+In fact, we don't need to reshape the array, since the CPD constructor
+will do that for us. So we can just write
+<pre>
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</pre>
+The other nodes are created similarly (using the old syntax for
+optional parameters)
+<PRE>
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</PRE>
+
+
+<h2><a name="rnd_cpt">Random Parameters</h2>
+
+If we do not specify the CPT, random parameters will be
+created, i.e., each "row" of the CPT will be drawn from the uniform distribution.
+To ensure repeatable results, use
+<pre>
+rand('state', seed);
+randn('state', seed);
+</pre>
+To control the degree of randomness (entropy),
+you can sample each row of the CPT from a Dirichlet(p,p,...) distribution.
+If p << 1, this encourages "deterministic" CPTs (one entry near 1, the rest near 0).
+If p = 1, each entry is drawn from U[0,1].
+If p >> 1, the entries will all be near 1/k, where k is the arity of
+this node, i.e., each row will be nearly uniform.
+You can do this as follows, assuming this node
+is number i, and ns is the node_sizes.
+<pre>
+k = ns(i);
+ps = parents(dag, i);
+psz = prod(ns(ps));
+CPT = sample_dirichlet(p*ones(1,k), psz);
+bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', CPT);
+</pre>
+
+
+<h2><a name="file">Loading a network from a file</h2>
+
+If you already have a Bayes net represented in the XML-based
+<a href="http://www.cs.cmu.edu/afs/cs/user/fgcozman/www/Research/InterchangeFormat/">
+Bayes Net Interchange Format (BNIF)</a> (e.g., downloaded from the 
+<a
+href="http://www.cs.huji.ac.il/labs/compbio/Repository">
+Bayes Net repository</a>),
+you can convert it to BNT format using
+the 
+<a href="http://www.digitas.harvard.edu/~ken/bif2bnt/">BIF-BNT Java
+program</a> written by Ken Shan.
+(This is not necessarily up-to-date.)
+
+
+<h2>Creating a model using a GUI</h2>
+
+Click <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+
+
+
+<h1><a name="inference">Inference</h1>
+
+Having created the BN, we can now use it for inference.
+There are many different algorithms for doing inference in Bayes nets,
+that make different tradeoffs between speed, 
+complexity, generality, and accuracy.
+BNT therefore offers a variety of different inference
+"engines". We will discuss these
+in more detail <a href="#engines">below</a>.
+For now, we will use the junction tree
+engine, which is the mother of all exact inference algorithms.
+This can be created as follows.
+<pre>
+engine = jtree_inf_engine(bnet);
+</pre>
+The other engines have similar constructors, but might take
+additional, algorithm-specific parameters.
+All engines are used in the same way, once they have been created.
+We illustrate this in the following sections.
+
+
+<h2><a name="marginal">Computing marginal distributions</h2>
+
+Suppose we want to compute the probability that the sprinker was on
+given that the grass is wet.
+The evidence consists of the fact that W=2. All the other nodes
+are hidden (unobserved). We can specify this as follows.
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+</pre>
+We use a 1D cell array instead of a vector to
+cope with the fact that nodes can be vectors of different lengths.
+In addition, the value [] can be used
+to denote 'no evidence', instead of having to specify the observation
+pattern as a separate argument.
+(Click <a href="cellarray.html">here</a> for a quick tutorial on cell
+arrays in matlab.)
+<p>
+We are now ready to add the evidence to the engine.
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence);
+</pre>
+The behavior of this function is algorithm-specific, and is discussed
+in more detail <a href="#engines">below</a>.
+In the case of the jtree engine,
+enter_evidence implements a two-pass message-passing scheme.
+The first return argument contains the modified engine, which
+incorporates the evidence. The second return argument contains the
+log-likelihood of the evidence. (Not all engines are capable of
+computing the log-likelihood.)
+<p>
+Finally, we can compute p=P(S=2|W=2) as follows.
+<PRE>
+marg = marginal_nodes(engine, S);
+marg.T
+ans =
+      0.57024
+      0.42976
+p = marg.T(2);
+</PRE>
+We see that p = 0.4298.
+<p>
+Now let us add the evidence that it was raining, and see what
+difference it makes.
+<PRE>
+evidence{R} = 2;
+[engine, loglik] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, S);
+p = marg.T(2);
+</PRE>
+We find that p = P(S=2|W=2,R=2) = 0.1945,
+which is lower than
+before, because the rain can ``explain away'' the
+fact that the grass is wet.
+<p>
+You can plot a marginal distribution over a discrete variable
+as a barchart using the built 'bar' function:
+<pre>
+bar(marg.T)
+</pre>
+This is what it looks like
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler_bar.gif">
+</center>
+<p>
+
+<h2><a name="observed">Observed nodes</h2>
+
+What happens if we ask for the marginal on an observed node, e.g. P(W|W=2)?
+An observed discrete node effectively only has 1 value (the observed
+      one) --- all other values would result in 0 probability.
+For efficiency, BNT treats observed (discrete) nodes as if they were
+      set to 1, as we see below:
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, W);
+m.T
+ans =
+     1
+</pre>
+This can get a little confusing, since we assigned W=2.
+So we can ask BNT to add the evidence back in by passing in an optional argument:
+<pre>
+m = marginal_nodes(engine, W, 1);
+m.T
+ans =
+     0
+     1
+</pre>
+This shows that P(W=1|W=2) = 0 and P(W=2|W=2) = 1.
+
+
+
+<h2><a name="joint">Computing joint distributions</h2>
+
+We can compute the joint probability on a set of nodes as in the
+following example.
+<pre>
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+</pre>
+m is a structure. The 'T' field is a multi-dimensional array (in
+this case, 3-dimensional) that contains the joint probability
+distribution on the specified nodes.
+<pre>
+>> m.T
+ans(:,:,1) =
+    0.2900    0.0410
+    0.0210    0.0009
+ans(:,:,2) =
+         0    0.3690
+    0.1890    0.0891
+</pre>
+We see that P(S=1,R=1,W=2) = 0, since it is impossible for the grass
+to be wet if both the rain and sprinkler are off.
+<p>
+Let us now add some evidence to R.
+<pre>
+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W])
+m = 
+    domain: [2 3 4]
+         T: [2x1x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+    0.0820
+    0.0018
+ans(:,:,2) =
+    0.7380
+    0.1782
+</pre>
+The joint T(i,j,k) = P(S=i,R=j,W=k|evidence)
+should have T(i,1,k) = 0 for all i,k, since R=1 is incompatible
+with the evidence that R=2.
+Instead of creating large tables with many 0s, BNT sets the effective
+size of observed (discrete) nodes to 1, as explained above.
+This is why m.T has size 2x1x2.
+To get a 2x2x2 table, type
+<pre>
+m = marginal_nodes(engine, [S R W], 1)
+m = 
+    domain: [2 3 4]
+         T: [2x2x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+            0        0.082
+            0       0.0018
+ans(:,:,2) =
+            0        0.738
+            0       0.1782
+</pre>
+
+<p>
+Note: It is not always possible to compute the joint on arbitrary
+sets of nodes: it depends on which inference engine you use, as discussed 
+in more detail <a href="#engines">below</a>. 
+
+
+<h2><a name="soft">Soft/virtual evidence</h2>
+
+Sometimes a node is not observed, but we have some distribution over
+its possible values; this is often called "soft" or "virtual"
+evidence.
+One can use this as follows
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence, 'soft', soft_evidence);
+</pre>
+where soft_evidence{i} is either [] (if node i has no soft evidence)
+or is a vector representing the probability distribution over i's
+possible values.
+For example, if we don't know i's exact value, but we know its
+likelihood ratio is 60/40, we can write evidence{i} = [] and
+soft_evidence{i} = [0.6 0.4].
+<p>
+Currently only jtree_inf_engine supports this option.
+It assumes that all hidden nodes, and all nodes for
+which we have soft evidence, are discrete.
+For a longer example, see BNT/examples/static/softev1.m. 
+
+
+<h2><a name="mpe">Most probable explanation</h2>
+
+To compute the most probable explanation (MPE) of the evidence (i.e.,
+the most probable assignment, or a mode of the joint), use
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence);     
+</pre>
+mpe{i} is the most likely value of node i.
+This calls enter_evidence with the 'maximize' flag set to 1, which
+causes the engine to do max-product instead of sum-product.
+The resulting max-marginals are then thresholded.
+If there is more than one maximum probability assignment, we must take 
+    care to break ties in a consistent manner (thresholding the
+    max-marginals may give the wrong result). To force this behavior,
+    type
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence, 1);     
+</pre>
+Note that computing the MPE is someties called abductive reasoning.
+    
+<p>
+You can also use <tt>calc_mpe_bucket</tt> written by Ron Zohar,
+that does a forwards max-product pass, and then a backwards traceback
+pass, which is how Viterbi is traditionally implemented.
+
+
+
+<h1><a name="cpd">Conditional Probability Distributions</h1>
+
+A Conditional Probability Distributions (CPD)
+defines P(X(i) | X(Pa(i))), where X(i) is the i'th node, and X(Pa(i))
+are the parents of node i. There are many ways to represent this
+distribution, which depend in part on whether X(i) and X(Pa(i)) are
+discrete, continuous, or a combination.
+We will discuss various representations below.
+
+
+<h2><a name="tabular">Tabular nodes</h2>
+
+If the CPD is represented as a table (i.e., if it is a multinomial
+distribution), it has a number of parameters that is exponential in
+the number of parents. See the example <a href="#cpt">above</a>.
+
+
+<h2><a name="noisyor">Noisy-or nodes</h2>
+
+A noisy-OR node is like a regular logical OR gate except that
+sometimes the effects of parents that are on get inhibited.
+Let the prob. that parent i gets inhibited be q(i).
+Then a node, C, with 2 parents, A and B, has the following CPD, where
+we use F and T to represent off and on (1 and 2 in BNT).
+<pre>
+A  B  P(C=off)      P(C=on)
+---------------------------
+F  F  1.0           0.0
+T  F  q(A)          1-q(A)
+F  T  q(B)          1-q(B)
+T  T  q(A)q(B)      q-q(A)q(B)
+</pre>
+Thus we see that the causes get inhibited independently.
+It is common to associate a "leak" node with a noisy-or CPD, which is
+like a parent that is always on. This can account for all other unmodelled
+causes which might turn the node on.
+<p>
+The noisy-or distribution is similar to the logistic distribution.
+To see this, let the nodes, S(i), have values in {0,1}, and let q(i,j)
+be the prob. that j inhibits i. Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = 1 - prod_{j} q(i,j)^S(j)
+</pre>
+Now define w(i,j) = -ln q(i,j) and rho(x) = 1-exp(-x). Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = rho(sum_j w(i,j) S(j))
+</pre>
+For a sigmoid node, we have
+<pre>
+Pr(S(i)=1 | parents(S(i))) = sigma(-sum_j w(i,j) S(j))
+</pre>
+where sigma(x) = 1/(1+exp(-x)). Hence they differ in the choice of
+the activation function (although both are monotonically increasing).
+In addition, in the case of a noisy-or, the weights are constrained to be
+positive, since they derive from probabilities q(i,j).
+In both cases, the number of parameters is <em>linear</em> in the
+number of parents, unlike the case of a multinomial distribution,
+where the number of parameters is exponential in the number of parents.
+We will see an example of noisy-OR nodes <a href="#qmr">below</a>.
+
+
+<h2><a name="deterministic">Other (noisy) deterministic nodes</h2>
+
+Deterministic CPDs for discrete random variables can be created using
+the deterministic_CPD class. It is also possible to 'flip' the output
+of the function with some probability, to simulate noise.
+The boolean_CPD class is just a special case of a
+deterministic CPD, where the parents and child are all binary.
+<p>
+Both of these classes are just "syntactic sugar" for the tabular_CPD
+class.
+
+
+
+<h2><a name="softmax">Softmax nodes</h2>
+
+If we have a discrete node with a continuous parent,
+we can define its CPD using a softmax function 
+(also known as the multinomial logit function).
+This acts like a soft thresholding operator, and is defined as follows:
+<pre>
+                    exp(w(:,i)'*x + b(i)) 
+Pr(Q=i | X=x)  =  -----------------------------
+                  sum_j   exp(w(:,j)'*x + b(j))
+
+</pre>
+The parameters of a softmax node, w(:,i) and b(i), i=1..|Q|, have the
+following interpretation: w(:,i)-w(:,j) is the normal vector to the
+decision boundary between classes i and j,
+and b(i)-b(j) is its offset (bias). For example, suppose
+X is a 2-vector, and Q is binary. Then
+<pre>
+w = [1 -1;
+     0 0];
+
+b = [0 0];
+</pre>
+means class 1 are points in the 2D plane with positive x coordinate,
+and class 2 are points in the 2D plane with negative x coordinate.
+If w has large magnitude, the decision boundary is sharp, otherwise it
+is soft.
+In the special case that Q is binary (0/1), the softmax function reduces to the logistic
+(sigmoid) function.
+<p>
+Fitting a softmax function can be done using the iteratively reweighted
+least squares (IRLS) algorithm.
+We use the implementation from
+<a href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+Note that since
+the softmax distribution is not in the exponential family, it does not
+have finite sufficient statistics, and hence we must store all the
+training data in uncompressed form.
+If this takes too much space, one should use online (stochastic) gradient
+descent (not implemented in BNT).
+<p>
+If a softmax node also has discrete parents,
+we use a different set of w/b parameters for each combination of
+parent values, as in the <a href="#gaussian">conditional linear
+Gaussian CPD</a>.
+This feature was implemented by Pierpaolo Brutti.
+He is currently extending it so that discrete parents can be treated
+as if they were continuous, by adding indicator variables to the X
+vector.
+<p>
+We will see an example of softmax nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="mlp">Neural network nodes</h2>
+
+Pierpaolo Brutti has implemented the mlp_CPD class, which uses a multi layer perceptron
+to implement a mapping from continuous parents to discrete children,
+similar to the softmax function.
+(If there are also discrete parents, it creates a mixture of MLPs.)
+It uses code from <a
+href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+This is work in progress.
+
+<h2><a name="root">Root nodes</h2>
+
+A root node has no parents and no parameters; it can be used to model
+an observed, exogeneous input variable, i.e., one which is "outside"
+the model. 
+This is useful for conditional density models.
+We will see an example of root nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="gaussian">Gaussian nodes</h2>
+
+We now consider a distribution suitable for the continuous-valued nodes.
+Suppose the node is called Y, its continuous parents (if any) are
+called X, and its discrete parents (if any) are called Q.
+The distribution on Y is defined as follows:
+<pre>
+- no parents: Y ~ N(mu, Sigma)
+- cts parents : Y|X=x ~ N(mu + W x, Sigma)
+- discrete parents: Y|Q=i ~ N(mu(:,i), Sigma(:,:,i))
+- cts and discrete parents: Y|X=x,Q=i ~ N(mu(:,i) + W(:,:,i) * x, Sigma(:,:,i))
+</pre>
+where N(mu, Sigma) denotes a Normal distribution with mean mu and
+covariance Sigma. Let |X|, |Y| and |Q| denote the sizes of X, Y and Q
+respectively.
+If there are no discrete parents, |Q|=1; if there is
+more than one, then |Q| = a vector of the sizes of each discrete parent.
+If there are no continuous parents, |X|=0; if there is more than one,
+then |X| = the sum of their sizes.
+Then mu is a |Y|*|Q| vector, Sigma is a |Y|*|Y|*|Q| positive
+semi-definite matrix, and W is a |Y|*|X|*|Q| regression (weight)
+matrix.
+<p>
+We can create a Gaussian node with random parameters as follows.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i);
+</pre>
+We can specify the value of one or more of the parameters as in the
+following example, in which |Y|=2, and |Q|=1.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', [0; 0], 'weights', randn(Y,X), 'cov', eye(Y));
+</pre>
+<p>
+We will see an example of conditional linear Gaussian nodes <a
+href="#cg_model">below</a>. 
+<p>
+When fitting a Gaussian using EM, you might encounter some numerical
+problems. See <a
+href="http://www.ai.mit.edu/~murphyk/Software/HMM/hmm.html#loglikpos">here</a>
+for a discussion of this in the context of HMMs.
+(Note: BNT does not currently support spherical covariances, although it
+would be easy to add, since  KPMstats/clg_Mstep supports this option;
+you would just need to modify gaussian_CPD/update_ess to accumulate
+weighted inner products.)
+
+
+<h2><a name="nongauss">Other continuous distributions</h2>
+
+Currently BNT does not support any CPDs for continuous nodes other
+than the Gaussian.
+However, you can use a mixture of Gaussians to
+approximate other continuous distributions. We will see some an example
+of this with the IFA model <a href="#pca">below</a>.
+
+
+<h2><a name="glm">Generalized linear model nodes</h2>
+
+In the future, we may incorporate some of the functionality of
+<a href =
+"http://www.sci.usq.edu.au/staff/dunn/glmlab/glmlab.html">glmlab</a>
+into BNT.
+
+
+<h2><a name="dtree">Classification/regression tree nodes</h2>
+
+We plan to add classification and regression trees to define CPDs for
+discrete and continuous nodes, respectively.
+Trees have many advantages: they are easy to interpret, they can do
+feature selection, they can
+handle discrete and continuous inputs, they do not make strong
+assumptions about the form of the distribution, the number of
+parameters can grow in a data-dependent way (i.e., they are
+semi-parametric), they can handle missing data, etc.
+However, they are not yet implemented.
+<!--
+Yimin Zhang is currently (Feb '02) implementing this.
+-->
+
+
+<h2><a name="cpd_summary">Summary of CPD types</h2>
+
+We list all the different types of CPDs supported by BNT.
+For each CPD, we specify if the child and parents can be discrete (D) or
+continuous (C) (Binary (B) nodes are a special case).
+We also specify which methods each class supports.
+If a method is inherited, the name of the  parent class is mentioned.
+If a parent class calls a child method, this is mentioned.
+<p>
+The <tt>CPD_to_CPT</tt> method converts a CPD to a table; this
+requires that the child and all parents are discrete.
+The CPT might be exponentially big...
+<tt>convert_to_table</tt> evaluates a CPD with evidence, and
+represents the the resulting potential as an array.
+This requires that the child is discrete, and any continuous parents
+are observed.
+<tt>convert_to_pot</tt> evaluates a CPD with evidence, and
+represents the resulting potential as a dpot, gpot, cgpot or upot, as
+requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u =
+utility).
+
+<p>
+When we sample a node, all the parents are observed.
+When we compute the (log) probability of a node, all the parents and
+the child are observed.
+<p>
+We also specify if the parameters are learnable.
+For learning with EM, we require
+the methods <tt>reset_ess</tt>, <tt>update_ess</tt> and
+<tt>maximize_params</tt>. 
+For learning from fully observed data, we require
+the method <tt>learn_params</tt>.
+By default, all classes inherit this from generic_CPD, which simply
+calls <tt>update_ess</tt> N times, once for each data case, followed
+by <tt>maximize_params</tt>, i.e., it is like EM, without the E step.
+Some classes implement a batch formula, which is quicker.
+<p>
+Bayesian learning means computing a posterior over the parameters
+given fully observed data.
+<p>
+Pearl means we implement the methods <tt>compute_pi</tt> and
+<tt>compute_lambda_msg</tt>, used by
+<tt>pearl_inf_engine</tt>, which runs on directed graphs.
+<tt>belprop_inf_engine</tt> only needs <tt>convert_to_pot</tt>.H
+The pearl methods can exploit special properties of the CPDs for
+computing the messages efficiently, whereas belprop does not.
+<p>
+The only method implemented by generic_CPD is <tt>adjustable_CPD</tt>,
+which is not shown, since it is not very interesting.
+
+
+<p>
+
+
+<table>
+<table border units = pixels><tr>
+<td align=center>Name
+<td align=center>Child
+<td align=center>Parents
+<td align=center>Comments
+<td align=center>CPD_to_CPT
+<td align=center>conv_to_table
+<td align=center>conv_to_pot
+<td align=center>sample
+<td align=center>prob
+<td align=center>learn
+<td align=center>Bayes
+<td align=center>Pearl
+
+
+<tr>
+<!-- Name--><td>
+<!-- Child--><td>
+<!-- Parents--><td>
+<!-- Comments--><td>
+<!-- CPD_to_CPT--><td>
+<!-- conv_to_table--><td>
+<!-- conv_to_pot--><td>
+<!-- sample--><td>
+<!-- prob--><td>
+<!-- learn--><td>
+<!-- Bayes--><td>
+<!-- Pearl--><td>
+
+<tr>
+<!-- Name--><td>boolean
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>deterministic
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>Discrete
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Calls CPD_to_CPT
+<!-- conv_to_pot--><td>Calls conv_to_table
+<!-- sample--><td>Calls conv_to_table
+<!-- prob--><td>Calls conv_to_table
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>Gaussian
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>gmux
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multiplexer
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>MLP
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multi layer perceptron
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>noisy-or
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>root
+<!-- Child--><td>C/D
+<!-- Parents--><td>none
+<!-- Comments--><td>no params
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>softmax
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>generic
+<!-- Child--><td>C/D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>N
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>Tabular
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>Y
+<!-- Pearl--><td>Y
+
+</table>
+
+
+
+<h1><a name="examples">Example models</h1>
+
+
+<h2>Gaussian mixture models</h2>
+
+Richard W. DeVaul has made a detailed tutorial on how to fit mixtures
+of Gaussians using BNT. Available
+<a href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">here</a>.
+
+
+<h2><a name="pca">PCA, ICA, and all that </h2>
+
+In Figure (a) below, we show how Factor Analysis can be thought of as a
+graphical model. Here, X has an N(0,I) prior, and
+Y|X=x ~ N(mu + Wx, Psi),
+where Psi is diagonal and W is called the "factor loading matrix".
+Since the noise on both X and Y is diagonal, the components of these
+vectors are uncorrelated, and hence can be represented as individual
+scalar nodes, as we show in (b).
+(This is useful if parts of the observations on the Y vector are occasionally missing.)
+We usually take k=|X| << |Y|=D, so the model tries to explain
+many observations using a low-dimensional subspace.
+
+
+<center>
+<table>
+<tr>
+<td><img src="Figures/fa.gif">
+<td><img src="Figures/fa_scalar.gif">
+<td><img src="Figures/mfa.gif">
+<td><img src="Figures/ifa.gif">
+<tr>
+<td align=center> (a)
+<td align=center> (b)
+<td align=center> (c)
+<td align=center> (d)
+</table>
+</center>
+
+<p>
+We can create this model in BNT as follows.
+<pre>
+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+</pre>
+
+The root node is clamped to the N(0,I) distribution, so that we will
+not update these parameters during learning.
+The mean of the leaf node is clamped to 0,
+since we assume the data has been centered (had its mean subtracted
+off); this is just for simplicity.
+Finally, the covariance of the leaf node is constrained to be
+diagonal. W0 and Psi0 are the initial parameter guesses.
+
+<p>
+We can fit this model (i.e., estimate its parameters in a maximum
+likelihood (ML) sense) using EM, as we
+explain <a href="#em">below</a>.
+Not surprisingly, the ML estimates for mu and Psi turn out to be
+identical to the
+sample mean and variance, which can be computed directly as
+<pre>
+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+</pre>
+Note that W can only be identified up to a rotation matrix, because of
+the spherical symmetry of the source.
+
+<p>
+If we restrict Psi to be spherical, i.e., Psi = sigma*I,
+there is a closed-form solution for W as well,
+i.e., we do not need to use EM.
+In particular, W contains the first |X| eigenvectors of the sample covariance
+matrix, with scalings determined by the eigenvalues and sigma.
+Classical PCA can be obtained by taking the sigma->0 limit.
+For details, see
+
+<ul>
+<li> <a href="ftp://hope.caltech.edu/pub/roweis/Empca/empca.ps">
+"EM algorithms for PCA and SPCA"</a>, Sam Roweis, NIPS 97.
+(<a href="ftp://hope.caltech.edu/pub/roweis/Code/empca.tar.gz">
+Matlab software</a>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+By adding a hidden discrete variable, we can create mixtures of FA
+models, as shown in (c).
+Now we can explain the data using a set of subspaces.
+We can create this model in BNT as follows.
+<pre>
+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+</pre>
+Notice how the covariance matrix for Y is the same for all values of
+Q; that is, the noise level in each sub-space is assumed the same.
+However, we allow the offset, mu, to vary.
+For details, see
+<ul>
+
+<LI> 
+<a HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/tr-96-1.ps.gz"> The EM 
+Algorithm for Mixtures of Factor Analyzers </A>,
+Ghahramani, Z. and Hinton, G.E. (1996),
+University of Toronto
+Technical Report CRG-TR-96-1.
+(<A HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/mfa.tar.gz">Matlab software</A>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+I have included Zoubin's specialized MFA code (with his permission)
+with the toolbox, so you can check that BNT gives the same results:
+see 'BNT/examples/static/mfa1.m'. 
+
+<p>
+Independent Factor Analysis (IFA) generalizes FA by allowing a
+non-Gaussian prior on each component of X.
+(Note that we can approximate a non-Gaussian prior using a mixture of
+Gaussians.)
+This means that the likelihood function is no longer rotationally
+invariant, so we can uniquely identify W and the hidden
+sources X.
+IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y).
+We recover classical Independent Components Analysis (ICA)
+in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the
+weight matrix W is square and invertible.
+For details, see
+<ul>
+<li>
+<a href="http://www.gatsby.ucl.ac.uk/~hagai/ifa.ps">Independent Factor
+Analysis</a>, H. Attias, Neural Computation 11: 803--851, 1998.
+</ul>
+
+
+
+<h2><a name="mixexp">Mixtures of experts</h2>
+
+As an example of the use of the softmax function,
+we introduce the Mixture of Experts model.
+<!--
+We also show
+the Hierarchical Mixture of Experts model, where the hierarchy has two
+levels.
+(This is essentially a probabilistic decision tree of height two.)
+-->
+As before,
+circles denote continuous-valued nodes,
+squares denote discrete nodes, clear
+means hidden, and shaded means observed.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/mixexp.gif">
+<!--
+<td><img src="Figures/hme.gif">
+-->
+</table>
+</center>
+<p>
+X is the observed
+input, Y is the output, and
+the Q nodes are hidden "gating" nodes, which select the appropriate
+set of parameters for Y. During training, Y is assumed observed,
+but for testing, the goal is to predict Y given X.
+Note that this is a <em>conditional</em> density model, so we don't
+associate any parameters with X.
+Hence X's CPD will be a root CPD, which is a way of modelling
+exogenous nodes.
+If the output is a continuous-valued quantity,
+we assume the "experts" are linear-regression units,
+and set Y's CPD to linear-Gaussian.
+If the output is discrete, we set Y's CPD to a softmax function.
+The Q CPDs will always be softmax functions.
+
+<p>
+As a concrete example, consider the mixture of experts model where X and Y are
+scalars, and Q is binary.
+This is just piecewise linear regression, where
+we have two line segments, i.e.,
+<P>
+<IMG ALIGN=BOTTOM SRC="Eqns/lin_reg_eqn.gif">
+<P>
+We can create this model with random parameters as follows.
+(This code is bundled in BNT/examples/static/mixexp2.m.)
+<PRE>
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+</PRE>
+Now let us fit this model using <a href="#em">EM</a>.
+First we <a href="#load_data">load the data</a> (1000 training cases) and plot them.
+<P>
+<PRE>
+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+</PRE>
+<p>
+<center>
+<IMG SRC="Figures/mixexp_data.gif">
+</center>
+<p>
+This is what the model looks like before training.
+(Thanks to Thomas Hofman for writing this plotting routine.)
+<p>
+<center>
+<IMG SRC="Figures/mixexp_before.gif">
+</center>
+<p>
+Now let's train the model, and plot the final performance.
+(We will discuss how to train models in more detail <a href="#param_learning">below</a>.)
+<P>
+<PRE>
+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+</PRE>
+(We specify which nodes will be observed when we create the engine.
+Hence BNT knows that the hidden nodes are all discrete.
+For complex models, this can lead to a significant speedup.)
+Below we show what the model looks like after 16 iterations of EM
+(with 100 IRLS iterations per M step), when it converged
+using the default convergence tolerance (that the
+fractional change in the log-likelihood be less than 1e-3).
+Before learning, the log-likelihood was
+-322.927442; afterwards, it was -13.728778.
+<p>
+<center>
+<IMG SRC="Figures/mixexp_after.gif">
+</center>
+(See BNT/examples/static/mixexp2.m for details of the code.)
+
+
+
+<h2><a name="hme">Hierarchical mixtures of experts</h2>
+
+A hierarchical mixture of experts (HME) extends the mixture of experts
+model by having more than one hidden node. A two-level example is shown below, along
+with its more traditional representation as a neural network.
+This is like a (balanced) probabilistic decision tree of height 2.
+<p>
+<center>
+<IMG SRC="Figures/HMEforMatlab.jpg">
+</center>
+<p>
+<a href="mailto:pbrutti@stat.cmu.edu">Pierpaolo Brutti</a>
+has written an extensive set of routines for HMEs,
+which are bundled with BNT: see the examples/static/HME directory.
+These routines allow you to choose the number of hidden (gating)
+layers, and the form of the experts (softmax or MLP).
+See the file hmemenu, which provides a demo.
+For example, the figure below shows the decision boundaries learned
+for a ternary classification problem, using a 2 level HME with softmax
+gates and softmax experts; the training set is on the left, the
+testing set on the right.
+<p>
+<center>
+<!--<IMG SRC="Figures/hme_dec_boundary.gif">-->
+<IMG SRC="Figures/hme_dec_boundary.png">
+</center>
+<p>
+
+
+<p>
+For more details, see the following:
+<ul>
+
+<li> <a href="http://www.cs.berkeley.edu/~jordan/papers/hierarchies.ps.Z">
+Hierarchical mixtures of experts and the EM algorithm</a>
+M. I. Jordan and R. A. Jacobs. Neural Computation, 6, 181-214, 1994.
+
+<li> <a href =
+"http://www.cs.berkeley.edu/~dmartin/software">David Martin's
+matlab code for HME</a>
+
+<li> <a
+href="http://www.cs.berkeley.edu/~jordan/papers/uai.ps.Z">Why the
+logistic function? A tutorial discussion on 
+probabilities and neural networks.</a> M. I. Jordan. MIT Computational
+Cognitive Science Report 9503, August 1995. 
+
+<li> "Generalized Linear Models", McCullagh and Nelder, Chapman and
+Halll, 1983.
+
+<li>
+"Improved learning algorithms for mixtures of experts in multiclass
+classification".
+K. Chen, L. Xu, H. Chi.
+Neural Networks (1999) 12: 1229-1252.
+
+<li> <a href="http://www.oigeeza.com/steve/">
+Classification Using Hierarchical Mixtures of Experts</a>
+S.R. Waterhouse and A.J. Robinson.
+In Proc. IEEE Workshop on Neural Network for Signal Processing IV (1994), pp. 177-186
+
+<li> <a href="http://www.idiap.ch/~perry/">
+Localized mixtures of experts</a>,
+P. Moerland, 1998.
+
+<li> "Nonlinear gated experts for time series",
+A.S. Weigend and M. Mangeas, 1995.
+
+</ul>
+
+
+<h2><a name="qmr">QMR</h2>
+
+Bayes nets originally arose out of an attempt to add probabilities to
+expert systems, and this is still the most common use for BNs.
+A famous example is
+QMR-DT, a decision-theoretic reformulation of the Quick Medical
+Reference (QMR) model.
+<p>
+<center>
+<IMG ALIGN=BOTTOM SRC="Figures/qmr.gif">
+</center>
+Here, the top layer represents hidden disease nodes, and the bottom
+layer represents observed symptom nodes.
+The goal is to infer the posterior probability of each disease given
+all the symptoms (which can be present, absent or unknown).
+Each node in the top layer has a Bernoulli prior (with a low prior
+probability that the disease is present).
+Since each node in the bottom layer has a high fan-in, we use a
+noisy-OR parameterization; each disease has an independent chance of
+causing each symptom.
+The real QMR-DT model is copyright, but
+we can create a random QMR-like model as follows.
+<pre>
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+</pre>
+In the file BNT/examples/static/qmr1, we create a random bipartite
+graph G, with 5 diseases and 10 findings, and random parameters.
+(In general, to create a random dag, use 'mk_random_dag'.)
+We can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>, with the
+following results:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+
+<p>
+Now let us put some random evidence on all the leaves except the very
+first and very last, and compute the disease posteriors.
+<pre>
+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+</pre>
+Junction tree can be quite slow on large QMR models.
+Fortunately, it is possible to exploit properties of the noisy-OR
+function to speed up exact inference using an algorithm called
+<a href="#quickscore">quickscore</a>, discussed below.
+
+
+
+
+
+<h2><a name="cg_model">Conditional Gaussian models</h2>
+
+A conditional Gaussian model is one in which, conditioned on all the discrete
+nodes, the distribution over the remaining (continuous) nodes is
+multivariate Gaussian. This means we can have arcs from discrete (D)
+to continuous (C) nodes, but not vice versa.
+(We <em>are</em> allowed C->D arcs if the continuous nodes are observed,
+as in the <a href="#mixexp">mixture of experts</a> model,
+since this distribution can be represented with a discrete potential.)
+<p>
+We now give an example of a CG model, from
+the paper "Propagation of Probabilities, Means amd
+Variances in Mixed Graphical Association Models", Steffen Lauritzen,
+JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert
+Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and
+D. J. Spiegelhalter, Springer, 1999.)
+
+<h3>Specifying the graph</h3>
+
+Consider the model of waste emissions from an incinerator plant shown below.
+We follow the standard convention that shaded nodes are observed,
+clear nodes are hidden.
+We also use the non-standard convention that
+square nodes are discrete (tabular) and round nodes are
+Gaussian.
+
+<p>
+<center>
+<IMG SRC="Figures/cg1.gif">
+</center>
+<p>
+
+We can create this model as follows.
+<pre>
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+</pre>
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous
+nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'.
+<p>
+
+
+<h3>Specifying the parameters</h3>
+
+The parameters of the discrete nodes can be specified as follows.
+<pre>
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+</pre>
+
+<p>
+The parameters of the continuous nodes can be specified as follows.
+<pre>
+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+</pre>
+
+
+<h3><a name="cg_infer">Inference</h3>
+
+<!--Let us perform inference in the <a href="#cg_model">waste incinerator example</a>.-->
+First we compute the unconditional marginals.
+<pre>
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+</pre>
+<!--(Of course, we could use <tt>cond_gauss_inf_engine</tt> instead of jtree.)-->
+'marg' is a structure that contains the fields 'mu' and 'Sigma', which
+contain the mean and (co)variance of the marginal on E.
+In this case, they are both scalars.
+Let us check they match the published figures (to 2 decimal places).
+<!--(We can't expect
+more precision than this in general because I have implemented the algorithm of
+Lauritzen (1992), which can be numerically unstable.)-->
+<pre>
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+</pre>
+We can compute the other posteriors similarly.
+Now let us add some evidence.
+<pre>
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+</pre>
+Now we find
+<pre>
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+</pre>
+
+
+We can also compute the joint probability on a set of nodes.
+For example, P(D, Mout | evidence) is a 2D Gaussian:
+<pre>
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+</pre>
+The mean is
+<pre>
+marg.mu
+ans =
+    3.6077
+    4.1077
+</pre>
+and the covariance matrix is
+<pre>
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+</pre>
+It is easy to visualize this posterior using standard Matlab plotting
+functions, e.g.,
+<pre>
+gaussplot2d(marg.mu, marg.Sigma);
+</pre>
+produces the following picture.
+
+<p>
+<center>
+<IMG SRC="Figures/gaussplot.png">
+</center>
+<p>
+
+
+The T field indicates that the mixing weight of this Gaussian
+component is 1.0.
+If the joint contains discrete and continuous variables, the result
+will be a mixture of Gaussians, e.g.,
+<pre>
+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+</pre>
+The interpretation is
+Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ].
+In this case, E is a scalar, so i=j=1; k specifies the mixture component.
+<p>
+We saw in the sprinkler network that BNT sets the effective size of
+observed discrete nodes to 1, since they only have one legal value.
+For continuous nodes, BNT sets their length to 0,
+since they have been reduced to a point.
+For example,
+<pre>
+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+</pre>
+It is simple to post-process the output of marginal_nodes.
+For example, the file BNT/examples/static/cg1 sets the mu term of
+observed nodes to their observed value, and the Sigma term to 0 (since
+observed nodes have no variance).
+
+<p>
+Note that the implemented version of the junction tree is numerically
+unstable when using CG potentials
+(which is why, in the example above, we only required our answers to agree with
+the published ones to 2dp.)
+This is why you might want to use <tt>stab_cond_gauss_inf_engine</tt>,
+implemented by Shan Huang. This is described in
+
+<ul>
+<li> "Stable Local Computation with Conditional Gaussian Distributions",
+S. Lauritzen and F. Jensen, Tech Report R-99-2014,
+Dept. Math. Sciences, Allborg Univ., 1999.
+</ul>
+
+However, even the numerically stable version
+can be computationally intractable if there are many hidden discrete
+nodes, because the number of mixture components grows exponentially e.g., in a
+<a href="usage_dbn.html#lds">switching linear dynamical system</a>.
+In general, one must resort to approximate inference techniques: see
+the discussion on <a href="#engines">inference engines</a> below.
+
+
+<h2><a name="hybrid">Other hybrid models</h2>
+
+When we have C->D arcs, where C is hidden, we need to use
+approximate inference.
+One approach (not implemented in BNT) is described in
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/hybrid_uai99.ps.gz">A
+Variational Approximation for Bayesian Networks with 
+Discrete and Continuous Latent Variables</a>,
+K. Murphy, UAI 99.
+</ul>
+Of course, one can always use <a href="#sampling">sampling</a> methods
+for approximate inference in such models.
+
+
+
+<h1><a name="param_learning">Parameter Learning</h1>
+
+The parameter estimation routines in BNT can be classified into 4
+types, depending on whether the goal is to compute
+a full (Bayesian) posterior over the parameters or just a point
+estimate (e.g., Maximum Likelihood or Maximum A Posteriori),
+and whether all the variables are fully observed or there is missing
+data/ hidden variables (partial observability).
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_params</tt></td>
+ <td><tt>learn_params_em</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>bayes_update_params</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="load_data">Loading data from a file</h2>
+
+To load numeric data from an ASCII text file called 'dat.txt', where each row is a
+case and columns are separated by white-space, such as
+<pre>
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+</pre>
+you can use
+<pre>
+data = load('dat.txt');
+</pre>
+or
+<pre>
+load dat.txt -ascii
+</pre>
+In the latter case, the data is stored in a variable called 'dat' (the
+filename minus the extension).
+Alternatively, suppose the data is stored in a .csv file (has commas
+separating the columns, and contains a header line), such as
+<pre>
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+</pre>
+You can load this using
+<pre>
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+</pre>
+If your file is not in either of these formats, you can either use Perl to convert
+it to this format, or use the Matlab scanf command.
+Type
+<tt>
+help iofun
+</tt>
+for more information on Matlab's file functions.
+<!--
+<p>
+To load data directly from Excel,
+you should buy the 
+<a href="http://www.mathworks.com/products/excellink/">Excel Link</a>.
+To load data directly from a relational database,
+you should buy the 
+<a href="http://www.mathworks.com/products/database">Database
+toolbox</a>.
+-->
+<p>
+BNT learning routines require data to be stored in a cell array.
+data{i,m} is the value of node i in case (example) m, i.e., each
+<em>column</em> is a case.
+If node i is not observed in case m (missing value), set
+data{i,m} = [].
+(Not all the learning routines can cope with such missing values, however.)
+In the special case that all the nodes are observed and are
+scalar-valued (as opposed to vector-valued), the data can be
+stored in a matrix (as opposed to a cell-array).
+<p>
+Suppose, as in the <a href="#mixexp">mixture of experts example</a>,
+that we have 3 nodes in the graph: X(1) is the observed input, X(3) is
+the observed output, and X(2) is a hidden (gating) node. We can
+create the dataset as follows.
+<pre>
+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+</pre>
+Notice how we transposed the data, to convert rows into columns.
+Also, cases{2,m} = [] for all m, since X(2) is always hidden.
+
+
+<h2><a name="mle_complete">Maximum likelihood parameter estimation from complete data</h2>
+
+As an example, let's generate some data from the sprinkler network, randomize the parameters,
+and then try to recover the original model.
+First we create some training data using forwards sampling.
+<pre>
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+</pre>
+samples{j,i} contains the value of the j'th node in case i.
+sample_bnet returns a cell array because, in general, each node might
+be a vector of different length.
+In this case, all nodes are discrete (and hence scalars), so we
+could have used a regular array instead (which can be quicker):
+<pre>
+data = cell2num(samples);
+</pre
+So now data(j,i) = samples{j,i}.
+<p>
+Now we create a network with random parameters.
+(The initial values of bnet2 don't matter in this case, since we can find the
+globally optimal MLE independent of where we start.)
+<pre>
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+</pre>
+Finally, we find the maximum likelihood estimates of the parameters.
+<pre>
+bnet3 = learn_params(bnet2, samples);
+</pre>
+To view the learned parameters, we use a little Matlab hackery.
+<pre>
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+</pre>
+Here are the parameters learned for node 4.
+<pre>
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+</pre>
+So we see that the learned parameters are fairly close to the "true"
+ones, which we display below.
+<pre>
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+</pre>
+We can get better results by using a larger training set, or using
+informative priors (see <a href="#prior">below</a>).
+
+
+
+<h2><a name="prior">Parameter priors</h2>
+
+Currently, only tabular CPDs can have priors on their parameters.
+The conjugate prior for a multinomial is the Dirichlet.
+(For binary random variables, the multinomial is the same as the
+Bernoulli, and the Dirichlet is the same as the Beta.)
+<p>
+The Dirichlet has a simple interpretation in terms of pseudo counts.
+If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the
+training set, where Pa_i are the parents of X_i,
+then the maximum likelihood (ML) estimate is
+T_ijk = N_ijk  / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0.
+To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this
+event was not seen in the training set,
+we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk)
+of times in the past.
+The MAP (maximum a posterior) estimate is then
+<pre>
+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+</pre>
+and is never 0 if all alpha_ijk > 0.
+For example, consider the network A->B, where A is binary and B has 3
+values.
+A uniform prior for B has the form
+<pre>
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+</pre>
+which can be created using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+</pre>
+This prior does not satisfy the likelihood equivalence principle,
+which says that <a href="#markov_equiv">Markov equivalent</a> models
+should have the same marginal likelihood.
+A prior that does satisfy this principle is shown below.
+Heckerman (1995) calls this the
+BDeu prior (likelihood equivalent uniform Bayesian Dirichlet).
+<pre>
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+</pre>
+where we put N/(q*r) in each bin; N is the equivalent sample size,
+r=|A|, q = |B|.
+This can be created as follows
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+</pre>
+Here, 1 is the equivalent sample size, and is the strength of the
+prior.
+You can change this using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+</pre>
+<!--where counts is an array of pseudo-counts of the same size as the
+CPT.-->
+<!--
+<p>
+When you specify a prior, you should set row i of the CPT to the
+normalized version of row i of the pseudo-count matrix, i.e., to the
+expected values of the parameters. This will ensure that computing the
+marginal likelihood sequentially (see <a
+href="#bayes_learn">below</a>) and in batch form gives the same
+results.
+To do this, proceed as follows.
+<pre>
+tabular_CPD(bnet, i, 'prior', counts, 'CPT', mk_stochastic(counts));
+</pre>
+For a non-informative prior, you can just write
+<pre>
+tabular_CPD(bnet, i, 'prior', 'unif', 'CPT', 'unif');
+</pre>
+-->
+
+
+<h2><a name="bayes_learn">(Sequential) Bayesian parameter updating from complete data</h2>
+
+If we use conjugate priors and have fully observed data, we can
+compute the posterior over the parameters in batch form as follows.
+<pre>
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+</pre>
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts,
+and bnet.CPD{i}.CPT is set to the mean of the posterior (the
+normalized counts).
+(Hence if the initial pseudo counts are 0,
+<tt>bayes_update_params</tt> and <tt>learn_params</tt> will give the
+same result.)
+
+
+
+
+<p>
+We can compute the same result sequentially (on-line) as follows.
+<pre>
+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+</pre>
+
+The file <tt>BNT/examples/static/StructLearn/model_select1</tt> has an example of
+sequential model selection which uses the same idea.
+We generate data from the model A->B
+and compute the posterior prob of all 3 dags on 2 nodes:
+ (1) A B,  (2) A <- B , (3) A -> B
+Models 2 and 3 are <a href="#markov_equiv">Markov equivalent</a>, and therefore indistinguishable from 
+observational data alone, so we expect their posteriors to be the same
+(assuming a prior which satisfies likelihood equivalence).
+If we use random parameters, the "true" model only gets a higher posterior after 2000 trials!
+However, if we make B a noisy NOT gate, the true model "wins" after 12
+trials, as shown below (red = model 1, blue/green (superimposed)
+represents models 2/3).
+<p>
+<img src="Figures/model_select.png">
+<p>
+The use of marginal likelihood for model selection is discussed in
+greater detail in the 
+section on <a href="structure_learning">structure learning</a>.
+
+
+
+
+<h2><a name="em">Maximum likelihood parameter estimation with missing values</h2>
+
+Now we consider learning when some values are not observed.
+Let us randomly hide half the values generated from the water
+sprinkler example.
+<pre>
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+</pre>
+samples2{i,l} is the value of node i in training case l, or [] if unobserved.
+<p>
+Now we will compute the MLEs using the EM algorithm.
+We need to use an inference algorithm to compute the expected
+sufficient statistics in the E step; the M (maximization) step is as
+above.
+<pre>
+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+</pre>
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as
+follows:
+<pre>
+plot(LLtrace, 'x-')
+</pre>
+Let's display the results after 10 iterations of EM.
+<pre>
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+</pre>
+We can get improved performance by using one or more of the following
+methods:
+<ul>
+<li> Increasing the size of the training set.
+<li> Decreasing the amount of hidden data.
+<li> Running EM for longer.
+<li> Using informative priors.
+<li> Initialising EM from multiple starting points.
+</ul>
+
+<h2><a name="gaussianNumerical">Numerical problems when fitting
+Gaussians using EM</h2>
+
+When fitting a <a href="#gaussian">Gaussian CPD</a> using EM, you
+might encounter some numerical 
+problems. See <a
+href="http://www.ai.mit.edu/~murphyk/Software/HMM/hmm.html#loglikpos">here</a>
+for a discussion of this in the context of HMMs.
+<!--
+(Note: BNT does not currently support spherical covariances, although it
+would be easy to add, since  KPMstats/clg_Mstep supports this option;
+you would just need to modify gaussian_CPD/update_ess to accumulate
+weighted inner products.)
+-->
+
+
+<h2><a name="tying">Parameter tying</h2>
+
+In networks with repeated structure (e.g., chains and grids), it is
+common to assume that the parameters are the same at every node. This
+is called parameter tying, and reduces the amount of data needed for
+learning.
+<p>
+When we have tied parameters, there is no longer a one-to-one
+correspondence between nodes and CPDs.
+Rather, each CPD species the parameters for a whole equivalence class
+of nodes.
+It is easiest to see this by example.
+Consider the following <a href="usage_dbn.html#hmm">hidden Markov
+model (HMM)</a>
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+<!--
+We can create this graph structure, assuming we have T time-slices,
+as follows.
+(We number the nodes as shown in the figure, but we could equally well
+number the hidden nodes 1:T, and the observed nodes T+1:2T.)
+<pre>
+N = 2*T;
+dag = zeros(N);
+hnodes = 1:2:2*T;
+for i=1:T-1
+  dag(hnodes(i), hnodes(i+1))=1;
+end
+onodes = 2:2:2*T;
+for i=1:T
+  dag(hnodes(i), onodes(i)) = 1;
+end
+</pre>
+<p>
+The hidden nodes are always discrete, and have Q possible values each,
+but the observed nodes can be discrete or continuous, and have O possible values/length.
+<pre>
+if cts_obs
+  dnodes = hnodes;
+else
+  dnodes = 1:N;
+end
+ns = ones(1,N);
+ns(hnodes) = Q;
+ns(onodes) = O;
+</pre>
+-->
+When HMMs are used for semi-infinite processes like speech recognition,
+we assume the transition matrix
+P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant
+or homogenous Markov chain.
+Hence hidden nodes 2, 3, ..., T
+are all in the same equivalence class, say class Hclass.
+Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the
+same for all t, so the observed nodes are all in the same equivalence
+class, say class Oclass.
+Finally, the prior term P(H(1)) is in a class all by itself, say class
+H1class.
+This is illustrated below, where we explicitly represent the
+parameters as random variables (dotted nodes).
+<p>
+<img src="Figures/hmm4_params.gif">
+<p>
+In BNT, we cannot represent parameters as random variables (nodes).
+Instead, we "hide" the
+parameters inside one CPD for each equivalence class,
+and then specify that the other CPDs should share these parameters, as
+follows.
+<pre>
+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+</pre>
+Finally, we define the parameters for each equivalence class:
+<pre>
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+</pre>
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a
+member of e's equivalence class; that is, it is not always the case
+that e == j. You can use bnet.rep_of_eclass(e) to return the
+representative of equivalence class e.
+BNT will look up the parents of j to determine the size
+of the CPT to use. It assumes that this is the same for all members of
+the equivalence class.
+Click <a href="http://www.cs.berkeley.edu/~murphyk/Bayes/param_tieing.html">here</a> for
+a more complex example of parameter tying.
+<p>
+Note:
+Normally one would define an HMM as a
+<a href = "usage_dbn.html">Dynamic Bayes Net</a>
+(see the function BNT/examples/dynamic/mk_chmm.m).
+However, one can define an HMM as a static BN using the function
+BNT/examples/static/Models/mk_hmm_bnet.m.
+
+
+
+<h1><a name="structure_learning">Structure learning</h1>
+
+Update (9/29/03):
+Phillipe LeRay is developing some additional structure learning code
+on top of BNT. Click <a
+href="http://bnt.insa-rouen.fr/ajouts.html">here</a>
+for details.
+
+<p>
+
+There are two very different approaches to structure learning:
+constraint-based and search-and-score.
+In the <a href="#constraint">constraint-based approach</a>,
+we start with a fully connected graph, and remove edges if certain
+conditional independencies are measured in the data.
+This has the disadvantage that repeated independence tests lose
+statistical power.
+<p>
+In the more popular search-and-score approach,
+we perform a search through the space of possible DAGs, and either
+return the best one found (a point estimate), or return a sample of the
+models found (an approximation to the Bayesian posterior).
+<p>
+Unfortunately, the number of DAGs as a function of the number of
+nodes, G(n), is super-exponential in n.
+A closed form formula for G(n) is not known, but the first few values
+are shown below (from Cooper, 1999).
+
+<table>
+<tr>  <th>n</th>    <th align=left>G(n)</th> </tr>
+<tr>  <td>1</td>    <td>1</td> </tr>
+<tr>  <td>2</td>    <td>3</td> </tr>
+<tr>  <td>3</td>    <td>25</td> </tr>
+<tr>   <td>4</td>    <td>543</td> </tr> 
+<tr>   <td>5</td>    <td>29,281</td> </tr>
+<tr>   <td>6</td>    <td>3,781,503</td> </tr>
+<tr>   <td>7</td>    <td>1.1 x 10^9</td> </tr>
+<tr>   <td>8</td>    <td>7.8 x 10^11</td> </tr>
+<tr>   <td>9</td>    <td>1.2 x 10^15</td> </tr>
+<tr>   <td>10</td>    <td>4.2 x 10^18</td> </tr>
+</table>
+
+Since the number of DAGs is super-exponential in the number of nodes,
+we cannot exhaustively search the space, so we either use a local
+search algorithm (e.g., greedy hill climbining, perhaps with multiple
+restarts) or a global search algorithm (e.g., Markov Chain Monte
+Carlo). 
+<p>
+If we know a total ordering on the nodes,
+finding the best structure amounts to picking the best set of parents
+for each node independently.
+This is what the K2 algorithm does.
+If the ordering is unknown, we can search over orderings,
+which is more efficient than searching over DAGs (Koller and Friedman, 2000).
+<p>
+In addition to the search procedure, we must specify the scoring
+function. There are two popular choices. The Bayesian score integrates
+out the parameters, i.e., it is the marginal likelihood of the model.
+The BIC (Bayesian Information Criterion) is defined as
+log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is
+the ML estimate of the parameters, d is the number of parameters, and
+N is the number of data cases.
+The BIC method has the advantage of not requiring a prior.
+<p>
+BIC can be derived as a large sample
+approximation to the marginal likelihood.
+(It is also equal to the Minimum Description Length of a model.)
+However, in practice, the sample size does not need to be very large
+for the approximation to be good.
+For example, in the figure below, we plot the ratio between the log marginal likelihood
+and the BIC score against data-set size; we see that the ratio rapidly
+approaches 1, especially for non-informative priors. 
+(This plot was generated by the file BNT/examples/static/bic1.m. It
+uses the water sprinkler BN with BDeu Dirichlet priors with different
+equivalent sample sizes.)
+
+<p>
+<center>
+<IMG SRC="Figures/bic.png">
+</center>
+<p>
+
+<p>
+As with parameter learning, handling missing data/ hidden variables is
+much harder than the fully observed case.
+The structure learning routines in BNT can therefore be classified into 4
+types, analogously to the parameter learning case.
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_struct_K2</tt>  <br>
+<!--     <tt>learn_struct_hill_climb</tt></td> -->
+ <td><tt>not yet supported</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>learn_struct_mcmc</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="markov_equiv">Markov equivalence</h2>
+
+If two DAGs encode the same conditional independencies, they are
+called Markov equivalent. The set of all DAGs can be paritioned into
+Markov equivalence classes. Graphs within the same class can 
+have
+the direction of some of their arcs reversed without changing any of
+the CI relationships.
+Each class can be represented by a PDAG
+(partially directed acyclic graph) called an essential graph or
+pattern. This specifies which edges must be oriented in a certain
+direction, and which may be reversed.
+
+<p>
+When learning graph structure from observational data,
+the best one can hope to do is to identify the model up to Markov
+equivalence. To distinguish amongst graphs within the same equivalence
+class, one needs interventional data: see the discussion on <a
+href="#active">active learning</a> below.
+
+
+
+<h2><a name="enumerate">Exhaustive search</h2>
+
+The brute-force approach to structure learning is to enumerate all
+possible DAGs, and score each one. This provides a "gold standard"
+with which to compare other algorithms. We can do this as follows.
+<pre>
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+</pre>
+where data(i,m) is the value of node i in case m,
+and ns(i) is the size of node i.
+If the DAGs have a lot of families in common, we can cache the sufficient statistics,
+making this potentially more efficient than scoring the DAGs one at a time.
+(Caching is not currently implemented, however.)
+<p>
+By default, we use the Bayesian scoring metric, and assume CPDs are
+represented by tables with BDeu(1) priors.
+We can override these defaults as follows.
+If we want to use uniform priors, we can say
+<pre>
+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+</pre>
+params{i} is a cell-array, containing optional arguments that are
+passed to the constructor for CPD i.
+<p>
+Now suppose we want to use different node types, e.g., 
+Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both
+these CPDs can support discrete and continuous parents, which is
+necessary since all other nodes will be considered as parents).
+The Bayesian scoring metric currently only works for tabular CPDs, so
+we will use BIC:
+<pre>
+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+</pre>
+In practice, one can't enumerate all possible DAGs for N > 5,
+but one can evaluate any reasonably-sized set of hypotheses in this
+way (e.g., nearest neighbors of your current best guess).
+Think of this as "computer assisted model refinement" as opposed to de
+novo learning.
+
+
+<h2><a name="K2">K2</h2>
+
+The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows.
+Initially each node has no parents. It then adds incrementally that parent whose addition most
+increases the score of the resulting structure. When the addition of no single
+parent can increase the score, it stops adding parents to the node.
+Since we are using a fixed ordering, we do not need to check for
+cycles, and can choose the parents for each node independently.
+<p>
+The original paper used the Bayesian scoring
+metric with tabular CPDs and Dirichlet priors.
+BNT generalizes this to allow any kind of CPD, and either the Bayesian
+scoring metric or BIC, as in the example <a href="#enumerate">above</a>.
+In addition, you can specify
+an optional upper bound on the number of parents for each node.
+The file BNT/examples/static/k2demo1.m gives an example of how to use K2.
+We use the water sprinkler network and sample 100 cases from it as before.
+Then we see how much data it takes to recover the generating structure:
+<pre>
+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+</pre>
+Here are the results.
+<pre>
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+</pre>
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly,
+showing that the prior doesn't matter too much.)
+In general, we cannot hope to recover the "true" generating structure,
+only one that is in its <a href="#markov_equiv">Markov equivalence
+class</a>.
+
+
+<h2><a name="hill_climb">Hill-climbing</h2>
+
+Hill-climbing starts at a specific point in space,
+considers all nearest neighbors, and moves to the neighbor
+that has the highest score; if no neighbors have higher
+score than the current point (i.e., we have reached a local maximum),
+the algorithm stops. One can then restart in another part of the space.
+<p>
+A common definition of "neighbor" is all graphs that can be
+generated from the current graph by adding, deleting or reversing a
+single arc, subject to the acyclicity constraint.
+Other neighborhoods are possible: see
+<a href="http://research.microsoft.com/~dmax/publications/jmlr02.pdf">
+Optimal Structure Identification with Greedy Search</a>, Max
+Chickering, JMLR 2002.
+
+<!--
+Note: This algorithm is currently (Feb '02) being implemented by Qian
+Diao.
+-->
+
+
+<h2><a name="mcmc">MCMC</h2>
+
+We can use a Markov Chain Monte Carlo (MCMC) algorithm called
+Metropolis-Hastings (MH) to search the space of all 
+DAGs.
+The standard proposal distribution is to consider moving to all
+nearest neighbors in the sense defined <a href="#hill_climb">above</a>.
+<p>
+The function can be called
+as in the following example.
+<pre>
+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+</pre>
+We can convert our set of sampled graphs to a histogram
+(empirical posterior over all the DAGs) thus
+<pre>
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+</pre>
+To see how well this performs, let us compute the exact posterior exhaustively.
+<p>
+<pre>
+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+</pre>
+We plot the results below.
+(The data set was 100 samples drawn from a random 4 node bnet; see the
+file BNT/examples/static/mcmc1.)
+<pre>
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+</pre>
+<img src="Figures/mcmc_post.jpg" width="800" height="500">
+<p>
+We can also plot the acceptance ratio versus number of MCMC steps,
+as a crude convergence diagnostic.
+<pre>
+clf
+plot(accept_ratio)
+</pre>
+<img src="Figures/mcmc_accept.jpg" width="800" height="300">
+<p>
+Better convergence diagnostics can be found
+<a href="<a href="http://www.lce.hut.fi/~ave/code/mcmcdiag/">here</a>
+<p>
+Even though the number of samples needed by MCMC is theoretically
+polynomial (not exponential) in the dimensionality of the search space, in practice it has been
+found that MCMC does not converge in reasonable time for graphs with
+more than about 10 nodes.
+<p>
+<a href="http://www.bioss.sari.ac.uk/~dirk/software/DBmcmc/">
+Dirk Husmeier has extended MCMC model selection to DBNs</a>.
+
+
+<h2><a name="active">Active structure learning</h2>
+
+As was mentioned <a href="#markov_equiv">above</a>,
+one can only learn a DAG up to Markov equivalence, even given infinite data.
+If one is interested in learning the structure of a causal network,
+one needs interventional data.
+(By "intervention" we mean forcing a node to take on a specific value,
+thereby effectively severing its incoming arcs.)
+<p>
+Most of the scoring functions accept an optional argument
+that specifies whether a node was observed to have a certain value, or
+was forced to have that value: we set clamped(i,m)=1 if node i was
+forced in training case m. e.g., see the file
+BNT/examples/static/cooper_yoo.
+<p>
+An interesting question is to decide which interventions to perform
+(c.f., design of experiments). For details, see the following tech
+report
+<ul>
+<li> <a href = "../../Papers/alearn.ps.gz">
+Active learning of causal Bayes net structure</a>, Kevin Murphy, March
+2001.
+</ul>
+
+
+<h2><a name="struct_em">Structural EM</h2>
+
+Computing the Bayesian score when there is partial observability is
+computationally challenging, because the parameter posterior becomes
+multimodal (the hidden nodes induce a mixture distribution).
+One therefore needs to use approximations such as BIC.
+Unfortunately, search algorithms are still expensive, because we need
+to run EM at each step to compute the MLE, which is needed to compute
+the score of each model. An alternative approach is
+to do the local search steps inside of the M step of EM, which is more
+efficient since the data has been "filled in" - this is
+called the structural EM algorithm (Friedman 1997), and provably
+converges to a local maximum of the BIC score.
+<p> 
+Wei Hu has implemented SEM for discrete nodes.
+You can download his package from
+<a href="../SEM.zip">here</a>.
+Please address all questions about this code to
+wei.hu@intel.com.
+See also <a href="#phl">Phl's implementation of SEM</a>.
+
+<!--
+<h2><a name="reveal">REVEAL algorithm</h2>
+
+A simple way to learn the structure of a fully observed, discrete,
+factored DBN from a time series is described <a
+href="usage_dbn.html#struct_learn">here</a>.
+-->
+
+
+<h2><a name="graphdraw">Visualizing the graph</h2>
+
+You can visualize an arbitrary graph (such as one learned using the
+structure learning routines) with Matlab code contributed by
+<a href="http://www.mbfys.kun.nl/~cemgil/matlab/layout.html">Ali
+Taylan Cemgil</a>
+from the University of Nijmegen.
+For static BNs, call it as follows:
+<pre>
+draw_graph(bnet.dag);
+</pre>
+For example, this is the output produced on a
+<a href="#qmr">random QMR-like model</a>:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+<p>
+If you install the excellent <a
+href="http://www.research.att.com/sw/tools/graphviz">graphhviz</a>, an
+open-source graph visualization package from AT&T,
+you can create a much better visualization as follows
+<pre>
+graph_to_dot(bnet.dag)
+</pre>
+This works by converting the adjacency matrix to a file suitable
+for input to graphviz (using the dot format),
+then converting the output of graphviz to postscript, and displaying the results using
+ghostview.
+You can do each of these steps separately for more control, as shown
+below.
+<pre>
+graph_to_dot(bnet.dag, 'filename', 'foo.dot');
+dot -Tps foo.dot -o foo.ps
+ghostview foo.ps &
+</pre>
+
+<h2><a name = "constraint">Constraint-based methods</h2>
+
+The IC algorithm (Pearl and Verma, 1991),
+and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993),
+computes many conditional independence tests,
+and combines these constraints into a
+PDAG to represent the whole
+<a href="#markov_equiv">Markov equivalence class</a>.
+<p>
+IC*/FCI extend IC/PC to handle latent variables: see <a href="#ic_star">below</a>.
+(IC stands for inductive causation; PC stands for Peter and Clark,
+the first names of Spirtes and Glymour; FCI stands for fast causal
+inference.
+What we, following Pearl (2000), call IC* was called
+IC in the original Pearl and Verma paper.)
+For details, see
+<ul>
+<li>
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Causation,
+Prediction, and Search</a>, Spirtes, Glymour and 
+Scheines (SGS), 2001 (2nd edition), MIT Press.
+<li> 
+<a href="http://bayes.cs.ucla.edu/BOOK-2K/index.html">Causality: Models, Reasoning and Inference</a>, J. Pearl, 
+2000, Cambridge University Press.
+</ul>
+
+<p>
+
+The PC algorithm takes as arguments a function f, the number of nodes N,
+the maximum fan in K, and additional arguments A which are passed to f.
+The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0
+otherwise.
+For example, suppose we cheat by
+passing in a CI "oracle" which has access to the true DAG; the oracle
+tests for d-separation in this DAG, i.e.,
+f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows.
+<pre>
+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+</pre>
+pdag(i,j) = -1 if there is definitely an i->j arc,
+and pdag(i,j) = 1 if there is either an i->j or and i<-j arc.
+<p>
+Applied to the sprinkler network, this returns
+<pre>
+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+</pre>
+So as expected, we see that the V-structure at the W node is uniquely identified,
+but the other arcs have ambiguous orientation.
+<p>
+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS
+book.
+This example concerns the female orgasm.
+We are given a correlation matrix C between 7 measured factors (such
+as subjective experiences of coital and masturbatory experiences),
+derived from 281 samples, and want to learn a causal model of the
+data. We will not discuss the merits of this type of work here, but
+merely show how to reproduce the results in the SGS book.
+Their program,
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Tetrad</a>,
+makes use of the Fisher Z-test for conditional
+independence, so we do the same:
+<pre>
+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+</pre>
+In this case, the CI test is
+<pre>
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+</pre>
+The results match those of Fig 12a of SGS apart from two edge
+differences; presumably this is due to rounding error (although it
+could be a bug, either in BNT or in Tetrad).
+This example can be found in the file BNT/examples/static/pc2.m.
+
+<p>
+
+The IC* algorithm (Pearl and Verma, 1991),
+and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993),
+are like the IC/PC algorithm, except that they can detect the presence
+of latent variables.
+See the file <tt>learn_struct_pdag_ic_star</tt> written by Tamar
+Kushnir. The output is a matrix P, defined as follows
+(see Pearl (2000), p52 for details):
+<pre>
+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+</pre>
+
+
+<h2><a name="phl">Philippe Leray's structure learning package</h2>
+
+Philippe Leray has written a 
+<a href="http://bnt.insa-rouen.fr/ajouts.html">
+structure learning package</a> that uses BNT.
+
+It currently (Juen 2003) has the following features:
+<ul>
+<li>PC with Chi2 statistical test 
+<li>             MWST : Maximum weighted Spanning Tree 
+<li>             Hill Climbing 
+<li>             Greedy Search 
+<li>             Structural EM 
+<li>             hist_ic : optimal Histogram based on IC information criterion 
+<li>             cpdag_to_dag 
+<li>             dag_to_cpdag 
+<li>             ... 
+</ul>
+
+
+</a>
+
+
+<!--
+<h2><a name="read_learning">Further reading on learning</h2>
+
+I recommend the following tutorials for more details on learning.
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/intel.ps.gz">My short
+tutorial</a> on graphical models, which contains an overview of learning.
+
+<li> 
+<A HREF="ftp://ftp.research.microsoft.com/pub/tr/TR-95-06.PS">
+A tutorial on learning with Bayesian networks</a>, D. Heckerman,
+Microsoft Research Tech Report, 1995.
+
+<li> <A HREF="http://www-cad.eecs.berkeley.edu/~wray/Mirror/lwgmja">
+Operations for Learning with Graphical Models</a>,
+W. L. Buntine, JAIR'94, 159--225.
+</ul>
+<p>
+-->
+
+
+
+
+
+<h1><a name="engines">Inference engines</h1>
+
+Up until now, we have used the junction tree algorithm for inference.
+However, sometimes this is too slow, or not even applicable.
+In general, there are many inference algorithms each of which make
+different tradeoffs between speed, accuracy, complexity and
+generality. Furthermore, there might be many implementations of the
+same algorithm; for instance, a general purpose, readable version,
+and a highly-optimized, specialized one.
+To cope with this variety, we treat each inference algorithm as an
+object, which we call an inference engine.
+
+<p>
+An inference engine is an object that contains a bnet and supports the
+'enter_evidence' and 'marginal_nodes' methods.  The engine constructor
+takes the bnet as argument and may do some model-specific processing.
+When 'enter_evidence' is called, the engine may do some
+evidence-specific processing.  Finally, when 'marginal_nodes' is
+called, the engine may do some query-specific processing.
+
+<p>
+The amount of work done when each stage is specified -- structure,
+parameters, evidence, and query -- depends on the engine.  The cost of
+work done early in this sequence can be amortized.  On the other hand,
+one can make better optimizations if one waits until later in the
+sequence.
+For example, the parameters might imply
+conditional indpendencies that are not evident in the graph structure,
+but can nevertheless be exploited; the evidence indicates which nodes
+are observed and hence can effectively be disconnected from the
+graph; and the query might indicate that large parts of the network
+are d-separated from the query nodes.  (Since it is not the actual
+<em>values</em> of the evidence that matters, just which nodes are observed,
+many engines allow you to specify which nodes will be observed when they are constructed,
+i.e., before calling 'enter_evidence'. Some engines can still cope if
+the actual pattern of evidence is different, e.g., if there is missing
+data.)
+<p>
+
+Although being maximally lazy (i.e., only doing work when a query is
+issued) may seem desirable,
+this is not always the most efficient.
+For example,
+when learning using EM, we need to call marginal_nodes N times, where N is the
+number of nodes. <a href="varelim">Variable elimination</a> would end
+up repeating a lot of work
+each time marginal_nodes is called, making it inefficient for
+learning. The junction tree algorithm, by contrast, uses dynamic
+programming to avoid this redundant computation --- it calculates all
+marginals in two passes during 'enter_evidence', so calling
+'marginal_nodes' takes constant time.
+<p>
+We will discuss some of the inference algorithms implemented in BNT
+below, and finish with a <a href="#engine_summary">summary</a> of all
+of them.
+
+
+
+
+
+
+
+<h2><a name="varelim">Variable elimination</h2>
+
+The variable elimination algorithm, also known as bucket elimination
+or peeling, is one of the simplest inference algorithms.
+The basic idea is to "push sums inside of products"; this is explained
+in more detail
+<a
+href="http://HTTP.CS.Berkeley.EDU/~murphyk/Bayes/bayes.html#infer">here</a>. 
+<p>
+The principle of distributing sums over products can be generalized
+greatly to apply to any commutative semiring.
+This forms the basis of many common algorithms, such as Viterbi
+decoding and the Fast Fourier Transform. For details, see
+
+<ul>
+<li> R. McEliece and S. M. Aji, 2000.
+<!--<a href="http://www.systems.caltech.edu/EE/Faculty/rjm/papers/GDL.ps">-->
+<a href="GDL.pdf">
+The Generalized Distributive Law</a>,
+IEEE Trans. Inform. Theory, vol. 46, no. 2 (March 2000),
+pp. 325--343. 
+
+
+<li>
+F. R. Kschischang, B. J. Frey and H.-A. Loeliger, 2001.
+<a href="http://www.cs.toronto.edu/~frey/papers/fgspa.abs.html">
+Factor graphs and the sum-product algorithm</a>
+IEEE Transactions on Information Theory, February, 2001.
+
+</ul>
+
+<p>
+Choosing an order in which to sum out the variables so as to minimize
+computational cost is known to be NP-hard.
+The implementation of this algorithm in
+<tt>var_elim_inf_engine</tt> makes no attempt to optimize this
+ordering (in contrast, say, to <tt>jtree_inf_engine</tt>, which uses a
+greedy search procedure to find a good ordering).
+<p>
+Note: unlike most algorithms, var_elim does all its computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+
+
+<h2><a name="global">Global inference methods</h2>
+
+The simplest inference algorithm of all is to explicitely construct
+the joint distribution over all the nodes, and then to marginalize it.
+This is implemented in <tt>global_joint_inf_engine</tt>.
+Since the size of the joint is exponential in the
+number of discrete (hidden) nodes, this is not a very practical algorithm.
+It is included merely for pedagogical and debugging purposes.
+<p>
+Three specialized versions of this algorithm have also been implemented,
+corresponding to the cases where all the nodes are discrete (D), all
+are Gaussian (G), and some are discrete and some Gaussian (CG).
+They are called <tt>enumerative_inf_engine</tt>,
+<tt>gaussian_inf_engine</tt>,
+and <tt>cond_gauss_inf_engine</tt> respectively.
+<p>
+Note: unlike most algorithms, these global inference algorithms do all their computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+<h2><a name="quickscore">Quickscore</h2>
+
+The junction tree algorithm is quite slow on the <a href="#qmr">QMR</a> network,
+since the cliques are so big.
+One simple trick we can use is to notice that hidden leaves do not
+affect the posteriors on the roots, and hence do not need to be
+included in the network.
+A second trick is to notice that the negative findings can be
+"absorbed" into the prior:
+see the file
+BNT/examples/static/mk_minimal_qmr_bnet for details.
+<p>
+
+A much more significant speedup is obtained by exploiting special
+properties of the noisy-or node, as done by the quickscore
+algorithm. For details, see
+<ul>
+<li> Heckerman, "A tractable inference algorithm for diagnosing multiple diseases", UAI 89.
+<li> Rish and Dechter, "On the impact of causal independence", UCI
+tech report, 1998.
+</ul>
+
+This has been implemented in BNT as a special-purpose inference
+engine, which can be created and used as follows:
+<pre>
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+</pre>
+
+
+<h2><a name="belprop">Belief propagation</h2>
+
+Even using quickscore, exact inference takes time that is exponential
+in the number of positive findings.
+Hence for large networks we need to resort to approximate inference techniques.
+See for example
+<ul>
+<li> T. Jaakkola and M. Jordan, "Variational probabilistic inference and the
+QMR-DT network", JAIR 10, 1999.
+
+<li> K. Murphy, Y. Weiss and M. Jordan, "Loopy belief propagation for approximate inference: an empirical study",
+   UAI 99.
+</ul>
+The latter approximation
+entails applying Pearl's belief propagation algorithm to a model even
+if it has loops (hence the name loopy belief propagation).
+Pearl's algorithm, implemented as <tt>pearl_inf_engine</tt>, gives
+exact results when applied to singly-connected graphs
+(a.k.a. polytrees, since
+the underlying undirected topology is a tree, but a node may have
+multiple parents).
+To apply this algorithm to a graph with loops, 
+use <tt>pearl_inf_engine</tt>.
+This can use a centralized or distributed message passing protocol.
+You can use it as in the following example.
+<pre>
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+</pre>
+We found that this algorithm often converges, and when it does, often
+is very accurate, but it depends on the precise setting of the
+parameter values of the network.
+(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.)
+Understanding when and why belief propagation converges/ works
+is a topic of ongoing research.
+<p>
+<tt>pearl_inf_engine</tt> can exploit special structure in noisy-or
+and gmux nodes to compute messages efficiently.
+<p>
+<tt>belprop_inf_engine</tt> is like pearl, but uses potentials to
+represent messages. Hence this is slower.
+<p>
+<tt>belprop_fg_inf_engine</tt> is like belprop,
+but is designed for factor graphs.
+
+
+
+<h2><a name="sampling">Sampling</h2>
+
+BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms:
+<ul>
+<li> <tt>likelihood_weighting_inf_engine</tt> which does importance
+sampling and can handle any node type.
+<li> <tt>gibbs_sampling_inf_engine</tt>, written by Bhaskara Marthi.
+Currently this can only handle tabular CPDs.
+For a much faster and more powerful Gibbs sampling program, see
+<a href="http://www.mrc-bsu.cam.ac.uk/bugs">BUGS</a>.
+</ul>
+Note: To generate samples from a network (which is not the same as inference!),
+use <tt>sample_bnet</tt>.
+
+
+
+<h2><a name="engine_summary">Summary of inference engines</h2>
+
+
+The inference engines differ in many ways. Here are
+some of the major "axes":
+<ul>
+<li> Works for all topologies or makes restrictions? 
+<li> Works for all node types or makes restrictions?
+<li> Exact or approximate inference?
+</ul>
+
+<p>
+In terms of topology, most engines handle any kind of DAG.
+<tt>belprop_fg</tt> does approximate inference on factor graphs (FG), which
+can be used to represent directed, undirected, and mixed (chain)
+graphs.
+(In the future, we plan to support exact inference on chain graphs.)
+<tt>quickscore</tt> only works on QMR-like models.
+<p>
+In terms of node types: algorithms that use potentials can handle
+discrete (D), Gaussian (G) or conditional Gaussian (CG) models.
+Sampling algorithms can essentially handle any kind of node (distribution).
+Other algorithms make more restrictive assumptions in exchange for
+speed.
+<p>
+Finally, most algorithms are designed to give the exact answer.
+The belief propagation algorithms are exact if applied to trees, and
+in some other cases.
+Sampling is considered approximate, even though, in the limit of an
+infinite number of samples, it gives the exact answer.
+
+<p>
+
+Here is a summary of the properties 
+of all the engines in BNT which work on static networks.
+<p>
+<table>
+<table border units = pixels><tr>
+<td align=left width=0>Name
+<td align=left width=0>Exact?
+<td align=left width=0>Node type?
+<td align=left width=0>topology
+<tr>
+<tr>
+<td align=left> belprop
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> belprop_fg
+<td align=left> approx
+<td align=left> D
+<td align=left> factor graph
+<tr>
+<td align=left> cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> enumerative
+<td align=left> exact
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> gaussian
+<td align=left> exact
+<td align=left> G
+<td align=left> DAG
+<tr>
+<td align=left> gibbs
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> global_joint
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+<tr>
+<td align=left> jtree
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+b<tr>
+<td align=left> likelihood_weighting
+<td align=left> approx
+<td align=left> any
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> approx
+<td align=left> D,G
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> exact
+<td align=left> D,G
+<td align=left> polytree
+<tr>
+<td align=left> quickscore
+<td align=left> exact
+<td align=left> noisy-or
+<td align=left> QMR
+<tr>
+<td align=left> stab_cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> var_elim
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+</table>
+
+
+
+<h1><a name="influence">Influence diagrams/ decision making</h1>
+
+BNT implements an exact algorithm for solving LIMIDs (limited memory
+influence diagrams), described in
+<ul>
+<li> S. L. Lauritzen and D. Nilsson.
+<a href="http://www.math.auc.dk/~steffen/papers/limids.pdf">
+Representing and solving decision problems with limited
+information</a>
+Management Science, 47, 1238 - 1251. September 2001.
+</ul>
+LIMIDs explicitely show all information arcs, rather than implicitely
+assuming no forgetting. This allows them to model forgetful
+controllers.
+<p>
+See the examples in <tt>BNT/examples/limids</tt> for details.
+
+
+
+
+<h1>DBNs, HMMs, Kalman filters and all that</h1>
+
+Click <a href="usage_dbn.html">here</a> for documentation about how to
+use BNT for dynamical systems and sequence data.
+
+
+</BODY>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/usage_dbn.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,719 @@
+<HEAD>
+<TITLE>How to use BNT for DBNs</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+Documentation last updated on 7 June 2004
+
+<h1>How to use BNT for DBNs</h1>
+
+<p>
+<ul>
+<li> <a href="#spec">Model specification</a>
+<ul>
+<li> <a href="#hmm">HMMs</a>
+<li> <a href="#lds">Kalman filters</a>
+<li> <a href="#chmm">Coupled HMMs</a>
+<li> <a href="#water">Water network</a>
+<li> <a href="#bat">BAT network</a>
+</ul>
+
+<li> <a href="#inf">Inference</a>
+<ul>
+<li> <a href="#discrete">Discrete hidden nodes</a>
+<li> <a href="#cts">Continuous hidden nodes</a>
+</ul>
+
+<li> <a href="#learn">Learning</a>
+<ul>
+<li> <a href="#param_learn">Parameter learning</a>
+<li> <a href="#struct_learn">Structure learning</a>
+</ul>
+
+</ul>
+
+Note:
+you are recommended to read an introduction
+to DBNs first, such as
+<a href="http://www.ai.mit.edu/~murphyk/Papers/dbnchapter.pdf">
+this book chapter</a>.
+<br>
+You may also want to consider using
+<a href=http://ssli.ee.washington.edu/~bilmes/gmtk/>GMTk</a>, which is
+an excellent C++ package for DBNs.
+
+
+<h1><a name="spec">Model specification</h1>
+
+
+<!--<h1><a name="dbn_intro">Dynamic Bayesian Networks (DBNs)</h1>-->
+
+Dynamic Bayesian Networks (DBNs) are directed graphical models of stochastic
+processes.
+They generalise <a href="#hmm">hidden Markov models (HMMs)</a>
+and <a href="#lds">linear dynamical systems (LDSs)</a>
+by representing the hidden (and observed) state in terms of state
+variables, which can have complex interdependencies.
+The graphical structure provides an easy way to specify these
+conditional independencies, and hence to provide a compact
+parameterization of the model.
+<p>
+Note that "temporal Bayesian network" would be a better name than
+"dynamic Bayesian network", since
+it is assumed that the model structure does not change, but
+the term DBN has become entrenched.
+We also normally assume that the parameters do not
+change, i.e., the model is time-invariant.
+However, we can always add extra
+hidden nodes to represent the current "regime", thereby creating
+mixtures of models to capture periodic non-stationarities.
+<p>
+There are some cases where the size of the state space can change over
+time, e.g., tracking a variable, but unknown, number of objects.
+In this case, we need to change the model structure over time.
+BNT does not support this.
+<!--
+, but see the following paper for a
+discussion of some of the issues:
+<ul>
+<li> <a href="ftp://ftp.cs.monash.edu.au/pub/annn/smc.ps">
+Dynamic belief networks for discrete monitoring</a>,
+A. E. Nicholson and J. M. Brady. 
+IEEE Systems, Man and Cybernetics, 24(11):1593-1610, 1994. 
+</ul>
+-->
+
+
+<h2><a name="hmm">Hidden Markov Models (HMMs)</h2>
+
+The simplest kind of DBN is a Hidden Markov Model (HMM), which has
+one discrete hidden node and one discrete or continuous
+observed node per slice. We illustrate this below.
+As before, circles denote continuous nodes, squares denote
+discrete nodes, clear means hidden, shaded means observed.
+<!--
+(The observed nodes can be
+discrete or continuous; the crucial thing about an HMM is that the
+hidden nodes are discrete, so the system can model arbitrary dynamics
+-- providing, of course, that the hidden state space is large enough.)
+-->
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+We have "unrolled" the model for three "time slices" -- the structure and parameters are
+assumed to repeat as the model is unrolled further.
+Hence to specify a DBN, we need to
+define the intra-slice topology (within a slice),
+the inter-slice topology (between two slices),
+as well as the parameters for the first two slices.
+(Such a two-slice temporal Bayes net is often called a 2TBN.)
+<p>
+We can specify the topology as follows.
+<PRE>
+intra = zeros(2);
+intra(1,2) = 1; % node 1 in slice t connects to node 2 in slice t
+
+inter = zeros(2);
+inter(1,1) = 1; % node 1 in slice t-1 connects to node 1 in slice t
+</pre>
+We can specify the parameters as follows,
+where for simplicity we assume the observed node is discrete.
+<pre>
+Q = 2; % num hidden states
+O = 2; % num observable symbols
+
+ns = [Q O];
+dnodes = 1:2;
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes);
+for i=1:4
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+</pre>
+<p>
+We assume the distributions P(X(t) | X(t-1)) and
+P(Y(t) | X(t)) are independent of t for t > 1.
+Hence the CPD for nodes 5, 7, ... is the same as for node 3, so we say they
+are in the same equivalence class, with node 3 being the "representative"
+for this class. In other words, we have tied the parameters for nodes
+3, 5, 7, ...
+Similarly, nodes 4, 6, 8, ... are tied.
+Note, however, that (the parameters for) nodes 1 and 2 are not tied to
+subsequent slices.
+<p>
+Above we assumed the observation model P(Y(t) | X(t)) is independent of t for t>1, but
+it is conventional to assume this is true for all t.
+So we would like to put nodes 2, 4, 6, ... all in the same class.
+We can do this by explicitely defining the equivalence classes, as
+follows (see <a href="usage.html#tying">here</a> for more details on
+parameter tying).
+<p>
+We define eclass1(i) to be the equivalence class that node i in slice
+1 belongs to.
+Similarly, we define eclass2(i) to be the equivalence class that node i in slice
+2, 3, ..., belongs to.
+For an HMM, we have
+<pre>
+eclass1 = [1 2];
+eclass2 = [3 2];
+eclass = [eclass1 eclass2];
+</pre>
+This ties the observation model across slices,
+since e.g., eclass(4) = eclass(2) = 2.
+<p>
+By default,
+eclass1 = 1:ss, and eclass2 = (1:ss)+ss, where ss = slice size = the
+number of nodes per slice.
+<!--This will tie nodes in slices 3, 4, ... to the the nodes in slice 2,
+but none of the nodes in slice 2 to any in slice 1.-->
+But by using the above tieing pattern,
+we now only have 3 CPDs to specify, instead of 4:
+<pre>
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+obsmat0 = mk_stochastic(rand(Q,O));
+bnet.CPD{1} = tabular_CPD(bnet, 1, prior0);
+bnet.CPD{2} = tabular_CPD(bnet, 2, obsmat0);
+bnet.CPD{3} = tabular_CPD(bnet, 3, transmat0);
+</pre>
+We discuss how to do <a href="#inf">inference</a> and <a href="#learn">learning</a> on this model
+below.
+(See also
+my <a href="../HMM/hmm.html">HMM toolbox</a>, which is included with BNT.)
+
+<p>
+Some common variants on HMMs are shown below.
+BNT can handle all of these.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/hmm_gauss.gif">
+<td><img src="Figures/hmm_mixgauss.gif"
+<td><img src="Figures/hmm_ar.gif">
+<tr>
+<td><img src="Figures/hmm_factorial.gif">
+<td><img src="Figures/hmm_coupled.gif"
+<td><img src="Figures/hmm_io.gif">
+<tr>
+</table>
+</center>
+
+
+
+<h2><a name="lds">Linear Dynamical Systems (LDSs) and Kalman filters</h2>
+
+A Linear Dynamical System (LDS) has the same topology as an HMM, but
+all the nodes are assumed to have linear-Gaussian distributions, i.e.,
+<pre>
+   x(t+1) = A*x(t) + w(t),  w ~ N(0, Q),  x(0) ~ N(init_x, init_V)
+   y(t)   = C*x(t) + v(t),  v ~ N(0, R)
+</pre>
+Some simple variants are shown below.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/ar1.gif">
+<td><img src="Figures/sar.gif">
+<td><img src="Figures/kf.gif">
+<td><img src="Figures/skf.gif">
+</table>
+</center>
+<p>
+
+We can create a regular LDS in BNT as follows.
+<pre>
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+X = 2; % size of hidden state
+Y = 2; % size of observable state
+
+ns = [X Y];
+dnodes = [];
+onodes = [2];
+eclass1 = [1 2];
+eclass2 = [3 2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+
+x0 = rand(X,1);
+V0 = eye(X); % must be positive semi definite!
+C0 = rand(Y,X);
+R0 = eye(Y);
+A0 = rand(X,X);
+Q0 = eye(X);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', x0, 'cov', V0, 'cov_prior_weight', 0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(Y,1), 'cov', R0, 'weights', C0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', zeros(X,1), 'cov', Q0, 'weights', A0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+</pre>
+We discuss how to do <a href="#inf">inference</a> and <a href="#learn">learning</a> on this model
+below.
+(See also
+my <a href="../Kalman/kalman.html">Kalman filter toolbox</a>, which is included with BNT.)
+<p>
+
+
+<h2><a name="chmm">Coupled HMMs</h2>
+
+Here is an example of a coupled HMM with N=5 chains, unrolled for T=3
+slices. Each hidden discrete node has a private observed Gaussian
+child.
+<p>
+<img src="Figures/chmm5.gif">
+<p>
+We can make this using the function
+<pre>
+Q = 2; % binary hidden nodes
+discrete_obs = 0; % cts observed nodes
+Y = 1; % scalar observed nodes
+bnet = mk_chmm(N, Q, Y, discrete_obs);
+</pre>
+
+<!--We will use this model <a href="#pred">below</a> to illustrate online prediction.-->
+
+
+
+<h2><a name="water">Water network</h2>
+
+Consider the following model
+of a water purification plant, developed
+by Finn V. Jensen, Uffe Kjærulff, Kristian G. Olesen, and Jan
+Pedersen.
+<!--
+The clear nodes represent the hidden state of the system in
+factored form, and the shaded nodes represent the observations in
+factored form.
+-->
+<!--
+(Click <a
+href="http://www-nt.cs.berkeley.edu/home/nir/public_html/Repository/water.htm">here</a>
+for more details on this model.
+Following Boyen and Koller, we have added discrete evidence nodes.)
+-->
+<!--
+We have "unrolled" the model for three "time slices" -- the structure and parameters are
+assumed to repeat as the model is unrolled further.
+Hence to specify a DBN, we need to
+define the intra-slice topology (within a slice),
+the inter-slice topology (between two slices),
+as well as the parameters for the first two slices.
+(Such a two-slice temporal Bayes net is often called a 2TBN.)
+-->
+<p>
+<center>
+<IMG SRC="Figures/water3_75.gif">
+</center>
+We now show how to specify this model in BNT.
+<pre>
+ss = 12; % slice size
+intra = zeros(ss);
+intra(1,9) = 1;
+intra(3,10) = 1;
+intra(4,11) = 1;
+intra(8,12) = 1;
+
+inter = zeros(ss);
+inter(1, [1 3]) = 1; % node 1 in slice 1 connects to nodes 1 and 3 in slice 2
+inter(2, [2 3 7]) = 1;
+inter(3, [3 4 5]) = 1;
+inter(4, [3 4 6]) = 1;
+inter(5, [3 5 6]) = 1;
+inter(6, [4 5 6]) = 1;
+inter(7, [7 8]) = 1;
+inter(8, [6 7 8]) = 1;
+
+onodes = 9:12; % observed
+dnodes = 1:ss; % discrete
+ns = 2*ones(1,ss); % binary nodes
+eclass1 = 1:12;
+eclass2 = [13:20 9:12];
+eclass = [eclass1 eclass2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+for e=1:max(eclass)
+  bnet.CPD{e} = tabular_CPD(bnet, e);
+end
+</pre>
+We have tied the observation parameters across all slices.
+Click <a href="param_tieing.html">here</a> for a more complex example
+of parameter tieing.
+
+<!--
+Let X(i,t) denote the i'th hidden node in slice t,
+and Y(i,y) denote the i'th observed node in slice t.
+We also use the notation Nj to refer to the j'th node in the
+unrolled network, e.g., N25 = X(1,3), N33 = Y(1,3).
+<p>
+We assume the distributions P(X(i,t) | X(i,t-1)) and
+P(Y(i,t) | X(i,t)) are independent of t for t > 1 and for all i.
+Hence the CPD for N25, N37, ... is the same as for N13, so we say they
+are in the same equivalence class, with N13 being the "representative"
+for this class. In other words, we have tied the parameters for nodes
+N13, N25, N37, ...
+Note, however, that the parameters for the nodes in the first slice
+are not tied, so each equivalence class for nodes 1..12 contains a
+single node.
+<p>
+Above we assumed P(Y(i,t) | X(i,t)) is independent of t for t>1, but
+it is conventional to assume this is true for all t.
+So we would like to put N9, N21, N33, ... all in the same class, and
+similarly for the other observed nodes.
+We can do this by explicitely defining the equivalence classes, as
+follows.
+<p>
+We define eclass1(i) to be the equivalence class that node i in slice
+1 belongs to.
+Similarly, we define eclass2(i) to be the equivalence class that node i in slice
+2, 3, ..., belongs to.
+For the water model, we have
+<pre>
+</pre>
+This ties the observation model across slices,
+since e.g., eclass(9) = eclass(21) = 9, so Y(1,1) and Y(1,2) belong to the
+same class.
+<p>
+By default,
+eclass1 = 1:ss, and eclass2 = (1:ss)+ss, where ss = slice size = the
+number of nodes per slice.
+This will tie nodes in slices 3, 4, ... to the the nodes in slice 2,
+but none of the nodes in slice 2 to any in slice 1.
+By using the above tieing pattern,
+we now only have 20 CPDs to specify, instead of 24:
+<pre>
+bnet = mk_dbn(intra, inter, ns, dnodes, eclass1, eclass2);
+for e=1:max(eclass)
+  bnet.CPD{e} = tabular_CPD(bnet, e);
+end
+</pre>
+-->
+
+
+
+<h2><a name="bat">BATnet</h2>
+
+As an example of a more complicated DBN, consider the following
+example,
+which is a model of a car's high level state, as might be used by
+an automated car.
+(The model is from Forbes, Huang, Kanazawa and Russell, "The BATmobile: Towards a
+Bayesian Automated Taxi", IJCAI 95. The figure is from
+Boyen and Koller, "Tractable Inference for Complex Stochastic
+Processes", UAI98.
+For simplicity, we only show the observed nodes for slice 2.)
+<p>
+<center>
+<IMG SRC="Figures/batnet.gif">
+</center>
+<p>
+Since this topology is so complicated,
+it is useful to be able to refer to the nodes by name, instead of
+number.
+<pre>
+names = {'LeftClr', 'RightClr', 'LatAct', ... 'Bclr', 'BYdotDiff'};
+ss = length(names);
+</pre>
+We can specify the intra-slice topology using a cell array as follows,
+where each row specifies a connection between two named nodes:
+<pre>
+intrac = {...
+   'LeftClr', 'LeftClrSens';
+  'RightClr', 'RightClrSens';
+  ...
+  'BYdotDiff', 'BcloseFast'};
+</pre>
+Finally, we can convert this cell array to an adjacency matrix using
+the following function:
+<pre>
+[intra, names] = mk_adj_mat(intrac, names, 1);
+</pre>
+This function also permutes the names so that they are in topological
+order.
+Given this ordering of the names, we can make the inter-slice
+connectivity matrix as follows:
+<pre>
+interc = {...
+   'LeftClr', 'LeftClr';
+   'LeftClr', 'LatAct';
+   ...
+   'FBStatus', 'LatAct'};
+
+inter = mk_adj_mat(interc, names, 0);  
+</pre>
+
+To refer to a node, we must know its number, which can be computed as
+in the following example:
+<pre>
+obs = {'LeftClrSens', 'RightClrSens', 'TurnSignalSens', 'XdotSens', 'YdotSens', 'FYdotDiffSens', ...
+      'FclrSens', 'BXdotSens', 'BclrSens', 'BYdotDiffSens'};
+for i=1:length(obs)
+  onodes(i) = strmatch(obs{i}, names);
+end
+onodes = sort(onodes);
+</pre>
+(We sort the onodes since most BNT routines assume that set-valued
+arguments are in sorted order.)
+We can now make the DBN:
+<pre>
+dnodes = 1:ss; 
+ns = 2*ones(1,ss); % binary nodes
+bnet = mk_dbn(intra, inter, ns, 'iscrete', dnodes);
+</pre>
+To specify the parameters, we must know the order of the parents.
+See the function BNT/general/mk_named_CPT for a way to do this in the
+case of tabular nodes. For simplicity, we just generate random
+parameters:
+<pre>
+for i=1:2*ss
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+</pre>
+A complete version of this example is available in BNT/examples/dynamic/bat1.m.
+
+
+
+
+<h1><a name="inf">Inference</h1>
+
+
+The general inference problem for DBNs is to compute
+P(X(i,t0) | Y(:, t1:t2)), where X(i,t) represents the i'th hidden
+variable at time t and  Y(:,t1:t2) represents all the evidence
+between times t1 and t2. 
+There are several special cases of interest, illustrated below.
+The arrow indicates t0: it is X(t0) that we are trying to estimate.
+The shaded region denotes t1:t2, the available data.
+<p>
+
+<img src="Figures/filter.gif">
+
+<p>
+BNT can currently only handle offline smoothing.
+(The HMM engine handles filtering and, to a limited extent, prediction.)
+The usage is similar to static
+inference engines, except now the evidence is a 2D cell array of
+size ss*T, where ss is the number of nodes per slice (ss = slice sizee)  and T is the
+number of slices.
+Also, 'marginal_nodes' takes two arguments, the nodes and the time-slice.
+For example, to compute P(X(i,t) | y(:,1:T)), we proceed as follows
+(where onodes are the indices of the observedd nodes in each slice,
+which correspond to y):
+<pre>
+ev = sample_dbn(bnet, T);
+evidence = cell(ss,T);
+evidence(onodes,:) = ev(onodes, :); % all cells besides onodes are empty
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, i, t);
+</pre>
+
+
+<h2><a name="discrete">Discrete hidden nodes</h2>
+
+If all the hidden nodes are discrete,
+we can use the junction tree algorithm to perform inference.
+The simplest approach,
+<tt>jtree_unrolled_dbn_inf_engine</tt>,
+unrolls the DBN into a static network and applies jtree; however, for
+long sequences, this
+can be very slow and can result in numerical underflow.
+A better approach is to apply the jtree algorithm to pairs of
+neighboring slices at a time; this is implemented in
+<tt>jtree_dbn_inf_engine</tt>.
+
+<p>
+A DBN can be converted to an HMM if all the hidden nodes are discrete.
+In this case, you can use
+<tt>hmm_inf_engine</tt>. This is faster than jtree for small models
+because the constant factors of the algorithm are lower, but can be
+exponentially slower for models with many variables
+(e.g., > 6 binary hidden nodes).
+
+<p>
+The use of both
+<tt>jtree_dbn_inf_engine</tt>
+and
+<tt>hmm_inf_engine</tt>
+is deprecated.
+A better approach is to construct a smoother engine out of lower-level
+engines, which implement forward/backward operators.
+You can create these engines  as follows.
+<pre>
+engine = smoother_engine(hmm_2TBN_inf_engine(bnet));
+or
+engine = smoother_engine(jtree_2TBN_inf_engine(bnet));
+</pre>
+You then call them in the usual way:
+<pre>
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, nodes, t);
+</pre>
+Note: you must declare the observed nodes in the bnet before using
+hmm_2TBN_inf_engine. 
+
+
+<p>
+Unfortunately, when all the hiddden nodes are discrete,
+exact inference takes O(2^n) time, where n is the number of hidden
+nodes per slice,
+even if the model is sparse.
+The basic reason for this is that two nodes become correlated, even if
+there is no direct connection between them in the 2TBN,
+by virtue of sharing common ancestors in the past.
+Hence we need to use approximations.
+<p>
+A popular approximate inference algorithm for discrete DBNs, known as BK, is described in
+<ul>
+<li>
+<A HREF="http://robotics.Stanford.EDU/~xb/uai98/index.html">
+Tractable inference for complex stochastic processes </A>,
+Boyen and Koller, UAI 1998
+<li>
+<A HREF="http://robotics.Stanford.EDU/~xb/nips98/index.html">
+Approximate learning of dynamic models</a>, Boyen and Koller, NIPS
+1998.
+</ul>
+This approximates the belief state with a product of
+marginals on a specified set of clusters. For example, 
+in the water network, we might use the following clusters:
+<pre>
+engine = bk_inf_engine(bnet, { [1 2], [3 4 5 6], [7 8] });
+</pre>
+This engine can now be used just like the jtree engine.
+Two special cases of the BK algorithm are supported: 'ff' (fully
+factored) means each node has its own cluster, and 'exact' means there
+is 1 cluster that contains the whole slice. These can be created as
+follows:
+<pre>
+engine = bk_inf_engine(bnet, 'ff');
+engine = bk_inf_engine(bnet, 'exact');
+</pre>
+For pedagogical purposes, an implementation of BK-FF that uses an HMM
+instead of junction tree is available at
+<tt>bk_ff_hmm_inf_engine</tt>.
+
+
+
+<h2><a name="cts">Continuous hidden nodes</h2>
+
+If all the hidden nodes are linear-Gaussian, <em>and</em> the observed nodes are
+linear-Gaussian,
+the model is a <a href="http://www.cs.berkeley.edu/~murphyk/Bayes/kalman.html">
+linear dynamical system</a> (LDS).
+A DBN can be converted to an LDS if all the hidden nodes are linear-Gaussian
+and if they are all persistent. In this case, you can use
+<tt>kalman_inf_engine</tt>.
+For more general linear-gaussian models, you can use
+<tt>jtree_dbn_inf_engine</tt> or <tt>jtree_unrolled_dbn_inf_engine</tt>.
+
+<p>
+For nonlinear systems with Gaussian noise, the unscented Kalman filter (UKF),
+due to Julier and Uhlmann, is far superior to the well-known extended Kalman
+filter (EKF), both in theory and practice.
+<!--
+See
+<A HREF="http://phoebe.robots.ox.ac.uk/default.html">"A General Method for 
+Approximating Nonlinear Transformations of 
+Probability Distributions"</A>.
+(If the above link is down,
+try <a href="http://www.ece.ogi.edu/~ericwan/pubs.html">Eric Wan's</a>
+page, who has done a lot of work on the UKF.)
+<p>
+-->
+The key idea of the UKF is that it is easier to estimate a Gaussian distribution
+from a set of points than to approximate an arbitrary non-linear
+function.
+We start with points that are plus/minus sigma away from the mean along
+each dimension, and then pipe them through the nonlinearity, and
+then fit a Gaussian to the transformed points. 
+(No need to compute Jacobians, unlike the EKF!)
+
+<p>
+For systems with non-Gaussian noise, I recommend
+<a href="http://www.cs.berkeley.edu/~jfgf/smc/">Particle
+filtering</a> (PF), which is a popular sequential Monte Carlo technique.
+
+<p>
+The EKF can be used as a proposal distribution for a PF.
+This method is better than either one alone.
+See <a href="http://www.cs.berkeley.edu/~jfgf/upf.ps.gz">The Unscented Particle Filter</a>,
+by R van der Merwe, A Doucet, JFG de Freitas and E Wan, May 2000.
+<a href="http://www.cs.berkeley.edu/~jfgf/software.html">Matlab
+software</a> for the UPF is also available.
+<p>
+Note: none of this software is part of BNT.
+
+
+
+<h1><a name="learn">Learning</h1>
+
+Learning in DBNs can be done online or offline.
+Currently only offline learning is implemented in BNT.
+
+
+<h2><a name="param_learn">Parameter learning</h2>
+
+Offline parameter learning is very similar to learning in static networks,
+except now the training data is a cell-array of 2D cell-arrays.
+For example,
+cases{l}{i,t} is the value of node i in slice t in sequence l, or []
+if unobserved.
+Each sequence can be a different length, and may have missing values
+in arbitrary locations.
+Here is a typical code fragment for using EM.
+<pre>
+ncases = 2;
+cases = cell(1, ncases);
+for i=1:ncases
+  ev = sample_dbn(bnet, T);
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = ev(onodes, :);
+end
+[bnet2, LLtrace] = learn_params_dbn_em(engine, cases, 'max_iter', 10);
+</pre>
+If the observed node is vector-valued and stored in an OxT array, you
+need to assign each vector to a single cell, as in the following
+example.
+<pre>
+data = [xpos(:)'; ypos(:)']; 
+ncases = 1;
+cases = cell(1, ncases);
+onodes = bnet.observed;
+for i=1:ncases
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = num2cell(data(:,1:T), 1);
+end
+</pre>
+<p>
+For a complete code listing of how to do EM in a simple DBN, click
+<a href="dbn_hmm_demo.m">here</a>.
+
+<h2><a name="struct_learn">Structure learning</h2>
+
+There is currently only one structure learning algorithm for DBNs.
+This assumes all nodes are tabular and observed, and that there are
+no intra-slice connections. Hence we can find the optimal set of
+parents for each node separately, without worrying about directed
+cycles or node orderings.
+The function is called as follows
+<pre>
+inter = learn_struct_dbn_reveal(cases, ns, max_fan_in, penalty)
+</pre>
+A full example is given in BNT/examples/dynamic/reveal1.m.
+Setting the penalty term to 0 gives the maximum likelihood model; this
+is equivalent to maximizing the mutual information between parents and
+child (in the bioinformatics community, this is known as the REVEAL
+algorithm). A non-zero penalty invokes the BIC criterion, which
+lessens the chance of overfitting. 
+<p>
+<a href="http://www.bioss.sari.ac.uk/~dirk/software/DBmcmc/">
+Dirk Husmeier has extended MCMC model selection to DBNs</a>.
+
+</BODY>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/usage_dbn_02nov13.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,715 @@
+<HEAD>
+<TITLE>How to use BNT for DBNs</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+Documentation last updated on 13 November 2002
+
+<h1>How to use BNT for DBNs</h1>
+
+<p>
+<ul>
+<li> <a href="#spec">Model specification</a>
+<ul>
+<li> <a href="#hmm">HMMs</a>
+<li> <a href="#lds">Kalman filters</a>
+<li> <a href="#chmm">Coupled HMMs</a>
+<li> <a href="#water">Water network</a>
+<li> <a href="#bat">BAT network</a>
+</ul>
+
+<li> <a href="#inf">Inference</a>
+<ul>
+<li> <a href="#discrete">Discrete hidden nodes</a>
+<li> <a href="#cts">Continuous hidden nodes</a>
+</ul>
+
+<li> <a href="#learn">Learning</a>
+<ul>
+<li> <a href="#param_learn">Parameter learning</a>
+<li> <a href="#struct_learn">Structure learning</a>
+</ul>
+
+</ul>
+
+Note:
+you are recommended to read an introduction
+to DBNs first, such as
+<a href="http://www.ai.mit.edu/~murphyk/Papers/dbnchapter.pdf">
+this book chapter</a>.
+
+
+<h1><a name="spec">Model specification</h1>
+
+
+<!--<h1><a name="dbn_intro">Dynamic Bayesian Networks (DBNs)</h1>-->
+
+Dynamic Bayesian Networks (DBNs) are directed graphical models of stochastic
+processes.
+They generalise <a href="#hmm">hidden Markov models (HMMs)</a>
+and <a href="#lds">linear dynamical systems (LDSs)</a>
+by representing the hidden (and observed) state in terms of state
+variables, which can have complex interdependencies.
+The graphical structure provides an easy way to specify these
+conditional independencies, and hence to provide a compact
+parameterization of the model.
+<p>
+Note that "temporal Bayesian network" would be a better name than
+"dynamic Bayesian network", since
+it is assumed that the model structure does not change, but
+the term DBN has become entrenched.
+We also normally assume that the parameters do not
+change, i.e., the model is time-invariant.
+However, we can always add extra
+hidden nodes to represent the current "regime", thereby creating
+mixtures of models to capture periodic non-stationarities.
+<p>
+There are some cases where the size of the state space can change over
+time, e.g., tracking a variable, but unknown, number of objects.
+In this case, we need to change the model structure over time.
+BNT does not support this.
+<!--
+, but see the following paper for a
+discussion of some of the issues:
+<ul>
+<li> <a href="ftp://ftp.cs.monash.edu.au/pub/annn/smc.ps">
+Dynamic belief networks for discrete monitoring</a>,
+A. E. Nicholson and J. M. Brady. 
+IEEE Systems, Man and Cybernetics, 24(11):1593-1610, 1994. 
+</ul>
+-->
+
+
+<h2><a name="hmm">Hidden Markov Models (HMMs)</h2>
+
+The simplest kind of DBN is a Hidden Markov Model (HMM), which has
+one discrete hidden node and one discrete or continuous
+observed node per slice. We illustrate this below.
+As before, circles denote continuous nodes, squares denote
+discrete nodes, clear means hidden, shaded means observed.
+<!--
+(The observed nodes can be
+discrete or continuous; the crucial thing about an HMM is that the
+hidden nodes are discrete, so the system can model arbitrary dynamics
+-- providing, of course, that the hidden state space is large enough.)
+-->
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+We have "unrolled" the model for three "time slices" -- the structure and parameters are
+assumed to repeat as the model is unrolled further.
+Hence to specify a DBN, we need to
+define the intra-slice topology (within a slice),
+the inter-slice topology (between two slices),
+as well as the parameters for the first two slices.
+(Such a two-slice temporal Bayes net is often called a 2TBN.)
+<p>
+We can specify the topology as follows.
+<PRE>
+intra = zeros(2);
+intra(1,2) = 1; % node 1 in slice t connects to node 2 in slice t
+
+inter = zeros(2);
+inter(1,1) = 1; % node 1 in slice t-1 connects to node 1 in slice t
+</pre>
+We can specify the parameters as follows,
+where for simplicity we assume the observed node is discrete.
+<pre>
+Q = 2; % num hidden states
+O = 2; % num observable symbols
+
+ns = [Q O];
+dnodes = 1:2;
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes);
+for i=1:4
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+</pre>
+<p>
+We assume the distributions P(X(t) | X(t-1)) and
+P(Y(t) | X(t)) are independent of t for t > 1.
+Hence the CPD for nodes 5, 7, ... is the same as for node 3, so we say they
+are in the same equivalence class, with node 3 being the "representative"
+for this class. In other words, we have tied the parameters for nodes
+3, 5, 7, ...
+Similarly, nodes 4, 6, 8, ... are tied.
+Note, however, that (the parameters for) nodes 1 and 2 are not tied to
+subsequent slices.
+<p>
+Above we assumed the observation model P(Y(t) | X(t)) is independent of t for t>1, but
+it is conventional to assume this is true for all t.
+So we would like to put nodes 2, 4, 6, ... all in the same class.
+We can do this by explicitely defining the equivalence classes, as
+follows (see <a href="usage.html#tying">here</a> for more details on
+parameter tying).
+<p>
+We define eclass1(i) to be the equivalence class that node i in slice
+1 belongs to.
+Similarly, we define eclass2(i) to be the equivalence class that node i in slice
+2, 3, ..., belongs to.
+For an HMM, we have
+<pre>
+eclass1 = [1 2];
+eclass2 = [3 2];
+eclass = [eclass1 eclass2];
+</pre>
+This ties the observation model across slices,
+since e.g., eclass(4) = eclass(2) = 2.
+<p>
+By default,
+eclass1 = 1:ss, and eclass2 = (1:ss)+ss, where ss = slice size = the
+number of nodes per slice.
+<!--This will tie nodes in slices 3, 4, ... to the the nodes in slice 2,
+but none of the nodes in slice 2 to any in slice 1.-->
+But by using the above tieing pattern,
+we now only have 3 CPDs to specify, instead of 4:
+<pre>
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+prior0 = normalise(rand(Q,1));
+transmat0 = mk_stochastic(rand(Q,Q));
+obsmat0 = mk_stochastic(rand(Q,O));
+bnet.CPD{1} = tabular_CPD(bnet, 1, prior0);
+bnet.CPD{2} = tabular_CPD(bnet, 2, obsmat0);
+bnet.CPD{3} = tabular_CPD(bnet, 3, transmat0);
+</pre>
+We discuss how to do <a href="#inf">inference</a> and <a href="#learn">learning</a> on this model
+below.
+(See also
+my <a href="../HMM/hmm.html">HMM toolbox</a>, which is included with BNT.)
+
+<p>
+Some common variants on HMMs are shown below.
+BNT can handle all of these.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/hmm_gauss.gif">
+<td><img src="Figures/hmm_mixgauss.gif"
+<td><img src="Figures/hmm_ar.gif">
+<tr>
+<td><img src="Figures/hmm_factorial.gif">
+<td><img src="Figures/hmm_coupled.gif"
+<td><img src="Figures/hmm_io.gif">
+<tr>
+</table>
+</center>
+
+
+
+<h2><a name="lds">Linear Dynamical Systems (LDSs) and Kalman filters</h2>
+
+A Linear Dynamical System (LDS) has the same topology as an HMM, but
+all the nodes are assumed to have linear-Gaussian distributions, i.e.,
+<pre>
+   x(t+1) = A*x(t) + w(t),  w ~ N(0, Q),  x(0) ~ N(init_x, init_V)
+   y(t)   = C*x(t) + v(t),  v ~ N(0, R)
+</pre>
+Some simple variants are shown below.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/ar1.gif">
+<td><img src="Figures/sar.gif">
+<td><img src="Figures/kf.gif">
+<td><img src="Figures/skf.gif">
+</table>
+</center>
+<p>
+
+We can create a regular LDS in BNT as follows.
+<pre>
+
+intra = zeros(2);
+intra(1,2) = 1;
+inter = zeros(2);
+inter(1,1) = 1;
+n = 2;
+
+X = 2; % size of hidden state
+Y = 2; % size of observable state
+
+ns = [X Y];
+dnodes = [];
+onodes = [2];
+eclass1 = [1 2];
+eclass2 = [3 2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+
+x0 = rand(X,1);
+V0 = eye(X); % must be positive semi definite!
+C0 = rand(Y,X);
+R0 = eye(Y);
+A0 = rand(X,X);
+Q0 = eye(X);
+
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', x0, 'cov', V0, 'cov_prior_weight', 0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(Y,1), 'cov', R0, 'weights', C0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', zeros(X,1), 'cov', Q0, 'weights', A0, ...
+			   'clamp_mean', 1, 'cov_prior_weight', 0);
+</pre>
+We discuss how to do <a href="#inf">inference</a> and <a href="#learn">learning</a> on this model
+below.
+(See also
+my <a href="../Kalman/kalman.html">Kalman filter toolbox</a>, which is included with BNT.)
+<p>
+
+
+<h2><a name="chmm">Coupled HMMs</h2>
+
+Here is an example of a coupled HMM with N=5 chains, unrolled for T=3
+slices. Each hidden discrete node has a private observed Gaussian
+child.
+<p>
+<img src="Figures/chmm5.gif">
+<p>
+We can make this using the function
+<pre>
+Q = 2; % binary hidden nodes
+discrete_obs = 0; % cts observed nodes
+Y = 1; % scalar observed nodes
+bnet = mk_chmm(N, Q, Y, discrete_obs);
+</pre>
+
+<!--We will use this model <a href="#pred">below</a> to illustrate online prediction.-->
+
+
+
+<h2><a name="water">Water network</h2>
+
+Consider the following model
+of a water purification plant, developed
+by Finn V. Jensen, Uffe Kjærulff, Kristian G. Olesen, and Jan
+Pedersen.
+<!--
+The clear nodes represent the hidden state of the system in
+factored form, and the shaded nodes represent the observations in
+factored form.
+-->
+<!--
+(Click <a
+href="http://www-nt.cs.berkeley.edu/home/nir/public_html/Repository/water.htm">here</a>
+for more details on this model.
+Following Boyen and Koller, we have added discrete evidence nodes.)
+-->
+<!--
+We have "unrolled" the model for three "time slices" -- the structure and parameters are
+assumed to repeat as the model is unrolled further.
+Hence to specify a DBN, we need to
+define the intra-slice topology (within a slice),
+the inter-slice topology (between two slices),
+as well as the parameters for the first two slices.
+(Such a two-slice temporal Bayes net is often called a 2TBN.)
+-->
+<p>
+<center>
+<IMG SRC="Figures/water3_75.gif">
+</center>
+We now show how to specify this model in BNT.
+<pre>
+ss = 12; % slice size
+intra = zeros(ss);
+intra(1,9) = 1;
+intra(3,10) = 1;
+intra(4,11) = 1;
+intra(8,12) = 1;
+
+inter = zeros(ss);
+inter(1, [1 3]) = 1; % node 1 in slice 1 connects to nodes 1 and 3 in slice 2
+inter(2, [2 3 7]) = 1;
+inter(3, [3 4 5]) = 1;
+inter(4, [3 4 6]) = 1;
+inter(5, [3 5 6]) = 1;
+inter(6, [4 5 6]) = 1;
+inter(7, [7 8]) = 1;
+inter(8, [6 7 8]) = 1;
+
+onodes = 9:12; % observed
+dnodes = 1:ss; % discrete
+ns = 2*ones(1,ss); % binary nodes
+eclass1 = 1:12;
+eclass2 = [13:20 9:12];
+eclass = [eclass1 eclass2];
+bnet = mk_dbn(intra, inter, ns, 'discrete', dnodes, 'eclass1', eclass1, 'eclass2', eclass2);
+for e=1:max(eclass)
+  bnet.CPD{e} = tabular_CPD(bnet, e);
+end
+</pre>
+We have tied the observation parameters across all slices.
+Click <a href="param_tieing.html">here</a> for a more complex example
+of parameter tieing.
+
+<!--
+Let X(i,t) denote the i'th hidden node in slice t,
+and Y(i,y) denote the i'th observed node in slice t.
+We also use the notation Nj to refer to the j'th node in the
+unrolled network, e.g., N25 = X(1,3), N33 = Y(1,3).
+<p>
+We assume the distributions P(X(i,t) | X(i,t-1)) and
+P(Y(i,t) | X(i,t)) are independent of t for t > 1 and for all i.
+Hence the CPD for N25, N37, ... is the same as for N13, so we say they
+are in the same equivalence class, with N13 being the "representative"
+for this class. In other words, we have tied the parameters for nodes
+N13, N25, N37, ...
+Note, however, that the parameters for the nodes in the first slice
+are not tied, so each equivalence class for nodes 1..12 contains a
+single node.
+<p>
+Above we assumed P(Y(i,t) | X(i,t)) is independent of t for t>1, but
+it is conventional to assume this is true for all t.
+So we would like to put N9, N21, N33, ... all in the same class, and
+similarly for the other observed nodes.
+We can do this by explicitely defining the equivalence classes, as
+follows.
+<p>
+We define eclass1(i) to be the equivalence class that node i in slice
+1 belongs to.
+Similarly, we define eclass2(i) to be the equivalence class that node i in slice
+2, 3, ..., belongs to.
+For the water model, we have
+<pre>
+</pre>
+This ties the observation model across slices,
+since e.g., eclass(9) = eclass(21) = 9, so Y(1,1) and Y(1,2) belong to the
+same class.
+<p>
+By default,
+eclass1 = 1:ss, and eclass2 = (1:ss)+ss, where ss = slice size = the
+number of nodes per slice.
+This will tie nodes in slices 3, 4, ... to the the nodes in slice 2,
+but none of the nodes in slice 2 to any in slice 1.
+By using the above tieing pattern,
+we now only have 20 CPDs to specify, instead of 24:
+<pre>
+bnet = mk_dbn(intra, inter, ns, dnodes, eclass1, eclass2);
+for e=1:max(eclass)
+  bnet.CPD{e} = tabular_CPD(bnet, e);
+end
+</pre>
+-->
+
+
+
+<h2><a name="bat">BATnet</h2>
+
+As an example of a more complicated DBN, consider the following
+example,
+which is a model of a car's high level state, as might be used by
+an automated car.
+(The model is from Forbes, Huang, Kanazawa and Russell, "The BATmobile: Towards a
+Bayesian Automated Taxi", IJCAI 95. The figure is from
+Boyen and Koller, "Tractable Inference for Complex Stochastic
+Processes", UAI98.
+For simplicity, we only show the observed nodes for slice 2.)
+<p>
+<center>
+<IMG SRC="Figures/batnet.gif">
+</center>
+<p>
+Since this topology is so complicated,
+it is useful to be able to refer to the nodes by name, instead of
+number.
+<pre>
+names = {'LeftClr', 'RightClr', 'LatAct', ... 'Bclr', 'BYdotDiff'};
+ss = length(names);
+</pre>
+We can specify the intra-slice topology using a cell array as follows,
+where each row specifies a connection between two named nodes:
+<pre>
+intrac = {...
+   'LeftClr', 'LeftClrSens';
+  'RightClr', 'RightClrSens';
+  ...
+  'BYdotDiff', 'BcloseFast'};
+</pre>
+Finally, we can convert this cell array to an adjacency matrix using
+the following function:
+<pre>
+[intra, names] = mk_adj_mat(intrac, names, 1);
+</pre>
+This function also permutes the names so that they are in topological
+order.
+Given this ordering of the names, we can make the inter-slice
+connectivity matrix as follows:
+<pre>
+interc = {...
+   'LeftClr', 'LeftClr';
+   'LeftClr', 'LatAct';
+   ...
+   'FBStatus', 'LatAct'};
+
+inter = mk_adj_mat(interc, names, 0);  
+</pre>
+
+To refer to a node, we must know its number, which can be computed as
+in the following example:
+<pre>
+obs = {'LeftClrSens', 'RightClrSens', 'TurnSignalSens', 'XdotSens', 'YdotSens', 'FYdotDiffSens', ...
+      'FclrSens', 'BXdotSens', 'BclrSens', 'BYdotDiffSens'};
+for i=1:length(obs)
+  onodes(i) = stringmatch(obs{i}, names);
+end
+onodes = sort(onodes);
+</pre>
+(We sort the onodes since most BNT routines assume that set-valued
+arguments are in sorted order.)
+We can now make the DBN:
+<pre>
+dnodes = 1:ss; 
+ns = 2*ones(1,ss); % binary nodes
+bnet = mk_dbn(intra, inter, ns, 'iscrete', dnodes);
+</pre>
+To specify the parameters, we must know the order of the parents.
+See the function BNT/general/mk_named_CPT for a way to do this in the
+case of tabular nodes. For simplicity, we just generate random
+parameters:
+<pre>
+for i=1:2*ss
+  bnet.CPD{i} = tabular_CPD(bnet, i);
+end
+</pre>
+A complete version of this example is available in BNT/examples/dynamic/bat1.m.
+
+
+
+
+<h1><a name="inf">Inference</h1>
+
+
+The general inference problem for DBNs is to compute
+P(X(i,t0) | Y(:, t1:t2)), where X(i,t) represents the i'th hidden
+variable at time t and  Y(:,t1:t2) represents all the evidence
+between times t1 and t2. 
+There are several special cases of interest, illustrated below.
+The arrow indicates t0: it is X(t0) that we are trying to estimate.
+The shaded region denotes t1:t2, the available data.
+<p>
+
+<img src="Figures/filter.gif">
+
+<p>
+BNT can currently only handle offline smoothing.
+(The HMM engine handles filtering and, to a limited extent, prediction.)
+The usage is similar to static
+inference engines, except now the evidence is a 2D cell array of
+size ss*T, where ss is the number of nodes per slice (ss = slice sizee)  and T is the
+number of slices.
+Also, 'marginal_nodes' takes two arguments, the nodes and the time-slice.
+For example, to compute P(X(i,t) | y(:,1:T)), we proceed as follows
+(where onodes are the indices of the observedd nodes in each slice,
+which correspond to y):
+<pre>
+ev = sample_dbn(bnet, T);
+evidence = cell(ss,T);
+evidence(onodes,:) = ev(onodes, :); % all cells besides onodes are empty
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, i, t);
+</pre>
+
+
+<h2><a name="discrete">Discrete hidden nodes</h2>
+
+If all the hidden nodes are discrete,
+we can use the junction tree algorithm to perform inference.
+The simplest approach,
+<tt>jtree_unrolled_dbn_inf_engine</tt>,
+unrolls the DBN into a static network and applies jtree; however, for
+long sequences, this
+can be very slow and can result in numerical underflow.
+A better approach is to apply the jtree algorithm to pairs of
+neighboring slices at a time; this is implemented in
+<tt>jtree_dbn_inf_engine</tt>.
+
+<p>
+A DBN can be converted to an HMM if all the hidden nodes are discrete.
+In this case, you can use
+<tt>hmm_inf_engine</tt>. This is faster than jtree for small models
+because the constant factors of the algorithm are lower, but can be
+exponentially slower for models with many variables
+(e.g., > 6 binary hidden nodes).
+
+<p>
+The use of both
+<tt>jtree_dbn_inf_engine</tt>
+and
+<tt>hmm_inf_engine</tt>
+is deprecated.
+A better approach is to construct a smoother engine out of lower-level
+engines, which implement forward/backward operators.
+You can create these engines  as follows.
+<pre>
+engine = smoother_engine(hmm_2TBN_inf_engine(bnet));
+or
+engine = smoother_engine(jtree_2TBN_inf_engine(bnet));
+</pre>
+You then call them in the usual way:
+<pre>
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, nodes, t);
+</pre>
+Note: you must declare the observed nodes in the bnet before using
+hmm_2TBN_inf_engine. 
+
+
+<p>
+Unfortunately, when all the hiddden nodes are discrete,
+exact inference takes O(2^n) time, where n is the number of hidden
+nodes per slice,
+even if the model is sparse.
+The basic reason for this is that two nodes become correlated, even if
+there is no direct connection between them in the 2TBN,
+by virtue of sharing common ancestors in the past.
+Hence we need to use approximations.
+<p>
+A popular approximate inference algorithm for discrete DBNs, known as BK, is described in
+<ul>
+<li>
+<A HREF="http://robotics.Stanford.EDU/~xb/uai98/index.html">
+Tractable inference for complex stochastic processes </A>,
+Boyen and Koller, UAI 1998
+<li>
+<A HREF="http://robotics.Stanford.EDU/~xb/nips98/index.html">
+Approximate learning of dynamic models</a>, Boyen and Koller, NIPS
+1998.
+</ul>
+This approximates the belief state with a product of
+marginals on a specified set of clusters. For example, 
+in the water network, we might use the following clusters:
+<pre>
+engine = bk_inf_engine(bnet, { [1 2], [3 4 5 6], [7 8] });
+</pre>
+This engine can now be used just like the jtree engine.
+Two special cases of the BK algorithm are supported: 'ff' (fully
+factored) means each node has its own cluster, and 'exact' means there
+is 1 cluster that contains the whole slice. These can be created as
+follows:
+<pre>
+engine = bk_inf_engine(bnet, 'ff');
+engine = bk_inf_engine(bnet, 'exact');
+</pre>
+For pedagogical purposes, an implementation of BK-FF that uses an HMM
+instead of junction tree is available at
+<tt>bk_ff_hmm_inf_engine</tt>.
+
+
+
+<h2><a name="cts">Continuous hidden nodes</h2>
+
+If all the hidden nodes are linear-Gaussian, <em>and</em> the observed nodes are
+linear-Gaussian,
+the model is a <a href="http://www.cs.berkeley.edu/~murphyk/Bayes/kalman.html">
+linear dynamical system</a> (LDS).
+A DBN can be converted to an LDS if all the hidden nodes are linear-Gaussian
+and if they are all persistent. In this case, you can use
+<tt>kalman_inf_engine</tt>.
+For more general linear-gaussian models, you can use
+<tt>jtree_dbn_inf_engine</tt> or <tt>jtree_unrolled_dbn_inf_engine</tt>.
+
+<p>
+For nonlinear systems with Gaussian noise, the unscented Kalman filter (UKF),
+due to Julier and Uhlmann, is far superior to the well-known extended Kalman
+filter (EKF), both in theory and practice.
+<!--
+See
+<A HREF="http://phoebe.robots.ox.ac.uk/default.html">"A General Method for 
+Approximating Nonlinear Transformations of 
+Probability Distributions"</A>.
+(If the above link is down,
+try <a href="http://www.ece.ogi.edu/~ericwan/pubs.html">Eric Wan's</a>
+page, who has done a lot of work on the UKF.)
+<p>
+-->
+The key idea of the UKF is that it is easier to estimate a Gaussian distribution
+from a set of points than to approximate an arbitrary non-linear
+function.
+We start with points that are plus/minus sigma away from the mean along
+each dimension, and then pipe them through the nonlinearity, and
+then fit a Gaussian to the transformed points. 
+(No need to compute Jacobians, unlike the EKF!)
+
+<p>
+For systems with non-Gaussian noise, I recommend
+<a href="http://www.cs.berkeley.edu/~jfgf/smc/">Particle
+filtering</a> (PF), which is a popular sequential Monte Carlo technique.
+
+<p>
+The EKF can be used as a proposal distribution for a PF.
+This method is better than either one alone.
+See <a href="http://www.cs.berkeley.edu/~jfgf/upf.ps.gz">The Unscented Particle Filter</a>,
+by R van der Merwe, A Doucet, JFG de Freitas and E Wan, May 2000.
+<a href="http://www.cs.berkeley.edu/~jfgf/software.html">Matlab
+software</a> for the UPF is also available.
+<p>
+Note: none of this software is part of BNT.
+
+
+
+<h1><a name="learn">Learning</h1>
+
+Learning in DBNs can be done online or offline.
+Currently only offline learning is implemented in BNT.
+
+
+<h2><a name="param_learn">Parameter learning</h2>
+
+Offline parameter learning is very similar to learning in static networks,
+except now the training data is a cell-array of 2D cell-arrays.
+For example,
+cases{l}{i,t} is the value of node i in slice t in sequence l, or []
+if unobserved.
+Each sequence can be a different length, and may have missing values
+in arbitrary locations.
+Here is a typical code fragment for using EM.
+<pre>
+ncases = 2;
+cases = cell(1, ncases);
+for i=1:ncases
+  ev = sample_dbn(bnet, T);
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = ev(onodes, :);
+end
+[bnet2, LLtrace] = learn_params_dbn_em(engine, cases, 'max_iter', 10);
+</pre>
+If the observed node is vector-valued and stored in an OxT array, you
+need to assign each vector to a single cell, as in the following
+example.
+<pre>
+data = [xpos(:)'; ypos(:)']; 
+ncases = 1;
+cases = cell(1, ncases);
+onodes = bnet.observed;
+for i=1:ncases
+  cases{i} = cell(ss,T);
+  cases{i}(onodes,:) = num2cell(data(:,1:T), 1);
+end
+</pre>
+<p>
+For a complete code listing of how to do EM in a simple DBN, click
+<a href="dbn_hmm_demo.m">here</a>.
+
+<h2><a name="struct_learn">Structure learning</h2>
+
+There is currently only one structure learning algorithm for DBNs.
+This assumes all nodes are tabular and observed, and that there are
+no intra-slice connections. Hence we can find the optimal set of
+parents for each node separately, without worrying about directed
+cycles or node orderings.
+The function is called as follows
+<pre>
+inter = learn_struct_dbn_reveal(cases, ns, max_fan_in, penalty)
+</pre>
+A full example is given in BNT/examples/dynamic/reveal1.m.
+Setting the penalty term to 0 gives the maximum likelihood model; this
+is equivalent to maximizing the mutual information between parents and
+child (in the bioinformatics community, this is known as the REVEAL
+algorithm). A non-zero penalty invokes the BIC criterion, which
+lessens the chance of overfitting. 
+<p>
+<a href="http://www.bioss.sari.ac.uk/~dirk/software/DBmcmc/">
+Dirk Husmeier has extended MCMC model selection to DBNs</a>.
+
+</BODY>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/usage_sf.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3242 @@
+<HEAD>
+<TITLE>How to use the Bayes Net Toolbox</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF">
+<!-- white background is better for the pictures and equations -->
+
+<h1>How to use the Bayes Net Toolbox</h1>
+
+This documentation was last updated on 7 June 2004.
+<br>
+Click <a href="changelog.html">here</a> for a list of changes made to
+BNT.
+<br>
+Click 
+<a href="http://bnt.insa-rouen.fr/">here</a>
+for a French version of this documentation (which might not
+be up-to-date).
+<br>
+Update 23 May 2005:
+Philippe LeRay has written
+a
+<a href="http://banquiseasi.insa-rouen.fr/projects/bnt-editor/">
+BNT GUI</a>
+and
+<a href="http://banquiseasi.insa-rouen.fr/projects/bnt-slp/">
+BNT Structure Learning Package</a>.
+
+<p>
+
+<ul>
+<li> <a href="#install">Installation</a>
+<ul>
+<li> <a href="#install">Installing the Matlab code</a>
+<li> <a href="#installC">Installing the C code</a>
+<li> <a href="../matlab_tips.html">Useful Matlab tips</a>.
+</ul>
+
+<li> <a href="#basics">Creating your first Bayes net</a>
+  <ul>
+  <li> <a href="#basics">Creating a model by hand</a>
+  <li> <a href="#file">Loading a model from a file</a>
+  <li> <a href="http://bnt.insa-rouen.fr/ajouts.html">Creating a model using a GUI</a>
+  </ul>
+
+<li> <a href="#inference">Inference</a>
+  <ul>
+  <li> <a href="#marginal">Computing marginal distributions</a>
+  <li> <a href="#joint">Computing joint distributions</a>
+  <li> <a href="#soft">Soft/virtual evidence</a>
+  <li> <a href="#mpe">Most probable explanation</a>
+  </ul>
+
+<li> <a href="#cpd">Conditional Probability Distributions</a>
+  <ul>
+  <li> <a href="#tabular">Tabular (multinomial) nodes</a>
+  <li> <a href="#noisyor">Noisy-or nodes</a>
+  <li> <a href="#deterministic">Other (noisy) deterministic nodes</a>
+  <li> <a href="#softmax">Softmax (multinomial logit) nodes</a>
+  <li> <a href="#mlp">Neural network nodes</a>
+  <li> <a href="#root">Root nodes</a>
+  <li> <a href="#gaussian">Gaussian nodes</a>
+  <li> <a href="#glm">Generalized linear model nodes</a>
+  <li> <a href="#dtree">Classification/regression tree nodes</a>
+  <li> <a href="#nongauss">Other continuous distributions</a>
+  <li> <a href="#cpd_summary">Summary of CPD types</a>
+  </ul>
+
+<li> <a href="#examples">Example models</a>
+  <ul>
+  <li> <a
+  href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">
+Gaussian mixture models</a>
+  <li> <a href="#pca">PCA, ICA, and all that</a>
+  <li> <a href="#mixep">Mixtures of experts</a>
+  <li> <a href="#hme">Hierarchical mixtures of experts</a>
+  <li> <a href="#qmr">QMR</a>
+  <li> <a href="#cg_model">Conditional Gaussian models</a>
+  <li> <a href="#hybrid">Other hybrid models</a>
+  </ul>
+
+<li> <a href="#param_learning">Parameter learning</a>
+  <ul>
+  <li> <a href="#load_data">Loading data from a file</a>
+  <li> <a href="#mle_complete">Maximum likelihood parameter estimation from complete data</a>
+  <li> <a href="#prior">Parameter priors</a>
+  <li> <a href="#bayes_learn">(Sequential) Bayesian parameter updating from complete data</a>
+  <li> <a href="#em">Maximum likelihood parameter estimation with  missing values (EM)</a>
+  <li> <a href="#tying">Parameter tying</a>
+  </ul>
+
+<li> <a href="#structure_learning">Structure learning</a>
+  <ul>
+  <li> <a href="#enumerate">Exhaustive search</a>
+  <li> <a href="#K2">K2</a>
+  <li> <a href="#hill_climb">Hill-climbing</a>
+  <li> <a href="#mcmc">MCMC</a>
+  <li> <a href="#active">Active learning</a>
+  <li> <a href="#struct_em">Structural EM</a>
+  <li> <a href="#graphdraw">Visualizing the learned graph  structure</a>
+  <li> <a href="#constraint">Constraint-based methods</a>
+  </ul>
+
+
+<li> <a href="#engines">Inference engines</a>
+  <ul>
+  <li> <a href="#jtree">Junction tree</a>
+  <li> <a href="#varelim">Variable elimination</a>
+  <li> <a href="#global">Global inference methods</a>
+  <li> <a href="#quickscore">Quickscore</a>
+  <li> <a href="#belprop">Belief propagation</a>
+  <li> <a href="#sampling">Sampling (Monte Carlo)</a>
+  <li> <a href="#engine_summary">Summary of inference engines</a>
+  </ul>
+
+
+<li> <a href="#influence">Influence diagrams/ decision making</a>
+
+
+<li> <a href="usage_dbn.html">DBNs, HMMs, Kalman filters and all that</a>
+</ul>
+
+</ul>
+
+
+
+
+<h1><a name="install">Installation</h1>
+
+<h2><a name="installM">Installing the Matlab code</h2>
+
+<ul>
+<li> <a href="bnt_download.html">Download</a> the FullBNT.zip file.
+
+<p>
+<li> Unpack the file. In Unix, type
+<!--"tar xvf BNT.tar".-->
+"unzip FullBNT.zip".
+In Windows, use
+a program like <a href="http://www.winzip.com">Winzip</a>. This will
+create a directory called FullBNT, which contains BNT and other libraries.
+(Files ending in ~ or # are emacs backup files, and can be ignored.)
+
+<p>
+<li> Read the file <tt>BNT/README.txt</tt> to make sure the date
+matches the one on the top of <a href=bnt.html>the BNT home page</a>.
+If not, you may need to press 'refresh' on your browser, and download
+again, to get the most recent version.
+
+<p>
+<li> <b>Edit the file "FullBNT/BNT/add_BNT_to_path.m"</b> so it contains the correct
+pathname.
+For example, in Windows,
+I download FullBNT.zip into C:\kmurphy\matlab, and 
+then ensure the second lines reads
+<pre>
+BNT_HOME = 'C:\kmurphy\matlab\FullBNT';
+</pre>
+
+<p>
+<li> Start up Matlab.
+
+<p>
+<li> Type "ver" at the Matlab prompt (">>").
+<b>You need Matlab version 5.2 or newer to run BNT</b>.
+(Versions 5.0 and 5.1 have a memory leak which seems to sometimes
+crash BNT.)
+<b>BNT will not run on Octave</b>.
+
+<p>
+<li> Move to the BNT directory.
+For example, in Windows, I type
+<pre>
+>> cd C:\kpmurphy\matlab\FullBNT\BNT
+</pre>
+
+<p>
+<li> Type "add_BNT_to_path".
+This executes the command
+<tt>addpath(genpath(BNT_HOME))</tt>,
+which adds all directories below FullBNT to the matlab path.
+
+<p>
+<li> Type "test_BNT".
+
+If all goes well, this will produce a bunch of numbers and maybe some
+warning messages (which you can ignore), but no error messages.
+(The warnings should only be of the form
+"Warning: Maximum number of iterations has been exceeded", and are
+produced by Netlab.)
+
+<p>
+<li> Problems? Did you remember to
+<b>Edit the file "FullBNT/BNT/add_BNT_to_path.m"</b> so it contains
+the right path??
+
+<p>
+<li> <a href="http://groups.yahoo.com/group/BayesNetToolbox/join">
+Join the BNT email list</a>
+
+<p>
+<li>Read
+<a href="../matlab_tips.html">some useful Matlab tips</a>.
+<!--
+For instance, this explains how to create a startup file, which can be
+used to set your path variable automatically, so you can avoid having
+to type the above commands every time.
+-->
+
+</ul>
+
+
+
+<h2><a name="installC">Installing the C code</h2>
+
+Some BNT functions also have C implementations.
+<b>It is not necessary to install the C code</b>, but it can result in a speedup
+of a factor of 2-5.
+To install all the C code, 
+edit installC_BNT.m so it contains the right path,
+then type <tt>installC_BNT</tt>.
+(Ignore warnings of the form 'invalid white space character in directive'.)
+To uninstall all the C code,
+edit uninstallC_BNT.m so it contains the right path,
+then type <tt>uninstallC_BNT</tt>.
+For an up-to-date list of the files which have C implementations, see
+BNT/installC_BNT.m.
+
+<p>
+mex is a script that lets you call C code from Matlab - it does not compile matlab to
+C (see mcc below).
+If your C/C++ compiler  is set up correctly, mex should work out of
+the box.
+If not, you might need to type
+<p>
+<tt> mex -setup</tt>
+<p>
+before calling installC.
+<p>
+To make mex call gcc on Windows,
+you must install <a
+href="http://www.mrc-cbu.cam.ac.uk/Imaging/gnumex20.html">gnumex</a>.
+You can use the <a href="http://www.mingw.org/">minimalist GNU for
+Windows</a> version of gcc, or
+the <a href="http://sources.redhat.com/cygwin/">cygwin</a> version.
+<p>
+In general, typing 
+'mex foo.c' from inside Matlab creates a file called
+'foo.mexglx' or 'foo.dll' (the exact file
+extension is system dependent - on Linux it is 'mexglx', on Windows it is '.dll').
+The resulting file will hide the original 'foo.m' (if it existed), i.e., 
+typing 'foo' at the prompt will call the compiled C version.
+To reveal the original matlab version, just delete foo.mexglx (this is
+what uninstallC does).
+<p>
+Sometimes it takes time for Matlab to realize that the file has
+changed from matlab to C or vice versa; try typing 'clear all' or
+restarting Matlab to refresh it.
+To find out which version of a file you are running, type
+'which foo'.
+<p>
+<a href="http://www.mathworks.com/products/compiler">mcc</a>, the
+Matlab to C compiler, is a separate product, 
+and is quite different from mex. It does not yet support
+objects/classes, which is why we can't compile all of BNT to C automatically.
+Also, hand-written C code is usually much
+better than the C code generated by mcc.
+
+
+<p>
+Acknowledgements:
+Most of the C code (e.g., for jtree and dpot) was written by Wei Hu;
+the triangulation C code was written by Ilya Shpitser;
+the Gibbs sampling C code (for discrete nodes) was written by Bhaskara
+Marthi.
+
+
+
+<h1><a name="basics">Creating your first Bayes net</h1>
+
+To define a Bayes net, you must specify the graph structure and then
+the parameters. We look at each in turn, using a simple example
+(adapted from Russell and
+Norvig, "Artificial Intelligence: a Modern Approach", Prentice Hall,
+1995, p454).
+
+
+<h2>Graph structure</h2>
+
+
+Consider the following network.
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler.gif">
+</center>
+<p>
+
+<P>
+To specify this directed acyclic graph (dag), we create an adjacency matrix:
+<PRE>
+N = 4; 
+dag = zeros(N,N);
+C = 1; S = 2; R = 3; W = 4;
+dag(C,[R S]) = 1;
+dag(R,W) = 1;
+dag(S,W)=1;
+</PRE>
+<P>
+We have numbered the nodes as follows:
+Cloudy = 1, Sprinkler = 2, Rain = 3, WetGrass = 4.
+<b>The nodes must always be numbered in topological order, i.e.,
+ancestors before descendants.</b>
+For a more complicated graph, this is a little inconvenient: we will
+see how to get around this <a href="usage_dbn.html#bat">below</a>.
+<p>
+In Matlab 6, you can use logical arrays instead of double arrays,
+which are 4 times smaller:
+<pre>
+dag = false(N,N);
+dag(C,[R S]) = true;
+...
+</pre>
+However, <b>some graph functions (eg acyclic) do not work on
+logical arrays</b>!
+<p>
+A preliminary attempt to make a <b>GUI</b>
+has been writte by Philippe LeRay and can be downloaded
+from <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+<p>
+You can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>.
+
+<h2>Creating the Bayes net shell</h2>
+
+In addition to specifying the graph structure,
+we must specify the size and type of each node.
+If a node is discrete, its size is the
+number of possible values
+each node can take on; if a node is continuous,
+it can be a vector, and its size is the length of this vector.
+In this case, we will assume all nodes are discrete and binary.
+<PRE>
+discrete_nodes = 1:N;
+node_sizes = 2*ones(1,N); 
+</pre>
+If the nodes were not binary, you could type e.g., 
+<pre>
+node_sizes = [4 2 3 5];
+</pre>
+meaning that Cloudy has 4 possible values, 
+Sprinkler has 2 possible values, etc.
+Note that these are cardinal values, not ordinal, i.e., 
+they are not ordered in any way, like 'low', 'medium', 'high'.
+<p>
+We are now ready to make the Bayes net:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);
+</PRE>
+By default, all nodes are assumed to be discrete, so we can also just
+write
+<pre>
+bnet = mk_bnet(dag, node_sizes);
+</PRE>
+You may also specify which nodes will be observed.
+If you don't know, or if this not fixed in advance,
+just use the empty list (the default).
+<pre>
+onodes = [];
+bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes, 'observed', onodes);
+</PRE>
+Note that optional arguments are specified using a name/value syntax.
+This is common for many BNT functions.
+In general, to find out more about a function (e.g., which optional
+arguments it takes), please see its
+documentation string by typing
+<pre>
+help mk_bnet
+</pre>
+See also other <a href="matlab_tips.html">useful Matlab tips</a>.
+<p>
+It is possible to associate names with nodes, as follows:
+<pre>
+bnet = mk_bnet(dag, node_sizes, 'names', {'cloudy','S','R','W'}, 'discrete', 1:4);
+</pre>
+You can then refer to a node by its name:
+<pre>
+C = bnet.names('cloudy'); % bnet.names is an associative array
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+</pre>
+This feature uses my own associative array class.
+
+
+<h2><a name="cpt">Parameters</h2>
+
+A model consists of the graph structure and the parameters.
+The parameters are represented by CPD objects (CPD = Conditional
+Probability Distribution), which define the probability distribution
+of a node given its parents.
+(We will use the terms "node" and "random variable" interchangeably.)
+The simplest kind of CPD is a table (multi-dimensional array), which
+is suitable when all the nodes are discrete-valued. Note that the discrete
+values are not assumed to be ordered in any way; that is, they
+represent categorical quantities, like male and female, rather than
+ordinal quantities, like low, medium and high.
+(We will discuss CPDs in more detail <a href="#cpd">below</a>.)
+<p>
+Tabular CPDs, also called CPTs (conditional probability tables),
+are stored as multidimensional arrays, where the dimensions
+are arranged in the same order as the nodes, e.g., the CPT for node 4
+(WetGrass) is indexed by Sprinkler (2), Rain (3) and then WetGrass (4) itself.
+Hence the child is always the last dimension.
+If a node has no parents, its CPT is a column vector representing its
+prior.
+Note that in Matlab (unlike C), arrays are indexed
+from 1, and are layed out in memory such that the first index toggles
+fastest, e.g., the CPT for node 4 (WetGrass) is as follows
+<P>
+<P><IMG ALIGN=BOTTOM SRC="Figures/CPTgrass.gif"><P>
+<P>
+where we have used the convention that false==1, true==2.
+We can create this CPT in Matlab as follows
+<PRE>
+CPT = zeros(2,2,2);
+CPT(1,1,1) = 1.0;
+CPT(2,1,1) = 0.1;
+...
+</PRE>
+Here is an easier way:
+<PRE>
+CPT = reshape([1 0.1 0.1 0.01 0 0.9 0.9 0.99], [2 2 2]);
+</PRE>
+In fact, we don't need to reshape the array, since the CPD constructor
+will do that for us. So we can just write
+<pre>
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</pre>
+The other nodes are created similarly (using the old syntax for
+optional parameters)
+<PRE>
+bnet.CPD{C} = tabular_CPD(bnet, C, [0.5 0.5]);
+bnet.CPD{R} = tabular_CPD(bnet, R, [0.8 0.2 0.2 0.8]);
+bnet.CPD{S} = tabular_CPD(bnet, S, [0.5 0.9 0.5 0.1]);
+bnet.CPD{W} = tabular_CPD(bnet, W, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);
+</PRE>
+
+
+<h2><a name="rnd_cpt">Random Parameters</h2>
+
+If we do not specify the CPT, random parameters will be
+created, i.e., each "row" of the CPT will be drawn from the uniform distribution.
+To ensure repeatable results, use
+<pre>
+rand('state', seed);
+randn('state', seed);
+</pre>
+To control the degree of randomness (entropy),
+you can sample each row of the CPT from a Dirichlet(p,p,...) distribution.
+If p << 1, this encourages "deterministic" CPTs (one entry near 1, the rest near 0).
+If p = 1, each entry is drawn from U[0,1].
+If p >> 1, the entries will all be near 1/k, where k is the arity of
+this node, i.e., each row will be nearly uniform.
+You can do this as follows, assuming this node
+is number i, and ns is the node_sizes.
+<pre>
+k = ns(i);
+ps = parents(dag, i);
+psz = prod(ns(ps));
+CPT = sample_dirichlet(p*ones(1,k), psz);
+bnet.CPD{i} = tabular_CPD(bnet, i, 'CPT', CPT);
+</pre>
+
+
+<h2><a name="file">Loading a network from a file</h2>
+
+If you already have a Bayes net represented in the XML-based
+<a href="http://www.cs.cmu.edu/afs/cs/user/fgcozman/www/Research/InterchangeFormat/">
+Bayes Net Interchange Format (BNIF)</a> (e.g., downloaded from the 
+<a
+href="http://www.cs.huji.ac.il/labs/compbio/Repository">
+Bayes Net repository</a>),
+you can convert it to BNT format using
+the 
+<a href="http://www.digitas.harvard.edu/~ken/bif2bnt/">BIF-BNT Java
+program</a> written by Ken Shan.
+(This is not necessarily up-to-date.)
+<p>
+<b>It is currently not possible to save/load a BNT matlab object to
+file</b>, but this is easily fixed if you modify all the constructors
+for all the classes (see matlab documentation).
+
+<h2>Creating a model using a GUI</h2>
+
+Click <a href="http://bnt.insa-rouen.fr/ajouts.html">here</a>.
+
+
+
+<h1><a name="inference">Inference</h1>
+
+Having created the BN, we can now use it for inference.
+There are many different algorithms for doing inference in Bayes nets,
+that make different tradeoffs between speed, 
+complexity, generality, and accuracy.
+BNT therefore offers a variety of different inference
+"engines". We will discuss these
+in more detail <a href="#engines">below</a>.
+For now, we will use the junction tree
+engine, which is the mother of all exact inference algorithms.
+This can be created as follows.
+<pre>
+engine = jtree_inf_engine(bnet);
+</pre>
+The other engines have similar constructors, but might take
+additional, algorithm-specific parameters.
+All engines are used in the same way, once they have been created.
+We illustrate this in the following sections.
+
+
+<h2><a name="marginal">Computing marginal distributions</h2>
+
+Suppose we want to compute the probability that the sprinker was on
+given that the grass is wet.
+The evidence consists of the fact that W=2. All the other nodes
+are hidden (unobserved). We can specify this as follows.
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+</pre>
+We use a 1D cell array instead of a vector to
+cope with the fact that nodes can be vectors of different lengths.
+In addition, the value [] can be used
+to denote 'no evidence', instead of having to specify the observation
+pattern as a separate argument.
+(Click <a href="cellarray.html">here</a> for a quick tutorial on cell
+arrays in matlab.)
+<p>
+We are now ready to add the evidence to the engine.
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence);
+</pre>
+The behavior of this function is algorithm-specific, and is discussed
+in more detail <a href="#engines">below</a>.
+In the case of the jtree engine,
+enter_evidence implements a two-pass message-passing scheme.
+The first return argument contains the modified engine, which
+incorporates the evidence. The second return argument contains the
+log-likelihood of the evidence. (Not all engines are capable of
+computing the log-likelihood.)
+<p>
+Finally, we can compute p=P(S=2|W=2) as follows.
+<PRE>
+marg = marginal_nodes(engine, S);
+marg.T
+ans =
+      0.57024
+      0.42976
+p = marg.T(2);
+</PRE>
+We see that p = 0.4298.
+<p>
+Now let us add the evidence that it was raining, and see what
+difference it makes.
+<PRE>
+evidence{R} = 2;
+[engine, loglik] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, S);
+p = marg.T(2);
+</PRE>
+We find that p = P(S=2|W=2,R=2) = 0.1945,
+which is lower than
+before, because the rain can ``explain away'' the
+fact that the grass is wet.
+<p>
+You can plot a marginal distribution over a discrete variable
+as a barchart using the built 'bar' function:
+<pre>
+bar(marg.T)
+</pre>
+This is what it looks like
+
+<p>
+<center>
+<IMG SRC="Figures/sprinkler_bar.gif">
+</center>
+<p>
+
+<h2><a name="observed">Observed nodes</h2>
+
+What happens if we ask for the marginal on an observed node, e.g. P(W|W=2)?
+An observed discrete node effectively only has 1 value (the observed
+      one) --- all other values would result in 0 probability.
+For efficiency, BNT treats observed (discrete) nodes as if they were
+      set to 1, as we see below:
+<pre>
+evidence = cell(1,N);
+evidence{W} = 2;
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, W);
+m.T
+ans =
+     1
+</pre>
+This can get a little confusing, since we assigned W=2.
+So we can ask BNT to add the evidence back in by passing in an optional argument:
+<pre>
+m = marginal_nodes(engine, W, 1);
+m.T
+ans =
+     0
+     1
+</pre>
+This shows that P(W=1|W=2) = 0 and P(W=2|W=2) = 1.
+
+
+
+<h2><a name="joint">Computing joint distributions</h2>
+
+We can compute the joint probability on a set of nodes as in the
+following example.
+<pre>
+evidence = cell(1,N);
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W]);
+</pre>
+m is a structure. The 'T' field is a multi-dimensional array (in
+this case, 3-dimensional) that contains the joint probability
+distribution on the specified nodes.
+<pre>
+>> m.T
+ans(:,:,1) =
+    0.2900    0.0410
+    0.0210    0.0009
+ans(:,:,2) =
+         0    0.3690
+    0.1890    0.0891
+</pre>
+We see that P(S=1,R=1,W=2) = 0, since it is impossible for the grass
+to be wet if both the rain and sprinkler are off.
+<p>
+Let us now add some evidence to R.
+<pre>
+evidence{R} = 2;
+[engine, ll] = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, [S R W])
+m = 
+    domain: [2 3 4]
+         T: [2x1x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+    0.0820
+    0.0018
+ans(:,:,2) =
+    0.7380
+    0.1782
+</pre>
+The joint T(i,j,k) = P(S=i,R=j,W=k|evidence)
+should have T(i,1,k) = 0 for all i,k, since R=1 is incompatible
+with the evidence that R=2.
+Instead of creating large tables with many 0s, BNT sets the effective
+size of observed (discrete) nodes to 1, as explained above.
+This is why m.T has size 2x1x2.
+To get a 2x2x2 table, type
+<pre>
+m = marginal_nodes(engine, [S R W], 1)
+m = 
+    domain: [2 3 4]
+         T: [2x2x2 double]
+>> m.T
+m.T
+ans(:,:,1) =
+            0        0.082
+            0       0.0018
+ans(:,:,2) =
+            0        0.738
+            0       0.1782
+</pre>
+
+<p>
+Note: It is not always possible to compute the joint on arbitrary
+sets of nodes: it depends on which inference engine you use, as discussed 
+in more detail <a href="#engines">below</a>. 
+
+
+<h2><a name="soft">Soft/virtual evidence</h2>
+
+Sometimes a node is not observed, but we have some distribution over
+its possible values; this is often called "soft" or "virtual"
+evidence.
+One can use this as follows
+<pre>
+[engine, loglik] = enter_evidence(engine, evidence, 'soft', soft_evidence);
+</pre>
+where soft_evidence{i} is either [] (if node i has no soft evidence)
+or is a vector representing the probability distribution over i's
+possible values.
+For example, if we don't know i's exact value, but we know its
+likelihood ratio is 60/40, we can write evidence{i} = [] and
+soft_evidence{i} = [0.6 0.4].
+<p>
+Currently only jtree_inf_engine supports this option.
+It assumes that all hidden nodes, and all nodes for
+which we have soft evidence, are discrete.
+For a longer example, see BNT/examples/static/softev1.m. 
+
+
+<h2><a name="mpe">Most probable explanation</h2>
+
+To compute the most probable explanation (MPE) of the evidence (i.e.,
+the most probable assignment, or a mode of the joint), use
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence);     
+</pre>
+mpe{i} is the most likely value of node i.
+This calls enter_evidence with the 'maximize' flag set to 1, which
+causes the engine to do max-product instead of sum-product.
+The resulting max-marginals are then thresholded.
+If there is more than one maximum probability assignment, we must take 
+    care to break ties in a consistent manner (thresholding the
+    max-marginals may give the wrong result). To force this behavior,
+    type
+<pre>
+[mpe, ll] = calc_mpe(engine, evidence, 1);     
+</pre>
+Note that computing the MPE is someties called abductive reasoning.
+    
+<p>
+You can also use <tt>calc_mpe_bucket</tt> written by Ron Zohar,
+that does a forwards max-product pass, and then a backwards traceback
+pass, which is how Viterbi is traditionally implemented.
+
+
+
+<h1><a name="cpd">Conditional Probability Distributions</h1>
+
+A Conditional Probability Distributions (CPD)
+defines P(X(i) | X(Pa(i))), where X(i) is the i'th node, and X(Pa(i))
+are the parents of node i. There are many ways to represent this
+distribution, which depend in part on whether X(i) and X(Pa(i)) are
+discrete, continuous, or a combination.
+We will discuss various representations below.
+
+
+<h2><a name="tabular">Tabular nodes</h2>
+
+If the CPD is represented as a table (i.e., if it is a multinomial
+distribution), it has a number of parameters that is exponential in
+the number of parents. See the example <a href="#cpt">above</a>.
+
+
+<h2><a name="noisyor">Noisy-or nodes</h2>
+
+A noisy-OR node is like a regular logical OR gate except that
+sometimes the effects of parents that are on get inhibited.
+Let the prob. that parent i gets inhibited be q(i).
+Then a node, C, with 2 parents, A and B, has the following CPD, where
+we use F and T to represent off and on (1 and 2 in BNT).
+<pre>
+A  B  P(C=off)      P(C=on)
+---------------------------
+F  F  1.0           0.0
+T  F  q(A)          1-q(A)
+F  T  q(B)          1-q(B)
+T  T  q(A)q(B)      q-q(A)q(B)
+</pre>
+Thus we see that the causes get inhibited independently.
+It is common to associate a "leak" node with a noisy-or CPD, which is
+like a parent that is always on. This can account for all other unmodelled
+causes which might turn the node on.
+<p>
+The noisy-or distribution is similar to the logistic distribution.
+To see this, let the nodes, S(i), have values in {0,1}, and let q(i,j)
+be the prob. that j inhibits i. Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = 1 - prod_{j} q(i,j)^S(j)
+</pre>
+Now define w(i,j) = -ln q(i,j) and rho(x) = 1-exp(-x). Then
+<pre>
+Pr(S(i)=1 | parents(S(i))) = rho(sum_j w(i,j) S(j))
+</pre>
+For a sigmoid node, we have
+<pre>
+Pr(S(i)=1 | parents(S(i))) = sigma(-sum_j w(i,j) S(j))
+</pre>
+where sigma(x) = 1/(1+exp(-x)). Hence they differ in the choice of
+the activation function (although both are monotonically increasing).
+In addition, in the case of a noisy-or, the weights are constrained to be
+positive, since they derive from probabilities q(i,j).
+In both cases, the number of parameters is <em>linear</em> in the
+number of parents, unlike the case of a multinomial distribution,
+where the number of parameters is exponential in the number of parents.
+We will see an example of noisy-OR nodes <a href="#qmr">below</a>.
+
+
+<h2><a name="deterministic">Other (noisy) deterministic nodes</h2>
+
+Deterministic CPDs for discrete random variables can be created using
+the deterministic_CPD class. It is also possible to 'flip' the output
+of the function with some probability, to simulate noise.
+The boolean_CPD class is just a special case of a
+deterministic CPD, where the parents and child are all binary.
+<p>
+Both of these classes are just "syntactic sugar" for the tabular_CPD
+class.
+
+
+
+<h2><a name="softmax">Softmax nodes</h2>
+
+If we have a discrete node with a continuous parent,
+we can define its CPD using a softmax function 
+(also known as the multinomial logit function).
+This acts like a soft thresholding operator, and is defined as follows:
+<pre>
+                    exp(w(:,i)'*x + b(i)) 
+Pr(Q=i | X=x)  =  -----------------------------
+                  sum_j   exp(w(:,j)'*x + b(j))
+
+</pre>
+The parameters of a softmax node, w(:,i) and b(i), i=1..|Q|, have the
+following interpretation: w(:,i)-w(:,j) is the normal vector to the
+decision boundary between classes i and j,
+and b(i)-b(j) is its offset (bias). For example, suppose
+X is a 2-vector, and Q is binary. Then
+<pre>
+w = [1 -1;
+     0 0];
+
+b = [0 0];
+</pre>
+means class 1 are points in the 2D plane with positive x coordinate,
+and class 2 are points in the 2D plane with negative x coordinate.
+If w has large magnitude, the decision boundary is sharp, otherwise it
+is soft.
+In the special case that Q is binary (0/1), the softmax function reduces to the logistic
+(sigmoid) function.
+<p>
+Fitting a softmax function can be done using the iteratively reweighted
+least squares (IRLS) algorithm.
+We use the implementation from
+<a href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+Note that since
+the softmax distribution is not in the exponential family, it does not
+have finite sufficient statistics, and hence we must store all the
+training data in uncompressed form.
+If this takes too much space, one should use online (stochastic) gradient
+descent (not implemented in BNT).
+<p>
+If a softmax node also has discrete parents,
+we use a different set of w/b parameters for each combination of
+parent values, as in the <a href="#gaussian">conditional linear
+Gaussian CPD</a>.
+This feature was implemented by Pierpaolo Brutti.
+He is currently extending it so that discrete parents can be treated
+as if they were continuous, by adding indicator variables to the X
+vector.
+<p>
+We will see an example of softmax nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="mlp">Neural network nodes</h2>
+
+Pierpaolo Brutti has implemented the mlp_CPD class, which uses a multi layer perceptron
+to implement a mapping from continuous parents to discrete children,
+similar to the softmax function.
+(If there are also discrete parents, it creates a mixture of MLPs.)
+It uses code from <a
+href="http://www.ncrg.aston.ac.uk/netlab/">Netlab</a>.
+This is work in progress.
+
+<h2><a name="root">Root nodes</h2>
+
+A root node has no parents and no parameters; it can be used to model
+an observed, exogeneous input variable, i.e., one which is "outside"
+the model. 
+This is useful for conditional density models.
+We will see an example of root nodes <a href="#mixexp">below</a>.
+
+
+<h2><a name="gaussian">Gaussian nodes</h2>
+
+We now consider a distribution suitable for the continuous-valued nodes.
+Suppose the node is called Y, its continuous parents (if any) are
+called X, and its discrete parents (if any) are called Q.
+The distribution on Y is defined as follows:
+<pre>
+- no parents: Y ~ N(mu, Sigma)
+- cts parents : Y|X=x ~ N(mu + W x, Sigma)
+- discrete parents: Y|Q=i ~ N(mu(:,i), Sigma(:,:,i))
+- cts and discrete parents: Y|X=x,Q=i ~ N(mu(:,i) + W(:,:,i) * x, Sigma(:,:,i))
+</pre>
+where N(mu, Sigma) denotes a Normal distribution with mean mu and
+covariance Sigma. Let |X|, |Y| and |Q| denote the sizes of X, Y and Q
+respectively.
+If there are no discrete parents, |Q|=1; if there is
+more than one, then |Q| = a vector of the sizes of each discrete parent.
+If there are no continuous parents, |X|=0; if there is more than one,
+then |X| = the sum of their sizes.
+Then mu is a |Y|*|Q| vector, Sigma is a |Y|*|Y|*|Q| positive
+semi-definite matrix, and W is a |Y|*|X|*|Q| regression (weight)
+matrix.
+<p>
+We can create a Gaussian node with random parameters as follows.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i);
+</pre>
+We can specify the value of one or more of the parameters as in the
+following example, in which |Y|=2, and |Q|=1.
+<pre>
+bnet.CPD{i} = gaussian_CPD(bnet, i, 'mean', [0; 0], 'weights', randn(Y,X), 'cov', eye(Y));
+</pre>
+<p>
+We will see an example of conditional linear Gaussian nodes <a
+href="#cg_model">below</a>. 
+<p>
+<b>When learning Gaussians from data</b>, it is helpful to ensure the
+data has a small magnitde
+(see e.g., KPMstats/standardize) to prevent numerical problems.
+Unless you have a lot of data, it is also a very good idea to use
+diagonal instead of full covariance matrices.
+(BNT does not currently support spherical covariances, although it
+would be easy to add, since  KPMstats/clg_Mstep supports this option;
+you would just need to modify gaussian_CPD/update_ess to accumulate
+weighted inner products.)
+
+
+
+<h2><a name="nongauss">Other continuous distributions</h2>
+
+Currently BNT does not support any CPDs for continuous nodes other
+than the Gaussian.
+However, you can use a mixture of Gaussians to
+approximate other continuous distributions. We will see some an example
+of this with the IFA model <a href="#pca">below</a>.
+
+
+<h2><a name="glm">Generalized linear model nodes</h2>
+
+In the future, we may incorporate some of the functionality of
+<a href =
+"http://www.sci.usq.edu.au/staff/dunn/glmlab/glmlab.html">glmlab</a>
+into BNT.
+
+
+<h2><a name="dtree">Classification/regression tree nodes</h2>
+
+We plan to add classification and regression trees to define CPDs for
+discrete and continuous nodes, respectively.
+Trees have many advantages: they are easy to interpret, they can do
+feature selection, they can
+handle discrete and continuous inputs, they do not make strong
+assumptions about the form of the distribution, the number of
+parameters can grow in a data-dependent way (i.e., they are
+semi-parametric), they can handle missing data, etc.
+However, they are not yet implemented.
+<!--
+Yimin Zhang is currently (Feb '02) implementing this.
+-->
+
+
+<h2><a name="cpd_summary">Summary of CPD types</h2>
+
+We list all the different types of CPDs supported by BNT.
+For each CPD, we specify if the child and parents can be discrete (D) or
+continuous (C) (Binary (B) nodes are a special case).
+We also specify which methods each class supports.
+If a method is inherited, the name of the  parent class is mentioned.
+If a parent class calls a child method, this is mentioned.
+<p>
+The <tt>CPD_to_CPT</tt> method converts a CPD to a table; this
+requires that the child and all parents are discrete.
+The CPT might be exponentially big...
+<tt>convert_to_table</tt> evaluates a CPD with evidence, and
+represents the the resulting potential as an array.
+This requires that the child is discrete, and any continuous parents
+are observed.
+<tt>convert_to_pot</tt> evaluates a CPD with evidence, and
+represents the resulting potential as a dpot, gpot, cgpot or upot, as
+requested. (d=discrete, g=Gaussian, cg = conditional Gaussian, u =
+utility).
+
+<p>
+When we sample a node, all the parents are observed.
+When we compute the (log) probability of a node, all the parents and
+the child are observed.
+<p>
+We also specify if the parameters are learnable.
+For learning with EM, we require
+the methods <tt>reset_ess</tt>, <tt>update_ess</tt> and
+<tt>maximize_params</tt>. 
+For learning from fully observed data, we require
+the method <tt>learn_params</tt>.
+By default, all classes inherit this from generic_CPD, which simply
+calls <tt>update_ess</tt> N times, once for each data case, followed
+by <tt>maximize_params</tt>, i.e., it is like EM, without the E step.
+Some classes implement a batch formula, which is quicker.
+<p>
+Bayesian learning means computing a posterior over the parameters
+given fully observed data.
+<p>
+Pearl means we implement the methods <tt>compute_pi</tt> and
+<tt>compute_lambda_msg</tt>, used by
+<tt>pearl_inf_engine</tt>, which runs on directed graphs.
+<tt>belprop_inf_engine</tt> only needs <tt>convert_to_pot</tt>.H
+The pearl methods can exploit special properties of the CPDs for
+computing the messages efficiently, whereas belprop does not.
+<p>
+The only method implemented by generic_CPD is <tt>adjustable_CPD</tt>,
+which is not shown, since it is not very interesting.
+
+
+<p>
+
+
+<table>
+<table border units = pixels><tr>
+<td align=center>Name
+<td align=center>Child
+<td align=center>Parents
+<td align=center>Comments
+<td align=center>CPD_to_CPT
+<td align=center>conv_to_table
+<td align=center>conv_to_pot
+<td align=center>sample
+<td align=center>prob
+<td align=center>learn
+<td align=center>Bayes
+<td align=center>Pearl
+
+
+<tr>
+<!-- Name--><td>
+<!-- Child--><td>
+<!-- Parents--><td>
+<!-- Comments--><td>
+<!-- CPD_to_CPT--><td>
+<!-- conv_to_table--><td>
+<!-- conv_to_pot--><td>
+<!-- sample--><td>
+<!-- prob--><td>
+<!-- learn--><td>
+<!-- Bayes--><td>
+<!-- Pearl--><td>
+
+<tr>
+<!-- Name--><td>boolean
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>deterministic
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>Syntactic sugar for tabular
+<!-- CPD_to_CPT--><td>-
+<!-- conv_to_table--><td>-
+<!-- conv_to_pot--><td>-
+<!-- sample--><td>-
+<!-- prob--><td>-
+<!-- learn--><td>-
+<!-- Bayes--><td>-
+<!-- Pearl--><td>-
+
+<tr>
+<!-- Name--><td>Discrete
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Calls CPD_to_CPT
+<!-- conv_to_pot--><td>Calls conv_to_table
+<!-- sample--><td>Calls conv_to_table
+<!-- prob--><td>Calls conv_to_table
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>Gaussian
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+<tr>
+<!-- Name--><td>gmux
+<!-- Child--><td>C
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multiplexer
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>MLP
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>multi layer perceptron
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>noisy-or
+<!-- Child--><td>B
+<!-- Parents--><td>B
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>Y
+
+
+<tr>
+<!-- Name--><td>root
+<!-- Child--><td>C/D
+<!-- Parents--><td>none
+<!-- Comments--><td>no params
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>Y
+<!-- sample--><td>Y
+<!-- prob--><td>Y
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>softmax
+<!-- Child--><td>D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>Y
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>generic
+<!-- Child--><td>C/D
+<!-- Parents--><td>C/D
+<!-- Comments--><td>Virtual class
+<!-- CPD_to_CPT--><td>N
+<!-- conv_to_table--><td>N
+<!-- conv_to_pot--><td>N
+<!-- sample--><td>N
+<!-- prob--><td>N
+<!-- learn--><td>N
+<!-- Bayes--><td>N
+<!-- Pearl--><td>N
+
+
+<tr>
+<!-- Name--><td>Tabular
+<!-- Child--><td>D
+<!-- Parents--><td>D
+<!-- Comments--><td>-
+<!-- CPD_to_CPT--><td>Y
+<!-- conv_to_table--><td>Inherits from discrete
+<!-- conv_to_pot--><td>Inherits from discrete
+<!-- sample--><td>Inherits from discrete
+<!-- prob--><td>Inherits from discrete
+<!-- learn--><td>Y
+<!-- Bayes--><td>Y
+<!-- Pearl--><td>Y
+
+</table>
+
+
+
+<h1><a name="examples">Example models</h1>
+
+
+<h2>Gaussian mixture models</h2>
+
+Richard W. DeVaul has made a detailed tutorial on how to fit mixtures
+of Gaussians using BNT. Available
+<a href="http://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt">here</a>.
+
+
+<h2><a name="pca">PCA, ICA, and all that </h2>
+
+In Figure (a) below, we show how Factor Analysis can be thought of as a
+graphical model. Here, X has an N(0,I) prior, and
+Y|X=x ~ N(mu + Wx, Psi),
+where Psi is diagonal and W is called the "factor loading matrix".
+Since the noise on both X and Y is diagonal, the components of these
+vectors are uncorrelated, and hence can be represented as individual
+scalar nodes, as we show in (b).
+(This is useful if parts of the observations on the Y vector are occasionally missing.)
+We usually take k=|X| << |Y|=D, so the model tries to explain
+many observations using a low-dimensional subspace.
+
+
+<center>
+<table>
+<tr>
+<td><img src="Figures/fa.gif">
+<td><img src="Figures/fa_scalar.gif">
+<td><img src="Figures/mfa.gif">
+<td><img src="Figures/ifa.gif">
+<tr>
+<td align=center> (a)
+<td align=center> (b)
+<td align=center> (c)
+<td align=center> (d)
+</table>
+</center>
+
+<p>
+We can create this model in BNT as follows.
+<pre>
+ns = [k D];
+dag = zeros(2,2);
+dag(1,2) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', []);
+bnet.CPD{1} = gaussian_CPD(bnet, 1, 'mean', zeros(k,1), 'cov', eye(k), ...
+   'cov_type', 'diag', 'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(D,1), 'cov', diag(Psi0), 'weights', W0, ...
+   'cov_type', 'diag', 'clamp_mean', 1);
+</pre>
+
+The root node is clamped to the N(0,I) distribution, so that we will
+not update these parameters during learning.
+The mean of the leaf node is clamped to 0,
+since we assume the data has been centered (had its mean subtracted
+off); this is just for simplicity.
+Finally, the covariance of the leaf node is constrained to be
+diagonal. W0 and Psi0 are the initial parameter guesses.
+
+<p>
+We can fit this model (i.e., estimate its parameters in a maximum
+likelihood (ML) sense) using EM, as we
+explain <a href="#em">below</a>.
+Not surprisingly, the ML estimates for mu and Psi turn out to be
+identical to the
+sample mean and variance, which can be computed directly as
+<pre>
+mu_ML = mean(data);
+Psi_ML = diag(cov(data));
+</pre>
+Note that W can only be identified up to a rotation matrix, because of
+the spherical symmetry of the source.
+
+<p>
+If we restrict Psi to be spherical, i.e., Psi = sigma*I,
+there is a closed-form solution for W as well,
+i.e., we do not need to use EM.
+In particular, W contains the first |X| eigenvectors of the sample covariance
+matrix, with scalings determined by the eigenvalues and sigma.
+Classical PCA can be obtained by taking the sigma->0 limit.
+For details, see
+
+<ul>
+<li> <a href="ftp://hope.caltech.edu/pub/roweis/Empca/empca.ps">
+"EM algorithms for PCA and SPCA"</a>, Sam Roweis, NIPS 97.
+(<a href="ftp://hope.caltech.edu/pub/roweis/Code/empca.tar.gz">
+Matlab software</a>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+By adding a hidden discrete variable, we can create mixtures of FA
+models, as shown in (c).
+Now we can explain the data using a set of subspaces.
+We can create this model in BNT as follows.
+<pre>
+ns = [M k D];
+dag = zeros(3);
+dag(1,3) = 1;
+dag(2,3) = 1;
+bnet = mk_bnet(dag, ns, 'discrete', 1);
+bnet.CPD{1} = tabular_CPD(bnet, 1, Pi0);
+bnet.CPD{2} = gaussian_CPD(bnet, 2, 'mean', zeros(k, 1), 'cov', eye(k), 'cov_type', 'diag', ...
+			   'clamp_mean', 1, 'clamp_cov', 1);
+bnet.CPD{3} = gaussian_CPD(bnet, 3, 'mean', Mu0', 'cov', repmat(diag(Psi0), [1 1 M]), ...
+			   'weights', W0, 'cov_type', 'diag', 'tied_cov', 1);
+</pre>
+Notice how the covariance matrix for Y is the same for all values of
+Q; that is, the noise level in each sub-space is assumed the same.
+However, we allow the offset, mu, to vary.
+For details, see
+<ul>
+
+<LI> 
+<a HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/tr-96-1.ps.gz"> The EM 
+Algorithm for Mixtures of Factor Analyzers </A>,
+Ghahramani, Z. and Hinton, G.E. (1996),
+University of Toronto
+Technical Report CRG-TR-96-1.
+(<A HREF="ftp://ftp.cs.toronto.edu/pub/zoubin/mfa.tar.gz">Matlab software</A>)
+
+<p>
+<li>
+<a
+href=http://neural-server.aston.ac.uk/cgi-bin/tr_avail.pl?trnumber=NCRG/97/003>
+"Mixtures of probabilistic principal component analyzers"</a>,
+Tipping and Bishop, Neural Computation 11(2):443--482, 1999.
+</ul>
+
+<p>
+I have included Zoubin's specialized MFA code (with his permission)
+with the toolbox, so you can check that BNT gives the same results:
+see 'BNT/examples/static/mfa1.m'. 
+
+<p>
+Independent Factor Analysis (IFA) generalizes FA by allowing a
+non-Gaussian prior on each component of X.
+(Note that we can approximate a non-Gaussian prior using a mixture of
+Gaussians.)
+This means that the likelihood function is no longer rotationally
+invariant, so we can uniquely identify W and the hidden
+sources X.
+IFA also allows a non-diagonal Psi (i.e. correlations between the components of Y).
+We recover classical Independent Components Analysis (ICA)
+in the Psi -> 0 limit, and by assuming that |X|=|Y|, so that the
+weight matrix W is square and invertible.
+For details, see
+<ul>
+<li>
+<a href="http://www.gatsby.ucl.ac.uk/~hagai/ifa.ps">Independent Factor
+Analysis</a>, H. Attias, Neural Computation 11: 803--851, 1998.
+</ul>
+
+
+
+<h2><a name="mixexp">Mixtures of experts</h2>
+
+As an example of the use of the softmax function,
+we introduce the Mixture of Experts model.
+<!--
+We also show
+the Hierarchical Mixture of Experts model, where the hierarchy has two
+levels.
+(This is essentially a probabilistic decision tree of height two.)
+-->
+As before,
+circles denote continuous-valued nodes,
+squares denote discrete nodes, clear
+means hidden, and shaded means observed.
+<p>
+<center>
+<table>
+<tr>
+<td><img src="Figures/mixexp.gif">
+<!--
+<td><img src="Figures/hme.gif">
+-->
+</table>
+</center>
+<p>
+X is the observed
+input, Y is the output, and
+the Q nodes are hidden "gating" nodes, which select the appropriate
+set of parameters for Y. During training, Y is assumed observed,
+but for testing, the goal is to predict Y given X.
+Note that this is a <em>conditional</em> density model, so we don't
+associate any parameters with X.
+Hence X's CPD will be a root CPD, which is a way of modelling
+exogenous nodes.
+If the output is a continuous-valued quantity,
+we assume the "experts" are linear-regression units,
+and set Y's CPD to linear-Gaussian.
+If the output is discrete, we set Y's CPD to a softmax function.
+The Q CPDs will always be softmax functions.
+
+<p>
+As a concrete example, consider the mixture of experts model where X and Y are
+scalars, and Q is binary.
+This is just piecewise linear regression, where
+we have two line segments, i.e.,
+<P>
+<IMG ALIGN=BOTTOM SRC="Eqns/lin_reg_eqn.gif">
+<P>
+We can create this model with random parameters as follows.
+(This code is bundled in BNT/examples/static/mixexp2.m.)
+<PRE>
+X = 1;
+Q = 2;
+Y = 3;
+dag = zeros(3,3);
+dag(X,[Q Y]) = 1
+dag(Q,Y) = 1;
+ns = [1 2 1]; % make X and Y scalars, and have 2 experts
+onodes = [1 3];
+bnet = mk_bnet(dag, ns, 'discrete', 2, 'observed', onodes);
+
+rand('state', 0);
+randn('state', 0);
+bnet.CPD{1} = root_CPD(bnet, 1);
+bnet.CPD{2} = softmax_CPD(bnet, 2);
+bnet.CPD{3} = gaussian_CPD(bnet, 3);
+</PRE>
+Now let us fit this model using <a href="#em">EM</a>.
+First we <a href="#load_data">load the data</a> (1000 training cases) and plot them.
+<P>
+<PRE>
+data = load('/examples/static/Misc/mixexp_data.txt', '-ascii');        
+plot(data(:,1), data(:,2), '.');
+</PRE>
+<p>
+<center>
+<IMG SRC="Figures/mixexp_data.gif">
+</center>
+<p>
+This is what the model looks like before training.
+(Thanks to Thomas Hofman for writing this plotting routine.)
+<p>
+<center>
+<IMG SRC="Figures/mixexp_before.gif">
+</center>
+<p>
+Now let's train the model, and plot the final performance.
+(We will discuss how to train models in more detail <a href="#param_learning">below</a>.)
+<P>
+<PRE>
+ncases = size(data, 1); % each row of data is a training case
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data'); % each column of cases is a training case
+engine = jtree_inf_engine(bnet);
+max_iter = 20;
+[bnet2, LLtrace] = learn_params_em(engine, cases, max_iter);
+</PRE>
+(We specify which nodes will be observed when we create the engine.
+Hence BNT knows that the hidden nodes are all discrete.
+For complex models, this can lead to a significant speedup.)
+Below we show what the model looks like after 16 iterations of EM
+(with 100 IRLS iterations per M step), when it converged
+using the default convergence tolerance (that the
+fractional change in the log-likelihood be less than 1e-3).
+Before learning, the log-likelihood was
+-322.927442; afterwards, it was -13.728778.
+<p>
+<center>
+<IMG SRC="Figures/mixexp_after.gif">
+</center>
+(See BNT/examples/static/mixexp2.m for details of the code.)
+
+
+
+<h2><a name="hme">Hierarchical mixtures of experts</h2>
+
+A hierarchical mixture of experts (HME) extends the mixture of experts
+model by having more than one hidden node. A two-level example is shown below, along
+with its more traditional representation as a neural network.
+This is like a (balanced) probabilistic decision tree of height 2.
+<p>
+<center>
+<IMG SRC="Figures/HMEforMatlab.jpg">
+</center>
+<p>
+<a href="mailto:pbrutti@stat.cmu.edu">Pierpaolo Brutti</a>
+has written an extensive set of routines for HMEs,
+which are bundled with BNT: see the examples/static/HME directory.
+These routines allow you to choose the number of hidden (gating)
+layers, and the form of the experts (softmax or MLP).
+See the file hmemenu, which provides a demo.
+For example, the figure below shows the decision boundaries learned
+for a ternary classification problem, using a 2 level HME with softmax
+gates and softmax experts; the training set is on the left, the
+testing set on the right.
+<p>
+<center>
+<!--<IMG SRC="Figures/hme_dec_boundary.gif">-->
+<IMG SRC="Figures/hme_dec_boundary.png">
+</center>
+<p>
+
+
+<p>
+For more details, see the following:
+<ul>
+
+<li> <a href="http://www.cs.berkeley.edu/~jordan/papers/hierarchies.ps.Z">
+Hierarchical mixtures of experts and the EM algorithm</a>
+M. I. Jordan and R. A. Jacobs. Neural Computation, 6, 181-214, 1994.
+
+<li> <a href =
+"http://www.cs.berkeley.edu/~dmartin/software">David Martin's
+matlab code for HME</a>
+
+<li> <a
+href="http://www.cs.berkeley.edu/~jordan/papers/uai.ps.Z">Why the
+logistic function? A tutorial discussion on 
+probabilities and neural networks.</a> M. I. Jordan. MIT Computational
+Cognitive Science Report 9503, August 1995. 
+
+<li> "Generalized Linear Models", McCullagh and Nelder, Chapman and
+Halll, 1983.
+
+<li>
+"Improved learning algorithms for mixtures of experts in multiclass
+classification".
+K. Chen, L. Xu, H. Chi.
+Neural Networks (1999) 12: 1229-1252.
+
+<li> <a href="http://www.oigeeza.com/steve/">
+Classification Using Hierarchical Mixtures of Experts</a>
+S.R. Waterhouse and A.J. Robinson.
+In Proc. IEEE Workshop on Neural Network for Signal Processing IV (1994), pp. 177-186
+
+<li> <a href="http://www.idiap.ch/~perry/">
+Localized mixtures of experts</a>,
+P. Moerland, 1998.
+
+<li> "Nonlinear gated experts for time series",
+A.S. Weigend and M. Mangeas, 1995.
+
+</ul>
+
+
+<h2><a name="qmr">QMR</h2>
+
+Bayes nets originally arose out of an attempt to add probabilities to
+expert systems, and this is still the most common use for BNs.
+A famous example is
+QMR-DT, a decision-theoretic reformulation of the Quick Medical
+Reference (QMR) model.
+<p>
+<center>
+<IMG ALIGN=BOTTOM SRC="Figures/qmr.gif">
+</center>
+Here, the top layer represents hidden disease nodes, and the bottom
+layer represents observed symptom nodes.
+The goal is to infer the posterior probability of each disease given
+all the symptoms (which can be present, absent or unknown).
+Each node in the top layer has a Bernoulli prior (with a low prior
+probability that the disease is present).
+Since each node in the bottom layer has a high fan-in, we use a
+noisy-OR parameterization; each disease has an independent chance of
+causing each symptom.
+The real QMR-DT model is copyright, but
+we can create a random QMR-like model as follows.
+<pre>
+function bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+% MK_QMR_BNET Make a QMR model
+% bnet = mk_qmr_bnet(G, inhibit, leak, prior)
+%
+% G(i,j) = 1 iff there is an arc from disease i to finding j
+% inhibit(i,j) = inhibition probability on i->j arc
+% leak(j) = inhibition prob. on leak->j arc
+% prior(i) = prob. disease i is on
+
+[Ndiseases Nfindings] = size(inhibit);
+N = Ndiseases + Nfindings;
+finding_node = Ndiseases+1:N;
+ns = 2*ones(1,N);
+dag = zeros(N,N);
+dag(1:Ndiseases, finding_node) = G;
+bnet = mk_bnet(dag, ns, 'observed', finding_node);
+
+for d=1:Ndiseases
+  CPT = [1-prior(d) prior(d)];
+  bnet.CPD{d} = tabular_CPD(bnet, d, CPT');
+end
+
+for i=1:Nfindings
+  fnode = finding_node(i);
+  ps = parents(G, i);
+  bnet.CPD{fnode} = noisyor_CPD(bnet, fnode, leak(i), inhibit(ps, i));
+end
+</pre>
+In the file BNT/examples/static/qmr1, we create a random bipartite
+graph G, with 5 diseases and 10 findings, and random parameters.
+(In general, to create a random dag, use 'mk_random_dag'.)
+We can visualize the resulting  graph structure using
+the methods discussed <a href="#graphdraw">below</a>, with the
+following results:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+
+<p>
+Now let us put some random evidence on all the leaves except the very
+first and very last, and compute the disease posteriors.
+<pre>
+pos = 2:floor(Nfindings/2);
+neg = (pos(end)+1):(Nfindings-1);
+onodes = myunion(pos, neg);
+evidence = cell(1, N);
+evidence(findings(pos)) = num2cell(repmat(2, 1, length(pos)));
+evidence(findings(neg)) = num2cell(repmat(1, 1, length(neg)));
+
+engine = jtree_inf_engine(bnet);
+[engine, ll] = enter_evidence(engine, evidence);
+post = zeros(1, Ndiseases);
+for i=diseases(:)'
+  m = marginal_nodes(engine, i);
+  post(i) = m.T(2);
+end
+</pre>
+Junction tree can be quite slow on large QMR models.
+Fortunately, it is possible to exploit properties of the noisy-OR
+function to speed up exact inference using an algorithm called
+<a href="#quickscore">quickscore</a>, discussed below.
+
+
+
+
+
+<h2><a name="cg_model">Conditional Gaussian models</h2>
+
+A conditional Gaussian model is one in which, conditioned on all the discrete
+nodes, the distribution over the remaining (continuous) nodes is
+multivariate Gaussian. This means we can have arcs from discrete (D)
+to continuous (C) nodes, but not vice versa.
+(We <em>are</em> allowed C->D arcs if the continuous nodes are observed,
+as in the <a href="#mixexp">mixture of experts</a> model,
+since this distribution can be represented with a discrete potential.)
+<p>
+We now give an example of a CG model, from
+the paper "Propagation of Probabilities, Means amd
+Variances in Mixed Graphical Association Models", Steffen Lauritzen,
+JASA 87(420):1098--1108, 1992 (reprinted in the book "Probabilistic Networks and Expert
+Systems", R. G. Cowell, A. P. Dawid, S. L. Lauritzen and
+D. J. Spiegelhalter, Springer, 1999.)
+
+<h3>Specifying the graph</h3>
+
+Consider the model of waste emissions from an incinerator plant shown below.
+We follow the standard convention that shaded nodes are observed,
+clear nodes are hidden.
+We also use the non-standard convention that
+square nodes are discrete (tabular) and round nodes are
+Gaussian.
+
+<p>
+<center>
+<IMG SRC="Figures/cg1.gif">
+</center>
+<p>
+
+We can create this model as follows.
+<pre>
+F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9;
+n = 9;
+
+dag = zeros(n);
+dag(F,E)=1;
+dag(W,[E Min D]) = 1;
+dag(E,D)=1;
+dag(B,[C D])=1;
+dag(D,[L Mout])=1;
+dag(Min,Mout)=1;
+
+% node sizes - all cts nodes are scalar, all discrete nodes are binary
+ns = ones(1, n);
+dnodes = [F W B];
+cnodes = mysetdiff(1:n, dnodes);
+ns(dnodes) = 2;
+
+bnet = mk_bnet(dag, ns, 'discrete', dnodes);
+</pre>
+'dnodes' is a list of the discrete nodes; 'cnodes' is the continuous
+nodes. 'mysetdiff' is a faster version of the built-in 'setdiff'.
+<p>
+
+
+<h3>Specifying the parameters</h3>
+
+The parameters of the discrete nodes can be specified as follows.
+<pre>
+bnet.CPD{B} = tabular_CPD(bnet, B, 'CPT', [0.85 0.15]); % 1=stable, 2=unstable
+bnet.CPD{F} = tabular_CPD(bnet, F, 'CPT', [0.95 0.05]); % 1=intact, 2=defect
+bnet.CPD{W} = tabular_CPD(bnet, W, 'CPT', [2/7 5/7]); % 1=industrial, 2=household
+</pre>
+
+<p>
+The parameters of the continuous nodes can be specified as follows.
+<pre>
+bnet.CPD{E} = gaussian_CPD(bnet, E, 'mean', [-3.9 -0.4 -3.2 -0.5], ...
+			   'cov', [0.00002 0.0001 0.00002 0.0001]);
+bnet.CPD{D} = gaussian_CPD(bnet, D, 'mean', [6.5 6.0 7.5 7.0], ...
+			   'cov', [0.03 0.04 0.1 0.1], 'weights', [1 1 1 1]);
+bnet.CPD{C} = gaussian_CPD(bnet, C, 'mean', [-2 -1], 'cov', [0.1 0.3]);
+bnet.CPD{L} = gaussian_CPD(bnet, L, 'mean', 3, 'cov', 0.25, 'weights', -0.5);
+bnet.CPD{Min} = gaussian_CPD(bnet, Min, 'mean', [0.5 -0.5], 'cov', [0.01 0.005]);
+bnet.CPD{Mout} = gaussian_CPD(bnet, Mout, 'mean', 0, 'cov', 0.002, 'weights', [1 1]);
+</pre>
+
+
+<h3><a name="cg_infer">Inference</h3>
+
+<!--Let us perform inference in the <a href="#cg_model">waste incinerator example</a>.-->
+First we compute the unconditional marginals.
+<pre>
+engine = jtree_inf_engine(bnet);
+evidence = cell(1,n);
+[engine, ll] = enter_evidence(engine, evidence);
+marg = marginal_nodes(engine, E);
+</pre>
+<!--(Of course, we could use <tt>cond_gauss_inf_engine</tt> instead of jtree.)-->
+'marg' is a structure that contains the fields 'mu' and 'Sigma', which
+contain the mean and (co)variance of the marginal on E.
+In this case, they are both scalars.
+Let us check they match the published figures (to 2 decimal places).
+<!--(We can't expect
+more precision than this in general because I have implemented the algorithm of
+Lauritzen (1992), which can be numerically unstable.)-->
+<pre>
+tol = 1e-2;
+assert(approxeq(marg.mu, -3.25, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.709, tol));
+</pre>
+We can compute the other posteriors similarly.
+Now let us add some evidence.
+<pre>
+evidence = cell(1,n);
+evidence{W} = 1; % industrial
+evidence{L} = 1.1;
+evidence{C} = -0.9;
+[engine, ll] = enter_evidence(engine, evidence);
+</pre>
+Now we find
+<pre>
+marg = marginal_nodes(engine, E);
+assert(approxeq(marg.mu, -3.8983, tol));
+assert(approxeq(sqrt(marg.Sigma), 0.0763, tol));
+</pre>
+
+
+We can also compute the joint probability on a set of nodes.
+For example, P(D, Mout | evidence) is a 2D Gaussian:
+<pre>
+marg = marginal_nodes(engine, [D Mout])
+marg = 
+    domain: [6 8]
+        mu: [2x1 double]
+     Sigma: [2x2 double]
+         T: 1.0000
+</pre>
+The mean is
+<pre>
+marg.mu
+ans =
+    3.6077
+    4.1077
+</pre>
+and the covariance matrix is
+<pre>
+marg.Sigma
+ans =
+    0.1062    0.1062
+    0.1062    0.1182
+</pre>
+It is easy to visualize this posterior using standard Matlab plotting
+functions, e.g.,
+<pre>
+gaussplot2d(marg.mu, marg.Sigma);
+</pre>
+produces the following picture.
+
+<p>
+<center>
+<IMG SRC="Figures/gaussplot.png">
+</center>
+<p>
+
+
+The T field indicates that the mixing weight of this Gaussian
+component is 1.0.
+If the joint contains discrete and continuous variables, the result
+will be a mixture of Gaussians, e.g.,
+<pre>
+marg = marginal_nodes(engine, [F E])
+    domain: [1 3]
+        mu: [-3.9000 -0.4003]
+     Sigma: [1x1x2 double]
+         T: [0.9995 4.7373e-04]
+</pre>
+The interpretation is
+Sigma(i,j,k) = Cov[ E(i) E(j) | F=k ].
+In this case, E is a scalar, so i=j=1; k specifies the mixture component.
+<p>
+We saw in the sprinkler network that BNT sets the effective size of
+observed discrete nodes to 1, since they only have one legal value.
+For continuous nodes, BNT sets their length to 0,
+since they have been reduced to a point.
+For example,
+<pre>
+marg = marginal_nodes(engine, [B C])
+    domain: [4 5]
+        mu: []
+     Sigma: []
+         T: [0.0123 0.9877]
+</pre>
+It is simple to post-process the output of marginal_nodes.
+For example, the file BNT/examples/static/cg1 sets the mu term of
+observed nodes to their observed value, and the Sigma term to 0 (since
+observed nodes have no variance).
+
+<p>
+Note that the implemented version of the junction tree is numerically
+unstable when using CG potentials
+(which is why, in the example above, we only required our answers to agree with
+the published ones to 2dp.)
+This is why you might want to use <tt>stab_cond_gauss_inf_engine</tt>,
+implemented by Shan Huang. This is described in
+
+<ul>
+<li> "Stable Local Computation with Conditional Gaussian Distributions",
+S. Lauritzen and F. Jensen, Tech Report R-99-2014,
+Dept. Math. Sciences, Allborg Univ., 1999.
+</ul>
+
+However, even the numerically stable version
+can be computationally intractable if there are many hidden discrete
+nodes, because the number of mixture components grows exponentially e.g., in a
+<a href="usage_dbn.html#lds">switching linear dynamical system</a>.
+In general, one must resort to approximate inference techniques: see
+the discussion on <a href="#engines">inference engines</a> below.
+
+
+<h2><a name="hybrid">Other hybrid models</h2>
+
+When we have C->D arcs, where C is hidden, we need to use
+approximate inference.
+One approach (not implemented in BNT) is described in
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/hybrid_uai99.ps.gz">A
+Variational Approximation for Bayesian Networks with 
+Discrete and Continuous Latent Variables</a>,
+K. Murphy, UAI 99.
+</ul>
+Of course, one can always use <a href="#sampling">sampling</a> methods
+for approximate inference in such models.
+
+
+
+<h1><a name="param_learning">Parameter Learning</h1>
+
+The parameter estimation routines in BNT can be classified into 4
+types, depending on whether the goal is to compute
+a full (Bayesian) posterior over the parameters or just a point
+estimate (e.g., Maximum Likelihood or Maximum A Posteriori),
+and whether all the variables are fully observed or there is missing
+data/ hidden variables (partial observability).
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_params</tt></td>
+ <td><tt>learn_params_em</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>bayes_update_params</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="load_data">Loading data from a file</h2>
+
+To load numeric data from an ASCII text file called 'dat.txt', where each row is a
+case and columns are separated by white-space, such as
+<pre>
+011979 1626.5 0.0
+021979 1367.0 0.0
+...
+</pre>
+you can use
+<pre>
+data = load('dat.txt');
+</pre>
+or
+<pre>
+load dat.txt -ascii
+</pre>
+In the latter case, the data is stored in a variable called 'dat' (the
+filename minus the extension).
+Alternatively, suppose the data is stored in a .csv file (has commas
+separating the columns, and contains a header line), such as
+<pre>
+header info goes here
+ORD,011979,1626.5,0.0
+DSM,021979,1367.0,0.0
+...
+</pre>
+You can load this using
+<pre>
+[a,b,c,d] = textread('dat.txt', '%s %d %f %f', 'delimiter', ',', 'headerlines', 1);
+</pre>
+If your file is not in either of these formats, you can either use Perl to convert
+it to this format, or use the Matlab scanf command.
+Type
+<tt>
+help iofun
+</tt>
+for more information on Matlab's file functions.
+<!--
+<p>
+To load data directly from Excel,
+you should buy the 
+<a href="http://www.mathworks.com/products/excellink/">Excel Link</a>.
+To load data directly from a relational database,
+you should buy the 
+<a href="http://www.mathworks.com/products/database">Database
+toolbox</a>.
+-->
+<p>
+BNT learning routines require data to be stored in a cell array.
+data{i,m} is the value of node i in case (example) m, i.e., each
+<em>column</em> is a case.
+If node i is not observed in case m (missing value), set
+data{i,m} = [].
+(Not all the learning routines can cope with such missing values, however.)
+In the special case that all the nodes are observed and are
+scalar-valued (as opposed to vector-valued), the data can be
+stored in a matrix (as opposed to a cell-array).
+<p>
+Suppose, as in the <a href="#mixexp">mixture of experts example</a>,
+that we have 3 nodes in the graph: X(1) is the observed input, X(3) is
+the observed output, and X(2) is a hidden (gating) node. We can
+create the dataset as follows.
+<pre>
+data = load('dat.txt');
+ncases = size(data, 1);
+cases = cell(3, ncases);
+cases([1 3], :) = num2cell(data');
+</pre>
+Notice how we transposed the data, to convert rows into columns.
+Also, cases{2,m} = [] for all m, since X(2) is always hidden.
+
+
+<h2><a name="mle_complete">Maximum likelihood parameter estimation from complete data</h2>
+
+As an example, let's generate some data from the sprinkler network, randomize the parameters,
+and then try to recover the original model.
+First we create some training data using forwards sampling.
+<pre>
+samples = cell(N, nsamples);
+for i=1:nsamples
+  samples(:,i) = sample_bnet(bnet);
+end
+</pre>
+samples{j,i} contains the value of the j'th node in case i.
+sample_bnet returns a cell array because, in general, each node might
+be a vector of different length.
+In this case, all nodes are discrete (and hence scalars), so we
+could have used a regular array instead (which can be quicker):
+<pre>
+data = cell2num(samples);
+</pre
+So now data(j,i) = samples{j,i}.
+<p>
+Now we create a network with random parameters.
+(The initial values of bnet2 don't matter in this case, since we can find the
+globally optimal MLE independent of where we start.)
+<pre>
+% Make a tabula rasa
+bnet2 = mk_bnet(dag, node_sizes);
+seed = 0;
+rand('state', seed);
+bnet2.CPD{C} = tabular_CPD(bnet2, C);
+bnet2.CPD{R} = tabular_CPD(bnet2, R);
+bnet2.CPD{S} = tabular_CPD(bnet2, S);
+bnet2.CPD{W} = tabular_CPD(bnet2, W);
+</pre>
+Finally, we find the maximum likelihood estimates of the parameters.
+<pre>
+bnet3 = learn_params(bnet2, samples);
+</pre>
+To view the learned parameters, we use a little Matlab hackery.
+<pre>
+CPT3 = cell(1,N);
+for i=1:N
+  s=struct(bnet3.CPD{i});  % violate object privacy
+  CPT3{i}=s.CPT;
+end
+</pre>
+Here are the parameters learned for node 4.
+<pre>
+dispcpt(CPT3{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.2000 0.8000 
+1 2 : 0.2273 0.7727 
+2 2 : 0.0000 1.0000 
+</pre>
+So we see that the learned parameters are fairly close to the "true"
+ones, which we display below.
+<pre>
+dispcpt(CPT{4})
+1 1 : 1.0000 0.0000 
+2 1 : 0.1000 0.9000 
+1 2 : 0.1000 0.9000 
+2 2 : 0.0100 0.9900 
+</pre>
+We can get better results by using a larger training set, or using
+informative priors (see <a href="#prior">below</a>).
+
+
+
+<h2><a name="prior">Parameter priors</h2>
+
+Currently, only tabular CPDs can have priors on their parameters.
+The conjugate prior for a multinomial is the Dirichlet.
+(For binary random variables, the multinomial is the same as the
+Bernoulli, and the Dirichlet is the same as the Beta.)
+<p>
+The Dirichlet has a simple interpretation in terms of pseudo counts.
+If we let N_ijk = the num. times X_i=k and Pa_i=j occurs in the
+training set, where Pa_i are the parents of X_i,
+then the maximum likelihood (ML) estimate is
+T_ijk = N_ijk  / N_ij (where N_ij = sum_k' N_ijk'), which will be 0 if N_ijk=0.
+To prevent us from declaring that (X_i=k, Pa_i=j) is impossible just because this
+event was not seen in the training set,
+we can pretend we saw value k of X_i, for each value j of Pa_i some number (alpha_ijk)
+of times in the past.
+The MAP (maximum a posterior) estimate is then
+<pre>
+T_ijk = (N_ijk + alpha_ijk) / (N_ij + alpha_ij)
+</pre>
+and is never 0 if all alpha_ijk > 0.
+For example, consider the network A->B, where A is binary and B has 3
+values.
+A uniform prior for B has the form
+<pre>
+    B=1 B=2 B=3
+A=1 1   1   1
+A=2 1   1   1
+</pre>
+which can be created using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'unif');
+</pre>
+This prior does not satisfy the likelihood equivalence principle,
+which says that <a href="#markov_equiv">Markov equivalent</a> models
+should have the same marginal likelihood.
+A prior that does satisfy this principle is shown below.
+Heckerman (1995) calls this the
+BDeu prior (likelihood equivalent uniform Bayesian Dirichlet).
+<pre>
+    B=1 B=2 B=3
+A=1 1/6 1/6 1/6
+A=2 1/6 1/6 1/6
+</pre>
+where we put N/(q*r) in each bin; N is the equivalent sample size,
+r=|A|, q = |B|.
+This can be created as follows
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', 'BDeu');
+</pre>
+Here, 1 is the equivalent sample size, and is the strength of the
+prior.
+You can change this using
+<pre>
+tabular_CPD(bnet, i, 'prior_type', 'dirichlet', 'dirichlet_type', ...
+   'BDeu', 'dirichlet_weight', 10);
+</pre>
+<!--where counts is an array of pseudo-counts of the same size as the
+CPT.-->
+<!--
+<p>
+When you specify a prior, you should set row i of the CPT to the
+normalized version of row i of the pseudo-count matrix, i.e., to the
+expected values of the parameters. This will ensure that computing the
+marginal likelihood sequentially (see <a
+href="#bayes_learn">below</a>) and in batch form gives the same
+results.
+To do this, proceed as follows.
+<pre>
+tabular_CPD(bnet, i, 'prior', counts, 'CPT', mk_stochastic(counts));
+</pre>
+For a non-informative prior, you can just write
+<pre>
+tabular_CPD(bnet, i, 'prior', 'unif', 'CPT', 'unif');
+</pre>
+-->
+
+
+<h2><a name="bayes_learn">(Sequential) Bayesian parameter updating from complete data</h2>
+
+If we use conjugate priors and have fully observed data, we can
+compute the posterior over the parameters in batch form as follows.
+<pre>
+cases = sample_bnet(bnet, nsamples);
+bnet = bayes_update_params(bnet, cases);  
+LL = log_marg_lik_complete(bnet, cases);   
+</pre>
+bnet.CPD{i}.prior contains the new Dirichlet pseudocounts,
+and bnet.CPD{i}.CPT is set to the mean of the posterior (the
+normalized counts).
+(Hence if the initial pseudo counts are 0,
+<tt>bayes_update_params</tt> and <tt>learn_params</tt> will give the
+same result.)
+
+
+
+
+<p>
+We can compute the same result sequentially (on-line) as follows.
+<pre>
+LL = 0;
+for m=1:nsamples
+  LL = LL + log_marg_lik_complete(bnet, cases(:,m));
+  bnet = bayes_update_params(bnet, cases(:,m));
+end
+</pre>
+
+The file <tt>BNT/examples/static/StructLearn/model_select1</tt> has an example of
+sequential model selection which uses the same idea.
+We generate data from the model A->B
+and compute the posterior prob of all 3 dags on 2 nodes:
+ (1) A B,  (2) A <- B , (3) A -> B
+Models 2 and 3 are <a href="#markov_equiv">Markov equivalent</a>, and therefore indistinguishable from 
+observational data alone, so we expect their posteriors to be the same
+(assuming a prior which satisfies likelihood equivalence).
+If we use random parameters, the "true" model only gets a higher posterior after 2000 trials!
+However, if we make B a noisy NOT gate, the true model "wins" after 12
+trials, as shown below (red = model 1, blue/green (superimposed)
+represents models 2/3).
+<p>
+<img src="Figures/model_select.png">
+<p>
+The use of marginal likelihood for model selection is discussed in
+greater detail in the 
+section on <a href="structure_learning">structure learning</a>.
+
+
+
+
+<h2><a name="em">Maximum likelihood parameter estimation with missing values</h2>
+
+Now we consider learning when some values are not observed.
+Let us randomly hide half the values generated from the water
+sprinkler example.
+<pre>
+samples2 = samples;
+hide = rand(N, nsamples) > 0.5;
+[I,J]=find(hide);
+for k=1:length(I)
+  samples2{I(k), J(k)} = [];
+end
+</pre>
+samples2{i,l} is the value of node i in training case l, or [] if unobserved.
+<p>
+Now we will compute the MLEs using the EM algorithm.
+We need to use an inference algorithm to compute the expected
+sufficient statistics in the E step; the M (maximization) step is as
+above.
+<pre>
+engine2 = jtree_inf_engine(bnet2);
+max_iter = 10;
+[bnet4, LLtrace] = learn_params_em(engine2, samples2, max_iter);
+</pre>
+LLtrace(i) is the log-likelihood at iteration i. We can plot this as
+follows:
+<pre>
+plot(LLtrace, 'x-')
+</pre>
+Let's display the results after 10 iterations of EM.
+<pre>
+celldisp(CPT4)
+CPT4{1} =
+    0.6616
+    0.3384
+CPT4{2} =
+    0.6510    0.3490
+    0.8751    0.1249
+CPT4{3} =
+    0.8366    0.1634
+    0.0197    0.9803
+CPT4{4} =
+(:,:,1) =
+    0.8276    0.0546
+    0.5452    0.1658
+(:,:,2) =
+    0.1724    0.9454
+    0.4548    0.8342
+</pre>
+We can get improved performance by using one or more of the following
+methods:
+<ul>
+<li> Increasing the size of the training set.
+<li> Decreasing the amount of hidden data.
+<li> Running EM for longer.
+<li> Using informative priors.
+<li> Initialising EM from multiple starting points.
+</ul>
+
+Click <a href="#gaussian">here</a> for a discussion of learning
+Gaussians, which can cause numerical problems.
+<p>
+For a more complete example of learning with EM,
+see the script BNT/examples/static/learn1.m.
+
+<h2><a name="tying">Parameter tying</h2>
+
+In networks with repeated structure (e.g., chains and grids), it is
+common to assume that the parameters are the same at every node. This
+is called parameter tying, and reduces the amount of data needed for
+learning.
+<p>
+When we have tied parameters, there is no longer a one-to-one
+correspondence between nodes and CPDs.
+Rather, each CPD species the parameters for a whole equivalence class
+of nodes.
+It is easiest to see this by example.
+Consider the following <a href="usage_dbn.html#hmm">hidden Markov
+model (HMM)</a>
+<p>
+<img src="Figures/hmm3.gif">
+<p>
+<!--
+We can create this graph structure, assuming we have T time-slices,
+as follows.
+(We number the nodes as shown in the figure, but we could equally well
+number the hidden nodes 1:T, and the observed nodes T+1:2T.)
+<pre>
+N = 2*T;
+dag = zeros(N);
+hnodes = 1:2:2*T;
+for i=1:T-1
+  dag(hnodes(i), hnodes(i+1))=1;
+end
+onodes = 2:2:2*T;
+for i=1:T
+  dag(hnodes(i), onodes(i)) = 1;
+end
+</pre>
+<p>
+The hidden nodes are always discrete, and have Q possible values each,
+but the observed nodes can be discrete or continuous, and have O possible values/length.
+<pre>
+if cts_obs
+  dnodes = hnodes;
+else
+  dnodes = 1:N;
+end
+ns = ones(1,N);
+ns(hnodes) = Q;
+ns(onodes) = O;
+</pre>
+-->
+When HMMs are used for semi-infinite processes like speech recognition,
+we assume the transition matrix
+P(H(t+1)|H(t)) is the same for all t; this is called a time-invariant
+or homogenous Markov chain.
+Hence hidden nodes 2, 3, ..., T
+are all in the same equivalence class, say class Hclass.
+Similarly, the observation matrix P(O(t)|H(t)) is assumed to be the
+same for all t, so the observed nodes are all in the same equivalence
+class, say class Oclass.
+Finally, the prior term P(H(1)) is in a class all by itself, say class
+H1class.
+This is illustrated below, where we explicitly represent the
+parameters as random variables (dotted nodes).
+<p>
+<img src="Figures/hmm4_params.gif">
+<p>
+In BNT, we cannot represent parameters as random variables (nodes).
+Instead, we "hide" the
+parameters inside one CPD for each equivalence class,
+and then specify that the other CPDs should share these parameters, as
+follows.
+<pre>
+hnodes = 1:2:2*T;
+onodes = 2:2:2*T;
+H1class = 1; Hclass = 2; Oclass = 3;
+eclass = ones(1,N);
+eclass(hnodes(2:end)) = Hclass;
+eclass(hnodes(1)) = H1class;
+eclass(onodes) = Oclass;
+% create dag and ns in the usual way
+bnet = mk_bnet(dag, ns, 'discrete', dnodes, 'equiv_class', eclass);
+</pre>
+Finally, we define the parameters for each equivalence class:
+<pre>
+bnet.CPD{H1class} = tabular_CPD(bnet, hnodes(1)); % prior
+bnet.CPD{Hclass} = tabular_CPD(bnet, hnodes(2)); % transition matrix
+if cts_obs
+  bnet.CPD{Oclass} = gaussian_CPD(bnet, onodes(1));
+else
+  bnet.CPD{Oclass} = tabular_CPD(bnet, onodes(1));
+end
+</pre>
+In general, if bnet.CPD{e} = xxx_CPD(bnet, j), then j should be a
+member of e's equivalence class; that is, it is not always the case
+that e == j. You can use bnet.rep_of_eclass(e) to return the
+representative of equivalence class e.
+BNT will look up the parents of j to determine the size
+of the CPT to use. It assumes that this is the same for all members of
+the equivalence class.
+Click <a href="param_tieing.html">here</a> for
+a more complex example of parameter tying.
+<p>
+Note:
+Normally one would define an HMM as a
+<a href = "usage_dbn.html">Dynamic Bayes Net</a>
+(see the function BNT/examples/dynamic/mk_chmm.m).
+However, one can define an HMM as a static BN using the function
+BNT/examples/static/Models/mk_hmm_bnet.m.
+
+
+
+<h1><a name="structure_learning">Structure learning</h1>
+
+Update (9/29/03):
+Phillipe LeRay is developing some additional structure learning code
+on top of BNT. Click <a
+href="http://bnt.insa-rouen.fr/ajouts.html">here</a>
+for details.
+
+<p>
+
+There are two very different approaches to structure learning:
+constraint-based and search-and-score.
+In the <a href="#constraint">constraint-based approach</a>,
+we start with a fully connected graph, and remove edges if certain
+conditional independencies are measured in the data.
+This has the disadvantage that repeated independence tests lose
+statistical power.
+<p>
+In the more popular search-and-score approach,
+we perform a search through the space of possible DAGs, and either
+return the best one found (a point estimate), or return a sample of the
+models found (an approximation to the Bayesian posterior).
+<p>
+Unfortunately, the number of DAGs as a function of the number of
+nodes, G(n), is super-exponential in n.
+A closed form formula for G(n) is not known, but the first few values
+are shown below (from Cooper, 1999).
+
+<table>
+<tr>  <th>n</th>    <th align=left>G(n)</th> </tr>
+<tr>  <td>1</td>    <td>1</td> </tr>
+<tr>  <td>2</td>    <td>3</td> </tr>
+<tr>  <td>3</td>    <td>25</td> </tr>
+<tr>   <td>4</td>    <td>543</td> </tr> 
+<tr>   <td>5</td>    <td>29,281</td> </tr>
+<tr>   <td>6</td>    <td>3,781,503</td> </tr>
+<tr>   <td>7</td>    <td>1.1 x 10^9</td> </tr>
+<tr>   <td>8</td>    <td>7.8 x 10^11</td> </tr>
+<tr>   <td>9</td>    <td>1.2 x 10^15</td> </tr>
+<tr>   <td>10</td>    <td>4.2 x 10^18</td> </tr>
+</table>
+
+Since the number of DAGs is super-exponential in the number of nodes,
+we cannot exhaustively search the space, so we either use a local
+search algorithm (e.g., greedy hill climbining, perhaps with multiple
+restarts) or a global search algorithm (e.g., Markov Chain Monte
+Carlo). 
+<p>
+If we know a total ordering on the nodes,
+finding the best structure amounts to picking the best set of parents
+for each node independently.
+This is what the K2 algorithm does.
+If the ordering is unknown, we can search over orderings,
+which is more efficient than searching over DAGs (Koller and Friedman, 2000).
+<p>
+In addition to the search procedure, we must specify the scoring
+function. There are two popular choices. The Bayesian score integrates
+out the parameters, i.e., it is the marginal likelihood of the model.
+The BIC (Bayesian Information Criterion) is defined as
+log P(D|theta_hat) - 0.5*d*log(N), where D is the data, theta_hat is
+the ML estimate of the parameters, d is the number of parameters, and
+N is the number of data cases.
+The BIC method has the advantage of not requiring a prior.
+<p>
+BIC can be derived as a large sample
+approximation to the marginal likelihood.
+(It is also equal to the Minimum Description Length of a model.)
+However, in practice, the sample size does not need to be very large
+for the approximation to be good.
+For example, in the figure below, we plot the ratio between the log marginal likelihood
+and the BIC score against data-set size; we see that the ratio rapidly
+approaches 1, especially for non-informative priors. 
+(This plot was generated by the file BNT/examples/static/bic1.m. It
+uses the water sprinkler BN with BDeu Dirichlet priors with different
+equivalent sample sizes.)
+
+<p>
+<center>
+<IMG SRC="Figures/bic.png">
+</center>
+<p>
+
+<p>
+As with parameter learning, handling missing data/ hidden variables is
+much harder than the fully observed case.
+The structure learning routines in BNT can therefore be classified into 4
+types, analogously to the parameter learning case.
+<p>
+
+<TABLE BORDER>
+<tr>
+ <TH></TH>
+ <th>Full obs</th>
+ <th>Partial obs</th>
+</tr>
+<tr>
+ <th>Point</th>
+ <td><tt>learn_struct_K2</tt>  <br>
+<!--     <tt>learn_struct_hill_climb</tt></td> -->
+ <td><tt>not yet supported</tt></td>
+</tr>
+<tr>
+ <th>Bayes</th>
+ <td><tt>learn_struct_mcmc</tt></td>
+ <td>not yet supported</td>
+</tr>
+</table>
+
+
+<h2><a name="markov_equiv">Markov equivalence</h2>
+
+If two DAGs encode the same conditional independencies, they are
+called Markov equivalent. The set of all DAGs can be paritioned into
+Markov equivalence classes. Graphs within the same class can 
+have
+the direction of some of their arcs reversed without changing any of
+the CI relationships.
+Each class can be represented by a PDAG
+(partially directed acyclic graph) called an essential graph or
+pattern. This specifies which edges must be oriented in a certain
+direction, and which may be reversed.
+
+<p>
+When learning graph structure from observational data,
+the best one can hope to do is to identify the model up to Markov
+equivalence. To distinguish amongst graphs within the same equivalence
+class, one needs interventional data: see the discussion on <a
+href="#active">active learning</a> below.
+
+
+
+<h2><a name="enumerate">Exhaustive search</h2>
+
+The brute-force approach to structure learning is to enumerate all
+possible DAGs, and score each one. This provides a "gold standard"
+with which to compare other algorithms. We can do this as follows.
+<pre>
+dags = mk_all_dags(N);
+score = score_dags(data, ns, dags);
+</pre>
+where data(i,m) is the value of node i in case m,
+and ns(i) is the size of node i.
+If the DAGs have a lot of families in common, we can cache the sufficient statistics,
+making this potentially more efficient than scoring the DAGs one at a time.
+(Caching is not currently implemented, however.)
+<p>
+By default, we use the Bayesian scoring metric, and assume CPDs are
+represented by tables with BDeu(1) priors.
+We can override these defaults as follows.
+If we want to use uniform priors, we can say
+<pre>
+params = cell(1,N);
+for i=1:N
+  params{i} = {'prior', 'unif'};
+end
+score = score_dags(data, ns, dags, 'params', params);
+</pre>
+params{i} is a cell-array, containing optional arguments that are
+passed to the constructor for CPD i.
+<p>
+Now suppose we want to use different node types, e.g., 
+Suppose nodes 1 and 2 are Gaussian, and nodes 3 and 4 softmax (both
+these CPDs can support discrete and continuous parents, which is
+necessary since all other nodes will be considered as parents).
+The Bayesian scoring metric currently only works for tabular CPDs, so
+we will use BIC:
+<pre>
+score = score_dags(data, ns, dags, 'discrete', [3 4], 'params', [], 
+    'type', {'gaussian', 'gaussian', 'softmax', softmax'}, 'scoring_fn', 'bic')
+</pre>
+In practice, one can't enumerate all possible DAGs for N > 5,
+but one can evaluate any reasonably-sized set of hypotheses in this
+way (e.g., nearest neighbors of your current best guess).
+Think of this as "computer assisted model refinement" as opposed to de
+novo learning.
+
+
+<h2><a name="K2">K2</h2>
+
+The K2 algorithm (Cooper and Herskovits, 1992) is a greedy search algorithm that works as follows.
+Initially each node has no parents. It then adds incrementally that parent whose addition most
+increases the score of the resulting structure. When the addition of no single
+parent can increase the score, it stops adding parents to the node.
+Since we are using a fixed ordering, we do not need to check for
+cycles, and can choose the parents for each node independently.
+<p>
+The original paper used the Bayesian scoring
+metric with tabular CPDs and Dirichlet priors.
+BNT generalizes this to allow any kind of CPD, and either the Bayesian
+scoring metric or BIC, as in the example <a href="#enumerate">above</a>.
+In addition, you can specify
+an optional upper bound on the number of parents for each node.
+The file BNT/examples/static/k2demo1.m gives an example of how to use K2.
+We use the water sprinkler network and sample 100 cases from it as before.
+Then we see how much data it takes to recover the generating structure:
+<pre>
+order = [C S R W];
+max_fan_in = 2;
+sz = 5:5:100;
+for i=1:length(sz)
+  dag2 = learn_struct_K2(data(:,1:sz(i)), node_sizes, order, 'max_fan_in', max_fan_in);
+  correct(i) = isequal(dag, dag2);
+end
+</pre>
+Here are the results.
+<pre>
+correct =
+  Columns 1 through 12 
+     0     0     0     0     0     0     0     1     0     1     1     1
+  Columns 13 through 20 
+     1     1     1     1     1     1     1     1
+</pre>
+So we see it takes about sz(10)=50 cases. (BIC behaves similarly,
+showing that the prior doesn't matter too much.)
+In general, we cannot hope to recover the "true" generating structure,
+only one that is in its <a href="#markov_equiv">Markov equivalence
+class</a>.
+
+
+<h2><a name="hill_climb">Hill-climbing</h2>
+
+Hill-climbing starts at a specific point in space,
+considers all nearest neighbors, and moves to the neighbor
+that has the highest score; if no neighbors have higher
+score than the current point (i.e., we have reached a local maximum),
+the algorithm stops. One can then restart in another part of the space.
+<p>
+A common definition of "neighbor" is all graphs that can be
+generated from the current graph by adding, deleting or reversing a
+single arc, subject to the acyclicity constraint.
+Other neighborhoods are possible: see
+<a href="http://research.microsoft.com/~dmax/publications/jmlr02.pdf">
+Optimal Structure Identification with Greedy Search</a>, Max
+Chickering, JMLR 2002.
+
+<!--
+Note: This algorithm is currently (Feb '02) being implemented by Qian
+Diao.
+-->
+
+
+<h2><a name="mcmc">MCMC</h2>
+
+We can use a Markov Chain Monte Carlo (MCMC) algorithm called
+Metropolis-Hastings (MH) to search the space of all 
+DAGs.
+The standard proposal distribution is to consider moving to all
+nearest neighbors in the sense defined <a href="#hill_climb">above</a>.
+<p>
+The function can be called
+as in the following example.
+<pre>
+[sampled_graphs, accept_ratio] = learn_struct_mcmc(data, ns, 'nsamples', 100, 'burnin', 10);
+</pre>
+We can convert our set of sampled graphs to a histogram
+(empirical posterior over all the DAGs) thus
+<pre>
+all_dags = mk_all_dags(N);
+mcmc_post = mcmc_sample_to_hist(sampled_graphs, all_dags);
+</pre>
+To see how well this performs, let us compute the exact posterior exhaustively.
+<p>
+<pre>
+score = score_dags(data, ns, all_dags);
+post = normalise(exp(score)); % assuming uniform structural prior
+</pre>
+We plot the results below.
+(The data set was 100 samples drawn from a random 4 node bnet; see the
+file BNT/examples/static/mcmc1.)
+<pre>
+subplot(2,1,1)
+bar(post)
+subplot(2,1,2)
+bar(mcmc_post)
+</pre>
+<img src="Figures/mcmc_post.jpg" width="800" height="500">
+<p>
+We can also plot the acceptance ratio versus number of MCMC steps,
+as a crude convergence diagnostic.
+<pre>
+clf
+plot(accept_ratio)
+</pre>
+<img src="Figures/mcmc_accept.jpg" width="800" height="300">
+<p>
+Even though the number of samples needed by MCMC is theoretically
+polynomial (not exponential) in the dimensionality of the search space, in practice it has been
+found that MCMC does not converge in reasonable time for graphs with
+more than about 10 nodes.
+
+
+
+
+<h2><a name="active">Active structure learning</h2>
+
+As was mentioned <a href="#markov_equiv">above</a>,
+one can only learn a DAG up to Markov equivalence, even given infinite data.
+If one is interested in learning the structure of a causal network,
+one needs interventional data.
+(By "intervention" we mean forcing a node to take on a specific value,
+thereby effectively severing its incoming arcs.)
+<p>
+Most of the scoring functions accept an optional argument
+that specifies whether a node was observed to have a certain value, or
+was forced to have that value: we set clamped(i,m)=1 if node i was
+forced in training case m. e.g., see the file
+BNT/examples/static/cooper_yoo.
+<p>
+An interesting question is to decide which interventions to perform
+(c.f., design of experiments). For details, see the following tech
+report
+<ul>
+<li> <a href = "../../Papers/alearn.ps.gz">
+Active learning of causal Bayes net structure</a>, Kevin Murphy, March
+2001.
+</ul>
+
+
+<h2><a name="struct_em">Structural EM</h2>
+
+Computing the Bayesian score when there is partial observability is
+computationally challenging, because the parameter posterior becomes
+multimodal (the hidden nodes induce a mixture distribution).
+One therefore needs to use approximations such as BIC.
+Unfortunately, search algorithms are still expensive, because we need
+to run EM at each step to compute the MLE, which is needed to compute
+the score of each model. An alternative approach is
+to do the local search steps inside of the M step of EM, which is more
+efficient since the data has been "filled in" - this is
+called the structural EM algorithm (Friedman 1997), and provably
+converges to a local maximum of the BIC score.
+<p> 
+Wei Hu has implemented SEM for discrete nodes.
+You can download his package from
+<a href="../SEM.zip">here</a>.
+Please address all questions about this code to
+wei.hu@intel.com.
+See also <a href="#phl">Phl's implementation of SEM</a>.
+
+<!--
+<h2><a name="reveal">REVEAL algorithm</h2>
+
+A simple way to learn the structure of a fully observed, discrete,
+factored DBN from a time series is described <a
+href="usage_dbn.html#struct_learn">here</a>.
+-->
+
+
+<h2><a name="graphdraw">Visualizing the graph</h2>
+
+You can visualize an arbitrary graph (such as one learned using the
+structure learning routines) with Matlab code contributed by
+<a href="http://www.mbfys.kun.nl/~cemgil/matlab/layout.html">Ali
+Taylan Cemgil</a>
+from the University of Nijmegen.
+For static BNs, call it as follows:
+<pre>
+draw_graph(bnet.dag);
+</pre>
+For example, this is the output produced on a
+<a href="#qmr">random QMR-like model</a>:
+<p>
+<img src="Figures/qmr.rnd.jpg">
+<p>
+If you install the excellent <a
+href="http://www.research.att.com/sw/tools/graphviz">graphhviz</a>, an
+open-source graph visualization package from AT&T,
+you can create a much better visualization as follows
+<pre>
+graph_to_dot(bnet.dag)
+</pre>
+This works by converting the adjacency matrix to a file suitable
+for input to graphviz (using the dot format),
+then converting the output of graphviz to postscript, and displaying the results using
+ghostview.
+You can do each of these steps separately for more control, as shown
+below.
+<pre>
+graph_to_dot(bnet.dag, 'filename', 'foo.dot');
+dot -Tps foo.dot -o foo.ps
+ghostview foo.ps &
+</pre>
+
+<h2><a name = "constraint">Constraint-based methods</h2>
+
+The IC algorithm (Pearl and Verma, 1991),
+and the faster, but otherwise equivalent, PC algorithm (Spirtes, Glymour, and Scheines 1993),
+computes many conditional independence tests,
+and combines these constraints into a
+PDAG to represent the whole
+<a href="#markov_equiv">Markov equivalence class</a>.
+<p>
+IC*/FCI extend IC/PC to handle latent variables: see <a href="#ic_star">below</a>.
+(IC stands for inductive causation; PC stands for Peter and Clark,
+the first names of Spirtes and Glymour; FCI stands for fast causal
+inference.
+What we, following Pearl (2000), call IC* was called
+IC in the original Pearl and Verma paper.)
+For details, see
+<ul>
+<li>
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Causation,
+Prediction, and Search</a>, Spirtes, Glymour and 
+Scheines (SGS), 2001 (2nd edition), MIT Press.
+<li> 
+<a href="http://bayes.cs.ucla.edu/BOOK-2K/index.html">Causality: Models, Reasoning and Inference</a>, J. Pearl, 
+2000, Cambridge University Press.
+</ul>
+
+<p>
+
+The PC algorithm takes as arguments a function f, the number of nodes N,
+the maximum fan in K, and additional arguments A which are passed to f.
+The function f(X,Y,S,A) returns 1 if X is conditionally independent of Y given S, and 0
+otherwise.
+For example, suppose we cheat by
+passing in a CI "oracle" which has access to the true DAG; the oracle
+tests for d-separation in this DAG, i.e.,
+f(X,Y,S) calls dsep(X,Y,S,dag). We can to this as follows.
+<pre>
+pdag = learn_struct_pdag_pc('dsep', N, max_fan_in, dag);
+</pre>
+pdag(i,j) = -1 if there is definitely an i->j arc,
+and pdag(i,j) = 1 if there is either an i->j or and i<-j arc.
+<p>
+Applied to the sprinkler network, this returns
+<pre>
+pdag =
+     0     1     1     0
+     1     0     0    -1
+     1     0     0    -1
+     0     0     0     0
+</pre>
+So as expected, we see that the V-structure at the W node is uniquely identified,
+but the other arcs have ambiguous orientation.
+<p>
+We now give an example from p141 (1st edn) / p103 (2nd end) of the SGS
+book.
+This example concerns the female orgasm.
+We are given a correlation matrix C between 7 measured factors (such
+as subjective experiences of coital and masturbatory experiences),
+derived from 281 samples, and want to learn a causal model of the
+data. We will not discuss the merits of this type of work here, but
+merely show how to reproduce the results in the SGS book.
+Their program,
+<a href="http://hss.cmu.edu/html/departments/philosophy/TETRAD/tetrad.html">Tetrad</a>,
+makes use of the Fisher Z-test for conditional
+independence, so we do the same:
+<pre>
+max_fan_in = 4;
+nsamples = 281;
+alpha = 0.05;
+pdag = learn_struct_pdag_pc('cond_indep_fisher_z', n, max_fan_in, C, nsamples, alpha);
+</pre>
+In this case, the CI test is
+<pre>
+f(X,Y,S) = cond_indep_fisher_z(X,Y,S,  C,nsamples,alpha)
+</pre>
+The results match those of Fig 12a of SGS apart from two edge
+differences; presumably this is due to rounding error (although it
+could be a bug, either in BNT or in Tetrad).
+This example can be found in the file BNT/examples/static/pc2.m.
+
+<p>
+
+The IC* algorithm (Pearl and Verma, 1991),
+and the faster FCI algorithm (Spirtes, Glymour, and Scheines 1993),
+are like the IC/PC algorithm, except that they can detect the presence
+of latent variables.
+See the file <tt>learn_struct_pdag_ic_star</tt> written by Tamar
+Kushnir. The output is a matrix P, defined as follows
+(see Pearl (2000), p52 for details):
+<pre>
+% P(i,j) = -1 if there is either a latent variable L such that i <-L->j OR there is a directed edge from i->j.
+% P(i,j) = -2 if there is a marked directed i-*>j edge.
+% P(i,j) = P(j,i) = 1 if there is and undirected edge i--j
+% P(i,j) = P(j,i) = 2 if there is a latent variable L such that i<-L->j.
+</pre>
+
+
+<h2><a name="phl">Philippe Leray's structure learning package</h2>
+
+Philippe Leray has written a 
+<a href="http://bnt.insa-rouen.fr/ajouts.html">
+structure learning package</a> that uses BNT.
+
+It currently (Juen 2003) has the following features:
+<ul>
+<li>PC with Chi2 statistical test 
+<li>             MWST : Maximum weighted Spanning Tree 
+<li>             Hill Climbing 
+<li>             Greedy Search 
+<li>             Structural EM 
+<li>             hist_ic : optimal Histogram based on IC information criterion 
+<li>             cpdag_to_dag 
+<li>             dag_to_cpdag 
+<li>             ... 
+</ul>
+
+
+</a>
+
+
+<!--
+<h2><a name="read_learning">Further reading on learning</h2>
+
+I recommend the following tutorials for more details on learning.
+<ul>
+<li> <a
+href="http://www.cs.berkeley.edu/~murphyk/Papers/intel.ps.gz">My short
+tutorial</a> on graphical models, which contains an overview of learning.
+
+<li> 
+<A HREF="ftp://ftp.research.microsoft.com/pub/tr/TR-95-06.PS">
+A tutorial on learning with Bayesian networks</a>, D. Heckerman,
+Microsoft Research Tech Report, 1995.
+
+<li> <A HREF="http://www-cad.eecs.berkeley.edu/~wray/Mirror/lwgmja">
+Operations for Learning with Graphical Models</a>,
+W. L. Buntine, JAIR'94, 159--225.
+</ul>
+<p>
+-->
+
+
+
+
+
+<h1><a name="engines">Inference engines</h1>
+
+Up until now, we have used the junction tree algorithm for inference.
+However, sometimes this is too slow, or not even applicable.
+In general, there are many inference algorithms each of which make
+different tradeoffs between speed, accuracy, complexity and
+generality. Furthermore, there might be many implementations of the
+same algorithm; for instance, a general purpose, readable version,
+and a highly-optimized, specialized one.
+To cope with this variety, we treat each inference algorithm as an
+object, which we call an inference engine.
+
+<p>
+An inference engine is an object that contains a bnet and supports the
+'enter_evidence' and 'marginal_nodes' methods.  The engine constructor
+takes the bnet as argument and may do some model-specific processing.
+When 'enter_evidence' is called, the engine may do some
+evidence-specific processing.  Finally, when 'marginal_nodes' is
+called, the engine may do some query-specific processing.
+
+<p>
+The amount of work done when each stage is specified -- structure,
+parameters, evidence, and query -- depends on the engine.  The cost of
+work done early in this sequence can be amortized.  On the other hand,
+one can make better optimizations if one waits until later in the
+sequence.
+For example, the parameters might imply
+conditional indpendencies that are not evident in the graph structure,
+but can nevertheless be exploited; the evidence indicates which nodes
+are observed and hence can effectively be disconnected from the
+graph; and the query might indicate that large parts of the network
+are d-separated from the query nodes.  (Since it is not the actual
+<em>values</em> of the evidence that matters, just which nodes are observed,
+many engines allow you to specify which nodes will be observed when they are constructed,
+i.e., before calling 'enter_evidence'. Some engines can still cope if
+the actual pattern of evidence is different, e.g., if there is missing
+data.)
+<p>
+
+Although being maximally lazy (i.e., only doing work when a query is
+issued) may seem desirable,
+this is not always the most efficient.
+For example,
+when learning using EM, we need to call marginal_nodes N times, where N is the
+number of nodes. <a href="varelim">Variable elimination</a> would end
+up repeating a lot of work
+each time marginal_nodes is called, making it inefficient for
+learning. The junction tree algorithm, by contrast, uses dynamic
+programming to avoid this redundant computation --- it calculates all
+marginals in two passes during 'enter_evidence', so calling
+'marginal_nodes' takes constant time.
+<p>
+We will discuss some of the inference algorithms implemented in BNT
+below, and finish with a <a href="#engine_summary">summary</a> of all
+of them.
+
+
+
+
+
+
+
+<h2><a name="varelim">Variable elimination</h2>
+
+The variable elimination algorithm, also known as bucket elimination
+or peeling, is one of the simplest inference algorithms.
+The basic idea is to "push sums inside of products"; this is explained
+in more detail
+<a
+href="http://HTTP.CS.Berkeley.EDU/~murphyk/Bayes/bayes.html#infer">here</a>. 
+<p>
+The principle of distributing sums over products can be generalized
+greatly to apply to any commutative semiring.
+This forms the basis of many common algorithms, such as Viterbi
+decoding and the Fast Fourier Transform. For details, see
+
+<ul>
+<li> R. McEliece and S. M. Aji, 2000.
+<!--<a href="http://www.systems.caltech.edu/EE/Faculty/rjm/papers/GDL.ps">-->
+<a href="GDL.pdf">
+The Generalized Distributive Law</a>,
+IEEE Trans. Inform. Theory, vol. 46, no. 2 (March 2000),
+pp. 325--343. 
+
+
+<li>
+F. R. Kschischang, B. J. Frey and H.-A. Loeliger, 2001.
+<a href="http://www.cs.toronto.edu/~frey/papers/fgspa.abs.html">
+Factor graphs and the sum-product algorithm</a>
+IEEE Transactions on Information Theory, February, 2001.
+
+</ul>
+
+<p>
+Choosing an order in which to sum out the variables so as to minimize
+computational cost is known to be NP-hard.
+The implementation of this algorithm in
+<tt>var_elim_inf_engine</tt> makes no attempt to optimize this
+ordering (in contrast, say, to <tt>jtree_inf_engine</tt>, which uses a
+greedy search procedure to find a good ordering).
+<p>
+Note: unlike most algorithms, var_elim does all its computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+
+
+<h2><a name="global">Global inference methods</h2>
+
+The simplest inference algorithm of all is to explicitely construct
+the joint distribution over all the nodes, and then to marginalize it.
+This is implemented in <tt>global_joint_inf_engine</tt>.
+Since the size of the joint is exponential in the
+number of discrete (hidden) nodes, this is not a very practical algorithm.
+It is included merely for pedagogical and debugging purposes.
+<p>
+Three specialized versions of this algorithm have also been implemented,
+corresponding to the cases where all the nodes are discrete (D), all
+are Gaussian (G), and some are discrete and some Gaussian (CG).
+They are called <tt>enumerative_inf_engine</tt>,
+<tt>gaussian_inf_engine</tt>,
+and <tt>cond_gauss_inf_engine</tt> respectively.
+<p>
+Note: unlike most algorithms, these global inference algorithms do all their computational work
+inside of <tt>marginal_nodes</tt>, not inside of
+<tt>enter_evidence</tt>.
+
+
+<h2><a name="quickscore">Quickscore</h2>
+
+The junction tree algorithm is quite slow on the <a href="#qmr">QMR</a> network,
+since the cliques are so big.
+One simple trick we can use is to notice that hidden leaves do not
+affect the posteriors on the roots, and hence do not need to be
+included in the network.
+A second trick is to notice that the negative findings can be
+"absorbed" into the prior:
+see the file
+BNT/examples/static/mk_minimal_qmr_bnet for details.
+<p>
+
+A much more significant speedup is obtained by exploiting special
+properties of the noisy-or node, as done by the quickscore
+algorithm. For details, see
+<ul>
+<li> Heckerman, "A tractable inference algorithm for diagnosing multiple diseases", UAI 89.
+<li> Rish and Dechter, "On the impact of causal independence", UCI
+tech report, 1998.
+</ul>
+
+This has been implemented in BNT as a special-purpose inference
+engine, which can be created and used as follows:
+<pre>
+engine = quickscore_inf_engine(inhibit, leak, prior);
+engine = enter_evidence(engine, pos, neg);
+m = marginal_nodes(engine, i);
+</pre>
+
+
+<h2><a name="belprop">Belief propagation</h2>
+
+Even using quickscore, exact inference takes time that is exponential
+in the number of positive findings.
+Hence for large networks we need to resort to approximate inference techniques.
+See for example
+<ul>
+<li> T. Jaakkola and M. Jordan, "Variational probabilistic inference and the
+QMR-DT network", JAIR 10, 1999.
+
+<li> K. Murphy, Y. Weiss and M. Jordan, "Loopy belief propagation for approximate inference: an empirical study",
+   UAI 99.
+</ul>
+The latter approximation
+entails applying Pearl's belief propagation algorithm to a model even
+if it has loops (hence the name loopy belief propagation).
+Pearl's algorithm, implemented as <tt>pearl_inf_engine</tt>, gives
+exact results when applied to singly-connected graphs
+(a.k.a. polytrees, since
+the underlying undirected topology is a tree, but a node may have
+multiple parents).
+To apply this algorithm to a graph with loops, 
+use <tt>pearl_inf_engine</tt>.
+This can use a centralized or distributed message passing protocol.
+You can use it as in the following example.
+<pre>
+engine = pearl_inf_engine(bnet, 'max_iter', 30);
+engine = enter_evidence(engine, evidence);
+m = marginal_nodes(engine, i);
+</pre>
+We found that this algorithm often converges, and when it does, often
+is very accurate, but it depends on the precise setting of the
+parameter values of the network.
+(See the file BNT/examples/static/qmr1 to repeat the experiment for yourself.)
+Understanding when and why belief propagation converges/ works
+is a topic of ongoing research.
+<p>
+<tt>pearl_inf_engine</tt> can exploit special structure in noisy-or
+and gmux nodes to compute messages efficiently.
+<p>
+<tt>belprop_inf_engine</tt> is like pearl, but uses potentials to
+represent messages. Hence this is slower.
+<p>
+<tt>belprop_fg_inf_engine</tt> is like belprop,
+but is designed for factor graphs.
+
+
+
+<h2><a name="sampling">Sampling</h2>
+
+BNT now (Mar '02) has two sampling (Monte Carlo) inference algorithms:
+<ul>
+<li> <tt>likelihood_weighting_inf_engine</tt> which does importance
+sampling and can handle any node type.
+<li> <tt>gibbs_sampling_inf_engine</tt>, written by Bhaskara Marthi.
+Currently this can only handle tabular CPDs.
+For a much faster and more powerful Gibbs sampling program, see
+<a href="http://www.mrc-bsu.cam.ac.uk/bugs">BUGS</a>.
+</ul>
+Note: To generate samples from a network (which is not the same as inference!),
+use <tt>sample_bnet</tt>.
+
+
+
+<h2><a name="engine_summary">Summary of inference engines</h2>
+
+
+The inference engines differ in many ways. Here are
+some of the major "axes":
+<ul>
+<li> Works for all topologies or makes restrictions? 
+<li> Works for all node types or makes restrictions?
+<li> Exact or approximate inference?
+</ul>
+
+<p>
+In terms of topology, most engines handle any kind of DAG.
+<tt>belprop_fg</tt> does approximate inference on factor graphs (FG), which
+can be used to represent directed, undirected, and mixed (chain)
+graphs.
+(In the future, we plan to support exact inference on chain graphs.)
+<tt>quickscore</tt> only works on QMR-like models.
+<p>
+In terms of node types: algorithms that use potentials can handle
+discrete (D), Gaussian (G) or conditional Gaussian (CG) models.
+Sampling algorithms can essentially handle any kind of node (distribution).
+Other algorithms make more restrictive assumptions in exchange for
+speed.
+<p>
+Finally, most algorithms are designed to give the exact answer.
+The belief propagation algorithms are exact if applied to trees, and
+in some other cases.
+Sampling is considered approximate, even though, in the limit of an
+infinite number of samples, it gives the exact answer.
+
+<p>
+
+Here is a summary of the properties 
+of all the engines in BNT which work on static networks.
+<p>
+<table>
+<table border units = pixels><tr>
+<td align=left width=0>Name
+<td align=left width=0>Exact?
+<td align=left width=0>Node type?
+<td align=left width=0>topology
+<tr>
+<tr>
+<td align=left> belprop
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> belprop_fg
+<td align=left> approx
+<td align=left> D
+<td align=left> factor graph
+<tr>
+<td align=left> cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> enumerative
+<td align=left> exact
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> gaussian
+<td align=left> exact
+<td align=left> G
+<td align=left> DAG
+<tr>
+<td align=left> gibbs
+<td align=left> approx
+<td align=left> D
+<td align=left> DAG
+<tr>
+<td align=left> global_joint
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+<tr>
+<td align=left> jtree
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+b<tr>
+<td align=left> likelihood_weighting
+<td align=left> approx
+<td align=left> any
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> approx
+<td align=left> D,G
+<td align=left> DAG
+<tr>
+<td align=left> pearl
+<td align=left> exact
+<td align=left> D,G
+<td align=left> polytree
+<tr>
+<td align=left> quickscore
+<td align=left> exact
+<td align=left> noisy-or
+<td align=left> QMR
+<tr>
+<td align=left> stab_cond_gauss
+<td align=left> exact
+<td align=left> CG
+<td align=left> DAG
+<tr>
+<td align=left> var_elim
+<td align=left> exact
+<td align=left> D,G,CG
+<td align=left> DAG
+</table>
+
+
+
+<h1><a name="influence">Influence diagrams/ decision making</h1>
+
+BNT implements an exact algorithm for solving LIMIDs (limited memory
+influence diagrams), described in
+<ul>
+<li> S. L. Lauritzen and D. Nilsson.
+<a href="http://www.math.auc.dk/~steffen/papers/limids.pdf">
+Representing and solving decision problems with limited
+information</a>
+Management Science, 47, 1238 - 1251. September 2001.
+</ul>
+LIMIDs explicitely show all information arcs, rather than implicitely
+assuming no forgetting. This allows them to model forgetful
+controllers.
+<p>
+See the examples in <tt>BNT/examples/limids</tt> for details.
+
+
+
+
+<h1>DBNs, HMMs, Kalman filters and all that</h1>
+
+Click <a href="usage_dbn.html">here</a> for documentation about how to
+use BNT for dynamical systems and sequence data.
+
+
+</BODY>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/docs/whyNotSourceforge.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+On 4 October 2007, I decided to move BNT back from
+<a href="http://bnt.sourceforge.net/">sourceforge</a> to my
+own website, where I could modify it more easily. I have no plans to
+add new functionality, but I at least want it to ensure it runs
+correctly on new versions of matlab. Despite new users complaining on
+the Yahoo group that BNT would 
+not work  on the latest  version of Matlab,  nobody in the sourceforce
+community did anything about it. As an opensource project, it was basically
+a failure (although I would like
+to thank Nicholas Saunier and Tom Murray (yozhik) for
+making code updates, 
+as well as Hiroaki Ogawa and mayliszt,
+and Bob Welch for answering many questions on the newsgroup.)
+For historical purposes,
+v1.0.3 (as of 4 Oct 07) has been cached
+<a href="http://www.cs.ubc.ca/~murphyk/Software/BNT/FullBNT-1.0.3.zip">here</a>.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/foptions.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function opt_vect = foptions()
+% FOPTIONS Sets default parameters for optimisation routines
+% For compatibility with MATLAB's foptions()
+%
+% Copyright (c) Dharmesh Maniyar, Ian T. Nabney (2004)
+  
+opt_vect      = zeros(1, 18);
+opt_vect(2:3) = 1e-4;
+opt_vect(4)   = 1e-6;
+opt_vect(16)  = 1e-8;
+opt_vect(17)  = 0.1;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/genpathKPM.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+function p = genpathKPM(d)
+% genpathKPM Like built-in genpath, but omits directories whose name is 'Old', 'old' or 'CVS'
+% function p = genpathKPM(d)
+
+if nargin==0,
+  p = genpath(fullfile(matlabroot,'toolbox'));
+  if length(p) > 1, p(end) = []; end % Remove trailing pathsep
+  return
+end
+
+% initialise variables
+methodsep = '@';  % qualifier for overloaded method directories
+p = '';           % path to be returned
+
+% Generate path based on given root directory
+files = dir(d);
+if isempty(files)
+  return
+end
+
+% Add d to the path even if it is empty.
+p = [p d pathsep];
+
+% set logical vector for subdirectory entries in d
+isdir = logical(cat(1,files.isdir));
+%
+% Recursively descend through directories which are neither
+% private nor "class" directories.
+%
+dirs = files(isdir); % select only directory entries from the current listing
+
+for i=1:length(dirs)
+   dirname = dirs(i).name;
+   if    ~strcmp( dirname,'.')         & ...
+         ~strcmp( dirname,'..')        & ...
+	 ~strcmp( dirname,'.svn')        & ...
+         ~strncmp( dirname,methodsep,1)& ...
+         ~strcmp( dirname,'private') & ...
+     	 ~strcmp( dirname, 'CVS') & ...
+	 isempty(strfind(dirname, 'Old')) & ...
+	 isempty(strfind(dirname, 'old')) 
+      p = [p genpathKPM(fullfile(d,dirname))]; % recursive calling of this function.
+   end
+end
+
+%------------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+/README.txt/1.1.1.1/Mon Aug 29 17:44:02 2005//
+/acyclic.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/assignEdgeNums.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/best_first_elim_order.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/check_jtree_property.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/check_triangulated.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/children.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/cliques_to_jtree.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/cliques_to_strong_jtree.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/connected_graph.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/dag_to_essential_graph.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/dfs.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/dfs_test.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/dijkstra.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/family.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/graph_separated.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/graph_to_jtree.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/min_subtree_con_nodes.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/minimum_spanning_tree.m/1.1.1.1/Mon Aug 29 17:44:04 2005//
+/minspan.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_2D_lattice.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_2D_lattice_slow.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_adj_mat.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_adjmat_chain.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_all_dags.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_nbrs_of_dag.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_nbrs_of_digraph.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_nbrs_of_digraph_broken.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_nbrs_of_digraph_not_vectorized.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_rnd_dag.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_rnd_dag_given_edge_prob.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_rooted_tree.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/mk_undirected.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/moralize.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/neighbors.m/1.1.1.1/Mon Aug 29 17:44:06 2005//
+/parents.m/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/pred2path.m/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/reachability_graph.m/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/scc.m/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/strong_elim_order.m/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/test.m/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/test_strong_root.m/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/topological_sort.m/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/trees.txt/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/triangulate.c/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/triangulate.m/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/triangulate_2Dlattice_demo.m/1.1.1.1/Mon Aug 29 17:44:08 2005//
+/triangulate_test.m/1.1.1.1/Mon Aug 29 17:44:08 2005//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/CVS/Entries.Log	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+A D/Old////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/graph
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/Old/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+/best_first_elim_order.m/1.1.1.1/Mon Aug 29 17:44:02 2005//
+/dag_to_jtree.m/1.1.1.1/Mon Aug 29 17:44:02 2005//
+/dfs.m/1.1.1.1/Mon Aug 29 17:44:02 2005//
+/dsep_test.m/1.1.1.1/Mon Aug 29 17:44:02 2005//
+/mk_2D_lattice_slow.m/1.1.1.1/Mon Aug 29 17:44:02 2005//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/Old/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/graph/Old
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/Old/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/Old/best_first_elim_order.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+function order = best_first_elim_order(G, node_sizes, stage)
+% BEST_FIRST_ELIM_ORDER Greedily search for an optimal elimination order.
+% order = best_first_elim_order(moral_graph, node_sizes)
+%
+% Find an order in which to eliminate nodes from the graph in such a way as to try and minimize the
+% weight of the resulting triangulated graph.  The weight of a graph is the sum of the weights of each
+% of its cliques; the weight of a clique is the product of the weights of each of its members; the
+% weight of a node is the number of values it can take on.
+%
+% Since this is an NP-hard problem, we use the following greedy heuristic:
+% at each step, eliminate that node which will result in the addition of the least
+% number of fill-in edges, breaking ties by choosing the node that induces the lighest clique.
+% For details, see
+% - Kjaerulff, "Triangulation of graphs -- algorithms giving small total state space",
+%      Univ. Aalborg tech report, 1990 (www.cs.auc.dk/~uk)
+% - C. Huang and A. Darwiche, "Inference in Belief Networks: A procedural guide",
+%      Intl. J. Approx. Reasoning, 11, 1994
+%
+
+% Warning: This code is pretty old and could probably be made faster.
+
+n = length(G);
+if nargin < 3, stage = { 1:n }; end % no constraints
+
+% For long DBNs, it may be useful to eliminate all the nodes in slice t before slice t+1.
+% This will ensure that the jtree has a repeating structure (at least away from both edges).
+% This is why we have stages.
+% See the discussion of splicing jtrees on p68 of
+% Geoff Zweig's PhD thesis, Dept. Comp. Sci., UC Berkeley, 1998.
+% This constraint can increase the clique size significantly.
+
+MG = G; % copy the original graph
+uneliminated = ones(1,n);
+order = zeros(1,n);
+t = 1;  % Counts which time slice we are on        
+for i=1:n
+  U = find(uneliminated);
+  valid = myintersect(U, stage{t});
+  % Choose the best node from the set of valid candidates
+  score1 = zeros(1,length(valid));
+  score2 = zeros(1,length(valid));
+  for j=1:length(valid)
+    k = valid(j);
+    ns = myintersect(neighbors(G, k), U);
+    l = length(ns);
+    M = MG(ns,ns);
+    score1(j) = l^2 - sum(M(:)); % num. added edges
+    score2(j) = prod(node_sizes([k ns])); % weight of clique
+  end
+  j1s = find(score1==min(score1));
+  j = j1s(argmin(score2(j1s)));
+  k = valid(j);
+  uneliminated(k) = 0;
+  order(i) = k;
+  ns = myintersect(neighbors(G, k), U);
+  if ~isempty(ns)
+    G(ns,ns) = 1;
+    G = setdiag(G,0);
+  end
+  if ~any(logical(uneliminated(stage{t}))) % are we allowed to the next slice?
+    t = t + 1;
+  end   
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/Old/dag_to_jtree.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+function [jtree, root, cliques, B, w, elim_order, moral_edges, fill_in_edges, strong] = ...
+    dag_to_jtree(dag, node_sizes, partial_order, stages, clusters)
+% DAG_TO_JTREE Moralize and triangulate a DAG, and make a junction tree from its cliques.
+% [jtree, root, cliques, B, w, elim_order, moral_edges, fill_in_edges, strong] = ...
+%    dag_to_jtree(dag, node_sizes, partial_order, stages, clusters)
+%
+% Input:
+% dag(i,j) 
+% jtree(i,j) = 1 iff there is an arc between clique i and clique j 
+% root = the root clique
+% cliques{i} = the nodes in clique i
+% B(i,j) = 1 iff node j occurs in clique i
+% w(i) = weight of clique i
+
+N = length(bnet.dag);
+if nargin < 2, obs_nodes = []; end
+if nargin < 3, stages = { 1:N }; end
+if nargin < 4, clusters = {}; end
+
+[MG, moral_edges]  = moralize(bnet.dag);
+
+% Add extra arcs between nodes in each cluster to ensure they occur in the same clique
+for i=1:length(clusters)
+  c = clusters{i};
+  MG(c,c) = 1;
+end
+MG = setdiag(MG, 0);
+
+% Find an optimal elimination ordering (NP-hard problem!)
+ns = bnet.node_sizes(:);
+ns(obs_nodes) = 1; % observed nodes have only 1 possible value
+partial_order = determine_elim_constraints(bnet, obs_nodes);
+
+if isempty(partial_order)
+  strong = 0;
+  elim_order = best_first_elim_order(MG, ns, stages);
+else
+  strong = 1;
+  elim_order = strong_elim_order(MG, ns, partial_order);
+end
+
+[MTG, cliques, fill_in_edges]  = triangulate(MG, elim_order);
+
+% Connect the cliques up into a jtree,
+[jtree, root, B, w] = cliques_to_jtree(cliques, ns);
+
+if 0
+  disp('testing dag to jtree');
+  % Find the cliques containing each node, and check they form a connected subtree
+  clqs_con_node = cell(1,N);
+  for i=1:N
+    clqs_con_node{i} = find(B(:,i))';
+  end
+  check_jtree_property(clqs_con_node, jtree);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/Old/dfs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,84 @@
+function [d, pre, post, height, cycle, pred] = dfs(adj_mat, start, directed)
+% DFS Perform a depth-first search of the graph starting from 'start'.
+% [d, pre, post, height, cycle, pred] = dfs(adj_mat, start, directed)
+%
+% d(i) is the time at which node i is first discovered.
+% pre is a listing of the nodes in the order in which they are first encountered (opened).
+% post is a listing of the nodes in the order in which they are last encountered (closed).
+% A node is last encountered once we have explored all of its neighbors.
+% If the graph is directed, i's neighbors are its children.
+% If the graph is a tree, preorder is parents before children, and
+% postorder is children before parents.
+% For a DAG, topological order = reverse(postorder).
+% height(i) is the height (distance) of node i from the start.
+% 'cycle' is true iff a (directed) cycle is found.
+% pred(i) is the parent of i in the dfs tree rooted at start.
+% See Cormen, Leiserson and Rivest, "An intro. to algorithms" 1994, p478.
+
+% We can detect undirected cycles by checking if we are about to visit a node n which we have
+% already visited. To detect *directed* cycles, we need to know if n has been closed or is still open.
+% For example (where arcs are directed down)
+%   1    2
+%   \   /
+%     3
+% Assume we visit 1, 3 and then 2 in order. The fact that a child of 2 (namely, 3) has
+% already been visited is okay, because 3 has been closed.
+% The algorithms in Aho, Hopcroft and Ullman, and Sedgewick, do not detect directed cycles.
+
+n = length(adj_mat);
+
+global white gray black
+white = 0; gray = 1; black = 2;
+
+color = white*ones(1,n);
+d = zeros(1,n);
+height = zeros(1,n);
+pred = zeros(1,n);
+pre = [];
+post = [];
+cycle = 0;
+global count
+count = 0;
+h = 0;
+[d, pre, post, height, cycle, color, pred] = ...
+    dfs2(adj_mat, start, directed, h, d, pre, post, height, cycle, color, pred);
+
+
+
+%%%%%%%%%%
+
+function [d, pre, post, height, cycle, color, pred] = ...
+    dfs2(adj_mat, i, directed, h, d, pre, post, height, cycle, color, pred)
+
+global count
+global white gray black
+
+color(i) = gray;
+count = count + 1;
+d(i) = count;
+pre = [pre i];
+height(i) = h;
+if directed
+  ns = children(adj_mat, i);
+else
+  ns = neighbors(adj_mat, i);
+end
+for j=1:length(ns)
+  n=ns(j);
+  if ~directed & n==pred(i) % don't go back up the edge you just came down
+    % continue
+  else
+    if color(n) == gray % going back to a non-closed vertex via a new edge
+      %fprintf(1, 'cycle from %d to %d\n', i, n);
+      cycle = 1;
+    end
+    if color(n) == white % not visited n before
+      pred(n)=i;
+      [d, pre, post, height, cycle, color, pred] = ...
+	  dfs2(adj_mat, n, directed, h+1, d, pre, post, height, cycle, color, pred);
+    end
+  end
+end
+color(i) = black;
+post = [post i];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/Old/dsep_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+
+% Cowell et al p72
+G = zeros(10);
+G(1,2)=1;
+G(2,3)=1;
+G(3,7)=1;
+G(4,[5 8])=1;
+G(5,6)=1;
+G(6,7)=1;
+G(7,[9 10])=1;
+G(8,9)=1;
+
+dsep(1, 4, [5 7], G)
+dsep(1, 4, [7], G)
+dsep(1, 4, [10 5], G)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/Old/mk_2D_lattice_slow.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,121 @@
+function G = mk_2D_lattice(nrows, ncols, wrap_around) 
+% MK_2D_LATTICE Return adjacency matrix for 4-nearest neighbor connected 2D lattice
+% G = mk_2D_lattice(nrows, ncols, wrap_around)
+% G(k1, k2) = 1 iff k1=(i1,j1) is connected to k2=(i2,j2)
+%
+% If wrap_around = 1, we use toroidal boundary conditions (default = 0)
+%
+% Nodes are assumed numbered as in the following 3x3 lattice
+%   1 4 7
+%   2 5 8 
+%   3 6 9
+%
+% e.g., G = mk_2D_lattice(3, 3, 0) returns
+%   0 1 0 1 0 0 0 0 0 
+%   1 0 1 0 1 0 0 0 0 
+%   0 1 0 0 0 1 0 0 0 
+%   1 0 0 0 1 0 1 0 0 
+%   0 1 0 1 0 1 0 1 0 
+%   0 0 1 0 1 0 0 0 1 
+%   0 0 0 1 0 0 0 1 0 
+%   0 0 0 0 1 0 1 0 1 
+%   0 0 0 0 0 1 0 1 0 
+% so find(G(5,:)) = [2 4 6 8] 
+% but find(G(1,:)) = [2 4]
+%
+% Using wrap around, G = mk_2D_lattice(3, 3, 1), we get
+%   0 1 1 1 0 0 1 0 0 
+%   1 0 1 0 1 0 0 1 0 
+%   1 1 0 0 0 1 0 0 1 
+%   1 0 0 0 1 1 1 0 0 
+%   0 1 0 1 0 1 0 1 0 
+%   0 0 1 1 1 0 0 0 1 
+%   1 0 0 1 0 0 0 1 1 
+%   0 1 0 0 1 0 1 0 1 
+%   0 0 1 0 0 1 1 1 0 
+% so find(G(5,:)) = [2 4 6 8] 
+% and find(G(1,:)) = [2 3 4 7]
+
+if nargin < 3, wrap_around = 0; end
+
+% M contains the number of each cell e.g.
+%   1 4 7
+%   2 5 8 
+%   3 6 9
+% North neighbors (assuming wrap around) are
+%   3 6 9
+%   1 4 7
+%   2 5 8
+% Without wrap around, they are
+%   1 4 7
+%   1 4 7
+%   2 5 8
+% The first row is arbitrary, since pixels at the top have no north neighbor.
+
+npixels = nrows*ncols;
+
+N = 1; E = 2; S = 3; W = 4;
+if wrap_around
+  rows{N} = [nrows 1:nrows-1]; cols{N} = 1:ncols;
+  rows{E} = 1:nrows; cols{E} = [2:ncols 1];
+  rows{S} = [2:nrows 1]; cols{S} = 1:ncols;
+  rows{W} = 1:nrows; cols{W} = [ncols 1:ncols-1];
+else
+  rows{N} = [1 1:nrows-1]; cols{N} = 1:ncols;
+  rows{E} = 1:nrows; cols{E} = [2:ncols 2];
+  rows{S} = [2:nrows 2]; cols{S} = 1:ncols;
+  rows{W} = 1:nrows; cols{W} = [1 1:ncols-1];
+end
+
+M = reshape(1:npixels, [nrows ncols]);
+nbrs = cell(1, 4);
+for i=1:4
+  nbrs{i} = M(rows{i}, cols{i});
+end
+
+
+G = zeros(npixels, npixels);
+if wrap_around
+  for i=1:4
+    if 0
+      % naive
+      for p=1:npixels
+	G(p, nbrs{i}(p)) = 1;
+      end
+    else
+      % vectorized
+      ndx2 = sub2ind([npixels npixels], 1:npixels, nbrs{i}(:)');
+      G(ndx2) = 1;
+    end
+  end
+else
+  i = N;
+  mask = ones(nrows, ncols);
+  mask(1,:) = 0; % pixels in row 1 have no nbr to the north
+  ndx = find(mask);
+  ndx2 = sub2ind([npixels npixels], ndx, nbrs{i}(ndx));
+  G(ndx2) = 1;
+
+  i = E;
+  mask = ones(nrows, ncols);
+  mask(:,ncols) = 0;
+  ndx = find(mask);
+  ndx2 = sub2ind([npixels npixels], ndx, nbrs{i}(ndx));
+  G(ndx2) = 1;
+
+  i = S;
+  mask = ones(nrows, ncols);
+  mask(nrows,:)=0;
+  ndx = find(mask);
+  ndx2 = sub2ind([npixels npixels], ndx, nbrs{i}(ndx));
+  G(ndx2) = 1;
+  
+  i = W;
+  mask = ones(nrows, ncols);
+  mask(:,1)=0;
+  ndx = find(mask);
+  ndx2 = sub2ind([npixels npixels], ndx, nbrs{i}(ndx));
+  G(ndx2) = 1;
+end
+
+G = setdiag(G, 0);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/README.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+Graph theory toolbox.
+All functions written by Kevin Murphy (1998) unless otherwise noted.
+The latest version is available from http://www.ai.mit.edu/~murphyk/Software/index.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/acyclic.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function b = acyclic(adj_mat, directed)
+% ACYCLIC Returns true iff the graph has no (directed) cycles.
+% b = acyclic(adj_mat, directed)
+
+adj_mat = double(adj_mat);
+if nargin < 2, directed = 1; end
+
+% e.g., G =
+% 1 -> 3
+%      |
+%      v
+% 2 <- 4   
+% In this case, 1->2 in the transitive closure, but 1 cannot get to itself.
+% If G was undirected, 1 could get to itself, but this graph is not cyclic.
+% So we cannot use the closure test in the undirected case.
+
+if directed
+  R = reachability_graph(adj_mat);
+  b = ~any(diag(R)==1);
+else
+  [d, pre, post, cycle] = dfs(adj_mat,[],directed);
+  b = ~cycle;    
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/assignEdgeNums.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function [edge_id, nedges] = assignEdgeNums(adj_mat)
+% give each edge a unique number
+% we number (i,j) for j>i first, in row, column order.
+% Then we number the reverse links
+
+nnodes = length(adj_mat);
+edge_id = zeros(nnodes);
+e = 1;
+for i=1:nnodes
+  for j=i+1:nnodes
+    if adj_mat(i,j)
+      edge_id(i,j) = e;
+      e = e+1;
+    end
+  end
+end
+
+nedges = e-1;
+tmp = edge_id;
+ndx = find(tmp);
+tmp(ndx) = tmp(ndx)+nedges;
+edge_id = edge_id + triu(tmp)';
+
+
+if 0
+ndx = find(adj_mat);
+nedges = length(ndx);
+nnodes = length(adj_mat);
+edge_id = zeros(1, nnodes*nnodes);
+edge_id(ndx) = 1:nedges; 
+edge_id = reshape(edge_id, nnodes, nnodes);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/best_first_elim_order.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+function order = best_first_elim_order(G, node_sizes, stage)
+% BEST_FIRST_ELIM_ORDER Greedily search for an optimal elimination order.
+% order = best_first_elim_order(moral_graph, node_sizes)
+%
+% Find an order in which to eliminate nodes from the graph in such a way as to try and minimize the
+% weight of the resulting triangulated graph.  The weight of a graph is the sum of the weights of each
+% of its cliques; the weight of a clique is the product of the weights of each of its members; the
+% weight of a node is the number of values it can take on.
+%
+% Since this is an NP-hard problem, we use the following greedy heuristic:
+% at each step, eliminate that node which will result in the addition of the least
+% number of fill-in edges, breaking ties by choosing the node that induces the lighest clique.
+% For details, see
+% - Kjaerulff, "Triangulation of graphs -- algorithms giving small total state space",
+%      Univ. Aalborg tech report, 1990 (www.cs.auc.dk/~uk)
+% - C. Huang and A. Darwiche, "Inference in Belief Networks: A procedural guide",
+%      Intl. J. Approx. Reasoning, 11, 1994
+%
+
+% Warning: This code is pretty old and could probably be made faster.
+
+n = length(G);
+if nargin < 3, stage = { 1:n }; end % no constraints
+
+% For long DBNs, it may be useful to eliminate all the nodes in slice t before slice t+1.
+% This will ensure that the jtree has a repeating structure (at least away from both edges).
+% This is why we have stages.
+% See the discussion of splicing jtrees on p68 of
+% Geoff Zweig's PhD thesis, Dept. Comp. Sci., UC Berkeley, 1998.
+% This constraint can increase the clique size significantly.
+
+MG = G; % copy the original graph
+uneliminated = ones(1,n);
+order = zeros(1,n);
+t = 1;  % Counts which time slice we are on        
+for i=1:n
+  U = find(uneliminated);
+  valid = myintersect(U, stage{t});
+  % Choose the best node from the set of valid candidates
+  min_fill = zeros(1,length(valid));
+  min_weight = zeros(1,length(valid));
+  for j=1:length(valid)
+    k = valid(j);
+    nbrs = myintersect(neighbors(G, k), U);
+    l = length(nbrs);
+    M = MG(nbrs,nbrs);
+    min_fill(j) = l^2 - sum(M(:)); % num. added edges
+    min_weight(j) = prod(node_sizes([k nbrs])); % weight of clique
+  end
+  lightest_nbrs = find(min_weight==min(min_weight));
+  % break ties using min-fill heuristic
+  best_nbr_ndx = argmin(min_fill(lightest_nbrs));
+  j = lightest_nbrs(best_nbr_ndx); % we will eliminate the j'th element of valid
+  %j1s = find(score1==min(score1));
+  %j = j1s(argmin(score2(j1s)));
+  k = valid(j);
+  uneliminated(k) = 0;
+  order(i) = k;
+  ns = myintersect(neighbors(G, k), U);
+  if ~isempty(ns)
+    G(ns,ns) = 1;
+    G = setdiag(G,0);
+  end
+  if ~any(logical(uneliminated(stage{t}))) % are we allowed to the next slice?
+    t = t + 1;
+  end   
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/check_jtree_property.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function check_jtree_property(cliques_containing_node, jtree)
+% CHECK_JTREE_PROPERTY Raise an error if the graph does not satisfy the join tree property.
+% check_jtree_property(cliques_containing_node, jtree_adj_mat)
+%
+% The join tree property says:
+% For each node n in the dag, compute the node-induced subgraph G by looking at all the cliques
+% that contain n, and make sure G forms a connected graph. 
+% This ensures that local propagation leads to global consistency.
+
+num_bn_nodes = length(cliques_containing_node);
+directed = 0;
+for i=1:num_bn_nodes
+  cs = cliques_containing_node{i};
+  G = jtree(cs,cs);
+  if ~connected_graph(G, directed)
+    error(['node ' num2str(i) ' violates jtree property']);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/check_triangulated.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function [triangulated, order] = check_triangulated(G)
+% CHECK_TRIANGULATED Return 1 if G is a triangulated (chordal) graph, 0 otherwise.
+% [triangulated, order] = check_triangulated(G)
+% 
+% A numbering alpha is perfect if Nbrs(alpha(i)) intersect {alpha(1)...alpha(i-1)} is complete.
+% A graph is triangulated iff it has a perfect numbering.
+% The Maximum Cardinality Search algorithm will create such a perfect numbering if possible.
+% See Golumbic, "Algorithmic Graph Theory and Perfect Graphs", Cambridge Univ. Press, 1985, p85.
+% or Castillo, Gutierrez and Hadi, "Expert systems and probabilistic network models", Springer 1997, p134.
+
+
+G = setdiag(G, 1);
+n = length(G);
+order = zeros(1,n);
+triangulated = 1;
+numbered = [1];
+order(1) = 1;
+for i=2:n
+  U = mysetdiff(1:n, numbered); % unnumbered nodes
+  score = zeros(1, length(U));
+  for ui=1:length(U)
+    u = U(ui);
+    score(ui) = length(myintersect(neighbors(G, u), numbered));
+  end
+  u = U(argmax(score));
+  numbered = [numbered u];
+  order(i) = u;
+  nns = myintersect(neighbors(G,u), order(1:i-1)); % numbered neighbors
+  if ~isequal(G(nns,nns), ones(length(nns))) % ~complete(G(nns,nns))
+    triangulated = 0;
+    break;
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/children.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function cs = children(adj_mat, i, t)
+% CHILDREN Return the indices of a node's children in sorted order
+% c = children(adj_mat, i, t)
+%
+% t is an optional argument: if present, dag is assumed to be a 2-slice DBN
+
+if nargin < 3 
+  cs = find(adj_mat(i,:));
+else
+  if t==1
+    cs = find(adj_mat(i,:));
+  else
+    ss = length(adj_mat)/2;
+    j = i+ss;
+    cs = find(adj_mat(j,:)) + (t-2)*ss;
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/cliques_to_jtree.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function [jtree, root, B, w] = cliques_to_jtree(cliques, ns)
+% MK_JTREE Make an optimal junction tree.
+% [jtree, root, B, w] = mk_jtree(cliques, ns)
+% 
+% A junction tree is a tree that satisfies the jtree property, which says:
+% for each pair of cliques U,V with intersection S, all cliques on the path between U and V
+% contain S. (This ensures that local propagation leads to global consistency.)
+%
+% We can create a junction tree by computing the maximal spanning tree of the junction graph.
+% (The junction graph connects all cliques, and the weight of an edge (i,j) is
+% |C(i) intersect C(j)|, where C(i) is the i'th clique.)
+%
+% The best jtree is the maximal spanning tree which minimizes the sum of the costs on each edge,
+% where cost(i,j) = w(C(i)) + w(C(j)), and w(C) is the weight of clique C,
+% which is the total number of values C can take on.
+%
+% For details, see
+%  - Jensen and Jensen, "Optimal Junction Trees", UAI 94.
+%
+% Input:
+%  cliques{i} = nodes in clique i
+%  ns(i) = number of values node i can take on
+% Output:
+%  jtree(i,j) = 1 iff cliques i and j aer connected
+%  root = the clique that should be used as root
+%  B(i,j) = 1 iff node j occurs in clique i
+%  w(i) = weight of clique i
+
+
+
+num_cliques = length(cliques);
+w = zeros(num_cliques, 1); 
+B = sparse(num_cliques, 1);
+for i=1:num_cliques
+  B(i, cliques{i}) = 1;
+  w(i) = prod(ns(cliques{i}));
+end
+
+
+% C1(i,j) = length(intersect(cliques{i}, cliques{j})); 
+% The length of the intersection of two sets is the dot product of their bit vector representation.
+C1 = B*B';
+C1 = setdiag(C1, 0);
+
+% C2(i,j) = w(i) + w(j)
+num_cliques = length(w);
+W = repmat(w, 1, num_cliques);
+C2 = W + W';
+C2 = setdiag(C2, 0);
+
+jtree = sparse(minimum_spanning_tree(-C1, C2)); % Using -C1 gives *maximum* spanning tree
+
+% The root is arbitrary, but since the first pass is towards the root,
+% we would like this to correspond to going forward in time in a DBN.
+root = num_cliques;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/cliques_to_strong_jtree.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,114 @@
+function [jtree, root, cliques, B, w] = mk_strong_jtree(cliques, ns, elim_order, MTG)
+% MK_SRONG_JTREE Make a strong junction tree.
+% [jtree, root, cliques, B, w] = mk_strong_jtree(cliques, ns, elim_order, MTG)
+%
+% Here is a definition of a strong jtree from Jensen et al. 1994:
+% "A junction tree is said to be strong if it has at least one distinguished clique R,
+% called a strong root, s.t. for each pair (C1,C2) of adjacent cliques in the tree,
+% with C1 closer to R than C2, there exists and ordering of [the nodes below] C2
+% that respects [the partial order] and with the vertices of the separator C1 intersect C2
+% preceeding the vertices [below C2] of C2 \ C1."
+%          
+% For details, see
+% - Jensen, Jensen and Dittmer, "From influence diagrams to junction trees", UAI 94.
+%
+% MTG is the moralized, triangulated graph.
+% elim_order is the elimination ordering used to compute MTG.
+
+
+% Warning: this is a very naive implementation of the algorithm in Jensen et al.
+
+n = length(elim_order);
+alpha(elim_order) = n:-1:1;
+% alpha(u) = i if we eliminate u at step n-i+1
+% i.e., vertices with higher alpha numbers are eliminated before vertices with lower numbers.
+% e.g., from the Jensen et al paper
+% node a=1 eliminated at step 6, so alpha(a)=16-6+1=11.
+% alpha = [11 1 2 10 9 3 4 7 5 8 13 12 6 16 15 14]
+
+
+% We sort the cliques in order of increasing index. The index of a clique C is defined as follows.
+% Let lower = {u | alpha(u) < alpha(v)}, and
+% let v in C be the highest-numbered vertex s.t. the vertices in W = lower intersect C
+% have a common neighbor u in U, where U = lower \ C.
+% If such a v exists, define index(C) = alpha(v), otherwise, index(C) = 1.
+% Intuitively, index(C) is the step in the elimination process at which C disappears.
+
+num_cliques = length(cliques);
+index = zeros(1, num_cliques);
+for c = 1:num_cliques
+  C = cliques{c};
+  highest_num = -inf;
+  for vi = 1:length(C)
+    v = C(vi);
+    lower = find(alpha < alpha(v));
+    W = myintersect(lower, C);
+    U = mysetdiff(lower, C);
+    found = 0;
+    for ui=1:length(U)
+      u = U(ui);
+      if mysubset(W, neighbors(MTG, u))
+	found = 1;
+	break;
+      end
+    end
+    if found
+      if alpha(v) > highest_num
+	highest_num = alpha(v);
+      end
+    end
+  end
+  if highest_num == -inf
+    index(c) = 1;
+  else
+    index(c) = highest_num;
+  end
+end
+
+
+% Permute the cliques so that they are ordered according to index
+[dummy, clique_order] = sort(index);
+cliques = cliques(clique_order);
+
+w = zeros(num_cliques, 1); 
+B = sparse(num_cliques, 1);
+for i=1:num_cliques
+  B(i, cliques{i}) = 1;
+  w(i) = prod(ns(cliques{i}));
+end
+
+% Pearl p113 suggests ordering the cliques by rank of the highest vertex in each clique.
+% However, this will only work if we use maximum cardinality search.
+
+
+% Join up the cliques so that they satisfy the Running Intersection Property.
+% This states that, for all k > 1, S(k) subseteq C(j) for some j < k, where
+% S(k) = C(k) intersect (union_{i=1}^{k-1} C(i))
+jtree = sparse(num_cliques, num_cliques);
+for k=2:num_cliques
+  S = [];
+  for i=1:k-1
+    S = myunion(S, cliques{i});
+  end
+  S = myintersect(S, cliques{k});
+  found = 0;
+  for j=1:k-1
+    if mysubset(S, cliques{j})
+      found = 1;
+      break;
+    end
+  end
+  if ~found
+    disp(['RIP is violated for clique ' num2str(k)]);
+  end
+  jtree(k,j)=1;
+  jtree(j,k)=1;
+end
+
+% Pearl p113 suggests connecting Ci to a predecessor Cj (j < i) sharing
+% the highest number of vertices with Ci (i.e., the heaviest i-j edge
+% in the jgraph). However, this will only work if we use maximum cardinality search.
+
+root = 1;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/connected_graph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function b = connected(adj_mat, directed)
+%
+% b = connected(adj_mat).
+% Returns true iff the graph is connected.
+
+n = length(adj_mat);
+start = 1;
+[d, pre] = dfs(adj_mat, start, directed);
+b = (length(pre) == n);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/dag_to_essential_graph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,112 @@
+
+function [eg] = dag_to_essential_graph(dag)
+cpdag = dag_to_cpdag(dag);
+eg = dag + dag .* (cpdag + cpdag');
+
+return;
+
+
+
+
+% Coverts a DAG into Essential Graph where edges are coded by 2 and 3, 2 is
+% directed edge and 3 is bidirected edge and is at one (the same as the original DAG) of the two
+% symetrical places. 
+
+% Is implemented by the algorithm of Max Chickering in D.M.Chickering (1995). 
+% A transformational characterization of equivalent Bayesian network structures. 
+% In Proceedings of Eleventh Conference on Uncertainty in Artificial Intelligence, Montreal, QU,
+% pages 87-98. Morgan Kaufmann 
+% http://research.microsoft.com/~dmax/publications/uai95.pdf 
+
+% Implemented by Tomas Kocka, AAU.
+
+function [eg] = dag_to_essential_graph(dagx)
+
+%print_dag(dagx); % Just checking input
+
+order = topological_sort(dagx); % get the topological order of nodes and their number
+
+% fprintf('the topological order is: %d',order);
+% fprintf('\n');
+
+[nx,ny] = size(dagx); % gets the number of nodes, note that nx == ny
+[I,J] = find(dagx); % finds all nonzero elements in the adjacency matrix, i.e. arcs in the DAG - however we will overwrite it in a special order
+% we will sort the arcs from lowest possible y and highest possible x, arcs are x->y
+e = 1;
+for y = 1:ny
+    for x = nx:-1:1
+        %fprintf('x %d ',order(x)); fprintf('y %d ',order(y));
+        if dagx(order(x),order(y)) == 1 
+            I(e) = order(x);
+            J(e) = order(y);
+            e = e + 1;
+            %fprintf('x order %d',x);
+            %fprintf('y order %d',y);
+            %fprintf('\n');
+        end
+    end
+end
+
+
+% fprintf('the arcs are: %d',I);
+% fprintf('\n');
+% fprintf('the arcs are: %d',J);
+% fprintf('\n');
+
+
+% Now we have to decide which arcs are part of the essential graph and
+% which are undirected edges in the essential graph.
+% Undecided arc in the DAG are 1, directed in EG are 2 and undirected in EG
+% are 3.
+
+
+for e = 1:length(I)
+    if dagx(I(e),J(e)) == 1
+        cont = true;
+        for w = 1:nx 
+            if dagx(w,I(e)) == 2
+                if dagx(w,J(e)) ~= 0
+                    dagx(w,J(e)) = 2;
+                else
+                    for ww = 1:nx
+                        if dagx(ww,J(e)) ~= 0
+                           dagx(ww,J(e)) = 2;
+                        end
+                    end % and now skip the rest and start with another arc from the list
+                    w = nx;
+                    cont = false;
+                end
+            end
+        end
+        if cont
+           exists = false;
+           for z = 1:nx
+               %fprintf('test %d',dagx(z,J(e)));
+               if dagx(z,J(e)) ~= 0 & z ~= I(e) & dagx(z,I(e)) == 0
+                  exists = true; 
+                  for ww = 1:nx
+                        if dagx(ww,J(e)) == 1
+                           dagx(ww,J(e)) = 2;
+                        end 
+                  end
+               end
+           end
+           if ~ exists
+               for ww = 1:nx
+                   if dagx(ww,J(e)) == 1
+                      dagx(ww,J(e)) = 3;
+                   end 
+               end  
+           end
+        end
+    end            
+end
+
+%print_dag(dagx); % Just checking output
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/dfs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,91 @@
+function [d, pre, post, cycle, f, pred] = dfs(adj_mat, start, directed)
+% DFS Perform a depth-first search of the graph starting from 'start'.
+% [d, pre, post, cycle, f, pred] = dfs(adj_mat, start, directed)
+%
+% Input:
+% adj_mat(i,j)=1 iff i is connected to j.
+% start is the root vertex of the dfs tree; if [], all nodes are searched
+% directed = 1 if the graph is directed
+%
+% Output:
+% d(i) is the time at which node i is first discovered.
+% pre is a list of the nodes in the order in which they are first encountered (opened).
+% post is a list of the nodes in the order in which they are last encountered (closed).
+% 'cycle' is true iff a (directed) cycle is found.
+% f(i) is the time at which node i is finished.
+% pred(i) is the predecessor of i in the dfs tree.
+%
+% If the graph is a tree, preorder is parents before children,
+% and postorder is children before parents.
+% For a DAG, topological order = reverse(postorder).
+%
+% See Cormen, Leiserson and Rivest, "An intro. to algorithms" 1994, p478.
+
+n = length(adj_mat);
+
+global white gray black color
+white = 0; gray = 1; black = 2;
+color = white*ones(1,n);
+
+global time_stamp
+time_stamp = 0;
+
+global d f
+d = zeros(1,n);
+f = zeros(1,n);
+
+global pred
+pred = zeros(1,n);
+
+global cycle
+cycle = 0;
+
+global pre post
+pre = [];
+post = [];
+
+if ~isempty(start)
+  dfs_visit(start, adj_mat, directed);
+end
+for u=1:n
+  if color(u)==white
+    dfs_visit(u, adj_mat, directed);
+  end
+end
+
+
+%%%%%%%%%%
+
+function dfs_visit(u, adj_mat, directed)
+
+global white gray black color time_stamp d f pred cycle  pre post
+
+pre = [pre u];
+color(u) = gray;
+time_stamp = time_stamp + 1;
+d(u) = time_stamp;
+if directed
+  ns = children(adj_mat, u);
+else
+  ns = neighbors(adj_mat, u);
+  ns = setdiff(ns, pred(u)); % don't go back to visit the guy who called you!
+end
+for v=ns(:)'
+  %fprintf('u=%d, v=%d, color(v)=%d\n', u, v, color(v))
+  switch color(v)
+    case white, % not visited v before (tree edge)
+     pred(v)=u;
+     dfs_visit(v, adj_mat, directed);
+   case gray, % back edge - v has been visited, but is still open
+    cycle = 1;
+    %fprintf('cycle: back edge from v=%d to u=%d\n', v, u);
+   case black, % v has been visited, but is closed
+    % no-op
+  end
+end
+color(u) = black;
+post = [post u];
+time_stamp = time_stamp + 1;
+f(u) = time_stamp;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/dfs_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+% Do the example in fig 23.4 p479 of Cormen, Leiserson and Rivest (1994)
+
+u = 1; v = 2; w = 3; x = 4; y = 5; z = 6;
+n = 6;
+dag=zeros(n,n);
+dag(u,[v x])=1;
+dag(v,y)=1;
+dag(w,[y z])=1;
+dag(x,v)=1;
+dag(y,x)=1;
+dag(z,z)=1;
+
+[d, pre, post, cycle, f, pred] = dfs(dag, [], 1);
+assert(isequal(d, [1 2 9 4 3 10]))
+assert(isequal(f, [8 7 12 5 6 11])
+assert(cycle)
+
+% Now give it an undirected cyclic graph
+G = mk_2D_lattice(2,2,0);
+% 1 - 3
+% |   |
+% 2 - 4
+[d, pre, post, cycle, f, pred] = dfs(G, [], 0);
+% d = [1 2 4 3]
+assert(cycle)
+
+% Now break the cycle
+G(1,2)=0; G(2,1)=0;
+[d, pre, post, cycle, f, pred] = dfs(G, [], 0);
+assert(~cycle)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/dijkstra.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,112 @@
+function [D,P] = dijk(A,s,t)
+%DIJK Shortest paths from nodes 's' to nodes 't' using Dijkstra algorithm.
+% [D,p] = dijk(A,s,t)
+%     A = n x n node-node weighted adjacency matrix of arc lengths
+%         (Note: A(i,j) = 0   => Arc (i,j) does not exist;
+%                A(i,j) = NaN => Arc (i,j) exists with 0 weight)
+%     s = FROM node indices
+%       = [] (default), paths from all nodes
+%     t = TO node indices
+%       = [] (default), paths to all nodes
+%     D = |s| x |t| matrix of shortest path distances from 's' to 't'
+%       = [D(i,j)], where D(i,j) = distance from node 'i' to node 'j' 
+%     P = |s| x n matrix of predecessor indices, where P(i,j) is the
+%         index of the predecessor to node 'j' on the path from 's(i)' to 'j'
+%         (use PRED2PATH to convert P to paths)
+%       = path from 's' to 't', if |s| = |t| = 1
+%
+%  (If A is a triangular matrix, then computationally intensive node
+%   selection step not needed since graph is acyclic (triangularity is a 
+%   sufficient, but not a necessary, condition for a graph to be acyclic)
+%   and A can have non-negative elements)
+%
+%  (If |s| >> |t|, then DIJK is faster if DIJK(A',t,s) used, where D is now
+%   transposed and P now represents successor indices)
+%
+%  (Based on Fig. 4.6 in Ahuja, Magnanti, and Orlin, Network Flows,
+%   Prentice-Hall, 1993, p. 109.)
+
+% Copyright (c) 1998-2001 by Michael G. Kay
+% Matlog Version 5 22-Aug-2001
+
+% Input Error Checking ******************************************************
+error(nargchk(1,3,nargin));
+
+[n,cA] = size(A);
+
+if nargin < 2 | isempty(s), s = (1:n)'; else s = s(:); end
+if nargin < 3 | isempty(t), t = (1:n)'; else t = t(:); end
+
+if ~any(any(tril(A) ~= 0))       % A is upper triangular
+   isAcyclic = 1;
+elseif ~any(any(triu(A) ~= 0))   % A is lower triangular
+   isAcyclic = 2;
+else                             % Graph may not be acyclic
+   isAcyclic = 0;
+end
+
+if n ~= cA
+   error('A must be a square matrix');
+elseif ~isAcyclic & any(any(A < 0))
+   error('A must be non-negative');
+elseif any(s < 1 | s > n)
+   error(['''s'' must be an integer between 1 and ',num2str(n)]);
+elseif any(t < 1 | t > n)
+   error(['''t'' must be an integer between 1 and ',num2str(n)]);
+end
+% End (Input Error Checking) ************************************************
+
+A = A';    % Use transpose to speed-up FIND for sparse A
+
+D = zeros(length(s),length(t));
+if nargout > 1, P = zeros(length(s),n); end
+
+for i = 1:length(s)
+   j = s(i);
+   
+   Di = Inf*ones(n,1); Di(j) = 0;
+   
+   isLab = logical(zeros(length(t),1));
+   if isAcyclic ==  1
+      nLab = j - 1;
+   elseif isAcyclic == 2
+      nLab = n - j;
+   else
+      nLab = 0;
+      UnLab = 1:n;
+      isUnLab = logical(ones(n,1));
+   end
+   
+   while nLab < n & ~all(isLab)
+      if isAcyclic
+         Dj = Di(j);
+      else	% Node selection
+         [Dj,jj] = min(Di(isUnLab));
+         j = UnLab(jj);
+         UnLab(jj) = [];
+         isUnLab(j) = 0;
+      end
+      
+      nLab = nLab + 1;
+      if length(t) < n, isLab = isLab | (j == t); end
+      
+      [jA,kA,Aj] = find(A(:,j));
+      Aj(isnan(Aj)) = 0;
+            
+      if isempty(Aj), Dk = Inf; else Dk = Dj + Aj; end
+      
+      if nargout > 1, P(i,jA(Dk < Di(jA))) = j; end
+      Di(jA) = min(Di(jA),Dk);
+      
+      if isAcyclic == 1       % Increment node index for upper triangular A
+         j = j + 1;
+      elseif isAcyclic == 2   % Decrement node index for lower triangular A
+         j = j - 1;
+      end
+   end
+   D(i,:) = Di(t)';
+end
+
+if nargout > 1 & length(s) == 1 & length(t) == 1
+   P = pred2path(P,s,t);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/family.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function f = family(A,i,t)
+% FAMILY Return the indices of parents and self in sorted order
+% f = family(dag,i,t)
+%
+% t is an optional argument: if present, dag is assumed to be a 2-slice DBN
+
+if nargin < 3 
+  f = [parents(A,i) i];
+else
+  if t == 1
+    f = [parents(A,i) i];
+  else
+    ss = length(A)/2;
+    j = i+ss;
+    f = [parents(A,j) j] + (t-2)*ss;
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/findroot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function root = findroot(bnet, cliques)
+
+%% findroot is to find the strong root in a clique tree assume it has one
+%% in the tree. For a clique tree constructed from a strongly triangulated
+%% graph, an interface clique that contains all discrete parents
+%% and at least one continuous node from a connected continuous component
+%% is for sure to be available as a guaranteed strong root.
+%% -By Wei Sun, George Mason University, 4/17/2010.
+
+%% We choose the interface clique that contains the max number 
+%% of interface nodes to be the strong root.
+n0 = 0 ;
+for i=1:length(cliques)
+    % check hybrid cliques
+    hc = intersect(cliques{i}, bnet.cnodes) ; 
+    hd = intersect(cliques{i}, bnet.dnodes) ;
+    if ~isempty(hd) & ~isempty(hc)
+        nd = length(hd) ;
+        if nd > n0
+            root = i ;
+            n0 = nd ;
+        end
+    end    
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/graph_separated.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function sep = graph_separated(G, X, Y, S)
+
+G2 = G;
+G2(S,:) = 0;
+G2(:,S) = 0;
+conn = reachability_graph(G2);
+conn2 = conn(X,Y);
+sep = all(conn2(:)==0);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/graph_to_jtree.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function [jtree, root, cliques, B, w, elim_order] = graph_to_jtree(MG, ns, partial_order, stages, clusters)
+% GRAPH_TO_JTREE Triangulate a graph and make a junction tree from its cliques.
+% [jtree, root, cliques, B, w, elim_order] = ...
+%    graph_to_jtree(graph, node_sizes, partial_order, stages, clusters)
+%
+% INPUT:
+% graph(i,j) = 1 iff there is an edge between i,j
+% node_weights(i) = num discrete values node i can take on [1 if observed]
+% partial_order = {} if no constraints on elimination ordering
+% stages{i} = nodes that must be eliminated at i'th stage (if porder is empty)
+% clusters{i} = list of nodes that must get connected together in the moral graph
+%
+% OUTPUT:
+% jtree(i,j) = 1 iff there is an arc between clique i and clique j 
+% root = the root clique
+% cliques{i} = the nodes in clique i
+% B(i,j) = 1 iff node j occurs in clique i
+% w(i) = weight of clique i
+
+N = length(MG);
+
+if nargin >= 5
+  % Add extra arcs between nodes in each cluster to ensure they occur in the same clique
+  for i=1:length(clusters)
+    c = clusters{i};
+    MG(c,c) = 1;
+  end
+end
+MG = setdiag(MG, 0);
+
+% Find an optimal elimination ordering (NP-hard problem!)
+if nargin < 4
+  stages = {1:N};
+end
+if nargin < 3
+  partial_order = {};
+end
+if isempty(partial_order)
+  strong = 0;
+  elim_order = best_first_elim_order(MG, ns, stages);
+else
+  strong = 1;
+  elim_order = strong_elim_order(MG, ns, partial_order);
+end
+
+[MTG, cliques, fill_in_edges]  = triangulate(MG, elim_order);
+
+% Connect the cliques up into a jtree,
+[jtree, root, B, w] = cliques_to_jtree(cliques, ns);
+
+if 0
+  disp('testing dag to jtree');
+  % Find the cliques containing each node, and check they form a connected subtree
+  clqs_con_node = cell(1,N);
+  for i=1:N
+    clqs_con_node{i} = find(B(:,i))';
+  end
+  check_jtree_property(clqs_con_node, jtree);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/min_subtree_con_nodes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+function [subtree, nroot_node] = min_subtree_con_nodes(jtree, root, nodes)
+%min_subtree_con_nodes get the minimum subtree of tree which contains the nodes
+
+if isempty(jtree) | isempty(nodes)
+    subtree = [];
+    nroot_node = [];
+    return;
+end
+
+rnodes = min_subtree_nodes(jtree, nodes);
+nea_node = nearest_node(jtree, root, nodes);
+node_num = length(jtree);
+subtree = zeros(node_num);
+subtree(rnodes, rnodes) = jtree(rnodes, rnodes);
+nroot_node = nea_node;
+
+
+function rnodes = min_subtree_nodes(tree, nodes)
+rnodes = [];
+if isempty(tree) | isempty(nodes)
+    return
+end
+
+rnodes = nodes(1);
+newnodes = neighbors(tree, nodes(1));
+while ~mysubset(nodes, rnodes)
+    swapnodes = newnodes;
+    newnodes = [];
+    added = 0;
+    for i=1:length(swapnodes)
+        inode = swapnodes(i);
+        tnodes = myunion(inode, rnodes);
+        if mysubset(nodes, tnodes)
+            added = 1;
+            break;
+        end
+        nns = neighbors(tree, inode);
+        add_nodes = mysetdiff(nns, tnodes);
+        newnodes = myunion(newnodes, add_nodes);
+    end
+    if added
+        rnodes = tnodes;
+    else
+        rnodes = myunion(rnodes, newnodes);
+    end
+end
+
+function nea_node = nearest_node(tree, inode, nodes)
+if myismember(inode, nodes)
+    nea_node = inode;
+    return;
+end
+cs = children(tree, inode);
+for i = 1:length(cs)
+    n = cs(i);
+    nea_node = nearest_node(tree, n, nodes);
+end
+    
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/minimum_spanning_tree.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+function A = minimum_spanning_tree(C1, C2)
+%
+% Find the minimum spanning tree using Prim's algorithm.
+% C1(i,j) is the primary cost of connecting i to j.
+% C2(i,j) is the (optional) secondary cost of connecting i to j, used to break ties.
+% We assume that absent edges have 0 cost.
+% To find the maximum spanning tree, used -1*C.
+% See Aho, Hopcroft & Ullman 1983, "Data structures and algorithms", p 237.
+
+% Prim's is O(V^2). Kruskal's algorithm is O(E log E) and hence is more efficient
+% for sparse graphs, but is implemented in terms of a priority queue.
+
+% We partition the nodes into those in U and those not in U.
+% closest(i) is the vertex in U that is closest to i in V-U.
+% lowcost(i) is the cost of the edge (i, closest(i)), or infinity is i has been used.
+% In Aho, they say C(i,j) should be "some appropriate large value" if the edge is missing.
+% We set it to infinity.
+% However, since lowcost is initialized from C, we must distinguish absent edges from used nodes.
+
+n = length(C1);
+if nargin==1, C2 = zeros(n); end
+A = zeros(n);
+
+closest = ones(1,n);
+used = zeros(1,n); % contains the members of U
+used(1) = 1; % start with node 1
+C1(find(C1==0))=inf;
+C2(find(C2==0))=inf;
+lowcost1 = C1(1,:);
+lowcost2 = C2(1,:);
+
+for i=2:n
+  ks = find(lowcost1==min(lowcost1));
+  k = ks(argmin(lowcost2(ks)));
+  A(k, closest(k)) = 1;
+  A(closest(k), k) = 1;
+  lowcost1(k) = inf;
+  lowcost2(k) = inf;
+  used(k) = 1;
+  NU = find(used==0);
+  for ji=1:length(NU)
+    for j=NU(ji)
+      if C1(k,j) < lowcost1(j)
+	lowcost1(j) = C1(k,j);
+	lowcost2(j) = C2(k,j);
+	closest(j) = k;
+      end
+    end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/minspan.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,56 @@
+function [t,nk] = minspan(IJC)
+%MINSPAN Minimum weight spanning tree using Kruskal algorithm.
+%[t,nk] = minspan(IJC)
+%   IJC = n x 3 matrix arc list [i j c] of arc heads, tails, and costs
+%     t = n-element logical vector, where 
+%         t(i) = 1, if IJC(i,:) arc in spanning tree
+%         t(i) = k, if IJC(i,:) arc in component k of forest
+%    nk = number of components
+
+% Copyright (c) 1998-2001 by Michael G. Kay
+% Matlog Version 5 22-Aug-2001
+
+% Input Error Checking ******************************************************
+[n,cIJC] = size(IJC);
+if cIJC ~= 3
+   error('''IJC'' must be a 3-column matrix.')
+elseif n < 1
+   error('''IJC'' must have at least one row.')
+elseif any(IJC(:,1) < 1) | any(any(~isint(IJC(:,[1 2]))))
+   error('Invalid arc index in IJC.')
+end
+% End (Input Error Checking) ************************************************
+
+i = IJC(:,1); j = abs(IJC(:,2));
+m = max(max([i j]));
+
+sidxIJ = argsort(IJC(:,3));
+i = i(sidxIJ); j = j(sidxIJ);
+
+t = logical(zeros(n,1));
+k = 1;            % Current arc
+nt = 0;           % Number of arcs in spanning tree
+v = (1:m)';       % Arc labels
+
+while nt < m - 1 & k <= n
+   if (v(i(k)) ~= v(j(k)))
+      v(v==v(j(k))) = v(i(k));
+      t(k) = 1;
+      nt = nt + 1;
+   end
+   k = k + 1;
+end
+
+idxIJ = invperm(sidxIJ);
+t = t(idxIJ); i = i(idxIJ); j = j(idxIJ);
+
+c = unique(v(unique([i; j])));   % Unique labels of arc vertices
+nk = length(c);
+if ~any(t), nk = 0; end          % Self-loop not a component
+
+if nk > 1
+   for k = 1:nk
+      t(t~=0 & v(i)==c(k)) = k;  % Relabel to consecutive component numbers
+   end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_2D_lattice.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function G = mk_2D_lattice(nrows, ncols, con)
+% MK_2D_LATTICE Return adjacency matrix for nearest neighbor connected 2D lattice
+% G = mk_2D_lattice(nrows, ncols, con)
+% G(k1, k2) = 1 iff k1=(i1,j1) is a neighbor of k2=(i2,j2) 
+% (Two pixels are neighbors if their Euclidean distance is less than r.)
+% Default connectivity = 4.
+%
+% WE ASSUME NO WRAP AROUND. 
+%
+% This is the neighborhood as a function of con:
+%
+%  con=4,r=1  con=8,r=sqrt(2)   con=12,r=2   con=24,r=sqrt(8)
+%  nn            2nd order        4th order
+%                                  x         x x x x x
+%    x          x x x            x x x       x x x x x
+%  x o x        x o x          x x o x x     x x o x x
+%    x          x x x            x x x       x x x x x
+%                                  x         x x x x x
+%
+% Examples:
+% Consider a 3x4 grid
+%  1  4  7  10
+%  2  5  8  11
+%  3  6  9  12
+%  
+% 4-connected:
+% G=mk_2D_lattice(3,4,4);
+% find(G(1,:)) = [2 4]
+% find(G(5,:)) = [2 4 6 8]
+%
+% 8-connected:
+% G=mk_2D_lattice(3,4,8);
+% find(G(1,:)) = [2 4 5]
+% find(G(5,:)) = [1 2 3 4 6 7 8 9]
+
+% meshgrid trick due to Temu Gautama (temu@neuro.kuleuven.ac.be)
+
+if nargin < 3, con = 4; end
+
+switch con,
+ case 4, r = 1;
+ case 8, r = sqrt(2);
+ case 12, r = 2;
+ case 24, r = sqrt(8);
+ otherwise, error(['unrecognized connectivity ' num2str(con)])
+end
+
+
+npixels = nrows*ncols;
+
+[x y]=meshgrid(1:ncols, 1:nrows);
+M = [x(:) y(:)];
+M1 = repmat(reshape(M',[1 2 npixels]),[npixels 1 1]);
+M2 = repmat(M,[1 1 npixels]);
+%D = squeeze(sum(abs(M1-M2),2)); % Manhattan distance
+M3 = M1-M2;
+D = sqrt(squeeze(M3(:,1,:)) .^2 + squeeze(M3(:,2,:)) .^2); % Euclidean distance
+G = reshape(D <= r,npixels,npixels);
+G = setdiag(G, 0);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_2D_lattice_slow.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,135 @@
+function G = mk_2D_lattice_slow(nrows, ncols, wrap_around) 
+% MK_2D_LATTICE Return adjacency matrix for 4-nearest neighbor connected 2D lattice
+% G = mk_2D_lattice(nrows, ncols, wrap_around)
+% G(k1, k2) = 1 iff k1=(i1,j1) is connected to k2=(i2,j2)
+%
+% If wrap_around = 1, we use toroidal boundary conditions (default = 0)
+%
+% Nodes are assumed numbered as in the following 3x3 lattice
+%   1 4 7
+%   2 5 8 
+%   3 6 9
+%
+% e.g., G = mk_2D_lattice(3, 3, 0) returns
+%   0 1 0 1 0 0 0 0 0 
+%   1 0 1 0 1 0 0 0 0 
+%   0 1 0 0 0 1 0 0 0 
+%   1 0 0 0 1 0 1 0 0 
+%   0 1 0 1 0 1 0 1 0 
+%   0 0 1 0 1 0 0 0 1 
+%   0 0 0 1 0 0 0 1 0 
+%   0 0 0 0 1 0 1 0 1 
+%   0 0 0 0 0 1 0 1 0 
+% so find(G(5,:)) = [2 4 6 8] 
+% but find(G(1,:)) = [2 4]
+%
+% Using wrap around, G = mk_2D_lattice(3, 3, 1), we get
+%   0 1 1 1 0 0 1 0 0 
+%   1 0 1 0 1 0 0 1 0 
+%   1 1 0 0 0 1 0 0 1 
+%   1 0 0 0 1 1 1 0 0 
+%   0 1 0 1 0 1 0 1 0 
+%   0 0 1 1 1 0 0 0 1 
+%   1 0 0 1 0 0 0 1 1 
+%   0 1 0 0 1 0 1 0 1 
+%   0 0 1 0 0 1 1 1 0 
+% so find(G(5,:)) = [2 4 6 8] 
+% and find(G(1,:)) = [2 3 4 7]
+
+if nargin < 3, wrap_around = 0; end
+
+% M contains the number of each cell e.g.
+%   1 4 7
+%   2 5 8 
+%   3 6 9
+% North neighbors (assuming wrap around) are
+%   3 6 9
+%   1 4 7
+%   2 5 8
+% Without wrap around, they are
+%   1 4 7
+%   1 4 7
+%   2 5 8
+% The first row is arbitrary, since pixels at the top have no north neighbor.
+
+if nrows==1
+  G = zeros(1, ncols);
+  for i=1:ncols-1
+    G(i,i+1) = 1;
+    G(i+1,i) = 1;
+  end
+  if wrap_around
+    G(1,ncols) = 1;
+    G(ncols,1) = 1;
+  end
+  return;
+end
+
+  
+npixels = nrows*ncols;
+
+N = 1; E = 2; S = 3; W = 4;
+if wrap_around
+  rows{N} = [nrows 1:nrows-1]; cols{N} = 1:ncols;
+  rows{E} = 1:nrows; cols{E} = [2:ncols 1];
+  rows{S} = [2:nrows 1]; cols{S} = 1:ncols;
+  rows{W} = 1:nrows; cols{W} = [ncols 1:ncols-1];
+else
+  rows{N} = [1 1:nrows-1]; cols{N} = 1:ncols;
+  rows{E} = 1:nrows; cols{E} = [1 1:ncols-1];
+  rows{S} = [2:nrows nrows]; cols{S} = 1:ncols;
+  rows{W} = 1:nrows; cols{W} = [2:ncols ncols];
+end
+
+M = reshape(1:npixels, [nrows ncols]);
+nbrs = cell(1, 4);
+for i=1:4
+  nbrs{i} = M(rows{i}, cols{i});
+end
+
+
+G = zeros(npixels, npixels);
+if wrap_around
+  for i=1:4
+    if 0
+      % naive
+      for p=1:npixels
+	G(p, nbrs{i}(p)) = 1;
+      end
+    else
+      % vectorized
+      ndx2 = sub2ind([npixels npixels], 1:npixels, nbrs{i}(:)');
+      G(ndx2) = 1;
+    end
+  end
+else
+  i = N;
+  mask = ones(nrows, ncols);
+  mask(1,:) = 0; % pixels in row 1 have no nbr to the north
+  ndx = find(mask);
+  ndx2 = sub2ind([npixels npixels], ndx, nbrs{i}(ndx));
+  G(ndx2) = 1;
+
+  i = E;
+  mask = ones(nrows, ncols);
+  mask(:,ncols) = 0;
+  ndx = find(mask);
+  ndx2 = sub2ind([npixels npixels], ndx, nbrs{i}(ndx));
+  G(ndx2) = 1;
+
+  i = S;
+  mask = ones(nrows, ncols);
+  mask(nrows,:)=0;
+  ndx = find(mask);
+  ndx2 = sub2ind([npixels npixels], ndx, nbrs{i}(ndx));
+  G(ndx2) = 1;
+  
+  i = W;
+  mask = ones(nrows, ncols);
+  mask(:,1)=0;
+  ndx = find(mask);
+  ndx2 = sub2ind([npixels npixels], ndx, nbrs{i}(ndx));
+  G(ndx2) = 1;
+end
+
+G = setdiag(G, 0);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_adj_mat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function [A, names] = mk_adj_mat(connections, names, topological)
+% MK_ADJ_MAT Make a directed adjacency matrix from a list of connections between named nodes.
+%
+% A = mk_adj_mat(connections, name)
+% This is best explaine by an example:
+%   names = {'WetGrass', 'Sprinkler', 'Cloudy', 'Rain'}; 
+%   connections = {'Cloudy', 'Sprinkler'; 'Cloudy', 'Rain'; 'Sprinkler', 'WetGrass'; 'Rain', 'WetGrass'}; 
+% adds the arcs C -> S, C -> R, S -> W, R -> W. Node 1 is W, 2 is S, 3 is C, 4 is R.
+%
+% [A, names] = mk_adj_mat(connections, name, 1)
+% The last argument of 1 indicates that we should topologically sort the nodes (parents before children).
+% In the example, the numbering becomes: node 1 is C, 2 is R, 3 is S, 4 is W
+% and the return value of names gets permuted to {'Cloudy', 'Rain', 'Sprinkler', 'WetGrass'}.
+% Note that topological sorting the graph is only possible if it has no directed cycles.
+
+if nargin < 3, topological = 0; end
+  
+n=length(names);
+A=zeros(n);
+[nr nc] = size(connections);
+for r=1:nr
+  from = strmatch(connections{r,1}, names, 'exact');
+  assert(~isempty(from));
+  to = strmatch(connections{r,2}, names, 'exact');
+  assert(~isempty(to));
+  %fprintf(1, 'from %s %d to %s %d\n', connections{r,1}, from, connections{r,2}, to);
+  A(from,to) = 1;
+end
+
+if topological
+  order = topological_sort(A); 
+  A = A(order, order); 
+  names = names(order); 
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_adjmat_chain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function G = mk_adjmat_chain(T)
+% MK_DAG_CHAIN Make adjacency matrix for bi-directional Markov chain of  T nodes
+% function G = mk_dag_chain(T)
+%
+% G(t,t+1) = 1 for all t<T
+
+G = diag(ones(1,T-1),1) + diag(ones(1,T-1),-1);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_all_dags.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function Gs = mk_all_dags(N, order)
+% MK_ALL_DAGS generate all DAGs on N variables
+% G = mk_all_dags(N)
+%
+% G = mk_all_dags(N, order) only generates DAGs in which node i has parents from 
+% nodes in order(1:i-1). Default: order=[] (no constraints).
+%
+% G{i} is the i'th dag
+%
+% Note: the number of DAGs is super-exponential in N, so don't call this with N > 4.
+
+if nargin < 2, order = []; end
+
+use_file = 0;
+
+global BNT_HOME
+fname = sprintf('%s/DAGS%d.mat', BNT_HOME, N);
+if use_file & exist(fname, 'file')
+  S = load(fname, '-mat');
+  fprintf('loading %s\n', fname);
+  Gs = S.Gs;
+  return;
+end
+
+m = 2^(N*N);
+ind = ind2subv(2*ones(1,N^2), 1:m);
+Gs = {};
+j = 1;
+directed = 1;
+for i=1:m
+  dag = reshape(ind(i,:)-1, N, N);
+  if acyclic(dag, directed)
+    out_of_order = 0;
+    if ~isempty(order)
+      for k=1:N-1
+	if any(dag(order(k+1:end), k))
+	  out_of_order = 1;
+	  break;
+	end
+      end
+    end
+    if ~out_of_order
+      Gs{j} = dag;
+      j = j + 1;
+    end
+  end
+end
+
+if use_file
+  disp(['mk_all_dags: saving to ' fname '!']);
+  save(fname, 'Gs');
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_nbrs_of_dag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+function [Gs, op, nodes] = mk_nbrs_of_dag(G0)
+% MK_NBRS_OF_DAG Make all DAGs that differ from G0 by a single edge deletion, addition or reversal
+% [Gs, op, nodes] = mk_nbrs_of_dag(G0)
+%
+% Gs{i} is the i'th neighbor.
+% op{i} = 'add', 'del', or 'rev' is the operation used to create the i'th neighbor.
+% nodes(i,1:2) are the head and tail of the operated-on arc.
+
+Gs = {};
+op = {};
+nodes = [];
+
+[I,J] = find(G0);
+nnbrs = 1;
+% all single edge deletions
+for e=1:length(I)
+  i = I(e); j = J(e);
+  G = G0;
+  G(i,j) = 0;
+  Gs{nnbrs} = G;
+  op{nnbrs} = 'del';
+  nodes(nnbrs, :) = [i j];
+  nnbrs = nnbrs + 1;
+end
+
+% all single edge reversals
+for e=1:length(I)
+  i = I(e); j = J(e);
+  G = G0;
+  G(i,j) = 0;
+  G(j,i) = 1;
+  if acyclic(G)
+    Gs{nnbrs} = G;
+    op{nnbrs} = 'rev';
+    nodes(nnbrs, :) = [i j];
+    nnbrs = nnbrs + 1;
+  end
+end
+
+[I,J] = find(~G0);
+% all single edge additions
+for e=1:length(I)
+  i = I(e); j = J(e);
+  if i ~= j % don't add self arcs
+    G = G0;
+    G(i,j) = 1;
+    if G(j,i)==0 % don't add i->j if j->i exists already
+      if acyclic(G)
+	Gs{nnbrs} = G;
+	op{nnbrs} = 'add';
+	nodes(nnbrs, :) = [i j];
+	nnbrs = nnbrs + 1;
+      end
+    end
+  end
+end
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_nbrs_of_digraph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,132 @@
+function [Gs, op, nodes, A] = my_mk_nbs_of_digraph(G0,A)
+% MY_MK_NBRS_OF_DIGRAPH Make all digraphs that differ from G0 by a single edge deletion, addition or reversal, subject to acyclicity
+% [Gs, op, nodes, A] = my_mk_nbrs_of_digraph(G0,<A>)
+%
+% G0 is an adj matrix s.t. G0(i,j)=1 iff i->j in graph
+% A is the ancestor matrix for G0  (opt, creates if necessary)
+%
+% Gs(:,:,i) is the i'th neighbor
+% op{i} = 'add', 'del', or 'rev' is the operation used to create the i'th neighbor. 
+% nodes(i,1:2) are the head and tail of the operated-on arc.
+% Modified from mk_nbrs_of_digraph by Sonia Leach
+%
+% Modified by Sonia Leach Feb 02
+
+if nargin ==1, A = reachability_graph(G0');, end
+
+n = length(G0);
+[I,J] = find(G0); % I(k), J(k) is the k'th edge
+E = length(I);    % num edges present in G0
+
+
+% SINGLE EDGE DELETIONS
+% all deletions are valid wrt acyclity
+
+Grep = repmat(G0(:), 1, E); % each column is a copy of G0
+% edge_ndx(k) is the scalar location of the k'th edge 
+edge_ndx = find(G0);
+
+% edge_ndx = subv2ind([n n], [I J]); % equivalent
+% We set (ndx(k), k) to 0 for k=1:E in Grep
+ndx = subv2ind(size(Grep), [edge_ndx(:) (1:E)']);
+G1 = Grep;
+G1(ndx) = 0;
+Gdel = reshape(G1, [n n E]);
+
+
+% SINGLE EDGE REVERSALS
+
+% SML: previously Kevin had that legal structure was if
+% A(P,i)=1 for any P = { p | p in parents(j), p~=i}
+% specifically he said 
+%  "if any(A(ps,i)) then there is a path i -> parent of j -> j
+%   so reversing i->j would create a cycle"
+% Thus put in another way:
+%    for each i,j if sum(G0(:,j)' * A(:,i)) > 0, reversing i->j
+% is not legal.
+%
+% Ex. Suppose we want to check if 2->4 can be reversed in the 
+% following graph: 
+% G0 =                               A =
+%     0     0     1     0               0     0     0     0
+%     0     0     1     1               0     0     0     0
+%     0     0     0     1               1     1     0     0
+%     0     0     0     0               1     1     1     0
+% 
+% Then parents(4) = G0(:,4) = [0 1 1 0]'
+% and A(:,2) = [0 0 1 1]. Thus G0(:,4)'*A(:,2) = 1 b/c 3 is
+% an ancestor of 4 and a child of 2. Note that this works b/c
+% matrix multiplication has the effect of ANDing the two vectors 
+% and summing up the result (equiv. to the any(A(ps,i)) in kevin's code)
+%
+% So, we vectorize and check for all i,j pairs by looking for
+% 1's in L = (G0'*A)' which has L(i,j)=1 if rev(i,j) not legal
+% Note that this will give 1's where there are none in the G0
+% so we do a L=max(0, G0-L) to cancel out only the existing edges that 
+% aren't legal (subtracting where both are 1 and setting where
+% G0=0 and A=1 back to 0).
+
+L = max(0, G0-(G0'*A)');
+[IL, JL] = find(L);  % I(k), J(k) is the k'th legal edge to rev.
+EL = length(IL);
+
+
+% SML: First we have to DELETE THE EDGES WE ARE REVERSING
+% We can't use G1 w/ reversed edges already deleted (as
+% Kevin did) b/c the space of possible deletions are different 
+% now (some reverses aren't legal)
+
+Grep = repmat(G0(:), 1, EL); % each column is a copy of G0
+% edge_ndx(k) is the scalar location of the k'th edge 
+edge_ndx = subv2ind([n n], [IL JL]); 
+% We set (ndx(k), k) to 0 for k=1:E in Grep
+ndx = subv2ind(size(Grep), [edge_ndx(:) (1:EL)']);
+G1 = Grep;
+G1(ndx) = 0;
+
+% SML: Now we add in our REVERSED EDGES
+% rev_edge_ndx(k) is the scalar location of the k'th legal reversed edge
+rev_edge_ndx = subv2ind([n n], [JL IL]);
+
+% We set (rev_edge_ndx(k), k) to 1 for k=1:EL in G1
+% We have already deleted i->j in the previous step
+ndx = subv2ind(size(Grep), [rev_edge_ndx(:) (1:EL)']);
+G1(ndx) = 1;
+Grev = reshape(G1, [n n EL]);
+
+% SINGLE EDGE ADDITIONS
+
+% SML: previously Kevin had that any addition was legal if A(i,j)=0
+% however, you can not add i->j  if j is a descendent of i.
+% Thus, we create all possible additions in Gbar and then
+% subtract the descendants of each edge as possible parents
+% This means the potential parents of i (i.e. Gbar(:,i))
+% can not also be descendants if i i.e. (A(:,i)) which is accomplished
+% by subtracting (Gbar-A == 1 iff Gbar=1 & A=0)
+
+Gbar = ~G0;  % Gbar(i,j)=1 iff there is no i->j edge in G0
+Gbar = setdiag(Gbar, 0); % turn off self loops
+
+GbarL = Gbar-A;
+[IbarL, JbarL] = find(GbarL);  % I(k), J(k) is the k'th legal edge to add
+EbarL = length(IbarL);
+
+bar_edge_ndx = find(GbarL);
+
+Grep = repmat(G0(:), 1, EbarL); % each column is a copy of G0
+ndx = subv2ind(size(Grep), [bar_edge_ndx(:) (1:EbarL)']);
+Grep(ndx) = 1;
+Gadd = reshape(Grep, [n n EbarL]);
+
+
+Gs = cat(3, Gdel, Grev, Gadd);
+
+nodes = [I J;
+     IL JL;
+   IbarL JbarL];
+
+op = cell(1, E+EL+EbarL);
+op(1:E) = {'del'};
+op(E+(1:EL)) = {'rev'};
+op((E+EL+1):end) = {'add'};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_nbrs_of_digraph_broken.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,111 @@
+function [Gs, op, nodes] = mk_nbrs_of_digraph(G0)
+% MK_NBRS_OF_DIGRAPH Make all digraphs that differ from G0 by a single edge deletion, addition or reversal
+% [Gs, op, nodes] = mk_nbrs_of_digraph(G0)
+%
+% Gs(:,:,i) is the i'th neighbor
+% op{i} = 'add', 'del', or 'rev' is the operation used to create the i'th neighbor. 
+% nodes(i,1:2) are the head and tail of the operated-on arc.
+
+debug = 0; % the vectorized version is about 3 to 10 times faster
+
+n = length(G0);
+[I,J] = find(G0); % I(k), J(k) is the k'th edge
+E = length(I); % num edges present in G0
+
+% SINGLE EDGE DELETIONS
+
+Grep = repmat(G0(:), 1, E); % each column is a copy of G0
+% edge_ndx(k) is the scalar location of the k'th edge 
+edge_ndx = find(G0);
+% edge_ndx = subv2ind([n n], [I J]); % equivalent
+% We set (ndx(k), k) to 0 for k=1:E in Grep
+ndx = subv2ind(size(Grep), [edge_ndx(:) (1:E)']);
+G1 = Grep;
+G1(ndx) = 0;
+Gdel = reshape(G1, [n n E]);
+
+
+% if debug
+% % Non-vectorized version
+% ctr = 1;
+% for e=1:E
+%   i = I(e); j = J(e);
+%   Gdel2(:,:,ctr) = G0;
+%   Gdel2(i,j,ctr) = 0;
+%   ctr = ctr + 1;
+% end
+% assert(isequal(Gdel, Gdel2));
+% end
+
+
+% SINGLE EDGE REVERSALS
+
+% rev_edge_ndx(k) is the scalar location of the k'th reversed edge
+%rev_edge_ndx = find(G0'); % different order to edge_ndx, which is bad
+rev_edge_ndx = subv2ind([n n], [J I]);
+% We set (rev_edge_ndx(k), k) to 1 for k=1:E in G1
+% We have already deleted i->j in the previous step
+ndx = subv2ind(size(Grep), [rev_edge_ndx(:) (1:E)']);
+G1(ndx) = 1;
+Grev = reshape(G1, [n n E]);
+
+% if debug
+% % Non-vectorized version
+% ctr = 1;
+% for e=1:E
+%   i = I(e); j = J(e);
+%   Grev2(:,:,ctr) = G0;
+%   Grev2(i,j,ctr) = 0;
+%   Grev2(j,i,ctr) = 1;
+%   ctr = ctr + 1;
+% end
+% assert(isequal(Grev, Grev2));
+% end
+
+
+% SINGLE EDGE ADDITIONS
+
+Gbar = ~G0; % Gbar(i,j)=1 iff there is no i->j edge in G0
+Gbar = setdiag(Gbar, 0); % turn off self loops
+[Ibar,Jbar] = find(Gbar); 
+
+bar_edge_ndx = find(Gbar);
+Ebar = length(Ibar); % num edges present in Gbar
+Grep = repmat(G0(:), 1, Ebar); % each column is a copy of G0
+ndx = subv2ind(size(Grep), [bar_edge_ndx(:) (1:Ebar)']);
+Grep(ndx) = 1;
+Gadd = reshape(Grep, [n n Ebar]);
+
+% if debug
+% % Non-vectorized version
+% ctr = 1;
+% for e=1:length(Ibar)
+%   i = Ibar(e); j = Jbar(e);
+%   Gadd2(:,:,ctr) = G0;
+%   Gadd2(i,j,ctr) = 1;
+%   ctr = ctr + 1;
+% end
+% assert(isequal(Gadd, Gadd2));
+% end
+
+
+Gs = cat(3, Gdel, Grev, Gadd);
+
+nodes = [I J;
+	 I J;
+	 Ibar Jbar];
+
+op = cell(1, E+E+Ebar);
+op(1:E) = {'del'};
+op(E+1:2*E) = {'rev'};
+op(2*E+1:end) = {'add'};
+
+
+% numeric output:
+% op(i) = 1, 2, or 3, if the i'th neighbor was created by adding, deleting or reversing an arc.
+
+ADD = 1;
+DEL = 2;
+REV = 3;
+
+%op = [repmat(DEL, 1, E) repmat(REV, 1, E) repmat(ADD, 1, Ebar)];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_nbrs_of_digraph_not_vectorized.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function [Gs, op, nodes] = mk_nbrs_of_digraph2(G0)
+% MK_NBRS_OF_DIGRAPH Make all digraphs that differ from G0 by a single edge deletion, addition or reversal
+% [Gs, op, nodes] = mk_nbrs_of_digraph(G0)
+% op{i} = 'add', 'del', or 'rev' is the operation used to create the i'th neighbor.
+% nodes(i,1:2) are the head and tail of the operated-on arc.
+
+[I,J] = find(G0);
+G0bar = setdiag(~G0, 0); % exclude self loops in graph complement
+[Ibar,Jbar] = find(G0bar);
+nnbrs = 2*length(I) + length(Ibar);
+Gs = cell(1, nnbrs);
+op = cell(1, nnbrs);
+nodes = zeros(nnbrs, 2);
+
+nbr = 1;
+% all single edge deletions
+for e=1:length(I)
+  i = I(e); j = J(e);
+  G = G0;
+  G(i,j) = 0;
+  Gs{nbr} = G;
+  op{nbr} = 'del';
+  nodes(nbr, :) = [i j];
+  nbr = nbr + 1;
+end
+
+% all single edge reversals
+for e=1:length(I)
+  i = I(e); j = J(e);
+  G = G0;
+  G(i,j) = 0;
+  G(j,i) = 1;
+  Gs{nbr} = G;
+  op{nbr} = 'rev';
+  nodes(nbr, :) = [i j];
+  nbr = nbr + 1;
+end
+
+[I,J] = find(~G0);
+% all single edge additions
+for e=1:length(I)
+  i = I(e); j = J(e);
+  G = G0;
+  if i ~= j % don't add self loops
+    G(i,j) = 1;
+    Gs{nbr} = G;
+    op{nbr} = 'add';
+    nodes(nbr, :) = [i j];
+    nbr = nbr + 1;
+  end
+end
+
+assert(nnbrs == nbr-1);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_rnd_dag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function [dag, order] = mk_rnd_dag(N, max_fan_in)
+% MY_MK_RND_DAG  Create a random directed acyclic graph
+%
+% [dag, order] = my_mk_rnd_dag(N, max_fan_in)
+%  max_fan_in defaults to N.
+%  order is the random topological order that was chosen
+
+% Modified by Sonia Leach 2/25/02
+
+if nargin < 2, max_fan_in = N; end
+
+order = randperm(N);
+dag = zeros(N,N);
+for i=2:N
+  j = order(i);
+  %k = sample_discrete(normalise(ones(1, min(i-1, max_fan_in))));
+  k = sample_discrete(normalise(ones(1, min(i-1, max_fan_in)+1))) - 1; % min = 0 (bug fix due to
+                                                                       % Pedrito, 7/28/04)
+  SS = order(1:i-1);          % get Set of possible parentS
+  p  = randperm(length(SS));  % permute order of set
+  dag(SS(p(1:k)),j) = 1;      % take first k in permuted order
+
+  % Kevin had:
+  %SS = subsets(order(1:i-1), k, k);
+  %p = sample_discrete(normalise(ones(1, length(SS))));
+  %dag(SS{p}, j) = 1;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_rnd_dag_given_edge_prob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function dag = sample_dag(P)
+% SAMPLE_DAG Create a random directed acyclic graph with edge probabilities P(i,j)
+% dag = sample_dag(P)
+%
+% This uses rejection sampling to reject graphs with directed cycles.
+
+done = 0;
+directed = 1;
+iter = 1;
+while ~done
+  dag = binornd(1, P); % each edge is an indep Bernoulli (0/1) random variable
+  dag = setdiag(dag, 0);
+  done = acyclic(dag, directed);
+  iter = iter + 1
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_rooted_tree.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function [T, pre, post, cycle] = mk_rooted_tree(G, root)
+% MK_ROOTED_TREE Make a directed tree pointing away from root
+% [T, pre, post, cycle] = mk_rooted_tree(G, root)
+
+n = length(G);
+T = sparse(n,n); % not the same as T = sparse(n) !
+directed = 0;
+[d, pre, post, cycle, f, pred] = dfs(G, root, directed);
+[junk, pre2] = sort(d);
+assert(isequal(pre, pre2))
+[junk, post2] = sort(f);
+assert(isequal(post, post2));
+%[d, pre, post, cycle, f, pred] = dfs(G, [], directed);
+for i=1:length(pred)
+  if pred(i)>0
+    T(pred(i),i)=1;
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/mk_undirected.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function U = mk_undirected(G)
+
+[nr nc] = size(G);
+U = G;
+for i=1:nr
+  for j=1:nc
+    if U(i,j)==1
+      U(j,i) = 1;
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/moralize.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function [M, moral_edges] = moralize(G)
+% MORALIZE Ensure that for every child, all its parents are married, and drop directionality of edges.
+% [M, moral_edges] = moralize(G)
+
+M = G;
+n = length(M);
+for i=1:n
+  fam = family(G,i);
+  M(fam,fam)=1;
+end
+M = setdiag(M,0);
+moral_edges = sparse(triu(max(0,M-G),1));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/neighbors.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function ns = neighbors(adj_mat, i)
+% NEIGHBORS Find the parents and children of a node in a graph.
+% ns = neighbors(adj_mat, i)
+
+%ns = myunion(children(adj_mat, i), parents(adj_mat, i));
+ns = [find(adj_mat(i,:)) find(adj_mat(:,i))'];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/parents.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function ps = parents(adj_mat, i)
+% PARENTS Return the list of parents of node i
+% ps = parents(adj_mat, i)
+
+ps = find(adj_mat(:,i))';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/pred2path.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,78 @@
+function rte = pred2path(P,s,t)
+%PRED2PATH Convert predecessor indices to shortest paths from node 's' to 't'.
+%   rte = pred2path(P,s,t)
+%     P = |s| x n matrix of predecessor indices (from DIJK)
+%     s = FROM node indices
+%       = [] (default), paths from all nodes
+%     t = TO node indices
+%       = [] (default), paths to all nodes
+%   rte = |s| x |t| cell array of paths (or routes) from 's' to 't', where
+%         rte{i,j} = path from s(i) to t(j)
+%                  = [], if no path exists from s(i) to t(j)
+%
+% (Used with output of DIJK)
+
+% Copyright (c) 1998-2001 by Michael G. Kay
+% Matlog Version 5 22-Aug-2001
+
+% Input Error Checking ******************************************************
+error(nargchk(1,3,nargin));
+
+[rP,n] = size(P);
+
+if nargin < 2 | isempty(s), s = (1:n)'; else s = s(:); end
+if nargin < 3 | isempty(t), t = (1:n)'; else t = t(:); end
+
+if any(P < 0 | P > n)
+   error(['Elements of P must be integers between 1 and ',num2str(n)]);
+elseif any(s < 1 | s > n)
+   error(['''s'' must be an integer between 1 and ',num2str(n)]);
+elseif any(t < 1 | t > n)
+   error(['''t'' must be an integer between 1 and ',num2str(n)]);
+end
+% End (Input Error Checking) ************************************************
+
+rte = cell(length(s),length(t));
+
+for i = 1:length(s)
+   if rP == 1
+      si = 1;
+   else
+      si = s(i);
+      if si < 1 | si > rP
+         error('Invalid P matrix.')
+      end
+   end
+   for j = 1:length(t)
+      tj = t(j);
+      if tj == s(i)
+         r = tj;
+      elseif P(si,tj) == 0
+         r = [];
+      else
+         r = tj;
+         while tj ~= s(i)
+            if tj < 1 | tj > n
+               error('Invalid element of P matrix found.')
+            end
+            r = [P(si,tj) r];
+            tj = P(si,tj);
+         end
+      end
+      rte{i,j} = r;
+   end
+end
+
+if length(s) == 1 & length(t) == 1
+   rte = rte{:};
+end
+
+%rte = t;
+while 0%t ~= s
+   if t < 1 | t > n | round(t) ~= t
+      error('Invalid ''pred'' element found prior to reaching ''s''');
+   end
+   rte = [P(t) rte];
+   t = P(t);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/reachability_graph.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function C = reachability_graph(G)
+% REACHABILITY_GRAPH C(i,j) = 1 iff there is a path from i to j in DAG G
+% C = reachability_graph(G)
+
+if 1
+  % expm(G) = I + G + G^2 / 2! + G^3 / 3! + ...
+  M = expm(double(full(G))) - eye(length(G));
+  C = (M>0);
+else
+  % This computes C = G + G^2 + ... + G^{n-1}
+  n = length(G);
+  A = G;
+  C = zeros(n);
+  for i=1:n-1
+    C = C + A;
+    A = A * G;
+  end
+  C = (C > 0);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/scc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+function [c,v] = scc(a,tol)
+
+%       Finds the strongly connected sets of vertices
+%                in the DI-rected G-raph of A
+%          c = 0-1 matrix displaying accessibility
+%          v = displays the equivalent classes
+%
+% v(i,j) is the j'th member of the i'th equiv class (0 padded)
+%
+% http://www.math.wsu.edu/math/faculty/tsat/matlab.html
+
+[m,n] = size(a);
+if m~=n 'Not a Square Matrix', return, end
+b=abs(a); o=ones(size(a)); x=zeros(1,n);
+msg='The Matrix is Irreducible !'; v='Connected Directed Graph !';
+if (nargin==1) tol=n*eps*norm(a,'inf'); end
+
+% Create a companion matrix
+c = b>tol*o;
+if (c==o)
+  %  msg, return
+  v = 1:length(a);
+  return
+end
+
+
+% Compute accessibility in at most n-step paths
+for k=1:n
+  for j=1:n
+    for i=1:n
+      % If index i accesses j, where can you go ?
+      if c(i,j) > 0  c(i,:) = c(i,:)+c(j,:); end
+    end
+  end
+end
+% Create a 0-1 matrix with the above information
+c>zeros(size(a)); c=ans; if (c==o) msg, return, end
+
+% Identify equivalence classes
+d=c.*c'+eye(size(a)); d>zeros(size(a)); d=ans;
+v=zeros(size(a));
+for i=1:n find(d(i,:)); ans(n)=0; v(i,:)=ans; end
+
+% Eliminate displaying of identical rows
+i=1;
+while(i<n)
+  for k=i+1:n
+    if v(k,1) == v(i,1)
+      v(k,:)=x;
+    end
+  end
+  i=i+1;
+end
+j=1;
+for i=1:n
+  if v(i,1)>0
+    h(j,:)=v(i,:);
+    j=j+1;
+  end
+end
+v=h;
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/strong_elim_order.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,75 @@
+function order = strong_elim_order(G, node_sizes, partial_order)
+% STRONG_ELIM_ORDER Find an elimination order to produce a strongly triangulated graph.
+% order = strong_elim_order(moral_graph, node_sizes, partial_order)
+% 
+% partial_order(i,j)=1 if we must marginalize i *after* j
+% (so i will be nearer the strong root).
+% e.g., if j is a decision node and i is its information set:
+%   we cannot maximize j if we have marginalized out some of i
+% e.g., if j is a continuous child and i is its discrete parent:
+%   we want to integrate out the cts nodes before the discrete ones,
+%   so that the marginal is strong.
+%
+% For details, see
+% - Jensen, Jensen and Dittmer, "From influence diagrams to junction trees", UAI 94.
+% - Lauritzen, "Propgation of probabilities, means, and variances in mixed graphical
+%   association models", JASA 87(420):1098--1108, 1992.
+%
+% On p369 of the Jensen paper, they state "the reverse of the elimination order must be some
+% extension of [the partial order] to a total order".
+% We make no attempt to find the best such total ordering, in the sense of minimizing the weight
+% of the resulting cliques.
+
+% Example from the Jensen paper:
+% Let us number the nodes in Fig 1 from top to bottom, left to right,
+% so a=1,b=2,D1=3,c=4,...,l=14,j=15,k=16.
+% The elimination ordering they propose on p370 is [14 15 16 11 12 1 4 5 10 8 13 9 7 6 3 2];
+
+if 0
+  total_order = topological_sort(partial_order);
+  order = total_order(end:-1:1); % no attempt to find an optimal constrained ordering!
+  return;
+end
+
+% The following implementation is due to Ilya Shpitser and seems to give wrong
+% results on cg1
+
+n = length(G);
+MG = G; % copy the original graph
+uneliminated = ones(1,n);
+order = zeros(1,n);
+
+for i=1:n
+  roots = [];
+  k = 1;
+  for j=1:n
+    if sum(partial_order(j,:)) == 0
+      roots(k) = j;
+      k = k + 1;
+    end
+  end
+  U = find(uneliminated);
+  valid = myintersect(U, roots);
+  % Choose the best node from the set of valid candidates
+  score1 = zeros(1,length(valid));
+  score2 = zeros(1,length(valid));
+  for j=1:length(valid)
+    k = valid(j);
+    ns = myintersect(neighbors(G, k), U);
+    l = length(ns);
+    M = MG(ns,ns);
+    score1(j) = l^2 - sum(M(:)); % num. added edges
+    score2(j) = prod(node_sizes([k ns])); % weight of clique
+  end
+  j1s = find(score1==min(score1));
+  j = j1s(argmin(score2(j1s)));
+  k = valid(j);
+  uneliminated(k) = 0;
+  order(i) = k;
+  ns = myintersect(neighbors(G, k), U);
+  if ~isempty(ns)
+    G(ns,ns) = 1;
+    G = setdiag(G,0);
+  end
+  partial_order(:,k) = 0;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+% A - B
+%     |
+% D - C - E
+
+A=1;B=2;C=3;D=4;E=5;
+dag = zeros(5,5);
+dag(A,B)=1;
+%dag(A,D)=1;
+dag(B,C)=1;
+dag(C,D)=1;
+dag(E,C)=1;
+[d, pre, post, cycle, f, pred] = dfs(dag, A, 0)
+
+[T, pre, post, cycle] = mk_rooted_tree(dag, A)
+
+%[T, pre, post, cycle] = mkRootedTree(dag, A)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/test_strong_root.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function strong = test_strong_root(jtree,cliques,dnodes,root)
+% This function tests, whether root is a strong root of jtree. 
+% The following parameters are used
+% Input:
+% jtree   An matrix with two colums. jtree(i,j) == jtree(j,i) is 1 if node 
+%         i is connected with node j
+% cliques Cells which contain the nodes in each clique
+% dnodes  An array with the discrete nodes of the juntion tree.
+% root    It is tested whether root is the strong root of the junction tree
+% Output:
+% strong  The output is 1 if root is the strong root of the junction tree jtree.
+%         Please note, that the running intersection property is not tested. 
+if isempty(dnodes)
+     strong = 1;
+     return;
+end
+
+children = find(jtree(root,:)==1);
+i = 1;
+strong = 1;
+while (i <= length(children)) & (strong==1)
+     child = children(i);
+     jtree(child,root) = 0;
+     jtree(root,child) = 0;
+     sep = myintersect(cliques{child},cliques{root});
+     diff = mysetdiff(cliques{child},cliques{root});
+     if (mysubset(sep,dnodes) | isempty(myintersect(diff,dnodes)))
+         strong = test_strong_root(jtree,cliques,dnodes,child);
+     else
+         strong = 0;
+     end;
+     i = i+1;
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/topological_sort.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function order = topological_sort(A)
+% TOPOLOGICAL_SORT Return the nodes in topological order (parents before children).
+% order = topological_sort(adj_mat)
+
+n = length(A);
+indeg = zeros(1,n);
+zero_indeg = []; % a stack of nodes with no parents
+for i=1:n
+  indeg(i) = length(parents(A,i));
+  if indeg(i)==0
+    zero_indeg = [i zero_indeg];
+  end
+end
+
+t=1;
+order = zeros(1,n);
+while ~isempty(zero_indeg)
+  v = zero_indeg(1); % pop v
+  zero_indeg = zero_indeg(2:end);
+  order(t) = v;
+  t = t + 1;
+  cs = children(A, v);
+  for j=1:length(cs)
+    c = cs(j);
+    indeg(c) = indeg(c) - 1;
+    if indeg(c) == 0
+      zero_indeg = [c zero_indeg]; % push c 
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/trees.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,168 @@
+
+% make undirected adjacency matrix of graph/tree
+% e.g.,
+%  1 
+% / \
+% 2  3
+T = zeros(3,3);
+T(1,2) = 1; T(2,1)=1;
+T(1,3)=1; T(3,1) = 1;
+
+root = 1;
+[T, preorder, postorder] =  mk_rooted_tree(T, root);
+
+% bottom up message passing leaves to root
+for n=postorder(:)'
+  for p	= parents(T, n)
+     % p is parent of n
+   end
+end
+
+% top down, root to leaves
+for n=preorder(:)'
+  for c= children(T,n)
+    % c is child of n
+  end
+end
+
+
+%%%%%%%%%%%%%
+
+function ps = parents(adj_mat, i)
+% PARENTS Return the list of parents of node i
+% ps = parents(adj_mat, i)
+
+ps = find(adj_mat(:,i))';
+
+
+%%%%%%%%%%%%
+
+function cs = children(adj_mat, i, t)
+% CHILDREN Return the indices of a node's children in sorted order
+% c = children(adj_mat, i, t)
+%
+% t is an optional argument: if present, dag is assumed to be a 2-slice DBN
+
+if nargin < 3 
+  cs = find(adj_mat(i,:));
+else
+  if t==1
+    cs = find(adj_mat(i,:));
+  else
+    ss = length(adj_mat)/2;
+    j = i+ss;
+    cs = find(adj_mat(j,:)) + (t-2)*ss;
+  end
+end
+
+%%%%%%%%%%%
+
+function [T, pre, post, cycle] = mk_rooted_tree(G, root)
+% MK_ROOTED_TREE Make a directed, rooted tree out of an undirected tree.
+% [T, pre, post, cycle] = mk_rooted_tree(G, root)
+
+n = length(G);
+T = sparse(n,n); % not the same as T = sparse(n) !
+directed = 0;
+[d, pre, post, cycle, f, pred] = dfs(G, root, directed);
+for i=1:length(pred)
+  if pred(i)>0
+    T(pred(i),i)=1;
+  end
+end
+
+
+%%%%%%%%%%%
+
+function [d, pre, post, cycle, f, pred] = dfs(adj_mat, start, directed)
+% DFS Perform a depth-first search of the graph starting from 'start'.
+% [d, pre, post, cycle, f, pred] = dfs(adj_mat, start, directed)
+%
+% Input:
+% adj_mat(i,j)=1 iff i is connected to j.
+% start is the root vertex of the dfs tree; if [], all nodes are searched
+% directed = 1 if the graph is directed
+%
+% Output:
+% d(i) is the time at which node i is first discovered.
+% pre is a list of the nodes in the order in which they are first encountered (opened).
+% post is a list of the nodes in the order in which they are last encountered (closed).
+% 'cycle' is true iff a (directed) cycle is found.
+% f(i) is the time at which node i is finished.
+% pred(i) is the predecessor of i in the dfs tree.
+%
+% If the graph is a tree, preorder is parents before children,
+% and postorder is children before parents.
+% For a DAG, topological order = reverse(postorder).
+%
+% See Cormen, Leiserson and Rivest, "An intro. to algorithms" 1994, p478.
+
+n = length(adj_mat);
+
+global white gray black color
+white = 0; gray = 1; black = 2;
+color = white*ones(1,n);
+
+global time_stamp
+time_stamp = 0;
+
+global d f
+d = zeros(1,n);
+f = zeros(1,n);
+
+global pred
+pred = zeros(1,n);
+
+global cycle
+cycle = 0;
+
+global pre post
+pre = [];
+post = [];
+
+if ~isempty(start)
+  dfs_visit(start, adj_mat, directed);
+else
+  for u=1:n
+    if color(u)==white
+      dfs_visit(u, adj_mat, directed);
+    end
+  end
+end
+
+
+%%%%%%%%%%
+
+function dfs_visit(u, adj_mat, directed)
+
+global white gray black color time_stamp d f pred cycle  pre post
+
+pre = [pre u];
+color(u) = gray;
+time_stamp = time_stamp + 1;
+d(u) = time_stamp;
+if directed
+  ns = children(adj_mat, u);
+else
+  ns = neighbors(adj_mat, u);
+  ns = mysetdiff(ns, pred(u)); % don't go back to visit the guy who called you!
+end
+for v=ns(:)'
+  %fprintf('u=%d, v=%d, color(v)=%d\n', u, v, color(v))
+  switch color(v)
+    case white, % not visited v before (tree edge)
+     pred(v)=u;
+     dfs_visit(v, adj_mat, directed);
+   case gray, % back edge - v has been visited, but is still open
+    cycle = 1;
+    %fprintf('cycle: back edge from v=%d to u=%d\n', v, u);
+   case black, % v has been visited, but is closed
+    % no-op
+  end
+end
+color(u) = black;
+post = [post u];
+time_stamp = time_stamp + 1;
+f(u) = time_stamp;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/triangulate.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,159 @@
+/* triangulate.c written by Ilya Shpitser  */
+
+#include <stdlib.h>
+
+#ifdef UNIX
+#include "matlab.h"
+#endif
+
+#include "matrix.h"
+#include "mex.h"
+
+#include "elim.h"
+#include "map.h"
+#include "misc.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+
+  int dims [2];
+  int i, j, k, m, n;
+  long index;
+  double * G_pr;
+  double * stage_pr;
+  double * answer_G_pr, * fill_ins_pr;
+  double * matlab_clique_pr;
+  mxArray * matlab_clique;
+  Elimination e;
+  float ** adj_mat;
+  int ** order = (int **) NULL;
+  Iterator iter, iter2;
+  word w, w2;
+  int ** fill_ins;
+  Map cliques;
+  Map clique;
+  mxArray * fill_ins_mat;
+  int * nodes;
+  mxArray * full;
+
+// (original)  full = mlfFull((mxArray *) prhs[0]);
+  full = (mxArray *) mlfFull((mxArray *) prhs[0]);  // added typecasting
+  /* Obtain graph matrix information. */
+  m = mxGetM(full);
+  n = mxGetN(full);
+  G_pr = mxGetPr(full);
+
+  if(n < 1 || m < 1){
+    return;
+  }
+
+  /* Allocate and populate the log weight adjacency matrix corresponding
+     to the input graph. */
+  adj_mat = (float **) malloc(sizeof(float *) * m);
+  adj_mat[0] = (float *) malloc(sizeof(float) * m * n);
+  for(i = 1; i < m; i++){
+    adj_mat[i] = adj_mat[i - 1] + n;
+  }
+  /* We no longer have log weight info, but we have a (total) ordering on
+     the nodes already, so we do not need this information. */
+  for(i = 0; i < m; i++){
+    for(j = 0; j < n; j++){
+      index = j * m + i;
+      if(G_pr[index] > 0){
+        adj_mat[i][j] = 1;
+      } else {
+        adj_mat[i][j] = 0;
+      }
+    }
+  }
+
+  /* Convert the total elimination ordering into a partial order argument
+     for the elimination routine.  The elimination routine's purpose in this
+     mode of operation is to return cliques and fill-in edges. */
+  if(nrhs > 1){
+    order = (int **) malloc(sizeof(int *) * m);
+    order[0] = (int *) malloc(sizeof(int) * m * n);
+    for(i = 1; i < m; i++){
+      order[i] = order[i - 1] + n;
+    }
+    for(i = 0; i < m; i++){
+      for(j = 0; j < n; j++){
+        order[i][j] = 0;
+      }
+    }
+    stage_pr = mxGetPr(prhs[1]);
+    for(i = 0; i < mxGetN(prhs[1]) - 1; i++){
+      order[(int) stage_pr[i] - 1][(int) stage_pr[i + 1] - 1] = 1;
+    }
+  }
+
+  /* Find the elimination ordering. */
+  e = find_elim(n, adj_mat, order, -1);
+
+  /* Allocate memory for the answer, and set the answer. */
+  plhs[0] = mxCreateDoubleMatrix(m, n, mxREAL);
+  answer_G_pr = mxGetPr(plhs[0]);
+  cliques = get_cliques(e);
+/* 
+  dims[0] = 1;
+  dims[1] = get_size_Map(cliques);
+  plhs[1] = mxCreateCellArray(2, (const int *) dims);*/
+  plhs[1] = mxCreateCellMatrix(get_size_Map(cliques), 1);
+  fill_ins = get_fill_ins(e);
+  fill_ins_mat = mxCreateDoubleMatrix(m, n, mxREAL);
+  fill_ins_pr = mxGetPr(fill_ins_mat);
+
+  for(i = 0; i < n; i++){
+    for(j = 0; j < m; j++){
+      index = j * m + i;
+      answer_G_pr[index] = G_pr[index];
+      if(fill_ins[i][j] > 0){
+        answer_G_pr[index] = 1;
+        fill_ins_pr[index] = 1;
+      }
+    }
+  }
+  mxDestroyArray(full);
+// (original)  plhs[2] = mlfSparse(fill_ins_mat, NULL, NULL, NULL, NULL, NULL);
+  plhs[2] = (mxArray *) mlfSparse(fill_ins_mat, NULL, NULL, NULL, NULL, NULL); // added typecasting
+  mxDestroyArray(fill_ins_mat);
+  nodes = (int *) malloc(sizeof(int) * n);
+  k = 0;
+  iter = get_Iterator(cliques);
+  while(!is_empty(iter)){
+    w = next_key(iter);
+    clique = (Map) w.v;
+    matlab_clique = mxCreateDoubleMatrix(1, get_size_Map(clique), mxREAL);
+    matlab_clique_pr = mxGetPr(matlab_clique);
+    for(i = 0; i < n; i++){
+      nodes[i] = 0;
+    }
+    iter2 = get_Iterator(clique);
+    while(!is_empty(iter2)){
+      w2 = next_key(iter2);
+      nodes[w2.i] = w2.i + 1;
+    }
+    j = 0;
+    for(i = 0; i < n; i++){
+      if(nodes[i] > 0){
+        matlab_clique_pr[j++] = nodes[i];
+      }
+    }
+    mxSetCell(plhs[1], k++, matlab_clique);
+  }
+  free(nodes);
+
+  /* Finally, free the allocated memory. */
+  destroy_Elimination(e);
+  if(adj_mat){
+    if(adj_mat[0]){
+      free(adj_mat[0]);
+    }
+    free(adj_mat);
+  }
+  if(order){
+    if(order[0]){
+      free(order[0]);
+    }
+    free(order);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/triangulate.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+function [G, cliques, fill_ins] = triangulate(G, order)
+% TRIANGULATE Ensure G is triangulated (chordal), i.e., every cycle of length > 3 has a chord.
+% [G, cliques, fill_ins, cliques_containing_node] = triangulate(G, order)
+% 
+% cliques{i} is the i'th maximal complete subgraph of the triangulated graph.
+% fill_ins(i,j) = 1 iff we add a fill-in arc between i and j.
+%
+% To find the maximal cliques, we save each induced cluster (created by adding connecting
+% neighbors) that is not a subset of any previously saved cluster. (A cluster is a complete,
+% but not necessarily maximal, set of nodes.)
+
+MG = G;
+n = length(G);
+eliminated = zeros(1,n);
+cliques = {};
+for i=1:n
+  u = order(i);
+  U = find(~eliminated); % uneliminated
+  nodes = myintersect(neighbors(G,u), U); % look up neighbors in the partially filled-in graph
+  nodes = myunion(nodes, u); % the clique will always contain at least u
+  G(nodes,nodes) = 1; % make them all connected to each other
+  G = setdiag(G,0);  
+  eliminated(u) = 1;
+  
+  exclude = 0;
+  for c=1:length(cliques)
+    if mysubset(nodes,cliques{c}) % not maximal
+      exclude = 1;
+      break;
+    end
+  end
+  if ~exclude
+    cnum = length(cliques)+1;
+    cliques{cnum} = nodes;
+  end
+end
+
+fill_ins = sparse(triu(max(0, G - MG), 1));
+
+%assert(check_triangulated(G)); % takes 72% of the time!
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/triangulate_2Dlattice_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,131 @@
+% Consider a 3x3 lattice with 4-nearest neighbor connectivity
+
+% 1 - 2 - 3
+% |   |   |
+% 4 - 5 - 6
+% |   |   |
+% 7 - 8 - 9
+
+N = 3;
+G = mk_2D_lattice(N,N,4);
+G0 = G;
+
+% Now add in the diagonal edges
+
+if 0
+% 1 - 2 - 3
+% | x | x |
+% 4 - 5 - 6
+% | x | x |
+% 7 - 8 - 9
+
+G(1,5)=1; G(5,1)=1;
+G(2,6)=1; G(6,2)=1;
+G(4,2)=1; G(2,4)=1;
+G(5,3)=1; G(3,5)=1;
+
+G(4,8)=1; G(8,4)=1;
+G(5,9)=1; G(9,5)=1;
+G(7,5)=1; G(5,7)=1;
+G(8,6)=1; G(6,8)=1;
+end
+
+% 1 - 2 - 3
+% | / | \ |
+% 4 - 5 - 6
+% | \ | / |
+% 7 - 8 - 9
+
+G(2,6)=1; G(6,2)=1;
+G(4,2)=1; G(2,4)=1;
+G(4,8)=1; G(8,4)=1;
+G(8,6)=1; G(6,8)=1;
+
+% Is this a chordal (triangulated) graph? No!
+
+assert(~check_triangulated(G))
+
+% The reason is that there is a chordless cycle around the outside nodes.
+% To see this, imagine "picking up" node 5, leaving the rest on the plane
+% (like a hoop skirt, or a tent), as shown below
+
+% 1 - 2 - 3
+% | /   \ |
+% 4       6
+% | \   / |
+% 7 - 8 - 9
+
+
+% However, if we add in the 4-6 arc, it will be chordal.
+
+G2 = G;
+G2(4,6)=1; G2(6,4)=1;
+assert(check_triangulated(G2))
+
+% Or we can add in the 2-8 arc
+G2 = G;
+G2(2,8)=1; G2(8,2)=1;
+assert(check_triangulated(G2))
+
+
+if 0
+% 4x4 lattice with cross arcs
+N=4;G0 = mk_2D_lattice(N,N,4);
+vs = [1 6;  2 5;   2 7;   3 6;   3 8;   4 7; ...
+      5 10; 6 9;   6 11;  7 10;  7 12;  8 11;...
+      9 14; 10 13; 10 15; 11 14; 11 16; 12 15];
+for i=1:size(vs,1)
+  u = vs(i,1); v= vs(i,2);
+  G0(u,v) = 1; G0(v,u) = 1;
+end
+end
+
+% Here is how we can discover which edges to fill in automatically 
+% (although possibly sub-optimally)
+weights = 2*ones(1,N*N); % all nodes are binar
+
+% fill-ins = 2-4, 2-6,  4-8, 6-8 and 4-6
+% cliques = 124, etc  and 2456  4568
+greedy_order = best_first_elim_order(G0, weights);
+[GT, cliques, fill_ins] = triangulate(G0, greedy_order)
+assert(check_triangulated(GT))
+
+
+
+greedy_order = best_first_elim_order(G, weights);
+[GT, cliques, fill_ins] = triangulate(G, greedy_order)
+assert(check_triangulated(GT))
+
+% fill-ins = [4 6]
+
+% Cliques are the overlapping squares  [1,2,4,5], [2 3 5 6], [4 5 7 8], [5 6 8 9]
+% and the following caused by the fill-in: [2 4 5 6], [4 5 6 8]
+
+% Connect the maximal cliques of the triangulate graph into a junction tree
+[jtree, root, B, clq_weights] = cliques_to_jtree(cliques, weights);
+
+% In this case, all cliques have weight 2^4 = 16
+
+
+% Now consider size of max clique as a function of grid size
+% Note: this is not necessarily the optimal triangulation
+
+% N  5  10 15 16 17 18
+% m  6  15 23 25 28 28
+Ns = [5 10 15 16 17 18]; 
+for i=1:length(Ns)
+  N = Ns(i)
+  G = mk_2D_lattice(N,N,4);
+  weights = 2*ones(1,N*N); % all nodes are binary
+  greedy_order = best_first_elim_order(G, weights); % slow!
+  [GT, cliques, fill_ins] = triangulate(G, greedy_order);
+  %assert(check_triangulated(GT))
+  [jtree, root, B, clq_weights] = cliques_to_jtree(cliques, weights);
+  m(i) = log2(max(clq_weights));
+end
+
+% plot distribution of clique sizes for fixed N
+for c=1:length(cliques)
+  l(c) = length(cliques{c});
+end
+hist(l)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/graph/triangulate_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+% Test the code using the dag in Fig 1 of Jensen, Jensen, Dittmer, 
+% "From influence diagrams to junction trees", UAI 94
+
+% By reverse enginering Fig 2, we infer that the following arcs should
+% be absent from the original dag:  b->d1, e->d2, f->d2, g->d4
+a=1; b=2; d1=3; c=4; d=5; e=6; f=7; g=8; d2=9; d4=10; i=11; h=12; d3=13; l=14; j=15; k=16;
+dag=zeros(16);
+dag(a,c)=1;
+%dag(b,[c d d1])=1;
+dag(b,[c d])=1;
+dag(d1,d)=1;
+dag(c,e)=1;
+dag(d,[e f])=1;
+%dag(e,[g d2])=1;
+dag(e,[g])=1;
+%dag(f,[d2 h])=1;
+dag(f,[h])=1;
+%dag(g,[d4 i])=1;
+dag(g,[i])=1;
+dag(d2,i)=1;
+dag(d4,l)=1;
+dag(i,l)=1;
+dag(h,[j k])=1;
+dag(d3,k)=1;
+
+
+[MG, moral_edges] = moralize(dag);
+MG(j,k)=1; MG(k,j)=1;  % simulate having a common utility child
+% MG now equals fig 2
+order = [l j k i h a c d d4 g d3 d2 f e d1 b];
+[MTG, cliques, fill_ins] = triangulate(MG, order);
+% MTG equals fig 3
+ns = 2*ones(1,16);
+[jtree, root, cliques2] = mk_strong_jtree(cliques, ns, order, MTG);
+jtree2 = mk_rooted_tree(jtree, root);
+% jtree2 equals fig 4, with their arrows reversed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,174 @@
+/conffig.htm/1.1.1.1/Wed Apr 27 17:58:54 2005//
+/confmat.htm/1.1.1.1/Wed Apr 27 17:58:54 2005//
+/conjgrad.htm/1.1.1.1/Wed Apr 27 17:58:54 2005//
+/consist.htm/1.1.1.1/Wed Apr 27 17:58:54 2005//
+/convertoldnet.htm/1.1.1.1/Wed Apr 27 17:58:54 2005//
+/datread.htm/1.1.1.1/Wed Apr 27 17:58:54 2005//
+/datwrite.htm/1.1.1.1/Wed Apr 27 17:58:54 2005//
+/dem2ddat.htm/1.1.1.1/Wed Apr 27 17:58:54 2005//
+/demard.htm/1.1.1.1/Wed Apr 27 17:58:54 2005//
+/demev1.htm/1.1.1.1/Wed Apr 27 17:58:54 2005//
+/demev2.htm/1.1.1.1/Wed Apr 27 17:58:54 2005//
+/demev3.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demgauss.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demglm1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demglm2.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demgmm1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demgmm2.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demgmm3.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demgmm4.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demgmm5.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demgp.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demgpard.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demgpot.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demgtm1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demgtm2.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demhint.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demhmc1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demhmc2.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demhmc3.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demkmn1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demknn1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demmdn1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demmet1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demmlp1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demmlp2.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demnlab.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demns1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demolgd1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demopt1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/dempot.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demprgp.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demprior.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demrbf1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demsom1.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/demtrain.htm/1.1.1.1/Wed Apr 27 17:58:56 2005//
+/dist2.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/eigdec.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/errbayes.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/evidence.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/fevbayes.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gauss.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gbayes.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/glm.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/glmderiv.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/glmerr.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/glmevfwd.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/glmfwd.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/glmgrad.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/glmhess.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/glminit.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/glmpak.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/glmtrain.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/glmunpak.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gmm.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gmmactiv.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gmmem.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gmminit.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gmmpak.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gmmpost.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gmmprob.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gmmsamp.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gmmunpak.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gp.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gpcovar.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gpcovarf.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gpcovarp.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gperr.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gpfwd.htm/1.1.1.1/Wed Apr 27 17:58:58 2005//
+/gpgrad.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gpinit.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gppak.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gpunpak.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gradchek.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/graddesc.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gsamp.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gtm.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gtmem.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gtmfwd.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gtminit.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gtmlmean.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gtmlmode.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gtmmag.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gtmpost.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/gtmprob.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/hbayes.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/hesschek.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/hintmat.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/hinton.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/histp.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/hmc.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/index.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/kmeans.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/knn.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/knnfwd.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/linef.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/linemin.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/maxitmess.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/mdn.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/mdn2gmm.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/mdndist2.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/mdnerr.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/mdnfwd.htm/1.1.1.1/Wed Apr 27 17:59:00 2005//
+/mdngrad.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mdninit.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mdnpak.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mdnpost.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mdnprob.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mdnunpak.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/metrop.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/minbrack.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlp.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlpbkp.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlpderiv.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlperr.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlpevfwd.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlpfwd.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlpgrad.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlphdotv.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlphess.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlphint.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlpinit.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlppak.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlpprior.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlptrain.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/mlpunpak.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/netderiv.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/neterr.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/netevfwd.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/netgrad.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/nethelp3.3.zip/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/nethess.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/netinit.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/netopt.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/netpak.htm/1.1.1.1/Wed Apr 27 17:59:02 2005//
+/netunpak.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/olgd.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/pca.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/plotmat.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/ppca.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/quasinew.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbf.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbfbkp.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbfderiv.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbferr.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbfevfwd.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbffwd.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbfgrad.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbfhess.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbfjacob.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbfpak.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbfprior.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbfsetbf.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbfsetfw.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbftrain.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rbfunpak.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rosegrad.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/rosen.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/scg.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/som.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/somfwd.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/sompak.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/somtrain.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/somunpak.htm/1.1.1.1/Wed Apr 27 17:59:04 2005//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/nethelp3.3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/conffig.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual conffig
+</title>
+</head>
+<body>
+<H1> conffig
+</H1>
+<h2>
+Purpose
+</h2>
+Display a confusion matrix.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+conffig(y, t)
+fh = conffig(y, t)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>conffig(y, t)</CODE> displays the confusion matrix 
+and classification performance for the predictions mat{y}
+compared with the targets <CODE>t</CODE>.  The data is assumed to be in a
+1-of-N encoding, unless there is just one column, when it is assumed to
+be a 2 class problem with a 0-1 encoding.  Each row of <CODE>y</CODE> and <CODE>t</CODE>
+corresponds to a single example.
+
+<p>In the confusion matrix, the rows represent the true classes and the 
+columns the predicted classes.
+
+<p><CODE>fh = conffig(y, t)</CODE> also returns the figure handle <CODE>fh</CODE> which 
+can be used, for instance, to delete the figure when it is no longer needed.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="confmat.htm">confmat</a></CODE>, <CODE><a href="demtrain.htm">demtrain</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/confmat.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual confmat
+</title>
+</head>
+<body>
+<H1> confmat
+</H1>
+<h2>
+Purpose
+</h2>
+Compute a confusion matrix.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+[C, rate] = confmat(y, t)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>[C, rate] = confmat(y, t)</CODE> computes the confusion matrix <CODE>C</CODE>
+and classification performance <CODE>rate</CODE> for the predictions mat{y}
+compared with the targets <CODE>t</CODE>.  The data is assumed to be in a
+1-of-N encoding, unless there is just one column, when it is assumed to
+be a 2 class problem with a 0-1 encoding.  Each row of <CODE>y</CODE> and <CODE>t</CODE>
+corresponds to a single example.
+
+<p>In the confusion matrix, the rows represent the true classes and the 
+columns the predicted classes.  The vector <CODE>rate</CODE> has two entries:
+the percentage of correct classifications and the total number of
+correct classifications.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="conffig.htm">conffig</a></CODE>, <CODE><a href="demtrain.htm">demtrain</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/conjgrad.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,101 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual conjgrad
+</title>
+</head>
+<body>
+<H1> conjgrad
+</H1>
+<h2>
+Purpose
+</h2>
+Conjugate gradients optimization.
+
+<p><h2>
+Description
+</h2>
+<CODE>[x, options, flog, pointlog] = conjgrad(f, x, options, gradf)</CODE> uses a 
+conjugate gradients
+algorithm to find the minimum of the function <CODE>f(x)</CODE> whose
+gradient is given by <CODE>gradf(x)</CODE>.  Here <CODE>x</CODE> is a row vector
+and <CODE>f</CODE> returns a scalar value. 
+The point at which <CODE>f</CODE> has a local minimum
+is returned as <CODE>x</CODE>.  The function value at that point is returned
+in <CODE>options(8)</CODE>.  A log of the function values
+after each cycle is (optionally) returned in <CODE>flog</CODE>, and a log
+of the points visited is (optionally) returned in <CODE>pointlog</CODE>.
+
+<p><CODE>conjgrad(f, x, options, gradf, p1, p2, ...)</CODE> allows 
+additional arguments to be passed to <CODE>f()</CODE> and <CODE>gradf()</CODE>. 
+
+<p>The optional parameters have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values; also logs error 
+values in the return argument <CODE>errlog</CODE>, and the points visited
+in the return argument <CODE>pointslog</CODE>.  If <CODE>options(1)</CODE> is set to 0,
+then only warning messages are displayed.  If <CODE>options(1)</CODE> is -1,
+then nothing is displayed.
+
+<p><CODE>options(2)</CODE> is a measure of the absolute precision required for the value
+of <CODE>x</CODE> at the solution.  If the absolute difference between
+the values of <CODE>x</CODE> between two successive steps is less than
+<CODE>options(2)</CODE>, then this condition is satisfied.
+
+<p><CODE>options(3)</CODE> is a measure of the precision required of the objective
+function at the solution.  If the absolute difference between the
+objective function values between two successive steps is less than
+<CODE>options(3)</CODE>, then this condition is satisfied.
+Both this and the previous condition must be
+satisfied for termination.
+
+<p><CODE>options(9)</CODE> is set to 1 to check the user defined gradient function.
+
+<p><CODE>options(10)</CODE> returns the total number of function evaluations (including
+those in any line searches).
+
+<p><CODE>options(11)</CODE> returns the total number of gradient evaluations.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations; default 100.
+
+<p><CODE>options(15)</CODE> is the precision in parameter space of the line search;
+default <CODE>1e-4</CODE>.
+
+<p><h2>
+Examples
+</h2>
+An example of 
+the use of the additional arguments is the minimization of an error
+function for a neural network:
+<PRE>
+
+w = quasinew('neterr', w, options, 'netgrad', net, x, t);
+</PRE>
+
+
+<p><h2>
+Algorithm
+</h2>
+
+The conjugate gradients algorithm constructs search
+directions <CODE>di</CODE> that are conjugate: i.e. <CODE>di*H*d(i-1) = 0</CODE>,
+where <CODE>H</CODE> is the Hessian matrix.  This means that minimising along
+<CODE>di</CODE> does not undo the effect of minimising along the previous
+direction. The Polak-Ribiere formula is used to calculate new search
+directions. The Hessian is not calculated, so there is only an
+<CODE>O(W)</CODE> storage requirement (where <CODE>W</CODE> is the number of
+parameters).  However, relatively accurate line searches must be used
+(default is <CODE>1e-04</CODE>).
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="graddesc.htm">graddesc</a></CODE>, <CODE><a href="linemin.htm">linemin</a></CODE>, <CODE><a href="minbrack.htm">minbrack</a></CODE>, <CODE><a href="quasinew.htm">quasinew</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/consist.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,78 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual consist
+</title>
+</head>
+<body>
+<H1> consist
+</H1>
+<h2>
+Purpose
+</h2>
+Check that arguments are consistent.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+errstring = consist(net, type, inputs, outputs)
+errstring = consist(net, type, inputs)
+errstring = consist(net, type)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>errstring = consist(net, type, inputs)</CODE> takes a network
+data structure <CODE>net</CODE> together with a string <CODE>type</CODE> containing
+the correct network type, a matrix <CODE>inputs</CODE> of input vectors and checks
+that the data structure is consistent with the other arguments.  An empty
+string is returned if there is no error, otherwise the string contains the
+relevant error message.  If the <CODE>type</CODE> string is empty, then any
+type of network is allowed.
+
+<p><CODE>errstring = consist(net, type)</CODE> takes a network data structure
+<CODE>net</CODE> together with a string <CODE>type</CODE> containing the correct 
+network type, and checks that the two types match.
+
+<p><CODE>errstring = consist(net, type, inputs, outputs)</CODE> also checks that the
+network has the correct number of outputs, and that the number of patterns
+in the <CODE>inputs</CODE> and <CODE>outputs</CODE> is the same.  The fields in <CODE>net</CODE>
+that are used are
+<PRE>
+  type
+  nin
+  nout
+</PRE>
+
+
+<p><h2>
+Example
+</h2>
+
+<p><CODE>mlpfwd</CODE>, the function that propagates values forward through an MLP
+network, has the following check at the head of the file:
+<PRE>
+
+errstring = consist(net, 'mlp', x, t);
+if ~isempty(errstring)
+  error(errstring)
+end
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlpfwd.htm">mlpfwd</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/convertoldnet.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual convertoldnet
+</title>
+</head>
+<body>
+<H1> convertoldnet
+</H1>
+<h2>
+Purpose
+</h2>
+Convert pre-2.3 release MLP and MDN nets to new format
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = convertoldnet(net)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = convertoldnet(net)</CODE> takes a network <CODE>net</CODE> and, if appropriate,
+converts it from pre-2.3 to the current format.  The difference is simply 
+that in MLPs and the MLP sub-net of MDNs the field <CODE>actfn</CODE> has been 
+renamed <CODE>outfn</CODE> to make it consistent with GLM and RBF networks.
+If the network is not old-format or an MLP or MDN it is left unchanged.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mdn.htm">mdn</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/datread.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual datread
+</title>
+</head>
+<body>
+<H1> datread
+</H1>
+<h2>
+Purpose
+</h2>
+Read data from an ascii file.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+[x, t, nin, nout, ndata] = datread(filename)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>[x, t, nin, nout, ndata] = datread(filename)</CODE> reads from
+the file <CODE>filename</CODE> and returns a matrix <CODE>x</CODE> of input vectors,
+a matrix <CODE>t</CODE> of target vectors, and integers <CODE>nin</CODE>, <CODE>nout</CODE>
+and <CODE>ndata</CODE> specifying the number of inputs, the number of outputs
+and the number of data points respectively. 
+
+<p>The format of the data file is as follows: the first row contains the
+string <CODE>nin</CODE> followed by the number of inputs, the second row
+contains the string <CODE>nout</CODE> followed by the number of outputs, and
+the third row contains the string <CODE>ndata</CODE> followed by the number
+of data vectors. Subsequent lines each contain one input vector
+followed by one output vector, with individual values separated by
+spaces.
+
+<p><h2>
+Example
+</h2>
+For the XOR data set we have
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="nin2nout1ndata40.000000e+000.000000e+001.000000e+000.000000e+001.000000e+000.000000e+001.000000e+000.000000e+000.000000e+001.000000e+001.000000e+001.000000e+00SeeAlsodatwrite.htm">nin2nout1ndata40.000000e+000.000000e+001.000000e+000.000000e+001.000000e+000.000000e+001.000000e+000.000000e+000.000000e+001.000000e+001.000000e+001.000000e+00SeeAlsodatwrite</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/datwrite.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual datwrite
+</title>
+</head>
+<body>
+<H1> datwrite
+</H1>
+<h2>
+Purpose
+</h2>
+Write data to ascii file.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+datwrite(filename, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>datwrite(filename, x, t)</CODE> takes a matrix <CODE>x</CODE> of input vectors
+and a matrix <CODE>t</CODE> of target vectors and writes them to an ascii
+file named <CODE>filename</CODE>. The file format is as follows: the first
+row contains the string <CODE>nin</CODE> followed by the number of inputs,
+the second row contains the string <CODE>nout</CODE> followed by the number
+of outputs, and the third row contains the string <CODE>ndata</CODE> followed
+by the number of data vectors. Subsequent lines each contain one input
+vector followed by one output vector, with individual values separated
+by spaces.
+
+<p><h2>
+Example
+</h2>
+For the XOR data set we have
+
+<p><PRE>
+
+ 	nin   2
+ 	nout  1
+ 	ndata 4
+ 	0.000000e+00  0.000000e+00  1.000000e+00 
+ 	0.000000e+00  1.000000e+00  0.000000e+00 
+ 	1.000000e+00  0.000000e+00  0.000000e+00 
+ 	1.000000e+00  1.000000e+00  1.000000e+00 
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="datread.htm">datread</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/dem2ddat.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual dem2ddat
+</title>
+</head>
+<body>
+<H1> dem2ddat
+</H1>
+<h2>
+Purpose
+</h2>
+Generates two dimensional data for demos.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+data = dem2ddat(ndata)</PRE>
+
+<PRE>
+[data, c] = dem2ddat(ndata)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The data is
+drawn from three spherical Gaussian distributions with priors 0.3,
+0.5 and 0.2; centres (2, 3.5), (0, 0) and (0,2); and standard deviations
+0.2, 0.5 and 1.0.  <CODE>data = dem2ddat(ndata)</CODE> generates <CODE>ndata</CODE>
+points.  
+
+<p><CODE>[data, c] = dem2ddat(ndata)</CODE> also returns a matrix containing the
+centres of the Gaussian distributions.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demgmm1.htm">demgmm1</a></CODE>, <CODE><a href="demkmean.htm">demkmean</a></CODE>, <CODE><a href="demknn1.htm">demknn1</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demard.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demard
+</title>
+</head>
+<body>
+<H1> demard
+</H1>
+<h2>
+Purpose
+</h2>
+Automatic relevance determination using the MLP.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demmlp1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+This script demonstrates the technique of automatic relevance
+determination (ARD) using a synthetic problem having three input
+variables: <CODE>x1</CODE> is sampled uniformly from the range (0,1) and has
+a low level of added Gaussian noise, <CODE>x2</CODE> is a copy of <CODE>x1</CODE>
+with a higher level of added noise, and <CODE>x3</CODE> is sampled randomly
+from a Gaussian distribution. The single target variable is determined
+by <CODE>sin(2*pi*x1)</CODE> with additive Gaussian noise. Thus <CODE>x1</CODE> is
+very relevant for determining the target value, <CODE>x2</CODE> is of some
+relevance, while <CODE>x3</CODE> is irrelevant. The prior over weights is
+given by the ARD Gaussian prior with a separate hyper-parameter for
+the group of weights associated with each input. A multi-layer
+perceptron is trained on this data, with re-estimation of the
+hyper-parameters using <CODE>evidence</CODE>. The final values for the
+hyper-parameters reflect the relative importance of the three inputs.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demmlp1.htm">demmlp1</a></CODE>, <CODE><a href="demev1.htm">demev1</a></CODE>, <CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="evidence.htm">evidence</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demev1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demev1
+</title>
+</head>
+<body>
+<H1> demev1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate Bayesian regression for the MLP.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demev1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists an input variable <CODE>x</CODE> which sampled from a
+Gaussian distribution, and a target variable <CODE>t</CODE> generated by
+computing <CODE>sin(2*pi*x)</CODE> and adding Gaussian noise. A 2-layer
+network with linear outputs is trained by minimizing a sum-of-squares
+error function with isotropic Gaussian regularizer, using the scaled
+conjugate gradient optimizer. The hyperparameters <CODE>alpha</CODE> and
+<CODE>beta</CODE> are re-estimated using the function <CODE>evidence</CODE>. A graph 
+is plotted of the original function, the training data, the trained
+network function, and the error bars.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="evidence.htm">evidence</a></CODE>, <CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE>, <CODE><a href="demard.htm">demard</a></CODE>, <CODE><a href="demmlp1.htm">demmlp1</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demev2.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demev2
+</title>
+</head>
+<body>
+<H1> demev2
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate Bayesian classification for the MLP.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demev2</PRE>
+
+
+<p><h2>
+Description
+</h2>
+A synthetic two class two-dimensional dataset <CODE>x</CODE> is sampled 
+from a mixture of four Gaussians.  Each class is
+associated with two of the Gaussians so that the optimal decision
+boundary is non-linear.
+A 2-layer
+network with logistic outputs is trained by minimizing the cross-entropy
+error function with isotroipc Gaussian regularizer (one hyperparameter for
+each of the four standard weight groups), using the scaled
+conjugate gradient optimizer. The hyperparameter vectors <CODE>alpha</CODE> and
+<CODE>beta</CODE> are re-estimated using the function <CODE>evidence</CODE>. A graph 
+is plotted of the optimal, regularised, and unregularised decision
+boundaries.  A further plot of the moderated versus unmoderated contours
+is generated.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="evidence.htm">evidence</a></CODE>, <CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE>, <CODE><a href="demard.htm">demard</a></CODE>, <CODE><a href="demmlp2.htm">demmlp2</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demev3.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demev3
+</title>
+</head>
+<body>
+<H1> demev3
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate Bayesian regression for the RBF.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demev3</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists an input variable <CODE>x</CODE> which sampled from a
+Gaussian distribution, and a target variable <CODE>t</CODE> generated by
+computing <CODE>sin(2*pi*x)</CODE> and adding Gaussian noise. An RBF
+network with linear outputs is trained by minimizing a sum-of-squares
+error function with isotropic Gaussian regularizer, using the scaled
+conjugate gradient optimizer. The hyperparameters <CODE>alpha</CODE> and
+<CODE>beta</CODE> are re-estimated using the function <CODE>evidence</CODE>. A graph 
+is plotted of the original function, the training data, the trained
+network function, and the error bars.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demev1.htm">demev1</a></CODE>, <CODE><a href="evidence.htm">evidence</a></CODE>, <CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE>, <CODE><a href="netevfwd.htm">netevfwd</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demgauss.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demgauss
+</title>
+</head>
+<body>
+<H1> demgauss
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate sampling from Gaussian distributions.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demgauss
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>demgauss</CODE> provides a simple illustration of the generation of
+data from Gaussian distributions. It first samples from a
+one-dimensional distribution using <CODE>randn</CODE>, and then plots a
+normalized histogram estimate of the distribution using <CODE>histp</CODE>
+together with the true density calculated using <CODE>gauss</CODE>.
+
+<p><CODE>demgauss</CODE> then demonstrates sampling from a Gaussian distribution
+in two dimensions. It creates a mean vector and a covariance matrix,
+and then plots contours of constant density using the function
+<CODE>gauss</CODE>. A sample of points drawn from this distribution, obtained
+using the function <CODE>gsamp</CODE>, is then superimposed on the contours.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gauss.htm">gauss</a></CODE>, <CODE><a href="gsamp.htm">gsamp</a></CODE>, <CODE><a href="histp.htm">histp</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demglm1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demglm1
+</title>
+</head>
+<body>
+<H1> demglm1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate simple classification using a generalized linear model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demglm1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+The problem consists of a two dimensional input
+matrix <CODE>data</CODE> and a vector of classifications <CODE>t</CODE>.  The data is 
+generated from two Gaussian clusters, and a generalized linear model
+with logistic output is trained using iterative reweighted least squares.
+A plot of the data together with the 0.1, 0.5 and 0.9 contour lines
+of the conditional probability is generated.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demglm2.htm">demglm2</a></CODE>, <CODE><a href="glm.htm">glm</a></CODE>, <CODE><a href="glmtrain.htm">glmtrain</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demglm2.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demglm2
+</title>
+</head>
+<body>
+<H1> demglm2
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate simple classification using a generalized linear model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demglm1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+The problem consists of a two dimensional input
+matrix <CODE>data</CODE> and a vector of classifications <CODE>t</CODE>.  The data is 
+generated from three Gaussian clusters, and a generalized linear model
+with softmax output is trained using iterative reweighted least squares.
+A plot of the data together with regions shaded by the classification
+given by the network is generated.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demglm1.htm">demglm1</a></CODE>, <CODE><a href="glm.htm">glm</a></CODE>, <CODE><a href="glmtrain.htm">glmtrain</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demgmm1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demgmm1
+</title>
+</head>
+<body>
+<H1> demgmm1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate EM for Gaussian mixtures.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demgmm1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+This script demonstrates the use of the EM algorithm to fit a mixture
+of Gaussians to a set of data using maximum likelihood. A colour
+coding scheme is used to illustrate the evaluation of the posterior
+probabilities in the E-step of the EM algorithm.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demgmm2.htm">demgmm2</a></CODE>, <CODE><a href="demgmm3.htm">demgmm3</a></CODE>, <CODE><a href="demgmm4.htm">demgmm4</a></CODE>, <CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmmem.htm">gmmem</a></CODE>, <CODE><a href="gmmpost.htm">gmmpost</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demgmm2.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demgmm1
+</title>
+</head>
+<body>
+<H1> demgmm1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate density modelling with a Gaussian mixture model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demgmm1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of modelling data generated by a mixture of three
+Gaussians in 2 dimensions.  The priors are 0.3,
+0.5 and 0.2; the centres are (2, 3.5), (0, 0) and (0,2); the variances
+are 0.2, 0.5 and 1.0. The first figure contains a
+ scatter plot of the data.
+
+<p>A Gaussian mixture model with three components is trained using EM.  The
+parameter vector is printed before training and after training.  The user
+should press any key to continue at these points.  The parameter vector
+consists of priors (the column), centres (given as (x, y) pairs as
+the next two columns), and variances (the last column). 
+
+<p>The second figure is a 3 dimensional view of the density function, while
+the third shows the 1-standard deviation circles for the three components of
+the mixture model.  
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmminit.htm">gmminit</a></CODE>, <CODE><a href="gmmem.htm">gmmem</a></CODE>, <CODE><a href="gmmprob.htm">gmmprob</a></CODE>, <CODE><a href="gmmunpak.htm">gmmunpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demgmm3.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demgmm3
+</title>
+</head>
+<body>
+<H1> demgmm3
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate density modelling with a Gaussian mixture model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demgmm3</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+The problem consists of modelling data generated
+by a mixture of three Gaussians in 2 dimensions with a mixture model
+using diagonal covariance matrices.  The priors are 0.3, 0.5 and 0.2; the
+centres are (2, 3.5), (0, 0) and (0,2); the covariances are all axis aligned
+(0.16, 0.64), (0.25, 1) and the identity
+matrix. The first figure contains a scatter plot of the data.
+
+<p>A Gaussian mixture model with three components is trained using EM.  The
+parameter vector is printed before training and after training.  The user
+should press any key to continue at these points.  The parameter vector
+consists of priors (the column), and centres (given as (x, y) pairs as
+the next two columns).  The diagonal entries of the
+covariance matrices are printed separately.
+
+<p>The second figure is a 3 dimensional view of the density function,
+while the third shows the axes of the 1-standard deviation circles
+for the three components of the mixture model.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmminit.htm">gmminit</a></CODE>, <CODE><a href="gmmem.htm">gmmem</a></CODE>, <CODE><a href="gmmprob.htm">gmmprob</a></CODE>, <CODE><a href="gmmunpak.htm">gmmunpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demgmm4.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,54 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demgmm4
+</title>
+</head>
+<body>
+<H1> demgmm4
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate density modelling with a Gaussian mixture model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demgmm4</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+The problem consists of modelling data generated
+by a mixture of three Gaussians in 2 dimensions with a mixture model
+using full covariance matrices.  The priors are 0.3, 0.5 and 0.2; the
+centres are (2, 3.5), (0, 0) and (0,2); the variances are (0.16, 0.64)
+axis aligned, (0.25, 1) rotated by 30 degrees and the identity
+matrix. The first figure contains a scatter plot of the data.
+
+<p>A Gaussian mixture model with three components is trained using EM.  The
+parameter vector is printed before training and after training.  The user
+should press any key to continue at these points.  The parameter vector
+consists of priors (the column), and centres (given as (x, y) pairs as
+the next two columns).  The covariance matrices are printed separately.
+
+<p>The second figure is a 3 dimensional view of the density function,
+while the third shows the axes of the 1-standard deviation ellipses
+for the three components of the mixture model.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmminit.htm">gmminit</a></CODE>, <CODE><a href="gmmem.htm">gmmem</a></CODE>, <CODE><a href="gmmprob.htm">gmmprob</a></CODE>, <CODE><a href="gmmunpak.htm">gmmunpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demgmm5.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demgmm5
+</title>
+</head>
+<body>
+<H1> demgmm5
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate density modelling with a PPCA mixture model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demgmm5</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+The problem consists of modelling data generated
+by a mixture of three Gaussians in 2 dimensions with a mixture model
+using full covariance matrices.  The priors are 0.3, 0.5 and 0.2; the
+centres are (2, 3.5), (0, 0) and (0,2); the variances are (0.16, 0.64)
+axis aligned, (0.25, 1) rotated by 30 degrees and the identity
+matrix. The first figure contains a scatter plot of the data.
+
+<p>A mixture model with three one-dimensional PPCA components is trained
+using EM.  The parameter vector is printed before training and after
+training.  The parameter vector consists of priors (the column), and
+centres (given as (x, y) pairs as the next two columns).
+
+<p>The second figure is a 3 dimensional view of the density function,
+while the third shows the axes of the 1-standard deviation ellipses
+for the three components of the mixture model together with the one
+standard deviation along the principal component of each mixture
+model component.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmminit.htm">gmminit</a></CODE>, <CODE><a href="gmmem.htm">gmmem</a></CODE>, <CODE><a href="gmmprob.htm">gmmprob</a></CODE>, <CODE><a href="ppca.htm">ppca</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demgp.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demgp
+</title>
+</head>
+<body>
+<H1> demgp
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate simple regression using a Gaussian Process.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demgp</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of one input variable <CODE>x</CODE> and one target variable 
+<CODE>t</CODE>. The values in <CODE>x</CODE> are chosen in two separated clusters and the
+target data is generated by computing <CODE>sin(2*pi*x)</CODE> and adding Gaussian 
+noise. Two Gaussian Processes, each with different covariance functions
+are trained by optimising the hyperparameters 
+using the scaled conjugate gradient algorithm.  The final predictions are
+plotted together with 2 standard deviation error bars. 
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gp.htm">gp</a></CODE>, <CODE><a href="gperr.htm">gperr</a></CODE>, <CODE><a href="gpfwd.htm">gpfwd</a></CODE>, <CODE><a href="gpgrad.htm">gpgrad</a></CODE>, <CODE><a href="gpinit.htm">gpinit</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demgpard.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demgpard
+</title>
+</head>
+<body>
+<H1> demgpard
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate ARD using a Gaussian Process.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demgpare</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The data consists of three input variables <CODE>x1</CODE>, <CODE>x2</CODE> and
+<CODE>x3</CODE>, and one target variable 
+<CODE>t</CODE>. The 
+target data is generated by computing <CODE>sin(2*pi*x1)</CODE> and adding Gaussian 
+noise, x2 is a copy of x1 with a higher level of added
+noise, and x3 is sampled randomly from a Gaussian distribution.
+A Gaussian Process, is
+trained by optimising the hyperparameters 
+using the scaled conjugate gradient algorithm. The final values of the
+hyperparameters show that the model successfully identifies the importance
+of each input. 
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demgp.htm">demgp</a></CODE>, <CODE><a href="gp.htm">gp</a></CODE>, <CODE><a href="gperr.htm">gperr</a></CODE>, <CODE><a href="gpfwd.htm">gpfwd</a></CODE>, <CODE><a href="gpgrad.htm">gpgrad</a></CODE>, <CODE><a href="gpinit.htm">gpinit</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demgpot.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demgpot
+</title>
+</head>
+<body>
+<H1> demgpot
+</H1>
+<h2>
+Purpose
+</h2>
+Computes the gradient of the negative log likelihood for a mixture model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+g = demgpot(x, mix)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+This function computes the gradient of the negative log of the unconditional data
+density <CODE>p(x)</CODE> with respect to the coefficients of the
+data vector <CODE>x</CODE> for a Gaussian mixture model.  The data structure
+<CODE>mix</CODE> defines the mixture model, while the matrix <CODE>x</CODE> contains
+the data vector as a row vector. Note the unusual order of the arguments:
+this is so that the function can be used in <CODE>demhmc1</CODE> directly for
+sampling from the distribution <CODE>p(x)</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demhmc1.htm">demhmc1</a></CODE>, <CODE><a href="demmet1.htm">demmet1</a></CODE>, <CODE><a href="dempot.htm">dempot</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demgtm1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demgtm1
+</title>
+</head>
+<body>
+<H1> demgtm1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate EM for GTM.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demgtm1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+This script demonstrates the use of the EM
+algorithm to fit a one-dimensional GTM to a two-dimensional set of data
+using maximum likelihood. The location and spread of the Gaussian kernels
+in the data space is shown during training.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demgtm2.htm">demgtm2</a></CODE>, <CODE><a href="gtm.htm">gtm</a></CODE>, <CODE><a href="gtmem.htm">gtmem</a></CODE>, <CODE><a href="gtmpost.htm">gtmpost</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demgtm2.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demgtm2
+</title>
+</head>
+<body>
+<H1> demgtm2
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate GTM for visualisation.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demgtm2</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+This script demonstrates the use of a
+GTM with  a two-dimensional latent space to visualise data in a higher
+dimensional space.
+This is done through the use of the mean responsibility and magnification
+factors.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demgtm1.htm">demgtm1</a></CODE>, <CODE><a href="gtm.htm">gtm</a></CODE>, <CODE><a href="gtmem.htm">gtmem</a></CODE>, <CODE><a href="gtmpost.htm">gtmpost</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demhint.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demhint
+</title>
+</head>
+<body>
+<H1> demhint
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstration of Hinton diagram for 2-layer feed-forward network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demhint
+demhint(nin, nhidden, nout)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>demhint</CODE> plots a Hinton diagram for a 2-layer feedforward network
+with 5 inputs, 4 hidden units and 3 outputs. The weight vector is
+chosen from a Gaussian distribution as described under <CODE>mlp</CODE>.
+
+<p><CODE>demhint(nin, nhidden, nout)</CODE> allows the user to specify the
+number of inputs, hidden units and outputs.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="hinton.htm">hinton</a></CODE>, <CODE><a href="hintmat.htm">hintmat</a></CODE>, <CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlppak.htm">mlppak</a></CODE>, <CODE><a href="mlpunpak.htm">mlpunpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demhmc1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demhmc1
+</title>
+</head>
+<body>
+<H1> demhmc1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate Hybrid Monte Carlo sampling on mixture of two Gaussians.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demhmc1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of generating data from a mixture of two Gaussians
+in two dimensions using a hybrid Monte Carlo algorithm with persistence.
+A mixture model is then fitted to the sample to compare it with the 
+true underlying generator.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demhmc3.htm">demhmc3</a></CODE>, <CODE><a href="hmc.htm">hmc</a></CODE>, <CODE><a href="dempot.htm">dempot</a></CODE>, <CODE><a href="demgpot.htm">demgpot</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demhmc2.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demhmc2
+</title>
+</head>
+<body>
+<H1> demhmc2
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate Bayesian regression with Hybrid Monte Carlo sampling.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demhmc2</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of one input variable <CODE>x</CODE> and one target variable 
+<CODE>t</CODE> with data generated by sampling <CODE>x</CODE> at equal intervals and then 
+generating target data by computing <CODE>sin(2*pi*x)</CODE> and adding Gaussian 
+noise. The model is a 2-layer network with linear outputs, and the hybrid Monte
+Carlo algorithm (without persistence) is used to sample from the posterior
+distribution of the weights.  The graph shows the underlying function,
+100 samples from the function given by the posterior distribution of the
+weights, and the average prediction (weighted by the posterior probabilities).
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demhmc3.htm">demhmc3</a></CODE>, <CODE><a href="hmc.htm">hmc</a></CODE>, <CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlperr.htm">mlperr</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demhmc3.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demhmc3
+</title>
+</head>
+<body>
+<H1> demhmc3
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate Bayesian regression with Hybrid Monte Carlo sampling.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demhmc3</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of one input variable <CODE>x</CODE> and one target variable 
+<CODE>t</CODE> with data generated by sampling <CODE>x</CODE> at equal intervals and then 
+generating target data by computing <CODE>sin(2*pi*x)</CODE> and adding Gaussian 
+noise. The model is a 2-layer network with linear outputs, and the hybrid Monte
+Carlo algorithm (with persistence) is used to sample from the posterior
+distribution of the weights.  The graph shows the underlying function,
+300 samples from the function given by the posterior distribution of the
+weights, and the average prediction (weighted by the posterior probabilities).
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demhmc2.htm">demhmc2</a></CODE>, <CODE><a href="hmc.htm">hmc</a></CODE>, <CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlperr.htm">mlperr</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demkmn1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demkmean
+</title>
+</head>
+<body>
+<H1> demkmean
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate simple clustering model trained with K-means.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demkmean</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of data in a two-dimensional space. 
+The data is
+drawn from three spherical Gaussian distributions with priors 0.3,
+0.5 and 0.2; centres (2, 3.5), (0, 0) and (0,2); and standard deviations
+0.2, 0.5 and 1.0. The first figure contains a
+scatter plot of the data.  The data is the same as in <CODE>demgmm1</CODE>.
+
+<p>A cluster model with three components is trained using the batch
+K-means algorithm. The matrix of centres is printed after training.
+The second
+figure shows the data labelled with a colour derived from the corresponding 
+cluster
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="dem2ddat.htm">dem2ddat</a></CODE>, <CODE><a href="demgmm1.htm">demgmm1</a></CODE>, <CODE><a href="knn1.htm">knn1</a></CODE>, <CODE><a href="kmeans.htm">kmeans</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demknn1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demknn1
+</title>
+</head>
+<body>
+<H1> demknn1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate nearest neighbour classifier.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demknn1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of data in a two-dimensional space. 
+The data is
+drawn from three spherical Gaussian distributions with priors 0.3,
+0.5 and 0.2; centres (2, 3.5), (0, 0) and (0,2); and standard deviations
+0.2, 0.5 and 1.0. The first figure contains a
+scatter plot of the data.  The data is the same as in <CODE>demgmm1</CODE>.
+
+<p>The second
+figure shows the data labelled with the corresponding class given
+by the classifier.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="dem2ddat.htm">dem2ddat</a></CODE>, <CODE><a href="demgmm1.htm">demgmm1</a></CODE>, <CODE><a href="knn.htm">knn</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demmdn1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demmdn1
+</title>
+</head>
+<body>
+<H1> demmdn1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate fitting a multi-valued function using a Mixture Density Network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demmdn1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of one input variable
+<CODE>x</CODE> and one target variable <CODE>t</CODE> with data generated by
+sampling <CODE>t</CODE> at equal intervals and then generating target data by
+computing <CODE>t + 0.3*sin(2*pi*t)</CODE> and adding Gaussian noise. A
+Mixture Density Network with 3 centres in the mixture model is trained
+by minimizing a negative log likelihood error function using the scaled
+conjugate gradient optimizer. 
+
+<p>The conditional means, mixing coefficients and variances are plotted
+as a function of <CODE>x</CODE>, and a contour plot of the full conditional
+density is also generated.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mdn.htm">mdn</a></CODE>, <CODE><a href="mdnerr.htm">mdnerr</a></CODE>, <CODE><a href="mdngrad.htm">mdngrad</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demmet1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demmet1
+</title>
+</head>
+<body>
+<H1> demmet1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate Markov Chain Monte Carlo sampling on a Gaussian.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demmet1
+demmet1(plotwait)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of generating data from a Gaussian
+in two dimensions using a Markov Chain Monte Carlo algorithm. The points are
+plotted one after another to show the path taken by the chain.
+
+<p><CODE>demmet1(plotwait)</CODE> allows the user to set the time (in a whole number
+of seconds) between the plotting of points.  This is passed to <CODE>pause</CODE>
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demhmc1.htm">demhmc1</a></CODE>, <CODE><a href="metrop.htm">metrop</a></CODE>, <CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="dempot.htm">dempot</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demmlp1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demmlp1
+</title>
+</head>
+<body>
+<H1> demmlp1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate simple regression using a multi-layer perceptron
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demmlp1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of one input variable <CODE>x</CODE> and one target variable 
+<CODE>t</CODE> with data generated by sampling <CODE>x</CODE> at equal intervals and then 
+generating target data by computing <CODE>sin(2*pi*x)</CODE> and adding Gaussian 
+noise. A 2-layer network with linear outputs is trained by minimizing a 
+sum-of-squares error function using the scaled conjugate gradient optimizer. 
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlperr.htm">mlperr</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demmlp2.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demmlp2
+</title>
+</head>
+<body>
+<H1> demmlp2
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate simple classification using a multi-layer perceptron
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demmlp2</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of input data in two dimensions drawn from a mixture
+of three Gaussians: two of which are assigned to a single class.  An MLP
+with logistic outputs trained with a quasi-Newton optimisation algorithm is
+compared with the optimal Bayesian decision rule.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlpfwd.htm">mlpfwd</a></CODE>, <CODE><a href="neterr.htm">neterr</a></CODE>, <CODE><a href="quasinew.htm">quasinew</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demnlab.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demnlab
+</title>
+</head>
+<body>
+<H1> demnlab
+</H1>
+<h2>
+Purpose
+</h2>
+A front-end Graphical User Interface to the demos
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demnlab</PRE>
+
+
+<p><h2>
+Description
+</h2>
+This function will start a user interface allowing the user to select
+different demonstration functions to view. The demos are divided into 4
+groups, with the demo being executed by selecting the desired option
+from a pop-up menu.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href=".htm"></a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demns1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demns1
+</title>
+</head>
+<body>
+<H1> demns1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate Neuroscale for visualisation.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demns1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+This script demonstrates the use of the Neuroscale algorithm for
+topographic projection and visualisation.  A data sample is generated
+from a mixture of two Gaussians in 4d space, and an RBF is trained
+with the stress error function to project the data into 2d.  The training
+data and a test sample are both plotted in this projection.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="rbftrain.htm">rbftrain</a></CODE>, <CODE><a href="rbfprior.htm">rbfprior</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demolgd1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demolgd1
+</title>
+</head>
+<body>
+<H1> demolgd1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate simple MLP optimisation with on-line gradient descent
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demolgd1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of one input variable <CODE>x</CODE> and one target variable 
+<CODE>t</CODE> with data generated by sampling <CODE>x</CODE> at equal intervals and then 
+generating target data by computing <CODE>sin(2*pi*x)</CODE> and adding Gaussian 
+noise. A 2-layer network with linear outputs is trained by minimizing a 
+sum-of-squares error function using on-line gradient descent. 
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demmlp1.htm">demmlp1</a></CODE>, <CODE><a href="olgd.htm">olgd</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demopt1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demopt1
+</title>
+</head>
+<body>
+<H1> demopt1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate different optimisers on Rosenbrock's function.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demopt1
+demopt1(xinit)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The four general optimisers (quasi-Newton, conjugate gradients, 
+scaled conjugate gradients, and gradient descent) are applied to
+the minimisation of Rosenbrock's well known `banana' function.
+Each optimiser is run for at most 100 cycles, and a stopping
+criterion of 1.0e-4 is used for both position and function value.
+At the end, the trajectory of each algorithm is shown on a contour
+plot of the function.
+
+<p><CODE>demopt1(xinit)</CODE> allows the user to specify a row vector with
+two columns as the starting point.  The default is the point [-1 1].
+Note that the contour plot has an x range of [-1.5, 1.5] and a y
+range of [-0.5, 2.1], so it is best to choose a starting point in the
+same region.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="conjgrad.htm">conjgrad</a></CODE>, <CODE><a href="graddesc.htm">graddesc</a></CODE>, <CODE><a href="quasinew.htm">quasinew</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE>, <CODE><a href="rosen.htm">rosen</a></CODE>, <CODE><a href="rosegrad.htm">rosegrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/dempot.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual dempot
+</title>
+</head>
+<body>
+<H1> dempot
+</H1>
+<h2>
+Purpose
+</h2>
+Computes the negative log likelihood for a mixture model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+e = dempot(x, mix)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+This function computes the negative log of the unconditional data
+density <CODE>p(x)</CODE> for a Gaussian mixture model.  The data structure
+<CODE>mix</CODE> defines the mixture model, while the matrix <CODE>x</CODE> contains
+the data vectors.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demgpot.htm">demgpot</a></CODE>, <CODE><a href="demhmc1.htm">demhmc1</a></CODE>, <CODE><a href="demmet1.htm">demmet1</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demprgp.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demprgp
+</title>
+</head>
+<body>
+<H1> demprgp
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate sampling from a Gaussian Process prior.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demprgp</PRE>
+
+
+<p><h2>
+Description
+</h2>
+This function plots the functions represented by a Gaussian Process
+model. The hyperparameter values can be adjusted 
+on a linear scale using the sliders (though the exponential
+of the parameters is used in the covariance function), or 
+by typing values into the text boxes and pressing the return key.
+Both types of covariance function are supported.  An extra function
+specific parameter is needed for the rational quadratic function. 
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gp.htm">gp</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demprior.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demprior
+</title>
+</head>
+<body>
+<H1> demprior
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate sampling from a multi-parameter Gaussian prior.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demprior</PRE>
+
+
+<p><h2>
+Description
+</h2>
+This function plots the functions represented by a multi-layer perceptron
+network when the weights are set to values drawn from a Gaussian prior
+distribution. The parameters <CODE>aw1</CODE>, <CODE>ab1</CODE> <CODE>aw2</CODE> and <CODE>ab2</CODE> 
+control the inverse variances of the first-layer weights, the hidden unit 
+biases, the second-layer weights and the output unit biases respectively. 
+Their values can be adjusted on a logarithmic scale using the sliders, or 
+by typing values into the text boxes and pressing the return key. 
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demrbf1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demrbf1
+</title>
+</head>
+<body>
+<H1> demrbf1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate simple regression using a radial basis function network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demrbf1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+The problem consists of one input variable <CODE>x</CODE> and one target variable 
+<CODE>t</CODE> with data generated by sampling <CODE>x</CODE> at equal intervals and then 
+generating target data by computing <CODE>sin(2*pi*x)</CODE> and adding Gaussian 
+noise. This data is the same as that used in demmlp1.
+
+<p>Three different RBF networks (with different activation functions)
+are trained in two stages. First, a Gaussian mixture model is trained using
+the EM algorithm, and the centres of this model are used to set the centres
+of the RBF.  Second, the output weights (and biases) are determined using the
+pseudo-inverse of the design matrix.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demmlp1.htm">demmlp1</a></CODE>, <CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="rbffwd.htm">rbffwd</a></CODE>, <CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmmem.htm">gmmem</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demsom1.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demsom1
+</title>
+</head>
+<body>
+<H1> demsom1
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate SOM for visualisation.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demsom1</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+This script demonstrates the use of a
+SOM with  a two-dimensional grid to map onto data in 
+two-dimensional space.  Both on-line and batch training algorithms
+are shown.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="som.htm">som</a></CODE>, <CODE><a href="sompak.htm">sompak</a></CODE>, <CODE><a href="somtrain.htm">somtrain</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/demtrain.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual demtrain
+</title>
+</head>
+<body>
+<H1> demtrain
+</H1>
+<h2>
+Purpose
+</h2>
+Demonstrate training of MLP network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+demtrain</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>demtrain</CODE> brings up a simple GUI to show the training of
+an MLP network on classification and regression problems.  The user
+should load in a dataset (which should be in Netlab format: see 
+<CODE>datread</CODE>), select the output activation function, the
+ number of cycles and hidden units and then
+train the network. The scaled conjugate gradient algorithm is used.
+A graph shows the evolution of the error: the value is shown 
+<CODE>max(ceil(iterations / 50), 5)</CODE> cycles.
+
+<p>Once the network is trained, it is saved to the file <CODE>mlptrain.net</CODE>.
+The results can then be viewed as a confusion matrix (for classification
+problems) or a plot of output versus target (for regression problems).
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="confmat.htm">confmat</a></CODE>, <CODE><a href="datread.htm">datread</a></CODE>, <CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="netopt.htm">netopt</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/dist2.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual dist2
+</title>
+</head>
+<body>
+<H1> dist2
+</H1>
+<h2>
+Purpose
+</h2>
+Calculates squared distance between two sets of points.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+d = dist2(x, c)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>d = dist2(x, c)</CODE> takes two matrices of vectors and calculates the
+squared Euclidean distance between them.  Both matrices must be of the
+same column dimension.  If <CODE>x</CODE> has <CODE>m</CODE> rows and <CODE>n</CODE> columns, and
+<CODE>c</CODE> has <CODE>l</CODE> rows and <CODE>n</CODE> columns, then the result has
+<CODE>m</CODE> rows and <CODE>l</CODE> columns.  The <CODE>i, j</CODE>th entry is the 
+squared distance from the <CODE>i</CODE>th row of <CODE>x</CODE> to the <CODE>j</CODE>th
+row of <CODE>c</CODE>.
+
+<p><h2>
+Example
+</h2>
+The following code is used in <CODE>rbffwd</CODE> to calculate the activation of
+a thin plate spline function.
+<PRE>
+
+n2 = dist2(x, c);
+z = log(n2.^(n2.^2));
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmmactiv.htm">gmmactiv</a></CODE>, <CODE><a href="kmeans.htm">kmeans</a></CODE>, <CODE><a href="rbffwd.htm">rbffwd</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/eigdec.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual eigdec
+</title>
+</head>
+<body>
+<H1> eigdec
+</H1>
+<h2>
+Purpose
+</h2>
+Sorted eigendecomposition
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+evals = eigdec(x, N)
+[evals, evec] = eigdec(x, N)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>evals = eigdec(x, N</CODE> computes the largest <CODE>N</CODE> eigenvalues of the 
+matrix <CODE>x</CODE> in descending order.  <CODE>[evals, evec] = eigdec(x, N)</CODE>
+also computes the corresponding eigenvectors.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="pca.htm">pca</a></CODE>, <CODE><a href="ppca.htm">ppca</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/errbayes.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual errbayes
+</title>
+</head>
+<body>
+<H1> errbayes
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate Bayesian error function for network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+e = errbayes(net, edata)
+[e, edata, eprior] = errbayes(net, edata)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>e = errbayes(net, edata)</CODE> takes a network data structure 
+<CODE>net</CODE> together 
+the data contribution to the error for a set of inputs and targets.
+It returns the regularised error using any zero mean Gaussian priors
+on the weights defined in
+<CODE>net</CODE>. 
+
+<p><CODE>[e, edata, eprior] = errbayes(net, x, t)</CODE> additionally returns the
+data and prior components of the error.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="glmerr.htm">glmerr</a></CODE>, <CODE><a href="mlperr.htm">mlperr</a></CODE>, <CODE><a href="rbferr.htm">rbferr</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/evidence.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual evidence
+</title>
+</head>
+<body>
+<H1> evidence
+</H1>
+<h2>
+Purpose
+</h2>
+Re-estimate hyperparameters using evidence approximation.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+[net] = evidence(net, x, t)
+[net, gamma, logev] = evidence(net, x, t, num)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>[net] = evidence(net, x, t)</CODE> re-estimates the
+hyperparameters <CODE>alpha</CODE> and <CODE>beta</CODE> by applying Bayesian
+re-estimation formulae for <CODE>num</CODE> iterations. The hyperparameter
+<CODE>alpha</CODE> can be a simple scalar associated with an isotropic prior
+on the weights, or can be a vector in which each component is
+associated with a group of weights as defined by the <CODE>index</CODE>
+matrix in the <CODE>net</CODE> data structure. These more complex priors can
+be set up for an MLP using <CODE>mlpprior</CODE>. Initial values for the iterative
+re-estimation are taken from the network data structure <CODE>net</CODE>
+passed as an input argument, while the return argument <CODE>net</CODE>
+contains the re-estimated values.
+
+<p><CODE>[net, gamma, logev] = evidence(net, x, t, num)</CODE> allows the re-estimation 
+formula to be applied for <CODE>num</CODE> cycles in which the re-estimated
+values for the hyperparameters from each cycle are used to re-evaluate
+the Hessian matrix for the next cycle.  The return value <CODE>gamma</CODE> is
+the number of well-determined parameters and <CODE>logev</CODE> is the log
+of the evidence.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlpprior.htm">mlpprior</a></CODE>, <CODE><a href="netgrad.htm">netgrad</a></CODE>, <CODE><a href="nethess.htm">nethess</a></CODE>, <CODE><a href="demev1.htm">demev1</a></CODE>, <CODE><a href="demard.htm">demard</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/fevbayes.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual fevbayes
+</title>
+</head>
+<body>
+<H1> fevbayes
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate Bayesian regularisation for network forward propagation.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+extra = fevbayes(net, y, a, x, t, x_test)
+[extra, invhess] = fevbayes(net, y, a, x, t, x_test, invhess)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>extra = fevbayes(net, y, a, x, t, x_test)</CODE> takes a network data structure 
+<CODE>net</CODE> together with a set of hidden unit activations <CODE>a</CODE> from 
+test inputs <CODE>x_test</CODE>, training data inputs <CODE>x</CODE> and <CODE>t</CODE> and
+outputs a matrix of extra information <CODE>extra</CODE> that consists of
+error bars (variance)
+for a regression problem or moderated outputs for a classification problem.
+The optional argument (and return value) 
+<CODE>invhess</CODE> is the inverse of the network Hessian
+computed on the training data inputs and targets.  Passing it in avoids
+recomputing it, which can be a significant saving for large training sets.
+
+<p>This is called by network-specific functions such as <CODE>mlpevfwd</CODE> which
+are needed since the return values (predictions and hidden unit activations)
+for different network types are in different orders (for good reasons).
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlpevfwd.htm">mlpevfwd</a></CODE>, <CODE><a href="rbfevfwd.htm">rbfevfwd</a></CODE>, <CODE><a href="glmevfwd.htm">glmevfwd</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gauss.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gauss
+</title>
+</head>
+<body>
+<H1> gauss
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate a Gaussian distribution.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+y = gauss(mu, covar, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>y = gauss(mu, covar, x)</CODE> evaluates a multi-variate Gaussian 
+density in <CODE>d</CODE>-dimensions at a set of points given by the rows
+of the matrix <CODE>x</CODE>. The Gaussian density has mean vector <CODE>mu</CODE>
+and covariance matrix <CODE>covar</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gsamp.htm">gsamp</a></CODE>, <CODE><a href="demgauss.htm">demgauss</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gbayes.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gbayes
+</title>
+</head>
+<body>
+<H1> gbayes
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate gradient of Bayesian error function for network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+g = gbayes(net, gdata)
+[g, gdata, gprior] = gbayes(net, gdata)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = gbayes(net, gdata)</CODE> takes a network data structure <CODE>net</CODE> together 
+the data contribution to the error gradient
+for a set of inputs and targets.
+It returns the regularised error gradient using any zero mean Gaussian priors
+on the weights defined in
+<CODE>net</CODE>.  In addition, if a <CODE>mask</CODE> is defined in <CODE>net</CODE>, then
+the entries in <CODE>g</CODE> that correspond to weights with a 0 in the
+mask are removed.
+
+<p><CODE>[g, gdata, gprior] = gbayes(net, gdata)</CODE> additionally returns the
+data and prior components of the error.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="errbayes.htm">errbayes</a></CODE>, <CODE><a href="glmgrad.htm">glmgrad</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE>, <CODE><a href="rbfgrad.htm">rbfgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/glm.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,85 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual glm
+</title>
+</head>
+<body>
+<H1> glm
+</H1>
+<h2>
+Purpose
+</h2>
+Create a generalized linear model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = glm(nin, nout, func)
+net = glm(nin, nout, func, prior)
+net = glm(nin, nout, func, prior, beta)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>net = glm(nin, nout, func)</CODE> takes the number of inputs
+and outputs for a generalized linear model, together
+with a string <CODE>func</CODE> which specifies the output unit activation function,
+and returns a data structure <CODE>net</CODE>. The weights are drawn from a zero mean,
+isotropic Gaussian, with variance scaled by the fan-in of the
+output units. This makes use of the Matlab function
+<CODE>randn</CODE> and so the seed for the random weight initialization can be 
+set using <CODE>randn('state', s)</CODE> where <CODE>s</CODE> is the seed value. The optional
+argument <CODE>alpha</CODE> sets the inverse variance for the weight
+initialization.
+
+<p>The fields in <CODE>net</CODE> are
+<PRE>
+  type = 'glm'
+  nin = number of inputs
+  nout = number of outputs
+  nwts = total number of weights and biases
+  actfn = string describing the output unit activation function:
+      'linear'
+      'logistic'
+      'softmax'
+  w1 = first-layer weight matrix
+  b1 = first-layer bias vector
+</PRE>
+
+
+<p><CODE>net = glm(nin, nout, func, prior)</CODE>, in which <CODE>prior</CODE> is
+a scalar, allows the field 
+<CODE>net.alpha</CODE> in the data structure <CODE>net</CODE> to be set, corresponding 
+to a zero-mean isotropic Gaussian prior with inverse variance with
+value <CODE>prior</CODE>. Alternatively, <CODE>prior</CODE> can consist of a data
+structure with fields <CODE>alpha</CODE> and <CODE>index</CODE>, allowing individual
+Gaussian priors to be set over groups of weights in the network. Here
+<CODE>alpha</CODE> is a column vector in which each element corresponds to a 
+separate group of weights, which need not be mutually exclusive.  The
+membership of the groups is defined by the matrix <CODE>index</CODE> in which
+the columns correspond to the elements of <CODE>alpha</CODE>. Each column has
+one element for each weight in the matrix, in the order defined by the
+function <CODE>glmpak</CODE>, and each element is 1 or 0 according to whether
+the weight is a member of the corresponding group or not.
+
+<p><CODE>net = glm(nin, nout, func, prior, beta)</CODE> also sets the 
+additional field <CODE>net.beta</CODE> in the data structure <CODE>net</CODE>, where
+beta corresponds to the inverse noise variance.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="glmpak.htm">glmpak</a></CODE>, <CODE><a href="glmunpak.htm">glmunpak</a></CODE>, <CODE><a href="glmfwd.htm">glmfwd</a></CODE>, <CODE><a href="glmerr.htm">glmerr</a></CODE>, <CODE><a href="glmgrad.htm">glmgrad</a></CODE>, <CODE><a href="glmtrain.htm">glmtrain</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/glmderiv.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual glmderiv
+</title>
+</head>
+<body>
+<H1> glmderiv
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate derivatives of GLM outputs with respect to weights.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+g = glmderiv(net, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = glmderiv(net, x)</CODE> takes a network data structure <CODE>net</CODE> and a matrix
+of input vectors <CODE>x</CODE> and returns a three-index matrix mat{g} whose 
+<CODE>i</CODE>, <CODE>j</CODE>, <CODE>k</CODE>
+element contains the derivative of network output <CODE>k</CODE> with respect to
+weight or bias parameter <CODE>j</CODE> for input pattern <CODE>i</CODE>. The ordering of the
+weight and bias parameters is defined by <CODE>glmunpak</CODE>.
+
+<p><h2>
+See also
+</h2>
+<PRE>
+glm, glmunpak, glmgrad</PRE>
+
+
+<p><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/glmerr.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,56 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual glmerr
+</title>
+</head>
+<body>
+<H1> glmerr
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate error function for generalized linear model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+e = glmerr(net, x, t)
+[e, edata, eprior] = glmerr(net, x, t)
+[e, edata, eprior, y, a] = glmerr(net, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>e = glmerr(net, x, t)</CODE> takes a generalized
+linear model data structure <CODE>net</CODE> together with a matrix <CODE>x</CODE>
+of input vectors and a matrix <CODE>t</CODE> of target vectors, and evaluates
+the error function <CODE>e</CODE>. The choice of error function corresponds
+to the output unit activation function. Each row of <CODE>x</CODE>
+corresponds to one input vector and each row of <CODE>t</CODE> corresponds to
+one target vector.
+
+<p><CODE>[e, edata, eprior, y, a] = glmerr(net, x, t)</CODE> also returns
+the data and prior components of the total error.
+
+<p><CODE>[e, edata, eprior, y, a] = glmerr(net, x)</CODE> also returns a matrix <CODE>y</CODE>
+giving the outputs of the models and a matrix <CODE>a</CODE> 
+giving the summed inputs to each output unit, where each row
+corresponds to one pattern.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="glm.htm">glm</a></CODE>, <CODE><a href="glmpak.htm">glmpak</a></CODE>, <CODE><a href="glmunpak.htm">glmunpak</a></CODE>, <CODE><a href="glmfwd.htm">glmfwd</a></CODE>, <CODE><a href="glmgrad.htm">glmgrad</a></CODE>, <CODE><a href="glmtrain.htm">glmtrain</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/glmevfwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual glmevfwd
+</title>
+</head>
+<body>
+<H1> glmevfwd
+</H1>
+<h2>
+Purpose
+</h2>
+Forward propagation with evidence for GLM
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+[y, extra] = glmevfwd(net, x, t, x_test)
+[y, extra, invhess] = glmevfwd(net, x, t, x_test, invhess)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>y = glmevfwd(net, x, t, x_test)</CODE> takes a network data structure 
+<CODE>net</CODE> together with the input <CODE>x</CODE> and target <CODE>t</CODE> training data
+and input test data <CODE>x_test</CODE>.
+It returns the normal forward propagation through the network <CODE>y</CODE>
+together with a matrix <CODE>extra</CODE> which consists of error bars (variance)
+for a regression problem or moderated outputs for a classification problem.
+
+<p>The optional argument (and return value) 
+<CODE>invhess</CODE> is the inverse of the network Hessian
+computed on the training data inputs and targets.  Passing it in avoids
+recomputing it, which can be a significant saving for large training sets.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="fevbayes.htm">fevbayes</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/glmfwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual glmfwd
+</title>
+</head>
+<body>
+<H1> glmfwd
+</H1>
+<h2>
+Purpose
+</h2>
+Forward propagation through generalized linear model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+y = glmfwd(net, x)
+[y, a] = glmfwd(net, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>y = glmfwd(net, x)</CODE> takes a generalized linear model
+data structure <CODE>net</CODE> together with
+a matrix <CODE>x</CODE> of input vectors, and forward propagates the inputs
+through the network to generate a matrix <CODE>y</CODE> of output
+vectors. Each row of <CODE>x</CODE> corresponds to one input vector and each
+row of <CODE>y</CODE> corresponds to one output vector.
+
+<p><CODE>[y, a] = glmfwd(net, x)</CODE> also returns a matrix <CODE>a</CODE> 
+giving the summed inputs to each output unit, where each row
+corresponds to one pattern.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="glm.htm">glm</a></CODE>, <CODE><a href="glmpak.htm">glmpak</a></CODE>, <CODE><a href="glmunpak.htm">glmunpak</a></CODE>, <CODE><a href="glmerr.htm">glmerr</a></CODE>, <CODE><a href="glmgrad.htm">glmgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/glmgrad.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual glmgrad
+</title>
+</head>
+<body>
+<H1> glmgrad
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate gradient of error function for generalized linear model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+g = glmgrad(net, x, t)
+[g, gdata, gprior] = glmgrad(net, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = glmgrad(net, x, t)</CODE> takes a generalized linear model
+data structure <CODE>net</CODE> 
+together with a matrix <CODE>x</CODE> of input vectors and a matrix <CODE>t</CODE>
+of target vectors, and evaluates the gradient <CODE>g</CODE> of the error
+function with respect to the network weights. The error function
+corresponds to the choice of output unit activation function. Each row
+of <CODE>x</CODE> corresponds to one input vector and each row of <CODE>t</CODE>
+corresponds to one target vector.
+
+<p><CODE>[g, gdata, gprior] = glmgrad(net, x, t)</CODE> also returns separately 
+the data and prior contributions to the gradient.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="glm.htm">glm</a></CODE>, <CODE><a href="glmpak.htm">glmpak</a></CODE>, <CODE><a href="glmunpak.htm">glmunpak</a></CODE>, <CODE><a href="glmfwd.htm">glmfwd</a></CODE>, <CODE><a href="glmerr.htm">glmerr</a></CODE>, <CODE><a href="glmtrain.htm">glmtrain</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/glmhess.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual glmhess
+</title>
+</head>
+<body>
+<H1> glmhess
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate the Hessian matrix for a generalised linear model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+h = glmhess(net, x, t)
+[h, hdata] = glmhess(net, x, t)
+h = glmhess(net, x, t, hdata)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>h = glmhess(net, x, t)</CODE> takes a GLM network data structure <CODE>net</CODE>,  
+a matrix <CODE>x</CODE> of input values, and a matrix <CODE>t</CODE> of target
+values and returns the full Hessian matrix <CODE>h</CODE> corresponding to
+the second derivatives of the negative log posterior distribution,
+evaluated for the current weight and bias values as defined by
+<CODE>net</CODE>. Note that the target data is not required in the calculation,
+but is included to make the interface uniform with <CODE>nethess</CODE>.  For
+linear and logistic outputs, the computation is very simple and is 
+done (in effect) in one line in <CODE>glmtrain</CODE>.
+
+<p><CODE>[h, hdata] = glmhess(net, x, t)</CODE> returns both the Hessian matrix
+<CODE>h</CODE> and the contribution <CODE>hdata</CODE> arising from the data dependent
+term in the Hessian.
+
+<p><CODE>h = glmhess(net, x, t, hdata)</CODE> takes a network data structure
+<CODE>net</CODE>, a matrix <CODE>x</CODE> of input values, and a matrix <CODE>t</CODE> of 
+target values, together with the contribution <CODE>hdata</CODE> arising from
+the data dependent term in the Hessian, and returns the full Hessian
+matrix <CODE>h</CODE> corresponding to the second derivatives of the negative
+log posterior distribution. This version saves computation time if
+<CODE>hdata</CODE> has already been evaluated for the current weight and bias
+values.
+
+<p><h2>
+Example
+</h2>
+The Hessian matrix is used by <CODE>glmtrain</CODE> to take a Newton step for
+softmax outputs.
+<PRE>
+
+Hessian = glmhess(net, x, t);
+deltaw = -gradient*pinv(Hessian);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="glm.htm">glm</a></CODE>, <CODE><a href="glmtrain.htm">glmtrain</a></CODE>, <CODE><a href="hesschek.htm">hesschek</a></CODE>, <CODE><a href="nethess.htm">nethess</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/glminit.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual glminit
+</title>
+</head>
+<body>
+<H1> glminit
+</H1>
+<h2>
+Purpose
+</h2>
+Initialise the weights in a generalized linear model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = glminit(net, prior)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>net = glminit(net, prior)</CODE> takes a generalized linear model
+<CODE>net</CODE> and sets the weights and biases by sampling from a Gaussian
+distribution. If <CODE>prior</CODE> is a scalar, then all of the parameters
+(weights and biases) are sampled from a single isotropic Gaussian with
+inverse variance equal to <CODE>prior</CODE>. If <CODE>prior</CODE> is a data
+structure similar to that in <CODE>mlpprior</CODE> but for a single layer of
+weights, then the parameters
+are sampled from multiple Gaussians according to their groupings
+(defined by the <CODE>index</CODE> field) with corresponding variances
+(defined by the <CODE>alpha</CODE> field).
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="glm.htm">glm</a></CODE>, <CODE><a href="glmpak.htm">glmpak</a></CODE>, <CODE><a href="glmunpak.htm">glmunpak</a></CODE>, <CODE><a href="mlpinit.htm">mlpinit</a></CODE>, <CODE><a href="mlpprior.htm">mlpprior</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/glmpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual glmpak
+</title>
+</head>
+<body>
+<H1> glmpak
+</H1>
+<h2>
+Purpose
+</h2>
+Combines weights and biases into one weights vector.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+w = glmpak(net)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>w = glmpak(net)</CODE> takes a network data structure <CODE>net</CODE> and 
+combines them into a single row vector <CODE>w</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="glm.htm">glm</a></CODE>, <CODE><a href="glmunpak.htm">glmunpak</a></CODE>, <CODE><a href="glmfwd.htm">glmfwd</a></CODE>, <CODE><a href="glmerr.htm">glmerr</a></CODE>, <CODE><a href="glmgrad.htm">glmgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/glmtrain.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual glmtrain
+</title>
+</head>
+<body>
+<H1> glmtrain
+</H1>
+<h2>
+Purpose
+</h2>
+Specialised training of generalized linear model
+
+<p><h2>
+Description
+</h2>
+<CODE>net = glmtrain(net, options, x, t)</CODE> uses
+the iterative reweighted least squares (IRLS)
+algorithm to set the weights in the generalized linear model structure
+<CODE>net</CODE>.  This is a more efficient alternative to using <CODE>glmerr</CODE>
+and <CODE>glmgrad</CODE> and a non-linear optimisation routine through
+<CODE>netopt</CODE>.
+Note that for linear outputs, a single pass through the 
+algorithm is all that is required, since the error function is quadratic in
+the weights.  The algorithm also handles scalar <CODE>alpha</CODE> and <CODE>beta</CODE>
+terms.  If you want to use more complicated priors, you should use
+general-purpose non-linear optimisation algorithms.
+
+<p>For logistic and softmax outputs, general priors can be handled, although
+this requires the pseudo-inverse of the Hessian, giving up the better
+conditioning and some of the speed advantage of the normal form equations.
+
+<p>The error function value at the final set of weights is returned
+in <CODE>options(8)</CODE>.
+Each row of <CODE>x</CODE> corresponds to one
+input vector and each row of <CODE>t</CODE> corresponds to one target vector.
+
+<p>The optional parameters have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values during training.
+If <CODE>options(1)</CODE> is set to 0,
+then only warning messages are displayed.  If <CODE>options(1)</CODE> is -1,
+then nothing is displayed.
+
+<p><CODE>options(2)</CODE> is a measure of the precision required for the value
+of the weights <CODE>w</CODE> at the solution.
+
+<p><CODE>options(3)</CODE> is a measure of the precision required of the objective
+function at the solution.  Both this and the previous condition must be
+satisfied for termination.
+
+<p><CODE>options(5)</CODE> is set to 1 if an approximation to the Hessian (which assumes
+that all outputs are independent) is used for softmax outputs. With the default
+value of 0 the exact Hessian (which is more expensive to compute) is used.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations for the IRLS algorithm; 
+default 100.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="glm.htm">glm</a></CODE>, <CODE><a href="glmerr.htm">glmerr</a></CODE>, <CODE><a href="glmgrad.htm">glmgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/glmunpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual glmunpak
+</title>
+</head>
+<body>
+<H1> glmunpak
+</H1>
+<h2>
+Purpose
+</h2>
+Separates weights vector into weight and bias matrices. 
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = glmunpak(net, w)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = glmunpak(net, w)</CODE> takes a glm network data structure <CODE>net</CODE> and 
+a weight vector <CODE>w</CODE>, and returns a network data structure identical to
+the input network, except that the first-layer weight matrix
+<CODE>w1</CODE> and the first-layer bias vector <CODE>b1</CODE> have
+been set to the corresponding elements of <CODE>w</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="glm.htm">glm</a></CODE>, <CODE><a href="glmpak.htm">glmpak</a></CODE>, <CODE><a href="glmfwd.htm">glmfwd</a></CODE>, <CODE><a href="glmerr.htm">glmerr</a></CODE>, <CODE><a href="glmgrad.htm">glmgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gmm.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,96 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gmm
+</title>
+</head>
+<body>
+<H1> gmm
+</H1>
+<h2>
+Purpose
+</h2>
+Creates a Gaussian mixture model with specified architecture.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+mix = gmm(dim, ncentres, covartype)
+mix = gmm(dim, ncentres, covartype, ppca_dim)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>mix = gmm(dim, ncentres, covartype)</CODE> takes
+the dimension of the space <CODE>dim</CODE>, the number of centres in the
+mixture model and the type of the mixture model, and returns a data
+structure <CODE>mix</CODE>.
+The mixture model type defines the covariance structure of each component 
+Gaussian:
+<PRE>
+
+  'spherical' = single variance parameter for each component: stored as a vector
+  'diag' = diagonal matrix for each component: stored as rows of a matrix
+  'full' = full matrix for each component: stored as 3d array
+  'ppca' = probabilistic PCA: stored as principal components (in a 3d array
+    and associated variances and off-subspace noise
+</PRE>
+
+<CODE>mix = gmm(dim, ncentres, covartype, ppca_dim)</CODE> also sets the dimension of
+the PPCA sub-spaces: the default value is one.
+
+<p>The priors are initialised to equal values summing to one, and the covariances
+are all the identity matrix (or equivalent).  The centres are
+initialised randomly from a zero mean unit variance Gaussian. This makes use
+of the MATLAB function <CODE>randn</CODE> and so the seed for the random weight
+initialisation can be set using <CODE>randn('state', s)</CODE> where <CODE>s</CODE> is the
+state value.
+
+<p>The fields in <CODE>mix</CODE> are
+<PRE>
+  
+  type = 'gmm'
+  nin = the dimension of the space
+  ncentres = number of mixture components
+  covartype = string for type of variance model
+  priors = mixing coefficients
+  centres = means of Gaussians: stored as rows of a matrix
+  covars = covariances of Gaussians
+</PRE>
+
+The additional fields for mixtures of PPCA are
+<PRE>
+
+  U = principal component subspaces
+  lambda = in-space covariances: stored as rows of a matrix
+</PRE>
+
+The off-subspace noise is stored in <CODE>covars</CODE>.
+
+<p><h2>
+Example
+</h2>
+<PRE>
+
+mix = gmm(2, 4, 'spherical');
+</PRE>
+
+This creates a Gaussian mixture model with 4 components in 2 dimensions.
+The covariance structure is a spherical model.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmmpak.htm">gmmpak</a></CODE>, <CODE><a href="gmmunpak.htm">gmmunpak</a></CODE>, <CODE><a href="gmmsamp.htm">gmmsamp</a></CODE>, <CODE><a href="gmminit.htm">gmminit</a></CODE>, <CODE><a href="gmmem.htm">gmmem</a></CODE>, <CODE><a href="gmmactiv.htm">gmmactiv</a></CODE>, <CODE><a href="gmmpost.htm">gmmpost</a></CODE>, <CODE><a href="gmmprob.htm">gmmprob</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gmmactiv.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gmmactiv
+</title>
+</head>
+<body>
+<H1> gmmactiv
+</H1>
+<h2>
+Purpose
+</h2>
+Computes the activations of a Gaussian mixture model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+a = gmmactiv(mix, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+This function computes the activations <CODE>a</CODE> (i.e. the 
+probability <CODE>p(x|j)</CODE> of the data conditioned on each component density) 
+for a Gaussian mixture model.  For the PPCA model, each activation
+is the conditional probability of <CODE>x</CODE> given that it is generated
+by the component subspace.
+The data structure <CODE>mix</CODE> defines the mixture model, while the matrix
+<CODE>x</CODE> contains the data vectors.  Each row of <CODE>x</CODE> represents a single
+vector.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmmpost.htm">gmmpost</a></CODE>, <CODE><a href="gmmprob.htm">gmmprob</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gmmem.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,87 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gmmem
+</title>
+</head>
+<body>
+<H1> gmmem
+</H1>
+<h2>
+Purpose
+</h2>
+EM algorithm for Gaussian mixture model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+[mix, options, errlog] = gmmem(mix, x, options)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>[mix, options, errlog] = gmmem(mix, x, options)</CODE> uses the Expectation
+Maximization algorithm of Dempster et al. to estimate the parameters of
+a Gaussian mixture model defined by a data structure <CODE>mix</CODE>.
+The matrix <CODE>x</CODE> represents the data whose expectation
+is maximized, with each row corresponding to a vector.
+  
+The optional parameters have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values; also logs error 
+values in the return argument <CODE>errlog</CODE>.
+If <CODE>options(1)</CODE> is set to 0,
+then only warning messages are displayed.  If <CODE>options(1)</CODE> is -1,
+then nothing is displayed.
+
+<p><CODE>options(3)</CODE> is a measure of the absolute precision required of the error
+function at the solution. If the change in log likelihood between two steps of
+the EM algorithm is less than this value, then the function terminates.
+
+<p><CODE>options(5)</CODE> is set to 1 if a covariance matrix is reset to its
+original value when any of its singular values are too small (less
+than MIN_COVAR which has the value eps).  
+With the default value of 0 no action is taken.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations; default 100.
+
+<p>The optional return value <CODE>options</CODE> contains the final error value 
+(i.e. data log likelihood) in
+<CODE>options(8)</CODE>.  
+
+<p><h2>
+Examples
+</h2>
+The following code fragment sets up a Gaussian mixture model, initialises
+the parameters from the data, sets the options and trains the model.
+<PRE>
+
+mix = gmm(inputdim, ncentres, 'full');
+
+<p>options = foptions;
+options(14) = 5;
+mix = gmminit(mix, data, options);
+
+<p>options(1)  = 1;		% Prints out error values.
+options(14) = 30;		% Max. number of iterations.
+
+<p>mix = gmmem(mix, data, options);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmminit.htm">gmminit</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gmminit.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gmminit
+</title>
+</head>
+<body>
+<H1> gmminit
+</H1>
+<h2>
+Purpose
+</h2>
+Initialises Gaussian mixture model from data
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+mix = gmminit(mix, x, options)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>mix = gmminit(mix, x, options)</CODE> uses a dataset <CODE>x</CODE>
+to initialise the parameters of a Gaussian mixture
+model defined by the data structure <CODE>mix</CODE>.  The k-means algorithm
+is used to determine the centres. The priors are computed from the
+proportion of examples belonging to each cluster.
+The covariance matrices are calculated as the sample covariance of the
+points associated with (i.e. closest to) the corresponding centres.
+For a mixture of PPCA model, the PPCA decomposition is calculated
+for the points closest to a given centre.
+This initialisation can be used as the starting point for training the
+model using the EM algorithm.  
+
+<p><h2>
+Example
+</h2>
+<PRE>
+
+mix = gmm(3, 2);
+options = foptions;
+options(14) = 5;
+mix = gmminit(mix, data, options);
+</PRE>
+
+This code sets up a Gaussian mixture model with 3 centres in 2 dimensions, and
+then initialises the parameters from the data set <CODE>data</CODE> with 5 iterations
+of the k means algorithm.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gmmpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gmmpak
+</title>
+</head>
+<body>
+<H1> gmmpak
+</H1>
+<h2>
+Purpose
+</h2>
+Combines all the parameters in a Gaussian mixture model into one vector.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+p = gmmpak(mix)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>p = gmmpak(net)</CODE> takes a mixture data structure <CODE>mix</CODE> 
+and combines the component parameter matrices into a single row
+vector <CODE>p</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmmunpak.htm">gmmunpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gmmpost.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gmmpost
+</title>
+</head>
+<body>
+<H1> gmmpost
+</H1>
+<h2>
+Purpose
+</h2>
+Computes the class posterior probabilities of a Gaussian mixture model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+function post = gmmpost(mix, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+This function computes the posteriors <CODE>post</CODE> (i.e. the probability of each
+component conditioned on the data <CODE>p(j|x)</CODE>) for a Gaussian mixture model.  
+The data structure <CODE>mix</CODE> defines the mixture model, while the matrix
+<CODE>x</CODE> contains the data vectors.  Each row of <CODE>x</CODE> represents a single
+vector.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmmactiv.htm">gmmactiv</a></CODE>, <CODE><a href="gmmprob.htm">gmmprob</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gmmprob.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gmmprob
+</title>
+</head>
+<body>
+<H1> gmmprob
+</H1>
+<h2>
+Purpose
+</h2>
+Computes the data probability for a Gaussian mixture model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+function prob = gmmprob(mix, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+This function computes the unconditional data
+density <CODE>p(x)</CODE> for a Gaussian mixture model.  The data structure
+<CODE>mix</CODE> defines the mixture model, while the matrix <CODE>x</CODE> contains
+the data vectors.  Each row of <CODE>x</CODE> represents a single vector.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmmpost.htm">gmmpost</a></CODE>, <CODE><a href="gmmactiv.htm">gmmactiv</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gmmsamp.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gmmsamp
+</title>
+</head>
+<body>
+<H1> gmmsamp
+</H1>
+<h2>
+Purpose
+</h2>
+Sample from a Gaussian mixture distribution.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+data = gmmsamp(mix, n)
+[data, label] = gmmsamp(mix, n)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>data = gsamp(mix, n)</CODE> generates a sample of size <CODE>n</CODE> from a
+Gaussian mixture distribution defined by the <CODE>mix</CODE> data
+structure. The matrix <CODE>x</CODE> has <CODE>n</CODE>
+rows in which each row represents a <CODE>mix.nin</CODE>-dimensional sample vector.
+
+<p><CODE>[data, label] = gmmsamp(mix, n)</CODE> also returns a column vector of
+classes (as an index 1..N) <CODE>label</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gsamp.htm">gsamp</a></CODE>, <CODE><a href="gmm.htm">gmm</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gmmunpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gmmunpak
+</title>
+</head>
+<body>
+<H1> gmmunpak
+</H1>
+<h2>
+Purpose
+</h2>
+Separates a vector of Gaussian mixture model parameters into its components.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+mix = gmmunpak(mix, p)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>mix = gmmunpak(mix, p)</CODE>
+takes a GMM data structure <CODE>mix</CODE> and 
+a single row vector of parameters <CODE>p</CODE> and returns a mixture data structure
+identical to the input <CODE>mix</CODE>, except that the mixing coefficients
+<CODE>priors</CODE>, centres <CODE>centres</CODE> and covariances <CODE>covars</CODE> 
+(and, for PPCA, the lambdas and U (PCA sub-spaces)) are all set
+to the corresponding elements of <CODE>p</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="gmmpak.htm">gmmpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gp.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gp
+</title>
+</head>
+<body>
+<H1> gp
+</H1>
+<h2>
+Purpose
+</h2>
+Create a Gaussian Process.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = gp(nin, covarfn)
+net = gp(nin, covarfn, prior)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>net = gp(nin, covarfn)</CODE> takes the number of inputs <CODE>nin</CODE> 
+for a Gaussian Process model with a single output, together
+with a string <CODE>covarfn</CODE> which specifies the type of the covariance function,
+and returns a data structure <CODE>net</CODE>. The parameters are set to zero.
+
+<p>The fields in <CODE>net</CODE> are
+<PRE>
+  type = 'gp'
+  nin = number of inputs
+  nout = number of outputs: always 1
+  nwts = total number of weights and covariance function parameters
+  bias = logarithm of constant offset in covariance function
+  noise = logarithm of output noise variance
+  inweights = logarithm of inverse length scale for each input 
+  covarfn = string describing the covariance function:
+      'sqexp'
+      'ratquad'
+  fpar = covariance function specific parameters (1 for squared exponential,
+   2 for rational quadratic)
+  trin = training input data (initially empty)
+  trtargets = training target data (initially empty)
+</PRE>
+
+
+<p><CODE>net = gp(nin, covarfn, prior)</CODE> sets a Gaussian prior on the
+parameters of the model. <CODE>prior</CODE> must contain the fields
+<CODE>pr_mean</CODE> and <CODE>pr_variance</CODE>.  If <CODE>pr_mean</CODE> is a scalar,
+then the Gaussian is assumed to be isotropic and the additional fields
+<CODE>net.pr_mean</CODE> and <CODE>pr_variance</CODE> are set.  Otherwise, 
+the Gaussian prior has a mean
+defined by a column vector of parameters <CODE>prior.pr_mean</CODE> and
+covariance defined by a column vector of parameters <CODE>prior.pr_variance</CODE>.
+Each element of <CODE>prmean</CODE> corresponds to a separate group of parameters, which
+need not be mutually exclusive. The membership of the groups is defined
+by the matrix <CODE>prior.index</CODE> in which the columns correspond to the elements of
+<CODE>prmean</CODE>. Each column has one element for each weight in the matrix,
+in the order defined by the function <CODE>gppak</CODE>, and each element
+is 1 or 0 according to whether the parameter is a member of the
+corresponding group or not.  The additional field <CODE>net.index</CODE> is set
+in this case.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gppak.htm">gppak</a></CODE>, <CODE><a href="gpunpak.htm">gpunpak</a></CODE>, <CODE><a href="gpfwd.htm">gpfwd</a></CODE>, <CODE><a href="gperr.htm">gperr</a></CODE>, <CODE><a href="gpcovar.htm">gpcovar</a></CODE>, <CODE><a href="gpgrad.htm">gpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gpcovar.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gpcovar
+</title>
+</head>
+<body>
+<H1> gpcovar
+</H1>
+<h2>
+Purpose
+</h2>
+Calculate the covariance for a Gaussian Process.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+cov = gpcovar(net, x)
+[cov, covf] = gpcovar(net, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>cov = gpcovar(net, x)</CODE> takes 
+a Gaussian Process data structure <CODE>net</CODE> together with
+a matrix <CODE>x</CODE> of input vectors, and computes the covariance
+matrix <CODE>cov</CODE>.  The inverse of this matrix is used when calculating
+the mean and variance of the predictions made by <CODE>net</CODE>.
+
+<p><CODE>[cov, covf] = gpcovar(net, x)</CODE> also generates the covariance
+matrix due to the covariance function specified by <CODE>net.covarfn</CODE>
+as calculated by <CODE>gpcovarf</CODE>.
+
+<p><h2>
+Example
+</h2>
+In the following example, the inverse covariance matrix is calculated
+for a set of training inputs <CODE>x</CODE> and is then
+passed to <CODE>gpfwd</CODE> so that predictions (with mean <CODE>ytest</CODE> and
+variance <CODE>sigsq</CODE>) can be made for the test inputs
+<CODE>xtest</CODE>.
+<PRE>
+
+cninv = inv(gpcovar(net, x)); 
+[ytest, sigsq] = gpfwd(net, xtest, cninv);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gp.htm">gp</a></CODE>, <CODE><a href="gppak.htm">gppak</a></CODE>, <CODE><a href="gpunpak.htm">gpunpak</a></CODE>, <CODE><a href="gpcovarp.htm">gpcovarp</a></CODE>, <CODE><a href="gpcovarf.htm">gpcovarf</a></CODE>, <CODE><a href="gpfwd.htm">gpfwd</a></CODE>, <CODE><a href="gperr.htm">gperr</a></CODE>, <CODE><a href="gpgrad.htm">gpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gpcovarf.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gpcovarf
+</title>
+</head>
+<body>
+<H1> gpcovarf
+</H1>
+<h2>
+Purpose
+</h2>
+Calculate the covariance function for a Gaussian Process.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+covf = gpcovarf(net, x1, x2)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>covf = gpcovarf(net, x1, x2)</CODE> takes 
+a Gaussian Process data structure <CODE>net</CODE> together with
+two matrices <CODE>x1</CODE> and <CODE>x2</CODE> of input vectors, 
+and computes the matrix of the covariance function values
+<CODE>covf</CODE>.  
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gp.htm">gp</a></CODE>, <CODE><a href="gpcovar.htm">gpcovar</a></CODE>, <CODE><a href="gpcovarp.htm">gpcovarp</a></CODE>, <CODE><a href="gperr.htm">gperr</a></CODE>, <CODE><a href="gpgrad.htm">gpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gpcovarp.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gpcovarp
+</title>
+</head>
+<body>
+<H1> gpcovarp
+</H1>
+<h2>
+Purpose
+</h2>
+Calculate the prior covariance for a Gaussian Process.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+covp = gpcovarp(net, x1, x2)
+[covp, covf] = gpcovarp(net, x1, x2)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>covp = gpcovarp(net, x1, x2)</CODE> takes 
+a Gaussian Process data structure <CODE>net</CODE> together with
+two matrices <CODE>x1</CODE> and <CODE>x2</CODE> of input vectors, 
+and computes the matrix of the prior covariance.  This is
+the function component of the covariance plus the exponential of the bias
+term.  
+
+<p><CODE>[covp, covf] = gpcovarp(net, x1, x2)</CODE> also returns the function
+component of the covariance.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gp.htm">gp</a></CODE>, <CODE><a href="gpcovar.htm">gpcovar</a></CODE>, <CODE><a href="gpcovarf.htm">gpcovarf</a></CODE>, <CODE><a href="gperr.htm">gperr</a></CODE>, <CODE><a href="gpgrad.htm">gpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gperr.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gperr
+</title>
+</head>
+<body>
+<H1> gperr
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate error function for Gaussian Process.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+edata = gperr(net, x, t)
+[e, edata, eprior] = gperr(net, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>e = gperr(net, x, t)</CODE> takes a Gaussian Process data structure <CODE>net</CODE> together 
+with a matrix <CODE>x</CODE> of input vectors and a matrix <CODE>t</CODE> of target
+vectors, and evaluates the error function <CODE>e</CODE>. Each row
+of <CODE>x</CODE> corresponds to one input vector and each row of <CODE>t</CODE>
+corresponds to one target vector.
+
+<p><CODE>[e, edata, eprior] = gperr(net, x, t)</CODE> additionally returns the
+data and hyperprior components of the error, assuming a Gaussian
+prior on the weights with mean and variance parameters <CODE>prmean</CODE> and
+<CODE>prvariance</CODE> taken from the network data structure <CODE>net</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gp.htm">gp</a></CODE>, <CODE><a href="gpcovar.htm">gpcovar</a></CODE>, <CODE><a href="gpfwd.htm">gpfwd</a></CODE>, <CODE><a href="gpgrad.htm">gpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gpfwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gpfwd
+</title>
+</head>
+<body>
+<H1> gpfwd
+</H1>
+<h2>
+Purpose
+</h2>
+Forward propagation through Gaussian Process.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+y = gpfwd(net, x)
+[y, sigsq] = gpfwd(net, x)
+[y, sigsq] = gpfwd(net, x, cninv)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>y = gpfwd(net, x)</CODE> takes a Gaussian Process data structure <CODE>net</CODE> 
+together 
+with a matrix <CODE>x</CODE> of input vectors, and forward propagates the inputs
+through the model to generate a matrix <CODE>y</CODE> of output
+vectors.  Each row of <CODE>x</CODE> corresponds to one input vector and each
+row of <CODE>y</CODE> corresponds to one output vector.  This assumes that the
+training data (both inputs and targets) has been stored in <CODE>net</CODE> by
+a call to <CODE>gpinit</CODE>; these are needed to compute the training
+data covariance matrix.
+
+<p><CODE>[y, sigsq] = gpfwd(net, x)</CODE> also generates a column vector <CODE>sigsq</CODE> of
+conditional variances (or squared error bars) where each value corresponds to a pattern.
+
+<p><CODE>[y, sigsq] = gpfwd(net, x, cninv)</CODE> uses the pre-computed inverse covariance
+matrix <CODE>cninv</CODE> in the forward propagation.  This increases efficiency if
+several calls to <CODE>gpfwd</CODE> are made.  
+
+<p><h2>
+Example
+</h2>
+The following code creates a Gaussian Process, trains it, and then plots the
+predictions on a test set with one standard deviation error bars:
+<PRE>
+
+net = gp(1, 'sqexp');
+net = gpinit(net, x, t);
+net = netopt(net, options, x, t, 'scg');
+[pred, sigsq] = gpfwd(net, xtest);
+plot(xtest, pred, '-k');
+hold on
+plot(xtest, pred+sqrt(sigsq), '-b', xtest, pred-sqrt(sigsq), '-b');
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gp.htm">gp</a></CODE>, <CODE><a href="demgp.htm">demgp</a></CODE>, <CODE><a href="gpinit.htm">gpinit</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gpgrad.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gpgrad
+</title>
+</head>
+<body>
+<H1> gpgrad
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate error gradient for Gaussian Process.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+g = gpgrad(net, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = gpgrad(net, x, t)</CODE> takes a Gaussian Process data structure <CODE>net</CODE> together 
+with a matrix <CODE>x</CODE> of input vectors and a matrix <CODE>t</CODE> of target
+vectors, and evaluates the error gradient <CODE>g</CODE>. Each row
+of <CODE>x</CODE> corresponds to one input vector and each row of <CODE>t</CODE>
+corresponds to one target vector.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gp.htm">gp</a></CODE>, <CODE><a href="gpcovar.htm">gpcovar</a></CODE>, <CODE><a href="gpfwd.htm">gpfwd</a></CODE>, <CODE><a href="gperr.htm">gperr</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gpinit.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gpinit
+</title>
+</head>
+<body>
+<H1> gpinit
+</H1>
+<h2>
+Purpose
+</h2>
+Initialise Gaussian Process model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = gpinit(net, trin, trtargets, prior)
+net = gpinit(net, trin, trtargets, prior)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = gpinit(net, trin, trtargets)</CODE> takes a Gaussian Process data structure <CODE>net</CODE> 
+together 
+with a matrix <CODE>trin</CODE> of training input vectors and a matrix <CODE>trtargets</CODE> of 
+training target
+vectors, and stores them in <CODE>net</CODE>. These datasets are required if
+the corresponding inverse covariance matrix is not supplied to <CODE>gpfwd</CODE>.
+This is important if the data structure is saved and then reloaded before
+calling <CODE>gpfwd</CODE>.
+Each row
+of <CODE>trin</CODE> corresponds to one input vector and each row of <CODE>trtargets</CODE>
+corresponds to one target vector.
+
+<p><CODE>net = gpinit(net, trin, trtargets, prior)</CODE> additionally initialises the
+parameters in <CODE>net</CODE> from the <CODE>prior</CODE> data structure which contains the
+mean and variance of the Gaussian distribution which is sampled from.
+
+<p><h2>
+Example
+</h2>
+Suppose that a Gaussian Process model is created and trained with input data <CODE>x</CODE>
+and targets <CODE>t</CODE>:
+<PRE>
+
+net = gp(2, 'sqexp');
+net = gpinit(net, x, t);
+% Train the network
+save 'gp.net' net;
+</PRE>
+
+Another Matlab program can now read in the network and make predictions on a data set
+<CODE>testin</CODE>:
+<PRE>
+
+load 'gp.net';
+pred = gpfwd(net, testin);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gp.htm">gp</a></CODE>, <CODE><a href="gpfwd.htm">gpfwd</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gppak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gppak
+</title>
+</head>
+<body>
+<H1> gppak
+</H1>
+<h2>
+Purpose
+</h2>
+Combines GP hyperparameters into one vector.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+hp = gppak(net)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>hp = gppak(net)</CODE> takes a Gaussian Process data structure <CODE>net</CODE> and 
+combines the hyperparameters into a single row vector <CODE>hp</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gp.htm">gp</a></CODE>, <CODE><a href="gpunpak.htm">gpunpak</a></CODE>, <CODE><a href="gpfwd.htm">gpfwd</a></CODE>, <CODE><a href="gperr.htm">gperr</a></CODE>, <CODE><a href="gpgrad.htm">gpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gpunpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gpunpak
+</title>
+</head>
+<body>
+<H1> gpunpak
+</H1>
+<h2>
+Purpose
+</h2>
+Separates hyperparameter vector into components. 
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = gpunpak(net, hp)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = gpunpak(net, hp)</CODE> takes an Gaussian Process data structure <CODE>net</CODE> and 
+a hyperparameter vector <CODE>hp</CODE>, and returns a Gaussian Process data structure 
+identical to
+the input model, except that the covariance bias
+<CODE>bias</CODE>, output noise <CODE>noise</CODE>, the input weight vector
+<CODE>inweights</CODE> and the vector of covariance function specific parameters
+ <CODE>fpar</CODE> have all
+been set to the corresponding elements of <CODE>hp</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gp.htm">gp</a></CODE>, <CODE><a href="gppak.htm">gppak</a></CODE>, <CODE><a href="gpfwd.htm">gpfwd</a></CODE>, <CODE><a href="gperr.htm">gperr</a></CODE>, <CODE><a href="gpgrad.htm">gpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gradchek.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gradchek
+</title>
+</head>
+<body>
+<H1> gradchek
+</H1>
+<h2>
+Purpose
+</h2>
+Checks a user-defined gradient function using finite differences.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+gradchek(w, func, grad)
+[gradient, delta] = gradchek(w, func, grad)
+gradchek(w, func, grad, p1, p2, ...)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+This function is intended as a utility for other netlab functions
+(particularly optimisation functions) to use.  It enables the user
+to check whether a gradient calculation has been correctly implmented
+for a given function.
+<CODE>gradchek(w, func, grad)</CODE> checks how accurate the gradient 
+<CODE>grad</CODE> of a function <CODE>func</CODE> is at a parameter vector <CODE>x</CODE>.  
+A central
+difference formula with step size 1.0e-6 is used, and the results
+for both gradient function and finite difference approximation are
+printed.
+The optional return value <CODE>gradient</CODE> is the gradient calculated
+using the function <CODE>grad</CODE> and the return value <CODE>delta</CODE> is the
+difference between the functional and finite difference methods of
+calculating the graident.
+
+<p><CODE>gradchek(x, func, grad, p1, p2, ...)</CODE> allows additional arguments
+to be passed to <CODE>func</CODE> and <CODE>grad</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="conjgrad.htm">conjgrad</a></CODE>, <CODE><a href="graddesc.htm">graddesc</a></CODE>, <CODE><a href="hmc.htm">hmc</a></CODE>, <CODE><a href="olgd.htm">olgd</a></CODE>, <CODE><a href="quasinew.htm">quasinew</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/graddesc.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,104 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual graddesc
+</title>
+</head>
+<body>
+<H1> graddesc
+</H1>
+<h2>
+Purpose
+</h2>
+Gradient descent optimization.
+
+<p><h2>
+Description
+</h2>
+<CODE>[x, options, flog, pointlog] = graddesc(f, x, options, gradf)</CODE> uses 
+batch gradient descent to find a local minimum of the function 
+<CODE>f(x)</CODE> whose gradient is given by <CODE>gradf(x)</CODE>. A log of the function values
+after each cycle is (optionally) returned in <CODE>errlog</CODE>, and a log
+of the points visited is (optionally) returned in <CODE>pointlog</CODE>.
+
+<p>Note that <CODE>x</CODE> is a row vector
+and <CODE>f</CODE> returns a scalar value. 
+The point at which <CODE>f</CODE> has a local minimum
+is returned as <CODE>x</CODE>.  The function value at that point is returned
+in <CODE>options(8)</CODE>.
+
+<p><CODE>graddesc(f, x, options, gradf, p1, p2, ...)</CODE> allows 
+additional arguments to be passed to <CODE>f()</CODE> and <CODE>gradf()</CODE>. 
+
+<p>The optional parameters have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values; also logs error 
+values in the return argument <CODE>errlog</CODE>, and the points visited
+in the return argument <CODE>pointslog</CODE>. If <CODE>options(1)</CODE> is set to 0,
+then only warning messages are displayed.  If <CODE>options(1)</CODE> is -1,
+then nothing is displayed.
+
+<p><CODE>options(2)</CODE> is the absolute precision required for the value
+of <CODE>x</CODE> at the solution.  If the absolute difference between
+the values of <CODE>x</CODE> between two successive steps is less than
+<CODE>options(2)</CODE>, then this condition is satisfied.
+
+<p><CODE>options(3)</CODE> is a measure of the precision required of the objective
+function at the solution.  If the absolute difference between the
+objective function values between two successive steps is less than
+<CODE>options(3)</CODE>, then this condition is satisfied.
+Both this and the previous condition must be
+satisfied for termination.
+
+<p><CODE>options(7)</CODE> determines the line minimisation method used.  If it
+is set to 1 then a line minimiser is used (in the direction of the negative
+gradient).  If it is 0 (the default), then each parameter update
+is a fixed multiple (the learning rate)
+of the negative gradient added to a fixed multiple (the momentum) of
+the previous parameter update.
+
+<p><CODE>options(9)</CODE> should be set to 1 to check the user defined gradient 
+function <CODE>gradf</CODE> with <CODE>gradchek</CODE>.  This is carried out at
+the initial parameter vector <CODE>x</CODE>.
+
+<p><CODE>options(10)</CODE> returns the total number of function evaluations (including
+those in any line searches).
+
+<p><CODE>options(11)</CODE> returns the total number of gradient evaluations.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations; default 100.
+
+<p><CODE>options(15)</CODE> is the precision in parameter space of the line search;
+default <CODE>foptions(2)</CODE>.
+
+<p><CODE>options(17)</CODE> is the momentum; default 0.5.  It should be scaled by the
+inverse of the number of data points.
+
+<p><CODE>options(18)</CODE> is the learning rate; default 0.01.  It should be
+scaled by the inverse of the number of data points.
+
+<p><h2>
+Examples
+</h2>
+An example of how this function can be used to train a neural network is:
+<PRE>
+
+options = zeros(1, 18);
+options(17) = 0.1/size(x, 1);
+net = netopt(net, options, x, t, 'graddesc');
+</PRE>
+
+Note how the learning rate is scaled by the number of data points.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="conjgrad.htm">conjgrad</a></CODE>, <CODE><a href="linemin.htm">linemin</a></CODE>, <CODE><a href="olgd.htm">olgd</a></CODE>, <CODE><a href="minbrack.htm">minbrack</a></CODE>, <CODE><a href="quasinew.htm">quasinew</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gsamp.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gsamp
+</title>
+</head>
+<body>
+<H1> gsamp
+</H1>
+<h2>
+Purpose
+</h2>
+Sample from a Gaussian distribution.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+x = gsamp(mu, covar, nsamp)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>x = gsamp(mu, covar, nsamp)</CODE> generates a sample of size <CODE>nsamp</CODE>
+from a <CODE>d</CODE>-dimensional Gaussian distribution. The Gaussian density
+has mean vector <CODE>mu</CODE> and covariance matrix <CODE>covar</CODE>, and the
+matrix <CODE>x</CODE> has <CODE>nsamp</CODE> rows in which each row represents a
+<CODE>d</CODE>-dimensional sample vector.  
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gauss.htm">gauss</a></CODE>, <CODE><a href="demgauss.htm">demgauss</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gtm.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gtm
+</title>
+</head>
+<body>
+<H1> gtm
+</H1>
+<h2>
+Purpose
+</h2>
+Create a Generative Topographic Map.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = gtm(dimlatent, nlatent, dimdata, ncentres, rbfunc)
+net = gtm(dimlatent, nlatent, dimdata, ncentres, rbfunc, prior)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>net = gtm(dimlatent, nlatent, dimdata, ncentres, rbfunc)</CODE>,
+takes the dimension of the latent space <CODE>dimlatent</CODE>, the
+number of data points sampled in the latent space <CODE>nlatent</CODE>, the
+dimension of the data space <CODE>dimdata</CODE>, the number of centres in the
+RBF model <CODE>ncentres</CODE>, the activation function for the RBF
+<CODE>rbfunc</CODE>
+and returns a data structure <CODE>net</CODE>. The parameters in the
+RBF and GMM sub-models are set by calls to the corresponding creation routines
+<CODE>rbf</CODE> and <CODE>gmm</CODE>.
+
+<p>The fields in <CODE>net</CODE> are
+<PRE>
+  type = 'gtm'
+  nin = dimension of data space
+  dimlatent = dimension of latent space
+  rbfnet = RBF network data structure
+  gmmnet = GMM data structure
+  X = sample of latent points
+</PRE>
+
+
+<p><CODE>net = gtm(dimlatent, nlatent, dimdata, ncentres, rbfunc, prior)</CODE>,
+ sets a Gaussian zero mean prior on the
+parameters of the RBF model. <CODE>prior</CODE> must be a scalar and represents
+the inverse variance of the prior distribution.  This gives rise to
+a weight decay term in the error function.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gtmfwd.htm">gtmfwd</a></CODE>, <CODE><a href="gtmpost.htm">gtmpost</a></CODE>, <CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="gmm.htm">gmm</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gtmem.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,88 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gtmem
+</title>
+</head>
+<body>
+<H1> gtmem
+</H1>
+<h2>
+Purpose
+</h2>
+EM algorithm for Generative Topographic Mapping.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+[net, options, errlog] = gtmem(net, t, options)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>[net, options, errlog] = gtmem(net, t, options)</CODE> uses the Expectation
+Maximization algorithm to estimate the parameters of
+a GTM defined by a data structure <CODE>net</CODE>.
+The matrix <CODE>t</CODE> represents the data whose expectation
+is maximized, with each row corresponding to a vector.  It is assumed
+that the latent data <CODE>net.X</CODE> has been set following a call to
+<CODE>gtminit</CODE>, for example.
+  
+The optional parameters have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values; also logs error 
+values in the return argument <CODE>errlog</CODE>.
+If <CODE>options(1)</CODE> is set to 0,
+then only warning messages are displayed.  If <CODE>options(1)</CODE> is -1,
+then nothing is displayed.
+
+<p><CODE>options(3)</CODE> is a measure of the absolute precision required of the error
+function at the solution. If the change in log likelihood between two steps of
+the EM algorithm is less than this value, then the function terminates.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations; default 100.
+
+<p>The optional return value <CODE>options</CODE> contains the final error value 
+(i.e. data log likelihood) in
+<CODE>options(8)</CODE>.  
+
+<p><h2>
+Examples
+</h2>
+The following code fragment sets up a GTM, initialises
+the latent data sample and RBF
+parameters from the data, sets the options and trains the model.
+<PRE>
+
+% Create and initialise GTM model
+net = gtm(latentdim, nlatent, datadim, numrbfcentres, ...
+   'gaussian', 0.1);
+
+<p>options = foptions;
+options(1) = -1;
+options(7) = 1;    % Set width factor of RBF
+net = gtminit(net, options, data, 'regular', latentshape, [4 4]);
+
+<p>options = foptions;
+options(14) = 30;
+options(1) = 1;
+[net, options] = gtmem(net, data, options);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gtm.htm">gtm</a></CODE>, <CODE><a href="gtminit.htm">gtminit</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gtmfwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gtmfwd
+</title>
+</head>
+<body>
+<H1> gtmfwd
+</H1>
+<h2>
+Purpose
+</h2>
+Forward propagation through GTM.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+mix = gtmfwd(net)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>mix = gtmfwd(net)</CODE> takes a GTM
+structure <CODE>net</CODE>, and forward
+propagates the latent data sample <CODE>net.X</CODE> through the GTM to generate
+the structure
+<CODE>mix</CODE> which represents the Gaussian mixture model in data space.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gtm.htm">gtm</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gtminit.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gtminit
+</title>
+</head>
+<body>
+<H1> gtminit
+</H1>
+<h2>
+Purpose
+</h2>
+Initialise the weights and latent sample in a GTM.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = gtminit(net, options, data, samptype)
+net = gtminit(net, options, data, samptype, lsampsize, rbfsampsize)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = gtminit(net, options, data, samptype)</CODE> takes a GTM <CODE>net</CODE>
+and generates a sample of latent data points and sets the centres (and
+widths if appropriate) of
+<CODE>net.rbfnet</CODE>. 
+
+<p>If the <CODE>samptype</CODE> is <CODE>'regular'</CODE>, then regular grids of latent
+data points and RBF centres are created.  The dimension of the latent data 
+space must be
+1 or 2.  For one-dimensional latent space, the <CODE>lsampsize</CODE> parameter
+gives the number of latent points and the <CODE>rbfsampsize</CODE> parameter
+gives the number of RBF centres.  For a two-dimensional latent space,
+these parameters must be vectors of length 2 with the number of points
+in each of the x and y directions to create a rectangular grid.  The
+widths of the RBF basis functions are set by a call to <CODE>rbfsetfw</CODE>
+passing <CODE>options(7)</CODE> as the scaling parameter.
+
+<p>If the <CODE>samptype</CODE> is <CODE>'uniform'</CODE> or <CODE>'gaussian'</CODE> then the
+latent data is found by sampling from a uniform or
+Gaussian distribution correspondingly.  The RBF basis function parameters
+are set
+by a call to <CODE>rbfsetbf</CODE> with the <CODE>data</CODE> parameter
+as dataset and the <CODE>options</CODE> vector.
+
+<p>Finally, the output layer weights of the RBF are initialised by
+mapping the mean of the latent variable to the mean of the target variable,
+and the L-dimensional latent variale variance to the variance of the
+targets along the first L principal components.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gtm.htm">gtm</a></CODE>, <CODE><a href="gtmem.htm">gtmem</a></CODE>, <CODE><a href="pca.htm">pca</a></CODE>, <CODE><a href="rbfsetbf.htm">rbfsetbf</a></CODE>, <CODE><a href="rbfsetfw.htm">rbfsetfw</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gtmlmean.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gtmlmean
+</title>
+</head>
+<body>
+<H1> gtmlmean
+</H1>
+<h2>
+Purpose
+</h2>
+Mean responsibility for data in a GTM.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+means = gtmlmean(net, data)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>means = gtmlmean(net, data)</CODE> takes a GTM
+structure <CODE>net</CODE>, and computes the means of the responsibility 
+distributions for each data point in <CODE>data</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gtm.htm">gtm</a></CODE>, <CODE><a href="gtmpost.htm">gtmpost</a></CODE>, <CODE><a href="gtmlmode.htm">gtmlmode</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gtmlmode.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gtmlmode
+</title>
+</head>
+<body>
+<H1> gtmlmode
+</H1>
+<h2>
+Purpose
+</h2>
+Mode responsibility for data in a GTM.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+modes = gtmlmode(net, data)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>modes = gtmlmode(net, data)</CODE> takes a GTM
+structure <CODE>net</CODE>, and computes the modes of the responsibility 
+distributions for each data point in <CODE>data</CODE>.  These will always lie
+at one of the latent space sample points <CODE>net.X</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gtm.htm">gtm</a></CODE>, <CODE><a href="gtmpost.htm">gtmpost</a></CODE>, <CODE><a href="gtmlmean.htm">gtmlmean</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gtmmag.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gtmmag
+</title>
+</head>
+<body>
+<H1> gtmmag
+</H1>
+<h2>
+Purpose
+</h2>
+Magnification factors for a GTM
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+mags = gtmmag(net, latentdata)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>mags = gtmmag(net, latentdata)</CODE> takes a GTM
+structure <CODE>net</CODE>, and computes the magnification factors
+for each point the latent space contained in <CODE>latentdata</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gtm.htm">gtm</a></CODE>, <CODE><a href="gtmpost.htm">gtmpost</a></CODE>, <CODE><a href="gtmlmean.htm">gtmlmean</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gtmpost.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gtmpost
+</title>
+</head>
+<body>
+<H1> gtmpost
+</H1>
+<h2>
+Purpose
+</h2>
+Latent space responsibility for data in a GTM.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+post = gtmpost(net, data)
+[post, a] = gtmpost(net, data)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>post = gtmpost(net, data)</CODE> takes a GTM
+structure <CODE>net</CODE>, and computes the  responsibility at each latent space
+sample point <CODE>net.X</CODE>
+for each data point in <CODE>data</CODE>.
+
+<p><CODE>[post, a] = gtmpost(net, data)</CODE> also returns the activations
+<CODE>a</CODE> of the GMM <CODE>net.gmmnet</CODE> as computed by <CODE>gmmpost</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gtm.htm">gtm</a></CODE>, <CODE><a href="gtmem.htm">gtmem</a></CODE>, <CODE><a href="gtmlmean.htm">gtmlmean</a></CODE>, <CODE><a href="gmlmode.htm">gmlmode</a></CODE>, <CODE><a href="gmmprob.htm">gmmprob</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/gtmprob.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual gtmprob
+</title>
+</head>
+<body>
+<H1> gtmprob
+</H1>
+<h2>
+Purpose
+</h2>
+Probability for data under a GTM.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+prob = gtmprob(net, data)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>prob = gtmprob(net, data)</CODE> takes a GTM
+structure <CODE>net</CODE>, and computes the probability of each point in the
+dataset <CODE>data</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gtm.htm">gtm</a></CODE>, <CODE><a href="gtmem.htm">gtmem</a></CODE>, <CODE><a href="gtmlmean.htm">gtmlmean</a></CODE>, <CODE><a href="gtmlmode.htm">gtmlmode</a></CODE>, <CODE><a href="gtmpost.htm">gtmpost</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/hbayes.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual hbayes
+</title>
+</head>
+<body>
+<H1> hbayes
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate Hessian of Bayesian error function for network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+h = hbayes(net, hdata)
+[h, hdata] = hbayes(net, hdata)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>h = hbayes(net, hdata)</CODE> takes a network data structure <CODE>net</CODE> together 
+the data contribution to the Hessian
+for a set of inputs and targets.
+It returns the regularised Hessian using any zero mean Gaussian priors
+on the weights defined in
+<CODE>net</CODE>.  In addition, if a <CODE>mask</CODE> is defined in <CODE>net</CODE>, then
+the entries in <CODE>h</CODE> that correspond to weights with a 0 in the
+mask are removed.
+
+<p><CODE>[h, hdata] = hbayes(net, hdata)</CODE> additionally returns the
+data  component of the Hessian.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gbayes.htm">gbayes</a></CODE>, <CODE><a href="glmhess.htm">glmhess</a></CODE>, <CODE><a href="mlphess.htm">mlphess</a></CODE>, <CODE><a href="rbfhess.htm">rbfhess</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/hesschek.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual hesschek
+</title>
+</head>
+<body>
+<H1> hesschek
+</H1>
+<h2>
+Purpose
+</h2>
+Use central differences to confirm correct evaluation of Hessian matrix.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+hesschek(net, x, t)
+h = hesschek(net, x, t)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>hesschek(net, x, t)</CODE> takes a network data structure <CODE>net</CODE>, together
+with input and target data matrices <CODE>x</CODE> and <CODE>t</CODE>, and compares
+the evaluation of the Hessian matrix using the function <CODE>nethess</CODE>
+and using central differences with the function <CODE>neterr</CODE>.
+
+<p>The optional return value <CODE>h</CODE> is the Hessian computed using
+<CODE>nethess</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="nethess.htm">nethess</a></CODE>, <CODE><a href="neterr.htm">neterr</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/hintmat.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual hintmat
+</title>
+</head>
+<body>
+<H1> hintmat
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluates the coordinates of the patches for a Hinton diagram.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+[xvals, yvals, color] = hintmat(w)</PRE>
+ 
+
+<p><h2>
+Description
+</h2>
+<PRE>
+[xvals, yvals, color] = hintmat(w)</PRE>
+ 
+takes a matrix <CODE>w</CODE> and
+returns coordinates <CODE>xvals, yvals</CODE> for the patches comrising the
+Hinton diagram, together with a vector <CODE>color</CODE> labelling the color
+(black or white) of the corresponding elements according to their
+sign.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="hinton.htm">hinton</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/hinton.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual hinton
+</title>
+</head>
+<body>
+<H1> hinton
+</H1>
+<h2>
+Purpose
+</h2>
+Plot Hinton diagram for a weight matrix.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+hinton(w)
+h = hinton(w)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>hinton(w)</CODE> takes a matrix <CODE>w</CODE>
+and plots the Hinton diagram.
+
+<p><CODE>h = hinton(net)</CODE> also returns the figure handle <CODE>h</CODE>
+which can be used, for instance, to delete the 
+figure when it is no longer needed.
+
+<p>To print the figure correctly in black and white, you should call
+<CODE>set(h, 'InvertHardCopy', 'off')</CODE> before printing.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demhint.htm">demhint</a></CODE>, <CODE><a href="hintmat.htm">hintmat</a></CODE>, <CODE><a href="mlphint.htm">mlphint</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/histp.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual histp
+</title>
+</head>
+<body>
+<H1> histp
+</H1>
+<h2>
+Purpose
+</h2>
+Histogram estimate of 1-dimensional probability distribution.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+h = histp(x, xmin, xmax, nbins)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>histp(x, xmin, xmax, nbins)</CODE> takes a column vector <CODE>x</CODE> 
+of data values and generates a normalized histogram plot of the 
+distribution. The histogram has <CODE>nbins</CODE> bins lying in the
+range <CODE>xmin</CODE> to <CODE>xmax</CODE>. 
+
+<p><CODE>h = histp(...)</CODE> returns a vector of patch handles. 
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demgauss.htm">demgauss</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/hmc.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,129 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual hmc
+</title>
+</head>
+<body>
+<H1> hmc
+</H1>
+<h2>
+Purpose
+</h2>
+Hybrid Monte Carlo sampling.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+samples = hmc(f, x, options, gradf)
+samples = hmc(f, x, options, gradf, P1, P2, ...)
+[samples, energies, diagn] = hmc(f, x, options, gradf)
+s = hmc('state')
+hmc('state', s)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>samples = hmc(f, x, options, gradf)</CODE> uses a 
+hybrid Monte Carlo algorithm to sample from the distribution <CODE>p ~ exp(-f)</CODE>,
+where <CODE>f</CODE> is the first argument to <CODE>hmc</CODE>.
+The Markov chain starts at the point <CODE>x</CODE>, and the function <CODE>gradf</CODE>
+is the gradient of the `energy' function <CODE>f</CODE>.
+
+<p><CODE>hmc(f, x, options, gradf, p1, p2, ...)</CODE> allows
+additional arguments to be passed to <CODE>f()</CODE> and <CODE>gradf()</CODE>. 
+
+<p><CODE>[samples, energies, diagn] = hmc(f, x, options, gradf)</CODE> also returns
+a log of the energy values (i.e. negative log probabilities) for the
+samples in <CODE>energies</CODE> and <CODE>diagn</CODE>, a structure containing
+diagnostic information (position, momentum and
+acceptance threshold) for each step of the chain in <CODE>diagn.pos</CODE>,
+<CODE>diagn.mom</CODE> and
+<CODE>diagn.acc</CODE> respectively.  All candidate states (including rejected ones)
+are stored in <CODE>diagn.pos</CODE>.
+
+<p><CODE>[samples, energies, diagn] = hmc(f, x, options, gradf)</CODE> also returns the
+<CODE>energies</CODE> (i.e. negative log probabilities) corresponding to the samples. 
+The <CODE>diagn</CODE> structure contains three fields:
+
+<p><CODE>pos</CODE> the position vectors of the dynamic process.
+
+<p><CODE>mom</CODE> the momentum vectors of the dynamic process.
+
+<p><CODE>acc</CODE> the acceptance thresholds.
+
+<p><CODE>s = hmc('state')</CODE> returns a state structure that contains the state of the
+two random number generators <CODE>rand</CODE> and <CODE>randn</CODE> and the momentum of 
+the dynamic process.  These are contained in fields 
+<CODE>randstate</CODE>, <CODE>randnstate</CODE>
+and <CODE>mom</CODE> respectively.  The momentum state is
+only used for a persistent momentum update.
+
+<p><CODE>hmc('state', s)</CODE> resets the state to <CODE>s</CODE>.  If <CODE>s</CODE> is an integer,
+then it is passed to <CODE>rand</CODE> and <CODE>randn</CODE> and the momentum variable
+is randomised.  If <CODE>s</CODE> is a structure returned by <CODE>hmc('state')</CODE> then
+it resets the generator to exactly the same state.
+
+<p>The optional parameters in the <CODE>options</CODE> vector have the following
+interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display the energy values and rejection
+threshold at each step of the Markov chain. If the value is 2, then the
+position vectors at each step are also displayed.
+
+<p><CODE>options(5)</CODE> is set to 1 if momentum persistence is used; default 0, for
+complete replacement of momentum variables.
+
+<p><CODE>options(7)</CODE> defines the trajectory length (i.e. the number of leap-frog
+steps at each iteration).  Minimum value 1.
+
+<p><CODE>options(9)</CODE> is set to 1 to check the user defined gradient function.
+
+<p><CODE>options(14)</CODE> is the number of samples retained from the Markov chain;
+default 100.
+
+<p><CODE>options(15)</CODE> is the number of samples omitted from the start of the
+chain; default 0.
+
+<p><CODE>options(17)</CODE> defines the momentum used when a persistent update of
+(leap-frog) momentum is used.  This is bounded to the interval [0, 1).
+
+<p><CODE>options(18)</CODE> is the step size used in leap-frogs; default 1/trajectory
+length.
+
+<p><h2>
+Examples
+</h2>
+The following code fragment samples from the posterior distribution of
+weights for a neural network.
+<PRE>
+
+w = mlppak(net);
+[samples, energies] = hmc('neterr', w, options, 'netgrad', net, x, t);
+</PRE>
+
+
+<p><h2>
+Algorithm
+</h2>
+
+The algroithm follows the procedure outlined in Radford Neal's technical
+report CRG-TR-93-1  from the University of Toronto. The stochastic update of
+momenta samples from a zero mean unit covariance gaussian. 
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="metrop.htm">metrop</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/index.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,537 @@
+<html>
+<head>
+<title>
+NETLAB Reference Documentation 
+</title>
+</head>
+<body>
+<H1> NETLAB Online Reference Documentation </H1>
+Welcome to the NETLAB online reference documentation.
+The NETLAB simulation software is designed to provide all the tools necessary
+for principled and theoretically well founded application development. The
+NETLAB library is based on the approach and techniques described in <I>Neural
+Networks for Pattern Recognition </I>(Bishop, 1995). The library includes software
+implementations of a wide range of data analysis techniques, many of which are
+not widely available, and are rarely, if ever, included in standard neural
+network simulation packages.
+<p>The online reference documentation provides direct hypertext links to specific Netlab function descriptions.
+<p>If you have any comments or problems to report, please contact Ian Nabney (<a href="mailto:i.t.nabney@aston.ac.uk"><tt>i.t.nabney@aston.ac.uk</tt></a>) or Christopher Bishop (<a href="mailto:c.m.bishop@aston.ac.uk"><tt>c.m.bishop@aston.ac.uk</tt></a>).<H1> Index
+</H1>
+An alphabetic list of functions in Netlab.<p>
+<DL>
+<DT>
+<CODE><a href="conffig.htm">conffig</a></CODE><DD>
+ Display a confusion matrix. 
+<DT>
+<CODE><a href="confmat.htm">confmat</a></CODE><DD>
+ Compute a confusion matrix. 
+<DT>
+<CODE><a href="conjgrad.htm">conjgrad</a></CODE><DD>
+ Conjugate gradients optimization. 
+<DT>
+<CODE><a href="consist.htm">consist</a></CODE><DD>
+ Check that arguments are consistent. 
+<DT>
+<CODE><a href="convertoldnet.htm">convertoldnet</a></CODE><DD>
+ Convert pre-2.3 release MLP and MDN nets to new format 
+<DT>
+<CODE><a href="datread.htm">datread</a></CODE><DD>
+ Read data from an ascii file. 
+<DT>
+<CODE><a href="datwrite.htm">datwrite</a></CODE><DD>
+ Write data to ascii file. 
+<DT>
+<CODE><a href="dem2ddat.htm">dem2ddat</a></CODE><DD>
+ Generates two dimensional data for demos. 
+<DT>
+<CODE><a href="demard.htm">demard</a></CODE><DD>
+ Automatic relevance determination using the MLP. 
+<DT>
+<CODE><a href="demev1.htm">demev1</a></CODE><DD>
+ Demonstrate Bayesian regression for the MLP. 
+<DT>
+<CODE><a href="demev2.htm">demev2</a></CODE><DD>
+ Demonstrate Bayesian classification for the MLP. 
+<DT>
+<CODE><a href="demev3.htm">demev3</a></CODE><DD>
+ Demonstrate Bayesian regression for the RBF. 
+<DT>
+<CODE><a href="demgauss.htm">demgauss</a></CODE><DD>
+ Demonstrate sampling from Gaussian distributions. 
+<DT>
+<CODE><a href="demglm1.htm">demglm1</a></CODE><DD>
+ Demonstrate simple classification using a generalized linear model. 
+<DT>
+<CODE><a href="demglm2.htm">demglm2</a></CODE><DD>
+ Demonstrate simple classification using a generalized linear model. 
+<DT>
+<CODE><a href="demgmm1.htm">demgmm1</a></CODE><DD>
+ Demonstrate density modelling with a Gaussian mixture model. 
+<DT>
+<CODE><a href="demgmm3.htm">demgmm3</a></CODE><DD>
+ Demonstrate density modelling with a Gaussian mixture model. 
+<DT>
+<CODE><a href="demgmm4.htm">demgmm4</a></CODE><DD>
+ Demonstrate density modelling with a Gaussian mixture model. 
+<DT>
+<CODE><a href="demgmm5.htm">demgmm5</a></CODE><DD>
+ Demonstrate density modelling with a PPCA mixture model. 
+<DT>
+<CODE><a href="demgp.htm">demgp</a></CODE><DD>
+ Demonstrate simple regression using a Gaussian Process. 
+<DT>
+<CODE><a href="demgpard.htm">demgpard</a></CODE><DD>
+ Demonstrate ARD using a Gaussian Process. 
+<DT>
+<CODE><a href="demgpot.htm">demgpot</a></CODE><DD>
+ Computes the gradient of the negative log likelihood for a mixture model. 
+<DT>
+<CODE><a href="demgtm1.htm">demgtm1</a></CODE><DD>
+ Demonstrate EM for GTM. 
+<DT>
+<CODE><a href="demgtm2.htm">demgtm2</a></CODE><DD>
+ Demonstrate GTM for visualisation. 
+<DT>
+<CODE><a href="demhint.htm">demhint</a></CODE><DD>
+ Demonstration of Hinton diagram for 2-layer feed-forward network. 
+<DT>
+<CODE><a href="demhmc1.htm">demhmc1</a></CODE><DD>
+ Demonstrate Hybrid Monte Carlo sampling on mixture of two Gaussians. 
+<DT>
+<CODE><a href="demhmc2.htm">demhmc2</a></CODE><DD>
+ Demonstrate Bayesian regression with Hybrid Monte Carlo sampling. 
+<DT>
+<CODE><a href="demhmc3.htm">demhmc3</a></CODE><DD>
+ Demonstrate Bayesian regression with Hybrid Monte Carlo sampling. 
+<DT>
+<CODE><a href="demkmean.htm">demkmean</a></CODE><DD>
+ Demonstrate simple clustering model trained with K-means. 
+<DT>
+<CODE><a href="demknn1.htm">demknn1</a></CODE><DD>
+ Demonstrate nearest neighbour classifier. 
+<DT>
+<CODE><a href="demmdn1.htm">demmdn1</a></CODE><DD>
+ Demonstrate fitting a multi-valued function using a Mixture Density Network. 
+<DT>
+<CODE><a href="demmet1.htm">demmet1</a></CODE><DD>
+ Demonstrate Markov Chain Monte Carlo sampling on a Gaussian. 
+<DT>
+<CODE><a href="demmlp1.htm">demmlp1</a></CODE><DD>
+ Demonstrate simple regression using a multi-layer perceptron 
+<DT>
+<CODE><a href="demmlp2.htm">demmlp2</a></CODE><DD>
+ Demonstrate simple classification using a multi-layer perceptron 
+<DT>
+<CODE><a href="demnlab.htm">demnlab</a></CODE><DD>
+ A front-end Graphical User Interface to the demos 
+<DT>
+<CODE><a href="demns1.htm">demns1</a></CODE><DD>
+ Demonstrate Neuroscale for visualisation. 
+<DT>
+<CODE><a href="demolgd1.htm">demolgd1</a></CODE><DD>
+ Demonstrate simple MLP optimisation with on-line gradient descent 
+<DT>
+<CODE><a href="demopt1.htm">demopt1</a></CODE><DD>
+ Demonstrate different optimisers on Rosenbrock's function. 
+<DT>
+<CODE><a href="dempot.htm">dempot</a></CODE><DD>
+ Computes the negative log likelihood for a mixture model. 
+<DT>
+<CODE><a href="demprgp.htm">demprgp</a></CODE><DD>
+ Demonstrate sampling from a Gaussian Process prior. 
+<DT>
+<CODE><a href="demprior.htm">demprior</a></CODE><DD>
+ Demonstrate sampling from a multi-parameter Gaussian prior. 
+<DT>
+<CODE><a href="demrbf1.htm">demrbf1</a></CODE><DD>
+ Demonstrate simple regression using a radial basis function network. 
+<DT>
+<CODE><a href="demsom1.htm">demsom1</a></CODE><DD>
+ Demonstrate SOM for visualisation. 
+<DT>
+<CODE><a href="demtrain.htm">demtrain</a></CODE><DD>
+ Demonstrate training of MLP network. 
+<DT>
+<CODE><a href="dist2.htm">dist2</a></CODE><DD>
+ Calculates squared distance between two sets of points. 
+<DT>
+<CODE><a href="eigdec.htm">eigdec</a></CODE><DD>
+ Sorted eigendecomposition 
+<DT>
+<CODE><a href="errbayes.htm">errbayes</a></CODE><DD>
+ Evaluate Bayesian error function for network. 
+<DT>
+<CODE><a href="evidence.htm">evidence</a></CODE><DD>
+ Re-estimate hyperparameters using evidence approximation. 
+<DT>
+<CODE><a href="fevbayes.htm">fevbayes</a></CODE><DD>
+ Evaluate Bayesian regularisation for network forward propagation. 
+<DT>
+<CODE><a href="gauss.htm">gauss</a></CODE><DD>
+ Evaluate a Gaussian distribution. 
+<DT>
+<CODE><a href="gbayes.htm">gbayes</a></CODE><DD>
+ Evaluate gradient of Bayesian error function for network. 
+<DT>
+<CODE><a href="glm.htm">glm</a></CODE><DD>
+ Create a generalized linear model. 
+<DT>
+<CODE><a href="glmderiv.htm">glmderiv</a></CODE><DD>
+ Evaluate derivatives of GLM outputs with respect to weights. 
+<DT>
+<CODE><a href="glmerr.htm">glmerr</a></CODE><DD>
+ Evaluate error function for generalized linear model. 
+<DT>
+<CODE><a href="glmevfwd.htm">glmevfwd</a></CODE><DD>
+ Forward propagation with evidence for GLM 
+<DT>
+<CODE><a href="glmfwd.htm">glmfwd</a></CODE><DD>
+ Forward propagation through generalized linear model. 
+<DT>
+<CODE><a href="glmgrad.htm">glmgrad</a></CODE><DD>
+ Evaluate gradient of error function for generalized linear model. 
+<DT>
+<CODE><a href="glmhess.htm">glmhess</a></CODE><DD>
+ Evaluate the Hessian matrix for a generalised linear model. 
+<DT>
+<CODE><a href="glminit.htm">glminit</a></CODE><DD>
+ Initialise the weights in a generalized linear model. 
+<DT>
+<CODE><a href="glmpak.htm">glmpak</a></CODE><DD>
+ Combines weights and biases into one weights vector. 
+<DT>
+<CODE><a href="glmtrain.htm">glmtrain</a></CODE><DD>
+ Specialised training of generalized linear model 
+<DT>
+<CODE><a href="glmunpak.htm">glmunpak</a></CODE><DD>
+ Separates weights vector into weight and bias matrices. 
+<DT>
+<CODE><a href="gmm.htm">gmm</a></CODE><DD>
+ Creates a Gaussian mixture model with specified architecture. 
+<DT>
+<CODE><a href="gmmactiv.htm">gmmactiv</a></CODE><DD>
+ Computes the activations of a Gaussian mixture model. 
+<DT>
+<CODE><a href="gmmem.htm">gmmem</a></CODE><DD>
+ EM algorithm for Gaussian mixture model. 
+<DT>
+<CODE><a href="gmminit.htm">gmminit</a></CODE><DD>
+ Initialises Gaussian mixture model from data 
+<DT>
+<CODE><a href="gmmpak.htm">gmmpak</a></CODE><DD>
+ Combines all the parameters in a Gaussian mixture model into one vector. 
+<DT>
+<CODE><a href="gmmpost.htm">gmmpost</a></CODE><DD>
+ Computes the class posterior probabilities of a Gaussian mixture model. 
+<DT>
+<CODE><a href="gmmprob.htm">gmmprob</a></CODE><DD>
+ Computes the data probability for a Gaussian mixture model. 
+<DT>
+<CODE><a href="gmmsamp.htm">gmmsamp</a></CODE><DD>
+ Sample from a Gaussian mixture distribution. 
+<DT>
+<CODE><a href="gmmunpak.htm">gmmunpak</a></CODE><DD>
+ Separates a vector of Gaussian mixture model parameters into its components. 
+<DT>
+<CODE><a href="gp.htm">gp</a></CODE><DD>
+ Create a Gaussian Process. 
+<DT>
+<CODE><a href="gpcovar.htm">gpcovar</a></CODE><DD>
+ Calculate the covariance for a Gaussian Process. 
+<DT>
+<CODE><a href="gpcovarf.htm">gpcovarf</a></CODE><DD>
+ Calculate the covariance function for a Gaussian Process. 
+<DT>
+<CODE><a href="gpcovarp.htm">gpcovarp</a></CODE><DD>
+ Calculate the prior covariance for a Gaussian Process. 
+<DT>
+<CODE><a href="gperr.htm">gperr</a></CODE><DD>
+ Evaluate error function for Gaussian Process. 
+<DT>
+<CODE><a href="gpfwd.htm">gpfwd</a></CODE><DD>
+ Forward propagation through Gaussian Process. 
+<DT>
+<CODE><a href="gpgrad.htm">gpgrad</a></CODE><DD>
+ Evaluate error gradient for Gaussian Process. 
+<DT>
+<CODE><a href="gpinit.htm">gpinit</a></CODE><DD>
+ Initialise Gaussian Process model. 
+<DT>
+<CODE><a href="gppak.htm">gppak</a></CODE><DD>
+ Combines GP hyperparameters into one vector. 
+<DT>
+<CODE><a href="gpunpak.htm">gpunpak</a></CODE><DD>
+ Separates hyperparameter vector into components. 
+<DT>
+<CODE><a href="gradchek.htm">gradchek</a></CODE><DD>
+ Checks a user-defined gradient function using finite differences. 
+<DT>
+<CODE><a href="graddesc.htm">graddesc</a></CODE><DD>
+ Gradient descent optimization. 
+<DT>
+<CODE><a href="gsamp.htm">gsamp</a></CODE><DD>
+ Sample from a Gaussian distribution. 
+<DT>
+<CODE><a href="gtm.htm">gtm</a></CODE><DD>
+ Create a Generative Topographic Map. 
+<DT>
+<CODE><a href="gtmem.htm">gtmem</a></CODE><DD>
+ EM algorithm for Generative Topographic Mapping. 
+<DT>
+<CODE><a href="gtmfwd.htm">gtmfwd</a></CODE><DD>
+ Forward propagation through GTM. 
+<DT>
+<CODE><a href="gtminit.htm">gtminit</a></CODE><DD>
+ Initialise the weights and latent sample in a GTM. 
+<DT>
+<CODE><a href="gtmlmean.htm">gtmlmean</a></CODE><DD>
+ Mean responsibility for data in a GTM. 
+<DT>
+<CODE><a href="gtmlmode.htm">gtmlmode</a></CODE><DD>
+ Mode responsibility for data in a GTM. 
+<DT>
+<CODE><a href="gtmmag.htm">gtmmag</a></CODE><DD>
+ Magnification factors for a GTM 
+<DT>
+<CODE><a href="gtmpost.htm">gtmpost</a></CODE><DD>
+ Latent space responsibility for data in a GTM. 
+<DT>
+<CODE><a href="gtmprob.htm">gtmprob</a></CODE><DD>
+ Probability for data under a GTM. 
+<DT>
+<CODE><a href="hbayes.htm">hbayes</a></CODE><DD>
+ Evaluate Hessian of Bayesian error function for network. 
+<DT>
+<CODE><a href="hesschek.htm">hesschek</a></CODE><DD>
+ Use central differences to confirm correct evaluation of Hessian matrix. 
+<DT>
+<CODE><a href="hintmat.htm">hintmat</a></CODE><DD>
+ Evaluates the coordinates of the patches for a Hinton diagram. 
+<DT>
+<CODE><a href="hinton.htm">hinton</a></CODE><DD>
+ Plot Hinton diagram for a weight matrix. 
+<DT>
+<CODE><a href="histp.htm">histp</a></CODE><DD>
+ Histogram estimate of 1-dimensional probability distribution. 
+<DT>
+<CODE><a href="hmc.htm">hmc</a></CODE><DD>
+ Hybrid Monte Carlo sampling. 
+<DT>
+<CODE><a href="kmeans.htm">kmeans</a></CODE><DD>
+ Trains a k means cluster model. 
+<DT>
+<CODE><a href="knn.htm">knn</a></CODE><DD>
+ Creates a K-nearest-neighbour classifier. 
+<DT>
+<CODE><a href="knnfwd.htm">knnfwd</a></CODE><DD>
+ Forward propagation through a K-nearest-neighbour classifier. 
+<DT>
+<CODE><a href="linef.htm">linef</a></CODE><DD>
+ Calculate function value along a line. 
+<DT>
+<CODE><a href="linemin.htm">linemin</a></CODE><DD>
+ One dimensional minimization. 
+<DT>
+<CODE><a href="maxitmess.htm">maxitmess</a></CODE><DD>
+ Create a standard error message when training reaches max. iterations. 
+<DT>
+<CODE><a href="mdn.htm">mdn</a></CODE><DD>
+ Creates a Mixture Density Network with specified architecture. 
+<DT>
+<CODE><a href="mdn2gmm.htm">mdn2gmm</a></CODE><DD>
+ Converts an MDN mixture data structure to array of GMMs. 
+<DT>
+<CODE><a href="mdndist2.htm">mdndist2</a></CODE><DD>
+ Calculates squared distance between centres of Gaussian kernels and data 
+<DT>
+<CODE><a href="mdnerr.htm">mdnerr</a></CODE><DD>
+ Evaluate error function for Mixture Density Network. 
+<DT>
+<CODE><a href="mdnfwd.htm">mdnfwd</a></CODE><DD>
+ Forward propagation through Mixture Density Network. 
+<DT>
+<CODE><a href="mdngrad.htm">mdngrad</a></CODE><DD>
+ Evaluate gradient of error function for Mixture Density Network. 
+<DT>
+<CODE><a href="mdninit.htm">mdninit</a></CODE><DD>
+ Initialise the weights in a Mixture Density Network. 
+<DT>
+<CODE><a href="mdnpak.htm">mdnpak</a></CODE><DD>
+ Combines weights and biases into one weights vector. 
+<DT>
+<CODE><a href="mdnpost.htm">mdnpost</a></CODE><DD>
+ Computes the posterior probability for each MDN mixture component. 
+<DT>
+<CODE><a href="mdnprob.htm">mdnprob</a></CODE><DD>
+ Computes the data probability likelihood for an MDN mixture structure. 
+<DT>
+<CODE><a href="mdnunpak.htm">mdnunpak</a></CODE><DD>
+ Separates weights vector into weight and bias matrices. 
+<DT>
+<CODE><a href="metrop.htm">metrop</a></CODE><DD>
+ Markov Chain Monte Carlo sampling with Metropolis algorithm. 
+<DT>
+<CODE><a href="minbrack.htm">minbrack</a></CODE><DD>
+ Bracket a minimum of a function of one variable. 
+<DT>
+<CODE><a href="mlp.htm">mlp</a></CODE><DD>
+ Create a 2-layer feedforward network. 
+<DT>
+<CODE><a href="mlpbkp.htm">mlpbkp</a></CODE><DD>
+ Backpropagate gradient of error function for 2-layer network. 
+<DT>
+<CODE><a href="mlpderiv.htm">mlpderiv</a></CODE><DD>
+ Evaluate derivatives of network outputs with respect to weights. 
+<DT>
+<CODE><a href="mlperr.htm">mlperr</a></CODE><DD>
+ Evaluate error function for 2-layer network. 
+<DT>
+<CODE><a href="mlpevfwd.htm">mlpevfwd</a></CODE><DD>
+ Forward propagation with evidence for MLP 
+<DT>
+<CODE><a href="mlpfwd.htm">mlpfwd</a></CODE><DD>
+ Forward propagation through 2-layer network. 
+<DT>
+<CODE><a href="mlpgrad.htm">mlpgrad</a></CODE><DD>
+ Evaluate gradient of error function for 2-layer network. 
+<DT>
+<CODE><a href="mlphdotv.htm">mlphdotv</a></CODE><DD>
+ Evaluate the product of the data Hessian with a vector. 
+<DT>
+<CODE><a href="mlphess.htm">mlphess</a></CODE><DD>
+ Evaluate the Hessian matrix for a multi-layer perceptron network. 
+<DT>
+<CODE><a href="mlphint.htm">mlphint</a></CODE><DD>
+ Plot Hinton diagram for 2-layer feed-forward network. 
+<DT>
+<CODE><a href="mlpinit.htm">mlpinit</a></CODE><DD>
+ Initialise the weights in a 2-layer feedforward network. 
+<DT>
+<CODE><a href="mlppak.htm">mlppak</a></CODE><DD>
+ Combines weights and biases into one weights vector. 
+<DT>
+<CODE><a href="mlpprior.htm">mlpprior</a></CODE><DD>
+ Create Gaussian prior for mlp. 
+<DT>
+<CODE><a href="mlptrain.htm">mlptrain</a></CODE><DD>
+ Utility to train an MLP network for demtrain 
+<DT>
+<CODE><a href="mlpunpak.htm">mlpunpak</a></CODE><DD>
+ Separates weights vector into weight and bias matrices. 
+<DT>
+<CODE><a href="netderiv.htm">netderiv</a></CODE><DD>
+ Evaluate derivatives of network outputs by weights generically. 
+<DT>
+<CODE><a href="neterr.htm">neterr</a></CODE><DD>
+ Evaluate network error function for generic optimizers 
+<DT>
+<CODE><a href="netevfwd.htm">netevfwd</a></CODE><DD>
+ Generic forward propagation with evidence for network 
+<DT>
+<CODE><a href="netgrad.htm">netgrad</a></CODE><DD>
+ Evaluate network error gradient for generic optimizers 
+<DT>
+<CODE><a href="nethess.htm">nethess</a></CODE><DD>
+ Evaluate network Hessian 
+<DT>
+<CODE><a href="netinit.htm">netinit</a></CODE><DD>
+ Initialise the weights in a network. 
+<DT>
+<CODE><a href="netopt.htm">netopt</a></CODE><DD>
+ Optimize the weights in a network model. 
+<DT>
+<CODE><a href="netpak.htm">netpak</a></CODE><DD>
+ Combines weights and biases into one weights vector. 
+<DT>
+<CODE><a href="netunpak.htm">netunpak</a></CODE><DD>
+ Separates weights vector into weight and bias matrices. 
+<DT>
+<CODE><a href="olgd.htm">olgd</a></CODE><DD>
+ On-line gradient descent optimization. 
+<DT>
+<CODE><a href="pca.htm">pca</a></CODE><DD>
+ Principal Components Analysis 
+<DT>
+<CODE><a href="plotmat.htm">plotmat</a></CODE><DD>
+ Display a matrix. 
+<DT>
+<CODE><a href="ppca.htm">ppca</a></CODE><DD>
+ Probabilistic Principal Components Analysis 
+<DT>
+<CODE><a href="quasinew.htm">quasinew</a></CODE><DD>
+ Quasi-Newton optimization. 
+<DT>
+<CODE><a href="rbf.htm">rbf</a></CODE><DD>
+ Creates an RBF network with specified architecture 
+<DT>
+<CODE><a href="rbfbkp.htm">rbfbkp</a></CODE><DD>
+ Backpropagate gradient of error function for RBF network. 
+<DT>
+<CODE><a href="rbfderiv.htm">rbfderiv</a></CODE><DD>
+ Evaluate derivatives of RBF network outputs with respect to weights. 
+<DT>
+<CODE><a href="rbferr.htm">rbferr</a></CODE><DD>
+ Evaluate error function for RBF network. 
+<DT>
+<CODE><a href="rbfevfwd.htm">rbfevfwd</a></CODE><DD>
+ Forward propagation with evidence for RBF 
+<DT>
+<CODE><a href="rbffwd.htm">rbffwd</a></CODE><DD>
+ Forward propagation through RBF network with linear outputs. 
+<DT>
+<CODE><a href="rbfgrad.htm">rbfgrad</a></CODE><DD>
+ Evaluate gradient of error function for RBF network. 
+<DT>
+<CODE><a href="rbfhess.htm">rbfhess</a></CODE><DD>
+ Evaluate the Hessian matrix for RBF network. 
+<DT>
+<CODE><a href="rbfjacob.htm">rbfjacob</a></CODE><DD>
+ Evaluate derivatives of RBF network outputs with respect to inputs. 
+<DT>
+<CODE><a href="rbfpak.htm">rbfpak</a></CODE><DD>
+ Combines all the parameters in an RBF network into one weights vector. 
+<DT>
+<CODE><a href="rbfprior.htm">rbfprior</a></CODE><DD>
+ Create Gaussian prior and output layer mask for RBF. 
+<DT>
+<CODE><a href="rbfsetbf.htm">rbfsetbf</a></CODE><DD>
+ Set basis functions of RBF from data. 
+<DT>
+<CODE><a href="rbfsetfw.htm">rbfsetfw</a></CODE><DD>
+ Set basis function widths of RBF. 
+<DT>
+<CODE><a href="rbftrain.htm">rbftrain</a></CODE><DD>
+ Two stage training of RBF network. 
+<DT>
+<CODE><a href="rbfunpak.htm">rbfunpak</a></CODE><DD>
+ Separates a vector of RBF weights into its components. 
+<DT>
+<CODE><a href="rosegrad.htm">rosegrad</a></CODE><DD>
+ Calculate gradient of Rosenbrock's function. 
+<DT>
+<CODE><a href="rosen.htm">rosen</a></CODE><DD>
+ Calculate Rosenbrock's function. 
+<DT>
+<CODE><a href="scg.htm">scg</a></CODE><DD>
+ Scaled conjugate gradient optimization. 
+<DT>
+<CODE><a href="som.htm">som</a></CODE><DD>
+ Creates a Self-Organising Map. 
+<DT>
+<CODE><a href="somfwd.htm">somfwd</a></CODE><DD>
+ Forward propagation through a Self-Organising Map. 
+<DT>
+<CODE><a href="sompak.htm">sompak</a></CODE><DD>
+ Combines node weights into one weights matrix. 
+<DT>
+<CODE><a href="somtrain.htm">somtrain</a></CODE><DD>
+ Kohonen training algorithm for SOM. 
+<DT>
+<CODE><a href="somunpak.htm">somunpak</a></CODE><DD>
+ Replaces node weights in SOM. 
+</DL>
+
+<hr>
+<p>Copyright (c) Christopher M Bishop, Ian T Nabney (1996, 1997)
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/kmeans.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,89 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual kmeans
+</title>
+</head>
+<body>
+<H1> kmeans
+</H1>
+<h2>
+Purpose
+</h2>
+Trains a k means cluster model.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+centres = kmeans(centres, data, options)
+[centres, options] = kmeans(centres, data, options)
+[centres, options, post, errlog] = kmeans(centres, data, options)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>centres = kmeans(centres, data, options)</CODE>
+uses the batch K-means algorithm to set the centres of a cluster model.
+The matrix <CODE>data</CODE> represents the data
+which is being clustered, with each row corresponding to a vector.
+The sum of squares error function is used.  The point at which
+a local minimum is achieved is returned as <CODE>centres</CODE>.  The
+error value at that point is returned in <CODE>options(8)</CODE>.
+
+<p><CODE>[centres, options, post, errlog] = kmeans(centres, data, options)</CODE>
+also returns the cluster number (in a one-of-N encoding) for each data
+point in <CODE>post</CODE> and a log of the error values after each cycle in
+<CODE>errlog</CODE>.
+  
+The optional parameters have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values; also logs error 
+values in the return argument <CODE>errlog</CODE>.
+If <CODE>options(1)</CODE> is set to 0,
+then only warning messages are displayed.  If <CODE>options(1)</CODE> is -1,
+then nothing is displayed.
+
+<p><CODE>options(2)</CODE> is a measure of the absolute precision required for the value
+of <CODE>centres</CODE> at the solution.  If the absolute difference between
+the values of <CODE>centres</CODE> between two successive steps is less than
+<CODE>options(2)</CODE>, then this condition is satisfied.
+
+<p><CODE>options(3)</CODE> is a measure of the precision required of the error
+function at the solution.  If the absolute difference between the
+error functions between two successive steps is less than
+<CODE>options(3)</CODE>, then this condition is satisfied.
+Both this and the previous condition must be
+satisfied for termination.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations; default 100.
+
+<p><h2>
+Example
+</h2>
+<CODE>kmeans</CODE> can be used to initialise the centres of a Gaussian 
+mixture model that is then trained with the EM algorithm.
+<PRE>
+
+[priors, centres, var] = gmmunpak(p, md);
+centres = kmeans(centres, data, options);
+p = gmmpak(priors, centres, var);
+p = gmmem(p, md, data, options);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmminit.htm">gmminit</a></CODE>, <CODE><a href="gmmem.htm">gmmem</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/knn.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,54 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual knn
+</title>
+</head>
+<body>
+<H1> knn
+</H1>
+<h2>
+Purpose
+</h2>
+Creates a K-nearest-neighbour classifier.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+net = knn(nin, nout, k, tr_in, tr_targets)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = knn(nin, nout, k, tr_in, tr_targets)</CODE> creates a KNN model <CODE>net</CODE>
+with input dimension <CODE>nin</CODE>, output dimension <CODE>nout</CODE> and <CODE>k</CODE>
+neighbours.  The training data is also stored in the data structure and the
+targets are assumed to be using a 1-of-N coding.
+
+<p>The fields in <CODE>net</CODE> are
+<PRE>
+
+  type = 'knn'
+  nin = number of inputs
+  nout = number of outputs
+  tr_in = training input data
+  tr_targets = training target data
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="kmeans.htm">kmeans</a></CODE>, <CODE><a href="knnfwd.htm">knnfwd</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/knnfwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual knnfwd
+</title>
+</head>
+<body>
+<H1> knnfwd
+</H1>
+<h2>
+Purpose
+</h2>
+Forward propagation through a K-nearest-neighbour classifier.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+[y, l] = knnfwd(net, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>[y, l] = knnfwd(net, x)</CODE> takes a matrix <CODE>x</CODE>
+of input vectors (one vector per row) 
+ and uses the <CODE>k</CODE>-nearest-neighbour rule on the training data contained
+in <CODE>net</CODE> to 
+produce 
+a matrix <CODE>y</CODE> of outputs and a matrix <CODE>l</CODE> of classification
+labels.
+The nearest neighbours are determined using Euclidean distance.
+The <CODE>ij</CODE>th entry of <CODE>y</CODE> counts the number of occurrences that
+an example from class <CODE>j</CODE> is among the <CODE>k</CODE> closest training
+examples to example <CODE>i</CODE> from <CODE>x</CODE>.
+The matrix <CODE>l</CODE> contains the predicted class labels
+as an index 1..N, not as 1-of-N coding.
+
+<p><h2>
+Example
+</h2>
+<PRE>
+
+net = knn(size(xtrain, 2), size(t_train, 2), 3, xtrain, t_train);
+y = knnfwd(net, xtest);
+conffig(y, t_test);
+</PRE>
+
+Creates a 3 nearest neighbour model <CODE>net</CODE> and then applies it to
+the data <CODE>xtest</CODE>.  The results are plotted as a confusion matrix with
+<CODE>conffig</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="kmeans.htm">kmeans</a></CODE>, <CODE><a href="knn.htm">knn</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/linef.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual linef
+</title>
+</head>
+<body>
+<H1> linef
+</H1>
+<h2>
+Purpose
+</h2>
+Calculate function value along a line.
+
+<p><h2>
+Description
+</h2>
+<CODE>linef(lambda, fn, x, d)</CODE> calculates the value of the function
+<CODE>fn</CODE> at the point <CODE>x+lambda*d</CODE>.  Here <CODE>x</CODE> is a row vector
+and <CODE>lambda</CODE> is a scalar.
+
+<p><CODE>linef(lambda, fn, x, d, p1, p2, ...)</CODE> allows additional
+arguments to be passed to <CODE>fn()</CODE>.  
+This function is used for convenience in some of the optimisation routines.
+
+<p><h2>
+Examples
+</h2>
+An example of 
+the use of this function can be found in the function <CODE>linemin</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gradchek.htm">gradchek</a></CODE>, <CODE><a href="linemin.htm">linemin</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/linemin.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual linemin
+</title>
+</head>
+<body>
+<H1> linemin
+</H1>
+<h2>
+Purpose
+</h2>
+One dimensional minimization.
+
+<p><h2>
+Description
+</h2>
+<CODE>[x, options] = linemin(f, pt, dir, fpt, options)</CODE> uses Brent's
+algorithm to find the minimum of the function <CODE>f(x)</CODE> along the
+line <CODE>dir</CODE> through the point <CODE>pt</CODE>.  The function value at the
+starting point is <CODE>fpt</CODE>.  The point at which <CODE>f</CODE> has a local minimum
+is returned as <CODE>x</CODE>.  The function value at that point is returned
+in <CODE>options(8)</CODE>.
+
+<p><CODE>linemin(f, pt, dir, fpt, options, p1, p2, ...)</CODE> allows 
+additional arguments to be passed to <CODE>f()</CODE>.
+
+<p>The optional parameters have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values.
+
+<p><CODE>options(2)</CODE> is a measure of the absolute precision required for the value
+of <CODE>x</CODE> at the solution.
+
+<p><CODE>options(3)</CODE> is a measure of the precision required of the objective
+function at the solution.  Both this and the previous condition must be
+satisfied for termination.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations; default 100.
+
+<p><h2>
+Examples
+</h2>
+An example of the use of this function to find the minimum of a function
+<CODE>f</CODE> in the direction <CODE>sd</CODE> can be found in <CODE>conjgrad</CODE>
+<PRE>
+
+x = linemin(f, xold, sd, fold, lineoptions);
+</PRE>
+
+
+<p><h2>
+Algorithm
+</h2>
+
+Brent's algorithm uses a mixture of quadratic interpolation and golden
+section search to find the minimum of a function of a single variable once
+it has been bracketed (which is done with <CODE>minbrack</CODE>).  This is adapted
+to minimize a function along a line.
+This implementation
+is based on that in Numerical Recipes.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="conjgrad.htm">conjgrad</a></CODE>, <CODE><a href="minbrack.htm">minbrack</a></CODE>, <CODE><a href="quasinew.htm">quasinew</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/maxitmess.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual maxitmess
+</title>
+</head>
+<body>
+<H1> maxitmess
+</H1>
+<h2>
+Purpose
+</h2>
+Create a standard error message when training reaches max. iterations.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+s = maxitmess
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>s = maxitmess</CODE> returns a standard string that it used by training 
+algorithms when the maximum number of iterations (as specified in 
+<CODE>options(14)</CODE> is reached.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="conjgrad.htm">conjgrad</a></CODE>, <CODE><a href="glmtrain.htm">glmtrain</a></CODE>, <CODE><a href="gmmem.htm">gmmem</a></CODE>, <CODE><a href="graddesc.htm">graddesc</a></CODE>, <CODE><a href="gtmem.htm">gtmem</a></CODE>, <CODE><a href="kmeans.htm">kmeans</a></CODE>, <CODE><a href="olgd.htm">olgd</a></CODE>, <CODE><a href="quasinew.htm">quasinew</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mdn.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,84 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mdn
+</title>
+</head>
+<body>
+<H1> mdn
+</H1>
+<h2>
+Purpose
+</h2>
+Creates a Mixture Density Network with specified architecture.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = mdn(nin, nhidden, ncentres, dimtarget)
+net = mdn(nin, nhidden, ncentres, dimtarget, mixtype, ...
+	prior, beta)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = mdn(nin, nhidden, ncentres, dimtarget)</CODE> takes the number of 
+inputs, 
+hidden units for a 2-layer feed-forward 
+network and the number of centres and target dimension for the 
+mixture model whose parameters are set from the outputs of the neural network.
+The fifth argument <CODE>mixtype</CODE> is used to define the type of mixture
+model.  (Currently there is only one type supported: a mixture of Gaussians with
+a single covariance parameter for each component.) For this model,
+the mixture coefficients are computed from a group of softmax outputs,
+the centres are equal to a group of linear outputs, and the variances are 
+obtained by applying the exponential function to a third group of outputs.
+
+<p>The network is initialised by a call to <CODE>mlp</CODE>, and the arguments
+<CODE>prior</CODE>, and <CODE>beta</CODE> have the same role as for that function.
+Weight initialisation uses the Matlab function <CODE>randn</CODE>
+ and so the seed for the random weight initialization can be 
+set using <CODE>randn('state', s)</CODE> where <CODE>s</CODE> is the seed value.
+A specialised data structure (rather than <CODE>gmm</CODE>)
+is used for the mixture model outputs to improve
+the efficiency of error and gradient calculations in network training.
+The fields are described in <CODE>mdnfwd</CODE> where they are set up.
+
+<p>The fields in <CODE>net</CODE> are
+<PRE>
+  
+  type = 'mdn'
+  nin = number of input variables
+  nout = dimension of target space (not number of network outputs)
+  nwts = total number of weights and biases
+  mdnmixes = data structure for mixture model output
+  mlp = data structure for MLP network
+</PRE>
+
+
+<p><h2>
+Example
+</h2>
+<PRE>
+
+net = mdn(2, 4, 3, 1, 'spherical');
+</PRE>
+
+This creates a Mixture Density Network with 2 inputs and 4 hidden units.
+The mixture model has 3 components and the target space has dimension 1.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mdnfwd.htm">mdnfwd</a></CODE>, <CODE><a href="mdnerr.htm">mdnerr</a></CODE>, <CODE><a href="mdn2gmm.htm">mdn2gmm</a></CODE>, <CODE><a href="mdngrad.htm">mdngrad</a></CODE>, <CODE><a href="mdnpak.htm">mdnpak</a></CODE>, <CODE><a href="mdnunpak.htm">mdnunpak</a></CODE>, <CODE><a href="mlp.htm">mlp</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+<p>David J Evans (1998)
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mdn2gmm.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mdn2gmm
+</title>
+</head>
+<body>
+<H1> mdn2gmm
+</H1>
+<h2>
+Purpose
+</h2>
+Converts an MDN mixture data structure to array of GMMs.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+gmmmixes = mdn2gmm(mdnmixes)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>gmmmixes = mdn2gmm(mdnmixes)</CODE> takes an MDN mixture data structure
+<CODE>mdnmixes</CODE>
+containing three matrices (for priors, centres and variances) where each
+row represents the corresponding parameter values for a different mixture model 
+and creates an array of GMMs.  These can then be used with the standard
+Netlab Gaussian mixture model functions.
+
+<p><h2>
+Example
+</h2>
+<PRE>
+
+mdnmixes = mdnfwd(net, x);
+mixes = mdn2gmm(mdnmixes);
+p = gmmprob(mixes(1), y);
+</PRE>
+
+This creates an array GMM mixture models (one for each data point in
+<CODE>x</CODE>).  The vector <CODE>p</CODE> is then filled with the conditional
+probabilities of the values <CODE>y</CODE> given <CODE>x(1,:)</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="gmm.htm">gmm</a></CODE>, <CODE><a href="mdn.htm">mdn</a></CODE>, <CODE><a href="mdnfwd.htm">mdnfwd</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+<p>David J Evans (1998)
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mdndist2.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mdndist2
+</title>
+</head>
+<body>
+<H1> mdndist2
+</H1>
+<h2>
+Purpose
+</h2>
+Calculates squared distance between centres of Gaussian kernels and data
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+n2 = mdndist2(mixparams, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>n2 = mdndist2(mixparams, t)</CODE> takes takes the centres of the Gaussian 
+contained in
+ <CODE>mixparams</CODE> and the target data matrix, <CODE>t</CODE>, and computes the squared 
+Euclidean distance between them.  If <CODE>t</CODE> has <CODE>m</CODE> rows and <CODE>n</CODE>
+columns, then the <CODE>centres</CODE> field in
+the <CODE>mixparams</CODE> structure should have <CODE>m</CODE> rows and
+<CODE>n*mixparams.ncentres</CODE> columns: the centres in each row relate to
+the corresponding row in <CODE>t</CODE>.
+The result has <CODE>m</CODE> rows and <CODE>mixparams.ncentres</CODE> columns.
+The <CODE>i, j</CODE>th entry is the 
+squared distance from the <CODE>i</CODE>th row of <CODE>x</CODE> to the <CODE>j</CODE>th
+centre in the <CODE>i</CODE>th row of <CODE>mixparams.centres</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mdnfwd.htm">mdnfwd</a></CODE>, <CODE><a href="mdnprob.htm">mdnprob</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+<p>David J Evans (1998)
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mdnerr.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mdnerr
+</title>
+</head>
+<body>
+<H1> mdnerr
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate error function for Mixture Density Network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+e = mdnerr(net, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>e = mdnerr(net, x, t)</CODE> takes a mixture density network data
+structure <CODE>net</CODE>, a matrix <CODE>x</CODE> of input vectors and a matrix
+<CODE>t</CODE> of target vectors, and evaluates the error function
+<CODE>e</CODE>. The error function is the negative log likelihood of the
+target data under the conditional density given by the mixture model
+parameterised by the MLP.  Each row of <CODE>x</CODE> corresponds to one
+input vector and each row of <CODE>t</CODE> corresponds to one target vector.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mdn.htm">mdn</a></CODE>, <CODE><a href="mdnfwd.htm">mdnfwd</a></CODE>, <CODE><a href="mdngrad.htm">mdngrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+<p>David J Evans (1998)
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mdnfwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mdnfwd
+</title>
+</head>
+<body>
+<H1> mdnfwd
+</H1>
+<h2>
+Purpose
+</h2>
+Forward propagation through Mixture Density Network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+mixparams = mdnfwd(net, x)
+[mixparams, y, z] = mdnfwd(net, x)
+[mixparams, y, z, a] = mdnfwd(net, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>mixparams = mdnfwd(net, x)</CODE> takes a mixture density network data
+structure <CODE>net</CODE> and a matrix <CODE>x</CODE> of input vectors, and forward
+propagates the inputs through the network to generate a structure
+<CODE>mixparams</CODE> which contains the parameters of several mixture models.  
+Each row of <CODE>x</CODE> represents
+one input vector and the corresponding row of the matrices in <CODE>mixparams</CODE> 
+represents the parameters of a mixture model for the conditional probability
+of target vectors given the input vector.  This is not represented as an array
+of <CODE>gmm</CODE> structures to improve the efficiency of MDN training.
+
+<p>The fields in <CODE>mixparams</CODE> are
+<PRE>
+
+  type = 'mdnmixes'
+  ncentres = number of mixture components
+  dimtarget = dimension of target space
+  mixcoeffs = mixing coefficients
+  centres = means of Gaussians: stored as one row per pattern
+  covars = covariances of Gaussians
+  nparams = number of parameters
+</PRE>
+
+
+<p><CODE>[mixparams, y, z] = mdnfwd(net, x)</CODE> also generates a matrix <CODE>y</CODE> of
+the outputs of the MLP and a matrix <CODE>z</CODE> of the hidden
+unit activations where each row corresponds to one pattern.
+
+<p><CODE>[mixparams, y, z, a] = mlpfwd(net, x)</CODE> also returns a matrix <CODE>a</CODE> 
+giving the summed inputs to each output unit, where each row 
+corresponds to one pattern.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mdn.htm">mdn</a></CODE>, <CODE><a href="mdn2gmm.htm">mdn2gmm</a></CODE>, <CODE><a href="mdnerr.htm">mdnerr</a></CODE>, <CODE><a href="mdngrad.htm">mdngrad</a></CODE>, <CODE><a href="mlpfwd.htm">mlpfwd</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+<p>David J Evans (1998)
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mdngrad.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mdngrad
+</title>
+</head>
+<body>
+<H1> mdngrad
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate gradient of error function for Mixture Density Network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+g = mdngrad(net, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>g = mdngrad(net, x, t)</CODE> takes a mixture density network data
+structure <CODE>net</CODE>, a matrix <CODE>x</CODE> of input vectors and a matrix
+<CODE>t</CODE> of target vectors, and evaluates the gradient <CODE>g</CODE> of the
+error function with respect to the network weights. The error function
+is negative log likelihood of the target data.  Each row of <CODE>x</CODE>
+corresponds to one input vector and each row of <CODE>t</CODE> corresponds to
+one target vector.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mdn.htm">mdn</a></CODE>, <CODE><a href="mdnfwd.htm">mdnfwd</a></CODE>, <CODE><a href="mdnerr.htm">mdnerr</a></CODE>, <CODE><a href="mdnprob.htm">mdnprob</a></CODE>, <CODE><a href="mlpbkp.htm">mlpbkp</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+<p>David J Evans (1998)
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mdninit.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mdninit
+</title>
+</head>
+<body>
+<H1> mdninit
+</H1>
+<h2>
+Purpose
+</h2>
+Initialise the weights in a Mixture Density Network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = mdninit(net, prior)
+net = mdninit(net, prior, t, options)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>net = mdninit(net, prior)</CODE> takes a Mixture Density Network
+<CODE>net</CODE> and sets the weights and biases by sampling from a Gaussian
+distribution. It calls <CODE>mlpinit</CODE> for the MLP component of <CODE>net</CODE>.
+
+<p><CODE>net = mdninit(net, prior, t, options)</CODE> uses the target data <CODE>t</CODE> to
+initialise the biases for the output units after initialising the 
+other weights as above.  It calls <CODE>gmminit</CODE>, with <CODE>t</CODE> and <CODE>options</CODE>
+as arguments, to obtain a model of the unconditional density of <CODE>t</CODE>.  The
+biases are then set so that <CODE>net</CODE> will output the values in the Gaussian 
+mixture model.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mdn.htm">mdn</a></CODE>, <CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlpinit.htm">mlpinit</a></CODE>, <CODE><a href="gmminit.htm">gmminit</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+<p>David J Evans (1998)
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mdnpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mdnpak
+</title>
+</head>
+<body>
+<H1> mdnpak
+</H1>
+<h2>
+Purpose
+</h2>
+Combines weights and biases into one weights vector.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+w = mdnpak(net)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>w = mdnpak(net)</CODE> takes a mixture density
+network data structure <CODE>net</CODE> and 
+combines the network weights into a single row vector <CODE>w</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mdn.htm">mdn</a></CODE>, <CODE><a href="mdnunpak.htm">mdnunpak</a></CODE>, <CODE><a href="mdnfwd.htm">mdnfwd</a></CODE>, <CODE><a href="mdnerr.htm">mdnerr</a></CODE>, <CODE><a href="mdngrad.htm">mdngrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+<p>David J Evans (1998)
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mdnpost.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mdnpost
+</title>
+</head>
+<body>
+<H1> mdnpost
+</H1>
+<h2>
+Purpose
+</h2>
+Computes the posterior probability for each MDN mixture component.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+post = mdnpost(mixparams, t)
+[post, a] = mdnpost(mixparams, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>post = mdnpost(mixparams, t)</CODE> computes the posterior
+probability <CODE>p(j|t)</CODE> of each
+data vector in <CODE>t</CODE> under the Gaussian mixture model represented by the
+corresponding entries in <CODE>mixparams</CODE>. Each row of <CODE>t</CODE> represents a
+single vector.
+
+<p><CODE>[post, a] = mdnpost(mixparams, t)</CODE> also computes the activations
+<CODE>a</CODE> (i.e. the probability <CODE>p(t|j)</CODE> of the data conditioned on
+each component density) for a Gaussian mixture model.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mdngrad.htm">mdngrad</a></CODE>, <CODE><a href="mdnprob.htm">mdnprob</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+<p>David J Evans (1998)
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mdnprob.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mdnprob
+</title>
+</head>
+<body>
+<H1> mdnprob
+</H1>
+<h2>
+Purpose
+</h2>
+Computes the data probability likelihood for an MDN mixture structure.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+prob = mdnprob(mixparams, t)
+[prob, a] = mdnprob(mixparams, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>prob = mdnprob(mixparams, t)</CODE> computes the probability <CODE>p(t)</CODE> of each
+data vector in <CODE>t</CODE> under the Gaussian mixture model represented by the
+corresponding entries in <CODE>mixparams</CODE>. Each row of <CODE>t</CODE> represents a
+single vector.
+
+<p><CODE>[prob, a] = mdnprob(mixparams, t)</CODE> also computes the activations
+<CODE>a</CODE> (i.e. the probability <CODE>p(t|j)</CODE> of the data conditioned on
+each component density) for a Gaussian mixture model.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mdnerr.htm">mdnerr</a></CODE>, <CODE><a href="mdnpost.htm">mdnpost</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+<p>David J Evans (1998)
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mdnunpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mdnunpak
+</title>
+</head>
+<body>
+<H1> mdnunpak
+</H1>
+<h2>
+Purpose
+</h2>
+Separates weights vector into weight and bias matrices. 
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = mdnunpak(net, w)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = mdnunpak(net, w)</CODE> takes an mdn network data structure <CODE>net</CODE> and 
+a weight vector <CODE>w</CODE>, and returns a network data structure identical to
+the input network, except that the weights in the MLP sub-structure are
+set to the corresponding elements of <CODE>w</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mdn.htm">mdn</a></CODE>, <CODE><a href="mdnpak.htm">mdnpak</a></CODE>, <CODE><a href="mdnfwd.htm">mdnfwd</a></CODE>, <CODE><a href="mdnerr.htm">mdnerr</a></CODE>, <CODE><a href="mdngrad.htm">mdngrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+<p>David J Evans (1998)
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/metrop.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,108 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual metrop
+</title>
+</head>
+<body>
+<H1> metrop
+</H1>
+<h2>
+Purpose
+</h2>
+Markov Chain Monte Carlo sampling with Metropolis algorithm.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+samples = metrop(f, x, options)
+samples = metrop(f, x, options, [], P1, P2, ...)
+[samples, energies, diagn] = metrop(f, x, options)
+s = metrop('state')
+metrop('state', s)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>samples = metrop(f, x, options)</CODE> uses
+the Metropolis algorithm to sample from the distribution
+<CODE>p ~ exp(-f)</CODE>, where <CODE>f</CODE> is the first argument to <CODE>metrop</CODE>.  
+The Markov chain starts at the point <CODE>x</CODE> and each 
+candidate state is picked from a Gaussian proposal distribution and
+accepted or rejected according to the Metropolis criterion.
+
+<p><CODE>samples = metrop(f, x, options, [], p1, p2, ...)</CODE> allows
+additional arguments to be passed to <CODE>f()</CODE>.  The fourth argument is
+ignored, but is included for compatibility with <CODE>hmc</CODE> and the
+optimisers.
+
+<p><CODE>[samples, energies, diagn] = metrop(f, x, options)</CODE> also returns
+a log of the energy values (i.e. negative log probabilities) for the
+samples in <CODE>energies</CODE> and <CODE>diagn</CODE>, a structure containing
+diagnostic information (position and
+acceptance threshold) for each step of the chain in <CODE>diagn.pos</CODE> and
+<CODE>diagn.acc</CODE> respectively.  All candidate states (including rejected
+ones) are stored in <CODE>diagn.pos</CODE>.
+
+<p><CODE>s = metrop('state')</CODE> returns a state structure that contains the
+state of the two random number generators <CODE>rand</CODE> and <CODE>randn</CODE>.
+These are contained in fields
+<CODE>randstate</CODE>, 
+<CODE>randnstate</CODE>.
+
+<p><CODE>metrop('state', s)</CODE> resets the state to <CODE>s</CODE>.  If <CODE>s</CODE> is an integer,
+then it is passed to <CODE>rand</CODE> and <CODE>randn</CODE>.
+If <CODE>s</CODE> is a structure returned by <CODE>metrop('state')</CODE> then
+it resets the generator to exactly the same state.
+
+<p>The optional parameters in the <CODE>options</CODE> vector have the following
+interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display the energy values and rejection
+threshold at each step of the Markov chain. If the value is 2, then the
+position vectors at each step are also displayed.
+
+<p><CODE>options(14)</CODE> is the number of samples retained from the Markov chain;
+default 100. 
+
+<p><CODE>options(15)</CODE> is the number of samples omitted from the start of the
+chain; default 0.
+
+<p><CODE>options(18)</CODE> is the variance of the proposal distribution; default 1.
+
+<p><h2>
+Examples
+</h2>
+The following code fragment samples from the posterior distribution of
+weights for a neural network.
+<PRE>
+
+w = mlppak(net);
+[samples, energies] = metrop('neterr', w, options, 'netgrad', net, x, t);
+</PRE>
+
+
+<p><h2>
+Algorithm
+</h2>
+
+The algorithm follows the procedure outlined in Radford Neal's technical
+report CRG-TR-93-1  from the University of Toronto.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="hmc.htm">hmc</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/minbrack.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual minbrack
+</title>
+</head>
+<body>
+<H1> minbrack
+</H1>
+<h2>
+Purpose
+</h2>
+Bracket a minimum of a function of one variable.
+
+<p><h2>
+Description
+</h2>
+<CODE>brmin, brmid, brmax, numevals] = minbrack(f, a, b, fa)</CODE>
+finds a bracket of three points around a local minimum of
+<CODE>f</CODE>.  The function <CODE>f</CODE> must have a one dimensional domain.
+<CODE>a < b</CODE> is an initial guess at the minimum and maximum points
+of a bracket, but <CODE>minbrack</CODE> will search outside this interval if
+necessary. The bracket consists of three points (in increasing order)
+such that <CODE>f(brmid) < f(brmin)</CODE> and <CODE>f(brmid) < f(brmax)</CODE>.
+<CODE>fa</CODE> is the value of the function at <CODE>a</CODE>: it is included to
+avoid unnecessary function evaluations in the optimization routines.
+The return value <CODE>numevals</CODE> is the number of function evaluations
+in <CODE>minbrack</CODE>.
+
+<p><CODE>minbrack(f, a, b, fa, p1, p2, ...)</CODE> allows additional
+arguments to be passed to <CODE>f</CODE>
+
+<p><h2>
+Examples
+</h2>
+An example of the use of this function to bracket the minimum of a function
+<CODE>f</CODE> in the direction <CODE>sd</CODE> can be found in <CODE>linemin</CODE>
+<PRE>
+
+[min, mid, max, nevals]] = minbrack('linef', 0.0, 1.0, fa, f, pt, dir);
+</PRE>
+
+where the function <CODE>linef</CODE> is used to turn a general function <CODE>f</CODE>
+into a one dimensional one.
+
+<p><h2>
+Algorithm
+</h2>
+
+Quadratic extrapolation with a limit to the maximum step size is
+used to find the outside points of the bracket.  This implementation
+is based on that in Numerical Recipes.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="linemin.htm">linemin</a></CODE>, <CODE><a href="linef.htm">linef</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlp.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,94 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlp
+</title>
+</head>
+<body>
+<H1> mlp
+</H1>
+<h2>
+Purpose
+</h2>
+Create a 2-layer feedforward network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = mlp(nin, nhidden, nout, func)
+net = mlp(nin, nhidden, nout, func, prior)
+net = mlp(nin, nhidden, nout, func, prior, beta)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = mlp(nin, nhidden, nout, func)</CODE> takes the number of inputs, 
+hidden units and output units for a 2-layer feed-forward network,
+together with a string <CODE>func</CODE> which specifies the output unit
+activation function, and returns a data structure <CODE>net</CODE>. The
+weights are drawn from a zero mean, unit variance isotropic Gaussian,
+with varianced scaled by the fan-in of the hidden or output units as
+appropriate. This makes use of the Matlab function
+<CODE>randn</CODE> and so the seed for the random weight initialization can be 
+set using <CODE>randn('state', s)</CODE> where <CODE>s</CODE> is the seed value. 
+The hidden units use the <CODE>tanh</CODE> activation function.
+
+<p>The fields in <CODE>net</CODE> are
+<PRE>
+
+  type = 'mlp'
+  nin = number of inputs
+  nhidden = number of hidden units
+  nout = number of outputs
+  nwts = total number of weights and biases
+  actfn = string describing the output unit activation function:
+      'linear'
+      'logistic
+      'softmax'
+  w1 = first-layer weight matrix
+  b1 = first-layer bias vector
+  w2 = second-layer weight matrix
+  b2 = second-layer bias vector
+</PRE>
+
+Here <CODE>w1</CODE> has dimensions <CODE>nin</CODE> times <CODE>nhidden</CODE>, <CODE>b1</CODE> has
+dimensions <CODE>1</CODE> times <CODE>nhidden</CODE>, <CODE>w2</CODE> has
+dimensions <CODE>nhidden</CODE> times <CODE>nout</CODE>, and <CODE>b2</CODE> has
+dimensions <CODE>1</CODE> times <CODE>nout</CODE>.
+
+<p><CODE>net = mlp(nin, nhidden, nout, func, prior)</CODE>, in which <CODE>prior</CODE> is
+a scalar, allows the field <CODE>net.alpha</CODE> in the data structure
+<CODE>net</CODE> to be set, corresponding to a zero-mean isotropic Gaussian
+prior with inverse variance with value <CODE>prior</CODE>. Alternatively,
+<CODE>prior</CODE> can consist of a data structure with fields <CODE>alpha</CODE>
+and <CODE>index</CODE>, allowing individual Gaussian priors to be set over
+groups of weights in the network. Here <CODE>alpha</CODE> is a column vector
+in which each element corresponds to a separate group of weights,
+which need not be mutually exclusive.  The membership of the groups is
+defined by the matrix <CODE>indx</CODE> in which the columns correspond to
+the elements of <CODE>alpha</CODE>. Each column has one element for each
+weight in the matrix, in the order defined by the function
+<CODE>mlppak</CODE>, and each element is 1 or 0 according to whether the
+weight is a member of the corresponding group or not. A utility
+function <CODE>mlpprior</CODE> is provided to help in setting up the
+<CODE>prior</CODE> data structure.
+
+<p><CODE>net = mlp(nin, nhidden, nout, func, prior, beta)</CODE> also sets the 
+additional field <CODE>net.beta</CODE> in the data structure <CODE>net</CODE>, where
+beta corresponds to the inverse noise variance.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlpprior.htm">mlpprior</a></CODE>, <CODE><a href="mlppak.htm">mlppak</a></CODE>, <CODE><a href="mlpunpak.htm">mlpunpak</a></CODE>, <CODE><a href="mlpfwd.htm">mlpfwd</a></CODE>, <CODE><a href="mlperr.htm">mlperr</a></CODE>, <CODE><a href="mlpbkp.htm">mlpbkp</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlpbkp.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlpbkp
+</title>
+</head>
+<body>
+<H1> mlpbkp
+</H1>
+<h2>
+Purpose
+</h2>
+Backpropagate gradient of error function for 2-layer network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+g = mlpbkp(net, x, z, deltas)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = mlpbkp(net, x, z, deltas)</CODE> takes a network data structure
+<CODE>net</CODE> together with a matrix <CODE>x</CODE> of input vectors, a matrix 
+<CODE>z</CODE> of hidden unit activations, and a matrix <CODE>deltas</CODE> of the 
+gradient of the error function with respect to the values of the
+output units (i.e. the summed inputs to the output units, before the
+activation function is applied). The return value is the gradient
+<CODE>g</CODE> of the error function with respect to the network
+weights. Each row of <CODE>x</CODE> corresponds to one input vector.
+
+<p>This function is provided so that the common backpropagation algorithm
+can be used by multi-layer perceptron network models to compute
+gradients for mixture density networks as well as standard error
+functions.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE>, <CODE><a href="mlpderiv.htm">mlpderiv</a></CODE>, <CODE><a href="mdngrad.htm">mdngrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlpderiv.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlpderiv
+</title>
+</head>
+<body>
+<H1> mlpderiv
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate derivatives of network outputs with respect to weights.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+g = mlpderiv(net, x)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = mlpderiv(net, x)</CODE> takes a network data structure <CODE>net</CODE>
+and a matrix of input vectors <CODE>x</CODE> and returns a three-index matrix
+<CODE>g</CODE> whose <CODE>i</CODE>, <CODE>j</CODE>, <CODE>k</CODE> element contains the
+derivative of network output <CODE>k</CODE> with respect to weight or bias
+parameter <CODE>j</CODE> for input pattern <CODE>i</CODE>. The ordering of the
+weight and bias parameters is defined by <CODE>mlpunpak</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlppak.htm">mlppak</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE>, <CODE><a href="mlpbkp.htm">mlpbkp</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlperr.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlperr
+</title>
+</head>
+<body>
+<H1> mlperr
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate error function for 2-layer network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+e = mlperr(net, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>e = mlperr(net, x, t)</CODE> takes a network data structure <CODE>net</CODE> together 
+with a matrix <CODE>x</CODE> of input vectors and a matrix <CODE>t</CODE> of target
+vectors, and evaluates the error function <CODE>e</CODE>. The choice of error
+function corresponds to the output unit activation function. Each row
+of <CODE>x</CODE> corresponds to one input vector and each row of <CODE>t</CODE>
+corresponds to one target vector.
+
+<p><CODE>[e, edata, eprior] = mlperr(net, x, t)</CODE> additionally returns the
+data and prior components of the error, assuming a zero mean Gaussian
+prior on the weights with inverse variance parameters <CODE>alpha</CODE> and
+<CODE>beta</CODE> taken from the network data structure <CODE>net</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlppak.htm">mlppak</a></CODE>, <CODE><a href="mlpunpak.htm">mlpunpak</a></CODE>, <CODE><a href="mlpfwd.htm">mlpfwd</a></CODE>, <CODE><a href="mlpbkp.htm">mlpbkp</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlpevfwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlpevfwd
+</title>
+</head>
+<body>
+<H1> mlpevfwd
+</H1>
+<h2>
+Purpose
+</h2>
+Forward propagation with evidence for MLP
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+[y, extra] = mlpevfwd(net, x, t, x_test)
+[y, extra, invhess] = mlpevfwd(net, x, t, x_test, invhess)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>y = mlpevfwd(net, x, t, x_test)</CODE> takes a network data structure 
+<CODE>net</CODE> together with the input <CODE>x</CODE> and target <CODE>t</CODE> training data
+and input test data <CODE>x_test</CODE>.
+It returns the normal forward propagation through the network <CODE>y</CODE>
+together with a matrix <CODE>extra</CODE> which consists of error bars (variance)
+for a regression problem or moderated outputs for a classification problem.
+The optional argument (and return value) 
+<CODE>invhess</CODE> is the inverse of the network Hessian
+computed on the training data inputs and targets.  Passing it in avoids
+recomputing it, which can be a significant saving for large training sets.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="fevbayes.htm">fevbayes</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlpfwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlpfwd
+</title>
+</head>
+<body>
+<H1> mlpfwd
+</H1>
+<h2>
+Purpose
+</h2>
+Forward propagation through 2-layer network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+y = mlpfwd(net, x)
+[y, z] = mlpfwd(net, x)
+[y, z, a] = mlpfwd(net, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>y = mlpfwd(net, x)</CODE> takes a network data structure <CODE>net</CODE> together with
+a matrix <CODE>x</CODE> of input vectors, and forward propagates the inputs
+through the network to generate a matrix <CODE>y</CODE> of output
+vectors. Each row of <CODE>x</CODE> corresponds to one input vector and each
+row of <CODE>y</CODE> corresponds to one output vector.
+
+<p><CODE>[y, z] = mlpfwd(net, x)</CODE> also generates a matrix <CODE>z</CODE> of the hidden
+unit activations where each row corresponds to one pattern.
+
+<p><CODE>[y, z, a] = mlpfwd(net, x)</CODE> also returns a matrix <CODE>a</CODE> 
+giving the summed inputs to each output unit, where each row
+corresponds to one pattern.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlppak.htm">mlppak</a></CODE>, <CODE><a href="mlpunpak.htm">mlpunpak</a></CODE>, <CODE><a href="mlperr.htm">mlperr</a></CODE>, <CODE><a href="mlpbkp.htm">mlpbkp</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlpgrad.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlpgrad
+</title>
+</head>
+<body>
+<H1> mlpgrad
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate gradient of error function for 2-layer network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+g = mlpgrad(net, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = mlpgrad(net, x, t)</CODE> takes a network data structure <CODE>net</CODE> 
+together with a matrix <CODE>x</CODE> of input vectors and a matrix <CODE>t</CODE>
+of target vectors, and evaluates the gradient <CODE>g</CODE> of the error
+function with respect to the network weights. The error funcion
+corresponds to the choice of output unit activation function. Each row
+of <CODE>x</CODE> corresponds to one input vector and each row of <CODE>t</CODE>
+corresponds to one target vector.
+
+<p><CODE>[g, gdata, gprior] = mlpgrad(net, x, t)</CODE> also returns separately 
+the data and prior contributions to the gradient. In the case of
+multiple groups in the prior, <CODE>gprior</CODE> is a matrix with a row
+for each group and a column for each weight parameter.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlppak.htm">mlppak</a></CODE>, <CODE><a href="mlpunpak.htm">mlpunpak</a></CODE>, <CODE><a href="mlpfwd.htm">mlpfwd</a></CODE>, <CODE><a href="mlperr.htm">mlperr</a></CODE>, <CODE><a href="mlpbkp.htm">mlpbkp</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlphdotv.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlphdotv
+</title>
+</head>
+<body>
+<H1> mlphdotv
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate the product of the data Hessian with a vector. 
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+hdv = mlphdotv(net, x, t, v)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>hdv = mlphdotv(net, x, t, v)</CODE> takes an MLP network data structure
+<CODE>net</CODE>, together with the matrix <CODE>x</CODE> of input vectors, the
+matrix <CODE>t</CODE> of target vectors and an arbitrary row vector <CODE>v</CODE>
+whose length equals the number of parameters in the network, and
+returns the product of the data-dependent contribution to the Hessian
+matrix with <CODE>v</CODE>. The implementation is based on the R-propagation
+algorithm of Pearlmutter.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlphess.htm">mlphess</a></CODE>, <CODE><a href="hesschek.htm">hesschek</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlphess.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlphess
+</title>
+</head>
+<body>
+<H1> mlphess
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate the Hessian matrix for a multi-layer perceptron network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+h = mlphess(net, x, t)
+[h, hdata] = mlphess(net, x, t)
+h = mlphess(net, x, t, hdata)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>h = mlphess(net, x, t)</CODE> takes an MLP network data structure <CODE>net</CODE>,
+a matrix <CODE>x</CODE> of input values, and a matrix <CODE>t</CODE> of target
+values and returns the full Hessian matrix <CODE>h</CODE> corresponding to
+the second derivatives of the negative log posterior distribution,
+evaluated for the current weight and bias values as defined by
+<CODE>net</CODE>.
+
+<p><CODE>[h, hdata] = mlphess(net, x, t)</CODE> returns both the Hessian matrix
+<CODE>h</CODE> and the contribution <CODE>hdata</CODE> arising from the data dependent
+term in the Hessian.
+
+<p><CODE>h = mlphess(net, x, t, hdata)</CODE> takes a network data structure
+<CODE>net</CODE>, a matrix <CODE>x</CODE> of input values, and a matrix <CODE>t</CODE> of 
+target values, together with the contribution <CODE>hdata</CODE> arising from
+the data dependent term in the Hessian, and returns the full Hessian
+matrix <CODE>h</CODE> corresponding to the second derivatives of the negative
+log posterior distribution. This version saves computation time if
+<CODE>hdata</CODE> has already been evaluated for the current weight and bias
+values.
+
+<p><h2>
+Example
+</h2>
+For the standard regression framework with a Gaussian conditional
+distribution of target values given input values, and a simple
+Gaussian prior over weights, the Hessian takes the form
+<PRE>
+
+    h = beta*hd + alpha*I
+</PRE>
+
+where the contribution <CODE>hd</CODE> is evaluated by calls to <CODE>mlphdotv</CODE> and
+<CODE>h</CODE> is the full Hessian.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="hesschek.htm">hesschek</a></CODE>, <CODE><a href="mlphdotv.htm">mlphdotv</a></CODE>, <CODE><a href="evidence.htm">evidence</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlphint.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlphint
+</title>
+</head>
+<body>
+<H1> mlphint
+</H1>
+<h2>
+Purpose
+</h2>
+Plot Hinton diagram for 2-layer feed-forward network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+mlphint(net)
+[h1, h2] = mlphint(net)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>mlphint(net)</CODE> takes a network structure <CODE>net</CODE>
+and plots the Hinton diagram comprised of two
+figure windows, one displaying the first-layer weights and biases, and
+one displaying the second-layer weights and biases.
+
+<p><CODE>[h1, h2] = mlphint(net)</CODE> also returns handles <CODE>h1</CODE> and 
+<CODE>h2</CODE> to the figures which can be used, for instance, to delete the 
+figures when they are no longer needed.
+
+<p>To print the figure correctly, you should call
+<CODE>set(h, 'InvertHardCopy', 'on')</CODE> before printing.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demhint.htm">demhint</a></CODE>, <CODE><a href="hintmat.htm">hintmat</a></CODE>, <CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlppak.htm">mlppak</a></CODE>, <CODE><a href="mlpunpak.htm">mlpunpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlpinit.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlpinit
+</title>
+</head>
+<body>
+<H1> mlpinit
+</H1>
+<h2>
+Purpose
+</h2>
+Initialise the weights in a 2-layer feedforward network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = mlpinit(net, prior)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>net = mlpinit(net, prior)</CODE> takes a 2-layer feedforward network
+<CODE>net</CODE> and sets the weights and biases by sampling from a Gaussian
+distribution. If <CODE>prior</CODE> is a scalar, then all of the parameters
+(weights and biases) are sampled from a single isotropic Gaussian with
+inverse variance equal to <CODE>prior</CODE>. If <CODE>prior</CODE> is a data
+structure of the kind generated by <CODE>mlpprior</CODE>, then the parameters
+are sampled from multiple Gaussians according to their groupings
+(defined by the <CODE>index</CODE> field) with corresponding variances
+(defined by the <CODE>alpha</CODE> field).
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlpprior.htm">mlpprior</a></CODE>, <CODE><a href="mlppak.htm">mlppak</a></CODE>, <CODE><a href="mlpunpak.htm">mlpunpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlppak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlppak
+</title>
+</head>
+<body>
+<H1> mlppak
+</H1>
+<h2>
+Purpose
+</h2>
+Combines weights and biases into one weights vector.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+w = mlppak(net)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>w = mlppak(net)</CODE> takes a network data structure <CODE>net</CODE> and
+combines the component weight matrices bias vectors into a single row
+vector <CODE>w</CODE>. The facility to switch between these two
+representations for the network parameters is useful, for example, in
+training a network by error function minimization, since a single
+vector of parameters can be handled by general-purpose optimization
+routines.
+
+<p>The ordering of the paramters in <CODE>w</CODE> is defined by
+<PRE>
+
+  w = [net.w1(:)', net.b1, net.w2(:)', net.b2];
+</PRE>
+
+where <CODE>w1</CODE> is the first-layer weight matrix, <CODE>b1</CODE> is the
+first-layer bias vector, <CODE>w2</CODE> is the second-layer weight matrix,
+and <CODE>b2</CODE> is the second-layer bias vector.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlpunpak.htm">mlpunpak</a></CODE>, <CODE><a href="mlpfwd.htm">mlpfwd</a></CODE>, <CODE><a href="mlperr.htm">mlperr</a></CODE>, <CODE><a href="mlpbkp.htm">mlpbkp</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlpprior.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlpprior
+</title>
+</head>
+<body>
+<H1> mlpprior
+</H1>
+<h2>
+Purpose
+</h2>
+Create Gaussian prior for mlp.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+prior = mlpprior(nin, nhidden, nout, aw1, ab1, aw2, ab2)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>prior = mlpprior(nin, nhidden, nout, aw1, ab1, aw2, ab2)</CODE> 
+generates a data structure
+<CODE>prior</CODE>, with fields <CODE>prior.alpha</CODE> and <CODE>prior.index</CODE>, which
+specifies a Gaussian prior distribution for the network weights in a
+two-layer feedforward network. Two different cases are possible. In
+the first case, <CODE>aw1</CODE>, <CODE>ab1</CODE>, <CODE>aw2</CODE> and <CODE>ab2</CODE> are all
+scalars and represent the regularization coefficients for four groups
+of parameters in the network corresponding to first-layer weights,
+first-layer biases, second-layer weights, and second-layer biases
+respectively. Then <CODE>prior.alpha</CODE> represents a column vector of
+length 4 containing the parameters, and <CODE>prior.index</CODE> is a matrix
+specifying which weights belong in each group. Each column has one
+element for each weight in the matrix, using the standard ordering as
+defined in <CODE>mlppak</CODE>, and each element is 1 or 0 according to
+whether the weight is a member of the corresponding group or not.  In
+the second case the parameter <CODE>aw1</CODE> is a vector of length equal to
+the number of inputs in the network, and the corresponding matrix
+<CODE>prior.index</CODE> now partitions the first-layer weights into groups
+corresponding to the weights fanning out of each input unit. This 
+prior is appropriate for the technique of automatic relevance
+determination. 
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlperr.htm">mlperr</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE>, <CODE><a href="evidence.htm">evidence</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlptrain.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlptrain
+</title>
+</head>
+<body>
+<H1> mlptrain
+</H1>
+<h2>
+Purpose
+</h2>
+Utility to train an MLP network for demtrain
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>[net, error] = mlptrain(net, x, t, its)</CODE> trains a network data
+structure <CODE>net</CODE> using the scaled conjugate gradient algorithm 
+for <CODE>its</CODE> cycles with
+input data <CODE>x</CODE>, target data <CODE>t</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demtrain.htm">demtrain</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE>, <CODE><a href="netopt.htm">netopt</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/mlpunpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual mlpunpak
+</title>
+</head>
+<body>
+<H1> mlpunpak
+</H1>
+<h2>
+Purpose
+</h2>
+Separates weights vector into weight and bias matrices. 
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = mlpunpak(net, w)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = mlpunpak(net, w)</CODE> takes an mlp network data structure <CODE>net</CODE> and 
+a weight vector <CODE>w</CODE>, and returns a network data structure identical to
+the input network, except that the first-layer weight matrix
+<CODE>w1</CODE>, the first-layer bias vector <CODE>b1</CODE>, the second-layer
+weight matrix <CODE>w2</CODE> and the second-layer bias vector <CODE>b2</CODE> have all
+been set to the corresponding elements of <CODE>w</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="mlppak.htm">mlppak</a></CODE>, <CODE><a href="mlpfwd.htm">mlpfwd</a></CODE>, <CODE><a href="mlperr.htm">mlperr</a></CODE>, <CODE><a href="mlpbkp.htm">mlpbkp</a></CODE>, <CODE><a href="mlpgrad.htm">mlpgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/netderiv.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual netderiv
+</title>
+</head>
+<body>
+<H1> netderiv
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate derivatives of network outputs by weights generically.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+g = netderiv(w, net, x)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>g = netderiv(w, net, x)</CODE> takes a weight vector <CODE>w</CODE> and a network
+data structure <CODE>net</CODE>, together with the matrix <CODE>x</CODE> of input
+vectors, and returns the
+gradient of the outputs with respect to the weights evaluated at <CODE>w</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="netevfwd.htm">netevfwd</a></CODE>, <CODE><a href="netopt.htm">netopt</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/neterr.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual neterr
+</title>
+</head>
+<body>
+<H1> neterr
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate network error function for generic optimizers
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+e = neterr(w, net, x, t)
+[e, varargout] = neterr(w, net, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>e = neterr(w, net, x, t)</CODE> takes a weight vector <CODE>w</CODE> and a network
+data structure <CODE>net</CODE>, together with the matrix <CODE>x</CODE> of input
+vectors and the matrix <CODE>t</CODE> of target vectors, and returns the
+value of the error function evaluated at <CODE>w</CODE>.
+
+<p><CODE>[e, varargout] = neterr(w, net, x, t)</CODE> also returns any additional
+return values from the error function.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="netgrad.htm">netgrad</a></CODE>, <CODE><a href="nethess.htm">nethess</a></CODE>, <CODE><a href="netopt.htm">netopt</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/netevfwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual netevfwd
+</title>
+</head>
+<body>
+<H1> netevfwd
+</H1>
+<h2>
+Purpose
+</h2>
+Generic forward propagation with evidence for network
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+[y, extra] = netevfwd(w, net, x, t, x_test)
+[y, extra, invhess] = netevfwd(w, net, x, t, x_test, invhess)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>[y, extra] = netevfwd(w, net, x, t, x_test)</CODE> takes a network data 
+structure 
+<CODE>net</CODE> together with the input <CODE>x</CODE> and target <CODE>t</CODE> training data
+and input test data <CODE>x_test</CODE>.
+It returns the normal forward propagation through the network <CODE>y</CODE>
+together with a matrix <CODE>extra</CODE> which consists of error bars (variance)
+for a regression problem or moderated outputs for a classification problem.
+
+<p>The optional argument (and return value) 
+<CODE>invhess</CODE> is the inverse of the network Hessian
+computed on the training data inputs and targets.  Passing it in avoids
+recomputing it, which can be a significant saving for large training sets.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlpevfwd.htm">mlpevfwd</a></CODE>, <CODE><a href="rbfevfwd.htm">rbfevfwd</a></CODE>, <CODE><a href="glmevfwd.htm">glmevfwd</a></CODE>, <CODE><a href="fevbayes.htm">fevbayes</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/netgrad.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual netgrad
+</title>
+</head>
+<body>
+<H1> netgrad
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate network error gradient for generic optimizers
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+g = netgrad(w, net, x, t)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>g = netgrad(w, net, x, t)</CODE> takes a weight vector <CODE>w</CODE> and a network
+data structure <CODE>net</CODE>, together with the matrix <CODE>x</CODE> of input
+vectors and the matrix <CODE>t</CODE> of target vectors, and returns the
+gradient of the error function evaluated at <CODE>w</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlp.htm">mlp</a></CODE>, <CODE><a href="neterr.htm">neterr</a></CODE>, <CODE><a href="netopt.htm">netopt</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
Binary file toolboxes/FullBNT-1.0.7/nethelp3.3/nethelp3.3.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/nethess.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual nethess
+</title>
+</head>
+<body>
+<H1> nethess
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate network Hessian
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+h = neterr(w, net, x, t)
+[h, varargout] = neterr(w, net, x, t, varargin)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>h = nethess(w, net, x, t)</CODE> takes a weight vector <CODE>w</CODE> and a network
+data structure <CODE>net</CODE>, together with the matrix <CODE>x</CODE> of input
+vectors and the matrix <CODE>t</CODE> of target vectors, and returns the
+value of the Hessian evaluated at <CODE>w</CODE>.
+
+<p><CODE>[e, varargout] = nethess(w, net, x, t, varargin)</CODE> also returns any additional
+return values from the network Hessian function, and passes additional arguments
+to that function.
+
+<p><h2>
+Example
+</h2>
+
+<p>In <CODE>evidence</CODE>, this function is called once to compute the
+data contribution to the Hessian
+<PRE>
+
+[h, dh] = nethess(w, net, x, t, dh);
+</PRE>
+
+and again to update the Hessian for new values of the hyper-parameters
+<PRE>
+
+h = nethess(w, net, x, t, dh);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="neterr.htm">neterr</a></CODE>, <CODE><a href="netgrad.htm">netgrad</a></CODE>, <CODE><a href="netopt.htm">netopt</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/netinit.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual netinit
+</title>
+</head>
+<body>
+<H1> netinit
+</H1>
+<h2>
+Purpose
+</h2>
+Initialise the weights in a network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = netinit(net, prior)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>net = netinit(net, prior)</CODE> takes a network data structure
+<CODE>net</CODE> and sets the weights and biases by sampling from a Gaussian
+distribution. If <CODE>prior</CODE> is a scalar, then all of the parameters
+(weights and biases) are sampled from a single isotropic Gaussian with
+inverse variance equal to <CODE>prior</CODE>. If <CODE>prior</CODE> is a data
+structure of the kind generated by <CODE>mlpprior</CODE>, then the parameters
+are sampled from multiple Gaussians according to their groupings
+(defined by the <CODE>index</CODE> field) with corresponding variances
+(defined by the <CODE>alpha</CODE> field).
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlpprior.htm">mlpprior</a></CODE>, <CODE><a href="netunpak.htm">netunpak</a></CODE>, <CODE><a href="rbfprior.htm">rbfprior</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/netopt.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,75 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual netopt
+</title>
+</head>
+<body>
+<H1> netopt
+</H1>
+<h2>
+Purpose
+</h2>
+Optimize the weights in a network model. 
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+[net, options] = netopt(net, options, x, t, alg)
+[net, options, varargout] = netopt(net, options, x, t, alg)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<p><CODE>netopt</CODE> is a helper function which facilitates the training of 
+networks using the general purpose optimizers as well as sampling from the
+posterior distribution of parameters using general purpose Markov chain
+Monte Carlo sampling algorithms. It can be used with any function that
+searches in parameter space using error and gradient functions.
+
+<p><CODE>[net, options] = netopt(net, options, x, t, alg)</CODE> takes a network 
+data structure <CODE>net</CODE>, together with a vector <CODE>options</CODE> of
+parameters governing the behaviour of the optimization algorithm, a
+matrix <CODE>x</CODE> of input vectors and a matrix <CODE>t</CODE> of target
+vectors, and returns the trained network as well as an updated
+<CODE>options</CODE> vector. The string <CODE>alg</CODE> determines which optimization
+algorithm (<CODE>conjgrad</CODE>, <CODE>quasinew</CODE>, <CODE>scg</CODE>, etc.) or Monte
+Carlo algorithm (such as <CODE>hmc</CODE>) will be used.
+
+<p><CODE>[net, options, varargout] = netopt(net, options, x, t, alg)</CODE>
+also returns any additional return values from the optimisation algorithm.
+
+<p><h2>
+Examples
+</h2>
+Suppose we create a 4-input, 3 hidden unit, 2-output feed-forward
+network using <CODE>net = mlp(4, 3, 2, 'linear')</CODE>. We can then train
+the network with the scaled conjugate gradient algorithm by using
+<CODE>net = netopt(net, options, x, t, 'scg')</CODE> where <CODE>x</CODE> and
+<CODE>t</CODE> are the input and target data matrices respectively, and the
+options vector is set appropriately for <CODE>scg</CODE>.
+
+<p>If we also wish to plot the learning curve, we can use the additional
+return value <CODE>errlog</CODE> given by <CODE>scg</CODE>:
+<PRE>
+
+[net, options, errlog] = netopt(net, options, x, t, 'scg');
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="netgrad.htm">netgrad</a></CODE>, <CODE><a href="bfgs.htm">bfgs</a></CODE>, <CODE><a href="conjgrad.htm">conjgrad</a></CODE>, <CODE><a href="graddesc.htm">graddesc</a></CODE>, <CODE><a href="hmc.htm">hmc</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/netpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual netpak
+</title>
+</head>
+<body>
+<H1> netpak
+</H1>
+<h2>
+Purpose
+</h2>
+Combines weights and biases into one weights vector.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+w = netpak(net)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>w = netpak(net)</CODE> takes a network data structure <CODE>net</CODE> and
+combines the component weight matrices  into a single row
+vector <CODE>w</CODE>. The facility to switch between these two
+representations for the network parameters is useful, for example, in
+training a network by error function minimization, since a single
+vector of parameters can be handled by general-purpose optimization
+routines.  This function also takes into account a <CODE>mask</CODE> defined
+as a field in <CODE>net</CODE> by removing any weights that correspond to
+entries of 0 in the mask.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="net.htm">net</a></CODE>, <CODE><a href="netunpak.htm">netunpak</a></CODE>, <CODE><a href="netfwd.htm">netfwd</a></CODE>, <CODE><a href="neterr.htm">neterr</a></CODE>, <CODE><a href="netgrad.htm">netgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/netunpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual netunpak
+</title>
+</head>
+<body>
+<H1> netunpak
+</H1>
+<h2>
+Purpose
+</h2>
+Separates weights vector into weight and bias matrices. 
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = netunpak(net, w)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = netunpak(net, w)</CODE> takes an net network data structure <CODE>net</CODE> and 
+a weight vector <CODE>w</CODE>, and returns a network data structure identical to
+the input network, except that the componenet weight matrices have all
+been set to the corresponding elements of <CODE>w</CODE>.  If there is 
+a <CODE>mask</CODE> field in the <CODE>net</CODE> data structure, then the weights in
+<CODE>w</CODE> are placed in locations corresponding to non-zero entries in the
+mask (so <CODE>w</CODE> should have the same length as the number of non-zero
+entries in the <CODE>mask</CODE>).
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="netpak.htm">netpak</a></CODE>, <CODE><a href="netfwd.htm">netfwd</a></CODE>, <CODE><a href="neterr.htm">neterr</a></CODE>, <CODE><a href="netgrad.htm">netgrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/olgd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,101 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual olgd
+</title>
+</head>
+<body>
+<H1> olgd
+</H1>
+<h2>
+Purpose
+</h2>
+On-line gradient descent optimization.
+
+<p><h2>
+Description
+</h2>
+<CODE>[net, options, errlog, pointlog] = olgd(net, options, x, t)</CODE> uses 
+on-line gradient descent to find a local minimum of the error function for the
+network
+<CODE>net</CODE> computed on the input data <CODE>x</CODE> and target values
+<CODE>t</CODE>. A log of the error values
+after each cycle is (optionally) returned in <CODE>errlog</CODE>, and a log
+of the points visited is (optionally) returned in <CODE>pointlog</CODE>.
+Because the gradient is computed on-line (i.e. after each pattern)
+this can be quite inefficient in Matlab.
+
+<p>The error function value at final weight vector is returned
+in <CODE>options(8)</CODE>.
+
+<p>The optional parameters have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values; also logs error 
+values in the return argument <CODE>errlog</CODE>, and the points visited
+in the return argument <CODE>pointslog</CODE>.  If <CODE>options(1)</CODE> is set to 0,
+then only warning messages are displayed.  If <CODE>options(1)</CODE> is -1,
+then nothing is displayed.
+
+<p><CODE>options(2)</CODE> is the precision required for the value
+of <CODE>x</CODE> at the solution. If the absolute difference between
+the values of <CODE>x</CODE> between two successive steps is less than
+<CODE>options(2)</CODE>, then this condition is satisfied.
+
+<p><CODE>options(3)</CODE> is the precision required of the objective
+function at the solution.  If the absolute difference between the
+error functions between two successive steps is less than
+<CODE>options(3)</CODE>, then this condition is satisfied.
+Both this and the previous condition must be
+satisfied for termination. Note that testing the function value at each
+iteration roughly halves the speed of the algorithm.
+
+<p><CODE>options(5)</CODE> determines whether the patterns are sampled randomly
+with replacement. If it is 0 (the default), then patterns are sampled
+in order.
+
+<p><CODE>options(6)</CODE> determines if the learning rate decays.  If it is 1
+then the learning rate decays at a rate of <CODE>1/t</CODE>.  If it is 0
+(the default) then the learning rate is constant.
+
+<p><CODE>options(9)</CODE> should be set to 1 to check the user defined gradient
+function.
+
+<p><CODE>options(10)</CODE> returns the total number of function evaluations (including
+those in any line searches).
+
+<p><CODE>options(11)</CODE> returns the total number of gradient evaluations.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations (passes through
+the complete pattern set); default 100.
+
+<p><CODE>options(17)</CODE> is the momentum; default 0.5.
+
+<p><CODE>options(18)</CODE> is the learning rate; default 0.01.
+
+<p><h2>
+Examples
+</h2>
+The following example performs on-line gradient descent on an MLP with
+random sampling from the pattern set.
+<PRE>
+
+net = mlp(5, 3, 1, 'linear');
+options = foptions;
+options(18) = 0.01;
+options(5) = 1;
+net = olgd(net, options, x, t);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="graddesc.htm">graddesc</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/pca.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual pca
+</title>
+</head>
+<body>
+<H1> pca
+</H1>
+<h2>
+Purpose
+</h2>
+Principal Components Analysis
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+PCcoeff = pca(data)
+PCcoeff = pca(data, N)
+[PCcoeff, PCvec] = pca(data)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>PCcoeff = pca(data)</CODE> computes the eigenvalues of the covariance
+matrix of the dataset <CODE>data</CODE> and returns them as <CODE>PCcoeff</CODE>.  These
+coefficients give the variance of <CODE>data</CODE> along the corresponding 
+principal components.  
+
+<p><CODE>PCcoeff = pca(data, N)</CODE> returns the largest <CODE>N</CODE> eigenvalues.
+
+<p><CODE>[PCcoeff, PCvec] = pca(data)</CODE> returns the principal components as
+well as the coefficients.  This is considerably more computationally
+demanding than just computing the eigenvalues.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="eigdec.htm">eigdec</a></CODE>, <CODE><a href="gtminit.htm">gtminit</a></CODE>, <CODE><a href="ppca.htm">ppca</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/plotmat.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual plotmat
+</title>
+</head>
+<body>
+<H1> plotmat
+</H1>
+<h2>
+Purpose
+</h2>
+Display a matrix.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+plotmat(matrix, textcolour, gridcolour, fontsize)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>plotmat(matrix, textcolour, gridcolour, fontsize)</CODE> displays the matrix 
+<CODE>matrix</CODE> on the current figure.  The <CODE>textcolour</CODE> and <CODE>gridcolour</CODE>
+arguments control the colours of the numbers and grid labels respectively and
+should follow the usual Matlab specification.
+The parameter <CODE>fontsize</CODE> should be an integer.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="conffig.htm">conffig</a></CODE>, <CODE><a href="demmlp2.htm">demmlp2</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/ppca.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual ppca
+</title>
+</head>
+<body>
+<H1> ppca
+</H1>
+<h2>
+Purpose
+</h2>
+Probabilistic Principal Components Analysis
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+[var, U, lambda] = pca(x, ppca_dim)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+
+<CODE>[var, U, lambda] = ppca(x, ppca_dim)</CODE> computes the principal component
+subspace <CODE>U</CODE> of dimension <CODE>ppca_dim</CODE> using a centred
+covariance matrix <CODE>x</CODE>. The variable <CODE>var</CODE> contains
+the off-subspace variance (which is assumed to be spherical), while the
+vector <CODE>lambda</CODE> contains the variances of each of the principal
+components.  This is computed using the eigenvalue and eigenvector 
+decomposition of <CODE>x</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="eigdec.htm">eigdec</a></CODE>, <CODE><a href="pca.htm">pca</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/quasinew.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,99 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual quasinew
+</title>
+</head>
+<body>
+<H1> quasinew
+</H1>
+<h2>
+Purpose
+</h2>
+Quasi-Newton optimization.
+
+<p><h2>
+Description
+</h2>
+<CODE>[x, options, flog, pointlog] = quasinew(f, x, options, gradf)</CODE> 
+uses a quasi-Newton
+algorithm to find a local minimum of the function <CODE>f(x)</CODE> whose
+gradient is given by <CODE>gradf(x)</CODE>.  Here <CODE>x</CODE> is a row vector
+and <CODE>f</CODE> returns a scalar value.  
+The point at which <CODE>f</CODE> has a local minimum
+is returned as <CODE>x</CODE>.  The function value at that point is returned
+in <CODE>options(8)</CODE>. A log of the function values
+after each cycle is (optionally) returned in <CODE>flog</CODE>, and a log
+of the points visited is (optionally) returned in <CODE>pointlog</CODE>.
+
+<p><CODE>quasinew(f, x, options, gradf, p1, p2, ...)</CODE> allows 
+additional arguments to be passed to <CODE>f()</CODE> and <CODE>gradf()</CODE>. 
+
+<p>The optional parameters have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values; also logs error 
+values in the return argument <CODE>errlog</CODE>, and the points visited
+in the return argument <CODE>pointslog</CODE>.  If <CODE>options(1)</CODE> is set to 0,
+then only warning messages are displayed.  If <CODE>options(1)</CODE> is -1,
+then nothing is displayed.
+
+<p><CODE>options(2)</CODE> is a measure of the absolute precision required for the value
+of <CODE>x</CODE> at the solution.  If the absolute difference between
+the values of <CODE>x</CODE> between two successive steps is less than
+<CODE>options(2)</CODE>, then this condition is satisfied.
+
+<p><CODE>options(3)</CODE> is a measure of the precision required of the objective
+function at the solution.  If the absolute difference between the
+objective function values between two successive steps is less than
+<CODE>options(3)</CODE>, then this condition is satisfied.
+Both this and the previous condition must be
+satisfied for termination.
+
+<p><CODE>options(9)</CODE> should be set to 1 to check the user defined gradient
+function.
+
+<p><CODE>options(10)</CODE> returns the total number of function evaluations (including
+those in any line searches).
+
+<p><CODE>options(11)</CODE> returns the total number of gradient evaluations.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations; default 100.
+
+<p><CODE>options(15)</CODE> is the precision in parameter space of the line search;
+default <CODE>1e-2</CODE>.
+
+<p><h2>
+Examples
+</h2>
+An example of 
+the use of the additional arguments is the minimization of an error
+function for a neural network:
+<PRE>
+
+w = quasinew('neterr', w, options, 'netgrad', net, x, t);
+</PRE>
+
+
+<p><h2>
+Algorithm
+</h2>
+
+The quasi-Newton algorithm builds up an
+approximation to the inverse Hessian over a number of steps.  The
+method requires order W squared storage, where W is the number of function
+parameters.  The Broyden-Fletcher-Goldfarb-Shanno formula for the
+inverse Hessian updates is used.  The line searches are carried out to
+a relatively low precision (1.0e-2).
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="conjgrad.htm">conjgrad</a></CODE>, <CODE><a href="graddesc.htm">graddesc</a></CODE>, <CODE><a href="linemin.htm">linemin</a></CODE>, <CODE><a href="minbrack.htm">minbrack</a></CODE>, <CODE><a href="scg.htm">scg</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbf.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,114 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbf
+</title>
+</head>
+<body>
+<H1> rbf
+</H1>
+<h2>
+Purpose
+</h2>
+Creates an RBF network with specified architecture
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+net = rbf(nin, nhidden, nout, rbfunc)
+net = rbf(nin, nhidden, nout, rbfunc, outfunc)
+net = rbf(nin, nhidden, nout, rbfunc, outfunc, prior, beta)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = rbf(nin, nhidden, nout, rbfunc)</CODE> constructs and initialises
+a radial basis function network returning a data structure <CODE>net</CODE>.
+The weights are all initialised with a zero mean, unit variance normal
+distribution, with the exception of the variances, which are set to one.
+This makes use of the Matlab function
+<CODE>randn</CODE> and so the seed for the random weight initialization can be 
+set using <CODE>randn('state', s)</CODE> where <CODE>s</CODE> is the seed value. The
+activation functions are defined in terms of the distance between
+the data point and the corresponding centre.  Note that the functions are
+computed to a convenient constant multiple: for example, the Gaussian
+is not normalised.  (Normalisation is not needed as the function outputs
+are linearly combined in the next layer.)
+
+<p>The fields in <CODE>net</CODE> are
+<PRE>
+
+  type = 'rbf'
+  nin = number of inputs
+  nhidden = number of hidden units
+  nout = number of outputs
+  nwts = total number of weights and biases
+  actfn = string defining hidden unit activation function:
+    'gaussian' for a radially symmetric Gaussian function.
+    'tps' for r^2 log r, the thin plate spline function.
+    'r4logr' for r^4 log r.
+  outfn = string defining output error function:
+    'linear' for linear outputs (default) and SoS error.
+    'neuroscale' for Sammon stress measure.
+  c = centres
+  wi = squared widths (null for rlogr and tps)
+  w2 = second layer weight matrix
+  b2 = second layer bias vector
+</PRE>
+
+
+<p><CODE>net = rbf(nin, nhidden, nout, rbfund, outfunc)</CODE> allows the user to
+specify the type of error function to be used.  The field <CODE>outfn</CODE>
+is set to the value of this string.  Linear outputs (for regression problems)
+and Neuroscale outputs (for topographic mappings) are supported.
+
+<p><CODE>net = rbf(nin, nhidden, nout, rbfunc, outfunc, prior, beta)</CODE>,
+in which <CODE>prior</CODE> is
+a scalar, allows the field <CODE>net.alpha</CODE> in the data structure
+<CODE>net</CODE> to be set, corresponding to a zero-mean isotropic Gaussian
+prior with inverse variance with value <CODE>prior</CODE>. Alternatively,
+<CODE>prior</CODE> can consist of a data structure with fields <CODE>alpha</CODE>
+and <CODE>index</CODE>, allowing individual Gaussian priors to be set over
+groups of weights in the network. Here <CODE>alpha</CODE> is a column vector
+in which each element corresponds to a separate group of weights,
+which need not be mutually exclusive.  The membership of the groups is
+defined by the matrix <CODE>indx</CODE> in which the columns correspond to
+the elements of <CODE>alpha</CODE>. Each column has one element for each
+weight in the matrix, in the order defined by the function
+<CODE>rbfpak</CODE>, and each element is 1 or 0 according to whether the
+weight is a member of the corresponding group or not. A utility
+function <CODE>rbfprior</CODE> is provided to help in setting up the
+<CODE>prior</CODE> data structure.
+
+<p><CODE>net = rbf(nin, nhidden, nout, func, prior, beta)</CODE> also sets the 
+additional field <CODE>net.beta</CODE> in the data structure <CODE>net</CODE>, where
+beta corresponds to the inverse noise variance.
+
+<p><h2>
+Example
+</h2>
+The following code constructs an RBF network with 1 input and output node
+and 5 hidden nodes and then propagates some data <CODE>x</CODE> through it.
+<PRE>
+
+net = rbf(1, 5, 1, 'tps');
+[y, act] = rbffwd(net, x);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbferr.htm">rbferr</a></CODE>, <CODE><a href="rbffwd.htm">rbffwd</a></CODE>, <CODE><a href="rbfgrad.htm">rbfgrad</a></CODE>, <CODE><a href="rbfpak.htm">rbfpak</a></CODE>, <CODE><a href="rbftrain.htm">rbftrain</a></CODE>, <CODE><a href="rbfunpak.htm">rbfunpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbfbkp.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbfbkp
+</title>
+</head>
+<body>
+<H1> rbfbkp
+</H1>
+<h2>
+Purpose
+</h2>
+Backpropagate gradient of error function for RBF network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+g = rbfbkp(net, x, z, n2, deltas)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = rbfbkp(net, x, z, n2, deltas)</CODE> takes a network data structure
+<CODE>net</CODE> together with a matrix <CODE>x</CODE> of input vectors, a matrix 
+<CODE>z</CODE> of hidden unit activations, a matrix <CODE>n2</CODE> of the squared
+distances between centres and inputs, and a matrix <CODE>deltas</CODE> of the 
+gradient of the error function with respect to the values of the
+output units (i.e. the summed inputs to the output units, before the
+activation function is applied). The return value is the gradient
+<CODE>g</CODE> of the error function with respect to the network
+weights. Each row of <CODE>x</CODE> corresponds to one input vector.
+
+<p>This function is provided so that the common backpropagation algorithm
+can be used by RBF network models to compute
+gradients for the output values (in <CODE>rbfderiv</CODE>) as well as standard error
+functions.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="rbfgrad.htm">rbfgrad</a></CODE>, <CODE><a href="rbfderiv.htm">rbfderiv</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbfderiv.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbfderiv
+</title>
+</head>
+<body>
+<H1> rbfderiv
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate derivatives of RBF network outputs with respect to weights.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+g = rbfderiv(net, x)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = rbfderiv(net, x)</CODE> takes a network data structure <CODE>net</CODE>
+and a matrix of input vectors <CODE>x</CODE> and returns a three-index matrix
+<CODE>g</CODE> whose <CODE>i</CODE>, <CODE>j</CODE>, <CODE>k</CODE> element contains the
+derivative of network output <CODE>k</CODE> with respect to weight or bias
+parameter <CODE>j</CODE> for input pattern <CODE>i</CODE>. The ordering of the
+weight and bias parameters is defined by <CODE>rbfunpak</CODE>.  This
+function also takes into account any mask in the network data structure.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="rbfpak.htm">rbfpak</a></CODE>, <CODE><a href="rbfgrad.htm">rbfgrad</a></CODE>, <CODE><a href="rbfbkp.htm">rbfbkp</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbferr.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbferr
+</title>
+</head>
+<body>
+<H1> rbferr
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate error function for RBF network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+e = rbferr(net, x, t)
+[e, edata, eprior] = rbferr(net, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>e = rbferr(net, x, t)</CODE> takes a network data structure <CODE>net</CODE> together 
+with a matrix <CODE>x</CODE> of input
+vectors and a matrix <CODE>t</CODE> of target vectors, and evaluates the
+appropriate error function <CODE>e</CODE> depending on <CODE>net.outfn</CODE>. 
+Each row of <CODE>x</CODE> corresponds to one
+input vector and each row of <CODE>t</CODE> contains the corresponding target vector.
+
+<p><CODE>[e, edata, eprior] = rbferr(net, x, t)</CODE> additionally returns the
+data and prior components of the error, assuming a zero mean Gaussian
+prior on the weights with inverse variance parameters <CODE>alpha</CODE> and
+<CODE>beta</CODE> taken from the network data structure <CODE>net</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="rbffwd.htm">rbffwd</a></CODE>, <CODE><a href="rbfgrad.htm">rbfgrad</a></CODE>, <CODE><a href="rbfpak.htm">rbfpak</a></CODE>, <CODE><a href="rbftrain.htm">rbftrain</a></CODE>, <CODE><a href="rbfunpak.htm">rbfunpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbfevfwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbfevfwd
+</title>
+</head>
+<body>
+<H1> rbfevfwd
+</H1>
+<h2>
+Purpose
+</h2>
+Forward propagation with evidence for RBF
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+[y, extra] = rbfevfwd(net, x, t, x_test)
+[y, extra, invhess] = rbfevfwd(net, x, t, x_test, invhess)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>y = rbfevfwd(net, x, t, x_test)</CODE> takes a network data structure 
+<CODE>net</CODE> together with the input <CODE>x</CODE> and target <CODE>t</CODE> training data
+and input test data <CODE>x_test</CODE>.
+It returns the normal forward propagation through the network <CODE>y</CODE>
+together with a matrix <CODE>extra</CODE> which consists of error bars (variance)
+for a regression problem or moderated outputs for a classification problem.
+
+<p>The optional argument (and return value) 
+<CODE>invhess</CODE> is the inverse of the network Hessian
+computed on the training data inputs and targets.  Passing it in avoids
+recomputing it, which can be a significant saving for large training sets.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="fevbayes.htm">fevbayes</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbffwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbffwd
+</title>
+</head>
+<body>
+<H1> rbffwd
+</H1>
+<h2>
+Purpose
+</h2>
+Forward propagation through RBF network with linear outputs.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+a = rbffwd(net, x)
+function [a, z, n2] = rbffwd(net, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>a = rbffwd(net, x)</CODE> takes a network data structure
+<CODE>net</CODE> and a matrix <CODE>x</CODE> of input
+vectors and forward propagates the inputs through the network to generate
+a matrix <CODE>a</CODE> of output vectors. Each row of <CODE>x</CODE> corresponds to one
+input vector and each row of <CODE>a</CODE> contains the corresponding output vector.
+The activation function that is used is determined by <CODE>net.actfn</CODE>.
+
+<p><CODE>[a, z, n2] = rbffwd(net, x)</CODE> also generates a matrix <CODE>z</CODE> of
+the hidden unit activations where each row corresponds to one pattern.
+These hidden unit activations represent the <CODE>design matrix</CODE> for
+the RBF.  The matrix <CODE>n2</CODE> is the squared distances between each
+basis function centre and each pattern in which each row corresponds
+to a data point.
+
+<p><h2>
+Examples
+</h2>
+<PRE>
+
+[a, z] = rbffwd(net, x);
+
+<p>temp = pinv([z ones(size(x, 1), 1)]) * t;
+net.w2 = temp(1: nd(2), :);
+net.b2 = temp(size(x, nd(2)) + 1, :);
+</PRE>
+
+Here <CODE>x</CODE> is the input data, <CODE>t</CODE> are the target values, and we use the
+pseudo-inverse to find the output weights and biases.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="rbferr.htm">rbferr</a></CODE>, <CODE><a href="rbfgrad.htm">rbfgrad</a></CODE>, <CODE><a href="rbfpak.htm">rbfpak</a></CODE>, <CODE><a href="rbftrain.htm">rbftrain</a></CODE>, <CODE><a href="rbfunpak.htm">rbfunpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbfgrad.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbfgrad
+</title>
+</head>
+<body>
+<H1> rbfgrad
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate gradient of error function for RBF network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+g = rbfgrad(net, x, t)
+[g, gdata, gprior] = rbfgrad(net, x, t)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = rbfgrad(net, x, t)</CODE> takes a network data structure <CODE>net</CODE>
+together with a matrix <CODE>x</CODE> of input
+vectors and a matrix <CODE>t</CODE> of target vectors, and evaluates the gradient
+<CODE>g</CODE> of the error function with respect to the network weights (i.e.
+including the hidden unit parameters). The error
+function is sum of squares.
+Each row of <CODE>x</CODE> corresponds to one
+input vector and each row of <CODE>t</CODE> contains the corresponding target vector.
+If the output function is <CODE>'neuroscale'</CODE> then the gradient is only
+computed for the output layer weights and biases.
+
+<p><CODE>[g, gdata, gprior] = rbfgrad(net, x, t)</CODE> also returns separately 
+the data and prior contributions to the gradient. In the case of
+multiple groups in the prior, <CODE>gprior</CODE> is a matrix with a row
+for each group and a column for each weight parameter.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="rbffwd.htm">rbffwd</a></CODE>, <CODE><a href="rbferr.htm">rbferr</a></CODE>, <CODE><a href="rbfpak.htm">rbfpak</a></CODE>, <CODE><a href="rbfunpak.htm">rbfunpak</a></CODE>, <CODE><a href="rbfbkp.htm">rbfbkp</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbfhess.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,72 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbfhess
+</title>
+</head>
+<body>
+<H1> rbfhess
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate the Hessian matrix for RBF network.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+h = rbfhess(net, x, t)
+[h, hdata] = rbfhess(net, x, t)
+h = rbfhess(net, x, t, hdata)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>h = rbfhess(net, x, t)</CODE> takes an RBF network data structure <CODE>net</CODE>,
+a matrix <CODE>x</CODE> of input values, and a matrix <CODE>t</CODE> of target
+values and returns the full Hessian matrix <CODE>h</CODE> corresponding to
+the second derivatives of the negative log posterior distribution,
+evaluated for the current weight and bias values as defined by
+<CODE>net</CODE>.  Currently, the implementation only computes the
+Hessian for the output layer weights.
+
+<p><CODE>[h, hdata] = rbfhess(net, x, t)</CODE> returns both the Hessian matrix
+<CODE>h</CODE> and the contribution <CODE>hdata</CODE> arising from the data dependent
+term in the Hessian.
+
+<p><CODE>h = rbfhess(net, x, t, hdata)</CODE> takes a network data structure
+<CODE>net</CODE>, a matrix <CODE>x</CODE> of input values, and a matrix <CODE>t</CODE> of 
+target values, together with the contribution <CODE>hdata</CODE> arising from
+the data dependent term in the Hessian, and returns the full Hessian
+matrix <CODE>h</CODE> corresponding to the second derivatives of the negative
+log posterior distribution. This version saves computation time if
+<CODE>hdata</CODE> has already been evaluated for the current weight and bias
+values.
+
+<p><h2>
+Example
+</h2>
+For the standard regression framework with a Gaussian conditional
+distribution of target values given input values, and a simple
+Gaussian prior over weights, the Hessian takes the form
+<PRE>
+
+    h = beta*hdata + alpha*I
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="mlphess.htm">mlphess</a></CODE>, <CODE><a href="hesschek.htm">hesschek</a></CODE>, <CODE><a href="evidence.htm">evidence</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbfjacob.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbfjacob
+</title>
+</head>
+<body>
+<H1> rbfjacob
+</H1>
+<h2>
+Purpose
+</h2>
+Evaluate derivatives of RBF network outputs with respect to inputs.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+g = rbfjacob(net, x)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = rbfjacob(net, x)</CODE> takes a network data structure <CODE>net</CODE>
+and a matrix of input vectors <CODE>x</CODE> and returns a three-index matrix
+<CODE>g</CODE> whose <CODE>i</CODE>, <CODE>j</CODE>, <CODE>k</CODE> element contains the
+derivative of network output <CODE>k</CODE> with respect to input
+parameter <CODE>j</CODE> for input pattern <CODE>i</CODE>. 
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="rbfgrad.htm">rbfgrad</a></CODE>, <CODE><a href="rbfbkp.htm">rbfbkp</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbfpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbfpak
+</title>
+</head>
+<body>
+<H1> rbfpak
+</H1>
+<h2>
+Purpose
+</h2>
+Combines all the parameters in an RBF network into one weights vector.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+w = rbfpak(net)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>w = rbfpak(net)</CODE> takes a network data structure <CODE>net</CODE> and combines
+the component parameter matrices into a single row vector <CODE>w</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbfunpak.htm">rbfunpak</a></CODE>, <CODE><a href="rbf.htm">rbf</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbfprior.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbfprior
+</title>
+</head>
+<body>
+<H1> rbfprior
+</H1>
+<h2>
+Purpose
+</h2>
+Create Gaussian prior and output layer mask for RBF.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+[mask, prior] = rbfprior(rbfunc, nin, nhidden, nout, aw2, ab2)</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>[mask, prior] = rbfprior(rbfunc, nin, nhidden, nout, aw2, ab2)</CODE> 
+generates a vector
+<CODE>mask</CODE>  that selects only the output
+layer weights.  This is because most uses of RBF networks in a Bayesian
+context have fixed basis functions with the output layer as the only
+adjustable parameters.  In particular, the Neuroscale output error function
+is designed to work only with this mask.
+
+<p>The return value
+<CODE>prior</CODE> is a data structure, 
+with fields <CODE>prior.alpha</CODE> and <CODE>prior.index</CODE>, which
+specifies a Gaussian prior distribution for the network weights in an
+RBF network. The parameters <CODE>aw2</CODE> and <CODE>ab2</CODE> are all
+scalars and represent the regularization coefficients for two groups
+of parameters in the network corresponding to
+ second-layer weights, and second-layer biases
+respectively. Then <CODE>prior.alpha</CODE> represents a column vector of
+length 2 containing the parameters, and <CODE>prior.index</CODE> is a matrix
+specifying which weights belong in each group. Each column has one
+element for each weight in the matrix, using the standard ordering as
+defined in <CODE>rbfpak</CODE>, and each element is 1 or 0 according to
+whether the weight is a member of the corresponding group or not. 
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="rbferr.htm">rbferr</a></CODE>, <CODE><a href="rbfgrad.htm">rbfgrad</a></CODE>, <CODE><a href="evidence.htm">evidence</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbfsetbf.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbfsetbf
+</title>
+</head>
+<body>
+<H1> rbfsetbf
+</H1>
+<h2>
+Purpose
+</h2>
+Set basis functions of RBF from data.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = rbfsetbf(net, options, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = rbfsetbf(net, options, x)</CODE> sets the basis functions of the
+RBF network <CODE>net</CODE> so that they model the unconditional density of the
+dataset <CODE>x</CODE>.  This is done by training a GMM with spherical covariances
+using <CODE>gmmem</CODE>.  The <CODE>options</CODE> vector is passed to <CODE>gmmem</CODE>.
+The widths of the functions are set by a call to <CODE>rbfsetfw</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbftrain.htm">rbftrain</a></CODE>, <CODE><a href="rbfsetfw.htm">rbfsetfw</a></CODE>, <CODE><a href="gmmem.htm">gmmem</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbfsetfw.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbfsetfw
+</title>
+</head>
+<body>
+<H1> rbfsetfw
+</H1>
+<h2>
+Purpose
+</h2>
+Set basis function widths of RBF.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = rbfsetfw(net, scale)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = rbfsetfw(net, scale)</CODE> sets the widths of
+the basis functions of the
+RBF network <CODE>net</CODE>.
+If Gaussian basis functions are used, then the variances are set to
+the largest squared distance between centres if <CODE>scale</CODE> is non-positive
+and <CODE>scale</CODE> times the mean distance of each centre to its nearest
+neighbour if <CODE>scale</CODE> is positive.  Non-Gaussian basis functions do
+not have a width.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbftrain.htm">rbftrain</a></CODE>, <CODE><a href="rbfsetbf.htm">rbfsetbf</a></CODE>, <CODE><a href="gmmem.htm">gmmem</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbftrain.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,90 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbftrain
+</title>
+</head>
+<body>
+<H1> rbftrain
+</H1>
+<h2>
+Purpose
+</h2>
+Two stage training of RBF network.
+
+<p><h2>
+Description
+</h2>
+<CODE>net = rbftrain(net, options, x, t)</CODE> uses a 
+two stage training
+algorithm to set the weights in the RBF model structure <CODE>net</CODE>.
+Each row of <CODE>x</CODE> corresponds to one
+input vector and each row of <CODE>t</CODE> contains the corresponding target vector.
+The centres are determined by fitting a Gaussian mixture model
+with circular covariances using the EM algorithm through a call to
+<CODE>rbfsetbf</CODE>.  (The mixture model is
+initialised using a small number of iterations of the K-means algorithm.)
+If the activation functions are Gaussians, then the basis function widths
+are then set to the maximum inter-centre squared distance.
+
+<p>For linear outputs, 
+the hidden to output
+weights that give rise to the least squares solution
+can then be determined using the pseudo-inverse. For neuroscale outputs,
+the hidden to output weights are determined using the iterative shadow
+targets algorithm.
+ Although this two stage
+procedure may not give solutions with as low an error as using general 
+purpose non-linear optimisers, it is much faster.
+
+<p>The options vector may have two rows: if this is the case, then the second row
+is passed to <CODE>rbfsetbf</CODE>, which allows the user to specify a different
+number iterations for RBF and GMM training.
+The optional parameters to <CODE>rbftrain</CODE> have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values during EM training.
+
+<p><CODE>options(2)</CODE> is a measure of the precision required for the value
+of the weights <CODE>w</CODE> at the solution.
+
+<p><CODE>options(3)</CODE> is a measure of the precision required of the objective
+function at the solution.  Both this and the previous condition must be
+satisfied for termination.
+
+<p><CODE>options(5)</CODE> is set to 1 if the basis functions parameters should remain
+unchanged; default 0.
+
+<p><CODE>options(6)</CODE> is set to 1 if the output layer weights should be should 
+set using PCA. This is only relevant for Neuroscale outputs; default 0.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations for the shadow
+targets algorithm; 
+default 100.
+
+<p><h2>
+Example
+</h2>
+The following example creates an RBF network and then trains it:
+<PRE>
+
+net = rbf(1, 4, 1, 'gaussian');
+options(1, :) = foptions;
+options(2, :) = foptions;
+options(2, 14) = 10;  % 10 iterations of EM
+options(2, 5)  = 1;   % Check for covariance collapse in EM
+net = rbftrain(net, options, x, t);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbf.htm">rbf</a></CODE>, <CODE><a href="rbferr.htm">rbferr</a></CODE>, <CODE><a href="rbffwd.htm">rbffwd</a></CODE>, <CODE><a href="rbfgrad.htm">rbfgrad</a></CODE>, <CODE><a href="rbfpak.htm">rbfpak</a></CODE>, <CODE><a href="rbfunpak.htm">rbfunpak</a></CODE>, <CODE><a href="rbfsetbf.htm">rbfsetbf</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rbfunpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rbfunpak
+</title>
+</head>
+<body>
+<H1> rbfunpak
+</H1>
+<h2>
+Purpose
+</h2>
+Separates a vector of RBF weights into its components.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = rbfunpak(net, w)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = rbfunpak(net, w)</CODE> takes an RBF network data structure <CODE>net</CODE> and 
+a weight vector <CODE>w</CODE>, and returns a network data structure identical to
+the input network, except that the centres
+<CODE>c</CODE>, the widths <CODE>wi</CODE>, the second-layer
+weight matrix <CODE>w2</CODE> and the second-layer bias vector <CODE>b2</CODE> have all
+been set to the corresponding elements of <CODE>w</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="rbfpak.htm">rbfpak</a></CODE>, <CODE><a href="rbf.htm">rbf</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rosegrad.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rosegrad
+</title>
+</head>
+<body>
+<H1> rosegrad
+</H1>
+<h2>
+Purpose
+</h2>
+Calculate gradient of Rosenbrock's function.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+g = rosegrad(x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>g = rosegrad(x)</CODE> computes the gradient of Rosenbrock's function
+at each row of <CODE>x</CODE>, which should have two columns.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demopt1.htm">demopt1</a></CODE>, <CODE><a href="rosen.htm">rosen</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/rosen.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual rosen
+</title>
+</head>
+<body>
+<H1> rosen
+</H1>
+<h2>
+Purpose
+</h2>
+Calculate Rosenbrock's function.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+y = rosen(x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>y = rosen(x)</CODE> computes the value of Rosenbrock's function
+at each row of <CODE>x</CODE>, which should have two columns.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="demopt1.htm">demopt1</a></CODE>, <CODE><a href="rosegrad.htm">rosegrad</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/scg.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual scg
+</title>
+</head>
+<body>
+<H1> scg
+</H1>
+<h2>
+Purpose
+</h2>
+Scaled conjugate gradient optimization.
+
+<p><h2>
+Description
+</h2>
+<CODE>[x, options] = scg(f, x, options, gradf)</CODE> uses a scaled conjugate 
+gradients
+algorithm to find a local minimum of the function <CODE>f(x)</CODE> whose
+gradient is given by <CODE>gradf(x)</CODE>.  Here <CODE>x</CODE> is a row vector
+and <CODE>f</CODE> returns a scalar value.
+The point at which <CODE>f</CODE> has a local minimum
+is returned as <CODE>x</CODE>.  The function value at that point is returned
+in <CODE>options(8)</CODE>.
+
+<p><CODE>[x, options, flog, pointlog, scalelog] = scg(f, x, options, gradf)</CODE>
+also returns (optionally) a log of the function values
+after each cycle in <CODE>flog</CODE>, a log
+of the points visited in <CODE>pointlog</CODE>, and a log of the scale values
+in the algorithm in <CODE>scalelog</CODE>.
+
+<p><CODE>scg(f, x, options, gradf, p1, p2, ...)</CODE> allows
+additional arguments to be passed to <CODE>f()</CODE> and <CODE>gradf()</CODE>. 
+  
+The optional parameters have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values; also logs error 
+values in the return argument <CODE>errlog</CODE>, and the points visited
+in the return argument <CODE>pointslog</CODE>.  If <CODE>options(1)</CODE> is set to 0,
+then only warning messages are displayed.  If <CODE>options(1)</CODE> is -1,
+then nothing is displayed.
+
+<p><CODE>options(2)</CODE> is a measure of the absolute precision required for the value
+of <CODE>x</CODE> at the solution.  If the absolute difference between
+the values of <CODE>x</CODE> between two successive steps is less than
+<CODE>options(2)</CODE>, then this condition is satisfied.
+
+<p><CODE>options(3)</CODE> is a measure of the precision required of the objective
+function at the solution.  If the absolute difference between the
+objective function values between two successive steps is less than
+<CODE>options(3)</CODE>, then this condition is satisfied.
+Both this and the previous condition must be
+satisfied for termination.
+
+<p><CODE>options(9)</CODE> is set to 1 to check the user defined gradient function.
+
+<p><CODE>options(10)</CODE> returns the total number of function evaluations (including
+those in any line searches).
+
+<p><CODE>options(11)</CODE> returns the total number of gradient evaluations.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations; default 100.
+
+<p><h2>
+Examples
+</h2>
+An example of 
+the use of the additional arguments is the minimization of an error
+function for a neural network:
+<PRE>
+
+w = scg('neterr', w, options, 'netgrad', net, x, t);
+</PRE>
+
+
+<p><h2>
+Algorithm
+</h2>
+The search direction is re-started after every <CODE>nparams</CODE> 
+successful weight updates where <CODE>nparams</CODE> is the total number of 
+parameters in <CODE>x</CODE>. The algorithm is based on that given by Williams
+(1991), with a simplified procedure for updating <CODE>lambda</CODE> when
+<CODE>rho < 0.25</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="conjgrad.htm">conjgrad</a></CODE>, <CODE><a href="quasinew.htm">quasinew</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/som.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual som
+</title>
+</head>
+<body>
+<H1> som
+</H1>
+<h2>
+Purpose
+</h2>
+Creates a Self-Organising Map.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+net = som(nin, map_size)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = som(nin, map_size)</CODE> creates a SOM <CODE>net</CODE>
+with input dimension (i.e. data dimension) <CODE>nin</CODE> and map dimensions
+<CODE>map_size</CODE>.  Only two-dimensional maps are currently implemented.
+
+<p>The fields in <CODE>net</CODE> are
+<PRE>
+
+  type = 'som'
+  nin = number of inputs
+  map_dim = dimension of map (constrained to be 2)
+  map_size = grid size: number of nodes in each dimension
+  num_nodes = number of nodes: the product of values in map_size
+  map = map_dim+1 dimensional array containing nodes
+  inode_dist = map of inter-node distances using Manhatten metric
+</PRE>
+
+
+<p>The map contains the node vectors arranged column-wise in the first
+dimension of the array.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="kmeans.htm">kmeans</a></CODE>, <CODE><a href="somfwd.htm">somfwd</a></CODE>, <CODE><a href="somtrain.htm">somtrain</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/somfwd.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual somfwd
+</title>
+</head>
+<body>
+<H1> somfwd
+</H1>
+<h2>
+Purpose
+</h2>
+Forward propagation through a Self-Organising Map.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+d2 = somfwd(net, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>d2 = somfwd(net, x)</CODE> propagates the data matrix <CODE>x</CODE> through
+ a SOM <CODE>net</CODE>, returning the squared distance matrix <CODE>d2</CODE> with
+dimension <CODE>nin</CODE> by <CODE>num_nodes</CODE>.  The $i$th row represents the
+squared Euclidean distance to each of the nodes of the SOM.
+
+<p><CODE>[d2, win_nodes] = somfwd(net, x)</CODE> also returns the indices of the
+winning nodes for each pattern.
+
+<p><h2>
+Example
+</h2>
+
+<p>The following code fragment creates a SOM with a $5times 5$ map for an
+8-dimensional data space.  It then applies the test data to the map.
+<PRE>
+
+net = som(8, [5, 5]);
+[d2, wn] = somfwd(net, test_data);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="som.htm">som</a></CODE>, <CODE><a href="somtrain.htm">somtrain</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/sompak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual sompak
+</title>
+</head>
+<body>
+<H1> sompak
+</H1>
+<h2>
+Purpose
+</h2>
+Combines node weights into one weights matrix.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+c = sompak(net)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>c = sompak(net)</CODE> takes a SOM data structure <CODE>net</CODE> and
+combines the node weights into a matrix of centres
+<CODE>c</CODE> where each row represents the node vector.
+
+<p>The ordering of the parameters in <CODE>w</CODE> is defined by the indexing of the
+multi-dimensional array <CODE>net.map</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="som.htm">som</a></CODE>, <CODE><a href="somunpak.htm">somunpak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/somtrain.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,104 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual somtrain
+</title>
+</head>
+<body>
+<H1> somtrain
+</H1>
+<h2>
+Purpose
+</h2>
+Kohonen training algorithm for SOM.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+
+net = somtrain{net, options, x)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = somtrain{net, options, x)</CODE> uses Kohonen's algorithm to
+train a SOM.  Both on-line and batch algorithms are implemented.
+The learning rate (for on-line) and neighbourhood size decay linearly.
+There is no error function minimised during training (so there is
+no termination criterion other than the number of epochs), but the 
+sum-of-squares is computed and returned in <CODE>options(8)</CODE>.
+
+<p>The optional parameters have the following interpretations.
+
+<p><CODE>options(1)</CODE> is set to 1 to display error values; also logs learning
+rate <CODE>alpha</CODE> and neighbourhood size <CODE>nsize</CODE>.
+Otherwise nothing is displayed.
+
+<p><CODE>options(5)</CODE> determines whether the patterns are sampled randomly
+with replacement. If it is 0 (the default), then patterns are sampled
+in order.  This is only relevant to the on-line algorithm.
+
+<p><CODE>options(6)</CODE> determines if the on-line or batch algorithm is
+used. If it is 1
+then the batch algorithm is used.  If it is 0
+(the default) then the on-line algorithm is used.
+
+<p><CODE>options(14)</CODE> is the maximum number of iterations (passes through
+the complete pattern set); default 100.
+
+<p><CODE>options(15)</CODE> is the final neighbourhood size; default value is the
+same as the initial neighbourhood size.
+
+<p><CODE>options(16)</CODE> is the final learning rate; default value is the same
+as the initial learning rate.
+
+<p><CODE>options(17)</CODE> is the initial neighbourhood size; default 0.5*maximum
+map size.
+
+<p><CODE>options(18)</CODE> is the initial learning rate; default 0.9.  This parameter
+must be positive.
+
+<p><h2>
+Examples
+</h2>
+The following example performs on-line training on a SOM in two stages:
+ordering and convergence.
+<PRE>
+
+net = som(nin, [8, 7]);
+options = foptions;
+
+<p>% Ordering phase
+options(1) = 1;
+options(14) = 50;
+options(18) = 0.9;  % Initial learning rate
+options(16) = 0.05; % Final learning rate
+options(17) = 8;    % Initial neighbourhood size
+options(15) = 1;    % Final neighbourhood size
+net2 = somtrain(net, options, x);
+
+<p>% Convergence phase
+options(14) = 400;
+options(18) = 0.05;
+options(16) = 0.01;
+options(17) = 0;
+options(15) = 0;
+net3 = somtrain(net2, options, x);
+</PRE>
+
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="kmeans.htm">kmeans</a></CODE>, <CODE><a href="som.htm">som</a></CODE>, <CODE><a href="somfwd.htm">somfwd</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/nethelp3.3/somunpak.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<html>
+<head>
+<title>
+Netlab Reference Manual somunpak
+</title>
+</head>
+<body>
+<H1> somunpak
+</H1>
+<h2>
+Purpose
+</h2>
+Replaces node weights in SOM.
+
+<p><h2>
+Synopsis
+</h2>
+<PRE>
+net = somunpak(net, w)
+</PRE>
+
+
+<p><h2>
+Description
+</h2>
+<CODE>net = somunpak(net, w)</CODE> takes a SOM data structure <CODE>net</CODE> and
+weight matrix <CODE>w</CODE> (each node represented by a row) and
+puts the nodes back into the multi-dimensional array <CODE>net.map</CODE>.
+
+<p>The ordering of the parameters in <CODE>w</CODE> is defined by the indexing of the
+multi-dimensional array <CODE>net.map</CODE>.
+
+<p><h2>
+See Also
+</h2>
+<CODE><a href="som.htm">som</a></CODE>, <CODE><a href="sompak.htm">sompak</a></CODE><hr>
+<b>Pages:</b>
+<a href="index.htm">Index</a>
+<hr>
+<p>Copyright (c) Ian T Nabney (1996-9)
+
+
+</body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,180 @@
+/Contents.m/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/LICENSE/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/conffig.m/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/confmat.m/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/conjgrad.m/1.1.1.1/Wed Apr 27 17:59:04 2005//
+/consist.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/convertoldnet.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/datread.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/datwrite.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/dem2ddat.m/1.1.1.1/Tue May 10 01:32:18 2005//
+/demard.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demev1.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demev2.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demev3.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demgauss.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demglm1.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demglm2.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demgmm1.m/1.1.1.1/Sun May  8 17:51:14 2005//
+/demgmm2.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demgmm3.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demgmm4.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demgmm5.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demgp.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demgpard.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demgpot.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demgtm1.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demgtm2.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demhint.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demhmc1.m/1.1.1.1/Tue May 24 00:03:34 2005//
+/demhmc2.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demhmc3.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demkmn1.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demknn1.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demmdn1.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demmet1.m/1.1.1.1/Mon May 23 06:23:08 2005//
+/demmlp1.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demmlp2.m/1.1.1.1/Wed Apr 27 17:59:06 2005//
+/demnlab.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/demns1.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/demolgd1.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/demopt1.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/dempot.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/demprgp.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/demprior.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/demrbf1.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/demsom1.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/demtrain.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/dist2.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/eigdec.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/errbayes.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/evidence.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/fevbayes.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/gauss.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/gbayes.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/glm.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/glmderiv.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/glmerr.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/glmevfwd.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/glmfwd.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/glmgrad.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/glmhess.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/glminit.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/glmpak.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/glmtrain.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/glmunpak.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/gmm.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/gmmactiv.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/gmmem.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/gmminit.m/1.1.1.1/Mon May 23 23:44:46 2005//
+/gmmpak.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/gmmpost.m/1.1.1.1/Wed Apr 27 17:59:08 2005//
+/gmmprob.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gmmsamp.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gmmunpak.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gp.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gpcovar.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gpcovarf.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gpcovarp.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gperr.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gpfwd.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gpgrad.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gpinit.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gppak.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gpunpak.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gradchek.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/graddesc.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gsamp.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gtm.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gtmem.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gtmfwd.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gtminit.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gtmlmean.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gtmlmode.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gtmmag.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gtmpost.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/gtmprob.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/hbayes.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/hesschek.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/hintmat.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/hinton.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/histp.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/hmc.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/kmeansNetlab.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/knn.m/1.1.1.1/Wed Apr 27 17:59:10 2005//
+/knnfwd.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/linef.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/linemin.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/maxitmess.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdn.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdn2gmm.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdndist2.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdnerr.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdnfwd.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdngrad.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdninit.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdnnet.mat/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdnpak.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdnpost.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdnprob.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mdnunpak.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/metrop.m/1.1.1.1/Mon May 23 23:07:40 2005//
+/minbrack.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlp.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlpbkp.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlpderiv.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlperr.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlpevfwd.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlpfwd.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlpgrad.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlphdotv.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlphess.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlphint.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlpinit.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlppak.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlpprior.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlptrain.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/mlpunpak.m/1.1.1.1/Wed Apr 27 17:59:12 2005//
+/netderiv.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/neterr.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/netevfwd.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/netgrad.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/nethess.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/netinit.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/netlab3.3.zip/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/netlogo.mat/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/netopt.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/netpak.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/netunpak.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/oilTrn.dat/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/oilTst.dat/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/olgd.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/pca.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/plotmat.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/ppca.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/quasinew.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbf.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbfbkp.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbfderiv.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbferr.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbfevfwd.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbffwd.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbfgrad.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbfhess.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbfjacob.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbfpak.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbfprior.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbfsetbf.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbfsetfw.m/1.1.1.1/Wed Apr 27 17:59:14 2005//
+/rbftrain.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/rbfunpak.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/rosegrad.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/rosen.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/scg.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/som.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/somfwd.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/sompak.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/somtrain.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/somunpak.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/xor.dat/1.1.1.1/Wed Apr 27 17:59:16 2005//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/netlab3.3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/Contents.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,176 @@
+% Netlab Toolbox
+% Version 3.3.1 	 18-Jun-2004
+%
+% conffig  -  Display a confusion matrix. 
+% confmat  -  Compute a confusion matrix. 
+% conjgrad -  Conjugate gradients optimization. 
+% consist  -  Check that arguments are consistent. 
+% convertoldnet-  Convert pre-2.3 release MLP and MDN nets to new format 
+% datread  -  Read data from an ascii file. 
+% datwrite -  Write data to ascii file. 
+% dem2ddat -  Generates two dimensional data for demos. 
+% demard   -  Automatic relevance determination using the MLP. 
+% demev1   -  Demonstrate Bayesian regression for the MLP. 
+% demev2   -  Demonstrate Bayesian classification for the MLP. 
+% demev3   -  Demonstrate Bayesian regression for the RBF. 
+% demgauss -  Demonstrate sampling from Gaussian distributions. 
+% demglm1  -  Demonstrate simple classification using a generalized linear model. 
+% demglm2  -  Demonstrate simple classification using a generalized linear model. 
+% demgmm1  -  Demonstrate density modelling with a Gaussian mixture model. 
+% demgmm3  -  Demonstrate density modelling with a Gaussian mixture model. 
+% demgmm4  -  Demonstrate density modelling with a Gaussian mixture model. 
+% demgmm5  -  Demonstrate density modelling with a PPCA mixture model. 
+% demgp    -  Demonstrate simple regression using a Gaussian Process. 
+% demgpard -  Demonstrate ARD using a Gaussian Process. 
+% demgpot  -  Computes the gradient of the negative log likelihood for a mixture model. 
+% demgtm1  -  Demonstrate EM for GTM. 
+% demgtm2  -  Demonstrate GTM for visualisation. 
+% demhint  -  Demonstration of Hinton diagram for 2-layer feed-forward network. 
+% demhmc1  -  Demonstrate Hybrid Monte Carlo sampling on mixture of two Gaussians. 
+% demhmc2  -  Demonstrate Bayesian regression with Hybrid Monte Carlo sampling. 
+% demhmc3  -  Demonstrate Bayesian regression with Hybrid Monte Carlo sampling. 
+% demkmean -  Demonstrate simple clustering model trained with K-means. 
+% demknn1  -  Demonstrate nearest neighbour classifier. 
+% demmdn1  -  Demonstrate fitting a multi-valued function using a Mixture Density Network. 
+% demmet1  -  Demonstrate Markov Chain Monte Carlo sampling on a Gaussian. 
+% demmlp1  -  Demonstrate simple regression using a multi-layer perceptron 
+% demmlp2  -  Demonstrate simple classification using a multi-layer perceptron 
+% demnlab  -  A front-end Graphical User Interface to the demos 
+% demns1   -  Demonstrate Neuroscale for visualisation. 
+% demolgd1 -  Demonstrate simple MLP optimisation with on-line gradient descent 
+% demopt1  -  Demonstrate different optimisers on Rosenbrock's function. 
+% dempot   -  Computes the negative log likelihood for a mixture model. 
+% demprgp  -  Demonstrate sampling from a Gaussian Process prior. 
+% demprior -  Demonstrate sampling from a multi-parameter Gaussian prior. 
+% demrbf1  -  Demonstrate simple regression using a radial basis function network. 
+% demsom1  -  Demonstrate SOM for visualisation. 
+% demtrain -  Demonstrate training of MLP network. 
+% dist2    -  Calculates squared distance between two sets of points. 
+% eigdec   -  Sorted eigendecomposition 
+% errbayes -  Evaluate Bayesian error function for network. 
+% evidence -  Re-estimate hyperparameters using evidence approximation. 
+% fevbayes -  Evaluate Bayesian regularisation for network forward propagation. 
+% gauss    -  Evaluate a Gaussian distribution. 
+% gbayes   -  Evaluate gradient of Bayesian error function for network. 
+% glm      -  Create a generalized linear model. 
+% glmderiv -  Evaluate derivatives of GLM outputs with respect to weights. 
+% glmerr   -  Evaluate error function for generalized linear model. 
+% glmevfwd -  Forward propagation with evidence for GLM 
+% glmfwd   -  Forward propagation through generalized linear model. 
+% glmgrad  -  Evaluate gradient of error function for generalized linear model. 
+% glmhess  -  Evaluate the Hessian matrix for a generalised linear model. 
+% glminit  -  Initialise the weights in a generalized linear model. 
+% glmpak   -  Combines weights and biases into one weights vector. 
+% glmtrain -  Specialised training of generalized linear model 
+% glmunpak -  Separates weights vector into weight and bias matrices. 
+% gmm      -  Creates a Gaussian mixture model with specified architecture. 
+% gmmactiv -  Computes the activations of a Gaussian mixture model. 
+% gmmem    -  EM algorithm for Gaussian mixture model. 
+% gmminit  -  Initialises Gaussian mixture model from data 
+% gmmpak   -  Combines all the parameters in a Gaussian mixture model into one vector. 
+% gmmpost  -  Computes the class posterior probabilities of a Gaussian mixture model. 
+% gmmprob  -  Computes the data probability for a Gaussian mixture model. 
+% gmmsamp  -  Sample from a Gaussian mixture distribution. 
+% gmmunpak -  Separates a vector of Gaussian mixture model parameters into its components. 
+% gp       -  Create a Gaussian Process. 
+% gpcovar  -  Calculate the covariance for a Gaussian Process. 
+% gpcovarf -  Calculate the covariance function for a Gaussian Process. 
+% gpcovarp -  Calculate the prior covariance for a Gaussian Process. 
+% gperr    -  Evaluate error function for Gaussian Process. 
+% gpfwd    -  Forward propagation through Gaussian Process. 
+% gpgrad   -  Evaluate error gradient for Gaussian Process. 
+% gpinit   -  Initialise Gaussian Process model. 
+% gppak    -  Combines GP hyperparameters into one vector. 
+% gpunpak  -  Separates hyperparameter vector into components. 
+% gradchek -  Checks a user-defined gradient function using finite differences. 
+% graddesc -  Gradient descent optimization. 
+% gsamp    -  Sample from a Gaussian distribution. 
+% gtm      -  Create a Generative Topographic Map. 
+% gtmem    -  EM algorithm for Generative Topographic Mapping. 
+% gtmfwd   -  Forward propagation through GTM. 
+% gtminit  -  Initialise the weights and latent sample in a GTM. 
+% gtmlmean -  Mean responsibility for data in a GTM. 
+% gtmlmode -  Mode responsibility for data in a GTM. 
+% gtmmag   -  Magnification factors for a GTM 
+% gtmpost  -  Latent space responsibility for data in a GTM. 
+% gtmprob  -  Probability for data under a GTM. 
+% hbayes   -  Evaluate Hessian of Bayesian error function for network. 
+% hesschek -  Use central differences to confirm correct evaluation of Hessian matrix. 
+% hintmat  -  Evaluates the coordinates of the patches for a Hinton diagram. 
+% hinton   -  Plot Hinton diagram for a weight matrix. 
+% histp    -  Histogram estimate of 1-dimensional probability distribution. 
+% hmc      -  Hybrid Monte Carlo sampling. 
+% kmeans   -  Trains a k means cluster model. 
+% knn      -  Creates a K-nearest-neighbour classifier. 
+% knnfwd   -  Forward propagation through a K-nearest-neighbour classifier. 
+% linef    -  Calculate function value along a line. 
+% linemin  -  One dimensional minimization. 
+% maxitmess-  Create a standard error message when training reaches max. iterations. 
+% mdn      -  Creates a Mixture Density Network with specified architecture. 
+% mdn2gmm  -  Converts an MDN mixture data structure to array of GMMs. 
+% mdndist2 -  Calculates squared distance between centres of Gaussian kernels and data 
+% mdnerr   -  Evaluate error function for Mixture Density Network. 
+% mdnfwd   -  Forward propagation through Mixture Density Network. 
+% mdngrad  -  Evaluate gradient of error function for Mixture Density Network. 
+% mdninit  -  Initialise the weights in a Mixture Density Network. 
+% mdnpak   -  Combines weights and biases into one weights vector. 
+% mdnpost  -  Computes the posterior probability for each MDN mixture component. 
+% mdnprob  -  Computes the data probability likelihood for an MDN mixture structure. 
+% mdnunpak -  Separates weights vector into weight and bias matrices. 
+% metrop   -  Markov Chain Monte Carlo sampling with Metropolis algorithm. 
+% minbrack -  Bracket a minimum of a function of one variable. 
+% mlp      -  Create a 2-layer feedforward network. 
+% mlpbkp   -  Backpropagate gradient of error function for 2-layer network. 
+% mlpderiv -  Evaluate derivatives of network outputs with respect to weights. 
+% mlperr   -  Evaluate error function for 2-layer network. 
+% mlpevfwd -  Forward propagation with evidence for MLP 
+% mlpfwd   -  Forward propagation through 2-layer network. 
+% mlpgrad  -  Evaluate gradient of error function for 2-layer network. 
+% mlphdotv -  Evaluate the product of the data Hessian with a vector. 
+% mlphess  -  Evaluate the Hessian matrix for a multi-layer perceptron network. 
+% mlphint  -  Plot Hinton diagram for 2-layer feed-forward network. 
+% mlpinit  -  Initialise the weights in a 2-layer feedforward network. 
+% mlppak   -  Combines weights and biases into one weights vector. 
+% mlpprior -  Create Gaussian prior for mlp. 
+% mlptrain -  Utility to train an MLP network for demtrain 
+% mlpunpak -  Separates weights vector into weight and bias matrices. 
+% netderiv -  Evaluate derivatives of network outputs by weights generically. 
+% neterr   -  Evaluate network error function for generic optimizers 
+% netevfwd -  Generic forward propagation with evidence for network 
+% netgrad  -  Evaluate network error gradient for generic optimizers 
+% nethess  -  Evaluate network Hessian 
+% netinit  -  Initialise the weights in a network. 
+% netopt   -  Optimize the weights in a network model. 
+% netpak   -  Combines weights and biases into one weights vector. 
+% netunpak -  Separates weights vector into weight and bias matrices. 
+% olgd     -  On-line gradient descent optimization. 
+% pca      -  Principal Components Analysis 
+% plotmat  -  Display a matrix. 
+% ppca     -  Probabilistic Principal Components Analysis 
+% quasinew -  Quasi-Newton optimization. 
+% rbf      -  Creates an RBF network with specified architecture 
+% rbfbkp   -  Backpropagate gradient of error function for RBF network. 
+% rbfderiv -  Evaluate derivatives of RBF network outputs with respect to weights. 
+% rbferr   -  Evaluate error function for RBF network. 
+% rbfevfwd -  Forward propagation with evidence for RBF 
+% rbffwd   -  Forward propagation through RBF network with linear outputs. 
+% rbfgrad  -  Evaluate gradient of error function for RBF network. 
+% rbfhess  -  Evaluate the Hessian matrix for RBF network. 
+% rbfjacob -  Evaluate derivatives of RBF network outputs with respect to inputs. 
+% rbfpak   -  Combines all the parameters in an RBF network into one weights vector. 
+% rbfprior -  Create Gaussian prior and output layer mask for RBF. 
+% rbfsetbf -  Set basis functions of RBF from data. 
+% rbfsetfw -  Set basis function widths of RBF. 
+% rbftrain -  Two stage training of RBF network. 
+% rbfunpak -  Separates a vector of RBF weights into its components. 
+% rosegrad -  Calculate gradient of Rosenbrock's function. 
+% rosen    -  Calculate Rosenbrock's function. 
+% scg      -  Scaled conjugate gradient optimization. 
+% som      -  Creates a Self-Organising Map. 
+% somfwd   -  Forward propagation through a Self-Organising Map. 
+% sompak   -  Combines node weights into one weights matrix. 
+% somtrain -  Kohonen training algorithm for SOM. 
+% somunpak -  Replaces node weights in SOM. 
+%
+%	Copyright (c) Ian T Nabney (1996-2001)
+%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/LICENSE	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+      Copyright (c) 1996-2001, Ian T. Nabney
+      All rights reserved.
+
+      Redistribution and use in source and binary
+      forms, with or without modification, are
+      permitted provided that the following
+      conditions are met:
+
+         * Redistributions of source code must
+           retain the above copyright notice, this
+           list of conditions and the following
+           disclaimer.
+         * Redistributions in binary form must
+           reproduce the above copyright notice,
+           this list of conditions and the
+           following disclaimer in the
+           documentation and/or other materials
+           provided with the distribution.
+         * Neither the name of the Aston University, Birmingham, U.K.
+           nor the names of its contributors may be
+           used to endorse or promote products
+           derived from this software without
+           specific prior written permission.
+
+      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+      HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+      EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
+      NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+      MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+      PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+      REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+      DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+      EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+      (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+      OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+      DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+      HOWEVER CAUSED AND ON ANY THEORY OF
+      LIABILITY, WHETHER IN CONTRACT, STRICT
+      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+      OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+      OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+      POSSIBILITY OF SUCH DAMAGE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/conffig.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function fh=conffig(y, t)
+%CONFFIG Display a confusion matrix.
+%
+%	Description
+%	CONFFIG(Y, T) displays the confusion matrix  and classification
+%	performance for the predictions mat{y} compared with the targets T.
+%	The data is assumed to be in a 1-of-N encoding, unless there is just
+%	one column, when it is assumed to be a 2 class problem with a 0-1
+%	encoding.  Each row of Y and T corresponds to a single example.
+%
+%	In the confusion matrix, the rows represent the true classes and the
+%	columns the predicted classes.
+%
+%	FH = CONFFIG(Y, T) also returns the figure handle FH which  can be
+%	used, for instance, to delete the figure when it is no longer needed.
+%
+%	See also
+%	CONFMAT, DEMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[C, rate] = confmat(y, t);
+
+fh = figure('Name', 'Confusion matrix', ...
+  'NumberTitle', 'off');
+
+plotmat(C, 'k', 'k', 14);
+title(['Classification rate: ' num2str(rate(1)) '%'], 'FontSize', 14);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/confmat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,56 @@
+function [C,rate]=confmat(Y,T)
+%CONFMAT Compute a confusion matrix.
+%
+%	Description
+%	[C, RATE] = CONFMAT(Y, T) computes the confusion matrix C and
+%	classification performance RATE for the predictions mat{y} compared
+%	with the targets T.  The data is assumed to be in a 1-of-N encoding,
+%	unless there is just one column, when it is assumed to be a 2 class
+%	problem with a 0-1 encoding.  Each row of Y and T corresponds to a
+%	single example.
+%
+%	In the confusion matrix, the rows represent the true classes and the
+%	columns the predicted classes.  The vector RATE has two entries: the
+%	percentage of correct classifications and the total number of correct
+%	classifications.
+%
+%	See also
+%	CONFFIG, DEMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[n c]=size(Y);
+[n2 c2]=size(T);
+
+if n~=n2 | c~=c2
+  error('Outputs and targets are different sizes')
+end
+
+if c > 1
+  % Find the winning class assuming 1-of-N encoding
+  [maximum Yclass] = max(Y', [], 1);
+
+  TL=[1:c]*T';
+else
+  % Assume two classes with 0-1 encoding
+  c = 2;
+  class2 = find(T > 0.5);
+  TL = ones(n, 1);
+  TL(class2) = 2;
+  class2 = find(Y > 0.5);
+  Yclass = ones(n, 1);
+  Yclass(class2) = 2;
+end
+
+% Compute 
+correct = (Yclass==TL);
+total=sum(sum(correct));
+rate=[total*100/n total];
+
+C=zeros(c,c);
+for i=1:c
+  for j=1:c
+    C(i,j) = sum((Yclass==j).*(TL==i));
+  end
+end   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/conjgrad.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,168 @@
+function [x, options, flog, pointlog] = conjgrad(f, x, options, gradf, ...
+                                    varargin)
+%CONJGRAD Conjugate gradients optimization.
+%
+%	Description
+%	[X, OPTIONS, FLOG, POINTLOG] = CONJGRAD(F, X, OPTIONS, GRADF) uses a
+%	conjugate gradients algorithm to find the minimum of the function
+%	F(X) whose gradient is given by GRADF(X).  Here X is a row vector and
+%	F returns a scalar value.  The point at which F has a local minimum
+%	is returned as X.  The function value at that point is returned in
+%	OPTIONS(8).  A log of the function values after each cycle is
+%	(optionally) returned in FLOG, and a log of the points visited is
+%	(optionally) returned in POINTLOG.
+%
+%	CONJGRAD(F, X, OPTIONS, GRADF, P1, P2, ...) allows  additional
+%	arguments to be passed to F() and GRADF().
+%
+%	The optional parameters have the following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values; also logs error
+%	values in the return argument ERRLOG, and the points visited in the
+%	return argument POINTSLOG.  If OPTIONS(1) is set to 0, then only
+%	warning messages are displayed.  If OPTIONS(1) is -1, then nothing is
+%	displayed.
+%
+%	OPTIONS(2) is a measure of the absolute precision required for the
+%	value of X at the solution.  If the absolute difference between the
+%	values of X between two successive steps is less than OPTIONS(2),
+%	then this condition is satisfied.
+%
+%	OPTIONS(3) is a measure of the precision required of the objective
+%	function at the solution.  If the absolute difference between the
+%	objective function values between two successive steps is less than
+%	OPTIONS(3), then this condition is satisfied. Both this and the
+%	previous condition must be satisfied for termination.
+%
+%	OPTIONS(9) is set to 1 to check the user defined gradient function.
+%
+%	OPTIONS(10) returns the total number of function evaluations
+%	(including those in any line searches).
+%
+%	OPTIONS(11) returns the total number of gradient evaluations.
+%
+%	OPTIONS(14) is the maximum number of iterations; default 100.
+%
+%	OPTIONS(15) is the precision in parameter space of the line search;
+%	default 1E-4.
+%
+%	See also
+%	GRADDESC, LINEMIN, MINBRACK, QUASINEW, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+%  Set up the options.
+if length(options) < 18
+  error('Options vector too short')
+end
+
+if(options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+
+% Set up options for line search
+line_options = foptions;
+% Need a precise line search for success
+if options(15) > 0
+  line_options(2) = options(15);
+else
+  line_options(2) = 1e-4;
+end
+
+display = options(1);
+
+% Next two lines allow conjgrad to work with expression strings
+f = fcnchk(f, length(varargin));
+gradf = fcnchk(gradf, length(varargin));
+
+%  Check gradients
+if (options(9))
+  feval('gradchek', x, f, gradf, varargin{:});
+end
+
+options(10) = 0;
+options(11) = 0;
+nparams = length(x);
+fnew = feval(f, x, varargin{:});
+options(10) = options(10) + 1;
+gradnew = feval(gradf, x, varargin{:});
+options(11) = options(11) + 1;
+d = -gradnew;		% Initial search direction
+br_min = 0;
+br_max = 1.0;	% Initial value for maximum distance to search along
+tol = sqrt(eps);
+
+j = 1;
+if nargout >= 3
+  flog(j, :) = fnew;
+  if nargout == 4
+    pointlog(j, :) = x;
+  end
+end
+
+while (j <= niters)
+
+  xold = x;
+  fold = fnew;
+  gradold = gradnew;
+
+  gg = gradold*gradold';
+  if (gg == 0.0)
+    % If the gradient is zero then we are done.
+    options(8) = fnew;
+    return;
+  end
+
+  % This shouldn't occur, but rest of code depends on d being downhill
+  if (gradnew*d' > 0)
+    d = -d;
+    if options(1) >= 0
+      warning('search direction uphill in conjgrad');
+    end
+  end
+
+  line_sd = d./norm(d);
+  [lmin, line_options] = feval('linemin', f, xold, line_sd, fold, ...
+    line_options, varargin{:});
+  options(10) = options(10) + line_options(10);
+  options(11) = options(11) + line_options(11);
+  % Set x and fnew to be the actual search point we have found
+  x = xold + lmin * line_sd;
+  fnew = line_options(8);
+
+  % Check for termination
+  if (max(abs(x - xold)) < options(2) & max(abs(fnew - fold)) < options(3))
+    options(8) = fnew;
+    return;
+  end
+
+  gradnew = feval(gradf, x, varargin{:});
+  options(11) = options(11) + 1;
+
+  % Use Polak-Ribiere formula to update search direction
+  gamma = ((gradnew - gradold)*(gradnew)')/gg;
+  d = (d .* gamma) - gradnew;
+
+  if (display > 0)
+    fprintf(1, 'Cycle %4d  Function %11.6f\n', j, line_options(8));
+  end
+
+  j = j + 1;
+  if nargout >= 3
+    flog(j, :) = fnew;
+    if nargout == 4
+      pointlog(j, :) = x;
+    end
+  end
+end
+
+% If we get here, then we haven't terminated in the given number of 
+% iterations.
+
+options(8) = fold;
+if (options(1) >= 0)
+  disp(maxitmess);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/consist.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,87 @@
+function errstring = consist(model, type, inputs, outputs)
+%CONSIST Check that arguments are consistent.
+%
+%	Description
+%
+%	ERRSTRING = CONSIST(NET, TYPE, INPUTS) takes a network data structure
+%	NET together with a string TYPE containing the correct network type,
+%	a matrix INPUTS of input vectors and checks that the data structure
+%	is consistent with the other arguments.  An empty string is returned
+%	if there is no error, otherwise the string contains the relevant
+%	error message.  If the TYPE string is empty, then any type of network
+%	is allowed.
+%
+%	ERRSTRING = CONSIST(NET, TYPE) takes a network data structure NET
+%	together with a string TYPE containing the correct  network type, and
+%	checks that the two types match.
+%
+%	ERRSTRING = CONSIST(NET, TYPE, INPUTS, OUTPUTS) also checks that the
+%	network has the correct number of outputs, and that the number of
+%	patterns in the INPUTS and OUTPUTS is the same.  The fields in NET
+%	that are used are
+%	  type
+%	  nin
+%	  nout
+%
+%	See also
+%	MLPFWD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Assume that all is OK as default
+errstring = '';
+
+% If type string is not empty
+if ~isempty(type)
+  % First check that model has type field
+  if ~isfield(model, 'type')
+    errstring = 'Data structure does not contain type field';
+    return
+  end
+  % Check that model has the correct type
+  s = model.type;
+  if ~strcmp(s, type)
+    errstring = ['Model type ''', s, ''' does not match expected type ''',...
+	type, ''''];
+    return
+  end
+end
+
+% If inputs are present, check that they have correct dimension
+if nargin > 2
+  if ~isfield(model, 'nin')
+    errstring = 'Data structure does not contain nin field';
+    return
+  end
+
+  data_nin = size(inputs, 2);
+  if model.nin ~= data_nin
+    errstring = ['Dimension of inputs ', num2str(data_nin), ...
+	' does not match number of model inputs ', num2str(model.nin)];
+    return
+  end
+end
+
+% If outputs are present, check that they have correct dimension
+if nargin > 3
+  if ~isfield(model, 'nout')
+    errstring = 'Data structure does not conatin nout field';
+    return
+  end
+  data_nout = size(outputs, 2);
+  if model.nout ~= data_nout
+    errstring = ['Dimension of outputs ', num2str(data_nout), ...
+	' does not match number of model outputs ', num2str(model.nout)];
+    return
+  end
+
+% Also check that number of data points in inputs and outputs is the same
+  num_in = size(inputs, 1);
+  num_out = size(outputs, 1);
+  if num_in ~= num_out
+    errstring = ['Number of input patterns ', num2str(num_in), ...
+	' does not match number of output patterns ', num2str(num_out)];
+    return
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/convertoldnet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function net = convertoldnet(net)
+%CONVERTOLDNET Convert pre-2.3 release MLP and MDN nets to new format
+%
+%	Description
+%	NET = CONVERTOLDNET(NET) takes a network NET and, if appropriate,
+%	converts it from pre-2.3 to the current format.  The difference is
+%	simply  that in MLPs and the MLP sub-net of MDNs the field ACTFN has
+%	been  renamed OUTFN to make it consistent with GLM and RBF networks.
+%	If the network is not old-format or an MLP or MDN it is left
+%	unchanged.
+%
+%	See also
+%	MLP, MDN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+switch net.type
+    case 'mlp'
+	if (isfield(net, 'actfn'))
+	    net.outfn = net.actfn;
+	    net = rmfield(net, 'actfn');
+	end
+    case 'mdn'
+	net.mlp = convertoldnet(net.mlp);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/datread.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,99 @@
+function [x, t, nin, nout, ndata] = datread(filename)
+%DATREAD Read data from an ascii file.
+%
+%	Description
+%
+%	[X, T, NIN, NOUT, NDATA] = DATREAD(FILENAME) reads from the file
+%	FILENAME and returns a matrix X of input vectors, a matrix T of
+%	target vectors, and integers NIN, NOUT and NDATA specifying the
+%	number of inputs, the number of outputs and the number of data points
+%	respectively.
+%
+%	The format of the data file is as follows: the first row contains the
+%	string NIN followed by the number of inputs, the second row contains
+%	the string NOUT followed by the number of outputs, and the third row
+%	contains the string NDATA followed by the number of data vectors.
+%	Subsequent lines each contain one input vector followed by one output
+%	vector, with individual values separated by spaces.
+%
+%	See also
+%	 nin   2   nout  1   ndata 4   0.000000e+00  0.000000e+00
+%	1.000000e+00    0.000000e+00  1.000000e+00  0.000000e+00
+%	1.000000e+00  0.000000e+00  0.000000e+00    1.000000e+00
+%	1.000000e+00  1.000000e+00   See Also
+%	DATWRITE
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+fid = fopen(filename, 'rt');
+if fid == -1
+  error('Failed to open file.')
+end
+
+% Read number of inputs
+s1 = fscanf(fid, '%s', 1);
+if ~strcmp(s1, 'nin')
+  fclose(fid);
+  error('String ''nin'' not found')
+end
+nin   = fscanf(fid, '%d\n', 1);
+if ~isnumeric(nin)
+  fclose(fid);
+  error('No number for nin')
+end
+if nin < 0 | round(nin) ~= nin
+  fclose(fid);
+  error('nin must be a non-negative integer')
+end
+
+% Read number of outputs
+s2 = fscanf(fid, '%s', 1);
+if ~strcmp(s2, 'nout')
+  fclose(fid);
+  error('String ''nout'' not found')
+end
+nout  = fscanf(fid, '%d\n', 1);
+if ~isnumeric(nout)
+  fclose(fid);
+  error('No number for nout')
+end
+if nout < 0 | round(nout) ~= nout
+  fclose(fid);
+  error('nout must be a non-negative integer')
+end
+
+% Read number of data values
+s3 = fscanf(fid, '%s', 1);
+if ~strcmp(s3, 'ndata')
+  fclose(fid);
+  error('String ''ndata'' not found')
+end
+ndata = fscanf(fid, '%d\n', 1);
+if ~isnumeric(ndata)
+  fclose(fid);
+  error('No number for ndata')
+end
+if ndata < 0 | round(ndata) ~= ndata
+  fclose(fid);
+  error('ndata must be a non-negative integer')
+end
+
+% The following line reads all of the remaining data to the end of file.
+temp  = fscanf(fid, '%f', inf);
+
+% Check that size of temp is correct
+if size(temp, 1) * size(temp,2) ~= (nin+nout) * ndata
+  fclose(fid);
+  error('Incorrect number of elements in file')
+end
+
+temp = reshape(temp, nin + nout, ndata)';
+x = temp(:, 1:nin);
+t = temp(:, nin + 1 : nin + nout);
+
+flag = fclose(fid);
+if flag == -1
+  error('Failed to close file.')
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/datwrite.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function datwrite(filename, x, t)
+%DATWRITE Write data to ascii file.
+%
+%	Description
+%
+%	DATWRITE(FILENAME, X, T) takes a matrix X of input vectors and a
+%	matrix T of target vectors and writes them to an ascii file named
+%	FILENAME. The file format is as follows: the first row contains the
+%	string NIN followed by the number of inputs, the second row contains
+%	the string NOUT followed by the number of outputs, and the third row
+%	contains the string NDATA followed by the number of data vectors.
+%	Subsequent lines each contain one input vector followed by one output
+%	vector, with individual values separated by spaces.
+%
+%	See also
+%	DATREAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+nin = size(x, 2);
+nout = size(t, 2);
+ndata = size(x, 1);
+
+fid = fopen(filename, 'wt');
+if fid == -1
+  error('Failed to open file.')
+end
+
+if size(t, 1) ~= ndata
+  error('x and t must have same number of rows.');
+end
+
+fprintf(fid, ' nin   %d\n nout  %d\n ndata %d\n', nin , nout, ndata);
+for i = 1 : ndata
+  fprintf(fid, '%13e ', x(i,:), t(i,:));
+  fprintf(fid, '\n');
+end
+
+flag = fclose(fid);
+if flag == -1
+  error('Failed to close file.')
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/dem2ddat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+function [data, c, prior, sd] = dem2ddat(ndata)
+%DEM2DDAT Generates two dimensional data for demos.
+%
+%	Description
+%	The data is drawn from three spherical Gaussian distributions with
+%	priors 0.3, 0.5 and 0.2; centres (2, 3.5), (0, 0) and (0,2); and
+%	standard deviations 0.2, 0.5 and 1.0.  DATA = DEM2DDAT(NDATA)
+%	generates NDATA points.
+%
+%	[DATA, C] = DEM2DDAT(NDATA) also returns a matrix containing the
+%	centres of the Gaussian distributions.
+%
+%	See also
+%	DEMGMM1, DEMKMEAN, DEMKNN1
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+input_dim = 2;
+
+% Fix seed for reproducible results
+randn('state', 42);
+
+% Generate mixture of three Gaussians in two dimensional space
+data = randn(ndata, input_dim);
+
+% Priors for the three clusters
+prior(1) = 0.3;
+prior(2) = 0.5;
+prior(3) = 0.2;
+
+% Cluster centres
+c = [2.0, 3.5; 0.0, 0.0; 0.0, 2.0];
+
+% Cluster standard deviations
+sd  = [0.2 0.5 1.0];
+
+% Put first cluster at (2, 3.5)
+data(1:prior(1)*ndata, 1) = data(1:prior(1)*ndata, 1) * 0.2 + c(1,1);
+data(1:prior(1)*ndata, 2) = data(1:prior(1)*ndata, 2) * 0.2 + c(1,2);
+
+% Leave second cluster at (0,0)
+data((prior(1)*ndata + 1):(prior(2)+prior(1))*ndata, :) = ...
+	data((prior(1)*ndata + 1):(prior(2)+prior(1))*ndata, :) * 0.5;
+
+% Put third cluster at (0,2)
+data((prior(1)+prior(2))*ndata +1:ndata, 2) = ...
+	data((prior(1)+prior(2))*ndata+1:ndata, 2) + c(3, 2);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demard.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,157 @@
+%DEMARD	Automatic relevance determination using the MLP.
+%
+%	Description
+%	This script demonstrates the technique of automatic relevance
+%	determination (ARD) using a synthetic problem having three input
+%	variables: X1 is sampled uniformly from the range (0,1) and has a low
+%	level of added Gaussian noise, X2 is a copy of X1 with a higher level
+%	of added noise, and X3 is sampled randomly from a Gaussian
+%	distribution. The single target variable is determined by
+%	SIN(2*PI*X1) with additive Gaussian noise. Thus X1 is very relevant
+%	for determining the target value, X2 is of some relevance, while X3
+%	is irrelevant. The prior over weights is given by the ARD Gaussian
+%	prior with a separate hyper-parameter for the group of weights
+%	associated with each input. A multi-layer perceptron is trained on
+%	this data, with re-estimation of the hyper-parameters using EVIDENCE.
+%	The final values for the hyper-parameters reflect the relative
+%	importance of the three inputs.
+%
+%	See also
+%	DEMMLP1, DEMEV1, MLP, EVIDENCE
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+clc;
+disp('This demonstration illustrates the technique of automatic relevance')
+disp('determination (ARD) using a multi-layer perceptron.')
+disp(' ');
+disp('First, we set up a synthetic data set involving three input variables:')
+disp('x1 is sampled uniformly from the range (0,1) and has a low level of')
+disp('added Gaussian noise, x2 is a copy of x1 with a higher level of added')
+disp('noise, and x3 is sampled randomly from a Gaussian distribution. The')
+disp('single target variable is given by t = sin(2*pi*x1) with additive')
+disp('Gaussian noise. Thus x1 is very relevant for determining the target')
+disp('value, x2 is of some relevance, while x3 should in principle be')
+disp('irrelevant.')
+disp(' ');
+disp('Press any key to see a plot of t against x1.')
+pause;
+
+% Generate the data set.
+randn('state', 0); 
+rand('state', 0); 
+ndata = 100;
+noise = 0.05;
+x1 = rand(ndata, 1) + 0.002*randn(ndata, 1);
+x2 = x1 + 0.02*randn(ndata, 1);
+x3 = 0.5 + 0.2*randn(ndata, 1);
+x = [x1, x2, x3];
+t = sin(2*pi*x1) + noise*randn(ndata, 1);
+
+% Plot the data and the original function.
+h = figure;
+plotvals = linspace(0, 1, 200)';
+plot(x1, t, 'ob')
+hold on
+axis([0 1 -1.5 1.5])
+[fx, fy] = fplot('sin(2*pi*x)', [0 1]);
+plot(fx, fy, '-g', 'LineWidth', 2);
+legend('data', 'function');
+
+disp(' ');
+disp('Press any key to continue')
+pause; clc;
+
+disp('The prior over weights is given by the ARD Gaussian prior with a')
+disp('separate hyper-parameter for the group of weights associated with each')
+disp('input. This prior is set up using the utility MLPPRIOR. The network is')
+disp('trained by error minimization using scaled conjugate gradient function')
+disp('SCG. There are two cycles of training, and at the end of each cycle')
+disp('the hyper-parameters are re-estimated using EVIDENCE.')
+disp(' ');
+disp('Press any key to create and train the network.')
+disp(' ');
+pause;
+
+% Set up network parameters.
+nin = 3;			% Number of inputs.
+nhidden = 2;			% Number of hidden units.
+nout = 1;			% Number of outputs.
+aw1 = 0.01*ones(1, nin);	% First-layer ARD hyperparameters.
+ab1 = 0.01;			% Hyperparameter for hidden unit biases.
+aw2 = 0.01;			% Hyperparameter for second-layer weights.
+ab2 = 0.01;			% Hyperparameter for output unit biases.
+beta = 50.0;			% Coefficient of data error.
+
+% Create and initialize network.
+prior = mlpprior(nin, nhidden, nout, aw1, ab1, aw2, ab2);
+net = mlp(nin, nhidden, nout, 'linear', prior, beta);
+
+% Set up vector of options for the optimiser.
+nouter = 2;			% Number of outer loops
+ninner = 10;		        % Number of inner loops
+options = zeros(1,18);		% Default options vector.
+options(1) = 1;			% This provides display of error values.
+options(2) = 1.0e-7;	% This ensures that convergence must occur
+options(3) = 1.0e-7;
+options(14) = 300;		% Number of training cycles in inner loop. 
+
+% Train using scaled conjugate gradients, re-estimating alpha and beta.
+for k = 1:nouter
+  net = netopt(net, options, x, t, 'scg');
+  [net, gamma] = evidence(net, x, t, ninner);
+  fprintf(1, '\n\nRe-estimation cycle %d:\n', k);
+  disp('The first three alphas are the hyperparameters for the corresponding');
+  disp('input to hidden unit weights.  The remainder are the hyperparameters');
+  disp('for the hidden unit biases, second layer weights and output unit')
+  disp('biases, respectively.')
+  fprintf(1, '  alpha =  %8.5f\n', net.alpha);
+  fprintf(1, '  beta  =  %8.5f\n', net.beta);
+  fprintf(1, '  gamma =  %8.5f\n\n', gamma);
+  disp(' ')
+  disp('Press any key to continue.')
+  pause
+end
+
+% Plot the function corresponding to the trained network.
+figure(h); hold on;
+[y, z] = mlpfwd(net, plotvals*ones(1,3));
+plot(plotvals, y, '-r', 'LineWidth', 2)
+legend('data', 'function', 'network');
+
+disp('Press any key to continue.');
+pause; clc;
+
+disp('We can now read off the hyperparameter values corresponding to the')
+disp('three inputs x1, x2 and x3:')
+disp(' ');
+fprintf(1, '    alpha1: %8.5f\n', net.alpha(1));
+fprintf(1, '    alpha2: %8.5f\n', net.alpha(2));
+fprintf(1, '    alpha3: %8.5f\n', net.alpha(3));
+disp(' ');
+disp('Since each alpha corresponds to an inverse variance, we see that the')
+disp('posterior variance for weights associated with input x1 is large, that')
+disp('of x2 has an intermediate value and the variance of weights associated')
+disp('with x3 is small.')
+disp(' ')
+disp('Press any key to continue.')
+disp(' ')
+pause
+disp('This is confirmed by looking at the corresponding weight values:')
+disp(' ');
+fprintf(1, '    %8.5f    %8.5f\n', net.w1');
+disp(' ');
+disp('where the three rows correspond to weights asssociated with x1, x2 and')
+disp('x3 respectively. We see that the network is giving greatest emphasis')
+disp('to x1 and least emphasis to x3, with intermediate emphasis on')
+disp('x2. Since the target t is statistically independent of x3 we might')
+disp('expect the weights associated with this input would go to')
+disp('zero. However, for any finite data set there may be some chance')
+disp('correlation between x3 and t, and so the corresponding alpha remains')
+disp('finite.')
+
+disp(' ');
+disp('Press any key to end.')
+pause; clc; close(h); clear all
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demev1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,146 @@
+%DEMEV1	Demonstrate Bayesian regression for the MLP.
+%
+%	Description
+%	The problem consists an input variable X which sampled from a
+%	Gaussian distribution, and a target variable T generated by computing
+%	SIN(2*PI*X) and adding Gaussian noise. A 2-layer network with linear
+%	outputs is trained by minimizing a sum-of-squares error function with
+%	isotropic Gaussian regularizer, using the scaled conjugate gradient
+%	optimizer. The hyperparameters ALPHA and BETA are re-estimated using
+%	the function EVIDENCE. A graph  is plotted of the original function,
+%	the training data, the trained network function, and the error bars.
+%
+%	See also
+%	EVIDENCE, MLP, SCG, DEMARD, DEMMLP1
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+clc;
+disp('This demonstration illustrates the application of Bayesian')
+disp('re-estimation to determine the hyperparameters in a simple regression')
+disp('problem. It is based on a local quadratic approximation to a mode of')
+disp('the posterior distribution and the evidence maximization framework of')
+disp('MacKay.')
+disp(' ')
+disp('First, we generate a synthetic data set consisting of a single input')
+disp('variable x sampled from a Gaussian distribution, and a target variable')
+disp('t obtained by evaluating sin(2*pi*x) and adding Gaussian noise.')
+disp(' ')
+disp('Press any key to see a plot of the data together with the sine function.')
+pause;
+
+% Generate the matrix of inputs x and targets t.
+
+ndata = 16;			% Number of data points.
+noise = 0.1;			% Standard deviation of noise distribution.
+randn('state', 0);
+x = 0.25 + 0.07*randn(ndata, 1);
+t = sin(2*pi*x) + noise*randn(size(x));
+
+% Plot the data and the original sine function.
+h = figure;
+nplot = 200;
+plotvals = linspace(0, 1, nplot)';
+plot(x, t, 'ok')
+xlabel('Input')
+ylabel('Target')
+hold on
+axis([0 1 -1.5 1.5])
+fplot('sin(2*pi*x)', [0 1], '-g')
+legend('data', 'function');
+
+disp(' ')
+disp('Press any key to continue')
+pause; clc;
+
+disp('Next we create a two-layer MLP network having 3 hidden units and one')
+disp('linear output. The model assumes Gaussian target noise governed by an')
+disp('inverse variance hyperparmeter beta, and uses a simple Gaussian prior')
+disp('distribution governed by an inverse variance hyperparameter alpha.')
+disp(' ');
+disp('The network weights and the hyperparameters are initialised and then')
+disp('the weights are optimized with the scaled conjugate gradient')
+disp('algorithm using the SCG function, with the hyperparameters kept')
+disp('fixed. After a maximum of 500 iterations, the hyperparameters are')
+disp('re-estimated using the EVIDENCE function. The process of optimizing')
+disp('the weights with fixed hyperparameters and then re-estimating the')
+disp('hyperparameters is repeated for a total of 3 cycles.')
+disp(' ')
+disp('Press any key to train the network and determine the hyperparameters.')
+pause;
+
+% Set up network parameters.
+nin = 1;		% Number of inputs.
+nhidden = 3;		% Number of hidden units.
+nout = 1;		% Number of outputs.
+alpha = 0.01;		% Initial prior hyperparameter. 
+beta_init = 50.0;	% Initial noise hyperparameter.
+
+% Create and initialize network weight vector.
+net = mlp(nin, nhidden, nout, 'linear', alpha, beta_init);
+
+% Set up vector of options for the optimiser.
+nouter = 3;			% Number of outer loops.
+ninner = 1;			% Number of innter loops.
+options = zeros(1,18);		% Default options vector.
+options(1) = 1;			% This provides display of error values.
+options(2) = 1.0e-7;		% Absolute precision for weights.
+options(3) = 1.0e-7;		% Precision for objective function.
+options(14) = 500;		% Number of training cycles in inner loop. 
+
+% Train using scaled conjugate gradients, re-estimating alpha and beta.
+for k = 1:nouter
+  net = netopt(net, options, x, t, 'scg');
+  [net, gamma] = evidence(net, x, t, ninner);
+  fprintf(1, '\nRe-estimation cycle %d:\n', k);
+  fprintf(1, '  alpha =  %8.5f\n', net.alpha);
+  fprintf(1, '  beta  =  %8.5f\n', net.beta);
+  fprintf(1, '  gamma =  %8.5f\n\n', gamma);
+  disp(' ')
+  disp('Press any key to continue.')
+  pause;
+end
+
+fprintf(1, 'true beta: %f\n', 1/(noise*noise));
+
+disp(' ')
+disp('Network training and hyperparameter re-estimation are now complete.') 
+disp('Compare the final value for the hyperparameter beta with the true') 
+disp('value.')
+disp(' ')
+disp('Notice that the final error value is close to the number of data')
+disp(['points (', num2str(ndata),') divided by two.'])
+disp(' ')
+disp('Press any key to continue.')
+pause; clc;
+disp('We can now plot the function represented by the trained network. This')
+disp('corresponds to the mean of the predictive distribution. We can also')
+disp('plot ''error bars'' representing one standard deviation of the')
+disp('predictive distribution around the mean.')
+disp(' ')
+disp('Press any key to add the network function and error bars to the plot.')
+pause;
+
+% Evaluate error bars.
+[y, sig2] = netevfwd(mlppak(net), net, x, t, plotvals);
+sig = sqrt(sig2);
+
+% Plot the data, the original function, and the trained network function.
+[y, z] = mlpfwd(net, plotvals);
+figure(h); hold on;
+plot(plotvals, y, '-r')
+xlabel('Input')
+ylabel('Target')
+plot(plotvals, y + sig, '-b');
+plot(plotvals, y - sig, '-b');
+legend('data', 'function', 'network', 'error bars');
+
+disp(' ')
+disp('Notice how the confidence interval spanned by the ''error bars'' is')
+disp('smaller in the region of input space where the data density is high,')
+disp('and becomes larger in regions away from the data.')
+disp(' ')
+disp('Press any key to end.')
+pause; clc; close(h); 
+%clear all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demev2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,248 @@
+%DEMEV2	Demonstrate Bayesian classification for the MLP.
+%
+%	Description
+%	A synthetic two class two-dimensional dataset X is sampled  from a
+%	mixture of four Gaussians.  Each class is associated with two of the
+%	Gaussians so that the optimal decision boundary is non-linear. A 2-
+%	layer network with logistic outputs is trained by minimizing the
+%	cross-entropy error function with isotroipc Gaussian regularizer (one
+%	hyperparameter for each of the four standard weight groups), using
+%	the scaled conjugate gradient optimizer. The hyperparameter vectors
+%	ALPHA and BETA are re-estimated using the function EVIDENCE. A graph
+%	is plotted of the optimal, regularised, and unregularised decision
+%	boundaries.  A further plot of the moderated versus unmoderated
+%	contours is generated.
+%
+%	See also
+%	EVIDENCE, MLP, SCG, DEMARD, DEMMLP2
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+clc;
+
+disp('This program demonstrates the use of the evidence procedure on')
+disp('a two-class problem.  It also shows the improved generalisation')
+disp('performance that can be achieved with moderated outputs; that is')
+disp('predictions where an approximate integration over the true')
+disp('posterior distribution is carried out.')
+disp(' ')
+disp('First we generate a synthetic dataset with two-dimensional input')
+disp('sampled from a mixture of four Gaussians.  Each class is')
+disp('associated with two of the Gaussians so that the optimal decision')
+disp('boundary is non-linear.')
+disp(' ')
+disp('Press any key to see a plot of the data.')
+pause;
+
+% Generate the matrix of inputs x and targets t.
+
+rand('state', 423);
+randn('state', 423);
+
+ClassSymbol1 = 'r.';
+ClassSymbol2 = 'y.';
+PointSize = 12;
+titleSize = 10;
+
+fh1 = figure;
+set(fh1, 'Name', 'True Data Distribution');
+whitebg(fh1, 'k');
+
+% 
+% Generate the data
+% 
+n=200;
+
+% Set up mixture model: 2d data with four centres
+% Class 1 is first two centres, class 2 from the other two
+mix = gmm(2, 4, 'full');
+mix.priors = [0.25 0.25 0.25 0.25];
+mix.centres = [0 -0.1; 1.5 0; 1 1; 1 -1];
+mix.covars(:,:,1) = [0.625 -0.2165; -0.2165 0.875];
+mix.covars(:,:,2) = [0.25 0; 0 0.25];
+mix.covars(:,:,3) = [0.2241 -0.1368; -0.1368 0.9759];
+mix.covars(:,:,4) = [0.2375 0.1516; 0.1516 0.4125];
+
+[data, label] = gmmsamp(mix, n);
+
+% 
+% Calculate some useful axis limits
+% 
+x0 = min(data(:,1));
+x1 = max(data(:,1));
+y0 = min(data(:,2));
+y1 = max(data(:,2));
+dx = x1-x0;
+dy = y1-y0;
+expand = 5/100;			% Add on 5 percent each way
+x0 = x0 - dx*expand;
+x1 = x1 + dx*expand;
+y0 = y0 - dy*expand;
+y1 = y1 + dy*expand;
+resolution = 100;
+step = dx/resolution;
+xrange = [x0:step:x1];
+yrange = [y0:step:y1];
+% 					
+% Generate the grid
+% 
+[X Y]=meshgrid([x0:step:x1],[y0:step:y1]);
+% 
+% Calculate the class conditional densities, the unconditional densities and
+% the posterior probabilities
+% 
+px_j = gmmactiv(mix, [X(:) Y(:)]);
+px = reshape(px_j*(mix.priors)',size(X));
+post = gmmpost(mix, [X(:) Y(:)]);
+p1_x = reshape(post(:, 1) + post(:, 2), size(X));
+p2_x = reshape(post(:, 3) + post(:, 4), size(X));
+
+plot(data((label<=2),1),data(label<=2,2),ClassSymbol1, 'MarkerSize', ...
+PointSize)
+hold on
+axis([x0 x1 y0 y1])
+plot(data((label>2),1),data(label>2,2),ClassSymbol2, 'MarkerSize', ...
+    PointSize)
+
+% Convert targets to 0-1 encoding
+target=[label<=2];
+disp(' ')
+disp('Press any key to continue')
+pause; clc;
+
+disp('Next we create a two-layer MLP network with 6 hidden units and')
+disp('one logistic output.  We use a separate inverse variance')
+disp('hyperparameter for each group of weights (inputs, input bias,')
+disp('outputs, output bias) and the weights are optimised with the')
+disp('scaled conjugate gradient algorithm.  After each 100 iterations')
+disp('the hyperparameters are re-estimated twice.  There are eight')
+disp('cycles of the whole algorithm.')
+disp(' ')
+disp('Press any key to train the network and determine the hyperparameters.')
+pause;
+
+% Set up network parameters.
+nin = 2;		% Number of inputs.
+nhidden = 6;		% Number of hidden units.
+nout = 1;		% Number of outputs.
+alpha = 0.01;		% Initial prior hyperparameter.
+aw1 = 0.01;
+ab1 = 0.01;
+aw2 = 0.01;
+ab2 = 0.01;
+
+% Create and initialize network weight vector.
+prior = mlpprior(nin, nhidden, nout, aw1, ab1, aw2, ab2);
+net = mlp(nin, nhidden, nout, 'logistic', prior);
+
+% Set up vector of options for the optimiser.
+nouter = 8;			% Number of outer loops.
+ninner = 2;			% Number of innter loops.
+options = foptions;		% Default options vector.
+options(1) = 1;			% This provides display of error values.
+options(2) = 1.0e-5;		% Absolute precision for weights.
+options(3) = 1.0e-5;		% Precision for objective function.
+options(14) = 100;		% Number of training cycles in inner loop. 
+
+% Train using scaled conjugate gradients, re-estimating alpha and beta.
+for k = 1:nouter
+  net = netopt(net, options, data, target, 'scg');
+  [net, gamma] = evidence(net, data, target, ninner);
+  fprintf(1, '\nRe-estimation cycle %d:\n', k);
+  disp(['  alpha = ', num2str(net.alpha')]);
+  fprintf(1, '  gamma =  %8.5f\n\n', gamma);
+  disp(' ')
+  disp('Press any key to continue.')
+  pause;
+end
+
+disp(' ')
+disp('Network training and hyperparameter re-estimation are now complete.')
+disp('Notice that the final error value is close to the number of data')
+disp(['points (', num2str(n), ') divided by two.'])
+disp('Also, the hyperparameter values differ, which suggests that a single')
+disp('hyperparameter would not be so effective.')
+disp(' ')
+disp('First we train an MLP without Bayesian regularisation on the')
+disp('same dataset using 400 iterations of scaled conjugate gradient')
+disp(' ')
+disp('Press any key to train the network by maximum likelihood.')
+pause;
+% Train standard network
+net2 = mlp(nin, nhidden, nout, 'logistic');
+options(14) = 400;
+net2 = netopt(net2, options, data, target, 'scg');
+y2g = mlpfwd(net2, [X(:), Y(:)]);
+y2g = reshape(y2g(:, 1), size(X));
+
+disp(' ')
+disp('We can now plot the function represented by the trained networks.')
+disp('We show the decision boundaries (output = 0.5) and the optimal')
+disp('decision boundary given by applying Bayes'' theorem to the true')
+disp('data model.')
+disp(' ')
+disp('Press any key to add the boundaries to the plot.')
+pause;
+
+% Evaluate predictions.
+[yg, ymodg] = mlpevfwd(net, data, target, [X(:) Y(:)]);
+yg = reshape(yg(:,1),size(X));
+ymodg = reshape(ymodg(:,1),size(X));
+
+% Bayesian decision boundary
+[cB, hB] = contour(xrange,yrange,p1_x,[0.5 0.5],'b-');
+[cNb, hNb] = contour(xrange,yrange,yg,[0.5 0.5],'r-');
+[cN, hN] = contour(xrange,yrange,y2g,[0.5 0.5],'g-');
+set(hB, 'LineWidth', 2);
+set(hNb, 'LineWidth', 2);
+set(hN, 'LineWidth', 2);
+Chandles = [hB(1) hNb(1) hN(1)];
+legend(Chandles, 'Bayes', ...
+  'Reg. Network', 'Network', 3);
+
+disp(' ')
+disp('Note how the regularised network predictions are closer to the')
+disp('optimal decision boundary, while the unregularised network is')
+disp('overtrained.')
+
+disp(' ')
+disp('We will now compare moderated and unmoderated outputs for the');
+disp('regularised network by showing the contour plot of the posterior')
+disp('probability estimates.')
+disp(' ')
+disp('The first plot shows the regularised (moderated) predictions')
+disp('and the second shows the standard predictions from the same network.')
+disp('These agree at the level 0.5.')
+disp('Press any key to continue')
+pause
+levels = 0:0.1:1;
+fh4 = figure;
+set(fh4, 'Name', 'Moderated outputs');
+hold on
+plot(data((label<=2),1),data(label<=2,2),'r.', 'MarkerSize', PointSize)
+plot(data((label>2),1),data(label>2,2),'y.', 'MarkerSize', PointSize)
+
+[cNby, hNby] = contour(xrange, yrange, ymodg, levels, 'k-');
+set(hNby, 'LineWidth', 1);
+
+fh5 = figure;
+set(fh5, 'Name', 'Unmoderated outputs');
+hold on
+plot(data((label<=2),1),data(label<=2,2),'r.', 'MarkerSize', PointSize)
+plot(data((label>2),1),data(label>2,2),'y.', 'MarkerSize', PointSize)
+
+[cNbm, hNbm] = contour(xrange, yrange, yg, levels, 'k-');
+set(hNbm, 'LineWidth', 1);
+
+disp(' ')
+disp('Note how the moderated contours are more widely spaced.  This shows')
+disp('that there is a larger region where the outputs are close to 0.5')
+disp('and a smaller region where the outputs are close to 0 or 1.')
+disp(' ')
+disp('Press any key to exit')
+pause
+close(fh1);
+close(fh4);
+close(fh5);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demev3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,154 @@
+%DEMEV3	Demonstrate Bayesian regression for the RBF.
+%
+%	Description
+%	The problem consists an input variable X which sampled from a
+%	Gaussian distribution, and a target variable T generated by computing
+%	SIN(2*PI*X) and adding Gaussian noise. An RBF network with linear
+%	outputs is trained by minimizing a sum-of-squares error function with
+%	isotropic Gaussian regularizer, using the scaled conjugate gradient
+%	optimizer. The hyperparameters ALPHA and BETA are re-estimated using
+%	the function EVIDENCE. A graph  is plotted of the original function,
+%	the training data, the trained network function, and the error bars.
+%
+%	See also
+%	DEMEV1, EVIDENCE, RBF, SCG, NETEVFWD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+clc;
+disp('This demonstration illustrates the application of Bayesian')
+disp('re-estimation to determine the hyperparameters in a simple regression')
+disp('problem using an RBF netowk. It is based on a the fact that the')
+disp('posterior distribution for the output weights of an RBF is Gaussian')
+disp('and uses the evidence maximization framework of MacKay.')
+disp(' ')
+disp('First, we generate a synthetic data set consisting of a single input')
+disp('variable x sampled from a Gaussian distribution, and a target variable')
+disp('t obtained by evaluating sin(2*pi*x) and adding Gaussian noise.')
+disp(' ')
+disp('Press any key to see a plot of the data together with the sine function.')
+pause;
+
+% Generate the matrix of inputs x and targets t.
+
+ndata = 16;			% Number of data points.
+noise = 0.1;			% Standard deviation of noise distribution.
+randn('state', 0);
+rand('state', 0);
+x = 0.25 + 0.07*randn(ndata, 1);
+t = sin(2*pi*x) + noise*randn(size(x));
+
+% Plot the data and the original sine function.
+h = figure;
+nplot = 200;
+plotvals = linspace(0, 1, nplot)';
+plot(x, t, 'ok')
+xlabel('Input')
+ylabel('Target')
+hold on
+axis([0 1 -1.5 1.5])
+fplot('sin(2*pi*x)', [0 1], '-g')
+legend('data', 'function');
+
+disp(' ')
+disp('Press any key to continue')
+pause; clc;
+
+disp('Next we create a two-layer MLP network having 3 hidden units and one')
+disp('linear output. The model assumes Gaussian target noise governed by an')
+disp('inverse variance hyperparmeter beta, and uses a simple Gaussian prior')
+disp('distribution governed by an inverse variance hyperparameter alpha.')
+disp(' ');
+disp('The network weights and the hyperparameters are initialised and then')
+disp('the output layer weights are optimized with the scaled conjugate gradient')
+disp('algorithm using the SCG function, with the hyperparameters kept')
+disp('fixed. After a maximum of 50 iterations, the hyperparameters are')
+disp('re-estimated using the EVIDENCE function. The process of optimizing')
+disp('the weights with fixed hyperparameters and then re-estimating the')
+disp('hyperparameters is repeated for a total of 3 cycles.')
+disp(' ')
+disp('Press any key to train the network and determine the hyperparameters.')
+pause;
+
+% Set up network parameters.
+nin = 1;		% Number of inputs.
+nhidden = 3;		% Number of hidden units.
+nout = 1;		% Number of outputs.
+alpha = 0.01;		% Initial prior hyperparameter. 
+beta_init = 50.0;	% Initial noise hyperparameter.
+
+% Create and initialize network weight vector.
+net = rbf(nin, nhidden, nout, 'tps', 'linear', alpha, beta_init);
+[net.mask, prior] = rbfprior('tps', nin, nhidden, nout, alpha, alpha);
+net = netinit(net, prior);
+
+options = foptions;
+options(14) = 5;  % At most 5 EM iterations for basis functions
+options(1) = -1;  % Turn off all messages
+net = rbfsetbf(net, options, x);  % Initialise the basis functions
+
+% Now train the network
+nouter = 5;
+ninner = 2;
+options = foptions;
+options(1) = 1;
+options(2) = 1.0e-5;		% Absolute precision for weights.
+options(3) = 1.0e-5;		% Precision for objective function.
+options(14) = 50;		% Number of training cycles in inner loop. 
+
+% Train using scaled conjugate gradients, re-estimating alpha and beta.
+for k = 1:nouter
+  net = netopt(net, options, x, t, 'scg');
+  [net, gamma] = evidence(net, x, t, ninner);
+  fprintf(1, '\nRe-estimation cycle %d:\n', k);
+  fprintf(1, '  alpha =  %8.5f\n', net.alpha);
+  fprintf(1, '  beta  =  %8.5f\n', net.beta);
+  fprintf(1, '  gamma =  %8.5f\n\n', gamma);
+  disp(' ')
+  disp('Press any key to continue.')
+  pause;
+end
+
+fprintf(1, 'true beta: %f\n', 1/(noise*noise));
+
+disp(' ')
+disp('Network training and hyperparameter re-estimation are now complete.') 
+disp('Compare the final value for the hyperparameter beta with the true') 
+disp('value.')
+disp(' ')
+disp('Notice that the final error value is close to the number of data')
+disp(['points (', num2str(ndata),') divided by two.'])
+disp(' ')
+disp('Press any key to continue.')
+pause; clc;
+disp('We can now plot the function represented by the trained network. This')
+disp('corresponds to the mean of the predictive distribution. We can also')
+disp('plot ''error bars'' representing one standard deviation of the')
+disp('predictive distribution around the mean.')
+disp(' ')
+disp('Press any key to add the network function and error bars to the plot.')
+pause;
+
+% Evaluate error bars.
+[y, sig2] = netevfwd(netpak(net), net, x, t, plotvals);
+sig = sqrt(sig2);
+
+% Plot the data, the original function, and the trained network function.
+[y, z] = rbffwd(net, plotvals);
+figure(h); hold on;
+plot(plotvals, y, '-r')
+xlabel('Input')
+ylabel('Target')
+plot(plotvals, y + sig, '-b');
+plot(plotvals, y - sig, '-b');
+legend('data', 'function', 'network', 'error bars');
+
+disp(' ')
+disp('Notice how the confidence interval spanned by the ''error bars'' is')
+disp('smaller in the region of input space where the data density is high,')
+disp('and becomes larger in regions away from the data.')
+disp(' ')
+disp('Press any key to end.')
+pause; clc; close(h); 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demgauss.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+%DEMGAUSS Demonstrate sampling from Gaussian distributions.
+%
+%	Description
+%
+%	DEMGAUSS provides a simple illustration of the generation of data
+%	from Gaussian distributions. It first samples from a one-dimensional
+%	distribution using RANDN, and then plots a normalized histogram
+%	estimate of the distribution using HISTP together with the true
+%	density calculated using GAUSS.
+%
+%	DEMGAUSS then demonstrates sampling from a Gaussian distribution in
+%	two dimensions. It creates a mean vector and a covariance matrix, and
+%	then plots contours of constant density using the function GAUSS. A
+%	sample of points drawn from this distribution, obtained using the
+%	function GSAMP, is then superimposed on the contours.
+%
+%	See also
+%	GAUSS, GSAMP, HISTP
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+clc
+mean = 2; var = 5; nsamp = 3000;
+xmin = -10; xmax = 10; nbins = 30;
+disp('Demonstration of sampling from a uni-variate Gaussian with mean')
+dstring = [num2str(mean), ' and variance ', num2str(var), '.  ', ...
+    num2str(nsamp), ' samples are taken.'];
+disp(dstring);
+x = mean + sqrt(var)*randn(nsamp, 1);
+fh1 = figure;
+histp(x, xmin, xmax, nbins);
+hold on;
+axis([xmin xmax 0 0.2]);
+plotvals = linspace(xmin, xmax, 200)';
+probs = gauss(mean, var, plotvals);
+plot(plotvals, probs, '-r');
+xlabel('X')
+ylabel('Density')
+
+disp(' ')
+disp('Press any key to continue')
+pause; 
+mu = [3 2];
+lam1 = 0.5;
+lam2 = 5.0;
+Sigma = lam1*[1,1]'*[1,1] + lam2*[1,-1]'*[1,-1];
+disp(' ')
+disp('Demonstration of sampling from a bi-variate Gaussian.  The mean is')
+dstring = ['[', num2str(mu(1)), ', ', num2str(mu(2)), ...
+      '] and the covariance matrix is'];
+disp(dstring)
+disp(Sigma);
+ngrid = 40;
+cmin = -5; cmax = 10; 
+cvals = linspace(cmin, cmax, ngrid);
+[X1, X2] = meshgrid(cvals, cvals);
+XX = [X1(:), X2(:)];
+probs = gauss(mu, Sigma, XX);
+probs = reshape(probs, ngrid, ngrid);
+
+fh2 = figure;
+contour(X1, X2, probs, 'b');
+hold on
+
+nsamp = 300;
+dstring = [num2str(nsamp), ' samples are generated.'];
+disp('The plot shows the sampled data points with a contour plot of their density.')
+samples = gsamp(mu, Sigma, nsamp);
+plot(samples(:,1), samples(:,2), 'or');
+xlabel('X1')
+ylabel('X2')
+grid off;
+
+disp(' ')
+disp('Press any key to end')
+pause; 
+close(fh1);
+close(fh2);
+clear all; 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demglm1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,95 @@
+%DEMGLM1 Demonstrate simple classification using a generalized linear model.
+%
+%	Description
+%	 The problem consists of a two dimensional input matrix DATA and a
+%	vector of classifications T.  The data is  generated from two
+%	Gaussian clusters, and a generalized linear model with logistic
+%	output is trained using iterative reweighted least squares. A plot of
+%	the data together with the 0.1, 0.5 and 0.9 contour lines of the
+%	conditional probability is generated.
+%
+%	See also
+%	DEMGLM2, GLM, GLMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Generate data from two classes in 2d
+input_dim = 2;
+
+% Fix seeds for reproducible results
+randn('state', 42);
+rand('state', 42);
+
+ndata = 100;
+% Generate mixture of two Gaussians in two dimensional space
+mix = gmm(2, 2, 'spherical');
+mix.priors = [0.4 0.6];              % Cluster priors 
+mix.centres = [2.0, 2.0; 0.0, 0.0];  % Cluster centres
+mix.covars = [0.5, 1.0];
+
+[data, label] = gmmsamp(mix, ndata);
+targets = label - ones(ndata, 1);
+
+% Plot the result
+
+clc
+disp('This demonstration illustrates the use of a generalized linear model')
+disp('to classify data from two classes in a two-dimensional space. We')
+disp('begin by generating and plotting the data.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+fh1 = figure;
+plot(data(label==1,1), data(label==1,2), 'bo');
+hold on
+axis([-4 5 -4 5])
+set(gca, 'box', 'on')
+plot(data(label==2,1), data(label==2,2), 'rx')
+title('Data')
+
+clc
+disp('Now we fit a model consisting of a logistic sigmoid function of')
+disp('a linear combination of the input variables.')
+disp(' ')
+disp('The model is trained using the IRLS algorithm for 5 iterations')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+net = glm(input_dim, 1, 'logistic');
+options = foptions;
+options(1) = 1;
+options(14) = 5;
+net = glmtrain(net, options, data, targets);
+
+disp(' ')
+disp('We now plot some density contours given by this model.')
+disp('The contour labelled 0.5 is the decision boundary.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+x = -4.0:0.2:5.0;
+y = -4.0:0.2:5.0;
+[X, Y] = meshgrid(x,y);
+X = X(:);
+Y = Y(:);
+grid = [X Y];
+Z = glmfwd(net, grid);
+Z = reshape(Z, length(x), length(y));
+v = [0.1 0.5 0.9];
+[c, h] = contour(x, y, Z, v);
+title('Generalized Linear Model')
+set(h, 'linewidth', 3)
+clabel(c, h);
+
+clc
+disp('Note that the contours of constant density are straight lines.')
+disp(' ')
+disp('Press any key to end.')
+pause
+close(fh1);
+clear all;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demglm2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,103 @@
+%DEMGLM2 Demonstrate simple classification using a generalized linear model.
+%
+%	Description
+%	 The problem consists of a two dimensional input matrix DATA and a
+%	vector of classifications T.  The data is  generated from three
+%	Gaussian clusters, and a generalized linear model with softmax output
+%	is trained using iterative reweighted least squares. A plot of the
+%	data together with regions shaded by the classification given by the
+%	network is generated.
+%
+%	See also
+%	DEMGLM1, GLM, GLMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Generate data from three classes in 2d
+input_dim = 2;
+
+% Fix seeds for reproducible results
+randn('state', 42);
+rand('state', 42);
+
+ndata = 100;
+% Generate mixture of three Gaussians in two dimensional space
+mix = gmm(2, 3, 'spherical');
+mix.priors = [0.4 0.3 0.3];            % Cluster priors
+mix.centres = [2, 2; 0.0, 0.0; 1, -1];  % Cluster centres
+mix.covars = [0.5 1.0 0.6];
+
+[data, label] = gmmsamp(mix, ndata);
+id = eye(3);
+targets = id(label,:);
+
+% Plot the result
+
+clc
+disp('This demonstration illustrates the use of a generalized linear model')
+disp('to classify data from three classes in a two-dimensional space. We')
+disp('begin by generating and plotting the data.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+fh1 = figure;
+plot(data(label==1,1), data(label==1,2), 'bo');
+hold on
+axis([-4 5 -4 5]);
+set(gca, 'Box', 'on')
+plot(data(label==2,1), data(label==2,2), 'rx')
+plot(data(label==3, 1), data(label==3, 2), 'go')
+title('Data')
+
+clc
+disp('Now we fit a model consisting of a softmax function of')
+disp('a linear combination of the input variables.')
+disp(' ')
+disp('The model is trained using the IRLS algorithm for up to 10 iterations')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+net = glm(input_dim, size(targets, 2), 'softmax');
+options = foptions;
+options(1) = 1;
+options(14) = 10;
+net = glmtrain(net, options, data, targets);
+
+disp(' ')
+disp('We now plot the decision regions given by this model.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+x = -4.0:0.2:5.0;
+y = -4.0:0.2:5.0;
+[X, Y] = meshgrid(x,y);
+X = X(:);
+Y = Y(:);
+grid = [X Y];
+Z = glmfwd(net, grid);
+[foo , class] = max(Z');
+class = class';
+colors = ['b.'; 'r.'; 'g.'];
+for i = 1:3
+  thisX = X(class == i);
+  thisY = Y(class == i);
+  h = plot(thisX, thisY, colors(i,:));
+  set(h, 'MarkerSize', 8);
+end
+title('Plot of Decision regions')
+
+hold off
+
+clc
+disp('Note that the boundaries of decision regions are straight lines.')
+disp(' ')
+disp('Press any key to end.')
+pause
+close(fh1);
+clear all; 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demgmm1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,173 @@
+%DEMGMM1 Demonstrate EM for Gaussian mixtures.
+%
+%	Description
+%	This script demonstrates the use of the EM algorithm to fit a mixture
+%	of Gaussians to a set of data using maximum likelihood. A colour
+%	coding scheme is used to illustrate the evaluation of the posterior
+%	probabilities in the E-step of the EM algorithm.
+%
+%	See also
+%	DEMGMM2, DEMGMM3, DEMGMM4, GMM, GMMEM, GMMPOST
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+clc;
+disp('This demonstration illustrates the use of the EM (expectation-')
+disp('maximization) algorithm for fitting of a mixture of Gaussians to a')
+disp('data set by maximum likelihood.')
+disp(' ')
+disp('The data set consists of 40 data points in a 2-dimensional')
+disp('space, generated by sampling from a mixture of 2 Gaussian')
+disp('distributions.')
+disp(' ')
+disp('Press any key to see a plot of the data.')
+pause;
+
+% Generate the data
+randn('state', 0); rand('state', 0);
+gmix = gmm(2, 2, 'spherical');
+ndat1 = 20; ndat2 = 20; ndata = ndat1+ndat2;
+gmix.centres =  [0.3 0.3; 0.7 0.7]; 
+gmix.covars = [0.01 0.01];
+x = gmmsamp(gmix, ndata);
+
+h = figure;
+hd = plot(x(:, 1), x(:, 2), '.g', 'markersize', 30);
+hold on; axis([0 1 0 1]); axis square; set(gca, 'box', 'on');
+ht = text(0.5, 1.05, 'Data', 'horizontalalignment', 'center');
+disp(' ');
+disp('Press any key to continue.')
+pause; clc;
+
+disp('We next create and initialize a mixture model consisting of a mixture')
+disp('of 2 Gaussians having ''spherical'' covariance matrices, using the')
+disp('function GMM. The Gaussian components can be displayed on the same')
+disp('plot as the data by drawing a contour of constant probability density')
+disp('for each component having radius equal to the corresponding standard')
+disp('deviation. Component 1 is coloured red and component 2 is coloured')
+disp('blue.')
+disp(' ')
+disp('Note that a particulary poor choice of initial parameters has been')
+disp('made in order to illustrate more effectively the operation of the')
+disp('EM algorithm.')
+disp(' ')
+disp('Press any key to see the initial configuration of the mixture model.')
+pause;
+
+% Set up mixture model
+ncentres = 2; input_dim = 2;
+mix = gmm(input_dim, ncentres, 'spherical');
+
+% Initialise the mixture model
+mix.centres = [0.2 0.8; 0.8, 0.2];
+mix.covars = [0.01 0.01];
+
+% Plot the initial model
+ncirc = 30; theta = linspace(0, 2*pi, ncirc);
+xs = cos(theta); ys = sin(theta);
+xvals = mix.centres(:, 1)*ones(1,ncirc) + sqrt(mix.covars')*xs;
+yvals = mix.centres(:, 2)*ones(1,ncirc) + sqrt(mix.covars')*ys;
+hc(1)=line(xvals(1,:), yvals(1,:), 'color', 'r');
+hc(2)=line(xvals(2,:), yvals(2,:), 'color', 'b');
+set(ht, 'string', 'Initial Configuration');
+figure(h);
+disp(' ')
+disp('Press any key to continue'); 
+pause; clc;
+
+disp('Now we adapt the parameters of the mixture model iteratively using the')
+disp('EM algorithm. Each cycle of the EM algorithm consists of an E-step')
+disp('followed by an M-step.  We start with the E-step, which involves the')
+disp('evaluation of the posterior probabilities (responsibilities) which the')
+disp('two components have for each of the data points.')
+disp(' ')
+disp('Since we have labelled the two components using the colours red and')
+disp('blue, a convenient way to indicate the value of a posterior')
+disp('probability for a given data point is to colour the point using a')
+disp('scale ranging from pure red (corresponding to a posterior probability')
+disp('of 1.0 for the red component and 0.0 for the blue component) through')
+disp('to pure blue.')
+disp(' ')
+disp('Press any key to see the result of applying the first E-step.')
+pause;
+
+% Initial E-step.
+set(ht, 'string', 'E-step');
+post = gmmpost(mix, x);
+dcols = [post(:,1), zeros(ndata, 1), post(:,2)];
+delete(hd); 
+for i = 1 : ndata
+  hd(i) = plot(x(i, 1), x(i, 2), 'color', dcols(i,:), ...
+          'marker', '.', 'markersize', 30);
+end
+figure(h);
+
+disp(' ');
+disp('Press any key to continue')
+pause; clc;
+
+disp('Next we perform the corresponding M-step. This involves replacing the')
+disp('centres of the component Gaussians by the corresponding weighted means')
+disp('of the data. Thus the centre of the red component is replaced by the')
+disp('mean of the data set, in which each data point is weighted according to')
+disp('the amount of red ink (corresponding to the responsibility of')
+disp('component 1 for explaining that data point). The variances and mixing')
+disp('proportions of the two components are similarly re-estimated.')
+disp(' ')
+disp('Press any key to see the result of applying the first M-step.')
+pause;
+
+% M-step.
+set(ht, 'string', 'M-step');
+options = foptions; 
+options(14) = 1; % A single iteration
+options(1) = -1; % Switch off all messages, including warning
+mix = gmmem(mix, x, options);
+delete(hc);
+xvals = mix.centres(:, 1)*ones(1,ncirc) + sqrt(mix.covars')*xs;
+yvals = mix.centres(:, 2)*ones(1,ncirc) + sqrt(mix.covars')*ys;
+hc(1)=line(xvals(1,:), yvals(1,:), 'color', 'r');
+hc(2)=line(xvals(2,:), yvals(2,:), 'color', 'b');
+figure(h);
+disp(' ')
+disp('Press any key to continue')
+pause; clc;
+
+disp('We can continue making alternate E and M steps until the changes in')
+disp('the log likelihood at each cycle become sufficiently small.')
+disp(' ')
+disp('Press any key to see an animation of a further 9 EM cycles.')
+pause;
+figure(h);
+
+% Loop over EM iterations.
+numiters = 9;
+for n = 1 : numiters
+
+  set(ht, 'string', 'E-step');
+  post = gmmpost(mix, x);
+  dcols = [post(:,1), zeros(ndata, 1), post(:,2)];
+  delete(hd); 
+  for i = 1 : ndata
+    hd(i) = plot(x(i, 1), x(i, 2), 'color', dcols(i,:), ...
+                 'marker', '.', 'markersize', 30);
+  end
+  pause(1)
+
+  set(ht, 'string', 'M-step');
+  [mix, options] = gmmem(mix, x, options);
+  fprintf(1, 'Cycle %4d  Error %11.6f\n', n, options(8));
+  delete(hc);
+  xvals = mix.centres(:, 1)*ones(1,ncirc) + sqrt(mix.covars')*xs;
+  yvals = mix.centres(:, 2)*ones(1,ncirc) + sqrt(mix.covars')*ys;
+  hc(1)=line(xvals(1,:), yvals(1,:), 'color', 'r');
+  hc(2)=line(xvals(2,:), yvals(2,:), 'color', 'b');
+  pause(1)
+
+end
+
+disp(' ');
+disp('Press any key to end.')
+pause; clc; close(h); clear all
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demgmm2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,152 @@
+%DEMGMM1 Demonstrate density modelling with a Gaussian mixture model.
+%
+%	Description
+%	The problem consists of modelling data generated by a mixture of
+%	three Gaussians in 2 dimensions.  The priors are 0.3, 0.5 and 0.2;
+%	the centres are (2, 3.5), (0, 0) and (0,2); the variances are 0.2,
+%	0.5 and 1.0. The first figure contains a  scatter plot of the data.
+%
+%	A Gaussian mixture model with three components is trained using EM.
+%	The parameter vector is printed before training and after training.
+%	The user should press any key to continue at these points.  The
+%	parameter vector consists of priors (the column), centres (given as
+%	(x, y) pairs as the next two columns), and variances (the last
+%	column).
+%
+%	The second figure is a 3 dimensional view of the density function,
+%	while the third shows the 1-standard deviation circles for the three
+%	components of the mixture model.
+%
+%	See also
+%	GMM, GMMINIT, GMMEM, GMMPROB, GMMUNPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Generate the data
+% Fix seeds for reproducible results
+randn('state', 42);
+rand('state', 42);
+
+ndata = 500;
+[data, datac, datap, datasd] = dem2ddat(ndata);
+
+clc
+disp('This demonstration illustrates the use of a Gaussian mixture model')
+disp('to approximate the unconditional probability density of data in')
+disp('a two-dimensional space.  We begin by generating the data from')
+disp('a mixture of three Gaussians and plotting it.')
+disp(' ')
+disp('Press any key to continue')
+pause
+
+fh1 = figure;
+plot(data(:, 1), data(:, 2), 'o')
+set(gca, 'Box', 'on')
+% Set up mixture model
+ncentres = 3;
+input_dim = 2;
+mix = gmm(input_dim, ncentres, 'spherical');
+
+options = foptions;
+options(14) = 5;	% Just use 5 iterations of k-means in initialisation
+% Initialise the model parameters from the data
+mix = gmminit(mix, data, options);
+
+clc
+disp('The data is drawn from a mixture with parameters')
+disp('    Priors        Centres         Variances')
+disp([datap' datac (datasd.^2)'])
+disp(' ')
+disp('The mixture model has three components and spherical covariance')
+disp('matrices.  The model parameters after initialisation using the')
+disp('k-means algorithm are as follows')
+% Print out model
+disp('    Priors        Centres         Variances')
+disp([mix.priors' mix.centres mix.covars'])
+disp('Press any key to continue')
+pause
+
+% Set up vector of options for EM trainer
+options = zeros(1, 18);
+options(1)  = 1;		% Prints out error values.
+options(14) = 10;		% Max. Number of iterations.
+
+disp('We now train the model using the EM algorithm for 10 iterations')
+disp(' ')
+disp('Press any key to continue')
+pause
+[mix, options, errlog] = gmmem(mix, data, options);
+
+% Print out model
+disp(' ')
+disp('The trained model has parameters ')
+disp('    Priors        Centres         Variances')
+disp([mix.priors' mix.centres mix.covars'])
+disp('Note the close correspondence between these parameters and those')
+disp('of the distribution used to generate the data, which are repeated here.')
+disp('    Priors        Centres         Variances')
+disp([datap' datac (datasd.^2)'])
+disp(' ')
+disp('Press any key to continue')
+pause
+
+clc
+disp('We now plot the density given by the mixture model as a surface plot')
+disp(' ')
+disp('Press any key to continue')
+pause
+% Plot the result
+x = -4.0:0.2:5.0;
+y = -4.0:0.2:5.0;
+[X, Y] = meshgrid(x,y);
+X = X(:);
+Y = Y(:);
+grid = [X Y];
+Z = gmmprob(mix, grid);
+Z = reshape(Z, length(x), length(y));
+c = mesh(x, y, Z);
+hold on
+title('Surface plot of probability density')
+hold off
+
+clc
+disp('The final plot shows the centres and widths, given by one standard')
+disp('deviation, of the three components of the mixture model.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Try to calculate a sensible position for the second figure, below the first
+fig1_pos = get(fh1, 'Position');
+fig2_pos = fig1_pos;
+fig2_pos(2) = fig2_pos(2) - fig1_pos(4);
+fh2 = figure;
+set(fh2, 'Position', fig2_pos)
+
+hp1 = plot(data(:, 1), data(:, 2), 'bo');
+axis('equal');
+hold on
+hp2 = plot(mix.centres(:, 1), mix.centres(:,2), 'g+');
+set(hp2, 'MarkerSize', 10);
+set(hp2, 'LineWidth', 3);
+
+title('Plot of data and mixture centres')
+angles = 0:pi/30:2*pi;
+for i = 1 : mix.ncentres
+  x_circle = mix.centres(i,1)*ones(1, length(angles)) + ...
+    sqrt(mix.covars(i))*cos(angles);
+  y_circle = mix.centres(i,2)*ones(1, length(angles)) + ...
+    sqrt(mix.covars(i))*sin(angles);
+  plot(x_circle, y_circle, 'r')
+end
+hold off
+disp('Note how the data cluster positions and widths are captured by')
+disp('the mixture model.')
+disp(' ')
+disp('Press any key to end.')
+pause
+
+close(fh1);
+close(fh2);
+clear all; 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demgmm3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,192 @@
+%DEMGMM3 Demonstrate density modelling with a Gaussian mixture model.
+%
+%	Description
+%	 The problem consists of modelling data generated by a mixture of
+%	three Gaussians in 2 dimensions with a mixture model using diagonal
+%	covariance matrices.  The priors are 0.3, 0.5 and 0.2; the centres
+%	are (2, 3.5), (0, 0) and (0,2); the covariances are all axis aligned
+%	(0.16, 0.64), (0.25, 1) and the identity matrix. The first figure
+%	contains a scatter plot of the data.
+%
+%	A Gaussian mixture model with three components is trained using EM.
+%	The parameter vector is printed before training and after training.
+%	The user should press any key to continue at these points.  The
+%	parameter vector consists of priors (the column), and centres (given
+%	as (x, y) pairs as the next two columns).  The diagonal entries of
+%	the covariance matrices are printed separately.
+%
+%	The second figure is a 3 dimensional view of the density function,
+%	while the third shows the axes of the 1-standard deviation circles
+%	for the three components of the mixture model.
+%
+%	See also
+%	GMM, GMMINIT, GMMEM, GMMPROB, GMMUNPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Generate the data
+ndata = 500;
+
+% Fix the seeds for reproducible results
+randn('state', 42);
+rand('state', 42);
+data = randn(ndata, 2);
+prior = [0.3 0.5 0.2];
+% Mixture model swaps clusters 1 and 3
+datap = [0.2 0.5 0.3];
+datac = [0 2; 0 0; 2 3.5];
+datacov = [1 1;1 0.25; 0.4*0.4 0.8*0.8];
+data1 = data(1:prior(1)*ndata,:);
+data2 = data(prior(1)*ndata+1:(prior(2)+prior(1))*ndata, :);
+data3 = data((prior(1)+prior(2))*ndata +1:ndata, :);
+
+% First cluster has axis aligned variance and centre (2, 3.5)
+data1(:, 1) = data1(:, 1)*0.4 + 2.0;
+data1(:, 2) = data1(:, 2)*0.8 + 3.5;
+
+% Second cluster has axis aligned variance and centre (0, 0)
+data2(:,2) = data2(:, 2)*0.5;
+
+% Third cluster is at (0,2) with identity matrix for covariance
+data3 = data3 + repmat([0 2], prior(3)*ndata, 1);
+
+% Put the dataset together again
+data = [data1; data2; data3];
+
+clc
+disp('This demonstration illustrates the use of a Gaussian mixture model')
+disp('with diagonal covariance matrices to approximate the unconditional')
+disp('probability density of data in a two-dimensional space.')
+disp('We begin by generating the data from a mixture of three Gaussians')
+disp('with axis aligned covariance structure and plotting it.')
+disp(' ')
+disp('The first cluster has centre (0, 2).')
+disp('The second cluster has centre (0, 0).')
+disp('The third cluster has centre (2, 3.5).')
+disp(' ')
+disp('Press any key to continue')
+pause
+
+fh1 = figure;
+plot(data(:, 1), data(:, 2), 'o')
+set(gca, 'Box', 'on')
+
+% Set up mixture model
+ncentres = 3;
+input_dim = 2;
+mix = gmm(input_dim, ncentres, 'diag');
+
+options = foptions;
+options(14) = 5;	% Just use 5 iterations of k-means in initialisation
+% Initialise the model parameters from the data
+mix = gmminit(mix, data, options);
+
+% Print out model
+disp('The mixture model has three components and diagonal covariance')
+disp('matrices.  The model parameters after initialisation using the')
+disp('k-means algorithm are as follows')
+disp('    Priors        Centres')
+disp([mix.priors' mix.centres])
+disp('Covariance diagonals are')
+disp(mix.covars)
+disp('Press any key to continue.')
+pause
+
+% Set up vector of options for EM trainer
+options = zeros(1, 18);
+options(1)  = 1;		% Prints out error values.
+options(14) = 20;		% Number of iterations.
+
+disp('We now train the model using the EM algorithm for 20 iterations.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+[mix, options, errlog] = gmmem(mix, data, options);
+
+% Print out model
+disp(' ')
+disp('The trained model has priors and centres:')
+disp('    Priors        Centres')
+disp([mix.priors' mix.centres])
+disp('The data generator has priors and centres')
+disp('    Priors        Centres')
+disp([datap' datac])
+disp('Model covariance diagonals are')
+disp(mix.covars)
+disp('Data generator covariance diagonals are')
+disp(datacov)
+disp('Note the close correspondence between these parameters and those')
+disp('of the distribution used to generate the data.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+clc
+disp('We now plot the density given by the mixture model as a surface plot.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Plot the result
+x = -4.0:0.2:5.0;
+y = -4.0:0.2:5.0;
+[X, Y] = meshgrid(x,y);
+X = X(:);
+Y = Y(:);
+grid = [X Y];
+Z = gmmprob(mix, grid);
+Z = reshape(Z, length(x), length(y));
+c = mesh(x, y, Z);
+hold on
+title('Surface plot of probability density')
+hold off
+drawnow
+
+clc
+disp('The final plot shows the centres and widths, given by one standard')
+disp('deviation, of the three components of the mixture model.  The axes')
+disp('of the ellipses of constant density are shown.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Try to calculate a sensible position for the second figure, below the first
+fig1_pos = get(fh1, 'Position');
+fig2_pos = fig1_pos;
+fig2_pos(2) = fig2_pos(2) - fig1_pos(4);
+fh2 = figure('Position', fig2_pos);
+
+h = plot(data(:, 1), data(:, 2), 'bo');
+hold on
+axis('equal');
+title('Plot of data and covariances')
+for i = 1:ncentres
+  v = [1 0];
+  for j = 1:2
+    start=mix.centres(i,:)-sqrt(mix.covars(i,:).*v);
+    endpt=mix.centres(i,:)+sqrt(mix.covars(i,:).*v);
+    linex = [start(1) endpt(1)];
+    liney = [start(2) endpt(2)];
+    line(linex, liney, 'Color', 'k', 'LineWidth', 3)
+    v = [0 1];
+  end
+  % Plot ellipses of one standard deviation
+  theta = 0:0.02:2*pi;
+  x = sqrt(mix.covars(i,1))*cos(theta) + mix.centres(i,1);
+  y = sqrt(mix.covars(i,2))*sin(theta) + mix.centres(i,2);
+  plot(x, y, 'r-');
+end
+hold off
+
+disp('Note how the data cluster positions and widths are captured by')
+disp('the mixture model.')
+disp(' ')
+disp('Press any key to end.')
+pause
+
+close(fh1);
+close(fh2);
+clear all;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demgmm4.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,210 @@
+%DEMGMM4 Demonstrate density modelling with a Gaussian mixture model.
+%
+%	Description
+%	 The problem consists of modelling data generated by a mixture of
+%	three Gaussians in 2 dimensions with a mixture model using full
+%	covariance matrices.  The priors are 0.3, 0.5 and 0.2; the centres
+%	are (2, 3.5), (0, 0) and (0,2); the variances are (0.16, 0.64) axis
+%	aligned, (0.25, 1) rotated by 30 degrees and the identity matrix. The
+%	first figure contains a scatter plot of the data.
+%
+%	A Gaussian mixture model with three components is trained using EM.
+%	The parameter vector is printed before training and after training.
+%	The user should press any key to continue at these points.  The
+%	parameter vector consists of priors (the column), and centres (given
+%	as (x, y) pairs as the next two columns).  The covariance matrices
+%	are printed separately.
+%
+%	The second figure is a 3 dimensional view of the density function,
+%	while the third shows the axes of the 1-standard deviation ellipses
+%	for the three components of the mixture model.
+%
+%	See also
+%	GMM, GMMINIT, GMMEM, GMMPROB, GMMUNPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Generate the data
+
+ndata = 500;
+
+% Fix the seeds for reproducible results
+randn('state', 42);
+rand('state', 42);
+data = randn(ndata, 2);
+prior = [0.3 0.5 0.2];
+% Mixture model swaps clusters 1 and 3
+datap = [0.2 0.5 0.3];
+datac = [0 2; 0 0; 2 3.5];
+datacov = repmat(eye(2), [1 1 3]);
+data1 = data(1:prior(1)*ndata,:);
+data2 = data(prior(1)*ndata+1:(prior(2)+prior(1))*ndata, :);
+data3 = data((prior(1)+prior(2))*ndata +1:ndata, :);
+
+% First cluster has axis aligned variance and centre (2, 3.5)
+data1(:, 1) = data1(:, 1)*0.4 + 2.0;
+data1(:, 2) = data1(:, 2)*0.8 + 3.5;
+datacov(:, :, 3) = [0.4*0.4 0; 0 0.8*0.8];
+
+% Second cluster has variance axes rotated by 30 degrees and centre (0, 0)
+rotn = [cos(pi/6) -sin(pi/6); sin(pi/6) cos(pi/6)];
+data2(:,1) = data2(:, 1)*0.5;
+data2 = data2*rotn;
+datacov(:, :, 2) = rotn' * [0.25 0; 0 1] * rotn;
+
+% Third cluster is at (0,2)
+data3 = data3 + repmat([0 2], prior(3)*ndata, 1);
+
+% Put the dataset together again
+data = [data1; data2; data3];
+
+clc
+disp('This demonstration illustrates the use of a Gaussian mixture model')
+disp('with full covariance matrices to approximate the unconditional ')
+disp('probability density of data in a two-dimensional space.')
+disp('We begin by generating the data from a mixture of three Gaussians and')
+disp('plotting it.')
+disp(' ')
+disp('The first cluster has axis aligned variance and centre (0, 2).')
+disp('The second cluster has variance axes rotated by 30 degrees')
+disp('and centre (0, 0).  The third cluster has unit variance and centre')
+disp('(2, 3.5).')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+fh1 = figure;
+plot(data(:, 1), data(:, 2), 'o')
+set(gca, 'Box', 'on')
+
+% Set up mixture model
+ncentres = 3;
+input_dim = 2;
+mix = gmm(input_dim, ncentres, 'full');
+
+% Initialise the model parameters from the data
+options = foptions;
+options(14) = 5;	% Just use 5 iterations of k-means in initialisation
+mix = gmminit(mix, data, options);
+
+% Print out model
+clc
+disp('The mixture model has three components and full covariance')
+disp('matrices.  The model parameters after initialisation using the')
+disp('k-means algorithm are as follows')
+disp('    Priors        Centres')
+disp([mix.priors' mix.centres])
+disp('Covariance matrices are')
+disp(mix.covars)
+disp('Press any key to continue.')
+pause
+
+% Set up vector of options for EM trainer
+options = zeros(1, 18);
+options(1)  = 1;		% Prints out error values.
+options(14) = 50;		% Number of iterations.
+
+disp('We now train the model using the EM algorithm for 50 iterations.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+[mix, options, errlog] = gmmem(mix, data, options);
+
+% Print out model
+disp(' ')
+disp('The trained model has priors and centres:')
+disp('    Priors        Centres')
+disp([mix.priors' mix.centres])
+disp('The data generator has priors and centres')
+disp('    Priors        Centres')
+disp([datap' datac])
+disp('Model covariance matrices are')
+disp(mix.covars(:, :, 1))
+disp(mix.covars(:, :, 2))
+disp(mix.covars(:, :, 3))
+disp('Data generator covariance matrices are')
+disp(datacov(:, :, 1))
+disp(datacov(:, :, 2))
+disp(datacov(:, :, 3))
+disp('Note the close correspondence between these parameters and those')
+disp('of the distribution used to generate the data.  The match for')
+disp('covariance matrices is not that close, but would be improved with')
+disp('more iterations of the training algorithm.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+clc
+disp('We now plot the density given by the mixture model as a surface plot.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Plot the result
+x = -4.0:0.2:5.0;
+y = -4.0:0.2:5.0;
+[X, Y] = meshgrid(x,y);
+X = X(:);
+Y = Y(:);
+grid = [X Y];
+Z = gmmprob(mix, grid);
+Z = reshape(Z, length(x), length(y));
+c = mesh(x, y, Z);
+hold on
+title('Surface plot of probability density')
+hold off
+drawnow
+
+clc
+disp('The final plot shows the centres and widths, given by one standard')
+disp('deviation, of the three components of the mixture model.  The axes')
+disp('of the ellipses of constant density are shown.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Try to calculate a sensible position for the second figure, below the first
+fig1_pos = get(fh1, 'Position');
+fig2_pos = fig1_pos;
+fig2_pos(2) = fig2_pos(2) - fig1_pos(4) - 30;
+fh2 = figure('Position', fig2_pos);
+
+h3 = plot(data(:, 1), data(:, 2), 'bo');
+axis equal;
+hold on
+title('Plot of data and covariances')
+for i = 1:ncentres
+  [v,d] = eig(mix.covars(:,:,i));
+  for j = 1:2
+    % Ensure that eigenvector has unit length
+    v(:,j) = v(:,j)/norm(v(:,j));
+    start=mix.centres(i,:)-sqrt(d(j,j))*(v(:,j)');
+    endpt=mix.centres(i,:)+sqrt(d(j,j))*(v(:,j)');
+    linex = [start(1) endpt(1)];
+    liney = [start(2) endpt(2)];
+    line(linex, liney, 'Color', 'k', 'LineWidth', 3)
+  end
+  % Plot ellipses of one standard deviation
+  theta = 0:0.02:2*pi;
+  x = sqrt(d(1,1))*cos(theta);
+  y = sqrt(d(2,2))*sin(theta);
+  % Rotate ellipse axes
+  ellipse = (v*([x; y]))';
+  % Adjust centre
+  ellipse = ellipse + ones(length(theta), 1)*mix.centres(i,:);
+  plot(ellipse(:,1), ellipse(:,2), 'r-');
+end
+hold off
+
+disp('Note how the data cluster positions and widths are captured by')
+disp('the mixture model.')
+disp(' ')
+disp('Press any key to end.')
+pause
+
+close(fh1);
+close(fh2);
+clear all; 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demgmm5.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,147 @@
+%DEMGMM5 Demonstrate density modelling with a PPCA mixture model.
+%
+%	Description
+%	 The problem consists of modelling data generated by a mixture of
+%	three Gaussians in 2 dimensions with a mixture model using full
+%	covariance matrices.  The priors are 0.3, 0.5 and 0.2; the centres
+%	are (2, 3.5), (0, 0) and (0,2); the variances are (0.16, 0.64) axis
+%	aligned, (0.25, 1) rotated by 30 degrees and the identity matrix. The
+%	first figure contains a scatter plot of the data.
+%
+%	A mixture model with three one-dimensional PPCA components is trained
+%	using EM.  The parameter vector is printed before training and after
+%	training.  The parameter vector consists of priors (the column), and
+%	centres (given as (x, y) pairs as the next two columns).
+%
+%	The second figure is a 3 dimensional view of the density function,
+%	while the third shows the axes of the 1-standard deviation ellipses
+%	for the three components of the mixture model together with the one
+%	standard deviation along the principal component of each mixture
+%	model component.
+%
+%	See also
+%	GMM, GMMINIT, GMMEM, GMMPROB, PPCA
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+ndata = 500;
+data = randn(ndata, 2);
+prior = [0.3 0.5 0.2];
+% Mixture model swaps clusters 1 and 3
+datap = [0.2 0.5 0.3];
+datac = [0 2; 0 0; 2 3.5];
+datacov = repmat(eye(2), [1 1 3]);
+data1 = data(1:prior(1)*ndata,:);
+data2 = data(prior(1)*ndata+1:(prior(2)+prior(1))*ndata, :);
+data3 = data((prior(1)+prior(2))*ndata +1:ndata, :);
+
+% First cluster has axis aligned variance and centre (2, 3.5)
+data1(:, 1) = data1(:, 1)*0.1 + 2.0;
+data1(:, 2) = data1(:, 2)*0.8 + 3.5;
+datacov(:, :, 3) = [0.1*0.1 0; 0 0.8*0.8];
+
+% Second cluster has variance axes rotated by 30 degrees and centre (0, 0)
+rotn = [cos(pi/6) -sin(pi/6); sin(pi/6) cos(pi/6)];
+data2(:,1) = data2(:, 1)*0.2;
+data2 = data2*rotn;
+datacov(:, :, 2) = rotn' * [0.04 0; 0 1] * rotn;
+
+% Third cluster is at (0,2)
+data3(:, 2) = data3(:, 2)*0.1;
+data3 = data3 + repmat([0 2], prior(3)*ndata, 1);
+
+% Put the dataset together again
+data = [data1; data2; data3];
+
+ndata = 100;			% Number of data points.
+noise = 0.2;			% Standard deviation of noise distribution.
+x = [0:1/(2*(ndata - 1)):0.5]';
+randn('state', 1);
+rand('state', 1);
+t = sin(2*pi*x) + noise*randn(ndata, 1);
+
+% Fit three one-dimensional PPCA models
+ncentres = 3;
+ppca_dim = 1;
+
+clc
+disp('This demonstration illustrates the use of a Gaussian mixture model')
+disp('with a probabilistic PCA covariance structure to approximate the')
+disp('unconditional probability density of data in a two-dimensional space.')
+disp('We begin by generating the data from a mixture of three Gaussians and')
+disp('plotting it.')
+disp(' ')
+disp('The first cluster has axis aligned variance and centre (0, 2).')
+disp('The variance parallel to the x-axis is significantly greater')
+disp('than that parallel to the y-axis.')
+disp('The second cluster has variance axes rotated by 30 degrees')
+disp('and centre (0, 0).  The third cluster has significant variance')
+disp('parallel to the y-axis and centre (2, 3.5).')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+fh1 = figure;
+plot(data(:, 1), data(:, 2), 'o')
+set(gca, 'Box', 'on')
+axis equal
+hold on
+
+mix = gmm(2, ncentres, 'ppca', ppca_dim);
+options = foptions;
+options(14) = 10;
+options(1) = -1;  % Switch off all warnings
+
+% Just use 10 iterations of k-means in initialisation
+% Initialise the model parameters from the data
+mix = gmminit(mix, data, options);
+disp('The mixture model has three components with 1-dimensional')
+disp('PPCA subspaces.  The model parameters after initialisation using')
+disp('the k-means algorithm are as follows')
+disp('    Priors        Centres')
+disp([mix.priors' mix.centres])
+disp(' ')
+disp('Press any key to continue')
+pause
+
+options(1)  = 1;		% Prints out error values.
+options(14) = 30;		% Number of iterations.
+
+disp('We now train the model using the EM algorithm for up to 30 iterations.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+[mix, options, errlog] = gmmem(mix, data, options);
+disp('The trained model has priors and centres:')
+disp('    Priors        Centres')
+disp([mix.priors' mix.centres])
+
+% Now plot the result
+for i = 1:ncentres
+  % Plot the PC vectors
+  v = mix.U(:,:,i);
+  start=mix.centres(i,:)-sqrt(mix.lambda(i))*(v');
+  endpt=mix.centres(i,:)+sqrt(mix.lambda(i))*(v');
+  linex = [start(1) endpt(1)];
+  liney = [start(2) endpt(2)];
+  line(linex, liney, 'Color', 'k', 'LineWidth', 3)
+  % Plot ellipses of one standard deviation
+  theta = 0:0.02:2*pi;
+  x = sqrt(mix.lambda(i))*cos(theta);
+  y = sqrt(mix.covars(i))*sin(theta);
+  % Rotate ellipse axes
+  rot_matrix = [v(1) -v(2); v(2) v(1)];
+  ellipse = (rot_matrix*([x; y]))';
+  % Adjust centre
+  ellipse = ellipse + ones(length(theta), 1)*mix.centres(i,:);
+  plot(ellipse(:,1), ellipse(:,2), 'r-')
+end
+
+disp(' ')
+disp('Press any key to exit')
+pause
+close (fh1);
+clear all;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demgp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,160 @@
+%DEMGP	Demonstrate simple regression using a Gaussian Process.
+%
+%	Description
+%	The problem consists of one input variable X and one target variable
+%	T. The values in X are chosen in two separated clusters and the
+%	target data is generated by computing SIN(2*PI*X) and adding Gaussian
+%	noise. Two Gaussian Processes, each with different covariance
+%	functions are trained by optimising the hyperparameters  using the
+%	scaled conjugate gradient algorithm.  The final predictions are
+%	plotted together with 2 standard deviation error bars.
+%
+%	See also
+%	GP, GPERR, GPFWD, GPGRAD, GPINIT, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Find out if flops is available (i.e. pre-version 6 Matlab)
+v = version;
+if (str2num(strtok(v, '.')) >= 6)
+    flops_works = logical(0);
+else
+    flops_works = logical(1);
+end
+
+randn('state', 42);
+x = [0.1 0.15 0.2 0.25  0.65 0.7 0.75 0.8 0.85 0.9]';
+ndata = length(x);
+t = sin(2*pi*x) + 0.05*randn(ndata, 1);
+
+xtest = linspace(0, 1, 50)';
+
+clc
+disp('This demonstration illustrates the use of a Gaussian Process')
+disp('model for regression problems.  The data is generated from a noisy')
+disp('sine function.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+flops(0);
+% Initialise the parameters.
+net = gp(1, 'sqexp');
+prior.pr_mean = 0;
+prior.pr_var = 1;
+net = gpinit(net, x, t, prior);
+
+clc
+disp('The first GP uses the squared exponential covariance function.')
+disp('The hyperparameters are initialised by sampling from a Gaussian with a')
+disp(['mean of ', num2str(prior.pr_mean), ' and variance ', ...
+    num2str(prior.pr_var), '.'])
+disp('After initializing the network, we train it using the scaled conjugate')
+disp('gradients algorithm for 20 cycles.')
+disp(' ')
+disp('Press any key to continue')
+pause
+
+% Now train to find the hyperparameters.
+options = foptions;
+options(1) = 1;    % Display training error values
+options(14) = 20;
+flops(0)
+[net, options] = netopt(net, options, x, t, 'scg');
+if flops_works
+    sflops = flops;
+end
+
+disp('The second GP uses the rational quadratic covariance function.')
+disp('The hyperparameters are initialised by sampling from a Gaussian with a')
+disp(['mean of ', num2str(prior.pr_mean), ' and variance ', num2str(prior.pr_var)])
+disp('After initializing the network, we train it using the scaled conjugate')
+disp('gradients algorithm for 20 cycles.')
+disp(' ')
+disp('Press any key to continue')
+pause
+flops(0)
+net2 = gp(1, 'ratquad');
+net2 = gpinit(net2, x, t, prior);
+flops(0)
+[net2, options] = netopt(net2, options, x, t, 'scg');
+if flops_works
+    rflops = flops;
+end
+
+disp(' ')
+disp('Press any key to continue')
+disp(' ')
+pause
+clc
+
+fprintf(1, 'For squared exponential covariance function,');
+if flops_works    
+    fprintf(1, 'flops = %d', sflops);
+end
+fprintf(1, '\nfinal hyperparameters:\n')
+format_string = strcat('  bias:\t\t\t%10.6f\n  noise:\t\t%10.6f\n', ...
+  '  inverse lengthscale:\t%10.6f\n  vertical scale:\t%10.6f\n');
+fprintf(1, format_string, ...
+    exp(net.bias), exp(net.noise), exp(net.inweights(1)), exp(net.fpar(1)));
+fprintf(1, '\n\nFor rational quadratic covariance function,');
+if flops_works
+    fprintf(1, 'flops = %d', rflops);
+end
+fprintf(1, '\nfinal hyperparameters:\n')
+format_string = [format_string '  cov decay order:\t%10.6f\n'];
+fprintf(1, format_string, ...
+      exp(net2.bias), exp(net2.noise), exp(net2.inweights(1)), ...
+      exp(net2.fpar(1)), exp(net2.fpar(2)));
+disp(' ')
+disp('Press any key to continue')
+pause
+
+disp(' ')
+disp('Now we plot the data, underlying function, model outputs and two')
+disp('standard deviation error bars on a single graph to compare the results.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+cn = gpcovar(net, x); 
+cninv = inv(cn);
+[ytest, sigsq] = gpfwd(net, xtest, cninv);
+sig = sqrt(sigsq);
+
+fh1 = figure;
+hold on
+plot(x, t, 'ok');
+xlabel('Input')
+ylabel('Target')
+fplot('sin(2*pi*x)', [0 1], '--m');
+plot(xtest, ytest, '-k');
+plot(xtest, ytest+(2*sig), '-b', xtest, ytest-(2*sig), '-b');
+axis([0 1 -1.5 1.5]);
+title('Squared exponential covariance function')
+legend('data', 'function', 'GP', 'error bars');
+hold off
+
+cninv2 = inv(gpcovar(net2, x));
+[ytest2, sigsq2] = gpfwd(net2, xtest, cninv2);
+sig2 = sqrt(sigsq2);
+fh2 = figure;
+hold on
+plot(x, t, 'ok');
+xlabel('Input')
+ylabel('Target')
+fplot('sin(2*pi*x)', [0 1], '--m');
+plot(xtest, ytest2, '-k');
+plot(xtest, ytest2+(2*sig2), '-b', xtest, ytest2-(2*sig2), '-b');
+axis([0 1 -1.5 1.5]);
+title('Rational quadratic covariance function')
+legend('data', 'function', 'GP', 'error bars');
+hold off
+
+disp(' ')
+disp('Press any key to end.')
+pause
+close(fh1);
+close(fh2);
+clear all;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demgpard.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,126 @@
+%DEMGPARD Demonstrate ARD using a Gaussian Process.
+%
+%	Description
+%	The data consists of three input variables X1, X2 and X3, and one
+%	target variable  T. The  target data is generated by computing
+%	SIN(2*PI*X1) and adding Gaussian  noise, x2 is a copy of x1 with a
+%	higher level of added noise, and x3 is sampled randomly from a
+%	Gaussian distribution. A Gaussian Process, is trained by optimising
+%	the hyperparameters  using the scaled conjugate gradient algorithm.
+%	The final values of the hyperparameters show that the model
+%	successfully identifies the importance of each input.
+%
+%	See also
+%	DEMGP, GP, GPERR, GPFWD, GPGRAD, GPINIT, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+clc;
+randn('state', 1729);
+rand('state', 1729);
+disp('This demonstration illustrates the technique of automatic relevance')
+disp('determination (ARD) using a Gaussian Process.')
+disp(' ');
+disp('First, we set up a synthetic data set involving three input variables:')
+disp('x1 is sampled uniformly from the range (0,1) and has a low level of')
+disp('added Gaussian noise, x2 is a copy of x1 with a higher level of added')
+disp('noise, and x3 is sampled randomly from a Gaussian distribution. The')
+disp('single target variable is given by t = sin(2*pi*x1) with additive')
+disp('Gaussian noise. Thus x1 is very relevant for determining the target')
+disp('value, x2 is of some relevance, while x3 should in principle be')
+disp('irrelevant.')
+disp(' ');
+disp('Press any key to see a plot of t against x1.')
+pause;
+
+ndata = 100;
+x1 = rand(ndata, 1);
+x2 = x1 + 0.05*randn(ndata, 1);
+x3 = 0.5 + 0.5*randn(ndata, 1);
+x = [x1, x2, x3];
+t = sin(2*pi*x1) + 0.1*randn(ndata, 1);
+
+% Plot the data and the original function.
+h = figure;
+plotvals = linspace(0, 1, 200)';
+plot(x1, t, 'ob')
+hold on
+xlabel('Input x1')
+ylabel('Target')
+axis([0 1 -1.5 1.5])
+[fx, fy] = fplot('sin(2*pi*x)', [0 1]);
+plot(fx, fy, '-g', 'LineWidth', 2);
+legend('data', 'function');
+
+disp(' ');
+disp('Press any key to continue')
+pause; clc;
+
+disp('The Gaussian Process has a separate hyperparameter for each input.')
+disp('The hyperparameters are trained by error minimisation using the scaled.')
+disp('conjugate gradient optimiser.')
+disp(' ');
+disp('Press any key to create and train the model.')
+disp(' ');
+pause;
+
+net = gp(3, 'sqexp');
+% Initialise the parameters.
+prior.pr_mean = 0;
+prior.pr_var = 0.1;
+net = gpinit(net, x, t, prior);
+
+% Now train to find the hyperparameters.
+options = foptions;
+options(1) = 1;
+options(14) = 30;
+
+[net, options] = netopt(net, options, x, t, 'scg');
+
+rel = exp(net.inweights);
+
+fprintf(1, ...
+  '\nFinal hyperparameters:\n\n  bias:\t\t%10.6f\n  noise:\t%10.6f\n', ...
+  exp(net.bias), exp(net.noise));
+fprintf(1, '  Vertical scale: %8.6f\n', exp(net.fpar(1)));
+fprintf(1, '  Input 1:\t%10.6f\n  Input 2:\t%10.6f\n', ...
+  rel(1), rel(2));
+fprintf(1, '  Input 3:\t%10.6f\n\n', rel(3));
+disp(' ');
+disp('We see that the inverse lengthscale associated with')
+disp('input x1 is large, that of x2 has an intermediate value and the variance')
+disp('of weights associated with x3 is small.')
+disp(' ');
+disp('This implies that the Gaussian Process is giving greatest emphasis')
+disp('to x1 and least emphasis to x3, with intermediate emphasis on')
+disp('x2 in the covariance function.')
+disp(' ')
+disp('Since the target t is statistically independent of x3 we might')
+disp('expect the weights associated with this input would go to')
+disp('zero. However, for any finite data set there may be some chance')
+disp('correlation between x3 and t, and so the corresponding hyperparameter remains')
+disp('finite.')
+disp('Press any key to continue.')
+pause
+
+disp('Finally, we plot the output of the Gaussian Process along the line')
+disp('x1 = x2 = x3, together with the true underlying function.')
+xt = linspace(0, 1, 50);
+xtest = [xt', xt', xt'];
+
+cn = gpcovar(net, x);
+cninv = inv(cn);
+[ytest, sigsq] = gpfwd(net, xtest, cninv);
+sig = sqrt(sigsq);
+
+figure(h); hold on;
+plot(xt, ytest, '-k');
+plot(xt, ytest+(2*sig), '-b', xt, ytest-(2*sig), '-b');
+axis([0 1 -1.5 1.5]);
+fplot('sin(2*pi*x)', [0 1], '--m');
+
+disp(' ');
+disp('Press any key to end.')
+pause; clc; close(h); clear all
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demgpot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function g = demgpot(x, mix)
+%DEMGPOT Computes the gradient of the negative log likelihood for a mixture model.
+%
+%	Description
+%	This function computes the gradient of the negative log of the
+%	unconditional data density P(X) with respect to the coefficients of
+%	the data vector X for a Gaussian mixture model.  The data structure
+%	MIX defines the mixture model, while the matrix X contains the data
+%	vector as a row vector. Note the unusual order of the arguments: this
+%	is so that the function can be used in DEMHMC1 directly for sampling
+%	from the distribution P(X).
+%
+%	See also
+%	DEMHMC1, DEMMET1, DEMPOT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Computes the potential gradient
+
+temp = (ones(mix.ncentres,1)*x)-mix.centres;
+temp = temp.*(gmmactiv(mix,x)'*ones(1, mix.nin));
+% Assume spherical covariance structure
+if ~strcmp(mix.covar_type, 'spherical')
+  error('Spherical covariance only.')
+end
+temp = temp./(mix.covars'*ones(1, mix.nin));
+temp = temp.*(mix.priors'*ones(1, mix.nin));
+g = sum(temp, 1)/gmmprob(mix, x);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demgtm1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,147 @@
+%DEMGTM1 Demonstrate EM for GTM.
+%
+%	Description
+%	 This script demonstrates the use of the EM algorithm to fit a one-
+%	dimensional GTM to a two-dimensional set of data using maximum
+%	likelihood. The location and spread of the Gaussian kernels in the
+%	data space is shown during training.
+%
+%	See also
+%	DEMGTM2, GTM, GTMEM, GTMPOST
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Demonstrates the GTM with a 2D target space and a 1D latent space.
+%
+%		This script generates a simple data set in 2 dimensions, 
+%		with an intrinsic dimensionality of 1, and trains a GTM 
+%		with a 1-dimensional latent variable to model this data 
+%		set, visually illustrating the training process
+%
+% Synopsis:	gtm_demo
+
+% Generate and plot a 2D data set
+
+data_min = 0.15;
+data_max = 3.05;
+T = [data_min:0.05:data_max]';
+T = [T (T + 1.25*sin(2*T))];
+fh1 = figure;
+plot(T(:,1), T(:,2), 'ro');
+axis([data_min-0.05 data_max+0.05 data_min-0.05 data_max+0.05]);
+clc;
+disp('This demonstration shows in detail how the EM algorithm works')
+disp('for training a GTM with a one dimensional latent space.')
+disp(' ')
+fprintf([...
+'The figure shows data generated by feeding a 1D uniform distribution\n', ...
+'(on the X-axis) through a non-linear function (y = x + 1.25*sin(2*x))\n', ...
+'\nPress any key to continue ...\n\n']);
+pause;
+
+% Generate a unit circle figure, to be used for plotting
+src = [0:(2*pi)/(20-1):2*pi]';
+unitC = [sin(src) cos(src)];
+
+% Generate and plot (along with the data) an initial GTM model
+
+clc;
+num_latent_points = 20;
+num_rbf_centres = 5;
+
+net = gtm(1, num_latent_points, 2, num_rbf_centres, 'gaussian');
+
+options = zeros(1, 18);
+options(7) = 1;
+net = gtminit(net, options, T, 'regular', num_latent_points, ...
+   num_rbf_centres);
+
+mix = gtmfwd(net);
+% Replot the figure
+hold off;
+plot(mix.centres(:,1),  mix.centres(:,2), 'g');
+hold on;
+for i=1:num_latent_points
+  c = 2*unitC*sqrt(mix.covars(1)) + [ones(20,1)*mix.centres(i,1) ...
+      ones(num_latent_points,1)*mix.centres(i,2)];
+  fill(c(:,1), c(:,2), [0.8 1 0.8]);
+end
+plot(T(:,1), T(:,2), 'ro');
+plot(mix.centres(:,1),  mix.centres(:,2), 'g+');
+plot(mix.centres(:,1),  mix.centres(:,2), 'g');
+axis([data_min-0.05 data_max+0.05 data_min-0.05 data_max+0.05]);
+drawnow;
+title('Initial configuration');
+disp(' ')
+fprintf([...
+'The figure shows the starting point for the GTM, before the training.\n', ...
+'A discrete latent variable distribution of %d points in 1 dimension \n', ...
+'is mapped to the 1st principal component of the target data by an RBF.\n', ...
+'with %d basis functions.  Each of the %d points defines the centre of\n', ...
+'a Gaussian in a Gaussian mixture, marked by the green ''+''-signs.  The\n', ...
+'mixture components all have equal variance, illustrated by the filled\n', ...
+'circle around each ''+''-sign, the radii corresponding to 2 standard\n', ...
+'deviations.  The ''+''-signs are connected with a line according to their\n', ...
+'corresponding ordering in latent space.\n\n', ...
+'Press any key to begin training ...\n\n'], num_latent_points, ...
+num_rbf_centres, num_latent_points);
+pause;
+
+figure(fh1);
+%%%% Train the GTM and plot it (along with the data) as training proceeds %%%%
+options = foptions;
+options(1) = -1;  % Turn off all warning messages
+options(14) = 1;
+for j = 1:15
+  [net, options] = gtmem(net, T, options);
+  hold off;
+  mix = gtmfwd(net);
+  plot(mix.centres(:,1),  mix.centres(:,2), 'g');
+  hold on;
+  for i=1:20
+    c = 2*unitC*sqrt(mix.covars(1)) + [ones(20,1)*mix.centres(i,1) ...
+	ones(20,1)*mix.centres(i,2)];
+    fill(c(:,1), c(:,2), [0.8 1.0 0.8]);
+  end
+  plot(T(:,1), T(:,2), 'ro');
+  plot(mix.centres(:,1),  mix.centres(:,2), 'g+');
+  plot(mix.centres(:,1),  mix.centres(:,2), 'g');
+  axis([0 3.5 0 3.5]);
+  title(['After ', int2str(j),' iterations of training.']);
+  drawnow;
+  if (j == 4)
+    fprintf([...
+'The GTM initially adapts relatively quickly - already after \n', ...
+'4 iterations of training, a rough fit is attained.\n\n', ...
+'Press any key to continue training ...\n\n']);
+pause;
+figure(fh1);
+  elseif (j == 8)
+    fprintf([...
+'After another 4 iterations of training:  from now on further \n', ...
+'training only makes small changes to the mapping, which combined with \n', ...
+'decrements of the Gaussian mixture variance, optimize the fit in \n', ...
+'terms of likelihood.\n\n', ...
+'Press any key to continue training ...\n\n']);
+pause;
+figure(fh1);
+  else
+    pause(1);
+  end
+end
+
+clc;
+fprintf([...
+'After 15 iterations of training the GTM can be regarded as converged. \n', ...
+'Is has been adapted to fit the target data distribution as well \n', ...
+'as possible, given prior smoothness constraints on the mapping. It \n', ...
+'captures the fact that the probabilty density is higher at the two \n', ...
+'bends of the curve, and lower towards its end points.\n\n']);
+disp(' ');
+disp('Press any key to exit.');
+pause;
+
+close(fh1);
+clear all;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demgtm2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,194 @@
+%DEMGTM2 Demonstrate GTM for visualisation.
+%
+%	Description
+%	 This script demonstrates the use of a GTM with  a two-dimensional
+%	latent space to visualise data in a higher dimensional space. This is
+%	done through the use of the mean responsibility and magnification
+%	factors.
+%
+%	See also
+%	DEMGTM1, GTM, GTMEM, GTMPOST
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Fix seeds for reproducible results
+rand('state', 420);
+randn('state', 420);
+
+ndata = 300
+clc;
+disp('This demonstration shows how a Generative Topographic Mapping')
+disp('can be used to model and visualise high dimensional data.  The')
+disp('data is generated from a mixture of two spherical Gaussians in')
+dstring = ['four dimensional space. ', num2str(ndata), ...
+      ' data points are generated.'];
+disp(dstring);
+disp(' ');
+disp('Press any key to continue.')
+pause
+% Create data
+data_dim = 4;
+latent_dim = 2;
+mix = gmm(data_dim, 2, 'spherical');
+mix.centres = [1 1 1 1; 0 0 0 0];
+mix.priors = [0.5 0.5];
+mix.covars = [0.1 0.1];
+
+[data, labels] = gmmsamp(mix, ndata);
+
+latent_shape = [15 15];  % Number of latent points in each dimension
+nlatent = prod(latent_shape);  % Number of latent points
+num_rbf_centres = 16;
+
+clc;
+dstring = ['Next we generate and initialise the GTM.  There are ',...
+      num2str(nlatent), ' latent points'];
+disp(dstring);
+dstring = ['arranged in a square of ', num2str(latent_shape(1)), ...
+      ' points on a side.  There are ', num2str(num_rbf_centres), ...
+      ' centres in the'];
+disp(dstring);
+disp('RBF model, which has Gaussian activation functions.')
+disp(' ')
+disp('Once the model is created, the latent data sample')
+disp('and RBF centres are placed uniformly in the square [-1 1 -1 1].')
+disp('The output weights of the RBF are computed to map the latent');
+disp('space to the two dimensional PCA subspace of the data.');
+disp(' ')
+disp('Press any key to continue.');
+pause;
+
+% Create and initialise GTM model
+net = gtm(latent_dim, nlatent, data_dim, num_rbf_centres, ...
+   'gaussian', 0.1);
+
+options = foptions;
+options(1) = -1;
+options(7) = 1;    % Set width factor of RBF
+net = gtminit(net, options, data, 'regular', latent_shape, [4 4]);
+
+options = foptions;
+options(14) = 30;
+options(1) = 1;
+
+clc;
+dstring = ['We now train the model with ', num2str(options(14)), ...
+      ' iterations of'];
+disp(dstring)
+disp('the EM algorithm for the GTM.')
+disp(' ')
+disp('Press any key to continue.')
+pause;
+
+[net, options] = gtmem(net, data, options);
+
+disp(' ')
+disp('Press any key to continue.')
+pause;
+
+clc;
+disp('We now visualise the data by plotting, for each data point,');
+disp('the posterior mean and mode (in latent space).  These give');
+disp('a summary of the entire posterior distribution in latent space.')
+disp('The corresponding values are joined by a line to aid the')
+disp('interpretation.')
+disp(' ')
+disp('Press any key to continue.');
+pause;
+% Plot posterior means
+means = gtmlmean(net, data);
+modes = gtmlmode(net, data);
+PointSize = 12;
+ClassSymbol1 = 'r.';
+ClassSymbol2 = 'b.';
+fh1 = figure;
+hold on;
+title('Visualisation in latent space')
+plot(means((labels==1),1), means(labels==1,2), ...
+  ClassSymbol1, 'MarkerSize', PointSize)
+plot(means((labels>1),1),means(labels>1,2),...
+   ClassSymbol2, 'MarkerSize', PointSize)
+
+ClassSymbol1 = 'ro';
+ClassSymbol2 = 'bo';
+plot(modes(labels==1,1), modes(labels==1,2), ...
+  ClassSymbol1)
+plot(modes(labels>1,1),modes(labels>1,2),...
+   ClassSymbol2)
+
+% Join up means and modes
+for n = 1:ndata
+   plot([means(n,1); modes(n,1)], [means(n,2); modes(n,2)], 'g-')
+end
+% Place legend outside data plot
+legend('Mean (class 1)', 'Mean (class 2)', 'Mode (class 1)',...
+   'Mode (class 2)', -1);
+
+% Display posterior for a data point
+% Choose an interesting one with a large distance between mean and
+% mode
+[distance, point] = max(sum((means-modes).^2, 2));
+resp = gtmpost(net, data(point, :));
+
+disp(' ')
+disp('For more detailed information, the full posterior distribution')
+disp('(or responsibility) can be plotted in latent space for a')
+disp('single data point.  This point has been chosen as the one')
+disp('with the largest distance between mean and mode.')
+disp(' ')
+disp('Press any key to continue.');
+pause;
+
+R = reshape(resp, fliplr(latent_shape));
+XL = reshape(net.X(:,1), fliplr(latent_shape));
+YL = reshape(net.X(:,2), fliplr(latent_shape));
+
+fh2 = figure;
+imagesc(net.X(:, 1), net.X(:,2), R);
+hold on;
+tstr = ['Responsibility for point ', num2str(point)];
+title(tstr);
+set(gca,'YDir','normal')
+colormap(hot);
+colorbar
+disp(' ');
+disp('Press any key to continue.')
+pause
+
+clc
+disp('Finally, we visualise the data with the posterior means in')
+disp('latent space as before, but superimpose the magnification')
+disp('factors to highlight the separation between clusters.')
+disp(' ')
+disp('Note the large magnitude factors down the centre of the')
+disp('graph, showing that the manifold is stretched more in')
+disp('this region than within each of the two clusters.')
+ClassSymbol1 = 'g.';
+ClassSymbol2 = 'b.';
+
+fh3 = figure;
+mags = gtmmag(net, net.X);
+% Reshape into grid form
+Mags = reshape(mags, fliplr(latent_shape));
+imagesc(net.X(:, 1), net.X(:,2), Mags);
+hold on
+title('Dataset visualisation with magnification factors')
+set(gca,'YDir','normal')
+colormap(hot);
+colorbar
+hold on; % Else the magnification plot disappears
+plot(means(labels==1,1), means(labels==1,2), ...
+  ClassSymbol1, 'MarkerSize', PointSize)
+plot(means(labels>1,1), means(labels>1,2), ...
+  ClassSymbol2, 'MarkerSize', PointSize)
+
+disp(' ')
+disp('Press any key to exit.')
+pause
+
+close(fh1);
+close(fh2);
+close(fh3);
+clear all;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demhint.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function demhint(nin, nhidden, nout)
+%DEMHINT Demonstration of Hinton diagram for 2-layer feed-forward network.
+%
+%	Description
+%
+%	DEMHINT plots a Hinton diagram for a 2-layer feedforward network with
+%	5 inputs, 4 hidden units and 3 outputs. The weight vector is chosen
+%	from a Gaussian distribution as described under MLP.
+%
+%	DEMHINT(NIN, NHIDDEN, NOUT) allows the user to specify the number of
+%	inputs, hidden units and outputs.
+%
+%	See also
+%	HINTON, HINTMAT, MLP, MLPPAK, MLPUNPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if nargin < 1 nin = 5; end
+if nargin < 2 nhidden = 7; end
+if nargin < 3 nout = 3; end
+
+% Fix the seed for reproducible results
+randn('state', 42);
+clc
+disp('This demonstration illustrates the plotting of Hinton diagrams')
+disp('for Multi-Layer Perceptron networks.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+net = mlp(nin, nhidden, nout, 'linear');
+
+[h1, h2] = mlphint(net);
+clc
+disp('The MLP has been created with')
+disp(['    ' int2str(nin) ' inputs'])
+disp(['    ' int2str(nhidden) ' hidden units'])
+disp(['    ' int2str(nout) ' outputs'])
+disp(' ')
+disp('One figure is produced for each layer of weights.')
+disp('For each layer the fan-in weights are arranged in rows for each unit.')
+disp('The bias weight is separated from the rest by a red vertical line.')
+disp('The area of each box is proportional to the weight value: positive')
+disp('values are white, and negative are black.')
+disp(' ')
+disp('Press any key to exit.'); 
+pause; 
+delete(h1);
+delete(h2);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demhmc1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,145 @@
+%DEMHMC1 Demonstrate Hybrid Monte Carlo sampling on mixture of two Gaussians.
+%
+%	Description
+%	The problem consists of generating data from a mixture of two
+%	Gaussians in two dimensions using a hybrid Monte Carlo algorithm with
+%	persistence. A mixture model is then fitted to the sample to compare
+%	it with the  true underlying generator.
+%
+%	See also
+%	DEMHMC3, HMC, DEMPOT, DEMGPOT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+dim = 2;            	% Data dimension
+ncentres = 2;		% Number of centres in mixture model
+
+seed = 42;              % Seed for random weight initialization.
+randn('state', seed);
+rand('state', seed);
+
+clc
+disp('This demonstration illustrates the use of the hybrid Monte Carlo')
+disp('algorithm to sample from a mixture of two Gaussians.')
+disp('The means of the two components are [0 0] and [2 2].')
+disp(' ')
+disp('First we set up the parameters of the mixture model we are sampling')
+disp('from.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Set up mixture model to sample from
+mix = gmm(dim, ncentres, 'spherical');
+mix.centres(1, :) = [0 0];
+mix.centres(2, :) = [2 2];
+x = [0 1];  % Start vector
+
+% Set up vector of options for hybrid Monte Carlo.
+
+nsamples = 160;		% Number of retained samples.
+
+options = foptions;     % Default options vector.
+options(1) = 1;		% Switch on diagnostics.
+options(5) = 1;		% Use persistence
+options(7) = 50;	% Number of steps in trajectory.
+options(14) = nsamples;	% Number of Monte Carlo samples returned. 
+options(15) = 30;	% Number of samples omitted at start of chain.
+options(18) = 0.02;
+
+clc
+disp(['Next we take ', num2str(nsamples),' samples from the distribution.'...
+    , 'The first ', num2str(options(15))])
+disp('samples at the start of the chain are omitted.  As persistence')
+disp('is used, the momentum has a small random component added at each step.')
+disp([num2str(options(7)), ...
+    ' iterations are used at each step and the step size is ',...
+    num2str(options(18))])
+disp('Sampling starts at the point [0 1].')
+disp('The new state is accepted if the threshold value is greater than')
+disp('a random number between 0 and 1.')
+disp(' ')
+disp('Negative step numbers indicate samples discarded from the start of the')
+disp('chain.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+[samples, energies] = hmc('dempot', x, options, 'demgpot', mix);
+
+disp(' ')
+disp('Press any key to continue.')
+pause
+clc
+disp('The plot shows the samples generated by the HMC function.')
+disp('The different colours are used to show how the samples move from')
+disp('one component to the other over time.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+probs = exp(-energies);
+fh1 = figure;
+% Plot data in 4 groups
+ngroups = 4;
+g1end = floor(nsamples/ngroups);
+g2end = floor(2*nsamples/ngroups);
+g3end = floor(3*nsamples/ngroups);
+p1 = plot(samples(1:g1end,1), samples(1:g1end,2), 'k.', 'MarkerSize', 12);
+hold on
+lstrings = char(['Samples 1-' int2str(g1end)], ...
+  ['Samples ' int2str(g1end+1) '-' int2str(g2end)], ...
+  ['Samples ' int2str(g2end+1) '-' int2str(g3end)], ...
+  ['Samples ' int2str(g3end+1) '-' int2str(nsamples)]);
+p2 = plot(samples(g1end+1:g2end,1), samples(g1end+1:g2end,2), ...
+  'r.', 'MarkerSize', 12);
+p3 = plot(samples(g2end+1:g3end,1), samples(g2end+1:g3end,2), ...
+  'g.', 'MarkerSize', 12);
+p4 = plot(samples(g3end+1:nsamples,1), samples(g3end+1:nsamples,2), ...
+  'b.', 'MarkerSize', 12);
+legend([p1 p2 p3 p4], lstrings, 2);
+
+clc
+disp('We now fit a Gaussian mixture model to the sampled data.')
+disp('The model has spherical covariance structure and the correct')
+disp('number of components.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Fit a mixture model to the sample
+newmix = gmm(dim, ncentres, 'spherical');
+options = foptions;
+options(1) = -1;	% Switch off all diagnostics
+options(14) = 5;	% Just use 5 iterations of k-means in initialisation
+% Initialise the model parameters from the samples
+newmix = gmminit(newmix, samples, options);
+
+% Set up vector of options for EM trainer
+options = zeros(1, 18);
+options(1)  = 1;		% Prints out error values.
+options(14) = 15;		% Max. Number of iterations.
+
+disp('We now train the model using the EM algorithm for 15 iterations')
+disp(' ')
+disp('Press any key to continue')
+pause
+[newmix, options, errlog] = gmmem(newmix, samples, options);
+
+% Print out model
+disp(' ')
+disp('The trained model has parameters ')
+disp('    Priors        Centres         Variances')
+disp([newmix.priors' newmix.centres newmix.covars'])
+disp('Note the close correspondence between these parameters and those')
+disp('of the distribution used to generate the data')
+disp(' ')
+disp('    Priors        Centres         Variances')
+disp([mix.priors' mix.centres mix.covars'])
+disp(' ')
+disp('Press any key to exit')
+pause
+
+close(fh1);
+clear all;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demhmc2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,132 @@
+%DEMHMC2 Demonstrate Bayesian regression with Hybrid Monte Carlo sampling.
+%
+%	Description
+%	The problem consists of one input variable X and one target variable
+%	T with data generated by sampling X at equal intervals and then
+%	generating target data by computing SIN(2*PI*X) and adding Gaussian
+%	noise. The model is a 2-layer network with linear outputs, and the
+%	hybrid Monte Carlo algorithm (without persistence) is used to sample
+%	from the posterior distribution of the weights.  The graph shows the
+%	underlying function, 100 samples from the function given by the
+%	posterior distribution of the weights, and the average prediction
+%	(weighted by the posterior probabilities).
+%
+%	See also
+%	DEMHMC3, HMC, MLP, MLPERR, MLPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Generate the matrix of inputs x and targets t.
+ndata = 20;                     % Number of data points.
+noise = 0.1;                    % Standard deviation of noise distribution.
+nin = 1;                        % Number of inputs.
+nout = 1;                       % Number of outputs.
+
+seed = 42;                    % Seed for random weight initialization.
+randn('state', seed);
+rand('state', seed);
+
+x = 0.25 + 0.1*randn(ndata, nin);
+t = sin(2*pi*x) + noise*randn(size(x));
+
+clc
+disp('This demonstration illustrates the use of the hybrid Monte Carlo')
+disp('algorithm to sample from the posterior weight distribution of a')
+disp('multi-layer perceptron.')
+disp(' ')
+disp('A regression problem is used, with the one-dimensional data drawn')
+disp('from a noisy sine function.  The x values are sampled from a normal')
+disp('distribution with mean 0.25 and variance 0.01.')
+disp(' ')
+disp('First we initialise the network.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Set up network parameters.
+nhidden = 5;			% Number of hidden units.
+alpha = 0.001;                  % Coefficient of weight-decay prior. 
+beta = 100.0;			% Coefficient of data error.
+
+% Create and initialize network model.
+% Initialise weights reasonably close to 0
+net = mlp(nin, nhidden, nout, 'linear', alpha, beta);
+net = mlpinit(net, 10);
+
+clc
+disp('Next we take 100 samples from the posterior distribution.  The first')
+disp('200 samples at the start of the chain are omitted.  As persistence')
+disp('is not used, the momentum is randomised at each step.  100 iterations')
+disp('are used at each step.  The new state is accepted if the threshold')
+disp('value is greater than a random number between 0 and 1.')
+disp(' ')
+disp('Negative step numbers indicate samples discarded from the start of the')
+disp('chain.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Set up vector of options for hybrid Monte Carlo.
+nsamples = 100;			% Number of retained samples.
+
+options = foptions;             % Default options vector.
+options(1) = 1;			% Switch on diagnostics.
+options(7) = 100;		% Number of steps in trajectory.
+options(14) = nsamples;		% Number of Monte Carlo samples returned. 
+options(15) = 200;		% Number of samples omitted at start of chain.
+options(18) = 0.002;		% Step size.
+
+w = mlppak(net);
+% Initialise HMC
+hmc('state', 42);
+[samples, energies] = hmc('neterr', w, options, 'netgrad', net, x, t);
+
+clc
+disp('The plot shows the underlying noise free function, the 100 samples')
+disp('produced from the MLP, and their average as a Monte Carlo estimate')
+disp('of the true posterior average.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+nplot = 300;
+plotvals = [0 : 1/(nplot - 1) : 1]';
+pred = zeros(size(plotvals));
+fh = figure;
+for k = 1:nsamples
+  w2 = samples(k,:);
+  net2 = mlpunpak(net, w2);
+  y = mlpfwd(net2, plotvals);
+  % Average sample predictions as Monte Carlo estimate of true integral
+  pred = pred + y;
+  h4 = plot(plotvals, y, '-r', 'LineWidth', 1);
+  if k == 1
+    hold on
+  end
+end
+pred = pred./nsamples;
+
+% Plot data
+h1 = plot(x, t, 'ob', 'LineWidth', 2, 'MarkerFaceColor', 'blue');
+axis([0 1 -3 3])
+
+% Plot function
+[fx, fy] = fplot('sin(2*pi*x)', [0 1], '--g');
+h2 = plot(fx, fy, '--g', 'LineWidth', 2);
+set(gca, 'box', 'on');
+
+% Plot averaged prediction
+h3 = plot(plotvals, pred, '-c', 'LineWidth', 2);
+hold off
+
+lstrings = char('Data', 'Function', 'Prediction', 'Samples');
+legend([h1 h2 h3 h4], lstrings, 3);
+
+disp('Note how the predictions become much further from the true function')
+disp('away from the region of high data density.')
+disp(' ')
+disp('Press any key to exit.')
+pause
+close(fh);
+clear all;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demhmc3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,135 @@
+%DEMHMC3 Demonstrate Bayesian regression with Hybrid Monte Carlo sampling.
+%
+%	Description
+%	The problem consists of one input variable X and one target variable
+%	T with data generated by sampling X at equal intervals and then
+%	generating target data by computing SIN(2*PI*X) and adding Gaussian
+%	noise. The model is a 2-layer network with linear outputs, and the
+%	hybrid Monte Carlo algorithm (with persistence) is used to sample
+%	from the posterior distribution of the weights.  The graph shows the
+%	underlying function, 300 samples from the function given by the
+%	posterior distribution of the weights, and the average prediction
+%	(weighted by the posterior probabilities).
+%
+%	See also
+%	DEMHMC2, HMC, MLP, MLPERR, MLPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Generate the matrix of inputs x and targets t.
+ndata = 20;                     % Number of data points.
+noise = 0.1;                    % Standard deviation of noise distribution.
+nin = 1;                        % Number of inputs.
+nout = 1;                       % Number of outputs.
+
+seed = 42;                    % Seed for random number generators.
+randn('state', seed);
+rand('state', seed);
+
+x = 0.25 + 0.1*randn(ndata, nin);
+t = sin(2*pi*x) + noise*randn(size(x));
+
+clc
+disp('This demonstration illustrates the use of the hybrid Monte Carlo')
+disp('algorithm to sample from the posterior weight distribution of a')
+disp('multi-layer perceptron.')
+disp(' ')
+disp('A regression problem is used, with the one-dimensional data drawn')
+disp('from a noisy sine function.  The x values are sampled from a normal')
+disp('distribution with mean 0.25 and variance 0.01.')
+disp(' ')
+disp('First we initialise the network.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Set up network parameters.
+nhidden = 5;			% Number of hidden units.
+alpha = 0.001;                  % Coefficient of weight-decay prior. 
+beta = 100.0;			% Coefficient of data error.
+
+% Create and initialize network model.
+
+% Initialise weights reasonably close to 0
+net = mlp(nin, nhidden, nout, 'linear', alpha, beta);
+net = mlpinit(net, 10);
+
+clc
+disp('Next we take 100 samples from the posterior distribution.  The first')
+disp('300 samples at the start of the chain are omitted.  As persistence')
+disp('is used, the momentum has a small random component added at each step.')
+disp('10 iterations are used at each step (compared with 100 in demhmc2).')
+disp('The step size is 0.005 (compared with 0.002).')
+disp('The new state is accepted if the threshold')
+disp('value is greater than a random number between 0 and 1.')
+disp(' ')
+disp('Negative step numbers indicate samples discarded from the start of the')
+disp('chain.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Set up vector of options for hybrid Monte Carlo.
+nsamples = 100;		% Number of retained samples.
+
+options = foptions;     % Default options vector.
+options(1) = 1;		% Switch on diagnostics.
+options(5) = 1;		% Use persistence
+options(7) = 10;	% Number of steps in trajectory.
+options(14) = nsamples;	% Number of Monte Carlo samples returned. 
+options(15) = 300;	% Number of samples omitted at start of chain.
+options(17) = 0.95;	% Alpha value in persistence
+options(18) = 0.005;	% Step size.
+
+w = mlppak(net);
+% Initialise HMC
+hmc('state', 42);
+[samples, energies] = hmc('neterr', w, options, 'netgrad', net, x, t);
+
+clc
+disp('The plot shows the underlying noise free function, the 100 samples')
+disp('produced from the MLP, and their average as a Monte Carlo estimate')
+disp('of the true posterior average.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+nplot = 300;
+plotvals = [0 : 1/(nplot - 1) : 1]';
+pred = zeros(size(plotvals));
+fh1 = figure;
+hold on
+for k = 1:nsamples
+  w2 = samples(k,:);
+  net2 = mlpunpak(net, w2);
+  y = mlpfwd(net2, plotvals);
+  % Sum predictions
+  pred = pred + y;
+  h4 = plot(plotvals, y, '-r', 'LineWidth', 1);
+end
+pred = pred./nsamples;
+% Plot data
+h1 = plot(x, t, 'ob', 'LineWidth', 2, 'MarkerFaceColor', 'blue');
+axis([0 1 -3 3])
+
+% Plot function
+[fx, fy] = fplot('sin(2*pi*x)', [0 1], '--g');
+h2 = plot(fx, fy, '--g', 'LineWidth', 2);
+set(gca, 'box', 'on');
+
+% Plot averaged prediction
+h3 = plot(plotvals, pred, '-c', 'LineWidth', 2);
+
+lstrings = char('Data', 'Function', 'Prediction', 'Samples');
+legend([h1 h2 h3 h4], lstrings, 3);
+hold off
+
+disp('Note how the predictions become much further from the true function')
+disp('away from the region of high data density.')
+disp(' ')
+disp('Press any key to exit.')
+pause
+close(fh1);
+clear all;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demkmn1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,111 @@
+%DEMKMEAN Demonstrate simple clustering model trained with K-means.
+%
+%	Description
+%	The problem consists of data in a two-dimensional space.  The data is
+%	drawn from three spherical Gaussian distributions with priors 0.3,
+%	0.5 and 0.2; centres (2, 3.5), (0, 0) and (0,2); and standard
+%	deviations 0.2, 0.5 and 1.0. The first figure contains a scatter plot
+%	of the data.  The data is the same as in DEMGMM1.
+%
+%	A cluster model with three components is trained using the batch K-
+%	means algorithm. The matrix of centres is printed after training. The
+%	second figure shows the data labelled with a colour derived from the
+%	corresponding  cluster
+%
+%	See also
+%	DEM2DDAT, DEMGMM1, KNN1, KMEANS
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Generate the data, fixing seeds for reproducible results
+ndata = 250;
+randn('state', 42);
+rand('state', 42);
+data = dem2ddat(ndata);
+
+% Randomise data order
+data = data(randperm(ndata),:);
+
+clc 
+disp('This demonstration illustrates the use of a cluster model to')
+disp('find centres that reflect the distribution of data points.')
+disp('We begin by generating the data from a mixture of three Gaussians')
+disp('in two-dimensional space and plotting it.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+fh1 = figure;
+plot(data(:, 1), data(:, 2), 'o')
+set(gca, 'Box', 'on')
+title('Data')
+
+% Set up cluster model
+ncentres = 3;
+centres = zeros(ncentres, 2);
+
+% Set up vector of options for kmeans trainer
+options = foptions;
+options(1)  = 1;		% Prints out error values.
+options(5) = 1;
+options(14) = 10;		% Number of iterations.
+
+clc
+disp('The model is chosen to have three centres, which are initialised')
+disp('at randomly selected data points.  We now train the model using')
+disp('the batch K-means algorithm with a maximum of 10 iterations and')
+disp('stopping tolerance of 1e-4.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Train the centres from the data
+[centres, options, post] = kmeans(centres, data, options);
+
+% Print out model
+disp(' ')
+disp('Note that training has terminated before 10 iterations as there')
+disp('has been no change in the centres or error function.')
+disp(' ')
+disp('The trained model has centres:')
+disp(centres);
+disp('Press any key to continue.')
+pause
+
+clc
+disp('We now plot each data point coloured according to its classification')
+disp('given by the nearest cluster centre.  The cluster centres are denoted')
+disp('by black crosses.')
+
+% 					Plot the result
+fh2 = figure;
+
+hold on
+colours = ['b.'; 'r.'; 'g.'];
+
+[tempi, tempj] = find(post);
+hold on
+for i = 1:3
+  % Select data points closest to ith centre
+  thisX = data(tempi(tempj == i), 1);
+  thisY = data(tempi(tempj == i), 2);
+  hp(i) = plot(thisX, thisY, colours(i,:));
+  set(hp(i), 'MarkerSize', 12);
+end
+set(gca, 'Box', 'on')
+legend('Class 1', 'Class 2', 'Class 3', 2)
+hold on
+plot(centres(:, 1), centres(:,2), 'k+', 'LineWidth', 2, ...
+  'MarkerSize', 8)
+title('Centres and data labels')
+hold off
+
+disp(' ')
+disp('Press any key to end.')
+pause
+
+close(fh1);
+close(fh2);
+clear all;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demknn1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,103 @@
+%DEMKNN1 Demonstrate nearest neighbour classifier.
+%
+%	Description
+%	The problem consists of data in a two-dimensional space.  The data is
+%	drawn from three spherical Gaussian distributions with priors 0.3,
+%	0.5 and 0.2; centres (2, 3.5), (0, 0) and (0,2); and standard
+%	deviations 0.2, 0.5 and 1.0. The first figure contains a scatter plot
+%	of the data.  The data is the same as in DEMGMM1.
+%
+%	The second figure shows the data labelled with the corresponding
+%	class given by the classifier.
+%
+%	See also
+%	DEM2DDAT, DEMGMM1, KNN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+clc
+disp('This program demonstrates the use of the K nearest neighbour algorithm.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Generate the test data
+ndata = 250;
+randn('state', 42);
+rand('state', 42);
+
+[data, c] = dem2ddat(ndata);
+
+% Randomise data order
+data = data(randperm(ndata),:);
+
+clc
+disp('We generate the data in two-dimensional space from a mixture of')
+disp('three spherical Gaussians. The centres are shown as black crosses')
+disp('in the plot.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+fh1 = figure;
+plot(data(:, 1), data(:, 2), 'o')
+set(gca, 'Box', 'on')
+hold on
+title('Data')
+hp1 = plot(c(:, 1), c(:,2), 'k+')
+% Increase size of crosses
+set(hp1, 'MarkerSize', 8);
+set(hp1, 'LineWidth', 2);
+hold off
+
+clc
+disp('We next use the centres as training examplars for the K nearest')
+disp('neighbour algorithm.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Use centres as training data
+train_labels = [1, 0, 0; 0, 1, 0; 0, 0, 1];
+
+% Label the test data up to kmax neighbours
+kmax = 1;
+net = knn(2, 3, kmax, c, train_labels);
+[y, l] = knnfwd(net, data);
+
+clc
+disp('We now plot each data point coloured according to its classification.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Plot the result
+fh2 = figure;
+colors = ['b.'; 'r.'; 'g.'];
+for i = 1:3
+  thisX = data(l == i,1);
+  thisY = data(l == i,2);
+  hp(i) = plot(thisX, thisY, colors(i,:));
+  set(hp(i), 'MarkerSize', 12);
+  if i == 1
+    hold on
+  end
+end
+set(gca, 'Box', 'on');
+legend('Class 1', 'Class 2', 'Class 3', 2)
+hold on
+labels = ['1', '2', '3'];
+hp2 = plot(c(:, 1), c(:,2), 'k+');
+% Increase size of crosses
+set(hp2, 'MarkerSize', 8);
+set(hp2, 'LineWidth', 2);
+
+test_labels = labels(l(:,1));
+
+title('Training data and data labels')
+hold off
+
+disp('The demonstration is now complete: press any key to exit.')
+pause
+close(fh1);
+close(fh2);
+clear all; 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demmdn1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,211 @@
+%DEMMDN1 Demonstrate fitting a multi-valued function using a Mixture Density Network.
+%
+%	Description
+%	The problem consists of one input variable X and one target variable
+%	T with data generated by sampling T at equal intervals and then
+%	generating target data by computing T + 0.3*SIN(2*PI*T) and adding
+%	Gaussian noise. A Mixture Density Network with 3 centres in the
+%	mixture model is trained by minimizing a negative log likelihood
+%	error function using the scaled conjugate gradient optimizer.
+%
+%	The conditional means, mixing coefficients and variances are plotted
+%	as a function of X, and a contour plot of the full conditional
+%	density is also generated.
+%
+%	See also
+%	MDN, MDNERR, MDNGRAD, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Generate the matrix of inputs x and targets t.
+seedn = 42;
+seed = 42;
+randn('state', seedn);
+rand('state', seed);
+ndata = 300;			% Number of data points.
+noise = 0.2;			% Range of noise distribution.
+t = [0:1/(ndata - 1):1]';
+x = t + 0.3*sin(2*pi*t) + noise*rand(ndata, 1) - noise/2;
+axis_limits = [-0.2 1.2 -0.2 1.2];
+
+clc
+disp('This demonstration illustrates the use of a Mixture Density Network')
+disp('to model multi-valued functions.  The data is generated from the')
+disp('mapping x = t + 0.3 sin(2 pi t) + e, where e is a noise term.')
+disp('We begin by plotting the data.')
+disp(' ')
+disp('Press any key to continue')
+pause
+% Plot the data
+fh1 = figure;
+p1 = plot(x, t, 'ob');
+axis(axis_limits);
+hold on
+disp('Note that for x in the range 0.35 to 0.65, there are three possible')
+disp('branches of the function.')
+disp(' ')
+disp('Press any key to continue')
+pause
+
+% Set up network parameters.
+nin = 1;			% Number of inputs.
+nhidden = 5;			% Number of hidden units.
+ncentres = 3;			% Number of mixture components.
+dim_target = 1;			% Dimension of target space
+mdntype = '0';			% Currently unused: reserved for future use
+alpha = 100;			% Inverse variance for weight initialisation
+				% Make variance small for good starting point
+
+% Create and initialize network weight vector.
+net = mdn(nin, nhidden, ncentres, dim_target, mdntype);
+init_options = zeros(1, 18);
+init_options(1) = -1;	% Suppress all messages
+init_options(14) = 10;  % 10 iterations of K means in gmminit
+net = mdninit(net, alpha, t, init_options);
+
+% Set up vector of options for the optimiser.
+options = foptions;
+options(1) = 1;			% This provides display of error values.
+options(14) = 200;		% Number of training cycles. 
+
+clc
+disp('We initialise the neural network model, which is an MLP with a')
+disp('Gaussian mixture model with three components and spherical variance')
+disp('as the error function.  This enables us to model the complete')
+disp('conditional density function.')
+disp(' ')
+disp('Next we train the model for 200 epochs using a scaled conjugate gradient')
+disp('optimizer.  The error function is the negative log likelihood of the')
+disp('training data.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Train using scaled conjugate gradients.
+[net, options] = netopt(net, options, x, t, 'scg');
+
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+clc
+disp('We can also train a conventional MLP with sum of squares error function.')
+disp('This will approximate the conditional mean, which is not always a')
+disp('good representation of the data.  Note that the error function is the')
+disp('sum of squares error on the training data, which accounts for the')
+disp('different values from training the MDN.')
+disp(' ')
+disp('We train the network with the quasi-Newton optimizer for 80 epochs.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+mlp_nhidden = 8;
+net2 = mlp(nin, mlp_nhidden, dim_target, 'linear');
+options(14) = 80; 
+[net2, options] = netopt(net2, options, x, t, 'quasinew');
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+clc
+disp('Now we plot the underlying function, the MDN prediction,')
+disp('represented by the mode of the conditional distribution, and the')
+disp('prediction of the conventional MLP.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Plot the original function, and the trained network function.
+plotvals = [0:0.01:1]';
+mixes = mdn2gmm(mdnfwd(net, plotvals));
+axis(axis_limits);
+yplot = t+0.3*sin(2*pi*t);
+p2 = plot(yplot, t, '--y');
+
+% Use the mode to represent the function
+y = zeros(1, length(plotvals));
+priors = zeros(length(plotvals), ncentres);
+c = zeros(length(plotvals), 3);
+widths = zeros(length(plotvals), ncentres);
+for i = 1:length(plotvals)
+  [m, j] = max(mixes(i).priors);
+  y(i) = mixes(i).centres(j,:);
+  c(i,:) = mixes(i).centres';
+end
+p3 = plot(plotvals, y, '*r');
+p4 = plot(plotvals, mlpfwd(net2, plotvals), 'g');
+set(p4, 'LineWidth', 2);
+legend([p1 p2 p3 p4], 'data', 'function', 'MDN mode', 'MLP mean', 4);
+hold off
+
+clc
+disp('We can also plot how the mixture model parameters depend on x.')
+disp('First we plot the mixture centres, then the priors and finally')
+disp('the variances.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+fh2 = figure;
+subplot(3, 1, 1)
+plot(plotvals, c)
+hold on
+title('Mixture centres')
+legend('centre 1', 'centre 2', 'centre 3')
+hold off
+
+priors = reshape([mixes.priors], mixes(1).ncentres, size(mixes, 2))';
+%%fh3 = figure;
+subplot(3, 1, 2)
+plot(plotvals, priors)
+hold on
+title('Mixture priors')
+legend('centre 1', 'centre 2', 'centre 3')
+hold off
+
+variances = reshape([mixes.covars], mixes(1).ncentres, size(mixes, 2))';
+%%fh4 = figure;
+subplot(3, 1, 3)
+plot(plotvals, variances)
+hold on
+title('Mixture variances')
+legend('centre 1', 'centre 2', 'centre 3')
+hold off
+
+disp('The last figure is a contour plot of the conditional probability')
+disp('density generated by the Mixture Density Network.  Note how it')
+disp('is well matched to the regions of high data density.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Contour plot for MDN.
+i = 0:0.01:1.0;
+j = 0:0.01:1.0;
+
+[I, J] = meshgrid(i,j);
+I = I(:);
+J = J(:);
+li = length(i);
+lj = length(j);
+Z = zeros(li, lj);
+for k = 1:li;
+  Z(:,k) = gmmprob(mixes(k), j');
+end
+fh5 = figure;
+% Set up levels by hand to make a good figure
+v = [2 2.5 3 3.5 5:3:18];
+contour(i, j, Z, v)
+hold on
+title('Contour plot of conditional density')
+hold off
+
+disp(' ')
+disp('Press any key to exit.')
+pause
+close(fh1);
+close(fh2);
+%%close(fh3);
+%%close(fh4);
+close(fh5);
+%%clear all;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demmet1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,103 @@
+function samples=demmet1(plot_wait)
+%DEMMET1 Demonstrate Markov Chain Monte Carlo sampling on a Gaussian.
+%
+%	Description
+%	The problem consists of generating data from a Gaussian in two
+%	dimensions using a Markov Chain Monte Carlo algorithm. The points are
+%	plotted one after another to show the path taken by the chain.
+%
+%	DEMMET1(PLOTWAIT) allows the user to set the time (in a whole number
+%	of seconds) between the plotting of points.  This is passed to PAUSE
+%
+%	See also
+%	DEMHMC1, METROP, GMM, DEMPOT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if nargin == 0 | plot_wait < 0
+  plot_wait = 0; % No wait if not specified or incorrect
+end
+dim = 2;            	% Data dimension
+ncentres = 1;		% Number of centres in mixture model
+
+seed = 42;              % Seed for random weight initialization.
+randn('state', seed);
+rand('state', seed);
+
+clc
+disp('This demonstration illustrates the use of the Markov chain Monte Carlo')
+disp('algorithm to sample from a Gaussian distribution.')
+disp('The mean is at [0 0].')
+disp(' ')
+disp('First we set up the parameters of the mixture model we are sampling')
+disp('from.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Set up mixture model to sample from
+mix = gmm(dim, ncentres, 'spherical');
+mix.centres(1, :) = [0 0];
+x = [0 4];  % Start vector
+
+% Set up vector of options for hybrid Monte Carlo.
+
+nsamples = 150;		% Number of retained samples.
+
+options = foptions;     % Default options vector.
+options(1) = 0;		% Switch off diagnostics.
+options(14) = nsamples;	% Number of Monte Carlo samples returned. 
+options(18) = 0.1;
+
+clc
+disp('Next we take 150 samples from the distribution.')
+disp('Sampling starts at the point [0 4].')
+disp('The new state is accepted if the threshold value is greater than')
+disp('a random number between 0 and 1.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+[samples, energies] = metrop('dempot', x, options, '', mix);
+
+clc
+disp('The plot shows the samples generated by the MCMC function in order')
+disp('as an animation to show the path taken by the Markov chain.')
+disp('The different colours are used to show that the first few samples')
+disp('should be discarded as they lie too far from the mean.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+probs = exp(-energies);
+fh1 = figure;
+g1end = floor(nsamples/4);
+
+for n = 1:nsamples
+  
+  if n < g1end
+    Marker = 'k.';
+    p1 = plot(samples(n,1), samples(n,2), Marker, ...
+      'EraseMode', 'none', 'MarkerSize', 12);
+    if n == 1
+      axis([-3 5 -2 5])
+    end
+  else
+    Marker = 'r.';
+    p2 = plot(samples(n,1), samples(n,2), Marker, ...
+      'EraseMode', 'none', 'MarkerSize', 12);
+  end
+  hold on
+  drawnow;  % Force drawing immediately
+  pause(plot_wait);
+end
+lstrings = char(['Samples 1-' int2str(g1end)], ...
+  ['Samples ' int2str(g1end+1) '-' int2str(nsamples)]);
+legend([p1 p2], lstrings, 1);
+
+disp(' ')
+disp('Press any key to exit.')
+pause
+close(fh1);
+clear all;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demmlp1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,88 @@
+%DEMMLP1 Demonstrate simple regression using a multi-layer perceptron
+%
+%	Description
+%	The problem consists of one input variable X and one target variable
+%	T with data generated by sampling X at equal intervals and then
+%	generating target data by computing SIN(2*PI*X) and adding Gaussian
+%	noise. A 2-layer network with linear outputs is trained by minimizing
+%	a  sum-of-squares error function using the scaled conjugate gradient
+%	optimizer.
+%
+%	See also
+%	MLP, MLPERR, MLPGRAD, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Generate the matrix of inputs x and targets t.
+
+ndata = 20;			% Number of data points.
+noise = 0.2;			% Standard deviation of noise distribution.
+x = [0:1/(ndata - 1):1]';
+randn('state', 1);
+t = sin(2*pi*x) + noise*randn(ndata, 1);
+
+clc
+disp('This demonstration illustrates the use of a Multi-Layer Perceptron')
+disp('network for regression problems.  The data is generated from a noisy')
+disp('sine function.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Set up network parameters.
+nin = 1;			% Number of inputs.
+nhidden = 3;			% Number of hidden units.
+nout = 1;			% Number of outputs.
+alpha = 0.01;			% Coefficient of weight-decay prior. 
+
+% Create and initialize network weight vector.
+
+net = mlp(nin, nhidden, nout, 'linear', alpha);
+
+% Set up vector of options for the optimiser.
+
+options = zeros(1,18);
+options(1) = 1;			% This provides display of error values.
+options(14) = 100;		% Number of training cycles. 
+
+clc
+disp(['The network has ', num2str(nhidden), ' hidden units and a weight decay'])
+disp(['coefficient of ', num2str(alpha), '.'])
+disp(' ')
+disp('After initializing the network, we train it use the scaled conjugate')
+disp('gradients algorithm for 100 cycles.')
+disp(' ')
+disp('Press any key to continue')
+pause
+
+% Train using scaled conjugate gradients.
+[net, options] = netopt(net, options, x, t, 'scg');
+
+disp(' ')
+disp('Now we plot the data, underlying function, and network outputs')
+disp('on a single graph to compare the results.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Plot the data, the original function, and the trained network function.
+plotvals = [0:0.01:1]';
+y = mlpfwd(net, plotvals);
+fh1 = figure;
+plot(x, t, 'ob')
+hold on
+xlabel('Input')
+ylabel('Target')
+axis([0 1 -1.5 1.5])
+[fx, fy] = fplot('sin(2*pi*x)', [0 1]);
+plot(fx, fy, '-r', 'LineWidth', 2)
+plot(plotvals, y, '-k', 'LineWidth', 2)
+legend('data', 'function', 'network');
+
+disp(' ')
+disp('Press any key to end.')
+pause
+close(fh1);
+clear all;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demmlp2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,337 @@
+%DEMMLP2 Demonstrate simple classification using a multi-layer perceptron
+%
+%	Description
+%	The problem consists of input data in two dimensions drawn from a
+%	mixture of three Gaussians: two of which are assigned to a single
+%	class.  An MLP with logistic outputs trained with a quasi-Newton
+%	optimisation algorithm is compared with the optimal Bayesian decision
+%	rule.
+%
+%	See also
+%	MLP, MLPFWD, NETERR, QUASINEW
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Set up some figure parameters
+AxisShift = 0.05;
+ClassSymbol1 = 'r.';
+ClassSymbol2 = 'y.';
+PointSize = 12;
+titleSize = 10;
+
+% Fix the seeds
+rand('state', 423);
+randn('state', 423);
+
+clc
+disp('This demonstration shows how an MLP with logistic outputs and')
+disp('and cross entropy error function can be trained to model the')
+disp('posterior class probabilities in a classification problem.')
+disp('The results are compared with the optimal Bayes rule classifier,')
+disp('which can be computed exactly as we know the form of the generating')
+disp('distribution.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+fh1 = figure;
+set(fh1, 'Name', 'True Data Distribution');
+whitebg(fh1, 'k');
+
+% 
+% Generate the data
+% 
+n=200;
+
+% Set up mixture model: 2d data with three centres
+% Class 1 is first centre, class 2 from the other two
+mix = gmm(2, 3, 'full');
+mix.priors = [0.5 0.25 0.25];
+mix.centres = [0 -0.1; 1 1; 1 -1];
+mix.covars(:,:,1) = [0.625 -0.2165; -0.2165 0.875];
+mix.covars(:,:,2) = [0.2241 -0.1368; -0.1368 0.9759];
+mix.covars(:,:,3) = [0.2375 0.1516; 0.1516 0.4125];
+
+[data, label] = gmmsamp(mix, n);
+
+% 
+% Calculate some useful axis limits
+% 
+x0 = min(data(:,1));
+x1 = max(data(:,1));
+y0 = min(data(:,2));
+y1 = max(data(:,2));
+dx = x1-x0;
+dy = y1-y0;
+expand = 5/100;			% Add on 5 percent each way
+x0 = x0 - dx*expand;
+x1 = x1 + dx*expand;
+y0 = y0 - dy*expand;
+y1 = y1 + dy*expand;
+resolution = 100;
+step = dx/resolution;
+xrange = [x0:step:x1];
+yrange = [y0:step:y1];
+% 					
+% Generate the grid
+% 
+[X Y]=meshgrid([x0:step:x1],[y0:step:y1]);
+% 
+% Calculate the class conditional densities, the unconditional densities and
+% the posterior probabilities
+% 
+px_j = gmmactiv(mix, [X(:) Y(:)]);
+px = reshape(px_j*(mix.priors)',size(X));
+post = gmmpost(mix, [X(:) Y(:)]);
+p1_x = reshape(post(:, 1), size(X));
+p2_x = reshape(post(:, 2) + post(:, 3), size(X));
+
+% 
+% Generate some pretty pictures !!
+% 
+colormap(hot)
+colorbar
+subplot(1,2,1)
+hold on
+plot(data((label==1),1),data(label==1,2),ClassSymbol1, 'MarkerSize', PointSize)
+plot(data((label>1),1),data(label>1,2),ClassSymbol2, 'MarkerSize', PointSize)
+contour(xrange,yrange,p1_x,[0.5 0.5],'w-');
+axis([x0 x1 y0 y1])
+set(gca,'Box','On')
+title('The Sampled Data');
+rect=get(gca,'Position');
+rect(1)=rect(1)-AxisShift;
+rect(3)=rect(3)+AxisShift;
+set(gca,'Position',rect)
+hold off
+
+subplot(1,2,2)
+imagesc(X(:),Y(:),px);
+hold on
+[cB, hB] = contour(xrange,yrange,p1_x,[0.5 0.5],'w:');
+set(hB,'LineWidth', 2);
+axis([x0 x1 y0 y1])
+set(gca,'YDir','normal')
+title('Probability Density p(x)')
+hold off
+
+drawnow;
+clc;
+disp('The first figure shows the data sampled from a mixture of three')
+disp('Gaussians, the first of which (whose centre is near the origin) is')
+disp('labelled red and the other two are labelled yellow.  The second plot')
+disp('shows the unconditional density of the data with the optimal Bayesian')
+disp('decision boundary superimposed.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+fh2 = figure;
+set(fh2, 'Name', 'Class-conditional Densities and Posterior Probabilities');
+whitebg(fh2, 'w');
+
+subplot(2,2,1)
+p1=reshape(px_j(:,1),size(X));
+imagesc(X(:),Y(:),p1);
+colormap hot
+colorbar
+axis(axis)
+set(gca,'YDir','normal')
+hold on
+plot(mix.centres(:,1),mix.centres(:,2),'b+','MarkerSize',8,'LineWidth',2)
+title('Density p(x|red)')
+hold off
+
+subplot(2,2,2)
+p2=reshape((px_j(:,2)+px_j(:,3)),size(X));
+imagesc(X(:),Y(:),p2);
+colorbar
+set(gca,'YDir','normal')
+hold on
+plot(mix.centres(:,1),mix.centres(:,2),'b+','MarkerSize',8,'LineWidth',2)
+title('Density p(x|yellow)')
+hold off
+
+subplot(2,2,3)
+imagesc(X(:),Y(:),p1_x);
+set(gca,'YDir','normal')
+colorbar
+title('Posterior Probability p(red|x)')
+hold on
+plot(mix.centres(:,1),mix.centres(:,2),'b+','MarkerSize',8,'LineWidth',2)
+hold off
+
+subplot(2,2,4)
+imagesc(X(:),Y(:),p2_x);
+set(gca,'YDir','normal')
+colorbar
+title('Posterior Probability p(yellow|x)')
+hold on
+plot(mix.centres(:,1),mix.centres(:,2),'b+','MarkerSize',8,'LineWidth',2)
+hold off
+
+% Now set up and train the MLP
+nhidden=6;
+nout=1;
+alpha = 0.2;	% Weight decay
+ncycles = 60;	% Number of training cycles. 
+% Set up MLP network
+net = mlp(2, nhidden, nout, 'logistic', alpha);
+options = zeros(1,18);
+options(1) = 1;                 % Print out error values
+options(14) = ncycles;
+
+mlpstring = ['We now set up an MLP with ', num2str(nhidden), ...
+    ' hidden units, logistic output and cross'];
+trainstring = ['entropy error function, and train it for ', ...
+    num2str(ncycles), ' cycles using the'];
+wdstring = ['quasi-Newton optimisation algorithm with weight decay of ', ...
+    num2str(alpha), '.'];
+
+% Force out the figure before training the MLP
+drawnow;
+disp(' ')
+disp('The second figure shows the class conditional densities and posterior')
+disp('probabilities for each class. The blue crosses mark the centres of')
+disp('the three Gaussians.')
+disp(' ')
+disp(mlpstring)
+disp(trainstring)
+disp(wdstring)
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Convert targets to 0-1 encoding
+target=[label==1];
+
+% Train using quasi-Newton.
+[net] = netopt(net, options, data, target, 'quasinew');
+y = mlpfwd(net, data);
+yg = mlpfwd(net, [X(:) Y(:)]);
+yg = reshape(yg(:,1),size(X));
+
+fh3 = figure;
+set(fh3, 'Name', 'Network Output');
+whitebg(fh3, 'k')
+subplot(1, 2, 1)
+hold on
+plot(data((label==1),1),data(label==1,2),'r.', 'MarkerSize', PointSize)
+plot(data((label>1),1),data(label>1,2),'y.', 'MarkerSize', PointSize)
+% Bayesian decision boundary
+[cB, hB] = contour(xrange,yrange,p1_x,[0.5 0.5],'b-');
+[cN, hN] = contour(xrange,yrange,yg,[0.5 0.5],'r-');
+set(hB, 'LineWidth', 2);
+set(hN, 'LineWidth', 2);
+Chandles = [hB(1) hN(1)];
+legend(Chandles, 'Bayes', ...
+  'Network', 3);
+
+axis([x0 x1 y0 y1])
+set(gca,'Box','on','XTick',[],'YTick',[])
+
+title('Training Data','FontSize',titleSize);
+hold off
+
+subplot(1, 2, 2)
+imagesc(X(:),Y(:),yg);
+colormap hot
+colorbar
+axis(axis)
+set(gca,'YDir','normal','XTick',[],'YTick',[])
+title('Network Output','FontSize',titleSize)
+
+clc
+disp('This figure shows the training data with the decision boundary')
+disp('produced by the trained network and the network''s prediction of')
+disp('the posterior probability of the red class.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% 
+% Now generate and classify a test data set
+% 
+[testdata testlabel] = gmmsamp(mix, n);
+testlab=[testlabel==1 testlabel>1];
+
+% This is the Bayesian classification
+tpx_j = gmmpost(mix, testdata);
+Bpost = [tpx_j(:,1), tpx_j(:,2)+tpx_j(:,3)];
+[Bcon Brate]=confmat(Bpost, [testlabel==1 testlabel>1]);
+
+% Compute network classification
+yt = mlpfwd(net, testdata);
+% Convert single output to posteriors for both classes
+testpost = [yt 1-yt];
+[C trate]=confmat(testpost,[testlabel==1 testlabel>1]);
+
+fh4 = figure;
+set(fh4, 'Name', 'Decision Boundaries');
+whitebg(fh4, 'k');
+hold on
+plot(testdata((testlabel==1),1),testdata((testlabel==1),2),...
+  ClassSymbol1, 'MarkerSize', PointSize)
+plot(testdata((testlabel>1),1),testdata((testlabel>1),2),...
+  ClassSymbol2, 'MarkerSize', PointSize)
+% Bayesian decision boundary
+[cB, hB] = contour(xrange,yrange,p1_x,[0.5 0.5],'b-');
+set(hB, 'LineWidth', 2);
+% Network decision boundary
+[cN, hN] = contour(xrange,yrange,yg,[0.5 0.5],'r-');
+set(hN, 'LineWidth', 2);
+Chandles = [hB(1) hN(1)];
+legend(Chandles, 'Bayes decision boundary', ...
+  'Network decision boundary', -1);
+axis([x0 x1 y0 y1])
+title('Test Data')
+set(gca,'Box','On','Xtick',[],'YTick',[])
+
+clc
+disp('This figure shows the test data with the decision boundary')
+disp('produced by the trained network and the optimal Bayes rule.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+fh5 = figure;
+set(fh5, 'Name', 'Test Set Performance');
+whitebg(fh5, 'w');
+% Bayes rule performance
+subplot(1,2,1)
+plotmat(Bcon,'b','k',12)
+set(gca,'XTick',[0.5 1.5])
+set(gca,'YTick',[0.5 1.5])
+grid('off')
+set(gca,'XTickLabel',['Red   ' ; 'Yellow'])
+set(gca,'YTickLabel',['Yellow' ; 'Red   '])
+ylabel('True')
+xlabel('Predicted')
+title(['Bayes Confusion Matrix (' num2str(Brate(1)) '%)'])
+
+% Network performance
+subplot(1,2, 2)
+plotmat(C,'b','k',12)
+set(gca,'XTick',[0.5 1.5])
+set(gca,'YTick',[0.5 1.5])
+grid('off')
+set(gca,'XTickLabel',['Red   ' ; 'Yellow'])
+set(gca,'YTickLabel',['Yellow' ; 'Red   '])
+ylabel('True')
+xlabel('Predicted')
+title(['Network Confusion Matrix (' num2str(trate(1)) '%)'])
+
+disp('The final figure shows the confusion matrices for the')
+disp('two rules on the test set.')
+disp(' ')
+disp('Press any key to exit.')
+pause
+whitebg(fh1, 'w');
+whitebg(fh2, 'w');
+whitebg(fh3, 'w');
+whitebg(fh4, 'w');
+whitebg(fh5, 'w');
+close(fh1); close(fh2); close(fh3);
+close(fh4); close(fh5);
+clear all;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demnlab.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,380 @@
+function demnlab(action);
+%DEMNLAB A front-end Graphical User Interface to the demos
+%
+%	Description
+%	This function will start a user interface allowing the user to select
+%	different demonstration functions to view. The demos are divided into
+%	4 groups, with the demo being executed by selecting the desired
+%	option from a pop-up menu.
+%
+%	See also
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% If run without parameters, initialise gui.
+if nargin<1,
+	action='initialise';
+end;
+
+if strcmp(action,'initialise'),
+
+  % Create figure
+  fig = figure( ...
+    'Name', 'Netlab Demos', ...
+    'NumberTitle', 'off', ...
+    'Color', [0.7529 0.7529 0.7529], ...
+    'Visible', 'on');
+  
+  % Create GROUPS
+  % Bottom of demo buttons
+  group1_bot = 0.20;
+  group1_top = 0.75;
+  uicontrol(fig, ...
+    'Style', 'frame', ...
+    'Units', 'normalized', ...
+    'Position', [0.03 group1_bot 0.94 group1_top - group1_bot], ...
+    'BackgroundColor', [0.5 0.5 0.5]);
+
+  % Bottom of help and close buttons
+  group2_bot = 0.04;
+  uicontrol(fig, ...
+    'Style', 'frame', ...
+    'Units', 'normalized', ...
+    'Position', [0.03 group2_bot 0.94 0.12], ...
+    'BackgroundColor', [0.5 0.5 0.5]);
+
+  % Draw title
+  hLogoAxis = axes( ...
+    'Units', 'normalized', ...
+    'Position', [0.05 0.82 0.90 0.14], ...
+    'Box', 'off', ...
+    'XColor', [0 0 0], ...
+    'YColor', [0 0 0], ...
+    'Visible', 'on');
+
+  load netlogo;			% load image and colour map
+  colormap(netcmap(1:3,:));	% change colour map: don't need many entries
+  image(nlogo);			% draw logo
+  axis('image');		% ensures pixels on axis are square
+  axis off;			% turn axes off
+
+  % Create static text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.5 0.5 0.5], ...
+    'Position', [0.05 group1_top-0.1 0.90 0.08], ...
+    'String', 'Select demo to run:');
+
+  % First row text offset
+  tRow1Offset = 0.14;
+  % Offset between text and button
+  TBoffset = 0.07;
+  % First row button offset
+  bRow1Offset = tRow1Offset+TBoffset;
+  % ONE text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.5 0.5 0.5], ...
+    'Position', [0.08 group1_top-tRow1Offset 0.36 0.05], ...
+    'String', 'Regression');
+  
+  popup1str(1) = {'Select Option'};
+  popup1str(2) = {'Multi-Layer Perceptron'};
+  popup1str(3) = {'Radial Basis Function'};
+  popup1str(4) = {'Mixture Density Network'};
+  % ONE popup
+  hPop1 = uicontrol(fig, ...
+    'Style','popup', ...
+    'Units','normalized', ...
+    'String', popup1str, ...
+    'Position', [0.08 group1_top-bRow1Offset 0.36 0.08], ...
+    'BackgroundColor', [0.7 0.7 0.7], ...
+    'Callback', 'demnlab popup1');
+
+  % TWO text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.5 0.5 0.5], ...
+    'Position', [0.56 group1_top-tRow1Offset 0.36 0.05], ...
+    'String', 'Classification');
+  
+  popup2str(1) = popup1str(1);
+  popup2str(2) = {'Generalised Linear Model (2 class)'};
+  popup2str(3) = {'Generalised Linear Model (3 class)'};
+  popup2str(4) = {'Multi-Layer Perceptron'};
+  popup2str(5) = {'K nearest neighbour'};
+  % TWO popup
+  hPop2 = uicontrol(fig, ...
+    'Style','popup', ...
+    'Units','normalized', ...
+    'String', popup2str, ...
+    'Position', [0.56 group1_top-bRow1Offset 0.36 0.08], ...
+    'BackgroundColor', [0.7 0.7 0.7], ...
+    'Callback', 'demnlab popup2');
+  
+  tRow2Offset = 0.30;
+  bRow2Offset = tRow2Offset+TBoffset;
+  % THREE text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.5 0.5 0.5], ...
+    'Position', [0.08 group1_top - tRow2Offset 0.36 0.05], ...
+    'String', 'Density Modelling and Clustering'); 
+  
+  popup3str(1) = popup1str(1);
+  popup3str(2) = {'Gaussian Mixture (EM training)'};
+  popup3str(3) = {'Gaussian Mixture (spherical)'};
+  popup3str(4) = {'Gaussian Mixture (diagonal)'};
+  popup3str(5) = {'Gaussian Mixture (full)'};
+  popup3str(6) = {'Neuroscale'};
+  popup3str(7) = {'GTM (EM training)'};
+  popup3str(8) = {'GTM (visualisation)'};
+  popup3str(9) = {'K-means clustering'};
+  popup3str(10) = {'Self-Organising Map'};
+  % TWO popup
+  % THREE popup
+  hPop3 = uicontrol(fig, ...
+    'Style','popup', ...
+    'Units','normalized', ...
+    'String', popup3str, ...
+    'Position', [0.08 group1_top - bRow2Offset 0.36 0.08], ...
+    'BackgroundColor', [0.7 0.7 0.7], ...
+    'Callback', 'demnlab popup3');
+  
+  % FOUR text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.5 0.5 0.5], ...
+    'Position', [0.56 group1_top - tRow2Offset 0.36 0.05], ...
+    'String', 'Bayesian Methods');
+  
+  popup4str(1) = popup1str(1);
+  popup4str(2) = {'Sampling the MLP Prior'};
+  popup4str(3) = {'Evidence Approximation for MLP'};
+  popup4str(4) = {'Evidence Approximation for RBF'};
+  popup4str(5) = {'Evidence Approximation in Classification'};
+  popup4str(6) = {'ARD for MLP'};
+  popup4str(7) = {'Sampling the GP Prior'};
+  popup4str(8) = {'GPs for Regression'};
+  popup4str(9) = {'ARD for GP'};
+  % FOUR popup
+  hPop4 = uicontrol(fig, ...
+    'Style','popup', ...
+    'Units','normalized', ...
+    'String', popup4str, ...
+    'Position', [0.56 group1_top - bRow2Offset 0.36 0.08], ...
+    'BackgroundColor', [0.7 0.7 0.7], ...
+    'Callback', 'demnlab popup4');
+  
+  
+  tRow3Offset = 0.45;
+  bRow3Offset = tRow3Offset+TBoffset;
+  % FIVE text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.5 0.5 0.5], ...
+    'Position', [0.08 group1_top - tRow3Offset 0.36 0.05], ...
+    'String', 'Optimisation and Visualisation'); 
+  
+  popup5str(1) = popup1str(1);
+  popup5str(2) = {'Algorithm Comparison'};
+  popup5str(3) = {'On-line Gradient Descent'};
+  popup5str(4) = {'Hinton Diagrams'};
+  % FIVE popup
+  hPop5 = uicontrol(fig, ...
+    'Style','popup', ...
+    'Units','normalized', ...
+    'String',popup5str, ...
+    'Position', [0.08 group1_top - bRow3Offset 0.36 0.08], ...
+    'BackgroundColor', [0.7 0.7 0.7], ...
+    'Callback', 'demnlab popup5');
+  
+  % SIX text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.5 0.5 0.5], ...
+    'Position', [0.56 group1_top - tRow3Offset 0.36 0.05], ...
+    'String', 'Sampling');
+  
+  popup6str(1) = popup1str(1);
+  popup6str(2) = {'Sampling a Gaussian'};
+  popup6str(3) = {'MCMC sampling (Metropolis)'};
+  popup6str(4) = {'Hybrid MC (Gaussian mixture)'};
+  popup6str(5) = {'Hybrid MC for MLP I'};
+  popup6str(6) = {'Hybrid MC for MLP II'};
+  % SIX popup
+  hPop6 = uicontrol(fig, ...
+    'Style','popup', ...
+    'Units','normalized', ...
+    'String', popup6str, ...
+    'Position', [0.56 group1_top - bRow3Offset 0.36 0.08], ...
+    'BackgroundColor', [0.7 0.7 0.7], ...
+    'Callback', 'demnlab popup6');
+  
+  
+  % Create HELP button
+  uicontrol(fig, ...
+    'Units', 'normalized', ...
+    'Position' , [0.05 group2_bot+0.02 0.40 0.08], ...
+    'String', 'Help', ...
+    'Callback', 'demnlab help');
+  
+  % Create CLOSE button
+  uicontrol(fig, ...
+    'Units', 'normalized', ...
+    'Position' , [0.55 group2_bot+0.02 0.40 0.08], ...
+    'String', 'Close', ...
+    'Callback', 'close(gcf)');
+  
+  hndlList=[fig hPop1 hPop2 hPop3 hPop4 hPop5 hPop6];
+  set(fig, 'UserData', hndlList);
+  set(fig, 'HandleVisibility', 'callback');
+  
+elseif strcmp(action, 'popup1'),
+  
+  hndlList=get(gcf,'UserData');
+  hPop = hndlList(2);
+  
+  selected = get(hPop, 'Val');
+  set(hPop, 'Val', [1]);
+  
+  switch selected
+    case 2
+      demmlp1;
+    case 3
+      demrbf1;
+    case 4
+      demmdn1;
+  end;
+  
+elseif strcmp(action,'popup2'),
+  
+  hndlList=get(gcf,'UserData');
+  hPop = hndlList(3);
+  
+  selected = get(hPop, 'Val');
+  set(hPop, 'Val', [1]);
+  
+  switch selected
+    case 2
+      demglm1;
+    case 3
+      demglm2;
+    case 4
+      demmlp2;  
+    case 5
+      demknn1;
+  end
+    
+elseif strcmp(action,'popup3'),
+  
+  hndlList=get(gcf,'UserData');
+  hPop = hndlList(4);
+  
+  selected = get(hPop, 'Val');
+  set(hPop, 'Val', [1]);
+  
+  switch selected
+    case 2
+      demgmm1;
+    case 3
+      demgmm2;
+    case 4
+      demgmm3;
+    case 5
+      demgmm4;
+    case 6
+      demns1;
+    case 7
+      demgtm1;
+    case 8
+      demgtm2;
+    case 9
+      demkmn1;
+    case 10
+      demsom1;
+  end
+  
+elseif strcmp(action,'popup4'),
+  
+  hndlList=get(gcf,'UserData');
+  hPop = hndlList(5);
+  
+  selected = get(hPop, 'Val');
+  set(hPop, 'Val', [1]);
+  
+  switch selected
+    case 2
+      demprior;
+    case 3
+      demev1;
+  case 4
+      demev3;
+  case 5
+      demev2;
+    case 6
+      demard;
+    case 7
+      demprgp;
+    case 8
+      demgp;
+    case 9
+      demgpard;
+  end
+
+elseif strcmp(action,'popup5'),
+  
+  hndlList=get(gcf,'UserData');
+  hPop = hndlList(6);
+  
+  selected = get(hPop, 'Val');
+  set(hPop, 'Val', [1]);
+  
+  switch selected
+    case 2
+      demopt1;
+    case 3
+      demolgd1;
+    case 4
+      demhint;
+  end
+
+  
+elseif strcmp(action,'popup6'),
+  
+  hndlList=get(gcf,'UserData');
+  hPop = hndlList(7);
+  
+  selected = get(hPop, 'Val');
+  set(hPop, 'Val', [1]);
+  
+  switch selected
+    case 2
+      demgauss;
+    case 3
+      demmet1;
+    case 4
+      demhmc1;
+    case 5
+      demhmc2;
+    case 6
+      demhmc3;
+  end
+
+elseif strcmp(action, 'help'),
+  
+  helpStr = {'To run a demo, press the appropriate button.'; ...
+	'Instructions and information will appear in the Matlab';...
+	'command window.'};
+  
+  hHelpDlg = helpdlg(helpStr, 'Netlab Demo Help');	
+
+end;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demns1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,114 @@
+%DEMNS1	Demonstrate Neuroscale for visualisation.
+%
+%	Description
+%	This script demonstrates the use of the Neuroscale algorithm for
+%	topographic projection and visualisation.  A data sample is generated
+%	from a mixture of two Gaussians in 4d space, and an RBF is trained
+%	with the stress error function to project the data into 2d.  The
+%	training data and a test sample are both plotted in this projection.
+%
+%	See also
+%	RBF, RBFTRAIN, RBFPRIOR
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Generate the data
+% Fix seeds for reproducible results
+rand('state', 420);
+randn('state', 420);
+
+input_dim = 4;
+output_dim = 2;
+mix = gmm(input_dim, 2, 'spherical');
+mix.centres = [1 1 1 1; 0 0 0 0];
+mix.priors = [0.5 0.5];
+mix.covars = [0.1 0.1];
+
+ndata = 60;
+[data, labels] = gmmsamp(mix, ndata);
+
+clc
+disp('This demonstration illustrates the use of the Neuroscale model')
+disp('to perform a topographic projection of data.  We begin by generating')
+disp('60 data points from a mixture of two Gaussians in 4 dimensional space.')
+disp(' ')
+disp('Press any key to continue')
+pause
+
+ncentres = 10;
+net = rbf(input_dim, ncentres, output_dim, 'tps', 'neuroscale');
+dstring = ['the Sammon mapping.  The model has ', num2str(ncentres), ...
+    ' centres, two outputs, and uses'];
+clc
+disp('The Neuroscale model is an RBF with a Stress error measure as used in')
+disp(dstring)
+disp('thin plate spline basis functions.')
+disp(' ')
+disp('It is trained using the shadow targets algorithm for at most 60 iterations.')
+disp(' ')
+disp('Press any key to continue')
+pause
+
+% First row controls shadow targets, second row controls rbfsetbf
+options(1, :) = foptions;
+options(2, :) = foptions;
+options(1, 1) = 1;
+options(1, 2) = 1e-2;
+options(1, 3) = 1e-2;
+options(1, 6) = 1;    % Switch on PCA initialisation
+options(1, 14) = 60;
+options(2, 1) = -1;   % Switch off all warnings
+options(2, 5) = 1;
+options(2, 14) = 10;
+net2 = rbftrain(net, options, data);
+
+disp(' ')
+disp('After training the model, we project the training data by a normal')
+disp('forward propagation through the RBF network.  Because there are two')
+disp('outputs, the results can be plotted and visualised.')
+disp(' ')
+disp('Press any key to continue')
+pause
+
+% Plot the result
+y = rbffwd(net2, data);
+ClassSymbol1 = 'r.';
+ClassSymbol2 = 'b.';
+PointSize = 12;
+fh1 = figure;
+hold on;
+plot(y((labels==1),1),y(labels==1,2),ClassSymbol1, 'MarkerSize', PointSize)
+plot(y((labels>1),1),y(labels>1,2),ClassSymbol2, 'MarkerSize', PointSize)
+
+disp(' ')
+disp('In this plot, the red dots denote the first class and the blue')
+disp('dots the second class.')
+disp(' ')
+disp('Press any key to continue.')
+disp(' ')
+pause
+
+disp('We now generate a further 100 data points from the original distribution')
+disp('and plot their projection using star symbols.  Note that a Sammon')
+disp('mapping cannot be used to generalise to new data in this fashion.')
+
+[test_data, test_labels] = gmmsamp(mix, 100);
+ytest = rbffwd(net2, test_data);
+ClassSymbol1 = 'ro';
+ClassSymbol2 = 'bo';
+% Circles are rather large symbols
+PointSize = 6;
+hold on
+plot(ytest((test_labels==1),1),ytest(test_labels==1,2), ...
+  ClassSymbol1, 'MarkerSize', PointSize)
+plot(ytest((test_labels>1),1),ytest(test_labels>1,2),...
+  ClassSymbol2, 'MarkerSize', PointSize)
+hold on
+legend('Class 1', 'Class 2', 'Test Class 1', 'Test Class 2')
+disp('Press any key to exit.')
+pause
+
+close(fh1);
+clear all;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demolgd1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,115 @@
+%DEMOLGD1 Demonstrate simple MLP optimisation with on-line gradient descent
+%
+%	Description
+%	The problem consists of one input variable X and one target variable
+%	T with data generated by sampling X at equal intervals and then
+%	generating target data by computing SIN(2*PI*X) and adding Gaussian
+%	noise. A 2-layer network with linear outputs is trained by minimizing
+%	a  sum-of-squares error function using on-line gradient descent.
+%
+%	See also
+%	DEMMLP1, OLGD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Generate the matrix of inputs x and targets t.
+
+ndata = 20;			% Number of data points.
+noise = 0.2;			% Standard deviation of noise distribution.
+x = [0:1/(ndata - 1):1]';
+randn('state', 42);
+rand('state', 42);
+t = sin(2*pi*x) + noise*randn(ndata, 1);
+
+clc
+disp('This demonstration illustrates the use of the on-line gradient')
+disp('descent algorithm to train a Multi-Layer Perceptron network for')
+disp('regression problems.  It is intended to illustrate the drawbacks')
+disp('of this algorithm compared to more powerful non-linear optimisation')
+disp('algorithms, such as conjugate gradients.')
+disp(' ')
+disp('First we generate the data from a noisy sine function and construct')
+disp('the network.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Set up network parameters.
+nin = 1;			% Number of inputs.
+nhidden = 3;			% Number of hidden units.
+nout = 1;			% Number of outputs.
+alpha = 0.01;			% Coefficient of weight-decay prior. 
+
+% Create and initialize network weight vector.
+net = mlp(nin, nhidden, nout, 'linear');
+% Initialise weights reasonably close to 0
+net = mlpinit(net, 10);
+
+% Set up vector of options for the optimiser.
+options = foptions;
+options(1) = 1;			% This provides display of error values.
+options(14) = 20;		% Number of training cycles. 
+options(18) = 0.1;		% Learning rate
+%options(17) = 0.4;		% Momentum
+options(17) = 0.4;		% Momentum
+options(5) = 1; 		% Do randomise pattern order
+clc
+disp('Then we set the options for the training algorithm.')
+disp(['In the first phase of training, which lasts for ',...
+    num2str(options(14)), ' cycles,'])
+disp(['the learning rate is ', num2str(options(18)), ...
+    ' and the momentum is ', num2str(options(17)), '.'])
+disp('The error values are displayed at the end of each pass through the')
+disp('entire pattern set.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Train using online gradient descent
+[net, options] = olgd(net, options, x, t);
+
+% Now allow learning rate to decay and remove momentum
+options(2) = 0;
+options(3) = 0;
+options(17) = 0.4;	% Turn off momentum
+options(5) = 1;		% Randomise pattern order
+options(6) = 1;		% Set learning rate decay on
+options(14) = 200;
+options(18) = 0.1;	% Initial learning rate
+
+disp(['In the second phase of training, which lasts for up to ',...
+    num2str(options(14)), ' cycles,'])
+disp(['the learning rate starts at ', num2str(options(18)), ...
+    ', decaying at 1/t and the momentum is ', num2str(options(17)), '.'])
+disp(' ')
+disp('Press any key to continue.')
+pause
+[net, options] = olgd(net, options, x, t);
+
+clc
+disp('Now we plot the data, underlying function, and network outputs')
+disp('on a single graph to compare the results.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+% Plot the data, the original function, and the trained network function.
+plotvals = [0:0.01:1]';
+y = mlpfwd(net, plotvals);
+fh1 = figure;
+plot(x, t, 'ob')
+hold on
+axis([0 1 -1.5 1.5])
+fplot('sin(2*pi*x)', [0 1], '--g')
+plot(plotvals, y, '-r')
+legend('data', 'function', 'network');
+hold off
+
+disp('Note the very poor fit to the data: this should be compared with')
+disp('the results obtained in demmlp1.')
+disp(' ')
+disp('Press any key to exit.')
+pause
+close(fh1);
+clear all;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demopt1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,170 @@
+function demopt1(xinit)
+%DEMOPT1 Demonstrate different optimisers on Rosenbrock's function.
+%
+%	Description
+%	The four general optimisers (quasi-Newton, conjugate gradients,
+%	scaled conjugate gradients, and gradient descent) are applied to the
+%	minimisation of Rosenbrock's well known `banana' function. Each
+%	optimiser is run for at most 100 cycles, and a stopping criterion of
+%	1.0e-4 is used for both position and function value. At the end, the
+%	trajectory of each algorithm is shown on a contour plot of the
+%	function.
+%
+%	DEMOPT1(XINIT) allows the user to specify a row vector with two
+%	columns as the starting point.  The default is the point [-1 1]. Note
+%	that the contour plot has an x range of [-1.5, 1.5] and a y range of
+%	[-0.5, 2.1], so it is best to choose a starting point in the same
+%	region.
+%
+%	See also
+%	CONJGRAD, GRADDESC, QUASINEW, SCG, ROSEN, ROSEGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Initialise start point for search
+if nargin < 1 | size(xinit) ~= [1 2]
+  xinit = [-1 1];	% Traditional start point
+end
+
+% Find out if flops is available (i.e. pre-version 6 Matlab)
+v = version;
+if (str2num(strtok(v, '.')) >= 6)
+    flops_works = logical(0);
+else
+    flops_works = logical(1);
+end
+
+% Set up options
+options = foptions;	% Standard options
+options(1) = -1; 	% Turn off printing completely
+options(3) = 1e-8; 	% Tolerance in value of function
+options(14) = 100;  	% Max. 100 iterations of algorithm
+
+clc
+disp('This demonstration compares the performance of four generic')
+disp('optimisation routines when finding the minimum of Rosenbrock''s')
+disp('function y = 100*(x2-x1^2)^2 + (1-x1)^2.')
+disp(' ')
+disp('The global minimum of this function is at [1 1].')
+disp(['Each algorithm starts at the point [' num2str(xinit(1))...
+	' ' num2str(xinit(2)) '].'])
+disp(' ')
+disp('Press any key to continue.')
+pause 
+
+% Generate a contour plot of the function
+a = -1.5:.02:1.5;
+b = -0.5:.02:2.1;
+[A, B] = meshgrid(a, b);
+Z = rosen([A(:), B(:)]);
+Z = reshape(Z, length(b), length(a));
+l = -1:6;
+v = 2.^l;
+fh1 = figure;
+contour(a, b, Z, v)
+title('Contour plot of Rosenbrock''s function')
+hold on
+
+clc
+disp('We now use quasi-Newton, conjugate gradient, scaled conjugate')
+disp('gradient, and gradient descent with line search algorithms')
+disp('to find a local minimum of this function.  Each algorithm is stopped')
+disp('when 100 cycles have elapsed, or if the change in function value')
+disp('is less than 1.0e-8 or the change in the input vector is less than')
+disp('1.0e-4 in magnitude.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+
+clc
+x = xinit;
+flops(0)
+[x, options, errlog, pointlog] = quasinew('rosen', x, options, 'rosegrad');
+fprintf(1, 'For quasi-Newton method:\n')
+fprintf(1, 'Final point is (%f, %f), value is %f\n', x(1), x(2), options(8))
+fprintf(1, 'Number of function evaluations is %d\n', options(10))
+fprintf(1, 'Number of gradient evaluations is %d\n', options(11))
+if flops_works
+    opt_flops = flops;
+    fprintf(1, 'Number of floating point operations is %d\n', opt_flops)
+end
+fprintf(1, 'Number of cycles is %d\n', size(pointlog, 1) - 1);
+disp(' ')
+
+x = xinit;
+flops(0)
+[x, options, errlog2, pointlog2] = conjgrad('rosen', x, options, 'rosegrad');
+fprintf(1, 'For conjugate gradient method:\n')
+fprintf(1, 'Final point is (%f, %f), value is %f\n', x(1), x(2), options(8))
+fprintf(1, 'Number of function evaluations is %d\n', options(10))
+fprintf(1, 'Number of gradient evaluations is %d\n', options(11))
+if flops_works
+    opt_flops = flops;
+    fprintf(1, 'Number of floating point operations is %d\n', ...
+	opt_flops)
+end
+fprintf(1, 'Number of cycles is %d\n', size(pointlog2, 1) - 1);
+disp(' ')
+
+x = xinit;
+flops(0)
+[x, options, errlog3, pointlog3] = scg('rosen', x, options, 'rosegrad');
+fprintf(1, 'For scaled conjugate gradient method:\n')
+fprintf(1, 'Final point is (%f, %f), value is %f\n', x(1), x(2), options(8))
+fprintf(1, 'Number of function evaluations is %d\n', options(10))
+fprintf(1, 'Number of gradient evaluations is %d\n', options(11))
+if flops_works
+    opt_flops = flops;
+    fprintf(1, 'Number of floating point operations is %d\n', opt_flops)
+end
+fprintf(1, 'Number of cycles is %d\n', size(pointlog3, 1) - 1);
+disp(' ')
+
+x = xinit;
+options(7) = 1; % Line minimisation used
+flops(0)
+[x, options, errlog4, pointlog4] = graddesc('rosen', x, options, 'rosegrad');
+fprintf(1, 'For gradient descent method:\n')
+fprintf(1, 'Final point is (%f, %f), value is %f\n', x(1), x(2), options(8))
+fprintf(1, 'Number of function evaluations is %d\n', options(10))
+fprintf(1, 'Number of gradient evaluations is %d\n', options(11))
+if flops_works
+    opt_flops = flops;
+    fprintf(1, 'Number of floating point operations is %d\n', opt_flops)
+end
+fprintf(1, 'Number of cycles is %d\n', size(pointlog4, 1) - 1);
+disp(' ')
+disp('Note that gradient descent does not reach a local minimum in')
+disp('100 cycles.')
+disp(' ')
+disp('On this problem, where the function is cheap to evaluate, the')
+disp('computational effort is dominated by the algorithm overhead.')
+disp('However on more complex optimisation problems (such as those')
+disp('involving neural networks), computational effort is dominated by')
+disp('the number of function and gradient evaluations.  Counting these,')
+disp('we can rank the algorithms: quasi-Newton (the best), conjugate')
+disp('gradient, scaled conjugate gradient, gradient descent (the worst)')
+disp(' ')
+disp('Press any key to continue.')
+pause
+clc
+disp('We now plot the trajectory of search points for each algorithm')
+disp('superimposed on the contour plot.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+plot(pointlog4(:,1), pointlog4(:,2), 'bd', 'MarkerSize', 6)
+plot(pointlog3(:,1), pointlog3(:,2), 'mx', 'MarkerSize', 6, 'LineWidth', 2)
+plot(pointlog(:,1), pointlog(:,2), 'k.', 'MarkerSize', 18)
+plot(pointlog2(:,1), pointlog2(:,2), 'g+', 'MarkerSize', 6, 'LineWidth', 2)
+lh = legend(  'Gradient Descent', 'Scaled Conjugate Gradients', ...
+  'Quasi Newton', 'Conjugate Gradients');
+
+hold off
+
+clc
+disp('Press any key to end.')
+pause
+close(fh1);
+clear all;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/dempot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function e = dempot(x, mix)
+%DEMPOT	Computes the negative log likelihood for a mixture model.
+%
+%	Description
+%	This function computes the negative log of the unconditional data
+%	density P(X) for a Gaussian mixture model.  The data structure MIX
+%	defines the mixture model, while the matrix X contains the data
+%	vectors.
+%
+%	See also
+%	DEMGPOT, DEMHMC1, DEMMET1
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Computes the potential (negative log likelihood)
+e = -log(gmmprob(mix, x));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demprgp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,542 @@
+function demprgp(action);
+%DEMPRGP Demonstrate sampling from a Gaussian Process prior.
+%
+%	Description
+%	This function plots the functions represented by a Gaussian Process
+%	model. The hyperparameter values can be adjusted  on a linear scale
+%	using the sliders (though the exponential of the parameters is used
+%	in the covariance function), or  by typing values into the text boxes
+%	and pressing the return key. Both types of covariance function are
+%	supported.  An extra function specific parameter is needed for the
+%	rational quadratic function.
+%
+%	See also
+%	GP
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if nargin<1,
+    action='initialize';
+end;
+
+if strcmp(action,'initialize')
+
+  % Bounds on hyperparameter values
+  biasminval = -3.0; biasmaxval = 3.0;
+  noiseminval = -20; noisemaxval = -2;
+  fparminval = 0.0; fparmaxval = 2.0;
+  inwminval = 0; inwmaxval = 8;
+  % Initial hyperparameter values
+  bias = (biasminval+biasmaxval)/2;
+  noise = (noiseminval+noisemaxval)/2;
+  inweights = (inwminval+inwmaxval)/2;
+  fpar = (fparminval+fparmaxval)/2;
+  fpar2 = (fparminval+fparmaxval)/2;
+  
+  gptype = 'sqexp';
+  
+  % Create FIGURE
+  fig=figure( ...
+    'Name','Sampling from a Gaussian Process prior', ...
+    'Position', [50 50 480 380], ...
+    'NumberTitle','off', ...
+    'Color', [0.8 0.8 0.8], ...
+    'Visible','on');
+
+  % List box for covariance function type
+  nettype_box = uicontrol(fig, ...
+    'Style', 'listbox', ...
+    'Units', 'normalized', ...
+    'HorizontalAlignment', 'center', ...
+    'Position', [0.52 0.77 0.40 0.12], ...
+    'String', 'Squared Exponential|Rational Quadratic', ...
+    'Max', 1, 'Min', 0, ... % Only allow one selection
+    'Value', 1, ... % Initial value is squared exponential
+    'BackgroundColor',[0.60 0.60 0.60],...
+    'CallBack', 'demprgp GPtype');
+
+  % Title for list box
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'Position', [0.52 0.89 0.40 0.05], ...
+    'String', 'Covariance Function Type', ...
+    'BackgroundColor', get(fig, 'Color'), ...
+    'HorizontalAlignment', 'center');
+  
+  % Frames to enclose sliders
+  bottom_row = 0.04;
+  slider_frame_height = 0.15;
+  biasframe = uicontrol(fig, ...
+    'Style', 'frame', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'String', 'bias', ...
+    'HorizontalAlignment', 'left', ...
+    'Position', [0.05 bottom_row 0.35 slider_frame_height]);
+  
+  bpos = get(biasframe, 'Position');
+  noise_frame_bottom = bpos(2) + bpos(4) + 0.02;
+  noiseframe = uicontrol(fig, ...
+    'Style', 'frame', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.05 noise_frame_bottom 0.35 slider_frame_height]);
+   
+  npos = get(noiseframe, 'Position');
+  inw_frame_bottom = npos(2) + npos(4) + 0.02;
+  inwframe = uicontrol(fig, ...
+    'Style', 'frame', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.05 inw_frame_bottom 0.35 slider_frame_height]);
+   
+  inwpos = get(inwframe, 'Position');
+  fpar_frame_bottom = inwpos(2) + inwpos(4) + 0.02;
+  % This frame sometimes has multiple parameters
+  uicontrol(fig, ...
+    'Style', 'frame', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.05 fpar_frame_bottom 0.35 2*slider_frame_height]);
+   
+  % Frame text
+  slider_text_height = 0.05;
+  slider_text_voffset = 0.08;
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'HorizontalAlignment', 'left', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.07 bottom_row+slider_text_voffset ...
+      0.06 slider_text_height], ...
+    'String', 'bias');
+
+  % Frame text
+  noiseframe = uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'HorizontalAlignment', 'left', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.07 noise_frame_bottom+slider_text_voffset ...
+      0.08 slider_text_height], ...
+    'String', 'noise');
+
+  % Frame text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'HorizontalAlignment', 'left', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.07 inw_frame_bottom+slider_text_voffset ...
+      0.14 slider_text_height], ...
+    'String', 'inweights');
+
+  % Frame text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'HorizontalAlignment', 'left', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.07 fpar_frame_bottom+slider_frame_height+ ...
+       slider_text_voffset 0.06 slider_text_height], ...
+    'String', 'fpar');
+
+ uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'HorizontalAlignment', 'left', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.07 fpar_frame_bottom+slider_text_voffset ...
+       0.06 slider_text_height], ...
+    'String', 'fpar2', ...
+    'Tag', 'fpar2text', ...
+    'Enable', 'off');
+   
+  % Slider
+  slider_left = 0.07;
+  slider_width = 0.31;
+  slider_frame_voffset = 0.02;
+  biasslide = uicontrol(fig, ...
+    'Style', 'slider', ...
+    'Units', 'normalized', ...
+    'Value', bias, ...
+    'BackgroundColor', [0.8 0.8 0.8], ...
+    'Position', [slider_left bottom_row+slider_frame_voffset ...
+      slider_width 0.05], ...
+    'Min', biasminval, 'Max', biasmaxval, ...
+    'Callback', 'demprgp update');
+  
+  % Slider
+  noiseslide = uicontrol(fig, ...
+    'Style', 'slider', ...
+    'Units', 'normalized', ...
+    'Value', noise, ...
+    'BackgroundColor', [0.8 0.8 0.8], ...
+    'Position', [slider_left noise_frame_bottom+slider_frame_voffset ...
+      slider_width 0.05], ...
+    'Min', noiseminval, 'Max', noisemaxval, ...
+    'Callback', 'demprgp update');
+  
+  % Slider
+  inweightsslide = uicontrol(fig, ...
+    'Style', 'slider', ...
+    'Units', 'normalized', ...
+    'Value', inweights, ...
+    'BackgroundColor', [0.8 0.8 0.8], ...
+    'Position', [slider_left inw_frame_bottom+slider_frame_voffset ...
+      slider_width 0.05], ...
+    'Min', inwminval, 'Max', inwmaxval, ...
+    'Callback', 'demprgp update');
+  
+  % Slider
+  fparslide = uicontrol(fig, ...
+    'Style', 'slider', ...
+    'Units', 'normalized', ...
+    'Value', fpar, ...
+    'BackgroundColor', [0.8 0.8 0.8], ...
+    'Position', [slider_left fpar_frame_bottom+slider_frame_height+ ...
+       slider_frame_voffset slider_width 0.05], ...
+    'Min', fparminval, 'Max', fparmaxval, ...
+    'Callback', 'demprgp update');
+ 
+ fpar2slide = uicontrol(fig, ...
+    'Style', 'slider', ...
+    'Units', 'normalized', ...
+    'Value', fpar2, ...
+    'BackgroundColor', [0.8 0.8 0.8], ...
+    'Position', [slider_left fpar_frame_bottom+slider_frame_voffset ...
+       slider_width 0.05], ...
+    'Min', fparminval, 'Max', fparmaxval, ...
+    'Callback', 'demprgp update', ...
+    'Tag', 'fpar2slider', ...
+    'Enable', 'off');
+  
+  % Text display of hyper-parameter values
+  
+  format = '%8f';
+
+  hp_left = 0.20;
+  hp_width = 0.17;
+  biasval = uicontrol(fig, ...
+    'Style', 'edit', ...
+    'Units', 'normalized', ...
+    'Position', [hp_left bottom_row+slider_text_voffset ...
+      hp_width slider_text_height], ...
+    'String', sprintf(format, bias), ...
+    'Callback', 'demprgp newval');
+  
+  noiseval = uicontrol(fig, ...
+    'Style', 'edit', ...
+    'Units', 'normalized', ...
+    'Position', [hp_left noise_frame_bottom+slider_text_voffset ...
+      hp_width slider_text_height], ...
+    'String', sprintf(format, noise), ...
+    'Callback', 'demprgp newval');
+  
+  inweightsval = uicontrol(fig, ...
+    'Style', 'edit', ...
+    'Units', 'normalized', ...
+    'Position', [hp_left inw_frame_bottom+slider_text_voffset ...
+      hp_width slider_text_height], ...
+    'String', sprintf(format, inweights), ...
+    'Callback', 'demprgp newval');
+  
+  fparval = uicontrol(fig, ...
+    'Style', 'edit', ...
+    'Units', 'normalized', ...
+    'Position', [hp_left fpar_frame_bottom+slider_frame_height+ ...
+       slider_text_voffset hp_width slider_text_height], ...
+    'String', sprintf(format, fpar), ...
+    'Callback', 'demprgp newval');
+ 
+  fpar2val = uicontrol(fig, ...
+    'Style', 'edit', ...
+    'Units', 'normalized', ...
+    'Position', [hp_left fpar_frame_bottom+slider_text_voffset ...
+       hp_width slider_text_height], ...
+    'String', sprintf(format, fpar), ...
+    'Callback', 'demprgp newval', ...
+    'Enable', 'off', ...
+    'Tag', 'fpar2val');
+   
+  
+  % The graph box
+  haxes = axes('Position', [0.5 0.28 0.45 0.45], ...
+    'Units', 'normalized', ...
+    'Visible', 'on');
+
+  % The SAMPLE button
+  uicontrol(fig, ...
+    'Style','push', ...
+    'Units','normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position',[0.5 bottom_row 0.13 0.1], ...
+    'String','Sample', ...
+    'Callback','demprgp replot');
+  
+  % The CLOSE button
+  uicontrol(fig, ...
+    'Style','push', ...
+    'Units','normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position',[0.82 bottom_row 0.13 0.1], ...
+    'String','Close', ...
+    'Callback','close(gcf)');
+  
+  % The HELP button
+  uicontrol(fig, ...
+    'Style','push', ...
+    'Units','normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position',[0.66 bottom_row 0.13 0.1], ...
+    'String','Help', ...
+    'Callback','demprgp help');
+  
+   % Save handles to objects
+  
+   hndlList=[fig biasslide noiseslide inweightsslide fparslide ...
+         biasval noiseval inweightsval ...
+      fparval haxes nettype_box];
+  set(fig, 'UserData', hndlList);
+  
+  demprgp('replot')
+  
+  
+elseif strcmp(action, 'update'),
+  
+  % Update when a slider is moved.
+  
+  hndlList   = get(gcf, 'UserData');
+  biasslide   = hndlList(2);
+  noiseslide = hndlList(3);
+  inweightsslide  = hndlList(4);
+  fparslide = hndlList(5);
+  biasval = hndlList(6);
+  noiseval = hndlList(7);
+  inweightsval = hndlList(8);
+  fparval = hndlList(9);
+  haxes = hndlList(10);
+  nettype_box = hndlList(11);
+
+  
+  bias = get(biasslide, 'Value');
+  noise = get(noiseslide, 'Value');
+  inweights = get(inweightsslide, 'Value');
+  fpar = get(fparslide, 'Value');
+  fpar2 = get(findobj('Tag', 'fpar2slider'), 'Value');
+    
+  format = '%8f';
+  set(biasval, 'String', sprintf(format, bias));
+  set(noiseval, 'String', sprintf(format, noise));
+  set(inweightsval, 'String', sprintf(format, inweights));
+  set(fparval, 'String', sprintf(format, fpar));
+  set(findobj('Tag', 'fpar2val'), 'String', ...
+     sprintf(format, fpar2));
+  
+  demprgp('replot');
+  
+elseif strcmp(action, 'newval'),
+  
+  % Update when text is changed.
+  
+  hndlList   = get(gcf, 'UserData');
+  biasslide   = hndlList(2);
+  noiseslide = hndlList(3);
+  inweightsslide  = hndlList(4);
+  fparslide = hndlList(5);
+  biasval = hndlList(6);
+  noiseval = hndlList(7);
+  inweightsval = hndlList(8);
+  fparval = hndlList(9);
+  haxes = hndlList(10);
+    
+  bias = sscanf(get(biasval, 'String'), '%f');
+  noise = sscanf(get(noiseval, 'String'), '%f');
+  inweights = sscanf(get(inweightsval, 'String'), '%f');
+  fpar = sscanf(get(fparval, 'String'), '%f');
+  fpar2 = sscanf(get(findobj('Tag', 'fpar2val'), 'String'), '%f');
+  
+  set(biasslide, 'Value', bias);
+  set(noiseslide, 'Value', noise);
+  set(inweightsslide, 'Value', inweights);
+  set(fparslide, 'Value', fpar);
+  set(findobj('Tag', 'fpar2slider'), 'Value', fpar2);
+  
+  demprgp('replot');
+  
+elseif strcmp(action, 'GPtype')
+  hndlList   = get(gcf, 'UserData');
+  nettype_box = hndlList(11);
+  gptval = get(nettype_box, 'Value');
+  if gptval == 1
+     % Squared exponential, so turn off fpar2
+     set(findobj('Tag', 'fpar2text'), 'Enable', 'off');
+     set(findobj('Tag', 'fpar2slider'), 'Enable', 'off');
+     set(findobj('Tag', 'fpar2val'), 'Enable', 'off');
+  else
+     % Rational quadratic, so turn on fpar2
+     set(findobj('Tag', 'fpar2text'), 'Enable', 'on');
+     set(findobj('Tag', 'fpar2slider'), 'Enable', 'on');
+     set(findobj('Tag', 'fpar2val'), 'Enable', 'on');
+  end
+  demprgp('replot');
+  
+elseif strcmp(action, 'replot'),
+  
+  % Re-sample from the prior and plot graphs.
+ 
+  oldFigNumber=watchon;
+
+  hndlList   = get(gcf, 'UserData');
+  biasslide   = hndlList(2);
+  noiseslide = hndlList(3);
+  inweightsslide  = hndlList(4);
+  fparslide = hndlList(5);
+  haxes = hndlList(10);
+  nettype_box = hndlList(11);
+  gptval = get(nettype_box, 'Value');
+  if gptval == 1
+    gptype = 'sqexp';
+  else
+    gptype = 'ratquad';
+  end
+  
+  bias = get(biasslide, 'Value');
+  noise = get(noiseslide, 'Value');
+  inweights = get(inweightsslide, 'Value');
+  fpar = get(fparslide, 'Value');
+  
+ 
+  axes(haxes);
+  cla
+  set(gca, ...
+    'Box', 'on', ...
+    'Color', [0 0 0], ...
+    'XColor', [0 0 0], ...
+    'YColor', [0 0 0], ...
+    'FontSize', 14);
+  ymin = -10;
+  ymax = 10;
+  axis([-1 1 ymin ymax]);  
+  set(gca,'DefaultLineLineWidth', 2);
+
+  xvals = (-1:0.01:1)';
+  nsample = 10;    % Number of samples from prior.
+  hold on
+  plot([-1 0; 1 0], [0 ymin; 0 ymax], 'b--');
+  net = gp(1, gptype);
+  net.bias = bias;
+  net.noise = noise;
+  net.inweights = inweights;
+  if strcmp(gptype, 'sqexp')
+    net.fpar = fpar;
+  else
+    fpar2 = get(findobj('Tag', 'fpar2slider'), 'Value');
+    net.fpar = [fpar fpar2];
+  end
+  cn = gpcovar(net, xvals);
+  cninv = inv(cn);
+  cnchol = chol(cn);
+  set(gca, 'DefaultLineLineWidth', 1);
+  for n = 1:nsample
+    y = (cnchol') * randn(size(xvals));
+    plot(xvals, y, 'y');
+  end
+ 
+  watchoff(oldFigNumber);
+ 
+elseif strcmp(action, 'help'),
+  
+  % Provide help to user.
+
+  oldFigNumber=watchon;
+
+  helpfig = figure('Position', [100 100 480 400], ...
+    'Name', 'Help', ...
+    'NumberTitle', 'off', ...
+    'Color', [0.8 0.8 0.8], ...
+    'Visible','on');
+  
+    % The HELP TITLE BAR frame
+  uicontrol(helpfig,  ...
+    'Style','frame', ...
+    'Units','normalized', ...
+    'HorizontalAlignment', 'center', ...
+    'Position', [0.05 0.82 0.9 0.1], ...
+    'BackgroundColor',[0.60 0.60 0.60]);
+  
+  % The HELP TITLE BAR text
+  uicontrol(helpfig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.26 0.85 0.6 0.05], ...
+    'HorizontalAlignment', 'left', ...
+    'String', 'Help: Sampling from a Gaussian Process Prior');
+  
+  helpstr1 = strcat(...
+    'This demonstration shows the effects of sampling from a Gaussian', ...
+     ' process prior. The parameters bias, noise, inweights and fpar', ...
+     ' control the corresponding terms in the covariance function of the',...
+     ' Gaussian process. Their values can be adjusted on a linear scale',...
+     ' using the sliders, or by typing values into the text boxes and',...
+     ' pressing the return key.  After setting these values, press the',...
+     ' ''Sample'' button to see a new sample from the prior.');
+
+   helpstr2 = strcat(...
+      'Observe how inweights controls horizontal length-scale of the',...
+       ' variation in the functions, noise controls the roughness of the',...
+       ' functions, and the bias controls the size of the', ...
+       ' vertical offset of the signal.');
+   helpstr3 = strcat(...
+       'There are two types of covariance function supported by', ...
+       ' Netlab which can be selected using the ''Covariance Function', ...
+       ' Type'' menu.');
+   helpstr4 = strcat(...
+       'The squared exponential has a single fpar which', ...
+       ' controls the vertical scale of the process.');
+   helpstr5 = strcat(...
+      'The rational quadratic has two fpar values.  The first is', ...
+      ' is a scale parameter inside the rational function like the',...
+      ' first fpar for the squared exponential covariance, while the', ...
+      ' second gives the exponent of the rational function (i.e. the',...
+      ' rate of decay of the covariance function.');
+   % Set up cell array with help strings
+   hstr(1) = {helpstr1};
+   hstr(2) = {''};
+   hstr(3) = {helpstr2};
+   hstr(4) = {''};
+   hstr(5) = {helpstr3};
+   hstr(6) = {''};
+   hstr(7) = {helpstr4};
+   hstr(8) = {''};
+   hstr(9) = {helpstr5};
+
+  % The HELP text
+  helpui = uicontrol(helpfig, ...
+    'Style', 'Text', ...
+    'Units', 'normalized', ...
+    'ForegroundColor', [0 0 0], ...
+    'HorizontalAlignment', 'left', ...
+    'BackgroundColor', [1 1 1], ...
+    'Min', 0, ...
+    'Max', 2, ...
+    'Position', [0.05 0.2 0.9 0.57]);
+  [hstrw, newpos] = textwrap(helpui, hstr);
+  set(helpui, 'String', hstrw, 'Position', [0.05, 0.2, 0.9 newpos(4)]);
+	     
+  % The CLOSE button
+  uicontrol(helpfig, ...
+    'Style','push', ...
+    'Units','normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position',[0.4 0.05 0.2 0.1], ...
+    'String','Close', ...
+    'Callback','close(gcf)');
+
+   watchoff(oldFigNumber);
+
+end;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demprior.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,406 @@
+function demprior(action);
+%DEMPRIOR Demonstrate sampling from a multi-parameter Gaussian prior.
+%
+%	Description
+%	This function plots the functions represented by a multi-layer
+%	perceptron network when the weights are set to values drawn from a
+%	Gaussian prior distribution. The parameters AW1, AB1 AW2 and AB2
+%	control the inverse variances of the first-layer weights, the hidden
+%	unit  biases, the second-layer weights and the output unit biases
+%	respectively.  Their values can be adjusted on a logarithmic scale
+%	using the sliders, or  by typing values into the text boxes and
+%	pressing the return key.
+%
+%	See also
+%	MLP
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if nargin<1,
+    action='initialize';
+end;
+
+if strcmp(action,'initialize')
+  
+  aw1 = 0.01;
+  ab1 = 0.1;
+  aw2 = 1.0;
+  ab2 = 1.0;
+  
+  % Create FIGURE
+  fig=figure( ...
+    'Name','Sampling from a Gaussian prior', ...
+    'Position', [50 50 480 380], ...
+    'NumberTitle','off', ...
+    'Color', [0.8 0.8 0.8], ...
+    'Visible','on');
+
+  % The TITLE BAR frame
+  uicontrol(fig,  ...
+    'Style','frame', ...
+    'Units','normalized', ...
+    'HorizontalAlignment', 'center', ...
+    'Position', [0.5 0.82 0.45 0.1], ...
+    'BackgroundColor',[0.60 0.60 0.60]);
+  
+  % The TITLE BAR text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.54 0.85 0.40 0.05], ...
+    'HorizontalAlignment', 'left', ...
+    'String', 'Sampling from a Gaussian prior');
+  
+  % Frames to enclose sliders
+  uicontrol(fig, ...
+    'Style', 'frame', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.05 0.08 0.35 0.18]);
+  
+  uicontrol(fig, ...
+    'Style', 'frame', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.05 0.3 0.35 0.18]);
+   
+  uicontrol(fig, ...
+    'Style', 'frame', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.05 0.52 0.35 0.18]);
+   
+  uicontrol(fig, ...
+    'Style', 'frame', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.05 0.74 0.35 0.18]);
+   
+  % Frame text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'HorizontalAlignment', 'left', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.07 0.17 0.06 0.07], ...
+    'String', 'aw1');
+
+  % Frame text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'HorizontalAlignment', 'left', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.07 0.39 0.06 0.07], ...
+    'String', 'ab1');
+
+  % Frame text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'HorizontalAlignment', 'left', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.07 0.61 0.06 0.07], ...
+    'String', 'aw2');
+
+  % Frame text
+  uicontrol(fig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'HorizontalAlignment', 'left', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.07 0.83 0.06 0.07], ...
+    'String', 'ab2');
+   
+  % Slider
+  minval = -5; maxval = 5;
+  aw1slide = uicontrol(fig, ...
+    'Style', 'slider', ...
+    'Units', 'normalized', ...
+    'Value', log10(aw1), ...
+    'BackgroundColor', [0.8 0.8 0.8], ...
+    'Position', [0.07 0.1 0.31 0.05], ...
+    'Min', minval, 'Max', maxval, ...
+    'Callback', 'demprior update');
+  
+  % Slider
+  ab1slide = uicontrol(fig, ...
+    'Style', 'slider', ...
+    'Units', 'normalized', ...
+    'Value', log10(ab1), ...
+    'BackgroundColor', [0.8 0.8 0.8], ...
+    'Position', [0.07 0.32 0.31 0.05], ...
+    'Min', minval, 'Max', maxval, ...
+    'Callback', 'demprior update');
+  
+  % Slider
+  aw2slide = uicontrol(fig, ...
+    'Style', 'slider', ...
+    'Units', 'normalized', ...
+    'Value', log10(aw2), ...
+    'BackgroundColor', [0.8 0.8 0.8], ...
+    'Position', [0.07 0.54 0.31 0.05], ...
+    'Min', minval, 'Max', maxval, ...
+    'Callback', 'demprior update');
+  
+  % Slider
+  ab2slide = uicontrol(fig, ...
+    'Style', 'slider', ...
+    'Units', 'normalized', ...
+    'Value', log10(ab2), ...
+    'BackgroundColor', [0.8 0.8 0.8], ...
+    'Position', [0.07 0.76 0.31 0.05], ...
+    'Min', minval, 'Max', maxval, ...
+    'Callback', 'demprior update');
+  
+  % The graph box
+  haxes = axes('Position', [0.5 0.28 0.45 0.45], ...
+    'Units', 'normalized', ...
+    'Visible', 'on');
+  
+  % Text display of hyper-parameter values
+  
+  format = '%8f';
+  
+  aw1val = uicontrol(fig, ...
+    'Style', 'edit', ...
+    'Units', 'normalized', ...
+    'Position', [0.15 0.17 0.23 0.07], ...
+    'String', sprintf(format, aw1), ...
+    'Callback', 'demprior newval');
+  
+  ab1val = uicontrol(fig, ...
+    'Style', 'edit', ...
+    'Units', 'normalized', ...
+    'Position', [0.15 0.39 0.23 0.07], ...
+    'String', sprintf(format, ab1), ...
+    'Callback', 'demprior newval');
+  
+  aw2val = uicontrol(fig, ...
+    'Style', 'edit', ...
+    'Units', 'normalized', ...
+    'Position', [0.15 0.61 0.23 0.07], ...
+    'String', sprintf(format, aw2), ...
+    'Callback', 'demprior newval');
+  
+  ab2val = uicontrol(fig, ...
+    'Style', 'edit', ...
+    'Units', 'normalized', ...
+    'Position', [0.15 0.83 0.23 0.07], ...
+    'String', sprintf(format, ab2), ...
+    'Callback', 'demprior newval');
+   
+  % The SAMPLE button
+  uicontrol(fig, ...
+    'Style','push', ...
+    'Units','normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position',[0.5 0.08 0.13 0.1], ...
+    'String','Sample', ...
+    'Callback','demprior replot');
+  
+  % The CLOSE button
+  uicontrol(fig, ...
+    'Style','push', ...
+    'Units','normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position',[0.82 0.08 0.13 0.1], ...
+    'String','Close', ...
+    'Callback','close(gcf)');
+  
+  % The HELP button
+  uicontrol(fig, ...
+    'Style','push', ...
+    'Units','normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position',[0.66 0.08 0.13 0.1], ...
+    'String','Help', ...
+    'Callback','demprior help');
+  
+   % Save handles to objects
+  
+  hndlList=[fig aw1slide ab1slide aw2slide ab2slide aw1val ab1val aw2val ...
+      ab2val haxes];
+  set(fig, 'UserData', hndlList);
+  
+  demprior('replot')
+  
+  
+elseif strcmp(action, 'update'),
+  
+  % Update when a slider is moved.
+  
+  hndlList   = get(gcf, 'UserData');
+  aw1slide   = hndlList(2);
+  ab1slide = hndlList(3);
+  aw2slide  = hndlList(4);
+  ab2slide = hndlList(5);
+  aw1val = hndlList(6);
+  ab1val = hndlList(7);
+  aw2val = hndlList(8);
+  ab2val = hndlList(9);
+  haxes = hndlList(10);
+  
+  aw1 = 10^get(aw1slide, 'Value');
+  ab1 = 10^get(ab1slide, 'Value');
+  aw2 = 10^get(aw2slide, 'Value');
+  ab2 = 10^get(ab2slide, 'Value');
+    
+  format = '%8f';
+  set(aw1val, 'String', sprintf(format, aw1));
+  set(ab1val, 'String', sprintf(format, ab1));
+  set(aw2val, 'String', sprintf(format, aw2));
+  set(ab2val, 'String', sprintf(format, ab2));
+  
+  demprior('replot');
+  
+elseif strcmp(action, 'newval'),
+  
+  % Update when text is changed.
+  
+  hndlList   = get(gcf, 'UserData');
+  aw1slide   = hndlList(2);
+  ab1slide = hndlList(3);
+  aw2slide  = hndlList(4);
+  ab2slide = hndlList(5);
+  aw1val = hndlList(6);
+  ab1val = hndlList(7);
+  aw2val = hndlList(8);
+  ab2val = hndlList(9);
+  haxes = hndlList(10);
+    
+  aw1 = sscanf(get(aw1val, 'String'), '%f');
+  ab1 = sscanf(get(ab1val, 'String'), '%f');
+  aw2 = sscanf(get(aw2val, 'String'), '%f');
+  ab2 = sscanf(get(ab2val, 'String'), '%f');
+  
+  set(aw1slide, 'Value', log10(aw1));
+  set(ab1slide, 'Value', log10(ab1));
+  set(aw2slide, 'Value', log10(aw2));
+  set(ab2slide, 'Value', log10(ab2));
+  
+  demprior('replot');
+  
+elseif strcmp(action, 'replot'),
+  
+  % Re-sample from the prior and plot graphs.
+ 
+  oldFigNumber=watchon;
+
+  hndlList   = get(gcf, 'UserData');
+  aw1slide   = hndlList(2);
+  ab1slide = hndlList(3);
+  aw2slide  = hndlList(4);
+  ab2slide = hndlList(5);
+  haxes = hndlList(10);
+  
+  aw1 = 10^get(aw1slide, 'Value');
+  ab1 = 10^get(ab1slide, 'Value');
+  aw2 = 10^get(aw2slide, 'Value');
+  ab2 = 10^get(ab2slide, 'Value');
+ 
+  axes(haxes);
+  cla
+  set(gca, ...
+    'Box', 'on', ...
+    'Color', [0 0 0], ...
+    'XColor', [0 0 0], ...
+    'YColor', [0 0 0], ...
+    'FontSize', 14);
+  axis([-1 1 -10 10]);  
+  set(gca,'DefaultLineLineWidth', 2);
+
+  nhidden = 12;
+  prior = mlpprior(1, nhidden, 1, aw1, ab1, aw2, ab2);
+  xvals = -1:0.005:1;
+  nsample = 10;    % Number of samples from prior.
+  hold on
+  plot([-1 0; 1 0], [0 -10; 0 10], 'b--');
+  net = mlp(1, nhidden, 1, 'linear', prior);
+  for i = 1:nsample
+    net = mlpinit(net, prior);
+    yvals = mlpfwd(net, xvals');
+    plot(xvals', yvals, 'y');
+  end
+    
+  watchoff(oldFigNumber);
+ 
+elseif strcmp(action, 'help'),
+  
+  % Provide help to user.
+
+  oldFigNumber=watchon;
+
+  helpfig = figure('Position', [100 100 480 400], ...
+    'Name', 'Help', ...
+    'NumberTitle', 'off', ...
+    'Color', [0.8 0.8 0.8], ...
+    'Visible','on');
+  
+    % The HELP TITLE BAR frame
+  uicontrol(helpfig,  ...
+    'Style','frame', ...
+    'Units','normalized', ...
+    'HorizontalAlignment', 'center', ...
+    'Position', [0.05 0.82 0.9 0.1], ...
+    'BackgroundColor',[0.60 0.60 0.60]);
+  
+  % The HELP TITLE BAR text
+  uicontrol(helpfig, ...
+    'Style', 'text', ...
+    'Units', 'normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position', [0.26 0.85 0.6 0.05], ...
+    'HorizontalAlignment', 'left', ...
+    'String', 'Help: Sampling from a Gaussian Prior');
+  
+  helpstr1 = strcat( ...
+    'This demonstration shows the effects of sampling from a Gaussian', ...
+     ' prior over weights for a two-layer feed-forward network. The', ...
+     ' parameters aw1, ab1, aw2 and ab2 control the inverse variances of', ...
+     ' the first-layer weights, the hidden unit biases, the second-layer', ...
+     ' weights and the output unit biases respectively. Their values can', ...
+     ' be adjusted on a logarithmic scale using the sliders, or by', ...
+     ' typing values into the text boxes and pressing the return key.', ...
+     '  After setting these values, press the ''Sample'' button to see a', ...
+     ' new sample from the prior. ');
+   helpstr2 = strcat( ...
+     'Observe how aw1 controls the horizontal length-scale of the', ...
+     ' variation in the functions, ab1 controls the input range over', ...
+     ' such variations occur, aw2 sets the vertical scale of the output', ...
+     ' and ab2 sets the vertical off-set of the output. The network has', ...
+     ' 12 hidden units. ');
+   hstr(1) = {helpstr1};
+   hstr(2) = {''};
+   hstr(3) = {helpstr2};
+
+  % The HELP text
+  helpui = uicontrol(helpfig, ...
+    'Style', 'edit', ...
+    'Units', 'normalized', ...
+    'ForegroundColor', [0 0 0], ...
+    'HorizontalAlignment', 'left', ...
+    'BackgroundColor', [1 1 1], ...
+    'Min', 0, ...
+    'Max', 2, ...
+    'Position', [0.05 0.2 0.9 0.8]);
+   
+   [hstrw , newpos] = textwrap(helpui, hstr, 70);
+   set(helpui, 'String', hstrw, 'Position', [0.05, 0.2, 0.9, newpos(4)]);
+   
+   
+  % The CLOSE button
+  uicontrol(helpfig, ...
+    'Style','push', ...
+    'Units','normalized', ...
+    'BackgroundColor', [0.6 0.6 0.6], ...
+    'Position',[0.4 0.05 0.2 0.1], ...
+    'String','Close', ...
+    'Callback','close(gcf)');
+
+   watchoff(oldFigNumber);
+
+end;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demrbf1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,138 @@
+%DEMRBF1 Demonstrate simple regression using a radial basis function network.
+%
+%	Description
+%	The problem consists of one input variable X and one target variable
+%	T with data generated by sampling X at equal intervals and then
+%	generating target data by computing SIN(2*PI*X) and adding Gaussian
+%	noise. This data is the same as that used in demmlp1.
+%
+%	Three different RBF networks (with different activation functions)
+%	are trained in two stages. First, a Gaussian mixture model is trained
+%	using the EM algorithm, and the centres of this model are used to set
+%	the centres of the RBF.  Second, the output weights (and biases) are
+%	determined using the pseudo-inverse of the design matrix.
+%
+%	See also
+%	DEMMLP1, RBF, RBFFWD, GMM, GMMEM
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+% Generate the matrix of inputs x and targets t.
+randn('state', 42);
+rand('state', 42);
+ndata = 20;			% Number of data points.
+noise = 0.2;			% Standard deviation of noise distribution.
+x = (linspace(0, 1, ndata))';
+t = sin(2*pi*x) + noise*randn(ndata, 1);
+mu = mean(x);
+sigma = std(x);
+tr_in = (x - mu)./(sigma);
+
+clc
+disp('This demonstration illustrates the use of a Radial Basis Function')
+disp('network for regression problems.  The data is generated from a noisy')
+disp('sine function.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Set up network parameters.
+nin = 1;			% Number of inputs.
+nhidden = 7;			% Number of hidden units.
+nout = 1;			% Number of outputs.
+
+clc
+disp('We assess the effect of three different activation functions.')
+disp('First we create a network with Gaussian activations.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Create and initialize network weight and parameter vectors.
+net = rbf(nin, nhidden, nout, 'gaussian');
+
+disp('A two-stage training algorithm is used: it uses a small number of')
+disp('iterations of EM to position the centres, and then the pseudo-inverse')
+disp('of the design matrix to find the second layer weights.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+disp('Error values from EM training.')
+% Use fast training method
+options = foptions;
+options(1) = 1;		% Display EM training
+options(14) = 10;	% number of iterations of EM
+net = rbftrain(net, options, tr_in, t);
+
+disp(' ')
+disp('Press any key to continue.')
+pause
+clc
+disp('The second RBF network has thin plate spline activations.')
+disp('The same centres are used again, so we just need to calculate')
+disp('the second layer weights.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Create a second RBF with thin plate spline functions
+net2 = rbf(nin, nhidden, nout, 'tps');
+
+% Re-use previous centres rather than calling rbftrain again
+net2.c = net.c;
+[y, act2] = rbffwd(net2, tr_in);
+
+% Solve for new output weights and biases from RBF activations
+temp = pinv([act2 ones(ndata, 1)]) * t;
+net2.w2 = temp(1:nhidden, :);
+net2.b2 = temp(nhidden+1, :);
+
+disp('The third RBF network has r^4 log r activations.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Create a third RBF with r^4 log r functions
+net3 = rbf(nin, nhidden, nout, 'r4logr');
+
+% Overwrite weight vector with parameters from first RBF
+net3.c = net.c;
+[y, act3] = rbffwd(net3, tr_in);
+temp = pinv([act3 ones(ndata, 1)]) * t;
+net3.w2 = temp(1:nhidden, :);
+net3.b2 = temp(nhidden+1, :);
+
+disp('Now we plot the data, underlying function, and network outputs')
+disp('on a single graph to compare the results.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+% Plot the data, the original function, and the trained network functions.
+plotvals = [x(1):0.01:x(end)]';
+inputvals = (plotvals-mu)./sigma;
+y = rbffwd(net, inputvals);
+y2 = rbffwd(net2, inputvals);
+y3 = rbffwd(net3, inputvals);
+fh1 = figure;
+
+plot(x, t, 'ob')
+hold on
+xlabel('Input')
+ylabel('Target')
+axis([x(1) x(end) -1.5 1.5])
+[fx, fy] = fplot('sin(2*pi*x)', [x(1) x(end)]);
+plot(fx, fy, '-r', 'LineWidth', 2)
+plot(plotvals, y, '--g', 'LineWidth', 2)
+plot(plotvals, y2, 'k--', 'LineWidth', 2)
+plot(plotvals, y3, '-.c', 'LineWidth', 2)
+legend('data', 'function', 'Gaussian RBF', 'Thin plate spline RBF', ...
+  'r^4 log r RBF');
+hold off
+
+disp('RBF training errors are');
+disp(['Gaussian ', num2str(rbferr(net, tr_in, t)), ' TPS ',  ...
+num2str(rbferr(net2, tr_in, t)), ' R4logr ', num2str(rbferr(net3, tr_in, t))]);
+
+disp(' ')
+disp('Press any key to end.')
+pause
+close(fh1);
+clear all;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demsom1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,113 @@
+%DEMSOM1 Demonstrate SOM for visualisation.
+%
+%	Description
+%	 This script demonstrates the use of a SOM with  a two-dimensional
+%	grid to map onto data in  two-dimensional space.  Both on-line and
+%	batch training algorithms are shown.
+%
+%	See also
+%	SOM, SOMPAK, SOMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+randn('state', 42);
+rand('state', 42);
+nin = 2; 
+ndata = 300;
+% Give data an offset so that network has something to learn.
+x = rand(ndata, nin) + ones(ndata, 1)*[1.5 1.5];
+
+clc;
+disp('This demonstration of the SOM, or Kohonen network, shows how the')
+disp('network units after training lie in regions of high data density.')
+disp('First we show the data, which is generated uniformly from a square.')
+disp('Red crosses denote the data and black dots are the initial locations')
+disp('of the SOM units.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+net = som(nin, [8, 7]);
+c1 = sompak(net);
+h1 = figure;
+plot(x(:, 1), x(:, 2), 'r+');
+hold on
+plot(c1(:,1), c1(:, 2), 'k.');
+drawnow;  % Force figure to be drawn before training starts
+options = foptions;
+
+% Ordering phase
+options(1) = 1;
+options(14) = 50;
+%options(14) = 5; % Just for testing
+options(18) = 0.9;  % Initial learning rate
+options(16) = 0.05; % Final learning rate
+options(17) = 8;    % Initial neighbourhood size
+options(15) = 1;    % Final neighbourhood size
+
+disp('The SOM network is trained in two phases using an on-line algorithm.')
+disp('Initially the neighbourhood is set to 8 and is then reduced')
+disp('linearly to 1 over the first 50 iterations.')
+disp('Each iteration consists of a pass through the complete')
+disp('dataset, while the weights are adjusted after each pattern.')
+disp('The learning rate is reduced linearly from 0.9 to 0.05.')
+disp('This ordering phase puts the units in a rough grid shape.')
+disp('Blue circles denote the units at the end of this phase.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+net2 = somtrain(net, options, x);
+c2 = sompak(net2);
+plot(c2(:, 1), c2(:, 2), 'bo');
+drawnow;
+
+% Convergence phase
+options(1) = 1;
+options(14) = 400;
+options(18) = 0.05;
+options(16) = 0.01;
+options(17) = 0;
+options(15) = 0;
+
+disp('The second, convergence, phase of learning just updates the winning node.')
+disp('The learning rate is reduced from 0.05 to 0.01 over 400 iterations.')
+disp('Note how the error value does not decrease monotonically; it is')
+disp('difficult to decide when training is complete in a principled way.')
+disp('The units are plotted as green stars.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+net3 = somtrain(net2, options, x);
+c3 = sompak(net3);
+plot(c3(:, 1), c3(:, 2), 'g*');
+drawnow;
+
+% Now try batch training
+options(1) = 1;
+options(6) = 1;
+options(14) = 50;
+options(17) = 3;
+options(15) = 0;
+disp('An alternative approach to the on-line algorithm is a batch update')
+disp('rule.  Each unit is updated to be the average weights')
+disp('in a neighbourhood (which reduces from 3 to 0) over 50 iterations.');
+disp('Note how the error is even more unstable at first, though eventually')
+disp('it does converge.')
+disp('The final units are shown as black triangles.')
+disp(' ')
+disp('Press any key to continue.')
+pause
+net4 = somtrain(net, options, x);
+c4 = sompak(net4);
+plot(c4(:, 1), c4(:, 2), 'k^')
+legend('Data', 'Initial weights', 'Weights after ordering', ...
+    'Weights after convergence', 'Batch weights', 2);
+drawnow;
+
+disp(' ')
+disp('Press any key to end.')
+disp(' ')
+pause
+
+close(h1);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demtrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,362 @@
+function demtrain(action);
+%DEMTRAIN Demonstrate training of MLP network.
+%
+%	Description
+%	DEMTRAIN brings up a simple GUI to show the training of an MLP
+%	network on classification and regression problems.  The user should
+%	load in a dataset (which should be in Netlab format: see  DATREAD),
+%	select the output activation function, the  number of cycles and
+%	hidden units and then train the network. The scaled conjugate
+%	gradient algorithm is used. A graph shows the evolution of the error:
+%	the value is shown  MAX(CEIL(ITERATIONS / 50), 5) cycles.
+%
+%	Once the network is trained, it is saved to the file MLPTRAIN.NET.
+%	The results can then be viewed as a confusion matrix (for
+%	classification problems) or a plot of output versus target (for
+%	regression problems).
+%
+%	See also
+%	CONFMAT, DATREAD, MLP, NETOPT, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% If run without parameters, initialise gui.
+if nargin<1,
+  action='initialise';
+end;
+
+% Global variable to reference GUI figure
+global DEMTRAIN_FIG
+% Global array to reference sub-figures for results plots
+global DEMTRAIN_RES_FIGS
+global NUM_DEMTRAIN_RES_FIGS
+
+if strcmp(action,'initialise'),
+
+  file = '';
+  path = '.';
+  
+  % Create FIGURE
+  fig = figure( ...
+	'Name', 'Netlab Demo', ...
+	'NumberTitle', 'off', ...
+	'Menubar', 'none', ...
+	'Color', [0.7529 0.7529 0.7529], ...
+	'Visible', 'on');
+  % Initialise the globals
+  DEMTRAIN_FIG = fig;
+  DEMTRAIN_RES_FIGS = 0;
+  NUM_DEMTRAIN_RES_FIGS = 0;
+
+  % Create GROUP for buttons
+  uicontrol(fig, ...
+	'Style', 'frame', ...
+	'Units', 'normalized', ...
+	'Position', [0.03 0.08 0.94 0.22], ...
+	'BackgroundColor', [0.5 0.5 0.5]);
+
+  % Create MAIN axis
+  hMain = axes( ...
+	'Units', 'normalized', ...
+	'Position', [0.10 0.5 0.80 0.40], ...
+	'XColor', [0 0 0], ...
+	'YColor', [0 0 0], ...
+	'Visible', 'on');
+
+  % Create static text for FILENAME and PATH
+  hFilename = uicontrol(fig, ...
+	'Style', 'text', ...
+	'Units', 'normalized', ...
+	'BackgroundColor', [0.7529 0.7529 0.7529], ...
+	'Position', [0.05 0.32 0.90 0.05], ...
+	'HorizontalAlignment', 'center', ...
+	'String', 'Please load data file.', ...
+	'Visible', 'on');
+  hPath = uicontrol(fig, ...
+	'Style', 'text', ...
+	'Units', 'normalized', ...
+	'BackgroundColor', [0.7529 0.7529 0.7529], ...
+	'Position', [0.05 0.37 0.90 0.05], ...
+	'HorizontalAlignment', 'center', ...
+	'String', '', ...
+	'Visible', 'on');
+
+  % Create NO OF HIDDEN UNITS slider and text
+  hSliderText = uicontrol(fig, ...
+	'Style', 'text', ...
+	'BackgroundColor', [0.5 0.5 0.5], ...
+	'Units', 'normalized', ...
+	'Position', [0.27 0.12 0.17 0.04], ...
+	'HorizontalAlignment', 'right', ...
+	'String', 'Hidden Units: 5');
+  hSlider = uicontrol(fig, ...
+	'Style', 'slider', ...
+	'Units', 'normalized', ...
+	'Position', [0.45 0.12 0.26 0.04], ...
+	'String', 'Slider', ...
+	'Min', 1, 'Max', 25, ...
+	'Value', 5, ...
+	'Callback', 'demtrain slider_moved');
+
+  % Create ITERATIONS slider and text
+  hIterationsText = uicontrol(fig, ...
+	'Style', 'text', ...
+	'BackgroundColor', [0.5 0.5 0.5], ...
+	'Units', 'normalized', ...
+	'Position', [0.27 0.21 0.17 0.04], ...
+	'HorizontalAlignment', 'right', ...
+	'String', 'Iterations: 50');
+  hIterations = uicontrol(fig, ...
+	'Style', 'slider', ...
+	'Units', 'normalized', ...
+	'Position', [0.45 0.21 0.26 0.04], ...
+	'String', 'Slider', ...
+	'Min', 10, 'Max', 500, ...
+	'Value', 50, ...
+	'Callback', 'demtrain iterations_moved');
+
+  % Create ACTIVATION FUNCTION popup and text
+  uicontrol(fig, ...
+	'Style', 'text', ...
+	'BackgroundColor', [0.5 0.5 0.5], ...
+	'Units', 'normalized', ...
+	'Position', [0.05 0.20 0.20 0.04], ...
+	'HorizontalAlignment', 'center', ...
+	'String', 'Activation Function:');
+  hPopup = uicontrol(fig, ...
+	'Style', 'popup', ...
+	'Units', 'normalized', ...
+	'Position' , [0.05 0.10 0.20 0.08], ...
+	'String', 'Linear|Logistic|Softmax', ...
+	'Callback', '');
+
+  % Create MENU
+  hMenu1 = uimenu('Label', 'Load Data file...', 'Callback', '');
+  uimenu(hMenu1, 'Label', 'Select training data file', ...
+	'Callback', 'demtrain get_ip_file');
+  hMenu2 = uimenu('Label', 'Show Results...', 'Callback', '');
+  uimenu(hMenu2, 'Label', 'Show classification results', ...
+	'Callback', 'demtrain classify');
+  uimenu(hMenu2, 'Label', 'Show regression results', ...
+	'Callback', 'demtrain predict');
+  
+  % Create START button
+  hStart = uicontrol(fig, ...
+	'Units', 'normalized', ...
+	'Position' , [0.75 0.2 0.20 0.08], ...
+	'String', 'Start Training', ...
+	'Enable', 'off',...
+	'Callback', 'demtrain start');
+
+  % Create CLOSE button
+  uicontrol(fig, ...
+	'Units', 'normalized', ...
+	'Position' , [0.75 0.1 0.20 0.08], ...
+	'String', 'Close', ...
+	'Callback', 'demtrain close');
+
+  % Save handles of important UI objects
+  hndlList = [hSlider hSliderText hFilename hPath hPopup ...
+      hIterations hIterationsText hStart];
+  set(fig, 'UserData', hndlList);
+  % Hide window from command line
+  set(fig, 'HandleVisibility', 'callback');
+
+  
+elseif strcmp(action, 'slider_moved'),
+
+  % Slider has been moved. 
+  
+  hndlList = get(gcf, 'UserData');
+  hSlider = hndlList(1);
+  hSliderText = hndlList(2);
+
+  val = get(hSlider, 'Value');
+  if rem(val, 1) < 0.5,  % Force up and down arrows to work!
+	val = ceil(val);
+  else
+	val = floor(val);
+  end;
+  set(hSlider, 'Value', val);
+  set(hSliderText, 'String', ['Hidden Units: ' int2str(val)]);
+
+  
+elseif strcmp(action, 'iterations_moved'),
+
+  % Slider has been moved. 
+  
+  hndlList = get(gcf, 'UserData');
+  hSlider = hndlList(6);
+  hSliderText = hndlList(7);
+
+  val = get(hSlider, 'Value');
+  set(hSliderText, 'String', ['Iterations: ' int2str(val)]);
+
+elseif strcmp(action, 'get_ip_file'),
+
+  % Get data file button pressed.
+  
+  hndlList = get(gcf, 'UserData');
+
+  [file, path] = uigetfile('*.dat', 'Get Data File', 50, 50);
+
+  if strcmp(file, '') | file == 0,
+    set(hndlList(3), 'String', 'No data file loaded.');
+    set(hndlList(4), 'String', '');
+  else
+    set(hndlList(3), 'String', file);
+    set(hndlList(4), 'String', path);
+  end;
+  
+  % Enable training button
+  set(hndlList(8), 'Enable', 'on');
+
+  set(gcf, 'UserData', hndlList);
+  
+elseif strcmp(action, 'start'),
+
+  % Start training
+  
+  % Get handles of and values from UI objects
+  hndlList = get(gcf, 'UserData');
+  hSlider = hndlList(1); % 				No of hidden units
+  hIterations = hndlList(6); 
+  iterations = get(hIterations, 'Value');
+  
+  hFilename = hndlList(3);	% 			Data file name
+  filename = get(hFilename, 'String');
+
+  hPath = hndlList(4);	% 				Data file path
+  path = get(hPath, 'String');
+
+  hPopup = hndlList(5);		% 			Activation function
+  if get(hPopup, 'Value') == 1,
+	act_fn = 'linear';
+  elseif get(hPopup, 'Value') == 2,
+	act_fn = 'logistic';
+  else
+	act_fn = 'softmax';
+  end;
+  nhidden = get(hSlider, 'Value');
+
+  % Check data file exists
+  if fopen([path '/' filename]) == -1,
+	errordlg('Training data file has not been selected.', 'Error');
+  else
+	% Load data file
+	[x,t,nin,nout,ndata] = datread([path filename]);
+	
+	% Call MLPTRAIN function repeatedly, while drawing training graph.
+	figure(DEMTRAIN_FIG);
+	hold on;
+	
+	title('Training - please wait.');
+	
+	% Create net and find initial error
+	net = mlp(size(x, 2), nhidden, size(t, 2), act_fn);
+	% Initialise network with inverse variance of 10
+	net = mlpinit(net, 10);
+	error = mlperr(net, x, t);
+	% Work out reporting step: should be sufficiently big to let training
+	% algorithm have a chance
+	step = max(ceil(iterations / 50), 5);
+
+	% Refresh and rescale axis.
+	cla;
+	max = error;
+	min = max/10;
+	set(gca, 'YScale', 'log');
+	ylabel('log Error');
+	xlabel('No. iterations');
+	axis([0 iterations min max+1]);
+	iold = 0;
+	errold = error;
+	% Plot circle to show error of last iteration
+	% Setting erase mode to none prevents screen flashing during 
+	% training
+	plot(0, error, 'ro', 'EraseMode', 'none');
+	hold on
+	drawnow; % Force redraw
+	for i = step-1:step:iterations,
+	  [net, error] = mlptrain(net, x, t, step);
+	  % Plot line from last point to new point.
+	  line([iold i], [errold error], 'Color', 'r', 'EraseMode', 'none');
+	  iold = i;
+	  errold = error;
+	  
+	  % If new point off scale, redraw axes.
+	  if error > max,
+	    max = error;
+	    axis([0 iterations min max+1]);
+	  end;
+	  if error < min
+	    min = error/10;
+	    axis([0 iterations min max+1]);
+	  end
+	  % Plot circle to show error of last iteration
+	  plot(i, error, 'ro', 'EraseMode', 'none');
+	  drawnow; % Force redraw
+	end;
+	save mlptrain.net net
+	zoom on;
+
+	title(['Training complete. Final error=', num2str(error)]);
+	
+  end;
+
+elseif strcmp(action, 'close'),
+  
+  % Close all the figures we have created
+  close(DEMTRAIN_FIG);
+  for n = 1:NUM_DEMTRAIN_RES_FIGS
+    if ishandle(DEMTRAIN_RES_FIGS(n))
+      close(DEMTRAIN_RES_FIGS(n));
+    end
+  end
+
+elseif strcmp(action, 'classify'),
+  
+  if fopen('mlptrain.net') == -1,
+	errordlg('You have not yet trained the network.', 'Error');
+  else
+  
+	hndlList = get(gcf, 'UserData');
+	filename = get(hndlList(3), 'String');
+	path = get(hndlList(4), 'String');
+	[x,t,nin,nout,ndata] = datread([path filename]);
+	load mlptrain.net net -mat
+	y = mlpfwd(net, x);
+	
+	% Save results figure so that it can be closed later
+	NUM_DEMTRAIN_RES_FIGS = NUM_DEMTRAIN_RES_FIGS + 1;
+	DEMTRAIN_RES_FIGS(NUM_DEMTRAIN_RES_FIGS)=conffig(y,t);
+	
+  end;
+
+elseif strcmp(action, 'predict'),
+  
+  if fopen('mlptrain.net') == -1,
+	errordlg('You have not yet trained the network.', 'Error');
+  else
+  
+	hndlList = get(gcf, 'UserData');
+	filename = get(hndlList(3), 'String');
+	path = get(hndlList(4), 'String');
+	[x,t,nin,nout,ndata] = datread([path filename]);
+	load mlptrain.net net -mat
+	y = mlpfwd(net, x);
+	
+	for i = 1:size(y,2),
+	  % Save results figure so that it can be closed later
+	  NUM_DEMTRAIN_RES_FIGS = NUM_DEMTRAIN_RES_FIGS + 1;
+	  DEMTRAIN_RES_FIGS(NUM_DEMTRAIN_RES_FIGS) = figure;
+	  hold on;
+	  title(['Output no ' num2str(i)]);
+	  plot([0 1], [0 1], 'r:');
+	  plot(y(:,i),t(:,i), 'o');
+	  hold off;
+	end;
+  end;
+	
+end;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/dist2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function n2 = dist2(x, c)
+%DIST2	Calculates squared distance between two sets of points.
+%
+%	Description
+%	D = DIST2(X, C) takes two matrices of vectors and calculates the
+%	squared Euclidean distance between them.  Both matrices must be of
+%	the same column dimension.  If X has M rows and N columns, and C has
+%	L rows and N columns, then the result has M rows and L columns.  The
+%	I, Jth entry is the  squared distance from the Ith row of X to the
+%	Jth row of C.
+%
+%	See also
+%	GMMACTIV, KMEANS, RBFFWD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[ndata, dimx] = size(x);
+[ncentres, dimc] = size(c);
+if dimx ~= dimc
+	error('Data dimension does not match dimension of centres')
+end
+
+n2 = (ones(ncentres, 1) * sum((x.^2)', 1))' + ...
+  ones(ndata, 1) * sum((c.^2)',1) - ...
+  2.*(x*(c'));
+
+% Rounding errors occasionally cause negative entries in n2
+if any(any(n2<0))
+  n2(n2<0) = 0;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/eigdec.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+function [evals, evec] = eigdec(x, N)
+%EIGDEC	Sorted eigendecomposition
+%
+%	Description
+%	 EVALS = EIGDEC(X, N computes the largest N eigenvalues of the
+%	matrix X in descending order.  [EVALS, EVEC] = EIGDEC(X, N) also
+%	computes the corresponding eigenvectors.
+%
+%	See also
+%	PCA, PPCA
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if nargout == 1
+   evals_only = logical(1);
+else
+   evals_only = logical(0);
+end
+
+if N ~= round(N) | N < 1 | N > size(x, 2)
+   error('Number of PCs must be integer, >0, < dim');
+end
+
+% Find the eigenvalues of the data covariance matrix
+if evals_only
+   % Use eig function as always more efficient than eigs here
+   temp_evals = eig(x);
+else
+   % Use eig function unless fraction of eigenvalues required is tiny
+   if (N/size(x, 2)) > 0.04
+      [temp_evec, temp_evals] = eig(x);
+   else
+      options.disp = 0;
+      [temp_evec, temp_evals] = eigs(x, N, 'LM', options);
+   end
+   temp_evals = diag(temp_evals);
+end
+
+% Eigenvalues nearly always returned in descending order, but just
+% to make sure.....
+[evals perm] = sort(-temp_evals);
+evals = -evals(1:N);
+if ~evals_only
+   if evals == temp_evals(1:N)
+      % Originals were in order
+      evec = temp_evec(:, 1:N);
+      return
+   else
+      % Need to reorder the eigenvectors
+      for i=1:N
+         evec(:,i) = temp_evec(:,perm(i));
+      end
+   end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/errbayes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function [e, edata, eprior] = errbayes(net, edata)
+%ERRBAYES Evaluate Bayesian error function for network.
+%
+%	Description
+%	E = ERRBAYES(NET, EDATA) takes a network data structure  NET together
+%	the data contribution to the error for a set of inputs and targets.
+%	It returns the regularised error using any zero mean Gaussian priors
+%	on the weights defined in NET.
+%
+%	[E, EDATA, EPRIOR] = ERRBAYES(NET, X, T) additionally returns the
+%	data and prior components of the error.
+%
+%	See also
+%	GLMERR, MLPERR, RBFERR
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Evaluate the data contribution to the error.
+if isfield(net, 'beta')
+  e1 = net.beta*edata;
+else
+  e1 = edata;
+end
+
+% Evaluate the prior contribution to the error.
+if isfield(net, 'alpha')
+   w = netpak(net);
+   if size(net.alpha) == [1 1]
+      eprior = 0.5*(w*w');
+      e2 = eprior*net.alpha;
+   else
+      if (isfield(net, 'mask'))
+         nindx_cols = size(net.index, 2);
+         nmask_rows = size(find(net.mask), 1);
+         index = reshape(net.index(logical(repmat(net.mask, ...
+            1, nindx_cols))), nmask_rows, nindx_cols);
+      else
+         index = net.index;
+      end
+      eprior = 0.5*(w.^2)*index;
+      e2 = eprior*net.alpha;
+   end
+else
+  eprior = 0;
+  e2 = 0;
+end
+
+e = e1 + e2;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/evidence.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,114 @@
+function [net, gamma, logev] = evidence(net, x, t, num)
+%EVIDENCE Re-estimate hyperparameters using evidence approximation.
+%
+%	Description
+%	[NET] = EVIDENCE(NET, X, T) re-estimates the hyperparameters ALPHA
+%	and BETA by applying Bayesian re-estimation formulae for NUM
+%	iterations. The hyperparameter ALPHA can be a simple scalar
+%	associated with an isotropic prior on the weights, or can be a vector
+%	in which each component is associated with a group of weights as
+%	defined by the INDEX matrix in the NET data structure. These more
+%	complex priors can be set up for an MLP using MLPPRIOR. Initial
+%	values for the iterative re-estimation are taken from the network
+%	data structure NET passed as an input argument, while the return
+%	argument NET contains the re-estimated values.
+%
+%	[NET, GAMMA, LOGEV] = EVIDENCE(NET, X, T, NUM) allows the re-
+%	estimation  formula to be applied for NUM cycles in which the re-
+%	estimated values for the hyperparameters from each cycle are used to
+%	re-evaluate the Hessian matrix for the next cycle.  The return value
+%	GAMMA is the number of well-determined parameters and LOGEV is the
+%	log of the evidence.
+%
+%	See also
+%	MLPPRIOR, NETGRAD, NETHESS, DEMEV1, DEMARD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, '', x, t);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+ndata = size(x, 1);
+if nargin == 3
+  num = 1;
+end
+
+% Extract weights from network
+w = netpak(net);
+
+% Evaluate data-dependent contribution to the Hessian matrix.
+[h, dh] = nethess(w, net, x, t); 
+clear h;  % To save memory when Hessian is large
+if (~isfield(net, 'beta'))
+  local_beta = 1;
+end
+
+[evec, evl] = eig(dh);
+% Now set the negative eigenvalues to zero.
+evl = evl.*(evl > 0);
+% safe_evl is used to avoid taking log of zero
+safe_evl = evl + eps.*(evl <= 0);
+
+[e, edata, eprior] = neterr(w, net, x, t);
+
+if size(net.alpha) == [1 1]
+  % Form vector of eigenvalues
+  evl = diag(evl);
+  safe_evl = diag(safe_evl);
+else
+  ngroups = size(net.alpha, 1);
+  gams = zeros(1, ngroups);
+  logas = zeros(1, ngroups);
+  % Reconstruct data hessian with negative eigenvalues set to zero.
+  dh = evec*evl*evec';
+end
+
+% Do the re-estimation. 
+for k = 1 : num
+  % Re-estimate alpha.
+  if size(net.alpha) == [1 1]
+    % Evaluate number of well-determined parameters.
+    L = evl;
+    if isfield(net, 'beta')
+      L = net.beta*L;
+    end
+    gamma = sum(L./(L + net.alpha));
+    net.alpha = 0.5*gamma/eprior;
+    % Partially evaluate log evidence: only include unmasked weights
+    logev = 0.5*length(w)*log(net.alpha);
+  else
+    hinv = inv(hbayes(net, dh));
+    for m = 1 : ngroups
+      group_nweights = sum(net.index(:, m));
+      gams(m) = group_nweights - ...
+	        net.alpha(m)*sum(diag(hinv).*net.index(:,m));
+      net.alpha(m) = real(gams(m)/(2*eprior(m)));
+      % Weight alphas by number of weights in group
+      logas(m) = 0.5*group_nweights*log(net.alpha(m));
+    end 
+    gamma = sum(gams, 2);
+    logev = sum(logas);
+  end
+  % Re-estimate beta.
+  if isfield(net, 'beta')
+      net.beta = 0.5*(net.nout*ndata - gamma)/edata;
+      logev = logev + 0.5*ndata*log(net.beta) - 0.5*ndata*log(2*pi);
+      local_beta = net.beta;
+  end
+  
+  % Evaluate new log evidence
+  e = errbayes(net, edata);
+  if size(net.alpha) == [1 1]
+    logev = logev - e - 0.5*sum(log(local_beta*safe_evl+net.alpha));
+  else
+    for m = 1:ngroups  
+      logev = logev - e - ...
+	  0.5*sum(log(local_beta*(safe_evl*net.index(:, m))+...
+	  net.alpha(m)));
+    end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/fevbayes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function [extra, invhess] = fevbayes(net, y, a, x, t, x_test, invhess)
+%FEVBAYES Evaluate Bayesian regularisation for network forward propagation.
+%
+%	Description
+%	EXTRA = FEVBAYES(NET, Y, A, X, T, X_TEST) takes a network data
+%	structure  NET together with a set of hidden unit activations A from
+%	test inputs X_TEST, training data inputs X and T and outputs a matrix
+%	of extra information EXTRA that consists of error bars (variance) for
+%	a regression problem or moderated outputs for a classification
+%	problem. The optional argument (and return value)  INVHESS is the
+%	inverse of the network Hessian computed on the training data inputs
+%	and targets.  Passing it in avoids recomputing it, which can be a
+%	significant saving for large training sets.
+%
+%	This is called by network-specific functions such as MLPEVFWD which
+%	are needed since the return values (predictions and hidden unit
+%	activations) for different network types are in different orders (for
+%	good reasons).
+%
+%	See also
+%	MLPEVFWD, RBFEVFWD, GLMEVFWD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+w = netpak(net);
+g = netderiv(w, net, x_test);
+if nargin < 7
+  % Need to compute inverse hessian
+  hess = nethess(w, net, x, t);
+  invhess = inv(hess);
+end
+
+ntest = size(x_test, 1);
+var = zeros(ntest, 1);
+for idx = 1:1:net.nout,
+  for n = 1:1:ntest,
+    grad = squeeze(g(n,:,idx));
+    var(n,idx) = grad*invhess*grad';  
+  end
+end
+
+switch net.outfn
+    case 'linear'
+	% extra is variance
+	extra = ones(size(var))./net.beta + var;
+    case 'logistic'
+	% extra is moderated output
+	kappa = 1./(sqrt(ones(size(var)) + (pi.*var)./8));
+	extra = 1./(1 + exp(-kappa.*a));
+    case 'softmax'
+	% Use extended Mackay formula; beware that this may not
+	% be very accurate
+	kappa = 1./(sqrt(ones(size(var)) + (pi.*var)./8));
+	temp = exp(kappa.*a);
+	extra = temp./(sum(temp, 2)*ones(1, net.nout));
+    otherwise
+	error(['Unknown activation function ', net.outfn]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gauss.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+function y = gauss(mu, covar, x)
+%GAUSS	Evaluate a Gaussian distribution.
+%
+%	Description
+%
+%	Y = GAUSS(MU, COVAR, X) evaluates a multi-variate Gaussian  density
+%	in D-dimensions at a set of points given by the rows of the matrix X.
+%	The Gaussian density has mean vector MU and covariance matrix COVAR.
+%
+%	See also
+%	GSAMP, DEMGAUSS
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[n, d] = size(x);
+
+[j, k] = size(covar);
+
+% Check that the covariance matrix is the correct dimension
+if ((j ~= d) | (k ~=d))
+  error('Dimension of the covariance matrix and data should match');
+end
+   
+invcov = inv(covar);
+mu = reshape(mu, 1, d);    % Ensure that mu is a row vector
+
+x = x - ones(n, 1)*mu;
+fact = sum(((x*invcov).*x), 2);
+
+y = exp(-0.5*fact);
+
+y = y./sqrt((2*pi)^d*det(covar));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gbayes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,56 @@
+function [g, gdata, gprior] = gbayes(net, gdata)
+%GBAYES	Evaluate gradient of Bayesian error function for network.
+%
+%	Description
+%	G = GBAYES(NET, GDATA) takes a network data structure NET together
+%	the data contribution to the error gradient for a set of inputs and
+%	targets. It returns the regularised error gradient using any zero
+%	mean Gaussian priors on the weights defined in NET.  In addition, if
+%	a MASK is defined in NET, then the entries in G that correspond to
+%	weights with a 0 in the mask are removed.
+%
+%	[G, GDATA, GPRIOR] = GBAYES(NET, GDATA) additionally returns the data
+%	and prior components of the error.
+%
+%	See also
+%	ERRBAYES, GLMGRAD, MLPGRAD, RBFGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Evaluate the data contribution to the gradient.
+if (isfield(net, 'mask'))
+   gdata = gdata(logical(net.mask));
+end
+if isfield(net, 'beta')
+  g1 = gdata*net.beta;
+else
+  g1 = gdata;
+end
+
+% Evaluate the prior contribution to the gradient.
+if isfield(net, 'alpha')
+   w = netpak(net);
+   if size(net.alpha) == [1 1]
+      gprior = w;
+      g2 = net.alpha*gprior;
+   else
+      if (isfield(net, 'mask'))
+         nindx_cols = size(net.index, 2);
+         nmask_rows = size(find(net.mask), 1);
+         index = reshape(net.index(logical(repmat(net.mask, ...
+            1, nindx_cols))), nmask_rows, nindx_cols);
+      else
+         index = net.index;
+      end
+      
+      ngroups = size(net.alpha, 1);
+      gprior = index'.*(ones(ngroups, 1)*w);
+      g2 = net.alpha'*gprior;
+   end
+else
+  gprior = 0;
+  g2 = 0;
+end
+
+g = g1 + g2;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/glm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,82 @@
+function net = glm(nin, nout, outfunc, prior, beta)
+%GLM	Create a generalized linear model.
+%
+%	Description
+%
+%	NET = GLM(NIN, NOUT, FUNC) takes the number of inputs and outputs for
+%	a generalized linear model, together with a string FUNC which
+%	specifies the output unit activation function, and returns a data
+%	structure NET. The weights are drawn from a zero mean, isotropic
+%	Gaussian, with variance scaled by the fan-in of the output units.
+%	This makes use of the Matlab function RANDN and so the seed for the
+%	random weight initialization can be  set using RANDN('STATE', S)
+%	where S is the seed value. The optional argument ALPHA sets the
+%	inverse variance for the weight initialization.
+%
+%	The fields in NET are
+%	  type = 'glm'
+%	  nin = number of inputs
+%	  nout = number of outputs
+%	  nwts = total number of weights and biases
+%	  actfn = string describing the output unit activation function:
+%	      'linear'
+%	      'logistic'
+%	      'softmax'
+%	  w1 = first-layer weight matrix
+%	  b1 = first-layer bias vector
+%
+%	NET = GLM(NIN, NOUT, FUNC, PRIOR), in which PRIOR is a scalar, allows
+%	the field  NET.ALPHA in the data structure NET to be set,
+%	corresponding  to a zero-mean isotropic Gaussian prior with inverse
+%	variance with value PRIOR. Alternatively, PRIOR can consist of a data
+%	structure with fields ALPHA and INDEX, allowing individual Gaussian
+%	priors to be set over groups of weights in the network. Here ALPHA is
+%	a column vector in which each element corresponds to a  separate
+%	group of weights, which need not be mutually exclusive.  The
+%	membership of the groups is defined by the matrix INDEX in which the
+%	columns correspond to the elements of ALPHA. Each column has one
+%	element for each weight in the matrix, in the order defined by the
+%	function GLMPAK, and each element is 1 or 0 according to whether the
+%	weight is a member of the corresponding group or not.
+%
+%	NET = GLM(NIN, NOUT, FUNC, PRIOR, BETA) also sets the  additional
+%	field NET.BETA in the data structure NET, where beta corresponds to
+%	the inverse noise variance.
+%
+%	See also
+%	GLMPAK, GLMUNPAK, GLMFWD, GLMERR, GLMGRAD, GLMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+net.type = 'glm';
+net.nin = nin;
+net.nout = nout;
+net.nwts = (nin + 1)*nout;
+
+outtfns = {'linear', 'logistic', 'softmax'};
+
+if sum(strcmp(outfunc, outtfns)) == 0
+  error('Undefined activation function. Exiting.');
+else
+  net.outfn = outfunc;
+end
+
+if nargin > 3
+  if isstruct(prior)
+    net.alpha = prior.alpha;
+    net.index = prior.index;
+  elseif size(prior) == [1 1]
+    net.alpha = prior;
+  else
+    error('prior must be a scalar or structure');
+  end
+end
+  
+net.w1 = randn(nin, nout)/sqrt(nin + 1);
+net.b1 = randn(1, nout)/sqrt(nin + 1);
+
+if nargin == 5
+  net.beta = beta;
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/glmderiv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function g = glmderiv(net, x)
+%GLMDERIV Evaluate derivatives of GLM outputs with respect to weights.
+%
+%	Description
+%	G = GLMDERIV(NET, X) takes a network data structure NET and a matrix
+%	of input vectors X and returns a three-index matrix mat{g} whose  I,
+%	J, K element contains the derivative of network output K with respect
+%	to weight or bias parameter J for input pattern I. The ordering of
+%	the weight and bias parameters is defined by GLMUNPAK.
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'glm', x);
+if ~isempty(errstring)
+    error(errstring);
+end
+
+ndata = size(x, 1);
+if isfield(net, 'mask')
+  nwts = size(find(net.mask), 1);
+  mask_array = logical(net.mask)*ones(1, net.nout);
+else
+  nwts = net.nwts;
+end
+g = zeros(ndata, nwts, net.nout);
+
+temp = zeros(net.nwts, net.nout);
+for n = 1:ndata
+    % Weight matrix w1
+    temp(1:(net.nin*net.nout), :) = kron(eye(net.nout), (x(n, :))');
+    % Bias term b1
+    temp(net.nin*net.nout+1:end, :) = eye(net.nout);
+    if isfield(net, 'mask')
+	g(n, :, :) = reshape(temp(find(mask_array)), nwts, net.nout);
+    else
+	g(n, :, :) = temp;
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/glmerr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function [e, edata, eprior, y, a] = glmerr(net, x, t)
+%GLMERR	Evaluate error function for generalized linear model.
+%
+%	Description
+%	 E = GLMERR(NET, X, T) takes a generalized linear model data
+%	structure NET together with a matrix X of input vectors and a matrix
+%	T of target vectors, and evaluates the error function E. The choice
+%	of error function corresponds to the output unit activation function.
+%	Each row of X corresponds to one input vector and each row of T
+%	corresponds to one target vector.
+%
+%	[E, EDATA, EPRIOR, Y, A] = GLMERR(NET, X, T) also returns the data
+%	and prior components of the total error.
+%
+%	[E, EDATA, EPRIOR, Y, A] = GLMERR(NET, X) also returns a matrix Y
+%	giving the outputs of the models and a matrix A  giving the summed
+%	inputs to each output unit, where each row corresponds to one
+%	pattern.
+%
+%	See also
+%	GLM, GLMPAK, GLMUNPAK, GLMFWD, GLMGRAD, GLMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'glm', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+[y, a] = glmfwd(net, x);
+
+switch net.outfn
+
+  case 'linear'  	% Linear outputs
+    edata = 0.5*sum(sum((y - t).^2));
+
+  case 'logistic'  	% Logistic outputs
+    edata = - sum(sum(t.*log(y) + (1 - t).*log(1 - y)));
+
+  case 'softmax'   	% Softmax outputs
+    edata = - sum(sum(t.*log(y)));
+
+  otherwise
+    error(['Unknown activation function ', net.outfn]);
+end
+
+[e, edata, eprior] = errbayes(net, edata);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/glmevfwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function [y, extra, invhess] = glmevfwd(net, x, t, x_test, invhess)
+%GLMEVFWD Forward propagation with evidence for GLM
+%
+%	Description
+%	Y = GLMEVFWD(NET, X, T, X_TEST) takes a network data structure  NET
+%	together with the input X and target T training data and input test
+%	data X_TEST. It returns the normal forward propagation through the
+%	network Y together with a matrix EXTRA which consists of error bars
+%	(variance) for a regression problem or moderated outputs for a
+%	classification problem.
+%
+%	The optional argument (and return value)  INVHESS is the inverse of
+%	the network Hessian computed on the training data inputs and targets.
+%	Passing it in avoids recomputing it, which can be a significant
+%	saving for large training sets.
+%
+%	See also
+%	FEVBAYES
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[y, a] = glmfwd(net, x_test);
+if nargin == 4
+  [extra, invhess] = fevbayes(net, y, a, x, t, x_test);
+else
+  [extra, invhess] = fevbayes(net, y, a, x, t, x_test, invhess);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/glmfwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+function [y, a] = glmfwd(net, x)
+%GLMFWD	Forward propagation through generalized linear model.
+%
+%	Description
+%	Y = GLMFWD(NET, X) takes a generalized linear model data structure
+%	NET together with a matrix X of input vectors, and forward propagates
+%	the inputs through the network to generate a matrix Y of output
+%	vectors. Each row of X corresponds to one input vector and each row
+%	of Y corresponds to one output vector.
+%
+%	[Y, A] = GLMFWD(NET, X) also returns a matrix A  giving the summed
+%	inputs to each output unit, where each row corresponds to one
+%	pattern.
+%
+%	See also
+%	GLM, GLMPAK, GLMUNPAK, GLMERR, GLMGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'glm', x);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+ndata = size(x, 1);
+
+a = x*net.w1 + ones(ndata, 1)*net.b1;
+
+switch net.outfn
+
+  case 'linear'     % Linear outputs
+    y = a;
+
+  case 'logistic'   % Logistic outputs
+    % Prevent overflow and underflow: use same bounds as glmerr
+    % Ensure that log(1-y) is computable: need exp(a) > eps
+    maxcut = -log(eps);
+    % Ensure that log(y) is computable
+    mincut = -log(1/realmin - 1);
+    a = min(a, maxcut);
+    a = max(a, mincut);
+    y = 1./(1 + exp(-a));
+
+  case 'softmax'   	% Softmax outputs
+    nout = size(a,2);
+    % Prevent overflow and underflow: use same bounds as glmerr
+    % Ensure that sum(exp(a), 2) does not overflow
+    maxcut = log(realmax) - log(nout);
+    % Ensure that exp(a) > 0
+    mincut = log(realmin);
+    a = min(a, maxcut);
+    a = max(a, mincut);
+    temp = exp(a);
+    y = temp./(sum(temp, 2)*ones(1,nout));
+    % Ensure that log(y) is computable
+    y(y<realmin) = realmin;
+
+  otherwise
+    error(['Unknown activation function ', net.outfn]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/glmgrad.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function [g, gdata, gprior] = glmgrad(net, x, t)
+%GLMGRAD Evaluate gradient of error function for generalized linear model.
+%
+%	Description
+%	G = GLMGRAD(NET, X, T) takes a generalized linear model data
+%	structure NET  together with a matrix X of input vectors and a matrix
+%	T of target vectors, and evaluates the gradient G of the error
+%	function with respect to the network weights. The error function
+%	corresponds to the choice of output unit activation function. Each
+%	row of X corresponds to one input vector and each row of T
+%	corresponds to one target vector.
+%
+%	[G, GDATA, GPRIOR] = GLMGRAD(NET, X, T) also returns separately  the
+%	data and prior contributions to the gradient.
+%
+%	See also
+%	GLM, GLMPAK, GLMUNPAK, GLMFWD, GLMERR, GLMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'glm', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+y = glmfwd(net, x);
+delout = y - t;
+
+gw1 = x'*delout;
+gb1 = sum(delout, 1);
+
+gdata = [gw1(:)', gb1];
+
+[g, gdata, gprior] = gbayes(net, gdata);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/glmhess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,106 @@
+function [h, hdata] = glmhess(net, x, t, hdata)
+%GLMHESS Evaluate the Hessian matrix for a generalised linear model.
+%
+%	Description
+%	H = GLMHESS(NET, X, T) takes a GLM network data structure NET,   a
+%	matrix X of input values, and a matrix T of target values and returns
+%	the full Hessian matrix H corresponding to the second derivatives of
+%	the negative log posterior distribution, evaluated for the current
+%	weight and bias values as defined by NET. Note that the target data
+%	is not required in the calculation, but is included to make the
+%	interface uniform with NETHESS.  For linear and logistic outputs, the
+%	computation is very simple and is  done (in effect) in one line in
+%	GLMTRAIN.
+%
+%	[H, HDATA] = GLMHESS(NET, X, T) returns both the Hessian matrix H and
+%	the contribution HDATA arising from the data dependent term in the
+%	Hessian.
+%
+%	H = GLMHESS(NET, X, T, HDATA) takes a network data structure NET, a
+%	matrix X of input values, and a matrix T of  target values, together
+%	with the contribution HDATA arising from the data dependent term in
+%	the Hessian, and returns the full Hessian matrix H corresponding to
+%	the second derivatives of the negative log posterior distribution.
+%	This version saves computation time if HDATA has already been
+%	evaluated for the current weight and bias values.
+%
+%	See also
+%	GLM, GLMTRAIN, HESSCHEK, NETHESS
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'glm', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+ndata = size(x, 1);
+nparams = net.nwts;
+nout = net.nout;
+p = glmfwd(net, x);
+inputs = [x ones(ndata, 1)];
+
+if nargin == 3
+   hdata = zeros(nparams);	% Full Hessian matrix
+   % Calculate data component of Hessian
+   switch net.outfn
+
+   case 'linear'
+      % No weighting function here
+      out_hess = [x ones(ndata, 1)]'*[x ones(ndata, 1)];
+      for j = 1:nout
+         hdata = rearrange_hess(net, j, out_hess, hdata);
+      end
+   case 'logistic'
+      % Each output is independent
+      e = ones(1, net.nin+1);
+      link_deriv = p.*(1-p);
+      out_hess = zeros(net.nin+1);
+      for j = 1:nout
+         inputs = [x ones(ndata, 1)].*(sqrt(link_deriv(:,j))*e);
+         out_hess = inputs'*inputs;   % Hessian for this output
+         hdata = rearrange_hess(net, j, out_hess, hdata);
+      end
+      
+   case 'softmax'
+      bb_start = nparams - nout + 1;	% Start of bias weights block
+      ex_hess = zeros(nparams);	% Contribution to Hessian from single example
+      for m = 1:ndata
+         X = x(m,:)'*x(m,:);
+         a = diag(p(m,:))-((p(m,:)')*p(m,:));
+         ex_hess(1:nparams-nout,1:nparams-nout) = kron(a, X);
+         ex_hess(bb_start:nparams, bb_start:nparams) = a.*ones(net.nout, net.nout);
+         temp = kron(a, x(m,:));
+         ex_hess(bb_start:nparams, 1:nparams-nout) = temp;
+         ex_hess(1:nparams-nout, bb_start:nparams) = temp';
+         hdata = hdata + ex_hess;
+      end
+    otherwise
+      error(['Unknown activation function ', net.outfn]);
+    end
+end
+
+[h, hdata] = hbayes(net, hdata);
+
+function hdata = rearrange_hess(net, j, out_hess, hdata)
+
+% Because all the biases come after all the input weights,
+% we have to rearrange the blocks that make up the network Hessian.
+% This function assumes that we are on the jth output and that all outputs
+% are independent.
+
+bb_start = net.nwts - net.nout + 1;	% Start of bias weights block
+ob_start = 1+(j-1)*net.nin; 	% Start of weight block for jth output
+ob_end = j*net.nin;         	% End of weight block for jth output
+b_index = bb_start+(j-1);   	% Index of bias weight
+% Put input weight block in right place
+hdata(ob_start:ob_end, ob_start:ob_end) = out_hess(1:net.nin, 1:net.nin);
+% Put second derivative of bias weight in right place
+hdata(b_index, b_index) = out_hess(net.nin+1, net.nin+1);
+% Put cross terms (input weight v bias weight) in right place
+hdata(b_index, ob_start:ob_end) = out_hess(net.nin+1,1:net.nin);
+hdata(ob_start:ob_end, b_index) = out_hess(1:net.nin, net.nin+1);
+
+return 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/glminit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function net = glminit(net, prior)
+%GLMINIT Initialise the weights in a generalized linear model.
+%
+%	Description
+%
+%	NET = GLMINIT(NET, PRIOR) takes a generalized linear model NET and
+%	sets the weights and biases by sampling from a Gaussian distribution.
+%	If PRIOR is a scalar, then all of the parameters (weights and biases)
+%	are sampled from a single isotropic Gaussian with inverse variance
+%	equal to PRIOR. If PRIOR is a data structure similar to that in
+%	MLPPRIOR but for a single layer of weights, then the parameters are
+%	sampled from multiple Gaussians according to their groupings (defined
+%	by the INDEX field) with corresponding variances (defined by the
+%	ALPHA field).
+%
+%	See also
+%	GLM, GLMPAK, GLMUNPAK, MLPINIT, MLPPRIOR
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'glm');
+if ~isempty(errstring);
+  error(errstring);
+end
+if isstruct(prior)
+  sig = 1./sqrt(prior.index*prior.alpha);
+  w = sig'.*randn(1, net.nwts); 
+elseif size(prior) == [1 1]
+  w = randn(1, net.nwts).*sqrt(1/prior);
+else
+  error('prior must be a scalar or a structure');
+end  
+
+net = glmunpak(net, w);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/glmpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function w = glmpak(net)
+%GLMPAK	Combines weights and biases into one weights vector.
+%
+%	Description
+%	W = GLMPAK(NET) takes a network data structure NET and  combines them
+%	into a single row vector W.
+%
+%	See also
+%	GLM, GLMUNPAK, GLMFWD, GLMERR, GLMGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'glm');
+if ~errstring
+  error(errstring);
+end
+
+w = [net.w1(:)', net.b1];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/glmtrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,206 @@
+function [net, options] = glmtrain(net, options, x, t)
+%GLMTRAIN Specialised training of generalized linear model
+%
+%	Description
+%	NET = GLMTRAIN(NET, OPTIONS, X, T) uses the iterative reweighted
+%	least squares (IRLS) algorithm to set the weights in the generalized
+%	linear model structure NET.  This is a more efficient alternative to
+%	using GLMERR and GLMGRAD and a non-linear optimisation routine
+%	through NETOPT. Note that for linear outputs, a single pass through
+%	the  algorithm is all that is required, since the error function is
+%	quadratic in the weights.  The algorithm also handles scalar ALPHA
+%	and BETA terms.  If you want to use more complicated priors, you
+%	should use general-purpose non-linear optimisation algorithms.
+%
+%	For logistic and softmax outputs, general priors can be handled,
+%	although this requires the pseudo-inverse of the Hessian, giving up
+%	the better conditioning and some of the speed advantage of the normal
+%	form equations.
+%
+%	The error function value at the final set of weights is returned in
+%	OPTIONS(8). Each row of X corresponds to one input vector and each
+%	row of T corresponds to one target vector.
+%
+%	The optional parameters have the following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values during training. If
+%	OPTIONS(1) is set to 0, then only warning messages are displayed.  If
+%	OPTIONS(1) is -1, then nothing is displayed.
+%
+%	OPTIONS(2) is a measure of the precision required for the value of
+%	the weights W at the solution.
+%
+%	OPTIONS(3) is a measure of the precision required of the objective
+%	function at the solution.  Both this and the previous condition must
+%	be satisfied for termination.
+%
+%	OPTIONS(5) is set to 1 if an approximation to the Hessian (which
+%	assumes that all outputs are independent) is used for softmax
+%	outputs. With the default value of 0 the exact Hessian (which is more
+%	expensive to compute) is used.
+%
+%	OPTIONS(14) is the maximum number of iterations for the IRLS
+%	algorithm;  default 100.
+%
+%	See also
+%	GLM, GLMERR, GLMGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'glm', x, t);
+if ~errstring
+  error(errstring);
+end
+
+if(~options(14))
+  options(14) = 100;
+end
+
+display = options(1);
+% Do we need to test for termination?
+test = (options(2) | options(3));
+
+ndata = size(x, 1);
+% Add a column of ones for the bias 
+inputs = [x ones(ndata, 1)];
+
+% Linear outputs are a special case as they can be found in one step
+if strcmp(net.outfn, 'linear')
+  if ~isfield(net, 'alpha')
+    % Solve for the weights and biases using left matrix divide
+    temp = inputs\t;
+  elseif size(net.alpha == [1 1])
+    if isfield(net, 'beta')
+      beta = net.beta;
+    else
+      beta = 1.0;
+    end
+    % Use normal form equation
+    hessian = beta*(inputs'*inputs) + net.alpha*eye(net.nin+1);
+    temp = pinv(hessian)*(beta*(inputs'*t));  
+  else
+    error('Only scalar alpha allowed');
+  end
+  net.w1 = temp(1:net.nin, :);
+  net.b1 = temp(net.nin+1, :);
+  % Store error value in options vector
+  options(8) = glmerr(net, x, t);
+  return;
+end
+
+% Otherwise need to use iterative reweighted least squares
+e = ones(1, net.nin+1);
+for n = 1:options(14)
+
+  switch net.outfn
+    case 'logistic'
+      if n == 1
+        % Initialise model
+        p = (t+0.5)/2;
+	act = log(p./(1-p));
+        wold = glmpak(net);
+      end
+      link_deriv = p.*(1-p);
+      weights = sqrt(link_deriv); % sqrt of weights
+      if (min(min(weights)) < eps)
+        warning('ill-conditioned weights in glmtrain')
+        return
+      end
+      z = act + (t-p)./link_deriv;
+      if ~isfield(net, 'alpha')
+         % Treat each output independently with relevant set of weights
+         for j = 1:net.nout
+	    indep = inputs.*(weights(:,j)*e);
+	    dep = z(:,j).*weights(:,j);
+	    temp = indep\dep;
+	    net.w1(:,j) = temp(1:net.nin);
+	    net.b1(j) = temp(net.nin+1);
+         end
+      else
+	 gradient = glmgrad(net, x, t);
+         Hessian = glmhess(net, x, t);
+         deltaw = -gradient*pinv(Hessian);
+         w = wold + deltaw;
+         net = glmunpak(net, w);
+      end
+      [err, edata, eprior, p, act] = glmerr(net, x, t);
+      if n == 1
+        errold = err;
+        wold = netpak(net);
+      else
+        w = netpak(net);
+      end
+    case 'softmax'
+      if n == 1
+        % Initialise model: ensure that row sum of p is one no matter
+	% how many classes there are
+        p = (t + (1/size(t, 2)))/2;
+	act = log(p./(1-p));
+      end
+      if options(5) == 1 | n == 1
+        link_deriv = p.*(1-p);
+        weights = sqrt(link_deriv); % sqrt of weights
+        if (min(min(weights)) < eps)
+          warning('ill-conditioned weights in glmtrain')
+          return
+        end
+        z = act + (t-p)./link_deriv;
+        % Treat each output independently with relevant set of weights
+        for j = 1:net.nout
+          indep = inputs.*(weights(:,j)*e);
+	  dep = z(:,j).*weights(:,j);
+	  temp = indep\dep;
+	  net.w1(:,j) = temp(1:net.nin);
+	  net.b1(j) = temp(net.nin+1);
+        end
+        [err, edata, eprior, p, act] = glmerr(net, x, t);
+        if n == 1
+          errold = err;
+          wold = netpak(net);
+        else
+          w = netpak(net);
+        end
+      else
+	% Exact method of calculation after w first initialised
+	% Start by working out Hessian
+	Hessian = glmhess(net, x, t);
+	gradient = glmgrad(net, x, t);
+	% Now compute modification to weights
+	deltaw = -gradient*pinv(Hessian);
+	w = wold + deltaw;
+	net = glmunpak(net, w);
+	[err, edata, eprior, p] = glmerr(net, x, t);
+    end
+
+    otherwise
+      error(['Unknown activation function ', net.outfn]);
+   end
+   if options(1)
+     fprintf(1, 'Cycle %4d Error %11.6f\n', n, err)
+   end
+   % Test for termination
+   % Terminate if error increases
+   if err >  errold
+     errold = err;
+     w = wold;
+     options(8) = err;
+     fprintf(1, 'Error has increased: terminating\n')
+     return;
+   end
+   if test & n > 1
+     if (max(abs(w - wold)) < options(2) & abs(err-errold) < options(3))
+       options(8) = err;
+       return;
+     else
+       errold = err;
+       wold = w;
+     end
+   end
+end
+
+options(8) = err;
+if (options(1) >= 0)
+  disp(maxitmess);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/glmunpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function net = glmunpak(net, w)
+%GLMUNPAK Separates weights vector into weight and bias matrices. 
+%
+%	Description
+%	NET = GLMUNPAK(NET, W) takes a glm network data structure NET and  a
+%	weight vector W, and returns a network data structure identical to
+%	the input network, except that the first-layer weight matrix W1 and
+%	the first-layer bias vector B1 have been set to the corresponding
+%	elements of W.
+%
+%	See also
+%	GLM, GLMPAK, GLMFWD, GLMERR, GLMGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'glm');
+if ~errstring
+  error(errstring);
+end
+
+if net.nwts ~= length(w)
+  error('Invalid weight vector length')
+end
+
+nin = net.nin;
+nout = net.nout;
+net.w1 = reshape(w(1:nin*nout), nin, nout);
+net.b1 = reshape(w(nin*nout + 1: (nin + 1)*nout), 1, nout);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,113 @@
+function mix = gmm(dim, ncentres, covar_type, ppca_dim)
+%GMM	Creates a Gaussian mixture model with specified architecture.
+%
+%	Description
+%	 MIX = GMM(DIM, NCENTRES, COVARTYPE) takes the dimension of the space
+%	DIM, the number of centres in the mixture model and the type of the
+%	mixture model, and returns a data structure MIX. The mixture model
+%	type defines the covariance structure of each component  Gaussian:
+%	  'spherical' = single variance parameter for each component: stored as a vector
+%	  'diag' = diagonal matrix for each component: stored as rows of a matrix
+%	  'full' = full matrix for each component: stored as 3d array
+%	  'ppca' = probabilistic PCA: stored as principal components (in a 3d array
+%	    and associated variances and off-subspace noise
+%	 MIX = GMM(DIM, NCENTRES, COVARTYPE, PPCA_DIM) also sets the
+%	dimension of the PPCA sub-spaces: the default value is one.
+%
+%	The priors are initialised to equal values summing to one, and the
+%	covariances are all the identity matrix (or equivalent).  The centres
+%	are initialised randomly from a zero mean unit variance Gaussian.
+%	This makes use of the MATLAB function RANDN and so the seed for the
+%	random weight initialisation can be set using RANDN('STATE', S) where
+%	S is the state value.
+%
+%	The fields in MIX are
+%	  
+%	  type = 'gmm'
+%	  nin = the dimension of the space
+%	  ncentres = number of mixture components
+%	  covartype = string for type of variance model
+%	  priors = mixing coefficients
+%	  centres = means of Gaussians: stored as rows of a matrix
+%	  covars = covariances of Gaussians
+%	 The additional fields for mixtures of PPCA are
+%	  U = principal component subspaces
+%	  lambda = in-space covariances: stored as rows of a matrix
+%	 The off-subspace noise is stored in COVARS.
+%
+%	See also
+%	GMMPAK, GMMUNPAK, GMMSAMP, GMMINIT, GMMEM, GMMACTIV, GMMPOST, 
+%	GMMPROB
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if ncentres < 1
+  error('Number of centres must be greater than zero')
+end
+
+mix.type = 'gmm';
+mix.nin = dim;
+mix.ncentres = ncentres;
+
+vartypes = {'spherical', 'diag', 'full', 'ppca'};
+
+if sum(strcmp(covar_type, vartypes)) == 0
+  error('Undefined covariance type')
+else
+  mix.covar_type = covar_type;
+end
+
+% Make default dimension of PPCA subspaces one.
+if strcmp(covar_type, 'ppca')
+  if nargin < 4
+    ppca_dim = 1;
+  end
+  if ppca_dim > dim
+    error('Dimension of PPCA subspaces must be less than data.')
+  end
+  mix.ppca_dim = ppca_dim;
+end
+
+% Initialise priors to be equal and summing to one
+mix.priors = ones(1,mix.ncentres) ./ mix.ncentres;
+
+% Initialise centres
+mix.centres = randn(mix.ncentres, mix.nin);
+
+% Initialise all the variances to unity
+switch mix.covar_type
+
+case 'spherical'
+  mix.covars = ones(1, mix.ncentres);
+  mix.nwts = mix.ncentres + mix.ncentres*mix.nin + mix.ncentres;
+case 'diag'
+  % Store diagonals of covariance matrices as rows in a matrix
+  mix.covars =  ones(mix.ncentres, mix.nin);
+  mix.nwts = mix.ncentres + mix.ncentres*mix.nin + ...
+    mix.ncentres*mix.nin;
+case 'full'
+  % Store covariance matrices in a row vector of matrices
+  mix.covars = repmat(eye(mix.nin), [1 1 mix.ncentres]);
+  mix.nwts = mix.ncentres + mix.ncentres*mix.nin + ...
+    mix.ncentres*mix.nin*mix.nin;
+case 'ppca'
+  % This is the off-subspace noise: make it smaller than
+  % lambdas
+  mix.covars = 0.1*ones(1, mix.ncentres);
+  % Also set aside storage for principal components and
+  % associated variances
+  init_space = eye(mix.nin);
+  init_space = init_space(:, 1:mix.ppca_dim);
+  init_space(mix.ppca_dim+1:mix.nin, :) = ...
+    ones(mix.nin - mix.ppca_dim, mix.ppca_dim);
+  mix.U = repmat(init_space , [1 1 mix.ncentres]);
+  mix.lambda = ones(mix.ncentres, mix.ppca_dim);
+  % Take account of additional parameters
+  mix.nwts = mix.ncentres + mix.ncentres*mix.nin + ...
+    mix.ncentres + mix.ncentres*mix.ppca_dim + ...
+    mix.ncentres*mix.nin*mix.ppca_dim;
+otherwise
+  error(['Unknown covariance type ', mix.covar_type]);               
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gmmactiv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,77 @@
+function a = gmmactiv(mix, x)
+%GMMACTIV Computes the activations of a Gaussian mixture model.
+%
+%	Description
+%	This function computes the activations A (i.e. the  probability
+%	P(X|J) of the data conditioned on each component density)  for a
+%	Gaussian mixture model.  For the PPCA model, each activation is the
+%	conditional probability of X given that it is generated by the
+%	component subspace. The data structure MIX defines the mixture model,
+%	while the matrix X contains the data vectors.  Each row of X
+%	represents a single vector.
+%
+%	See also
+%	GMM, GMMPOST, GMMPROB
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check that inputs are consistent
+errstring = consist(mix, 'gmm', x);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+ndata = size(x, 1);
+a = zeros(ndata, mix.ncentres);  % Preallocate matrix
+
+switch mix.covar_type
+  
+case 'spherical'
+  % Calculate squared norm matrix, of dimension (ndata, ncentres)
+  n2 = dist2(x, mix.centres);
+  
+  % Calculate width factors
+  wi2 = ones(ndata, 1) * (2 .* mix.covars);
+  normal = (pi .* wi2) .^ (mix.nin/2);
+  
+  % Now compute the activations
+  a = exp(-(n2./wi2))./ normal;
+  
+case 'diag'
+  normal = (2*pi)^(mix.nin/2);
+  s = prod(sqrt(mix.covars), 2);
+  for j = 1:mix.ncentres
+    diffs = x - (ones(ndata, 1) * mix.centres(j, :));
+    a(:, j) = exp(-0.5*sum((diffs.*diffs)./(ones(ndata, 1) * ...
+      mix.covars(j, :)), 2)) ./ (normal*s(j));
+  end
+  
+case 'full'
+  normal = (2*pi)^(mix.nin/2);
+  for j = 1:mix.ncentres
+    diffs = x - (ones(ndata, 1) * mix.centres(j, :));
+    % Use Cholesky decomposition of covariance matrix to speed computation
+    c = chol(mix.covars(:, :, j));
+    temp = diffs/c;
+    a(:, j) = exp(-0.5*sum(temp.*temp, 2))./(normal*prod(diag(c)));
+  end
+case 'ppca'
+  log_normal = mix.nin*log(2*pi);
+  d2 = zeros(ndata, mix.ncentres);
+  logZ = zeros(1, mix.ncentres);
+  for i = 1:mix.ncentres
+    k = 1 - mix.covars(i)./mix.lambda(i, :);
+    logZ(i) = log_normal + mix.nin*log(mix.covars(i)) - ...
+      sum(log(1 - k));
+    diffs = x - ones(ndata, 1)*mix.centres(i, :);
+    proj = diffs*mix.U(:, :, i);
+    d2(:,i) = (sum(diffs.*diffs, 2) - ...
+      sum((proj.*(ones(ndata, 1)*k)).*proj, 2)) / ...
+      mix.covars(i);
+  end
+  a = exp(-0.5*(d2 + ones(ndata, 1)*logZ));
+otherwise
+  error(['Unknown covariance type ', mix.covar_type]);
+end
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gmmem.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,181 @@
+function [mix, options, errlog] = gmmem(mix, x, options)
+%GMMEM	EM algorithm for Gaussian mixture model.
+%
+%	Description
+%	[MIX, OPTIONS, ERRLOG] = GMMEM(MIX, X, OPTIONS) uses the Expectation
+%	Maximization algorithm of Dempster et al. to estimate the parameters
+%	of a Gaussian mixture model defined by a data structure MIX. The
+%	matrix X represents the data whose expectation is maximized, with
+%	each row corresponding to a vector.    The optional parameters have
+%	the following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values; also logs error
+%	values in the return argument ERRLOG. If OPTIONS(1) is set to 0, then
+%	only warning messages are displayed.  If OPTIONS(1) is -1, then
+%	nothing is displayed.
+%
+%	OPTIONS(3) is a measure of the absolute precision required of the
+%	error function at the solution. If the change in log likelihood
+%	between two steps of the EM algorithm is less than this value, then
+%	the function terminates.
+%
+%	OPTIONS(5) is set to 1 if a covariance matrix is reset to its
+%	original value when any of its singular values are too small (less
+%	than MIN_COVAR which has the value eps).   With the default value of
+%	0 no action is taken.
+%
+%	OPTIONS(14) is the maximum number of iterations; default 100.
+%
+%	The optional return value OPTIONS contains the final error value
+%	(i.e. data log likelihood) in OPTIONS(8).
+%
+%	See also
+%	GMM, GMMINIT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check that inputs are consistent
+errstring = consist(mix, 'gmm', x);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+[ndata, xdim] = size(x);
+
+% Sort out the options
+if (options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+
+display = options(1);
+store = 0;
+if (nargout > 2)
+  store = 1;	% Store the error values to return them
+  errlog = zeros(1, niters);
+end
+test = 0;
+if options(3) > 0.0
+  test = 1;	% Test log likelihood for termination
+end
+
+check_covars = 0;
+if options(5) >= 1
+  if display >= 0
+    disp('check_covars is on');
+  end
+  check_covars = 1;	% Ensure that covariances don't collapse
+  MIN_COVAR = eps;	% Minimum singular value of covariance matrix
+  init_covars = mix.covars;
+end
+
+% Main loop of algorithm
+for n = 1:niters
+  
+  % Calculate posteriors based on old parameters
+  [post, act] = gmmpost(mix, x);
+  
+  % Calculate error value if needed
+  if (display | store | test)
+    prob = act*(mix.priors)';
+    % Error value is negative log likelihood of data
+    e = - sum(log(prob));
+    if store
+      errlog(n) = e;
+    end
+    if display > 0
+      fprintf(1, 'Cycle %4d  Error %11.6f\n', n, e);
+    end
+    if test
+      if (n > 1 & abs(e - eold) < options(3))
+        options(8) = e;
+        return;
+      else
+        eold = e;
+      end
+    end
+  end
+  
+  % Adjust the new estimates for the parameters
+  new_pr = sum(post, 1);
+  new_c = post' * x;
+  
+  % Now move new estimates to old parameter vectors
+  mix.priors = new_pr ./ ndata;
+  
+  mix.centres = new_c ./ (new_pr' * ones(1, mix.nin));
+  
+  switch mix.covar_type
+  case 'spherical'
+    n2 = dist2(x, mix.centres);
+    for j = 1:mix.ncentres
+      v(j) = (post(:,j)'*n2(:,j));
+    end
+    mix.covars = ((v./new_pr))./mix.nin;
+    if check_covars
+      % Ensure that no covariance is too small
+      for j = 1:mix.ncentres
+        if mix.covars(j) < MIN_COVAR
+          mix.covars(j) = init_covars(j);
+        end
+      end
+    end
+  case 'diag'
+    for j = 1:mix.ncentres
+      diffs = x - (ones(ndata, 1) * mix.centres(j,:));
+      mix.covars(j,:) = sum((diffs.*diffs).*(post(:,j)*ones(1, ...
+        mix.nin)), 1)./new_pr(j);
+    end
+    if check_covars
+      % Ensure that no covariance is too small
+      for j = 1:mix.ncentres
+        if min(mix.covars(j,:)) < MIN_COVAR
+          mix.covars(j,:) = init_covars(j,:);
+        end
+      end
+    end
+  case 'full'
+    for j = 1:mix.ncentres
+      diffs = x - (ones(ndata, 1) * mix.centres(j,:));
+      diffs = diffs.*(sqrt(post(:,j))*ones(1, mix.nin));
+      mix.covars(:,:,j) = (diffs'*diffs)/new_pr(j);
+    end
+    if check_covars
+      % Ensure that no covariance is too small
+      for j = 1:mix.ncentres
+        if min(svd(mix.covars(:,:,j))) < MIN_COVAR
+          mix.covars(:,:,j) = init_covars(:,:,j);
+        end
+      end
+    end
+  case 'ppca'
+    for j = 1:mix.ncentres
+      diffs = x - (ones(ndata, 1) * mix.centres(j,:));
+      diffs = diffs.*(sqrt(post(:,j))*ones(1, mix.nin));
+      [tempcovars, tempU, templambda] = ...
+	ppca((diffs'*diffs)/new_pr(j), mix.ppca_dim);
+      if length(templambda) ~= mix.ppca_dim
+	error('Unable to extract enough components');
+      else 
+        mix.covars(j) = tempcovars;
+        mix.U(:, :, j) = tempU;
+        mix.lambda(j, :) = templambda;
+      end
+    end
+    if check_covars
+      if mix.covars(j) < MIN_COVAR
+        mix.covars(j) = init_covars(j);
+      end
+    end
+    otherwise
+      error(['Unknown covariance type ', mix.covar_type]);               
+  end
+end
+
+options(8) = -sum(log(gmmprob(mix, x)));
+if (display >= 0)
+  disp(maxitmess);
+end
+  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gmminit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,94 @@
+function mix = gmminit(mix, x, options)
+%GMMINIT Initialises Gaussian mixture model from data
+%
+%	Description
+%	MIX = GMMINIT(MIX, X, OPTIONS) uses a dataset X to initialise the
+%	parameters of a Gaussian mixture model defined by the data structure
+%	MIX.  The k-means algorithm is used to determine the centres. The
+%	priors are computed from the proportion of examples belonging to each
+%	cluster. The covariance matrices are calculated as the sample
+%	covariance of the points associated with (i.e. closest to) the
+%	corresponding centres. For a mixture of PPCA model, the PPCA
+%	decomposition is calculated for the points closest to a given centre.
+%	This initialisation can be used as the starting point for training
+%	the model using the EM algorithm.
+%
+%	See also
+%	GMM
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[ndata, xdim] = size(x);
+
+% Check that inputs are consistent
+errstring = consist(mix, 'gmm', x);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+% Arbitrary width used if variance collapses to zero: make it 'large' so
+% that centre is responsible for a reasonable number of points.
+GMM_WIDTH = 1.0;
+
+% Use kmeans algorithm to set centres
+options(5) = 1;	
+[mix.centres, options, post] = kmeansNetlab(mix.centres, x, options);
+
+% Set priors depending on number of points in each cluster
+cluster_sizes = max(sum(post, 1), 1);  % Make sure that no prior is zero
+mix.priors = cluster_sizes/sum(cluster_sizes); % Normalise priors
+
+switch mix.covar_type
+case 'spherical'
+   if mix.ncentres > 1
+      % Determine widths as distance to nearest centre 
+      % (or a constant if this is zero)
+      cdist = dist2(mix.centres, mix.centres);
+      cdist = cdist + diag(ones(mix.ncentres, 1)*realmax);
+      mix.covars = min(cdist);
+      mix.covars = mix.covars + GMM_WIDTH*(mix.covars < eps);
+   else
+      % Just use variance of all data points averaged over all
+      % dimensions
+      mix.covars = mean(diag(cov(x)));
+   end
+  case 'diag'
+    for j = 1:mix.ncentres
+      % Pick out data points belonging to this centre
+      c = x(find(post(:, j)),:);
+      diffs = c - (ones(size(c, 1), 1) * mix.centres(j, :));
+      mix.covars(j, :) = sum((diffs.*diffs), 1)/size(c, 1);
+      % Replace small entries by GMM_WIDTH value
+      mix.covars(j, :) = mix.covars(j, :) + GMM_WIDTH.*(mix.covars(j, :)<eps);
+    end
+  case 'full'
+    for j = 1:mix.ncentres
+      % Pick out data points belonging to this centre
+      c = x(find(post(:, j)),:);
+      diffs = c - (ones(size(c, 1), 1) * mix.centres(j, :));
+      mix.covars(:,:,j) = (diffs'*diffs)/(size(c, 1));
+      % Add GMM_WIDTH*Identity to rank-deficient covariance matrices
+      if rank(mix.covars(:,:,j)) < mix.nin
+	mix.covars(:,:,j) = mix.covars(:,:,j) + GMM_WIDTH.*eye(mix.nin);
+      end
+    end
+  case 'ppca'
+    for j = 1:mix.ncentres
+      % Pick out data points belonging to this centre
+      c = x(find(post(:,j)),:);
+      diffs = c - (ones(size(c, 1), 1) * mix.centres(j, :));
+      [tempcovars, tempU, templambda] = ...
+	ppca((diffs'*diffs)/size(c, 1), mix.ppca_dim);
+      if length(templambda) ~= mix.ppca_dim
+	error('Unable to extract enough components');
+      else 
+        mix.covars(j) = tempcovars;
+        mix.U(:, :, j) = tempU;
+        mix.lambda(j, :) = templambda;
+      end
+    end
+  otherwise
+    error(['Unknown covariance type ', mix.covar_type]);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gmmpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function p = gmmpak(mix)
+%GMMPAK	Combines all the parameters in a Gaussian mixture model into one vector.
+%
+%	Description
+%	P = GMMPAK(NET) takes a mixture data structure MIX  and combines the
+%	component parameter matrices into a single row vector P.
+%
+%	See also
+%	GMM, GMMUNPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(mix, 'gmm');
+if ~errstring
+  error(errstring);
+end
+
+p = [mix.priors, mix.centres(:)', mix.covars(:)'];
+if strcmp(mix.covar_type, 'ppca')
+  p = [p, mix.lambda(:)', mix.U(:)'];
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gmmpost.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function [post, a] = gmmpost(mix, x)
+%GMMPOST Computes the class posterior probabilities of a Gaussian mixture model.
+%
+%	Description
+%	This function computes the posteriors POST (i.e. the probability of
+%	each component conditioned on the data P(J|X)) for a Gaussian mixture
+%	model.   The data structure MIX defines the mixture model, while the
+%	matrix X contains the data vectors.  Each row of X represents a
+%	single vector.
+%
+%	See also
+%	GMM, GMMACTIV, GMMPROB
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check that inputs are consistent
+errstring = consist(mix, 'gmm', x);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+ndata = size(x, 1);
+
+a = gmmactiv(mix, x);
+
+post = (ones(ndata, 1)*mix.priors).*a;
+s = sum(post, 2);
+if any(s==0)
+   warning('Some zero posterior probabilities')
+   % Set any zeros to one before dividing
+   zero_rows = find(s==0);
+   s = s + (s==0);
+   post(zero_rows, :) = 1/mix.ncentres;
+end
+post = post./(s*ones(1, mix.ncentres));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gmmprob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function prob = gmmprob(mix, x)
+%GMMPROB Computes the data probability for a Gaussian mixture model.
+%
+%	Description
+%	 This function computes the unconditional data density P(X) for a
+%	Gaussian mixture model.  The data structure MIX defines the mixture
+%	model, while the matrix X contains the data vectors.  Each row of X
+%	represents a single vector.
+%
+%	See also
+%	GMM, GMMPOST, GMMACTIV
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check that inputs are consistent
+errstring = consist(mix, 'gmm', x);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+% Compute activations
+a = gmmactiv(mix, x);
+
+% Form dot product with priors
+prob = a * (mix.priors)';
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gmmsamp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+function [data, label] = gmmsamp(mix, n)
+%GMMSAMP Sample from a Gaussian mixture distribution.
+%
+%	Description
+%
+%	DATA = GSAMP(MIX, N) generates a sample of size N from a Gaussian
+%	mixture distribution defined by the MIX data structure. The matrix X
+%	has N rows in which each row represents a MIX.NIN-dimensional sample
+%	vector.
+%
+%	[DATA, LABEL] = GMMSAMP(MIX, N) also returns a column vector of
+%	classes (as an index 1..N) LABEL.
+%
+%	See also
+%	GSAMP, GMM
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check input arguments
+errstring = consist(mix, 'gmm');
+if ~isempty(errstring)
+  error(errstring);
+end
+if n < 1
+  error('Number of data points must be positive')
+end
+
+% Determine number to sample from each component
+priors = rand(1, n);
+
+% Pre-allocate data array
+data = zeros(n, mix.nin);
+if nargout > 1
+  label = zeros(n, 1);
+end
+cum_prior = 0;		% Cumulative sum of priors
+total_samples = 0;	% Cumulative sum of number of sampled points
+for j = 1:mix.ncentres
+  num_samples = sum(priors >= cum_prior & ...
+    priors < cum_prior + mix.priors(j));
+  % Form a full covariance matrix
+  switch mix.covar_type
+    case 'spherical'
+      covar = mix.covars(j) * eye(mix.nin);
+    case 'diag'
+      covar = diag(mix.covars(j, :));
+    case 'full'
+      covar = mix.covars(:, :, j);
+    case 'ppca'
+      covar = mix.covars(j) * eye(mix.nin) + ...
+        mix.U(:, :, j)* ...
+        (diag(mix.lambda(j, :))-(mix.covars(j)*eye(mix.ppca_dim)))* ...
+        (mix.U(:, :, j)');
+    otherwise
+      error(['Unknown covariance type ', mix.covar_type]);
+  end
+  data(total_samples+1:total_samples+num_samples, :) = ...
+    gsamp(mix.centres(j, :), covar, num_samples);
+  if nargout > 1
+    label(total_samples+1:total_samples+num_samples) = j;
+  end
+  cum_prior = cum_prior + mix.priors(j);
+  total_samples = total_samples + num_samples;
+end
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gmmunpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,54 @@
+function mix = gmmunpak(mix, p)
+%GMMUNPAK Separates a vector of Gaussian mixture model parameters into its components.
+%
+%	Description
+%	MIX = GMMUNPAK(MIX, P) takes a GMM data structure MIX and  a single
+%	row vector of parameters P and returns a mixture data structure
+%	identical to the input MIX, except that the mixing coefficients
+%	PRIORS, centres CENTRES and covariances COVARS  (and, for PPCA, the
+%	lambdas and U (PCA sub-spaces)) are all set to the corresponding
+%	elements of P.
+%
+%	See also
+%	GMM, GMMPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(mix, 'gmm');
+if ~errstring
+  error(errstring);
+end
+if mix.nwts ~= length(p)
+  error('Invalid weight vector length')
+end
+
+mark1 = mix.ncentres;
+mark2 = mark1 + mix.ncentres*mix.nin;
+
+mix.priors = reshape(p(1:mark1), 1, mix.ncentres);
+mix.centres = reshape(p(mark1 + 1:mark2), mix.ncentres, mix.nin);
+switch mix.covar_type
+  case 'spherical'
+    mark3 = mix.ncentres*(2 + mix.nin);
+    mix.covars = reshape(p(mark2 + 1:mark3), 1, mix.ncentres);
+  case 'diag'
+    mark3 = mix.ncentres*(1 + mix.nin + mix.nin);
+    mix.covars = reshape(p(mark2 + 1:mark3), mix.ncentres, mix.nin);
+  case 'full'
+    mark3 = mix.ncentres*(1 + mix.nin + mix.nin*mix.nin);
+    mix.covars = reshape(p(mark2 + 1:mark3), mix.nin, mix.nin, ...
+      mix.ncentres);
+  case 'ppca'
+    mark3 = mix.ncentres*(2 + mix.nin);
+    mix.covars = reshape(p(mark2 + 1:mark3), 1, mix.ncentres);
+    % Now also extract k and eigenspaces
+    mark4 = mark3 + mix.ncentres*mix.ppca_dim;
+    mix.lambda = reshape(p(mark3 + 1:mark4), mix.ncentres, ...
+      mix.ppca_dim);
+    mix.U = reshape(p(mark4 + 1:end), mix.nin, mix.ppca_dim, ...
+      mix.ncentres);
+  otherwise
+    error(['Unknown covariance type ', mix.covar_type]);
+end
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,93 @@
+function net = gp(nin, covar_fn, prior)
+%GP	Create a Gaussian Process.
+%
+%	Description
+%
+%	NET = GP(NIN, COVARFN) takes the number of inputs NIN  for a Gaussian
+%	Process model with a single output, together with a string COVARFN
+%	which specifies the type of the covariance function, and returns a
+%	data structure NET. The parameters are set to zero.
+%
+%	The fields in NET are
+%	  type = 'gp'
+%	  nin = number of inputs
+%	  nout = number of outputs: always 1
+%	  nwts = total number of weights and covariance function parameters
+%	  bias = logarithm of constant offset in covariance function
+%	  noise = logarithm of output noise variance
+%	  inweights = logarithm of inverse length scale for each input 
+%	  covarfn = string describing the covariance function:
+%	      'sqexp'
+%	      'ratquad'
+%	  fpar = covariance function specific parameters (1 for squared exponential,
+%	   2 for rational quadratic)
+%	  trin = training input data (initially empty)
+%	  trtargets = training target data (initially empty)
+%
+%	NET = GP(NIN, COVARFN, PRIOR) sets a Gaussian prior on the parameters
+%	of the model. PRIOR must contain the fields PR_MEAN and PR_VARIANCE.
+%	If PR_MEAN is a scalar, then the Gaussian is assumed to be isotropic
+%	and the additional fields NET.PR_MEAN and PR_VARIANCE are set.
+%	Otherwise,  the Gaussian prior has a mean defined by a column vector
+%	of parameters PRIOR.PR_MEAN and covariance defined by a column vector
+%	of parameters PRIOR.PR_VARIANCE. Each element of PRMEAN corresponds
+%	to a separate group of parameters, which need not be mutually
+%	exclusive. The membership of the groups is defined by the matrix
+%	PRIOR.INDEX in which the columns correspond to the elements of
+%	PRMEAN. Each column has one element for each weight in the matrix, in
+%	the order defined by the function GPPAK, and each element is 1 or 0
+%	according to whether the parameter is a member of the corresponding
+%	group or not.  The additional field NET.INDEX is set in this case.
+%
+%	See also
+%	GPPAK, GPUNPAK, GPFWD, GPERR, GPCOVAR, GPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+net.type = 'gp';
+net.nin = nin;
+net.nout = 1;  % Only do single output GP
+
+% Store log parameters
+net.bias = 0;
+net.min_noise = sqrt(eps);  % Prevent output noise collapsing completely
+net.noise = 0;
+net.inweights = zeros(1,nin);  % Weights on inputs in covariance function
+
+covarfns = {'sqexp', 'ratquad'};
+
+if sum(strcmp(covar_fn, covarfns)) == 0
+  error('Undefined activation function. Exiting.');
+else
+  net.covar_fn = covar_fn;
+end
+
+switch covar_fn
+
+  case 'sqexp'		% Squared exponential
+    net.fpar = zeros(1,1);  % One function specific parameter
+    
+  case 'ratquad' 	% Rational quadratic
+    net.fpar = zeros(1, 2); % Two function specific parameters
+
+  otherwise
+    error(['Unknown covariance function ', covar_fn]);
+end
+
+net.nwts = 2 + nin + length(net.fpar);
+
+if nargin >= 3
+  if size(prior.pr_mean) == [1 1]
+    net.pr_mean = prior.pr_mean;
+    net.pr_var = prior.pr_var;
+  else
+    net.pr_mean = prior.pr_mean;
+    net.pr_var = prior.pr_var;
+    net.index = prior.index;
+  end  
+end
+
+% Store training data as needed for gpfwd
+net.tr_in = [];
+net.tr_targets = [];
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gpcovar.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function [cov, covf] = gpcovar(net, x)
+%GPCOVAR Calculate the covariance for a Gaussian Process.
+%
+%	Description
+%
+%	COV = GPCOVAR(NET, X) takes  a Gaussian Process data structure NET
+%	together with a matrix X of input vectors, and computes the
+%	covariance matrix COV.  The inverse of this matrix is used when
+%	calculating the mean and variance of the predictions made by NET.
+%
+%	[COV, COVF] = GPCOVAR(NET, X) also generates the covariance matrix
+%	due to the covariance function specified by NET.COVARFN as calculated
+%	by GPCOVARF.
+%
+%	See also
+%	GP, GPPAK, GPUNPAK, GPCOVARP, GPCOVARF, GPFWD, GPERR, GPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'gp', x);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+ndata = size(x, 1);
+
+% Compute prior covariance
+if nargout >= 2
+  [covp, covf] = gpcovarp(net, x, x);
+else
+  covp = gpcovarp(net, x, x);
+end
+
+% Add output noise variance
+cov = covp + (net.min_noise + exp(net.noise))*eye(ndata);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gpcovarf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function covf = gpcovarf(net, x1, x2)
+%GPCOVARF Calculate the covariance function for a Gaussian Process.
+%
+%	Description
+%
+%	COVF = GPCOVARF(NET, X1, X2) takes  a Gaussian Process data structure
+%	NET together with two matrices X1 and X2 of input vectors,  and
+%	computes the matrix of the covariance function values COVF.
+%
+%	See also
+%	GP, GPCOVAR, GPCOVARP, GPERR, GPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'gp', x1);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+if size(x1, 2) ~= size(x2, 2)
+  error('Number of variables in x1 and x2 must be the same');
+end
+
+n1 = size(x1, 1);
+n2 = size(x2, 1);
+beta = diag(exp(net.inweights));
+
+% Compute the weighted squared distances between x1 and x2
+z = (x1.*x1)*beta*ones(net.nin, n2) - 2*x1*beta*x2' ... 
+  + ones(n1, net.nin)*beta*(x2.*x2)';
+
+switch net.covar_fn
+
+  case 'sqexp'		% Squared exponential
+    covf = exp(net.fpar(1) - 0.5*z);
+
+  case 'ratquad'	% Rational quadratic
+    nu = exp(net.fpar(2));
+    covf = exp(net.fpar(1))*((ones(size(z)) + z).^(-nu));
+
+  otherwise
+    error(['Unknown covariance function ', net.covar_fn]);  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gpcovarp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function [covp, covf] = gpcovarp(net, x1, x2)
+%GPCOVARP Calculate the prior covariance for a Gaussian Process.
+%
+%	Description
+%
+%	COVP = GPCOVARP(NET, X1, X2) takes  a Gaussian Process data structure
+%	NET together with two matrices X1 and X2 of input vectors,  and
+%	computes the matrix of the prior covariance.  This is the function
+%	component of the covariance plus the exponential of the bias term.
+%
+%	[COVP, COVF] = GPCOVARP(NET, X1, X2) also returns the function
+%	component of the covariance.
+%
+%	See also
+%	GP, GPCOVAR, GPCOVARF, GPERR, GPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'gp', x1);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+if size(x1, 2) ~= size(x2, 2)
+  error('Number of variables in x1 and x2 must be the same');
+end
+
+covf = gpcovarf(net, x1, x2);
+covp = covf + exp(net.bias);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gperr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+function [e, edata, eprior] = gperr(net, x, t)
+%GPERR	Evaluate error function for Gaussian Process.
+%
+%	Description
+%	E = GPERR(NET, X, T) takes a Gaussian Process data structure NET
+%	together  with a matrix X of input vectors and a matrix T of target
+%	vectors, and evaluates the error function E. Each row of X
+%	corresponds to one input vector and each row of T corresponds to one
+%	target vector.
+%
+%	[E, EDATA, EPRIOR] = GPERR(NET, X, T) additionally returns the data
+%	and hyperprior components of the error, assuming a Gaussian prior on
+%	the weights with mean and variance parameters PRMEAN and PRVARIANCE
+%	taken from the network data structure NET.
+%
+%	See also
+%	GP, GPCOVAR, GPFWD, GPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'gp', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+cn = gpcovar(net, x);
+
+edata = 0.5*(sum(log(eig(cn, 'nobalance'))) + t'*inv(cn)*t);
+
+% Evaluate the hyperprior contribution to the error.
+% The hyperprior is Gaussian with mean pr_mean and variance
+% pr_variance
+if isfield(net, 'pr_mean')
+  w = gppak(net);
+  m = repmat(net.pr_mean, size(w));
+  if size(net.pr_mean) == [1 1]
+    eprior = 0.5*((w-m)*(w-m)');
+    e2 = eprior/net.pr_var;
+  else
+    wpr = repmat(w, size(net.pr_mean, 1), 1)';
+    eprior = 0.5*(((wpr - m').^2).*net.index);
+    e2 = (sum(eprior, 1))*(1./net.pr_var);
+  end
+else
+  e2 = 0;
+  eprior = 0;
+end
+
+e = edata + e2;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gpfwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+function [y, sigsq] = gpfwd(net, x, cninv)
+%GPFWD	Forward propagation through Gaussian Process.
+%
+%	Description
+%	Y = GPFWD(NET, X) takes a Gaussian Process data structure NET
+%	together  with a matrix X of input vectors, and forward propagates
+%	the inputs through the model to generate a matrix Y of output
+%	vectors.  Each row of X corresponds to one input vector and each row
+%	of Y corresponds to one output vector.  This assumes that the
+%	training data (both inputs and targets) has been stored in NET by a
+%	call to GPINIT; these are needed to compute the training data
+%	covariance matrix.
+%
+%	[Y, SIGSQ] = GPFWD(NET, X) also generates a column vector SIGSQ of
+%	conditional variances (or squared error bars) where each value
+%	corresponds to a pattern.
+%
+%	[Y, SIGSQ] = GPFWD(NET, X, CNINV) uses the pre-computed inverse
+%	covariance matrix CNINV in the forward propagation.  This increases
+%	efficiency if several calls to GPFWD are made.
+%
+%	See also
+%	GP, DEMGP, GPINIT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'gp', x);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+if ~(isfield(net, 'tr_in') & isfield(net, 'tr_targets'))
+   error('Require training inputs and targets');
+end
+
+if nargin == 2
+  % Inverse covariance matrix not supplied.
+  cninv = inv(gpcovar(net, net.tr_in));
+end
+ktest = gpcovarp(net, x, net.tr_in);
+
+% Predict mean
+y = ktest*cninv*net.tr_targets;
+
+if nargout >= 2
+  % Predict error bar
+  ndata = size(x, 1);
+  sigsq = (ones(ndata, 1) * gpcovarp(net, x(1,:), x(1,:))) ...
+    - sum((ktest*cninv).*ktest, 2); 
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gpgrad.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,100 @@
+function g = gpgrad(net, x, t)
+%GPGRAD	Evaluate error gradient for Gaussian Process.
+%
+%	Description
+%	G = GPGRAD(NET, X, T) takes a Gaussian Process data structure NET
+%	together  with a matrix X of input vectors and a matrix T of target
+%	vectors, and evaluates the error gradient G. Each row of X
+%	corresponds to one input vector and each row of T corresponds to one
+%	target vector.
+%
+%	See also
+%	GP, GPCOVAR, GPFWD, GPERR
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'gp', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+% Evaluate derivatives with respect to each hyperparameter in turn.
+ndata = size(x, 1);
+[cov, covf] = gpcovar(net, x);
+cninv = inv(cov);
+trcninv = trace(cninv);
+cninvt = cninv*t;
+
+% Function parameters
+switch net.covar_fn
+
+  case 'sqexp'		% Squared exponential
+    gfpar = trace(cninv*covf) - cninvt'*covf*cninvt;
+
+  case 'ratquad' 	% Rational quadratic
+    beta = diag(exp(net.inweights));
+    gfpar(1) = trace(cninv*covf) - cninvt'*covf*cninvt;
+    D2 = (x.*x)*beta*ones(net.nin, ndata) - 2*x*beta*x' ... 
+      + ones(ndata, net.nin)*beta*(x.*x)';
+    E = ones(size(D2));
+    L = - exp(net.fpar(2)) * covf .* log(E + D2); % d(cn)/d(nu)
+    gfpar(2) = trace(cninv*L) - cninvt'*L*cninvt;
+
+  otherwise
+    error(['Unknown covariance function ', net.covar_fn]);
+end
+
+% Bias derivative
+ndata = size(x, 1);
+fac = exp(net.bias)*ones(ndata);
+gbias = trace(cninv*fac) - cninvt'*fac*cninvt;
+
+% Noise derivative
+gnoise = exp(net.noise)*(trcninv - cninvt'*cninvt);
+
+% Input weight derivatives
+if strcmp(net.covar_fn, 'ratquad')
+  F = (exp(net.fpar(2))*E)./(E + D2);
+end
+
+nparams = length(net.inweights);
+for l = 1 : nparams
+  vect = x(:, l);
+  matx = (vect.*vect)*ones(1, ndata) ... 
+	- 2.0*vect*vect' ... 
+	+ ones(ndata, 1)*(vect.*vect)';
+  switch net.covar_fn
+    case 'sqexp'	% Squared exponential
+      dmat = -0.5*exp(net.inweights(l))*covf.*matx;
+      
+    case 'ratquad'	% Rational quadratic
+      dmat = - exp(net.inweights(l))*covf.*matx.*F;
+    otherwise
+      error(['Unknown covariance function ', net.covar_fn]);
+  end
+
+  gw1(l) = trace(cninv*dmat) - cninvt'*dmat*cninvt;
+end
+
+g1 = [gbias, gnoise, gw1, gfpar];
+g1 = 0.5*g1;
+
+% Evaluate the prior contribution to the gradient.
+if isfield(net, 'pr_mean')
+  w = gppak(net);
+  m = repmat(net.pr_mean, size(w));
+  if size(net.pr_mean) == [1 1]
+    gprior = w - m;
+    g2 = gprior/net.pr_var;
+  else
+    ngroups = size(net.pr_mean, 1);
+    gprior = net.index'.*(ones(ngroups, 1)*w - m);
+    g2 = (1./net.pr_var)'*gprior;
+  end
+else
+  gprior = 0;
+  g2 = 0;
+end
+
+g = g1 + g2;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gpinit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function net = gpinit(net, tr_in, tr_targets, prior)
+%GPINIT	Initialise Gaussian Process model.
+%
+%	Description
+%	NET = GPINIT(NET, TRIN, TRTARGETS) takes a Gaussian Process data
+%	structure NET  together  with a matrix TRIN of training input vectors
+%	and a matrix TRTARGETS of  training target vectors, and stores them
+%	in NET. These datasets are required if the corresponding inverse
+%	covariance matrix is not supplied to GPFWD. This is important if the
+%	data structure is saved and then reloaded before calling GPFWD. Each
+%	row of TRIN corresponds to one input vector and each row of TRTARGETS
+%	corresponds to one target vector.
+%
+%	NET = GPINIT(NET, TRIN, TRTARGETS, PRIOR) additionally initialises
+%	the parameters in NET from the PRIOR data structure which contains
+%	the mean and variance of the Gaussian distribution which is sampled
+%	from.
+%
+%	See also
+%	GP, GPFWD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'gp', tr_in, tr_targets);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+if nargin >= 4 
+  % Initialise weights at random
+  if size(prior.pr_mean) == [1 1]
+    w = randn(1, net.nwts).*sqrt(prior.pr_var) + ...
+       repmat(prior.pr_mean, 1, net.nwts);
+  else
+    sig = sqrt(prior.index*prior.pr_var);
+    w = sig'.*randn(1, net.nwts) + (prior.index*prior.pr_mean)'; 
+  end
+  net = gpunpak(net, w);
+end
+
+net.tr_in = tr_in;
+net.tr_targets = tr_targets;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gppak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function hp = gppak(net)
+%GPPAK	Combines GP hyperparameters into one vector.
+%
+%	Description
+%	HP = GPPAK(NET) takes a Gaussian Process data structure NET and
+%	combines the hyperparameters into a single row vector HP.
+%
+%	See also
+%	GP, GPUNPAK, GPFWD, GPERR, GPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'gp');
+if ~isempty(errstring);
+  error(errstring);
+end
+hp = [net.bias, net.noise, net.inweights, net.fpar];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gpunpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function net = gpunpak(net, hp)
+%GPUNPAK Separates hyperparameter vector into components. 
+%
+%	Description
+%	NET = GPUNPAK(NET, HP) takes an Gaussian Process data structure NET
+%	and  a hyperparameter vector HP, and returns a Gaussian Process data
+%	structure  identical to the input model, except that the covariance
+%	bias BIAS, output noise NOISE, the input weight vector INWEIGHTS and
+%	the vector of covariance function specific parameters  FPAR have all
+%	been set to the corresponding elements of HP.
+%
+%	See also
+%	GP, GPPAK, GPFWD, GPERR, GPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'gp');
+if ~isempty(errstring);
+  error(errstring);
+end
+if net.nwts ~= length(hp)
+  error('Invalid weight vector length');
+end
+
+net.bias = hp(1);
+net.noise = hp(2);
+
+% Unpack input weights
+mark1 = 2 + net.nin;
+net.inweights = hp(3:mark1);
+
+% Unpack function specific parameters
+net.fpar = hp(mark1 + 1:size(hp, 2));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gradchek.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function [gradient, delta] = gradchek(w, func, grad, varargin)
+%GRADCHEK Checks a user-defined gradient function using finite differences.
+%
+%	Description
+%	This function is intended as a utility for other netlab functions
+%	(particularly optimisation functions) to use.  It enables the user to
+%	check whether a gradient calculation has been correctly implmented
+%	for a given function. GRADCHEK(W, FUNC, GRAD) checks how accurate the
+%	gradient  GRAD of a function FUNC is at a parameter vector X.   A
+%	central difference formula with step size 1.0e-6 is used, and the
+%	results for both gradient function and finite difference
+%	approximation are printed. The optional return value GRADIENT is the
+%	gradient calculated using the function GRAD and the return value
+%	DELTA is the difference between the functional and finite difference
+%	methods of calculating the graident.
+%
+%	GRADCHEK(X, FUNC, GRAD, P1, P2, ...) allows additional arguments to
+%	be passed to FUNC and GRAD.
+%
+%	See also
+%	CONJGRAD, GRADDESC, HMC, OLGD, QUASINEW, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Reasonable value for step size
+epsilon = 1.0e-6;
+
+func = fcnchk(func, length(varargin));
+grad = fcnchk(grad, length(varargin));
+
+% Treat
+nparams = length(w);
+deltaf = zeros(1, nparams);
+step = zeros(1, nparams);
+for i = 1:nparams
+  % Move a small way in the ith coordinate of w
+  step(i) = 1.0;
+  fplus  = feval('linef', epsilon, func, w, step, varargin{:});
+  fminus = feval('linef', -epsilon, func, w, step, varargin{:});
+  % Use central difference formula for approximation
+  deltaf(i) = 0.5*(fplus - fminus)/epsilon;
+  step(i) = 0.0;
+end
+gradient = feval(grad, w, varargin{:});
+fprintf(1, 'Checking gradient ...\n\n');
+delta = gradient - deltaf;
+fprintf(1, '   analytic   diffs     delta\n\n');
+disp([gradient', deltaf', delta'])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/graddesc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,180 @@
+function [x, options, flog, pointlog] = graddesc(f, x, options, gradf, ...
+			varargin)
+%GRADDESC Gradient descent optimization.
+%
+%	Description
+%	[X, OPTIONS, FLOG, POINTLOG] = GRADDESC(F, X, OPTIONS, GRADF) uses
+%	batch gradient descent to find a local minimum of the function  F(X)
+%	whose gradient is given by GRADF(X). A log of the function values
+%	after each cycle is (optionally) returned in ERRLOG, and a log of the
+%	points visited is (optionally) returned in POINTLOG.
+%
+%	Note that X is a row vector and F returns a scalar value.  The point
+%	at which F has a local minimum is returned as X.  The function value
+%	at that point is returned in OPTIONS(8).
+%
+%	GRADDESC(F, X, OPTIONS, GRADF, P1, P2, ...) allows  additional
+%	arguments to be passed to F() and GRADF().
+%
+%	The optional parameters have the following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values; also logs error
+%	values in the return argument ERRLOG, and the points visited in the
+%	return argument POINTSLOG. If OPTIONS(1) is set to 0, then only
+%	warning messages are displayed.  If OPTIONS(1) is -1, then nothing is
+%	displayed.
+%
+%	OPTIONS(2) is the absolute precision required for the value of X at
+%	the solution.  If the absolute difference between the values of X
+%	between two successive steps is less than OPTIONS(2), then this
+%	condition is satisfied.
+%
+%	OPTIONS(3) is a measure of the precision required of the objective
+%	function at the solution.  If the absolute difference between the
+%	objective function values between two successive steps is less than
+%	OPTIONS(3), then this condition is satisfied. Both this and the
+%	previous condition must be satisfied for termination.
+%
+%	OPTIONS(7) determines the line minimisation method used.  If it is
+%	set to 1 then a line minimiser is used (in the direction of the
+%	negative gradient).  If it is 0 (the default), then each parameter
+%	update is a fixed multiple (the learning rate) of the negative
+%	gradient added to a fixed multiple (the momentum) of the previous
+%	parameter update.
+%
+%	OPTIONS(9) should be set to 1 to check the user defined gradient
+%	function GRADF with GRADCHEK.  This is carried out at the initial
+%	parameter vector X.
+%
+%	OPTIONS(10) returns the total number of function evaluations
+%	(including those in any line searches).
+%
+%	OPTIONS(11) returns the total number of gradient evaluations.
+%
+%	OPTIONS(14) is the maximum number of iterations; default 100.
+%
+%	OPTIONS(15) is the precision in parameter space of the line search;
+%	default FOPTIONS(2).
+%
+%	OPTIONS(17) is the momentum; default 0.5.  It should be scaled by the
+%	inverse of the number of data points.
+%
+%	OPTIONS(18) is the learning rate; default 0.01.  It should be scaled
+%	by the inverse of the number of data points.
+%
+%	See also
+%	CONJGRAD, LINEMIN, OLGD, MINBRACK, QUASINEW, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+%  Set up the options.
+if length(options) < 18
+  error('Options vector too short')
+end
+
+if (options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+
+line_min_flag = 0; % Flag for line minimisation option
+if (round(options(7)) == 1)
+  % Use line minimisation
+  line_min_flag = 1;
+  % Set options for line minimiser
+  line_options = foptions;
+  if options(15) > 0
+    line_options(2) = options(15);
+  end
+else
+  % Learning rate: must be positive
+  if (options(18) > 0)
+    eta = options(18);
+  else
+    eta = 0.01;
+  end
+  % Momentum term: allow zero momentum
+  if (options(17) >= 0)
+    mu = options(17);
+  else
+    mu = 0.5;
+  end
+end
+
+% Check function string
+f = fcnchk(f, length(varargin));
+gradf = fcnchk(gradf, length(varargin));
+
+% Display information if options(1) > 0
+display = options(1) > 0;
+
+% Work out if we need to compute f at each iteration.
+% Needed if using line search or if display results or if termination
+% criterion requires it.
+fcneval = (options(7) | display | options(3));
+
+%  Check gradients
+if (options(9) > 0)
+  feval('gradchek', x, f, gradf, varargin{:});
+end
+
+dxold = zeros(1, size(x, 2));
+xold = x;
+fold = 0; % Must be initialised so that termination test can be performed
+if fcneval
+  fnew = feval(f, x, varargin{:});
+  options(10) = options(10) + 1;
+  fold = fnew;
+end
+
+%  Main optimization loop.
+for j = 1:niters
+  xold = x;
+  grad = feval(gradf, x, varargin{:});
+  options(11) = options(11) + 1;  % Increment gradient evaluation counter
+  if (line_min_flag ~= 1)
+    dx = mu*dxold - eta*grad;
+    x =  x + dx;
+    dxold = dx;
+    if fcneval
+      fold = fnew;
+      fnew = feval(f, x, varargin{:});
+      options(10) = options(10) + 1;
+    end
+  else
+    sd = - grad./norm(grad);	% New search direction.
+    fold = fnew;
+    % Do a line search: normalise search direction to have length 1
+    [lmin, line_options] = feval('linemin', f, x, sd, fold, ...
+      line_options, varargin{:});
+    options(10) = options(10) + line_options(10);
+    x = xold + lmin*sd;
+    fnew = line_options(8);
+  end
+  if nargout >= 3
+    flog(j) = fnew;
+    if nargout >= 4
+      pointlog(j, :) = x;
+    end
+  end
+  if display
+    fprintf(1, 'Cycle  %5d  Function %11.8f\n', j, fnew);
+  end
+  if (max(abs(x - xold)) < options(2) & abs(fnew - fold) < options(3))
+    % Termination criteria are met
+    options(8) = fnew;
+    return;
+  end
+end
+
+if fcneval
+  options(8) = fnew;
+else
+  options(8) = feval(f, x, varargin{:});
+  options(10) = options(10) + 1;
+end
+if (options(1) >= 0)
+  disp(maxitmess);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gsamp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function x = gsamp(mu, covar, nsamp)
+%GSAMP	Sample from a Gaussian distribution.
+%
+%	Description
+%
+%	X = GSAMP(MU, COVAR, NSAMP) generates a sample of size NSAMP from a
+%	D-dimensional Gaussian distribution. The Gaussian density has mean
+%	vector MU and covariance matrix COVAR, and the matrix X has NSAMP
+%	rows in which each row represents a D-dimensional sample vector.
+%
+%	See also
+%	GAUSS, DEMGAUSS
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+d = size(covar, 1);
+
+mu = reshape(mu, 1, d);   % Ensure that mu is a row vector
+
+[evec, eval] = eig(covar);
+
+deig=diag(eval);
+
+if (~isreal(deig)) | any(deig<0), 
+  warning('Covariance Matrix is not OK, redefined to be positive definite');
+  eval=abs(eval);
+end
+
+coeffs = randn(nsamp, d)*sqrt(eval);
+
+x = ones(nsamp, 1)*mu + coeffs*evec';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gtm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,61 @@
+function net = gtm(dim_latent, nlatent, dim_data, ncentres, rbfunc, ...
+   prior)
+%GTM	Create a Generative Topographic Map.
+%
+%	Description
+%
+%	NET = GTM(DIMLATENT, NLATENT, DIMDATA, NCENTRES, RBFUNC), takes the
+%	dimension of the latent space DIMLATENT, the number of data points
+%	sampled in the latent space NLATENT, the dimension of the data space
+%	DIMDATA, the number of centres in the RBF model NCENTRES, the
+%	activation function for the RBF RBFUNC and returns a data structure
+%	NET. The parameters in the RBF and GMM sub-models are set by calls to
+%	the corresponding creation routines RBF and GMM.
+%
+%	The fields in NET are
+%	  type = 'gtm'
+%	  nin = dimension of data space
+%	  dimlatent = dimension of latent space
+%	  rbfnet = RBF network data structure
+%	  gmmnet = GMM data structure
+%	  X = sample of latent points
+%
+%	NET = GTM(DIMLATENT, NLATENT, DIMDATA, NCENTRES, RBFUNC, PRIOR),
+%	sets a Gaussian zero mean prior on the parameters of the RBF model.
+%	PRIOR must be a scalar and represents the inverse variance of the
+%	prior distribution.  This gives rise to a weight decay term in the
+%	error function.
+%
+%	See also
+%	GTMFWD, GTMPOST, RBF, GMM
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+net.type = 'gtm';
+% Input to functions is data
+net.nin = dim_data;
+net.dim_latent = dim_latent;
+
+% Default is no regularisation
+if nargin == 5
+   prior = 0.0;
+end
+
+% Only allow scalar prior
+if isstruct(prior) | size(prior) ~= [1 1]
+   error('Prior must be a scalar');
+end
+
+% Create RBF network
+net.rbfnet = rbf(dim_latent, ncentres, dim_data, rbfunc, ...
+   'linear', prior);
+
+% Mask all but output weights
+net.rbfnet.mask = rbfprior(rbfunc, dim_latent, ncentres, dim_data);
+
+% Create field for GMM output model
+net.gmmnet = gmm(dim_data, nlatent, 'spherical');
+
+% Create empty latent data sample
+net.X = [];
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gtmem.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,135 @@
+function [net, options, errlog] = gtmem(net, t, options)
+%GTMEM	EM algorithm for Generative Topographic Mapping.
+%
+%	Description
+%	[NET, OPTIONS, ERRLOG] = GTMEM(NET, T, OPTIONS) uses the Expectation
+%	Maximization algorithm to estimate the parameters of a GTM defined by
+%	a data structure NET. The matrix T represents the data whose
+%	expectation is maximized, with each row corresponding to a vector.
+%	It is assumed that the latent data NET.X has been set following a
+%	call to GTMINIT, for example.    The optional parameters have the
+%	following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values; also logs error
+%	values in the return argument ERRLOG. If OPTIONS(1) is set to 0, then
+%	only warning messages are displayed.  If OPTIONS(1) is -1, then
+%	nothing is displayed.
+%
+%	OPTIONS(3) is a measure of the absolute precision required of the
+%	error function at the solution. If the change in log likelihood
+%	between two steps of the EM algorithm is less than this value, then
+%	the function terminates.
+%
+%	OPTIONS(14) is the maximum number of iterations; default 100.
+%
+%	The optional return value OPTIONS contains the final error value
+%	(i.e. data log likelihood) in OPTIONS(8).
+%
+%	See also
+%	GTM, GTMINIT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check that inputs are consistent
+errstring = consist(net, 'gtm', t);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+% Sort out the options
+if (options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+
+display = options(1);
+store = 0;
+if (nargout > 2)
+  store = 1;	% Store the error values to return them
+  errlog = zeros(1, niters);
+end
+test = 0;
+if options(3) > 0.0
+  test = 1;	% Test log likelihood for termination
+end
+
+% Calculate various quantities that remain constant during training
+[ndata, tdim] = size(t);
+ND = ndata*tdim;
+[net.gmmnet.centres, Phi] = rbffwd(net.rbfnet, net.X);
+Phi = [Phi ones(size(net.X, 1), 1)];
+PhiT = Phi';
+[K, Mplus1] = size(Phi);
+
+A = zeros(Mplus1, Mplus1);
+cholDcmp = zeros(Mplus1, Mplus1);
+% Use a sparse representation for the weight regularizing matrix.
+if (net.rbfnet.alpha > 0)
+  Alpha = net.rbfnet.alpha*speye(Mplus1);
+  Alpha(Mplus1, Mplus1) = 0;
+end 
+
+for n = 1:niters
+   % Calculate responsibilities
+   [R, act] = gtmpost(net, t);
+     % Calculate error value if needed
+   if (display | store | test)
+      prob = act*(net.gmmnet.priors)';
+      % Error value is negative log likelihood of data
+      e = - sum(log(max(prob,eps)));
+      if store
+         errlog(n) = e;
+      end
+      if display > 0
+         fprintf(1, 'Cycle %4d  Error %11.6f\n', n, e);
+      end
+      if test
+         if (n > 1 & abs(e - eold) < options(3))
+            options(8) = e;
+            return;
+         else
+            eold = e;
+         end
+      end
+   end
+
+   % Calculate matrix be inverted (Phi'*G*Phi + alpha*I in the papers).
+   % Sparse representation of G normally executes faster and saves
+   % memory
+   if (net.rbfnet.alpha > 0)
+      A = full(PhiT*spdiags(sum(R)', 0, K, K)*Phi + ...
+         (Alpha.*net.gmmnet.covars(1)));
+   else
+      A = full(PhiT*spdiags(sum(R)', 0, K, K)*Phi);
+   end
+   % A is a symmetric matrix likely to be positive definite, so try
+   % fast Cholesky decomposition to calculate W, otherwise use SVD.
+   % (PhiT*(R*t)) is computed right-to-left, as R
+   % and t are normally (much) larger than PhiT.
+   [cholDcmp singular] = chol(A);
+   if (singular)
+      if (display)
+         fprintf(1, ...
+            'gtmem: Warning -- M-Step matrix singular, using pinv.\n');
+      end
+      W = pinv(A)*(PhiT*(R'*t));
+   else
+      W = cholDcmp \ (cholDcmp' \ (PhiT*(R'*t)));
+   end
+   % Put new weights into network to calculate responsibilities
+   % net.rbfnet = netunpak(net.rbfnet, W);
+   net.rbfnet.w2 = W(1:net.rbfnet.nhidden, :);
+   net.rbfnet.b2 = W(net.rbfnet.nhidden+1, :);
+   % Calculate new distances
+   d = dist2(t, Phi*W);
+   
+   % Calculate new value for beta
+   net.gmmnet.covars = ones(1, net.gmmnet.ncentres)*(sum(sum(d.*R))/ND);
+end
+
+options(8) = -sum(log(gtmprob(net, t)));
+if (display >= 0)
+  disp(maxitmess);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gtmfwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function mix = gtmfwd(net)
+%GTMFWD	Forward propagation through GTM.
+%
+%	Description
+%	 MIX = GTMFWD(NET) takes a GTM structure NET, and forward propagates
+%	the latent data sample NET.X through the GTM to generate the
+%	structure MIX which represents the Gaussian mixture model in data
+%	space.
+%
+%	See also
+%	GTM
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+net.gmmnet.centres = rbffwd(net.rbfnet, net.X);
+mix = net.gmmnet;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gtminit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,153 @@
+function net = gtminit(net, options, data, samp_type, varargin)
+%GTMINIT Initialise the weights and latent sample in a GTM.
+%
+%	Description
+%	NET = GTMINIT(NET, OPTIONS, DATA, SAMPTYPE) takes a GTM NET and
+%	generates a sample of latent data points and sets the centres (and
+%	widths if appropriate) of NET.RBFNET.
+%
+%	If the SAMPTYPE is 'REGULAR', then regular grids of latent data
+%	points and RBF centres are created.  The dimension of the latent data
+%	space must be 1 or 2.  For one-dimensional latent space, the
+%	LSAMPSIZE parameter gives the number of latent points and the
+%	RBFSAMPSIZE parameter gives the number of RBF centres.  For a two-
+%	dimensional latent space, these parameters must be vectors of length
+%	2 with the number of points in each of the x and y directions to
+%	create a rectangular grid.  The widths of the RBF basis functions are
+%	set by a call to RBFSETFW passing OPTIONS(7) as the scaling
+%	parameter.
+%
+%	If the SAMPTYPE is 'UNIFORM' or 'GAUSSIAN' then the latent data is
+%	found by sampling from a uniform or Gaussian distribution
+%	correspondingly.  The RBF basis function parameters are set by a call
+%	to RBFSETBF with the DATA parameter as dataset and the OPTIONS
+%	vector.
+%
+%	Finally, the output layer weights of the RBF are initialised by
+%	mapping the mean of the latent variable to the mean of the target
+%	variable, and the L-dimensional latent variale variance to the
+%	variance of the targets along the first L principal components.
+%
+%	See also
+%	GTM, GTMEM, PCA, RBFSETBF, RBFSETFW
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check for consistency
+errstring = consist(net, 'gtm', data);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+% Check type of sample
+stypes = {'regular', 'uniform', 'gaussian'};
+if (strcmp(samp_type, stypes)) == 0
+  error('Undefined sample type.')
+end
+
+if net.dim_latent > size(data, 2)
+  error('Latent space dimension must not be greater than data dimension')
+end
+nlatent = net.gmmnet.ncentres;
+nhidden = net.rbfnet.nhidden;
+
+% Create latent data sample and set RBF centres
+
+switch samp_type
+case 'regular'
+   if nargin ~= 6
+      error('Regular type must specify latent and RBF shapes');
+   end
+   l_samp_size = varargin{1};
+   rbf_samp_size = varargin{2};
+   if round(l_samp_size) ~= l_samp_size
+      error('Latent sample specification must contain integers')
+   end
+   % Check existence and size of rbf specification
+   if any(size(rbf_samp_size) ~= [1 net.dim_latent]) | ...
+         prod(rbf_samp_size) ~= nhidden
+      error('Incorrect specification of RBF centres')
+   end
+   % Check dimension and type of latent data specification
+   if any(size(l_samp_size) ~= [1 net.dim_latent]) | ...
+         prod(l_samp_size) ~= nlatent
+      error('Incorrect dimension of latent sample spec.')
+   end
+   if net.dim_latent == 1
+      net.X = [-1:2/(l_samp_size-1):1]';
+      net.rbfnet.c = [-1:2/(rbf_samp_size-1):1]';
+      net.rbfnet = rbfsetfw(net.rbfnet, options(7));
+   elseif net.dim_latent == 2
+      net.X = gtm_rctg(l_samp_size);
+      net.rbfnet.c = gtm_rctg(rbf_samp_size);
+      net.rbfnet = rbfsetfw(net.rbfnet, options(7));
+   else
+      error('For regular sample, input dimension must be 1 or 2.')
+   end
+   
+   
+case {'uniform', 'gaussian'}
+   if strcmp(samp_type, 'uniform')
+      net.X = 2 * (rand(nlatent, net.dim_latent) - 0.5);
+   else
+      % Sample from N(0, 0.25) distribution to ensure most latent 
+      % data is inside square
+      net.X = randn(nlatent, net.dim_latent)/2;
+   end   
+   net.rbfnet = rbfsetbf(net.rbfnet, options, net.X);
+otherwise
+   % Shouldn't get here
+   error('Invalid sample type');
+   
+end
+
+% Latent data sample and basis function parameters chosen.
+% Now set output weights
+[PCcoeff, PCvec] = pca(data);
+
+% Scale PCs by eigenvalues
+A = PCvec(:, 1:net.dim_latent)*diag(sqrt(PCcoeff(1:net.dim_latent)));
+
+[temp, Phi] = rbffwd(net.rbfnet, net.X);
+% Normalise X to ensure 1:1 mapping of variances and calculate weights
+% as solution of Phi*W = normX*A'
+normX = (net.X - ones(size(net.X))*diag(mean(net.X)))*diag(1./std(net.X));
+net.rbfnet.w2 = Phi \ (normX*A');
+% Bias is mean of target data
+net.rbfnet.b2 = mean(data);
+
+% Must also set initial value of variance
+% Find average distance between nearest centres
+% Ensure that distance of centre to itself is excluded by setting diagonal
+% entries to realmax
+net.gmmnet.centres = rbffwd(net.rbfnet, net.X);
+d = dist2(net.gmmnet.centres, net.gmmnet.centres) + ...
+  diag(ones(net.gmmnet.ncentres, 1)*realmax);
+sigma = mean(min(d))/2;
+
+% Now set covariance to minimum of this and next largest eigenvalue
+if net.dim_latent < size(data, 2)
+  sigma = min(sigma, PCcoeff(net.dim_latent+1));
+end
+net.gmmnet.covars = sigma*ones(1, net.gmmnet.ncentres);
+
+% Sub-function to create the sample data in 2d
+function sample = gtm_rctg(samp_size)
+
+xDim = samp_size(1);
+yDim = samp_size(2);
+% Produce a grid with the right number of rows and columns
+[X, Y] = meshgrid([0:1:(xDim-1)], [(yDim-1):-1:0]);
+
+% Change grid representation 
+sample = [X(:), Y(:)];
+
+% Shift grid to correct position and scale it
+maxXY= max(sample);
+sample(:,1) = 2*(sample(:,1) - maxXY(1)/2)./maxXY(1);
+sample(:,2) = 2*(sample(:,2) - maxXY(2)/2)./maxXY(2);
+return;
+
+   
+   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gtmlmean.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function means = gtmlmean(net, data)
+%GTMLMEAN Mean responsibility for data in a GTM.
+%
+%	Description
+%	 MEANS = GTMLMEAN(NET, DATA) takes a GTM structure NET, and computes
+%	the means of the responsibility  distributions for each data point in
+%	DATA.
+%
+%	See also
+%	GTM, GTMPOST, GTMLMODE
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check for consistency
+errstring = consist(net, 'gtm', data);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+R = gtmpost(net, data);
+means = R*net.X;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gtmlmode.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function modes = gtmlmode(net, data)
+%GTMLMODE Mode responsibility for data in a GTM.
+%
+%	Description
+%	 MODES = GTMLMODE(NET, DATA) takes a GTM structure NET, and computes
+%	the modes of the responsibility  distributions for each data point in
+%	DATA.  These will always lie at one of the latent space sample points
+%	NET.X.
+%
+%	See also
+%	GTM, GTMPOST, GTMLMEAN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check for consistency
+errstring = consist(net, 'gtm', data);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+R = gtmpost(net, data);
+% Mode is maximum responsibility
+[max_resp, max_index] = max(R, [], 2);
+modes = net.X(max_index, :);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gtmmag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function mags = gtmmag(net, latent_data)
+%GTMMAG	Magnification factors for a GTM
+%
+%	Description
+%	 MAGS = GTMMAG(NET, LATENTDATA) takes a GTM structure NET, and
+%	computes the magnification factors for each point the latent space
+%	contained in LATENTDATA.
+%
+%	See also
+%	GTM, GTMPOST, GTMLMEAN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'gtm');
+if ~isempty(errstring)
+  error(errstring);
+end
+
+Jacs = rbfjacob(net.rbfnet, latent_data);
+nlatent = size(latent_data, 1);
+mags = zeros(nlatent, 1);
+temp = zeros(net.rbfnet.nin, net.rbfnet.nout);
+for m = 1:nlatent
+  temp = squeeze(Jacs(m, :, :));  % Turn into a 2d matrix
+  mags(m) = sqrt(det(temp*temp'));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gtmpost.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function [post, a] = gtmpost(net, data)
+%GTMPOST Latent space responsibility for data in a GTM.
+%
+%	Description
+%	 POST = GTMPOST(NET, DATA) takes a GTM structure NET, and computes
+%	the  responsibility at each latent space sample point NET.X for each
+%	data point in DATA.
+%
+%	[POST, A] = GTMPOST(NET, DATA) also returns the activations A of the
+%	GMM NET.GMMNET as computed by GMMPOST.
+%
+%	See also
+%	GTM, GTMEM, GTMLMEAN, GMLMODE, GMMPROB
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check for consistency
+errstring = consist(net, 'gtm', data);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+net.gmmnet.centres = rbffwd(net.rbfnet, net.X);
+
+[post, a] = gmmpost(net.gmmnet, data);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/gtmprob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function prob = gtmprob(net, data)
+%GTMPROB Probability for data under a GTM.
+%
+%	Description
+%	 PROB = GTMPROB(NET, DATA) takes a GTM structure NET, and computes
+%	the probability of each point in the dataset DATA.
+%
+%	See also
+%	GTM, GTMEM, GTMLMEAN, GTMLMODE, GTMPOST
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check for consistency
+errstring = consist(net, 'gtm', data);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+net.gmmnet.centres = rbffwd(net.rbfnet, net.X);
+
+prob = gmmprob(net.gmmnet, data);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/hbayes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function [h, hdata] = hbayes(net, hdata) 
+%HBAYES	Evaluate Hessian of Bayesian error function for network.
+%
+%	Description
+%	H = HBAYES(NET, HDATA) takes a network data structure NET together
+%	the data contribution to the Hessian for a set of inputs and targets.
+%	It returns the regularised Hessian using any zero mean Gaussian
+%	priors on the weights defined in NET.  In addition, if a MASK is
+%	defined in NET, then the entries in H that correspond to weights with
+%	a 0 in the mask are removed.
+%
+%	[H, HDATA] = HBAYES(NET, HDATA) additionally returns the data
+%	component of the Hessian.
+%
+%	See also
+%	GBAYES, GLMHESS, MLPHESS, RBFHESS
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if (isfield(net, 'mask'))
+  % Extract relevant entries in Hessian
+  nmask_rows = size(find(net.mask), 1);
+  hdata = reshape(hdata(logical(net.mask*(net.mask'))), ...
+     nmask_rows, nmask_rows);
+  nwts = nmask_rows;
+else
+  nwts = net.nwts;
+end
+if isfield(net, 'beta')
+  h = net.beta*hdata;
+else
+  h = hdata;
+end
+
+if isfield(net, 'alpha')
+  if size(net.alpha) == [1 1]
+    h = h + net.alpha*eye(nwts);
+  else
+    if isfield(net, 'mask')
+      nindx_cols = size(net.index, 2);
+      index = reshape(net.index(logical(repmat(net.mask, ...
+         1, nindx_cols))), nmask_rows, nindx_cols);
+    else
+      index = net.index;
+    end
+    h = h + diag(index*net.alpha);
+  end 
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/hesschek.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+function h = hesschek(net, x, t)
+%HESSCHEK Use central differences to confirm correct evaluation of Hessian matrix.
+%
+%	Description
+%
+%	HESSCHEK(NET, X, T) takes a network data structure NET, together with
+%	input and target data matrices X and T, and compares the evaluation
+%	of the Hessian matrix using the function NETHESS and using central
+%	differences with the function NETERR.
+%
+%	The optional return value H is the Hessian computed using NETHESS.
+%
+%	See also
+%	NETHESS, NETERR
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+w0 = netpak(net);
+nwts = length(w0);
+h = nethess(w0, net, x, t);
+
+w = w0;
+hcent = zeros(nwts, nwts);
+h1 =  0.0; h2 =  0.0; h3 =  0.0; h4 = 0.0;
+epsilon = 1.0e-4;
+fprintf(1, 'Checking Hessian ...\n\n');
+for k = 1:nwts;
+  for l = 1:nwts;
+    if(l == k)
+      w(k) = w0(k) + 2.0*epsilon;
+      h1 = neterr(w, net, x, t);
+      w(k) = w0(k) - 2.0*epsilon;
+      h2 = neterr(w, net, x, t);
+      w(k) = w0(k);
+      h3 = neterr(w, net, x, t);
+      hcent(k, k) = (h1 + h2 - 2.0*h3)/(4.0*epsilon^2);
+    else
+      w(k) = w0(k) + epsilon;
+      w(l) = w0(l) + epsilon;
+      h1 = neterr(w, net, x, t);
+      w(k) = w0(k) - epsilon;
+      w(l) = w0(l) - epsilon;
+      h2 = neterr(w, net, x, t);
+      w(k) = w0(k) + epsilon;
+      w(l) = w0(l) - epsilon;
+      h3 = neterr(w, net, x, t);
+      w(k) = w0(k) - epsilon;
+      w(l) = w0(l) + epsilon;
+      h4 = neterr(w, net, x, t);
+      hcent(k, l) = (h1 + h2 - h3 - h4)/(4.0*epsilon^2);
+      w(k) = w0(k);
+      w(l) = w0(l);
+    end
+  end
+end
+
+fprintf(1, '   analytical    numerical       delta\n\n');
+temp = [h(:), hcent(:), (h(:) - hcent(:))];
+fprintf(1, '%12.6f  %12.6f  %12.6f\n', temp');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/hintmat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function [xvals, yvals, color] = hintmat(w);
+%HINTMAT Evaluates the coordinates of the patches for a Hinton diagram.
+%
+%	Description
+%	[xvals, yvals, color] = hintmat(w)
+%	  takes a matrix W and returns coordinates XVALS, YVALS for the
+%	patches comrising the Hinton diagram, together with a vector COLOR
+%	labelling the color (black or white) of the corresponding elements
+%	according to their sign.
+%
+%	See also
+%	HINTON
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Set scale to be up to 0.9 of maximum absolute weight value, where scale
+% defined so that area of box proportional to weight value.
+
+w = flipud(w);
+[nrows, ncols] = size(w);
+
+scale = 0.45*sqrt(abs(w)/max(max(abs(w))));
+scale = scale(:);
+color = 0.5*(sign(w(:)) + 3);
+
+delx = 1;
+dely = 1;
+[X, Y] = meshgrid(0.5*delx:delx:(ncols-0.5*delx), 0.5*dely:dely:(nrows-0.5*dely));
+
+% Now convert from matrix format to column vector format, and then duplicate
+% columns with appropriate offsets determined by normalized weight magnitudes. 
+
+xtemp = X(:);
+ytemp = Y(:);
+
+xvals = [xtemp-delx*scale, xtemp+delx*scale, ...
+         xtemp+delx*scale, xtemp-delx*scale];
+yvals = [ytemp-dely*scale, ytemp-dely*scale, ...
+         ytemp+dely*scale, ytemp+dely*scale];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/hinton.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function h = hinton(w);
+%HINTON	Plot Hinton diagram for a weight matrix.
+%
+%	Description
+%
+%	HINTON(W) takes a matrix W and plots the Hinton diagram.
+%
+%	H = HINTON(NET) also returns the figure handle H which can be used,
+%	for instance, to delete the  figure when it is no longer needed.
+%
+%	To print the figure correctly in black and white, you should call
+%	SET(H, 'INVERTHARDCOPY', 'OFF') before printing.
+%
+%	See also
+%	DEMHINT, HINTMAT, MLPHINT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Set scale to be up to 0.9 of maximum absolute weight value, where scale
+% defined so that area of box proportional to weight value.
+
+% Use no more than 640x480 pixels
+xmax = 640; ymax = 480;
+
+% Offset bottom left hand corner
+x01 = 40; y01 = 40;
+x02 = 80; y02 = 80;
+
+% Need to allow 5 pixels border for window frame: but 30 at top
+border = 5;
+top_border = 30;
+
+ymax = ymax - top_border;
+xmax = xmax - border;
+
+% First layer
+
+[xvals, yvals, color] = hintmat(w);
+% Try to preserve aspect ratio approximately
+if (8*size(w, 1) < 6*size(w, 2))
+  delx = xmax; dely = xmax*size(w, 1)/(size(w, 2));
+else
+  delx = ymax*size(w, 2)/size(w, 1); dely = ymax;
+end
+
+h = figure('Color', [0.5 0.5 0.5], ...
+  'Name', 'Hinton diagram', ...
+  'NumberTitle', 'off', ...
+  'Colormap', [0 0 0; 1 1 1], ...
+  'Units', 'pixels', ...
+  'Position', [x01 y01 delx dely]);
+set(gca, 'Visible', 'off', 'Position', [0 0 1 1]);
+hold on
+patch(xvals', yvals', color', 'Edgecolor', 'none');
+axis equal;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/histp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function h = histp(x, xmin, xmax, nbins)
+%HISTP	Histogram estimate of 1-dimensional probability distribution.
+%
+%	Description
+%
+%	HISTP(X, XMIN, XMAX, NBINS) takes a column vector X  of data values
+%	and generates a normalized histogram plot of the  distribution. The
+%	histogram has NBINS bins lying in the range XMIN to XMAX.
+%
+%	H = HISTP(...) returns a vector of patch handles.
+%
+%	See also
+%	DEMGAUSS
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+ndata = length(x);
+
+bins = linspace(xmin, xmax, nbins);
+
+binwidth = (xmax - xmin)/nbins;
+
+num = hist(x, bins);
+
+num = num/(ndata*binwidth);
+
+h = bar(bins, num, 0.6);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/hmc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,281 @@
+function [samples, energies, diagn] = hmc(f, x, options, gradf, varargin)
+%HMC	Hybrid Monte Carlo sampling.
+%
+%	Description
+%	SAMPLES = HMC(F, X, OPTIONS, GRADF) uses a  hybrid Monte Carlo
+%	algorithm to sample from the distribution P ~ EXP(-F), where F is the
+%	first argument to HMC. The Markov chain starts at the point X, and
+%	the function GRADF is the gradient of the `energy' function F.
+%
+%	HMC(F, X, OPTIONS, GRADF, P1, P2, ...) allows additional arguments to
+%	be passed to F() and GRADF().
+%
+%	[SAMPLES, ENERGIES, DIAGN] = HMC(F, X, OPTIONS, GRADF) also returns a
+%	log of the energy values (i.e. negative log probabilities) for the
+%	samples in ENERGIES and DIAGN, a structure containing diagnostic
+%	information (position, momentum and acceptance threshold) for each
+%	step of the chain in DIAGN.POS, DIAGN.MOM and DIAGN.ACC respectively.
+%	All candidate states (including rejected ones) are stored in
+%	DIAGN.POS.
+%
+%	[SAMPLES, ENERGIES, DIAGN] = HMC(F, X, OPTIONS, GRADF) also returns
+%	the ENERGIES (i.e. negative log probabilities) corresponding to the
+%	samples.  The DIAGN structure contains three fields:
+%
+%	POS the position vectors of the dynamic process.
+%
+%	MOM the momentum vectors of the dynamic process.
+%
+%	ACC the acceptance thresholds.
+%
+%	S = HMC('STATE') returns a state structure that contains the state of
+%	the two random number generators RAND and RANDN and the momentum of
+%	the dynamic process.  These are contained in fields  randstate,
+%	randnstate and mom respectively.  The momentum state is only used for
+%	a persistent momentum update.
+%
+%	HMC('STATE', S) resets the state to S.  If S is an integer, then it
+%	is passed to RAND and RANDN and the momentum variable is randomised.
+%	If S is a structure returned by HMC('STATE') then it resets the
+%	generator to exactly the same state.
+%
+%	The optional parameters in the OPTIONS vector have the following
+%	interpretations.
+%
+%	OPTIONS(1) is set to 1 to display the energy values and rejection
+%	threshold at each step of the Markov chain. If the value is 2, then
+%	the position vectors at each step are also displayed.
+%
+%	OPTIONS(5) is set to 1 if momentum persistence is used; default 0,
+%	for complete replacement of momentum variables.
+%
+%	OPTIONS(7) defines the trajectory length (i.e. the number of leap-
+%	frog steps at each iteration).  Minimum value 1.
+%
+%	OPTIONS(9) is set to 1 to check the user defined gradient function.
+%
+%	OPTIONS(14) is the number of samples retained from the Markov chain;
+%	default 100.
+%
+%	OPTIONS(15) is the number of samples omitted from the start of the
+%	chain; default 0.
+%
+%	OPTIONS(17) defines the momentum used when a persistent update of
+%	(leap-frog) momentum is used.  This is bounded to the interval [0,
+%	1).
+%
+%	OPTIONS(18) is the step size used in leap-frogs; default 1/trajectory
+%	length.
+%
+%	See also
+%	METROP
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Global variable to store state of momentum variables: set by set_state
+% Used to initialise variable if set
+global HMC_MOM
+if nargin <= 2
+  if ~strcmp(f, 'state')
+    error('Unknown argument to hmc');
+  end
+  switch nargin
+    case 1
+      samples = get_state(f);
+      return;
+    case 2
+      set_state(f, x);
+      return;
+  end
+end
+
+display = options(1);
+if (round(options(5) == 1))
+  persistence = 1;
+  % Set alpha to lie in [0, 1)
+  alpha = max(0, options(17));
+  alpha = min(1, alpha);
+  salpha = sqrt(1-alpha*alpha);
+else
+  persistence = 0;
+end
+L = max(1, options(7)); % At least one step in leap-frogging
+if options(14) > 0
+  nsamples = options(14);
+else
+  nsamples = 100;	% Default
+end
+if options(15) >= 0
+  nomit = options(15);
+else
+  nomit = 0;
+end
+if options(18) > 0
+  step_size = options(18);	% Step size.
+else
+  step_size = 1/L;		% Default  
+end
+x = x(:)';		% Force x to be a row vector
+nparams = length(x);
+
+% Set up strings for evaluating potential function and its gradient.
+f = fcnchk(f, length(varargin));
+gradf = fcnchk(gradf, length(varargin));
+
+% Check the gradient evaluation.
+if (options(9))
+  % Check gradients
+  feval('gradchek', x, f, gradf, varargin{:});
+end
+
+samples = zeros(nsamples, nparams);	% Matrix of returned samples.
+if nargout >= 2
+  en_save = 1;
+  energies = zeros(nsamples, 1);
+else
+  en_save = 0;
+end
+if nargout >= 3
+  diagnostics = 1;
+  diagn_pos = zeros(nsamples, nparams);
+  diagn_mom = zeros(nsamples, nparams);
+  diagn_acc = zeros(nsamples, 1);
+else
+  diagnostics = 0;
+end
+
+n = - nomit + 1;
+Eold = feval(f, x, varargin{:});	% Evaluate starting energy.
+nreject = 0;
+if (~persistence | isempty(HMC_MOM))
+  p = randn(1, nparams);		% Initialise momenta at random
+else
+  p = HMC_MOM;				% Initialise momenta from stored state
+end
+lambda = 1;
+
+% Main loop.
+while n <= nsamples
+
+  xold = x;		    % Store starting position.
+  pold = p;		    % Store starting momenta
+  Hold = Eold + 0.5*(p*p'); % Recalculate Hamiltonian as momenta have changed
+
+  if ~persistence
+    % Choose a direction at random
+    if (rand < 0.5)
+      lambda = -1;
+    else
+      lambda = 1;
+    end
+  end
+  % Perturb step length.
+  epsilon = lambda*step_size*(1.0 + 0.1*randn(1));
+
+  % First half-step of leapfrog.
+  p = p - 0.5*epsilon*feval(gradf, x, varargin{:});
+  x = x + epsilon*p;
+  
+  % Full leapfrog steps.
+  for m = 1 : L - 1
+    p = p - epsilon*feval(gradf, x, varargin{:});
+    x = x + epsilon*p;
+  end
+
+  % Final half-step of leapfrog.
+  p = p - 0.5*epsilon*feval(gradf, x, varargin{:});
+
+  % Now apply Metropolis algorithm.
+  Enew = feval(f, x, varargin{:});	% Evaluate new energy.
+  p = -p;				% Negate momentum
+  Hnew = Enew + 0.5*p*p';		% Evaluate new Hamiltonian.
+  a = exp(Hold - Hnew);			% Acceptance threshold.
+  if (diagnostics & n > 0)
+    diagn_pos(n,:) = x;
+    diagn_mom(n,:) = p;
+    diagn_acc(n,:) = a;
+  end
+  if (display > 1)
+    fprintf(1, 'New position is\n');
+    disp(x);
+  end
+
+  if a > rand(1)			% Accept the new state.
+    Eold = Enew;			% Update energy
+    if (display > 0)
+      fprintf(1, 'Finished step %4d  Threshold: %g\n', n, a);
+    end
+  else					% Reject the new state.
+    if n > 0 
+      nreject = nreject + 1;
+    end
+    x = xold;				% Reset position 
+    p = pold;   			% Reset momenta
+    if (display > 0)
+      fprintf(1, '  Sample rejected %4d.  Threshold: %g\n', n, a);
+    end
+  end
+  if n > 0
+    samples(n,:) = x;			% Store sample.
+    if en_save 
+      energies(n) = Eold;		% Store energy.
+    end
+  end
+
+  % Set momenta for next iteration
+  if persistence
+    p = -p;
+    % Adjust momenta by a small random amount.
+    p = alpha.*p + salpha.*randn(1, nparams);
+  else
+    p = randn(1, nparams);	% Replace all momenta.
+  end
+
+  n = n + 1;
+end
+
+if (display > 0)
+  fprintf(1, '\nFraction of samples rejected:  %g\n', ...
+    nreject/(nsamples));
+end
+if diagnostics
+  diagn.pos = diagn_pos;
+  diagn.mom = diagn_mom;
+  diagn.acc = diagn_acc;
+end
+% Store final momentum value in global so that it can be retrieved later
+HMC_MOM = p;
+return
+
+% Return complete state of sampler (including momentum)
+function state = get_state(f)
+
+global HMC_MOM
+state.randstate = rand('state');
+state.randnstate = randn('state');
+state.mom = HMC_MOM;
+return
+
+% Set complete state of sampler (including momentum) or just set randn
+% and rand with integer argument.
+function set_state(f, x)
+
+global HMC_MOM
+if isnumeric(x)
+  rand('state', x);
+  randn('state', x);
+  HMC_MOM = [];
+else
+  if ~isstruct(x)
+    error('Second argument to hmc must be number or state structure');
+  end
+  if (~isfield(x, 'randstate') | ~isfield(x, 'randnstate') ...
+      | ~isfield(x, 'mom'))
+    error('Second argument to hmc must contain correct fields')
+  end
+  rand('state', x.randstate);
+  randn('state', x.randnstate);
+  HMC_MOM = x.mom;
+end
+return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/kmeansNetlab.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,124 @@
+function [centres, options, post, errlog] = kmeans(centres, data, options)
+%KMEANS	Trains a k means cluster model.
+%
+%	Description
+%	 CENTRES = KMEANS(CENTRES, DATA, OPTIONS) uses the batch K-means
+%	algorithm to set the centres of a cluster model. The matrix DATA
+%	represents the data which is being clustered, with each row
+%	corresponding to a vector. The sum of squares error function is used.
+%	The point at which a local minimum is achieved is returned as
+%	CENTRES.  The error value at that point is returned in OPTIONS(8).
+%
+%	[CENTRES, OPTIONS, POST, ERRLOG] = KMEANS(CENTRES, DATA, OPTIONS)
+%	also returns the cluster number (in a one-of-N encoding) for each
+%	data point in POST and a log of the error values after each cycle in
+%	ERRLOG.    The optional parameters have the following
+%	interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values; also logs error
+%	values in the return argument ERRLOG. If OPTIONS(1) is set to 0, then
+%	only warning messages are displayed.  If OPTIONS(1) is -1, then
+%	nothing is displayed.
+%
+%	OPTIONS(2) is a measure of the absolute precision required for the
+%	value of CENTRES at the solution.  If the absolute difference between
+%	the values of CENTRES between two successive steps is less than
+%	OPTIONS(2), then this condition is satisfied.
+%
+%	OPTIONS(3) is a measure of the precision required of the error
+%	function at the solution.  If the absolute difference between the
+%	error functions between two successive steps is less than OPTIONS(3),
+%	then this condition is satisfied. Both this and the previous
+%	condition must be satisfied for termination.
+%
+%	OPTIONS(14) is the maximum number of iterations; default 100.
+%
+%	See also
+%	GMMINIT, GMMEM
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[ndata, data_dim] = size(data);
+[ncentres, dim] = size(centres);
+
+if dim ~= data_dim
+  error('Data dimension does not match dimension of centres')
+end
+
+if (ncentres > ndata)
+  error('More centres than data')
+end
+
+% Sort out the options
+if (options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+
+store = 0;
+if (nargout > 3)
+  store = 1;
+  errlog = zeros(1, niters);
+end
+
+% Check if centres and posteriors need to be initialised from data
+if (options(5) == 1)
+  % Do the initialisation
+  perm = randperm(ndata);
+  perm = perm(1:ncentres);
+
+  % Assign first ncentres (permuted) data points as centres
+  centres = data(perm, :);
+end
+% Matrix to make unit vectors easy to construct
+id = eye(ncentres);
+
+% Main loop of algorithm
+for n = 1:niters
+
+  % Save old centres to check for termination
+  old_centres = centres;
+  
+  % Calculate posteriors based on existing centres
+  d2 = dist2(data, centres);
+  % Assign each point to nearest centre
+  [minvals, index] = min(d2', [], 1);
+  post = id(index,:);
+
+  num_points = sum(post, 1);
+  % Adjust the centres based on new posteriors
+  for j = 1:ncentres
+    if (num_points(j) > 0)
+      centres(j,:) = sum(data(find(post(:,j)),:), 1)/num_points(j);
+    end
+  end
+
+  % Error value is total squared distance from cluster centres
+  e = sum(minvals);
+  if store
+    errlog(n) = e;
+  end
+  if options(1) > 0
+    fprintf(1, 'Cycle %4d  Error %11.6f\n', n, e);
+  end
+
+  if n > 1
+    % Test for termination
+    if max(max(abs(centres - old_centres))) < options(2) & ...
+        abs(old_e - e) < options(3)
+      options(8) = e;
+      return;
+    end
+  end
+  old_e = e;
+end
+
+% If we get here, then we haven't terminated in the given number of 
+% iterations.
+options(8) = e;
+if (options(1) >= 0)
+  disp(maxitmess);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/knn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function net = knn(nin, nout, k, tr_in, tr_targets)
+%KNN	Creates a K-nearest-neighbour classifier.
+%
+%	Description
+%	NET = KNN(NIN, NOUT, K, TR_IN, TR_TARGETS) creates a KNN model NET
+%	with input dimension NIN, output dimension NOUT and K neighbours.
+%	The training data is also stored in the data structure and the
+%	targets are assumed to be using a 1-of-N coding.
+%
+%	The fields in NET are
+%	  type = 'knn'
+%	  nin = number of inputs
+%	  nout = number of outputs
+%	  tr_in = training input data
+%	  tr_targets = training target data
+%
+%	See also
+%	KMEANS, KNNFWD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+net.type = 'knn';
+net.nin = nin;
+net.nout = nout;
+net.k = k;
+errstring = consist(net, 'knn', tr_in, tr_targets);
+if ~isempty(errstring)
+  error(errstring);
+end
+net.tr_in = tr_in; 
+net.tr_targets = tr_targets;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/knnfwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function [y, l] = knnfwd(net, x)
+%KNNFWD	Forward propagation through a K-nearest-neighbour classifier.
+%
+%	Description
+%	[Y, L] = KNNFWD(NET, X) takes a matrix X of input vectors (one vector
+%	per row)   and uses the K-nearest-neighbour rule on the training data
+%	contained in NET to  produce  a matrix Y of outputs and a matrix L of
+%	classification labels. The nearest neighbours are determined using
+%	Euclidean distance. The IJth entry of Y counts the number of
+%	occurrences that an example from class J is among the K closest
+%	training examples to example I from X. The matrix L contains the
+%	predicted class labels as an index 1..N, not as 1-of-N coding.
+%
+%	See also
+%	KMEANS, KNN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+errstring = consist(net, 'knn', x);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+ntest = size(x, 1);		              % Number of input vectors.
+nclass = size(net.tr_targets, 2);		% Number of classes.
+
+% Compute matrix of squared distances between input vectors from the training 
+% and test sets.  The matrix distsq has dimensions (ntrain, ntest).
+
+distsq = dist2(net.tr_in, x);
+
+% Now sort the distances. This generates a matrix kind of the same 
+% dimensions as distsq, in which each column gives the indices of the
+% elements in the corresponding column of distsq in ascending order.
+
+[vals, kind] = sort(distsq);
+y = zeros(ntest, nclass);
+
+for k=1:net.k
+  % We now look at the predictions made by the Kth nearest neighbours alone,
+  % and represent this as a 1-of-N coded matrix, and then accumulate the 
+  % predictions so far.
+
+  y = y + net.tr_targets(kind(k,:),:);
+
+end
+
+if nargout == 2
+  % Convert this set of outputs to labels, randomly breaking ties
+  [temp, l] = max((y + 0.1*rand(size(y))), [], 2);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/linef.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function y = linef(lambda, fn, x, d, varargin)
+%LINEF	Calculate function value along a line.
+%
+%	Description
+%	LINEF(LAMBDA, FN, X, D) calculates the value of the function FN at
+%	the point X+LAMBDA*D.  Here X is a row vector and LAMBDA is a scalar.
+%
+%	LINEF(LAMBDA, FN, X, D, P1, P2, ...) allows additional arguments to
+%	be passed to FN().   This function is used for convenience in some of
+%	the optimisation routines.
+%
+%	See also
+%	GRADCHEK, LINEMIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check function string
+fn = fcnchk(fn, length(varargin));
+
+y = feval(fn, x+lambda.*d, varargin{:});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/linemin.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,152 @@
+function [x, options] = linemin(f, pt, dir, fpt, options, ...
+	varargin)
+%LINEMIN One dimensional minimization.
+%
+%	Description
+%	[X, OPTIONS] = LINEMIN(F, PT, DIR, FPT, OPTIONS) uses Brent's
+%	algorithm to find the minimum of the function F(X) along the line DIR
+%	through the point PT.  The function value at the starting point is
+%	FPT.  The point at which F has a local minimum is returned as X.  The
+%	function value at that point is returned in OPTIONS(8).
+%
+%	LINEMIN(F, PT, DIR, FPT, OPTIONS, P1, P2, ...) allows  additional
+%	arguments to be passed to F().
+%
+%	The optional parameters have the following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values.
+%
+%	OPTIONS(2) is a measure of the absolute precision required for the
+%	value of X at the solution.
+%
+%	OPTIONS(3) is a measure of the precision required of the objective
+%	function at the solution.  Both this and the previous condition must
+%	be satisfied for termination.
+%
+%	OPTIONS(14) is the maximum number of iterations; default 100.
+%
+%	See also
+%	CONJGRAD, MINBRACK, QUASINEW
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Set up the options.
+if(options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+options(10) = 0; % Initialise count of function evaluations
+
+display = options(1);
+
+% Check function string
+f = fcnchk(f, length(varargin));
+
+% Value of golden section (1 + sqrt(5))/2.0
+phi = 1.6180339887499;
+cphi = 1 - 1/phi;
+TOL = sqrt(eps);	% Maximal fractional precision
+TINY = 1.0e-10;         % Can't use fractional precision when minimum is at 0
+
+% Bracket the minimum
+[br_min, br_mid, br_max, num_evals] = feval('minbrack', 'linef', ...
+  0.0, 1.0, fpt, f, pt, dir, varargin{:});
+options(10) = options(10) + num_evals;  % Increment number of fn. evals
+					% No gradient evals in minbrack
+
+% Use Brent's algorithm to find minimum
+% Initialise the points and function values
+w = br_mid;   	% Where second from minimum is
+v = br_mid;   	% Previous value of w
+x = v;   	% Where current minimum is
+e = 0.0; 	% Distance moved on step before last
+fx = feval('linef', x, f, pt, dir, varargin{:});
+options(10) = options(10) + 1;
+fv = fx; fw = fx;
+
+for n = 1:niters
+  xm = 0.5.*(br_min+br_max);  % Middle of bracket
+  % Make sure that tolerance is big enough
+  tol1 = TOL * (max(abs(x))) + TINY;
+  % Decide termination on absolute precision required by options(2)
+  if (max(abs(x - xm)) <= options(2) & br_max-br_min < 4*options(2))
+    options(8) = fx;
+    return;
+  end
+  % Check if step before last was big enough to try a parabolic step.
+  % Note that this will fail on first iteration, which must be a golden
+  % section step.
+  if (max(abs(e)) > tol1)
+    % Construct a trial parabolic fit through x, v and w
+    r = (fx - fv) .* (x - w);
+    q = (fx - fw) .* (x - v);
+    p = (x - v).*q - (x - w).*r;
+    q = 2.0 .* (q - r);
+    if (q > 0.0) p = -p; end
+    q = abs(q);
+    % Test if the parabolic fit is OK
+    if (abs(p) >= abs(0.5*q*e) | p <= q*(br_min-x) | p >= q*(br_max-x))
+      % No it isn't, so take a golden section step
+      if (x >= xm)
+        e = br_min-x;
+      else
+        e = br_max-x;
+      end
+      d = cphi*e;
+    else
+      % Yes it is, so take the parabolic step
+      e = d;
+      d = p/q;
+      u = x+d;
+      if (u-br_min < 2*tol1 | br_max-u < 2*tol1)
+        d = sign(xm-x)*tol1;
+      end
+    end
+  else
+    % Step before last not big enough, so take a golden section step
+    if (x >= xm)
+      e = br_min - x;
+    else
+      e = br_max - x;
+    end
+    d = cphi*e;
+  end
+  % Make sure that step is big enough
+  if (abs(d) >= tol1)
+    u = x+d;
+  else
+    u = x + sign(d)*tol1;
+  end
+  % Evaluate function at u
+  fu = feval('linef', u, f, pt, dir, varargin{:});
+  options(10) = options(10) + 1;
+  % Reorganise bracket
+  if (fu <= fx)
+    if (u >= x)
+      br_min = x;
+    else
+      br_max = x;
+    end
+    v = w; w = x; x = u;
+    fv = fw; fw = fx; fx = fu;
+  else
+    if (u < x)
+      br_min = u;   
+    else
+      br_max = u;
+    end
+    if (fu <= fw | w == x)
+      v = w; w = u;
+      fv = fw; fw = fu;
+    elseif (fu <= fv | v == x | v == w)
+      v = u;
+      fv = fu;
+    end
+  end
+  if (display == 1)
+    fprintf(1, 'Cycle %4d  Error %11.6f\n', n, fx);
+  end
+end
+options(8) = fx;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/maxitmess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function s = maxitmess()
+%MAXITMESS Create a standard error message when training reaches max. iterations.
+%
+%	Description
+%	S = MAXITMESS returns a standard string that it used by training
+%	algorithms when the maximum number of iterations (as specified in
+%	OPTIONS(14) is reached.
+%
+%	See also
+%	CONJGRAD, GLMTRAIN, GMMEM, GRADDESC, GTMEM, KMEANS, OLGD, QUASINEW, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+s = 'Maximum number of iterations has been exceeded';
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,77 @@
+function net = mdn(nin, nhidden, ncentres, dim_target, mix_type, ...
+	prior, beta)
+%MDN	Creates a Mixture Density Network with specified architecture.
+%
+%	Description
+%	NET = MDN(NIN, NHIDDEN, NCENTRES, DIMTARGET) takes the number of
+%	inputs,  hidden units for a 2-layer feed-forward  network and the
+%	number of centres and target dimension for the  mixture model whose
+%	parameters are set from the outputs of the neural network. The fifth
+%	argument MIXTYPE is used to define the type of mixture model.
+%	(Currently there is only one type supported: a mixture of Gaussians
+%	with a single covariance parameter for each component.) For this
+%	model, the mixture coefficients are computed from a group of softmax
+%	outputs, the centres are equal to a group of linear outputs, and the
+%	variances are  obtained by applying the exponential function to a
+%	third group of outputs.
+%
+%	The network is initialised by a call to MLP, and the arguments PRIOR,
+%	and BETA have the same role as for that function. Weight
+%	initialisation uses the Matlab function RANDN  and so the seed for
+%	the random weight initialization can be  set using RANDN('STATE', S)
+%	where S is the seed value. A specialised data structure (rather than
+%	GMM) is used for the mixture model outputs to improve the efficiency
+%	of error and gradient calculations in network training. The fields
+%	are described in MDNFWD where they are set up.
+%
+%	The fields in NET are
+%	  
+%	  type = 'mdn'
+%	  nin = number of input variables
+%	  nout = dimension of target space (not number of network outputs)
+%	  nwts = total number of weights and biases
+%	  mdnmixes = data structure for mixture model output
+%	  mlp = data structure for MLP network
+%
+%	See also
+%	MDNFWD, MDNERR, MDN2GMM, MDNGRAD, MDNPAK, MDNUNPAK, MLP
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+% Currently ignore type argument: reserved for future use
+net.type = 'mdn';
+
+% Set up the mixture model part of the structure
+% For efficiency we use a specialised data structure in place of GMM
+mdnmixes.type = 'mdnmixes';
+mdnmixes.ncentres = ncentres;
+mdnmixes.dim_target = dim_target;
+
+% This calculation depends on spherical variances
+mdnmixes.nparams = ncentres + ncentres*dim_target + ncentres;
+
+% Make the weights in the mdnmixes structure null 
+mdnmixes.mixcoeffs = [];
+mdnmixes.centres = [];
+mdnmixes.covars = [];
+
+% Number of output nodes = number of parameters in mixture model
+nout = mdnmixes.nparams;
+
+% Set up the MLP part of the network
+if (nargin == 5)
+  mlpnet = mlp(nin, nhidden, nout, 'linear');
+elseif (nargin == 6)
+  mlpnet = mlp(nin, nhidden, nout, 'linear', prior);
+elseif (nargin == 7)
+  mlpnet = mlp(nin, nhidden, nout, 'linear', prior, beta);
+end
+
+% Create descriptor
+net.mdnmixes = mdnmixes;
+net.mlp = mlpnet;
+net.nin = nin;
+net.nout = dim_target;
+net.nwts = mlpnet.nwts;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdn2gmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function gmmmixes = mdn2gmm(mdnmixes)
+%MDN2GMM Converts an MDN mixture data structure to array of GMMs.
+%
+%	Description
+%	GMMMIXES = MDN2GMM(MDNMIXES) takes an MDN mixture data structure
+%	MDNMIXES containing three matrices (for priors, centres and
+%	variances) where each row represents the corresponding parameter
+%	values for a different mixture model  and creates an array of GMMs.
+%	These can then be used with the standard Netlab Gaussian mixture
+%	model functions.
+%
+%	See also
+%	GMM, MDN, MDNFWD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+% Check argument for consistency
+errstring = consist(mdnmixes, 'mdnmixes');
+if ~isempty(errstring)
+  error(errstring);
+end
+
+nmixes = size(mdnmixes.centres, 1);
+% Construct ndata structures containing the mixture model information.
+% First allocate the memory.
+tempmix = gmm(mdnmixes.dim_target, mdnmixes.ncentres, 'spherical');
+f = fieldnames(tempmix);
+gmmmixes = cell(size(f, 1), 1, nmixes);
+gmmmixes = cell2struct(gmmmixes, f,1);
+
+% Then fill each structure in turn using gmmunpak.  Assume that spherical
+% covariance structure is used.
+for i = 1:nmixes
+  centres = reshape(mdnmixes.centres(i, :), mdnmixes.dim_target, ...
+    mdnmixes.ncentres)';
+  gmmmixes(i) = gmmunpak(tempmix, [mdnmixes.mixcoeffs(i,:), ...
+      centres(:)', mdnmixes.covars(i,:)]);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdndist2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+function n2 = mdndist2(mixparams, t)
+%MDNDIST2 Calculates squared distance between centres of Gaussian kernels and data
+%
+%	Description
+%	N2 = MDNDIST2(MIXPARAMS, T) takes takes the centres of the Gaussian
+%	contained in  MIXPARAMS and the target data matrix, T, and computes
+%	the squared  Euclidean distance between them.  If T has M rows and N
+%	columns, then the CENTRES field in the MIXPARAMS structure should
+%	have M rows and N*MIXPARAMS.NCENTRES columns: the centres in each row
+%	relate to the corresponding row in T. The result has M rows and
+%	MIXPARAMS.NCENTRES columns. The I, Jth entry is the  squared distance
+%	from the Ith row of X to the Jth centre in the Ith row of
+%	MIXPARAMS.CENTRES.
+%
+%	See also
+%	MDNFWD, MDNPROB
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+% Check arguments for consistency
+errstring = consist(mixparams, 'mdnmixes');
+if ~isempty(errstring)
+  error(errstring);
+end
+
+ncentres   = mixparams.ncentres;
+dim_target = mixparams.dim_target;
+ntarget    = size(t, 1);
+if ntarget ~= size(mixparams.centres, 1)
+  error('Number of targets does not match number of mixtures')
+end
+if size(t, 2) ~= mixparams.dim_target
+  error('Target dimension does not match mixture dimension')
+end
+
+% Build t that suits parameters, that is repeat t for each centre
+t = kron(ones(1, ncentres), t);
+
+% Do subtraction and square
+diff2 = (t - mixparams.centres).^2;
+
+% Reshape and sum each component
+diff2 = reshape(diff2', dim_target, (ntarget*ncentres))';
+n2 = sum(diff2, 2);
+
+% Calculate the sum of distance, and reshape
+% so that we have a distance for each centre per target
+n2 = reshape(n2, ncentres, ntarget)';
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdnerr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+function e = mdnerr(net, x, t)
+%MDNERR	Evaluate error function for Mixture Density Network.
+%
+%	Description
+%	 E = MDNERR(NET, X, T) takes a mixture density network data structure
+%	NET, a matrix X of input vectors and a matrix T of target vectors,
+%	and evaluates the error function E. The error function is the
+%	negative log likelihood of the target data under the conditional
+%	density given by the mixture model parameterised by the MLP.  Each
+%	row of X corresponds to one input vector and each row of T
+%	corresponds to one target vector.
+%
+%	See also
+%	MDN, MDNFWD, MDNGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+% Check arguments for consistency
+errstring = consist(net, 'mdn', x, t);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+% Get the output mixture models
+mixparams = mdnfwd(net, x);
+
+% Compute the probabilities of mixtures
+probs     = mdnprob(mixparams, t);
+% Compute the error
+e       = sum( -log(max(eps, sum(probs, 2))));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdnfwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,93 @@
+function [mixparams, y, z, a] = mdnfwd(net, x)
+%MDNFWD	Forward propagation through Mixture Density Network.
+%
+%	Description
+%	 MIXPARAMS = MDNFWD(NET, X) takes a mixture density network data
+%	structure NET and a matrix X of input vectors, and forward propagates
+%	the inputs through the network to generate a structure MIXPARAMS
+%	which contains the parameters of several mixture models.   Each row
+%	of X represents one input vector and the corresponding row of the
+%	matrices in MIXPARAMS  represents the parameters of a mixture model
+%	for the conditional probability of target vectors given the input
+%	vector.  This is not represented as an array of GMM structures to
+%	improve the efficiency of MDN training.
+%
+%	The fields in MIXPARAMS are
+%	  type = 'mdnmixes'
+%	  ncentres = number of mixture components
+%	  dimtarget = dimension of target space
+%	  mixcoeffs = mixing coefficients
+%	  centres = means of Gaussians: stored as one row per pattern
+%	  covars = covariances of Gaussians
+%	  nparams = number of parameters
+%
+%	[MIXPARAMS, Y, Z] = MDNFWD(NET, X) also generates a matrix Y of the
+%	outputs of the MLP and a matrix Z of the hidden unit activations
+%	where each row corresponds to one pattern.
+%
+%	[MIXPARAMS, Y, Z, A] = MLPFWD(NET, X) also returns a matrix A  giving
+%	the summed inputs to each output unit, where each row  corresponds to
+%	one pattern.
+%
+%	See also
+%	MDN, MDN2GMM, MDNERR, MDNGRAD, MLPFWD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+% Check arguments for consistency
+errstring = consist(net, 'mdn', x);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+% Extract mlp and mixture model descriptors
+mlpnet = net.mlp;
+mixes = net.mdnmixes;
+
+ncentres = mixes.ncentres;	% Number of components in mixture model
+dim_target = mixes.dim_target;	% Dimension of targets
+nparams = mixes.nparams;	% Number of parameters in mixture model
+
+% Propagate forwards through MLP
+[y, z, a] = mlpfwd(mlpnet, x);
+
+% Compute the postion for each parameter in the whole
+% matrix.  Used to define the mixparams structure
+mixcoeff  = [1:1:ncentres];
+centres   = [ncentres+1:1:(ncentres*(1+dim_target))];
+variances = [(ncentres*(1+dim_target)+1):1:nparams];
+
+% Convert output values into mixture model parameters
+
+% Use softmax to calculate priors
+% Prevent overflow and underflow: use same bounds as glmfwd
+% Ensure that sum(exp(y), 2) does not overflow
+maxcut = log(realmax) - log(ncentres);
+% Ensure that exp(y) > 0
+mincut = log(realmin);
+temp = min(y(:,1:ncentres), maxcut);
+temp = max(temp, mincut);
+temp = exp(temp);
+mixpriors = temp./(sum(temp, 2)*ones(1,ncentres));
+
+% Centres are just copies of network outputs
+mixcentres =  y(:,(ncentres+1):ncentres*(1+dim_target));
+
+% Variances are exp of network outputs
+mixwidths = exp(y(:,(ncentres*(1+dim_target)+1):nparams));
+
+% Now build up all the mixture model weight vectors
+ndata = size(x, 1);
+
+% Return parameters
+mixparams.type = mixes.type;
+mixparams.ncentres = mixes.ncentres;
+mixparams.dim_target = mixes.dim_target;
+mixparams.nparams = mixes.nparams;
+
+mixparams.mixcoeffs = mixpriors;
+mixparams.centres   = mixcentres;
+mixparams.covars      = mixwidths;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdngrad.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+function g = mdngrad(net, x, t)
+%MDNGRAD Evaluate gradient of error function for Mixture Density Network.
+%
+%	Description
+%	 G = MDNGRAD(NET, X, T) takes a mixture density network data
+%	structure NET, a matrix X of input vectors and a matrix T of target
+%	vectors, and evaluates the gradient G of the error function with
+%	respect to the network weights. The error function is negative log
+%	likelihood of the target data.  Each row of X corresponds to one
+%	input vector and each row of T corresponds to one target vector.
+%
+%	See also
+%	MDN, MDNFWD, MDNERR, MDNPROB, MLPBKP
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+% Check arguments for consistency
+errstring = consist(net, 'mdn', x, t);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+[mixparams, y, z] = mdnfwd(net, x);
+
+% Compute gradients at MLP outputs: put the answer in deltas
+ncentres = net.mdnmixes.ncentres;
+dim_target = net.mdnmixes.dim_target;
+nmixparams = net.mdnmixes.nparams;
+ntarget = size(t, 1);
+deltas = zeros(ntarget, net.mlp.nout);
+e = ones(ncentres, 1);
+f = ones(1, dim_target);
+
+post = mdnpost(mixparams, t);
+
+% Calculate prior derivatives
+deltas(:,1:ncentres)  = mixparams.mixcoeffs - post;
+
+% Calculate centre derivatives
+long_t = kron(ones(1, ncentres), t);
+centre_err = mixparams.centres - long_t;
+
+% Get the post to match each u_jk:
+% this array will be (ntarget, (ncentres*dim_target))
+long_post = kron(ones(dim_target, 1), post);
+long_post = reshape(long_post, ntarget, (ncentres*dim_target));
+
+% Get the variance to match each u_jk:
+var = mixparams.covars;
+var = kron(ones(dim_target, 1), var);
+var = reshape(var, ntarget, (ncentres*dim_target));
+
+% Compute centre deltas
+deltas(:, (ncentres+1):(ncentres*(1+dim_target))) = ...
+                       (centre_err.*long_post)./var;
+
+% Compute variance deltas
+dist2             = mdndist2(mixparams, t);
+c                 = dim_target*ones(ntarget, ncentres);
+deltas(:, (ncentres*(1+dim_target)+1):nmixparams) = ...
+                      post.*((dist2./mixparams.covars)-c)./(-2);
+
+% Now back-propagate deltas through MLP
+g = mlpbkp(net.mlp, x, z, deltas);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdninit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function net = mdninit(net, prior, t, options)
+%MDNINIT Initialise the weights in a Mixture Density Network.
+%
+%	Description
+%
+%	NET = MDNINIT(NET, PRIOR) takes a Mixture Density Network NET and
+%	sets the weights and biases by sampling from a Gaussian distribution.
+%	It calls MLPINIT for the MLP component of NET.
+%
+%	NET = MDNINIT(NET, PRIOR, T, OPTIONS) uses the target data T to
+%	initialise the biases for the output units after initialising the
+%	other weights as above.  It calls GMMINIT, with T and OPTIONS as
+%	arguments, to obtain a model of the unconditional density of T.  The
+%	biases are then set so that NET will output the values in the
+%	Gaussian  mixture model.
+%
+%	See also
+%	MDN, MLP, MLPINIT, GMMINIT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+% Initialise network weights from prior: this gives noise around values
+% determined later
+net.mlp = mlpinit(net.mlp, prior);
+
+if nargin > 2
+  % Initialise priors, centres and variances from target data
+  temp_mix = gmm(net.mdnmixes.dim_target, net.mdnmixes.ncentres, 'spherical');
+  temp_mix = gmminit(temp_mix, t, options);
+  
+  ncentres = net.mdnmixes.ncentres;
+  dim_target = net.mdnmixes.dim_target;
+
+  % Now set parameters in MLP to yield the right values.
+  % This involves setting the biases correctly.
+  
+  % Priors
+  net.mlp.b2(1:ncentres) = temp_mix.priors;
+  
+  % Centres are arranged in mlp such that we have
+  % u11, u12, u13, ..., u1c, ... , uj1, uj2, uj3, ..., ujc, ..., um1, uM2, 
+  % ..., uMc
+  % This is achieved by transposing temp_mix.centres before reshaping
+  end_centres = ncentres*(dim_target+1);
+  net.mlp.b2(ncentres+1:end_centres) = ...
+    reshape(temp_mix.centres', 1, ncentres*dim_target);
+  
+  % Variances
+  net.mlp.b2((end_centres+1):net.mlp.nout) = ...
+    log(temp_mix.covars);
+end
Binary file toolboxes/FullBNT-1.0.7/netlab3.3/mdnnet.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdnpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function w = mdnpak(net)
+%MDNPAK	Combines weights and biases into one weights vector.
+%
+%	Description
+%	W = MDNPAK(NET) takes a mixture density network data structure NET
+%	and  combines the network weights into a single row vector W.
+%
+%	See also
+%	MDN, MDNUNPAK, MDNFWD, MDNERR, MDNGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+errstring = consist(net, 'mdn');
+if ~errstring
+  error(errstring);
+end
+w = mlppak(net.mlp);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdnpost.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function [post, a] = mdnpost(mixparams, t)
+%MDNPOST Computes the posterior probability for each MDN mixture component.
+%
+%	Description
+%	POST = MDNPOST(MIXPARAMS, T) computes the posterior probability
+%	P(J|T) of each data vector in T under the Gaussian mixture model
+%	represented by the corresponding entries in MIXPARAMS. Each row of T
+%	represents a single vector.
+%
+%	[POST, A] = MDNPOST(MIXPARAMS, T) also computes the activations A
+%	(i.e. the probability P(T|J) of the data conditioned on each
+%	component density) for a Gaussian mixture model.
+%
+%	See also
+%	MDNGRAD, MDNPROB
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+[prob a] = mdnprob(mixparams, t);
+
+s = sum(prob, 2);
+% Set any zeros to one before dividing
+s = s + (s==0);
+post = prob./(s*ones(1, mixparams.ncentres));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdnprob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function [prob,a] = mdnprob(mixparams, t)
+%MDNPROB Computes the data probability likelihood for an MDN mixture structure.
+%
+%	Description
+%	PROB = MDNPROB(MIXPARAMS, T) computes the probability P(T) of each
+%	data vector in T under the Gaussian mixture model represented by the
+%	corresponding entries in MIXPARAMS. Each row of T represents a single
+%	vector.
+%
+%	[PROB, A] = MDNPROB(MIXPARAMS, T) also computes the activations A
+%	(i.e. the probability P(T|J) of the data conditioned on each
+%	component density) for a Gaussian mixture model.
+%
+%	See also
+%	MDNERR, MDNPOST
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+% Check arguments for consistency
+errstring = consist(mixparams, 'mdnmixes');
+if ~isempty(errstring)
+  error(errstring);
+end
+
+ntarget    = size(t, 1);
+if ntarget ~= size(mixparams.centres, 1)
+  error('Number of targets does not match number of mixtures')
+end
+if size(t, 2) ~= mixparams.dim_target
+  error('Target dimension does not match mixture dimension')
+end
+
+dim_target = mixparams.dim_target;
+ntarget    = size(t, 1);
+
+% Calculate squared norm matrix, of dimension (ndata, ncentres)
+% vector (ntarget * ncentres)
+dist2 = mdndist2(mixparams, t);
+
+% Calculate variance factors
+variance = 2.*mixparams.covars;
+
+% Compute the normalisation term
+normal  = ((2.*pi).*mixparams.covars).^(dim_target./2);
+
+% Now compute the activations
+a = exp(-(dist2./variance))./normal;
+
+% Accumulate negative log likelihood of targets
+prob = mixparams.mixcoeffs.*a;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mdnunpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function net = mdnunpak(net, w)
+%MDNUNPAK Separates weights vector into weight and bias matrices. 
+%
+%	Description
+%	NET = MDNUNPAK(NET, W) takes an mdn network data structure NET and  a
+%	weight vector W, and returns a network data structure identical to
+%	the input network, except that the weights in the MLP sub-structure
+%	are set to the corresponding elements of W.
+%
+%	See also
+%	MDN, MDNPAK, MDNFWD, MDNERR, MDNGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+%	David J Evans (1998)
+
+errstring = consist(net, 'mdn');
+if ~errstring
+  error(errstring);
+end
+if net.nwts ~= length(w)
+  error('Invalid weight vector length')
+end
+
+net.mlp = mlpunpak(net.mlp, w);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/metrop.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,193 @@
+function [samples, energies, diagn] = metrop(f, x, options, gradf, varargin)
+%METROP	Markov Chain Monte Carlo sampling with Metropolis algorithm.
+%
+%	Description
+%	 SAMPLES = METROP(F, X, OPTIONS) uses the Metropolis algorithm to
+%	sample from the distribution P ~ EXP(-F), where F is the first
+%	argument to METROP.   The Markov chain starts at the point X and each
+%	candidate state is picked from a Gaussian proposal distribution and
+%	accepted or rejected according to the Metropolis criterion.
+%
+%	SAMPLES = METROP(F, X, OPTIONS, [], P1, P2, ...) allows additional
+%	arguments to be passed to F().  The fourth argument is ignored, but
+%	is included for compatibility with HMC and the optimisers.
+%
+%	[SAMPLES, ENERGIES, DIAGN] = METROP(F, X, OPTIONS) also returns a log
+%	of the energy values (i.e. negative log probabilities) for the
+%	samples in ENERGIES and DIAGN, a structure containing diagnostic
+%	information (position and acceptance threshold) for each step of the
+%	chain in DIAGN.POS and DIAGN.ACC respectively.  All candidate states
+%	(including rejected ones) are stored in DIAGN.POS.
+%
+%	S = METROP('STATE') returns a state structure that contains the state
+%	of the two random number generators RAND and RANDN. These are
+%	contained in fields randstate,  randnstate.
+%
+%	METROP('STATE', S) resets the state to S.  If S is an integer, then
+%	it is passed to RAND and RANDN. If S is a structure returned by
+%	METROP('STATE') then it resets the generator to exactly the same
+%	state.
+%
+%	The optional parameters in the OPTIONS vector have the following
+%	interpretations.
+%
+%	OPTIONS(1) is set to 1 to display the energy values and rejection
+%	threshold at each step of the Markov chain. If the value is 2, then
+%	the position vectors at each step are also displayed.
+%
+%	OPTIONS(14) is the number of samples retained from the Markov chain;
+%	default 100.
+%
+%	OPTIONS(15) is the number of samples omitted from the start of the
+%	chain; default 0.
+%
+%	OPTIONS(18) is the variance of the proposal distribution; default 1.
+%
+%	See also
+%	HMC
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if nargin <= 2
+  if ~strcmp(f, 'state')
+    error('Unknown argument to metrop');
+  end
+  switch nargin
+    case 1
+      % Return state of sampler
+      samples = get_state(f);	% Function defined in this module
+      return;
+    case 2
+      % Set the state of the sampler
+      set_state(f, x);		% Function defined in this module
+      return;
+  end
+end
+
+if 0
+seed = 42;
+randn('state', seed);
+rand('state', seed)
+end
+
+display = options(1);
+if options(14) > 0
+  nsamples = options(14);
+else
+  nsamples = 100;
+end
+if options(15) >= 0
+  nomit = options(15);
+else
+  nomit = 0;
+end
+if options(18) > 0.0
+  std_dev = sqrt(options(18));
+else
+  std_dev = 1.0;   % default
+end			
+nparams = length(x);
+
+% Set up string for evaluating potential function.
+f = fcnchk(f, length(varargin));
+
+samples = zeros(nsamples, nparams);		% Matrix of returned samples.
+if nargout >= 2
+  en_save = 1;
+  energies = zeros(nsamples, 1);
+else
+  en_save = 0;
+end
+if nargout >= 3
+  diagnostics = 1;
+  diagn_pos = zeros(nsamples, nparams);
+  diagn_acc = zeros(nsamples, 1);
+else
+  diagnostics = 0;
+end
+
+% Main loop.
+n = - nomit + 1;
+Eold = feval(f, x, varargin{:});	% Evaluate starting energy.
+nreject = 0;				% Initialise count of rejected states.
+while n <= nsamples
+
+  xold = x;
+  % Sample a new point from the proposal distribution
+  x = xold + randn(1, nparams)*std_dev;
+  %fprintf('netlab propose: xold = %5.3f,%5.3f, xnew = %5.3f,%5.3f\n',...
+  %	xold(1), xold(2), x(1), x(2));
+
+  % Now apply Metropolis algorithm.
+  Enew = feval(f, x, varargin{:});	% Evaluate new energy.
+  a = exp(Eold - Enew);			% Acceptance threshold.
+  if (diagnostics & n > 0)
+    diagn_pos(n,:) = x;
+    diagn_acc(n,:) = a;
+  end
+  if (display > 1)
+    fprintf(1, 'New position is\n');
+    disp(x);
+  end
+
+  r = rand(1);
+  %fprintf('netlab: n=%d, a=%f/%f=%5.3f (%5.3f), r=%5.3f\n',...
+  %	  n, exp(-Enew), exp(-Eold), a, exp(-Enew)/exp(-Eold), r);
+  if a > r	% Accept the new state.
+    Eold = Enew;
+    if (display > 0)
+      fprintf(1, 'Finished step %4d  Threshold: %g\n', n, a);
+    end
+  else			% Reject the new state
+    if n > 0
+      nreject = nreject + 1;
+    end
+    x = xold;	% Reset position 
+    if (display > 0)
+      fprintf(1, '  Sample rejected %4d.  Threshold: %g\n', n, a);
+    end
+  end
+  if n > 0
+    samples(n,:) = x;			% Store sample.
+    if en_save 
+      energies(n) = Eold;		% Store energy.
+    end
+  end
+  n = n + 1;
+end
+
+if (display > 0)
+  fprintf(1, '\nFraction of samples rejected:  %g\n', ...
+          nreject/(nsamples));
+end
+
+if diagnostics
+  diagn.pos = diagn_pos;
+  diagn.acc = diagn_acc;
+end
+
+% Return complete state of the sampler.
+function state = get_state(f)
+
+state.randstate = rand('state');
+state.randnstate = randn('state');
+return
+
+% Set state of sampler, either from full state, or with an integer
+function set_state(f, x)
+
+if isnumeric(x)
+  rand('state', x);
+  randn('state', x);
+else
+  if ~isstruct(x)
+    error('Second argument to metrop must be number or state structure');
+  end
+  if (~isfield(x, 'randstate') | ~isfield(x, 'randnstate'))
+    error('Second argument to metrop must contain correct fields')
+  end
+  rand('state', x.randstate);
+  randn('state', x.randnstate);
+end
+return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/minbrack.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,127 @@
+function  [br_min, br_mid, br_max, num_evals] = minbrack(f, a, b, fa,  ...
+			 varargin)
+%MINBRACK Bracket a minimum of a function of one variable.
+%
+%	Description
+%	BRMIN, BRMID, BRMAX, NUMEVALS] = MINBRACK(F, A, B, FA) finds a
+%	bracket of three points around a local minimum of F.  The function F
+%	must have a one dimensional domain. A < B is an initial guess at the
+%	minimum and maximum points of a bracket, but MINBRACK will search
+%	outside this interval if necessary. The bracket consists of three
+%	points (in increasing order) such that F(BRMID) < F(BRMIN) and
+%	F(BRMID) < F(BRMAX). FA is the value of the function at A: it is
+%	included to avoid unnecessary function evaluations in the
+%	optimization routines. The return value NUMEVALS is the number of
+%	function evaluations in MINBRACK.
+%
+%	MINBRACK(F, A, B, FA, P1, P2, ...) allows additional arguments to be
+%	passed to F
+%
+%	See also
+%	LINEMIN, LINEF
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check function string
+f = fcnchk(f, length(varargin));
+
+% Value of golden section (1 + sqrt(5))/2.0
+phi = 1.6180339887499;
+
+% Initialise count of number of function evaluations
+num_evals = 0;
+
+% A small non-zero number to avoid dividing by zero in quadratic interpolation
+TINY = 1.e-10;
+
+% Maximal proportional step to take: don't want to make this too big
+% as then spend a lot of time finding the minimum inside the bracket
+max_step = 10.0;
+
+fb = feval(f, b, varargin{:});
+num_evals = num_evals + 1;
+
+% Assume that we know going from a to b is downhill initially 
+% (usually because gradf(a) < 0).
+if (fb > fa)
+  % Minimum must lie between a and b: do golden section until we find point
+  % low enough to be middle of bracket
+  c = b;
+  b = a + (c-a)/phi;
+  fb = feval(f, b, varargin{:});
+  num_evals = num_evals + 1;
+  while (fb > fa)
+    c = b;
+    b = a + (c-a)/phi;
+    fb = feval(f, b, varargin{:});
+    num_evals = num_evals + 1;
+  end
+else  
+  % There is a valid bracket upper bound greater than b
+  c = b + phi*(b-a);
+  fc = feval(f, c, varargin{:});
+  num_evals = num_evals + 1;
+  bracket_found = 0;
+  
+  while (fb > fc)
+    % Do a quadratic interpolation (i.e. to minimum of quadratic)
+    r = (b-a).*(fb-fc);
+    q = (b-c).*(fb-fa);
+    u = b - ((b-c)*q - (b-a)*r)/(2.0*(sign(q-r)*max([abs(q-r), TINY])));
+    ulimit = b + max_step*(c-b);
+    
+    if ((b-u)'*(u-c) > 0.0)
+      % Interpolant lies between b and c
+      fu = feval(f, u, varargin{:});
+      num_evals = num_evals + 1;
+      if (fu < fc)
+	% Have a minimum between b and c
+	br_min = b;
+	br_mid = u;
+	br_max = c;
+	return;
+      elseif (fu > fb)
+	% Have a minimum between a and u
+	br_min = a;
+	br_mid = c;
+	br_max = u;
+	return;
+      end
+      % Quadratic interpolation didn't give a bracket, so take a golden step
+      u = c + phi*(c-b);
+    elseif ((c-u)'*(u-ulimit) > 0.0)
+      % Interpolant lies between c and limit
+      fu = feval(f, u, varargin{:});
+      num_evals = num_evals + 1;
+      if (fu < fc)
+	% Move bracket along, and then take a golden section step
+	b = c;
+	c = u;
+	u = c + phi*(c-b);
+      else
+	bracket_found = 1;
+      end
+    elseif ((u-ulimit)'*(ulimit-c) >= 0.0)
+      % Limit parabolic u to maximum value
+      u = ulimit;
+    else
+      % Reject parabolic u and use golden section step
+      u = c + phi*(c-b);
+    end
+    if ~bracket_found
+      fu = feval(f, u, varargin{:});
+      num_evals = num_evals + 1;
+    end
+    a = b; b = c; c = u;
+    fa = fb; fb = fc; fc = fu;
+  end % while loop
+end   % bracket found
+br_mid = b;
+if (a < c)
+  br_min = a;
+  br_max = c;
+else
+  br_min = c; 
+  br_max = a;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,92 @@
+function net = mlp(nin, nhidden, nout, outfunc, prior, beta)
+%MLP	Create a 2-layer feedforward network.
+%
+%	Description
+%	NET = MLP(NIN, NHIDDEN, NOUT, FUNC) takes the number of inputs,
+%	hidden units and output units for a 2-layer feed-forward network,
+%	together with a string FUNC which specifies the output unit
+%	activation function, and returns a data structure NET. The weights
+%	are drawn from a zero mean, unit variance isotropic Gaussian, with
+%	varianced scaled by the fan-in of the hidden or output units as
+%	appropriate. This makes use of the Matlab function RANDN and so the
+%	seed for the random weight initialization can be  set using
+%	RANDN('STATE', S) where S is the seed value.  The hidden units use
+%	the TANH activation function.
+%
+%	The fields in NET are
+%	  type = 'mlp'
+%	  nin = number of inputs
+%	  nhidden = number of hidden units
+%	  nout = number of outputs
+%	  nwts = total number of weights and biases
+%	  actfn = string describing the output unit activation function:
+%	      'linear'
+%	      'logistic
+%	      'softmax'
+%	  w1 = first-layer weight matrix
+%	  b1 = first-layer bias vector
+%	  w2 = second-layer weight matrix
+%	  b2 = second-layer bias vector
+%	 Here W1 has dimensions NIN times NHIDDEN, B1 has dimensions 1 times
+%	NHIDDEN, W2 has dimensions NHIDDEN times NOUT, and B2 has dimensions
+%	1 times NOUT.
+%
+%	NET = MLP(NIN, NHIDDEN, NOUT, FUNC, PRIOR), in which PRIOR is a
+%	scalar, allows the field NET.ALPHA in the data structure NET to be
+%	set, corresponding to a zero-mean isotropic Gaussian prior with
+%	inverse variance with value PRIOR. Alternatively, PRIOR can consist
+%	of a data structure with fields ALPHA and INDEX, allowing individual
+%	Gaussian priors to be set over groups of weights in the network. Here
+%	ALPHA is a column vector in which each element corresponds to a
+%	separate group of weights, which need not be mutually exclusive.  The
+%	membership of the groups is defined by the matrix INDX in which the
+%	columns correspond to the elements of ALPHA. Each column has one
+%	element for each weight in the matrix, in the order defined by the
+%	function MLPPAK, and each element is 1 or 0 according to whether the
+%	weight is a member of the corresponding group or not. A utility
+%	function MLPPRIOR is provided to help in setting up the PRIOR data
+%	structure.
+%
+%	NET = MLP(NIN, NHIDDEN, NOUT, FUNC, PRIOR, BETA) also sets the
+%	additional field NET.BETA in the data structure NET, where beta
+%	corresponds to the inverse noise variance.
+%
+%	See also
+%	MLPPRIOR, MLPPAK, MLPUNPAK, MLPFWD, MLPERR, MLPBKP, MLPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+net.type = 'mlp';
+net.nin = nin;
+net.nhidden = nhidden;
+net.nout = nout;
+net.nwts = (nin + 1)*nhidden + (nhidden + 1)*nout;
+
+outfns = {'linear', 'logistic', 'softmax'};
+
+if sum(strcmp(outfunc, outfns)) == 0
+  error('Undefined output function. Exiting.');
+else
+  net.outfn = outfunc;
+end
+
+if nargin > 4
+  if isstruct(prior)
+    net.alpha = prior.alpha;
+    net.index = prior.index;
+  elseif size(prior) == [1 1]
+    net.alpha = prior;
+  else
+    error('prior must be a scalar or a structure');
+  end  
+end
+
+net.w1 = randn(nin, nhidden)/sqrt(nin + 1);
+net.b1 = randn(1, nhidden)/sqrt(nin + 1);
+net.w2 = randn(nhidden, nout)/sqrt(nhidden + 1);
+net.b2 = randn(1, nout)/sqrt(nhidden + 1);
+
+if nargin == 6
+  net.beta = beta;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlpbkp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function g = mlpbkp(net, x, z, deltas)
+%MLPBKP	Backpropagate gradient of error function for 2-layer network.
+%
+%	Description
+%	G = MLPBKP(NET, X, Z, DELTAS) takes a network data structure NET
+%	together with a matrix X of input vectors, a matrix  Z of hidden unit
+%	activations, and a matrix DELTAS of the  gradient of the error
+%	function with respect to the values of the output units (i.e. the
+%	summed inputs to the output units, before the activation function is
+%	applied). The return value is the gradient G of the error function
+%	with respect to the network weights. Each row of X corresponds to one
+%	input vector.
+%
+%	This function is provided so that the common backpropagation
+%	algorithm can be used by multi-layer perceptron network models to
+%	compute gradients for mixture density networks as well as standard
+%	error functions.
+%
+%	See also
+%	MLP, MLPGRAD, MLPDERIV, MDNGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Evaluate second-layer gradients.
+gw2 = z'*deltas;
+gb2 = sum(deltas, 1);
+
+% Now do the backpropagation.
+delhid = deltas*net.w2';
+delhid = delhid.*(1.0 - z.*z);
+
+% Finally, evaluate the first-layer gradients.
+gw1 = x'*delhid;
+gb1 = sum(delhid, 1);
+
+g = [gw1(:)', gb1, gw2(:)', gb2];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlpderiv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+function g = mlpderiv(net, x)
+%MLPDERIV Evaluate derivatives of network outputs with respect to weights.
+%
+%	Description
+%	G = MLPDERIV(NET, X) takes a network data structure NET and a matrix
+%	of input vectors X and returns a three-index matrix G whose I, J, K
+%	element contains the derivative of network output K with respect to
+%	weight or bias parameter J for input pattern I. The ordering of the
+%	weight and bias parameters is defined by MLPUNPAK.
+%
+%	See also
+%	MLP, MLPPAK, MLPGRAD, MLPBKP
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp', x);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+[y, z] = mlpfwd(net, x);
+
+ndata = size(x, 1);
+
+if isfield(net, 'mask')
+  nwts = size(find(net.mask), 1);
+  temp = zeros(1, net.nwts);
+else
+  nwts = net.nwts;
+end
+
+g = zeros(ndata, nwts, net.nout);
+for k = 1 : net.nout
+  delta = zeros(1, net.nout);
+  delta(1, k) = 1;
+  for n = 1 : ndata
+    if isfield(net, 'mask')
+      temp = mlpbkp(net, x(n, :), z(n, :), delta);
+      g(n, :, k) = temp(logical(net.mask));
+    else
+      g(n, :, k) = mlpbkp(net, x(n, :), z(n, :),...
+	delta);
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlperr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+function [e, edata, eprior] = mlperr(net, x, t)
+%MLPERR	Evaluate error function for 2-layer network.
+%
+%	Description
+%	E = MLPERR(NET, X, T) takes a network data structure NET together
+%	with a matrix X of input vectors and a matrix T of target vectors,
+%	and evaluates the error function E. The choice of error function
+%	corresponds to the output unit activation function. Each row of X
+%	corresponds to one input vector and each row of T corresponds to one
+%	target vector.
+%
+%	[E, EDATA, EPRIOR] = MLPERR(NET, X, T) additionally returns the data
+%	and prior components of the error, assuming a zero mean Gaussian
+%	prior on the weights with inverse variance parameters ALPHA and BETA
+%	taken from the network data structure NET.
+%
+%	See also
+%	MLP, MLPPAK, MLPUNPAK, MLPFWD, MLPBKP, MLPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+[y, z, a] = mlpfwd(net, x);
+
+switch net.outfn
+
+  case 'linear'        % Linear outputs
+    edata = 0.5*sum(sum((y - t).^2));
+
+  case 'logistic'      % Logistic outputs
+    % Ensure that log(1-y) is computable: need exp(a) > eps
+    maxcut = -log(eps);
+    % Ensure that log(y) is computable
+    mincut = -log(1/realmin - 1);
+    a = min(a, maxcut);
+    a = max(a, mincut);
+    y = 1./(1 + exp(-a));
+    edata = - sum(sum(t.*log(y) + (1 - t).*log(1 - y)));
+
+  case 'softmax'       % Softmax outputs
+    nout = size(a,2);
+    % Ensure that sum(exp(a), 2) does not overflow
+    maxcut = log(realmax) - log(nout);
+    % Ensure that exp(a) > 0
+    mincut = log(realmin);
+    a = min(a, maxcut);
+    a = max(a, mincut);
+    temp = exp(a);
+    y = temp./(sum(temp, 2)*ones(1,nout));
+    % Ensure that log(y) is computable
+    y(y<realmin) = realmin;
+    edata = - sum(sum(t.*log(y)));
+
+  otherwise
+    error(['Unknown activation function ', net.outfn]);  
+end
+[e, edata, eprior] = errbayes(net, edata);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlpevfwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function [y, extra, invhess] = mlpevfwd(net, x, t, x_test, invhess)
+%MLPEVFWD Forward propagation with evidence for MLP
+%
+%	Description
+%	Y = MLPEVFWD(NET, X, T, X_TEST) takes a network data structure  NET
+%	together with the input X and target T training data and input test
+%	data X_TEST. It returns the normal forward propagation through the
+%	network Y together with a matrix EXTRA which consists of error bars
+%	(variance) for a regression problem or moderated outputs for a
+%	classification problem. The optional argument (and return value)
+%	INVHESS is the inverse of the network Hessian computed on the
+%	training data inputs and targets.  Passing it in avoids recomputing
+%	it, which can be a significant saving for large training sets.
+%
+%	See also
+%	FEVBAYES
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[y, z, a] = mlpfwd(net, x_test);
+if nargin == 4
+  [extra, invhess] = fevbayes(net, y, a, x, t, x_test);
+else
+  [extra, invhess] = fevbayes(net, y, a, x, t, x_test, invhess);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlpfwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function [y, z, a] = mlpfwd(net, x)
+%MLPFWD	Forward propagation through 2-layer network.
+%
+%	Description
+%	Y = MLPFWD(NET, X) takes a network data structure NET together with a
+%	matrix X of input vectors, and forward propagates the inputs through
+%	the network to generate a matrix Y of output vectors. Each row of X
+%	corresponds to one input vector and each row of Y corresponds to one
+%	output vector.
+%
+%	[Y, Z] = MLPFWD(NET, X) also generates a matrix Z of the hidden unit
+%	activations where each row corresponds to one pattern.
+%
+%	[Y, Z, A] = MLPFWD(NET, X) also returns a matrix A  giving the summed
+%	inputs to each output unit, where each row corresponds to one
+%	pattern.
+%
+%	See also
+%	MLP, MLPPAK, MLPUNPAK, MLPERR, MLPBKP, MLPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp', x);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+ndata = size(x, 1);
+
+z = tanh(x*net.w1 + ones(ndata, 1)*net.b1);
+a = z*net.w2 + ones(ndata, 1)*net.b2;
+
+switch net.outfn
+
+  case 'linear'    % Linear outputs
+
+    y = a;
+
+  case 'logistic'  % Logistic outputs
+    % Prevent overflow and underflow: use same bounds as mlperr
+    % Ensure that log(1-y) is computable: need exp(a) > eps
+    maxcut = -log(eps);
+    % Ensure that log(y) is computable
+    mincut = -log(1/realmin - 1);
+    a = min(a, maxcut);
+    a = max(a, mincut);
+    y = 1./(1 + exp(-a));
+
+  case 'softmax'   % Softmax outputs
+  
+    % Prevent overflow and underflow: use same bounds as glmerr
+    % Ensure that sum(exp(a), 2) does not overflow
+    maxcut = log(realmax) - log(net.nout);
+    % Ensure that exp(a) > 0
+    mincut = log(realmin);
+    a = min(a, maxcut);
+    a = max(a, mincut);
+    temp = exp(a);
+    y = temp./(sum(temp, 2)*ones(1, net.nout));
+
+  otherwise
+    error(['Unknown activation function ', net.outfn]);  
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlpgrad.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+function [g, gdata, gprior] = mlpgrad(net, x, t)
+%MLPGRAD Evaluate gradient of error function for 2-layer network.
+%
+%	Description
+%	G = MLPGRAD(NET, X, T) takes a network data structure NET  together
+%	with a matrix X of input vectors and a matrix T of target vectors,
+%	and evaluates the gradient G of the error function with respect to
+%	the network weights. The error funcion corresponds to the choice of
+%	output unit activation function. Each row of X corresponds to one
+%	input vector and each row of T corresponds to one target vector.
+%
+%	[G, GDATA, GPRIOR] = MLPGRAD(NET, X, T) also returns separately  the
+%	data and prior contributions to the gradient. In the case of multiple
+%	groups in the prior, GPRIOR is a matrix with a row for each group and
+%	a column for each weight parameter.
+%
+%	See also
+%	MLP, MLPPAK, MLPUNPAK, MLPFWD, MLPERR, MLPBKP
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+[y, z] = mlpfwd(net, x);
+delout = y - t;
+
+gdata = mlpbkp(net, x, z, delout);
+
+[g, gdata, gprior] = gbayes(net, gdata);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlphdotv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+function hdv = mlphdotv(net, x, t, v)
+%MLPHDOTV Evaluate the product of the data Hessian with a vector. 
+%
+%	Description
+%
+%	HDV = MLPHDOTV(NET, X, T, V) takes an MLP network data structure NET,
+%	together with the matrix X of input vectors, the matrix T of target
+%	vectors and an arbitrary row vector V whose length equals the number
+%	of parameters in the network, and returns the product of the data-
+%	dependent contribution to the Hessian matrix with V. The
+%	implementation is based on the R-propagation algorithm of
+%	Pearlmutter.
+%
+%	See also
+%	MLP, MLPHESS, HESSCHEK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+ndata = size(x, 1);
+
+[y, z] = mlpfwd(net, x);		% Standard forward propagation.
+zprime = (1 - z.*z);			% Hidden unit first derivatives.
+zpprime = -2.0*z.*zprime;		% Hidden unit second derivatives.
+
+vnet = mlpunpak(net, v);	% 		Unpack the v vector.
+
+% Do the R-forward propagation.
+
+ra1 = x*vnet.w1 + ones(ndata, 1)*vnet.b1;
+rz = zprime.*ra1;
+ra2 = rz*net.w2 + z*vnet.w2 + ones(ndata, 1)*vnet.b2;
+
+switch net.outfn
+
+  case 'linear'      % Linear outputs
+
+    ry = ra2;
+
+  case 'logistic'    % Logistic outputs
+
+    ry = y.*(1 - y).*ra2;
+
+  case 'softmax'     % Softmax outputs
+  
+    nout = size(t, 2);
+    ry = y.*ra2 - y.*(sum(y.*ra2, 2)*ones(1, nout));
+
+  otherwise
+    error(['Unknown activation function ', net.outfn]);  
+end
+
+% Evaluate delta for the output units.
+
+delout = y - t;
+
+% Do the standard backpropagation.
+
+delhid = zprime.*(delout*net.w2');
+
+% Now do the R-backpropagation.
+
+rdelhid = zpprime.*ra1.*(delout*net.w2') + zprime.*(delout*vnet.w2') + ...
+          zprime.*(ry*net.w2');
+
+% Finally, evaluate the components of hdv and then merge into long vector.
+
+hw1 = x'*rdelhid;
+hb1 = sum(rdelhid, 1);
+hw2 = z'*ry + rz'*delout;
+hb2 = sum(ry, 1);
+
+hdv = [hw1(:)', hb1, hw2(:)', hb2];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlphess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+function [h, hdata] = mlphess(net, x, t, hdata)
+%MLPHESS Evaluate the Hessian matrix for a multi-layer perceptron network.
+%
+%	Description
+%	H = MLPHESS(NET, X, T) takes an MLP network data structure NET, a
+%	matrix X of input values, and a matrix T of target values and returns
+%	the full Hessian matrix H corresponding to the second derivatives of
+%	the negative log posterior distribution, evaluated for the current
+%	weight and bias values as defined by NET.
+%
+%	[H, HDATA] = MLPHESS(NET, X, T) returns both the Hessian matrix H and
+%	the contribution HDATA arising from the data dependent term in the
+%	Hessian.
+%
+%	H = MLPHESS(NET, X, T, HDATA) takes a network data structure NET, a
+%	matrix X of input values, and a matrix T of  target values, together
+%	with the contribution HDATA arising from the data dependent term in
+%	the Hessian, and returns the full Hessian matrix H corresponding to
+%	the second derivatives of the negative log posterior distribution.
+%	This version saves computation time if HDATA has already been
+%	evaluated for the current weight and bias values.
+%
+%	See also
+%	MLP, HESSCHEK, MLPHDOTV, EVIDENCE
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+if nargin == 3
+  % Data term in Hessian needs to be computed
+  hdata = datahess(net, x, t);
+end
+
+[h, hdata] = hbayes(net, hdata);
+
+% Sub-function to compute data part of Hessian
+function hdata = datahess(net, x, t)
+
+hdata = zeros(net.nwts, net.nwts);
+
+for v = eye(net.nwts);
+  hdata(find(v),:) = mlphdotv(net, x, t, v);
+end
+
+return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlphint.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,92 @@
+function [h1, h2] = mlphint(net);
+%MLPHINT Plot Hinton diagram for 2-layer feed-forward network.
+%
+%	Description
+%
+%	MLPHINT(NET) takes a network structure NET and plots the Hinton
+%	diagram comprised of two figure windows, one displaying the first-
+%	layer weights and biases, and one displaying the second-layer weights
+%	and biases.
+%
+%	[H1, H2] = MLPHINT(NET) also returns handles H1 and  H2 to the
+%	figures which can be used, for instance, to delete the  figures when
+%	they are no longer needed.
+%
+%	To print the figure correctly, you should call SET(H,
+%	'INVERTHARDCOPY', 'ON') before printing.
+%
+%	See also
+%	DEMHINT, HINTMAT, MLP, MLPPAK, MLPUNPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Set scale to be up to 0.9 of maximum absolute weight value, where scale
+% defined so that area of box proportional to weight value.
+
+% Use no more than 640x480 pixels
+xmax = 640; ymax = 480;
+
+% Offset bottom left hand corner
+x01 = 40; y01 = 40;
+x02 = 80; y02 = 80;
+
+% Need to allow 5 pixels border for window frame: but 30 at top
+border = 5;
+top_border = 30;
+
+ymax = ymax - top_border;
+xmax = xmax - border;
+
+% First layer
+
+wb1 = [net.w1; net.b1];
+[xvals, yvals, color] = hintmat(wb1');
+% Try to preserve aspect ratio approximately
+if (8*net.nhidden < 6*(net.nin + 1))
+  delx = xmax; dely = xmax*net.nhidden/(net.nin + 1);
+else
+  delx = ymax*(net.nin + 1)/net.nhidden; dely = ymax;
+end
+
+h1 = figure('Color', [0.5 0.5 0.5], ...
+  'Name', 'Hinton diagram: first-layer weights and biases', ...
+  'NumberTitle', 'off', ...
+  'Colormap', [0 0 0; 1 1 1], ...
+  'Units', 'pixels', ...
+  'Position', [x01 y01 delx dely]);
+set(gca, 'Visible', 'off', 'Position', [0 0 1 1]);
+hold on
+
+cmap = [0 0 0; 1 1 1];
+colors(1, :, :) = cmap(color, :);
+patch(xvals', yvals', colors, 'Edgecolor', 'none');
+axis equal;
+xpos = net.nin;
+line([xpos xpos], [0 net.nhidden], 'color', 'red', 'linewidth', 3);
+
+% Second layer
+
+wb2 = [net.w2; net.b2];
+[xvals, yvals, color] = hintmat(wb2');
+if (8*net.nout < 6*(net.nhidden + 1))
+  delx = xmax; dely = xmax*net.nout/(net.nhidden + 1);
+else
+  delx = ymax*(net.nhidden + 1)/net.nout; dely = ymax;
+end
+
+h2 = figure('Color', [0.5 0.5 0.5], ...
+  'Name', 'Hinton diagram: second-layer weights and biases', ...
+  'NumberTitle', 'off', ...
+  'Colormap', [0 0 0; 1 1 1], ...  
+  'Units', 'pixels', ...
+  'Position', [x02 y02 delx dely]);
+set(gca, 'Visible', 'off', 'Position', [0 0 1 1]);
+
+hold on
+colors2(1, :, :) = cmap(color, :);
+patch(xvals', yvals', colors2, 'Edgecolor', 'none');
+axis equal;
+xpos = net.nhidden;
+line([xpos xpos], [0 net.nout], 'color', 'red', 'linewidth', 3);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlpinit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function net = mlpinit(net, prior)
+%MLPINIT Initialise the weights in a 2-layer feedforward network.
+%
+%	Description
+%
+%	NET = MLPINIT(NET, PRIOR) takes a 2-layer feedforward network NET and
+%	sets the weights and biases by sampling from a Gaussian distribution.
+%	If PRIOR is a scalar, then all of the parameters (weights and biases)
+%	are sampled from a single isotropic Gaussian with inverse variance
+%	equal to PRIOR. If PRIOR is a data structure of the kind generated by
+%	MLPPRIOR, then the parameters are sampled from multiple Gaussians
+%	according to their groupings (defined by the INDEX field) with
+%	corresponding variances (defined by the ALPHA field).
+%
+%	See also
+%	MLP, MLPPRIOR, MLPPAK, MLPUNPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if isstruct(prior)
+  sig = 1./sqrt(prior.index*prior.alpha);
+  w = sig'.*randn(1, net.nwts); 
+elseif size(prior) == [1 1]
+  w = randn(1, net.nwts).*sqrt(1/prior);
+else
+  error('prior must be a scalar or a structure');
+end  
+
+net = mlpunpak(net, w);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlppak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function w = mlppak(net)
+%MLPPAK	Combines weights and biases into one weights vector.
+%
+%	Description
+%	W = MLPPAK(NET) takes a network data structure NET and combines the
+%	component weight matrices bias vectors into a single row vector W.
+%	The facility to switch between these two representations for the
+%	network parameters is useful, for example, in training a network by
+%	error function minimization, since a single vector of parameters can
+%	be handled by general-purpose optimization routines.
+%
+%	The ordering of the paramters in W is defined by
+%	  w = [net.w1(:)', net.b1, net.w2(:)', net.b2];
+%	 where W1 is the first-layer weight matrix, B1 is the first-layer
+%	bias vector, W2 is the second-layer weight matrix, and B2 is the
+%	second-layer bias vector.
+%
+%	See also
+%	MLP, MLPUNPAK, MLPFWD, MLPERR, MLPBKP, MLPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp');
+if ~isempty(errstring);
+  error(errstring);
+end
+
+w = [net.w1(:)', net.b1, net.w2(:)', net.b2];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlpprior.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+function prior = mlpprior(nin, nhidden, nout, aw1, ab1, aw2, ab2)
+%MLPPRIOR Create Gaussian prior for mlp.
+%
+%	Description
+%	PRIOR = MLPPRIOR(NIN, NHIDDEN, NOUT, AW1, AB1, AW2, AB2)  generates a
+%	data structure PRIOR, with fields PRIOR.ALPHA and PRIOR.INDEX, which
+%	specifies a Gaussian prior distribution for the network weights in a
+%	two-layer feedforward network. Two different cases are possible. In
+%	the first case, AW1, AB1, AW2 and AB2 are all scalars and represent
+%	the regularization coefficients for four groups of parameters in the
+%	network corresponding to first-layer weights, first-layer biases,
+%	second-layer weights, and second-layer biases respectively. Then
+%	PRIOR.ALPHA represents a column vector of length 4 containing the
+%	parameters, and PRIOR.INDEX is a matrix specifying which weights
+%	belong in each group. Each column has one element for each weight in
+%	the matrix, using the standard ordering as defined in MLPPAK, and
+%	each element is 1 or 0 according to whether the weight is a member of
+%	the corresponding group or not.  In the second case the parameter AW1
+%	is a vector of length equal to the number of inputs in the network,
+%	and the corresponding matrix PRIOR.INDEX now partitions the first-
+%	layer weights into groups corresponding to the weights fanning out of
+%	each input unit. This  prior is appropriate for the technique of
+%	automatic relevance determination.
+%
+%	See also
+%	MLP, MLPERR, MLPGRAD, EVIDENCE
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+nextra = nhidden + (nhidden + 1)*nout;
+nwts = nin*nhidden + nextra;
+
+if size(aw1) == [1,1] 
+
+    indx = [ones(1, nin*nhidden), zeros(1, nextra)]';
+  
+elseif size(aw1) == [1, nin]
+  
+    indx = kron(ones(nhidden, 1), eye(nin));
+    indx = [indx; zeros(nextra, nin)];
+
+else
+  
+    error('Parameter aw1 of invalid dimensions');
+    
+end
+
+extra = zeros(nwts, 3);
+
+mark1 = nin*nhidden;
+mark2 = mark1 + nhidden;
+extra(mark1 + 1:mark2, 1) = ones(nhidden,1);
+mark3 = mark2 + nhidden*nout;
+extra(mark2 + 1:mark3, 2) = ones(nhidden*nout,1);
+mark4 = mark3 + nout;
+extra(mark3 + 1:mark4, 3) = ones(nout,1);
+
+indx = [indx, extra];
+
+prior.index = indx;
+prior.alpha = [aw1, ab1, aw2, ab2]';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlptrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function [net, error] = mlptrain(net, x, t, its);
+%MLPTRAIN Utility to train an MLP network for demtrain
+%
+%	Description
+%
+%	[NET, ERROR] = MLPTRAIN(NET, X, T, ITS) trains a network data
+%	structure NET using the scaled conjugate gradient algorithm  for ITS
+%	cycles with input data X, target data T.
+%
+%	See also
+%	DEMTRAIN, SCG, NETOPT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+options = zeros(1,18);
+options(1) = -1;	% To prevent any messages at all
+options(9) = 0;
+options(14) = its;
+
+[net, options] = netopt(net, options, x, t, 'scg');
+
+error = options(8);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/mlpunpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function net = mlpunpak(net, w)
+%MLPUNPAK Separates weights vector into weight and bias matrices. 
+%
+%	Description
+%	NET = MLPUNPAK(NET, W) takes an mlp network data structure NET and  a
+%	weight vector W, and returns a network data structure identical to
+%	the input network, except that the first-layer weight matrix W1, the
+%	first-layer bias vector B1, the second-layer weight matrix W2 and the
+%	second-layer bias vector B2 have all been set to the corresponding
+%	elements of W.
+%
+%	See also
+%	MLP, MLPPAK, MLPFWD, MLPERR, MLPBKP, MLPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp');
+if ~isempty(errstring);
+  error(errstring);
+end
+
+if net.nwts ~= length(w)
+  error('Invalid weight vector length')
+end
+
+nin = net.nin;
+nhidden = net.nhidden;
+nout = net.nout;
+
+mark1 = nin*nhidden;
+net.w1 = reshape(w(1:mark1), nin, nhidden);
+mark2 = mark1 + nhidden;
+net.b1 = reshape(w(mark1 + 1: mark2), 1, nhidden);
+mark3 = mark2 + nhidden*nout;
+net.w2 = reshape(w(mark2 + 1: mark3), nhidden, nout);
+mark4 = mark3 + nout;
+net.b2 = reshape(w(mark3 + 1: mark4), 1, nout);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/netderiv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function g = netderiv(w, net, x)
+%NETDERIV Evaluate derivatives of network outputs by weights generically.
+%
+%	Description
+%
+%	G = NETDERIV(W, NET, X) takes a weight vector W and a network data
+%	structure NET, together with the matrix X of input vectors, and
+%	returns the gradient of the outputs with respect to the weights
+%	evaluated at W.
+%
+%	See also
+%	NETEVFWD, NETOPT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+fstr = [net.type, 'deriv'];
+net = netunpak(net, w);
+g = feval(fstr, net, x);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/neterr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function [e, varargout] = neterr(w, net, x, t)
+%NETERR	Evaluate network error function for generic optimizers
+%
+%	Description
+%
+%	E = NETERR(W, NET, X, T) takes a weight vector W and a network data
+%	structure NET, together with the matrix X of input vectors and the
+%	matrix T of target vectors, and returns the value of the error
+%	function evaluated at W.
+%
+%	[E, VARARGOUT] = NETERR(W, NET, X, T) also returns any additional
+%	return values from the error function.
+%
+%	See also
+%	NETGRAD, NETHESS, NETOPT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstr = [net.type, 'err'];
+net = netunpak(net, w);
+
+[s{1:nargout}] = feval(errstr, net, x, t);
+e = s{1};
+if nargout > 1
+  for i = 2:nargout
+    varargout{i-1} = s{i};
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/netevfwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function [y, extra, invhess] = netevfwd(w, net, x, t, x_test, invhess)
+%NETEVFWD Generic forward propagation with evidence for network
+%
+%	Description
+%	[Y, EXTRA] = NETEVFWD(W, NET, X, T, X_TEST) takes a network data
+%	structure  NET together with the input X and target T training data
+%	and input test data X_TEST. It returns the normal forward propagation
+%	through the network Y together with a matrix EXTRA which consists of
+%	error bars (variance) for a regression problem or moderated outputs
+%	for a classification problem.
+%
+%	The optional argument (and return value)  INVHESS is the inverse of
+%	the network Hessian computed on the training data inputs and targets.
+%	Passing it in avoids recomputing it, which can be a significant
+%	saving for large training sets.
+%
+%	See also
+%	MLPEVFWD, RBFEVFWD, GLMEVFWD, FEVBAYES
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+func = [net.type, 'evfwd'];
+net = netunpak(net, w);
+if nargin == 5
+  [y, extra, invhess] = feval(func, net, x, t, x_test);
+else
+  [y, extra, invhess] = feval(func, net, x, t, x_test, invhess);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/netgrad.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function g = netgrad(w, net, x, t)
+%NETGRAD Evaluate network error gradient for generic optimizers
+%
+%	Description
+%
+%	G = NETGRAD(W, NET, X, T) takes a weight vector W and a network data
+%	structure NET, together with the matrix X of input vectors and the
+%	matrix T of target vectors, and returns the gradient of the error
+%	function evaluated at W.
+%
+%	See also
+%	MLP, NETERR, NETOPT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+gradstr = [net.type, 'grad'];
+
+net = netunpak(net, w);
+
+g = feval(gradstr, net, x, t);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/nethess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function [h, varargout] = nethess(w, net, x, t, varargin)
+%NETHESS Evaluate network Hessian
+%
+%	Description
+%
+%	H = NETHESS(W, NET, X, T) takes a weight vector W and a network data
+%	structure NET, together with the matrix X of input vectors and the
+%	matrix T of target vectors, and returns the value of the Hessian
+%	evaluated at W.
+%
+%	[E, VARARGOUT] = NETHESS(W, NET, X, T, VARARGIN) also returns any
+%	additional return values from the network Hessian function, and
+%	passes additional arguments to that function.
+%
+%	See also
+%	NETERR, NETGRAD, NETOPT
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+hess_str = [net.type, 'hess'];
+
+net = netunpak(net, w);
+
+[s{1:nargout}] = feval(hess_str, net, x, t, varargin{:});
+h = s{1};
+for i = 2:nargout
+  varargout{i-1} = s{i};
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/netinit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function net = netinit(net, prior)
+%NETINIT Initialise the weights in a network.
+%
+%	Description
+%
+%	NET = NETINIT(NET, PRIOR) takes a network data structure NET and sets
+%	the weights and biases by sampling from a Gaussian distribution. If
+%	PRIOR is a scalar, then all of the parameters (weights and biases)
+%	are sampled from a single isotropic Gaussian with inverse variance
+%	equal to PRIOR. If PRIOR is a data structure of the kind generated by
+%	MLPPRIOR, then the parameters are sampled from multiple Gaussians
+%	according to their groupings (defined by the INDEX field) with
+%	corresponding variances (defined by the ALPHA field).
+%
+%	See also
+%	MLPPRIOR, NETUNPAK, RBFPRIOR
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if isstruct(prior)
+    if (isfield(net, 'mask'))
+	if find(sum(prior.index, 2)) ~= find(net.mask)
+	    error('Index does not match mask');
+	end
+	sig = sqrt(prior.index*prior.alpha);
+	% Weights corresponding to zeros in mask will not be used anyway
+	% Set their priors to one to avoid division by zero
+	sig = sig + (sig == 0);  
+	sig = 1./sqrt(sig);
+    else
+	sig = 1./sqrt(prior.index*prior.alpha);
+    end
+    w = sig'.*randn(1, net.nwts); 
+elseif size(prior) == [1 1]
+  w = randn(1, net.nwts).*sqrt(1/prior);
+else
+  error('prior must be a scalar or a structure');
+end  
+
+if (isfield(net, 'mask'))
+    w = w(logical(net.mask));
+end
+net = netunpak(net, w);
+
Binary file toolboxes/FullBNT-1.0.7/netlab3.3/netlab3.3.zip has changed
Binary file toolboxes/FullBNT-1.0.7/netlab3.3/netlogo.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/netopt.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function [net, options, varargout] = netopt(net, options, x, t, alg);
+%NETOPT	Optimize the weights in a network model. 
+%
+%	Description
+%
+%	NETOPT is a helper function which facilitates the training of
+%	networks using the general purpose optimizers as well as sampling
+%	from the posterior distribution of parameters using general purpose
+%	Markov chain Monte Carlo sampling algorithms. It can be used with any
+%	function that searches in parameter space using error and gradient
+%	functions.
+%
+%	[NET, OPTIONS] = NETOPT(NET, OPTIONS, X, T, ALG) takes a network
+%	data structure NET, together with a vector OPTIONS of parameters
+%	governing the behaviour of the optimization algorithm, a matrix X of
+%	input vectors and a matrix T of target vectors, and returns the
+%	trained network as well as an updated OPTIONS vector. The string ALG
+%	determines which optimization algorithm (CONJGRAD, QUASINEW, SCG,
+%	etc.) or Monte Carlo algorithm (such as HMC) will be used.
+%
+%	[NET, OPTIONS, VARARGOUT] = NETOPT(NET, OPTIONS, X, T, ALG) also
+%	returns any additional return values from the optimisation algorithm.
+%
+%	See also
+%	NETGRAD, BFGS, CONJGRAD, GRADDESC, HMC, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+optstring = [alg, '(''neterr'', w, options, ''netgrad'', net, x, t)'];
+
+% Extract weights from network as single vector
+w = netpak(net);
+
+% Carry out optimisation
+[s{1:nargout}] = eval(optstring);
+w = s{1};
+
+if nargout > 1
+  options = s{2};
+
+  % If there are additional arguments, extract them
+  nextra = nargout - 2;
+  if nextra > 0
+    for i = 1:nextra
+      varargout{i} = s{i+2};
+    end
+  end
+end
+
+% Pack the weights back into the network
+net = netunpak(net, w);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/netpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function w = netpak(net)
+%NETPAK	Combines weights and biases into one weights vector.
+%
+%	Description
+%	W = NETPAK(NET) takes a network data structure NET and combines the
+%	component weight matrices  into a single row vector W. The facility
+%	to switch between these two representations for the network
+%	parameters is useful, for example, in training a network by error
+%	function minimization, since a single vector of parameters can be
+%	handled by general-purpose optimization routines.  This function also
+%	takes into account a MASK defined as a field in NET by removing any
+%	weights that correspond to entries of 0 in the mask.
+%
+%	See also
+%	NET, NETUNPAK, NETFWD, NETERR, NETGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+pakstr = [net.type, 'pak'];
+w = feval(pakstr, net);
+% Return masked subset of weights
+if (isfield(net, 'mask'))
+   w = w(logical(net.mask));
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/netunpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+function net = netunpak(net, w)
+%NETUNPAK Separates weights vector into weight and bias matrices. 
+%
+%	Description
+%	NET = NETUNPAK(NET, W) takes an net network data structure NET and  a
+%	weight vector W, and returns a network data structure identical to
+%	the input network, except that the componenet weight matrices have
+%	all been set to the corresponding elements of W.  If there is  a MASK
+%	field in the NET data structure, then the weights in W are placed in
+%	locations corresponding to non-zero entries in the mask (so W should
+%	have the same length as the number of non-zero entries in the MASK).
+%
+%	See also
+%	NETPAK, NETFWD, NETERR, NETGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+unpakstr = [net.type, 'unpak'];
+
+% Check if we are being passed a masked set of weights
+if (isfield(net, 'mask'))
+   if length(w) ~= size(find(net.mask), 1)
+      error('Weight vector length does not match mask length')
+   end
+   % Do a full pack of all current network weights
+   pakstr = [net.type, 'pak'];
+   fullw = feval(pakstr, net);
+   % Replace current weights with new ones
+   fullw(logical(net.mask)) = w;
+   w = fullw;
+end
+
+net = feval(unpakstr, net, w);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/oilTrn.dat	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,503 @@
+ nin   12
+ nout  2
+ ndata 500
+ 3.315000e-01  2.156000e-01  6.802000e-01  1.434000e-01  6.825000e-01  2.720000e-01  6.223000e-01  2.092000e-01  7.961000e-01  1.530000e-01  5.856000e-01  2.573000e-01  3.440000e-01  1.401000e-01 
+ 9.390000e-02  1.008900e+00  3.650000e-02  6.944000e-01  9.080000e-02  4.961000e-01  7.220000e-02  6.521000e-01 -1.300000e-02  6.085000e-01  6.310000e-02  6.597000e-01  5.140000e-02  4.459000e-01 
+ 5.184000e-01  2.283000e-01  5.300000e-01  6.884000e-01  7.456000e-01  6.171000e-01  6.136000e-01  5.928000e-01  7.678000e-01  6.130000e-01  6.705000e-01  5.202000e-01  3.710000e-01  3.214000e-01 
+ 4.208000e-01  6.740000e-01  1.651000e-01  7.592000e-01  1.810000e-01  5.448000e-01  1.707000e-01  7.554000e-01  1.635000e-01  5.492000e-01  2.598000e-01  6.455000e-01  1.667000e-01  4.177000e-01 
+ 3.130000e-01  6.465000e-01  5.908000e-01  6.924000e-01  7.664000e-01  6.262000e-01  1.717700e+00  1.500000e-02  8.510000e-02  1.904600e+00 -1.650000e-02  2.210000e-02  3.378000e-01  4.184000e-01 
+ 1.145800e+00 -4.670000e-02  4.056000e-01  5.662000e-01  3.123000e-01  4.580000e-01  3.636000e-01  6.134000e-01  3.305000e-01  4.132000e-01  4.167000e-01  5.514000e-01  3.249000e-01  2.790000e-01 
+-1.900000e-03  1.732000e-01  5.700000e-03  4.882000e-01  2.076000e-01  3.910000e-01  8.600000e-03  1.719800e+00  2.150000e-02 -2.580000e-02  6.730000e-02 -8.290000e-02  5.100000e-02  2.123000e-01 
+ 7.800000e-03  4.615000e-01  1.181000e-01  6.590000e-01  2.587000e-01  6.352000e-01 -1.910000e-02  1.749100e+00  1.098000e-01 -1.315000e-01  4.070000e-02 -4.850000e-02  6.210000e-02  3.856000e-01 
+ 7.305000e-01  1.189000e-01  1.062600e+00  1.013000e-01  1.138500e+00  1.486000e-01  1.763100e+00 -4.160000e-02  2.073100e+00 -8.720000e-02 -4.390000e-02  5.300000e-02  6.070000e-01  8.130000e-02 
+ 6.199000e-01  4.779000e-01  9.528000e-01  7.463000e-01  9.741000e-01  8.633000e-01  1.677100e+00  6.200000e-02  2.027100e+00 -3.010000e-02  1.510000e-02  1.714700e+00  5.065000e-01  4.589000e-01 
+ 1.130800e+00 -2.860000e-02  1.000500e+00  7.387000e-01  8.390000e-01  1.874000e-01  1.084800e+00  6.374000e-01  8.534000e-01  1.373000e-01  1.042200e+00  6.836000e-01  6.215000e-01  1.323000e-01 
+ 5.093000e-01  6.038000e-01  2.874000e-01  8.162000e-01  2.267000e-01  6.181000e-01  2.646000e-01  8.490000e-01  3.365000e-01  4.648000e-01  2.815000e-01  8.254000e-01  2.280000e-01  4.243000e-01 
+ 7.600000e-02  5.010000e-01  1.870000e-01  7.011000e-01  1.728000e-01  8.475000e-01  2.300000e-01  6.536000e-01  1.616000e-01  8.732000e-01  1.603000e-01  7.331000e-01  9.550000e-02  4.203000e-01 
+ 4.662000e-01  1.209000e-01  7.657000e-01  1.390000e-01  8.886000e-01  1.304000e-01  1.694000e+00  4.530000e-02 -1.170000e-02  2.011100e+00 -1.940000e-02  2.170000e-02  4.422000e-01  7.900000e-02 
+ 1.125400e+00 -2.520000e-02  6.776000e-01  1.793000e-01  4.287000e-01  2.804000e-01  6.003000e-01  2.737000e-01  4.541000e-01  2.370000e-01  6.775000e-01  1.850000e-01  4.369000e-01  1.284000e-01 
+ 3.334000e-01  5.468000e-01  6.072000e-01  7.549000e-01  6.294000e-01  9.322000e-01  5.850000e-01  7.859000e-01  6.324000e-01  9.568000e-01  6.026000e-01  7.616000e-01  3.277000e-01  4.629000e-01 
+ 3.760000e-02  7.113000e-01  4.992000e-01  5.377000e-01  6.049000e-01  5.530000e-01  1.663500e+00  8.210000e-02 -1.890000e-02  2.024100e+00  1.400000e-03 -3.000000e-03  2.534000e-01  3.568000e-01 
+ 1.703000e-01  2.234000e-01  2.677000e-01  3.477000e-01  2.734000e-01  4.324000e-01  1.222000e-01  5.213000e-01  2.333000e-01  4.926000e-01  2.044000e-01  4.215000e-01  1.407000e-01  2.175000e-01 
+ 1.328000e-01  2.144000e-01  2.466000e-01  2.912000e-01  3.244000e-01  2.815000e-01  1.586000e-01  3.982000e-01  3.165000e-01  3.005000e-01  3.038000e-01  2.239000e-01  1.300000e-01  1.831000e-01 
+ 1.106900e+00 -1.500000e-03  1.787100e+00 -7.230000e-02  1.038900e+00  7.086000e-01  1.672800e+00  7.010000e-02  1.008300e+00  5.901000e-01  1.740500e+00 -1.880000e-02  7.498000e-01  2.096000e-01 
+ 1.083700e+00  2.940000e-02  6.675000e-01  5.421000e-01  5.040000e-01  3.997000e-01  7.271000e-01  4.673000e-01  6.061000e-01  2.526000e-01  7.957000e-01  3.861000e-01  4.794000e-01  1.997000e-01 
+ 6.379000e-01  3.709000e-01  9.139000e-01  6.785000e-01  1.117100e+00  6.825000e-01  9.074000e-01  6.917000e-01  1.152700e+00  6.739000e-01  9.866000e-01  5.957000e-01  5.590000e-01  3.562000e-01 
+ 6.520000e-02  4.575000e-01  5.170000e-01  2.900000e-01  6.257000e-01  3.041000e-01  1.700700e+00  3.410000e-02 -1.700000e-03  2.400000e-03 -4.430000e-02  5.270000e-02  2.800000e-01  1.838000e-01 
+ 5.460000e-02  4.317000e-01  2.260000e-02  8.026000e-01  2.228000e-01  7.077000e-01  1.370000e-02  1.717800e+00 -5.640000e-02  6.540000e-02 -9.100000e-03  1.070000e-02  7.470000e-02  3.874000e-01 
+ 6.250000e-02  1.036100e+00 -3.160000e-02  9.835000e-01  1.020000e-02  7.331000e-01 -5.260000e-02  1.005500e+00 -5.360000e-02  7.915000e-01 -2.270000e-02  9.754000e-01  3.200000e-03  5.922000e-01 
+ 8.813000e-01  2.321000e-01  4.637000e-01  1.117000e-01  2.749000e-01  2.270000e-01  4.328000e-01  1.497000e-01  3.223000e-01  1.589000e-01  4.639000e-01  1.134000e-01  2.964000e-01  1.282000e-01 
+ 2.830000e-02  1.087400e+00  1.069000e-01  6.261000e-01  1.089000e-01  4.879000e-01 -3.670000e-02  7.978000e-01 -6.910000e-02  6.871000e-01  4.170000e-02  7.048000e-01  3.750000e-02  4.698000e-01 
+ 1.116000e+00 -1.490000e-02  1.075900e+00  6.281000e-01  6.518000e-01  9.179000e-01  9.002000e-01  8.356000e-01  6.325000e-01  8.442000e-01  8.748000e-01  8.595000e-01  5.796000e-01  3.492000e-01 
+ 3.371000e-01  7.714000e-01  7.103000e-01  8.678000e-01  8.329000e-01  8.652000e-01  1.701600e+00  3.270000e-02 -1.300000e-01  2.157200e+00 -8.280000e-02  1.834700e+00  3.773000e-01  5.367000e-01 
+ 7.327000e-01  3.195000e-01  9.908000e-01  6.799000e-01  1.154500e+00  7.437000e-01  1.039000e+00  6.200000e-01  1.251800e+00  6.617000e-01  9.425000e-01  7.395000e-01  5.773000e-01  3.877000e-01 
+ 3.568000e-01  4.784000e-01  7.597000e-01  3.709000e-01  7.185000e-01  5.614000e-01  1.689700e+00  4.820000e-02 -5.500000e-02  2.069800e+00  1.110000e-02 -1.070000e-02  3.974000e-01  2.757000e-01 
+ 8.451000e-01  2.537000e-01  1.175900e+00  3.158000e-01  1.157700e+00  4.833000e-01  1.690800e+00  5.060000e-02  1.869400e+00  1.534000e-01 -8.700000e-02  1.834000e+00  6.629000e-01  2.139000e-01 
+ 1.053400e+00  6.240000e-02  9.920000e-01  7.462000e-01  6.545000e-01  9.606000e-01  9.666000e-01  7.742000e-01  7.771000e-01  7.086000e-01  9.877000e-01  7.512000e-01  6.243000e-01  3.112000e-01 
+ 7.150000e-02  1.045000e+00  1.133000e-01  8.252000e-01  4.200000e-02  7.057000e-01  1.016000e-01  8.422000e-01  7.360000e-02  6.540000e-01  7.840000e-02  8.680000e-01  7.220000e-02  5.227000e-01 
+ 1.002600e+00  1.198000e-01  6.942000e-01  1.048700e+00  5.669000e-01  5.787000e-01  7.905000e-01  9.402000e-01  6.875000e-01  3.929000e-01  7.361000e-01  1.000800e+00  5.116000e-01  2.856000e-01 
+ 4.843000e-01  6.102000e-01  2.827000e-01  1.441700e+00  2.176000e-01  8.856000e-01  3.216000e-01  1.399100e+00  8.600000e-02  1.002300e+00  2.466000e-01  1.485100e+00  1.914000e-01  5.923000e-01 
+ 3.972000e-01  1.078000e-01  5.178000e-01  2.948000e-01  5.923000e-01  3.344000e-01  5.037000e-01  3.121000e-01  6.118000e-01  3.270000e-01  5.425000e-01  2.633000e-01  3.099000e-01  1.574000e-01 
+ 3.522000e-01  3.868000e-01  5.201000e-01  6.377000e-01  5.522000e-01  7.776000e-01  5.076000e-01  6.553000e-01  6.258000e-01  7.105000e-01  4.515000e-01  7.196000e-01  3.029000e-01  3.665000e-01 
+ 2.230000e-01  8.879000e-01  1.593000e-01  7.129000e-01  1.089000e-01  5.914000e-01  1.294000e-01  7.501000e-01  1.590000e-01  5.180000e-01  1.132000e-01  7.677000e-01  1.232000e-01  4.428000e-01 
+ 4.409000e-01 -1.820000e-02  6.190000e-01  5.930000e-02  5.689000e-01  2.286000e-01  4.717000e-01  2.311000e-01  5.974000e-01  2.056000e-01  4.849000e-01  2.192000e-01  3.067000e-01  9.330000e-02 
+ 7.310000e-02  4.657000e-01  1.022000e-01  7.503000e-01  5.510000e-02  9.277000e-01  7.300000e-02  7.852000e-01  1.180000e-01  8.651000e-01  1.219000e-01  7.260000e-01  5.260000e-02  4.397000e-01 
+ 6.670000e-02  5.461000e-01  4.370000e-01  4.789000e-01  5.523000e-01  4.830000e-01  1.668600e+00  7.700000e-02  1.280000e-02  1.978700e+00  3.340000e-02 -4.030000e-02  2.290000e-01  3.043000e-01 
+ 8.427000e-01  2.270000e-01  1.094300e+00  3.023000e-01  1.294900e+00  2.022000e-01  1.886300e+00 -1.803000e-01  2.044700e+00 -4.780000e-02  2.900000e-03  1.732800e+00  6.900000e-01  1.222000e-01 
+ 1.126600e+00 -2.560000e-02  5.215000e-01  1.210700e+00  4.669000e-01  6.685000e-01  5.571000e-01  1.170500e+00  4.676000e-01  6.308000e-01  4.948000e-01  1.244900e+00  3.906000e-01  4.083000e-01 
+ 5.600000e-01  3.640000e-01  8.255000e-01  6.307000e-01  9.831000e-01  6.679000e-01  8.842000e-01  5.626000e-01  9.357000e-01  7.488000e-01  8.266000e-01  6.312000e-01  4.738000e-01  3.681000e-01 
+ 4.810000e-02  1.007400e+00  4.296000e-01  9.304000e-01  4.478000e-01  1.047200e+00  1.756000e+00 -3.380000e-02 -7.480000e-02  2.089300e+00 -4.250000e-02  5.140000e-02  2.391000e-01  5.596000e-01 
+ 1.095200e+00  1.350000e-02  8.862000e-01  8.475000e-01  7.144000e-01  3.892000e-01  9.740000e-01  7.529000e-01  7.114000e-01  3.571000e-01  9.248000e-01  8.077000e-01  5.859000e-01  1.979000e-01 
+ 2.006000e-01  3.454000e-01  3.986000e-01  4.469000e-01  3.417000e-01  6.387000e-01  2.808000e-01  5.793000e-01  4.392000e-01  5.374000e-01  3.424000e-01  5.096000e-01  2.043000e-01  2.865000e-01 
+-2.480000e-02  8.079000e-01  3.514000e-01  7.237000e-01  4.603000e-01  7.386000e-01  8.570000e-02  1.632300e+00  6.240000e-02  1.922700e+00 -2.600000e-02  3.120000e-02  1.639000e-01  4.770000e-01 
+ 4.297000e-01  1.825000e-01  5.939000e-01  3.794000e-01  7.233000e-01  3.816000e-01  6.731000e-01  2.893000e-01  7.694000e-01  3.435000e-01  7.308000e-01  2.192000e-01  3.835000e-01  1.722000e-01 
+ 6.357000e-01  4.547000e-01  2.637000e-01  7.217000e-01  2.175000e-01  5.563000e-01  2.751000e-01  7.127000e-01  1.261000e-01  6.451000e-01  2.460000e-01  7.426000e-01  2.248000e-01  3.850000e-01 
+ 1.124800e+00 -2.590000e-02  4.916000e-01  1.229300e+00  3.932000e-01  9.462000e-01  5.271000e-01  1.185500e+00  4.211000e-01  8.591000e-01  5.142000e-01  1.206400e+00  3.246000e-01  5.502000e-01 
+ 1.131100e+00 -2.980000e-02  1.013700e+00  7.144000e-01  8.036000e-01  2.317000e-01  1.076000e+00  6.498000e-01  7.927000e-01  2.099000e-01  9.650000e-01  7.713000e-01  6.183000e-01  1.358000e-01 
+ 3.026000e-01  4.889000e-01  6.114000e-01  4.941000e-01  6.889000e-01  5.464000e-01  1.615600e+00  1.361000e-01  5.000000e-04  2.004300e+00  3.290000e-02 -3.970000e-02  3.152000e-01  3.408000e-01 
+-1.580000e-02  4.553000e-01  1.158000e-01  6.442000e-01  3.486000e-01  5.106000e-01 -1.019000e-01  1.854600e+00  2.450000e-02 -3.050000e-02  6.260000e-02 -7.460000e-02  1.096000e-01  3.147000e-01 
+-8.610000e-02  1.207600e+00  3.407000e-01  1.090100e+00  5.373000e-01  9.981000e-01 -3.530000e-02  1.776400e+00 -1.200000e-03  2.001700e+00  2.530000e-02  1.701800e+00  1.707000e-01  6.720000e-01 
+ 3.425000e-01  1.699000e-01  6.039000e-01  1.853000e-01  5.608000e-01  3.606000e-01  5.748000e-01  2.185000e-01  6.062000e-01  3.205000e-01  4.801000e-01  3.313000e-01  3.026000e-01  1.613000e-01 
+ 8.624000e-01  2.389000e-01  1.129600e+00  5.381000e-01  1.292500e+00  4.896000e-01  1.810500e+00 -9.300000e-02  2.041200e+00 -4.980000e-02  4.800000e-03  1.730400e+00  6.792000e-01  2.692000e-01 
+-2.360000e-02  6.987000e-01  1.493000e-01  8.415000e-01  2.933000e-01  8.121000e-01 -3.410000e-02  1.772800e+00 -7.390000e-02  2.085800e+00 -5.190000e-02  6.100000e-02  1.021000e-01  4.729000e-01 
+ 1.140600e+00 -3.760000e-02  5.592000e-01  1.172900e+00  3.989000e-01  8.188000e-01  6.176000e-01  1.108100e+00  4.037000e-01  7.717000e-01  5.580000e-01  1.172800e+00  4.104000e-01  4.151000e-01 
+ 4.442000e-01  2.989000e-01  6.370000e-01  5.436000e-01  8.215000e-01  5.003000e-01  7.841000e-01  3.647000e-01  7.794000e-01  5.730000e-01  6.997000e-01  4.653000e-01  3.936000e-01  2.806000e-01 
+ 7.410000e-02  3.967000e-01  4.133000e-01  3.645000e-01  4.413000e-01  4.767000e-01 -4.360000e-02  1.781800e+00  4.830000e-02 -5.760000e-02  1.240000e-02 -1.260000e-02  1.716000e-01  2.843000e-01 
+ 3.583000e-01  7.460000e-01  1.489000e-01  6.681000e-01  1.327000e-01  5.254000e-01  1.705000e-01  6.434000e-01  1.733000e-01  4.643000e-01  1.570000e-01  6.552000e-01  1.646000e-01  3.708000e-01 
+ 5.144000e-01  7.100000e-03  7.310000e-01  1.166000e-01  8.438000e-01  1.292000e-01  1.745400e+00 -2.040000e-02  5.240000e-02 -6.220000e-02  2.000000e-04 -1.200000e-03  4.207000e-01  6.780000e-02 
+ 6.726000e-01  1.323000e-01  1.144800e+00  9.590000e-02  1.362000e+00  3.870000e-02  1.169700e+00  6.840000e-02  1.369600e+00  5.110000e-02  1.182100e+00  5.370000e-02  6.784000e-01  3.530000e-02 
+ 1.674000e-01  3.897000e-01  4.111000e-01  4.741000e-01  6.153000e-01  3.688000e-01  1.697900e+00  3.140000e-02 -5.520000e-02  2.065200e+00 -4.320000e-02  5.020000e-02  2.435000e-01  2.632000e-01 
+ 3.785000e-01  7.282000e-01  1.824000e-01  7.266000e-01  1.605000e-01  5.580000e-01  1.435000e-01  7.714000e-01  1.922000e-01  5.056000e-01  3.317000e-01  5.522000e-01  1.777000e-01  3.997000e-01 
+ 3.145000e-01  7.818000e-01  1.241000e-01  5.976000e-01  1.230000e-01  4.677000e-01  1.220000e-01  6.060000e-01  1.649000e-01  4.058000e-01  7.690000e-02  6.546000e-01  1.322000e-01  3.602000e-01 
+ 2.918000e-01  2.719000e-01  6.459000e-01  2.241000e-01  7.378000e-01  2.574000e-01  1.683400e+00  6.250000e-02  2.860000e-02  1.964400e+00 -5.600000e-03  6.500000e-03  3.631000e-01  1.400000e-01 
+ 1.151300e+00 -5.120000e-02  6.183000e-01  3.049000e-01  6.627000e-01  3.790000e-02  7.937000e-01  9.420000e-02  5.698000e-01  1.317000e-01  8.385000e-01  4.390000e-02  4.815000e-01  9.850000e-02 
+ 1.269000e-01  9.731000e-01  4.120000e-01  1.036700e+00  5.733000e-01  9.856000e-01  1.699400e+00  3.680000e-02 -2.470000e-02  2.024300e+00 -1.100000e-02  1.743800e+00  2.299000e-01  6.160000e-01 
+-9.200000e-03  6.616000e-01  5.080000e-02  9.117000e-01  1.767000e-01  9.075000e-01  2.000000e-02  1.709800e+00 -6.340000e-02  2.076700e+00 -2.020000e-02  2.450000e-02  4.400000e-02  5.188000e-01 
+ 3.096000e-01  3.670000e-01  4.894000e-01  5.677000e-01  5.287000e-01  6.841000e-01  4.190000e-01  6.544000e-01  5.844000e-01  6.375000e-01  5.973000e-01  4.401000e-01  2.783000e-01  3.331000e-01 
+ 5.330000e-02  8.748000e-01  1.818000e-01  1.072900e+00  2.553000e-01  1.123700e+00 -2.450000e-02  1.760300e+00 -3.000000e-03  2.009000e+00  4.320000e-02 -5.350000e-02  1.072000e-01  6.315000e-01 
+ 1.054700e+00  5.700000e-02  9.906000e-01  9.390000e-02  8.846000e-01 -8.220000e-02  1.024500e+00  4.920000e-02  7.418000e-01  6.930000e-02  1.035600e+00  3.830000e-02  6.174000e-01  2.600000e-02 
+ 4.399000e-01  3.581000e-01  8.365000e-01  3.885000e-01  9.079000e-01  4.923000e-01  7.725000e-01  4.573000e-01  7.929000e-01  6.507000e-01  7.882000e-01  4.434000e-01  4.279000e-01  2.874000e-01 
+ 4.167000e-01  5.007000e-01  6.382000e-01  7.986000e-01  8.046000e-01  8.237000e-01  7.404000e-01  6.831000e-01  7.403000e-01  9.233000e-01  6.321000e-01  8.118000e-01  3.938000e-01  4.348000e-01 
+ 1.641000e-01  5.116000e-01  5.404000e-01  4.425000e-01  5.521000e-01  5.661000e-01  1.699300e+00  3.610000e-02  2.810000e-02  1.964300e+00  6.130000e-02 -7.280000e-02  2.508000e-01  3.306000e-01 
+ 6.288000e-01  4.748000e-01  3.036000e-01  1.429400e+00  1.956000e-01  1.249500e+00  3.526000e-01  1.368400e+00  2.819000e-01  1.080300e+00  2.704000e-01  1.468300e+00  2.507000e-01  6.484000e-01 
+ 2.369000e-01  6.611000e-01  5.288000e-01  6.834000e-01  6.557000e-01  6.726000e-01  1.709300e+00  2.570000e-02 -3.230000e-02  2.038300e+00 -7.010000e-02  8.680000e-02  2.784000e-01  4.395000e-01 
+ 8.934000e-01  2.195000e-01  4.395000e-01  9.475000e-01  3.611000e-01  6.075000e-01  3.924000e-01  1.003200e+00  3.487000e-01  5.886000e-01  4.447000e-01  9.433000e-01  2.960000e-01  4.255000e-01 
+ 3.127000e-01  7.936000e-01  2.430000e-01  1.480400e+00  1.331000e-01  1.843300e+00  1.919000e-01  1.538600e+00  8.090000e-02  1.620200e+00  2.307000e-01  1.493000e+00  1.468000e-01  8.283000e-01 
+ 4.778000e-01  5.678000e-01  8.714000e-01  7.462000e-01  9.055000e-01  9.499000e-01  8.423000e-01  7.811000e-01  9.141000e-01  9.747000e-01  7.781000e-01  8.622000e-01  4.561000e-01  4.868000e-01 
+ 8.896000e-01  2.207000e-01  2.578000e-01  1.349300e+00  2.169000e-01  8.216000e-01  4.123000e-01  1.165400e+00  3.797000e-01  5.948000e-01  4.365000e-01  1.129600e+00  2.961000e-01  4.484000e-01 
+ 1.164000e-01  5.170000e-01  9.500000e-03  1.017200e+00  1.090000e-02  1.156900e+00 -2.770000e-02  1.060900e+00 -2.000000e-03  1.186900e+00  7.900000e-02  9.352000e-01  2.830000e-02  5.596000e-01 
+ 4.084000e-01  6.935000e-01  7.813000e-01  7.456000e-01  8.580000e-01  7.981000e-01  1.763400e+00 -3.380000e-02  3.120000e-02  1.962900e+00  4.640000e-02  1.680600e+00  4.056000e-01  4.892000e-01 
+ 4.115000e-01  3.150000e-01  6.251000e-01  5.168000e-01  6.864000e-01  6.216000e-01  6.157000e-01  5.283000e-01  5.501000e-01  8.035000e-01  5.848000e-01  5.660000e-01  3.420000e-01  3.209000e-01 
+ 5.793000e-01  5.256000e-01  2.275000e-01  6.283000e-01  2.350000e-01  4.414000e-01  3.038000e-01  5.316000e-01  2.404000e-01  4.183000e-01  2.991000e-01  5.356000e-01  2.314000e-01  3.192000e-01 
+ 1.988000e-01  4.499000e-01  2.277000e-01  8.006000e-01  2.805000e-01  8.852000e-01  2.238000e-01  8.069000e-01  2.915000e-01  8.895000e-01  2.605000e-01  7.604000e-01  1.524000e-01  4.373000e-01 
+ 5.380000e-02  4.115000e-01  1.528000e-01  5.627000e-01  5.870000e-02  7.814000e-01  1.204000e-01  6.025000e-01  2.900000e-03  8.575000e-01  8.210000e-02  6.511000e-01  4.320000e-02  3.794000e-01 
+ 5.143000e-01  4.670000e-01  6.954000e-01  6.313000e-01  8.395000e-01  5.981000e-01  1.833600e+00 -1.195000e-01  6.730000e-02  1.927100e+00  4.320000e-02 -5.020000e-02  4.050000e-01  3.727000e-01 
+ 1.093200e+00  1.700000e-02  9.920000e-01  2.131000e-01  8.428000e-01  4.310000e-02  1.037400e+00  1.593000e-01  8.353000e-01  2.400000e-02  1.127100e+00  5.930000e-02  6.564000e-01  1.860000e-02 
+ 1.529000e-01  7.166000e-01  4.760000e-01  7.066000e-01  6.900000e-01  5.941000e-01  1.790100e+00 -6.710000e-02  8.600000e-03  1.987800e+00 -4.000000e-03  4.600000e-03  3.005000e-01  3.884000e-01 
+ 6.414000e-01  1.886000e-01  9.415000e-01  2.036000e-01  9.966000e-01  2.832000e-01  1.774400e+00 -5.000000e-02  2.061900e+00 -7.050000e-02  2.750000e-02 -3.310000e-02  5.474000e-01  1.283000e-01 
+ 1.100400e+00  1.080000e-02  1.541000e+00  1.791000e-01  9.895000e-01  8.366000e-01  1.446100e+00  2.887000e-01  9.364000e-01  7.076000e-01  1.512700e+00  2.114000e-01  7.341000e-01  2.329000e-01 
+ 1.063300e+00  4.970000e-02  6.328000e-01  1.103200e+00  4.612000e-01  1.008900e+00  7.123000e-01  1.013200e+00  5.231000e-01  8.612000e-01  7.706000e-01  9.377000e-01  4.556000e-01  4.502000e-01 
+ 9.390000e-02  2.852000e-01  1.502000e-01  5.744000e-01  3.306000e-01  4.972000e-01  2.500000e-02  1.699300e+00  2.940000e-02 -3.570000e-02 -5.610000e-02  6.750000e-02  1.023000e-01  3.008000e-01 
+ 6.954000e-01  2.670000e-01  1.011800e+00  2.593000e-01  1.137400e+00  2.561000e-01  1.706800e+00  3.340000e-02  2.083900e+00 -9.270000e-02  1.300000e-02 -1.780000e-02  6.024000e-01  1.478000e-01 
+ 1.190800e+00 -9.960000e-02  3.961000e-01  1.285800e+00  3.905000e-01  6.359000e-01  4.426000e-01  1.233500e+00  3.446000e-01  6.614000e-01  4.912000e-01  1.180000e+00  3.361000e-01  4.130000e-01 
+ 5.374000e-01  3.805000e-01  8.830000e-01  5.444000e-01  1.049100e+00  5.771000e-01  9.036000e-01  5.234000e-01  1.049500e+00  5.964000e-01  9.324000e-01  4.881000e-01  5.132000e-01  3.125000e-01 
+ 1.039100e+00  7.860000e-02  1.266200e+00  4.742000e-01  9.161000e-01  1.626000e-01  1.197900e+00  5.470000e-01  9.137000e-01  1.269000e-01  1.213700e+00  5.333000e-01  6.993000e-01  7.170000e-02 
+ 6.458000e-01  4.649000e-01  2.589000e-01  9.217000e-01  3.329000e-01  5.323000e-01  2.311000e-01  9.548000e-01  1.899000e-01  6.802000e-01  3.269000e-01  8.420000e-01  2.573000e-01  4.138000e-01 
+ 1.052100e+00  6.650000e-02  7.528000e-01  9.807000e-01  6.024000e-01  8.703000e-01  7.803000e-01  9.460000e-01  7.222000e-01  6.507000e-01  7.261000e-01  1.012000e+00  5.141000e-01  3.938000e-01 
+ 5.840000e-02  5.279000e-01  8.240000e-02  8.389000e-01  8.580000e-02  9.652000e-01  7.990000e-02  8.364000e-01  1.640000e-02  1.055800e+00  1.320000e-01  7.804000e-01  6.160000e-02  4.665000e-01 
+ 4.050000e-02  9.263000e-01  3.432000e-01  9.408000e-01  4.826000e-01  9.161000e-01 -1.620000e-02  1.747900e+00 -1.530000e-02  2.022200e+00  6.260000e-02 -7.430000e-02  1.872000e-01  5.699000e-01 
+ 5.268000e-01  3.336000e-01  6.997000e-01  4.976000e-01  9.724000e-01  3.158000e-01  1.717100e+00  1.850000e-02  1.060000e-02  1.983800e+00 -2.130000e-02  2.460000e-02  4.486000e-01  2.498000e-01 
+ 1.870000e-02  6.936000e-01  1.526000e-01  8.764000e-01  2.685000e-01  8.772000e-01 -2.400000e-02  1.761100e+00  5.660000e-02  1.933300e+00  3.520000e-02 -4.000000e-02  7.850000e-02  5.252000e-01 
+ 1.103300e+00  3.900000e-03  8.285000e-01  3.832000e-01  6.649000e-01  2.246000e-01  6.963000e-01  5.402000e-01  5.935000e-01  2.886000e-01  7.667000e-01  4.494000e-01  5.473000e-01  1.339000e-01 
+ 8.410000e-02  1.032800e+00  4.392000e-01  1.048400e+00  6.082000e-01  9.935000e-01  1.738900e+00 -3.800000e-03 -2.100000e-02  2.026900e+00 -1.067000e-01  1.858800e+00  2.398000e-01  6.295000e-01 
+ 4.689000e-01  4.092000e-01  6.791000e-01  7.029000e-01  8.472000e-01  7.169000e-01  6.373000e-01  7.540000e-01  7.336000e-01  8.768000e-01  7.611000e-01  6.114000e-01  3.997000e-01  3.986000e-01 
+ 5.368000e-01  2.121000e-01  7.638000e-01  3.146000e-01  8.883000e-01  3.072000e-01  1.674800e+00  6.920000e-02  9.300000e-03  1.989600e+00  6.700000e-03 -9.100000e-03  4.426000e-01  1.885000e-01 
+ 4.240000e-01  4.900000e-01  7.232000e-01  5.014000e-01  8.591000e-01  4.838000e-01  1.772600e+00 -4.870000e-02  4.240000e-02  1.954800e+00 -1.780000e-02  2.100000e-02  4.348000e-01  2.854000e-01 
+ 1.050000e-01  1.003300e+00  2.230000e-02  5.880000e-01  3.430000e-02  4.697000e-01  1.249000e-01  4.665000e-01  6.710000e-02  4.225000e-01  1.030000e-01  4.903000e-01  6.130000e-02  3.688000e-01 
+ 3.111000e-01  3.751000e-01  4.651000e-01  6.121000e-01  6.362000e-01  5.681000e-01  5.020000e-01  5.630000e-01  6.580000e-01  5.583000e-01  5.059000e-01  5.646000e-01  3.052000e-01  3.081000e-01 
+ 4.478000e-01 -1.400000e-03  6.501000e-01  6.110000e-02  7.771000e-01  2.590000e-02  6.717000e-01  3.060000e-02  7.627000e-01  5.250000e-02  6.493000e-01  5.720000e-02  3.869000e-01  2.020000e-02 
+ 7.303000e-01  3.720000e-01  3.490000e-01  6.100000e-01  2.788000e-01  4.756000e-01  2.771000e-01  6.963000e-01  3.090000e-01  4.241000e-01  2.837000e-01  6.863000e-01  2.655000e-01  3.350000e-01 
+ 5.140000e-02  1.062500e+00  3.940000e-02  4.118000e-01 -9.000000e-03  4.001000e-01  1.314000e-01  3.037000e-01  7.130000e-02  2.978000e-01  7.100000e-02  3.778000e-01  4.670000e-02  2.925000e-01 
+ 4.980000e-01  5.100000e-01  8.111000e-01  5.115000e-01  8.700000e-01  5.826000e-01  1.682700e+00  5.570000e-02  7.700000e-03  1.987000e+00  3.500000e-02 -4.180000e-02  4.798000e-01  2.986000e-01 
+ 2.034000e-01  6.543000e-01  2.535000e-01  1.109500e+00  3.152000e-01  1.231200e+00  2.384000e-01  1.129500e+00  3.808000e-01  1.179800e+00  2.254000e-01  1.140700e+00  1.744000e-01  6.073000e-01 
+ 3.153000e-01  4.310000e-01  6.277000e-01  5.140000e-01  6.222000e-01  6.974000e-01  6.016000e-01  5.469000e-01  7.290000e-01  5.904000e-01  5.691000e-01  5.835000e-01  3.592000e-01  3.007000e-01 
+ 8.961000e-01  2.310000e-02  1.048800e+00  2.182000e-01  1.305600e+00  6.030000e-02  1.701700e+00  3.300000e-02  2.162900e+00 -1.954000e-01 -5.500000e-03  6.700000e-03  6.851000e-01  5.080000e-02 
+ 1.099300e+00  6.800000e-03  4.745000e-01  1.250200e+00  3.631000e-01  8.284000e-01  4.291000e-01  1.304800e+00  3.799000e-01  7.691000e-01  5.049000e-01  1.217200e+00  3.288000e-01  4.910000e-01 
+ 1.124000e-01  4.549000e-01  1.585000e-01  7.363000e-01  7.680000e-02  9.628000e-01  1.012000e-01  8.069000e-01  9.650000e-02  9.527000e-01  1.245000e-01  7.763000e-01  5.500000e-02  4.688000e-01 
+ 2.914000e-01  8.203000e-01  1.384000e-01  9.877000e-01  1.531000e-01  6.968000e-01  2.093000e-01  9.102000e-01  2.100000e-01  6.084000e-01  1.684000e-01  9.538000e-01  1.537000e-01  5.024000e-01 
+ 2.503000e-01  5.377000e-01  4.508000e-01  7.689000e-01  6.041000e-01  7.665000e-01  4.468000e-01  7.721000e-01  6.211000e-01  7.645000e-01  4.442000e-01  7.789000e-01  2.925000e-01  4.055000e-01 
+ 5.522000e-01  9.600000e-02  8.623000e-01  9.830000e-02  9.783000e-01  1.028000e-01  1.732200e+00  1.400000e-03  6.040000e-02  1.928700e+00 -1.110000e-02  1.420000e-02  4.638000e-01  1.047000e-01 
+ 6.990000e-01  1.695000e-01  1.112800e+00  2.379000e-01  1.287200e+00  2.463000e-01  1.054400e+00  3.047000e-01  1.330800e+00  2.267000e-01  1.103400e+00  2.486000e-01  6.255000e-01  1.588000e-01 
+ 1.206000e-01  5.177000e-01  2.957000e-01  6.815000e-01  2.742000e-01  8.485000e-01  2.064000e-01  7.865000e-01  3.213000e-01  8.104000e-01  2.374000e-01  7.500000e-01  1.375000e-01  4.325000e-01 
+ 7.560000e-02  4.799000e-01  1.069000e-01  7.654000e-01  2.251000e-01  7.443000e-01  2.162000e-01  6.340000e-01  1.732000e-01  8.273000e-01  1.715000e-01  6.874000e-01  9.100000e-02  4.062000e-01 
+ 2.584000e-01  8.386000e-01  7.620000e-02  7.278000e-01  1.070000e-01  5.378000e-01  7.110000e-02  7.384000e-01  7.870000e-02  5.573000e-01  4.850000e-02  7.629000e-01  1.041000e-01  4.274000e-01 
+ 7.270000e-01  3.828000e-01  1.070200e+00  4.521000e-01  1.323100e+00  3.022000e-01  1.663400e+00  8.400000e-02  2.080600e+00 -9.090000e-02  7.430000e-02  1.642100e+00  6.176000e-01  2.725000e-01 
+ 2.311000e-01  8.728000e-01  1.756000e-01  5.309000e-01  1.360000e-01  4.464000e-01  1.481000e-01  5.650000e-01  6.090000e-02  5.215000e-01  1.231000e-01  5.944000e-01  1.064000e-01  3.859000e-01 
+ 6.257000e-01  4.252000e-01  8.745000e-01  5.017000e-01  8.145000e-01  7.101000e-01  1.767800e+00 -4.060000e-02  3.790000e-02  1.954800e+00 -3.610000e-02  1.777500e+00  4.962000e-01  3.155000e-01 
+ 3.711000e-01  3.448000e-01  6.690000e-01  3.564000e-01  7.493000e-01  4.080000e-01  1.665500e+00  8.190000e-02  4.510000e-02  1.949600e+00  1.120000e-02 -1.470000e-02  3.586000e-01  2.472000e-01 
+ 1.091400e+00  1.500000e-02  7.516000e-01  9.932000e-01  6.739000e-01  4.224000e-01  9.437000e-01  7.683000e-01  6.294000e-01  4.399000e-01  8.063000e-01  9.298000e-01  5.482000e-01  2.326000e-01 
+ 4.256000e-01  2.780000e-02  6.816000e-01  2.220000e-02  7.522000e-01  5.630000e-02  6.717000e-01  3.390000e-02  8.997000e-01 -1.075000e-01  6.933000e-01  9.500000e-03  3.776000e-01  3.240000e-02 
+ 1.028000e+00  9.510000e-02  5.619000e-01  4.529000e-01  5.648000e-01  2.058000e-01  6.508000e-01  3.510000e-01  4.077000e-01  3.744000e-01  5.686000e-01  4.476000e-01  4.042000e-01  2.186000e-01 
+-4.200000e-02  7.610000e-01  1.212000e-01  9.064000e-01  1.753000e-01  9.878000e-01  5.340000e-02  1.670300e+00 -1.660000e-02  2.013600e+00  6.680000e-02 -7.970000e-02  7.740000e-02  5.239000e-01 
+ 3.907000e-01  5.587000e-01  6.918000e-01  5.787000e-01  7.508000e-01  6.533000e-01  1.765900e+00 -3.900000e-02 -4.400000e-03  2.007300e+00  1.150000e-02 -1.440000e-02  3.759000e-01  3.750000e-01 
+ 5.883000e-01  4.444000e-01  9.442000e-01  6.742000e-01  1.223800e+00  5.907000e-01  1.045900e+00  5.541000e-01  1.129100e+00  7.246000e-01  1.068700e+00  5.271000e-01  5.945000e-01  3.288000e-01 
+ 1.261000e-01  4.338000e-01  2.383000e-01  6.331000e-01  1.393000e-01  8.796000e-01  7.800000e-02  8.233000e-01  1.462000e-01  8.875000e-01  1.771000e-01  7.083000e-01  8.940000e-02  4.235000e-01 
+ 2.951000e-01  7.971000e-01  2.091000e-01  7.775000e-01  8.550000e-02  6.993000e-01  1.987000e-01  7.923000e-01  5.940000e-02  7.144000e-01  1.031000e-01  9.043000e-01  1.108000e-01  5.057000e-01 
+ 1.100700e+00  5.800000e-03  5.735000e-01  5.508000e-01  4.843000e-01  3.643000e-01  5.151000e-01  6.179000e-01  4.244000e-01  4.098000e-01  6.194000e-01  4.928000e-01  4.094000e-01  2.485000e-01 
+ 8.864000e-01  1.600000e-03  1.375200e+00  2.020000e-02  1.571500e+00  1.050000e-02  1.415500e+00 -3.190000e-02  1.655200e+00 -6.190000e-02  1.409500e+00 -2.720000e-02  7.862000e-01  1.790000e-02 
+ 1.152100e+00 -5.580000e-02  7.192000e-01  1.030300e+00  7.694000e-01  4.801000e-01  8.318000e-01  8.979000e-01  6.653000e-01  5.582000e-01  9.178000e-01  7.947000e-01  5.415000e-01  3.093000e-01 
+ 5.044000e-01  1.540000e-02  8.126000e-01 -2.700000e-03  8.906000e-01  4.030000e-02  7.963000e-01  1.780000e-02  9.854000e-01 -5.490000e-02  7.248000e-01  1.000000e-01  4.532000e-01  1.820000e-02 
+-2.180000e-02  8.299000e-01  1.599000e-01  9.649000e-01  3.780000e-01  8.483000e-01  2.180000e-02  1.707200e+00 -4.570000e-02  2.054800e+00 -1.020000e-02  1.240000e-02  1.121000e-01  5.458000e-01 
+ 9.160000e-02  1.036900e+00  1.755000e-01  6.179000e-01  8.330000e-02  5.723000e-01  1.340000e-01  6.709000e-01  5.480000e-02  5.914000e-01  6.290000e-02  7.533000e-01  1.001000e-01  4.355000e-01 
+ 3.507000e-01  4.682000e-01  6.535000e-01  4.860000e-01  7.487000e-01  5.119000e-01  1.678900e+00  5.970000e-02 -5.820000e-02  2.068200e+00 -2.410000e-02  2.870000e-02  3.420000e-01  3.332000e-01 
+ 1.034700e+00  8.190000e-02  5.016000e-01  1.232800e+00  4.562000e-01  1.218400e+00  4.686000e-01  1.269500e+00  4.205000e-01  1.132200e+00  5.104000e-01  1.223000e+00  3.742000e-01  5.762000e-01 
+ 6.282000e-01  1.157000e-01  8.571000e-01  3.314000e-01  1.049100e+00  2.918000e-01  8.451000e-01  3.437000e-01  1.130400e+00  2.179000e-01  9.457000e-01  2.238000e-01  5.257000e-01  1.544000e-01 
+ 1.087900e+00  1.780000e-02  5.849000e-01  9.080000e-02  4.400000e-01  1.295000e-01  5.795000e-01  1.014000e-01  4.978000e-01  4.730000e-02  6.493000e-01  2.220000e-02  4.243000e-01  4.870000e-02 
+ 1.043200e+00  7.570000e-02  3.362000e-01  8.387000e-01  3.922000e-01  4.720000e-01  4.663000e-01  6.843000e-01  3.137000e-01  5.435000e-01  4.333000e-01  7.240000e-01  3.211000e-01  3.463000e-01 
+ 1.763000e-01  5.283000e-01  4.547000e-01  5.701000e-01  6.420000e-01  4.928000e-01  1.767600e+00 -4.320000e-02  3.570000e-02  1.956900e+00 -3.270000e-02  3.990000e-02  2.514000e-01  3.485000e-01 
+ 4.510000e-01  6.430000e-02  6.271000e-01  2.025000e-01  7.699000e-01  1.555000e-01  7.216000e-01  8.540000e-02  8.444000e-01  8.560000e-02  8.332000e-01 -4.750000e-02  4.062000e-01  6.300000e-02 
+ 7.900000e-02  5.267000e-01  8.690000e-02  8.697000e-01  1.671000e-01  9.115000e-01  5.880000e-02  9.035000e-01  6.870000e-02  1.042700e+00  8.080000e-02  8.789000e-01  6.730000e-02  4.822000e-01 
+ 2.188000e-01  3.369000e-01  3.669000e-01  5.010000e-01  3.112000e-01  6.960000e-01  2.375000e-01  6.537000e-01  3.345000e-01  6.777000e-01  2.797000e-01  6.031000e-01  1.660000e-01  3.429000e-01 
+-9.450000e-02  1.214000e+00 -7.660000e-02  1.790700e+00  1.769000e-01  1.628300e+00 -1.730000e-02  1.752100e+00  2.320000e-02  1.976100e+00 -8.350000e-02  1.829900e+00  2.030000e-02  9.413000e-01 
+ 1.486000e-01  6.692000e-01  1.849000e-01  1.112100e+00  2.417000e-01  1.229800e+00  3.131000e-01  9.606000e-01  3.608000e-01  1.105200e+00  1.707000e-01  1.123700e+00  1.341000e-01  6.086000e-01 
+ 1.151900e+00 -5.420000e-02  6.338000e-01  3.940000e-01  4.542000e-01  3.527000e-01  5.905000e-01  4.522000e-01  5.814000e-01  1.835000e-01  6.035000e-01  4.320000e-01  4.249000e-01  2.042000e-01 
+ 1.479000e-01  2.251000e-01  1.986000e-01  3.961000e-01  2.674000e-01  3.986000e-01  1.340000e-01  4.690000e-01  2.304000e-01  4.534000e-01  1.999000e-01  3.911000e-01  1.029000e-01  2.407000e-01 
+ 5.890000e-02  1.864000e-01  3.178000e-01  2.535000e-01  4.522000e-01  2.345000e-01  9.190000e-02  1.622500e+00 -7.700000e-03  9.000000e-03 -7.670000e-02  9.070000e-02  1.755000e-01  1.388000e-01 
+ 9.400000e-02  6.238000e-01  3.969000e-01  6.334000e-01  4.998000e-01  6.599000e-01  1.790100e+00 -6.620000e-02 -7.930000e-02  2.093800e+00  2.700000e-03 -4.400000e-03  2.079000e-01  3.997000e-01 
+ 2.319000e-01  5.927000e-01  3.022000e-01  1.001700e+00  3.991000e-01  1.072700e+00  4.055000e-01  8.795000e-01  4.504000e-01  1.036000e+00  3.112000e-01  9.839000e-01  1.925000e-01  5.553000e-01 
+ 3.815000e-01  3.332000e-01  6.462000e-01  3.913000e-01  7.058000e-01  4.557000e-01  1.709500e+00  2.520000e-02 -6.140000e-02  2.076500e+00  2.690000e-02 -3.110000e-02  3.664000e-01  2.403000e-01 
+ 1.078300e+00  3.410000e-02  8.201000e-01  9.103000e-01  6.938000e-01  1.278200e+00  7.104000e-01  1.039200e+00  5.932000e-01  1.278000e+00  7.361000e-01  1.003500e+00  5.368000e-01  4.586000e-01 
+ 9.140000e-02  5.724000e-01  3.504000e-01  6.380000e-01  4.148000e-01  7.028000e-01  1.752300e+00 -2.260000e-02 -2.290000e-02  2.024300e+00 -1.770000e-02  1.910000e-02  2.003000e-01  3.734000e-01 
+ 4.475000e-01  6.681000e-01  3.219000e-01  5.937000e-01  2.144000e-01  5.219000e-01  2.775000e-01  6.470000e-01  1.795000e-01  5.440000e-01  2.650000e-01  6.645000e-01  2.055000e-01  3.837000e-01 
+ 1.052400e+00  6.480000e-02  5.225000e-01  8.387000e-01  4.788000e-01  4.712000e-01  5.038000e-01  8.560000e-01  3.832000e-01  5.550000e-01  5.543000e-01  7.987000e-01  3.811000e-01  3.338000e-01 
+ 9.849000e-01  1.433000e-01  5.062000e-01  2.203000e-01  5.441000e-01  2.260000e-02  5.696000e-01  1.404000e-01  4.719000e-01  9.920000e-02  4.997000e-01  2.260000e-01  3.843000e-01  1.097000e-01 
+ 5.748000e-01  1.579000e-01  9.100000e-01  2.326000e-01  9.980000e-01  3.141000e-01  9.007000e-01  2.419000e-01  9.729000e-01  3.628000e-01  8.942000e-01  2.515000e-01  5.003000e-01  1.643000e-01 
+ 4.395000e-01  4.679000e-01  8.962000e-01  2.943000e-01  9.701000e-01  3.516000e-01  1.817900e+00 -9.650000e-02  2.730000e-02  1.960900e+00  2.100000e-03 -1.700000e-03  4.865000e-01  2.228000e-01 
+ 4.840000e-01  2.094000e-01  7.491000e-01  3.479000e-01  9.198000e-01  3.134000e-01  7.565000e-01  3.362000e-01  7.934000e-01  4.768000e-01  6.991000e-01  4.020000e-01  4.212000e-01  2.110000e-01 
+ 4.958000e-01  1.443000e-01  8.970000e-01  8.420000e-02  8.679000e-01  2.843000e-01  7.258000e-01  2.898000e-01  8.606000e-01  3.076000e-01  7.934000e-01  2.101000e-01  4.459000e-01  1.359000e-01 
+ 1.079100e+00  3.290000e-02  5.166000e-01  7.448000e-01  4.626000e-01  4.487000e-01  5.806000e-01  6.720000e-01  4.977000e-01  3.901000e-01  5.378000e-01  7.246000e-01  4.012000e-01  2.923000e-01 
+ 5.550000e-02  7.274000e-01  3.617000e-01  7.326000e-01  5.602000e-01  6.382000e-01  1.931200e+00 -2.333000e-01  7.000000e-03  1.992700e+00 -7.110000e-02  8.280000e-02  2.292000e-01  4.078000e-01 
+ 1.089100e+00  2.140000e-02  4.152000e-01  8.053000e-01  3.788000e-01  5.185000e-01  4.597000e-01  7.495000e-01  3.572000e-01  5.192000e-01  4.332000e-01  7.823000e-01  3.524000e-01  3.287000e-01 
+ 5.581000e-01  5.780000e-02  7.462000e-01  2.461000e-01  8.369000e-01  2.983000e-01  8.010000e-01  1.832000e-01  9.550000e-01  1.747000e-01  8.798000e-01  8.960000e-02  4.791000e-01  8.590000e-02 
+ 1.096500e+00  3.900000e-03  4.117000e-01  4.921000e-01  3.664000e-01  3.479000e-01  4.433000e-01  4.572000e-01  3.868000e-01  3.088000e-01  4.363000e-01  4.653000e-01  3.154000e-01  2.638000e-01 
+ 1.103600e+00 -9.000000e-04  5.596000e-01  1.163800e+00  4.281000e-01  9.927000e-01  5.554000e-01  1.170500e+00  4.449000e-01  9.107000e-01  5.766000e-01  1.139700e+00  3.750000e-01  5.223000e-01 
+ 4.741000e-01  2.965000e-01  7.502000e-01  4.499000e-01  7.687000e-01  6.150000e-01  6.862000e-01  5.282000e-01  8.357000e-01  5.573000e-01  6.292000e-01  5.912000e-01  4.165000e-01  2.794000e-01 
+ 3.807000e-01  4.936000e-01  5.540000e-01  8.272000e-01  8.500000e-01  6.754000e-01  6.042000e-01  7.640000e-01  7.195000e-01  8.542000e-01  6.354000e-01  7.275000e-01  3.726000e-01  4.133000e-01 
+ 8.364000e-01  3.270000e-02  1.186400e+00  1.968000e-01  1.436000e+00  1.226000e-01  1.236400e+00  1.442000e-01  1.383800e+00  2.110000e-01  1.171300e+00  2.177000e-01  7.280000e-01  6.490000e-02 
+-1.560000e-02  4.196000e-01  4.650000e-02  5.764000e-01  6.000000e-02  6.460000e-01  3.050000e-02  5.935000e-01  4.570000e-02  6.741000e-01 -3.280000e-02  6.699000e-01  1.860000e-02  3.420000e-01 
+ 5.736000e-01  5.383000e-01  2.750000e-01  1.314900e+00  2.674000e-01  7.521000e-01  3.316000e-01  1.253500e+00  2.474000e-01  7.465000e-01  2.832000e-01  1.306000e+00  2.464000e-01  4.982000e-01 
+ 7.007000e-01  3.733000e-01  9.031000e-01  7.899000e-01  1.038900e+00  7.671000e-01  1.784000e+00 -5.930000e-02  2.500000e-02  1.970800e+00  2.790000e-02  1.699700e+00  4.946000e-01  4.653000e-01 
+ 1.101300e+00  3.700000e-03  4.778000e-01  5.740000e-02  3.817000e-01  6.810000e-02  3.378000e-01  2.228000e-01  3.602000e-01  8.800000e-02  3.097000e-01  2.582000e-01  3.379000e-01  5.670000e-02 
+-5.860000e-02  7.000000e-02  2.469000e-01  5.640000e-02  2.655000e-01  1.748000e-01 -4.000000e-03  5.900000e-03  2.730000e-02 -3.150000e-02  5.900000e-03 -7.100000e-03  1.159000e-01  4.810000e-02 
+ 1.120600e+00 -1.640000e-02  5.178000e-01  1.212100e+00  3.926000e-01  1.017600e+00  5.052000e-01  1.224700e+00  3.007000e-01  1.063800e+00  4.734000e-01  1.256600e+00  3.547000e-01  5.385000e-01 
+ 2.983000e-01  8.036000e-01  2.176000e-01  9.156000e-01  1.722000e-01  6.839000e-01  1.845000e-01  9.522000e-01  1.204000e-01  7.224000e-01  2.503000e-01  8.755000e-01  1.339000e-01  5.293000e-01 
+ 1.063100e+00  5.430000e-02  8.058000e-01  9.270000e-01  5.826000e-01  9.213000e-01  7.334000e-01  1.003300e+00  6.819000e-01  7.321000e-01  7.287000e-01  1.006000e+00  5.168000e-01  4.008000e-01 
+ 4.254000e-01  3.643000e-01  7.034000e-01  5.253000e-01  6.943000e-01  7.253000e-01  8.134000e-01  4.001000e-01  7.932000e-01  6.344000e-01  7.578000e-01  4.625000e-01  4.057000e-01  3.053000e-01 
+ 4.290000e-02  7.170000e-01  2.490000e-01  8.308000e-01  4.208000e-01  7.661000e-01 -2.320000e-02  1.762900e+00  1.860000e-02  1.978800e+00 -6.870000e-02  8.130000e-02  1.143000e-01  5.234000e-01 
+-3.980000e-02  6.514000e-01  1.588000e-01  7.603000e-01  2.672000e-01  7.724000e-01 -1.780000e-02  1.750400e+00  1.890000e-02  1.978200e+00 -5.620000e-02  6.840000e-02  9.140000e-02  4.407000e-01 
+ 2.062000e-01  4.098000e-01  2.551000e-01  7.148000e-01  4.466000e-01  6.359000e-01  2.715000e-01  6.969000e-01  2.490000e-01  8.829000e-01  2.201000e-01  7.591000e-01  1.590000e-01  4.010000e-01 
+ 3.410000e-01  4.307000e-01  7.206000e-01  3.524000e-01  7.949000e-01  4.069000e-01  1.602900e+00  1.539000e-01 -1.459000e-01  2.171600e+00  1.000000e-02 -1.250000e-02  3.856000e-01  2.496000e-01 
+-2.410000e-02  6.119000e-01  2.913000e-01  5.930000e-01  2.959000e-01  7.341000e-01  6.990000e-02  1.644200e+00 -4.070000e-02  2.050400e+00  9.500000e-02 -1.145000e-01  1.324000e-01  3.856000e-01 
+ 8.864000e-01  1.457000e-01  1.449500e+00  1.612000e-01  1.558100e+00  2.872000e-01  1.467800e+00  1.383000e-01  1.645400e+00  2.126000e-01  1.511700e+00  8.060000e-02  8.334000e-01  9.520000e-02 
+ 4.516000e-01  3.031000e-01  6.539000e-01  4.383000e-01  8.696000e-01  3.244000e-01  1.766400e+00 -3.990000e-02 -4.020000e-02  2.044000e+00  5.800000e-02 -6.990000e-02  3.998000e-01  2.355000e-01 
+ 1.500000e-03  1.039600e+00 -6.270000e-02  1.707800e+00 -1.400000e-02  1.880800e+00  6.470000e-02  1.564000e+00  1.572000e-01  1.698000e+00  1.540000e-02  1.620800e+00  1.990000e-02  9.212000e-01 
+ 4.896000e-01  2.424000e-01  8.585000e-01  1.687000e-01  1.021900e+00  1.227000e-01  1.728400e+00 -1.600000e-03  3.230000e-02  1.961700e+00 -3.790000e-02  4.570000e-02  4.665000e-01  1.439000e-01 
+ 1.028500e+00  2.200000e-03  1.519100e+00  1.153000e-01  1.891400e+00 -6.680000e-02  1.574600e+00  4.710000e-02  1.882900e+00 -2.460000e-02  1.660200e+00 -5.800000e-02  9.215000e-01  1.180000e-02 
+ 5.700000e-01  1.949000e-01  6.662000e-01  5.775000e-01  7.901000e-01  6.218000e-01  7.056000e-01  5.306000e-01  7.961000e-01  6.351000e-01  7.592000e-01  4.700000e-01  4.177000e-01  2.949000e-01 
+ 2.964000e-01  2.839000e-01  3.532000e-01  5.773000e-01  4.329000e-01  6.187000e-01  3.322000e-01  6.025000e-01  4.204000e-01  6.566000e-01  3.175000e-01  6.181000e-01  2.053000e-01  3.326000e-01 
+ 1.110100e+00 -6.900000e-03  5.430000e-01  7.135000e-01  3.813000e-01  5.501000e-01  4.775000e-01  7.901000e-01  4.455000e-01  4.477000e-01  5.519000e-01  7.022000e-01  3.929000e-01  3.006000e-01 
+ 4.494000e-01  3.016000e-01  6.661000e-01  5.118000e-01  8.272000e-01  5.039000e-01  7.380000e-01  4.324000e-01  8.066000e-01  5.531000e-01  7.674000e-01  3.959000e-01  4.210000e-01  2.538000e-01 
+ 1.201700e+00 -1.156000e-01  3.379000e-01  6.891000e-01  3.519000e-01  4.317000e-01  4.171000e-01  5.947000e-01  2.714000e-01  5.115000e-01  3.865000e-01  6.303000e-01  3.125000e-01  3.083000e-01 
+ 4.175000e-01  6.920000e-01  7.238000e-01  8.324000e-01  8.213000e-01  8.528000e-01  1.684100e+00  5.680000e-02  9.100000e-03  1.987300e+00 -1.150000e-02  1.749900e+00  4.226000e-01  4.766000e-01 
+ 4.360000e-01  3.713000e-01  6.214000e-01  6.574000e-01  7.203000e-01  7.235000e-01  5.825000e-01  6.956000e-01  7.206000e-01  7.458000e-01  6.731000e-01  5.917000e-01  3.731000e-01  3.595000e-01 
+ 3.848000e-01  2.801000e-01  5.886000e-01  4.593000e-01  7.417000e-01  4.387000e-01  5.876000e-01  4.592000e-01  7.156000e-01  4.903000e-01  6.483000e-01  3.882000e-01  3.588000e-01  2.423000e-01 
+ 1.096400e+00  1.260000e-02  8.966000e-01  3.421000e-01  6.822000e-01  2.301000e-01  8.664000e-01  3.788000e-01  6.956000e-01  1.860000e-01  8.982000e-01  3.447000e-01  5.707000e-01  1.193000e-01 
+ 4.805000e-01  5.688000e-01  5.959000e-01  1.079200e+00  6.938000e-01  1.213100e+00  6.770000e-01  9.835000e-01  7.859000e-01  1.129700e+00  7.537000e-01  8.900000e-01  3.702000e-01  5.925000e-01 
+ 1.090700e+00  1.510000e-02  4.532000e-01  8.947000e-01  3.829000e-01  5.780000e-01  4.569000e-01  8.886000e-01  3.970000e-01  5.348000e-01  5.703000e-01  7.581000e-01  3.893000e-01  3.213000e-01 
+ 4.580000e-02  5.139000e-01 -1.840000e-02  3.196000e-01 -3.710000e-02  3.004000e-01  9.080000e-02  1.905000e-01 -1.390000e-02  2.675000e-01  1.530000e-02  2.785000e-01  9.600000e-03  2.236000e-01 
+ 1.131200e+00 -3.020000e-02  8.929000e-01  7.040000e-02  7.703000e-01 -2.560000e-02  8.951000e-01  6.580000e-02  6.570000e-01  8.810000e-02  8.834000e-01  8.170000e-02  5.877000e-01  1.170000e-02 
+-5.820000e-02  8.150000e-01  3.495000e-01  7.002000e-01  4.372000e-01  7.411000e-01 -8.800000e-02  1.829700e+00  6.840000e-02  1.920900e+00 -3.980000e-02  4.890000e-02  1.860000e-01  4.308000e-01 
+ 3.479000e-01  6.417000e-01  6.093000e-01  7.009000e-01  7.565000e-01  6.621000e-01  1.628200e+00  1.224000e-01  1.492000e-01  1.828500e+00 -1.960000e-02  2.300000e-02  3.743000e-01  3.924000e-01 
+ 4.160000e-01  1.654000e-01  6.349000e-01  2.783000e-01  6.370000e-01  4.172000e-01  6.487000e-01  2.577000e-01  6.379000e-01  4.257000e-01  6.367000e-01  2.739000e-01  3.315000e-01  2.005000e-01 
+ 7.600000e-02  1.032000e+00  3.440000e-02  1.042800e+00 -1.570000e-02  8.486000e-01  4.830000e-02  1.026200e+00  9.170000e-02  7.007000e-01 -1.420000e-02  1.099300e+00  4.420000e-02  5.973000e-01 
+ 6.870000e-02  6.446000e-01  4.410000e-01  5.699000e-01  4.881000e-01  6.571000e-01  1.674200e+00  6.730000e-02  1.860000e-02  1.976100e+00  2.750000e-02 -3.180000e-02  2.199000e-01  3.772000e-01 
+ 1.838000e-01  9.222000e-01  1.668000e-01  8.231000e-01  1.093000e-01  6.645000e-01  1.597000e-01  8.303000e-01  1.604000e-01  5.899000e-01  1.905000e-01  7.935000e-01  9.970000e-02  5.155000e-01 
+ 5.985000e-01  2.114000e-01  8.599000e-01  2.747000e-01  8.155000e-01  4.715000e-01  1.754300e+00 -2.590000e-02 -1.890000e-02  2.017000e+00 -6.550000e-02  7.960000e-02  4.398000e-01  2.384000e-01 
+ 9.812000e-01  1.464000e-01  9.873000e-01  7.388000e-01  7.230000e-01  1.253800e+00  9.414000e-01  7.927000e-01  7.645000e-01  1.026800e+00  9.855000e-01  7.375000e-01  6.030000e-01  3.864000e-01 
+ 2.771000e-01  4.934000e-01  4.557000e-01  7.448000e-01  4.533000e-01  9.261000e-01  3.633000e-01  8.519000e-01  3.589000e-01  1.055700e+00  4.432000e-01  7.585000e-01  2.485000e-01  4.471000e-01 
+ 2.765000e-01  5.446000e-01  4.058000e-01  8.792000e-01  5.765000e-01  8.749000e-01  4.498000e-01  8.381000e-01  6.530000e-01  8.068000e-01  4.016000e-01  8.954000e-01  2.742000e-01  4.652000e-01 
+ 8.580000e-01  2.206000e-01  3.943000e-01  1.329800e+00  3.000000e-01  7.321000e-01  4.228000e-01  1.296500e+00  3.049000e-01  6.911000e-01  3.720000e-01  1.352200e+00  2.668000e-01  4.835000e-01 
+ 4.178000e-01  5.168000e-01  5.407000e-01  9.438000e-01  6.523000e-01  1.029500e+00  6.214000e-01  8.466000e-01  7.659000e-01  9.212000e-01  5.444000e-01  9.391000e-01  3.318000e-01  5.214000e-01 
+ 5.398000e-01  3.048000e-01  8.779000e-01  4.404000e-01  1.011700e+00  4.854000e-01  8.146000e-01  5.131000e-01  9.718000e-01  5.539000e-01  8.771000e-01  4.340000e-01  4.961000e-01  2.664000e-01 
+ 1.737000e-01  1.020000e-01  2.218000e-01  2.243000e-01  3.025000e-01  1.940000e-01  2.421000e-01  1.973000e-01  2.738000e-01  2.345000e-01  1.940000e-01  2.585000e-01  1.483000e-01  1.043000e-01 
+ 2.552000e-01  6.242000e-01  5.095000e-01  6.932000e-01  7.394000e-01  5.597000e-01  1.650500e+00  1.011000e-01 -2.090000e-02  2.025200e+00  4.510000e-02 -5.310000e-02  3.175000e-01  3.858000e-01 
+ 6.043000e-01  4.847000e-01  2.698000e-01  7.133000e-01  1.207000e-01  6.650000e-01  1.966000e-01  7.995000e-01  3.183000e-01  4.146000e-01  3.367000e-01  6.292000e-01  2.181000e-01  3.906000e-01 
+ 7.783000e-01  4.700000e-03  1.048700e+00  2.047000e-01  1.169700e+00  2.627000e-01  1.024000e+00  2.338000e-01  1.229200e+00  2.135000e-01  1.067300e+00  1.827000e-01  5.997000e-01  1.258000e-01 
+ 1.056900e+00  5.520000e-02  7.505000e-01  1.643000e-01  5.627000e-01  1.735000e-01  7.464000e-01  1.701000e-01  5.599000e-01  1.603000e-01  7.443000e-01  1.746000e-01  4.886000e-01  9.790000e-02 
+ 1.082000e+00  2.940000e-02  6.796000e-01  1.778000e-01  5.755000e-01  1.053000e-01  7.075000e-01  1.409000e-01  5.595000e-01  1.105000e-01  8.247000e-01 -2.300000e-03  5.124000e-01  3.890000e-02 
+ 5.710000e-02  1.050300e+00 -1.100000e-03  4.328000e-01  1.623000e-01  1.709000e-01 -3.400000e-02  4.719000e-01 -1.950000e-02  3.805000e-01 -9.330000e-02  5.434000e-01  3.350000e-02  2.892000e-01 
+ 1.309000e-01  3.577000e-01  1.534000e-01  6.240000e-01  1.369000e-01  7.509000e-01  2.430000e-01  5.122000e-01  2.289000e-01  6.538000e-01  2.045000e-01  5.573000e-01  1.022000e-01  3.412000e-01 
+ 3.363000e-01  4.877000e-01  6.284000e-01  5.175000e-01  6.639000e-01  6.105000e-01  1.634700e+00  1.160000e-01 -7.740000e-02  2.089800e+00  1.650000e-02 -2.060000e-02  3.415000e-01  3.319000e-01 
+ 8.430000e-02  3.520000e-01  5.280000e-02  6.516000e-01  6.420000e-02  7.334000e-01  5.900000e-02  6.430000e-01  6.910000e-02  7.387000e-01  1.051000e-01  5.891000e-01  3.390000e-02  3.710000e-01 
+ 2.419000e-01  2.554000e-01  3.898000e-01  3.872000e-01  4.288000e-01  4.575000e-01  3.504000e-01  4.362000e-01  4.903000e-01  3.988000e-01  3.969000e-01  3.784000e-01  2.171000e-01  2.331000e-01 
+ 6.307000e-01  4.740000e-01  9.798000e-01  5.770000e-01  9.152000e-01  7.924000e-01  1.912900e+00 -2.140000e-01  2.007500e+00 -1.050000e-02 -5.000000e-04  1.730100e+00  5.307000e-01  3.768000e-01 
+ 4.460000e-01 -1.960000e-02  7.009000e-01 -2.960000e-02  7.206000e-01  5.770000e-02  6.415000e-01  4.150000e-02  7.693000e-01  1.520000e-02  7.258000e-01 -5.950000e-02  3.754000e-01  1.790000e-02 
+ 1.226000e-01  8.072000e-01  5.387000e-01  6.823000e-01  6.626000e-01  6.829000e-01  1.689300e+00  4.540000e-02 -1.990000e-02  2.019300e+00 -3.810000e-02  4.740000e-02  2.932000e-01  4.304000e-01 
+ 7.825000e-01  9.250000e-02  1.127900e+00  2.562000e-01  1.325700e+00  2.437000e-01  1.183100e+00  1.954000e-01  1.290500e+00  3.130000e-01  1.240500e+00  1.253000e-01  6.916000e-01  1.009000e-01 
+ 4.689000e-01  1.481000e-01  7.357000e-01  2.329000e-01  7.442000e-01  3.792000e-01  6.927000e-01  2.833000e-01  8.208000e-01  3.054000e-01  7.793000e-01  1.818000e-01  4.031000e-01  1.613000e-01 
+ 6.073000e-01  1.505000e-01  8.918000e-01  3.078000e-01  1.123600e+00  2.238000e-01  8.878000e-01  3.141000e-01  1.023600e+00  3.635000e-01  8.919000e-01  3.122000e-01  4.959000e-01  2.008000e-01 
+ 1.084500e+00  2.560000e-02  1.255700e+00  4.653000e-01  9.001000e-01  1.065200e+00  1.240200e+00  4.783000e-01  9.773000e-01  7.541000e-01  1.280700e+00  4.358000e-01  6.714000e-01  3.143000e-01 
+ 1.122400e+00 -2.090000e-02  6.288000e-01  1.111500e+00  5.239000e-01  8.923000e-01  7.640000e-01  9.513000e-01  6.113000e-01  7.272000e-01  6.948000e-01  1.037500e+00  4.859000e-01  4.066000e-01 
+ 8.826000e-01  2.210000e-01  3.047000e-01  6.431000e-01  3.247000e-01  4.102000e-01  4.222000e-01  5.054000e-01  3.085000e-01  4.134000e-01  3.644000e-01  5.701000e-01  2.931000e-01  2.968000e-01 
+-7.180000e-02  6.558000e-01  2.116000e-01  6.708000e-01  3.328000e-01  6.744000e-01  3.570000e-02  1.688300e+00  5.100000e-02  1.946700e+00 -7.030000e-02  8.540000e-02  1.075000e-01  4.049000e-01 
+ 3.613000e-01  7.365000e-01  2.189000e-01  5.576000e-01  1.782000e-01  4.514000e-01  2.020000e-01  5.775000e-01  1.855000e-01  4.275000e-01  2.536000e-01  5.144000e-01  1.511000e-01  3.725000e-01 
+ 1.074900e+00  4.140000e-02  9.121000e-01  1.876000e-01  7.667000e-01  5.760000e-02  9.258000e-01  1.722000e-01  7.291000e-01  8.450000e-02  8.942000e-01  2.083000e-01  5.681000e-01  8.440000e-02 
+ 2.760000e-02  1.086800e+00 -4.250000e-02  5.219000e-01  3.250000e-02  3.607000e-01  2.460000e-02  4.429000e-01  8.690000e-02  2.859000e-01 -1.100000e-03  4.726000e-01  3.560000e-02  3.120000e-01 
+-4.950000e-02  5.970000e-02  5.990000e-02  1.809000e-01  1.120000e-02  3.660000e-01  1.340000e-02 -1.290000e-02  7.630000e-02 -9.200000e-02  5.320000e-02 -6.370000e-02  6.000000e-03  1.293000e-01 
+-7.640000e-02  1.198800e+00  3.247000e-01  1.192000e+00  3.850000e-01  1.257300e+00 -8.280000e-02  1.832100e+00  4.500000e-03  1.991200e+00 -1.990000e-02  1.757700e+00  1.692000e-01  7.139000e-01 
+ 3.735000e-01  7.355000e-01  1.927000e-01  5.480000e-01  2.143000e-01  3.824000e-01  2.458000e-01  4.837000e-01  1.067000e-01  4.974000e-01  1.687000e-01  5.756000e-01  1.769000e-01  3.251000e-01 
+ 2.741000e-01  5.164000e-01  3.749000e-01  8.773000e-01  4.355000e-01  9.832000e-01  4.299000e-01  8.103000e-01  5.146000e-01  9.149000e-01  3.877000e-01  8.587000e-01  2.248000e-01  4.949000e-01 
+-7.800000e-03  7.603000e-01 -4.110000e-02  1.110900e+00 -3.300000e-03  1.193900e+00 -7.110000e-02  1.819100e+00  6.250000e-02  1.926700e+00  4.510000e-02 -5.140000e-02  1.150000e-02  6.132000e-01 
+ 1.184000e+00 -9.540000e-02  4.044000e-01  6.970000e-01  2.919000e-01  5.550000e-01  5.266000e-01  5.560000e-01  3.209000e-01  5.018000e-01  3.657000e-01  7.450000e-01  3.112000e-01  3.396000e-01 
+ 4.732000e-01  3.046000e-01  6.683000e-01  4.455000e-01  8.095000e-01  4.224000e-01  1.736500e+00  1.300000e-03  3.190000e-02  1.964000e+00 -2.400000e-03  3.500000e-03  4.121000e-01  2.376000e-01 
+ 1.384000e-01  6.302000e-01  1.225000e-01  1.096600e+00  2.138000e-01  1.162500e+00  1.260000e-01  1.090700e+00  2.173000e-01  1.177400e+00  2.158000e-01  9.860000e-01  1.137000e-01  5.832000e-01 
+ 5.437000e-01  1.828000e-01  8.222000e-01  3.264000e-01  1.067400e+00  2.131000e-01  8.137000e-01  3.349000e-01  1.033500e+00  2.770000e-01  8.017000e-01  3.519000e-01  5.158000e-01  1.387000e-01 
+ 8.353000e-01  1.856000e-01  1.130800e+00  2.115000e-01  1.142400e+00  3.409000e-01  1.648800e+00  9.690000e-02  1.939400e+00  7.250000e-02 -3.960000e-02  4.650000e-02  6.589000e-01  1.338000e-01 
+ 5.665000e-01  4.000000e-01  8.040000e-01  4.914000e-01  9.725000e-01  4.351000e-01  1.770100e+00 -5.090000e-02 -6.530000e-02  2.077400e+00  8.140000e-02 -9.730000e-02  4.666000e-01  2.948000e-01 
+ 1.780000e-02  6.441000e-01  1.934000e-01  8.153000e-01  2.080000e-01  9.453000e-01  2.370000e-01  7.618000e-01  2.103000e-01  9.556000e-01  8.110000e-02  9.460000e-01  8.990000e-02  4.970000e-01 
+ 3.716000e-01  5.727000e-01  5.762000e-01  9.028000e-01  7.666000e-01  8.992000e-01  6.574000e-01  8.045000e-01  8.085000e-01  8.724000e-01  6.284000e-01  8.446000e-01  3.867000e-01  4.575000e-01 
+ 9.650000e-02  8.800000e-02  5.990000e-02  2.461000e-01  1.445000e-01  1.877000e-01  1.420000e-01  1.516000e-01  1.662000e-01  1.680000e-01  1.162000e-01  1.799000e-01  6.860000e-02  1.019000e-01 
+ 5.024000e-01  5.639000e-01  7.328000e-01  9.492000e-01  8.707000e-01  1.036400e+00  6.174000e-01  1.084500e+00  8.037000e-01  1.142800e+00  7.794000e-01  8.958000e-01  4.507000e-01  5.156000e-01 
+ 5.465000e-01  4.334000e-01  9.130000e-01  6.068000e-01  8.931000e-01  8.647000e-01  8.490000e-01  6.866000e-01  9.978000e-01  7.642000e-01  8.058000e-01  7.353000e-01  4.696000e-01  4.187000e-01 
+ 1.090000e-01  7.328000e-01  2.592000e-01  1.042400e+00  3.453000e-01  1.126100e+00  2.120000e-01  1.099000e+00  3.552000e-01  1.139400e+00  2.400000e-01  1.065500e+00  1.622000e-01  5.869000e-01 
+ 3.045000e-01  4.043000e-01  4.679000e-01  6.469000e-01  5.784000e-01  6.798000e-01  4.442000e-01  6.740000e-01  5.287000e-01  7.581000e-01  4.444000e-01  6.719000e-01  2.540000e-01  3.910000e-01 
+ 5.597000e-01  2.298000e-01  8.849000e-01  3.551000e-01  1.034300e+00  3.724000e-01  1.094000e+00  1.069000e-01  1.116900e+00  3.034000e-01  8.565000e-01  3.830000e-01  5.458000e-01  1.637000e-01 
+ 1.135400e+00 -3.660000e-02  9.930000e-01  7.328000e-01  7.396000e-01  4.829000e-01  1.096200e+00  6.153000e-01  7.750000e-01  4.016000e-01  1.057200e+00  6.568000e-01  6.032000e-01  2.289000e-01 
+ 2.453000e-01  4.808000e-01  4.855000e-01  6.343000e-01  6.267000e-01  6.316000e-01  5.035000e-01  6.100000e-01  6.372000e-01  6.430000e-01  4.382000e-01  6.838000e-01  2.897000e-01  3.544000e-01 
+ 1.590000e-01  9.624000e-01  5.616000e-01  1.167600e+00  7.067000e-01  1.198000e+00  1.750800e+00 -2.140000e-02  1.230000e-02  1.983100e+00  1.710000e-02  1.712500e+00  3.037000e-01  6.852000e-01 
+ 1.016200e+00  1.034000e-01  4.259000e-01  4.574000e-01  3.615000e-01  3.437000e-01  3.998000e-01  4.866000e-01  3.650000e-01  3.214000e-01  4.585000e-01  4.220000e-01  3.193000e-01  2.518000e-01 
+-6.100000e-02  1.181100e+00  1.040000e-02  1.661100e+00  9.170000e-02  1.701800e+00  1.160000e-02  1.715900e+00 -5.730000e-02  2.068800e+00 -1.860000e-02  1.750300e+00  4.010000e-02  9.064000e-01 
+ 1.116900e+00 -1.100000e-02  1.668300e+00  7.910000e-02  1.079600e+00  2.620000e-02  1.753600e+00 -3.070000e-02  9.317000e-01  1.614000e-01  1.719400e+00  1.680000e-02  7.741000e-01  1.160000e-02 
+ 5.425000e-01  5.662000e-01  4.065000e-01  7.119000e-01  1.688000e-01  7.062000e-01  3.222000e-01  8.160000e-01  7.430000e-02  7.979000e-01  1.885000e-01  9.741000e-01  2.290000e-01  4.339000e-01 
+ 1.092100e+00  1.910000e-02  6.402000e-01  6.883000e-01  4.099000e-01  5.550000e-01  5.433000e-01  8.057000e-01  4.109000e-01  5.229000e-01  5.550000e-01  7.881000e-01  4.032000e-01  3.093000e-01 
+ 4.276000e-01  5.982000e-01  8.580000e-01  4.580000e-01  9.666000e-01  4.712000e-01  1.702400e+00  3.460000e-02  9.500000e-03  1.983900e+00  3.450000e-02 -4.050000e-02  4.654000e-01  3.163000e-01 
+ 1.115200e+00 -1.240000e-02  8.336000e-01  9.390000e-02  7.419000e-01 -2.350000e-02  7.926000e-01  1.436000e-01  6.870000e-01  2.140000e-02  8.857000e-01  3.260000e-02  5.579000e-01  2.920000e-02 
+ 6.695000e-01  2.592000e-01  1.030400e+00  1.922000e-01  1.123800e+00  2.317000e-01  1.701900e+00  3.900000e-02  1.941600e+00  6.780000e-02 -6.900000e-03  9.600000e-03  5.872000e-01  1.409000e-01 
+ 1.106000e+00  1.000000e-04  5.493000e-01  1.184000e+00  5.373000e-01  6.650000e-01  4.143000e-01  1.344100e+00  4.731000e-01  6.990000e-01  5.029000e-01  1.236600e+00  4.045000e-01  4.258000e-01 
+ 2.478000e-01  6.458000e-01  4.043000e-01  8.337000e-01  7.193000e-01  6.084000e-01  1.761800e+00 -2.940000e-02  3.350000e-02  1.959700e+00 -3.270000e-02  4.190000e-02  2.817000e-01  4.376000e-01 
+ 7.105000e-01  3.832000e-01  9.548000e-01  4.648000e-01  1.065400e+00  4.734000e-01  1.780600e+00 -5.460000e-02  1.931100e+00  7.980000e-02 -8.090000e-02  1.827600e+00  5.788000e-01  2.513000e-01 
+ 9.968000e-01  1.254000e-01  3.771000e-01  8.535000e-01  3.739000e-01  5.202000e-01  4.012000e-01  8.273000e-01  3.794000e-01  4.933000e-01  3.189000e-01  9.200000e-01  3.228000e-01  3.621000e-01 
+ 8.350000e-02  5.562000e-01 -2.360000e-02  9.990000e-01  1.625000e-01  8.986000e-01 -2.440000e-02  1.758700e+00  9.700000e-02  1.884700e+00 -6.000000e-03  8.400000e-03  4.000000e-03  5.609000e-01 
+ 7.489000e-01  2.026000e-01  1.055900e+00  4.588000e-01  1.076900e+00  6.637000e-01  9.010000e-01  6.377000e-01  1.106200e+00  6.628000e-01  9.712000e-01  5.537000e-01  5.625000e-01  3.189000e-01 
+ 6.852000e-01  4.216000e-01  2.922000e-01  1.446000e+00  2.703000e-01  1.491500e+00  3.944000e-01  1.328700e+00  2.530000e-01  1.362000e+00  3.464000e-01  1.382300e+00  2.611000e-01  7.005000e-01 
+ 1.096600e+00  1.160000e-02  5.389000e-01  6.236000e-01  4.291000e-01  4.441000e-01  4.939000e-01  6.776000e-01  5.015000e-01  3.356000e-01  5.481000e-01  6.099000e-01  3.832000e-01  2.869000e-01 
+ 4.674000e-01  3.366000e-01  6.300000e-01  6.509000e-01  8.707000e-01  5.648000e-01  8.028000e-01  4.547000e-01  7.896000e-01  6.800000e-01  6.882000e-01  5.842000e-01  3.931000e-01  3.419000e-01 
+ 3.740000e-02  3.977000e-01  1.968000e-01  5.588000e-01  3.630000e-01  5.027000e-01  5.700000e-03  1.723800e+00  5.880000e-02 -6.790000e-02  4.370000e-02 -5.240000e-02  9.980000e-02  3.309000e-01 
+-8.640000e-02  7.606000e-01  1.386000e-01  8.285000e-01  1.761000e-01  9.310000e-01  1.890000e-02  1.707500e+00  8.900000e-02  1.899300e+00 -2.260000e-02  2.660000e-02  7.470000e-02  4.927000e-01 
+ 9.280000e-02  4.511000e-01  2.259000e-01  6.111000e-01  2.024000e-01  7.561000e-01  2.166000e-01  6.206000e-01  2.474000e-01  7.191000e-01  3.004000e-01  5.213000e-01  1.155000e-01  3.700000e-01 
+ 1.129200e+00 -2.850000e-02  1.839300e+00 -1.256000e-01  1.044800e+00  3.002000e-01  1.690200e+00  4.770000e-02  1.060200e+00  2.250000e-01  1.756400e+00 -2.550000e-02  7.967000e-01  7.160000e-02 
+ 4.576000e-01  6.481000e-01  8.842000e-01  6.654000e-01  8.400000e-01  8.585000e-01  1.776800e+00 -5.000000e-02 -2.600000e-02  2.027400e+00 -3.770000e-02  1.776600e+00  4.504000e-01  4.539000e-01 
+ 9.950000e-01  1.179000e-01  4.039000e-01  5.380000e-02  3.093000e-01  8.520000e-02  3.899000e-01  6.880000e-02  3.294000e-01  5.420000e-02  3.797000e-01  8.240000e-02  3.046000e-01  4.090000e-02 
+ 3.339000e-01  6.875000e-01  4.558000e-01  1.153400e+00  6.172000e-01  1.192000e+00  5.502000e-01  1.038800e+00  6.202000e-01  1.225200e+00  5.811000e-01  1.007600e+00  3.185000e-01  6.004000e-01 
+-4.820000e-02  6.359000e-01  1.800000e-02  8.810000e-01  2.713000e-01  7.287000e-01 -7.900000e-03  1.742900e+00 -7.300000e-02  2.082400e+00  1.420000e-02 -1.830000e-02  5.610000e-02  4.595000e-01 
+ 2.457000e-01  8.729000e-01  5.142000e-01  1.241100e+00  6.712000e-01  1.218500e+00  1.593200e+00  1.650000e-01 -7.070000e-02  2.076500e+00 -4.660000e-02  1.782600e+00  3.449000e-01  6.335000e-01 
+ 1.229000e-01  4.821000e-01  1.893000e-01  7.599000e-01  1.586000e-01  9.281000e-01  1.126000e-01  8.487000e-01  1.617000e-01  9.455000e-01  1.438000e-01  8.120000e-01  8.710000e-02  4.641000e-01 
+ 1.070200e+00  4.060000e-02  9.576000e-01  7.759000e-01  7.389000e-01  6.740000e-01  9.694000e-01  7.624000e-01  6.454000e-01  7.210000e-01  8.924000e-01  8.504000e-01  5.947000e-01  3.001000e-01 
+ 1.169300e+00 -7.410000e-02  4.090000e-01  1.405000e-01  3.912000e-01  5.770000e-02  3.398000e-01  2.218000e-01  3.632000e-01  8.360000e-02  3.703000e-01  1.829000e-01  3.115000e-01  8.760000e-02 
+ 1.105400e+00 -1.500000e-03  8.807000e-01  8.586000e-01  7.397000e-01  7.915000e-01  8.299000e-01  9.165000e-01  6.437000e-01  8.200000e-01  8.560000e-01  8.872000e-01  5.826000e-01  3.420000e-01 
+ 7.364000e-01  3.606000e-01  3.379000e-01  1.395600e+00  3.809000e-01  6.602000e-01  3.742000e-01  1.349900e+00  2.766000e-01  7.495000e-01  3.453000e-01  1.385800e+00  2.625000e-01  5.014000e-01 
+ 2.111000e-01  4.445000e-01  3.171000e-01  7.100000e-01  2.735000e-01  9.087000e-01  2.507000e-01  7.881000e-01  3.714000e-01  8.123000e-01  3.026000e-01  7.286000e-01  1.915000e-01  3.995000e-01 
+ 1.103900e+00  1.500000e-03  1.563900e+00  1.408000e-01  1.042800e+00  2.625000e-01  1.342200e+00  4.042000e-01  9.119000e-01  3.649000e-01  1.385600e+00  3.508000e-01  7.253000e-01  1.404000e-01 
+ 4.195000e-01  8.830000e-02  7.209000e-01  9.850000e-02  9.006000e-01  3.060000e-02  1.774500e+00 -4.860000e-02  4.910000e-02 -5.700000e-02 -4.180000e-02  4.740000e-02  4.286000e-01  3.880000e-02 
+ 5.653000e-01  2.091000e-01  8.336000e-01  2.673000e-01  9.022000e-01  3.250000e-01  1.754900e+00 -2.750000e-02 -4.610000e-02  2.045700e+00  9.900000e-03 -1.070000e-02  4.766000e-01  1.708000e-01 
+ 1.073400e+00  3.650000e-02  1.302600e+00  4.334000e-01  9.583000e-01  1.296000e-01  1.387600e+00  3.254000e-01  9.933000e-01  4.790000e-02  1.318700e+00  4.104000e-01  7.018000e-01  7.740000e-02 
+ 1.012300e+00  9.170000e-02  1.274500e+00  4.656000e-01  1.394300e+00  5.197000e-01  1.596500e+00  1.580000e-01  1.963400e+00  4.470000e-02 -3.710000e-02  1.775800e+00  7.757000e-01  2.109000e-01 
+ 3.312000e-01  4.549000e-01  4.088000e-01  8.564000e-01  4.991000e-01  9.237000e-01  3.774000e-01  8.868000e-01  4.258000e-01  1.034300e+00  4.400000e-01  8.127000e-01  2.453000e-01  4.791000e-01 
+ 2.755000e-01  5.100000e-02  5.709000e-01  7.640000e-02  6.809000e-01  8.630000e-02  1.552000e+00  2.105000e-01  1.029000e-01 -1.244000e-01  4.730000e-02 -5.740000e-02  3.188000e-01  4.080000e-02 
+ 1.982000e-01  4.741000e-01  5.539000e-01  4.219000e-01  5.941000e-01  5.179000e-01  1.645400e+00  9.840000e-02 -2.010000e-02  2.023500e+00  2.800000e-03 -4.000000e-03  2.789000e-01  2.966000e-01 
+ 5.457000e-01  5.523000e-01  2.855000e-01  1.444900e+00  2.507000e-01  9.536000e-01  2.293000e-01  1.511200e+00  1.937000e-01  9.833000e-01  2.684000e-01  1.465500e+00  2.168000e-01  6.102000e-01 
+-1.760000e-02  7.540000e-01  2.606000e-01  7.783000e-01  3.203000e-01  8.502000e-01  3.800000e-02  1.688500e+00 -8.700000e-03  2.010800e+00  1.600000e-03 -5.200000e-03  1.225000e-01  4.917000e-01 
+ 4.159000e-01  3.145000e-01  5.517000e-01  6.108000e-01  6.129000e-01  7.097000e-01  5.831000e-01  5.751000e-01  5.852000e-01  7.686000e-01  6.010000e-01  5.550000e-01  3.130000e-01  3.593000e-01 
+ 9.423000e-01  8.490000e-02  1.512500e+00  9.520000e-02  1.424700e+00  4.486000e-01  1.395900e+00  2.259000e-01  1.504800e+00  3.934000e-01  1.365400e+00  2.641000e-01  7.831000e-01  1.587000e-01 
+ 4.414000e-01  3.166000e-01  7.875000e-01  2.755000e-01  8.969000e-01  2.846000e-01  1.744600e+00 -1.050000e-02  2.500000e-02  1.969800e+00  6.880000e-02 -8.310000e-02  4.572000e-01  1.650000e-01 
+ 4.897000e-01  6.166000e-01  7.778000e-01  7.313000e-01  9.998000e-01  6.125000e-01  1.702800e+00  3.800000e-02  1.101000e-01  1.871500e+00  6.670000e-02  1.654300e+00  4.621000e-01  4.153000e-01 
+ 3.592000e-01  1.203000e-01  5.896000e-01  1.628000e-01  7.070000e-01  1.390000e-01  6.235000e-01  1.224000e-01  6.721000e-01  1.972000e-01  6.086000e-01  1.439000e-01  3.612000e-01  6.870000e-02 
+ 1.177800e+00 -8.270000e-02  1.425000e+00  2.890000e-02  1.075300e+00 -1.025000e-01  1.426900e+00  3.190000e-02  9.603000e-01  8.000000e-04  1.419000e+00  4.170000e-02  7.187000e-01  1.360000e-02 
+ 2.602000e-01  7.164000e-01  7.322000e-01  5.280000e-01  7.810000e-01  6.129000e-01  1.754400e+00 -2.570000e-02 -4.170000e-02  2.048600e+00 -7.420000e-02  8.850000e-02  3.622000e-01  3.902000e-01 
+ 9.853000e-01  1.293000e-01  4.345000e-01  2.152000e-01  3.437000e-01  1.954000e-01  4.099000e-01  2.471000e-01  3.284000e-01  2.032000e-01  4.200000e-01  2.330000e-01  3.041000e-01  1.577000e-01 
+ 9.117000e-01  1.948000e-01  1.158700e+00  4.074000e-01  1.335200e+00  3.364000e-01  1.714900e+00  1.760000e-02  2.016600e+00 -2.550000e-02 -1.041000e-01  1.856400e+00  7.200000e-01  1.807000e-01 
+ 1.140600e+00 -3.580000e-02  6.300000e-01  1.801000e-01  3.542000e-01  3.308000e-01  5.145000e-01  3.221000e-01  4.868000e-01  1.562000e-01  5.023000e-01  3.346000e-01  4.021000e-01  1.433000e-01 
+ 6.267000e-01  4.142000e-01  9.552000e-01  6.795000e-01  1.028300e+00  8.437000e-01  9.689000e-01  6.655000e-01  1.223900e+00  6.474000e-01  9.202000e-01  7.226000e-01  5.495000e-01  3.955000e-01 
+ 2.915000e-01  2.898000e-01  3.733000e-01  5.469000e-01  3.424000e-01  7.258000e-01  3.200000e-01  6.140000e-01  4.248000e-01  6.449000e-01  2.811000e-01  6.647000e-01  1.979000e-01  3.389000e-01 
+ 7.741000e-01  1.946000e-01  1.068400e+00  4.755000e-01  1.394300e+00  3.300000e-01  1.170700e+00  3.506000e-01  1.343000e+00  4.205000e-01  1.218300e+00  2.957000e-01  6.731000e-01  2.077000e-01 
+-3.680000e-02  4.017000e-01  6.590000e-02  6.122000e-01  2.108000e-01  5.843000e-01 -7.320000e-02  1.821100e+00 -7.040000e-02  8.380000e-02 -1.620000e-02  1.770000e-02  6.800000e-02  3.089000e-01 
+ 3.511000e-01  8.330000e-02  6.243000e-01  4.320000e-02  6.950000e-01  7.220000e-02  6.273000e-01  3.880000e-02  8.073000e-01 -5.250000e-02  6.866000e-01 -2.930000e-02  3.668000e-01  1.780000e-02 
+-2.200000e-03  4.328000e-01  9.620000e-02  5.566000e-01  1.032000e-01  6.397000e-01  7.780000e-02  5.799000e-01  1.418000e-01  6.060000e-01  1.540000e-02  6.526000e-01  4.010000e-02  3.400000e-01 
+ 1.157000e-01  3.932000e-01  2.233000e-01  5.684000e-01  3.136000e-01  5.740000e-01  2.221000e-01  5.673000e-01  1.697000e-01  7.595000e-01  1.936000e-01  6.002000e-01  1.201000e-01  3.379000e-01 
+ 3.699000e-01  7.311000e-01  7.281000e-01  9.934000e-01  6.734000e-01  1.311100e+00  1.734800e+00 -5.500000e-03  1.186000e-01  1.858800e+00 -1.470000e-02  1.746300e+00  3.813000e-01  6.166000e-01 
+ 3.891000e-01  2.215000e-01  6.282000e-01  3.252000e-01  7.111000e-01  3.700000e-01  6.102000e-01  3.434000e-01  7.287000e-01  3.707000e-01  5.959000e-01  3.620000e-01  3.536000e-01  1.964000e-01 
+ 1.167600e+00 -7.010000e-02  3.770000e-01  1.359000e+00  2.343000e-01  1.332700e+00  4.709000e-01  1.250900e+00  2.915000e-01  1.174700e+00  3.580000e-01  1.382700e+00  3.080000e-01  6.191000e-01 
+ 4.259000e-01  4.327000e-01  6.630000e-01  6.835000e-01  6.497000e-01  9.032000e-01  6.208000e-01  7.378000e-01  6.525000e-01  9.307000e-01  6.688000e-01  6.760000e-01  3.576000e-01  4.249000e-01 
+ 4.507000e-01  5.850000e-01  7.612000e-01  8.484000e-01  8.878000e-01  9.469000e-01  7.216000e-01  8.978000e-01  7.942000e-01  1.079400e+00  7.377000e-01  8.773000e-01  4.067000e-01  5.303000e-01 
+ 1.700000e-01  9.436000e-01  1.486000e-01  1.091900e+00  5.420000e-02  8.650000e-01  2.837000e-01  9.306000e-01  1.378000e-01  7.436000e-01  1.412000e-01  1.099300e+00  1.027000e-01  5.879000e-01 
+ 3.313000e-01  2.213000e-01  5.529000e-01  3.276000e-01  7.630000e-01  2.247000e-01  1.775100e+00 -4.960000e-02 -1.123000e-01  2.130400e+00  3.450000e-02 -4.120000e-02  3.109000e-01  1.995000e-01 
+-3.970000e-02  8.653000e-01  2.490000e-02  1.106400e+00  1.539000e-01  1.077600e+00  2.170000e-02  1.703100e+00 -3.390000e-02  2.043400e+00  4.890000e-02 -5.940000e-02  9.900000e-03  6.578000e-01 
+ 4.160000e-02  2.492000e-01  3.630000e-02  5.778000e-01  2.428000e-01  4.730000e-01 -2.500000e-03  1.733400e+00 -5.520000e-02  6.750000e-02  4.880000e-02 -5.870000e-02  4.570000e-02  2.934000e-01 
+ 1.156100e+00 -6.180000e-02  4.096000e-01  1.040000e+00  4.179000e-01  5.648000e-01  4.842000e-01  9.480000e-01  3.375000e-01  6.273000e-01  3.995000e-01  1.051100e+00  3.377000e-01  3.912000e-01 
+ 1.151400e+00 -5.380000e-02  5.146000e-01  1.212200e+00  4.147000e-01  8.332000e-01  5.307000e-01  1.194600e+00  3.870000e-01  8.223000e-01  5.730000e-01  1.144800e+00  3.725000e-01  4.698000e-01 
+ 8.854000e-01  2.118000e-01  2.810000e-01  5.846000e-01  3.241000e-01  3.542000e-01  3.327000e-01  5.222000e-01  3.007000e-01  3.679000e-01  4.131000e-01  4.262000e-01  2.879000e-01  2.674000e-01 
+ 3.638000e-01  3.804000e-01  7.445000e-01  2.988000e-01  8.495000e-01  3.202000e-01  1.906100e+00 -2.026000e-01  0.000000e+00  2.001200e+00 -8.700000e-03  9.600000e-03  3.821000e-01  2.389000e-01 
+ 2.077000e-01  4.487000e-01  2.482000e-01  7.953000e-01  3.955000e-01  7.727000e-01  3.535000e-01  6.678000e-01  4.896000e-01  6.782000e-01  3.969000e-01  6.183000e-01  2.022000e-01  3.902000e-01 
+ 2.329000e-01  6.285000e-01  5.094000e-01  8.113000e-01  6.033000e-01  8.956000e-01  5.496000e-01  7.599000e-01  6.561000e-01  8.529000e-01  5.272000e-01  7.862000e-01  3.007000e-01  4.596000e-01 
+ 2.791000e-01  3.898000e-01  3.058000e-01  7.622000e-01  5.019000e-01  6.861000e-01  4.306000e-01  6.145000e-01  4.562000e-01  7.582000e-01  4.978000e-01  5.388000e-01  2.469000e-01  3.571000e-01 
+ 7.123000e-01  4.088000e-01  4.206000e-01  5.596000e-01  2.809000e-01  4.953000e-01  3.921000e-01  5.953000e-01  3.269000e-01  4.263000e-01  3.688000e-01  6.182000e-01  2.817000e-01  3.309000e-01 
+ 4.560000e-01  6.668000e-01  9.033000e-01  7.476000e-01  1.013600e+00  7.590000e-01  1.754300e+00 -2.050000e-02  1.967200e+00  3.600000e-02 -5.360000e-02  1.796700e+00  5.007000e-01  4.429000e-01 
+ 8.890000e-02  1.325000e-01  4.074000e-01  1.244000e-01  5.965000e-01  4.450000e-02  1.626600e+00  1.235000e-01 -4.290000e-02  5.310000e-02  4.770000e-02 -5.700000e-02  2.280000e-01  6.230000e-02 
+ 1.146600e+00 -4.920000e-02  7.559000e-01  2.360000e-02  5.875000e-01  5.060000e-02  7.465000e-01  3.910000e-02  6.143000e-01  2.300000e-03  8.245000e-01 -5.390000e-02  5.154000e-01  7.700000e-03 
+ 8.170000e-02  2.001000e-01  1.828000e-01  2.480000e-01  5.410000e-02  4.648000e-01  1.310000e-01  3.071000e-01  6.150000e-02  4.636000e-01  1.292000e-01  3.150000e-01  6.720000e-02  1.890000e-01 
+ 3.180000e-02  6.007000e-01  9.280000e-02  8.930000e-01  6.660000e-02  1.058400e+00  1.871000e-01  7.811000e-01  1.862000e-01  9.383000e-01  1.827000e-01  7.888000e-01  4.380000e-02  5.275000e-01 
+ 4.072000e-01  3.659000e-01  5.085000e-01  7.296000e-01  5.936000e-01  8.117000e-01  6.028000e-01  6.189000e-01  5.598000e-01  8.765000e-01  6.076000e-01  6.148000e-01  3.187000e-01  3.925000e-01 
+ 2.243000e-01  6.124000e-01  4.186000e-01  7.552000e-01  5.787000e-01  7.057000e-01  1.668500e+00  7.700000e-02 -8.110000e-02  2.092600e+00 -5.970000e-02  7.010000e-02  2.660000e-01  4.185000e-01 
+ 1.119900e+00 -1.730000e-02  7.295000e-01  1.010000e+00  6.374000e-01  6.944000e-01  7.769000e-01  9.545000e-01  7.149000e-01  5.439000e-01  7.168000e-01  1.024200e+00  5.167000e-01  3.524000e-01 
+ 4.520000e-01  4.722000e-01  6.902000e-01  7.582000e-01  9.625000e-01  6.599000e-01  7.994000e-01  6.382000e-01  8.570000e-01  8.108000e-01  7.531000e-01  6.950000e-01  4.221000e-01  4.123000e-01 
+ 1.081400e+00  2.580000e-02  7.381000e-01  8.548000e-01  5.455000e-01  4.843000e-01  8.089000e-01  7.721000e-01  6.447000e-01  3.352000e-01  7.806000e-01  8.049000e-01  5.102000e-01  2.349000e-01 
+-3.530000e-02  9.139000e-01  3.109000e-01  8.767000e-01  3.875000e-01  9.291000e-01  1.760000e-02  1.708500e+00  5.190000e-02  1.937300e+00 -2.270000e-02  2.460000e-02  1.649000e-01  5.366000e-01 
+ 9.807000e-01  1.179000e-01  4.309000e-01  2.824000e-01  3.117000e-01  2.823000e-01  4.382000e-01  2.777000e-01  3.246000e-01  2.548000e-01  4.180000e-01  3.002000e-01  3.007000e-01  1.943000e-01 
+ 3.250000e-01  2.790000e-01  7.360000e-01  1.607000e-01  7.521000e-01  2.878000e-01  1.784500e+00 -6.330000e-02 -7.240000e-02  2.082300e+00  3.470000e-02 -4.150000e-02  3.443000e-01  1.906000e-01 
+ 5.688000e-01  9.040000e-02  8.446000e-01  1.970000e-01  9.281000e-01  2.649000e-01  8.492000e-01  1.929000e-01  8.796000e-01  3.376000e-01  7.574000e-01  3.030000e-01  4.745000e-01  1.294000e-01 
+ 3.120000e-01  4.004000e-01  6.671000e-01  3.566000e-01  5.774000e-01  6.072000e-01  1.690600e+00  5.000000e-02  1.290000e-02  1.987400e+00 -1.380000e-02  1.650000e-02  3.382000e-01  2.667000e-01 
+ 1.663000e-01  6.186000e-01  1.562000e-01  1.084300e+00  1.519000e-01  1.267800e+00  1.862000e-01  1.049100e+00  3.050000e-01  1.105300e+00  1.669000e-01  1.073600e+00  1.202000e-01  5.912000e-01 
+ 3.376000e-01  5.206000e-01  4.022000e-01  9.626000e-01  6.526000e-01  8.635000e-01  5.593000e-01  7.763000e-01  5.713000e-01  9.856000e-01  6.018000e-01  7.242000e-01  3.129000e-01  4.596000e-01 
+ 4.579000e-01  6.553000e-01  2.936000e-01  8.654000e-01  2.920000e-01  5.680000e-01  2.777000e-01  8.882000e-01  2.360000e-01  6.118000e-01  2.499000e-01  9.187000e-01  2.159000e-01  4.540000e-01 
+ 3.084000e-01  5.384000e-01  6.887000e-01  4.607000e-01  7.591000e-01  5.193000e-01  1.674400e+00  6.190000e-02 -2.330000e-02  2.028300e+00 -1.730000e-02  2.100000e-02  3.601000e-01  3.235000e-01 
+ 2.808000e-01  2.563000e-01  4.488000e-01  3.873000e-01  5.796000e-01  3.615000e-01  4.806000e-01  3.485000e-01  5.999000e-01  3.518000e-01  4.774000e-01  3.545000e-01  2.802000e-01  1.986000e-01 
+ 8.380000e-02  1.481000e-01  1.604000e-01  1.943000e-01  2.514000e-01  1.399000e-01  2.079000e-01  1.384000e-01  2.309000e-01  1.706000e-01  1.796000e-01  1.728000e-01  1.045000e-01  9.790000e-02 
+ 5.270000e-02  4.620000e-01  3.844000e-01  4.432000e-01  5.097000e-01  4.337000e-01 -2.350000e-02  1.761600e+00 -9.900000e-03  1.100000e-02  3.140000e-02 -3.780000e-02  1.804000e-01  3.003000e-01 
+ 4.784000e-01 -3.000000e-03  7.456000e-01  2.300000e-03  7.309000e-01  1.364000e-01  6.966000e-01  5.930000e-02  7.600000e-01  1.187000e-01  7.205000e-01  3.540000e-02  4.033000e-01  3.320000e-02 
+ 3.585000e-01  6.260000e-01  7.743000e-01  5.065000e-01  7.985000e-01  6.149000e-01  1.737500e+00 -1.090000e-02  4.900000e-02  1.945400e+00 -8.970000e-02  1.065000e-01  4.380000e-01  3.180000e-01 
+ 5.082000e-01  5.910000e-01  7.890000e-01  7.576000e-01  8.673000e-01  8.025000e-01  1.677600e+00  6.540000e-02 -5.020000e-02  2.058300e+00  8.400000e-02  1.632800e+00  4.487000e-01  4.481000e-01 
+ 3.315000e-01  5.409000e-01  6.587000e-01  5.250000e-01  6.879000e-01  6.287000e-01  1.730300e+00  0.000000e+00  8.930000e-02  1.898600e+00  4.910000e-02 -5.990000e-02  3.776000e-01  3.192000e-01 
+ 7.500000e-03  7.326000e-01  2.217000e-01  8.010000e-01  2.055000e-01  9.643000e-01  6.180000e-02  1.656800e+00 -5.870000e-02  2.070400e+00 -2.560000e-02  3.100000e-02  4.460000e-02  5.755000e-01 
+-4.240000e-02  7.591000e-01  3.428000e-01  6.647000e-01  3.545000e-01  7.933000e-01  5.000000e-02  1.675500e+00 -9.690000e-02  2.112200e+00 -1.800000e-03  2.400000e-03  1.535000e-01  4.441000e-01 
+ 3.393000e-01  5.055000e-01  6.030000e-01  7.080000e-01  7.056000e-01  7.814000e-01  6.102000e-01  7.022000e-01  7.245000e-01  7.864000e-01  5.652000e-01  7.547000e-01  3.327000e-01  4.272000e-01 
+ 6.824000e-01  4.344000e-01  1.050700e+00  6.378000e-01  1.118400e+00  7.004000e-01  1.775100e+00 -5.320000e-02  1.875000e+00  1.442000e-01  3.940000e-02  1.686500e+00  6.244000e-01  3.308000e-01 
+ 3.648000e-01  5.643000e-01  7.458000e-01  4.867000e-01  8.342000e-01  5.187000e-01  1.737500e+00 -6.500000e-03 -9.810000e-02  2.117800e+00 -5.920000e-02  7.120000e-02  3.983000e-01  3.318000e-01 
+ 1.129600e+00 -3.020000e-02  6.534000e-01  1.097600e+00  6.021000e-01  4.781000e-01  7.221000e-01  1.015500e+00  6.298000e-01  4.144000e-01  7.729000e-01  9.528000e-01  5.045000e-01  2.708000e-01 
+ 4.052000e-01  3.131000e-01  6.783000e-01  4.436000e-01  7.699000e-01  5.071000e-01  6.499000e-01  4.775000e-01  8.500000e-01  4.314000e-01  7.182000e-01  3.959000e-01  4.053000e-01  2.391000e-01 
+ 1.131800e+00 -3.150000e-02  6.668000e-01  5.677000e-01  5.198000e-01  3.855000e-01  6.295000e-01  6.142000e-01  4.733000e-01  4.171000e-01  7.019000e-01  5.303000e-01  4.325000e-01  2.588000e-01 
+-1.350000e-02  9.692000e-01  6.860000e-02  1.201600e+00  2.007000e-01  1.184700e+00 -1.011000e-01  1.850400e+00  2.550000e-02  1.973700e+00  6.100000e-02 -7.320000e-02  5.340000e-02  6.952000e-01 
+ 1.009400e+00  1.134000e-01  4.213000e-01  8.066000e-01  3.547000e-01  5.525000e-01  4.474000e-01  7.713000e-01  4.188000e-01  4.510000e-01  5.455000e-01  6.543000e-01  3.627000e-01  3.198000e-01 
+ 4.146000e-01  4.600000e-02  7.304000e-01  4.780000e-02  8.895000e-01 -9.000000e-04  1.766900e+00 -4.180000e-02  1.940000e-02 -2.560000e-02  1.600000e-03 -2.100000e-03  4.215000e-01  2.020000e-02 
+ 4.200000e-03  7.406000e-01  4.619000e-01  5.687000e-01  5.006000e-01  6.651000e-01  1.647100e+00  9.630000e-02 -8.380000e-02  2.093600e+00  1.680000e-02 -2.180000e-02  2.127000e-01  3.993000e-01 
+ 8.960000e-01  2.122000e-01  1.236100e+00  2.560000e-01  1.376200e+00  2.300000e-01  1.731100e+00  5.000000e-04  1.994500e+00  4.600000e-03 -2.330000e-02  1.759100e+00  7.241000e-01  1.468000e-01 
+ 1.125000e+00 -2.640000e-02  1.185100e+00  5.672000e-01  9.300000e-01  2.285000e-01  1.218800e+00  5.273000e-01  8.381000e-01  2.953000e-01  1.288500e+00  4.426000e-01  7.039000e-01  1.022000e-01 
+ 9.570000e-02  2.974000e-01  4.062000e-01  1.635000e-01  4.607000e-01  1.812000e-01  3.996000e-01  1.672000e-01  4.821000e-01  1.683000e-01  3.296000e-01  2.546000e-01  2.160000e-01  1.141000e-01 
+ 1.066400e+00  5.060000e-02  4.352000e-01  1.309700e+00  3.315000e-01  1.332100e+00  4.690000e-01  1.277800e+00  4.950000e-01  1.028800e+00  4.517000e-01  1.293800e+00  3.870000e-01  5.589000e-01 
+ 9.807000e-01  1.493000e-01  1.107100e+00  6.114000e-01  7.685000e-01  2.679000e-01  9.559000e-01  7.915000e-01  7.832000e-01  2.189000e-01  1.040300e+00  6.888000e-01  6.295000e-01  1.212000e-01 
+ 4.976000e-01  3.970000e-01  6.387000e-01  7.825000e-01  8.251000e-01  7.792000e-01  7.457000e-01  6.585000e-01  7.633000e-01  8.793000e-01  7.247000e-01  6.854000e-01  3.927000e-01  4.256000e-01 
+ 7.080000e-02  8.437000e-01  1.565000e-01  1.267600e+00  2.215000e-01  1.388900e+00  2.746000e-01  1.129200e+00  2.840000e-01  1.339000e+00  1.668000e-01  1.250800e+00  1.165000e-01  7.000000e-01 
+ 2.704000e-01  7.288000e-01  6.289000e-01  6.757000e-01  7.274000e-01  7.037000e-01  1.694200e+00  4.620000e-02  5.750000e-02  1.930000e+00 -1.150000e-02  1.200000e-02  3.791000e-01  3.871000e-01 
+ 3.198000e-01  7.852000e-01  6.013000e-01  1.135000e+00  7.234000e-01  1.198300e+00  1.628900e+00  1.248000e-01 -4.420000e-02  2.053300e+00  8.170000e-02  1.635800e+00  3.488000e-01  6.410000e-01 
+ 8.978000e-01  1.226000e-01  1.111100e+00  2.376000e-01  1.333900e+00  1.199000e-01  1.906700e+00 -2.029000e-01  1.955700e+00  4.500000e-02  1.680000e-02 -1.970000e-02  7.193000e-01  6.620000e-02 
+ 3.376000e-01  4.681000e-01  7.722000e-01  3.205000e-01  7.227000e-01  5.211000e-01  1.563600e+00  1.941000e-01  5.300000e-03  1.993600e+00 -4.300000e-02  5.260000e-02  3.808000e-01  2.757000e-01 
+-1.780000e-02  9.781000e-01  2.480000e-01  1.004500e+00  2.617000e-01  1.130300e+00 -5.760000e-02  1.800700e+00  3.090000e-02  1.965300e+00 -6.770000e-02  7.990000e-02  9.110000e-02  6.573000e-01 
+ 3.065000e-01  4.802000e-01  5.440000e-01  6.745000e-01  5.246000e-01  8.795000e-01  4.652000e-01  7.694000e-01  5.639000e-01  8.570000e-01  4.735000e-01  7.587000e-01  2.864000e-01  4.227000e-01 
+ 7.427000e-01  7.390000e-02  1.189300e+00  8.300000e-02  1.414300e+00  2.050000e-02  1.250600e+00  6.000000e-03  1.441500e+00  1.240000e-02  1.193500e+00  7.420000e-02  7.161000e-01  1.110000e-02 
+ 4.666000e-01  6.226000e-01  8.800000e-01  7.976000e-01  9.467000e-01  9.688000e-01  6.725000e-01  1.039400e+00  8.872000e-01  1.067700e+00  7.361000e-01  9.614000e-01  4.290000e-01  5.515000e-01 
+ 3.063000e-01  6.264000e-01  7.307000e-01  4.934000e-01  8.177000e-01  5.290000e-01  1.775700e+00 -4.860000e-02 -1.500000e-02  2.013600e+00 -5.090000e-02  6.170000e-02  4.033000e-01  3.219000e-01 
+-2.300000e-03  9.057000e-01  2.291000e-01  9.915000e-01  4.589000e-01  8.647000e-01  5.000000e-04  1.731800e+00  4.500000e-03  1.990400e+00 -5.000000e-03  5.300000e-03  1.490000e-01  5.679000e-01 
+ 7.854000e-01  3.098000e-01  2.999000e-01  6.876000e-01  2.856000e-01  4.767000e-01  3.644000e-01  6.130000e-01  2.626000e-01  4.918000e-01  3.000000e-01  6.889000e-01  2.698000e-01  3.384000e-01 
+ 4.141000e-01  2.904000e-01  6.394000e-01  3.938000e-01  8.197000e-01  3.237000e-01  1.624800e+00  1.227000e-01 -1.530000e-02  2.018500e+00 -3.490000e-02  4.160000e-02  4.051000e-01  1.915000e-01 
+ 6.392000e-01  4.688000e-01  9.039000e-01  8.416000e-01  1.061400e+00  8.376000e-01  1.598700e+00  1.593000e-01  1.972200e+00  3.310000e-02 -9.980000e-02  1.852400e+00  5.675000e-01  4.143000e-01 
+ 6.436000e-01  2.330000e-02  1.019000e+00 -4.770000e-02  9.992000e-01  1.174000e-01  1.605600e+00  1.474000e-01  2.067800e+00 -8.150000e-02  5.890000e-02 -6.990000e-02  5.617000e-01  1.030000e-02 
+ 1.056800e+00  5.610000e-02  9.277000e-01  3.840000e-01  7.862000e-01  1.421000e-01  9.047000e-01  4.088000e-01  7.154000e-01  1.977000e-01  9.725000e-01  3.286000e-01  5.982000e-01  1.060000e-01 
+ 2.863000e-01  2.397000e-01  3.017000e-01  5.512000e-01  4.118000e-01  5.414000e-01  4.823000e-01  3.335000e-01  2.984000e-01  6.918000e-01  4.641000e-01  3.558000e-01  2.224000e-01  2.593000e-01 
+ 4.731000e-01  8.560000e-02  7.429000e-01  1.325000e-01  9.045000e-01  8.170000e-02  8.110000e-01  4.620000e-02  8.391000e-01  1.784000e-01  7.406000e-01  1.352000e-01  4.483000e-01  5.340000e-02 
+ 1.335000e-01  9.647000e-01  4.820000e-02  1.051100e+00  1.408000e-01  6.785000e-01  3.630000e-02  1.068100e+00  7.970000e-02  7.308000e-01  1.641000e-01  9.179000e-01  4.960000e-02  6.001000e-01 
+ 4.580000e-02  9.044000e-01  3.932000e-01  8.614000e-01  5.322000e-01  8.431000e-01  1.675300e+00  6.230000e-02  3.500000e-02  1.957700e+00 -3.200000e-03  3.000000e-03  2.104000e-01  5.312000e-01 
+ 1.039000e+00  7.570000e-02  7.307000e-01  1.009800e+00  5.982000e-01  1.377000e+00  7.363000e-01  1.004300e+00  6.714000e-01  1.031500e+00  8.457000e-01  8.775000e-01  5.253000e-01  4.539000e-01 
+ 5.764000e-01  3.032000e-01  9.577000e-01  4.120000e-01  9.673000e-01  6.153000e-01  9.352000e-01  4.392000e-01  9.752000e-01  6.314000e-01  7.572000e-01  6.480000e-01  5.075000e-01  2.932000e-01 
+ 1.140700e+00 -4.550000e-02  9.417000e-01  7.776000e-01  7.075000e-01  5.760000e-01  8.199000e-01  9.228000e-01  6.980000e-01  5.391000e-01  9.480000e-01  7.681000e-01  5.668000e-01  2.880000e-01 
+-2.900000e-02  6.733000e-01  3.202000e-01  6.315000e-01  4.043000e-01  6.685000e-01 -7.370000e-02  1.813700e+00  1.229000e-01  1.851200e+00  4.170000e-02 -5.200000e-02  1.569000e-01  3.977000e-01 
+ 3.265000e-01  4.894000e-01  6.227000e-01  5.130000e-01  7.186000e-01  5.417000e-01  1.765500e+00 -3.930000e-02 -4.840000e-02  2.053500e+00  9.800000e-03 -1.190000e-02  3.285000e-01  3.432000e-01 
+ 1.117100e+00 -8.600000e-03  7.302000e-01  3.616000e-01  6.130000e-01  2.139000e-01  6.646000e-01  4.410000e-01  6.113000e-01  1.987000e-01  7.062000e-01  3.899000e-01  4.921000e-01  1.567000e-01 
+ 1.141900e+00 -4.700000e-02  6.574000e-01  7.773000e-01  5.479000e-01  4.382000e-01  7.244000e-01  6.954000e-01  5.710000e-01  3.823000e-01  7.053000e-01  7.203000e-01  4.940000e-01  2.317000e-01 
+ 4.965000e-01  1.738000e-01  7.885000e-01  2.035000e-01  9.662000e-01  1.357000e-01  1.835300e+00 -1.154000e-01 -1.560000e-02  2.021700e+00 -1.450000e-02  1.650000e-02  4.759000e-01  9.810000e-02 
+ 4.544000e-01  3.766000e-01  8.270000e-01  4.520000e-01  7.125000e-01  7.868000e-01  6.932000e-01  6.157000e-01  7.669000e-01  7.423000e-01  5.673000e-01  7.614000e-01  3.870000e-01  3.691000e-01 
+ 4.055000e-01  3.654000e-01  7.823000e-01  3.933000e-01  7.759000e-01  5.908000e-01  7.125000e-01  4.798000e-01  9.026000e-01  4.538000e-01  7.434000e-01  4.432000e-01  4.013000e-01  2.881000e-01 
+ 5.728000e-01  2.989000e-01  8.306000e-01  3.644000e-01  9.304000e-01  3.902000e-01  1.696000e+00  4.100000e-02 -8.430000e-02  2.101000e+00 -7.130000e-02  8.580000e-02  5.000000e-01  2.026000e-01 
+ 3.376000e-01  7.775000e-01  3.464000e-01  1.362100e+00  2.232000e-01  9.473000e-01  2.115000e-01  1.521300e+00  2.551000e-01  8.705000e-01  2.435000e-01  1.486300e+00  1.729000e-01  6.418000e-01 
+ 1.090600e+00  1.860000e-02  6.090000e-01  1.122400e+00  4.901000e-01  5.531000e-01  5.431000e-01  1.201300e+00  5.042000e-01  5.040000e-01  5.107000e-01  1.237100e+00  4.253000e-01  3.304000e-01 
+ 1.114300e+00 -1.080000e-02  5.238000e-01  4.260000e-01  3.534000e-01  4.049000e-01  5.256000e-01  4.235000e-01  4.289000e-01  2.981000e-01  5.392000e-01  4.056000e-01  3.375000e-01  2.647000e-01 
+ 4.647000e-01  9.610000e-02  8.450000e-01  1.090000e-02  9.376000e-01  3.980000e-02  7.987000e-01  6.400000e-02  8.026000e-01  2.185000e-01  7.818000e-01  8.880000e-02  4.603000e-01  3.840000e-02 
+ 1.721000e-01  2.183000e-01  2.819000e-01  3.280000e-01  3.557000e-01  3.364000e-01  2.338000e-01  3.847000e-01  3.266000e-01  3.775000e-01  2.295000e-01  3.909000e-01  1.535000e-01  2.003000e-01 
+ 1.860000e-02  2.330000e-01  8.280000e-02  2.981000e-01  6.380000e-02  3.789000e-01 -1.660000e-02  4.184000e-01  1.610000e-01  2.707000e-01  8.580000e-02  2.988000e-01  3.820000e-02  1.848000e-01 
+ 4.782000e-01  4.641000e-01  8.946000e-01  3.435000e-01  8.573000e-01  5.357000e-01  1.875700e+00 -1.691000e-01 -6.900000e-03  2.014400e+00  2.090000e-02 -2.310000e-02  4.434000e-01  3.007000e-01 
+ 3.309000e-01  4.250000e-01  4.928000e-01  6.981000e-01  6.051000e-01  7.404000e-01  6.155000e-01  5.528000e-01  6.382000e-01  7.205000e-01  5.233000e-01  6.605000e-01  3.175000e-01  3.624000e-01 
+ 2.536000e-01  1.080000e-01  5.554000e-01  1.227000e-01  7.170000e-01  7.060000e-02  1.696900e+00  4.170000e-02 -1.440000e-02  1.760000e-02 -1.016000e-01  1.216000e-01  3.275000e-01  4.920000e-02 
+ 3.390000e-01  3.020000e-01  5.153000e-01  4.942000e-01  5.936000e-01  5.545000e-01  5.314000e-01  4.704000e-01  6.225000e-01  5.370000e-01  5.093000e-01  4.972000e-01  3.172000e-01  2.615000e-01 
+ 1.167900e+00 -7.670000e-02  1.151900e+00  5.657000e-01  8.234000e-01  1.057900e+00  1.061100e+00  6.778000e-01  6.292000e-01  1.053300e+00  1.050300e+00  6.942000e-01  6.490000e-01  3.211000e-01 
+ 4.128000e-01  6.886000e-01  7.720000e-01  6.333000e-01  8.191000e-01  7.276000e-01  1.696900e+00  4.170000e-02 -1.400000e-03  1.999100e+00 -2.770000e-02  1.763800e+00  4.395000e-01  3.880000e-01 
+ 2.401000e-01  8.456000e-01  2.801000e-01  1.440500e+00  3.156000e-01  1.645200e+00  4.983000e-01  1.182000e+00  4.511000e-01  1.513000e+00  4.349000e-01  1.260300e+00  2.223000e-01  7.598000e-01 
+ 3.190000e-02  2.327000e-01  1.329000e-01  4.503000e-01  1.820000e-01  5.382000e-01  1.320000e-01  1.579700e+00  6.880000e-02 -8.450000e-02 -1.080000e-02  1.390000e-02  8.020000e-02  2.422000e-01 
+ 4.039000e-01  3.573000e-01  6.585000e-01  5.334000e-01  6.388000e-01  7.320000e-01  6.293000e-01  5.603000e-01  6.803000e-01  7.047000e-01  5.667000e-01  6.358000e-01  3.484000e-01  3.435000e-01 
+ 1.027700e+00  8.760000e-02  5.360000e-01  1.174600e+00  3.294000e-01  7.892000e-01  3.724000e-01  1.366100e+00  2.953000e-01  7.905000e-01  4.678000e-01  1.253200e+00  3.132000e-01  4.753000e-01 
+ 6.950000e-02  4.076000e-01  1.708000e-01  5.636000e-01  1.306000e-01  7.205000e-01 -1.290000e-02  7.861000e-01  1.415000e-01  7.203000e-01  6.850000e-02  6.867000e-01  5.100000e-02  3.835000e-01 
+ 5.578000e-01  4.956000e-01  8.414000e-01  5.372000e-01  9.265000e-01  5.695000e-01  1.720000e+00  1.960000e-02  7.740000e-02  1.906200e+00 -9.720000e-02  1.850300e+00  4.662000e-01  3.445000e-01 
+ 2.043000e-01  1.528000e-01  3.941000e-01  1.483000e-01  4.314000e-01  1.899000e-01  4.244000e-01  1.136000e-01  5.053000e-01  1.130000e-01  4.428000e-01  8.950000e-02  2.396000e-01  7.130000e-02 
+ 3.115000e-01  6.206000e-01  5.196000e-01  9.349000e-01  4.160000e-01  1.275600e+00  4.773000e-01  9.806000e-01  5.755000e-01  1.103300e+00  3.650000e-01  1.116200e+00  2.662000e-01  5.800000e-01 
+ 1.036700e+00  8.220000e-02  8.868000e-01  8.528000e-01  7.260000e-01  4.464000e-01  1.059900e+00  6.539000e-01  6.681000e-01  4.769000e-01  9.639000e-01  7.606000e-01  5.826000e-01  2.310000e-01 
+ 1.069800e+00  4.080000e-02  4.507000e-01  2.553000e-01  3.520000e-01  2.347000e-01  4.403000e-01  2.715000e-01  3.898000e-01  1.776000e-01  4.880000e-01  2.127000e-01  3.393000e-01  1.490000e-01 
+ 9.398000e-01  9.490000e-02  1.514900e+00  9.620000e-02  1.657200e+00  1.844000e-01  1.592300e+00  4.300000e-03  1.785300e+00  7.150000e-02  1.490300e+00  1.233000e-01  8.673000e-01  6.500000e-02 
+ 2.916000e-01  8.154000e-01  2.496000e-01  7.557000e-01  7.570000e-02  7.302000e-01  2.293000e-01  7.797000e-01  1.223000e-01  6.540000e-01  1.639000e-01  8.590000e-01  1.455000e-01  4.776000e-01 
+ 1.027000e-01  1.016100e+00  1.556000e-01  1.566700e+00  1.183000e-01  9.786000e-01  1.365000e-01  1.589500e+00  1.133000e-01  9.559000e-01  1.248000e-01  1.605400e+00  8.940000e-02  6.949000e-01 
+ 1.103500e+00  3.500000e-03  5.619000e-01  1.930000e-01  4.270000e-01  1.961000e-01  5.009000e-01  2.624000e-01  4.615000e-01  1.391000e-01  5.809000e-01  1.712000e-01  3.970000e-01  1.167000e-01 
+ 1.000000e-03  9.440000e-01  3.068000e-01  9.555000e-01  4.642000e-01  9.027000e-01 -1.152000e-01  1.865900e+00 -8.080000e-02  2.098800e+00 -8.500000e-03  1.020000e-02  1.939000e-01  5.414000e-01 
+ 4.455000e-01  6.606000e-01  2.377000e-01  6.792000e-01  2.448000e-01  4.713000e-01  2.568000e-01  6.523000e-01  3.088000e-01  3.794000e-01  2.070000e-01  7.139000e-01  1.991000e-01  3.831000e-01 
+ 3.431000e-01  3.872000e-01  5.262000e-01  6.181000e-01  5.925000e-01  7.169000e-01  6.176000e-01  5.152000e-01  6.126000e-01  7.107000e-01  4.996000e-01  6.554000e-01  3.275000e-01  3.312000e-01 
+ 3.390000e-02  6.709000e-01  4.034000e-01  6.058000e-01  4.849000e-01  6.530000e-01  1.696000e+00  4.940000e-02 -7.460000e-02  2.088600e+00 -6.100000e-03  7.900000e-03  2.012000e-01  3.928000e-01 
+-3.340000e-02  1.136700e+00  8.860000e-02  1.330500e+00  2.922000e-01  1.235300e+00  1.830000e-02  1.712800e+00 -8.160000e-02  2.100200e+00  3.500000e-03  1.726300e+00  7.930000e-02  7.498000e-01 
+ 1.158900e+00 -6.460000e-02  4.903000e-01  1.257400e+00  5.872000e-01  4.286000e-01  5.796000e-01  1.149900e+00  5.293000e-01  4.681000e-01  5.713000e-01  1.158500e+00  4.171000e-01  3.362000e-01 
+ 1.061400e+00  5.460000e-02  4.624000e-01  4.138000e-01  4.538000e-01  2.395000e-01  6.261000e-01  2.194000e-01  4.383000e-01  2.373000e-01  5.559000e-01  2.980000e-01  3.813000e-01  1.803000e-01 
+-6.870000e-02  1.177000e+00  3.070000e-01  1.094200e+00  3.066000e-01  1.239500e+00  8.420000e-02  1.636600e+00 -2.100000e-03  1.999800e+00 -3.140000e-02  1.768700e+00  1.517000e-01  6.749000e-01 
+ 4.358000e-01  5.687000e-01  7.750000e-01  5.402000e-01  9.538000e-01  4.687000e-01  1.750700e+00 -2.560000e-02  1.563000e-01  1.817000e+00  6.030000e-02 -7.160000e-02  4.426000e-01  3.335000e-01 
+ 3.493000e-01  3.879000e-01  4.468000e-01  7.277000e-01  5.066000e-01  8.343000e-01  6.364000e-01  5.005000e-01  6.528000e-01  6.812000e-01  4.985000e-01  6.694000e-01  3.007000e-01  3.705000e-01 
+ 3.451000e-01  3.304000e-01  4.110000e-01  6.678000e-01  4.958000e-01  7.328000e-01  4.974000e-01  5.712000e-01  4.849000e-01  7.611000e-01  3.385000e-01  7.543000e-01  2.568000e-01  3.634000e-01 
+ 6.628000e-01  4.250000e-01  2.748000e-01  2.046000e-01  1.555000e-01  2.684000e-01  2.439000e-01  2.413000e-01  2.985000e-01  8.700000e-02  2.819000e-01  1.962000e-01  2.311000e-01  1.262000e-01 
+ 5.381000e-01  2.008000e-01  9.185000e-01  2.281000e-01  1.066400e+00  2.308000e-01  9.062000e-01  2.368000e-01  9.814000e-01  3.535000e-01  8.856000e-01  2.679000e-01  5.252000e-01  1.371000e-01 
+ 1.112900e+00 -9.100000e-03  8.964000e-01  8.369000e-01  6.871000e-01  7.348000e-01  8.873000e-01  8.529000e-01  7.308000e-01  6.121000e-01  8.880000e-01  8.495000e-01  5.774000e-01  3.174000e-01 
+ 9.408000e-01  1.572000e-01  1.180300e+00  3.368000e-01  1.296200e+00  3.425000e-01  1.684700e+00  5.910000e-02  2.001600e+00  2.300000e-03  4.320000e-02  1.685900e+00  7.190000e-01  1.595000e-01 
+ 1.581000e-01  3.713000e-01  3.274000e-01  4.837000e-01  2.731000e-01  6.740000e-01  4.187000e-01  3.731000e-01  3.721000e-01  5.650000e-01  3.401000e-01  4.673000e-01  1.892000e-01  2.795000e-01 
+ 3.393000e-01  1.388000e-01  2.235000e-01  3.140000e-02  7.320000e-02  1.648000e-01  2.143000e-01  4.110000e-02  1.466000e-01  7.950000e-02  1.840000e-01  7.610000e-02  1.639000e-01  4.260000e-02 
+ 2.449000e-01  1.485000e-01  1.748000e-01  3.990000e-02  7.900000e-02  1.229000e-01  1.639000e-01  5.250000e-02  1.908000e-01 -1.550000e-02  7.440000e-02  1.631000e-01  1.260000e-01  5.300000e-02 
+ 3.539000e-01  7.224000e-01  4.408000e-01  1.274400e+00  6.796000e-01  1.237900e+00  4.989000e-01  1.199600e+00  6.023000e-01  1.362300e+00  4.924000e-01  1.209500e+00  2.847000e-01  6.989000e-01 
+ 4.341000e-01  4.468000e-01  6.116000e-01  7.835000e-01  7.314000e-01  8.503000e-01  6.383000e-01  7.511000e-01  8.338000e-01  7.523000e-01  6.846000e-01  6.988000e-01  3.918000e-01  4.062000e-01 
+ 5.380000e-01  4.697000e-01  7.407000e-01  8.628000e-01  7.885000e-01  1.048800e+00  7.124000e-01  8.969000e-01  9.390000e-01  9.041000e-01  7.319000e-01  8.754000e-01  4.184000e-01  5.099000e-01 
+ 2.920000e-01  8.900000e-02  4.256000e-01  1.747000e-01  4.704000e-01  2.201000e-01  4.925000e-01  9.680000e-02  4.691000e-01  2.292000e-01  4.426000e-01  1.539000e-01  2.753000e-01  6.600000e-02 
+ 4.122000e-01  8.940000e-02  5.834000e-01  2.571000e-01  6.954000e-01  2.638000e-01  1.677400e+00  6.480000e-02 -2.700000e-03  2.000000e-03  1.870000e-02 -2.020000e-02  3.243000e-01  1.595000e-01 
+-5.000000e-04  1.120800e+00  6.350000e-02  1.665100e+00 -5.980000e-02  1.582700e+00 -7.100000e-03  1.746900e+00  8.840000e-02  1.332500e+00  1.032000e-01  1.617900e+00  3.190000e-02  8.864000e-01 
+ 2.250000e-02  4.186000e-01  2.250000e-02  2.158000e-01  4.480000e-02  1.556000e-01  6.030000e-02  1.744000e-01  6.030000e-02  1.389000e-01 -2.940000e-02  2.825000e-01  1.240000e-02  1.834000e-01 
+ 1.856000e-01  3.467000e-01  6.820000e-02  2.194000e-01  4.480000e-02  2.059000e-01  9.490000e-02  1.882000e-01  3.840000e-02  2.095000e-01  5.270000e-02  2.388000e-01  7.130000e-02  1.545000e-01 
+ 5.003000e-01  2.536000e-01  1.001900e+00  1.310000e-01  1.054300e+00  2.531000e-01  8.935000e-01  2.608000e-01  1.017600e+00  3.172000e-01  9.822000e-01  1.566000e-01  5.335000e-01  1.295000e-01 
+ 4.205000e-01  6.878000e-01  8.430000e-02  1.679500e+00  1.585000e-01  9.973000e-01  2.664000e-01  1.464800e+00  1.663000e-01  9.523000e-01  3.439000e-01  1.375300e+00  1.936000e-01  6.086000e-01 
+ 7.230000e-01  2.897000e-01  1.061700e+00  5.399000e-01  1.291800e+00  5.118000e-01  1.153700e+00  4.307000e-01  1.208600e+00  6.427000e-01  9.571000e-01  6.620000e-01  6.198000e-01  3.023000e-01 
+ 2.124000e-01  6.169000e-01  4.337000e-01  8.492000e-01  4.279000e-01  1.041800e+00  4.311000e-01  8.475000e-01  4.554000e-01  1.033700e+00  3.460000e-01  9.528000e-01  2.282000e-01  5.165000e-01 
+ 1.087000e+00  2.050000e-02  3.814000e-01  9.184000e-01  3.311000e-01  6.046000e-01  3.696000e-01  9.346000e-01  3.396000e-01  5.683000e-01  4.533000e-01  8.328000e-01  3.132000e-01  3.887000e-01 
+ 1.122500e+00 -2.000000e-02  7.035000e-01  1.028900e+00  5.001000e-01  6.363000e-01  7.524000e-01  9.642000e-01  5.688000e-01  5.181000e-01  7.309000e-01  9.958000e-01  4.889000e-01  3.028000e-01 
+ 1.122700e+00 -2.120000e-02  7.345000e-01  1.126000e-01  5.620000e-01  1.254000e-01  7.846000e-01  5.580000e-02  5.239000e-01  1.548000e-01  7.256000e-01  1.218000e-01  4.972000e-01  5.870000e-02 
+ 2.307000e-01  7.521000e-01  4.215000e-01  8.968000e-01  4.895000e-01  9.583000e-01  1.706200e+00  3.010000e-02  2.510000e-02  1.976100e+00  5.130000e-02 -5.990000e-02  2.203000e-01  5.587000e-01 
+ 3.168000e-01  1.169000e-01  7.908000e-01 -7.260000e-02  8.958000e-01 -5.690000e-02  1.596400e+00  1.594000e-01 -4.350000e-02  5.030000e-02 -4.990000e-02  5.970000e-02  3.999000e-01  1.530000e-02 
+ 1.098600e+00  1.060000e-02  1.170200e+00  5.680000e-01  8.732000e-01  2.272000e-01  1.142800e+00  5.946000e-01  8.219000e-01  2.528000e-01  1.195700e+00  5.319000e-01  6.724000e-01  1.097000e-01 
+ 1.823000e-01  6.265000e-01  1.940000e-01  1.089600e+00  2.839000e-01  1.166500e+00  2.785000e-01  9.865000e-01  3.379000e-01  1.124600e+00  2.203000e-01  1.059100e+00  1.262000e-01  6.122000e-01 
+ 4.150000e-02  7.618000e-01  2.864000e-01  8.324000e-01  4.110000e-01  8.252000e-01  4.500000e-03  1.725100e+00 -2.590000e-02  2.027700e+00 -2.960000e-02  3.420000e-02  1.374000e-01  5.252000e-01 
+ 5.909000e-01  4.002000e-01  8.241000e-01  7.434000e-01  1.137400e+00  6.116000e-01  9.519000e-01  5.897000e-01  1.061400e+00  7.307000e-01  8.974000e-01  6.602000e-01  5.347000e-01  3.598000e-01 
+ 7.907000e-01  2.081000e-01  1.288000e+00  2.727000e-01  1.441700e+00  3.342000e-01  1.260200e+00  3.046000e-01  1.501900e+00  2.953000e-01  1.235200e+00  3.337000e-01  7.069000e-01  1.993000e-01 
+ 5.221000e-01  5.633000e-01  9.389000e-01  7.340000e-01  9.714000e-01  9.561000e-01  9.044000e-01  7.730000e-01  1.116400e+00  8.080000e-01  9.204000e-01  7.541000e-01  5.285000e-01  4.408000e-01 
+ 1.143700e+00 -4.720000e-02  5.848000e-01  9.845000e-01  6.145000e-01  3.859000e-01  6.835000e-01  8.577000e-01  5.857000e-01  3.928000e-01  6.892000e-01  8.599000e-01  4.808000e-01  2.604000e-01 
+ 1.652000e-01  5.220000e-01  7.564000e-01  1.959000e-01  7.352000e-01  3.619000e-01  1.798300e+00 -8.000000e-02 -6.110000e-02  2.072900e+00 -3.170000e-02  3.590000e-02  3.185000e-01  2.556000e-01 
+ 2.429000e-01  8.192000e-01  5.522000e-01  8.254000e-01  6.584000e-01  8.397000e-01  1.758500e+00 -2.970000e-02  1.117000e-01  1.871200e+00  2.010000e-02  1.704900e+00  3.055000e-01  5.041000e-01 
+ 1.027500e+00  9.290000e-02  7.770000e-01  9.647000e-01  7.027000e-01  6.231000e-01  8.090000e-01  9.281000e-01  7.108000e-01  5.548000e-01  9.417000e-01  7.737000e-01  5.562000e-01  3.125000e-01 
+ 2.098000e-01  4.697000e-01  2.148000e-01  8.691000e-01  2.709000e-01  9.603000e-01  2.065000e-01  8.809000e-01  1.751000e-01  1.090800e+00  1.634000e-01  9.365000e-01  1.426000e-01  4.818000e-01 
+ 8.182000e-01  2.860000e-01  1.228700e+00  2.121000e-01  1.275100e+00  2.980000e-01  1.731500e+00  2.500000e-03  2.029300e+00 -3.240000e-02  2.870000e-02  1.699900e+00  6.670000e-01  1.885000e-01 
+ 1.416000e-01  9.664000e-01  7.030000e-02  8.976000e-01  1.443000e-01  5.991000e-01  4.980000e-02  9.250000e-01  1.007000e-01  6.328000e-01  6.130000e-02  9.041000e-01  7.600000e-02  5.271000e-01 
+ 6.420000e-01  1.712000e-01  8.587000e-01  4.432000e-01  9.461000e-01  5.424000e-01  1.049100e+00  2.220000e-01  1.132600e+00  3.475000e-01  9.113000e-01  3.815000e-01  5.211000e-01  2.263000e-01 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/oilTst.dat	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,503 @@
+ nin   12
+ nout  2
+ ndata 500
+ 6.448000e-01  4.650000e-01  3.659000e-01  8.761000e-01  2.214000e-01  7.023000e-01  3.702000e-01  8.750000e-01  2.981000e-01  5.870000e-01  3.130000e-01  9.374000e-01  2.574000e-01  4.349000e-01 
+ 5.013000e-01  9.710000e-02  7.749000e-01  1.599000e-01  8.716000e-01  1.946000e-01  7.986000e-01  1.304000e-01  8.874000e-01  1.974000e-01  6.991000e-01  2.499000e-01  4.547000e-01  8.450000e-02 
+ 3.908000e-01  4.842000e-01  5.148000e-01  8.738000e-01  6.925000e-01  8.681000e-01  5.985000e-01  7.700000e-01  5.325000e-01  1.079000e+00  6.069000e-01  7.554000e-01  3.284000e-01  4.656000e-01 
+ 1.038400e+00  8.240000e-02  1.578400e+00  1.819000e-01  1.242100e+00  5.329000e-01  1.780600e+00 -5.680000e-02  1.239700e+00  3.690000e-01  1.656900e+00  8.240000e-02  8.512000e-01  1.109000e-01 
+-9.100000e-03  6.477000e-01  3.510000e-02  9.081000e-01  3.810000e-02  1.031800e+00  6.780000e-02  1.656900e+00  3.950000e-02  1.950300e+00 -2.490000e-02  3.090000e-02  7.000000e-03  5.461000e-01 
+ 6.458000e-01  2.965000e-01  9.246000e-01  3.379000e-01  1.054200e+00  3.263000e-01  1.751900e+00 -2.230000e-02  2.070800e+00 -7.860000e-02 -1.010000e-02  1.030000e-02  5.419000e-01  2.027000e-01 
+ 4.951000e-01  5.899000e-01  9.069000e-01  7.700000e-01  8.367000e-01  1.101400e+00  7.952000e-01  9.014000e-01  9.185000e-01  1.039600e+00  7.024000e-01  1.008900e+00  4.378000e-01  5.457000e-01 
+ 1.136300e+00 -3.530000e-02  3.838000e-01  2.079000e-01  3.385000e-01  1.536000e-01  4.569000e-01  1.199000e-01  2.972000e-01  1.929000e-01  3.505000e-01  2.441000e-01  3.074000e-01  1.153000e-01 
+ 1.646000e-01  5.148000e-01  4.558000e-01  5.405000e-01  5.855000e-01  5.258000e-01  1.727000e+00  4.400000e-03 -1.250000e-02  2.019000e+00  3.960000e-02 -4.630000e-02  2.334000e-01  3.525000e-01 
+ 2.028000e-01  3.866000e-01  2.659000e-01  6.712000e-01  3.368000e-01  7.250000e-01  3.495000e-01  5.704000e-01  3.358000e-01  7.372000e-01  2.509000e-01  6.834000e-01  1.608000e-01  3.771000e-01 
+ 6.930000e-01  1.407000e-01  1.015300e+00  3.020000e-01  1.114100e+00  3.990000e-01  1.070600e+00  2.370000e-01  1.106800e+00  4.251000e-01  1.041400e+00  2.751000e-01  6.056000e-01  1.516000e-01 
+ 5.753000e-01  5.257000e-01  8.693000e-01  5.906000e-01  8.992000e-01  6.983000e-01  1.670000e+00  7.510000e-02  1.942200e+00  6.400000e-02 -2.000000e-02  1.753100e+00  5.033000e-01  3.513000e-01 
+ 8.400000e-03  5.567000e-01  2.480000e-02  8.560000e-01  1.377000e-01  8.414000e-01  8.530000e-02  7.866000e-01 -6.210000e-02  1.098600e+00  9.400000e-02  7.736000e-01  1.660000e-02  4.914000e-01 
+ 1.122000e-01  2.212000e-01  2.767000e-01  2.258000e-01  4.065000e-01  1.461000e-01  2.236000e-01  2.891000e-01  2.271000e-01  3.709000e-01  2.522000e-01  2.523000e-01  1.470000e-01  1.456000e-01 
+ 2.765000e-01  8.222000e-01  6.055000e-01  9.075000e-01  7.480000e-01  8.832000e-01  1.749700e+00 -2.060000e-02  4.540000e-02  1.950100e+00  4.800000e-02  1.672300e+00  3.080000e-01  5.781000e-01 
+ 3.000000e-01  2.843000e-01  5.036000e-01  4.081000e-01  6.104000e-01  4.229000e-01  4.810000e-01  4.380000e-01  5.600000e-01  5.012000e-01  4.791000e-01  4.364000e-01  2.898000e-01  2.373000e-01 
+ 1.142700e+00 -4.400000e-02  8.870000e-01  1.008000e-01  7.355000e-01  2.940000e-02  9.660000e-01  8.200000e-03  6.765000e-01  7.800000e-02  1.012500e+00 -4.360000e-02  5.768000e-01  3.400000e-02 
+ 2.788000e-01  1.947000e-01  4.153000e-01  3.330000e-01  4.493000e-01  4.033000e-01  3.633000e-01  3.906000e-01  4.544000e-01  4.106000e-01  3.182000e-01  4.397000e-01  2.318000e-01  1.993000e-01 
+ 4.448000e-01  6.422000e-01  8.192000e-01  5.634000e-01  8.853000e-01  6.292000e-01  1.754600e+00 -2.460000e-02  2.870000e-02  1.963900e+00 -1.710000e-02  1.754600e+00  4.858000e-01  3.275000e-01 
+ 1.169600e+00 -7.950000e-02  6.595000e-01  3.301000e-01  5.647000e-01  2.009000e-01  7.108000e-01  2.644000e-01  4.990000e-01  2.600000e-01  6.660000e-01  3.246000e-01  4.636000e-01  1.476000e-01 
+ 2.800000e-02  4.749000e-01  3.082000e-01  5.165000e-01  4.995000e-01  4.292000e-01 -6.680000e-02  1.809500e+00 -5.310000e-02  6.340000e-02  7.020000e-02 -8.250000e-02  1.794000e-01  2.888000e-01 
+-2.050000e-02  1.080400e+00  1.990000e-01  1.171300e+00  2.044000e-01  1.301100e+00 -6.300000e-02  1.807000e+00 -1.090000e-01  2.131100e+00  9.110000e-02  1.625400e+00  1.084000e-01  6.975000e-01 
+-1.990000e-02  1.129400e+00  6.400000e-03  1.475300e+00  1.195000e-01  1.479400e+00 -8.570000e-02  1.833300e+00 -5.250000e-02  2.061500e+00  8.600000e-02  1.630200e+00  1.760000e-02  8.479000e-01 
+ 7.734000e-01  3.108000e-01  1.078300e+00  6.418000e-01  1.267100e+00  6.887000e-01  1.212800e+00  4.844000e-01  1.260900e+00  7.241000e-01  1.197800e+00  5.027000e-01  6.789000e-01  3.063000e-01 
+ 4.740000e-01  6.379000e-01  2.710000e-01  7.720000e-01  2.148000e-01  5.921000e-01  2.197000e-01  8.294000e-01  2.198000e-01  5.664000e-01  2.387000e-01  8.073000e-01  2.159000e-01  4.153000e-01 
+ 1.412000e-01  9.814000e-01  1.210000e-01  5.891000e-01  5.280000e-02  5.381000e-01  1.400000e-01  5.603000e-01  1.442000e-01  4.171000e-01  1.087000e-01  6.031000e-01  1.059000e-01  3.814000e-01 
+ 8.093000e-01  1.447000e-01  1.019800e+00  2.690000e-01  1.202300e+00  2.014000e-01  1.642000e+00  1.033000e-01  2.117700e+00 -1.391000e-01 -8.490000e-02  1.015000e-01  6.179000e-01  1.411000e-01 
+ 6.051000e-01  3.129000e-01  1.013600e+00  4.145000e-01  1.062800e+00  5.765000e-01  9.327000e-01  5.089000e-01  1.094600e+00  5.687000e-01  9.348000e-01  5.066000e-01  5.441000e-01  2.873000e-01 
+ 1.044400e+00  7.250000e-02  7.841000e-01  6.701000e-01  5.830000e-01  4.092000e-01  7.340000e-01  7.407000e-01  4.950000e-01  4.886000e-01  7.533000e-01  7.148000e-01  4.912000e-01  2.421000e-01 
+ 6.847000e-01  3.897000e-01  9.817000e-01  4.101000e-01  1.045500e+00  4.734000e-01  1.734700e+00 -3.000000e-04  1.986600e+00  1.320000e-02  5.550000e-02  1.665800e+00  5.296000e-01  2.952000e-01 
+ 1.740000e-02  8.344000e-01 -7.070000e-02  1.251500e+00  4.490000e-02  1.250200e+00 -8.910000e-02  1.834800e+00  3.770000e-02  1.952000e+00  1.850000e-02 -2.100000e-02  2.190000e-02  6.670000e-01 
+ 2.622000e-01  8.393000e-01  1.888000e-01  7.998000e-01  2.062000e-01  5.559000e-01  2.330000e-01  7.465000e-01  1.065000e-01  6.558000e-01  1.107000e-01  8.962000e-01  1.222000e-01  4.926000e-01 
+ 6.600000e-03  1.097000e+00  4.751000e-01  9.095000e-01  5.517000e-01  9.640000e-01  1.777900e+00 -5.290000e-02 -2.350000e-02  2.028300e+00  5.520000e-02  1.666900e+00  2.132000e-01  6.103000e-01 
+ 4.735000e-01  2.950000e-02  6.149000e-01  2.003000e-01  7.815000e-01  1.288000e-01  6.322000e-01  1.794000e-01  6.874000e-01  2.575000e-01  6.046000e-01  2.099000e-01  3.779000e-01  8.710000e-02 
+ 6.480000e-02  5.514000e-01  3.730000e-02  9.392000e-01  1.505000e-01  9.401000e-01  2.350000e-02  9.564000e-01  1.424000e-01  9.696000e-01  3.140000e-02  9.441000e-01  3.910000e-02  5.217000e-01 
+ 1.271900e+00 -1.940000e-01  4.195000e-01  1.021300e+00  3.379000e-01  6.556000e-01  4.200000e-01  1.027200e+00  3.894000e-01  5.664000e-01  4.430000e-01  1.001100e+00  3.273000e-01  4.017000e-01 
+ 3.084000e-01  7.897000e-01  1.522000e-01  1.576900e+00  7.180000e-02  9.782000e-01  2.220000e-01  1.498500e+00  4.430000e-02  9.810000e-01  9.340000e-02  1.646600e+00  1.257000e-01  6.302000e-01 
+ 5.818000e-01  2.661000e-01  8.678000e-01  4.688000e-01  9.546000e-01  5.728000e-01  7.304000e-01  6.334000e-01  8.540000e-01  7.134000e-01  8.607000e-01  4.792000e-01  5.011000e-01  2.696000e-01 
+ 5.940000e-02  7.090000e-01  4.563000e-01  6.108000e-01  5.679000e-01  6.220000e-01  1.778700e+00 -5.690000e-02  3.970000e-02  1.952300e+00  3.590000e-02 -4.270000e-02  2.095000e-01  4.262000e-01 
+ 5.933000e-01  2.304000e-01  9.529000e-01  3.319000e-01  1.151400e+00  2.991000e-01  9.822000e-01  3.042000e-01  1.184000e+00  2.901000e-01  9.725000e-01  3.120000e-01  5.705000e-01  1.696000e-01 
+ 8.719000e-01  2.312000e-01  4.310000e-01  5.507000e-01  3.146000e-01  4.567000e-01  4.258000e-01  5.563000e-01  3.740000e-01  3.700000e-01  3.330000e-01  6.646000e-01  2.901000e-01  3.226000e-01 
+ 1.360000e-02  9.961000e-01  2.466000e-01  1.077500e+00  3.379000e-01  1.112000e+00  5.620000e-02  1.662300e+00 -4.080000e-02  2.046100e+00 -1.250000e-02  1.610000e-02  1.257000e-01  6.558000e-01 
+ 1.218000e+00 -1.338000e-01  6.016000e-01  1.136800e+00  4.434000e-01  7.737000e-01  6.493000e-01  1.074600e+00  5.333000e-01  6.233000e-01  5.916000e-01  1.146600e+00  4.410000e-01  3.835000e-01 
+ 7.636000e-01  1.110000e-01  1.172100e+00  4.000000e-04  1.307500e+00 -1.810000e-02  1.756100e+00 -3.150000e-02  1.876900e+00  1.464000e-01  4.910000e-02 -5.820000e-02  6.767000e-01  1.780000e-02 
+ 4.733000e-01  5.533000e-01  7.878000e-01  5.479000e-01  9.136000e-01  5.419000e-01  1.809900e+00 -8.920000e-02 -7.870000e-02  2.088800e+00  2.570000e-02 -3.140000e-02  4.780000e-01  3.072000e-01 
+ 2.005000e-01  5.829000e-01  6.213000e-01  4.544000e-01  6.185000e-01  6.031000e-01  1.674800e+00  6.370000e-02  4.690000e-02  1.944500e+00  4.540000e-02 -5.330000e-02  2.894000e-01  3.546000e-01 
+ 2.873000e-01  3.904000e-01  5.542000e-01  4.862000e-01  6.085000e-01  5.771000e-01  6.228000e-01  4.063000e-01  6.241000e-01  5.769000e-01  5.590000e-01  4.789000e-01  3.226000e-01  2.772000e-01 
+ 1.065800e+00  4.890000e-02  9.754000e-01  2.339000e-01  7.418000e-01  1.505000e-01  8.248000e-01  4.087000e-01  6.896000e-01  1.874000e-01  8.415000e-01  3.902000e-01  5.896000e-01  9.380000e-02 
+ 2.749000e-01  8.322000e-01  7.550000e-02  8.470000e-01  1.179000e-01  6.081000e-01  2.079000e-01  6.938000e-01  1.133000e-01  5.986000e-01  1.856000e-01  7.187000e-01  1.310000e-01  4.502000e-01 
+ 1.160400e+00 -7.070000e-02  3.873000e-01  4.790000e-01  3.702000e-01  3.135000e-01  3.731000e-01  4.934000e-01  4.204000e-01  2.415000e-01  3.768000e-01  4.884000e-01  3.431000e-01  2.132000e-01 
+ 7.850000e-01  3.097000e-01  1.039200e+00  6.899000e-01  1.007400e+00  9.179000e-01  1.606700e+00  1.494000e-01  2.023600e+00 -2.750000e-02  7.740000e-02  1.643000e+00  6.075000e-01  3.769000e-01 
+ 4.767000e-01  6.200000e-01  8.124000e-01  6.201000e-01  8.201000e-01  7.476000e-01  1.762100e+00 -3.200000e-02  2.850000e-02  1.962500e+00 -2.400000e-03  1.735200e+00  4.170000e-01  4.287000e-01 
+ 7.000000e-02  5.804000e-01  3.603000e-01  6.051000e-01  5.032000e-01  5.804000e-01  1.808000e+00 -9.050000e-02  2.450000e-02  1.971800e+00  5.380000e-02 -6.290000e-02  2.108000e-01  3.495000e-01 
+ 2.398000e-01  5.381000e-01  4.280000e-01  7.827000e-01  4.594000e-01  9.249000e-01  4.543000e-01  7.498000e-01  4.837000e-01  9.178000e-01  3.558000e-01  8.688000e-01  2.354000e-01  4.663000e-01 
+ 6.772000e-01  4.153000e-01  8.702000e-01  6.673000e-01  1.097600e+00  5.371000e-01  1.671400e+00  7.230000e-02  1.913400e+00  1.031000e-01  4.360000e-02  1.682100e+00  5.430000e-01  3.427000e-01 
+ 5.771000e-01  2.690000e-01  9.626000e-01  1.865000e-01  9.748000e-01  3.090000e-01  1.720800e+00  1.200000e-02  1.904000e+00  1.157000e-01  4.180000e-02 -5.090000e-02  5.076000e-01  1.776000e-01 
+ 9.678000e-01  1.205000e-01  4.169000e-01  7.365000e-01  2.957000e-01  5.802000e-01  4.317000e-01  7.145000e-01  3.142000e-01  5.355000e-01  3.243000e-01  8.496000e-01  2.935000e-01  3.748000e-01 
+ 3.039000e-01  8.250000e-02  5.032000e-01  1.001000e-01  6.313000e-01  4.200000e-02  5.443000e-01  4.810000e-02  6.187000e-01  7.040000e-02  5.802000e-01  5.800000e-03  3.000000e-01  4.560000e-02 
+ 1.066000e+00  4.740000e-02  8.390000e-01  3.301000e-01  6.501000e-01  2.295000e-01  8.427000e-01  3.239000e-01  6.770000e-01  1.715000e-01  7.632000e-01  4.213000e-01  5.597000e-01  1.096000e-01 
+ 4.445000e-01  4.328000e-01  7.354000e-01  6.306000e-01  7.351000e-01  8.423000e-01  7.142000e-01  6.597000e-01  8.077000e-01  7.814000e-01  6.867000e-01  6.933000e-01  3.992000e-01  3.965000e-01 
+ 1.113800e+00 -1.200000e-02  4.509000e-01  1.285400e+00  4.255000e-01  1.115600e+00  4.581000e-01  1.271400e+00  3.918000e-01  1.065600e+00  4.900000e-01  1.234000e+00  3.392000e-01  5.883000e-01 
+ 3.929000e-01  1.168000e-01  6.146000e-01  2.238000e-01  8.554000e-01  8.000000e-02  1.677700e+00  6.240000e-02 -6.710000e-02  7.830000e-02  3.840000e-02 -4.460000e-02  3.705000e-01  1.066000e-01 
+ 1.174900e+00 -7.820000e-02  5.318000e-01  1.208200e+00  4.090000e-01  8.032000e-01  6.121000e-01  1.106000e+00  4.824000e-01  6.767000e-01  5.083000e-01  1.234000e+00  3.942000e-01  4.315000e-01 
+ 1.112500e+00 -1.900000e-03  7.953000e-01  4.182000e-01  5.772000e-01  3.317000e-01  8.666000e-01  3.376000e-01  6.822000e-01  1.837000e-01  7.594000e-01  4.607000e-01  5.409000e-01  1.411000e-01 
+ 1.064300e+00  4.830000e-02  4.031000e-01  4.715000e-01  4.217000e-01  2.610000e-01  5.285000e-01  3.166000e-01  4.123000e-01  2.549000e-01  4.966000e-01  3.544000e-01  3.839000e-01  1.711000e-01 
+ 1.462000e-01  1.741000e-01  3.355000e-01  3.210000e-01  5.901000e-01  1.645000e-01  1.819900e+00 -1.075000e-01  4.480000e-02 -5.060000e-02 -1.540000e-02  1.900000e-02  1.997000e-01  1.640000e-01 
+ 1.082600e+00  2.900000e-02  5.759000e-01  1.143600e+00  3.587000e-01  1.001100e+00  3.984000e-01  1.351900e+00  3.697000e-01  9.311000e-01  4.609000e-01  1.280500e+00  3.813000e-01  4.929000e-01 
+ 1.749000e-01  9.337000e-01  4.971000e-01  9.799000e-01  5.158000e-01  1.106500e+00  1.858000e+00 -1.477000e-01  5.880000e-02  1.932100e+00 -9.480000e-02  1.840300e+00  2.799000e-01  5.831000e-01 
+ 2.320000e-02  4.472000e-01  2.880000e-02  7.578000e-01  1.640000e-02  8.930000e-01 -2.840000e-02  1.768200e+00 -4.300000e-03  5.000000e-03  1.630000e-02 -1.920000e-02  1.400000e-03  4.502000e-01 
+-1.890000e-02  9.049000e-01  2.733000e-01  9.240000e-01  4.054000e-01  9.117000e-01 -1.630000e-02  1.749400e+00  8.600000e-03  1.989800e+00  1.650000e-02 -1.970000e-02  1.497000e-01  5.558000e-01 
+ 3.017000e-01  1.810000e-02  5.904000e-01  5.250000e-02  8.312000e-01 -9.490000e-02  1.793900e+00 -7.140000e-02  2.200000e-03 -2.400000e-03  1.700000e-03 -1.600000e-03  3.347000e-01  2.090000e-02 
+ 3.039000e-01  3.121000e-01  6.046000e-01  3.240000e-01  8.146000e-01  2.188000e-01  1.698900e+00  4.070000e-02 -9.370000e-02  2.104700e+00 -1.610000e-02  2.060000e-02  3.003000e-01  2.485000e-01 
+ 1.249000e-01  9.827000e-01  6.260000e-02  1.675200e+00  8.900000e-02  9.563000e-01  1.085000e-01  1.615700e+00  5.530000e-02  9.614000e-01  3.070000e-02  1.713800e+00  7.130000e-02  6.857000e-01 
+ 1.155700e+00 -5.860000e-02  3.913000e-01  1.361500e+00  4.194000e-01  8.176000e-01  4.429000e-01  1.295800e+00  4.218000e-01  7.674000e-01  4.723000e-01  1.270600e+00  3.738000e-01  4.626000e-01 
+ 2.459000e-01  7.784000e-01  5.481000e-01  7.902000e-01  6.902000e-01  7.715000e-01  1.765200e+00 -3.940000e-02 -1.560000e-02  2.020000e+00  4.010000e-02 -4.900000e-02  3.023000e-01  4.882000e-01 
+ 6.220000e-01  4.951000e-01  3.017000e-01  7.115000e-01  2.143000e-01  5.816000e-01  2.724000e-01  7.436000e-01  2.240000e-01  5.504000e-01  3.288000e-01  6.809000e-01  2.659000e-01  3.523000e-01 
+ 3.249000e-01  2.344000e-01  5.291000e-01  3.440000e-01  5.390000e-01  4.644000e-01  6.531000e-01  1.941000e-01  5.935000e-01  4.141000e-01  5.112000e-01  3.632000e-01  3.074000e-01  1.955000e-01 
+ 3.186000e-01  6.189000e-01  7.353000e-01  5.008000e-01  7.807000e-01  5.874000e-01  1.759200e+00 -3.670000e-02  1.700000e-02  1.983200e+00 -3.570000e-02  4.160000e-02  3.922000e-01  3.411000e-01 
+ 8.110000e-02  5.730000e-01 -5.400000e-03  1.059500e+00  4.620000e-02  1.141800e+00  9.510000e-02  9.377000e-01  4.330000e-02  1.157600e+00  4.870000e-02  9.916000e-01  3.510000e-02  5.644000e-01 
+ 2.594000e-01  3.892000e-01  5.220000e-01  4.511000e-01  6.600000e-01  4.274000e-01  1.716700e+00  1.820000e-02 -2.340000e-02  2.023900e+00  2.910000e-02 -3.230000e-02  3.178000e-01  2.422000e-01 
+ 5.516000e-01  4.323000e-01  9.537000e-01  3.289000e-01  1.019900e+00  3.933000e-01  1.765300e+00 -3.410000e-02  2.026400e+00 -2.980000e-02  1.780000e-02 -2.150000e-02  5.026000e-01  2.628000e-01 
+ 1.111500e+00 -6.900000e-03  5.701000e-01  1.157500e+00  4.381000e-01  1.535200e+00  4.560000e-01  1.290200e+00  4.360000e-01  1.382700e+00  5.761000e-01  1.156000e+00  4.032000e-01  5.885000e-01 
+ 4.961000e-01  1.890000e-01  7.077000e-01  3.780000e-01  8.067000e-01  4.309000e-01  7.211000e-01  3.645000e-01  8.028000e-01  4.556000e-01  7.352000e-01  3.442000e-01  3.970000e-01  2.335000e-01 
+ 1.133100e+00 -3.640000e-02  4.325000e-01  4.307000e-01  3.780000e-01  3.109000e-01  4.364000e-01  4.285000e-01  3.326000e-01  3.505000e-01  4.787000e-01  3.815000e-01  3.200000e-01  2.438000e-01 
+ 4.649000e-01  6.439000e-01  7.775000e-01  6.826000e-01  9.982000e-01  5.638000e-01  1.757300e+00 -2.250000e-02 -1.580000e-02  2.011300e+00  4.970000e-02  1.671300e+00  4.476000e-01  4.080000e-01 
+ 5.782000e-01  6.300000e-03  9.617000e-01 -6.070000e-02  1.034800e+00  4.300000e-03  9.053000e-01  7.600000e-03  1.051300e+00  2.400000e-03  1.007700e+00 -1.158000e-01  5.201000e-01  7.200000e-03 
+ 7.918000e-01  3.077000e-01  5.134000e-01  9.919000e-01  2.700000e-01  7.473000e-01  4.521000e-01  1.058100e+00  2.535000e-01  7.352000e-01  4.208000e-01  1.096100e+00  2.795000e-01  4.604000e-01 
+ 5.928000e-01  5.222000e-01  1.003600e+00  4.579000e-01  1.078100e+00  5.070000e-01  1.647000e+00  9.860000e-02  2.106100e+00 -1.167000e-01  3.710000e-02  1.683300e+00  5.517000e-01  3.079000e-01 
+ 5.960000e-02  7.629000e-01  3.239000e-01  8.181000e-01  4.259000e-01  8.440000e-01  1.670200e+00  7.190000e-02 -2.630000e-02  2.035400e+00  9.080000e-02 -1.085000e-01  1.982000e-01  4.708000e-01 
+ 1.049800e+00  6.410000e-02  5.919000e-01  2.174000e-01  3.979000e-01  2.718000e-01  4.788000e-01  3.486000e-01  4.119000e-01  2.361000e-01  5.073000e-01  3.169000e-01  3.661000e-01  1.799000e-01 
+ 1.155500e+00 -5.990000e-02  1.190600e+00  2.981000e-01  9.963000e-01 -1.430000e-02  1.078900e+00  4.294000e-01  8.709000e-01  1.026000e-01  1.261800e+00  2.111000e-01  6.923000e-01  4.150000e-02 
+ 6.215000e-01  2.120000e-01  1.045100e+00  2.494000e-01  1.139400e+00  3.451000e-01  1.084900e+00  1.967000e-01  1.175900e+00  3.235000e-01  1.139200e+00  1.358000e-01  6.034000e-01  1.435000e-01 
+ 2.349000e-01  1.442000e-01  2.265000e-01  3.929000e-01  2.736000e-01  4.296000e-01  2.931000e-01  3.112000e-01  2.363000e-01  4.802000e-01  2.454000e-01  3.726000e-01  1.406000e-01  2.151000e-01 
+ 3.019000e-01  8.005000e-01  2.399000e-01  1.477400e+00  1.681000e-01  1.178700e+00  1.256000e-01  1.612900e+00  1.998000e-01  1.085000e+00  1.193000e-01  1.621700e+00  1.418000e-01  7.335000e-01 
+ 1.147600e+00 -4.770000e-02  6.603000e-01  5.889000e-01  4.982000e-01  4.222000e-01  6.575000e-01  5.907000e-01  5.041000e-01  3.874000e-01  5.851000e-01  6.789000e-01  4.479000e-01  2.445000e-01 
+ 1.101200e+00  7.300000e-03  8.426000e-01  1.042000e-01  6.891000e-01  5.540000e-02  9.469000e-01 -1.900000e-02  7.682000e-01 -6.170000e-02  8.742000e-01  6.580000e-02  5.727000e-01  2.010000e-02 
+-4.210000e-02  6.206000e-01 -8.900000e-03  9.080000e-01  4.440000e-02  9.645000e-01  2.560000e-02  8.678000e-01  3.390000e-02  9.927000e-01  1.381000e-01  7.345000e-01  9.100000e-03  5.054000e-01 
+ 3.173000e-01  1.439000e-01  4.652000e-01  2.672000e-01  4.718000e-01  3.732000e-01  4.224000e-01  3.186000e-01  5.422000e-01  2.998000e-01  4.661000e-01  2.660000e-01  2.607000e-01  1.635000e-01 
+ 3.098000e-01  5.266000e-01  7.139000e-01  4.210000e-01  7.526000e-01  5.123000e-01  1.844200e+00 -1.276000e-01  4.160000e-02  1.950200e+00  3.560000e-02 -4.230000e-02  3.870000e-01  2.836000e-01 
+ 1.113300e+00 -1.020000e-02  6.586000e-01  3.186000e-01  5.528000e-01  2.098000e-01  6.548000e-01  3.203000e-01  4.692000e-01  2.883000e-01  5.417000e-01  4.562000e-01  4.591000e-01  1.485000e-01 
+ 1.120500e+00 -1.250000e-02  4.273000e-01  1.305000e+00  4.001000e-01  1.569000e+00  5.607000e-01  1.152400e+00  4.132000e-01  1.340800e+00  3.841000e-01  1.354200e+00  3.303000e-01  6.559000e-01 
+ 6.990000e-01  3.968000e-01  1.746000e-01  6.364000e-01  2.241000e-01  4.211000e-01  3.194000e-01  4.643000e-01  2.155000e-01  4.168000e-01  4.041000e-01  3.630000e-01  2.536000e-01  2.708000e-01 
+ 4.087000e-01  1.144000e-01  6.518000e-01  1.959000e-01  7.540000e-01  2.240000e-01  1.739300e+00 -8.900000e-03  4.300000e-03 -5.200000e-03 -2.820000e-02  3.580000e-02  3.589000e-01  1.307000e-01 
+ 8.990000e-02  4.962000e-01  1.670000e-01  7.478000e-01  1.831000e-01  8.579000e-01  1.603000e-01  7.559000e-01  1.481000e-01  9.170000e-01  1.539000e-01  7.605000e-01  6.710000e-02  4.654000e-01 
+ 7.275000e-01  8.800000e-02  1.026300e+00  2.773000e-01  1.203800e+00  2.712000e-01  1.026200e+00  2.689000e-01  1.253600e+00  2.343000e-01  9.783000e-01  3.308000e-01  5.823000e-01  1.706000e-01 
+ 5.495000e-01  5.437000e-01  2.686000e-01  7.107000e-01  1.793000e-01  5.921000e-01  2.232000e-01  7.645000e-01  2.558000e-01  4.846000e-01  3.518000e-01  6.074000e-01  2.065000e-01  4.018000e-01 
+ 5.979000e-01  2.631000e-01  9.246000e-01  2.454000e-01  1.040700e+00  2.497000e-01  1.743200e+00 -1.210000e-02  2.035700e+00 -4.280000e-02  5.510000e-02 -6.860000e-02  5.446000e-01  1.450000e-01 
+ 4.053000e-01  3.193000e-01  7.128000e-01  4.065000e-01  6.600000e-01  6.450000e-01  6.435000e-01  4.922000e-01  7.326000e-01  5.784000e-01  6.610000e-01  4.686000e-01  3.683000e-01  2.864000e-01 
+ 3.101000e-01  7.882000e-01  2.058000e-01  6.524000e-01  1.578000e-01  5.337000e-01  1.578000e-01  7.100000e-01  1.407000e-01  5.390000e-01  1.659000e-01  7.029000e-01  1.362000e-01  4.268000e-01 
+ 3.448000e-01  7.733000e-01  2.226000e-01  3.745000e-01  1.856000e-01  3.102000e-01  2.002000e-01  3.992000e-01  2.583000e-01  2.151000e-01  1.775000e-01  4.266000e-01  1.738000e-01  2.538000e-01 
+ 1.163000e-01  6.281000e-01  6.240000e-02  1.128500e+00  1.577000e-01  1.181700e+00  8.570000e-02  1.103700e+00  1.171000e-01  1.252400e+00  2.270000e-01  9.335000e-01  7.730000e-02  6.036000e-01 
+ 1.841000e-01  9.089000e-01  9.620000e-02  1.631700e+00  3.060000e-02  1.153200e+00  4.420000e-02  1.694200e+00  1.440000e-02  1.136600e+00  9.730000e-02  1.630200e+00  6.780000e-02  7.479000e-01 
+ 2.871000e-01  4.391000e-01  5.545000e-01  5.586000e-01  5.610000e-01  7.182000e-01  6.155000e-01  4.853000e-01  6.982000e-01  5.763000e-01  5.284000e-01  5.929000e-01  3.306000e-01  3.102000e-01 
+ 6.266000e-01  4.869000e-01  8.659000e-01  8.900000e-01  1.030200e+00  9.553000e-01  1.955700e+00 -2.583000e-01  1.954300e+00  5.250000e-02  1.870000e-02  1.709700e+00  5.739000e-01  4.255000e-01 
+ 2.521000e-01  5.208000e-01  4.874000e-01  6.131000e-01  7.096000e-01  4.927000e-01  1.693000e+00  4.670000e-02  2.250000e-02  1.967700e+00  1.410000e-02 -1.790000e-02  2.880000e-01  3.549000e-01 
+ 1.115700e+00 -1.130000e-02  5.825000e-01  6.135000e-01  6.044000e-01  2.598000e-01  5.369000e-01  6.677000e-01  5.063000e-01  3.521000e-01  5.327000e-01  6.701000e-01  4.238000e-01  2.538000e-01 
+ 4.343000e-01  2.892000e-01  6.943000e-01  4.379000e-01  8.366000e-01  4.458000e-01  8.259000e-01  2.838000e-01  8.670000e-01  4.263000e-01  7.693000e-01  3.494000e-01  4.452000e-01  2.014000e-01 
+ 3.767000e-01  6.610000e-01  7.348000e-01  6.040000e-01  9.230000e-01  5.251000e-01  1.740300e+00 -4.500000e-03 -4.600000e-02  2.054200e+00  2.160000e-02 -2.470000e-02  4.012000e-01  3.929000e-01 
+ 1.776000e-01  9.447000e-01  6.292000e-01  9.101000e-01  7.055000e-01  9.575000e-01  1.797300e+00 -8.050000e-02 -8.980000e-02  2.111000e+00 -2.000000e-03  1.733600e+00  3.322000e-01  5.643000e-01 
+ 2.923000e-01  5.579000e-01  3.704000e-01  9.829000e-01  3.558000e-01  1.191800e+00  3.351000e-01  1.025100e+00  3.176000e-01  1.266500e+00  3.619000e-01  9.876000e-01  1.767000e-01  6.106000e-01 
+ 1.100500e+00  6.600000e-03  4.421000e-01  8.560000e-01  3.823000e-01  5.487000e-01  4.909000e-01  7.966000e-01  3.241000e-01  5.907000e-01  5.004000e-01  7.838000e-01  3.299000e-01  3.734000e-01 
+ 1.048000e+00  6.760000e-02  7.788000e-01  9.475000e-01  6.592000e-01  1.156800e+00  7.752000e-01  9.544000e-01  6.585000e-01  9.674000e-01  7.535000e-01  9.787000e-01  5.198000e-01  4.468000e-01 
+ 6.970000e-02  9.352000e-01  2.593000e-01  1.061000e+00  3.419000e-01  1.108000e+00  7.300000e-03  1.719100e+00 -7.600000e-03  2.004800e+00  3.520000e-02 -4.400000e-02  1.164000e-01  6.692000e-01 
+ 3.260000e-01  2.160000e-01  7.528000e-01  7.900000e-02  7.924000e-01  1.742000e-01  1.687000e+00  5.020000e-02 -3.940000e-02  4.670000e-02 -6.030000e-02  7.090000e-02  4.082000e-01  7.520000e-02 
+ 1.050000e-01  6.663000e-01  3.348000e-01  7.601000e-01  5.875000e-01  6.110000e-01  1.713200e+00  2.610000e-02  1.228000e-01  1.855500e+00 -2.320000e-02  2.860000e-02  2.201000e-01  4.189000e-01 
+ 1.002700e+00  1.252000e-01  6.166000e-01  4.814000e-01  4.798000e-01  3.617000e-01  7.088000e-01  3.755000e-01  5.636000e-01  2.377000e-01  6.239000e-01  4.772000e-01  4.345000e-01  2.159000e-01 
+ 4.496000e-01  2.169000e-01  6.392000e-01  3.630000e-01  8.200000e-01  2.899000e-01  1.770400e+00 -4.520000e-02 -1.100000e-02  2.011200e+00  1.760000e-02 -1.910000e-02  4.239000e-01  1.501000e-01 
+ 4.926000e-01  6.137000e-01  3.186000e-01  1.404600e+00  2.477000e-01  1.260500e+00  1.928000e-01  1.552100e+00  2.102000e-01  1.225200e+00  2.542000e-01  1.481800e+00  2.139000e-01  7.059000e-01 
+ 1.138700e+00 -4.270000e-02  8.879000e-01  1.301000e-01  6.693000e-01  1.269000e-01  8.105000e-01  2.219000e-01  6.306000e-01  1.497000e-01  8.711000e-01  1.517000e-01  5.312000e-01  9.750000e-02 
+ 9.711000e-01  1.022000e-01  1.494600e+00  2.016000e-01  1.763500e+00  1.583000e-01  1.554200e+00  1.290000e-01  1.834300e+00  1.014000e-01  1.488900e+00  2.066000e-01  8.892000e-01  8.380000e-02 
+ 2.105000e-01  1.522000e-01  5.753000e-01  9.360000e-02  6.696000e-01  1.234000e-01  1.763000e+00 -3.660000e-02  4.100000e-03 -4.000000e-03 -1.860000e-02  2.320000e-02  3.220000e-01  5.130000e-02 
+ 5.364000e-01  5.697000e-01  2.754000e-01  1.459900e+00  2.340000e-01  9.770000e-01  2.480000e-01  1.489200e+00  3.099000e-01  8.484000e-01  2.989000e-01  1.428300e+00  2.200000e-01  6.076000e-01 
+ 1.165300e+00 -7.410000e-02  4.147000e-01  6.831000e-01  3.322000e-01  5.073000e-01  4.404000e-01  6.515000e-01  3.882000e-01  4.203000e-01  3.910000e-01  7.064000e-01  3.222000e-01  3.256000e-01 
+ 5.929000e-01  4.753000e-01  7.672000e-01  9.424000e-01  8.572000e-01  1.086400e+00  7.978000e-01  8.958000e-01  9.469000e-01  1.005600e+00  7.537000e-01  9.506000e-01  4.475000e-01  5.341000e-01 
+ 1.982000e-01  7.611000e-01  4.901000e-01  7.844000e-01  6.065000e-01  7.851000e-01  1.734700e+00 -4.100000e-03  9.350000e-02  1.890800e+00 -3.790000e-02  4.530000e-02  2.528000e-01  5.018000e-01 
+ 1.546000e-01  4.171000e-01  2.119000e-01  6.868000e-01  2.017000e-01  8.355000e-01  3.120000e-01  5.704000e-01  2.865000e-01  7.473000e-01  2.101000e-01  6.932000e-01  1.401000e-01  3.778000e-01 
+ 5.030000e-02  4.674000e-01  7.340000e-02  7.643000e-01  2.045000e-01  7.558000e-01 -4.600000e-03  1.736500e+00 -6.460000e-02  7.550000e-02 -1.480000e-02  1.930000e-02  5.150000e-02  4.315000e-01 
+ 1.041000e-01  6.762000e-01  3.926000e-01  7.050000e-01  5.157000e-01  7.068000e-01  1.774500e+00 -5.130000e-02  3.810000e-02  1.958000e+00 -2.210000e-02  2.530000e-02  2.124000e-01  4.345000e-01 
+ 6.700000e-03  5.981000e-01 -6.650000e-02  1.033500e+00 -2.740000e-02  1.112100e+00  3.610000e-02  9.109000e-01  1.080000e-02  1.085600e+00 -6.430000e-02  1.026400e+00  6.900000e-03  5.412000e-01 
+ 2.601000e-01  8.426000e-01  1.748000e-01  5.536000e-01  1.488000e-01  4.436000e-01  2.177000e-01  4.987000e-01  1.135000e-01  4.778000e-01  1.067000e-01  6.321000e-01  1.217000e-01  3.789000e-01 
+ 7.495000e-01  3.638000e-01  3.087000e-01  7.132000e-01  2.289000e-01  5.704000e-01  4.013000e-01  5.987000e-01  4.147000e-01  3.338000e-01  3.795000e-01  6.300000e-01  2.800000e-01  3.398000e-01 
+ 2.536000e-01  3.032000e-01  3.890000e-01  4.836000e-01  4.285000e-01  5.635000e-01  4.099000e-01  4.558000e-01  5.144000e-01  4.786000e-01  3.665000e-01  5.107000e-01  2.354000e-01  2.655000e-01 
+ 1.108700e+00 -1.400000e-03  6.231000e-01  1.103400e+00  5.175000e-01  5.217000e-01  5.151000e-01  1.232300e+00  5.308000e-01  4.732000e-01  4.814000e-01  1.269600e+00  4.136000e-01  3.438000e-01 
+ 1.243000e-01  8.552000e-01  2.607000e-01  1.254300e+00  2.224000e-01  1.517600e+00  2.060000e-01  1.322800e+00  2.795000e-01  1.476000e+00  3.078000e-01  1.201100e+00  1.504000e-01  7.250000e-01 
+ 9.213000e-01  1.830000e-01  1.271100e+00  2.182000e-01  1.436000e+00  1.685000e-01  1.739100e+00 -6.500000e-03  2.118200e+00 -1.382000e-01  2.510000e-02  1.703800e+00  7.304000e-01  1.416000e-01 
+ 4.906000e-01  2.284000e-01  7.607000e-01  3.695000e-01  7.548000e-01  5.566000e-01  8.102000e-01  3.068000e-01  8.265000e-01  4.896000e-01  7.111000e-01  4.283000e-01  4.367000e-01  2.166000e-01 
+ 5.023000e-01  2.296000e-01  8.095000e-01  3.391000e-01  8.645000e-01  4.546000e-01  7.044000e-01  4.620000e-01  8.431000e-01  5.025000e-01  7.605000e-01  3.984000e-01  4.166000e-01  2.559000e-01 
+ 1.156500e+00 -5.760000e-02  6.427000e-01  1.085200e+00  4.490000e-01  9.378000e-01  5.651000e-01  1.172700e+00  4.125000e-01  9.192000e-01  6.713000e-01  1.048000e+00  4.359000e-01  4.478000e-01 
+ 3.471000e-01  4.969000e-01  5.672000e-01  6.026000e-01  6.693000e-01  6.248000e-01  1.642200e+00  1.036000e-01  2.180000e-02  1.976600e+00 -6.900000e-03  6.900000e-03  3.297000e-01  3.596000e-01 
+ 1.772000e-01  7.112000e-01  3.103000e-01  1.079600e+00  2.551000e-01  1.339400e+00  2.338000e-01  1.168600e+00  3.075000e-01  1.305000e+00  2.437000e-01  1.153100e+00  1.468000e-01  6.600000e-01 
+ 4.819000e-01  5.060000e-01  7.012000e-01  8.559000e-01  8.285000e-01  9.376000e-01  6.944000e-01  8.615000e-01  7.004000e-01  1.112700e+00  7.276000e-01  8.193000e-01  4.284000e-01  4.650000e-01 
+ 4.597000e-01  2.749000e-01  7.482000e-01  3.990000e-01  9.198000e-01  3.746000e-01  7.880000e-01  3.529000e-01  8.253000e-01  5.067000e-01  7.385000e-01  4.140000e-01  4.344000e-01  2.271000e-01 
+ 4.523000e-01  6.470000e-01  2.413000e-01  1.312200e+00  1.894000e-01  8.252000e-01  1.803000e-01  1.379300e+00  1.961000e-01  7.919000e-01  1.998000e-01  1.361800e+00  1.884000e-01  5.538000e-01 
+ 4.270000e-02  6.164000e-01  1.516000e-01  8.657000e-01  8.410000e-02  1.095600e+00  1.261000e-01  8.992000e-01  1.549000e-01  1.029100e+00  7.630000e-02  9.625000e-01  3.020000e-02  5.699000e-01 
+ 4.810000e-02  6.301000e-01  3.641000e-01  6.274000e-01  4.213000e-01  6.975000e-01  4.650000e-02  1.677500e+00 -2.970000e-02  2.037900e+00  1.500000e-03 -2.200000e-03  1.792000e-01  4.041000e-01 
+-5.410000e-02  8.424000e-01  2.830000e-01  8.134000e-01  4.024000e-01  8.135000e-01  6.600000e-03  1.724300e+00 -8.130000e-02  2.099400e+00 -3.590000e-02  4.370000e-02  1.669000e-01  4.733000e-01 
+ 1.492000e-01  9.433000e-01  4.581000e-01  1.263300e+00  4.340000e-01  1.517700e+00  1.692600e+00  4.630000e-02 -5.270000e-02  2.056400e+00 -1.043000e-01  1.855000e+00  2.145000e-01  7.789000e-01 
+ 5.950000e-01  5.037000e-01  8.418000e-01  6.593000e-01  1.035600e+00  5.684000e-01  1.736200e+00 -4.000000e-03  1.998700e+00  2.900000e-03  7.450000e-02  1.641700e+00  5.081000e-01  3.627000e-01 
+ 1.041200e+00  7.690000e-02  3.429000e-01  5.131000e-01  4.083000e-01  2.563000e-01  4.457000e-01  3.872000e-01  3.686000e-01  2.875000e-01  4.201000e-01  4.196000e-01  3.165000e-01  2.346000e-01 
+ 5.750000e-01  9.830000e-02  7.359000e-01  3.524000e-01  9.226000e-01  3.027000e-01  7.922000e-01  2.849000e-01  9.758000e-01  2.588000e-01  8.202000e-01  2.514000e-01  4.557000e-01  1.661000e-01 
+ 2.356000e-01  2.608000e-01  3.491000e-01  4.312000e-01  5.015000e-01  3.656000e-01  3.259000e-01  4.589000e-01  3.623000e-01  5.480000e-01  3.415000e-01  4.391000e-01  2.121000e-01  2.362000e-01 
+-4.400000e-03  5.750000e-02  2.999000e-01  5.590000e-02  3.436000e-01  1.495000e-01  6.220000e-02 -7.260000e-02  3.770000e-02 -4.620000e-02 -1.930000e-02  2.460000e-02  1.388000e-01  5.610000e-02 
+ 3.853000e-01  2.266000e-01  6.398000e-01  2.940000e-01  7.465000e-01  3.086000e-01  1.889800e+00 -1.804000e-01  2.080000e-02  1.977300e+00 -1.660000e-02  1.840000e-02  3.421000e-01  2.053000e-01 
+ 5.732000e-01  9.820000e-02  9.495000e-01  2.150000e-02  1.010600e+00  9.040000e-02  1.689700e+00  5.020000e-02  1.855100e+00  1.663000e-01 -1.440000e-02  1.560000e-02  5.282000e-01  4.370000e-02 
+ 5.975000e-01  9.590000e-02  8.709000e-01  2.277000e-01  9.448000e-01  3.096000e-01  8.984000e-01  1.909000e-01  1.040400e+00  2.144000e-01  8.695000e-01  2.280000e-01  4.989000e-01  1.341000e-01 
+ 1.161700e+00 -6.800000e-02  5.103000e-01  1.213400e+00  4.322000e-01  6.767000e-01  5.040000e-01  1.219600e+00  3.956000e-01  6.859000e-01  5.204000e-01  1.201400e+00  3.472000e-01  4.431000e-01 
+ 1.021700e+00  9.880000e-02  4.318000e-01  4.948000e-01  3.271000e-01  4.096000e-01  4.788000e-01  4.344000e-01  3.361000e-01  3.875000e-01  4.107000e-01  5.175000e-01  3.394000e-01  2.462000e-01 
+ 9.910000e-02  6.097000e-01  1.928000e-01  9.126000e-01  2.849000e-01  9.650000e-01  1.819000e-01  9.313000e-01  2.587000e-01  1.014800e+00  2.217000e-01  8.827000e-01  1.360000e-01  4.989000e-01 
+ 4.196000e-01  4.070000e-01  8.509000e-01  2.705000e-01  8.090000e-01  4.584000e-01  1.633500e+00  1.120000e-01 -6.650000e-02  2.080700e+00  1.660000e-02 -1.950000e-02  4.122000e-01  2.621000e-01 
+ 6.442000e-01  4.657000e-01  2.805000e-01  9.211000e-01  3.062000e-01  5.754000e-01  3.203000e-01  8.736000e-01  3.428000e-01  5.107000e-01  2.195000e-01  9.937000e-01  2.591000e-01  4.182000e-01 
+ 1.083000e-01  3.704000e-01  2.198000e-01  5.239000e-01  1.973000e-01  6.579000e-01  1.038000e-01  6.641000e-01  2.724000e-01  5.815000e-01  2.600000e-01  4.734000e-01  9.710000e-02  3.372000e-01 
+ 1.143400e+00 -4.700000e-02  6.394000e-01  1.084000e+00  5.072000e-01  8.219000e-01  7.274000e-01  9.770000e-01  4.117000e-01  8.792000e-01  6.133000e-01  1.115600e+00  4.261000e-01  4.439000e-01 
+ 4.894000e-01  2.322000e-01  9.444000e-01  1.599000e-01  1.136500e+00  1.100000e-01  9.970000e-01  9.400000e-02  1.083900e+00  1.925000e-01  9.986000e-01  9.700000e-02  5.573000e-01  7.900000e-02 
+ 6.940000e-02  4.496000e-01  3.861000e-01  4.431000e-01  5.083000e-01  4.420000e-01  1.722500e+00  8.000000e-03 -2.180000e-02  2.580000e-02 -1.260000e-02  1.530000e-02  2.012000e-01  2.778000e-01 
+ 4.709000e-01  1.637000e-01  7.540000e-01  2.368000e-01  9.168000e-01  1.987000e-01  7.055000e-01  2.919000e-01  8.799000e-01  2.597000e-01  6.879000e-01  3.119000e-01  4.364000e-01  1.345000e-01 
+ 3.695000e-01  7.475000e-01  7.178000e-01  7.092000e-01  8.749000e-01  6.676000e-01  1.720000e+00  6.400000e-03 -9.800000e-03  2.015000e+00  5.230000e-02  1.671600e+00  4.293000e-01  4.062000e-01 
+ 2.833000e-01  6.929000e-01  3.343000e-01  1.207300e+00  4.848000e-01  1.259600e+00  4.201000e-01  1.108400e+00  4.528000e-01  1.313000e+00  3.483000e-01  1.200200e+00  2.231000e-01  6.640000e-01 
+ 3.249000e-01  2.663000e-01  2.135000e-01  8.380000e-02  2.176000e-01  3.230000e-02  1.633000e-01  1.440000e-01  1.643000e-01  8.870000e-02  2.186000e-01  7.850000e-02  1.557000e-01  8.340000e-02 
+ 2.509000e-01  4.415000e-01  3.253000e-01  7.774000e-01  3.237000e-01  9.379000e-01  2.093000e-01  9.146000e-01  3.470000e-01  9.313000e-01  2.318000e-01  8.854000e-01  1.571000e-01  4.836000e-01 
+ 4.089000e-01  3.129000e-01  5.581000e-01  5.068000e-01  8.138000e-01  3.462000e-01  1.677900e+00  6.840000e-02  2.080000e-02  1.974000e+00 -2.290000e-02  2.710000e-02  3.926000e-01  2.173000e-01 
+ 6.643000e-01  4.440000e-01  4.709000e-01  3.021000e-01  3.044000e-01  3.373000e-01  3.318000e-01  4.683000e-01  2.892000e-01  3.421000e-01  3.202000e-01  4.828000e-01  2.603000e-01  2.726000e-01 
+ 1.089800e+00  1.820000e-02  4.522000e-01  1.280700e+00  2.793000e-01  9.139000e-01  4.674000e-01  1.263400e+00  4.811000e-01  6.379000e-01  5.040000e-01  1.218100e+00  3.527000e-01  4.602000e-01 
+ 7.746000e-01  2.773000e-01  1.262500e+00  3.768000e-01  1.368200e+00  5.105000e-01  1.176300e+00  4.776000e-01  1.362200e+00  5.502000e-01  1.244100e+00  4.004000e-01  7.037000e-01  2.478000e-01 
+ 1.214400e+00 -1.345000e-01  5.728000e-01  8.045000e-01  4.732000e-01  4.932000e-01  5.432000e-01  8.459000e-01  4.365000e-01  5.079000e-01  6.445000e-01  7.233000e-01  4.171000e-01  3.019000e-01 
+ 1.020300e+00  1.023000e-01  1.339900e+00  3.863000e-01  8.918000e-01  4.010000e-01  1.400000e+00  3.113000e-01  9.264000e-01  3.066000e-01  1.256800e+00  4.880000e-01  7.044000e-01  1.491000e-01 
+-8.000000e-04  8.211000e-01  2.361000e-01  9.075000e-01  3.880000e-01  8.679000e-01 -2.060000e-02  1.757600e+00 -1.680000e-02  2.020600e+00 -5.400000e-02  6.580000e-02  1.555000e-01  5.119000e-01 
+ 8.590000e-02  5.093000e-01  1.094000e-01  8.284000e-01  1.888000e-01  8.672000e-01  2.009000e-01  7.242000e-01  3.171000e-01  7.291000e-01  2.109000e-01  7.078000e-01  1.055000e-01  4.283000e-01 
+ 5.585000e-01  4.104000e-01  9.091000e-01  6.040000e-01  9.648000e-01  7.640000e-01  8.639000e-01  6.560000e-01  9.755000e-01  7.808000e-01  9.222000e-01  5.776000e-01  4.978000e-01  3.786000e-01 
+ 6.952000e-01  9.790000e-02  1.119200e+00  1.273000e-01  1.299400e+00  1.131000e-01  1.206300e+00  2.280000e-02  1.367300e+00  5.920000e-02  1.061200e+00  1.961000e-01  6.713000e-01  4.250000e-02 
+-2.900000e-02  6.100000e-01  1.768000e-01  7.117000e-01  2.572000e-01  7.548000e-01 -4.300000e-02  1.783800e+00 -1.134000e-01  2.131000e+00  2.780000e-02 -3.580000e-02  9.120000e-02  4.239000e-01 
+ 6.690000e-02  1.033000e+00  5.470000e-02  4.185000e-01  6.780000e-02  3.254000e-01  1.660000e-02  4.632000e-01  3.370000e-02  3.636000e-01  6.200000e-03  4.806000e-01  1.390000e-02  3.445000e-01 
+ 4.392000e-01  1.730000e-01  7.467000e-01  1.972000e-01  7.673000e-01  3.279000e-01  8.360000e-01  9.120000e-02  8.220000e-01  2.830000e-01  7.616000e-01  1.845000e-01  4.333000e-01  1.134000e-01 
+ 1.127900e+00 -2.750000e-02  1.157800e+00  5.609000e-01  8.199000e-01  7.000000e-01  1.071100e+00  6.639000e-01  8.206000e-01  6.127000e-01  1.003100e+00  7.467000e-01  6.514000e-01  2.694000e-01 
+ 8.172000e-01  2.907000e-01  3.781000e-01  1.356400e+00  3.831000e-01  1.575800e+00  5.063000e-01  1.203100e+00  3.232000e-01  1.481600e+00  5.606000e-01  1.139900e+00  2.864000e-01  7.047000e-01 
+ 3.522000e-01  3.816000e-01  6.513000e-01  4.030000e-01  8.796000e-01  2.741000e-01  1.853000e+00 -1.437000e-01  2.020000e-02  1.981500e+00  4.100000e-02 -4.790000e-02  4.054000e-01  2.034000e-01 
+ 6.243000e-01  3.136000e-01  9.404000e-01  5.338000e-01  1.054800e+00  6.177000e-01  1.003000e+00  4.583000e-01  1.125700e+00  5.655000e-01  8.917000e-01  5.895000e-01  5.389000e-01  3.107000e-01 
+ 1.032000e-01  2.145000e-01  2.228000e-01  2.618000e-01  2.334000e-01  3.197000e-01  2.795000e-01  1.928000e-01  2.514000e-01  3.102000e-01  2.510000e-01  2.285000e-01  1.353000e-01  1.438000e-01 
+ 9.120000e-02  4.763000e-01  8.260000e-02  8.195000e-01  1.323000e-01  8.828000e-01  1.208000e-01  7.711000e-01  1.502000e-01  8.749000e-01  8.230000e-02  8.164000e-01  4.590000e-02  4.733000e-01 
+ 8.400000e-03  5.233000e-01  3.114000e-01  5.303000e-01  3.548000e-01  6.212000e-01 -7.810000e-02  1.824600e+00 -1.500000e-02  1.630000e-02  1.900000e-02 -2.190000e-02  1.548000e-01  3.324000e-01 
+ 3.621000e-01  3.948000e-01  5.814000e-01  5.091000e-01  7.371000e-01  4.622000e-01  1.827200e+00 -1.137000e-01  2.880000e-02  1.964000e+00 -9.400000e-03  1.210000e-02  3.026000e-01  3.417000e-01 
+ 3.580000e-01  2.763000e-01  4.854000e-01  5.267000e-01  6.305000e-01  5.067000e-01  6.041000e-01  3.864000e-01  6.265000e-01  5.287000e-01  5.911000e-01  4.011000e-01  3.291000e-01  2.458000e-01 
+ 3.187000e-01  7.551000e-01  4.209000e-01  1.268700e+00  6.258000e-01  1.271600e+00  6.451000e-01  1.001000e+00  5.475000e-01  1.395100e+00  5.579000e-01  1.113300e+00  3.066000e-01  6.586000e-01 
+ 1.185000e-01  7.796000e-01  2.708000e-01  1.118500e+00  3.414000e-01  1.232300e+00  2.990000e-01  1.083900e+00  4.309000e-01  1.150900e+00  3.358000e-01  1.039400e+00  1.932000e-01  6.014000e-01 
+ 1.116200e+00 -1.300000e-02  5.206000e-01  2.610000e-02  4.651000e-01 -1.630000e-02  5.007000e-01  4.660000e-02  4.346000e-01  1.190000e-02  4.827000e-01  6.850000e-02  3.726000e-01  2.650000e-02 
+ 8.306000e-01  9.530000e-02  1.104800e+00  3.818000e-01  1.345200e+00  3.360000e-01  1.102500e+00  3.846000e-01  1.274300e+00  4.425000e-01  1.127500e+00  3.547000e-01  6.521000e-01  2.045000e-01 
+ 1.156300e+00 -6.370000e-02  9.582000e-01  7.839000e-01  8.017000e-01  5.624000e-01  1.087200e+00  6.377000e-01  7.981000e-01  5.080000e-01  9.966000e-01  7.431000e-01  6.323000e-01  2.479000e-01 
+ 1.113700e+00 -1.060000e-02  5.751000e-01  8.128000e-01  5.425000e-01  4.148000e-01  5.360000e-01  8.606000e-01  6.221000e-01  2.954000e-01  6.010000e-01  7.833000e-01  4.364000e-01  2.829000e-01 
+-7.000000e-04  1.000200e+00  6.240000e-02  1.491200e+00  3.840000e-02  1.734700e+00  1.108000e-01  1.435400e+00  1.197000e-01  1.670000e+00 -2.700000e-03  1.567500e+00  3.070000e-02  8.685000e-01 
+ 1.240000e-01  9.872000e-01  1.695000e-01  5.126000e-01  1.271000e-01  4.343000e-01  1.380000e-02  6.953000e-01  2.270000e-02  5.462000e-01  1.374000e-01  5.482000e-01  7.740000e-02  4.041000e-01 
+ 4.141000e-01  6.719000e-01  2.314000e-01  1.497700e+00  2.280000e-01  9.137000e-01  2.178000e-01  1.504500e+00  1.092000e-01  1.019000e+00  1.247000e-01  1.614500e+00  1.445000e-01  6.616000e-01 
+ 6.177000e-01  1.427000e-01  9.623000e-01  1.017000e-01  1.103000e+00  7.800000e-02  1.600300e+00  1.562000e-01  1.871500e+00  1.531000e-01  2.210000e-02 -2.600000e-02  5.527000e-01  7.560000e-02 
+ 1.059300e+00  5.470000e-02  9.245000e-01  3.887000e-01  7.576000e-01  1.769000e-01  9.578000e-01  3.412000e-01  7.952000e-01  1.095000e-01  1.041500e+00  2.450000e-01  6.124000e-01  9.040000e-02 
+ 9.449000e-01  1.353000e-01  3.213000e-01  1.421500e+00  3.429000e-01  7.263000e-01  3.767000e-01  1.351400e+00  3.432000e-01  6.875000e-01  3.776000e-01  1.354700e+00  2.832000e-01  4.873000e-01 
+ 6.301000e-01  4.748000e-01  4.008000e-01  9.958000e-01  2.741000e-01  6.979000e-01  3.320000e-01  1.073400e+00  3.438000e-01  5.908000e-01  3.196000e-01  1.086800e+00  2.474000e-01  4.766000e-01 
+ 1.978000e-01  9.140000e-01  1.938000e-01  4.248000e-01  6.020000e-02  4.722000e-01  9.960000e-02  5.354000e-01  7.210000e-02  4.447000e-01  1.717000e-01  4.529000e-01  1.206000e-01  3.249000e-01 
+ 2.309000e-01  2.064000e-01  6.680000e-01  5.680000e-02  6.932000e-01  1.725000e-01  1.859700e+00 -1.525000e-01 -3.130000e-02  3.630000e-02  5.910000e-02 -7.020000e-02  3.368000e-01  8.280000e-02 
+ 2.211000e-01  7.943000e-01  6.555000e-01  6.537000e-01  6.771000e-01  7.673000e-01  1.808700e+00 -8.840000e-02  7.200000e-03  1.994200e+00 -1.680000e-02  1.970000e-02  3.111000e-01  4.701000e-01 
+ 2.125000e-01  6.560000e-01  4.932000e-01  6.953000e-01  6.084000e-01  6.982000e-01  1.701900e+00  3.800000e-02 -5.100000e-02  2.060000e+00 -4.300000e-03  2.300000e-03  2.587000e-01  4.444000e-01 
+ 5.390000e-02  1.055300e+00  1.167000e-01  5.124000e-01 -7.110000e-02  6.230000e-01  1.115000e-01  5.170000e-01  3.800000e-02  4.834000e-01  6.440000e-02  5.757000e-01  3.960000e-02  4.136000e-01 
+ 2.916000e-01  2.618000e-01  3.233000e-01  5.671000e-01  5.434000e-01  4.386000e-01  4.561000e-01  4.079000e-01  4.168000e-01  6.065000e-01  3.949000e-01  4.845000e-01  2.435000e-01  2.603000e-01 
+ 3.046000e-01  1.198000e-01  5.786000e-01  1.665000e-01  7.735000e-01  8.260000e-02  1.760100e+00 -3.140000e-02  2.880000e-02 -3.630000e-02 -2.370000e-02  2.720000e-02  3.292000e-01  9.370000e-02 
+ 1.812000e-01  5.192000e-01  4.632000e-01  5.597000e-01  6.344000e-01  4.976000e-01  1.709800e+00  2.520000e-02 -7.980000e-02  2.089700e+00 -4.440000e-02  5.320000e-02  2.372000e-01  3.645000e-01 
+ 3.179000e-01  4.891000e-01  7.155000e-01  3.883000e-01  7.770000e-01  4.547000e-01  1.566300e+00  1.949000e-01  5.830000e-02  1.927600e+00  3.480000e-02 -4.360000e-02  3.791000e-01  2.744000e-01 
+ 1.477000e-01  4.547000e-01  2.569000e-01  6.831000e-01  2.450000e-01  8.360000e-01  3.765000e-01  5.412000e-01  2.740000e-01  8.186000e-01  1.857000e-01  7.708000e-01  1.411000e-01  4.037000e-01 
+ 2.131000e-01  6.178000e-01  6.259000e-01  4.974000e-01  7.543000e-01  4.947000e-01  1.708600e+00  2.940000e-02  4.010000e-02  1.945600e+00  2.130000e-02 -2.470000e-02  3.206000e-01  3.490000e-01 
+ 1.050800e+00  6.520000e-02  4.232000e-01  8.030000e-02  3.003000e-01  1.362000e-01  3.865000e-01  1.220000e-01  3.645000e-01  4.690000e-02  4.060000e-01  9.850000e-02  3.132000e-01  6.030000e-02 
+ 2.090000e-02  7.060000e-01  2.470000e-01  8.011000e-01  3.740000e-01  7.966000e-01 -3.690000e-02  1.777300e+00  4.610000e-02  1.946200e+00 -2.460000e-02  2.910000e-02  1.503000e-01  4.630000e-01 
+ 4.137000e-01  2.892000e-01  4.493000e-01  6.976000e-01  7.307000e-01  5.271000e-01  5.331000e-01  5.940000e-01  5.688000e-01  7.422000e-01  5.595000e-01  5.605000e-01  3.348000e-01  3.115000e-01 
+ 5.298000e-01  6.420000e-02  6.824000e-01  2.788000e-01  7.870000e-01  3.054000e-01  6.489000e-01  3.206000e-01  8.537000e-01  2.453000e-01  7.167000e-01  2.387000e-01  4.121000e-01  1.402000e-01 
+ 4.221000e-01  3.664000e-01  7.573000e-01  4.597000e-01  8.641000e-01  5.222000e-01  7.522000e-01  4.671000e-01  8.513000e-01  5.595000e-01  7.478000e-01  4.688000e-01  4.424000e-01  2.608000e-01 
+ 4.622000e-01  1.290000e-01  7.078000e-01  2.222000e-01  7.751000e-01  2.817000e-01  7.012000e-01  2.305000e-01  8.362000e-01  2.308000e-01  6.095000e-01  3.373000e-01  3.959000e-01  1.415000e-01 
+ 6.361000e-01  8.160000e-02  9.489000e-01  1.881000e-01  1.033400e+00  2.630000e-01  9.601000e-01  1.715000e-01  1.003700e+00  3.191000e-01  1.146200e+00 -4.830000e-02  5.663000e-01  8.560000e-02 
+ 2.930000e-01  5.022000e-01  7.152000e-01  3.739000e-01  7.363000e-01  4.900000e-01  1.759500e+00 -3.130000e-02 -6.460000e-02  2.074000e+00  4.020000e-02 -4.750000e-02  3.524000e-01  2.979000e-01 
+ 4.311000e-01  1.810000e-01  8.205000e-01  9.240000e-02  1.006300e+00  1.160000e-02  1.695800e+00  3.640000e-02 -8.400000e-03  2.010900e+00 -5.130000e-02  6.280000e-02  4.713000e-01  5.760000e-02 
+ 3.465000e-01  1.600000e-01  6.633000e-01  1.569000e-01  7.640000e-01  1.793000e-01  1.622700e+00  1.281000e-01  1.860000e-02 -2.340000e-02 -2.300000e-03  2.000000e-03  3.697000e-01  1.015000e-01 
+ 9.872000e-01 -1.126000e-01  1.332000e+00  7.640000e-02  1.548500e+00  5.010000e-02  1.269100e+00  1.510000e-01  1.585700e+00  2.980000e-02  1.368100e+00  3.380000e-02  7.755000e-01  3.590000e-02 
+ 2.610000e-01  7.540000e-01  6.275000e-01  6.880000e-01  6.739000e-01  7.751000e-01  1.638600e+00  1.087000e-01  5.130000e-02  1.938700e+00  4.940000e-02 -5.850000e-02  3.284000e-01  4.529000e-01 
+ 2.109000e-01  6.045000e-01  2.995000e-01  9.821000e-01  5.221000e-01  9.051000e-01  3.581000e-01  9.091000e-01  4.162000e-01  1.046800e+00  3.561000e-01  9.154000e-01  1.993000e-01  5.354000e-01 
+ 5.272000e-01  1.323000e-01  1.047100e+00 -1.195000e-01  1.095700e+00 -3.110000e-02  1.817900e+00 -1.026000e-01  1.931500e+00  7.750000e-02  6.700000e-03 -8.200000e-03  5.379000e-01  1.850000e-02 
+ 2.795000e-01  5.918000e-01  4.382000e-01  9.261000e-01  5.119000e-01  1.035300e+00  4.693000e-01  8.914000e-01  5.577000e-01  1.006300e+00  3.827000e-01  9.897000e-01  2.396000e-01  5.500000e-01 
+ 7.918000e-01 -6.760000e-02  9.720000e-01  9.020000e-02  1.069100e+00  1.199000e-01  1.781500e+00 -5.860000e-02  1.962800e+00  4.390000e-02  2.400000e-02 -2.710000e-02  5.785000e-01  4.470000e-02 
+ 1.210900e+00 -1.261000e-01  5.953000e-01  1.149400e+00  5.685000e-01  9.512000e-01  6.746000e-01  1.050000e+00  5.015000e-01  9.448000e-01  6.418000e-01  1.093700e+00  4.564000e-01  4.655000e-01 
+ 4.166000e-01 -2.610000e-02  7.158000e-01 -8.600000e-03  8.091000e-01  2.500000e-02  1.774000e+00 -4.670000e-02 -6.200000e-03  6.800000e-03 -6.670000e-02  7.770000e-02  3.702000e-01  3.560000e-02 
+ 1.066400e+00  4.440000e-02  3.890000e-01  1.361000e+00  4.381000e-01  6.264000e-01  5.386000e-01  1.188200e+00  4.047000e-01  6.327000e-01  3.706000e-01  1.379200e+00  3.626000e-01  4.052000e-01 
+ 3.560000e-01  5.282000e-01  6.139000e-01  5.976000e-01  7.348000e-01  5.920000e-01  1.600500e+00  1.565000e-01 -3.680000e-02  2.045900e+00  2.100000e-03 -9.000000e-04  3.704000e-01  3.378000e-01 
+ 2.368000e-01  4.550000e-01  4.686000e-01  5.905000e-01  5.762000e-01  6.224000e-01  4.614000e-01  5.998000e-01  5.424000e-01  6.833000e-01  5.509000e-01  4.959000e-01  2.914000e-01  3.168000e-01 
+ 1.412000e-01  5.766000e-01  2.682000e-01  7.994000e-01  4.284000e-01  7.535000e-01  2.010000e-02  1.708900e+00 -5.190000e-02  2.063600e+00 -2.990000e-02  3.540000e-02  1.924000e-01  4.226000e-01 
+ 4.028000e-01  3.229000e-01  5.538000e-01  5.916000e-01  6.593000e-01  6.407000e-01  5.754000e-01  5.726000e-01  6.679000e-01  6.512000e-01  4.964000e-01  6.656000e-01  3.227000e-01  3.403000e-01 
+ 1.014100e+00  1.139000e-01  6.173000e-01  1.123200e+00  5.625000e-01  5.521000e-01  7.679000e-01  9.384000e-01  5.604000e-01  5.170000e-01  5.513000e-01  1.193400e+00  4.537000e-01  3.371000e-01 
+ 2.231000e-01  2.160000e-01  3.652000e-01  3.177000e-01  3.538000e-01  4.355000e-01  3.714000e-01  3.082000e-01  3.945000e-01  4.011000e-01  3.866000e-01  2.949000e-01  2.034000e-01  1.923000e-01 
+ 3.449000e-01  7.698000e-01  2.342000e-01  1.963000e-01  1.374000e-01  2.406000e-01  2.404000e-01  1.906000e-01  1.173000e-01  2.574000e-01  2.592000e-01  1.675000e-01  1.858000e-01  1.419000e-01 
+ 3.156000e-01  1.832000e-01  3.843000e-01  4.186000e-01  5.150000e-01  3.846000e-01  4.053000e-01  3.939000e-01  4.708000e-01  4.471000e-01  4.462000e-01  3.420000e-01  2.460000e-01  2.126000e-01 
+ 6.092000e-01  1.414000e-01  8.663000e-01  3.277000e-01  8.921000e-01  4.823000e-01  8.205000e-01  3.809000e-01  1.009700e+00  3.674000e-01  9.123000e-01  2.730000e-01  5.124000e-01  1.745000e-01 
+ 8.463000e-01  1.475000e-01  1.383300e+00  1.659000e-01  1.409400e+00  3.871000e-01  1.236000e+00  3.424000e-01  1.439400e+00  3.775000e-01  1.240400e+00  3.315000e-01  7.584000e-01  1.434000e-01 
+ 1.186000e-01  5.166000e-01  2.754000e-01  7.017000e-01  3.716000e-01  7.266000e-01  1.927000e-01  8.017000e-01  2.624000e-01  8.739000e-01  3.585000e-01  6.027000e-01  1.595000e-01  4.034000e-01 
+-7.150000e-02  1.194100e+00  1.877000e-01  1.441100e+00  3.201000e-01  1.431200e+00  4.790000e-02  1.673200e+00 -5.740000e-02  2.074100e+00  1.340000e-02  1.714800e+00  9.210000e-02  8.434000e-01 
+ 1.061600e+00  5.140000e-02  8.015000e-01  9.388000e-01  6.061000e-01  6.110000e-01  9.143000e-01  7.975000e-01  6.790000e-01  4.857000e-01  7.059000e-01  1.043000e+00  5.455000e-01  2.809000e-01 
+ 7.813000e-01  2.707000e-01  1.166100e+00  1.809000e-01  1.340200e+00  1.161000e-01  1.784300e+00 -6.440000e-02  2.014600e+00 -1.000000e-02  4.940000e-02 -5.860000e-02  6.698000e-01  1.289000e-01 
+-2.000000e-02  8.819000e-01  2.728000e-01  8.867000e-01  2.715000e-01  1.033800e+00  1.349000e-01  1.575400e+00  2.450000e-02  1.974500e+00  2.900000e-02 -3.400000e-02  1.103000e-01  5.812000e-01 
+ 1.124500e+00 -2.180000e-02  4.186000e-01  1.652000e-01  3.845000e-01  9.650000e-02  4.261000e-01  1.539000e-01  3.543000e-01  1.256000e-01  4.996000e-01  6.970000e-02  3.512000e-01  6.390000e-02 
+-6.500000e-03  7.993000e-01  3.267000e-01  7.767000e-01  4.522000e-01  7.680000e-01 -2.820000e-02  1.766800e+00  4.970000e-02  1.942100e+00 -5.330000e-02  6.490000e-02  1.645000e-01  4.867000e-01 
+ 6.900000e-02  7.249000e-01  9.240000e-02  1.152900e+00  4.710000e-02  1.384400e+00  6.110000e-02  1.191900e+00  4.000000e-02  1.400800e+00  1.907000e-01  1.034100e+00  6.170000e-02  6.550000e-01 
+ 1.428000e-01  5.786000e-01  4.101000e-01  6.276000e-01  4.227000e-01  7.570000e-01  1.796700e+00 -7.820000e-02  1.590000e-02  1.975800e+00  3.080000e-02 -3.800000e-02  2.194000e-01  3.917000e-01 
+ 4.230000e-01  6.180000e-01  6.667000e-01  9.600000e-01  8.423000e-01  9.991000e-01  6.821000e-01  9.383000e-01  7.610000e-01  1.118300e+00  6.837000e-01  9.371000e-01  3.987000e-01  5.377000e-01 
+ 1.123200e+00 -1.980000e-02  4.842000e-01  1.256400e+00  4.733000e-01  5.613000e-01  6.713000e-01  1.041900e+00  4.869000e-01  5.181000e-01  6.174000e-01  1.101800e+00  3.947000e-01  3.597000e-01 
+ 3.235000e-01  4.008000e-01  6.078000e-01  4.450000e-01  7.643000e-01  3.984000e-01  1.743500e+00 -1.240000e-02  7.710000e-02  1.904800e+00 -4.670000e-02  5.660000e-02  3.336000e-01  2.813000e-01 
+ 8.635000e-01  2.416000e-01  3.268000e-01  7.437000e-01  3.194000e-01  4.958000e-01  4.484000e-01  5.974000e-01  3.312000e-01  4.618000e-01  3.342000e-01  7.332000e-01  2.896000e-01  3.473000e-01 
+ 3.989000e-01  3.064000e-01  7.602000e-01  3.139000e-01  7.549000e-01  4.913000e-01  6.895000e-01  3.998000e-01  6.527000e-01  6.348000e-01  6.298000e-01  4.730000e-01  3.961000e-01  2.339000e-01 
+-5.620000e-02  6.196000e-01  6.960000e-02  8.052000e-01  1.929000e-01  8.025000e-01  2.680000e-02  1.702400e+00  5.080000e-02  1.938200e+00  3.790000e-02 -4.510000e-02  7.300000e-02  4.286000e-01 
+ 7.670000e-02  5.532000e-01  3.697000e-01  5.783000e-01  5.229000e-01  5.426000e-01  1.730300e+00  2.500000e-03 -5.700000e-03  2.006900e+00  4.780000e-02 -5.690000e-02  2.083000e-01  3.421000e-01 
+ 1.222200e+00 -1.385000e-01  5.873000e-01  1.141900e+00  4.907000e-01  8.950000e-01  4.724000e-01  1.276000e+00  4.236000e-01  9.068000e-01  5.406000e-01  1.195200e+00  4.016000e-01  4.845000e-01 
+ 2.563000e-01  6.222000e-01  3.700000e-01  1.011000e+00  4.776000e-01  1.086300e+00  4.206000e-01  9.524000e-01  4.446000e-01  1.143800e+00  3.690000e-01  1.014000e+00  2.464000e-01  5.458000e-01 
+ 1.840000e-01  6.729000e-01  4.951000e-01  6.792000e-01  5.736000e-01  7.248000e-01  1.651000e+00  9.460000e-02 -1.130000e-02  2.015000e+00  1.500000e-03 -2.300000e-03  2.611000e-01  4.318000e-01 
+ 1.102100e+00  3.900000e-03  1.025300e+00  7.218000e-01  8.517000e-01  8.106000e-01  1.152900e+00  5.722000e-01  9.200000e-01  6.121000e-01  1.224200e+00  4.924000e-01  6.570000e-01  2.914000e-01 
+ 4.650000e-01  1.452000e-01  7.837000e-01  1.378000e-01  9.267000e-01  1.065000e-01  1.763500e+00 -3.920000e-02  1.258000e-01  1.849400e+00 -1.710000e-02  2.010000e-02  4.704000e-01  5.990000e-02 
+ 1.125400e+00 -1.860000e-02  4.118000e-01  1.341000e+00  5.358000e-01  4.982000e-01  5.828000e-01  1.137600e+00  4.601000e-01  5.488000e-01  5.933000e-01  1.129500e+00  3.844000e-01  3.734000e-01 
+ 1.075400e+00  3.380000e-02  7.599000e-01  9.807000e-01  6.185000e-01  7.503000e-01  8.009000e-01  9.346000e-01  6.739000e-01  6.285000e-01  8.539000e-01  8.723000e-01  5.453000e-01  3.332000e-01 
+ 3.525000e-01  3.345000e-01  5.116000e-01  5.722000e-01  5.640000e-01  6.692000e-01  4.808000e-01  6.056000e-01  5.902000e-01  6.561000e-01  5.130000e-01  5.635000e-01  3.051000e-01  3.173000e-01 
+ 5.190000e-01  5.924000e-01  8.648000e-01  7.441000e-01  1.038200e+00  6.802000e-01  1.758000e+00 -3.610000e-02  1.986400e+00  1.070000e-02 -4.070000e-02  1.777700e+00  5.055000e-01  4.177000e-01 
+ 5.158000e-01  1.822000e-01  8.558000e-01  1.480000e-01  9.620000e-01  1.680000e-01  1.790400e+00 -7.240000e-02 -3.050000e-02  2.032800e+00  7.580000e-02 -9.170000e-02  4.772000e-01  1.143000e-01 
+ 5.610000e-01  2.925000e-01  7.260000e-01  4.631000e-01  9.444000e-01  3.525000e-01  1.723300e+00  7.400000e-03  3.060000e-02  1.958500e+00  3.750000e-02 -4.560000e-02  4.457000e-01  2.517000e-01 
+ 5.050000e-01  6.070000e-01  8.627000e-01  8.609000e-01  8.843000e-01  1.080400e+00  1.662900e+00  7.810000e-02  9.900000e-02  1.886300e+00 -5.900000e-02  1.799200e+00  4.807000e-01  5.152000e-01 
+ 4.083000e-01  6.277000e-01  5.078000e-01  1.137300e+00  5.682000e-01  1.305400e+00  6.229000e-01  1.002100e+00  6.980000e-01  1.180200e+00  6.487000e-01  9.710000e-01  3.243000e-01  6.188000e-01 
+ 5.610000e-01  1.063000e-01  7.032000e-01  3.773000e-01  7.404000e-01  4.993000e-01  7.263000e-01  3.493000e-01  8.452000e-01  3.924000e-01  6.268000e-01  4.698000e-01  4.199000e-01  2.013000e-01 
+-4.600000e-03  4.540000e-01  1.915000e-01  5.706000e-01  3.021000e-01  5.829000e-01 -6.530000e-02  1.807800e+00 -4.130000e-02  4.920000e-02  9.000000e-03 -1.080000e-02  1.095000e-01  3.238000e-01 
+ 4.558000e-01  6.417000e-01  7.385000e-01  7.060000e-01  9.107000e-01  6.386000e-01  1.640500e+00  1.095000e-01 -1.430000e-02  2.021500e+00 -6.380000e-02  1.806700e+00  4.203000e-01  4.233000e-01 
+ 3.749000e-01  3.478000e-01  6.614000e-01  3.763000e-01  8.617000e-01  2.874000e-01  1.680900e+00  6.080000e-02  5.110000e-02  1.937900e+00 -4.430000e-02  5.130000e-02  3.498000e-01  2.637000e-01 
+ 1.172000e+00 -7.900000e-02  5.569000e-01  2.045000e-01  5.080000e-01  1.028000e-01  5.461000e-01  2.194000e-01  4.582000e-01  1.502000e-01  6.272000e-01  1.214000e-01  4.147000e-01  9.840000e-02 
+ 1.114400e+00 -1.480000e-02  6.321000e-01  8.080000e-02  5.397000e-01  4.140000e-02  5.880000e-01  1.360000e-01  4.192000e-01  1.711000e-01  5.523000e-01  1.767000e-01  4.362000e-01  5.740000e-02 
+ 4.172000e-01  4.878000e-01  7.567000e-01  4.570000e-01  8.219000e-01  5.137000e-01  1.698300e+00  4.280000e-02 -2.360000e-02  2.029800e+00 -3.000000e-04  2.000000e-03  4.055000e-01  3.136000e-01 
+ 3.340000e-02  9.060000e-02  1.528000e-01  2.821000e-01  2.778000e-01  2.702000e-01  3.840000e-02  1.689500e+00  8.330000e-02 -1.008000e-01  7.790000e-02 -9.420000e-02  6.010000e-02  1.798000e-01 
+ 1.125000e+00 -1.910000e-02  6.254000e-01  1.100600e+00  3.906000e-01  8.229000e-01  6.111000e-01  1.120500e+00  4.252000e-01  7.403000e-01  6.368000e-01  1.083800e+00  4.206000e-01  4.015000e-01 
+ 6.356000e-01  4.044000e-01  8.279000e-01  8.315000e-01  9.620000e-01  9.261000e-01  8.210000e-01  8.397000e-01  1.001200e+00  9.082000e-01  8.058000e-01  8.573000e-01  4.849000e-01  4.709000e-01 
+ 1.061500e+00  5.180000e-02  7.158000e-01  1.021300e+00  6.573000e-01  4.111000e-01  7.008000e-01  1.036400e+00  5.019000e-01  5.624000e-01  7.263000e-01  1.009700e+00  4.987000e-01  2.754000e-01 
+ 1.755000e-01  3.300000e-01  3.664000e-01  4.088000e-01  3.820000e-01  5.115000e-01  3.903000e-01  3.836000e-01  4.519000e-01  4.405000e-01  2.869000e-01  5.086000e-01  1.966000e-01  2.555000e-01 
+ 2.700000e-02  1.430000e-02  3.190000e-02  3.198000e-01  3.130000e-02  4.564000e-01 -1.280000e-02  1.590000e-02 -6.610000e-02  7.780000e-02 -8.400000e-03  8.100000e-03  1.590000e-02  1.756000e-01 
+ 4.663000e-01 -4.600000e-03  7.408000e-01  4.170000e-02  9.221000e-01 -2.920000e-02  1.735200e+00 -1.600000e-03  7.200000e-02 -8.600000e-02  3.510000e-02 -4.170000e-02  4.131000e-01  3.500000e-02 
+ 3.971000e-01  1.871000e-01  6.050000e-01  3.133000e-01  6.799000e-01  3.637000e-01  5.564000e-01  3.703000e-01  7.048000e-01  3.569000e-01  5.925000e-01  3.298000e-01  3.250000e-01  2.095000e-01 
+ 1.881000e-01  2.852000e-01  4.351000e-01  3.640000e-01  5.826000e-01  3.299000e-01  1.650900e+00  9.930000e-02 -7.760000e-02  9.370000e-02  3.610000e-02 -4.430000e-02  2.443000e-01  2.118000e-01 
+ 7.071000e-01  4.006000e-01  3.163000e-01  1.421300e+00  2.512000e-01  1.208400e+00  3.451000e-01  1.385900e+00  3.214000e-01  1.050100e+00  3.445000e-01  1.383400e+00  2.696000e-01  6.342000e-01 
+ 6.183000e-01  4.862000e-01  8.977000e-01  8.166000e-01  1.012400e+00  8.138000e-01  1.728200e+00  4.700000e-03  2.084100e+00 -9.930000e-02 -2.800000e-03  1.733200e+00  5.319000e-01  4.307000e-01 
+ 7.480000e-01  2.723000e-01  1.088900e+00  5.234000e-01  1.335700e+00  4.807000e-01  1.197500e+00  3.954000e-01  1.335600e+00  5.135000e-01  1.092100e+00  5.162000e-01  6.428000e-01  2.840000e-01 
+ 1.220000e-02  4.463000e-01  3.817000e-01  3.752000e-01  4.660000e-01  4.161000e-01 -3.900000e-02  1.775400e+00  2.450000e-02 -2.800000e-02 -2.000000e-02  2.500000e-02  1.909000e-01  2.436000e-01 
+ 4.191000e-01  7.018000e-01  7.914000e-01  6.675000e-01  1.036300e+00  5.181000e-01  1.751200e+00 -2.240000e-02 -1.037000e-01  2.116700e+00  0.000000e+00  1.728200e+00  4.685000e-01  3.836000e-01 
+ 5.673000e-01  5.564000e-01  3.051000e-01  8.024000e-01  2.870000e-01  5.490000e-01  3.614000e-01  7.325000e-01  2.592000e-01  5.638000e-01  3.773000e-01  7.175000e-01  2.555000e-01  3.958000e-01 
+ 5.016000e-01  1.766000e-01  7.704000e-01  2.323000e-01  9.845000e-01  1.148000e-01  1.770000e+00 -4.560000e-02 -1.452000e-01  2.174300e+00  2.120000e-02 -2.570000e-02  4.619000e-01  1.186000e-01 
+ 3.840000e-02  4.844000e-01  2.104000e-01  6.335000e-01  3.165000e-01  6.526000e-01  7.100000e-03  1.721900e+00  2.400000e-02 -3.070000e-02 -3.000000e-04 -1.300000e-03  1.120000e-01  3.751000e-01 
+ 6.022000e-01  4.851000e-01  9.271000e-01  4.647000e-01  1.181800e+00  3.103000e-01  1.728700e+00  6.000000e-04  2.143800e+00 -1.692000e-01  2.100000e-02  1.706200e+00  6.078000e-01  2.020000e-01 
+ 4.198000e-01  1.360000e-01  7.111000e-01  1.498000e-01  7.691000e-01  2.240000e-01  7.126000e-01  1.501000e-01  8.195000e-01  1.747000e-01  7.925000e-01  5.360000e-02  4.255000e-01  6.960000e-02 
+ 4.734000e-01  3.226000e-01  7.321000e-01  5.214000e-01  6.302000e-01  8.344000e-01  7.167000e-01  5.399000e-01  8.025000e-01  6.486000e-01  7.317000e-01  5.186000e-01  3.959000e-01  3.324000e-01 
+ 1.976000e-01  2.874000e-01  5.407000e-01  2.456000e-01  6.124000e-01  3.106000e-01  1.765600e+00 -4.640000e-02 -8.500000e-03  1.090000e-02 -3.050000e-02  3.470000e-02  2.834000e-01  1.711000e-01 
+ 2.472000e-01  3.830000e-01  4.762000e-01  4.897000e-01  5.658000e-01  5.331000e-01  4.445000e-01  5.271000e-01  4.262000e-01  7.066000e-01  5.670000e-01  3.801000e-01  2.861000e-01  2.700000e-01 
+ 5.640000e-02  8.770000e-01  4.094000e-01  8.304000e-01  4.598000e-01  9.081000e-01  1.685500e+00  5.740000e-02 -1.160000e-02  2.014600e+00  3.930000e-02 -4.600000e-02  2.180000e-01  5.141000e-01 
+ 5.933000e-01  5.124000e-01  3.009000e-01  4.766000e-01  2.757000e-01  3.484000e-01  2.430000e-01  5.403000e-01  2.414000e-01  3.768000e-01  3.809000e-01  3.783000e-01  2.467000e-01  2.736000e-01 
+ 4.738000e-01  1.604000e-01  6.897000e-01  3.143000e-01  7.454000e-01  4.065000e-01  7.160000e-01  2.829000e-01  7.983000e-01  3.611000e-01  6.483000e-01  3.632000e-01  4.115000e-01  1.662000e-01 
+ 3.263000e-01  2.228000e-01  5.195000e-01  3.371000e-01  6.499000e-01  3.145000e-01  6.013000e-01  2.391000e-01  5.882000e-01  3.997000e-01  4.504000e-01  4.183000e-01  2.802000e-01  2.177000e-01 
+ 2.952000e-01  3.011000e-01  3.907000e-01  5.610000e-01  5.623000e-01  4.951000e-01  3.930000e-01  5.548000e-01  5.071000e-01  5.777000e-01  3.762000e-01  5.773000e-01  2.368000e-01  3.101000e-01 
+ 8.571000e-01  2.373000e-01  3.476000e-01  9.596000e-01  2.949000e-01  6.430000e-01  3.605000e-01  9.372000e-01  2.396000e-01  6.787000e-01  4.688000e-01  8.115000e-01  2.814000e-01  4.219000e-01 
+-8.300000e-02  7.175000e-01  2.840000e-02  8.961000e-01  4.980000e-02  1.014500e+00 -5.960000e-02  1.804600e+00 -2.070000e-02  2.025200e+00  1.300000e-03 -1.400000e-03  2.410000e-02  5.176000e-01 
+ 4.093000e-01  4.796000e-01  7.052000e-01  4.992000e-01  8.137000e-01  5.116000e-01  1.559200e+00  2.063000e-01 -9.400000e-03  2.012900e+00 -4.380000e-02  5.310000e-02  3.694000e-01  3.477000e-01 
+-4.070000e-02  3.429000e-01  1.610000e-01  4.522000e-01  3.372000e-01  3.839000e-01 -1.471000e-01  1.905600e+00  2.170000e-02 -2.650000e-02  1.330000e-02 -1.820000e-02  1.011000e-01  2.359000e-01 
+ 4.655000e-01  3.234000e-01  6.666000e-01  5.896000e-01  7.814000e-01  6.414000e-01  7.481000e-01  4.871000e-01  8.391000e-01  5.939000e-01  7.590000e-01  4.738000e-01  4.179000e-01  2.995000e-01 
+ 3.631000e-01  3.763000e-01  5.393000e-01  6.265000e-01  6.059000e-01  7.227000e-01  5.750000e-01  5.816000e-01  5.516000e-01  8.031000e-01  5.457000e-01  6.142000e-01  3.099000e-01  3.612000e-01 
+ 4.637000e-01  4.033000e-01  7.539000e-01  5.969000e-01  7.829000e-01  7.668000e-01  6.929000e-01  6.707000e-01  9.046000e-01  6.521000e-01  7.372000e-01  6.145000e-01  4.322000e-01  3.487000e-01 
+ 1.090400e+00  1.660000e-02  6.835000e-01  4.016000e-01  5.539000e-01  2.774000e-01  6.936000e-01  3.948000e-01  5.649000e-01  2.433000e-01  7.215000e-01  3.609000e-01  4.784000e-01  1.675000e-01 
+ 1.758000e-01  4.663000e-01  4.616000e-01  5.046000e-01  5.843000e-01  4.959000e-01  1.676900e+00  5.550000e-02  1.330000e-02  1.984500e+00  2.270000e-02 -2.750000e-02  2.619000e-01  2.967000e-01 
+ 1.214600e+00 -1.319000e-01  5.935000e-01  5.697000e-01  5.128000e-01  3.593000e-01  5.345000e-01  6.402000e-01  4.997000e-01  3.476000e-01  5.162000e-01  6.670000e-01  4.160000e-01  2.552000e-01 
+ 1.620000e-02 -1.880000e-02  2.976000e-01  1.450000e-02  4.584000e-01 -3.510000e-02 -5.870000e-02  6.980000e-02  9.900000e-03 -9.800000e-03 -5.190000e-02  6.120000e-02  1.608000e-01  6.200000e-03 
+ 9.487000e-01  1.556000e-01  4.250000e-01  9.013000e-01  2.160000e-01  7.500000e-01  5.109000e-01  8.025000e-01  3.473000e-01  5.742000e-01  4.527000e-01  8.721000e-01  2.995000e-01  4.109000e-01 
+ 4.073000e-01  6.996000e-01  6.978000e-01  8.732000e-01  8.389000e-01  8.391000e-01  1.652000e+00  9.270000e-02 -9.850000e-02  2.120300e+00  4.640000e-02  1.671500e+00  4.081000e-01  4.970000e-01 
+ 1.179000e-01  3.772000e-01  1.543000e-01  6.233000e-01  2.983000e-01  5.636000e-01  2.670000e-01  4.901000e-01  2.800000e-01  6.010000e-01  1.791000e-01  5.917000e-01  1.150000e-01  3.288000e-01 
+ 3.808000e-01  3.059000e-01  7.125000e-01  2.866000e-01  8.360000e-01  2.762000e-01  1.762600e+00 -4.020000e-02 -1.060000e-02  2.014400e+00 -2.190000e-02  2.570000e-02  3.894000e-01  1.950000e-01 
+ 1.100700e+00  6.400000e-03  6.214000e-01  1.107200e+00  5.279000e-01  5.033000e-01  6.244000e-01  1.102300e+00  4.872000e-01  5.243000e-01  4.857000e-01  1.269100e+00  4.358000e-01  3.183000e-01 
+ 4.452000e-01  4.062000e-01  7.953000e-01  5.247000e-01  7.304000e-01  8.046000e-01  7.100000e-01  6.177000e-01  8.594000e-01  6.745000e-01  7.237000e-01  6.055000e-01  4.072000e-01  3.626000e-01 
+-3.360000e-02  7.815000e-01  3.460000e-01  6.911000e-01  3.249000e-01  8.536000e-01 -7.280000e-02  1.825300e+00  1.340000e-02  1.986900e+00  1.620000e-02 -2.070000e-02  1.240000e-01  4.968000e-01 
+ 4.713000e-01  4.386000e-01  7.293000e-01  6.936000e-01  7.792000e-01  8.545000e-01  6.979000e-01  7.343000e-01  8.918000e-01  7.419000e-01  6.975000e-01  7.380000e-01  4.071000e-01  4.185000e-01 
+ 4.175000e-01  3.384000e-01  7.303000e-01  4.443000e-01  7.458000e-01  6.023000e-01  6.859000e-01  4.919000e-01  8.668000e-01  4.794000e-01  7.331000e-01  4.360000e-01  4.239000e-01  2.520000e-01 
+ 5.340000e-02  9.828000e-01  2.123000e-01  1.128600e+00  2.351000e-01  1.247100e+00 -7.900000e-02  1.824500e+00 -3.620000e-02  2.039300e+00 -1.320000e-02  1.450000e-02  8.350000e-02  7.143000e-01 
+ 3.388000e-01  3.895000e-01  4.675000e-01  6.855000e-01  4.922000e-01  8.274000e-01  5.061000e-01  6.373000e-01  6.460000e-01  6.687000e-01  4.679000e-01  6.876000e-01  2.774000e-01  3.879000e-01 
+ 3.247000e-01  5.262000e-01  6.185000e-01  5.524000e-01  7.928000e-01  4.811000e-01  1.705800e+00  3.450000e-02 -1.000000e-04  1.999800e+00 -2.430000e-02  2.690000e-02  3.642000e-01  3.209000e-01 
+ 4.667000e-01  2.944000e-01  8.114000e-01  3.655000e-01  8.536000e-01  4.975000e-01  7.835000e-01  3.983000e-01  9.240000e-01  4.428000e-01  7.512000e-01  4.366000e-01  4.402000e-01  2.459000e-01 
+ 1.345000e-01  6.435000e-01  3.909000e-01  7.931000e-01  5.475000e-01  7.823000e-01  3.952000e-01  7.846000e-01  3.832000e-01  9.931000e-01  3.469000e-01  8.406000e-01  2.234000e-01  4.592000e-01 
+ 1.940000e-01  4.096000e-01  2.225000e-01  7.397000e-01  2.921000e-01  7.992000e-01  3.331000e-01  6.114000e-01  3.428000e-01  7.537000e-01  2.425000e-01  7.173000e-01  1.560000e-01  3.954000e-01 
+ 5.959000e-01  1.939000e-01  9.863000e-01  2.432000e-01  1.230900e+00  1.453000e-01  1.001400e+00  2.181000e-01  1.243900e+00  1.572000e-01  9.501000e-01  2.823000e-01  5.876000e-01  1.168000e-01 
+ 3.336000e-01  3.599000e-01  5.074000e-01  5.793000e-01  6.561000e-01  5.657000e-01  6.266000e-01  4.343000e-01  6.604000e-01  5.796000e-01  6.106000e-01  4.549000e-01  3.467000e-01  2.701000e-01 
+ 4.059000e-01  3.798000e-01  7.394000e-01  3.555000e-01  8.615000e-01  3.500000e-01  1.760300e+00 -3.010000e-02 -1.800000e-02  2.019900e+00 -1.730000e-02  2.140000e-02  4.065000e-01  2.399000e-01 
+ 3.310000e-01  6.894000e-01  7.105000e-01  6.104000e-01  8.226000e-01  6.172000e-01  1.725000e+00  9.400000e-03  1.055000e-01  1.875200e+00  3.200000e-03 -3.000000e-03  4.023000e-01  3.763000e-01 
+ 7.199000e-01  3.784000e-01  2.954000e-01  7.870000e-01  2.970000e-01  5.207000e-01  2.539000e-01  8.341000e-01  2.433000e-01  5.660000e-01  3.386000e-01  7.365000e-01  2.611000e-01  3.805000e-01 
+ 3.351000e-01  4.388000e-01  4.206000e-01  8.098000e-01  5.920000e-01  7.924000e-01  4.709000e-01  7.497000e-01  6.010000e-01  8.065000e-01  4.283000e-01  8.027000e-01  2.862000e-01  4.179000e-01 
+ 2.682000e-01  2.294000e-01  5.970000e-01  1.434000e-01  7.460000e-01  8.930000e-02  5.686000e-01  1.835000e-01  6.593000e-01  2.042000e-01  6.265000e-01  1.115000e-01  3.488000e-01  8.000000e-02 
+ 1.968000e-01  5.983000e-01  4.334000e-01  6.884000e-01  6.950000e-01  5.214000e-01  1.668500e+00  7.710000e-02 -1.500000e-02  2.017100e+00 -9.400000e-03  1.200000e-02  2.899000e-01  3.599000e-01 
+ 2.743000e-01  2.707000e-01  5.182000e-01  3.226000e-01  6.576000e-01  2.817000e-01  4.334000e-01  4.222000e-01  5.786000e-01  3.969000e-01  5.792000e-01  2.490000e-01  3.026000e-01  1.813000e-01 
+ 1.044000e-01  8.482000e-01  2.786000e-01  1.196100e+00  3.187000e-01  1.361100e+00  2.881000e-01  1.186100e+00  2.551000e-01  1.462000e+00  2.166000e-01  1.271600e+00  1.215000e-01  7.374000e-01 
+ 7.940000e-02  7.657000e-01  3.944000e-01  7.673000e-01  4.722000e-01  8.130000e-01  1.623500e+00  1.296000e-01  1.566000e-01  1.815600e+00  8.910000e-02 -1.058000e-01  2.025000e-01  4.817000e-01 
+ 5.802000e-01  5.219000e-01  2.736000e-01  3.596000e-01  3.377000e-01  1.663000e-01  3.450000e-01  2.768000e-01  2.607000e-01  2.504000e-01  2.996000e-01  3.324000e-01  2.310000e-01  2.168000e-01 
+ 3.435000e-01  7.501000e-01  1.504000e-01  4.932000e-01  6.410000e-02  4.826000e-01  2.269000e-01  4.038000e-01  1.557000e-01  3.627000e-01  6.050000e-02  6.040000e-01  1.334000e-01  3.200000e-01 
+ 2.296000e-01  8.800000e-02  3.187000e-01  1.855000e-01  3.660000e-01  2.098000e-01  2.541000e-01  2.652000e-01  3.659000e-01  2.184000e-01  1.360000e-01  4.045000e-01  1.647000e-01  1.304000e-01 
+ 3.472000e-01  5.533000e-01  7.213000e-01  6.622000e-01  7.495000e-01  8.366000e-01  6.911000e-01  7.010000e-01  7.428000e-01  8.703000e-01  6.704000e-01  7.270000e-01  3.956000e-01  4.075000e-01 
+ 1.127300e+00 -2.910000e-02  5.484000e-01  3.926000e-01  4.000000e-01  3.540000e-01  4.938000e-01  4.571000e-01  3.574000e-01  3.831000e-01  3.600000e-01  6.188000e-01  3.658000e-01  2.323000e-01 
+ 3.116000e-01  2.006000e-01  6.378000e-01  1.844000e-01  8.251000e-01  1.021000e-01  1.731600e+00 -2.000000e-03 -5.400000e-03  5.500000e-03  6.160000e-02 -7.480000e-02  3.810000e-01  8.600000e-02 
+ 5.224000e-01  9.700000e-03  7.253000e-01  1.418000e-01  8.516000e-01  1.318000e-01  1.666600e+00  7.340000e-02  1.910000e-02 -1.910000e-02 -1.140000e-02  1.270000e-02  4.417000e-01  5.310000e-02 
+ 5.163000e-01  2.570000e-01  7.918000e-01  4.214000e-01  9.877000e-01  3.764000e-01  8.280000e-01  3.769000e-01  9.526000e-01  4.407000e-01  8.246000e-01  3.858000e-01  4.710000e-01  2.260000e-01 
+ 5.571000e-01  5.544000e-01  2.239000e-01  9.428000e-01  2.880000e-01  5.743000e-01  3.653000e-01  7.806000e-01  2.938000e-01  5.459000e-01  3.241000e-01  8.265000e-01  2.381000e-01  4.292000e-01 
+ 2.273000e-01  4.148000e-01  3.511000e-01  6.521000e-01  3.822000e-01  7.671000e-01  4.646000e-01  5.182000e-01  4.037000e-01  7.567000e-01  3.498000e-01  6.586000e-01  2.074000e-01  3.724000e-01 
+ 4.839000e-01  4.570000e-02  1.840000e-01  1.079000e-01  2.019000e-01  4.250000e-02  3.259000e-01 -6.090000e-02  2.704000e-01 -4.380000e-02  2.482000e-01  3.690000e-02  2.045000e-01  1.880000e-02 
+ 1.147700e+00 -5.040000e-02  1.158300e+00  1.214000e-01  9.293000e-01 -1.200000e-02  1.340100e+00 -9.310000e-02  8.479000e-01  5.720000e-02  1.220500e+00  5.150000e-02  6.836000e-01  1.350000e-02 
+ 6.989000e-01  3.994000e-01  1.083100e+00  3.312000e-01  1.074000e+00  4.911000e-01  1.831800e+00 -1.164000e-01  2.058700e+00 -6.400000e-02  3.980000e-02  1.682900e+00  5.699000e-01  2.715000e-01 
+ 3.769000e-01  4.515000e-01  1.789000e-01  1.933000e-01  1.166000e-01  2.087000e-01  1.752000e-01  1.987000e-01  1.617000e-01  1.490000e-01  1.450000e-01  2.362000e-01  1.476000e-01  1.407000e-01 
+ 4.429000e-01  2.770000e-01  6.559000e-01  4.770000e-01  7.533000e-01  5.333000e-01  6.636000e-01  4.679000e-01  9.272000e-01  3.484000e-01  6.942000e-01  4.315000e-01  4.358000e-01  2.080000e-01 
+ 2.678000e-01  5.396000e-01  5.706000e-01  5.481000e-01  7.094000e-01  5.272000e-01  1.753200e+00 -2.780000e-02  1.525000e-01  1.819500e+00 -8.100000e-03  9.300000e-03  3.374000e-01  3.192000e-01 
+ 5.565000e-01  2.985000e-01  9.732000e-01  1.751000e-01  1.013600e+00  2.741000e-01  1.663900e+00  7.960000e-02  1.972300e+00  3.250000e-02 -3.070000e-02  3.620000e-02  5.264000e-01  1.595000e-01 
+ 7.532000e-01  3.612000e-01  3.635000e-01  1.018900e+00  3.685000e-01  5.868000e-01  3.342000e-01  1.066600e+00  2.891000e-01  6.552000e-01  3.743000e-01  1.018400e+00  2.811000e-01  4.401000e-01 
+ 1.108600e+00 -5.300000e-03  4.635000e-01  1.283100e+00  4.084000e-01  1.442300e+00  4.793000e-01  1.265200e+00  4.490000e-01  1.193800e+00  6.262000e-01  1.087300e+00  3.890000e-01  5.791000e-01 
+ 4.608000e-01  2.314000e-01  8.328000e-01  2.275000e-01  8.639000e-01  3.633000e-01  8.046000e-01  2.602000e-01  8.485000e-01  3.997000e-01  7.342000e-01  3.473000e-01  4.069000e-01  2.202000e-01 
+ 4.410000e-02  5.566000e-01  2.636000e-01  6.394000e-01  3.755000e-01  6.360000e-01  2.398000e-01  6.638000e-01  2.537000e-01  7.974000e-01  2.936000e-01  6.030000e-01  1.496000e-01  3.718000e-01 
+ 5.005000e-01  3.034000e-01  7.548000e-01  5.121000e-01  1.041600e+00  3.657000e-01  8.597000e-01  3.826000e-01  1.028000e+00  4.066000e-01  7.794000e-01  4.771000e-01  4.800000e-01  2.417000e-01 
+ 3.198000e-01  7.901000e-01  1.934000e-01  7.084000e-01  1.126000e-01  6.119000e-01  1.950000e-01  7.055000e-01  1.826000e-01  5.124000e-01  2.665000e-01  6.217000e-01  1.639000e-01  4.130000e-01 
+ 5.197000e-01  2.097000e-01  8.513000e-01  1.889000e-01  9.604000e-01  2.034000e-01  1.725800e+00  3.100000e-03 -2.900000e-02  2.034500e+00 -4.180000e-02  4.840000e-02  4.906000e-01  1.207000e-01 
+ 2.273000e-01  7.301000e-01  3.601000e-01  1.140200e+00  3.853000e-01  1.328900e+00  3.072000e-01  1.205700e+00  4.551000e-01  1.270000e+00  3.043000e-01  1.206400e+00  2.025000e-01  6.645000e-01 
+-4.580000e-02  5.081000e-01 -4.810000e-02  8.260000e-01 -1.860000e-02  9.120000e-01  4.690000e-02  1.675900e+00 -5.220000e-02  6.230000e-02 -4.100000e-03  6.400000e-03  2.600000e-03  4.344000e-01 
+ 1.116200e+00 -1.530000e-02  5.599000e-01  5.398000e-01  3.945000e-01  4.545000e-01  5.338000e-01  5.660000e-01  4.524000e-01  3.615000e-01  5.239000e-01  5.846000e-01  3.863000e-01  2.650000e-01 
+ 6.918000e-01  3.518000e-01  1.041500e+00  3.028000e-01  1.083500e+00  3.950000e-01  1.622800e+00  1.234000e-01  2.023100e+00 -2.900000e-02  6.140000e-02 -7.670000e-02  6.017000e-01  1.932000e-01 
+ 7.017000e-01  3.974000e-01  1.022200e+00  5.651000e-01  1.199500e+00  5.025000e-01  1.701000e+00  3.670000e-02  2.096700e+00 -1.106000e-01  6.400000e-03  1.724200e+00  5.794000e-01  3.400000e-01 
+ 3.025000e-01  4.500000e-01  6.046000e-01  4.666000e-01  7.225000e-01  4.639000e-01  1.802600e+00 -8.280000e-02 -4.240000e-02  2.049500e+00 -3.420000e-02  4.300000e-02  3.911000e-01  2.265000e-01 
+ 2.405000e-01  4.124000e-01  3.764000e-01  6.427000e-01  4.999000e-01  6.475000e-01  4.117000e-01  5.978000e-01  4.728000e-01  6.944000e-01  4.349000e-01  5.751000e-01  2.347000e-01  3.495000e-01 
+ 3.042000e-01  4.975000e-01  5.813000e-01  5.410000e-01  5.880000e-01  6.772000e-01  1.773000e+00 -4.970000e-02  4.010000e-02  1.949800e+00  5.640000e-02 -6.680000e-02  3.048000e-01  3.605000e-01 
+ 5.140000e-02  6.044000e-01  1.610000e-01  8.481000e-01  1.999000e-01  9.469000e-01  1.133000e-01  9.042000e-01  1.455000e-01  1.025900e+00  1.506000e-01  8.629000e-01  8.570000e-02  4.987000e-01 
+ 7.159000e-01  3.887000e-01  3.221000e-01  2.428000e-01  3.203000e-01  1.404000e-01  3.725000e-01  1.797000e-01  2.981000e-01  1.584000e-01  2.153000e-01  3.692000e-01  2.653000e-01  1.412000e-01 
+ 1.038500e+00  8.070000e-02  6.368000e-01  2.733000e-01  5.443000e-01  1.728000e-01  5.774000e-01  3.499000e-01  5.029000e-01  2.067000e-01  6.043000e-01  3.120000e-01  4.286000e-01  1.561000e-01 
+ 3.442000e-01  6.581000e-01  6.663000e-01  8.721000e-01  5.898000e-01  1.199100e+00  6.507000e-01  8.913000e-01  5.997000e-01  1.210200e+00  5.873000e-01  9.664000e-01  3.414000e-01  5.564000e-01 
+ 4.650000e-02  1.068000e+00  1.044000e-01  4.719000e-01  1.267000e-01  3.475000e-01  2.050000e-02  5.726000e-01  7.500000e-03  4.792000e-01  5.820000e-02  5.241000e-01  4.720000e-02  3.740000e-01 
+ 5.320000e-02  3.194000e-01  1.602000e-01  4.124000e-01  1.449000e-01  5.132000e-01  1.762000e-01  3.928000e-01  2.111000e-01  4.435000e-01  1.781000e-01  3.896000e-01  1.014000e-01  2.271000e-01 
+ 1.134400e+00 -3.280000e-02  3.935000e-01  4.392000e-01  3.808000e-01  2.835000e-01  4.294000e-01  3.987000e-01  3.470000e-01  3.056000e-01  3.493000e-01  4.929000e-01  3.117000e-01  2.354000e-01 
+ 3.821000e-01  6.817000e-01  6.292000e-01  7.613000e-01  8.703000e-01  6.141000e-01  1.673400e+00  6.200000e-02  5.200000e-03  1.990900e+00 -8.500000e-02  1.832600e+00  4.190000e-01  3.872000e-01 
+ 3.013000e-01  6.641000e-01  5.217000e-01  9.826000e-01  5.665000e-01  1.154200e+00  6.320000e-01  8.539000e-01  7.991000e-01  9.070000e-01  5.886000e-01  9.031000e-01  3.344000e-01  5.291000e-01 
+ 1.506000e-01  7.948000e-01  1.765000e-01  1.315600e+00  2.341000e-01  1.461900e+00  2.085000e-01  1.275200e+00  2.402000e-01  1.474500e+00  1.973000e-01  1.294000e+00  1.203000e-01  7.379000e-01 
+ 3.685000e-01  6.324000e-01  7.840000e-01  5.156000e-01  8.288000e-01  6.059000e-01  1.723100e+00  1.340000e-02 -3.700000e-02  2.044700e+00 -1.219000e-01  1.448000e-01  4.090000e-01  3.624000e-01 
+ 4.675000e-01  3.226000e-01  7.764000e-01  4.498000e-01  8.159000e-01  5.908000e-01  6.720000e-01  5.726000e-01  8.785000e-01  5.377000e-01  5.608000e-01  7.012000e-01  4.061000e-01  3.096000e-01 
+ 1.032100e+00  8.920000e-02  7.001000e-01  1.020800e+00  4.296000e-01  1.249300e+00  5.637000e-01  1.175500e+00  5.356000e-01  1.006600e+00  5.957000e-01  1.141200e+00  4.473000e-01  5.009000e-01 
+ 3.537000e-01  3.750000e-01  5.846000e-01  5.609000e-01  6.021000e-01  7.155000e-01  5.300000e-01  6.204000e-01  6.224000e-01  7.085000e-01  5.285000e-01  6.264000e-01  3.126000e-01  3.522000e-01 
+ 1.028400e+00  5.230000e-02  3.442000e-01  1.396500e+00  2.839000e-01  1.006800e+00  3.878000e-01  1.345500e+00  4.144000e-01  8.010000e-01  3.794000e-01  1.354100e+00  2.956000e-01  5.589000e-01 
+ 1.255500e+00 -1.783000e-01  9.172000e-01  1.170000e-02  6.671000e-01  7.930000e-02  8.712000e-01  6.710000e-02  6.812000e-01  4.210000e-02  9.521000e-01 -2.890000e-02  5.712000e-01  2.040000e-02 
+ 3.895000e-01  2.033000e-01  5.606000e-01  3.758000e-01  7.402000e-01  3.101000e-01  5.242000e-01  4.181000e-01  7.393000e-01  3.271000e-01  5.231000e-01  4.183000e-01  3.386000e-01  1.988000e-01 
+ 3.526000e-01  7.464000e-01  6.101000e-01  9.113000e-01  7.630000e-01  8.749000e-01  1.689900e+00  4.920000e-02  1.480000e-02  1.983400e+00 -1.200000e-02  1.745600e+00  3.587000e-01  5.248000e-01 
+-1.300000e-03  6.041000e-01  4.347000e-01  4.496000e-01  4.004000e-01  6.332000e-01  2.100000e-03  1.727800e+00 -8.340000e-02  2.097300e+00  1.580000e-02 -1.760000e-02  1.446000e-01  3.869000e-01 
+ 3.791000e-01  2.530000e-01  8.544000e-01  6.310000e-02  8.729000e-01  1.838000e-01  1.780600e+00 -5.310000e-02  7.710000e-02  1.912700e+00 -3.610000e-02  4.320000e-02  4.118000e-01  1.349000e-01 
+ 1.102700e+00  1.900000e-03  4.964000e-01  5.009000e-01  3.975000e-01  3.810000e-01  5.711000e-01  4.126000e-01  3.578000e-01  4.157000e-01  6.194000e-01  3.533000e-01  3.989000e-01  2.126000e-01 
+ 3.882000e-01  4.172000e-01  6.311000e-01  6.264000e-01  8.014000e-01  6.151000e-01  7.290000e-01  5.097000e-01  8.256000e-01  6.037000e-01  7.664000e-01  4.626000e-01  4.112000e-01  3.055000e-01 
+ 1.168300e+00 -7.610000e-02  5.486000e-01  1.192800e+00  5.699000e-01  4.532000e-01  5.990000e-01  1.130500e+00  4.773000e-01  5.330000e-01  5.430000e-01  1.196900e+00  4.272000e-01  3.263000e-01 
+ 1.946000e-01  8.463000e-01  3.935000e-01  9.886000e-01  5.201000e-01  9.817000e-01  1.797000e+00 -7.150000e-02 -9.460000e-02  2.110900e+00  3.840000e-02  1.683800e+00  2.347000e-01  5.724000e-01 
+ 2.387000e-01  5.287000e-01  5.081000e-01  5.803000e-01  6.225000e-01  5.861000e-01  1.602700e+00  1.486000e-01 -3.100000e-03  2.002900e+00 -3.110000e-02  3.750000e-02  2.908000e-01  3.475000e-01 
+ 3.340000e-02  8.543000e-01  9.320000e-02  1.295600e+00  1.707000e-01  1.390800e+00  3.800000e-02  1.361300e+00  1.285000e-01  1.471100e+00  7.590000e-02  1.317000e+00  5.550000e-02  7.455000e-01 
+ 2.603000e-01  6.276000e-01  6.728000e-01  5.071000e-01  7.549000e-01  5.508000e-01  1.824600e+00 -1.058000e-01 -1.900000e-02  2.019000e+00 -7.000000e-04  4.000000e-04  3.338000e-01  3.718000e-01 
+ 5.957000e-01  4.387000e-01  8.091000e-01  8.394000e-01  9.161000e-01  9.635000e-01  7.718000e-01  8.814000e-01  1.003700e+00  8.898000e-01  7.043000e-01  9.604000e-01  4.712000e-01  4.792000e-01 
+ 1.171000e+00 -7.670000e-02  5.022000e-01  3.121000e-01  4.242000e-01  2.324000e-01  4.959000e-01  3.193000e-01  4.355000e-01  2.043000e-01  5.301000e-01  2.812000e-01  3.576000e-01  1.846000e-01 
+ 1.121500e+00 -2.200000e-02  5.811000e-01  1.162100e+00  5.564000e-01  5.510000e-01  6.498000e-01  1.077300e+00  4.685000e-01  6.165000e-01  5.802000e-01  1.157100e+00  4.429000e-01  3.451000e-01 
+ 1.084900e+00  2.450000e-02  3.846000e-01  1.362700e+00  4.707000e-01  7.384000e-01  4.256000e-01  1.313500e+00  4.017000e-01  7.778000e-01  4.385000e-01  1.299300e+00  3.552000e-01  4.773000e-01 
+ 1.153600e+00 -5.470000e-02  4.680000e-01  3.564000e-01  3.592000e-01  3.113000e-01  3.693000e-01  4.764000e-01  3.756000e-01  2.744000e-01  4.279000e-01  4.029000e-01  3.265000e-01  2.203000e-01 
+ 3.748000e-01  2.994000e-01  6.536000e-01  3.408000e-01  8.457000e-01  2.527000e-01  1.739800e+00 -9.200000e-03 -6.410000e-02  2.075800e+00  3.580000e-02 -4.420000e-02  4.033000e-01  1.715000e-01 
+ 4.363000e-01  6.118000e-01  7.460000e-01  6.139000e-01  8.352000e-01  6.512000e-01  1.741400e+00 -1.040000e-02 -3.700000e-02  2.039400e+00  4.330000e-02 -5.150000e-02  4.164000e-01  3.860000e-01 
+ 1.798000e-01  2.871000e-01  3.085000e-01  4.197000e-01  3.603000e-01  4.645000e-01  2.507000e-01  4.863000e-01  3.400000e-01  5.030000e-01  3.426000e-01  3.776000e-01  1.842000e-01  2.344000e-01 
+ 6.403000e-01  5.420000e-02  1.025400e+00  6.470000e-02  1.219600e+00  9.200000e-03  9.108000e-01  1.963000e-01  1.133800e+00  1.292000e-01  9.212000e-01  1.857000e-01  5.768000e-01  5.450000e-02 
+ 4.600000e-02  8.990000e-01  1.115000e-01  1.363600e+00  1.098000e-01  1.570600e+00  1.085000e-01  1.371400e+00  2.028000e-01  1.486500e+00  4.920000e-02  1.434900e+00  6.760000e-02  7.827000e-01 
+ 3.339000e-01  7.763000e-01  7.458000e-01  7.458000e-01  7.757000e-01  8.486000e-01  1.733500e+00  7.000000e-04 -8.480000e-02  2.099900e+00 -2.780000e-02  1.761200e+00  3.877000e-01  4.879000e-01 
+ 2.704000e-01  8.443000e-01  6.167000e-01  8.324000e-01  7.813000e-01  7.781000e-01  1.633800e+00  1.169000e-01 -2.190000e-02  2.026000e+00 -8.870000e-02  1.835800e+00  3.523000e-01  4.940000e-01 
+ 3.663000e-01  5.339000e-01  4.716000e-01  9.602000e-01  5.079000e-01  1.127100e+00  5.363000e-01  8.867000e-01  5.595000e-01  1.094100e+00  5.606000e-01  8.596000e-01  3.032000e-01  5.188000e-01 
+ 6.235000e-01  1.920000e-01  1.090900e+00  1.685000e-01  1.179400e+00  2.634000e-01  1.007500e+00  2.645000e-01  1.161100e+00  3.117000e-01  1.011000e+00  2.615000e-01  5.957000e-01  1.379000e-01 
+-1.810000e-02  6.916000e-01  2.449000e-01  7.359000e-01  4.121000e-01  6.803000e-01 -6.350000e-02  1.805700e+00  7.400000e-02  1.915100e+00  2.490000e-02 -2.860000e-02  1.347000e-01  4.371000e-01 
+ 5.528000e-01  5.532000e-01  3.238000e-01  7.494000e-01  2.123000e-01  6.204000e-01  2.494000e-01  8.322000e-01  2.191000e-01  5.926000e-01  2.836000e-01  7.916000e-01  2.339000e-01  4.084000e-01 
+ 7.864000e-01 -2.360000e-02  1.092900e+00  1.320000e-01  1.351800e+00  2.660000e-02  1.164200e+00  4.800000e-02  1.409700e+00 -1.860000e-02  1.181300e+00  2.760000e-02  6.641000e-01  3.780000e-02 
+ 4.138000e-01  5.768000e-01  7.693000e-01  5.243000e-01  9.692000e-01  4.379000e-01  1.803000e+00 -8.240000e-02  6.050000e-02  1.930600e+00 -1.340000e-02  1.410000e-02  4.108000e-01  3.600000e-01 
+ 1.148100e+00 -5.410000e-02  7.842000e-01  2.590000e-01  6.844000e-01  1.110000e-01  8.148000e-01  2.220000e-01  7.089000e-01  6.410000e-02  8.862000e-01  1.437000e-01  5.566000e-01  7.150000e-02 
+ 2.915000e-01  6.952000e-01  5.862000e-01  7.160000e-01  8.323000e-01  5.673000e-01  1.671200e+00  7.010000e-02  1.290000e-02  1.985300e+00  7.770000e-02 -9.110000e-02  3.706000e-01  3.907000e-01 
+ 1.131700e+00 -3.170000e-02  9.419000e-01  7.896000e-01  7.905000e-01  4.900000e-01  9.017000e-01  8.375000e-01  7.738000e-01  4.528000e-01  9.162000e-01  8.146000e-01  5.810000e-01  2.747000e-01 
+ 3.090000e-02  9.172000e-01  3.080000e-02  1.457100e+00  1.922000e-01  1.471700e+00  4.110000e-02  1.445200e+00  1.063000e-01  1.599500e+00  7.490000e-02  1.411300e+00  2.740000e-02  8.309000e-01 
+ 6.018000e-01  2.622000e-01  8.873000e-01  2.966000e-01  1.037300e+00  2.592000e-01  1.817400e+00 -9.650000e-02  2.013200e+00 -1.730000e-02  9.150000e-02 -1.097000e-01  5.341000e-01  1.592000e-01 
+ 3.616000e-01  5.395000e-01  7.610000e-01  4.352000e-01  8.018000e-01  5.294000e-01  1.749900e+00 -2.180000e-02  6.930000e-02  1.918400e+00 -5.740000e-02  6.910000e-02  4.071000e-01  3.045000e-01 
+ 3.879000e-01  5.093000e-01  6.455000e-01  7.533000e-01  7.869000e-01  7.986000e-01  5.291000e-01  8.947000e-01  7.951000e-01  8.101000e-01  6.323000e-01  7.764000e-01  3.686000e-01  4.411000e-01 
+ 8.884000e-01  2.158000e-01  1.187600e+00  5.403000e-01  1.283500e+00  5.980000e-01  1.680100e+00  5.840000e-02  2.025300e+00 -3.460000e-02  4.970000e-02  1.670900e+00  6.889000e-01  2.914000e-01 
+ 1.108700e+00  2.100000e-03  1.015600e+00  7.153000e-01  7.320000e-01  1.086200e+00  9.141000e-01  8.361000e-01  8.051000e-01  8.140000e-01  9.557000e-01  7.831000e-01  6.136000e-01  3.523000e-01 
+ 2.780000e-02  6.130000e-02  2.001000e-01  2.144000e-01  3.815000e-01  1.446000e-01  1.435000e-01  1.563000e+00 -2.340000e-02  2.930000e-02 -1.340000e-02  1.620000e-02  1.320000e-01  8.730000e-02 
+ 1.968000e-01  8.896000e-01  4.827000e-01  9.247000e-01  6.167000e-01  9.017000e-01  1.671100e+00  6.720000e-02 -1.130000e-02  2.014000e+00  5.820000e-02  1.666900e+00  2.653000e-01  5.603000e-01 
+ 5.201000e-01  5.841000e-01  3.171000e-01  7.668000e-01  3.882000e-01  4.175000e-01  2.912000e-01  8.033000e-01  1.717000e-01  6.541000e-01  2.294000e-01  8.757000e-01  2.216000e-01  4.260000e-01 
+ 5.786000e-01  4.950000e-02  8.336000e-01  1.201000e-01  9.328000e-01  1.453000e-01  1.627900e+00  1.184000e-01  1.938700e+00  6.730000e-02  2.700000e-03 -2.800000e-03  5.267000e-01  1.920000e-02 
+ 2.881000e-01  5.880000e-01  6.085000e-01  5.808000e-01  7.821000e-01  5.208000e-01  1.687500e+00  5.650000e-02 -1.156000e-01  2.135100e+00 -2.450000e-02  2.660000e-02  3.434000e-01  3.586000e-01 
+ 3.163000e-01  4.248000e-01  6.331000e-01  4.197000e-01  7.968000e-01  3.696000e-01  1.673900e+00  6.850000e-02  4.840000e-02  1.946100e+00  1.170000e-02 -1.470000e-02  3.255000e-01  2.971000e-01 
+ 1.184100e+00 -9.100000e-02  5.882000e-01  6.830000e-01  4.091000e-01  5.274000e-01  6.264000e-01  6.381000e-01  4.739000e-01  4.277000e-01  5.825000e-01  6.909000e-01  3.942000e-01  3.051000e-01 
+ 2.379000e-01  4.085000e-01  3.863000e-01  6.242000e-01  3.834000e-01  7.741000e-01  3.794000e-01  6.333000e-01  3.210000e-01  8.707000e-01  3.651000e-01  6.482000e-01  2.093000e-01  3.762000e-01 
+ 1.124500e+00 -2.220000e-02  3.990000e-01  1.027600e+00  2.620000e-01  7.330000e-01  3.240000e-01  1.115300e+00  3.763000e-01  5.714000e-01  4.534000e-01  9.653000e-01  3.213000e-01  4.047000e-01 
+ 1.099400e+00  8.000000e-03  8.668000e-01  8.454000e-01  5.698000e-01  1.414000e+00  6.727000e-01  1.078300e+00  5.144000e-01  1.395700e+00  6.686000e-01  1.077000e+00  5.120000e-01  4.853000e-01 
+ 3.698000e-01  1.077000e-01  5.224000e-01  2.341000e-01  5.438000e-01  3.333000e-01  5.149000e-01  2.459000e-01  5.892000e-01  2.902000e-01  5.628000e-01  1.885000e-01  3.137000e-01  1.224000e-01 
+ 1.164700e+00 -6.970000e-02  3.553000e-01  1.395300e+00  3.349000e-01  1.135600e+00  4.702000e-01  1.253800e+00  3.487000e-01  1.043500e+00  4.655000e-01  1.262100e+00  3.359000e-01  5.706000e-01 
+ 3.183000e-01  3.051000e-01  7.323000e-01  2.050000e-01  6.892000e-01  4.029000e-01  4.636000e-01  5.233000e-01  6.157000e-01  5.086000e-01  5.282000e-01  4.456000e-01  3.188000e-01  2.398000e-01 
+ 3.521000e-01  3.844000e-01  5.984000e-01  5.504000e-01  6.438000e-01  6.688000e-01  6.586000e-01  4.784000e-01  6.964000e-01  6.264000e-01  5.053000e-01  6.583000e-01  3.198000e-01  3.473000e-01 
+ 5.951000e-01  4.877000e-01  8.186000e-01  8.973000e-01  8.961000e-01  1.057700e+00  6.305000e-01  1.118100e+00  8.322000e-01  1.168700e+00  7.579000e-01  9.702000e-01  4.368000e-01  5.585000e-01 
+ 3.389000e-01 -2.500000e-03  6.462000e-01  1.600000e-03  8.299000e-01 -7.180000e-02  1.751500e+00 -2.660000e-02  6.930000e-02 -8.170000e-02 -3.820000e-02  4.560000e-02  3.626000e-01  1.000000e-03 
+ 5.361000e-01  6.900000e-03  8.957000e-01 -5.900000e-02  8.035000e-01  1.913000e-01  6.853000e-01  1.933000e-01  8.260000e-01  1.836000e-01  8.115000e-01  4.050000e-02  4.454000e-01  5.170000e-02 
+ 1.890000e-02  9.513000e-01  1.228000e-01  1.177100e+00  3.517000e-01  1.045600e+00  6.800000e-03  1.724800e+00 -4.210000e-02  2.044000e+00  6.100000e-03 -7.700000e-03  1.020000e-01  6.578000e-01 
+ 9.760000e-02  1.367000e-01  1.787000e-01  1.816000e-01  9.870000e-02  3.317000e-01  7.080000e-02  3.092000e-01  1.655000e-01  2.588000e-01  1.027000e-01  2.720000e-01  6.920000e-02  1.454000e-01 
+ 8.847000e-01 -4.760000e-02  1.263500e+00  7.040000e-02  1.474600e+00  3.880000e-02  1.329900e+00 -7.300000e-03  1.572400e+00 -5.190000e-02  1.251700e+00  8.340000e-02  7.533000e-01  1.260000e-02 
+ 4.102000e-01  6.910000e-01  7.255000e-01  8.216000e-01  8.329000e-01  8.367000e-01  1.705600e+00  3.830000e-02  6.300000e-02  1.926100e+00 -7.250000e-02  1.816300e+00  3.804000e-01  5.212000e-01 
+ 1.200200e+00 -1.123000e-01  7.355000e-01  6.722000e-01  6.381000e-01  3.311000e-01  7.752000e-01  6.237000e-01  5.633000e-01  3.925000e-01  7.433000e-01  6.622000e-01  5.182000e-01  2.040000e-01 
+ 1.303000e-01  5.144000e-01  2.051000e-01  8.057000e-01  2.318000e-01  9.195000e-01  1.189000e-01  9.103000e-01  2.451000e-01  9.204000e-01  6.870000e-02  9.648000e-01  9.940000e-02  4.873000e-01 
+-1.940000e-02  1.128400e+00  9.260000e-02  8.642000e-01 -7.870000e-02  8.619000e-01  1.940000e-02  9.523000e-01 -3.220000e-02  7.856000e-01  1.277000e-01  8.247000e-01  2.400000e-03  6.047000e-01 
+ 4.836000e-01  3.774000e-01  8.733000e-01  2.825000e-01  9.310000e-01  3.550000e-01  1.847400e+00 -1.350000e-01 -6.380000e-02  2.077500e+00 -3.200000e-03  5.300000e-03  4.776000e-01  2.108000e-01 
+ 3.880000e-01  7.093000e-01  2.357000e-01  1.496200e+00  1.546000e-01  1.279100e+00  2.154000e-01  1.517400e+00  1.865000e-01  1.174800e+00  2.110000e-01  1.518400e+00  1.589000e-01  7.401000e-01 
+ 9.033000e-01  1.708000e-01  1.453700e+00  2.186000e-01  1.625800e+00  2.814000e-01  1.394600e+00  2.859000e-01  1.638100e+00  3.015000e-01  1.507100e+00  1.582000e-01  8.207000e-01  1.479000e-01 
+ 7.640000e-02  9.569000e-01  1.070000e-02  1.348700e+00 -2.890000e-02  1.525800e+00 -6.690000e-02  1.814900e+00  5.600000e-02  1.930900e+00 -7.500000e-03  8.600000e-03  1.070000e-02  7.913000e-01 
+ 6.920000e-01  1.085000e-01  1.126700e+00  1.214000e-01  1.123300e+00  3.258000e-01  9.782000e-01  2.989000e-01  1.109100e+00  3.648000e-01  9.312000e-01  3.528000e-01  5.654000e-01  1.710000e-01 
+ 1.140900e+00 -4.250000e-02  5.855000e-01  1.156300e+00  5.839000e-01  5.531000e-01  6.872000e-01  1.039200e+00  5.730000e-01  5.251000e-01  6.184000e-01  1.117100e+00  4.544000e-01  3.476000e-01 
+ 2.265000e-01  6.849000e-01  5.588000e-01  6.636000e-01  5.984000e-01  7.636000e-01  1.767000e+00 -3.880000e-02  4.490000e-02  1.949400e+00 -5.390000e-02  6.500000e-02  3.104000e-01  4.117000e-01 
+ 1.136600e+00 -3.860000e-02  7.026000e-01  6.384000e-01  4.141000e-01  5.617000e-01  6.621000e-01  6.825000e-01  6.124000e-01  3.018000e-01  7.418000e-01  5.917000e-01  4.552000e-01  2.588000e-01 
+ 1.151400e+00 -5.220000e-02  7.812000e-01  9.582000e-01  6.172000e-01  8.571000e-01  8.638000e-01  8.509000e-01  6.028000e-01  8.008000e-01  8.650000e-01  8.518000e-01  5.288000e-01  3.810000e-01 
+ 3.512000e-01  7.155000e-01  4.879000e-01  1.195400e+00  6.452000e-01  1.257600e+00  5.178000e-01  1.157700e+00  5.995000e-01  1.341400e+00  4.382000e-01  1.253600e+00  2.947000e-01  6.734000e-01 
+ 3.928000e-01  2.647000e-01  5.870000e-01  4.481000e-01  6.574000e-01  5.253000e-01  6.692000e-01  3.489000e-01  7.849000e-01  3.914000e-01  6.414000e-01  3.851000e-01  3.603000e-01  2.330000e-01 
+ 9.810000e-02  5.790000e-01  2.610000e-02  1.055300e+00  1.204000e-01  1.094800e+00  1.193000e-01  9.473000e-01  1.539000e-01  1.071500e+00  1.487000e-01  9.104000e-01  5.580000e-02  5.622000e-01 
+ 3.960000e-01  5.710000e-01  6.352000e-01  8.757000e-01  6.999000e-01  1.032200e+00  6.124000e-01  9.060000e-01  7.728000e-01  9.632000e-01  6.477000e-01  8.664000e-01  3.643000e-01  5.100000e-01 
+ 1.056200e+00  5.920000e-02  5.754000e-01  5.725000e-01  3.995000e-01  4.736000e-01  4.606000e-01  7.063000e-01  4.667000e-01  3.719000e-01  5.426000e-01  6.059000e-01  3.744000e-01  2.928000e-01 
+ 1.544000e-01  3.905000e-01  1.708000e-01  6.948000e-01  1.166000e-01  8.799000e-01  1.731000e-01  6.905000e-01  2.379000e-01  7.522000e-01  1.968000e-01  6.632000e-01  1.038000e-01  3.948000e-01 
+ 7.474000e-01  3.670000e-01  4.144000e-01  1.308300e+00  3.011000e-01  7.628000e-01  4.681000e-01  1.247800e+00  2.852000e-01  7.465000e-01  2.409000e-01  1.516200e+00  2.805000e-01  4.849000e-01 
+ 5.245000e-01  1.796000e-01  8.253000e-01  2.766000e-01  9.779000e-01  2.720000e-01  8.928000e-01  1.989000e-01  1.056100e+00  1.957000e-01  8.944000e-01  1.973000e-01  4.657000e-01  1.730000e-01 
+ 2.587000e-01  3.300000e-01  3.558000e-01  5.741000e-01  4.228000e-01  6.357000e-01  3.226000e-01  6.190000e-01  4.366000e-01  6.308000e-01  3.088000e-01  6.295000e-01  2.096000e-01  3.275000e-01 
+ 4.381000e-01  3.545000e-01  7.058000e-01  5.334000e-01  7.713000e-01  6.482000e-01  6.476000e-01  6.045000e-01  8.761000e-01  5.459000e-01  7.537000e-01  4.779000e-01  4.071000e-01  3.084000e-01 
+ 1.175000e-01  6.417000e-01  2.160000e-02  3.414000e-01 -4.500000e-03  3.157000e-01  4.350000e-02  3.126000e-01  8.800000e-02  2.014000e-01  8.650000e-02  2.635000e-01  5.010000e-02  2.254000e-01 
+ 1.150900e+00 -5.330000e-02  8.148000e-01  1.712000e-01  6.775000e-01  8.840000e-02  8.537000e-01  1.243000e-01  6.137000e-01  1.453000e-01  7.788000e-01  2.154000e-01  5.315000e-01  8.070000e-02 
+-5.630000e-02  9.848000e-01  1.351000e-01  1.084000e+00  6.650000e-02  1.297100e+00  8.910000e-02  1.623000e+00  6.430000e-02  1.925100e+00  4.000000e-04 -6.000000e-04  4.630000e-02  6.800000e-01 
+ 1.074000e+00  4.070000e-02  4.828000e-01  1.259400e+00  3.677000e-01  1.607300e+00  4.678000e-01  1.268900e+00  5.239000e-01  1.195600e+00  4.787000e-01  1.261600e+00  3.748000e-01  6.080000e-01 
+ 3.009000e-01  2.211000e-01  5.387000e-01  3.073000e-01  6.518000e-01  3.179000e-01  1.888000e+00 -1.786000e-01  1.250000e-02 -1.310000e-02  4.310000e-02 -5.170000e-02  3.051000e-01  1.811000e-01 
+ 4.833000e-01  5.855000e-01  6.725000e-01  1.015700e+00  8.943000e-01  1.002800e+00  7.816000e-01  8.851000e-01  9.070000e-01  1.016200e+00  7.665000e-01  9.063000e-01  4.491000e-01  5.144000e-01 
+ 2.202000e-01  1.536000e-01  3.610000e-01  2.209000e-01  5.806000e-01  5.000000e-02  3.611000e-01  2.241000e-01  4.184000e-01  2.550000e-01  4.442000e-01  1.251000e-01  2.334000e-01  9.850000e-02 
+ 5.666000e-01  5.338000e-01  2.767000e-01  1.301500e+00  2.398000e-01  7.728000e-01  2.772000e-01  1.298300e+00  2.390000e-01  7.463000e-01  3.174000e-01  1.256700e+00  2.205000e-01  5.236000e-01 
+ 3.376000e-01  7.419000e-01  4.848000e-01  1.221000e+00  6.335000e-01  1.291000e+00  5.921000e-01  1.088100e+00  6.010000e-01  1.356400e+00  4.958000e-01  1.201200e+00  3.003000e-01  6.781000e-01 
+ 9.463000e-01  2.020000e-02  1.380900e+00  1.522000e-01  1.676300e+00  5.780000e-02  1.385100e+00  1.532000e-01  1.648500e+00  1.135000e-01  1.339300e+00  2.017000e-01  8.296000e-01  5.060000e-02 
+ 3.907000e-01  6.294000e-01  5.879000e-01  7.718000e-01  8.172000e-01  6.377000e-01  1.697300e+00  4.520000e-02  1.263000e-01  1.845900e+00 -1.900000e-03  1.300000e-03  4.017000e-01  3.842000e-01 
+ 1.724000e-01  3.817000e-01  1.702000e-01  7.203000e-01  2.873000e-01  7.049000e-01  2.921000e-01  5.731000e-01  3.515000e-01  6.442000e-01  2.986000e-01  5.659000e-01  1.455000e-01  3.580000e-01 
+ 1.312000e-01  7.093000e-01  3.948000e-01  7.673000e-01  5.272000e-01  7.554000e-01  1.743300e+00 -1.250000e-02  2.350000e-02  1.975500e+00  2.500000e-03 -3.900000e-03  2.266000e-01  4.576000e-01 
+ 1.263000e-01  6.105000e-01  2.655000e-01  8.748000e-01  2.336000e-01  1.076800e+00  1.833000e-01  9.726000e-01  3.004000e-01  1.016500e+00  1.962000e-01  9.532000e-01  1.264000e-01  5.363000e-01 
+ 6.043000e-01  4.914000e-01  1.090000e+00  5.961000e-01  1.056900e+00  8.966000e-01  1.027900e+00  6.694000e-01  1.212700e+00  7.549000e-01  1.065400e+00  6.278000e-01  6.046000e-01  3.749000e-01 
+ 1.028400e+00  8.930000e-02  4.097000e-01  9.375000e-01  2.813000e-01  6.865000e-01  3.827000e-01  9.620000e-01  2.830000e-01  6.586000e-01  3.508000e-01  1.008600e+00  3.087000e-01  4.039000e-01 
+-1.970000e-02  7.719000e-01  4.634000e-01  5.700000e-01  5.143000e-01  6.520000e-01 -2.580000e-02  1.762600e+00 -1.730000e-02  2.023200e+00  2.500000e-02 -2.650000e-02  1.832000e-01  4.379000e-01 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/olgd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,181 @@
+function [net, options, errlog, pointlog] = olgd(net, options, x, t)
+%OLGD	On-line gradient descent optimization.
+%
+%	Description
+%	[NET, OPTIONS, ERRLOG, POINTLOG] = OLGD(NET, OPTIONS, X, T) uses  on-
+%	line gradient descent to find a local minimum of the error function
+%	for the network NET computed on the input data X and target values T.
+%	A log of the error values after each cycle is (optionally) returned
+%	in ERRLOG, and a log of the points visited is (optionally) returned
+%	in POINTLOG. Because the gradient is computed on-line (i.e. after
+%	each pattern) this can be quite inefficient in Matlab.
+%
+%	The error function value at final weight vector is returned in
+%	OPTIONS(8).
+%
+%	The optional parameters have the following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values; also logs error
+%	values in the return argument ERRLOG, and the points visited in the
+%	return argument POINTSLOG.  If OPTIONS(1) is set to 0, then only
+%	warning messages are displayed.  If OPTIONS(1) is -1, then nothing is
+%	displayed.
+%
+%	OPTIONS(2) is the precision required for the value of X at the
+%	solution. If the absolute difference between the values of X between
+%	two successive steps is less than OPTIONS(2), then this condition is
+%	satisfied.
+%
+%	OPTIONS(3) is the precision required of the objective function at the
+%	solution.  If the absolute difference between the error functions
+%	between two successive steps is less than OPTIONS(3), then this
+%	condition is satisfied. Both this and the previous condition must be
+%	satisfied for termination. Note that testing the function value at
+%	each iteration roughly halves the speed of the algorithm.
+%
+%	OPTIONS(5) determines whether the patterns are sampled randomly with
+%	replacement. If it is 0 (the default), then patterns are sampled in
+%	order.
+%
+%	OPTIONS(6) determines if the learning rate decays.  If it is 1 then
+%	the learning rate decays at a rate of 1/T.  If it is 0 (the default)
+%	then the learning rate is constant.
+%
+%	OPTIONS(9) should be set to 1 to check the user defined gradient
+%	function.
+%
+%	OPTIONS(10) returns the total number of function evaluations
+%	(including those in any line searches).
+%
+%	OPTIONS(11) returns the total number of gradient evaluations.
+%
+%	OPTIONS(14) is the maximum number of iterations (passes through the
+%	complete pattern set); default 100.
+%
+%	OPTIONS(17) is the momentum; default 0.5.
+%
+%	OPTIONS(18) is the learning rate; default 0.01.
+%
+%	See also
+%	GRADDESC
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+%  Set up the options.
+if length(options) < 18
+  error('Options vector too short')
+end
+
+if (options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+
+% Learning rate: must be positive
+if (options(18) > 0)
+  eta = options(18);
+else
+  eta = 0.01;
+end
+% Save initial learning rate for annealing
+lr = eta;
+% Momentum term: allow zero momentum
+if (options(17) >= 0)
+  mu = options(17);
+else
+  mu = 0.5;
+end
+
+pakstr = [net.type, 'pak'];
+unpakstr = [net.type, 'unpak'];
+
+% Extract initial weights from the network
+w = feval(pakstr, net);
+
+display = options(1);
+
+% Work out if we need to compute f at each iteration.
+% Needed if display results or if termination
+% criterion requires it.
+fcneval = (display | options(3));
+
+%  Check gradients
+if (options(9))
+  feval('gradchek', w, 'neterr', 'netgrad', net, x, t);
+end
+
+dwold = zeros(1, length(w));
+fold = 0; % Must be initialised so that termination test can be performed
+ndata = size(x, 1);
+
+if fcneval
+  fnew = neterr(w, net, x, t);
+  options(10) = options(10) + 1;
+  fold = fnew;
+end
+
+j = 1;
+if nargout >= 3
+  errlog(j, :) = fnew;
+  if nargout == 4
+    pointlog(j, :) = w;
+  end
+end
+
+%  Main optimization loop.
+while j <= niters
+  wold = w;
+  if options(5)
+    % Randomise order of pattern presentation: with replacement
+    pnum = ceil(rand(ndata, 1).*ndata);
+  else
+    pnum = 1:ndata;
+  end
+  for k = 1:ndata
+    grad = netgrad(w, net, x(pnum(k),:), t(pnum(k),:));
+    if options(6)
+      % Let learning rate decrease as 1/t
+      lr = eta/((j-1)*ndata + k);
+    end
+    dw = mu*dwold - lr*grad;
+    w =  w + dw;
+    dwold = dw;
+  end
+  options(11) = options(11) + 1;  % Increment gradient evaluation count
+  if fcneval
+    fold = fnew;
+    fnew = neterr(w, net, x, t);
+    options(10) = options(10) + 1;
+  end
+  if display
+    fprintf(1, 'Iteration  %5d  Error %11.8f\n', j, fnew);
+  end
+  j = j + 1;
+  if nargout >= 3
+    errlog(j) = fnew;
+    if nargout == 4
+      pointlog(j, :) = w;
+    end
+  end
+  if (max(abs(w - wold)) < options(2) & abs(fnew - fold) < options(3))
+    % Termination criteria are met
+    options(8) = fnew;
+    net = feval(unpakstr, net, w);
+    return;
+  end
+end
+
+if fcneval
+  options(8) = fnew;
+else
+  % Return error on entire dataset
+  options(8) = neterr(w, net, x, t);
+  options(10) = options(10) + 1;
+end
+if (options(1) >= 0)
+  disp(maxitmess);
+end
+
+net = feval(unpakstr, net, w);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/pca.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+function [PCcoeff, PCvec] = pca(data, N)
+%PCA	Principal Components Analysis
+%
+%	Description
+%	 PCCOEFF = PCA(DATA) computes the eigenvalues of the covariance
+%	matrix of the dataset DATA and returns them as PCCOEFF.  These
+%	coefficients give the variance of DATA along the corresponding
+%	principal components.
+%
+%	PCCOEFF = PCA(DATA, N) returns the largest N eigenvalues.
+%
+%	[PCCOEFF, PCVEC] = PCA(DATA) returns the principal components as well
+%	as the coefficients.  This is considerably more computationally
+%	demanding than just computing the eigenvalues.
+%
+%	See also
+%	EIGDEC, GTMINIT, PPCA
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+if nargin == 1
+   N = size(data, 2);
+end
+
+if nargout == 1
+   evals_only = logical(1);
+else
+   evals_only = logical(0);
+end
+
+if N ~= round(N) | N < 1 | N > size(data, 2)
+   error('Number of PCs must be integer, >0, < dim');
+end
+
+% Find the sorted eigenvalues of the data covariance matrix
+if evals_only
+   PCcoeff = eigdec(cov(data), N);
+else
+  [PCcoeff, PCvec] = eigdec(cov(data), N);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/plotmat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function plotmat(matrix, textcolour, gridcolour, fontsize)
+%PLOTMAT Display a matrix.
+%
+%	Description
+%	PLOTMAT(MATRIX, TEXTCOLOUR, GRIDCOLOUR, FONTSIZE) displays the matrix
+%	MATRIX on the current figure.  The TEXTCOLOUR and GRIDCOLOUR
+%	arguments control the colours of the numbers and grid labels
+%	respectively and should follow the usual Matlab specification. The
+%	parameter FONTSIZE should be an integer.
+%
+%	See also
+%	CONFFIG, DEMMLP2
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[m,n]=size(matrix);
+for rowCnt=1:m,
+  for colCnt=1:n,
+	numberString=num2str(matrix(rowCnt,colCnt));
+	text(colCnt-.5,m-rowCnt+.5,numberString, ...
+	  'HorizontalAlignment','center', ...
+	  'Color', textcolour, ...
+	  'FontWeight','bold', ...
+	  'FontSize', fontsize);
+  end;
+end;
+
+set(gca,'Box','on', ...
+  'Visible','on', ...
+  'xLim',[0 n], ...
+  'xGrid','on', ...
+  'xTickLabel',[], ...
+  'xTick',0:n, ...
+  'yGrid','on', ...
+  'yLim',[0 m], ...
+  'yTickLabel',[], ...
+  'yTick',0:m, ...
+  'DataAspectRatio',[1, 1, 1], ...
+  'GridLineStyle',':', ...
+  'LineWidth',3, ...
+  'XColor',gridcolour, ...
+  'YColor',gridcolour);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/ppca.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function [var, U, lambda] = ppca(x, ppca_dim)
+%PPCA	Probabilistic Principal Components Analysis
+%
+%	Description
+%	 [VAR, U, LAMBDA] = PPCA(X, PPCA_DIM) computes the principal
+%	component subspace U of dimension PPCA_DIM using a centred covariance
+%	matrix X. The variable VAR contains the off-subspace variance (which
+%	is assumed to be spherical), while the vector LAMBDA contains the
+%	variances of each of the principal components.  This is computed
+%	using the eigenvalue and eigenvector  decomposition of X.
+%
+%	See also
+%	EIGDEC, PCA
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+
+if ppca_dim ~= round(ppca_dim) | ppca_dim < 1 | ppca_dim > size(x, 2)
+   error('Number of PCs must be integer, >0, < dim');
+end
+
+[ndata, data_dim] = size(x);
+% Assumes that x is centred and responsibility weighted
+% covariance matrix
+[l Utemp] = eigdec(x, data_dim);
+% Zero any negative eigenvalues (caused by rounding)
+l(l<0) = 0;
+% Now compute the sigma squared values for all possible values
+% of q
+s2_temp = cumsum(l(end:-1:1))./[1:data_dim]';
+% If necessary, reduce the value of q so that var is at least
+% eps * largest eigenvalue
+q_temp = min([ppca_dim; data_dim-min(find(s2_temp/l(1) > eps))]);
+if q_temp ~= ppca_dim
+  wstringpart = 'Covariance matrix ill-conditioned: extracted';
+  wstring = sprintf('%s %d/%d PCs', ...
+      wstringpart, q_temp, ppca_dim);
+  warning(wstring);
+end
+if q_temp == 0
+  % All the latent dimensions have disappeared, so we are
+  % just left with the noise model
+  var = l(1)/data_dim;
+  lambda = var*ones(1, ppca_dim);
+else
+  var = mean(l(q_temp+1:end));
+end  
+U = Utemp(:, 1:q_temp);
+lambda(1:q_temp) = l(1:q_temp);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/quasinew.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,176 @@
+function [x, options, flog, pointlog] = quasinew(f, x, options, gradf, ...
+                                    varargin)
+%QUASINEW Quasi-Newton optimization.
+%
+%	Description
+%	[X, OPTIONS, FLOG, POINTLOG] = QUASINEW(F, X, OPTIONS, GRADF)  uses a
+%	quasi-Newton algorithm to find a local minimum of the function F(X)
+%	whose gradient is given by GRADF(X).  Here X is a row vector and F
+%	returns a scalar value.   The point at which F has a local minimum is
+%	returned as X.  The function value at that point is returned in
+%	OPTIONS(8). A log of the function values after each cycle is
+%	(optionally) returned in FLOG, and a log of the points visited is
+%	(optionally) returned in POINTLOG.
+%
+%	QUASINEW(F, X, OPTIONS, GRADF, P1, P2, ...) allows  additional
+%	arguments to be passed to F() and GRADF().
+%
+%	The optional parameters have the following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values; also logs error
+%	values in the return argument ERRLOG, and the points visited in the
+%	return argument POINTSLOG.  If OPTIONS(1) is set to 0, then only
+%	warning messages are displayed.  If OPTIONS(1) is -1, then nothing is
+%	displayed.
+%
+%	OPTIONS(2) is a measure of the absolute precision required for the
+%	value of X at the solution.  If the absolute difference between the
+%	values of X between two successive steps is less than OPTIONS(2),
+%	then this condition is satisfied.
+%
+%	OPTIONS(3) is a measure of the precision required of the objective
+%	function at the solution.  If the absolute difference between the
+%	objective function values between two successive steps is less than
+%	OPTIONS(3), then this condition is satisfied. Both this and the
+%	previous condition must be satisfied for termination.
+%
+%	OPTIONS(9) should be set to 1 to check the user defined gradient
+%	function.
+%
+%	OPTIONS(10) returns the total number of function evaluations
+%	(including those in any line searches).
+%
+%	OPTIONS(11) returns the total number of gradient evaluations.
+%
+%	OPTIONS(14) is the maximum number of iterations; default 100.
+%
+%	OPTIONS(15) is the precision in parameter space of the line search;
+%	default 1E-2.
+%
+%	See also
+%	CONJGRAD, GRADDESC, LINEMIN, MINBRACK, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+%  Set up the options.
+if length(options) < 18
+  error('Options vector too short')
+end
+
+if(options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+
+% Set up options for line search
+line_options = foptions;
+% Don't need a very precise line search
+if options(15) > 0
+  line_options(2) = options(15);
+else
+  line_options(2) = 1e-2;  % Default
+end
+% Minimal fractional change in f from Newton step: otherwise do a line search
+min_frac_change = 1e-4;	
+
+display = options(1);
+
+% Next two lines allow quasinew to work with expression strings
+f = fcnchk(f, length(varargin));
+gradf = fcnchk(gradf, length(varargin));
+
+% Check gradients
+if (options(9))
+  feval('gradchek', x, f, gradf, varargin{:});
+end
+
+nparams = length(x);
+fnew = feval(f, x, varargin{:});
+options(10) = options(10) + 1;
+gradnew = feval(gradf, x, varargin{:});
+options(11) = options(11) + 1;
+p = -gradnew;		% Search direction
+hessinv = eye(nparams); % Initialise inverse Hessian to be identity matrix
+j = 1;
+if nargout >= 3
+  flog(j, :) = fnew;
+  if nargout == 4
+    pointlog(j, :) = x;
+  end
+end
+
+while (j <= niters)
+
+  xold = x;
+  fold = fnew;
+  gradold = gradnew;
+
+  x = xold + p;
+  fnew = feval(f, x, varargin{:});
+  options(10) = options(10) + 1;
+
+  % This shouldn't occur, but rest of code depends on sd being downhill
+  if (gradnew*p' >= 0)
+    p = -p;
+    if options(1) >= 0
+      warning('search direction uphill in quasinew');
+    end
+  end
+
+  % Does the Newton step reduce the function value sufficiently?
+  if (fnew >= fold + min_frac_change * (gradnew*p'))
+    % No it doesn't
+    % Minimize along current search direction: must be less than Newton step
+    [lmin, line_options] = feval('linemin', f, xold, p, fold, ...
+      line_options, varargin{:});
+    options(10) = options(10) + line_options(10);
+    options(11) = options(11) + line_options(11);
+    % Correct x and fnew to be the actual search point we have found
+    x = xold + lmin * p;
+    p = x - xold;
+    fnew = line_options(8);
+  end
+
+  % Check for termination
+  if (max(abs(x - xold)) < options(2) & max(abs(fnew - fold)) < options(3))
+    options(8) = fnew;
+    return;
+  end
+  gradnew = feval(gradf, x, varargin{:});
+  options(11) = options(11) + 1;
+  v = gradnew - gradold;
+  vdotp = v*p';
+
+  % Skip update to inverse Hessian if fac not sufficiently positive
+  if (vdotp*vdotp > eps*sum(v.^2)*sum(p.^2)) 
+    Gv = (hessinv*v')';
+    vGv = sum(v.*Gv);
+    u = p./vdotp - Gv./vGv;
+    % Use BFGS update rule
+    hessinv = hessinv + (p'*p)/vdotp - (Gv'*Gv)/vGv + vGv*(u'*u);
+  end
+
+  p = -(hessinv * gradnew')';
+
+  if (display > 0)
+    fprintf(1, 'Cycle %4d  Function %11.6f\n', j, fnew);
+  end
+
+  j = j + 1;
+  if nargout >= 3
+    flog(j, :) = fnew;
+    if nargout == 4
+      pointlog(j, :) = x;
+    end
+  end
+end
+
+% If we get here, then we haven't terminated in the given number of 
+% iterations.
+
+options(8) = fold;
+if (options(1) >= 0)
+  disp(maxitmess);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,123 @@
+function net = rbf(nin, nhidden, nout, rbfunc, outfunc, prior, beta)
+%RBF	Creates an RBF network with specified architecture
+%
+%	Description
+%	NET = RBF(NIN, NHIDDEN, NOUT, RBFUNC) constructs and initialises a
+%	radial basis function network returning a data structure NET. The
+%	weights are all initialised with a zero mean, unit variance normal
+%	distribution, with the exception of the variances, which are set to
+%	one. This makes use of the Matlab function RANDN and so the seed for
+%	the random weight initialization can be  set using RANDN('STATE', S)
+%	where S is the seed value. The activation functions are defined in
+%	terms of the distance between the data point and the corresponding
+%	centre.  Note that the functions are computed to a convenient
+%	constant multiple: for example, the Gaussian is not normalised.
+%	(Normalisation is not needed as the function outputs are linearly
+%	combined in the next layer.)
+%
+%	The fields in NET are
+%	  type = 'rbf'
+%	  nin = number of inputs
+%	  nhidden = number of hidden units
+%	  nout = number of outputs
+%	  nwts = total number of weights and biases
+%	  actfn = string defining hidden unit activation function:
+%	    'gaussian' for a radially symmetric Gaussian function.
+%	    'tps' for r^2 log r, the thin plate spline function.
+%	    'r4logr' for r^4 log r.
+%	  outfn = string defining output error function:
+%	    'linear' for linear outputs (default) and SoS error.
+%	    'neuroscale' for Sammon stress measure.
+%	  c = centres
+%	  wi = squared widths (null for rlogr and tps)
+%	  w2 = second layer weight matrix
+%	  b2 = second layer bias vector
+%
+%	NET = RBF(NIN, NHIDDEN, NOUT, RBFUND, OUTFUNC) allows the user to
+%	specify the type of error function to be used.  The field OUTFN is
+%	set to the value of this string.  Linear outputs (for regression
+%	problems) and Neuroscale outputs (for topographic mappings) are
+%	supported.
+%
+%	NET = RBF(NIN, NHIDDEN, NOUT, RBFUNC, OUTFUNC, PRIOR, BETA), in which
+%	PRIOR is a scalar, allows the field NET.ALPHA in the data structure
+%	NET to be set, corresponding to a zero-mean isotropic Gaussian prior
+%	with inverse variance with value PRIOR. Alternatively, PRIOR can
+%	consist of a data structure with fields ALPHA and INDEX, allowing
+%	individual Gaussian priors to be set over groups of weights in the
+%	network. Here ALPHA is a column vector in which each element
+%	corresponds to a separate group of weights, which need not be
+%	mutually exclusive.  The membership of the groups is defined by the
+%	matrix INDX in which the columns correspond to the elements of ALPHA.
+%	Each column has one element for each weight in the matrix, in the
+%	order defined by the function RBFPAK, and each element is 1 or 0
+%	according to whether the weight is a member of the corresponding
+%	group or not. A utility function RBFPRIOR is provided to help in
+%	setting up the PRIOR data structure.
+%
+%	NET = RBF(NIN, NHIDDEN, NOUT, FUNC, PRIOR, BETA) also sets the
+%	additional field NET.BETA in the data structure NET, where beta
+%	corresponds to the inverse noise variance.
+%
+%	See also
+%	RBFERR, RBFFWD, RBFGRAD, RBFPAK, RBFTRAIN, RBFUNPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+net.type = 'rbf';
+net.nin = nin;
+net.nhidden = nhidden;
+net.nout = nout;
+
+% Check that function is an allowed type
+actfns = {'gaussian', 'tps', 'r4logr'};
+outfns = {'linear', 'neuroscale'};
+if (strcmp(rbfunc, actfns)) == 0
+  error('Undefined activation function.')
+else
+  net.actfn = rbfunc;
+end
+if nargin <= 4
+   net.outfn = outfns{1};
+elseif (strcmp(outfunc, outfns) == 0)
+   error('Undefined output function.')
+else
+   net.outfn = outfunc;
+ end
+
+% Assume each function has a centre and a single width parameter, and that
+% hidden layer to output weights include a bias.  Only the Gaussian function
+% requires a width
+net.nwts = nin*nhidden + (nhidden + 1)*nout;
+if strcmp(rbfunc, 'gaussian')
+  % Extra weights for width parameters
+  net.nwts = net.nwts + nhidden;
+end
+
+if nargin > 5
+  if isstruct(prior)
+    net.alpha = prior.alpha;
+    net.index = prior.index;
+  elseif size(prior) == [1 1]
+    net.alpha = prior;
+  else
+    error('prior must be a scalar or a structure');
+  end  
+  if nargin > 6
+    net.beta = beta;
+  end
+end
+
+w = randn(1, net.nwts);
+net = rbfunpak(net, w);
+
+% Make widths equal to one
+if strcmp(rbfunc, 'gaussian')
+  net.wi = ones(1, nhidden);
+end
+
+if strcmp(net.outfn, 'neuroscale')
+  net.mask = rbfprior(rbfunc, nin, nhidden, nout);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbfbkp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,72 @@
+function g = rbfbkp(net, x, z, n2, deltas)
+%RBFBKP	Backpropagate gradient of error function for RBF network.
+%
+%	Description
+%	G = RBFBKP(NET, X, Z, N2, DELTAS) takes a network data structure NET
+%	together with a matrix X of input vectors, a matrix  Z of hidden unit
+%	activations, a matrix N2 of the squared distances between centres and
+%	inputs, and a matrix DELTAS of the  gradient of the error function
+%	with respect to the values of the output units (i.e. the summed
+%	inputs to the output units, before the activation function is
+%	applied). The return value is the gradient G of the error function
+%	with respect to the network weights. Each row of X corresponds to one
+%	input vector.
+%
+%	This function is provided so that the common backpropagation
+%	algorithm can be used by RBF network models to compute gradients for
+%	the output values (in RBFDERIV) as well as standard error functions.
+%
+%	See also
+%	RBF, RBFGRAD, RBFDERIV
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Evaluate second-layer gradients.
+gw2 = z'*deltas;
+gb2 = sum(deltas);
+
+% Evaluate hidden unit gradients
+delhid = deltas*net.w2';
+
+gc = zeros(net.nhidden, net.nin);
+ndata = size(x, 1);
+t1 = ones(ndata, 1);
+t2 = ones(1, net.nin);
+% Switch on activation function type
+switch net.actfn
+      
+case 'gaussian' % Gaussian
+   delhid = (delhid.*z);
+   % A loop seems essential, so do it with the shortest index vector
+   if (net.nin < net.nhidden)
+      for i = 1:net.nin
+         gc(:,i) = (sum(((x(:,i)*ones(1, net.nhidden)) - ...
+            (ones(ndata, 1)*(net.c(:,i)'))).*delhid, 1)./net.wi)';
+      end
+   else
+      for i = 1:net.nhidden
+         gc(i,:) = sum((x - (t1*(net.c(i,:)))./net.wi(i)).*(delhid(:,i)*t2), 1);
+      end
+   end
+   gwi = sum((n2.*delhid)./(2.*(ones(ndata, 1)*(net.wi.^2))), 1);
+   
+case 'tps'	% Thin plate spline activation function
+   delhid = delhid.*(1+log(n2+(n2==0)));
+   for i = 1:net.nhidden
+      gc(i,:) = sum(2.*((t1*(net.c(i,:)) - x)).*(delhid(:,i)*t2), 1);
+   end
+   % widths are not adjustable in this model
+   gwi = [];
+case 'r4logr' % r^4 log r activation function
+   delhid = delhid.*(n2.*(1+2.*log(n2+(n2==0))));
+   for i = 1:net.nhidden
+      gc(i,:) = sum(2.*((t1*(net.c(i,:)) - x)).*(delhid(:,i)*t2), 1);
+   end
+   % widths are not adjustable in this model
+   gwi = [];
+otherwise
+   error('Unknown activation function in rbfgrad')
+end
+   
+g = [gc(:)', gwi, gw2(:)', gb2];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbfderiv.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function g = rbfderiv(net, x)
+%RBFDERIV Evaluate derivatives of RBF network outputs with respect to weights.
+%
+%	Description
+%	G = RBFDERIV(NET, X) takes a network data structure NET and a matrix
+%	of input vectors X and returns a three-index matrix G whose I, J, K
+%	element contains the derivative of network output K with respect to
+%	weight or bias parameter J for input pattern I. The ordering of the
+%	weight and bias parameters is defined by RBFUNPAK.  This function
+%	also takes into account any mask in the network data structure.
+%
+%	See also
+%	RBF, RBFPAK, RBFGRAD, RBFBKP
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'rbf', x);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+if ~strcmp(net.outfn, 'linear')
+  error('Function only implemented for linear outputs')
+end
+
+[y, z, n2] = rbffwd(net, x);
+ndata = size(x, 1);
+
+if isfield(net, 'mask')
+    nwts = size(find(net.mask), 1);
+    temp = zeros(1, net.nwts);
+else
+    nwts = net.nwts;
+end
+
+g = zeros(ndata, nwts, net.nout);
+for k = 1 : net.nout
+  delta = zeros(1, net.nout);
+  delta(1, k) = 1;
+  for n = 1 : ndata
+      if isfield(net, 'mask')
+	  temp = rbfbkp(net, x(n, :), z(n, :), n2(n, :), delta);
+	  g(n, :, k) = temp(logical(net.mask));
+      else
+	  g(n, :, k) = rbfbkp(net, x(n, :), z(n, :), n2(n, :),...
+	      delta);
+      end
+  end
+end
+
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbferr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+function [e, edata, eprior] = rbferr(net, x, t)
+%RBFERR	Evaluate error function for RBF network.
+%
+%	Description
+%	E = RBFERR(NET, X, T) takes a network data structure NET together
+%	with a matrix X of input vectors and a matrix T of target vectors,
+%	and evaluates the appropriate error function E depending on
+%	NET.OUTFN.  Each row of X corresponds to one input vector and each
+%	row of T contains the corresponding target vector.
+%
+%	[E, EDATA, EPRIOR] = RBFERR(NET, X, T) additionally returns the data
+%	and prior components of the error, assuming a zero mean Gaussian
+%	prior on the weights with inverse variance parameters ALPHA and BETA
+%	taken from the network data structure NET.
+%
+%	See also
+%	RBF, RBFFWD, RBFGRAD, RBFPAK, RBFTRAIN, RBFUNPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+switch net.outfn
+case 'linear'
+   errstring = consist(net, 'rbf', x, t);
+case 'neuroscale'
+   errstring = consist(net, 'rbf', x);
+otherwise
+   error(['Unknown output function ', net.outfn]);
+end
+if ~isempty(errstring);
+  error(errstring);
+end
+
+switch net.outfn
+case 'linear'
+   y = rbffwd(net, x);
+   edata = 0.5*sum(sum((y - t).^2));
+case 'neuroscale'
+   y = rbffwd(net, x);
+   y_dist = sqrt(dist2(y, y));
+   % Take t as target distance matrix
+   edata = 0.5.*(sum(sum((t-y_dist).^2)));
+otherwise
+   error(['Unknown output function ', net.outfn]);
+end
+
+% Compute Bayesian regularised error
+[e, edata, eprior] = errbayes(net, edata);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbfevfwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function [y, extra, invhess] = rbfevfwd(net, x, t, x_test, invhess)
+%RBFEVFWD Forward propagation with evidence for RBF
+%
+%	Description
+%	Y = RBFEVFWD(NET, X, T, X_TEST) takes a network data structure  NET
+%	together with the input X and target T training data and input test
+%	data X_TEST. It returns the normal forward propagation through the
+%	network Y together with a matrix EXTRA which consists of error bars
+%	(variance) for a regression problem or moderated outputs for a
+%	classification problem.
+%
+%	The optional argument (and return value)  INVHESS is the inverse of
+%	the network Hessian computed on the training data inputs and targets.
+%	Passing it in avoids recomputing it, which can be a significant
+%	saving for large training sets.
+%
+%	See also
+%	FEVBAYES
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+y = rbffwd(net, x_test);
+% RBF outputs must be linear, so just pass them twice (second copy is 
+% not used
+if nargin == 4
+  [extra, invhess] = fevbayes(net, y, y, x, t, x_test);
+else
+  [extra, invhess] = fevbayes(net, y, y, x, t, x_test, invhess);    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbffwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+function [a, z, n2] = rbffwd(net, x)
+%RBFFWD	Forward propagation through RBF network with linear outputs.
+%
+%	Description
+%	A = RBFFWD(NET, X) takes a network data structure NET and a matrix X
+%	of input vectors and forward propagates the inputs through the
+%	network to generate a matrix A of output vectors. Each row of X
+%	corresponds to one input vector and each row of A contains the
+%	corresponding output vector. The activation function that is used is
+%	determined by NET.ACTFN.
+%
+%	[A, Z, N2] = RBFFWD(NET, X) also generates a matrix Z of the hidden
+%	unit activations where each row corresponds to one pattern. These
+%	hidden unit activations represent the design matrix for the RBF.  The
+%	matrix N2 is the squared distances between each basis function centre
+%	and each pattern in which each row corresponds to a data point.
+%
+%	See also
+%	RBF, RBFERR, RBFGRAD, RBFPAK, RBFTRAIN, RBFUNPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'rbf', x);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+[ndata, data_dim] = size(x);
+
+% Calculate squared norm matrix, of dimension (ndata, ncentres)
+n2 = dist2(x, net.c);
+
+% Switch on activation function type
+switch net.actfn
+
+  case 'gaussian'	% Gaussian
+    % Calculate width factors: net.wi contains squared widths
+    wi2 = ones(ndata, 1) * (2 .* net.wi);
+
+    % Now compute the activations
+    z = exp(-(n2./wi2));
+
+  case 'tps'		% Thin plate spline
+    z = n2.*log(n2+(n2==0));
+
+  case 'r4logr'		% r^4 log r
+    z = n2.*n2.*log(n2+(n2==0));
+
+  otherwise
+    error('Unknown activation function in rbffwd')
+end
+
+a = z*net.w2 + ones(ndata, 1)*net.b2;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbfgrad.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function [g, gdata, gprior] = rbfgrad(net, x, t)
+%RBFGRAD Evaluate gradient of error function for RBF network.
+%
+%	Description
+%	G = RBFGRAD(NET, X, T) takes a network data structure NET together
+%	with a matrix X of input vectors and a matrix T of target vectors,
+%	and evaluates the gradient G of the error function with respect to
+%	the network weights (i.e. including the hidden unit parameters). The
+%	error function is sum of squares. Each row of X corresponds to one
+%	input vector and each row of T contains the corresponding target
+%	vector. If the output function is 'NEUROSCALE' then the gradient is
+%	only computed for the output layer weights and biases.
+%
+%	[G, GDATA, GPRIOR] = RBFGRAD(NET, X, T) also returns separately  the
+%	data and prior contributions to the gradient. In the case of multiple
+%	groups in the prior, GPRIOR is a matrix with a row for each group and
+%	a column for each weight parameter.
+%
+%	See also
+%	RBF, RBFFWD, RBFERR, RBFPAK, RBFUNPAK, RBFBKP
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+switch net.outfn
+case 'linear'
+   errstring = consist(net, 'rbf', x, t);
+case 'neuroscale'
+   errstring = consist(net, 'rbf', x);
+otherwise
+   error(['Unknown output function ', net.outfn]);
+end
+if ~isempty(errstring);
+  error(errstring);
+end
+
+ndata = size(x, 1);
+
+[y, z, n2] = rbffwd(net, x);
+
+switch net.outfn
+case 'linear'
+
+   % Sum squared error at output units
+   delout = y - t;
+
+   gdata = rbfbkp(net, x, z, n2, delout);
+   [g, gdata, gprior] = gbayes(net, gdata);
+
+case 'neuroscale'
+   % Compute the error gradient with respect to outputs
+   y_dist = sqrt(dist2(y, y));
+   D = (t - y_dist)./(y_dist+diag(ones(ndata, 1)));
+   temp = y';
+   gradient = 2.*sum(kron(D, ones(1, net.nout)) .* ...
+      (repmat(y, 1, ndata) - repmat((temp(:))', ndata, 1)), 1);
+   gradient = (reshape(gradient, net.nout, ndata))';
+   % Compute the error gradient
+   gdata = rbfbkp(net, x, z, n2, gradient);
+   [g, gdata, gprior] = gbayes(net, gdata);
+otherwise
+   error(['Unknown output function ', net.outfn]);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbfhess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,91 @@
+function [h, hdata] = rbfhess(net, x, t, hdata)
+%RBFHESS Evaluate the Hessian matrix for RBF network.
+%
+%	Description
+%	H = RBFHESS(NET, X, T) takes an RBF network data structure NET, a
+%	matrix X of input values, and a matrix T of target values and returns
+%	the full Hessian matrix H corresponding to the second derivatives of
+%	the negative log posterior distribution, evaluated for the current
+%	weight and bias values as defined by NET.  Currently, the
+%	implementation only computes the Hessian for the output layer
+%	weights.
+%
+%	[H, HDATA] = RBFHESS(NET, X, T) returns both the Hessian matrix H and
+%	the contribution HDATA arising from the data dependent term in the
+%	Hessian.
+%
+%	H = RBFHESS(NET, X, T, HDATA) takes a network data structure NET, a
+%	matrix X of input values, and a matrix T of  target values, together
+%	with the contribution HDATA arising from the data dependent term in
+%	the Hessian, and returns the full Hessian matrix H corresponding to
+%	the second derivatives of the negative log posterior distribution.
+%	This version saves computation time if HDATA has already been
+%	evaluated for the current weight and bias values.
+%
+%	See also
+%	MLPHESS, HESSCHEK, EVIDENCE
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'rbf', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+if nargin == 3
+  % Data term in Hessian needs to be computed
+  [a, z] = rbffwd(net, x); 
+  hdata = datahess(net, z, t);
+end
+
+% Add in effect of regularisation
+[h, hdata] = hbayes(net, hdata);
+
+% Sub-function to compute data part of Hessian
+function hdata = datahess(net, z, t)
+
+% Only works for output layer Hessian currently
+if (isfield(net, 'mask') & ~any(net.mask(...
+      1:(net.nwts - net.nout*(net.nhidden+1)))))
+  hdata = zeros(net.nwts);
+  ndata = size(z, 1);
+  out_hess = [z ones(ndata, 1)]'*[z ones(ndata, 1)];
+  for j = 1:net.nout
+    hdata = rearrange_hess(net, j, out_hess, hdata);
+  end
+else
+  error('Output layer Hessian only.');
+end
+return
+
+% Sub-function to rearrange Hessian matrix
+function hdata = rearrange_hess(net, j, out_hess, hdata)
+
+% Because all the biases come after all the input weights,
+% we have to rearrange the blocks that make up the network Hessian.
+% This function assumes that we are on the jth output and that all outputs
+% are independent.
+
+% Start of bias weights block
+bb_start = net.nwts - net.nout + 1;
+% Start of weight block for jth output
+ob_start = net.nwts - net.nout*(net.nhidden+1) + (j-1)*net.nhidden...
+   + 1; 
+% End of weight block for jth output
+ob_end = ob_start + net.nhidden - 1; 
+% Index of bias weight
+b_index = bb_start+(j-1);   
+% Put input weight block in right place
+hdata(ob_start:ob_end, ob_start:ob_end) = out_hess(1:net.nhidden, ...
+   1:net.nhidden);
+% Put second derivative of bias weight in right place
+hdata(b_index, b_index) = out_hess(net.nhidden+1, net.nhidden+1);
+% Put cross terms (input weight v bias weight) in right place
+hdata(b_index, ob_start:ob_end) = out_hess(net.nhidden+1, ...
+   1:net.nhidden);
+hdata(ob_start:ob_end, b_index) = out_hess(1:net.nhidden, ...
+   net.nhidden+1);
+
+return 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbfjacob.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function jac = rbfjacob(net, x)
+%RBFJACOB Evaluate derivatives of RBF network outputs with respect to inputs.
+%
+%	Description
+%	G = RBFJACOB(NET, X) takes a network data structure NET and a matrix
+%	of input vectors X and returns a three-index matrix G whose I, J, K
+%	element contains the derivative of network output K with respect to
+%	input parameter J for input pattern I.
+%
+%	See also
+%	RBF, RBFGRAD, RBFBKP
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'rbf', x);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+if ~strcmp(net.outfn, 'linear')
+  error('Function only implemented for linear outputs')
+end
+
+[y, z, n2] = rbffwd(net, x);
+
+ndata = size(x, 1);
+jac = zeros(ndata, net.nin, net.nout);
+Psi = zeros(net.nin, net.nhidden);
+% Calculate derivative of activations wrt n2
+switch net.actfn
+case 'gaussian'
+  dz = -z./(ones(ndata, 1)*net.wi);
+case 'tps'
+  dz = 2*(1 + log(n2+(n2==0)));
+case 'r4logr'
+  dz = 2*(n2.*(1+2.*log(n2+(n2==0))));
+otherwise
+   error(['Unknown activation function ', net.actfn]);
+end
+
+% Ignore biases as they cannot affect Jacobian
+for n = 1:ndata
+  Psi = (ones(net.nin, 1)*dz(n, :)).* ...
+    (x(n, :)'*ones(1, net.nhidden) - net.c');
+  % Now compute the Jacobian
+  jac(n, :, :) =  Psi * net.w2;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbfpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function w = rbfpak(net)
+%RBFPAK	Combines all the parameters in an RBF network into one weights vector.
+%
+%	Description
+%	W = RBFPAK(NET) takes a network data structure NET and combines the
+%	component parameter matrices into a single row vector W.
+%
+%	See also
+%	RBFUNPAK, RBF
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'rbf');
+if ~errstring
+  error(errstring);
+end
+
+w = [net.c(:)', net.wi, net.w2(:)', net.b2];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbfprior.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,54 @@
+function [mask, prior] = rbfprior(rbfunc, nin, nhidden, nout, aw2, ab2)
+%RBFPRIOR Create Gaussian prior and output layer mask for RBF.
+%
+%	Description
+%	[MASK, PRIOR] = RBFPRIOR(RBFUNC, NIN, NHIDDEN, NOUT, AW2, AB2)
+%	generates a vector MASK  that selects only the output layer weights.
+%	This is because most uses of RBF networks in a Bayesian context have
+%	fixed basis functions with the output layer as the only adjustable
+%	parameters.  In particular, the Neuroscale output error function is
+%	designed to work only with this mask.
+%
+%	The return value PRIOR is a data structure,  with fields PRIOR.ALPHA
+%	and PRIOR.INDEX, which specifies a Gaussian prior distribution for
+%	the network weights in an RBF network. The parameters AW2 and AB2 are
+%	all scalars and represent the regularization coefficients for two
+%	groups of parameters in the network corresponding to  second-layer
+%	weights, and second-layer biases respectively. Then PRIOR.ALPHA
+%	represents a column vector of length 2 containing the parameters, and
+%	PRIOR.INDEX is a matrix specifying which weights belong in each
+%	group. Each column has one element for each weight in the matrix,
+%	using the standard ordering as defined in RBFPAK, and each element is
+%	1 or 0 according to whether the weight is a member of the
+%	corresponding group or not.
+%
+%	See also
+%	RBF, RBFERR, RBFGRAD, EVIDENCE
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+nwts_layer2 = nout + (nhidden *nout);
+switch rbfunc
+case 'gaussian'
+   nwts_layer1 = nin*nhidden + nhidden;
+case {'tps', 'r4logr'}
+   nwts_layer1 = nin*nhidden;
+otherwise
+   error('Undefined activation function');
+end  
+nwts = nwts_layer1 + nwts_layer2;
+
+% Make a mask only for output layer
+mask = [zeros(nwts_layer1, 1); ones(nwts_layer2, 1)];
+
+if nargout > 1
+  % Construct prior
+  indx = zeros(nwts, 2);
+  mark2 = nwts_layer1 + (nhidden * nout);
+  indx(nwts_layer1 + 1:mark2, 1) = ones(nhidden * nout, 1);
+  indx(mark2 + 1:nwts, 2) = ones(nout, 1);
+
+  prior.index = indx;
+  prior.alpha = [aw2, ab2]';
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbfsetbf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function net = rbfsetbf(net, options, x)
+%RBFSETBF Set basis functions of RBF from data.
+%
+%	Description
+%	NET = RBFSETBF(NET, OPTIONS, X) sets the basis functions of the RBF
+%	network NET so that they model the unconditional density of the
+%	dataset X.  This is done by training a GMM with spherical covariances
+%	using GMMEM.  The OPTIONS vector is passed to GMMEM. The widths of
+%	the functions are set by a call to RBFSETFW.
+%
+%	See also
+%	RBFTRAIN, RBFSETFW, GMMEM
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'rbf', x);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+% Create a spherical Gaussian mixture model
+mix = gmm(net.nin, net.nhidden, 'spherical');
+
+% Initialise the parameters from the input data
+% Just use a small number of k means iterations
+kmoptions = zeros(1, 18);
+kmoptions(1) = -1;	% Turn off warnings
+kmoptions(14) = 5;  % Just 5 iterations to get centres roughly right
+mix = gmminit(mix, x, kmoptions);
+
+% Train mixture model using EM algorithm
+[mix, options] = gmmem(mix, x, options);
+
+% Now set the centres of the RBF from the centres of the mixture model
+net.c = mix.centres;
+
+% options(7) gives scale of function widths
+net = rbfsetfw(net, options(7));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbfsetfw.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function net = rbfsetfw(net, scale)
+%RBFSETFW Set basis function widths of RBF.
+%
+%	Description
+%	NET = RBFSETFW(NET, SCALE) sets the widths of the basis functions of
+%	the RBF network NET. If Gaussian basis functions are used, then the
+%	variances are set to the largest squared distance between centres if
+%	SCALE is non-positive and SCALE times the mean distance of each
+%	centre to its nearest neighbour if SCALE is positive.  Non-Gaussian
+%	basis functions do not have a width.
+%
+%	See also
+%	RBFTRAIN, RBFSETBF, GMMEM
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Set the variances to be the largest squared distance between centres
+if strcmp(net.actfn, 'gaussian')
+   cdist = dist2(net.c, net.c);
+   if scale > 0.0
+      % Set variance of basis to be scale times average
+      % distance to nearest neighbour
+      cdist = cdist + realmax*eye(net.nhidden);
+      widths = scale*mean(min(cdist));
+   else
+      widths = max(max(cdist));
+   end
+   net.wi = widths * ones(size(net.wi));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbftrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,203 @@
+function [net, options] = rbftrain(net, options, x, t)
+%RBFTRAIN Two stage training of RBF network.
+%
+%	Description
+%	NET = RBFTRAIN(NET, OPTIONS, X, T) uses a  two stage training
+%	algorithm to set the weights in the RBF model structure NET. Each row
+%	of X corresponds to one input vector and each row of T contains the
+%	corresponding target vector. The centres are determined by fitting a
+%	Gaussian mixture model with circular covariances using the EM
+%	algorithm through a call to RBFSETBF.  (The mixture model is
+%	initialised using a small number of iterations of the K-means
+%	algorithm.) If the activation functions are Gaussians, then the basis
+%	function widths are then set to the maximum inter-centre squared
+%	distance.
+%
+%	For linear outputs,  the hidden to output weights that give rise to
+%	the least squares solution can then be determined using the pseudo-
+%	inverse. For neuroscale outputs, the hidden to output weights are
+%	determined using the iterative shadow targets algorithm.  Although
+%	this two stage procedure may not give solutions with as low an error
+%	as using general  purpose non-linear optimisers, it is much faster.
+%
+%	The options vector may have two rows: if this is the case, then the
+%	second row is passed to RBFSETBF, which allows the user to specify a
+%	different number iterations for RBF and GMM training. The optional
+%	parameters to RBFTRAIN have the following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values during EM training.
+%
+%	OPTIONS(2) is a measure of the precision required for the value of
+%	the weights W at the solution.
+%
+%	OPTIONS(3) is a measure of the precision required of the objective
+%	function at the solution.  Both this and the previous condition must
+%	be satisfied for termination.
+%
+%	OPTIONS(5) is set to 1 if the basis functions parameters should
+%	remain unchanged; default 0.
+%
+%	OPTIONS(6) is set to 1 if the output layer weights should be should
+%	set using PCA. This is only relevant for Neuroscale outputs; default
+%	0.
+%
+%	OPTIONS(14) is the maximum number of iterations for the shadow
+%	targets algorithm;  default 100.
+%
+%	See also
+%	RBF, RBFERR, RBFFWD, RBFGRAD, RBFPAK, RBFUNPAK, RBFSETBF
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+switch net.outfn
+case 'linear'
+  errstring = consist(net, 'rbf', x, t);
+case 'neuroscale'
+  errstring = consist(net, 'rbf', x);
+otherwise
+ error(['Unknown output function ', net.outfn]);
+end
+if ~isempty(errstring)
+  error(errstring);
+end
+
+% Allow options to have two rows: if this is the case, then the second row
+% is passed to rbfsetbf
+if size(options, 1) == 2
+  setbfoptions = options(2, :);
+  options = options(1, :);
+else
+  setbfoptions = options;
+end
+
+if(~options(14))
+  options(14) = 100;
+end
+% Do we need to test for termination?
+test = (options(2) | options(3));
+
+% Set up the basis function parameters to model the input data density
+% unless options(5) is set.
+if ~(logical(options(5)))
+  net = rbfsetbf(net, setbfoptions, x);
+end
+
+% Compute the design (or activations) matrix
+[y, act] = rbffwd(net, x);
+ndata = size(x, 1);
+
+if strcmp(net.outfn, 'neuroscale') & options(6)
+  % Initialise output layer weights by projecting data with PCA
+  mu = mean(x);
+  [pcvals, pcvecs] = pca(x, net.nout);
+  xproj = (x - ones(ndata, 1)*mu)*pcvecs;
+  % Now use projected data as targets to compute output layer weights
+  temp = pinv([act ones(ndata, 1)]) * xproj;
+  net.w2 = temp(1:net.nhidden, :);
+  net.b2 = temp(net.nhidden+1, :);
+  % Propagate again to compute revised outputs
+  [y, act] = rbffwd(net, x);
+end
+
+switch net.outfn
+case 'linear'
+  % Sum of squares error function in regression model
+  % Solve for the weights and biases using pseudo-inverse from activations
+  Phi = [act ones(ndata, 1)];
+  if ~isfield(net, 'alpha')
+    % Solve for the weights and biases using left matrix divide
+    temp = pinv(Phi)*t;
+  elseif size(net.alpha == [1 1])
+    % Use normal form equation
+    hessian = Phi'*Phi + net.alpha*eye(net.nhidden+1);
+    temp = pinv(hessian)*(Phi'*t);  
+  else
+    error('Only scalar alpha allowed');
+  end
+  net.w2 = temp(1:net.nhidden, :);
+  net.b2 = temp(net.nhidden+1, :);
+
+case 'neuroscale'
+  % Use the shadow targets training algorithm
+  if nargin < 4
+    % If optional input distances not passed in, then use
+    % Euclidean distance
+    x_dist = sqrt(dist2(x, x));
+  else
+    x_dist = t;
+  end
+  Phi = [act, ones(ndata, 1)];
+  % Compute the pseudo-inverse of Phi
+  PhiDag = pinv(Phi);
+  % Compute y_dist, distances between image points
+  y_dist = sqrt(dist2(y, y));
+
+  % Save old weights so that we can check the termination criterion
+  wold = netpak(net);
+  % Compute initial error (stress) value
+  errold = 0.5*(sum(sum((x_dist - y_dist).^2)));
+
+  % Initial value for eta
+  eta = 0.1;
+  k_up = 1.2;
+  k_down = 0.1;
+  success = 1;  % Force initial gradient calculation
+
+  for j = 1:options(14)
+    if success
+      % Compute the negative error gradient with respect to network outputs
+      D = (x_dist - y_dist)./(y_dist+(y_dist==0));
+      temp = y';
+      neg_gradient = -2.*sum(kron(D, ones(1, net.nout)) .* ...
+	(repmat(y, 1, ndata) - repmat((temp(:))', ndata, 1)), 1);
+      neg_gradient = (reshape(neg_gradient, net.nout, ndata))';
+    end
+    % Compute the shadow targets
+    t = y + eta*neg_gradient;
+    % Solve for the weights and biases
+    temp = PhiDag * t;
+    net.w2 = temp(1:net.nhidden, :);
+    net.b2 = temp(net.nhidden+1, :);
+   
+    % Do housekeeping and test for convergence
+    ynew = rbffwd(net, x);
+    y_distnew = sqrt(dist2(ynew, ynew));
+    err = 0.5.*(sum(sum((x_dist-y_distnew).^2)));
+    if err > errold
+      success = 0;
+      % Restore previous weights
+      net = netunpak(net, wold);
+      err = errold;
+      eta = eta * k_down;
+    else
+      success = 1;
+      eta = eta * k_up;
+      errold = err;
+      y = ynew;
+      y_dist = y_distnew;
+      if test & j > 1
+	w = netpak(net);
+	if (max(abs(w - wold)) < options(2) & abs(err-errold) < options(3))
+	  options(8) = err;
+	  return;
+	end
+      end
+      wold = netpak(net);
+    end
+    if options(1)
+      fprintf(1, 'Cycle %4d Error %11.6f\n', j, err)
+    end
+    if nargout >= 3
+      errlog(j) = err;
+    end
+  end
+  options(8) = errold;
+  if (options(1) >= 0)
+    disp('Warning: Maximum number of iterations has been exceeded');
+  end
+otherwise
+   error(['Unknown output function ', net.outfn]);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rbfunpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function net = rbfunpak(net, w)
+%RBFUNPAK Separates a vector of RBF weights into its components.
+%
+%	Description
+%	NET = RBFUNPAK(NET, W) takes an RBF network data structure NET and  a
+%	weight vector W, and returns a network data structure identical to
+%	the input network, except that the centres C, the widths WI, the
+%	second-layer weight matrix W2 and the second-layer bias vector B2
+%	have all been set to the corresponding elements of W.
+%
+%	See also
+%	RBFPAK, RBF
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'rbf');
+if ~errstring
+  error(errstring);
+end
+
+if net.nwts ~= length(w)
+  error('Invalid length of weight vector')
+end
+
+nin 	= net.nin;
+nhidden = net.nhidden;
+nout 	= net.nout;
+
+mark1 = nin*nhidden;
+net.c = reshape(w(1:mark1), nhidden, nin);
+if strcmp(net.actfn, 'gaussian')
+  mark2 = mark1 + nhidden;
+  net.wi = reshape(w(mark1+1:mark2), 1, nhidden);
+else
+  mark2 = mark1;
+  net.wi = [];
+end
+mark3 = mark2 + nhidden*nout;
+net.w2 = reshape(w(mark2+1:mark3), nhidden, nout);
+mark4 = mark3 + nout;
+net.b2 = reshape(w(mark3+1:mark4), 1, nout);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rosegrad.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function g = rosegrad(x)
+%ROSEGRAD Calculate gradient of Rosenbrock's function.
+%
+%	Description
+%	G = ROSEGRAD(X) computes the gradient of Rosenbrock's function at
+%	each row of X, which should have two columns.
+%
+%	See also
+%	DEMOPT1, ROSEN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Return gradient of Rosenbrock's test function
+
+nrows = size(x, 1);
+g = zeros(nrows,2);
+
+g(:,1) = -400 * (x(:,2) - x(:,1).^2) * x(:,1) - 2 * (1 - x(:,1));
+g(:,2) = 200 * (x(:,2) - x(:,1).^2);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/rosen.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function y = rosen(x)
+%ROSEN	Calculate Rosenbrock's function.
+%
+%	Description
+%	Y = ROSEN(X) computes the value of Rosenbrock's function at each row
+%	of X, which should have two columns.
+%
+%	See also
+%	DEMOPT1, ROSEGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Calculate value of Rosenbrock's function: x should be nrows by 2 columns
+
+y = 100 * ((x(:,2) - x(:,1).^2).^2) + (1.0 - x(:,1)).^2;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/scg.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,208 @@
+function [x, options, flog, pointlog, scalelog] = scg(f, x, options, gradf, varargin)
+%SCG	Scaled conjugate gradient optimization.
+%
+%	Description
+%	[X, OPTIONS] = SCG(F, X, OPTIONS, GRADF) uses a scaled conjugate
+%	gradients algorithm to find a local minimum of the function F(X)
+%	whose gradient is given by GRADF(X).  Here X is a row vector and F
+%	returns a scalar value. The point at which F has a local minimum is
+%	returned as X.  The function value at that point is returned in
+%	OPTIONS(8).
+%
+%	[X, OPTIONS, FLOG, POINTLOG, SCALELOG] = SCG(F, X, OPTIONS, GRADF)
+%	also returns (optionally) a log of the function values after each
+%	cycle in FLOG, a log of the points visited in POINTLOG, and a log of
+%	the scale values in the algorithm in SCALELOG.
+%
+%	SCG(F, X, OPTIONS, GRADF, P1, P2, ...) allows additional arguments to
+%	be passed to F() and GRADF().     The optional parameters have the
+%	following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values; also logs error
+%	values in the return argument ERRLOG, and the points visited in the
+%	return argument POINTSLOG.  If OPTIONS(1) is set to 0, then only
+%	warning messages are displayed.  If OPTIONS(1) is -1, then nothing is
+%	displayed.
+%
+%	OPTIONS(2) is a measure of the absolute precision required for the
+%	value of X at the solution.  If the absolute difference between the
+%	values of X between two successive steps is less than OPTIONS(2),
+%	then this condition is satisfied.
+%
+%	OPTIONS(3) is a measure of the precision required of the objective
+%	function at the solution.  If the absolute difference between the
+%	objective function values between two successive steps is less than
+%	OPTIONS(3), then this condition is satisfied. Both this and the
+%	previous condition must be satisfied for termination.
+%
+%	OPTIONS(9) is set to 1 to check the user defined gradient function.
+%
+%	OPTIONS(10) returns the total number of function evaluations
+%	(including those in any line searches).
+%
+%	OPTIONS(11) returns the total number of gradient evaluations.
+%
+%	OPTIONS(14) is the maximum number of iterations; default 100.
+%
+%	See also
+%	CONJGRAD, QUASINEW
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+%  Set up the options.
+if length(options) < 18
+  error('Options vector too short')
+end
+
+if(options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+
+display = options(1);
+gradcheck = options(9);
+
+% Set up strings for evaluating function and gradient
+f = fcnchk(f, length(varargin));
+gradf = fcnchk(gradf, length(varargin));
+
+nparams = length(x);
+
+%  Check gradients
+if (gradcheck)
+  feval('gradchek', x, f, gradf, varargin{:});
+end
+
+sigma0 = 1.0e-4;
+fold = feval(f, x, varargin{:});	% Initial function value.
+fnow = fold;
+options(10) = options(10) + 1;		% Increment function evaluation counter.
+gradnew = feval(gradf, x, varargin{:});	% Initial gradient.
+gradold = gradnew;
+options(11) = options(11) + 1;		% Increment gradient evaluation counter.
+d = -gradnew;				% Initial search direction.
+success = 1;				% Force calculation of directional derivs.
+nsuccess = 0;				% nsuccess counts number of successes.
+beta = 1.0;				% Initial scale parameter.
+betamin = 1.0e-15; 			% Lower bound on scale.
+betamax = 1.0e100;			% Upper bound on scale.
+j = 1;					% j counts number of iterations.
+if nargout >= 3
+  flog(j, :) = fold;
+  if nargout == 4
+    pointlog(j, :) = x;
+  end
+end
+
+% Main optimization loop.
+while (j <= niters)
+
+  % Calculate first and second directional derivatives.
+  if (success == 1)
+    mu = d*gradnew';
+    if (mu >= 0)
+      d = - gradnew;
+      mu = d*gradnew';
+    end
+    kappa = d*d';
+    if kappa < eps
+      options(8) = fnow;
+      return
+    end
+    sigma = sigma0/sqrt(kappa);
+    xplus = x + sigma*d;
+    gplus = feval(gradf, xplus, varargin{:});
+    options(11) = options(11) + 1; 
+    theta = (d*(gplus' - gradnew'))/sigma;
+  end
+
+  % Increase effective curvature and evaluate step size alpha.
+  delta = theta + beta*kappa;
+  if (delta <= 0) 
+    delta = beta*kappa;
+    beta = beta - theta/kappa;
+  end
+  alpha = - mu/delta;
+  
+  % Calculate the comparison ratio.
+  xnew = x + alpha*d;
+  fnew = feval(f, xnew, varargin{:});
+  options(10) = options(10) + 1;
+  Delta = 2*(fnew - fold)/(alpha*mu);
+  if (Delta  >= 0)
+    success = 1;
+    nsuccess = nsuccess + 1;
+    x = xnew;
+    fnow = fnew;
+  else
+    success = 0;
+    fnow = fold;
+  end
+
+  if nargout >= 3
+    % Store relevant variables
+    flog(j) = fnow;		% Current function value
+    if nargout >= 4
+      pointlog(j,:) = x;	% Current position
+      if nargout >= 5
+	scalelog(j) = beta;	% Current scale parameter
+      end
+    end
+  end    
+  if display > 0
+    fprintf(1, 'Cycle %4d  Error %11.6f  Scale %e\n', j, fnow, beta);
+  end
+
+  if (success == 1)
+    % Test for termination
+
+    if (max(abs(alpha*d)) < options(2) & max(abs(fnew-fold)) < options(3))
+      options(8) = fnew;
+      return;
+
+    else
+      % Update variables for new position
+      fold = fnew;
+      gradold = gradnew;
+      gradnew = feval(gradf, x, varargin{:});
+      options(11) = options(11) + 1;
+      % If the gradient is zero then we are done.
+      if (gradnew*gradnew' == 0)
+	options(8) = fnew;
+	return;
+      end
+    end
+  end
+
+  % Adjust beta according to comparison ratio.
+  if (Delta < 0.25)
+    beta = min(4.0*beta, betamax);
+  end
+  if (Delta > 0.75)
+    beta = max(0.5*beta, betamin);
+  end
+
+  % Update search direction using Polak-Ribiere formula, or re-start 
+  % in direction of negative gradient after nparams steps.
+  if (nsuccess == nparams)
+    d = -gradnew;
+    nsuccess = 0;
+  else
+    if (success == 1)
+      gamma = (gradold - gradnew)*gradnew'/(mu);
+      d = gamma*d - gradnew;
+    end
+  end
+  j = j + 1;
+end
+
+% If we get here, then we haven't terminated in the given number of 
+% iterations.
+
+options(8) = fold;
+if (options(1) >= 0)
+  disp(maxitmess);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/som.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+function net = som(nin, map_size)
+%SOM	Creates a Self-Organising Map.
+%
+%	Description
+%	NET = SOM(NIN, MAP_SIZE) creates a SOM NET with input dimension (i.e.
+%	data dimension) NIN and map dimensions MAP_SIZE.  Only two-
+%	dimensional maps are currently implemented.
+%
+%	The fields in NET are
+%	  type = 'som'
+%	  nin = number of inputs
+%	  map_dim = dimension of map (constrained to be 2)
+%	  map_size = grid size: number of nodes in each dimension
+%	  num_nodes = number of nodes: the product of values in map_size
+%	  map = map_dim+1 dimensional array containing nodes
+%	  inode_dist = map of inter-node distances using Manhatten metric
+%
+%	The map contains the node vectors arranged column-wise in the first
+%	dimension of the array.
+%
+%	See also
+%	KMEANS, SOMFWD, SOMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+net.type = 'som';
+net.nin = nin;
+
+% Create Map of nodes
+if round(map_size) ~= map_size | (map_size < 1)
+    error('SOM specification must contain positive integers');
+end
+
+net.map_dim = length(map_size);
+if net.map_dim ~= 2
+    error('SOM is a 2 dimensional map');
+end
+net.num_nodes = prod(map_size);
+% Centres are stored by column as first index of multi-dimensional array.
+% This makes extracting them later more easy.
+% Initialise with rand to create square grid
+net.map = rand([nin, map_size]);
+net.map_size = map_size;
+
+% Crude function to compute inter-node distances
+net.inode_dist = zeros([map_size, net.num_nodes]);
+for m = 1:net.num_nodes
+    node_loc = [1+fix((m-1)/map_size(2)), 1+rem((m-1),map_size(2))];
+    for k = 1:map_size(1)
+	for l = 1:map_size(2)
+	    net.inode_dist(k, l, m) = round(max(abs([k l] - node_loc)));
+	end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/somfwd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function [d2, win_nodes] = somfwd(net, x)
+%SOMFWD	Forward propagation through a Self-Organising Map.
+%
+%	Description
+%	D2 = SOMFWD(NET, X) propagates the data matrix X through  a SOM NET,
+%	returning the squared distance matrix D2 with dimension NIN by
+%	NUM_NODES.  The $i$th row represents the squared Euclidean distance
+%	to each of the nodes of the SOM.
+%
+%	[D2, WIN_NODES] = SOMFWD(NET, X) also returns the indices of the
+%	winning nodes for each pattern.
+%
+%	See also
+%	SOM, SOMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check for consistency
+errstring = consist(net, 'som', x);
+if ~isempty(errstring)
+    error(errstring);
+end
+
+% Turn nodes into matrix of centres
+nodes = (reshape(net.map, net.nin, net.num_nodes))';
+% Compute squared distance matrix
+d2 = dist2(x, nodes);
+% Find winning node for each pattern: minimum value in each row
+[w, win_nodes] = min(d2, [], 2);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/sompak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function [c] = sompak(net)
+%SOMPAK	Combines node weights into one weights matrix.
+%
+%	Description
+%	C = SOMPAK(NET) takes a SOM data structure NET and combines the node
+%	weights into a matrix of centres C where each row represents the node
+%	vector.
+%
+%	The ordering of the parameters in W is defined by the indexing of the
+%	multi-dimensional array NET.MAP.
+%
+%	See also
+%	SOM, SOMUNPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'som');
+if ~isempty(errstring)
+    error(errstring);
+end
+% Returns map as a sequence of row vectors
+c = (reshape(net.map, net.nin, net.num_nodes))';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/somtrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,157 @@
+function net = somtrain(net, options, x)
+%SOMTRAIN Kohonen training algorithm for SOM.
+%
+%	Description
+%	NET = SOMTRAIN{NET, OPTIONS, X) uses Kohonen's algorithm to train a
+%	SOM.  Both on-line and batch algorithms are implemented. The learning
+%	rate (for on-line) and neighbourhood size decay linearly. There is no
+%	error function minimised during training (so there is no termination
+%	criterion other than the number of epochs), but the  sum-of-squares
+%	is computed and returned in OPTIONS(8).
+%
+%	The optional parameters have the following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values; also logs learning
+%	rate ALPHA and neighbourhood size NSIZE. Otherwise nothing is
+%	displayed.
+%
+%	OPTIONS(5) determines whether the patterns are sampled randomly with
+%	replacement. If it is 0 (the default), then patterns are sampled in
+%	order.  This is only relevant to the on-line algorithm.
+%
+%	OPTIONS(6) determines if the on-line or batch algorithm is used. If
+%	it is 1 then the batch algorithm is used.  If it is 0 (the default)
+%	then the on-line algorithm is used.
+%
+%	OPTIONS(14) is the maximum number of iterations (passes through the
+%	complete pattern set); default 100.
+%
+%	OPTIONS(15) is the final neighbourhood size; default value is the
+%	same as the initial neighbourhood size.
+%
+%	OPTIONS(16) is the final learning rate; default value is the same as
+%	the initial learning rate.
+%
+%	OPTIONS(17) is the initial neighbourhood size; default 0.5*maximum
+%	map size.
+%
+%	OPTIONS(18) is the initial learning rate; default 0.9.  This
+%	parameter must be positive.
+%
+%	See also
+%	KMEANS, SOM, SOMFWD
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+% Check arguments for consistency
+errstring = consist(net, 'som', x);
+if ~isempty(errstring)
+    error(errstring);
+end
+
+% Set number of iterations in convergence phase
+if (~options(14))
+    options(14) = 100;
+end
+niters = options(14);
+
+% Learning rate must be positive
+if (options(18) > 0)
+    alpha_first = options(18);
+else
+    alpha_first = 0.9;
+end
+% Final learning rate must be no greater than initial learning rate
+if (options(16) > alpha_first | options(16) < 0)
+    alpha_last = alpha_first;
+else
+    alpha_last = options(16);
+end
+
+% Neighbourhood size
+if (options(17) >= 0)
+    nsize_first = options(17);
+else
+    nsize_first = max(net.map_dim)/2;
+end
+% Final neighbourhood size must be no greater than initial size
+if (options(15) > nsize_first | options(15) < 0)
+    nsize_last = nsize_first;
+else
+    nsize_last = options(15);
+end
+
+ndata = size(x, 1);
+
+if options(6)
+    % Batch algorithm
+    H = zeros(ndata, net.num_nodes);
+end
+% Put weights into matrix form
+tempw = sompak(net);
+
+% Then carry out training
+j = 1;
+while j <= niters
+    if options(6)
+	% Batch version of algorithm
+	alpha = 0.0;
+	frac_done = (niters - j)/niters;
+	% Compute neighbourhood
+	nsize = round((nsize_first - nsize_last)*frac_done + nsize_last);
+	
+	% Find winning node: put weights back into net so that we can
+	% call somunpak
+	net = somunpak(net, tempw);
+	[temp, bnode] = somfwd(net, x);
+	for k = 1:ndata
+	    H(k, :) = reshape(net.inode_dist(:, :, bnode(k))<=nsize, ...
+		1, net.num_nodes);
+	end
+	s = sum(H, 1);
+	for k = 1:net.num_nodes
+	    if s(k) > 0
+		tempw(k, :) = sum((H(:, k)*ones(1, net.nin)).*x, 1)/ ...
+		    s(k);
+	    end
+	end
+    else
+	% On-line version of algorithm
+	if options(5)
+	    % Randomise order of pattern presentation: with replacement
+	    pnum = ceil(rand(ndata, 1).*ndata);
+	else
+	    pnum = 1:ndata;
+	end
+	% Cycle through dataset
+	for k = 1:ndata
+	    % Fraction done
+	    frac_done = (((niters+1)*ndata)-(j*ndata + k))/((niters+1)*ndata);
+	    % Compute learning rate
+	    alpha = (alpha_first - alpha_last)*frac_done + alpha_last;
+	    % Compute neighbourhood
+	    nsize = round((nsize_first - nsize_last)*frac_done + nsize_last);
+	    % Find best node
+	    pat_diff = ones(net.num_nodes, 1)*x(pnum(k), :) - tempw;
+	    [temp, bnode] = min(sum(abs(pat_diff), 2));
+	
+	    % Now update neighbourhood
+	    neighbourhood = (net.inode_dist(:, :, bnode) <= nsize);
+	    tempw = tempw + ...
+		((alpha*(neighbourhood(:)))*ones(1, net.nin)).*pat_diff;
+	end
+    end
+    if options(1)
+	% Print iteration information
+	fprintf(1, 'Iteration %d; alpha = %f, nsize = %f. ', j, alpha, ...
+	nsize);
+	% Print sum squared error to nearest node
+	d2 = dist2(tempw, x);
+	fprintf(1, 'Error = %f\n', sum(min(d2)));
+    end
+    j = j + 1;
+end
+
+net = somunpak(net, tempw);
+options(8) = sum(min(dist2(tempw, x)));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/somunpak.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function net = somunpak(net, w)
+%SOMUNPAK Replaces node weights in SOM.
+%
+%	Description
+%	NET = SOMUNPAK(NET, W) takes a SOM data structure NET and weight
+%	matrix W (each node represented by a row) and puts the nodes back
+%	into the multi-dimensional array NET.MAP.
+%
+%	The ordering of the parameters in W is defined by the indexing of the
+%	multi-dimensional array NET.MAP.
+%
+%	See also
+%	SOM, SOMPAK
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+errstring = consist(net, 'som');
+if ~isempty(errstring)
+    error(errstring);
+end
+% Put weights back into network data structure
+net.map = reshape(w', [net.nin net.map_size]);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlab3.3/xor.dat	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+nin 2
+nout 1
+ndata 12
+1 0 1
+0 1 1
+0 0 0
+1 1 0
+1 0 1
+0 1 1
+0 0 0
+1 1 0
+1 0 1
+0 1 1
+0 0 0
+1 1 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/CVS/Entries	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+/README.txt/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/demgmm1_movie.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/evidence_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/glmerr_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/glmgrad_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/glmhess_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/glmtrain_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/gmm1.avi/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/gmmem2.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/gmmem_multi_restart.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/kmeans_demo.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/mlperr_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/mlpgrad_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/mlphdotv_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/mlphess_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/neterr_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/netgrad_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/nethess_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/netopt_weighted.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+/process_options.m/1.1.1.1/Wed Apr 27 17:59:16 2005//
+D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/CVS/Repository	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+FullBNT/netlabKPM
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/CVS/Root	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+:ext:nsaunier@bnt.cvs.sourceforge.net:/cvsroot/bnt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/README.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+This directory contains some small modifications/additions to
+netlab, http://www.ncrg.aston.ac.uk/netlab/.
+
+- gmmem2 allows a prior on the covariance, and lets you visualize
+intermediate results of the learning
+- gmmem_multi_restart is self-explanatory
+
+All the _weighted functions were written by Pierpaolo Brutti.
+They are needed by BNT (softmax_CPD  and mlp_CPD
+maximize_params method).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/demgmm1_movie.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,103 @@
+%DEMGMM1 Demonstrate EM for Gaussian mixtures.
+%
+%	Description
+%	This script demonstrates the use of the EM algorithm to fit a mixture
+%	of Gaussians to a set of data using maximum likelihood. A colour
+%	coding scheme is used to illustrate the evaluation of the posterior
+%	probabilities in the E-step of the EM algorithm.
+%
+%	See also
+%	DEMGMM2, DEMGMM3, DEMGMM4, GMM, GMMEM, GMMPOST
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+mov = avifile('movies/gmm1.avi','fps',1 );
+
+% Generate the data
+randn('state', 0); rand('state', 0);
+gmix = gmm(2, 2, 'spherical');
+ndat1 = 20; ndat2 = 20; ndata = ndat1+ndat2;
+gmix.centres =  [0.3 0.3; 0.7 0.7]; 
+gmix.covars = [0.01 0.01];
+x = gmmsamp(gmix, ndata);
+
+h = figure;
+hd = plot(x(:, 1), x(:, 2), '.g', 'markersize', 30);
+hold on; axis([0 1 0 1]); axis square; set(gca, 'box', 'on');
+ht = text(0.5, 1.05, 'Data', 'horizontalalignment', 'center');
+
+
+% Set up mixture model
+ncentres = 2; input_dim = 2;
+mix = gmm(input_dim, ncentres, 'spherical');
+
+% Initialise the mixture model
+mix.centres = [0.2 0.8; 0.8, 0.2];
+mix.covars = [0.01 0.01];
+
+% Plot the initial model
+ncirc = 30; theta = linspace(0, 2*pi, ncirc);
+xs = cos(theta); ys = sin(theta);
+xvals = mix.centres(:, 1)*ones(1,ncirc) + sqrt(mix.covars')*xs;
+yvals = mix.centres(:, 2)*ones(1,ncirc) + sqrt(mix.covars')*ys;
+hc(1)=line(xvals(1,:), yvals(1,:), 'color', 'r');
+hc(2)=line(xvals(2,:), yvals(2,:), 'color', 'b');
+set(ht, 'string', 'Initial Configuration');
+figure(h);
+mov = addframe(mov, getframe(gcf));
+mov = addframe(mov, getframe(gcf));
+
+% Initial E-step.
+set(ht, 'string', 'E-step');
+post = gmmpost(mix, x);
+dcols = [post(:,1), zeros(ndata, 1), post(:,2)];
+delete(hd); 
+for i = 1 : ndata
+  hd(i) = plot(x(i, 1), x(i, 2), 'color', dcols(i,:), ...
+          'marker', '.', 'markersize', 30);
+end
+
+% M-step.
+set(ht, 'string', 'M-step');
+options = foptions; 
+options(14) = 1; % A single iteration
+options(1) = -1; % Switch off all messages, including warning
+mix = gmmem(mix, x, options);
+delete(hc);
+xvals = mix.centres(:, 1)*ones(1,ncirc) + sqrt(mix.covars')*xs;
+yvals = mix.centres(:, 2)*ones(1,ncirc) + sqrt(mix.covars')*ys;
+hc(1)=line(xvals(1,:), yvals(1,:), 'color', 'r');
+hc(2)=line(xvals(2,:), yvals(2,:), 'color', 'b');
+figure(h);
+mov = addframe(mov, getframe(gcf));
+mov = addframe(mov, getframe(gcf));
+
+% Loop over EM iterations.
+numiters = 9;
+for n = 1 : numiters
+
+  set(ht, 'string', 'E-step');
+  post = gmmpost(mix, x);
+  dcols = [post(:,1), zeros(ndata, 1), post(:,2)];
+  delete(hd); 
+  for i = 1 : ndata
+    hd(i) = plot(x(i, 1), x(i, 2), 'color', dcols(i,:), ...
+                 'marker', '.', 'markersize', 30);
+  end
+  %pause(1)
+
+  set(ht, 'string', 'M-step');
+  [mix, options] = gmmem(mix, x, options);
+  fprintf(1, 'Cycle %4d  Error %11.6f\n', n, options(8));
+  delete(hc);
+  xvals = mix.centres(:, 1)*ones(1,ncirc) + sqrt(mix.covars')*xs;
+  yvals = mix.centres(:, 2)*ones(1,ncirc) + sqrt(mix.covars')*ys;
+  hc(1)=line(xvals(1,:), yvals(1,:), 'color', 'r');
+  hc(2)=line(xvals(2,:), yvals(2,:), 'color', 'b');
+  pause(1)
+
+  mov = addframe(mov, getframe(gcf));
+end
+
+mov = close(mov);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/evidence_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,104 @@
+function [net, gamma, logev] = evidence_weighted(net, x, t, eso_w, num)
+%EVIDENCE Re-estimate hyperparameters using evidence approximation.
+%
+%	Description
+%	[NET] = EVIDENCE(NET, X, T) re-estimates the hyperparameters ALPHA
+%	and BETA by applying Bayesian re-estimation formulae for NUM
+%	iterations. The hyperparameter ALPHA can be a simple scalar
+%	associated with an isotropic prior on the weights, or can be a vector
+%	in which each component is associated with a group of weights as
+%	defined by the INDEX matrix in the NET data structure. These more
+%	complex priors can be set up for an MLP using MLPPRIOR. Initial
+%	values for the iterative re-estimation are taken from the network
+%	data structure NET passed as an input argument, while the return
+%	argument NET contains the re-estimated values.
+%
+%	[NET, GAMMA, LOGEV] = EVIDENCE(NET, X, T, NUM) allows the re-
+%	estimation  formula to be applied for NUM cycles in which the re-
+%	estimated values for the hyperparameters from each cycle are used to
+%	re-evaluate the Hessian matrix for the next cycle.  The return value
+%	GAMMA is the number of well-determined parameters and LOGEV is the
+%	log of the evidence.
+%
+%	See also
+%	MLPPRIOR, NETGRAD, NETHESS, DEMEV1, DEMARD
+%
+
+%	Copyright (c) Ian T Nabney (1996-9)
+
+errstring = consist(net, '', x, t);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+ndata = size(x, 1);
+if nargin == 4
+  num = 1;
+end
+
+if isfield(net,'beta')
+    beta = net.beta;
+else 
+    beta = 1;
+end;
+
+% Extract weights from network
+pakstr = [net.type, 'pak'];
+w = feval(pakstr, net);
+
+% Evaluate data-dependent contribution to the Hessian matrix.
+[h, dh] = nethess_weighted(w, net, x, t, eso_w); 
+
+% Now set the negative eigenvalues to zero.
+[evec, evl] = eig(dh);
+evl = evl.*(evl > 0);
+% safe_evl is used to avoid taking log of zero
+safe_evl = evl + eps.*(evl <= 0);
+
+% Do the re-estimation. 
+for k = 1 : num
+  [e, edata, eprior] = neterr_weighted(w, net, x, t, eso_w);
+  h = nethess_weighted(w, net, x, t, eso_w, dh);
+  % Re-estimate alpha.
+  if size(net.alpha) == [1 1]
+    % Evaluate number of well-determined parameters.
+    if k == 1
+      % Form vector of eigenvalues
+      evl = diag(evl);
+      safe_evl = diag(safe_evl);
+    end
+    B = beta*evl;
+    gamma = sum(B./(B + net.alpha));       
+    net.alpha = 0.5*gamma/eprior;
+       
+    % Partially evaluate log evidence
+    logev = e - 0.5*sum(log(safe_evl)) + 0.5*net.nwts*log(net.alpha) - ...
+      0.5*ndata*log(2*pi);
+  else
+    ngroups = size(net.alpha, 1);
+    gams = zeros(1, ngroups);
+    logas = zeros(1, ngroups);
+    traces = zeros(1, ngroups);
+    % Reconstruct data hessian with negative eigenvalues set to zero.
+    dh = evec*evl*evec';
+    hinv = inv(nethess_weighted(w, net, x, t, eso_w, dh));
+    for m = 1 : ngroups
+      group_nweights = sum(net.index(:, m));
+      gams(m) = group_nweights - ...
+	        net.alpha(m)*sum(diag(hinv).*net.index(:,m));
+      net.alpha(m) = real(gams(m)/(2*eprior(m)));
+      % Weight alphas by number of weights in group
+      logas(m) = 0.5*group_nweights*log(net.alpha(m));
+      % Compute sum of evalues corresponding to group
+      traces(m) = sum(log(safe_evl*net.index(:,m)));
+    end 
+    gamma = sum(gams, 2);
+    logev = e - 0.5*sum(traces) + sum(logas) - 0.5*ndata*log(2*pi);
+  end
+  % Re-estimate beta.
+  if isfield(net, 'beta')
+      net.beta = 0.5*(net.nout*ndata - gamma)/edata;
+  end
+  logev = logev + 0.5*ndata*log(beta);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/glmerr_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function [e, edata, eprior, y, a] = glmerr_weighted(net, x, t, eso_w)
+%GLMERR	Evaluate error function for generalized linear model.
+%
+%	Description
+%	 E = GLMERR(NET, X, T) takes a generalized linear model data
+%	structure NET together with a matrix X of input vectors and a matrix
+%	T of target vectors, and evaluates the error function E. The choice
+%	of error function corresponds to the output unit activation function.
+%	Each row of X corresponds to one input vector and each row of T
+%	corresponds to one target vector.
+%
+%	[E, EDATA, EPRIOR, Y, A] = GLMERR(NET, X, T) also returns the data
+%	and prior components of the total error.
+%
+%	[E, EDATA, EPRIOR, Y, A] = GLMERR(NET, X) also returns a matrix Y
+%	giving the outputs of the models and a matrix A  giving the summed
+%	inputs to each output unit, where each row corresponds to one
+%	pattern.
+%
+%	See also
+%	GLM, GLMPAK, GLMUNPAK, GLMFWD, GLMGRAD, GLMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-9)
+
+% Check arguments for consistency
+errstring = consist(net, 'glm', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+[y, a] = glmfwd(net, x);
+
+%switch net.actfn
+  switch net.outfn
+
+  case 'softmax'   	% Softmax outputs
+  
+    nout = size(a,2);
+    % Ensure that sum(exp(a), 2) does not overflow
+    maxcut = log(realmax) - log(nout);
+    % Ensure that exp(a) > 0
+    mincut = log(realmin);
+    a = min(a, maxcut);
+    a = max(a, mincut);
+    temp = exp(a);
+    y = temp./(sum(temp, 2)*ones(1,nout));
+    % Ensure that log(y) is computable
+    y(y<realmin) = realmin;
+    e_app=sum(t.*log(y),2);
+    edata = - eso_w'*e_app;
+    
+  otherwise
+    error(['Unknown activation function ', net.actfn]);
+end
+
+[e, edata, eprior] = errbayes(net, edata);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/glmgrad_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function [g, gdata, gprior] = glmgrad(net, x, t, eso_w)
+%GLMGRAD Evaluate gradient of error function for generalized linear model.
+%
+%	Description
+%	G = GLMGRAD(NET, X, T) takes a generalized linear model data
+%	structure NET  together with a matrix X of input vectors and a matrix
+%	T of target vectors, and evaluates the gradient G of the error
+%	function with respect to the network weights. The error function
+%	corresponds to the choice of output unit activation function. Each
+%	row of X corresponds to one input vector and each row of T
+%	corresponds to one target vector.
+%
+%	[G, GDATA, GPRIOR] = GLMGRAD(NET, X, T) also returns separately  the
+%	data and prior contributions to the gradient.
+%
+%	See also
+%	GLM, GLMPAK, GLMUNPAK, GLMFWD, GLMERR, GLMTRAIN
+%
+
+%	Copyright (c) Ian T Nabney (1996-9)
+
+% Check arguments for consistency
+errstring = consist(net, 'glm', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+y = glmfwd(net, x);
+temp = y - t;
+ndata = size(x, 1);
+for m=1:ndata,
+      delout(m,:)=eso_w(m,1)*temp(m,:);
+end
+gw1 = x'*delout;
+gb1 = sum(delout, 1);
+
+gdata = [gw1(:)', gb1];
+
+[g, gdata, gprior] = gbayes(net, gdata);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/glmhess_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function [h, hdata] = glmhess_weighted(net, x, t, eso_w, hdata)
+%GLMHESS Evaluate the Hessian matrix for a generalised linear model.
+%
+%	Description
+%	H = GLMHESS(NET, X, T) takes a GLM network data structure NET, a
+%	matrix X of input values, and a matrix T of target values and returns
+%	the full Hessian matrix H corresponding to the second derivatives of
+%	the negative log posterior distribution, evaluated for the current
+%	weight and bias values as defined by NET. Note that the target data
+%	is not required in the calculation, but is included to make the
+%	interface uniform with NETHESS.  For linear and logistic outputs, the
+%	computation is very simple and is  done (in effect) in one line in
+%	GLMTRAIN.
+%
+%	See also
+%	GLM, GLMTRAIN, HESSCHEK, NETHESS
+%
+%	Copyright (c) Ian T Nabney (1996-9)
+
+% Check arguments for consistency
+errstring = consist(net, 'glm', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+ndata = size(x, 1);
+nparams = net.nwts;
+nout = net.nout;
+p = glmfwd(net, x);
+inputs = [x ones(ndata, 1)];
+
+if nargin == 4
+   hdata = zeros(nparams);	% Full Hessian matrix
+   % Calculate data component of Hessian
+   switch net.outfn
+    
+   case 'softmax'
+    bb_start = nparams - nout + 1;	% Start of bias weights block
+    ex_hess = zeros(nparams);	% Contribution to Hessian from single example
+    for m = 1:ndata
+      X = x(m,:)'*x(m,:);
+      a = diag(p(m,:))-((p(m,:)')*p(m,:)); 
+      a=eso_w(m,1)*a;
+      ex_hess(1:nparams-nout,1:nparams-nout) = kron(a, X);
+      ex_hess(bb_start:nparams, bb_start:nparams) = a.*ones(net.nout, net.nout);
+      temp = kron(a, x(m,:));
+      ex_hess(bb_start:nparams, 1:nparams-nout) = temp;
+      ex_hess(1:nparams-nout, bb_start:nparams) = temp';
+      hdata = hdata + ex_hess;
+    end
+    
+    otherwise
+      error(['Unknown activation function ', net.actfn]);
+    end
+end
+
+[h, hdata] = hbayes(net, hdata);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/glmtrain_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,141 @@
+function [net, options] = glmtrain_weighted(net, options, x, t, eso_w, alfa)
+%GLMTRAIN Specialised training of generalized linear model
+%
+%	Description
+%	NET = GLMTRAIN(NET, OPTIONS, X, T) uses the iterative reweighted
+%	least squares (IRLS) algorithm to set the weights in the generalized
+%	linear model structure NET.  This is a more efficient alternative to
+%	using GLMERR and GLMGRAD and a non-linear optimisation routine
+%	through NETOPT. Note that for linear outputs, a single pass through
+%	the  algorithm is all that is required, since the error function is
+%	quadratic in the weights.  The error function value at the final set
+%	of weights is returned in OPTIONS(8). Each row of X corresponds to
+%	one input vector and each row of T corresponds to one target vector.
+%
+%	The optional parameters have the following interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values during training. If
+%	OPTIONS(1) is set to 0, then only warning messages are displayed.  If
+%	OPTIONS(1) is -1, then nothing is displayed.
+%
+%	OPTIONS(2) is a measure of the precision required for the value of
+%	the weights W at the solution.
+%
+%	OPTIONS(3) is a measure of the precision required of the objective
+%	function at the solution.  Both this and the previous condition must
+%	be satisfied for termination.
+%
+%	OPTIONS(5) is set to 1 if an approximation to the Hessian (which
+%	assumes that all outputs are independent) is used for softmax
+%	outputs. With the default value of 0 the exact Hessian (which is more
+%	expensive to compute) is used.
+%
+%	OPTIONS(14) is the maximum number of iterations for the IRLS
+%	algorithm;  default 100.
+%
+%	See also
+%	GLM, GLMERR, GLMGRAD
+%
+
+%	Copyright (c) Christopher M Bishop, Ian T Nabney (1996, 1997)
+
+% Check arguments for consistency
+errstring = consist(net, 'glm', x, t);
+if ~errstring
+  error(errstring);
+end
+
+if(~options(14))
+  options(14) = 100;
+end
+
+display = options(1);
+
+test = (options(2) | options(3));           % Do we need to test for termination?
+
+ndata = size(x, 1);
+
+inputs = [x ones(ndata, 1)];                % Add a column of ones for the bias 
+
+% Use weighted iterative reweighted least squares (WIRLS)
+e = ones(1, net.nin+1);
+for n = 1:options(14)
+    
+    %switch net.actfn
+      switch net.outfn
+    case 'softmax'
+      if n == 1        
+        p = (t + (1/size(t, 2)))/2;    % Initialise model: ensure that row sum of p is one no matter
+	    act = log(p./(1-p));           % how many classes there are
+      end
+      if options(5) == 1 | n == 1
+        link_deriv = p.*(1-p);
+        weights = sqrt(link_deriv);          % sqrt of weights
+        if (min(min(weights)) < eps)
+          fprintf(1, 'Warning: ill-conditioned weights in glmtrain\n')
+          return
+        end
+        z = act + (t-p)./link_deriv;
+        % Treat each output independently with relevant set of weights
+        for j = 1:net.nout
+          indep = inputs.*(weights(:,j)*e);
+	      dep   = z(:,j).*weights(:,j);
+	      temp  = indep\dep;
+	      net.w1(:,j) = temp(1:net.nin);
+	      net.b1(j)   = temp(net.nin+1);
+        end
+        [err, edata, eprior, p, act] = glmerr_weighted(net, x, t, eso_w);
+        if n == 1
+          errold = err;
+          wold = netpak(net);
+        else
+          w = netpak(net);
+        end
+      else
+	    % Exact method of calculation after w first initialised
+	    % Start by working out Hessian
+	    Hessian = glmhess_weighted(net, x, t, eso_w);
+	    temp = p-t;
+	    for m=1:ndata,
+	       temp(m,:)=eso_w(m,1)*temp(m,:);
+	    end
+	    gw1 = x'*(temp);
+	    gb1 = sum(temp, 1);
+	    gradient = [gw1(:)', gb1];
+	    % Now compute modification to weights
+	    deltaw = -gradient*pinv(Hessian);
+	    w = wold + alfa*deltaw;
+	    net = glmunpak(net, w);
+	    [err, edata, eprior, p] = glmerr_weighted(net, x, t, eso_w);
+      end
+    otherwise
+      error(['Unknown activation function ', net.actfn]);
+    end    % switch' end
+    
+   if options(1)==1
+     fprintf(1, 'Cycle %4d Error %11.6f\n', n, err)
+   end
+   % Test for termination
+   % Terminate if error increases
+   if err >  errold
+     errold = err;
+     w = wold;
+     options(8) = err;
+     fprintf(1, 'Error has increased: terminating\n')
+     return;
+   end
+   if test & n > 1
+     if (max(abs(w - wold)) < options(2) & abs(err-errold) < options(3))
+       options(8) = err;
+       return;
+     else
+       errold = err;
+       wold = w;
+     end
+   end
+end
+
+options(8) = err;
+if (options(1) > 0)
+  disp('Warning: Maximum number of iterations has been exceeded');
+end
Binary file toolboxes/FullBNT-1.0.7/netlabKPM/gmm1.avi has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/gmmem2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,186 @@
+function [mix, num_iter, ll] = gmmem_kpm(mix, x, varargin)
+%GMMEM_KPM Like GMMEM, but with additional optional arguments
+% function [mix, num_iter, ll] = gmmem_kpm(mix, x, varargin)
+%
+% Input:
+% mix - structure created by gmminit or gmmem_multi_restart
+% data - each row is an example
+%
+% Output:
+% mix - modified structure
+% num_iter - number of iterations needed to reach convergence
+% ll - final log likelihood
+%
+% [ ... ] = gmmem_kpm(..., 'param1',val1, 'param2',val2, ...) allows you to
+% specify optional parameter name/value pairs.
+% Parameters are below [default value in brackets]
+%
+% 'max_iter' - maximum number of EM iterations [10]
+% 'll_thresh' - change in log-likelihood threshold for convergence [1e-2]
+% 'verbose' - 1 means display output while running [0]
+% 'prior_cov' - this will be added to each estimated covariance
+%               to prevent singularities  [1e-3*eye(d)]
+% 'fn'        - this function, if non-empty,  will be called at every iteration
+%               (e.g., to display the parameters as they evolve) [ [] ]
+%               The fn is called as fn(mix, x, iter_num, fnargs).
+%               It is also called before the iteration starts as
+%               fn(mix, x, -1, fnargs), which can be used to initialize things.
+% 'fnargs'    - additional arguments to be passed to fn [ {} ]
+%
+% Modified by Kevin P Murphy, 29 Dec 2002
+
+
+% Check that inputs are consistent
+errstring = consist(mix, 'gmm', x);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+[ndata, xdim] = size(x);
+
+[max_iter, ll_thresh, verbose, prior_cov, fn, fnargs] = ...
+    process_options(varargin, ...
+	'max_iter', 10, 'll_thresh', 1e-2, 'verbose', 1, ...
+	'prior_cov', 1e-3*eye(xdim), 'fn', [], 'fnargs', {});
+
+options = foptions;
+if verbose, options(1)=1; else options(1)=-1; end
+options(14) = max_iter;
+options(3) = ll_thresh;
+
+
+% Sort out the options
+if (options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+
+display = options(1);
+test = 0;
+if options(3) > 0.0
+  test = 1;	% Test log likelihood for termination
+end
+
+check_covars = 0;
+if options(5) >= 1
+  if display >= 0
+    disp('check_covars is on');
+  end
+  check_covars = 1;	% Ensure that covariances don't collapse
+  MIN_COVAR = eps;	% Minimum singular value of covariance matrix
+  init_covars = mix.covars;
+end
+
+mix0 = mix; % save init values for debugging
+
+if ~isempty(fn)
+  feval(fn, mix, x, -1, fnargs{:});
+end
+
+% Main loop of algorithm
+for n = 1:niters
+  
+  % Calculate posteriors based on old parameters
+  [post, act] = gmmpost(mix, x);
+  
+  % Calculate error value if needed
+  if (display |  test)
+    prob = act*(mix.priors)';
+    % Error value is negative log likelihood of data
+    e = - sum(log(prob + eps));
+    if display > 0
+      fprintf(1, 'Cycle %4d  Error %11.6f\n', n, e);
+    end
+    if test
+      if (n > 1 & abs(e - eold) < options(3))
+        options(8) = e;
+	ll = -e;
+	num_iter = n;
+        return; %%%%%%%%%%%%%%%% Exit here if converged
+      else
+        eold = e;
+      end
+    end
+  end
+
+  if ~isempty(fn)
+    feval(fn, mix, x, n, fnargs{:});
+  end
+
+  % Adjust the new estimates for the parameters
+  new_pr = sum(post, 1);
+  new_c = post' * x;
+  
+  % Now move new estimates to old parameter vectors
+  mix.priors = new_pr ./ ndata;
+  
+  mix.centres = new_c ./ (new_pr' * ones(1, mix.nin));
+  
+  switch mix.covar_type
+  case 'spherical'
+    n2 = dist2(x, mix.centres);
+    for j = 1:mix.ncentres
+      v(j) = (post(:,j)'*n2(:,j));
+    end
+    mix.covars = ((v./new_pr) + sum(diag(prior_cov)))./mix.nin;
+    if check_covars
+      % Ensure that no covariance is too small
+      for j = 1:mix.ncentres
+        if mix.covars(j) < MIN_COVAR
+          mix.covars(j) = init_covars(j);
+        end
+      end
+    end
+  case 'diag'
+    for j = 1:mix.ncentres
+      diffs = x - (ones(ndata, 1) * mix.centres(j,:));
+      wts = (post(:,j)*ones(1, mix.nin));
+      mix.covars(j,:) = sum((diffs.*diffs).*wts + prior_cov, 1)./new_pr(j);
+    end
+    if check_covars
+      % Ensure that no covariance is too small
+      for j = 1:mix.ncentres
+        if min(mix.covars(j,:)) < MIN_COVAR
+          mix.covars(j,:) = init_covars(j,:);
+        end
+      end
+    end
+  case 'full'
+    for j = 1:mix.ncentres
+      diffs = x - (ones(ndata, 1) * mix.centres(j,:));
+      diffs = diffs.*(sqrt(post(:,j))*ones(1, mix.nin));
+      mix.covars(:,:,j) = (diffs'*diffs + prior_cov)/new_pr(j);
+    end
+    if check_covars
+      % Ensure that no covariance is too small
+      for j = 1:mix.ncentres
+        if min(svd(mix.covars(:,:,j))) < MIN_COVAR
+          mix.covars(:,:,j) = init_covars(:,:,j);
+        end
+      end
+    end
+  case 'ppca'
+    for j = 1:mix.ncentres
+      diffs = x - (ones(ndata, 1) * mix.centres(j,:));
+      diffs = diffs.*(sqrt(post(:,j))*ones(1, mix.nin));
+      [mix.covars(j), mix.U(:,:,j), mix.lambda(j,:)] = ...
+        ppca((diffs'*diffs)/new_pr(j), mix.ppca_dim);
+    end
+    if check_covars
+      if mix.covars(j) < MIN_COVAR
+        mix.covars(j) = init_covars(j);
+      end
+    end
+    otherwise
+      error(['Unknown covariance type ', mix.covar_type]);               
+  end
+end
+
+ll = sum(log(gmmprob(mix, x)));
+num_iter = n;
+
+%if (display >= 0)
+%  disp('Warning: Maximum number of iterations has been exceeded');
+%end
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/gmmem_multi_restart.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function [means, covs, weights, ll] = gmmem_multi_restart(K, data, varargin)
+% GMMEM_MULTI_RESTART Multiple restart wrapper for gmmem_kpm
+% function [means, covs, weights, ll] = gmmem_multi_restart(K, data, varargin)
+%
+% Input:
+% K = number of mixture components
+% data(i,:) is the i'th example (feature vector)
+%
+% Output:
+% The parameters for the k'th mixture component, k=1:K, are
+%   means(k,:), covs(:,:,k) and weights(k)
+%
+% [ ... ] = gmmem_multi_restart(..., 'param1',val1, 'param2',val2, ...)
+% allows you to specify optional parameter name/value pairs.
+% Parameters are below [default value in brackets]
+%
+% 'nrestarts' - number of EM restarts [2]
+% 'cov_type' - 'full', 'diag' or 'spherical' ['full']
+% 'init_cov' - the initial covariance matrix [0.1*cov(data) for each k]
+% 'init_means' - [] means sample from randn(); otherwise, use
+%               init_means(k,:,r) for the k'th comp. on the r'th restart [ [] ]
+% 'restartfn'  - this function, if non-empty,  will be called before/after every restart
+%               (e.g., to display the parameters as they evolve) [ [] ]
+%               The fn is called as fn(mix{r}, data, restart_num, niter, outerfnargs)
+%               where niter is the number of iterations performed (0 initially)
+% 'restartfnargs' - additional arguments to be passed to restartfn [ {} ]
+%
+% Optional arguments for gmmem_kpm are passed through.
+%
+% Written by Kevin P Murphy, 30 Dec 2002
+
+[ndata nfeatures] = size(data);
+
+%Cinit = repmat(0.1*diag(diag(cov(data))), [1 1 K]);
+Cinit = repmat(0.1*cov(data), [1 1 K]);
+
+[nrestarts, init_cov, init_means, cov_type, ...
+ restartfn, restartfnargs, unused_args] = ...
+    process_options(varargin, ...
+	'nrestarts', 2, 'init_cov',  Cinit,  'init_means', [], ...
+	'cov_type', 'full', 'restartfn', [], 'restartfnargs', {});
+
+mix = cell(1, nrestarts);
+cost = inf*ones(1,nrestarts);
+
+for r=1:nrestarts
+  mix{r} = gmm(nfeatures, K, cov_type); % random centers
+  if ~isempty(init_means), mix{r}.centres = init_means(:,:,r); end
+  mix{r}.covars = init_cov;
+  if ~isempty(restartfn)
+    feval(restartfn, mix{r}, data, r, 0, restartfnargs{:});
+  end
+  [mix{r}, niter, ll] = gmmem_kpm(mix{r}, data, unused_args{:}); 
+  cost(r) = -ll; %-sum(log(gmmprob(mix{r}, data)));
+  if ~isempty(restartfn)
+    feval(restartfn, mix{r}, data, r, niter, restartfnargs{:});
+  end
+end
+
+[nll, bestr] = min(cost);
+fprintf('best r = %d\n', bestr);
+ll = -nll;
+means = mix{bestr}.centres;
+covs = mix{bestr}.covars;
+weights = mix{bestr}.priors;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/kmeans_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+function kmeans_demo()
+
+% Generate T points from K=5 1D clusters, and try to recover the cluster
+% centers using k-means.
+% Requires BNT, netlab and the matlab stats toolbox v4.
+
+K = 5;
+ndim = 1;
+true_centers = 1:K;
+sigma = 1e-6;
+T = 100;
+% data(t,:) is the t'th data point
+data = zeros(T, ndim); 
+% ndx(t) = i means the t'th data point is sample from cluster i
+%ndx = sample_discrete(normalise(ones(1,K)));
+ndx = [1*ones(1,20) 2*ones(1,20) 3*ones(1,20) 4*ones(1,20) 5*ones(1,20)];
+for t=1:T
+  data(t) = sample_gaussian(true_centers(ndx(t)), sigma, 1);
+end
+plot(1:T, data, 'x')
+
+
+
+% set the centers randomly from Gauss(0)
+mix = gmm(ndim, K, 'spherical');
+h = plot_centers_as_lines(mix, [], T);
+
+if 0
+% Place initial centers at K data points chosen at random, but add some noise
+choose_ndx = randperm(T);
+choose_ndx = choose_ndx(1:K);
+init_centers = data(choose_ndx) + sample_gaussian(0, 0.1, K);
+mix.centres = init_centers;
+h = plot_centers_as_lines(mix, h, T);
+end
+
+if 0
+% update centers using netlab k-means
+options = foptions;
+niter = 10;
+options(14) = niter;
+mix = gmminit(mix, data, options);
+h = plot_centers_as_lines(mix, h, T);
+end
+
+% use matlab stats toolbox k-means with multiple restarts
+nrestarts = 5;
+[idx, centers] = kmeans(data, K, 'replicates', nrestarts, ...
+			'emptyAction', 'singleton', 'display', 'iter');
+mix.centres = centers;
+h = plot_centers_as_lines(mix, h, T);
+
+% fine tune with EM; compute covariances of each cluster
+options = foptions;
+niter = 20;
+options(1) = 1; % display cost fn at each iter
+options(14) = niter;
+mix = gmmem(mix, data, options);
+h = plot_centers_as_lines(mix, h, T);
+
+%%%%%%%%%
+function h = plot_centers_as_lines(mix, h, T)
+
+K = mix.ncentres;
+hold on
+if isempty(h)
+  for k=1:K
+    h(k)=line([0 T], [mix.centres(k) mix.centres(k)]);
+  end
+else
+  for k=1:K
+    set(h(k), 'xdata', [0 T], 'ydata', [mix.centres(k) mix.centres(k)]);
+  end
+end
+hold off
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/mlperr_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+function [e, edata, eprior] = mlperr_weighted(net, x, t, eso_w)
+%MLPERR	Evaluate error function for 2-layer network.
+%
+%	Description
+%	E = MLPERR(NET, X, T) takes a network data structure NET together
+%	with a matrix X of input vectors and a matrix T of target vectors,
+%	and evaluates the error function E. The choice of error function
+%	corresponds to the output unit activation function. Each row of X
+%	corresponds to one input vector and each row of T corresponds to one
+%	target vector.
+%
+%	[E, EDATA, EPRIOR] = MLPERR(NET, X, T) additionally returns the data
+%	and prior components of the error, assuming a zero mean Gaussian
+%	prior on the weights with inverse variance parameters ALPHA and BETA
+%	taken from the network data structure NET.
+%
+%	See also
+%	MLP, MLPPAK, MLPUNPAK, MLPFWD, MLPBKP, MLPGRAD
+%
+
+%	Copyright (c) Ian T Nabney (1996-9)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+[y, z, a] = mlpfwd(net, x);
+
+switch net.actfn
+
+  case 'linear'        %Linear outputs
+
+    edata = 0.5*sum(sum((y - t).^2));
+
+  case 'logistic'      % Logistic outputs
+
+    % Ensure that log(1-y) is computable: need exp(a) > eps
+    maxcut = -log(eps);
+    % Ensure that log(y) is computable
+    mincut = -log(1/realmin - 1);
+    a = min(a, maxcut);
+    a = max(a, mincut);
+    y = 1./(1 + exp(-a));
+    edata = - sum(sum(t.*log(y) + (1 - t).*log(1 - y)));
+
+  case 'softmax'       % Softmax outputs
+  
+    nout = size(a,2);
+    % Ensure that sum(exp(a), 2) does not overflow
+    maxcut = log(realmax) - log(nout);
+    % Ensure that exp(a) > 0
+    mincut = log(realmin);
+    a = min(a, maxcut);
+    a = max(a, mincut);
+    temp = exp(a);
+    y = temp./(sum(temp, 2)*ones(1,nout));
+    % Ensure that log(y) is computable
+    y(y<realmin) = realmin;
+    e_app=sum(t.*log(y),2);
+    edata = - eso_w'*e_app;
+    clear e_app;
+    
+  otherwise
+    error(['Unknown activation function ', net.actfn]);  
+end
+
+[e, edata, eprior] = errbayes(net, edata);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/mlpgrad_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function [g, gdata, gprior] = mlpgrad_weighted(net, x, t, eso_w)
+%MLPGRAD Evaluate gradient of error function for 2-layer network.
+%
+%	Description
+%	G = MLPGRAD(NET, X, T) takes a network data structure NET  together
+%	with a matrix X of input vectors and a matrix T of target vectors,
+%	and evaluates the gradient G of the error function with respect to
+%	the network weights. The error funcion corresponds to the choice of
+%	output unit activation function. Each row of X corresponds to one
+%	input vector and each row of T corresponds to one target vector.
+%
+%	[G, GDATA, GPRIOR] = MLPGRAD(NET, X, T) also returns separately  the
+%	data and prior contributions to the gradient. In the case of multiple
+%	groups in the prior, GPRIOR is a matrix with a row for each group and
+%	a column for each weight parameter.
+%
+%	See also
+%	MLP, MLPPAK, MLPUNPAK, MLPFWD, MLPERR, MLPBKP
+%
+
+%	Copyright (c) Ian T Nabney (1996-9)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+[y, z] = mlpfwd(net, x);
+temp = y - t;
+ndata = size(x, 1);
+for m=1:ndata,
+      delout(m,:)=eso_w(m,1)*temp(m,:);
+end
+clear temp;
+gdata = mlpbkp(net, x, z, delout);
+
+[g, gdata, gprior] = gbayes(net, gdata);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/mlphdotv_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+function hdv = mlphdotv_weighted(net, x, t, eso_w, v)
+%MLPHDOTV Evaluate the product of the data Hessian with a vector. 
+%
+%	Description
+%
+%	HDV = MLPHDOTV(NET, X, T, V) takes an MLP network data structure NET,
+%	together with the matrix X of input vectors, the matrix T of target
+%	vectors and an arbitrary row vector V whose length equals the number
+%	of parameters in the network, and returns the product of the data-
+%	dependent contribution to the Hessian matrix with V. The
+%	implementation is based on the R-propagation algorithm of
+%	Pearlmutter.
+%
+%	See also
+%	MLP, MLPHESS, HESSCHEK
+%
+
+%	Copyright (c) Ian T Nabney (1996-9)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+ndata = size(x, 1);
+
+[y, z] = mlpfwd(net, x);		% Standard forward propagation.
+zprime = (1 - z.*z);			% Hidden unit first derivatives.
+zpprime = -2.0*z.*zprime;		% Hidden unit second derivatives.
+
+vnet = mlpunpak(net, v);	% 		Unpack the v vector.
+
+% Do the R-forward propagation.
+
+ra1 = x*vnet.w1 + ones(ndata, 1)*vnet.b1;
+rz = zprime.*ra1;
+ra2 = rz*net.w2 + z*vnet.w2 + ones(ndata, 1)*vnet.b2;
+
+switch net.actfn
+  case 'softmax'     % Softmax outputs
+  
+    nout = size(t, 2);
+    ry = y.*ra2 - y.*(sum(y.*ra2, 2)*ones(1, nout));
+
+  otherwise
+    error(['Unknown activation function ', net.actfn]);  
+end
+
+% Evaluate a weighted delta for the output units.
+temp = y - t;
+for m=1:ndata,
+      delout(m,:)=eso_w(m,1)*temp(m,:);
+end
+clear temp;
+
+% Do the standard backpropagation.
+
+delhid = zprime.*(delout*net.w2');
+
+% Now do the R-backpropagation.
+
+rdelhid = zpprime.*ra1.*(delout*net.w2') + zprime.*(delout*vnet.w2') + ...
+          zprime.*(ry*net.w2');
+
+% Finally, evaluate the components of hdv and then merge into long vector.
+
+hw1 = x'*rdelhid;
+hb1 = sum(rdelhid, 1);
+hw2 = z'*ry + rz'*delout;
+hb2 = sum(ry, 1);
+
+hdv = [hw1(:)', hb1, hw2(:)', hb2];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/mlphess_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+function [h, hdata] = mlphess_weighted(net, x, t, eso_w, hdata)
+%MLPHESS Evaluate the Hessian matrix for a multi-layer perceptron network.
+%
+%	Description
+%	H = MLPHESS(NET, X, T) takes an MLP network data structure NET, a
+%	matrix X of input values, and a matrix T of target values and returns
+%	the full Hessian matrix H corresponding to the second derivatives of
+%	the negative log posterior distribution, evaluated for the current
+%	weight and bias values as defined by NET.
+%
+%	[H, HDATA] = MLPHESS(NET, X, T) returns both the Hessian matrix H and
+%	the contribution HDATA arising from the data dependent term in the
+%	Hessian.
+%
+%	H = MLPHESS(NET, X, T, HDATA) takes a network data structure NET, a
+%	matrix X of input values, and a matrix T of  target values, together
+%	with the contribution HDATA arising from the data dependent term in
+%	the Hessian, and returns the full Hessian matrix H corresponding to
+%	the second derivatives of the negative log posterior distribution.
+%	This version saves computation time if HDATA has already been
+%	evaluated for the current weight and bias values.
+%
+%	See also
+%	MLP, HESSCHEK, MLPHDOTV, EVIDENCE
+%
+
+%	Copyright (c) Ian T Nabney (1996-9)
+
+% Check arguments for consistency
+errstring = consist(net, 'mlp', x, t);
+if ~isempty(errstring);
+  error(errstring);
+end
+
+if nargin == 4
+  % Data term in Hessian needs to be computed
+  hdata = datahess(net, x, t, eso_w);
+end
+
+[h, hdata] = hbayes(net, hdata);
+
+% Sub-function to compute data part of Hessian
+function hdata = datahess(net, x, t, eso_w)
+
+hdata = zeros(net.nwts, net.nwts);
+
+for v = eye(net.nwts);
+  hdata(find(v),:) = mlphdotv_weighted(net, x, t, eso_w, v);
+end
+
+return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/neterr_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function [e, varargout] = neterr_weighted(w, net, x, t, eso_w)
+%NETERR	Evaluate network error function for generic optimizers
+%
+%	Description
+%
+%	E = NETERR(W, NET, X, T) takes a weight vector W and a network data
+%	structure NET, together with the matrix X of input vectors and the
+%	matrix T of target vectors, and returns the value of the error
+%	function evaluated at W.
+%
+%	[E, VARARGOUT] = NETERR(W, NET, X, T) also returns any additional
+%	return values from the error function.
+%
+%	See also
+%	NETGRAD, NETHESS, NETOPT
+%
+
+%	Copyright (c) Ian T Nabney (1996-9)
+
+errstr = [net.type, 'err_weighted'];
+net = netunpak(net, w);
+
+[s{1:nargout}] = feval(errstr, net, x, t, eso_w);
+e = s{1};
+if nargout > 1
+  for i = 2:nargout
+    varargout{i-1} = s{i};
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/netgrad_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function g = netgrad_weighted(w, net, x, t, eso_w)
+%NETGRAD Evaluate network error gradient for generic optimizers
+%
+%	Description
+%
+%	G = NETGRAD(W, NET, X, T) takes a weight vector W and a network data
+%	structure NET, together with the matrix X of input vectors and the
+%	matrix T of target vectors, and returns the gradient of the error
+%	function evaluated at W.
+%
+%	See also
+%	MLP, NETERR, NETOPT
+%
+
+%	Copyright (c) Ian T Nabney (1996-9)
+
+gradstr = [net.type, 'grad_weighted'];
+
+net = netunpak(net, w);
+
+g = feval(gradstr, net, x, t, eso_w);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/nethess_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function [h, varargout] = nethess_weighted(w, net, x, t, eso_w, varargin)
+%NETHESS Evaluate network Hessian
+%
+%	Description
+%
+%	H = NETHESS(W, NET, X, T) takes a weight vector W and a network data
+%	structure NET, together with the matrix X of input vectors and the
+%	matrix T of target vectors, and returns the value of the Hessian
+%	evaluated at W.
+%
+%	[E, VARARGOUT] = NETHESS(W, NET, X, T, VARARGIN) also returns any
+%	additional return values from the network Hessian function, and
+%	passes additional arguments to that function.
+%
+%	See also
+%	NETERR, NETGRAD, NETOPT
+%
+
+%	Copyright (c) Ian T Nabney (1996-9)
+
+hess_str = [net.type, 'hess_weighted'];
+
+net = netunpak(net, w);
+
+[s{1:nargout}] = feval(hess_str, net, x, t, eso_w, varargin{:});
+h = s{1};
+for i = 2:nargout
+  varargout{i-1} = s{i};
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/netopt_weighted.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+function [net, options, varargout] = netopt_weighted(net, options, x, t, eso_w, alg);
+%NETOPT	Optimize the weights in a network model. 
+%
+%	Description
+%
+%	NETOPT is a helper function which facilitates the training of
+%	networks using the general purpose optimizers as well as sampling
+%	from the posterior distribution of parameters using general purpose
+%	Markov chain Monte Carlo sampling algorithms. It can be used with any
+%	function that searches in parameter space using error and gradient
+%	functions.
+%
+%	[NET, OPTIONS] = NETOPT(NET, OPTIONS, X, T, ALG) takes a network
+%	data structure NET, together with a vector OPTIONS of parameters
+%	governing the behaviour of the optimization algorithm, a matrix X of
+%	input vectors and a matrix T of target vectors, and returns the
+%	trained network as well as an updated OPTIONS vector. The string ALG
+%	determines which optimization algorithm (CONJGRAD, QUASINEW, SCG,
+%	etc.) or Monte Carlo algorithm (such as HMC) will be used.
+%
+%	[NET, OPTIONS, VARARGOUT] = NETOPT(NET, OPTIONS, X, T, ALG) also
+%	returns any additional return values from the optimisation algorithm.
+%
+%	See also
+%	NETGRAD, BFGS, CONJGRAD, GRADDESC, HMC, SCG
+%
+
+%	Copyright (c) Ian T Nabney (1996-9)
+
+optstring = [alg, '(''neterr_weighted'', w, options, ''netgrad_weighted'', net, x, t, eso_w)'];
+
+% Extract weights from network as single vector
+w = netpak(net);
+
+% Carry out optimisation
+[s{1:nargout}] = eval(optstring);
+w = s{1};
+
+if nargout > 1
+  options = s{2};
+
+  % If there are additional arguments, extract them
+  nextra = nargout - 2;
+  if nextra > 0
+    for i = 1:nextra
+      varargout{i} = s{i+2};
+    end
+  end
+end
+
+% Pack the weights back into the network
+net = netunpak(net, w);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/FullBNT-1.0.7/netlabKPM/process_options.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,132 @@
+% PROCESS_OPTIONS - Processes options passed to a Matlab function.
+%                   This function provides a simple means of
+%                   parsing attribute-value options.  Each option is
+%                   named by a unique string and is given a default
+%                   value.
+%
+% Usage:  [var1, var2, ..., varn[, unused]] = ...
+%           process_options(args, ...
+%                           str1, def1, str2, def2, ..., strn, defn)
+%
+% Arguments:   
+%            args            - a cell array of input arguments, such
+%                              as that provided by VARARGIN.  Its contents
+%                              should alternate between strings and
+%                              values.
+%            str1, ..., strn - Strings that are associated with a 
+%                              particular variable
+%            def1, ..., defn - Default values returned if no option
+%                              is supplied
+%
+% Returns:
+%            var1, ..., varn - values to be assigned to variables
+%            unused          - an optional cell array of those 
+%                              string-value pairs that were unused;
+%                              if this is not supplied, then a
+%                              warning will be issued for each
+%                              option in args that lacked a match.
+%
+% Examples:
+%
+% Suppose we wish to define a Matlab function 'func' that has
+% required parameters x and y, and optional arguments 'u' and 'v'.
+% With the definition
+%
+%   function y = func(x, y, varargin)
+%
+%     [u, v] = process_options(varargin, 'u', 0, 'v', 1);
+%
+% calling func(0, 1, 'v', 2) will assign 0 to x, 1 to y, 0 to u, and 2
+% to v.  The parameter names are insensitive to case; calling 
+% func(0, 1, 'V', 2) has the same effect.  The function call
+% 
+%   func(0, 1, 'u', 5, 'z', 2);
+%
+% will result in u having the value 5 and v having value 1, but
+% will issue a warning that the 'z' option has not been used.  On
+% the other hand, if func is defined as
+%
+%   function y = func(x, y, varargin)
+%
+%     [u, v, unused_args] = process_options(varargin, 'u', 0, 'v', 1);
+%
+% then the call func(0, 1, 'u', 5, 'z', 2) will yield no warning,
+% and unused_args will have the value {'z', 2}.  This behaviour is
+% useful for functions with options that invoke other functions
+% with options; all options can be passed to the outer function and
+% its unprocessed arguments can be passed to the inner function.
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [varargout] = process_options(args, varargin)
+
+% Check the number of input arguments
+n = length(varargin);
+if (mod(n, 2))
+  error('Each option must be a string/value pair.');
+end
+
+% Check the number of supplied output arguments
+if (nargout < (n / 2))
+  error('Insufficient number of output arguments given');
+elseif (nargout == (n / 2))
+  warn = 1;
+  nout = n / 2;
+else
+  warn = 0;
+  nout = n / 2 + 1;
+end
+
+% Set outputs to be defaults
+varargout = cell(1, nout);
+for i=2:2:n
+  varargout{i/2} = varargin{i};
+end
+
+% Now process all arguments
+nunused = 0;
+for i=1:2:length(args)
+  found = 0;
+  for j=1:2:n
+    if strcmpi(args{i}, varargin{j})
+      varargout{(j + 1)/2} = args{i + 1};
+      found = 1;
+      break;
+    end
+  end
+  if (~found)
+    if (warn)
+      warning(sprintf('Option ''%s'' not used.', args{i}));
+      args{i}
+    else
+      nunused = nunused + 1;
+      unused{2 * nunused - 1} = args{i};
+      unused{2 * nunused} = args{i + 1};
+    end
+  end
+end
+
+% Assign the unused arguments
+if (~warn)
+  if (nunused)
+    varargout{nout} = unused;
+  else
+    varargout{nout} = cell(0);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/AuditoryToolboxTechReport.pdf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12278 @@
+%PDF-1.1
%âãÏÓ
+1 0 obj
<<
/CreationDate (D:19981111211536)
/Producer (Acrobat Distiller 3.01 for Power Macintosh)
/Creator (FrameMaker 5.5 PowerPC: LaserWriter 8 8.6)
/Author (Malcolm)
/Title (AuditoryToolboxTechReport)
>>
endobj
3 0 obj
<<
/Length 35946
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiR!.kJ8R=b6B.YjH(5d>/-lF?Eh",pEtApV&]dh0
+=B%A7703K]:t7+QL^m;@W4F`9)i]QhBMfCQ5rtDC-UW1#o*RFGc%[HgibLIk:kiH\
+Kb>G+UC%2_GTdt]$&+"$;45\15Ve#3j!@7OG%EM":*L@Moa#FqT?g!e6(led%2Om+
+_[JB;)I!me75_>=-C7F@MfP'QTVQ$P(^_`M1O`+e<\BXD<a$fD)&&OY`^>!X@Po]t
+=6;;#,j$11[14p$6'1.m/JsHN_i_ahBjeu=$Gqq.KZYajS?p+16-Rbq2d=6^SQlrV
+$AMi?]/h#INQL;RH1i2qhgKkVN5f,:36$Ug^.^U2-B'0W`i0E@!2_X_,BL$7"Turf
+eM.L/L;l3u5[5.]0^JoV1T^JT0oZ9SdP8P2!2MB1%)?$b1aAYY&]9W=&r/ej>7q_W
+!LRVS_alk^a9a)1kVBbDdm?,"+d9GN`FG:X0TK!Q5U"+jT\qg>is=l;NR>r?(C!0m
+EnX&<ptGkcj'^R`%5Kc%bd*CBS.n5^F:L4Q67N1mUVVauU.h\^B/:`fW8o^bXa"f?
+aj)SN)^+*uI[s>s83eDrJl;;"+TVT2KH]>g5V7nmGfYVm"%Y\3dHc$li@r@-#_U7L
+TKkD9#^C$<"kBOj>D*ag'Z4"2+Ceg3To'Lf=8$3H?.ZMrIqRK:25b!=2UH4!=r(DV
+MV!pnO',^'c"1os[p>D8<u%9oEmaTgS.Hoh25OI0Qdrckhq)02HJ:`k++3"6($Ten
+pVkZ"37qN58n$?][tii87Mlt#Q/JO#cfdH#8quP%f#Fkd"*2B@M/$TA0.<i@MSK^#
+WYsA\7T(]^_*DP::Wl]tM;\4AF+)l&L5s/[W8<eT"rN6Iib4^"f)=BIVQY>N)W$m\
+lW4"cVefP]Gt@7i[``.H)a6p"X]p8!\D1,&]=DdIOCT>H$[rPcDjj/'_!.60K>-=`
+cuX9VH7Oon?^j7r[-?A;^V)XsK8X#Er8/p1F$..7Xf&Z]MpcQEk>B+N*FA?bg"V$i
+f^=0Zl__E[VdItu<14;Vp>&Mcg[O&0^Q*lTq?2Q69A;WA.s8`:gTaB2T:Y0O^1=pO
+]q7n6B+fB0Qfk'6J:YbrB)gdM^),8ErV[O3)hrd-l1]Z*AfM]g4koN;)I%Z4n,`8K
+8+c9n1]BiQou=6"(@[uE#?YBM`&?/#Kq1%1K+'4;\;(Kri2]a8NRe<7@c7G54;*<a
+64l/bi,KasO]ZS6'gkM+O.gq\DICm52eX3B>Y<e)O0)imfJp1,r()96(*U<bR04]i
+\;<qbj?0;+?HA66LQ>#k&]RrGfm#2%O)0T6;[E-T#W7!@I@c']cF[*!moBR'337gg
+%*5MmJ]A@H7qf!q,/FO_Xo0V9f;d]\E$tmk)E4g.h@<-j_Ig);8?GF.*b9qE=GIYa
+Z0"=p)&W^AJE<:;6=c#7&UA%F3CC,b.W)"so8`9])9V(!oHgTEO7,8/TAgoch].M1
+&iEe+`qmOXbf5rH?0DB9NtFoFb)au"?9I@@6<"iBPgQ_'8s4*BeV_A,;GM4%Bpgtk
+gfden:$'W%ZRCXP0KJ7E`Ih)-cXn/s:\0<`cBXj/fN`isdHQKR-7oY#S5P0e?%BPE
+)FWR!8W#>jjFGV;*#IYL+TU&_.'OU)_#S@QKI#HR)+cFu_YGl"TmkFt%RJ\p246)A
+IaQ8V6>;?;V<^s4"WBj:c2hl4MB-+A"UpH\cnVK[ATH5Zoh0#L:T:`jS1DGnR:_>/
+C<@T&'LpDM.O@ZcFXEg*>0/BA[9%Zh*/_,_ZS!.jDc#mG1=[6/<\$O@WTkP..+6X/
+Sq8Y5<=Zi'E,/T\eT-/!C:2^&cXU$f<sI,"?aX9X@AU(c/QQ2nOS]Jr)\&03()kD!
+>5W4!`&qe`3l'9Hj"t9+B=!cPcWRk/D,d'jZW17gfFfsgMuCA*<sDj^j(E0WK64=V
+-Ic5QG]7Jm6tsHrdb!(EBktE#[8"4"h6u?fC1X;n('N>O=agf1UPl?8>3]3.mjoNL
+B>,,SX4#p?>?qE/BcuQdhODi<%Q(T/(R!sO>QP?N8R&jp9*JE:pO?FJPeAtQaIeg7
+oF@r!"qr?m\u[huE+*"fc79"S]FNGI@9ZRUWsq5I=bj8)[4?E!&C[]lkjZ4K\aJ2\
+7-A2><4ffa(20i1*-$l+P:];UmG-[C;XSA?2KtQYjQ$.mOVb`)Fq\@.fB6e(mJFH5
+f7ho;lWj1hl`e9p<93"r?&D>\(g';o/k9aBL,1"Rc-F3Ak'E;a1"p3V(J+IijF(B2
+ef;uS_a$8aifCDmO0B@'6I[])H#tYhGmEXMk`$%IoIW,R#O>5o8q'.EP+4a?>"ZF/
+\"Mj1q5/uEr)::Bkj.)lf+S)#\hf8;p%AF<>#@ZP//)0Kp'fUcb?JdGAX>71Z\DSZ
+YV.Qj@eHV'XcGdm.!u*Rh,9'^3o^sXb5$cN2-Sd^&j0TY!q7bDakK\_6+YfN]j2]R
+g^!"eXo7jp0P,i4G1RGs7L^?6XdJ&<:B>=VI<mkrq,"l],$)DO/S7cp0Um,1938\6
+Z@'(7q4AV)4KHCZ_lBkE;gd(Q.BtP@%cJ82P=mHLc#]F6k6k.JUZuu4hq^'BR?O<m
+4O;<`H21A9RF1Z@6&te/p#eHLWH6@MbIPq4cJ%MKoM2C7GZRDo=,.LUhRh#*r2u7=
+%rQ&Tn=]DD/5Ub5[.N3>d5_)=5:uoGn:iCLF161qrVN4u?EMh&k*YRc-.1I$D;9Ll
+NLDbFeT_$8Nqs!"n(bKLpV%BCHf#q:]_!._rFueMroWkp1WoPI)oVW7'6tFmdeKCF
+%H[E2k2*4+K7@et4kC+MP@a^-9t>m?15"B+Qe!7NEV!Q#\\bZlDC_W8@/d>fq*(/"
+n>19]_7c63s'DDspZK`68)A?;A*&0R1Q"A?$Jk_DM814Znbp3Ernl3&B01qB%CEX+
+R"5Qmq1hq:YKZge^A/<3rF`_C/5lO;c@H;+pC;$@&12nlFTTeRDi'qc..EWY3-8\W
+=c]M4%]]@Z8HWSiJIf\:YR^k5>(?"a"pb/3mLTU,$uZX-#>(BF+E7GKcNktgb-68C
+N/0KnRgCaj\L^Ybl(&&1!t$_D!U61LcjF]q%gm9Y#;@Y96h7o^UjlcmRP:]0nB.0#
+_G&<7b_f/FN6_qdW-(qM#cC0&Yi*Q@jF=(XV8rHCOAbreq[bIA")b.MYJf_1klaio
+$nod9:r<kt&5;SBgJKAKN93-WRa0;;IurIkE8qQ"mej60$nm#+;)8pUeIM(lQI*MV
+DUf.L*u2_&!3p!,d9r/'@03]D(9gL1-lab"I_7!k7M%&rL_cDYq\_+BP0nIgAWju/
+4W2TRmno&XEHMA%%2pSiJ!#hEOa`hA.2rGD7M&!-BI=`rFVP4K_f:/Fl!513UE&fG
+r3=U<&_S/*Pl*8iP,J*("CWD"JJp2aoE8S'mlI%;Po!8p+Wt/o;?%Ig+=Jt8+UKtL
+EP3Bu)^=g4R;)OB-#Fmt-s8;Z-o*FadLpb%5_A.a)p'YS1//ab"X.U(H1Ea<:dlZb
+!l"ng&2BLuEW76O`>)9B*\2R_15pJ^IfrVK,VR=hLbA2;q'UkJ(\3egadX`X0*cNj
+=7Vt-n/j0\Po'"j'iH8%P.;e+V^t^n.Zu//o"pSb*X;2RJ24!S;XH*"?S-<[!j]Bo
+'$,XQ!@VY6/on<YONfHL>:A]J0liN+P(OaV"YqkA)m^D:'!1B9M$%>;306O^YXDc\
+2_-[71kh(s:s?e_2])'H9X=gXn2C-aB)GH=L2r82ZAg\8$mP9'r3L,tP,,T99fOqO
+2Nm/,F+.#.=YN_W2cG,W:`h\QbrA7,3cfF)F'C]S$TSj]$?Krll7S4<VP?R2USSg'
+$:L\D69#*-HnbaIW`D#n_F'.Cpr['+N``2+r3K>EDpY!TWdR#s&u[&Q/atl:bl2Nr
+R6_s85Ek+ke)<I5>s4q=q[FsW#52=PlTiJ^X+p=^1`3PkKg=-V5dV6@VkuGT_C]=)
+V/%/AX,TKnLo]WW7UjlHoJ44_!5Qb^Oll;fV`(fE@'PEmV!B*nYtDJQTYfi][VRS)
+9/.E%5*=uk7r^AmP^L9MR)M^!RO23Te@`BBS@O\:8kX"mCu2eeTH\0%^a^`jC]]43
+O%F,h94GKBBsC=s`0iAm\na#ICZS@XR(/CA\"^<L<=GUZY.SCZd"`];CTS"CYu!:.
+\VX^>lfCp,dm[6f6VI5RV\N"np6YG!3&KF(o\@sGGg>K')GM'daaVM_,udP_9l'K!
+O5MO'F=l$HR3LG(eU5U6>djhu5?3NT2."JMPYu=$H52ge'qERn51GO2=*93uED"9(
+o[^<aOUQqHbr6g=U<*#I_o3'fm(CT>%Wq9H?"[QO%=_UL36QH\?Bqt>D#U>FJBpi2
+GDU"V(#ZoneQseqQOX;JWICqhJMISVdE/VnQ2INGq-lj=W:U$mMSik;B$k@*dP`/j
+m2odQ&=4-<=c2?k@qM&:2e=SddFLA1b+d<6m*I9bh5ssk/^n,d<iGCJXL<Ie9Qo!&
+"P(\'`_,s3D.R?SK4k]7B!8)5$S']MFOpn<f*\h:<Zc)b4(p,Ma3Cis/S%]$.blq^
+gam;Ub\Z=Ag>`G3geKc_/.Tnt^;u;aCi*a!XENMlVVV\YcHYBdm:C/eE4`R>]GC(H
+%c#q+hW7FJDp)&&QM#8+cL4fdQEM")DBS%6Wo#`Rh^`,Rf+DpO#f/,i`pQiC:!I_g
+&E@XHj\-t=/<&EpKZ6b[FNsW(%U-eg<HN,Of8!PlN*baB\TWp,h^c:r/<&5AQ;Znu
+e4cn*=+\UhFEL85H>]!lcCiZ^6KkMHktK[mX[L6sQ[DJX@d=$B%YE-S][(f$HhXLb
+f>2lo]^3fAI>h4mCr#;;/F6I!8'I`4-2>jTK%Nd/hq.ej\+=p4eUL9Ro*os7:?:*R
+hUf68fM8lofIkec.6p:#eP>nDmek-:7dk/Do^,'>9gmHJs+6:)bDtT9%ktn['"2ZT
+nuSU?$o*H0JVQtHo*uIVmk4!g.alNYL6#<OR#^"K0]H_Kp9%<c/\&f&K8-QmM-+VP
+0/2GQI.rYapm@ZO\:j<g-]2#oM_7!_mrJ]YHMQufpof4loXBagffq+_g['cTQ7hrM
+JGS\_b`B5n%tMg4kE&J\9ec/.Dm&+Om/;rpIVsXq%k!MML<"QVmEpIP&(]]B(?7CQ
+O0@.*/W#UN%/c*q*>mAhcP8*/HMqbirGJm(3D5YU0pF:;f!Pq[Vrm%,2jI/krqU1%
+fhmonAG5E*.N$b<BD.^r<rh]brHX;%c_6ZnVZRg#!j#s!YE&gSRXT0RRG"muR?[\a
+nE996kG3G2H'8G/8H`2"S<-;4C`*?%<LaX&a3[HV=ka7%EsE0l]s.'Y&Oc]hRfng[
+SU&Te0^YAB8XV;;"HbtQRKii]`<aj(a)I:R&9A+O[0Vn`JIn^]Z!dcsKqZkCUlhRF
+&fV7@$IKF(+D:_M0FnqF72'u!U[]]5\P3Jfr="l'%e<I,qJd#8X/Jm\%oPJ&0K4Z(
+fU8jW&'`?0br6+&7gqG.%[q^rM+K^I#;\(8WKAPfc5BREn9!n;H3IdgO35;-`4)uf
+WK?R)nFZW]`=h21'#b<L&GgaaYn!5p``hW/>1413c!]VW/CY1EcqUV39ru]S(E45)
+bQFBsD&QR')C^.<d-7heM%dJp(0\slonm^NJt!]JZJ-#90mp;H0VYhTNtM#Q/))#3
+be-#AZD].VlWk:<B"@eS(6!8Y&_e8/Q*Paj[ZSV<d<(d,W7E]JXO7)'S"1GO<>fqW
+[P?74dDVqZPgY]=YqgSFgSYqDPq_juNu<n.C50BJ-a)Z$a]*+"4/3]U<@M.FNtYJC
+]+[!4n[1g=(p&t8>:+]teJ^LA]t3Yh>Ka_X')iLRH4]DJC]b0PUV\Ns_5Qn>g<IMH
+Z+#l<"Pb&MEZr5F=DS,aM8bIjbEKm*bd0eQ_gDd,gacW7=1=>HV"-jA'TFE/;'kIV
+_FQ&k4B]Uae%:c-`lKc;r(Ah>ZDDS.RP\9%]H+IDQc2(&b+*fQ-*P57AL5!0@AM-`
+P(55*RERCJ?!>E"]H&?!Fiii5_:rZNeN_-:;\G6\c@"0YdLBK]1FBBe'2jt1dXIT0
+cQ_Y0cuNnO6p2eY&;mD=.%>?),AFVbdD<mm5buX]>kQPR0LOWPd')S5qum%2Ihc62
+.ssM.V$o_se^BUC='\JK*DadJbf!CG38Gj7I!ULZHd`rZdiCfqP3pXF0A%cO(o01.
+dK%\b.5^sASC8Y+SX%It,1OMeaV@!mh5mq[MqM?0g&+c+)rcU!@2X,0]7"\8ba=*2
+k:fgMC0e<UL5Rc*#;EA@g[J?&Y`UWD/&@EH(]CrbXnURg-<h-RM=WjJ'+2UIl$$FP
+M]92ab=a^s;f:F"`ne53S\DI:aL#6D@t#3"4*W>r9WL]Y*]:X=N==G1LKV]%W-)X*
+C5:I5:J^RJ=jp>AcqM_@LBQ.#gN<H5(/7'#:/K(]3/%cm_hb7?O@dsR)UjsIrT!/7
+QePhT8U\57rP"I7EfgH^gZ*#6ZO?#'dQNhPao76&6Z)%9d5"R!5#/4B-"B&L.6jgq
+4VOk_ZQtSm>Wp&;gk@$'#[g\=Sa5o!YJMSKC/$k90g:gOGomk]CALiWnNL])8Q57Z
+DY0ja%mXSe6u/r?e/5@\)*W-ang[H+$DI!k$V)1$6Xu$B<'A/lNBk\)oA7o/71$QJ
+eOZes7>W(gMVaPSoR&l7oo!h_N0o^@X[f:`Cd,g/8L[3&UIbE6^pM9^e=B94U9<q/
+)>(-`F@CTLbdWi.6ViJ6[(L*0S?DM-rJ?_5oIj&mT2$*O\BB_-$XZJ;P>:$0r2^51
+!WY%g%)sN#!ONb#*"?:p;$!s9$\lPC"!P2:)D[)b7cT<KDClo]%-(r5N+*)1KFEV\
+#]*s#/V_<?Yp^kq,6F@U#8=%X6;9#%%&6_*bV3ZtOAXqG+cS*["I_pEF3-\e?k&ch
+AHO=p+D*=+f;!L.*0Of&Vc)`#q2GkA5R,kOPaF=Y@7,Z8/2TB+R[[uDf.]%mljDi_
+)q/A"0nbEeA]N87GM6p3@<EH"1KV0<b[XEd_'&R[erJR`J_5!G%&h&[8_<<L30B0c
+8#;d?n6<IuP[gWB?SjgSG8!E@gMB>ub5fONc/<\`)@At6M7C(Z2]*u$-DE<.h!KDM
+od>rQk\Bsu:1pqDba`ms=&GK6_.:sTImZ>%q!u!m"2_g-:CB;]+MjFYQTm'\(p]m\
+>-as5&,XHF6L%51WP43SBW%p@A/<\%C5a;93KTnF"U8sO'biIk63\>ROV:M/XKDC9
+mDRDINq,R.!g=/&0)K\nX6Z8l)EkB:(>d)?UjCHZOjc`=YqHf)k=KW=rr5QpdWI+_
+CTP\89N';,)DQ4G57L'/UX(X91"9VZ7LtsN#XNCIq(+;+"DKj5o;(&,d"s=L*&4aP
+BaR?do#j>8E7FbCdZHXR4srXt)a5\br@"HGP`3pS7hn`A7DWq>C80%6NF>F[E@>O!
+dPE1kJ^eL,BTWM([.okf<2GKodk5KU=4rl)[dV^`CmAS`Y@q[u=Nff#B@<(TP@2#G
+SS70/Y%m5?YP'iNZJ-,[HYH\c)PS.][Z/Z(h2Z9sHIoW+d;-,`lM5I+2/Wibc.<tC
+%0j4gq+kAlp"Ok%omHdmf;tod=lHl=gJM=C'JF.P1iR5>_O3kNG2p&L)40HD88P6e
+NR2LhB$9=V?KG3?2dkhem9?/E;$uG)2#69XV+>nb=.S30VJPcn%fVWBlO*]/]'C6j
+]+XEJWlq.">"3QXBaNA$S#I?=GIL)SArX*1>7Qp3BcD2n)aQcrgV2u*k\[irRpP3a
+gduOXVi!f)ot^g`0PlkeS<>cZko?lRP]3*>42>mL)e6AA*@:*KF195/R_8T2ZG2.M
+#0G$[4b[+l]NA,2SARY,F4Y$;O#u=d0LFn@kub`>Y-PcRZep!806=q4Su,*?CUA&!
+[DJNtZfc,;p6G1G*QOYmX9$&j*-17u1B/dDJ(4^FrjMdoI@d%^kBjn[ok<O`fXpmU
+!7D]CIh,8_5EZ6LOcVMPC;g,b-^+,[U*YC&2?U]r2Zm8X'7m1mrt:*Yoq<Qm,HuIq
+_PaL=?,RE]:SbORJthgCE".7-dKZg=E+kj=I#"qZZGWI9$6_L[KStZ`RWm>#J\cJc
+YlZ<pfReU4lpQN2c5O9Hmh?S[4b9N&0L$D0']L*+MNKVV`Rc_lUA-O(Yso^#13Edo
+!B,Qb!Vo25l<iOu%?Jn^<l]qK%Nh[8OO,io7u6sX@N9N;#Mo6Ti,JbDUm6M:+o99h
+jX2=tK95TDqnYeV:*I_'LJcik6`>PB,eTq/E"59-Ba6-G#r4^.Q<[&'B.K\r'U@_h
+?6/ic"G+[h#71$5bUIX5A`<BKBabtSAQpqLl+.*HSj/R`ZS87UaI0@gZHQIP1*MP;
+#:7r3_ft'#AeNSu,jI'XalIAQFA&-FC1U,<Pr`Dh&hF^kUeSA]Ml2a6.?[;CcnbV`
+B7/a18%*c,,83G*\2BL9jTQ4+fNdXi_KTDKfZAu\8C'F@U@^'H:tc-Dd<-[D!9R5u
+>%L5P*@@:uDNiJY,=na/Ni1A9$dR0g9W/7G-<"qbTh9)Kl+Fm1P`2]f8s%HI@8WG'
+6E?2/P=MWXj-:?7U:"AJ<mbrm6&(87eY$>SND4#cW4JcM1C/o.9im=\\:dq8O]H6H
+@]P]_d\+KR2JDK2X,/80(Kqh`/7F.8'qC97Rfd3eD-U=H'"k'q2.'#jRB^mRnY!aA
+8*a`_-PhGh=_e@eCl(h<<g'U>U`!N9]sY4J>1?\j)/;ji\[EgH]VkWu?;1$b"r6dM
+TYqOQ.qQsTG2ekCX(QPeEh'[jK!!Y2@<S^UCc445^YK8L?Z(kFX-HHM\U,cL!O[2'
+2^$)lMmu9Y7;T]h?LV7]JTbeacb%`_ak@]D7P,'c^qdbQTZcq2md67RGMLO&bLph&
+Xqa$B,6ZYl@S<hg>/Rgqa9)haK('fgZIe6_i_-t?0_'FoB,:[$>\/dI"u!pI-HtH(
+.^7;#0Z']acsdsYN=(+I6j.9)j%B_[;$C^Vfb46l1IHjr##DRC@j>3Hp2FmR1pN=Y
+(td%/Q]ZH&X\%t,e]P"]o4B_K\\`8p):a?12-hKKJiHRhI@0&T6Hg!!Zl=DsN*CI:
+<*;XcAJh+Hc+In*flS-%eS+jMU7T]2MT?@j-\r@g[g"=K:atPtLa^-:\=/.1V_'L"
+Oo9p]LrBoI/7NtrMCl6iKaF]b5`9I;nMPKcopS#0FE8&<bZa%5+!"FU_7XVRR;5ri
+gM*n=Q67]gfWO?]+gK1*a$^Q)VW^1]8p6NOb2m$.hp`'%D8,B[L3X=FIH@^-<O"%d
+[pWdoF2!eA6Rqb5GT9noH#[I#1e(8mPo^["$GBtBGlXXLb4^C]D;EaS^rc+Q'6HiD
+FL$:D)cg8SK)!gI8mo\tj5QTja^J,T"g""pZB`Z0#peX1g^k+ChF>'=+Y!?OfT]-:
+9mEdl-sK?5Pg1f)/VbSo6n9W#65@PO^c:B0qSqJMlcZ/rKBo<eKj9'uea986Un!XR
+;,5ZekFYT<f!tSMmD)f7opkI+Ll:o.UFLV)$Jg@PMg$fX(/gcNZ5llWoK?!qhZ">\
+Ug&?Cp^+oe/T3sHZ]>s1=hFSC2Vn>tLa(,LjZ<Y7lqKf,LCbAG$#uFZaKUY=&kF!p
+-k-OAJ2_LE5F)/iAkINm9(Gc3juhYki4]TL&n7G*M/[JDrjI#q"%lTUl9P4&33;Bd
+U@iqL`^PW/g2k"oU;Dtn"<TT7I0($K\uDMThK,b2%=gd,^Y'ggDs@&3V:FlSqRY'#
+&$)T<X9#lcG6k8G]1Ah^'Eu6mq2:?<3tT78=;j:7nI"mrMOXbT@)5)2"2OE`\kEBs
+6Pp,4LBnh9#cn_#!/eS!"2NSp6%G%_PFFgo^VNK+O^j6`g!:('O?m@5_-;c3oFd][
+M[^=Q$!I[l+ROuhe$pNR_=NUPOI\_3(.,9$#mc9H)uRS2O?;*cLo_piN$J[BeAF*i
+PZWVGnA^8\Uc5f>_h8K:$XH+:O[H@56c%foPB"?h>RF;pM]=P[Yk<jOT0V*b_hbFP
+*!%HYZ3s4?`"8fa,Ai=F5<t+;OH@*_)%A+s]*_ZJ5k9gpR(%rf/hQlC%FZ._:qfA+
+Kaa'JN:WN-!18Z/8?V1pMo0$6B]BM_ToF<A7L7!KB]>!hC,7Rk%Ns^>kfJtZ<t8X^
+`Q7-QP<od6h)3\tNZdYK<+ZU?jGiM97T=,_@GS@00TI:>O$%6?&FMF^i!mPi2h<t"
+aQ/IcjG^0]a&qIof[ZdU\WJ#j&(*\)!AY9*!0?(-a@fft95'Q8#8*WcOHD%a.p%f5
+1WVR4T_QTlYn7R.-P8It&:#><E@I!+(a;g,_0Hu`R2lmU0M)QVOSjqHqCWCH9T]oB
+'8\IXUmI7T/kPk?'ko7]=[s.)D@>O#N2\2@I&)rd3YOPFO1AS^!7@)]+d8.bOjOEV
+=Vscq<YbFV+:1ZS5sS&9*>&#R8t<"U8RSSB.i12$'TmYTGik;`Cm#Z"Q17%2&QXIV
+:DT`D(L_0fd7P3@A=+(L(OWt4H#j`uK,3-CO)2X*Uqb,VD9N-t((#ASiI."PM9Lfl
+'VSUPSAppVH6([_(s.@FaRdXBa:mN?Mtp`qlB`>:N#,S7R+ZQuCt=qeH5GYl(cebA
+WIC<SJi$Vf($UI?']p9q)&PZ2$Nq4`=bW<d+jMmo98M_u<8nb"XIt]9:B?cMaV)mp
+lng_a:FUpe&D\4+nJ?c%OmMTWTn46Uo,I54Ri(Z7iLHD=SBm/aQm'VuSG&A=S=H"D
+*JpUgq8"!nR[b7aU>`?s$*BZ[o:)/o)I]_oD#PA""<&GkS_P;O.C^ERZ5W*6S\5Jn
+&slH=N#W,n%':Ao.EGA#_biFbd1N)n+\+[LnJ[h<d@%`\eIkb/r>D%28u^JddEe9+
++J1BZSL#0$l(T=F!1h76*jQ]QER*!d+<@:*N(kjrOocgVl(RYV;WT8:oe)qI#GPZ>
+*dT=XROB=J1nL-Sdo/T^)D`I53fe"De"Q)+Z0@ul'N9kD,O!r-C,-j8q,@\^NU8a#
+brQC+/lZQg<+5WoEVbUl9[nq?T@uOPqF+@m!M/c^eEp.5I9%CU4e9Gm<+8rNZ3jT(
+7j#EL*^WSc>NW[k&0,]N<C0PM$4&'F&YNl2+f\2/WTPEJhc6ri,l#<P,JPPI@4%-Z
+<b6!:65!=AA>C,\+::?a\g^[s+kG'bem3E"4_cdQ-RY#tUDb9,0`.`1D-+;g=)rea
+&gsUS5S(GO+l\'IUHTrM3S19AUFK[r:n&j7)5u7R.,BL-AV6kk+BT7Q.C)%7)F^XB
++BY'UfHlY/>!]->-RkKkWNmXKrJ2d50e)*JWsU4(qGsVMPn1Qh=]u]r4_cL9Cb!<5
+-?;bU>!uLc+Bb.jWkqu@EcJ-[TdCMK>)FKVqMM=O@k9*XZ[-LmH?%XJY?KTs-Ku<i
+&pqD\O"=kE/%)9Z%CN:#MQQ/[/_YM%8r,$uDHb21XMS_YgFc\s]T0"8XX]F7ZBZ#B
+PM;Y8.cQ2a@[AK9UF>^(-K=0Le]6H40<JFBW2P>$g5dnUn(dL+WQOM'jhfh'Xq]m[
+YA0+PC9TANVlQ*1h2TP4HA].UL,(6FZEl,8],%9]%At-c?#p9W%H:YlOfG/E/E4Gs
+_R;1FM-^g40id2K;[M;g(bHZLY0+1.3qQa$h^VXq.eVm\i3=u<m'r>O2/V[9c0i')
+'OGOhZ;p1kUCXF&(UI-/01,)6RbnDtq^i0nX@<4tdF9`7hd>C<2O4%g!q'Focn1F2
+XZaA!Fp_TAd4PdG/6#Y2g?C\J%l#"_i2s:l.nSD4mU7t-,G#1RWkY0i#8MS5?Gu$0
+Phdst#;aNp:?'+KSfP#i_5mB7Yo-WJ),W$*lnkRK]gSN#=VtJe#N'eb0C3=/Ag#0(
+n`"-G&:5qIF'15*rN*5f7matNMVH.>oe<')Xrtcm>KO*WeZ-&2`hOW7UDUr;0Xd_j
+`U_rElVrc\kf,DlYlN/[hE).[4:4`G1#TGk*_!PBF2T#"A0WfqK.+Tk5XJ42$QFmW
+X>hh=::G:cjNCY9]/g459oH&*0a&m\Zm=^3-o:9j[+M!,Yb*]e<90^5\&H)!;_I1l
+&@H:4#U;7hZU7#OHFTGQ6F1*3:/54gYiK\7hQ%g^>?GK1>JWs;OAmAXU`qUVb;[>Y
+N3b.LMX`G@M765sZRa<MWt8oR:dDWh5b9esEhKgmf]T\e3\+1c]F["cFti'+29:^_
+@khX@Y."fAk?`Ws_f9?BHb(gg%pk%#j9*'4f=Lj5]66GQ,R?-%Ht;8d]3\:t'=TgT
+Nn`l[BegX;Mm"[1M`Y,O\L*7qA"]bD.Co'LBu@tNo:VdPN<iH\\SJl=UQmpi\S:aO
+\nf>p97j`A-Fu:*;UuSnWXA#r-b0WQ[sRPPPI\F9OQjp"]*n0k4heeNV)cB<332JL
+:."8.K"DWCP+1mP::/q8]Y>e[iChfYe(-['S`-p.!<_l*ZeR^m\.%,\4\Mcg;o3>Q
+`4\g^\rI^;Oi>lJp'S^<Q&GQB:l&rGe@su6525R)B$W[G)usdGm'GlhN!<ropckd]
+^PfQce%Y2Ol.;^0]5bL!qk&^Igq!3;mK1j%C\\=_f0em-^q9Wj',3^7D8LB2M[VF[
+**L)nibdtC6X17k:sJ.U$h!^u_5;(e7cs.iM='@DAfLM2oJ5lL+E%a'63E(`T'esO
+1H!Z._LS.k^k+g(pPB+IAcsU$55W79*CHnh$GQ!s,QdGT#=;!F_dkt<=IV\e3CKYs
+E*P(a`s-KF27iSj_t^LP/3lJp$Uc,GM;Ym2>Z,J+8+-RN`Ldf3\IJ)18.>E"%:i4D
+fZ+@@j7/5>2ZFq28QNf$hi#;;7K,88N+,5b-O_%N971H>VCE*o.Rn+,&MGC"f_\Io
+E>Qi0a&q:/_!&dOk&WNU7O[%+FES4kG"9k67f7Ij5h2iT?k?SC[M]p>Q7IseI#Z03
+@^u7H3XH<JP7RaG&M/"pGngen/X:.&9X+GY+SNkrM0)T#OZ=&`LI;`=P*aCLb%U>Y
+q$<00M%`*Q'3@tnJDCeT9Zfp?O$?JQ.6U6bQBKWH8hifWE>hGV=\4rb&d^u>d<&![
+-d1:Tb5ioS<1qL3V"N62Q$N`MX5T$U>8&)iP>&Cu1p`BN`KP\mP$)<ffj9dlU.[%Q
+bI###UrO7pfp9`-G9jV_ms7W`?^MPQ(o_A=7sI`?D3q'?pM@SYnVg/85oCZ[9`[_.
+>e!'c?f?sS'q%UXT7fsB8egegpajZb]X]$K]U;>pc?u;qBgI!"`0QYP(E'RrBq4u"
+TpFAq(AEjb6)>_:Fe()NReN*CTm?Itk*`4[q8$f@1`T7Z#8eVec^DE^DjqS([hgmd
+(K%p_\\ucmpj0]M:4^.rbkaNnN/ndSd,ajrnUc(?p)c-USEZ$'l%Y`VZ$QeEdCG[5
+XWJG&WL;)@*eAL)WJ8h5U*91UU1'r<=1hFfU`$9Pql-;6@K;mhWVXRlS#n'bs2l5:
+^sNNVRb@KUQ5@q<'b;+sr0cC[+o*8r(t>b=I-il>pX2ph4qX"LUEQb4U"H$3^`Tc1
+dle@D+5!6[I*uI_;dqaaPu1GGiuL!Y)SKe5@N(g.)UQ>6IC3.*0B#hMB%193*c`?O
+I9fbVlQ&\u;]6u(g*e$5.":(D*_5Blc#+$i3MHsIf?rY,Oot_Q6WW;)ejV=FNCG<5
+)$g4mfF8^X`hEL$i*uh?%E=K\^qprm)8m^q32AkW"#E;Pn<g2`)E*C?@fq!%,\7XA
+7\u4A9Pte'*(o7S3.sIa"WP`uPM$)E;`0k2k`U6KQl@';6mRu$\Dj&1WBt"`H2uri
+"ejN/'C!.FW]6U"#;HPOT$I_+8aLSED._a$[R2KrHW]:(4,Cg);2acfdg`tE@CA9U
+MU?U!?q2q%j=Fr)M8Gu&Hj!(G/A0p!\"!=L)_9%Imu^m.=&G3tA;;%]DJNUEc"f.8
+*1Vd'0HAZa)p,NI<u99$2U\`bau^5i`/6s3&@t%cSTK1*&t\QO:WE%s,EA>@J&^A\
+r4H]kLV_!Dj(0I+%G)u!p#Q$TcbFB9nf6?OM?E^t^^l6?pV)ZX%e`,&+@$hL%5Sp%
+6-59'#mLka2T`aqHoC"C$=`Z4L(2QDZbaoY9Gf`CX@3O`OE=a!_JiaXlEY)f*;#n_
+Ue](O0jI'N8.`(kVFQ2i\CA@=890F#bFFV-6rK7irQ2;Wb8mEuF$(GcE^D-(an#p[
+(ePGl%3nHm6_k8@D<sY09rK#:aij7uF"C!5I)_++OVDq#b-U`T1rj$pgG-tF64XnV
+PH<^\c1C!<0Y2?3Ep9WGr:<,sZuX&Z:\/uf0W8tnEhU@7b$@4jOt:dO-$+K10W5#Z
+R9Rf?88Tb'c;]!o8Kl>s-7Y^iiqOYtXLb'-PqiqXb/(aE);,[FGA8A]UL?\rb_11M
+_[m)c)H1ERBiHRk9l,JeP-rmS>aI2`7pN2Cm)dI%?1gEfD@DMH>SjafHIALY&VDi)
+RtH+=(Z[aa`YP]iO^`#!Ask_?Fg2hC(i30)##$"jOYGGWAWt!p7P_tp'$a.)A<@p$
+V+8%-5gfj>"!s2nd8d1a2c:EDNFH$#EK91M8d?j+3LX=mj\84@K4e3hDlHI@[*42=
+98%A$L,jcl)Ji#H2mVbpXN-:?;I7%a9ECMgfPS7'%B.hsL,0*.Rdt%)j#`E&]P4tF
+l+:p9MhmD8HPZQ<,P)'&U[Yl>J/Dm5Y.MUCRt!8JD-T:56Z?6^\"g'R7_fiG(9Y9P
+Fo7_c[.BfK=2=?s(%L+7:_+&Bp\\)Q`q;V&LX_'0MAP@?*+r]2q?T<8kFu:dPSg6G
+a.=-m^&,A%qqe.Kb5>R7=c7W68"PV4rR]iZH%+Z4k'[in*VK0cLU)^8C!DJ:'c?cd
+oE'C%c1=1Jd.Et%om2E/H@m%UoAB*(Bs9!'5_DJqgGBFg+N=o(Lb/U7W&8oIOpo3?
+T*h8++,,efUHH%-XPaL8..@A2_3]KY9>hEr&G?LIp9<3.'Eos__?e)#qZYs=G&"+=
+-UVO*o%);ZA$(aZK6%7:iZf[2Y:_&b(aAI+C_r%i]GSX*d16X)q0$[!QG0<SaO/LB
+N$KG:7Rk0%T"$^kdIK7Ncsmq='P_4-%P4tI&G6(/Tm:P`7_GC)o43f,J!)Mc0duhk
+_6dF1:L6Mqfd?89$Vb8SOgiJV;]k(rJ!:PP#)<a/)IC#,AL+Db&Q%O+5\O4%!P1uh
+3Dh3%'.I9$NakX.g^U'jok/;b^J+C#ZemU>>3oCc4GBsfTC=_!o6#f4OCSf5$eq,)
+Ll!+e5TGD=ZVD(.Ce-NX6RS*B7o2eW"*.s*@ta`KdKIPn&0!Yr!=PHK2G(c=i(0Z6
+3DK\eL;&:m4^cM.S`br_a>_o\aQl0AP%C=O'4FF=6(t#*r8>qj,XX"Z^K(?U)EBeI
+633j8/el.=UT-lRkq`aD['H;d1Dr0nqn&PPe<ISV+]9<q,GqW$SPpH#9.H-I/eiCH
+2&!"4C+VJM9Ostp2[`0mX-9WM(#q&*,oTh%,;b[kL]_t[@-ZcYX>OV%;TeL`WZ5JV
+LdELF,%Y.a@Do:mHFcnQ&PFZR))O0lnZ^0EI;+BdZB^.cfNT1mA-HtZMZO<Q[RXOq
+UGA[3Q(Ln]04funfsOkgr(r),h(9igYfa5*;EI]`XU?J]er!R/-4l"O?,Ik1(8"G3
+E:<0WXg^^8g(kHi[?e^P\cp?d0SKUL.8&[32T^Cu#3\kh/_,!fYg6X!&7TP"jgaHI
+pCW=]<QHEY?M@Imhf:H#=6Tk$5gK(09ETSOg`TnLd>Y37<s4k1'YfC=^9Ys+I@)Hl
+Ll7N;<m36cnC$sDCMsFk#FC3#'*'/<!HP!(7uBj//#l\<Gi?MjLTdj:[Oa,^"%;Zj
+="0`]Prt"7ioc1RIO?pS!8FjAb9h'a9?"EbpuCrZ2K<=pa"kNeXL'+e%+$juQI0Ik
+Mak6tM(&XsQ$4qu&7h^74/^8(XlfH#7.UC9bXJ]s@bgIW/i)!If=O7[6=E+"`c=La
+[;0H'fm'_&b=OXXCD`Tc=`b;"c6f;Q&4R>+9*ko-C#OIl@m-c*AqaC,cUP$R:eGjZ
+[pZ7@-=T,G7.lf!dok^&/:DT;ce@a$$\<>eM4(J&`Xp_!a&hSBn#X\<1aW4W"BAa$
+XU+\[6As<)&5@N]FtofFHSo+R9Q[X6hW)BWYA%j%T=U>K-HqB;RH3]7>h=E):ck.\
+Oc#dAoqp\4H05/QS@l4&:BTI"d'_JboMp-:g>SCI7'.-WS2cWETD/E4E+Ph73!UBF
+S972=9EC=XY0Xs)Q\t=XKuS<1/EJ598e>7:;`U0[,p;"PEf:!GGeBm5q[59&9'(1r
+Gm-Wb(<(:=DpCoR39&aQ4tUe1:A3WPO5*jFoKG623_pj[kYn0mm=moNNn3L7ca+0_
+"4_]V(+R"5O7rIig.M0&g1>5[pNXhH4/.;mA37GlY4bdUf+SA.U+m7@&(QX5HL1o0
+^#0DEaD9QombKf-<W<`i4@bAfO__W*q]F]1rRFsV\%WP51$4OXQ1^ri+<,Se6nh$&
+3?BTRTheEMI9B&6^8&O\1i*VZc[IMnDqc.J'NTY0=mSTnlLa*$8^3T8q#09Yr/ZM[
+rfR[>#.Vu]fHKnnLXuC:kNE[&L5CA9W.RKL((t[n@Xde<2HaOjRZa=^&>t%Ji`Q/s
+ir*CS,i_FJ6LIkBU/OC935ekt_iFaN+>n!1-)9i',Mk%^^+s7%!i3ITn/DJk3]?Ia
+=HB1A&&LRBkWSDp<2,I6c62`]-HV/CGQSFA6Ei[@:-J)G37%(\bdN;&Ah?DS.ZeO#
+0T7WGC+eRF7"Y8*UG>56*(;,,N($#:d"F=HS9?+q9k2+9AHN<:V$\G,8n8]6X/[[<
+i\a+m$cN*(OPL6HqOIUOSO8u.Un2]Q&lONf0F.l#"&;]@7KK=N%4)]M:uj+QLbJq.
+_@%RmU4Q3\Z;Q[44`IJeKNopF)CWuO2iQ6MUF7dJhF9-!8.N-rL`kib(,Fqdk3NXF
+NnQ/s(e)E)&Z)$1Y.d25D\A1C8'J@WXMQ`h`'?bX'?-!T@qJo`<ljAVaQ0/L0nNP@
+N;\\n:%=NC-5OH$Y$hKs1JKtc"jjnT8mb!D)[+#7L([=;=B,P@<=uh7@oBhTh]1`9
+^'2M6$^i"dZ;8m#9$tr:"Q7IVp1-Ra[KOJhjY1=@e2O7VhD,iklWk'5%V.tD;i<,$
+b)72gMHM:#=Y]@b1-#jk;JXA1Ej.*)/=@b]:0jmp:VqX57/X#12^:_m-8In;W!l9(
+Wiq*5-VBXJ,N`qQW``">:WHL=-WWm<3*E-<?3`lUVRSEP1k5`Q.)qN%.3)ac"CoGb
+E:T`.nsj@WR]=f;Fp?<,ntN"%[WS?9A1%m>LBB%^i@6?f.qiU.1>6F%:h=8LUdhG6
+#8Ap^.OO;6G(u4c8&#8*dk-:YBl`o\kSe#')Kht</TUi'kSe8maC]),1+1^^dj[*9
+cud<1I0RcG-[q)^+#CpHI"tn!7R3YFi-^^GJ[4K5'2WC8*-;N-B%(Wik79I_%"+"-
+ETbD[LEqOA\oPk.2`$hBdun+[Pq*,]!0`_XZNe)*p1[$MIR`igk)VPm%6B]N3YS`X
+EBu\m%X"_7Knn0(j1p0J*-bE@/LTn=1ZE^o>)MR5M$Patl%FIT[NST=R%fCb<!n@9
+m6J_p5Y2*,cSg&j*b:&uoE['pYEXZ].4OIONX2Y:kQZsdY=''T+uCL(#en+(6AR&J
+N<cEIkUrJSCkEEmIksjh#Lu;]Y^eQ8D2=eQ#VLo)AOX]DT/;@a#53X>ZU^s#pk9e[
+B]+2-IYVW.M9'`#a-MDnY/,ij@Pk<RLu+.k^HW")98KcFN]`5aXFo_so]XM`P[op`
+$C$AN9$?FW#rtMSk2/!fXbKbEW?@HT5b'8gG=`p$<7k4XA<r([9o3h]l#rDmIXiP]
+PEP9pBs_E-2O\<o;b=>M_m1FqR[n0HUI[d9W[U!::bZVR7>^6#kil*s*kmL8<&!Q9
+C(Q6m7%oFK,YB4]K&K^$kb@`NU@1RHa$bZ>88a;_drP[o$65r9F':%-:s*0dA(mgc
+7&8*$F=JG:Ws6iASQPQNW,?'mC6#8C;W`c$U(t2@MQ9s]Bj0eVY@r`cMS=n(+^YV&
+?#'[MeblAI9W^cP>RM%J9&cu<7pg$'C+FR9X+IOu.\VbV,0CL,M_SWj(p.OBZ)]oB
+8h+@>ZCVFt[8J'TQ7fLUCLo"AW,[p-MA[C,DDP/ZTaN9XM^#PeC:1*o[UXE*VHBoM
+E4b_L+'*-`8k3I8d_!G\\I7(0Wc)QD]"/ZRBERt>DC3&lik;DAC$SN$QCqTF6?FNr
+bA5VGCZJc30l(R]^l.9f&`1BX8A?]h@j=NMQI&pgeAc\(_5n!^:#a!Cat@l>fuuHo
+bSDs7m_6.C]M's5@WoYa4N!p-E.nA/bVm4Zr]b4Tac'KA$sYtT-H8L1Ef=VR%&i)n
+G/oUIa=RV?<t`Y,O*3)'F)>#IN5j<tRa-+])D#(@%)gU'pplA`\ub2I%(]7oE(+T.
+GAL&u_tMI]T$>/DSE<#_bisB]oN?C$cOM)HDQ:t+#/UfLfhCJT9\Fg\GgiL6fF8tX
+m55[(.U'aMHhZaV\"M]=&C`Q1@1EpnpYsQ%=aYGGf:t1+!d<-i)f1MTcBnISNYot6
+o%1"V8M.2AXgH_TkV>pLhcL<B\.$CO$KDMog-\!V6PG'rkhF`hi/N%aNFGrUN)o>-
+g:0u4phX+bYfuO:bAHP1XlS`konI>[jm6+1D>s#m8Dr!(j6n,H%^JG=Fs+;hmI$_?
+jD<iJIcp.#.sRBDmfeXE\DQ`di(mb=Y@&u-Z\u"ONGbi;mUD,MW93Mmk3b$b%P7,e
+du9:cohL;n/op9<:QDTLnX0Y;6Gi"e(=mDAj5TXr)$8sGXcPk#5AnJ'DX97+r&*-=
+Oj;bT(ZtFZ.fO?\!5fH;kXP,09(4i?nO$j,q+gG+!q.eto?Y_P6X90@VCX4k4Uqu%
+mhHL]Ahe3=!82,d04[-49KhH;pN(fUO]M!=B_*Ho)GauIcKm$W=SDpEmj$]`6`6FC
+6'll&:DB9H%hpU<HLI9-n&,6tY[<QtVYVR]$A3*b3Ra5GZ_&ptqh3,.$P[-Tj?uf@
+T$PbNg'nD+mRuVWlL?&C0V0G`f:\Q:-(4].Kg,r_eI@U)U"UG9Jf7;A]qJpR<hl0G
+)BUefTM`$e,d.4[cH2i#FV-r[##H27U/"UFDC),!.KW0ScsltMJH/#l!)XU1OY[-n
+Ta'/0/_Gsc/q!+*N\:*9qCWW%$T!+?Yl9W(-gk:njc3+TYWe#+4Ai3dG;6(6>7"lr
+hBN*CU18,:>Al4P^I&94b\sW2O)ZmL^&u]-_Z:b<JB78V.$<LK<iRh]TLI%p%<dUh
+)ZL0n#9Y`%+nJSj$-*J_>!,\(2pra<$X-(6%RFl7$+i/PWfn4h7P_8^YpMlp_s3>&
+dBsR@C&;RYUB%8<^U90/W?h!Kp$tErf,>"4[_mO&0lsikq'PUH/SEZSnq.]>TJ<`W
+]L5,)YgL"dg8Umi>>]j^qkGR$Z?:1b.P\7`-'L#.].,&i.]#K^nqFaHb]H7H/VPo5
+0psQr6b`+Y01\GUYWXOK(VXnmDM;+<'-'dpkZiK"9%tV%,o1e`S\[E07skeH#KU%(
+2'>D<9="39Mf<6=BQo0'W)>9*]Jfti>c6[N0YBij7G<,/@@K]<1Yb^CUMhDJ\L:"/
+;^_W0EtDGqaJ&0S"LE&Ar-2-R\7+S,9K[Q"F*L=+\7fJTV8`pin3&24Qs\XU>UicR
+4JaOJd5SEc0GR=)gs+"l;(OL7E\mMPVUN]N,'g_hA>h:7'Ei#i/nTL6MIe<`dgaP7
+nq9JEULmLk7TIc(Ik^(-Cn2A,8'GKl12Mh+C'[6eW%)<b2J5/oK4`W)'3KoX>(Pj&
+dh>'#4YtO800Mdi2!Ago-nEGR+#g-o@*!e:<*XEK903Dr0#p?/o>HO,8<+^/fQ2_!
+>l%2dAnbP77.d!e$Nb+"RlW^%3T`eCB\CtMWRIf_P;D=QVh<_l*/m%a6bS%>?+,YS
+\olMfg1]\s./Ud"O58:MH(l<D'DRS9"5a>uJ3E3ra0tC@k+ARshPY[\^('"A#'l$2
+;TXiQ2#6",$fD9K9B[RfF=)?QB0t+@OT%%'BK26@4Ff7RPUG#BM*48H;agri91^!i
+[,-Bu=[l^MORl7ukX^o%A`cNZ:%RmHPa7N(pkD@2J@)V+894!oR8Jcgl#]snaU_"a
+V+l_kM#NQm*h%htYtN3Y@PniQWQ.l9$W6/5QcXc8SqB_W^=BVW<ltkNM;LH'-oTUP
+2AKBKeRRC71KEm%,IM7Q[;Mh;Puh]?Ut'`mLb%nn0C^FLXYmtmFd-sI&Qu,VnB+m8
+.d:"lN2in:VM^P@e[VE)-E%n%>LM0<MMQ'*+'iW"?#$+8C8e5k@4?eH:Y#fRWkW&d
+lQo/hW@E$qhgDB;:Lgh\rGj&ha\Q8A0k#gM@7se+2Bua5.'Y9kAEJ!12EUctHDTpP
+AbKlIb:On23Vo%CB/DtdQ9Ss3I2l:?)lcfAQBAG1?=fFe\c]KUldiH*0kqfa\+/#K
+TOo;K0pmLD%5S)U6]oHA"Ud5@7UlIP0P:cF`+![/`"EVA)T<rj=@gk+*0J2EdE"F>
+"u@/+KFmp;P$Kc"N$a0CN,gWeNQ@elkqrYa.YnK;nA1o`A2'"dUm$+LdK__$cK=]N
+eF6mMRmEbN);Mfe1)S4dPKQ*=;c9GlB_7^8_BX)td=u-KbW<W`QUS*bWVqRu1q)%Q
+G\^>,P6I51DF7R_R\,bNAR]Y!NVI4?]ZtTMW`B1%15q3#F!6g0;*<CH#.=?R@b$Ub
+fQ&j-!6f"+)Tm2$:&_bY+c'pRHQ@:%AZ"*b1pW]HDcMqG%'hkL58RV>j)6m/I4Qp]
+2MoYP0[DTIe&fCD4$)ekf<r9ei8o0T<5[*s)`CFNeD26A45PY!&2VE#Z,hM"odPu;
+BH&ETMq#='0.[>+6SDogs/uq`eDNWnODMh-;(KAI6I0+E)aa(:./^('Z`+/F9_'\+
+5,"KEp,YLH<?OCpJ7smrmlZK4aU-t8o"FSBb8s-9S(.@,X$CS%8?$F5-HiV5S/XW^
+1Y"6OmCH?1a0:/#^BX2'gkH%!U8^/s1<f8KX7K8c)m$=pjZgko'M]Q@o;ZLc8[MH.
+,,sP4pqP*q,KLh1_5.MdcdXfLm3Q2@1)r&_K.IniC#r#.2Y<Md9MuUR.(hQ?4PJB;
+[7XUB/sTF>:na.[;c,JR"a(Ef.A1YoL:0ai>M"!id:a`sTQ*I^/+@OM3-@=?D?gUC
+R:'1Je]D2iN_?/fbAKr6Fk&Em#B/BUc08UmPq&Ad-8d<qIG1%[iqagLc/j(UfHg6J
+4_Up6%Ul?pCpAaKW,$q62qA.\36>JP&4k=rb*Z]VN^ek731K5g@[N$.*6S'm5-Ee(
+.L.1NOa^io6h3*;O(Z!mAR](^,`O_'3L&R"B)%C&(h\+PTp[q[-Bjm4BuV?]jG:HC
+R:jV?JZe4IS/Ch`+bi@fCRAE#!QMVrI<TKGqX>G13kjF+db47,p[/ZC,J!6lKTj3l
+[:G\A-_+2UY.U9JgG<a&Jj,TBY4unQY+3q)fl9T4p=NRI"&aqrX.L5pa1YAJ`[qc0
+0@4-)mpSIO]j'e^,+SLCrH;IO#;73$72CG[S_oLJ0>Wn4)u6#`B\rE\(5FdkSo/9*
+q]9gTl1SHX5N[1(`i1$U*nS*N/jYCY6*EH#Ur[h1a(QFk=EiZrnVVZPrXct8m%7eD
+J-p_R^;hehhs6[mO9O+Kf/We;>QAl,oercd-r1Tb&O#W"V`;T9#MkUW.)bJ/PH^hp
+i->_[^q'ZKElSP_0N0/,GtBKA3<k=R0K\ScRDGWEek!FpAcUg5K1K7l(:5WL&G-jY
+Os:@bge_i5EZ-EPG.Sr$&N2o4^I;7[(Y*&#AFU-M]kGL.@e;3:CFB`*Qo[i18Y1o]
+c4(FXb&67=5pfI?3'j:&*MOO)AW[H_86BUsj:lp%lo5tU8E`Oa8gdjU]mmq&#nLQ/
+##t.*A'%k$#)HCgLU)jYV\qcLj91cYOOcuV\GI_8pc0O/S;YQ^/6s%@\V!enCWj"Y
+9Vo\9+q,5n96,2B9pEP$nIAJ]Bpe.@XN:\nd<C\:#;tV]aHF]OAiiSC6:$8rQp_F(
+7$7omk0kKBZ<D(-5\26Q]^V'Enoi=mlSar#`JO.8?-ZQ94sIB3NV!-YcU6R'kDZa>
+ai7=V)BCi9Oh7;cemV&tlRh>;-_dt/H;Wr8.nHc@G2VMA:RM:tjh3+3e7*2hjj;1!
+>;Tp`L3lKA<AA2up8-:0Jus2F5\"'9#5&8*cDl(BWPmAPC8+q^ftC--odQCG2(c0A
+i`GEa:7/FUS'Y?66!gf^X"3bCeYoKk$l^HR#AU=g3hKN31Hh[.-FuaJhudDa>HZMQ
+@$"?H9Iis[YVEl)f#nQFcGK@]#hm/J3rmLM_1u`[@,kA`[q')FGp)ebJ>b4FB</s,
+!OcE%=^)P%*Sljc7DdPXk+?(F,=\oa,pQST#nJRB'Xid+fM5uoA8VI/B\%Xe'8o(P
+m42>KeXG<!gER].mEr/XhV6jjF)%(?7_2?_,=ic+Epj0F\lW(uUrsuh)BIV>pNRMW
+C''dd*Se7BKVVn3,:'IXq2OdYaN,>!EoWG^/.!4d,g5R'mmYEaGS:0dg=LbhQ3"Vl
+p;THMlZ0h\nZqY6$%lC&BgI]c82I"F?edqaM\[_Z`9M?`VS-Y_*V$14NrFY^6;FTo
+s2Cglptb:bN%RsgR4RM=A%PtSB/:=-R4:.J>1QlnQ;G]6(@C2L-XD]I=in"f-<L\]
+PqrSqbZKcY=Nm%XEn('0joQG+&/tFWY#N8K^s.rpj;C3r<s/Q9&PcifN2M78`)8#B
+jp_c2o%5hI=Y5"fE'R19OCuiphKG"M@mfEn"k,9EB'0oJ4AEP6X9<TB:DS[!5]2\3
+>#<b?.&oYZ=`TH(+o.>X3Mq]5R@Mu\?;,CTDdj&32mDYblr[A5[@Ad+qS-VT?t68V
+)pL%h4'<Dpnm!5OngjS[\rpSYIE<8`9)27tlp\G`aVO-o>@=k%,nBu6md]$X)[X2*
+9o%UT-><\UDXPA9UED2jh##dS*JO93$V(IJ:Cdd#a2bq9QJFlSm06ZL$,U)j)<%KU
+"7Y._@Eu]!iVYWt5\_E1&;;n_85kfsmQ1%M#8lL^+\RqhpH24rXO^;.'GN;XlpsN[
++BrS4o+$NDP]8&saX0n"XdZuH.7!)ZMI!k]:"A'4(FY-mVNI,0:&>.Nl:C-3476`2
+\nQD$A@Z3XT%mBRakpXie=iI(6;Tb]k.]oeLI(q;<skAgmMj*GPcj4NQUWJc/;1G+
+daVG8q/.c0gq.etm*#nNadQ$&c5*/PEfAV5<Lu"gR"Jf>[CO11L;=P<[h`Sh$*s/O
+Lp3Bsb]Af61cZG<hAX;tlo5TG1+.S%Y(rm0%LN7sLT+=$e*HFh)&N-C_hYR*G_o(k
+#\H:u$%2ANpc`2"5j+DBT%:PCs$>Q>Lk"\8".G;n1)k*9od_*$r/V-,8G\,mp(1)C
+&9/bZ#o15mp(UA)&Abu?koIQInsP%?T"+D,&NH=igd!k[^e$/od6!Hk83]+-&NM8@
+aV#8T$^:2rPF63M.3=_9-Qp3__0I#bYn[t+)O$S2*=5Z2@66d.09uVmP$(Hk4<]uP
+ZP-N9Ost4-qg'^5e=hF?QB=<roHTBZ8r8[(Q2sYeP)R7T?k\JE6NLeW^s8<=RK9+3
+%?r[d+Y^dkqR4<p]89ISJR>AoRM@SN]RYmW!Ikah]g7L'*MHX]iDPMGTU)B@(C>qc
+&XPmoJgh8^R37n6&[iH@]#6md(C7AsWG4iU8$n4O+\Y4kq[f)f;Cs'2`0!rdgKKqX
+Jf#)D(#a9MiNsuf;a]>%QZ7QjZ!J-KfeT8TPtY>GR7JZg-:#,ENFAXm@@Rce?5.tE
+(h%CjOcMo8Y)Fg%*J(t`)m^AdB,e(nS1tPd=g";uSXp.NLnV;tiHuN"j[Q%e(l@A`
+o7"2XWfMgTSuK=CObZH.H66"d+09`Y&[@qE:.M<u)Y!55M>iVt^`W*LTL=@?n[flO
+A&s%Q+DIYpKSCTMS4JdK89puOdDcI8GF^j[)gV^XH4idV#+e5H*;UMCdMS*,`@lMa
+$d%^+\_EZBE?.(\ag)qWarm4qN6/oB*ZU[i]V(d(4<2L+*c`9mFJ=]0j"8[%b'Eh@
+_:,2Z6_-;7%t(FK+to>jqkIT>21`]goW_$tV`&pub:3),63/@:pEUpWUp8`#'WWKn
+m3I8_V$[g2@E'S:[*-t"-%);\1#4-4RjE@(bVZoT&Dan,KZm]>+rXXlq,>Mji?^5;
+-$aSJ$=KR-C*c2]-.L6a!d@@JAIHH),uQqO3ZTR6g:>WS-n5_Ng%,u2Ca)eR,AU("
+)MoU%_'ReYX:fBFdl'qs50dt(c14BD.QYkF<$GLjUiLr0U6D7uNM+^e,J&K&jQ`;I
+5>I*#UnX*Ld[MHgK$>;(U[7WLm.R8rT;>bVUbqq)>'d0:5,lCscama;.U=N/r$fkh
+.D[p>"=GN6Br3@`U,#Ro.PB(&ZVY+F:i^=u9aN0,<%#'ZUM?h;`<R2gE7!lZc8okp
+'Gr/Hc)=>Jd3RbM@YlGSM,@Ho-qtMU[15X2CR%5,X-.b00[D.n]SNTG-d<B',j(c:
+J1JG&-W8k:Pp7\L]I;dp;B!_+ZJZUPKfQ`&dNY;6C3rk$K<;/#/Q.t:_1sHs0e$;^
+Vm>e@C;VKH_^+60*nmGh6<gZTLJs`uY6^#gP+X9SgaXNAW#1Dq!B-pUlmQoY-<gX#
+b6+Wd5T;Ja'O(A[Wpm';8Lu_k<<BA6<>$u`pJg/)/DB\N.)7=M!XPo!X-e_pq,/`T
+$SRsf*:!DPf\J**#;(i?Y_s^0ND:kT[P*g@1#5m3P6t?"[oNV8XO@GTP8l<-^+Bus
+dYd/;;Wfk?A[EBdZl7e%AT>!./$8.AYHo'HHPe<.juBC"0C<bd!`lHUFfoa3f9KTB
+!p;:j%^6l(0H.;R'("5t"tua"0=(X4lMt!,JM#,u01u54U@q[Zk:_H)%FVr3_`FrA
+!%UD7<U1/P,7:a9l7e\"fc$oBK*JAD#2'Xf0/ET2P5^mh3&?aGYL>QBCHSrX5-WKS
+/oqK/2/P'h2QJVKZCP%M9/>3W.FrfB^7,eASTD'*6WUn$13j3MU([P-M6raE[HS:1
+l:VOKZ9!>-2%9eu4gg8cr/1YW>4&N$F(h:XKXJB727$HoKsRSe?e\#RgFIU^_\KSD
+!AReuM/+%:'tcHT\qsp121qa7V7O+Gq)K+4%Pr$.=G0p(B&"VF\.dc08T"uaFe82:
+grP[aV9N8=+ud(!&K?-/Z\T[Ac!;i3h%8a.=lqW1e.52T*Z4O[".<GnhH\NehE-R"
+Mh;@^(#B=h\T<bA78aTTRCGEG`oET#3C#TOAND'0/6Icfe!mosP@#aR\@\f!gRc"W
+h'Wl73lo'C$_t;<h`4'3$bN!hj-MfjY__VL2Jr-F'>-5mY+<29_TT1l@%iP>D-tQn
+M90PFBjZa2i>#k>O+%5B'<^9R]HlOONG,2JW4G(ngEHAa]KR$e38[02dhY$cZoGo3
+K=VJifjP@0N/@-hWC]5D08p:p]cJ(#?6P9Sei[(JQXeZ4E3PIu!TEOpNYX%)5eK8-
+U^^035@G'9N[<\1'&rEZii*_2EU:Jfk)thX@bBe(IPmTY.[0Ca^>eC;3C,iS#sO1^
+A&J2Y+\NJ^p8qI%Our'kW;/^(6GP=^&D]#OBe5Cg/AK[J%<PoePSFc2>sKQDOO7US
+:.N*B,NMf06F%ECZ8KBr/jQR6O_J2gj="P0Vl2;DQK\#Q,)Nl+>X)1<5d!sO+dXO<
+-T'L&6SnCHTcE0C@[F__7+p>2l9mse2aN:W_blb4Ob+Z028gXu<IlKToM-%XJeU%9
+k5g/[k%heVDA+:$'IIRZhK?YjRV(eJ`I'K)9GkU>-KF>;P_:_[*$`;,1Zu#X%:OMk
+@:'I(<^S>%Rl!0bZq9Hn>_o)2SQTNpJS"%"=e2o]S]Oj&Oc#`mAVk2cPqIq/Srau'
+EC[i[>sr*D!H0lqDeT5o?.$Pq_0@('A]Y'TTE/\>EEV)0>j8LmaWZ1*nVh30Pj-\,
++O!FB&VZ,`c5:tq)/9p&oTkKiL,$&MC349c@.2,V]]t'E8j%::XK37DWlHS)7m+@u
+2RViP'&*&h720qb9N&@f\j]'KXc.!=q45].J>;qCb@-4%_<YmDEGP*IbnQ2n"uL.)
+Uhg79,k8P&&]`*Bb,-LACr?M4!KO#K;NbFMYqdi5PGaq`c()pk*YN3-9[0'l9-#A1
+m/(+oI74e@k=Pm.SWr*VI,#bGh&Umt8l"'2f%lm[OrpECag-4b(>m;mJtL2E+*?r=
+2#$Cs2f7(7b-^QZSF"HPlHGhtSN;]LcK!&@pn0h>TN)#2;L"k+p<5Rcb"VjWd\`[L
+op'Y$DYEhn!Xbp3bO;G?;2iaW.G63C_:sA::l8s%7fCRh$?-LW+^7f<Eis@Vr6:i2
+UGX%9]:7)?2kd>ZSYYKp;L2(S#bo?M_=GYjXVOEA.Au_o;J>pOnNY<q-uBS8X]4\-
+8j?3<*i,V_cP833]dP(&l#E0]:K9S%Wp(\q+OI^a,l].9V(JD^5>T9a'gF%iKgnh4
+"]rigca>@$O!TUa<)E_7,4/M'[5cOH8B!&tP1L[p2*._2c).la-I!;Qoi6'%;H1UN
+;)7&V>2XJMr)%Z*VO^S+#;iEX6.8P4daJ3E7;8U54OReEFE7/8*@Xu$@4bAnf=G2<
+Db)RNN\1JW<jJ/J)MG=8,5!<T.-!VBa&Q%G$)gJs.-603)u_07(fKr*.4Y9Db5HJ3
+'QrD<YSrnY2/K7iAiJ<qe6;j;4\%_/Y1P[KYaT>\dVF!]9JC5AYp0a`,tM./;45Zm
+p:uro-7c6+E@o?aGD2Kfb7Z/F#-K7TZ%30\[?O\3E\;DWf.VENM]L>Ori\*j=JE0i
+ojmh9jg5*\1ihBX5C$Bf!h+H1eZXp8\q/PIdPIR-[3_ENj$-Q<NALg$1@kdWok1R9
+BD=&]1A,FcINP`+W`UjNXj<>ZeXZGmJ?iY]=3mE.$Jr(bFa<A<^)I)VeVJN\ehVOR
+1kiKq$9to89ah3>N#9h->>naLla6eN+>[#DO:YUuB/]Wi>Jk#V`NqDQXYdMr[HW&s
+(8Y:'`Ar(YgiHXZ(!"Ha>;_%t2k]>=Z0Yafq)P([[fEcjF)h+^V;9Q&ZC1/e\aMP"
+G<)5:I)4r*c/asJ=\#N\a7FiZX+DDUdb[o\h><Jo($Q`kD1)tXI-Y;?n%%=C@U>O6
+hOA(_(%OiWhRQR3,2MrR(sZK8U(]&E\bh-<GMV+sEo16F\b!^H!2V]"j5:K=rkP@<
+0YOtjs#Wcs2F$GTZb1c4`&Fop%TBQjL)Z+8pYY`8%03+$l*Fcm[uM%6]8*3hlc;0:
+e:@UM)Zc]WaQ,TB)N9=\,;:rd0H7jJY[_K/?oX!/TMYF%+u(#R%3e/A>ZbV`P/HAM
+J[C^]1Dl'Yj(UVV@1!ms,pO;Cg(b`jNFVKlN-\D6N6@p4)&24;2AjObe%1Xp8K46p
+kOc<Lk-m%IcCpK6.,82QW(1[Q\EMX(9<-P,FP=+ikq00!``@)HhF0=?=)ZNW$lj15
+XBTQ5$8&i5A[C5_;R*lE!DU_q1D(J\(AioC?LZYVeaj$/QAiit>n%TOK\';F=hH([
+3MFSljmYf#j"1armq?2p%]aMof\n\4NL):a0:5&G0WDJGV-iNsa"o.$'QM1MENkOA
+<pP;e*6C7Khb9hYm#cL)*PZ`@l.u5;qAt]!"5(.DMC\,Q5YR)de;#_6M"EkRCS:kX
+:94Td3"I-JiO_[NNn$KmF:eU9$Yt4N6I$E]Y(i$Rh\7nuUA,W`OQ(<8V=AR:'WhX_
+:E.8MJe%">EV#"j#)U6M+N<brFX'4-dT7P]8s:TdL6@_7*%t4&N=\TPCo3[oW'$t#
+W1f-0)GI3MFOZ%$;r95m;d'\f7k]851VAUhK07#3H9.G9P@W2^cgITO4KIG@\tgQm
+;@XO<_5d<%8sB0$QdSiZ,+DHNH]B#@@=q-J;=mJ"(f<,\#)=?YHWYr#2&\l70k%1r
+*4U,8$!c!ONF3;uPHA\0+K7nHQCsJ%OS7)$+pe6N<PjuR=i&7Q<`sO%,A5Z[fQ.d0
+p*IOiY#NB+rh1,#TS"AR"kXgEBYk'Qfl1d_H!BtWh\?@;OpJ8K[Nt\g/EeAUTidIU
+F+UuEXoj0M.J8320mJdjhdSP<0TG"X'rQiHQuWq"ii,*oj/6"lh2;LU?8V7$24cLk
+0"ANKR_/?T9pXd!*dNcYd@qU"Al0UhS(S\YLSV^'`g`B08^3ftAsuIrGr_7PZ%:Y<
+`WrKu\fS+XZ.QZ[ZKjL4[ts@]jsN-il&s=@#l>Co(L7DT/fAR6.&WcpNI#HT2<`\2
+Ig57H%q%1U2@IOo)h"S&kK?'pS\[ua)9$S**qdT-]R&G$nsH%#LN?S41Kj5s9*Q8U
+*D^1-orHDLMKKqP'k[aBE,XSu*IiRjADDr3hF)e\):)Fd]8tqE*Y2E<EKs`)jA*Ej
+@F&/,*t@YW?IM^"GFFT3]_fDPjmfOh>=n!tT7<>WFWXr]G'i%8naQM5GIm\/"-\2[
+Ac*YNE9#F6#B>c8r&L+pr=)\d0B>-s35ef#?%Jf&:;R3#[p8nH]G,rhedOa[?O$m2
+-S`PVXFhp&#bR"'K^P(o",Bu[iNnJo/=IBDVFM/*Bko@KXhMCN$u1?`77-D<$9H4&
+C7X>k#7ER8.l`k'+lU=m:6$[;k\Cl@9#unZ;DB/9VQ^*.Ar=uV-q8`)hdNP>N@jdR
+2tL#dOW-<7d:mkqQr>)*FF"/>"u=(EjJLk2I>l@T6,K$-!MeucN_`f:6KP@bUge4-
+0qeS=\6T:!A/CC_b#$+[*.9+1F9/Z#:DZoG.LW3p@Bd8i9/\(IQh7bOlkQ6H3GeoE
+e3$/m_DFnfITPWaaHnG-?`.%`-co!VKus%&1"g+K&6-*+OX;P-p#-OF1ouIrH7MWg
+S4)Luk;[NSKM?^<YE*KPM!J5gbo"DW-WJJoF1,#n\@<MDBJG-U,'a4kU.N7aAHAK0
+&-hAp'doM\R1!n]*NCN-kFaR7ZskLO)D&*?7'BoqU01ASf1"l1+JT;gIM2-k)s9;m
+U<sa9`6(;6OW)ZG'1I(C=_1B>eK^8WTY.@0G"#8L"eV&,PuGgk:hkC*UhrSr0T(r#
+.T&Q%bP>S..^qqX"\b[het05mcJ1\cEX_RE@M&2@$s1\k,dkFbK*3T%=cmWqlqY5G
+'Y"iBD.fNlVR;d*fTSu9AO;\/3M:-NU[,U1Y1:h>-PIh%';6-rA?@m(.lNpH<K&71
+)T,\*95.$"8iCBSef-DCR)g+$[H2;PP7'^#;f/GA%18(@,C`1bGsf(JLtgYE`GH7q
+=g[oMfFZ`/K$hdp.Rt-#QW&`X(CA0ii708]>I^&]1U&C.Em6XDM/]XQICcm_g.U2(
+F\6N#/8oAEW+TL`&hU#(W36(ECPq,u%Jm_]L)cfXY/SPKZF'.lpQmDuNU0f9^Qs3Q
+?^p3!84A>uG\5F`[52I"@U[1Y2\?T`$\GRQEP(pXp8q"L<3#0b_q("[@JifE'QtqG
+'[!KkP!EA%inP[_20P*5M2Ic/.OJoCOQ<^->mgQo.+WZQjZI+7esT&V.#a(J1P_;o
+Skgk**0n^KPYP=YJ2?H>XQHgm:)tcK6_o7PS:%^]aa$Q6aGd(\ZD_2l5&JRkE5NFg
+eE2\3F>ZtuJK**=ULH]B0=h;?'n\3a%2>1)VKn8kd^mH@=WMIXOPZF#'b3p"k_SBF
+l^=NDT60&0dlN$-S(QAXcIT$ZL</GDdp9$b?EcR,H5@OV=0G@#010Ed2]`r8BQaa3
+g!V#eUNAD[cZ(p'LZ's)]q"bUNn$2&@.'lP'RS;sMn4SZFVW`@K9&'&M>O&OS^bf@
+;^p?nLLSOu_K)0sIHi-b`:@Kg]>7=s*DqV53NM4PQVO^f7*7)&W3fa(d>nWL.+j=!
+"F%maU7kA^$Qc)Y:6@NQe%[.k-D(3)Pnp?W9IfEZ.s+M-q,4]!>g6`T7>RFs6Gu,+
+.;gCPD9A0eFm(>%.PJN)_Gm^881U<t09/3EP\U2+]k*6QeeuQ\_[9<n5u)R!'$f%.
+4'.A8>kRceX'$X`m0af1G=EpT=k]!Nbe[R@Pr[Z"CJ7jT-#p1I_;9Nc?s$_A7^^d^
+f2n^\<,GA+=<_;3(<;T&`$)q@b&'Efb+*E$nVoGM1r'qYBiU.PO8>0akum>Lp,G3q
+3//sK<V%>im'-^LQYOn(.lVX1hqKmZAa\9E]m#F#jngu%`P)(#Q`d<CI$PuJ=KB\Y
+mpV5<VEaY(GM$\,=7Ns>f]*lggtip&kkV[0n)[SSr>oh%K3;1p^O2AhmeOdbpCJk<
+5%"X'EbB'Q#@r30MZ:^7!!aSHLgkPJB_07KFcSYFVbhWB%!@?BGD,g=#_[CM4E/X[
+EbBWQkJ[E+RffV)E6+Pla&o+`4Trfp!!g)V.-,A=`-5m:EbChtkMV%!%$.;#O/KLI
+#FLJVfJ=pPE+g/Bn;qe>Lk!d2$:nG/-eAUMRY?TCN6-<gaYO88Sqq**VFWCs$$(r#
+]*ZS2%7pF+:nEE@E\V6,O=5@(aF8Z]G\.4\g5'd'aOH1\k`^g$%e0c8#\<PRr.L1D
+Q`.-J!,1t;cBTU7NmRWfa=)q%%#d_0N(>dpW)AMo+VGu5&d[S#WE+t?*/'./PY$an
+l0<tYjG+=,OO76dW;;-<(l&D7JLLAG0k,l7HLkiS"u#CrO`Hl3GaV+LRYc'S.<p_I
+G*g<qjf)XVLjkg?7\kl9X+M1QUprK`\JRe0,&rL5$3[CYlE=q8TkYL1nZJ;%Yb+NQ
+SS@em&]URXZAj^TVD7#+K5R2O5c.-+)l_,XMP?D.p6/@nAdRIsa\J[hetnN<\8i0(
+l2%BZMOu>)+pk!<M)qAfL8B`^+JP)I7c^e2fMj*lZ/QfW;HV&8"Kqub.r+ce&n5#i
+Pctco"9QlN63anC@"N/^cV$CJ5[lP_?9tUL<&0]D7`)Il`3Bd&0WR>dCIoql5d_5b
+[.8brNSq3[Lq5,O]1Y:<D2Tm<<]!^SgIk(!18uei^:F\/].;qbEp1%A?F25N02&ma
+9AI13#.h`4ZdT&h_brP=4YAN&0$C+`9>j<c>.he$_LcaDdfR*rM_FZW^+7(;X+%fk
+BY=fC^[iq`Mub]_*p(RE^njT.9Gg`f5fOI31i)_.Y(FNSCqu!K\*Q5e9K]hk?FH&#
+3's)m'#(LtHGtK9aPs6N1Od/VEB"VT[7mSP@Vj1`4sAq\L$XID9Ooc>S1]U?<'q(W
+m$]T'h)sll4$mO2janj9h)_gTb=8g!m6o)K6r1/=5SM4bm)_AdVThm6.:R7//D`=l
+dm#%:fCTj2e,n+dW6M[X/d$Dc9_pE;(=,r6-Z)%ne22_CTINJH0e;N@N$'kI:=@#g
+NK"Xe,1Ar^4A8+51VdNZ6MX*X:r7/%dj2Xa/_rm*Rk)AK82OqbP\3JII+Jf!1?@Rd
+7po3]A14Sr01/Z1FHg3.MBe*>8jk@2A5kOpa>9t,7WbYF,JqQtX%U^C;=2Y>DL+8P
+[+j*M>&D-sXiF.ggfEJo<oi&INgSRTJhJtYV<$pt!XM/)e31da9BGG%`_;th"R:Xc
+kX4-2j02hMqEouG6cI#>L%'oZ1FC%^lV9q8:/G&Pc<go@7b'Cj'hIC8q,R]98riU;
+L)Crro'Rd=mUUoaABnq-J7_Q-<hf.T##=D_HqK.)kQ\W^D\u-MmcbI\9GNlXlk*FG
+:e+!Z8%"pbL*g1+BQ,8jp("TNAW6?nU13=/lt6H$Q,ls[G3n?<@-2iEp!>?EiBF[-
+E^^oAmd0Y4pL"%7?EW.+"bg=0!cr8aq5'QhQ3-n/=Sr=^r(e8?`R8a[5'`tgrB_GN
+B'+!*=^qt#SHiQ"%mGDP7q@[PE<]6Z#$,a*,(4'tA%#!<el_afRfK<@K#T$I#!R#1
+d/!s9!sWlKk(a!rG'4-6qIbOpLO`h]G[HP%BGQOWep&i+R:nLM@u'4Cp8V`,&86#>
+qt>8L[]XMhN;TRh@u%X2p5JiKgAT)Xr[=)F:[!?AM`q[fHS?@\`t3;GicWVf@OOK^
+E5qm5GR#n]FKheELt?PmAI$RcE6+u!aJaCJXEjOR"H_J_&9;p7n9*>9"j#MAM"btP
+Wd?ZgHgmqUOV2WT$Z_S;rF`KoB*OAd4HWIV%<l'>[paBVD$htbG'#ZckN`]2H?[I@
+J5E.gG>ATJOG4.>%>WJY&(ZAHr=0XF2+_hM.<p(d*t=&U$YW(t.*W7#;OC;gRMVZA
+Q`c,6*aK@.IQ,]3=61$-1n8P.S$qp;BLn#C2\i8nU.A1V&O1eIY+cM!SbN!sB]FXG
+b8'7T)/)p.8/$N0LP!ns(O,_:W/bC<$C4PdRPCCraO#fAHBadm(f?c@0nu+<EuN\+
+RPFB%0tDt)AuMuO>m[,COXD1%AsMoH,-!L>WV2m'(P\(SQdHA?.8PepL2ZV+TQiSl
+`CV(b(no'(M.p:gajVIA+!SV1+Xs1C1,BtcSKiu&,$;T(OtVgIa,C@2,>oVC$"Tcf
+L85,:V278ZK#].rALGol[)+=>J7>e+iW]be:J0bQ,B"p*Ub$P/-]83Wd^432LHX(E
+-urXt9-oeF3(oF.8rKGoCMtdU*KtNR9oF]UW4=GljL-iT.l,."CMKV;FPBJ0/]Cc"
+UjnR@krmJY\63RW$eW"2)_]E+5I[N+X4Be![kR-%0j1BbH!\8i*5&"ba!(`#b\`cD
+EA3>BaG\ilX.7%!C:pmI^J&UR3P;_eZ(;$/Ru<fPU3/?BR_`I62I[u'_LnJt,e&^d
+EGS`6b8/!75?dc^`,*JfN6s\G0"NT;EX[VM%&c#,BKV^sTP-\UkUS^Rpk#Ss6EFM?
+$p)hC^<b#F2m-?,>!sR`MD91tU9j^;/?;0Wf;>WpVBV$FVD"jQ_TnU%,f1g=%(3#)
+m(<CCZNU-L\IV&c9rLt2rG9t[!hlTPs%kO#k*/lHN<ln5!p<80jtod"1eC_WY\U"g
+cW\!--G$'K)m%P:p/GO06UbBNl)bYCodHCcYGa7]?IdDQ2\8;4-UcZYMWLsC1$sC@
+Ri7"!'\L#?2S0;>\>L>S$QVhSM_1WSK)pSAgo4:/WEURE]-<2%\?-VMXa(*t&lu.d
+q^+C5.7Juo;JoGhBN0qUP"Pk\HWMT\?RSV_eWPe<X'q+<R^8KH:3)pf,HS4Gf9Y0c
+Z$V6V14Ze@;7Me'\Kir:=_g1RC:IKGQR%$bH^qCiioi/[2)B/'gY"5_V3qI9R$k(E
+9T6P5XN!8i36R&lbI55;6bP!p^]l*S=rWs*HEhhg.kBGjS/Qj7k]A>L^NpO-F1Am&
+!lBQ+_BQk&bR/Don2,F_d(.gmZYRM.E%os6_s:LBQGObt?HD2k3YNXP@kkmEnL.'i
+S1J2#70(K#I'fAOUHE;11kNVMI6UM*bO8?=Wf9>]Ml[gu<dI$uN5V$PY0>A:KIj98
+AqdPcdBbg9ZZ4^@>d6?SbGYcgbsbj88i4[=GZVibbk)3n!jg(7[E\=_cWo9c_A]Wk
+K+QO"H95CD<"I:pk02Wobr:tXpP^F*!NRYY/q"2WQeWar<!3^c0p)J-HMikCj0&>G
+>oOU0C2?L^'1n`:8b_#P=/IdP`'>>?GLUep8MAVbB\L.+feHE!?$iokFuOW_9g'u>
+pXhG2IRYcP4FMZ>$'t1*%2=&9\d>#mI=AsoYhn"X31)DV4gP$'s3@1?42a_FF[O%k
+JV>>\gS@0-Xs;\3G+)s@)7==:4k$[^f2[P-<Sd1&>:)lq`o^B<8KI.eZ/8W2m?uUa
+jr!Jh$?kL_QWUbXo59jB;9GOkW?"+A*LO4tR%-q.,#J7W4mL3r.XXut*rTus+j;t.
+-%;UX59+S6N*]Ou;GS[P=KS>+OK.=mnl[P:"1G$T[cJQ)9(l3#Q',ndP1"k?.l>XA
+O!jgaPKh=WP1,O+e"`\D7baR^A8Nn9Ik.+gQ#4/"NN0^.P?]l^]pljOS&@nih7;D&
+1:]h+31[gh[I4uimG$\thYZ\5k.T.oRCt!;N/5(sKC7Ema3q`l=dZeX$SkXT1;#V9
+1BTa4<Aa%/nm"i1=h<Otgqm2.^gA[`jSj8f+7n$c?@57B<RiFD:*KF?&#kE(5?X`R
+pr6*-Z$8R2s'J`.l>S9?PL!34O3P`]cH*GZ`eH.AWMO=AHMmo+Dn8HDS@eXTP^I8:
+W5rWrhl3Il$KN"$,SrA]QOAlM.:`42EM_%*^Y#F#OU5JK$Mp(t4R7:[$3)'/r-G>]
+3j&Se!&>K'6jCG?b[NF@5_fnQ4=1h%)oJ?O8;p:Q#T1KgY[]LR/IW10@IU61A7H("
+7Nq>rYhCK[M85u$M$uus+,!>Lioj@'Aho@j-d^kC*+Ua]aQXC!`+3F<RaNPPWdrA>
+<hrWjPF=pL]0N=5C31?TC<[?K<$i/,?%0+dT\DrbqF-u(1Th1hj#ba[Yu$$;YV_97
+^2u-HNJ;OY"U>&sK2M*ekdETbC:qg\\*:V=1Ob/D+Rk<nb=.)]B=.LQk*#[*NTb8L
+4Y;2$Un%qf\Etn"A!.&X#'0(U58UOB;msS->Xjtr)IE8$=a&MAdtl$-*;C=,Bt3I"
+X92QP9/89o76=<uY@l>HhfGUN.b7F12l1_/_f$B*RD!L&!fir4U=pO$Y&Zl1!NsWX
+*'Rf+#6_P/38t.=.c_5iKEt2S3=MQoXq2&h10!qYYbTKrL8l4QN5`k?C6f'4X>_&P
+O[KPI#-TKpTE_W2'H4e"XG[stTr[K*4K2dRV'B_Oj>4[sb-7P3M'-7IU=.1)/ka$F
+$A?U=M[L&K#Xm&^9gO[K#)XO>U(Bq;We?a"c8Z`9,'20Q50ZiK%5?%**5O/Pdj5Y\
+UXS6H)_24;AC4:3"Y(FtPRF#9:D=O)(saA#F[rbp[3nX%Wf9GI5kGdJ)Bi&U%8'UL
+b.O\(:C<LicrF&,]d8_=ne`ip<FoXd'ocR*8TR^9M:-PNTg16/=E@tUbYkgW>5%'J
+]dd^o]#?!1S[E91!P?c"7=g`TKng3khP&e,W^7]+<u>k%b>[N]1#9[X"ro5hIL0!Y
+ktlAQhQc2BKsLIP$%iHh0Q?=$Bf62]@&RBl>%(Kj$ZY4U)tuO*f8_U+X+@s<QK.Zr
+gR2QN%RC>2/08/)AiG0INSrF65?1@f-9IdR;s''`i`=o"^4mMH@B!c/k]<<[q7]Fs
+kB#AMWM4ruDXm(,N**bP(O!'a/jY*))s%IYag!/=:gfVZ[\?j.D-M%++<^Qu31.B/
+H6:$UTo,AGmsI0=`MmSPA&Cd7K"@12X$kgSV&Wt+c7CCoaI&gIl;H3,l/OkPg=1.d
+c#S4f.%tc5$Co`t0^;NcY$KLUYpmo^`dr=_]:2DSIA6I6-nWHRi\s#qAa-cHU?M.C
+0)E7B.70,V_`A<srqAb%6\*_bJ[:fd4j2%/Zo$*0d)C=eJ)pWX4>Y"?7Xp:_0.?b2
+U@_PXd)$\jB,M4,e3\u=.CXfQV$9-u#[U=72)g?:$pZ3.No*GC5t?2=*lMAf:MNEW
+.%r#d2!TjI!`Ve6@K*+3N,'+Q2)Io;+Xj/%Rn=#uLX4L@-R+eG+bEsR9M%RgAGAib
+MXu\HNF=:Oi_(I^C54A%:F8"%TOQoID@@B3K6:/j@j6G\O\&eIAt9dk19OrA.(6T"
+PfDA"Ao!:c[])7E^D$`?+A9:2"(gW$M)p#eCV9D>aUCGbjF^a]BU>i&1qh]2N'FC,
+E_/.6Io\?*08lgI0\95Mf@'[Sb48@_AiT<^;s7a>?$/7UE6+krPEi=C=u*"b0$ii$
+AC'C?]VQU8hE&<9O0(Z'j;MKhg@Jp3Wb<KK]`Hd(#t(\h#,4LZ^gN%`R>n<EY;V,]
+R=YiL;ahNlVO3,d"QO;hD8r9W\D%c]bFJf^3=l`~>
endstream
endobj
4 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
11 0 obj
<<
/Length 116
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGV_cp0N07>ciHCcouP+Vk1^ni9GTB/tbRV24Id
+a"8b]_4lJ\Uo8$o`'ahYprlu&&.:tf@;sp77%'"2dt0+\!W~>
endstream
endobj
12 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
13 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im1
/Width 478
/Height 126
/BitsPerComponent 1
/ImageMask true
/Interpolate true
/Length 3793
/Filter [/ASCII85Decode /CCITTFaxDecode]
/DecodeParms [null <<
/K 0 /Columns 478>>
]
>>
stream
+fYUIU<i(Z$qJ9Rg:9.:2l$YHDPUBJ1@NSrON$Se\C068Cdpi\NF]t(Sp%6nR:n8*(
+;T(c5Ri"a2U"65GLY(!b#sr_uU)ci;qYG#:-r0D%WBq\6:!FZB-[HrcTb"?(kKoG@
+H6Le3&$Mknd$,o(+k31rlD/('oHah#Lik)cohmU$q@\JM6opOlqPbA#I0i5aU)chq
+rD\aM5(oUkd12uIri/G7T0cAFk_E&`I-T4?pHF8(44+PH."Lj`U"-+[mX5C.GG6*o
+;Zb#%LK:3`\b%0ShM?YjGSWM#3jg1qc_2a^oL%k6?NS:1LK:3`\ap_mmmK@(J<]st
+1&7NnW>Y,O`h>KA&#lP$,sMr7IV<k=7XLa^W(utPl=su=:W*ngRN5SaP1bi@R+*L4
+\IY[=THuf69R_)1&mI*$o,<;Nr'TaaH%eHo9R_)1%1HIJ'6E:n$/bN5eGm`Apk!#I
+UT#Q5Mfs\iI)_jArt,%!q1V$E9R_)+,(q*N\SfdX\XKGUW)!B25Ddchq1V$E9R_)+
+,3lNY,NT;FW,u:h;t3g7J)VQgkc=VJmX?:Gr93E7eS%9>aqi5ukdd.[io3_(s+l.<
+U8tQGlD<;65r&2_e;L?sM'"-M2++,#C7gETC#A]@o,SQONe^V[cbpJ=p@UtfY9@pT
+MDIX]/nV*X\^e=l&H616X0L%:Y:oDKa8NX#(KJQH,/kF_*=e!qWdZRCDZ@A!1%Lg$
+lE/OmiX(\CGH*9rOlAfdj!6Z+(Gf%g>jC/FB:/KfKKC2S\fLg,+o?Jd+aTrF&hHfr
++jfG`Ps<75Xl&htO-I.AO%I^er':kJ]l=G1,^>G\Gf^GN7Ehb1/p2(3K"-3)_Amks
+LO\:hIbj=f6a'IOi^J^a,WZq^18joXe[tefiUW<@EToM)s+hP>GGLc>]i%?+FGfgO
+OQ^dkb+I[!Y4)-9LWWjFa.tm\rtD)[mG="Qf:h8ELIeUn;(G#-d;pdeM0?MGi3"+L
+E/,Krj8T\c_Y3Gbam]$9,D8*HHbtVC*=e!q;uB:rh>[XtnO%shoS4MjLW0jo^0`8&
+j?/G6knV+QM-:o0Mj[NA9=<UU"`X!!KK/UZ+'=<<&"C<0:OS%E*$N`\LP6AJ3ZT"l
+VtcTo]D`/riH'Z3oS4MbLI:,T+#eW@>Pf!&3('KB0gr,RLIKFdr[$:ds+7M6S0>pf
+OQ5U;k^8*%k3p$,5Ht_r&&K>2Z&0i@F?2$c:[oUfUc\P_`\)4c*NDJfS"\4)$\urI
+n!OM)fS?/1KK;P3"'1\\d-/$*5K&>7ORMrp(qIL'=Q^/XDMLU?/ft5bR0k%gE3[8#
+,-d/e.n\1PFBlt\i^):o3VGKRTM]c`33gaKHt/l'$\uP[kDPQhYi0)F3^mKp<i]R;
+Mj[NA83#iDI?'(2'O9QAF,(hB+`R3(I.:h3p)J87%ZskJ(%j587Ehb1,EV,<OQV_h
+Ee-[)!l$^7E'LC.3)1.$GNS)[V`=(ST!8\SaA;^p/nIiK*/?oRLF\-IPR&gZ(&>b*
+Jc/d2_Jl(;^?7_O3QC9+k=8t`=Kf]cs+a%eYIm@Kd/>-1iPg?O8claeEGQ<<HoOk7
+]K>P&p,[8Saj+O."'N[&PMH_(6O^027j67X+j/c^E<QRJ?^s*a$0j\o-OJWMd5h(E
+3Oi-M:5:nB++/=D4j`D70eN@`3=^i/%Sdj\"U/l*o7n*t4\*DCiB+o6-U2+=2[\^b
+k]23-qr?!9]SD4fZ.'rc&]f&Y89/[eLaXd/+.P=!$.Jf3`sL:\6^s^Qdu`P/-Y&AE
+&`4XSS`Dk-QH)gW]LN?#EcApL',5COq1l1I6dP8^*%+c`,G26iOQ"5-$N\7k%pb%K
+6aZ)oFU3<?i<KlaEcAhQ7)^,WIUV%B$#"V`*+OZb"Tg^[%Pbk]0uC_GSW<&3m>fYl
+Z-_]V4_Sdf0Va@-$771ZKAISqE(`REnDFtM'EfD#6]?!EL3Eb<O,c<**:8d,<@+os
+k]=*j(RR)e$900kJ]Ge6Z[[[J9JOoU!(I&5i/-F_`]A;\j*!F^=K5lKOPuSjG]7L=
+'QDB+KB%U#^V[K-)!H!Zc[a>H4ue1b@u].#kZFhn%N196j$F4o*#ro@c2Ie)V_Q(I
+&E(l;%N'_$ECW%Z%Yr)"LWA6m*KGn0pHtXin7it1*BLPg*=ebQ%7>`Oi-QFS+iSuc
+*!h#/e2!"N<,fogN,Vu1ZF*eBE,i]!`s#>6#7Uci#KI65O$[g.*=gj\*ul0a#31:F
+%R!4b7jl=_3$j:a$k<tF;8@tr%uqKJ*oQ(4KKF.uj*Yfc_5qU%iUOetN[WlsY<#e@
+j)H&&@tbmV3)MD#"<HuU6\E4i_gTCCJ0DslF?%;M",Cj[k<k+f*kg4k"\tB(mZ#/(
+o*RHc`"X/B%sW:n#mbhU*%)'CMYQ>qe"On$4,&3=qo;(AVsujb;jg#I7cHCQKQ+hb
+-oVY1LNMIBa2<Sh3jH]lbGS*TNXm*D">AXIY"nIck#]p&7hg8X*6/Z0'H;gSiPfos
+RG-W:E1L-<mE;D&EO[95:_:BhGe#oP;jh!;N_rJ@6c4f`$Bt^@iPiT+m;V#D:9=&1
+jjU+egcd5J&0H:1-[7rdYImCcVC"[(b/Q&Q(%6no!BF?B_Jl()ieHRDV`<Hlc3+C+
+^Jm8R&7p:L6cD>H*BDckc2t]Kio>$V*%)Et4AahEFQX[BA*5fc-YiTVl`oCQ<<!RP
+.LX=?B4OhX(%6no)iZiP:\""1jjU+e=Ift_ODtcI/6D,7O-_W"plP#B?:1g7<^d5o
+?^s+O\C9KP'E4$I\od.^M9u%^#C,SZ`G&X>#%^U#,3;+&\IP]u%L!r'E9$*@(l*Jd
+r>iHHl-T7TU%-M?n_c9=?9/:%:[n]i(2K#saIqHgpf,;SJ&'&Ih[0<QT`2koXu[`_
+49ho<a$@kJrZMW#c#Oh-'H@H@[7kslr![$TpqQHI+kPA%ouBI'Nrc:Rn^''AIu"UT
+k.(u'M@Kfj+!(An+V+EW?QjG1J&m+EF@D&5Z<*';R8a#KGips*F_"<f/Qhf:q_8A#
+nF'KfOR)m5odq^iNA8d9.Y!6b*9OeOPai+^554c+bG!h2]jr`pkD`T7)CIeoWW""s
+k;CGEnPsCOXF9R7/r->8NjZr5WQuKfD\+]SIu"Ooc#PipXcM(oU71G[*h;G:;B]#<
+L?r-_%*PR.KMHigU8ll15Esc2d.HX(+=0E7@br5>>rdifF4D9G<l[f0[6W+2lW#&R
+6oST.K.`\6&NT-ACLa1>>+fPTFfLN9U(^Y;@*>H&KMHii>1!&*]hgOK1ci"LK\")c
+\oS]VkI[i,QX/m-U$89$V3E=8-=tYo-r,-#d.qh:\fNo?[#8C*>re($kI[i+JZcu=
+n^Xb;>8&dVb`jJ<g)X?;"'phYj/Z'61?m#I-U$2E3Wd:In^XTVR:fGE$.!e*%Y1g+
+4EYC.Am*X9ksBIIY!\j5>n7rZOdVXTa%@#=rSlm!!l`O_'r`(=To=)e3Zm326_Gu9
+&"tW\BO`&2:5AS%OQ[&g6gO#LL,%,0k^Rif%:\OLI8&#-3`)@Xmh!2cLJ--/L,*Ji
+rp^BUk]FL-BOW&1SIW-M?Pc)+l8(d=q)%;X^-_V+*A:9Y(l-526`krLk]FL-BOW&1
+SIW(7MkSSlCdq,[*GcB*6`')#N1+iLfIA=CeZfuKk]J#)HF>%FSIUX:FsA?))\q^/
+"HA<4,6C?RHP(fR@_ITBkHPo;p*2Mf`+JVnN8AmnS'PP"H0e"=4c%AGYo14J,<)44
+B(OZ6hKoj(cXJ\UJ-Z.*#QTA\!.Y~>
endstream
endobj
14 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im2
/Width 79
/Height 24
/BitsPerComponent 8
/ColorSpace 15 0 R
/Length 3046
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,fQl+;bXs"p9GX+J;gj)@d"*![/\R:b!4gKu%2JaCmIO%Yo\r!=4KN,SGreidjY!
+<%A?7"esq"CgJe"N'r:@G]77O)NBL3J]R%u4:MfhUZ)"KJg;KNaFmGG*0<`-!_G_@
+@*Fp1!>@t6i91l2:FHoGV';=(Q;nEK9#YheA4A1'"32OYfl4)1/s&`DEqj;L?mZ2t
+"qqQ4)Ij\R#GtESSBtsU)$Qn238E)$2Lpe'o6:r\;()K2U(B>D8-:'"7>Cjd&.!89
+!fY/TOjNB43sIto1!/4:*#f1p#Ef,OhH'j_:4uQuCqM_b*t0OG+OF_25+dd"PPP:]
+6lQZ`7AE`9#&P@t:l&&-(^c$CU(IVU8CKOe&Rb+p$PA&+*(Q%L5U8l3UkoRQ!2Q!"
+0aK%t)A\G\=Xl@lUp2NYP5ok`9b.8E"=FLaBGrE.!5Q5_P@6EP3KO<HBEaTNpb3Kt
+V!p8Z&g[9<-kms>7T'qrYR1Pj75.P1PiY1F2i\M)9HF6<_*1Y[,1/k[",,>?6P3hD
+N`D2%.9K-'V'0"a$%^0h"Vo"$\/#Z&.7t/&!Eg`a"9?gN'9Zlc/k^`SnHKeq!jNYG
+OHb#U%tgP>A6G4L&S=-?7B()CQ"9u6=pLn>104O-Tb&pajKO(8QR+':99`h_lpd<&
+=B61R7G*tE$N`jc&?16V/clC\QpOZ$"lN]l"9;S./-*T'C-e2[i4_Ys`&V-s%H;Y^
+=I99ulsU<2Bb"R7,1/#4%HU\g.?.iZLgg^bWEqrG-7OC*'kT/Z%tj!MiY@`q_&c%(
+@aGGaJ>B](+.$A;.MR`Z3(d]d+aK4VJ\Yu];[FV0PUVq$Bgu5<`?@WOQc6L59,<)?
+QqWKK0o/sM@K8e`!C2L/1C5?&RL0m"6(Kfb6s1-mQGlDU<<M0h#YPsZTUH,e!,tP!
+PD#X$,_[E:Hn>e:Yg-o#+:,=j%#*>`P8ZoHL0p/&Tr)QCL7).E&>1.t56,)J-ru,b
+k`@ch!17/.$R(XC?^ASI<[/+VEJdX+"V<dU(.=R2,8&ukBG6i1;.^o;i=%>&J\a(B
+3XoK$FDI?M@.lG`,1m;L"bt.+C`?l0\6>>S+adCUqr%ko#(\7O&;eEkF?#WfW73Yn
+_V%IQ'#s^:&=5hR8e-lX&RGMRTLe-($/h2Z&Y&qO#UFts1n#2912+01`qX9U6\&bO
+d#oQ(1[>33KQ-tm!\B*DOU^6)('&mA'gSFb(1AJ!"u.eW`R&ZC6E!Na:hC]`ki<$.
+`'"C!;ADQD^`.lq8;cq,/mi9t'*.q^!WbD?"6^g1JB1Q?nR`-FGa/m#<)WnGedK7n
+!!o5K-]$m$$HFRW*'pB"$3=<I!B?5M,4$1t@-f3CO96+_#Z(njLa#3:'G,h7>R6u<
+.0]2k$fJr*%Pah0`3?BIiKP&]n3.T,&<mR?HlWXr:)j<h//CPp7gcI9&k(A-%cCGI
+N=^b&JTrd]@baA>Z-GB80^/XHXA+8-^'"[;0G6W1<Ig2/-:5f7"/7a\!l8]Q5aZU$
++^@g#+:^<L=:#)&:a:R"bRXa,G6!6u$]?]:Ku.53#6Hk_!'qe\KP7_!.)65pT\L7d
+W9=\@BGh$DO9im')]`F!Fq0'G$:KE5#D8s2M3&o:_'kKO@B;$dnSU'NfIdLSfNAJf
+rZ)f*<sI\U=9^J='>\@M)e2DfK<S#n"n8Pq5r^t4+F#LAi%u@h<*p*N6mKS$>6j-6
+(l=BL3sTHR$N_k@No?upLKNLS,:F1XJAqSB#VQA?Zj?qE_Sq,b5S_,rB8qF^#t8go
+#slcg$t08rLJZtL6[/e<&9&RRd-2S1"@WQl+;I>T[fIZMFGE,--A2qq(A*8KJg-`P
+"$hJZK;^""^]GEE&FUYBP]DfraqDN-RK_UP!/3Zr"G4_G$`aC=LX7S5!O.do!?beT
+JMJ(Y^ht/Y#^;'.`&GO]0,ar6Es^d;*eL>QJg(bH$N\$OXaitD!ji%:i=[ZYGXi#A
+4:Qre3[BG6/c[,0E=S,h4NEi])$#=*;c'P0K(o?O@-DM5+Ckq5O>d.aYVcEr&gBXB
+6Q4pFDi;C^3K4"L+tRt\O&1]_KNJs$!YeOiY[e7H8-fDcA0VD#.L:`1[LT&87YaiO
+1W)b")#tou$))Z'L:Hrh"2l)d:f96ln.l\RQiVnKFq2A;3"$o-71%q;)M&I*&V)DK
+L_7?=6RY;BK<QMOE3pm@Ln4r`Ud'L)aqfS*'c)<N1'(e2('%/k&3roN!E"e(`UJNj
+&"lLE0u+h5R,f=HltVKAn30@0nHgEW!sA'-2Sn;Q).P3J!>$db7*+'a?tarj!1YHk
+p`]c+i'@Te+<Um0nJhWn"Ta0"-@sh%)PPA+LX<[X5U_Hk!9e,"J:JAgi%,QDLa\+1
+lmN!U^D):$B7V0@,sX.A!(1.8&$bml#<2r"Tc>e?:c'96p^R]4E&n)/ZkFBlaVuJ'
+@uDfH)8Y5=(OuoZ%M@\2!^M&8+?1\XU!c.qkY`'[X<7[dFBZ]r(`;3CG6T3?"NBL&
+&RZ^`#k8rP!-%!9THIYJ5it-uf_?KifFilLJ0b27((2=>6]."X0QhoV!TD6&%T!37
+7$sI<@oNj@i;sr'./Y$Y?ki[XO>k%tEu_sq5R*=U,mDrP%&#M'2_^*h5fd18iaceU
+0S@OM!!NKk/5(q0U)npM<Z\%)KTC\s('M,j"QBDGJC8lTJS8QpiE.Pi1"JKSpe,oV
+r-j13Qp!p[q&[FQ":6e40nj:9$R<<#pX*C%"3@>Y_h\s+@<NSVa9NHq^ha8'3D=t]
+,QqPS$jT&o)M@O`i>km7JWVc96^[)G^t:i'&7>tKL`dTO1D'U0C'MT.mi?rF1ln?m
+4pTa,%Ui$fL67W5a6<.9A,(NS+<CM`GiBcqr(d^IdK[[@49pY3%0\K%1koDj)usY/
+N>C/,LSn,G"6aKZ!NmP8d-MZ<U]:np3]fiFarKHrg^fP>43'&G*$aNjO&>frcDVg-
+fGm3%!28Z`6-^Pqn/hZ8D1T%o!Q#lY"ra[m&-8LD+TNJ^VAcS^*5Mh$6/!@;!#^j'
+*T>9d+9~>
endstream
endobj
16 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im3
/Width 57
/Height 24
/BitsPerComponent 8
/ColorSpace 17 0 R
/Length 1779
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,fQl+;bXo!s4%(5ThHp&-`8hJDbBC,QnGV!5W%c9KFj9#(qJW^i2CY%L3+;i;#dD
+9FV7166RJ-9I9`H"[[cJ=:d)%%)Tf2T[7L5(^pC35X;8e3WT89l#D5='FG*MK)kt&
+n2)$h"3A<PlF`uf*tS]G689%-!Z)E(5Tm;P!%U/@:;h_1^i2mk&;%`B^t9n?7]Y'J
+28Cmq[N5O&5h4eC1e]5&M8S=m5bp^r'aXk!@9BTl*>&Xq@^-3C=tU,8!eMQ&/2r08
+!F^7%:i<BHNRn2^iHW.I1)Z&UJoRaACbE.!_u]BFN'90?#KEN)aQR(_lO?1fTXND]
+$Om0T?m*g&%K[&m!HEWL'QuS[O+lWQnAoPjLEW=.%u3IOAfHKa#_4'$_2*gi#bh#Y
+&-sFm-4pB3-u'<D!4XQkJq1WP$NuRT1_,1HU7qdC@PEff#pN33-&I4eS0s$mKCUFJ
++qTDV$=Z8l*sZ8JW[e?AJ?BrO!O,ZG$R%UI$&-3s0F<FB!&t\tiD;Q8"$cjn/W53?
+\h=HO!5^>s6/\7fN.OmK1CW86atsMo379Yn@pm;)MuoC#+,5@1TH+6q!+RD\K5e+I
+5lkpg+G8V3S.Z:kJ<W$R69sZeMIQXV.?)+dXsX^1JES6c6R\*Y%\lj`3sri<X=+;t
+J8jU2@/s+<1L[5"'Fhm7=<!%sA2F:<K=LD5O$hRp5**SMni71IYl6YE!q<]bMk]/5
+2i^9ChEh_5!=D!tUbJ)]MIO)K+c)iUF*eJX&98nU"A!,OMZc"l/.k9PdRFM[nJXn.
+K)$HQOJ:[o8.m/7eij]+5iNfBUR!khMM-Ld0T%Q3Ho?Yopjb_e+d<ZXL1/"L@0GNH
+C.*g8TOJ4e^p!m5JA=-,%kI]W#;F$r38>;RZJ\%fK&?nm`rV#n*_@X!(5e+Q?na28
+J;AFe(BB"O#Sauk%]cX^3l8l>,2`GZ&cc=t0(troRSl]Y5`mBbn%3=:#QXpE$3u,)
+GS$(%5aW*$J3[3@!s$L-+I*RE\j`=nTGS.MK>@gI!rsHO"HXn.QMd0uKU5r.J\XPs
+"XS\<+pWh;?n)-Y^`jc'JY7>%Q6_J-&e>!ckT(:e^]L_BXMB-o8U>i`>aV;eO(\fM
+WM!>tJ3`$TX_;*_Zh(%$cVP#M7$'A9!\,s"bPI[B?0VJtZ=F(b5Y*"Ch6<(I+<1T:
+^]sY().\,4<3[):%KJc`&-SY^8HIa+!sroXCB-Ar6)U[HJ8cPB@RpM"d4"-FQrj@(
+8-/h=4U1t6^AsoTOgqkU":-t"!WfeG2o72t`0_,^U.CM5G5b2Y^m,NtC_$h\..i0X
+$PL6G%=slj,_0SC,K5AgO\d5J_"%C)U0Iu2&n:iI1R`VV;BV-"/1(@I(]cs&9L<_S
+#QT[J'#IU@68n`AJ[ee`i'^0<&LJg"5aW1W>UP7[0c_N-:(h#88cWf^$\YUG'#IsL
+M4lC"5o:UCia>IeJJK7+&=4&.Y#9f>/d0Q%,m(>0<_?12%>4^q"s>s)9#32,J4LRZ
++=%AG=MHG!p](L@SiOru2CANU#F/2g9E=!g,)#0O'B&WgM.q>?JQRF:!c1\b!$O",
+BIO;)j?/,m3B?3jPQP?%.YQ_t!ed56'LIaV!amo3`5%`Q?k>_^&HjOO#YtSR4A3_m
+Q5%:lV\DG`-%Ra5*@%Kf"JEO["sAaY-ifWnJ1)-9!6uSckT^)#81k7"Q6H?c'n=(u
+L<E^l,s[P5"!EC>#1/qk69nHV!43Gj0GjqfV)FR4>Y;]F'F'*o.g8DH$p8P3~>
endstream
endobj
19 0 obj
<<
/Length 6328
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGV_gd!e<%3\3fCcouP+Vk1^ni9GTB/tbRV24Id
+a"8b]_4lJ\Uo8$o`'ahYprlu#&.:tf@;sp77%'-3VF*r%hJt`qNTTh@Lu*BG:'QqK
+R)!-"LQs:iJXpBY7N=`<:r/**F_q[!+n:B9;E5edc"?R7K^M'A(C\>/.PS;Y0cUT,
+1iR-8?nN9)iDUrQTRnU2N!0p,D*F[n']?qF3iuY/.5$kl=OFhcAi%;_7FokP0#]N4
+AV:3@1eup=)Fgll\SQ_/At;<POO9<lgQE?""p8.[1Fne3NC=";@0D:_eO+3*gOR^(
+_n0o,4H&YXs0<PI@m\S?"Cs<qmIISemr(N11hrbd49Pa?;AhPgH>4A19Y3()WJY_h
+h2UG;au0\RE6eG=6F]o4_'>&mn24X3%_&+iWXeYRi<,%P-OrcHL5,eN'#c7K,7#54
+cd5K="XnFK16+_hdPm0%!+ccokW0?1Ts9b-)Q;%neDm`PPEm(E6+CAC/KnqG0Lq/-
+:aV,G@)f2UT`CrJ$mT`7+M1"bQkm6;"NhLg83D8FNPhQJ4$`5`dLZaQ.-<:D,ETo%
+"9KL53"A<#_E(6JFI:_cD5o0O"k3%(b)N`$ei!u3">`=R<$W"h9d+W02U:`+"<8QW
+"[iR#U>ul=L*=WY):+T]1sA7\JD`<o[#!QsNWZCc'Ws_e=:e:2(gT536*O`79Jc%[
+?O!3`JfKN2-uu]A'kLZ<%?s9r7T%Zh,WQ>AI4n:9O/Qk64t7#\*sa*&i[G<]37']4
+1eecec@J7'10]=Q!u3P,14N^jeJkqR%4Oj/1>a=<kR^(uR)V,q,8Cn($m>dMAdie"
+O:Vl]0L2NcM+Hhe;W.W)BN]t$b<U^p>m_9BJW$o[;"r503"B)D3=./[Cb#mi,;^.&
+NPhoYQ4/)!.Pm)P#hg'9LjaD%%C"&8UY:[Rlnm.cG)`;6\2G\iabrc5["bYeXLq1<
+Mq]-6_/O+10VO]q)2>Q;bfeeXMmi&cm7^/%+lT^?_o9r,Zc0Ik!,`b)\/$V6#8d<^
+(FH4Q5EP&F,R+eij%^!oA\eB47?#-dihn/JSJt)?RJ)2qdC*mn,#M;Nae;9N5i8Du
+q:O),N&nR5Re+a:@\6/]DVlNG&g5U^HgmEk+L=[bes+HD^ZL;P)Fomj_h6?K!P.Np
++Qgf!pgn@SGVYNQd\<;,5mInUT0&dMmiCuh9d._>]EObn_^i]Nn8p\)d)r-A)qTHc
+7Id1hW!\gM&jo3#1;)4`p7:79J$:+06Vp&AT&^<8m>3g1BNTr*R!F5@Pr>p*.(n%9
+.>*3&!XCTkq-.j`0!':I1'1A&>'`V9/E*-bQZ@VL\6LoLfW6pl,nuQ3YD`l]['(%Z
+J]uJ`,n"!I51%:f;b1^S-tXV*G1<K`EcQj\lluWeL<uA79PED4IADDU[GT.]%"XM)
+[akS[9OWr:$O"Sh(6ol,Mbm_/arn>ngs&gB<d(]B0"Zq0;qX801I6\Y`:fMQ_gB:_
+5_3U',VU4pr$mo0:s1DdR'W*1dR]PFrr[@tUVh%bDl_!CZ>`8B!NZktW-H7c+Aug>
+K$%VDrCa6E>mq)IPQ_`'"\\RN0bP^N%VZfML1Mj(<^b28CGe[X'j0m19Z<Ca63P*2
+eqKo(a:=oZ1/?H6mN;dF%:OoGL01U'@`sd*d<4_1#"Ak5.[l@97U7MMPsQ?].qPo9
+!`51PU=r"6MQfP(;F!MdNIYXO[%3Nfa0r&*m)Z-gBKMBAOL&JjGY&9*W.laGhq>S1
+%,n`aalh6qMIV"*Q#R3;7-kACe.G!$kp&b:ErQ4MG\N>;Y6Q?,mMV!["gs&ZehmsO
+WP"FXW?n(AR=bMhjKs:#mZrV(p<`-jRBPt?^o.g]gE.t"0r@&M,l-NGP"dZBN4J+8
+"P3(l^gh(0-F,E4nBUBN/YBkD3/:Op(tae"<4$he_+',m=kJ!0'59gg):YLV7<Pi^
+;AE,49+>;rED7V=bT7]\4Cp;l\$FQl`e4VP6PsVgCqV^*V5kTsSW\YBoq[@IUMq\]
+-3^DXUB8f$`+BB.8<q73RKk9(dti(JWO+8ZJ>O%_0N;Zo<%5lGkh4]]D$tlk7F(cg
+A/>BF1:!G;?ARmjK6iS]MDg\VYh8Q9$e8p4=r!IT-CgHVDHX@I)`#>h:XnS`;LuQ_
+"t+ds@!HaP8)DiR":GqjK/^$DdZ4G0N.tjPB0/am1J5aD*Z7#_Qh$ttiFt\j:X&C6
+TnG-cG12UP9=T6Jc*8a!=<=JrMg_\3$I,Z&bOSqs9mDM@1PMX3A][Z?RHUQS3fMc3
+<SPlOb<lL4&=[[o&T6s3nm,tgL6[G1WF2A\Ue!pKU4ec<%sahJ<(?m*GteDK0dBCR
+,lo''Pbt.^j!fijEoO25K=T;/`,&[X=]7hfQVA\nC:lojqIU(CV#j\1gJaNk/Sc-=
+qV+)ID=,WAV](FpdV#C%>MI_U'OL3r;"/2V.X=OAjaiYT^:3aM0u@=o__'n*_A%<U
+HM?9:Xgudl-jY*1m/WC).VEgFp=!eJ>!#`.Y0GX[&&:!dZ%<*5,.LemN0+IJ,\F$P
+9j.,nMKNm\")jOLJMDm2(cI*qditU2?=;K*:;(VcYTo/KPrO3pdEM-fBW,n)M'GGN
+N\\7O.S6i_LKm0C:BI1^<G"3olmp`?,-k]MDn+"*A%[/LeAje(HmS=C$djtDL,KJ8
+:Be'1&Rt#\)V*D+XX9OYcnd_aA2^?I!8B>AF3;b<m+2M$Y1aP"Clc/*$Y&>!h"aJi
+'1q7=]I"k8#T"pSFsS![\<?W6J8,@0eY&Q:h_O;!P!7e/pONP,TF,<_]L]lk15&XG
+P6`X5/SD%F:)(Ep4Me>r*cSBZ%mGrgRb]\d-e!Gr2Id&fZ_]<\U!Ps>o;KNc[4`I3
+(1co1N(>u)S$\UHhN#%fg%9:>P#&-b.L`eXoddhN.6Y08<.0.3;X1Ot4dgP^KdpFU
+(55FSiJof+#a/'NOI.F+Rnh<7^tA*LDW@b$8Le8Y,n?rtG++?!f?:2T0@n#j^*[]o
+T>Zg$J6HXLY#]@d:.noT^tOnXT)nF*RW((mBJ=)cN9K[fBF5_Gjl-]!nuIN)$u(%g
++Q!03J1;ben*fHK,,,C@-7Od^JkLLF8&kjiE;HGhP%O]<C$pr+E!Xc8pMVN=U5V]s
+!r;:Gpr'NeYCq%:9+=8Xod2dq%8KH%M@)V%^?NE:#CK]fp^V8_pI(\FYEDj=jRWG`
+%?HB0Joj"^.L!eGI,]bgOW5]ZXt7mC,#HL*UC9#X=VB+:%`_7_;'IB`C-M/=o[+Tl
+_^c7:qHANZ&1!&;7,gUQ+<\PO&Fi%!E@N_@9)+NDpu@Z",9Scrk8!NC>0JHLEB=u?
+.237]7a[J5OOk2m4Up<f."_j2UK[G2TaF@LA0?sB-L_:[JJ4/jno&b'O"hV/1E0t'
+0BD\0E9A9>[)<MbIk?WX/Wgl'g6=*IZcHS[DrNYcjpGZ&IK\Y]jP8BU$ruG3i.b'*
+8n;M[#gZo*`+H%TL43ei=GD`@!pb[$WbTP8C(='Y#:1MOE'=<*7/`3:lD>iFmP[DN
+"O.5gHm5)C&0),Kd/qZi;P;\+Xibj,\<9CWBdkI*U/D:H('ualYc$L]Ub8G&<rGc`
+"Ad+pip*+#B^LfC2;i3RJ5B-:b\kO#:b1&;bS#GCM$mo`ZAh3ZjG_+Bbj]EidEEeX
+J:nC$FK:B<k(eJN.5H+I+Tk6;?a)lXV09HN;(mt;%B&]kn,u;(N6.`iLX=!Y&BPU5
+Hm@[Go&+=bdH:tdlLZSd=Cj]RnZs'k2Sm2j(5#)35gGnak$fh"1IZ!oE=Eh-86@!>
+#4l(&'4DBURl+&@oHWXDA3`X@;'0_Pjs1XV8kq`)#-`$m-P*q2_AkTL^9`LjSj7'7
+/aPDlUn=OU"V=WuZ`[%TZFT0o;@1q%ag0E0P)462_uSTFVAS?4U^`5mA8SK7mBR.4
+8Bf$_9kZm@11r,_9\n,(1/:g6_dJPi-7(2MnHg2PEfapTlC0B/+-9Z;k_ffO-RD3Y
+#"(3NZ<DIVFClfM0.NXVli\cug3E\D%4ns-;fp++W0F@`:ee=$9h&$ZocpShBP2_2
+LQIJE<7hJ@:dE`XP<-u<h)#\d1h.Go,)iW9.5`h&0<lc_TON&)92%e+)aN*c^rEhs
+5r^NC&Kl'f;imM+gGsAuoE/G[V7^:pfb5V)3iZr*;m:R5god^Q<hsI\A8q`hha5HH
+-k;&;"Hj0Jb-VI0+,7-o13O*@8@H<!%:IuRPqnQ.G>#8r9Ckh7UCe3h,rq46,O\$%
+!shCS@8N/2s%[nPZ)%,T6q(*r7tYGJLJKq'AK2h/q)*:snP)nu0Xp5L]IV!PW&mG-
+>gS9nBl%KN8>9;Qg((Dt:CYiWdV@56i):9\Z$!Z&Leg8d$<3\\%;G6o/L$2!-D'hm
+KbNmTCk/QCWelg\eV])aWsWa&c>NiIga]nA-t$'cK'6Uu4/3`]1E]B,D*8Em/Oo$.
+Ch53:OAPWH%00U>oC@i]pI`]':dgJ"%P3?qDahH<"fS"AM.&p:T1CUNM+lEOY]sb<
+9(02C+Col#9$$POi!r@_haVf[$jRGg=#<o\rC!YD<;-/'B_3"e1()B%,eZlk@-b.7
+&*uUlJDdmMJQOQT9D&:*U+^9sOVJUG+f6h$:RQ#WZ:E"jVP9M*,Vrrs4Ag9t4>ETO
+f%OT\^g+>.CfL452X2uM69?D"Dc,YR+PglKj<kIZD37*U7>+:")fK^<EXtE?!e0dN
+/K\X/]F2YE^r^''%;QJHMc'g9'qI\PcD?>=I`R!<lcVR_!c9O-i,]<Vl\l=>%ZtXp
+gLu:&<-5?]`kO.I6?X&\eei<s-G+2(I]']2:%\;t<'2:\+CYrm+@#t#E1Al<.)Q19
+"MQ#]VFJNh)Pjkf7RdE`VC+X)#i]"o6M_-X+PA-R,%-iB!4E90*XnCcI@!BNier70
+*IX:>-eId3+;tSr)D+8g3FXa!"E6%d_EK0'Jn/[%`\W(k/Unr^KAsNuGXX_397CM`
+KfCZ<@*=0WNE4@\Fb8(o#=XAl-n%&TIi*2LKmu(Wn03RAJiJI5R#-RmNJBrQ/O[$e
+jD6MpR=of2L6thq,t!G(of:#C#8jk'3(\R#fo+nTL>sS03&MY-isc.%M1U+>"bDDp
+l;&cRK)upN@Z-8V+cdJjM?E+(R&>R=X+R-14t4?k@Prlc^Q1A+O)p0_64\d5A9#.'
+Mdp@@=UK=4/-bo)K,?ET,bc[g.Rdm<0mE0qi'7b(2D=*f,*p(N!n3Bc&XD"/!MH/M
+=](MPhD'7&QGO+?@Q4PLOq",u#_:g!`1f8gas,I\#*j3`3<OH!LaX,!K6XF6irhBq
+W%`3>0b]Y,3Ob'tAXkcYM1_8p6IK)TK5t,*LH%-OA88H]`_WFdSGD?=3AmE88"XuP
+10N[6)?HG_f:-m1,+-S&Uqr\W&D9)G2AsK-`[kKmj..);Th\(I3VB*!o&P*CSse-(
+q?Nf`+f(P;UtN??@XXfOlT?(ETDCX.H=<QEAj/7kU3Z'[63Jk!2''Ob-UKA3iub-q
+_%N#R4YaH.CEPco5H(5?4$%LX7!S<T3!B;TVX2rG@a0;(6;/4]10Fea!,t`E[AN^V
+W&gk0A<[<D>>FsCWFPP#@&^.R:T@n#5m(:@g<E;eJ3>[9`%jA[K9.hk]KTgH0P=kk
+!2*($'`5chFd:@<'8fHT/1b?Xc];s:3ts:R7Bt70Z67&j@e["a/hS8Y5.ZtBUqa(m
+E/#Si5Gb0o/IFi=U^;o<8VScM6Yh3rek=>_Y9o712p?K4dQZ`-\9X&3@OranR2XbW
+6j"U7/hK*:nfo*FjC0YLO$Z&MW$7U+34\q!!9_!VRiEBY,-"MR>K.ku6+\)OEa-#.
+q+8.:ZatLR2AYbop[j1A%tGR^\Q8&T=Nho`=2.t9]LOEc#dqA#_3%t2/m'.*]HT(>
+3PsP2]"h\Y"!tSt*O/ilrF6Y^=D>I<rOg!u]b4nq4>Fe/hntr\_q[Pi4@TMo\\W/R
+`;EuZqoQVN>JMFEJ="])RcaNPgV[9F@f0`V]<eW6#IRd95-Mq[(Y1"Gj>_cD[dUjm
+"MS@kqmk$6?L80*DnWQbMf'AL7h/;#K'FZB.LPJ#:D2;UQ?GHE1dK"THee9QA"l%`
+IQTGmK]7NgJ8TAe(b@f1^scuEaE9D@i!l>dZb$aWVtnb4G;ie32/bl]X#_XR*dmo!
+9\diYr?9WK_:+)*Ee900AhlBR>V\Bu[NLPpbA<I)ln;n\,7hdn4NK']Juk8d&;'YX
+=b9,Sji_+UO/!#9)C(XO$(565RG":!)qio=25C&i+[)Zi5h[u!XdA#K~>
endstream
endobj
20 0 obj
<<
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F8 21 0 R
/F10 22 0 R
>>
/XObject <<
/Im1 13 0 R
/Im2 14 0 R
/Im3 16 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS3 15 0 R
/CS4 17 0 R
>>
>>
endobj
15 0 obj
[/Indexed /DeviceRGB 255 23 0 R]
endobj
23 0 obj
<<
/Filter /ASCII85Decode
/Length 977
>>
stream
+io8t3^:q"_[B$@/4$,Mf5!Dh@;-6q&<E3$k8kNZ+AQMr7?smA_EcQqjLRFQuXK8M,
YHPFE[nomt$47+s1c2MDZ8+0jGB\82WiF=gc+Ug(KS5!j&J5E[$n*MPTV.rG6psR:
8=uNHQBmh`H[CBtK9_^eO,o?+>?bNE@80Hj?!U`aI=7'5N6BDfUnjfVS=F\CFDbu6
Df9QFJUr`;Mj0HjTqS0SU8#*)[_KSlbfn:uR$`&?G&VD>;c?V7EH14+kf1W^]"5JW
Ycp)H3&WZQ<)ch2Bk_3mB8MJ%USFTp\[bsM>WOo,2)R6b9ME+3][bQ__83r((Dj3U
X\V_g;GpDjVl,W<OD&<@AnGXY>$?H,J@iG*KnY5PSt:q$NHKAdMMd:[R[ULdZ,O]$
d*U.kf@Q%CNhrSKl07HJ^qcnIW$N`9&eYg)-RUT%0[\:qLkpj&()AVZ0qFl+@q0"U
?XH&`5fCUZG^+IrP*2#mPKCqge'ldqeC8knI-g4d',)#i%hD)t74'?.*Zc@q91u7`
WD62`0/"ss)B'S8*(`^nH?slI%M"ttRlieqC2.KH4Zt>I/3uQfCMR^m['[0GZZC2/
@U`g4lg)I+_[-VU(`4)A/M/%d+#u>A.Olnl+sLl@D$UCQ,9nEU+<WHr1H.6O!s8Wl
6:+gX=Y;<Za2c48'br/H.7Qcr6UO3D"9]Y_)]]q>daHPo.k=q4?@RHSQ^=&acH[RV
+XA<Y'GM6!)&ZsqA,u]3"pP9%7n5d.5AY.PH$O\df%0<Yn#igri8EMp!WioE&:T(W
f\"j1g=k?;g]n&h"U,(agY7I;L<n2lhVR,ZnaYGkh8m[Y$O[?bb0$TYVNI"'g"G'L
o((o(jUDY.<`W8op%@J0k5"iKlK[ZlhqtrR\GH'umdBN1mHqd-_WU+Fr;?KaoCM&(
jS&<@o^qe9j5^+:rITWQrr2ooqtomPnGiOgq"XXCiSjP*pAb0n~>
endstream
endobj
17 0 obj
[/Indexed /DeviceRGB 255 24 0 R]
endobj
24 0 obj
<<
/Filter /ASCII85Decode
/Length 717
>>
stream
+i8EPNhr!\_l0%6mk2tgmm-O-,mI'E1n*f`1lK[^$lf@-fnaZ/?o()DDoC_eLo^qeM
p\4IXps@C7h;-oAgY:N=gu75Nio8tZjlPO_j65^jf@SX2hVRbknB/nraiVZYg=k-/
f$r4!g"G',daGe@]Zn^Gbfn;`f\"[%e(*"!bKJ)K`l?<LcDmnEXK8MB`PoX.^q74j
^V@P2dF$"Ta2l?C_o'C%\@BDm_NgCOQ^=&I[^NBCYID!M]"5Jd]tLe[['6d=Vl-H!
Za4guG'%hJS"#n0Ocb]cO-Z)tX/i;'Xf\:jTqeBX[C*E>VP^;jW26>eNfK-jSXl@D
SuJ]g_83t+`5Gqe>uXd&Lkpk,EH-ARI!Bm\Pa%E#R@0"mN238FS=H+2OH?32U7\'M
JUrB#I=6<`GDhB;LPLYjZEhg&cX1$d:JXc)Df:,TItWK.TV.s!F)uVPGtq+01G^h$
Bk]:V0i:eFF`hh':f)1QEe8mpIXZ`lH?s.6AP>ckH[C*oL5)(_R(g;KY-+q<\[c?c
B3SSE8P)K]?sn\BKo1bFNK&pJJ:R@epA+O[qYL'cqtp<hr;HTmrr2nRM2D94ruW=)
3&ilA+sJ$J*D/pr,pajSD/D0h2Cg:.Ci!ot@q/hO?8jf%K7efFR[O3Vzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz~>
endstream
endobj
26 0 obj
<<
/Length 4419
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiR!CJgi,*()aU_"3&H:j&.?S@3'!Mk+<m*rE2+DS
+W-8H'"9Oa[W`KcD*2B7UR(.)X(6->NiNt"i0cEb5d.+We>Vm:V`cPU%ZsYL'$m@Cq
+Bl$UY2jd<k_#`?6+>ap(,9_T1lmWd270ZU`Zp8(UR8(O#8[qYT[bL4/1RZV<B/&;(
+`c2%+d:Y2'c:9*.Yhj"Q(epahR)Eql.V$C%"-KD5@6#As((1\(hIadkZ8k%M?SZK4
+8^<(\!R0hGe*0Y/I!6.ED)c(6U6=b;Pq*W/7F6(O*j&N^%H14mnV"r;[G6e^PGYAo
+Z*TqFVaH6C?*N=E1+"eCYf^D"$:]3e^&HaV%06I_2mBFMe2IegR`I2!!<C8&NWU]L
+1os&S<'.kr!oC?h"*i6KN2%VE#f8qqa>T'^UYbVrK5f&V2!cpQ]s"E)RcfQZ;Q?du
++j7<sKb'"-\1Oa\35I47/7(=q&7e3)^9>'-f0+%ckhN'\/0_to!L(I38MA7Lco+R]
+.*FCTe?K3D_[,E5aFQUneMhE._Di$XX!nfN/L]I26gl/H#D<_3">GgVMU(?E^he%X
+4-BsmgcT)6dP3r7'0ad&/^W?5NIqf!4@Q"^fK+tU+Qg7.bB1P1ZQiq"oeBDklH$LH
+>0fQ4&:iFo^/Hh'1l\_>$O52BI<%A"j+GGg60p:07Rn';;&HCp0]ckJ/YpbJNaZsm
+kUFTjWu\eZ._)Z\Pk@=></X@D0Z-n8b1*o&0];gq<#`[g%e3ZB`4l<QVZXk8)BCgi
+C^obXfX*4'_Qm#J$BrJ>-sJqGX48d>[B2eO4PVLT2UPQgYX*,1QD:,;3f5s?FbLH\
+m*n:!q^RfYXm:/Q6rS48`o0R(hi5"qnC*J"=VU!4L<Gb$qo)Uls+%D7,TaWR9P-$k
+%Dsai)2j'9]G-+$P#&B<@C&SF[!(*?0T8@if^]P6L8AD%o`_64dF$FGXXEq>IQ(aI
+K1-Wa[3i3%<F^3`&8dnWqSk@EIcn<1lno(e`IeUrnhNp?_Dt0r,mu6hlo$oM#^-rs
+bp;<hfXtkLY(Dl!e:)%$N3EKSSCR'M5:PepAt?U"+[\46DUr?qaN7N`.gbO.SG1sO
+ZCWM<@c7OZ_V!VV'8<rU&=]"6l,%ldWZ_EqF!F68@[X*m\fdN<TpTR&Lp/i^-U\q>
+!i3Aa3F2t;_>"oKQk2Rt/g=iaM8'%*r.qm$-"M+c/i%B5aj:J$B1T+fo:cZpE&e.'
+f^1;3AE?0gdUck:2]_UX)iGl&2lK:cL./!=8`Th8E1*(.6G-io89/.3TGFQ;ClI5u
+B7&uJjLup$lOAK3FXB@4]iA8/e/OQU/@^Ied[U`^b\;mKTI->N?>>IHTlb,KeLe,Y
+?W84,1!K:GY4Y9&M`Rh&DBLtXQ'dA[Wg7N-`&X6aUko[]Q42`^YplKj*u9_<L5:\X
+S)E5^e8/]PX.@(Z!iF3Yg4OT_Z5=@#ap`i_FAD-ie@2?Gd9'jJQ/t_-4(@pO(X\D-
+kd<Ic[fH;4g[>=oC&,TCm-iiE*e/-ZNe8O%%Dets4&MF\"*13];?RAV!6,70"Dji@
+S,7f1`?.e#W;TFqd=3iurW(;UFFgOG,6pUV^^*uPNj:d3aS`54QS+1B_F?4+:b\Ud
+bmbkADG3=X99OQH,o)V,?@eL(Q6d=),;DPI+P(t`2J#/T64c?>Y(OgBo0MJ_1'JfY
+[_T38)?ZpN30MM&YDR;S&ZLg`AY_3g`8a0Obe%eM@?qjbi`m2M8I;(9.O$Y=MO5Bh
+DJH;r)??QE6:aiTi=IF?:gWTkYXSn@O;NT=VA9GV2QbNF(_eZU&HWeS"Y5IUPQf30
+.&pE1+iu7@d+fSg](AuXah'9=;B3RlV,%ZY't$F2k`c3lB.B]8)8M\l'"ng1W5u[)
+q]ZqpS5<1bSQ)GS3+X85[PsC@kaad8JCE>4$oTsT>&,Eu*(k':8.NpH_O"VeHu!#d
+(c)Ch&t[^;G:t90Af+Q"kTagUE_$hdT[WO_&+Cu#To_4@E97X<]!tAUglmLABH*m4
+`_j&bLVERm"s9W[SlZo%65TQ#+]:L[-VeU"\]"Y;U^r&0!d'PK,RfLIm[au0r*RM=
+Iu:`m#,'VC`b5]lYiUB<&,_'YB0[0J3(^)X:)[P=X+/i`+h"_-Y=jKn)U'XeL?t24
+(Ee?-;-\HkXQ_9<3jcX(RCk)dK(9-1?4CY$5s`Z+4<YBPZ/^1NF%=o>LN=MCmr30Y
+%DgC\is-PFlA%Qci7OWIcqJKe-[fpqq>q&k;/hfsK=1FPPHoNj_4adTO;;UiC^gIo
+-4,888pWd"A5Dg?p<RteC+b$G%B!W"5@Cu>chd`_MQ?d(0FHl+KRd`;]";EdYqMJ%
+mV?W-68W>"223#lE,<Ff?Pa<Fa_an@92&!:A^m+Q2XVI#5]f?G0JnMqs(g?IUC@[c
+!XA/Q[+$A7:\;$bT58c1,o*kQM"=9fJ>INn=fMf9]YqK7P$ZWre&ZYGqhB(U*_Y-Q
+1I6iFL.ZOn!iSaD'Id*um>0-,L:#OO5mjl3T%ZIq6&oiI&-S1m^[1ohX0mI)f;%nc
+_*D'YU![Hg]\_T8]/3!N%'jCqAf13Ds$F2[<ek]jC!63_fpb!&m0=qLg"It.2JG@L
+$WD0Wj1'!c\au-D*+d#<h8c]Y&6\Z!?W`%Dbc6KnB)/*$\:-WA>lotg4bUT;g:pPn
+m45L%H\Z;j5hRNh*<P_:*W*d`"i7Q+"u'3t_\>`RTXiepZb-ZuW+uS$pNMoG?IcM\
+HJpuLp*27uDSp=(U`I+@G8M%.6YgjX*%.+m^'70P_0RZFO-5iN<"tVu9ggK)V1d--
+>`1AC$2HbCLEO]OR&Vb(2N^?!`3'aTW)O%r"=Y\3cDu:cTN\/1\hD:_rd<iaNIB#1
+G@'ap?>(rWlE;Z=mgnE*>&QT^JBN_0?=V5IQgI&O;lml6qpnST"kt:\e8I5nNCo1C
+TVDW@QGaOiUuI48<a0'Q4[c/Kj^&GTo"BQqmEbk17F!F$qPJr,11V4aXsulY@-^)5
+#=;7FCT%[EeCbC"H:0YD6X%&G-su.rC@3(u9:39.i\^_Y/:`n(7ILE@jAnWCl).Lb
+l-B-ACBnf@E_,+\B-(i$,m8t"GXSD]K*KJr+CbPO?UjHO,03+R*(qb\b2hjLb`]N;
+T*M+c%Y@Fc+R1LInGpq!E$Trq^rB/;]T)Chi9!)hU=0H^3=]\jLEra;T]g27js9#R
+i<)n1d.19!VELU53@.]j/g(EGk6un+L+Z[8&CUkR(C,nV>Ap>J_Rr!B;FF,dBLOrc
+J5QU2g8RLL%jTRTK?,>&&mjn@6"K[`_gM)*(,SLj%4(X(T]Q\r_G7@V";'N%:d@k(
+nIIn*&!+S=_Kc4JrrXktEe:(kmquM8kn2s&"\,Yfn]^-l$HN>/<t918,[*)Spf$9@
+O7<c9Y+X#g3uotn7Z^M!k/,8oY)1=m>Xnc:U5CI1(k0O)8'/&j/Nea2>b6a<"gT$p
+!,<mSB-JO["V?.'.Z4F``ZUud+\VI'9Lg=*359+ud\'ej&hJ_G3lEFO\S1j]V+?fC
+l4++uMNKeP/a/oS<mG/jcDTM'BpaN%hTo(HRVD$k-rA@O%jgTK.S3Bd/gA[Lb/%f=
+d@qnG$h0S+imMjO.I"")8-YlL3@/.I5X8M[8g7SQO:;:?/DusC-t]i&G4f@dor_?I
+_aH6-lOKl;__TU1Xi2NjmN`G'\,sbt@#T]3'd7;N-up;Wi[lL?4"79->lrX_o$]B-
+<cDNV-)8$[i)2T[gD[@-+Mn^GC\0+@ZSW(\1fH4W_HSRS-mPIh#9[Q2Otel;!%'KC
+Ij,7U65I='Xsp]-D(5EAo5uM'6=pm[Rrb,V1PV_O#^4B6Tq^d2dp46>loO`d3O=CW
+8Yn5F6qc!]3V0OBCV;hDOYVN3`08k8nlIk.3X4T81WW9T'5f>EOq)/5H:6a&AmH[G
+?TBp_5DS/%!e3HKZSROm,GH/+J8Cj",`Qek=edCY96b#]F?V4\0;E\#@*h+\E\3ri
+JVK*nU<7AmA8Eli=<ip4UX1q3YVX.E6Sf:nJ5I*#oMo;O2A$kY-\aJEf+C85T[ANI
+_\*CeC^s-X5Z"[;77f54DDQgCX+TG)i(spd1gaq+<AAHIX&riX`'>q[]TD\oT\U=D
+*_7ua*s3FF.kND(,1HnA)eoF)&iN8M\dbt%U(<''c0.Po+[0]6J>+_%dq'h>Tg)L,
+1WSFGFWi>XTXpf[$grakZQUU#@%$CB;W'i>11rppdo*0VC+(_]oclBX#>ca]'Wo_E
+5gpHim1'7_%;hET,@Z\[=@/fd9GGE*%D9kSMcV5VO&0gj_gZB_83\Rh.O(Kbe:&m4
+-VLAcB=,$f&C-Ij]]q([=I$U?#llenmU?M6%g\8inBNjjThYo*+Jm'`U';__~>
endstream
endobj
27 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F10 22 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
29 0 obj
<<
/Length 3780
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiR!._,]5R[6B.YjH(5d>/-lF?Eh",pEtApV&]dh0
+=B%A7703K]:t7+QL^m;@R)iMmN!KTniIK!c2h_hj6t9Z<mN<[A$n!9nc>,?SN<UTc
+`<9@')@M:pEL>%81*E,]L6J=DjEZFuc/unU]^]&-N<[8YR)!)fLfq\!>JV'[3JWiT
+i7L%?!c!Ao.If0,J@8a=R3A:,8:VU;KBNOt_$"Rh1l(;%L;7Lu56HLt1,-4Ub&T5i
+$qAX3]O[u\Nm+AaBuU@#%2Opl_]E>8L+XDR\lNk(U6oj5_hAg$ND?K&/sQ`>82ea2
+'ALH[qO.on=WX!f0b^PL0*,Dr%#,O,V(8Pq%0K4!3K0^MkVS:ZE'QFC%_uTn]4jP!
+!/tDSF>o5a38?9c$CJsI%^7(s&.D3^atU]+!6dK`cnl=<%5:WC!2U'<k.6TSEbO53
+&-N-)4>.To(9;+Aq?FO+\C*8EJH4%PNIuh*'9%PljHN)rXKFSm,BQEn_rI-J3=`8I
+l8_5lGg$^m!<C+u_P:X:3AdLYW\t?,d%KaB!sm3`NPh^K0hTgZd3(P:BW)Y;!CRe1
+63Fl/"V)+5h(T=X&7"^%-n><C4QnkEK8(rX5i/83H\D2K.!psk"j?b&TcqsEFJMIq
+W0e:&Tg8/__;RcpPYZGc_E$'iZp#g&,<BKX"p$ul'X[s,_`e5>;P?'32Mfa@.U`=H
+4%^4JKj$#X+E&Jh_*s8qN$G"[.pE+G&f-<3R)l<41l['"],$4`'W?26AsA0>&3qI3
+GF[k?9;>e:Q3F>C^`9QnaA==EYh72XLc+:g[4R;[#jj5\*:Ja*CY3Kjh3;T)2IXLG
+it$r+Yh<h'1s/[5g*31f)d4I7;eV,5kYO)F_arcJ_jOtfQNk9nEp<f0)Vm5!UH%<g
+NM-?GJ\P4s`su#mE6kKe]"F%;#_OP[@E`qS?E6&E10DQtTq+g;LBopk==gS;2noS(
+pi*QQS4I$-0F_Xl)8@?3';>^"bA\#5=6fS6,,t'IX0mSOqnKT['l1[n]g!.&EL_Ge
+aE*n:-lI'A#;OI]>jIUloDt"AdK-+#(rinuQtYT$B[3[5YT,k+Z1V+IC`<#YZ@1hL
+kc2NuXP>dUjTZmSS/A=Zg6'J^4Jb]oL(+u1]mCp?7N."&_CNb5_9[r%T$_oiO*1(7
+ZH2?8ZfHMZl2n\tZMS#cn:"0\aZj7Qra976J'QU)2qT[!SH3:d01EU-P'g,a6f'j4
+^"U7W_X8R?Z8E2V!PV&o!tm">HNpbVRP8+Y*<CX?O,b!l!jqs!aj;SVe^HkJ.h#ZV
+1NfqOjhl*h%Un%9J',bR4/di2U<E^[OWH.qVlomQ.Z>lQ:pRasPcS5.;h>K^pc+X`
+)A%0u#2nR<"&b-eJY<r+BKaKi"(`RFr!,*?c,>5\8dH[5P^IK1!J9;`?mG:;"qdQX
+8!tqN,_UZ/0"+(]`uc^?8S4*)!R4-cW__VZX#+j':s#Z`#=4Ig097SR5m/7Zj;9a%
+bP"V"nh0B:4D"eoR+&)@E8d@-q'WI5XVN*5p07>uP5rki8EmA?,i$Ug"TAkA=d'Jq
+@An4Q6,ZJA%Va)=A!mf%bg!+12[\X&F0gH#bdUq>@nDW3lHR_gG]*/6:c&AN?=q;n
+G\[b-E?V"2QPHE@.h.RrQ1K!rUd/QU?<U8.Tj/-5j#04p8]Q?mCu)i4$E;*.D59QR
+.%9bKW<cAa5%IERSI-q3grM3$WhjJ8E5i.bi$\fGE"n[;#>,Da.Q;JEKYs]#Cm?k5
+9b/#/*eOPj.\//S'+!^L1YdB'3fX[.bUsZ-Cs<YG8-K"?)q<$$8a;-ROd/ft;XtfD
+WmG=XKF!=]Z6*E='gSjunDGeFkbD@>R1/&b?,NLdJjLBr$t4i>f-U<"OpDM8<C2q6
+_t@@dZ)!"q#/Sgd$j[1*eu/2(Tif3iX,-;r#bf(.PgJ1tK91!\XU/Ym@-S>USY!!l
+2UL/6,ACBH@'>P&QdqD*<lej*X2IPadJ)*cj5l2!25'^t@-;.j4e+n4,e[8ko2G(*
+O"[=*`4+buFfCp;[J.tr+T',\lud#PJ^>Wr'OtCD%IPS;3iF$>E>bmL=!83Jem4bN
+@u-]e[2.2s=OM8@O=CPFJNPq=VAWVPV+IHW.a_T3)G__$@VVd!f`RIoFmKkZYde01
+iu0K?n,=@ff&RNJ<$35Y8papG=_%`%J:n$1fF4GgE7C9rBG=*cJ9TG6a7b<U8DHrf
+Zn_QDp8np0F=*5*U`7=0#-8ma)3GJhK?e;BC,594bRnNmjuI4FSg4E_1VU*UfSc7/
+4K-PeE]%L.<sW,cEeO(":sW5ZjGc:tS`d)W'Gh6]c@bhR)KJNbSMMm0EQSM=DbLnT
+`qBcY748a&^?LsdVU^6'OBU2YK5F"YeV9pL&ALSF4]ab^Y-*O`O',/44%?2]^3<D0
+UHjfU75eYJcDJ%_>m'bZ,s0;5>;"IdMd)4f80H[XR+Y"H1GeJ@!Q]gK0X2k1Ph8_Y
+@Dnok"&,qDn7?ku0tp!V%E0k>`oXroC=e)5$+OcHleXUKp]Ssd)%0Pf#oFL>">ld8
+Eja)np6,4cD:ub&?O-cS.dUNDH#,K""l7s,!-(>9&U2D-9$BOZ#.lu-0kUOA`)bM/
+!e+N;Ai\u-Un\Ki1g]BO[_.JTN\Tml$3N1c`?:kTDu<hKDicq-'RZN-N`S_p2EJHp
+:=s_?@*?m?ETXeBW\MlC)7mRc.X2@_V(:1,](:4kmIR7JEreb#9RD.=pUDr=%_C^)
+++#hA^ihkh-fnEg07H!lQab?Ar7?\jr['V7IiAbDq-2h*U6#-<h;UQ7g%>7c\9\#i
+@fZUjfHs2N]8:]#I><]2*Pf@8:J'\CG9f02l`mKk0N'r,kNueUk$&+??T=[""Tc'D
+d3EXTIWDci8IfljqF*t)2[ng=3HWZ@YALkiGG`-UVAk/Rr-l)&W.Bu(rR5NZ%,h%Q
+LaZ'A<bf)A%[O0]%\[S:e3a$36ehhRX9UA0+DPZe6?r1l_YObhiG:.&-\1Q%hYSgB
+-:$]'":@h1hJ:-H3,B?QDnK6]@0:E(r/^t/&.YM?'"a/4S7kV":`q!%,d))7WN4kV
+YNH#W'\u>=h+&Ub"5Gr1i4'oL8h,k?5\@1:P++l[%j9[8b2e$`[!om-"U;\75f0Zq
+\Eh!UKk4k5n6G;J"u7Bo0ntLG#Ke1p!g!D"HO0m#WZ7i:0TsE+G+sqQ,T\*;g*cD!
+FDpRr&&*S?5UaTZ.n6[a0_l7+m#OX7%n4qYW>>'i'RL!UF!ld1nK/91?rX%[QOe*\
+!lXhc)%!8^nSqAR&P3LC5ktL@%]QtiWP$,=!hGGn/;6;"BBIr_\0us@&P/X`9h[Q;
+nJ<Q.N/>dqj.R;4E1=+gQ>J$/#[X3!9c8S(QUdA[89BIRW=K9?K<KJ8afcJ^XVB0i
+l3D9OYEHUQQ9B4&"+l3n0Qui?E]lnu_lI[[k-Ac5T`o&B%BG"q$e>I_*<NCZ39'cg
+"/I(.U?tVI0C@81_TM.<j<d@'%S!uPL;4'M9FN-'W@i`-csIuk4?!JJ,;.:an3#M<
+QR7kZGOc1-A#gl\:Bc:&>\1,L^saJPR.)Y3i(=\7dVU4L!iLQ[.M>#pnjaiY9d+P5
+$3JjK.[#$S.0C/p&dQf2lmjQ$%gesMF#$)cM]Op]kha=:$H'0CAVB@,mRdiI.+4M1
+:Djf9cRM`T$#2=1kr+lK7-;Cg$)!q#jC0U>4U@eO571jI`Gf+UY!=;r0#rVM1@eO&
+p>c;[n-bW,+pK/4~>
endstream
endobj
30 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
32 0 obj
<<
/Length 2936
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiR!.se3Gr4%3\3fCcouP+Vk1^ni9GTB/tbRV24Id
+a"8b]_4lJ\Uo8$o`'ahYpp=Kc(C\4`g&Sp!2B0MhP;<N8a#9GT`M7FG\8!r?d#+'m
+5h_k?,/EA<nrXn2#:2b@#,je;mg+]46j9m_4NS$D)FOSQ]H6o0(CgQ[_5Pd(J&$jL
+JC9s>#6hq1@;t!9k[T_pi1gmYUiJUSRa("RWSf\46_FmC>.R]hSR6u.XgpIjW[.lf
+$mSobgpTF(YLr#Zh+\;q/u-iPU4RsGjD[&Jbe"-=c5@;=6h`U>cM'Q=d;ZIed=A`D
+)P;:E!t*R0[O<8d$mu.NK]m,/RtM"KOhA[hNbM&.2i^0(QkY:KW),Uk,2d&N#-^K0
+P`>hS!]5TbJ5A<2+cI-"L'aO*r/B[K3tR?)bX2k-_*H-S$ubX^2@Q>h$9!n(+NcSG
+,3YsO+G)C[aZAWI/DLFX96eakbl`RP3,L?](Gb9uL5.7pMj1?@@[Q^F%HE!$1lcIJ
+%jE1"&geJ`aLf&247*BM-p1pqK(K7&Qu_mXYB[K7Nh`9+5_Xahk5(*j.(TrpT`UZ;
+Mh+.A2c+"\$Q+ht1c#:D_jq0&^;DA/'Z[KVK-?pd/>1_ANoN+F":b:id@p"KVAk98
+;LMd$.SR>d#`o&+3=RX:n2F%d[*r$e9k9Sm<`46cnYie3NZ:iXj2`#@'5Ct\^#G^4
+1'@\5l8K,i]CNUoUP*;=N2(@UP`;H:f_aLPI6]U(!<Ct4"9Y=E(Z)X7MDbng)sn&$
+;.Mj)`&)Ps@oI@%4,;f?35\=@"084Q"9T5+R`EhXV)pG)=s%[rn2q?f_6A;3Qbnik
+a,8j'Fs.GcOYRmj74le:(<,g"`u2n%]Q5*Iaf@$.>Z#ns9!9[7_@R0oW7is7YV#kl
+%0Hmk2b.g#qDQaS,tocl9f(9:U=ipO#6nVEn#k_5&D*er:P8<oh*Z.u2GqARj=oY@
+rBWi))lE!jN`>]MZ9N]UO0NMk-H2&V)o_M+d'nZZk=,6\9-A).Jn4V9=#f#-N:_3l
+Tu6dkq0uch'OQ+NYip$?%/Cr)h/"(NRAY9*Mkrd<&UZSJ7`.d60h.V9jVRYeeiY_K
+"/+PZFW5,Q10Bsa0:cQ5]Z)l=nY6>9?Pl6Hqu#.pG?EmDf/j'*r2^7egD`h.jKtX$
+K_j18)DDWcAW!J=$K9hR.=5uUn"Eem]GuH9%o6X;\'T^69J@k#i=/-ZPn"[!COBjT
+:_^$^:sY74'h6#o$oQT!a+L-17IUbMV+;(9_l.N[_56QP<!WaAX%.Gh2:+7Fl5ZAd
+^^RI/5U[o[#Te:!E+.;FL?:bRU-`;u.#^)OViq?gHln"qNI\*!qY,O@CIIBr15?+M
+"'nLeG`c"+28hu'97+U6nO7moR'P'@A6b)?+W%D\34U.5r+#i!_hLGAi59%L$qOPG
+Y.'62inQV+Z/P3SL;+a-*+WcW9K("InL,YTrKQi01+;)6+4/MgN<h!k+rJs^&+T]H
+0u3Y+-@Um5,5a^2^bCL.eIEh:Gm+fI5cIfZ%8dC36`DD#7D_tSj\"hK@A,pj`^&-!
+cu]cVQ$AUm2F8]plsMLmrhpPZ.$ZLj,&*^rPQ55`JWMiF.qGe51W48C60JMB!Bm%)
+^^:,oZp,]O^;U(cJqJ;bKn/5%1]ZeQJt%`'!5ohV3!MZI3iP]I!5a<p((7'TbFlu(
+O.:6>;G&5DTSA!u[&:'56ZkPWXooOUn6037l)9-SEH&^[(?o:\:CQW)Gf,ffi"eD,
+BqZj.^m:l5gBf;8ar20OR>/N'e&6jbdOE(A5hKA33CF)R;8^s`6f'!hQJoPC3s?&t
+O8q=lAH3\e,(0uerElSCV@j,a5SK%QdKjeD9d-GT\Hk?YUaei"eL7:7_;(uJBB2)$
+Bh%B!1t@KLP/c/O,25CP:MQPSeqH/E@4X873FOm+W0I_["%qrdoi6^K[_D8AV#-ue
+oG86-5Rbj<fV-?:3NY&#Q4SR)+X"5W:c]T)f'+f\jYR[COAJm;*@P&[I\Y?lCNck/
+dALf^Qeb)DPYt(=#6<g)PWQL!WKQCL%L/S%29>NEG\ddS^;hZVa!+C0<^0M>1'X'H
+i745Z.\P4DhqJZImfBM-9HZ7PCAd-36uYAG9npB.X$#"`-;c@h7j"DJg!u$[54>b,
+^&/pn?GkZQBD+cs--3V!+o-5UV?+8o<pILj&QiJ<Xtg13KjD2C^TDnh)R`n&OC2tL
+XN_(+6tD8hYTO7S/2dRF;@V"`>prC'XBX-gNj1`BH*Le8]bdRCZ>??uBXBlDpkj>j
+"Xci6.,(JC>R\m2Dd!H,nC'`u%:SqbTN0j)#E$[sDG;Q<M5]fI"Pg'+D>'XbR%P-9
+=q(M?0F%sGje1TQUXY;r['Yc-)jNl#!ngTZAQUS5D(>W\iEU1eU`S7]6(+N>D%4FZ
+KWloj)8e`V<d(,ID;!incWLfORtG]XIDU7qO>iXJM7TAifO`2sjjF.EY8T"'Zl7NE
+"9o6L-k3CI#hI9JRsTEW^#DjmJk"]4s)o-@/&D=T$/S*]NH$_[^p`Wog,nOWn'LC8
+c-G(P)gd>(%SBR-[j^5UW2uh5;R0rpYq5O_&-HK^XNcpCVKZ.k'jaQA:Hl)8PqWmT
+L:^D$eJVbN&`(0L4`HJb9aJS3aMX@R'9TYTMJhHo(b+=lhRIB1Dq,B?Pmo_UPW:qn
+_E5Z`%^qF!,0C23BqJDe8@oU6GOF<i7F&GWV6!0LT[coHgN_a",E?_<&jAa5qMW8(
+@rRX**BDccMt@CWU$JlcYUj3Z)Q/Wnd<j3UkWpkq-(XLE:EmT<U)<fjp-=dS1=l_`
+*KS%^[V:7P9%OC3DZDJ/3C#[WO$@*Sph0,Aja!5rZY-.>@BD42eO:m,VO@8rEYH_P
+>_pkni=mPG8*D\HGDV;o/>Fa=1k:)~>
endstream
endobj
33 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
36 0 obj
<<
/Length 2905
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVWcu'sFNWtT?BJpoE#*=`E!I5Z_#;_mg"B*0a
+'P!IE%cG`"J5T?(9;3U4P^m:'(CinZ+ddd`1)C?'6YO#,M)6oSb]A'NZtM<5%4H<q
+B\[8R)NDaY>'/,CFYXk1L@^Pi'Q5q"$qBj-:`;/0$\i-lJD).RVht]QBIs]+$AM'e
+ZuO':q0j:>Dq8'ng34(!il6,021/jmVI1a)_43LCCc@mmJr5DG<c9o7:3s1$ZM%N;
+M[O"Q_!]!Dghng-Ccj=U+H>Qk'\j,NEB:ks7C@]BCg&P5mfjP"H#-;P2i:'l;*iu&
+F$&*7Aq:,e5[b3C:;4J'[)-W;),=Me$-6#jK`a<W3WoPk`:?+PW6,n[,3YsO+G)BX
+KXf6(YT"g)_mJhYNcK0`VhkJV(Ei!&@,<n\&5^e3bsPI].SY8!fnBm9DVV^0UO3ui
+!DA+/TVst$`.SUfG`"oJ`)=`Fc@[h`0.<iZ)6Y3a[a@1R0[_mDj'_ElL<guE&.[_N
+cLd-XUYPW.:SU`F5Yp%r1l\gq`n1c2TY`WQNEG??57c6O"1<bl'G(`60L.CR".7Or
+L!@JO!"+?DdZm,&H<fcid%[*I`9u8mKdL^/lnuQ:J5Fo^UI<<d2FE/f1JP&_ni<O6
+@+/'ueQfc\NV#Ku1"##h_E&+3(rYrE6`^PP4>.Ys<m8BNC@VWR882'0iZ%]"<E3Se
+37n63a(HaGF<E%:8W?=V%[D+\1lV"`fFU8(,RbO&K.ZNc?8FG1s$.,,kltEiN$cJ&
+i,#EQL2:OA/'3aUs!P'd_@dW=DTX`]ZB8O&e$Uc3>8]=nUMLc+%FVQ>"u5InS=lqT
+L5)AcgC0^QW6."J,HOfnkJRjo)B%%>Z@EiEE8XPAN3b3i2@aX6JDt2)Sofacke;G)
+@CdFCMo7/MJ/Z#8Wu;jbNp':d^@Ske2M;.&N7bo6,el$e!FSi+>r:";M.)?@J?K(p
+<(XO9\?^;B7-bPOUN'LK3:@0)9(ir0/V?UagJq-N+cYcXp_4/JbPDbVUNjn1DqIYl
+.Lo$hNgC&Fpsb*uW&r4[M4jpX/tq;L)^;(,)G2HP.8!X,L+5qB*-"&I)6lcL!2\GT
+TsBKWEk]2U+Ln^)BniET,#"4I8RiR3qu3c8Vb+HL5fW1WJhH<agpg/l6\2./cB'r>
+"e;6Hpc&EX:_^/l<dMZ&BaeY1m3oj(JH6TB#&0&jT`_H(6-F(oDadG%e%Bi::bDkO
+$p'.i@%S2/@9J,S""bY4UVd@H5:=*)6-pNJ*1ECNVg($'5j00gcn>ReQ"@)%:^`H?
+a:;%s"9uYHS\o+o&'=p`7@4K#K:"9ITsQ]Z2_qeriNREZXjnNU&eRYP#s?NR1kH!^
+%Dg+.#1.'/Ojg?',MAQ4J[.AXOD[Ksl$!>m;F?`F#9orHI!UqO7?NE=,K]k/O>8.V
+a_;a/,V48)8&e(l.0V+Fm$j/YL.7ta#qBL(*L6k<9Ljq&-RH-TL_>4eOqIsb:s08$
+bij\Co)&rJK@,")!1Eukm2Q+?@oRKK;GAT//L:PNQ*RQ0""AF;-0YJD%?SI00P)@R
+8k5;*en5uuTZ9Sce0D<:CWbn:#\C[(T+^F9:)N!99DmlV'2EYnZ8r=3ABuB<r_l@V
+)'7qYKV=TI;GfHf5@sKIR"0_POI;4dRfFiiF=L,5."2XSoV8-Y<g+P,O%Oq=rhEEs
+@^.ob$kCMdRC&,VK4>iMk<0lae(TT,3EJkKeOGmiAms.T.5EAHT:KYc)UlfL-06F=
+T/)"V8bjcF.`C8EPQ6P=;BI(19d']u>!l;H.3g>P-'g<PC.e;=8Yk_fV/f%(f(uj+
+kT*ln5id]t)C#dZ,^NYbE#d)@D(4RpNN"f/BU#N\2sdX9Hdk*B=h/;hBm#qlQA3_q
+P/Ct80gLln1=B$&.^eYCW0Z#C=\EO=4f%JPPd\$4=p"4H,L*^)[d)Yh]5_\i4[?On
+*gp!]b!c_u*!UOXK?hnd45*+C\+=Y,a8,*[Xq]Eu.ph@=3QOML25@a(We6Du8NeZU
+n@6n1H<qKP4te3!S6%\'?Aem6/tk+q1V/:^>BO^7SQrSs-J(CRo-<[?AA>TeK]!6j
+9dq+dPW'5>?)$q*n28t.`VSFi)pLjoq%#Nlm]"dX'1$BY*D4h5^#JlS=7N]pTD+qT
+ih1@/C7/JKf@lFMS&:5+,tQ,PRf21lG>4C9Vk%t6%8#?=K'eQ2_q(Rqgg!'EDFRd<
+G`'7H\^%/E+>U2J?SQ/o<J)hD,R64o`+LSK?H>-ObOQ</;8@%8kF;=CL4\mX.2SX(
+N#JIAh\p0kMFFeaM6p[N3Z;9OS^NW9PPOfDQ0Ao`nPD3I3Uj`G3n$4Zl&iUSVaOfQ
+.ip>=>1%HSC6<?LR')hn,1abZK3\#L0;cJ7H@<2:HbZh.hOd.R/t^CZQ:85uo*3cr
+)s`K]Z)6G<<-pt#mB)eC#gLDN-]_S+?-0U-!`[l/QZZ8!/%Oq-Q//m8G\.6Q]^;$F
+c5W5WAZb98GJ-W+g[7h.4_^4k`rOpUruG$"T.u.q=2NmilN#\DW;$5;]0%$4W]h*9
+\G$EK(nRX3Sg--KT,!pgj,D;Z3IN9q+.e<f4ljh27bEb=i`,2rEi]W@36_lnpaPKJ
+qAIO;D>Z*;GE_PZ1Ngb\"lPblHK/=`?3mG,k1i$)ih!K@Y-'B6ZL1k(hT*7>.7:Fq
+qm5iURu[nZ%ki8g+Os_t/\(a_h\at?FcQ4IqGh.dGQf#Z.[=AQs&.Xc$a"ZSJ\q,!
+<o8<IJPpqa](:+0>B]#Eh*"Q)G>/m;(.rXk9/F.MG(mUNVJ^&kpSE:XgXH!L20g2^
+701^"dba!$qn1H;2+(Us>-Hn!)6KC<n$quc]B*f@'CmL4[[d7:B`0&nXXj.pUBC]~>
endstream
endobj
37 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS1 38 0 R
/GS2 8 0 R
>>
>>
endobj
40 0 obj
<<
/Length 2580
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVWjD5qXNWtT?BJpoE#*=`E!I5Z_#;_mg"B*0a
+'P!IE%cG`"J5T?(9;3U4P^lpm)%33\nSl9S2B0MhP<p/"jDm#F%H__oK\A_iQqoM`
+bWK&f)@M:pEL>%:1`TQtUf\W)*`=58@-"8:JCOo:*T7S#BRmNsLRB<["%[q\2hU)p
+,2p=h3].gCnQ<U.YSpH%^u2`T9J.9DSW%Qn;9WK,*1'2C[]=N@Hnh:RL-%*n&8a[b
+Ppp:L75g_dd0_?\3iu_p>:u0I:dR!G3t0bI@Sh'3^h]g,Pp<R0UtTfL]$E[:h456i
+8D9'Be:0sQBM^a[NX#*CQIQ.koAR:5T3"XD].V`$eN:q>Ut7_BE*TV*YY\^E/C/B^
+VN%@$l8f?I!5]:2UPS1jNPc_k2iPQQ`ht9nP,PDa"#GfiV*bOD1.-\gSICK&E'Q@A
+d)ainN_TRn'FaKTJ?$-i;jc_k:4`u&\rM^Le2rXo^=Kqm+CZ-2miZ#C4R,Sp'FJ?k
+gc(5qR*n"/kVDYR,&IZ.)8,CUW<'W5A.L6(Tq[8YL1,%B#V>B$g,HMBW),Pb0Z\PO
+2pk9SX"+fJ\.hFeYiliiOp`HJ;iu+%15\F-0hr5=8B<h$!oQrj\Lq%n-;G2"lKHNS
+qbHN91X*$c[H\,fZGEmRDAta==AU22!uU)UNWYs'*_ii^Rf1%jk[_"lFl]S)]Eio\
+@8H>gEC*?.T[>WpK7#<l__F8($cWTol8Dg5JCt@\6Z)-%6W#[:iPf;D3'#"0Ghb*.
+"";#@N=fu6%4+m41HdjOF#r-2"-jE8;+oD[JB.3gK-J3.3)U\m6#pf"h,q@"js"`m
+\C^u$RPrPi=%/Bn9*t0@ZA*3Ha;eisNKm2Sp8m,*4,o-?dcZi9Q!Zeugp8Z8@DWPM
+kqjl)1/uWQ`u,!^(&<n"YgD2oK`fPC'%N>)hhYW[!us7YMMbDreX'iU,s7%j@+d9E
+c8M+\_g'fg%HG60N$p:&Q'g>4/o,7bl3g@[4aHb+E5<18MA_/L14RI=<5@<aC"]l_
+nuTMs.Fr8)[^,D#bZJBpU<Tl,)0NJ`OU_g:E7l.H>F[Z0O&3of4:-qecn_U%!1^nP
+>GseG%\mpk3I0"9nV;LZKOl3aK:P!0"gePS)[6uT1p_lJP\Gn^&MVT.b(q0ijJhFH
+-2``i.VVhBnVDrUXM0e<:_!XoqM++-_V9)L%\\t@Ya4>d$Rdo\@"Jpl0PnUn@;6."
+W:?_R?tb?n1H1Ch2hiHl(kY@qK;EFN!estB*#c*gc>:f_FTTjETj]].>_eLj7aOpJ
+2F1tU/qYR:lWR\<FtRbs*i'q;i^lI]WTgMuikc0k\^r5!?)sI8\;)2QqaQI2J>1uE
+LQMRHD@O^<6l'H(U>[4!XD0T3(mb.>!l+iA8/dm$<>D8B\IN<Vn"5?+Y<cu&A,su_
+8I5loj@j-IC'eCWBft]dRGTCVCtXGT9R>G,R"C7Q$a@QE;qN84Gf=Cu"r8\L=H]FK
+W8/@I3#K7n9-=B=h3G:m;@F"=0RDp5@'AX#p1*W!Q&jmL.A4hC'5U'O%a;/qLOOj8
+)S_M.H&VnpORS<-2fqOZ(H2LeWDLN^P0V.1+Jertk</<Z154RR'@oU08O&e"('?3d
+i:[`?AOPb,QNU>1`'[(4$nS*f4a$u]&QH>IO)-pR)$(=J`)6f(+Gs",#8np<0p#f(
+)2!bf9:s-F2@?9\L5<<2%=Ed4eCICDM*XfO'`D_Mb_4?Bd7`RuANaGPVTlInl^iIN
+A]Y2l9-ujD>P^C-bIBS^WHR'o49(^)5W^n,m5,m73X.n0\PK/Z8`q)lOE6hc/pa2Y
+l:;AG@*%$2OC_d)D*1g_rk+g^cXBA@Lp-6.nK+M,T:Qd\OTe-.YNRMWj[hI5Ea7h)
+!'ppMP.NtM&u7QlA=">O;HRht,);!6N%AGj:0*pO-Y9r^*S$B3nOb&k&q`HGN?4DN
+8V4V92d9T2.')ql!32;d#S^ZU.]D#62M[aS_dHt\lC)Xj`Um37.rIh<E&lcoo/Fdt
+1Rh1sX+s[)"s38GEQ(O\Z4q@3S)@juCsC3VC4JZ^@2l4HqF"N:q&ns<3\c]>Ml&OW
+$j3Fk$)*#0L/=rj_mrWBk!]N,^l/pnJ8[q$coL)B*Xi'XYQbHH(r&a:$,`\h<P\!\
+-+>F"0Xu10aNQZ!2(fnhXtNf%WYPYp0):,b4UH]$*X)jtRY.hUU;>"tjIAgN6!uMQ
+PtrF]b^c5bKo0=h4cfb^G^&+QB-G^Y*iU#tV%,PQar,OC*cP8NZS$4=\_<.>bM'l&
+r,3b"4ua]cp.D91jBoD)1E4mMTgNK_@UYW[#=,0Y&]#q%!5ok0/M!M/Sse&RG>Gmh
+hl-3#VpbF>9h[-!VmQ`4e=)jm'[:7+FfYi!qR9:Q%:QFHc>gtZTIkp!dN0A"eOBR]
+&1I2#oQ/DTcoWU%jS'WmW6fK]i5?D*Yk,<=DT]ijl1,%OH43*jP>-g\5c*7`r[?#1
+=fPd85PcJ1Eo8>N5d3+U9qAX5BJ7V5rDb>d?+MpjA1F;/1P^A7:1'!b@lXDF,;RbQ!,2H~>
endstream
endobj
41 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
42 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im4
/Width 256
/Height 41
/BitsPerComponent 8
/ColorSpace 43 0 R
/Length 2483
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H
+>q_R=AlC^cenm@9:1mM9jS"!dTMT<$3[GQ$8#0$s<4ZX!SPQ1`@,RK=<ilS+<U3X]
+<G&^IVLpDGOA1Z7AqX;rG,kadfh;X'+I64K,SUT;h;O]97:PNiZW\sM/+$(NK>H71
+=Bh@<r<id:06kQE;TY5Y"@97W:bqPC"G87/!*CkYH-]aen2u`4!"7<?/%NnVHMI`_
+h<qaV^96k0_JZ_"INIM_LpujIQ9C!*'ti.-Z?^5^cP(c7>]j(_f#sfnaR8Tr*d1nm
+j2,*3hM`g$0rN.inc6E(ZHn=#rLt/[D-*m91XF4q!BmXOh#F>!U^3+!&2G[!WISLR
+O$X+nM$G7:\s*F#YH$$+XKE3I&LL=hDVr+*lk^<YX,K0r2m7U+'Wis'5o)N.,V&aJ
+Z!9R3_U6kPo:j$V*>c/DKI2AX0U.:pJRE7_l,iK!/FL.YA7W8EN4TY,1f:!F0!B$V
+"Q^iC\0ea0Eek_G8oeI;.6`Q$'F'-XlI)c:bq'S_1,#HB/h3$;S>is(,S:p:b/3Sp
+bg=cD"bG'C9h3Q*UO*Us<"-_>9ZS&;%K]Nn&dEqQW%&+)m4ud3JcLTN\?E4"-jbKU
+O;br6F*-9k]%-!`?b>r?3X:6:F^2K&E0U;-7ZqOU5>hkV4%dDVV4n4H%+H!WZo"lU
+DqkbW)`gkU-lHJYl_O\s.j8k.%>#!r('k!Bpd>XF+G=)`Jj@+4%Kc]jQL@r6YW*/G
+5a9pL!LGq=<._ofFP^I^Q7#Z6;E^FV_j2,`$A-'i>.fF%La?2Tp-9d3i8=b+#Qd8V
+P;e'db/OSc^lU!FeoQ:^\UhPp1_#&pPk/NK3T_^s1KJVsciJZA,RK'1J/`>`dY<&T
+C)0ajhmBg4A!e`sk\_,AQ)GZ1KL&^J(PMkY.>P'6?m6$_@8L,A"9>kmZd::S*X`)O
+:gOn?@)*hbgA,D(Ob5q"8.gKi\04pY22EKGBYa+$%cFH1B3YLgSpc.li:&OX:qP(*
+%"gg\/"_F/\1S,(9>a(%!hd=c%-5"5EMYNUreq>>T\"CVj`,;EScYSC6kP(PhCJqF
+0FJ1d!s%7Bk2P(=d6`ClGUNuQJD`6lBidHphU^W+3Y)=]80#s)NJ9jj5g-T,^apLY
+E*VEgH-oUL9F\JX>RNhg+a*!jgF$qe#!iMA"X'TRYK(n/<cAKL+C#EY:fIe<3$AAt
+R@uGb-MkOI+Tt&adP[>0bLq4lGT^kc!OlmiR@k3n:8M2W0K9;&fGT$RJ.$pY0$.;7
+\9@BD-39J8nPtc1F6s5=!AH/;,!ZtHcDar0`2'u[O;A#'ar3[FCn(t#<<@\[0LOuq
+Smsg1!MDb>JZq-I?/(u_WPHn=?n;MSCX.[Y8C9.-;?['5<W_`S&:sS_";?W^C9#E.
+TG7`KTCS7gd;?"b(!Ns%];^6./B'7;)RUlCc]P:tBrRBQP?&UCN3+[P+rN_oUWg/7
+.W%\\Pi49",3o:b$&Z''8mn:_nsE$!@Ef[?SJ2b0R*!&5Qk^Jag/P.N`kcm?jWLL"
+U0^,rAl"Q"LH5n_\io@bQbCp64B-%Z9SBD(^BKijgEK6g,Ug8ZREA!sC%t22)&Scu
+h`Q_5oQgq^,U=+`M345o+TR0,3_+G!#c`<CMa8'(=`ZM93d[Q7GfmNrWf:_5S=^.*
+*)En[X;Ia/="B;Rc8f;q%o"[LA5!Yg?q/$6WLBQZiClt6M_8GUk%\I&="RU%T3#5L
+AZ=%r9UTZYPU-d>Zs:DI!%%l@&/o_sNNGr"+\8GWkC9@cq(DiL43jc^#(XW-JoF-W
+=RBuMa[(p$?pG"6+=./`O:[!+h^[)3\7?;JQ_@ns".>erXT2hU0j,9uWm&XsOZ"So
+$1+)']T-5p%_C2U;]Pl-+H;D@k;F5DOD8U:J'Le48K-+ZB*-2%e)I!bd#&D:&3gCb
+e/*_08Q$ZO4d/c-07iU^$,K^s#!gNRh9]aB>Z`BWX6oXN.#?%&jN",i3JbQKd39SG
+Z33,3NWKUUIIF$)":pM710%qNVn(lWbDI:^S)+BOcm8hQU_SKs=:2lEik1BOESqOW
+PAJ-#!oRhs4aRkLXB[O`pQd@:RCP"::]Uj<'HmSZGRabI0*PaN&Qn>O.;O=/R;j._
+JnFoh!LP_Ki8bnh:i[$H\2=IU^_VNp:LaCtr;pg?],>ZNfpVH<")u0jJm_C^JRC)6
+i4p1^+CkmHMfT&pX;$85a%'T3`Ji:dZ;gWsAtu">Yi(j$jrDL2ZT'WB^p>r\%&JI=
+SP50sB.[bh7:JPB-j:`l'g]'$Rt2\+^NbmjZkV^0Tq*0NDn$4t205[q*OqFIh3BLE
+<:4&BS?n7@-a?n%+JAr$>SC.J9<DCM'iQ@ZgC9%Y3E:AWAD!U_?HH?0IqZX9<ioS#
+iS4lZPj_6._UPSe99rj!=fYY?%mcJkr(UH^=TJ~>
endstream
endobj
44 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im5
/Width 256
/Height 41
/BitsPerComponent 8
/ColorSpace 43 0 R
/Length 2687
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H
+>q_R=AlC^cenm@9:1mM9jS"!dTMT<$3[GQ$8#0$s<4ZX!M@$1[C/HI7:9@TN!im'I
+i%D&QYJb67b9U%+>(qQEG,SuXWG&TXD:Ge?1'e0i=@"(6?/-68KS$8O>8RG(!5W%s
+f:Z.p%g'0!i:q\JX!;Ju_6CIP/gg7X]B$;$SA\5N%^1J8Qe3-#)@`m%6%I2W'Gmgs
+kAQXa^9\u.JnhN:qd0GT_oQ=@oioHU%?7l=H.cuHkA.3;oJShi#5=,%mIr7O9IF%c
+fX^eKq];WA+gBPl41pL..h0)*AA'rS-O94bZ&]PBlb*`8qW,HY>6rM6/mHWf6#]L3
+]<nN0)#GOp'&'jjn</G/\Hl-fLGI6JP7Ahb.[\c)b+pkI7Hhs)V+"!Y)[iA0CDRl#
+&!H#p-uW"N#D(.jdiLL<En\I+&_':)amkTg+>#-;bnS8/C+]c_Y`f4Gap[9q&MR'm
+TdZTePYAJTcnoqKb&]rq-q_sQ(ECGr`2J7h@"aJl[dAH/aan;V0+Tp*FDusq'5Krg
+b]>'T"#A0.q_h<YFXp*P9A<LecS/Wj4#o/<kpt!A+>aFVW*gAGJcL<BZ_;J3*!\k>
+BGLhGPPciA:bsq:?oE-*LJ!,[]J/S)ZP>aIfF-e)d9)B3s(A"?:`EQkeMGB'>4f-Y
+B!7HZ8A3aM,rZHiT_KmA0&U[s$\JGZlUueZGU*Ut@#\l60L0k2$T.@jT\J(`NW/M%
+TP\ru2O>E&A:af;+,I8394*HTp/T.mA!P"[^"[[pE?!>6:`Xu1\NQhBd%Gi!>[+U)
+JW8b-/^60SR-n`=dC,<(`eIo04:&]p=<\1W5qkb;JldO-PlcKo64a6,UZ"_iTSP94
+KL"p,Z*6rI*!h.h^bcH$J:.APiRcF-$spETK4KPdO<P#6!6?\siu4:%#Qe6Z,RK'h
+j5/rV5^4NkJp`RT=h,<p+b>6\W%#UCd0#AF!arf%%0HI[,?\/C[_'b)Fc;/g3o"Bn
+`*]p=?^e3'5A?$gfUHL)ec:b,RL!?c>Rl>oa:nl3+Xg_;#(^/JZ.gC7-4Y^fJ7KFK
+JB/k?=ukdl%"s1NAf(Zdcm$<eQ02e`KV:q5&Hb:ec^XI[3%PL@i>>)k>098gX6%$G
+:b2dca;kC+N"CQU.bgU8QYf!&$3@@l#=.2b?H@ZOJFFof+J^._5\(7R2^nu;#TNr^
+GRh;E8-MrXSl];n%0?N"!s%g0L$Z3_2K12O_!iEJ^i@d'B3Mb[9HF9)=r,!Jp]R!@
+^k;.Y+h-[,l.(ZrEUBV16a2(O!K\US`]+0R5WT4&E&)cJPR[^Z*-B_X<<Q^.(4sn2
+#_:Y&Arcj$!K]PR!GF(h@$1a@`]2hG#T[WPS.`UArfJ60LL=M#%KZ&c#XJ/(KW^ld
+JOg4Nh%1S/i.)>h`n9P-gN*HPY#U%G2_3i3RrGFP%*IeFh#P5,L(%3e!B9`[U(g<(
+&K3&JG2rkdYU"d_Q*nfBLp%rr)O+))%R[4<&_4B&QdSb>_Uq<]grm*+!(jQ9af5PV
+bF*Iu$%9YsD@%6f(LPB'#.R3qHd5f27'&9?3++$#)B3XF/gLbI<=YnN]-'T/=eRRX
+DaW`:$X>/m5ecE8'MY%SU8l']](HM".+7$l%HWp4US,RPn/%T&n_Q$UK1O[9`M&Mo
+NR??r6QQ&LUTs6DY]Zd'!2F]\8X>=+ouOJ$8o\,$OHD"*/uB=u5Zt"!"/qOm5M"ok
+?kl/1<Q+T"@;$L2apefP'`uD+RV?XSUlA?L8;q;8fN<8:SL$%iY3+7;T[d_bW<Jfl
+(hHYjP:<Rlp(g(4,A*aLI(VCmB1nK&G$+".1`Y52\^kUQ>cG\_;^R6b=Shl21=gP@
+lQDH+@m[&-AtiG.pl#J4.g820G_%-O7BK3$A$"[";9*RLNW#tlkHR"Kq].KY@PCIK
+HB>435.>A0I\*l8?p_Xf0\i+S>q%\T>-"2;fp*UilQ4UWODa[kGU`iHHEf2N^8'.,
+]UY"<%m[?i$"npfPj0\j=dJ)mBtYk$Q?B^Zcms\&e!$WZAnV3Jh%sd2=JWA'S_"dn
+Hs>@"J"W#>Jq-]C!>MAKfIHFBq@ML'-4U,3=r#k-@h^+S^9c=",6Uht&&HmV"rF3K
+Wj!^baK!%E&*sf`f]`$[Qo#"Ta;>!5B)gi6k]8@kJl#NEJ6)6;@16*Aii-/f-LP;o
+nH9D1?qLa35UHW,NtBk[M'9,QkcQI2LJM;1#-ocL"b=6'"&/V%11j9qfBO2DCL2iN
+N7n?];6U*e9F:ek.KrVj7SL@H3iFV0Fhfs:j%tFG_8%l3!3?h8+?Tjq,l"kV&YA!P
+msRJE-O!nf(kXMW%Dfh?#=.>iK86.n6!,N<\[Aj-qQjFeX(B"=%T%`W7>Cn?/-Wi%
+(kWrDP&aAS"sC\t!l.bB)K6jWZKgf>(')2kFH_m"4;;G4@LW@H\^uAko7J`,+LW'F
+](VTRVNu/+i']&GH9Z)a&7,a\LBlS,XnciG58.Y=&t)n-X75n@/n'JgZ57Q]2\mnh
+YWN.sNRCj#MGsbd`;e!PnT<I-QQc/$Lm-VgQ#g8K3%%[,j_WAVU#e!tGlKR<\U4n(
+YWpOo>Sr1D%F&UbDkYPp5Gp'UO3&h6JiQ;!_"h!U.hVm~>
endstream
endobj
45 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im6
/Width 256
/Height 41
/BitsPerComponent 8
/ColorSpace 43 0 R
/Length 2678
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H
+>q_R=AlC^cenm@9:1mM9jS"!dTMT<$3[GQ$8#0$s<4ZX!M@$1[C/HI7:9@TN!iiYc
+j]iU+O4YWl.d`NM%0]*"2Ci(5gCXS>XjKcfRYVO[_(IVG81qXZ^=m"'TO%s/DnT7,
+Qu"pA'lq)m/XZlF,9$g0!%iB<`b-S%cY%58]&&WDR@&ZDorq7H(O?;>+F;CGo#(n?
+hr%W6jncHrh.EqdTOudV_h)ee3*]5QK5o%U1q:-!YG70"BfWi_Xm`=C\TBcu]I)s`
+VpXZ(Gi%#@fko2Bmi=R+5FI/UC%N2<O5:T44cKO8_D]`pf"En:4#HT:/F4)<4m\'5
+oKg\ngpSi6>B5h5#])9.6jR0=j$N84pC<l/6ph]_/^"uk]hn?1O@<#UH3XJ5H4q4(
+&-CAJ,Z1'p)^\sC*7pmhneV56d.8$.aAQ9;b/]=FV^jq^dZ+USnM>@J^W`Vm0LnYq
+#lMfm<-Ib(b\YfMb4.ToaM[J)h#sW`THPR(D8Tj;TbI'(,_:JeA@4)9$i`W#N2t,[
+\5+*?lpVSpY3T!0[-n1+'$DL6c?/mg%>)dIq?MTpL`Wok^do:HJ\ZYQ2M#7Y<CJ%r
+lXJYmbDV8;dC%/%&_@P@R)7=U,gO/,0O)?`]PiH!f.a:3WsQ?OAX-r`G/Z5c>F,/g
+DZM"85RL;Pa;bP>+NQ#<7$Z#3#_IT",pUgQGUNq$EpQQPf%!Lmd9",&+:(tj%DW1"
+!/Me)40K@==B8:A^rNY/GTDd^G31L<f56J_CTs2'/!.\lr]sZ5etg?Kd5cYaR-'FK
+1MUD6And^G!N966!\jB`#_QP.:_Ek\Q/^!gTV+7UKL"`N#M?(Z('fHLpd>Vog82oP
+JcMH!%>-pRi:5sQn/;SgJC#rrjGto?#D-?n1(1KaG&:=?J:JsRK#"<4LZR1>2@&36
+Sa$MPfhOiO@C8WM#urrS3Jmk\T/Fbk4Q[+YoG'V;c/BZI&(9K\NtKP,*EPU2FZ#4U
+fPpeeD9-8GE/Ylmq?#pbJ`+UA(l&-r>S.%QFELXd@-CE(L4OkM%K^WmSd#5r^d]+E
+@>I_iJs""c?e3#s4;.la:eRraR1E62"!IY:'83%Z1HecE%M-d8qKPO;!<=#>MQ,.;
+2\ZE\\/GIBHk6>@aopMX&mhe;"9G/T#=.<eE)(-MJS7.L^pk4eTO8/;&1H\-gNJ6X
+@MV;?8d/H%Fot!A&jb_u#GHeb!mlZ7\/,/TiUef*d'=ERpjWb4'K^tu>RJ;$L_%=p
+-3HM!(P%g?#=1=&#(Y&:Jqgec%4bK]TQCfu^gIQOBI3hs>qS*5*!F'u+U'"$(kU[B
+#QVa9ID@rO!H:(*_*BIR0@UF3<ZLG@J.c.<F:eRN9F1_**F7#XcFP\Y!^Q6!J*h*Y
+_K\nj?pGS3J9VV,(`EV5]Kh4rfF>ZA0F"5P4+n/s(4i,:fcckYKHOl298RR;5i<WK
+'(TA;88/H5CbD#mL0[K0P7]-`1RU$1%8A7-2!0IP"7bJ?Q_igJ+b15cX-$s4LCjQW
+UBjt_NQat.`/Yc5'6Z$bn1g,9lCC#&=Go>'\(=6p=edKiDR%BjM<;uaF#RV<KjW/P
+#3;_:&TUh7a"iMhaQRBCFu3@O](]C%W4ON=YgI[>eV)/46-#f9V-L/[fOU6S;F1Z*
+E@o]h[a\d65A?^I;CY+1B-f1&Ph)QXiXZ4n^_D_2N:aA91s9TB4_=:SN%&:JU_C&,
+4A=k-X`WQQc,6r4PZa,-V0c8+imFkbk_QuCU>+oeFC_Prcd`*):E<@QXN=qRe^ck<
+OI\//D9@R`9$4IhMS9+oM??/c+9\d"O^ZBNW`?%ncKm,!W"f`F!q9IkJG:"#.R?R*
+()pakjcXZ7m]4u%#gD$rL39O0dSjaqade?PU23h?>?1bKB*:hq(Ch!Ef,6\#_\/Qj
+Buj):53s[!eYp:Q*<U7n)IO"#9W:<dc?8j5_!iKME]=_aGod6!F*M-\<Lg@mh*)hF
+T:?K?=[MmYWgN$uY7?F(6O8/n+V_kJE4uTQWm%MB)[;F&YR\fI8dMYO,6W6X;ZYf9
+h:Js5ZDrMh>R<b$JF3jKfT$A6BM!3FS^@E\(a4P4Fq'"Y.g2Mo6D_YY6]^Vm?BSbe
+Jrj+U!M2R];4nX*?q(C:i##ga*W7u7-Y.%Y&>(^Y"3\6U0BT>m^<l-VbA8+"!=M`@
+!/iO_!'UXaI&XjOl+J[%,i%1r(;'X#&cubK$NY3""nA*"=l<Hj_+5r:)'B?=BEkKa
+b&(<s`Hjp+2ZiF_j95O]8cjN>r;e6U"5n?%7)eL)!Z460!;%96?t9Y@*0FOP0oHf*
+8u_l_Nk?Kr'8!=T$iuY[a?[Z\!oR/fJOGP%:cD-B$gf5c4UAA&BuI3Z0a3*s+)1e>
+8SL=9qICA,dbpK*JkRP[Yd?3CQkbM:HDRqjQ?!(JO:d(P;@:6VF9YTY)M;/#pN>nS
+cp3@36)hf([l3DM%OJmkN?>NY*d,n=W"jp0*Q*G5K"TibIRZj-K^c.7bt_0n-M46^
+D3_#O[gN2\Ll2dQCR`G1JW\W4QX(T%rP/+/BM1=)b'$.<fi>?g?bMp1+V_A:pl#aU
+?B(C.0#hic;`7o,lF?5nLOXJ5`EtTc.\VCo~>
endstream
endobj
46 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im7
/Width 256
/Height 41
/BitsPerComponent 8
/ColorSpace 43 0 R
/Length 2797
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H
+>q_R=AlC^cenm@9:1mM9jS"!dTMT<$3[GQ$8#0$s;NOU*SPP6oC)&e*7\s+d<aajc
+]kY5_#$5<c.".8n/@/'%^o1Wf`GW->.b2_$;WVPEJo6dVLc,MF"kR\n]D+#3$c$3/
+<pL;I'EA;FTXT.]4""R]?ENr!GQTCdbhhl8SGni'J'd,[:csOi+,mtuZl401_Z,tQ
+<Pj:_\1ASPecS4JTMRD]Z%@SDQlTe^,Kt^W\f'il>SG-C!r@0NQEuq/a*9XhY'+#P
+e]$Tk?EXQkagp-cYBR/"9Bk!9Dh6\kpT*<G4Y5ncn?d+TjL@=1gA:NR0,q9N0s:E5
+`k?9T'_=5agLCUUXP;[fZL*S*dOslrB\BgF'F=]K:'4!$6gMoPlU6f?C]HJ0$U23N
+d5#qN[E*03LIcG":ECdBH?ePXW9e^G8I9L'S\K2[&LYRr`$#l<.V,EI!T8')`(NWW
+*<7f)o#ce_YmR4]7d/jekI+<RgG^7*KZ,1DY1iI0_h_"`,K8t"B-L+C6o>6F.u]NL
+]2Pf77a!U#9[A;uKZ8\SdKKKM\BpDmhaf85fc`OYPcl]5Okf*SZO_I+<47`qPu/]$
+9iTV-nN9M@+J@(2^EHue*XL(l.e;[\:&ObjcW&U.^]BT%,ga/%71.bfYSCLA=1.*@
+3P7)CBcAZu@p7nSFM,m'!Pj&;C#"uc^9^o0<ETa^oSU3mKA`9$g4@&40FTm`OpV?n
+[Q#PHi,,D2#m-cbkC,hDn/_jA:E1"EY?%SB.`Tgs('WPT-.Qh9f6`2&/!PcqR':bZ
+Bm$t)`Hq>?=,8#1k4AhX@tK60-FMa!E#]-d'AH@S4&.Z%f3K+cZ3KB5Eu#VsJES-)
+JO"`@&Hnd=1^N&6=;V<r!:W)[!fe9SFFg*`3"LXgMRf<V/;P2MK##/TK]eZ'4NDBu
+W%8:ZX>QEIjgHik$Nbj2J#MZ5I)@(5!.Z=$=Z$\T#m+Ln`P5o1hPJVOI0Dc\C0JY?
+$A.3M/(:o/(46DiJB0\[K0Z$hqrCd;-bt?SB8;gp4Ra[)FM5_9h038"-j`MILkHfQ
+T]X"'J\\cb(C#GX<Y/AK0GXqH5q#nRKqTnRlr5`Lot#e7872/k@!?_XQDbDu+Fk)V
+?pk5"Wd8Ae7>JEcYQVb_*s>u-%krMX"C?<fHKg-[JP\60S%oh^Y[Q5dE%L6YdhDla
+BFML\-3V,_(^"/b%PW\Q"<<o=EGj1]!T6!C^p"H(N,Ah\7j\F*kTC![i!VSYrrX/f
+(B\&m&d!#I#b/mGF`A$273F\u@TXRhL[F6BBO_:`!$?ru<R!A@8ION;*/"<8)`aRC
+%fqb<"!Bl1!73%t!@TK'!5K?O:c\bFH2'FZ'FfXJ<!u!2.g3Y8%(TI;j.#f["5oO^
+!oR3,jJWZCM_k[T!'CP'-m]"8L$1Pm7-9#U'a$1<&]$HV#+Q?kJZd9D!Vk(JJCk`I
+n<p%&LM$tMp`5*>F:Q4H2[,T,&H[Jf%6O:>#QXWAGS#a6\`Se-5g1;Pi.MY8#V@!(
+,h)phKG&le;@3FM'iQZCLH.>)#GP0jNGB^r`+K,U_!L*<F)DFMB<:*C]]"MUVLeh/
+<<ZL19eZQ.$pA6.IN+_sBQ:TfY9]KVkhJV$k&%k/8,W=PWjcE=14C=RFOcs5RT%D+
+85^@0k8)9GV2TFfZV",o?i-:79X0^:a,U?(bUd^N>*lbm2TI6;/QF8%PrY:dk+D78
+E6Vj<8iHn7=LtP>anY]^)&1QH97:D$i/=b7HD(\R)6.J<N3rk,>1%as7'/`71[#\)
+>,%3SmIlu!Wp%G=,3LLBE"0Z5'3l=+UN,X\PH"0&?0m0F8@E9AY2k>P<b!eXp14<;
+Qkos5]hG^Hf"4.N7Yd7k>m0PZ%KUl"7Sfj2K(*&/3Hm0iC;IYdC*C;iRpB=Q@f'!O
+Ja-7#Re'\\14I/:R_'qm6=rb."&Oit>Vb<Nl&A$12S/(XP4f;0LaE6;<\7KDVK#^S
+klUGc`OuJFE3F;p?$1.geZ+1#WZ)P[M_U42?nC\W,UgD6ZEi;"c3M/s,_3"^\&9&Q
+FXuLXJWOCLiRqE`XK$CJT^WqR5[4Ws$t<ZK=MS8[Npj3*m0+W9)?QR/K`KUgMcY1D
+<*2^O!7WfmR1<h2b*=\`mQ<<9jl8]>2%jka-AoU/'*:Ee#Ugrb_0?Iq!J!-8!?`co
+J@la%0P1`EI$+V0d7h"nk=K:T(84!G.-3RlQ/2WkFN8bR"CQrq!SB:7+K^/F-V\09
+9,a7%as;Qm:F!]1AHn3[(s*ZR#UeD2UCA\36OXI@l:;i7+E(.F8XGPp-l^8$VPq$D
+MXN?bG6BX%)1oY.XheBq"ZF[h9`4Q_ETR^DPGf%E?rRMbO>R7cllPN?Fq-gB1'O>H
+&jdSmU)0ZqGglXFlTeJY6$P$e!5'*LcrZ4C'P[^m=<I_HHk-8)2[4Q''?[kW"XOgc
+:)Um*:95VJ[C3OJ]'!@N>cg#,1r@'K/fd<l5>NnS>_nF2KN*q"WAqp9aAY!:JfmR:
+ZB-Kq5bff$WX#`09dd+[$-1<VZ%N-3.El2@)?XAd%XGiM#6<BpBi%h:_'W9rHfHBM
+r#4lVFE.KsTG()Y<K.#].\6:ZO+Kr<#bkEBZ&lB96B"9G'SVb1G]NuE2@nL<6\:!H
+3tKZX2bkto`o9\k,/!W,ik$jUm5Q3rE9LY!?iquX3A.4/BQFO>SI;&EJhTjnPu>3Z
+TYN`#HFg]ckPM\.n%:3%J,~>
endstream
endobj
48 0 obj
<<
/Length 3635
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGV_gh%ZJNWtT?BJpoE#*=`E!I5Z_#;_mg"B*0a
+'P!IE%cG`"J5T?(9;3U4P^md,)%D<3O_Dg@0VFEa6qO'\hJtUo9nr7"aMMd:e-m^m
+]]<6PT8_u56+G9H22aoGPefWgl=;`B.Hd'q]\[HZ)p]8GB[CQJ)2nb%BSA'P3PJS7
+GQFZO0h/BFX^KT0TVuN\b)Q]OH'%<$1<PW3K.)8pGH$Hh6W$/)dV^js%49O1T0b.A
+'920L.A5RuefD[I4Xn8-@l+H#Rf+\EIPKCoKfoH+geqE-&tjno,UO<:K?hIjGchZ8
+)_+?fo1?=KFbQE>7ACgsjCe2u;+DH(R*lJdK`[XadYK,Uk23kn.LtnjLmu><L1.q?
+o:q._5anm5g)g%'@CTR%59ZD/TL93X.]4a'P,PDjU,5t-Kn0A'W2aU4XsU^ILse&i
+m`Je/W!kI3-B'0W`k.5(!2_X_,BS1q/s9nh&.2.IN"j,p5[5"X$)j4*L94kS2iZ4@
+\/C#eOIeBjD'NRLNXC$q-F<dRhD7-.R*.:?6&:-ON3e,.,,^&D2UIDXE*FBq8:0J8
+43D%`3KA_caZE9039iF2JRD@pbHp1\f;?j2[">#kA1WJM@=gEDXRRdmp89UmG`Y*t
+Kcm[UYm^7DekD`5.oYE":s=s,+JhF85tWWlNc[uE9+B!Bmj/GT(rkgJN_$$(N8o#;
+3RNlB(53om=r\=_Q/X6"fJ(5!><XbYEZ1mAKn/en5t#0/[gI*227dhp@3mi6'F*D`
+2_']k#!pCf(t'$.;(2Vb"D"Q;NGD9L;kX361(I`7@O3rKFLiuV/8^D*8b3KZN!aVK
+k89(dW97jSUVpUc[M!.3(ks3Wm?GgFC^`8bD,e+220cX[-4F%3Aia1s0Q8!r32Ij.
+%0N9e3!V`o?9=+@(0`DFc$O[qC(4^2(J*S"?9^?21lrN6"/s2%lm$2r&W&=UjZ/=F
+!1ktRQ?-1l>bW\P32*I95R+;Ua?b"@6&9E3U"n(j#)_@>h9)N5cSg`U&<[T]oOqX,
+#4d>&^quf(a#("CiMIk3$u"j3_P:Q_h?N[eG`J*s9ISDH/E$\aM2@o+[P"96-RptD
+rSTrJ-fMabNeXVGU[SHE':$cH4mjWgr*XHd?!"`5.J4.BQd""WrHH?^hlH3IYN=UT
+"a[BYGo_F=nbYHco).E%rIHWd>sHBW!8h3SK$X9%_&+g$hXh8*:]:,M\).*,ll1Oq
+/c`.I0af-Z#D#[Z#f,(H%0;=_JVVkh&_M(5Tkk2lYiZH^aF=GNbX)YIKRo4_2QDfW
+\02@S(m'hml]4Z==$XSUP4E8q6%OE(7J%KB3-IaLoOWc]$2&pAeI&#:A;nkV,f,;&
+5`Z%GMBL:Y3Ol;>MEEkV^n?HP'AXMWC`7gYTY?&('a^RUD3<3]$-8KqYMWT/+E9g>
+44%g4A,.rB&f@.[L5d,4A%j>[mRY*\<@&lKYCb0Q9Z5$D-Y)b:MW?rPJq.B>UCdS4
+V$9mh)2;M[A3u[S_=C8kB-n_ER[3(O.'J700$p]6N"ZC(^%-jS,Dfe_E#rr7M2(/D
+XQ=mb6?4TT;)G*0e3&9:_BopB+<ogY$A?8_8jF=4hXfhnE/jQd2nl@@1D-;P%X#L!
+%mhMJ[[na:H-]Ui04k(:TItP06TPXi&G6@#'QSe#a1k1oN-M(:9SuV<:3m30-nmJl
+p;1?15pm>nGLYIX:3pbI@&5njo7CZ',JuXCCtGPioZ#?Mh#6GQ-%o+/R_FYP6_='3
+Ho4el^kor<-;?XR&5$G53,JpO"9F6RVBFG<.pAu*Dit\]g+(3e<h3q;"qHGE\joHZ
+/$l9lOQ;6[$Ms+iX1!(;mG.gHqbu>R_JlOJj#hi2A*V<CS2#TdeZ+I;j4l#2.#P!-
+-p_JjKF5+%[Ir2JR:mjoB7Q;NZ<F9i#N*e/[5PlI'DO:o.\3'9[6iH94'um-A\#=t
+m^:i-kASn(B9"+WkhMX\F`"84L_XN8!86=.kbX:DEEZ1jM74YL)*s:%RRUV^f.1[I
+2SF6XNo'#m>q&e3V1u,Kar%T1Vqe#6(S]+(S(VoQ26t$*Fq-5F].GKaq2[o`)$>^]
+0.DjTUJ2M5^oTOu@0Rg(n8e'A\ES3TrY$K@mQY-3BeSZB!&)uIb[Wb$!AV#-Km;bJ
+?\p^jU5AW5pQX4g)q-ZW<RZ-;T-WHRd?8@T9V'\2+6'/U4\J*VMfEq@ce5j@-l#!C
+[!mft#CSr("f-PAQO)\UEL#`MqPH)^!bMd:P,SA(ajcoDg,h:qo@;]rfiT6?:h*0*
+V)-E*L7W%8Kqi_F43]ebT?dB?S+J6dRl*,neGUb6m/CD!eDj/$CO^Bpek3A*ZJ!u[
+8Sp.]c?Il!<*];r>d^->^%Kdq(*Xe/S[E_d(pVK"=&)(f8O<P!!<p'uWeTk'Q?KFf
+`]LDD7HF<YGU*m<QqJpqd"rQ[jt;gpf;#kBro)OBY+SHK,IVFfmXd'=NQfs%s#5Ta
+gAB2`c5lYn2e>/-cguHVD?d:g7f"ie'7Ra!s2$Nu$Jg"eHT`D.$9&ImhQC@DnMl6B
+GQEKVgauk$R+ks*N1VOqqil%&7h,94&E@@]'+p.^PpW'\0r,n!BT(,tMs4^4+Np&B
+)3N$c$uP351R[mL+Ao\g/!"6HAae9XJ'R]aOL&o@E_Y05HLF5_n['6XmL'Q;0)XuI
+f*P*+bI0I?)8,O)J\14/b,'nSmenJ6GHNg[CQkCXH+0<lag'0(c7k`PK;%pE)9\mW
+*9iY+a`RH/iF]#B.:+3WG<,XfpJ<aQ-(:>9XtAl3N5+%pUN5f&=k%Hmj9FIXht;#N
+QTE_`oJ04jQ>T@a3#9:(*#j,"57,iQQ^dVR-f&WfQG,.NVW>KYK^8Z;3qkS^\=Xkq
+O\]Vqik3sl?.4gNL*Q>=p?T%]5Li@&28sl3ld/qGU_YUBeLG4Vr7k0FI@`R]&"MGd
+>28J2!"R63YKH3'Pi1tGj)*lJ%M\,E70,(bI;g7l&17PI4JF3<Z)rO#lNl-Xpohr&
+"9LiD-T'M9K\>Go!NQdcCDJV))RBmYZ7WQqU6OEu@-5_TccA`Z9hsl2f[P^Lioj^W
+Nm;\RB]R@$OmnOEd$Y29!s&h[iJJ'NY5Z/;C>g\$#Z(6?:6<m3Gk,g\Omo+Q%]Kl@
+'Y4[\mgJEm&C.m!T+4V6m>Ti"$`G4%32S>kN,.eE%Z:ke2RTUI$S15MDZoY"OKlm=
+%q7Y_0!`8fJAKPM_%=iZN#*&Q.,g3krc%;</1ThCifm:9oF+.Rl,+5)U;X;G'p1Kg
+:V&56;\Wqn^i.:YY)a;''ZZ>:a,lK$%b2='<6.h7kKJh,kb@]F8:E,0o^S6kcr0Q(
+FQB^&qi(k8O$l(OnFm=p)%LodE3u:aAgkqYbji^%mO\.\4S&[kdi`K&C,$?@P5=Pc
+qb>NZdHJ_-m*a5D]I_tFcbc$P`q/\CrQN4>0@_-5;Z-$?imJ\;&['r"#lcWls6tF[
+d)<7%JJrKPe1e?4&CBc\>8=B/'+iOmE^JgW9*0(5$nj55"jT3j*1DI#2.@&X_\NI`
+mQKVh,RJ]B""HaVXu)e\"XE/b!sAc?KFO\K#"?[3dL\gpPXXR\.*W6`ZDT*`2KBuG+<U~>
endstream
endobj
49 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F10 22 0 R
/F12 34 0 R
>>
/XObject <<
/Im4 42 0 R
/Im5 44 0 R
/Im6 45 0 R
/Im7 46 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS5 43 0 R
>>
>>
endobj
43 0 obj
[/Indexed /DeviceRGB 255 50 0 R]
endobj
50 0 obj
<<
/Filter /ASCII85Decode
/Length 973
>>
stream
+s8W*!z!<3$!!<3$!!<<*!!<3'!!<<)rqtp-^p[e"Jn*f`2lg*`skMtU_hr!>GgY:?3
f@/3tcd0q\bKIrHa2>g4^:q=m]"5>Y[^*3EY-+q-WiDqnVP9fZSt;OBR[TP.QBIDo
NfK-WMMd.CL4Y#/I=6NhH$OOTF`DD@D/F-(Bk_-iART"U?!U`==]na)<DcUj9he>R
8P)?>76s4*4?P_c3&i`O1b^U;/1`>#-n$>d,Tn3P*#oq8(`3r$'G(fe$k*OM#RCP9
"O,*ih;-nTREV\2Wb,k2GB\6e1M0We<WE*Cs3-nTR:cJ21Gf'!!4r4eR:\6eAsr]!
!1Eie!8TF2REWnTR@4(eB$<%eB)cJeR/gieAsr)Tm``o!]=Y\2LknGe6m<g!s8W,u
rr2inr;-9dq>'j\p\4@Rp%7nKo()A@nF5o8n*TN0lg*m$l07EqkiV$ijQ,C^j5]+W
iSWPMhVR,Egt^W;g=b04f@SX)e^`-te'c[md*U.bcHa\Zc-+;RaiVZGaN2B@`l,g6
_SX1+_83n$^V.=o]Y(ng]"5D]\@8rV[C*EKZa6sCZEUR;Y-+q/XK8J'X/W(tVl-Gi
VP^/bUnXTXTqS0PT:_[FSXZ+<R[T\4R$a2*QBd`#PEV2mOcb`eOH,?]N/W^RMi3FK
M2-kAKnY56KS4r/Jq/B%It)rrI=6HhH[:!aG^+IVG'7tLFE;MEEH,u:Df9N2DJX-*
C2.KtBk_3mB4YXcA7T4[@U`_Q?s[/G?!U`?>?b65=]ed.<`W7#<)cdp;c-Ch:JXb\
9he;T9M.oL84Z9A7n6!:770F06:+"(5X7Ls5!;%l4$,Ma3B9#W2`<QP1c.$E1,:R=
0eY15/M/P*/1`8#.OZ\n-71&c,pac\,9\3R+<VdJ*Zc:@*#fh9)&X;.(Ddi&().Gs
&eYfg&.f?_%h/sW$O[=L$47%E#R1J;"U,&3!s8Q)!<<*"~>
endstream
endobj
51 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im8
/Width 128
/Height 20
/BitsPerComponent 8
/ColorSpace 43 0 R
/Length 2784
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,hsP!0IOh!!SA&5emAmL(s[mLnYF\5^Y0a!_+E-Du`?n$NL7GnIP[=2\uN\!hm+d
+!$*)6i.Hk7/6j_07tsq"\C+mu(Pj:[@6EU//=-KnEY)WC2uo;$V]en_F;uJ3!!,C4
+`BYsoS:gupfKa*p:^Yc_TkR=W!u(tMLGhF))MN/N=Th,p(cZOnL'WTDci?%E1Bi:3
+,QQ[8CbWe`#D&BndVo0sN[@$MLo,26)FOVCd4D4U0+$T++rO3j<G)MmY^c_hRTp:6
+#-5TXkV,.T!!NJ/^fY@$&e*bc@=(+9.LIC+lU(^oF<EXc97nKECue,TM?:d"q$9B1
+23*D]igEW%ItRu`7ll`^e6NIk%XM6N]lY#(L&cfT(Bhk$//Ti#GZq2"5nH_q!PpHP
+PlbAL6J;Q]&/5TVX@O8eWW7Q1k(7!h(^,H6@Lro-TP08t.KLrV'<2'YAuGiA-r?03
++s_=3"9KQl%u;t83ZlE#i-H(b+OG<Z!!()\U:,W[$BYOD.]+&9M9%(]"DPq&(+MQL
+,1Wb<0Ku"Xi?17QJ\_]/P69asEWuVrbjGoB$-3kj!m/Lt$T[M!-jftt%"8Wk+gP>X
+L;F=?"GGb_:6dt.V&gM0bb,R]Lb1,j*JQ&J?lZZW&9a546)[nk!MN>%L]@kc#2m:Q
+?l0L[@$7/l"cT8$'*JeA4;'nN&4]n)i:o/q!s%=AJch$H(^pJF:_F(dbY&9f"__9h
+*!fsKTFM5NbSV$"Tk_XS#%A4!.#3Ar+9[@,"l-tKU$+b,!hlQ.$\Q::<8N;E\3?/Z
+6"j\1!s*pGNe'Ij?4J8HE(C\F5aY:XXFNrY%'?2\7:-#pGWZG/J,go,>:RuL%4/di
+(^o)uJ/oC*!\dm9KgIJ'!<HU_MAfR3:duT4pUEC/eI$gb*X>^W/fTR^CP!FZ5jD;S
+Ku)%NP_DE=6C`V#-u'>S5mV!5+ct>_&`b(U<Y=%nW(mq:TTDVSk+I5g&(r(E3"K.M
+\2e)N=e1]YJj@;<MWd\m&e9]6%aMqFRQAtJ#XKsR"pEFkJ-q$?!)Bg#5lc'I=?q[E
+*X)i5&e,%rTJVo7Tce.c=WjYF(^"JK((Q&W23J6sQ?k:oK]*nS%YUuWTEt`@,,"%M
+i4Zc."!H2:j8tY:(((,akQ=uaiIHmd`$&NE*;=7t:*Bjgp1t=r_;s0JJG;/1NPLL(
+Y\F[&ThkgK`#OA/V?I!.2`AW?#_I#/$'&_$@S9f5K"t"$!*C*B!0#EiO=COP'I=lP
+Hk6<6<(0()*JMHt#(^_O"JL2*!rtl^Q(T<5SV+p;5nk-$U`p?O#Ua5W9GRaRF9gCd
+(C!/2)1dB=L;C)X"`T\1Je2f0)o<a$T\LB8[CcXY5W&^;d1d]'7'^5,.0XOn)?I'=
+#o"m="+ZZT'`oii!=0MnKOb@>YW)dEkR'<M@@E:.,R(uO$ihF.%l2KW$A&gV"bilY
+J\Z(6>8&T?Y%CCn!#,W'Ld20[I?oEQ7LfIW.P42a'n_TYE8dH1"p!-d6D,S1!Ji:e
+KHL[)J6E4]6R`,1TG"s&9EbFs,]Ri#)M.B?q+?/D!UE,]XYR9E5e%A\XOmgZ(_G^E
+LdMGU]fr/%7Lk##AnI\a$j,@<(6MH/"@1T]K.oEp^ebgN@-AS'fNtmMJ2[XfRSs5`
+8dn;ubqPf,'S=\&c:H"h"5ogc!NE^6!3dW85XlR7TJ?bfkS.U63"1AB.lW;='*@)k
+#Et5NP1baO"$jLAKMZIj>aQ'*!7W0F!*qqta:ncmj<0)*9+9r*.Y'ds%aF/F$UM_D
+UAuPFJachP!Gm1K^e>;kat*_\=:>8(L5mif?:f[O*s>u!$HOtXcG8WbE`8!8!DkQ^
+kuh0ji(O-'n6E>qo%+%1n03Ms@p"OP'k&6k+9OWd8O/@\"sE[_"#s4=^j$h&@,N%-
++@e=5TGO<[e/*]Z.^t4$0*OVR'nQuI9'J#S"TY-0fFSr)))*7rp&kPM!%s$X"F_R<
+1^O1oYQPa27L1-]A^\+'#Q]06#b_PT!IF)65_'eiTa"KuJ29kBW$DR4llLdU:sCM8
+$YA7t)?Xqh$/ZJF!T7K#]K.WnDH4FRN,=X-]9EAIJ//6[KFi^]/PU+Z#m#QE$\=s/
+"ot##S8su%!>$XkJf$HN@!YB!TG@Z\kq&a?2\G%OquYq--O*uJ+G8Te$=T3N!E3eH
+K$\<DJ[dB:Yhn#6E%2*D3%bD#^_KBZTlR%R)$Br,'Z)Oa9CUU?!T6c_J`j<D%U]aJ
+o4/%+!%8$:p_Eor3!I1g!YGIs1Bf>I%:Keb"G"iE"lS;]"@.`h5u8[*pd5.6n14fq
+5VWKDoH)1`;kUFFFoido&7gl5%42L2!np-HgqYTKJJ]cWTTNjf5TcJ9JQft!q87dE
+nc_:7%EgP<"TZmj"G!-[!&cYSK/W1`mY559g3=-[?sNfM!($rc6XKmg*!AN=_BU0S
+#6?tO#shZI^7a7"K-4@<^sEet!&IdF0HG4"eT(f.UFLk1jp&.g%b`tA=oc>[LU0Gc
+")764!AGb2J6$.c_&+@!&:.d$F<^n'B38cjb9)72%,CON%g!kKnA1bW#@R-m2*bsd
+_/Lk,WQ5JK:&ha_V@`iTgO'$p3X>`t,m=+O.Y;V3#f-Tn>6%2"E"/YW!([Ft?o)!f
+!$VPrT"+oq>ChH8M@fn$5mQ??*J9A9$it#lR@N1FJZpm5J=mMV+?t,O^&u^W:(c\Q
+$jM7?*X"Mo9*5m9_h%;D#_=*E."J(]!hT@UD:g0<TTB`e*coq3jYHt-p]u%.)?TtH
+AcY&i-kHp~>
endstream
endobj
53 0 obj
<<
/Length 3670
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGV_jCTMRNWtT?BJpoE#*=`E!I5Z_#;_mg"B*0a
+'P!IE%cG`"J5T?(9;3U4P^lpn)%3,^g'GK)2B0MhP<p/"jDm#F%H__oK\AnqRnU/6
+bWK&f)@M:pEL^:59,'aoJC5tYG7Q,7_6@rZ5X9(;#S-?[Gr.cj0#Pnpd/g%.%3*.R
+,EZs'5ogl'+o&]`JCk;[aC&slF=%e5a%jW6kc!2i)NIId'3ebVGs9W3."^E^bABiU
+QGjQlGc+"ZW7:,jMR@93<$ag9g2-C8@gCCInlW"[;EGth9rAZ*[.G7g(um#SEHN=b
+\.fVeV^$c*k?I>i@/SYp\gNZi7Upj`=(b^K+n"oW(^7aM2Xit_J7,]8$>A-Q%\o]>
+&.RZA-8R/+R,0V%!sh.HWQKggW[c1q$K`L,F.g-*i<(>F[-ubP&2e@R])X_Vqnh%l
+$S,bC/4#3>Z_i>Ani%$<JEA\KEA@s8ZfmlHLPCA;0)[X[_cZ<6ck'_)W),UX(C)Wu
+E8;!+8B*\RE0tq_2j"c,X#Q!`\.f@(#j<srJHXCUMW%2R'Fc90kVQ)1SG"rQPN_Ek
+NP])G2[b1-;WG;B4J<K[&T"KF]!7c?s/0o0#kKJu!+m#OiO"?H#_OPf0oeUli&V<$
+XIT+*0<I;c##(RSrl];p8tScCCrGlL'/YO$$A1a6Sdk1K+UQ'uHm;c\OK_"Z33]2=
+%n$bOK+\WeEbsXe0V'iW3CoY'lo)\!@#]n!AXp+scK#%g5_5;?)R7Tlo`cb-KHN<W
+FPHX-_)NAqK=r)f\r\<qY[_7L\(bqlcSO;_Ps`H^mb\3L5i*98K1`L0"h/iAU+@I\
+DiMg&'[@CaE2^W36`PCJ4PWd.hD'ul@*10`5mB\?"<(U/C'>cBC(r=9JDd@hj)o<"
+%,h2rZA-o4_*8DsGf2:p6V,idf,!F$2iY95h+RjDTN.&k)Fg!h6fUGK2aYDneDCK3
+7GA/93*cD>9o=Zq%YP]X;3bkKFXNc?g&?T'k`gK+]5!eCZ#?V`[dh%@qN0+QlKd4a
+UMnjmRtX0iFS-/`@jb9$+LdV_H71>#6"H\A7>lXc+_YkB#(`e0jC?Y,eNel#]aI3i
+:/uPb],l30kb12<Q&A-D'#GU3W&fbhGrab'4?)!*U6SU9+NbLIY6UZ4_93!1,TUO-
+T[:+Z$Kiol9l.&<b3tl7Y7)gJUVMuDSs@B7"9I%![W\7OgIlZckY9h;7m>;982b5N
+*P<-Mi6K1qojpiTf/OQNiD](fG>*k([oK;+_2DA*!RRjD\/kni;bUuoKfq8#fH!=q
+)LJXjM**V.>h*$PGjNtA4LQkIdg.X-+Nc<!W03nmC@d>GJRq;![XhoRkZHb#<Kr#I
+qkGEU@0Ys+L?Esr+qbNLb!E8Hct%D&K,]6c]cmN.bj&)I_L)r#)(N+SeVb,]</5U,
+0pp#k9pD"LZ#rR9'dagTiUKM0WJhN.mdsgF23T\b9s=22o@=7UPVUBY^3+BqU-]Ja
+:**CZKVF@FOj]9R`@SuQ]_Z1("Y?HSU+3B]1s\EU%g?&p1o-TjT)$Yqa\eO$_t]Om
+Paji*jl7%B(hBDo-jVONQVH*D\WIj>$uQIb"spM"_\dNJkXjZ!fT;6S)Rp2pm12M)
+#j#GUW""GPWk0/jpL/,(8;oi]9;5tS"+0l`i6@Lb'q0(B9.>L+^#P4K"<<&/'hqWR
+2aP79TiiNgKWU*42[<ZrK0-8(!L,R!<@/R#9&,9-kW0uU.N@QDD.YE&]o`(S$7HO5
+6?)2'[$I#S?f\4UZEUmRZ8N-?!&g$4EbJ4U=#C<d4B9FqZ&n2kdmHqp=<Qhs"/'+,
+j/Y1jKqL/uE7>6rdZjqA]JbKUn=@CG/;'qX4+e)deUb#k"nl==-Zm'16W00Q5g0rF
++B4e/Wg*g#XIktT"F:cLA1_]''N\+=TA566#H>]H-U]_\_\apbi8W\sb;!b6RsVTO
+TGTHB_AU6@GIImc(P=tPd[L;n\,j7A;ZOZS/P;<jG1,+h$bKne!GM_9O?BLEdhS7e
+X%!*6kC[/^>i]_cQGjJ>4u6`78e]_Y!F9Cs2Rc4EW+0%nl:95UhaM8FB=ZVZ*CVcM
+_i\Z\7EcBc.O4mr,Fm:aMRc^/1s'.R-tP_R"?$KI+#ksmj$gu>%]i=qo1D*k2Fc14
+?UBr$<f5@C.p6dB3&qSg'1@UR7OlM<0Fb;O)on?AMT](j&7ijA7KBnHK8b7Wc-gS8
+/-t0266$=>UbXF9"Q%'.;$n8YnmTRK/-Bj"Q@T6GbP6Kq:8aUYQ#*,:Ka0)7Q[6DU
+VK7X`4e"d>o:[r5<Q#dP-j*@tBs\pEdP)IlAj_13o1j0Q_)DV]E:$PB[,F6[5dD)P
++/ZC"c]2ZM*9Um3SsZZJC[0'HPELb%aE1oSXR%:\$b5"ZS/4N=aeEHfUq37Z-\%AZ
+-3BO>$3SEc:T]T1"SahaVl<Ee@Cl\"=atNc!&:'Y8I(LC4P#t\PH&E8N1'%J$5;.'
+6EM%?#?^m3!D[gKE`Bop/E.8;OUPQOP5dkEH)u"s!_7(\=CoTcIC%V<$JYb&-pZo8
+>jtW"X`#qHF+DkdbS_^%bUJ;U<#FSXY6n^61V):FWcV)\7rd6ZE:,HVZgIWiEK`!G
+m5M`-kY5>O1cL/u/f@UO;dDZs'd4k"+c?U]#:0jLDg`/EPCZ_g6/K5.7/I)(QnD1.
+.Zr.Z"NjqjJD1\/hZYhd*;YU64n-NT-d[b'2HOK6!9B%tIBSP`EZJnrUcVub_V:Pi
+8jf[7]G(or_0YDh"9G/V#=.2WJTrgXiKQ'?n5'LWJeAQ"2:FAN>dcqCI^,TPo*3QJ
+KEE$)o7=8,!\fhM<+CQs5s-q,9ZHd`e(lUK1cWI+P-@K)A3$"/Sd&"0'u9lf0UK_R
+SePW*Ld3jf"[E9R^n^K,Dd-/LdGt0n^12d5*<lH?`rnZa"+N<A/jqh5QTqDQB<j'U
+*W`15^2O.<""l"^*<#@0,HqN"j$s):/p\n:PRmgOcl?GT"T@@3s3N5>J855u4Tf2(
+!cU!ucpIeP.0*0F!>%a)&4HUr=F2_`!DjpAn1sn1,6cG*"qV"EY\s`Hm0&)M,Hu_$
+O:hdM.X:3##geh>K,k7PQNHZ+$1Lb8j"<,3"?Ap?=0+/GJdquYn5q5j_o*2mJ>adp
+:fnpmq/%beE12fGEg.,t%T'&,,!-8'Y62#9+E5&_+t,Q'>7@6>1/Q[IE%_\&'+Zca
+$4o920RXOpmgB4O1I<"J!Y?L;`r"uT5CcS4;%AV:E0lZS&TL5ROQsQB8ICRN'Q@[t
+OS][P3tjq:&7\TA"e-2OWtc3+(NCGsCp=U,#oG?^((i,/nM3PK@1JD\3p3.ld*s5S
+@2DG/&PuIGYiu:p#oaFA"@N\6D(Q9\NtV[[!"j&]_k.iW[eXlY-kL>MAo8fS`<&jB
+"Yng6Z0K&Ck697C)$F,XdI`Y0c6_I`#-gN"cErb]Ii^?Y*f$IHdMe>]Ed7$\+-FSZ
+Bk%Psb"F&J%2#?U6?=0.g]jMk,#R9GZ:Q4d;]l\B!V0A;d'k+D_?R;X1ss\ndFKF\
+&<p'.I'S##dNL!$-8s7C$Sj?P7]d(DD\LLN-SR[fnlmB&Ta-YY!:Wu<:g5!&JJF8R
+#V\sTo!npDZO/J!9CRijZ*c,Z+Y<37%\kd%+9~>
endstream
endobj
54 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/XObject <<
/Im8 51 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS5 43 0 R
>>
>>
endobj
56 0 obj
<<
/Length 3301
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVgiZ:#u%3\3fCcouP+Vk1^ni9GTB/tbRV24Id
+a"8b]_4lJ\Uo8$o`'ahYpp=K_)iR9@EG3Eu0Gt=Sn=h2PL2T'lN2FL<SE+*:P>14M
+8X=3Q(6$9jGd-*k/K9ZQ_bmqfB2"_T:8UBMd\(l>)pRN_&\RX@#)rh]kchj>&@`&O
+,9-_"#<IX)Lu?oG.hHHK#S-?[Gr.cj0#Pnpd/g%.%3*.V2ENa7C,Cj-[=SKg1oDII
+_/.Jc>W0hf(tkXlpr$jF*03eUZ['h?GR^CpLDK3('O3O6G&@Jg76[Fpi/0",>.nJ(
+i"ueOQ/_%)Plr=?pQ34M++XZSN^OjhgpTD80FWPVSuElPAf@c0\6Pi/9Ltg;N^J?R
+3NLG7$A6'+C]oTLJ]ik.^TL61k!2[fMQqmadX2l[iI]o9.B_[%2N@m<kV@en#XC,E
+$Bh?g.ffY(o7eEhe?4KYCYjZW85naL0b:94*3enlNrM+9$P8*3cn%;g/Eh-*(r<J/
+AgrccE8EPa@n>at6L;mAM7<h9C)A/b"KrCtBuEXG23C^E)25oN>j[4X)o3a^@/tTb
+443Z@X=I7TN\ZND5fbX>K*YQj%V(SufEDuabjp^ePrLPJj1*Mm%YI$V'Zi"Li?lij
+Jg>uonGA1*":tG,k0&i3'H52Q>(&^AiO$b)K`WC>3K.I0dPq_h8DZ:##W1W=6Z]J>
+V97?mKe4ZL0P;.Yo*c=k7J;811el*Eh]!"LFE&?kOgV)1%\mU@3";"h:97g_Gg.5K
+EU1Xf%CGom]3<*kc4CDZ#f\\XUM.M#`rcZID9!:;Hl"`-L(6,^(X<jEYRUI@ZVKu>
+b:H&&oX=k4!LeKK#-^FP69>4bQSU^T$c'`8!hbo'LfLM53_D37(B)Q\1p[g-EpX,L
+L>da.T*H&^&#:P:</XD&"*haA%&4['(FH<pkE<q_JgUu;+dE<OCb=Me6XDh1F`aOe
+.Y&Flg(T+FE1o_l)NL-M0dfU6:ijWB*.J74fQ6q`61!>?_nk^0MJ5f6Z.QoP"9TDJ
+3=Y"bF)Gi1`Y8tb2q[#Ii1gS=RdV]uNj1!hr_f0*@j7e7jjf@U].[s`n/#WX1(Q0T
+UIIla#i"5jjQFYe2!i&,:CUcGOZa'S]"^LAol<ED.Ebrd`Rg?'!=.]a*=H.<NKnL[
+6I,VdME*.0KY.ODd(R>)A9KB[h58QkNWO0E$&30_'d,aTN@?<#TR\s+:tk9-)nSV$
+!K=ZL2XAuAC^t3-^_RRh%=s+_AHfjbU;100aAF]SNkPfSQ8Xc@6ng)uJg?MH2AZa?
+2I`am3'0CD(dejK%>E<7LGn@@!Q3`3$J9sE,C9/,e)sPcXhp1j@f"mnb:)d9'fY1^
+r>_7aIgtpUOOXV7=)<&>Ne)9lk7USJQoS;I$2$[6Nt<O]gk7/-X=uo_"I.pT<8j'$
+LJZ,4K,U&"9J*5&U*TNol&.-$_F6]Qf(u.]11r8EkG#lZ>@9RsE[lf,b(;hgNCcd*
+O=!;q;EAsS'Z2XY@-/4>#RsSWepD;6]9BY"^fJVo@AQDJSlc\,bJ[+lX6:*MZuEt+
+KU4Nu_BUeUBF7%g7Ln@Q`e&uMH<[IZDWju=We+.<UD`MDm%*6iL%saW;Vd;M1%Ij/
+c4,fH!19ssfbAC=Z_0GmLCP$d.Wm;Z'iHuTWQ%+6qC2oP\VEGWDF-5$&9K:V7nSps
+NBdZQb6^^Y%'L*I,J`(P)k]W09Q2hnk!;&aj5-8?8VfqlSJ2U6Is_q^/5m2"K5"U(
+V:$9L-r=a4.*W?E2*`$/j^8uQlt;B]I]psFCG@<o`f\'h*).?X>RLRM6#.Vt_mIZ5
+U&#%X0@`l'QnK8u'OkCt_Ke9L@0kJpFE3Ro"u2!j'*A[44X&KO($Y6eg$ga-'p=]n
+),FFlpbOL$U&Q74_]*%nE.C]C64o\h;/LCHXNJPid)f0hU!9YC<p%%f8If/9'T9J_
+nfK,]@jHr!AS$G&3^qsl'kcSPAe!ji&GBdm>/J$I'#rU&n60"HZ*69tW9]'_N1q4f
+MZtajVmR<2eHh=]YDh:$;)CsBbB4VOpFYea3LrQ>D$3]FWC@WR)B2fO5Bh[k&26a-
+#g/6MRg\>9i5XEXl:gAETpAKfL@UNMb#1F]JY9()6Q]m0EI>1A0GI\5E)Qko#bg6M
+YZ0KS*4g2r33X<eC\`o3%H]q=>nmGsNGJ!:9:Mmc%k,fElen88%=sLhWjj;p;f(0@
+@@4`n9,J!NFP96G3P#AV8Vg[uA@0\Enea2LPDTNIE:n1SkA6W)?W&XLTVNHXF2aQ'
+E%!3cHo?Wk^=qqRR0O)Edc;?qC2pd&Y=l`ukITbofg.tVqJSX1[sn^[qOLhMK/,PM
+MT=@B$\We,#>SsGBi:3B15IC?!Y%_@EKP")2m=8(MD4cSJ1qJ+oHo;(eepfYD[tl'
+9Uc1S$N`"V$3@hfh-I%P!Iu^bTYXe!-ulZ23->AhbT4!'&7TfRF'eM;C+581\[Md-
+3It!A'0VNd_a$?kJ`Ua&#"4qJY[sb!bBn/eXpdU(1^005Fr1\a^R=RF87C-lW>qd\
+O'7t0*'8,:5Zp38[h[eIoFu,52HNl()[2&$F)RdmM@e&_8h0>'hAfk4l\k/6=Q9"@
+1_*u9E]==YaRdqD::M1p'.o&@XL!kLT/7rK#)K2r/Bpe_F=)`)B;7mF/Kc!!0I^ZX
+UU)4X&Z'QFCI)$tMKS<;Cu91k2G5R'kEdD&3d5SO1>BM:?N$d>2)$Ro@TM?7m%QQG
+L!]&qo]X$8UUt1fJXs\a;-roGHgX_G\+lPI2TgnM3J)8Y,A-&Cp?dI!Cj"ibgq.eV
+'Uu"7,1G0Yc[_G;OuELQb'k`ZOIp%J<CK5?a\Kta.BKO!R*!.^+M5gno"t`LRaG,L
+am`L`BH,)k)Q@R8#V3R*+=m[JLR.#\hTN=I:Oc**XcZ!cSiaYY?%o,K3!<E[J5?U!
+ecpmT_b[Q@!2L%%WpCtK6Aqd@O32!F((+euDC$iDJ>Nbuc4/+*:$bVZc#eGCDZ>da
+s6gMZ,Z6nN^qB.(e>5>8VW]Jeh@4AD<Id=AB'9Lo84MfVGcFS+?udDA'Q",3";"s=
+!j5G:ma\Mh@fXT.`BFT!^0P,C$KX`?.(&]/K(dQ/>A.XRm(brA/.VnJ#c90H8q'^u
+KL<hpm;A6H6uoV$eBHjfMb('[UiLLQniB7[r'o$B!9g^RF9UT/g0hl,l0R0)G-d%b
+o0Cq3`V9Vpr+"&X%=m.9jD#)o]at1t%=gnS,\SY<RLETH$/j#7N<i)$U6MDm!MTV~>
endstream
endobj
57 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
61 0 obj
<<
/Length 3312
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVojq9Tm%3\3fCcouP+Vk1^ni9GTB/tbRV24Id
+a"8b]_4lJ\Uo8$o`'ahYpp=cj(Cih7d?(kG1)g\]6qNdThJtUo9nr7"aMMdB)GZ#C
+7+uVk(6-=ciMbOD1Sr=8,:`1>MZ]M;b!^2b*0h'H)PI37]HSCk&/NHno-?.XBb1A9
+n9e@!>W<9b#,=_<2]a)""%mS>*#Bb)Ku7pEToMGi)N7.COi[1?CH%d?-\0ns$A^;R
+%(B9#fV4p5'^8%$.]$=R>-83*V*\,mN&JB5D0Lf#*+OoMNJA`p^92'E3h237o9kp!
+"m\LKOZasPA2'Zu#/c"_#*n'&)pP8_WR/d!%YI.J3&q(+5W=Y<!5]9W@sI8t%"SED
+3K58&cN$3r!61q:.[mB<]^C-@oq:[sXR%\CZHDU1JO$(pNPg#"$4_%`VU.JAMYn"i
+6&XeB#,-!FZ_M6%[fS(!0]k'KK1O-D$tC]s*k1Y)MQ<d58@T@$C4h?RNM0`F(JKg7
+E/-4-C4LqoMI97BN?]\N0b.]W"#298]X"\66U9'UN>'sk/rP9OG7_=t_Aa,k&\LpO
+#/PtEa?K_KauPDjOO?)uK1OiX6n_30*?oEKiedsj.!#4(U87^ON_jjZ2a?=BQnaVr
+@)Dpi0FS0f_!k#6#/Tef-OR`[>e;L[%#Eaq.TQg?1_-9o_Db01Ct0[fJOGU&"9X1s
+3D)-i4?!G[!0/mi+cpFQ%aGO@-c&X/3A7nk&Aj[LDqk+D_BTW_R^m<N$Am/)cs5Bj
+Mo=<R\$Dr1)2@PtVVm106E>A8$Fk]G"ugeD4Ln3sSP^P]\6Kq$.mb>5KbG.%1tE4W
+>.1lA^iC@)(>D*O2mo.\EK&%bgKqcY.+sO7ds[>\ge+t9:SfoC5Ve9W!6jIfn3f!7
+hXL,q(M'[^W"ibB5\!-7.I_-l@\T,?1^l;Y^(:^<g_U=5oqHUgh7%_-Y?0>_]s0'V
+;PB5Wj)F3@hR6XFS)BrT\/I+?ot+gq2R(I^h(AtP'NNKVb72;h!6kb-HC_8oNa3DX
+C<>M3`Nm&,6e$kP6-J2GAb1$&3@h4ad1NOk>BK(R.@eAG";Rd7J3Y*/E;.F>Ou:Kr
+$AdlVDVQlk`!sG`mPn6.N#4C4>m>;lo-srng'.m@Lm[QQQJ&`b&Tt+]Pgf#;mu8j3
+<jl#SqZ9&LO>8Ze$Bs'\Z4-(/?+"j]JX#A85ORM*'K>)V=a;b+$L)*#PK6?o?u/2)
+co3I?fGrWhYQ_7RmPFo?%,]f%J$$dM\->:4(uaUe0:f0K[i4)?S,[X?%K\36.f35&
+QjbBL"Vhl#`riZ4AC/a8Yk*1iiC`&<kYsSUQMBEJ88Wkh0sJGm,TIm^KaWU))[@MJ
+*?u12;m$<I6hl=/*Q)M:BN@-u5g&Co4>A2pc'?$Y\JKf^1l!Zr\;"+h&(cbh"YgK@
+SiFe`>1rb/&L]Y/`t',SOq_(/h0?<VR%.8(>EQ.98#GC^JVp`KIF-+h93:=SJWW9K
+#4rhU2u4,JWY'3JN]f";Uu>>&YrGL-40BEXL*3Qu$n,-n'2sRbSqGBnm9VlbeTV5Q
+XM'(%Ks\?X1G.Dkha8hDrJ&5he;sH1:9#&J5pp@+N&`=RDc+QYAO'fOlLPK_i_[?l
+!nn+I@6^I!nZ03k#om^,@tEV196X?76\okViJijQ6rXL4,F+CO@TkuPH4?`-'i7FV
+=4/o(oG+TH<sn0k0GXlqA)MN*0KBQaejLH+'[N@kOb(?jB+8'=9fU3D4A</5\:Y2Z
+N/g3@e7Ld?)X7Wg'f!TPBXHHkK,Ub04`S"<8@h,SIglF`J[H4U"%*t86-)<UVZ['Q
+QGZfkQ-sG#5g$\WD-dVoML.u7d+W1(E+s)]0Wrt_-<H_,-ArA&V$1U5cR\,^/*a_t
+nC(]E-%%@sVTH;?/OE2QRU3?`RA@3Z9p!nu>]6&Z#5JsM-W8cBV!UgUR.3/.=r+BM
+GtYuAcX7<Aapp_g<SZ9OJ!Q?@[`LSV<CX/g@LT*<^c"I[L^s]lq-YVMZ5Wr)hLCrV
+YA`Us$D7/"$3:<t3-U2d:Jf3$K,(RSZ&1^MG)3;&ctj-P4KSgCb<]S%d"P+iCFtE+
+mL'/'.=ei&K)f:_-5t`GCR*LI(IrG^K6=YB-n23nBh<2m+:3Ro)QrT#eWtfS;aH75
+^pk<KP%"d7=>9f1gJ6;:F=^$AT(4drfPb0HNbK&*'Y"@9?X`1rDtjJ0JqPKm/nF'I
+b4:e&CXg5E9;Fp'fSM\qJ.;U4E+.,HM(qIO&"(NZLZr4-0uCN`?93sT5g5!=m*b0i
+A$/-gQ)^uu5EKqra>(Z)+m1c3Sl=KpG8^Y@T2R,6XP9`&.O^qlOD#'F'?rJ8q*8Y]
+J"PCPS2;VC*#<BBDeJFcTCJ3<4+`:2Z[ahSlYIC?SW($UDFUY)AmDn>V*14(B?2oU
+`E!7P&oKgD5@lr</UFGX&WPF.0ND:agNTO31V,Cca;bn-Ffj!3^s:5$?Z+-DgZ`LC
+RS8OtQ+]&J#W'OQ@)_#<Q+DOq[*-Ecg>W<Ja%_p-`5&N41";%\[IJt>5Y9^2EP#Nb
+G(kd/0W6k(*"+o^-I15u%ta89+,:rCd)7go=Y:Bq\o2cJZ':Z#h\Vq+fYAmanJF"c
+r-Pqo6Ue61!uP?`apVI!/a:b&=bfn^^uIUoEj?'#XmU(!TYEBV1Qpp,M8FoJ.cTh0
+!Gfo^2bhCd0t<A%9h:#?q@>M/O3Te\:52JgDRO%>oG"G[I@W;Tl],0-Pm7OU#t&D(
+#^kGhhiLhOS!7@3+UU@+lU0Tm5sRjL"^F#_A8:YE%]!'Z\G."p&FY[bTN/>CcMCb7
+*`/\l=8e+l+6Qg+kR.#jeFuDO$76-oY)8dpF\N'Zd`p$iJiBC8+S5^Ta)-8$%)"&I
+ib[.?-QYBg$@W,tc\LCn.en!J08(_F/+n2tQ-6pWc"+p"bR]:!-:[at!X,t#"8kIm
+Lk;A.pa6DL6hl]H]NIiTY%Fn5bT^4?r'8'IbNAY%W*"bm$N&#$[Z7pcYS-^V(6taP
+b/XYe9H#VCk`060`eE7q.Qg<N*9$4XNrml:!0@^b@R4C;#:o?S+N/"fI,+pCc,Ne2
+@XnXbkW\(_Na`t<TR$pEZ4*D-%I=K4KXO&149bdf#f)l9#fb"`ZO:`_#3?0qK61D7
+BE`o]%\QQnV%,Bl1<g#3$,BqAUo99K^glB*%j\RnYg><r-3\p8$\dB5"Ulu`b7;>H
+%k17I"U%J/]+"si&2;WE&JT'^;%\DX"_G>`O/!@bljP$+Aq[T#@NJ&A&7GQN"pG89
+,2+X,)B^.~>
endstream
endobj
62 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
64 0 obj
<<
/Length 7716
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVgfPiG\NCP/n\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="5n)Uj3>kPGo/Xn/D($;tL,2)jW+lNp7UqR&H8H`[NQ-S/
+XG02D,#1acH/SnkA>N)J0V`p+fO?e2.FeHle6FsM$jP.<"RokV\^X)Y/%F%#*5W.<
+p%o&3:fK7hAL:?DeC\k"RuH>/KdrH41sJd-K6X2&2&%(U_?1M\9;g9s7bWE4UgPS^
+$:Z8!IRHG+OU[;i'4u;JBFl2kg5[?.-(tkeF_2;Q@*Q:;QqV-Y!PHW!3cBsho4c#*
+/JOODKW3&"@P3;j70c0i@,KH$G]H8PEKe!&^Hhk^1lUi>fG?IrHeK=;B\N='#U'3%
+T<^hGhD$k3\EZ)dM@1oWZjE\h2i_ho`&9XF"2ph1.N42>`$#6&nrBK<b5XZo"+3&I
+Y;<]W3\AP)p*&mGi.WnZ6cPul%\t@/N/A;\h)C:Fp>%S._N$TE%:`Z)[5!le+#8u-
+,peN`B]SU%Z)aVubfsAonW$Ge;"R:dBW)XHXE7X?.)Tj#1F;([?KBDVHVcfH:J98j
+#f2B.KV<'m>T*g(_qt0i+[^d89`aIF4MKg*_\.qRYf\0$K&BHdKn5M")MWfN@MW"E
+i4'JVC^g$/;rNDn*iI-_>o/Kp$@jgk20@5Jeodp+(fhfYD-bbt<I[dKBQ2p>7@$(<
+Uo@imS=eN/[@l!'QGn89>F+i73`X(OGB_[Tk[6**%1QPoU$JXdM6Glg]6h@b/LH/p
+Ou4sg4opO(,U\b]-P*NlduAC$%&5L7^92_C^rW4,ll1ZrQ71Uq9F;/Z@?e(e)@#Ng
+P+dp1+NH#:$>f<f+W6/%>%Yn;hZ%0:MC"Y'iQ,]3kcAaN!Y$$uH(Rt1"Xo*MiPIs\
+[go44'Fa$#gAVS=W5e'p_#u\9]E<CD2@UmGPsR::jup<:.B)LA$o/P=pHA;;<?kD)
+8Cf^s9hSN^1IE^jh7'P>TtnH^/@mpT!C`Ed_F"U\cE^7Vo$?cM"DtUXCmLqSN<*dD
+.*ZOZd5'+qAU_Zj*+'UG`<.7/aYu>Z/2HCOf/1T,WZ8f9^eH2JRZ&I8d>^MG0<-jg
+Md%qkW&6Xlc&CZk2Z^KUB^_qnIE_@J1#-8+ddBp;?UIZkPAf?W>!1fb:ucq5->h3O
+F)'%NM[NF\]n`Ck?k*4,2*OY93ePeJk^t9a%I,W*.d-G1<hMngTg1Q)QI?)4!n:+5
+_-O4OBF=i#FTh$@"Ys&<"P;"<#Hg<I#3GhN@/5(Ui1q.jV-FEpe3Se=U_gtGZ;_Up
+'Sf!('o(XQ%3g/f?RgRbPf6%i"*18=$E7&2-!VHXF=pUoh->S7BbVA8_,tIf5HKR'
+;3krhMkQk&!l_%J@shHd+M]S?F-%Be+C/4[)&Fn]Nk*&jl&VW#C-hXt'N`^f%I;@T
+87iE4)UgELb%2e"-7!(7lRZOXI-<LYm#@(tIt&h"2B:^kCI=hT5D1/l^Z[io"4R67
+.!Wp#2uq"P$8HtF'S2#P)JB-O%0f)EK7e,R%?%_=1usVi"#@:p%%%J2i.*a[nlIZh
+3?!\Re<-*gp/""g$jndQPEMo:)J4d\#4m?a"(l:>B@.ZjXOK.&+E42DZVPI\)MCgW
+((?jd+JC&%K$UFl5A41.U'-L0Ou`V0k`lLLT]1D5.N_51Ob9Ire;mI!%7_gh"f"?D
+KTY9g5QSt3VURf"dZA69kq+N^'XF!%3f$>kPgTd_m+KeOPtNK94K9,'Ss=&99h<N1
+V'YQ*K/n9CVZA*EeCK&p]#R3i]`b>,8/g#NR9OCeDlFDg#1_uM%S2"W"r-tS=,P7/
+k`@bKF;D4/lIAslI>4s!-F2-a&kTs%7jfH.PQn":oE^gY"9E<kORU@t6%oTK7<&W8
+;C4hiV*CWH:=)ferE-0bI^"V`Zs'M)6427T0D2#4fK`k1X;)V[e8QAUqdF@oZJD.2
+:>J^]Bjg<c/@kK>i`k.#[q^VB[+?jafKa"<!M*Ju[sjrMAS$.(S^P(YEq>Q38Q_n@
+5.$WY]%-(5:%,2A,.3hVdMnBtC:2otQ"L+t]7`_Ui&;f:MX]2K'4ES2rk#Z%s'Nq^
+?#[4G_!OJ&h5S(sD3]5tect=X)UX6-7OPs<-O8IR'jjqb@U]&KZXY\1>k%_<^R#$8
+iQOX?0mc[&Z[07>Bt\I7G"8br[VnsWEK`-eF3#4YKB"MF=fRGZ`>N3efLk(<nL-69
+fX7knn83rdc=b<8',$Sa;`HQ+"3qY50BLrk[Ac_:XBE&o@Sgo:WAT@ToVWseC9`qC
+_&gm=E7rYXSTnm\,-J:^M:QMK96@UtdkmsOBfZDaEZ6F$>(XV+.Jo,^V(pD@o2T*;
+=f5YeU<9mpin,67X[oloeBC]SC&Lo,m^$0"\C.VaHX2cB2%mq%Rp9M&R:s"ZZG?>J
++`(GF=f@/m]KjeZK8Ym&.G!A/POiA9h8*K;`n[>>j)*5%#IZ%pmA6%V_JXBGD49Kk
+e8tW#mcj[QWihL7FR)uV8jebceG[$SF+[?FLVRoK9@KC5!T]>`?RdXMiOYtB(i'e;
+8L]Cp(Q4D^N]"e##8lIU@nrD+&QF#bJ>on,_cP">6$Y'`!PEcCF38])9Jl[K]Z,M)
+hKNo(7;CtmZBoV"RE[;mCur+o%bahr?1=Ifa'@Z#=K]3]\l93B)D@ZS91O!6/l&f2
+0%Ll>=_mn0b3M!q>4[d=Ff)!Gmf:@n>TSGFXfkdnQJ-(ZSnW^-T6AXA6bM0sKf(B/
+g@2MVXP_lacMY*Ro,N7s9mT0Qr8$r2%6odfCMhgFjnn*uNeHt!=b\rU=m&LCKR'b8
+J[u%=_-L7_qn@(=HI&eaSu:Po/,/IYJ!/#]bF3gj;=eYF_76+1#C-0][<^V3aB[cm
+=#D_d^2JGiN76p2&$Lq@boHV1B>4#nq6Rfs9`?,GSShWp?%80H0#+laBPmJCWbUCN
+G0Nbrk)C#Q@MkNToUu?s"th0/@M57=`gibQ"q*tjc1qFA8H>gTSmibH:_ocloY'[9
+eBg[ncpGQ?Yk2d$"\\"YDUuX#19[o?0^:,<:bM3p9*'!HjH+&YJ7/Y"f$*I!#EXJn
+OGsB>MRP9r"GUTp0M\>2E2W2:#B6RI:o#U\Nsa7A$P74aXNo-`V$c^K$SZW.&?`iB
+XL3W_;?\gk@N$BK:/XZjpL5tWi2@oq*[P2j"p4ppMk^K\`4HS,[m4j?m"XtjEt)S\
++E6QT@Lca15n;mF,f!ZgE:>5_:a+3b+D\hWn:;-f%1oWF'EU9"9#VK`W4%WK%C$s#
+&Ek>b1D5f?-\q@.Y)`u$OQJ9>jGQA;&U=t+fb(IJ,m#A*+ED)!BI'6IX3klb&J#R/
+GoABLk@SEF&Zlt5eJN:3%T-UVjY.kJQ7%:o(D&q?Y0`e5=UHd#hso(YcqO[`\Im6&
+)!SC3WbM_>^CO0o0g]t8d5XEh!?C)f"Hh3_OBs-2NsX'*+KnQXO^B0I:9+F<(9oc.
+dEMu[<=7"6'[bY[Z5Bi%2\iU^(r?h,ng:Jq_'6s%,:c/+n^=Ni"""QTn$6Wf/PMt%
+?O`/k&eXQ/Xi2T=:F4Ca*_HG[:gELLs!]\\+nD$HOc(U8;Sc6(0@?=563dZ@,pY7(
+"nBnG13!X5jU:U`#r'OCY[\CZ@2+gD$a?Z[o%[eSd2N-;/M"cIO;'P05U8ZST0afs
+:aDQfbaMH%,Y>g*_@U/?i1<O(,miq,l@/;=!2C&P#3$[RC?I;]#,1>Z05>g-XW$a<
+KUUmZ1D$ZDn*HZ=Ibdhs2/UYIo(P$+V),G9W@BJX/+B2fE=,W:ge_oHb(R5U\Mtlk
+23VjN/pO/Q1?XNb31t<''6Muj:oq""$;&%fNY\;0_(nUk,BG@sU+#W^RkrNdU*?Kt
+U.75$kQXY*;[T'YPL@lXi$+.[U(b4&;me_AMPV!#VIjT^&9\:7[eu"55Z?nQXd2lm
+W>lT;4fp"pe*./Q%6t;L4YJXme1A\V@2oTdW`0JDoJRnNZEI4Y\M/UZM0cYNCHUn]
+06C=*e2Z)25VI2AZkNI..npX+,.;T8aX.6N/<V^Z?ET2-,mtp(_@nnJ86`H+g_+eC
+F&:9Q!Ar!58M`Q;e=/tWJ@AH^ee7U0;$QXA^qA012f$Z1b`[HS4\[c-_"65I;$ObS
+T#[]0gQ]c'Pg$bg,>Ti1:N&KD;jR??))=#S^9n7$FQH9@]fXaY]QG)foK,;Q#=9tW
+:9;?.XQM7$78l&fq!5(t'^!JQ7oUuE@J%T>Z^4IE]fe5Q<#$=m'j2)j9``IR1os$c
+9t8D'Y4'S'<K>/BZTQ.KVCHDj,]epiQ&R[g1InN^=*4GdeVM:SCHD-,>'"/t[?AoP
+R*4!$edViI/;@VV^sH$/7-qTibh$%kdon6516b8VF8nSorq?$,710W1outj(_!F\)
+pN7b4PSgXhX[DIZ?7_(Aedk621tY,.?g&_B/X\ik"X[1_fp$1#[Ja%KKjsEk@ZCTE
+e%XS&)a=eA?oCP#Zfn71o46,AA5g@LmFa;>EFq"Ahm6BVp.IVD%bsuVXB'$6eY?7?
+K3:j"3,Pp4p/L'NMe4HWiq%>tQCU(FTec=u2m*`OX^O6^;"@2)4\g8n@])*,P/p\#
+Bi^i)nb$J]XQhUUl-i&dP>K3+[;6Vd4\e');r);3][B.VDf2%]POL9Tdr74o5H`0n
+0J^)$..">D(Y8NL'F/RK#3pCDlIQbIUD5k/D+rLDm'[>bMfr#4ZL-.0oQN:gbK4PC
+a[g-F)%RSi=$#BBcUOn5>d!6YFEZh_j(QaR8.Q5RcQ;]-Pk8]jG]AIPoN^'e6@q++
+k*MKJVOq(20hF03C%nRf[7=8Y=(/LMp\22CAtMM6YB^i6H.S7,'-_0%=(+nF@9:8e
+f/!0!"&G&s:Cf]CV?9XjZXL<t*u5/$fA-22ds^u>Id<D/jonYD\U^mnJ8brXFW5fH
+ro9l4<%^KA\/?<q9`*&aFg)<=n(iR*aT5)c(.kmt"pUS2!s4'2[#Ds'=BdO2cNBn^
+Z;<*MkFjeT/lmQhoO9AYO_'<S3++9PLe^<mo-9'olMtBI9D/UHpmX-cGm+W%4rBI6
+Bs.Te$]8m"MDFpY%]tN][gTN.Mccer33/!Y]nEn?f!qE0(u'q8bT`FHLKL[:prSQK
+[uD6fLcFLVi\LlXdu%9!M`C-:R'D`^.0oD+.P\[ZoN%Y_CCamn'2\WX'PEL9goj;S
+NDrW9\?<nl7n`Xq.M<sOl*YDS,p/7(+7V:Qih6nuQ]kHRXgp<M3G42nB9tD!Pb8sC
+R2m?j]et(:(>3'r\RdesB]7sMPKj2s\O1)AToj6EPgSf^'/rp2.iGmY&-Xa?fXCr,
+l^%)TS9]5NRDG6#X-`B#RdfNTo<4OS;&m,$M`C6_dq1;%$&DI57G-XZ122P(Q^AXd
+%ZA(jGQ!\EqGNG4@!T@73(ec?n='1G2BkAB@Ok$]08J6`U07emZ;%"DShCti?smai
+fK)o6-I;HmV-5T/RU)\W=tlC0)nJB_(R]3Q9,@?hK;kiHH7M9aq#GRkVOD'mRZ3H@
+$`=a!6.)&t>#2'+LctOhT/^,5;O'_?Z(N#=WfeI$d\Wic/Yo\UQ9$1hH13#`BP*^H
+LjAHh]%)fB[u#A>SF\+h\@EWi]oa5DRFo]Eq!5)mP9\_JYRgDc>6dajnu(W,0a&==
+GZQS1B+eZDZ-sBqWp$$rMBVR4@U^>U$*IrUGe2##)NWLWX%:8*en2NoMM^(0:gTnk
+rqdX2Vu'5#)cFY\rO"V'$:5f;)cd(\>;U,9Vm>9h1PrRr]seqt\$IZr>Fc1LIa!no
+[@9F`4&`MUZ*rCU/=UL\O@#h6Q;]WCUJ77%fW`K`8\GI,'Z(m')n3=]]=PW9\U1G8
+C-WrhOJ)L&?Rd3,U)be"%DBb[/)/CcYYi40P+i8u+j.\a>PcWm)8EGU3P51(>Q0tZ
+0u#U;]\FFl8j=Ym*3/o5"WPCXq`cUV%E1FC_u)#JHrdHYEPS)<o\5)::+s";?Tjlq
+a*_BX.VH3F+30jL`tE*noEDWak<4[<\9&,!]4.aES$X0![a[1/[;SEJ8F5X@+T/c8
+]UQWI\?Ha=Y?YpYbC.V1EQ^t(bNhI;g"*4@%`dm=Q]+&9qte8On[@64YC!SZlFk?r
+!R-Pn7m&X@3\.urFjW>M7*aDP>ogF[qBK]&\6Cio'TQCo-dUMH>J+bq`_RcV4j`M'
+e*q1\cI]DgFk&Q]\M\%DgZR(76-:LcdZ1'1*E^D%A\Y=7f6gCJ4TN.Z.F9)Be[4/]
+C_j[3):u.T5g0DP?%O_LPLr#W\guIf>TPSIRo;,r].;.RrF8S"S@j9H`Tu/$Dm1pD
+*lubM\4i+B]M?4n8)?*>^:allh-e<>_nW9mhgL!KX<FrVke=anY_#=#G*9m/'ZO@(
+d8`iu]c+YJjh2Z7_7h>.4tUV$]#9#0e#&bU\q[VL]OnfG`_i_RF\CfbK?tZ(fDKJb
+]3j[mHdMaNjIAKR?<'oMVo5[AiYc^GS63eFD;<A!,$\^C^3IiV!TQl<l$`ZtWHmaf
+1[*VFl5fHAI[8"U]=A@%\P&+1h?S_j0#7J&Xg(e=gVo"h5Ib%DdVuhc4[e2es4]"$
+]lb7+5#-\m!22ThdbDn%bsB"Mi#rg%'gD4f3/cDT9CXHV-B1V@4<<m>8afsQpL5-S
+Ii7hET>EfOfDJt+.=(Ob/:mb5[m!F8SsSse7-Z?somL;N]j]80:$$jT_sbs(5?>k[
+e[E`Wm2fhMgiBqi@G&iK+ZshpXhD,*6Ps[N_78h,]@UG-lbm-IhRq2/mD\iYO18,p
+q4\Jsno_nnUuP^aabk/KSH,S"JD:*pY`9UQrKD%\Gi_'ZrB.?r1H58M!R?%k7>#af
+JcHoOK19@5aLGt-(lefP"(W#R#_``mE@?2KCD%JC"qbO%-8uru`Q'_7JArQ<1IMI&
+3,B'4#EV;!,=-k&1bb65k0o/@i]TGY$n)`KA54XEQ-c:HfGsU+3sNraduh;m@9&Ll
+Wrm)WEd9U;d:G/Fe0o5gWQq8>R`*@r8Zp?T(:s-UlVsS.iV$u!`,?A0_J/$LQ3.:[
+)I]cmll6A00s4t?e7+e%?m$\H7RM"5g(07BNNAQWXJ\.JL"19F4X=]\XMntp;`_XQ
+J[H&'W7mAWl5-qTB=IB$jO\)P)s2>a?/<@>^>3i#*A09<LS)rP2;2BnUPZc+E4Xj"
+pQqi]o'uQ?*`1%\mdk@G>T\oK`&*Nda@/@-@e_`2;rHB0iM^],$A]WV1U@W``Wh+t
+J5Rj+5\Q&T#%<Z)l+RIW2Wm5Z,XClZ:t.Im^J(jMrkIq.5llWMe):DF0N_Qs#,k(l
+#R(6n-OR`[as.D%$&h4;8F\6j,"40?=T:VuKVp7AZ(qs867K8j$UYEiS/]AoqfNJT
+N_1YW9[1eP'udJC"GK#Q1/St5+[\CF85@@Pf!D@Jpt;^m1Ku^\<#jX@`USap)62Z$
+]e#qPK,4d0.1Gf$2'Ds?TMM8gs%YE8jW@4GY2p"De1>ner_YGA(Ilkng'/6V&d5fG
+;c!I3e%J`W1`9A[>?nem2=/&==OnKs(KL'_5t3?n!ZO3*1>ILUZcGsY@69\D2/ZAo
+-+@ct'h-5a=d+64!`gJ#CMHn/Q#Afe9oY3PVJVNY]AE0)?[Z38Kpt%o<f3"Y;Sg?:
+Cpd@;:OjX5gY2$spH9#U57Osf,UbH1m,lNP_on-'/ot*T9libJO5BD1!W~>
endstream
endobj
65 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
67 0 obj
<<
/Length 3910
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f-OuS;p';@D'm+0UkZ=PG*r^.4Q75@aV^4>W%M]8q]d?`+_c=$q<SB
+aP&(I)3.2UWh_bUG6XAP"[bS?5]\WK%45"nNneP/#S)TA9YB=PUBh:+1SLVu@6.VO
+L/T,6h1H7UAbWfVbgL,_>]3+%!P%$8[nnch_`>ISA2fB86W$/)gb';-8qa,d)SHH2
+_dN$Re06@p*!e"r*X$e*;_m*`-GuFPPI6&2+d"qK4Cg/*=,*JI`H&stO,HI/iIK!`
+$FF!=QK&`OdUNh,EFod`Ls(0)))#(5H*lGINI_0#&23;sd.jI(=QV>u6VHeE%3orf
+SZTe[_Dht!OQI>^!D$Z>/Sf#b/gGqS1cdm`]JC&+9qi[E\;eAJoIV4Ob7?I__\2mQ
+E=g>TY,rWu\IO88i\lf!@*1C1N(`dt8B]``&4c9sdPo$1X"61<l[3U#K`e]%)^l7*
+&u,oR8E)\9"/@j.[U<dI'h5CtG*/\T8A[(jOu!"kNGmP+s"K9HhD$lRJ5Ime&AZ.?
+[Lm0kN4ct0@.FO'S%bmS6>GL7NT4F#&.2oT_T0l@2,=)W:O(5?N_e#\'SdB$@7:;#
+?rHBG"3dtb6t)Hn)-2tuJeZfJ^uW*;"/+r(5cb>01PN/g>t[/53i<n@_iRb7;*eSf
+)pqM*A/X&$6fSJ.O_!I'U2H&2VZq^FB&Kc?i(th+_4t*kY/;[0#c5l\o6,j3aE!&m
+,BFJX1GTV#S.3@m1)/27ZKf'=<j3JXhNtR$9A<OpK2>F+GirHAE5NPJN>;\!;DRe[
+6%3&4qWp5c@m3#,\gULS)[4'ab(SY3qo0I7EMCuk3HRWl7EoesX'c)SD0RE7]#>s4
+BUUVcK]J%8B!]LO8;jn."+];@#&8Zl)<fWU'8=>hgK<RJXGmlI[7t&G1t:"6gr*^O
+S8&TE"/+j;#=3T@4,gO8^_?t!NZTuL$]&(b%AA%E_i9ob6l1jcW5T59UM/9lfiD[S
+\CrDr^IgWIC;:[])`#nc_GRgQ*62m)"2K/$[F,V.&@<A<_GD9-AIQ](%uoMkO-lH8
+C$L/?KFd\Um.RN=o64C1]O[K@"0\m06U%I1l`ST"5m9Q9Fp3#D9#W+bPcC&S$=p=l
+ZIBS@$:Y?'$%\95AeS0`@4-SU,pC'cQd&o^."TcR/mr3)JP/H9!Mh_;1]mJUQuH'a
+bfZ8>/@AH?03^#qnK'r'H.tW"0WuHX'L[n1c_J_pX?H'Fpa5Wq&7H'M%;r*)1)aS!
+)%SESegpfaLC+q(4shk:#+/eg>Z#6(NR0DIKWZ8\'''3(R#\NBN4`=-rs&[COY*l_
+H9jegGj=+-+lko1_g<hkW!"QR!p5VOb^K]r"XYAEb8ZlV\LU*gVD!\J$5NV$#:PNF
+"(8VG>A.tCJB/]4?u57^YW)h]@-=s"1_%:=,DKuM'K:)hs,hS2LC<AM5c>Nai-Z,g
+E)[B7GE2ruF<+I[ILrHV8I:J%J3`V$'uJ>R$eY),J.D>g6aXZ?A4/\0Bd+^p\&As3
+4@tB@&=g]")\bZ(;[1WK&-SB'c/u$4%FKRW7M&C-VX^aX'?Vf-29N.i6F`$&^tb'6
+C(6aSF^J#10Ls&BLZDYf0Sd<c85R>MiV@b];DKW@od%li6ueB+/FH@ZD'ifG>a)IB
+:s(dr%,KF%#*Q3e9&O@lUSDCdP1\D,n;9KKM%)WkJ-N)/C2f'o+9kK#KJ-m*"%'Ph
+WC3&M<=5?taHH4rj=i"3U-_F$:hcnZakj0mSk&*TkH2OM2H8@-#Q_.i3&T9q*#eBM
+lfCC8"cBlm@QM%14`qp5J;OF14'Vfs$!`.,^0)Bn60o&0Ya,EsfD>q[/F@bf[P"R_
+2oAR1[AL7;4`X\`;/6Z\T..3*K\96FCMb)jY"+f,eN72TWh"T;2Tju`!,lL]<O0)W
+e-=R0E'e?^$*G'kkh5j3_X8^p\MdLL>\fI5/o=;f#G07I3hL&ci&JCB7eDdgnjDk?
+d(:+6_;*5(E*"1n\oM]dh.\fSADQL`AU="*9A+Qo21W=pP5GCiom!\&%^Y*UpK[VD
+Kl;Z>#<+qPh.nluE*aKq=%a!2>F5i!NBk,nTW_<&J.?KX'uG3:%+r0\:^\:_@9)=I
+iB.$-n=D5O<V%&;b[6<I"u`[;pDmcA'Fa>O4MZhM.+ATr?#kYe#5MU8AA"d,1<re)
+q*9ti%&]=F(!Oo>o*j^hA".>t<jt(V+.dL:%*4u)YprO3a%W]G1)=iRp(oYtbO&Gh
+&5iepbU!lEeOi3>#U/.`&-];L6c16Ma7MGJK,i$'b'esNH1Ml<m-a<u(0K*)b>i9R
+_4EF5Y;a#X3RJhKW,oN$a+2c<f3Ln<1&e%JHL!A#7F,9jcGn)9h^g<AO^@YA5KfII
+B1cksY'++o=B9U]Cu)XilXn5n(V=9c'nqQ^(:i1f5:C?,e[oBND8dG=H#ASTUr_]>
+cJ.@L")R[$2t!m+%3&earX#oU2MWNH02?/&26o($^/Aa!6Y8#dF=ak&iq]oIE;<5D
+[mqRu=jMt)"34X@S`F%EoEOXNBkLqQG6XHg=7\P6Tdpp+k8Jh.eS9ZP\UHZGr(ibp
+5\kI#pI=Bc]Gcn25L)9CY07nFOlq1SaR[5CPhE+>E-3K:GOB>5SNb#8rOL&iNIIII
+)msV`]@a_+7c1j.LiLZ,%C4Q%mi*Kg;V=e![c`1o)biou??P*$c@kS5PJZ1*pQdj6
+VR=[tUgabKjB_4un_1^hq(EK:ZW2VCIOfm?,q!94[U[<`V_!/-b2#2cMVF_XDL,kO
+jaC1jgKAH*AH-p(ZTYYi)ACV<>f#p=:T*a>qh&J!28Qd"Yj3@&Id_D:g:KU/q774(
+G?hEIF)DcM581Kg44UVB5'N7+U[E#YebD>k8GkUqKhEKmR,llnqu9%WmdI[Ucee3<
+D#VOMm18dgXU#._ap+uU!D;jXXK]R'*ngecr3"0n0-%gf_VGXS`@r/10GaeP,bAsC
+^!JtFlur!;5$SSfn`AoM:IbI;>6O%7aJn>'YVN[6^tas)>RhUTY^HD,lNN@J!\P,e
+/e%Bk^tfE?"msnI!+=RNT\4*d#B5A#n9G75!;ENh>S*M5D"@JBk6rms>Rh2OYdX=E
+b7)_q"`V>hN\7u)Y7)!(%';YnnBh[6FUmZu`/s![nDFL$3o;X-&9+Z"AVCC$q!*m^
++mg'+i'>^?m-2;p30/=gBi<G1+VN#/Xc%(]Ji)QrIQOT5'G#HpEABC\^=q]3'e@TC
+Y#uFZ!>MeA(/\'FDHRZnB!2;`'*Gi^nR3*.N>H=Pr@oZ:Ob0q-#o=1,'sU=HOZ=:H
+`t^ok(9rW3",RjlV\S`](=?J.0r5`spD_MR(,<!.MgHH'^1`J8e7&P=UX!15H8gEc
+2/>7i6bk$X8d,3&J'*f(?um;]`l/OP*"EPsEN:4&!ud'LjcS=@ETSN6HC8O<*s+W?
+Ass'YC'=^C+2S451)C\mpEU@YjcW1YO]`t"9-'![,gmeoE[2de_S+AK-H3eGd@DCW
+I3bo)(K+*<Z!AAj*@8UF,XNb!l@-;WC6Pq!W58cQdE<E-fILsV'JP'%d\@LR1FfY)
+jg'^e16/A02JC!\+"!:'_It:6`We2<.Ll;<Ehr.91gCZq'b";!Odd.[cS#mb/+R+"
+,L!_/+!364J.gTSDHAGGW6LLk's.QfdWWn,)^4d1*g4J+"26#O$=+:8&o.^p1DLQm
+'eu_;`Nr&f1:K(2-SNo,+VF#kC83J8`[^RA.KV(]ZU5G5E@8&s2Y/(>1NbQph^fFH
+1?-$Io40<A%hnPY-kW(1d^q*Y@5SXh)3M<M%Haf*eJAmE(\,m#ENpM2[hWo34EGp4
+Z`t7.I5j"Y+<U~>
endstream
endobj
68 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F10 22 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
70 0 obj
<<
/Length 2790
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVgfP3#U$qB4W\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="5nM1[1muV,_o]RH7PpSEL/X5Y;H,LU7ADTY\7Z\=Mal_m
+E7RB$.M4$S6bMo?FYXk1L@^Pi'Q5q"$qBj-5,'llNWoRd[%bH#(l`FKdOYl(%k/+,
+Y]<^9eHc^,i=PQnJ@8a=R3A:,8:VU;KBOe[JHV3P1l(:Kg-]7)V_!D8FHDkp2b>A6
+kqj!gR+k[f#+"GYq@*j22&_>_,*A3=NC]mE.E0`/.L8MXm3.*!52m(k)/mO4SbA/E
+,nq%'V^$c*k%2BFHgn2p+!r*J7RbqVYi7hdUMi5GiM[(p5WT>V-pTC16*m;_KEH29
+15q<j%QC_HB](cWUM.e/%Y4VIj1-Wfh$,mE+AeMe!sn%^3K?Ys'X/`Ji"uUu!6-sV
+@mi:1N_LqZ$B9U0W9YS/bNO\mWC+1K1_153hnVNCVEBjUGi55Db(Hkm[]#[7LVG!j
+p(.GEU:C7`%M6)R2m@Ph('F^nj>)`?R(<h6T`TWD\B[I+kG]q7RP"aG2!-"'!f0r-
+WFLI<)EB#J`jLgni):j]Y.U#Raf(E<.("Q3F"0<dpr5<',Cnu7W6^>0a@n7m-Sip)
+Y[EC6P-"ZB_!k$?(CXd^.M*'L0L5BQ@rTP#%T'6Z3'l%LC,">l$l(iPd1*'86"*%8
+3mb]fg,+b@,WH?>(4-7@KsNRKYrGV92%P^W%5CRD0UsY+N6>a#'h#l!C+)u26sUWi
+TgWN3`pq-I1bFgq;QGKQ\5L"K:1S@"\N#Sc.?(]PSgW5A?pTrRomkgXhj!0&.KrWg
+G94fq#hpM]UL7=<7Y/?O.TfQ>)^#S7#fR9#UT<9b_)&`G2oF+Cjf2u.&:ul/E)]dZ
+`drqUTnrOIF.n:2]Q'*o")u^uNI_)*1;0HK/L,hWU3I9).32_U6^Mo-Jtd/0)Qm.M
+XI?o6;'%HDVP5&UKZCt]J.N$tjGUZ7<MC>1Ud:UgYlt/L#C*$&QuF#LJH/mCT^2AV
+(aC!b'XG5RaQF,f2UF`*N^F4<CL*Bjd3&jM\C3Omj%M`I5m'_o2MIn[l8N:S2LhC`
+Fr$X64l`4"V-SNTKJJ7lP&kl%f:'^bKcVLj"[N\tdPJ!m%c_rS6YDo,a\)Cq8g.=s
+<0lE-E&;]+q9g[fA=*X4Zj+lNNKE`1$5Cp1I\;3G,3I_f!fG'%:i4B#eX$!J49G`u
+'T#(r_@@#;$n$od3<^6@kDWLq#!g7h6Qf3r)K9hK6*Rg:7nsJMWOW3C[IufG`/m9\
+)-r/4%Dp2*7DYo^Cf&43.0f"3_7Gn0jg"J=f*k^ikVi`$E?']UarLSq'+N%Ij+cV?
+)[WO#LbT=I6_J3/epHdEWR3e_0]:&QH8/jP-(^X4/Ep;qB5!9Mc3.ehD*_l9#9_GP
+`6o@a+f%#8C<aXX#^HSaq)j`J!`@'\[L8nd$\HZe0*_L$V3JnWN:4-/&=I-\h>0Ba
+mh#n]A8$u*#^%Re>S%fBg'A]109d`XT?)1[,+/KjLk)?m\n:F>6,YgC-2#m-WD`*(
+`&r5,%S=o1k;&/-d[Ga6oq<\'MhsuCO[7ck]@E9GQ?d:M81b%D+Ejtf\dCr9Q=DW!
+W#3EE*tEtSJ>=#?)hY.3%SV*]5*k]N(R1nNcJaI+M,tZD3oWo9$4W\.ZFRknqM^:<
+T7p0n)k[<QJ!;BaRY_fu&HaXkK[pTcf@4ZZ6)4^8iYTP=.-i12!@4QLYVmiJ'`qc/
+#Z%ES,iTjS6%n2IdB9=C\tpmBqM(8h7&e!J!@MRhN);66m"X^\Yc(h:3A`pUU'7^L
+K%NC5i<Y*i+qE5G94%lhG&Jh[i9VgQZj%2BZ;/3_4J&n3<TP(C'3=&L=(:6*Ms7^k
+a>dCd)M1B$+W@Shdl&I^1ms/"5Wdo@f,D/<<KIQ>-Q5-XSTSpoMActZi7@.h)P9*+
+KS1g7?:=mO>Wg'",):r,f2Cj1N6iSL-:@E49gWGnUm?*=\Gp,8'^](X2/aVjZU1Fg
+GFtoa0VECU*%`[\XXpL3L9Ns\('F/2Cf5]%38>H#dgZfYE9+T@E!QMaD^fhc!MJ3"
+cl9lKUhC7&&F*5U<lOVs/ThRJ#COhF+t,-;$@]-I<AW5fl!810C!]k^@o>^\Jcmt7
+`5Ko&:$ej3!6g3&AI9EnlG"`9&OIik&.DRdHW*2sGMF(\"jgZf-irNeW/Q[5R=^o$
+eij5t-*U*0l%<nFj:GqT=.=8^JkOe#/;"AG7.PR`#,&1@.BM%D=ApkKRJp3!%1Gib
+K=!.?D`CLJ-CV;*L*?C`2M2F<q]1TjdRL;UOrZ!JFDJ6Jg3Ye+AC=#UfJWrrK0j1p
+.Vcf83K8?LO>kTHU.ne8+Zdu2*^*F1!N*!JDQd((AB`bYQFGE;19bS)pQRM+Y<64=
+@-9ZRYi1>Cc+9BE]%qA4#X5VR1TOb=VSt0N>O9cOPT"*7^qCfSgJ6_G3hc&__Fo!)
+4fl=#44g5KEOG^K(\qOuC)$Z"*6Ne)4f:O;Q@"oGF',AB*$'-miKH1ca81i?B3k-?
+6_=olM]4:#J@7dbj&]gmTGW9uRLN6C>m6YR0]c!KQ*eXqcDfJZ2`V9W:WP$%!M"on
+L6]p!0P1fP,CO3dC(?e@HrE;$9m'92c&.O'aI1e.Kf7j,60a71!:,uNTO)\*YU\?1
+n#SI=!M*#4kNH@706Q-dSke3'K08W_oAJTa!K];+5c6h`DKXOJ#^CYf,EnJ#-=5;U
+\j$210)/>=@6eN-~>
endstream
endobj
71 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
73 0 obj
<<
/Length 36164
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f-RqSBWC%EA6s%2\D#r_kE=UEtjlK;__t@BJ(4Cj/#'ffO?b7d`*LT
+E9(jMXpi>qGZ@cc<',_*@Y1;Hb9NOJBSM^jT&=ZL:_%[?0tcQi15\Og;*ii40u?eK
++p-hECh>^H"9pYJK\UH#Rfiq`H-FWR_-mi9i;nimTYZKqifUY\>U_:j#uErGIM3*D
+_;mJ`6r[DN&.M*/_2f?p2CY&2j:btJ5t]isp@-.pmN+,#$q8_:W5*F+)%JRpqcPbm
+Cb_F(L=$#qfp9G5"UCT1&6L@u$3V:WQI7,EJYBSY(cs=tb-_BS?r@lW.JV]<Y[L(9
+r2&BihD)8$+OE"TUC-uINT26=qmJ)F%Oqr[RR/G/l'R]t%7l"Sh@Aa9*[ZOAfXcis
+LhK&:V!1KPKVceBAFG8hY[iEglDsQY\gTlZL+Mje6AM@n1/O5^OnrCOU^mO$)C.qN
+&0Qu8KK'N0_e@shW2oe**%c_4DZ#HpT\MA_D`C!2%'.J13WoI#@Msl\ge%d)Wk,e.
+/<js`"0H!fEZ>;bF7pNVNanRj$nN(___iYGL+nQb=Md*`OY_IE;GFa&[>b9]kVrf5
+G[<IjUD,!OL!-:P;D=.k>kF#LGl0J4mn;4Jc/TAt(KR;EfFbr!j6"$AbbR60<M4#_
+JW;JSdLZG^_mC@,W1q3A,F$8]n:VKhF"@`mBW_mUdIKor,IHGONX$t$0Xq.^@&&3W
++em&VT])-"KK*(%W";Cr9P\]T!L=_`L@3E'&0pW2$E3#O!83+.LoN7njKA'iQfUJJ
+]1h:!XN?jm)$1J:j3SQ_O(=YfTq>r-^5n(`\lM=cB"AJ=G,+o"T9/=tr_]HQ3Bfg*
+kSSK(SS5UCOg+%P!Y;<t>/#K]C?Y*=[-AT"a.dHu\duDfq1dk7n,"I'TqV9aVNW-9
+/BIlNNSYis\.mtR.O4/'8f0g%K#fDgTgBbJ3!ftC_;mn:!ZOh'U1_au_3CX5h''RN
+WU=&QB=DV=QLCC<gX^-E48Y%ri+dUgM4s[83l/L\\"@T#G.r0Yhr7r!L[+)PA`MKh
+I#"VbqgM&ISt`sGC#Jh/+4'EO^L+p?L4=E6hl8m'iVN9j#OnsC5MsWPc"m#uYQas?
+0P^9QKEQaBJDWI:i<*<b1P-)Ck.rj.n%lV!.PF7"^;qSq)oNJE%r)T`f7sZ?N$s:>
+ICm!c)WAaL\KjR6K7bjoahb$AEiruu\^s#e*=3oL%R@0;f1tU9WAGs;c.A%2BFJ+=
+)ecK?.(8oM!W[%<HS!Yb+ZKWA>f6f)&RmK6[T3h<X3ZE<:,K]+d.?1kDg0U#)o_U<
+(o+_@MK.bX`c,hl,?Z*sdK-F>kKt8Zr,[cG@P>gD`?V/-Js$`>/;'<#"/N#bE"AO7
+7i<m&NpK2_/B1OG<br0j'GQceJ/CSNUsC,m:6IB(&[[s0eD'W$Pg[]S96UZd@=\N#
+UkmkkG]=4W$3Z-\=;X()AdBB5>:L,Mi4=Q$=kr3tM6*tS29!uQ85!/tCom'5l+G-8
+m,Nff+rNAu5]GA#2OP%a<&llu$UM/E3Y'!!JdM#E)Q_kha*Fm]G"4d[4#3KCWaO-*
+Lr;TAA=k/reH18)K]_(gFUb3uOIA*oB.X%!XYtl22[qhq*&O5Y7Zg)jC^X"W).W9\
+9i9UA%OBQb"r&,K:mMJ`-nPn),U(3u$06s&9<8:1kbZVF50KhpUh4_#S^f`@bc6@*
+V$J!)"!D2B8?$6WFR>4?Wae66*;uopOb2/md5l&SE,UoaZV.iW/EPB8E%m!P1?iW]
+*TXl6df9TT=o-VbOjXH0F?)">p:j-j9I+EQI*s4QeNpSa#).Ju=dhc?NZFQ^N<&<C
+etZqb7-\2OqT1%I_FIlt^hTP$10YQ9D-6b-ZW;\#g6SLPCtgfjJB/_ZpWi9T,pHa#
+K&kZuJSchJA@_ENgq+N(E#DdeX5k8OOI+n!kOen((P()Rj;:8PEp:*@MX4ZMNH3ZE
+c%>)ckh%u\odte2]Q`N0)p?Cmn+G\S,]\qJ=-C5b%AS3Y,5](^m=)7(gqjHF#nbpu
+K'G1,HaNe^4pBeYB2KYcY5YW]*%cd3/df3fU@=I=iG_M.dX@s>f%J7`LG90u]K#'_
+j(l%fNGA]Hpe(;`2C`K\C[oE3FnX10R/CuJ1<91<b.i6KAREt##.YNp_jBV=E_\mC
+G7"AulTG;ejdpi.9dJS)UNghA9?o?j/7:;uSJtf9b3s%fB1IrN1TWLYf:(#2QJZkL
+^3#!qRhNUhc(?c*J'+3Q4D%,1D.^-cT^u=kBtYG9&kjRa$r."A4AV\$0s--$s&D>/
+=b<<4Sq@qk:[*g;o1p-DZMNT<j(O:?0arQWR_fL"3&.FM<k-Tq]3K'_AE5T(^'>OR
+&F5RE[<"5if,7oJCQ28U=?9%,o]'4=qk0*qQHR_"h`>9qRLXBs7G\p2E,(raQ1r#b
+h0-\(^Ar=lFA(QLqmG>M1m=)HB*[A+NqaV_UdNOAn$WhkIq<iO8]qi<CE*,Bf:p7)
+D_Yb[S-pfb/8;n<MA*Z4;CnB,r4?H'/mXMVorcS-`jri;d/:A<ZC(h(3!1V*kY?cQ
+r`dM73YUTC0a[Ih\MZC>:Z%3eL3-0t.(T?rP[+cQ'^2D^f4GAHr3)p=hQPDlQS@O7
+Vc30C3mAobrZcOi/D`X0hkGT#SR(EFp+GIT:,;2*'RR#lGb<B+ge[#+gVn44p'c0N
+Ic$_ia(A*Xj/2HEj&G3Qp6ob4D+Ag<JCDm3cUm(MQ`&sE1XPpr46sReQLlgo6!n(S
+kl%sGoUH!Vqn?G&ICH;iKO-9<0Q32h#5k6fK9Na8LJ&Fqme!#apjG>5moYpkpq7L%
+FBdMMIY9-C]QKgcFm-FTm".Nq?d[k9j?rrIg]nD#)IUgD)?4(-pqN$ko)9Pc0AM[B
+n0="lTWdYUC&n;EMW3mOri14TciD(FErQ[rreug9aLH[Q0`MMqrbj@in)!Xa,c9eC
+"#)5.8rWafg8F>8MI\'2m[47CjGM0'rU;S::d"ahE9D0*"cdtg.%[=(Ka8(54ARa)
+OG*7FOIesWMlU4j%[-gq@#L,5!cW[bd&`/0Yj.=#r_B^(&3B,rJI1h[MlM%28@o9a
+Nri.rE9On87sKrrE9p20$4s0GOJrZXnttj0%Ij0!n5<kScOR,9M^,hEme40[R.Dk[
+$4mV-VN.O0f`\OHMieL@6D!WSNjb&l$P>.ROIm3McP(:^OA$([nO3J`:7b5o;i5J_
+O^/Ss7g#p4Z#NVRd%8o=d0$R9NTtEQLsW&^HHk`*mqaiuW7_>/JJa8k'2Vg&OPJ&o
+jRgWA#7j`OZ!eO?/K%Ep(%3^m7s+2/$QLS)T.qQ/aS-=&AK7q3p5$$!OiWQEYoV"H
+$0Rn?O6%F>XVHme+(c"E9iR][HQY&iNfZ<lJh\4ckm?g?ZZ/2P8G=:u$Q\^tq.hnj
+:RrNkGp:K0)K6,1ni[sh;^3eND)*7W&ksQhgn%,UqFGNNZ-*<6#:+<4#8+-E&&0.S
+;Z/#Ld4tkMkKoeu>pq$0NfmrE/O5I)r<T]R@F+$4Z?g(;KSjBUViQ0R17F(uId^k&
+.rqTkZCkXGBSQ!7-aLc@ZHX]$OJe0W@F.(:-63.cg@RuIh2):fP$j@!fdRJP/op&&
+&5t3%9eOk@,ql:no$m+;Kd]b+KbDKWL3kC`r@fl\"4J,<OBF1FX9TBm"]FXf!,47;
+nr[_7?LoYYP>(FaNAKdr2/3!ELsF`';`1Ua2KN>l88g<oV\1dnO`OA&W?epYClrdS
+3!gBRYY-l0*o:sj2im1Xo4F.ZBfL0#P>cN[Z`Q0mX#9L.1b'e4Oi]ZUV)cW-*HK7W
+Wf9+S#<,Qd3V1!IZT1+/%$D:BO`Ma/9uB"@.l=SqO`H(7PPmV(L>a7qcR7#5e-_+o
+%,P[D5a.e;oC5-YGrB>S5h%5KPP6s(IXL`a#]pS9PV"@a0gP@fo,r*4Zop[]5`0Y`
+23]%IZqWMZ;_3#'OAo"7Loj);9(*'<7s#J+F=fLpF%@!J85t(/e876cL2cGeCIYP5
+-7H-W*++AH,"j7g.k6<+QsrY),':=S1"N^g_XODM[%t^KiZ9R$P$r,O+Y-h.bdMH-
+_G$3R[c;ttCNW;ZCgpAm9Jj"MYE68OI[(;&]bLg`PmhO%k>(@X[IkA\-3Hc>0"Yj&
+fo!MP#;j420\=L:ji2i5[62.F#7HJ=T>Po&$g]g2*4>s.^M3u)bPVPZ@(V[[;K(>?
+kIS9jE5U4J`&1G;bNDm,,?32b#-1@F$pM&"4K%9l`0GYeMEEU.TiB:DapJ!MCgP,>
+#(-heK(YI0b_l\5R`!:-=\K%@&$j9!Y1LmX0P>l>Vp(h,]ZIRamAu:O:#*h4,e/Wo
+?YmTkQ/$j]4^]Y,>nsBdX:WV_r4rfm]8TA*26P.\[:3.=s6+:=O>MM<,m-im@r3./
+Q6+8Y(=28/@>kF=cpiT[9%iSsL<'C*a8ocd5@Y.?de4Ja0(3E90VIcSJX/p[ekp)g
+d0+S=fV_RJ#UHq#NA5BYe$^%60"`DETXL]S;JiNC8)XWL:sl_Z#n:.89?h/$RY4:$
+k@YpH#5m0_52=9jMlk48QFtfW1j`9,?I@,pB851lWcAH*\0o)ILJZP2cY_85D%5(0
+'1-q]%<4!'ZVAJYXe_[lr7c"]heU+\U;XLF%cC!!hH(]UG:MNP&LSd@a``d,9=j&_
+[,a/,i2`g59DI=Z13tQg(=!'#LUD7@2Vm_cj>Td'bF946I`3q2^o\Q![rTAFP/Pt&
+^Fo$>%!Ln02!dtKG0YAYNaf[6:@QE+`[I`c9Np]IQLU<727KO!2pZe/\B@Zim*(RU
+ln\5m^rEOKak+VV2h8f,V!JN0N;*,A\(o6r@`qj7I?,rK/?8->df,1,qR?IgloBS4
+omlHX5gLS$\,=\\Xb!F\n2L43XTsCDAF;"In-l8[QnHb<3oYBCK")<5nDXX(;X_k/
+K\/!HXZ(qCAFS-<g?>EA%9iB57u!!<K<26F(h!&37e%aigonrGcM*,)r71R'eWFsf
+D#3k.-MS&topDEIX[e7.QM+'#pI9tt:X%Wjc&8c_f=9P[OrI]FP57t\Nc0ftO0O[?
+PE$03N3?dZ1<TI=D"t,1qRGi;O3H'kYg[Oj9r.bWY=R[!1LHO3pC98A&+Zo"lK)sK
+P*0/LfaEn%?A6\*!&P,`cC"UXBp4VTODiC,n36VdRfJKQ""pJR08Bam$("E4nBa#Y
+.&R1^aT9[nkrEGE:_/ns!L?PGkcb9Pme:;GJH$+;R*G`$cMO$4qZK[C'enGHA_?N,
+CA<kZo5JW;0I`P(,4`9lj0)/];\9RY<q2TuRP-goq82^Ui:g'"s%s!n&?27?1?5q0
+S_<Z)O/3/$mgH>&$CV!e:UQo7r8fs8r(tE3MR<c;8HmI%rg)@90W<liH_FV5!?(P4
+ZTuKkB+Jru&8hLEYbe--#7:2t$kPu>H>fQ0@0NV6%^9FJE:9QA#,dnQ!VuBn&=[Yo
+.hHYuVsoD=3`cl3nF5.[&Whn[YmguCit8P3$P&@5n66HC=U$Q_&$[8p;(!@[^T13K
+r`QoGdIS%b'bJc6'&).Sd64ZFIiIqqNKPe)dLR-4pCqQ-(u"!=d;9tf1oHK)'iM,m
+O<jS*O!8RrY&SZkd8qN0X0QZ?)3:g9RjB9k/L,U3VXedEd_-@CG4]Ua1%@t)&*Y&Q
+5::G&-Q?hXHT*^B`<`[c-$)^9%1>RNK)Un5Zh#scgL0U"bq?@4\T>;%P`[!Y@A>C,
+7oB@GY*1"c.iboX*4-97gOfll2`2/i+*:\jOrZFLiug2K,?%s]1PG"^[6ZPa^&+'T
+EQ'qbiOr#C,RsbqZ_m7J3\/Wo2=C4RcGdJe'/$P4^X7BSLi4+6ff,%m0RKc^06JT)
+D]j-F)Y;E$'>MI!?Qm')/96k0Z:L$)D^]u^-8T!Z1_D2KghR&]O<rZ$W4=FZerSTr
+a"p@<o1K&F*+^Da1_QiHo+%i)#q5p;`ihjh7.3Cd]uiHX9Uq$]4IWf/r$'q(-bQtp
+Nojt3#qk@Sb3k&-BrN`_`9B1$b)$#=eO(lS.F(&L;!q9,\"PG6^/"+7pk8+\SAaZ^
+dEl.W&$k`OP,OSDWQb;6Wj;&(WiD-9+j[h@clD5sh%9))&5M[,fY';c,CiP[\^GkH
+dCh!SEHM!<a*\mLeTs%#eMAiCgK(V,eo)GW*CnX"F4(N)@E6IUddPfdDq$-l185gb
+nhUa%4AP@@f0,Na]Ti0(Qe$uuc>QV57.7MS6tA:[gMY7o4cZ1qnHHUo5(&/GaX,#_
+AMu$R+k%s`^"kP;;cN@9CgnaTE9q*hR^sO44M7dr;huW_Kesu*i-i`*%]eJ9V;,[(
+iI1[]h=hTF6Kt':iR=X]:sg/p"lF#Ui#S*A^%]ig_)<WEi"Nf^8?EnE6fgKN]MZf1
+F'=SEf)`Tb,&&@aZ_,m@V:^i-*?C8)]c5$iXjq?4k^:=b?'WhYa4QSUeoW"U'?`Nl
+X68*-nB!#f.4%1@RFtNfhfL"*/eZs()llo\"cgPd5$]S-a!`@4h[V^X/eaUi%+L+`
+bg^[_IT#S%/OG1>7aWZ3E#R[i>t3$FmrT1b&$,3o)=FQY6!(GEoKR2rUtu\.#W)d(
+FBNJkR7BRuljI64e2^re2R?@12\69bdr8WX#@JW#[MAU(X(tpR/+u1dp"q]9)c&rr
+jU&\E<8N_"[96"XCKa[UT_H:tWX&%:CXPFupYPWfrE8i+QK2C]qJUMkk+<qm$Ccqb
+@Ug!B7J09.cVBW%P;L)L]EjK]&j)Knr5d@c+3=6lX\Htf9f!)Km'_W*nNJeJA.2uQ
+63&bX#R7&D\:E3@)*jjIEPrt<Ad4JcYVCrc/oibbLBBLYjrSB"%3tB;8B>cr)NJ4r
+EO8tc3#oj@6YIIZB.f[6?uVKpaE'/,8L-YXKFWbKUJ_:.krbh-/WN>tFX]aW5nJk]
+`ZlW0^'@(Da/fuU*IM9U#1DlQkZ%iA1q6Frf!o"5@Pn]o7TN1,.f4IR6>Ml[9q&aR
+[9#(-)=0iE>eEboUHEEI/U3IbYLkqF2a*JHhQEV.S31Y4b0[<d6(YA8Y/]Vrd<U2i
+,qlZ,`g<eug@oA$E&[El*IMFoaQt?ZIR_@&W7L#6@pQJEK@Rp60S<]gduUKi%/7Dq
++.%n^)Y#U?==o"Yh1L]m?/GN1XiT4FFZ[3=?MH0G.oQGI:a>2N^$h_hlFi9hf(^c?
+-uAT"n/LL-W^3"h$oeY@%e;m0ZpPABDGmn^W==3[)oQPt>51";j5CM5mpp2C_Q)&8
+)l/%hBWihX]6teN;B!7f6'6f`g-m`TN>4\)b>9**OlD'EaO7r]%*4T2I3cn_"=37;
+%C;(hLC?h9_G*oq`Z**A1oW)NdR-.!WY,(o[>,A>Bg50#eD24ZF#;aM;"=I!4MG7!
+.6bn5=E,fe&g[c:;\DGUXf%'RntLmkZgtt4<;R`cd^2^h5Z,skEj>nJog9g%8l0S4
+b`.$@<)^W;CL3tT,H)TlJZPs)^32YXAP8<-5@%;*Kl:(qeE]s;<%8S*;VQ+.=\m`%
+28rA;!,-&@e*scj(fY78d8@plQtpWp(Tfnk?'UBEFB5L!qfO)!L%0_"2>h63=A"`&
+F>q=JK60)?H4u+`lW+$nh<Jk[MIUf-3HdT*!_%2g&-b4[1&.l#MhV]3=+]DTIMfu>
+Oq#^W/+=l7SAL;@9:]W[L..eH:50T&[a1fnY3/H"P/QO/_NC&<MAE77C@`d6Z<-m5
+IBR:Q"$NSq;^@R'D#-nt*Q^9^JW^3sQ4^Z?:/mF^i(H0]Z>Y't+XH,M>a(@WiJpXD
+@U$GD$?:EAg)0,LiY`)1r1mtsE?!It\o:kl01\VP<\>8(>dgWLCAgnMO@TdRSWYZ\
+k#L(=h'YpJErA1Ds%!MC@G&WJL+!pa?)G6^C-G8)-SD\,HlM5=",Z795,Nhhq49gY
+h"UY.c5AfS]k?gl+!5RqD!A-km!9alRB?D$A??t&;=AT'C$A.Hh#(MXi`aZZq]I31
+;4_9AJB2`9*J?EOT/7%,D7&)NG2WI-HO)DUEWd)3mdVC+$\31ff=3V1o+ud#6]ba.
+^k6HcfVB0f,Zp!,!2L4bZciWh\cMt$Wt$<#&.3@kkV'k4o,%<n6]dl&6&1.-+Z'gX
+NeInS`\/%Qj@=NY.OW+.LBN[*3%Q`te4'WFF-,H_Hr4>t7TcDgM@t\TMkI8PFt"D^
+Zt+mZRP[H(b88j#kDmZq31FI7*FpBZO=[@Ga*AC=hYL5$$(;sV',)XO<'a-^<UqG6
+a@B>H4H=9L,0+s@+lrQSIPPq(^I5CKgE`nbdFM(8.4ZtpS,l6\q*;t6I%XuN]p80Q
+Vof;60]_N]9!\-tV,N0[(d[,IdK3fJq/nB$RO=P&?:i3D^("NH$'PA;0=W]M(tX/s
+NcRC%an_C]k(<D$Z+YT;#j/nbUj&@!Nce*b5<.D6pEiR!r_O@Z5j,M:SFO=HcWU5U
++oHP+.ftL*8:\7sigs\9Gd"+3$RJog#%1C3K?#ot7\-e#UEu%$:g-i@WAOgQdLqV1
+C,k,dZaP0Q/t>fRI7i_2/Yj^?R[`#b,O)e6RqD<M</E7sWa)#[%b[c1&9?IUV&O(>
+lCT$LHR`d*oKc,6JtFos5u&_+Ubsd*<;HPs+k\TFD;McaB$".iSS,+tDIcg+Ma3.7
+IA""I\Jg@E7B7_WXjd9d:$?c<h6i39V[T@R#"X7bZL>*M!HZoOF'Pd]+g:LQRo&[^
+AS?3Z7^?LI\eGWZ(o=?Ap1DNO4(h%=D4(VD-)J4hF&PgO*^qf:iK?ic^leR7@eT/i
+gA6M>C(n:jkbaSIZLr=B2:Ytj^7O,K<HeHI`HfQ(+/5*uGcnlD[9$g3ThE,>m<QL[
+QX9BlqkC]?28f\3VY24#k`"ul`ZXKAVr,,XI'8O5]hPs81?K`#mq[-`fDaC[)r5,p
+L(u[m?=Y5&`XF2#*4lZD"ka859[QRrS/-#V1c?J?O\5)]fQuRe]HBT34iYLob4(%R
+3kl]D*ORDi(qLDhMHIS]"q1GJfo0!r05I]2XQ>U.<*IGMTnd*F,:*mX;jQlf]g]Di
+[H0)PLJ(U6b)J>/g]j76F(7GZ3EV4$<X"^uHfmi'D>WLdlZ"^u6I#>UY9Mc\T_&$h
+I!LSFBUc&po1"1aBcRtuI3]5*-@7<>]'nmS!N,!KQ'lSi9sBUGV":aKdeWc>l++&Y
+XF`%R3kW5eRDjOSMh</+D\ujtl]u\%PgR)F;7>:RXmp;A`YdH:j=QXn2<L.Se%gTJ
+/OBp=<KYloRjm^Zl\W"0inM_K4!NM"Y;H3kds:8$A_jVOE[E;GnWO83IH?1sNU:HW
+O!O'c<rFtXA5QBBEmmMH)(^6mh[R"J>"P'tk+8s<ddMKQ:($=@HA$UG;+5Jqkp0k/
+Q?eX3O>tu=U9A&P:m\MJ2:d7)OJ=;e4Mdk/eC?q>*qTY95)jOa'!8]2eR1u6FE+-5
+cq>YDkWJQ<o'+QE'*A21.MnbR:&pY@#=i3Lcl,aPbL<D9/)gkeiH6"!`fFa94e)N0
+,#5Lm*U8+>nF*l1[)jXUN$[QjZ\tN;@!p8^oJiE@Eq`<D%XVPmnAcZ\GAdSu]Cu:d
+9qI4\Sm1*_Dh45Tj(fUo<P:NJaLrX>kHPOEl$<Y&flNM0E)TW8r=Q#io9XP3rYt4Y
+?P)n68q<)ucEFpmkP*cLe8l.),KZ2]b^7e[)sg_G$5WMLMYhh,78-Fhl*e=`:o89j
+T@QtiV_&EMSjW'MRJm4\\6i;'quXN'fDTA4X9hgT+1+Pom7\e,6i7S2lgP43Bg.IK
+X"3*8UWl#f!gl@M-?JuIqGaJqnj##3^k9V@@"J`<keJXQ(3l47r!fF>!^O#U5Z1i%
+KEs2u7tI0#38u'5LkRlTJr$q*MX\97n2US!#(j>r"*>([.S[_3o=gm2%p?NGk^kEK
+l3UE7_;gO]OGeo3JV_[,(jM=<+I^(?[mI<[P9>R9K6rG7L'T38#[!S3pk]9P-NO>u
+#hZ296Ks=m+$Rc.Ma5>"bPhgD.B>_)#l4OY"7D2kK0EtV_uUdoHo[%YQTn_5$*irX
+@([Ae_SgE"$h4Eh(qDhX649;KMV,OtH$,(M^C\fG2I&cZGm51';N+"7N@<Sq0ZoF/
+"sD!A$m\[^`(i`@><9jS%[$l&0\-aQ7@qTR4TOW)\Pu".7LqcN$7PDUq!pNQg^RZ<
+UGQA=M";52lB*&VWA++*>]#R5Ae,!h7gS/gP,P)<pCP.1OAiRtd.e/t&]]/&`k'>;
+R/r7=.?OISOi2C(9=0btZcAHm,EW@s5u\G`q@$L<&]Aud=V8Wp-P?8HP$&uf,`.Un
+K=_.'4)k?n&jMK$WtAjA&htRDWAB]6U_=/oa[,]bR6_En/.g9WP['?65rt24RhNGM
+PYjr2a[/SX2Nq8jP//+O[$f"7.RhHB-_WAbGuQjK8]h?-P;tlA3@R3J?c7<5\_0N<
+q$'H:7$@XCQ)p#]nR[sl;2ktKQ*E65`30qU[hb@ZQB?f[a_/ej;O+5"Po43M'YYA7
+CTH]YbGf%ad;Vag[EGkVPpoh$q,j!)f9X6D%=)fL=a?"&_\V=O(,:(M1[c/8LRB@`
+3I-4A*6OT&bEg)r(pUN:nH)DkYT#P=)ZcSU&XXF"@2WdZ4c9LUU.qnWhO#aK9oRbm
+/!`pZZV=kj+/=7RiI[IPVp5%:(i87Ml%^S$R^kGXRF/SaTtATYV3pM0:5%^KJYa>+
+;k1[o)N=)'Z%AFWmi&c^)tAA6Z.9lAYT,LmS'e&OV"5RWLE-]4OJ.TZ'*fHgSK'Ae
+cqO<XF(65YVB7OX*')jpd>8\8`_\C[:]\WZZkJt'iL^/]:m$r<+d#VNmN-K]Uta?@
+C##Crohc=7+12DOl-GoGqAk_/T)miAeJFe!%T.k?SGD'9g$GBZgn#,^dG`lj[3d#U
+'V\`d+'KAMZ3/ND-dga$*VCp[8b!c<rLumU+iPqZ3T;*2]8fT?d7NpLRJRu/q\OZ7
+2%egi&VM55/XukH2n>(o9J7M<%T@d<&cqT&NA_oB67rlZ_"o)mH7IDFr$,AU,N7fb
+<"krl3ZonIUfBmZ.Meb\6m.Xu*g.S>\[0g49HiLl,:Z=8g,YsW;l&+m-&Mc$D,VbF
+T90IY,:ub:JlS1i.ggkEUA:_;Q!5OA18X8@<WX;:12*B@0q0Is<[)/,SR5?j2l9bD
+VKte+7;*q5CEP*LSoR)o,!mY<6<;fUUFJ3q7;NoW0Vc1-,oVXcW_1l(INtj`f1LEl
+HB/np@OZn/=,Kf*Z;[NhHe9?YWWG/Zl'3QGMqA&[f:@b"ol6tt'9>J^fZf0teVGL<
+O!r^H_a&dHW^'[$UlPoRXn@pMPGBY]3iaGm.m8Y;?(*7^GH2o^Va@@.qSFNnR&=Mb
+UT1Ys9V*c/JLm8$XI<SNnp[OnT;^IK-bLY%bCV/MRT`^iV#%j')S`?-n/\fGW04!9
+nk:IB_5T/..-ceZ6Aqn-akM6P-i2u(&sXiMPo"kUgM30]g5Wi:>:qCaYJQVYg5t(+
+T\K.X/`M8``"T/^lR47SWT)uD29I@Wp:ZI+YUYU9\uRNrXPAtjg`=MlJt"I*W%asF
+YbfZ!R^CmfaKK?^0VYd+b.=k&eQn&oh!NoW8`qUV)lUpu/HYY%[GIuBiskD/Vu%45
+q^sVOc/*Ke?6YKeXm.Te"^Z6l1RmX1h<h>F)lsM7h[("!'C[b5#2_7&X]%6cP0L?g
+Pn585XaTT=NU3f*k:VBS5rkdK,3(IjpbWp@?L'8I2>01mrX1d0Zh"4(n[%.C!&WO<
+?g@-g;[0Ws"#g#>ZhiRdh?PiG>V@m60PdetC^LXk7[tCq[PITc)[&"gqr)kg@1r(;
+ZQD'afX=-,2NA1_6*Cl9mk=4PY\Rf&94_PL?");0@:9qR]?cUSem`b.[AG(KAg/t!
+9s'=l/Al$M`Z)-_,;<nO1A2frX"HP,gL4jAio:2+?6h6U0gFm\[duXl1OS'N3o8Uh
+??RC!$Y!F`>[tAsWY64!'2i&s19YJ-1Ff6^!f>kj-,@,9,caS/qf*\K5p']$-+dV,
+H0HD2%Q>+"1[OM8WNNWPf<`+(QucMD;,</*1_kom'rrRIH[M61:s4blR/:>-X$($p
+3gMQ](,II5DGeQo@P!(;_)W[Mk"!N,.EE/qP]JeuF"9fI;ou(L8/>e!RlZNsN2IG0
+Z;D#c<bn:JBtIRn4S\b`GmlN9Dm[$J7cSGXG&M#o/<I_R#]m31o@]cm>"U3b17ibO
+BVZ_SNG(+?7J;'=UY*\NosmPE(dUSh98sFnJ7pic`j+\dFDGQILPuUsBZnh;];1CW
+P7>-sNOC8qlbtha7HlmuBnT6l/sVd^6>9nL`<2kC`efXlM<S753N1gn1R'oFU194R
+3=rqb\K=!2Ep@_5$hK_oCSg<bUq2B&-Mso/6kbDLLYdBi6\3(bN'O9hi_>W0lU-TE
+Au:JQGWV;"2tgddX1LQ*IqqE%&"<X1f"J`/2S,9cki9UqZdLs,Q0=UnCdtK3I`8fI
+cbGC&CkO"BJ:m2UdVN]M-k&0sd$]_pQL)f;M#3W"6p!Cud_IYuChq9F8P]YNcg:!(
+BtcK^NO$8t$R+BY<ce)d>PZb>mtbb(m.FbV"dM@]rBC:6MNUYMEB?@C0#)c,[EIiQ
+PQ\ki"GskWmOjlE;uLUq&4'hCCp=gCOGjp])aVC_5OaEB(?n!GW_Z;&68Sh[CR&gC
+(_PI>6W>K@g&aXEb!M<lN:\_fZn9/s6AS\FTEpEnck&O&72X[>6n"Nk_*)Ss!/UXU
+_oE4)koI\*]H[]j$Rik[">Ol&/]:-n$o.h$BU?]s]tJMc:TkB<A2-Ku)a56W`8H@X
+i3Ge5c=o8TEIcET58fAd,,W00N^72EN+idT/k$>j`O@9+glFpm5"4]6%VXE)e6%mp
+<c\2&N@=F4&E+1>it#[1Eo?)?QS+;\O@I%fO*#`h<-sT1nE9T*4?2@_>Xh4?:IeOs
+7pLK6Yl#(N"HbNdP<TV?40jqFH]2;ta8$WqR/07op(@,k&D9PdjFbOO8''?roa(Ti
+>\hE5Y*%[!PCYNL%o3ql9Q^(Mk/buC\KAc[,PAF48iK_kba!>8*_AjIat0+s&M+N>
+/.uY@8g,m3>aGmK74?P?\ktl+kp:L=3L&E;&cA\@m%3>72W_\g9'iO$))da"Q:e`h
+P=^*88SehDW63cAQ-?HK%)<]Z\sID@Q]H=5q)4O?GEu;UbF+_4Ut*Z.=*N&D'e*Q-
+Q[?o<M/`sA(nAM[<6CQtC3W.cpb?4q1e3IlWD&_N&7j!YWFL3&TZpoF:%>&TJ[C]Q
+X8*WsH&V#."P0:'[(.??S&p]dFPHVbKUZE5:#tZ/?Mf%"ms3T7):>a8[,fQ?d$ZV<
+cM<G>;4,[GlK'Ce)SH->V#hR5W>m@=SFl<t@DEgb%RE3Ud/gQ"H(K?[pNn?jd%ps-
+WNVrU"8bBt*IS5;Dn]c,#+gE@ckIT?_<Mt:i>MI)qd7;g9a;cN\=YLiTR@1E]a]@g
+[o*qFT<`%TrAu.\`Vc-q+9Ba8_1keb0;35BTl87TiLD%tSp]?5,?`Ziq9'fYePfHZ
+rQ-0)j6ojed*ai0rX[a_'M`Pnf2R_le\*CYC$[0\g)_'i,.[-kSNNYBku.fi<#o%=
+,t69T7NKh:dp>b>MDq0U2kNu&T#*/\?";8S2kQfImNN\tO7WBkq,K"$-7qU:<B_\,
+)MeBDfF8`-`^0^1i+W7E%)rj0^s3cR)%L*f-lc,:$&-1=d+CH+C`kXR@T"VAc;$>;
+b%*3*8B)enL<Q>Hf^q'<#olM[ZJ"<9J2eLjATN\26BMG<aQG6\**Pu=OhtSTOe#Hk
+4fhKD[>E]P;dlg2A+`AXjr[M>d72]d9t51EL=WH6#_h&H;2/6@[[EDdHZ,<Q0R!lC
+b3<T?8ntko1c@6PK@Io&qg9G@QbZ44nGH"Y5n1:5E4HRXEo.8J9ntN!::`._eS1j?
+4ZjN.Ra_d(dbM3_F%_BoFrTaBcVp2No!Ykt58N-$b=T`2mAF0F_W0so[[K]VX[UE.
+a#3gnS$As[7/C.QG71\'o2N/_!R<61pq,g.03S__^!@Vnqh,![@(!G"*"^N*/:7$g
+4jPq\qS9=_%N$lOU5K.5+f%1&^!MDer'E*\7d.c=P:W<A%Wkqm2iUKu#6p9#7*Wa]
+4/.X!%:TS]U%.t,+[[u;1E"+D9AL?"nh^pC81Bdu,0GIgQRE%JFF>aSdd*P1U$7^]
+.1#JM?l(,n6ch/Z:s+kKb&GPjrLiXI()kKWK'jQ"mp*7c87@.tZd2H-@h$1dODdP.
+Zs[AK;"-mM/(1c"T1C`C$5Z1O@BDU],9a048P\o:Mc7Z\jUiV"F')o(#.9)K:f.\H
+8R'U76[;%"&sN%o"uHL;/Cot96X%tq%>.&CYM;/U]bZ;6@SmmuY9MThIA8iXZ#F28
+g_9(MCJhPuV'j6uPSF):f49d]>V[nO,2+t%&@t]i!-:*!@C1f/c0-//G<knVrup5)
+aDEC2/%us8,'X;<;;PC&$%PbBC3tWo@>ecMifn:cLuaqnpM#B2gXhVn)/]N/XSI"2
+Q,>U\gP.c6L2>E"F8R\_^)-ciN2L*r()pr^Jkd9E%d&D@cFQmcUge'B)lr8.G,Q?G
+(nR2%k$b(CY>JJ(bF;n.1(YBnR*'uh@VViWQL9W4CnOgRRWl.s)p/c(VpW6CQEA]_
+)8jI&[ctd":C]1lD=P@NjWQ$?Di(]:hBo^QQtIA2LANV[J+RIXrO)3d_h!d<Hbq\d
+@>NQKUp,9N43Uit^6NlDr59VZmE]-m^#FI;n_<(9^&"BP4<!+_L2!MRjD]PtQ`TT2
+$>bToIM]]NTcT^Wn9MaZ6Aj]7,oc)S^M89:3uBWX)-Pq5dqOR$3+V-#A0;a72t6kj
+'AYijZ2Q62DGJ$1Y^p`os$+R-qI#g)I%\`i^t5ao$3KgA:]6Qmp_`L.l$!@$Fo;u]
+dRIXJ*]4KlL:VT3<E>=L6ibcCYkP=2+R:2!OELdp8/tj%"5eor$5u/XHMM#BrdBM0
+(kX5Q%H3K[EcFs^VoXf`'BDnV"E#j*ODu%7X%nR#U&#TcZrGbc!&!3fbQ@rU*$XGB
+N">bB-s,(Bip\oSa_i%f#dUM,&O8fR0nRG8!9E24FWt5OK7d+o,NOY@NTA5R7ekuH
+80iXYnjtmai`da?I$g)EoSH/-!u.ROP:CT>:R_(k-Y09[#)#AU8KsHo,a$69L/LOa
+R=Ib;KXmC;5$uB&>9)a@^*.Mg)9[l10P3*rPHC!Z\2"dM9cT"Xk1WnZdrGp))W-PG
+Pd*nR7lk7p`^MY+*_V[*2Q)GiN>'0S1"eWL,C)^^kH(p?q0+kGh!:#!g`&i\aYp(k
+l^W$h(rt'N\*/d_L.cqhbBbf^*E<-&ZG)1:fn`(JXAk>SO;lOR-V@osrhG393.TX#
+5FTdd+Q14DLEO_A6F\-IdWR@f3_`-jqu<%JXq!EHiCRcY,H.m[o?pdR-YYo)WGQ1)
+RqCr3lI19a,X&`^\ktQ1H=I'Ya>;9l.4GQRns%+Z[nL;Z!+`o"+E.Oh=))9Y-kZ[j
+.>SO9C=,_O_Z3:oaI$(=).Ep+=Ku[38QRt(H0freP/n>pOgq,]LiJfgA.HnHKgfE$
+Bh5K3T#XoZ$HpdE1UCmUI9PW+%]ok&L*SP$YgZB[D&'[GCc5$"B@>PU1]0.T('7]u
+D$n'qXs>q]k?94OF)?"!9r+cdgO]k7%`QM#B(FncRm@$^YrO+*h$oOFBPHp6j"tsh
+mTlb#I'0lZF,d^Q4Yj&5/H_DXf,`X0]<ptoGVd#K[6Hi:Y+aTikV$J#kMP%gEUUFf
+[hr+!Qa3W(#q:4Bf=mE^1?jGK*SnOb%btN6s*9ui9"9iQ!87iiGVKSD`,5r%@[oA=
+b0Cqu7:jeNf"C<#`\Y]3f](pBOYr&2R$RGcm:?)[P]1e5Bgj6fj@j-GX_][^fQIq<
+)rI#d<[5bQiSc&pVj"9OD(o_f0G1c+F(8s?b&3t1'<l2BEttg>Xl\-l@RAr="N>:)
+d'i*f^see`Mp;&Q`8Vat9,nEOdZ*DWk[eV)8[b,!\c4u6*":fP[Kb"ONd8*sbCQ/6
+R3uk[6L+@<m7bD3_ku,,?N"jhXi@>EqXqbkZGbU%_mLcVgKV/A_(;*fm+6K@\84fX
+Zrj0e3pjBRfgcpS2Uc]R)_m09rK":n4i+Gl1EYBG)77K@?Fd[kj6_%.]Lo5(.HlW.
+/G(dR<hB3E)mQj5NR,5-WIs#Rhd`QdjP*@8$ZUmXIrKE7^,V7Af!HL=2<ES.37/E"
+Nr4k*k:ao"57ld%>s^DP1DZGM1Zam3M=4ahgj,AnjTKH#Pr2CiN`S;mI"]?-""mfh
+(FeIE>t6d:D/8_L)<lmnT5s@>e=*Ji2pF3f.i,.2qU\=`I6Xp!BHP^8'9G/t@XT3T
+X.q_"CKc.1VN=Gfgj6_>koC?s_kt(Uqq#ZP?+[;JNo/PO5oZT[&U4kNF5gnZ^??m!
+FLCQ\h@RG\UEIXI9N!\/#`"<o*]85)PTAt%&ZE?qEP]E<AjlSp#ru=5`HoipkD4e]
+,)%,gQ4fMg]gnP<I_;$F%ouWFO[E4]aG:nPOA5[^@5]18]mFdbj\(qSYm'=A(cg5;
+$J2m<Is^8P?aQA1nW!-h(q]`e'"$Q$&H/5&b+".j6]C833J]cfcTaA^^JElVl`)`o
+ju>b@]42*m0CJLc-N=V;.I[\16J,p[N&`(erh=00U'`d(Cj^ikQH+seJqQ,1,VA&A
+!ROAP&/mb:SpB>P>&[Nrik#=;_$2**4:hEZK%MoT(,+\(01-dDE'4BaIP!#Z0B=&N
+A7@jK$nX/T1pD9X0Us`XQ?NHCUE_c+KA9:5EsY[;/hiV"Y`(%#XPmYm6R0<6n?>86
+ZqIXQ8W^f&"+ilc!)I*\9&lF<E:"(0/i][UE+B%]K/QSe;DW:S4iFN6OQ-j?9+Rjc
+7`@Cm"8*3OV[mbM2MCe8@o?8[W`B7e<WkW!d3)@"!)X'Z2'lX1a"h2dFAW.2';QsV
+6T5Z4oN4P48S-1=V6^n*)\nK97&=)u7ILb`l8*"f&k/NSKo/90Wt.ZPE+GVq_tII_
+q\YH5;6c!U$`:"u5UJnC2ML4j0q)Ou^/SXk<X$/VL+35$$Q77<_'V-A0mHZ/:/g9p
+;s".Sn_/enVG_)b<,ht?Yl[kbpE!mj8`]ScATJ:A7e]?5pget&ARuuQ1AZ"`+_=,Y
+"_qfV5%s%B+lo5.ndcr*MVb1?hQehPV3L(0So,iZ`sqB+-Os<rC=WN>E2BrfjIU7C
+T-dHFc/h.6j`#2#E@.EP-;$&Fk42I6@Sd;=9.+%P`r]7Np2aeqf7oN%#;C2BSLGp@
+-d8qT&un2D'.X99HtFKJbZ83u0eES<BhrPT8"As%hScC*7e5&@ZHd#T+E;3?2_8.D
+VAUsV%S$$7U8OY0lWejM75%RJHtO4GL/`_Y>(;9208?45LqI[2<hZDcK-k?&$d0P;
+fO\YeIO9:hY;gV0!,IALCPWhmdkY3m0J1a_:+%69#1#2JqMGJVM?aQs7dW''7#*PW
+MPZ(\N3%e're^n&ZU\E17X0dpG_h4eGD^?c':O:64FbO:EGICNF/!=qcAL)RLEh%i
+X$hj:[!V$90k[kO86Cm.R']Y*HUUbjMk5/;6P8q@Mhk(k1U;poQ@930IIdeR$1:1e
+rp;*<NQ8c@#I:`C*C!(7O6R4.%T8:E)MKTLGa'D!oI!#i\Eq90N9E0X1X(CV*CD7q
+Ko$4p8@UT,@,GX"[1hbcaK@"g]S2Sk7HOV?.iV"B\OOZGMWsE3oNIX0^5\!IPio?B
+[$l=+-V=YHU?Pp2PcBORNAKeNUk<!2EP@c=U6[1*M<Ttb`iVo`LpG.BZH%SjVh7T1
+R8!b4O/Yhno[K0Q'Tf<M/r8_S<:lEs`f`!`R&U(LWT9]dg-Y$lSjf8KMYa*U#>rTA
+:mEH%'aC">lVfYQ;/'01WO5[I0i,1]Od.>_alJm>T(K"#;O%Dc'c0lKqOu"51\F/$
+okNs;]U'tHS2GIEC)3VF!1^4UdY^Y`BqFe1c6\@+;9A+k.2&RZ*EZmMTJ_P&M!%lS
+R9+&3VCH4[@Uu@`[&5BsVlG3>$At.kaJbmS.#NpY8hT0<67,+AXQn5_8E*!Oj%%96
+O5i^4Ps2A9pmm<3T.9a>[H=\NlEH1C50Fg/.i,BGhQ9fSZDb<@`[P8(EjpcAcn4cK
+b<]XTBjoL0[7a?!$Wbo\?Ls+:[aS'`[T^B<6Et<TlUpVXLEO5V<mWL'poACIN=fb1
+P^P(>AOTWG;U.R$i4quO!2m]E[XVr1da8S$B<08bCb3K*!lENUG)O1NX@E7+SS7?E
+^;lbTlhrCCoe(Eu0rtUs[[;7)R)J>N\Z?Wk<pIO17r8XF_RB8VbRh[-LrQN+DPoV:
+QL`!McGo44a,F2DX.%$:KHqp0E3d!o="L]eEH$Lnb:LfBN3(?AMK@$C`XK+lf1a9l
+%`u#LapgDFLU9UrATVaG_fnYhD2QN[o$!(U/Z/0MpL)3T0m5,4GZKdNNA/K`jL_MY
+b85AHm9b/%!lHTT[Oj>g9a8GcR*?&sH*#nG9+oh#5&Mn-dd;;+\$4Jd3mu86c)l`R
+%6i^n^st$SHq+7g%:=SHg;f2OgELJ\a(p1JO+(ltIFnfW`r0t2RVf1TDl^J)%L%A7
+VUhm/euUX`7kWBf%b5F-_:Tg_D3!OKO*+1BC[H$&%<UF.Tn)o!hRH[)YqFo>"tFKf
+kO'\`9q?tiVVo^lkV5V$c?O;G*2q.1,AoZ!mQ<98Mhs*'j"/*&DUp7S3:(mH,q_cH
+XsRkcXQ[f]ibjA*Y(Af]Uc''ZN+T<\e+W6C#3X;-M(Ts1%QrsB_WZjekpYcY6=0:n
+6>Ff:NNPD,%Nsp>QF=nmk<d$TDS&ndR.$'SO^]IJPH=EeF=U+Z.o(CA,BJrl0I:XR
+ngYF<:UKGKZmg'Tp!3[`q+UOX;"TI5nW2>oq*OpqS1[r6/lMoCO3$o;(A8:2nJP[!
+mgSNC%&!&aS.?/lcPARfnFJ<]oD+at#F>%m'In$HJPS0d`+PMln2ORY!i""RYWnRd
+*qs.cq>%2dK<:UFXQn-d"clP8n(9>_Q(3n;57a>M%a=lNX<UQSr:$<T,R!^K9)1hI
+QuLXUE3fQ*;#r]Ts*>OP!tP`8lMs>6!g'Sag(g6a_!r<P!O2q4"Q9DMLas)^.g3$U
+RO&!>*:5,5&+G6HRR5tZ7h7Xk5n;/9PO'p,7PW:XV9p\6YoO"Z<<gir#8,lNOpEQ@
+E<en`5B("-Yt55-X>!Lj+f2t4)P[:dKr[7n0?*!Tn>s0QQPi."(W/TT3f[(?c)_E'
+3>(%&AfVLR!sdrLY&Vf5p(0onc`C!DMpV0PZYDBQY7II)5G]J_`ABb>O>`Qd%n066
+E;^l2dg`o76c93=3tbK>&kR`!Z>iM1Z$Q*u@.Uu^ZEV6.d/#/$PjN!tk$(,X0ep%S
+_J9>/^W*uDD1`Vdo+FrB[E"TJc$hG&E>Wnq4j>(X/ET;=FVjq27D"BrB/!.[]JVI4
+\F-J@19DFqS59W[9%Pak)nih']MR#$`S7\E<"MU?h&V[(:TP[8$m81uc:]qZ8b11W
+S(q(Wh'7]p<td&_HfZBYgE0?),?Do08,uF5peO!M/+X6VV/9pWJpoIaIO,"M47d1*
+%5ICB_K&%p"LBrHAMg\11K%5jnXDArZSlAZ2`s36AT>Y/M)=d_`F\9lr+q$AT>r6J
+2"IB\[T5pD#A)?9[Y07=;L#QH@lA<u./Nph$Ts/6<@Y>=/M!YKL)O]VD6bq_4U'lf
+-A/t"V(F*9LYTFMLS;m\n@A,e59-h+'*1,UK":%kDH"Pf;s%X*$-gK#b>P'IZ1;BT
+Aoc'5Be(*9PP`ZVJMP=&1C4L17Z<:]Tel!KF[iu1#2kDo<C\D+7j`JB`d"bp"Pmi-
+FOW9o-3;SO\^TA6CL'bM1ic\,XL3d"NDmS]*D].GD:QLpCWQd,#clQ(6nQd*Fkp/I
+<\e/5^h\bUCRp5<kgXG4_+#j4GUk=Z1qIk]/NbGeGKQYCI4Nu@YM,38P"1=ma0N#"
+S<O9$Xln)'1d\K2a?C9r9[j*u^"AW-(GN5F1c,i4`INJemm`/76-5(;WMYB?c@Z#\
+7=Fr!$,1u4L#D3MI>KH=e4>k3cD`Z#/r0FpIN.:&DOAp_Q)B5'kCT(!U<GebI?^=[
+*_(MU8pgP5k'g\ekY@En1Zo)Sju"'8b"SDJVO\!'NJ^*G1p3NO(8H9"d>IfoM<'"5
+8GYN=QP?Bi8,T45j\-+4kc,B^MF)l#UlK3]9o7t+hTU?36fS*A*9ge4[-j-_cD$0'
+mRgfJ5003clW))#>)=H"M27?:s6`(tR2u$[M/Vn+!Uqm'Q0D2C.9BZ;5cD?=:oGK+
+[<@RQO]=9QRYjc,G_]F%OHGERQcb$RIm*D+KUQ"X,PAW>Io0H#E$@nrVi#kjs!F48
+CL/:J?@l^lFmhb"-UjY\?it[]kp9]ZpbETkj+;<Ts*J0I::HsGA8=^3[P!X@NFN8)
+Y5br!ei1a0F3),7Y%n]qp(u%U9DWGKAP7kkX,ghm_.1XNAtS:n9\X<?@qUd&B8dl1
++@%%R^hCr$1(XnL:hUOU%1!i-+@^#a&e6^QRpp?hZpHP`Kg<XSpd![q1PETa;Fk&a
+&3,\<U=/#)b\SD\7>EU#X=S!ER>ka_B_;L<6_7.eE;5A#Bg<UH"qt`^et5fnN@L.G
+%/=I#SkQ2l)[,LH0H/@DOa%_o)ekJi+QH#fcES+Se`kVb`Q##k[FHn9ENG=qA?Ol?
+[ejpecZ-s..9Gc1U2r8H>]0$n]fo^0_;&hXr<9q:A=*h+QOL;8i<pT?.(\_^G;X'f
+AFgH/(uCuF)UKhkH:Im,_Lmh;P$NPZA"(p=At#+b^i.?P8N8Qnr%)d?_f<0@T'#d0
+`U[\gP9I>(K0JtuB>[uqcb%6donL514KB_eUb_2EE/([^>Qf\6c@Bg-^1"T`q)GQU
+qNqKtZC\$"@D\QC5d8]^$p\]_r<'tkqkeq"$mSUWLC[;m(-q6q0b1"`U^mu*X[C%K
+#;,.Ub+N1drqXVh4)YqC&WBR(7Zg><+='];DB-751)DC4mG^b_2%@3D,0NjL17/:r
+TPh.bX<c%B9e2a:f<;1?Tf<94K:=Tm:TU@a5-hQi*DI0bgG7,R_]jpe%Hq]r!NLa6
+73e%5Yep]%oX-eWiQUf`;1XCo+0#sK1Jg^RV'=NmPXQlh"r'`+6\Yqi7#WT&UdTc7
+LcB@fe89V,:=PP74P_Iq+E4_<$'gKMfdQf<)cp$F@pRY#bjA.Qd)r.&"tf5K>MGFe
+F_"Q3BOPB*[OhqX"tE$+=eN1Gq/)h!`DLSWpCLbL?T,k^D5:)&hWmhcqlCc:=,!8n
+?+=2#@>67NEe@Z_VBnb;33/Nci7L@bKAuY/-$?GT^##/LpARh.gN_!sLuVTh%uVl[
+g3amfCQj+7dK,YVHY$<n8X5#j,]uK;\Wo>r.28Y)VGt,pI=#S[Sn1u#M*$!>lNhsI
+Snk$S25TG=L39fd2B"mn2i\*HjR&AthABL%;gGVjgU;C?"q`WOTJq^MAf2r.#'n'j
+gQ'mrlhjfJY[>LIf61@aP$Hs^>d_CPn9e6s)/oFC2paIO5;M<h8]uh!FWlcHb48Qi
+,2m\o-SMk"M61A-W\,#`h==8IjjnS0c\]bWe7'ibB*oHA89q_cTAF0Bhc\ll?,_T\
+BU78DGp@`=T<@k$Iduu0rnO$Nr7sT$n_?bFH2)J!>3X"T^GXNJmU'_Xcp%\KrDflB
+/1Wmc2^e8!<`?S[00L#L;s8ehq,B@mTieePBU@Q)%sdA!h]V*7"ASM3JrO$BR`BI>
+@.KC/#9@*ed[mCpe1lNp*IgF1C3pY*0S_?dZof)3>ZVUn#*6Ql"%:*<c0:'cE<N2X
+!]7QJOZJ9F;-Ut/OV(2R&W*b^((r#O(#oEn,-_2$^8Ro&iCl\!$DJ`,<](i<S1fg4
+]T"T(ge>jA9fg3j/!T4(+3?oK3mL2L&QV=4A1N4dEWK();F_*%UR[E6+u`%p9O_Ok
+9p0Ke_@h*s-f^/LN\UV_'N1Z&6BF]mEf_(qfSW@k>d#B':*%IM[k(*;c%i5@;Tm\&
+(!6*aQK4`T6s56RjeB(9W$5e8(iq8To%KNY3#JEiCf='o0q!_=l6sO-Jeo-[I.Mr.
+1:_rOAo-(fKJn!(E,%q1K^bR,C3!*acEQIW\Xk&fH-QMnjQD3t=*+$;:g)U/kVJEj
+PQlIKjn,>Y+mYKX=;X^,jW[JLlVmFNLsH.%7Hg![?;u66d:Z$1."mO.["_qT7mf6b
+JuCmZ*#MUH+UP-IlXpENSl$\C:$Mm?RM<VP;A[kZWYE[U1shjS\`$KM77!IZ)LYUW
+QD4t9lNVCVJPD@MHJe*oWYK3C2AI?d.C-RePSU5L1Y4IQinCOl5ebL3aY%@+lWL)i
+q'oSGcIKUC5"j&(9QN+m/"n/l<XabU,t23X0h&=SVTL?Vi'V<YZR0gt[%*U9@-n#+
+XYrAk=>C=r.tsapLA2<]qU/1l%9g,RU<]A]D/#[u:R7<`c3$^c%S[CW[^FQ:>'dPM
+:Qj^+8'.%Ml^_\UIDW-'.dC0R8:7!8bIMbmlWj=JGV5Lh\[PnI?(7g$a`6l]90VUk
+bL'NH[H*bM9k0XhK3dq/p9'aa3`_DbHS>WlXZ-+O>rMS,YSE\D.1od\OD;i*Gu;F:
+!s#(meU\U45//u%*8B7&")GmcLHs;o0LZguY_r"j9@ZRA$sd91]Lg&m;&?8eDea8%
+-HB5p)_-eTO>*D$Aqpa*;Tt,:QM)NA3;m](RpV+o9ohcR5:SG$TnII+2IFS,#fa3O
+P]?r#a`s:*ir!qb1"9?"fRkkXglt=kc<c'HV_VhBj,<J,)U(025%R4[I<*n7\P"FX
+kZ++FQ*tkY3V,">&8R(;3Sh0C2a(@:)cgr9g!_SW)r.PWPODhO_=uHqWV%"&FS;6Q
+1;O-.NE_=W`g+adcIjShR>J<m@)+gO81aoJZZZCM`B*`WC,PsoeiG!/Cp.G^"`LX:
+k/PC:otIK//$d!GQ-MWO3.T@eM6t)fE+BiB&Fe`u5\O4%!P([9V7!Z'Ff@mbs*?/#
+R<uB&'\W`e<.Y1/*.pH5XH99peoJmKl6.,j2I+=bS1/s/(D+5kkU:u;s1ijuQ(CdZ
+b0UiFa631-YA7'nejDd^c0[hHDd]1q12gWX6."ag,Di1PbJuUb$s?Mbh%7G#$:l<a
+P(X;8&;4Q<9CFJZ*A+/[5(6-1Tf6gck`YU?IR<lmT-UKcY'$HXd7Jm'NC[<JG#ET+
+qRgt9jCpSr-*0d5k@TP7_AS]73`!mDAab&?a[r5^:#pkC.cp`ApN,JO$aF1/ALt!M
+Kbd`_C&INj`5?gTkMSJE:@O!1S\rnZCD2CcM$>KR(@og\VJbD`ea@mS@N.O+OiK22
++SjL$8nX,V,!%+)$_4PN@D2c\p1F*1qX9G`f2;0&M#@)h1`12V^V`MhWY(br;Nm09
+'outo%3UllS.>f94NAGrV3?<?:SI'%VpP/crEa4Mnb"a]M$j8n8'fQpW9?bkrXkh)
+Oc0"9kjAs[q7gG<&?Ft0aOC`j"ujpC^^1niq';$um1N7I^?H%>_%;gH3'_a6&?HG)
+47s6Uf=u#OZO&,rE>u^`-5+6-P=rEhq,<Bc2`:+U&tp/Y8In*A2%m/^Sj8m2/*@f&
+f9.".P3a2%d3q<6-pH)'(46QPHUWeUC_N<aP0l%Jllm2aR1ZE$X$M+J=a%XJ/!R;D
+PF5sY3FA(tS/bcm'j6/(6npMQ:)<)Z_YPgLTkBVdTgS'EQ)S+XR:)<(3Z.E$*'kYm
+b)o(pAXS[?6i.nAj@PVp)CUFa-%UEH8TgHKI$m)fR3YUsOhR?R+":WOXMJh2C;E=&
+R2=pcQ!'Rmna[X@JK.OS)j+FF8U3`]<gMF:R!I%HdDMO^kb!uq`R0be<*bspA"MYr
+R5)Yq-lAJ[R$hC&R<382r*bt<eg8G6%M<<n$@s!uCIRLA`k5t6&Xl35rgOepSCjQr
+&_A(lQlT^aS<4IEa:KY#X<*ij*22oD$Eoo7p.,eUS4MKVn[TB#]")@(*0L1jH(6f"
+cC?^Y8ASr1\QGH6YTHfH(fAEjXG7<`cOjl_&o!q.l*QRHMTITE%uJmKN,ar$EQM1'
+OE"d%^uM&e-(tYlSQ[0SjI71"d@JdZT.%4:e$G`^oF!t;U,jj;+s<H'[`W&;T+ep\
+6a]O5`f'B[U7pC8apSMB)'j4bUg0`Xd@)/]KG=7aal2k;l0"k1h^(+dM*dH!nj/l6
+\fX77TaFSg!0eRpTUsS'V1K:?q@u&+%]Ak8$m6C\P"Efb:U)Fh#XT?)fhioGC7]`[
+TS1EAU)D1CD+sTIVXd6SngPp=n')/Ibjq&DFO-\mG8XR@VtqtmnRg#99W)n0UWReS
+g3HE0G>7@@:.(S?Utj6'NhKp;:4ds?V!4R`gWbV%brk3cWfNrjRj<<E,5g`O@V[\J
+80$&YWO0sM>j3Z4p<MniUsX-,jRK)qoqDMT+rZQ;)Mg,CE@L`2WX:1)C)0Uf8L_%F
+3*bSpJXcb;!@X.sVaH`olDMnlRA\N!TB^$h.&O%.#q<7h;$%L`H($(^"=Bm\X0i3`
+>>6IO<\!]Gd+duGC<\-3`[E=c'bIl,;Ks]QN@`NkW%uAk!pS+\egQ^1-2Q,[D%b7=
+C+UGH/im@B3g6_8P0usN;EADfP*+2#0!3!I/ioFQ)P'd#C+cfTY<n[26DL]PBN#Ol
+0![?nr@fUNs!E?t-Q;V))XA443\N1ae%1AiC32.E?8(kU;qcXRC9b:+juA>eYX5%E
+Ps_b:'%CC%<-$/7ReEho[Q'/R<4&k[X[t)*'X6%kO*sVNU<BV'*A!*h/-?hB",O$I
+-./19Y]?it1:C2B9sCa,Ya&)9]#E1YkqQIRZB2.CU>&RL7$+fa/E8$-"!oKS1+g[(
+/Lr6Og>H##\lS37a=+,G+e10;+tcM:Y1l:G@jNa=CTadUY/P@`gBcD0.+`$WXc7GS
+K.j:"m+,)=6a3XF=T^2qJ#hm%Qh(&UD1=8BDMlD_WuZdE@gf@'$a4E!05Z32eUX^N
+MQqLOZf<40@gf>KN2qRAZc`P-!rWJFO0QSGZqAItZNo0Q(,t6j=LhkFCD*qpBJ=b^
+[=+LN`LGR-O>OnhZ:cV!kSU\*r\L+5Z:1FO.ka3+.CFdb>/d1o)A?;T,V91g1hEgE
+HH3G2*a7#,g'RF.CKn)4J;bC_>.DDVFg*^o>F-!h62e&mdk`hu2Dr*J2$6W3"hZ_)
+/6`:qg[O#Wqf&q&EX]R$JHL#'>B[8E=PK;mgpnuf&P'8;;)H0Y[2V:diE`k\_;-V<
+-9G27\m4&pf:]/k,sW"KMh*i4Q'(rt.-$%B.,$Xql*s<\;lakD$s&1JMqsZP38:$r
+i/BZ/B0"t%\4tgcgQgU[Z6Dr=#Xe<rWB[qoLUk<UhHfWKOfQ%r[ue5(O.382^$dpj
+VjgVAhg?S.PP2T(5J"ZA?X'\F#hur^ofF:u$+mOU^l&KFgY]oWLoCnlUS#cR^keF(
+ORa9`S$\!MgY`8DU>,?'"3A+oaugNY@%5&jQ3mnh&jBK2]`>IRMp[Grq;D=:]E??i
+jmp(]p8RQPN:>C0no2:`[>^m1+`j9hF3'<mm>TNH]iH/5,bF"'nDY>n+jcYi8N8mN
+q;O3h%N[0^gRl5IcAi21^R5^p:tB*ceDi7c^#Lf]q!=)%muZ$"@i4`t34\&?jg;B!
+OLtUU@.ulL3"@AE^_$ph\ORRk&!RJ&'#=_2km.q"!l6,bP/4ShQ:V[]Va48fjAZHH
+d/rAZrBeU+PJJIW_ob5V9G##i'DWV*_(h8B.@4`3'&B1B5#O[kfB"P7]Q>&Z!?`46
+9GfT-QYAIGmU;E^T<0@uP*'4dUa%XVT&p/&(!I_doH?PX+qrHs'%*18`/KkdP![QO
+)5ET;.8CdiI%"S%)3d!k<&>3Z2AcL]6\JGRiIR>[0fYCZR?ThPoIh3f7N=F/S30@*
+X?r'CHY8!b7nPY<&DfdMCE<hV)p)<MVMQ#LImW\V0e%&^R>[Wsm["g$BUj2.L4pIl
+H'a)+T.srEJ_Lt>Nti:`NTQUAcBCcGD/!P:-Y.qN8];LQO-mYF`d+d+`goV!5o@.9
+`T^LDm[oo@R$N,!C,qN?3H7aiq&0PY7asE_E>5&5Wt='9iXsG0=bItZKFpfS9ebHZ
+.B&s,GtRkB@*tPTlb"+6grF.UlXZq6@&3,HTcD^E7io5rUT$i=0HG1#Pn],_DS@A)
+Ll%P6\u_JC(<";B6Q3nT8R00'gS.?rOIV0D9DPY8OlH^8S#+ud,d`ko7%N]jR&BJQ
+-;:-]n]rMt[#($nSOV6QP(-(*InCBH*8]Hh^#V]K<ZW%6[*u@Y]bi*>Z6nPkVfE?o
+/?KIM!_tc=VY$k5]WoabjNm)RcXHHA%'E=`m3o?ODZmVrr48l4n#=ODcZHUpcK.l7
+k+523*pT+8JtS`fWZeCFDebofC7%O!-I@eMMb9nm%1Ju7!2@'2c0Yh^!h1:[(_ulo
+d.HWTo\37n.ad6%;&&.iXOF7[375JMnH@\<;C>?^q!fOTnMKKMAL"!3fPp'IUe%sH
+;Ef'j5qSNLdt0*Q0,nPopsS7"EP1r7!6!_,7:#p2hCS+IpEf!k,1KLeeIj(/qA*!e
+"nI?Inq&CA(G)_H/+VjZ\?@R7#;G^h*n=G=<NQka2_r>16h>bI;"$7h2_B*f33[<c
+e<LZs3prkX68:fD07=VeG6Ek?"fDN5-`'cLCFW33=/_B[-e2iVV-YR61/]nVW5h`5
+QV5bB.&cT1dgo<RKkg8QD:1pSb5h+<>o'dsqUZ;<<f1iQ.[SbSVUtc)f<81T72"6I
+(>'j6ou2F0SUr>6I&`)QWh3t'QXEcuIFU3'X;`=\)[lA'6.<;Uoofc[KiKoY_H8:o
+1hsDN%70^p6e*Cee8#U*C:n`G<d+hN1"BU;_T:E!aKchH1"*`l"`6'd[+Z%>pZ5f6
+It:WN#cm?s/<-kb"gY33*@sQ50eIGs@pA_nUj+JqemF+bh/G'/NHm+[Xs\p(Q]]lg
+Z)em@/[JZ`[u&_s9374kX923K2ji4D_>0@k0\]DUCJHD_A2#US=?!&OEC[7f;\XQE
+1p+:?Kqg3Z;;'9lflKh>HVpqm:*3C<1CFD5b6V>8ZIlS3H:);t8#\36DC)?%2Zn%.
+*QPWEIb^E92g;B.K.".i]NL^f=e4!MjcXrGS_9Rbg'^=&&&>Qm_>JGNqkq@/HQ64)
+>M3d,&rj9-*O8t!W[rSN><)PcpW*\GJ)3oSD`-[Xg4.r&Eo$I$32bDtNu%e3Mu>f\
+?;mRAe`Ss!E&k_XrG^o0;La-6Xf(rN?I$n')k+F7RbnI&rXIugQef4JKS\9M\i>\\
+dP)'$kML?I\4u_T/#ae%P9U86UBAYfd(0.jp5%2Zb,.NuCW"<,[>:m+3g]d&2?r+b
+aFT_/%R^D-T\MeK#)pQ@-m74S#oS\p@mQ&;'bu<h@1daS8e>TfN<ZUAXAmptLCL&a
+@AK]60T/9WE9PruEAO!,i/hXM-<DZ8#UJFbX@e$ZU<*U[a`PBY,*Gm#1-&<I)^(kJ
+VXuUE)HA_Uf4:)eob_I;Yf86dMcBt-1E/dfd4-0^#Bl*_L=[>4HGs<Z=Xu7#"^Vjh
+]?'EJku:c%N436Zf?;F]X`1g@Yer3._Y4,*NUBUkhMUcU\7@>BQmT!M&$-6(3;]Ks
+Dc@\<Z^ZofReNc+l/LJ<rkiS6)oK$:c;+t=,LZ$?HTa9RWLBmu,6N>s,]Q<A7D&%D
+^B:+GjE*B\8Z$<DZQ)m,@u@2)`V&&3nbS9tPPFOPO)hlQ+O?L!!^':@g7(;;'B&f&
+$UZflZbadXKYkeM16'0pZmc-N@Dirb#14+'!N_0oEi$\!<&!!\0N`B54\/a2&&XL/
+UkQ[cZrDf:YdtU&81:]`+pJY7B+7>8>aZg*Oc,0PVX3U`$m8HTN@]emN.qm"Z;cB#
+aO;,V#)8<d3j$X-Jh&^Po1\!X0L<pn0*a86]-C*I;F*.:'7s"?9EBbR1oMtk,=GA4
+PgZD7ZujhZ37N?`T[7c9'f^pS9DX<92"IJ"^9ned86#5[@/@b5$pq!h.FS5Sek^,1
+^K/li6E*cQU/_9GM]C^nZb`IS@NooW(`H:P`DpKu'1J"7=R%[#@G9%*.#]R=jd-9L
+iJkAa,*oWQ(q*kD7s#k^PQH_2QZ\($:Y(b5FXU:UdrhK1Q*_Cc[Q:?)=SIaVE8YcJ
+.=U1=ct.?t6&j_<X4W\mJ[.3A]nbJnVB&OoMiDS8L,\rHP1Y#^%r#SK-:s>p!K/cQ
+#$HpoP#`F*j*KjHp199HW#gFb##Sc:GNbtG%60)72OC.NdlqKD41V5JUc*OHd=Q(*
+-EXH8RWAj$komL%60k!t%N-QLVMVbBC8F"hB[KSa\QB`HgTLfQeTIU)e6$7b:O4AK
+p?\:r'u&p5e`F,LI!jbIDqVl3N9bi^CRQDtL1bmMeK+,tcIu_2dV0]'.N,!$SHao7
+<JP#0c937BU3-@J\'ETh7p4L)]q6ZK+[H?1g8TKH&(l/5Y?Tl:LmO1Sq*!8qOn=si
+]@'PbRY1$O^6J6>q\#6%LNJfhYO(tt0>$\pIOF*#V?j20.1#nHar5ud;`O;ubPXLh
+:#A-ibjU?Dl#rlYdQ.(>L>YH"G#0'J'.6=uP<ru6$9AV]fG=[]X9jId1(bO^I-tCZ
+`[27&30?`3bi*W=<Y0Ed_-h<jTi<[TYf7X!f;&lmHSfu_iBtL"M$m`s&5Vg')+1m6
+%,S"ZM3/fT6thHH6**=LYqZZc244^oX5AerAhc1,^D:<8id)3.,K8lc&RN<[MQt-)
+/80eZ?;,Anb8N@;`JjX<*.NcaRQ<df`>rG>>E?#V5X\]eHf8e%K9?9G7i(HrUjI@k
+O>8sMBfR2EPV&&]MBTNe0d,H1S86'W+fOX.(1Din4E4Cl\:i6[c_DL,EFiu[\KIgs
+`3G,>$7r=dD@@WR6X`BsAAs_6!=9HB50=;0bZ*U[AXp5u9#=h-aB(8ur4[k@@TQ'f
+\K4`jfUXfj*)<Js2'WgVJ9'Lf9;ofg,E1l6#DQVLq>!/t)peeq`a)B.Y50OA,,#>`
+)UGu45FGXuT5@OGd"U=YMX:h'+Pp,FM-!'/XVH*1Ed,]O)+c3D,,9/S/CHQrl-=+\
+V@rTdbM"m$h'F:a/Xi4X)L,=`[5fbEdZN$OJOjL/4,%csT1+BD;e[/1Vr6E5;[I85
+B9a]HNLFJ066A$6SQi)9fXhmLB3A!0BJ5'^=B.8)=r:'oGp_C?=#Cdt.rA%b1l`4S
+&/rA5fbJ@W8Wo=Bj;C3r<s/Q8[66#'T^.k3VpkLNcfIZ-9'qtMd[8V:AiaF<nt<?)
+UmB\KlU^BUF)")UY.;/I50B-uZBfrff%L^Iha/B^cXP^6.ni`1D$X.=5*=FM2f9Zo
+]rb?*GM5!K@Ol#^YVc1\>Y@M.CEs3@(5gk:@UT.#!-/M@rgkpRo%P%=lFdW4aL'Q&
+At!G*F2U9;[&Juu5],B]"BP%ooB]`5Mg[L#E.hUFg4ZY4EP8iHG$nPl]iT1^?Nglo
+=!W!D=-a#Q"j[<Yp615tMjSXFR=)TbmXi94pI;Z$!9"[IMd7qN8o6DAUaF7mLu('\
+GbfnmdPfG;Ou:;g>dq?9)i7jg/LDb\W+2&p#-lHI7sNC>V(ujY&eQlKUr8![_J>>I
+Y"$O/5`B6JhGaeZ=*qlr)W[WQ9lfM\b2fT`.jWD;$W5_.Kp_r(ZNsJ9,$rM.%$hW#
+)O0IuHWh^,eJ8f8KX:2U/XcODP"&Ja%M<h=AtZhC@XY#o6*/KQ,hA:Q&8a-R`75%P
+Y?$hEABYX507(RI2D]/^NbP1KBIr%B9iuZL^8KN9$54;pi/k"6,r_igiLR>jEAdI!
+4c)l'U(gjF#\#,;]4YdC_lU#dR]f=roa`;mo`PT+7Rm[;DB=HuZd;b57LK5$+eo2n
+;/,%G8FLS:Z>>Nl\d1*he=.h\nt(fSpe!qm%Ig^;][E5j9199uV5-)@de$%#]J1[N
+P``4qP.KY0bpK2RN/SFe;,7N&_P&f]RZ^hq8Z"3g([V!_M,uXt>X[-V%OoX8g<&P(
+&D]N6Lm`@o&LUG*MCnK\[hP"\Ap@>.+jQDa3i"3FFid3_204<!d]"jIK[4dCpXksF
+*D^7k>d)[cgrl.`?tu*SZc.#keSfD?.Y4F_(;8U-!h<`"kIIUi.c,OT?<VS2Bf"k8
+d$AH6WpLl$1#EbS=q`^5$]0/90&F_41>DCa=JI]1o[9+r=]"n`[<^3[e@fLZ:i!>B
+0fJa0gOg;V9:_hn@OU(q\$o<:`P4+XPd0#Y\noo&ME'KFnQKMpE];+1\^kimD?Dr6
+D56>Pa.N+!"%\8":[9H16CAc_he8'N[CoW9pm^I,r6L6b1maZY++nri%#sPX5N'/h
+5eI?kCN''FVY#B=CmcIYRK`V>#4h./88j;*A8!$(a@($gb,XV0!=")VB2!qs5(glU
+LIR+%n'$@H;I2mrG_hN(k`TQ@Eb=MVLBi9^LL,?s*-m?e"c0s<E-cSe8<7_)8^MAY
+#Dd](5)JI?#OmKQLW"7HMZcQBLh5FiB``Y&L3[FMC/D-m+E7D%eqfD&$?3Ze#p0Q?
+;[b"QJ*=3GWBPt!G_@N1G,ZC&Bk3E!^5U1JI7ZDF8KSJamgdG-!6C-#.T1np&<"Z+
+N@@JTa]aCtUk=d&MeIQJ8D%-;fMQ=ZK97Ak&K8.bV\7)B'*uO/Lr>#RnqIF!PfVL2
+..!DDk*TgcN[SM2kZ\cN'bTZBP\@(Y#[nL*%#An=(/[>W0jPTO16LdrUM,7Rd:X;P
+p)pVNModr5#rmZZR$<37)6*arBc_>02];`cWG4&bBSrYn*>hC8S*kZn;7`,%SK+Y7
+KsB#HMFO<hR%VR"X!5-?C6f(n%%=1mX7=u?.<Mi;(p7RRY%iQnb(?V8E?Wa3T@")j
+JjghSm&-h5T5&tMBmQDnHQe86,)Q`.8e/-uJ>!,^d,MY`E^6ELp'-Z]UN0nA.R^4L
+FJET0WTer/l!0ut>pW*1-Aci?nlDUpWiq8^Uul9a$G<kU>--'ZWaKBHBF(fb!4\[e
+Y\WqaCC[U"(7+NQZg*jV9(]+k18i9\SLS$&$Fl^D>p"]O!G^,`CL!j]cEYPL\LX,,
+$^@\)[($J4Zg1Sto$Xm8V(_,c0hRtHlQ!EU$Fe3A;!U0k_HM4@/?K/',,ae?/&lF\
+HqfP4pl"@e:R](rJo&W[r:<t'8Sl-T3<1it^W#27$k+ataYrS8_8]tD//^Cq69*1o
+Y"]\sKY6V$kehIc2MKjJVY`9IVT9$"-uW51!YY0XA0Z/W^oV!iZadkG7*:IQ-u<ce
+Ci7<_ma%ti4\VZo_UQaQbVJ?nbJFoTi[m8\CHP1)+[p.f%(\`@[*\0R.O&=R9]\Fu
+VTf2;-u@ZoJl")djNFXA<`CCkPP-Ba&1`A[6"6!1Cte'S$UPOo05U((,>9VI=u,*U
+1$!OGUDhRf4OR^55Aar1NANbW@QY>ae[/L+1?Kt6I*V+SRUZgmD'7A#ZIS?>1:3?$
+j0ijC3&AX_f0hsOUO8#1;FDaP89D:=ac+ljShqXiJ0ThCAA(UqJP&nj9!,$f;;0b.
+$:eUC6e&53c,)itcK)k!g8)U(UVfm1(u7n/guIrpj)j"^khK]dK+66r<<gggC>TI+
+iIbc@A%b^`j<T]7;H4ng9Sbd\4]3K:a3GaQ/]Uh-Y))B(7RAg3DD+#GN&/qK-IkRl
+Uj-1IkX2a_7HN5YmUB[Z3*mkq<`A]`cLAc[Iojr+8C%M)#"2&eg398,,qk_Mk(HL5
+5j3,[8rlG/Q)Rl_,>jD/a,]q,,trHXhSQHElIEK4k'\8H#VIDsogLiU0)fab35/!/
+lpf8p[HR(6g?^0?;/Yg`V(?H)04:XkmKWYm-I#qQr:22Y;F]`3`I(Hm12nOoqlbbN
+KtMX?pi)9\nqS@Yei6i&S6]dG@VDulejt%!p@F&Qp3'>9BAiG2!;19_o;@WG-`UpX
+fk7.WJBq8HcP1c1'k_HjI&Qu40CE"?4SWkFALIOcp5i1URXn7IC*pBG-QIshNd!.=
+C::?j-PpRE_$+G[AZr!;+t7>(b_\#PAYgCGd!#JOI`@24C(Pu5OIg+sOD0L.B'8)_
+#bl,hH6a/5Icp9;k=DX#d"'9F/r"%eV-=!,7WFb9Efd56M&p@9b'FUXF(WdMk!55%
+f+.O7N>Fa!X+>=_gBZ*<G-LR]OTK_CDK@7'\.EG!-_h&'QZ\C7M^CoZ=,V9AKUPI0
+H'#1i-G9a<[!0T?I8Lc&BRXkYTm>k]HV!.EnNV>$E_l294n-7K&o)io9+9G$%4M:,
+d/ORXm!+Yn%S:(=QbRoF^CZ7:.]9Y>=87Pbfdb&uS+0btW2bX:Ar#TGRRj9)E@Df>
+1D^=sT"#:OkVIdP4IOhDI]0r38BDlC_h,jdSIllp;*^_Oh1Q%hT[@6gEJ&tt-\BF+
+(_LtG8Har"UnW*?TeTjY#hOfe16<*Q*pFmjEI3Mo=,'S9)mQAq;8\,*QQXqAMHGLe
+O[0jV;hR_Kg8TWFna.F.Mi%e+WA4Q"&B>c*\ttSNW%+,XWMq(>D'BT',>%s7l%#pN
+HEkS<XD1+`;C8?P"X<M2Se=aBE_r(m@[cQ[-$\r*C.E[9W?k[L-&Wh1l4BiG*h)YN
+,iZD#fb5hB&-d.W-eTjqM5_oFY:OF".8kMXM/SSuTdc/&0%hU'CEY77co3t*Xf@\V
+P1ig>h^M]GX/VZkZEY<@UFV60]IOPu9,TDk4L,UhVpb7,P5-[C'plI^1%P]*.b(VA
+p7ekiRd3Bs\[O(^+YkOsHh.uCP:8:$.@QuX1TU=-lcNoc:;JJF]Tl[7'2hsH;-iMO
+B*4,O'4mcAR'&el2X\h`JutY<iL]lj<_891@V!?9b0R5h0Y/8b-1@Pnrp7M,3_ce=
+XAI%*<p[CX41\J09eOS?P<=M#.4h"4!\HI7KZk?PaclG>b$$37ju!h70Lj22Cnml]
+N[7DWc=:(W!Z9F]+fXiPW,rAK6>A)HCjX'>:$g\+m+*fUqTDMU-DGXa@NhhS6mqAB
+/@:ko/YfB,MCIP`\QZ@&Q))eV+[lN#9@R$l3nQ1JCTUeBf4:c08@gQE1tXDR0;Lqa
+FM-*apTUAi8RiN'7(h&<S1cr?8VB2rHOWMM-II/p9]NTYj0gnKE7d6"9C8D1NI+L]
+W5f!W[P[&'F0/%dJD-K/fc+BZU):\*fYHn0_j'UN_d['!(J]=.;53&701t1MD7Flb
+4!nFpKCrGcn@icWDGCg[4.u2q1M!9CDGC]JeNjHuBtXp6Aco>l<>^Pce4/')^/89*
+(^NP'qnCGrjEp#\Ea%PhUKSNs<\YXC\W47HPq1OW/0Yk4eWGu:R(4L3]1jD?8h7cY
+k*X?.TbB[sZUEA7))mh#TPN#LAplP?-(q=0^O0.uZ_#4DCr9ob_aW$7gd*n>7`!Vc
+f$f@')DE@];Bfo2``&G(4GmJ;TZA$]3r3GI:KaX5'#LU748acGN+1"?Yf_iKVGp!]
+Y&gK:Ahs:LbX0RR@cZC$B%+U36Z_^nD#:(LhD05Lc?Ul_6dEsZa@k=;5Q^&nK'u;?
+d7B_bYMBCA9XQ7:cd*eU4I'_1j@r!9X=440QQi#"_fa<h/j?YWdESj^\"_9=XOHen
+Z3"#nJhb]+2UN_fY=3mp_Mu*8oq-(U\:Xh3D,"$B7Fh8fE/fHgRlkQ"4]Sl'eE:+.
+[Qlb'pb]"@g$4km]ngmF%kCltYhU#!RrG=uWK,_F\Li'8NLuc4R?7<,OF)W7<8f2,
+U:EG%h+bb\ZX6W*Ld#Soc_JO<S^4G*X5*m0gI&9>S&^-*l\ZDrhS]6KOlHET@fTtS
+U'aNNZ0r*Jdi3`S6TuceF`3$MOb3crU)X3j`1>r9aPn]3cWg=>jM0`tDWr"S=?)C4
+n`O*44K0rcgrIItMEL,q[/e5oW#5Y1R(uW[jR87'kZJBnh=OM]$LI=O;a,q1\LpgD
+K^Y<m9t;1P"a)0r1[4?'PodEM2FHfKgZi?sPf89ip,hUB.5'18Zm=Cl%aUHe)smiZ
+m=i`QcU>>sq3UQUY>>[A,=R,gUR<=nR<$'1`U0$g:[XO=[%A+>CLC7ie72Y/C*)_O
+P7MH>aCUu!,)_I@dlJfq>eI;GT.OU^*(9+_88(\#A=lq(7sgoPou5,Rl&5MKbWE8e
+,3fh6m&Ufk7klu4f>llMdL7Y'T5#U^4o#LOkX+.I!pr%%=>(Y]0&nV[X5Lu^NVF4%
+b*dCqNE8<>=Ok`#6-MjqRW^=]bWj=54;rl8)N"A:0DhC$4<N!9J(OX(nBEMp<8,Io
+N5u,'!&bdU`!4"kQl7auNW]GmW74(LKT*r*fR+GI1`JeO6TDm,2&mK(`fU;+b!uYi
+6Qs?<`$.JoNl5E^\NG1;23ElQ&\6-P@1\rf@C-mtb#8OuNG+Nsgdl'=U<ffX6)`q"
+<=i0le!Ss35>7g&Acl68@VJ]?=s['mf]!ccOc;jB95P=+G,<mX[%Wl@nSkkiY*Tu!
+$K#"$eV=sqrI5b.^g$8+!Ob<<:rHWo6[T=%':u\]7UpFmO!Tn%_C1k$3Co4)e(k3p
+m*:>/[+e%WH5UkR4]!*c7iDgf=(r`qncok#:u3(3kARa>Bno&Q_WGP;(HuYb]5Q0@
+]D#)BLSNbm6@?KCLPM_aid'L0SmR,"p[V^>o*gFijgT/TUB%>Hl5%Arn/K<,LF^:7
+KYbgcYa#GFS1+(\d"5[66>3Bm#s\ct.f?NlU[l)BM"C]^_ls4P%Rk9R5n_#<e6<A3
+Ln_U&a$Ip[b/,mkD#lsU7!d[^co?(J+HZee]`s%@*i_h/HF#%elr9AZWea'L/uFf=
+_LkHVbchpK/*s)M9jr^^Q[uJR-5oF\P^,=*duo[j2Y4R/1dI7H#gc1?eI+PFm9KAp
+--2=I5pHE'@ggYjUaDn[;EZcP;"KZ(9MWE]jr:b8eL(U31R1H:da-/n(r%\o-Q,rn
+N#ne<iJhVM7tHV^#.L@`)Ara@dYJbm_2)ie%RVW_.te"I<r4.aG[hdq&1)/p4S5.$
+Dcq%KV_<d$\qrq3:jlrD^_ZUs)anb1:p&S2Q-BWMTPI<RKEI=^@OHtFBkq*+D?u2(
+3'4"%.CMtbHmJ!O:t)62#bug$([_6332j0$))<U\Z]M$*DA('Ge=KNpj_-N8QIe#;
+Ef.0fH4r62XL^WdZM>h8)R$[Y4d5"&p.%)s=f->2L3`31PuhY+FfB'nMKXp>qHeS0
+L36rGVWt3;5+/58VTKb46(R5TD-HqE^MT=STsEP^<n=#4>JbY!CW\2&[V\(nr16:>
+RXr.aTn>mn.'B"?a!:L)@2L2&B,7lEWT-O2WprkG*61W#\'X\N]uZ/A+j?IFoT;bA
+X16u9EmcL2^H'h;b$+<WXZ`:e[D%_(hmI99Vi0DD8rCpu.n[G;_ChpR]cAkDUik]&
+(R$Dcoo&^\'XM5c(%F$3g?J2_4jtIjY\[f1cac^W8CKW$4&rH_Xod&!Ir9PMET[c8
+*:nUh&#8t`-`kb3<R>UkHiZ6h*@&"fY_\<="^a``oXrY6!7,,MD+DDN&@<L8TW/qo
+LcrWe\3PG'RONVuOS0c\FEp^!r^@!f(o"p`JK_#r0i(A)T87$-Oj#kAa>GKdV!*G-
+\W2JB$3_X;"Ge7*,`/d7!$#Wu(?0F=.80.A)Y7EqQ"i`3MB-(M[.%7)>[Sb4*\JnK
+)M&>BV2N_q6:U2"Ulq16O3=[j/pQ\)%pHkQWuM[%P")b.C<p'69e[[o$CKnMITB?T
+I)k;Y\!bA=FU:V95h,f^,P'ZTld^8/BiQ79ZMHH&Bn%f@@)1T.$C8o0K<[;`^t<-/
+A]k]o1F=h-8g>=AXK#L1Q&NR_'Rsf?R@LWrM)<im/U'nuaH7fAj@N=CH;f4EK8(`$
+hRq.&X6HH#a1XGE92^0@IX!U0Y$9-RlRhS-<_j@%4Nqj5JKuRm3;)K_B<2#L-[C<P
+Zr]L`<%W"QOhS\5aEO1@$AD5eL_2J:jH;Pb+`PS_+ZCn3+lQ7;Yjdo<fVIh0!KM8D
+^!fAN;P4Cl/29o972?V/m$1.4N!5IOW8a,B%!0=LjQ8lGji1D:r.eC<2H*/d1p\"j
+OBP*@5SXWfWEu,i/lHMtege'VTMsDu7VPa[o/=:?BiYGZRIf#D,_O^t(a'q~>
endstream
endobj
74 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F10 22 0 R
>>
/ExtGState <<
/GS1 38 0 R
/GS2 8 0 R
>>
>>
endobj
76 0 obj
<<
/Length 1708
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVgfO?HMN(1Yb\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="5nr6u1n+s:i\AO2D(6AtUgf^eW+lNp7Uq!gjtdqlNQ-S/
+XG02D,#1acH/SnkA2Khdk9J2!hJY:hNTZ1A5\N"k%L*"@gciP:(ldsVdOYl(%k/+,
+Y]<^9eHc^,i=PQnJ@8a=R3A:,8:VU;KBNP!OT^n`1l(;%L;7Lu=Ta891(^s5b"a\E
+BHr-a[ZII7/^J)%)BBMj\.hf_Js"-q;+d\m9;OsS&<.W^m057m]H721dLCsnh3S%b
+:cb,,#4n7L#6jQ_TohLN4Cg.(`l>oPpuH=U!Nl]_0TC]%l8B%qTZRfRM%FJ`%V).s
+[>]_dj:FYQ(rE_?@sH-P"X/tB'LAkZ`\`XLF<iIB"/;#4"YQ";lT5W?)X\m]g(;Un
+.dMJFK`[Y42\#0lk4bOnS*%Vo@0>rqKE8;jXhW3bJhjiN&DRg%WO/tjW6.A']fG@[
+V\V_=W)sT>_jk-Q3iFTEm7.GG]cK(&ZDd?8![,WGN+7st3"CR5LEo&9e<l*7iH+W.
+0+t>0i/#9AgbM0WF<LrWOL6k#%?OOB%`@fF7hUR(4AuOp.B(-B%\n!`6E"jjbRdUG
+C_mS@d"oRS";Ukh3K,1ri&3l2PS3^OF,R4J7d3>.*P;iE]$\i\i/0X![QORX=q@EL
+q`bd65T5C%m3LTn!hdpEN6?g,;[!9:/2MqiE+9L7Q8Oa8%V%c]H4K2<l$(#YpsLtA
+@sr8seJ-dc3C9s`;,G`n[LZd((?jFuZ]S3=&;C3N><!uRC+ekS/dUij5aAZ!@:PSI
+G+mO="s%d$JOPEF:[rs?&-X5Y7NgUk:4Wg^CJJAte4ek;G`GeS0JP/S#fnc3p1P?o
+"],J%O?khH_D.#b`g$_cp"RnT<I"l.3l5$I7-BP^X;@<oJV[M]-kb$<[9$Hg&HkES
+T'<fR\VBZ1k]oY6Z!GpSrr^WCFn);G@q45WcgP.d"iE%JCOKQ\'im0,K4+6aL=%!m
+\8:1p5T,=8/nD?*Yni60VQ4$l2eG1<_j>AtejBb'gLf"J=...o2<>)n-LAihW,BDI
+$iF2)>TUa#(C!18DVH=-#Z)<kGuMKr#(aj1&-]gue$0953ZR4@^4h"A)1)/`#Zrp<
+@bTRB!XMhap"K]O5T#,%F:R8p'WZs"c(9PI7EY_#5_h=Mh"u%#DMc]FJf`'j_tQ,6
+e=\h#/A)d_")dGY(HR(C^K0tE6EdYt4_57R_/`J'LOe/!a6ncbR1=09oUe)W^iGHe
+B*A:b('>9-;qXb##*BqA-,TrJ_*B-%6pQ\5J78rHqdG<a3&;6`7,LpF>9PU"Pm,N;
+*.\*96H?Ak"-d10@_#<o$N-?Ff[<P?&48&Ne2FAV+Ml2SFU[Z5s2]H&(s'7706*.2
+",$R]'Q>u8"HH:sE,]Zg$h9I3\D@=,Eu>"Hp]aW"7*)nW9hgk6%J!)tOZ@+mjTG!X
+0p*j+q*7E#XD!M(JHh4ok'J=g(d\M64@c-)Rt3gZ"d/TE7rf56j.tRo#f^GqW<jB=
+/;OEA.D3iL*Z?;_P9Z&"FFr12$j`g>/;FF'!pMO09?F\.nW4\^,"ELs0sZap9H;E)
+5q?P(XHlX!Ynfna4!\?sQSZKacRF9'AA#i)V=jC$M-h,I7*6t`'F'X1~>
endstream
endobj
77 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
79 0 obj
<<
/Length 1290
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f-Ui&;\>i@F3/;+W*qnYt7dB1DYtiK&NeK3`I:tL*MR-*/ao\_obAd
+C`J]a2*qENGXOZ_+>&pgk"'09dNAb5@Y5iF\8WRONCK$)Xk)oV#*e2q3%`u#$\mKu
+2*7=)Ai@7kVULCOnpNcs;(0dX0\XL%(r>`]EK!sC2B:d1j[f0>TQN77%HfN!=#m(1
+6R$cbGfX8I(MAK?LreXqP)#;4o4d"RINY>+%]2Tb]KgNpRE`_bAW5&Z1irj)/BE@u
+Ae5Qu-IZ[^k\iBt6j:ZigRN:Em@_#V53kV!1ak^b]8"ID,1\*XR.<0Fj+FT6ZY1k.
+cmpUp5i4O2&87oMb`GX[Nh`9+&;1)L@%=d/\q6W6JO&]?"9U?t2iOLcjt6fjdlPgi
+aV#lI5[aY/WPIn7Lbb!#)!!N6"/DkT7o5[t$DMLWK-:F"W*KnL!o$s?%HAFiQb"CL
+VWt6k8fSNR+\R1s%b"6h'LnjBj>OWr"2m"/Den5)^2L(?nZsBX5Us3n"2O^9,3YsO
+1PhOsY-J)?8rgG3N4^Kr.O<S#Z@Xc.)GY+SIl.E26h<fG&<qDDZ4JEr`?@j0:_5P$
+C,d"6FKuMp\-tN:1Cg1!a!X%b;lh`G%`mHp%2<=s,>q7W)B;CYTO\rd8qLmt7Zk'Q
+=,'`5Af4M^W#IAm"+\6K4_#uq;:RCOmPG@t)oEPQUO_$C%&75$l])&q`\bDgI$&)+
+:K,p?4qqR1#1sCcA>M9Z!*s"[fLtSS]S[P2gBrL0D-SlB/_1UCQbm*==Oop43`EFS
+kqY<[8DH#Ym^teD%"SQ@(s[@^hDnnn6su^%,F.?B%FZVqGMX/UcTnc-*'k0),Fi1u
+f,1)Y(5;j/?l:*T<`cEAA#7oB`a`EA2N?3DE2hrbNj4Z5(C]+[j4H?62\)#uS.K%s
+BZm'-e$))"`!^Y6a:=mDaQl-]E9Di2j#.-3dGSnAjLK=((,kU0:iX.^<aa1A9ZcVL
+52m7\4[J-R=?n\O3QBGtL&sX4lb.N9F>K_2E6G*A(Mpl&oG!$[0+PloR$WQYkAJJ>
+r4`.E%f)TqLNk&p7u>!'Hih^2="<VVm.)YR4F"@5+J[K:Rs+ikXo,=2!PrnOKRGKW
+0Znd-=<KN(&JmZ4(*(4WDgUr+[kfr7oMgY[>/l5m!u?^%<7!$lMKr1$"Al&I.JIGs
+XjFhJXK4^fZ\/aXA?Ok9I$WM31M'eqO:V~>
endstream
endobj
80 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
82 0 obj
<<
/Length 2006
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVo^gJc5N<\AC\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="5o?%e2k!I]6^X[JC'KScK->3n1E.*h`fZ)dN2T.7Pn*E&
+$.R%13ZH@7Qr1NQCbZmT'P]n[CJB]rV%n:6`,f`!O^N3SGt<r)K9E&8W'Gn%#`"U3
+"g[JWaUJe"6ibWI+"B:JLa96mIU=jH#*e523%3ep$\moAiuL$Y3&;Lc8s3*-p3nG.
+$j@=`*>H(a,s_gg-r-FF#M$Z13F'YXF0X21kCj#;aP^tsR;WXC<%8b!e\h,+&Tu02
+300)0I4_E,hJG4m:52UHSCha@*=O:2#K59]VP>ob&.Zt&FJ+S2T^K#n&0TCU%RUT?
+'Y!K;$K=.gCQOc?kX1`d#/R6Ufd*7VVEBjUGi1TA.OpJ;40C@6_upSiaq+cnU8IT/
+M;tb4."UZ2TL]0P\.fC).,5R@"#/dkN\Y"d2Mfe/UF(tp$fNO*_+V5q[-miMM)eE1
+E7RF6i.s.K@i48`NWYs&2iZ8`@dh<MS8@d$$[d3m"Tk@E(8W7&jInbi4HqV<0:HZ$
+ahnD)3DPXf\.jSuR)8Vi+Tq-e_GciX!5NVsTK:1^(fD3*Tg8/aNMCa>3fT5_ata)2
+UO\kgY9Sq+"TqEV>!N+/n1"T,CMP3@TkJ0Y#,/h/2\)Tr`C9t4Gg/q2@t^$&=*@#s
+'NDu+;PaU!\7--^$NS3OgpKE'<E5<'5pM3geLt2f2\TsUb-H`H)2=iPDA3T-I2Y&d
+ZF/e?<N@G9I8^b<a>/_)>BDRMMBG0g`rQA8IDVXorGkOaL'N>i6YO>!";c="2c38)
+h#?-VDCpfW5t3glA(^is'&,>#bE?*g:&^m?_7cQW;cMfAGh"ZX,C>+]^+tIVf]m76
+#$VEiN%Nd9\Z$'II(Oi/MII(,:a8?k0aodEa!RlTD.kWl"-u0^5GL^5qIXZPkn^H.
+GZpss>D34V:rB'f3bZ/(#WZo^6R%ufK4J3/>>M<fr4d1;M#('C%-atb>bs`Ug>N%s
+m+2=Pa?"8QqBk3qS5jrj.h/GG0TCAAat$J#NRg%Kj!`Th4-KpgWJ7+fE#c$("Ud\W
+__$ia_Z#c\jMT,M9sW"e5`.[.[f#O_:G38enh*egaZm_VI<4l`h:sc2!Ot)n"iuIc
+7tgCR1WXi;/`s_>9(ZELdj#B+lp+IQ$V7c]#!gOh'shZKe!&U/DTUTep)"ds6b#jA
+Ucfef=O`EV"ug/Q<l!)E$\8:P/4\)8T=7!&>I\`N_76\T7<6L9BsD']j;NURH4-#6
+=bFpB)$]kL$6cVr$n4=<SV1)^Pj/X#&SM^[,/E;B8e=<_0JJ5N0!6&p.LiVDTa#]>
+I3+%>,"Q5^)\?Bc_1AV2$]Q<]Qiq<T/9t"K2"[6X.j2Yr+AiYsU_$Ke"C,%g,65P$
+7/6n#,_0,(A2lW&f7k4#43Vul*8HZa?jdSb]I8rK=%`(E$l$9HCao'ZJoKu]e@7S[
+0f\_^omnNIF@$JB&N6G(l3l9aGa["A)Olm>^>Ioe36@,4-<JCs!Ls3c-Ia0<UN-\D
+=t+46@3gRmc5TYY7$19\PS#;(r?hS'6uV%(W$a4[@1[WqXjk68oCA'>.:`c_!Po!e
+E"h3G6n?OPd"OAi#QdlU5(QE++##qp6Z?askS8EB`)n#^a=0M"Tjp@^qZe7#*sONS
+NRKXJ8>Lk"J!)@[8/-1>8`2@J<5B!*E,)ajHZ0H*^'MqaXT9]!j`aSge.fn.%S08/
+-\9^>]dFRo?EHIAKK8B&6?W\^&2FI_U`7h%1/u)PX<Vk&!gC%kb!U\4?jTtW_6@ee
+5t+,:^rE)eK.q*OI6_)'\C;+0C^_EqMQ^h&r]fF>8'Z'/OA3Tp=^)5#+M]T6JE?*!
+Wn:Vb;'7+6c9[ccA=r0K8"1,jK2q/n%B%`AY,(S'-X/`8W\m>S^s9>ib<Um"QoVNs
+-l(Hfh@:dt=crdW]GI4Z5X5~>
endstream
endobj
83 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
/F14 84 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
86 0 obj
<<
/Length 4966
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f-Y%),;J&.Ep^!.N50ndC@P.23#XKKLrDh@6gLu?ud*08<+.3P,(RG
+5_/;/LQb+0ZKs]q%1jFG!8+ALA2tG9";11&dN946>`F9^S=0Zd\O'_DgQ[A$Ejj!-
+f,4!6[l6;SE8l`(npDl=PmL8R0\X-k(r>^gEK!s92B:`E77d3HTQN77%HfN!6TLrr
+6R$bgI5k[gcOGXAOiZE!%k8Ui_La5h;DK/J$mrlkK]ltY)5ehqWKc1Ja`L<63UXuE
+Zk+2#_?1'rBO`ujN1Q5qONMST(F+QBB3uk,ZY1jO_)G($7*qV:1?9B'$tED/$=h04
+2i\!-dQ+bW.r`ibMZ?$"2us"q)CWl])TRi4#gNtdT`T2U]V==\r<@3#r"Q<M5ZmBn
+@kd$t"Y@PJc9Q6h)Zq9Y,S^nFn8hbW-_hO>1l_[2deL^.1HsV^W16-2L&n5Y'1(Sj
+?l'"JOD'>.9R)LQ^-Mb_1cl2qFRHd0#Z1&h.J)Qk7T4h&1'gb[de1;YUhoqC+[BL!
+#,)-h(qLq?`]=RhPmlt?0&5sc;Nok@p'tT"l8Hp">MC;WBR!_<YY&Df2MD7#_D[DV
+AQ"Z%e#;CF"9D&.k_M'[oh/3o_pqN-mdS4QVkF+10TEmK`9[u9UZO8,o75a[Ne)=T
+TnYjR%]-&>V!.`kDs\DM]p>nNmL1<_jQd7")r5$sp8IC9c?G*/HbAAr(c)Z)r2f[H
+'>(/&%ILB/iWc*^%Mmj%#\N+&!Car"J[KqUMZam4>T&82N^GVa39=js3tt]Mr*Bo<
+k:$iu]B1h1FA)@"d^WuC16&I+k`OjWJ5EH5%&GUNX4RF"3F-oor;AYl';Ci-"";CV
+\hmEZUF#\SfjMT&)h&V/4),L59o`L5Z%tqqKS5.P5-u"0-r0IYL-k:H[(oSpNfcme
+:!1!NJ]iOOc#A#s4BD-tHS!'Tk7J4ti;dO1LBuDZ`e>:aK9.4SS-XkP+br7D>n_DT
+aQ%*2G4OF-f*mUmiQiIq.?&V[K[TV^V.s2b`O1M1])Y[jBhk.tlfsMJhY=g2[GP`E
+DStkFU!AbbrnW^>B=(3<Cr@7ZXS#m9AP@?fC(5*#dA4>u]rOGG^I/,8SPho]jW(ak
+PE>9"6;U"bS2USd;T][+nHd4ok_>C8A:]??G:@7V^bBH?h>tfFWeJSGL5+X7)l[m0
+Ko)%9dR%;c0K<lfVB[d,6\@'U+i*@`]?kR,!SOn]`r0tr;tNG@k\pd*^"\b3A/<WV
+1F&p2.'^'=Dp]FB":"oGO\iWL_/s*DcjboO7c"5>;RArP"dB)p1(6IUD?^CK+L[Gh
+\X>!\A$I!j)b!RB"*eGh#fne'aHIVWbQ0D*jitl^A.>1O5>>o%\.QVZ8(F"c#YngG
+*+D6SJWUlr5gYOm1D_Jc\Mbo)U&YcNN?\`<NX#ce*(`*AahaLH"VP]R6Ff3LV#WM\
+UfLBu:gGOk+>K!6\ja]i5&*X9D3C(A>mI>h#@,s%AH`nh"+uQO=NnlFadAjHQpV=?
+FN\XO^l_1/DZJFpEgh#OdS%H1m\[pp"9?X`&Wg]P!<f9eo9m]&.FdYG@1SpWKVPM=
+""i]2P+'hm:<f4#%+>ph+Z"]E3_Bh%-Qk::clAN4M,mHO80F&?p1)1ck<TCNM[$5P
+RY$&j$Ki@D6'&T.:AE+T.BL[WOso-+!+RH*3'j#&$B#\lcQhV;+!XaBEE"rc6Rb]h
+GKcX<:_ZH>.]!cWAe&17H1m\*6oV0nHA=L1KM\WW,E25gPF9RL")?'W;M?+:(K-3E
+$;mq)<)S+f$2+depbQd+eDGn)_J<i_pQ`(fB2?IaM'i1.YRZhQfdV><LuB53"<>#(
+`?RZ])J>j8(:hk'D-gc[MaV`#^Y&+]>X?W4VR540VDigiieqW8MkY5^"$@;IW%GP]
+0'6EnSTF4Qd06e6UQgS4:W]:g\nlnr'/Hpq*,DZ/;Eb,l!p0SiBmGG(IRmaDem?g*
+l7Q*c`SP&gH>aMpRMV@)hgf]mmj7D7p\OR?9Efes%KF(b[ejA=jaOD4FT`O+#N-R@
+JM:Bk_H9_6iG9f6E)$SOG]*gqg_kn;/df:PLAkYP7>+TG+Mmb#p#8X)M6PPc`Rl`O
+@bbmZYVls2pkXmgdeZ4fibN[M+OQnRm>#Bk!j1#(ee%_u?#kZ__H*E!&27ZSZ,QjB
+3J/&H$k?;o-83SGU&j<_F.(]N'u]n539"aWM)2;P`YY70i[eklj$IM)3&Z4"Cs$_'
+L4[`SY<q-:Bq,d<K>e)a4)"dsR^=E(c.W+'`ej_kZ_jAAq;4F>4[l5)Su9;J^D>4M
+`M)hIHrt\r<pMmbTf'9-c4!oRB?b_#p"PDT):MsYX]qMWL5ae&"%6sL6`p!PbLLoX
+]s56[ZSdR]g=k"<'O;`8o;:BnH,FW=N>]9Hk2b7mY<D9Td=/AR,fo$W-6R==NHK[M
+au>e=Rr#)10:aZ<ZJU*Lct7-tllXk^B/T1\\Y(p*d)TB]@q&#$]'j7a]c*Aql/")&
+pMV#2)F#"39]a:)2]]ZCLN[Xn=amfUkQ]',ADquMb.3iqfQ[prmQO5Pq:?%lr<&QM
+re#k`Da`dD>6!pCn'cFb-0cK=Vq`;jRHEpSgt5sji4V_&]'i2USSP:s:i]$NXse;'
+ULnZGqq:cM%IP5iLc4+\H98T5in`dtGDp1845VFR=j&C@?N8)c`ph4Lc,8Vo)qC&L
+qo`TYLMu?74IpXub!r`VE/_KRo)>/V1sZYaNaq's%s%#mJ(&YJrSr+-+"dJWa8%g(
+?+fkmYj7W!H;&ht^#ssohZMDV5D,UkB(^..!u[ok$[/FC?2%<._VT@-_WTeZpfR^d
+EANNJ^@%Qf.3O9TFOfG0GFOk(k99ERHhK3*g[D:(ec-_Rli'uI6f`<,r-CK.X1J84
+`9g=prQK*M%-G?E$KE\`!),Mq:^$dC4TTLD!Da4,Y<^kRXNM$p#;4d^&3.H:4O%B/
+_QN7Ga_q9bWhpsodDf)cYZf*Z?H>b["i?5=ct`h^DT*$ujBuBH/)Z_t>iSMlrigkQ
+Y/4`]L^+?#L/=!=Y.gb^Ka#f&^(@1H:f](R[`ALj!O0#JYe%nO^C,s!`mDa7&B`:[
+?OMqmg9B0;&,b0I@-rm71b@SqD&j,2#YZrChCVA2OLYnGq$?Km%e&\:YkImsG7X3X
+d?(sJOVZEEDZ'p'&^TC=D-ILs\F`>>'!X@?&NpO73/6hl%]oBXWqQm]6CmW;'_+6r
+nQ#iIRg9Tf(2Xm;d.8$0q%A]ET8nqdn37`9o*R&O%Z9or.Jjs%DWGeJd4q$s.JXPE
+WmEJs(@@^/Z#J6p^A)Zqc\QKYN?K,.ZI3I^phsosZ-)h2cPt8k(en36Ojqd=3;;pr
+N=k=m&E=hXlM-M!+*$irN+X"_h]OWVgIe:9nH@RO%iZ,ge'Ht!9j.aa*tg=<*O6g6
+#tXi3.+?I23XjrImsc$a559#)eC""9;6IWI+!^>SYjk`uZ,II#0d\Ii-4bkJ;Jc*t
+HNZ*(-PAKgED!J*K%DbX(lC$iEec(VCF,tU)JUuUO(Qb!HQ*Tg.WSN-'!.ht]%XHq
+,E]Rl6q5SD:tKST/97R8+upZa\LeE..So@^XRNp)JM%Cg.?Vd+d`!<rPeaTmgTc5]
+Xhug_&rdOt^2NenNS_#oeLXT:@rg68/ZT+3q'0K1/b:,>P:YM[m3JSq/5\kA')s5`
+5r6b'1ihb+;b\p-<X0/ndO^?:'3Qkb="L[T2NpcbZ#p=Mk81@c@r1*_Z[".mK/^)p
+L[rD$1Q=#.M_FXkERMfE&AKpJRk1n=jD:F<Z_F(5Y0q:7^2pa4Zb&:s^5WfCeC)l0
+O6W`=/re*r4\dRlN.F.;-Oo[\*hr$<ng*1unNJbr5AU]l1Y3YQ1?>e?445$"e'g!m
+&O!K3&<m,LoG9\H2D33cX7Q]bZmQIWrq,h?44-%IPW\7D2+)7"KsTeSa?Mpc&<7FY
+72/lmoLdR']bZDg7T6\U&Xts@Bh'uZ7hdHUkW_T*)YfNV8/-nFnVJGci4L[88FsM&
+1*o!/Vb/c"8eO8`P.&%<Y/$]G4E;_H[(>Q1)+t[!.?\O>[*9V,mjrCf4R#E8'[H)F
+fh7Or:2B"aN%Z4dkj&rU:@[n>OkTA$+]#;J5jC'$'GXI5\PUdlUD+j"<4P>0Er6Xo
+9[tF_cVIGW\O5p(:@CtWYHq/iI[JDR<!k>L&i0?K;,oH`<>>U*Q!$lM:^3*06+'?d
+[:`@0CIen6q_XJ*YJF;)buaP^8p,[]PbCc.OR!XH99k\=#if'QThE^Z^pTot[Apr`
+Y3f5pT5JRO&)gac\E%eNiY$N@eC;/Hc:5/-?#=i'l&<[uhW!)G>1ERY[C&;#nQXKR
+=)Ar][BV0H!F(in65BH*<$tj-&F1)H>1O?j%o6WA[6sMr6'`B)p+5@V_aP#m>>Gh8
+26CANg'6+mA9;Nr't!'</RDIR/J&Q/p/bGE4tio8A^loSQ2bH6APoRum8e45<2XC%
+X\'5fBQb6lUJTpOUn;%59.BliQCDS^B50%lBe4gMQ@3Lih.k.@k`1Dr(;/YXUMBJM
+F8!F6f#MR5s"LmLD%V4RcA-9/'lAc.kqCtZ:4I0R%RF.-65K@S1a\GfYA_hBgWkRn
+Y>9+<]0l0'#-NF9G9$!O)atPikq^U0m]eNB!q@'aBp<=QZRY2s)N2'\FDars(9^7F
+;/<P&FI,pI0C(EsLNYMPFk4/s'0Bt'CMFZ*.?9k[pO,]["MhKrCeSJdXs\I0k;FrB
+GkD"#GF(MFTV$Fqm8p0O1_k>sL>fI;H$?S2pU9CS_*SsMHB]d8/:e(%V#D1\HIpgA
+pX+5M5;u[)lPJf2GNRt1g>Wq;I+Pn\(\[24!IXVp8oIpX=1NEt%=qUp?hE->GTD-q
+_1:/cJl<NZ_?'~>
endstream
endobj
87 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
89 0 obj
<<
/Length 3389
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVgghJGY%#0?7\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="5qqkJ2\ZZJ1RY'*AKmL:6B\%@)D)j9"iE=DCg&b9$\kr)
+),Q/M.NR]*'<.)AF>o_N0V`p+fO?e2.?ree>];A6%Aag(i5fDL#*E;6G^2i?%>0h?
+#,je;mg+]46j9m_4NS$D)FOSQ]H90p(CgQ\;6<;I1=0]oJC9sn#6iLA@;t$:S7A;=
+`s-$j%$2B3Sr-"4;*j8@1?)+;!gmr$LIL>6"UAq$U6/%^QV)q0+WC$ZL(%JeBK4$o
+]c.H*RNePl:f'3CNX#*CQN79\_Rqj%J:M/I"sJ$Z)[?ZDEZ;L5!/<1eK,El3$mVFf
+&.C'=cEs]`E6:1%JW#?kN^G5Wq2N_#C-&;gE6]"$NY@5@NPaUcj@-mOC,e6699/"!
+YkV,\"9TLt0oZ9Cb,$q)GfVY"Nm"m!]C4/dnYHa/&G*7pZF8W'WSjX9NPg#!U5j0'
+%*#_hRr!kpn-fL>.kj'uieOdSL>oa=@u22GDOg@b.3jqa'Ft4Pk,#($5ZfcM_.8Qd
+$8aRb3"4*2_D//,6`!521ol]P;54EB1!ubl.n[@Z]eV2D139sWatl_iM*/)Z5T;WP
+j4khH6Q"l@NWYs&TM3\Udf(G3C^"$t#e]7OKrU=*]dtc1:aunV8np8<UG1sl;\g5+
++Mj.]+UKKjT[=(+"-D@o$mQ>32D"/rhD59HPBUBQ:nZI67<_]Y$EVb$1C_C-YWsrR
+YaWrH";Prt(;MMb^(_#$E8Wd;JH4gkgZ'DZLoIQB-L_&7]5HB,CAK#ed$?60L+6,P
+B%iqNrM#6(-rS#Q1!;Q(L^mo#g,MXF9Hl7QF#HfC#6AdSoS5GAGsg^s6DVn]:e"cp
+\,gas(l(#_es),gBZ#eh0jCm:K`a="2N4DMkaJJISAenb&7@dD%U(R/(?/GjZWm_@
+4t%4Vb6#W?6:6oOH\<4MK-A=CI$5k9N6[J/DO\!XEC,:saU1Eq?$fq;6SD6dht-("
+'[&d->p"b>(iclKEa;N+6DJ-SM$ef6XQiaRAf;3hb=FoDaIE$k_/_*LC,q7UIq<W[
+5*SFH?#qB2m5pmkX[ZY@5\!gu.Y)(JKb`Oc2!nN/`Zn:P=.C%Z!_9Vqb]mt7Y=45B
+\*!WkF(Yr].4-8bBV!qJ*+NF)Yq[JJ%1Nu/EM/sP(7*Gh"(>tcaU'.:A<?rKj*t@Y
+0JT:E5YrEL&n?q"%AXQ^(di<^F/VNj'^*]c_1O[Zb?=$c2N$\MF7]mF<OaW7[.g/d
+)fH:=s-u@B\m%6=%ZjE-L@@Io>uV&CDOocLAmWg?lG@G"V%bi=+MNE5_M5-T&AlEk
+]a>]qCdC`M^m$1pLltYPKhTpk6MLm&0QdfMkbYR`nBA[^*sU.eOgXb*'H<g#A>$@)
+Ob<WB5m/*=.p9rg:gEl>+]!^ZAW"ViJ..5peMmmu.'XXL%"U`t#7n$SK/:J!!f1tb
+Mpr;&KKO=?_u"XQn.5gBKY7J]CNo@n9Z$Jl(g"g'N\=E\c%bFYc\m*V"e;$b#>F)&
+9WOC5[(]"MGTF[mA6hoc,d'#T'>k\T6=l\7Ui>KV@_s70EI#\eC#M1C)jH/`IN/P`
+2%Q95^deP@Cn%rq*0?p9Rg72sZ-[)#!YYs!TV+BL0[..]CR'H:KKMIgk1H?jEeEk8
+g)NSO.UOpG=2g[dc^-^RSNLkcjOP9?F/6ZKZ9Xlle]KN^Zj7S++:<59)SCas)]3@S
+?OTJW[.@oX9gCFrZAe)`TVC"8O>8$bPeBY$EaU0O(C"I$Wlcb$2qJmU?,;4@d>1?U
+;FNom+jJc`\^auT!]Eqt:.@FrOTkhO7UC"43N4^k)m!SlUCZji]c.+a?L6=NoO;kG
+\#g%erC@Dh5WAuR>o1[hfRgoM$r48L.*_s7/lNhCdWJOR"$/JAoch&c-*iNeRrjmo
+hBk=lYjXq2N'ZfRWuUE0509qC:U^th0cG%"CFYDLkg&>!A5EOF%5MkQN1-\!iX]VQ
+.<Q*be>MptCFsV2/S?1=^,2DhCcq&s91Zfc1OrVmn\bj_f#Ik1Er)Wj1'[g7kl`ta
+%T6[W#`<agi4$H/Ah"?\Dt+a!&BGcS]6.VlNZ1?AFA6DmGsZTM0aC2MVCd5&[^I@"
+8k?V(K9HA3&(,R6WK0pt`@=2nU'@AHC5kfe-Od=A\qW'@>1![%-jS>o`9WNCDH71X
+lWS2R:i<4_h<66eZooSB]ldX\/n62rI%`*VMf?S)_&.;(j]Gd])$"Jqnc(=qKS7b*
+j0#V_3riJV=`)@@^f3pgoY._;05Hq3"U1!p5?`@=!]t1&@18f=@bli?'VStbg`WaV
+/#QYi@fuh);)rgd]:A4`72ERlj/jB_:'OC5W+bt8lM)2s%0I'mG2q_%;B6:*--lB0
+AA;jTOWhTqV(n6N'F.7pf=i9?a)a`1]EK`!3gR*JU`%@o4Y/.DPD69_qJ<-s'`gmM
+3Pj9U^R`u5$D8dSl`PS'Qt46N.qc'TRZ)%JD6O%1_R/eOHD)ZR`#Xd:H;mfY:"rjb
+2<8);HXf1WgUra/qU-U/a:q-H#9SKufaR6Y.:kraQ1_EqDVKQd[_UT8F)([`1$'-d
+`$]6VG#*]0Sasd:%3cus[^*-t(!)%XX"?@)A#qi:ED8U*XN]4F:C1EL$h[,dIb`@?
+/\!_e6Nn'3Dg,W]Wi+Y4P[8EsX+;1m*ZEPf=m^*h1+pgPK4cI*S;+:)p)F,:NC>jo
+1djI\.nk!7iB`F'5b($D0peAU[^8i)B@J\M\Q,E,YV6;GY1u=Yhjp[Z;-W@ADe5$Q
+h=J?3l?V*;`i8[P@X)otr>F-k-\TO*2Kn%?'9lf'JdPIJ7gO3;D8e#$RoaYUA,5#9
+\ZR4lm87X_W0X#\]Btb`HYceYq2_g#$/X3nIO,?K/,/Z5c-6Rq2o)(1LPCb%"@Vas
+pASRu=[MbH"e5eWA3IjH6)5Q9D!oAt*^6IJb="rhC#E8fH=Y!R4=b(p_u^,G$:+t.
+7RA)!7-[5CKIDG23opJJ!4F%(YWdaF"s@#.!,>Ma\cn-M0*#DcKieRi!$UM@Q6n6f
+^gQ$%kRM"?:i:_O-85pA7Tr.J#)-0-M&]4O:iU%([_hqea]r"F1?n+rF2^PZ"G0s<
+>.*h-T8`ho7dsYr[#9\@778JFT]cmLqHRJNTqWZBJ7&S97LnOcH75BR8Q,nScCN43
+V2ANS,u!]dk4[r&%`tftj<1b1<]H/3qCe`2DWoc0Sr)MbKqaAP6Ip:Yo%.h)d/_i$
+Nmn4<DL1LNBPF]UOYfBN9FP]1>tB5/9j%5oV#!O$7P(&iLN[1(ki_BBi5i?]EH#Eb
+l=:B:pl)LHO^OG!"9G4u~>
endstream
endobj
90 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
92 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im9
/Width 256
/Height 86
/BitsPerComponent 8
/ColorSpace 93 0 R
/Length 8367
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,fR'-m/R"*J-Q8:mbY7!$qUKJ,kB^<\5,H7Uo<*jE<[.O@Wn[3@'nb+,.[BE&aeb
+)$:k/"98FD(^pBK!!2!XK[Of>"TTn?H6j>d8#0$s;MZm$%4d?'a5?t0!"K,3"Mb&"
+!+N9!Mq.m$$H4XBB=(iZ;@-nuUBQKQTofZ2a8d@`"_,98pb"B*[GZ"+4=#[8!#]";
+QRPJ^#Ub6/J-(f4EXW2VKRamH&-DZ=_WZ)F4'iu1:"3Y1J:%J1+99IiJ,m-o9(f*Q
+`@RI&^2ll\i,E1pW%GRu";omrO>.^oP;C@3")qXbjpck+k:Cofh[@-Thsi[rSg766
+41>F`(uSLc*sS1c-iad$G5^6jpci,u(Q4735Njm9eH*d]'%eBY(d@]p!2LI*^?iK-
+$,VR!!1!i4HVf;SDDRFf.fjAnR=Yh,,d2_+)KtqNWZ-?n`Y"(h[_L2D<"602W-k9_
+!8;JUY0O6]ME\:Kpkl/R*+^G<N\kSQamtBEK*;W-V?\JVR`>Y%$*-1@4,i6--HqMJ
+BdZBV98oj#&BFhfTZj&/&g5P*Uk8a41Gk^mN5Kipck"XP-r=t_$5K:#g)pWp!(;A$
+1<S;ZgWskCF$?8F<6%8QN"$"$atec^M#kHP$m)(XWXRP\!:omkVk?)Y'MiH,!:$:r
+]fTN,2#RcH35H#<%QK$h7d5HFF5?m!X8jJM:N`4Eel+$*X^53>0EU-5nq*=U6LHNa
+(*LGf$k]CF9^OnCO1f1/JPoBu(/o>2Z[8q*PDa>9F%&h735Ijg;kUqsn,NW*0J_D.
+^oQor1R,Rm'VN_$nVa39%=MVka;,#0J,qOF3QeEjW4E*G^&\G]e&j%2f$aJ!MGO#e
+ClP[kpf>AYJ.:\$W!Qj6+<\M]<qIa?EXq>a!?D''Jhu%2,u7o#kDA&5mV/0VP&lPC
+C`3LC#UP#`4qY@,/G9]J;m6h:-]qLW5@uaaGi)(rf"5b]0[^+"CcLRoqhMK8CUaPu
+Qr@5mNR0l7Bo%Ws4kAhuNWH(q"$q9PF!FCTlkUB@)J-ab=:Z^.C>35YbhuDmKQY'l
+0*;s).@<<W>`Jp4^a&HrF0l0:^ApBTBnYN>!-FM,nY8&]3?S;ZF!t@Q-SGSh\1>&i
+Rt(O+.kKU%,lo[Cr6ELlYCYWHINJ^PKN.^Q)F\&(BeFL"I/F[H8]Epo!CC#n%'0OY
+B;DBXM%s'%n?RS"cB6Z#l$\C?pD!75kR21+,t`TJ&u=_l95#t9i&1Od1(\9[q3=U'
+,nlCSmK$+_4@qdMXJ$12DiWllIBE1W2>DDk$YVOiM!V%6YT-k54%M(;Hj#'*E2&/e
+,"mG<a/Lk4pXAU:L*/eR[pTVn=L#Pp7gY.eG^c.B4?mY8<"?iug'`gP10$jOAL@+U
+!s)<k!ejX.2ukdmhYW^]J1\A5f(+K$6[FklN5@<IcI_%F;(]!**j_5/5_sCa#S+*t
+TQK%k!!"K>%#.E,-bot\MEW5W?1WV'5p-W+l=.O@c,ddl`h)gaJtr]DV`<-295"oM
+1"7/ai)9TjoDL<bV*=t<8A)`'+)]N+4?$XpKMa05!H4J1T9sNmV6PY_7FA:=#>HJ;
+kUMs1<"q-V5R`Qa$NMi))TO^>4b-?^Duc-d't+TH!;fo[jAZK(&/bmJi>)HkJ-<?L
+BLSOui@'hSF@4`'7A/ud.P.ZVZ^E-?8<F)[jM^<cBFG1g6FR+Q>Rs)-*AiSN),#Y@
+$Q9>S76jcb<p'/[+.3bmk`J?/PZjd+;[s!?3&%,W<2ZaJ%/m-_,`%*j(8h3B!eGJ6
+!tMu$JbhAA)2Jt/-MRs>!",$JW"*^fh9AD,+!TtV,,hi6>o7NO@DEhSVa(G#O=I>"
+^^QVXJ-Gt(0RXs,^c%OPE#6&M4:0ZE++VMAn,P^4+94qK@_akD'2$gXA:%H_Z\#]S
+@ne3S';)CF/i-S8%r3ZY!JW<M_,m"gRo=;2"clc@K#f&>_)r82@#9dBJ3*MAW#9Lr
+8.(jE+$os53WU"P"%_ngMs-.?Y%CGXh:Ts7bW%&a"BqW6?l/lYQiI?Q*"W5*rW@_@
+,u,S]hZ;)#Q]Pl+JT4R<Q+Qkr.@E-s:2C0EQ#D5(;;A)"_X1NI"V,=8-+n@U$P@-9
+*sa\i,/=tgf6f;5N,]R7@+KgX0N0b5X]qSI=:iSp+pXUA"9VIP#(]9$"Q4hlOT6.b
+'EhccitXk=WK-B%dnC410J,,s]krmE9n@lKV?c6'"G?AA.`'o_0&Y1p!cV4i!,s<X
+UdPgT5W/ih3!RB5=9sIoEWi4i3g'/1Mr:$IJZrX2]6:!/!N_5Kla[i4+QDkR;D!4Z
+e8V1E!!(n%jppPt<!JdB&;&SVE%L;ZX^H)We)hH7.kVbBG)-6NljNpbm+il\00HFm
+2'$Y0:VXD=MbbibT.m[(d)8sEBb2jn5U\Vto_9.'WVuktpb\4G6l,-n*XRB0q#Na2
+&&oU8N^1)k`un%_`Xj!BaL7q\^^p];S9&B-K,A*#4$E#OPo6m@0`WtZK06hc>ep;Z
+]l$:-KBY?]JQOqMi)gjpPYqfRAc2]2U0a<PWK(jQYQ:D4>Cg#a6@b#U!+7uERm&k6
+CO7qGMKa3*S_Lb75.&m%j&gi#kHE,a+:%W%.Kbl@6%DKV"tfo\K!7rn!8&[VJ/f)O
+$h/QEn/"Of-CksE0'.VLk5hulK)j-c(WaU@:ct).DTV6EG\e.N+B/?J9m6g;huEsh
+#2WY.S4,^\5O81h**;\@%"V"*"+[Tf?uCVL5gU^oA/aJa'^u;]kS+)C/.$FHBt;#%
+$\pA0N*VYCf/+9aIH<t`Q]M=)^]6V"4er3d\`&?P;]<K#Y/);9H_E6'1'ZC@!s3FO
+b!>]KVncCJ!ZON1!<t6q?u-;Ecn#A^TFuGDe-PjM*Ti?T(g;WI(qdL%@.8:',<uHr
+G'Gp4^fB-K[[\+70FO%*BGUmrn$I[3DjH7,.g?j#b(?ih+ol!p"MP?6Je0c:^^g."
+RK?kNT`[1SJ0_s=)?LC0!+6f%i[47e0I%ud3$;n\DH-MU1a<:a>_4SEMb\_/!lg$I
+?U?5u:?DPZf(BMl"oru*i[Ou%=pE5Z5(HZ;n)shG;?[MA!oQZR/t)kb63AbS"!BT(
+^^:/$/@7c,!e;DK+;UFj/s)/E!DQYrDR@rh!m-M+[4e]c&AS9".Kg5VrW\g$89+a(
+H2oX,,-T/G._5j-EpOnu"orDkAStm@6q-#F"@,uj/91_u3!@#[$%OW2+?&$5-j+uP
+gu'.S!%+i+%ggJL!.Z0mKf/t9+>_BMeV/*!-?]AANrr3:cqggIlY\#Mp5TP$]k^@E
+!-eJm4KG-$#R_t-5Z@trBZHbt%a+W!J3jG?<<Rh!"Q38:KMho&8d"F+!_U-+_R]hc
+Ca.dW!oPEs5UPb?0EFE\'6,iR-[6jY#6LXHA5:ci&255&?m?,0oE[#d!Xu6u*!1jP
+(?0#MB;iJdekM(HSe&E7+C5:\@]eQ4"b:?K+t`qI<!DTD,2b!U!)eNP;?VM<f&F+@
+!&V`h"p4i`Q-E>2^aeW%49B=,)fQiC+;E,<0EDd,!,jD6?q0_t9JU4!mB0KBE^VrX
+2"8@3SdZV*Oj50[PQ3Hi",MXH@LN:q>R+YL-\)U.J7o-?kW1t4X!G[dJ4p+h3ockS
+"9;"*/QMs]4p*J]!l-_KU+jio^s8SueBY?#cQr(S(@smH*0*E4NUn/E]Jsn/P#1Y@
+L,B>d<3Lm/!Tl6]+tNegI/ALN"0gA\JgpnRGR+fGWo-b[5]4L!$j(r_#,#)6+q+R:
+WWVPC!MDa_+A!cm.Ki"+!tA?7+?fm'*!)]f"#>,#i%+p]=9,G]/rF]`?j6X,6;oSE
+'B2&TP4Ua&[K&(("!TB,J-.c=!/OFRFUdIX+<1Uj2"Ns?-uj_X1FFNkmK[-*!WY%\
+ndcq[0d0pt2Xbko.UXIY.Kgk`""uJ4J3!e*.-j,B"!B62A#SD72Ee4E,9RU"ZKNdR
+&9Ee\0B+P/duoZmDX4VoP#/_l5Q`q,$=d#L*[W`%_C[0Q*$V%!!oO.-@O_K/Zj-.&
+!FSe1+E9eZ+pHFXHk9`i?sEkC3n8a7"Mdku+tNcq49T%T6U37+TJmbjE!$(n$0!]A
+?n!A+[hA29!.Z"7:Sg*=a@otoh/Gq"as(=j_Ro0S,2b4d:HB])>p@85@oFMh0\3[3
+SohaLdNU.B+CGHTIgrdQ"b:_b+u03b;^rnVeUStL^g/-<.KZ86"TUtaiZ\L*6j$>-
+!mN^,!\et>QV$*_/]'1AJ0+OG1]X0c!AkZREe"-D4?.+Q]CbkBlB*KH2Y<XDmG]iS
+`\b`1.mah9,>lYb1?\b]PQ3<7,/?=S@!P4.F[b51"gTZZ?oeJLBEb[!.j.Ff^f1E?
++9>k2"Md\5[42:ir:.[:"&Tq@KGjpb2Br2=<Y75<5TTriU]=d8!Aa"jdUbF]>=-i(
+,.-RZ+tl\Ddaog'>lYO5P)pm863&mi"LAjD1t"#JZj2TS8H;![J9MLn^]X8+>(SL1
+?p"U#=p1'>-@e2]^e+]lEWP)X"<]ilF0Ga32?M?r!O=rknN80!,?-ud\i!/+6ElhW
+o3Y#e,<u[fjCVmtp`fBV324"?FfRlA2)!r="RXfM+<LuAJ<qH2"/efti+!(GhuqtU
+#=)iA__tb-Ad/6(5Qg6]^fM_S1<i'U)0I&P+?BW*3!)p_#p;)sZ\eeA.KX;m,<u_?
+!$2/22umXu1B8Q?Ai4C"\h!r<@o`@LZ"$P'4&1fL,6/a)%pC1ag1+&<,/?+Z.3'Qt
+-3c'R9VO!;i)LO8G6Gc6!PhA5TQJja]ECK+#%1S<;m6A^;Z=\60VCH0J4Kd,2-ce:
+"+VnB6TbG4('2kM!=on)Q"C'e1cN2j3e.<Teat*Liin"t'J]D(!!=qW1FQW5.UjuO
+GKEg"`+)[D,2a@CDaXRa3[2?j"k+4l<Ko&"UIG5f,!mg]i'[aaA-IKJ>lZDY?rR:P
+5tuton2,u#!\aZU1]sgl5rI'lckn!8',rGe,9Rpnd:=hmP=!hE]Zo&9D-#J#I7lrl
+:*9Vh@P.c7nc1R?Wpe*dGWZ)0OCM9sEcH/$TO2DB$isa&"s@pj^fQ''.KJB`R,D9R
+^bIgT<WrJ""?'X4+<go<71fMBF,&NRJ2JSr2?7,3!n<utcDq>-2'qsOEhEMl::g*b
+4Slhq9Q\M7B8Rpjo8j^D/:^B6(Gm@E5o%h#!e<<95^Wh;EWoO1!7O=?^hs>66Z'\j
+"(4q/i*D6SU]H!("Fs9Z2jPil2!D5,K?H"P;'B"-p:pYP-Qj1q:"P5#QOC==h0AE6
+'*cfm5?HciH3st5djcRB-&!&o,@DsCNRpT6@@@pfFJ:5bTK38WGR*/K"di[]!($kI
+C^-P:J[q<^eIhuZ-n<Ss"JA9fY8/?j(]tmC"2HYn=Ps5</csr\!UAMB<IW>qjb7.r
+")ZY,!])kPM.sn4HbaQ43Nj0P21,eVU/b/;TIlV$/gFa2"8(g(F?4GM:'SL[#G>f7
+fQo?h3!DQZ#(U"_Mjp-`:'G$%"99mF!#>Z8kn+SN,Ch.Hf[G.u2uttY:"]ju1@pir
+$Jf*$-2J@2i][D<C^9Y6,60*RJ-27W/d%L9!&/.4!#>_4C]HL.=(#BDi-5F7/cYks
+"JB?3Fts4]^,gd*"[HN$9pu.;+9<T="B$?FTK3-0m5&-1>X1A_JiWp_/d"g3RQAKU
+q!;KBf7sDdBLXkI+uNd(!Iu@H!]cVQ)Bb$+]Dsu6,G6._3laVi0O7g(@p-FH@Y=h@
+#7a"0"NkMTP?.tH>QkF1I:+FIp.tkg&0mBP"1O`#X;1fo3NE-[Tp^,(68\(A1^D[k
+,8rGGJh]V%f;h4m*_k6K=>Pa"f4_UOff9$;RR/46/d4LZoK[d.J4m"RZUY"1#2j(s
+5Wu-Kfit+O"b9JR+>9,"hub)e"COV"i%[hj2uqkmUHiaa69?M@27=@gqjXT0i!ZTY
+@C.43TIU<=^^J'4GU),m]NK8"^^^I^AVXZ@"oIq?5V*&rBq&LT#.ik?^a'%$m4'gi
+VYa$h?q(:W;YQh<!QlSe2(Z$u3WfG0!5L8+eE_jZ/!GQ^O;@7/S#)Pt6j%bUOWlsk
+)48)TetN.)b;Q"<i#Dl-B8:QM_Leik!)<_`EX.,8#!c"RJi3UZ,dH92"r.aR&=+Qg
+*Wt=i"JA9$!$Ptt$j)6KO8rj-Jk(n>r3X`""l#Ol1Qdb;as1.;dG-@>H8S(L63=r(
+bFj!p$oY.oD1=0N(udcEJ5-:d0F#%j2F9RQ5WAn5L'9h:\5Sh?i!ogo`'kdo"F6@>
+J5+1R<OuXtW47],68b`'R9]kP!uaAZ?sgg12?Vd=:"`Dh*>pqA!!f0(fC1s,!*TU&
++p[%H"oq:c_DhT/"pMU+"oq^g]Sn)n+i&V"AJBq%p2IoW+_-t\#!b?#p61i[NQM6N
+Z3!)$)$"/3CVE+j"!#R#i^Nu7;0<i(dMdP9fatgsAd"S-,3pueJ6W;oF9c2m#%1I7
+'$ql=$\MX\"b9b[?r%&A\0Nps"+X=N!-SNjZ7,\r!'T6ch(meoHYP[j=FMFt\rUM)
+4c"P2#$mKZfsB`d2&>%("<_!`Xk!`-Be*(f<o>_9DKH)5BEg_,"R!,,67r:h-j*jE
+hk3XGJ3b)@X%L/]"IZXQ@"G-3/*+Agi]C*bpYh2R>UZ/Fkb%t^pYDhl9=00LU4PE-
+?q:KNZiE!5g4D2R?q["TFpGg/#?f+NJ2<KX2?@29Gi2N_^fUb;QcYek/:\Q=TKiZg
+CPKWL#!-2I?OPjX/0plAo5D1u_ELiR3T;/elJac)TMb9>ecpP!,@Co]TLK+]]7-(!
+l7XY"i'[`6?j<%=#%1c%5VrO+&0eO:Sr`R%_IkhN-Q,0S#5$m[mcjpp)D(Z-O8rYh
+@K6CZ5i@`+1`QK0)h;@YfO4>:"GB2$iA"1.*=a1tJ?_Z7$n*A=`Zm1RQtAJp!JA:!
+@<gFL59LKWUOeN*65>a$^u5:/Hq5\%$Upep5`e)F#_ISHn4`UB-l<EU,Os^E>U9g]
+WO'2.(/#)S"RGbXW6W9i'*Bej5d7&.B`O2^@%1sL()[boDDi*JX=\XJ!s51T.'R/;
+)\%Os+`O5H*"#n(5_+)U1*$p^`.C5S$kNmU#/juELtHf3*Y*q!nMkbA$Gfq5pE0a[
+0=.4&`LC6@a>LP]K>[iMk1F>f"7VsK:l&p[/K,+pOR^E9=<n6l[m4nO<&Pj3$3`c$
+=K#%C&I3q30Q/R+#6k;tiR&dH?8NU]7mhj+?kifPfHf-1MYIU6[_\%d]0OH)&e>0u
+o7#dea<26,"G(f<gB[h!3<I"33$&I3cbO)10nG^"(52c+3X^NHlZ<2Z5]A%XK0\Wa
+&0O4l('fG!a?1&g+_q]0#4,`-(5+s*-jHHNZH<`q?jLoi!qMSQK7LbA9H)'iO?a%D
+L_pC&!pYYL*P/1_IN=0ZJ4^3cYcnTAJj?h*%tn@>:)!jT9@=FU+Rh8sJm`O4/YZW$
+&dACG^cE&1_,+ARL1-o:)$Su0>RlAdO;J'nbIA/t#L]u^('B)(9SrkDbV]ks@G"`o
+!Yp:k!s+PtJ>!/Z5\e:CO]Yj'4\oH-;TjS-$j?[)LaEK3!73XdJJO4j$r;Ek:)*r+
+G[MAC6&8nb"bB3:&He]I-jS.bgN3aTcqRO^L*7Zm&Dh([$3pXJn4XUP@Ehd/#6Ad5
+%',`dRKV>0W%\[5_#Qk9"JI5<N<FeL64\^AcnGfY5^4%I4,HK6!s&C()@0MsbkMbQ
+Y9J];"o6]sUBJCM6$ECGPo"&kmU.(G"Tb2,<Ic7^C))C%ZRMXnJ1)0=!he'?E!<Z]
+Bjq;;:i0\H2"4G9"+[<k"DY8&%KtnOGTmFqJ>b$SZf!5BD#o00VeUj(hCoU>0.9uA
+"ckW@'841E7?E.I+=7?pTMQ.:mEi9BJM?&K&#Q%Opi75UCksPFke,>+!W_rH,RT.]
+cNT40+V7$RpE:Vr&;1&Y4:VI$a=[gO@#,j.jV^tM!J#\Q>Ia.;L?iUJESkVlK[^!!
+5gWj#)A;)H(OQ^FR3.:G!Pi>$jn3kFj9U@=a?uF#JUEP!2'M12R0X(+5UKn6*eV7K
+%8pV)"5n$i!72AU?ZBBPD`tT1TG@V0BFY($5R=ha,QrXcA0=Z+#loJh"WR(OK?`6*
+/T<`UOlNlo#&qkmVE/?qbIdrfp^]Pb2?n]Q(]qKP$3;N7nj#_N!3To=`3Kg;>DN`+
+?qo:)O>I1cCbKuDc5K-\_T/5"+a:*fo#'B>"i.K4GlTHA^ua\YhJ:C:^_sjQ=A8tW
+bB*en;7ec;0Er_qf)q0=%`6RU+_38KOV/R$83$nt5hqD&;3E\cBS$BfS4!DY49n!1
+'EUNb#)P&i;)%e$*#mra!DlZ$_.YJ+!.:sO'#n'I3GC$0Gl[~>
endstream
endobj
94 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im10
/Width 102
/Height 93
/BitsPerComponent 8
/ColorSpace 95 0 R
/Length 1759
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J-?%l+UEHT(^bqJ!8q69'F=nm,#L=q<\5,H7Uo<*jBs;R%gPI1J?V]k%gKqFn_%H]
+>q_3@K0d<2C(UdX8n%6-K_BgYN!)KKYg?o3'F=m#OQ_B"SPPUT_SM>T>Uq.c6Y1BI
+j`WBi$AKgjLfcRC4Khq*+Q/Vh/Q\.akB<o&F;bc!Kl!$CAYSL?T*#-<5bLklB"m1X
+;qqp[*"fL0n(>:KC_dNek&NGOY'2Ib$"PJbWnr(s('Oel)S/rnkGQs#_*H@rZ?)2]
+mQip/[^qs=fE+?hl;lbA^Yih9>YT#n3Q]Tbp7Vt5pF">,D"W3O0IpM_b%a6\X64hl
+i9]aAPE9-9d=CUt]=n5ms(BgGCVHEFVr)gK4R_:Zks+StY5p/X,Im\;0LQQ4JaP%:
+#/SH7QO(1+1_0qmd(CY)6ZD%7$c-fc7'Au)bP)[K&F^\8_NA;S(IeuFA=#_>XDXqe
++BrOj^sUpu"p(l;CE#f8gP$ijlpIm#`,LARj%8fn@33OIbS_ZuaM`EL!OE0(S]d2]
+/d9H4'AG99aaCiIbtp7?2PO*f?JEC1N9H/Eda/joc?!gZ0Zh\l"$oH+]$3K9B^F,5
+:\.i56d4%RrCJ1Ibo4c"1gMh0cW"a537-0N]1:(D*D9=&1*l<<44Kfg3_.\R<EW=a
+gP83o[9[hk<>5=L:fs#8NFUWW9pK;CPlLhjagLMU:!E5U4\8]jD7+68QKjr@=uID7
+ESQm4M.a>b%C'a)f59>RJ.t^pCgHe;m:0E5`:8!)23%Qai"uq-J`)nJ%9VIB2>;Q-
+mqs/$iY[\%M;jo*/Vr7=bu9PZp(ffPj;A-'OlVo_9p=ZQ-5-e[Gsu'%AWVhZRHBp<
+<m9_Ec?5]@RI5Koja":Hb^s"K*5Vc8b4<#URU@eHl5G\ZW2s1*XfLb+cF'`'RdMrn
+4CF6t$A-('1(==ni&VANi;c1V"CWED&qo#<:V2<"cLM\<S*p+fE#]Al_=1l?%E%]U
+:DLk=HMaQG!fE@+&;6`J=r<!F\9&bsiWt8_#f$s>dI`t_:"/bU:K>s<=O/%sK-9AG
+'Eu=OFs-IKcZS(<S_er(lsRUg&;7l%?lB6ccSci"_>&O'#U0h6c\R/qMsH2UcaE0;
+T's#Or#ZHQlMR8-WZh<_:XgQa?Z4coj^=,l$NgCWMQ8Gb-B"WRhs^LChuj(2:\F\%
+=:G;h6j\?Zjb03Z-IQ*CAq%O+KG%dnKUFV>K2?Fq6+/bn+DYG#0M2[0=7B`6n]kR%
+*Yp7@m_/[(Wbaq"$\<o.g)mkD0ZW9GP,3Q>bbQtB:.?/1J2\(Ufi9H_KbZ2(P%EJP
+A:CYV%Y;td;$s:(0^>WM-"rta!6eCf,_Vm-19cnjWL.]\9soQA4pRi.=bh!j;h3m4
+<5@"#":_^K`F<ZsiSnlUTK2h_<n/.?"FC6u>RWr?7[hiVF`J&H[7HBJ-,Bj0O^Moo
+'XXm*Os@e[0t7e'q(iu4+;Z<.DGR)86N%4cDJg(r9bUFE6B<TH=$SSJ[SSm9jX;>V
+EaDqin0n\UR_Lri$j]'_2(9jl_ilin>FDkNQV`2JD#el[JfmW3,Bt2g;]s1UUTffp
+P[OZ%J:]]d1'e1#S1YIY8>Tg@"9?&LEaXo*adB/#i`U7pC<[EBe&HXJe8PMrZ;!h+
+:EWK^D3p4shuU@D'kk-HQK?'lVaCSq#r+3/:YIRgGV"l=BF=knP(8*MAkci6H)0^@
+Jg.uF1J4JSV/8C]1=L36c.E\YZ2C[OZ\WI\14(,d~>
endstream
endobj
97 0 obj
<<
/Length 2377
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f-k.S'AnS$-_OG3uLSd'9K#gC70uLj$@Y82]X@[-Gq!l)NZZk$\os?
+V.=0u)oAUOntFhW>8/"ck4;ijfP*4#@D[XFUq0MO;FVmGBZt-MZ!#$K&Hr$eAIomM
+6NKK+;DQ64Y!ZEdV\gO/$3hi_60Pg-&/o-BF"SHn@6,9"Jcc=k<cU6jKEjk1aPM%q
+RPnc:6-SSq1/To@1O4r+CbjB@#1IjZb%qV0E5ll$g@9J*60^E]VBF*$2HmB]6b0#K
+eDbP'h.t4MYm?%N"sW$!cp02Yp8UH2i6E<&LTE9eb_?/I+;tG8pg2#G&85#\"[dgg
+'d:q>4rpZ=BW)XmcfuK4^^7l"SgVY^KVC7IQrsVZYukEB__Bk,rrrQrg+]mdR)[@g
+&V?$p+O>WT#/:\Dm379Xg7YDs!i("&N2)d*2@bd(W>e>96I`FqbC^SA2f0+Jp+K(s
+AfM#Tj0l<#cS36*O!.&1ap!c45iOcK6u^V7T`Eq*2f(kX)$YX_E5i/7YYYl?%Drb7
+NY7033=drV@k4u^i8mF&j(,mC/n51Y6&)(*QUQq0UJfR#_]-8C:U;5e,,$ep;!tog
+Li=%8Jk2=UMLbk]hi(.o"^VO&#a-P=iZP$8TV<Hs(kpt:Y_NG6Xf`KoJd@/UZgA*+
+3K4,f`Y8pMOMp>;_3;u$165Wl,`[nbm_$P476nj?ZaejMNYP2dkdkjA5ju?ECWS)6
+_ea5B":KPdp"o6Ahcd`l1[b'n!Pi>*5B-+#4:M>X7%L6TqLYE$9[+[q05tT5QpSV_
+0d"tbb6%Z4P/MD^Kc).`U^3n9ieFf`!#n6g_5MAmKGSYi(l!?ej>):\\3Mue#qhSV
+C!X5`KOaS')MSSADN5R7BbD[.TcoRO&-ft'!&:8-G`jth![->(m3m4>R>FKHeG'O;
+667J,!nb)>N1*#\V/Ao`Dmh*t=;i)%W2DAK%@UVd\q`Dj5L(DM-Ss-@O.N#%U&@2/
+bk.9`7)!g1LGd6JS%!7co0%jdi-"p0D;KJ"O)NtOh%)$IDV[61cLkHJQfRmS^O!\@
+hU\>=,&%"=k^.hqr/COAH9_#uICInrI<qfYYk0-.9S&k?[P3H/kmQ>Vf&L-C+Q/:o
+1.hrUE%hKu5UmFD:^o^B)/-4@)S5(pqOjW"G-6P!_.SGti2cHmce*e5`nWld3IW,'
+3W]IO56:k;#UY5X$GdnjRGBCX+RcBO6^PmkU$KO=;">\gGN]-;+Tjmrq@nR'!=L#!
+RXu+(c%@-Xm3'2$MU/]]7CV4j@_9U8nKno;^d*Jo,Z'369a8R%BFUNN(PcmG3(:pQ
+*+8\gKMU.q`_o3O_4kXo:pc:8L"ul/r"FA6fr)M1jBs6@20Eoe84_=)m%$h9KQ6]3
+a79]KS#^W9-YaI5Qkp1l1l,gu%RnI\*>=p<Y'SL084t=bod-tmKX,]V8bk^n'3'Yi
+P,JT+Vac)GI#sa/c:0`aQS%#ec^.KXrlO;t0B&.2"V'$48@<Rq@(]olo/6#4.5<em
+S7ItJU2,kb_#kr4LRYH+kfJ%Gl=[0<DJic&:3lX\h]-ohE,FjUk_DH6[0(e0?6?c!
+B)5h4`1aFZ[5>8s#Q^>4C*;'+bVm\rRc+QgdXmEJ#,2R\J2*&NRC#gjP"/mM\si,b
+O!f,AhT218E"+?;&9o?"-aT=X'`NV]g+X!DbsA0@*i-F=QKDS+$$J`lW$ZNpo;V+R
+"r0b%<8+HQWhWt&Eo+%LpQ&?i*FjIsU9P:+YtZ]`ZDt;VU=@nkmd"FkXmTaVOkSDg
+W^H3TFn%:KVu[(&e)mlWVQO$F11/rbdfH,sXWLY@AHBk.PN@Bp()er,!P)X.7RAR@
+kL!/i[AL0n?1S.k:L2j`Y-II+9u:*hAVgk`ZW(?h^m+"O.Xe"J1Chj1M[=-92060^
+Sk3&-%<>rA['E`fqcf5kDUU^%.<bj?=t'h<,Y8)r<`6KX(?K;erTC`:T(QA.,=O2l
+Q+EcKh%4h<<`n]_]<OhN?5VodY%,?RfE/k"bQh1KjDUPh6J@M_WFbM2p3[Ds^fg4c
+GDQG/RkQlAhs!FTT(R>C%WXPUlp2V,P\7on:AJ<+1FM,i0e=qrVGrD)L1!shJ_$"q
+<+uF<X'R$(1<n,)pSC]]5"!/p:DVc&?Ui].S;cCS.t`K32QeAi^<=)X>PPUIC3Eh*
+(oK%4R/;O,Fh:r47i?q'1D?Q-2S9[*Y/YQ&QZ4'jaHtXE976>-11"Y.Qq&Q5X$$I(
+co=5<CB!Bi5>s=#9<-On[cn^ZTI\jaX1+gY<a+#FlOA]gp(G,S]9QJU-"PJh:k4&~>
endstream
endobj
98 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F12 34 0 R
>>
/XObject <<
/Im9 92 0 R
/Im10 94 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS6 93 0 R
/CS7 95 0 R
>>
>>
endobj
93 0 obj
[/Indexed /DeviceRGB 255 99 0 R]
endobj
99 0 obj
<<
/Filter /ASCII85Decode
/Length 973
>>
stream
+s8W*!z!;lZjp\4FRoCMG>n*B<*kND$gj5]%ShqQo?f@SX'e'lXhccaMTa2c6<_o'4&
^:Lne[^NWMZEgX9Y,\M%VP^5bU8"6NSsl+:QBmi"P*1icNf&^OL5(G7JqAE!I<g*`
F`hhHEH,i4D/!]uAS#F]@:<GI?!1<5<E3$r;,L%^9h@oJ77BX25s[Uq4?,;[1c.$C
0JG%//1;np,U=WX+<VXD*#KM0'GM5m&.f6Y$j[+E"9\kObl?MTh3j\TWiE(2Asmje
G;D$e<E3'!s31MeREV(2s(4&Cs-Wl!!&L$T1M16es8N(err<&T1B<iebl=*!s(5le
1G`YCB$?YCAsm8!mdBMebfm]2]829!6psEe+sR'es8N#sr;?Kiqtp3bq=jXXp@e4P
o^q_Fo'u8?n*f`5mdBH.m-<m$l07HqkNCsgjlGL`io8tViSi\Ohqd,Egt^]=g=k33
f[na,e^`4"eC;ppda6@fcd0q^c-=GTbK@uMaN2HB`l?!:`P]U2_SX1*^qd[u^:h4n
]=Y\c\[f5[\@/iS[C*EKZa6pAZ*:I:Y-+q/XK8J'X/W(tW2QYlVP^/bUna][TqS0P
T:_^HSt)=@S"#n8R@0D.Q^3r'Pa%DqP*1riOcPQaNK&pVN/WXOMM[1HLPLY=KnY25
KS"f-J:N0"It)lpI=-EiH?sm^G^+FVGBJ%NF)uDCEcQ,<E,TZ5D/F-*CMR["C1q9o
AnGXdAS#@]@preS?smAK?=$oC?!CN;=]nm0=BJU)<`E$t;c?Ul;,L.d:ejb\9MA,Q
91qiJ8Ol9@7Rfj86psC06U="(5<h@r5!D(k4?>Ma3B9)Y2`EWQ2Dd6I1,:U>0ek=7
0.eb-/1`>%.Olhp-mpAi,pai_,U=QX+s8!N+!2RF*??(<)]BV5(`4)+(Ddf$'b_5o
&eYfg&.f<]%LijV$O[=L$47%E#R1J;"U,&3!s8Q)!<<*"~>
endstream
endobj
95 0 obj
[/Indexed /DeviceRGB 255 100 0 R]
endobj
100 0 obj
<<
/Filter /ASCII85Decode
/Length 973
>>
stream
+s8W*!z!<<'!rrE'!s8W*!!!*$!!!*&rqtp-^p[e"Jn*f`2lg*`skMtU_hr!>GgY:?3
f@/3tcd0q\bKIrHa2>g4^:q=m]"5>Y[^*3EY-+q-WiDqnVP9fZSt;OBR[TP.QBIDo
NfK-WMMd.CL4Y#/I=6NhH$OOTF`DD@D/F-(Bk_-iART"U?!U`==]na)<DcUj9he>R
8P)?>76s4*4?P_c3&i`O1b^U;/1`>#-n$>d,Tn3P*#oq8(`3r$'G(fe$k*OM#RCP9
"O,*ih;-nTREV\2Wb,k2GB\6e1M0We<WE*Cs3-nTR:cJ21Gf'!!4r4eR:\6eAsr]!
!1Eie!8TF2REWnTR@4(eB$<%eB)cJeR/gieAsr)Tm``o!]=Y\2LknGe6m<g!s8W,u
rr2inr;-9dq>'j\p\4@Rp%7nKo()A@nF5o8n*TN0lg*m$l07EqkiV$ijQ,C^j5]+W
iSWPMhVR,Egt^W;g=b04f@SX)e^`-te'c[md*U.bcHa\Zc-+;RaiVZGaN2B@`l,g6
_SX1+_83n$^V.=o]Y(ng]"5D]\@8rV[C*EKZa6sCZEUR;Y-+q/XK8J'X/W(tVl-Gi
VP^/bUnXTXTqS0PT:_[FSXZ+<R[T\4R$a2*QBd`#PEV2mOcb`eOH,?]N/W^RMi3FK
M2-kAKnY56KS4r/Jq/B%It)rrI=6HhH[:!aG^+IVG'7tLFE;MEEH,u:Df9N2DJX-*
C2.KtBk_3mB4YXcA7T4[@U`_Q?s[/G?!U`?>?b65=]ed.<`W7#<)cdp;c-Ch:JXb\
9he;T9M.oL84Z9A7n6!:770F06:+"(5X7Ls5!;%l4$,Ma3B9#W2`<QP1c.$E1,:R=
0eY15/M/P*/1`8#.OZ\n-71&c,pac\,9\3R+<VdJ*Zc:@*#fh9)&X;.(Ddi&().Gs
&eYfg&.f?_%h/sW$O[=L$47%E#R1J;"U,&3!s8Q)!<<*"~>
endstream
endobj
101 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im11
/Width 504
/Height 86
/BitsPerComponent 8
/ColorSpace 43 0 R
/Length 17481
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,fU8^i2O_&da6nTjYB<0Gb*#K!@:;?o8`06c,N^Qq/GD#Y78>q$\5h-^757;QuZ:
+.5-^7A3fX+enm;Lc=\qYeFn#DTED!@&=?]Z*=rKj63-s@4<+c`_LWh[3cYW5KE=uK
+S8qCJ#Ycetq?SnqB*I"*p:FSr+;5,OK42RZHC>qQ#HpGOk\N!iWRtil&>WDgLVH5-
+dHM-!5:2Uc,]eh0$Af.FL''HJSf\L^%#,s+lNGN]A$]>j+K]7['<g&)G!MU9YSIWP
+KL2B*n:X1R&CU`4TX\#a@BiO7edbD\fk^l>[+7B?VleP(K!p*Ak0n+tg[k!A4Z&3q
+6OAH[_8,Pj6mMJS3&eY:E&XGGENAlf(]XQi.g`4Hjf@`p)M9=bPE=9AckFLl64Gu+
+b,:4i)"7QDbV\ZJ0Z)K.XR;!!LnZ;l\rS1r6YltBBJMuu3j#bD%)Yr@'X]tn3YN/s
+M1T9=6LM1SXW\5/B[jG/gT;!tnku]_`NE\u#cK7)/Ijj;lX9b99mgg^\geU\aZ>Rm
+_'V8Wr':n2E^Z*126uOSs%\aDiAEOXgF/W0N3]nb1JIs<ij!3\`18pHA,P%S%Z5r1
+5k'E&8@8qT5mfY0bk@X>$1c\)[]Q(g,tYA)Yh[8jCEl2;&Yl^a_9&4j2oE%E>hI=8
+bG:=J[H^`58I`$/(:&)m7^Z)L1VYfhl1?Q>ca'UB1KMtiXRAq#V.eH%F$sYYamcDs
+D8slf\Ll*n4`OuE1idAE?5;8q&u00"?S]3q[2+>@d#ItpdS=nh>/SpF39nrB/OtN?
+pKVTf9N>>(ZW5HG_#[S=(+V%-Y2jA(@Pq*la46QR>hdZp1T>D&Q;+?>gU'D5#,_.e
+pMnd5Ks,(Bq<alBAp<YF2eTTGYD6PL>ZjV1q7W7helR<3I(U9No63LKV.-[o=iMCu
+4?7L<Nm:`R#;!KlP_OhB[8opCf(\;]"fh0CNnIq6@YVs7O>Vq([FflEQ#=+g@BeKf
+Adt)&8e,^;9)Cfo4)>[)eJ[ZgSq=7Z>4"PI=\d41:tlcb@:>tY1\h>u>m1n9JTIsJ
+4Zq(QOTE"_KO\5uFZ1mhmeuT%b"jV3>aM4P[#`!q22*3#c/%:kFS_5+@2i_i-JMm$
+HKIr;q`(*Gl!p)k[:)HdFlC?b[\"j*b?%WUR-JkGQ-Xp,T3To/=?l/i&X&eg.h1%2
+-4[O*gTNsR=`BR;T$n0POuY!l\3C5$QdH1>B[%R__:UgEfQid$W%%6]7(e%HF80Xr
+U(8l!EgU6k#^^*(`]Ub)NT#Hd8.RG^4=GO$e^@GaX$'4mkQMLBgauf,q.De!0b[b0
+:/fK<GVb(VkooYU@4oAo3/:c@chh`o.(.eLLrtCDUC(%u[Ne!2ODLXjEDESqPW-$B
+%\ERLC%2Xl6>0Ko)F<7i"I+t1ZkE,,j)S7`fo<WZXUY[?SUV1;d)Ch"&toF6E\*e8
+)Pu*:hcuk)c6^k#(]^^9RgXBJorBntaVeBqP_,$#S@#3Hm[!H)NUd!./sf'KAV>;[
+VSTL=(HdjTN$!Z<IAOh!%$?fkJnkdt5=jpt"s[ZPRk[qN^-fF=>>$Z8&T1O^V%Yb`
+U)KKK"f.W39bnc@q-3>C`le'#80(T`I^2eBYP01Z?[V10/d]A?BPd,_<-CO/dSENG
+0,g>nPAdFZK:nkZ*`Q[ZE3jjU:abD2(Q+8Gd11oXkGK;5*2cRB8\<-F+XO)Yja[^n
+Yq&F2#$q++5L'Rs]uEP_h7WcDPAPM*<"<VGe?c"@>&,_/LHV=]dZb;'">M9j2eDna
+U+&PDd:s0d+[RlN'ZP]iV4?+IP+-mHD(`M8ZV'?/?&8)u&1T`q0</g?Q$&MfVMPH%
+ji[F,D<S)[eQ3ncCWW8fZ;FS#`F;Dbod.cW#tp0Y3i%)!LG#T]9j.j#:a,^OOR<jj
+L'I`"["WG(+c<`UR;"1J0ljL1OO>P2;Q="rA(Bjgf.,rW-Y!Ugot%fEBG!8US5!aX
+l)-C,lU4Un,%Q?L$4t!*ITNT+P#&3^[`*Pd/4q8%%#q48.fE',1@d^f=msoJVdnTD
+Dk"!(A&ABkW`^#nRO\\/9af]IWKf)ZG1K4"l2>KOrH+U<Bq@qc<<-n%_lT1.Y[BI?
+.cAQdMf-P*Z3DOLgL6Hm`&rho2%$%:4'4fPQ!]pNG!p5]f0k=:'>d@n^*cQ9ODr@[
+?`#5p=G94]O!;Oi8#'!:W\e9&L-o;e=aqtQDRGbM!8M;5/!,^oX1.*9=N=WtAG`^!
+PgQL4[Xb^RAe2Zp<].Uj.1p(NU:K`)),p0MF\$59cUNSCU/GECTURfWGdfbs;`0C$
+*[N%L-RU%D)(+8KVa1h87MY_9CJDX*."uVpBB)Qsn,%Z[bpcUZ1/k0XRjca(+QM^5
+Gpd'uK;+7nmA%NF6SqC1`9f>pf"1S!BdLihDRIhI85h)+$UqR.Z'Nm2?#Amgs&)Be
+RccY-*O=MO"!D:&J_dte9_kA+:FX>"/9tp)/_#%LG=CReh$kMQBO")5[bdpCGP,hM
+!FRuhOZ`2(1ZjSDoj)F/"I;>PqE<Zf'3:o_:TEb^WE]6[bd1#:]A]<C1H/R`!OCuh
+O/_k0H1pc71DusP6lLO@7Z/QkagtCoA%)##a.oXNNR29Ub]<!Y`;C%.EG\u<eu$`!
+;u9td/GHP_*"%7[k$:WbGV8+I`0%\)J[&fMJl#0k84?Ip3P2`!2^\Dh/QbMCp.mQ8
+n:f\92iL:n[k#)..BL)*T98!>`d>-4ANh3Hb[mSXYW$9%\b\V(c/?50iBWgE\-G:o
++U"B1&V;,j??Yl4,74g/pDf'k*::j2#%5i^B5Bmh&W657n_A>XXCd\;f[k8DTC"]l
+DJ[bl]KNm:Hd$'5EMIEGcE.@6.lSW0#>F%9?Thjm`qORt<7[UlUee!X"62bp1q((%
+E/sKX2gJ@k0^o;J0&<//LG_W6c0nuo/=SakSG/SoaWcFC*He)GE3t4CoW'tD.mU_e
+[NS@a,3/+GK@obQ6j/Q#3$RoHD_aN%7.[8=].@i@7#!4"0&'hj:lj$Lj3f*Q\3Aq@
+YtGS_,2c9Ajt=t4"6/tT70`]%53qVjZ"/l.L]kh00*?/)j5QR^@eT(sL<j]4i+eo1
+-Y1:N]Hq?jhX9Tp,[@;8$:N6ORHc28/l^cm`_m8o]1-P>X!7HC\1>S/HsdZdU:BW)
+C="I,Aa5dWlNgg-8If^XgkJL3&(JYF*5aD5QnN9WldR3g_D;\[j+89RK0'-QReb6%
+%4e_SmfZ?oE`ELehBU8#/FYkPB]pa?!i"a.Y:_7jQ7hSl1_*(4c#F<q2WRRFoW.&E
+78>@@/Et(+.>!^Aj+.B;0,JS40?j:k&Cur!7gUL<pk['8nA<RdB$ud\,E::*bJ`pg
+'Z[Gj`sXf"X71IST^0p/jK9DjXffd,TZ&=L[n3fB6q50mk731QOc;+O$Rh,BqJ0f8
+RI@S_lgC2/1>U=`mqi!al!SGo._*Z8W+;R?E2)2bC*\j:cRef)bn.gRi$2\Z/h\7u
+mQhS*6nqL(PAPjoMlKSu5lf;8,&cbc&%HLsn,`uh9not^A'"j*&GNEl&AfF,1*$+K
+p>g$^`Y(]2AH`ZtVWFhVWiI9eX`5]V4OK5(rbnAXVnSN-qX(J=%a%DXK[`CB0(2Z2
++47ehjB2IVM!F._VlM$hY27bs'#-,fDihQ9&t'do\8t?ZFQiFSAh`AmD[,Tl]du?>
+:UH/J]e&a&o>]Q^mWOtqBQ\<JhBoPO:Uku9ptF,R+=#89@lj3JU;h"W1GWjZm.D`(
+,99QdgMOOVmD:)B570^l-IE=X@d+.q9Z45W,7k>L",m:0C`n>;!/!&kd8r/#<5(ig
+I1P8l9l0>p(+(N72in1;:2j(t-NK39"Chr,!r4WL>-^\5/eaK]P"[]r&Kk^WHO4a5
+.IT-Gj!TsorMB'V`XI<uIa![aMX27>dh`NC8B>]D-7SOA;^TD\#n*b`,V`j''A49:
+\J[05%ZuumZWdT#4T\EI'_:6[&4Z`k*s?RWe'p)s;m-6&2DdZH2b8*N/NDYZY1rD#
+57PV/`Jh,n3;tNGd>u15d-geVZokOf\q1eVe5n^C>j@A0geR#+DE0P;0fnb\"LLfC
+:N4/[l<'fZ8e_^e$bebjN[`JHq=JY3"Q!Aj$NLU^_DCC[aZc1MUt1T[d'!)^OoGd*
+4ALV*E,YY2Wt?53SJeGTX/i,:Z&_E&%.VY&-Z:";D07H].-@6;1CcP%j4ZHPk<rg=
+rLsXR,$cW1E7%&G7g^/?UF>(66R#5$;e&;d,V3YHeBdJX:LnLl&pH/%f1>DJnP7I3
+O*q.1-PsZ$8a5m17Da5Me9Ofp`Ul8:TJo8<>uS)bYV>(bPG$c*)D$]a-Ob$lBH$#2
+<>`t;5udEQe0#o$@8;W1H/p$cFT1L.U3>UpAPTfsDht@6SPq/q6;W)$K1/q.f^"<P
+'>QFWK(VZDnJ>Z+0D%mAkfE7rLkedoILA>j_MK%K2+*R%3&"hjE,Hf)q$g>-Oti'd
+;'*a$Zn$"F7]_F'dVVi;T_^9R.';#Dd8r,6(@9U;m.7nNE7WG-$slZ9,>hS8YWlDg
+LJI!qf>Wh'VM:uXMW2dP"UDS5MOo!nUoLWLjRCg;OLG2>ifS:-aE!IZYfTLsMC:ml
+/lQ6rKBP$7!f(>79T'g5AOQQO">H%k1bsVkFtW\nk4R;V)f7E3-7*#BVT<];6.Sfu
+ZOF,tE=215#*B2q:e38GCC+u>.#+E'Y\_Zdpd#BHl,,XeMm2$?)/(p_3b@fu$(Cgu
+kfh.eF$uuEL/R]1rm%VGco,(.OA?qeTj+Hc*,1FG_ui9bfI<PY!RP(2@\bK7mr^4.
+3Rd&rW_Q3OA3*V""-bT/2Cp=&oJm!ZhtAX/1i"&VdQF]?4V_r'ns86V+'0!:?C011
+;h"n2@p+[A=nM)f'q/+e\@#68op*oG$PN56#s[WQfhB9EFal+u-[%2:?dgE^Cpe!*
+jS%#/3`:rLo&FJl$YsArAli(i_@pBS+VZV7@(2=L"G9BXRgl0tR43NlAAV.60^8_'
+(O/P9U,+_]&-CD^;Df^%iqjo2M(MX!W@\8P2]he@4XuSh&].rc2oCJ0#tWR;n4(6C
+p54?X*9HI9p5Ph4"n&q"Nc]*efsdP\DC9Q`r:Q&NX=DT?/n$F8BjKa=\r9'=Z@aKB
+Ii2@Gm!-gbj`L"peRG:<?SB?2Li[?KJruklL#oU*.gm$@*]KkS(D1_E'e)5>eh7,Q
+4qB1nnU66p6\!_1Z1m3)'0.n6*uT2;Efcg&<1pB@Y1W7gX=U]"er9>_hUeUDPcK\W
+=W`1Ac8lSHN!*?[L*%PJ[W\kGG:Fr[NArWC!^54!.<&K^D_jaX:3frBMJ*]Go"mOE
+]PZc=ODg=h26<hb/jK&j8nX)GDEiBU8I+7K=/%n5<UY\V2jA'0I'i?>NO7U[XO!/C
+FA46uFEs+S6Rq.X+H"N]Y#fh4>%:.DIqk:=kN%cLP-,W:57-X^<i@<eaL6i"R'hi_
+f+.2OQN^b^"Fs/Ki(aFU<!?Z3"^k42i(O9bFf0P1nsM[$F&ctrq4$uuU^)k$9gK3/
+oY/p3MlmAKLTZjJqKE*fr_Q$[Zq1*thZJHfRu2kpYI*ZDT-CKt.2aTun/DPaom@>l
+8FW5p=3=h5L0\GM0r@T9Y47*TB'69@0;_iVbDDuf+Rj3mG*]`]%.B&?=W!!5p5:"O
+f^WkKH[(Zj"Fs.AqI-9U(cVVF2riogH?lDb(d<1s?ShWTKWQKQ,C^N!Y%.P!Z'`Ye
+T"#FK+S[.Zmh7*YW[c9h">MbbMM@1)EDTS@HI*3dTLZ<AF/O@C3&r\qXVUA)hc5QI
+Ir'AP<Z<Ou-$'R!=)S`^`_9R8QBPO)V2Qb1Cm1Eh6>h#K9/"U@Wsl4W/R<V<1=AO2
+cD)(.78d@aVqX?)\8A?B]t#(6ZqqT',N6!K6j-ma"8[OEO$:4X^OZm5nCm"*>*qH-
+;WMk`@iG&gN!F6?Z`D!/+#L\4nRWO@=N:^#3a7F@e$"t)3KpZc.?oQNPUJ":eFhBk
+IEHu,)"/,+I`LM,5]B"hOJK0u]+QsK@*`aTa8i'<)o]@3'(-Ab1HuHAFbkumpr9![
+@g<\!4[NWBShLtk5YCTc-M#S=09@>GS+@=U4h3gQ"X$bJJ6E,L=9Urd"M>Vg_D=j:
+<-/I5;YP@@W,A$&$6`HpF7`]k1RaH5l=QcI_d$15lOCp\_QnL#fSZ;BR0PS<=TNk(
+V`N9@[:J<@qlEIZq70?$OMu2*rp<(f)XN4Ne\9J5NBQTPig3`MPOHX#i,$[(^3B*+
+Yu@<$>fLhc13-T'0+EX^!MH_I-e*\$q6:!%-P^e*PF%92?+"=rIG;%`HX3*;3%.jN
+]cSgX]-Ul[EKS.ZGj=(=CW=bi1hUch9[rXa?H@=caR<q<OLd8'bdk%l;LnS*eP7-Q
+/Xrn+;`u=2(E,A2!peuN>ns?aAAe-sO1P,=)SUbp+F]l1NS)I[fIjEsG;caZ=1)tg
+"-?e<#kk5B$lrg5Eg&Bm=bbRE'SD1qPH[6&mDb29R_3LW>\Y_W4(o3b&5DTDH(PD'
+l8=iYdWnqcg7Fb1/5r=.5a%SrP>1"<FS\YCRK`3uXZ&?W3MdWo(])qN2"At8hk8_!
+bJk0:7CcDl\ZYk/CK?F>'nX6u;q'6uQOP&q`q/R0"=<Y3jIND#=6D#l=_c'+E=.Tb
+hQ8K$,IlYs"FDa(h`q>`E!2VZ+mtsn>ii(,3:e/u6F%mXF`TlI2T3oV05Fs5,Jp0J
+f47o!aSM[c'$V.D4kmi@0=S=fgNu:%.p&t,Z2LTD/4T0e:X#"YB@K#8QcQ4o"CO8-
+L_G'8?RO<+88iIOW-R,_Cq-_?g;OrAU%et[=j>C=AMb(&'pn%"P'[8Dp:F#]o%Am$
+_>k's"9LkCTMR*R$jM?Y!>(2\,nc%;JftDQ5TgSmK;$ZMCc!%=L-ku\Y[0p<PQjK@
+YiKsg*19L\U#>i0*u9i+-;k-]@Y$h18Ykp6:fo1]$&$/pg1Wku&?,d5i:(\B(^gM!
+JO#[n-l*6s<GGMA2+jkZ#R"PB\n+@4%BNUrQ4"G-b>#HMJs()kZ<o^'aTBtbNPl_H
+$3gT`pjeGq+V0>1;JK2a&IOZ_jgYm&L)qTR$3_WY=K#+H'FD&H.(4mSOq*5BTithr
+TiADelHh&Iricgi<i];*ja3-3jT7_5bIt=pdA?7i[OW1Yf`p\Y/J'DH"+Ogg_-o/]
++BjjAK_dirJ>[Fe^>W+AFe0s"O3>-+/2jFVqOp'&\lb8NC%>StVGKlmO/)d!b`aIu
+QiROSY&f'N4>-5QnNZ5)e:duiibZsE@2a4u,O#mdkd'Qn>_<*N]L859m/'*^K],I(
+(58Gi;A4_7$rYd\n<;e1_fA\YhCf5)b3lENgR..d;LG(A4D6d=V)sTnm(.aU@`G?6
+a?-9S/BWpoVbJ:d^A@rHLb'!fi<p]b8;SNiTKn>@=q8io,]jcTTm0r^L*;(P(56c/
+9G4WRpc=lfaGM?:"0<JEgWdo7I.0>&,3\qTY$7:k^QPT&m7"(&ipf^IMpS1hlAKc?
+Y:)1(OMK4`JI#&/3t1no/hK]n<:3IQYfb894'e[S@U-^$f!K2<Zg@fFN$FR[5)l>Q
+e0k;WY-gNr>qWGE1'2B"C<N`[g>(I4ot7JTWbXB_&%u^-rt-W`>70W(.n#Qh49uY-
+Hqh)Ei2`n3b3`gnMKSX[+Yr.d0@Ym^qXLm.SDAh>YESE00e;Sq&ODOX3g_/=:csLf
+kbLnC,A?r\#pBUArfQ<@omW[ZP3m1@4:@A8qq2URS??ER;mR"Yo(?Ii=(kk<P.fJ:
+UC\_fh1;<Ema^R&i]:pTASnS:]&QI\^!<o8RIDuIUXZ"o8_Vj_.;SD-%Yo()>#U%9
+5-#5=$:&;D;YP"V7(jqV]W@Y^9t..qN2X,ChRHu(rt34YEcMHshs@Qo_sL*u`rC+B
+CXhq<qWhuO/pQro#3pTcfeVR9:+Y2\^#`]/WH""T%ApcQ]T1:b2K4SPE(teWFc0S*
+Ir&=2+epsl6[OLNH=kd-C)W8eB^EI]bMaSsA/,hTD`WXF]rtJ]P'_7I\kWQ^j#5q^
+iD7kr3/>b%45pl>g]K8YKS?!NfCVBAC?,?p-'Xo)7d1;j&H\a[C*KQn]N"Gp8WT.S
+]SA>%db=\$ciN_[AOb[@drb^^Q%0ueBOO/hDg+X(e1^G"YE3HB:M75=V'b3E;^94]
+9$O"e6dT\-M\.Hlp&>e8-3]mV1a;!hE"TBl#`TBCN<ZU!&Z%=H<O:b.cM=Rr#`u87
+X%-5'_9ou>7TS)%l"VYIjIc[RK9A$l9l=JJ)4/!-)^G,,/nh\T;P(_OgIZe?rO0P!
+3@>q1bUZ0i1.\c=o2bJU67R,+aWt2K+N,19A_k`d`F=?=C,U!dUqqV:#nP=]*&i[k
+)53B-#7g;'7PWk(9K)$re]`Y!`c.8q`#a9b!c\8RFlj>0Zqa>8(0i,8g:aB5mc&52
+Q#!mn`V$O4bb>ULZM@ul#>SIUoK+AA"Zs&9^n.(lHV"kX"hr'jLtil4?ub.$cm\]4
+(.-2<A.fH8`9_8j!$25_nFs+4k$J]%![qgc(rr%s$BW49D2!:2d^_EEV#m]e7Pp%L
+fLY2]q^"@<H<6eSBbo.7;d(XBcBC/10-/!SQB7tp/uk*B'$JCT`4BqB7Ni3#lnpiE
+@W`<@L'NpP,6S4p_Re3L"2L(A;T)+_O[E=EeB*>u`DS$0'WV]Sr!d<nNF,MMjD`Jg
+<\H#,3Z6:.#a*1UNE(^=U;i53+RHnE7J.QO!]<'$1_Xs7:0H#%!-8WR@][q0`e#m=
+)G$tIW7Bk"Uf6#`:Lgc"<0\dk-oucbU]WUkZ;4B[:7,4L3M-p%>:-35=k*<W@aseU
+:c:p`hW#PqOJ5Fd;s@4p4:4GR?-G[%=J"?e=,RX;PX(DN&F/4,N!)JO<ZigV9#(r=
+?sPgq\#MnlF4FMLP.6&=k/YoN$VO#"""4q,K9.Q5Si=7I0%Z>"V7c\(&[)&^4222p
+-!7cTYo(>+Gb<+TAVAVqX&XE@WG$k8EM-cFRIj0hV;'4+PC@I?f,fS`p!L3>/YttY
+s%7.Z5Cen#hUZk'rG",.R-@r>e+2$:U^Y2;kCi1m[J]`-=hm">?GB,NMWl_#idj?T
+<^C=*;DRrQ]Ws*4cH?Wl03B(ncEdEmRj*f[!X1u4jhRZW0boSP'#3&s]#EFd#f.o;
+Ym?rDOilW?RoOU*;rF)#J3dm$0p7ug*pChlZ["$@XFr*$U)oZpru4]X`0cf=Q2<iQ
+&IG"?O')Ptn3W.W7Yh2e7Q,!?,0(QX*QtI@*m)'E9&"H=bY[E`',eaRjmmAVPrB^?
+]Ub8W`&>jlSq+_"X-`EG`J#$Z%NjjPo3*.'4nVfb8)1unaBAp_.Vh"V+<5@^PGg8_
+.%m[t?U[\OQ-[bA5o5[kSH0.3"U;(P.5a&LX-S908Wh#["Y5!G@kp?ZHJ"i?DR(4F
+MVO>=L;kh+j>H:hbh@4CmH_`0\;\dXdFb81eln&3^%[Ih1-2DPi0E](9%ruZPhVae
+/*V*s0emiB-.aQ.FQQf^b)^<$*BB@VopV'PZK^JOZ+(EY8kGkEG8S?tVW+o#b<3At
+g(6#,EL&C9M&IJ]=_Q=AjfU8X#IESKkd+ULquYAEcn3eeAf-*:DDI'u&=d1FboV[=
+1gdS"M3t7:oV&_4b,oCk)W*J7&P28PVeV5Vb<&@:KD","^A$91'D`r4MdA-X5'9_b
+KAt";QBT%:9W@k?\o%@5$""lf%shaG0clhG+)?&LI)Ij*ec36PVB<CVmtpA@TB5XF
+1%a91!U:F"M&=1u(eDZYR_?u%<L$[fm;k`>mWqFnq#"FGd=(D_@Z.TQh*RZRlje'/
+,[q?-U$NEX1F='a5',/Y$LO1#7\9eCR4=CagL2sC%6[=D1FW8T;4n4?IMV_u(B`BS
+1&\'jgnTMX[N"*eqNd$6]0+ge^A:"'CK-t\@LntF4&ZbJUEq"5i?&s<ZI-RqbO-5;
+oceEmO!sWK:rG:3eu"?f.O&0)MR#F%lb.!aO%C+rad+EG7gkeW,['rC,9nYB1qlOZ
++PI!ZaqtuL<>[FT]d$OnfaG8&0d>n1+HdA=Bj<S/KaY^MZiOa(C3lNQmuZac$e[,'
+n=^1KPG>cC2=mItiiAA9jM>Wi'gMsR0^1>YF?1#36*LO/EE#7k:o0?qY.=.s6g(SW
+l8&8V4Noo3oKA?nFI"Ao2Tglo.p9/5\A.kf+^hu9.RbV`5F@P96;$Z"3_'KL)_N!e
+^\G#dq'I.SjcfNdQ6U:a1^1/MO%"o9!-5EN;$7rO#pMt>`1!SN5e!-FVkD_l6oh(g
+Muc9:GR:GM+0mAiMM8mAmM^`o7*5T>!BDs@:*(rH4Z\?:KBBhY<0^VF(q^uoRInI?
+;7To0aN?(\=aMF#!(OJ`YjiI-$*L/3^-#%;6o*nm0k2&hLp#["(P0pCJKpkO!CS/'
+)%"g2Jigo?TXeSJRs\8.3^Jmq^oX2fb##o3*&jh\2N*.B4mQ-=MWm&:[(H4e2sD9;
+J.e)t8=&ObXC3qP$rA\>9;!hea<DcS8>X&r`'@7pV"muIjG-!/VA0_@17S"iGmPP>
+j$c$!8ASf61?p(3;FZ54%k;F]qn3g<"3Ej=9=j7&@=8o:=2pb*2Go#7Wf<@f9/T#D
+0CsOioThpC:qjTQ6$\O*H"SY<!N7]AO[G'oR_>!N?R=Gk*H:sLX)#7L@nGA-OFoWg
+)PY/r$F'm)a8EHiQitT1%)I>9%c"P5l)2>.!`!hX+A9mQijtE!b7ddR_DE<)bR1fM
+\u2icSs7p)fUrhO7N(4<+`tpP@/_<Q^eX\QcO+HQ,gAFWRm!cXXE:d33`!E*o$"XG
+`QM[Zq\)"Pk97/d6YT^;l:2NJP:'O]UB&mOMUK"++KGl005Ee4.onJ>Kr:Cm8HF9.
+naR(11GYr`+4AdXM;jd'ZbX5]2.;afq%bhN#"W:TPq-?>_BtAX*$@R59JLWEm3\<s
+F:TN4LhZ+:(s48RgS[oP:C7&u>X=B<6I3iZ3Vm/H6+=W:SB?L&^nh+D39!b#(nIIO
+PD$cqM.N>H@L*jO-B-_(5g>c<j-/G9PR3e<MUY)uqSo=1NSA+uS?*R5<l9%u(te5E
+aqq@b/]);m;liYR/Me'&<lt9+::f<'GiH[jrK^/&79iJ)N/KhJF4+Rc_BX!LK'c8l
+i3nd=Zim@Y=l^l7?d/?Ga*CT_8VNcf8l_r9$`-`VKQ\?;!_%N3e$S#A\bNM8^_Woa
+*c\q^0j;ck-,jDoQSh7_eF+5gc7%pj)b",*)<@K692VJ>:gDMmRps)<3@(-(bCP^4
+4]a\-h2YIMbsNOJ/I"X1@nSW7<?+k43e>1^ouXP<=#/p9/RDHM8'<)uR*%t'FV;8O
+hagH\^6'd2'n-ldL60oX7>/K*I81b5C/4A@+jcC]H,(XV%Z$Nj&Lt7:qYX.uPJ@"Q
+U=,Yt8G\djVF4W"^-f-W^qLWP35XVk8FiQT@[0@2C+k9s5a6QGV,GLJgI3\;8gT]V
+gGCi%gG]HS8-L;'H3Kl0];76!#h-;qfush737t>daQ5"pS0'caT[&I+`)TWo!d#'7
+?/$:Z_ShMd<<en4QTJG1N+$X]atSX'dZbjiP[G5h#pGETdK)TJ!FQ]EGsd..7M5N&
+JH-09lT$W_fI=pt]0QhJg)&J&W5F2]SlFZFU^oq:B@c`oRRK6f>jSG#q`J0C>[qoA
+,b`Io=0dXm>7Ii0-'=_/P>ZGSgItVn*GSh^=Y%B)UC1A+d.e'p/\=I2^r8dmE3l=_
+*BZ^GTZqK5r6l9Y'O3o`d"Cj^XnP>Vk"'"=Z5!Zmcjm)Q6]G!^#alZ`;+D'ul(_HH
+(]_RN0G=mE*W]\>!@SO.^^J$`if7_rh8-J6jkh7T]K<s`M@H$*i1E?$D3:n3N"DVU
+;CfnRU+'d<^@hNXgu_A>KA.psfEHtpAHYk`q$L\YZ@K2Z;E[PJlJ?ni5$K[/Q(b;,
+PMRa/&*W@XglB\iFCIrW$J=FW>a681pI`EsfeKG?A`_Q2L,eS@c/D[!+ruuKTs$cG
+M7AP:Odi_qit=YRg?YJ&:pI=#kR9R$/I2eEo?SskkS$V)*b'M]Tb=Q@L(0qkWYGsL
+\S\O^oHZL%?W,uU)1K*OBNR#S5\u-2m"[j=98_geO!H-X3]B_.@u]K<b:@_qP@>*"
+Ic]fo:m+FP"YXC8p))>Y'^4`u>!f-@f2^U7?YHB:JQkT+BrHZqep?'39I&Za-I[8K
+'l^lYkk$Rg>MuXf.sfEO]Gb-VK!bW=9S(U40t\1*MkrJRN%<rG4>F&RMS",d9,1-(
+F.+C0CXTKSjV56uA%\eIjAKLT;o>7VDHBSMa;sNoP@Z]a9a)su1Xf@DfMr/LS`d`3
+IEBurA`DL*@)Tr#5;;o:+a'33Z7DR_@])W`k,`],"nbJ,:L@V(aoi'j*'5\Qbt6Tl
+W9Amh<=RXISB',`]V]Ad3^O_HO'RSQ_]qan712H7nunF=ZnN/Q+Ogj'8?e7_3SVnZ
+Mq.([T*kL`)&_DKSP9SGK%69sdN`3LKuMPH5N5rFVA-'X/9'bFP;$:]]"rJ<<J6FT
+EWB#]Wn<QSF;[mmV;f__=bCE/olcLWqUFJ(C,I]]6-JO+lal(fVE6'C.cNXkOOh":
+M<a%bQ!oa?CSlpn[HW:@8X5]P!hqCP<m_-830#u$Z%5F\?te!u5-lJ/ZjGF^a52+/
+"VWdd8T)E*AS0HW1QE^Ij3G[1?&@I+2!#NH!':?odi38n6lp.R=AR.Y:A2Y68Q-bV
+?IXG]:n[r*oGLHdq.khtV2h=]oodL`@aDuB?bXu8SUK@pXQ*&.hsjrg_6UI1b*bTr
+m(kBHl9Vg9/t1%/`0R7+ZiVV((#B6.WKuUQBc[;!(Yq@*i(aF]X2u[JH:j>s[S"A$
+oT@,!)r7!L<JBjZ#4ReQ&Re]T`d<I_JH+Ge`*61%8B(YQ6JeW;*S)5a`9]&`q6%tn
+8s[p'2j>f9N`b;IgrHPpAhjI*'Dl_tnn]n0<FWO,Z0fc>Vf<[@_],&#lO#5)3*J6/
+9Tu91m%7&f]f3nid@Ur?$':+]U6VGHD/"GTZAN%gdK*Jl&a0s\5SB4sb/47&=2F"^
+45(Yn_OXr1Ye7k7GQoo-n@4J3Q[V#!Z[$;Jc.NSE9GS^QD^0DsqdmW<;Xk(o?7m)6
+XXt(q'HPS+e]iY9'*/XS\"*FWM_Xj4HgknIiPVF&'V4D):NM.@j+Xd=W]>)mconoW
+&Je.,L?TWEs'.ZD<;^PTQ;GSf#T1JWD3QL.UQaouVAX*!8)?dDnM6'FXblc-=p$3F
+%a)gmA_@KL`KpUA9Ad#afKI>^<kOW0nIA1#3HaL7>9.D9"btJR@=SMfL`tG?Wn%cL
+%l7oj%;UIOn-MQObX>/t>+P]eeZ3b&PNo9<pi3>Vm/9rtnBsGjZ:hsa:SJ23r&ofh
+h\k`n*8MfL:.d5Z$/&%30mo?CjO0/`;"iu<;'9b/4qD_'4*;$a2n"O(esX^P7nogZ
+HRlG"gdg>mS=HnJFrsL4+@O>[i<h0SN`Ipre2Lh?4O6".eN,V+Bp/_(aKGCOWRsnS
+$DRR-0)kZllepc+B7)#*AK.Brp5.flRaI,RG/n#b+f;Fbdl/EeB,&,+rf-69e_CAM
+[0HT>dMD[tW%9A;i4g*0BGEL'&JUWWT>82TW"BIV6BjJurf@t&3?N]('A:IK@@V1G
+\F?KA!Mh5;[VIC(%>srm"\9PuE:#4%7PNCmNC@d)gJ)3S2oX?Bk!0=1@D1]&)Jks8
+$]"dr4<P2k"2Vdo>V$QqKRt?YJ2eGU"bOQUO@TF1(^5OX_"dsk,Rfh<!MJq84<P1?
+aFUTUZsGO,RK*@2W2M=?*fs01e(GH76P>a-B/:Ei@[0Oh;eInCe=&Tb#_[eKaDaNp
+=07.Ld`HT+NCTdD.J0Rol9?ead-.g7oVT<CXMaJWb@OX"'tsi<_-jt^";\^P/(JUC
+?o/f4LVtAk.%!g['ak2>iI5<D/f+maK!@k>:*gL.6h#W9<%1t8_s5'7\7dm_a9dOZ
+EA3VJ,(g*Y0Y71j7hqokGdP1Qc>,;EEqt6YBL!m[%#5s7*lJaV*T(USE=$H-?Xf1$
+.R$'bMq..cH6g6)KoaJKVT((5Hc35G'`,gq!,s']!fQXEl3"j68DQ4TpcK%=JCl]3
+JtSJT#Gqi!&d<j/cmYtX#msM;W!XdER5rC#S;sEW'F):hX>1ps4\p.YnuSuDNuG#k
+P.\CsX_9!]YRCmG%\^"87(5>),1-gMMd#K:,\WpHP.e($Wk'hK!fJO"ksAB(/nn5!
+U-+UGYe>YHa>ON&dsTp[_>qFeeOB"Sr4djA^bQ?RF,V>)8?2#ci@I_KNC:Yk>F_-Z
+P\Omq5Tm?8&VTMO0$a\e3(OURmI2gf8kKK/1SsCFgJl^'9QaC;DsQiabfbA17n`-q
+Y/7FDcor&M_*]O`Zn9'a&-JTH/.&$nC6/W$!2C8h"&l"$(SS.h_^\("A*g]d:88X:
+"5sF)&&F?M!l?fem!C.`oJC\H^$ih?69e3XJupaZPi2l$:l$k8K+ntui54`?'ckP$
+*CC._EpT`^JUi-"`8EHDrII&GPdm)X#j_X/`ReYBHdrbpdkN@,')dP\R*ldd`\5M>
+/B_/_[7*r1D';F4\=0eW9oNr4#0q$!qgi?0Xkod%Dp!d4Vtm3hWlZk3/LmZ5/Iu$^
+Yh"F.YOJ!n$3K/<4NG8]+@cTfT[Qi"!RWM5B=8r@3ppKO*S.F6=?8/Mef^!tZihNp
+:<Ea![hd<o!AeoJB\:Q5F^9$Q=a=dtRpDH>$OT+HBQk@#&;4=K7-k$fA02+EOL.Xq
+5Tm![Zs7M']<Xfi$:t5$%@e#;Zp?B9@r;`]Q^m+HSCtPn43Z^j?lZ97Xnp2q3kk'l
+WqSX%R)\iR89<Wp5P`ZJk>>G?6i,ll%UOGUBG()-n]%Oj3?q)^AIQ)fM;A4t#IIjr
+,R&R-$3WVYLr5N]'3/agR(*dW"4G:q2@L%SW)ZI.8jj;-jID;f<.(AZ_]F6-o_ZHk
+k,qBNL'36%'`tmU$ClF5G6\!V+sa%5cS7L*7BRX],(.MRo1ql5NL?*]L9)K6\PFO]
+r@[7q944D-"!D[s/*@OV!D0$h5^3`hL)g'3b7aqPd)I[s9F0ZhD2k]heN1+^\JHFA
+FX.gR*V@;/9qW^6Oo@TgPACQLQn'r3@*F5\=:/@XVcaNRCpTL(qp][N;9XT\-+9hf
+,!.'&8?I<;f(''B,c"\nSiXGj72obC-'c97=@b5d/ENS9GcMiq`AdYF<nTB6bLFG/
+7dpWuRD<G@frlC(&ldka5=CTPj1c<II@ltq7RsR71M6R!%r(NgLWkqq_Lj_r1e0MN
+\G7@l&l_b=JH72_Yeu_ub"5:!-qCOC,@[7%=Hf4gjljW1ZPEdI&HnA27E!(]$tpo#
+#V^uUlDr9*$=T-VU;g<YK)f?hJXA7u[!Wbo0ObF+?mg3+3:E]cdW&fo/NJ>5M?-'W
+bL>boVU4;f,1m14i?;A+i,B5eKeR*eeJk9JG)l`5D@Q]g3<qh5*J:SA<5Is%#M!.^
+<Ece0_:UaP^r-t>?pFrA&Ik,ojpt,FUq76F(oRqE0HhVWOi^QqXXIa39kbh9e4e;'
+[G_TI>3QSs1t[I4eYkd?hH:2KZA=1!%CU"dbSqh^F6oG8TlQBPR&a_P/9LNh!dIPl
+R]h.;fl#(Om67FF`aVQ20Gh*NZs9>J09s*2YN;XP?dm\(.GAjJ"6@al9eNrsA-[ZN
+1>5tu.#'Qd(>TWg,68L=[ttulOoQa2JCl"Ji3X>R?ucankW]=R"<dmjL(OJ07D6MU
+pg4"'HpTMU]n$[cKFiYF!Vee_Q#muJE,/!1J1Li=Kk#[3*>oP[I\#[&]HXkf(*,cC
+6)Ze&]9_Na#di*!`\#usCA*YQo[>i$7Pmq1bpa`$J[Wo74X[gUp_XAJFm+r-g;hl2
+(m#70?sjJQVV(083Y,%9dCrPuY4>/Cn2bK:g8Hni@[N;YJ*U7#;PM>l/'If`M((74
+`cPC@8Vgitr5Oh@VV*I^*/qG>ib',\ELH)1!aoOLJj<-?!I-='@+M1)$Dn=7co;5;
+\.o'M&Fo6oofR-g[fPtd$"P/.Ti>=;Ju+5SUUoVT(/fE(4&%P(A<T$t-6h++.+sTG
+.ZT9r4@o)o_9RQDVsUG2`W\^T-/hG@P5#<6E&n9'S;/ntIn_ooFW2W3I[03rb%Y]N
+$#ZhQN,?lq*1aIG5^'R<CA1=k6UYf<FFS/1TRt4@MXi[A3.DNDTHK(sZH_KN2(2?K
+46H!hV*6D8$AX!dJoM[!U23S#8V'#sH"F)%U*qQm2G.%S_bfts/Zd?D6_t<GG1k$i
+q:+W(')dcsB`m3rMD%NbF%VgW<al_l32iuA[cqeReBc$`_rT%mfi;i^2;"=IO;d'd
+;LmAH"qte?5<IGEbL1Sr@i;$uB0)`S"s$qcooN\6bhS,$NuNG>=I.7ck8m%q_9fEq
+bp_[+/:%sA$":%U$="aZ_NG2Z3=DkAetb<J7p:O7k1W+*GScE;mH(JTn_8#s);u-8
+F[)\A>7'P7Kp]hB^mGK2T-FC.bS!Hi3n).;3`UTtC=d(p(RVbZX2fAWRJS(;a/f68
+RUk7-,9tBGr?<,8YX9GuY=PFr6q)b_<?XO$7H6LFTMTGgA0HO`M0ZpJk!#[%:UiNN
+[7[6dV,c?P/feB[QTm(kFJa5;NVDSaf1td?lQcC3S);71JC#7\5`7dghd9"ND!4+D
+p>_3I>E)7^ibhEQL?E:!5*)jD8\gror-f/mYNG+sU)5'b7/DZB!O&;^YUJ,a1BFT>
+qJU!@:]@34Q9C,Q")^<Q#C,n0B(cd$k-.VTY&*soQKKN,RLgJ*K96<Jroc`OHK0U^
+:`09$D!5VE0F#OCVtOh`,&0Gt0+Z3H"8I=!>*>VK=iY2rM2[TOHNK9s4tm3L:J)nU
+LA-UdoaOJ$l<5Oq2Ce$t$K`Pp:2%S_i8sE6q]_j2"-!O^gcj)/![SWg0IIEBE;IpE
+&Fg\C%[]sX#"YKtBoKdr&HF0f\m,K3_Zg$cClj$3$Ee=,0^mqH#QcLX=E"fWcAf>m
+kItFq$D,5p_lh5fj?e\uP7?b*"lcDO"3?tt)!0)TQ]PmjbYDhI4L^98RcS0!$/5Mu
+gf0@L<.ih10]l]c^f9e=LWEHcD&fsFB*=?k.KjkrYT4Q5D\:BWj=58U;,%O>kl,%#
+78N:`:EmsfOD=2%J`Tk!&U+]p#./:s6trlr&YSoN9UdPa>>bI>b8P+k`)SBgYj^5f
+8WrhD1ce$Y$-MD!`0.KgcBk7a)Fd[YO\6_u#(2IsAjc,]0.9?sSDe-<<=->2NC]UZ
+o_YSC<GNR;8adC6f+k%(a%1P$!eDUalOd"4IF<fudFSNJi:dG_7'[g_9R.I(^/_/E
+.^<+MYn\c;Gn:RH-ISc,D&u:O>pSFpS;UE214:be\BWFHB2D:p18qTXq\sR'K[Rsk
+o)CBW"#*XY0Tukudgn/$@keW50Ts+(P92On,;N1F16X4Ddk<Kh%Nlk~>
endstream
endobj
103 0 obj
<<
/Length 1666
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVgghJGY%#0?7\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="5qqkJ2\ZZJ1RY'*AKmL:6B\%@)D)j9"iE=DCg&b9$\kr)
+),Q/M.NR]*'<.)AF>o_N0V`p+fO?e2.?ree>];A6%Aag(i5fPPJe>1_Qs;N[-Q'\>
+,B8gTE>0=NZ,8*>;G&>dR7s=V$*`Q1^d2s:W+8[9%iGc[,4!V&Bce=TEjATqTXZcq
+%#KRuW74[/2f6Q%?0:uu6T:CW#/`#@5YX2*%&V;]bZGuB>03WT@?0,[&/<BD'6077
+1#H14L-YjUl=)Xi:1f,3ZA'L]M?kR3LGSE:LB0Z='SbRs:boRKE7-JQO2/=V#t`3A
+eZar+:algJK$l[_!>o:.Mh+-&*/=R1\.jT+OQJ9X6V,-NVPBpM&.Kk"qD+&*.,6il
+,G<JX"9Wnm&4THZg8.<W)!^XO5m+d]3KA(4kdk2Dn>:c2TMu-(U7fmY%T(A.)CDWI
+4qJ,G92ZH6do1WJN@u7/c,ZMO*sf-V-p\/nd&a_k%0N9e3!V`o?9=+@&5oH\!H?L.
+N2)WkiIqd">ji,qGl0J3Npt^q]u(ED(Jl>ifFbT0l[GKe&qcXLcK]fJa+^U0%_aiq
+,[`Hfj)n8lVueg83`72lY0Y(%*#Rp$is<pbcHq([,+rG')]AhbC@7)d@ETW%#%=eZ
+>)'.`+#&8?\3MuVl!+4DL4R-YE!FBFL6:9t@%mkZ_3MHm[5XRrH/,*pS<ATc8D4oS
++s>_Hhe77pS;Bg&e;,V@!:GL`ib1S/Ml:mBCQ16t#*&m^=tC41TrR^CZ'eW$2?C?P
+$BSZKDI8$.q-Id%1/8leKBHDJGk>K+V?RiM9P0-ML-`PAUS@RO)k^ql*a,Q*qJK6-
+l5Gu%Vs/O!=0#re7TZ>E3UY:nlT03uZKdn`kR_""dS%47q`o.*B]78"^[!uF6)AOi
+*s]S+O9WKLV2-#sNNeBm%[8[k#,6b3aP/89V.u*")DI$'7(b2hTGir/>Rn6oE4SN@
+fPsJ9BnHWfG-/h.9JTG$+RR/TdA2]h;(Qijl9CtI]GGB(q0T;Xk\_uu?g;@=f+&#Z
+L`\CjGTjpocM4)"W#0Y*)dFA+5&_J6p,]CdpiaE#j1+thVn:i6#bYd>h]n`s"\&&G
+Jd0DiMg.X,D?N0>_#n&G&9eZHmPu*Yjp3q'H4Aim5UKb;8oq"Ci7Q\gL?;JQbTpE:
+q5t>i<=,.)#)2QOrOqt[k*TO!KSI^7&VGC)M;\qm/VY8XBOK(n6o'SFZ33Qn0&#%<
+P)3%!h8*c@n0,US#0&CgR[Aj9_5WEO"o,&a.)Q@Zpb7ELSgZIPbo!1U]o(koHUEm3
+#+m>DMsWtS0BeH7+\[?AOfCUZaP+r#/80X?aihYX;\kf9!\,qlH*/?t(ue4MFE/iX
+a_6_SUst`k07$+.8@'Y%+dZcg;7m]is!C%5Y)mR^=YlG>gL[G?L9d)gaS,*4f:2nI
+;R##G.5;]E_3'qE&n8uY&Mmjk<gSruKU^E$A^E!H2\Ni8"'N)agVi!8dXlC-$$A(q
+r2,h.Ku$"umkGb\j-fMXmBUnF1SU']AlI6i5?@RGT%dA!/Tp;Ra'/V7dp[gP>(JMV
+'16/+np`n]J:I~>
endstream
endobj
104 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
>>
/XObject <<
/Im11 101 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS5 43 0 R
>>
>>
endobj
106 0 obj
<<
/Length 21249
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f-n#R`qR*OU-n[2B<4(,FG:*C70uLj$@Y82]X@[-Gq"')N[C=aC40S
+3&V7=OW'np"2#g!9b8)`Yk'+s5\Uc3@^/4\jBOYU8&h;pHrfWZ2?QQlBH.fX$&-98
+&eU,_k8P@Gj1s*uhJt'#$7BoJr<A$G/sQ`>687-6M&=)!OE$4\,W6Y'DZr],TV-Ef
+*"D'e/R(fJKgR&/aEYd60c+PY_hcCpDj,sA%eF-QPic[9RtM#66'OW>NX`>E5lnL<
+AMSQnB)?k\i+t0<9W$jCJA^*4&;16DH&U,F$mUr+2n^GD>i-[+1D&M&8J>!T29WdO
+V_Uu@CakDiE8EQ8l7.hO[-eR6ZNLaoOQ?\(A":ZHUGM[#N6-<j&17Qa0GlTAb;u=F
+K&BKCKnF@02Mbj1mdgm?Qrl6UiCIJtK`eiD3=M[=\.jWK$V(?<-u9fY23<VZ)_nRt
+C?ggh)!!N6"/+($NR1!$0">kAMW;6'(gn89d9J4<L&l7$NZh/e.Okl08mX:`UN"74
+:(Q"6pC=29?LBo$!+takPa#T(8efWg0o[iRks^U$&Aete:Unse%HB--,E*j\g+\PN
+Kei/1A!gL4":W(b'N#@H]e$N_99@(A:5oYr<)r5)TtAWF7.UhP@.Fj9%)eiE7t[?V
+qqE;[hDPdp]P\E`0&SuN<?VII2NFPDE&<Ql41=S*:\4ZpfJ:m<)$S)BU<6T)jJY)q
+YH8M$N2*.fCd,sfme[J]OMbqd0)^&j`T&gABKS-u9j_!(.)Q!0Ebq?reeOH)O&Ks<
+0oZ\mI?;jMiGFm7.T?QS(oe?uq"bCX`@l[N3?:PP5*\M>GW-G#bG3fL9@EoF2\#js
+@4q'6N=Edmbb<kbD'(^K=+g`N2jb&;.Kr(TKGXoQSY)otR/9*n8CF@.mgaKBWqk(e
+`Gp.Cc-tT2b4T;9*)`I5NQHkV[Cj`f0u-%0%6522Zc\?(b9<g3>KIrt8fMt)lhD7Z
+RCZKcJi4(+NsE2Z\UL/Kl8Z\o0TL#.g+bc,c1,&i%kp;o"u:q:>j_)<l^?pQ+t!Pp
+e)4UR,3]jQb/Ze=BdbAAi.Y6Z-nBhdZ6>$5*5T-E;7+`eCO?nPDF9A'_#lk)b;"Z!
+"1/ot\9'LgA`8CI!qjlIBg'MPq)W,"f1Hl/#,sljYU4\4(bnp)/C@3NKj#F\HUiW]
+.:Ak?$MMaN%5,HPq7\7FOHLeW%ETb('SkJ1;rBJ;+QOHYAe9FMe3%)Qi"-jZU'_"=
+64M+K1C#3Qjb!hTAkV[2_):_rT$';nJB5aK=9S^+6Q.@CHk[qV?t*4_hgSE?+2cSn
+pCmlkO%2=r_C$Q!,B4?N.%H&2B_oRY@T%hM5WJn-Ae!PT3"@UL3PE9b>uN"j5j3Tl
+*0U%6T`[Pg!B<$XZadp2OmbI`R<tnJ6lm?$eipm"3(7JAHqSb=Ann..32^eH%naTQ
+$PcbjYg4toI'G)ZZ+2[3!mfc2#Ru?EHE2\JWm83O4qTX<#(sDn>17/)aCW</Q6@h\
+1%^Cl%OTK!"U5m7C4Ob>&%aag)&+S,;%,SY1,@#E*gFiG-h0eXA_nB[WP!f0WPUN7
+i7:8Z>D.n,YF*lR_nukLF%7*k#*?pFV51POP;EKU24VMc\7o6r=[ofc7$JFK6]/pH
+HlohS/?)80TE]'i/[4B>h8DiL/?KsAUtcg=H;k@teG6CZ?B9Zr%L)qV4ZO=am*)Kj
+":NpQd9t8Y's+D\F'>JnJ:*5A>uYtT!b&:SC)c9ED(Xh_":%kM[R1\^V3+JSZ8uI7
+=,;&^VeK/]G3WXI^g_-hFiR-#!dCRc@UBA5(*@:D:<FL0$u%H+]Z+QYBi4a:+j/&a
+<WEj!"1b:$UmKP3YjAGOR[^X4E1eS)W*(Xd%[L/9Q]T(-6V=(9<XANH^rpQ36S4P1
+bjE3QEH,;qa(0@%cG+O8@qd5k"UQpe:HI/tQ7HsQnRg<R"3?!.bKR5e^4[t^4P6"^
+TK]B=dS7<[d\'U'%@!eRJs7Sh*K,!I.NqkBF4_+lW+iEMK%*]!P1uh+Dg?2mq&[*"
+>Jl),M9/"F*qShN6Za>O.<4buo2^M]+a=3!eA%D*:_?(6@<(PRpS&j"7$G20"9?Xa
+)&3!cAgC8$"SR\T'j/CA\`Z%S8Gbh05RmgL;6#Z`8Pi@9?)%77`hYF-,+5$qNa\f6
+a+/phi80D)Ou+O5CnEnT5*(8N2Td/X((fiuPZ#"Q`eej>A`s:8!O+DF8f`U+AfEej
+W`?$U3R-0NXDXLVhI6.MQe@#!?=]c@`4:(X5UX:CjV&m_bAA,lXP=ef>UW+YCkTCP
+XQ0CI0a3*Xq'C!lATKbCcR/IZ^[4CV!J:ai!.c#X?rW<l3=\QqKJ@6BbSc&-4qAd,
+/+$/3Su8W3e3Lo>LCg@?Nq+tr^q^t+5[p"pI^B;EX#T9*YYlL5gN^[;2hl;@O1+K6
+M]nEH"/MLt;Re:1>PEW!^id&oI3mWP!&01^'rph:mE.*f3=u8&Q-K$mfE'rX=J4<-
+JN?`W<AeWglI6/aVUpO6_hGkP?ljRVA`M^DOQpdM'XW1*DCG98"=11nGYC>KRJ0Ii
+'`)<\'1#GE%-P6$.M,[GWLIPjIg/jRJC#l+dcYnb+"Hg&>OlQ:3A_9r<-Wi/);_8M
+-+GJ6C=ea\huu,,G$S9CY@&?EUuk[P^1;4q"-_>6,ePl_Ki[cj@i'_ts0Wm2*:[KR
+/%IB<IljN?eIV[\%.%`>*QhJ%mRjNNd:rP`#49jeI/,OuW6EYX3G&;,<,Hgd7[Lnf
+D^sKo8cd]_q"gW8HhY"k\#.!Pp93K9?$V`PMq4j"il>eu_Ll6kW-O$sk1-TeDS>F\
+7C@;=4.8,74kMRr>/,,taE)05Dt<T_C3NJjUCE-beg#o-GS56M.<"+M3gC]NLog3E
+pm>HP$)!FgLHb4H>&G^n.g"KOW5pUp<X*1*+TQ+-"K2?q(a7nM+l^:aURlp$15MYg
+LdF0+6COro5X_?G"Y`OR,!#p)>)8pTLdhZ+Y[mrf)[=Yf"Ai&hi,8cQE\B+4#H!=]
+:j@eojNp_1#3$4#ir]PuN<t])#uI<!E)?j:9aU;Z#NR<=%oOYAV$b($$8B4$n>Qh8
+\I6c:$IEo):jic!gBE\r%.Ig:YcA)j9ajkE%P[J[E;9u_A0Bn60Ob/AN<I1q^**Of
+.YA5jA1Sn`9'K_kl(VqD+CI.G(*l69#"6N]V$8Kp`$=<;'&[:Zcl=[BS:4;kIZTO"
+&QK*5_CO#>$kVoXYe(X3M&-b2"]9OR&9SfY=Vfq+#7uk30oHjC!X<Y.(_Ls0Z%j.2
+AhMHd(NH>j5T1l0W=G&m)fY6^`q(&;G8r<Y*"e/J_EQ#&cPeO(#,<C]Z-s`@Yf1V>
+)j0/%Z+h/c0cX'>+*#IG:qI8NZQITJ+E=k,;>VL*Y#B>R(319.;/QU!q&U-S,#RMI
+dEs/D-QoB1,A6*KE]#'32]u![(/Y>k6O6?/D\7qOO$_&O0h>,<.OKa`+ji.nCfCW/
+W>$cg3YH*0!,!#J"pTZ"+-:[pZ2Z66"!]RX.<5b"L\iLJTK*XK.WK#-;PP#SOF6Vq
+/!?q`dHq0Z_&k@T&#Z0.LX-HLr@Ke./J.7Q;"2N1lQHg_O&</7;VM>[m42"J.<;7<
+d]5&7_?Q2-/;EaGOIlnGEA8*X0lljjEucot+Y?U<"K0'go.MPV1F_j00f%-4ZI^n<
+"UQtF'l;ndo1^hn72Br9&9(V\_?Rrs*$FD8"S!W^/>Ej+CD.sX'4N"9#_a;iGQnaL
+G*+C,Ud#S<SI:Na/']XQ0TZM`,\WC2$Zi!QZ;WYL^dP.D$1_IL"U,aKIKch7-r@,P
+ZCMD&T03`a#.(*K'A3ai@6P<p3tVub;HYU`6SOI("etfTd"!8Q2a'JR1NVA;Yic2Z
+:I*?*54KCSoCY@C"@Bn#"f%&B':/niR18R76W;_EF5K@6jT[DO2=n.?nJZ="=>:CZ
+-hDR4iWh_*75OR-6ZC^=PXe4TfeN!T$M.IZP<fQFeK@hG.[-V6dml94"Zl_E$P8@O
+";F/k1(*'a/]&,N@_+4V-mPrh'!R<<1U&#ZXs@IK07\*Q'$tu5@nC^+%<-%d'[D/*
+:+q5061j&0Yj`fdUIrBk/!+sM'QjPWk;r029L;,mP)i:8.k'F\/F[E'<7_Ek#=m:o
+/i;*QJf,u#),YN6$?SujPoCt]M$3EG;>!KbPo3:2+&Q"j;c>e42)>O$j>ll:&L1LX
+<GXMB9i^jb(KDPV0ND.28KP8C$IS0:oPAtCnQ)lR=&P)[e.X8&UCM@M.$UK#o`YIH
+CJjc30GUDjj.B3<X^!WB$Iugj1nu(6"\u>S>EF.jeC-1<]dT/R)g)<Z-g*kW#:Phr
+T+FY%"&hl)G@20E;>'HQocHr;&LcZM@'DL:ndbq(dpaLC@*oiH(&prua^8'R@oU!H
+@p(DqO^^[V:206+2F^@U"9t.u,kWs'E0Xs71L9QI?Zo"3ec,dEN<ZgZ2)=3(p.]$t
+K+X@>@!6Z#</`[l;.Yk'B6K8JQ:GIDIq1DkB[u!S&T_[;D/$CGocmC<elcTCQYA@K
+AX7I=[X.U(@:45A'@P8r[Zseb]EVAM?t:!iQ:Gid_/=G:Bt!mNQ(;L[moaf=">e#0
+QOR2c=`7>2AiBBq29Bf;hf+nu?1l<Of*tq"#@Y%WAX49AG47@J'lDPkD_W,7pBt:$
+2._s$E:QkIcn$@5s%Y6sA9IcjZc"^[6#bG"&XF5En^_B*'4:Kc0"+5'n0pE-C1rgs
+?ucbqQJZu].s:TP:ln;!YUqIdY\99aHF?n"f7eCp/S3:QHE`rdj&m7a5:Y$Ea-+h#
+2oekkTP0Ln"RK1r"UJe,>CL,i#.M'k\'%HHh/.2+'mK+p&:8qOWIEAdIE%+[(`e)"
+rI3AmI5i_YePT6h3Is*S.M6`R=3H/]Q$p'$I'o.>pYUYsSR6U/BU;cL(gVUo'nmJ&
+ICBrC3,]BgBjpS+,Js8)ni_bQHNMabI'>sVp6JWrHRP6</ode<;t_@.Xt]QPIi,.r
+F1Y.jV^_faL\Lb*[KV:]eLDBmN-MUb2jI,r=ab6BM/]FD(P@USrJiY<N\L!WR+5/<
+Inb+&O(Zdg(tF+\WK9FYO8'$<)%2)-&P[M6O#*hnR/)/>q2';EP&QZ+[6Kf[Ke4.B
+9m8[_ZrI=@2/uasP_(3G3-cp6HT`6,0ptmGGrjNE3<].hPZ_^YGsRYd`KPR99NbMK
+R+DX0CPl$/'mY:r\Q<;%;jc,>Q5OCrm(@X%>FH[M/i^pu2!:/bZ8J&N=>Ii3,57CK
+PER^6K6]JE<gSmCV(6i7Rb;DGe)>&;;ctj2PF:[(H0KsW;jDK&Q5PC>U_F$@kE?.G
+PaR5d\]^Z[iGp]m,Ks;\q,_V-`'I-K"LImZZF9rt+-]q2TR$PfH%gJ=-O6V,U=/5"
+H:J9,D4#uT/oE1C\h53F3&(2?PZhdj0LCsa3$B2_U3_*4KMsHs"-]1-B!TCQOL:9g
+j./$eW-W<YRB<AJUSjOA*1D/6=+dL+O//0oX#^&.>+9Y[=O&ieXCqX!>+:bFBrtQa
+FTbVci,<dB_5ia.XqukrH<"BrpT.ie"M&&#[-+XVBaG^RQPAJ_3pK$K_^r*`27\u9
+3u(]k"UeIf65GonUK^a1"gB0r/oYU0QAU(](jnCC[!O[;GWOE;HQlZ>9K+DiUK_&O
+?j???ZNnCSoYn90bI9MLI.:8c;VehZCDCn,\3!brg@mmZ=e$]UYV?g$]0AT+\$HL:
+Y_-)i(jVRSH9%/E(H\jKqn9;)]r8ut\b/C]cB5>mPQr-\\be6MHf%(j1G#qsHkP8L
+]A'rD`P/i`/?kC&qYWWXhm;AX#9(e!HY'bc'0o_hI.BCKP2.A<%D>Sb5'm1Dq3rqJ
+"gX4VLmn^g]/@B."2Fb'+VX$hOla@TcRrUH`&oQXr)p)ke&9tY0^+:rS8G]>41;d*
+a.,l+d-Na_h(:m5a&%En)j_+2-X+(a7'J2FeBU&.29IX@Zgg,u><Y(.9uHn"W#>i\
+q^EOqN@m?.#81[Qgr0?-RECjF6`7[**8S'9WGEQCJ,F<.gNpi#KHbf;aSb/GHL?1N
+]hfY4)pjYlY](e/X$a9>01$;1Q!0A"aY#^oYWS[Ud`^)96I&j1$XGd?4Xhi$ab.8j
+7("8eI3(,KdA;7c?@>u+I,WU6_9nfc343[TO[%5P=4]T0EF!ho>3*`1&HY+*(0q$o
+os])B?Xcq+7$Ql3:h=3dQ]$8<@GQW+H+_2)O_.MWgO5pQGi,?<:!O=i/eb:aE:83q
+#rI(^A5I't]fdJrbMF7@hH_?q^!@*$D;Fi$h4=H"IK.dPs%SdQh%NmWEOjoc9g`1E
+iI0N7ZR!Sn"lZ"l,^+1e&g>OA/_iNAg&<Rk6mpX;5N*8]04#[Pr3W(:hrR##iSCIA
+)](.K@F]AfffisNSV&SD>N*6hf7%M0;W[(^ougW@h=3SXo'>N<BBYn!iI6nf+DhZi
+Ds2TCdQXMVhPH8'lfanWkkuaT>iF-0TBQ8OeD3(->n?0^pY)4df_j3>UR1@r=3WpZ
+J-1eU]\*T1&3/8VmrO?P4It&NYIC98ceV[LI_X)K&'4\unK/RkgbQp_WMQ3b:4!5h
+Er48^QNr!<g75/)3oe<["8"\T?@PPdP0rpbkO6#%aM1[H]Oe>Qk>YXjp3uWkS38O?
+EE0bh`P1sg?ZV!YBu7*^pj>[%;]3I03VbR7ptSU7T9G1_S:5rX0n=8S+.'g9;nD]a
+,BO+]e/.ScYOAj;qYd]Wg_'F1[qU?>5[S68T6[r=Mn#@d0Uo8*s1C)$H+EM*.<G[s
+63&,d"%Io_R"/X*)*jjIG[)R+"#E;6@c=C2E<eD@,11sp1(+hT_F>^TgkIjE)ieG?
+Bh75J-^RBDj+q,=.0u3\Tqb3/Z3LQ%9rK:^T\`m:Pu9$7GuYCp'7u2i1Kig7Wu%M\
+-A-'ChRP\><pMX?%&tO8Wm@PCG]_eh3fQL=QC'7M<=>PX#4bqKdf"0u_^\W#X=e$@
+WlOT$=Y;%!2P=>1Fo53tD,?a!Tc#?Yj#oi,%!+2[(ttAect[Wj8qn$sOdf%Q3K!Lu
+,=pO!CKdg!HZtj^n$<UT%X.1tcq(5/D'q,.Og[VHq&@pa,BJJ0Eu5tU>//k<j#Wbk
+m)iJ,(e887N/g(@mZEKLE*nrmRjf9*52W>KAG_*7g04QkO3?\:.aSjIPGSUNC@N^G
+bOjJ]Yaae0_U$\R%7:G<0*fCN/3s:qYoE>n6a1r3S]%]m#TP+pFA/&j$G:-L`fF@f
+#01\0L)NPo>]1]L:)\(2JYA;NKE`haA/VQOMAA2\TP1J>%DZ^NO//P4c3B#3`2)YA
+9c.?ubgL7T0hP3R`0&2UADoDMJ7t]0KG*K6.1#MRa#1j-':gL6J80'V+TV_\5L>EI
+rq+!)QuP[A+iOaG#896V1Uq+cAfT!r,'d!S<>l*?afXpK9%%f-/OrRd"[pP`J]]&8
+:s$[B>XObXS<ZiXc%-;TPuWN:<FO-H%+Fm^RbH?8;b:7g+jHnle.[_5D+Uj(6#"u[
+*MHnD%8EBQ^\5%1aj^rg\/`dPrNC-A<lJWpafi97:e^>h#@3*:(hB#fc?9M&:mZ&'
+I99R"*@A(8FO(M*J^#DN?l$)s)*S(o@4pT>#!diM'h0j4iAjY/K=m)-8L^nM+CQ,l
+:;/r]]@hp5NT@8h6&mWZIVS6S#^i>.kkVr,P35sXSW^S\*hsP3l?7#ZlId\cO/YF0
+J/E(FY[OTsH<-5mXZ:jD8)rhRQ]^\4#/u_iq];q:ApX$bPD0Ib^T?nW/5qVfE6eoT
+`7u')Y\m[+'0C1HS4"3%m:RrcjEMa]^[mu<-(2DDS1DIQ+d=b,o+IVEO5l;"@?*RC
+:h@i.IBH2ok'0&_Jd+4Es$QOdk\#L%JW+1",T]-AqY/gc8(dYZB-ZN[f_":kGt<FJ
+T_b@KRumOR8%>MlTo)_ck$C!lOo10qYSk&NGK.7DEcuBr45QoKrHT<F]d^bAXsSqD
+O<>`BI]s"R4h):+*hc11D7)q\j@od8'?Yn<-3l]d!o@6<B7_F81d6SQmpBj`<,"A1
+_O*[a?Yfpu&Adn+d\R<`'#@/ZZ5b/,P[5ML-AHFg'>6b&R%Y,;LsL5i6`>nMiUflm
+CRs=n,s_g2TrEJ'3KM$%dh^g)l&)_pnXmmH)'URDGHl:O0SIesUL[\j09,,4Luq#K
+KJc/JdIdSYnp(Z!D`^XL1`'j0*f1#<Io33,7G%P\OcVD:XP,`[BdB,["GLIX^.bBM
+B\J7e*@2iU_Fal!%3[9K+lj?<["QeA-"Na3nto#Mq.C_6CnE/u#$$neFAQ0=G*UM;
+_oZ%i0;V??O%1o]3lI^?@`4lf5h4l'"9`upe>5@7rA5V<?T0:TBTGTP)TK).%1JbV
+5&pe="'GpkjN7"^dqWSfH(rZ]r9J-Yd3$GN7lqtYmZ?VWGG+ap*gV[0Q#n's0rXb0
+;%PKCaYI4#)2CFe]_J,`%F@r$.4X-b20BO\Ls3cbJYi#cS!6BD;!Ib-h9:11+PJ]G
+;`,rK82bll,gnJpF\JSo2kDBV)cRJ44epFN#1<^O(_\i(>AO-mW1'Y'7"J-Ebr;Zc
++ir1fCuHI-ST+7LdT%Q'%B?F6XMf^g<O^Un>pK8+Ku-THo/oV%M4Hi<gt,T,k\D[0
+I]ToioU+XA@*HSIPGL6k=AkDnap](?G!<l>C;^SJTarfaDIjRk$YI\t9sM*NY1B=]
+<30eWY?!W7>*qGQMQLeK`qH9m1`]k[_@Ej4o":35eRNCfNNc%)P#tqA:?Z4N+r1m?
+Odag@l/fC[QI=uZMN!ckI8?Ns._,XCQAD7i$*VB05ZmoM<GfG3,7r;R\g8eGM1$P2
+V`A>@;q$-\IJ'n4M#L\s0n/Oqi(QP8ES"_&W,#E;WV@7Tg:QX+U>1,RQolA>)s^LB
+Q51VOk)HAL"R@c#,JnTG/[.],nUUli,T)r$9l),)n#e:\1P(ULed-H(R2<heLm"u3
+gEEia.3WL>+C_4-MFdUIB)%@k3>[[7!JV)d\I0![(S"(XmO*;!#:m#Gl]7PO>/to9
+Jn.H8*jMG[b.u1JA_bgr+=:gHoeS=uod,l[o,U6IRk/)4kZtIbo?197%nYR&K8sF^
+PkjR(]#c+]1@B$EROM1u4L!f8g;0P)Ri3u>m@!U'@:mid9kNY9R.8'bb/JXqBC/\E
+ZIYp8g*r.qXRE3^/>cILfrdmU2j/;Dbf[mL<N'V*Zrsh#fZbWmCn6]cnfFoOR>dVN
+Xb]8bhE<u)Y8$=PRu^-Q_p9^f>nqI6YAm=seJh.Uk:'-4jH`j$qV"JNG'UamFt)29
+o5io>B<C>TRs;RF88jI5UCdSK^(Zte+t;Zp9k<;-#b-W`JjI:^-<f:^hg+@-gGH6#
+$f9*Lm;Y8h5ln,f45?GZ9l<PG1-0HNF,r;GIV"NZ_*R4nS_/!WUR7"t'?U1$+S6^o
+PJN"ekfEplAM.tiGh4=bgik[JVJjsE[j10_k([udQq?K7.-Ca_P]e$%Ijal9m+i,;
+EbUc\3qmK1o<SI:cJ'fF3r/*tMhtmElj[q><U=!jV_:eS=n!L[nD(@f1#QeLe@fnm
+Ug_humj5qi^CRdO`nGVLQ/h\"_Ga^gcucHWa*e18ns:`->CQHiq+]&oQU?Yb8K12,
+IuL&^>F^&4-gkSoO=uWV-5?G/F,j>@-X93iP]&*JVEthDXqU"8?7P0?k?e#AUZM&2
+NSdN+RHGZAQ@*RQo)5QhZTWW%p1e*ul&WSEFmlM4F88Yu!?hBlO,DD8,uD=%Ucss;
+3`;b5lD-J@UcB?i]Rm3l]DSYGr$s2a.Id!p_R)=4S#S6;O*h.p.05;7%1elX5lhOt
+PPgLZPJE\!#UBY:&];Fpb!>b?6%fu9lA7C0R1Ze?.qp4nJGgF'*%+E$O.!.;!=-.<
+'TUZZMmB.?HjL.#H,031_LrZ?P")Fdr>>/WVSi<mRVKWS/u@gjV%QbD&oYP%?9bGr
+%:ge3Cb?s<Q`<YSSKp1k//KX2<C'#7OYf*FZj+FZ;o<*7_*VHqg/>dk;OP,'P=.g8
+aq$!X:r5hF^li`1<(Ec75=&IZ6HW3AOLufi;'GH*J[+pf&mdY';(`J5_*[*)9GPNW
+&Og4f`FM!J@e`A1.)9R>6WthO_BQnO+%.RJ\C.OP6,H)7p;Qr=`QAfX_LnNj'Lm&K
+N7tG-/-_gt+:Te'5Je[68g;2G+"/Pe+%.BKU^86@8tr+T,n_E=as9680IF$M*F*HQ
+S.D>F;iJij*\;].Hr1F]jM=+^W.]#Y1_E7lho<lk_*R:B.?KW_OMPps6#k'fLrgYl
+&P019_q>YC49imfNL_n98E<#QiO5hma9jAbOoijjR,jYD-(*[&/@!YBjI)K_S&qqB
+MYSI*Paoj3SXhQ[8NE/qq3oFAUQ4iQP+$/X@sZ9:IZ,fuR1PcYPbq'8Nsk09\($Y5
+1#g?tFGXh6at0YG7$]dYR2*O6XBFSEjL)A1L6_,0QthV:FKu8O0$AKkbJDV"WApD1
+^6bq.9%*K,;.,6CEsbKZ$JApHCrT,$`AP/nQR'Jkd2"'+;9Y^na^!$21s;^X[n/;g
+O^u]CBfM,EBoYbm)p'@g=\Z.^j:dY*P.<-%<72.jX\Cp[8Z8u+K\DWkgQRSd:#PCH
+"KaJB4d,=h&rBYUjIs)o0[=Yr8!MknM*_l'Cq1sNPJlMr>ieU58$:fU'jSV>9^%\1
+l->DlSHA3p+]9lMj-D7jP`\p@+Z[_&ns2jM5%3K:oAe0Xq\#.gbnU$j"S'fPcq`O`
+c@iqH&0$fnBUI69'Hq:TBS=^:8='2Z9S2\/%0.3Gp!B[\'+n(XBa7:B$deh8'I=17
+R9:,YT+rR;8m+a/8P,0ZDG[GT(r[:`72VK'^loA2RJe!qfft`Z&t,f.dKul"M6@S;
+*#eJm/nGoc72[!%0i@<1J\egRR5W1;.\$AadYUQCrA%8^/K=L@]a;[mR=UUI0U/)s
+du?#Q.5_a+'U0K]P\cQtrAPFY^XIJ1d<(6^iqAn18][#q;rp([KdrTIHl`#e)6%iu
+WGg9CNmanZQ7L#*4S>nJH'kk3Qs$36Totb4LDCUqeFDpn.:8\bT9gOCR6=F`60FXr
+R\N;Q*m'<_Kch2*-WP_ueJrn$[8n*\%$e*kP@8j2\U.>%En5N"TF-#]kpI,p&D"+B
+7a[ElBfFT=YF.Oa<:jQ5ZsOR_CY$qGf&@.)Z58kE,*hX;U03a)<HH0ZPG.M'f"rMp
+E[2FBPS.t\,6<(a6#f?PPLkA5,6?@5JhWU\iReiL).eXA1,5;UQn^>0Uj8LVH>?W"
+LtE#B=C$i\H1`pD7@QV%R2q<U)GXE*:+A,bZdHM*BtC(EZ)(0T,IO(F6B/9R1`L/5
+Um[@AiNOWQS6<OiZdk[8:oh/g?lXGK*'Ku@[@:?uT\933g%&%3+iV>*O2US3_l]Y#
+mAsK.T-me$\dU5q^sTYlXBQ.4V,aU#jbp&(P:29aW/7'LES&/%^CYckZ?Z<djh["I
+FraN()sWTV;NdLNLmo<3gkpO5nrf]Z)PPY!g7?8%)Mm0pNA\90&/!J7WfnM[QQB/O
+*g@Gr>T4if#b_mB+4@_I[F1fq)Vqq/VZGh<aq6qoq^>n>7C\PRZs03]cCcr(+2Y>?
+>-04/ih<lY%71If^#Q,dm9W6J5LnrRQ-p)Wk,^`2%3cOEFD>-il/(@9Tb+Pi/`;J[
+!K5q>$fUr@"n=eXhQ1H]ThFG&,NYV'je/aOU(FkC(mQ67*!tH\4u,15+n"7i*kkAT
+#ucfi;qn%Pf;k/E#YG,Y9dh8hN$#(i?)uU!;qE(f%]($qY8U3q;@;@M&E*ZO0,=YP
+,50k?)Qf;@0Ziu5&SIs1))&E=#YHj[mNOcnNT'/MLjQuar["?e+<tkYiX.hXP")8m
+%&eOoQPtT(P8oE>UcQq/0oB);b$j961Le2Air^Ueq`D)e?Xn+M]GbVG?91*r;mu"_
+,o]4W/hUXSAi[/5\[$*_E_8AN6Y"\)2$5Z^K-r39\2^?=[8c=f1Fsdr2^<B*SmFB3
+`[bSgLUIo0Vpg;IbE41_94^2B@RFWu3d\1opgkGEW=s_*F*B!l:o<AHji`#16Ys5(
+N\rqA8/lR.qfnpKGbcR.,g1(;>CItMLc2hE[mjo;j(P7SH4((Dk)NoZEk*7gIO]\j
+.jf#3;]W;Ee[M8>AhpLN_SYIkWj3+UX.+Pek&W!6FK8nGNmbFL$LR"2O"0sp%e@6=
+>.$/\rN`0rk;6,=1OH1/XO!CkBFN*:><48E9e*;?/OM_&j+sec1Rd:tZTNAD+m#c5
+9kYS6XWsAgrg%4RQ)`S8*6+2JE`8XC+02`;.[*kBHI_9>SiO*J@rg/.c8I7XiB&*;
+3O.S;jtNUpd?nD6@k+ko_[rnr&240<Qt"f('PV:Q%-\8#0Z$"e)Ykq]W%=gGW%.3h
+(4\&Jhll/cX=F0!<YT>LoWUNlC6J'9f`76=!XX1EC\E2Bp6%'EJ7.\FP3^p[*lY2O
+n#m"X.bPFAZFaqM*2MohS0J9Q4"t%hcRb*rM:.tZqXl-h,-5!!D+&M_it@K>qkZ'Z
+1LdgJ9#._dSOGUehYV>!qh2"##:o*Sh^^hH.j:sg+fd,Q1GIgt,VHlZ5i(`c%*$k(
+PB("\=Jh!/VMe!^HUutf-72Rl1:H\^9II&bBX!=5YtQ=G8nbQi#OYK01$Wa68oZSk
+EG]02[jAqs9sjBS4#DEeDf*:q@c8](.n*+gZtaHe,Yp7V[ktM%1X&WNb#5PqK;F3"
+V$gq4$YI=E&Oc40>B<"Qdj1[:=PIn!`:?C+[h#nRoJJ*s>B>=hdhZ(*N**D<=7^:(
+P9rfs7S!>K8,EN]rlc\=HFJQ932tlHOl<Sa0JXOlD)6_e$[<a\,`s:_o!.nt@tds!
+Y9"X_SjSa66^Li30r"fF3;5$cUn0,(H.<"\<Ps^EURW5aLX`LRe[&JjajIZ[OLVBk
+3+T")_h_7'Ti9B1)S;eE(HZ_W3E+k83jHaeoIf<n8^h<EapZ9041E[#`#<EKRe)hC
+(HQ[HR&3neFB#@QX190piq7E(_\9B<C.K,4<gMLnd8*thhc_IU`lk^$bTB\SdtUT[
+6C/)-9S;7sG@hmXdLp>l:`7VSA)X&J-kgShP-HPNdRYu(3k71f]C0[,j1e48"dDQ=
+P[XpC;,TN;B9Ss3\LIlM_)M!Cl?Bg8'?>4?kqKeGMBIlgPsUR+EX9o[Ga8@gFeQI@
+N>;21%!RP!Q7mh23E>hRMbESC5L*;mN?cb0;\n<o:PX1Z-].V?otb-5'+?cs]J`Y@
+NqJM_dCf(u-]M#D;FS6m'h=e'kpVhuG/7gXq+W/)Un="8l,isrQlPF]I3:pZT)*a4
+cEBic>a!DqR*S!ncTO75h*?54N_f%A:S`em^IS-k2L3u.Y>XdfSG.*+k]=E6HRGB6
+:V'O_r?)PMc[#(6iNF&6V'jdhF3h[Dfh]rJYKgl)'7Bg0K_g&g!`gT?F$IQDbkG1,
+qB@@HHt=FJ5L*<rrE(WF,6[e:"S)E7%p%KLI'!r^*>k@g9-,2'+q4<gPl#k</KR=m
+;3co7`uL<Cf[3-6c_o@BdSuX"-/%NIV9LG1fksZ8OOC>fd<1o-/Y\Ju?51`IdA<E5
+hrL%#/]6sB`:ZjoVsE&2.b[$A>.lt]#6n-Z[siJ/<4DGHW`#*hn62(n-gasaj=/R!
+(l/1=EZd7B7Uq"ZJ7:?g_-l;:<&+aa*(1r[Lma\\(`86%@KUFE#9AlCLCu>?asRFS
+5c&FUN"/PgNf52:@EdFd23:Q;0VPT=*''Y37[!R8W_FItbNY0dChRHLTLL1a3E1/V
+6`c8UZg%]8LH6@+V\Vl>7WDQM:[6u-pr;&=\3br!C?5N3;khmHQeL8qVf<YGmIYaj
+6DoVY;Pt@)`NJTjXBhan>*.nb&@]t<;$n@hD/$uFZ.M2sdg8jpkb*+oYhEYJf\gLj
+/LG6"\]rCaEFHM[h_a9I3152kgMAmtEqS2GcP&;uNXbV$85S2ba1?4M)ue,E1Y(+&
+,\)7n:X@5LpA7&4O'A;&*,pJ(6%nRi'E!<kiQKf`3j3&!fqV@.'T/fl_M\R?Y[eBR
+_#]@2s1XT%'(J0EJr6)7@=kfr61G'jftn;r,lGM4jAcOJn2s5Y[n-ts\@5<TCoBQ*
+b"id=Yr"Fo6q^Kp+X&S5@)P)\A<cE$Z'9AJY-As5ZUP9]AK])$jKdi2''*%)ag#An
+-O(0g^DKWNjH,0j0hgCK`KLBJr(@\32`nP^K];R;#Y_QI:]Z1Mr(\b!^(<po5[cOI
+oDK@?YgD)X),a=C.N#G?KX4""'9,.=VWmqnRgMJE2B.@uj5U[#<F[!tdZd_;&"m?r
+CD#.fPqbhRe,n_I=;+@e>LsEg@[gF5h32#8_1d(U;`9nSaM@LdE21F(MLTHWQK;g$
+>84GI@p/L^1`BU6`7Xt9<MUpbgX(B")-g3Bm;Lkp[G2VLGD20/97`8N=^>(lATlm$
+<S;;cpRU,qh`%DMM;P_;q1[iE7O:GGFetKW>aM<604%bgYDGHp<^gV#OYT!hd('$+
+RH1`$(Osl^p2a8B[remBgN@)f2dQ0TNK[A12M6tN1q$Inl5'='RF#^IeMuk5IDF'4
+eHM)8g[qT/H>Jo_#B=N^`Eu&/<o2RK2L%)`/>h"TaZA%9Pb#LuRiI-,VN;"$NX%2-
+e<07hj_G`4HtoX,EEP4/[+aK`s2S7^_`X;/];+Sj55])66JR\n)$\J/-9V-,JYu(n
+FQ(.aA&=E'C`H3`T6C0C1q,7J_0uJK)lr`m:)ih2K!XQYMhl<%q@V=q)u>FFNCWiR
+f15%ICd;poHl_+<h>+0c]?L1:(h_'IhESU5G\h"dgi8;i^:S\a[pO`8cH$nfj,ig?
+@k1t7V$DVt@d_=A2+5e2Nkk6'T%t9YDXNMg\ADodTM-:rcmYPQo0!2Ico,qkq&2Ms
+:/i9&%==,P%D&j4j2tlAK5TZQ^5-2(i%o@!c@+*V\1[+TA%O!s8d*(W5"f;Z1l(<,
+)$>XL7%m:P1VhD1`'P[7U,inkAEXpVW4kZ)Hq/pE7GkYm,,F%JC*@1Xj@"%DIH)1Q
+9>JcGPr&4W#Z1hfAElBIOs7</Uju7gnOXp4Al_3e=HRUr-V/c#,\-q,5k3gWaOD"Q
+%.H'21.d0jod(E4LbjufPtfCM*eWO;)3JrO2G3d,*$_8<NcBeOa)_e#Uf=s&ZC$>7
+)##7#,e.nNnkHjI4:Ij8\<np%:JCQX1?=D;Mph#k9G_%`VE9U'P:dV@8TtQYSBFbB
+:12'c/@";IbEXjN*DTau/4$AXQB?o5bB_I3UU`3_1!l@>a]M!1'Qfaa(.lhd2[PH6
+Xb[RDJkZRS0?E5bNg*R8cl"&o-JNN?W7"/GQ9RatdbL'D<\G(H7ia$X@\U,bJ?QcJ
+"'A7u@Irl1LEO_A6F\-Ie6\848?>.H4[>^H`hBNVBMO*Z2@`$CK1[IS<TXA</CKoq
+WH'"">3Q6Z$ZPRbqMIaoL^g>K3iGYc3)=*C!AAP[@+Dio@]G]8.l=?,8#<_@AFV^R
+[J$=6C>a7#<CF'UiF5C<ZFL=T@@/Eka!mc3IOkdUY=MR7;PX^eJY_G1JC8SjHU0\a
+?'1cQ.U^pk(Bl)S*/#(aOhq/>99di"Zta9n=kcMam.4PRV&!JSEgikb[DSDuQIsr-
+?#leL0-J2Z50#\+@O'hA/@"ii>[mC9D?\e)&mFJ?eL*@J[(s9)PgeH2-$EiOm(+P=
+)Ni.hE/>Ru]%>H["'a,Eap`^32i-?-Gl(hUS;AP:(-p[PnUE3Wq7]ok8X5WN>7<&n
+^u`OX@!M6ZYS*,:OrFCgMf_tD**^5K?E<$em=Fbhh_DWEhZI==%36.HM:chr(VE@,
+nP1:K\=4>Q>UW3!E@<T']SPULB9J(1i0%WEG0&+Y9#8&K`Ank>`*BTE/S")s<NtKE
+nf=**i<IH$LBE]uY#$+HAh]"o7_i9."S/6l06qn"aO:--NmW#2E\uG$6f_L3,LJ:"
+:r47IXTAnHK?WF_m%4q?UeR.S2EDTMAhul/*c^_m-_U4q6dJd)U$9pM=#$3O#pW5/
+I!8*qQ]n><R.VM"3kCFHS*,HY*oR>oQ!F9]6PZZJM71nQ(K"rUIBZT5<sJoJ*g1B5
+D74&o6+^8&YJLd/[HKSA>6-$d4f1m"k0uneCkJWXfRfTt0-\[QPAV">Nd$pYgKUpP
+m^375$%e)kaU%ON:&mr]<m+S]8^aRO^VWsTPi&U-MC<oPS+Y3tcfk$p=ACQo8m7A9
+b6*gpUS,=D\U7SWrCHDmGJ=j</6BkXKO-?Q`Cs>hA/q;6QUR0Hd.4]sI+a7?p*=NX
+l#^C3S>n-SE69[c$E9\L;jer;^W\bV?h"-GF:rQ6NQVFg$k30A,QH/.n[dsSGFOgT
+N-\`52(jcjjn9plbNieXkDKDBUpVf!=uS>,#=5,#hXsL`Rq1oGOQEo'e>-G;;c%W+
+*;F",Xj]LuD;?A@FH7,D]Sg[i?;W,7Y<%L<&USJQbL:a#k)c0</bE^n%]QgeN0\sf
+6QVpkqW:lGq6Esc/R]KhmpL`G2n&H/2'\g%H13_IZJ#[L*\?q&F-5/o6iT"j*M7lW
+'/S!/hacJ8&!EKtdW7K!7H41l_=N]5e4rNR2K,5GM[bP/2SYWi.IYmV:3pb0`<8,2
+KRZe^!+\PZYB&(Q>lZ->,D,(ZK-pXcjA)O9!2PDT#3%7GODZT@,%_8ciq,UtR.p_Z
+8g9F"U,r!=4SL%k<l0Anidbr<^dn`k>*)ST/?i>faDXD&M$>RUB)7Ghbm&oAN"<p5
+!Z#Qf,\,%D>Yo\Ln:#!S"H<TeMJ;MblnVd]>%,MKB#siU0YCWZGaP>a_o=\EKtb-P
+ijsk,Pd$J_#/"558mt1QP\%SE"mD/I6GLmU;F[1,/-&mnrg5%pBFD%I$"dE+en/XI
+CMB)MBm-goe<ss8==]2BMjk@FCCr"I?83F4$.a)">#Roe[Dg(l`L*::R%8'I>t3g\
+-K(Ri*u%?b?-?J`b;<Gg<+]kpC<KLoWeb;ME.KM:CBkc\-/>=o8@#JX7S6)TaP<V'
+A>X*VW/>JcJlJX?Gc/rNW/"oea(d$&Zug<)EU*I)MH!r:9'OKi+N9dRO-5P9_Cokh
+)!J]-UJCdQMMpL,*(n<:WgOl`n=]("'!"e@WrF,u#p%FZ+_q^1Z!OKSJ2'PhSWVX!
+K@4?]p*F`7TAlYSOYA9K+LXnTR_i,MK23Z]:a]#*O_a7CW9T=V[j>P5,XY-JnMDE;
+D^9)gOc=[eWM6OdqQ>uo,g0[EP$Brfp6/+I-AaR[Egj5s9!6TqZI4(K.-._u^p46]
+15\]<b+cPL%_ShT_I=;'.jDGqB#>!F.uQ0EEnnWLI()FWZfi=5Ch>gcd'QW6[&bOt
+X'3c+50=7pbmS/;$VH<Inq:j\]9"/F6J/mo].Y_b[%`qp6CBLmT[8SK]hD&0_\fE>
+L4kJd0;HuNYU$pfMRlVD4sRg"N6a<L.\*7?1a<;_,HDjk83SQ44R3;2l`tcAJ3,8`
+_l]NINNU/pXM4/W_3:7tdr<)J6KG4I880F)"4Fu[p*%nB2"QUpTPR1nC<(7!P%-UG
+F143s=@BLF7SQq'7bl>VO@q)15#(W1F3MZmPs6p(^a1bKD(>!jdS_m4heWct,=t&i
+k.i:;bRSgGc?@*ZG<;WW6>m^eL(Mt3MIHl1k)?9+'EmgP[m>q"d;H>:-328%7+@G^
+b\gn4PVCFDL<L.;d`'*nY*@C1d`ocj7"toYA)p\n'RM,WcK0T'7Z>\h][)=l*Ya@'
+buj#NP#*`HD9YdH%/<aR9%4=heh90ZUp;iL[R?(onl/0P%G"ZX.O;r!hh8!Uj>teO
+-pp<26`d$7-N;^e'&&><05[+Q[,BP1b2$pShBW`m@h@2_nj8?Vq/(6LmFP2F(,ucu
+3":C_Xao+7<o?\7h/t%jib6jD.9$bTro-XMm<&?0o`*p@0$T.PUJ<-;j]3*g0NDT!
+XdoKpL*[;-,o$4Z<Bef^Uu<l=g!t9-!_HMRROhp!<Y^)MU<)I`qW=k)3G]u5d!53"
+a\H<D,4=c#K2i7fL;Ob'NHL9eUGFQ`Kj67>/`MMrNnBT!fa3;(_[]9t8D`au+^Zqh
+?-)m+N!;<NW6aW*;G.:8AL-`+p,"ZB?'Y3VOT7C"&3/&B@W<shFt>!Po'dDC3-H\u
+CL(>kQXZm(@d/R4WVp4J5k<*<ATB9iWIj_=3'%XDm]0gh0mrVUJRr_E'^o).6pDu:
+-QY['Yf'YIedWHm/Js.*BQ&9u`)s2'UDu10>Do$j@f0GmXJh8cVeUOUjA)^nPc09Q
+X"W,,(8.UeV&H1"l,qAMJ8CsX\:IN(,'N-d@L?Ng4B`Nc]iOlG$e/=V]W@ibl1*D`
+.f;E-UDtLkED`'>l<A/7iGSAHDB`tU2Jab?GpQpnF&l^eX`h#dnCX'oVO'cYBm?8j
+7$ig:0K3%%<pE&k1bmT8F4Wj%$[hp;J1C$K]YY,%QY,ic1b8;tFnY;rFtbCCglK=U
+#j`3G0].**1a1Il*t,%;Z8.=N#f^V_&uuuqf:*gq!IQTH\&TBkY"Eg1cQpk_,7J0=
+=0[2?:cHg@"-Q!(CC#M"q^4>U,g^+PY[Mui7onoL-VQ$;9c0"+7jc+cInID*N$+?T
+euFLu46ik)(^Ya#^;]YaJ57)UD-n`F'.]i64ZG#DVjiA2LFVoHZ(ptF,P83B8@$-a
+KVC%q,6Yl#g9ILr:C0-QfO%EPi8H/o5)mpu<4K31N@sk'[((T=Xp2=H(f(4/`f<tO
+=KJrBFuIN68o&^/R(Z.NI5/*&.Ae#p`[\>t[5+UjNG`fr7M*^%b@HO&A4%'BoPhA'
+<54Z+N(,)*Gj]%aaQ;a5;Ch<OMtrE9`)Vcr"-,.OO"!#OiAn7Z]%IUQ7`dSL+ZUnF
+PB?::bWD$1b&!"[PS<%DZfp*\:doH68!FSW;Z=Yr>f)n,`:(l5o:;*6\NPrU`[ASD
+%!HtR[o@/S<",-H;t`C88H.sIQukaCq40AV[fNRj2CfG]6KG^P/"7590W`N&'EqVW
+V#h'816!F!bj*<\d0ULnaZ7/J'M/OgC<SZ<74_ijbXBiP0[Wn*7P$+=$q3iFa%!KE
+b)&1+=nL$s4%[!db]91H17HT`b0aB%8T=CO)B@EhKqgCmOg\6>/)NaQ>tM),:U`8U
+[q2=V_kYHqEt+\9eCS>:?sAVi*%d,X2!8ri>d!JrX"F+I/V("kJYo/[C?fV48o\X/
+[&<;>)mopM[0pgITl;2(X#1c2G1duFTRfbtDHX@q(EY,ms!5&PRhkdcCRoE^SgX7@
+fT<@[Y]r/E)daBNX4KA#pNrrSqHoS'/qQH3ZKZVcrH(lTF7S(-;RLPsNeEl"GV_gd
+Ri?LZ@YssWZ=J<d!sJSi+*o0;16:Nr2dFR2*eSe`K5K!V_tSG0)DprDGZUb&pSKZt
+e$CW-,:<G9NSZLS.Rrs^6)23%qg:V-k#T!S+uH'EGeYHIm3?\sH]u]-nilF28Olkq
+=kD99#o?;kB]j55R0C7'L%_gknKMke,gPL!-<l!I2nS^,W[8f/WIRma8<Nf0.(!g"
+gZDTt-]i);:j=HdEk5"*;neah:+N-(7(Tb#oIju/Q<8t<QtC3[<j+huKs,u_X[=[-
+ZS-\`LeJsCXS[d#0XHC@ZpS<3,=K!gRbLa'4;-s<95(p3ZN]"5S1?V="+?'$NJdXV
+N9l)*o(b,-f.\1Z.T9*\I"02[VgOlrH4sr5]StTD20jS;%(QXA;d?uAKY;XCH5qg+
+ZWEl(+(eH;;c?#jdmF]b04mlAb]uEmGrKi%-EkUNbj5FO'9B"N5H!j$EbluHX?1NU
+25mt7?I>nY&[Q9+5H$STWqgO81U1jl3&(RC4d#U*[g@$,Y0hRoRnX^%K?n^VqLUcP
+-l3aWW<fT*RB:eBfRg*+c$"+ghFL!YDStLXI5TU9WdP[t\<f:94!2'n5"!"te\-e6
+`k?Vd]s6ZL,PR2NQT40:rH,4lEK2r=SWb;q);0nMh_[^,FGM5RjkLZ2:_Hpd9/1X.
+s*Nfg,6U%cdG6pUcETOjYE4e$)j=->2hmfffhpJq9V!Cf6/NMsO^a5)gPRUUY&V*Y
+Hfp:B*YumG:Z2,K,HAX9HcppPF+CC#IZ(%P3%M5c0Yl=$?lRGP,6Y(5.D:&j]t-Mk
+]XFkTM8$\n0M,9[a`=]/r2T$TO=Bqe^1G*:K.#Mu_)E@<&`52TTBFii(K.U'b9HGI
+TuB.jZK6qiG-e.G%FGcr[2,CQ2P2\Sd^6"[Z>(;c=!f.\8T;8KO9I"M470*Q/1fB>
+5W\-oh+<Y>rU!YAY<M&h1]X@ujbS=q6C3GZLHT[B/_M3VF\R)LHN/"i!e6P$J6rc%
+="U`0-*`gFZ844Y'.nA5A+H6>fc(W2]0V"Qm@Cjo+tErtlUT`u\gh&o*Y7?;\"4ae
+hZoWON#/PfUO=0+*ORcJHgAk']U'aJOn^cr,:N5nr_)2_Sbb;7O:i7kXIO:9Qhhp"
+JdKUGaZJHXf73W'I'D&$T=_g/!@W+/-,8+[qS+8ulF_.FY+BV]5%(BSJ?-lZ:4@#]
+J7]o+0`].(0b>9)UG8.m"u@)^i@qbYaE%oH%AIiE6muUULVaJI(rR%.D2?(TO^Y%J
+@hb2$#"+3Nc7:K77`KI/FFk_pQUupP\BLrV/VZa7PYmZSOWBb:-a>\A2FBd.%&&mm
+9MUWT)G[:H):6r7A<tmtYr[S<BkF2t.olsUqU&WA%4+q%D;p[q]%\l*.j\rp()k`l
+OISF."WJArV7>7Q#8:+X`:"BK?1/5IaQI#PgiY,9MT?43;A_5S*`=6B["@Wc.WdH!
+6je1>F:0reaUH1qm4SNh#01+rgT:lO/V/rE\5?\CT9D:aa5J7WLLYnVk&t>JC'RK]
+eJhDuSp2*l2;+mS3aKJtk-$)tqDqYqKPYN%WM_<:@fM2/HePKScj4UF]P0b:gS#)!
+Efn'IA(L@O.BE[:6RqAA]`p1SD$d4]4?a_#BLm$,6kFS^#_p^KA=u@e>Q,STnEb&c
+X<G1u(p#HEeul$Xm"Dl;0u>I\^bOmO\tNje@jf?kN.1SWnq_&q+`NsY]##W&oSc7Y
+S9Y=]E,-+>4`aT>ormmZ-5oNc]JDRknOu."TlA5I*(=pJrq3blXTp.>m&X+oL2tpc
+pX,2?iWcV`C'<$QB^"M4JYKY>2^'?_I*C(NI01n,iP_JLdEc*"+#P0SU'@85~>
endstream
endobj
107 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
108 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im12
/Width 504
/Height 80
/BitsPerComponent 8
/ColorSpace 43 0 R
/Length 7943
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]7K#D>EP:q1$o*=m^QU/<U@//ASI7"I&uj>7JUMLpDPi)ha/-B#bdn[Rqo
+>q_R=AlC^cenm@9:1mL."G/!;N'cQ'\FbA).$R;719)WYSPQ1`C/m<k<a.)3;!:0C
+rE'(BMUJ5lausc.?F3mQ<kDqOh%61/CULdF<deJM`PIjUIJ3Vh^gM+[4,cp9)5,Ta
+i2\+q/KpEfnl\)P="R@P="BV>9S1f7Z:3d*r/P,YVpoI(:gD:a9*ijICDncGP?56K
+DKf-pDJiI%`E4kE$J+[*a5h8Q22UaA&]M@tEVOEQ=0:*@:I0'iF<8Q-JbUTN$22s[
+ie)P=*ku8U=,6M$n\C_A0H(D=_)o!)?^kkc^MKo.ofb&ZXGT$B$]b'<l3"JK!?c>&
+"u7W<'Uuk<)f#h^mt37&^lUB@W$EoM>jSPm$m((Q@!Eq%,7kg2V^r8qOO0`kj5/6;
+leFi>a9g9OnjC^&5.rLbq@j*a^l.]_4K0f*#,s3X+OiEUUcBR@M<"lDYjqTkO=Yp$
+)#M@p;](Zk:E)_JJUhj@`lq@rrg#We[(AJtc[>[UZ]ike,/EJ?+UL@&>@>HCb*3as
+UskSAkVa+frC]qNarMZhnf(i^dg-Zh/\Gn/9F1b#L`V^D1`UPe9GA[anuS+XjYP2=
+<C9J^N_N"2:\+1.?)+A$mKZ`7Qm)f-:3q7Qe$UA[8'7#Pj%3<'lfDSW[d/!:bP'qR
+;,>^T^7lgN(a''8(0-bk=qCjJRB/<V*rFc$FNmmnX1cJj?k(ZcaXHjOfgF;N<M]UX
+P<IJ%iY[%j+(7c!iIKr!>sShQmP>mghY4TY&E%Wn!@C7b3$i-&=@N";Vo^e7alKtU
+pJKE1-(qg*G9m9M]uZG`"j2],$"O+&==OXZ2qAKrjpF"XRc`>(gub[j*#fV\mLiFc
+=piIcT#aT0I<eb*fG+]a^ieH0J[JJK9#Xn9D7aQ;ar\Q1[^=Aj:3nI4%(Js43u]UY
+-I2@%NFX2?c.X/t7&6K+)iM+aUnOf,>L&%ei]#FmI&(kN#.[tl%/i^tWB*lidE$GL
+E25'-3;FbU"HP$EFbRAFp?Oq)]lWuQfi?jo>u_27g`=R1_lLCb1i<_<LA,?tmi:<3
+HCAijchbk";85u")/XV@lBO0_<^%\hFM>3mLVkiGUtY<Q,V*NMq1?KX=J7Zr#!g6o
+7>e=lU&f0CV"Lom5cW1q&74FW3]P]b<_]@a7h.*?\tsT%MEA"mAp(4.P4jCHCV=r8
+%3;D1Jm9F.fe=nDciFk\qq&H/Ijt%T2C,*e'VRUBWteJD7BXA`<!Pcb#ee.lkc7^9
+@Q7,Va;h-0j.JtpL#h)4_"U8$+-PVr#!#pMV\lBW)IJ9c+_@NaP-j5<i(hM\F"TuM
+"q;I5MWp*1_8YKW,MH4PDT'?kQ#Q%d[!@`enJ\!>R\rrOIt*:)irK?bWXt[qJFUc:
+*Q*V0?bt37#A!WsL#d06[#gJ@mObIt5cr_'@t?31+W$B1!m92V1N30s!C/+;jmt$D
+n\+cW.9A60W`!ub,pCFZret3s:i;2B%'oJdN2.j1IHdEhaKrn=&eQ9<J2PLm7I(UX
+P5#*O=:>4UgFq/^bpEj$rtH;6mR\m-D@+D482L<qRH2X:a)*]@;p^QOn["H4@,+1L
+!.>ofTp_aVXLo8hUf9J)+se8QPQU=U^pk9b5[Y"OO>$igQkGT1/c3%,-;3?h*)]^U
+59Id"oAPrp-WCY>WAC/@kY"fD&t*[.djWf^q/%j(h+*W.<eV2a_anVU#6@(F#(X3!
+X$B^.UA>_(aV'G.DpF^oVqClZktr[!jlj3b_R]^KE14]RP*[MC@hV-UY%`jW)-LLH
+g(dtl'f@F0pj,sSN4iqH!d0'E0Eg1=)MK["bF02^4XO,C1Bd]16J,Dj&05p:k`iUk
+pPf:j]Ym'8,lp2!Y/R=1gNP8a9p3B5Z5@fu!`Je#0_oZ\Mo8>>MTu#gRVIg,,@`]1
+'[9m_h/$kB'g@fKk-RS2"TY)B<=uc8:$E_6OSQ#7A[,pg.be.V&euV9QB/&2:]rG*
+:q!feoM("P0s6)N,Y&L3Rqnma?c:2k$P@(h_`UH<L_7+_@:c_p"Oq/%MNQ!Nf,)qP
+ITI`J^lX7RZ4#UoY^-(]m\V.#6IUD,'ciZW)>7M8At7XFBp%kKO1G^B"Ya<s=a"!G
+.9[]sW2Z^]&s!E..*ucP2"Qq'EU#X(gG.>m&M4gtR3lN2;AEC&!nCfh?&DPiR!nI2
+9gHonAWR&[j]o9F:Ff:%8JJ?H,^[P$UKU;nKpq\TI((9r2tm="ClnlFe-VQg;D+K$
+OXE`/kR)lk3!V_<*<Uh.%8pHA<j'?+\*m_/1(/5bTs,0M=gadE7\nrjQ:=?#`t6<o
+&=q7-,=%QGrunB5?;di0[7k=)U=\%25]+-(P_9Nu&4?dhrfPVODe9$S1J/4MKYo[d
+1U.2Aqcjn+>R!8#>HGZ.hQth2asUmJ6Rb]EfhIo5;537<&$'lB>s7>0>JWdb"@013
+"8a>T!ZdE"!7m@^[Q9XU*6LOK]F_!IEVu2G@Z>=t&tO/`0<2VSm]aM1Y6F>2S@^pg
+AZ=TV=oJ]OZgkS@.S!1=kuB)B-3\qh+p<F\'S<Pg$%WX3"9='cJU)^nGCqSuN:;YT
+MXpfhEEK@nFbaYG.L#[&>brsQKI_>Z9akR#jUZcHR3loOh?u-JmK(_[\`DHWm8G4U
+jg_j95R'L++5``Y'nY@G$NXol"[J^nm!q&"5cRT2ERuX(mR:+r(>,?]`D9$;'Z^9M
+liUX7%qtqE4$^Mqa%hb5P6OmP%6CA=H+R0NX-D:;K9^PET>c%3pedi(1S91O$Lc>0
+#Jf4O"MgB<Jq-`*JKDl7i,B*/hDkV'nf1M_=]$O^%t#4@E&:(7DE&nF"=IRt"9=eF
+!`2Do4h)X;hi&'08koOBhCGH;pN2g1YI4/>:cFc/SYEJB=OD>^e,"u".\rYS,N,dM
+N[OlQ"@,igTN:4bP2Jr%l4#FDmuI2G+@>?9<TDqaNNBMuUt4[]=Q3"<i$-DG/-B9@
+k$UpeYYYIq6j.@e"E7HG+@$%e3i`IPlU"iFV='+LGahCB_sT)&%^obsbU]D5Jh(rT
+/tU7E(8X[bG\DDB?m#Oo9(&?W"^k.0:hBe6QGJ:,#RFg3LMT9[9!g&j[h#-Vm]=2*
+7&f0<?U,sr+>hM#>QiBg"E7lRN@+BQaS_-5Bs0dF7uW6614^l\C!RKH7<g#Q_BR>n
+]*ika5V/I;h$5Wc>Nf)g-K5+-49R?7"HIa3E#ef_0OJA_7O#jF`u\lJKLO+(BkE[S
+Y\HB)b[_$7GgC+-J4p,3=9[Vp#!cc(i*>F5JHd5_$SJ*Q0@3Pae05-TK!?dP5SA>1
+3-FSD/`f5bWcTT4#$gU:h[\TU$:b^UQDI:Uj.g"PN6qq^*>o9)o559@V4=(G[ZEt+
+RnRe%/@`lbCB.hRBS7?hi$JQA5j"_S#2k":i-kp(E!IM!"s@F[mdC0/FODcGbH].P
++p=me@%47WU$6mHC/DaL/CcJH0BJYBU.3P'49U^m"V(DIY5nUI!e\Lo67uU&N7<ih
+YhLg9i<W&`6boE%CqD72bOT0p7#l7P(]lHl"<^MEJ7&SSB.?/U#%1[>TOA2#>7.$%
+"S*o;YDVNQG$)u)#OPF]M4Ob8*7A\q`t#!-d/HFO5Y8!j"(4Y(!,r/CAd3cr"]2H3
+:BVt?F=HN>Rk_S/ORW]IPpB6d0OhJcN96M%7_qhHV!P]$Uu)Gg&i#;fSSa/bcs-],
+^tA)9kDj!SP=#O-aoa8E/5g*=#)INpb`kfn/\i&%/XW*6,0RrkbXE*F,_J&V!;;::
+WrP0a+Ck\LFpF[R"^je%ZGK=h!@*2hcRXt"o5#[GZi`QT#&:BC9="l/7jA./jJOV+
+6g+R/-3EeMk>-]mP%*/p;Xob7S^$d0%tFfp:C`B_##1WQ$QSaM@.Rt(*b:RWC@o$a
+3\TD,!l-YUk\T3JWl>ZDkXIVe82pW8/-D#R"/%F%TMPfb<!7_8Z14)=7@c_U8o$k2
+3qQB$U*d,t,k<LtQh$+pba`T\J6tcN:e$6BTJ?XX8GAcP"Y[@g!&aoD]J8TE5(FCM
+'S$;SH3QWD"s@df?st5:=9U>O"]/\!Z,5\r:813-L5,ip%PTSE(BfUfV!eC'8V\l*
+#.*Nle?;Q,;$M/BRK4NZ"+X8RJ7&M^.+sW.\#MLYCV2?V<fZD9WCIMA"nL%ME.1.3
+N/I9UU:pY9+p.4R"0]TPo3.!RP#'CH!tJiF&V(&U*X1'#"^k\*;tTfl8d'$V"):Tr
+B.WE2>[:-u@IXif'Ik7K'E_<hk3i'JPTI+<\OGM8K*^s/`(G#?Us9\G:IN)m!)"HM
+EA,*aV%MEMjNL:kJoQa(MNrc9nCht>7]9r6S&.(M9uU#-ik\37$Z;kFA.gMqD^gSa
+r,MrF%?/s?5m<?Tf^8Ui&@2urhcEK>AInMdWF4L=W[=AS!h`-iTPt+nF9V_K"R^Nt
+`==kj0MlJ*PY;0_/,6iTb?9F-X_R'&!'1:6EX(H<##J:iMF7Ou1C9cgq8B5YKGamV
+oR!sn0<VUDd9P1$I8WY(NcL;T6C'5.;#`']Bi.FI@LQO"+HjpRi_7jglu:-fNtMbK
+*RK7BL\B2o6N.RqgJuNA^_d,<7L"BT#=*KFNc"tV4DBbU9a*kH#^Wpi)E*kU>d*@/
+j<u[9s%fj.A!!er&7V[N!WhXSbj"+O.P5FQ5lXeZ=;E5cYhI`+*Gbp\L<#O,lSL5K
+*5hJpZ?Em\mbphi,"M(--u6(WEeun);`Ch[IL[u&8DGpQ9M)>+=psVf&*,33[8Xk5
+"TV*Ui'7C$h#.ConMaW1lgU;u+K)-k;HLN*.7!ObDR`"9!K95lJ2ZSPli\me!pW[_
+o3X,/*.MJ<q93rJ%UV/:`B7kGe@!Bnb#9&Gglh5e@L<Q&Wo>[&fMsVA;f\2^+?;9=
+Fa^Ru3a`m08joJ9bbU+iX&24,nBZ<Zfbn=2^RuM[81&inQI!Xe/gLo.1K^\#.KaLu
+<CU4MC@_&=9[so5H&T&L9YG6B.V34ZQjlJ=Be`L@2JSHc3/*RtlZBV'L2"!T50'.<
+/<tGafS7W"bnAnC/-SKI[%mAAGmM0Bmg;9K$C0]"2<"rD5TU!,7/&8\'EB\b`.!fk
+Y<g<*Ft--)$;0l0fVHbF2g=aoG()S6'EX-ILi54R[s*%?9m;GK/RT<0X?MgP6M>IU
+]EBj(GOB$W;JD3>?Egf:pX8q(7h^(<kC>PnDoMlT-CrDQbq22W@VVK1B`rrC<=Tfm
+M"aXi^>2N#Ml$nse&ONOWj7L-Su/hh;6h_6D(Oe+Rnros[]P^fIqigb&\*H59,ai(
+Ehp7f5VFn5="$04/4m'7G53K73CLJ;\rEu;1[u[4YDVH5f+ki6rBeDh@laZ60EY*i
+pCk+?Q_O3AA-?df"e]B0^hjm\E!?;O#-iA*TNVOB;?\1G%[CW.cK*[-=L&aG:T<CU
+5Ts6[9_ac'.9;:bfQ2-$"]4RPG,DcUE.XU>6$TNK\Zb3_8IV(];Lr^.8o.pe$q3U<
+VgGR=@.95K9Q:fKEJE'n9#Sf[8M%]SYljfa"#/3$6<cb#OTg7s%aVsJ!'O/5Qq?JE
+PMdbi!(Q^O3X&n`mpK#si)U%i=9a:l#,$JO!.FnjGR/hS#CqI4?uQ@6U^$B3+nW8J
+/oh(udaEl9!]iq'p7a(q)?T>Ip`MQM#EK+doY`G'&(X2rVUn*MIt+>9^f9im,%sQS
+=^/!`Rs$!<%0fiX3t[HK:F,:B,*\KjYFBibA5fY@Vd/SKN`Ccq/!f4<(*kiMD,UM/
+!]VA-5Y_M+<!EsX#,#3*+CG?lYkJ,I!V$lGoeu^^N;(W]"JAmHqmls(C'L>A#9[O]
+^ifnppD8!6"Yd+AD>")A/#7B3QNIMN!#>W$/d!hc">)%n3+WJ!guo2ZAT8o38@KKs
+TZco`KL]:"6BZ9[08fm9DBL^^i'-`#,E]t$69(W`)2,:gVcUFV9S,BPMf@D'ksm#K
+g9?%bA>_^OgcU3HLC8uQLY*l!Ec!$$!K]k@O`Ua,Ad+i?._p!-+BL5)oE))'G!HlG
+MFg1b4]$(?TWRrKmJ@Q9AG6sSOf?qkN';QfM&I/912=2Ecl1U+cN_!6<)_?LcN.Q#
+Rf=hmcL9*(jkZ(/XApghX%E+.".#+m9s$4]UigLEOL:4<Kg:jI@9M0K%jNb56p'dK
+4\AW6lP@Zc+Z_tOS<`?VQpA@:Gql_*0Z<P"Q\nY)lrWr"/V"Y"S/)2=Mp3o+88qf:
+J3<V"+jpHp@OpA:?(oh<Q#s*MFL38Of)*Nir-RT_"/[5jn'P2MIjTJ<bH%tLW4$Rj
+<pD[>kM:beZA>c6:Nl'Z@1`ViF!h)F?K]V*QhD/Pbs1()ju*c88f#;8-uPZ:B7fil
+K<6&fG_T@S6e/suePTP*;&nS=bH"^[oO9*oc:2d[5s"9I_u5t)8R>\@qY^iQ)&k&"
+L).P9JU9s#[hCO!B"BMIR_tGI^Od;6#F^pP5]g,%g%hm/Ya;?b*qaKbh*dESW,R>Z
+,bJ;88S/=R0Y2E%/DJ.-_i^-Fie6Bl0%;qV]1X#JfcL,2O5oc71H!YK=B1'&K(Gah
+QH@-E-'.>T2/1`uZfZ`4K&02c:qA%jY.B]qA,8#5r-cj*BNN'L'*qVhB!diWTeOE<
+'qe32BIOFPa+AtB%<1hr]_V8eVK&Pc:/oab9t48a?7_sI,lqRG0QmX[V`t0SkcjAi
+XgI((Kuep[C^48_%R&]o:V2$HW>L>@i)j]PCK=3)H@SBh=PHdm5%s6',$ZjuF1J,u
+k9%9+Q-)M;J=4C1!rFR\PZ!4dhRF4CQFkF-[*,l[/l%1m[E8>D%D^esMGYf4?Y/p3
+U&YT*K0c^qBJ:G1KYdbOa<3)<$3Yl'O]\ts0c>lN6(q\rBI45o7&$qGTI*MSMul:c
+R8gn/.KrLXP?G9J!<WT0UgU-cRW1'H:SlPZ1r<*TUWoc8M>]'#;4%FD@*j9B#<W0A
+U(J:A2I6[o"Ti*DW(8$CZibnG&9pGe&-plSi?4E"mr\llYEs3^g`d=8"D;s%BKEV#
+Plei(@,PM],)K+$OUBn?@?mQrW>(lbIW&6mKs'o9/H7/jU![JZRSIagP`ff-oJn11
+'bR9E1`J[ao0L3i>J^$VV:O7m[oTai9up!]A./WXeo6^Q.Fl$6XJ&jXP5f4'"8mB_
+XpWd4#?B^[$C%b?'F=sr2RjGF%g\`jjn6]H(9P9rHYfE6cn[H0,4IC9c2ii".L`nH
+9+:]jL_@/!JT(uZY^n@((p#1N.P_/ab4IOD6d"I@gSCfXhQ8\5PRddAORs1E7k-8r
+^ogIjg:0=>F/o$`BG>3OTaN(Hm&k-pkR"H9]*>=Wc7AE9+_g"&Y.#irOJk)eggC><
+&)6a9bc>\%(9,I?*A]20CinRPd*"&a`<uKJ)*kCtoe7`n9%4-X%a*5*^Md<:KqT-l
+"#co'@N(!2OUP.DJP7!Cr58k7/P7^4EdHIa!,W*$_WYf1$dTLA(8dqN*<>h7'BK"n
+cAdVt1tRt%77Jo&W%0'iP_q*KTrQN^JY6%QY_^V(`)UP#PM:PMf1i;!$b%e4ri@g<
+)Q-2)e!1!-`C]^j4@;YU2-34JK_9KDp,]$V+YP+i3*5i3)\=.^(!.+Co1_;je^++!
+!(74Kp'5%`?2[d_-mQgpi>=Hr:Z44&D3.g:(.Qt`GYRXD5uY/]bH%kYXL-H5*!L+8
+ka_I<k;LU`iBYX^eH;m/lqq%SF7!n@knSPQi2)iV]WPSmXT>:ZbdF:60_GSu'MeHR
+#uB%eL$Ga,(_/\.?oYS,Z-s7p?$/s;T'(E1Ql^LL-lOrB]C-^4ru5naL!c.R8h=sC
+n<B5k3pJS=;VLXUT'MJ=9jMV!e^,r])f@aGIp6kt(Iunq]f/a:FF/L9eoeZM?eBNb
+QY5#q]shq8G<OQ%hKL@R~>
endstream
endobj
110 0 obj
<<
/Length 2393
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVgggi#T%*$-b\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="5r?Go16G0s+u,nGF>BAH@ZmF`)D)j9"iCViCg&b9$\kr)
+),Q/M.NR]*'<.)AF>o_N0V`p+fO?e2.?reae6FsM$mT`fo^HBK\^SQ<EQ(C+()ID"
+,C!49>>i+n+]]f>TXZC"'Sn#tE4h!))SnsinVFiT=GI?mg5F=fJj^cK"X4%BeE1F'
+MJqL,\[Xn617L3aZacfI2&$FP,6:&[P&q7T@D[X*eAcDbS.;oY+Fr`u1n0H`!D.C3
+8t:f/,3Vbpq32R6%0fZ1Rbbj:EXr'j+'dMXN$E;_3OqpAd"7!#45,EP@A>(`U>^oI
+)6o+c//b/!1TiKl_jGbB-jgTCUF?OK/f9>daC#c5+^uE.2F6(!LV66r)P.=u^gQJe
+@mGAQ.&o=k+[@8V/ijCcJ6;ZcE9q&LMLe`H*BqB&5W&e?Lii+s6Rsf2%2!Yl^n^2$
+eq:iW(jc5n'):?*ZK"b`*B$2o?kgUQBH&@tP>KL:.4i!;(lP)!"qUs3E,lrFUE#mh
+:OtpM36lB&H83_qE*G*F'0L.H%'UG>.736;df9g:.-F)u;g?\[WQ6V)KcuS[*DW@A
+6FsA+U8Zj*%3ntQl+W4BkVq/B[(nR.UC=4^NT278R_0dGjP$FT.,_ImP$O7I>6Aj$
+&.Bd/P9^Wj8D`5U2^>ct$o^_snj(Mof(R^H5gD(;Y.37J%SLrHEK$ZKl7gj'mB$,t
+X%WPD^8$u$3n,AkdoBY7&4'-P&.$<ciKm[/16.G@aU'a?A'4D9Jhe\WcZLA!15q,F
+js4;dOG;\QJHIMB#4ii-=WnNQ)B8psTOXfE&@:X_NPcdcFbBi:!oL_Prb6q:"!u!'
+^l/U-NTLdE:l.J35]@8=6,V;CUl"$,1;8>GfK$E%)@`F7BPL;!+lSMjoqPrWC`L-E
+fVjt=WUSR+NItn0.?0Dpb@.p`bDbKcNa&!<_"i!sUB]4I-A/LgaF`:TUG[cG6KluP
+:q?^$ZXsZ[V;l](K/OMA$3<cgl4/q.L?<CVE*=M=cku4h%2hB<+Lb*Tb-S3#?U1O]
+U!HM>?N=jk,6]Tr;*[b%+P\irIbopK.mEZnVY*<,iFW2o)mJ]t^6:5X6+P2JW:W"Q
+QE8D!P1j,jJ.[DfC6HDjM^.]c.L(U2`0T%r3X]AL2hf?G5sTTX-W$Q>f="X!1\4)>
+K^&ahn@VF$KPb\1)jsOLnO%gf"lR$TL/>ha:1,\:.$bGa[L`h-n1P<n!QUMag'c3Q
+@R-%12MT":&]4qT?7W/$Y>C*A_heg\J:NB:?pIc/\T\/ZC)OA\f%ZM3%1;$D2b"ul
+$tCtH#:;tZK7Yuib+s##JOB^^)"\;B4)>+]'H%I'#26s4,mE_iZNNPM"(WPc#it%m
+&qJJ"$IR6E"?\#_!4E\7G[ub!VD:]j%T^[G2[5q*P(Qg>-tRrPQ=7!%b37F2A^n'f
+ZIl-L3?KqdjMW8UbcR9^CG!a-^M+>K?HCfd)9Tn7Q.'&Lbt40WAo,>Ro.Z9K)0n.'
+"PG',U2gkAW@t,2ZCFhL@n[3j3Td^5RF>,nbo+(u-cGtTZ6FG;RHl]n"MHH%E5Bf!
+(I+c"n"K?9IC@S#3bBrM$=pAlOAdFX:hb8&%@P*nJ8g2%>^1-34I)<=Qk]q[-q38&
+07_J=i[=C.,dcEG;&U*D-e-#3'9\<tau2M@D'>#nR).3YCGDeeM_E'3RLh7hdOE9C
+Vf-mQd#!$Jk.KZRF^h(??lMta(br!XSu,D+ma*CT'dTHH5Q_@n"&#b,NHFHu"'Y@^
+jlLch1TJ1@U:4!84WLFQ-BU3<-q.WD(p69rW7PSQ9gPk*Tp9A$fr?2sXR'Z"1=jcP
+=fGRU>`5S%][h^U6X3iO-jI(WbE+`3%83e=TV^@S>FFqn@m.PlF$>Q;K'dLD7;B)n
+XgS<5ljd5W\4m*jaAh_P:C))e[c#0cgc;ER,<ahM(BVh:g#m?n(!*X].b.S:%cFL<
+d;7?('K@VN,=nM^[o\#TK1klUm)b4$`FaC#9Da5+4mT4lNq_>j'\T\[mB1I2qiGja
+JM-SS]GOuFi"@JV0AO^9G]NIVMqMT27Ld'k>0P_6UP274)8CE2ro5O18qEit]@`#Y
+b8_1PY[*:'(dABf.q<DcJVkZH(B.!8F->\Y.`keIH:GQ>Gj\<m`A]^j`isG,0;9o;
++PS;=UAlW4en(709/:'N1R`@($FtAm/n@N(%<D\oJ2nna@m&'lZgKb,KS]<^b^#m<
+N^1m71HO=u*8>=eGf_br*T^Ga47C+ud+MJpBo3'P.'3]B<LRpm$dVmi2!gS$&q4SP
+]eh,YVmH&bNK=\~>
endstream
endobj
111 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F10 22 0 R
/F12 34 0 R
>>
/XObject <<
/Im12 108 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS5 43 0 R
>>
>>
endobj
112 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im13
/Width 22
/Height 256
/BitsPerComponent 8
/ColorSpace 93 0 R
/Length 1356
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H
+>q_R=AlC^cenm@9:1mM9jS"!dTMT<$3[GQ$8#0$s<4ZX!SPQ1`AtV,c;CPY'efm@O
+e3FC@!J)bO$LAlD"Te]iepAAj$ja?E5p1\;&fLtb!^Tnl8/<*I\6Noqk[gX0"p<U'
+eiOUeb6S.!Z8ibf:EL%he>dL,[>Me(b!E;*>pak&QI/m;qHXS#gB7Q:!;;C_$H'&u
+i[u"Z9qu!jJq3>l4.mM2Wn^`0QQB6Qc3UuNT\E.14;J8-K)qX\<Y>_!dX_E!cu:rc
+%gN1:cto;4&e4DWI6P@Tg:.=#!eHoclmF+]JM!>Ik:BD<aKbe^",tbhcgrL:Z-5!Z
+b<`0RP(^70RN0\_bfai6Z\nl7]-7U#8J8<]nfIh:X`QK3_b@u\$aUG@*7mR&'.k.G
+lskGWTkt_$'d63/daEZnaor'Q!$m`B\Ed>K,rR8?hV#u/K%L1.O=D(JYqR,0,rnVm
+o`3&E_u^$l0&R3AaZq6i\[sKP(G)5p0Gs/j+D;f!+b2Nlm",4n+9qs5;A]Og5_'m^
+JtSJV$NZ&k((,YDYVHW=^p#X#Tn%);$j5H27LfMCn0E_iiAadQ"sJe)'SM"2(_;@P
+aEAV[J^A9L!m"b9*!`2<J0,#ifN8NTJCn*F#@ZP.)$WB,R.`$1LcuLW+dcFFKY]gS
+fISNQ-4ki]86-E-JL/7aX6U$>&Hgtl9G@W'%Go`&CH)e1KE0@ZG6D=K:(/8<,P:<6
+(H=QUKY\]%KHQK**::H?TL'+jTe4rM>\FZYp]4c,a9u>u&5j8I!>%teJ/K1A/nDc-
+:_a.bE*O-3+Z4k'!;"q*liKHa>A==M0N8[:W$i+0BOIc6(l%"R=qbZIC'_U-9pcGr
+#6EJ!)[:kd;6:sK,e3"h5mV?J#6Dnd)sl<IQT)CH0K']#Tlm:MKlsGJfdku/,S,No
+[TX.Coik2Dc0_>q$\KSc4:QoCi#p,s/X"FC!l1HXao_4^*R77*Hklke:Gjm7![+EY
+YW1t[4p6Hj3$h-mTN%=;CTYr)pe\=W*!AA3_Y+-kDK$N-J[@K4[Oja69q_Rf<:uEe
+SpK>5p]+kGkCI#_jQjEVYSdGU5[YQ=!apeX$9noNZKm)a(a&[-5fH1rJA<'f"jMaO
+a$^'$g6)M&AWAL\495hYCc^K38:_TjTn'WmK2,Q')FL0e5aW(08i6;D2bF6YU`D&V
+&-sYibb2aR%sK_G#pof3F<@db4%F,c6cMfe(\)T$#@-IJ;WSLS@T>!Loelf%e6J1m
+!A-P;.3QR=Qs3^8D]f&;7:Qs=ijmSk,Qn~>
endstream
endobj
114 0 obj
<<
/Length 3188
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f-n#R`qU<H/-PY'U9,+0kf?U/fMaiV*ZH[A2^+-aKRZ54JYIO_9#S"
+<$4GMKL<kU!nh`<A;5mL+olF[-o)d#LB7bVe7fGNghp`>BhhA)K&#<=\8BMX0tH&6
+@r%<R)I&]V753[gmj9_*$4ZfN7/DF>.MAD-@C:Ff0n\HCiu"pUCcTL?b)u3[5jEAL
+)pW&!NfR6KL.(P#nW:Oq0%,`7&Wt/l*=jV?n`#.gUtTcG)+4^<:DYnE)Wtbm".A6*
+F>Ok1As8U[6)&tqE-r["Mbsc2gr@j6DU*&I]Yf!Pot@@=I+(&)Wko<,Xuhdb..1jj
+a:BEoH4VG+><'e`!R&1p4=p!3'K[OY=:brE8E_df&NJo,]'dY80TLc::,<)/\7HV6
+@c1/Y1bB[-i$#;(,h9XQ!,TS<Xe:LC$tGCI3"CR3hD[Bl.t5s`8=UUZ8O7lA(ICph
++Ul7s!5e-8XNNO64@<Sm'b(0HJG9DkS*%/^6,WDY.>bE(1VFFD%0S1)E+g5H+ftaA
+Z4A3gloe9DgbK!C6aSY/0*"i:"tp8)2bq\G7m0D$Lh=RK/qkD^758!nn;S*o%m@G]
+aDhJ_m[.9A0`aP<oZ`Egh[l^Fi+ET)+fiJH`USkn3C]%Xfi#m7BOqDR!Q?#o\Ek5C
+:/f[H78aOjX_`U>$mIIg"sKgh'O!>hB,].Fg)-T>e,<QZ=96Bp@LU/!j>MrM3']80
+6R^qTe70?E8rP`HYrl<qTNi<d$o/NoKb;;q6j<qDDB"?iS52L^.0>WWN5:fM4lj.5
+Di[^<5X5uXco'I48<,Z@PNNe`bSfP`->T>WXG),Fi)Uf)K&HDpl%S*+I7>"'f$]Qs
+#6DNQE9$AX,tdHebL54D")uOD4d2qW@oLVB?]*<Sm,<"@[m9L)<l($s&6o6Y`9E0'
+Rc+e1%/baMd2.8$OG4oQZlB99Q:%'>da\mJL!QoCSu@$kC!b8Zr^3Joe3*JE3:dpm
+Z;<*&?8.*2ZC]8D#hWSA+jA(K*;B1-D;GInLOW50JQ&E^NBPOnMh]&;LZ7';6K-pY
+5!(M;\DCJCk5"&@V%>ro8&=P:+\'BCHV;)b_-=UF%C4o0eleY&l]>K`%W_S)$H+["
+0MnlVl`OnMO^5.="O<L)iF8LV0SUgX#Ql"P"9FcK##O@d!tj6]@Eo:9`[Y/V\7pRE
+<OXlb6l<h7FUT_A![h"c_jGslJ?"8:#EVi4_*BOT-=dZAALtg9BItG[g`2EB$K8g:
+,mF^XKcMB\`E&]J%H3\^*H:9_)dmIkn?"2Fi9%5[WU#8BC+KQ+[20=WE/WlG]8"DF
+h+;nU>2dO]LKIZ%K:m.8!PU33=HN=gKN;%9[DjR,?6.Lh`I^Cs4GK5-%7,$C+mWjh
+[Sn:[6Xhn_6+ImmUVbmpr'#oFXou&[`dZVj2IoRjI59r$b#eL<@qXT\SN&>.Ta;qP
+VdM350Zp7<J`qo`\Eu_p>f+C+G$*mM9*TIY*>4QR-0m#@L)IK1;*<V<JYmA2'p]:2
+XPX1-)4`IH0W(R0/MVe&)1tsg'AG'p-Gb?p#71,iTVR<WN$3mBG-qgIRs/>XL-J4#
+9*msp'fTc;(ef31lV\Uu8AlYs5<qJe*<EH(JJ:3q1U;R;/.,%'Ll!*=N0kue&NRt#
+'Ef)k%N(/LMhe!\SYkP=S#JUun7?\^TZ83#Ou6/=ehmYSet-HPa&e98(`]kSc;mdP
+%`J(7+_&NI$->90J[#g"'/5:"%;:+(^_Quj_?nWZ+9g<>hRWauiCH$j6T']4!fG6,
+$OqW5VIHt8E78%m9ldCSO9WEd,#4!VIBW=<Z]L'r>=5NK$_Zm_Qp=gb%RT`i%s<.R
+RGA79,fC3L*BC'">(+r<MR6-uX$;KI$j3#J;Xfe\e[FjKX<Kj7P0lZW>,L5/V50<q
+;!S=Q9H:!i5<L?c&Vc#L.&jlbR*c[%;u%?fV>Wgc!Kd"YX&p3C\`=5$Q5E--cF!aj
+R?b0Lffs5O%-kGI[eBR#Tl@JC/;7T8[La3TRg3*^Fbm2B>bTb^m9Wp!Ha5.K^L0_E
+AaD:1Yuid$]^$YH0VrBs[@[QR>;D8@ftAf>G._$j=)J'&F1le)2r=18Deg22"c.[J
+A%[#)NU;b7k?'EmFJ+H-RQaQtAGT3H3.<:F0a8rB*7p?<-f?H1%:Qck_nb\`6Qg"N
+Wf/t[fFq4^m4L]DL!To+;LbOjQo7hkW<*6gIKP[QC@\,^``ot,UYL9Yja>?[K"dJ%
+U,?l)J13gXd)Au":KQKd3eg&RLr,Z##tF.G"Yf/J5lamo_54:aBf>>cD#,n)nF_Q%
+nrK5ccDI:ung.8=%.>$E$rSc?L35Ka6b\7#oD:/_E7,UU@d+!r69YT`eS[a;bre$_
+8qn;GO@klL%OGYG&;U==!N@(D1Y,t7d&mWVEG6\kbAOKs8r,D@ptVZ!..*`ICbg03
++XK9A4jjr[aS7Cp+h)HC!/MT0DY517@#(#QZCfhga&0d&)C2[,%JZ#-0:VOUELnVu
+\+;7+S5k`Nk(Z1ss!?^<CPScN9O!>Pr+5d&Q?#H%aig=dk1mV&n[%u7q1gQc*;>ch
+emHJ=:E`Tjqj2;O;:)f@(?q@5)g)'je9WA*lAN`EorbRC3qlD44bT`=P5&C?&YiZ)
+if0RNi,b.icm.U6P(J4!Dg'2X#+[[6Fl)lC3mW<;rBIu;hTO)(5m'=5W"9QY":]^A
+/keks.MH&;h?XrS#6i/HotVO/]]UduSqE\\:H-PCIu#cB(OV<o1hur>Nj%9p")XIi
+7XXYbpAP/_Oj?\g^%WlH4eL:"Zg9uoThcgQ`;_u5J*fcK*(1dIR%1:pb./?H/q6Zl
+o<'\>3a$n+]sNF)Q;[9fRC)N+A"pN'6,`PJgBM$"Rf0$"r;Q."hga\Upn([YLQ_S2
+5WRsb\KY]6a+F8NU]q&hrW8\gE#@Y2FT019!O$VBn07n9`q?,Eq'6f,mpti?'Mma#
+l*%*@7D/atpB;+%qp(B/0Jr/MN(EG!2.nW:6]1^!V"uc9#/ZE%c`FL8<;t6trX\Y,
+d!kXaAGhO(j_pUaE(9.(o&Kq?!`,WP&>n?(Yl$,VlqaYMNhlQt<9F`hpPu-90!+7(
+^>rpelAhJ!DaaLi!W~>
endstream
endobj
115 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/XObject <<
/Im13 112 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS6 93 0 R
>>
>>
endobj
117 0 obj
<<
/Length 141662
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVgghJG[NQ/g@d*,`R)3!NDctl/o+?:=UUa!U)
+?:QH\bi^\]'X8s<(r;quBp?\L1n;Yl'1p9"AMtJ2,stKc=u7'(L2iU5Zu.^Z80gVj
+,iGVFSWHUR"/3BgH%d3^k/.eDnOoa=,3+6)_D`".:<#YJJ2E/dP=*J\E,6MZ-T+3n
+#C&X!RNO2K@HL*oJC5PENSsW+aLH13Opu.<_3T:/C^--cE&]J!'+9QXjMMu:C,e!g
+B;BUZm/DW)U=&3afIUrJ$lHhSE,gnRF>b-,F6,t9TV-Ef*"D'e0+n_OfL5FPnW:Oq
+/rbjG&`LggG$>Xn9rA)%PhK\-*<[>8!R/%kL-_b9X+^QSOuEif.-(q!&6jfG5@\rZ
+U]ht+W$NR<1Q7#J%T6'_Tal--)^?r`W1AfUaP8_7".Fi13KW5=^p0R8b4E:iU9O@#
+@7&<^^M3<:#/T<W:biG(TY_HS@ghGqMGd!f/]iXD`&\Aq#f\n4DU\//KEC(0mmD"%
+4Gc(\&3q0mOYa!]%&9303=R3`kVS:ZFC=Su&Y^Wl]b=LUMoUrAi$o0C#XC0UUNEt-
+%D`%a0TC]%l8D7+T]e3@T`Eq1Ne<$O:CP&BU9m.B$i^4B@AF5e.$.QNUd>0",c":Q
+0L.=F"*!N`N)3MF&43V4E#-+RHFik[FbC=%%Uj<A,"XZR'JPPFaRYs)Br(>qN%5an
+ZE3\`SHQe3KnMGqiCj:e%cL)P'Eu<D@02-+W+m"P.S\,@g#HOUCf@)T^<9D4/2/OW
+5\o:;>83ju#Y;iJh0[X]/@75:'>*ZD%V)0S3&8UN\2]MP`:$;l=TI=%5?(J53n^V:
+bta4m2;N\qmD-^uj]LqW3*hf:k*ca3Gj(T)5].F0NV+lmJ6a!2ofUfLWgR@O6#mIJ
+KbQs:milX1)UATnW_U4@".ZJE"X/m"/PD8rl)(,YMdVIM>@!QsgDbrf'Fa[6K1/4m
+]^na!6;:*Ig>eM'_JmiH8e=']FRPcS"1I6<]=5L9:/Wq)4'3o>,V9ESb*7#B=TNZ1
+LBSE]P?#D"cr$!EfDs)jVNT4nbO*`jZRspt#gJk2FQhgGdeSrU16.C5&i*e,>Ve.Q
+WBAQ>l`Bkr(o,BGWZmK:F6P[1HS`VO]T4oO)QocV$Be6X8n]QKe6Nufe&mh]!.eO\
+@*0>(>B+!<,d[b0hL*niBaqnLk)tLm)]DpIFD#GcWZ]5!$4<:3N$6_&AtBB&M00%K
+.'Ocs:683?r]g_q!YBm&%LC]Z?;'&rKeS,@!t+=6:?cIQ2T1tS#W</dKoW>L*"!R1
++\G8[r0'CkILoCT=)<CBZ@hYJeer$b0U7?rfMDs,J21p%J.r4kl5[WJ+Ce*q!0H^(
+dM']7N[\QH_'g`8Q.f#=AW9H>A_7qmTJ-e*$4Re:5pG8123JB%Of]0[':Mj0CN,jZ
+K+^(Dh4pj/-dk;S2F+(aX-[#kM/fATcFfLuNHDAh!?K0f@c1'2$ma54_8f0k_['n#
+l?#+j2E<1GlZ*.>V'i/XaO?MjG_N<e1bR>8*Rp$uQ@QmnK9@:o+qj^;/`7it#M]]L
+cldKS_"Gh?\dAuD%ZE]<*hqTJOchCP#=-^TK9X:^cREu@!2pb:W8%`9EHOr?m(SSU
+@b9djnHK$<*egijJr\PS"sC2I:nU\l!HfP=XZZa33Y2]$njY)C!#Rd1VTWYalp&:[
+NR?*\b@q>f.C>52+IZ(u5s]OfPdhX\$8G6=XTGC7MG:>/9"4']7XgU2o@!J"9PD[-
+UQm<ie!`d*WT[on+JF3`6D[Oo]gnhtDN@[&R83&O-6^n>)ZpGl<Ik<UW>2_.e_8n;
+$/K$kBTg!YMXt#OeMaCKlG-BqI9b2S2m12eU/Yl=>3o7<Z'=gi;Mu_.Cb:sR2(#c^
+lC20tm6E:iKaQ2M:HSZG%M']T<0S\<O^6TjTJUuH<s!S6O/#=>'[RjplFBP9&1e>K
+C?!SiqO!mi13PIMA/gcc7Yk%4;$nc%.j\lROI?_YC.88Z&q7:t//8RbBJkCjnHdj-
+>6sIQ2PcWKcU"oT=BDR_#.QNXB2Zj`0%&d9.1iZt=>GHV23BAo7(>l5Ah=ADnAJCN
+&)_KQ5-kDDaG](,PuojH-../pAR6Bd],c\V`@MdTd%b+J$%#B/paO,sX:?4GM9F[.
+gpgss:b&,K;=ZD3BHICe0M)SE,Uu@XX*Wm57LF];+G>iH$c4#aZiM!ejcEpZ_O+FK
+^t9I1ff9rOQo'MWdkKo<>S'4E6Y38G3R(Vc2BX/6R`k)CY;PV/U,&6;b(3DIG9<K]
+`VOUFPS=2Rq1#`HW.C(JSOE28Y-3eEbgT'>T*s,A>oJT0!QdF&AMA_mHZ"HIP#4L+
+ZN8D%I)S&\$Jj5YGOV:sLo/S(k_PFsU\)mVjj`P7`*!j\<8!RPFekbNFrR+pU-`\q
+qWsJjoA%1i^o-('ZM0q.)5<[d8NBSWCZ:Ki;T,s68l2hbqL(*bY[35$?:9/r)DKs`
+8^cWl9?83K<oA+lcr*_'ZBLm3L;C]Mf4Z`ORU=:<.L&AhKJoK8g.4Ib1[dF1OMW&I
+#^M1ZUh#,\@QY)o!"GQRMGJ835\^i:mOr-]PS-_lNJb7`jnu%s[GF_dq6)pDgm!qB
+"A@(^[jgH%l^%.Qq9\3rC?F=GVK-QudeQC1l!5C*Facp*H.Q!VS=?'k?uO?%#@$Qn
+B<-2nX44[%C[8[G[Lof:eiTLDm2[RdotpDgbsA?P87seDjN^'t3W\OheZY-&*_LuK
+0JC(+Mt9\:h10F/lFe"X[\!6?I+LpY#,Ke2h[YH%\]jT"oGIBZ##ro5Flbg)c1A\a
+dQI]mms^>6&2ZXm_$4V-D9KqcY?g:!^K'k*cfFfG3V*9lTD!anS9rRTn'Lk8q1fp>
+U2Wp;r]3)YSmR`]05>5d2n8d^bMDd)Hg.-rLa%AuQ@75_Lmm34l2N:)ohV+Bchur9
+K)]aWrQhY=iXVT4,lYZ(5YpqnDIVgi_D&"U!_uSj$,$DdqWr*)n1Y@O,X;Q*puJ1=
+3j0h1mc&uI@d-]=Rug\R![J")<pWX^m&rtLDm4THA3^2-#7&I#Bfc%Y,3!O8kTFF<
+Y_`S2'Lp$q!+9gm:m1tMDYMKh7aQD>DG^5O;?fsNjH)bg0T?A=BabOQ4HRSbDJopP
+D#NjDr_Re.0Bbp);Z%)'#]=\l,KUGbb3'9e#**=*E'F%.hWFuJ"N\si!h/*[m16@F
+$4ujrcnu#f_$Ws,m4S8':7D=qLD%mcr9j4U;(h<ReIt`Sl>\^3m_'89eEp#24jN9P
+UH]GFfbMn!((j[bEDl),@hu%,(67mJd<?DbD&:L.(_LZHZ&'2mK,CkK(G=AYEE*l2
+FVsXq):<::;3;dEN>iJ1(%JaLOdd<;<u[:>*"ekZZ*bQk_&?1C)Ni2[;9p$j`?$b?
+*c^!VOfodFdiOX`*7=3sEW7*-aWD,0(fCY\;@O`]#9ct;+As.#dMF(T'-^;A+S#7J
+nX1Tl/Kcel+n=M9P!:-G4!J]8,-i(3P!^JB1F*T7,Z7Pe&mHYZPpMT+-.69M&o/gk
+V^Bi5-PCVN;;3I]Ij`Zs-kZ&!P)gm84XKZa,dF*ins_(kT-BGr.FHNmP-6@_jXX3o
+/!9]Y;R7ne[fS:2!b;B-EJFb:!sl2r/X!gPZJ?Z:i@HbI.'hGWP2dF#iu!sMlZ2^b
+de`F<rohf4jDtP[dYBH\].W[A0iHm_ZPbK=*A18$1,94mEqqFG.l)/<0,$3!di1)a
++Ysc41\/RBP5R3MgGMn_1fI+(;b&^o6T(&V2Np3Zo4']-;`>@s1%T`:'6?*rB/igk
+30RQ*;[#/p&NJ6T3KnA>'7VeoLH6*H2q+fe';ICjY<#U?3g70:e%[sX[l[O+4-P^c
+ds!=;<AN$m44DM=e(Ztuh`b!!4B'EcPNP-Yo/tLf5Eh^'PQ*jGq`bc"0U&h.e&O`f
+mm0nH5a2@8e'gPr,=#3M6.@8K'9bQn1HlL'6'Ma;F;I=Z)ai+:6rZB6PY4FZ01+/I
+6<%/UPZL8;@mngF2&'Cb'MV(2fget47T=:pP]KA0G=Y\[7[.OS<.@EfK1T$t8X,-)
+'UMA?P=efL8edaePcm^/T17>299cbUe@.Co3CreY2H3%:;\)$5b;iP:9N5:j[,"1c
+VbIlY8@6oB1jMdE7nXQ65kOkJ<)6512,4ka:6c&Y[0of1a%gal:%])a1CY37bltE%
+&qF^QZPugV,u[_q;j&k6d?deZM,Xto<)1,+Nr)f$NE$HY<E36X2-hd+@4mgJ<`;dp
+[4bRGB3+\L;g!F=ol4"iF&Or==I"/6eU:R8JQMM/=d;K[ePB?`='AU2=]LqpeXp%\
+UK^`r>Eu6<22,-iMd.";;mje$<Pr"*D-W?e?'UUZeX'Ljf3Hk\?BsDSe`0sNY?t;9
+?^8*-d[+'Z!F,6e?Zlfa[LZa='3hmM??OY#og<1'94Cn"@[7=.efS5,1LBc6?T&^0
+p*4'J6XuEPA(E_O(/&3S-Y-7ZA<pG1el,um:M*X;@9.#Qen\][5@N,aA/8N`<\%aI
+K4WVhAeol.QB,YoP@mp7BpO*YQBu78MeEkZBbmU]euNLcYA71FC"B%o(:S)1_eN5a
+CmH)W(=-c^dqi(.C_kc5<d/EsRr$[;D&2GS<psmkf5?l&?<60#[+/D^Kl-PfBU9$2
+<rZt0'5VjJDg*.=2Ygh6*H?96Dq>A1f,8Uq-Z\p[F*A4;QL/V!)fo((EVDn>2aM?u
+:MtANE`YnUQWIno02bW`+Yq4RMX)[7F"DNZ.//'=pO=>&K,<-l(cR37pPT3,UN`&k
+GLr=/(S>qRUNi-#Gh8j=(TVgZ_g*m'Gj]!eO=>MM^O%oOHrn40=3V$FaaEiNI2BA@
+GL_-9h0lTrHe6qrfB%IjdsMtlI[BSSdL1NUqg\2RJ!^CifCs_2%tRgrIWu6OQh,`i
+q`T09JiEj`\+P@)V1VjOK9rur(cR*b4"GP)Jf$q/p`G(=TnQA$K"+U(\35Q`?[hcO
+K/dLoG\_n5>D1X-L=gj.=/gn@K88*#K(ri1R!4?fZ&)Q&M3sEYG^kP%Dh3/(LDWC9
+33S.JZ\^YuMjT'PGe8cV^PTJ<N#9TlpecrOToE1'MqFka(tXc"[u=GHNL4:;(u((<
+kD\'ZN`b>&=T=GLpPbKcMV/)nR/;s^o8m)cN>V,EfTD;!+-5(kOVnCdfcuWI/!CgP
+P$'T(fc-%+2h\]AL"PpYGs.A%23f%\PPI4rR*1^32j@HJQ<A!gpb@l@9p-AoQJ#Q0
+R=CQK.@0d\Qaq*lq2LcP@@()AQ^O2&3Eqn3Kp=ZjP51B03MDemV4"lLQoV^GQkOY)
+=?2WsGn=&-3R<Dids0QpGa[.eRG47`Fe1P,SbKafO=?dSo6YcU#l4"_g#nur"*^10
+9pu67\c8>V&YSlHTfNRTg'</>+/,+MU6gS.)Af'8,Bt+SUKTIJ=uW!U6_2q$!87IK
+qDk@^l_RbYV&De!g.A.Zjec3_VOC__\h0JAF.O:oT)*f2qGX9F:T#*oW1$#N=r"!i
+K;i$]WL@=rg1RE(CT:QhUABA<HC(A;MlU$BWg^2mg:+.%];qC,XBNfF>/RH\a/n!a
+XI@nGR\-_9j/s;qY$1.oR]!=Bo<0(5X]j&KRa\JZf<<ocYaXaZg@)9bpT[p!YZh()
+gB4`##I3"kZC;B1gCpn4(UI<bZ<JEN].^MF/$rMJZl2Z<3q]hk9s]1<ZTDC!Rod"$
+^U1Uc[G,2CRQIg%?aa09[!Q;`q\cm_3Oi:;\=7uW]7[X5LUgWI\XSYh4$U0c@CfZg
+UDghVgSq^;Zb%0'[[Xn;gUFa5ICqUD]3E%]HdB:7YJ!$B]%^/s]@XaMq7[dm\bjR^
+S)q1B`Ojmr\U4(@fu8<@`pQpBl5,/if87;pNPQEn_-+g*Hl[RH)8N_(_Jgs@4>4Pk
+/&PHS_U+@]*'_?-ID`j;`#MFg=9HL39uU?rGFVaR*"U%/(WK]%`S=[J]O->^1W-k>
+_H_H.Hu[1#J]Bm*a.."fgl'*uJ&FI1a]t=S4I="aT>j!k`dFi,]T^JXYK,G-a;fuV
+=Bik:^W@J9akX5FSBo@5e&r`Sb?WZBSDVNF_os)6cC>j!gaUI;kKdE!c^aIMh"/bF
+gW^`Dc!:_%SG1B9'@#>Dc5dkL>l2oS,LN%ud%)]6h(R.r-dpg0diCO!>lW5X6dhMi
+dG6V.h+Q0:8(4#1e(n6X*<Xf^?e$00eQl\8ST!',Qc`T&f0*Qf?$4d?J'"7.fNi4C
+h2g4ED:r3OdJ]QarKl49KA'Udf:?L+*M_?EES6njeNKPZh7M7O^YE,4gE">ih94QC
+=jS2>b!"A/]rB[Jj4c]8g)\Mq]Y!&!kMKRQg3rkP^$FGohqJ&!c9;!]4iuW1\)2V_
+iLUeAh@\Qb+5e./i4Y]?^&Qqq1Z"]R_u'T<NshJe^?*uLjHs04f8\kCM<,:Oj]@T+
+S-=7g@03$+jEGb/Y=T$!BBNT4k5K^V^2`>-J`lcUkUt!@GBrA#O+=s0k85Z4^5:pb
+UNg+)l5l/PhQQ/bRHkp'lW8Z&hRi!cVr^+_jhAq#5-sT^e*:8klCQ>aT&8a<_sO&Y
+mG?UaT'u%&oBdUbmiMAp?N9Jc^[%KsleYG,T+CGJ=7I@KnQoSmT-*U[D=V#lnt+t2
+T*t$n"7j2co)BBp?Sh9q5P/;%oH-Tkh`L(P6hMO&n)%@=+(+ME:\EUXp)e)D?VC$`
+,P9l7oq-0oT4@X<J+MQEp7I9:hiILRGP>GlpR=tF++s?\QhTC$pg:)u?^pk`L%sQ'
+qk(4kT=an@_tdZSqqnm\?d&BichsEeqVT?lhp_Or4oF4#rEnmi?WI"Gj8L.Tq]GY=
+_>lA.%7C:1YhVK[#)n;`-mTXK+?%*qYW+0T',63ji\<E'D@Hl*8)ho%P\Ni.Oi:bh
+B^DHt,+(kGnk"dPD)@;H,4d8-RWfm>9^!0_*<'5$Sk*K.\kNB-5,V'<'e0qrSQ;!+
+-rm6`Ehc@0d]9f+h3,Z+Z.(,oX$*b8B!9o?ZtfirOa"=iY'14ano[F*?u!/%-"dZU
+_Vd.NN+G3WM9'/of1Xt$rC<jKYPF-;54tJZk;-/Ord-)hbgiVrC#$][$7WpuQMmYX
+DggF&iL=-(pMn"+NORZf-JO6oio><0Y&.[<;WlK>1u=bkX"3N(oNZheB=X5pEk*5T
+mr+EQo(Y@305$d1_>&+9?B9k7fCf'u5(-5U^AkG+HgLjKD^5>^5`cAA"hlZa%.umt
+49Yr'OF/>[_N;Df$,M_Y4V#<U$nW(+d/6<@`">[>k<]bs0c.`i>Y,gOd4;I/`mLl-
+'?6/n<?K2@`*jh/;@Ista:_1"lUB6,OXA/*b@^Ij%b.$taO5HY,Kl8*GoOCOr5C+t
+1:5:Z9/9Js-;*inh(;?b4KC<a'3so_bnC5(1/ARQq`W-0%*&"fO1aR8cVs3G6I?Jf
+*C\8<I/QI]</goO_,9SM9Mr0n-Upr)rA-!(FS/!&c1OJG:f>h,>u=UDh-3Y*22+sg
+eCCsB>YasV_cPHTAP#m&p)Sc[=;BYU5$8UPIqIAWI>kb[Q5+%A=#Pa99XUfCFrOZ.
+BPR+nO6+U'h%&i%nQh$;fW8B1*Qn1a$<?/PhT^K7H<g41NI<";`W^kJGUkY%TpQl9
+KAH<>k2G9-[M+MTR#Wb?is]fOMIW$%o8hgs^&=)O)%IOIi7Uj;PN',Z*LGb&c:OGb
+foA@fjB8WcS`Q9b;4cng%V:X[=)O"Bknh(!IHHtNSYPHg:8OfPRVlu9k8MWgVs>8h
+H*?DbhLVop>:dt'C-)(=Y\fjFc`M('k2!@]RO7F3mi.jr[I9T&rO;6":BA&rS%fEF
+nJg>c^@@]m*Ph2M+!JMlS3JUDo,M)?a7Gg^29GIFY=6Y,SBjpSmX60Wde0.q?.A7)
+?Y.g^SUYM/jkOcOd.SLKESpLqmsX/6?8!VboH$eRjnP52RHJ.qI]_hsrbmARpq<<-
+gA@GU^"hZ$c)p7)I]g`Xr*Mt;iVO^+L[oauQ`^#ZIob[hrr+kBmf-TZYZp0bKG"r-
+700[TJEQJ+R!9Bj?tnVOj[ocCLa#c*R7`(,Xp_B7jTaX"*J"cPiPCmG#iQI+K]Y0*
+&BI!B+\WH$n5:+>Lh?r8<$@"cRN02#G7(%F,rj8Y)a_&i%O)<NJ^GUb6n!m*+oEsJ
+Yehg+.&RLuX>Yn(l7Bio[h#4G5`%410ZD,R(S^7oN:Be&`G!j=,:mMfnZ"RgaQFM:
+>Y9TFiX88T2'2g5eqqe'-q;k**TIigN05A@7p-3@A3>m71."FNW8T$IPa7>m@QR.1
+.jlUTSs(p]9ujdd.3skLP&cFLb)&21,lFg01;Zo/fh3nC4LUM1b#QWA>;%:M^6UPV
+=ia`q0d[=KQuW[AbUI`k->^hkZT;blWM_AGXN[.)8g;>*[im*Bd$V.kA'QNe2eH=K
+M6Znt9_lpiB3a>bZ\E_M3TiD5%,RP];LH`'p2$Wp:S4umDGHU85c;R(QLl(b:C6JV
+kR?pRo@A(]fel1\<>)!i?A_OY&NT'/*M(\hLoqR$!(^N1UnomeSm#0E.;=R6kB<5a
+.V;YZR96>nWg4_VDGmIU/#T32T>2q#9<'G\W&53_*'/gA.SW[9Poc>n,;iE@4]/2D
+@[L/j)cLLb=fHO]YgqI<9e.eTXRu@re10'JW^Tmae\[kX$K#,=ST_$@b+Mh9h,u6K
+B!:m%^t,Ok>8F>hYSG`o=K;=0/5:>nG!a4%.j&)5_(o3E>-D)/gJf^ULorXB\_.oR
+Be9dk[!#3mg8e"b/PVM<[_gYK.iiIXV7*dTb.ZLZGA8_sY.+,i`*8.0E@m`7[^RI8
+goGL9Xpr[dG;A16/!",A:"Hk!@clK>T6DoIg:DK[lIlWdB<Jr/]=3[ihM]-q0/^PY
+\%_7dX5d:M4n?6E]),hBj`E0ChS8g6!8jh;BCEh$^N\!*=3Lo#mp6L<[Vl@XS"XG5
+Scuk'-N)g2)htRd'"=5tcJe+3M(obM`7T8F>O5.?EF&LZQie2`/8'S)%P#DA^>WR\
+;3%jR28bga']^fnN1_3b-Xc%U'!Q>#EbYHnjrZ"Bgno>%WD^m8@k3f!Z;S!b9Zb>u
+/sEr^75GusbZT]LAtt?Rkrrf@H'^JQ*9!-gWK#1k]/F4op1CXSHHg`a5j)thShn)]
+d.qHFjm<kP1i@!R\g'c0XXBl#Y)^s,6T4,^0rD<9REg+s6#%tXWAOUOdTWD<C99(g
+1rc]Ig&"NUc"ED$*dlQ8b?X.gCTMYb\CA+m;sZ)7Yr2NlfK1<dm&c2P2Ene*HIHQn
+D3M=bY0u&$;e>?5\$e3_g=a)ZE:*&5\2Jfsh#!RAltt@\[r13]3r=-hNT[m\IdGqg
+]6s&Vlb'^`o\]Q#=RXN;^UP?ci;<sZmuA't\6f$j]K^Z2/c3LH0,EP.")RJp1hTjt
+J'U608+?Ka`d&>mj1IaBE/n!a\Ap2]S;1GAr_ppaLG\-t:RL]:CWea,$Kq?UP]NET
+c8k&Ug\hL^F+.'+qJR,5r*QDnDJ.JqB.)ql#GZB)O4S^@?gBj"EqHH3\;9W5"rStL
+"-^p_&*IgarP7jq,K8IGQZO_ufV\CpQ/7@)I*!bZ^imHrgO(Hfn(n_rG^e]5$u^tG
+Se&p;md&src^+%6A&.g<%Hfi\T(0OIa8)nQEP.AknfFROqJTHjrFq_mrZu?,+%bPl
+(R=^n?ekILGNSj:TD/>?i;,Z,g-+W:ptkduA?Po'ISZg5hZ/9?:RXpX&'?l&m$.Hu
+U%Wr=_YSaqL]%0hniKY"q4C%FHEV\i6)W]doUGOdJ)C"CBA!3uG9qZk_u7>S^-D5\
+^?CBfZd_/uK0S\iLdV))KCHZe!km(Z5\pD4F:&=ioY2dk^pE"5_t_#^+i$2.53qW%
+bRm,l#epcJ_$dlhF9+ZY$pU6k6$*sWK@dl^'#0XA6+e+$>PCD[rP9H[_41Ki<$@/^
+!l>'Q^e>BWlk7.h\j=E%_L*:h'G\KcoKp1o5l;<5S.EF])FBqZ5n#H^">7Mhlp5.O
+_DDY;bU,[30u3]8M/4q3]H9I.&AhZh^t=i2F?MunRR=^d5l;tH"?=;P#Xgd!_R),6
+e2G/(2nm2p64=+;S3&tU&B'eA_qZ0J<"Qlu\O>40_^mi8lq0We;aI3)_5'34"@'fb
+76\Wk6u5.S/4)YP6UaAr6_$Y09NK+(?:$bW^?eP4>XZG.@mQnC7O2>.6srAm7RM8c
+7EC_2PR0d[A36Se4/>nCC_4RM9gs#s`!dd.]P34=C5=]E6KC0r$tfjY:WDa'_>Htn
+oL+k;j$5kuJ[cPQ]HtVR%ga5'5r8[69>/CH#(nU`]0PFJ>]Yb?L57AN8:])YS;@8s
+Peb4p_/tNk4H9cEN^:=<.5[,WI#EinZcP%>85thf>^]1S&4d4q8@2cUP`87VRRlKb
+aQ.hBHmZr\R)Yqk`S@*qr1D)9Gfi"Y8[O^Q`0/82R`TqqaipGL4K(I!W^n\88*m<C
+1lk8i9ZgV9NT@=dZtIPr)+rhZ9(\uQ*4*U8[n.""b2g(TCplskX\2'o7=;D^N/bu=
+VaG".8VFQEoU!asLJ/E"N$P/kjLi\^^e=$s8BdJpoUJL#SOn458UM.EA=^o6a:)%1
+9a$m,<6@n!dEJ]?aCN1_"LlTkY03'Jc"tTr]Y$ra5YF5obM9)@'V5[@fh9989^KO>
+"Ph6qZ->,A9Ur$'o\duiLJA9'9k<J3r8>ZobfrP_cHPBFgrHsI[EF6SaW0QhI,`Cu
+kKCNu9&usH9Xdf.]$#3Q8NcLf%.V3!f$:r*c*ZNPV"W+sm`g.RbRCsSe>pnPcVQa`
+:aH*4jL%eUWR'Ae::0<5>m/FMqFbr&8'M=`'`h!f%aCNH:QW*5[)>e[!77O]c.%d#
+I*9lI^Wpr)c"uW?eG.Ebn4e<4`9b<:FQQGC%SlZj;7u6m/J:oChGL[';+2d+D%+f+
+f$#]adENiZ>q&Dm#17gqdUa7nFMUi(XjSbJdg4(?'ePFT/(+:f;<7XQV%ZRN`C$ad
+d1"m$75R]G+&fiRc$^2QN8_ng1!e(Pd8^*BANWUC6-igscs5j7*?%ll*)e=OaAdU^
+FIIcFaN+f`a_ZLWV%ufogdk,-JW/_k*CIm';H#_Vb["4@bt6C_=&aTK#fF"!P`XF[
+SQ1o(<FgqdPc7[<NRdBNe\$<1c!aG^;,Xf)8KD!c1nrQ4:/s]Y<W-B)eQ>ZHCJEVn
+eYJkhKJ?N`=O8pA9'p$;r2S:1*S2"5<h49\h/$*Q<6/W`f+hlJ9k2d;Pu^=:=1o'p
+F^Re[Fk7@8:PF2B9nH=2Guuo^=@IYe-&'tTK\'4;a*hRN]nG#QI9'@*;\a:P[;abm
+Nn/>j=7'a'Q&/RZK3*JafaVn!FbX$&,?Xo(5W*^Y*L'Xp\^p/*fO]unSXNR/HWYDl
+fo;NH%A;<ALfi2lfU\a?<G^;.L._\Zfqk%fh4`I1P#jMrfO]lm4bcMPX]:Xh<F'q(
+D0\XbYhI&sfM,UFXc_;5SlDh_fp0!5'r"^!N`hWn=_4kmh723.VHLU/gNBRO[CTPd
+O'-Un9]`$Rjhog>^YBj;g.fB(V/feZ]3Eg5>2?R;*N.I?^g-!2>&81['uO,7Ufs>%
+guYP<D6d<paB>pr>5aXj--9;dW8'h]>-5`t[#`kacrm3M>P2aeNSrKThd(=/>eP78
+?+JbPTA4jEh5.VaST.tiQsJg!hJM-+h8nC-i*@qVh$rOQ]u==FK\Tkoh/):]p"3@%
+dG:AWfi?&H<N'7fc.u+2hL4ouIK!It8R8ai=d5OaeV.@1jBM$!hA,fmoo!0'm9@!j
+g[#JYc)]_Rn6/9i>4jr+Ukr("j%'Fnc,?(0'T,l>Nn!CeeHd+FP_NU`8)\h+4$FM=
+Xr:NX92`2;8_+hNp)7?2S72&LiO#Rme9tcdLZ,V4@C2-T[#s?S,[kj9c=S?]Ks'De
+9]DWd>(.gXXY<:H-fW*`@f@fK/hUWCSRSHPgQ!fE*\1/Q+lYC8@?rh,egb+"3D"*M
+gTESI?7fZ0S7C[GiPn%A*UI8?5iQrL;^Olm/j@EY+QJG[A;36U*Yr5@O^r>:A.Bqk
+7Rgps1??GNj$kuec:MRuZ/^R2@BH57(0/\P9]Y;`@QlYXr]k"3>3)h1j].c2DB%^*
+=Q>uT@dMJ&p.=<R[:V<jaNe>XmNQ2Tp12CmAhHj><0-&t5%V_IANc7=DJ[D^<92nE
+c5(-UIUD7R*SYCWk%6SaVBKIBT&^A&f=#^3%Wc,\7H;C+Ak$XQ2Kn/A>ipHU@Qn)[
+"l8@=@V$$ljX*4I(0fsF8)fOGAS-SVp53KP6>#Y@kQZc9hHacSEFMs;A57tm#*NO=
+LhPq"k/NBomXW,KO6@p1AsR2prg2hlRcaTuAmTq!hNHp%M<%^!kr(ZfrdSM9B5(,:
+B81*a#+T?ZETs?fl8E/7*cGcLUusq39*Tt1%X[H3U$'F/B[3,^mZZjPZ/siJkXMdj
+*hVUJMeU1VC<!76cD>8&VJ!W:8QKtK#-_^JI-G75kt\;F2O<HjK]]/9CAt\9?>Jf>
+[-Fg0lm>567Yp**q@.P#5C@RG/eV6iTh,N`8^O/$n;p2&Z/H,RD+'(p'RagDLPm[h
+m0;3SB%cQFU@#D?D,iCZ1l^m?gY(0.m.Gc6'X2G'fi#9=mF=^d2W<7GhX,LCD;A-.
+L?(s-k(18%mWIW/gog%)jkSG<m^7Z7cKXDmlL+l3mhYQWk3qa+d-\!saCagX/Zt!a
+i*26!mnV?R`qAcfj'5(MDH?N!VVG_moPX$'E(9]i56^Mip.52aDiWsrrqUFX[dN#O
+A[_k^cMlOHfC-^dE0ZaZ*6%G$%dq(&=)<6QG7SZ,Z#CcpDYF/#[hE^F'hId/m\_$]
+mdBS*)Xcc+Dh`<&5!a1Sddb8TERsaNrsWn3T5lKFnh2*SVYb7t.rjGtEb?3VIi<@1
+05r9Mnu",2e;A9QDKA#^n"1^t(F&F*2JjN`F&+*&:BKfg,P/<,nrDr)r6Xsu%8.d"
+aNlm<cQd<\6HnU:oM7Ad*h.-35]\k(F<;QG01PK(&p%\EoC#%fQTFTU86rD:F,l2t
+G9M&].<K2dD\#H^rnh$08+h'8n+R]="u10/p2jY9oXA#l%kI>A/G9$.o3Y5b7nrX-
+<V#7#EG&'chcTI,47NOKG!5]o54S?E@J33!oT(cl<t+eGol=sfEqaD+h^S5"7rqH0
+FI,,_#BauE@Wt%0hT"?k^<Q4+;fLW@D(bBf.&#U%jiEPJa:EelhgoUoViGSC%]cpr
+CljZnOn`aJO$FZZO+GSap3<Knom_Q`f7QYnk/l51pm&dBYClMWN7<?6q%nrmmu2MS
+L3VU88lq9U[ukrkPh3C-q#?"fGF/+`9)84PpWoFEa+a?fqY@Uqb3tdEa-P1=T_V'`
+qM1,XNk>.h1O<$GH.T+nf:'cnQ23^qqL=oZQa0/[VHh`KqA6O7c`^F%K_Z^fH69\D
+#GQ,aUO-@DAS8.B8%j8IZhl\!qQI/NT0)oT]]@\_G^#<tFN+/B_>#[gqu=KYT?2J)
+`psYSHZ,eZ2kKpUWI1ndqR<t[AaF[qHMcUD;^]h;S@*bUZM^?AHacLlLR\0RPPo.;
+lPJ1N#Kb'5hFR+LqHqbMjZ`XhdJWakqi..mViZ/ljS_$fG_ag?s5X#&Z2P!cr;YmX
+8)=)UiquTQr*5uoJ)Ga!_#Ds:ro_i2QfnAOT70!LI4)8sO3rEhh>VWQ>sGCiL\Cbp
+)[HGj5\pX`L>tR=e3G`-%Km!g/05H4)aL'XBLF7X2]+pA0pnWj#9SfBj08m.P\`@B
+b%";ioXZI]Mo;Ag\W#5k$C]$ZK5&R+.kR;fkVB*DP&Chp;+B$W<%_TRTh))e>+J,#
+/??tToqAcs_+_(2Al-QK;NXAIdH:.;FL'FUTN>l.q`Hdi=M.S0Q4&t0lX5i[ig0ue
+VTX=_gT^Ir^,d-@Zds%P^hHQOQG6r\Gq+8fD*Z!+0bUT80's(Q?>:?^mC-/eTk62$
+%&S5A6e1CEH?m4@<IiG(o2'2ok(+kREp"*@D"_LXMIm:E&ZtVFg$&,U=<9r+M;43d
+m<o:A/&Q;qb-e!o-C`c3VYk6p4HJ+/pu[%;Y?S$u-LH0<nNY6Ed(2J=6bLFSlU1Hm
+50_:2#sWB%o*2k3_c[/W:ucs56h(iY#Ifg?_#hGLj=L>M:s8qM`">Z/_8\2\8@Uk0
+<*p6WmsFFB4&Ig`+iP"MqYMr9]P-rPN>t(p`pHH<+[OL$#n"d'</UNCnRT)damoP[
+/4q\(b7dSYr(S,#Z"p6k8hsXtS5$;9Kdt47jF]22njK6*`Y5Ci2p=(:NtY/?1ik%e
+PH<?K;,d[T8k\[gi5s<o<;/Vq'?q[Jag#,+6cN+Wk>=i-F=0jXeD^bocEebK3E!8m
+0,W.ge7U2WE)g<Z;=j-?=snF!Da?UqbmcqeFDO6,9X[Z$-<54XB5C.><:<W:Z`U'-
+`0N6.B%HWC9g[$'9m]IM(*0;6hA6lU?X$Fim[N$125t'>n_O4m=>mS!FBj%7&V=+`
+`WH8#Y+>l>7$^hsIEU6EgG<.1HB!a8GBOFEj>81q9jcQFSWlfN<!.a(<Af&agN^r?
+L1QI$Db4+MQ18*_g%D[Rd5]\nSDJ3rl]>]OG(BI!e/_bWkAe2QUe\<$M4s(CCYb09
+23mgq5Ui^%P9N(>TUNFAAJ"1#_6sK&mMDO7\_-1bm;hYUf&(`@/EZZ]n*BE96L\kn
+]<skM`1=kL)j^FlDnDn?p[<&K&&q:JFU,do\*!"Jne/\bX)e,..Cf#^f,)i/PBSh7
+<;g/)`:d-=DqK2<%o\7)>rK=PopEL>%JF)1_p2D5?=W+d4[52[GZ'ldNqVdo/(@]#
+=-;NdS0TcJr#FU4bAoc?YKu<[:S[*c?K]@^qS)E2lLu?4FnPR%``)SYYA)t+f0oAk
+!RH-i'fnA<VWJk^p4&)crP#-OmGMKmE%jlF^Lmu=+M6$KcLnfakEr1eg^du!jpXIE
+Rf)'$omor5ke]j9#[iT4J?YIN_:(1@hOGO:cIqAG==WXq]GPrkM>KU5[gsLkJqK,=
+!^/N5kob(;8!'#]6RY3h+bWO7O<u?Lk[+64bXHh4?5]HgV[akL;h.Xj01;1dqj;HP
+;=S*W7VD`&iCkgen%o.Dkhc'/P\Z0(l4M*n2$%(.K8%^,q*m=1,?30IN:JFaa_9]E
+U5QLB;!&lk\G71Ve7=fL((*Ra$QGoFE0IRS)bP<M/=kR@PL;3d4ZL7gitJPRON'sY
+fP;Pf6a;piDC@im&KKdE7ZQ_u=Z<m`(>ImCLiTpj9PG:c,*YQR:^*@_=_ep_]T\[8
+rbbJfDY3"a31+Qq_iZ^C6]Ef6Cl\b+Y7PU8-em])e+H#R"$\s*,m&dB)&1G.#sjf(
+"tgTDSC$8P6'$F$U3#l+K6dZ5-q+rFZt>1m)>,\^eK]QCQ+Bi@Rm\YN!L,EW^=!p(
+(FT+KT/<-r;`$j9Bh\<"NEV]I.K)jfFKVR(AslSB:J]>k3h`pL,#Z"G)QHe3WjHf.
+;2U?0C6_/^20PWj8on!FF[pbBWj3u:\QKTBCT3O>?WLpkmctm38!VZ3;-Kku.eQt]
+F^CH`qVt#EF[E/`6F0MbI9ELSIVdOi^/su=>H9KhX7_Xp5)S60;b`XSeLnC8qN50a
+qC\lb]]3$]6!btI?sL-Hc.XZmA*Q4`JC['&g1poQCJBPkn2Aj"]*VjsoRFB:]%btD
+F!3,hM6p7Mk>SE_<9Gha\Fm/\>ds$5m1%LR[W6?A)KfAcmA7@Z3onsdP?[6F]X8Q)
+kLBCP"REJK\@,T5-sP5&@\poI=%:_I$?^\q-+LIm[e*s^_f@8u34bC3l<[*o;/\V[
+TQa_Oi2]._msW9i&K^IJMihLg[Dp#6,5ki+nUGM,!l-dAkMSmf9^T8,[!(a=gY9E#
+.Fo'EF]/k2Hih[#($rZd,9'omh.Ufi]udcrio3W\D(j^L`E,81>PnGMXR8BUfZ9gt
+9=8"Z/kO7rV\e%QH],1a9ib3>c4\$^9llTASsYt+>fPJc6,TAA[2V?/4TbS(*9GPG
+'1/Yr$=#DZ3RMCO6D",dUbhZ]ct7>cW*M#_F=FcK3]VHL3Tm>HhN'"pB2Du4Dl32#
+o$s1g(M\q<N:Z2.e<g26CKRR=82d[';A3DQforX_>bT_Pri9ic&[+)FbLZF:B#MBJ
+TX;.mcl61s=M:-$[R8Qn]!ZSFIA`HU7[Vi_@mX6;)l`M:FPE:GDf)VK#'U"4GabCS
+D,"NOZ<iOAH\Mal^#^8Y/tCY-hdPr3nYc-\n^e`*ZLBDd]G#J,e,/<SDLNt?G:)fY
+*(h,hc5j8P#8sIf>D2L*pVuit(rRDMUuqXY`&*eYiECS^Bs)BN2;\s8S<o'%"B2o,
+0&VG2UQsOCM9!1cN23!HRdTTf`]#g-j]]9FE)%k2H0%oX]fVhYXuY$UcWA!\O0Vtb
+);"`PiT;/iT_0p?9tNn"krbH:G<Js8phsR$4[ZAp:@6_YeUR##)*2Xf7A;f7EpMJt
+^LRikgNu^(k<;h\p9"VM[sr>Xgjc#>DC`T::SdD!&%Zd760#S$JFC3^UN;I?S\6s7
+oc8s?G0XBf\YhpeT$Q)7>VF=8#B8rlF/SO==7SH([.*uPdec8(d_/G(pKMj6qqkc=
+]oTDVVIMQ`4QK0A\2Y_HTCY8ulf)^WD?f%]\Gm&Xr4IOJ?9cj'&9%(25M>N*A-i2D
+ihJ1/0<b(GYQuU0p,=Z%!AEl:O7k1;'`k2r!73(gcg5n<(s[n&"%"46U72*mh#^D=
+!R(KE!f6r>8HOu6!,u&=ck-FWeG_"c">DB3Y\OFsDR"-["V=q#OC875P6_]l"fSC'
+n2CKs9$=FmC=#0N/QE'qR!u97"0dUAE,,akQO*)Pj=n%Mc(PNlV#X,C$BTrHd&.(d
+k(0bS#8"EN:lP[@cHd'F"n:USE-DU`h$o-`%re]E0^/d<16aJ`$gp(`9$7aL]+6?k
+&L]F::pUb\bn*9K&<RJ'&D%M**tbap[tSB)$Y^:?P8#_>%M2\J0hi$Q(.Bp^%FE-,
+0?"KAdfT#/%F=hNnJ;/Oo+fY=%T!ZG7-P>gGnLTo'6,lG&8X0X+W#+\(U/6!E.8B1
+;%HM><"V&(E;paESJDed(/YMVOUDrP:C4;$*-%SeOj+S;ZP[\c%8.9MZ&o)BaOr8d
+!3hA#D[dbMOVEnn&S-/#EN9gOOT\P3's['DOSoLtq&cm#)c%alZ'QPP,7_!+(_O@t
+0l%WRV&5>U#;RqDZ6:BrQP\&s+u)&^;*>]c2'<Mh*KatWP!:):?D`hq+DO[cEW%,E
+CE>6&,Viiqnae!2.j51b'@.`u/ij4;@bO_CBbHI+LmDo(b]6UW?BV8$P-!=lYVOY2
+`6u"G'"BjJ]I#DD16T.)ZFDI6\33a:-*kWD?sm/Y_(G*>/4*2bdb?AY0.u_:0.N;=
+KP`<hm4Y8`/Q1a]ZNb?2fe8'T/^kLh;\:Q:#:jj,8TNoH9AM8m%4SUp8s9r3ZL9R:
+[4\dM0bVYb;SOt"nM-5#2+L4o^h#4+6Si@T2=iCVP3Fgp1j3q12A7MsZMcSCIZh$U
+0^49LZ[F`1#raZ(/$kR%Nt"%2pGqMQ0XDcJdh+/fK/o.$Vph\-F!cEYUGXj/H#joc
+Et^VKKVrmP2NuTPL[R#TaZK\*4@k#]dsF"egFb8o/T]`1o$9PLnM0XQ3Re3n'FQs$
+%6B^K4]=F-1G_+6eNad&5ndBb;c%idO$9QA1_\1sM`!YQogCTe5;WU/PUerH;`U$B
+23]=KoD:an]0Z'd6^2:Mo2e@0I65pm`"Y]@1jqM$.7Y(f89Ac<a1XjIGsge08-JNT
+"2R/W^I&]28@*M/;pRmrof0<E7W`321lej52b:kq5r7t"F<O$$)`L0]8Mna_eAG#H
+DbO-h9@UFBPe0=_nO/<D:1p%lZR\Z?GtU!c9D%[LXFWmjk=HBJ1,Q%-eH8OoVb^9A
+;KROJ<9#gc*Ds2[3OJ*1FLb64h)!P<;A4[Lo[cnS*E=^>8i1fbeLO*'m84TG;,ldY
+PrDC#I6I4r6'L1lae:N]Pt0bCq7puPP-\7if_kE-.M[RoJ7CAMTf(As=LG,*'s0!o
+Yq5RQ/@Dl:Fh'*3]e7jNr3aLHe2^d_@9f)D.eVD!;nH>`P?np?>rC_L($AorVd>YY
+8JUPt2>pm)oj9T2?oA=!Fg#2]&Rb2D?hO4g2?@6/[p_04@Wj&,28<V/0k0gr@l?>W
+FkL3s*EtEj>II+.2GIGb;.LFkA+e_j[I%>0<Fs_jAi9g)[V981D.bbHA9N*.[WuDl
+I:tNiAG1^j[Y\QRNG1;5ATfY;p(_<8=_]jcB6Kt`[\[a4WFtq,CNcqle2:\NVdicH
+A(Jb5G)'k!d;.=`CKB,)G-c&Z]5>!;D)UWqG3s0jQYs8)DYEmE2OeSBh/'OYE-C>^
+2Xtb[rGaasE46!epCVDS+`[5kE]5FfG8YGpB5_uKF&rfk[lJ%:$$/$mDmr#@[Ztsc
+4*5Y`FB:PDf3NDu@<0t2FZ*TKp6g!1s*$C<GBZ8q[o[0C8U"6iGF+/1f8Y"k;0VbK
+H$;i&pRQIdTltXVG.,Y=QGIf)=``2YG8HBeQb@^3Rs+NbHrj<ppU,;@a)n`=,Uqh2
+i+IJ5?Wbdg##iEgZX&%POaf5#Ir`/NZHn$+bCB*'J25l0Ep\C\bCK1KJN+NrQgK@r
+3Iu6[J[d.\2t_dp_h**qJljgYfKFae6%ITVJQPKpfC=G0;1lAYK,@aD=A=D"?%_o`
+KK*\!G\r,DEJ3ndK"*grQrAe8=,8h?Lj39^=C[/sB8JT`M0Nrq\9!N%GCQ!2MKji4
+\;?+<NJ]]XM`?u[\=&9MSW#P%N-M0R3#b4e2i"onMO;_L\,hTa$'$tWNd/g-(u0M+
+dtS]fN4?EZ(pT.s[?%inO>sq8\F5FpXcW=sOa,!1\BU-r!KoGHOnem<Gn#r4&WU!/
+P;sME\K-n0+d70tP^+^B3A$K+0pOaVNgVnmGs.Gg6'aN"Q+9JP\P8B8;3q#XQ[)_o
+fjU5XJX?1DQoU"jH"iZAFdY5rPkg`63LuPJOcS1DRX'UU\W*'RV3%+ERsD-*\ZqY"
+[>fG*NL=(@3L-'od@<5IS9U*`)4-l(D4VS=O'1;13H:Sbhjle#SU(%%\@8*_l^rIk
+Q^R$.fu]p+&#!/-TUE?MGN15`">X]YIIk#SF2OaD?)'6=UNI0DZFcn&c_L'SUb]ud
+EndCqmA03oV)g+oRThZg=/F?KVHRK(g+fK$?`,qFVf]hR!-+mIJZ$(FW-V%6\l#F&
+=fFGpUY9^_>+MOZTrGVGWVWTo3j#E.H)eH`Wqs9,3dmuRD6&!!XEo`)\rEffOf^[0
+Xa6Bi3eO@,iN,(oXh)KP]#h,Oc*'1UY@:!h>2uVdhlo.1Y^0$J\lH!2h639^Y?MmL
+HNgGh+fj?DY8\La>5PFk0s01:Z9((PHTe[H.C$KRZ26hoHVLlZ%C<ZHZhmn44&N<\
+/[INMZ[5ubqe``&&[ct.[C^^lqf0&+8[pij[X3_<]8<u.ICB$<[lY>7H\&^(Tt*7U
+\iZ=jqlRHAWOdEC\,3GBHKhoN[C_of]DCWl]>:qFa13/>\m*k"gYKMHdCbt-]R--^
+]<Aq1!OmE`YPRFs>Jn2PZbSZGYri9*S)qB>&[0sr^O-L)>M$^ggVQ&0_L(mhgb6>;
+s1>oq_`TZ[>S"L&5Jk&R_crJFS41B/'>uu]`-`<8>[;dS+YLZbU6At5;U.1!5K<OE
+4?Rg?giLKa]>stla4tgX]S4Gu?-%DOa>>p!S;G?CYK;0SakWje*1tB$Q-(rrb<2WE
+Etca0\]anjb^=]Y]X>u]^!/[Yc$[@O]RS3(NQo,Xc@!mZr2iXTZ-GJ$cMZ)9][b@+
+g!Dk;cFi,_]]ILfk]kT7cWq(-SFb&>]@";*cJ9Yih(?to1!j2`d%)W4h*'.+3RM,$
+d_-sT1<\*o8^mW<e3-OSrE[l8@FKX9e%Jo3rFsc0ER_[!eFMAE4a#;'J^qGZebt?U
+4cS$@Ok.4"f):lc4e:2QIFk[GfDVDq4g!@bV:`Jhf_rA64h]NsZ.Zh,g&9%H4fR.`
+>MQp>gO7c0^"qHAiS6T@gAU9j4ltLJe_L,rhS&I:I;e",!T3gKh7`X@rXIY2rSOPt
+i*I5Y^(93%'B'u=e/fpq4t5(>1"i-Ugg3"thC[bo"6;WNg:ff3hA,#k8)`<)jZZ?!
+*^SoE-d4a:jo/'<>kdC;0BR^Pk!!qN*d?\9e*#O-k<<&2*eih7Ms%g<aa@YUj.)bQ
+b%($,C-JUY^8j.5Vs?.VlTfIU*kgk<\a2.5lb:.#^;Vtdc0TP7m/G,oFMmL[g$S@B
+mQTUtEm*mbl0e,smlp:1I\lN4XmJ=".fRufGk:E3$h0DnnD=uJh[f-^+n"56mp@O4
+h^uZn\+:[Bo7%GDT,04H)tX(On_YS`^F/[R/+l+[omZ`+5;i,K3VG[#oKPVms$cXr
+8b@L,pO?'7^K(%.=nk3eo=n`/IqAETC%hRD/:V[8Is(KMH29aRqL=(m^P2OaM=uFY
+q`g5?^QnW0RDs`qp7JVcs/#YnWVo&`rI<)i5GA%j[J<%tr]e*q^VThtiVif(s*rT!
+TPP_QE<39^1)p`l_bgEPCcDtF@'FlL/8YH?6(njgA3(kNM8LOb(sGl<,*0]NEbNr\
++"E.=A(%n=`a:0`7cgt%6s_/pSBkfRaW0;%5`e^=d`O-OG:oUgWO&Rp-=KKFdjh`I
+]UhGgW)i#&R6?.S?_>mu'rsK<dpof<D6rM5ZA!2,gb-&cKo5Oa^.BpM>*]ARH,*_T
+<GWsO'o9`[Z.R6#7fQ9!>]BGM``f@2V.Qsbb=77OQdT"kpcPF#;3JP)1)g['b8[h1
+mBue-NpC>jg@)KJ%F0/nMot:/S%_YlQbV\PH2KfI/#UVV_<(2J/.+ZVSdi2Y$cGQS
+R=fd-,EG>>f2_LnrNqW5s5W#+h)q<Z+.r4_q5CKto"Me5_ta>K0JgrT5B'jB"@9-M
+*rj#OoD8*rE(hnm.B<"qp->j856aIe$f)91coaT,6;]i+(;A0i7i0%(N)^b5c\--P
+_QhlR*jLi4FU(H7XCWKm&fclVa-'\U-HHe36QF3G/=A!0d_)7u`R<OM-cm"F_%B;g
+*3h9B;Z+'^bL6mM2U.FJ`@9#pSBX+>'7=LRc-tJ,43gWtM*B6ar:r\*e-r<B`tV53
+7aBM2nO:T"N<'#U<':O[d+$k`9>#62.8S@A*?e>/<6Z:ZdaQ`L%oq",;c(Ol<Duap
+[,k@of+dn'9ik?^?X;;b%:`kdP3ma+<E<CD@Tc`[R:t:)25+d=<kYJC9m3qR4PLYE
+-X'K8D9#R[ZAm+.;mu'JG$Gi+JTfVRIC4=U(/<b6?<>\!C#)dC_cpLa*O6VG-rPqX
+4/c&%)n:-?)2Q+2S(!8*(qQc+Wd)[KNMlR>*Jd*#qmV`!Ga;1EjJ\)+QK;5W@1Hl<
+*aF>/RD)Ick?+U+c=Xo4EM2LI`ef^hf`mS&ANAV8T'=r-Q'u90Q8P]&g:g"QlC-R>
+Y-FE2J["EBcCq!!g-3o[m93i,VsW2ufr=;lId+B1)a<f!mos,o[dMnr!PRu,mg6bq
+)U@N]nJ_D/`p4Un[CYmuT,l)F*5<f3nD%(sc17D)4iR%u+$n<G*=l#ro3G]<de'%_
+:"T&DT39m![1:6fCqKF'g3,W7&)d3<[t3H3?9a:uGht*9k4r<G;s4!?Q^Qt2hS5bX
+nikC!iVVJ-_<LiFn&=_mSEJ/^G5kpOpA5q][G?5F8#uE6^M!*2Ip]tRoY4JB!$;UN
+Hu4_Y^DGE"+-["]:aQ-+BGU=b6j.o,)@8[].0SS8R=_Q(%)I`XoUtN^KCD&)_A?D\
+O2JM:"T07VdWc63*&9gAd02mIdgcjU3\%AtWPcT8%uL3LL+pj`6m`WUaG`ZHE?6>l
+=Iru2@0VOM2$(ZuW>&db=tu.5*(>[u(Er-SLbY&:`H[pl,(s]g;49"&GgdWW>]Ph/
+Z7X+1],RKgG`6Y51<8V)*@&4KO"pbqRE32\UeH)n1)`<s8GaYWr0!-s+um\Xk9_FT
+P`YD&9?HES-m[T:OE-LNaiPVRUl;=:EjA<[.8)3<4KamPr_L^O6S9Z)ZB]J$<m0`7
+/u=NDQ?*+2`&V`k--XMuEtVg'j^g1+9ZrlG2J,WCY;'XB_4*5EDThjb1o0KpR^6ID
+c)JH:-TpI[F+SMZ.8r8T>je2)Wcl^&j#\X4oUbZk7a5Z55GVPETCUETc5I3TkY2)O
+F7t@7\a_suPn'Nf,)XaI01./4'Tl<@ND\B.7jMXgTG398;G#,)V*u>t'FKn!WXVTL
+Pkq7uns7Z!CIDhV/#<qTS'rj29PN`sV::6le2hGAC+Ua1n?e4.OC8P'LcIG;;$L$2
+'iki>=ud=:Wn"ta=,KFSKuekO'O&FN.m6h4eQ0,O3n%:`Kl="Ld*>]*%9i)BG,r%A
+Yh/0`<U4dZY'(GhfP9k_.n,>u7OGeNMXb4.*KIFJDT\?i+(T34N3@CK^=hfOBIjUW
+YdT_4g1q@8XBhj2[T_,5lVD=K9rPDlda6`a7r5<0]!h>'gt@T==7-N-\94h2g=pgj
+/UbdM2_s(@lW7sVNR53N'$f:eKlZV+fXR8_mbQ'GGHVJ6\JFk+h0Yc8Y"dZa2mW,4
+qqHKOIH/%#deVa(Is\@VqS+u3rSQr<IBWVO^c19;hQ-s5Y-%c?p[\UIbSPgaIM0LW
+.eI,-$\e(F)T+I*nR65sFKhnf_K^[W>^T,!nI>00eoMSbN(]%I^(/+_DUr;[+c\7R
+3lSVd(ZS27N3W@BaE[.tj4m(bEIJkKG]t*;S<&c:4s.pL].)T1X,jR#/6"Vnl=@!0
+N%qI`agfAHjufW2o*/aL3<L\_$CjCJa>'\[b,?8LmXFcLk0IY;5+5aU9JcK#cm7@3
+PFW%LoK>tS#T#qm/K::gNdT9#qb$&]0;,\dK[Vt$:$@QuU9soYdFsXPC0^;-FZFlt
+3j2.jNEN9f[\hW%_cQ(S;lu"eXk()(?"o:JV`#$XfQr`dC[I1bbSH8k].[?'c'bps
+I^7Zh;ebT(?)=sSak(lDD=$Z)[^JZ`gj=rjDJd"o2K%a2)fp2j:!Q^]Y3O_FLO!`Z
+6+1udm+>OSId[`p^U>Kkf\?RWmsXT#\5&XSHAdOHXoH-q*sU^e,BE<kj2/=@)WNq9
+NUcEu_mo^jj?,ednLb3l2qK&-4B%I6Na'Z8?SLF9Z^UFpA'I!:2WoJJS+9<qcT-JA
+jZMk&oBptP3WCGi]b?\'NfVW":JC$O9;qMYB@FH<;!GZ7WqDA;aSQ1uls.l9p27(f
+3q$,:I?/\t:.s<Ps)RF9&J"7n$/GEu0($@$YkK45bdDA5h];=%G[CX03Y,Qb]t:rP
+hYlHF?]jaT=3((8(Y_&:&+Z/^39O[\STCBI#!+iolH`83rD'utHct"(:KsL*IYd\Y
+)qia@CSJMVEq_chdX#h]T"X!(pV.C"qQGsP^)s-F?ROHQmq),S\'k"X;r;n^JbD9G
+gA)h3jaD',pV).:qEL2.rbnk65/)F>^GGS3TATABO59ebJ+\74lhLM+jo9h&rkD,+
+^K]8RKE8iP!l(N5^U+!U`!!8*pHWNn5_K)%PQ3tE!AjoP^0D)]":)`\!^QA[5m.<V
+'Epb/#!jL45r9(bKFbn0&A`H#_1WH;6jUW)$,NtU_8H_tPSCs`'>``J_?:gp'HFt8
+*PJ6a_F,3W<#EJ_)8\3P_K6j9KGD@g+MtK/_SdY8e0DZF,f91"_ZV=('IUcY.)R;Z
+__`j\6n?/c/AlQ]_h9YX]Jd['2oE!^_o+RO4?CC@42^\Q_ur6=lor?55K#BD`'co,
+g\!Y@%79tU6TdoW>Y2k]0Z:%&7'n\e_u%BJ5t$r5`:QJe"B!,P7R13W7"eCTe2"q+
+;FN\_7:\6oFB$2k<Q**d7-n&E/6G403P>,,JXb$fP<;;Z4[q4k7RKC0;a<f^5t5?N
+7WUpdK1&1m77O#L`j7Zp`,2l'DES,@7P&MdA8Og>E^q*[a$X.Q-lg8)G/mQoa+S-H
+P\S77Cr`o#`]S62e8r[kFN=#ra2E$W>^&\KK#eXMa96b/<-cPqHH:2T\'0EE%#@Et
+Jk+USa6\c*r/JdnNlYIdaCqlk]S";,M78_4aUEsH</AY,Mags18VE'pP`A>2O%H^?
+8]6`_e<S/:QHAcca[DN='Ud)hR`[IVb!_cB<1V0BT#u/Ib(QG-I%e]YU<9j<b/C*u
+e>:=KVTSP/b64ce'WK*BWlm6"b=&GT<3=>SY01pjbCm+CPd/E-ZGsP`bJ^d2e@!K\
+[`e<PbQPH"'Y2F5]$*"Capc,1<5Qji_p!5@aZRPdPfCqCa3:p3a@s=lKTjS)cHET@
+bXBgK`6M'+TM6EM9gmG2]/iWue\)B`J\%f'n/KW*Qd(c'9k:/hCnR.XW5]Oe!MlX=
+"Ob;#i^fTq9lsr@XId\Tg.ers9EH$QN8[G2KZX_`bqL)3]T^XbAknkhcE,dGK^B%e
+kK[j(:H[`2*:ZT_mS;:##s@*?`8%AOW6ODa:F,DRbl%i/(X8cQ8dtVmeG7DV[n[Xp
+blmf9bgt"^jj3.M:3?$KI.Kr=n4>b9cIDU61q-<6PL#&Md(JaBbm2UiBY=D"c=3]k
+&/`]&78=R5cV$8qKaBQC(/_/Vd7kJ\1H>K'O3UH@ZumHJAKcl+%+6PY:OOJh[-Z4H
+!lbZ[Zo'+'`>+4m!RdM/;I'7M%1(D+s&,+(cj^pl[4hnm-dl9IM*1u>i/1H-,#X=f
+;On$@)a.*:6rKQ.dq'<Cn=NX=0@HeadQK?b"ZFgXMGdG6;pZI\'d_?E0%7>>;tWZ1
+,o4tS3`4Eu;l`#[D*q2q9[kXc#c0?,9hX!<:Xo&6e(msP>u&dI78hr>d\TB1]_PQ5
+2c;M;<9leJ797m.-re_ge(#F:[7Ua:<7PPhe9+./c"#6gQ.<C!<+RpeD*A@3<7Q+n
+e?rZ5`F?1h-+"sn<c)GJ<Dh=q<mqe#eO<nIX_?:^<RleFeWj%Xh-F)6:fLFPf:?ST
+h,7=6?W(0J;>kZ=*J%3r$J1h_<"3,6FaM`2L'V@=fM,UO]lmF6Fk&X,:lTtQ'i!8M
+EE4Z>f<pE34a>RI-.Si"fL:!b/U145<S9f<<ulS<c#hBF>uq2Ye!3qc%@#NtQ./fd
+fr^):AS"j6OB>eV=qt&k/SnRlT[kDt<n3aAm@2g8UfookfbKuW]ouA@MH>4ufi>1X
+I<sUA:0PV*#Sj^HNK)CEYhA]Qeh*fKrHqe^79A<#g>,ia[CFoo\(Pn>gM:BOrOu:&
+ZW4-8g%Ah-KiM8e^XE(cgg.5@9s`Tf?!C=P>Ra]#4hfLla4'FhekNbXe^<'PLtjRa
+fWD^;mD)a;_)(c$>nrFUc#R&P#hnL-gh!A2e^'&JQI?;K413etV.nd/\6_%1?*2E,
+Ko=]N?!8'a=tP&,7AF.bQ!K[;g\'[aCV/!-?W!X;1UYS:'4oRDGu;7;dGm:hUHDmp
+Ki*7ad@GaDFdT1WqH4j6?+WL3]m=&1'[J*)=,$P*D?.%%!S9d>:`]O5IK!!dr`Q*&
+i%VTH[JA5Kn("Q?>]':DedUI_8Dr=]?epcO"mXuO$Jiu>=#LK<7M9$f$!HZp=q1Sk
+"lNeV$a\D$iD#0fD"lkJ(#W[;d7sgJp(Cd+&E/';iRN,0mNLOY+6$;6@5WaHVA3NV
+b[QilJ^+;T]pRaG)IV\Oir*Y$D%U0),[i;W@Lb5'p+g*2%,md+@?lH(VBKG4+C`5Q
+@Epo;-8XMM(>s>RA,\Q!D.V`#-t!fNj)-2QL';)t4CX=-igrGE?7Y)s/E5M7>ima"
+<?,M'4kR25j":r)ININM5@f4.@QmTJIRN7G3FRX\i[uinc1^6?94M:,@Kn=B`Hc%.
+rllcr@hpBOhG<3$rFGmsgNHBS9jD::53/k)A`d-H[S:?D:0,qA@;]0*%TVQW;WZbB
+B)YHXVFT`[=C3+Ri\ijV[O<sJ4^i5L<aKEJIX0p*6<@3'AhH/W'injOA7P%5B-'WU
+7VC_8Al4R^kMC"<<_ql6G383-k8!o'k(@13;."c]B%D]L[QA)mG@dq9AL<;tVFg"6
+J)iM9BgtO*2Mu2qJmhskAN"43<]fF:C?J?#AF<L[p4m'gEp!(Xkb`[f%QA(X=)'X8
+k/IdADEbES1MDfAjF2XCSmH'D?g#_"lGfQ2p6OZTWS>n6j#3Ump6k(J9P"-lk0C!l
+7NCAnMrENTCE<WDNaHRN5&"&mlc,aam\XE!VdUXNkE@o8F#b($]Bh.$lS]d@:`P@(
+-]2I$MB6)]AHD.^nd8rQCpQNG_aA7*FDRi"jEAPpkb_L[aDDCHllOSi>,U_1e7)2(
+jc/eEfX3P:c>AT'm2csY`l-bpg#iRom8i$/f%p_QgMNh@D:R_7qdkctj_R-C@n+r8
+5%SUIhW@#fB?',gDU*-sfP\u`m`rr6-KsThc0\hgmX@\77cNlCeo(b^mO%I)f(j59
+T^E<\d*C!VDTM5=ol'7uD[-/X7W`ROmI-qHmjg\AG1,c,l#0#emfri&Y4h4c!auT-
+@+Oo8c/<QE#B)O"E;n=*J>;WF%-aqHEB_S6:BPI:n50u+nBOu$rt!G)l1'5omN2i)
+2Xtcn0Q)pc1j9.8[f,]^&+"cYD]Zc9#9Rp**q@Q(420$]L@&i%'6"a;Dg'Y!0+$i3
+p@"%_dDm$\rsePF!U\bhEL.Va-D,3X1[b8>E-CYhB*@[)"gc5dmft`<#17G*+Dh&J
+DVlf'+!u$S%W9;Wn@%WQk7Ma\/r<(Knc`B?:FGQ`0lc&HDc[cr-NA/\olK!Uk3":8
+="NgT0^qMjEmHhTB0>f^7rggqnNT9Z?U8cm3HQ>3oD^B6<s\G2)0$`^Eo.dT5=seR
+9(/BVoe-jJh]6c.?ZXh$n](:oIgp<t;d&Q<p*WjZqa,FD:\Kh>njd*WVeC3"p@LR/
+FOrNqSjMn$E-$5Imq4K>#4;+9[s'cAGK2]5QY(#gDtK*?pRa57T4ID/C\LV@mh^=g
+D`i.)B6GA@EkAsM2I;F**"M.:J^2/J^;fnand&i%Cgcm=B_Bu4Oj>D<Zo=-!5kWJ@
+p!S*XcH,\3VjR9\$1'6mq&NgfJ"'U0Q20ljO./R`8uMKWTOUK\qB#Z_:RlA34*ii^
+H1s(=et)X:W:"#m1XQVWc[U4U7!`LDm2*!Qj\pIY5l!XJgkVd'&%-`p7!g;AH0;MH
+#GZX;/<>k(C8\@OYF^'TCAPEIqu<Yl-c"\b^N#mNqY.Y`LVeC^Y55?<r.cBkhjq,u
+Xnmgic[Wn1(S(!`bkaPeHZ-Un8'uV^`VF`'H_oa"0:@+#a*ZF/HV]"d&((6H[!Z/P
+r,9)Acc(<FU\mX-qKLco#L[6Tg\mscI?2@S(X(pLhYhrDI8@KQpZR#qWFA*,IBP#H
+IU;mF_tf!Spn-+9LXu/8c1OlOl+c9XkN)Q,1&ck=I)kONQg+9poCWp`IHU?EkO*dO
+Fb".U%#6'9E7@--)iR/hctj$q"rN>SiWE^L#6fa>LCgu&4u+sP7q3,J1bp'r)[td_
+G_"F`*0s'*;-Ai#@5*V_@+.]k*,[O%8"q5r>kSapP>R(a8`^4r2l+fTe%$1$?W!%]
+lEU0pArBQDeg7`'X<tP[YK5o#H1]s_C8=ni0tVhAM.3Vn@kq8QVUIT76u8*g^%Oa<
+UYoW`q=VbNDRioR&K%)a(R#eHn$gE@q^km`i9Ac#hD5h4VIX]!9f5-M<6j\`\g^%"
+0sm8!F?8&T@UFr!jRq:;>tX@0_WPuCguU&+Hc:'iGck<kK72e5Gda]-Q[=/'p,\XW
+T1@#/kA,10c#7LemDWg[qYrdL/[jKs[p)#X.t6#&/f5KU^^S,deh[f9Uun[PPKMXm
+N_5Q?/dt\hV`i4=qTM&Ql8JjYOCGlK^<DMdV)Agj1?kO;+rnV##b)Hu,AFHA)Q@I&
+AK7\Kne?t?aKTRM7O^`(+fu)FOI8U5XGX:)Xj!Ca-^%XEn"<Ra>q!]*</E*AZLV3%
+b>=G1lH;q=[)(!BRftE*Et\'f9J`Kb3'-WS^H4s7E[<\#oAUuO8CR4`PW][bnIs0R
+![0[]1G&%GdSt<G3@'gm'+rSbbmcp&FH&:D;=_[oZr5.3"T_Scm5m'L'/Z7Z_=[+)
+^f([74'<l:,p,`*'nq,r<L#]D>f4!*k<E%nKl^In1u+d([FNK^3n:KH=("2bV&;VN
+QB\@D^D>(:F&XtrWDcGcrNf$eeh,p",;p/j?;>]$ePY""Xj(NS2^Kh9?I`'4mb(:!
+4(QN2rWQJ4G+C^7:%n5XCY3dQjb2KVedm\f<;gNOhm`ghB;@8*'6[4i*AMhD([_YN
+f/@J%P[YLFG@kF:IX@.3F7pJZkF'V8M<A">Xe4L\h<.":dO(<"kr8$%F^]Tuj-E[\
+h2-f!p!.2t:ilmdESjsMA"r;D(7BF6$WafOe/N#KUYOLuc\1'>"f[O&Rr3G.C3iA>
+X)1b$&$=10FucbnqB]j];qa*GZZ.q<mDnVKrun&e4ERuQeo^?+MX]E9$.EoQmfdcI
+1k,;bC7JP"gMpM!=1P%g(1Xjs\#f\R1Kd]3gf`Ib@En.!pH=l22(oo[k.J`shX`J2
+$[;(\NEtZ=HV@WeDMh,-a!dE,H1^QF`7`iFZ3g^SG3HF"M10/-6i66OchNdI_uEAC
+d?q]AMZJfB!^Q5]#s]`9!01js0Q9>YYK.Rb<U)MnY"ALV[q,c8PNHG\&_t-g1C5*r
+-@`6*oKaljV;UZgL+duT2RlT"TrY>M:MLcHQu85K'DR>/EZi6.o`cTs+c!93*iTDR
+_B;6;=`F?E\la-jU)U%gn4!dD\;L-WC^G`UmO'BlaJkkD0/AY]b/Cg#&>Mp+IB?+#
+7]=K?U<Ih&:u,m,=FU]flktg[:*[h>m2@,f@>[l&%m28>)^'H\OO3tc`0W>$Ul-+I
+E%XVTB_`hjlrS[V=tIXK>p&*;KS/g:'ZCpM`oV;8Q4_Os`i+G$j]"X7'&$4'#3?dD
+FKpdZ6'Y+m9.(6tR$Q0$/P906*9KpfP;(Dg7qfjHjSZf[P!Wa&R;F&moW+&$.Tal.
+fdu;#[?VA"Bhdf@04_EiN`--WaN6:Sk!YQ,Z;Pm:=kOPLX='O$DKA8Bm'5PToRsN9
+BsW)/3p:rc7.=)<9mHCtkQH('CP%5cfWN=B4A27Z2?QPUks],f:m7b/8'It.5N[)0
+PdCUAa-nRokeqbC;(=*CU,,@#Cpg,P`e_hufdgcAkaIUeM,\c89V?N)OL5iddV#gW
+-oF)cC#50%\c#MNV!OJRHETe1DbDP':QY0_GKn9;=;bsCQB]Cj9.C<TUZEGL<;*:^
+.O*$-@CcYN^mi?L.q%]p9H[-:$,X(3r.2pLQfTR98fJtuCoSD%G%*2ZH)"j1-(1IX
+Jg";GZ"].;VF"=NlImO-BokK\20QN`>3/ImT1)\cPh+;'gJCaa_)SptDKORpiGRVn
+Wjigb4BkI47kR3=\i-D]h)grimMQeKf07A^/%K8pe]a0-L<nXg_/sPbr3s.aB&'F9
+BQ"VF\JDn8?=jpoD9^_I$KCV@gOjk?/T\UL&fP#V$$'clo0i?`rk46kJ$,p9Dg%OF
+h4*SEjA#6SGLl4jqrNL5?2K=89'Td,Xb#0&%B)5?%FrZAI3ure_\[LP@4PP-YuW/u
+\E<+p$dk#S7ErP!#6eGObDHg"(<5#H*Cd\)K^>9[^Gm#>A34:(/rR]f=/Q&XCe9^C
+:0GXT_XZTcfWf>N:WdrE'k;X)P-=jI_"%.@k<)s;o/9BSG<71HSE#ItDG87k<qU#C
+nX/p\T#LOQZs=Y=5dC;aagRg.hHO-W1,`4*pY+?bCaGP'5(UZjEsO%]jbrV6d)DCl
+4leb1EH#NFdTM-aB+/RXWTKi%(je)NCr)n6juC^+7oSX<NLR5N0$cSR1#k;jMR4^l
+_HN,rf,]dI1,aU3g@#bkr-bsD#"d7KlXAa(UT%orLX+SF:?fB!YP(.fg6k;emPY07
+[pDiip&b$Th/dOT7d%G]K3@8p"e>6[He!E-DJX2&[W`5eco`+XE@`c*O89!a$G+'8
+Uh0^Rl@#o1'(B#;94W;]n`1Gt3nT6KbGL=S:413>F%(5rMruuK>hHpb@l;L@^G\(M
+!4_Y'+j^`!2F%,n_/d[%c3WSo,X!ZVo]=-@\u7<XSJ/*ScF?5%k>UZmo;H[n[Aga(
+Aq%FkQ1fNRf3"A1mMeBop=/imH5C&XbQjbaXDuuULLBIrhnepA#LE8h61B:5`:RCM
+dJQd3n9lt+o\T<]Hk1Dg5#8`#Nj7NT\Q&#=(V`PE_qM")Ab0$m^j(>jiB4l@;k;+Y
+8=rE/ckj1Qrfc(.rs-hs+$95r^YsHf%H[LX\FJE_`dFsOmX1)!nt*nRr1<rXI4q]!
+*hjKtYB9*Er>5))Xri*aDsMjB`;;R$oOT)CpD$b3rZ3TPI_8V:ItG*,\+@%JYB]uk
+XRsgSrGUofn"TQZkjkpWrm-,cmu#iFpA;%Jrbn+gcPlK:;Z(IGo8jOTcWpXV@&e/i
+SkmT,DHcT"#m.25lnC^*-^+[Oo_WRNpub9I.WG[=T_AsBo'f=s0C\nd)YS,0r6QMX
+0IH^Z$N(Gg";!?m&4#kaLB[kN"qP89E-1qQ;Yfc(q9VD&WlYM71BnDC$IHN[cm\SV
+]`:iJ$ZFhlO7N^]B)$=2#d:W:cj2Ii2[b^[$S[tYmp?D5Gl:G0$?0P?OTc%&G4s:L
+#nYc!:NlN[(B6).lL<m@O6m.4I1K*E%.H=`0\[-d`t6U%!KdlWOQR/$T+@%X'9Q?.
+OT,6s5mgI^!DuVkE>!&kE0u[>j+(Ot_UddWJ6PYO(b3nn0Q,s-!([T#"u+4<O*qnm
+?Pfr#)@gO$:H'2Qmi'R5)NPUP%iH=I*?1%_)il9a%k/G-Ri;kM)\7K=%tu"KWu]L)
+*)Y_]EO>^"mVjd?"S&`'Z0:[SfcG)U+#2X>EX<jbI3@rJ*0KP'&ap[C%3-!!]Q*Z-
+1%QE(Y9$RX,;H)6Y\PEP_Y8's+;,n.Z/HpJ'-0s_)DX/fEX*nr.frTN,nYDEZ<&+\
+D'k:b+#'B0&kO#4%42\Y*AT[4;IZZs>l[ad-W2)kEUrVI<@:UQ-rL-pnL5g5XGddQ
+.C(BJ&gl"([iDXf*>6*X&pZ%6$LJH@.5GHUdRPmOKe(TX+&X0k'$i%)@kD_];psh\
+0&J=fDIHH;*:`hMZBZ\54W3fN-kH,,;P,MA[4?8b.FR*(EQ9?Q`ro9n-M"&_YI,j9
+kq@((0X-ftZQCWZm3Zl3r::pT;ZS@GM(sl"0QR=OCV_c(b8^$d)flfFo6USfYr-PV
+0_6_MPA_W8`?E[O/oudoP<?\1="i!G2,eKIEW%lFiudko1ih,'$N2W!Usq3:0Jemn
+1JK<=i@C%O3&:4gZ)]t8SMj7=1NJmAe(6YlTcoT^0To?ZnuFf-3A32I3ca%<''VOJ
+/NZm"5Vg_COU49o`AOtV3E,H'o8,!(ffkV/6*d=-Z_&0lUHLF#(p`6d1bCV*o08E<
+3(?h6F'geH"ZbfD6$)?CZ`c^eZSXH+7MIjOP[?(b@lMhq75J^0oCG5rFX#=%s3<b3
+0o65=<@^=C8hUJfOl!A2<X)@'92@K>M=h^+5>0Do9N4SW:DHRL+\^3.9TLVrNgi_'
+&PS7:9TOm%NiPp8`D%'8*n8F(eB&$(qbM0r:JV-h<:_5SnJDlJ;)GU8<>eIELJHA7
+!*&VhEHt6=),Ko/%Q+\lY_?#`)b[EY:)+:;O*=DX4N96%727+J1fm\!V,S1<9!o70
+oQ=!\/PL+8<>Adl2$m?cO'!%d;;bk^PuA<[h,A8U9i[F7Q!mAU%9Jg-;`.'=1q-N7
+)d&@_=S6/,oeBFR03U'a<OHI6orVFUYkqG.<qQ2leTY<L#@3-s<cs1'-HfVYBd#@c
+;DAni<Jt*^9e"W%=;9e!ogN.%%nlTppXT4HolF:F@fOuH?PM6le^#-kpK^ed7WoPr
+'q\:PhdA+VA$U;['noetlVVfl68gV&Q0DNgF]DI6@M6:\F_>*j&QokYB2U<\Q60WQ
+"^Vk'@WkOK2HaMZX(AV?A[XU0ej!<F!GGJ]?<04"QBu0&$#*Da@5_D+egk9/_.IkA
+B!n[JQ?QJTcX/RFB@V?@OcNqZ!EGE^@b/e:2UO*WR4d']Cf[6A(>UU.Io^N^:=\lG
+1V[\V%9<-7Dq*BVG/3qiiFk,rBb[+LFQ[4R%;hE'?PTP[o[@&h*H>.<C=b+SQEF[t
+-#/LaF*3%K2Sj>K<EM.dE401.Q%<p.fl;0WEO$U*2MZ$HbA=RHD)ZHT[nu1.W:7Yi
+/iT+bPc7D83.;!^Y[D)HpT#apY8<P3CcAgW<2U=0[mE$jnJB(;(W,rK__3solrUeO
+f?8T/XTI+cn^kYb\(^,VhW/n0Ih7<]GPLcR_WeP]Io+mLGR4@Omst/>pNPqQnDerc
+"b:fYqY2@_ONW.+'d"7/nX&Eif=?F@_)#1JJo_l_\%aLs9n)j^*nWQ.E0Z-e8S!'G
+L,W1en$Rj)%>PQ0LK%-$fP'eW'8Q>HJXA)8p`YBQ$&J@.J/F1<fO9VW]8?<"KCjqS
+fV*LK7uHeGLQeEi=4'N>o8$L3/srJd\2.W^_i%UHJ%0QZR!4PBH\=?j!8,JNOtDSO
+Vi,fY)S!<s3:W$<Z$nTBH`n`Qf^jV`9)mP/O#Xn.)#'",=cc`sP#C=pGdU-V#EQ+r
+O1>jZR&c6L(Q`nkH.\U;paM8KoomrAO82:uR4.nL$&idOJ2kSsR89)M]9/H=#h[U`
+G_(<H7t0+,OuXPL(N#)`GB$`qHeAji'9AR/O+FfHPh8Wo(X83U%@*=DO?'e<pd$(V
+Bps.?Oa-b_H#\u^kEjhVL&$@h13](opRG?LNOb%4Ypku!jd(0unen-cR.#jaDk?e-
+"50N-)/YkRURuhfR@-@!)?H;;NL\]+Q^N\p.PHoegPkm_U:G?/=N?Q7Q'(kMTt,Z;
+=qRC[=/#/ZO1DH]fs@MW1kV22(RLI)mT+X/7qPq?T8lir?sj2#gSb`*W)j_4Pbk>*
+A#TumW=ng%:;s0_3N3R`WXg,L&=]\[X/amG7p;aiEn./78#[(,X:A=2%\'PX#HA:\
+WLCMtO:A6$"fW"MX'4O.qR`o62m3###[6JrDgec,r@>J\XZG@<0bpeDZ`_WXXVu[3
+HPrgrmAmh9"T#O3E!<PZ""/FAZSPahndVqR'=8HNXd^oEg3']^GH\UbYPT->Rp3'M
+bH+n%*ua7LD\]PsD68-q1L"FtZ)b67F1<-`*npq)Ya)`10stsHZ[7tI4'ch&JO2GP
+[p"Qp)c*d:;mnb&0tX1T)l%[_\$Xln]$l_B>8+T[6bGL1\aQr-O8ZO+nS5[u!o)nJ
+qRO,**PIa,Z^R5iS+X?sGJ-)cW4W5JS-O7"8[Fl3^q:8qS,pG'*s"G8^+th]]Hb;*
+NPO<q^YC!KHoo"=2o&Zc_d"q5HT:Sd9u>[__jj65]Ka8uS\mQq`OmkD4B'7)D8i#<
+a'<](>^+6DHc2G,`dE9W>Z\udO3$'g`k7MVS;54VQc%Tmb$9kHgmcG*IENTF`#Pi$
+>V4*gT?J:YbZppdSAWS+a3>UI`Z3IPSCb^Who/j\`uNjZ*4*kO6cU2:bC&-kr70-K
+qp1f"cs5\Z*='dcs3R;#c?p;Q*<X^F&'nMpXX0\d%g43AH6X>L1I,^f>rs2m563o7
+G<JI94\FtP9(JNJlFg*^>upH#>LS!de(m%8SS',%?`*d=EF!)+?#S4uCY'SZfH#IZ
+*HJB4HeBEpf\MnDh4)r#T@Mbmem3RQI7`/B,M=2Jf_r;6*DtSI=kk$+gg,?\SZCCK
+MqQq8g)\f!?/+)(YMC5Fgth#IK`g"6jB6oN8mUE4rO^sXbMQV-:]:,uh=0h2$f!oH
+i;No=SdF>(%H%-siZ8ioIN@E2=5c=:inc!?^,t<Q0B0#@5^k0BIRiH_:#m?[is:_+
+?3WMU;<@c3G[=>2*`qE/<Re`ci",eL??,,aIHJ7Vj5)TQ^1HE_*U!]ak['D3rfg1W
+RHWLkk^EEn^16GWS*JjKl9;E9hPo[e3TrYfl<_0i5$RBF[Hq5)m2jU>^=2=qa6ha<
+l[Im^T%EC:([g/'m@Nq:?MEn0_sST7mp=o:*p`:P$g+&ln6Z.aT',Vc+7Ys:kas*h
+hZr]nqsn)EnR!s@?Sh91)tP-RoH,IG^Gk_U5P(L7oA<(2?VB`,:\!=@ocIE3T4@M#
+DtT`DoUeqOhe2]@C\Sr@kJ)0&5E"e+?2)*BptpAks-NO'D>Bffq;-Ves/YMDWU$0f
+pckDIhmN2#V><EMpg:r:Sq*a;/ELDc8T%!WcDiE*`VnUGmXO<ZJ)U@@)?0['s$,cJ
+T(3*&!%o1G"s[QlJD(GMN!@WW+P:QS2F=+!kU[bg$\lITYo'!G/I$ks,B3GMP!^(N
+7j8No>Wu.1Q:^4;#oqMX/t>J-0j1%3I5[\=B/05k?>i?"dAW8NI28GMS]rT^)HB\)
+<i4Fo1n*5%ZX/aF-'bMOK"FCVdk*Er,mrIAZIl)KbFP[!;6sSAGI]TRiD[Ni0,OMo
+#-WZY@W;*8N].b]aBtq`gSPn^Qcdj"<4pKm2dt'GZJ%Bh3sChnai\o,I_/O_`b_qb
+94$?JSC:rQRSDAJ9>KHOGW\_Bc\om)m<Lh>?Jh7!kO*Fs0!?4tb3\`3I4jtdgXu#h
+]RA*ZHdCW^ot<AGO/ilTp%Z7M:Tqt%kkk@o57L!Hrk6UI"Rj-eCI835cn#b,^W_W2
+s1],(+U>j.lV@l'ctkQ>_3"!u"N(e_Gh'`lgJnor&EG1N[BFsZ%)^J'@1gHhA2bAq
+0a)IA7F3#q)T>SW9,g'Vr'_f#;;@3G7e1)J!(LuK;]!SsFJU;,&k&]@b;%MU/'IL!
+Y`g6Pl4/iJatR`'c&Ks&`(g`rjMfE%V!+jSaoq40cVn*&ktd0&r/+<M/H\74oLoEU
++`o"N7F$"5I7Ar*I4\%9oZ[&(cgRth9%4RB%o:Rf/JV43PoV#IdT(-5<RV\22-JCn
+XZ\Yne]grseQ':S?IdU9@:.QN*GK#[dIfk45P5bL=]mW$SS$0UXRg5R[`o%ofG54$
+?<e6<V/KPh%F&nJ<rLEggD<$/FPW6/a^\UXSaBrp't*:>hc?<0I,GgsrGpa2D7+TH
+(QJrOi)fmqJDqCe*J36P4h67+(g\eKi`LXiLu]DE4c89%]uuMuf^;1hj]P>UOl_u`
+@@$&DSa2R&foC3Dk8A_sS`\VF8YP9M/pWrDZ0mfghj.k1TkR[WV5%do7ZXM4pti3T
+CGh-[PNWnPQ(RE3%`P;L]10'5laq&NSEna\iNh^X-J>_AHaYB9DgJ#>ZgTtNTss@a
+r5sSgU!F:C#7hmrh!tkD,gGn=?S&3tb-s+Fna;`#V"9I&5r8-1pES/&>p:`FFe);Y
+f=0R>(Y8;NO#,P^YHM[XG(&gRh=qt^K`Ce;pPmu#ISX8-oc@m'+*dc40Br(WY=%XJ
+^3>A"pqG(Bk^4HG]BXd8\'=8f*nOERp>1:-p\%s4J,&a[YBB8]T>-Zir*LuNIkSY=
+^F/mTTH!TTn)<fP#T!K6C]o;Bnd*"ncN>9e%YF1:#Jc-S!hdaWKCF0o_2(ScTaVQd
+YbDfI8(.X8/0KZ9MAF'"B*k8j.YdGtots=E%ABjWL[`G-`!D,0TCbO-nJVKsaHI)X
+$r2V`670UKV\7rn<eiD=-cJWY&gH[7IZK4872WQP@Uri';5,hYL^P)p]P`W^_C`be
+WuRl[FH'/W2aus)(aEQ)O&>lj`j`](A$gB):T?fI3>2dqS;33S2D`D+dj67bMNT_M
+9h*e^&#6e!P0sP$ar*JfUO8VnNu>qLOCAV<@7CJLN`_d=An!'cS!N1h>a7m$<MeA6
+Q_c$9b6_^$V@/9KdhZ+\U]iKoUr/Vl10dNuI5?[ad$jQ(?;7DM2^T^@RfL<@:+;Ad
+%D"`nF,"e^=`$52r9Bd#7WV86k;-b0fq,NFI*Gg_3@EV:TC[5Vc2$*W-nP(bF39-]
+WY[lJ9_b<g!f52Q-UB,-m[$m^?W!eV7j^Y/U@a%rdOI1I..&@VoHK1>W^BCXD%*95
+3gJ)"@mm;u'W1M+Oj`N=9I]?aV_k]OdqXY5.P3]W[.:$AlBb<s4[Q-U&ua;pVc"s,
+8uhP>XOQO9<%?^%X7]ApeS8#`X"-i?Ps2S*g=KHlok1?@_Qd/la\]$tG$.hZ]N8:c
+?0gm!YBB-Ff?*tl/#@j%[@4n^gCIdF?&>[a6FL#Hh.*N,Ln5;Eb#mCWA*7,GZd\Wo
+fP<idXW<;)p0,O=lW7IG9qA]cSuu4#@;B[*RAP/Ygf,4mDX<@g[?g[2g^@D)XMl6f
+[cZRRH&X;p:b`/0^?:+N_^eK9ein:cpKaOkG7>kT-9$1<?35%iM:L[PQVbD&Ml1^d
+;1ZBuIeEk*j*P[gmkVAtqVOs8<3P-S^S\=6?OR$^n*T)L\'"m1>SDYUmL?pt<sW1A
+h1W#7pVQ\=%,h%BJ$>LP]f:3=@OrCR0b*He(cq-FS0NnF[P#H7_[U*,3K5`d-H0&I
+(16u`L[ffIa11.Fj:$NeEXk"GGp<s_XA=s5N_[T>6Q5&;Dj)p$#0=<X/E<h@Q83nY
+bIB&ViiJ?/1G3(Yq.hhKbh&2eNbH]5X#T7ckF8cKE6e:&4QfE4S[,D1aa+%9kD]G7
+1Hp-3\g'T#/;Kj=(2_Ipf1>,lae3`6QI/lG5%pKGU@\)MdX#t1l)dIKoZj>_\s#tU
+%4eG9/m$SLX&eNqB;9T5[+<s;>jEtcX0mu%f!t<+leQQ71:FXA3s/r.NF0"Lrl)tT
+$YX?>NO6-;_8k7sCh,,O[^KMudT^X"mL:VSp<MXPgN.H(?)sgq<peK8?Zb^!f;Q-,
+o%k9?<o!$)%'Glf"ufV6hS'5B3%asap\TX#4qi0c?0C1UQ\XHN,:baEcf2THF7H<;
+`V9Z>])63%n4l9k3:A$O[r7C7%T1@D2[8BV_jB394j,j0.cic;SDF0Gc$Ab4k+)U.
+F=nT]31!+oh'7r$Nc34SD`m311T9gRVo:^#9B\LaU%PRHf/c-&krj[#FUk%n].[.M
+rEHZ&5.f9(QYu+P_l`YcgXEcaG4%NR\bE8mffQrtmlgiepb)Hs]DmWT4sRo=Y7'&H
+5E>7t6cJjS)qqrSQL[4Lan`+jgH,7Ak2'IkFroo2qrajGStj;OY:8d"kH=H*O4F)&
+:[L;@[e>0nf)(MPm_++_p\t'Bnioe:4s-Kl^C0%HT9%=0^WZ4u2l1p5F7h]bf(_I>
+l#n_foK;U!p)eqIIP6uW5*+e%^RO]kYJ^6%+7B'>s6b>SX8P5spA7)7mJL>OoDaI8
+^Q\X^"91UojM2_B^I.rb9BSQ-s1hS=5\&2,>E-Ffq7qpN5cauOHigk=IK>6B\+gek
+P3Tk%ot`-Q5s"q[9)h1\n\JDu_.rSXHLen0q*CHM6)s+a]H&W;*OkAV_'C-UbT+Is
++i4p-69=PO,S<?O'1-I$_=T'@F<a,B,XSRY6;/.]bSW\%)FEd16Mqlk]IcJj/jh0C
+6Td%i9JJke-c&b@0)R-7>WG.[,/\4H6bFp:bUc+d4%"BX6i9)8$pI&61.3ZL6p*:o
+9Jo4C2FJNP7!qBjN($.)7RX=J6]<ujFA5&c:-l6_7)VYbbWm[H.7=kI`B6l6,ZR9,
+:;pI>7;Pc=Hs&mo#*F"+6mPFCoMe9'?:9HR72/cklsW?\@R^c.7N>r./7h:5>"21u
+7U0UrCf&'G?q.5-7_E>&b\9Q%C.,FE7f7'm$uJKSDFZ6r7)X(89QEX.F%:%g7GN#U
+N-7^]G=S`Z7Ds.8HsOa^IR`[R7m);lgjI0/Jk,`k8.:/B*'-IRI)hJ,8#1r2[#%;k
+3Q2,P8%adOUl@pP=id[*aP;J?b`PI*L.#j?aY[9p/;qUqNlA)(a\7+S7$^E'LWOXN
+aS^e7]P,F2PK@'j2s_%UU_&*GlH1ULau];i9)Qh8s%7%rb%gFgHLo::o#dEs8uboa
+]'%5[XtIAiYGA;D%&6GmZ:[Nk0&3Zrr3EKLYtJ?1b@IGBMXJZ0[7dU.8n>Rer4>Ul
+Vb?BU9Dkha%'<2CY=h!f9K]jZ9Y*nKZ-6If9ROWLN582X_G%&K92*#kK[!,bc:Z%$
+9Z4qE]Z3^i`(_f%9g$ft9ZTq5a\?To9mk,YN6oc'cqPe99?bilKNlX\dE?pjc+McT
+eDX+igs.J19uQ*eAE-EYc-@<l:-@`8CsL=Rl;!<(:7TYUXR/cqmS;![9m#Mm>ie`i
+nkFf-:Fta+*;**$lq^m\:MfJqI/-Qsn4u1<9pG9G]_5.VpeU8Q:]1)cbkt22r_OU;
+:b;WC4U"YV!)Qr+:i-50N8W$a$;_0>:jiXF%0TM`##O[m;#Lhtr;BI:$rEK,c^bY@
+]^=*G`mI3b;1/sPN=\sX(<uKRc/dVV71.Gu$dn>SdJXa'm,1aC'2]2Yd:FP#/KiFM
+,uIq8dBt/rI.,L+(K-e<d]FJ:[4ThW0$?p!$(3Y'GT&3:1+uoh08259br%0I2D6(/
+0+Bin4ZG)H3A6XY-"T/:*AXe24B(&le)`hIbrm_V5?'3ue-bTm0Gr:c7T<)>e9^T5
+>t3>76rY1";b]q<m7L?;2q74TeGVJZ%6r@e5ufL*<?4HV]i.nd9iGn1;iOmXX]\TI
+>#ck><F&R(c!473?<(iC<IJ7TNF>hX@TBO?<P:t(9h/4>AQESp<39\2<F&VlB3)-1
+<ddeFbu%NtAC_c9<W-l;%<5GI?WS7h="S2h%<PW&E`[+$<]tY.NHeJuCf\5d=1rKQ
+c#6[3F]U_U=&"$C?%?#DJQMf&=:KX[*J@NHKigKn=A=3G?&2U"M-,1a=H.c2SUsu"
+L03i#=T+1\Xc6DaOBF/t=UgNpSU+FEN`eN1<b6PZI?rO1RTUZ#=\YDhSXA'#PZcgU
+fp.lUoq0f@TNPit=`pE@25LSK>M:s1g-q^hAXHHYDV<R>g:aH=?*.9&XBJ&]gARMq
+%@l/nU0=t1g@_AtQ*+;e>?agrgP)ug<NXuWIG2rWg$Q6!Q*so1[p.r`5k#^Y#TBkJ
+_Co34087=tc,D@/`\/@P0+GrT4if9.aY/q%-"Y7PIEYsMleLLr>h.2+/^I]C_qcg0
+h"V`B%Fn`I`SG:th+cGUNRBH(fj0$Hh7^qdc-+r!cJ>VV>YX-/mFtqFdp=WU?1$$G
+4kF"GfNq;'?>\J(MS.eGi8-?W?:F,7jm?@Hls=8l??P[BXl7'lk[+MX?Tm4P(%YcY
+lecRGhbELqNUG\Pn)(8:hjs;mD;ejXpL!=_?bQ)>%J=)Qp0[dq?p4Eq*Vj)KqI!&!
+@"&/bD>d_!ra;l.@(lVKNWrnJ#@Pg[@/^=;mL!4%$XkXr@6P-/%L?KL$"4kW@;ZQ`
+NXoPn&7M^R@@e*:c4aXC'OgDE@D3Ld%MrR!(h+O(@Qk]=rYo<Q*+DY`@!3]&DCK%T
+,%?!G@\,)Zc6QlU-"=#0@fA#fegb/Ml=.aeieB5K"uTm+"(NZ:@b*AG4uQnG3+H8V
+@r:45/_T+V3Fh1o@dZ;;ed:B.4Cf3KA+f$Fr[)/Mp#KF,A.Cre*Z*md2rpPSjK:K&
+VFb;f:#sS]h38EUM):#,q$sodY.dhpAlLD.<TR7\Y-(i;N`]k1=tbV5AZGFbIU-NV
+?=h:HjkaBVmU9]'r8nK!AfbJp.duL`AnFeNAm4`eDJ<^3C1`@pk+6C$Xts\8;eFm)
+B"i4q^0<5X>\>*bB0Kd;:1\'EBF#_"Y)67m0GoAS_.Sjf!P2?F(4'W!kDCB$_$5==
+]V4N&FD!"`arYt^Z,GhpOQ[1/M.V4?TVgq%M<DegBIJYt/r4.hM.L:C\+YAdp4)<:
+Nb>5JBf:\-eqgL^MJ61JkU)PXY)hd+Q>)q?l&L[80H94fSS*D@kJj+XTGnkWJL,Ju
+Lb=AF:8)BFKk\i+l2ZiWcBd[;Qfk6C#nE]o2P+Z\WG7H;l@+#^n>>JOT*R'NBst&C
+[ZTjXJN*:uBi]e#7X)"q\SCQDC9SZCI\l@2[VJX9CUeu]rgJXl_<;rUkB<om%Y/??
+\VMl?CGr0XL9g(c`rWWbJ[VfKDQW1fR;?cZCkeBnk+lg*JS`o'BMaNOT!`CCb\Qph
+ld!302Rr&/a(L.Qm3]F0hUu_J^?e>5D*HTc;XishXmQVRmB4Fp2ToqIJ*cUVm%C6C
+DRF@GbNmI:lA").:?LgOj_!Y&DQU`l:;h%+ORA]oD19<<Nl5VfaR-FlDg'+gL='l#
+l#$.(D?f"a<oRrPaR63HB7ATQ?I3T(nni";C^0fV0*Q."\8LH.E#-+T%^g.SPj^#d
+Da'ES:?u\=p28I&n",$tIeE#]p?E_/n';2P:B#&.Xm&=.n-42V5.tp%!bsXrBNGW1
+LBMGV*cLclDDoJu0$*R4'C_n>CZcF$^/=3"nrlQjYEpX,2^W7QiFhkO$#h[QGr]l=
+<YMA[mdDfA`qf2fTlT<OB?&eKqX]oJNt\CYPGY8LIl8p_3Nnc%E[aNAVXQ5l/oi$s
+lBaMGcT5g,luS4SB\,H:mm(p60l^t)Ep#f3?S6F3Q>I.)FB5A^s#bDEL[Q$2Ma'^P
+a#i`K:@D7^BkL:c5>ZIR;f/F'Et;;ea&I!g;f09QB;[V003iO9<H.,(C/7oPLH>(!
+MtM,\oZ'sOVd+%&?Za#0FHDf)V`"/A@J6$rF@LS"O"5@.5kT>6p@i-?hd^g':\O"e
+p%N1n05C4,?M4V2pHMpUG;*uk>B<;\p/cV*#C6&^2g-iipLdfOYB]es7VP(gG;k.t
+Dd[`qL30ALpBGj8hdH-?1O&jgpO?t'QY^hXL[9M,pg8:@Dio+^OSDC1G>EDW[n$3P
+GBbKpGF)Z\Vcri@OEk29ph*lO`\V[SNd#u6GV>;+c]EE)e9H1AG9:euIu*gM=*I`:
+p^a"mpQ9]mT_%>ZGmBCU+,,"o:Np`.q/<2':T4%9IsGZkGNY"\\#fI6ApMurp#iZ)
+kHOfTQMUnKG\=1809c7ISGQs#G%[iP(:3nA6i/6bHEW]]&!m')`VW/;He0ZiJ%Oo7
+Q$b6KI(r_XQbW<.I;tU^qtJA4O3IC>Qhpa1GX$6HkE1'cY]Xo;p#3mc:Q#*?bl(#Q
+H69PB#G_#0U3K2WrL\<0^K(.agZOXVI:'pA:G_eO\,7W$r'/)IccQ.#aRoKYqsW*b
+=K_U`VgPu;r3,U30AH=.`qn<<rD.Y7i1KuZJpnfBF\h8t(ZYO=1D<9tS6sUGQi-5#
+kPr%/#QTD-%2k*oiWq6T"U'HE#3-P'RM\"#%:R.?!Oa?jLI.YQ=JT+0&<04*K+YIo
+4u&/9#/b,uDF?B#_W90*`0OORRSB]$3'?J1.%8<B@sP0`Gqc!b`q,U_3+Y:Ke0abF
+`DUq@R+::1MJUQi8t"(A2>Z\=?"U8LX-QCaC.1q*d)OV*$sr6pWSV%4RlnFH/th-=
+(`OM#fkQaF/egu!Nq[#(h(dr7oq*h)bh&Qa3HV;(Nl>NueSJdir&2FHEHHR3[[ET6
+;=D+k"JYF;\)F^HST^K<4P/0Y3j$Ccn!2kepA+*9Ve9ktl>ZIR#,dA8dVs-Xr`4q?
+c&VBS3K1&'&Z5!i\6OL>'B,5?h7@jThKtminnthZlItR30$<PUXU\;=[m"^,qW5PS
+48.;dn%.lNY0[gK!]Z6O(<o!;_p$<1YN*q@W:9]i%RCVQ<e6-E$nVq#n#D]cZVZOM
+#.JAa!:)T5liS@f1$f8e/[=)%bJt!\B^R_)MK'`WXW3$.\F1,pc:H:"9W(;jbZ*#u
+E,619/hrkD/[j,+GpG#j,'aSEOOD;f9MOTK*4YT^od)ec933o$%:&-R]lKT*0?u@_
+k:WoUld5+J9VYY^aKllWTMm7\R[6@)lu,?D&,VDJ16b1T<)*#=%38D=1m^s6&VWk,
+:@SKf035<)79@nkoWKs\c1Q-P=LF?X:XSZc?O$V:I!K#Eot=:=<H^N04kJ5As&lq!
+Q#US7F^r5E=-D+ZcSIJ2=GK<Pj!9\?85gFr?>U$tGU4i7b(69X.!$<)=:FJ[i/)MP
+K<c=LGj=6_7KB>I3.(+J59Z%<rSlI'gO-N`*>aH0k[kmTiV;OCP%4;g;i'+P!bWcg
+CJH[H8XZAiOZlp&&Y!,Fjqj=rqA+^M?.m/kSQe,YJ"p_(-C]rq=p=Ys0Nt>J7I(i^
+;27VEL*rMV)+(1&@ebC`Q0HOW\UEdi[`P9/8Xt-jm+[MjVek\]c*5=D[_8L#Rs,+=
+jEk5CU[!pVB;S(EDP>,9HlTDKBbWJW]Q$"$0=bQHof]qYTtWB\D0o%BcL%(,Zb()q
+=#U;"q]Ahf03W!]S*HBD)qAqp+(r"S])MAHj?9C]d<RcQbMd<ADdC3N>AjVfDK\MS
+g"i0Qp"]9=+)I0Z^-A1HqX?]W[etDhcb8I)<h\td^#,gHD8%+FL]8F(/`UeEl+",;
+\GKNnF+;BlX$$]Dq:fEA@II4B0dfrh)11n&%\<8WB3=L>CX[%EXo:@p)#.HZAU0;e
+HFO5;jWNV'J^.!6_0?7pR'[$::pL5@f;/tH>S(?T[M0Q+R/gTY,sTb*'u!btlf!2i
+M6D@:6oRUJ@LNr`E:+N1\60KhPDb0L3ZBpLob_"O%!&EV/OLAbCE_b(JoQ2$7g2Bq
+,4o#X">0#KW7(hl";-6j7H?aJ:E/7lFc18,rC5E9&moGUN063-5]T\7T%fqaX54PP
+5\*7s*1E(M6;0c>oOsTfo8c/^;_m$)($.\7G`o3)af/P&jccR-%Zu*232%lBbe-1R
+nE\98JM.CA^al`(>dgVn]VX+eQ\b'6Q"b,WjghX_LJD.ofp=9gN0fs<JoAjn^G0>9
+c'Zs8>>A*Y1hJl8R4oP&XuXjmVY%']o1F#Jq,oW;C_E>FdXK74V`pu"hjP4-?dF$(
+i@#)$R+)%i:l43^V_%UQZd)k%=fFDn[,7>dIVhlL0`!257@7%LLr0PF2^lmXTSMZ6
+cFM)Qkrg8+oWjZWWZb,Cm5pgOqOBr'ED.e20;?e,Ro#Hn8a5m.Pk4HQ;Mo`bW&7&E
+;W<h'MPX.K/8V;m/u-j]%ob!K>F76JX4&NH9<-5nS2;ebek2Q*WXU,CeH2o$qUZ]a
+F[N5b*h_#\s&1BV:7J[-L"Ilo956nEWq:2A9mRU]W24R<oo?U]=j9:5c$sH6ZCT\F
+b>406P,n6/^XMk8@OfVCCfY;s=UM,slj[R#F,J/IgJ;['h6<r%*kfF*LMNgkfrK97
+h-.sRDChmYVq%BsOIE:bCK8ZjFi*1i$aWR/V2LWsk3:AWARcsU]VmbUbZgN->bZA`
+\((94><;S!lJ6coF`uhP]/*kK`@n@D0!nnW_e-'Q2ljBQO'TBDJu\4oWc)A9=kb$K
+k'`)peCs%jkSnQ.Ki,=fJtV!?aK-h=`,mqZ##P3QIkPC<V0BYIi*$Lm.NSOePm4bU
+\oicRo_U+UEHu'j\L-O#7?b$A(tfmmEH5<ragdIYAGT_ujmH*7q,1V^8V`QX/m+M:
+EI285^FSl>d`Rb@1?L[].Pd7>b*-<b9ru0qC4:5fcN?8OXJJWHp2ls18p09a0;(*1
+.a)!2H=rZeQa@fEVn+@AB&(pnoS-:_RJS@99\D2-mZ=-*Db!oX2kID=U!knY;<iL^
+Wc%g/adPFp8duZ9ZL2tg3nEV4*4%6(-CC4TpIaVjjeo/>G1Tnn8F$^jU@M<ffm<Zk
+l!2K1[X5=/g?u64D6(&:-10:[,?7hT=f&H2c`:5.=5SG,XtEK,f@k^kB>'Dlp6Ne+
+q?opZ*=]7GNlBN"YB]E:!q*KDi7]-:Hts_LWE^2Zd/0SMC+\&R[^PV\]L-[VD7Q\@
+2K%4$a*I*u!PeA`s.%eeEUgZ;YI>_SfK7C,k5I`e3EEHD>apdlS\nJf^7O;1HYr:H
+\&gY6,3$72Q?-A^cK;!eiu&AhFT.9IH5AC!RgR"$S^"mTr\WDY@K^XVV9M'0T$CU$
+H05W^[!>F<l#2K*m=pD8[Qe9Xq-T>-XprQpL6^p_;craA]=WAYT'1V50(",^b.#-$
+;8)G&8NnT<]LEk.RodFG*$M_:='ac+3qDSXn^_ilL$lP$ML%KE_='#eoH![Gp\?W'
+HS;;fr'/\RIcKG^[p8*Fqo%eA@i@MEFl]-,AFN=j*[K<$V?GFcY:lSMZ4@q=SF\Wh
+-2mFHYVOq)H_>flH]WY/ihYJ$b6'EF0n2U+rG10Z;\.845E+%i1K4(nDp^I-7,%V.
+aPp"pqhiDo8PoC9B`/6hri(qW.G"T70*/97V,,IFYP/'S?NDi5Pu%8Z8f[jb3qdLA
+ql\TT8d,-4,lB-Y!g#[3&2OA!0UY`F"K?SJn,W`T8H\Hg\?Isu:ct`HAHd%!r9u';
+:e(!ECmiWp#mni[E0-sd%0d@G$7pT4D-I(gQN#6N#gYjBDW(jqkm@t.$Eqna&7Z'N
+jSSGTp(4gjn-8@n\uX36#]QUBDp&RY&I>U7ld4;m0TQ]?R,="`Xt\$/OF5k]#kN#=
+&+KGUO<4s(HMt'N!Dr.nYmP.q3ta6]rK,PB&CgRgf`+[:#E^)AE@h@!.1j^/"#-t_
+$U56M_WB0Qpb:Y.YDE`$9(7rSF-/<`&JGjU4T?!QrfG@.E.\jeHG+<?kj`d)%8dXu
+>8T#Y&5eQ"0kD'h9c"<d(Qaso&W7=L*?4O2&.EIqd0C)")%LVb'!ZiiEIf*,d1``_
+)plPEEK^fLh$ii4(i]-&Y]CEFpt8N0*YG^,nX1?"`t<;q*"hu^0\IT;,mhuD*jE`p
+DuC+76QNHM%<5_b&b[NunK)T2(@e@HEN(2q;[G/,,>gZIdE;9IXWl1@,d<f+EX`XY
+h]Ym;#Z4k5Oi\M][h81D&b9EX&DJMY=XS3a#4!3A&jD]OTKu$-,8),_;Psp'AL\6*
+]W"L-DbDU[<@dME/1O@FDN??JM_&e<g60mQ;UV"sd[JV,RhEl5;U/Usb:T]#/?+CW
+c_RC8nLj'C/Lf:'P+N8*d\`3%0J*p&')Iej!0Zpo0s-]r;R!G^jY:In/^lJCd`S!k
+b*V]#0?V<jZQV'ooU/WN0N-L[D9FOF%(NV-2@:H]djH[Z]ep7?1<TnVZQh0q>9U<b
+2KGcTaXo@@DW4Soh,BR0F"oLm2$B+i3:OI8'8J(/'fXU(/5pU=e$Crr0/\lg1NT/<
+Z^j-sG<G+U2R@Tho1;$+B/EQ5/PuC*ZTC,;FYQh:$1lh$MOunmd6=ne4;23a&D&sB
+"#KOHWH5=-1=8>8h^m76.+@robW@]R]g1'P%J+-u'EpKR+YT'+0f0\3X$8l@q*`[2
+&2Q%.ZlMO*[6PET7FR^Ye5&2JjY&?Z3j^r81`8P8B"`9c68W+;F$2=DM`N[P">i,)
+ZT.n?Kg[bS7!!WAZO'72O%O<-5Uteb<-(4%pHS;45`,_7oBSS]WBjL_4k*n3oH?%J
+,q_!k7[%+L9SZ3(InA/'5IB$8oAN*%aZf<i5*So;1PnG_\O%#'6e&qI'<Nm/9.fcC
+QaCs"1j_.qfhk_"89F`&<7*g-P>h+o;3`js_TbEt02n,D3qTU<Pg8B3j]+rH7?j9+
+<AR4plVY#N;>!99PV50V''L"h5W#5oK%;0'/hE_W.S5j/M-jDjV-3;u=tNr^EBdX+
+X]fOr>:Hsa.>qCZV-Be`>:G>424$7%^Ka?I>,g+W[D<ArWhu'%>r*<%<QcklT3fW:
+>A9.*2<qJ)ZC;T4?][ie8M=9sTj&sq>ntU0<Vp&;%9_5L@Psh4Q4%$db@9#og"#h+
+#utF-/tphWA%"_#<Yo9QSR$C#QZc;9O_8!$><d9O?PXu\G%G-@MdnXC@ho#Q[Nr)#
+7:bXKA+hciepV(pDd$1eB6KC?2E>G.]k2GFXEJF!ekKhD='bLK`f)uc('c5<!Gg8H
+n<U%C2T\:/_.C($@$['l/qIQa\Fd5NrANbG<bYa'HYJbID3gXD<omW<V.$h!SCXfT
+<j>JDgMA`SCA(pE2Sip=9k\_YEYeOk6Dnhr[;TP>D)JS:'>%p,K4l&;BNCmE:q^T:
+<Gq>tB/Q]XQWI[@.<#[HDH4et<T:!%&TR,$G8<tu<_IG;D/\#>FD]QEf.CYo"*5Y0
+F*E=H(6"Hd7<Y#-DKbC1p<@ZF<HC*'Dg*p\Q`4ot9%3LYG1M.Y<tB\a)f)o8['q&t
+p0i=B-[W=3QPV<#(@ufQH$]2=F4Wj&(?9bnKk_CZE*)V7(?'0j[:tu<B".e\p]GIo
+ja;(\EGAonQ[+#RHX-;p?C-:q[o"'Q-$X%FI[<oK8`=r=06t&2I$U[]QeQ13l=DM.
+)F@h9V<*Go5BTu&.F5Gf!,Af!I,)5^o6>rl3/N:_N0q,6RTPYXfSl2BQsNmNSCj*`
+WGRMaf8<[s%sXnIR%9,Bl&#d)MNs9gpl(\E_hY,bN/NUO8Zdo<^PHa+Lrk.(R%j5_
+cj!UmN*+5j=RhBMO,1oOO8.;dR0Sdtf\'C)WVI70Go4NQl]C@TMYQ+tfdDg/Fc4p+
+37uZE=S7l8*K8YPO,2hXR#?a]Fd#O(O?"`Qq&tsl[?<"6PM#JkGP@Dk4-]9+OP*ur
+)068_6^4Q9Q?aL:)./b'<L)6UP$#2NfpS$9",P+[R#f^bGgD\W8XLs3Q[+g%3FbC$
+=-YdLWHc+D30TJMYFJa8)HjnGf\H[u\!f<[Rb?3[R)=Y\n!a$LS9^T#GdEW;qjA=q
+(>5UD=m8C9M10_ZaEca0);CeQ\W1tXH24u!q?`m!Np%AnS_8.Pd+=tZ&D^MAS@MdZ
+q=BNTp7PP?S(\5n\DNZ(9:e17S2sf==VIDdNL8D,UUN+Sfn5AgqkXooUfnM'g,#?^
+2kh46R[QI-qJDnYWLXr#T\8tAH2Wu.5H<DMM])[Fg1.(L=f.WAT6_*I)C_Ref:fa#
+W=C_Y3J*VYafG8NUABe6g,5W$J#sQ?UUh8@fg2/)T;l)nRJNtVRTm#(?_7-"93TTC
+HGQks_k)2YKN]+lpu@%]H_FX5Y.B7Q\gae?f:$sKW;>t>U8:uV1a(mg=\1FSb9OEq
+Mm_gD[OP"[Dpu.oMmfU?[cQnbC!F)cK=@hV\#Iuh.?CucGbnVc\J=A<G\jAVS$e6@
+\d;6C]$%O]Z+$^7\$th;Rp=[:C7"gI\T1-M?tHuB0>+p5\B/*i44bA)gV".i^)NiU
+)l:6;T>'U2]fVCVH],Tq#J]$X+hP4sgD@I!$auPoQ!8!m>PFAP"U$pM]=T`5D`>,(
+TtO\1Jm6Ik]H$F24`oI0_)Q)>qn9k:3PkV]aF"lA#sl6%+iW4u^FW['>F_?jO2f:c
+`uH83d0%2^28jl,`cP_%$p2&5>ItkKB`)o$]J$pF6cC$(\Qj^*/g\FGO2M_[aiaM!
+>d^[rURN63aXu&cqh<+.5KbNj`k6T@g]3YqGK[YLa3ebJ]N_iamD4%tbZpd`geYdl
+^mD\i`Z'KK>k?+ncb)Aqc`jt+r!CK6'?+4s[Tq/'WZB60@F"Iec$[.O[h[*o@EolX
+c;K)2r@uFkD9Vnsd9E^*h&FQ9?+oKfdsV8+>q+(T:XM<7_V@f&SGgc>,LlZlf1X`<
+rG1&5HE_c!bI`VUnFs_gW3j62`Eb:@?&+(1ZdkQ2f=[HjS$gk9D:X+gg3lcG]W9g.
+(#.PSgNgES]sA1G=j!;7fS7/^h$_Zcq:Rp#c.m6jh=8;9l.4\NfKF0#rS>=QQ/.uq
+h)uY,>Pm:4KAM$Yf0/TYI08FHH/6,q-2YoYHW#iWj=<8=j=*CTgMkSt8d=RQjXF3k
+E^f)i:$(WajmoV;.Ac/UfB0&nk2l!m.V\$\9BL!Lk%Tb9IVb;KAt*+^kFI&+?A%K^
+V<>Rao6t;?*bLc<Ms=M.ksa_"#qtUk:mkY(PoaD'hPoft-gEn+l(4I5:"AT:S)mt:
+oY05J5.mkDF7.Q`miK=68lb'RZTip'mQOb+?NnD4i4-MCk?Pdl?LnPrXmp03n,FEj
+*sSFr+nD3qZ9HP#^8LLmf%JoBnineuh^Y^W%)q).o;S;DIo`Eg>OS1_&3cZV5)JpH
+2=98^nG_,7/R.U,HgM9Ao,i>AT',iD$2#:3q*0KLh])>0\a^Udm!hCl^Q-!WP10Gt
+kMGWmhdF@9p\K@92dZOWIfoPne,(2MqV<=k0LPZn_qUgBpYU\k5IpFdcfj6lkT?/X
+^Zk"`>Ta,G!5rb0&/tYF0p(0r!eLi6#1uU%)Zq#gT^b!P3,CO0`hK4?Yg,$3NQ$X7
+q)!gr-&P28;(5aj8I1a"i3K>0U0T-u8nM#3+MrIK)pfiAiOok@6CcD8_e9cCUDTq&
+-FB3&?>2ig8#qbebhaF&Wn4-]9+2FB<23Wt;Ba#R6ohSH,rY"AhRe*9gh!t\Xn'GQ
+)r)usCRtnEKXP<`(:_'+4-%,7.2\Np$Dj'5c`-`!2J/LR\C'ir]JLQR;nuD;)>hF#
+.:Cfh1=;%m,+WT"mj^<0"kt>K^eAqH+h!Q/ZArob48cPpac3^REL@hrf4iCi<\g2(
+eup[FlM'OHDa()L]ut2r3tEE[\d^+H2W$Y^CZC0-.*_@`s.bUL39W(M1H=n\NcP-t
+0eb^,s#P+gY5kQJj#GjZ&$-?=^?AJWO[3ci7[HNG>$V^qkq`[H-\t%3M2)CInejoQ
+j:`LWdBn(Z6ZENLSO^nmRj(A%A:Y]@8dpP&8Fdaa'hOOXV'ATq$99KW&mVgnX7D4_
+/'JWBXX_PY3\;r.'$SlZa--qf1!UF``AFAg7-unY'9%E"c]bHl40l4%rAi4=*7m5K
+1]7VL;"Sl(,1(DU"\DV!2(:`;FM0V%;&#9[8B\BJ8PiC9j\\]O15-*:99OE:<Rb$>
+APZ@WF_P(.'s2aedoFY48(\Rt4(-[k4c*"f<aChseQ)R-B@XG]@5D(fD3\(%<_]i9
+fp;T-CtmL"`GjR5/^\@f(@Bd``#!R:Ghi$>f4nVn^$0gu2lu\#hU]+5I,C:i"b>+4
+*W\0+=AB<Zi0\BoK@;dI-&:GY?1Ed%pq@c-iL&H3C?)h45DWi/##CCkQnD$1j]OJr
+Qf_9h@@?0/^0R2iQ0m+lB6jK'MWL4cM3M8u[Xju_=`04aj-bp[B^**_F/Nb6?DjO_
+\lQ#8CRSkEO^hRB2gB.A:3isTq=_.<m2AIE\*]V*_6rX7<7Hf&6(3WPU8hmJ/oXnd
+$'4T/B+\#2;HFSPEKNHjFn*T*+i*YR0/6AqM@V7po:5h.c#Gle;pZ[mpJKB/]jE"<
+oc]Ytf^rI!BuBYp5@N5h?#MCMo0*+4hXiuB8`KC!+'%@oSmPdXp`=p=k4d_nNU$<\
+T8Dn0T&6*opDdPVa8B2Gaj0h@f<+N<+((l4qO_]VnGSuM"aG6@8!Wgt50)RQ^K9Lk
+hkU='DuiPFGEV=LbPH^LEX'5@%0N8^&:fiGo"[4<!FVu,Ja^G^_<<f\TaVWf0Nn"`
+Lee5K/0'<2rXm!Q<sYLY,_[q?s2-7#$R'mML2b!L_h`4?+q-YkE:P*h-lEMglpcf9
+-6:%gQP:W+7#<W".`@,X$DO%aMXaRq_e?Xu,5b&kECqRt31h*5N,"<VZ897O;&eFe
+E/RT9"ifcD)5GE#N,`#b`J8^3?po4!Ob,g:klUm[e;&u\-4\,Ko-5McNeOc68BFEO
++_)d@O\tZ)2l";"a>8<0%J;8EAG%Dhbc5-8Yt3$uJLcf*YU$NqPtOG\/XtZP>4Um1
+bDC^%'4el_Er'7h,qUjK,g)Mf[V!\XT.FT%Z^NZ#C!1e&/nVc.Qa:R;c.PlNB)KQ:
+;]]o'$->4S>ihB;WDH:!]fDo_nX^DcH-^2g4XXe:S^ToSbt7pn-k+n&o;7,b\d(4X
+bkRUU0htKt%m/t1%[p?pCJefR7Lum6U/WIb:q@*,-q+`?e<5>[C'@3X,pK+kWfBpO
+q+I[b%AYi/Oj_BF:+8=eV)7b.dqW)_WI5MY[).f$3ce+I9h)(h&t@CNG>p$Y;Q'1C
+Vq#O7<@T"*WO6cIeEXA@.U?G`FaC:C8u#Lh9k^PLWj^L$X'@.1)6:0nYL[I3?)p,5
+X`a3DfBVC(/"J>s[HbEW9)i>$/VpVh.`Bu_#?!*YP-O^Y`n:]]>cc$b6kht]=h>\c
+m'Vt^eS<H6M<eG\h4q@NZIIKQ6YS!/T=+@[f\5(Q>HJXNZW>Ypg?L&#Xp#lUekY((
+.rfCm28ul1*o#!I5qU02Um@[n;r).dFsUGJQ+(d8h<AEnV4HPU[pECt.;sJXc00)4
+WaFW+hg+ZJftMMSpe4oJIP7hZ^N;[:at)R-n'1pK=9e0NC#=I0rX-ELLBcU?$[j^g
+p;-L,$JugNIk].H_Y<@*i9W[]0Kp,fGZ,14Ceod?/fM]REtmU">1p/]$,IF-)W!Sp
+H?%3sa*>oH@iRps0d]6*f`Mq!Cjh=!*]D,c.jF%J=d1Z?;T'Ft(hHBnP;7SjauOMl
+jm9%61-T0h39qpRCq#V6mV9r@ZS:MMZ^\:]B[(hO2Wno6S?j8Uc["h3j35iB1JW2?
+H4)dtD"")Sc@jNT1I'pe(S\8hOOAD]7-RDbUpSF7dJ@'<l-1fP[185HH>?:69a@Z*
+/tg`4P?$l7/$!&AVnnb8=_]O,WAVu$f6Xb,j5".@p("I^)TtqC4^YJ%Nj[$`pLJ+-
+Q*@]W`6^RB%da^nX1$$egH"k?C7VK/[Jn_0qi>]6?*CfG52k2,X%VkbU>H8'e<_<#
+;t"F!^*R+^Q+QTgn*+>sV4RaR]F*mrh@/:$-M?6n,DPZY+#8(7^YsQ=M!s1R6hm1j
+ik0>kn/ag1Gn1=NHut'_4tXm$G:MSlZ\`^_4j1@U1=ginIIb*jbB_Dek+%'qnh,F6
+3SuXVI+OSS*`LI3pIaWi1SISC9ud#o4R(ZLW,n!&cFV>$l[9GLnZH<MqYs4TI5eJ(
+rVtG1:Km.6F11c0hq0t[2XLBH\Fr\dft5RDi-hZ?p<N]m]FSuNIESYb:A<SW06m#8
+lc/\E&)]R2K(=@(b4ol?i]M^Jo):Gjq!UH.3*1S$5',-I02L[m:R:[&A&S2H9C+f[
+T([VcgA3Ghm6/e(pO;/@H`qqf4qGBo?G"J8hPJ_K&'=I8hpZr0TCDi@`V:NRiI,X$
+o"1O5o7"mHIIF$-50).L?6AT^+4'Pn(Zk6QVsjWR_u)_@lhS<1k'E*Uo)I=rrr/tr
+^Z5:-1]G'ts1f<K^MEqb1\<q*J@CDCM+`.@p_fnj$)L<&V-FD)C^d.f%Af!mV48$l
+X:M/?&>dS_[ut(64:+;I$:/-0_(6>;Hl#&d)5hj!-7flt`#?GP*Phk"_'C,=6jl:s
++i0:&/F4@R/0McdAAV"Z_GhaHCa)31.)==]_R(ekHm_6c*C;:q6M)3`j=!?j0>f%h
+_ZV#J6m"cq+@BZ_6SpX;KJgZ32T)=L_Se4I`&#<<-:?9B_t5t-"?OI842TJt`&'$\
+oL$Pr7)9R+`,nJb1e5KK8AjdY`'c`+`')$a913;a`:QdBe4[a`;8e,``ACE1,XB<_
+<Q.p'`FN&hF@*s2:;oV!`2$>N`)O^_<lO-%`Um<Q"Brdo>K!mT`[#&r>VX4QA4?E.
+`XHM"*+MH[BuYg@`fr*pb[j,r2b(_s`[krGA8B3o=@TZ<7SImCUiaX6DoY7ha&I9'
+A8XcqE^cdM`Y<d>N-rYcDo]56a2EJJe:>U#-c_`P8)/7,oRfXbKg_G_6PP-nFG._'
+GfX\naIIh&`/)LIMTDTIa7PA2e;["PP"+f!8<f.Ub`p3XECh,X5]U=sdD/"n;h:ZL
+ag,?s_IUd:GKJj"amrTVnlX$9>KRR^as"Jk10hsiRO(Y)-7kucC/rE8W(F([b-\'=
+`1>&u9W[TYJXi`5"Kk>oZ-"&laum#Q>dVY<T$"^9bB0`,KXT%I\'(SWbI"h&gq(\Y
+]?B9JV/3?Y%)C&L=3MAdb,i;#"N/Cs`60FGb;@8_7**PNaie53bTOI=9[$*X+\\Pe
+9[(ZcoZmo0c4^?.N)\5hK[\0K`(a4S9k;7<FOn\^btU%Hbt1)n>hfahh+b!(9oRe#
+%*;3@h9?Ygc1Kf:4Q0$$jj$iYc/e%_"R&U.fLdFO:42(sUuKZ>i6K:/9gn&;SEWeM
+cH_C7:GhXfeF:c-n]oqUcBS#oo^Y_`ohK?"cLgkW4T!HXn'@N]c]n/n<<,g"rm2)P
+cd_[8,lGt_"OFI[cc#HOV$G?."jiM8cuf`CK`f\5%+(gVchNf%o]4BT$W.?8:n7_c
+m1dr*"]5.0d7"OBAIMG$%8hflO<kRf<>a-&(==E>;<8\D"WGe=)pT`NdBt(E2'C=I
++jm+s;=taR,p^e'-dkF3dWH;Q'e7Xs/(2s!dUb#Y`?!D20@H[PcNPWD2)3Q[,1C*P
+dmYV3oek3P0[l:Fe"nkJ'_,)_4jt--e("0Ao[c_**ZNg?Lqu2FS=%`D)UN%bda^k4
+rCGA58^A,Dc%Sd9AP8l59VnjcS)mDAbtk27:rZL4e6NA\3#U6u<)Ws$<F&'nF]d0g
+=k&^?d=#"pI9b<f86+bQ<V8sb"ZfZ6>L^&ieCA'YojlSfA^r)=eSS^EV-_`<?e2&e
+e[9,B`G3uSCXpC:eV.hjol/J>ERmR!el?eBATZLGFk27TeeLk[Khb^7:fjK:<onPV
+[=$TFGh:JpfB%;0omkZuHIrsafHkmr'lDT'DV$1gfQDr#22BhLLt>(PfX6Ug<K#M[
+N7^jQfO^,rKojr`Ok@X9f]A=I2/h%$K37f0=8e4`KooN'Qe3=GfsR7$`L>FBS(Znn
+g%CohFd#t)U"Rtjg'+8*'pMlJV:mf(g-qpn<KC<pWS2Kpg4cT]Q$6E.XkL1cg;U8L
+eSnXHXOhTfgGPe]7B"s@ZJ-CkgD-#V7CHD0\_D7kgSMMd4hTND^"Zi,gMLD$D7a!5
+_:nS!gBGLLKpCG!_-;o.gTAM!rP`#Y``jb%>Rek]9up@McJ4Dm>fD`Y]mF#?`mcJ7
+M"O04-lZ',e^0T4dfn@NIG!#Fg!=6_c%XlJXkT\cgni9OS)rMV4k<G@hqf+"?6/(S
+e_m;Vine8+?:<]-BGoZ4l/%-I?F96/Q0M]+kMB5,h1b=GV=!-YgKu8_?T$_J7H7_Y
+jPOP4hc8iGp%I8XnD0r;h8T9Ijo!s=rSLoHhj*ro"omJ'!T0aLhmNXE`WY2M"lJGH
+ht??nL$IS3#iMQMi3i17`Ur*>#[g[5i$Jfi"q0B*%,iNBiAM2(Ae3fW6/bQD@9s(F
+L(@ZE(u_>0i=6W3[M<6%(X>XuhW>(#NYu9^*+>uoiP#o_c6M<q,iU^/i^OR?<[Zm=
+.,oD"ieA-+Q7Lsl/E4)jil2dBL+2*L-0$=,ita6,2DjG`0B2+JiYESFAiJY>+lcT]
+j0gu**Y)\704W9+j5r/Y"uYHW46)Vj@g5<\G!tB17H??f@b*m,-9krL8)l3l@KnmS
+^'S>i396ApjRu4,7Sr/H;<2=ejOQKU5#>eP94_F(jaL1jAE.+t=CFZpjK:c0`^/_;
+8EJu*jN^h<N`tLu?eq!r-+ObI3a@[P>DeC5AmrDcEa%UW?fmYcdWTD<Y&$pHC*kQL
+k4WZ=Q>V8FDs&Hdc2M_G/p-7<F4#GZk8&6e(3eq2GijI$k+6q^]e*ktI-0".k@T5,
+L4JHaJ`h3*k6?P$Q@n?YK]fdukJi;?eM(XuM!+JgkQZt/(6%H(NT`9XkXLTr<fcHV
+OQ^kNk_>;bPq$IEPj#Q@kf/tQesP[`RHX@1km!U@(7)&iH0Mc-kr,0u7\K!G3b`3"
+l#rfcL8=("V<OkSl1V%>et_KLW9OSel5$Gc,hQiiXQi9Wl;k+RB!CQDZ0I(LlB\U<
+VR,Qr[Hbc?lIKS5#.Wt7\a(TRlScB@7^q[V]^'1DlZU&/L1on=_<[u8laF^s`l.2o
+_!C.%lh8Bc#0?-HUhke.m$>i]VQ+I@c0WHqm+.>9<m9oRdHaiQm5E)R-I;'[d-PAo
+m7,OkDS>Flea96bm,m'hp=tHnSnMH%m<7.LrnM8Ng$P*SmP`S^mZHoQh/4S"mUjg`
+G1Z.Oi9g7(DI2Yn^?TR<mHrc]DO0SU?=TJ`'P:6MOsJZmJm@b6A5Hn3)s6g34XY0*
+@dedA:mUusY4lk+rR09n!M95Y#6*'Us6pO#n)jOe7,RJm!RdkJn+R%8V[)]=#k(Or
+mr&?uLCE[M%IeQLmtVGB^BO+,([u&In<X^Tf+[Y_(%B6UnCJKGk8<^_(@_VJnJ;i.
+,k5k5)=^39nQ-e%B-?_g*:\e.nWtKjVAA_--#ud'EZZ6@LE(<k*D^;hEd&[Ia!,Q%
+,BDrmEq^pP#:K)o..\f8o!^*FY:K2\/G!L+o1(G)LG/7c0_;1so62t]a#!<g2"+d8
+nt.i3[m9QJ3:nRYoJ\i'7m$>Z2tU0;oCkTDLI:^#7.dBGoQNds[n$&q9_@L1oOgtl
+a&)E[:@`$jod<W/pHA1><V9ElFU(t?2bit3;XbJnoljV\QWNhr=S:!4ou@C3s&sP@
+@J0(HonQi?k?r:*?ZXh0p0Sp8De+$X??Ug-p:"Z,T5=2(A+m*@F_>N6mr3IMBQ_pI
+G/&+lhdUe2@rqZlFq7OG0/Ie_GB[\GFh`.oB6\UNACNH?)t8m;:`5d&fGpVjp``r;
+110fGnk`tRG[H5(GD.@sL\Rd'das?N+,P6U0R1p$psf[qs,VE^OSL0Zq%o&hVigbp
+PgcOqq!XOD0:;N1RJ:]`q.H2mLRe0AReVZ/q0/G*\"EJ_U%tU\q6uR`2&H'VgFVfj
+H;C&WLRiaXSpEVnHDdE^\"S,gU2jV&HCq&1<:P9aYkjEdqZjD''_Zl$[/2ejqa\'k
+;His1\GLK]qhM`ZQ\51eX89$&H8iV88$i*e_>;KnqsV#l-cGpA_YW`@r!1:?(WH;r
+ao$q:r0P%n=3USTbPXlTr27m=\'Y&n]_f1dqo?DK2q7dr`-hm>r7BQukL'5%f_p$E
+rJ0/+QeMBSh>J_VrO:AVkMQ7Ti;NE0rMSWR2m*&!j8NE2rcd&pLYi##k5,,!rhnq.
+#OMF;mJ]&BHfshra6O19jaOER$7Eq'\(cJLepHU"s&Zr7B?1S'pCHHQ&Pq2Y$,m8o
+qi&kuJXCrn%=linb]5<SL^#)DR"3ooK0g_KBP\.d#DA%+!uQ,H0a\kYTMap;C,lf_
+a[Y<I*2YJM*62X<0taq>)&l3p'6onmD''USTej7_;L]u3%Am(H$s#qQV,8ZQR'e\.
+9:uaZPk\6bV(\H@CG\*6#.HC]e82L-'dA'5M:8R/BoU!!8!hN'Em&90E%n@cVRP:I
+!phk+@3KYAYhI!1Z<Zfsb]X21PH<drH&5PPbD<f%1Y.,k%mPBNl)o>kVEX1*b%E(@
+$80Ie['rTKE'^?&229sX2tG@o$=Um1%JA(^#;0KoXdQYN#qc-f]p3BF')[f.-YMmO
+HMpOP,BG:&gH'G98#GD,deN&FYD/+s8rJ+H;Z$d_aH.\9>&`jnlSJ7E][.W.]>)He
+!ZA\u919#=n*C2a]auT0r'KUNCCIprP(NDCXK3>n_/E9r'"bD!h[M1,lqIu"nH*&6
+Z`p6EYXL2J9!q*&7!>0@1)re.`(u>.RRo4X<=VPMbUEol0Eb;U.WRpQ,"Z`aBa;L1
+g(u,$P&)Qh8b#I<'$QLa`1]h$PZo;&0oW-*b7^&NL.p(ON9*R7&sG<#m&[f64Ypof
+42Z,=q\i0Be7gBr'*Lrj]C[>s4%qF.2%<DZXWL#1.0P1nc#7-r5u)>Lhc@Q,'`g\N
+'-)-l^(^H*(/S!n>sVP5U'BH#ZrI\I=4%Ig&(2(bR6mc.PCZ'OZ\8o7:skO-93>&f
+T(l3Fe\;PmW*PRV8ejcr=4?`bY9]gLV/Zqi<L#pt`g;YG?JVhch`'3:rQcfnF$6'.
+g,,APIGaR[K3)"(D&I>i<so1a<`g<[2r]p!fnhjLKbn"QGap41ACKC4P#1m)#EVjX
+l6h,(3=p%,V>0AGK@'Bf)/7QBAn=)<D$FF,cZlm>$<F1V;fosgeqoIB=r*/<jKF<6
+OQVb'<t/M9/mXH=mlme&BXtQjODB/[Uq/Ke<TU5W[`0CkmTVifKPRr,S"".)%d/Rb
+>8E.$kVt1p^:kE&Lu+pI6]Cc8=PJ,Dc4A*PbdqKlnEE7?MNLj0=GK8MFT""R<BV?T
+n^P#8^KdGGSXbr&].PIJDt\O522_*%c[QXO[dRY!GeI0qTQdShGMoA:pK+3e3T#VE
+qRj:uS,*eBET2?DJ#?!;1e2E)G[CkBm]h2kOnEL]\ek!-+-p:,I,.<5OnZ%tRer-*
+m!Ff87_P&f!?E=SH;?-o*N+4-?i0OqO@Aq,a,L#U/,4[0V?9*C<<O<^!(i6;%mC6,
+o9XOnKahK(67:@cR9S!l&@jtg;o%j09?M`\;=2-^0(#>53-MNGpd.tT!2/%WKs02Q
+^*e71iVUE<Yc]4b=HaJ//2W3eC&P`dQMr)_q1R.=.R,m3%3=CWL+g7#^DGi,'[-3*
+0fg>o&oeGUe,aroRE)pQk!J&_k(sYt$Sgk]!2D$sK^oaD6V.4FT7h]En%pc]Q[9W]
+1Y[jD-;DBKi7-Y;QugZKp."9#-f!b:On'hI8!ldRU=97-d1S@Y(c(gE\I4M&H;-r_
+,qkpm^l>W`>g%@H/YoI#MpLBJX_D2W-57;^'&$2HfEjEH1t$nNh@RXdPq-@?6CKV1
+=\.dM/Z'ePMt6R[9DR<rB7.UYE$BAH(X"Am'^L[_G%aYh[6C:Jn;V?aJP#+818S75
+S8J[Ha[sZ=+RJ6Je#I"RWV?R*lueTAl@kK0k9O]A"IUpsC83fB6YSZ@J<N`+6TM>!
+BH*),n]Gj<&gVc/Bh]dAj;Ce4+\uBD5^NuI&C\a7%4W'B30bh#<1+n*ifuoq2'Nab
+$A/8WF-N[^=n,J1:K*jM?97a5m8V!8;jU3R>P1%_eQSqPiuM:%A?!LJb3)9U78.98
+MS-s/mnBeJor:DTYJGPP?u#'mXnF))=?*iu/9I)VOp],A)T,VB>bJBD3mH3OrF;'\
+9P>0`UK<@>AaM@=Z;tP7=]G]@AUU&M[Dp*blUbW&X6I#m'URF_O'\mbB!o[2ZrT8(
+BC,$%R<L"1*=Ih;/e(O!2`Bn`)l%*6eX<b1C<n3L6$I#(Y.PQMM;!cjC5dM#XOfYQ
+>cQD!C3=1!mum.q)fo!FKrVW5VUcTR,%dq0>J3sYqV9a=G;"+*A9Y3.<h"S\m#AZj
+[pK;:CUJPjL#0A+7dOQQ.;A41&uer2$sq]uHgeq^^1\GT?Yh6/mldbeGfHUflh,sL
+-3V50b6m)6Q\$q='uAMmZ=4e(H*7[M`Yc#`jK*]^0l>FY<BeuC.p%?T#",gXCF.fK
+Dh)kVe@tMF.c@;4IW+W$^_gD>ANY@<1B#qG(,DT:]X<O`7Rjf=+]2G0]8:K4=N,R[
+-JQ1oSuouZc4q,AB0.u?16%sR(5BS:m1F*<[UlbAK'Hs[j-t*":=;%=7qkA:K3O@j
+ds$j%kKH#U2#a8nRYK@-r<&0)<gU4\O%%k5:Q+XAPK2Dc2/E\tRC(7Q`k*#Fl4%<5
+oIb16/j>f+1O)^#*nR8Zk+(0"08[.7Zm9O>)?W$]\XLOnh"p2V7&,%=1FDV5LdQG9
+NU!E#WUJ\I'7)rmp8Reedbj4pIIF(T:,HS]T0'f;5HXKr2lYWlqmKAkMPn8bZ<#tQ
+j)Ug\+f0EpK&Ke?N3YV8_)Q?@jF!GLnf>Qhju3J(p[`q,1-j2H59%4^:R=2(HbHN$
+4Q[UcG&uMM>rf;bjL]c(j8ObQDF[NN>Xt#>XnS:[cUR,O^J+0XNRrF\9fsBHXn=ju
+b&ZB8hg=C:oe&8K\DKffh8c$kSuL052c8sJ#IJ[RMpV='gZ[J"?ZYnThYYoQkC*$+
+FL/C,\VFSTS9qd=KX8t90.cWV>/b`@GLG)=OR:0]\G;Yo^AG)MXk`M_G(2Na\o2l6
+4P/$V(sUi`-SOlC42lQ=217WK8b'Ina6p[Pn@[&:kh]O+HbW;A\bEr'?6@16m[<;<
+:XJN3:V(mh/`$7&d(oX-,lK@'pUD$Zn6ElsH656;IeVj]?8L_^+4NXTQa?7T0CO'H
+FSB^lqTm+VO'_GGIf7S>h(R(<Dpn=iG5/#Ur/\kfO&G>k')Rb+kg-X7Y*/O@$MlFW
+"0^kimtU)2+TG5tp9%$`:14's%.b"i"0_q2YR(BX%-au."V92]&(()J.ad_#r6S.B
+0=pT_OU&*j"&2\cE&d]5M"m('lqjGKE*W;/mfeeu"`Ns[Y*T+2Ta8qd#&p+A%gMpX
+Epq?hg5KLq"WBTNb72fP64L0kk@,QNa9IPW%go3F:OiY2pge@C_!qIhnG_=,r.=GG
+<:L$9;%bq[$P8>&%Skai-,1"$M%Csn'#X;P,J+U`Y3[kR%r..:XYUQad1h]r'G3>?
+0Y\:a<>,rb&IT<ed3R63>k_)''<[H2BKm7\mhLd/'^N(?EJ5.jobNZVk4*hH;0*Uj
+/Jnkd(pJ2qYqm#4B,47;)%h]@nGsA%LD4\$(9lC10p<!-\<SekIdtArZ*PAX[i80h
+*@9/PZ)%*`\@&Te09OODd:!iI`uYiI(sj9G%-nog)&KRCoTAS\Y6u@eIish=+q(k(
+&5+#g[1q$W'X>IX1%*;+=!,^Z*:Y0p0prsN"U=MY)A2K[EYTm_FVjU7)=d"/dC1:I
+7`/*P-L],*0UEiCpE`^E)KFdK1$9h19-fYQ&$dW/dD!AX;'m`O.IoP<dEsA*W@(OH
+*R2PMEcg$`*@Rs--'Gkg,`a9!i?iRtXjSL=P)gJY\L8)i+S*DiZ<JrEfSbk@.e02_
+1/?\HGq'Gp'N1JAOte8G1q0ch4;+bJo$&fK&MGpX+`aP5&do<Bi?iR;+jp*7ZBZq<
+q(8mr,*L$iP'nlZ<ADrO.rn'3EucbE7k:nIb``DeP7JXR3@0l!"nBnN;a!"DpCad>
+/(.?G'$2c49-#fE+O[5@1&j2<odU/s1fE?hnaA!7;)e*<UCkg2d`jZ?<Au[I,Ao@[
+o6E7bkr]Uns74c'1*&=eq`%KU30BakdLdQVpG6LlEU`*PYF6n7+$[^V($E6bJ80R5
+$?];Y/]2j"-:^@b<X+d*b*3o2O`s*2j$G'@67'B5,Mtg63CAFU68U,W&OAe66E'Mr
+dki%DoM\0L&3U^r7FFLh'L<2X%"e+.3qR2Sd;;@5gHp")6F;.nF<`e&,!OLN7``V?
+FGD4XR6h998b@R'%f]-8M+CUJ,nr(';cQDr)b0Hk8T\r?X0Y6:K07Z.8sI^sO./da
+e9k4i:%Z0]<3o>A[7BiS9@E,uFEhD>\LdCLdI^pD<!,f.iCYrI9((k=1`o$54$rT0
+:6_SOeEnp>-Um\0_UR%3PZ:-aa[+/&7PpB"FR)c+UJgHf<=Y9m1c%oalVDY/8@8Cg
+'[!Q.<5A0,&CkhiE8sskGok!J6.A+s2,d@/SQODo=V<5V2&SiJ5?$(`;\Znc'\u\F
++&qopa7XLUEZ8*0cNeRf>',_T2$c9D#?oXW>Eo^"eTY6fT2]g*;3e=[ot*^O$!qR:
+<qUrAc7;gNbute$:K<rh2>^Qe_-47E?PRQb1cJQ;e;KU0<V>lZV,^h:!EsXG9N8o3
+p,=@AgJE[%@Po0!PD)YQ/Rc(L@<PRVFsg6HC;6!;?3uU'2&TuTgAgha@J0Fh[7atP
+F]Gga>SUaX[51j@Vd/p/>rCGNF`ghepLH1;!EA`)o`&J;f41,M=XG:o1t^$;2c!F8
+AegqA<D-`nEEb>D@90L.[S'_fj%i]'?ZjB"e]Ub^=[X`U4/-Jf6bioL0lP*4E"WOt
+<Sf[$#sn:q4nfFbQO*H^)I)qTEC]\B,DgE8]5iPqE9u1rUU>(&:N5\WF2P2'(Fp19
+/Te7$65M@qf-Z+D+*;^4*]G!C2\0s$Z$*Tb-5Tg&QZgT>:-BCpF]Vdd2ZIqUkAdDr
+G8GgRpLN[#?[6jOl8O;!Q[a4V7rqaQGKPtgQSWu.aa4hsN]4'\=/gGmEI)i$I!6l,
+\'&!bQ$UmEIJ8G>=6CDZa)e9:I2@Wc<t8m[om$,0ITP8/G8GTS\U?F&HM@/b8B65R
+$\3<uHdg5]=2OtR;1\I:=Ehf,pWWgX*G:a(3*0aEp>:H<j&O\M3B*(NbUn.N&j8`,
+F-p*YF;9N)BnWutHaj)k=A<e%S?Z0[_"`P*f;!s+Z\"P&F>tRS3)+I408"L^KU@IG
+XFGm_I=9aFH'ieOfQDYq?[in3MO:SsQ]$[0EI^$TLR8I$[iL8A`JQXe0A&XKb,:(5
+'+5ZEK\2Q+QnsU:fnT:"N7b1`\4)2J[iX2jLmY`#A*o"Qik'GfN-H4p\0+Wc"c#%q
+O]`9O\64!Bh2kbcP1T;eR-Arjq0SIeK:"$.fUmln<K*9@MO,KJR7!1k%ts`g-TIrb
+\;ul"6&lc?J(Y-l9W=3I.u$!PM\PE=3Iun[M2(ROOkEZ`f^XfC/WMidQ+8E1q'UgJ
+AXU(hNL=X&GdX'.l&rT&Nk'S((XJ22Kkk1DDfd$HMk!!lkd>U.R'h9*`C19ij&Nm5
+9,[n\RKiLi$YPn<;&U'GRM%d['5pDpT^jV,@u6p`+["I03r1,N3[Dsr+/5t=Tt3MS
+3^c1n&mP3*TDAi\\hZDe-)'#nBS7P&,OM4o9Wd#IVJ#S"+DIQ>JZ"r@V,_l@3d$4H
+-)$c0Z!)^VH6]=+Rr"O1W)u]fH:K*hWM]NcRp$G(qNn"HT$)Gl,oX7m\u23)A"<C0
+UJ%qgqH^/k6*)hcXqVt[3jG^=c)#QpV#&S`=t-Sbq5N*JX"($GRX6$D$**iuU3a5C
+3o%OIi5b]UW>bB0n9;,5A[&XhW3"+CR\c]]RBS\#Y$*KWHRY/)O0<j=WEU=I7dtEp
+3O;1FUUs@Mq^nQ^9+)\MYLgb%(WirZ=ggClZkZZOL"!KB/$uj0Y-MWFUU@N,0RR($
+ZasQGgI8PeWOU\W*]h?P>9UD$Xh&KKY$*ujHZ,[KbH.0Iq7=VU>Cij0KtFsN3*Wks
+4%Hn<kFj\qXZP1PgRYh.^V(P8XkMr1]<O!#:VV77\3$Cjr"b6<`Oafn]_du0HYouk
+GIcbQ^O*f!q\u@O"h3s(^q;VCR2<?$CV6/X]A,9Z)umd%lalt3`-ake2!Md1=1au0
+`-]P/HmQLrB),Y:'H03JR^pCAV6$0F_7IUb47B?KmB%,F\X\f&4H[Q%8&.4H`TO)9
+:m[bB3M,9<3TpZ+SA\\nl,54Xgjj@K>h4%&gF!utA:3CKI-*Tij!).u4'_28]^F62
+p,`-J31TE]I-*O2k#D9Ecq!cV3UP(I0@'L0mC`E]*:M2'?-[MTc=?7f4VWj'(cS!G
+d[_Gc*Ble1-e&j2eGW*7*?icM-.1N(d="O6h.M<;3RP.qcol@k]lhj@aj@^_<1QVc
+SO;#L`Qi&0fR6uR<P-deM:J.MZMcZ2b,<l4RFqILehA,t?)(8F=4]U/I@Uo$2L4&;
+UYO5nh%@odm)dr:Hek&^h>Nttq6f"+YKgF[gD&o.;ha"TGMYL#f:Ab\4lF35Xk;J"
+h#2"9IJM3[;qnO#fmXM/rK5g)p!+TpcCPiu#L[Vjh&N"N4P^8%drjT^&`Z#!gJ#*6
+Sl5;h6fL9Q/A<L\CU;su$e!lHj^&hbIN@2!kMTHfia,@7N.9YW&*Vksir.Klm2tHc
+YMgA^j:O]1*WLMYNTIkfjaK/S*\$5,lfm/fk'fn[b2)@^a6+<hiP*<X?CgEPj58]@
+ffi:"re]l'ZfumVl5o=#*o##tVr"WWm+q),*\6`/dC=Xnlb1-u5%EqC$g+"\m(VZP
+h8p5beaS%@le`61]jKZH-fTUdj'HlgT-NlNRI@m@d%:>]58#F%4l8Hlke=OmI*M7i
+/+2:8nNS2Q^Er&LO5ji'o)?VcrhK"S`UggOc.;G45\`6p.&VI6Xi"m5K/,LIMp+%`
+.kNM-J#s]_W]^E@49CC>s/&"FYPY4s.&F]V^S?4La82F79-:_B)_NP6mJR"/qFE:;
+s69J40F&d%/fKNM,@QsifF8^X#;@PKh?IhN6QsfRbT\DDJW+%>#a?r!%th`0&Q-'d
+4W0-:L=(i/Chu%pbM\IrFAcNqO3T)X3E3j?5G$-\0u9+"Gm0F(.5BN3'Q,Y"8Z4F9
+j[tq;UXS=D3m=a2>aS<e_eIX.$Y6'WBbX^XIQ&X_fID(`XZ"^+]A&)W=fbrK25T"2
+f=>2L=(ehu/gCapNr9s89Hs3:ISN=o\R8gNgp@i.S@@H3<kMtp0knm5oU2gU7pV12
+eh$uPAX:#_Yi.G2Xd6"PCsd0BH``<IDa#W;FX(\j#6Csbo67W[rf4'=a)LhK9Wp7%
+aj"O:g#-d$bG!d'HJQl=?\u8"i;5S6Vq8i\VYmRNRk&[$]oOBJp,u4[52s?Fla#M1
+Y'[hI^5H3p!Bpq@[e7HHCVK^,%O;7G4O6\Pi5>sAhY/q3itDTqYL<(@[;NVS[D35.
+.hopAb*s&#Z"fs:]'t$gkcD"Pq[tckg7\p?mfPug.BRt]lblG$%3*6k95uPuE/]70
+7I$[Y"@[&-fc)NgXEs5*o'2o,9$r;T0I@DNf-7qIA19*%Bf);1amas?nB-_)jH[n%
+<,i>NPN5^sTeAg11/L`i`44%97+!s4PO`-N5`eCo3jUXf76@X#b2";C[-D^6U%AL)
+;p]WlnF=Z*/RmU9o\<@:#-;j(R>.`,LltlbRU'>U8gU"/dqD:rKih7l5AMl)]s>i6
+TnL<q>P-1R='7HpCB.S!"fl^r[q/!Pe/'>QF!St0e<X>t^#N$uN0WOoaEPR\Hp3n6
+X*cIc/cg*LG>ko(3uEDYG)"B+-\a`bWoJHcYncd2@5l_FCgsnT.uIXMFkYSZ3&Xp(
+gK>Q/P2$o.*o#WKS:-j_Qh/t(jRc1lTjsIM5F>qA/nps9=KVsfjn3eD'Bf/Y<JS],
+(2n]fLphK)?eErKX2I$QKqRf0/ut9&HVV,;lcurtR+Zh`1Mu6Ac;Cq(3B#E^D#"S@
+\8?6Zn#pPSC@-iAa^1YVCQ'nKa`,mu=flY4(@/0o)]"a"EnX!<\TA_p(Uds^0#>6l
+4PoV4F,bq5f$+&XrHMF*O"$^jHH'+8Fui]Y\T,ij?*j-m]fijk>gInJoc3F-`:OU8
+n^63!?RsuZ>bAL1G.*1*Z#;gd+7i`aPPsip\6m)@GM2_elf6hL5Pt?71B6EU?;m_A
+cWTGG2DEpR]1I=NJ`+'djQ^%*n9%MaqE?-OkF\O6BolWO0c/L@TS*i-9S)q##*/[b
+He*I<mB<uGUm^0<b^7\D&\`F\$(5;SJSt0!Z:I=>+a`Khd+OmP82T]Vj*c\u3ZjPf
+)T,[)3I["0j[;Q-$CJ0uBCGf77'\fQi,geqnHcYBLe@go9(%Ee-8W+JK*@l5(jAef
+AM<_>;:\(aNm>maXEaB[aE`DAN&VZ;Aof*N[!OE`@RE2E(E+&F=HT_[5tM7HZ"/b7
+Ofa@0`\j/2=@A9Z;FQ1/((DO"r02u"DFQ#L/Li!0U6DdP9X(KO^#Zi2HVu$h8kE5>
+gN9HPdUkhWl%(1WHSS_ZH="'pFNu49"auQj77ueb,\<aHRBm)ibr3g%AW\=.mP8Z6
+)0#U'*#4qrIWWjPPre(Z?((%OAPRKR2l@ACEDmoCcP\Gq-3Wmo'C'F$l.nM"FS(g(
+IUl62:I=1p_iXKgFNnOVl0&i^QS\Va3Z7`TjtsE>e2D>DBNI6.9a%4j<a/9f+[%70
++,i%>Qq>G39'5L)A2I2I;/157Bb^`CoU:lcq"m=USBR\u`b<G^$W*gF'rN\HHrFV(
+;!0t:So^c*`YoFXC&Jm>[&0DA3N0Z)V+YXTSr2)k,=Up-d[`80BND^0>q8obY-m9$
+f,F6f/):iA[K=4plN:QH*7Cb8g;MUD(LO7\K!G"faOl@L=t6Y0WKpT(=fWEQ/9RPi
+(4sY3.k*pRZ(S>,7]=d]s(^i$413?TS5J$LD(V:MT<r4I>?c)H/[_^ioNp1RRsA?n
+/V(A)mb?N4QZ=]qb.&5\jNDnI>qW7\\5rmb?)ddE0$VhTpJCJ<)m+B<`S8$A7cn$X
+SU3!^ke21hptlJ6I'9[E^%Z^?80uVMQGEe^UcLQmct.K)Fp5?W,1jko$%[Z1$FL7O
+#[C%@JoGlHA2m;EiJ!2EQ=_,R=C29gN'W/:?3eDnT*OAFAVr1M,fQ-L(IZJ/Lp;CY
+`44,/ik02in]j8;(rm*H/3f7N*^.MG!smn&I?CgGP0$iS+5uRINA1nsaVbU?jBT0Z
+EaCfL=Z\<GS8FOsITjtKK/@0;URLb.<6=s"/7tF,QSYLXb]q`"k03@[F-],8\]6jH
+%.BU*k(_.W,<t8F!jH^:MU6Z*6Kc#qV)2LecoL8>kY2R^oQF]ig.+hN4ZT?]/sji:
+UH<2G:T1ZrY17if8SZL_XL0+Vf)"-&l+Ll4ZM(l\3r;3Yc#^+ren<Vr_dDbI6a8N*
+aOtnj@I4N%R^Pu:gA=fYm;8W,2X];P]7WW<D5F]4Y2A!'=**f2qmc<:hVFVfG]%BQ
+W&Jn5gq/>`mnMoR\$l=c46q%Xc,mWn(A6TIhdZ&G'smYl#J@WtK^]FB^,S%\gH7]Z
+DN4t?3%k3iI#!UK^+[G_`t%.BDEM:W&5"ValiqZXR,*d8SN3i7k4qB7Z2SdbH.pL*
+Wu%D0SqDO^G=>]K&#AeLO4-+e:;pK^LNK\se2bQMaZW05ohN!I3Tj`4*J:)0/sgIe
+k?@6NPH+=oS(fuRDX'BcY4iF0h)`l&m2`[*GHBKOHadANrJ/2^56okghf&#_a27Pb
+'A\%SGO^+-a7p/mi4Q7Ho(S3bGM`/@]^J&Ur<q!ED\;.q0:qh8K@K`N=6VhKRIbm&
+fD9Dum(@PLpAWgfHOhFj4l=!ET**8a0/;uZ2obPTX4mKTF7VQp](eKWiVbEfofbUk
+q*).HrND^b5(ClS5D/5"0<=n4^ZPDW]C,[%^\>JRmehRPo)CAhrBF*0rVs5%s,Z4>
+^[(k`S,Y_^!'dOc5V)t$]@amR"[Dnh5TC"o4:"2FhS3k/5b#MNa^Da(f"aZ\5=?#H
+Zk,L0&O>[l^>&fUe%@tFaMB\*_(6>7j;,P4(VsW!5"$#KPT2ra"i8su_<_ECr!:.J
+$b[Mu6&ZaH`#Up$Q51n\YRtW$U@,mUlp@1&6E;-D]-p"fO2B##_V&Nfl!hO*AA\^i
+6Q@L@P6XH+1d[up_eS!p3JTt,3C?b)0iU/aX>n,A4$pkL1/'ete3HC&3(+`:6n:/`
+$pR)>77.2I6R5/hA4&_38OL-]6_m%:S4#b-/O\AI7-lWrr%gbM8Ajdf7''<U/4r?)
+9gm3#2"X[7FAp.X5K'ol`C*lu]LBf`7`F.Q`U$\poN&s?=[ck17>t6d4Bt=F>t/(*
+7VlF$HsfAG@7Hbs7N>r.]OaP`CdtLD720K+r+edgD+7327bi#Rb]?9*B1G(,7ne(r
+>\HWDGXm.,7uV.P$u\RfG=NX%8'H'Fm!;22HUk/b8)/Ycr-q7"Jk-l67(dM19S>rA
+LIJS+8=YIUS;'RnNC^^>aNTN09OGlZHc[7ZaXi1g4H7Gc;99[H((<K!"HLTWMb.`A
+8Z[qD]TpTtSB4Hm7BDote=K5'P"H^X8h?3!4I&M)Th5H<8lVV.oT;b!VFg]cb*8dE
+<2rR'X%&&EarIM*r0p=fS4aim8YiZ7oT75^4MkNC$#>ln?lH37\Lth31ShW;gq5Cq
+]bp[\)%=5PN4H07^HubQbS7Y43u(F4CeOk?bZS])Crf:D]Zcijb^"t;N6Fts^<GBJ
+XjkRGXNSis_bC!V9>&_0AC+$beP,>M9l.pG/At8@"dTSIbs]7i]YD_8_Te=oc0Ws)
+gr<(tfM/1$:'BJ!`8jYBj\=gT9mk2[SB=Tcb>*H4cCE0T]['=Ek>'7Q:@."99^Y[2
+kt`;a:Aj<O/F6/+m7oe6:MfStI.L-=mn]JC:0dNh%/<WBq+ltB:[IdNh#C1[!)L9+
+:b;TB*;WJ0"].ni:2L)0I0<A0!Do<g:lPfY]aIRLk"sk2:ospur<H0d#Z2TK:sBPK
+4V:Hn$rJSl;-aW.I2#Oq(f*R5;2l;fXV4R&),\'ed1%0p9d!<h*)<m#dM3hO/HsQJ
+ek\FSctt#Tbnj9;)H(],;QVEHAGX`./(*H-dd8Yb>iF-(0[So,9slb**A,^a,u[eu
+;[#).75rY;+4Hc'e#aeBKb%+i1Xjl:;nXt^XZfUi1t2Ci<#$EQ"X__^.oT_$bm_%H
+W0p;0A:_&Se>hk7]/ip7*Rrgl<9]Inl&aEjAlT.HeK%7]ZNjJ][oHF-eAYKD<E5?e
+;q7F@<97=>9j&<U>#jB`<<Z`0-"'_>h,WAOe^\/0D.5Ja>1Q\TennO?'kUFqACd;a
+<ip%9I9Y:I>h4m@f%j]arF"4d@Fi,/="S;k*GI<@@b*\c<paF!9lF)rE*&TM=06LE
+?#!HcCKK>.=1r`UomKpOITRV?=7('24`jd(H!!de=D`CeI=,-KKNOe!=H.i2'nKK3
+Jlpi]=KR?\rJ4ScM-0/&=Y5P7*K3uUNEKPI=`'4&4cig+O]e6<=acK:]p)[%PuVC^
+=m_SZc'_`ERT^`$=oFjo4e5b,bu]UQg22c#AX(o.S_BX2g9%1)'s(RbXV@%l=9Ye[
+rN4f`UK\bB>)faj4gA3cZ<LV@>(*5NjgS<6Gh[YH>HOr1]sue0ZJ43Dg[2K)7DN,-
+_-:Kf>EtLYe\'Yu`EW#T>W':NSYoP+`*?Tig%EM>IEPdt`8&n=>fF9ZmC6F"a^!*=
+h$)85-.C[MeD-<[(i[4=SOfpI)mFJ=/_/T1<STBAh(h^])%GF>rSJABi"fn_(<,8K
+:#fNBls<PE?:Et^V<?]Xg"idq?=iG.c0R$E@,>Q8hNdP9e_]0mi85R7h_!pH4m62-
+lJ9/I?B+\d?0gBbq-SRH?]FF0SbuisrEm/WhX0dhrV/.&!+/Ibhp)1//b!.2nR,Yn
+?u>LCIIpp,ojAgA?2b4<*Xl@=%:H%<?etonSc`C"#%8P`?g\P84qh>+qdEe0@;ZWb
+/dPmG$"9D4@(mCb^)(5'(h$/W@I>%BrYo7j*+Bs0@P/^1IM?6d'k,rF@W!N%4ssg"
+-t(mU@]gqb^*I0:+(AD5@MUNSQ7udF%cZV&iW_$q4u6[I11O'.j"<9#DD>XM3Fe(-
+@pTaVei70R"_,J5A&^?8h?%*q5%5!dj&SNWejO#F5iCchiuU^#Sj-a45\*ne?k+\t
+[KP[*53.GZjR,KJ`_YZu;.Q7cjXrs_5"4QS8`Y>$A<'PuhE9n#<92=jjc2%VXr?D.
+6"SVNAVNok#$Y[L?KJn%jlSnkp/bQpf)_h.h2,Nj_X?QDlt2_JAucs7]-q:5O64QG
+k1O?Yl!ifNAEO88B,PII/p&djFPV@VkA&gc5'Q.tFlo!9B81bGSn_o@I:p9CB?M$&
+?lJ3gJS3hiBJ++74!a#"J`pEf1M2AT:2Xa*E+kh`BWcJjmXo2uKP94rBYJb*IYVOd
+O_4<MB,6\D2O%mpNG&6NBl8uFmYPY<MJ8Z?Bs*`c%Y&3<Q>,3BC$q@&I[Op\RVEn5
+C+c#j*h@%@Sn_T(C2T\Yrh4(eU2$9pC9F@H/u<=.VJ=tcC@8$8I]7)mWbWZVCG)]&
+5-8TqY%q@ICMp@kr0M1gPj;A]CM(1oG._UF\*Fg>lR'A^2Sa+"UhfD4C];4f%`E0)
+ODE^dCbEbE50.P8a_Y:8CTbNjNm)=2c"sP=BthT'(=6kud;5].D!'2_B#j:&bA'5j
+D.^HJ?A@g\eEkK7Cu3o_mZhY/f5103m=)D/k1snReSX1#m1//n*oq/jj_^$=mUkJG
+QFlR&cgH8@mB5bl^?f^^g$[GLmcNBk^@,s*k\.\DDKb72L@T5ZoOq7V!O6'iA1*a`
+[i#JBQ=ft/0)HDZr"d<N(9[XTqZh'Eq=#$bn+Ql8f)t/R")omrn7t((<rqeolu89s
+n7N)I]+o:g#IA%NE-D_0rs`qj*UqqtE/+oYLC\Ah'6*CSDm'sqcPUTh)/p*%EDIKl
+7hK_O&oej9nLko&?Qa?,)f^?OEK;>aT-SE[+`Y7CER,\Gh]Hk&O7E5uEXs[@+!u"]
+/TO'.E_e?/?S$590QMXlEfV\jT)8+SrUXAMo,f]-h<jfX3:f'Zo<0_:LG&2E0D"'[
+F%8%X=$TsX1@qD.o=%).a#imB7<C1JoKPif:IK;38T\l/F;Ht/f1'l.8p&r]FIu?N
+Y=s$#9m%OQFY?R5mn7bP<HO:$F[&oKs&aCS6?Q($F8&aY^KG]_>'5=!F"^I7cX1X`
+13Oa'p&A9?5@&F#??QikG#)Od='##rB(dl[p4jW2Y@)O'B6MU3G40/=heMhVEHU/Z
+G$f<6V^h?eFRsEgG)pE_GAMJQEVEOOG5l@KGC,VdHM7)YpFgu>#CH3+I/!AVp]l1i
+-OB0\A+,6RDgHnXHId>!2#*OUpo6o1\Ij(s"*hnRGhAGZk`U2cO80'8Gor4l[uhN2
+Nd4EbG__T9T9K)3R!G$]q4F"X2k'Q?Q2(ZUq8\>;kE:,]N;9rRH-`/ZGG'6Y'DaYa
+H7,E]Vl2BNUA@BLqKJn75Ge.aWqrWq0ped6B<HQIN-cY4HI&Md5HK1GWV\??qbOYI
+J$OE^Z[6&iH`t#-&$L60Z$W+PHb[=Bca8'!TmQ7FHlo0^&%-d\\4(nJHrmHIf8k:A
+_u+`"Hl'd!\'03>bC"fCr1D5]#L7^0d!Re#Hq2S3cd[@"c[:e=I;dU5:Y'p.eU7t]
+I.+cIJ'._NgjPgLI370k0Aq86hL3/\IF#-H(YsNfhu3<*r\r^5?fui]k^J$@rh&M)
+LXlBbm=)8$Ic&lYs5<lpmXDq>IdcNMcgZEKnpaI*Ih1N<?hJn%oR5?bJ$8ZtDtngS
+qgM'*s1fM.!8([3)MeSB@CUjA%2lsSOC>BG5\u0BTWiZ7/fOnN`+!^gj?bXFLV_tI
+8DKLC$Bdnio%=__;_F-TjtWgA6=*TX7OD'%1tI4.S4I<KMB%Xn8"S*WZMIifUJRc4
+kgAZa?BmmX<iXTIh);`DY0*hh$5IlFBWTmfo1NnCcZ$-nk>n'pY3Afoh<m(FIH!:I
+]2L1=9@Uu]#K0nf@r-#R"VAc*EVWf3?OJC/@V=5Z'L$Ikd(sDu)-0g9EhR7=PPoZR
+/$[03/_YVJgKD&&m]ftZbi<CDhJ;mjIKoP-]B&Lm]-qRG<QOCnH25b#:RTbpFnhMu
+pHWTDnFer6mlu`PbMW/>^<]kbh;@sM]tQ^tj1"mWIm,LNk17:"*!H=,cSQ./5O[qE
+ij"Opklej7//[Y=:P9;P]?m>q$plYt!s_!YgdMB60H;YU5k+\JrP_TK_%/nq*((R]
+OgJm"_Jq,M#,dU5AKFAs`)dhpd:<\'8.iM$*5_8WT-m(t9Nq>9EHJ5b_m4s!.n_TZ
+P:B6]`5aN)ZIES4aAV*6,XSg_h_S"`7#rQ_Z>A&88Q(N=4AU"akr[4Tr7a;(F7dF3
+bS4%4/]q$Df14'W>oc,UFA48P;KQa(9i7-3fhKs1Ps7gfe-.9rdhPj@9\"3d9i"d>
+D-8l"D>\lVes1p]=3sr93F5Pth1%ss[NuGi<n4;SACqV;:LdLM?%lim[1,c=g6O<Z
+=P),HV/''hXe+"KWVC+IW<&4SG!C1lqfk5)PgaqF2kqmM-s+98I9h&5/UfO$%KUe3
+YJ(-shq1s?H/Yts&r,@iQ61J5\)&cf^t>#kLuYul2iq?+'e>;SfetX@A2lJKKOm-?
+>DHfML0p#(Gd_OLB.0TtPN8(5IsgH=mY?ATR3%EPkda]5VJ04/JZ*6cQAMVTflhS;
+C-'@sY%db+\!_$D(;I.k3Ms-MCjSY'S8Ggfhi2M7eu,`i]/K,dCqJ9E[r6Weqm^SB
+(B_3eHoDGEC:gqk]Q(RGo>#B/-RZiQ]N25VF$,4"a`G+m5Ke.2`jO-6I5agGFT#9>
+d<0k]>LI@nf43M(4h!*"FFDbJfk0#PHerqZrt"!u)c)=Fq)lB<RciD6LZeFRO.GS3
+*g^TqFWT.;mWKZGNMZOo(WYY3IlE#PHChmR\br$p\+k<bQbWBE5)7>JF.Z8$q"X<g
+ofnesnR$Vi>iaf]/tsg(ccce^E&dj5"2tD,9GBfI:s-U`Ka&>[(5%;"%2=U_!oW\[
+KW#e#_FRN1i/B3bYb[#j3+E>hX>GP`g((pn9b*k%4GC$9(W2%p&>;tqL-XH07#6%!
+U0J@gVdWiKG`ri9,Vt5fegnX_ZOUGT4c?QD0>n]X%Mqf+L]HKQ`P>pm%4!,CZ(a)X
+Lsm<!]PNQr@Nq$"bX<RIF<Ui'4cjg8++]5,"qf]Xa,k7.U^/j`0Plo)LpTI!_5<>m
+:.!"RndXX_Gm;]#.i3IM,%V&cJMN6V&U?A\,tsORE(CqiWCdXHI$'YU.QY^t4CKK\
+NfN\Q>Y"Tm04aFGM%[6SaE\^Y+I'6m5i,#P8Y$ti]Y'GK5":f.2(Bp=\sUq&$;H@?
+3$kqURaTJjbS\qNA5qfZ'=(MgGfqJ3@4IhdWcA^)]fN#QKU+D(78LI&5%LJkOtk6N
+)G(l.kN(Wie'sE(E]ZPm4VAqQ;JODNO:EZqWe0e2Nf[Xe2Mih@QDO"u;L0uO!OX)4
+<3h9Tase=.2&i--c9oi+D`WH_#bEk&H;_m;9BPUASi#jB;`]J*aS\nu2(kIp)&4p&
+ocK+?R\<\pq,$8@S#'+oSP8lO*GS"hP1;Tn8BF"C-fo*4oWjf`fo7=/Pj/Jg;I`^@
+.2lfp;O2Ir:"/BQ<$8"KQrA$ufSZ)+X0mJL2@='Kl?P`CKe\I)5/U6$[08&A(p29X
+bgT._>:b`Z[$6m&fudH4B>nhrEB]=aBO+p+I?]mPigs)<"%K.6YFeklO]Y7\1p+^#
+Z52;0f;T-`/lYr6Q"J$>X.rh"jGL6@_U.+b94ha?NO7cpl.c(HY$ake2l.YqhHK3U
+C*X1tjA7WE:h`KpXn04b+p:eC,CQAa\A+1Bh%8?@:J(NbV54P%:7MbFn21$YGTr=$
+$m&;"rNs<pWki+JrI1u(WkPE9"(D(VKdX;4\9H+/iHeR^,ut@!;ZdJ<BiU*F`[JiO
+G*-8!,E<*@._W>"(ZR&JNK<K@aHnP'*\7OiE#nhO\MB?+)I#dLQ4:ltIjEWNXcKd=
+<6I6W-fg[)O!]Tj.[`4HjQ$c8Z"8^3q0*k@be]3Xc8:QkD]@ilPF/\I,/Mou4V@&B
+Q1Oqfb4pl<j9e&=F!a_c3]Ad)/-hG\%Y;Z(-Rmn'hk+F3PgJ+L1?7`AW&/W@bkQ63
+AupoeF+0IrqI_a#XYGA!FpH>q>9hJmDk8BnS=fUt[U<l8OgUHVd!>pbCAcJZFG?O>
+nuGZMHMsp!#'HoV[kHr>Z`#_SZckIg8T"EIZfr'+^tPb[k0:09pKj?5Rb'W!/YfJV
+cL]ZA(1CksLPb^W#MkmDAEOEFUGXB1ft"k3i&u?f2fATCS,7DHc*tB.NsF=EO"tT^
+fphcf,N675JQ],T[5Ir%hD,moEGe@]o$5''*02]A*8ePSpDlHn08"4K\\`BIf$`>L
+Id`8]Qaqk1iqnLEF.IBsN&MmDRbNni:-l"-AmFEnLKs05;lD_m=PmBdOEKD%brF#P
+f/k@=C(:?l-!(K>)u$@LY)A#r"p=6.lLJ:WQ,WTKjH!Q8/,(*7h"18(igPe-B?\KL
+H$/'->mIs5S;aUm=Z@U''aXVadRA(M2`:?Ic?H"%%;eBtoU'lqqJmadrDqJ@HE`/#
+gp-2;s.RnJa*pVZM=%[jXeS).O_$1nAUX)JpVh((Ht)^93+obH5;KhI.F[X[^V6=h
+b$]S]A+..87e]f]mc/eJB!4]XqB(ITr]d-+I]''n+$g215?$fr0<"hUZ_%0"Z\j5s
+me6+`pTJc9ciX3mR+-'`pku*MX\A_/;"d\Hp(.5b:\t03-NJ!iqTp.on-o2/9)T5s
+"%`k&mRmWL]_W""rNId2&5*,ddfhE7!X&/q:WE!F0)+h-rsmcd0&H_+B*+-eqX8J!
+b9[>]D#l>5!jHSIb1QKnG54L-s%iRD0REu,V[,r)#B0>#0PLZ/3rBPbP;%1eO3Iii
+_$+eW%+(%8O;Rpliq-%V$ucRWY]BLmZOG3^p9,mc0@^2EM$ib6!`0C5cpF":P6DFT
+"L)A<E(^]Qf)j=H#r$tkcts08HOLCh#1,jQ:%JMWG6P61!tX&qnC[^P0+CJ\%Osm]
+l$WjgE;L48'@=u<&(^01q%V3^pe]iSEA%mm*;OPH$W*`,Y^6te6MsZ2(@\jP0F\[l
+`=1.@&^\i@De0Z&7iDKK#&rN=E9@l(>ll[U(,/`(E;LV/&Jl%g&2@(EZ*'-"'+WAh
+(pRcl;+D$KUBrYMSl*l/al*d\G8q/o*K`Q+Z/$2C%11GT!E%)?n[fh1TcPrm+Ku:c
+cYF)2BbrK(pWCe^dFeid!>lDW+u'rXE<?trK#nUi*q9OYO1?.V!@2Yl,VXQW;2l9O
+9-^`<)b,)DO]3^s1nfL6g7j]X&Qg6\0.;lji,:k(TPXW`MZPZ$q=9jG18+S$SK`Y1
+!)g'Onu3uLV$Rd:-]]i&1;,$?ZnKkCn++QqZHX!P\?<-mSMJudo!nmdfa!](1:$-s
+EHNj`D]b/8-`mD$%0\G+pAa^E-rShNEtBc5kd0j8.['<U/Enmpq(9jh/rO^$aal&X
+-IWVe1X08ZM^:*@d0W_Ib#9T;;^jQP*t].Q0lilcP1;/UB.hXAn?Z1.Er.LD4Y\`D
+_D?ZLo5sno#;sr=%s&+<;EZr0QQ:-7*OC#J0afheH6]aN.C3_EPAN._[5nt?e$HeL
+dn_bUa#_Fc4EHQ7o4^*;-SEj-.W`-a0onEF.hE?p517>*df28TM$2:A4]=d01MJrQ
+V)bmR3V32)0Ae?[WBmlEolJ/0;e7F8%kq_l40n`?N)!G0ks?#81t4`Udec9cUG5]@
+4*2u?1HRhM_(N&[5nh@!e71W*$U9i10P]8r'?*6KcUDi'6IZrBZki5=9h//#0%7'1
+;uK-=Vap=h5&*MRF-0##)`9I7/sMCDoG'C9%7V%Q8!LhYZc>EI.6gcN7FZ*+e&J;,
+4%HYN5d\^,PF5#5b=?Ya6r^POF8\[,lUd>Q4r!/3e!3BZV_dtLkHsb?FS.pUND$WC
+0(\1$:jkTnfgQS!3co:6o(u?^762/$0U4.Y[,k-RThpqW3Y[EHFH&D*+]#:I6M1@Q
+1VHJ(@mY;@Usl#;olE*W7krOm;=uRi;e]&c91dX.;q1h:Pqu>RHW.3@5Li%p'Y@>/
+"]X#@<>;u@<I7T.GqaAb<q&%8YbrmafJ&K?>jCW'Ep!O?iZXt55[k<!2;q,9.pe2i
+?LKQqp%'U)j[urZ4VEG?U2aOlWF(7d?\s>@M:5ggDdde_???!Mcm)mR:L^U)@\YG_
+ie:jAG@C1Jn^ZN+0E5Ih3CjoYA.m'n[S:-&.]o!e@00E^Ft0s:'4mHNA9+_];Qj\u
++_R%%?^>><'$"Ap)eX6DBXA4\el*1S;.=VtC"A>J2P2pO1M=m`B(EQI[+B#WTk]dL
+C/mW82B?*^UM2VrBCrZKo:on5Y8%hZ>Lp]*<U4HZ'fOXfB%@9$2.:;Za^qnlDALW-
+2SS2eoVE<6D:!Q:pC1IFmr*B_DRSM6;hJkp-C%Ud@TLBXnB#KiZOHQtAG7.Op/c%=
+"`=!,EAluUf%4fjTl5->EV=0fpJ##'gMr=m=E_/^P@&;GDfJi!D)QBY2Q(RS.rEkJ
+E0i.l(;")*"`-+fFm8XB'sD\e]6Y8(BQI<k<o[mQ<H"1eFgm'E[RkX$'5uE&DH?pb
+pVUkBI:1Yo4kCKeGL(!4+*k?U0:"PAf5GpN[smj-H2#R)f;3WaBmuBVD0OlUpU+d\
+Bm\(EGLtMGQ`G7r"`(SYG^$]32q<DEfXnX,F4^qPGV*cVGCqjS/U)&NQSF&8QZ/<h
+5PC:epW$oK.;Ut4HIig]=4)4o3Gj!_K,1M4(hlfiqed7&ebE-m2c549iIodEGIQag
+GC=q--Y^P@A%*,(f1gb))gM-\'%_PQG!h#9_1\1oN;.aJfR8*k[rjZkMcW&uplfO$
+3$PcVJc[EaoKXS0pKt>W@FamR\F2uhEGtuAOOaAn0+3mMW$`Gul+%s&fd)mZ,bK?1
+-s7gd3AHZ'E$;bDP;s"kR0f!Y8!E[&1)HLH36@AP8VXc[PkV/C)-8s=+#Wj;H^Si?
+)/q*O,hdN_[i%JqYc!e46'fs&Qi_c)\OART6^4\DQ.OcZ1S^+9HM9FZRX$DAfp@oU
+BjDUEL"TskR;j=:E2Rt=RE7me3R`ep]WSfGR9?_Ufqp6eH(I$iS5o6LoHT`I^R/0%
+PBl6hq71Wno:>]mg0**q0X77[5G6]q8/_f*\g;rS-#smZQ[07%\a?#2D4t+YQ!#B=
+qC.U("Z`#'TINg6RA/Q+o:^H!Tt,dW3ROV5&"n5CTA":]q>$kTXe-KEU"S7r).ei^
+%A^OsRsK4Q'A]L2?(AJ`WVO/s)>e5R8Y5<(Sf2C69^/FcLR`Z.Vn0(*3b,6fH)@"]
+Wg]!L'=47`\#]@6X?&G>\q-\9OfLOjRX3K6qTkhgh0>ACTiul73e=M=4e]HRJ/X-C
+])<'6.BpC#QFZ7a3lS7JS"85^XdT3^g?Yqbj.b7=W>V>+RU*/0/"V&/SXCk')]Q23
+3O0S'ZWdaAR\R"^#FsMk>h;!9g9n=M+0XCNUg#4L=u3NR+0(3.[Q=5d]2Pn;?]R8F
+\65`9)iM)W\[#D<\(d=UHW.?,J$Bm+\r#'@4"Ztk5IVS1UjH1R],A4A)n"D5T3>C-
+RqoOgV6%;l&c6dU)I9]gf=8,C]Qe^_F`Jc:a)p;Y^tRteH$9:PP`a]r_<Oi%1kEMa
+YJReb_X1^J3%)UXDo4Uh_eF\>ijZhqq8?`l`1ht'l?C-\fu%Si_n8uU4CT`Z2oLbu
+_s,Xhr+0755K$N`_eL(,C1G1EGm\q5O'H><)VN4LqoBWcaZOpO*1a[rWG*>h`>k3D
+r0tPcO3:YCatn7[ic2q"CWZ<(aP-[5][L\%\]DG*bOX-*]J[PGGKej=Vu4TZ46t&C
+'@%9Ic$]N>*8f(Wlbi%.c.pXPI-5jHIEag*cJ8lJr%6#r.71]]S%O[)qur>@):Ej:
+`I+u3I5]-Z$cCdNd!R:f4Wu]\p!:8cd9QLmBmn?+f?cZTc&)2D)@P,E:X:$te_M+`
+r2\CXWQQ;td+qRESM-qT)9%[^fK@@'I2gYK6eNGbF.ING]sU,][FLcneidHnrFO&u
+7Ee\IgRWK;I1b"X5HK:2h;-&U4Sq0&O4PCD%/m`W?!#_X!Sfe3hu+YS]+`55Ok8AC
+c98eiIJ;M4e^aVR/A-V[S;Gr?dG[7=dbT3'h;)GOUWS!&iLI+%?8L>b'BD<CbT5s-
+)roKJ!Shq3g>*.k(s1Ssc/fr,gYP`_[KkN8=+MCVaB&Dq*`p7N0BV)SDOl.%r]&V\
+4jQ7Ve\4Q(4LaD.O5TrdikAd]h)W_#8]28F=$@#Kr<qX,V`C>ikl$M(SfcAX?oL7=
+igp&$Sk7g&fBV5Ikl.(=I>-)JF=]EK,MW\ibR"$Z#d.M<_pZk:aULLb)'Y[meit:t
+s!;\-,jkU[.:4Kp+##$K1a]scVZ/33+"XPO/<lbXS)6s3imkjHYOph6U#/H7Ib4.I
+Ab)Hc.d>:MarU-sB.?,G^nS%*5@+$;$htfJp4BHNhf&,$@J8SdR(m5-0n8uVBD8,X
+qS,JpXnhT2[h=0Nq]B8<Ipqq5`V?p!qd6735I:,l][8qqr4ff=+5AR-RJ]1FrnigM
+s7J]Cn,)$N+9LN#J7:EfRmEf(\AACP)[sXha@n3*"W@Xi&?'+L$P8.aU9M/G:,`ZD
+8L,Np*.g..*5lD#_7Zd('U_DMo4T9'%l&i3V_V@&hH)aubU&A7][hcIUf!f7>&9dn
+0cS%[O\rLFI9*(CAj\%r#]F(QNU0U^%:ZqH[7b+tg8.-&Ej=2seQR+0G<NW9/GC']
+hRS9T<!O4bCqd_X`C$iZ$_93AHHF5t'e7d@AV[/+n!._]LC6SCB!*!I*hlB/Xm7D3
+)NHadB=;-R[S+o7dL@YYpNB:!%rY9qm'Lfgju[:([d\?aXZn`FL=foq>aT[^AW4(c
+CKVRI].9'/ApM&&(;aA1lhDf5.b@^pd,fO9SunR<6W`tF$/=g;\8=&*X$DRfMPdoL
+CUDg)&'J5\3QrH'eA&5/Ym`dUinEif%?rEp[SJEnrk/j&!qnG_;eZ[lnIc3*.Bo<7
+'"Te+,6#DNe,Z[5n3TJE#2tK9YrT$truF2l>4ifF;2B',V([2Nk/47L5.WW"N,9oK
+d6fK96dltZ+$+@W,qlQf>Ji@r;;te9aDqW!+ipkRNjd%ZKH1CmDb=EpajYS4p.B/f
+Wt!5=FL="s1^lrBWm_@#7Eh"/bpZE[<?dSOaD,Ip,H,?t(sU1):A`Pa>)QB8eR\&K
+,VUNO+4VeKn;5`>7:qk3Q*dAp7!7:3@DVLYnRKo<j!.sGQ/`B]1q&C1/6ON0QYKM9
+/QZi#QMlqP;RQqqC=a6G@\)4I,+iK#G(l3'=GTt/o%^]s\U):4$iP@Ff?IlVf=+au
+Ib.ZT_e%I2SX4D"fDV+_>W@r-G[NI9Nu-b7c6I,W1=bcN+LZFgNaN]a*gp9$26i2$
+O_.@Vj&Y"gLu'RrGC3f#IT)BDGs3^K\@E@^ZK"rdKoKLYF:X)gpLV%2hYD#@SSG,6
+9+0XgMKbNNq@#GOl*"tLYN2'oJ#[6eC.4b.g?K'5mCSB;[d-NaJ#h>Y*_!QtS&N?I
+m+EG@Ja#-0&&QXr%N*^aqOZ0-Dg/)IMs_I\$b1rDqR)F;g#iI2AJh:DS`Q>Pc^8cY
+cAg4a#^7`6:0a+dg?)Qd6%8N0-[2EWH@C.ao\CjHiWe5*7l4mBK@b\@q49aAoDPRS
+g[(D:.rkFa<eIs[]5OCpmp>-"dc^QFM19!+LO$g'4oUG\Cn,\?aEo!]F8XD<^KKa7
+js]CnbCk2fh7l-sN9VJ4<+7M0"u"THjk-?MGjf4sR0WFcS]fQ-c5f2:f+e.S$P[i&
+WXQOr1@j0Ec$D'1!&bXj[\#r8K$PnM6$Jjagr'/7cq0nH850,Odps`kND[Eq'LX(k
+:Phj=KdnlbWKi(IK*4_$&MRbDPnLGQnR]YWolCpYjBG^UM9!Si>8NV/?u;%)e](*0
+)kg5K=@D:3(jP+UA%>$gMdAFjW9G@t*-<fR#!PM?0d5Rn%ul6&\];5<<MU9dN=Bbp
+`q_,)?Sn*Fn^,@u8BfHA<)\tJ)GIO%m1uNZ7$K8a8=&L8Ybc`$P@^IV5H/9GA"*pm
+.OI]qBd#$;o:D1_!a`^"F"uN&[ZPC/@`d:@1F.(RNsiC-9=ZW2Ur8dhNm_I])*]_7
+'X*[<_I&s,jDO"A9TDoo:J0;O/8"6aRo;XY:FUEGB$A)UZ^)TQabKlXN;dK(ep5KM
+5rI/o$'fR3FO8^!0H/0]5*=99:+?iF-nPjlV\VWoH7m(6"VI;fNc7c$*3g\E[A/r:
+ONFIN-Rc(DO#'[Hcl&`A-\V>n'@N2e.MkPtCn-X[dVDIdG`8PS03Jo+Dop.c4f9;&
+QW5dg9rUi9Be'OUl1-l5R[ZqueP)u3>,]n1I4FFQ6_:[D\P2i+<+n?VT+ibfd!F@e
+l*S4-Fe5G]H/Ns^r.CqIH/2(rXZ@b.>*i0u2b^422_5DgZ5&P8=6Znj.$\M>'>d":
+H0\_:SPQ:$#%k:MlVVK[=Kf)0^Y2;N?"lI+E-5'@c?cN_/8WY5bVn0LlX_Fp[/%,\
+Ar)_p=)-d_Surdqb#M)`l0`qqX9Z2o=3HFNlU.qgF4S0)X$no41`Wb77,GjrbXCH)
+6mj6d<"V4J.gaEoSW%/2?E-^4Cjl);pZ]*g3GX-uq\-`i<rkP/ptfqZdD5<F-=F]t
+[I@sC_)!#;cs.o&n<rCU3'Lsg>W[Q)?5%4$2R[()98SUf'0_dWh;TD-LDatC`H]\^
+i*7jo.`kbMR#:OrVO<:5Si"@2gC)uA"-'4m3)B=JU>jCT5Om\kauH"!jW#_50hasS
+)/CV\X/1V.##`C-<5[^SX,U`:0$F#"i+1&o)06R2Wd/q50Pki^0fC\D3Se$)33.c)
+5%Ca`_^oHEkuk?1$Gs>X.VJ,Q95p-6cktppb`%UK0p[Z5g1Nri]&0FXX*2V=<]]2f
+&V75_M8L3k,\_ZYT(N7geln+Whjn1,11l[!=he5))nDrB/re+Z1EC8T*N63VPFu(5
+$g^lUL@kaFOZNq,D*1IE1k*BsGdd`irACtU")-EApu:ZlrMjdb3o*l\7cZZ*Y4i^j
+gq'8+kO"tBp-,h+G`OB<I']u"m[2AV"&8+:_l'kZaL^.[IV,._U%c8Uid!>-mQFpg
+1iD^,<\IQmm.7U5k"spFH]m]ce[6id\_Gm9D=>/4ZRO37i#H*ME3+/XEpk+/RqJ'F
+mNJR?DSbKU$]=8AD7R*I"4%s:NlCu^Xm5&pb8`<XkZu$?3DULL4V';IIUTPQ_HPto
+O!8UmV:mi27E"!UC[+*O$F5Fjkl%EfA^+Mkm09uSq,_b4,R;D`r(4uJ.edkV:SjOn
+LVm:"/,3gn%2j)Ia^u4.d5#M!2E-r0IVWKO$)?[RiD9);CXF&-6tC]XF7eQ1ebW%m
+j?-eCR$Y;9ErS.O4dVZ17dnt+D11mO#'0KV=3kX]>OXBI\_V`k*W1)Kn_]t<p)!Jc
+-i[E5I(tsA?LL=2WO)-=5KEF<h!P&HBD8-]`S@)lm!0\^_LGXgr7Zr"<mSna56(%7
+T(gi$MIjNflb-6t5!mU[45VdYqnPaj5)WZ0UZEt(n3/Z'4e(k)/-8$DqO=h]5Pn#:
+dt#/*pHZq04q%LWX8tTQ$,<h85Js]hF:p'&#baX$^O-\[Z[tBQq@eMm,pVS<A&,m<
+kHjLO^70A]]CEZ=X?fKt_IJkE'E5f$j?L:&_#,(`1]sHl-RY]APb]@d6kqq+\\egk
+^FUb/j7bkC0L2]P_9=OI1@da/0<2Yf6_"BBS+RHU-pmhN6KBF[<'J(Oog4S^_0e"%
+\SJl05!q.c6;[6jHk\gs.]/^Z7%;N=C`'fPs$<_,_t4p5C\b`p3'm0t_-B#\oB8UW
+,9n`W`3_eH>X--e:;dhl72/B[j8-G//&Y[(7*JfQKMSuA:rKG!6Q@OD'MQFiU.-*r
+7!p:LoMH)L&OC4j76@G:9Hci/5f=XF5m1ggr#.eA=eSeX`["JN@jsPT7'rb%`U%KY
+S8YB*qo"G$`H5TX/)3<NAAJC67JqDJ>N/+_(<2Ria2B+;UcV"E5"!cU7hfl3Gi&ds
+J=2h4$-8Ao;r^El$Tr[*88*\XWmF<>lU_e-aR#&+4H_soM+L*r8MlUP9$#+rMTK+e
+`FPE"/=ABFS;]Rt'BGNPjH`B=QcX'8ML;%R/>A!FUPZ(Jah3m0r1M0MVTORc8XueQ
+Pc2`PSB:Dt9$E[FS=RejY=\qe9"_9!"Js7_SP)Y_93eXC/?m9-Z-*ik94Y0I1q1UI
+WloLtb2g:[`4sGo]ZRUkb>c5K`4F/4^.^r.9Ou"5['WM+_ok0QbETrh%(/_R`lt7%
+b]LhJjNYjFb02]X9_?HO'[Fr+a39drbuE$67*s0-e]bt?c'6i)[+!:<f$/l9RiKLD
+*4F,9\kS.Bc(*6WgtbX<g.X'Uc:$[:]][QSb>'>Ic8=-JPgW<+j3H0?c?/?sK^[4)
+k0E&E:B^%.bim@Eo?FB/cQqSt7.AN%n]um]c=FQ5FS=%Vq9NUHcc#h/eGISqaNe&J
+btR]Q38Mq$A]kMQ:eW]=D$ME3Qr&^cd%'9[V$g&s$o\$Ycts08h$QH4[8@=M:sAQ.
+oaOb%&(*fZd2`tLFVN56p/.(Z;2#e4Kbr.U(t#`/dH):oeJlWT&e"p#:uqr1'cbXj
+*RY*4dUaNK<?T[H-IRSsdZl3.[1:UW/CJYmd\SINq+um7U(NMcLmT,>rA1=q1sfMc
+d1D"1CiIjO,L_2!dt%9nTVBo>VpiGMe's:S76/j$2,k76e)`Ab$d-rk6e"gu;e8Fq
+fU:6;37NpRe7D8%F\C5<78oIE<%UF8F\5WP:K6^X<&IEN*Dofg:V9+p<=Mr.-!"#O
+44TTZeYPL\KiusF>1M/-eP0/rj[I_m>h0Wqeg4YPeO`]AACJe7e*Ubu%9M+<BN1Ns
+eTGV-I8e^VA5pfhf&^H]fs0(EC=a2:<jcAeh,IHED-$%Gf4B*UqaOWr>?7;>=++[]
+om>;-HI_t.<m>hij`OZ/J(Hi7eh)F)-%4E7I+Pc==2fpGeV2WjK\//6eieoBV23c(
+LY-0Pf[Z#7V2<j4OP%O3fThEK"d@USPh@@Dfi=3fom^+uF'1qufqk"fAXM/YSCr%S
+fCb9Zop+57Rb?enfu9B5-)90OES$bT=m^!-rMS?YW7i8g="U9""fC!*XP-CNg:_sh
+SYoO8LKb4b>6V-526L.P79>bU>?._.IBhNiYul^[>4&h(V6X<B\_-#S>:mPA27hOb
+\D'`me%IFDLr@ac4or96ggY*TFTpQS:gB8Wgn=LKT\\D-Vqf(^gsDSHi0rHo0jJQ?
+h$)3]IF;Cgb2!V_>rC3h/_%Ghf*a1_?!Z1>NSDs:em5-,>ufZcp"`oub2*lWhBgJ(
+2:12Ke(p;Agn!T?7G6MQkh]=kh?Dlp[Gp&^j5/>IhW<kUFl(tdnD=E,h\G_>-/dYQ
+lJFJkhdu-2FmS">mFR?dhgP-([HLqFbMUjphrW2Ap%mR*qqr4eh];jV4p0\[!T0IP
+hX1,HFp?j+rSTR?i'n(3<Wq="$fKS7i2."B[L_<9%H&QFi+<DV-4o+ss5<Sci<C(V
+()5^s(ZABpiAM>,L(iOS(ua$`iKbD@`Z*j%*T@8HiYETojr`S@,i;o6ias1i-6qN)
+-/I\gi`7F8p+,,l/E2sIijL=FL+)'Sl/,MpidNUi"tnnY+QHKHj(:"*Ft)5ZZ/ZlT
+j+]DN/iD\/2WN@Ij5r>XVE\R^1h/-hA0rm=2D/N01Z;q1j!Er#*]dbJ5@_DtjCV"p
+#"mit7cUXCjAn?Qp.j\/1M$J^A'O7C3227X`<pi02Z?aSc<&A!=OdUYe=Kj)VHSu9
+>NKHu;Ee?C/mX=Z?\tpnLn8&;2IC%`=CtLVjuA',/na<Y>%Wu:AoJ^OL25qK>\;Pn
+4K`L4[Vt<j@:p?dB(fcu2J)&@B'1LSk>l<[G&$2PD!-OikGE.YQ?26/FQ_4tkI,Bn
+p2]?YGN]fekQZ4o-@4lC_<7DDBE!YL%7k+AK4nkQkK\tJhM^RbLZgp\kT5cJ/rf(l
+>A1I-kf/eLerT#iPiocGk]W9UL6LipR-=gAkiS;t<h&>cSEY3fl%WJX-D0N\T]nq;
+l*d;MQD<]AU?NGhl,KUbeu.cpW9O"`C'L^'(9?^IWTlCCl:.rA<itY!YNg;9l@uV0
+QF#kR@VW?ZlGg9tf!O`)\*E[tlNXlb(:rfY]^%JhlUJVS<g[[R_!C.!lh83^#+KEE
+`9:NHCM(KMQH/=2aR!fRCn>ogVRUF@aD>2#D!&ZM(<(+p_JJqjm2""72UCTQOR0uu
+Cpo2fB"Mm1a_`BXm7,Ok<grEYghL0JD%>Cf%c6RogMPN^D5Q7Y5&]OJN.Jdgj]J%(
+bAZg#D!mPlm\N`t[7Tf%qJO+)ma.m"k#Bbmn-Q8dDLUg<(A$scoXs&NLn=2+G4k:;
+pq0)iLfX9=[e]@Jr9jR_mk`,T\/Xn?!:NDWn0[Gi2+VZk!H;*=mtUu5<sRW[r,@\l
+E2NJND[Gnt#]SAgE5r"K[f(1ML%&FPDU/s`mh>.#%Id.-mjAn?G7O-Ys)@-.nYZcb
+QPa^T(%F4'nOFYj<uCJ:&FpV9EQ8LXf-'WS)Y-rKng>=GB-Hi$,4]ptn`M1g[jCUc
+-M!KNo%,;\pF5[r.e36`o-Z*\2_FV+0(VRdo4KcK=#'7N1\6qio63(`V`+.e2tOL<
+nTQ)HpG2?l47ib<oHu]l(I%Dn4S1R$oN+3J7jIV\8Fu"9oS3tJVb6So8+bD!oQO(&
+O%/dI&b,N-F8o$X:Jl669Csl9oZpS2?V,Bq8p-InFY?#Pk>ZSZ;"`F7om^1gB2nQM
+#')Y+FiRR,%qG:q<H]HXFt[3F-YRZN?h?QmG'@J?[q0_!(\YUXp"sA&(M*7>=SD2i
+p?-,_DfT`EjTnBs&h`?k@2]GYk"pPQZ<qpd2g_FZI(.^UMpHg3YC?5-VYCC@mU(O&
+7tC@nH?_)fGZt5ns+GW))>J`CpeQX?[u5L'KD;X,Gc-J>?]TH`L\TbfpXbRR(OLEl
+N;4!Lq&r'"DhiU6R/$uPGjh*s+.;p`SC<ObH+0@=pRCuFN-Y/kq8]6+(OUNVV#!$H
+qF*>gLSO[CTD05%pfFEif;n`1T_b"Vq?O%r07J4KVu%:7qId)12mW:([//s_qe*84
+=+Ych\GM&;qj4nkViH,5]_faRHM=T=Vn`);[ee%\qU_qH8&G/t`;BkZr"lj>GI@>r
+a8D:Fr&;Fg#J'bfbl"B`r3s]Da1M9$d/<(Sr:e>32p2&"e,<@tr+-IcJ$OIjepWn:
+I;d/S\'TKZd='WpIHT*X-bfP_g3p`prQjF$-dqscjSftWr^Yjp=6KQqkl,edr\qcD
+n*9negj[l7ro`GC\#=]Sms^nuI?3js+7/gl]mih[rl=DTL\?*[om>lrrg3EX^\!#Z
+l@7FVs'Pa+R",YN!o^).@Q#/2%=lir$4-nU%E&J'A3()'KYl]P34q^.'ok[,1'i7K
+,nu?\@1]C`G#']P9-l@Wr6AdjMaSl_BZ/&7-CW9BF,:>-;*pDk,Lh#k%Uhi)e#?9W
+7/EBPVUB-XM,e;o6*/V4;#3/o`s%tAAQ;B&G-u1X:i6s$9s3S`T3UW#>LgIT8&!hu
+pWLP,Bn4(Z0_hW]18,/miN>.uFpf+J`9&i8N/fsnR`:T`f$)E\#GAYAmeL+R5>A60
+AMLcTrkE*Sf4T8q9nr+<\%Q]>)L]RtMo+!4[ToCfs-^^dEOm.(QP4Mdl<glGI\(no
+POE(q)c$Cq9AT/`]\D;`LKh1SFhI`-B;:CHpjDsgY92ZOr4]A0LAenA,R47^0Jf=%
+6#]c'#<r\d*s=fh>Rq3.YbVX96LY+>#sp8'6L;JW"A9=pnKZp)7<(_"'fI^e@e@Y0
+PEd(MZ(u"3+`.p3*CoY\G6GgFbV9FFnJlNF8<QYF-,Ga44X3R>PZ]0HZE0<67ktd2
+-Hf;7\L's)]Y?5@d_n'l7^F)0/^)T/_)"hb6t%mrEt$e_b`g985/ZtcnNbCkXSkF]
+e0L^n9N1$07a?*E!@gn;I.p1Y[%+6i;U\V\2c5gO'-B#g3eA7!ahVHH<GuGPrmgFJ
+@bTCJeRkg^WV(/%f/6Q1dar7d7Z,hV-%TFRejF@bTsa9Hc.UZbQ!%:.24,@e2T;_$
+>BSK.?Wn4._dqPG?,(%'(DYD>?$A0LC0gP@cY6]Djm-hkpBB;r?[%e,F>_XoYCU#'
+ec0r&\$crt@<^9)F^b#V,BmS+"_id%pm*^n@X$rrIq#oW5D<WmAkRnhGkP'tAGEQP
+N+Me8@ub,G->SfWq*o"^B6e*1QWKT0K:-CuVL+eGl"*G;kZ/IUVeFd:H)YH1:3ERN
+)THctBGuW'YA1Z"YHVe(-F^6q\@0SgD#6-2[VbgU_maJEQIi`c]8#X(C-/<SY&F2-
+"2AcBD[3spqo7[5mX.MB^iB8g,Jn/`IiZ]#]Y4ctC])`oan+0r6,dbe-U5mr]dFK5
+DZ+2=eT?4`(XmJ37pF\dh2cQJolbMFc1i;DKA,p>16*8Q.&^b;H#I>arqYtpU>#HY
+f;>QoWV<Sp[(b7Tm&(p!Q1"I?,<,+>Im;3AI;O2TLAYD6gZj6:a6W/=h_4ToIt),-
+qk(LXJ1m_Q^CYA]i&gdcYUSg%_i4\i6kFleaoB+H.fH$PpjmAS%DV*g!$KJeKJ4#C
+_8o7STfaHMn6-RCLg((W9ItoP\f&Bk*s8+A3."KdnAE==%&(<\LbPPH_Ph5UTmTCe
+nGJEK80nQ"Ue-E)mNFrbWtcg(<f8\A,8B@4&#,"gMc#?a6jUgNUF\6XZ(`;YGhX"o
+Ht86lZ6.)bcQ/cS2NI=m4N+2M*[@2*Nj8.?a@QUYUYLZdYtdX,W>d'-4HPLVdRhM/
+.j:_$Nfl.m7*-hj)l28]MGeI`b"3[(V$mrp&rJ\AQmXC/r0Wc_>$9#sT.&fSSWsh"
+:J5r!0'01'Q]hJX9,WF;AaHIbZKb];=dpl&I'/>?7UaOY^F1G1WgaYG@SEc72We8i
+Ro.%:5Z`n595tIi!79_#_q@,4m-m$!aP+s,[64kmp*\>IT[0Uh4&%:(Gk;2j:AP<7
+kReQ%e1-*s3Z<":8I_A88r(`=.mE10s"eaj*)RV95q(P3Shu8T;9D$nW6GaH1`DY+
+MGlqmD%<F"6C6*rB18f5(oK3*Oj_C!9<$_sVtA-*dn56d.P3WZ2!Updb"G;RX\bWI
+8q,;_#>_@J=K45nWR].l=/rr!WLu+H;L5HAW[1fL<N<FV]%:/eD-a::b.-!uk?Y-j
+@BVP_UK0F<>:])kWE'A'=A#,h/.IE>Ft1A]b7@l09ouW'9#fOW+'pLXR'LmMb1Xrk
+?EDDEZZ_5Og.OY;/KLds[]7g.qa5-Ljd*>5HJ."fCMYSFZF;a?h:l^lDCMuB\2G8[
+g?V[WX^0#U[gq$FX,D$O4j^_u9'+KYO)lo'fXI2^hd+EV=fV_1XL-RJ=*qQ)CYd:F
+pT![gbL%-/IFbo0^?FH)M0eTdnZ;JrnmC.TI4h)aZ.J:1hol$[aCtr*'<6-o5\b"P
+H(2Yth[,b<.WM]'<5Ra4%$V_i:U'(R_rThhi7$A988]Zja7g<XS/m8;IOE,p;]2+L
+:_#3t36&I<*T>4hLb\lSa>g@2@gjZGZ"?PJ\B?,Xb`e6r?8Td79./gpUQ)Q#0$8HL
+/`Y'eO0\aMbW-%cj?m^CEP?,039r?]XK.[DIU:;[K/r'Fl^9QBAB`\A-"_Q%T/).M
+coM7ZBIsUc1PSuV=t;XIbjD13`fSMkHU$ah#GndkR*dr6:$@QQV_nCEdCOs-l7F*W
+2*Rnc3ho^?XXAq3Y-?@Nb=q4r4/TCq\CA+U<9qe5YI/gkf6Z1VlqN8>[I2&f4!S,!
+XdcXT%W9kp4)!d$CU?!cXP14c2XP?-[WQcOfGf``DG@CF[asTq4!/V3^"]mfIbWF8
+T/?""ii+l>Zeh+RI-l@B]!k/qi&eQ%mg]`<\(:T8)i'.84r_%WIf%m3pM'.Ko>!9I
+(ZIP-MJQTN\+nhciu?a8EZR$X3:7d&!8r]AZHu$+Z,GcPZ^IHBC3)DG[HAiOS<Zim
+:V#^UkN(ZrP^\D33K^0%]d&tfSsj9f4pgJnhkfuuT?XrK;s,07j)n1<e9_."kFIO(
+G#!nI\n>.1k.@j?mb?GV[qb3!_m&eDZe`6#3pusiXnRk=hi17(mG7,]K8tZE!OmgI
+`S7_]h\Fj;#E9oK5IgM2+l[l02"Frhba0D1jud">cX']"H#b4or24]/hI"e)+&V3K
+\"r]21Y-mS4mW%WX7flSe,*Knm!Vs*p\s(-H>^pd^$!H,Ija$!Dk#uSn%8@E8)X5N
+U%5o6cM5.]kP\bec@)=ZqHn%.rQhtI^;nh'+*Z=cJ(sdK?gdW[_tX+:_sY:Kbl1t-
+r;Ak.rpPC8&+oj^k5VX,!7/miO8/cOr;D]b!K[fn&/,'TirMsG!`1BKO6ZlZ2C20"
+plI'-0KfDT2$*2:!O)5!n4s*><s!>$"OE26&46R39*'!9"#+'dcsllJ"U=HX#B3on
+W]L?DC'Hq2Gn5@Sn!+1*OR`Blqr13Q0E;=:bk#4[<=ah0%mD,>L/eenp<^JC!,r/r
+D$s+f#f'jA!-%GR,n1F8ls_U/OGO4Z<=I2F$]cqL0.RBk_#"+Q$P+?ai+!;EnFE5n
+$F$'4YCZuJi#ogQkJC3[mmnTU])==OoT8_XE'G!gD\);F&b,`1%kA*-YmbPf%$7S#
+0XCX3'^%22&hs1RE0V/V2\>K/&J5F&d$##\AJ\,q&['dsYuqhs!u4Z('X8c*Yu((3
+j9@>4..7T_d?Yr\UD/<!jfZ>]!Y$)$M&UAZ%)OIun:_:&NuUJ>$K?IRd2`kf=V_UP
+0+l>Q;)94Z%iper#1;QYYo"lDmiO7CoeGY7nKf3\ru[>V+47P=cpo,HPp!q*%akV,
+&JZCmdhWPT,I.n!d>T6RmiiA.%T4qldAJ0CS19[(%?\OM;9:+/fcK]Y*`=L3nf/hd
+1'Z0.,EcIYOgc$&8FmI:):Bl<;/mk?E@,('&!DD_&jm_G@j4g1*tk%lP*[X2P9EgY
+.Pco2ER?0)ZR(aC(QuHLd=!AQOXK^:.IoVGd_dPtf-iDX.5Co@;RnC,*;Yg_/s;5F
+;?J6)4!8P3&sCinZE5I:UFbu6,:,u4E`"BNG::<3.h[+M1;P].O"><u/Md2Po*$pJ
+UFB+D1(oQq'#PK*_?TR$,P!c@ZL%ke4#!u1/X%RedpF=S5q6q10s\2?;@bT?FWBuJ
+.FQHp'4Wh>%kt<L/b;Ii10lCD/KciF-rWJB16W8jD)Kd&/COeGnA8.f"#;WQ1io-.
+;MQLg_]89?%Ps@MZ0s[3+ZA<j2KPu[ZBI6<R4FKE&^u(GF71OJr?"sl-aWY)ZfNc[
+ZSiGC4d39('@QoD5<>!$4S$6J1HRnO@m/:P3qN_G'.FHV#;VJV1p\PXPURl.D_Z?*
+-M(4sda:675:k:B.5Uu]ZgBS+"$]b!1ULX4dapuFO[?E45kKOdd[rC9j$[o`.hmsb
+;l)kr=%1Vk(fWRbPP7>l)`0B=9!Yime:fAoM"u+m8^sLVoNsG^Gs/Ns7e4)]1!`#2
+"Y'(Y-a^c`'O*/2&PA3d89E0N2"NQ2QU>lF9[pmRFF?n=cUr6j:\'Q=n:a^R9/EqP
+3FmJ3Paa83T//>258>P5eJV*R5=9PG2>#`OFY>4E"\9@u1t;%GPSXq][0Tc6..iif
+OW?i0UC]b?%$TRLo`-2@U'B%/&_*-e&ZI?^LI\T#:0!3+JoCr.`$dL2=Oj#_F&Q7"
+&gu5/1%CqZ:T7N_)d=uk>*%3=&g:Kl'jM>,>a:jAooh$ddjA(];0CV*dK`tKBcg?q
++'$KS<S(2MH!OF2-<7`^<Vm%:s'SjY<>GZ2'sCe\ogI@I?8Z.pdIghRh-b8o@5JEu
+<Zts1Rq!2Z<Rr<oe_`M*6X+^Q@s1RSQ8N2r04NEEAX.=Heg2=-s(-@Z;mm&uQ=iNB
+&dJ$t*;/nZ2ITsXpLEmtA_&kQ<W--_;d:):>#n:/E]%Aaqe%d'@hsQ*[Ynm#I:IG[
+&^r=:etlRd?"?uS@?Z+S<P)r\T)1D>CGo[:(;F`F[q6?/CDOs"Ok4M06Z*\.BbfeP
+(?K=ofka]EBss@=p+^Ema^Fi\D#tk+Fh)N+lYmWQE0i4qf#)Jc8S>?E<0eV=[bGYA
+pMI=U/lsW:<ek?H%;OKtEjaM=[]OE`AQtK!Fn@>#G&)/`c#m'LE>>0e<nV;5.23P+
+G+quW<0^s:iBm9eD>,i&[l8Oj4)D8kF>h<aGCVUFSU$O3G8B@ef*?3FEH[\,I+J13
+=)i19"akKUE4:+0eoPO_=_/D+C,_2oP0\$tom+$_Eu1H`f;Ec#Z!d=0A/@[O=11,U
+]5JKeH8YGHpW7d6o6iSKB=DehGM"6%"(PFp#58RC\/,@7\O@7DFEgN*2V!;d^Od9b
+IM\u"(gV[#Xap/HES)"9@^UcrhhAOfF;9X]G3<f<Tn<!]I270cG[WQIO`u%[<0lio
+ph+hQ95Rd0D)Ud=pEPB:.<RT*)NnbbJf"_HdlU5?+eWmc@Y9XtNK')iNH^[9(u6V4
+;3#YjN`EKI"5/]ECQFW%O-(0<OY`(9ol[e3O>g$r(_@n$m>q&ZO\sGdFmY9uF,q-l
+Or4^3&BA/1q"6WN<qrYXDu#FGl]4%XNT-"[P"1P];ifTt;V;qOR5L3(:Kk;-Q;c%k
+J8]258XDcONl%cVR=7,`?'_t=P87Mk3FS<i%?UB7CUn5(=W<Y"TpGL!RZ`^PR0f80
+s-B(<GIbJV3LQ)aEIPI"ru$0RnrER7e!rAkS2ke]q&PlK7?]WjR@,?@oLGD(O^T-d
+Q^$s0=RVh!Ji("5TXHA=R1YFgK:eRtB3EcR)8hnG-^m&"+&fY?)7<gT+)%*)T/j`[
+)6j'C*LI_:SXKYP)2FP>,F*J>U+jejR0fTK6&HRFRhi2ug2!>6qk+j1V-7l4")jk.
+jeR2=T%:<Hq.keT4.^_uUKOjrRBNT92eZ@MS%6_>g.MYH[r"/NV&FiU\lY.7h5/NF
+UA>Ou\rW@bS!j+sT6diARNJ+^Q^"pmW&^KO@pPJ4h5tslTt99fg7=7lFg-2RNnS]W
+\=&bRZ([TSWEJ&IRiO,m:T#,u;]=tiqTW+\MjW5sVRF+6RW5JL-a9$CVqT7o>4J=J
+ooHWsX]jPZgLI40"gZkj[b:ni3M.F>Ksl9_Z!,hE]7$<_K_QG>[9GG`\oFheGG/5r
+Xh.$$HV(1U9qUR5Sf9=gR[:OZNMr:S[TfN1]:YMG^UZD!]\31k=sLMC"f,:\\/PBT
+R_,ko^UG,4]c&u=FsFZ3`On4!^)Aa2Gf`uqC'QHu>,!migH!)0bF,mM=*94URT%!g
+MlrGf_Qn*s>49:png,842LI\Cr'R2`.9N*1%pVU9]M9eY6YG0].Br3Y]JIF;;8XA\
+UE!FRYqO'YF1o4f_jTu6r%A5dKuCR9aD]&;>]7N-OgR;A)LPa6Hq21#S&I^``jLrM
+]N[^m[Dpub_R03^>e`MYHcZ,E_ud]tH5">heR71cagoC0]Q_@8bK8ORcF^.$nrLs.
+f?&@U`,gXU]X,cYn2("HbhW<G(J2T?PJs^Sao)ss>j9<F[F"b;db/K_'4K*iiPOCC
+Vk"^Q6?gg?.E#L>dp0"\>i3k52of2%Fr`Tlr;"XnER_X,c+,@R>m&HE9=-i>epU9C
+>V"<5_q*Wc_S$o*]oRkQD:2Q#eU91(h-&AKF4u$Wfm:uurEl4G5M1TE`-o=.Uj^r;
+H.<pBe[['Z*(e^D>M>T[f"F/jFnO-Fe^tn=g-*?uh1seaPDYnuf\Olr*5UG.WPmW9
+eXbel]XQ\pWS8C/e%Qj7>s$pgPM@2cd(NB:>cZhS(#_6Dh43rbh;>5\j4s/NhOT/C
+^-0b(e)``0ie"#Sh7):Hcf-tBe,>i^IQ-,t<TBWebFT7,?#e?ML"!b3fcBn8^1#s1
+QeFVZhd+^[?CBB98^mZ/&`'GJGB;ABIHk.NeXg4'SmgcLc-sDK./n)A>$pUOHg1N4
+d!^V-??tHMLWhoHgO>4-S^m**%Fk>ZmG61S^4Xtle`qPRh7KlUh7)]6:!gRtmQ?-k
+@o(PeC[7SVm+o)*?Iddp$f`;Cb'uXm^4GhrbNBr\^ja\H]FRlP&hMlc^gCAA]G'se
+O0X?R_BS.bHos>m%J"!$`Zk)p6M8;>KCrMMpH3Zor)rbV1\X+j_LHpt^S>^sGMZg3
+qS!^??a7kndJA7NpH;%@T6&E[F4%bCpsL,TIb2ABQ2P$Ypj\XR5N2Rr$2]4ehqrM!
+5L9>dAW2,]"9JR?#)pSI&TH5b0cLRT#07c"%ga0a`"4=B)A*;p6XfM@PTh[jN/`R3
+aLjtW+HFSiP%bUUD]=eYUJg?LgiF3q`^]N$FImb<RE?n`C*^rG+/;BcPW9`[P;T7+
+WY>`';Psl%bJkcQ`C:Y:QjtKDC@!^*>T;?H,AGE"DD8BJ#1:&9Z;kM&h;i[9eS]7Z
+\]ldM)dX#2EkYZG'?EWqc]*cb//A'4g;/'G?nWBIeV^tf\n3MBN:du1VQ>cs=pcjj
++(1tu1RHnj(A4!<laKtiVO#nihqGS!X*tuKD:2]G=A>ki7F'LmXh=N!(=e;[Fsd),
+0$a.-_Ja"U]I,U?ef/oan\Uk:UZL*O.%P0<Y?RuhlnfJ!X8;V)XF_eR^<ZlEnL0Hn
+*;R&24%eS8%l69H^i0XZl+jN=<p_jU41qsdmIU2F2UEDr$q0U6;[]J)9GX!Zd=St-
+Yg;&ZrkqT+!>VoFlb;,i.HG([`!O(g[l)Nj0)ifur%0"m:8;M4\Itr9,:J]&R1_FI
+RR\_a%V2<'`N-)C[73kQC=:,fe?^boYa!4p7'TC=+O(D_oThf2be5@KNO7cpb%pqM
+SjTY+51`GDS@_*EF:sj0bd7LZe'1\+>rPGjF5HE7C6Y[ucI.+0[`D-P=#a2q"T5dX
+n\m!R<f,oHh9uqs&=?J!NDfKqWk.?DTh(p+P/YLjP;-1G'*O"EK/+Jc<jnfI[+_hi
+M/6A[j$dfG$$F,NgPOq!E^'3f@5\?L9fmAYG8aTdhD[m)JmR&t7bqEPbdDLhp\]es
+X0DiVls;L@dj<hrQ3U#fFZo>D@F,c8)qPo"0ncejh-Gn(R"^$H/3+[UOQ1Tq`K],f
+>#U%+W]jnRi>=(BNb8$&hjE?rVIOu"GqO_Xjg`$2)rA.)7s/M`p'IK<=C+.hfi`ab
+WodJ#YG*PWem42E)[a2GB%j>EO5ubALNq^g"ljQ=n>:uJVE(O>NnjNOFh6E<mSBZm
+q]*q`la]LLVJnL1F0k-.()=F>]8"e9E>^Ch_-K,%1BhCf00@2A]N(`LD;=9__=5\"
+<O(uGc>1d:$ACdsml+kUT(8En[?bje^J-fS*T#K%l.b($WR3fA:Y"l=7p4)M*^2=)
+l57P^[;^R@q<;Gfa+M5(]fKTjlJ8U]Y3EW;G5Cqq#J81Y*WP6Ppj92qK7<WWP*g8l
+HR4&8J]YE&lK7"<`HA@aa-9)udTML_BWh0I^/oR'+<sR3Nkt$<LXPRPUUY(m@/iM@
+#72'EoNa-'VE]g_$K'U#H#Ng!0it#F+>X[Ym@FJ6=$knSH_lI84m+O8\D:Q9dt<c+
+otguFqr#*VM=/d"`"HJcR)CP,YM^?87SZdPMp.'9NZtjODZsKH%#IWS#/t6<'AC)5
+G&&]S"-PRd$VY\:lQQ@"[?S&>+>[V?L-QqoQNAEN0dY6h*_91R]4=dBObG5p1\h1+
+,ZBAZ0]G`pW@h64H3]Vr%S+X^)'VZuUa0r#9Ve(,+X?l*Q0nuPROL<IQ+:t%Z;(j]
+R3&)uH.\8CJksREQR_)ai0JEs=\B'H-):sM3HG+18;VH@UjS2NZF3=s\Nr$B7(J]6
+:/*DK[-8p:?'t*CF-Z"/(?Ml#S[1dt:'kCuB<:-Zo9D%&3Q)BgoV\=f$?Ak_hQ`tp
+Smo%SB!&W:65KLhTWb@cd-7W/-Gt/%<!bP,\g\Jp>f_Tj2MfW-\N8nI/X%urI7gL-
+.jfrREjW98abjXt<Q,<;PEp\q)G`hsXR26OL5o1=BfDfX319EIGtY^r6tQT<U+1=Z
+RhoceBK\b`o:<eJ=k?4b>kb'oVOpV?gIisj$B*FaQl2od2sN2*X#-];cgl?WBcTI9
+';g3)RbpeS4aWmolD;m/ofDAcNN+eCZ,/Q49Bd0pY>fZM:TB%QBFR)*[)03%qZd;)
+*EoDJ/`g+2jZ?E63NQ6;b#b%l>-0)&Xd-TO;YpnfCmBd!o<,&Oq?^s(jfP`[7b(=-
+9kE`E/$i2AX]l`54feOE@C<J0=0#+^.Fhq6G7nlLl'$<=S[,UQMV?O[Da.pJLncfD
+Y>:(IFJq(R-^Us!!8=JrX\Hj$FdbtV\W_(%"l6NWVWcbbWFdcr_kjeB#h[m;J8L#?
+WAa]NOSJ,;Qm$1LdGAV.,.f4p+WQQjdKBYETcN:@'Xr`/&lH;@fJ-[W`UMn)e\"<.
+Z&RGU[$MJ0@RH.&"ueJCcEh"B2iQ$g1G`.WXlNsSP)4?@@C\H5A'B-Z17cn9ZBm)T
+S7Za1SjC?>=".]b4cWkR2`+Yn/\\<)P49S>b`Y=L7r6:W0s505=bZ9Rh"=J7juUe1
+LHsnsm@<?_>G^$m,L"BPU9`'&C73[4APET*Z3H@k\NYT.CqWZP2Nu,upG1oZAVp&&
+CHEBhG2n!LS2:SDaVnq1C.-%)1]DXFH:qCRm-CQkVPL%,#;Ac@G?Qi@k12TN;S%i,
+YVM65cs"mkBO-1_094)eH5g;YNC0KiB"H65_>i^>>@KHZa#0>&3GV?jU\7`rcR`AU
+Ac8m41??F,>GHAm:#D&]mb#p6Io#E7Brs>%45KfVD<u)j_Y+JT5l#VUE4t5:2&1Sn
+\[R*,XikU'Nu`lMLMUnAmDa@1gqET;3:S$ZYW-h'g,TOmA6m6f2m3A/4%!ZJm'41r
+T"i>#X-RE.BuN$?"m"GHK5Rg1/%,[*h)h6?FWBGjB&9'?qBMO%c;VOM?ULml]7"S"
+.DL]]2!NaBQ"]S!]"-]Hju`Ttp--7"2>.FBI;>qI>a)NU[`H_jRucus=/ia=M!Q'6
+DXra#dWO_TmX7luG#a0kGi"8F]lTujY4oYUpLN)"#>FRbn(2p3FmFK4bkDVI*df&.
+n?VL_H!'<W#^qCMj>(e'SurQ(hAYGt2\:UE.IGjp`-!.Fn9hE6o+Mqa`ub,Dr<%37
+&I6f<Ilao`lSnEq?d:H733E/JZgm[E"T1["lk1DNqR3<Kqsp*II6BacS/:8cJ)4dd
+S2'!;,Q=OokSJ$u%`AB4Ef<1<hnVm/5[#-l`!3r&qS2(q^5M.a)th"Alb@\1521S%
+b4.`Ln@pd?_&<6e/,_@&p:pd%^n^[dA.QB.oK\WRW:UD4PGLROq`V;*_#tf)>TZ#&
++@%GY6.6=[45Rc[,J\;V_9;"*X;X@)qE[b+5bod9,SdaE(d2s_/+b1*A1/:201)/7
+^cWB!";a3@#XH$?_*[<P&imjW,=9m:62VqD$p-cp_*S/t^B?<_,V;5#0>hSf_LVg+
+9*rH<.l>I$2N-rio0gGH/]<S[6lU`qMhF?K5f4Nk6EDIPZpmHYYekK.5`?=DXAHc=
+"@D010XN#h,YpZEs"R2<`&&B#Zs,pt<4mT^6hEjbUdW0I%`9PP`-bNQ/2op!;FK"j
+7#=,n`&#C!@maI*_W5:EXBS.NCH#Jt^na*&oH?YV?Gki,_G!3_GgSm:)FV5A\g1q+
+ZjfFUKgl]"7O0NOlrutJAB-Mr7EHgqjA/3TBgd>t`jAsh4Cq"s;FP,74q)BrKKHo$
+EPPO+7q:Z!'T5GV8B0/:_2LHEbD4,[7n9oR\ZA!8gA4'fI)I!u7]]q:lt8T;LW'Bo
+7[q%\9U//e3'r:T60p^($q<cuLddPb`T35t5cP*GOGKR3#`,j=Zhhgi_+KYlb++L7
+X(]Yd&5'Ig8uk=mbR[>CVb60t9'ED"kg<$OQV+fCb=nflUoopRXc&^MNa/[/S!M4`
+Xr@MMbIjf$A@BYi*J)GK964I_\TZ/XON]hp4>a=e@p."UJkP1D9AHI>X)#qSU.e7r
+Vc:r6`"#IgH;*Bk9Q\LN"Nen.ZTgRgbe.O\K[@3hcV(>79c2j4beD=^MTh%13`OqX
+\PC?ocV)bN:#snm,i?ka3_Yasc<S+)7,L\Fk=VP_971*l/D/6]M(:F7bq\fa/C_ps
+K$JtqcNM,11bqi`lqY2ha[GKfbjMp`l`m8UY&sLt*;_["i6QMkc6UZ\gr)m$hArDp
+O?ED9'\9rSr(ns09Jl'2o_D8;YYTAh9Dnui4R!e1jHC;`c$]00it'N/Z;>&D:c,OU
+[1Q6Rr4/p>:-@gfm/Y9T!`7Cs:43LF*8JcVg<G<^bj>;U]Qm9[c-Oo8;+2I#XTV4+
+q,*sZ`8r(99_M9<,0I:VdP?k[2(;AX(eO*1;1/Ysm(lA;oWtq<d@B^Rr@H@@$-fjo
+6sS\IeHj/7dES3<d'XNa9X[hf1Wtb9%1O?+`AP`]1/ETMcb1T!"VoMI44<2.cWroc
+N94#;nC+cpc^c=X>9-N\7*=%D9(`M='gtus$rFVedS0R;eK*'9-r4,5dkro0'hP+;
+n'IUl;,jf"9`S)a7SZAH<8>PnX]J;3*6MJ($R1329k)G.@EULV_#k7"]1piiQI^Ci
+et"^T-#1b+CfKe8duA.RX_eKsD$o*9%2EjhF_jrMEsk]a%Fo;/ol^_6F:MSu<t/k.
+X`XntE`\+%<s=#B'm(/WI90Wf=$_#]KV_!]J62@!f$OTO`GZbcLXtLu=I!u1FaI/b
+lW?;tblr[Lm>7GmIb7)=R&u7j?'AC7oN:4>d05fQ9o(k?D-(S'=Y6('<Kp/lJQ[,3
+fM-s#lr@0hH!'\C=b7VpeWHI-R93ai<eZ:[4eET,S[OMp.lDNS>Y/'5SWae`g=:2r
+4e"oPX'-O88X68VX.ictUfq>cgB1=+`&V#OH.msA=P]^h]nKZjTj$!)fd4(2m>>+`
+kh:0ag7=4-SKM,V86O?o>0Weqh4!*s%,9%1=_!1iQ'pAY]3@Fcf=eW&/[qeR\$oY6
+>ID[ZV8M'"_cQ6DgZ>6dL"Al?d9URKgT?PsIG3DOVqCsr=q/a2>3B0'L><Tn>d`#6
+>uat&X,\4-g?m^&"j^KIa4^^R?,`Gj%I75P`t8KQ>b1%+p!@"kksaFEgqDb)h8@h"
+X'<iZ=hW-_/\p3X^u#TFh*q$?IA#G&cJ4E*hM&#cV4?-8e6"U0?M2^bSaKg$`8?"A
+h[TUWc150u[9^K<>-/*7%Js@PpL!Uqhi5_4/X9RPqVWshhp'g3eaD3ekhpUd3d'`5
+-5TrNl/4]q>m:JgKtq*hfrpgt<\%j?b-DCM+/!adf!Spq/>_>Fi<XZJ2Pqff^*V^G
+-V<_T2'+4\(+Th0.gk,_;GJeMFtO6T.hhV1$_As\?7lZ;.h3UN@gTAK`\QRpAn(FC
+]J__/UL3$>G2j^,j3B=<XBFRa3#i\mj5r>Bc8jm<1kEq;j1Ju67R(D%NoWm]#UVWD
+SgreVk@@%Sc!F-*?7*:M9=Bj:A;0pAAkU]%9W7Y\@^\,T;g%00:1T=CA):'mej%;(
+5iaO`R''ISY$Y^?;rs<8::=?g*Q2MUc/js]\lN3LelS5VB2;P_AM.\bSjq%T<+B6A
+j\pcnP.tUp=?3NoAn=GE-9gS3EFmBcB)X@DmPa1h@(C/rjt9J>IUg<NA`[eq*sP&C
+69+*k0'.P,;JpO;[ERhhZt8!rj(<```d_X@/`W.7j`@>4hM%R[MrdDakam]GmO@B!
+N9LaBB\%QEk%<ctOm+nekLPo1Y&J)MP\BcYBa1#?(7T"bQY+7)BqCW)Nh:%R9PP'/
+Bs"+C2Oq1HIHfDel;hb8FhMG-VITmSC7_6dY+o`LW9SX>A_'gqk,N'#X(r3HC:ldr
+p6Y'1Z0O;qCAtJ$m]PkfZteI.BZ?uc5.'X)Y\VOn:0,!mSu(cPVe`HDlR'"q[]Jfg
+_<[u)litFFDT6K.aD0;H<XuWS5/M)AbNrQFm!d5rNmDO5a_X`"Cpq9!0!ah-e8*(<
+m68F)?Fs6*jTlD9!J%]e9W!Vj*7T`!8g`D02W&<<i%qh#&I.2*52lllisVI>@Lh55
+T&g7gk&&E,D=6[Pmc\P[lF!5J#U\nUmcX#Hi9q/fDX\Y6k4<L4ipTY'mp>/EhXGH4
+m;;jtDk?c@cL^KWr,6K>n#l!FhXBons)8J<E$"Rgrq(.^ol*\"E*i9WmfIHX")r/W
+Dnc'eY5<)Y$ZOE#DEeSLmga5B%ri*kDN>BL0+r6%$#kq/EEh.8cP(:o(3%"hEGl)%
+T*TGO'lhP;E8#0"V\ekn!-+nWn7N[0:Cm"<*q@8sERuOWk9P(T-us5TEdn\l:F^B<
+,&t(>EmH@Yh^igJ.rp\*Eh>+-Y7pKA1NMq<E^)F&%lA>L3--`5F$CN5?T3%E3ci&!
+F+68mmicb55BG.:F9aI@+%#MUh/Cf%mT2"4;jQhf8%L'=o-!#aV`Ak*qXe\?oTQNO
+^Gb_.9(MFGaR;ps022"N89EH`F\bU%?WVAg:N_.iFcTGnT3HH>q"6QKFecTkha6u`
+?$3njFjF$0nm_.h@J2M+FoPckB3'1?=E]a3p4$e"YA,eiB(b%uG#qQ6(JsbEDg)_2
+FU(Zbs)WB+FE]BGG<^7p:@=(2Uk!@:(4_,+`nCHFTm+@_pY/sIl,EDoPkYU]p_^40
+(s7(OSTm,SGYZrZYC:_GIs@$)Gb9P3YC_#6K6Y.aGgD(ghhHCELNgo^G].m&pkO,J
+L&"6#q)=H2VjDY;R!?Z>Gh8@.kF-YiRs>7/Go)9^kEbr<I<e&MGaFtH?_@-qU*,Mm
+q+m^\DkhV[R/.>fqOaV\GF!PfXEqXWHJbEBLSt!PWHfknHN19t$,cVcY'Vh0HU!tr
+Dk-]ST)0V<H_7Kb8#Z;TY55'-qqmb;\%[0t[JU!=HgBMb#Jb[&_L)m(qo>3(+2`Fa
+`-]hHHnUocJ'35Ca*c4(r4gL(?cdY=d!LPqH^D^!:WRm\dsRe-HV_rbkKWiff6r_4
+HcOM3=5/-nfmU'OrP.3;ce<b2hYf+br;Y`'DqFtAidF&8IS]*T?dF1NjF30Crbq"K
+?daBfl@,A]rZC<P^Z0`\i-^UTHe7Q^QgaoToR?PiIp_)_DsmV6p'dVgrX\Z$Qh16l
+m=/44s*+HlJ.MteYSo>8$jFOG!5r\4&0#"r=?IjF2@r-HOD%$3)%MSC@8TQ-:*1=0
+7c\RQS5rE'Ku7JA.0R@B/rn+%1Kc9W+Z>T\-?7/__L"S@bb[%/,dr7LO3m-UW\iRr
+-D+0!eOiP.T3/#BV%q*@H<FXI;Ccggm5i!qYhH1%b:R&Z6F0k[G2'.5mr>A\/se*E
+rqgc6hIeef/cqec_rC%3#`SgqOG$L92e[YHpb9s&@%#eFIkd\BkUIKE(3<!Gdd$JT
+/N%$F6eK\mH#7]a1V))n[sQp(ZW"9)D>3rL2PQ,PX)g1'Y'/Qn_WCGN]l&<%X3'^M
+]39Zl_g0/ik^0sKT+d:JolE6"mrm1'fCnug?OsU*n_F!@5&Ye0oY9k-!q3`OqF'P\
+&2Uui5B%;Y#!m3M$OSt7KIZ[\Dq$Q=6Z62Es$AEH6OZ<NPX,:;nK\VS6ud<1'h#;o
+isnLtKPqAin^M%M7kp64*_5bmB,3e<`/>m31'EX]8MYCS,"aSsT-cmF<1>C,16f*t
+9(IYI.S=[``s#+W'Z2\#1Gil)9CgTe2Es!>cT4fS4R5!q;=)[hbL=]*428$WX$=k5
+9`mE%<$]XTcZ1$&5YuHs'h;,b>qJZGoIV:R6hFYA9@),T.nRh4*:6YQoZ^0'<HU.'
+<)aTL4WVf_<Gb*)'BN.edC"YD=Yl#2F;`_g5\/Eu/DZWMfrm9)n6.<,U9%O5*NGZ6
+p-k51gFSW'DV:?i;fAB'h9U+F(K7MY+I>OSG$:5tZ$KW8`S_S=f@@cd?ab+VlJFPW
+#CB`8o&E,GQjomH>1du*Lg1`;&TZg]N[i!+=M=Nhh72S`MI7;;"c6X^[QSot2m-5/
+jEX4%Flg.t99N_o[ND#K3S#RFB"@VRTP$;$GG8`\Q=H!<GfGr4Bt7iJQY6.aVkn,g
+VLtma3ju)eCV#88WG?hRa09Bl(5K#/3p+biD0mVeZYhioMm[H7B'6X@qhFjUDnDm-
+]Pm]!"28`dpCG&T*&e\PEP,>?]5]q\+3JUd(FP4,Gj_cYml^=LcuOON/(/J9B2?Qj
+4GPr=FM2SHdrla%B@V1=AdclE3]CF%p"`t,g\<qX44nWR2acYJITLlXH/7)EiqM6K
+S*51TQ_Ue[GrL<-Gb3IC@OM8RNe`@+?d?pp/e?P)IBNn4WI='Pih??p/#W9C+0(J%
+I*^pH5QgNU+8c4k:U1(n=9q27oF-:(_?[hH,5rZ`!J7No$c%K1!FX<SJY9j`_?_^u
+Tc<EQVd9nN(fLRpgan)>RLDMR@gjLH1kAK7#=4_q%\SJ;Jl):N6RZ^W+Zo7NYM(59
+fTQ^%lp?JI3[VaXUCeZ></>N4.`I4I&gGP)MfC4!`X'<m+oG/qYt?gkBV-1e$uCX&
+!]S,4gDZfV>)dOM1rj:q(SeWhO"p2g`[L^,,Q*.T0p4Q;kn>3c>_\?G+umU+R3JGc
+G`f9u8]]"(,p^SUP7Zk:8\$]+AGdX3&s?'^3?9F-9SZIVY#EKr3@q!H[$>Zh>KVds
+)!,RpQa3o&b,J#@U0PI"'+Q!U)(dT*1qJtcL1a1_PqT#)^mXac>>0l`18UMrQEtmB
+c'b%\VQA"3ZUQXnWM)=!]ZZiYnoN*uV)r;U`18]EE)*C;5%hh-SeKOj_Pb=>afuF,
+!799CK/Z,W%1GAK3:KcHV*k[0&h%iuSPa,46;F'gHusOl:qAu.B^lV.<18rrqGMJ#
+.0QI3,*mig:J7Zm';i-CS'eS49^.g&V%i?Z<!l&jW?ja*PnK?]MHNfUm7O8+3h01W
+F[KmQ<2aqCU=C`C<[pgKWHDsNe`rc/Wf:PhB3(U&)UhV8<E6.9\qnrF.pT$tFJJM8
+\(?Mt?E9WEY-n,<eXF``lck$c[<BI<qZg5>9k1H9QH.R&pL1.oLpFH=aOj-=A$"LJ
+ZaNK?fh4\DXW<e8p1i%/b>W&U?(eCpMV#,6;/C),XgWBWdT]@EDQRK_[FX?kgZrci
+Xkge&[h@QQCQicjrQMcp1>prgRrg8Ge@Bd,l."HrFKU&G[l8?k>AM,qY8uQ5et2Hf
+ldL#0m;&d>T(-.qaaC9LD6OhVqHo0JG43st^Xp3uh>@)"0E$gD2mW,5H`Mb$^'qV4
+])uF[UO_io"g^09#[r)kK<K-8_Nnf$:bi;F#lOt#L9);a4ApV_=fKB<<u7ET@TG4?
+;T<85)O*@%:bg'_a*=0bOA(.cYuW9o\?dEM*.*c&<_::K3:LIkM38;(6O"E$/*(NI
+QEbU<4P<piAdkAm1EJO"\FVN;beKLLQ>FRo],bMmI@RWE;9_*s0',duPB,N+c$B1E
+kR?@AZ]9^aH5ep-9`(G<hG;OF4%ACM+/H9(MUK&)8a1'kUGUhhe%/IRl)b&c2'/@=
+\q<rH/I/74?Dc8aUK?`_$`c.VY1C2%>O*jOXYntDf=L!Ll`Cht1qmYE3G1`mNIA&)
+2T<tQa'rd(UT/L/d+Q$(C[Fj&[C1Opg:M]KmL?e4G5gRX4.C6Vc-ru,#3t$6F*I%(
+j171@mb&O@HLB%3^:,`gbW4.$DLMJSpV,;9Hl$tq*Y4XFcMc^+kCdcf,K%$`!oa&%
+G]A`)`j_ici-[JAEF'Hs3>W7cS)]QLIK-Tu0.H"qY?l5J;9Uq*.c?iGK_"_VU,bFB
+jP5rjmB/t&-n,EM">^[Y;B?:,?VE8(38jH3c.%dZ<%;0MXEA!-ed9r3.33B#FmbUF
+:7kq\I6Y#\KCRU!+)*SqS$r$nUY1!<;spPj\-!5ohRgO(n%EYSp&>-Iqk%mi^$iW/
+NsFHf05pB/o<n<g,N65;P4?6?anY<\jugD'nbsoZG^i*BI&C->I[edYhbWON:LWpF
+]@QaQ3U"/;N:q^ac$A1Ek5=tdpO;GDHgcUV4;Ym0^D#:IO)O:p8'1S!0@kKBC%T,@
+^%i`(lMLUZoK@uSq]A&gID<\nINRSH?^'OLDp.u@GL?;[-hI<Jj86S5o)4'mo`!1O
+rBHq1rU6ujYMfEKq#G@2ric\.0C\qE%0/'_!3cV-0G+>)+TcU'!\bJmn1=^F+Sq06
+s)9[on0nJ/70AV$">D\9E)?bAo`]:t"gB9V0NS:ZAHOW#"Rp71D\VunEqSomoFG^B
+&7Yr@Y6FD]#EXKBE(pW-3sH7S#L>UA&9eCTG6r3f#V_eQ:k&e5N='We#I(NA0Sp06
+XRQ]e"orUiU'Lt`<t/Xu%ASObj38&Y_%'qN%Uu[QU5'6<FUo[Y%rRCgE;h$Mq[d`"
+&2=V'd1A/i"V"<=57n26YoaS)i=]Y$&cc>POYIKQknA%+'<q9GnGs4V,nt>J'X95(
+0ae]c3>HNs'sU%>nO4%0'b4)S3q5!=nSo9u,8P8j(U6[NnPL&V<>[Gn(pR?`nR3:i
+AJVP!)6n`1nV%j#M&J+.)R5DCnWb%JR25=0%ahp871g>5LDQ)^)NhWLdErjEeJ_<0
+*3n08dGZ#VjVq(])j.lU1%?9(oc:=)*:`hG1'&G:"WjrU*q8hB&H*b,cQI6?+#4iY
+EZlO1%3P-e+>PMlZ5"PR2'Oe9,'#C\Z9]W(4X0Gg,;L,^1/0&M;'^0b,-k2pZ/6ht
+AL2A2-8@A&Ea9^V.49.)-1Z1+&Z7"^@41V_.'eIMnqec8JJU'X.+4G2nrY$BTdirQ
+.^Eh>no#LgKdouG/$Zu@O`r>HPq6sn*0SJp17KXHdgD8k/Fq=9ZHXn_i@-PD*R`=c
+163r+mk0br0%-XN')+'mq^U%u%a`E)0[gHj<X/`)0r+7nj&7]XX"n1g18;$/U89X)
+FYb4s1LbnkU6.7k+#GcF0p<V7j#8f(#rJtk2)?O9j39H&(H#-$1=L(r;fOVBFYm$B
+1t*U*'7i'JKf0U$2H,#]du?9WPrCLe2fkNKZ_9><K/KuL3g51Wo7oC`M`Z!@3`D5(
+Z^3d1Rlkba4L:eFo;=@-Ys!094gV[^o=[:C_*0'E;%mS'Zgg22_*9`<3n*CWPQ<nr
+"[*P+4]D/@F"os:3C.^P6*q.f1_Dn#,sE"l5#_tTPV#!s0gG:f68TEDF?r7#77-W0
+5]f^cZr'*\8OIT"6Sqq5oGL%RAOLWS7'pAjoPm;VF[^Ch7C7>/oR01c*Cb.-7^S.E
+oS#dlPt,qa8$nCKoUSN0Th'8K8T^q(oW:]lYtK2H8bB\gFMU>OJP:0^9XM?'oJ9+H
+eOqaP9=3ML1cnERj\<,GPLRKF'_+rJj$0lb9_?:g</XQdrD5>3:iuY4[$+2uohVpW
+:\=6Uo_24I+&Wge8i7D_2&eoJ/P^FG7Fa1lPpKBE"]D`7:lIdH+CQuiE]%uA1Ncq^
+2./PsA3:T?.TL.4'l5:@E$nY-.2@(U'mq1tJQQE[=Fpi]<KU:hNELC2=eenti*fbG
+V-3J(>,/9)25aY9Qp2=n>4lf<oljXuIp@,S>ID"B2:+Cl]j16$?+$A2[?Y%jX^6.T
+?8\]gU1-t7[p@P5?a\Kk<GPu"F's-;@'tVpp!!<`nR'i*?T#f2ouUZ$'jqdV?reje
+Q8)du2.77\@[6=iFld&>l""s'A@96a2Aou4*G"jeA[Wmrp-3%F=_2bJB!tEGp/,E[
+7;"MaB=;5]p17`WBk$dmAp/$)[ZP7sEG7>!Bm+W42L0#FTk\b!C:8\.p4["bNG*L#
+CUTdLp8Md"X_`0cCpp`]p;Li+a_c4GD77i,<n1u/]l&#0DRSYD2VE!AokubEDg)(t
+[c(dum;Ot[D"eBUpCV?%)ddaV?^A6BG85)+#B9DdEAoIi2_f>s+)[E(ES!Ed2`YiC
+j):8UE#25f<S;#/20B]]FgkLmG4B_L7<VaBFLQ+/pMk=6'6\RcFa%PCpJkre@<bhZ
+Fk:b='i5)gdo@V_H(t+[j#q]56[E6<HD5>(U8`IuH[?rNHX\RRU,dS[#CJJO/N:Hr
+pVhOSc$@pl#+*M]pYC97a*ou$3Z$t.=4;SaTmp/0J!]PPj5GHRnUC60J9VNQ2ukX7
+$%Ot2JN*gap`4mp'Xh*AJlipOGRoCYRt6qCJJ]bd(dWcK4bIs`KD7,)o+QOS6j>sm
+Hbu-SnBlXc+pL;D<EN9F(g?0+/V^cRIps#q(jC:6E$CZg-TG]aOO8m$'RZ:0,#4,Q
+iY5MIS-C*UKik&RfVaN"=u(>g#8h$1?t5,)[\d-9,a`G+(b>k6Di7`I#3X*b?u:]d
+duHEBHFVFM\EkYpF,h*BM7CZg)#'(nBZg*V,J\A#=JuH`Q]=&ANBh?<q&b[n+-7[D
+OCC#*R1(C0/g2?YLq'/`j!TskQ&6]*Nd2/"R+rjPWJ3DjM>5:H\EfF^=c^*8PF/D+
+fkm%#4-I-/0f]u8\N>p699GW.R!@GS\L!SO'pptWR<[hYfq""fK:3p"P'<c.-&mi9
+YE2n]#8osf+E<lQZ%UagRt=M*\?hT2DjNHTR:(#]6D'V?_id!7S>%fsfqX`k=dHSd
+RJB(6=K.bBX-V[^TGcRSGuK#sDj:(fTgG+O):+omdui7_St_jO=^RIu"e@Yk#8r_O
+\GecRLRo\P#8rSuRJ!;a@A<NcK-HqRq?Nd?Z)+uiSb`+2qH'KGS"*BmNEN6;?uL=9
+=c@WkURDLWqJh\Of;#n6RCM.RftF>0_l1&VTNWB_)DdeMOf8+hNS8+k>.(:H6)Rm6
+T356sRB*$UKr`opX.!b)qL>NVF.N-IVu!<hqX'u&nY(9lX#ZfO\co':D4d9WLjJ`K
+)Ek>D9r/aOU]SlBq5^Q!Trk&]YWC6n3lS=4&dJ3[Vu&E4H1/).8gTqW.D%+6qbST-
+_4"NEZ/SW^\:Lj:nZfZ"[X1$C\M:MfBs8Nc<EQ%P2omb$JVZZZP;gE:f^(F5Has2@
+PW-.`HM+f$kC*5oSYKtJ"&5IV9q(*:NuO:o):<fc_7Me"]6aLi\ad78S[6+A\i[sC
+gP`Vr&%gT5-_$U0QcZk/iP.IT[N"uc>Eu#<6+\*/[bLnM)st(=&Y5F,NI2&G*"B9f
+&Y3.TX?7qi>"?*Wf>"rR_#*Z.RDHYknZ'4!_:h]%S(kP[.D*42`#Dq!HnWJ:/&GL\
+_]2IiRlPg7ho5F0_:f@8S)qB^CW7>W\"%*H=Hgc&/\sP^`EYXKQrCs$9=`bR\D/7:
+S=-[QM8l&qM4BpT4EJTUQcb^N`*A;<I!`GpdE0&3ao%FDHs=I8Ohoa_bFFd9h!)qK
+^VQFaarJ+8gmQ5'B?490cM["#]?/6ccbmAs`B6r>)`c/iQdRkFb1iK8\d-D_^SuUg
+d60S84Mf4rq8^.oba]QF]M6N'ld;4UdsX[0SF+MT]?Qg,ef@Q,]`#d=):5u_a?8e&
+SO(hT5LI+CcWl=G*EUR8/';.a_4<6g>Zo@c3S;!*d/=-l?"q`W):[FHeJs(1]F2V_
+NQ[jRUKt(Y]l1TTe^o4jb'eQUrI_t7[GG-jd2gj`?!GO"):ADRc!;LGr.!0Yc)Z8R
+fR<:LIC%6:X4a&UT,j?M4.Y.Nf?7Imdp0H;SaFn_&_>eJc(.GK4a#"3UY!0aiuN^0
+*G*ec('`VIiI%KT?'4+f!QVmIZ^qEUIT+mj2:OfQgO2`WS>5((IG_^Sg0J(KgJcoK
+!T(NaiVh`mgnWetIF+Q_krl0"ITbdg_<AR&k'j)P*c8amO6$;D`a5"_]Z]K,8%<k0
+Hc;!'QauN(;1'=<W*>tXrpbtn^^StOgXjAHq-3:$-%!V;n9j3`gp?N6c[FoMNl@cc
+^E%Zn"/,Z?nG%R1*s7<fTC(M:\_41X?OOMR0=:`qaM/nj>WQ%L(%U6Vjr[8C^Id*C
+?)#(oS\G9'*s;*s,OrEPp)bC@?[MHMSZ9G/pg5cK54eJTGEX!#n3:(8T4.R<(&7b9
+p\uW935sNW[?D[_qgUX%RlU(hs7P88^-@g^In1kM4nsK2qjr*0^0COVC%+.KnD?t6
+J#i'Gnb2m]qZ(@R!We,4@N[R]7Y;;7\8)-b%0QmV6n0&aL;Dh&\7ifs1Pj!0;!<RA
+.3";fj"XXQapfJY8`EX8f]!8aOMKe\)(Z,//X\kYj*=&\"ur5P#1P*OghfNM9B$Yr
+HsU)*O&Vq'3ikBG>Chd4oZHOu@m-a0`ph^#nnVPNe8<`/+PP@P)d"ZaarN7FF0X.B
+f5(<>DE4rEkuH]X_[gFU>3rcBb]=5T)s"0R$_>G&K;`9u=_VJC@>`93+IBW>00o]Y
+l7b.[IKNdbeOd*5./?Xp[Ei#0(bNG->A<'LD7Y\V'9/g!h"Whr52/ZDLMV%EHnO#`
+2qDNZq#*,&.rNha3HWNi^TAKip2jO,5CVEKnb>2OY7B."OJK=g8uDDKc[0cW3\Q+"
+jLL:sLpJ\[$IJIT%\++52m03YlpC),%+7?hS'Jl59-`Z2]WFRicbIhr6OYqMN&&IB
+c=?5S`CiTaTL3F?qR\.M,U/.3EI4MaaH=)m#.r:"JKZ.UC,mT\Z:!"hWKH2Am7SjL
+FNCttoOt*j%V2%&3c^-N\\PCY[*cl(]B]49apb`X3cY=L(/!rkA@FnSChGe$E=7Z6
+2iU5S66Xh][/s-\1q8Q/YM;?&bS7Z\1,+nJD*?4o>p,e7nhf@U7aQ8@`6eiiG,(hT
+.Y`a(NLa[nW-*f3V5Oenb__'j7:-e]n.J<#;:Zqt@9Ek1NhAZRFXLEOD`siT-WZ1?
+CH6RE3G>R]RS@Hl2G-DL`R\d1ls&fSX``8S_t=OFX`_LR??]"910W82LO@0d29C?l
+p^NT-g=7M\JRMM1$D:B7c2/L;eW(W08(\d\Mc86(_2[9WmQ6Ls=$<C)iO>Q=MH`m,
+\G]XY(/ID1ZW7rbA,)dfRUgPa2VHg9`bg%a803D%hf%'lF(gs77@_'cAgeVW3f]&_
+/Js2@P0UWb.urX.(,_-6d&(f[C)C6gS`P/q#I5_HDH3k%&>kk8i7@nT]Nn`J]6C((
+rT10N.n5JakmKu8Nak/IdBN(EFqMIM4>sIDEjgFn4QAL,^Wl<EcPr'aI%CQ)l,],m
+M!KD8^P`<lk1uIl[f5a:j>bIqSSZtSs"<m?++]FA$3q<sl+PB7dcal,Q_8,?cO6lH
+YLc"mk<?<PYk2)$oB0]ar__-e]"3IFj]LDS.X.9++jo=5pYY+^0E/T-BRH[kiZN\/
+6h%F+:s)t:BlHh\kc]3-k*`!oE"(.S]uP6lT'P<_N=#0f-EQ!04;*'8M>seN!rO2<
+?=PT#"?Q<Od9k@#J#tI34K'ajTo9.d0HLrip_^1W>M+MQqAHB5IS_28)0LqDXhhJY
+c<[cOF\^o"];OlghkV\_E1u5FfCie7ln3qR;@pL^#2\4$#)_i;*3WC%);>hl2er;A
+&N+BW<`(ncb1UsFYSs^$82Q1NniFTXi54OH-]fXIjiBE"+^["1AYgG9/cp/?cpWpJ
+niZZg8Jn76FFl_I@RmJ$Bcc-4R?3SgI7d$*-KCVR8lDY/8SMH-UdNBPP%$u)&7[9A
+7'gP^c*0i"5:!'nCR6\h8"%J9.jFV_Q1=ug9.=j3j?1gS;H?91<b!n\S=GBK.VhVT
+Yoh23Z$s!a.aD`o)!4_,Q=ldk96SK;VAtqlMN2^Oq+EGI[.'\CqG\hF_T_3&[%*=T
+Gg,ks/1:qRA<\^"bt/@/jm:Nio?k.oWUDt5bl`02b(7nGPr`RBqNph>LJGjQ6"V+X
+T!3g":P*RUk;<om1eLl&H:l->FZF[<3eKou?Ugu:0QcslO4-Lf9rM:#NO(e?9V`U]
+WZ=F$dje-kg-J%S'T&g=nubcg:I"#a``TWLKMcHPjf4kAVWKYB<4]bDCBGB?EsApH
+HKRZXm7*VqZ>ic',?s=g7'.*1N_R+b9<6;kUUBZj=(iO\WpNELFc)G]b5GLO"cf`t
+VR=l6gLVq,+0lRfOP+rR9WL=VZaOJ#=:17&XR1\2PstAsC@bkLdFYdi!ch;N8S;gu
+=-W?+Z-'WiCTZEMR5Hu.gtOng,u(\;erk&Rl%qLh9qSh;En9"!9a30Q9=C'GgHk/=
+6ES1e\;7[r>O!5J054dcpWORSMJH"e?/Vo0/q;[QZ#l_je>/<-daq)OJ_XOV\Q1KA
+("HGS8=<jX"V1r!+t"CBI!C];`#?gX5@AHU+JP"HCZ7B-6?*Ah,ab_0@d057QsMI.
+(r3oGlK*s6SiFa"(DBP+>2dUF3'?uOjl6G'NNsO!a]SLsP^JsX-dG-%F/p$cm%kUU
+b.>c6Ij8N.JW,sS?cY6fB4`M3NZ&BeaS:k(@sh(;nP3c#R?obkb\#`g[P*kjmW.J;
+H^8Bc?t-Z`11a/XRqp#@ck\-$B1kCRo7fNW<P(P,dt+2Ib#HL4'1D%SOe!AmAC=Xs
+,j1]"Ubl+N`4?6KjGcEV1k)7J\rT!h>s"qMNgIm+@n,5n@A2p\T@:B,=m(ag>.)A_
+cZft4BI:QU1A76]](Y3"/PiZghP/G<$YsC';k#VpCXp#r=3[:OXHt7Gfc,O7m(InU
+i:a_1%VL*)o-pQB/)&PlqekWb;3UbJRbkMLBC#?SJTLP4=?@0Jm@E(K2V&W$HKT<X
+/Utb#?FekecPUQ&-]E42%H=r,H!5'7_/pamceAg)jh4_GGqQMb]LPNY?2q,X:Fsjt
+-VX$C6-8`[rT&<DU:W$jUc?a(k<1GpER"#!1>a564H"aSmGXj%(0or_j-B+^7E_8U
+;<BqZX7^?Xc1^<'le5RGm,!-PH3V@SHiLHq?>IpQ:J&f:H`$Q)2;WYFl0:Fd_09e_
+VRkXnd[L+VDU09SGLpBT*(.DZ/o6.95<>[So7Uh\WId%3I,2MD]D6cFc73NJT-XgZ
+'<bYiajq9Jr,3"u)"WFB^c'uDF#a'`kO1&o\mXD'D>\&.ng5a,0E36,I&=aONlTHA
+13B;hUri4h5KZ!9.*d4a/JGl(ZTgu6nbc)_6@RPFnio,=rD0W)5?A<m+"-S4^Ua8k
+0>IGbcW%W"k.TO+^2Wh\oCanKqO+D^M'N#6"*_NMa$+Lh^4ZTq/-mo(nipn55g-FJ
+@I6<:%mSeI^h`*t1]0GD&A&nl5dUbMX;/)^'YP1g^0D>f*#cOR)nJE?^^LZ.Hj["b
+!($Ma[mV!s]GSF_qnWsO_CQ`Oe0D]/*k/KP_?:=bS*e#fZGE%XXAffs/,__l'LK/K
+^7"IVGm$C.'u?[l6KB,kN%V&f,Jr4c61bu2,W\8^+he<<_UJq1F*58l$,OgJ^Q]MO
+S1-_96T<4*_RjU""<GDH4Mq846f^;Fqh%:)4#Z^e7'j$_/3q*X5=G]G^U,sgHqM55
+Vo"rtM-M-YoHV+u4i1`#7-#r;<(TDu"N#f``%51[A*cMZ7O,hh^AKn.*$dqB=[bG-
+7T;cEK:g-,5/dA'_dlV5U`i47Aje1179SchHriR,B0\jW5YPZVXD(*K>X=ld`(R;P
+`(gmi,+8o;_b=N/X>n&o'16#J4*3g/jD_;u-cV*]7jNZ%S8uW^HcF8PaADgAA8als
+J&4$@80il,"G4QCF2[D/7'q-Xm!$-J?c"nm_TZQ3Ul!#XI)_\)_]4\,r"qnV1s!mE
+a?2<$Uc_2\NQ";&aQ/*VBi[BiUV2JuMDQ1Y.3ZBXUTg26#a5aL]NE<rK1^c5b)uKl
+U1-a!^WN:]9!PTmd-OBSY/:Nub-ZCcZ(T7DjiXgQ9#..D7%foPXUnaG4bU'G)kDeT
+Y=j/(9;H4D*(!9&cc_ik,':Xoo)?ia]1"9g*-AiM,cs\_]#rNobZgr;e>1<aM+kk/
+9K]gLUs2PJ50OskbnOI,"OK8iZ;!Bab]3#C<6In8_G'<,9LQnF,YQ?Td_dWj8US`T
+$^+5hR`fg(8rVEJ,fNKrfM+`ic)f&Wm+o\ZbReTn9mkmE/B1BUjA)_G:'BHKb=p+?
+mk*Vi2pC7#'^X"Jfh.e,WJpDn9^p<>k"\3Xc.N4pSFOb7os'J0::0a]eBcGZi66T!
+6"J)6)Q$;G_9U:$ccGk,gu$HUqG*g+c.oMIeE5,X9i&F.c"rP>FS/BbJPH?mc[0;$
+][tK"k0RA\bf%<DAEm#1`DH4,:<aVP%->]lL<qd@:H\a&bo0IH#1(O0d0+tpjTA>t
+9i.YN9.M/^7't>.(JmO=bEV\IZd-uup<c;(;,`]SbotBFc;Gqd;QV(i,qD-d'2m&r
+c]oNqFSjMIrmMlB;Z-O=jTSOF'@)j_:s@iogM>&V.8g<cco!:O2'btO4jm%=d$5[$
+V!V"W0N<`edk+,;,ob-+Zr:62:dmN2*=,?X8lL^>;6;fGm.e`R:="3V:t4c.HFuo`
+<_aAA<$aiW"[gZgq,P+-dOa8)D-G3g:t0n1dj8AM9]smD2,Vlg<S\`kTWSR!Opj':
+Lo?jF`9^O0K3#n##b>g)/T.^#DiegSNl>nd?#EPWF1/c&N9,*&)CJU"U"9#Cf7dt_
+X`)8AEJcnuf8G>a9eP$Hce#"C/6.6,9lc;CJr;/:fM-aM-#_CVaO^;IfR807-$#)9
+L0&YSfEI/`c$n;%6<=&8d'\R&h2kRsPKdBaY[)D(l,QmhQQMK<=c&U"D1U6VRorE$
+=hTbs%;XVPNEGcNfZ`C0,[K'!HJ"2sg.FfdFc/\JUKAh8:jnM[I?3*aDbU\3;Upn4
+Uj,riT\5$r3L,l^K5K>#[9H(?9>.I^>eS8PSlqbk=QQGa'slVb]A'_2gJsW[9t&gD
+M5[8^b"5W9]p`._WE[e[>=G.2?*#QAIG5d`)s+?.]p]F:QJ<LK=q.N%7D<$WS6*+]
+<rL%irL_kFKNlF6h!;Z./Ugl&459_\>RV]ZeHFYbgK[)_g5X)-<BFGCa]TXng>1^`
+'p[M[m9Iof>clN1e[40*[m=#`hMn)[h9t$%Wa4`Kh.>-lh4ib[^>).r>$[WFh3Qiu
+le/Dc?M#Q!A[u)oFPM:a>1K]U24\![gK_[[?IcsNK_A_Xl.bTQ>nu>RIIu9be)'3B
+h,X^9Fm\'s(0X0-h4=RB4dFoq:LC6[@"%]Sc/2nje_9E;@)_om/[*bpqqoi7?fg)$
+Xa/e-csRmH<)s*.IELD!#[hNR@--oejpKtA^Kc41?)=FV^&Lt'(17=CiP<m,ASFls
+)%:$a#Y$6$V.i?aU11srb$^'Wc2(oC!ojIZit.5@L,*,U/tUWMN92pSr\KUa2MrP2
+4'"=teiAc13QL8DMEX%^DE3eJ1ReS)SGkS09)dm"K]@MF(g]5_L.4h=3TG9R?RA1r
+(.1d*(uu/qQo7B6N^qg#6tFQCjOQD%rK:Z^6<pB\cR)Yr?8^fsa(4U=jHO1d%R&nG
+/**bPj6ep=*("0W=<Ei3A_'tXG$@-/A*)J%jh=a?G%+.J>\(iKAr^;32G_1rACfUM
+`9pT:%4u2[C1"DH,sH:.?<?;"=uP5Rhu7KU9GV-`?KP9Bjn6Z+#'=L<F_85(B3WmK
+*b+;t1hZN+jJIK9[Vb's=Q`m*kZ1[Dk'BqnE+X!@=Z1hD(,MBh7:ds]A1f6A[YJFs
+I4c"SB[g>Lk)ra,MW>K<BN@W:rd<sQ)<^-EAmS'Yc?s5Y<p6&nBWcPm?@=.IIUiXi
+jYhDJVDI6j'POXj8LBa8$(BnB"mM=kA(I+.[YN!XHY&e<l1UKZk'u3)G3Q`'Br6DL
+As;F:MWrSNlIM0ap1i[nOQmU-l6`QH2H=AGN+5ncC&XF`rcW#<Z"]e7kUs\eY&.lJ
+XlsZ;CNcW>p:k8.WFi"Mk%88gG(S,u=6jb7CgOjAIV`e[VeK2DC+_7,^5D7"CZdmi
+AT#f[DNJReZ0WOSBILIUm(VgU[d7&@BAU@;G'@bWOR+O@lTX9D[Rf\,[8HXpkJ#a=
+p9AGjXD=Z'icK;%WVcdi)$hc^@]&O"[d.V6.3mCliC<@?7e3P`o:LL(VI&qR*q["W
+p5)95NK3bFG57!gpPs^sNfNe"`q>kYpkb%(MsgZ*TGS]i!q+)2bZ=r9\;Y?TpMa@/
+msN7HLAZ"R_f.Fqn8A_RB+FEicZ&!,n*^!j_Q<4P'&(q0OXBaf`rY^&KCKSfnWa[T
+;1W\1%;!j*EOFcoh[@2bs7,nsEIS5_rtm<E)Gg)QTdL4e(DC_b'6(,g:58H1f+.94
+,B@u2EmG`@IjO[++E9=?EAoCf<t=b5%e4`QN7TQM&Ti%@0(2jT%SnDB*O]m94)s^&
+Es3<L%jLPY2=l#PEo0,<O!X@LEq/#oE^$"5jNI'@5Oom]oT(s#ml^6G&b<\+EBc4#
+hb2u_7UnqY'0e'gO"PPs%s0?on0pbHa$EQU=*1;(nb60Ik<F$E204OPE<dBS554Oo
+?ZLWtp#cYPO%o2C%eD8JE_f[,QOrj$9_/cN:q'R"a#%]^5kQc%G)'Ds<uU\6=7<UQ
+Famt7f+N8UXEEDsp'5LbG9uurB0:)Zo8b5A2fr^l2YTV`p1JVl`<Yu66$9YVop$57
+Y>f\ZEcoD\G#*Y^-[0asDtnr:FWX_1+*r,_??\V=FT5V<T3QVbB(u#'F?a4+haD1f
+HhKgKFGGqO?\\4aNd,^qFOtm3s+:$TKCoa4(\]i\YE3ts61nTAFQYa]`tWa44ul,;
+pJKH8=-r[5TQoomH68@"7n%X2H?iF'q.HRNGFs/9Vt[*b_3]e#5C.S;KNVAU'L)\<
+7df`lQ?=N(H]MG"mg-/[mVkE.n\;d1?bZ,]^\FDeo=r*25Jlm@_XH['os_p0#K?.U
+`UG7qn!D,aa3!fe_Yfb79,GG#O3[6e_XObGnu'J)7h,C2]^_WDDTBcp\'<+bchf*,
+r-)n(T@[49f_$'9o4QMM^VG3JfCo6prK"jD-P_"nb&JNBn+YE&J)U=/kC*qcIXa_6
+Vg3\4jSlkcIOEQh?fh7[omV\GrVqBH[r[#ub^Me1s&\!'?Pe*no^S"6I\5kCL\^p&
+*IYE\naFEr#K?d`J.4mK&[:%UD$Gt(6P4DI#W!#2+Y^EB$u@bQ`8Qg:ZpH&GNQ%Y(
+M$-j$&WKA:ni9Ba4Y;5E`t=^j3,^I=b[tldUtB6,S;_(O8aKUa+/6RUe4C(?O\Lb_
+,gk<L-4<_<<GA4S>k4R]Vok[_kuAd56F#4`dlRtWF'+Q*Wc0I7B%q=:`MXE4\AmK&
+Z]4?/&\,^>2Sn9%`B4TQeR5doC)=I7Z@c,g_(sPWUoQG<_p5IX4Ntu=5LRJ'0M=<2
+*LG'l1\Eni>:$Z'd'`O_L(eJ`f&&FVCLsO'X/P/Mf1T/r21NhXDqp@r$V,s"nE=*q
+hX8.hX7\Ro412-2HJH[>*Eh5(fr+K-X^0)AHZ@4"i%k86NYCc>2m*f`qCrJ4MT`Nu
+1Vi-2%ia*l\o)<3m4bc7#5#[oZi[0jNcLla57i06r4f;mg;6#?=DlVOc@cK56r6iJ
+aMon)Tae)"]<_T%&5+X73Da3G#=`MT,6l2.;m='SOaD3i]FaFd#t-M;(rA\'9Nol_
+lf;1_7F))lr@67>UDg>"(i:6XYuI7Z3=n6R+&&nDd(^afWd'=q/dQ!uW0@,$KhtB!
+!ia6HSI3qEm?4M=\TDTGUf%g?+[j\A!dRGdo[O[E;lJe0:f<PN1IkEP'dVtm1c73i
+;tX-t<)tl!CK=L.NFti72'$C0f%("E@96IR0H!cr>E`CH<]uXPfQK\XBik#)K54XK
+I>q(Wo]9:H=r(D#?WWR7Rr2IHh7mFOQ?B*D=dKTR=^>*glZ6B67G2K^=67P?h=ZKl
+Hf*F<f72\de_>L\(S/0h?]En#@U`:?f8A*\]p1fG\D?h::tX=9N^+HP,qIt8204jV
+R2)-V>hOi>R9;PI/X>F#73Rsp3OU`6A9e)RMJ.91K:c[8#%+3=3bE$&B"E_8U1jCh
+J#[4/`ga)EqW=QVC3heEZ"n\5]<c;M7`1e\]4S+JCAV&l[qpDgbI_Tf`m_V<GjaJ"
+Bfh(P^h(*d#JP)&p?T\8r+>Q@Dg[<:P4/<=&'8fRV\dTt]]UB_E]jXT(im:00@=i(
+-TBRs]k9R]F?PCKV/<n)$c.#a-@,mZ?+5%5GQ$)afl]HU9@S(_-^3S5IV2mJFoI/+
+l#q,TCZK\%\$Ot:I]&+iEiLtgM5(Mh.\m8rGLO)#I<XH$rVlpHpp`PHGPWf(ZAJL-
++'-8XPM?+eca!S]2urm7':s]8+pC5uh#j7%$R&=f$,Hl."^iSbK.oIu_&+a%i;<D)
+0Er$'E+K0G49^0FWSkT`;[Hk80SE9F&jU,4rF*>6LG/?16YLfRiVY9_E&%njk_fur
+4@4iXi[)L@Rh$]:9StPc.C+2T#GIqpM,@;*6Ptdu,5`dA&@sU73&)3o4CF!XW\)63
+V&Q/)E/G7M0#KZd(Sb5EKQ1`ca/H<_@r-USn_-+GM$"orm"gZW$:;g*%jRlDOHFQ5
+3QT;D@Ugi,P72V,agOhiA9%^"13j^/#\r`Q1j,'=!`9[m8Lbq6YBnX"(Wolj-tHSg
+Q*P.091SY.Uu]"Lo$1Z9WJ`8Qbe9D7elYHLFY[PK]/J+fB2(sbG\/e_RPR9Hc$>p8
+,lGiPo86q]M+9G$4PQA=g20R;dlXCJkajT1E_[Ls4QhC1Ss-Tn::ZiQVj.%M1JWAF
+$4ArYm.Hp6)M*uA^I"js#b(?WLJSlq6Y=:DT9N)g;5tL(W0H>;FGc.,ao*q:RMpQa
+.0)PUaZ]u,1mg,>QiegL3,,2jV_g#qd<^"$l0T35Pm3IOC26ZX%7Dp.+KEqcM,OaM
+:8i9[UJn1n:F\M,W`6^&<I0@#.`GGg'nWX<qMSD?2+ai+G-k97cW]WD5-<A8YuRg_
+:b04tY-kRJf1P.,lSV><eaBru>3Ah"m>/!3il0NLs'Y2AI'L*U_cR9%@'#WUYdA#[
+`G5QSm"L_32KHuAgIl!jNMrqEP0qs@2f#L+R^P,3bhGctBJ$?f[l2+D>AIkhXh@ZB
+G2hH6].%\NrOfZ7.`GUBHZC`ebdB?(k1f3sE@su<](ZQkesi^^/m[2D2fe9A9=JoD
+rR/)tWmBO;a*KA/cFrsupt]`KB5_)8]f56Qh@'()YPmt*3!0*9b:e?!*Wj$b.g+^'
+'7DQ_pq_2B$/mESK.Ss__&-4XZA^SYn9,eh=GI:C9M:)DrS>F.WtAeL0oIbLVn/63
+%HAEuMt*AN``L=`ibVP=EQ1,\R$/WKI!pr//bd;0gE,@eF,P$=9>B-j+QU\?8s0cZ
+.9*mE;c%701At7t1bUT9Cs,[s3JkuD#;hZ=el?d*4O)t430?>dS[.rscS]o-jkT['
+o-T![q=GP;I/R<W2MKL\UIF=i)k8a6FOE200k[U=TCfjKdlJ"2k^:W8FJalBg5AX>
+9f8oWk*sbeX%-pL+fh^<MUi]$:[25$WV+!)eJbVslJ6ffp&:-*H@!kMSI)R.m]tJ+
+dphT*F0@KN^=kXNC$[F<YqoG+ft,pTl]&NZ[][j/4*,E/mE<!trm9I_96KVrgU4L#
+fZi/dF7-0r]/RIlh`J`"mOdV42u_st4/75mm,bo?*qnPSj+Zs))o"?bo&0EJM=<,J
+_)QoKfpjjVn?+jn38Y5+r/6[,%Pu&60,iK5K9c"&>KODsZ.St!R.@AE`]:4Njo!kD
+Cd)dPH.P:BSI:d+:1;:k%mAYEs+p<m:Xcl#;!AunSb/LfeG5^NlPh4QnSYh^]'hWE
+r@bDFm`2tdVafj??`NgkQ.e;Q6gagS[s$'Ie[+C?."iNkS.KO3Hi77>29Wh^rsNI%
+3W\a4-cD9W(/[2.8Fbd4aH8\7jf55F+^S6pp^]1D]GI67IV9UEcV*K72lN[hPLFj(
+5?5C8WpsE:PVS;*k^A5in=Jp_HQR=s4l='L^@T9j:Dr]8LWK%Y/'NAoMt=YId.on!
+jo%uEkl%EBq`eHHrGOdl]g(HLhZrLps3(4$:ZhU?UXf=X^\^0dlM\K@q#:jFqnE[8
+qd7hLs3LE=:Up5hcMOgN!)M2HO:M?;k5Z%M!>$%Jcg(WCqZ2cL!`/gtciX%t$Nj3=
+"-=T*:a6)S-Nao!"Ag`ScnbH:2[*#>"ctqNcpJ!K7g0E>rss#ODlX*S!sUGb#EX!1
+Y^ZiGHM4RA#V^Z3E+]AO:C0jU#nWF/E1[E_P6qkj"L*pod&.4IUC#;J!jI@d:qHRD
+8INn5"L-&XOJrZ8dgZl)%8bdgOLYhIislX*$ZPD?0:<=>jUY2P$dc'fd'F4$D[6pY
+#13kZd.$s0o+2K#&Wm_3;#(ZA^C[X^%riU&d)?/#0_6ph-\>t!U8eF_CD9CQ'T1ud
+ao<(`3>Fpa'giWLO[BgtW>3_Q(3*n"Z#67TBIApM.1p_IEI/N7EtpEaW3Ldp;1`?k
+NWr@5)%hcAZ(Dd]XVnC3)DQXYd=iKYD&Z>l)j,7^&Y0lgM&]BP*"f4kOeEd-V%iI/
+*KdrSdD$]!Y9$QI*YHF6dE<Sn_]KK>+-G-YdA\"("!#_m*O5\gd8qJ'?Qi9^*V'^a
+dM!f;(Eu`r*\mU7E\AK>+!T,l*qDB71,C"m59I1$+7^X$P#!=N;^;uK,8+3*;HG-,
+@jKJM,nau>;K!kEB-kuM-5(AH;L^$V.jksb-W5REP)h!=MD>d/+Hi9;;9pLCUF#J"
+-aKd%19W-IKbomi/!;>3dVUL4OXsCq//!djdZ#f@ZRlf@/Q/JrdbcPfj"8[e/+R+#
+ZIpaKmk7S>0,""1Eq:sts"(J]/TV:PEs"+Zq_+,i0@L^k;]d_m)_mK\.MD%u1D;Ik
+,;W7G1(u`);_'=r0.c]*1ih&$1D)ILT/9JJ.[*deF'g`p3A`Nt1t*I';e%_KiAT&>
+)%enR@c%k$O9Z,.3/Y=-b2kVis#E_43J7JpK+g8^X#^<=3`CenWi8%A4OaEI4$k;U
+e%[sXO$$#N44Cf'1W_Xud\sLr##i?#lE*5@h*#hO5*Mm.e#tqkd6CRM5Ej8T'>m&`
+eNd'd5SN*:1\X0Kqa"0\5a1M"e*fU:o0JTG6BhjE<!,J:+%'!P6^/q%e)`a"6U9,`
+6PL&!'GEnL(I_:B6e!n\PUf3;01FAd3OD^Se5o-S>=MRN8!H)*e3?H&@n9R38/,E%
+P^>t9In<Ul3](bHe8n4rG=e$[8lUR<e;Hq`CJ,A*99bc9e=/M*\O<f=9U(N0FN$j/
+dn4_u9!m2Bo\W:ugJ&?j9iUFQPiGEDo1S`M9Jl35'`Up-qb>TC:K7cuPn-[?O&4@C
+;&($I<,5?r,>lu=;A@AP<>/2o+&c/i;jB"6<BjBH6W2E(7+EqcF\bhUku2_+;mfh/
+FZi^2b=#=%<E2sr2.'B`cW9^A=-[&meR;N:CKD7%=&cS0[>.hkBhm3D7$X*7'o?)d
+!Elg)>"ON]'s1FMNE$_"<)c4Di+N=)%6.::VP%t0Q-QD[d\1g7YgqI+[GEVqhEWsX
+.$`pE[H]-)mO8nB>cPDCU(q$Xr2s'(?o?27((XdG'4$n>TCr6h<XW@P)dX:-?C!*K
+(,'$\1LP@]@27=&ed5k&4(2/SA<oSnejj/794_."AX68'ei.!f=(W4\@[:e=eo,%6
+F(86p@uE?V2BQTJ@q&JcAl`,JQB,Y/P@kYtB3(L7QChg?j^_DAC6kc/(9;3dY@Z:k
+CR2GD(11cV_eGFWC"CIB(=%,iV-_`TD3hSHf"Gr:_/$LBC\G_bQLA_>R;I*>D79=Y
+pA]"h")bR/D`8&?QLSr1ok`4nEL.JY(E7B2+)dHnEE<Zjf.V/G1NJe@E0gfKf0=<-
+6ZX&6F&u"UQAKQ^.s.+ZFOs`>(56G2;f+HTE]7EFf3`^1-[/WNGF)*Lf5l+ZD0Qk4
+FB=*.2fX)O=a=(SH'`Gg(QW6ROa7h7GaF,/f;j-tGC*D<H^B5/f;!LjVfc(II!7`$
+2PYTM@sp;PI'tqE(X7%<d<:l2HM<bTf:.7+T7!!uI92V^\*I]B^]n?=9l.@F8n!8X
+EIg`1JVfkIatnVOH\)>)JjP$?Jn]hR5D'#/K0g6(Qp(]]B7q#;KNK%DfGfM]+,*fA
+KpX6AQn*mC08:<"L0-BhQog&T6\.4>KXc;\G]AL`:P\_"VcZ*;fStZr8Vm/.M-,Ce
+$/(0FJV]\gM>3KrfU[ne=,T[JMHGdj32_Tm_i,GHXLPHlQsYgiB8p#3NL5EYR&c5!
+To@X1N*+8W\AsVso8aaWL,epgf_^E5s,^@cLH,U$faEf7[uSRH9)-)[3>ms(iK@=9
+OZ;N^\?V.k'pBKrOngGeR3@`=3KcBmPZZD!R89("f9I4TPuue+R9u642innEP.>@m
+)*aFTF-)f.QWZtIflrPrH^C.QPBg)o)1RtjPF's`R9?#IR9Q'sT9u%5R[L(@=c8I=
+YF+"<RG#3@).T+<^REirRi/8sfsdGRbF=p;S(ZPd)/#J-hk"!2SJg%M=m)C0o:;<8
+T:%@()?6:s".r`nT,J)rq-frkFck?5P1gM6=pL\Q4e2?pTt,rORMh=#/XndCS6>TZ
+g*<C3-_3:[S_=gB>",34.A]'_V7I>933RjAIpA8U6^TVjpc#)&4/Wo[VcnG#H@;[%
+JUok-W*#%X\-]+&LT('9J\$uB3g5,@TrImRW`lH\3iAsec)R5#WnP(c)R"_gZ`DfN
+X&pUIR`he$\#e44XW#fn>0j=>Dm!8fY*sjC)V_FKNN=&5XBNN"]#V"Ce$*$5YaXUU
+)X"@Dl`jX^YhJ]RReO#>qlh"=JpRU*>6^B2*O>PkZ?n1/\1b1X5I9*3Zl4"mgDdB/
+0st4IZTDC!Rn'm@A%!=L[$sk"gJb?R*O.\MZ$Ui,4(l$,=1DIA\=8,UqgYn5Mn'd^
+\XSqpS"$u.T=<RM\soV-)f)ldZaQ?A]3DnZRrc-pO1JQ9]%bE?)o&o;\%Q"p]Na"$
+gY9B1hnE=T]\DV`gZuNl_nMW7^Dm'b>EuoAs1)@[^mjf.)Paq"#JiL&_&GhYr!gD'
+,Je]^]ppN5S/K3!"2C?b^YCoegJPld-cB7G^q<=W*)FFV;o8DT`I(7o]EQ:Nou5]B
+`]S%SS8Z=#F2T#;``u`f*-&gm<QH/&aBVlY4DDmjCOfskJAYOpAKcZ&fn4[IK06&a
+r2YI_Y?X2rb8<am]Xc5\'?bcsb^@Bcgr[b[bCP&kbrj7qSDT2dgW]F3c.p^lR*Eq3
+ld$CmcWp(fS>FRPXjC=\d%%ep*:M8ppX*7Gd@C*\gr%Oq"4CH[d[^coh%,X]1XWks
+c8ZokI50/544-2]d="[:SNkTRYL@nAe3)@4rEIhn-e;QRet"JFh-#>X6.[,GeNHLU
+h+cNB;2`,3fNi">h.PC]CY<!3fq!29rJT=!<S(NSg)[6:SZgS7PM0;lgRWuOh1s^T
+]A-],gmu@:h8e=lbM?IMgE"c!h:LL(gY6##g`;I4h7)1qn)%FBh4=;th>?&7s572c
+hOU.n*UDUS'AsoJi1:nGh4NZ_&)ghBiLVRZ?6eGMHf6#!j'?$FhDaGc1ZNoljIRIS
+hE0g?1QgLgjBb45hFHW*#NOV<k'g=lr\<RWC!n&6jkb@H*d-WEJ*0"NkC$Xu^.[Tp
+PNBN0ke;c8*`)$,UZnA,l5imh?E`XcNRsbmlQ0R%?D$DPXm>qllo`sOB?SEL/ti8W
+UgDf,52GUtj6daSmU#5IQl#2IoC!Nkmp>n[QlkeS"7R/>n6ZRmQm_C\'Cd-qnX)9*
+?Q4gXkOMsJnt,UHhZ*0h#P2:5o:HijdsLK^61OsqKE!+eT1AP293a\Woj:YjT3(Ye
+)tJJko"Su2s)7KnF7Xm*o=oYDs*sT(KCp=Ap"t]$+(+_Dc1[crp>;A6+.r:7U\CCY
+pYW%H+0YHHZhU0%ptr^Z+-65",PdtPq;9Bl+4'dje,#]gqVU')+5cs&j85J3qqp`;
++2@_U/,Z%6r87>TU&Z;QNJ>:P?o2OQ)2j6R+gB`eD1k6LOQ\5:'+9Q1iXmT_<X0Ft
+`hCf5*.eJ$PK)SO)-g?F+-oKq;[C<>B.fXoAi#8pl?tdaaWm#W,c6>FRS[]2qCHr\
+,+Znl'RH$"QWB^*lS=@2EfFD-d]>4HrK=3jUs<g8Bi.Wr<4LWKQTH5=Vf\QcB%Isg
+]%;;@?toBtop5JoWSd0S]L<2=I)og'<8=>i06t1fZWKkdG$ZpA6#sH.PU@';L>[16
+4\3M*Ri)WC\KSK+2DH0:ZF_+Mf&NpM%L*d?[gPMW*95':]k5Ss38&C/6]GA2EMUM8
+\m+"3gOW;a:<,J%YE"%;o6*.LT3TlV0\gFJ)p3?mE];Y4HMOa+^@8+_6AQVqb+!e*
+^.`clq8"Z#Wp)K\>:PFjN\h<H^a_GNO?X9Q#m.Z!CWR#2&7]`#`2M=+rhq!P[1'\;
+KEUbYD@?%B`pj0QqnaIk'SRZ,3hY-9;&Eo)LCs(j,f6LMMB#4/b_-h06StBr8P/tr
+PWbs=\J;g:SA9nI',j^Jb_R4c2*;N*;)V'$1sVC\do4FKaYH!I0hkCeHTt-.,1S4t
+';?L,cEkb-5XVmEiC:pF9Y3ig;N2G/LD.&#V9M`J.c!j@D)R\XBk7r5dgeN,(Y)MS
+1E"ZhD#IJZ1Yh(l8TZuu*6[S88;C0o@W,,oeHGn<eFl%Yh+Q;QX\8riQ$++YZn6o,
+,rSJQCS5[TI:ZNFV7/>7ob(,-:Y,K:>KJg04Y#5a>^:9g2jLXg<Hl-i@pa4eqejk`
+NIadZo#lr>LD1K7QJZ,YXa8llFd[YdQo2d!\[VhgJR"MCO,KZ2D>d5S(<pWR@Ni0I
+EoGR9GDbFIVI=Su(FBl<=uVHtRFo$@2je0ENN&UOiPj+Xkh8HWKO?cG<GB^fL4a=%
+Q$ueb8/1c)2X+8&CF&.]d]ZGW[4Y7J=LZSZY#6*3T:/mXmLQj33c6,\mMY^9X'7V:
+=hioW'CinB2K\mfV`8jt^#`Jd*Pg\tB&/",HB)j$m#^Y[Cgl!c\Wq1q<niklqpj**
+k52jF]2bCb'qal?p<sND<dt@XA)'94I.HN7-eN@.V%qZjh?Q@$g-,*\_=LN23.]Xr
+(Q42rBQm&/:c6QtJG"!Wk:lSZ<XC^2SI_gXG2E1mUO3pqG9l]-rtk4j^IGL">+Ro^
+JGmaAb>U(iJ$8$!oLjN>J?99g0ZMcA)8c2c$<dBVp(IFtnf;l=g#5/_(<VnfqLR!"
+p:+cGQeGk5IO+Q;O>V.ffP)"=8NlgEBOL*4J2LEhp)Gu8DWMLA3JXc'*O7#i&DuP5
+:Jdb0_kh2_O]j>mb-iG'fP4WbS4?-_!\1j=N")2&>s/c;A4="2',!rWMCU_B7YMj#
+R1sI^0d1p67Y_d]>[WQ;VC+gRRha^(A-WOg.'';q*m,ojMm4$;aG*D(j/cFE;.;i4
+Bcdsto$`Oq#nFoW3fN(bS;P_B0ZaU,&=4B2O"lYcYk_3;+e4LMne`=W\>(RAP]T/F
+i`I[u*@TW8PaB`h=X88K/>OI1Mrg+-``X:LV#8#h0B,r)[A>],>_/20?=Lt>5ffbm
+-CJXaBu`d5&#Cf.RaM3k8=<[5UJb6\d`staR40qfCu^e%Q;^HPHTPa0`1@V\H-DXc
+.caQKSF@GGc5H9s*dm3C'5fQ\3<:J$I.NipSoE)G*A8eZ$&d908BRqu1$+@CSb/M1
+b=F?NArO9jdFs^ZPW_Os>f32`:6S%**@;r:jJDLoR8CIA;WZDYShk,3c,qae-L!Xk
+PNJQ2Gul\!bj0Bb??jn`/Nd`V/!eFhE75-f8#iZ^:3@V?cPcgVUl-=`PS*`38e2-&
+?"B_2nu1#0ND+(m'<,!CRT0'Y/gcPtP#@IN;HfrTl]d0q<!mEkLVku"%/,I@g;R.X
+q.?]B;6@6La\b,A$g9H#XEHM.;@9N`CY^q1ecsN$af/__FW7%i!nYotcWk"W5(t`f
+S^i!s=6"_-Yh&4$=lr.VCur!tG(iW9)hASQr6_[QhMB3-'+9q:&=2B(n2*+1(gtcn
+]<[M;:2AHKb(]5.(W,F$$fsf19nL*YReiZrj_`)0rC2#'oO$/#J>#uU#'^uShc=*6
+<h8fWQduqabPn=l>]%1F0+-C%msK%RlpIbu"_#$:LJ?2e_@=BYi:K([n9,%\pX9R\
+B?Q,U`WX:VQPJPN4an[E0Z:IIg>i?YIjYFYS645@iV[hM0chZO=D!0G.t`h^L,Qn.
+>:V$OEJ<oE<6)GN-ftS"O"n?_ar$m1AkB%iY-q4_\WG/#/+l'r<^`BZh`!GUc$:i=
+:dqml1I;ND^[m*_cZpluA@n2"Z:6Ib(-=_>bc?s^Ss@So3r7s^B:Q7c:!pO*,#_bf
+M6b:qaI8Z^Bh[EI$GJ1?ont)0r52jH7Z<hipKUrt%fl1?S4.*7+CDeYTO+5!cPRHh
+OR43i.HX1ORe&%DGYbD_eelLHf.Z8KENF<>UsrQ9<FUATYVfa^ft#.*D4L-u1HqMe
+R/_)B>mIXA`VJ#1])Q86"1%U.V9W;CGO56A[!*QmeD$BtC-EB6Z)7BLH09/.Cdl+K
+5&/sE01,.Q/Y%])?.O>fAF_;[^NOeKcl:G?mA<=d\$7XDH7*9EH!/@3[LJX0ha-Wu
+S"Fl9iRU,sKkuc\aZ-1fiAqL.D-X3M=T5SUjeI!4Sfu2N[SZ&=f7WYn;4BT^L?(BC
+XRJCQ`:9`F3?&JEkrhP^."6m;e"]8!hM$r6#2SL2=de_"1KZY=:#-]]W2OT"_tliE
+kfEnq=AfcRZf*k5gA:>H+"8f15ViW?YKYC7Ds$n-ilHRl9p?/OU'RBfd9`L<HA0u9
+M=7BXI_3uO^LPQ;#*LGWQT"\cOm+XQ[q&'gep@8]jsN+*pHKZ.ZTi$i1rm1?IflkN
+V5NapWIXfaF5p)X:k4"5dc+V`mH^C-l$Y-/pK)jhH69JUIJ"NW^8L(-+3!S2HcZ'@
+hT1*rU\fJorY^(4(3A:q'2H:-r>HX95E"(+>Qd<%kG`7M]_h63HiFFWe-`h;5eI1_
+/,H(f%hVq^_#t(Z9B&3h@)4Xb^dIc@$h-E-e\N/95[5"_e*F')!'es4^n^nD"9GsK
+n.RV\^FT4IqtZWnk!Ckq_AM)mN#f\A+2F$=^dJUBPTW8e]0N.p_CP4:PSq>roK=0I
+^ap0dMm,DK(-.%$&c;@:Ca?Qm2*^.@5MRVPbNce--)h;._]$-RbO7f?2T"KR6c9eX
+;u]1"h*QK#_4oOGN%,MtiPLO)6&Y6L9?'<B6:1k#5AX#rCdl8D.R+%J6i70U]K&=-
+g-A%f4i@^r>XZ2fs$PN0_sC8hN)-1ch*OLp\0N*54?L=M7lNOm7KC<BZq/+,>rsSS
+`3a)EF8&$QAu#8&7C.EZbY^ht8k-Hl6mJVEN)`=$l:#Ll61^a:A1PY^,!Vkq`QWEn
+r!:(0BLWt271:]^g[7>n;8aGC`jBnW/,hn(I_jfV`ghOnP\\:/6:6,:6sNY[oRKF3
+K=k/j60q%ZMha`kI)W0j5P0*;]ST)<E5GfU6/6dmN"&$?+NM-I8CW,\>WPFa@6H_Y
+]SU82>!32)R`:.$]Sk=CY_0Tu*&8A08d"iNCLbL9d`NKYb"=3W>_L5IF%T\T8j"'8
+Hr\=Z.6N9E8nhp1M(qV:1J2?]b%UE>pn17sT#unXb<2lK[&U8k[Rl]3#b7iN>c*Ck
+VTZ#8b7(^LJl56H\\/uV9C0+0N3Gq'&BdJ7bQOY5Ei;Z7j@_&?8j`_Sr2[u)`iV);
+_;riVS>_j'XisIZ9"^'TgrW6C^J#UlbN-dh,^2qhcc_Qr9?ZZr*8/6jd`d*99gmPu
+<7=Rkf#&cgbhT/?,fNIq(<a)8br\bGXNVTQk/rYG]sQ$ZPIJgOlG\.o9(]e\/Efg`
+jipc^)B@'u<$k<J\AV@V6Bq"5]IM.D__V/Y:1VkhFR`*Wi#*7(:IIt(;@lV<j@V8Q
+:V<N"Uo-l]+ARmdbfp:8oGpb=gr%@p:>1@q`6lpNZHnd)d"MkQ*7mm6fM>3"9sDa`
+`=^??ma*D*d*2@5h"/Si_U3K9V>U>?;^9O)):;ZF;9\B$qc:tD(t%FM4'_;Jj<)]r
+(IH(\dB)1`,l:Gu&5.E0;M5D%Pm'rt6VB!';G@kP<=VY9qGELTdX:W-bns7T,Z2N5
+;KXQgjRJsLnP&<nc4qkWoZU2ad8E+Z;Z.q>eM'Wr0N+?c:[LErV"N)g6F346d"OX/
+"Un<57T&Oh^LYsF,n<gX:e\hbe)a6PN<<)_'2sih:i/PC][0IA$)#fO;+44-m24=N
+-;t?E<#m_o,nj6H'2R)Nd'Y,ujYnU$2:@aF<R"Xp/E9F>ld/$VLeO7rYSn!$nCDU?
+<b/K[UW\52;HC?Vf#qY4"`:!QDb#m,f(@2<!NFZNX4Jq@^&;qK20"g;EKCWLO%"7o
+<Gb!7W)o(Pf)_5i"=DaVHF:tdds-`$*HY)"H<:h6f?JuN?%poV^t='^95SWLI#h>4
+H.Fit=4I<'F_0.@F&sB'=TsB/o-r9cHqfTD<>C>8c':I%J45`_=[e0LD3;aOQ<*rE
+=Y2&Tg`"k!O]MOZfI`)I22#,N/6M;+4"[8["aJ_-?.c!J>(jgr@Qdkb9NiI;fum4G
+@g$!#pKBRkffbj/"eAgs#heKg>1AI5Q)!!NY$-6#gNBJuorV1.Z<7nRgJ+@U-(_H6
+UKdDh=f%tLN&+[$\([A1gJ*-#V6UnCNEWAO>5aoF*2d&46X05g>;^Jq/Yu.SEQP&#
+[-b<Vou()]_3Fo+h)3O*os*7C(>S#ZfJTDXMht]PgKZ>H<gASBS^1PP);KA%7]!3@
+S]KT7g=sm.gBGgUV:Jl$cX'7ug9%bd4c7llg>5!B)4et-Fe2onTA>/Qg\'76e_As*
+j]nYS;.\24D;WeWl/-P;hOX8O2=]N<dp9r8hMIr[%H1RBQ.o%(>HO[V%6Rl!Zea06
+hbF>ZQ1eOTkhEeXi.^[=<S:TQ^YZs,i4\tojbR;eZ<rMV@0N:Z?4LA>AR%D.i75p+
+h::9AP?cq.h0$'^/XP3tlRq<6hDQ+d?*rJE_Vg,t@>mog%H1\1$s]qF?cFBuD?Snc
+!*o4;?lcW5/`C,#a'ek\@Ut9#7;0N!)?HN]UF;(2$le4!r`53Rioh4^-"fBL2dchL
+=:R4Aei@'&3_^AO3-IFq%Qt=D4Vn#]$'%)Q:-9O$65YGD5)r#;ej9o864nr8$C3g]
+VEn]=2Df;EA2A_rehCXQhW3@WjC"$Z+Uhp'9u`2kjDIcNY"<2.+(PRWR8,nU:0(pA
+<_&HJA0+ueXOuVu:He\D%t7XA]/sQk=QLl6A,]^LVIS`M=]slojE=hd(0>)r]Ol1T
+B$O*4<bbY6;!)(Fji152IUq5O?pR8'8g[VP<^YuW5j%KMf&h.M5!ie_>8!69A]@=)
+/l7`)@:k4,A[XecN_nnn=Cu/qjh>_/G'u^f<+M"nBB1Q)g9YIq:1u8%AHn-,Y(#Ts
+&SV/Mh?K&)5'?(TKkCm5BL:Qh^0Kj@Dc-4!Bne(seplf$@HVqLj5uS?RloqQB'@Nq
+48*r6VHdY\IHX^gk/O(Yc?a/1Q"?P^C$)-^Q;q[sO\b+=Be3(nAoMJPXm#2=C1]Bg
+I]MZ>qe?i3kQ[qt-=^g4W+U7"lLqPsV?lK]B5!$ql0`o_?FXb\^M84Wl#*Ro[T%&i
+<9G<VC-88)^7T1iH0_&$CZ9s3^9hSI>&!5-jsEpg-GJ]Pa5CjOlTRc(^8YkELth?'
+C3Gj.rm,8tf0_IDCTb,+Na-F4X)-pim7+&:f$Hr_QL(2!D(]15)]7iaOR$MMm-`_H
+#2A2kNbf3"a)K"6Y/T>%;!Lm&Ci6IpNlQ!kjm.r\e=OhNG4'7UAT$A(jUT.FNgDcO
+l=1U0NQ%N"-MbFU1=E$QCpS3)p+CoV3q*(.Dt9o<$Q8Fa%WFU!n.(@q?@)*YkO;7P
+E!D'dIRN[S8+:sun82e,hFd:o5OdMpnGY`D%S#t012suAAVUW_<Q/p;WpkKL:,`Hf
+h\pIc($=*]n/E5+-QQ\%#OqFGnRip)pEB(_DK//JEA&U,7iu`K&TPdZnc($%NsF`Q
+,BBA"EISqPV]'Rc=n+-hEsE]UV=jAV).S^4jYn`1Il((?0l#k\o&g0t-Sb/S,Ogu[
+o(Nc9S\9#m$S'IbDF[!6?=S#"0_?/?:H(7ScRP].-?OG`E6f;YDa!`);05;Zo;54R
+4qD^!5''Kho4Jp5#<28k$uBQOo]J!ss&DN!6"eM@nh32t7mUtC-1sJpFDainf(^\4
+9Cu:&FFQDr(J/5B3HZl^FT4mSk>lVY4)>^7Br<h3:L`V89l7peEN`nr#A!)nBm">L
+jj+G1Y<[1'=`>0oFh\#thELZ=BCsp<p?uU:Yh^855P<LIEo1/Ak)+A4IWSY0pD8$t
+(NWr5@X'd+FshNGDf0YmDg5ngBkM.(+!Gd(r:`]bpK)fc0.-C:J9Ioip0WJsc[5H4
+]QV34EOTk,s*46UBR,)oD3'R!:69\?7V,A1FMCd@DisbFM"hL6pm4-f-[L&VN+6c8
+P$],O=uc&MJpE-&H%L?dT9=K?PBaijFIu3_(LLdpJ,6@@q$24lLREFkNqA:\GG,+b
+IrBD#?2BnSG7U\L3n&(uUSt'bFac#_[X='X46$R\V.TT!f)-qjoDtU&E$rVNGK)8u
+`8ucpAEV'G(Wh!#0)VS2r3f#k[sS&07f9\br3f/oVFg]_9)Qt#r2)aX:AX,)f)3Qa
+I>>OHYKLK9cfHOt&Kf(Fn(MD]desElrI<dI^Y`QdbC)i=r^Yo<pZ;A"5lNQnrdVrM
+2qe/lMgi.YGo,iGY@7Ejq.P9Hr?g%m5N[DZiT6]^s#,3%&,#k(mdYMVI>_'QGM`>5
+<rN?gs#s-UkMlNO)[HGf5\pXa#(n(<e3G`-NPl%R/05H4)ag9[BLF<f%Z!RuE5Amk
+,8l3Q@IcDQfPr*r7Y\gK4LQXpQ:.RrW9i4e!fP?Y,AEt98O&e=,=?I0`dB\=bb:32
+'RXdPRaB(I$8e%`4f_+g1?f6g;]Mmd.^GKPQC2BP>%uR"'cq@0VU):7WjL47-*1%"
+j""Z+"^d-fm8`JL#(LNeh.Ui0`2=VRZ<Q>>=Z-mYMTjeNGIdXh2*f+iY'0`6[j*NT
+a_<ds.8M[H]2^[(I*ga[I`,IW2QX&?98ppWEI,1PF&0[-m4UKFF\;bE_:lA?^$d`,
+`5u_>3m?al+.'`eWa#KV,(H5mBY/Rs?PeL_\7RVnSo:X,d/A+QYG9I@][$[FdP_W+
+%bnUW,A-m6c,27"ZOX"ls!9;@jT<899FC7+N5PpX4H$R5c*m-m+Tf@#HM$MeN\h1B
+51+`PgpYRFEsjDc`%KKW&VN'K6W'Wo,"E37CC%8.U6clEOlRAq8BZBD+[cj:7]SqN
+]E9`LO(-u]WGu`).EligXS]C<9)T^4d]7K88eQN",;rGa')0^&oRcqan9!<p6;-s<
+a2uI$k:9=?Pc6JpP/G089=0%90I_&V*u</c3sqf,8c,ZZ39fg!56dAN9YaV8BZu9e
+CILARVmUi32,s76>cBWHU.[FGl90<i3q_MkSCiD""(Si!3pU:\Q==WB<\fY`P1fNF
+%:VX>b,&_%<glZIg8JPMA(YegNGMj>NO`e+p'ohM="/5]D-:d?UNp.DV(H3$<g@9]
+\TW]/eQk+nCN*-P*Ogc)f%&]\?SUCPA7BNo.rShIS3MG3pc^co>51G[Ka.>'99:<`
+'t&)?=M5<*jqhU\PWa;X$Bj9?VI7^0dcPnIhjL&8=D'JqEK4Q*<D@=2fHul<gK8m=
+PtjA(JX']u3\.#dfqtIHjEV3BZ/Kq^9q,lmQ@"rFq4"^ph0V&KPi=bfol]-'c*_*N
+S$n02ba2W@F]qu"eYhojY+r"!))D^rn$oP!SoGX>l'lK/>*$nj]=q(ejOn+VMVRM%
+]t*epIojDJR`:$pC-@MSVJ*)4\\dEr?GFGO]RI!'ANGlIP3t'm\_;+0p:9=#5'DG&
+D-[B;U[?S!\`<F3hm^5cW]t42r#%FDSRT(n;qn0pT67G?*58\sGC*MSi@4\ZHgOS"
+:Oi':%5I'%-i3eqZdX#5[F7&?#593Z/pkjBn?a"R"Idg'--rPj[J/D3(u)`:YK@'^
+2LbUsUCq>Ql'T6+rn*lJc>l?G!4I[jkaJj.0Mj(^_UoY,i1itn:RS7I;E"@+$X.Lb
+RN4Wc2Q2L!8ms"<qNFoOZWe[?+H!OY"%O4E8s6oH:B63ipe;T,_)[HNVD:/Fd`>o[
+1l\?_2OMSC'VU(MNbX_/OCq3-,6V7"l\[L0(sL1`icL8t;E2^.eJh5YGE$AR8%%"X
+&EGr`O3n#"WG("QUeHt/dOIXKq'-jdP.$M$?33[hpE\C-JQ+@i8>$gRE+M.XK<j2h
+8h!T9U^V:+ETTO/8Gb"W>]b;?Ja?#IOM^'PQ'mX6B1p?T0$tYiQAZ)[8VqX<T1mEb
+P'H*3=dpi%aUFE^raEkb]eCeOX?//F=Va$20VA!uPLB;(\_6.+ASc^Y;DkmT`0hQU
+H`3AhdG@PgV$!XNm[M[*]ZTL72<\SBPDpJOc5G"mA_dWKZlXZm#brn!'UG,GAn=R!
+.#6ee\tN(I2c6ju4seG;T@0H_a8,Nrj<VmD'AeJcRY+?_I.EPeXG0PS[6gbO(Rr\[
+JlFcG9dY2nVt9n!b.=i6R_5Z!Y+h1].E=qk/MWkJ>-UiEO%ChFJ98+eV)'$n0']8@
+BQ_Uaeb1^plHO<]eM=GXGB$)f9XgNiQGUKg:HIaFEhAW^1egUV6>Sf>VEj"LdHX?7
+.1L-lF*b@$C@PEjI:]a-g.5?rq,]*>89V<,_*r,GB^'Z)2:bNmX4o^O/:?<G0rhNY
+$Ya1Q4YsP_D:"A:>@U_DT<8opaBFJG9l%E8X40=ifA!VgC2"Bj0P6#9X,D)bXgbf`
+.Wl@PQXZJ14X;Z$K3nDc6*,+&I*l2TK3>&\0@aIF1WZ*DejFtd:'=PK(rfrml[^V*
+:0gsUg0i,@*cPTJ_H8h-`<FY=etr_j(_14fbWs-$%7\96;\S%MptfsFQGCV#%q2?m
+M/_i7_*llZ.r9-_Y@LqZ(fGP:PI#h%%L+mPmh<$$OaSsm&!"0K&`_TsMK"OU`@3SF
+*IN^!fNoWA)0ZYQb\N%j8gD0?+!B\qQ]#k^:<W6Y,b2N6MWMQna#S2Cj9eDB1?L(&
+R184h>k*L=Y"m?SNjNEs$'_-t4I%q,@d*%[S9&M$aZ;'Vk\I5p1X9O[R@=t(SEZKt
+#*(#*iPFWH#GlOfLn*2&8S)0$U_mtXb?+-al>4kKZ<!FE['LJ)SUIVS^8'*Q(r,@\
+-`8i8#1E@S?L,jiY;;KYPPMsmZMh&82Q_VbR\Ob<%8F<KQJ^GDO)\l.capDWfuABJ
+E:1Ea]Ji=Nf\9bZDTt2RPj\7q>Pi8US`d`]Nrn28P43Dh%DoV%p#19'L@;85^D]TB
+h>BconNI?#3'QTe36-kr%R3EC*o>qi>CQ)@0?1MG*9!EoORc.Bb.1;#iZ,k!mTsPN
+\R-QDI,gjjmU+>O^I77tbG"Qe2pX=hhmll;5[g7XSi1L]j1:_YbagcF>";][RmX>M
+rk4ftX`Dj\O0eLCak/ZSB^+.0_N?To6^7Zc^"k4X")<11HcLHt?1V]R%^k/?msFPq
+#K-=#rRJPf>p;Hjd<P[#j:9Lt3rVsPH"(RO$.#(.rZfa701"[s07WLTS&'@<;ri@6
+Qh8!BfD;[HlTLlCoR<:TH7r^orSNS+T(CW^T3LIVO(.iiUY>WAJapE\Q1t:TgjEIG
+oKDZaoKP:Yr;Wnm]r0KUIllll^Sgf*&(LA=9BCV@RJ6^,jnt`PmetJJr'-h:r*QAr
+s)6H_s,U&VDhRp>56#Qjs0(YbYRL-,jT+cAs"Dt(%mp<bd/Zu]s,ZIHcm8DU$NZ>H
+!q5RZE&e!((B^lH"7RlF0G=?25ld!@"`Qm5n1t7:LBOhe"gCi)&7GdIE<^B!")qBJ
+E-27:I0_N@#Ol:1E-VS*.0hPcq[eko0EVUMJI/QVrK*QVE1mVXR0p0t!Upg2d#/8C
+[gQ$E"YbW<0Z+<\D[^S>%.Ck=0RF(eUCD0*%T(O^OMq^Vkmal1$]sfdn<4#P_%"aG
+!\j9X&I/lorsA3-"H_p]OHgARq$qB`%rf]%0e3]0o+I/r&lCM!%j(-`Q6gG63oFoE
+&PViE;!QG-p/+rcO^/[+:@QY94#(+iZ"PR`CaZK,mVukT;,\;"#8_t:(K$#+0j>L`
+f,.s+(pTJH0k0YbRKen@)KC0D0s)11Yk\m-)NhQJnS]B:G8r>s)Y&@uZ%X0;SK.0^
+*H@>b0rl>"Tc5`2*c]RK0u4q$`?-hV*jOB?Z/$LAeK=>C)f`8#ndQA?$ofuS\.RYK
+?lDs`>p4%e+@:Q%C],HS],.b-+jqqY1+=HR2'7`$,Vh"rnhVQ>8Kq%s,Ec+QE_dsd
+=XFbe,\FM4Z;W*u;'o1?^_1BI12.sgIj_OS*sOGGnp)C`E?A)<-dmntdZ5b2@k&+F
+.5F1;&jn.3R4+5b.IrrYP!pmAD^TS#.e8iU;Pttl_(-/I-PEa9ZGS%fd4=eB/X".+
+da]nsj"&R(066_<&u@7f!AF#e.aj)(Ep#('lRl*20QR[V1BfK())<uG134Tno*H_L
+*AFe"1G_$<F#>bZ[5,'C1\3aY'1F\J5r>oF1NQ\U1>aiB,;iCq2A9"Gd`FCgEAmCV
+/s?l%F"&ZhAN+ZF0Jc9YP4:E9CH4252=m4nF-SblHSSN:2:J0XduQOgJN7eX1=N]e
+1OV6hF#T;t3chtno=I%>aVfc'mQr*E"VC+=+pSbj5&rYIZUI(K8O"u\5@aj\@tR"?
+CHpgD5U(P?@WOf@jZ\hn5kGdTe/(FA)aPYW6*r(,PT_@f.L)+b6Zb%I<';]f2+*Ts
+6M)QlZggHT@753'5L`h$<*_c=@6rC?68WCD1hB#'9h)Ki75Oa0ZiN\h#tQlb89AK3
+oQ<XqO\#+]8T]5JFF:jB2ain&8//$o<38]UYt3A37he$V<4PZo>>-k\9QXc<['rZ7
+P=_"T9m"?K[)l&7bt^+C9(^Y*eEojBnP(j0:GhlCFP0F]rD'a(9/Q<<FTG:G&Pr&T
+:c/taobgUa+]3@?;7.]IodNcr0iE,T;RJA[of5r.5uVmi:pgU&FY-S#*E=so<:rCS
+F^8"T78rkN<]+S]2%<RYAQLa+9@\#_[;T!OF]\6_=>b@mFO+&(6Whir=Z'>bX4:?p
+[9<0V>'6TAeZ2h17p@i`>BP-o[>.@sY?7&i>SOeT2,.9ia'2Qo>F!lGe_OK<O^8dO
+>kQ3FQ-EYNj^,?c>]ojEo]KHOmpB)d?kqj3[:*HD$X[uZ4bHK6U8^<YXp6`l@WFJ<
+ZUJ?o8RjO+@q5[O@tS9cCLc@hA0QA2@WQ(dh-uO5AG0#4elQGR)eC3&A[Z;aQ=2*U
+C'Ku:B6J9)<dcGUF_@"oB(feL[P;Ie@;'h8A(I&Y<h3dPTk2f;8iES]<g.$ZZ"+WX
+A<sc;(;4J6K5+G(B\'5#QDnLTa(Mj(D)U'[p>'OciG#a^C%ge+2XP<=[q7PGD>*dC
+2Z7N;!H,@MDYFHU2S3mNYAlJ,EH_"l[gd0J'lisoDmq06pFU>C0lV=oE47iHp:kUV
+&TW(5FE\aG[n1]99lfu*Fa$i,2d(:t?#t3uG'@M=[qU$[D0,EgFuMj42gohXJTnRh
+FLQsI[uGSjO`u!oGW1J'pRQT=H$K(WG^$!02lV+IXa,*AGdjr(pU,:5FaQ-5I!<7J
+(Un+%nU.g^H^?mDGF<cdiHmNFHhZcQ(;YIOhgMu/IlI+L=8dN6!IWMlI5`="=4q8R
+6\'ClJ%-/=\.NR[*I7E'I97A:GN4;LkCY_ZK6Qd8==JdQ-%D:DJ=#eZQn<ith1Z\?
+Kf="(eoP8o@KrQj@Nnr`nqVtj0o%NlLMJ,iZGD=Vd>-a4LcB2T(ibB,Fbr)'M0OH*
+\:KM3Ko,S]ME$TP&h/W]AW!38M]t6=\@IKA[>Pm>MqGH\\@[^pbeKOeNB"t9pm$j0
+:Q64CNQZm2pWnkem>Y62Nqi4&R-Th.iK%+B/bo4(R.lT-rJB1eOa.1n=Ta[e'9Lln
+OVo#a3=h4=Tp%I8PBb'/q$W@r*KiE7MHNN.fgV%6+dG&RPISf$\D*5C23p6_Q?bWX
+Gu9b#.@']DQT7d!)1@eg<L:79PduX8q1Y3HOdPrIQFU:h\V$/mAX<.WQhcW0\Z)#8
+V4'DYRX(<j\[@fMZ'UlhRsAk@\Xf5cadbB)SGBLZ3SBsK_4CD`R<e%cq;Ioje2QIW
+P8U!ZRIcs%j.BK?TR$!tfs@?_&YM/YTiod6\c8=k(SWr2TNWY7g(U!&/YT`2U3\ho
+qDG$/.A.SJUUhVDqFRLZ4em<tV0OGU)FL?)@ATE(V:huI\O2liqjfc6Vck1>\oX3@
+rMTJ]Uq2>SqIuiGM5<7GVn+CT)K1sgNM@D]Uj?ONRZ".+O/i&CW`j[W"d(sKpf1M5
+2gAtj!+Up*d>lr2N`t+t]%rPGiJ<r]Lg&np>3Udqm>K]gMjj<tqY@>kc`K84LKaVj
+RfTbj$*CfSLYE9>f$1JpH*J;5Xnr@*HS)O-0s\D!Z's^Z]'H^!o<^RU[!Mn\q`2%\
+(UZ=D[(@!ZHTee66+/jD[X1TS]1oUn;7AVe[sM8dqd$\C@CSC1\9hr"]5>(TEO1";
+\U/b84+XrSKt9@&\pKFJ]90]%Q&$A,Z.lgs].(@=27u"n]/u_!H^VPDS\2SNY'\.$
+]?.`JV7o$j^3cur]<T*I[CuIb^O+MG43bOPjhNtB^jGIa]CE]6ore2J_0b.W49<:(
++.o%7_4(,8]=#GE,JW"U]ppsq>Wote/]$4.^t_Mt*)47S7DG?i_AlRnHs+A"?,QSO
+`&ocm]P5C`D8c?la*`$K4FP2]J]9g+_OO-:S:A3,CWS\[aaAHW]TKiHQ-)4Wb']c&
+]V2slJ&m#0a?7#VI':`+_9;b_\bsLbr4U1a=31<Wba[5/4C??\c,e[s]DUR+I-JgZ
+mE/\g^\m3<>k-%Noi`:FL,chG%i:.Va+cr'Lg:aRh&1t'*K9q?d5Z-oSL;k<Z-lgp
+dp4c8*B",80@Q<Ue6PGjf]CU'9@Z0ee=B`tSQ427IFWRbepUEH3A8ssA_-f!f6nmq
+]dqXHC"N;<fKF*(]li!+ES,\0ebrd8]j]SWH.kE0g3nP*]nP1RM;%ofgO54=]p7>8
+RG%P0L`N2DrMA<JWSK_>gjQH`IC7nE\_]K_hL35rrPdR*abZM4hS%=o^")$=g#"sK
+i'$&WIHBDcl/=emi4\[<IJ)!:+jp98i8+@jIP'OX$0(pbj*h0l4qZi=d@ZtNiLW-h
+hF$A<;<&]Bj'GaGSmCC5=l^W8iEfsRrb:IXETMWsjh>m!rdEomH00R0k.ZE/re]f%
+Olq0DkPgb2^7"1KU$2KPiSKRZ^7FOPn`bM1l2J6Z4\b+RZ0HeOm!ce7I];\j)sog`
+lMf2lT""*9iSU6[m=&p>^<,gBj6OGPli-)8hWsIa!UO.an)"67rqGos#Ol'Ufmah,
++!'gAbOIe7gcltQI`^Z#)t<k(ih%=aIjNQL$]O1?d2:/3=CbP/L%P<QM]Z$mhckjX
+;hj17^Ro(qT4eGDD>!\kpKq_05@O;YJVTkEpHO._?ZGk5On`&eq*0k!?^:EdSVQ*r
+q>[:Ss/GjEXn?&/p4'XHs1S/VL\Z1Gq7hRY5L'&>dJH/YqZ"D+hq@mViVUCOqu>pY
+5FMFoM>Y--r;ZTk+@%%O&[:%UD$Gt(UG6`;5lqu2%?Pg./fOnE`1^#KF@%\rJO(F*
+Ls/mA&WoSXdMSKfD'b4c,SKnuE_eBIc";!1>ZP>oNR">>q7Q-F18.==1>/K:;b!T[
+,no!C\p[;QeL?b59k';iPZK=k3o)F#@^"H91lFL`D/,A0MKJ.V^<peq=>&-NXRaVX
+[U1W8S!E^O<Oq((3(bdC%>q(An2+Bf7j!r,hWXc^rathmX&S[.q]:(pP/QH8(_"t_
+=-h.t2>Z\EP9$XJD"\g-QB-+"h:hV9%K60V`8T],\r@2d/#Uti[QP)O97>=KFh$7f
+7Ald"me8b*mgk&Kipun+^2HfBYNkiY4$N+o_map_rOm]AJ*Z:qqR'*<r6mi*qel>I
+&%iJV^sCdN#/QAe*=0Ln.n&;MNmn:06VnGc!^i'6.crY9ZmQL)9rjTp[Z4<hm\GZ5
+<4ATYctMu>cHL827nkgbcc=2HI&TXD>_JflOfWHdaN7DCM+NkXQR,-WRh7%l&p1B.
+a0OHh.u(@R_(Neb*/cSo0=8VMbu6a"1s/aEWAr&LCpc:HPJ"RibYua-50VLRd2gLH
+*9BN4PRQA8cP0XW7*a:urCG9LSHR]lP^N:!d8[dc:=.Mh&P^[g%2i'keK$MGXq]rH
+:K>pK@8U$HV.iS'<Aebq<n2#A=4bu^JQ^T(Q$H80Q*$0QfN$1a?.i6EO'gUA%B3dh
+eh*S*gD3MoA_P^P_.VNRN14P:eud>8gfD\AD;CNFiG[OR%I%lh="RX"h\U_.IG`Y:
+!I<R)%LI^=p\kVLi>=0bK@O&;"bkqQ:*#2?'hm5#iE,G-LgA[3q2jT<mOaU]Qu5`V
+_\gqQO(Ge,8Wi-+hI1`h=_;H?;`V92RV/&F1SECRSkYs@=M?_hB=P+,PKcsV(mQ9.
+FD-L8Y9pL?lVL'\dqd2,^oV>ZQGfWdMB:!4D%Vu8[VG\_Zada(<oLW-HLC:Wm\iV4
+^@,8:!OD3!:C4JqH^>>VnQX<W^$sd_&\eO^k:+@?>e[ts\\+ObcLMqS*Ph;P+%a?A
+gcmO4oiuE<a7UF52:_D+De[hrh&gXbpK^"/eFq_EJ_dSZO+Y`!HQSBVq-.3oiqRse
+BB]''T5W\4^;#0_ptefCmeWOTXmPs,&%Ug!h`nsLr*M,!p&*ZbdJ3ZIT@ru;hll#%
+q]?pUp:oeZ!$BDZIrB'$^h<fO+<1H5Y8.5UkS"(A>RH%bL#50E.cm4S(4.`E%R6mV
+!?hj[KQ'g%_<<`S+Np@%d%1c`pg4/4N"^mTILX/]3t1(PTSF'O'1:CXL*<o?LJYQ'
+_[);3U.dD"YlYP+k^O0&bY*_1hA/=(Wt?PO7Z-]8/jm^krM!h,M@e>S``S]EU%DrT
+&Ul6"#iO:fM*iDF</)'ZCj@8IfoKej5+60aBB0A$O<mLbPdq,tj?.[J7p\Tk3?9>S
+jH;514GcV>0-qkHRQ7ZUKLq"b-R9t3OV3gH+)*tLAFumb187gil!A5g9WOJ"RS:lg
+-S?[G[ZiQ4:!;c_0-t/EP]II8b[sp.jb114EpdI3WF[Vk'[i)l;FO;o+E7t2[$q^q
+@*JFn1M-LDS+DePc=r>#,s:I^doL'T);d:6N:*+_Z>e+rlTQ[9qOFn_F3j+"5UTh=
+S[2XJctW)6W(ciUF=N$lannH(N=_`S8rD"g"%B05(nbtcNmYuW2J?A%U%FM)dV:F-
+.,?AJoWjS'l;L6Q/Ma-od[8Jj=&#[=32O"IT$thh4mB(6W)SACdculhWXQe@FXj3:
+8sqspI6sh(;Ou?QIoZPcgR(o[K@K1]8#fh%S/$dR<bdb#.g97Y[6h<#3o*kQQ"@)j
+%]r_l_c:Ks=0HaY^=G<V?0bL1Y*I:Z=??[lCXlt"p+!dYb,&PtrHOWJb`r9dk"^K<
+jKiK2cCg(ZBrq]6Zt3^oPq,I)m6#JOp8jN_Rl+h1D6gM!d)9,I-#>0X[^9*)k1bJ"
+DQXG_[+>r@>\desXq3J#(Ga\!X.O&XM7:$>2X9(UGB>F=g:$`a$sdYHBeKpo]QUUJ
+h(-fo0.jB@G@p:!bBcMVO>8!RZLcs=B6f%3o8`RVr*Q+-67tFl#+*p8!t]I$DFk9B
+!7LgQ)ph#mFpfEe9*9f_-\$]/0Z!No!T1+n$uc2$#<7)K@N5@V/B/(8GaA4<cu4[n
+TJsek]RaL\L.a5/3?ks`"+tu,L%4k!#!g3=@pj54n+K5i3@c9U%"jTp7O#^"i#,tX
+MgPQ66b1.A#@hSZL[[b;b#sK8!t8sr_8ZApq55YDS8jldBK=+Ya;Er2`!u:O@*UZk
+3nc^,B_)-hbWt13Adnf3Z\Atq";;,U]PW:C/q:RFQTgRl-qcBg)UDN0:#O8,O7K/_
+auS3GkZphp6,&u:q@>@Dbj8677Uj9hcPc!fbH!Ka8C?+jne%r:TlkO`akFd7P)V,T
+[.^lZH36Ls]a9sF-Do:<8/uJ0<O$[Ia1XEi9l/(@N:K0[c!*#h@Teo&[l2%R>H\l\
+>j\G1k-WSspManaJ$oYQmD7`<=BZ^kUid^8,M?92leK[d23,d&]@;CHc"jjJ[c>t$
+$\%N'bJ/9kn_mXJ>&UOXKfG,.gfoOkD%+V-2RWA==r3K>/G%"D?M*=4>FP"%*LX68
+0?QQ;L1$$eWNhb(c.^3tg-.U(3MuT6h(s<Cc0^dB%b]t!CHV6[Q,pK@;8W4BLZb6X
+XEE,M[!\oQG"rFX3!X-GSZ%Tf0"]R,QS[m[X.8LYVq_%H_9tIWCNNc^aL]A(mTbq1
+j4%O+YqHW&`#p%CrCc2H#nlf21SFPKn$.8\I.Ei@XEf>6<4p")efKldqE2=Pp)g4^
+IY4m$_KG#:Q_Wp(aJ&FCiU*_]DstKncu`VplZC1VhgZ"eHqu-M]7+nr*d;dTN+&6(
+hj<mU)[:WZ_sBrb$MZi$AUD1Un%)TYl\K&tGoqt=]XQ8Z5?je0^i/E5J"l^fW/^dO
+^\t\biqu!Pp,UU`2?Vkr481]jquO^l^!l.!KESo7!PUYo5%F6#>8t?Se@o/q5V(O"
+e."Wpg:/["$+'Roj/##"%):9A^mkD0KChCoK#$,94Ob1^KD@@aqDuh-23])r]ApZE
+!'fNK5s,JT`!;+"&%2TX5.hB?_\g.04@/T'4rbY1j2+-Q-U<n46::N7N%IA,,JmD%
+38;is,R?][/3;i,^oT%NZQMRK1r(pT1/'"3N#JsS)n9\X6.@a-qr#@s*5QGJ63A[O
+r#%a5p-;"I_CI^`CUV"U/jmQA6eiBmb8<T.r5'F![;7k@9K'Ym6phAF_^!#a1e>Ou
+rP!)C72/D4Hq_3^9uI_?_K7lDW/a(rZc+IZ_;%/k"BEAS,"*\E`&pLCA48h$2FLIS
+73l/)6oRPf8]2#@7-#gO6rq5W(-h^O528XqbY(=`n]"fn`DgbBlo<#/E^\s9]^u0D
+8@h7.Do:@EJ[A`R*&'\&CIB-q7LUV5)`u&-8&_9J60rPYjCcHuBZ5X=_h;"+FEtn\
+MT6E\]d.4/b]lHrEC`c(aE2/]KQ])&e%_t(aS\Xt<.W"FH,rYjaF&D'N%`5i361)-
+_9@_Tm!-T&H:685`Zt7L9Oc&T2T5e2`nY,rXCb&Ip;?D/4Bu6M#TGJY6&@Fq_GHdc
+>ZX(I4$@?r1/Kbh;m_E!*5KLla&&$nr#>u1Z3d&+_,)&n4H`>o[7b%U9(]U/"M"hK
+@`r;Yb2Z5Y1qYk#[RN*e2gi3U*5KVu_SQ/[2B94^jM/o<\\p>3[,f5!m)[>jV9Aa6
+bCbetK7uumbJKL]baa5WF7@BNcHL[,9WL8!gr`;@In]`72Oq97KXaa@e4XVcc+LR2
+<5_G*hFkN=9m"*E%+7HNYf(A71Q:#2*+$k]hG"[Ic=GeUK\&tPQVK()c9,mejOQu2
+ktY4):;lD6XO,4Fb>*HV:;#Au[.MPclqMlp1VDI8/G71So$<6mbZsebh##;H:WtrZ
+2?U2-`:hOshG6h4cP5k4r;P&Bkt\RW:jhu[o=*#PpJ7mWc4oM<m$1=>rNiU(:W1:J
+/,@PVps?[gMT!6SAGAl@q8:/K;1.NHI1/-cUqe8J;*>"Voc6n?iQr;T4m]r1Ub^72
+&5C[e`!jZ52#gGu(f7Uf9jIlr4:tBmn'M"[:j!c&E2c\D-IHB>9l0RKUp3TV1.Q0c
+dB+\AR$LFigWBCE;=)h#PrVQ]+[C0#cc%-V,gk#A#ZG!uYXKS\I0.f-%SAk$e2SCF
+Ur$"e/CRThbPa'<]`6<+0[^+bdl`[dPtaKV1sU5>dD\r*h!%WDHI%"<<#"Ror#jAZ
+4]ICZ;Y9_5"Ue9K44UH#;On9Ch*sZ3=45nV<?/'j"UnA4$q6.:eXZhAh&&gK),q%B
+c.+aOjR(ETs&HHf<kVMPXZKJ+1KB,meWjXpV*`Y%>Z71\_j'Rhj_n+@@T<R$:k_Kl
+V,^Hb9@Z1Ff&X/*W11qf40r<60bDH/%;)gqVb!&OcA7;!h1J/+K?A!F=G5)SPVcL8
+JMN4C5R!'EKne":LOk*Cb%6Z#LmhH%N*.,F=Y5k+?%1I3AD$hLfZPGjb?%i3Pu+TK
+fSu0GXc9X!W*.l4=PJL2gK[k%W`[?6fqk1bAWGEFQW^GW=e1hsFcfhVi`P$3g'+"R
+iuD1U*SAVe=`Z?$[@bKfZ<;l>g>/Z0%CA],ZIL8$fd4,YXesaaV:BFkeb-SrQ+5RS
+M;!s$e\/@Z?&MkIWS-sWgbf`!SO?\\b1];#fmUnErP2ZJOkW%1g82L:Q)iW0XPE.P
+>\)I@lrmZ%Z.uIpg4cS3:"!.oWS'CN>nu!rQ+Yc2N4DrJg'st8%DH*'hHa(@f\<!&
+`PUH[\(jE`gf3uQ'r'FthHEY0gpP:1>k2-Bc;/$&hRukA`PC>1KjChFb:TJoNU9AU
+i`UEWg\&-[b9[R.P?],Egs,KG[F&;<,23:l?2a]W(#dt;jPR9\?:El2Kq[4kk)L1t
+?#?atFn"9go3_0a?erZY"SlBl$;c`0?u=?Hh:(5X#N57R?F@T)[?iXkpY@.jiB=m1
+`Mqdla^<$RhprY%jp>Dnpg=i=@7C=1IKPTg"Plf/@+Ek52@*R])W2YN>7Jq_jq6Sg
+,u[8F>d`KtFqEOp*aF^=?%)i`*Vmm<qV7)7fo@99-4_t?,N@8g@E#Z[c-P7d%UOT<
+@Lb3S-/dc@);VFjd;A\dL+p!s-XGjEj/tFPVCpaXF^*]Rj'E#IQ,qoq"5m3?A%hVB
+hE0N;ro5Unj&NTpXu=iP2r(h)5qTe0(%U.o1!P_=jPA&>IJ)<c51eoIYO5!.ZNAbo
+a0NCl0J6U4elu=CB%U[FgFsJsNa^aTLZU1Gk!d;P%?G)'7:oN!k!!Fn,cG=/T]T8k
+k/FOd`L5l-Rc`^pk(VdW#&<:i:1+iN=N5#X5%n+pChI/FAn=HpPf%*Ui9']]k9anS
+7&FVJHXC)m=9`m1c-YY1=D0T%kP\1i<aKAR@T=1uB'q24mF^VkgLkDCk;ALe.o']j
+;.sQYk^A<Np3L4,MJ'Y_1VRsF9k7qGG@3mVBmom@eq.U*Om*TTkrrYBAq=Z-Y36@a
+fIhJ;etM;nS*@>Fl.*X_Kqd_L'5/G`Ar_RY^1q>iO(k/PkpCdm<eehaT^#jLBjOeR
+/pLlLL2/4<C*'#4cCA6"X]$j.kg$Hu#**@$K'Jqhh\LG$riY+\U?e,@kXN;K?DhTD
+_H^9HkdIARY,U^#H0M3/C,WhBI]mRJ_eQ&im(RU4<k?_FY%p;JCKA>Ym^VWNbNu*r
+lk[]!^<P^3c"d4dBXYS=(;9(Cdq8Tfii^dI5%a%3`SOq?CZX>`[_?N_VJH1clfQa^
+2UuYnW9Y52AOau#f!F`bR;@>\C.>[JCfp)5Mf!<[DP$?&(?t5+]i]I+lk]2,h!].S
+WU9JpDP$W$QMGD6bNsCWl5nXE#,CWu6>q%1mi,$j(>*I.l=qBe$F\?!2Z;t`e*c>&
+mG?'*%e&e>jmQN/n4)MV*t3+3q<T.ik[gIQB%V)EM<l#:jF6c=*sV+>#J?W%B,;$H
+-Kjf?Mf:T?fH-FJ0,AQ"(%;EMnb/sO(7si_S8U$oE\:O57j%/7FFgl+g+*#V()(_U
+Mb8_0k3cd(-=?k@'BR^0fRGPW,c5W&X7F:anqP/*<fYf#1N1Sum3aeoY;k4=38'o_
+mUn4[%m8Lb4Q%#>o6/E#'b^*j"ETQuo<"2INN_rg7GBakF%1V#-U)'B4P0m(oJWmp
+Pj%bjTlZ3uoT)U[pJH"f%eUjZF3UHO7n<.u<,.a[k$L+(a#r&d7<I[<oo4rQ=&3s5
+S9=:+oX3`PD>!MFU[uf"oKINm^Jo9@;YAX'=H?s6(J=!89D0^`G,7NJ`<c/B9Q*F,
+F2pgpP\kRKEHQJ($5[T&?Gq%`&G=XYEE@8@In"V5?W`q5o?H7gcXCY9DKGP<pNL0,
+pJuG@Y4o,@G/_Z!k=PE?F7q/hFanp`hcKN2nT>(`Fq8tE-MI.OL\6ufpNLdu#Ea8W
+Gk5j+=4^`"DiSrfQJ<:0pKr8d+'87Y:%mb$N%\I^cT#'gL3[uXm8&L\`S5RNJ,,^t
+p?uVer[;t$Km:'fG;##'-_#<]Re`MJoiI?'-X19aQ2&[dpg9B"LS=O1?F.\YFamon
+04t)`]_7,7H"Wf-2kT$3R/4S(qIK3jJ#)pr%/@lTpRf3Ff2MQ"=8D#0qo?*jVlf[U
+Y2@!IHCnGh(V0DjVgD3`2Qp6WIqe`!N;Ie*p1J[JQ`0]:b4Q:MqQ;u/hpm)BN;M1[
+r4ckA+0bUF_JJsYqTh"rn&9LCPM=-oH]PCWJ)U+]P^Sm]q`BB-n'1fcme^pVHq/hb
+pQtfUdc`p5ISYk!B=%P\Dg5@5H_9VJ^V]t?c29q8hfgODHO!Bj!rm1@IpZ^]^G0dh
+#3GoYpNWLia8FWsUk,1h#Ru=3T\*j/)MeSBBM#W=#)#=9cmX8_'+5]a+ja>u87rWs
+6q/D@P\M]mM881,EOb"&.tnGP1'iQ=>oT6V@5=h+N,:5>NMlBhln!'?U5bp)8OPI4
+(R3D.;45BM5>7AAV@^>P8k1hD%I&$T"`/*_ZW/O&ae^>6<KpZ82QGS&lXcaEW2"Z%
+_P'K$9Q(`Y*KlO5*8>!kEJ>O.A%L6p337Qi4d;>UDqTLIIk;n5k@M3o]^E[U[Gc#4
+gKm4!P,i1>)>gf89=2BAn9DWhmrp><b:]7^Pm_TNiTtW\D>nRnXOZ[EH+EZBRg[0u
+Z+Wb2(L_=EEV*D7?O$b1d,DR*I28RCWhAu:II@r\lXoV84PB10pN4hJCD1C14n$#F
+mQYT"%)'AI9*"WAm^$TnX=i8ojhEEglK#S`(oFOMMl[!GVGNK.!]JAFK(qXY>#>bo
+:CIg!6Rq.jYeS;e!9lrYPYehXbcGF<]'ZR9g-P$]8JXPYj=%?$d+de.^=&b#&@--e
+8G("u,_!_O;?N6i_m6>d),0E3CElEU`,;nH1$TQ.WY5fa.8%_kMZCtZr8/47l:df(
+8hZ\h+KBNM7k?YsK$>o+d3RqCcI8hP5/U2ZdkaBhV%i1=daWHf:.o)`9%,7a9*ERY
+Pq\t01Bh6d:i"kp<D%AgnQe'&AFE(&'q07/<<ue:&%XRAEFhT2r7;OfOiu&Cc7g2q
+@a1&NGbill'j_hN2?VPX7oF@VA0P_.$B3e4U7i8VWTDe#W/-Zd1Ek_OR\4"bNTFcM
+([X#0;0V,OJlE".&P-=<`Xrnn&QT1t?h<snKA[Qk0l:?$h1ppGf[\0--7sB[K/a17
+&E2VnJl.A7c(74PV&4Ab^1@S8_h:3UN`=!\X@@Z)?$:*9+(m=:O-sOI<go1c/Zqm;
+Zl0s_Vrc$4@7t<Y#,8Y;H"LORlC*nPa^TT"gQ&dIZh^Nd>AhWcU0?DfN[\0RD34.A
+Ne9Q1H,cd%^)?(.6/`_6j//rJ0&o@igNK:3n2o?6L2D:[ZcR+92VkQWS7]aSF'OJ<
+a/"&ODp'DO2`$,0&/OHTo=HpN[.F6/D80gGhLVKlS<j2%Ea2TXY4Z'I_lrW/a)T8s
+%o(HNlQ#&^_PJ:pS\F?[kBH@d^>Hf^oKMCNnb(QWc.MZ77_@CI)^eG:q4%u'YC>=5
+Ya0b96Pf3OS&g&]M?1G(SEeshP')PbVn6%(cCc]HISY7a^=U<@i/?*4c_[\V[j;3C
+1Q6bmILn^[FR3AH^424.iAc%=e6q9WK.LUA4P49BT,X/Q&7NAik<Ak&X>b7Je\Jh`
+mg!2f$@!)dW4,8Zq-]F5IZZq62HWrI*#oJ7Dqp[:dh:>BMiE1&Ft#Bf%e?09Mhb.R
+*^J>\&)n8\H/LRE_al'>@Pem\/[ae%310'iHuXaXhC6H&T*f"C=ck<l0"B!;!?`(U
+,K*!?'CrY$8`2H\Bjsdt8NRP1qc/h4Al-:[$RnqPTji[=<?EYh>bt<8Q0Z"C90#K(
+ai(WQP*"Nn89$(iKY<^&mT[.uJM*c][9)pt]M*non)bR>QZ0*@WC_LR-CGL/ZR&dK
+G)\CgPgt.Z`c"H52`Xj]V4"TgCUX&KYi[CbS5QM6WsRrC>K"gWPMUJs8\f1U<9SJ2
+p3![/ip<T>n7D5!J4urd<%'<^RM5X=b#quNW'(rk'=8]Lq<GXA9amX+%VO/[1J"Gj
+!^sC:Lq9#O.VN)WF;+Y9^'XI"W0FfhPbrFC.ToB$lKFJ<b$n0C@7dH*b@\,UN6o]t
+7-CVeWO'ledT;8fb8ioVF7P_u8s&,uh*7g;6@dP='\93kn<LC:J(<h*8L_>6U\*+.
+e2hk7$U"Bid)qbUHJ_V8640cYif-52Vd:lR:o_GdWlh>)@d+%<10)?(<2*MC/@;(@
+Q&<4TH*'3q9,=Td[^K'0pHr_]OKOhVT3$qR>qJ42M=utY>$E.CD+*$Oofd+mM>L^t
+AK7uHP*oH71LMa3@'4Y/W7FObk3+sWF4A@j>FUa7l,D;_2H"a$]3A6OI<qTQaQ$Aa
+CO*%q[\D;5hpSPmDQcbi\9!,@?E:DTY#VL4Q[.h!l;_Yl%A9J_<gq)k\UgnGrjd2m
+W1*"p?7glkUR+U=@#G,)/#Ce*Qbl^.g8T%iAe(kbd`>U<l"1e?k`X8^URC+eMcmkY
+`H@<dY3JbIf>.Upc=\0R![!J>r]d8?$IN@[Iuk`V82e",iT-`pOt]a"aS>=4j"./q
+Z6LYD)(?81UfEV8VG,0Y:6!A#aa>jAiQ;DK-m&lLR-<C-S%4s+jCR5='[C15RHASR
+\&FR>`_]PO"$BKJjcFPj`mF>3/EcfqQo&'#dMb%mkrf](Ee1C?RJOS[\e1dt%\V#@
+T-W\p"f$*DMTn/:<De`)Rjqa,Z2';KR4U"TS&Vq[$"I7PHu#Xe$YS"TUH_OKE<J0P
+:XT$.-L+;UZaL9id[NXlm&&mE1@5J&3t@Ehgrl]U[V1"LE\6KYV5s5<$J&FZ9k$7O
+\90<tf6aE?5(*UF2n$TPg5W7MNFBK.?7FDD2h5)&]b30IptCC^HLOG\W]0'ff/fCT
+lC3.!1KLW[)LHtYXiX(WB-5^Z1O<u!H*fLgK@efr8oYfJ^UYtZiS$AMn5_c`3*,1t
+Yi@-Nh:&f3[bKqLa&I%alc3"\*8K5ZNH+@;Z$G(pkZeXmBm]HfoYm<RH^g[ANK;9X
+a&VI%99OE]XiU=I=k[.cL$@DBbk2KVjkO'XnP7&mp+I<CrI8n]DNVN<7^Kh"O0imZ
+le6[".+=]eSo:c9\p@sWm!HXUG+U;DWHVtCS[YQkXfAr/Im;ulccUGB.FGWFJ+$U"
+NUDda<H;/mcFst(n/jCEHq/%g\EY>L$E?aZWBBqgRBLYWH+@q2%gM=?S:&$H6%4!u
+q+C\N^(75\I_!AmjicrN+1=m-l$3*&]C;$q]D!Wge'@a'D18<;p4#$NWIHl&GJC;j
+Id-G#Vo/H4*9-q7YlDb)!!pO>&*fsO^AWsC!(Y!*YNR9d+T]piplG.MNK!l+/H#eC
+!AFfV:_*(N#m3tLb-35j6Pfkt#6F67!7$3"0>NUp3<bF+"]-,B:b_uDi<$6&gotJ]
+&7khqHMicX>S')\E+908(C.0@`K%>2n<h8CS4-5Vs,G&*:gX<DMZ_!jqkGGCn0JCf
+KSL)a$LG/*UeqJ<1CT>H#d@#2E,=<KG&U8*$BOQ)0F4rPi<O<0#nPnt&3di_]Q5a<
+!\jiJd%^Zhkk\,)q[i]8d'2G)SI;\%%BQrI0du"BeC3p^YE0%t:pUTbob-d4%]Q92
+ch,c89`iJ;qXF"DDm'dN*<?`N9+_77:n&,;St6MV&J3HhE>JciN>(f`%P_B&Z#&fI
+E>%]q$kP!!n(SZKHOE]1#&miX0i&LgE>n)D)UVP$Z!-j@?PF&5*)N1AOXC0e<s5eU
+)9n!OZ$REdCD$*7%<5k\&YTibd0q]ub7U-Nd<cPSlPMAZ'Mt,;#Oqk8i:!qW)mJuS
+n-9PFM]OTa*jG_cn7`msSJb;Wld4#i;@OHTV'8e$*cJ_9cmKo.]*rZ=,Ubub&CD>7
+a!MB7+H\H&cg_J5>88i='kW.*0mb*!7j;tF*7?8R;$e*0FV+%g=RVLe6knl0*\f&F
+.O?kF&$XGH)TO(iNkfU8o"&`P^FH@=-PF:D;TaCXc8F%q0+uP_;UQs+b3h%E78i.t
+d^^mSjrs<\-BcY<;W:q:q^rIX.rP)607P@To^Hn\1/di@;XSXic:\fi0f'1Qo)gP+
+%5<gU/opapZRIG'_(QHh1(qV`o#u/1h_E2l/[ILliX7J^>+!bn1m:Ed&ZIYZ7(s<6
+2DBD5dM4P/9aB-)#SVhB:kpfIEAk.!#r@2ddjkJ5Gn*c:.5Q^o1P.e(G;aMYHkVW%
+Ba6`*cS:W(]<bEpdb+cpU,[4&2,e'HZ["Y(`mjUX3HK<Q'7DO_#<3C[3)\b@o&D^R
+mlOJ44-R\!1Vg7nc;G>K3i#V(o'"/9pHK=)Um)BM6Yee?"[[:P"GP5TF>EIZf`a0a
+6*[%De"&ghj#lrk3`E^G'G3Pd?N9Wk5LU?,oA_u5$SkZh6;;qnoKN'!X$Q3H7C7P2
+o,g&8iC.h,7<DNBZcu#1QTDKmrH#/5ZqirO2*Ou63])+3'B_fK*D;WT0^Rs^Zen>r
+O\0](5h(!M'GX(nWD#,Of[I/ie3ceadn8)a9b[ga&4oOeRhHK''3!LT[-('RnN_3(
+6F5ts'GjG##>;E!0ba:H%])qMbu"#,7oWP_Z8"DJ4[bFe5BF(ce+Z]RePT=F8BXq/
+PW'Ho4[;uA/bJ4*;qk:Chc4ED3&Le<Po?mVI9'?@3UWFt1hcT(@8g.o=&h1T<?k5f
+`E#uTSlDacod*TQS;r+<+<U~>
endstream
endobj
118 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
119 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im14
/Width 504
/Height 80
/BitsPerComponent 8
/ColorSpace 43 0 R
/Length 12890
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]7K#D>EP:q1$o*=m^QU-Q5M-lE^%_SKWibX+H$"G1*uY]r8I%0jr9+K5Ku
+4!0h`AlC^cenm@9:1mM9jS!F*MF=2sWI,mK7%[+]dVs.X:^iQ,+gN"\<ioH)<bk^H
+j`Wj4"]/n'aOG6g>Hh'Q+M*9,V(JlUDHAorf'R[M==dEE4<?F6Y=PF1kbYRC%A[5^
+(qaH>*KS93Y?5$4.`#*"dD95S]sBeWL#t-O4XQLiVk1u6;(Sdu_gSY%o6K)(1I7>V
+DKf<uk42edMXB@@qjm"*[&@r;)\)6pS^6M#2-<"P1Pp+5`8btK1h3<<n9B=[S(@b-
+#,lT'PHN/c&"TKli1DYEfBnQtI6QEq[0Q=/Ym<EZni.%=T'AO*"4$e[OD="107X00
+T0d;X7,t(\ne)(W+F6"u^G&i3_(]Rq:sVL*g`kQ5n4Xi=Y!>Xkf<p`]AC3lm?kidU
+NNs6%JmarcN2=rI'+1V=qi6l>M,S6e7^6J3'ugldmKC.^gW_!+#o$(A7*?bc#(g6m
+*gT?Q'QG`plkE+tJ^];3Vo2M5W7%NfigW!Oe*=7W-o%NlQq&b[Fp95-C]PV$+E/M4
+9^i`^2C:,hS-B#0E$%eL?u/a&YEUPpOJq[@mg2e?9!\dmY_7o,9i<5"Nk[-gAdMC$
+K/kY/oY;bB/JL<A9S(!52\XMs<@GjUZGf12=q-D6i3Q#WOWqY<c",qj0$V(G[OFTE
+$\BLl2ddco%/.J@(;t>Sc;\gW!)r);g=EWRXd*SWMSn7aUi1;^CUI41_(ImLRtH.H
+^h=m$!s"uF#m(h5Ia+lj.Ot#BB`*'o;cA2k>usS/ja6$pQ;X2Poo8j8Wn73JTsu_U
+.s=W=Ffg@-GB.sH!MGMu#m-d(1(&VI9@etlp?KJJ5LCN9#/dja*MEN0/3aTj'fr7b
+.^a[nQu%_H=J-lX'i=_feXdGCm.Ck.L!pqW.LH6Ma=%A.-qZJ\@p/.fc-nqF,RS(.
+7Rn-+8=PgJmW3-$aNM1H.;%Z\<!S`VeU%$0[9Jf<@KKrA-44`-rjKR;Qo:`D=J1a-
+]uV>!Kcs`89ARTA.#0a/CQhd0Q*L7b/B_l&-!QtI)h#CF@odL/i$VHXWPej\e,`ku
+cDs=l+jEh'$1B"(+q+PRW#c4rJ:JlA^eF;lpbk><$dj+M^SdCmq^qf5MHPQkjc.Tj
+-N8L[OhY`An^&"n0)F(='kpA+l8+3S\j/dr@R+e(!PgPgJ:iVk,Y6m[`AC/WC-$X:
+I@h>.'%ih_rB\GJPJ8t/VULBl=GLn:&qtLd'alfD&Iei.3%e1TZ:nC-e[1M6!n6-h
+o)U;%$3>A+#2P`f!WZO=]tts^PffSO/e'&2QsQmuj#;iLaRHFn9"A;E=TVIFLTFNG
+S58Ba:'T@IV"UC'eDg(+E=C12&j0#,UL#(J28GLlQMh-+,^mpK`%.Yu\Kl_/-qA9f
+_[/HofDCq^np#bs2;6[sXDBuV4i9HK.i00Z'p_*^MFTYoIpo*/H&*4L.?[<F,1=J+
+0HfpL)&,?Y)F\@o5u&lJd*!((_a*TpMP.=I>M\oYJW7M7/XMj@>j6QCNB1oA=cW8X
+go<<+-4mXuMVd!I(21"\#qU>rG,G/1>*84dW9-Rrd-Q"F0s0lD`Tfa!'&Fghb'(M]
+.TqVF==pBYm\^=eHD6!O@4,m/1K=LIfu%U$9A,:mBcAuE6\8%5Jos07n,f'%=acI]
+3'1aGd-%BD@r;U+TW&K)8pYMT8o=7B.)S@3MUl=ZrZIMq/C:>9]8UZW,o3m&B+pOA
+3G2pR[DpR:dHZ:(-(ZJ;@k<(C0u&6t/Z0h=]_*^iW2+"Q%']Hl"mN@lNc292/nI1J
+NGHjS`*+=c8UW7de2WC[4u+.X1B$,^Io@!epE@sd"k=gV,cW<b<%>LO$5Ha%:,sAb
+=smM<;6XQ9R]\>7SGsI9&i^Z01`)V,C_;Z%JZ?_A'1ZHWgV=U-0;Z:lJ0;CkaX_*`
+cB]r4"_k%fEID[69/B2u9\*2X<c$:9fLU&[)n6J]D])Ff#-u3\o@C2;B_Nkj5`pq0
+=.hu::6Lh"&[#u'<cXM]:-s>$,]uYeL'`I^]6?7\;f?M$``!rA3?agh0PG/).^Xk]
+?Y0lu^#hq&d6^g,QR`c2(iG/"'5JDV]bHS5'o)f)ap!=2)0Efcc^?%(M,_^HUUZum
+]=)Bq$p;;B0_p"6)sh\]*W2/irG<mG.pRqQ*61u\,uN4"[1)Z"OTo-6c0?a0mE1V:
+CYdTD5T&bNL+ZeR#a6.\CC;7af7rP8lSJ;=YlKM9+GSJ/-3,(j!5KBPi+NT$O=pE*
+8Mu#I3h8"25dc`?+'_pYOci^cV3@KA^Ts1P4Zp3?/p("6"Pf#?2<]**%*Vn\34?`a
+RbD!Bm'IRLhNsG\*st)GY(/D[ds1;NOMp=aedeo]4bQn`<'G&X\O^5I"M@j9C43ls
+%0>r^#/K.;`_93oQ^\;D-1D>#';6Tam+2'1[P#f`<e9*m!*PstX3%W<(_`X4_jiO;
+3-"m1[*8KFZ76bZ.C%*aZXf*^B*N$1"f+XZ_jdlbE-H)hd:f>gen1Qh"&89=6?UHg
+5^Q$(+G^U20L,mDn/Ggnk@YMeeW?Q,gU:WTQ^$_9qk\)+G15+=d2h(?+;tN2o,@Ac
+nn&"24Kb9fM0g<Hh*&ik,%PLQLQZJDLa=(n6HQbZT`Z89^k8S5frKnHe"h=ag;^Gg
+*>oP@*?=\g'^:8o@_r[*B#&Mo!s"]%Jj;QBq+)8&f8GrcAJ!EOb)(ZA9[%Qq4Q5&+
+6%$[mjcccH<-<W_B6!l!Ydm:u3^am.cX[8iL-nurrmI+g;,*b\b"Hjp>VA]!^[Y5>
+B(9u//TcJuVV&^<PkVjc7MH&@7EPfs+*/Rs1@Zcs,:gS9-j7>5%Xh]di4s0",`\Y3
+U_gI/%=0p!4PKD:Ig"1]<5^XCGg7_P2/1\Z6,d#SA+rB85T$4:EaSq[n-OiRKm^'n
+KU1`&bcD5p,[uh2'T\5g-YHi8cZY/E\pgTnKJ&A%:2$><QFuAh1P=7=%Jjht/-A.(
+"<]\Y!'15_63H.">eh,E,I2'ACjflS!KU\T6<l+"A?r9h]LiBE,)E15P+l]kJ3qbm
+aEXcT0Hi$dc=N$UVAr^:E*e4Y;;a:Xa^k>Qp7-jKC$pl[XWB9-Sr^c[MJMR7W"A_m
+._5%^PD:R"Y&9ZQ>-(A]C?3M>?o7@I#hm'RG$l`q-c0A&8BjW*.P/BQJhmX-N1n3+
+m)Hn8"Z#EjNqEabQ`;T=M$V#GP3YWLh;jqZiqt86Wd\L<!WX\PJ3r?/:<#f0Bh=8;
+`;omMQn)X3d`^2rbp(]^ka<_*g[QcmVHh.11aOeM0aAV6->7'?f^MC-B[*d.+>*a)
+nfc'U/0k3A0cD`_go(X>'+NYqE-)/W3jWEi#K#.6CQ<eaJtC0LdAY(#"D145g*gMd
+1X,q(0NJ:K3;F&-:MP?oWAH]4Z=f8:-R<l?;/[6_I#s0lY)Al[c(_ED1fPYQ;WtnG
+,jNdpr5G]4I)j;10Wq!C"B$E_$qTsRjp'5MngW!)'6(a&K/SmiK^U;DN[5BR$""2R
+OSaeAs!U46%k,an<4diL?mYdu.:1`5;?P1O,UnDsD?_:=O>H?N'8BWYlbs0?nEhjX
+c@b.'mDtF/1eDG([7)Vq#<k`?1/ERt>KX+H$mom$/4^tR5=dQLMKX(p(+/DarXu<X
+a<M]J+U+Me""qUR5V<.H49T%^"`R3=:p.f-MU4j.$ZQaD7IFSN:]`m8'`^ZO?o]Zd
+1h)6sYNr]KW+r9XM!.[b3FYPVdLpf+>3`1E/[-Sq8i@tlG4LRJkQ9UANF4F"XD;BX
+NQoi@&@-E`'L4(pEGHE%`*+MW]Ok(@_D?<.-B?GnH33"c"(4.m5Y;2&:^$hi"AV_\
+o=I*/$=YWL<)#9m6`1^%Vus<t%fe?e?oKdZL/TVj1J5G[a]t-%bjQ+`/*hLp"NgdA
+JjkHrfh:ZfnUW_o#&OF/I:u#a9XJfWKU`P,,dE=i$RW'TDJ63tYHs`^@U-Ghd.Qh3
+3^^:';S[PZe>=?4"&"5c&"Wm]6j/$77po-s?rR9X)?_i7"5l<QL5p]CCfX'qN?X0B
+$!:laL'$p6Y=a]CKFUqt<)Z%,0f-HEcq_**Y[f!i!=O<&jiJ@h@a<1[aV16qk[892
+_!\/a0+DU1L$Xbm*$g-[4f%0qLJ4nXP'2@#6g!W!@R3H((8XBo+A"J/W94nMN-rDj
+"/&6i^fgmt_?DeRjT%L[1lWSB1lIMfHn/c*K8*lGP'.'?`[^JDB(1.".#*Lb5fc7n
+?o'V^7c^lq")@=Qb+S,mGn!/PlmHX&[+A$)])HAL0IK!XKUP=3CAh!jGZ=D$$?l.P
+?WHH#""T-KNpd/CL789b3_;OnU)niZT0NY,DW!,LdgQ<Y5QlUB"oqm3FYEu,:GIl$
+"J@jZ;Kk9u+Jg=q-4)Yu"c@E$jMI'@`)9:acG7_f9f'2!"<^5<+@SimnuiA]<\O%D
+lcANOCngUL>VRq2/$,7>E=:-PdRAtYnJXOS^`ihO#0#)6muX,+.K]Z.-WPX"_t6A-
+N&<#8`0B1@J/D_W7#krc8rcef+AN(?;b-md"e]4/of**T:'@^o.?%h7Y6pD.DRAHR
+7qHcrUBUb^AK!-015B]nBdDQr!0X=/csTBI?qY6";?Xd.7s'^O1EOmjAoPjCWb'X8
+P7;&g8mfgA_T:t"YBWk,'ba:9Qcb,]..F2OB3co^7],KLW'+XL@qRV%/u(bs6kn-<
+fND.N8YUB/9XAFj$=lCF%jtub#M90pCL4eO"@,Wa5["=V<E#-94O-eq0`WB`UuCJ4
+Uk2-c;u01N5o"Gb\;/dO-Obb"9O_aVB:qj"i)g/5?j33+4BAln+A2jDbpeH2d)Q^I
+jXL;9QsQ$61nYTc1VF.i"E*d](QQe2UA"RAVPMXt\V,G$K%MK*13DG2jR^e%f@`;0
+00rXUV*dOK"HuS>=`J'+_+=8OKoJS,Ln:7\"@-o25]-c@1^'#c<"nL[VB[T:Eeu1e
+/Se<7fLA6I0.&EE>L/F3k3c[Bi_q1[MPk1jTKE>e8SV8l"kSJ42>;"\GAE:5+#QN-
+(JH(JmgA1#Qt[Boc$;-":DIabJ!](CG@+V:Pk3Mla/)0)AqVAs."0Pe"#*X6p@1[]
+59EAf<2Xi>=&N$1[#JeCK6+(ubW=:mi5@l#"5m=8i+rU"S-6)s>LOa(E!RX%[!Ze5
+3JY4)BMeDh&Gk&F?jU4>CAN@O*,*F'I>n:2+BAYe_gDG`"a9SC',guhroB9f"KkU$
+EEahX'EP>88Mt-o_]Suf>gQOUA#Ba.2#;7S-Ji@kUW<kY"9ib]"RHj2,fYQA'mBgY
+;WNj5";Q=R8aCu([Y8L0>luFsnl(OFIdIkN/Yb9Ni%P8k<!D2f"s@8[;p15C7"#jU
+U#^'.7Yq!RPWiWo,7:RT^c+fJ)$O#).?BR)/MEKGN`.M0"!C,=H2X@c?3VNXM:VDU
+OB1)a]!umr$PWhC!Zuc%Cu(!#K7\=KYH)<?Y]"Q4W8spLFQ0,8KaCW[QR]mo=g[#I
+KJ<l$Q@M.&(PR__dls)27h@dDer8Oa=_3^Q(/='WPoQ#:$mJi>0ltMmJ4jA?W7s=,
+&'ApnUZ<]>*/%GR4[TX=JlLHimKD0FQ]^ie,rD3g3.6L&C?G!gH2Il>@Ktb'OuBM0
+0;JaIq1Xo39GcGUGd3W+]"%*;QA-g/FN^7Bl2e[`8!a#51oGh_.u`O(BQN.5RGj_O
+j_YrH(/,>t##YIlCp2hnd(hG]i*HUqB7+)Z"Or-3)AOO%Id7ESK/?r(qJ'<F<[4C!
+`G0Ps^bc1;V+8(=?4o[;dF>b&DG>gD<qo7E/,4o+"Emlj1]&\`R=J_oAgHU*K]"0[
+%f)onA-P;.#%1a@pOWR0V2>t3qH!'unQ/ii1s]hmV_k@C4'*Gb%PIf'"(5>>o?!&9
+7;tb1<s6K2KJp<.L8>,;k]kU&*'QY2'%$c:/XRFYP]d4\C'S-k#.sj<TM,J24(&6:
+Ca)EiQ,qQTpl@se%!3X8X0A!o!t@7kqDi%aJ5-5";cV/hnjr%Te64"&A8%)&R^o`>
+-QE0S"p<dR7t=0Z+@H=3nNfSTN%0AB#^c]a_(h8GCKH)ji)a\te$>=f\CS2HoSmr?
+Z7'0#;:ME#Nl9AB375<R8K],Y)i3Rj5sC89V6:$Kp;'qViJgFOVfD`rBg-`1`dOTT
+!k+g,=`=Oi+9oVp"b98L#X!9ChBA6SYbk*NfJq[+*d6dbEtR2WR_DUM10S097]*LR
+Q[As\K5ZaO9Fb%KdJ6g>a?E0C0QS@b+<nh*e1ZF+!^JXH?qpn"`!)D^CN]UX]*ap@
+Sr.*:!kP"O)/KKMX3WT@YH_(_&5`50o$H3'N'#C5Y/&C#q,f^EAN^qb+<gts=9O"p
+d$u117e]<SJoVZ2Q\*/W$$)f(V[3c2[6e=iUm;$H+9b#AOuXt=!+H.8A->a"lsr4>
+d<;l`^aDs$b@aRtOF,.>P(.Q0GKdLX`E9eE$Tn'mDXRMY0_&NeD*W-lJAMQF[CmZ,
+-W&SeSYF"XJ5-9@C^,7]"b9h]+B@BN2X]i]DrXqp#d+;\:^+XJ"orG%>"Af^=9VIs
+DjJ"e'Z#9'<+M3ffto;drZH+aBpnsCVP<P\+=4O@Zile>?jCA.biuSO9c#:3O[\8k
+:&t];%YXj9dhKr13g.BI<$K+Q#!dP@i+N8gP?2h;7a&d,=&2Mf2D=9g:_@he9IBF]
+Fl;"[%;D(3aJQ.TjVf]W?k8?I0`@o2CJUcT=#5qVFg,n#[N_\Q"?tq>i*U_(qr*Y-
+.A\cr__ad.8%VqjmD*/&T'+DnJ&'TY?]uL<()DoZSj$UZQ.,7f)VV^1#j7JO/q>&K
+63'%cNJ56c3.sO8%#':@n6dd^&Hr5$&QlDH0c#UtJY:qSHls#`"CrYeOA$rL#tUn5
+BdAj*%gRb7;d#X;*"E1jifT=!/peJ07Ah9=co-h)'G!GS+g@V/*=RY>6*SF@-5-Xd
+k](Q45#VrJ`W73n"U;SQY>Kl".?'?1E!OeLnK:Q_eTn=:!APP+8g48@KS%%5jqocj
+$c=8'M-SVQ4,Mep<glIs=!7fE/=5"Cs!A0[Ku;m.(kb>U&-kRRJ>c']$O0ABRok@C
+^_@4_`.F+*Zreal$ABHs306`\'8cq05p&3W+qP!`oe<UH+e-X$Vr6Kh?nren#;G+e
+\5sX_S5/G(4%8JonVdUhj5MKZDDr=<KYel>XK=CRC-&L]9G72^VJ-u)#UO1G7$>BZ
+P2ZbBbF2t%Vb,?Lg;C#gL7c0Fdc/YATTCu?L8#fJ*/:/;8eM7-+?g>=lFIo$Y@+"U
+%"b..(pUmBlN75>W8b)j!hd0O-%_ebcj6dm@Ns.3bIk"j5g0"L/2*rp('juWi&VGQ
+X[kLP"!GB1o=FL=:7<U>oQ$W]?uf%$Jm`VLTe?f5.^+Fhh$4kBJF]KD8i#DK^b5[i
++pil9O>=_+a@+)\KJB7@9*B-sC=9\s1m4rR8j``s/BQX9%0F\`(<(lc_IU*`M;)_T
+aL0Ig$NqX2N#a$,OCAks_"]quenHnI!kp1sAHB/3MK9.WdYo6KUsDspbbU/1*t5T9
+XQYR5FjLs4<i[o&$NgDX@N,OQaC5qh5tFld"H?eGf7B+-/dqi<9bIZ3FCI1YaJq&4
+1#Ptt<l6XWUGE@pD2QR2]s8)jZE2Kd"cr]k0HpjVDL7d-"<cno0nX5>0Fb\>GTtip
+X%T`&a)7bZ$=LA9a9R<j#YYm8&)^1r"DoP?+3-.X'F04tgI`#U;^8.M3ah6SX3s[H
+P>W\\J0?0>QNX8tUTVZ\nB$"jeQO=NS\CCB%$lBKf0G]_)[=-OBGLe<=@a!UOg$O(
+JeqfE$A',N!A(=FAZWD=DXpg7Jfp^5$FR[m'Fd1TK3`YPdq#!s,lGk0%G[J-F9T_>
+5@Wn:@45:rKn4u<:BT'GA-`4Hp_!seb-THsU4?/-O7+L,(^C,qFYjZ:pWoi!0lhkZ
+ottXT0>&l-ST@%?TNh[+Yb:.b'*L%KC(<:qW&H$!(BT^_-u4V]$F%>B@fm.dc^0:p
+7R0KQ!haoW!q95!!GEkbAO$h.cn%PU)NOsXN9:8(:qf[br]0@Z&/qrEfA/2RF(\_a
+SU_\jaFOm'W)O'(:eK0aH0Bs$XXC.s(n1N;1+Pr`n@[f>"@3;G=JhT'ZD?&eJ>sB7
+OPmA^#REm";Kk]e/D!>#I`t(8).d3$:P(L1iBZlS"(6:/!S;^.+oA'</g]I(eT:k_
+b&VYW)3t;Zf_%d%K4\Z=;jNLZGT>Jn.0b(q`'Q)#S6-Y*L6[.]<AbTLdr8&5=cF"?
+nkW4nA5rcNPQ=2u#/K7O0d\2(.gIts;q`9CTK5rMdM2XYgDDJPr7dF`IKVpg-@p]E
+#Fq#j#@'YK/O1Qc\$MZE:1tpVi0@)+PPb]Qaf71sTeoA^Wa_K3%rpM-"Z&Ck#!jdt
+:gdsj'm\=j<#k-G8!rWs=W&FaGUN\lTpUD_6B>cCRS"iR\MK#,^RlqkC&hjn[&",P
+JI7]-^mGZiJ5-J<0I^sR-kWhNb4VMP+9Y8rI3(eBZ9W`\Oanti,P(h^!H9Unj\,ut
+Jl#!sM4BZh"e7c!a#I_3@4Oak'tMh=f#kY(+c!#@V)C/r)%+Z3o8.sIWCWL-=X031
+1m(^8f%nE([9r;*)1e,4g`i9",BD_V&Jq/H'Zr8+l(EaV2]ic-\-u7=<"5g<%L:>M
+V):-DlHX\#F,l+);^uLKXI0:'8GmjrcPgr:nuE]DieM;jGa&49%6\$:%0__&&H[$O
+)$)2G"9hoH+;-"kSdbj2e^t*.!*0I.LaWFj6)4RT8dadp&I%*c(BXp]$GfOk3FK'(
+!cV./_+YbqZ2-=5ajQ6L6puS?Ye,GT3X`d>2$BS&o:\4Q%NC,R-cRbR]G,oqXRbHS
+9ej.;PSQiI%5hArH&TLjg0`hXjh9&@Mu^3$b*G?V;A*BJP=<9odK't=GG'hDjIITk
+$*d+E>q.\j3_A+3Uce!;m&7Ps\P8J6>=K/2STK*UbY7<*8WBgg3teDiq$SoZNYalu
+-B2foj\<^*-c>g0bDros/nkC]]\jV6_0@g@ld-8ri(se_^a_erM;L;@\AaW)&B(CV
+hLfc\$pgZub+Pa=Ju<c"LaY$gi5T1,bAhF_3%14c2<pG@BOU!WMZR!P?%C9J&;[7n
+!oU."K.D``iqnZaEh1OdahV(F8qI.1H,Mh8Q<=3<)T2q227^%5:'mD2I2\a_Ooj?L
+l/b+#TI^NR&7,[Z?<YfSr9L@OA7J`0.B-q#c)$ho"MkKo3p?L4+nWBPRZ!SgDJgE(
+RK[=r).-8PClk=1<(fek.EG?Y2CTp&"k#XR8gn'O)5&QP>n(@##\aGT47.K(-CnR1
+J/SMdFpp[X0*Z=T)1oG+E^;M]JuF?qQ@n#rJESH>mK/`,X_X1&?nKWk<#("SO:$PQ
+agp^PpGA\kN@.\4gj8[)=lVnH+`J%s7gp9jGpWb+Oeu$rZjFc.\cZXIrEl!pHkBa'
+Gl[_6AT=C43Z(j,<@K;8RZaBjjsF;rha:ZLNWnoTnJ\=Tr5IieR&8#XSXja8L*/bH
+*^a#+aWba\X8E2Xn1Jtl<,(]54&0X7_SB]f8ik7m;:W\K[+:rf,KMhPTdWqEV'8!C
+"Glb[M0*QnOrZI-&#$T8/.DWA3sJFW(6Ct>$A"bAU<=T*mrJ.X_&E&e@&9R5TMOn@
+)T;kOQeKj&8K$b$Cif4;X.FMPK==U1Zc*h!XRI?W!<L>&T"NP"+@aO2ckYb5$jHbq
+n-Ufb42:=99J:IXSf(?HP-0Qa:DG07Ir,$um]<[3JrHP!GVD@M?kE3Bd?^hQiua-S
+%<2]R^l5WCn"A%WT5(Yd=GE!sY6jCsJCkJ^a:K\]LSh>A$G%Us3/[cNJ;l@\/(j*I
+.T80co;S[N$*dYF)7^7K%\]:<#Z.Ul+j1XXM[c0lON=mb@Fh#cc&9XH!0O#p0G?[d
+huPq;/i_to8.cr;+0u(mT/`k[35ZsAJ;c5C,=(cLg/A"J]eO4I#\4.UTU;%$LTbCd
++rUQoE/G)9OI'\A5cTm&PQ:cg#s$uC!9g@">1^UepOH?RX?bYQHpSaN(dC\+Q8ldS
+Mm+(GWYqJO2!JY8iu.qIpI)M&`48PN@Y]mrf"c%G1_9X'5pZNt6ie2EN)R"i&M"6o
+k^aT2NC%<=P)Z4[<h+1k-P-YHnoM@PpGod>X8(tOdo$KKQk%3+LkAWfEPr/M*fiRM
+RhL)SCC`.''IluB63+Z_H%;[L[gcK:+Ogc;;,&nLE#A4b+?9Z<O[qu`;F;?D*8pH8
+CEt3G31f\G':\L/;4@s0.$[r6N$._mR+Jd>m)9g!OZQ(#ReF.@7Ou=$UkB?i0hi/i
+e@E4]'a`6`;!XW\TUG<o06keNMOC+$2(C=HP>RZ%+_8#PR#0<&J7HVKRnUb1pc!d@
+R)2RoO:3&+l5I1t5<o`L41Lks:E*be^I1M@kgUNu0rY0;6s-K#1h)^uS.jPINJQ;E
+qQZqi2&c;19,+WGOrd*)&KerH`nRj3;6hYh*M#$I-M)9d&Ips3Mi0D3MEu4nkbFH;
+%%N^p'tc@/J@^^8.['EgZ<5Hd>0]K#ft8jU+ag[+&U"r\7&W1p+$bsYiE6n7lOi3]
+^*,BE]OST@S1kS%M>;-F>8.k2Q^`PE$-A+DOJ+KRS<$LJN,'[s=O0+H!M#QK*AbMQ
+dF52TNL2u7/&P\[@8X:58106?Uk3G1jKM8b&Jh%GPO`8kaiu")--dI09/ER_.C"uM
+gWZI1bL,p<fUWbM\$0U8]Vrr81#TA.rXH+*4L1PSj2oMlbKp7_+2K':oR9<oZC0DI
++`P%$o(NOHll3UFYa`hR6lWNnR`B6G'r:kf['cc14A[;oci_LZ]Yl,WLX!?;_92^=
+d(g%Z"2)8^bO`Tql@ZTM[#!s[[u5OO6#A@k@iH'c#^HHk9+qWUA@ID1)j$NtMG5bh
+W6gXo1aq(cE</l2.Bq%`RXD[r;Lp!J$cfdD_,/ArWQL7jR1Pai&>66=W`KIICF!=Q
+`?="<:_$Bo/<Ujlbb,+QN4ZR9"1<87'hV3Bh%qci.$Oc3-_&?*5eA]A`<`R[9'E"B
+*=!/fcr;]U,i'9F\`Ql8oLdXG9?YORqrNk)1m]ZQM44dIf_8@hIEbJS&i,XsPrDCI
+!L&@uSTMgn3>;u)*gDK4Wiuec=j@Iqh$@DBJ<;^e.#&6i@Q-#Bej'SC+k%U)!`1Sa
+P/B[1L_Z4E"W6K_9q0<C8-OnS]2,3HTK!4\lXl=E+Z=#ZeVueUfc(36%AA2>&fRXr
+PRbYW<R7o(%re]p1!(!o(KA7W5^8ns4]f(/4BHP)$iB$^/P(fa.6Q-`4PHeWU/D!M
+A<`'_M)!I.=Xb_nL"ISh*fMFrko#F6KRgS_aI2ldB^m@!hZ1LM*[n"MYje1[9f)Wp
+!3M<e=UNdN,1bBQ/dkjZ3CKlLR#:tn$(=;WYmLnap/]Bp9FUl!*ChCJ9G6YEfL)@-
+i2$GK$mE3Y6[`4!Ro[tV%Z1to%#\&EeNFUVL'fVrM#>*%a_2'!]o,$QJ6M`AAB3)/
+=3tf/^k/pm@.pQ[IoqD\fStk9,DRB9%&jB(!5h!jnO&\+Dbj(k!2pM_CZgcRkaL:,
+%74!NMM3n76^S3j1]'D9+g&`B*e<4u.jC7VU3bIU67CIt!D!b4#S"\^Or9>g,68jI
+SUV"I_Arp6`G;PQ4;Aq-%*-U/9@VkCK2b=h-%Mro!@S^?F2&0(bfbQoM0^2(R9Pl;
+aH^#5SLB5X_.ZfIjc91_7]?S"F2ndl+$5/+PI\RGC9n3p\5I0A;.<7__(&##Y,Z>+
+<>;"^<..P9[><`J'[3:>d?XdZ&/nG"7i=][-)5u]#a]6]',ltSn_X?!s2jhA<U^Bn
+0p9"'@Zsn#<Wul86CGK*lkl+ag;uO9%%3b_Rtt3%X.A7+=fHr+lr/FmNQP-0&Q[7W
+Hldtu0j:Z8Rr7.LURP)H$%SEXK3mGPW[(sW%Z@*nl7a'+2OKF;,pRVqWERpCUIU_q
+6L/\(A2?rQ#dp*X=TQgk!Yc8lh3"uY)j>*[oNTQjW)!2X%*?$-C`AuABM]XJQHJo*
+mDD6'lk]I4:GLGUU4aMR$C]W!)OT*IObaMJ&&n186b4F?J-R7[!hZT&YDnWJ7MI:V
+)@8,%3jHj>_^)G,c*31QR,O*`rE>Wt?^5^I*g4'kTF3=0J)W34&Ok_/@seR?S!t\^
+Wo0'a]!C5SP2e6`*77YZ4HY.r$QdSnU1uSJ)',P-WK0B?0YTA=;Y\OVW[EWKb<1Ec
+fEqW82mjb9UJ0s60piA2&@*?D[)q>A=r\..82;nsk:jG>r#ApX,sc4,_,ue5-)bMp
+P2Z>DSBKtuTX(%cC)VrrbCcfVW"51WNh-Zke)>6W_.as@UU!SHbI%Ap.h.@7UJ=4q
+iY_Jb/2S3CrQfJn(B**RkrZ?5c/OW,C&Y$V1W#5R+MhIhg4<tHXeV'.*\%KA5tT%s
+hK>Z3-8JLm?c/hY9?/bi*bYtf8$6hCJ^#opY.AF`]Q%&8E@"5]QCR*MA1F$69UH3`
+Xg#Y5jU#MCf#j%I@u27iOGRphj[<?`bgLIXC@Oh1aG3O@\;e$Ke7g)nAu,ms3@+;r
+[_8o/SO-^mnIXd=i44k<eDFY<0@_L3eI>78;GQX"p2'f@9?KsCBY9MBa^@fTUis==
+3t^6@O%b;VA=Ih0N\D"VDp470lMf"C*pC8bVbQk=\#.C9e/m\RO)42O=I*Q'$&m7H
+#,Y/KDpq?EKZpg.03B5$<5!K@Kh,$^D=9h#g@]ZNQ*8p["/mdafAd<F8Kl9b;=L1]
+gD,B@f*l&X`9qY7@%@XArPWGWQLJ@]n)"kH0,APO(\*(YnHpIZ-PQ#mamkE3n^9lg
+Nudcb+3\(7EYd=6#Q~>
endstream
endobj
121 0 obj
<<
/Length 2129
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f-n%R1+h6R39@\3=sE3_dK:=C70uLj$@Y82]X@[-Gq"G)Nb1?_;R)X
+D(oZ<)%21O)!!0B-nYqe`Nq;?mUR(NN.rQ[FF$Y8R`qR*OU-n[2B<4(,FNLI0cLNU
+6G^IQ=Ul8b"XCUd,[rBYe7R:!EK&aa1_4MklimaV684mgG\_01j)[)9%YbXO9.<@8
+Pm(=&:r(Ff]?Y&1g&2,0Cr9nm!qU,ZnV62t`>kXB9-c",j7,+6NnZ(qR?\9ZaDmU(
+EY'.EUCl'9.iB93"hB$*T7Obp)MNgHp>`sQLSHXt_6Cf/@P3@r0Ne,S_8p[#$ubEm
+s14mko_o";lls?&9Rq4'L&mZ\m]pZ->519WU<K)0"";q[471bKhMj.$c8(E!gT(sr
+#V4o:To-u\M(;,q>T<kIQt3=oiBX7qN1g6'2@a5D.Y=]l<.^4+89eY^1@L$2(^C(\
+@N2)aYbW'<$,UeU6#0#%)%(A^l8B%qT[GcY_#W=J"9W>[co!%=`\<C'!9c@p")uCD
+N`8F^8<(NSa?#9$eG'Ra1[+$Z8g=W,S^Cr/ndmRTHfm1R@b=L;:h(p3dfgnf?k`cq
+88h_X6'tSTeH4s5,p7dp-QiGi?sjn-6)m>t<PhR2Aq^>8+?*1sr=r./!Jk\/#V>K1
+3R:Yf&h10I8BNtmp<Z`V>SIb26OY,4Kjm[\7'q]'niZ)JW`=-V4'Hd:hDQTEbSE,H
+iG`E5NY>uI)(@k-@g1`?(`F13E]TP"<GL75]FIX;&0-H+Y[(5B9+1"he\Z.T,u&tV
+b@u^)5jgIhK;9;@c)qc=&5GNQOuA=&@*:hFc(-^UN0d^t.SnOo_@SNW5jP=DF6M=:
+l825C:WbZAM,c>,(17hTZuaSN34LA5(6!,j?Vsd`3:[jPfH=[oas3;FC^pQ7b?WY=
+Qt26Deh)r2YlT!6B&FV6V.s2OQ*ISj)^W+7gbuR^H<g2=f65LWImJ?t6#R\;j]nBC
+[)IB'%kF=)d^]-FF$^s^<riL30A<p$E#[b\BPE8sQL`,m`*p).)Wr:MiH`foN#W[G
+GISP8TOWiu:':i=7M#d?U;J5\@An75UN/Cb14c15)tB`<FHRSG_3f,/!K]63$GZk-
+^nLp<&2FJ9*0@'X!1;2*3BeUFO+R(c$qg:_%H',HORS9(_GMKd6pRW$!:E/ZGYJ;A
+CbCh=aS<YGj`+fn)^dBtZ\\J%1@$t>Q4Rr?K4#.CE(-$Zo`>5(e0P<<8fN?fK+_Fb
+2']?eNk%]Hb+]#*9P.`T34P"XioEL\Ys'YVfV]?,/*M`8AhZXj]LV!u>q@_9#Xs!-
+'d;@ALsZDd`i.3*A$g?)O]WU#LuB-1,ZooN$00#?Cd[69NKGrU7PEEM+68YKHW!Zh
+P%"V]9)?V"7"ldL'[VZ%E)\(C4HdCn?s(OE2DPJ:n,UgI%0<Pj0i8urbF'^nAaEi_
+;Y"'d.5r#QklN$40TdV)3<):_WCa(:(e[1"Xbb/bOmsK/7Mu:Pk3SG(Lk]CAR5lXl
+>!jG9*[Qs%:ms[:A"':S>(]0U/u4*@T(;l":UnY.-hHPhnh+I73Cbkr4LcR+^/Yh\
++#TcZhObB")UU#0'Blh'LGWUo:2,hO-osa!#_D\D);p;uR7NXK%JMO.N?QBccD@d(
+N$O9n9B/EcVY#=K;An$k&m8Ri`I<QakG^"+4Xka=%[I3-b>'$_0r/qQRSau?<@PjX
+VH%)s:hc=gWXVmq78B[W\0)5\[!.F.9!gb&pJn15Br`e.R9(lM3b9H>X<?'n:B\^+
+.:HA]<CRVK=FCruXZ!C`cCJ(Kmn]c2(o1QUpX%8`XfMX:#(YX/<<>/eCu(Ye$[<4d
+)V%lj/Y&iJ(;*J$JRkk99I@i4b`MX?/o:2Y[e3\>g/k7fl_V>)(-\qNqSOoob"XTK
+f$_>Q#A;V/lD<'k,[DpO*cAB([?a.m>6&53&o,%hOY1]ZR$<6*jeTPU?M!#XM)q_p
+?]+HjpJ4DL*F`T=]^Zb'7]R%g/dsnCZ1_VIGm=:XAVc=*(7`Y9'-cK?Ko>LH"A#K4
+I5"'D_6dGOajL4~>
endstream
endobj
122 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F10 22 0 R
/F12 34 0 R
>>
/XObject <<
/Im14 119 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS5 43 0 R
>>
>>
endobj
124 0 obj
<<
/Length 48132
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVoaC$V;$qB4W\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="6+"jG0oASXTP1]G1`$WH0sPEKO>W-@b(N@.;"$LhSP4d%
+TtKH3KcA;!_\'QO6D=nn[#omSD()C0#"+kF1lDI"_obAdC`J]g2*qENGXOZ_+>&pg
+k"'09dNAaRi;"P@,XE^pN?S*kZ*5-FQ9aB'N"dl`Um$aZR4.";D3cYCB=%FD%L>P5
+_K<[45,Ji/).eQ?SUQc44=D4F7g"%\bB8F*iD@UeVB6QjMll#J`-cVFj-IXedj_M)
+AiU`(-W;J*Jh\1$/-[mZ^uf`!(eoSa)8+*J"X0)h/gN`e`\bB(TKrD`,B2d$/&Q$c
+2iPQU)[e/`8DXmf@n=m(5=%iO.LAh]Ep9:"l;6=\%$Q@C2@YbF4H77*lnj`?J;k='
+:87<rKFYo,&-g<S>T1(GOLG!L_.1jb4X6?Q-O`nJdf,6SF4*%jj*9?3KE::%(JKae
+*YtL/aDeVk0+^A_KqZS$V)E&gA1e#f8DH07US(a"$mTHD2GZ\"UbIg]/H.67'F;lL
+d3@ea'Z<io9[^M7;C(/=boghX,7ZM?+q166`]4JQJE[LPdF4oIa69%H[t_'\>lc4.
+.P;PB8s6@I#h./B"cWU70(Q[GgXu6(08&?b5-MThrP,Q6!s-3A4;++/'WaoYU2fKo
+N$N(_iY4tHbA?Ck#\lVbXnOTLnPX;b]dUFDEjdn8n6@k4=KHW=5)%I4<"o[l6doOL
+as^`AWBmiH(:u0HWH0QJ5i7)#UQ@b6_6mQM;SpaR-WO0-d+GQc,GUJ^%(72X6mXLf
+UBK580ZZ#0K*]m`Ag%/5,79C>_[if*eem-KJPpc2h/V-p'I)cQACMc(Qr*DY+dd-]
+8fI-4;N;T2fl88+(9qr/F8e-1%>/oN]'BWK8/WZrE^YS\%L?qjf-*I#]"5.NXrKMb
+g*sefqu_rn=RS+@rE.Dk>W,G=nAPTkE1Heh6!AksE,'7EZDA^'P'Abk<H[#RLAcpK
+\13&!gC%@kc>+t76`A%*bKub0\#uE>/L.!`"t@5;dq6#2#2I3Z&9D?*3]H[%n#3Hd
+5ta$K%b>FUNn&@:FT01gKGOL%d"(18L"L4ei1Tg.'4X&K>MApu5lfg_K6d)!Dl%o\
+TZ.oh;)Nd;J22ij`YoBGBF_4Kre<iQ(dZPl3$@/-4LQdC:CpTS^qi.:T\d)m6%j+E
+=e;!9\HE!?+:SY\2Q0_`$)'V."X)ImK#S_X@/q\_@A#H3A/&)^&RB'E&IF4>Fr[1m
+.#5m''#Xs(Yas-XB]6LtZa]ecg)*cm,s!JBp7-AZ)IA:SKkES>FVmCI/;>V=,s;L/
+k+(J'%ZZ'"`AK4Y!CFVH/\SZtf/@]//3[d1Sj:8LhYIo6`^,Zn#d<B*)'/<0%3`+P
+U"$`(MVrc8B>sYb6Al'+lP41\nb[nDm,hWMGt/7q#9S_KU/i+RJ:o&-W((/36^'#(
+WCdCP).(?aj+8ONkS]&(o^s*[G7:CW2orL\I04Sq8akm;+Gfm-:k3A"0]es^,/E%S
+K6!>f_IBT,NZ=ofcCKaQ>WoGF#S7"H"V<YrZ/d=&jYU"W6spsd&i:"')LA"`.K-t*
+jX@r1/mb4e#=/[Q@u78!QHoJMT.o+@6P=^"c+QB@34cAmr+:a>_N9N5/58L!BS>RV
+'[l7\gYRHn3D12D*a30'@FRE60?N;X&j?b2F?u1q\2kB3hG%FI!JHT?nUd-!YpGpp
+=_GDBZGstPNc_*q`S:ZQ'2Cp2UK8Z?`#8[Z>a`jq81j###)."])i6=?0P3S0&<LK5
+!PN9NVI1<(3r`SYc##8Pa\ULQO^O-YIBfT(**EA,>O6@5Yr5(q=\C:J93$_Op2#oG
+)VbbfXdcS=:;C!694e4"&$ttu_qO#fCb:pP1Z1)<RM0UD<tg937p`s]i+.")Q#1O"
+$mRm6Gr'&X?>tpqfXd5#?mT&k#g'q)".2Z$!<=X\o/\5&g<!KW<G8L8DTjh#AR(Y*
+FftE!^_fBV%>[0T[$F79gCl)TXR3.)Fu''ORb6CI\2GN)lN>j@C'ZKcT*Ct<dU:6'
+BJ=lI[mku+O<PUEDC'-(F;U*GpB,I;H.`B9'HB)%+@Iimi-)R`'k47H>t\9ZZ&[&d
+e;%OWA..6X1beYr.8>*45!0&t#2%o\ORfT#+3D"3]2sRs9$L;@:3JUM[]ACT/a3d!
+KKR#3Hg5,Vm;7"lJ\W.R?s;=iCN&tm1o(i;Rk0@Qc1U>%Rf);\ZdEPi%:"nTm00"r
+$\5L)rPn#;$=@ma\BT=J#3['G%F$5SdeY=PBcQ01FFd!2>'!-pWrnmaeqhWjQU^13
+,FW`1HI\HW:hpM1XK7WXc7[>(fZeM.2(#laT]8Q.m>%2fV;BYsn@n7kDl!i0(XRLB
+=7#)Meb2Fu<#SDA@QgQf[&2^4H9ZCd4gT"P(<a%RVe=q<B=g(9e@#1k4)T(-@!:Y%
+CYHgJn%GX02tlduaj5*5rX$2Q^B`UWPD*p\E"(-Kq6g,jE,P(mUTEVpgDiBuE*O'M
+p'2Su)S4Pjh9EjlcP!\aVi'/V=iN%C0B7D7Qahr6bOhCok$-#o[[lGUn3N_baKXQ&
+jGK'P;'dCHX^0qlFAEko[Vhaj$L'S_7i+*Vl/83PQWhL7G53-2SV)B!Nlf'&O([BS
+i1nt3<SMjLT'dVnddZ++foG5:#+aq1=q:AFqbM_#g/0m%m`!mTmr>]U-b=Q;%GgoD
+`:%#*^=Z@kj*\;Uf,<1#B&+W.4RNL$7SctYm4G?ErO_9.BS6q9AYcn/49cgNJ`g4h
+AT^M8Y?p*dkuDsp/1u1t56K\T:4tn/+tN?)BAb,^PX[8i>Nqg4g1h=SEW-ccgAb[4
+qEM0(4Z7ZaItOEKmujQr#V^/YWEcL=fG+_F./i%)3p5D,l1;?4g(tRPr'*O!DZJCk
+4QJ(Bda&j4c<A^L`msP_rm2"uE"<!Zi\g1`XKS_Gk4&&\-E`<-0qqDh6M`9#&:#jR
+8B1]o!Y2JS9a"t3s(op[NB/k4Jle^*1kRp7&3M6M5X7Xo5XIrlUgVp7C6t[l#UG!G
+Y;ZVpi<?=I"AkEk0MZmID[<Ro#]3oSd!X-!o%N(l$VMuXN-brNK&,lR.M.XL0W)+0
+mgH7E$ZO,lL@EZLN<LO&k:2GtM\aA&mdjr!$ujPoU)=FiGTcC#%aEkUJ8j0N0bG!4
+#&t:\&Fq&bp<nO0XNrm3UKG%c*s7G`FWsX8@f$c+qUr$%s7&Y@06/[T.eO7D#:F-u
+?tT=6:u!VZ(2GnJO]^G^%2R,n"u%JAc*T(m@!M3^ZJmGPNR8?AHJS+3hJlU6%FGpZ
+9&EK=)J^u6Z!cI/MRMZ\)%-BInP'tm]I<(<*$UF`Da>;bDS$KgcV_k+:*Bg;ZJlIs
+)/u\uZ%!`COW2Ln*V&JREMhg$R2d^r('6W@cVcX;7j-4N*X3o0d+oh-!?PWe*"h-R
+Z+P!0[VO;-+>-_5;A.8p@-98]a7;_<nk0luk&D"Fgb*FZ%hg0t],SP).Ij(=%8A-h
+)]<2<-BPthkW'U,Pp:(X-rL9k!-05;?jAFP+YoH6;F'"[EuD#rnkt;];EP.oeKq?Q
+9i?Zk&s4J9E\gTEpThmY"#UKA9eA-ITb=m':9P@A2(C6'(:*!Qdb_>4h(>n\/C'e=
+o"d!-`:M/^/?_u+ZI'I#TXHV@,KjRK;:RDm'.2/Y_"-PM'(WIdW4"I*0_'QG1A`lE
+2_srR19r8YCLnH#r@JV<0l`7,:U)cQUG`c//C.Z\P+(loHSq!91+Z-X''SaXD_,ZA
+1Fj>#P=%9-7kr0:2H*C*K'+d35clgHm4i*,0k2dD7lqA&q]KS]P>r1bjI(),,I>&1
+PJ\b'`o7Z:1Lj]P'!XRjP3gT.4EF.N.oAB,"#0;R/H[jd,;h^6O"AIa5LXC%lI.uH
+EpV8i5LXsEPLV@K="SA[/l).+'B:WZ>;]:21!U(mPFh.pK0tj&_:&h^N:eb*OY\P\
+/l7Zf8!?Bk(@G&g0uGe9PToKG-Uj4WZ1MHl1C4?8f*p/754Zq7PZ9qi;+.Sc7.0Rd
+;T;Z,1Ea"D^D*R;PJ&+1<$Ti<8@59b.n\j/[khVB8p#UQ1Zn*jD)l^E8CJ([ZK*ue
+Vb)dI8^?EB'',^l18(r"7FP3nPk.@[5U82`61YR8eGD3_#;]gN:NXmhZ:Qf,9ejmI
+:NSs%'U7t"DbbnL1Er)9&m7(i?STcI;q/''EaphEB.d(t;q/VQFVISl2U:ta;=>;q
+2/cG.h!gJZ<L#?-5]KP^LG<h-/lIlh16X9uQWY&!0Tqhb90k$"NDRq,:0!Q[18e8R
+4'K%.YdJITeWj3Rbq%>(=7r=[N:frlI7b$f5]=70O[et`o)$tt/^_#Q;p=teoidDE
+"r1JE&PUP+OO$q9?aX^r<H'c!VCt:3#*G"\obCpO+%T8Y_h)qCd!$##N7j<BpN-2=
+Edjt8I^+&F%(+[@'T!%A!=l>\5VWVpMr#WI,0uF[&!fPi(2T>'7^>BQ@r)_g0cn$q
+M\.N8]*fEgNNY\9T][VJ)=\p[G+E2tK0V->BIg==[ZP<62R.Cs"RniqNe"6pD/9`6
+CiMgV0n0WfSun&9/p>-Jm@,C;<>AC0's^gSU.9#oE>#K/'+d#7@*62UnR5fk'G4=a
+d:F:Qm40t-*&2XQ&Uc;`7omml>urNqc-mnYL@`[I>h;%Ve&`s,Yq%Q:FB$oe0u%a.
+!u;Kj,B;%PQ#Nttq/Xt`*OQ%lOniCc0->2g>ZZ,Ilk<[L_b-'S92]\$Or8:<+!B0_
+_)Hm[f.Bc2ZQi@d:m+=G7_L:+]ll7\,*tGkEbTbmh,JDrG4eoe2-VD-?F:Sk[dnbl
+(Rh`JT3-*N=L,88nqfH;;/<IU>$(0>'sf?5gFH>S.rpJqG<H\hgKd_'0(]YCO+/eT
+">a'L0UEG.2]"R(nMO5=0(lt4o,IrLbVN5^<"i4TF"_o9j`0l32j6!cP:p:1=&niL
+L%@6D3)<bQ221d#0S<AZpOL+?:JR*X/TY8ZQrLF+B/u>#m*fl2(ah7`@>7mLL6j\R
+dl07mAQu&%37rQE1Rg8SK/tf":6VkD2;(%CP<*MM4'7s>;oLKC6S3LP4SYm;ph;mT
+_`cW+48$4-\ESq;94npULc0$22!I6s3K5ZWM'A"1<$dOi5s[=ZJohquf^EtT4]XBi
+6eM8(F8]>84$1qV0l4<cfLE*P<IpKP7bJeNZu(smeQK8%Jokcie8IenBh*8R8%AG?
+P\jXsM+6*c/QdU*Zrp._'hW`gn(A_+PbXO;nOpA>Gnd<>mZ1+#@Y^2[O11HJ[D,FX
+]9ota9"7>MFSgWUV*!3":\c.#2#T.O!E,:4HIXI)oastW@jG&'O.n^3[D.'oa&9;E
+Lc%+eFZG#<5?4*lI$IQp9Qa;O-[bO!I5P#ZQEr/_79#ZOIJ$09mAX*RMc[;XKQVoM
+=;cS:]mgcRSa/pOF&^8(Q%F5YV0MH4eW!F)VgpQD.b0A[V/<(i"^3pE>ag"mGSOPm
+eQk';,;nXj&j9Q$mt*Tq?I>HR)OlVLpSkP8?rcN@[L&qA&go$(E7;--Fs/Ls-*7qT
+oe:Z"nfo/OeRA+ppU2V1,#T_(Yk>HZCEn)X)Z7;;2m0TUAF/P+el<8:T(V+"f=1R\
+NKWK9?JOu:XtM^Gq^o#`:0/4\a,C_dZ(A4dASs'pR25;<R'1=q-M)R#3;Ya-4$U")
+6aQ)3(.7#'HYV49iFd.?$9!*Ij999B)7Qh>gUh:<mBn'[<5`k_gc/EpnS>UWpB&_p
+822n&G67rYnIuq1)q]-Wo04(9/Vrr[MXeT*D:`jGkB%MYNjhlI&`GpZZ]S.(FaN;/
+MZ8*H2nlkY*]GC1Z0)C>s+7C0J9c^]2rdIB%>c<8V9BTrq5nnO#FkIGIQ>RqQ_TtS
+3HA9i,+#R,OstaIqk3L=HkKl(RN6I7;]IhIFW)jNQe,9$JT?Q,E`u$UGNgOr25QZ*
+_:#`7qJ1S*!IJ!uI^fc73fV/s'2F/61EtR*\Rhe.21fl/KJd7l1<5#g(PB4bKDL@V
+S=P>C)2/o3OkZKc).eO>>E8;,KsbAR',-G=_hGM4,?#8CYLt]+7UbmkJXab@R2q-*
+]_1lUQA\@:Z]2bk&!$723L+*f*=n4;O#@`eSJ,G!VQVkE8%iuaJXXoF=WNL.a-Kif
+4S8l;SJ8FEd4oS8N`BQJ'=Emr>ru'$^/N@FZh$;(7mF@4JXc%kR2nQ"/XBNg6eO'A
+,*.pIBgQkcPIX8Kot.t\.EhN[6C<BnGth%rh*r9N/QlGsfk3aE%)Ws"fbnic@l$PR
+@`!4eQh@tmZr,$:qaMHaKPV`*3#T'pj-fk^9%:?*DYKU5O\=35L6TY3H+?[1]j%kq
+8pnCV1<m].UR^u@,..+!\_E]]_4EF6SpB"\]oX\mpP+G@:\>Tte[qul&'OeUSluSV
+HqdS/(#-,`<F*F?[70!n=#)mB0UuM5RP@i(2kmlF>HN`\gqUk:7>NgR;q6Su4hJau
+,?Zm`Q<Ij%g1f4Cj]NF7.Wpk0I#I99JZO"1=PA[h0jRosdE/ttRB6(<52W?M-!m%@
+:g1,1]!Yo!\Z,/!@%*]qlrR?l',0*ERC^idHIjCgH*(5(q_gP+*[P[;<NrnRUH7N#
+EDq@L9k)ub#?peO8du?$8He*WCQY3]d.%g9l`r5g'_)tHH\f3$I^\cXp.aB:\6X!u
+G;3Gu+WkuI5CF$2LDORl_Y]_HPnCPkOQ[X(c_#:PmB??_E_%[>BBsL2Pn=h:RJ=%0
+(ZU)DYBT"]JjmFQ];G,oQ</*;>P(uEr%RAUZ-0\&MV'j?k<Hti];H:t>IrDbb)n^f
+!WXqd$j6_X3&G5&Jdo`ZiOIB&D1i=PU?I7c*=t+sipbTJ7OC-R#U9rVga$qdO$k0Z
+3HU9S)MCb[;4.Qu)]bD>`aa:qITeQF9I4-S4UQZiKFJ-M8_kq38Xk\e2(C`b@lG=Q
+k>Gt^DP\p'N9SmOSW:Tp)d-cREOD[h34;\bj,8H?@rmjj0(qp)ZtqP1g@+c%R+gG#
+QAr%L>M\$K#TMAFfdL,A=uX3-B=KLOp+)0F@<4;0bao\k)p#BbfhQp7H.M>"",u*.
+&[pEBG'+g['0%tiju59V%RZ%.*9B+!XM!7j3SA%+<rpV'M^Ri`Zoq,/+EP?\pj1_6
++![K;eo`kJ8f':h%JSRi6S$d0?o%Qe3u%N)4SK$ilYrOZl4_,2_!g#P"GR9%!qj?[
+KA,sPJW&Id6LURVl+iDA2Z#=-Zh2>Uc/U;f6Z="X(r3tH&Ic0gW+-$!0RRL(7?9cc
+q$&O3=UIZMU(mLGDL@*T6a07Iq?Be*;("r=lFe@V&?'.R^llX*'u.hcRi"bKP[u+0
+ZP7='7l'^[V+>V(]cbRnS1uKgDkL_h5L[R>-btO3mjY,"U1k6pEm,1a:@d\_.DAG;
+mkE*^4RY((;af_)::"Cq6-]#&j%_"#.Zk@\eJ\Thc`g)tqG;;SXW]-Y)gqAaP[+Gs
+<O@YIVG*1gWDV+:%5V6fBTecZ<ttn!XiROG8fH#2V5!ej[8[$>>-n``Zs"/,Z!'Jf
+X`&)B_6%m?f%'FQ)Uc(UKk=GQjc'!>[S=;D^-T-j6!nQ)nKP0!-uEbBQmMcLh(0$8
+DrB4UKH"0`<"-]Q2dMF_?.`09I9p#UkSaZW^(l$qQfWJ6^4Eto6"P=B$^S_lF#>/J
+=]QK-iU^e+R_ZbQd.q>M<]-Q1MP`P0j:,F2P(so<e#,BhN/H=WTuLMICAO5/q);Kc
+ENJ>&i,OThYVV!5@f#MK)@%07EMRH^!-+.e\LX!j\Sn7>][[O3F0&Y0#5>8)Nnd5H
+ll6e[@u!-!%0J^ScIKgLJ^02omQAeh]$\/Jnu_07DaLh3H"-$eFK`mUXl`DO\#slp
+<u',;*+s&mX)@dCTQcr-M+4./+p<N!Tp4obb8W+![%a!:S`[2<]Z5=&8Adm^@tBrf
+l0P!WYNbQE+ClJ[^ErJ3m'LH##5CIc"??nS6pJqmYi80tV#S"LbG8i5!\)*r!>AQ<
+7E_qT%+!/,UZ,2MNW]bEaLmY1j,EttS,FqBd&Ooi5lO#b#pCQ+m??O5OU-Ub0[Q0u
+4gT\<TR3)Vcme_,#VuP>.<L4G.M]DOD[N1(-R+XGiBia>$sqn09CWke`!Acb$'[Fo
+&K&!o=GmaM!UG*[>`jYl:DL\K>_XLN.)^@L87MBe,nXt%P5#GoULXLea]]r&R)'HO
+BQ8:>,h0M;oTD`fEX\Tt.tRcVqa_[p+J^!D.gXKt:UrG;$Ad956^"OHS$u5=&knVq
+RVPrLaXhHqDTW06>GU:M/g]?&QaZg<9KQLEjpjnKK't/t@B+E;ocqJ2BPUbUT4a>^
+muuE]C1[Qj29+3IS!dH@!L^BYm<I^4;hHD@EPZKj5#aHCXY*i*T5TIklHT]Dpn`%l
+OmY3p8lNhk,t"/l'-\Bi:giLJSFgbJiR]>"plSA2qf2*8H8Ga>4W@i?5AeoD1/olg
+:spY>BV>sa$1`o!gU'C+6-#_L2aJ%%)f:DY%C[15L?MN!8[I+k,#j_f;IqDRWCE15
+=,rJX_HWjs4YP7+#aj%UCjO2\\@o8=6D#HGT$JPR-\RAKe1DD2l4q178s`!leOsoI
+4[RLa-D=XP4\kAfcV4!"6B4sGT$gICWanMOQ#.79MNu&W2-WNW@]aY8j\jGp6E==!
+<)p'>[]8$qiKgS=PO"*;X(e#l<jL#CFudF^28r#cX1)-T4`RT-#eANeCgF)A\:[gI
+]p<^c?YfpPWQ"poQkAaoN!@AW`sT]9*>f"3@>M-'.7#8T")X!.J%$;5_!"]@AQ.9H
+U/k=>ChfIEoN(1]V[G02SJVS)@UPp^5BA4t6Fi)]@l$%&%GFeh2/Ps42&<<'g8XLT
+m8DW=H(]tjOqjFA&hZ$h*qu,2"Ggnt[R8'9gh,SIThWqJcY:,Nls/RhoMr`;LC6,*
+'8^Wc@WWeCeD_l%m;MDqbW2Ocq-2%8T!#AF\uD"\9T-#:l8@/(Vdhs]Ha^mgh;)P<
+FpoDZ5'Qe?#.ur-nQnAZ,#9ZPf;HX#?Cdd801kM8=2spWX4_d'OPE"*^A/]0?@2.0
+H(:6%CM4=%U*hjUk(\E_nf3I7&'>I'G^<pFaV2tIFp1,J,)i4p,_5B3N^!5n'd=6.
+L_3Z6kD6U=Z^fO%RF24-BMf(3>X'JZNYY)$K,F5c@aLQm,fOU'8g2t8dkI@7'>la3
+2.RATOiA9T>q%Z'S;W,@1n!X]DGLV@*[_KX%?iPq"uVVZL+n4`5@'*E1^\stRm'D6
+!fh?^?H(Q9-9OD5BaX9uIKU8b5tF]+5b96YX]%8R)9VA[ec_1HKq;Q%R@Pa:oSb:u
+QHpHG8LTq!LREMi^<8\/@c]2V3B9XUAP$-;jF,331A&jtDAq2&!NMO!`MLc@d+$=2
+cR$'Mi:'Zcm3[53Pdgp3c+X,5-Pf68*!ZaEH-=;><u/]O--8n2Z`Hq_et,R%'V[-[
+4t$$p57SJK+;t<4Z1S$9LcU#BA1'U?AG2_[]/68-5`]TW1$Jt4LKT:76]lL4Eer/!
+1h_k9R0#RGba&tiY$d@X>q\@_3gY"+O%[#-6`0Qe:8J(%R-A[VHITL#4h=n>+!iOM
+WQqC8>*t,GF\A_TL,Z$urh6?/Qn7nf!uQ?QjWo&9B[]/BZ3-@j=YA/^%XW;uq\NJ%
+8u(`&]!hA3eq#bp[BCtrOK(5g]?s&t<43*p3+YS$AEkT"Q9*!e7A3.Nb0[GBrl_D/
+0Y#\Sk-M3h-R(+7HaiJ)['V9/0DXtLQlV*mkZ6?im_W@6%tD&>#2M94,/<O8ar&6N
+RPTX/,DI%ej-_EQ&JKs3Woh*$Y)8t<3t$lV,Dm*Hm$Xm@*.%%@RdZcA.mU)/0/8p!
+3MnH,W]R8B&OQ5q_MXf0WuNVdOqR\S9)Y3argPtL*20h[Tsq6\\ZeZ;Y[b8B#o#Ch
+$a>i!T*#Qbq[>1=%30_bOK4qh1!2C/!Z\baYp%CI3Ro,^dP8?LJV1,1JC-*@)mQH,
+$JF,fOkUmRgp9#m\pQ:h!umg56O4fd1,>[:9-kXs-:@+hZFf\FliI]Sl5jaQ6oskU
+lRbLcruW4,ZF^JO;=gCdoJ7o@6],M;fVaqNY*6_#W;+]NR/""X;E1tQN_@EP'/q"R
+5I6H?&YT(/C,a,#31ucH+\=VfRqa0'o-5_U*jDT^W2diU2b#T[20p[idoIQ<B!pE,
+O4.=6"CoG%9eON)2OPhL'5Fo'YTjFL&kOIYo5>&l>K79lN"DY@Ui&ZL'9M9hMLl/5
+Lnfia%M"tCTj2O]YsV$nYR6nF8-#]IK4tpr[_>+;a78oEX$JYtX1%R_OOJ1p)FDDh
+7#G2n^3JeSLohtTau?AL-Hl">imK,N=iCL?%;OWW97s+c6U^PK-/r1F@V7s%;a@Wp
+34'/TCQ+6NA1pL+3"-QLF--rK)'_Nf7._EFS!9el\0d-"VXp/b;jg&W8Ilc00\GhA
+>'.=?GI_L^O4nqA.0-<Fr/]U/48_d6PG]fS3fj]$\tXliR16aF]#<h_1KbU,qlkX/
+N(`s]4#2hpF0qnS[OEH1WB7X>;nArB&NdfZWJeJ>UVDu/QTPnO4=Zr86D-GETtGE@
+4GorIU;adU$A_<O][EdllDm&LXM#OT4Yj4S8[tfE6E;ooX%U%)A)k@U+gMZV4j(=K
+ik$bX>88+9/*#Wiq4emC;8-5N^2h.RWG%T>#V:>n3t$C!KC(4rm]=n,(3B!t!M`40
+!_G+[5>ouqCV$W^'L.G1.&hid)VVsCgcsNL5OjXJqV].-iY_cZ(^pPM;nBrt$G_8W
+RB-^tX1uHg"i/NWR8a\8)4JASo"cj\RVMN39(tT&poh$.att$Kr1t%%VD#k-)O)6\
+P6&MiW^6`d64plI,6u#8^`1KD0WZV"_8Mhu.%H2+_Qsh@dCc_6Kej]/6N".,PVGNK
+e\e/X*J5(o;]J0"*D9f8S^GtDC"f%QXi%ap6dUIk3TeUT5I0WA1>G2.iT_JSR0`o\
+St&8KCe"hZ/fsmC`2,Gu1$he1B2ZrL7+sIjapc5j#n:]J`EHNG>ZJa8@DuX".QGbe
+gf#\s=$8OcZZRu]$TSP[(:DV)+Ii&DngMU)?Sgb`ZF*[h$4n_u0o-sFOZcf:HVH(K
+KFFOi[A.CWI8c#+iRK/NeTlXEP>)kcJg!1I<^IP6(ou4t:Xskt`X9KoE[f)Q9ib)o
+e]BJ$46O3X7gfK=`sA:MF%)c+E0C"$<nOk+jBu$PrmtU>$oN,_dqp>QDPQ9@U\[6s
+X)b!rieomf(HPDb)H9L*KX_HcUI:A,>FQJ2Q-">V2uEh=S>o/n:J&WsY1VmYjI8a3
+A%6lGarF5T*2U3R'+8Xk8h?kLX-P*tFNUC'NuY42W9u$*@D\]-b5-5'$?WinZ9,0:
+&O`uRUpVTPInOj]&6l-49<1^kLJ,M'bLn%/ie^>#^cNa"]0*s0"1>*I[ja,CWCiLN
+F1]5?]hF+%47\k7_(I0Yc+H*0]MbFcC8/@mUcb&,bqo]#9?U%5VTio&PZ,sDK@6!Y
+VTl0lX"2dP5uGneg<KK(:)R-6XPgeg[CurQ4sI`W$Gar=_EM_PQ?;E+SErGHmCp\W
+cM;5$$I2Ecc^&\E/K=>a48(7'J%pXB5FhL5XSWiEr>5A1/aWHh"9C+mJC"]-/kMMY
+1<#Z%k!5*p)6F,r`<a7^T2;9Od'8j4_3HZB%Db?0;":MNFV-p!&u`d7'5]g.4<0hb
+(;]7762@KH$O+qO^!X*u_F_T`boSR`+.LLtS=.(=+iH_#`)8r:;HoM/1DNf6I)@r'
+;OfdGWS0^E2mMHs0i]m<PZG,;,"(+P6h;hH"ZFh/6doR<aagQ_60,sa44ButhdDjN
+_;rbW6dsd8e*KZE_i%J2S(&nne3$STbYlCP7\t1BNbh^)8n:ngjOC8,<4Z^AaQBN*
+G9tGca9s.5A3?YRprLSOQ,oVUXM;hG1:LM8<Cj&WoS(n<;MtQ,2+)XGd_JoMG.o"R
+TUn"#%)9/i^gf3/j,1WR<]Z*1GN5WRA3psCD0Va\7b=(@A'R@K&M-q<YDh=2=.0Ap
+4`9?B?**[@AHkcfK3RFEZ\oSo#u,;u1M>#rKigAijZ?XIZYg(KLtC*pfAgm\o5fhk
+PK@'oV1b-\FbdJ4Lo$Z!aeanAKoCu7SYdGEM`)F)e=]qWB\=S38jJm!5f6r0DHUB"
+=`SIRR-RAKlWL6,3Q7L9AY#_6Su3<qVtH_+40YXKU.\^fO5.4UN4E,-U,oud&Da<N
+KrU7-X1K@f&JC*PK="hML!2ui."oRo*6;>6QWlSoP*NGSA&-i@aBO>=9^TBiAC+Pf
+aA!\fPV'S4jOFqJ^_=B4>T:j\NPd7=`%);99uY*e/DZS.a=DVm'l;l7Wj^29bcBRC
+:1__b:!](Ul!4tn>pSa%Xj`T`B28'd?"<?ZF7N*QfW>`u?)-sdA_XtFJDJ`Nh<Xso
+qU\Ncf3TBI5Qq*n3nI\4!T%&bhJ23kI0JJl"l?$`R8aXP_4&19nPHk2?M"mL[16OU
+W_iZbRb=]J6)lKU)4JhE0=2bIFnnmgqGEOT0]a4BmJTo,r^(&,dHi8h$,+b&!ZT;p
+dPNR1jomJ?#"'F:*EEGL-4+=pb+4_8i3YEt]JqY3+5l3A[l&Za,X,.D1Z9W:SphC&
+NYUNL3&46C@A[cp:<X"#)T7Uu3@%6rp)^#Y+.olig7:Q>+Lkl7ZXQ76@T698B),nU
+oO<W_@[]c^egmQ!/BXaE`APiJ;GB\S=%M!=`H"@8L.i\75Dp1UPQ"#?I!jMr27Jl0
+Q@2el<_(24[5?7!AG6YU-;5POb1E#s7op(#%gU.?F,R8[E;6rnZu1f(>B)(#E@+fr
+H/nG;cQ5:iEInp`5d:eX)%8@rO_f;&"]=et^(G9!8MH$A.M-WOClDK\nm<Z%]4]c-
+<JX+R$j1QGZ9(U*HoCnZjkPc5A;hgjcfQqD\40r[P$BtqAiP.,=PTEYNK:T0CF3(u
+%BaPN4-O:ROQR":b)MauIWHl2RO:e2B3_UMi:>R]TNUolkEu52XL+o!I+h&<g/<Q,
+@X:\EJEU:;W-3d9lAOjuND(CJg>[o^4g4'S`ENt@9PGj.0dc,4RHW\Dkjk7uGq`H[
+Q;$t_9SCdI\O+Oe]ddm54O0;+[D9G^fA%RPl*@/1VOY<*ekOE/X)5nB5+nrnah?Q*
+^-8=;:!G2+V5nFq.hMM-*iIg#BMP79h(G_/L9&'9XM6%MC>ihj%G3lkfkV17cX#9W
+FSB(_J*TsbCLZ&T!J0)ArTf^IhD'T.!Irs(k"mLl??HD-MWR`LS*UdMCaBDS2%%-*
+`5#XeY3#.+[1;PWnh6<NYI;TW[`d&rs5//(?],!PqZLaB`'PLBD(3D1gBq<UeR/-j
+;?k`\)8oo3^Yh,ei(Pe@],#84)su`9D>;n(%c;.E/8d?T6`/qM&bfl017h8)1>WY^
+XqT9ul7u-#$`4]FWTW^.j)4V,1@?+1^)W_&*O=KcUI@G+2Y8)_ojSh0e5djEA?'R>
+,LhJFMh_/)>FT*(9/hd]E$#(j2Zb3kisou0\#XesV09g7O<[2Fi:6MfF\_&o%L]`j
+8#B>t0b.cG(ft33AD9@=#egpp9Ccq1jB"$qR3[i"<_'#h$b,#)Qg(J">F8PJj.1pR
+f.L)Z(B.i_rdX'#hsn2mj8LZ'Xq8S5b2E`^#Gn?mTUO\q!X8V%/g4P2I`M=dYf$Kk
+)[HFofF8^XLB?G5J8R>t5p4O1:u3>tK#7f_-qmHR2@p9d_cW9_bRHOa7RJo+6pNLH
+N2:"rJ:Q]l#*m+2i+U%p0qB#7nE@5MD[A><#3,uB>[9^ON9KdM>nW)PUsPko3e]>I
+:67eV<61mk^J^t!.lDZ*S3^?uNbYs?D77u!*"6]X#US'bH)arGeBu(Wp+mZt0(t5V
+$ue,Bi$4OL?02ZH\4$W:)hi*L8BP6CH+Y!Vm@CUtZo?`=:ih60AuiM1+Ql=Ycf6p0
+XF:++PLsO>'s3J-Do',H"rY[@)IolRnV1/u+$5?6e7:U':7f5&bnt9\]PY,'@CaVV
+/D\#ohl"?]%X>;iLGiT0dIKa_Y$fUdcf+l"ccBS55HkOPm4[m`@dcKV$daqtmlV*U
+4\u6+#.Nl]o_(SSF7L2/%n&P>L/4m9r&7AaAH"SD9LS0_+ehaE5Z(]`%`$;i;$BE#
+A6p-9NW`br7hQ5!$HKB_,8`dFlo>`6JXeq@apoh4&kZ"Wb9t8)5\C&<_44dSbS$^a
+/k3/EDS/R2dL,cknbb)=:!.RW,>;!&^<b)FCpN(qc81@V:\)GT(f0_pq_68mI027D
+iM=d`bppCM*<qYeLJ,uL'c.1u_5-HecOOW&-.=[2J/ZQb^o$8E:+0m.89Ko#/]H\N
+&QI.WTPE%L_6"_\dPX`GL5(8\F;iUA<L$ZbQ/t.[L:%J9;:tP!R8cNS[9#4iN[SaI
+>LXt.>=`21F)BNP0Pt/i+glr@=E`MXkbIkUQV&KH"eTsA1'/NrT[s@PI9TTAO#JNV
+aDZ&rQtqSFiE&bdFh/a0h&lprNZWQ*(TX"08\r+3@q:sdqhsA$_A@o0bAJ&I]A^`@
+8nO)5lSgImaDl8q=mg9f3NN^1N`aM#H&tu;dheQM&kI#,k]pL.C2!=FEJ!EMPFBb@
+bldOaC\K*;*9YhKbi6$Vr\Frf3]!P?m93G"[:Hn0T'qFqPtS,q>.3I,#<LGrY#SW)
+)oJk%<ZT,5)^:2?D#AH*aL[Fl<OT1j<o=2RS6NVL41tjecTHU[V,jLMkWkacd[QUA
+=RV;^"U78qV;(I\2?MN$eJ_TGU?gHB*+U*DD7-l^P?6a_IA[:coI_,W"\QFB./U5^
+oA_=h-mUtD`%GT4OF4,ORIP'V#)2b)F-ijeI$=<(5^n+G;3*59VPKH#@*M\7eR&%d
+liM5sD.Ps[^Ao5S"BoCHE1[kK'L6H7-UGg0OQ-I;$R4s^&9+M_iY"osR2T*pTl?8&
+:jr[Y"!hCkNZmCA<lir*L/<QmU#THKNC5$;,SgiA#YPAXl_B0Q!0rnLBQ"q@3[7KV
+RR?jb6=JAAL+c:A'":XKaK.r\;(`e(U;CpOM/nPoI?p1NT,CAa:PgGC/k3/->9bD*
+.V0qBa)`[JQZQsiOed_p1.k-e3@cDO]U4m<C/*WeX='hAVa,9]q3_iV/?a3T^.)N'
+$^9Xa02\:7EsVYH,bBJp,#L2M5m#9Bh(n,H`#>D;.%:n"1s_<G)qUQ3+#A&+%[>\9
+(`I=P$\UKpjQ!,tNca'Ef5dd/Tc@blELKh$R1>JN*B*[$*SJH"ds1W1'BLdnanJNU
+B`LiUjYP63SXl\pF/,YCJDU+uDip:Y^shq`JW/KYW/>R>$-82?)K%rVMKL-MfLb9`
+drn\.r?Ia>Nfiu=StrZE:"P:hQF#g?Y;%M'(LWTd_9GTO;M:mrWAINkq'??mLo.QA
+RjPrT8r`B:-2I1A&u=D@l3;dRANracK90&s,oA$JU8&7AOAGMffq6fTTOu'0WNG^i
+-lMZU'F`kuWks;%21JI<U%qb$8QS[.$@c(@Yarr<=>Zk9X<tg/XNg:j.gbkNlSRK'
+X`7"\'u#-)MZTj"?A,J8_),5.i18'-E&=E[@4&kgY`8,k:"O];(`e:!i7bt#PPW/L
+*CO?F15*_l))PI5&Y7-_LpX-2`hpX$@?'hOZ8qPDfSn^OWB)H"eo&e`,b[j^opnjq
+!m[[2KkFB(j"mR#2@NeLDiI2U:T7[H-Mpq_<!BKOl"Y6M^#G_;V6J2^GBg$,Ebm>T
+*<V_7I%+&^Df)M&".'0MhMKHqmYZR\-Q)'I1QliY4j:Jd,j-0_&QMMW#J*DnpXN3A
+-RA-h3oWqc9T-<%PtfoCLM:(#NLN6erSeNhQYoSLaEEU^k;4QS,bAPd`ihu*9kd$V
+SttSjErcM08&Fp@*27WFM<e%!HUo5&@!f8h;*P/0:1U^'2mj#C^P*e<hrEOn0G8@j
+$onA2D/Ffe!kV&NVZ;u""f/]?#X6u]q')62Jp:OfaI"b"9f-6$-CQ<E#/(?X`e9%C
+B&6#jH$?$Z+1opl&^&a&D_rFW+duFjBECS&*\9+.;'_/;'2a[_p5Y-/)b'%4SYFGP
+EA1R<g+eE$W+;D?DP`$<ce*tR#jZDap:!pj)(2U\+[ai.W3[->"B]h<0L]2$,4,8`
+Y)*Q?G^CrCm+mt)OOSP)b*k18c&oAVW?cWW'UBBm7j:Nu2CAXn4M'2hDre9t2n'X^
+8i^0&N$P<q-5']l=ZnJ,gpG9aL.bi/[V+k[T7+2PKZhuLI%K`tQP0l-9O95W-;"0(
+F!?;(j/4_/`5nCGkjclrlSg.ih$+OBQd-JpR*V$ca4$?-T<mE:O<O[=80mrSN.R7g
+/E`Lq`dMr]h`n1H6UcCM(fX*;LM0:26aK2uU"S5fOV:?1k_a1$j@%l3@R[&JMJqRo
+^IYqf<DI]X/uL__PE5-.9/ODpdhi*Zd\Sgm\OeDJdg2JpZ?krI""PFOYb>eTqG9$n
+FsQ_[2!T3]WXUHi.Jg).EpZboWe!C:AP/T]"9GWq6!1#Lb-1#$\5j851Fr=Z9NFSq
+=R.<FcWinC-LPZOMd!mlWrTUBFb<9:']d-#$"@OX,5F#hG^N\(8,au!cF.b>fq417
+Vq%@5p3tB8)b?8sCC7<49$tr/ASC4q)du^d@p1^2aV\"M`CD9k0roK@mIc">,EfQP
+J@MWi\I4)$8YVHMJ=XeY\E9$q#'d_9l=qYfS#mt:#-b_?!7IXhi<4\i6sdO%Z>@Op
+SV_CiM5JnBqRt(j^'<q>l0<2!^721qC[:\0k7$CG?u\j;EU3sQ$.Nuc5\NYCF9ajJ
+n9DeYF?HC!FKh-T$IEp)@`(f-`N#YVcSEJCG'D/$7-B#BO1`H8mQ5'5G`/;AE$#Il
+9Z6?A3"0PJ#M+eC(C<h,a+J^#nE@q!(?s*[aJg`3m"ib4N(^)"mYn%#NrVKl^jked
+&MFnNO"/<>rq!4oJ+$&iWl1(Cf+RKGJL@D@0f#,2plnR9iGXtqCujK7Y7W9:'PW=2
+%J$l"liF%6$6j$,CKca85*!`/Nt$P<B`-6@`Z[nDg;lah!nc*T+P-l_q9;>EW;.9I
+IPm*gdpgaKiaOKkbo5U%)c&q_;3EdGE$MWVg2WArVhZ42ZA->)/0ie8D8M%G!nZJf
+6u@,g&\Qaj^*W0)*R90j_s.FS!&,#cmh,gLZ3q\I?AN9$02_j&NU7n,!'76p\S1^]
+;1^GFFW`FTgrTgJ:"#.*ADO4&(8kE%@hdh<']:EBi/HCmE>&GKaTLUCiIanbXnXeL
+.cP/milPlo&mZ&AqFT%S4Us\)DF0nL0&t'O%O>BkA2**t4QU:cjj%8<"5lF^Tamk:
+YiGGIl.I+G#,WXYSh>Vbl0@K.#3bK<T8o;3$4Q2,$DZns74J_>DQoh[[\bbX7;=7;
+.PC(F1nR9qm0X9+"JAM-g8Km(V92^(C06pF$;AC:Bi5)1cMXR#k3tudn>^m+$A.OH
+"KG*):s,U).[KX^grjH$o*$]:AN!?Q5-&TiX3XD>02Sa.%]nsJX\W>nAUsGLBWb-M
+ohT\H`K'\mp@o!mphL#t&P,@\9O7+SZ#>Nr$Qf.[,l5\6q^XAtO,@,a5kqP"@8<Kn
+X%*$Q;Z06jrMs9($Y96PCAuCqS#HBN$[?*@qI^-;!%X*1AoOFjJ7jrT\Zcj\&0/8n
+S@[&q]-_Y&#'C#@_!2PE9i+1ZbKg<leHH?7VD<2r9B*[)@(t!"^G'L.:iMq$G!t[$
+3+j*6ljj@q'aUlZF:aU$:mf+=SiC@^_[.B,mV'MYQO=AZ$W+kON*=0<E5`&l$qsFr
+,,EjF`siG]%9/T%Pb<<bQRGEW.C*Y:j(U#`'+X$CSoF'-9Z%CCo.Q4$&1>tUkM#@K
+o+;UKb)Q!)P%bNGBbCml2/,JlFSQQN_\3LN'2B>:0f$uZ(AH3/c*O)jPGI(hSJ8>,
+Qk<G`e<2W8?J)?rr,H+mZ#Gq'i]!oMfW6Y?P^=1j\KKo8/VD_!/[jEt541"a/a^RW
+m@_i]W\6b&4[S?r[<Wm.D(6ai<Rk_aOq-2Coi:PQBSU.<!r.Mh!&DegnC<,JQ%pIF
+Zog4P=9uH?V#W--7p87M7VKpk,;!0,`%_<k,K&2<@TQa@]j65]/sXR.j"*;:@9hg_
+4>a>u^d2>Xd2[;b=$eoS6YM`UMdKs"6F&"7_[nU+&0mJBdqK"4&jDEEf-Ep'-Oo*+
+eej\_.cua.iiX4mUHM60Bg^!b-Z1DbE+kQcJE(.:TJDI!/Y&5,P2qdnjQ!,,#>U["
+W'+j[.d@(!A,tc?]&tiakE<jJl/_&+d%9gZSFYC(m[Be*dR+Z.7<7VWZL4E^A>0RF
+U2Ic@cGlV3bbOGam5#7>KW-\DiA&JU:3.VMeh3fJ.].m]n*4mKD[<8:p8A,o1bTe)
+O!(Dt-;ge7:bu:TK`:S#Yr5BEX05'q%okP!<B!]X2m64?mq/^U<B,lh36tSb03(#N
+KNni%<N?1+$AhXab4r0/Z'2?e9-X5/nG'?$qdmS?ZblVE,5bB`[+!H4Ag9Hs>lEtt
+@8l1bVGL]"lMkXGAi'-n:8$I]d,+s\!3cJ(l^2@dSnA`KB+Q:RCP;hj[6a,4670H6
+C5G9sh*VCs6UoTnL?<:D5m?T?##"IjVUWAF:r!<$UpOD4OFZCgGmJ:\7;.BEOH=Q`
+DcgMY$.*q6dPSicI`#fT$IHgaFJ27,:It!0;Za-oE4\]KPtC=(%**cgE8+pu9k>N,
+%Fhcq%!$[D_^:Vg9G$cC'[^H5f+BXLaAE*-8M(LV(JZ0r:1HF^Yo_+GnpbJ`&kDfA
+m+"p57o6H(;"Y,l,6q(g%8j4aFsC^!;--YN]2I0((!PDJ/f.HgMc9$=<*8()fMXNX
+=&l4RI<Vt`/FS3"oIlL2=1+^Ij4.=M"^?"'<jE08nhV,*R9b^c?EokDe^57el]Eau
+O`F4VK+K_0mp!kBm%W^!0$@T-Cne>hP:1l7,!D,iaW,RZ@%p_e[J?(j&2I7>QW=u+
+=ZVi3AX1q?O`D9^Q%1KCR%&\rd\HrqK0G6UXHl17RR8B*:!8tCW70FmKB4pI6gDZ/
+^*3rT1no,_R@#@iWeKJ,`WJ)g"%sh`QqTO!,8+d^k`92td:4E`O\OWJmGQhg@j_a3
+1bs>fnp]UjCu^grl5"@!eo[<\GaV<(BC_q][YEhnMWSF4SG&3umWP,oSLgQ;C*Xka
+an'8MQYQ*JU[mF0<kU-(>APq"Ch.C!UcU7'd%g18m,U6FW^AL!i9ff+mT/Q>[d9k)
+..<?QDj)sE[f5^$4)df]1^*u#cQ5pW&unl/EKaL#o3HAM@.VOKEf->E[k@=7@5fKI
+oiF2VQTmGg6EQSD3AE]t.e.WLIT@,MF`30upL(5ed<9T37q8"5DiZsrE*uVRG@gSo
+WsO"4#s<Ec4Jj?JVB\6*OC;)BH"IpX"sZ<5TX8p=A_3lfDuDneYs7Ar5W?Ee<""(C
+P.F`<5t6+1pX;FJE<@`+IE'fd$P*AZ<C8+dI`B,iYZbj"6[t1t7$mmh3!+19;eEpu
+7?DV2oNt%s'7mY/_0@!4/0.BXnA6l)$+>D9\1^hnVaqXc`:uO6\3ihi7nOUj+h1;V
+-\Q\cU;Zh69+5Bd@SL4Va%L:@]HY`rijX\14boO>LWkI.#LIkNLre5.&<u,bkPL,.
+onkXt:N7>2XM%FY"cH't':?LaO[G(PeD[p`;>ARcR+?o"g+[d/&NJe$39S:q.?<Tg
+O%m0GK+uT)[p]S6hjMdKE#@Ij&j(@><<t=J_s`\tI"Z5'1;e?#q1-i"s,l^MOsmgs
+#g65#@ZIj)RBOsk*3DoIW[#1*ao&+VUJ6AdgkNbFS4KU#8S!eqPKWmKRXDpn4Q&hZ
+jGKJlTM993Bl`GR#iWW]CFF\X*:M/92DbLmLSI*l9la""0324:DR'AnLc<_UYFT>r
+:4lhQ=aQ@j5VXL'S8lD(+upjXRFIX_ebrGn,;_MG<]2iTR?erH\a$o"A"O4V@h$t\
+P"+:)dZP(qQP+qEBpGBtOQ:^34$"a%c;^9:/t!?Rk#/O\KEn9j#AKVnScf:5'$mB%
+eYNBRC;^?m'&Z/]?D/9HlM>*aar[>Kp?U0*CudZ32Uk0=feD-1m^!Y,EuV'X>quQ)
+WAa@IAA9o-?#R[IE!fl,f*86V$;c&R1to;s.[X0+<:]n#EU'B@1LmMDV)FYkXOD*i
+=#I+DGkLenXkMd9dtY#hMHSP)Y?+T)G>tf1STXCZYVW5^QYNeWDQo>4G?YDPpNU(E
+^0k#nZ=Xu!HS#*L0mN"cZZhY@F5M8T6$_d7H6sk_F7X^TH*nu=[;1?$VLs7#GsL!%
+[W!CuX+@_O)Rrl#!#OAn=5Ib*eUD;_\;%nMled1G>m41rJ#:+O\,cg2UO[</J@i"8
+oO3;MAI"<ULfA/A/1%nZ.-6p*K%^<ZB4JW>Q+bga^&meJ7u=s3#JSR>Nu1U3]Cea"
+pqsUO^:XE"VgZ?iahXX?^u>[:,145VNPV]U_<clm1tp$@.`qT@amg1bCq5F^\Vf00
+'AQ'-fYPMMe\qe;N1<ra#U**E(\T8=P>sVRDq@s5l,R%Aa+sYXF[qM*K&OCQaS^rB
++Dr;(EH']J+?"jA@tCkq$9*N%"9uq8-p\>o_-lbp`%ihRK#FE]fXr+63>b71d0TrE
+71bE<7P]el6lJu.PX2&F!601)3>pnQ3S;Da,T2V3EP[VIBh+u8Blb-hQDGe)dH?X,
+]YZ-XRMhp/!PIu025OF>URO,u:KsaDlE[u97QGL_d:-,`37pMbSP.p\>P4lrI2Iu^
+[MqB<dqltMlr2*OQMH0K7ketnh*>sac-F?39R,^41!o.T\9q$:8YD#6F8BY.,,%N6
+m3ckD)!>t4c"Jq64_F1n[[6DA]?$)\@>q!V3Lo&o-___'o_*Xf=?!;,KCiZDr`I(C
+?0HP\>u)bNcT:Ccc61Mrb\8*3NTd,\N9K>6#)_@>gmk:Ai1qU0O'5H5\VkhLo;GK,
+^)/G9C8U,:WLP6N_9X%q#f-c\0Tj"V]IK()NPmg[2j!fJrOjXY\Ga@kpgU8B;0&uO
+`_S.)V8eX]K+g7RMsD.50Vj+/-..r8RE1K^G8EY&*+]c(m/2778F]BG)+B^MAB%+Q
+'S%)d;1pM!9ZeX/kUDX0k;PD>SCo&ZOu1'%bL8S?"boos7da(dA>q=Vo*hrh##a6o
+0$mNZ^lc7fSB!fkZS6#2ddbj7mKR[u/u$=YS/Y,<&sMQ?e+:gH)?t9=+]qZ"$tEA]
+2/m1q;Y3D!793B)F%=g+Zs)Tl@AB5H7Fjk4A^iPicXkVWNDWb[2JlYF=Z)1T)Gea?
+Bj/C*'pi4[2=7gj=8)<>F]`i6-#JCD[39ii_6#YC;n&<k>6_JTU`.sRrN1@joAFD$
+6"-n-$XpN``omW7`TM="pJ)TL@J=p_G[bl]()pSf[RW+Xf@ETDA68CS)dkOBD1Z?O
+2FW9s!O`dXL=gR@Sn.V[Q5a;D(,)"a3Sl]eA%CG[M'ggi6PG4M,V?#ib8l\O7Ba_=
+Qs4"5B'=%l`c#&cq:!'0CKC_jTY#chM5f^n*g*jE:0;G3D-D,AWB9(YWp"CX0QE>o
+gc#V,n9Y!J*,JAW+2[C"7ag]\[R3-nmIsrK^i#[&mE=r=*t,g=Hi(=:=UAVBR!"g%
+:A<NR>H]h3*G0*?EfPZkb6El+=gn!.i,d4e>mHMHoUZ9]eTBcr;gNCRQ_ts4S2tBN
+HLF@;#2Ykb8U>CupgMu$pSW<%L)dVcT)F*Yl*pXukE;;^M:-MK5#fHa)(kM^s5"SJ
+#-T?T3[Fdj+A+m'7;46efF[0dnr/*:iX).Lr:FA)d7=UEpQ1%U#>qe-;bk8iK,3=@
+SiWNjKHW+Eog&iAN#`*soh[]79)0XS*EQ(">s[#$pQ)"/L'qH6/=:tY:SXXb&@Nq%
+ecuKu*)M>?;CFRp@.Sr=."mPR%^RRpq8bojMm09%7>T7p>,3EYnA2?KaMb6TOV!N"
+.#19jC^o@@L4kR6(c_<f*)/O^1ba$*8(^iP,/f@kY-&p/e94k9+^Ba5=Xo[#)[qX(
+NG[b/S3MNhIgQ3H1pEXJ)FB]<N7=gnKWRM)[;d`.0p=$K&/q%UN`)^a\!KSZfLj%O
+.:m4t-ZZ-iQ34.SMCK5nP:6-mJ7)VR.ED_!qHB)nWc$t8b*_B8SP8:91^h/+4JnQb
+*6HAJO&8>&de[M!'=U"3"LstU-lc!+bYk#6&"ce2o+SO`3m@fAR1oNCcU8X7Vns-4
+F=a6j$2daNJa+k0"Q:J\,si06&"a,DY9DBCKn4o^4S26t!7TqTe&h>K.*V[_oE#,+
+"8Y:G1#neEP>2cF0QcsW1EuS+MkVCnKQRG;;th&i*sslR8Htg'oN^n5F.AK:*h7j!
+7#RXFVPijP_ktLYRHb]n9bdghV](_kl<8gfM4QFKHCJ.QAPdo6Z-Facj%`usCjCmm
+2EH(tVJ?S<<A.nEWMMCS<IJX_osI\sRc8`0btqGUOj6D'1JVBTUj7V>9Y,A(PbJLb
+=Z)1]=C\kIQ8OP'9,b7=op8om6H6#5I:]t.b-@qe1oiH:dOqqnl0$bP?AftRge1JQ
+iA'+q(E1:^)M8al-#m?dii"R>M!#ti`2>:(Hp#NN^)]>J7BDJZ12G'R@eJif9YHY@
+emungM`G>@6(d"837->A3<n#G1Z!>Ge8IFJ\!;\+V'`NF>2BOe/O94kMV?`%j`,,H
+@]2dj&Eb!j=Jmn0Xus_ref?l!E4(D:,1u]fA+EM&(+U01>2&&B7<+F!U8U)R;!/+]
+.&S3IXNmnIJ7lK^^lgb,8HiAbl3rnL:<t0;aXiGp`_ETgq:jF+2X?qd2[;2&0"eYr
+J7-r$H:Khm]js>#1Ha'3Q)3t5a2n&4j\:.VEY#nI\GYS1oi5PTSOs.\I-iYlJ5?I)
+5NiITDY*kBn4kgTkT#JQKFEH/59(oXCAB^1%*WZS%RUR^&>9LdW3Ta)l:=iRA;XiL
+OM=f5.dIKdY-!HdQ6/U6HP!:6OgJf%+iF_VI2oUeKU20W7-fmZDM4@f>:M,>\[)jN
+$o!U%$MDLX_6p%sAD5G"1e"@p&?n3e=&A2h8J]pfSf52#d5!jSaS0ET:!4\6lPW83
+#:8oCpk:]rHq:cTOgXmR8Wl\9mnBIBUr8O^>HQpW3*.RTIfY;XI48c@]dJm]TI9>m
+S^6pS3G80Jj@>I)Y?F@sq+S,aW%rl=6kESN.?`gLkf.X8+3D%_qr^o!rKJNRKur0p
+6<#`PSj&*u%j*R6I4g%kIUgRDq?Sa/*fV"CXEjZ_&u;@rV,<8.fD64aU\qSaooq:2
+T].4G=4=Sm%C19,/1<+6FIi*MJda`3oKl,I'H^8nE\%`P.7u;e*)@#7]AIbthBIr(
+.F1g#[t$q<42t5EXl\g;9;MPs.jIu`jUoT_m(SGk+`1$-Odq^mFJd/MGT0:OiVl(J
+$U;cF5lT0U86H5s,M*Wf;uQ)]Kc]rWeW5&X9fKc$-E<hK9j(W+)CMVpP-_#)'V#gG
+D,.(M\A.n&Z8IMJY4UQTr[P86I^T:.FdiF]<KU])c,m3tP/SmS1LmJ3Wi/+p<32gn
+,2;ml]3MH_?'Y$VYR%#=MZPd#4r."*/kXYG'%SUB=-dU1U,(Vsq>_uQ6`h!V.D"@O
+C>POki"e*,0I#MZMs68tI',6dQMSQ;!IQD5AsI@i/hu7NC?$e+MCpZRZqBP^b@n"&
+Bp]P'YTiZg$M4spC98^rR>U^>A%7Z<poc1CSb\j13iP$u-n2b,Y<)\)@n4CUdt+h,
+2[[tl)6b_d"dO)1YYrIcHNbpFZl7?L[nJZZOgqa^\1,$\PN*0-6P(pZGHb!I*!sj*
+C!3YP'pWhUSBAhs!u3>5I$)<p`.K#/P!cKPS$DM-Z2*N-@h]qEH_%aP\02$];^9,:
+-Sgl6.r-T>9.HM.i3HOc3-usWj"Dn*Xtl1q*eQ5ACGZXX2'2;TZUsSJX#J$s32c[c
+1SOLuZSeA4OgA3NQ_F9f)r%_-q%@1(TUZOWncQ6s">jiu_^ogr#sgD9s"pcJ1q[ig
+9QnCFE&?lP34!W_$;7cF8@9sT4\KfZ.NpZJE^#@R[<.&/K6=qFKXIg#/:&-u.pkP'
+K"u@l2>SN*$JDiH,rRLq6!Iqh@9=]&)n7F@[ZbAK`$;`:-aiRp\1B,><%GDo'X,u#
+2Yo9TF>aSTEhe4D,F`hr@2QI_4?%jZ2j?hB/4qkL5rK-Fb%#mr97S:&-Ugp3\!&-t
+,^N'6HV*j6Uq81RN*T'iLn_]9UoTBW,E+2sk,I(R&5.q^ChPf>&%L$bM<g2$YRh)8
+["p,f.0RF5)%3DNP)j+K3F[TPR]\a;<4sfq,tkL4]YTY*^,2n&9FJk;_jD$&>re_,
+$A=O'H=G*g`_A3t]..>'R*uSHcmQ0I4HS#SdV:go'ILcQ4P>+nS'4T@'?u\,Os$ca
+13'u]cmFt4NAT]jA>ZpFUWt.Bc5RS"<6pSTV5;\r&c!\IaIZ.)Gg=gpOfEHHfch%?
+W6VdA84<$+*:0S6dCF&NcT7pc/C5"pn;5O:&>LD^7)08MonltP9j!"(@2b6#Q4ehu
+:9msJ<5]B5rf;X0.9kG`1YJa[gHE@SWN:^fgZ0h?jXT$IWq5F)%##JOlB<J1PA7ET
+@6#hn\"EQf*Voh%&ucQInNSeB5>&Z)@_b3S_8Kb`^SD^3"8Js-><hHPXGPi"KD<4h
+bJ5=H.`gF1liesD#-/.</JJLWM)1H6$S?`7Xcs;IWi6dHB#,,9_'s!#$/cS8'e9Z&
+_8>9Xg>YDekJ=I5_91uXg?ZTGm6V0J_BSJ'$<sYi,qBBNR>UZ'M3kD..PHC_REG-<
+decArr5/U86Q6"C4>XlJ"&]4(_d"%rN&AMB#fEtU6d#kTiseBY%][Xa)Uq,/*(6K7
+W%g@L7!'9aM\SXL(rWa!*W1-qjEVNr:9>aj7"ZQ"&^7Np;_fn'dKET+PZKD5gDtB=
+.s^"mA6Uh->dE&;`To35>[X+5@C'3.7Qb9=A7[Q=\J4T(ZW](*9/W>XIM#L@7T2H>
+bfI<:R0i/I+65m]$4"TkE'b0BZs-3o6V0dIE(V7Pa)apT*-Tm`6;$X$b4q,CWP7$E
+%bJ=H8+_AAP^teFJi,:ua?s<3/>#e.+[6s!TsDJTS;=Si,tPD88Aq7NbAoks?V'RU
+aSI5T'44[sPY!Via\-5;=t(ZFQcZ"K8Xta]XHuMjD^+Ld8`Z%%U._sWE^S;_0ZC6)
+CnnHQGbaSN8o%cm]5g<OKh@;r<^!k5U-?'qX2uZ%\5]T?/W:'036M\\\8i:T1.KGS
+MBn_#.h&nLCh8aJGF$s1WXQJ(Fc[;kO^*I_1Yp&"bIo@YT!0H]&Q=ZaleG.eUV-C?
+$EG[P&Fd?Gd(NAC:9l'<;'$+Xhkqm":8"OLXk$;hf*UKg>t`;ajS7%-+O7(ZcG8^?
+^"pt;G$X4`MHY#H';;?mq[4(Y\h\IB/`f,\qTdpYhYcq?L$VP2UHFI9't'7*_''GD
+U#0\l3ZHA@19;$mp"r]_/cd/'bLJ\E&\UQ3_n(bhRXbb8)W/`d^0TmHYh79!)%A2'
+?m-`*r70_YcJVO/:9`M!fcjh[p^qK%<nl,3K`I;2lX.(0P>O'J/X8C3Kfqm:hghpo
+FU9aHrD9QKfD@f^Xd2/FjM&4250Xj,jVPZ0)(VO%^F;La6G>Z!*^:A]5E-d"e+h?1
+qpI;!/;*`G>Q>M7!NaK>dZVo(X9KGG/5cL\5kQ`pWG0/bfTsWjdj!Pq3HIJ0A\g5^
+5tQH&Kci[-keW/=Y)PNG2*A%<5!eFh_?#$`$Lb,T6:+8-e3tK`H(7iE.Be'he;Pr^
+X=bCmo@1]5)*BZ.$oBXUXAo"s6Zl8-;[8cQ;k#=#0X8&)`E'5%X]:$@Yn=*<X@8X2
+>oZg80nIR""@!].@78enSBOd[=i/,uB/1`3*G&q;9teMOCIO*8S\/.3\`"RBE#j(@
+*HC479.%XjmRAMA`\Md.7<W<DG:QsDk@Jq2AU;@nG"/lfZfQZ_"Us#r#!hR-TH/\B
+Q%_^SL(a%\["8BJ*-,/T(ndX!1t@Qk4cUZ=**fS>gq97M",0l1NO;KFU37T6c'Lsp
+L=qfI27ai3\gCS,X4cQlaQ$^dqFep4AMur>2I3'294t!4VP<s58W99FPbQm-R9HmL
+ajN+OdPWs=384Oh>8)V@J>VOBWM@_EUa<CW[&9\b@G@'VgS.#=Z:WfhXZ/WfBUHaa
+IDIms_PEa?Uj^1I7WdF]\?'8_bAt)U_N?=4b"HcEfBfsrb+<CFcmoD?Ouh[fp"R1F
+`a7Z"*W>;eXjPM2T*bY!]Zf8l..Ip`n@@u/TQL+YC8f?R.nr^p]CN+3grWl/c><Qq
+13N>-mL#lmTb46UXaq[5cHpE.rlm%Vb[oL:!1flV)NI-@i9Rhb<o..bdaIOqmBk^`
+/bVB$`bqb:DS<2j;n+tei^41mDD'o9UC*%ZKPnUlc5lG=54qXT2;\TQ3ZH'c7ebat
+p0L(n4>%CT`YVs1(Ja>kn"o4*2Z2Cf(-.NhPG\Okq)XSo#&j'Wn7iO'2Zsdk+\nFk
+n@[gH!u-rD\`]gjnD\$KaGt5U50uk^'o=e23B*#&%_Z]bO0o;Q\=YpYR-3MbiT;E5
+^*Tg;*Fa'(ie#!UO\F19`6p16^PsMug<%c\00ehP@gPih)UIFm@q.N1db/9]p,9_Z
+0]Rc=(2YhC%Q_Du2*gjtdrmmW2EoT]5Z>$.j<8n]1@&I;m,V(4/i>q*Eq**e8?Y3K
+e6/!r](4@&q,Eq\6=if#qYfL_o&UleAML?!6*=crXCYsA)V%euM69ib=rPpmA\"mR
+af\X=''8EnAc!/rF^J_uadgXdSBO__en)f1B%C\FAh6lOF_I>[C0%=bB#>qGenpt#
+DeAOj7H)fdp2S\711ral*ob[=:3SL#G\bQO>aZp?VKQ%I46Y)^C]A5&jDDTEI^Bl?
+T_\[3AqB/8K#\(Ja)-Sg-E7?:M.ggM=LF.CmsAhNMP.\ATpK^A4d%b#PK45q[;;"?
+/X>Q^=s<!rkuo0CC+!_LSEZ1^[On3;_C/SS.O(.T2O11T%B,uOUM:jG8^4>.g,<-k
+Vb.:S8fb2^G-";1Zm7Q4,W)H7r2HJKWhcc/Ui*N7DRA0qL8<t@,d"s0Cpg7u`DQlZ
+PNBiH?Yk%S]rHj=\u*&T%F/c9c`-o^;?i-qL;m")a!poDCm(_06D(9Qj/Td'^1+7_
+n=4\\bENj79D?)=.)'TF'$MT`D'H1N()&_jQLB-U@If34ADukk^J(g*bf@@hn%S]_
+kGUfa$6"!`bK^TmlAsg%\Gsp:hXQMqqb_1TE:rX_IG?2hVL7VcI(nk%q6Foqo,Ai6
+ICl*L7egrpgjJkF3MuY$VVCV`YrVnOW+''&8m_Gfd=$5m3S+%$(X.>0c+:^F';t2F
+F/mZV2u\:4rpS'[a3F!Qo#uU0DAUWJlcuQa)go]t'6qi_Bf^a8(CKads%Lr3O8Nr?
+1P*>l$\kAVaP]="#)rgSQk4dd#)#=:O>49%)\IeAU<km<(ipXKK1s)0LbrWu)FfA^
++h5Zq0c10+7Smf(5]-eM7Nr/l8<4(9`C7[h)7C/6(dht98I3b,)PPPliu1m#R1U=^
+l#eIpb,\C:N9/Tp"WEmeYLVjs3e]?6.(%#Cns^r<CN6St.b2A&g@88a>AoZ4-"(YC
+ZI-]/r)P$!'?!oV39Wo]PBsH$EnNaOd]&VAB5:S]:3O=D\S8C7lt1FoFio\$\_UQK
+;,%sGm))Kih_fu;B5j;5efTK#`UC+:DE^DqQ-&Mb\U9>`Vjn[gqR`:=K$6+$pA>qh
+7k8YadWbCk@BJ#-f%YGY?#B%gJa_C`o0$tMi+h>c:1O4b30(>>r!(HAT&(eH#]/lo
+E-jP`4>;Z5"?`j>D"Kg188Rt::NSYS4tqoWhEJ0%mh(<#dmFnfE!.Bd7?AbfhE^TJ
+DZrD"Uit#fn:Z-2a:PG.$cc)f()t/LEY9>0&mRjQ8'rlC'8H$NLD@sh'?l?T&X8%h
+9<kfi)oj_,E?7U@><!Tn;es!&8CMC;2+^[/E@.`;`1oIfF6p"e`8SYB2Tq<N>h"N>
+lp_sg;f'Q>bg^1OXp6am6VOh;bi;FCFN!K>cLf'GrJG8ZF$;FSbl8X4eEmK8`8SrO
+:!kh8(8dl!m3>?RF_rX8;X@&S9eKI..-]4S87>?I_1bBl<47c][5rG>N9Smd^gTL^
+24^95\ok]W>h`\@G(`jEg1$GIaYKI?##38YHG3gLCNZH)gF*pDeb\BX==Q(/IUMpF
+EH*6IQ5>&$GJ.(6=D1#;@]7F=(kcBmU9eI-3;u#Wgt<0/Ns8WS6^6[LfG_"YCDJFe
+W%WC.S$ABp[?lVlk&3a]a[T9j1Mq_@DQ[/,4We;kp,qU&0#!8_gA4RDVrYAGCNO.V
+rhG),n:#EbB[GVVSZfWM_lbZ&(.3W4dGApdkgF)+Zm_E8@kTmRmXV9L\Xrtb:)V:7
+_J6UipVLVa<PaX@gc!hVE8(A*9]n7pNDFURL,4Xr>e\Q)jkRR[>B;l8$dA1XcNVoV
+JVJo4p0EZTVV5=:&r;8[gF\b9rJoCNCQ,[sj*!GP/W:i%K3FWuJW<!OqHf5$l<:5B
+A&eA8J",@#0g81lpn<b0o6NKBWN\28:h/W2?(^-%#%!aLcR9jLoD3ZG#CO3Y@]9\W
+20T*'@N:"\5Tjg[ZS/$kX@U1tF9OQ&)1ti#8q\!5KKtY6!s8+QA.:`,JdOgu@X):>
+%mr$=JjQs]5m^*g,\/=@K+c+:8RW'_`41a=#]+[?`$U0LGb.6B0+f?Q1+38Cn<:@#
+J0JeDM@Dl[_rA!7iLrAknQ%5/a>u_Gi]i!k61Ya&0c:"sO<_!p.RbP,)bB=6-ZLUi
+7TaXJ&c#NiO+o;%kk91/_,#om@#VB^eJI9Yj"9g#5/k%>$qd$NB*P05`Md&aUQe9'
+E`O+lP2:AXl!Z\-8Ag^L7el&</p^%;X:r*\$`)RXI0I>`b#6gnbaDR#0!7e^aa#;/
+/?FsHprSitG:lOV%0mM'&3*f@8nN'OQcK4h&qE8'bpdTSF'u'n=?'6D*0c&oL1is\
+3_;n'mNlDNQb[WT9o6dl?3L7H)8c5c9C2@sm.PciUDe)V]_Hp[=P9@rn7R`Mpb^"8
+m$UrOCQ2QR2C?r,U2tQqhCD8^brFb0j#[&<UWTA[@JMc*r;DZ7fRHBQL7WHie]sEm
+2_TF2]Du]'g>+E,X6u=`o1IVqA*aE'.\WOpjFU4!-u=\`Q(^Sn6dXO#VFZ+A]Duc)
+_6_%[-r&`s"<C"%Je!''V'%uLk^F-NX[n3MQI`'>h3.ZL8en@p2jD%B*ZA0P%im?)
+aui&>"3O=E^%j#8K/?D/LTpERCfl!)ip8f`:W^<.0`)@Le1trel8:NJjWL&L:cNn6
+@.QCRnE2AT$3rDjeZ%7D`6J^m26+[K]E_!*?5g7NY8ps()E^;blSDNtL#sq-(p]-Q
+bdct%AZ[JL6WVITB5;PL^#Q!5Y.`(s9:"_D`DTI(0Ha[ISqA3:n@d)hs/1W$I8f8:
+^fS3X4mX29fA#H)f=dKaE(oGV[W]XBPK[N1j;9ZhUs<;I7[4GUPI+q"c<4`hFK=Yj
+3$rBq=joBCm!52]X5(n^,GAePfZpkU]Lj(7*+mU*kCYfiL)QgaD%u*Y[C2\lZ#c4I
+:55V(L<Ybu79OGDZM7qM/DQd*B>YJ#^8/d.kt5H.B@kla\17d2X?m'pFt&n.[g^t(
+o7k3O7F9_XZ&UC4Rs&[Uo!B?4hc01g^R8ih1M98@>rueAm].=4#<(o*K<dA;eDT-B
+bjKR)%sP1qi*]W?T\_0`d!1!#kVqGkO#,-B3$1i@W/[ZgCYO.,dI=gC`:381pjCCP
+8cotpX.G7;IMb3=@2&//9l'ENPcPa#dSI#Qr=ZVZ@,SifC5LRI\Tk@A>3SKsY$YTF
+J06`Nh?XVnAAem)k>DS&\5a[aZkl4oLke:<2_1K$T8-3C<pm;n*k)!2-881X6NTV+
+8`;4i166iUBQ^UkUnH0?LNIG)V\*F/_^C2e@md#*0"?"i/6i*^(#AK#@D!tRdVP/R
+6=O0H#9KCtZ9sq,,9TWhgYuJ9LWGK;;E4k@W=sG5E1+N]3&L;U4Q^EC)%S(8*)S?D
+e?HeMnmE`*nLtPjV%eB2*$F\#]Mm7*iCIcm96l!Og<br:3V*R:ECY\.kefci*SG`G
+hiKPD[7NnRf-[\;0R]B^+9a`*&-\ei,TFEg:=t@LW?1*^.L3t&NcV)r!M!ao%$ht1
+ccIC%SOB]K5?Zc98\^$<Dp&`e3Y=jF;$s"OY(r8,,&HM<p7l_4iL@_cnaT\PUW4M-
+dO4"3&ah;EOoY2PUVTUfDD=;7q"E/4Bhdi?3-]]#kra+dFK"a03u&A&+Hp#-&9UU=
+85nj&gjY!KnfR`#d]<=mYu[GG/c,<B,,(pf)Lf<faTl`1-/)4"lU<=pQ*Q2+lI_t%
+TL]<<astcA-]2hqQI:@+X[h#<$IjM-ehsK:57Fhm7,G2+>0Fh-Z4JFi8nbsN2GgG.
+Gbl>\9dk%D2LUV^4)75_VrY5'7a:!0c7<A3MH\;:@!Be)[&RfblUk3YEd4<B[V[FZ
+n7I*(>deF*cpO&."5^RbR^n?>d)2kECS5mRVHYR>U.)T&X0C!uVRp5DCP/Lr_K*:5
+H7/%"?ggrTV=;/f&GbYSrN#e/9?dJ?$=P7F";'A'9?d\CeA'!O^a;1ZX9cV^lsrd(
+cV7<T%_0K[D%Xu=AhBg#/1tTb-?#tDBZrMZ.JRT#6>s%gBIlco9MV?[7)S@rc#7]C
+%tnl$@)ZsSq2A@p&#=$H'$$l$qs7Ld-HaY,[VW$b%`X,"Cg-h9!6L@`D[`:WCo8"E
+*6B`8!i"2fBCO)Wq\obWbXVrb9[(\]culGA"q9<"0PJbZZHfO+#L),P-W85`qK8n?
+Fsl@tKCK;%(=<`^d78Trbmm/2`mP*$GidG#/M)2qjO6h&V$n!e8lgW.U8CGhH7-MX
+kK%rscIK%'I>?[)m:LfE,"di6euBG9X`E%9*[Kq4fKt+cNJor8.+kGP?jGn?mI]&2
+4CQ:oGu61ILZDcOn<(X)P,\MYBPsIM*tr[I-&nr7!bC$o>ajo7l,f0X%W7bMW0o:S
+/oMXY#WCQ-`$^8QRj^cXDNO6<,X*nY0.F(T.I./9P[39nl>FNDcE,S,ZS'\QM!hp1
+X>VZoX=]IZMl?c2_Ed@"8MI*#gqt%W@h(*STP;^@iQa-7aG).lrA*X4Q1D^>_^9aT
+pl()J/2K]`%g_AK0(,kXis;&.8J*cM7PX,Z2).FEDJ_;:68LrN2_R"81JEO52`AQH
+2\U(n&p,p.NA0BBQ-G[T'6`<_J1?Sf+N&Ca:4gt^jLA\^Ln_ENo=-^c7_+./4>(Xt
+;T1c#d5U)8PtRK'F2Kos1:-!u4u8Ft&5+pFffBH\/[L3r.DHS!au9K22M=LWK%W?Y
+^mte59FiPBU1Bh`1,H+3GRMqZmolJ>@+'[h2JPMNb"/Aqg+/5/4AU@$A&^Q%*u6+k
+pnQL:l>68gF?:#'dY`Q?0;bT7Wi5PV1otjf:U[7+]W)LZWc,tYcd)CUd]9S(X:O0h
+Dre"LFtCea9Bm4nUqWu"qQ<WpY-8,6$Io.Aq#O+f!NQA*$O]QN',lQATh1RP:bo<=
+I*=9'"7%H?:aH7&2[&G0"\V1hE*l<H6DY:?"u'l$b@_&PA@@Ck[a9Q5E.k]^MRW):
+Gt29MB4hOh3slP"$;d?:":GR[RX_QL$?3O,E2O**aWN:4%#lMm7GBG/k$D$6]^+6;
+X6.*7h%!*&%Zp9!Ju$,=fZJl;@E)STL*1uN"C@1Q]p1'ZdJRpe^h1hN_3(n:Cg.LK
+K+[IX,UWU=nKAO(/AP+<`Nk`G&N^Y'<>6ug'P@G3("X/d;\`)I5B0_<nZtYRK#Wp\
+D3SeSZ#41'HP`rj(Q>a<ec?TrM&:&hc#Jh"-@6[br+=+<ag%@REM1J%V\(Ji_[nYC
+YW63N,g1#E)oj<G/EIjncuS[$)Y!fA1"=Ig9"*n@cV&A$ET58@k0UC!:_c)^nao4g
+YgDq:dBWasE5s)<-QpYDdde&J'rF9;)FSF+4)uImE[9.t.XE[CI'PMU-_DWCA:B\-
+:_H8F&k^c=:tQC]g0tdCa+5QhD^K=f-I&)//Ya\Ki$f!&:_JFOZABtbN2<r&Do[6p
+6ao@%Jp7p&TEg4D.KH)X.*HJ)J8&9$-kPu?%lR"fk0Fa1mW_Vc<,[fe5UbhPAgTHR
+\M-B#gQOHL&0d9i-[##ORdLhM1;rJlQL)Kk3=b82&ONmLI,8otFOsJ;G:Q]=75%RU
+3-22Q:7F=:<0FTCP#H7_G4dbR"[99%0fQ@_G=ptQ6D;[K2Ztm_GDCLnbBc+qMcXYf
+B=B@4,iR1R5R4bM_c\i5L?4cmiHL/;2jJg_L,Mf/>ijXebdW*O,sUGLK_KXF\/-IO
+2!?nBJCBcC(aXA.4+[/F1T4!1(c^>c0(m:OGM"2*Z[d]!-9$012[FfY@uBX)L@(=_
+KaD-BU+GTS(,pJUJSkoY6OqC$FFj%$7T\_A=6qr6m>(<*UZ*;C'K./%k4&Omgc22^
+UR']72"E*D,ubfRe/n2_E&4\8UpU4kA/76V<;6R:V=05;6eXU9?98[`VfZN4&#-!u
+W2S%G:_j+&Z#hLW\3.p(6.CRf:WBE<bX-6pX,kh$0<[sNiiK01:_]f+PcFa_YcUm3
+Y)idg<4klr^o^ST!K.$\lNmVm!DPnM@q=gu`8=;mhZM%N!`\OhFR]LW3s&CW!`]*+
+FTD\7HVe7PGRI.KlX*KsB*Yg][hTmlE/7T=B2W]5\[=(3eM::nQ@BII\b/;#:q!s>
+]X`/`$rpF=a9rG7AIXo_<m/`h$i="*LKB-%@"nUk)<Y+%Ih.J7&(QGHVAj+>Ip$aH
+=fa>\ls!XE0kp!^C*nR:g(nOj[9f-/@F`%qFhkj/`>^\X'*`julq#BDfjWFdb<otX
+(#irt=_0<p?d*-uFnlfsFVcq@)`A,Fedu?EjVkOT@F:%W<Z5I&Q)E#sDarb)k2TqV
+$"Hi9A#rmEk(?E04_/1NE0a2B7l+^:JR4atE#JR`RK6jEfYt:0cIQ[TLKS6p1=.q&
+G0L5f[XpSX(=9LGdHqFl1'l<Y@!PrI+U=WRdMUH]*n3*O,)o<4;D-FA]$k[XehTC)
+9lk-.:tJF"D$TlR9oC<`g4#@EfbWZrX`JB^TdO\uD_cf\MG\<Q7cIq&..W!>2[ZE`
+&[aP37-X0JB8^$cLN4k-JEd,[7kXCJ$8lQq4(F;IF3HW,qLD*C.G$4>=)!4%2aBs"
+4Jbh=fW:eT!/Xk)/skS7Mcr&a"IjX_J^VMb3&9jP<P7bKG[s(aj"r&DgnJRgFLY/2
+_^gFNItSY1L)<K5=,/@@3bcZ24/dPDQsYGD9nW&@KK*[igZuX7G3P3G_C/2:e$V'C
+0o>L&2\RD"UP+e8'>RZX34pPZ]J2Be,D0_tP$"K12gmLV,rUrkKYsI@=Ib>>INg2o
+K^$7lF.:3:FiXDpL=3A^At_8#IOR&@3D5)fkG:4lXH.4,a%8N#*.,i7l\tsSb9D&Y
+@cb\Q?-:<>b.N$_.tP`Gc-%;:#\-fV<Eh8_J%OL/V3dH5(^d+'pcINR5!uDC>^O&V
+RmgT9-/@jWmj3mKfo*^[N#_[U(u7X,PE&UOq5Se%b$U2DEK=6+O,pY7FF^@ZY=NpK
+6.CmV<0<<2"\Et\6?Jc]7)+nGmultk8//@#'Xs:+mRRltYB`N03Cp9:bEVKTPq#Xr
+K_kih?NO3eQ:h``Uu);j24"[]:MW7_OBn3l4&ARM:oe)njZ?="PdY]Q['_!Dl[>3P
+K:6p6\TH4t6_7G=RX\='$?\e?2*4d<Xe=3/T`gljX-]?YVS!eo%;"c5X8AHQLRlf`
+SeZaQ-3pG\%A(rLT*#a/Mt149\g6"D@+kau\d2t4oj43aE#KHtRMk1K)57PkU1Q3U
+\g=*@/YajRD&[H;>!0\;eYJL0UikptX@]5MVkl9;`^[1I3aQUuEMcoZVMp/)nUt_%
+(2e:oW&<gK/=.6cMdkD#DK[dSg6Wa>S8]C?WOenL[RtSK:TEdCASgHK-V%c'giPGh
+cIQmZqU6LF#A8oqBB6%onagF2#ACCGd(8[[>2a1aqKb4%HH2Y^9h2FI1Et("CQ2J4
+bqj/T)VDL<I[_QunkZQnC=kGsfSsgUBBcb)Mf+=7DVIS1]1HpTmBl-n[9!lX>?mcS
+@&AlfT,VKa]5M]rqO\#GF0^OnD`LW-]Kpn#T_j\E\*c=r9K;<KkKc:XO'&.f?8cm^
+TA,Xh;P1t01,jD_`E-?_gbj1UYPf<+]-tBSlZ>5U\V"SM*J66I]O%',c#u&b,_*I5
+,B<ti!%o,u6j"$S&D@R3%7UmW+QR8iJf=`e3)J+7"W5*#iu""q-QS8,7O(J%;ATdo
+6);pH9GCne&5"+0#mm%Q14kI>Jd>%$AL!d?k;4?PSjb/mdNNUu,g'grNR9*f#]pbn
+4eI^I0KIr16PbB7i1ipkDS]ni9eA,(%(`to);8\dToI?c>c^_1Pu4ZH94s1;Ct)!\
+b3s_9i\))SmG@)[ZJ4Z3]"TM>QEL^0P`$+)+'u)//(7%K-uF\Wl/WYL<jHG5Vuptl
+N6EqX,h1'CdP6:0<P=ZV3*[>V(JV$$`V6pVrnM;6LQ1o\_#WP9d,OaV>t?*rF5;n;
+#8`s:P4PXmpTh$<5DHZ6n7oVLnV>OV2]U\$5Hcb+oJpE;)At%K!,g^!6+V.U+Me'=
+14c105W9nU._H`blJ+"D5nE#dl3?J3(B).U$K1Ekd1^C:,uFYJ'r;LY?PTKtZ98jj
+$$:)(6t*DN'h;ufK,-$o,\42OOg8OCTg>u2,tZ?lRMlCXb\JRcZCl$`atg$N/[uG_
+D#22R1s%OCd4EN[756lA)o^7$j#!Gq]Q#i)aNV=$^GC15"jWg7D^/'L[$*GHiOkRG
+:i_7'4%aU2=$B8VS@_<gEs3pG;^&fs3PVrnf/_+'dr,Z@eN-P9cp>V?.TQ.`JOYD-
+*ASU2[9=;Me^S/R)@$t):7m:UQ%<FFe?tE4=I%u,A5fpZK2>UV'rLJ#;2oj"9*(],
+3Dm6h"<>u/'_b:V25PkH>a<jKDp]>fF'mc?V9*6(d_&$hflsinD`r9l>kQm<Xk@LJ
+2'p4ZUPNL!?/bCT)0971L!aNVQX.([@UXuIOJ/#*Y_HJp$=f-(3Bd)[TpPIKJ76_%
+#,3<_bO57b69GMk^@I/,Ppi((l@IY)hM\+%RA))I9c<jlQ>)FMM.:7=-'OsV3<k2>
+BS"GF?%uP\l^m;gVTZ7jR]pCeD)lp![Uq)3Af5%nhW^Y1)lCg`ms?D#[Hq*B)a(9K
+)E>:kaU]&j#+N(<a)SXJi#5^<_R%4%QBs4YD/$)G)6`u4&%T86p>go!3'QaKiB0MH
+[E"g<D6<1'VTCH64\#=FC-C`c\^!9Al-N7u+%au#?6381o/f.6ip7Vros.Tp?"MAa
+5/35ofNu<E`!761cgc=p?P`3KQNl&]oG916N,ndHg$T&XLY:g.\*r#+rnfeV4--r:
+34?hnJV0";clGCS"u],IA.*RV.?D9QpuA!iNdPe;h72X="J"0j"qV7IYg[JUR]nV7
+aa(9UkYV1S)4ZBBEBt;K=@lqk'e41&%)RfY$t/EMKCG0+P(7$2$2?6.;%aKTp?N%>
+We*OA3Yr`SAHPU_<Jh>U)B`.TjN+$(-u!pW`98i&@WWPT;*#i<aG*$4PX^Y[-9.qN
+HO8BlFCM;e[RWli8fORJMaboP7H,#4P4PB-cs.I+\JH80pbRnM(,hIli)uh>Q;C=;
+'=egj$7+D*-h2(KX*(:BUta[FZ4^-YQmtG`bWAG&Afms31F1N[R?Hla5rmS"kL@Tj
+K]HTJa3o#]i/&3V+>oX?"7@.]3K$--!7@AoJ8A"!a=qA-\1];>J^2AcR8Yk\1SZco
+d2AT,mtg7uJm_uG_7hL3>hm-3nk>CGofD6Z_jtk76Hr(I,:.0cci\kjiA#;CAl.QM
+C)&k/C$g#^DC<dU01"9j(H;V<m%4oE2sA(E4biN[-F7qdW?KhKLYct]Za*l]8fKBP
+m0a^T@7SFEBeC*3S/p%%7uQpX.ho^cRC;?@h.]u^cEt,X'M)&_5sh2/eF8mKUJ#>Q
+rMi=ld1LHnB&WDPWc8a:-F-35P,^,[Pc6$2LdG#PR0KJNOH!-OBj/U+)Qe*"[3\fB
+6PDV2@eI7/=;5q,l[_SVY/'36UhiPYoCFL^3/k%f)FrDj1,=C>C8C/O2A2uMSOi1j
+R2Zc?:AiPHKj@L"[!mSPKrIG;Kd7b/bj?b*B:FaK+f8DXJC#d,":-F\+QOYuOJ5L8
+#sK#uo`UP_>ShT<YqB;6ILW*1<K_2Z9S7%4G8(_-KoZgA8!7,Jmek""Efk9&CVqV9
+>UNBmIL<&C4V#<@)eo]@9jRQAVsaJLHAQoH_So`0Y9AXI$KC\.AR-(:mK/YH$!0Dn
+Yc]/(jhO^lbpqs)qJ[.85&#<8_T1BAE&f=OX-3*-gdN!ImNRohh[r.P+LrZLrEPH_
+K&S4,!*;j\J>tnj[:U\K=JeJqm!<+qgl0;E6el4_+n.88&!A$X0$+UiL-a6>@Ab&+
+5cs-\1^:&.g%[FWXWa=KeFM'uJdTaU5tFK=q4/Gr&St6_Yt$A=feTVBD%;.4\5q@W
+TZ_=nn0,-VpH]Yg!FF0YagsmKqV`'&L2_*S`]=D`THrQDEilId\D9"o*<a#oZMA,o
+(aH(#,Grfm7p!^^<:2J&]T`ot<kEQgU$eDVesC/Ph?OF5[N;PINKN=9$gFnfeoKDh
+9)uH!Xe7@CX*\&RqRu9uPhf'-E4BCmCJ6kIYoAD8\uk_j$rZu1DD0einbYP;m@j'f
+madd&F_NCY[,=%oJP[9W5kkd(TUZ4<U`K]WZ\\bBq9OT>?4b";'LJKcRF#YH6Lfu]
+%&$Y#L<uq?6#^<Dq(+=WnG4$E3lMH%]L[o"<\<G[]bFma%>ksr/4M%q(F'WIN#R(%
+6!YV1@lH?+&H)c$#q$\OKU6XU+.5WE&$=#5\Lc@,5KJ*P.LOCCkXCpI\esZV+P`'=
+f3B3851^f#]CqFNb>68eXU6>uk_jIn/JqVP.^^7eQ*=ODaga7%jPAEi12]^dq)>,V
+9YokTT;tX2]Nf%8lC@BX^WX/eBI2FK20/+*lRsb!o0g3RFX[_uRXoosp^NWOH=kCt
+jLE@dCKtDt26E&"R8pO7p\sgc:D.[6JHY&5[Q]]$ajWi)'lW&%g9t*^I8kX6FS<IY
+W?$;5A;JcpZ;_[3,:`S`d?SO??UOJ<DA>e1;+e7hnqs?+?Y@L:6F5b\R=CZD9n/8$
+/`Z:M.`!Pfp6#-nO>.\+0V,2DkDQ\MXan*e^nE?Cj='<&$j&AgF9eolj9aT9Xg4G3
+W@ElPnWIk>5GSsLg_>pQ%)<4gM)'oP";3,]ftM^OMO>ch0cd0^&[$*3^^2L-!k1J2
+frR`#NcYh!5iKOPkDgN"_>'B`0e/4:*KJnHO&P\f@`/o#X0JWC%[(M-@+:fB0Fo)U
+O-D)rYjoP=lOX1W_]lYu_VZUn"I'2sVJ-<tR0o,RFM`Rn3\%Tk]/C;U9!718]Q7Nq
+S&geGX"Q1k00qjei[m&[4sa,%PN)D2])/[_r#trN03\@NW;eLYa"SG10I^6fZYPlu
+i5J(-'gi3P6Z,=[YaVTo+M2S-M@HZ8'<p3l0^;9DjA\6_F-<;?Qj]rRBlpUb=:+iF
+0@P.^Ri&aDqlq=QTA'u$fmtk%l]/gq\']n""%k<dh_H]*/0R-CUEqZ`B)lY.13np+
++d/6d.i@gcR;n9Ci!,UbK"a<#3hn]k>;E$r1UBa'ZW]8nEM>,.-F89'1TLkh*,%lb
+BbJ<HZR^Kp]0Df9KesHIRq#]mM7'lU7_#G1)uFnK$-Sh@8$nu-)d5NJ"10ld8/uH0
+]:$jM$VreqbV^#(SIC^i;9h%7c*]W#]ck'=;cofH7EGS`)q5Fh.pbi+?Q\W$'J`,"
+Cdgt>@iW)R2C\L2>@P(;L<AkU73c9`HYU"uOZ(C%[b=&0>b8paXLAjZ2^G9?1p"\_
+`&CnB8JI%TiVLR#F>p"3[mC#5qfYW]IQV\$TjrV;b'Ha?G8t[V,t*b+UlS3=L*50;
+b_k_eCrj80M`B3U,!2hbfkI.3)U,K*0@Q#m_i^X^P9K7VY.>gNMFsU0(qal9\\-E:
+F/q=<0fdb,&1T%R5gGqlTV@(5,:X_&C+),@lbLu=Uo]lce#8MR3h^)7QC50+Z`GXf
+rAra%]';Sn!]iC]76<7p4%_Oq@S38u4$7RZYLK)))G_Md]-Q^T9X7Sml;U@1r4<Ag
+cg/CnK>OIS`$Mb/V9?n:5q5JGaX.Cs4L4nne&o>O<$t"=]*Qra$4F7q%3XC^-49(]
+>n&'ZXJP7'&SgFQ'E>8cW"tm*c>2'&ic,7HB0bunOg)3XlIh3oL;2[`Oqf5odVhB)
+T"VKEXKoOB;"(HDWC:eP&-X:!]cjGXIYc2./lKa)`A#`7ej=Wt-qQ4mS2R:Os"7j!
+Od.:CPTu.!M35.kM1d4=aH.!CJVoj5;tMXNoH9=$QrG3e^oG>j#gOh,/unO_&osNp
+6p@T]c.&NcX)`d:!AgYP:"0:\^be;*]B-rqM'g.'WRXm6>u?eG15t9O<HFX0C_al"
+S\pR;.Krn9AR(&FegYBuOgS7N3B!fiN7K,J&TK_0]!k]9R]K,ce7gD5+h!U;l&7E-
+$"0VDV/2:JYguFXPSf.8E=ncUjX41l)];'VENt`/4<!U1XL09+0m-ODqoi19PIrOr
+FaT:i;j5XC`+j$f]$/_[4"SWpY=S^r6M!,;hO3B]/e[*F,X!b@oVYDsPO(Q</B^Ze
+3NmNt]*ts.S5$2o:G7=cX]k55)ZW;_R70\`79ci^EELGl\!;nTY`)d?Ug1.:?80gn
+O:5)X'+dV`R7lbubPYk]`Hj6ab=iLk,sls`,\jT[Cb`S>Z.*\Hl:RNCEL??Ta#T+!
+8LDJ^-F-j-7m[KL'R;HuHH.kf>82HECF7*SV_\(>:(oB'o.r1n'O0@G1RtNc$XlT=
+ZPs<L#ids%/;Zp2Vj]`+>YVBUgl3:Abt?6j*4q0PbgkLl6cgdj<81'QA^F"IH;<#<
+8UF*&baBF"RN*lJ1ut0%&?O'=^U4/Aaor*obmL!mU7\P#[(N3B>nu3)VO`?);6e<e
+P=s&n<N_:[b.D'(glonN`)uB/b7f.ZCp19pZo4/VaTPWd$WaKYC.j`s*m6po\]`\7
+9=HEo8Nii>9r,tn^pe^.2j5/PF*gSZI*?<u9RE1$PCGP3b;+1\bfb[4\DfINca\AM
+30_k%PDd[reN1Y"c&C8b"0g>@)S%-J3C4S-bEbl_Qd,Dq>o@A,OXa*VUJ<j$c;H9`
+[-&YJkTY]E3_D7j@OFpoW'#1j:Gj$9'^s?mX\?.Q('W8b$<9HpnBYmUUU.;&HaQY=
+[nj??Utlp7jSZU+;,?QZ]A3NMo`Mi6=1f_[4??ZY;Hu>!?+H6W$JW\L_Xp[Y?dS,a
+-4LO""VNs='>67<4\Z]f]Bte$R1YiA]!^U]o(4MJ0r!4\QLu]SX0BHt/Zs[G[JK9n
+X\hH2(1cIW#d#+OZe<mF!)jio5MJ(b\MK;3KL9i[Oc]1e.%FigJ(;Ij6@tkA>PbMm
+Js0*U<4##KHI"BX^QFWEju-,(C6dB(#M2f06Chp_9k03t@Limc<`+J2AT:$;3+h87
+f/Ta2g[_@UI#:pL.q@pXDKS0RmZ\X15D=WfnqN&75cUM;%&SB9#(4]go"Q^uY;?:C
+oE+/c"cVP`BJt=<]nGT5Hn'8SMeXW(!4L/;nr*d1fGL0r0ghth]G)3Xe9uE%]lIe\
+nr,j>'EH'G*G^U_Q0=TpB\>m(Y)b5\k>["&$*cI(;Y#fYFqfhWBE3hO#+"M1jXbcR
+l7e!PNd?M+X_Id3f!s_#R6YMQJ3tZVNk>jd*&*GA7;Ct]PI*)[G--fB`>$\s_&S3n
+!AS>qiPOUQStSRd#.0WsZWU!K'EN!Q0"++-3`q%sfUChfir9\RQ5+P/;4P'0NL;J+
+R`1Cr7J33?oq"VFT1/FG7L<."+`^aD);h-2>$P[+FDtEBC)=g->-r6P`,Jo0E*D9E
+7jQ/G<WSU7Z'7,Oa$m>TFEh#:-jbmAZ>%#Y@k6JK\$FN1'?Q_@k$'VJU/438a=Y-I
+3_6Su1>F1ogbGSZ5g8"`^"d2?Zc1"'jiK;qar?np(#)!Ce]i#,c5]37aW^Z>%'8D]
+Q<brS[$9u9?6gK(,ojVM1qhO!"kalZ;+^)k2"fYH("o,k=P`nN+78&nh;_+TO^;:o
+jFPq*Z.rZLAR;4dhS/X#WP)FKY0/Eb[T2dfXmjMVnk4i.SuqZ-mIn`1]jHcPm.n95
+>BO;`oj>q\hr468nb#Rr"lL+5bbG&?6[qeH$9/4nbk$TL"pd0m#pG9GmpUHZEY>nM
+%3^`A9qiXON8*;)Q-J##iA6jqFW'.@7cA5"@=+SSMkAss2`hC;:>G'.4R-A'0fj1n
+U37WiSfp/#4et7d,Q^%gp*Mj.6r*[S@Z:(Wr[K/"qE'*%]9Y$1XtJ'']d5^5iu1rD
+h$%:L:=*l9:[JEtCWb[c)5[IAj-jB"[g(40%m98C;&dn0%R3f`e0YYk-4Lf&2&Y76
+)S3m-;67r[\R9Bu(*ul@',h5-.5Bo#%Fn`&`#A!\1@E(RR9m"GY7%EFlL;Sl<g6Pe
+jT8s?$SPBNO,sR/%j$XE/Su+%\AX_\/HW=kVWGNXj",YJB`RVd](j/<4&^$_/@'[s
+"C^PEL(lW5pXb$ap7t!7VUmfdlQ!0dAS\32aQ]"a<n/R4)!f[HT>F/Z;o"$$#-I-@
+3)gBdW&Kc^ckpN5K6aMSk%-u^(9]-iQ(")c=4m4m"`*rI.b<-7B2X5ZqXXJ`G7a>%
+H4#Q([SA8C3-qG3k[0t5!BYTB@?\*-ArU4b@fIh[D(*`3An>:7RamF@IhWfeNd4&n
+E9EGeZ65dNk(RY%T-WaDj6Lsi%X!3"kip\_CXj];No=#??F*'_BREj^qp=ZZ\R=Rr
+aqa&Wg'dbBDQ`oIn\H3R(.hO?`*.R$!%6CC_0K@"LNf"Re]Ub5#g[R?;":UBRB&35
+^;C.d!FV,FPJ`rHOTOJ-"?c#_?>O^j=iSOeT#m:!b*@+AYiK.p*+)l#E,>/XD%(Ae
+Eu/[EE*B-g0t,UecINgjf,#dd>5KR?'-l7Y>aX#aR.[jH4EO)]P\pnV12XR>4FOO.
+0?=,1#QTBm2\uqCU'#'cA2G3_T^Xol*8([R5bO3P6mugRLW/7MTtFPR)&Wm=&Esm<
+-RBa)@.9;C69?EW^ua!1`&;6XKhc7O!Q`P`&=s</1\af-F$kuo-$6.Pb[EQ%`9L:3
+GVj"e(t0gsWoZWX2Qon,@qph@@:bLYm8f[P'&#+B7W$YeX]g]]):5QEX6oI<<PV.C
+=(.r.r\MLB7Y=?F3jk$h@.<htVAbp1)3&W<9^'?f28<f]RQDiICM:WK#-rYV[p*#T
+=)iRjLtbRhg'm^:SH.DIS(_[<4"_Z"DkGm,Zs,^pm[I5rn%''HO&G;6R:mr'HcLAP
+;&jG[*a^9e^,$aO\Kd&f0B)!MF%731*cQ,=qf4nNcuS80E!)]mLG(HQ"0*gYZN*/7
+pgtMK0H;;(^^mLp*5;cs3#o\pbP_o9%h'*@[VSV?YJgi9&fF!?CfhN;8`LHh`(WiP
+'e43^0c`Vrb7_u`EXZFj87@0FiWasm;]85i@_!;V0fWYZ0Ci4V-pB1-Q5W@-baf,5
+EU95<UG?).'a?5<s!>SS<'qc41,RN,c)XfM\&@6i&L#J_?tCi]PRRX2UZ%kW)b:6>
+)C^6E7(kb-'KYJD9U)?sK[CH,BUI-[I60F4l88)o7d?4EWC;^#;Adr+'6kEIeQiU*
+<`E&D``4jSPg7f8&8+YeedY\U;!q=b:g!B*2$h_i1k<N`ltfHDg3%P==@dO%=]npN
+`AGWhFl_82>&t6h@3TN91Inc0SCnj9Q;qdIgU!\h)Hme94VtHP?u%sF=:P@K?ujId
+dU1T0*ZE4ENZEXJFg,X920\`IL03*)iug5RopLQl'KBlVdm:@16feniCDXGl3,O:;
+R>tERh/1_GLWEo3aW#ueSo6>C=`uP>@sPdM1Si]I6ZhC3Y\fS$mTa)[`IY`,)J^8*
+AOD4I7$R!%\77=c77"Y7+?L4I0b]<9<i:ng[>H,"]bK&_RHqp@m'L[MiXQqaka`\A
+JZTYm<t7S]VO#"R3,[brpKo,/#7h=n_5A_P1(\MRh`S7i@lFl/E?P=X,OqIM.NHXd
+_G@db!,W_"]Q!TfnFmp#FM[O<P=sed&8&Vr9ALYdV:)Y[Zb1QS3-3u#P^`kc"rm<8
+ccM^oZBRq<Vg7_8%l\e"I%F-9/GU*NfB'(jf*0_Jrr5"ChL%k(+?[C4o36]_bS[1a
+f)/nXK6o5=-9kSb!YoeBIrDje^B2"DTG,h)"J$KaK`kI"_M<b>aok!HW/I=E$A7fX
+rBa$^rEZKCJVfs/^^(kO%4Y$s0Ff#7GYE%Iga5Z?EW\?kk"qXO0I/<g,!Rnq$R):r
+Fn!fK4Em`idUAl#Bl'V4AA&adoK7t@IN]d=5o!gZOEIaXq]@XP)+d53J7VOs^8IqM
++$0">&_8g/Lr)MbCX%lYJ/g^#m2u^Nn;iS5i5V)c'BC-kJ&_TT^bb9Bf9r_'K_Y8U
+=%F<%;2c^7J=*0tph5;AAHAK0&-h<r=W=W?IM/p!8G$%-;1*q\CXN6jf.S^ZP58`>
+fuKh/%ZA\5_J?IYYU7tXQO5jlCrk#U,/bc^'+u4NN+M4s7ZsX1oYbIKEb70R4YOmH
+j!b1XXHE>+3PgBhS?oYI1LM,6QslSSo;EKaOtp[="S5,qbg/3T"$7D_doFDDd5m[V
+JPZ(LT<pSR(J5''W/F;%jKaTN1^6Wcffc%ipt:mGj[c>/i&??-W>0Ln<Qc*@1.?%r
+*0S?7b8G#aKkW[iP3GTgWR+V!/A7SUqb#'A6D11KNgRt-;N,_lV<1V<0(Tij9cZl6
+k<Xe?VANrMKj6HTi2mphF%_Cs00(BEQ*Z+9d*9/h=>b]>Pnp<-g9K8$7n1$be!,QH
+<C].6,TF,^WCgOnkGBXo9V3fD(lspX5?2h&Sk@pics9;3-lTB6$P%uSNH^eh)SI:>
+(KY*Ld$pmagfeIrLs_2@7;/99UA<ba-^$>V1\D_4b@JV%26s!S-IplSTkfg;<3n#+
+c)3#GUXH/G8le"8>DN'?)hMQl'GWGN$G`-oKu$N!!nUA8mr?hQHb!l8A>=8[Sm*Ct
+0CI>DW!dT@;Ge`9/7b-GRskdKh>C(c#,&$O>cNoIX@hSk=/qb<O=D:VCl7N\h$%A-
+%-jn)WtPQjKopq(g$D^_"UM6b>dY2Bek50YDVfNG[;DqL>I?J6eI5)g#ccFdX/0^i
+MQ!q#g@e^Z"ar'4>uf<O!FOG)IU6u/K%K+l2!cS,0\dqm=7[3=VQGASJi:Csh-seO
+"d617>ft`Ra/mCjR'Q(GamH3F8PJZ@@4$HHRMF@49X="AAm'<!1G$$f7B>/-lI]u9
+>A_u_YI/^lF]uLVCoq%!2V,cg>C0G`(&^&$<nPl;$WWOt&M?4G:LQuXK`SP#&5#G0
+][G!RIL6EQ_D6lmfG#C2qUg?3f9*']9<-O*!8hPd6)S,_.W`uZ=Z9mpi?E"DM%R06
+`&QKP[JPM7&._h/GXo$_P[TD%%Rs$V>61F6>EH*b2X@KloHY0.G]G,SmeD"92X]db
+Z2&[bD:oRIZdsUp;=D9f!BsuAif=Ck-?+1X]jr*OKNpD]6!b]92oD,@V]05>=:k0O
+X8I=7FoY!g)Zq6?1??)HL*(Z[Rc/q(JJ"UlQ@cZQ3<TVBmngic_gMO\b#O,5KW].%
+=2s=Q39>JlUN#XNb2mh=M-F^1oE^Eb3R:Wj08lC76]CU[0eM^QH`:k\_X(`587$_,
+iO_'Rf7A]Om-ff^4\'Y8jkJ/C:0liQG9#u0$dX'FEa?`<:#CginF,2_a[4TtgUon;
+;<S2,EW70>GnZ6[n+cGJLY(T+l=]^K#GF4d/_Re+T'Iojo4oFFXPd'sP+GmO8\$mc
+,mK3j@"M;!GuNb]Rt9tU%f1M,OZ+pUELKqZcciL31hIK4Zr7=sg/O=q;S1>F=)QOd
+4+^E[#Alc5S*nstfCs/cT$;?QGu%#bP\7AiT<n*3:a`G4'PjPq'IcGs`'m%TD%NKe
+2ZKkeUadoLMD1hU1b7iNU+\-pl9I=d7/sHRs(Y6&Dn%eOVPS#+VFr\A!lV.>C8]4?
+]Lt5^C4NLFIP_H764=bh$AphgPc0J&>"Y[l6F&>)UB]a.V/1<8-2KJqC+dZ71s379
+j&E/#4uOn1XY5DfWm[q_fJkA:!/$`dUTUS5#!rO4Y)9Z)A%]",&1l'[Z]0c'6cfF_
+coMWk50F`I"6U+D+K`QTV/%Kdb:Nu&3s1=s5g)9jBr89FpmTB&XijHr&$eM5-p;N#
+9s;3%mb1,\cF.8JMr_B;95_1+`.q2.[u7KUCLFXtOLSht%dTLljJGLDHqN^n8rXg@
+,ecl=`27NP@jKVt97@'q[he;@8kF>)"Kqr>(;,`r]`dp(jUeks&l9"2^'l:jV$9Ud
+m2*t8]*1;mC\hbL:f]8L<9si(ARr=;&AY?l<br,OYZso(+A7PR^oSqd$nc$D@)2)W
+4bZdJV4>?cHNn#j`.c@Dlqgn4V\l8C`9,-G9MWGnbf&Vi`o]%V;=q?Zk#uAc?U^iY
+Y^B*&LeXt09'-Cf/<q'VKOP/,@E&/eCN*a[!6XF[!"q3!n<"pWRUi8mQ_mSjdCNnb
+Y0?$U]]Nm>%,,NVi?o&p[g%:mN9k5Zo!e+cB4dTI-<un;k"Cf?7cppiZ%QoTWu/(K
+.ON5R#-,O:\o*2>D<@j99eNpB2(C1;\17WHCL#@WPgkAA%2.U3kZlVQC-AP.dEp]%
+$2W/l&CiFQeS?B]M-ebI*[kn[O6L,5i^AF9*o0B(,UcoH#;hH0k&X)_5-ks`;UCRn
+"?^=Z0F`?ma$T'J!07?bF3YhmL@"%4[!6I<E`4V$8FG_T"#GdN2Q-L/F$]o1`e4^f
+ILa_l@Qs<PL>:nQG>6UJ8D;mt,iVHFFj@Se/lM/`&r$o&h6X7SD[_SE)"B7#E<'E-
+01ng"R68Z=K>YPtPG10\g@/tWiK$0Vl*u/?P^6+nIgHuPW"=h^<e(Y<4NJ.3k8oEi
+>&aV\o5At?cTORY%lhm\5-K3\NM;F\`B=Jc4\:`]aTOn/+[0b&4RYF$:'j65oS<%L
+nan\(W,j`YQJjK#Mob2Ye)6/q*o#kFo?G#]L"8PF>2f+&m`kMTkgl5U8r_.<M[rTE
+B;"HWoS[g`8>u2Q;hFY$oegYl9*ZN-Pd'7K:7<VK9;a?'jn($Tk==%J5Y2P\7mcF=
+3)M>BPUSjhmrF["<D:L85D]kkc)@(ClrD0<:P68R.AZehYe(FIQqsrUn$\`b^c.=i
+3/Q#ZkJj'Rb7Z'!Ss:dsZqN07gAA)2"'%2l2*V"X\tGl>Ta+86#?:^Q,9[U*`ipO2
+E!lYB+":#"$EtT\!^?]X6NN''!Ql=KC/4mtZDA*VV(aSXF[i]jU+pX]64mZ`&4!-i
+7204dY>9cRMcMIipoa/2Z]X2MY[j_Qp9Tnh1^mn]&fNd7GX<#o3O1?FP!D?mT*MC-
+b6kJV%(r\23@?LsXTNJJlFP:+eufa3$S\bg1:0'D(cpsSdSR6Qb**7"*jCaP$%pm5
+o(*;Eg:@C>%LXQmAjSg<lp5U^@s*Yr0`&.2!47jmXq;)KOUs(k'Lqa<8Fa:"0cLt7
+-<;iN[L7(X`.:mrK+i$J8?69fZj9<_M\P\S(f=.EnVViIT,#aP((70H`7l&i;\mc"
+Br'o.CVW_#\ke"N(e"NDKaPMUP5_:#^-qQ1l`)5,!?,bJ)U&+ZV,nUi<u^[_/^+o0
+Ki5bS*?@Rq*K2OL1#BfFjMS7f`"DLWEOs*9ob^+0+9f?qZ3\k.fNq6c+[r:PN--<1
+HQl.7,-6P=Z8EirKZRg(,OCsH9cRUh'-tf'@goYMdTXi"@*B6qb]7ODd=fb"E>Z+g
+98qZN%30#8=X\+OBT2FldZVq>R*Y>pcr%D)L=n'$&M#FL.ubNc%3TDk`6sgkC9l-s
+B-M*]f$j3G)m\Hl;W^]P@am,j%8u8'M\sqp-!3+k9N8aU-8Lm?Y*R=%X:EgICP)!]
+KXJuUR7iS8%t-agLI9Q/16a2bY1*KM%97$TeSgBoc\QVk$J#\55H>/^`Ee1^,_a]9
+0I9tt<)A[@8P`<A2pIm`%A9(&O\a516d8hkB0A"0H?HD_8!NsBN]BX/@n;Eb81:`%
+e=bVSA<!cCLNp2poB/a\F\HFP1R"\lZh]OBa%2E`o?IS7Yl&gl[>N8Q9r+1B:(X$R
+k>-nbNH;jp'`UEXp?>PmO7`X*PaFE3\O+s[C".Om=VgPk!;8&ejk14:fdB.)16$BF
+S!adLM1Flp,jMQ_l;&nl=YD`&+#QQso@[&T\NN%C8X5:WPm>R!D@Dm;,s;JZ6cU37
+cD67L+#oJ-31*]*KRfPq"\].@oS7sa#B]A[oK4c`naA7+k8f^GTf=]SnFSj4o?-Rd
+.eHLmR+\4+"$\FfhjhuFSCd:$cSC*UAPO[=:2b&GcZYgqJ=gbnK;\%,l!'c9mkM^+
+;H69c<@n'5.fArt0CREfYM"s/6W0^2TJ\3)UHMU/:K<TM<U)qP.Sj)[)cit7<pCW*
+,)]l*pK++9=7@;^,)]QB-DYdE,aN:Keo:oEQo#S90%HY![PqBBRqo6">6<`\OAB*.
+[0Fu[3OQi*.ZVDVP92[>>;ar:p-W-(.:*bSWn"F^_q/61j'PWD?a`ZUj+CicPmWfa
+XY?S[2GGY:+(;2<@LE3G:qpJ>j]g0d%5p%+0]rn,k@?OX51&;pG"hP('3d9h5rMdT
+KGS4c7\t%"&GBb@e\.iucY#XgB9=?MlYC02-"rDp]!Y<H;)l&GO_KqF'f!=uKk":S
+DebbIC=-/#8+RJVTkfd&]+.q8QGjY;;\tA0D%V@r$dMS%pDE5N)+>U\,pdG_/ACiI
+^I:=^0s8:uH;t@a)lsJh2[(0uMlB+"WJ,D5$m\ou%ir+t=J\r:&a7-oT#='qEmac*
+/6*fO3lU4#>IR")Z51J,i*3Ze?LfMc7K%A0O!BUA,K9b-L&lJG9$4G:G@hK2=+"N_
+!I-07-DjpjVHG9jP:+@jc8VEAP)FWu@4;WYBoN!>blVXh\Bq_".h*2/D&Y"Wb\`]o
+/<)60B!6WgeC2k"QFH"dp[!Mfl[Mh&J$Sg!$ZW$+oX_@8/dnq81?!e*@+9E@Qb*_u
+GU,cU(!Ek96LUrl[TGt%AP@$B_H>UC\3H_t:iUb,:Uqrqfq/g35kUpo5dM>jm;h']
+:Gddtjk)N=9o"A?oeLfOF&WKf=B(FtBIt'.cpp3Y8;*HZm,jikO`+G]<4S8#!9tGQ
+2D73OH#D=V3-*>P2n_1qDWB0uLX_N?7[&\X1Ph/R_X0!=G?Cl8'RQ2QgQ/6QfI)F9
+r@L*jn;B9Eos;1nPIQ#%*1Y\]+Z\uTq?8tdks2T.&p`2We-/#1mWf]HM+C(j:&U]P
+oROLP47a3@&KQp<VqU4'S`@s_IHGoIUn)19h"/PSM>]a945M"WN>3jtVm509Pk7-;
+gUZq4OXcpo1koqmmN'VB-k5&o>ML`<Lp[;Vc&L?3,tJpFj5!'"h212kS_DSTMHU_N
+8b%RM'BHgpj"u";oeprjcfW`JT.RgH?/(-PS)o\NT#WD<?A<D^nW*ATjYX;5re>=8
+cfs7DT+npg5,6P^R/O>^h?:<Xl2=<T,Gtu9SaV!^jLq+P:7m_IT/?l0J/_6"')&:n
+:8pr_rk1-0f.cIH1OZ>pWUN+YnM1T3TQO*1V[NhrW79n7KI!iXKj6ImW$*BREIubh
+A@r8"`W;`/#g#[K+R0B.g^IT]"X'`Q5T0pC&66ag(@H`!CFBB3I3e9%FIslHbt^4J
+=![fHFOEnm@M/r3Oo_4^PojB.+HQ^1/,16?$35g&hgu.WRKNWS%UVBphkU$^9F2ht
+"9JKDiUS)Ll4;k-(]VJP!V-&<rX]'Y*oR#<iICg@fDOO9)utF0i;OhWJ,\ECrk\X5
+^Y05!rZDaGqLF%sJKQ)>B>a]9Is8*TnCIX]"RmMFhslK6r[etH5MQg:q#1!fGsB^)
+BDe&b%3gs$V%@GG~>
endstream
endobj
125 0 obj
<<
/ProcSet [/PDF /Text /ImageB ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
126 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im15
/Width 313
/Height 13
/BitsPerComponent 8
/ColorSpace 127 0 R
/Length 1782
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J-+XoYQ-3k!/*UgTeQhE*=`_hKRtoiLd2u>#:!*Me9!Yj%gU#c3@'n_*tO.%!RTbB
+>qQQj6QojABKHt@#Xfj*fKKHE"pq1/+Xi^T7hc9h;./<i,6A&PK#*:GG"!,X742OE
+ph22i"p9Fm0[O\m*jeNbe]U?m1`MI0!r"CaB'V44L?%im.#(5p&d^sn0cX(AILcYN
+6#_o>(_6k*"7pLIpc'&t"m4Bm<U<"S_Sn*pb=6hEKu;33EfDJbm5,.Q!a@@?:ad.i
+aELjec,/HTRK\;:?*I-P&d[j@,OSt7HdCgbH6_tu'<FRf&;Yb/&I<tR+:n:\n_j%j
+h!Y#e4cZKQMFAb;#ld,ee;cm<q$3[ei9U=)\cMSN+,Ah`h"SM!0T>ga!^MVd3Pk36
++:)?\O<]RU#^dZu@GC_Z5CpUjo"Q@'6l^tJn:q1dO?eWg]h\1M+M`Qob6YY?,REn[
+:lpA7^=!DOpkZ)Z`9@Nd1_0:E0!KpM]2%-^,QKO*/I%%E<*ntu@OR9ebS(E(0hW%I
+](j*^^]O?u;XB;,3puUS#srP4`>q4KPbBJ:Z@")]8eHuh(VQ%aAEqPV/(jL?e)^Z!
+d*d;T*l+r]_XIgT*@3pK:HQ623O-g()$ge=0hG9mPiY/0npCf`3O.+5;:6/2gDE$B
+jGrFb:lHba=;/K$9[4@%lX.rG-&h@TE$[kM=&YrZ4&XWKeO$jnHkgM7<n*%'daSG;
+.(`H$0lu'orASj]oMjdd>EaHop-',]Kf3/<]=1(5POrDY:NmO0Ib-59;+FlY9l0/h
+GARXPc5+[`D@#cE.>lC<h#gC*0I:dK>.$Np50>]^Z$k#[rJs$AoX&gJ:@OQ\=]Ml;
+#t<rT`;92Ci[)#Wd4\b"4k"U,*E6Q-5$qGfY7,,0A3$c-J6d2JfdJrs'o,ZPH7#>f
+eT:'dG/c@V5F4j.gaB."HD[`Ol8<];AC$_4_1Lef?.3q4<!<#]Dn;JCW(*4nPrr4;
+FaH/Qd>`:MjEXM65A@Z/c#qsuNN9)JfDYMs:cN$EP@V&P#<pVcPJ_?M3^#\toFodf
+U\:-F>GC\:7Fe-G!YC2:k4pk@dILPu_iaEdQ.Ome]!$*Cg9m7(STUB5[or/:5AQun
+T#WuthgL0Sanab2T8h9%>^<PNRokC.fGnepUhfho8,MV?c)Jt^QfGBo)C,/ZD?4aX
+L'm7<K"4lViOlV-&AjeJc?i>qm3f<?doDk;E":E]3TlRd<+9lX9$u9Q#<r?\.fOq%
+NUOXS@\TA1hf\A/Ot[^grS&"aF7,V54NKMCS_J-tE##ga7J;Z]qYsjJ\g0%b%!ioQ
+WcCcc-brddl(OmuDpE(O2s;UNU>lDf&+M):k,@jEbKGl@OY/Ck;QUhl4c@LgqaUm(
+"eU,-@u\=74Qp8U'GH"QZ(;Ck325SBgXg7<$+r26f-/[L2MZ7c#KJ2X"^JtQIh5?0
+/gm%s@.WrDnr6/WGM_X1"2'LfeUt\+\A70qDaKIj3l*2b^g%hUIZiDL41Ah0T*pu_
+Z:5#*f9Hgegq8Z-@TpH*=!Zhu*`#S;.)Uj&&1(9=P\tYH_KTUm+@OA@Z@Xm?krbi>
+_UjX$8VP:\:<HMaJWS#?mPiaa2<;,_I^<'sc6oLZUZ:']1Y%!$=TKm[9[A_qRWD9(
+)[.NkO+7jHB>YLi3b+\WPd;Z8:'l1_A<SHJ0&Ab82t9"0A,qH?g)Wrb'/(cWK:7sg
+k-;FY9A]UdK^aQR;]38,BIn^J<8La"fR!p5'M+*[7NOq-fc_LhplK6nM9X$;5X5~>
endstream
endobj
128 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im16
/Width 313
/Height 256
/BitsPerComponent 8
/ColorSpace 127 0 R
/Length 23233
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]%N!!RuUOEaG-(C:;]Toga.8fnRs6/sYT/93fV"p;]X:iJrS)M/(-n`Y(D
+>p'IW!J)qt===aeK-R&":ei5TM9Fh^W&uOe3gW_m<4M-G)[Va*l'4<+<aS^pegf&1
+AK!34L"%9PWru`Z7'oC_d#`37.k2!+TQ7"'1::&9KYbI>YV7sQ#Yo*-&9pfsG)9,\
+2;1J'LNfl<X>,Rg7kL'getj5mN>rmDK\*MU4#T,UP`060i;f69+;,+<TKqFaVKIla
+?7-m-^e?L&#R31P!,,1JK!`P_pK0g6-&I7d-ZHd?X/4Fk@e5#(,V))iicBVg$9Vpm
+Vm#`:1ak=S.Lc^QCKjM/VbKjV"+oK^fMF[;K<?%2$3>[/-B"VBieiT(N0E\t.tCfP
+XL1lX/>,&N\e#(Pk\:5)!QlW6N%Bj,^9X\u>82jE5d2:;K8?N7_S!-@R2*/\cnl8b
+JG;#5J]R.`OZG.r.*B",/0bTKnM;s98W^NY$F:([T-L7igd^QOnEWFpW_094#0!]p
+4V&ZcLb@ICX\4oP.DU=S%t^J,5Rt6$-m6=<lqA!"8JCZblD;q(nF=i)bbIV;PB3D]
+1b>(9$+t$O,dYGUWn*>bmt`n/,G:91[3;X,W!0A4BIXRGi34[>`QaQ6#u/UL&Hu!-
+m%5U]W_F@"`AO`X.]CKFJ>g;g>Y-W\nGjsFJsM35+J>BdcNKr?N#p3=8oR61K+K^T
+]qDBM-R1o1**/#lCYWIn;=;$>QdD#rjGheej2A--1onF:d[,S<&-AN'-3sXQUh1&t
+BZ.)&-X_=V&hi0n-idM=/^Fj11Lm>+-]3U8I^9`1R_2tNMa3T?ORg@9<45.(c/,Ij
+5RRW9J/rX+BI[Vj4;=p+O0,g/5aqhjc,SF%TTj"%URA0OMIR<JJ!!RRAl>bAeMJEG
+5-04,&$`LIZ)jZqdR'4-80l;o7*E!pr&F@g-k1`Xa=mog-n$(en#ocI-/mL1Gk#,:
+gr-KqgHr).[bDI:-#D<s[hjVaK5#'CO4&NffmHmCRt77E*McInlO!mbBl/V4,0dj1
+Y\He.*L*M)4p90E'Dbj9Ec+m'l[egZ)SY/;BJ7^%R3^`H2;om&$%l&4r!.g5b:`t'
+SSt'^ne<]R`FU$%DS13.HIF>"4aXKCK&DB'!\(\28WumL?mH&1TbnuRMud$4Ur^V7
+P>H:#@kBEM61R3=0_s3KAnV?>gp5!Fa][<"!i<GXJ-'9E*W*EcN$Okncn5:uTn\(d
+l)P]N[dN()b:AZ0#,8SX$r"jO<"N&G/uWCdhV5,Y!([?G1PT\0U;LgR8A2?[/dL$k
+[=r5Cmi@VCjcIsdMU9lH)e[t/(,HIa.CD+'W,P''EAW;U=]uEhrtZblloX-!#_=[!
+h[auQDre&NQ+!p<j#dp3jfU3nU'At@]#JNdpo^!>G1YP2Y6%8aq4Yk\`sbi&!`/4`
+)ot'=acj,\%Lp<>#mQcm.JPIY0[ZUo7eg9J<Zs_-#qccW?VDE<ENq*lP7T&H%u;'T
+W.F<X.1$EJiRj5@7#3qg'e>.lI=*fA7%X]R"""'?LkVMO4n==05_'@H`tT!a:cJX;
+!<Sc)L1<i3\ME;N]IFT';3Y!KLg#J-8kuLA!QibTN%ECj7mTKc-a3e?>0d6MC^U7L
+oLPN_?_0$M;Tb7UP`Mf-6]N<S4;E,Ag"7-g7Ec)j8(/QW+<,Y4]F'jC3d9g,OJ6i#
+MF2,k(Qaec9$7B':#i$9fTDdQoDR(bB8&qcCuk\9(tTJP&NpP&21_":.5BsgGfi>8
+.Eq2A_Y0lX'gZr*FV)GPW3h![jU7nTm$1E-VahM>;Im2X#bH@A,>KCiUMe1c<sbg*
+#ZB,PK]7KZ\'1UY63[NWF9qtkE(E[Eha5j[\l7lB7G)oaN/$-85kf[NjMM()A<[98
+9+'QL$+Z01FI[oD1g?LqW?B1JRE@"YAQ3)LZB[luPj1<@:IQ!SVU1hQGEVXKb/h(`
+I)7H@M?O!Y$RSR\%b(,A-1/\)1:H";(M`<N(X2_2aDf`2Z>adO18pKMpo7'oMY9W7
+)_JOnh^E]h$nSbC[cgnA?b-OefD;qJ2_D19=i/+;)QL(XH9S]&<4$2g&Hd^D"L9Ag
+]'K=k]0s*;=eha,@Cn^kN$Pjf)id2aJ/VU1L<u+VVI;a-"p+#+ff#8gIhuE#OLP'<
+iQHE3RIO`WcG!<"j.tS],pICb\.77]%RI$CirW=R$NXcB8IB2([b'@DW1.df-9JBS
+#>DM3o,b1+a\9X6aUUV`+H0BL8t_t03W\.cngc4S>\TpC<>`>SE8G*BEWR,CVTscK
+1YX0%dALF&?C"I%4fU8S+9<#Rc<Y0-REpdD514OcoF?K"DRk"+]"HY:$=p(]C$Zgd
+rajm;)_'jn!]/p.WU@ZeP3##'?q4juD9\EBd#&3:bu2*fRlt]0'"9bSf6Nb$3/EJ_
+:c@Z9Vd[d8DFt@&C+-]knC.nU]4YMFWj^Bb8Qo+c'1g1-M'g>!2jd(WpF:U-Y+bY(
+6]0]H(OV"AVIneb[s%lkU:,gt=bOUE04u;e,F%DB(BIoJ4rd(tNiikAJMX8X2`puQ
+T&fA#FO67'A1PQA.C8!p]nG=*.`+2<:O<?aK>N]pOXCANhY`D[+lp0YmEPdo>le>O
+PLkUG#=Kt<72Hq73a6i.JP:-8KG#M6Q^"O4jQjqZ)HdZOdYgoaI0ZTf(9JQ,R9K^-
+?jol]6.>"'5KXA$Kc"H\5KI$>?Ht71-1"cZX9-"9rX*po=32F&]JqR!p&EDRAr%M8
+atI^Mp^k*CODUaABEUKcE,$_B@=J3b.4:h1DIXR"L_PZCd#PZ-1qo9C'7"3$da.R+
+cDFVB6lHt!n,e9m\W3WC]F#O"56tHiGRUCSquAe#-:21!COT3;gG]kuKG5K#i0Bou
+eEm.DU;*PRQfXO;PW9>e`#e``<6hkt(]"-`0D_Ofn*X\u]!Ol]ks(6s]0!1bkfiPB
+Jg9X92<6#BAe=)6b^X,_2P;r0m.)D,!rf@41ZBVC%:5Gt[estFgWBejNmRgd0M:7G
+4mdR7#'0cRLA=(eF^Q0k8D&:4V#?%N6ng6pl/MKb.#T_ei$cfbc2'ec>-qa"Iu'n-
+5U^r_&lYZLd,PE7_GEWJAHbm'cnKd(/fMkBN*$&q,g9.p/X.Aqg2e_&q+G$p?n<s-
+-:?eH`hoor8J_K0m&ElF$Y(sp%e]l,$j+R>Lk7Yi6O]h:Z8h>WQqXOQ:9b3=h!Bj:
+pW6m+d!#_M'ZoaW%\e'=V-li5rhp.]>[T#]!($^@p*Ss/>\4Vh%0#l0ErV8)&e.=O
+$cMNFYl3Wh@-?l!Ut55#RR;s)"JSAAY&5`m3r+Q>_[[)p096u!JI\o3fT5n$Ap"[p
+WZZn@_lH1o^e2E.M\nk%oC&jM;4bud>8?B"lu8nZ-SlSe]Ql3R6:4u\BuYKIZ6s.r
+oB-<+n]q>/r;,p>L8?0jYpTjUrk>5Oen>bgA:/hro_-89*!Y4$E-1l1`6<4gWTd%`
+,oCc_8i-!n?.&41CSYF;QQBUj2Nb(KBFNn)kYUh"fIuZ+B:<g<37?,T>c#C`,8AO5
+1aX\EJ)m'!O0GY*F!8pW%WTRl!\VLSki2e&h!:bqUh0[Co,f.h35@;,,2/DnfdMTr
+kD^aeln9?!Nnf=ba$W1EUuLP!/3%:"ASU?\LQ9$h`.!E_<=oA];S7F6'^[?_-)m9<
+$RCg2R'8%[N?eW[VI"WPMN&_Y@,O$(M"K-adk;)X.BYlQ725Z_`eMj9O0Vq?@g+7"
+HnV_`Jc[&B!_>c%b:SXs.>Ma6L$:A_oeSB]1LcM@EL^uD%O"^cB5[4uP=dUj4ts2`
+M8o>`Z>2+,isSGB2Jg\Ldq]]X`,)A*%\t@8_['u%nIt9&1r>h19O]lR9b#(>,NsU;
+o))0OI-_M`1<.1Nn$smN.fAj:32TtB.1RfiZL+_'Uo<r/d85@t[kmPY4OG?MCdA19
+-s,Du5_;<M,N`7lP(Eg1LlA?iKF5OF^FV2F2_iE%&WlTZKQ6N%HZ(DZD]EhpBW$Rh
+81WW'_q[i$\h"B-N0E!aX[^\OQHBc3S-F/bc*!]Pkpti6#/Y<]6M(A$NgoZb#LEuN
+oV!]EogFohnd5FP6tVs'\:u<N29Y%]P'/m\.k?BkZP:LY;MsA<f-5;FI0m\:"sh`Z
+(o6:n+_(d9+=8tATXAmk44MSK0uG[:(4q]!+[ZUZE7QpV8?5<_rMKQZB^.d@%lMQ*
+Y>`n;mg^k%#V31Xq5'iQ!h):9#t@brDh:C]WRr^7Go;9(:\=`E'`'h4>Ub7=IR7N_
+@Kp[I#,`kY6j=./X/,>3]2XfJE0VkPm!DYe'#4(mB#ah9L(H=P,%6(D.HRpain4I3
+pbjIBlN/53oof>401RXL[4R;>[:jLC2D7FQ#pr"H<15;r_V.U#d`=ImPgi"H)d*m'
+fBbglo@YeVS2H=53++4hj?glTK!.^C@)?VZ!^U0?U7cZ(m+!msb_A%kAkDY(7C5r8
+@VGi,nR#qU,t$IIPk,JrO\G4+A#n9lZ^QWOoS:@U6$>.:,A<on"MEaf>*ZlbVK5s2
+%m6k!7aNuC-KShSMVLf^OQ-m'.eue8g*[-\>&INpE)d:D100#!60*Z#MI]?_Ma%uA
+gCW7$K1Q"mI07DRABQ_Nc4D0&Jqc'bZt^atLH89>maUB5Cpf?]Uq]us!*`EAQ9o,<
+[bd,*p5af)O6L1tLbig<_PQ`3]9^G^'ut779QE&p2[;>Y6SCk6=OiRJ+@^J6bR.Nd
+oUJ:/TCo<l'(gp$d:lFN7mopfKM#5KKg$rM:MYhV:eGU_UJ\D@Bm3NFaGc0[QPF:e
+G#pHGFotXNC+RR11c;C=pLYU>Z!E-tS4/>\;D:+CG1,T10TeSF=$\7VSOZa=/2mp#
+A"&\U1b>a&?PfFl_V.80&jBc"/-Sq\@Lim5:.'r6O%df#XIje/N`QDGE!j8tWj)5A
+i`;j+@Sb@^B<EG4;)2n6=sbM/6f93P1B*F4UUV%eXFT&d"sp(J6a*n5(O4WmE+86V
+5O%Neefd_]6n/V0da)*%G0,<F;+BfE9uc<Rml7Y1eTYg([%h$t.6``cN$VO<B$#kB
+_FY(&>.RcdXVch=NV]k*.RWU1o7c?,(Z$Yij9)Mi?MFjfd7i[J5`Hui->BR;5QGNK
+qGC?i]27f<P0UaorpM0.W:Y?PUg=/'QNZO`I.=f*C7lr+gj9,1->m_#_L0+#q[1@X
+<B"67jXa$J5Wha$N:9Fl.E7S0/8U$ZMPKYpV9W*)N%cJ6,C)/)o"aiqGXsRS^dTG]
+@oCFmKdq^Y0<```6K1+>rhju0HRZl8`*Afimek4Fs7AUD'`tD2-&;Z9aD'gdU)9+Q
+d3%LCK6!blUkAigY/TQhi8pipi&rGsq[>(LHuVut(UI]_]mnMR+pWHaLmU%$F&d8:
+$K<&Y-pN=c#Qd7V>_3_lNd`Isga=4&SE2u,MQnf#4BOU%bO5pR::+!'\o%b[5dmnN
+[&-[]`)^?S![N:OH3]3LR7PWT!T6$7ZRpftm^P;=Y*WmGR=U=bqgZV9[ZI@P3"C?S
+Ua@jiF0+:DWk"uofL.',7BBr#BK[25f6u-,I6"R*_m&Oj0qAK4Oh)`6"?t^_n8SZZ
+.ED.(mN+Q0,u;t4Va?P7/WrQ,e!4hq+E5.BnK-:rkH"1KmquNA'ne]5E(K)J5<6a#
+`jd:g81jW/7UR]6f2Sf2;U9N@`]"hG`![]*aBaH<Ya(D<LGP6YlDk42DA?>tL3$uf
+KRMl_rV:8Je[W1W<830JBlrnHTJ/@XW,1c.bQn\=e]kJCgij(?ogRMN"PF">)C`[H
+B/qCMB?nXi1rX&B]h@=RHL2c3c!dC(=sps:OD,eGl?ershedGF;k8^gP@QOPHNM^c
+.WXEA*bS/;;*,o6W6ur!-)UeO=lhmr.SA*#<IBN2INU$@%ZWEt5DVe+<nf=:>.lH9
+TaD9A9%C$$DR7)3f`=LR/DJ%2kMu[uduf4b<Pq.s`q`^f$]d'K<WhAk",fMT004fO
+6_sH[oKBa-q/(^pDSfH%,8h:bRr3"?S9r\i+<j%Iq#*)\?+F/Rc$[K>I.D48NfE7^
+PnJFjffq":-?sa0Oc,i%'L8QP[514sM_H`D#<.P,c*RLBTHXL`%A^j%-DL30OuQ(r
+co."^:r#/uq^Nc>DSFJIJq>a(FqQH(SG763G*2q'M85U-+ZaoHY7l:FbhGp]?31^d
+>%6>5U250$?KMZ_`;9FPUd?A5%g=UjbjS7[<V@TrC5>A_*K-,R,tPX%Tiq=ocik&@
+1O*XZ^WiUQ,MKfA5Tg2t.%MAUcUV*j.Y37dQC*:+:MaK"6Sf%QIbgo3f.Ak"C-Y8?
+RdAZE7]''4j7Y@.s.f_W<4YCE"KaW=RgUMN@R*+&cVi$'A;Go[eL7/l$"a4r0IJ7/
+2C?^r(?Wr^\!V:qM@WUYZT<+EYDjl3-+7`Il5@G"cYC@.+e0nQn1=S"57troodE`j
+J9J`fp3S4]EPcr$OBMaGP3lb=jJ_CdmI81L`&,)q@,aR9jk<Wf@7,j]j5LO&a5iq[
+H?HqqEN05Y<krn'VFA1s+J:Ut5&"lBXhM^BS1/+RJ22R#PbotTHS@@IgQUiR`_AhV
+2p%Lm]j0'TZHW;1G%X:#b?R!&N7<u47?S%l_`E;,84FLO"CQ2)aI1_cDTt>;5[Z>L
+TK%21D`JfT8"CPk";b7Z@*3)+4=\gI$^PI>Gg&uKj.$q!j</R3P5Zq8>Jn^g`@^Fu
+-nWL="!B^ui(OBe+^3RPQ,O(V8CBs-39@e"q4^7(Xu:/h\PL(8-Xr^9A_g5P?"AXH
+QDHlDSlVTY4$\:)\dKEPHt%\e1mIo4ZX7*:UO5>"2>L]B"Mf_i%;&j`W/5,0-Ebu'
+!WWZ8K#,7L"<J$]#QmB.\3rM%$\q*"&L`;P((:C9+i(m,2Du*PL-e0s+?UPQNrpMt
+pag#/(PG5S0aRt$+VT]b,-^;/<e2*U;!=-7bm#U/U=/$$i.,2\&s,CgnZW-O-!$P^
+A't/'$7/9;`^55q=@=taSjW]L0Q_%g)[?L4+R0Ck:)+9D_K'%S'%[E"bH+ZI%+ZU3
+UrR&1^lUN,%Lq3EdYYVK5oR[1lS8d3^2Yp!:EdO;CeeVsVJ>'DBs!:nXGasu!=O<f
+ml^j+[sJt2_c;KL9YnP1TKFN7eHcELcie4p%1!(aQ230c*Y8Y`_]a!'6mXD$p-Le-
+^?[]ph9Kn8\sFC&)6V/&;\)WEGAkh#W)O)pT)>IF9/tT]9l"jBWDG(#K`[89B!<IP
+Hm[gc8Wl">Ta5$O#QgZd1^l&d5XHDIamq49.kq[V!&C418.C3EZoI4li.)m>`Fsk_
+NBo*GK_7A3b\lHo0kt*]2Te,rZ(R0+0)[[7U;Fl*/IPII,EU(WT!;%l<=;*-)AEFN
+YMs#N6>6##(,^$SDS?47E\7t.E-aSA[gcS]OTFCU6jWqQWpGO"aBS(cXq;ADKVFUg
+%#"`+GWl*R;Ar;k^erQmT?7]BK$l2$UGRe.0D-8=64GJm8'EhaG8d`#dos^BlMH=o
+[>ilS#_TpC4Hq&K-r2^ona$D/Jfq']\c]`]2@IloZV7tj.F[S`Wj>(RS0^`o-N,tt
+RMa:Bb$m4Y_alqdXNN*:.c.-Zm!Q^[/X9"]bL])rHWBJ20+9%]qo+"/Z3=jBV_/<5
+OTU,Y6N-rc!)/bC;?_.JK)g]SW%%ekk<c"GPLtO?E6\NP61hB$$e$kQWg1gfRgg[a
+BWTC82tV,gnR+4!:p+0+_g</p(N,3<?eHWTbb==m4X6m;j+Q(=bi2_17GsP#INed%
+79dGA\eNkM5l`;AJmaZ]c%8#h7tkh7@h5Q]Ys9\F72&roFCHpM2UY(!:$A(C0E\A?
+.`dp<!i?koN8-JCAr"(WN4QNRB[1_7aBl=(@*o"*GTT3QT^@?.Z>.ms`iS*u":p(!
+cmomoBKk6E]_u^4X#`9pE>1G,5'*F+/L><d\b@@H;*>;FlE9\lRt5al*g[fr>b2S-
+$mYMp'/&rpoJ&9IT^/rl2Ti*A:>m##c3XMh:Iu+k]7cCSBjD'UJL^*(.4#9+q&fgY
+Dk9T_<6n"P]QNF[*qGkEXSC:.F;@.JOXN8%^kNs63rpHIp-Pi\2\H*U"5c[L.AWp4
+3lDftOh_V3^f1YlK#6:ZbA_/e9nX1t'M=0jQ:o1;gHVQco[g.o=(ioM)mW^[e3X?i
+9GRLRZ6VcjaY+rq4KFTCU?`dsRp.5DO+H4AZCO8l+L(@(2r^,mPR%jt7i:MW"+J^,
+.JS_[mJf,/9Y)*5nl4"1d6*S8@j4k45RrcE0%X8mif\/9A2NN``n'mJ.uTSu`T8\h
+2'?'qjT3/)%tN+)\k9Q"/h*4r7CZq2^rR8m?ohDu_`1qu1W3;A%%tT6r1P(QHU#f$
+Ik-4PR@,meQ\LnA7B%42MDToZn>M&?':aK=OgnSJ[Q_go$rN,=,&PI2c5fBP,7l:B
+6cG]-JRbQUM9HKc#mGMu`CbiSEUn3>,_i8.\5MEnG]H8r`NQ%4&Q<cK0+nPO!@HSl
+hm%;NlrjQ+_H`^.S,n/a>l5;o7^PFV3!"Ou76r>*EEs\)"/'rY*Ksm)dC][0"EIbU
+-0VM`7+Is3-!a=/L@C*7a+7eAbg6$e5K]o8D[/tIQ?`8iP4;j/cYei2=%7&TP>kB^
+A\8(P3ag%B86go?2AfgC"_3&s"(7&t*?ZJ@%kSSfl8_9fC(WIgnZAs6Ee?n4FEQd6
+14RH'Rb,Y)%UdF!!eo.pP(M!6bc*-Lb8&F6fS^@X5spkZ3#2PA-B6*Wg80bIY+W!;
+"b<@mXWVMi.'q(Mg_2\oZ^"Nm3J/+h*3*[L:;BZfWm.!/KX_2F6d$.&/5)ZG4"<^W
+Y;1)odUYm+J349kn6?+IN&UkebqbQAU?'NX'`upM%Y=pu,fki(Ue..C)kq6p#`>*"
+nc=Wdq4TTEeOI&&[Q0]J2d)VJq&sC8do%Z)7?'%c\+UNP!O*[R8piu+$3U[!H][;A
+\Iq^]8.,Hk3!NCQe06.jX#5"j6]L-!4YA>L8Ght->]).5'+GnO33!+3W"QsXI-M7u
+57`n@$m;32Kt3U5'B'U""$fNjJT*GkLjN<".b6H4j5fG)WQ'[#N!b`B,"n`rU8eU^
+T<h`S=<cQf;`=a;@iX0N("6<73;/O:69o]Z"8Qk02!gJH:QURB!K_I1_QqCg"`%=%
+al%-;.@f^fW(Hdd^g%2o+=%5ug5D@f_1\*,'dao2_T^=ia@gbuO5gF\e>DC).ZbK=
+8O6+I6nPfsZu4A%_J:=9i!Mgue;XmmQG,aRm"'[8!!)Bp,3A+/\g+0O?BGmI/YM,:
+X;I/S.FN`]Q6$[(Ch>0)nW8h$q;DU9WO6'2OfHT'WfkI$>oLkHV9J9FFj$nLD+M%p
+M&Y/.lLc\&!!7[Q%Y;tV#!gfR,4qXBJ@F"F$,bA:7A(#51Q8GnWD_@7VT:hs=guX%
+FB$J\mUiGcZ*up\^?+2:=AB`S&]A6tosN#<dL-sff$$asV(EY!/?U.`+Ts3D%tQJg
+#(Xf!1$1nr<nbPidCJ'm^ebLW<*%QcXtF<4?66YBZ$cA[#pnh+Q5rr069.HOPPhT#
+*aWL^d@#-Rk4$O+\3@HK]-t@/S?d_H6jQ'I*n[8RW&9B*.4(8bCh>d<:;AIa_%eLM
+VjAcK-D/P0UWI'e4PcK=OdhDDAA0Z,ZgQ!1akUX>F!u'`<3pKRb/0-Q$<9IT*/j'h
+BGL[mJ.r%?Ldf+d4>tZB%^tQ(/>4d#"!B-,cJft,-f*,/Uo*jd1BN:=O^'MS_p:2_
+8Nrm[UW)eM^!-XQFU<&+=bLY#=U*O198`NtLtq@4(KS5bGSpP_A/,-bZa*T8QT'-p
+X@V**OQ*"FB7PT:Tu#-S+b_U+o:+b8WKA5D$[4`glkIij56H'l&UqIHMSDdDM)bGW
+:oU0[THX-4J=I@Xq8k<fjT+98!GE8ZP@Ub(-AX*7[D:=Kdc(UdUHSGn%',j4/!1-_
+SXK=aRK4)36`[Oiq[`;C5hT5$q\MNnq'`io3K`O(.,MXo'gYb</NE7:.bolcB:U.^
+!T<!o\b)/cWIP!hN+k0Ug/rm@&.[*oNt]TnB`&RdT:W$X\_6t4MJ#!h$'dk5_O3>G
+)b#[[)jR\AQF]9q32\1:+W"X[06!Zq0sgqj(BMX;6YPaQd"]6'7k5`KJB/@RBFB@L
+BVhF[%C?0aHS.,dqjB.s#VjT'gbTQN(E=CaS^P6UbR]\B[\&^c/F'Hu3CjO6fF$j+
+5-U)0S#26FC]Nr1JP[![e%gcboT]^+%('1S3!fT<f`=VO0O]qkCZ^kD9,bC]+TgJq
+.4h,*O-RgFYtM8JXC3+U:lmL`U!'d$!/1\'IDRuo+;rKEi8Parq4(l^.0p7\d>*7>
+mYJI"`Q9JWWTb+Y%tK0>JOg3Z0FOgenW(\WOL]BJRR/4J-j[&K%WKe8b&4LFl&B\m
+Y41Vk3>N^s:`uik$u4p`ada0pDB_+)7#:(7M!:5AihM'9'H6I3bZbkB!&YtE($GpR
+kS!s#%tQNBW=r\MUf&%,Ql\QM,f)&?P"Zr#,+)Mc)Q]I4Hk*#ull40<&/'H1=Z8+p
+PSC4-PnZ68UG4tmL&citO\+,gO9W:`ijp7g-&I/bWB?e&kl>r<JIi.h-kmNBZ&!\7
+%RZ2t3=)27+YZ3,T-4rmO\H`Lp_,Ip4Xg463RNh4@3`s.bNS-(=j*6`/;W94'q>kp
+WiE"t'd0LN!48pQK1#u4$(i@:NBFf\(mb6=f`;?dJM7[dN,t+`\slT8.L\Vbq'm[f
+\eJtgOFg5p$Z<*5TI[[''(!9T)g`bkTZcXj7\KUJ.3C^!?-G?@7#YIu)H["G(U!fI
+,qu;?+H%,U$]/ikJ=+$$+:cA0rX!X;a2HoKlAZXe!m>$4Yct8]&GE<&Ium'j)lgNC
+dQG>+^6]+aU23C3lS4Q+Rj8)$9B!Fm3"l=<AH9sYPK9;S4DQ0.=UmPq%c@gfW2c<1
+Z,q&#QoXE=_=n]rJt60f(?FaJ.d)aVCC7Hi$KSuf]\SFM!BdY1SnXN9>([:um_Rfb
+cF=F:,1?P&*B:ruTR1gEJl2T4rW'_B_n*/e]*o:iBLZbjX.f_[XD<X/9:;e&Vi`nM
+d)ECm'N3>&7PmQ;Bh,3::.1:Z'M2.?I5i$+3BtRl&X.l=b%d:Th@M*EVdL/M\I_Np
+dB@i'eR;rEdHW^nHPSb;#dbMnEXb4<%RK%T7DhA/9XLVo1F='0c23JBnU8:EP,I"%
+3NGi_+h<-Mn.kd<%8p<R)*<h>L)WYuJ=m2KkRIVCMO#rI$_kEo]\L%(J!W!@N1g57
+D&FM/NXNfu`)Q>sZ6N?(?pnJ[)%lobWHOlsX?.Pb[=$uKP:=s/NNu(YOSB7/"OO$H
+YLl+:^UORN:^qs.5Ckol(,=4D\caCs=\lWB<09Za"Q#;](63]aY"A\c.0:5H\/m4W
+`[YX_@i;0eb`rNj&4&ER.*B;i;[nhJ[$)H=QjY2rM^-W$SrqD.dZf]X&qM8Ze1%j,
+d"S6ndC[3GLr"KUi6ilSMB7S<N!-dDA0I,l*MQN&&*g4J4Vsi\S.2gf.]K$L!Q1cB
+Xtg-XTIK\/j+<BX;b1+g>JeSn0GXY!=#?qAV(oA*=O<^@Jh)hgf!>(H=J%("StqMj
+QDCUD)N;daSkp_H,+1)-n<Ys$7&%n<P5-`3ZC.-u#*.=C!:Zlr$a-nM9o<F'JRVK-
+?jmg$&P$N&[%0IQ=f9c:V%V1C'@kNp1<>GqIFr[[dct_I3@<(3fe*R;'^1W.;&'ol
+%3.KLX/*N[fEM>Ul%&C];sIbYNJi<p$ipVKJ=%;iO:)'pW<eCg]tj<+TuAOaT;6KZ
+c&)uDat+1#T%OMW:OV+@!2Nsi@]9b.M-M%,6`l2JrtOl7QeBZN\Os9c<"DPfTM$rH
+I)c6>(]_&b'9EZS!4muBa,]e;>nZlQBdk?%\'`[Y'$IEsV7WkoRL7d)i;1:jBatGW
+m#&dO-JOpt3Ei[$DHon<0mTk.Q,O"ppq4`]*k2E)n.5VF$itS`?nu[@&c"tnE$Pg@
+*c]NSd[psfRh[_%7#e,keXp6oAR_,G:,'5[kq\1(C.B57*`9!e[D9POU(L$A2^<th
+af$-DB7OA"JNsqMYSMd4$%WX"WHahq$Ul#Y#rVml8Ua1fEA0kM'+F-o/'?]qmR+u@
+7(Hb,W>#@a8:_;mKdN7n&"YOe?-/jTQjeEJ#_;EC.E@rUH[oc<!Dj>XQkY*4knXHd
+S[]&XgU8e-'hS=2RCV9!AD!XSS?Ibj?:&;E-,/LB`g!]YMjhT.9-7XdO0R[cMif!_
+C&K47OGN+g0U^1hCiVi"klClX!<rY1ds4Xn$38#WYX+gej,hoUTXcX+3;O06i1e`$
+HKVq0[ADCZ,/k,`0,hn>%GB@'bYfE;R$ErhPpj,e7YN_)*gma,$E/rE4+a/cs0fkm
+J=5#a`-PGQh+:IA7EDmK`DPc;0rt#4bNi=rBc9:\Bu.jr$W33H=Jm,pNg]T(&1g&s
+m6$H;!N.uV;impn:_(hIgT<O3(c]`E:l>Srdc"V1do*_8o5gt<g#o_o0lANrd17Y(
+W8amO(siJm^"NtCdgPGqe(p]K%[,R&Z9^5Q,,gJ$daJVd%m>`%%ak'J`=fQk,K$JC
+A@[m<L.A'1OjAcZmFJBf:%ZP$OoW>OM(9JERF)sN#7?I"0!thE!PC83UJG=5+]Y>G
+VKnT',d6h:JBB%3Oo2,O@iU0PlD,sq<AG]*[MofI6A"&c\`%6T?Je/%+j7EHm6LaL
+UB&`o.r)AdPf+,p"sJVO0]3D64u3idB5fXgT(3f-Um3"<OM<@m/U4>.@C]T&j4:Gn
+1s-r]%UCp>7Rb#&WUb8^0#Y@kn$c]L,:2;&o7AV$L)*h2N,#7#RjKtJW(2I;%p:%f
+eq.2&=>JjTQsqBB@`66BP,4n_P*s6+HEfKRf#`2]`hQ`H@`skWKah)dP3(@47O]/C
+b0&^!JA;Jj8.,Fff;_="[B5:Z;]Jt^&[4gW<Xp@[Gq,VOj:TEWo9<u$O9MrI$,2XP
+]rGX/JSl:GT&/C_OI@7eoepJT/jl/=.PCLqQV*soZiK"nPEK$ucI.7<an*?M*6[o]
+oc"7Pgf1Y;/(3-2!=V#%4<m"fTlHJ>_&WrkIAat*.(_=/ED4s/$4U[c(XVHZRYP`O
+(.O7olFrK]0e&u4Aa(lWJIiFoh$S\Ddt"JG.p7+(B1%fma/`\fo?&oX[q')8<b[^U
+#k5Db_?u?EBo)<n&_!.]o(TETo<\H/f;rV^Yb&Is0/^Zko6PYiek%k\BNs@dG'hON
+GRsm#h#T2@JH=Al8.AVVSm3bSRp,fOnEu>5N-(YDUTfN30TV0Am_!C`Vt"kHG=;LC
+Wt-3ii:XMQ'tN>8$!'1(%%teY<n`CKDsq*7pcJrTp6APcB=2/]!8nIj+;4cND:`@r
++nNu7R7al^/$t*@JD^n;r<kZ`k]2L0Gpp4mE:=_@`YHjl1)5TO;*hS0A(CT.g-PcP
+;G8nMNM(;,U$?!FJUHS<1o^F`cc9Xp?=+Grr#42s!;EBo.G3-1d<?_@`SRH]^J'1Q
+%PXA28SNXeq]:SD3&iS8qb<%kopkN&7I:D82t2l;jhSI@I,Kr/+ECi&FU"&VVAlk*
+?/?@n7A7N\JdOmVR:lf>`Dq:f%Y31=T9/j]Ga4MDj>"ZNkef!Sd%#&sDkPITh@SbS
+U@/B:3Z3)oN%2t)-UWc1a1qojU>?,fJTM72+c+\&c:#A/UZ[pu/Q+MA1Ml]?T"^qd
+"pb3**"N;WJjE5#E%Vb3KL,[KJ3G(a#"4$i5Zfp$%0luCTYOf15nF#fAC>`cO8ofK
+"/5:9!)>g!$O"B++J;+?0V1k2+Wt_V4"HTujq.T0JpA4=dm;q2J3H"'!(?+Y\K)lB
+/H>l>;35HD*XdQ%W&:$Fp=!<48Yd-u26)^X\m92O3VA-YG.N;-+WuRl.MiJF_P&)c
+>UMh!K>7K.]Lk+EYYhABg3lT@G,#,U2J`!*:HG]^0EIiJC>3lmKI)pted"VlV!R9l
+OG,qG;N&u%fhCaq6Rn1MX.^sI)N+^BD0*.dNTs@Xe_N7[cGeOd-'6tAh3gGl-fYVj
+"/.ue#U.9_:pKQC^D9rlK'!+85c@n29'g1W.V]1VJdE&LK*"<T-Cq>t1<eSui0oOu
+[])S9cCeQq+K?Xn],muZ:()`2-n$jfj"h5k0"`f.,,j1pcNC>q05goXha;CRBY:>F
+a=[sU5gV3>JY7lWM*e0#oSS68J0G;O5`d>/K*Y[!)D"LB*pFs6\u<gRCfi>C^Pu]U
+^E]D5!"(FiZkCp*+Cd%"Xm$bO(q;,COPD0t1(+U:DQ7rX7B&u]ejg<VLE*pio\e#s
+oN`1#aT0g#%g-4T4:HhI_MZM\lUW!&<'[!BquX[>&=,g7M^Io2Z[sJI0lr!^^+p/?
+3XUG%<4%h6Od\W5,#!;C=t;3<p?Se6W[V:8.L^@,b-?PEn%uD@L@<?L4Q*$]e1DAp
+,V1>d$Nf7B4:ZumE^$=%adehX0Cj/aK%pjt!>/GZqi_)4OMV4P4"S/p$j&]Bs(S:U
+djYV[&prQh3Qm>Q$E)GGM%7%3KN.:bDi0U&g:"Bfi]FU![K&3$Cct/62u"GaTLsGI
+%*/f+_]'gWC[B6RNcgCukYl&,3D_1<2)kWPRk\hGXM?85K!.=lgG.02P*375/-2Qt
+XhCorgGAE!a/]X'3>#XqVF6[#euPc3mAaL:S_QkCa%4'tQnAjM@.hhBe<4#^PH2<s
+g8nC4PiT>f/uuRGC\V'gWM8X?2*<[NTH4Dk^rRi3Js+<W#Vk7pf5/CWW]P"IR+78&
+<jhe)ZKP+h/Y/j9@f$X4E=RUlgRGUa,O\9%.LcL<n5'[K.B:UY6X2Mel?01[U8_qO
+L+11o2<mm2U@!O>k!Lkd\d7ocJ1FlF?j$_2odOX+aCTO!1"&LsSD;LQKr&@Yj8,?Q
+iqPiWJD34e(@0Fj_KMt:QE>4el<-Iq!e=MbJhU.1*a2VhXAP9'#:`A;+Tqjs@)JU;
+-O!J$'j:aV%%<t18"hpKCoFI`(gnb?%/]KC5X5XAeR5COWNeXA\Lod.We\c=(0T"g
+]9FP!hHNioAER3cQ\D5*>KaldKT)^i_Nb8Lg5ndS2'mf=4pXF;*[^,&N0]_ApIZ#m
+@)Ut4!Q<KR=R(W&Uq-5M"GjO^$h+7+KFOH)aVY#@""]T(gCQ+[QAC>30^(MDTn?V%
+MfTklYqd[SoqNbkF@qG:"XCB`6rT2*a+.$<E>PPH``Sqm0?-:W6$JqG?+LA3a4R:9
+#Ef:NFF@ZA_#]b<#6Z64%g/J`%@H9SUR9e,-?'soPgVO_&i^J<.6YMN=%I)L$fG];
+#a.kjlr%BL<[)RlHo;]$C5PCP+H%j#/[@]CeGT)N`rX\b"L)E/Je2//eN97B$:b@E
+&H\V'!i$'&YfVRn,Y]fp.>;leS&)unmUa9Z6Hho%h$[TOr:ELb58g#kBkuu2]eNVW
+ac!-,9,,%Ja2BB]S<Jo(C!=q!Uo_a3WJl?^Bo>V_ZBC`o\R4Q7%]DetSJ!L%UPDt[
+5rWt,?a9Bqb0k!o&j[A6"Jo!j'`'LaEdGO#s#[FjXd9`$8?!i&G-/ljQUF;3@Co]F
+KpnSWJgdZpomq"'%:GS,P:rNmiM@hX-C.7&>gu1A>;"^s+l\6L@[W>Zi(+BS6nq+;
+>)oeOepY"6Y4a-Gs%*K,h_mC.<SmX]@h)A!(K,lPc'j8Qm!OCV]*CMEPp)F;\t0[*
+$?,&!`rV9q-m#mA=Qi?'NeC)c--"reCfK\XMfm<qn4!V4ZBQ[%Nh.6@R(cDY,@H%,
+KGXq4SE'!.,8Lc(=)3b>$Dj@am:j0qU69R+!M?od]'e@"G@3tHN+4dd$kQDsHH>Y,
+M@C!r>S`N3f>/Ree%h.Yng$jn\.AbXPRml\giOV5"2QRlj;aNYk>`'05=m"Y.%5=8
+'AFI;X"j[u?iWqK_e(34TjjgL*;SU,[BWD$"Z?[r82?#K!Phrr)O:H&=M?>,96CWs
+$ok!0bFMtX^r.C\(^8=F.0P0@]=.i47FED_==fRZPk**mT26@+P&D>BVCGU1J^dch
+7^Emt5^k%O.BII-7h`88;")(p[*Z!+YdYRKE=%=PpuM4gbH/hR*QqGpGmpaSc:RMq
+;Z]3d'*2K+H0_VR1;q/576(F?dMW=GV$)G6rBl;+U@*SkD.`!i0Nsab;6*3,O--0V
+[ntenEc[jHkF6%[5^4,<F53ldC9KZ:'S1*JjtmeCH&5?,%Kc^@%5eiSpb5u!!h_+#
+Q2HO.eaYVmkWl'iHpF)8=`8PiI[HCdcqd3s3FJa[0NKt`P7l$q@Bd3njV,4R.3^L_
+5W.X(V+GJIm4:=[--`9L3)3'-&[=T'$j".C$@o)[!nsakO[BK*5c5VTC,l\P6dqM]
+MTKaJoVoH>04QnCC+<K<Jf?LnD+LW2P/orHXc.CfEWJqMqJZlrXDG^lG$U^kKd:7e
+n4W>dpEg_Ge,]P(X8q09H,+M1';M6oV87[S'U*SkLW;cR80'QN1R&Sq\:%06e91!9
+JguHmD:W_7ZfgJ+\n"$'X@gRM8KIBO/"ETnibCh$D+.`^s1n8+O"8"^%3=plhZ.U-
+!oQ$T!C0s"JN+q;rWdJ9F$>,&'QSN_XpecA=$CNAdZ9\M,>U^@;rGLYnt/O/(\7Z`
+mQn^mT,+,fq&S/<MF/rC2(X'2Y_Y9l"s@3O_6?`c#6<Ye!aoQj+TPpl6,5&T,@#hs
+QoO=KOj+1#@Oel_K'\8%D'acVM\OkPmW(lc3l3o[!&c\Y;S[)gXGaAs/:O9Eb1pN8
+.>@9?K&#Sn#k9K9Fist\WqoQ0C9=-]8-?S2i%-144p8Z#!e=MYTIc*T7aab:5%;+a
+YTb=0`]R`BIa.R_`lptbreuFu-ta`Dj.IhIbi[n_-UO7gUDu&lHDYL":lP[(jap:3
+_$oPmW@u>1L5%#$gjfGk>i^J<@X(3Je;XGh#66R_5V<(kFIsaBea9q-VGpm_](54?
+>ip(o8jkKi!,/=,n]mRNNZ+D(^*grj2^qWP#7*bunpq9+Q,8XVX@ElfQ8HH"nZB*k
+.^2Z5/G?k5g$D&D@a%@cC]m'a!an8aK),LZbQ7c$^geL@L2p_gb2+fZDbH>5696nm
+`af3>"E=u5!rfVV;Da=.!i2]qUE#jRbc[!h\F:KjE)'KPesU2>dj@'YAI(:AS<D.\
+]u$S!!(mD`:'=Gc(8fk9!&@860K&:4Ue@(*_ZkOkk^[+m$c[S+.gF;;B[25SVBil1
+$:\&%/l`!sNfEiY%MoQ?^CE\5OeU,rNrhqk+H`Z%!%d:+U]+7[:cGOVP0IA;!(7"+
+>3;le-X[r3Mk\QBe5<7[!=N0Y#1@i$-F$+OT7`[;bnVCRAqqeQR:6Ld@fAQf^5U;K
+%8KYbE^intQK$=i$1"g798HE`DDBRK94B(n5Tg/KL'3$'"oq=O%(mlt2MQ4m-3e]c
+BR3tS;Ph5>(rmCl6RZM]koJh%.SE[JKJG`h9R9#TCBYdoL5.;`Whj^_+J`9Kn6%O[
+1A\p*/OV?mnmkN?$?SNU"5lWOTJGN-8h!(69l;H@`$iVmn:%C%Aa(I(Aj.N8Yc&a(
+ap.('KmFqqO<qaJ!Q4Im8*V[`@g!.%\IVRkbgb^uZB\'%"HtPL#>Ajk>Ui,?jJn.i
+5TFk-@_MsPA7IYNj#!99X<qV2f@$&r@_s6WmPG-:1<153U@'P7dNmg/LbHt$i&h,j
+fE3DH3[Q@AXckG*Q6XWn)Q/UA+u^P*Kb`ZM)?S"Pj1[7"JgmQ,-iuG$F;SkKQn.1<
+*R^%46D@us>U"c1Mj.<uWQ,1K4tY.naJ([`@W\*T7KhXA"HNsBmf9l)0"YnZ]/)3>
+6lKjJFW@:@j/F(j_I,pY7fH5'I6]QA"fuU94Glbq"E"dEE1C)bC//QCQkA!cP58`^
+!%lDE-"B%=^chllehms0UoI[?Y*19pEa_m+0-u9-;f<AK7hehuCu]b:jb>b4"<_8P
+jrcSb'Ym9E3-D>SKo+6K0ull41nk)>1kR>BDH+@6Xs^+5N3/aDbPG2tCENbOIhEr"
+jgut^Nj"]RX(II2F=MJ;i'S08dEMrEFO41n-t&f5#)1Rq-;^]2N7`2rA99N(PsQcQ
+RPi"^8;C/9k`J3kVOD-/6:T$Z@h<)UMbgN)Fj7-o,(Wi2&n;J%;'IA6mmLA3,Vl>#
+W8]9S5T2ce(Dl["ERe$*1mLBRW_&rsOCDD<7lnb+1i'M=E[sa2%jL]UfS=HqBZW;O
+1`\8:68<Ws"I,670>c$c8O>bG,g_Q9Kc:],55dgV8A\@=a)F;NCKgjJTWQ^u0!'09
+O=@5#>0u-.oMW[sH3@VF"9:d6#+0%<P/e2f'Wd'@NAuD;_,-*Y7:`d(jgA[\8hk?,
+#jU\K@c2G?2enIIr8aP7">DPq5]>,-an%'$O;NhQrW/ZH25!JCQC+AsFB^YDdVNt5
+lN((?-n4^q7^j",jGnls*E?]",A&(lUn')h;C1Fd7J9@e`=soaE_6l3!^JdITLK)-
+7!&P136.b"j*t5?BIkcD"(4(j^c68RFtnpE32DF>2KWNoK4e_&P?#E>/N?;q"@4GS
+B%=n0@pVaHUe,4U+q+nOd2nO[(1lS%9.2FdTKiON3X)0_"^j_#d/<#0;!/71:nrV#
+U)Y?'PoBgO1@4F2.YC\'E\TIC9$UCF<7$QLg,C[WH"mmV;A>cJ4O/XQ8Tk;7JfS0\
+7nen&Aedif^cZ\28-Rph#!c8o+A`2k9E[`.p^IO7C!)I6)%!-s<g1J`9Rgs_q`PZ!
+=,o?foV@"JhEHUccE7^oj:q)9Q!_s=Fd->nn@V7.,[YQFN%!'$7V_)D/d+FQ#/F[O
+i*6Fn>Qk*iULgI6N<DX9Qq@LI.VM#gBC+1/desXdA0S^AQFB_7G;LfS6KoE*cV[kt
+;&g9L5]5%t9E?U6Xa_l:DPSC+THjXj63:4b"Mdh:i(aFu7mV%pEDd);a%e=";1YR^
+=enY9_o`(S31";gC?"Z&2]QWH\t;p6q5ZEiFP\C#:q^B,988n67)qVD`J-+92QZ[F
+iWo\F?j'ue9?k-\c.N(E%ad5j.]OIg!Y@rM`$DLI0d&PlV(Bs1GDOO?1jMo%q#:K_
+Wj<o2Q:'L[M(_&LH#dfreG6p,,(qX!)GD8)"JB]<^fFAZK_D=hLD)mq"da4=Eg'I_
+.YXN_05L`GQOh!R+kR'.E</EcO]M:s*>?(r-s/AphG!$")k\fu/^9I0:RfS>-[5hH
+^bu4GbQZpL#G>f8?rq&m37#K5mri;n'"C+]LhC4V/9.n!V`m^-:2@7X0!=;<QP3<@
+m@mS);^^G]id/9.P9Alk9iCC,L6G5Rq(JHe+bLO31?&DO+9R.%#N1IE^jH@%?j2'Q
+"/?4u!g&qrmiiTR2+Jo?,'5$%0$hNL3qPJp>)5U^*7GgfZ*1icC#Z&!F#f6SWUVUB
+7%Ybl&0SG<5\L(,2Ue57qLRc-X/)>hTJmD^3X+Gj#QTG]TPOft=p.T+-q/r+_eqXo
+k%[H\2mAulCRtYo63QN*VH7em/[d^[$U]*HY\N-eFtHb]^j7NF9o[/E@OCft9J]:t
+X*Q"UHSUZ!7?=l"2ddO*^et9-*!9SJ"lNbm+BSe4;+SbX7(/kAk0,)&?a!.>qfGpa
+Z4^+kn-392"k^0c>B0h?C5bOV!o"ZZ)GPGkj#s:QbP;B(Y+/@A''A4^[F\lJ=^ei3
+0_HsI/EuT<^aY/650De@G,B*44"*"F,r*C.9k#fGaXj.M1'*VQ55QZ-TKiY<@KsV[
+#(U4g+BerA<Wnc7-SnNF5VZg'OO`U1FdR/1Wpjl)nhrjgro<WM75\f`!oKKG6#4hI
+C0[6a\=5`3#,$DL?pgWL_)i>2Uh&+&eQuf[7UQ<^AgEU"@m3L51'KpF"aE-5?s3`L
+=bI^I^tO])%5G*Hmi_e]8RaoP3PB1f!l!Z!QuD1o:iU:`7ENR6S0fq[UlYY.:'\RZ
+"oq"$m<g_b!%QtjSCF$'-<,IaP4kWp#8<P3#%J1Z1';F`8&.Y!1kl,<5kT_,F3b_F
+m5)AmQ8%K)JJq%S6;FV6`6[?_8#=ZFn?tfc9A-X;X%(lAl-%(S/d6UrV>reXlWSCb
+?+L\Y4=lFXj[s83Fj*O^QN/IW2OCP=0Lui7rc`5^KCt^SqN$#f:n2,BYD-V:T7Aq(
+ZBi'RObP_9+p0*9J[,(*#tpO\iEajR?,SddX_!XQ7K_R/g?R3c#7a:8qJCmI;LN[c
+gH[FsPrZ!J!kZSZ^iBY[C'FP/"<^/9Jf$]3&_gd,?!0ecK.]*mj.1u;rJf":].Lo&
+BPt[STfnam3j>umIul`GR^2^"pe8bIL'#\/8ocjQSkc03R>_6*K,8J/TK9`<OcR1R
+0Ao_45^3R-!XR_;#Cq%'J7\t86j*n=XfU$@CcsI6X]J*-OPU&=j?o2k0M[NZ9EOG3
+@Zgg/rWCPY8fcC0Mi5DHNM=ta@Y['16HI8b"\M+\*H&6T5>:2ET'#uR,.VFjJ4p.I
+FpNVS#QT;Y?ucK;Bmb]);T,Nh_\up\b#Q1k:d?i)%K=]]&Z3;fqONZcULdOm+p7mN
+"s?_FGKe)"=&m"&o"DZPjsU9`_mBh9J1)B%;]8iVco*.)bh`r\j-$+O3!Auq"b9h]
++BflhnS#^A///Bn+i(<I(]]=YiP;[:9I^Y\KE:#hChOXnO$k6+)&/)N%M";ITqK2'
+-kckU+eSg?7S,@r:#kh*SCVI;RY7S(^o0(>.is`Uit3gj+[1\a6*]-d3dD<u""I;C
+XR`PTSHD4[nHa@p'a_k>&]rjB)&ij6UTt6>6lljFb<eK[J,gI+#(l.UJ;?te)[ced
+6,8:e4rb1@KOQY9GW$:k<i0:%`R[%HO4Nq9&86;L)%;59[tq`sAYI^hCJk_'=>sk&
+NJKsLR#Ej:#jc&DN;gO5D5^Dn>95(of+GuX11?igYU=(B_fdnnQp`$`R"GH+E92m>
+*Xi0r2435C2BS.f_kFd-A1-=C"n`huco+6I#QdSLrgYuD>"/`!i1gJ^_.e4%ej-7p
+*h5P,l>-t6!6?2nL4P.W%)FWt6FOERUPQ@0d6pgl5]D<kRjREV+:A9IPGS[5W4LpG
+WU&m8L*?rPG45TB+ANW)!AH\FJdC(DVue*o6komAEXEKa9RN'4V8/`>#eN?BW5&Gt
+gre]TnS5'/KFpQQX>oO(>li5clE`ED&d#)4,G=7$'X$BX3X[aC)Z`&YXs3r\`@aK`
+!]CZ"_?GL`N,FP>Nk0=p.Nib<#GrrE]Ea'T&5!T=i?1>UYHeN7#6M^A<#::3TO<@I
+_(*G66g8_T&Ah0T0*!42CaV'85]BC)]\nHbX"(+Xh.\Q"D5V)A<eC+$K)o(r&-C0E
+,gT;odu-W5o6a$/f^<2h1*]HpNi90=HaPe''K?p:"#6H.PqPB(Ta?:#GV0L0@8-Va
+"Yr&8&ql4216t4I$KS8i%]elQUGn_SFuZ1#N"?)3gj^?kX6&H.ATs]I&l0t93iIQ/
+QpMjK(Ar'-a7S5$QqgU9K-8S/KI!+kX$cWAj3\SVEp1SrgBE/3rL3^`F%$cJ![+W?
+%,\k^!YII%C/tZcfpeG3!`#[?!$a!p:QM]187ibD_(s(=;sS=WREbPDiG$T'1?>I=
+lAutmL#Jt0`e/Mt,lT&SK&5Y#FBhbSj84oV]/;*&2U4a57\bLoP^4S[mDuoLcasI?
+2N4KukTl-OTV*bB!m<@H->7,-[dF1F-C;9=@":KZf"jU6hV#Uj-E_<OUR.]_/->SM
+J`,Z-aX&(=CtS-6]Nsj+5^t;nFdf`&lEhLq-4'?ok0MUK0G<"<GY2^s#D#m@8q=O#
+EpgoT,Bhf,#d=_>Kf+)eK:&Ij3O:1GBg&XiN^J>Y)/O&`Q'as9ZUr?:ILf;m+B*qe
+Q=pg3!-lX0pP)5aZ)iUman1rUm\QKo/P^$$rfJKW!ZtP\C<\L"6Zp7;#`oiW+E;l3
+FM:;l"9;S;i!UPaGhYK@!+U"b[?9V`F^BqS,:1mf^2mQ2&#g:l-gcL<2WSkERdu+[
+/g88H/uP)r%l>u9"djC.?:f2i,];<q7Y3m4?6e`n:UN!s@X;^Z%!ml[\[b+PAITE#
+`BN3fdi*scIn\3(G>VWC8pITi,pO:J7h!.`"&OU,8M>4d>jK4f*d8AD@5"^j58"MJ
+!SGT+G<fR2!TV=:,&eMc5\-.k"1Y9=!E^M\11L>V/L1UAHUZ"A*?8^K,u!sb.qNG)
+*JEk-;(3WQjE>8kKRkaP=q!"dOb-4agjNVTW\lEj)jd>2:Q&m!@WCYTcStANQXC8H
+L8$3@7a>So4MV$VD##a23ec*67Kl&Q'7sUaA6Tll?cJYnd&.@t^oPb!A81$MdRNb;
+758I0VMVl_5>90$(a[:dF\^qlMr[P?7n-op16NR5@Sq,)de299f398Yq+WIgAhD33
+T]VA:6$V<A%=uYn1*L];+`[>[JD`4Q<"0]J!/(r9:em:l:acJ=Ks@%'rA2jo3^M[T
+#U;kF4Q7S#,VH4B,1t'bC>1@0Ea6sUpp+'J1N74\L^%!/?<jIP>%bgqNM!N8;eD`?
+Naus_.&-k9B,]tdFQrQ$R>tC##U'<4PR4!/$;c^:VN]M=(BO-MHr\s&2,TmqWWN8f
+%]";Mj?Us,93ak!luuAD;X7>p*9#_t=[&ilaUuBX6Y_j',Yr<V3E-uLOD,Q;Ao]gM
+.[,6""f$alZ4+@1QG4pG27E3>X%tbe5&R4`;3/<PPN&c.Sb$eY2B'FT<iI,mnt&.U
+:@)7!AM.1uhSF#KPWbt-LQ'4[MfoMk[7Ur]01:+T93/'p6E`&1F^/fp8k$Ilf/-n]
+5B)K@%*rY7]V*-_]Eko6hV6cHS/)r1ok(=8eiS+USk;a)MTOdHV'9O^8BEG4j"?'b
+N1"hAKb8d`A3'"J+m]fT\M02m<SC5#_T+"h:DZRodlNV=-c]fgm1n+WRFAl8>q8d;
+cB_54<--R0l0]2uh!^3oP1Rg=k+]4u*J`LY9$PT"*_Ek7:1T4p=ls,Nl7DYX.Pjl@
+jOZuVPPV$lB!WsJ+$lQ#[nj?2m`JIkEpD)]_$K,id>Xgs?<,UL#`a.8Xn_n^"(:%,
+(/%K76WtIg`3lpp_OPoXm,j)*Z#;88\FjbpDG?6<o2ACLF/5jMMs@`FMWKT(2]:lY
+e#W+InO9m]E>Ku1\9:p5f@iN*kjj(n*iA3Pr%eFn][mI4:BP[+[k_e(fhT%1(sadH
+NTnHUe2'#Hh/C&gEdgm.GulNXS@=i*raF#rQS[cof:-i1ER&j]46N..T6(!^84X!~>
endstream
endobj
130 0 obj
<<
/Length 4284
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f/$F(sHHPTrM]V)iY$==PS"s7%4V)'?Ta^A1ej]U6P28jDPC$6ct1'
+Bl$UF1`8[co;U*qAXAgF7e:;Dk\)frm<2E"]#8#;=KV9@Bc)Rl&/`[S;_Y"X2&$iO
+K4>dpb&075bU2?mJECF\@Lg8;NZcJb0UjV+"/2OIDU=1lVbI(,?mleJ9;OsSr*h:3
+dHe,[.?Mtdek"#_1T@])+N`__U62=f2k:Xqo)(*f)!3I(D#pJ!<pnIK38RDC!D'S0
+1)OIR@KRd<k[?<;2kg^5*)L6.#S!XE3OmKu%^0P23jS0Mg^l->qZ>-'DC^7d%DcF;
+_l?@61)(5d]<^/&Npt!XL7thb)hef)g+nY=B]_%V.h`U7L<_S=&.D7"f!2<W39^`0
+W>OM#__/i>%Qg][bV:b%&DZi2@A%0E4`PjYedbQQD&b+M/*O8oOeD9q8T&3<kHi'i
+8iI1EEl,VNUO_Jf1]q2n429fCOMHk9Rd..F?ta?m#(aQT(:NVQOKVCfR-$16j,i":
++n2i*+O?`ts$4qQ.^8@p0*o`I4J@jQ)R]$9ju/4ZHJ\KsUT5H,\e=nY3&L&j`@nW8
+rFe)To0h+m88'-)M74mDSejNj]`bGd&%k)tfLS/_O<[')P`[mj6\Qg\j,iO\[PiY>
+))h.56VOs'ge.o>:nn(K12F8X[ghfTJ2,?q>oGPYl`3p\=B6U[L'BI1*#f,@`=Dd*
+5tGW$4;_rWke)!%$Ya!VC,3\^#Yg\U3u8P?(C'u6CNNCgBNc5V_15o3+\Lb,YV%(%
+aQSX_dn\F>j%.l`6I(='q8`=F3AT4^[Z?qk:cdkQ$;j(20Y1pmShPg"E9]??;4-2r
+"9Z7qf8LrtXq3C?_S7t;_jb.D_lD9u'F\d#=;J,>dd4G""*GDLXh,2c'P`1%Uc`@0
+S!0Yi26>bT['chuGW!ql&eqbDTZY<c"!cMT85@S?WEO%W7#>)<Y"0*.fIp8T,N1nF
+4:F7Ij>l-8\e0mqBaQ3Z2X6B?(aCN94dBT0L'sBX@RE>aB!5FWikIPP(,eIdjNfZr
+@iX6@[4Dst$d).Y*om+FMp<4E+i@V/o+o^"3fNCO_DjMrKYR?7e*c5e$M.%E.91Ts
+^t@;d`!C1V.)UY"K!pRe<&/B;<Yi]<g.M-3$)&Uo*lELF;5r"PKmY<P&<[]XGXMm(
+e:N?5<")';;[X!R(Vf$g$6bT<"i1<c">I=m6$$]D/Z>lh-mE<^S'WJHOs.&kk3YNg
+[fc`9e#&=Z634<+#m'8s33tqbK7IYEBE7QBK(@V7J_amRZl$$1[Vk)O[W+guLB@gj
+EY@V`N90!&"#inWSZ0M_+ZWO,<$Ze-TPk;Gq&gG2^kmoji-WSVa/Jd[G+\\N/(.*O
+_D#F,!Rs>#9[kqSjF3oO4,!rSojs:4":U0nJ0TSp)O*Yj<S`3a+m]6dOs25NLr_E=
+Emu(o$#iDWo8@4_?o&$ah&+LlNbKuj+<re9WL)SB%=kr;QWPY^g_44=XUY'6o<b2/
+A4)Yt&/Q%RCfHDB7W8Zb*$nb)$5@56B!Rgp)A(=<O.;&J:1uZnG;b$%,^;)MIAG#n
+K.BK=Jd-bQ97n!f%;;2\Aa^TQ'XaVf8<FEnbci!_Bk^!CKc?@)Gs"8Hm.j=pO>9]$
+"%dQK\B5@BA$!Oj:?g]RbHjhMkWK<\3.hDZ.:\E<[/-/I@/7^/&u!?\L]R__7fgKJ
+#6Z"ba6D:de.fFs!6/=X)F=]BBhnq5DH[Xl8Q[D!/X:*<Wmu'(>*Kb-2YCO>'^Ej*
+a?^>+%'m:ldP;:_KjotFSbe[`iYrO/!%hTd':CaF:P^Nu>&"VHK:6nn.IuaY6oaq^
+Y^4qh#^.jEKJGkJ:MF1WEXs;&45,cl&&I"6=p.$41AZGoXV``"Ec;d7ofRKe-t9_>
+2$huQQksU!0"P*IVR"/E)XR.3-LsV<g/(nf=`?(,m(1t+$..u)lS)O%"eQmSL)Akh
+S@8ga.SnFM-\5rD1]cb0XTru\b'fmYP86(kLt;-n_fH/s@/Dc;ig:@Q-TB'GYrsnF
+)2l(H?FDa;)T+%/ijp[+m<&H&<Toe[@ErjA]maB]VJAsnYYV^t9cKtjGFSe-RRaI+
+L3<2o_eho"D6>*Wo%;;!*[V0/)@i>r5+D_'qKB"ZL+s?sIDJQ=1;T\`R"4UUiN^"1
+Yu4'.1]IOXW%"%*TU3(<3/bV_Bat[3b(hk?L_%UH%-cL+.d<O7WL7rp1*T-gk^LL:
+)]0`/2*b*XD@A'bg:`:/qP(Jh)1uOA5WW1GX#PTVh8okFH7jA<2)A9!cDd-=/0LR<
+Amh(dFY9YhbLBT,KCW7f?OOge1XdJ[>/PXpkK*TGKN*jf-G'`1b!W&=/:La)1M$o1
+6mf::N0:1u%ER>1-'7AQU*4JgUqA_L`.<`l7U8A!;"a%,"et$m/I*^bKbJ!XW,tlF
+AW'Y0Ya.J][d#ooBrmg<V!o=!g0MAG`#K@e'0@(&.%A&X!1Ys2'a$H0fahX!RXGSO
+=9(c4@DmnhTKkk1_,=)Ph3(gWR_i#Jei5oO/%(s@8R`Q8Qkc;m&:edf9?7PcJOc4#
+:t*P&P^]_AM$^D<&OndJAile6,EjgG8:sbN-uF^STR]9C_W_R>J2a9nEt/Hi#nJ9Z
+Q"2Xkc4,*PD![]C[umO_8(Ah8mECM.Z@:olHZ*SGa63a&%aWsXpN%K+Nahb?$/c[c
+N:,(e#)+`MaV'#6l0P%JoX7L3aS7Cp+gfOH!/MT0DaYcI=3gUp*SqZX>P6i#cM([Q
+iI-c6mN+I)q]=);I"/m)?,sp/++`/2pP3:.e%0bKn*W9hT(7<Q[X8#ZniJeJp4Wae
+Sote$ro_Gl+)IX!DUmE)&!8(9'?^q5KZkGiRWm]DX3t^&6cgk#Zf+`LJqZbV+pO+R
+=SYb,@mFN(Dm](s"Sg<H!72;E&(^8(g)t,ql_9XCX4/BWP+CTG-HPKQ"uHO`MZAeD
+#&m!-YEo8d:AiI3"`Mmdn0B:+./ljBkG\=]0KfBsT]A?V3NCTtE!lot;#G5\#Z+VJ
+n;RV?f`jb^#)^b4,!-"o3'@U2-d[+4DW(_[OCZ^mplM`]O3\4&If_8P!cXU4![a:0
+FT0<i0^u(CYcam#;$\l:r(t':Y9O(E!in#q"q\raO=LblqQ1=].4/='%pF+Z-M[^r
+nhCjQOEu/o-oUO3nda%Zn7)@D![6K5'<]^c7uf)qq?Be.kt-Q/05g#/)XRmIqJd]/
+nP9a8T_;5e&eN;$A1&&;e>%fP#@[o1W\"u`<;'1A&ccVY;2Y2>/>T"o(=<-hd5iE8
+8g*E;#16$d,-'O=T,;J$#;NUlVi;WMAJ3D0)::;[&Nm-%_KI&A)X>\?nUsK:[RLE"
+(t$5B&M!N0h]B$Y#&qs'LR(C@E;rPIs.UMS`0qo*;]\]hQr.-+iiaL[`ue2**7=\.
+dK&H&9!>Kk(XEft%iZB`o_*2Op91"]0;A0d'(F9=r:3td:RM#4"T7_h!A<I(c:I+D
+-DM&S+RWQ7-*462@-B4X%F0kZ:7VO),j4Tioe)-nTQ21:6t%<%-t(3]:8S.)=SXU0
+U5oU-TKq]/M(0)d,Yt0d;'@7DALl)7Y_Gq);IVt3\K<K"/T5h;0/*V!jHcSgku*o@
+!XSF2QLsa<ol<8LdO-ZQk:SO;/C(^ZZ:c^2j=3s0n1rqmP1;.HB'f+AqNCe.Z;E@J
+5r6r#/TW?8ZT)3q9)UN_)fo.<YL*3Q]/8T@2H&TbnbWac0^5D:n8I^t!_WL>hZo5Z
+1QS.fZJRN7jZ*u%"L&C*1=nGrruCS.XUQDQ_R0J8>6Br^"47W(cqOX`h`1+2/2NOo
+1W;AK5<L`p8^NebPBSHSYck9R$Gm#S1Ks:3nMV'N1t2($&:ZV0h]h<4YY_#WC;gOA
+5n$]45>\mJ0YKdDB0jnN/$l'!nXhkIG;mn'5-X!0nF8^sO[M#$6o4d0E;;iM#<,Ti
+,SUf5,*b--Id';C0(Qb#KI/L\*dH1M0eTq*Z7SM&c<Pss>_7qs9d(XRD*uZpo;IF6
+d2;1kT1<@o8oj/g5]K9C0g6:T>_46+&OSWoi?6Ua512VN[%Qi,=%sC-o5o@jo[ubi
+ED+TL8FU[i<6li^UJ;FsmSY/N'_N5`q+FL66Sip]Jt5ZP;*e)C.MU>NP?UbSF%nA@
+;K5tXnXq(J%m`%?7Ud#d'&,6?>k>969(KSjP/0QX;)p:d1G_fQo3h.+!W~>
endstream
endobj
131 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F10 22 0 R
/F12 34 0 R
>>
/XObject <<
/Im15 126 0 R
/Im16 128 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS8 127 0 R
>>
>>
endobj
127 0 obj
[/Indexed /DeviceRGB 255 132 0 R]
endobj
132 0 obj
<<
/Filter /ASCII85Decode
/Length 977
>>
stream
+s8W*!!!!9)!!!$!!.P"K!!!#6^V9c`^V9b55<mB9bkq;7p\4FRoCMG>n*B<*kND$g
j5]%ShqQo?f@SX'e'lXhccaMTa2c6<_o'4&^:Lne[^NWMZEgX9Y,\M%VP^5bU8"6N
Ssl+:QBmi"P*1icNf&^OL5(G7JqAE!I<g*`F`hhHEH,i4D/!]uAS#F]@:<GI?!1<5
<E3$r;,L%^9h@oJ77BX25s[Uq4?,;[1c.$C0JG%//1;np,U=WX+<VXD*#KM0'GM5m
&.f6Y$j[+E"9\kObl?MTh3j\TWiE(2AsmjeG;D$e<E3'!s31MeREV(2s(4&Cs-Wl!
!&L$T1M16es8N(err<&T1B<iebl=*!s(5le1G`YCB$?YCAsm8!mdBMebfm]2]829!
6psEe+sR'es8N#sr;?KhqYL$`q=jXXp%A"LoCMPDo'l/<mdBN1mHs6*lfmZukND$j
k2tacjPo1YiSibQhr!8Gh:p]=g=k95f\"d+f%&=$e'ldndF$:dcd'h]bfn;Rb0%iJ
aiDHB`Pog6_o'@._SEt&^:q=p]tM%i]=GJ_\$riT[^NQM['I!CZ*CR;YHP(1XfJM'
WiE(tW2QSjVPU,cUSFTXTqS*NT:VXGS=H+<R[TY4R?s8,Q'IVuPEV/mP)tceNfK-Z
NK&jSMi!:ILPLY>L5(A7KS"f-JUrB%It)lpI=$<fH?sm^G^+CTG'.qMF)uDBEH,o8
Df0H1Ci!p&C2.HsBkM'kAS#F_@q/tW@UNSO?=$rD?!UZ=>?P*3='&I(<`W1!<)QUl
;,L1d:JX\Z9hS,P8kM]H84Z3>7R]a76UO4,5s[_"5<_7p4?P_e3]]8]3B&lU2)R6I
1G^dA1,(C9/hSb./M/J'.k)nr-RU8g-70u`,U+EV+X&!N+!2LD*?,q:)B'M2(`4#(
()7Q!',)#k&J5Na%h9'Z$k*OO$47(G#mU\?"U,&3!s8T+!WW3#~>
endstream
endobj
133 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im17
/Width 313
/Height 40
/BitsPerComponent 8
/ColorSpace 127 0 R
/Length 11407
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J-X":+S^1L,_<c6_@]>C?7d"QL19\'W)P,ZM$0PtBY\(/(Q4!Ad4gq[-'F,'iaFg>
+:am(bKbCXUOAI/7M'2pT'_W(^'8ZkP&[:VD4WY(<6X_e]"="tJ`kuePXB-/PMBr=4
+*9]X2Sd:"DJH2,q-5__46fHDqG!$iW8#('KN'\Tu$3m86btqD'&`@4unN9u_-PD6S
+;kY`^9IguL7:O)@XAbG-MhU[eTZC[S(!+@gJQ5rRQ^0r@3kN<=8MV!<EfsiRNlqkJ
+M^qaUBW+kD'oW<b;+=Yd.c4e@@d:1f=bd_bjs!)*QL0595db&P<hk[&(\D:UGWlmC
+0UiB%(L\_B5mDsCiF4M1N'8?X#t<MZL3b&+KhWLX!2>$r65Ba+BLINiMZ^JnKE3>B
+]JdRr^=Bi3@Yc"Z!SfdX#-V](%]eR0IMrF,MED_@aWbKb6Od7+S?(T[;PFB"n9uGa
+_:X,V#/P>+K*<F":`9N=9@sfPM(G*\UJ7b?&Hi@^9GF4Y\6S!uBY/6.L.poTj/V?I
+</i0i$LI$[cb.hmV;YTumK=rR=I,c+&k^WcDL*uN5lkanM_^*'Y0o/l&l+*CE*<W!
+^<_0X&B_;W8e?ZLHP2UANE[&8-L!;':;,+k^p#t"XJkfu;.*iNU/><+)7)VR@f;$3
+87!1/m(4b)-:ll(P-HMe`:kn#'BZnaaZ*NCLEYB5*JWOLR"5A*=D/ZYCY3G@U26Q)
+Xt3*W;[GY(-$C8`+jbHT.PU@,(;@j$;B(?g0O>I9Pb]K7[^/pT"k)?3g9.1W&6c-F
+D9F[N5h10&-mYb<7rg:9g3D@=ljA-Yde4S=&Z&Bp<K5734t`M<l&4'X/Et+hSMg3&
+\GSQ&_@5"s=]eNHXD*8Z7g(XQ7up"-U'eOrDcO#oKic?6WJ6At4VbqeOCHLi@BaPd
+=+OajC9uLn,6J,V(gQ:5.FPh'e#41:'@qAXI;"BZ[Q/./63as!YI=4:f`au_Rf"\7
+3dS&IG)b9!L[0J4)hl*Rg(=L7oKX4HG"j+P\rE^bPV4OJ2OUp'X%\9l\6Wp3,OI7!
+/#M]_#/I9VA/=T&f/cZmG.>/aSg=+`L_Qr6*Q[Y,YZeQji%".*hEK8\mA2u6W(Ic4
+WA%bBE2ch%]292B'VEHd-`^fmr4m%eLQM:R]S<hA<0<muG\FeFTlW'@>*q8Rj\-Sg
+A\bJXpb#?s*L.iOWg1DV3!Y!8Bbp2UUC4RQ#JglN'Mr]._8CO&8Sro-^cK7;6C0%B
+C`8QOi/ZTK3<j-'pB%""r'A.@;s?!/P;#sI9Y$uTM@ABo^g%:JYUt@LV#rB4@0"[=
+I92HA(RYn$Eug[)-#]2$Q\%2<!Dt6m7`"JSFYHqC;[XoVpsKmb>3JOt(F@#@oU$98
+FUPJBBnR$-Z]is@M_Qsi^rVmp;[ekHOcqK[R%0@lKL41^![1(H%>%D[%FOb7.*^jU
+.s&QtQKU11lZ<u:J5g..;RpVG<_gT+="-]QVN$<5&02E,%Dh<k#D!"#6$P/S65W6B
+EekV9E,,_F^bo.]R7\gQ7a$]%&-kj!++sWE&5.O8#9_B_V,1-H?^eGe7o5PF&6Puh
+U9u77=I6t%_@483+u1:c'I&n+O2:lTJ5V87")r4AkF!#F+IM$f&e%MA"S;n/=H4?i
+<rG_`ZT2dVL`)ucfF^Cl1^7cXRM&)%:C5Dmo.bQC#&jg.WOdpSL_k\a4N&(niAdn)
+haT%'@f\&("9<FX.53`D+H-A?/$aU]0OWNU/>?@a^_P0"^^ZG\24fpR/\6S#%#G=C
+15c$+SIes5OQ\n75klH(a=`:ang"IHjoUYj<4El=Pm)j%JUu`=:`-,Y"i/J)QOnHS
+62c<=JEhW9PhZX_,lS!u[%Nl_gdkm?*]%DC<ub^*er`q1Wsdu(cgYmND#3'nZsd77
+U-*7OWrS2Kr0FB.Np+snT3#Xg&d#S+X$L/+C7s+)X*S)?N/G5P&/B,ZJ6PqQ=^3TL
+lB;n.8n_#e,6bOFOHE):7F$]B,toLCX?\fO;eb]u@"RkKn4!d/]\9TO<l'F1[o!1M
+a"NEuUUDqC1uFZ[R4@bR[?Yf'+8+1gA@0O3i-#Y4pdCS46kbY]/-r:#e::AI_CNVA
+9\*c'"HF4[=TE7K61^2,ec_`M5ZF5(EZB+-fGPXlM^T3";_Mi+l9C(%Y#$heUP5O^
+eHChm:^p)P`JiE3P8^;)\/bZ`#`Km2#&36_82a2DZd;#u<o\6.2ajh3RTS)k8J55_
+VNHbJ[3p5/=^?g&lJ#l,m[t!<5<74)`g/Ul9kiE34k/g/J[,VZ!K>`c/%DCK_YXIN
+6JFpB.^-UdoX%4E3du#WYKFuFDG?6oLh=GbURA1p67rTMTWA];ikFJSq0bVdF</.>
+BLg0"fUKh7QNFbn&)6;7YMfVn"/'+1_#:[U(W>H9]8g&up;sfY.]cBfBjTV@&rN@"
+<7][iE_])m1?ilpRAM#5)Id]bkoc%T8+_A"JKoFEop1e@i^9%6#\BeheJX/W<In%P
+9V@s48OP+.np/1X"][mNe,oc.ZO9k?'Z7S?Inp(6)?[cmnf>n7[9sh1IZkhK>H-j8
+YPp*X3`2la18d@61.Ii^=uhe2bXTqdY]:li+kR6C$L>*6"9A-57!&46D#I7K-"mj@
+^c6\W+=SOI>0aV(H4YZ>5R:d/W0FMaHGLFNRVTPS0V^QT.SQC68?T%d]jH[4iVce\
+]rK\m^B+lZ#>!*UcG-pJArNtr@)/FtOWu]#cN:LCO=6+jUfe=k%u<YFUVY6#Wiem_
+nSKP+;k2$;@r>h*;Lij&<DpaA/"TfhBpmmko1iV<;2>??F:B=68"XMCp]R8,!HG+:
+jQn!M<Y+VH9Q4R>CY1>*;sTV;=:2,AD$,kFC;uEGXKN"n5d09;)7aKZ+%ff-,Ko0n
+`.doT_!i/<LtR^J$'#Pu+@HIn'Hi&]WN/ig,R,d6">>KPQs-J[<UFL'.r-Ik960(\
+k#Q/[#,QKY5[LGr#%&KhpdbaaCh0OG?n4RT]AQ!XWM6HW7]pA<gWAGk9&r8F=>XM=
+@K9:ka\;/Yr6lq&.jW=qil4om(.-+=4mU<>!j5C5\0\5d2!'NY-YOgfLeS<S"+W93
+TJ?UCncQ%RDMR?Y`SOo)VCF2T.&GiTWs8YofI4f"6d,,hkb]V:%PWUX5,.C_X)ah!
+pmEO""McWRkkYO]]J;!\.V6>D_H\IgFou,7[\?eN$daU0GR*YOX^HffJ7<^&>_VBP
+s63@e_Ba[9?>KhKft^o]K03r6js0261WlHmb-4rcns+s:E+3]KmZ'L35d*O58H;iq
+_mEk]F>IJ<gOcRSK79T^#UTUb1ulO[K[PfGE%iO&%KJ3hl:a+SQoo#C0gud&i*I_T
+"=h<<--*M>i(>-=P.ZVI"/%=MJ3%/tA="da#Z'0CljsF,mR+&1Rml&2"k[,)5Y$KV
+Y\AjZ.QT'bApM7<3<SsZa7QL,BETG5ib8/nb+LD>p?Q:gE+<KCZ,#S`FGIqtR&/Ne
+5]FXAE,]?d"FsZ]TPu](N$N%D?R<@8.mDW=fU1o^WWoJ'n$WDcLt0oRd3MQM-G4h<
+/-KW]!mAYJ`,8UlHj,65P/b^7M9=r_cFG2)3%D:2j.;8U#\BdP,j2ZuKiY,A^uC"7
+-c0%[@sgNd-@a%RF+@dVm%c>p@Y_5*]B[c_^bECY7b5Xgf8n_cafI*;G*oQM,jc/n
+OJGC"FpG,r`hT+ei_&%EgD;)T#&]$b^gs7fM?BN!Suj:7,^)Q\@PQe1"(4"h+?hbo
+0a-b)Y\WkaA_L=<@c)e,"bj[TBhHiFPZ?`:^JZ\gO(t&CpmFi_Pn4@q,<SC.**S.*
+>An9MVRf=A(.^ap""d,Q$Z\$p7UBO\h^5F-k12NR"uN'[-3GkDj)Tr#FKRu%;$?sW
+,>'8X(.([69r-Kri_UrD1q,.7+pIK*mdQaA(,7-9""oKKlKeV'/d"b^-pVGtlH%H8
+G-D*qKEP+,.[6N]MF57?6A"&H9AMK4iZp(^V.4U>kO8[BqW+;V#g:;k.m,:soI]\j
+WWtLBm7Rb=Crt^(/MZ<9+Fkm31^-EF:9%Qk7NaGON`KbhD["dGZ<UW:p0n;i!<POU
+?sK*qp6^a2a0<@[$7J_E:-EN'/7;Z3l&Ji"<&J/B+sh+1VM'`ggbN[MWItUT7(5bY
+@\]c71+9psEF@,0%1dtM-GsAOUHA_"]R[mV\q`8%6P(aL=AoAK"+VsgMGXZ;3!0AB
+#)kgO1!H**V_mREea&67BiL]sKO(G0`%)%BE@A,)'So-gBZ$-=kOsQOBE^)()ur)M
+EcXdNVQ_1m04T%PPp3m(r'+qVjC!!\<Ch.J\ch(c'l3H1CNuuE!+#4G$aJLql')Bf
+D"pCp78#'0-6f#b@6=j\s+t2?V$&d;%Ks-A"31dA1dn\.BEdCA"OA-]`P<thE\kW3
+8ZJU5`)IpPML[.?J'GP]jq^c^3:B\2or:gji(ZCe,@#=iCgnamU\_Ld-FUcr"i=NB
+.Sp2r"p8`g"+W31@XnZuIOPp9?3E;nosBBh0Sma"5nn)I-,=<A2*oR\+ld*+OfY7n
+/68R*6`L%g`((+@:i^S[/PJFp$$^o/4pA&]5`!cg0-G]/igD*5j[VA7p)lT!=Q<DQ
+?3T4R!f\KUV#*M3"Ke1pV86MrU`r=p9D2mi.bp6-e;OH&-;hFg_H_j?hJY-CA<d9R
+_N^[i\nZ(-KMQjCp1.4Gl>,L%,[t:7&9obELM8=2,GQ>_@N\\8oNQ'8<s+2A[EpmC
+IXEi:"5kn3!%S?eN&BO4Q\fggJu8VX]Lub%.k'I'!^K#Y!9<Ru8I%4)iscgPHpB;n
+##,7.5[QdB9Y9L:eZ:reDpmdOU^'7O<fh&C0+D.,T4LON?-&Vfll*M:3!>(1n8PLG
+k[#\G#Y<;:1MtVgW/=4UCi!bc!C19rk-[1GX^A/MN!DiFL(#iu30umNZ%@X3nM7jg
+qTshU#;hn4jrfHCQD$rFiC/3BJkBDX%%tc0UsCkY[t%-YO&eV0"_@\,K75*n8<,r4
+A:QcE0u*om8-;\I/3mrV!oD@:n5gimD8NA6Ups!pIYgZt,*iB>_Pk!Nf^rkc(WZGh
+i,2&c!XJd4+LY'glH4#;NX)57e1Eum,1r!-:os^U,5*lrUjU)c-3krk9LM@Ji(RuQ
+BEa"<6KEDZ#ros`IQU0h_dY5RLlP.W63h/\,Vi&bM2Z6dikOm/1i0^#?oTJ!;?mFL
+/V5Gs(S'MVAT8#2D#eOUl<s,IN_=&d&kGMf.G-?X'Q7AD;?@.1ie0(@Aps,ieaA18
+@g^"\`[jH-.\KN==E"?[C'27*!gf]j!+_O+F)M+&=-1EGjQ+*d8k-o3BM,^0,PHQM
+[<TPV:nskD#3dI(`[LuKpJX0V'F"Xe-GDlA#VXWk&(1]UE&U$N#f%]2PNZdIE;DhC
+#NkV=?t=>_P2_JbCh</d<"MR^o/Ebh=9>o^,Ik95"J-`LdR6@KK)6mRIXnCsncBjm
+i_0IT/d)/NEsY>X`q"[LCjmbo^+e-),3$;d[.49u[`A<2nOS-Z5'BGZ<2/d_/&:ha
+3^P'#X6]DFb-;@I#WB7r0a"BcjpJ9L1'8EQ#f&J&^bH-FIKVAXC6p>tfn;:p#)FJ1
+-4iRR<JH@'As4%@D'Ma=6;fLRJq.Z:Rmk$nJ2=D`O+PNi"r2>&8Zq>&U,%6a"$e=;
+W/QV2\?*m375Qo-ZqQS!^b__\L^b[eWoD";KOm_g=NMC,1M/+UZ]ZRnIq1QP9e,mk
+^</cO"A`4o?qOaHE\l`^"idDEPU;RoGqSt./r/bKAQg>GP,_!eWg)*hll)d063D/F
+$'6ku$Yj,V5+?0jD.L:^68Vf]^oi="7"?fj+=[IL4p)_>]dpf!D5fAu3k3N`45t?j
+JlF*W@2G-?3#N<M7G>5(>2KE/LqmX405+Mp"KN"V!gElk\1FJR[U(gDQ]Iq$+?fmX
+.K\XsO,-2rkQY8pOMEn\=]\r%!`"WQ>/jKu5E6HpQt->uqE#fnoC1+9jdn&>f4FE#
+=l_]qBE\%5,\:"P#s^BO4:\@sVMmFgCM7bBJ7^BMGo[S;eacpo=a#:0P%r7gKSE)s
+N[+^PSZ@d2"%0)Qk\d6:dYOC`o12VZ7?@Z!/0SCOX?#2?TJQ`(_5SC'V5;i*`5FZL
+kU+\XDL4o*@k9SK2,/ZB1Qrs;",AEP-u<I4KPFdZ8t"!J,L7Jd[t@%$L"r,+h[@5/
+0fD],j"C%UE9HO^1T?Ye+uBCp/cq"0G(j+(dW5-r_(6f:-6gOgip@8Oa<oq#6pco;
+6ql$$b3BSg>&>OKFBg2D1'6Af";C\_Ypb99Pb<hK[o86e:8[;aKLa)g3CL_/c\UZh
+PCA0gL`:*mqZ?[r9f^V<n!p-H8jAUcKETcZa_tXHTJl$#PQDUrYTPn,)qec;/-B9h
+^EbeeKj[YB<`96pBVI<ci].7!auMO-kNRo!#rl"Hk\JJ2In5O-K1H)P/-<.A"+Y,G
+Afq<$o.VJf#/F=D+=ZE&5Z]DAPp?pA/6bsqE!'-9kj6ho$C[Q@Y+@fI1ued;@fn=#
+Z:_((1mn&Bn@2Xr,hH2c#f)H+bsD\dL[79X#G>f^8ob!k08ACCE+f_@74oaO<bk.)
+k"J'.&a]W4DP(3'a5[!Oe\'+9)EOBEk`1_FikXJ[D?oe$dj(S\^eRUs3%PVW7#Se$
+6ehcl2?Me_RG@E9])b0NB4$QP1KHZ@VmP\;$oETO3-sF^U^A:p<mg0=,'m!X!+GOc
+;M9EY,<grpoc=?V$pUbb?3fZHlh%4X4p&MFV$!<h#1[A(R==-rca,m>_X9Ce3`YAS
+I]P.\nTZ?IB]<k+2+K>\jqk177",8%T0Rc0NC!nHe*LAW#ZZ0T6>S!]nRTEq>?/fM
+63&VMLd^7]E4fF1)%Hi16.ks]4s(;*K<`5ICDdou#(p@2k^Gf@&;VS4r)@\r)N;Yq
+!H=u4,aeqUJWTA75T:4>"CeX'nl5o1MM6*P0T'Ba%gRb3&Enp<+:s=GiX2o?1`6^V
+!b$u5BI4Z-LBHP`JB21V)2s;:nPgo?-l%V.!b"Wi==+^*"Cc@!S5:UJMM4#e<QJ2k
+(;Y^b&W"`^1E"2LG7c6r3[u#``Ib@&U1tSS"N."YE4BR@*0*OAdHj,J'H7C46%HY1
+<[`ocKp4l:Z[aPC$Zji=[*U]U&da7XiFK<(#gNf;Qs9'KAgF;[6\3&(!)P$Yi5T7-
+JDas!*W!fe&^62k7jJ]QjDl[\LdE3p]`Na-8eHXtco_ek@?=Y2#,.\t('EbC;AV)S
+Y\"h!Tt#1c,N7'K)o3\uclIjlOrfE)M)%hj#=5k:$+_9V9FukK]#YHcl.AZG#@[N[
+`utlT<g^F+,'KabT^YM6"5t/m&d/ZJ1^^;!\2"GD5hIn$K>Dq;)D+TI?5Bg)GZ*IQ
+as^F+Kcr-H'e!lk4Pm=o=C?hUZKQ'>#3!MoMo)0<<"Qg\=D/AEc2^NJX'h#=%L4/0
+KGaufi-ZQY8>K4F"X,!<XTRnm-5a<H,D[-iBJ<U$"/*FZ&d,/49/VC*HQ9IKcA5`"
+Y2MG6nCMR)2QHss+A`p!0N&n?LEZ7m*etpIo4Pe@W/Mr,U(DbnL-\c;&;!0O3@0F+
+4Ra8CiB$lJTg@EYQ-rBY,*Xr@`Ka+%_B=bO#d:l2+c%_+FrZ8&CH`BN+OY3<K:r9;
+c!(UA:80@l/,l=&5nHAXedg%tWT/l_2@9OOTI^N4J@I/##%?d@f0^_"-SR1SCOR!W
+e`.B"3glR_`OZekkrLDS6<k<d!Dl9p"eh;c(HS6451'Gi^apN2$X4_mLWM>\Ig;[_
+?kEG_^cNdM82=I8Ko9Q3Jq_#R`XN&9co)E=C*MK%m-$]@KICuq9iqP2'=G?'@/s@b
+3\D=R"U7f_4rXad3!(=\JdP*m2<"=SJM&l@8.1&8kX#mdTo)b\"`1dK$=F6R"P+cJ
+j>%c6@H_W@#GKLk*=)]enS27A"fhKV$3N1#KINXtKjeD"gOQ,@rZR*XR&EkaB^1JN
+&-IHqXpY<HW$'grq&42j[PXUh9',neMc#0[pg!iPln)W7s!t\a_Z,Xk3\cWa;$)hK
+$'R*40d[0o!VE;n^sE]!,cuV1#C$dd)j^ffr#GjS4OfDMHSPbt(n&`Ql&u)l-1+"F
+JbMJ9N&qFO7@dV^'YmPh0m#+H%.KM.8l?&uShW[lQ^4:X$W*9*#JgQ<]L5Hu:rkSK
+Bn-nKQUD'E+sI6]4O9@5<XXJW0I:,&eUtq!)-t[X2.6@4&J0o7hBDZ$Ta[((-*HW3
+=hOsR=Vu_LTF*uaY(A9n(o@GO@EY;l"9=Mt&2I^`JN6I."Y^L=76%<_YRUaX;GAH&
+6k(5J!+kUjpT-d($5o9c8Ib@,*<XN2Q*H<LL.YSd$"OH1Ep%C,U_p7UH3uq7h?&3n
+:(b9HKgEL??_isQ+g>\g<(Ia8"ooM\1(jq`g!MK=Yp:pj,ZXoWFY:Im<KNkb/=IN*
+<9_?=aKS#B5u8\cjijHNi(sg-.B"to][r8gJE>M<'OVN#'gD[\"s"7!M?n&^K(B]V
+a_?be+Q/?lE^WKMi&>_>AUoE;GeO5E!Mf\uq5lIA*1-.Y#=-oZ'(pb\5iOL&!8,j@
+UfOb:R\=GgYtY8Yrnr=sJHY(&%Y:tf,mt$S8g`0s!K]2FVE4ZkA>#0hTL<],=[bR\
+@JEI[+]i5h#F0>2`_Mb)#sd0j#!eOfS+'5[5h]3>TKEXOAs<bGTL&q6O<L7#EXUf5
+(9(ld)Zs6?E6b914Co8'!MDCSTj_IY7G`he.:1m@rAp&&!RHi]8.,G4>Ql77hiN\l
+J]hbG#B3e.5,J=8)1l[%i,f=&0LoNlq&!A`k_-22c43Bj&L%_T4p,b:9gPhn#YXE1
+7b.$LQeMCZCPW[h_j;g'HHKB*<=TUkBctsCJ-3oqjUa+FJ-rM)"Q4e;!H9B!^pWMZ
+1/nj<S"RqQ!UBsJ_!r7"#Z6N5G6K==SX]n+bi'dl2s)ZD;j0D/Mm+m0J<\i@0K]KR
+\.nuD?lboX,mD-k7Qt5trB%f*#oP-+"0&LD'!&SOc3>mInDk1h!$;G2a;b;TQk0=<
+<h9uQH`!X@kegX4Ds[fK=@QO,(a)4D:'3kK`L)]!(bZ(aR[57R2>RtiQjJSa3E"e^
+(-c2$Mi<nO;GR#b++T&;#e\W`i82'Y-1>lLKdLjNAP*SsE2j;nKe6r;m5";`A0nQV
+0d*"J!b@PD.oB+FL&;FdE%D/-?0_Rm?j\2F64Q=15]\KdN#>8@DF#J8HNhdTR/(9`
+[;pI9.j%ijC2OBMp`imq*HSoK5QsE?$j(t4"<b4=&`u[^A\cmC8O@C6!KmhV`rHeU
+1DGoYUYXBm*JE^*FpmI_#mT))(0EV89<>[pAuGG0![]9=:;Ud?fXMZkcs(YAe\77.
+I1BQ3SdRh',m&U9&PR'900qnORV^1bd3+)RpiXpg@)S!k.g_a+F2<)okTWM`9^a"#
+1;G8l>pkDNbB+fdhN"QQ3+e9p&9&Eg:)^o/)W1b%BFe>*O;op+m."+oi!)XrQ\'iR
+5g0iLg`)<NCE6kp>.[+q(q:6P1VsQ]n_q-REE.PY*X&[k.R[\JqQ4K0ZGF0n""J:u
+!jgAd2Mtm%Bs?C9kJ3>W'F!"\'\*h[=-.!2/n^ZH&YK=g+ot4YJBOK;W:lTT_,;)A
+F9?r(`aQPaJ.d4eF;b5TE6H(S0MN[hVAoaI7L5-Z=__IaH*b^%6'Jg%A3t`2SO#JF
+_%S#h"/*"-aVJ1@lF"R4:ujD"G+:A2":3KeJZ;r\!6u?2%$RhcTI!7Ii'KX/(;61K
+FIrKsTs5HHR,K=T3@19$gcLF6riV\njfpm$!4^4^!*0BY&/G<;CI4m:3"Pe!P8F!6
+)fVnZQjeco97aBQ$Ti[#gN:/4/-+@d'koM5R.V5)e",E]X;K$DW:L%1!uq<aXSAS*
+d)<Ba\Vm.IJY:R"P:N2kMSAA@%k&*u_!WUCNWIcO'*4u2=R$Pro;J%>(\&&rkSK7g
+GG=V!UF[^d1Y`82hh[qk2Xna2J/eiV*2lfM%9%ZmH/p5QjUt_X%cEd!@IZS#!W\Xn
+05(n>U^RcE(l69;N+h2`!?;-VQ*(0D[/c=KH\[Fs%lFBR&BGaj-kDJ/%tRl;NM$bA
+^]6#s_2]WUVs2He>OJd*7'2gaO=1eDj)Pe70!LK?,Z'p>nO<M`?ja.s1a<aP_$rf;
+kpJJg%\OL:&H=CLNWBF'MCNqRLqUE.O,1CiZ]Puci`e6$'9F(<SE"R_/&nHjQOBI@
+W8Q8JOH'b5_)LiqNd2#2i7=3'IDK`=_.cN/H7k<U1+pdP%qHLo$Yg"sW/6<@MEn0]
+0FiVP$%SdXJ=m1ZkQ_*l"os_rJZ6i1qDp31*ZSsAW*g<jGut)l*%b!M815Xf>E(GO
+5GhCG!RM^8-k$FBqLLC<(q:%UQjS@O$%S6\$cs"!R:X3ZPQ?RQa5i9qn_K'&(lBc\
+$dle\0\\6`OoWi>JCqIFgc(>Ie]%n1[hN84W3u_OR1K@e+=P#_3mW`3?&oS/6kG6?
+X3$_7[18!'!0Uajd']KS'bF7TT914H0Gk7(<lJa;.F>ko;_jo]^,+iG1'G:sOGe\2
+)7sluLre*[fThDP/s*$S%k05l3U6\XDuf]f$E+A`>Vptm#.^rD!.Y%LQj3VI&-7B2
+Jc"/k^luU`ca?:UV=G<$Ma7kaDT;=8`2o`$$GhR'+TYs^!3:;\j!L$^XoOOhJ;=Sa
+JMI6d"Y#\2-rTto.guEa8V&BX4)iKI$!93DSfhQ5P-CD_BG1[DFj5<:OOUb$i0Cuj
+7'W2H\V\`AH&N)n'L?!V9mlK&MB[UE?I!p$M"pYfW#?b)"JY2=7pHlr&A08D_+f%M
+O&T1Q6ZFuF)81"2!M]LNSD,oB=Z)m^NTd>jEO#r`mZN)*!2p*PFO'r?iDD!0J:J/,
+\;\"&_@VA]Ml]6qnsHD\a>KDhdFB8KJQ)WNTU<9JV=?s(GQr\TD_M5I*8n5n'.=gX
+&-03FJ9$8C9<\t9qkR(+!<EE*ikPP]#(V8XJB/7O_HfA[a@m<RN0;&<MOb'(X/5Z"
+MNF\\M2Ve?&[!QmMdfh_&YYha&MU^$!0U*TZW<=t2\UJ*[e0q?Z,V??2@L/-';7&f
+R0>W]V@r8ROm!X`kr5G]9bjt;&a:tX&JuI4\U_I*;>TtdYQt5o.0+;n!*cTs"L3LE
+9$O`t'>t?:?ksDI-&OYp#[F1F*Fd#7(Y$'oMbk4@(^n:/V1?@[M\lhPE!?;`r3\d&
+.)6h0/NqLsnpps[J6390.1oK\(5[rm0pno%Zhsf:#Cp99&/Yb4HE`mkko+6SS&tE/
+>8K,(&JRe)!9!tdW>Z+@(kJ4JdChE+'#RGdp.WgENZ)qsP!P`Q6O[)(Y3N1@o'Y,Q
+D\,kA4rIN=$5sYm!"AH)++(L9.g;2$Q`sJ<%iBkT^sKlR<R)G3J,~>
endstream
endobj
134 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im18
/Width 313
/Height 40
/BitsPerComponent 8
/ColorSpace 127 0 R
/Length 11160
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J-U`o&GUW>,S,]a&5`Fl<\G3r`ZlXW`)\B&MaYF,\?[S;(^jk@@3CLs,EtcqnsMb!
+6mWD$6k\]+J3tiVM*tf]Ltm/7+-21EZ,FFC*LVr.K42jB>7_PX"V\-d\48HD#_^''
+#_YYm'9%[@U$2!!4Wb3u,B7NL"=P4K#6SCrUd?19f:uep6u5[I'$c.SS'C)).2Ro]
+6FquR*%2N\.H9<P<)b:[M=TXl.%56''1snK@0gs>1XKNM,-;9<6QF,(-2Gd+Si//7
+M1oDp]O4VehF7[RGihLRHk]>/69u`I4^AZa_qKBr!(Y-EMo?lFa#:]S&dedX!@5t(
+$e#?6*k2n.]*o>\7M-f*c6b(XMM9^a=5[O)UZ$/ujK!5M4O1:[3cl#c8X]kK/#ZBY
+Sd*$hFrpsgphZ?$%o>S6#JmW^MEhS@<k]i91:l['.a#+8WJ`0T["m#DDAOnK(iC7p
+@>Ig4YcJ2?cEI]a9GAtub7GJbTj&9J1!e>P(PZk4=P\Z>]([Df-lTDa6-SB!aJV`D
+9ZtUN-q`2HN6#,F:(22!^U!FR+qla@!s$Y$a[-dK2!m>?c86sm9Gdou"([WQ0"=gM
+-LX(r%m<2k";8;1&5F&H@A%9PL6AV"Vm0Z6Sf'cOUe)67Xm6tabm]N>7"jjt<73pD
+SI??%U#O39#=5An5D.qYJf9Bnk[ka_:)a,!6/_W"P+Z4jGT2DLaF#*8lTfb9"n%6V
+'Z<;YDAWOpo"5UGDIWc_UnKhGWi'Z"6MrQh?sS/6YP;U'"sJ)k'Zpi/;SK2L@TN'&
+n;C99,cOK,^GW;1`:5Wc4QefAYs_Fl?&;/Xoqq?g'gSI1>'@*UJV=NHc"K.C`rs^.
+<5U'@lB+_"DOP=VL1.<+C^/k+R#2)E&gA0I@?>.A<$@W6r??fIXSIS/E*KFJWfqH<
+?.P`U5IKH%2B'LA/2A-;86A%d#JqU#W%MN(jr/tP@kb(h>CK\;VSOrs**Y;iJflWG
+i,T[.$*[F'#=5pDk+PEGgB9Ab"3/WmP0-$+UfB*SJ><3_4/^#*O$NVM>+Db1^m:PD
+Jp*(]lK0V`lj1A&ljFrd]M:9$a"T(4bg/h^!iqSTEEf#f\oo9(&^-[XD):3I>#*%i
+oR3[TV&@\iKS4HC3Y-mP=DAi.!SDE4Y'+AVeM=RFKt2qhJ6WpoPm':J<C/!'M7iel
+K_EV_\[DYI^`K7-5Z68sDZc[1,*t!"%Y;GaE.HFT[EqnHJG:-8`c.uLE+Jjh.bb4O
+oH1T9A>TVd.gFqm*Nj?`F%a.kJOW'i-AQ!R9Q;1_/Th(QQC&&LRtM#=K__6!p:;0i
+^bq0!GoYrb7aeds1WIfn]F\$Jdopug.Fa9U;t0J<<!m6=eheS9W,n3.c60$`%m<0M
+ljS\+2uo[(R`,\F%#XO\LG04/1T7.00r>)(YT!\O1AbIs7;0\@.]N]/>Y($j#,'gJ
+8LON&R`h?./)i;)'(TX#;*>0#"<ahNIL\u]PZ!&4,0:YZ\Y"2i"j@:,*9cZgbK7="
+@-M#MY^d:9pcrgabS-(7643h03eIFV(:cc=?c]i_QZHnIS2)dJ=3rX>/SV6t7Y2%X
+;s\6.=Si\./Ed^d]/s`.n[A(?pL`*.,A-o*0;CT$$t?%gkMW8V./%5sknm"r7)h+6
+i/1+2l6*4B^G'c$<'dPd"`7u)!iNVZ=?>l;#;?c>84'Ii-m"JCO;3C5G_MFe07E4!
+YpnUH-KOJj#%507\46iQ)D\<I,ZGUFQh3h*&bn@93#7,jJ.R;L5mTaZ*Wff3+[Gff
+#`rJgZo3TnJXo:VKldh+^dMPT@2T9"kmU7)IoP^/9*I-((/5on%VWs01Ou<#+9n:5
+9W8[im:aKsQUb.O8cVj6g_n&/1Lh?-1pKr<co'I]JPP#N,mSB(YMq6c(XmXT#3>*t
+ZPaWW&JI@$dVfj7VUo2&&gBjII=gK59F)hnV*l"0YXM7:6#7OF`/)@$K\gSW!dHg6
+Y*E4s$3oGs3Wrih)'N[-0`g2lQJgR9.L(ildFh9m8Fl.Hk)0m#&u`*0"g0_kVI0g7
+/d?8O+TtVr&LsG%"5n2dJcL<46.-r[$@WH8('M:+2.Zn[jg.gi`f.bLp]t:6Z\,Js
+$A_e/"eb;o6W:A]eNGk("iX<G(\E3992.YbMK^V)GgMbl2O"aVWt?,U8=J#3UWQEp
+VKY_6NPV[71Un4X!Zk<S@>R1JF;m*$nG^M"M4KV^'rjWAaR.AG-=EPl=_`+hE^BhB
+B*e#UAFA-M-lf'_U^[A6e-?G-0n$jo$qs=;J4]*nPA'P1;l57lT7oM,lCn9@7ojP#
+MKpq6E$*UQM5.of3s@L,8cf]=%Mi6k;t%RM+-[Uae>:VO=?%;1HgcVS(dePI//?'a
+>Z-J22TbQIVn[T)M,LCS574)jAO`(LWNsWZb(A9a+tAi2_lBH`m*hBN*iGH"#;Qdi
+C*,:r6gV(fQZK]4[&Loll5B2$31Qp$F$aQemJSBM3^=`7#EWW2^W<JrcCAA=63,Iq
+^OUP<!W/O(JLE4#`A2,:WpUA?U-$?PiUs2ijSp2En#lKj]AfiNPF0d82TER.9PU7O
+6,4oORAcn`r%,V6>BA8H:oP*.4+A>>?qbbL;M5U<KR('pE<+c0&26]ajsWC4;$`#X
+g2F4G<0ZCeD#4;b\C4W$'gB"TJ)Xp&8!!T818IsTS-6qS%07&>]3)2N\+K[A!b_a;
+,cI16T"ehTq]dF_Ua:E.AeK4^G%[rhk,!-%bh7ONOc-NWq=g"F]K7d^PRdf,q9-S;
+)rHa2BlGFD:Wc]XcHk?\_`09rJVq[sOOMHUG)(@aUB741AJD;dgg]FZ^+Bg>!.o/K
++\aXS#8TrZ=R1Z2M(fqP+E3#*,5qrl?2s(kU`eVMH-Ze@!E\'Er:EIHP1kfml>-6%
+[+R@C]-#d8)JQ(2:g%Ou"/h<_U$In=3XC9tVZql$WL=$mf&[Ef@$E2Wa)c\hCC!Yp
+F?cN9<TANa.Him*)J#`%",ifqJf6<)=>5gJCra+?UGP^+lLAA#"K$;2b0%JL2?QQN
++fs`Pi-PVQ0a2$8>f)4#-nrqUj=,so=2ZY<cV@VuoHOJG9k$j#"fO0X,aop4#!b`:
+/m`E"N9JLM"n%+)!`0!W0_XEm22$e]!-">KK$gg2WWs^OU.jb8?BsZKCM'ZVDR)m0
+.`lY\D^@@IAr;)_E^$JA%8(S="6rL45*L\^W%'S&U2L(mScoS3W5)5_@jlh@\g%:O
+1$"l,bBu9\?;0Ro:8TXP-HmrK\3`V4nh28aip_p:mfO(1@,l^CjQ&*EPQ[X="9:9i
+!&jC51':2E2;i$L-&cg-=9oL`-mFJbVr4"1k&MZeD'WkmidPQPR+Fn&T0ntm,-ET^
+p1PbVINW/(0M(843X;`kM(jg--Lrn/5Qh'C"COPTDTW.&Sh1,W>Kd!u@bMsl?7_!O
+5:iCUE7UoVoadtuK8c,jAt\Dp!kq<..>K*M,sr3E@`?;K9&N)d!&4VL63TmOIt^]&
+,%e_a.-fiCN(+:K`9&e2G0qOb2einZNMJ5(A8K7T;U@hhCuC6Rpn<<_8dNQCJt-17
+/oOQE1P:tqENfO"49NAR*3.3d+D<>lJCQ1<_J5rPO.P:lMY!R^cB)!W&6;.(0PUbf
++pD4]6b"Y-N\MhDDWgTJNuGc`Gc(b#L67S$#W`-E\ca`s"!Bj$"2lAE3[m[.#boZu
++BUd76j7Dl/r[eW67"1c,6eD0>fe6TVO4WO!^H&\^.&&@`-,(Y3^cGpr.&<LbhN=$
+0'2(d"_R>i`Bj`K19%*6,%L0sYR$a%U6fY/2[6lPk-dnI5VZ_',3-U16_*^CDSL]]
+-ZWt1J6'XDXFG#qS3udO&PeD(WW\K8"(3bt0,t'KAck^B#17\XboXUISqX"miK&.5
+;?COQ18XDj/M9`4-LiUe$o+Ls:#JYiYIc?]Fp66V(4\FpDBe#EY]2pCImXtS0HA?4
+)H>)K]&JP(jap"CU'2#DBWbHQ@O=U,@&<?k0<QXcKBdPkjF1Pc,,=L</N.MMX"hb7
+;p3TS""p1nN:9@tK&h+<U0]U1rr-dhmGt.6Vc8+UR+sJG\-n6TD9Ahe#4\j&^L\fU
+.gj6dOM(2F4Q'fq+CJTQTMGaJpjbC,^bFhW2,%sYXPe"Ynsnl6*BjWf?gYe=67/c$
+,h<%FV;gXh-U)="peC#45YZ"u!nd&7r!004L1k6P0m3fEn1"k%jDtMi$AN8N15:^o
+.>Ecbd9(8D9Rj-Sl*718Ok<-tb6=oY#,3@dnE?r+\6pn/=`cF#,O46AR7^+^2<&6`
+P(\_pig>GDR\I/]KBeV9DYiFoSY\;QnFAb0-<'F'm,BegaT+6;<4X98bseEQ1%;DB
+,gV!OC'3m3-42[3:@MbW#p:c#m*uG_BEKpH9]FPM0og6?isbTqTS6(7@`9F#Y_In^
+>fN5BB"FQZY@&UO,-D2Q^iTa_8PjO14_gfBU<WuXZ3>%;B1VH)AunH,f`gui=cHUr
+!'CCZlir0i1QpOIQ/4'q9W0LAN:l[IXJ"/o-<&,dLs7^7bD'A=4=`Zl"2HMk`:*qb
+lpd_*"iEY1&hL;`G?FFg/nb<#Zq`kXfL/Q%LhhAm@j"Vn"<`[PnqYUt@hL$j3dp?G
+pM4B-F-<1Gq'KWK"0b;tc\Dj(7K\ja"Meh%2+Fb53)rE@T;iMlpAi>F\M6a[dh:Z!
+V!<nj0jb;,6Gh4WJ6rFWN!IQdBOjBBi/;Y!Lse(C"]UikK)4d?r$ZD_i54Q-J5Gd5
+hV]M_C#ED_ES2/1="@iK7&C):6DehJNn/oGdu&'[9#BZt!gF(C?Xn8>p3HeU5A2Dg
+J\Z:1"3(L'?>(_E/gfm;LYQSTe0:n"15l@?#.1RfAH;j9[ne9aUX_Qm[5.$Y=^Yd5
+K[@0Kp/0nVHJgdX?nE-PI26g33FHSh#8CF^4L.<g1'F,@$,8#<#cS$8W+5+@C@6Qu
+#%HZU2T'uOL\NE>;Hn[!"uO7#'ZMOr"p]r5F#ZiEln5G^ZAVN(r=Dk2\-!3Jo'ucC
+4"?\OJ8RaVdhef8X9V_/M`s74Wf%5ZULopG#\n%[12-4[l3=DiC)ijF^NjtADUd5A
+,?Z4HCD]NuIFI!gaGaiZ;DN1:7BW>?"!1!F7QiZoF[/4_6c(<&MLP3Ofhsl'C%NWZ
+FuDT[4$YV(f%^A#/cteB-=CI(#7)rIrWT%r!okIKj*iNb`3eU.TSSJRB'aF\o%HG(
+m%]#ODA\as=OgelDOC_F@!^g()@,XOQ*,%&687<41]k3)WNlI>">XY/63`1[jmYh?
+/Y?7H*<fMV]I!"70Ig8(3t\bH;ikAlY>'5=idNJ7=K*^en,#/3IO@B[pLSdY1p21u
+?75'Eo]fb_;0E2"nl5na9.@=t#QE).J;YX+MddIHnRm=2e,pgV8dg7Cn#CM?2*,9$
+?=Q/Fg%kd.0EVtY*2"ha\Hqak5R("AOYG:,"Agb]%>*VR<XIbm.L8Y*rs)R1JCk<6
+5]WuIgq+\@"(3jX&SBu%Br*<4SI?p`DG2u+h?)U^maQEK6@WoLk!.tgXKtAT7L63g
+h"+VOP?8=M`=b2/aEBpk?XR2R6o,].fNcd[0rQX@Dbq]'Fai7.UpfUo.A^D"j95Ni
+i4?a[+FM$W.$^hM<CN*-k-@0cChbEQZDIj/U'f.12h*knKKq:r9Xk9a!,i&E3+Uu%
+6<lXICeqsGc2]<qeA)/O/d"?fZLQ*2i*i\+L=un)AuCMuVS6Z[1blq>P+n\\L&PbL
+c?2MF9aS,Pb[ioWhQ/N7!dYUa6CY"L)eB\sQ(WF-$o+&U-j;sNBLP%e#V9*kiWZ&u
+hgd:<Uu6b\%&`d3R,qZW"#rZB"uX<$I3LXPN&Zt<;M-5I7^m!4crt0!0Ec<I"$f4Z
+Mcc1[/8W3PPERkhEgrs>[m^V%IZWMEOn?Uqk)X8Y\iVnTEQ]:&@j6RVV'bf*K][["
+8<DO:n_cS4TI3DP0EXF(!jTq%!+;"O:.KO7"j^:$kGV6<l<;9KS.*9hAt3'6!cDbi
+W@A6XBg`-mT2OTMO5M>e2tC2]3pFM9R&Q5s+F"*3<Q'D?:uG[b#+>bHN^*SX?Y$Gi
+5WbZi2?X(P;e-%fQ<B"7F>E]c0HuRj7f*)qWW[tOVJE>=82.0F=9r"h^"6j#_DJ("
+(MCNH1\G?u,7"FQ6B[?G#:eU[`t+L`T,D/*PA9JPn'['?,VS0FKHN#OTJ[^jgGkj$
+"iA:<&XZ=kN+YV-KInZ1Y$ktY-)!RQDB3<jPfL+VYH/(_Zs6i\@U=8VWRr3S<WuZ6
+.C>VE2_ihN%--QKkfO(%D&Qk7"ZZJ_SN[-bfj>"tagFH&+DB<:GQU3#CFQ&E!h=?:
+["G/L;;ar*d9iNDW7t=>YS_h_aEYq-[PY-n-=ZI#_mW.PApt.KEgJ0Z-+L\IL^9Z1
+dL)k*TPTNT0qnY.9J\n$Pq`OHqT29(A;F5%ES><cGmSMn.i),&:WfGb0P#%rZZ&Im
+W9OO7::hj:[^%rQ$;1[O/CXdSB1&0k+=%%MH,RKF!oPL1F0;F!]RSp.HmJ3-JmL_i
+C98k5Lo!_"QlO\b$L&j5YM`tbMH^M,nc\hI9HK3!.ZioLfhRi4#-D&1TIT_gU4*Tt
+aUGd,_XlthdNuai"O_9!9mE/'hqpg32:gQo!_tP(*ai:YK&Cg+UhU-.-jZK)#f)H+
+s"!'")OWj(3@-E2E#\teY3@B)Eicff7g<\g6!a6c]-`E?Lh_?_8AF<tE<UktgU]t6
+Q6:]:.)8%MK(+L_/QBeR:.%?B@ZJ]&:,HfQH2BV45UljT1"R<Z"/U6Ud$MeMZZ$Vg
+T4I(?aui^,%mI%Ck_>W<p]h7!3iqhN#)?A+i(^'*V:tunF7A)m1ck>6Zf3)p`%1Td
++oj&3%0cm]@'irc(I=`+OUuai(D)?(Je8im;C!"c`\Gks^gJdKMT$cj30mAe&d\\[
+nA'!*+qofd_XUa:4u41<7mk,bpjtRNO\"PR73%FY,8#`B!RSn],SGn7!I93GBJ(55
+#(n(,KL-ptMoJ+MW6fHp*KN_NiUHJa3uncc,@SC;HoN)ULVsfC&;W[s&4dSakj3=K
+)N<gqJLHIB*Xr=kU%$u^67!IPi*tYi\5k*p$3\4+6p*RR&;Yu@5nJ]3+NT@,!Kag)
+/%H#l!hhc]A3M`]%EB<cm>tX+'FQ`AO[uEQ.20gW!jOsP<MAcr@,g^(J7()LfnRCO
+2CrAnj\1>:TpVu!fb0&B+b5qZ0Kg83XJ9dhh#K%Ci-61E@0e3\"-/abO+kYR\siks
+;AKgrBS]+eK4+aRN$CW0_!j/LE)c'KJLF3V-"-V#%g6d3;"Y"nQt@3Y@DI%,LOn`\
++fNOMN[(N4."o6f#rkTj![,9>&-P:t@,e:3CJ5BEiK.g6X,erV[Opi*F;tM$cu'hY
+!Vg],L^G,R,0d1s"<`Kd3d10"+Y-k-K7N_X%n30_CH3n`$4;Fi;E.Da"5snr42hV[
+^t=;?\1e>CJ?sP1JtSbh$NhOPAK1qJP7k!PTnlt;"lWsYKf[Y^DX,bc2-,?`XR\?3
+^L<>GZTQX.?kt%c3*,d\%1l&?[_RtU$\tbIbT"T3"fH)?U$-I!d_O3i.b)Q:5(u*V
+=Ar3XTYN)jZ=*N&'SP#B6!W14914r=_*.6$,'79d'r3JgAf-8RRck]G6-+?kLb\IY
++GeKkJ0"pRJ5M1,n%^p6L>e5:K*K/29]o$s,17<__6A/+L_'XI`6;rZH5sst(lY7=
+dL=bP0OaHo)hqdClk2lu"S<4X_/OLh]X?S0K3k6B7Lu=]!)=-;@4Q$D21V>RhG[<P
+1^^^##\^\NclP.cj&JoT(ngP,*>AXt;kOoWeZouq]@VWsr`=*/d[NYg]ndB0+^e+Y
+"0LK*$Ne02T(7X[pjsWE65p%N/YU6h&2t`I2\%@:ndQ,ZiE/sLKJ]>NeH6reg?CE>
+$9Ih6kZaDh7#l:['8/XJ>q5?OX?II)mhfjY0hU)IU.@rc#AJsoQt#890;pc>"I\Ut
+0PBba:`'D1^Q99lOkU1VXl8&Q*-+]6H63F'TEG%>MF[i(@GK,1)7`$e(^%R,bQ8nd
+%0>]ZD'ba'!u9t3*Utq#D,_5qJ3ILC8.njO=:,'aWhn'-(Ba`kaoh4g:Vl$u+Fpg4
+K+`'884b<7Xje(E;`mU5'?*@0I#k!'4G,q.1^":&)6lL@$/-43!anP*JREZIO!m'q
+!=0hO7,1^,n2^`gILQ<s2@8:i1j4bu6)\IG#_9]/![L&XRRS^i>P^0>0,<64VfIV.
+5U$>A>S7X!;KPZbTKe/d0HM&@?ljTI9?&+Z&>MJq!4WmKDeL%6Pfc^eTk#[7'nWtU
+UudeudX>NY]T^t,r84FRAu-n"Z]K^`!K\l:.XBo/:g=J2n3:=&L'8WcjpD+p+!tT1
+&MaV?C-a6i53c;\JHispP#2hs$,T(H!tqSaBf.t)jURHJ)\!;IhM0%!DaT+EhIcg>
+C4LC?!ha'tcH%>G?reQRn17M\dq">E&0iOCXVLp3(BT+f/qU<BK+H^SGbDk"Ju%f=
+5gU#DL?oD%;GQKlfj$XVr<B`4E?.V"Ns#Sj&K'L]#tVn[#"3tX"!poY_=UTN"har'
+,f3WCn0k"d4;!mE7%$>moE?AEN\fU"%:XsUEpVmJ"..V:P9O7hKc0`OP*D')=bC;s
++;KIC6u.?%.g@GBS^TsK=".Q&"Y)2=&RrUKc%:8/n89PAcm5H<\k3&)KH11pi*/j3
+@0XsOG<PWQBi.:&4q>Yq:&2mjB)Rd[kVs6,k<KA?OcDhi+:Z8N,Qbc[3@"cu^F%Bo
+;ON2@!pXG.!ao%<R*d!nX7VN9TM1&)a:AAfFI9\e:(*+#k<,Un)BpXlmS7dn-8P?0
+JeCaGiq2St:bWW9ogMO)R>*=FEgi,p?3q(XSHMBYVBuPH`@;-G,IIkMVPc%RdNCVZ
+JB7<8i-B"gAQ9#X[T0kZ#gUm9/HdM%l'=eJ>T%+'0lb:s-[>2tkm8mD#crpc#`tmB
+mME%s4:q\-p(3Wk-V>N6(fV77"Nadn<=Y:"2r%I$>N@plcP5IY3_TrlA6um`9F:e3
+!!OqX)2`5gr.HbU:Vjh!;G([pJtn-AaUg!GVM[Gl0JWbBYSmW8!"bGW$JJ/#`N65q
+>":hS#gC.V"Q4\i,3ZZI-/m`]5eT!=#YB1la`T,RH.>_&1^J"43!USN6SV#G8'!b2
+]pH)KXaB+<8E&e;JE4G/47o#=>&T9oV6ct1E^EWj3%)t>RN,8R*2m9t2283:@1Y/G
+J@YE,8lu@kHKk]#(d#Jio+)N,^^bGm+s=oka&6;EnNiT*AD8JBjm9e)T,u-;bR0%q
+!l^.USZDseBF+]9*!62.3D/T'^K"bH&.="I"i,i3JP\=aRm8edqns7HZ:Y@PiV!@N
+T*Uld7/KssU"@8[?_T-&640)(,s[l@JhT`/_+UUJ97g?u/F(n]JT<=re.GLa":*WJ
+rs(g=ka^WIFLE]_Emf)d"(H8A<C>jQJH3GkeD?\DJoNK_r#/N^A6.>DE^r`U0Kq;>
+%"WDY-+&G,Rk8K1E4jHtTNha')X<K:'mm\hk"hb&Fq&.YG!\eD'8"4.RMb3m7jniA
+EF]=/H4jd>@(6\t`(lG`GUEZ&O:A:q(^'i)JMD\r++u1+@2"jj"e^\,Q"uc?nJ!ld
+B2%Ojh=:_DYStA1<"p-:E/pQG(K?Rar]=]FBotNq1u('C!uHXLMr/;8(`Mb-F7p!X
+5-LVEELum^DK8Kb%jWVA(c`rnjV*\\O68ej'r1chgnuoJL(E<MEsrT3LbSI>,b@YL
+i`o->UJ/?6nt^mne.$\hC&iE')iu(*5_&5(J2dmf&9;.;Y*g[(n?2B#5RNK)(Fh->
+MfKFGRED>kkn^!+.?Tns\/:$hPQ?"AJP,&Ucj50&*e9*=WV@>kM<H:T^O^>9+P<_A
+!VJ]km[P\aP,K"Z8PUj/f-%$T.V#kLLq"bQ[&s^B.7iS-=K)aMY)]4)R/#p+Qkbao
+CI1@U]6L]=+;Ot#*@Pp!\@P`rP2;<<blPVg),(2eJC0oI'p:ftUmZ!`&@TAR"UfXE
+,.JU0$%N&EnW3MsY1$`>0ocntY;_oWYQthtM?+.&aoH`6!13q?QjJ:^#Ia++!0`I(
+PQRM0_mg;j%Ytjp^_`g\MSLJ=U63Y[;sHVORK8lG,JY%F)L)P/%tN-D!!!@VM1?(6
+8\8L$(c1$"&e6j.%Y6^"^hD)l\<<lUQ6^G)U.IItp^[BZ'b`s[]5!bM\[8ejV''.^
+N@I&A+P=1hW>_J.M-/4n1UO_-4%#\mP'@d0H6n*hj<6N?3"])?3E`#Co".H&6*M:U
+6n\sr0fT!:8(;ptiI_d\*!(>9%hY!3l;5&:Afk^",6Qh_HF8^I&0A`9!5JehO9bi:
+"j!VI!-F/"BF"V-)SG\C+&b9/nE,b@eXnB<]2R%P]U"WcZUL'b$df.Z+:FhLg5TPd
+(/+D?:^NUn',)&K1AKh5&.jAVM?)9<!CC%Q@<r:qS.0]QJ?T=[O9^;ec[b7,!DI,u
+*21AtP7KXZWCZJ1=P&@re<F-!%;N<WYSW5Q4%ec-[X52,?kl"T=b,I057'$b&QB$%
+g]<5j$e.4!J/=5k_QXjq%NMXooOgX<ZSjkK(!*O0E35K>)@GG0[Yu5t37\LobFDB=
+2ol@p:^2G`"b;+-aNsoOGR"64)7'1W(uef-EF99GIK9E[bRAH_Cr/p=`lrP/+B/o&
+U"9aK1P"]t!,)R-cjCrlG*0D`b6r!7J.R6e"or?5JO%0^3FFm6W?q<N8sGoBb(fud
+$irqN9[*1RaVi=5^V(P*1J5-8TfijPb)6[D9n>(.CLiJeN"HU5JAd=qJ.N-!BGLDP
+*ZISl%0$\)g^eoPW%@2A7'NW+)@tQ@VeX8Gld:OQfs--o%2.B`*2J,3%2A(Q!3D+Z
+=9X4_#Cp%QJ,ffSL^&Co/$8tc%N58&Yc.X?bg"8jb55a9a^3;=?;S2HQ2hH(ffhhi
+Y`Qp6!,U4;n.bs9G*NcU&Y1MPck+:.!"H.H$sA,r;_kjKW""FM!3FWL!!Wt6!!&E(
+0nEV/T`(SK&.'8sTG!"kaOHTm%>^uo&nnj4"U\%=oZR"?8sfkaGS(?nhlAL:$,D7]
+Gq5#R/djCb*P*,Rg'(C9,Ugj`WDh[TBG_nL];\]%-qV)sP&d&%OoZf)&#r.2L^F-4$4$n~>
endstream
endobj
135 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im19
/Width 313
/Height 256
/BitsPerComponent 8
/ColorSpace 136 0 R
/Length 23101
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]1P!!NFTE2X`t)[_8:@'M\e<\+4SK0g^]\54:Z#=QEP+D<eP#DYb-TWhfd
+-5$iB_P(qQ:`Cj7"$r-D>cN2_Mo9$h\a9<T.\&qA0ksu8Inch>V%F%c+peR>`2Y])
+b\fKaOMPIJ=Zort(m`A-1HDPn$Tak^ifKT;7Yt-U<2\7PSauAR^XR";\uanr6GHo9
+FkGc$5pDI`Y*bT`Z<]/P9d\AZJ26YE\l1629N</`P_!R&3it"E)6'[T-sBbS1;AmT
+A8Jiu/m?en[c]#`mA>W'UX/<V=1U<\\'E>e.ZiJGB8t&jmBP4Z-''?#\Sneibh^$h
+aglQ_]T0rUR8<Om^,4-$'<)N.F=WKTD1`t:12dNJnZtl/#gU*k44JmGO.,5*_@N..
+oY.GRbga'ne/X$$:\/W-4:=6h[D8pXimt<U'(6:5Y_n&K6?#mR_Rcg:=UmZU]=<F(
+c.iHF`/Y5M'<tA<@]VDK]C-QM&DUaX`c><6fuEOIE:123$q13<0.[V)\?S^H,sq'r
+Rg2OO'Va5E&[\SY]5RS]19&Y?JM/-b7)HOW&54Ad9[cDNfJ)ikgF>XT[!%!jZI699
+:@L+30LZZ7LHdsS4.@'`C:+Eu0_@al78?_P[ieR'1Pn`2;scY@9_82ef20i3o-I@t
+r9"C3cQsj,dZQ0#=&sDFQR>f)>g#s]<?0s.9+_<jUXub%LK2u+Zr^_MeVu@qe+7-f
+2c2J\Y9$=k%3JPNeQ"<&=EM6?DV366d_/mD>VdTf[EYIPa6ii[CYeA8j)*#*L$I[Q
+%\:Qffs#VtFBV]++b@i-,6NB^(+']K^/d[\I'D5Ym[ms1A^b@leuXRagDJcX,ieWr
+D/\K[FnJt`lLa+B<7bF[CM"D6S!iKmAoBrc=T1l1e6&!\7=Z(he>VKX`IX"*)F`g9
+A.gL5qdK2139=^4Y#gNeRO'>a21"r+Y\A!p:JL*G4sKgi3jr._lS\G<4]RM+4XFN@
+XmNC1fe.PjkLPA:J5l@d?ao/YmBrC&)[rR5C"_)YE`q1Wc]qtL$jk,CI*Ucskq-g:
+L\)SSo5X%Wk,2,)g;YeTFhNZp\RrION:u].LMqubmABcgoht5^_HSm7jgjWI54-?j
+^1WVOpNd'k3qrSc#@Q\"L;3*RT&+OoB72,'dqYBGfun/<52c).SF7/M=VIKX%ZT89
+(S9nsX/g_';=qP6&HA?M%tH:cd5;.&!M9`!BJ0+h^1\AGTQ?VmmNr4HW!)-gZct>2
+*Qg2e'_L9N+E5Y4ikF%jTV$T[Dc!CO6HD(\+RBJj0"qn0-8t5Fr$I#W%MZVI<sDp"
+5?a,6+[<=Js'Zm<M9L\f^"1FDcHK+-&@N'5Lg_$YHrs=.r[p%[QO]S)(LOG([6TOQ
+oTsTFLp*pj`.TQL@e1pJ&^gJ='iMjme2)[GAi:J3-Pg#n?]]3RhDKP/)5GB//np=O
+6YHK1,3kh_9_A=qGj?4m]J#I%<^f>'f*Pr&[?;)%*QA2.+Wc:CNtNX2*k)Y)-%q;C
+&\^N?pIcrBXLXA^*MUWC2_X9?SsD#QmReper8pD4M'ge'7X&,;+&ggQZ8NrK$*=&q
+e<G>Y=t.B-]b-5<iJ+\!@*VnAfju+aRkq3aO`pmWi,#Ne#-KOP).sU/XHT8qC%9L%
+0eXh`c\@U+H;,a*3N'gISMVrId+2D[BEU)b;D*ShH,t)@_sr8^c?2t*fgk4J+c)?i
+5#Q+\8gh;%N^mP#;<IsN."q\tEk4ciC+VTG,j2"Gnm"[ub:9M$,+$eS?rV>a2(;3%
+Ver0*b).3=->^@]P<u"cqG0C,bY=d%l>8b3^ud$bS"<SWUJY+K:289@0JrKie,!QR
+Bq7Vo.*Am>C9EbYZuCBBXe202-AX/)Q)G":#>Ous>jAG7Y-'?ZfU7XY'[#P=Ul*3`
+q]\YZ(`o*&:<M3G).jTMR]OrZ(aP"S,bZ+R-DZ+<Q67LV/N%i5[\T;lBK^;cZtZra
+`nB.f5Aa"5\">*1h&,I)A$,tRYJe0*!F(NpX_`;4W2cRsl^rI(1qkB)9'na!X)BR9
+fsD0]!J/THGHO*f<L8_@?>6<`/FBmPodtMsn0)r%i"Wn-'$2#<m=$\g%CO3q_qn'7
+<\O./6:R"/?T.;&YX4;b<s8IC+?0NW2>P*jMSW_j2fgWE8%LYie"g568?j3&Rtb8`
+ig_6Id)Hg8\@R.7.hR<3<]+B3gp(@Z4[5#L4hL4!#@b=>MfL)[`Rr+ajGGaWc7/Ym
+[oean>SiR+)4(GMUFD]aX,mgW6EHPe/hQFNN7@N8[j5lHhZCcbYp9VXGC&^fr)m"`
+-<nYR'enPnHD,CGX!9kt$@t>;GB=$Mar.6H@]&R,Dru,gH.)cR4W[T[M<WH7=%f=4
+c%ND,W&!:H:>m3W6a[A&e9M]gSLki3oS(015Y"EI1,k"mY-6;V1mdMn/YR3[Jr#lY
+7-hJ`Y>.OPfG^MnC9<>hFu^3;5ZjTD]k+NmY0khrb?\t%YCK9[g3t>Z`+luFJbKr@
+ed#=UP2IMgDDm1Lft1rn">3;c[dMOi@)?h&:9um^hqm9IE<1L1?1gc+,eG"G!Ib3g
+2dZg5WaB*%WiTu\D]%+0T6b.S+pBrtiWC0-D&i[5"1[8)j2BQ#SntIKGXj"=*1KAN
+S`@l&3O7bF_b'G$2oQ%N''=F3Q#gh$"@1!g`;ii.TPteOpaqin9QuYA9hEaD4$ch/
+0'WH[-.@C":`t9Z%.d3SeiL;X!p"Qs):$"LDHC?"h3YHU%a[j07gS?aAESL"h:t)S
+"7D`6oq/H."Zj\Nl[<n<p\o]+n@'_5\S2lsE#<6"=,Yh3-jFqqA(3cqPTbK[b]ger
+"T74=o@b:^Vr'r,loGdOhP!G_^DL@lDf5\_4GeVRA(<P_ZiWGG'RPl=fKB#ioKNEp
+.mJg6HrhciB0YI.:RBjcBH-*+'BoO*0Es_E\T!#b'J?R'<Xe`;p`(u^H@N_)Y)n<T
+OsTRa+J:([:S@K8SEB8orQjC'c`A_ekZCXIm"/@>0D+b;q#^$a>]9blO'(er#lP;C
+"-(GZckPpZ/cm^H-;YoPc`kg"`^N]$r,9*+k7Idar833EiQd$A:Kdg=7e.`+!cUiM
+:f-TAW$JQ#!jCJbcf>,2->#Y411NfYYVPRj)"d<@;$?au$oCMZJgK>$"G-m\?onM[
+&1jXC$&p>8+>F36Y4)Mr92M]]&?uH+N(jk+$NpP>mj_hD1CS0W%)N2M?p+rpT\*'Y
+%IiB*YbMP;]*b:0;Xj8g9'B_\\0k*-&+M2Z!t_Z>O9/74&?prj!%7s=:-A$uA['qk
+TJ?U'jT87frh@XIn%T(S0J>i9#>mG]K4ZfUqWMi%VpS!KYfdaN;ZG'='9QI;&RQ;.
+AjG8p(9f4tln&k>ZJEcO-%e8id&clbLD1r>8`1<UY$i$]-3A]_s3\S!k#!$OAHEF<
+)R/F3![ShKEn:nHQt6mXE2<qrD\*F0*0KeK&^_#L$m7e`">S[kE5;j"<W[e/*cPF]
++<82aD]^]$+(Y`tD&1D)kmC::s7-HhEX`l&T-5r=+J:+c;BE-L,%[Df,'#.7ETf3A
+1EPZf,D-R"c!_:5qPT#P)q%:cZ8in&$RINL+VIo*d?FcCGUHC#*Wp1)Y;%5a/KV2S
+dBTo9%EfmbRj_cn.'%kDZ(*M1_\dD$5;C5B03Zf/8KhIA!j\UXd]"?VGQDihjkqrt
+;K3o?F!kue/+E'[15.98="MRqb+a/5;1p/Ka">\+/c[1M;P54A.Kk?JZEe$@,jR+h
+.52BT/b99!d42ekRbiXo0iJl)ZHk8OLc8lu1#c%cP:HKo/g^*E+J:1eZT9D<!qp3)
+1fF?-+<Mt/])K#E-uo=E;d2-%pF)b/-F8I_"-GLY&N:/./oou2J0Pcd.Kn-Yb-&N-
+P4prb8-2_R1t.d0o2?"cV'OJSb;)IDY.m$HCd0-44&*730LGmR8N\dd4HE9#dt^(>
+0(&7j!n5g_;KumGI0Pn-16=d_67G+_rBE(Xl@r"4Zi&dfR6WFLo+=_!^e[(qs#h#_
+6#n@UEcFD:h*N<X(a\ni@SK2<lGGG8,/SL(na/BtXXF`r4)U*%e4B!!#U#ck"VLo'
+'NmE&>Q[r66,4Nti_)H(W>m+97h<EYoIr[%"t*kFljToe'Sci(SMp,$/^IN#@QR.\
+:J&EFlk@[q'O*u4WCA_I/`7^D;(#"g+W7#r7o[B"7*)k<+9D+c9^\o(<7MN)dU^8g
+*;&2XTI!"a;]m^._"%Rn<:rkifh3%Z7Y:A(c<2.X!Cnp&7r/&nU+9)@)*63-rt2pT
+eBnNJ]JRDA;Y)P?+smB,<E"Dd_">r9+<OQ>q,EUZDDIA/oa+7_F]HVU<WX\Z!$b;4
+Bh\Zr;DC772'+`p=]3$h!k!Lli%J2SlWCI?(^0/%PsWG)7o.PiAE7S%eY>e,X\e/b
+9OJlF,!eoq\N/2Y>OKs5nA6idHX*t-f`3W.FO*mng:0Ba?5+6s[H9aI9.Xu%2:VmY
+EN9b[Cs+L)>/DXk't!<=G3+br\J>WZ#9R2o(L5M8@DH#T13Zj\=^ne&@eJhY[P_Bt
+R:F)M<F?nZ;E89QX'`_&9X:]WG$?Gj,6\gt6T,Q"eTq<TbsBot9]A?G.k>(ohu[pJ
+@hsSj2E+sm:qAPNA2U9!9:1($i[(hPBu5.1&5c<UV[p.q>ZH"MD?/I-*[4uE"h))h
+12=5*GALY:"&)Gkp+pP$Kg#WO+`O8)Y2aBc[q)qM0K/,>ok/1.f,/PRo_/"eOHSb-
+ni=.b!Y?L-!&8H>V/,f=-=^ggOG.\`+*&QHD'VtCMkb=`1MITu(PV6tO+K9V5?fsq
+,d&))0fa@H"^kiV>[SKG^b8G!"sCBb1":bj(Mo_nrs1k@"!BQMGBe(NHrsI#]m#0O
+2-N#\P<(4(DF<0(FgZMG#qZ4$H;U'p[oOsPXohb2,GqGeYbc^@CF[2&Hu)Z-f?nF/
+HGK-.Alm_((Z,<(ptN5:m#.D%9@JA*(EbX*k4Ln]2c4]4_a<8q!O=-Q&)i'5ANr&3
+EC3`8THS-<aof-t1\%MtQIUT^>DAM&A7a\89Gfs9h*U,H!Iu=%[K/M]ob_oK(`6*o
+&d;\[X9*o1"!B$t\7Ies^H/ZPA[i]]i%p.T+bDr[L\1()nO/;q$%io_4>g&O1%:"o
+PAYC86[5-LfV=+bF"\2<C3[!pFmfW]\Vo+U,'ROU<cZIMojXR=Cm`QOYMFUdh1DO5
+f?#t-=;,':MBWJhO"-2J3'Pq%%?KEj>;`aK:#d,%$]=LH/M[Qn5W72ZZtb+H"h>dM
+fd2C2+-Nk!NB&eSR5Q^_!'PTn)S&:snkjj(NK9nfK;,,tE`=\OrZlcEMGkSr[R#T>
+<L1/$/b*'IJ2rr]/-4`XQaqU)Ql/7OL*f^RP5m>$<OJ$Ja#>7]Lf/"Z!$`mL;j=S6
+JjW<q\*oSaQmhd>M?6%/%u6%Q%@iguOYPme%0co;f:BI#PW=;RVZE'nkQ:fG!r;;Q
+)=s8!QAN-6!EoGiH3>qu#sqf(Q9!/f@hkIDN[6q.P+kI3\fVZT_4k(H./CV*k]e=5
+0lac_+J:InQ^^M[bj5hl1:fmi!&+N/9qMJQT1iggKfqfr+f3UCVAZ(VRV5-be1!Fs
+<9H-:=f`aWHJ$pl6b*Gl/bbc]NI$:FDu^jZTK31*/-B95SXQ+L'?qTGmAcm^M=PTf
+>-j2+1b9QYX>H%&>*(&!a\d?dXSQR!X`LAfIuY*jFni'UY=L9LkGR;u5?dN*P1<Bt
+.80Kr2nJtj\kB8X+e>9-?ok-U$u,fi*!4k;"2HSm4"%)2F0b9eZRdDD)U/!25?-X.
+ITkF3A*L'+l2VbuFG<T!HL!IlA$6h]+<+s<"&U_@!NSIF!ulH`^f@kmXZG2S6TB)f
+J1^qMZafbY:]$BN>F=o(gU[%jZb*&dKGV5Qp+$6s,P^slqme6S;i/)6%'Q!^:S@jc
+CV7#9KUZY^qpY_@5GXe)SY/nt)s<SMe%X`n]q@M(48Z=CWO[[^\^L;h\mptp&\=j7
+]&Q8]FuuUFVnbC/P.7-@i$6,N3OW,_5kk(+3fo&"e-!KPUjt87iWoWk:N8Kq-mMNt
+=Y7=[4p)ob`Zd^*H2>*4q8U'_1062;r,\;\lc4`)a2F+4EJqZtI>ZapaK7&2glk+<
+Qb;+C2DU<o9+nNg.K[CJ"<]M>i$'@Q1^+jr0t^I=H\;Hf^&t#^"7lK9f#*^Le6Iqm
+`i[G/r!`+BVKdLQXa0W&FDY$jk8a>"ceOSuo,@uOWP`mDdbI"!'YldQ+45U,"'imp
++pnE;:W4-(';G5Xh)2rq4j:Fh^YM8FQ#oB!9!LNT`u@.h-MP>ENqt@ucTQnI?"q<2
+9)1Vgcna"qI<fM4@l@U(Ms&)'?%rI;MppLEb90O4PH3BRObq<%"$B$Tq/b%*d*&gE
+#G&>-*!df1;kSQT_)eX;cV.lUS!tn*c^`VCE=9Y!-,+eM_bs(DR)qDeUTLl3fO-lG
+?oA,f2;b,4"'trfMh-W#:Z-aPi8$Er?oN:[(#%L[A%ijRSf^dX,L-?dMV4^_R7JIW
+0!'LW`_hXOSS.!=8`UjCM>g#s4lPK#HZ:g%_u'Tu@Q4JJ8-=B0be58)[>eItCZ%O3
+M8F!04K8N*J`p>:B`.*HQ$'lDJ_Rmb-pBeX_bHau+S:i5j&,L)qa'%!DnH!9leY5"
+1["+P0cUoWcF\`2i'%::3WqX!dQgCl1nWr:ScSt."$f0T!'gXXK7Z?&,P;l:[#Jgc
+-T+"Nn</!UnEs&d'l)VD$h=$8e$5Tg]@No^&>D)Mh_,k<$,`@V?sS>q65AlP6j-ji
+fcWfX&ukP1#PFIpdGJI-D^4tb60PQC".&iR>*7>0Bu`GjLB!%oIE)<$2V9`QX^$S]
+63%@D5f#\k1_pN,KgOa[TNF`/&;Z!k5i?T>/dhjc,='%\Hl<@r8>C0<ZsXglO[1:4
+8/s6O&I\o__;PrA,n(4gJeEo21+aK4_dPg'?pH=Z%>]W\!9eAI&-buu'i9-1&IF!i
+j&+OlIT?H794bBn!&P`,T$$0!=aan=$*VPuF?7t#_-"0>V33nL_W(m+5jqdsc3"0"
+LP.t`338Q9.ZMLt;CL%`0,Kl+0">^#`b$P.M!#GF"SXc"#>h'qRh[!-*2X!UobsB9
+WXu5on'S[GK)YqUE3PLm]qc_nXhc]=bY@jKGe7@^]a32u4j2g=[F]cnHLK\.ipi]J
+TK:O>a[`-%=WISfWO?BM1B:\$4spnU-SVdO51D.0K36&8MD-.]!heI@%"oboTW'Ds
+P'Yt8NUf'e3t;o`JLo)-d,d'fdTkt<DQ6m-0+.RJk-3(8g@6^hBE5KECcl1G+q/-+
+o=ZR\2T`&HUFu>TYFJ"p5/<=n'EfR(9)f"=8lD:[.goVb_'%r4%7.en-O@0]MBW8A
+TNnH)/.ihojhn5X5if&-@gs'\EBC'90^c;Mn$nD4>4G)0UR\q]Z,-q?0n>-2j@AFp
+K$CI(,;CDnEI5KqU#=!U'Eg]OTUc1jS-:E>%XO-DK!O*R%nlL$%Z*l;K*\e.mK8)7
+:/L4JPTqu"ZU668rF[B(Z'#V\c#qPi4>8T+@2ZY@3Z*X]<)je-;98+O+heYe,/7A=
+V(r@VTh%[L^Sjsc%P%'<#:n<^Ki/EaWRsF:2YDaD$:ON<Il0^EA45<2.)T1+ghVl%
+41]=kOVP+)gtQF?d_c;X:mEnj**TCA)f/8)"`!d0Ck][`cg`=':#,J8(^u%@F\('>
+2K0K<K0Zj0V1[^u_0mk5*G'_$\-+Nt4)6C!bcnTNP@n!BDCk3/G`)<n4'%!F^#M*/
+2eetqorX>1;ahnR>M21OqGS.Eaq'1L+A4++=cR,Ek.%i9S7b+c4qVGCQm88T=r8J>
+kd%(GmDZY+$)V+u-%V(->*?:&o,=`oQYSFD=0?$I*krZ\-sjrU4Vl8f84Z^Ge<@4\
+^7W*7@&*]8DL8Ar%"hd%<7YiSkUjQc@/rCsE/H:Z`:Fc!fZA-7miSCDcYk1=:8o#,
+@WQ>1Yo<#<DAQgTF4X(6/kD!e7J0e">I6Q[a't<=4ek1Ep@R99\m8V"))Z3C;Ro[8
+c2cK5"9=YrJhTFphFiPrA3o@_"o_S.H^7%%Gb[J-SE1`k%!flRA3K!Sp`/QiJ;8B[
+-s".[?Vh;^NKaS[o[)Ha8JXH9UrpCt!:<$R'mC2X%075P"s=6hJ8Y\u^j$IsTO\OX
+7;53,-dM>6ZB'<"Xm.E+84m:^+t/5[mD9VYFpo>I6VOK*`WMh.;+)Wk0Y&)=`]e[?
+Eb0u]H'4;F<;dupR<2(/+9CCq$(&"e+^egg^_/]@)r+kP^g%G&=I]Wt!#:A:*[uXg
+-DcZh+G/!Q%'-<c(KcnC7&:4X*EP.@$nQ%=/1EipVp?>kF+u8#_E00uB'Wm1,EIrI
+Mn`:k)\9<.OKomo!FQoOSc^lhOXpo40KodgYS@495`/.M&;K9D="C-H/M&i\UPR]4
+Htm7n7Rj?pOP/6F1<$1:(XB93Zg!e[TX@-8no:G[3)YqQ*]4K[#,E@h"JB?p2ee[9
+Ui\%6^cW)-KffVf[$R78/oA8S]R)"/(OC.aXde>pDl6!a51?YH`WG"<@4^r%o?LL+
+-E+2EP<q8bjcGaaqG8R;I3eFl5TjN*"b>5H"MgN?:neeY9T4suF$`Dp.OYU:YTO&k
+>)^EC,R!8iSYOVb/5@W`Yi?<:Og:P#8smXkj".<L0_KEKLWYVt.^Q#"b'_[9h+o?i
+56:98J5Rjno;F&X"JD+oJUenB5c%7aXm1]uJ2da!&0sit@]]Xa2-5tn@%6DWa/79O
+^h.\JC$sEX4ka%#RalG\E2@2!,RmK4`;5g5TT2O+="i#b33YmO2(\$M])a$$"BI:u
+=TUKb?4'f?J7K8FM6$tJ]UX7T:<u*/>)M!1/$u^Qe!oZ$efaco[?\EfQ9/LJD3O%`
+W2?'9\b><H?+d)W%Ue'+damFf`BdmtlWDRN"ot4<B,4)c=\qQnm(HN4p2VS_0I^)H
+*Sj'6IUF=fcD0:!k(N<&G.IoH^m>dR4;Y^cZ$YVC/]-/SjHcE2ni^q#Ku1c]1p,,&
+QW8RG&#ljTLKs,@Ni\ll_:M?l>ar!On?&>"kR.=JUs=]fc5qs;r8M09dlV9?m$kDc
+poQL^MO7^&YEJ$h>MJ^SENOf,QB&i7An$sSp_Lpf(Em5R'6D\e'$1-2l%/DnP@W5Y
+!d1IMAL24rnu?HIja-L&9?rGAUh.a9:GCdtB\7AX[K/k_I3Zr&Rdlg64rM0Y?;(6H
+^fV@rVsFop>k143]7cU$lT[1R!HeDiKEF1RU=IU@U0R,E-i$HEQ2AG@=H8P5b#mce
+_Au=Dm431T[[CJb=^JKJa9#BF[;'O1I5Oc=W$_LR<)$]f9c+lPTK%[AGd(`L-*j6f
+E"1')ph7Io_CJh(@qaqUE2tb)fr2YSiLM=HG,-Y,RpTu<eE:\L[\2C<UN"DYaNcY3
+^tfY73Ao&f"ou^b"@-o5D^#r#b)s@^gYG-J:%n^3p`n\k8:uI9.C!!@=4N[ZKOnc!
+3)Ob'Xg*V*D-eGGFMANd]NU`jl>ssqH+M!VS?)'nJ8UM@ZCNB^++\qr#6>)Lja5=?
+Tjg71Y[73Fi0#Gg^&cNpV-<'K8"d(-LSQs_USZciN`%u0CMG4o>^;fV?Tp5j]"*et
+aFMh6]\INiIp_[bO:$PX0F#>ls5f^%h=f*9dWOIe"(7&u!`)c$^uohk>k>UAlI3&I
+=^9o7m&Y;=YcZAS`9D\6HP]GP9'<re^)^#Soo:ul'rf=GAI1lMP-*j[qLO,=>RSnd
+1SKV"5PJ]([^W&B!PM*0"E5qGo<2Z[k0LD$rqkI6q8qO[1RA#/A)K.WAL#SIiP%TF
+]Mfh.'BTY,`'/I!]VF`&]BY;G,9qIb+34gIJ.@+Img(^3578C'Js?daTKPZo!?_t=
+;ss]bffsae[#<fq]A/=d[(j--Q+Qu3>8+^`]TGfB5!/h]iJ#&tX,;_Q#cn/h3chFW
+^l?O@+k-d[-jbF&$U!V\*'f6*A.=@5%_XR3M?.l`EsE7Y%m`"C2kkN4HhfsCU+j_E
+,0Fkrqu+/XYa.*F60pUlHlnD($,RQ0.EJk_0f-DW$+CJg1+T1fF3T6`9L!%rNEG%n
+Zn*kX/WGtDJI)L1qJJ7u$:>dJ0(^qHoG99f1l31L*f17e*#gV!La3Bi78u=.9<8d,
+M66+pOT:uI_r\[ILr9TlYBZ2?j1Bi_$5If=_Q637;t:G58-'AL4$!R6Zb&WIq`g:<
+%I?kIKMW/:Qo($G208aTgD.&b<Q>*E%F>=cL^9LfLk(nG2]Pk]"@!DJ>X3[B-_U@@
+TF.n[@)PnN%9,h^-jMQ,SUgd;JHTT"ChL1uBXg0=_a8B&;hY`e;F>LX`C+Xb$ro.l
+(e6%9Lk#fGKI`A4=pjV#*'A5Z'T*UKF"j?SMS(DZOHR2f@h.^q1T71`p^p%8:;[VK
+(efT>CkXt?lQ'Ds\6.Y.diCk5D+QMUaK250=r7NtSd:tpJ>"&S/9WVtTLUG"`PB_7
+"F6%a@Q+UdLbK1XBT,N1%h)"%4Qm=_Qk'hn&=c#'Wp?!Cgn$)RnN%qg(]d3#*.:7+
+CrJE]b"SZr6,O/[D6U%D7KAXoHrc'Eis;0W$F'>")9W;KY+A=PLg75Ud'QG./;oIp
+&,6PJBa2b6S,f(j*sB1o;)?/\4ffTV2G4QL.*e(#*6.UObT_F'_QQ:Hm/W4T](!',
+N/u21X:I/08L1I'#R(WN7?[`%Lh+dHga#IE%tJ`gJFEr(GRQ(?\@;ssJ:+rQ@/7Tj
+B2+"Z7\&/03oWl=@84Z#c.m9.0ZG`phghLM$t>aQggZtUW/.1O9UpB'BXLOFk>%G-
+bk-?R4RB"#$\75nZ<;XefEnn&nkEOc:HP@8,_j&Jp.?jQ^Yp*/V"r/<qLEtk]=82F
+A19G7rh4pn&`e!_kbud2?&j.5%m[/"E9PNuonu(l:;!raF:,;2$a_2e4bsD@][bBM
+^JN\]d-7>Ah%3;_&^Q@Md5'Fk%/PL)$G#ArdfSj?E/?Le;%#N)c1$N6V#hRp)8\f$
+M$Sh9V'%h3ilaX%!,G[:j&c<.$\7^XdS[n[@V4&0h_4@+3&N,n]"sGQkRbE=^*?8V
+4VBfH/Z68;#^!#\UaSL'c(#WB_uYp_I5O%GF0u_E;gbnYW/T3%4&[ip3LC#kYRSXW
+%"PPlJH4bi3CUE7eAdJ9dY1-23?h"/:Xk@q-"T[k`$Q^G9L6QNQC*G`KC&ZM70'tK
+0We2Egi:e;!45%@5^aV)+J:Y^3J^s%OLsW)N6j=;>!C]cJAkcDrE^\0#hAec6S%r8
+'VN9M]W)@Q%r3UgX_&e^HrST:%/QHLHETCQ$inb^<kDhljDicASBOn=8CWf(,T=-P
+>?-)oQ&.K0^lLn%?\#B5f;_T0)jR#LA$&0j`?;@D>MBhIJ@&TQ2GJdlU%(lpBIU9c
+,EN)T\.%(F%GEV%!3tV!?#IIFN)`"V8r[i/*2>6jJCt4MMbu4^-!@ji$p!^OW]W_E
+O9dC`0t8N?Y9WOe?(0CB7@),CejY0dF:VJ:T@s<6%]+iC7/MMb^OYMW=tuR96up#:
+ahD$!3U7$.Kc#msk08%M=%\WB]rk@ti;d[A!50.H!"AqqZ6[d&0KlcjIC39]kTjY-
+R#SVKY`L1PS_L3@Ql:cSXDh<h:7D]e;.'jBcjp-4_&tnXeW!Ut`PgEU$DtcC.ZLHd
+_]"mBL,;Lug=\5_E<?L%-NLI>:WNrpjj4n\d9OAlVYo,*"k:FXQPg^GQ[NEbd0p`4
+l]T1G;X#-tmG$3S6_DPnJF3;d"+:0r%?O0";<","IH+Sm@]K([RB>TfnB)$ukUR,,
+Md;KrA(au-cJJ.hOlc)g.$.j0IL>3.=6P\#A]e*lhpKN?$K_$5ErXsq]jIGA-%5ZX
+mBD-2T+.QD?j%o[AN<CG<o2;si'G2B[K[dnNsShm@.gXZNC,^t$G#O]f"MQY[LOSV
+-/eFJgMKC8.%j-8n_YW7$])tX/f%fYUa(l58i%+lkb7$7+2$<#&(u=heQcJn`f<%>
+hC&Wg%HK?5E8Y!;Q)0%j6U]p=YKe`bWD%A/bo/p#0+Gh?>p<>Uq>%m5RR:LJh-Mbo
+acYOa`A$.'72@\WRIiP%[u9Adj*W5OQk:mk#HXrMQE\TneVmftm+RWc=RJ'$SjJKG
+biD4],tsP""ag<a8-hgn-Wo=YMLZeDAu9>mip1TKISR2g;&^9Ihg=1c/,ueU6WDW9
+$$+A3^,5n$$7MYS!AG)FTq*IiN".aLMafna>qeh2[pqIc>G-]20j`uO4KY:Nb5<C)
+Pd4o<>io4PNDihhGd&ZE^1>n>B!Y&>)IQru@1L"?0gRpfN@m'ZhWG`X`C\Nk4_q3f
+&V3,h$@Y'#?><]%SBSsViYHmFrRt4sP@@RB;6.hN.9VPjJWDAu=$VG<c@j\q"h_IN
+R8/OI3OIf9+A1T;'2FGEhGHS'ck[c=)g,i7SraBEj_$'4J7IsHck:+PPaB@b6pih<
+F`57djC/g2$G4O0bM)(O8rlB)'*/ZLeb>>eE5tDpLgHh:S+."W#/7(hl<E*RiGITR
+W5Tfo(8-eXY&0B,n='?YC>IZ/^t,aO6Yd#hCE83MQkC$GHru>8'8<P'i>sK8HJ8ke
+CRX4r!g6NGCnp.*ZpkAdl/r%Q^V"fKC)DRADSkJ:*`j,R@j]2/o6W&;Zf;P=iu"P-
+Y)F8fTW=C'';MI"d;_Ncapb_@Rg93[+:Xt$'(%Xg;u*(Q/CuK/iba+__LC0""*L,7
+A-c5k#r'BOejQK'4UU7omL*8*?K.*RghY%]g?.KNg+A?9k?4Yqe4d6JLlLc,[]rI=
+O07mk0l^E(&<!+rLi2cF0(XWhFtBR"mphDC'W]8#E)Qle_Nm?%U`.[agY0BSiY=RH
+Th@n$p'R+%2_P9@9W-$m<fGFjWu5:0G8=Tt#tdDoW/-]-\pCqJ26tZ!E9Q\P&I^"(
+(%Dii!+ho*i^3`"'7g'&b6m+<A)'\n.Gd4(P9W(1rhJqtKVlnB$uN5l%j$Z$>Hb9e
+LfnUG"WbkYY>MZOnl!qSBZlT3*@(C&_ETM`_99tiQl$NjR)+QY[k:c)&9A%S&\nVB
++;4!#j4!iu)4rS)-8-L$;t627nZ,`.@)O>R4\cCPCYhJkh`rL65mUOY&D\JVUu5+Y
+`?uSoFDCaEI7I^ZKrs-6@:])N3NZG3'bd37/$Uu@U=/W3d,CY9od0#h?kJ6o%b8M]
+X$Z<rd#W'6pt87GF/6SDXlq);[8=386q:PtZ1]iZ@/p>IjO\Si>npa@EK&>-p/1\u
+_:`%/o8s`ogM@@Y3NM<<,RGVU7+Z8L%iYus4tB"s,RiK/D8?[C&<^uBTK<LEMVYdB
+-pg>F]p1?kWR)3XQW0.Nj3>tMnuZAE^6%6%3irsUqU4S,E^qu@:WXV7=O-,_BdXFH
+=fbG<Y_7iAEX9F;\6b83DA>C*KCn#]Q5U`g$Lmj/ds3H)Up->VeflYtBmGK$LnhTX
+Vg7qI?-=u0LejRAA5$A1'mKgRi=9#.h%8_PV_PBcg0L[Rm@)!"lPuNcZDbNBFG-0_
+OQ42Q[X6^:j#L8fc$8Y6q\m8Rca.,*ZsEe<JG9]2&o:,CIcb.%:5=(MYG5YW\dr;O
+qp9tBjW/lHcD[84hd^0m&J0=GnP+QU?H0L$A!&q=nIdm%U#4#cR"gG)4+,X=HMOYE
+*Lto4*Hp,^dG"N`T@98?[#b1aJFg'?b_D7"[8X`rWn5t1aZU-;gs61R(='S.XLA26
+#RCDa'EE_N@">1D+;P@j"@:uXE','PJO+edaB185$]Y;iT\t>o-l!*n6@ghP5TUC>
+K0bSI*%ElRN^i&j\D1P1/rWM50Sm+@>S.91TQ#1h\/-u^cXp/@UqU2/TMaqF)T3D*
+2Md#0ObqT-Y?.gY6(sseBK@(ALB?FK832)jW__Rcl"E,h&Wq`u;T\S1/S)K:64jSN
+&18'NiPOQXn:3J8#f`o(BO!G;&[0/]ed0eu)%Vj`K$nV"6m6lBfK^*#XOa:/"\thV
+bRP!&!4`5aFDB>Q_`?+E,J0=K9'`[5mdfuEj`\DHWb_,elHPhQ)%D<f+eYc7*"A@m
+0%3C1U`U,0?a(>M"qD)dQ;I\=E2GBU&I\mI!>%@&!_fo(bQ36?;MYA=qNd$aXU8Bk
+JcLs)dkqG0=J\'\JeZlcWIr=s[h",Nh6'#1-Io23lWT^e/Sg<7^'MnoWk#:M#3Z)+
+>.hBmb,_]c,/@kI$p.k0OVBZfK?idBMo*'_2oq2'l`bn;4pO\u_q)hZ5gVV*"H8N\
++N_](%g94sO;=M*mAf`pJmbsIe$UW/>,WkVRV\h/E<>?X`_pTB\H7;W<37OI@KetZ
+.TH99.PVo9+[E&<Gj2-OALt/YTXZ\=JueGjo<:fEP,T\p?m=L@OWoC^Ta7#*OTG%2
++YNq*pdPo"5jS"t1C0K`otci6i@IVO+=U,=i1a,7\PR%C8OcP,!AmVgZ`ptce4L6?
+V9-#*]eC.Zpk;L#h)e9S'[1u(^pe-:3i'QY,)A@G,YL\F1@g8O<Y(?'NM9g,7L3'$
+rE9\a+Xg(u"5p;!ZFU=3;MRPZAWVsG#`K=WaM>;9Hqt?T#oU6J9KR)<oHSO9,cjEK
+kc%+l=$0;4/h]gjeE`c^,RF'OT@9HH0Xp,B5TsCBBMC,t,:`%-JSG[;e<N-=Mm&">
+-tju7"Q;U>&;&hng?5/$"n@RSn9'p$,Uk'1BJjcKWqj\0]?$?#Y!-312dfN0Os/!i
+q[ChUP#n4&=&s`mh9!h3#K0DkDokOm$;AsG;Pd*d`__Vh`j]1lU=D*9QFj$.TV`bE
+"[P+;$uHieBTN:_%Q98K&JVGSYi)>A,;ej.B'$aIEgjd^dJfslkfnE!$p7Xl&&+c6
+,$b)S5^+5ji7sAN]hJfG/E*X:/;Im0a^!K'B\VE8LUDKPYc]i]7p)F9VB+9?0MVt+
+==FBGBF)&2$?;XMUF<9JN['m@IaFg^8>'*"W5P]`PsJ;FO$+&^-=CEAWGm1g^$m.b
+>)88#6o?WKF<`ZorZ>Q5>bld6*G<t##Ug-mMr>(2Zl5h__E)e"IMt7t(7($>(BSK^
+I3CjHm"&Oo"MemXZ"(pbi,S(>ApM'U15H(KW^^\PN/AR>k,K>fEeFVC\\05l7"EK.
+/7lq,4jY+#d6U3K-lMSC`?n5$8o7q>n:H2-9+W/uqg)gebTQIArR@o@5nQ"&^ZYY"
+:nT*<+K?oCE&[un;R&?\&X's)^6OPr$>^4c1H]n=jqW`s>`9Z%1?d_S,^\($"c\MI
+E[5!+4FUQK!4g3Q1o/66YEZ2%*WX5B&5&J8D,8Oc0,0(V:cTppTMd0M+=%,A0Ii:s
+bRT1X)"%[o7"Z,O+"J446W?#\A8ks'`i.I(aQjs;V^9,<(J\+EnO8fLNCFPf-u"f;
+IqUJ^CG+;-NFY=dRS,p=`o;*e%llR6kq7dm&mb[f7,OEj!WS`O`X0Idk61j3F\]dh
+Dj.F<Q#k$:8]+/uj$Jj'0bJF@e'`4a$ds?C(!@>gF%/`@X%m@P6mrhBRNmeVRre(R
+.7u'j5[c#`da"m<RQ>%]2.9`GF:!M[/d3[e.@`Y.'Lc2/$39i8SS('FU5E^\(EGIX
+;K2-OAO>hBMcYBRFS2&(KP]#c7VKjplUU6**n.n6+jlQ"*\*te-j,%$B"`5\b<Aa;
+lM*6&GtTW"cEX)_=A&WJOOflP>?Yj\!q6U4!g$4bl_k7JlWk2bde*to@uE!nOX)\b
+o3n953O(K5&JV*[bK_t06$9?P&9CoSa_UbU5\`?qQ-!Y[9M'W-jH&"F7R;Q--mAo1
+o/2A@`U.2s3n6)%.M*t!^nR4u+C#Q]QGs6I0H^Fi3a/Ko)fSi3_^3^4S6U"_qjOp)
+3%4.s>'dK-9bb4R,S[d:C6Nh"g)2b<oF6AE0.AOmgp<j^MS:q"nul1!]s,6G@:pqK
+*<_EH"iue,fJ.k/n.u5#TFuimPC]r+*(EQN6eZ/L8`dAm;"#%Y=B?b7O'E3Td!cM^
+<S1>QnL2=f]Tj<*129_f*!9SY(*%^,TVrV\0+3ekhQRc&NF"WZdpF.el^NtFo-BQS
+"N@`0ri\U),QrXa!s&64PL2g*-&5AUOkbOZkf#a/A8I'koq\\rHAlb[f.piV+Td0m
+:!H)5^FQNL#6<!5`MoH'kFB"^A9L"S=mb\@klhNTAfkqo!EP@sZ:0^T'=ImC&->*`
+#_<O3"5m8eBejRlM*WRqA91G+]4-X82L*R<LJYSB%#/SuGq900m-FuF<h9p+4XTu[
+!T6!CVc=dAKef[`ad,HU?FmLO/UZa7SZeQP+tm0:[21F[8b4qGhT.5R!FS"q5klHd
+qd"ndibh-.9?8I-BSE+2r9(B:T4@)\Pq^J8r%eZ%i)'0$3pg(`<-T#WM1cCji&1`c
+EBVnkdLG&Y>k[]b29*Y:Kj'Ij_74s68^E",P)$hL9WA=_i)gHin2^fafH(+=F!h_.
+L"%+HXd$bFP&Qf;_[^T<[\`3XOos<7'iM60,\l&)6F99B[]fh&6kBCg2?d]5YLa.W
+??E!SqRUYM!Gscoju@+e\9Tc@j<q$R6RtaNoNqXW<".pI3X7qN*A.u/WM"Hh;`\Z2
+3[Pr\p[-8sc)aU>kTG^(^G-sX-P.K?$ec>i-3SD"&H]Zh%tVMJ)k=Qq+X\%VG=%G9
+B]$GFDLUelBt!im=#WhOA*'b`84GYWc+F4dkkb,9d1A;M24F0nmCR/prN0./`"I.O
+IS)4nc_i7F7*HcBb]h%C=MjP//YLN&=p!b#B+;XDX?&q6['Tm6ps1F9MDBhQ`((+<
+Le_h`K?0.93'-4R9*giBKT&"Pf)A'XLeiV.Dp7ds5k\\j"0*V76WEH7"AV\4@mkQF
+:>@Yi>XegIo:l]q`ZF0U3s'2n3+HhZ"fC5)7KJ)]#HjS9O6m'(1jmTIlDr-)O4Y\t
+9IMSsrJl7^_mTYt1kQ*:LBtUALRs<RYV(W2#EL_"At'&++MXWhq8:'[Y+YLo5V"%E
+?"8J?@djF!0(BHUG/F;X"ThQi+U88CPCs_Y&3Q5sbmZ8<K7]h<V"Bf]cBZZpL&urj
+j/A70-3F@]<,,0/B>B@8;DsH%A+4a6Lha@/E&CJs0?$2_/\4rVif"*"2[*_MCk)T+
+GmYZL4D7hZ__PK8@%TmAM/?<&7Y)7N7Z^Ce<GlV:,g[l-qB`,+(#s1jB8?WKd2&_B
+VT1;AEL)ETo,CObRr;gp6;nG,TKD'g"(k(Li^C0$nFFFK.EN_Nm_7lp_uhU))T$+r
+-:&0ABP7NloPqUQ1%bb@8G@rFBue^Q,(:b+==XJ)2WG9+_FUe+k!pU\,G\QkE(2Oe
+6R0H#Yp)OH6<7WkeEh!N<(Rib&G.1/?9W1slfK/hng,G6/kuIIs)FMMK.aSCR3u^W
+;<2.8lf:Q)<]qq0Q(ep<-N,6%:dRMHA4s0C`s?M`E&K65qWMQ",s)%1L+e0[X_&OU
++@bQ_MFch?\'Z!@,&8WE[NU/Pej)@KNjL%L4u4MU.#l`i7Y%e]]dn%l/#fQsB`NKq
+$AQDI<ap*lJ,h@E%./(A/`lLSkCdj7AHZd6q\$V5#aQX,+?W/;!U/eNm2Q8e7/AUs
+erJ'1ZB1J%bW6pb!i"0HOQ$?U+D0bTj[f51C4+us>TqH^Zg#"U1Hd!U`(^:\+%B3U
+jV1(WZRn\[,Y8dIM<-W#`?sd=WsU"#BU:M"`-Ut]"<^I9J4p)a''sWG5[ql1Y,#I3
+Q3!X,`<3].c'j?%V%>s_BkHfhjFg$4s#Z+I42u\20ZL%Ib)"4.+G<!R_sX.L)IG2R
+<+<O)"`C_Gkru;VX)mbam`o@9*oC?r"^k@8!*72A7bV64c4ifDdghP:3j4&]*\4t>
+6N0+r^*/Q-YXZ'3lsN`>Z6N:+IjJ)W'L*<]R/!D'3:N+qEEkX=#[*"^8B(u_FCO%e
+,9(FD!!IJ+E$#Xa+Sm3U"i+FKTO7r=<65Rm,';PPP`SMs\3rp/0LAApe=pZqZr@H3
+BdQOSm<eqe;bM5JBFHstDO!V3`d0(+o>JmC%]M4DI+_J(.ftZEo'Yo6ZVugn.jEms
+J0<mf<!GTu#9[acJ6W8.;?\12JJAV;ED]"HU8DVH\L!n(V\JHs8JZ18]ELcOj>?UI
+(Gf%#CD=H\l'CPr8?nur9ZePf:H7HRHr/j'=MoD_@]_Q40'Opr5qXke`$ffK*X1J8
+#,$2G5]?p8?3Pj["ECCto]eK$&<[2"Kd-:Dj%bC?#XmZU@04p]5XR9A16jN'@7Tma
+KGRrGm),+'<"L\"B;/;-X=Ud*2+[UM7s@sq>u[[/%kA-M<PTr7(-r*o3M7Jt?r@2:
+D?g/j#JbWii+*#L>QfR4G4?A1cJ6'AGn<D4^!LS"_Y#iTr5h\n13FU(d69>Fpg,g<
+,O([jo=@36Y7j;DLI/:^L"'ND%a*o)?*+6Y76)ub@nq\_B0uCV^boc?>R',,#=*cP
+J9,E)>^!8"q!27]@tOCu?YX0?2*rSnbRSk_/d'UJJCK5SUV(j@NkW]jk`>TT'0B`b
+>i6(I3Ah;B-WhfRF<o?a4@:UT,u-qPbt]&K0gZd3^aF($6jAqS#BpR]^iN<P>&;8T
+[#gMZA*7]1,^>9CEjNh5Dl+]91I&8IG&r6;cP-Hs@25QA!G4sU[CA!P=UZQ6@#Ipa
+E%qmS<%BKm61>sEVcQ-XY\E0g^2\D*<C#;Y\jBdM"!AWf+DqGBFpDE$#JbQgomd3X
+-UeBQ'IrtMek^TZ:92="EkiamA0qD#GQsgQ"i+.BTMPc.+9U1O.(:6V?l4a?rH-7u
+_[l*S,qD_@<%5.g0e!MiGN^7o,Y8-#BeuIbF,t=ME$dKsE-1%a6C;fZ-snX)"87HS
+=KVlOC^*lBPYR$Ii\[DbQJp;iq8PsHV=^a.FQ@s8:OmNl+D:s=8-L,>@N[kR6N82r
+"p*6^"#)k._[cuaD]Ir,OG%M#9#aj\.;afuXb:#_,IT\o]MRsaH+9)oCL).%>i4#O
+-!600TPt/:EX)S]NW<5cTLWD"O,NHZjs%l78CG,Llnm7o,"e0a`"2uX79<P##/G<b
+[J,?U$Lr&aIUF4T'CBUgS@tcgIIF*af'm(7S<>?bFgkY3iWRc(.(eCsok`D/\0h"8
+Gs6EB3X5e^6FNM`KNB9Q#!d<qJ7DCu:@TGh!okerGlU*gCuCEmPCh8>VX,Q0-DM&u
+"Me+DTS<_s)@+'"#'q*j!*X331f5+\o"ZH-#_aL!.[ih!=p:YYY3Uq1gR;6<<,%V*
+iX48]9/2-D";W^!5V78<':_UKS:k-TC,h:\==(a;TYP(B!*E\Q6H(''U3TdI3V'Ne
+$7"IW4+k3V9*d;_4DCNX"[HB!+H-TaL'U%t#MD?HpdPF;9EXLLH0Vm@?oD(:)e:<Q
+!K/aC's<@;I1ITSUh/"d"0\N[#Qe/5[K&#SGZ"[I3)hqK7&@=N=ic8!bdB=F:dQi;
+^e+dG>=]4)"/_67dmuO[aD/9%2M-#p?n)7qB:Ff'`4B>C?n)=f?3``S!$I.)R^`SF
+J-Q'iQh?(q(-jG)R*W,+O2<O[24@;(?m'dV7jQE`UG1;'nc0'9-/]sL/qO6!Ki!c5
+81k!F$?<6Ff=7\a/mp(0k/T^t'TT3,'A>bqRkuP*3&lV)K?hL'J3aZ4IU?2@6@`4H
+>?D0hNX.S(#N0J(J8[s99<tia5bK*UWMr@J.KQ`JF9tiK=)qVoNO\`_D1e?q$+[/2
+08/&0"=(_C.nD:>N2)Y.VY0/aJeC`763NMT32A0:M3YaghM`YWO*<G@U])k"j<]HL
+Mh"b1TPt0EN!Q)7JKSh8J8,9KIKa+Q5Vt;g-O<kY".9]_!Rl_@.2F>5nRf<<_Kn_h
+UNaT7?36c]`F)uC!)^Y3s15j1DX16>S4]MV&10^U!TX,&8:S,sIDum[``<j)Red-E
+6J>g=$=%^P,U<GI"pU`OX'gScRq;m*A^&\Waac9(E#(->&U'lsAJpX]!$'Drp4qgm
+>)"S9]Xs@_(-0apL)[i0f]!(m;?RnpY_"KqbNAP1aSQl2F&M/F!%'q)f!'FhcW`3O
+S(5f'[KAQog7V*1K)S>R^8-9I"Q3eqG)NDoBEg_9?s2O*:52At9VdGf>4Kkdd+<Wm
+$X1mfb@l+M(nJk8#VP$P"$f2'TP*#:krLtBBS2YRI<F.gZrmQ-+lFo`lr96//&hIG
++m0e)6LVJ&s4OR"W\@7STHjWT7KoH$#8W$8!+#jZjC06%%OD^r&sd&Zpj7(u"2H#_
+4BSm9ms4@deG\6G2%S5Y9ETf6=<6l7^e`=h3/=\[c)J-O1<5HRfP%1:6&Kp#`%fo=
+L"PW^.q1C<(UVnU)?\%ZX$2OF+>a3$;iW_Y"s@(QPl_*h:]ucV`Ab^i+ueU@/M#Z\
+7fXY8?qOMq=lrXSeAh2XRV1/%ClWR2baIEk?rdDkUbCe]%]5rWjo.n.XW.8*,V'!C
+\i[&6br$+nhK6UX5Tg.M,hds&Em;>I=#:&oc39kF:`r\-%$Uli4?M51LT$O%aSJ7=
+07=e+X<o2T#Vr?,g?uW2pmOg<]9H@UDf];u"or/a+@PaL(XqtE]0tRM0):!:8No[A
+UkIrG?SLUqqE0Q"ij34]ha:lO"k(Ij7)X6MJ2RNXAaLjW"NJQJmQ#u:,,)=U91G3n
++<Vd,i,CLi$O)-U!!lOV)%D?giB\&hTM-L="i>g%HjC]"!!8l,n5L5?%$O9E&4o9m
+9dGff,LRE*4;A#'LI?b<Gdpd$&-d`;+EY=9%gR_pn;:2f*X`1fW5/IeD@$ND<U#Ut
+74&WS#6VhO:q0a]'ab)\5q(8-QOT_n!\p?ZC(CXT"2b0@#_5/^%0V6f3ol5>'+G2"
+Jmfd`:*mi8"C`MSF?16I"[[3roj/#[bZ\m@BH5`i=jo_^6BOg#4rF]\Jedd'EZnYN
+"*Y]T`,Z$mhb(&X$I6q5)\J$AJq4\<1P(>2m?MuESt05u>\\RG[n7=2XiR:QlMsm9
+jg,*W(;6QS(Y8oIiK?3Lgb'Z[LVpsdc3(ge#(f+U3"Ri2!([\)/;j-3",OQA$3J#)
+)!N<]HlfWrDSor=1le&#V?-d+<1\b.j":V;:O98UTZVSRUB0YDY0]Wm6U]e(Y+.P.
+\;;%X&;?f[:=]MT]J-%QnMhNq.hM7c#!0PU,kNZbe2ZkXb3HPC!XfCYZE3Lf@jT/f
+7&(F+aBI<o"0]L%&qVX&]"8!9Lb9-2N2$.Z:I+D1%EO(2bm7!V63mgt91%/B].G"B
+-FCR=<Y^=>84jE6OMjp78VgPC(e-$7UF?7pX\,q%2++Uq+HagPNhG<4/.[FX3(=G]
+JB0;e7mI.+'Wn`e)]20ubta6qW?\lY+k?]2/_$%8bu;cJ;QPX&&Xrjibs65!%SbFI
+0/tT1L_pDLe$(_>:>k%gaocj$1(:7"0J<>Sb&A1'>ng7P(SGNF*oVe2868E:+Qt[g
+/P8A8Ee3mOV..)f\2/8[5fbXb/?_17NP\JN?$l^1^dJ]cJCO_/8Eb*@#[:'k+"c-1
+,es^9M*7$M[.2\<$>91BqLRAHA'tYF$amDJ!hdfgGllS95B;?/+>Ji?fZi$L!pmEJ
+Zg%l<n:G"nKPMDnq8-Wm,TqFHeHFF,3nIf)hI;Q$er?C31;MGS&&/eGSW'YW9;/b.
+8n-EQ!FV*%K]>]]@?r(;5*&H1ZJ*d"eB/0)gnbM;G_Z=8Ne&Y:]^e_-!")2Ske&rQ
+.B[/X1Z5B?bfe)5][rn!nn+PV.bLQ)K5ku-<+aLVj8;*md=^Bh8.pSo^?!LOqlFfB
+Jo^U.MWpf#pV9(>`s0ku#i?/(Tp0L3#_Nu5"#*;(k:5Y;D*<Z29GqlM%Cu_3joC=;
+FUS,C,drT)fP4P`-@#,>i#qER-kIsWAFq\NM[!"gC1cjeiif*%WmPOd,AU<B&eGtP
+_"iCQX=+C\pTf03BjtRfU%gRtrgskijT>u)76ZtXBhrI(A#sr4&Ct)a(F&u[lA:=Z
+Vu6S:C]QoKA^iiLCeC7$"aprtd_2K5H6Pok-Dt-GQP_\u'N1VSCq^Dm1/.oPMDkQj
+m&1I>$OOn)%0FaV5H"!-A^,l9F^QU%T_,st>MJXR$2Qm-'#rOe$/'U#ADjYeVP;I(
+"':BV,slZ`W"G^C2c'PQ*Tgt.gHiJ2%YaU?i\jZUZ/LF+8i)eZFA5t#1dr&N/0ein
+@&&<L3WuD9S!F%nA'k_dNo]bs2ro:\WcNeh?:>Vf1ma['(eTZ@:SHg[^6M[&7dBNi
+5-ms(Rm\Q1%Xq>OJjNP$MDdE!Q(gIZmjTQPLe_oOJ$K;sD[kdoP`rO:\u"n5e7gfe
+B**<3.E'/tbNL:meGks@6Bm`T(lV=o'?-5=UWO\gPB4.XX2mq!*c\qRjKR&R\jZoO
+,G1@PgkDFO%-UHS:6*fg>bq4!9*n`H:*h<@1R<-g:uoeC^b/I,A59Df6tE*QRU/Y/
+=">Bjb&g$#/\g=`8ep@dV+n+Z<dKq7RpAdB;O2OVfaR&p;m;X1*k<#[CD;Uf`cM?o
+=<7PJ;G,bZPk"%1:aoIFl>"2/<]7'Z.Zm*?%:?<#!/Jqe%9dSuJr5;O[T6#J9GH_K
+YGZ?o<cp<h8M-mEUq!In]1lPt24^u!es79+G@Keo6&rCXQHJ@@"65eLW9Ya9&6i'(
+XPM&lopU;,l\tfK4[UoH^6d>oVL7^13bL:`g"6[FG\s6([:H-r*>0Mk,*dJ^[k?IS
+aQIL.&J%L\T#'*\"*e-m:UCp9SQ?3Ap.ggi]9:D6h29[(m?(&S=>o^)U005i*JM1*
+)YR-gh0[Y"_F[iZRo=Z>IB3m2[FUfFcWd*!;:;\>kAp](X:/C=77kDKIg9BHQpYg%
+G./;d[p*W8L28<9_jAK9>^Sm0YJ)9uGW_C$bV+1:VE1li$L;1q@RosZgp!08)rTLl
+9JDIh_b,+pjW$FM@6R-)3?mB8/=0bL/^:",TU&k$q.T7,e]RY&<u<KJ;)7E<bP-oK
+WSGLODa@+Ap/_Z/m"TKJNbuLu-+2nUO.=L]-bm-u3FtnYG]A."b;o_9@pH^@DZ5E2
+H7'c8]IR=\G(HuG7&FS>nYL;T,/ecM-L5,.PVo%W`HbNK<,<:ff%sW1=q=?mX]M4d
+h6t^6P_EljO-"I;Os1h(_J?9TcSb-YfDBNBCb/M7o`d"`HRD_Xblq`:-IC%lA:T1~>
endstream
endobj
138 0 obj
<<
/Length 3632
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVoaC$V;$qB4W\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="6+"jG0oASXTP1]G1`$WH0sPEKO>W-@b(N@.;"$LhSP4d%
+TtKH3KcA;!_\'QO6D=nn[#omSD()C0#%JT?&<&>r_I7O`OQ9Y,)dB(i+`PYH)n:b7
+-IW9kb&];("U8IFUu>M!)2q##:2kE"K&0p4_/9g'3"QHe,Do/EW%EqIDcLi1TT!SD
+(eob&aJ<W0'FP$K6U?r%@lKm2,=-jQlmWe@%&Y><Vii1X=*T+!3L&HC3ZPUq"!PDs
+\.BZUGlHS=[u`Tf:7Q2l<8GR`QqbUW20dj6NSsk8/rG6YEn(?:d\qr$^h[][N.\(K
+r&]egg+pE\ZZ=3KMZDTi4eVl43f]0/kSHKMS!kj].SrqsKe@/$rAtKfR--L?OQ8Gj
+0<9'i4AX`.3Bur\*?IIb-lOQ=:iK5c$mQV@)S8`hN%QAAYh8c35m3i>8oH6*2ZsZ<
+a:LLP0[Mb4+d7F<KEH$91e+bi(ck#M!:McR1M`HB\hSSA'EeMGhXErDJ8c20NoZB+
++K1b$L.RPIj:m>W]O'YZ:aI6:+Uo8,_?N[fC:GaQX@3aicGF<Vc#[^Y1(6N%%9WiJ
+K-`'I/?n%fbj9#[oF>gJLbQl4YWt#S,<Y0G4sPmL$n*q>^bLfZe*]+odk$VW07e7<
+*7XIG'V8H"khs`T!c[#l`%Qr/3m2^5j_RWnC;h\rZF%_b/(SKTn^irR\M$0FS4=41
+JTF)gZqK%\(F\ZG-5Zt%b?UW3#]gd$Z0[Aqb-L%P1,1sLj#G@M8fI)Q[$[F7eM"b3
+El6pSJhS&on7uf/\C_)5J_PgJIPJJ[Gg>hDj%=(]NWYC##f:XB`3<Q8#hh6nUN"P(
+Z1k&=0W_P'EBoJlD;P[mo#pJ&>R5c&NPUUI;6ITl_R;2P%E?.o%LV=fCsUitV*W;B
+/29K<n`I"dM4u\Y+bUbih[,<QSJ'K#Q==X-9Wq+?1L>V4bVG,#D'((GXf1GE^-+6b
+1fr]hYSQ=]:u&3L,FJ&k%&7ZGgd5psbchTFK:;aTBhQ-b6Na4^le(aj5V[&\413Ve
+Tgo/F?P^QOa)b@/nPJ4ITP9</(s[H-"W6H3O8PCZ.*FCTSYOu"fiV-bfl0A&@Dmnk
+J3ZIf_/CSFps]C(CrLt9)a5B$.tRcW!D-Fp/`>1i!WZgA8<>hT0MI3)(bl%Y9F"Om
+,cDW9GRd80219G+-BO=L:-qf+%7EGt.WjT:_It&"@<@9Z77LP6&uR!#*0S1KP!pLP
+4]&C)(.AdPWQ?\6,3k\s"*-Z+_dEq3;*H;((rTWfHsMV,L)#ilOVQn5@u4's0EBIs
+"(36,#3;;26.jp.:,sU(i?U=DTKj(kGR]>E4r_Mi6H%o;=cF$=84Qe^'r&WZMfD':
+7gR!Ldr]JaP%lhm)(cII$tY:$U+T&OV^:EjR>t0c0?X)n.&/UoPVK12'^3sT#Y[sZ
+ddC1+abLkt*-s%HU_t)llQ+%YG("+!L<%.B6eUFs#,'Y@P#<>nc&&>G7.Lm*=9J_!
+S6hP'!]*T>9,FA)mZep?;9pYU1Lj[5-%l\`P&_n,VUXBHKU@]p+K/&O5n4)4R"<*E
+rAs'LkQ\CX<mM&L6_bq!S[;-I:Pk]-k,BaQ6p;-Cq6r:SiR+?<"G*)^8J`a_-)K))
+I+(+=.-\,5RF+cC:W]_'_9!ptoF)EGC0"1Z3CbZC68MT@BcUr22lWXRNmkMU:MC7:
++lL]b_7C%HC+SJCJ2A/_H%/4t.BJo$=tnNr1JTGWbc9.WB[>+'7)>NTL(t+H<WlE"
+^hi1r^r3$?(lhP9jb/r-[@@>G'k*r0Nj,m>]$pJZ%#@',+SGB,d"#n!,+p%_^uib^
+QlQmC*Mp#oDUcj4,pr"qT!"=SO\Kd[%"X7R[!$>*51<@pktQ]47F':LHX1(I7E2c0
+g=BN.AL-[mCUR5P]2C_/DJgn$X9V5A7aleqXu`Da(Oj?S7WE])L![LK;VG-OYAU&!
+6mC6+iXtEbBs/GC]XKZD?`VXl0D4\42;W.TJip%!j^GlV,T@>r_eIXb%DMP=d9u;?
+C,!'t]!g>J>GIrj&QT8`JE59`CW.!dSgCBFitU9oB8^Yu+N%_c%cTNG$6]<l.L#\_
+@0iQf0j,I9Ge3*L4C_r>Xu*a'!sG.<FXA>n7EQ4Ji^j!(-M"RMQW#*W0fmoMAHlDI
+ofes;L_*eDZ"nop4OjOd9`pu/'S=]'%70,2#GD/(KNZ;-_Kad*LeKIV0[);&d*3"c
+"HA`?Q;$DM4Gp&^J'o0>;j&=XCpOBid@!C\arN(0DC&l$\W'PQ/'Asnb^7GdqVl4'
+!^S(TX,um!7Hg4.WO/Ok#8X>dl2>\,UTU$6H&ka8#u?nq-ofV[hbWTe+/SCQS(JA.
+A8A<6[<?AiR//u=bUJmTFuJ(/qc[7l]#qt\eX!Z%g'30H@:pqbjLA/J#Ad\X3]F5"
+PAu>(DF."2G<G]4S#V!)mG1%PN<Z'j.aV%Pm7-<:c_!<]ABCDlY.$l3aVVOOn87'+
+lP2seTYd&_b+$KsIbCj9U/:2;aicS<)63JTJlEdSI#Dj7W]Pi[o=cMM.]4lO<DKC^
+*X0eD9j=[2hZThDk?0<r4K6"aT>`kId%nuhkhE#2l)OF*/,)'*EO6VdC[Wb>7qKP]
+R#Ug@Y8"Tl8%lDFgY%QCDtl`\"VuTml5K8HqbM^PCuD)^GtFu_(L4Z+etm>DIGTd'
++pO7k*ql3TOEB*@e"+D$F$;P=4C^LPQZKm&PF7Lca)D5(UC)<rhl2$1Vs,6Tll<nT
+=>-;CK>?Y`HCZST0AAH?hY0op^O,.US^tfRc>ds_q8fu1HghV=9`0@m#JQM=q`ZOW
+?&H74q[Og&nlO^]O3*)?+0YV!bKp*i]`[b!3VPpt_KfLf4['/krh$7ipFHOI_VWhe
+Rd'2bpl>pE9XN;$G5Y-SfI5,4%lW(Bp54Ztjine,8b@Oll39kZ0G"<1K3$7a#gPsn
++Xf*s+t/#Do%hAVd&d*Ib<hbZ"?J5+d-(ha9r_0pY)2/&e,g9gX`FaZ*7L`[#>cUD
+n9Wd3:=h1cU[:sWm9'\R*Xl`cegOpg#o"a@E45(.$';aOd"M"0OS[3X#gJ27E.!N3
+blW_h#q`(Y&An4H_TIs\KC$2TO=$AlGi%r_%C#EXE7YW)MMVkRq+]MK:-L$L<pspt
+hlV'mXn*#6-Ju&Z&s3I[:Qi03$FF^k/]N+qDT)A]0+mUNUQGE5ED7!^/JTtLk"B=d
+nMJQH35I(Dk>#Fq%XSu\guWEH%;Kr!Y)`Ic2!31tpCT`r.U)$iOQWm6&kZpWZ$dN&
+0)6)eY7?m9U3PqJFR"uZl3c&N$D?[HI2l+^($oP5DSI,!E>\"rclc`GCQSn-hZ#*E
+*cRMgd0ddLYTh88TS>/0lTG6+La,dT`8sc;Om+"uF!4EOa[.6WnbV3!5.E?N+Y*jA
+XF2;`&h*5!,>\7Xl`MF--M21C)%/b8.j!AZ&L@m2^QM_EZ;VDKWkb>SI.!IEJd.4=
+(B2^J*g1^#.&A<^AL%Y&+me!u;G/%7\K2&i$*`:s0FnY4fbI?P'_$ke;!e\]S>5'F~>
endstream
endobj
139 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F10 22 0 R
/F12 34 0 R
>>
/XObject <<
/Im17 133 0 R
/Im18 134 0 R
/Im19 135 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS8 127 0 R
/CS9 136 0 R
>>
>>
endobj
136 0 obj
[/Indexed /DeviceRGB 255 141 0 R]
endobj
141 0 obj
<<
/Filter /ASCII85Decode
/Length 977
>>
stream
+s8W*!!!!9)!!!$!!.P"K!!!#6^V9c`^V9b55<o&BqtKjZoCMSBn*fT.lf[Hoj5]1W
hr!2CgXk'/e'ldlcd0eXbK%ZD_o'C+^:q1i]!f&UZEgd=Y-+e)WhuYjU8"BRSt;C>
R[08*P*1ugNfK!SMM?k?JqAT&I=6BdH$+7PEH,u8D/F!$Bk:je@:<SM?!UT9=]JI%
;,L1b9he2N8OZ':5s[e!4?PS_3&EHK0JG13/1`1t-mU&`+<VdH*#oe4(_dYu&.fB]
$k*CI#Qt85bfp+Ch;+Kebc7\CAnIHTGBYi!AlVi2s8U=CbaH\CB)cI!1]NjC])XXT
Ai"%2RK*9eRK!6eh(o&!bfp*TRK$l2bVM%es(9KC!+qX2RI9M2bfn;C]=WlTLdXX!
+sJ62s8W)trqu]lqYL'aq>'dZp\"4Po^qeHo();>nF#`4mHs<,lg*g"l0.?pk2tge
jQ,@]j5JtUhr!>Ih;-lAgtLK9f\"j.f@SR'e^N!rdaHRjd*U(`cHOMVbKJ)NaiVTD
a2Z-=`5KU2_SX+(^q[Y!]tM+k]=YYc]"#8[[^NWP[C*?IZa$d?YHP.4Y-+k-XK&;#
WMukpVl-AfV50o_U8"BTTV.mJSt2FCS"#n8R@0G0R$O&(Pa%DqP*1riOcPQaNK&pV
N/WXOMMR(ELPLY=KnY/3K7ST)J:N0!IXZZlI!^3eH$O[ZGB\4RG'%hJEcQ2>E,]`6
Df'?.CMR^#C2.EqBP(jgAS#F_@q/qU@:*AK?=$rC>[1H9>$5!2='&I'<E2sr;c6Lk
:f't`:/4MX9hS,P8P)KE84Z3>7RTX46:+")5s[_"5<V.m4?P_e3]]5[3&`cT2)R6I
1G^a?0eb:8/hSb-/1`;%.k)nr-RU8f,paf^,U+EV+<VdK+!2LD*?,q:)B'M2(`4#(
().Gs',)#k&J5Na%h9'Z$k*OO$47(G#mU\?"U,&3!s8T+!WW3#~>
endstream
endobj
143 0 obj
<<
/Length 573
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f/$F(sHHPTrM]V)iY$==PS"s7%4V);p"YGD$Yh_"u(<3:(\3W%O-Nk
+Kk<J(.NRZj1F\PR5rK_-oZ/9rTaQUr@SlTV^g\po`CAkGaPOX8'G+!U!biL+6Pc.#
+-F$6(;._MO%-I/DV!)JML^s4-J=se53#mq@"*r,5A.TT=3'hM6Q)u;P9ufP3YWtl;
+RuPFO51IGee.aX4&W!)b.F-l\V^#o?fI[f(8qa2Bh@iB`i!sBe.AYe-/lIEl;o-A;
+C$+dDrS[e$nn^3$9LcoJ[)JZdaNUM;H(T7@%3p3(2iPQTpt<9sW89S3j."9kN<*Eb
+)mc^RA<+5RRbEV0k[7p@Ku&jc))''XYeUSJOAZu$Tg7HhXJ7#5krOB357kbKn65-$
+8jH5A-,B]i&2NQ*@N:./G`j5+,+,7d-`^tm%Y:kbDMtLa16B:0U*F^oZ_OiG(6#C]
+;&(U46mUiL@XDiL%Lm)k,_`RlB%k>s990tlU+-@tJ,~>
endstream
endobj
144 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F10 22 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
146 0 obj
<<
/Length 3732
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVs3*\-SNPkp=Yfp?2)3!NDctl/o+?:=UUa!U)
+?:QH\bi^\]'X8s<(r;r!J]Q\X2B3-7P+efm/K.-7&W"f@DDW.=A.g)[&o^f3cH%A3
++f+=?3?DTuo6IRYD`glF_a164Q7s7LlEe#1W#A*Uae@f?3&V7=PFA0H"2#g!9b8)`
+Yk'+s5\Uc37dtemk1h)B%7ZHWY$BTg.E^Rf;8s(^%FW@Q3aA1kAi@ht,_`efaA],R
+:ZsVjktmWJ,@"Y<EJtu>#E4VIj'g6N9<t+Q%]:P&]]Ne;6$X$?A5?29)+Fe]&[:7W
+3K8+a"Tp3pc!WGc$&&EtJAQ1XRh$l&9[MWT5/@6]3"2Q1`\]qJ8C%,BNm!%'40C>6
+ih6dMQDlbk+AaMJ,B2L!5D,IGmC8)'$kPNEMoH;4_4mUp,[bD$/W:kjhD1&+87WWm
+"#*h;%'SU1((L]D%Mf?@+Mp,ICB.8WK`PTD3_0>Yg+J$ZkWk`K8eAKH%"eiL0Zm+s
+TG@ib@*LJ3&r=alaH?PG2N@js;A?UBq?l1CLhn>n3=rMh)`;TWFs9I%)!!N6"/+*B
+`,L;I'-_Ei<Z;5NCgcH1Tn4nU+\Kpk.LcpP5VinFE5tI5i<5W2%\ohO&.X=Xb5"5P
+"MQc',B1gPa&?YTSrB]:<]%ioi9]4=Nl9[R%I3041X=R)EFab)i^+Rm@n=a$%Z.#t
+0a%S)'1Ij[]^Xf+!Gk`oWlTLk)$L*N"Tgs96hpo#+`K[X2W;GK;HE7UlR(?Uh6UtQ
+[f+)?8.Z'h1b8a%>=T.1^+qC&DOkZ(N7FbAHbcjJ'7LCX"S)bSJQ:nqe@@H\3RL2g
+dud]*g_fon=W$$uNYR@9O?V"nnhsTc/T5J`j(2cU#-m:gJ2\2h9r$qtAs[B!cYU%^
+"h.]cQDjHF?l=]a$?eK?3Lg.,XFhhBF4$7`!MWW*c1-uhFE#5\NKY!j3JVkklC),7
+/+WYgeM]]r5TDqEa1r(kaa$iO6jJmk&d4[-X42TW2f;mVo4V;p49YW66YPY^i&DcJ
+`/YI8X>9&)UmG<Wcd)Qpja/4d^t)C#5VXfk1ie@X]E%3=A6`s8X^a9m`R+j?"0mP_
+@?$_[`;ta!(Mm/gP_6,]*_.>_\o[h3nLqWn&E4G<m9a'+/:h7krjM1?faE(9kV;Xu
+TQ"UHE%YH"loCp3gpL&,7se&mC4aq<*D_Q.%HkZ_Q1O'bP5&`dcnlF@i*-JN\O@q9
+)?_\`'NLC^(Bu2)H(.92HWeQ,"XZC(Z1SkMe`lm7WJE790Z+/sWV:9rQ5r1jE7!;?
+Z$l.*pn5YE9`qq45nB7([\IOK_*f[t!L<X<ja-3b'8[1!6o'M9r9RN2'83DdVk4e!
+q\X<0%'aNM5UT7IK:>(sJWph38@Zj&U"F_-TKFgU`nd6.@#=?W[YIfP%\e:39OX_T
+76(3sRG-\Hmd(K.kFNO.$B8Q?alGlZF!9/1#Y-EpVCfd"\/fnqNXUpS4LEfZ<Et]%
+i.*V<'mctmBPi-UXG;DZcO8@#<ISgBRNOuQHlSTW?I>kP*B8`q<D.@ZX#=@@-$0J9
+.0Uo.%#+j/PRUU.,$m]@0LS>S3s]OB#2n:dbltE`fmmdI_4clOF:*O#RT=5YWb3%J
+64O8p$%ZXWXZ%QI]r4TQN9$Ze1%mqdVcnKm^s!c6_W<o_RC7f>Bh9c6-4G^[o3RHn
+Wj4G;)ZsJdIl)!Q[qLH^6^,!'-=LSBON^h"''Z'I";D)RJ@cV<mfj!)M,34SFPm8K
+G<rLD.(*hGS?ji&+Mm\1OI-A@BJg#"1"eqUbrM92,CW/I&CX)O_&/-,SKSo5RW)ep
+JUpCgj]nm=MU+o92(^:06lai?a&uK:.j6Ml=Y5JF_e$a4J5#p"5#pBB6&DYI[8a]I
+Jp,LP(ilQ$MNADqqGMm8Ts/Nb)_H,MN`fX=T*He\dTZn_'g.X\m$T`CHEro:)mHR^
+oS+5kE"%kG^Tcf<h'^`8e3U3rVFJtDbNG>kQ(W%="FAAr,!=Qg=<Ou)=P>+5d9;*W
+1^*muTWsbq)K2pp;+]#f4dh?*jjc4rWogk2G^-bpq`.>Ya[[p@<4`Ti1ki.`BLnDn
+35IoJ/4lqe'1n5(""R;I(O.XHji)J*$a-#Xe;(Q(0S,,VEd(%\"!@$RSZMMs_Jh.$
+U+4S#lW*PjXQ23nV/LkFb>bY4cN6OJkc'1]#m:_ZNNZtWR+@aW8U*ATj/^]<T1CAg
+/s;bZUC/KS4aX_i1tYtCANrhV4[`<o&eN#E%C=#._RBU^;jF8:XgGj]f7X\;2oLN?
+>4*WVll:X_^P*&d@g7*7)Oj\5SL['@\aIR</@H7U_an2E9ksjH.*-loo?^g_Fs&+i
+;h@;Q7OQ@CXu,_UbZE3Z`V?&XB#%]*[!W7gg0$Fk$4),:1f'1ul;0ksPdD*uhk;OB
+i6H!=%>,ci95T!ZY<m]*l=M[Q.m0G&L-W0b%Ng+-KW`"2>,i<9G0h(i6,DJa%RHW_
+R<:kM9]01P04f!X!RfI!%6T\/#,5m$dL@95C8n[oa.#X$o$#n*^eq*jQ>#e.K&,u-
+&`dr#<RF`/bY7_?"=S"n4^Tc@f`iD-n<C.cFQ4sQp8.ssAUF00PIla$RO-#`-.j")
+_Cc=E7XL;LP-c"Lo>$kl99R,rm)7!-$@,u18\D\oo+V<IJPpDO8Q[rk\AoIg"WMj&
+)]f'?9X?!TNnqt:F*/mb>]:SRQE>;.2(WgPn_SU`U!Wu7ga&@U$E(sQ[H%DGI]_$+
+(o+KN!I-LshB3^3HSV6P2tr-hj_nr()[:db=%PmZWkT!dC%\8>.XknWp/WI:YTsI0
+kdeCE5or2[:sRac_EIA/))&YH8W801I-100.GO="a!(iL91c#8NrthZ^o@Xg>23tK
+ReneKCU_sm;G,*T7N!f1HpGRI_.R!Y"]/32^%_>VFGE-M6-lcG%9!:_@nn9YbWKRX
+BF^]RWJn3SaOXV@?@X@lfk)@Fbd=A<SmI@baXMCg#b23S[esj`r1nSCn'L$OK]b"U
+kQXB,Dk&6Ek27M^8tane.Nme'Qp.SY6m,6`A;'5[LA=U&OeTMVD_blR$Hc'?F\H,3
+TMfMI:lXmdoP<#aJ=aa<jDZ7"8?<g$kreX7K]$_T<T(esV^>KD4FZJ%7tV0"%=2iD
+^qU>SF@j4"Y_7+O[Q;DZmq/.nYBhVBM[@Lsc7%\[V'JJrQ3N<?c627:UNW6iqOQY'
+D(E')!dn$&^iG+"9sCF%mN,V*K)cFF4tW?s!9cI_!/]^N5tHT=0H=^oqQFH)3/%8S
+"Tj4k&0iCS<!1VUT^_<.(D0&-,iU(3"2m/l!oDjQ3+HP(!3QJLQGY;o\-Y.Vn65C#
+7_m*N<iDTo5\((]Pjo?S"9?dYT[$U!`^#Vh/5a-tac9EDbb0i42WWR%n_@HDo,@[E
+"X9PJ"_)3+mL3[VR?'n_/fKT1i!CNp#p?1&AB#$I3,)t/$:'1L+IiVnL^HC^+J=K6
+?t';tV@*GF#1>@RK&?gJJd?m]:<;;-9Vr;SSuIesAVOGrV,YOqBZ5ltlt<1rE/Hj"
+Sq^Y(#lsW/-d:K7pDG]OrM<a_kHt2)53;5[N?rU;KC04Wb\PKJJ)lo.nDo*g;Cf^k
+%4%=jLck=LjFC.%'90OEd%7qI;ZH:O#pacSKRaOTl<E8&O^c7WK<"t\6HMt*8YsYX
+N2!@<5c5a]%:X!PJCbhs`)NX@I%p*2U&k~>
endstream
endobj
147 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
148 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im20
/Width 156
/Height 128
/BitsPerComponent 8
/ColorSpace 149 0 R
/Length 16083
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J-s6siFo;l+:e_\+jekh9I:I1`583EUeDsEM+#3_i/gJS&B7+iED.8Z-5HoA!Kcem
+4<>#i"9P8VJheYdMZpGl30FIs&rK+EJNWQm+qfd+PEBg_9HalMK/Fe(>V$bn#(rVb
+kdX_FP_[/n5u<e.)@Qf2JRHHi/e\NqJt]enCcW`%M*p8VphV]*'FG#.0i5Me+/H^1
+Y^(bN)%Mo<kou6TPX6Q,#t/5^rbb%KOi_.@kt%I)/XK.CF'QZCFZc9tKX=j+Qpr:4
+$3d0GaL3Zs%<+Zl>.nP70>WNa6/`ZR8S>EamC&L<b30`R="bFAh=gl"K*j%oaSh;;
+#00Cln[OhgLa:0`"<n1:?:,ft$H4tb7&s)LV?%TI'*IJ,>b-Sjl@+aM#lAT;"JK!%
+SMHl=2W1TmZI5e`iG+kpV;Vb6kUf'jfX(_\U>i_cY0-/F,@L:7%kk`X+G0h@8d`hU
+akA-S.u@q!LEf@LLta(=#XYd!&o<ek"A"+oYCs_rr2kTZlLpXL85p'7_'(?Fc)BS8
+Rf\78'*R/=:qMAi6U8"<%KjOt?5/'TS@&%n^rk(7"5pcF5=J>S=q-+B`+"Bdi8T@q
+7k`A:au="8/?UL3";m1D8@Ul?X'kjmpk09Dp>/Ed1)R,_;W;%X2mWT9JV@pHk;029
+.fpDO5qkjD_[;pn[KELJ@Mje41JeYci9^@LckI+h'WrRakeGLO[=%XETd#0ZW,1*V
+8d1?u64M<X-pis#LtG@4<']q4%AiXFPpN@`aB;Ii'LJW>be[5LQV:+u>SJJMF_b55
+8SVY-f8D-SH%Sc^i!QL"W%b@ViJ;$5frE[kQI!`f4q&o_-*(h<@,c"L?F4Rh'eA60
+,B7'dcqk:`1<;SR1^rFaOle.D6[OI[bOu_'Qg1?*eY,f/]3qbn>`2XC>$nDaT^j/o
+:D'0IMZVPNbDiA"OC82J!8AJ'A@m"]WPp!I1^aDR6DKkr%XmG.brMPEKHgtBp46jk
+R^D3%D7VLJ4Z4nlH,-VN4f&=L3m&,mF7rl7KfY[50a2m/+qql;22g"fgq$J-2Z*I"
+WU-sW0ffF<Mod+l+T&LTKK2Z#$?"V<;+AQ.KX!oJ.MT[g,43*]RY:YG1;B\KC,#4`
+eh5mqhI,u?a'7DlYKc[3^>7-=874EL/0)h^e6lVW=Vi<>+AU]u=.[J:?*G,9@"]@X
+'"78dldmfVn>ZMN.c$a2a#aeXJ\U:Z8O7;K+mZi+)D[*S>FR6'XuYo2\%[#eUZ2H[
+P`hO!2?ulAek%![&Mhd^blLsA+tJlj5]g94_!)gb6sYqGQ[[cK"(cmK-l3J?Hj11V
+IX9pk&Ku4N"+[+bHg`)i+p\%35lpidi5Hn:"2oFjW#0G<JD(rp0]XB6;f[u"()?s"
+CsIX`?LZAB6ZaT/M537f&H2MO"!j%rPQs0#eg3647!T,kLi4Oo.2Adr?]_c4M_GJ'
+`POh-R:mTD#3Zmn68od5;;itoWK"p7,o_iR-$uJ+3=s[^$I#6W6:EjJ!VH=3NPp3M
+"SeYlW;m7Ncm44b#""HIi5j#]P"l>+7\;qHJ=15;G&1.?&ATuR^pI6SEcgXZWBUq?
+&17Xs^_e326JuES+H8cHkRn#l/<mtJB[YQ/^A2e<#rj=9"^nm5=bI"70bdlcY%.Ta
+7g4`jrJ2_E,S5hX$mq>W.a]dZJu"^D%`fKA$s>V8!pI;O.;4W\Q$&G1lq<TplNP:=
+b7nti4Cr!o7L%MgRrW&$BZ&[jLX'-\A>_(%#T'/?##!<q!`5gu';<UCFK-\!ArOlE
+BT+fj;7&17NbXMde;9'Q1pk3Rfu0^U;D9`/A82j(,YSH)NZSp(7:f`q"0DRXV$_]/
+=$lRdmua(aPP6^2&SV<>C:dHoRpg&hiMr-ZM\\-p<g$pd>m7&j(9).(;5IccLL>du
+#4cq0aaZ9'KZfegLeJN]*CJ?)T$!3EDrkNk1R7Z\,RP`]=,Q_qEtKC]U7@eT`@8'r
+*lkTr"B10t<FVc6bH$oHHjEWEHu=*b-f]r?JND%BjM!$F1^\*e4*b!;@73b#qO*T]
+9g4I)4BGE8D6(VG.WX1e'QQI%f])HF+FsUO-s'hN#mDLQQK6]('UiBC>IgPonK."l
+]aNNq<(W>L?rQ9,-)9()X3i>YgB%V1_0oT%M8H`dZPorNfd=g04MEn1:eBmk^XDJ+
+=-jY[&9\sFZs=rXJe;u0-41sL1mT4SB^5)T!]`_K$]pm#PHXZ_<p>`l@QW<=JMXT2
+=Jd;SQaYZ^biFT#BfrHX`>al*,9g+9*KY)aI\N87a>Iru/u.d>84d<-"ViL$7PY0L
+Zj%hd9UZht.(SL"V-W9/1h!6Kj48$9F_PD!4"LXA>C-!5NPRYb2)):?GoJOrnD#-f
+)if`k30cA_BuU8qStU^?.u?;2V6'khF<[[f)BCk$e3I-C?mdtg4eCbFDNaTLQ71t6
+=YSkTOOYl[D8:Z22Bs,P+mFK61kBtai('f8Yol;",`ac5G"#t628i)_$0ufjE7o*4
+8.$K+_fCQ.;R&Z#1OQgG)dl5%Gr-nG;f5ktAA-*!2D9o[bRl$1@rAAU/C>=1JZ<"'
+G6YU%d/'dDnr'm`,hF:g3t1QE@ZGYl",cesk%sU_`K7[q-62,1ZXSbDM81KK.m^Wl
+K,_Z<(CD^DVf!5.EI:H*RoALj3>D-TV09jej+pg*C[C]Ck:&$>b'm2"'OXGT$>*ai
+mD>9d2FU[Go&b(_1)0nGapO=q/"Pc_9MU%iLsRL4APOqLofpk1VK5YfMgcS-ULgWo
+rZXoe![O"E.([gZT:h[>E>(4kr2.%K;Mb(Jk(&WIRYc!\F:f3HceOGQ-]3S.$S3W$
+gt8TT7Cig$dr^Je94/V>r>G,D*g4AN2_shm\D[/cRi@1?"ssfZb]5K,@u>S94"Vgu
+<Na=)eLJ;@`>jOU2:+[hnmqFM-=7SdP2;7_(1dgY[%.urnamEE"QWCbX6^b":P@rM
+?6kAbq#Z9R$bC=I.XUB25X_-4`I>UVdcZ<VqTK4Z+r6%`/m3k7NR,<^?pHM%6rs`h
+MCZtkUM_8.P.W3?rTG$jK\uq^1b-H)]:^cQ8p())OH/?Xs5aCYA"HOBB''/L=3qGh
+VWPX(qu`rK;t&)cl:-Y%_"3G`[O8Yt@k8c3AppME8[(63M*>^,(;+Hq>Xt79:Y>oT
+JcfIK8S$bi0Q)CF0Mk@u/u!_AU2hHQ1'DD3J,h2(_j!WEf)UCQ!6KPPO6H$<e,t4r
+p4Y\/if<n*k-%3G>i^Ka7$a-kYaOt,`"#mna2Ha?>kC?"af4V_crCN%2\$/.cg]eJ
++=`ROAkkdfKlHPm/*aAeCnji-/B\n:@Y?LjHm0\!#4"8JOPVYtSmErh-,Q[A7-%[.
+8rBELBAsJDUAdDFE&5BO4Xh#i7.P9VZJTL105>eY&Q0s4I2-_e%?4Qr5VS$;.!Uk^
+UI29NXU$=iZ7?5!(S]4Y0aS[jE>You(6EDa#R!04=s`>]e?N^'0r-#Y5ZjiSC#aqN
+K/R$%#a@kRV@9ut+rYNuL7.'[P]5"j7m.n*>92ud%T2?iEU$^-38EqRB2SA4-ikF7
+5Vt!/19q,hlBIa!kohTm/4?j:XO@q6_Cf:12ThsKLY@/#g;&Gs'/DPlCJ$MK?oW0n
+UuGiT;G--B<,Mcj-#hZdVTO.6,q2[h*oh#8@NriaV^YMcHRfL[Ji$mK#cU@X/W)Ct
+KH+MR"tN)?(,=qpZ)5HKmUD7B:^2A)0s4/;Y[2:_IBOK3_W[mq^d(41R'#G>AH`7u
+bYAe&P="1/O^fuAW/+7U1.C&S1?f?$;FV'+19Hf4Opa-$CG5&1",,l:j0/UTk(2G>
+0`rso#f'0]i$F!Cl9Z>l$el'K(>b4cS)VIEBYq<s"JBg$MJ:r%K`rdO:H(en"(m'2
+#&H%m,nHY""2`4"!qmuJE\]t;Q;S)J#a5`%*$`DG.r/QQ+=AJn-TKG:\,rKKK%*o&
+L<HJqB<+Qe7@Ys86H.EW46%`S1U`0Md!G!O,dEt(5UAW+r*9u].'hhVk2@tD.Kf;!
+`?I&_O7^I+lmgKS2eW==`:@d2?oVOF!d"JF<!H:\oRTLJJP%h1A;;C@)Oa)5pp6kb
+8O+l7.\OqX6Ru+fW@T:UcPdGE/e_.o`TArX1a571-PJ'[+>$$6b_cI?"[Y*oP\2Fd
+nh$#;5Ep7h<-_!P<CeI"`=DA``_/kg!\?[4Hj-$"CIg)mSmnim%`Fs+,"cIEGZtCe
+3J0SOVGO$Z_b8HV:erpuFN>Xrp4`s<:/k?>1gD8)gaOHo+I(tHAi>!P5r\%U"*Al[
+e:8^:@o'u,"0iDI'I<$9Uh-XX8]:Ku!kAf^gc#J8+Js<hnj"NG3,3*02^DB="U&@'
+1+8s;<'pBR,ih43i$eaPq$J!71hsA!&3fZm<g<2W'_mHaE`f;CM,^]0Lob)rY]!7T
+"=.U9L0RK=PWllL4@Ht-9;IY\&uT623%I'Iaf+tl[!EIufh&Fl!%hGL;bTr9#h<-C
+nRE^6'4$cq0t#n7F`a$Il<]Cu6ZN\<A1nO;p+PeEb/KcV"G"GmZnoeY4@!.[7?YW'
+IOQ#A`D>YqEFrbcjAA:us%47SF%KjcSQoY\A"q(FUc1.BlJ@]01LaPpek\g>L*e$'
+(tMggWk?)hnsj=_S8)G;n^d%[g&nd.1@OsMjhij-MH!<qs$@K='4:m)J1X,`YA"Ci
+DtIiiqMd`m"?*.,(-+;7]k\<qJ.,jI_rsUV^.G\VGa.r=?q;cOE-Km[/XHaEVW.R)
+okj:i.Uqg=<&c[dli^,X"lN]2VaP<2RkH^>-0iY2CNFI'Lg^G*1SR!&"eTeaL*jeo
+9u;9EUc/h)NdD0u1PJ;2Q#.Rd4CuB>F@j2;(J=\2P\qqaDatRA='F(>@*od%)e)>A
+k-!X[;KAKQpWt1"iiI](p*I2'E<@X+1:@8iRn.&W4jT6Kn^f0J#X\*B^WicM-7Yun
+;*ZQu;c0-O[bA'SJr3._I&g6qj"s*GVBK>23&]u+n[9VXi(#)Bha3BQV>"]e]Ih&V
+!Ff:_&+h/7L/.ksZlh/TGY0de$n%bl5_YhNemQ:<*6U[0Jhp=_(b,Z_kn.BtQ%PgN
+(K#g]Y(dFH,S"jB7(%]b1-Vhc"X44#8S#P-H>DM^-B9EBK`%j,,c%.W8E7X#`5M80
+97UKtLf<G*&lE5bn5Lq[,7q/OjUkIhao\h&MFgoI1a6J-8nY'*MagMdR(AG/;Wi4I
+K`hfS7ER0^K^GY:n,k9tfGN(-_i1KhNoQ?X.#P9iN8(I8\?^LUQqB_V>+-_"h+]68
+Zr8O\IU-NfUf/gq6`+j*3IJ?F_[[sLD2XUF:-Q!uL*SslLULTc"pP1":G"@Nb5a)&
+-C6H=/?RBd((4QX`LLu<"JAk`UeiY$J@eF"1[%Ab[7McUp*g6\d0+*:VGf"#^Pc0!
+RDLXpkQW@=_[gU]@%mg0mbG:'7RBEGdA&6D7$_8[?thCSYc_A-6RlnTdOb(5SV*.0
+UOAIRUDch19TVYU5YE!<]MMEk1H,:[KL(?mb4db#PGkWKia>`=KKuBD/8j9RK>O=6
+E8@O@U2-EN-Gp:s0;E#hekTUQ+s]PXmQ&4!-L^Zb!]DL0\@3jk;=jS5BS=Sc0K:91
+?",dh@o$>(jA!sg5jZiWC]ndTQo,"W+XKJdA9iqsL1`h(1IRf[@Oh^re6q>SeYS`0
+6?#F!F=[Zi7NrJ=g:J]+.S@KLX@,l;WeZ/Ehck0K-DoX,d+MWVBRD)Lc"KpH0qGJ*
+<*k2T8`esNKg&g>6>.\"UWi+1j9.78&AFf6"t25\A3N])*;DjXcGP#gU2]TT.hSRk
+G)__V"*q5G<rPZOHq,/$%:1>QSnDo5=JZR',F%8$!<X]OhjP:_K<S2W)m<*[bg@Jr
+69@[B?;_u_Bo4B%GAu?s^2kJ(2VXI!c:nOWEZum&r)hC,Q+qL#S0EJe1.E!OD":1"
+5UXHc,>\)46lrAGQn/`ZCZ:@\-FREEaFD[1^alcUOIa##'HnCM6'Cft,S?$SS[`BC
+Yen199qSt(5!/n^C>_bhi*iZB+AC0$0>&R5jphOL/n2])5(rOFDTj9b,UYiXh5^>@
+jM;f^F.i@b?97_&MI)NBY!-GedY$W2UnU/,2nVbA0Z6*dUms>eEG1(Lq&G%'*/K&/
+9OlkB-:A$ZW2QZ=lsT!Q"_apNF.,lLi%fDo-V;kmZJN=<j9=tInq/Zila!rH+Kc%q
+^jKM6UZ^+s9$U@<4T^F0+CJPc"Td7qcY@VoXPTn85Ve/pBn/e[J8;214=3C@GJHYp
+67?7%FIMJcBBs_:,U+\^PUA_(#)EUK7ERX-3-:lNWa+OagQWp-Am%U3^*gq9VFEa;
+@,8_4IjP`[?![[t@QZ*28g?g'_E'JGr&4gL"&lKUic[)MC'NLI,RJ!/Uk.1j0uA^D
+bGd0dE595aWo,4i"s@dfKCf>?AS;/k,d#AIjNYP2GKotL?r&3X`1H[mfK"QrLmX#H
+a7S%a9EbE&cG]6(&,&=qn3O$]g%#%sL%[H8.L(E;fL'U5h@Ql(cahl9/?(=f?6[Xg
+_$pHf#!cu/_?to>]K]5Igu<]F"i`).A6Zpb"n<MNcr!:[OJ\*4+p4(_7#^(mN`(OL
+3DHAPK"`rCfW.E]=ch8i5(d,%O6FR6"<r.8IMBhTG[FpN8YYai/ECDq!gOm1A&)bF
+_Zh7$I8"M'.3b@l5[@Do:n<,PRc6]i?.MRmQJi./9kp7EK[o3P,"DiR2Sq4]K6B%>
+2s";W8/;P3iX.GBCsHmiklopVkg/iFGW0+]JVTCo_a(cep]YkXG=6I\*k3G%3h_0\
+aK$tj+"c*`hBR(2i<GAl4fF,pDFZq4+AhP_.rKi(5a_bkdglN)`0P'=1[t^JbCVVU
+U&ZbYM1gI8&;3Rt'8]+CnJIou.i(NA@UXM_;CE"Z_kI/KRKb)P#t4oO^nb$D(CN[K
+W#1ak-B*caJl*N)1*R?#"_'L]Le9*4$cV\a31NJV(5jM+;#l=\+;5+%1dPf`/gqFT
+jT:l5%Zaes$>X]4]WT(@'#I$<.27S-*t^mEQ$B6l<u$k6B2G9UN]dr1?=L0d,]#V)
+'?NZS368,AO;/-V,)M!"8Oo4DVNcA9XA12V#b]T?OKp6;&dq,q;2gl<:D&Ct6Etql
+==k90CQXGV0#8En$DaE$G8sg)N/Aa0./#;1:5@oudNMGe7kiBK[WIms;Xu.N8]-,#
+G7M`$Q[3[MEBG"b++d5d&g8Pp8gf8ToT9Wq+qc*YUL"]>!=2$FKE3U+aTV%D(4l]@
+JjeNB:#Jp+Khas8l_Q%N(kb4I5Yr&GM)&2h-7^9J]sM\:FU9gA!)05jJESus6-fZP
+YqbY#R"I50]%6^7N4^/-T^Y&R`M52%9$/H!^f(?/+UUc%,RG['joge\.%$fHC4`L?
+JV$o=2%%!2^ShP[`e"@%W`Bm".4eTsac$'i(psk^:lL%"kX([@N]]:f/4hB6KtiLs
+C:0oJ)`J'MmW+m0W_S3;KsE,MG6<N(WrC8<mK;>Y-4!dD:/$Nn@b`/"+CM:DZ(dO#
+"p%Um\u;<>3#!^&dfAe_Y[mZhU.E?f`2(r)@Mjh-b/207cGBki^N>+r'1bgo6kWDV
+!'Ce;bP[D,1a,"L"2qE1I4LtLd^71E1CGt@.fjm&au,0_?l@Mr9%F\N.$CTn.e>W*
+:-J'X/@^?AnmQ%c_)!FA"6a]'X9Ki8A/R.gU-T*fG0M+U.-N^?)I*Pc2.eWqZ?4@*
+d`pFC=Gh\m[GGT@=aRm3PgI'sM*cq9#&(RQN]f3Q9GAe(KkZ:o=;i-85=perX.hSb
+-J3tXg4gDu6&n;6Z#3rEN(AhS['uj7g>!M+f[)iKAlTN(bU2QoX!NEUbqTiaH1gHS
+,S.Tpe$YR]0Gaq_1QmtZ$9H87"kJ33r2p@?Xq+H'!iG:[Ll4X).KMC8Q.Be>)W#=u
+)@@$-[!Fun1eNAT(s80SQk+h"lSF+dD'V`EAB7.Lg>%q9&q]WCA+')pDt5+_X%](Z
+1U)blnVa>SQ35F0ahDD.,RdX.dkhWRYgN[?X)t]$;LdeZVp1Hb`Tap9D?`aa&Zic1
+n<#HXG/s+?OB($+)oKsI%N'o'8#G:(=scCg8KX+IMH,]V%OQjW%57lhq+:-(+Wtk;
+Oou=&giK>XW*kLHG1^O>q70?OEMG^1p.\)1RKY%'hARST!=pY,.>9pKQifmBP#E8$
+Nr_P1im^@4X$&W8?$\Sq,4$0*B./OCT9*NZY!JF4F+ats)44=4='9T'5ch%<VDnr)
+W?roFBT*uf`7,8j4<Xuq6A%O?&7T<!"q_CZ5X744$4&6ei-a5n#'U_Y>*si5F_4'%
+,^KcM==19I`YfCC;:1Q?"jL<NPpHjZRSmR4MdfC&P+^<&M&1m,#a.>pZt'[c0kq9e
+r?ZK!K7R\q#&=D'!a/Dk_'GHOdPV2\!)Y#2HTRCO1"q3SUGO7UeLRqQbf,u=.?Ne#
+FU]'BX;:rK6!u?^i5LE`-]WW!"I_+p*2+m>E*c+EbW/+RYo*OJL/2#C:M$nq[0?R_
+M7P!H`-`3B$)@pjUt1)Q?>V;T]-bTc-7#C\?,:S=Ue*-"0-n'SQq2$k-IV!cWLZ)5
+3U0=i"Sc81KV:H\$CXpJ0/9@:76R;A$mUV@/#UV"S/L0U:U-E7$f[%7j,==Y_9P'i
+A\gL_3X:3$1o)sabHHWde0=KQ3/Hd_Q]ednc(a5j$giR<p"iDU\/oV/ckN[\VH+Gu
+M'UN0OI6GdAJ'c'-AWk^ch1=481BWn'1(RnL5]'eX"0rFC_0=X3@<TTM^!pjDH9pD
+8W?$#;/k0PSA^Z`CPlgek$3rs>&R^`=<Oe_6"m<ehR"!qK!=Of18"3Y6;m@e:s%7Z
+T99QD$uAB8V$,d\B5Fgc<LU7X6G*s>5[I45noL[]iZX!+d>:.^V(+B?!TNWc&Qq"8
+f$Y:7O?f>'pbGm.8/O)aLl^/^0a0uWU7"W,]h/Dd"lQ>2YC[NWb8;U3P%KdWM_'H6
+[9@'@D?@WYr)Tk#/%bA"JY2!K9+sVC:sm5mg==1L%%32<0bk=lWbu(&dh2h%9)Jbk
+@L@[D"#;`g4WJ(2D;$d\,\EF0'L5KVMYV`Y-#3c\b&C56Z3W+dm/sVk"btdDeAK@M
+8RjMIGcP#S-u#WS;UTE.ddaq#$;0^G7EA`ZEXlJ'<O:`LcsuD[h_bd+,>Nk0]W(b7
+"O"0UP_*GZ*=NH_RO'6kA]'fhgt$BR%0\hP!D(HYR$<?c*YhZ"9,<Fk+DD!Q6%WEd
+5nG&T`V^:Y''=#PP%Q2%JtdliJ<*Op-7\=JJt'5g]ZS5V@?/l:)<,1jPg%q.D=)6X
+`.M+8VO=a3g0WY0E_R,5.@ps!c*]Gn;0F;:2Md`eW<G_l*9dc.3n5ab=6A1e7.;=&
+pk^mrDm5]30r4*HHicbpZI'k#0sb#',#W)L[[]Z,qo%2L)(=nsi[Z05I%?BB>-/`'
+1VWaB)ZrNC64\u9?Nso_JfS7K%srn"MhM#Z[*;Dto2([*eZ#Y^=ah#U?Jl%q]ps6?
+>Y&ih0lNU1=`+RY$.F9@]2si1#EIp%aie5MC,p$FIe^aS*sR`r)hVAaCBu9s+QqPT
+E5b3M#l8bG"=\;^F,3G>EcOT(oj5(=!Xh;["&$;dTU/Xe$GdA!ehIC9`qnT1#W*?:
+YF-20EhgXR$s)[#>>NQ8L^_+tAF(jsOb5?*dV"]8l,JuHdni?b[V:57fJSG[dnpQV
+*Zj3T!#[dLr,L!7CEs3H)+PfLiP=t@,[MsaY-JIQ4E<e3UtP?2:FN]Tiq2ZJ't;R#
+Fq$a<8TIOq)Y*lFaSYmY;B81;+2VgZH_E&RUa[Ko'*R%uKu`56ButMe>R\=8Kq=tc
+.1qLrS)]\?jU1i2NcXBK@7q9VXI"5HQbsr*g9dicDLlM8!L(s#8/[\dn\5b+5k'=g
+5p;)q-'Xdp!8u(qla`6(d3r2g*Kaa46RBG#+1WPKMn*^j&BGG'!gCP*#qMs964fD9
+L-e2[5_/X*qX1En$SJZP^rtQI-lS0b1n<=V^@B;jKB*g,&tQ#XX@_B?@CF!3\$;F`
+.6A@Vnh<?3Ye0ei$eYn.Jq4CW!fM;k$),ue$4Eg-c4GN!-6achW5TZa%2psr,qKFq
+99,c0.^e3!YRup[oC7BX/=]9E3$QPEqj'70M4@,G#m(dJMGjps&Vu>kYM69JZR*H@
+$S`L[MY'"?p_:X!-ae%L)3Jg%'8DF06B^iXX')TlnDZT^gPWj(J[?p.RA1[YA"u-S
+RT)s%+VM$&[#LOJ&NJ,JajH4o_N]V7$u:il+b1Ps&L3Hj_jO7X.-MW^&%#JF[o(?U
+$.6@FF[QpN%AEg,E3B`!GE3U2X[?5*H5@MNcarpX#TJ353#[@X)8bX&]MW\iYeC,.
+@#8$o`pibkU$=.!S\3u(4STf))[)",3uS*oa(XU*GfC#>[>]B![UU/[OI[tm_k`dq
+/QjpBnU='i,HGdV)Mu]\)nq>Akqt9QVF3&$JC'E0MFPCkSNrp,o-TSt+Ul/R^pBRd
+jCLONOLr=1M&B6ZBa?3D*sk38,Jceg0Wc!"QV"IC!;)en8;X>pQ9r*TM-/+s#mHc]
+;6WUeN*+Rebb^\H(.aieNp+n.OcC0LN(U=B8E)La#r0$L)+\]d7Tm<rW"tD%/JVbC
+L`3aanB$Jga<@efTKI)tJGfKoS'.6H4%ba8P5Vd:WlJ)QSRN)-./1B"dL'(n6F<U`
+5aiK6/2X$1UQ_8Z+jmMmW&4@7NtJ\1n/MJE)k<"e(qGYU:lrj>7@*0?NB"M0@-bMq
+n2#Hs9l-:YFP*J&NIb=F-]pGaW#%U![kT_3Q.[GiWDAo?nYC_,\,_u-Tl@B3Um*UU
+NSN\*iCb'0hgn.8,Tn)A)-S^k/WJ,s$[f79)&EsRj,3?=\L=;<W\97_#ms)P\8[JG
+$abrkn;JM"39V08Yl5YFj+s/SO@ZgM1:%FsL^^Y0Q`F:PObuPKLa0;39$46,8I$+9
+LB5I8]D/5.C'b9Ha@uB9Z?[RNWQgGG\skEAJSEYo\Fkk*G>DsjUn\_?1b1$WJJF7_
+%tN'&.UU1Lk;(tg5WbR,XT9>jR&#k^(C6ZFEd0pVUCY_5$b7$'H$>f`Y^s;)!S&G*
+\.]6`R&Xq2'$08JJA)I[d$cY^]*eWbK"h`t(6oH(4?YP2Rhn'MYgXGmY!<a3.+tD@
+el:pp:-7[U@B#:(:RZfq$Y_70ka`!3+2'3)<(XMSLo3#e:k<R)</;TH^r&Y\8I;?M
+&ZDoa0ZH?X&WK$qJ]Jc:C3Vrmh'rR!N"eI=2-#t^$Sc`%YN'dJlf+Kr/"q'i0PS06
+'3ZYCH\%E!)i2Ih5cKgp@f]CD!OX>qR"Z38jbP-p-J8BMa;oiq*J't1Mh>27N2eTL
+d&7MZ1.[X\a;k;tBc-MW)$.&kfZBo)JX5On*=[5*HN:kPTK(D;(@_P@Kn0M%Y7\>\
+)*%MEBGo%d4K/Uq!D9"]GSG^j**3^'(Kf%SEVN]<NAZ5&!T5&NkSpen!$Ond/^2Kj
+0_D:W#)n3*aESI^#T?IV3"@c5M*ck/fY=5G=bo@&)`X\$P>@UX-CYPYWc:TZ\FP\4
+RE*sm2<&]t\Ef82j!i5_!Jh]KKddIg+,d02>U]1U\.F3n*WbaMJYTi<R(s4d[YZgO
+5SHo@^qY]M-\832`a"Zk/!8W.P7F=P())924Lp`](-qARMK*Hq(oJQkLB/"2/4ncM
+g.%YI%+`3/(^gDLn>7]K,oeTT]`"c0R+RM9gTX9NhIm@i#Rpe/'\OlR!K6S6BFfXK
+j+r8m.n^Qb+V+tU`gWFA!EADZ`GnrtfH\2D'>!<M<4SF\(4iF8&L"uTGa]thLFLW,
+7a:J[C+-<B^mdCV%!\jMd@C:L'>Nms!RMa\N9-u7=+JX,?Q]f.^^gH*)p!@/dAr,*
+m=uI2/19sFd3-2\"/5g`'Y>S3J_hR$W76cs*#up^S_Uc>NG,aF_m%>jgUV<[4E603
+EIcm\@`dRO,,LbWnY=1[%=#;0_RIu=+4hEGMSL)=@&F"W%"QUo!8%[TF0M#F8tK]*
+*Y>;INIZi/_A#!e(HEBJ127a_J-#@3J^sFS;i[k3PaoErahYql&J):@.$*?'VVp/:
+d"<:W']E(-'G3VVOW#b6h&b2c.<0@7de9%2lN'6]*7,VP8.P^A$in'OJG9QRYRQ..
+Ef_^Qg;Zu(dB]Ok^RCVhPp+\u8/%?H6tAh/R0^j2JpAq9erPd#MEL[28m*28[Z)4r
+Q=7T?YgMP2']XL/jV^aqBW@FR(J'52S&-SC\HSgC)Zd_gJEm)a\/!85%KO9PJ@H!f
+p^D\G%07>[+SaWXJ.CO8*"U6lYT\G*$*sYp2N!ua&Z1EdmZ)kRAsE/j\a\/^)#+k\
+W8CMXXfSI,lRE2*'pE@JBQcAu8FhnRd*)$#$<S*qS)UI@k+2YJ00J3+c@(82*9m/W
+J?TC]\.AY]$%U)//*Zg_d][:LZ!db7:(5?7XCa>O]FOpB!L=m[fGt!iOp\!E3@SM^
+\@E04(P0XDZ:^VJ+sgd6;68LtLcPTfesZT`k@qK3#s]?B(mV;Z$4,M&Usa,f%!7&n
+*!&kGkC=P8TFLtK$@o:V!=0)6O:5leJr8AH(1t`u<iemVU>P>'D,uS>I]s4)GaJY+
+<u/,u`S`s0O0pCl#Zq^tOGO""*D`qZl_7*-Y0l*P(#bauB1BZ#Z7)1RL]N0lSBr+(
+-kC+]>SIheY"#!qkRKW:)lg=^!2ds?YRplN#_9Ds0HSTkf#qQZLEUZDRkPb3`f>W.
+*baaT%setpq(EsH*:6[2([\[4_s]7oX%`;L;eR-cq/FsF9cdgHhJU;jghc@)'lII=
+DK5i1I7'o_(]bH`A\N^+._'BOOo\r#!D^LCL^a?o$%SoCJJ\cFJ-uAfon[5Rlg=9g
+K)N@W)hHWaJe0&V#U+d"(ls'&bpa;RJ/R`Rlmac7fN9/!U[bncPmBa;bgAK>(/`8D
+8X'u)mVr&:Aqt81F_hBDB7YT<i"pq[(')(mLu/j_k+5Ws%=pJU!MC,,kR<!G#lp>!
+J>a*#TF15#?^C(bBQ+B"iM!I-)M,sO!Z3-`01pfh<@FGtM+Gk"%N&W*aU0.-J\W:W
+i#I=1(crmi$u%6TKoC'1kAp0M[=9uBgNA<c%cYaqJBjWcm]7qnE>k2\!='D@[disX
+p-hQ'!O*Ajg-d8Y%KO!H!09BqVa:B56Z6="[YI<5ck*<8;ZY5eJe0)W(a/q\*NB)Q
+!9*`&8Geb/%J99P*uH"!kT9iX+5!M33r9&S+;]U5*_'i*QQ:P=@or1:?%Cje5R1D!
+Vd61i9V*LYSCeWk-jp$Y(h1U,Re^3a+;b+2&aV\AJ>`a(O9p*/$NP,QDc<;%eZ<1k
+>o8b*!GEI(p`KVD+BmlAMYB4d6Nmb$G]J0"erUi%n!\gk+bA8gFZ@uph`QJ@O,@F*
+ZD6HM(P?;A7Z3e3Muj(=W!q;Bi&@+<[2RkOn-f;q$?QJ'S.W2>>_`?A%I0#m!C.+f
+-jY)@$3;65!2#OG#%8kABE6.p'=#aW+<Q10*s(:?J\)&95Rh-'oEhJVobQ(KGC"R2
+EImm/J`n;0%fgI>Oo^@[J^u_5CG)HO_/Tr#!6+)X9p%Ac)ilYfSo].FKZA"n1P"Zt
+!2'Yo-GHS8(I-Hm!MBmQ!r[[FbCH5jJ<+Dq#R^WG$2F`[O*P^d#RgTn^D0Q`J_ifI
+\/f`pMu_%JbLi1!<H/&iEUTP?!T5,Q-mJd),6@Qb!]S'KXYJOK+&nfZDA!23EkD\1
+$]"dj1`?u6`Bo\PPXHW)#=F'HaF$/oM?lUZ@7[>%0c5kh6P49V/e\No6:%9cJ3G@t
+N!<d#^uT5L&'%+)TV+t"&I='.!FTS37PGYeKlE.kL6NejKu3r<k_M\R&W"B#1!'!5
+3ulJ!!l7uL:bW]DKn<_bJ6k=G%`[NgnDK*m,S<TN,!d3!597fK!jSEnF>OfN"OrP.
+F?Ck(#fC)D\6]@dZO4YqE?L#M&!Vl!;.1T?<%EreXofhlDFP6E"@GJ*pio^X)ihAE
+@+]^51n2cV_#T!Z4;J,(KTX)qZr/4`#e@e`of+oN&6,Vq0p(184<4n:"'R+[0k2'J
+EtDc&BRDr^d08Ps!>LP_!0G:_EZ#F;1`-RRJZ*r:L7sMV'83%tQk)I_n3k<K^pl-.
+[Ve]u"/182*Y>>DW(;jNJS8H?#,.u-(^!%/8tCSW^cW,26)\bi[c#e!)$Zd:1m0fc
+#WUfF5q$7].%slS&h8]>0FU!Mo/qm56&9:1#6D>Q!N_>!@j$Ka5Y)TC+`MlP9Hh$2
+('[(gJg#q#d#K=V69'W<#%:nG)i)8hhA3o#/"iiG+VG"baWXn[(knY_$kY3B)Q".p
+_(u!+"lYPV)MZ)8"q8HNJ0"tbCf"1MX,2aR%L.Ko>9&5[D)qt*@'CCPKYa$i+ZVhL
+ck<Z?82hG2BTPKG42JT_)TX(`/egr%TOJVB+[B6cLZ.H64U#8EF<9.F(j[D4U%jKh
+LOlC1(l':0GT=Dt1G07_WDGVeV#[_O,_aD,_*bOC=>UZoiBU3QUEOSah1ibW\f6B'
+clr`SnQ7a\e02db)Tn`*3#[PqE&<a.J9k!n![0]W>(u=O"'btL8d5b-c%nCkdWR2m
+&dG&+P7YZ`=@s6[iG,_@#@X9-K8&:"FRBCmd"EPIJd@;Z#;i*!F9b+S4QM2>)B5%H
+&<5npL$=,)>6R].3"1F1aB,g(LtsSW#B>i;$j+5#*X732i&DGUM"3Wsf:fEn(ZV0E
+(^K+9eRB5%ft*'F"\:UF%'i.JBSNco+DK-PSEOg["SaQ"(=D)VC`L`'5[9Z]:=*o5
+LEZ/C!/J[JpT(pb]kS=9JG*:,"7]JD#D1oL3k0C-3'jp(@;X0X[+IWfD$UO%Hl?nP
+j]T;$06PFIE+/B4SoHapli7)LFK8n"Tl=62"T5VN%:UrW4%WQF%mV!6^mp^C5]@*q
+E$Y[g$l]9[<5:e51aWWE)RL`r&6`a0#JgQ:.>"ehJUf%k"[SJ#Q\pF:cnAY*g_YQ]
+4pM)')[;&L*NbEP&:u)$>TjF>K2=0(T&:,jJ8>oa!*]"-#TNq3e/j5B2Yik>&r0ip
+#WV!6X[qCm,K/B8!Iuqb($HZe,]YS!n6l:Rco?ZNOomL-qQ9j41K)$4\!><V%Y=+5
+HJo#-ZZF:66%C;,#>H+'-0PM`5V,:f9TVT62[`CP#>/CglG6kX,f/d+LMSuhUmBL:
+b5a&0lkUg4pltT)E"7`?<[\$'.U3K5]8d=3eKgMc6f50k.$ECi"#+![iqm:@i0";R
+n7H)p0IBK9<#ISnW!rdN63i&6!4@GUL^G7WO37*MOruIb^p#/+@'/W,?q^gd=;se!
+[=Y/aW"*?k0aB8h*WYF[KE0@H+O3^F!uB;n_83*ZTIs,n+>#&eMR4ViQ0<iS@LEJV
+=anT'6UGH[LhKU9S$F&<Jm_#$%6-*Ha"4T[eX1Rn*,p$VZ#q*eoao:H-Nh@PCmbhb
+9YdkY9?6ik!gl)bSpZ9Se)ab(k>Y[;TF[VZ4tM8J0hpa+Bpg6"i(s_S5iR;AQ%bMI
+d"73u9SnoemU37#jWpXXkV*0^?+5sc:/ldZ5pM.5Zi\1OM,30&R3]a$,r<=Eg+."_
+oXMrBdo6M8SMOF0AYQ$:4CeHIpRCEpAZ94=M(1)IWAN:Y!g?.`!9b:m'gN%)+=0_H
+W^/a&HCqQ@5?C[4O,Ik`+k@l1$c,XS"O_OSK*p08hEjO5!47EFPX9+3)5grf;+iq_
+b%6Ah#d=nXbS^s@@6l+;1e8A=fYS2dRpuRh.TK-B>:SWK])Z4PJ/?nc?k!-M*NCq#
+dK'>AEXOUsD58!_Jf@i.d#F"g<lVBu>A7rVJOBYE=l^W.IrJ6d=]/Y=<[hOmbtK=-
+"UTI=fXmfW^qJ3o@#^deGSX`'m>PF3R#J]c.*Y<UQ(Sq[&Dhpu"poG>^%.Weh_8N-
+>b4)O^l&)Q#1Pr5*O0"F]%Yna^f`?S]O7Rt(1>,iNp-.R_G1!T*1.O`RJ%Q'-pJ4C
+>X6'Fa=+uoRd4E1TVU,7-%E^6ULO$U$!BioH5OsHhWmOV-mh!qR.Q#_J4G(17ROrS
+IJDlB;h6]->JV-`^1AOOPt:mUF7SQ_iH>:;ZLJ#>+9~>
endstream
endobj
150 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im21
/Width 156
/Height 128
/BitsPerComponent 8
/ColorSpace 127 0 R
/Length 16268
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.'>+&U:fj,S17bU*1A@==k9qKeQq;TLpLD$&(]s4EOIL'ahn=\9P5c0GOu7!eD2A
+66HgFUTjh^Hr)@0$\fl<8>K5gSr1K2@474.-C_p71a,\e?71C3"(A3sCcWdQ#Y#A6
+J@%uqRaAt2i7N9B*Y4&oiP;s&4rOu4"9LQmVF>S=#A(co\@+p](PuaukT+OO#ndMs
+;!B5r>n@]I"OYli:,tJ"a^jt)5c1k?&;]m9lkHTE3hBWU!hj"t:LBlS"_,kqVct@3
+_^5Dtj\i9b(dW;O=W!r,*tHt?iTj<Z0lFL+KM\e8Z5+Gl#\['5T*Hs$(u^.Z)TFC_
+.hrDc!o8$'0,]`5G#DQJVL0Pgij;$hY>A,eL#IPkM'-5Qm"hKO]*+@k:'al8KY\3b
+[&*i]2[]_<n4'KA04MYM]nf%>%0OmcOQWb)$ndkL5q5-c"Mkp;m(EZ[*eH/gJ7O68
+aBKAV,=r!d#I^Ss3YA=U,)hJpCjHMdKnrCC&ie3IVA$A!'Em0h!FsLK2<_hS*JK'#
+AetVA=@2@@YfJfj6X^gB)$Q^$&r),!3(=G]YfKBKV?#g8$SF/13sc$D>$.^*l&4',
+1#\4!';]AoG/qj$pe9:&2!\>g"V.$^,U2U!SMUN/BNu*2FWaWr:9=jm'o$.Y?5UA>
+-slPPW?WVP;W3.@(^2Ha<CY;m5Wl_I@45e-KsT5B&d==55S!sIpe*kUi6X*U">J%F
+&2Ip\8;ffC&6+k'+`21`KajbO(BoqZ5S0n/g3T?iW,!a,e7_es(=as\=&anidTnS.
+$?I":#!neu1^1:mRaRu&d_HYAYRR>."<c.?CW+M-(__Y?`9NZLoA-S9"OS^I%te9/
+_)P;nRXD>%@/*,(VeOunet_GU!5Djfq^/*on4aOL?j\2O0k6"pr5&WQpdhe9WeI4%
+bKq"OoiAn28@g#TI72bsLl<OEA5m<`Qb*8*^`1Mk/6T*lCD];N"8eHN%Keg16Oa0D
+b%k(WJIk!WU1&`;mO$'"D$Vje@i$@Ikusaj_e<M8U;9]L+Q6#qAplPUZ&62\"HPfO
+i2`uOb,iL*&f;7aaWk**A0C5O^Gump^`%q!q`tO-4:"BkDKB">]k^[fOe&6E:EUDV
+o:-kq1sC:DVS<a62O2CDIhU'#E)Y_:TV6FYS>6^h3/"6DH=ELnO:8e6L_70^"W5Uh
+EdUE/.kZ&mU#N2,YYi6!66i=;Qorj'BUfHQ>74`h'(tbRatmZ_A:a0A20bqu>N/<e
+Pi<S0,#T@WbXI@3-'?.<$.V\T/#l8WP6.Oh'nR#E-d9@.!_>nH6p?4iD'UPs6<"WO
+Bk0JNZ'Ag^rQ%k@/+($cU/Y`id&N(.AAEp4e::Y*3ZBn0OZAOJRgKV"irnG]\ik'`
+qGE2,4"lk?OXP+\*LJQ(`71-=-F?X;q:Po3iJnHrY&.D-0TAV?8f)#%K[E]@3=&n!
+5D>jG$rgP0&_8YA6aGjI\JZXS,_dfn;@LC1qae`OK+YCsh3FCUI3c&(_<F^.Q/g1D
+cZ)N(;`m^gg=dbA-#sS!$p^2Rm!5Th8X^hgKHUp^MN_kV)o+GhJL]2ia5H'\U?4ni
+ar)aF2=eq4P4-`GU'4r@B<SWg8D#-Y,-D'9aL15B8Z=Qj"M&&,=Xja7GnD4c[@NVV
+2Rs+2+!oj4K1tiV$;?")7W*f5OnbOL&&L+S!-2t.^c:&q'0\'#aL!jW>_ZCGVd*s^
+U(PLLS3\S+#,'JkPVP6chFSo9Wj(n/F'Ri<`0!Rp#mcl,6@]I8Qn;]rf:U"R9>N+u
+2N"=5-0XL!cH/P'`,+!+E\=`@N?b6q>d+:-'"EK3_Mh5RZ`Y.Y5tb3[VPnls2KrU=
+!LPU>W43ME,uTC=EFpI!fUe5"TPg8.j=&QKT+Ve9pjkef02?e+R&*p3h4"O3kWkIi
+@P1NGr7<.:C';&2pk?kp*]fRt#8"tTG$GDg-*IZCTgU:u&TP$XXdk6Nnp=dlGm-MH
+?7I$F>mr<!C+V6]e6,ke@?oQg-;%<l+WsHpcKPP.!3G_#k"]^98XCm+D'Y?8kaU/I
+k9n6=WuX$0;I@7IE:J+285`bkmL?)'6od(>'*SjS0n]\-,n$E@Nhm$?nVo&Ybr^S;
+!RQ/Y?A&VrSA\[F:l-bs"@gb-<ToL%RT,j]AP,Ri/5o0bU,4:*OC(W4=eetR,E=dp
+?eEH#%=.?S%qH:kb)Lto3ODK\P*/Q%!+g(7j^]$UO=(k>K>C,`"\[6,VZLLe5mrT6
+7<I7rS'*c+iJAc`9T,%N3bqD]aKC1AOd:+eET%6D12!:K=-tuse4C]qUa[.k#i92b
+^aOYC-k[7nG]n$h^a63j30BJc)+b!/b94CDc/Qr:(TGl/lg]uKL(:V"S%Nt21lN,[
+-r!oc/T`7DX^1kl19.$:_=V+NCF&UHc=&F^9e_R=gtGd;l'<`8R)3O]*AV]0?``Hd
+3ahg.ISe_'W$%nO)^&0\^s[1l.)t7]6O7uQ80qOh9TBfgEqW%<6[,e#p_=0J:0^CI
+2<SYI_[Aq7.lgb!V-q[b(\jfpAmr)o,o9@ZSMs[ed325%Fk>+#]p":3<?suJ@PBVC
+JBHP+@'V1k<![!U#nmK?*4%+C'%tR%n3tF/#M*M8CQX_d"`ZuoJm^nQ)`sfAWRqfF
+e<"QT2)ujK7Z7tSC3[lg(oF9WS0-Fs<8sfEg/18F2mepTN>21]b]&XFc9MS,.<FR8
+plLr`kcYGigP//DXE+RKmV=`;1.P5qDg'?_#dW_M.Ggp[H3AKN)%23(gl8>/>\gfX
+/go;UoGVnt-Rg:WkG97A4=g@2G/9nE`gi;4c9MRA/!!(H[+7.Z1EtGL*DMuYnhi@I
+9i"(_3c.4:?27T3aBEaD-)A+n$\O7?feT2_VXMQG<^R:PS\8QmoeFY2L"#MC"?Wt(
+/UE15i48Y,KM:f-oS;\uLa,-_\!:':cpPL+\!<f8^=I&sWE1n_fL3-fOuoD>9Csdp
+@^W%#11XSPUTCPtNaj9K-&8'C,@!+hA2"D4SP,?MMQ/7@ME)2XMs$BuM2%U2-mDI6
+p-;)$NW:88N\u>drW#^rW%NTekV=`3S`Vc!@U^YD7%4ILcUP?;ApfR_6>[q`!=5,>
+6TQb"^+jEq-"Zd9,`"]9Q7XDe6L(Md,04_68u0D^=UEljA0*71+=X%^oa4CrlJ++/
+0Iq%?"eor=jd'e_-pg^39IA%aYE3@1D[0aECLd"M`;!ul#Y>(Q0kWBp"ZAoskUS7?
+"6t2=",uNL-tX\jE+CR'jYe<u3\CKV_1^ZiBeW/4]He_TrTZr@">'c:4Ujjj+p/af
+V<\UC!%&qr5EH`_k8OA]]VRuQU]di(aJ^h/:fN)lbs^(_Y)J=[W\!Rm,K-T+$^COa
+>.*Iu'.an$,2QN65.2ok3JGc%#Z<@/d_TCmUl\>N,8S`P8jNP#"N&/QJm9WLE`Z^6
+ejN^QbG;V"'W377dc1IKKP#64:1-C(CMQaad1TVPjTj^)_s(,E_]C0MC;_`P/;]Q&
+/=6M>4p*$n)fWAk7dSmHlr?B*=Knel^bfJo>^Gh=$uNL)dGC2LEc<M7,c4]<E,pRa
+A3WC=L4f!Zap;n18?/RWQ)o!YMq1[8P\%_7l7k$sb7>"l@R[1)2j#e<j.$4e0b[qM
+j7,<jK:(l*;C$m1#pYP-_PUbB]N;9g'TQ3\Ak"j3d^DQV-aIV<cuMOXA5M;#ncFh9
+"!TPjL+/tWk/erI"HYL^&qQqn/S,P=`gEKUrmi;\TuZSU!(LS+[1r2E6ScJ*o#<+T
+P%F2\>(e+6!bs!AX?Almh+%75MUF!9GU82A.'[H1:Los^OPN<.q?dEW/qR#5G\U+F
+dY&78jd&A,2X$oF1h;D8aFrJD9]8BK3P[ZWk6M/'3a2t9bU]e1_E_b1YbZuO:I%#r
+;F`T^h_i9j>Dk=`k<+^?)E?e':%NDFBm>YuMLe.aJ>BE_A7EdO_WiCW/?<=i@a$;(
+8s+#H+qcAuK\j=^X".R1"(3oH:-pM4i[ZH.3TJD@6InKBW$R@49*o;!iqt>q.eZHd
+=_tr1OSgX0:1qGc2\U9[8lfroT[$+_I,j-<&`UfCGTgP;7&9g5beh3U3-I]+qlB-f
+.BH<DX[9BIj9.%rO_I1`_"+M/"+W:5Ko,u4gEJs,5N4S5-N]Kd7n(<Dg?`JV$+'e,
+?r5krTaFICo5&]YE%NXIcQX/X9-cL6o(=Ws3b7T*,T`)N<]LP8+X]ATK`hM-.K`X)
+9'*@X,`OQsW`Z/>2^Mj+,-FsXkU-Gu4f`gsX)<l4=FEr%-_b'hPib#:6q'Ig!9X,/
+Pcc>g%^3!`7?=*&maE2netMaHT(,?]_iBV:iuKBX"3*b%%RE_,6sNBt;N@_&X2o9:
+E)mKYQigscM\[_)m45HOp-m&W&+'\R?L8<`8JPjm'7+r*ROZLXMCMSF1\s=7!]_TT
+X5f@]m+,F?F=X2s(aoU*!euf^d6c?b6UjaSLet)1E=M=+/8DLqYG=h0*]?`Z$\1#`
+YUi7T5hTge-,s[L`866$4^'3!EQ,+iPiTDu3`,A-W@]hea6r/l93@/(0M#)(/Bj&a
+VJ1X0ZQf';9UeBqYliJ%4Tj5E67O,a).M^9EWUj1,@q%[QpSSB!tI[O<^ae+R_TD\
+78H`?2!>(8<!5tBAZ3R[$f[s<Vac:#`?_BWe6F[o(hSO%II"UJkleYRr6JCT4TJ#c
+aK-kO6G<`>`ep;!A(%mO,-*"rET00]`5"pM1,kN1j>?SW,$/So6>dIDUl%nqlJ6<P
+&pSPnj=/_U@sDtU%rS47,OSZT@MFU\cpfqmBNG?g0"#dFE>Ya$6M?NDW`2F4g9b=:
+9+H@'MR!C5'5mOu28]\q6[Agl06>4TF964(VTpL\.8EW*+U62&L<k"*]4Nh['5+4d
+A0fNR2E:11`J)0Im?SonC^*h2N0+C`kYbJk0Neos[Ps:lCITOhlNO@tQJbA1V]8t.
+hW6/*JdP1Uf=+LbnAF[cSi=VnO&41KdsVS_E%X@*biKQ%#-7qQc#h6qiY3W5f)&u#
+JLeG<LF+q_VC83#@"Pi-CJ/A]hCStU4[[RCigFXQo[3nP>>Uj=5Yt&17=t9AC\1lO
+LH;<oa'k9/?PC:+V%\_sAiHtIN(4.mVsd4P>i0E)c!nuqAa4grF,'a.</$c?M1C%O
+fW<"LUI1EOk1:S?js2k79dLC&lS8R_Y01Xcj%Xhopb="Wg37;3Z0>(7;7?-!A7oVi
+2l&2Y6njLP)Gde+KkBUMKZ%l+I'RP32FNe-+BEMm80\CS)s?:_N$=OD,b9&PT@3#;
+%TXi$lqoB+E8luoR2R@o>-9'j!uJG2<-2ha-;Nbm>U$546@F/P9J"J:.`Vb:\O95\
+<1E%8S-srZk?r\Yf*.op,U:/R/k@4TC,SRo0S37KmA2cOW.OS10!Z`mW]k5#SWQ[i
+W$3Jj!XhQ]CHG-HSGAuA\Z/H4j9#BA"Dk>5,8MarYcdL^K&ACh0S"?a@Q"dH:?q]/
+,N(G2$=JM=?`!rkiX/t+SB]?2QbqlUON'Nc@-L;.TM_(Al1C%R$97%sA*K.5%1"iQ
+.!1&s4!g1ZmR*9?;SQ[MqmjA[\iV2TB4/eo,;/1,"^7E$d+.Tb?</pL7W]n$Sg=GX
+E[o:MkU6RM8JT3D-Z>s@AancLIl0fQ"erI&UQI(REfQnFG@N*e#6U+h3r,_#TVIR;
+`U:dIhudUolR;QNn+9I5.dr.qdj^e06?+acXs_Xg/#J?kLX\A(FMs=eY,_[L-mu2D
+ob#,sD5NCFX"oR,b&5T4_?@*JJj00IW'`B?LU@+AjPR1Q`gnEAS)VXD$?"+_'N#?f
+ek6;N(7uQk=I2F7?]mriMZPE*3o/<bFtC(rU*)7&&>:%R+VqALL'U*LE&5AO$aK-Q
+69[O;H9E#!A]UfiBR6X('+7,>e4B9d-o/HiTQ_5t.(cEq`.3T\LV"dF23!KVXYS\n
+KL]Ne9?5k;,4'b+C1G-Yq;q*s!(1f2<$t"#OB850'pQKFS6(:dD1`oQMt&c"1Vc`7
+[d`__6tCnRkY\UF/+;j8Jt3G"1RfUmeAGscO'c]kStcD)G,%U.\6:dXJd'd$,pS"A
++uUr%^@3ST*%/>YKdF_%3%g>`orCPiKl.(U6+UPA,VdY1/pp!UIpLOe5;D.@0']O]
+cpC)g2mChPj)-Nki]nc*F/"&p7'KZr<f9Lb-)-K&5[TPQZc]$LH<f`:l*%!el3.?-
+<%9iOL&"$H[YUSi#$.lO\83FPqV[76:MfU;*0TFt"Sg8Yh8\i.8.m7AT'9]N+po)Z
+g"rU=6IV?_-QM,$-8Q5;i[\ZQ-q):[6Yh]K--4"'H\OQ(]h<NI*h)-<T!HEs+CYQ-
+l8E)S,A&i0-V#mNjda1,F=,?XEU9c-HIlEeeZ"'BkRXdeS_Zp?+@:n&G^lhB%L*g1
+,AlXN-9;>U=pBLoXfB#XrO1Q/<+Dkc5cEhc'E0_a+s9ES,iE8=kE')'$/7U6#*G?!
+!\.*7r^qiY0Ni)677h<R-\m?t9Ke7qqeDP7C'IMQfj[F"5[9$3V+e3oT)oquf^q%o
+EX,bX24&.TSEc64S2P'b7W<rC@iFB35X6H$#,#o>h5EhfXp%(%ji>A=VV@n_#[PXu
+:IHDh_^43_W]a1N@V>I$qe`_(n'_.PktVXEriI6@(E>-]"X%ah*gB3UPip205WVq!
+`]S2AkL/m*.B.%7a!:lIEX(Yfk`VZ?=JE/I=9`/J"sYZsKEA@gS1G),WBrWoldLWe
+OsI2,dlk9um]1'E!SVD%F/jT6=;J$[E0c=`25st-e'Qj-^3kdTo#'$4UA11BXF+KG
+0$+)I!+H._D?f,B94#\@@OaMF/1:BO?Xm&1?t_gW^*:LQ1EUQ=7#2$mG-D:1-tWqm
+63&PP$ADs*>S'j`'T*%QJOm.U0,KKhOJl9G810#s7:NM=S73uaMoHsg@&.0a'8XSY
+@5sWP-@q#l,%5H%,:41``^9J\HpT'86"&]OJ?!`NOpqVik_)?11Dl#nYdi&_'g!70
+77+h@cC#i9$3`bIGe,jb'2(`f.2^@H?lBFWK$ciP7g5+.@5+'j:f8d5$cWaY,U?,1
+&dfajQo&>[.i1c)@[Xm17O=!"AjVoYQsl3*h*k8p(jnc1[*`<hMl=*m/f9Q1eEqu[
+@OIoW@Y0$X4B95UMeiK(OLSCFUe_2BO_q7-,N;tJ0ePn::aMUIWtEEZ)ANCs7"u7G
+:3];Sa)H%kHm$4/_\S*I;Saa19.(AYK`;?&SE2f1&3uO)aQa6M[AbnaJL"Z][]Vn>
+1H6*o!AlDBZcP9-'89kQAsB,Gn6d2i_0_3e+e^#ZS@Jpj()At\]Ag,M%dO26Ud8ca
+\gM2G<5aH*i^=N7XjXlfXU=CV&Z($q64egD>40AF!K**V3j"!c'!NeL%2c<$K=N!R
+nZ!MoZU$9EoWq6N)'D93=rtOG%T$gULFtV[bp&/,LkEU.Rder`/Fp%'WsC4DM+^K'
+6NjYeip*opc',.D/;Oj6Q3=L<5q+GNK'M#dksEZ32)=M8SP.4Z3oSMIbU3e'9]/i-
+UCbX)[BW:!$Hg$-JpPO0WJ*aXYm=l$L,JT[3jbQ!E*sP-.I5h..W3<uY,"fZ-kojN
+]egLY1K?UOXKq*sV^__';McSh@s$A)m#2jRd4*iC?XL)m;-^M*brmDr/3>tK_l?/J
+X<k.P:Kt'JiY\aA<8.t:Va4Q_)280n*hM):QtdLDXO\0/VoVtOQ8"H/.,Q=Z&4(2=
+asrpu,`K.k5.k<W5:`__U_"=bn=/_>af0+Sbee&S<"V_?Ub[k7P3U.<TkSAgJ2`Md
+]$E>aiXE`Eba*o!#)\LVC:^qeCt_0,dg"K[=]f6qh=W#PKfqGj'.GUh![>MC+`o@u
+"tF"r4?a.Q%&=()"J;XW3qD_a-0Z$j&d0?_4qWIhV0`oV\5&?KhKo(D=@en#b`S^P
+VEkIC_2rLr0$>Q?'8E3L&fC'T@i]lkb?.,L.*-H5*MP/aE2PY=QI6]Vd4Xr2,hUkp
+J9%=kl\Ar_&fAa^SFAen@UV0Z&i5>Y?&2%nCmp_F0@(nqTU#p\"1\GAnO+Y!7tVUs
+a&GZ&0Sn+k'ZY[__.jJak'5+36=+.7Z"JB"'S`m%'O7%#1h`iSK.U&Q#i>,W,=a/>
+*$k#B_$D-2$lHUj_`6kJMWZ2gA;(et*flOg-Tu.VI@F`Jo8ZHb#*#k=Pr'=D+8@Sq
+T\LG#dKW!/+Tl9=`@dpl-C0Za=%Ehg&0^Uj%,hSS2MQGg4l]F6,.b#_T]d7GW*]s?
+X6VsreDE;C1hKEYM]d\q&JLta7heQRM8duNOuP-di_+N&/kFqG@j^TZ`)@eZJcD,N
+?;_Rpn;F+7fUYr'?qDPD4Fjs%S<cbT:-9/KMQN#J;j(4?R90U<S.H?33kuhP.=>YT
+pmILieIu1e3<\9BXH\6B;ZYW.E=B?>(0FP_ah:-'p"UkQ?Du2,GE^-?OI#rS,:+R6
+,a4Ih5l&Q6*eYi!E1,(XY\jpWoF<]k,q(&>6jaO[k(]\ALIc(;qbXhkS#O4E][B/4
+c3s;K.?2u_`'1RK?nj(J^$-[1jP?H6I5&]PY*0E#FW46P,_3[fY6.72i-D#I1+aUi
+R/Ck'GVo^kh<bbp/:t]+CRuZIYE_Re$J<KU6>s5c.\^+"kOJTs8PHo6A%n;fERuI4
+6,agbZG\0GGQqqo^`JXo6P-h76:H<pc9o[.bQ@:(VS&fYPj:ZW)H98G\.sWTWXP/D
+#qlQ@'XXT:$NZ>K0WGtqPj#&>:n(ja1D#kUM\rr0il>lV1kAYY+JVu;OY(_>YI;EM
+\/J3sWA4M%1\Q?jahl^n+K@l^+C%m-H*C<1@(Vcs/B?!BL20:upla=A6l*mM3CVYB
+Ql?$qNXJ^2nba%4eho.Cb*=i[#a&8foh5\60n$MC()@(ZVFY5EWNbHETiq<[g%m)+
+dEK9>HRWfFWXL"i</qT*<"0H<]Hq(sjdX-07]jLm\L!?`&Amj.m":lX.5`P+g?ulF
+^'lYa8=a!8@=9ZD9k/&"gQ8>b)c3'q?te2kZiZsi.gZ8`cY1tRUd%#`&[!L%W#5\&
+DdTTN%R4P^JK^1ODO#bk+XVIp+cB1Z5oZF]Qq2n'EYh2U#n'5D/K(E@l\A8o&:Lkt
+fhk\0?u[d_EeM6Y;gGCs@!cW8j[oIsU2K@2\HO/?m)`>O04Uli0a(!hc&h'1ToR;%
+--QT?VX0o`*s1\CbZ3aAN3J><ff.@eQMMj1cD7%`/tr&4Zf[M)6U>ZM#-="/b2@*V
+_0]uGG>a-h)WMBbg]'S'4N*AG^4,\dBYhXnWtO6EIa(KqC=SI=!Y(0YeBp't8PQ3%
+j)!'"#ngFL`6U&XRU`8+i[ma/QRV+3Rbr'9#4pB-Ph^Kmg`\jHk/<'A!h>1ig@T"X
+]`%1J8-k[uRp_$Ad@$R4/oli?QhR3kWR[CO&4nT-LA9^lpps]J@bE:%HR0QPJL(d5
+3ENQn[DohUKZMP[33[oOaa"+k[)L%:)TG-K[iS9*bl'XLXFqBr7atkQlTXF;'06>^
+Vi9)%F/8oa\g8(XaD+2u.P24``(K&/A%p\iMdlf&Nc/@\&46RSqmmE=Oca'2M?)+,
+K4E&O:e!-pXtoR5_ACZPgP;,?.'eFl*+"H=;Wm5n.$I`ZP>pjBkmYech3Ac!Wp+_P
+QG'p5?uQTA^c6YQYI7S5jHI]bJXa2NY8Ysl]].=LeglVX*7Ga5c$n53raE5Q&eWr?
+aiWuOL1WleDIT.2+*00qRWq(]PFlM48BF-hV9!hn=nrlA"ppp^\>-WXCY%<*=\N)P
+es%)dO"_9)X=K/>8_X:%6,bs]23O(J>?3fj#aMoaN0:-^:bMt5!^mT!13UK1Q9G-'
+P%d`RiQqkJj,@4(3XH:YdKg.MZBLB0/K9t+_OR1g*K_`hJ^>C;$ed1!'0\[KN8"OQ
+1Am2i$Sk"*]`Le8WD&J<l\WCoU5S?,;lg6c8II'5(8@'$!JLrD^kdf1N6D9iM1U:/
+XrR$%ZO=K.6I;`Wp_1M5V8JK,,O@\J*4q>J*Q+.nb>\cs\I;(fP3P8kj,!d\A;l>P
+R%^ah,CD,sLcB_m^n;\Kcl3i&j2&7=$uqCI+;I3,08c7*P*s\&J]tOSR]#L,/9t#X
+@=nnJ;iW&LL`>gaBH!JD$F`Ua29E?/RX0P<4XAtC5WNqLEVL*d&d]FlMbu+C;1j^H
+4I54<P*iDB;p)o&*BR+kOeWej@(7/+(,fXGM(=HO(n)H:6O:I>+'\;)&R(1R'/jfi
+MYWF,E<Hr3<L^cB4JU-1`#1\-$A$km&W/ai37OK+U4FN+,#WA.JFacmLP\,bPmGJW
+Z7-j,I$()D'Z&J$W#!AZ#)f/;6lM\dN'f<]6D1@`XEbr(@+Zs_KpjHq0Q;V2i=`P4
+C7,aW^;q7RBT!Z.l(1/$Qq5/Yad*_l%[t!YM26jC]5<G@Ldokh.(J=pf\hheAJIJ$
+M@7M%U$WT3_8_%F72*`P'8S/!2`&P%aEZI"khcr=i/Nk][nJF\P-DTg<e7n7&YVUS
+8/312N0?Mc%'cFn.2s3..>oVX8ULdL10$2)</ZS`NcP4Wb8;-1Sde80/7@(c3HV%l
+%$@NnLiA/*.<@1_kp34E1R+aV!BCf)ftu_t%t[kJRDo97/0FI9Ln(XW:u;Pj^*<F8
+Ot%K8nF`qpLp/]R2/KcJH(5KE[#-="1.eX2fSLGR0oJl9&@n-l9A6%`RERBGN"DK[
+W0E\77?<!KWbA0#HqQT3itoeCMh34Zi_-;&';Lp/P)7DQij9E0aNYWcQAT:@JO59B
+M`f0`UG.NWd'AJ3[#=KmO6H>).#3i;etH;20[P@i)*lIUFJVgN6a71=E1\'6JI4^F
+*imtY#_<ioOb(U65Ie%ce)W)Km[OjA_YUVdqq@M?7\Jea2bV<+WOND%J>MIeQ:S&)
+&F,AR'b(_](W`bFUk^0M+>.(e1e=,GTGO)K]Eq3]Pfd?j)ZGWt+M4Vh/i&q;at?>#
+]25i<T4rHmJSKaE23HQ7#dD7)b=ijL&cp3;4KuAmE[E`UA"+-kLetFG@V*]<WNt3a
+R-NCV\Wok[@?N>Bahcae&WoA@_Nh?_08U4CqQC9$*_>81'n^68j5>pen@Mhh$DGP*
+W.l&7ZRQU%6G,?:6&r4'@?LC]W#B):HNZQY(m-m\U?IE1R-Ls2g'N1*+)4Qkd>o=?
+%\$&$OJrq\$/he7]>eij1@,LT&AJM`F%%otMlHh5kiS5)XfXl3T,?H.+<5sf%E#0R
+%tMHkg4bWP,foOOZcc=On?XZ+4WI;/e"!6?M5(hKB-2ZD&:A=HZT>gfh3'H+S#G'm
+!^<PKfH&ro(BRA\'1<<#7m+C"]g.\%E?M='blN>8!SrT`cl<CUEh6*_V*O)]dcM.Z
+a:)R#2b8eBe1<OmkRMRt,RLN1i5H"QQN:M*`3A:"\Wj&1XXXud1W*LZ8Q?k2O]:p'
++]s@+C%2I/3`r>[7@fg@$.0B*+FtXOJ`n/+fH*D]\P?!0JQTJ"$"f20Yu+?M!R7m9
+H(WBa&Kq_!&X\U"6XgmOc4KI_2+82p!5^l#:6$HrRhHF.1?cV(a%$_p=rB#V@5s&T
+&m158)#@ju@UU"eqnDHrJ`Wm4ljaN:2&#7hO+;s^R"S7S'8Vp15ioMVj3(8U0om'W
+OHKo83pE`5g"<Oj#dHg_b9WEHTaKJ0-fLJe6`;$tPES>o0A%1@\@`4m**0`YW5@eV
+nF7I^cB$Z>!I,UcmE)Fp`fA4JJMT1j.'fi*"0(4?!KGJc@'B[6Z-\@TM!46@iAHHo
+bmA'E$'V`^dQQ1C/$MmOWed\V.F40/(^XZuJP9o#OYdd##gK:`&>5/b`A&U)r8),/
+MP7dO3D]a$*86c#JZ<XFGS1HR]Wp6S%<D@]Gg@/%dfHrq]Yd_+5T:n]FqJbj&d.2+
+Zi>s%:5Fg'==E*m\Er#5%Lbl=Tn?p;_rLhf'e!gJLb#p#b2NFgg:XPfSbuG\-)Fc1
+i#M^_hOkpplY/(5%jfm$!Hf%sb1om7+<UJ]fLR)5bfdns)_Jo*bfIDX8iE4Js+*?g
+YORekZ14:N%`<gLVW\Wmn.-[s6QZ<XM_Z_*""Bmg"4$0)fo*uRfH,UEs3RLoMP7!L
+n.H`>ct'4_#b&ep\.5lc%^g%?Z((WN;^+97G<jXPfT7,)\H!9?gD&B+O.lB5=N/pK
+ns#&&VX&mn,`*c0%fl#bA3kg'a;-MgjV<AJ8o(1H=Y/AW*Wa=s!>0)[\P=596@g1$
+$*YHOjqNlH"-S+DV:_/)ds<?@+HUk7f?siUN%S;)b+'UZX/qMIM'e']h)jO4!RWU8
+l8=K-[b9olO&NW`a:<a_6K/W&RA/r=+sn/JW1/u,P(8c+S.,M_'nHs5S7)bU#%V=@
+E.IEiJRf5%;'N!5R=OEu'`\p%PDff@Mk1Qr(kAqYLs&)G*.eBfJ_=jr.P?t&'g`Im
+`_d(o>Y?:I[\ql33uP!,,`gXHLLs;;UKIXCE4B7_Oo_'b69E!`pp1<6$is`IS&L9l
+=:]rG%Hr7[JD^ui;%e^9ngXVNBo3`6BocuF-s%Xo&4t6KJAsa.+G'kB!W=+:$G$Y'
+IhQFjA^D4o^_nh?cJS6S&o5<A@()A'[@oL[A2XsdR*=Q=MT-Np#uP%=6Up'`6ikXM
+lVJN$i"s6oLB,C)ksu>8ck#%Og1T]D+b$q:jmAOJl%,VQ^Pg;:^)=!Y*K]KT!O*Ys
+p7TC?SrK0aMNGCX&L*)HAJ'_8J`)e8P:183Ub[7%O1AiA8.f\Ncl.`B#fqfGPI1lC
+*._MpRYVJi+;9aG9*&uCJVY7rmelCt%=l5'Bh/a7a:<b_3Ff&W!<1tkR&Gq#HKQCl
+>-3[>1ZT2LkF@>HB-n%T+KqBDog?T:_c11Rh[phg,B$0"^-SP4S#%M!Vf1.AA22CI
+.%o^>+">:rh`ATep^SNP(RVG[,)@%d%E)r\%fkJi!7">in-ad)'.pp9n<W&T7F3!i
+`aHg)lp)\F!#pcO.$FfbS;8'#V2;"Yi.7^Y_WfhdJC'Y`'ZNtI;\'\$?Lr!_&2m]*
+%IVRD(1^nU-unKsN0"s/kT)/\.4*8+l[#3(s!5ic(]amXT!Y\:GRXYf#(\05!3co`
+.04DV/V)gPM_W1l!$;7Z,(^XU!\bdKT[*qJ1m;%`JXs']h*)\t9'4(uR-G:slt$SJ
+*s'1?nU_U"69h5O+Z<h=<3d/;ruI^1c11MkJXfpcYS^pELB-6@kV*QN%jbXT&DGbU
+!D!c;GRX6E#B^Re!?fds!dL7)%WtN.MHH`s#U0<m+bCOQ*Vc(AnHLV5_?#qo>ZOpW
+k+LS9g`fSN*=9+4i9,r?E2D<!\iLY7E:jV4cu]cnDq*'h&h$#l*J(F2CQK!UcjVoZ
+h%!.Ym&1JH8WeQp%tNgGFSH=H8.L0RGtX;5]Jc."8L"NZ\)*c#JgXY%&0<'bT;h&,
+#gqT'h6Ga4`[@]+qG878%lYNF9S$<)PK4ej8j2W6r#r&<p4;:(=Xl+[E0%<s3eHBc
+\/a?J&UD/$GB'R<=ZQof%0<6,,(r1$L^X9u"G'XH!72>S$XJp7&:j1I,B8sQfH((g
++Ta<oC)DMQ&l"9FIiN*,_kk<nXg*HObQ7bgJ`n6Xp#QNGh>r][!T4lPREg'%4SZDt
+j>M/*_0%Ac6C"f\Q_:2$:_iC8%/_h.6\*iSLY7iL)$*ee!8n7_3"5mZ%XJ)o-RgM%
+KOj41&/%-jJUedC(P$<e+DMbS!>-!DW65c$)J,A-]WVcj:a1K&,6@iFJj%95,COj9
++:%u>C+pA0Kd'A"KLR:'#t1M=(kb!n&-t\`nUS,Q//8JEJga09*$u;T"JT<iW*'rT
+N<WlI=F`LQ$jHdM!<AK\//X?NULDOAC`sE"7\[G\E%NpUM5`e7(s4Tb'[E_q0_fg3
+.27["@_la=HpJkcLSN8I873VXN?uIS:ps[e*aM9GJ]R2&4X(JojAIuDO@ULT7fr4:
+TN3omO2dq<A8k3d&I?=L\L=4$*=iED!g/a=?8!'#`3BmSG"sC5CGA/lE5GtU'aMY8
+af&E\%Mk$.pP[DT'JUO7.3W*?>VIE5"mR!LBW+`T'C,e4OT:`H.?6\`[NXl$F?1D#
+V4nQ<r+du%$jHf"nFFda]FG16!!s2=Jg6Au60_ddLC5MF)Dkl):(`.f&4dOh_&G3C
+1Q:o@)?q@8?5A5+GXAL>JNPk&/"p`fd(I2!Cto*MYWNDk_0Bk1LOn1I&;3e$>2-#O
+82(Xb!747S6K)rE'KU3c64T\\0MW@:/tceq7Y/X"*!YtiC(Q)5n8'!HCPq0pLS=Kl
+*<r_rF<HC65_d,U,!uJW#;.E4*=)](DArd'LfP2mM"jN@KL&"C$%q2Q]$W!hij01B
+0`h]d-&i1Bj!u7j<Y#:rpg3MED\-dt"@8,e(Iq4eQ4V*q.mb)j.\ijTZVj[dKurP!
+HL].oY\Y2jD#;I5We"8Q),,V^IN4)_&8iQq@PEN]L^Y,P^5)g-A0-NL]WN,5.3g>-
+ctK@;c@bY>eu=@"843u@b2TuH/#rb](o?J1>)@m=^b-+LBdd:-LJ-+::kV-%E#1AS
+g6SRg%VhGuL37R4-_S:#3mRq#4&-Br=;9m:4`IVhcr\&V=Hp/o!.`(E'l[CrLS>?9
++UFeBN$ATP(2[UemuVej-1W>bKsG,J.<;:ON3!pIE'Qsq"4e[/'e@+@0mcUc3*m+B
+GNJdR#<E=t*FR1f?R17hXB#`fi2ACF-dPn((JF*m)@n$nkXVSkc&co8:GV>cGM"oE
+j:heY@i?;@#hW`0L]S-:+p[*UM94q=\9.NOU#9t#6MX:hLBM$H-Z[2"Q3J;fR7\G1
+;!?CafS0njBH&o$W+E.m.TebT"G(Ua*!Y1(D@_D))V,B#+K-m%;a?Eu'mT;RAf(]7
+q]Z_t:;\L+">>)kZNfC$$5ir>;Ho8N:7,E2LXQfPdTE3pjrK7$i/,V_DtNOc<KPQn
+X6=95V5UlO9\4gQ*J)#JO97aYB[V,P+Y25m)A7F9d?/';&3($uE$to3$'b[u)(:-(
+OpFA356bMS%0;6WoRPj2!t5>NK=-"5dN_it5`+!Yf47;W1`S.[WK@5.=ARAL031?.
+(dj[4h18*O7R5bH1=17W^^'rH"eEegjoc/%e2fAgI0KaD*<SRb*&^4\VLp4gNKTJ,
+01Cm#KP7rd_D".UTPt5=?mc6\clYC[3=D>?<gl=Y,?"S=$F^<?"2ME&>=XP1/?iT/
+JTPX6`G$*sTO^jSdD-!'#S$q1FC%Umn4JO:)R3+I#6CQ2/u=F)KK&$)_?1r0#uXlo
+E[l\$p_s=!(`&PqN-Q,=(0!`bBG[!r?C'(2#JfSR!AH"r,krHEW/qf0?tr+S^c)C(
+>!Y^k1E/Sm(LT#n)`Cho%)G&C"$gh,^sG>ObAfa"+RC!IY[0t3^c"un5s1A(.]e2I
+B2;*).[1#.&)<O;9Z4FY5pdod5q;7GX?L-FYVZR+;6VrI8/;7qg^'CDXX3U#%SR+Z
+"@/Ul?_D3E[54OfBG`RL5ga-E.3\nm<5nrh=N-l=9Zbs%oVV\$SC/N@#Ki4Q4NdI^
+K((UD8a?Fh0gM?P@j+2GEX$7%M;5gAI5SjGTd(sp*Wj\ZC/(upUfB[E[:Df9:5TYd
+J;"B*6o*=pZgD^m":,#n+9eP<pK3.uY:j?q%"Ya!OoRr7<<+oY^p#5h`f(]kL9O-5
+-lN1QA.:X=ed':=HNjfEN5m%t$;i).X7"dO;M:#pbm5qRB$K,FF3(P%HZgWFI<Nqm
+(^DWP(^"H.X!RE7#V!P36R8TG[<\#abAooO^gm\$0HQ,Pm8+puS?>l/,Z0,++Tcg9
+kQ-Q1!!'5M4k7O=hj:bW^s2hKG+O(,6nm11bYA6_St72S;@5"#1F!*dGlmQ4$peZO
+85%XHX2HPY!GPgCDep/aRWBE#?l?Mp]"G3nO_K@C6u(5;d']8u$nh;c!^JjTOZVVi
+M*YDl!/qDW,%:\YJP3^b=;'=4,!iMD?NaI&$r4H/#6>"]1in2+!oQmR>-Y>'MobVp
+4M8g&9s5cTI1+d*10^E6)8ZLk07p&:;J3Eb?ft:3,k@r?XZe=4V0.(D'de:4W"K-`
+j:GZEA4d8-(l_#.3<:YKoDlR$^5i\^4gejua=nd[!+G&*!'p8DM&L.0ZkJ"P8jPaY
+O3d"!)/=Q@R>iAc6Q)i3')!^]cp:o0i2)3[XQad4WrL$E4UpSi184=9:0<eNdF*FL
+GVh<="=H34&Fr_8FEfRh3_g7N?nJ5]g.k2jTil*hCT'"[UBO\Q^.nc'We!`]6TVp8
+lR]iP[H=p%Mqs6B4aXk50t5e6(k@,~>
endstream
endobj
152 0 obj
<<
/Length 3601
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f/-O)pDp3JW*K+2,(uaEM0gW)ig0hP@9j,ImJ[F@.9Og2Ms>K%#)Sb
+N,fY+LQrA@@c5NO>;2/`k#4"%=E60ebpG_b^s[<ZRK\@bk^[t%S5,u:1>nhh@5nW)
+B-C\;\1&HIkX,r(*gL9B$k-`XT_)VQ_MgqD+fO!63Z-pk!7IO@0b,uYc9_VQR,h[6
+R7F"ae]@Ao_V/jMd9t->P1G7Y@Z)cs;CrcF3^SHZK[O`ZN.qD/@D'nr_NF?"?,#JD
+Nt;Ym)%u11Q)rSXq4eFL8#NWFour.h`p\41\*aUQ[Oo=RNqU0S9B==-iNR._\urXB
+&4.U\5S\q^'F;Rj:Z,@G2\#gco``_k;Zo8o;jdgnW,o<_"V9PL_M+aU<#Gj4YZ/l-
+N-JS\6_hQOpI-c?SEN"2JBBeZOZ\I(7<1KW(dbHo_D)O;#[A1_XF,d+^+tW2,W]G&
+i%hNf5]mUGd0n=9]2%D!n2cT6gsEG0ODsfF+[!LRbYh]7e[[IIdPd%/3o`&U_dLnP
+%\k6V1JJPC<2^q\655/CWnO^QL-^W3X>93GW&+pV"Xl*cM9+!5KFbj`-40ek5Wc./
+6o,3$USW(c5Ace)2[gp=o!p(,JDXiG_g'llfV&;nQ]>Q@hA!>J5jo'h6S#cb#.DlV
+)dFP.SG/`IBQ=mn@D]]UKbZaL<Rn8F@9HWr[;fP@+TQ$l?^:]7g"BD;SS/IuQ)SP(
+(=fs6>5$&+ESR6]?k<X^Gj/2dR#jUTZ=.dPV1kUn>Snq];T?US$\f?,%BYmnrNP<W
+'+%alSBk59cR;m,>GE%P3f\>R_gc&/puPnf(0L0?g%LG[$YVnXkW7hN6X6kWH&c1!
+3l>E6S5g;)G?0a!D/W[r6R]gaeh8GpF#@VZD+uLj8jeht.&^Aj+T\mUY,NiE:aq@2
+8;"0NqlMWR+c)``LV$6WmML\F>GK'S<B[2j$tFYY>D4JE:b\a=Iblo@qB_*9-Ts&u
+4"b"kae0.f!/ZLa$$_=g@r7\B.ZM>@)EW+>Luc)VS]KYD":J/>gPgc6IN`j/?sA^b
+((8Mup>U[E1G0oAA.T%,0;"!-__75/M>gVo21uAdVq1#UPUn/?[J*(r_k8,sNu;cH
+J7?#j)pAg@p^dRq!lWnNW.(O])a(V3U]V:b71'c"/QZbqK5m&!+N[EI5[_3T\R.d$
+`&YRjIM'D86Nt8Vrh5G,%)EV*%>e?C"q^#"*Lk0!bZlTN#\Y(XX$VU#]aHYaXr5%X
+3J!m7i.gH1a;7F41;tg+^&UD3649Uo+N8SY^k*,K?m9+b7#<@s)@_SYJfs00/cphI
+&S&U!$=P2)K]TEI_*C9mJ:K$O+ArX\J56GZ'Ih),S.XcY@0UM#,D6W8&jgP+"d,q-
+`od+pJ\a`"9>QQ=GRb'%6KA:XR>\?N>6u0/R;V;A'caGe%RJ/nL2S4%!elr]JWi<$
+TXYpsnDG90QnekY5cmZB7gVkhU+%hH-GT,o%)K:mMoY0=/VILP6TA_8joFh)6=(Kr
++o?HAM;3coI&]MPB+CWs-*+Lm'36WW%?7;8_mlfFikQ\%k#N3f(1>@W!mV8VZ2Upd
+C@fOdpc@NU=MAqKY1>)CF6u\p.[+<^;IULRL.JEKLB+5T)Cc1,!&t(R?44Za0k-<J
+`.Hpq(r:93"i8\GK(.,,!I/Z>iL0B@nAlP9&20B+^c0_]ar#bUGc=Vf?W?<`*W^C6
+%AC%g"B#FD88?QU">h)WE,.(1p`M#Yk(*UGECic:,7L5%/"9/J8S`BkOU_FaOW\[2
+97RHpJO[9&&CXbD;$dG\RA<m)%TY+dAi7LP,EjgG8:sbN.*C=u&Fc+o!n^d%iK+8r
+P:@#-!&XusTT@f:8-gbN-FEl[db)`P7]g&-#,b)<gMh(ImFAkWp8Zp&[S:Q)]tgm2
+U`:(QI`sDRZFQ;_huteR=94LB,U>q/YNp"H>lc#Ni?U=PVfWlnD1j)+<or*%Mf119
+mK=<Rjk?c7F=oG?^=M<>gK:ju/g\lPf>Qn+]4l_3*NQpk$NaTal$(f<cQi2I#2dWH
+J*pmY^imTsgni,,nDRKW\:3LIg\S\Hed95rP5k];.<S3:"!FFKa:R+8B34b=[M%AV
+'/E2%Tf[c3K[^\VUEs!D/@`V60+h`[f84Hi:;dtRf&WnGMsp&a+B[9Y&LSt:8EjB]
+JPj<UN/g0EiC1\q2`0U.9l2\(._6M<(?LHgQA?KC,Xb<DVlY*0gbKDai&5BRN89s(
+[YDpA)a\5.Vh0a(L!f_K#3UrTjQf`rchR,H",#fPnjJ:eGS;Fh/DZP52KC&=V`O%d
+/Y99@C'Q%p0k9!hK8H9[+kh=:l4@P:oKCR+HNQ^l%>U_GcH"*(],9d[p-ZZnIb)&n
+?"@e;5f'4Ec$Kh8@9nl%E6d5h>;$h)]jZp%Tbu7*:_YpLGQVtTo`iE7$!U;cJ2a&8
+!Np#KK3e)^E2BPkqj0G*E[I`#2EKQ[!g@DiMnA_CN!?Utr`[a>I^l6#[[Zj;nXJEX
+\=@Nu>$#>(IL`<dlD2Y:5_7fjV8[YdqW7X9NWWU#a8(j$jEeRn3DNGrM[k="Qho?4
+DIG<0^I?N)clBoaC!jEonEF0CSn6\s_E'2kh3r[VhUP-Dpq?4`rA1?p5&o5Y^3AYN
+om[Q:dUe76\*I01?1lrh,!-$$#+ae[>7UJ^qt:W[Rla`P*MC#diDSl`[fZ4AV0oM\
+e)hVSrUN&_Mg<=]`9!J!?nXP&]2`7B25hIsY]:2H9l$l=]t`/<"'n9:L%KE@K@eN`
+?gEu/]f$YfWZ+dLlu4hf(!ap%)qjEA7+eW3>7;u&PN71:PNlLFb@&RNo'VM\qDTnD
+BeLK=rq8%X(Mg':It(rlFl=I0O\jnaGC'*5iPB_2q0`K&oWFP1\/o#Cs$*min$p7G
+Pk34j!"Ut20D,:jIfAb)_f,hUO8et@9#ZhEE"#4T0Gada:rEne!cTjB.<P&s9QH)6
+4%D7Rm!`L5)TZB(g<Fs*XK;MB/BUUlqeT%40D`hmT(sp%"A[SR9Yb#N?upipbg!<;
+N\:U:gs0l&""bA8OE1^:eH_1&b:_BDU)qXY!<gY,cqobN:mD6(_$S;9$uhsMafu2U
+eD/@%RfX*.Nje.g=TY^Z#]M!8OQQ_Mo*;M%%?RgF6Eq"1iahFr"c_4s9a99IACsV+
+%df5fX'ZB7+UX3s&'Zf^0Xh=+'*ZY=gC:qt0P9&k`sdn''Mpanc`n23,7fmei3<4:
+,!-?1FU6?#rZGm@:$UsR_%uG1j+<a:%fmL7W=&#HlN3OYn5RJ&M%bmn+Y<KZ:H[kr
+T,4Z!X[BJq&&B1PG8Q=2mAB;&b_5(qm/[_mmjg=&%RessWuVeVp[QEGE@i-4Ym:h=
+-IBFAYBk-7EpP+N+&UOA/$e>6!?a+P*\Rl^$aSt?D!R1CpTC,.c[R,+qLjlq+EAb5
+d/NORr7rrA&<>o);%XtTd$>:;koaO_OoA_9;#sQom4LsQcE?*r:D7X^qlLk8n9H4^
+%dg=b_Jc=QO963cYetEr_!eB-YPBTL80B#~>
endstream
endobj
153 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F10 22 0 R
/F12 34 0 R
>>
/XObject <<
/Im20 148 0 R
/Im21 150 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS8 127 0 R
/CS10 149 0 R
>>
>>
endobj
149 0 obj
[/Indexed /DeviceRGB 255 154 0 R]
endobj
154 0 obj
<<
/Filter /ASCII85Decode
/Length 977
>>
stream
+s8W*!!!!9)!6i[2!!*$!IfTKK!!'dK^Au$`^ApJ_5Pt?Tp\4FRoCMG>n*B<*kND$g
j5]%ShqQo?f@SX'e'lXhccaMTa2c6<_o'4&^:Lne[^NWMZEgX9Y,\M%VP^5bU8"6N
Ssl+:QBmi"P*1icNf&^OL5(G7JqAE!I<g*`F`hhHEH,i4D/!]uAS#F]@:<GI?!1<5
<E3$r;,L%^9h@oJ77BX25s[Uq4?,;[1c.$C0JG%//1;np,U=WX+<VXD*#KM0'GM5m
&.f6Y$j[+E"9\kObl?MTh3j\TWiE(2AsmjeG;D$e<E3'!s31MeREV(2s(4&Cs-Wl!
!&L$T1M16es8N(err<&T1B<iebl=*!s(5le1G`YCB$?YCAsm8!mdBMebfm]2]829!
6psEe+sR'es8N#sr;?KhqYL$`q=jXXp%A"LoCMPDo'l/<mdBN1mHs6*lfmZukND$j
k2tacjPo1YiSibQhr!8Gh:p]=g=k95f\"d+f%&=$e'ldndF$:dcd'h]bfn;Rb0%iJ
aiDHB`Pog6_o'@._SEt&^:q=p]tM%i]=GJ_\$riT[^NQM['I!CZ*CR;YHP(1XfJM'
WiE(tW2QSjVPU,cUSFTXTqS*NT:VXGS=H+<R[TY4R?s8,Q'IVuPEV/mP)tceNfK-Z
NK&jSMi!:ILPLY>L5(A7KS"f-JUrB%It)lpI=$<fH?sm^G^+CTG'.qMF)uDBEH,o8
Df0H1Ci!p&C2.HsBkM'kAS#F_@q/tW@UNSO?=$rD?!UZ=>?P*3='&I(<`W1!<)QUl
;,L1d:JX\Z9hS,P8kM]H84Z3>7R]a76UO4,5s[_"5<_7p4?P_e3]]8]3B&lU2)R6I
1G^dA1,(C9/hSb./M/J'.k)nr-RU8g-70u`,U+EV+X&!N+!2LD*?,q:)B'M2(`4#(
()7Q!',)#k&J5Na%h9'Z$k*OO$47(G#mU\?"U,&3!s8T+!WW3#~>
endstream
endobj
156 0 obj
<<
/Length 3062
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVoaC6b=N/%H8\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="6--oa3Z(:36VoUC1`?aW0ppV#Db1kgA7\(QjJ[9o&5K)i
+8^Q=74Mm*?o3mI3GbNMSK2HUG?n`Nl.[.]9f$Y!O^uY"UOW5;F,t\VCJH=U>%jm)?
+A_;9k)B^km!Mam':igIb8OfIGITnLB#*e523%Sq\$\l[^iu$WN3&;Lc$BeQYre#EH
+giW&,bb?Bg)!*OU@EukOZ^qj@V^$c*k%3=6YaUB>Xr]>87IDC/`-cSaOon?dJk<?-
+CbhJRVW4>"k\)`-$:GMp:f9:kM?kC.$*_^YX.qr6&.H_V5kTg^i(uKE,EUb@4\oSa
+rX=Dbi1Q*_9HO0B_]V3)N?`-%2@M:\gbZ^&f[:Oh,3YsO-R!4We#K*.]Wa1@psq:?
+mYc1@2i'Ori&F9[C`5:Z#Z)t2,B2L!6j&pQi(+,gp;;On_mBt"cL\j4"TuhlT-sdI
+\.fGS@*CWhJP:IUa=Zrp+pLdZ?lQOKTSP@`@i48`_XPq..F&R5jGD&GEoJ!m.SIMF
+]OIP\1o@$%l8K,jbVp*Gmn;4m-EhdUq7a&Eo)6elONKHe0Z[-0#-_3-(tL<i?k`_F
+R,B`YDmJZ"La-Har]ea3hDU)("_J_X'U;/a50q.>AOY!sW"g_sJ6]RnlGLX@^[qDa
+a<mYf5V\8YB\NuV"&4%8NT2hj&(bs^ck_XAi8-8Lb3]?CO"(7[/d?HK;B"+CX;pp;
+Y?X1L6,O]<&4H4c>8Mk!]sDS$kZ,:d4g4q4*^?E/_E6=k\pb2!PMjo=%']<8b`2F3
+fa:'m`W(`'plOY$VQo1:pdH[nDQo.G#jCo7OQ8Q_g=F+^X1V<6hfGjmbqfDdcpSTQ
+@;q*VRuF+"?W`9;j[!F5:iO9,ACmKs0ZS/sR]_;\,@EEDA!1RcNj!:f&.[6]CE*e9
+Ia/W;iFpJ``KmY_Ccl3`lLg*`1rAuM/o#g(h%)=a:StHX`DuG.LDY[N"4`,fdUO-@
+ra-fPj/%agB.ipnpGZV:`:;nb0Z@:W0o\;A4:aaDn8'2OG/KM!1saTpdF$Vk7UOj=
+j"E".F%["0d<#0)6oT4VBYq)s>V0V'<n4upOm3pXX4I5TX84jApW_:d>gkDpkjaKd
+1SFWg$Me-;nP?<,d-q,uHt[2Yg)h*S6\.P3%'N4r]Eer$Qa5+cmSXIK,Vg4a)C6op
+e1nf&rqkSn[08&8(I(e=$WF#0/o*>=2kY!EO(pce%L(]G2(2(%![^)c*Y/GdjA1[@
+nSUs1ntAs5qMD78%"Zrc+lL<6RNP92!=e7oU54b*R0kFAN$a3cLD^YEJObReA;!dr
+m%Qk*0[$-r,KB`Z)p8Bh:Ad%7KnR96*)_[1Kr2==n@A^0FUbM9,J#\dLeis%@mIG=
+*L433".3nNJX'cIkfcmp.2+XJ1o,a;=:Rue2,.fu<NVp2/^FMt.]lF+JcOaCK*gg]
+YtR!lkTo*(SA@>V#aD&[apSJo0Qj6YgkOF2pgF;MCJ4&DTpL^s$9946!7\NR+u(!m
+ir<^D#W@GtCDl*D3LpLGU,"&dc.+#c<:U4+bW(X+@Ir\Ma?@&+=/<BsI).ulq5(]7
+jYU7Y(,_3E,Hcc)\KMS>L@M(Mai1[s98cb3Dg4=:2J1n1Y\ldH;MYRTRM_<9[ton5
+rlfPg)q>VMTdQjP[(4rt!^mtk/e39/AZ$'.j;XjIg0QX=QlI"%GXO>K0,>;HL^u6(
+CPOJ8]bXfDJeN]RXJ-+<qRRN8!+_G_rdFraOrTiMZ!u!Lgo+.tON9aW"9?XcVc/Um
+![r;]8"hA$EXJ'AU/t1sAOT\)DIq=Ca?3l<S3&^b)qo6RN)>_q+4^N+i-d=\:VHP>
+p3<b!1gkomMJNMbQL7g0%ZaRLH&"8$'a&j@IaiTZ"%[OS_`9nGB^qM@H)qr&\8II)
+S`rQgGfs+@*E2>^T-;b5ef-,tLV\so*m/r;kb0l&_6&s:#(h1oj(<F8D%WAm1t7oa
+<G#nukW5IIi7H%k]qj/\25'0TJOh]%8',FDA+ljlb<0F^!WsG>Z$M[pgUjJ;C.WKr
+`IXJe$K._h56tl(07-\/DdM,5kRO\1'j4iNb+c!_pLdVa;$7-?g;W[Z<#IO:`O"ur
+cW:2[fa@:hG_?c6Gi99FSXI:sV0rR-J/k<C-:JWB5I*=Lc0@ZEXT>phjN&*Xd#siA
+37tjUJ5D:<9"0O._@oV`#$2K'q.X6EF>6CCF[M](=VWPgfRauJMJX>&X:U.$&E!fp
+l%KNhfmL7#c3a+uHk(j\(C,@($.EQL0(a!tUl!G*1a"I[Ce6$%V=GUEaDaj>McJ$+
+h5R">Xp_f`&-D68?-%#QUVPq1;A<jb6SN!YBqIae!,PlUK[;=IA@nT_Zr:#V][t*n
+:o6R3&p:)&9YdE$#<e:[2Iu:[':A7+XTf3TG/2`r&0Z`mRYau<Gh.D`(Pb.M*>:H'
+"lRK\Jun7*dl9#d8Y,[P,he_R3$8B.f3?7CF0l9T^!l59)$6rC^qi=,i4u0IK!8^g
+pfd(B@(ad&&rX*(f$U"._B%n^e/7plmbRu?4E*Pg^qidQjo!/Ckrrh+\\K]Od$on>
+h=meU(?@@.[r_]][B$^.0Ejb00l$-<;.73hg3SCKcsn1/6&7Qi!U);9IC0\RB)GBN
+T/13n;@@HcD`4S]=!hm.$RRMed6-l@oA/HDG[@h5Y"OQ<5..<c4+ZhUj-(0q$a08k
+9HhVA19HSH6`QXg:T9j?8goE34#+1#ff+P8Sut?hPcKQC[m932k78tEI(c2(e$tl[
+$Zd3UF>EfBU$MR/RuTXq2:*R?UoFhs\2OWWdTEn`WE]Ik2guA/qUfot8']4"q5WHP
+q_j,cnhVh0U"'oJG]93>\2aFkO$PX(`/.RlljPR:/=CXF%TU#A<csWfU%b]XA3<H+
+)M=pjBT4?`"JX+/b''jUM9A`?+AdJS3^`%qD;auo9[$21)Jp`l3G9\F,I"OgA6//4
+%&;CqLgF+5en-Q>@fl3%U&k~>
endstream
endobj
157 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
158 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im22
/Width 313
/Height 40
/BitsPerComponent 8
/ColorSpace 136 0 R
/Length 8352
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J-j0RLa3O0.=qlEcnSY4@1O1_`PSlR-qY`t$"7;!6s)o$%gPIqi:)+Z+:s?^69/G6
+0I<)[AhgeDUf8o`%>P%J^t<<R'SqC8T[7dO.u0%:6=D!q6m3*HjHV_ZJl`eUM8_gO
+R+Q:8)\#8H+b6dl+:SLkiNWZY<\1)'6\2JoE'>G39VrHuN+>U1((7?5d9s%T.YH!"
+G4B/U<%*[E-+*$03`VB'7g3#-/9VdX'oPMc5s3"#"+t&+&^=Pf"U0G`[TBJFW`1.+
+j_rhR32fu6`!QXpX[I1C_lQdZcs:0/"=Y)o`ZlXg`*b257<oW=LCQOHP1=aqCp0.-
+0A/VQdtuTFI6aK'"/8Y#^ge&:7Hr>@S;p4+\KN(h'a;F@C9O]^S#iq!+PP>R/^,V:
+&;.$V3"IL\E\bAHBp_ZZ"iul5`N\Pf2Rg%dK-76Xbd5C52f)D$m5+8o&;;Hi8o0-j
+JO<]b[OmsB(-KqOM%_hMr+@*09flI14)2[!K1D'qSed&(QtWb9nPbO^[-`ZA&VM;'
+9\`>K95N?W1M\VUTP:oF)Q.<5Af$..''Ki/Tl[.KKrti41!HU&3CAG"\lP,MThPA&
+L=D+!(kppV;$MX\=@0e[E1ADh^[t_)dn-LmHl'^p.i/gSD>[;PWK7HjgW^C9/r[^8
+m$Q+rc3otF\#iVV*'GlqRj#<reOGrOFor7$=B6_mNj:F*IiZ)96jTsD+f-VQabjoM
+e%<bS;-QbY8u"1JM)nKj"CWiFqM'R2EB?r-V"PHPOAK3p\2,$g%^'TD'&9<L,ode#
+'U0=t:E\RL$n[_%<YNeEe1X6D2'd_(\'YZb<A!lK;-18$P_e)Mf6_J#^^L'5?,Q3]
+R9nF3Zau,q[4:iaWu:i)>ia-;*>5tUK@MA*0[tS"UTJj)3X6h>`9X.Yc,B67!>XEZ
+enTY@FkrN:X-SE),.+LZb679,K9)*d(P[L6AQ6"03(OV`p`MJh"(:INQ;O[E)[+TR
+YXOC#@1Z6NU3OU,NC+"YGq$;KHU,U/&O&n.YYeGiaX)gmh(rWU6LYXF&Y4DZl7CFU
+`7QVe/Q-5lm?$o&2jLbiF;Of`RC'+@#qr-e<2Ucq-l?&'L;CrQT%hbrD_LjbC8!H:
+9s79sD#%r*FfNr+E<GL\HI7S%@3AjemdA%ra@q-Tk+Z?NrC"+!!M[6ES4aGm+Do.Z
+!mJYWZY<RDkpnSLIZ3*W-WS=%d]4\Bl,p$nD'`l8U8C1c%3`Vj/KpW6YZ1#F]#@2F
+Co8mt?uB&'g3>$!M&ZbVd*D1CA*5j!Qj9;VR]CU)Y1]HfQFp1];B'_34gM56`=(KW
+Acs6>+$\g!$\:8Z!ru:-JWN>r(\BUF,r*+_nq[MO!an%h`W%'4`803F*'s'.lmIlW
+_4sXY7`MPW/Q[mH9gUTokpR7H'p=K=A1r=l`.koK.\'c&E.Y.4Rn+cQX:Y"c39TQO
+Oq[b]i7U&DP)[bfjc41al9@rm8/*p?UeasYJ:oEqa[sqKa%P2>I$$FoSiC!iii8.G
+5e%I.i%>05TGRf-4`?HPD&E?VIKN=L.@HD+SCau)C<bF(Yn/MkJC9p;^n;:KeIi.`
+UjG_P>#Z=&<-h:!3J+GGXeN\(8u,[m"fe5PaS9;g#eRg3NljY>Zh!Xa>9?N*Gs_VL
+6qKs8,=#iD_3cQ=M-_Io4QL4Q/LPR+!IIe3$p<l,",9L/WVi(KnKH)R`(As'D5':k
+S4-h#%"W66R,CdLJfn)%iYk?Wi0CK+3Mm%S;BI'`0V+g!KF;Dai1*Zo&eu<05b;FO
+05B;%,T%M]NET1YK["#$i]r5HOZ03Di7UII$UN&f<d%#s5*JSOZ/s0+.V+\k5bk!0
+?3E/fWE'56EYONa,,J$f]fMgLaXiRN>&S>A[*m&UpWija;"Q`0\u?P*QL-Z!Z#4L^
+3e!_>,_U)5Q+t)%csP$!O/]<Z)1qom$:,ViS1ZtGVFAeC<[kAHMD1JMAW!_J\`dPc
+\M;&97/i8fqbRipV(1"pPUj-,22^X-**U#f<tjIsa9"t##<]%-KnF+oY*6J_9\h14
+?uF+bP,l/hD-kp6M-&YW'da2`!6]mF[WU,k!+:A9$JkrkA.:7I3!g+p&RXrld)'`m
+#[aeT^`[Lm0-oPC)P^:[a&Jl:5W\tqfo6/CRbo'LQQN1pmRjm5'j^.nAkk):Dg2'&
+J`&n;<C27;-k5)OA=./X4:=#JG4nr\qWV"g15$)O@,?]5e63k6B=*1-K916dg8Hlb
+<^Pm((0Y#Ue"sggq7hKH-3c0\"*1'!^]O"9h,;l[_-hi(JY5+3PO[0I"?_MqHnO;t
+BH*ofH#7!sZ;6YG,m2i3!\)!Pf9q4/G8IiSR@Im8X>.tCn1C3?`o72A$5Wh6C?]7Q
+=R.B/UNY60RN'@C.df(9^?pZX)>6g]iA;0lB(XCp4-tpMn2CS[oH*-"dkbMc95JLF
+YSh)_O#(PbeIt_=979ojNhYD6lfbq^Ek'pu):U^RG+pZQ1rb(S^<sG2L>Oa-TKsog
+@ZEKBJnU3FdW.L+M_eV6AXa/($k6I<%W?o;10pWJJZ&R^MmuAn57YdNi$eOA/+&Cq
+-sL.]Uq)mS$2@pW/;#nd[c'R.ORlM8ciubn*eWC!ZW"0e1&!UadiGKR'J.Z7=9i^l
+MYL2@;^(.29G:,5l3IDXFBbEaFI#X+R8C&b"(6_3.Wht^m!LYo46Hh4=Y:$NC@Pu*
+;_0#iESHGHE&WqE,\3@QT)cuJ!p(4?TL8'tk9T8gRM1XKDX'qn[0\\s#@/91I/#;m
+F>PiT(nGC:K]J'CGn5Ckl,mZJ_8neFi;=[/!,ZRcmO[)bn"Z5&!_-lu%782]LT](q
+H#TYU"7?*uDJF%=3i;4@gU*ZRO>I3s;2R*B;p/$ecj+Zi.575Zh4*kR^c!Y=\,,]&
+[(E`h*SDR[TP$].Zg%t5%8\M/79!PLE?K'A87n.,$D)?$8lIR<U'.Z%&FIt.cRLuq
+7Q:UZOTiso9f=fc=pAAV#Jbipi-GVtXH!aaM!Ot'b4tYS2H\-LPJT`j$6Wp$'U>e0
+[fV<7%/rMbC<TJ(pa^.a8r34L0ET$@"!B]/DV"W##^A]J6=qKPK%anZ+=>B-<@5#B
+Lm\>tIWqo5YiMC:V35bK877,aMM/2<OB)Qn>js/?1a<3ta#)G+&s'4)3MMmpW*mk;
+poe8S5XV2*:]C;&W0sK0Y9e!:Ur7&*i!#0,oM8'a$?#g^p=eQBYA.+],cF<<aM6+2
+9]X]BLc@dIXp%'Y")qiRllN%,_#4_h54DrHJ2.2!-j$%q"-);E6Or[(#hD<lS>+I<
+!o.eu6o7GJl!m1sOOXEq.V#UoaXA,jUnYU2?mJ!&@7;5Sd'cW0E;IZr]5$Oi$;c!u
+?sG9;L#gUX%XdY=/imL@92Mp6.)s!e_JB`"0?Y'l5]Z"[GR#r)1hZ$+a2EU-bao8[
+,-;@fVI3@ljAbRH"q`6c?nE(#1^%2gcL.^Y"s*qU8d#b,!am2R@b2Hq7cHatK>:)3
+;(aGN9af>p!&'d6d0@j74>,mR,DJtoM[je2`+T_/lN6DU?r7d0:+-^>(,3H]VguY'
+ctl3'nR=,`8m[j"IR$?b%M?AXA@?7XOuA0^Gsm<jK@8mIE!MDB#)d:SM^H)Je>gkP
+A&HeTaX&"npcLmH+)1HgK#e+'6j#\(!am@C;@;amVU#ZA`F@0qTHjR=+p-&uq'.ei
+EE7`Ab!Efo;bABW%D^dD,$Y9WCl7q[kgF_$Pk)-rCFTPI8SFG[qE@7"H0D>)m`$P^
+ggicA1Qc9%%K.f>i9:EdPENBo#>lQoA3):0I1;d^UUFgr!g?9gNH1pHZEDn3nqkOD
+U*k7dP"b6.->_.AFb1Mm6`*bD-j)^_!^J"4i'ITXZKe6m98+j*!&t%q,QZgG!i">m
+Kj-5@`.FXM"2`M@Z8AcMJIYBWoeNghd1#a9Hn[><dO%LB:>6+"TRP2Wmr3/QBA`s/
+;Q,[r3[:gbY_pLu/N*jDZI-[Kl<tbJoNl>D4fErrinumf[V+udH"/tF#G).jW6>6W
+6kScZYA@d.4F<kbAj[EHLndEb"U'c4L8?L)&fj$k63TV^gb@ga/p,u-J-$D,"-$>9
+O_CKO;LY\c!msWs.q:ba'Y7mT6O-M3#:rj#-T7r56qr9cV5k293!1o;!gF)rM68n_
+DG5-jjQ0Z.![:Od/nPV:ZD</>V.i:D#d]3u23#<SJ8b``Va[UX>(\AQXC>o('$0&l
+5-:%SZ.AR:?>i7>oql(i'd2FiIZj?7g?nrTEDe!28d"!(!`C'A!('Q"*]e7Dcr7YE
+TIL"!asbA"YQu@.U\9`7h+I,]6oA[BUqKNbmo7`X7\`<,N"\C[B&s>2QRjgB1*%P%
+\c`X(A5r4$Q$X:!V$4d+\[6DA",Q'E>$Y\J/sY4"maOLREX,B6QukZ"2'+b7/ER%B
+=5o;Gc'ATr,[8gATn94Sbq_Yi)_:.WW,E`iKSH_Uqu`TE!am:OQ""bJ[8sL7lujgX
+^aqZb:Jn,)\Y>i%meH?NcM\K>enGWJd^Udp%lT.\bY?Z_c;+`2:/$UA!e;Hq^`3C5
++p+Dt-5:@b!`JSZK3W9?lH0Pn_oF0aFJ[=T?)R2B/EUeWB2L?.:A+$F&I'`SoJg:q
+2J_,!l9Y_@GkAuQT[-T6;&nY-2P]W#F(J>6A6`FrIO+L,,3%[]?n)7D6pqeKp_2rt
+$&q!s63O<<.dQFZ-a`-\Nth)s8>=-)<UUnt83_5^l_<7]d'1>3'I##W+q^7e9Qr(S
+IK=s7!Iu3mBu7rOFt*cq&g^@<`3at*^hZ<#[KhX:kI1e0%d7b+gHpd`j9DD-U^$P*
+f(+9jM[]\&,7LEVGsHP!FYsrso^V.<9l2_"M\M71;]4fsd,IOt8$p4m/-<-P"Cqf/
+OZ6!X0"PF_R+<eier+t@,e^Y/5>I_$U@15UQQ(kI,nY`0FC=>>+QUh_$P'u!F""F3
+>XF]Z!T4dq5QCgm*!13@0^d:5#h(-P96/S)6n1;o/'Lh21f2JP;^0aGYK36s$;Q+k
+.`DJVX"KsaG0HdP^#3a6Pnn94DZ6e-%clKcm:]&rB+0`C$BK'O'WBugg-2\jIPU">
+G7diJ,s9HJHVC`M!^9QXAQ3+ZJgrBeLId8:XIT[sL5j#?m0-O8+u._L"7k(G!#blG
+!J;L:BT\T7cHqC\@,acRIL@4J7C"8BIj35.I`r_"nO4.0*,m=S"X%2<l>E5n2Tb$q
+nS/dY9$!9j@8cbR[^WX2_es%P\p61+(Sm.n-3[4\O?c:HNqcln1li"WOZUM`"J@dW
+^`ih0H!?"q1WeLmJ3Ij&'Z7H&KQ)n$CV]g<nh_+=cse-u2bAO`.[(P""!Aun!$.+C
+'EN_-A0r#08]cVu@(Jft0G6S0`h=95D[I'm=?nMk[9[86XO0:'P0gMGDnu&\7^a"+
+f+uS]^fCY86M,ePL9s4_c)aVo$PC>613Vg"V1psCb+ZU7\-BP=DY"R<qEW9CE:@"%
++?BS2R4[LpO(4M&F5"N%"+W4R&krX3.)qR*-$G.lNN+S.mk-:oNnP2Z4hrXR3PkgF
+pSFeslt"7u,62g1(S/bqK?#el&;ZR9mp?R/_6WP3+<P8^-O-5*IE25%Xuo<(P"=tt
+8]n?(@fQ^@FpJ)$#S85-,+!Y?*%kbT+!b3YRP0%H^a%i*6P7QjqEP,P8mdCU/&gqG
+6k^2@8-=Al!W&#^jS3l$2%M5kAHXYZ&A7h"RU?;B2MB.1$\3fg3089[<Qkr%'8&r\
+nWEl!!Z$Fj`;)FhHIE5LP4JV@pFt0EiLX/sP@q:k1ta&+PF+Th.)M)@>1,r^Gj\#!
+UTg>2"/#jKGR-Qj#XEhDGF8X%r=Gb#cars8DLONF'\?H\;lHTim7jB!40aCM#3Vg[
+8t?XM-3A]=!P-?:EkmkRd\SUTL,"UTOPp08W_$t;amMWl&Y.rM%9_a#cSKQZfoj,a
+`@kG7"OnD?:K;*`;6)a4b`-^NDfXrd9(jtk4B]S:g0&EJUh^3OYo7eM%cj;D_dBS3
+VLWCd^k`8hLV*H#4$1Ibo`fm../S+">Yj`TMG[d9hQ3mL_:of5a.rs+ed#/<[eofh
+3;^K+8>%S>X/74R;2UXEcZ_<$62&%A[B2>g^fdI0=p'1DYreT[4MqR,@_=\HlltGT
+Ob$072O9eI&.1Q<W%`Tubc?-W203FkKEE>\"Lm91p!mHl5Z\&s.LNgii*47[L^;dj
+#=*,-N*'J'2D0ab@.qR;=OP1KB[k,NQB*'/\jW>Um;5Rbfq<D5.rYT@.EhcB^]PRJ
+Cn@T,)?Uu+kqi.%8DerpZZBAi`tmf#7Z;DpBfiQ`)M\*+4?"p$4p9eI5/PLiE(1tf
+lPmou.9"kW_DBG//2>dr^B13?<dc.U_"e?;hO3So:\9!p?qq?,T^WX"TRI0>N!Ora
+#CT@>UIuoP%^is9DnP#@%po7pRdU53"0'YD)eL[6k%]mAk1tG4ALt;P.KS(DEJK4?
+l#K",MqNjgq'q\.!l8Kt.uaW\Tn5c_A7B6-loI1^9<aH4ZjBeqD?KH>3\$h!Hepc?
+J#%snOK)U):FDS,h_i9F@S"%%h.eH29X(G.5^\apA&qtK[%i4bESt]m+H?`#Jd7X0
+HGbH@SgM^k-FaGuarW@\_Of1pBa2Nl-%"X@i%tRe?9PaIjOVtleifB>DU8:)ndCU]
+DoCsJCFGifRm(mXaYCoT/=IjpU'/tI&;XsL@lnm)#DAduf^CqQ/a7rd?dN1s;M_RM
+jak^ZWQ*/L!s8dFJ6FTa9XNBr)(;@s1Xdb>W5euC,BCe]n7b-lmGNp'4\,h*fgWpQ
+,R+X1]pR2`Ct"tbaqY#H2Cj]%r*?$_4mBfQ6k1SPH1B^?D4jR\<F%3UR)%kQD;WJ=
+63&,=#/`a"fQ]_.'8hL=&[:><3ZO.!_a0C">V$Ts"QE9$O@LH+#XdRtgmg>E%gU#S
++W-G=-kqP-&]oj1?8<E.#'"X-Zregn$=fej+E/qF#D</PiAe>Y4Vs!oi^"9g81'B(
+75YD-86RDRa[<L5k^5iJ(5p0W&V.N"5S_YEEPXMI5=Q0=,kc3`N(l's?,X6X/`]>H
+%>I5(BhY[3+qs&"3D.j:9ICSbLZDhL*/Hg"NQ-SOBWA'U%ppHQOLSON*Q\Y+\N@O_
+#p,1.jC/]$J3Ul$Kn:HJOB==Za6LPc@':\D0,fh)j+5kWYWEgn@cGd+LboeP"ToqL
+:rmH1(lJP6M%s>"*.l#c,&p_pAiLe@a((^pGSm@;>%eSQ%GQ8]K1obp^B@sf9&.8o
+Y[A?'TrK[EXssd5NiKni1'rNiGUO&Tb(=pV"bB3<X"+J^8@8XFRX5%R5pAq_/?;$6
+(5<3;i1MJJ&n[T@cZ2Pe8L\Bh,-pPkE/t,tN"gmHDH^/aVQ$A[gTs2H3WOuQ(k*M2
+!N9NF]n%\5ecR&1/dhb(oO&C^9=&Uc,QSgd&@]peKF]?N8sTfB'!fXhK+;iO%>:Eo
+B^(:)\9e.KOM[k-"+[<s$A1VM<Z.W_S%TS#ko?RQ"/,um'INpX,T]jdj8tu4X<VoH
+5![)1`WL#I>mDVdGYf.[:7Z#?6Z=;Q&;+A`+VB?h18=33@4_.\-2&P9+/f328e;*(
+9$.\JOl0SW_eL0IRm='fp><@<'!dn-c.!l[ZBi'mP9@)=<@fIU@g:/Z6)]/T#f7^9
++$3C_9bjo`iu'e-i6XZj89]+`_p;'<q`dmE&3(("8m!H.-!(ab$NgCr*=@P[d!-Ue
+J^aW;9d(oG$WE;_5T9pDQs:A*[`&%lZ*dS6'iFD'GFQ9#6K)KIW:f)"c+q#9jJ?qb
+ZNmP)S#Ga,iG.IY"I<^N#QbS^T5$40*'01t_(\b%KqWTG+b\'5PHSI>B*PpoEn`/#
+Yo<N\$#7]'o#kB[_G6>'!;s/TVRL57*X8>%KHZ.G&9G.2b+M=FZ#ak<%"j*Hm^hpE
+eZh;K*O_'eK?jfG#gf6mcJSeteDE7h_/5,NAsB03)+WXn9Fh3N(c+t?_6/Qf[sb;V
+`V"cC=3c'L\fcjHrbC?)0"801^%cGh0s7@AqEC8M@>JZUHLT5-f\59Zi;t,i$N]`n
+$\=5\5Xa!*R?M;hgaWFVbJ](G"kMh!.Rl2Tjgpr%(uu+$++t&=]e1Z\Q.!km?ERZO
+K2?e(63og]T]d?0U+cqj6Y^B`0ZJ\%7ctOi\ms''gO^)`m6LFc!h_pf!DkI9_#amh
+TP+iuAW.*bkWX_Tbo/cr=:*i?&cuHK&;$QaU_?,KLo0kjVXQ;6aabfDKK'qni[Yeq
+98,':?.?9[i!11kI=nApoI46%>['Mt?XS*eJOfhG_#[hllHq[I7Ka'kX;4't>!N`'
+"D+8%[puG+CdH]?]j0$B2ToA#_GX?r8-f~>
endstream
endobj
160 0 obj
<<
/Length 1980
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f/3HSBcj$8Pmqn(6-=ciN-oX<$G%k@qk</$9!Q(Tn=1EL8bH9Mh_?7
+W6Ad)*0$s%8GkTKGFK;jVGR?sfQ0"#@$#,^/fPsj6cMIoLq96:]o.V%\F;>`-mTj.
+``#uiOC^Ek9IAefXAUbkM@Um>R?0[/(C1>Eo9NX#-o9r'JcQHSJl=-+7jB`S"@,dD
+)pDnmREX)s1PcM&@0''\CGD7]_BAo0;I(abY&QEqfOQqC%E9+j2'c?Z(LJ\9Hn_4V
+7J&p#,@&N\0IY&5bU,&_5GAT&p%pnW!4MahW@KaN_iB@?hT@fFF,K":UDki0N==b#
+cSWnF;S@bdW6#-"m3lYl[nYn1i'H<e>l-QQ.LtaD@AmEL#9faROXUekRQEjpJ5A1a
+N<j(FNPg*0)DtuK`]=Rh'-Mr50oK'l%Lic&*".Yn?lFe$bY\3n&U\(+^EIV.)S>GD
+@d:aF6PRNpb_%1`1=(;*cEor0jtmJu]Lnb_&]<H\NK%2C)$WEjEh0R)Gf`3;9^n#S
+["GtD*=O0V4=6sN>CJBHma+fsUU&S\l7,&4B(/W\4D:OpmD)X2a)0JO1-VjnU__JO
+&7nj+bRtWjTi4ZDQagH(kVOlCF=nNL_4?tGL+PBV'ZWskU=tQYZR4M7_O0Qs%5$L'
+,dNL`^,dj-3'\XHj(R@3Vf40s0TD95.o"H#5Zpr:O^K(F#;6Gc<Q<VZb6tX4o.i);
+;VUenb32!8!'Hu8jL'uq;r#j31Slc`$ut4Zif/ng%lje:ZSR$`[@$+'M)VAg!t9G\
+5V<3LNF4f-@iHd.O!<L\EMm;So9A?M6i;Rn6`uCq#9h$X.(Rm4)Cbn^Z5ah1CZ6?J
+Vncu'JW;-l5W"-"BQ0mpGRCks`XhI2YD4'K7P]Oh\3MuhaXs7%i*i!fM$GG(/dA#$
+Nr-/"(\hTqW1g.T)$[q"&/rQ936eOu,!'<^,XYHPU'(S0&;Q+9!4FMRj!Ph\L0Tll
+b9Pu4+#.e..Yl+TSU.f>,@$Br_7Uf7J/e65Di*6nQiKG2L)!4<h1Qg;CkSOVa+NRN
+?B7\EqgI\*#4/M(n]UK0^OI,[B_YmZNO0fn+q<IK'Sl;;=2EsESmQ":T%!U`c9:j6
+\"N8!/-:1%8`mWU(@rQqUk!@!s1mg$"<IZeI8EB35^,d)+OdfC0K&8aGXhmEe%gXp
+go\1j<:o+3s+Ts*(DJhu78\-JHt3MnUG_s;b-?6s`G?HTK*juf.GtC1i:3"-:uKN\
+@oU7^lpA3d']Q2JGqM93_aq$'+iH*jA.B^p+ss;K,Xs><JFJjKB\&c6;'9`_JAl03
+*?`8LGHp-H]])-t+8e-FTJeNkE^X5""+h]d'Vgf[:hB`]EWMi[(_ui48*$J3Mc($Y
+`X)MgjK+r7:Pb3(8'`'tR9Y_L35*EL_\A5r/s>d"&'(&I/7eA_QP&pga@T#JU'MkG
+L(Zrm:f-LiEBfa$1(6TjBepo;HBN>9$GFQQp8-hZQgpA0"$gbcVCZKd$D(e:+pS%1
+49ffO:`I]I'T<(''V3PW#J2GJ+QP*/FRDm!*N(J-b;;ruZ:X^L;Yp]3>GRq<L.R#c
+j$MrsrWEp%*DO(>?@dr0Li`L"Sf!k7jF$'H<"uF\LMZVa[3^)S_MQ^=qY-MF.4am;
+I*m-c7VQRKOiCj^5Xn^BBes_%7<XD`b'uINPt.^9>!pWDG=I._eWlAVF49E.:h`@"
+V0"bTeZ)sX#f/m-E:SDh3hKJP*3>fR^8d9VC^b(noVD+/\5ZYB>O.8UY*J-I<_@43
+l[<Ir<DhWU:i_Jo`#l5Vg3D7c&NqP-NhM]gVUfL%@AIU0X`Gu#]C9YuX..,8o=h@A
+>=W3QKq>Sm118[WFYT\g4aR_AUfs,Z#[E#&[1FMn82lkW@!05JE)'ZT=@I2jnGr~>
endstream
endobj
161 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F10 22 0 R
>>
/XObject <<
/Im22 158 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS9 136 0 R
>>
>>
endobj
163 0 obj
<<
/Length 5052
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVgfP3#WNaX/PYfp?2)3!NDctl/o+?:=UUa!U)
+?:QH\bi^\]'X8s<(r;quR?Y^02]2qb,9`<47PpSEP[R-[e.!1Pa!0K4AeH[7N?]&B
+&Q"<D.NR\_'<.)AF>o_N0V`p+fO?e2.CAW@>];A6%A`[]fZ\8T#*E;6BR*./%>0h>
+k,:Oqmg+]46j9m_4NS$D)FOSQ]H946*!dgB;5?E?0$p'gV)_cj$_`6jiOTm\a$ZC/
+8-[e)*:A/<T[;o0H;,sPJ:cXd0Yr\iCBk^>GCs>Lmm:!:$47#:Ohfgp1@cR?h3:]N
+%iGc[,4!V.E?6*ZpS*6_Pic[9RtLtX#D7O^":IkW&.==#Co&Q+l?kW%.KdWN+\lO;
+PI[VZUsPjP]6N[$_oUUlNXrY^nN%5=)T"61"4HkUTq\ph^2PK5"1Z/IH4W%#!ed9r
+b!Ze$$\:Re('F_uLbfNMi)9lnOHN@q3Y8ed)`H'tZMKSk)!!N6&7ccY+HIJ.'?Tc<
+<q]-oJhIs.K%oMd57c6<s$oloGW>m70[@"`,@h)_8*k9A1d>CK`\NP$W6@71UPS5(
+$t2\9)MJQ$hD59I*<-o'1j&T#daZ3o&-X9AW$NelCY%.=iBY8QcS*6457V0/g,KOo
+8DH"t!t(@pdh5%S'F=lkPSZ"ZGZksga?')1$A1Ue9u`8cd[ECQ&CXD`K9^g@N,VV6
+00_h;#==H:nD$$_cq)AANRo-grDB>kq@G4e!+P^-Ts>2?L!FH2KiPQL_,Xj/n3MR/
+DcR.B"p&epq(*Y)h.YM^Q)d#No?6MQ%3lG-!";M)q2Gm6PppF+UL;5&d0$+>2h`E?
+.*(F+Qr+$h1_An<BDB^Oj$:/Z;B!u?U4+kVfrZ]_$tE%ARU3J:92j@o=C<-7R!Kj3
+c-&I$+X,hX&g8Co4X_GH4&A`rL-k9i;cO<$RYJ\"KIpdm+egfP1ln#]4BC"Mm1O=*
+1aquZ;a>"8LC!Zc)E4@-+rCMdU;]%s0BgkhjhUr9=,_c^_E"K\eH:hjb>)K//Rs=r
+3^K%enS)0hre_W]aeQP9-A-9[0[CXI4T!Nf"V4#;3k\?>"\T(Z+]4JH+dGs!8h:ZZ
+!J"$F2V*E+NoQn%d@+[`5jnS]6YFf9qc'HUX<=aK`q@='?F9IdQ#$dpK.oG3_!1rQ
+G.7q]g<"h;22?d=rX8mshZp+@i2:[Ed/cTD0*&3pK"th)Mnh#<:apoT7@s]STKOt>
+5b3K4>XB9l+bf>dp&gKJ$cml@L;:eD]bh^thuUe%TkoCFBMadVO?*S[-n`EcFr?;i
+2Mob/(U^2Q%O&Y!M\*TS0X`0J+hV'88#e#Ro=u;;88epqi?4pMN:fN"p'q\Aie#+(
+#N6"^KP>sgU/PU&JTLWe:.-(S<%;5uU$;iX.HuN$dMgW!hE3HfEukI?SD=!rFA@o5
+W5-o7h9%TtNk(:`,1[c1]='qaQo(^p/dMR,7Q]P=n,o#q[+&K)%](U[/'"12?t"Fu
+mnM=W=54b4=Ys285_h/)DRJAkFU6=H'0h7$+;T%tL]G:?'W?co&q!DI$Ro[SAQq)r
+PU]?<Z783)XVbO>24bBA"#/rJ$_lul"p]s@VD*%YBD=4daD)YS7Z^Tk$.h6^$,e/H
+j@PDrR3T[]OYh]6%0<",-Ze]>9emuNVth[4+Q2PfM@;sHV&;I=160E7)+2M/&I0g?
+cI#Yh+DF^n"VC6bce:ZM&Q.('k2M$ARPY?ReI=pr^s`>h)HME^3'L".AfDDi:C;J+
+#.1A5c(i`P./C0E,bBM(">mlQ%7QsIY,*'eQu6YX1*a_<WRH/J;8JN*DY8sDelOUr
+'UU#F<93DqRTeP5H1E4+?F^W9W5)3"H!ou.Xd_j"d:hK7YCM4T^hEm8ll@!_JCS9G
+TMQ!3=b)S;jaP"N3cnQq3@ArX0[o()HNB*C05@j:f%OGuBp0.%<MUNSY]!RgS[<jR
+KSEX@!Y.iP5VGTgXV#$S@;YP)\.q$J0dqT\S:#ml2!WdpWju]WSR8;(0F$=tS>=6F
+dm_<_jAW++@H_jg]dKn\=pp3Xn#>!G76]hb\q,/u\h:",cKcQ6%=o0-9><lKJ?Ye>
+L9<(cVcXCa&W=r@m(n4cc=Ga`B-2@NXoU6]U-dTb:MO^5/j;3\*1(i\+rH7\00rLb
+!o/3bnchD$=Uu]e:g.6<dmt`"m'(!K!+:Z"MD5S8e,oe]GZmJ!,`VTGARZ7;*!rWc
+H$%Em7fep+DHt>pP`B?p5\dW&GKT_-^u`#8RaG/Qb;m<dk"NO\1Ibm#)4NeO/?,/G
+rbg$7qV:9Cq4P)aNR:o'60G>eV)43?coN7%>F-S.FN.Y6RFb9t_CqiEL7Qd_Mc/[-
+VlDT9Cc?Y+P%pN>8$rB!+A%:05BcTa#Wn5Z3_'Ni]?+YMD3c@@PgX2upT*'YjN6Hl
+ba#:dUU@((g!rSOAhCEb2'.>'qMO>#dh!!GAujLpUM]8o/e#4$i6p<aGj\:%]CWbg
+dU:7GlE/k'1D]r?>OR,USaX>oCCNX8lWS7h@D_d4k2BKF=mAa0]XU.QL`9PuD2o9I
+GAe,T)p=-$N]3eZaf:.9ViPl46`<"h,gq(\HZ:D\[eXi#dl[ShF03R+F_0gtR[]de
+c=amPI[@`.qf)0KOiBAGl/s&4WH5eJh`:^9lQ$Y+F^@/\[bfBi"Ga,BSq'Bo-C*1$
+?X44".Wap4*n[$d'30ICZ@N%M,Wn?E'eJ0qp7DWq^%4Y]d];=`pCctC;jmEpU!+(_
+?guoB/+_%djZ>CWo+#Dtn<;bZr&:85gr%N^T0qDEY:snm1Q-Rn,O1=s1@X/4Y&pH!
+kWNj?gRbI_FPbF4r-jth^8!^Q5DR[38&t=,PN@+_KpB?kBJck^dJX$Dl+UfWpcg%d
+r>f$\HS:6*++qRPhoYT`ji':;9BJP?OnsQObPGSdkC(\.nUELib5I7nIt'6R0DqP=
+bjD:s9Va-pY7T?gU@,o!mfrUm:L_eUr7Jom#&aQ3cm&K#R(r*iq(Of*&#BBsCAB3<
+qolMPYWD_:;$7EE"`Qs0+Dh)&,lH"urTrJIYN5TME;m&hgi,+H:jgIT/Bol#pX"`[
+D@G=CUB<.Vq1*GkO2UfiT)>g`$'.(Q8kB00dgIj-c4IMiN402a?Hs'q$*U06YbLqI
+b6Z,d$I-`kBaY;<r%?<%pe]uU/F<q/`m$+D#&fn?YBLK%R,2bqi39Bp%ZL>5!<8/&
+&8of)OTt64q#HH36@o\cc%c?t,hVT)9WHMF&<PT5r];69n1AJcbueT(_UWWF%SqWR
+NY)n`IR9]<l0VIaA$T*/ONJ/1"t4<FCIm.+Ih<9GZB5(U&Vf\*>6(hafM.nE0IW]9
+9\(Ih!DNY5/\r@Odh'p6cHghV6WFmu%+m*Zg^]Gb.X)\GW>^kX'i:k=;&oAY?Jo[A
+)0%-E9'#c+nl_+%]gA>-OkC;*(EMlb)Nan+nIj[K%,FW]l*4FbOqAgr%+131il#II
+mXXCs0%)L)jNd]KN?'6A.-7+@qVtt`:*h0jT-TRK#\l.AYDdJ,3='+f$5->9dU^h/
+f_fc2,k(NODm^ri(sOgg-dlKM_@[Y=P:3`#(sh@e;10n>i@5J)qrRPh6e;0UY0nZs
+!"uOC:\?.lZMh%j+-2(90nh1)k0]'!//$Vf:VJtHKb@)</lK4m9XbeCk6Y&Z0(4cQ
+XZF$+q"uoNr6B[J'+4M5%k/^10[TJA000;lD&?#(0/-rI0?0Y`.514R,:q9Ho!oA(
+,q0FS1Xei2;afISKd8H=1llPP`Z$dSPr:D-j2s(i1D(stBeV/ab@lGD;frEIF#U2L
+2tFL-C,%\GIlOb@3=`_W':,C'auqMUc4cd<6Lactb1'@qr,]<jZb#sar6TFL2K*q)
+ZXGuf,<ThY9iJGK"4KDSiB>Xu5''Dm1W_IO5<G(sl%8Lg;uJS20gICN1pb:NPRTd^
+Ldfd43tm`B1V#P#77#:c6=\J2:ojjV`rjgI6Z9^p9a=$b.lqc?r7"!e&%_[\:=N6A
+"**u8''RRi0gmee7T<^T'NIWo)Zt&A!YZclFAXg#AOir[79#+#6L.#r"\COJ2Un-`
+PTMXL+[T!-(Xss-[&D>logM[Z95lf`[(QRk_(H/)]J7Z$FN$mPd6mNa13?Mj["Llt
+gHcP:5d$M4<)l]c(EJ]h:FufIYF#O$)Qlurc4pLYoZ597%i[;L;/J]NYDeRms"r7P
+)`'o\X[PM$a&<Di;cNo\FZgKt'iYgB"SG&TFU_=C,=Uq];fu5;E)0JsBWGtT&20j4
+Xhe&b<CaH>"S@%=<B""O4Tt6V=:^(^mD2oTDZD>f;g"Kh0-*tKB(r][;,sSm[BEIa
+iDm:H>BO@O;rIe#]2/*ml'93jQ-ER@s$e3u>h!L4[0IZ[dY&@dpsnUKe-01G7'H)o
+$J"qH7&`gXD.#*C:poIneIj(4VbAdQ@<N8je3bWo=^b>U?IVPR2D8CdDdPC]@oPg'
+_CJ+L+%V\_`7@.Ze9^s%a(3[7?IYe0n<>-Ga^B:!<>F\/[I!r:@9nt=4;HadZ`uR!
+k@[df??=G+9'JI(MeOt7AhuMTdp4fJh),tA06UDSepf9;H#$FI/XDJZOc&qLDaC\(
+$!,)_0?n>(6#>,o,o4rVe-$!LiG;D/B#c!2[`&(n9l/DR>N[)H<'8G:0K.I:#a1kg
+DoO%7T5^\M.LSCZ2]Xq5JiY]MEd&T#QRt&G1Mfu23]Ap;Z3:N#6#OridOhkD0P,@p
+K[$u#DqA+?USVrh;dgednJ>\XGAVMiD.sf$g"+Jd1J)fb=*QWhEXeRSG7ug"O`LsL
+H#JkPbp.M[^Np>MTQ\S*ZYV8gO#5IrH8A!:\#V8C^bus=r6V?f2oQ+?b6k_>?'il`
+[GD-!_BZ:iIWsh$G!URYO's\7I$aFS(*S(X!H9a%J8^EcGGB\GUD,TgI+T<N(_M)&
+Q3S3f?B<-YQ]H`B3i*ZHK6*dr64nj3V$:$iqH-!\EbU3bCI)u;dPt;9%hXNic%\%Y
+KrmE+GKeI%E=,fjHT6.pR"$/RTVh8E+<U~>
endstream
endobj
164 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
166 0 obj
<<
/Length 5531
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f.++R*FdR+["gr17X0?P@;mk.4Q75@aV^4>W%M]8q]d?b]-1M5t3PQ
+9J.8Z)FXiSiK2&>$E=F@K/dkpb&*jlbiaT9TZer3*/pd.Od,!I\s]LP6"Sh\2Afmr
+Jt-+U#mQ&LTn;#9d_h:h$\os8\CT%`.NQ@%YsALX@Q>CO1]rhkeh\7BBHdOP]Zb:S
+)bd,'3TNGJ3LW[^E<1_XCc@5@6W$/,AoST'%Di4@UM:o+Qu0\@OLS1o.MB#Z]T%7g
+Qa)JS"#7N=eSH'Bc0$hJicRAUCFFNSQ.0EaL&k[m(,54[)Pj?MlGBNtc]VTUZ,3/5
+Rfj;&&/RS;Hn#nd!H;k\T^]<L)MXrYEsTX$H5saLU$/rj,XHsm'IM48kR^&l6mW1,
+cV+?I6]gq+$R,q*8fYp89Jn*4TnI+p4tCs=\ZdU$oY*!&!pmb-YTj^u0nDt;,+rWW
+*[qBZR$<^B9Si+i+l[0#/W6QPaG.-S!#c_C_#g8K"i7u>O2TI7s$4*ch"htE!Ncr#
+#;S^c7o2Q\)a_ll]cTnq.&@kN;Ua_:9i+CZ78HgG9i".+[,jeC;RBG2:"8g+6!7,D
+Ka1j4!PNDTe+IR.VcGZ\8R9umc&5$C2FX#$efpPVJY9%N\qW>($ctRUiN,73$AeIR
+LG@9k6U<_J%D?<tafo80TOF"Q>h574HXGWP[=s!_(*up"<d#5Z9\7iJ#CT_l4o8U8
+[:PJTLA3?#:>lpG.>?>+qqHlNpsoaUj4L:LOQ.$Ifl^Elk[Tid<45S%;gEd/Iq?HV
+"'r$o*a=chfnEY#e(LTg5$jZVM0n8D-:Aa9=Y<qsB)(efO6JKdS#L/V&ibO(R3%cr
+AD7$LZ"_qc\WlI1c.SG"PtjEH=qj],JK^sT["IV!mCg$b2ftSn>fd]`NalM*ftN.@
+Q/Rk*)D6$LknuE!V=Js`fsB:4l79)MgtnCDEmJ)5Nq?S:?.!A77k>XR3p:5-F."+Y
+V=o=D2md`+^3AAqft_Y%k&n1I(iNVKLZ7KG5C5_ARLb)EFEG9kds=t/7H+*t-tr0e
+^>@2s]UlmUm4eO#[MsBS5F5%@^("TFHbV&([Jc^f`VTiYN@h]6G033u*ZKfOMhuI6
+"C_WN&2Yr;q84fg`!kF(Q?BAKmCnr;p#*I97$!cG]g-99hRjtX5hYcmfLYjI44f0>
+BmVsU>4PbTDGofjT`[Q""Ph.dL@:u[]m+ksJ]&jZd0:XVLh.$f`&2]KFsXC0K^E51
+[>@A!-:LIqqn^CGHLYS07>@P;T1]uX/S6BLoe?=(/*g+@1&V+(pt]=?!!b#sDl>#q
+!D6:A+mK=OYLj]Nf+9cYCDn1_[kSe1A%,N8m:jTFmWTS;:k3*/(5!t5;Ni<7#0bb(
+"&]XV_9?VX$>gFtfg`>ZC]5MG*#UUo2QC"JP`jr_9WE>.gf62&";9Qg7oaa^A_b"^
+NRCf<M-09/fJS`ng0)U!R1,lI]i*7[X/X-iZXt0TDU8;_(3LHrj0SrWX2\ep8Aq^\
+lqD$VL30kXJ?!4N&;N&>GY+i)bY<c,O_oC96:c,e&k"":ZiXXQ,-7H9'-IMo+<+-h
+#72=!%gL5Qjq*t(oB<RqP^pW0OdFrq-4M#_mm7Xb.Ao`C`>bM5[HpR)E;Kq-]RAn1
+QV'ka#q#e2HZ[8%dqS\TBq7Jd.M*H>@hA.0/AX]R[I)<ZO%eh]9:,3QABG_G<@D]b
+WcEJ*eZ#GsC9454'K,_PWjoYT,=JVo$FNR-`+Q#aaZ4DgM,p&@<%DO(Y,YcQ9UYVV
+V)$o/<$K.YHO2gNQ%Ya5.`G"Is"\CrO.ig"aWaf?AS@g)/X%M"ft&,76)C.W[$o6:
+CI_m7jeT7AVUS;.=P)bR0=3RU:K`$YCl`,=L=T[0>Ip5?BUd,R!7JR7)A-s?]uRXZ
+>2<9WR7-5-YIV)JJ:gLiF_m&iP`m;J_csW^Y1X>[G,k#Z,ma`n)oB9(L@*B$[sG6#
+6W3D'h,B`>I41ZW1=CU0hQ-HOY<=U_pT"<pX91)t[KOD]UA:)f0_.oG#e7B4N*#p*
+CbFO_#'MU0i/!GL8B'Z-=.8s2dQ)WY2C('1R]0YA=a&m]s1MOT!+.`\@W@pM`t^?K
+A#ph?(R<ar(OI=]\cSKW<_'M'oafqqkE55_IE,Ht9B@E`NF;_EW36RZA\+6<BX*?9
+R>-"L$$KA@*bVoZl:o:KV$H)\BZosoojuA3K-:+IcEFt0bImR&oBD'c\cn7q6qa/Z
+*Y-Q-=%-Z`5GMd6hTsn;8JmD]5@,[Adho((kUa7nZs4^&%jt,)$]?dHojuYX,<T_H
+c'KhJYKQPC=];?4RIoXKX4^Q[8ja2Yp"e3B=;actoKQgY1!A1u>@g"o2iaUrcQa<*
+lVVJ0;\8p6g7)_hlfgWjj[IbTpoA:@[tVA9NWRlQX'\dEqm3bT=JC!)D;ag=0DD$n
+h##gP:tp,u.tf"rg]k(Ql6i/H4VQI1,nk(Zmn5W7[G)H%LiH.;?u,S.YM/ijmX@7+
+/11hd3r4BWh9X2d-.]'N6^>e_),4If0;_YIR8DLhc!iXkUGacr:gREsCG.i(RGlE_
+5&Vh,D+s0+l_DY;RF8'q:T$U!VdHU*B.[1d,CI*.FhVA;EDlBaQ2e*UlJSr0R@WTk
+ca=Y9KA$)Hr<E3*\T\p7%Q:!smeL:IpV(Pp]>lPn'XPN`CLu;u^P&9\j2:Z%CZ6<k
+TEb#k*-hK4jLhBQo.lNBGC';P>Vu'E!9*#84,XU(2l38*PKnKfKBa9YS<Nrkp\<&&
+b'gKPNc,<\qmr0Y^"1^.*r97A4WX(*jplO*oAs>_.k\Z_/G];1f`R,joR5oSqS-@e
+I;bg:U*mPLZh,7:&'591#W]75PN[IP:&;Ncn$.AKh*cQ2(4G9FruV4=H2m`2at,>_
+cq+B8.E`@'Kf]:/aJ!0E:SZPe0FjH23s"gdMo3';&0b!TOTLUgSWF-[&/\Bn*:%Q)
+<tH)K.)?&U)$A5=!74&6&30o59`tWQ:Sdb_cq7:,@g9.q,-WQuYWi<<Glm(.#;AXL
+&75Z2)$fE3Oib-8iZ8:tAHF:JQ>#oA"1Z_IV$O:BNp-aSE)^1R_ZoUt:M&\oAW[Dj
+I0V)($mlVin8SY*'*kb'?r2/2Y]Bh!BOUDh%&T^.OFCZcmgQ'V%E:HYcn>kU1D(2G
+&EDJbnH`]F>7`-,$uQ4OVI'q?.Kg>,'*`dp`d&*"4V/0$BG!<17[Xn9KP(LG%$<5W
+OYmk.3=Tt)C2lLQO[U%j8HnX((3&dY#/:rDK+d^)D\,JVL;+Gb1Dk+4D<[)hOd?p3
+l=U]m$#iLrl&%TXniMr2$`V'LW"*c^Eslr9E<d1D#r9D.gD8rk("#itZ""geBO`DK
+(@g]-Om*c].!"j+&;N[inc'[89QX-A+Hbesa'fbS'-KbLFqJ4-dLRM+f+2ISGOZ=X
+Ot@jI+!N).,I'LZ;;@r+3tk,L)+o!s&jIZT(j`H")J>FVE]AEn-Nt,o,V!pU;3%W=
+E>Rnm-?*:>;J_e7b9W7+-7?t]nrC<.b'd0DI08+hZ*'?@[Zt5cJ2+Sa&\N&0^g-H1
+JT8d=L`V-r.jOW*-"nSNYph6p9U]WR,P'S?a>YB-j!H0M,P(.OaA4(Eo-Q0-,)BkE
+d1kkT_^(>o-]3#$E^)8kb_L410p6"%P7i9VJqm6p-SLB5ZOEEL'-m&a0JbR<&nrO'
+1/ifg1QtH_aLNR[;^O3k)6d$s&U+6f#6^kX1QXg>$?ZDk/H\j_.g]%>P,=VpWfD,'
+*3m5.d^Y@B`krG)-HQE3$-<H-.%2jFShm3"1+*fURi<eZ(<cS8TMUqG#6E'7"UUnf
+j"iTT-Tn\a,;\"3l*QI"NZmH_'k\)JE+(\9p6SV'3n$AXZ8W\C[l>\B/E:-&1Vf%X
+Bf\'M2H1V$&q*'pWs3WN#uh'co3>3-qZ[3g'W['(PWKTo5!SW?A$a9=7Rol:pA+=G
++4CF&ED$,Gs$G_H1Xp%Z@lHdiBh(!u'XQUPB6ZZ4%!e"*Ikm=8["U(gOJA&$8>=-O
+LS-m(T*@nl8lV$o@hVE*YrBdS)cX.%PeB_ILm<Z=.:ot^Z=jFu92-,"9gcHcP''K?
+dnR42/Llou']u94ed"&'9;U!ZoZ^1nI3siMC)$tGPm^D'#mr?i2O+q7$I_\4E3&XX
+/LnPN'0NI_a[E0),L>mWeNHie'b#$>;:S6*.ctI[:k;Tt<>=%OoiY#[>d'Cd<XS\<
+'kXZah_]ItC(uE+PlFgC'3B<.:\:NgeDFBnVZ;dE;:V(;70p0\ThC6?>#0>hM`4g[
+QWl>N-hXe=1ML(c&R3@[>SO.S29`Q&b>5OH?#n@En./`D4J?oT??Ha+p#,M.YmbdJ
+>kRo!l$`hZq,1uc@!1?^:FfXm&OS#<Yr,ruUXrfAf4$VT@Wc`3D])c&-WfVm4-h[-
+-.-5q]js!c>..".n-FdA[q.FiZVUquG#g\j@4$hm?<,!np1n8\IqLXk^2Th7EmlR_
+JMrgJ:TMetAMn.eO\uSLQ'RV+Ms+JJR(mfU;`:R\<CF2PAQ<o\?;r^rZRii]4[2:c
+%!KM([UiMk,$n;CD&1f<1J6ntM/G4T1=Jki;O54nAT&>u1043c(B%k0I_*G,J[2#h
+G7/*.95q<>`Rbu@1"J.Ho5Z_h]_<Xce3@kpZ<[rWBU:`#G7/2Q3G\*iV)F0P[afK-
+Gm;7&-B+d>Fa8-(>:9/V>)]Kh.Z\`$2g7*WbguM^9WKse9fA>dG^!hdQ]07WO`4#(
+Gnt_O&@6@I5;]CrGaGCU;VQIKD0hP9b-NC@;V?Ek\qB_TG1XiT[t)t0$Z3B'Dg(Fe
+[q<sQ,@c^1DfoK;[nV%45:LgH<)%:P=8?sIrH,N@J+jC"m=0%u"IaQKDsafBom)*D
+%T&.V?<AFd(--uTT%V\]/M4;D;O<%22W#7mI+UXP12%mJ4bVAKI5k322-5M*'88=>
+L,`t$ebOLXk?^,H1puR+NW"X"&P[KpLmU=\:U,]mOb5WU@#M.D\33W4SE!)4C3Z^T
+:h7iGYB$b'&bNh1N\iuq>t]E0N0mO:(h8OB4Tfe7N#:5806KZ!)VDRQMi3EUPMYSL
+nTmr:/XP.OTOVlBH]QUAOEgp[3=Su6'9NLh9j%jd[7#(Ffm3B="uuE(GqG,g0p;&d
+/@dX%\HO[44Z8DJP]D8<\J:?.1@7q;OL/iG&o!ViK9Vd2Nm@92R-(oASX+Os.FG`h
+3IQ<.qBM?OR!F/COWMI:8XVGVnH(^O)4d0u:E3E;RQ2SpD9\<5Z't2B_)\om\"rVi
+3I1G>S'leV;nkqmd=!egSM+_$2?fY>i.4dmS[LNOecf-CnXbnXT645-daK>#p6p:2
+6TPBcg(0i4#:WSc7@G*aqA5JZ*KJW[\JcDVg+Aik0q=[kTJE%HH5iXT_^W\(T"7La
+OWUC1)l5Sm'9'c!\l3LD#/bZ<VKuUAYVrr$)lGSS+kh's+;u@F~>
endstream
endobj
167 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
169 0 obj
<<
/Length 2193
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVo^gJc3%*!l"\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="5toF=17=*>;[LNC<&FbHUHt!OE>aao7cQdRejCZ3&LSkl
+]^UMq1)`oBo9&/LD`=-o7e=S?Ou+*+U;L\6Ap?*OgOZ/&*1e3L,D0CbWBmNq+?RF`
+jO"!E]+6Ya6jAbR1iEWBNbQ?:.+DrAbi[0#d[[TJ"WUt0E8=3XA#[Yl#%MK&;G00F
+ctIN*e/%9TeVmo4kW$U9Ri;i\R[phTTQN77%HfN"p'n$V7.npsOMG<X\daE,n]9QX
+%5!GD-I[OMb&*cA"9gTTK[+.tP!fKfEKEF2^I*7iq6qS&;Af\46jsicYXl8A_#[4J
+'IL&K'!JAe)TiTtUNjj8NIaX3.LAWgN8L=(bD)6@84/EeL<?i;gPTL^gc(5qR*n"+
+c7DkJYKTg.m^qonBW=1u44:G?YTeW#5nHqM3=CC'n.l-/128Da%qsf\#\-6sTFHM:
+5V<3p'M/s,%LcBp33d]n)`@/SGTo?S)!!N6"/+($NR@'s+=.;W\F2NnQsdGG/neFH
+]?UJh'FKI\G:\cLE5t1>%%GoD4p,cfR_Fieb5]]E5_hMK_\g6K"9K83rs6M5fK'G9
+Q"'_%F$o[#^2L(?s1_I1O>)YOd"`05$dp(3]C#a.8#$@<'X#,(W8')I2*<r2NKs,>
+-R^Z2'*Z6lHm8s7YadDP/;l4:%n$G;5SUWuV(A'q6[7o]-ij=g5Qr_6:ci"q9lj1`
+m$QQf?f;-01YZDMYq+]$*(h[a9&1gNe3e['U5hSJc#KpXpgg>8iIf/A0$d8A)+3kp
+CbicC^$ljB!t5^3@0)B&3QsjCn.8i7T[?\u([/dkN)d6/<i%IeUc1>c!lp'I2`;.&
+N.\6>N6QNm^4YPk5f\P3"3ALV-Fus=LLLdUk<BENW7X.k@;o*`kEf(:2+4-U<L*g)
+OCF7o9%ET-hKK&L$E4#D%M2eL`a?a!!Cg_"\rZMGVT0NUe"c>237'^GYN,>\?4bcO
+4RVZdm0a(!#XPAJ_d8H+cV"ht(@[1,1UM/PE7bs#O7XLHf(I1$&,G1iJ=>_&5!e.D
+A"JZSjL'X9=8%d4m99?DebhIG]V:UM.9(h/Qr7ZOR=:*5a$\[a_[AH;'n`Ig#i%?C
+`]tD6.p?Jc@Bc`<rYq5f_J&:eXZ&$-r!7RQ-]AHgL4e7u;S[KScuf5@2?p$\?tLsK
+834UQblS!@ctMBkRYNT7$s>'M%EW!3L./V#@FFmjYJBe21pU7%d10f_aT"<Jjr2nQ
+B6NV&9!lHm(f,an%SanC]pJ`ZK=\TmnFSRs`Gg<u/49XND:XJ589J)K<bcVB&4Zj9
+*Z?e\<%$3u#:&`pQt-7.!MT(MOPUl.4C*Q_BElJL_X%i]AreD2V3XqUN'Tg[E"7.!
+"#l+rS4QR,T[C`@ZL"t"K4n/&<Osn%I!o!defn`,L)WBg%RIo;K-b7@WA<2h81He\
+A6gF41Krrf7&hVlq+JKa!#\(:@8nZ>5W1Mkac&Mp%0u9W7>'>8+j-]J;TO\>o=><m
+4Lm)@B_8-cGp=XCK-K73jVLL3r)Tf@>7tJ#6"Q]!!CAc$9o`#%+E6IoZ#k%;8=g%l
+Y81-^67F/q=ekPd%"Xd'R,us7-02k/K5tL!;U>WDKT8Ob]Vl#a8^=k#5i3Hs>%C<W
+Yc?f)2^%Bq6km]R;<X%COSE9ti1N,cE6fO;WROo;fdfLHM'E%8RPjZ4bUjVk03mc/
+<8iZF#55^TUr.Y#.Ah>6FU!b!+tb=AUq@<2Qu0\gGalspOe_NTM\J3@";;W1W7"=2
+T;.rXTq3-'[skk#K'*:c0aAj%C@2D1%Z`*8(s@GKYEa2@X,$%$3^E0Q@r3q1o4eW4
+GZ5UaAR7teN&Lrc,7VtEnX\pIMG,8$3ZLL>2K`;@bck\HK:"e0@Hh$f1o^sM@uCNu
+q&K\#Wcq"<.L&/:3!PIOEitDB#?7emVM*;46/'VaXsM@b_AjU_krq]$m4'8POq!5O
+0Y&=V1gV&MFm1-=8GA+_")1H9e:K9)8#?k&Qq6HaCIa<6T%)<cksqJ=!0r]A3QM8:
+rLb'9NifUt.BqH-K.(^LTr"qHKVGNnNB_0^d6JjX(tjI_%''W3&-bTlNR*cU6h,!h
+T@Wr%9Ag7%+9~>
endstream
endobj
170 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
171 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im23
/Width 13
/Height 58
/BitsPerComponent 8
/ColorSpace 172 0 R
/Length 169
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]1<s+8*1d&9&F#7-&OTs2$(<\5&C7Ubh3N!_WVO2rPBGiXTL-](B(Osj;0
+4YMK4-.5@Q;BZm/6RPg"I.ht%TMR"U\La1b8#/ghFD9fNMb0Gf+qtpe[ML]b<@Tb;
+m!cQNQ-s?PMM4)_@C!mdFa8\H[;E'Kkn"C~>
endstream
endobj
173 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im24
/Width 13
/Height 28
/BitsPerComponent 8
/ColorSpace 172 0 R
/Length 101
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]7=#Ch7I&4fJ))[;$_?r6Vt8h1C066f<O[!!f2O%1GAklc/G&sL/-;E.XY
+7k']oA?nd;els)[6tMQAK^NV<S4k96&-~>
endstream
endobj
174 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im25
/Width 13
/Height 59
/BitsPerComponent 8
/ColorSpace 172 0 R
/Length 179
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]7Bs+E^HchK=L)\.Y>i@q3h<\4E26Xc($e.stGO2iFE#n2+l(QQGo15Nkp
+7j<d^UpA)./gi*880h+nh"GM2QcUX2)3k8;-CN%i1ob+FKd3D@ATW6'`f3$O6n:'n
+I7>M^P#S<cq/p`&<O,M72@+_;9bET8.+YF.P1t)?8)PK~>
endstream
endobj
175 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im26
/Width 13
/Height 26
/BitsPerComponent 8
/ColorSpace 172 0 R
/Length 101
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]1<s+/$0d&9VR)$G`4iNY@a<Zq["^Z/0>`-+9YNQ.^>W0B&3(PU!Ucm[rr
+="K;$A[2%&ME<_`_BY2QUb6dHS4D`R&-~>
endstream
endobj
176 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im27
/Width 504
/Height 40
/BitsPerComponent 8
/ColorSpace 43 0 R
/Length 9707
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,fWO!-g=;$O$T_0XtXO*!ulP!RP4j<YGfCJ0QeA"EkXi"Tma_3(tqd-\hb5&t!3U
+1C]@6jc_ZC//f'.LI35hi*7lIJV)tT3B0\l*=+r^<&lfKSPPJE!AeC+>Wa'uM$%1D
+i*7`H#Z.N5i)i;n)mRlS'\\O=+X32oA.eVGL*_$Ig*>*=IA5CiWC,cjW*EY%HGIDV
+'YI+g=Y?#[X`V`m2[_*hA?jT6Aj7B!RR!O-CgL3X%0qO&iF%a@+qTT/WO\Q((`<J^
+"!fguCl0GqdK9/@/<0YXPeTTF+TSHW5T1/eK0aIIL=-_JM*fT-<PTRb]\RL2HV?%;
+'+'C\<Iilc4ZWoRHF>;W9H4f&q#$QhNbY#sYt5m,N3LN0+Pd&@C*j7=J:K0U+Ud=l
+j#jD0=Ltr&R\n:P/-?O5U?oc/s!E[c*:bl+H<>hGbmZH-.SUN_K>bt>('oLWW'1ap
+%9P4fJk?(T(,%?#6A-O2L`6i&E]b'?7UU<\"ui_"R/O=Ki]`6OMT@o^"5rr0$N[HZ
+:(@GYE&\(HngG;4.VPn./1bL6D@=-ur-'065j1+u!hb>d[%SUu-jRU&1[>+XbS0W%
+\4E]7O.ck"WC/"+BI"%>5c@!U^F>C.bV<nV3BAUF]24D>Lf>MU8s+cp_^#]8QR,Aq
+6NIiF9sfZ2,dg$2\Pa%[=9UW@i\=ik1f@`+,D[=P!O*tC)@1rQi&1oD^m]c[K)h]d
+#_F1FP+a-qkS#5KkX$k"U-NZAl@N(K+P3e3i]+B\[X*dG![,QR'88^`?4qrX#WN+6
+WuIK=!`L\:K-9Y]P76)87B?`GJCm='"CW-4&;.dN6k0;AbmjqT5QW,7815sRrQ`Ka
+-Af6("9j_a$p0-P,e='nK0/f_bR"=.LbR>f=OQ5@`E?s^WM0ZhF]>jG@P=$7elk>#
++SuSGf]*Ak0SVhs)C5Jq2B(ek/ds7@QKuu14.\[!3]h%4OfW@(\j4=`q)Y1>\q42=
+23Qb9PEM1\XU8C8*!-[]?Z0p4SE4-]Rqbc^?9nid('UC>=;;"5(d84VfkQ$DBrM#K
+e40Lb&#j/k9RmKQ@44qd"ed>=eR[Uh<J]b8O<8ECQu#U2B$L6?md<-U.qHa74PJ9,
+NIJ!S\$[tjQe%=r.jO6M17<R.fW8_t1/7-`l0H'Pqt+Ie9T)lScKn4o*teKr-+Wn2
+L7i'!l]EtNoZr\Dpl,Z=2?CU$Sq0]n"i/"9!l.ZO-t"0Z8kDW#,i!sNo$"8%,&]@*
+EYYs5DUjVB/9_Tc".O6t#_<71"b;[IJesAgM]1\KB-brg;c#bYRr'=GST"U;8.,HC
+1'GCK('9Re"i/:7"!BapPk&]nb1I8`WRSek[f"YuMS2Ue<@P`c<qo4<'OALGeghK`
+:nal*2(%Dj+K!`hd_Z#WM(SK7dsO^s)a%/Tba1MLit0D^O?dfV(7>F5!?d5r=<s=Q
+**GC.+F;Nl-JT.6:d>9=!$_RN8G9lB_?H84Ak]8-GqV#,!hp9p<X4$X6*tqA^ne5q
+MV.F92!EVV\/YS`TU^S.>h9g7F]IKk6muWbjcWi>?fp3+!YAH@_2'3:!3?ic!%PGY
+#TJ\UN7<Dl0Ekd''dH9rZ&qJ(Um]o!,!\R^X*3)AaXMt*a[nlVM%We4qk-PVD6$'m
+!kVc:YXSiti1*1tprjV=O`GQ2Tuf'$N]JVGA^.PNG2Qi%]F94Bp'2Kq+DH@F'*R7+
+'S9.[9gJeB7ppV,9)p[c$5)*+aVF<.TE,Xk1J4#>WXI%K!X2I.\SC_L^-X_c"D;`<
+!mlC4Q8tI5A)"'de$oj<o!emSZ@[!&#m@(/9F,(r)?_Mal@EEL3m*!W81bt\-)i0$
+>"[k.X5&<38esi$_`\$?m(40\'*3ndW&s(s>:T6UGMHY,Z=tmLZ\nU.a@[!EbMFJ`
+1/;Q?q'/p;Ti$s;!mhJU.8cuWaVh*785)X_,_RVO2\KI>Lf-Z,O0L6.)(:3SBGL`d
+U)prr9Ep%*+9T)<Xd-nf6.alO[-1toOE@9$c!'$qTMXm(:b\NmiRN(6!ie9X]E>sg
+:e)X"#MNXC:WcD-+I)X2:67@=DiAh+ajfF&qT9$\69YL:DIC-/P*@"kCamcMe?26_
+O:OYd>LJ1o35S'iaOR:7-LC071X(gpM7I,H;(3(Ym*V2r7X!n+`N"PETT*c(SgcLR
+,pdC0kg9]R:TG%o]LS)/.Sh7Mb7HmcR5)gOF]JbsS:I=@ifY6::/WkKPl$G1adqo(
+pG`h<H>3ZKigbo3`!X+kekmOCWWEQKF+IN#C<H;gGee4(hRi/T'<sI0MgILXp8#B3
+TrrQnZjQoM4`i3,-`o>6)c2/b:-cp&>@:^,,Du8":'0JY!(g(T!#Z$WYSBtNW?C/o
+J@U[JdVfZn&Zi=UYt@nd8LopGA8HXuSuO!MA2N6eJ1LnCM+LCa+U)%'-IPoqiA^s2
+JX1"/Q;CGjAnELG6F1*_$AF>bV9,@_V9JdA@R3gbN/XT+'6*?Y?DZ)+^k!Uf$UJ(B
+A,qLn*nnX>*(H/fVGh4qe8TOqU`>a\rrq+K/YEs.#6Ge$k(/>p(lM/hQn0t-T+F!O
+X+2DtTSO)Ap6u\U1=p`,FS;BH_NXa,6Z`pfDO]9CL=+9/GhStFE./F8X=Q+\jc:3e
+4Tf=<]/WCDe\8F[,F7(H%CZNi"p(H;#Cu[*49[hN'U5FY*&BR]8H@B*3'!r^l,+ul
+'U\q&W4<0WYhW<f(RIV07:!2kFc2CEfcp#X)nHZYBq$cMO<t3`J2.9nOS>[GlFj$[
++*677S"#%.[EX#PK+!H11P@0I$!ADoTLE][C2sQq0GRE,GoiQ_JP8YqUBT%I')9IG
+"NWNc4NqgQ9*S=c@c;8cpBRmf&/TV[9^X8e:01*m2#!06ANZF=iW-tBd9!gj`CsS(
+W`51cdR0P"flf-$^d(bJ,ZC,[5plQ)bjs)=7f,drn[N>Rll:j%cghq-a1e4kmSH<J
+.S3@'GA'68L#W,JLj`tg02Dp1^`ilR>R"S@"Md8)J2CM&L=WOl<<XL%L;lsMCt$0J
+k(#@i"2N*]-@B9=g$S,.k";0e8-NBXFfN);5Wnu-$C'I@#!cW$TMPe79V!BAfhZ^8
+CsW:O3!2h5?DgsoA?\$_Dui[o$&C8r!'ndT3)Ce)EKE4M"aVmjE^?WfcG1\,illbf
+S7i9es.uSP,hdRJ5WD#"!h_Ns^dnRo=Ae9?G-9!MCutfceBZD.rK*a3.N2?L^>*6k
+8EJi%+=L"h`-H3o]rPV=V5Cc^=97>8"TVe8U3%dG'QOaa;/Cn`U>UDQ$7HB2dGfQX
+-Tnm_VIPSI"!Bupn?U9R1rj']ikf^<k6>227Kd+0#%1dD+A;oqEW_"+!CG:G75b:'
+4p%TRXWq_^0q9nKb"A<V"%S;55WX!aDS2lLDm&<4aGT>W-3Ihf>A-3*V;e_VWiRMB
+,%V=(W8`!eCa:;jGG%jkMUK5S'IT!e'nR!LlfbnkR*NQrGmnNs7%TCV#9;q5<X+]g
+8QM,W2Z#pP5Hf/T`M24/1aO7_!rtm9@WXe#b]/Yu'%#W9#pb8(NWJ1/\c\[0-8Iqt
+5gF6o"$f=O^cDRrVY*:(/''8Q71K@aU')m>!iL]rAjC<4GYium!Iud*!)Ndu7KR(s
+pCO#!A'3<\PoHHY!rtAmDR."fUD0LRAu!(1!'2VA0]:#CKAsa+mXWQ<3l>UEZt5F8
+Z3M%n5\0@Z!\6HITK*<VOC"]td==,s7S!VYfE3\Z)^>(1X"^9Pi3r)rgl"".`Ni0H
+^/6[;`kt&2;=I!s(]qYL9Psi&740[=eKs@3'a<#0E6_Z163AD9Lhpmj!#.pG,;MMH
+ilRG4mP((W.`4Xg4hsr!WQG>gZ9'0t$%OBWil3V:,!C"IF_[R-$B6DZE]6RA.dNuf
+:bXb_OR@!/5K&_)1)'i+7$n)oVBt[L`,7VjPlh*#E+@u*'(%%MKE?ZA)mRJf!gpXY
+.KcZqWrOIIKGXfA7#+$/!mn5Ko*kPL;aYQm2sX@jd4D))/cn@_\d;i_;9lVNZ6c^r
+0si(<li>?9OU?2.B;l\:kO=pr35"O*k,kA%!`_>a<&L<g:BGu@#FQ.?SFttT3he)+
+$`<kV/d&mYLPJkMJ2%8Gp1=Eu,d`YID^(:?BVH/lGE_gnF4>4EC*eOf;G#\:!)DFe
+0]H[0,@c$J_S!Xf/imIR5N\.emU@aq>+3cE8O>7<Kf8,sj8k8R?sm.B&O.1!5%Otg
+:b3sBbUf&LLp\aA&TGP-,_,sWFt7F$jRO]FUE;q#5&![i1fM,'dn37>(8K&ZYO<r[
+_S1fg1dV`R.V9kL!XJg<^f1miK@@%Q@n&DRau:`T.dD&+P6Tp,]KNX/UaHC0&$1%e
+J<452M,&qp#V;6S3C1"'2FaQ"D+l)6][<BK_%F<]<#DdV)S$tS"08.!kbdZ#fQb<4
+?D;g.[1#%SKS]!'7L(=Ck?+bV$3G`OLHo/Le1,T@lAKZSqJHqr/eX2%$FFgA*u!:r
+7.!qr3>tJZ;)E$<<Dt/:^dVi:dDMhF1hO[J;P^;p&O\<NdHlL<dK;-X25@t5iYb&i
+\g^Nj49ak]1f,`EH6EK1lEF#Za=b6fhE#7H8+T=R7!^o5g31Ee-Hd=0L^Z4331T3r
+e&U?Ne]or26mQ4GA"p=XOA5p0oLFL`""N5N5Z@n\`g#N@4XIW61*&3gCs++=<Ge=:
+_dGZ+:3@$8G\L"VkX/:c+?hNn$IDERV997NiD\&fMsB@+i'ILd\SVNH7Q".KTHLfI
+YZrkYW`>*-2.q([co8t#mL8GJNDsIi9Wu5Mrs%m?D,*#c.i&3725Sf3TGmV^q+S][
+/'i]2"UHVmf*-lZ:;b<jXb\oIj^UoG.4$?9A5krDIQR&E-W;>n^d_+pSim'2,j9IV
+7o#qS7Kb/9/L[om;4;@"[:AMt+NR;%@Zjs6^',W["]b*qfB<<t[#:(N7`$96^bQ#M
+6;/kTk68nI8m`S"OB_cLGK(G,1dcB9<(/FNQg<a9-%Rs@?>7P?HZs(<.h!W*Z<N-i
+%0R52W0\uM>d74T3:2c.K(;3$m1-oq;lHqR$D?RGP!"BY.Ul59eRD(d0cheN'/qo?
+<mi_HKJ\<Z5#EO2QeFU.c9>-"M?cfY?rdFR:>_):"qWL.`PZCD4LPD!Z"QIj")u_E
+70;[*-YZWY8I0?(KE3`b+Ngpk5Z#\W%1a];/*4GI[P\XU88d?.!sH@dm7EIOZn\m`
+V;k:5Z+VG[]6iY4hCLonVSABQDLCWq1kd2p--/"LDR+C9B;W3ac8$gOL0\hGdFP2-
+mi%bVJT^><@\`5t33GK_<pAl4b;2/Cff$e%<7L.,E!6a\kV"ukFp-1a"!CJF<ZZ@U
+?"+G?IY6N8caAWiSk^ns^k:Z0#8dK?/M8=H2/-*]iltkEL+KNgkVPg4^eo#%n=5##
+I[%(Lbu6jl>lYG1!WY7aJ5?>:"d<)aKm$B.2HDFq,>*JU.sB!=l5Ym0e3MN'-4q4q
+.l:prW?0@E>#[Cc;T#6IYQBOp2o;Fr$i_(sZ^;R!CmUgE$653QrhYXP-EVA].P$qN
+aGb`keB!Y:%OOL'mbo9VbtJ+D?s!WKAd0AQ"Da>06a?iF7(QCn<#O2I`d;3a?ndh'
+JPDpa'"F1qZHm'-_d\=6!`U;AJ<+(\4o,3`TO2.$oOKiElS=&jR#qNLD3gs<!MCkZ
+=;7gE:8M,I2'X[Ii'mlX=9NA`f`f>q&h(4W0RHV#<X,j2j*Y=IN`&tse-R9e8BC;m
+*n90^!^JTR=s4D4'7tJcQ#dC86cLcJJ4%7OCrXkjWT^g;Q+3/QCs7mGaAcT$(H?:H
+21rUH+F"-aF9[V:TVL6s="IS.jA(BN!K++mn+W^L"Mr(.8qWR+/KU0oOYtSrb/icl
+/eh7o>).uNNAoi"\)pK/GqgQ$/hf!d[tuIe3/=;ZLUY+0,#a]-kUJh7!u;dY?q.sC
+IVB&[XRg&-m%eJ[;R`G*`2D(l$[cNd*2BQR.)YOXiXS"Ca'kW<%j4:6X/.\pJ[hH&
+7[#liC+,0j=eqFg&SadJ>"thJlt-gXE8Vc?TPOj`F9_WPnR?Un#WCAuRDZlE2!+n4
+%ot8OP)Y'Z@aT#Q;/SP)p8@,n]r"m42IJJ?l2nar"e]<.J7&Og?3O:YXDflr([b4c
+-$c^fGA>bYcn6j^s0?E@-5TIpJ2jFa<!99'&gSD;`)s^X*<[ePW=T>ENIXp];H=)6
+BBM=mDqS(+('9^<WW]7Ki)U#s?3UC;"e\T@n]%L<5\aBqP3A2i->]te50<(W/ZLP8
+bCUueApWj5+s8)!^h))>+9`/N.s(@&)2KhbY4moR@>7t'Y)GY3+p2E_h^M8J2(&P&
+10K?pLiCK>TO%hQA)9I["m8\%!'=Mo?p1YE?^1MB"UI,_YnCrDQP+=Ah&V/Y/-2D-
+#,#o>Y@`R,HJ.URITm[t9VuKW,Z7,hfqb=pV`$MIcURF?+p0j!SQ920O9'GM#$\VT
+TP)i>TdT4t]OK;<<_b6@*g_Ha2<a9NG;l<mLaHUWI,GWY>rHRW+9WMeM@+%XJp^e$
+KJl"H.HBn`c?F4`AiPgMeXYn.Y@ii*psaPY[\=rI8P=T'!RDSi"SrHTpA6tk[2k_K
+5JCqrTGf<1-;7oT9Kc1fig\?TBE>n0#2jXTY^g8`JK2?hgHP,+'fKX`Eso"3b[p4Z
+q.3c`BMkj]5-$n=!#$Ai^1SQT"i,?g!-*u^^]jd=`ic_T6chDn..4\<;\:-99jUlT
+>?(Dk-Ulg'3`'J.2O(l>S;'EZK"^n,L$GCgc*WACm?<osiKh8-"@,oji+<1d@#D*T
+dHhjK.<.*449_BhS8a&HbGDH7-!nWN8%(+hIpbBtXCXQihs#lU?$aj#:[g\`TtkUQ
+!WY1uN<MWkfN]g9#(jZVO@TEr&W&p8OT83?*Y8R0JfsQABGqGBKVUm6OAI29$HE3V
+$$9Pt%L3*PZVXaZ(^lm%@I[I,qLAPKKECa1E&8C<%uSBf+o'Di"VHO.!O/XR(HnG0
+6%KSiAparfclptE/6jQ:#_]=2E2ZN'1o*Ji[Q>K&lP9VTYEO3=-l5FG!!,A.aD<mX
+&I:cJ^qa&+'adHEndD;J,SLB7_P*(8X<1oW:nf(o=@>>#)%=LE!DoFW+qFkZJEk[H
+*#/p="erhh^fW3'M*uq<piJ\@%UoOVd+E"c(COI-\0,+@[L:lE6Q+h&8#]"hh]^[6
+24+Ctn]rcCgFtlV3<5*FK99i?56hKriP'%/:'dZrUF)!GkrM`CV!(&lKI&&k?Ap*X
+P%Y%CC"ij>^WI*+$j#UU('K9k+BfdLTr;3.\No(*Q@[1O0EhLXZhDd68dZX6!FU.'
+$SB/ohXDftMK&R,&[Hf=XR"d]"t,8^b+XG?kV`qS$EP$e6g:'CgTJ>Dcj[%lP=$:`
+NmKm$"V))C'*KHA3"5q^Mls=95[m\$"Mlcg('Pj@8e?X5pc-1%^sFnJ:%!DG\"f&W
+._VokA9J?4m!C"f15W$nS@k"GaG7H,,M;`R^jnlmLbU;o(PQ8t4LZihC4u0!i,'rr
+]CG_sPqC'F_@-O>bn0<S5dJh&6-/o8R7WPfCJUkD?n_nclH5>&K]-TR)MVZs939)G
+80;!;^h\'1`V,0>;QHJ>%sPSbjU#3dCAb\dW!VH%^e(fKcieplYVS\#5l`t08$Wb6
+lCj<d,f$laK]R>4$k#rI"nqo2H%ShmC9>K.it`0`c?1!I?1*^X.69_gdg)Y`@r6T;
+$eQF)K6)]XQRM\#Asf>S'If,N."t((e@JHr&[c%l@MFM^,G+<lW+:`\JeUaF%Kk=-
+1<;P?Qn^o0T`@(5d4FqLa9$mnYl^d\C3QEsJ5@d(6jaJ\'$m6g:_L;i4caV2)6,3.
+f\hJ,]'2IN(^W5G[=KBOFp,aNZMUZ=LL5uA_-0G<+>aP4oHqBlV/V$!(LbYZ.a?Dd
+U0!5Te$SZZK`OG/.s/;j*MTJT?mlFo\3<\\\pJM2[m4?%V]YaqK5/d&ll[>VD#j&]
+EP,,H*0VYk9er/Z*8ZeJER/;6%gBdW8em#13(#0'N;+r`!WOu5$+1psHNX>%jWBRJ
+#**@;9u\n",uP-V?J3X+lO:ir1undIZ6+R6ClTl0+9b%Z1BmiD&K=&M9Mhu%GU3%f
+JO?<s>\iU*?qfg9-L_/b0cqWNO_ZF7T]\u%cp,nTp8R4A=[7c\@)gIZ,1%778Z=[&
+c=kE&=0Tl(p^i'*A-RT"&u"%\e0L()iB@<<Pb*KK/d-254VS+qb@,4H-*_JMpC77T
+RGW&+bmG`5DYM8@0I'*Xc&igi%j?H@"Q7WCK-4D+!D"F<j\-7'O>N>T@p&mVV5T!=
+7L;tn>r^t'jK_h1X4o[l8ndnNOFktO&TZ3ZA4W.6=R6:o?mZ%Qc*.tnDF_i:ehj6@
+&1816+Or"n8r#Pr(@rf(g$+)AYrnR#;NOVM!HoigohqOr0F@h("\m&pN>Y'CP:%hR
+Kd?G^4Rao?a@\mEa9=r1E_o85$t<C:Y`pZD39o#H-A'S*%jC_:VUFM?01G5sJE#L;
+b46<$L%[^3l7"8#=m1sNWV(fr64&3F-3YNL&P>JuU($jdRd3KO[W<@.e^9E[#=*pi
+iuI",W"Wb3>'hg@>$WRLd/cnqSq,J]Eon731+49-./D:Z^e()4b>t7'L6W04\]nFJ
+PfXpii(/\%k>H='UfIc,Vq%k31r)'X5ii-R&7HufXQ"fVHC@80q'pE*<6:m!i/PO/
+OJUKD[mletSNqat/]dLQP2b.))?g5"oMh@pUWWljMZ#l70TAD6.:gk88><B[.7=j)
+H:\15UICORfPiVI<YC/hmZn-RqY(4=$]lM9dPud`D&`jM2-B7V\Ch.Z>hAW%Q8&hu
+*`Q\,+^o=7c,sdsouuumXgUStUp?96:GYfb,dFWYeliGFV[N[lB\."LTG2lp;]T44
+o2(r\K?S"GiG>DE[_A&#Gg#GW#r7_&MUW8=4\KAGTF^+O:eO5fm(%@HMKK6NHREI-
+mM1PDO]'nD.+3"\VC72`9-a!>@+I>RNbKN%dsrW7aQ\q$3#p&5S&6bXbnY<oSfab>
+U:X3:_umE_O@7`oSWLZt2^gi/@B;\*Tt)&GeV\+d.m/OC9iE6orp9]a^foX>9rs'G
+*G'hW7E^Y9_^,H"&a6DY$]D-`-CBn@e09[GrX+"q35=DETZp1fdo1"AbIRO$Q*NPP
+ES,7'iUZ\3d?S"HR<qFTg\1#kFjRoPI`P.@3md(1eBC>L4iAk4H-4Vj4V4h/!I-1Q
+0_IUc&T9a3<S5R'@:_Mor0k=b6(rBX&O!*7m6jhl!n$h.O)n)[Qe\d1#e`OLdn%-H
+ErgOL.SS.4@8JuV/%0E-J^6&<A_LEcQ?2kNaKcYrkWOJ.&\c/X3.-XHUSrsSI^2+M
+fYZO(`At$B/i.Sc9ia#h$5+OW]]YK4D)1Nn?W*["#VZejP1Y7CBr8QINn)E\J\uXX
++$3PcSRkNFW:sU;iPf^Gnb?S$$)?ThR!W<4PKX)YD`5ouqQoVQ3m?b<;(t$aG7eE`
+TJ17a`qtZXC`8hg[C$Un]/NsXMc6@P7Z;"U@I-@S)SN=3ft6e=n.^kfU\9S+88(lO
+]$gi!Z,q*jV;?'\J0kHX/N@!mFIm#C,04:*9%;SP7dJM(Pr%RhmV>0HY/f%+/l3/_
+D"06sK^I!o2In6`Cq2+jPuEV"+iCkZ5ilSIiGLE@gho>poWuro;997p-ssf'hM+G$d/a~>
endstream
endobj
178 0 obj
<<
/Length 18176
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f.++RuF4S0bhKF'U9,+0kf?U/fMaiV*ZH[BJ?++`ZlXGjD>U2%*'T;
+<Akmt43`En)Bd73/f>.7T[MJcJfle;b[uK9Peq&n(ep_,WQ`e.1PdClUG/KS2&'If
+UKg*(B872]"VU^;a?XT$R1,t/!PHW!3Z8F$$uj:$.3&aJ_OXMRcuh/.cA!!`Pid'J
+*d,M.!.t6R1?FK"'4J+K.5$kl<'c>O'25hA%cWjpTYc!&NC>[47I]M_i0[6Y4W0XJ
+DnY@VI6kZAW(A>!8qI-gLLt!LSFgC=ECb[,M8=Fm.0c_!LB3,QGc!#8_6@8,3C%8V
+'`k"Cc57\i"/?%9Tl>T-#\)^ih^.<Mco82Q5jgQ6!u!U-0^b$#)_hA7=RNk`F%"G$
+J[!er%SQ[#2n#d.kVS:h@fF+u9a#Vt%ItW,nI1S%7a2?O8D5c-mRrlQVJsu<,KV^.
+jO)&D0]"f!UF`E+%I"kf3kUW_VT^uOUH6`8Xd_U9N.X[`3":n\B,[j[MqTXNCPq8c
+Y3X7(l+4(@a"KbUU>!,:UO_Y!8uq<44&&I$@22a`jL-uUK:HdP+KCkAKcuIiBGq!S
+CRQ(F!LgO^"UoDk1^mgY#+_ZkqtSj)!FT@U"r<.c*NY'FFL3WC#\Jid9X*"fL*>!:
+Z6Lj4Y7.D(7>kV>K2>Yj>&,D"FU+ZqdiZ(Qi3jJ\Tk3p5=":.iIZ/K.KhSA]7GE%)
+61,'o>UXQ!*<r3fAfM"7156S"[EG%]/4mq)Gs[hF*A&o2[NC2,2Pps.TOWithZO4%
+DMfr1E,Z@==#/4dX]%1t.te"JAqZj%OH,`c8J'ETNp&eN-A2HQ\qc6#C+bAmq:9f1
+="?lbTaG1@U7%f<<gfk#)N[7bC>-[>2!1KtljsB;^i-D$kiHfsms3R<#4BR:@N=ie
+DZ#B2qY(66n/P4>)tCQW$+oagg-<IES4>0VF"G'?)=RIS*Qt,S%l_,kSFAh\oGokJ
+e8GB'ERXNMD\LpR>s?D^+G)IikLQRm6WjUu54BMG]'uYZKaNQ@JVHJ)GL^Z([qjai
+rmu;GqRPK4mWIH+IY$'V3Y!#3g]*])H5N!EU#m@;9>L1)LMbN2I'<,**+S&KDk)Qp
+@RR;VGn1,*]q)h,C^cVfo)Z&FfY<2B7pQL`J.H%J6&0"H?mFodn#R?AVXd2aCX?-O
+OpX7i/FL?:*<u#Hb;hOqs5B2$J7P)?5[l#8_2K390"M9N(g-GOA,_)JFoFW2^CDGt
+Q@pseKL?)V$sma!-G[VG]1AON@WVNl%Uosg#O_"),Sl<cM>KA:eGifr@j9:Uc'Dff
+%\+efL2`j66Q"rc*;PYUncD"r-ta<&/:NWM,!*<&L@-;u2NdH[6UFp!*8P^ZLG.W=
+&]jDZTo;;BdR$em\NJs`Ck7K7VF&3M&LV.3VNl1a`_+?1*T.WWLG+fOX,-Kq-1l;?
+/c6U2q1d`Q/>ecP3aaqacQsn`UQ@9$APD?WjX,A/R$#BuaXK"e6*/.kPCddHBu:AA
+j>!1q>"VO-,rk'ejdi[5FFuU*2s6.gOqY@-c=rD(BB8glAR8`b)@8*kN<c&^.T7(-
+og,L?KqX_tFAU[9-YRW#P*@"O;2FZ_,H4q&Eon4e-$^r=2"d\%U5R'T\O5F0/!)U1
+R*s\]6tm)%Oqc>*^*$iH(qcK*cX)T%RY+9_m5g=cqLMU<JQ&Qh8uU8qW6e_G8*)QS
+#;hOE9Sn$9C=PSN2.igZda^csV.5TEW^>9^fhnem!j.`VS2`j-5Ma;&S'LH6eqk&I
+CO;PS<>F.g3C.%#9o-!7.`,8&).CU7<j9#%KEFOS8F+NeV!ioY<a+m&Vo>4(()2GO
+Ma(j625%.=QH%XIlYEQoUoIH&3R0P*Bs"LbOjh)a>J##m/a]mIf(mYI)bk3$os_Fg
+qV"r-M]CsbG)0+Z)I5E"&?Y'H](Z7Gg)IG>DZ"po[rUFGCTVh2omE-mo(Ck?JM:pM
+mC9XJnQuXpIB;Q&Yd`&s9tTk#/EH,l[G(^`amWPT4oqOrdXG;G'4:6WK#+r@fAObj
+Ke135U36JFfIA[q0`?C:Fr(Y?CdW2^4lXD)Rdu)'%u;\MS>=dGdpkH79C6CL`tf_b
+=B]uUZ/']H36L/hr+gUr/i]ooR]'IrRs:s1:;sb-_W:RtP\^8#b4mV?=)*S$ErCBf
+f[(OK4N27iNb>_Ag9t*7drBGWii[R5$J+OBSXnLM[2J8l3)'"6bWV$52H"Y[b6+BD
+';*VD(!YrZ$_]B$R[sN28SK)[V(I.`[Q4374q06>2#`H_RI<nkh)-5^4drr/*_0*n
+CTDO$`0!*q9Z`'0XY]CHde_-VlYRB?[5P=6)UdYu=G<Gl5'acOhdu'<_m&S>NS-$Z
+5A`PXZZVklg0.ism9?-iG5dJg3kKCpS+-b?p?147?N+i4pU[hWT\ZIeF6l'J@HUs\
+h`9j+kcO`]Y^XL,3W"<q/Mk1e-08qY98(i4)b+so&C3>6@H*k#T(+7bigK\%ER$;U
+\DJ4R39*?r9_4<dp-pJl?Qn]P:gs0$/_GH[7e1C2c*]Dm`dl[3B:Q62o%&94SI8-_
+re[e'k*O8g*hR38S"=\]_p1;%3LG3KT=U(ciE]D$omX$7qO^rGH;:qA"eiE]LM,Sk
+'=6m4gSg`VOE:B$6h_L9g\WpMOZh-?G5=efS_,j.PJb4?rsP^]Au0Qt(UnWR"0$WC
+MX?us\bSenj!:7D[@R$T4+M22?O*42*fF;"0&<]mB#*dq"3'U[;rOLDJ+c&2Cj)AW
+gGXPknD;dQH=(^i2XeHRIc'+-5<U@k%)KrE[rD&ap%,gSp%f_rkJ#4(o/oOqm_<Mk
+I6)lKHUlrCB[\5N\bVEg-Z7i@08*PZam"%'D#Jk,dI9*Jr-uJ9UGJ\bJ%l'(B@u5t
+qX3c5!&$hB:.#"sNrX&8!7'/DMG3L.,4I3kJSWF1cJ7QBf`J77!t/<8cHQHQ/uR#%
+"HNWJB@uH\o(6gP"YT6I:5oG'9'<A?#*1C;:B(P0!pZa1nBS=fNl),4md&5Gq_3X-
+Y2&?aB#"]d$#90]&=2htU@,7U[BQZq&>l!PZ?L8jG7_@n$Rj#VVU]<-_WSM:9U?0l
+V".$Uo#G/IX,d]^h[T).%M5`4a#=K#8InY-ogc=\OT),o.^edO$;geLY?__P#nPDt
+f.dX0kIS,VTSG5?&s0Wti\qF0G^?QM'.j4ucJ]EjV%]oU$*d,60<-GJ#l7&khXOSZ
+mH53\V%qBV(+]<0Z#5W#R/A>3^p'Kj&UM*pG8'H.(bhcbd>&(VM\g1c$)uMc/694A
+[h6nPCN/;P-aMbeXU<D_)K=jY0ndO8]c9kA`lG\2d<+M@ZNE^tjkt$tdGGL4fcDiD
+*Xn;AdI.DR:jZ%!"t.(kOnS$ZrsMY-+-<TI9!o%)'+9nN#4R6gd00hS)^4XM+qWbX
+a1EQ%qDBtNOYSp7V`,jj^'7J'T+X-1&l.j-8p:nKHkK>K&mfd&>9hGd,V:KejtOe1
+2\!e6-S(6*0+fTBlR0k[.#C5<8^f+$ACXR\.?[re&ofB62\@0Oob'h.P,c1#ZR$6d
+.l)_go!^$Q]%Y24=0S)<0fLZ.F"Ga9pbLAFEo/.gIk?g`'%1bPdPfmdEA(5\[/b1&
+o)>N8""3VA0J_5UZNhdT$SW%a-PIFDDt!uDM_\3.rmN;B'.4V1.4oT_/@-ED.QJf=
+6RC#E#7q8"der,];'clO!#&3]DC$YD@j?!D,a$_t:md#ZD(P7(jn!IDF)*]IIcUrU
+2tD_`1N)@gb3'C)#1C[!e!i#;>'A?tl#WgP1T(BiW@.,+-PO*:E./$'K03'8ldNs(
+1WJ^daX?\t4Yh.2Y0(rrEssF95&Zm+8o6c8O$:l%5E>%o93XXf5sNK?5a196MFg&A
+Q3T0iBBrnjMbueMF$^<:6B:"k;Fa(\nNt@V6^-U&F6c4!^]uMXOYfWnoM7]V%n-%?
+.b%Ba1fk8G=[MaQFqe95?uhTTlUOoE'6J9-[!tEGK1GP0plpCr1l"TNN0lF`8X&62
+jt;;-eBFp4KBF=.8<a.^W/;tG94tM&BV.ohUiKG=S!9Y,`tM+qXDq.jN3q5poZ^+/
+hbC(k9^'5ckQ5tLG^uMVLZWk-kSPP]Ck>1B<p18meI6e;:Jit;;29JOLOb%Wr48g]
+:ah31W4Pc'VCL+1En%ou2*R?TVba7k"9<-nFY%tfU5QD(K9HO7FYulBMbOp/LUB[(
+&=ch"i$QNGH?AZDAhNmZ(K6@FbcuQO'dAO#E>L$]:kApIe?`76\8ZRSS+VbEB?a4p
+,ug^gR;!4gW4?![Tj$!&NKm^F'f^h&nQ")t=ELTBC'e.o%%'Ah5)<u=bG$L[1m!J7
+6O=$:["q'Sq-Z)ZEE-V*@ZOj[f3p&t.qof-C.sbU%&_4+.on'=8;</u).0E"@=gZl
+lSP(gW!4#)9dDGP1ppl`Sod;jLFHA:G$SY#K4B('Ap-lgPe%&7EF\9_Zbi<Sih$A(
+4BI\gA)\kIFfB'C1MFs6RT-j&2OdDeABem@oa<=<2IB*B@qujV1Ua\Ip9e3bZEi'#
+C.^p0'c%!3cBd%hBNCaBer6`^7;Grc9dh-P(7eWpmZLVAA*9#C$&l?o=^k$N'XmZK
+oX$=:X]*gcRhkC-[i'3%=F.87Dbqd(CO8(n'06pBc>.akl`.4V!fkAKE/>dDX/g!W
+:6-,<q5^PLQ)KP_2e@j5EHJg9[iKMs#A;Y3c`=(AenK@%2,,Q\X*#5'WkVChq,(o4
+DmZmY=,g/1Tm8/T?rs.bo[:BjNI"B_Es?Q,1qS,!R=!>RH'c^$dmndEdpq`eAHd!4
+Q_/?Cb-%f`5nt0_GEUJB#/QInAW:[B'YAkeVV'IJJ<tWf[%1.J&SSPY#-[uV=<E%<
+L;Ah[_3,Uc=>+6H%tGCoK64!_OhSf^!6*R%9;4.lN*TO[WJ*99rAUL)cd,<>5uDl>
+EtDDe'X`\hQ\R=RK<d@En>;O'FL%6s%S=1N:F*tX,tkKb8o[:BR%Cl?FbVb:)*!N6
+Cin^=FZEF/*]@)U(Gs0636+_^g4j-o2+Zs\m%M:TCV[q7i*H^4g4g_8#_:cJa(Xs6
+^2aM3F:BX=82lUnC4gZ(O>aCd'XNkR%W`KpDts3lM=>R("Hb\eL'LV.#gd]S-?XSk
+DKSEs5X9TC9n3tIMl4F1)&"*[0RK_$P@q4e\NO.sP^RJ;=pOS&#U<?;$'/aYQ"S6[
+)-rUI@p([,+QsGV)+]&Z+]WZ5OVo?q(!W(j!La>*PNYN$37..p^3UNbO"'FM#VhhE
+#&j=UM?5K!fr\&k+JHc`=(WVF\J:V=nWIQBDu#!K`+a!Ido<m/D[^cZa<?f$-#K'$
+O_7UT\PShW.XW-=M7FXnRI-Zen9HEiK\@hqimXWFfS1nKDTO&s[L8k!-D%e0TNNn=
+\k\LD&#C0XV-3b/M%kBH4HDO(P58@FLJksWCji`;PWAZ/g3olUAZ"aPR[T#18QD\b
+O,pjAOZDs0>*Gol[A\pDU$8VX>-"VoTrNs]WQ+t<$B;+_H^[O(W/0`0g6o&M"J+8^
+PIfGKHISR5bab-,Y+!2.qRE.YSXl3XG@E;(C(mX?N1ntnO")0LRgu)q$)ed@Ye(!u
+8Kk>g/0c#CYM%WmMI3Kc?*HqBZ3k6IC2^8e6a=UYY<,C`b%n@g:UGn\ZUeT6]#K'm
+RC5_WYXppb$DY!JDmTk4[G-&:4&*/@agXmY[tmbfgQ/FL9rXVJY$5bQ\tk@uRZ\Ve
+Z\T?WWqDK(osNP`Vn97>40Gq='t]sU]A(3+43tLXn1<>A]kOdV91umdj1EK-],U%B
+46Ek234/R=[G+Qm)kXn"*4Xb6V`VShX.Qa=$)egZ\,1ul>S+PQ%'Mc?Z^`5D]HXR`
+N4g20\m,<LH_\L5qnsG\K,_A>gV(L>s2@Y.Y9n2*UJ7g_s27$0`S.E.4?phjEQ!6B
+]LgqmMi5XQhS>XGXm?M9g>]qQ7)I_nad]QW4FP;_p,(M>Y<8i&>[=X?Z,qBr`E]ac
+>e7kDVgZ3IV>I[,4;lBPDoLMUZolj[4NG^JKu$uHb$8@Sr'.Xu3R4_4cCFLMI/(js
+'SP7lYPedK@njK`o?g2k]"JR"Hp?#;ji-$qc.sVeD#^p!1T.>SO1dTH*B)LGb0YJ+
+e,;kF>sd#po$L`DeD'EBrEn)[!n7#de,;G\4^HWe>1($&fR7_j]h?6orPG[LfU[T.
+Xbi/lM:5aifR8CZ(^\k8=PMY/`=8*^]r!L^XO1=^gAS;1)8g??[Csi0epMShgj7i5
+Tq%N[hOVa:h9Xn^Bn:\pa0!tD*R<'FN8NGGapnm##/Sh1p>?raarU0+IL"g0Ol4MJ
+fc7BKgr&*aCZ4\3g)_HHp`7g).H.t*c;&<3*8]7q6KYsSj3Cr]IR`E_9A0WSd&qrU
+mW6s,p#\E"c]&n+IUCr[!pH3Vk8np"]d2lK1""j3i#[L9?0CFCOkF'$lhkG`\GPP$
+qp]NHlAmU30)+ZB([B;plJB"R5,@`J_:S-'^b6S1cPc"3aRMI=f7(oX^=)VE@.etV
+otJ](VqJrU?cEUN[GLeYY>+:FL$q4ob'6^h?OuND<;,'4nN)6kcY;_dZgnUhgTMFL
+0;7j*j7>I^o+.tn^Gkc`TC^`OOY>2K4rF;a&`GD-mN5@*55k/H<V7FQj)>IrSg3t.
+dItp%o\X]j?[(iX*q=O/ge\a4Y8?7Pe)`8,llJms50`nb1$Uuq"+R*8hL,RaTBC^3
+o\[!0rmCV1Du8DS><fOk%b^aYB(:Aik0DZE:keA0RgC.`rXb4ahriE`(]N5?HTnYC
+JcH5t%E8GMYf(Q7*!d"X-mTXC22);FOQ\+H,85gIip_bo<]LAF6K<%[`(CggP=B)F
+BbVmm/q_@kP9H=15;o$)?t1%,U+$SE8`Nc!I-,cGSdjn(apf\S9;0GkoZC.aTh^kO
+BG+1,rfB(Be8#gL]W0"OY?3,*3upB61U,SFQQ"@7hd)!Gm.\*(QMG'V?u?eHQ*bI\
+[:-6-4=0;6IE:C6UJ-d,/X2F\EOh!>="fu\_"3cs<gJZ>d,3g"=>\mPXrD1+HS"U>
++?.tR-!S!a[m.RPa`lJ[A.N\"Z:RO@(j@p*ccbr;@t'/VYIWpm-!e2[>Fbl_pW!#Y
+/nuEicMG"6IHRMg2tg@&FME$@iTPj0nrg3:Wr=fY$Zc9^&)6+FX>!85!l7ZgEm)<1
+cu04HYcDgO4m3k@hns@@.,glHiklA-E0Ft8`9H![*$X`c>7cNdKDL-gD&d1)`QX!O
+r!IGD3tB:?1k-?t$K@0m8?/0h,em5n?R)J3Cc*Z_15_\Oa)YFI/]p_^OY=o(#]RGa
+1F"2%ajV`o1pF6L_^nOgfPnf$PH<!KaV2mp43`uU=ZsqB%-KjN';LUU[W,R]^r6tV
+:mf;NPp$o";IqF9;Ns$f8'MadV+jFdjD*c#Pq6%seC6o_6WEZJ;_1raI)f;XY4UCO
+`K)$Z,1eY/F#him`J%^E('JCLaVIRGqTBXjk@N>r7@QYIp-d;Ac>Vc@6X+P9[5#L;
+A/dF3QQ<sfgt(j)EF!I@AIHTrN2701(TceFhU4"A6XK;bo7"\&b^cKsDE\KF+BV%f
+KL8jX4,(aaQ6Oi;pauiD#;YS:NF;=g6&sds%NUP(GmbRTZ5FVkQ/\hb\V4VgraPAP
+1Kq&Q10MfnS`La'9fQYsQ>&cq\X"a2j:iXM6Ksk$PG_qpDC7[0g4lSX<&gF=XfnFh
+'#fTVc$T`]lj.>CW4N_:ZmRq>=gs.?C1FS-S$(k[m[F<.\@qdO(VB*M%fYARiKY4b
+d6&$\_!r$+KIR"rMS=\8]U2!gU>^W?M2I+&:`'?[T[X1%]SL5>@gT>8Mt$Uf;M/ss
+Dct`_^i(C<Ee+HHYD.Ut"3pGMphS7KI4nC$mN+o9f-WS?A`rdCa"PSg*4TZ%3Z\VE
+cN0_)@Mj@'-V_PE]M1S_n%7M!=<bD-,O0K%ZG%3_a?"n?oGnagaR8#TH>DYSs0h*W
+!6K"c2Gb6`^@u[GS`?(Aa.+$VO?ieP"8d?3Q.WoC(_-ttJg.B^%QcW&#0G'tIP<l%
+_%ImR*oil3n6tlI(e4jgbCj_./\a6MM[^dQa+hk&b_%$P%me%;+E60^OD'eM>5?NS
+E@N@r:iLn.MgC9.;$d=Q-q.>;>D-D/M`42H9k+i2N:#7;`%Z$;j'59;YrWM[J7fg\
+ZuqC!WZoGRoaa@2!KV+.5EQ6RirR:;Mli:4OU,^s9C&R"6oEK$fd>JTJXhiTVG&n@
+@'H=5SO>*,G.TG9\>53?7.J7gb(F%NUm'`!o"al"5[sR5%(0sQ`E#&\FXTP7UR%(3
+?8'ETg]<Y(R.D0?7u,P*#_^Eb5g!Ab8Ymh+):"\/>&#[fArN43^QJ,>=bARun!+j+
+PKqGgaqs>YcbmJK:%>F4(!S#$UlV,<c/26Pp2jS.dipQ#)BB$rlf]HND*ZK^_AX-D
+)aoa\o#r#YGXFm\#W8-Z@Z/0TAD;[;*,RskZ4Rq(%;$aq?doP9cL>[CgJJ3F'Z,>=
+3b$P$*4C$$@CQDR\No>[3CNEB&;+_Lg50!#Th+ID;+G5$Vt#V+og2fR.\a@dC>5/<
+KH&I!N5,F.4q929^-,W3s3(mV,%6FbK(+pBAoL-Ii%ujD+CnR;r*c+GK"I8)lX#dN
+4g-!Z^UHi;m%*s<YZ5;H=(c)MCUJdDp%H);lO+nQFaC=$9#qVQ-"^t)*A+^7BNVkE
+BHUNgILbWJ`P`l.@hZ_+c\`.(HR;ld>p$GoqS-2qBUL#,W.D-PbC_9eCPei&HoB+b
+finJd.%E6#2F5>g)fo*K"=\e;@Dg]t?OP`^LO:etaOtoT7cmFQMq9`,(X(3KSt2mn
+0lltaX'kpu1ZZ317+C(?ojKC?rJ]3WO[AA0Hf0&"+U9of9ZQ^!!J!&?<g(DY]@gfN
+/^^qCrsIDW;1'u50YN9?qNHG>KPr0b_Y,2^?:t`RXGr0lGb2lVHSJh]<JmrgZKIFk
+-Y>!5Fg\aGX?ep&N\Vn&\!\;"'TA;-L_)AIQk5?j$Sd2<hGh1p*uGodZ%+U#G/+u%
+cfE<i:GV?9an^Q>AGb%U11kBs)4MXVqur1f^2V?ilSiH-I@b;q>gES_!GB'#J*aRo
++Sg'@BRL\kZdc"tGQ0$aH_$]aY)];]6RV+M0hJZ^c9nf7bV:\<8'H^aaB;3gBDg#S
+_7#f"qR]>aN9RA6[SPIW1L05#qk1@)VTSZ`O6"Q>WUNrlfU>#WCb4hW2I=PQ>9@#7
+mA$k**l=jY5AXoKb=Bo9mG$B:BGCE]Z84DpeN#j9C^npd[3j^I>DlO":"R%;SkRuY
+-JRu0"hsXm\(rh^J8WX9]<Z&JbFB)qm;/uC2t$spg[2pu>"$Ts5!d\g@kM:3l,Pd@
+&DWS\IUkW*TXc^$j;CaUC4(Yr\S8$d)pFCb*H)Mq/L&q3gHA)*"jJe%53<j?N"h:^
+d)kH9/\N:.F%gT&3IsAhq8B2S9/4qPhc/bZ'<$"jQddu*=Q[;,Y&ce9cQX`C8%eT'
+FT&>p3+m!P>lUqq8ak5V:13GEf<==CQejbNId$b#pN,3eebfYNnGX?M+E$h,BATNL
+R-;V9rkG!!L2H1hA'=T&Hf_h'Rd!"gV>2bhW;217krtl=hu9,24[5HmSu\pgmo,g[
+j/DYmj*C<GJ'gFJ8(HESi:@J/eG_,6p>5]-r![B3Y:i&ifqK[=*au>?[0+`Wa6[3J
+M6[#n_YX:blMSAopV.bPqfXpc][+4FH%tPJ>gN1os-qG\8(uf>s8;mmdJa+*p-5nX
+3]hFDb(ckl]XUn9^e:N6"7*a<QoEcl^l/O`X/Wm]UVNB'5SODfX-pc8V7A[U\N?k&
+';*)kQnf'8_+YP.g^ug,&jYcS_-<\?$Wn>\bVYaI1Xh2sdu',Y*l%cR_?5BUl4=48
+,-d(MMF8`sj<R&rS#gEK60"XuZA5Clb<iO'_J?>A`%F@QXhsDj_Yb7JPV5AY0aheK
+_Fq'sN$H5N+08tBW3cZEKJGob.'j%-6d.TsbWE[84i9rY$H,$2r'E^H*C@\46p*:m
+'/m^#*A]uQ/TWD[>X$)*-H(!P`6:nBZqJ=Uk89AA4G5&g1aU*l;F@c[`C)5q1e%c+
+;*m$P79!'q>ZS<B-FIqH7EcjfTh*$_?Gmde7FV[`HsOW`@n$kg7MK/s@#uf7=%3$Z
+7QbBQ)f<JdCIYBe585HQ4<?uY+3*(Z7grJ=r+j.(E'8f84*kU*oJFU)6+;Lg7uSP1
+HtPrs=3$hT7m&-6,ULLt-G]Ol5l=]nPU4C%J4$\p_E<If'S].(KZ59k]ehRU!6?TF
+Wkqs_]!N]m'HTg3+2OHj8IS\Ar%uMH6-0OJ8K<a\glY0ANN$`/#m?Woq_bN%-nM`o
+/8Ub(BV\5[Mb2EgahZEJr1?<OU-aL&aj[RFK:)uZVR`e,8^&st`2:Z?[`YtM8u.lt
+UmO3tM9=&:3qT7A*254DX@k[UZNRL*>dHd@k"(Bh95Lt,I&G.]REJ9k/7FB.KMfmm
+*CFT$9E_(Ed/thn>KcrR`:TEj/>#ULSkM7Kb_m=^N5J>:WigDF/h86lKNZEe=il:m
+8bCD(m'k4BVp-?^bh3KMgs&O:U,B7s)j;JjKX\s+a>L?B:!D=sbh9^Vi_A40:(4/1
+ZV;-uhb<+j4bVlU,?N'9EQWW:9Jl!+,]LkqkUn.G9#U*hXQrW?\=mHJ8Xjf1K^cA@
+X>`Pu8$&W/]_4dqoM9k7cW]=(D#-_fpIVH\3!6Oj,lQ'=\&_PJc]":<oZ0Q3VpGdB
+:`T[7N0lR-btre^3IIo)S>s\)Vo`-%1(;&sh$H`&%&tTWd+&?I`9"fPQSQX;c2AAQ
+33'iH%aeb/;2F\gGd,SoV90Xn;96&d.)]!M*`3KL9L+c`fV;;J[F+X[$;D5Wm3=$p
+YgN6RccF$[M!qEU^l("Id^1c-b/Vls/5j/5d7h32`/ITj1CG]R21hbTqao7I=OVU6
+dsWc@(o>1?_97fuM[__r9\KnB*A-3q8oW<DfS</n6W;.j;T2'7rBo'\02u>t</AmV
+5d7D65g?g=eB$WJ5iGVfg=#(WNWi5.eML7e'\*cU/An!;eQ%Y,@6TeB;OFbu'eE@e
+=460r<Kb0+%9n]pmgg-qeaTTi(m;?s2:abX;WR\SV,@Uuq2_ppe'2P5X_Llo5?=n&
+#qQ7^eO$C73)BsaeEDZI"HD"2)-78fOEFH%gki-rDic3r<u#Wc"Vf>.HI^rl8C6hP
+\IVPCIFm"J&JZopaV[C=2G-Os6A3/,211Nt*L&E%PF[Dj7>__CL_:ujfP>;fQ&XEq
+**B>)&sP>=AWdX:,*A-;fhHJ>?$6g^PS-]M=YW9H0fci8M-5aFP8-]R@`C"Y1U>8u
+/8_(_AMDfm=P=E*g*&.P&N@CWTf=2_g'kr_XZdG1VV7<2>+lg;[Aqs"450@e/p!PU
+oiDk3Q<Pr-'V$p_9qe_2l!%tn>AD>cR7u9G/5:C=7KHQ0Tip(Y<2*Z$gZ;SmoqYgr
+]p0nXQ*kfNrHB#/T[(C?caaonJMU=1a]R*9Q0#kf?(MfPD&0fNJ\uf"A[YC:dG1;B
+>i?PrS^gm_FBaIO'/O_b`Re8k"-JiKU92qT"h@pXh:U97P""=BQ/CEHJ6O>\'/UVo
+Q+NC%e?TOo=6LW+/a2&.e_[.2?ENEr;2N/@M&8(a))[@ZoXNca)SVL.agL`A[ItH=
+-so^D?[Z`."=Pk\Nmo*I3N`6eD3\JYoXa_gfgYlWXWP1nM:.67?jVGC=cBr`*+.7n
+bIO'9q4-4U$=?)c6RE0lD@U#J.[\KfR%5uN`IjQ<*BPqp`.<O!=cD)>'&`0niB?Vf
+<#Cjc)W7_T@:eU=<O\>J*uN2O,5&%2WT:6s]!.V*i\Lr]HfsC($XuH?>*^RG+rno%
+.&.8$Z(<G>Ff_aK,V_bB/uoJd3Qmr8mOgNGY#3ZYU)LU@L,lj[*MUA[)XFWthQRX\
+TW-o1=qXSb-FZ_tXWAkMWrjsdhV?+6/k/%a_BW#D5[l<=]H0E^Q8;JQqC_@9+6!_`
+*_/$81h(5STd*W,N]U`"qHlV\0PD7VHO/X6%,4N(@U;?o/gRYNeE&^s/41"[b7\B0
+/Rl$AU/e4(L1//`=/#PJj:Wb<\g')=Cmt?9U,-47dO4#4YMLG=h?FC`Q2;eLD^1PS
+UD5O/:*\`7_]sTU,5-,\E^*;?Fj:mm2hkuHc?Z2VIBu6pB>Qkn(4;oa:7sQ`=h2"T
+'uqUHT4fR)BFE-4?A9ai+=1?M,s1]>E_ns^J@C80*8XJej*eg[;)?^]SP,)%erdE[
+=3<Pd-%m?_3#Lj#Q"bNoSA'+lk(RN8+XQ1%-0&LDb$&N<[/l;HRs(Igk*G6)U$=h-
+\IqSl6tdpC-tt0udqQ36jn^=l#O81@+U[hK\nYo5Xltpc^)?)\Y)AiSi\qp\[[*pP
+L6&4CO_GGH7:rhag)@6aWTtkm+?5kUZ/90pe[!1[ljItWorr6bALoHplq+TB.smk2
+`oJ%\[)odnPB1OBG\J[KZ>nbm@M#H/Q5s1u.Rqf6:95LXY[e]d/ud>_.G;A2O6q7H
+]qP)3f#MV8?1"NE-aR=M*o8;=oUUHh+?UUh(=tOo"2Z\@mRiSPp>p1,OP2G]_nM7$
+T!KiGd3OrRCpJr*k2^-KO)FsX3!0X2R_`82PW\+#<%=/Km%%Z,W$u:'*F-=j)P"H4
+S?m*rbWa2qP2a@+o^D>hc9e=G)OK%7SA8J1mQU\j>"MRjX.N/mR@8gk.CW1gY&JG9
+Be:n)ihjZO#k7j!26s#XD=K)k@4Y<1EC-F+-OB6\#@:9j=.L_34aQUM_5dhYWu:_(
+\oKH5Jr!U<!,AqmE7ZUl\Leuk0Zq'!;SFZe>qTm*Ee=;l#:?OH`,_=`nuEHX-S2@]
+6ulDQEjmWA)Y7upM(A$Mnk'F5G:<rPaX*tEjJ(2iD[J3<'3>u-&39)W@b^IuG+1p\
+AMuo,!oe84VD"q<0+.TKmj;NT7qR@goD96mQU,\]m';.no<q>r#!T-'4XNrZY>6lp
+GeS;5pLVB30:+0Mjuoi)'6?c5YbruDQRWpd_P[WCo9WG;W3<F$=s(aAARc!f@gR7H
+*:n47El%f1(GBnti:ZP*Ym2^#VH'lS@e/u"G$d0!;]9dC:\*[.&g)%6Ir2:u;fcFi
+&;NG"kB6Ml+c5aU2(*XC4"b`Q^p5-M=#2<I_f+U';"FcEEn_k1mom1JK(oR&\^,_K
+HSKZ@Is?<*/(*jmpPLciFu1"W4#6n^ZZ7^3NjHKS1XD"8+-3q(N]=Kp@8ftpUEoLW
+,C+W+)]*mC&jQ2YGI3En1H1cuVcn<%R^?^20oJmM_s)IndB_]^Gp?=7dinQhRl0r4
+H;CF7B9G$bVt\65HCq%Aa/69U/c%0`qC?4SRq2CH1OBq.2V5-Z?aI3hZ$M%<qPUds
+Dn7fXFe6KRO"%=j5J<H5EI2aUqtGO9hmFdq_YE$'H8ifj#K%p-X#Fbr2of;c:Ki&u
+KprdG-_IP$0?AP/HFR>+r3+Cnhn&acbP\isRCCQA>;LJIUO@KMr?lf6hf\l"PC66Y
+H^frjBAS%QgjT'aGEX@tF34(+_]=NYIS$fU-V]&"U]*@WremHBU`4c(8cDNHI\5hE
+fnk1$anLXC]%:+FZ`4sOnc(\GpS7lj>IK#SWW*LqIgST.Qh,S(omP`hI5h%QB3IC<
+)$g4mBK7">LB7Qc1h8E\5bO3I!O`^OJIVmH#YZih1lFaG;5eRP%iL6ijA?baDEB'I
+PiXW%]H09`LW^qUB_9"C0oSk_1WbkTB,)B3@<=Kj(5#,E;21<l>b[Vg)UkYfR]S37
+9q,2DP8]^4YuZW\Cc)Q!,)&FT_T%ka<P%-F\()qZ>9.JE;3G8P(J?@;"+%IaDK.D6
+(D2FVibm<%FlpT%^1-F%dABCX,gBpVK0"1*4V\t#FI@]e4$d0%_"DjkDG!L*ZV:%e
+NIK/'YM3IQ,>G&1G>?o],'t75l3DfqNT%b^G<,uUX`V#m*ZnE'al`<g*Gs,G3Q?dF
+LHWs:HaOiWaZ@jqS0'Ciq,Df+Sc@<`*;+c1YIhfP5>8uUo>"/u-NUrB_Iadm86d/1
+X>#SAY/630+T*LHMls0Kl?#6$6V*_,rPO3)5`3Mf=DAZr_30cn`Tq>Nji0#sD&,VQ
+lJif'M#;#qa0ER:+@g>UAKO$t$t,PrOe?167P]m--q&)LW?7g"XJd,\'',l)9/?Fc
+.n[*h]-YY'UjFu=M,W.\c4bT.)Pp>82_RWVbjda>o;'\Rc]eM^,c+>QC8aet<+r>[
+Esea3[-;%*,cV;)=[l!4eK[RR2"`Xcduje+[%eeH9,]GrrDuuoX5'%BajlY$=@P0T
+=M-$om<'=&1Au]0;JT8^)R>UH,10!5<KfsQp'b)9=n#t2BLfM<JRc\Xe6(JN1/5G#
+33eI`DT6^<@j]V_/:2P2(JW"mh/IURgX-N7@sg_+2:YX_Oeq^li%bK9-Xa<>hgD0%
+KXV+T\9*9'hmdObLsEMb."UAu:*gfeeNP^J/Wt2?[)`fSfi-uEUa_:X\SbP2`4:mc
+)!2EBB.%=KNc-!%W;(3Mfa,lU@H\=bNM=3<?BcGiH>V3-b5,)E)/:'`M5[+OV8'/b
+TsV,tC^aprV62m4X0V!D9Y7EAdjf4A4I]BD[d3M0]=_qNro:^B6+$6]n2oL)^M"T.
+qhj]dp5-\,Gok7rAD5b@Pk'i`^8ok3-T0-5FWW6,kreC%:32_uXjV%a<e.m&HTtf>
+f,]WC)csY4Dnl!l-YM#(gtoNqpW2N)hF1WF.*_(,:Q_X0RKFemC>P#@ZY5q[Qf%$k
+VO5MNWGf-&HF,):b!Q3;fqMd+gLKJr*nHbOrLL.HV#J,hVtK?#[8!e'NI:=]kQ:f'
+Rfe/d_6^p8R(ulN#(LCu#./!NJR/DC#1-5NZ1o[5@)Hu:Xo8beAjZa[6UZRo!;aD(
+7.Ju?*-k7^(H(o0d2C\(6BA\s_^;8j>22,U0_rJW`l/LIBK'W.g*8Y7P3AW,6s!oJ
+-)8=5'MfuI-fl6s7.M'-,/cu$5i'+ALr1%WldC_'+t,AOiu-T.BnWa/1;m;F']W/1
+4cs2.`<'#cinSm:WTD;*+E&AIqH&bu.RHO[',TG7I?>"K77dd!<$>'sP*$L.7CPQ*
+S?,hVV(PD3Bf@G8S=Ym@5c@$F8.H*1>;+B5=3:bl/##mcO<ECa6s4.FSa<_JYp*Gr
++tG.$goZZ28hI`5O!LHfO\Ls)A5'Mf11k(HQgoN<K6`_?Qs<`KN&![<Gkj=,PiS;'
+9\@Sa[f!$Z<<i&l/5HR<4"#DJSl)Y;`<34gBA>q,O_tC+F3Q<#*<)&L#(jdN',Ss$
+WhH[3qOW4U6th7.A2I%ra<V-SW7;Z?<,O6b#scU(lBS+J-AnKFVaVm71Q-5C5r,s4
+9VVJ<VD0Qh765,s.Bkb.!9"s#qLLRt>sk.C.\d*73DlN98;kE8UrXIK>A@V<WjP`t
+dTW2=$C+;=<I1YlibT)T'jZiB,!+;41Kc"eC3nF@Wn,=Q%',XcX=cbsf-#%nl_,e^
+i8VLO8K2#B7=_L\/uVl6%5dDtF0TlAU8W*l@aDGQP;Uc_Ru5fFlKsqE<\i"S!oms/
+?(SAKm\*gAWA&00XJup"Mc`mO3:2PB=Ve\$gKNV'CE:'gX)cVC$DB:fAVIW/k2B9t
+M))4c[^(*(\f5kjFBjMrSUf\t?&0Y%-P]UlpL`jE42Y,o]mm]&;!T0[p1#a]Dm#0_
+p4J9:Ffi>JTD-(:hb,>GW\"a_GP\JZ&9,^0*S[`Pf)"<OF+H#6PJOXC!FX'\?;IZ\
+^/2,_U3`bn/Z'N*G35FUlGn^\m5DiTK+_7U84VrFGTg1tPSCc=;aH^*4IFE6j+?$F
+MDdT:9a`$'%"Bu%%Re<2LE>N8Ng7``W6)M.Rq2EXNpAkdXZ9Sl^'q7enm5-F3D0M:
+-sr@Hh1KFp3^70qdT!P9m`hk82rgF[M_d/L`hbt>V<YUL'YZ`V\B<"XWu7S9Sl*i0
+Z:q6'$'"#[L;Ok6g#Lm5N2;AG#'PDH&nFM/ar4NM\nb(Th).%^!&8b&EGB6J6;'1*
+U`c+E9H7nLWJU&F93U!9CH5V#cJ^A]5u7c<&fQ[jG/=A#>oZ<8+;G0D-jB[I.L)Oa
+&U".2#*h:Tm::Ba2UESsA>=%=c$BJ7rk[5pK49tIAl:Na#MFVa'I)A,['ljbebZh'
+C+Wf%aHi[XH^A5Y5XDZ9@058XK6Mot@LP/DdFrpL>AGa2G]b'q.gV2CC^pQY3#N/0
+EoVd'NYB<SV\$3of1VHdq5D-SodYVU5&m.<a#?c6#,dipE\L`,!Nu%Qi&=pTSl<,+
+Te+^)IuE^b'?muD2$RsQU+<s"%!hR>kTpJ/lWmspGcBZ]4UTGUXmGo\cE+KYmcN>c
+[5[s`[sRsY[rr0%V6DRY,!aHll@/?OZ[Z<M^%+kkLI'cD0"!h;(mK6"\YZgK9^s7d
+o-YULjEokiO.G=SGJkrlq/7tQJAEeOh66$irIO1J_p`K'?rT&IX"aEX8X?Pg"LbkW
+o`!Uq*c>!e4kH;KkdATNIt,?uq@n;R?fQ:S(;,Go2#1t>X90P9dCtmrgH6*LC+lii
+_2afV^N\:^'4RJ\GN8L*pZd3e^^PZ6_>TjMidDLi`;u%kl[[(tr."73p;f!^-^5d8
+rr2@ge3IRFNj'[B[NU]@hkZDoc^OsQ*o$t$+j]d=-XQnLSG3X'"&IqYA.%=RkY_s1
+_bQ01YP9R-G5qVU"\uQ3CF&,j?M3^:6t2a0!hQf\RKdP4gE:)aY[[q*_!1><e51lB
+E%qTmbkUTj#`c.;n!OEX3pR6X`Qc!6/\q2.&G`Q9,E4l4UFP!E@1*H'$Yq`ZXfVWk
+ZOIHl%-&Q,j"h"GYVn.&3!((?D6/:aA-S.e%-0DYOSnEtI+sbe&1j(>7)2,`qG,/4
+1Fj$k,p`UgRh>fL&OQ!^j\ZLB'^dT4?Ed61U[!+k>Ve*#&1EAKO\FO7W;mN0l\<o6
+"+ZCaY]'Y1e59g*&S*B[NX!mP'r>U>Y+STCqL#NJ(iZYq8m(dX8J*P[#13G7d@0pY
+p1l6JMT3%7A@h\pfI!`9ORS;LK_#K]p/DQ5P_A\p$+UE3RiMk0l\Xp8Z)G>*cFks3
+*c]KBZ)Jf7c=a;G!MJH),)5#P.0j\Y+ooV,5[Fa>gB)n]%H&-31&BNPf`d%*6-t!F
+^fjA2>TdE>%RA/;TWSCtgt3`7%.YT7K:Lu^S>3AN!MI[\dNHQ3c:,NZO?c)3`*B&M
+$j!XG+[_eDP$USmNWGoJ0d,le!YkluNWoP;Rt;n\_K[dh=Xet9,;PFV?sP4S)_']M
+0f#o$JeKYR*<h'/.F7nqclFV,W@7qC/5CF>:g#@?\j[7^/2EtPd`Nr#g*6+<-M$1G
+;TUM2r@1^T/i'Ls'!j*/jXUu>/eZnm')O6nk:j3p/#4.0o,BD^q&PP:Yf`UeZQh/]
+o/#t)1%R=Vd\'^%aQ$0/j0EKo5X5OkSDE73,bq%^A>0E]`nh1@jGn]p@]M;:)XcWA
+0@J:sdtog*'0-_%1ag)s'3No3ehJsii=27U'7/N;Xu$fDoi&=U04a`s"YT2K4>PYK
+&c"HTBf3't2A9WSYZX$sWb=0d1U3?'J3c0BIm3GD'f5RU':S0LTHduY3fXj,oA_>s
+ffkUR5pT;a''V\\P:>!+3KhoX1Xt'q=s3GEfroqkXaqhiCoig:/`T)N.d/7C^Ho4q
+75Fs!1g*51d5?#"+gPcR.Q]P+&N<GE6h8hU`=kY'01=<=1_`n^Jdt].K.BjE7.c%!
+<%d*'N;pcO8L.S"DK].3FZ4CS6o&F*ZEjP\LJ--,7<HR)'U^;dP>%46j-6A;&niGk
+'%GEX6ndgR[(tL=#u9!l8F?]Q'U;,ZpIXsUk&d@fYJC.3hVg-X:6Le<;\(VTnhE!D
+:QOC2Pg;3%01+1pl*FSdD?h#$(?_h?hR)S%oT`*,oi1RC;Uni;eBn)fThogZ:ss2X
+&=DE1=]);YfMtdH:'Xk.=<R(.7MRXR<J+4mBhbuF/aaB?eT4]-91Qi\:DARfPTV+A
+XsFch>?#01[?jq2hQ<"O99Tf]'[\G[(e)mY=OQRdF!j(M,<k_j8TODZQ+&<o+'oT-
+1=H>4;Sc]r.pj%Y58,=bJcY~>
endstream
endobj
179 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F12 34 0 R
>>
/XObject <<
/Im23 171 0 R
/Im24 173 0 R
/Im25 174 0 R
/Im26 175 0 R
/Im27 176 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS5 43 0 R
/CS11 172 0 R
>>
>>
endobj
172 0 obj
[/Indexed /DeviceRGB 255 180 0 R]
endobj
180 0 obj
<<
/Filter /ASCII85Decode
/Length 977
>>
stream
+s8W-!s31NCRK*;!s8OnTrrE)Cs8U<es3-o2b\$n!1]PZ!s-`oeREY]!RK&[es-Y\C
R/m8!s8Q]Ts(7]!AnM'T1]M%es"j]T1X,kTRK#'Ts"cJ21B@FTs8N)CrrAJe!+u62
1]IFTbl@^es3/^eREY\Cbl9KCrrC9es3/^2bflL!b\#)C1X+&CbaJLTREWmCREV(2
baC92R/kHCs3,*!b\!9eAnK8!1X'G2bVT:C1X+'!RERI!bVM'!1B>W!s3(JebQ+'T
!+sFT1X#h!RK*;Ts3-o2R@4(eRK#(2rrAJ2s-_*TREV(eb\!9e1RZGeR@4)CREV(e
R@0ITR@,k!R/iXes-[KCR:_kTAnIHC1RVhTR5=l21X)7CR@,jCR56Xe1B<gCs-Wl2
R/iYC!+qW!1RS4CB)hmCs3,*TR:cJ2B)aZ!rr?ZTs(9L!B$?ZTb[tJ21M4i2Asr[2
RET92R:_k!AskGeR/gi2s(5leAnIHCAnGXe1M15!Ai'I!1X'GeR:\6eAhu5T1B;"e
s(28TAcS62!+ogC1M-Ue1]RJ2s3*;!R5=kT1]K6err=k!s"hmC1X)7Cb[rZT1Gd5T
1R\8!RERITR5:7C1RU$TR/f$Ts"e921M3%2AnEi21G`VC1Gf%e1X%X2R56X21G^gC
1B932s"aZ!1B<h!!+n"e1G]"2!<<'!s3(KCR/m8!!<4hTrr<&CrrC9e!6gi2b[pk!
1B>W!!1EieREPZ!R/iXe!1>VCR/d5!rr?ZT!+qW!AnD$T1B;"e!&OWT1X#hTR/f$T
!&HD21B7CTrr<&C!!&De!+l321[P/Bh#IGd!!'#!!/COSG5qVB!!#Ce!$M=B&HDe2
m/R.B!!'S1!3-#!LB%<u!!#su!(6ee+TMKS!!!#d!!(gT!4i.1WW3$S!!%3C!)rpu
6i[31!!!VumHr`ch7C2/WiE(SLPL(tG>qO@6psEd+X%F0&HDe2~>
endstream
endobj
182 0 obj
<<
/Length 950
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVo^gJc3%*!l"\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="5toF=17=*>;[LNC<&FbHUHt!OE>aao7cQdRejCZ3&LSkl
+]^UMq1)`oBo9&/LD`=-o7e=S?Ou+*+U;L\6Ap?-LgRs48Ua?leK?;+eEJWJ?30"Fl
+pk#<+[O<8c`?QOVT[n!>MFJgf6/:+(1)\?Co:aB+>q-JjGXtdh-\@-8"sWB1(iCrG
+NT?>&\A2Y\Xoi\*6U@SaE]9OaL7/*pN$'hl:3lpA]\FVkk-DE_=FeJ(3LJ)]P8@'7
+Ag'sp7MB\o5XZCo#Zak1\EG(3R03YfH)%P;"9LY?))HoTa?5/"ZT&^'%6IIXKrpgA
+XWd*?*\IY6pnfm-USug!\SeaR1B[cHkV.ta!'hgE"*=)[`IiP/T-sdt-I*%93bf@`
+XQ$suXD94L-B7HgfFSFIk^k.>JOi$UNc&7N+iFre`"iM"].49o8K8`#$@u*"r.G0&
+l7ia.0[T)J_kblgW=.E,^EJ0D>`f4A6n5;nie!-!"Ts"h1:.[WCDd6gE6<h=+j*8$
+b+f6]-b<fPFTBbSj,uA)!ZS3s%&u!n)heUs#;<Ju6Ws];Tl=PALF]C3'Eu\,=rFbW
+Y[AD/6#)kH:Otli7D&(Lda,['qnhl`&IYd1:!S"<,)ife`qm7\=NojFc?$0&%&8@"
+qMd=:BV<B(5g9L+JWNd-Z2mTJ&.M!RR/>D>Hm0@nD@fW)O!AV`1cYYZ1sQUTHUdjc
+UQe&5g2]#>r%&3gaKl@dKaE=SY!iOTas1lO/5&8s\M#fL;@>M8@?RS32`6lu-!`,o
+j>RK&4V0"N%^=+;N,:IO<6g#1ll"Dgh"I=*Q*`<HL*<i9IG_,NXN^r8blTde3fFn8
+%M+MEW<U^W@N:.:[88'?BF"~>
endstream
endobj
183 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F10 22 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
186 0 obj
<<
/Length 63007
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f.++RuF4S0bhKFS/i*;!D-,<1DYtiK&NeK3`I:tL4^s-*/ao\_obAd
+C`J]a2*qENGXOZ_+>&pgk"'09dNAb5@Y5iF\8WRONCK$)Xk)oV#*e2q3%`u#$\mKu
+,9+>=2E&0;VULCOnpNbYd&<1B+W,'*`!g&K\2_JYOW+dN(NQ=!:f'3CNX#*CQE-S)
+_P*)S>WcON(lP`\@Dl\s2p"G0LN$sD:dd(/bpILNJEUZ%L^T?]Z*<G'3D7T9o8nSR
+3u!X.U4Y.q=uH!HrBd-,U0mQcOA;Z?8^kaCKE>iD1(9pc;D*iY;``7/mFt*m1e9u/
+]8"ID,1a&0aP8_7%Zoi-TWQC(XK8)tIc._EU6aiF:2mZ5]rtAe-k8Tmau57^5f4*9
+O"tbJ7RJkg1qV'6KJ8D'>^I;N03j/EL+ccP43@SS:nN]0>^mU4dQ#6(b(t/B3=LN'
+5Sm-+4;*C'!H;GYKrtdnW4Bb2I*0R7@kOFQ@cQ*$Mh+RP"X($ZFG@WqP=l48!O,rN
+_X2E;3K.I0dPq_h8DZ9n#W"a%`/'pYi<01[Etu4s_ji1c"&$QnNPcbm9nX'&V!98o
+]<XCcZ+P,ue\MBM1-87lME))C5hBJ"DX5%+KF]$F-:fe2lM1Xf_s@q=:Xf+=%T!<5
+#)[t1RM8"`+P7K7N*oL`4#GUC!"K>1_D\_R"0=GmeSSYqemifKEM08#)MZZGW\BPb
+$*_YbZ]P\\O>oP4M2!K'7!i=n<NDiN`jR#QH]A29dPhU!(rG`p"*i(>].L\T*!O0G
+EZ(Q,Lg<$<cf!+JN$D^q3KGDS^,Ff(_m>BP\2=c-L-_JM`?A0SD_9*4`:T\[PkGUI
+4\/52N._9MhDUA%*MW*X%jSC^%YG1G3JGuM%+*BM72?ar/(7Q8h;M'J'KS(r;6Ii;
+!^ql(c36`WUOdMi$siVu7Q6@?1UE:(@q55r]%ep]!P9Si=tu!U/<CDO>$GI,=I#Pu
+!&gUM%@$+ELlJ;e!L4ee#.gZMk@C?4kUH`ZaCW5%d/4JBCXbC#)MTE\0lr!M[.9iK
++`547k5fXQ)GUs3X)j4E&D<o;K*X`q\l?oFm7KJ`;_*2Yh`N[MRa3If<T4)jToIDR
+e&E=/?uJgah35.2MB*TPBRr^s"u:p@ZPIQ=4XjJKXH\mV(=Dl%l]H5iKPDLOQu4ga
+e_N0+*9,`$&oWK[S%&HM(uX$p%;9T,*jG)/_]WT!!Ot0QjOV8:3P7Zg2&$)lE19QV
+Op.hl(]trlEn<@R=<Yf13MP;%ek*8m-WMjsA&tt+ZBYkO[:23O5S/dnC0p7s&-PGS
+&=3_pJdnY)#4Tu^A$@']n4k&05k<io>6BOoPaTLCS:#mL;[jnW3ekXTVN.]04O(f#
+\c@ntK6"m:14DqL7%=S0\b01Io`(R#8C3Ri;[=O(5_9!9FJ,j4ATCm-!l.\Cd]r?f
+X,]XqGs_DGX6N^*@:D_sE`(I<&l@rANYog>F-3+E#)PqR##k<>$%/1OY>uRbT]n*U
+Z*b'>U-T#5[$6Fb+:)^u1I7[G%GW/42UII0-u`]d?19[sc&A,Y_Q6#?M2<DJ$(;ZQ
+RR>s43&i5?)M$2;#Qo'`,cO1lK7XRB!JiQ8'S,7A;A^*]d9Qq\Hl=_YE,ktpas:D[
+#)6^56;$2I/*XDZQ87B:b^o&TCg<%N#K9JO\2>^cJA>+kL;IZl7:u3FQIQ>0=)+9m
+V5<%J:^W9nl;^!H[&ag<Ou63R_pb]pK!X!K"@L>n:9;ur]N1Jf>jE+SV1@:#<SFEZ
+.rAdp2"n''>)c@Z20gg>HD/m3m:%SWMQE*&_c8b4;QHXGW:i-e;S+ksC;#D'k9?YR
+lQKAI%Ap@p'"qGZ>%B/*JfmO+O[PI%'.YIhUe"mKP$"Xk9K=s6$,kS`Ek2]YD32,k
+*ou"#QW%cjY-j%bk0uJ$>DsJ:L'id:>FTe+c;h^c(DMGQ]06\l?08Ng50)Bh*I=hn
+f.[u]J]+H'M1NbZ=grdJ!uo?gX'M*p#5q(tlSDQI4d</&)VEl8m"o&JaI_KUf3U6n
+EN4"W3&T.4i*&SYYhb26=DG;&]K_3i`O!DI(`X?<5kV8=DE\3MRo@N1L27&6V-&&D
+fGkK%nL\plF^"V!lY]$$AM'ggo,7[grIs\lAB24Fo40t3>cVI9ZIfC4eXPB+Ch99G
+<GLdPXLWsW=X,3%K*9X"$tu]UDRpPQ[@-sU?0mQE\J_!cTb(fG09nCFTYuksCX\t-
+\h'hl,,?-XfpadXJ^'IH5\U)oS?s%SY^jUlV&H>21[V+oAM1r8b0-Qf/qqgnpJi2c
+!(/IAaJ9N-U7,hr89=2]eClQQ!t@i#Bcb":g2=Rh#HNX$5.*#O&h@VNQ\k@C\uf-h
+=_k\U[:pD[cu3$cm%(Uc2K"H+pleV0N;h'\/sP02"$aJ9[2#Y9FKj.sE,O[I]f'Kg
+f9s[-BKD96Frln)g;9sCh<1`H2,-56:`7uI']1jpO4g@*Id[\0_"YPqU`7X&U7r=<
+\ESA">U,#BHO7T8*@'N(A/Wek>@G'Z<9<d3R+P!>`46A"j:mZ;=J06F\Gn+VRI6fN
+g8U\>V:S.?5FQR%H-'_!0'XFcSnDqp8GXK8kggECFfpup[Z7!C>@1e34_(^B%^7U7
+@#i`CHeU+_Dju/:C3D2(fmC8Vm3Qpmoo3\C2%b0&4pPfrbj!pTIr"Qi/&aLUYM-GI
+1[WqX):[NZf/<Son=D#1GZLU%4F&`O7;onc&snk'LI_"32"_I6[t+EQ>d7'0UQO<)
+a$HnN\G3\kkl2Y]r6C^T4i3rj:HP/]a1B2.O#Ul[\asue,LE$8)$=V;odi&QkktbO
+o]`j<T!#Qu>98lT5G.>McdqCb-DLIA\b?rM1=a?fq"&>J`O`45rEk$ICCfo'9@EgB
+GlD?'nD^=P.=gPJK!@mtkE$Id0E.fOqCAcg78:GqY%/[?RNl\f!0B2$m3Eoo<<Oce
+U_"kscWm(-%0Q#u"3buo@NP\gGV4ss]ac\"YYrh"@0XM]"qXi>n7)N]B'G<CX[8oV
+ao93IOS-VfqN-jiDZ5O?N<ugIgi/GaXha`tDVL0?ZnS)Dn4sF2Pm)-.r=4;R^gcTU
+cIVEVUX,b$&B*>-:3Xu_mB,g\nB@ZPD[fP8Y`1cM:u%iVTam01pJ#&\KN',_MYk]M
+l)km0LogjLPn8sk$dE3,O/UCmWoadY%8?c`:8[p.Cshbb'PeEq&K9bk1c+QX'<=G)
+%=TsL#o3t6dSXE)/L;&u<9143Ue[5[`)Pknm-!nJ;=S!1Z#(<#4RnP]I#q+LDn`I!
+U?dnm\rh[90k2*KR-0JZ78A*f$`NA''Y06b)PCj2ir6IU^;J-eV1tf?cq=Y(@3"gJ
+)H"l`&K%cKguj`Mqm#qjdG5h(dcsW7+#"htVJRID(uhDG#I53.c\!9V>^F_S&Wqf-
+OWP`A:Eb[&'CTPpc2/\^^D^!%*t^dac>=Z,pD>YM)j!iAC^2&%G9]j_*A=H:&d9WO
+>5qJD-1X+1nhDA.&HVBIgFt')LEchO'*k^(+fXo3CfJL=Wj%)>3?UR4W2<;1Wl^og
+7ps=F,R=MQZoeNe$%Un`joT!!%](d]UZu*]$=osTDNI+&/ZY\Pdd4Y^o.@%oa$TLT
+CiZ^7s"<U&0QQfco(^$d)_c(F]*dLLXsYnZ$3h.DaHIa_/@)Ak(s@jK0[.6Uo/t?O
+!A?5n1@*6HZP,,N-J@]61i;I#P4:EqSM,%pX_X7[P=7=W@'6hT[HlJZMmPFCb)._D
+.a*36bCI^8Lrp@qr[X6mPFXUQ&NVF%,NYAuCTTP^N4Wlt@<7=JJ>g+Rs"l1m\T>j<
+,69VO$T&MF\kN8d$s'';-FZ>faij]A/-Rto_(i:E:%LA$;qjNh"$:RWB+54O7ju7&
+f.W(Ra%fhGCf*Eu>f7&'1NXPOZD0L=b1Ft8`XBT%9U<=XR6L3dYHoAXdj7=Yq`kfE
+a4&tfoF.[7QFmWpan-B;Zn"Bu="t/R0iL"gZZS+2E6M5s4gT>qL7pY%MTmeF,E\4&
+PT9*ZhT*Jm;@9ct1T`+k[*src#'%<fXFfE7%d#;Q9@U'H'6tV`[0Dffp[EN',u!Gf
+1JG(![EH0CeEX)0h_\_X.<1nEb5g\STeC2'[EinT!gc\]:p6##9JBTKPfj(W[.%"r
+;GM'O9ICeP*8GGJ;DYPHE9s1h56=aW#Edn0_i"FmW/:0UrK?JHPk=`%s%h,83m(eD
+'j"6bD'G6P=&+#79`H!-q*E3q"#X.RnMaM!OU&+Hcg"XIFbpf!lV*sk8M59f26+(0
+[kS:q-Zt7]17q75E]>oK<Q8l\N_`\Ko&WYK2iUle[&D0rCL,+$#I#:,FiNNCL91mn
+iKa-l"]&?"=Y@,b9m)nZU8M1;p]iLT@9*D-nM*)L*DLAPB$l!Me8k'P0jI_EB,06*
+Atr"lEnQ^n8@"'1Fi7mX%:.Oafp.(F:mFO(]aPXp>/I0qp)(3TIq2/RhNIeoYd7Xo
+D#1QqB$\@JCm/LTIgT`@1SA-eYb<gqT[q\U`PWQ`0k4tlSQu\e13U2><^ccD+_U12
+%4ll[B),/@a))2hg;<QWC-tKDQ#8LN?E(%iQL/#NMf&r#4dP7t1lH8$!FE.20LLBC
+2B=r>Gs/U,=3<f=bso+gQE'BFfJH;<9g:Db,>.W7F)<i12UL)78hY'D99u*I<4>q\
+pN6p'pK'_!Q@F"as$*tq(DA0>VJQU*?YT.RFLIZXf4rfZDR8A`]n5t.<<kBu'6uD2
+;t@D9f8/LsNn!dC7?%t,[j]JOh_K8WB$Uj2FtH3?=^X.YH_>Da_Y8H/olrrC?h6N+
+bnG8BMcg7$@!=<0'sbZbfj&VLILR68([f\X!Ig%0E6:T)\,+C;&S]k\L:7l'm43_3
+.<>1]Jp,F:pPEt$0n1!*6^=3n/L,lB)f9gXhtOm<^i=I@.aR_X5I_#B=A%#.>gsL@
+J$:#L[[h!3eM;Al<d0OXPuB?ZJBg"7E7fK]e(KQFa)uW<L<S\,=%Ru[m7M.;#`@I_
+$C32/\=W?kHPJ$NO<md`*:#'BER`lFXgmFl:t/Ut06$Sb1O4uJ:K%@R?'N6V3:0n8
++YO9Si3r:(m:>DP_TQgG?8eJAQ6g8U(QHePLpc$f<bZ7`db0q+P&*>KAo2E%'4@-h
+@FamSY`iNsm:*.eCt4@%\P6cSJiEKID6F=qYGHZu$'c=fB%MYE3EpVa7.o0j=HAko
+p)e.Ss*hF';[#s;eh_A)j&pGe@TA`H<fn8$7sBrLR<KrYQ2=3t?ZYj\.#ipl2^L*n
+cZ3.fA8Qsb:A!$2CRfLU?tO82[W@^/nRq[2Qkf.H=+t*diL%k/PBkWL[H!kZ@8o8>
+dCDe(q;5dcQY9GGgXgLm2L*aG05(e61>3gCFj4PL&R[MZTa`#Tm[]`2CN<:mU?rnb
+p0j9@'nBI*UNs,>9cI[?4^GDIUc6D0's4&#Mh<oVJEN2c3b+W42kAQYIhiM;3#?">
+4fL=?=4b,kg7<gR!N?P0=IPSV\YFD<*FQ#L2%!oV)$\oC_-C&]?T'3S&S[D1/X5V^
+U=Mhe3HF$MeBPM:Q?YcuQ\hNLhgZP@d(!#9F'5^>`I#"n?/#Zsp^aT.!J+Gi?l36\
+p`ZmO.AiF)c8F?`(^Z^7$(SU@Oji!gR2rUN+_MVuP8VTjq9X-+s.+CqW0ho>G"&fa
+]8?@dMH3ilpoTa>.;uSOUad[e]"=kU+Q'Zo[sD,cg.-W.(T/UXA5":LQBofVmBX5^
+C.lm?bU'\:U9")Q\sQ4'b9<+>Z_,qUcPsK5p`XYoH+Z5/XaA-k8aj=hf=UoD]_fXL
+GEZqRnTgV;L0MJc<XHB"o5HecK'TJF)uhiR?UI;%`R:d+2P)_r_IAC'.H?d!!2MY%
+2J$LQ$38q2?sbHu\A.#9,dJDrN819S%k^3&/!:o,P<flR%m;Xi1.(SpFET>KF*K3<
+a)b%$d5<X`I6^o<`S>5sgkWp+(W\C4`pM#.>]eqHNWHe@`dF,F$X(IHXi1-k`tX*J
+;bP=JF3IS+0YCu4*5t'gY<C@B6SjE$Zb"#*B/o_l<@`_G_eqI96Int-Ke3X@o=u]J
+Q,;O[3JY_>grhMkjii,hc!:k)PVBhQNbVZ+@=04%>UISB'J:eAelr+"bAoJ)C""2:
+^\k+=C?sC@F4FOGeW9pT]\J?T9/rIo6i?7>]f48(6obcuTs#G=]gS!`KEdX\ad5L3
+e,HB9F+F1Xb+-/f'F32>mOE#F5oje)o9<,.MP8_D0AVba/.^EN:V_@Ag`7V!4_<?6
+WBQtY07C:_*PDg3!SgX-eN@j.]j]>g2;Lr5h1L45jAiLNR-%U+g!Q:pS<Mkf>sOt/
+hG>dRh)!MqNPt1]1L6.&]p/o<1!.T<1>E\jn=DtAP"jK=dlm`XglBH>'1G$effhD]
+?!OYj<CiY/b<4+e5T6=Y\?;+.L8l_tl8$U.8MP/od*i=OD%che/UI>GWH\.l:fUd"
+Ragg`cq71!>YO8R.l7u3m2%5;]?r<=OeC<ckcIoL50X"8)&bK&1_HX-="3P2,OA0j
+R\%6iT'bndnF(KbfJh1N55jn'NIqlJmTH7O1Z`]jT[XFXp$\_uUYs_kK(\MLM15PI
+*t%\u$1M:(nZR^fo*Y9=V#:V/QC!U%0`CS";tTSXmtDbko*S@AflE]r&)S,oh[=2N
+?1[N_n[//h;pA+?Ds:V_&'Y0PY7GM,"nh7qGi+l\01)MGH$)G-f'Vl$9lAjg>:>f^
+q/Vi!^M3TEeM2./_d?mh/4'!%d><@R&)Xa&C-hguVtr(Gfs<sE9tU+ZPsV+0rI:=A
+JcHo3%#+iBW.<M0)@_F_+cs\T%5U>*_g$.E5])Afi6ce./ia/fN2*VE=P>h=(s-6>
+BQUBf-6#URE>Y2sE=RW@V\5,V`[Eg=%4./DoTFbJLJfAe=S*qX2]+oYe&mpO>pcVn
+Vt<io$FrR#fAY:1CutsfW5KfuC:(hu(9LgaEf*S/F[`99DY6)mg(ZI`6`2eVA.EZa
+_i1BGn\*:\G/mfB2lrju-%V!a#'Du2c;U:SBIe_)eh7u"\EWLM!MJ9gS;:1HgFRO"
+4*o=B[+B]XbBp"8BW;'dSPC;*,N*7!rZ2S`0'?jiZiZg'6o0d%L:S5@CV/8s<jrkU
+-P+JGkNdm%+a:@NJ]VOMT*S5"?P^pSC=qFu*</)ne)hO\Dj-do\8M1!f<#(BG/10h
+)XdtsCX`FAX&%4J]>J;tM[$afb,Yfd:)_@RYT_2E[ma"!0\<fcj!:`nY^5sI4=kRo
+XMKJ)r#)`;<.<3!1)m8002[gD)F[C@Ri',(E,`5iEE[W;1bi0./A!U#\Kitj9TLHu
+1&H_N-K2iH)?u/mL;V9Wr7<MKZL#t#9!\AM.a)i'2B"Jo)g=37''0EY:<Yi&76#/n
+\Md2[!-$:GBH,qL;NWfj,XjQ5@a7mQ_eW)lPp?f4d18rLJP\/1!5[)t'\cJT;f"ZA
+f$*4B;qI:O;,PlJ>h#2HOG,Icf[HCT'NZ_XG;E9=c#Zq;'3"OWe5,bD/mE>F\RnUf
+/Xp9NX&Oh\2>%Y6F\A'3TH%1b[BXYkG/S_b-rdR-9]&j?Rf!C&>h^dMEKFm!;`Ho6
+IbF<5qc;\7`R?Z;6-B*Dc1j]EN2-0]T1@hjIMm]:\L%Q728RGf)UMSQl'CA_Kfb2d
+3'rO]e[Z/JJRbqh=&"FPL+JV$Gfj.d#;]b&mGc>RR?)(T7Y$V4\].cPja$6'"pZ^3
+CAq\l-GbaZG+K;FB,Y*SV:^%!@N*nXbA4WJgSN#q,s#XXYO),ZHY[*EX@\(G_5r"#
+moQY(]B:,fn[Mj!6>.:V]Und5#;;\[S8d7cF/nj0*`W(B\);<,FP-=dL\"a"U!75`
+LFC@nrC2Eki<\S*1$L2RD2ecSYCVa$TrrUolF:J(T)!dcrS(^g[Tjfl?Cj=GAsc)J
+j=ME:ESmd6/i(0Gg)nD#r5arGOa;;nZhL,!#NCHabg%uP#24"coYH%;m6K"&q&YmE
+!6JaT+`21TZ'<m.%u^pF.cL^teY`B(PQ:t!jpXJ?gr<%?2F7t#oTTVLqc7MHIS`u\
+5hK'=>RV[&71f5+VD<!Z@IH7m22o9!8IjWM4bq@kHG`i0!Ps>lL@C?N^Eq29iab$"
+i5#0*#bXLdaY\m:c5cuhr>&j>qMW`iiLSHa"&?HGGOY5A4?.j"*jeOcd%30`(l[q8
+X:(&!/eH%d7f'rY@=cg05JPh]+5om_H:p."aC5q;=_rV?5fC5uW;S""%$H55(%SIe
+(C)(1P(0b3_nN)R.,Z4&J[1jV'$1pl?Tb98/TI)T8$=&3UGS9Tb$7Pp%22$bQ$oY>
+=hBLu0I>5@R*-@1`d*$Z==h@)WVMjh7#a%Y`.`(8Na0f-=Up">c$<39E'#MQcr"W1
+BZnt=2[Fahh0aZme%r^aE+7@1UQM%I[-l5-5<df&'qVN37o0t\-0Ok_Irl:&Ssbtr
+AUB/t5fM!_Am4?YgQ\%H/pu%nK.s7`Q=MgPTVhQR^>p^kU_8-@.lk"-eXAh#X8\<^
+[FG^8Eos66>'A?%WmW6b`Ip'f=i*F5[cE>#TF54Z/ikoYeXZfAb5O`X'\brhU9:G[
+?<>[&G?*l"<)JomRSlb8VU>oPXOBA=SM4\LCBZDoBTA]?e2KDR.G6Kc[2VL6@Z@*&
+I6r'N-df@"PN;[r6Ic^e+Su[PW!/*PFtQG?\eAQ74d*(XZ<c.!1218NMl`3e)(3#f
+VTo@920LIu<sqE[D(3pgQCtV:3riXPZ5#,Lq&(1:"`ELu!sV]NZk_8ABs!(T\A`J]
+glafpY$ifA[lbO#qkYq5PodL/p?8K[@p6%[/\<mWm+Ud;G:U)S\+aq(?-31o,lQD\
+pL`\>\G8uSc"+BTY3hc>kB!i%!1V1B/me*IJE!g:^p'"*&h&eAa<:W$\(_06dO#r)
+;F(F#["GV;5i9J@AHAK0&-h?@JhQ1.`7QgFig_.jnR?C&(qpEor)f5d-8g+Zd"7eK
+XUt$@4i\+8*(]F9!AVLT`iMr@A$QT+Aq!=Zfd:e$S;!.\b/&h#-Q(rUK.sR/2k*s!
+Qt>rZFi&qD#XM8kaCC59,\=5<j>8=uU8AgR0J3PA8.Yqia.;4P#7?%;#(hB!LVkNW
+%KW4VLG7-r_#R@AU!,J#nD##$-n,LSW!7o[e3l*t"=:k.AM4T[$X-@L_rO?'B!=O@
+o`?Ji84-IKidQHd"rU.?5`H`cGGq3t5hDI@AS\aGXVqd&f)"!(!8W5mp/GTaj\Jrj
+Xe2\acHb)4QWreCQa:hS^EP_b-L<m`'Tk;rfGbWHm:hQk2\+?l40Xb4?/JF8M=K@d
+K6Iltnk\!MrRguLF(<J:^3((;3r,[2k0oE4*Z"TI=j5n-%.$8GKl,.]oFsgo0rBc8
+D'Hn0dfY>uE-);+j#g+&kV-SgFP^a[q-/>eL6&UI[l)uhdk33R,JnQk%*cadi0ZTX
+<;;dqiu.GSn]`fkGk`C2I"f9)68?Tgh^I_STGd=f3O:YFqJ;W7G46NifD!$hfN]XX
+F8hlfA2U.8gdaD<Ng%JoB--HR7t!GdWPge].cWeCY&b'1I<CcZhL!;KoM64U2TLR8
+]s!.aSqEMr?XW*Rc\mpGZ3t<D0^sFRQWc12(5O,noT<4YF@A(O[_DV2Yig^PcJ3G&
+]qZbk8/-@9oB:AQ^Y?II-N"=\WPP4FhHpfAq_$QkA2Sc_59J\VX%1<\gDTb=lY_#e
+Kt%"X^bC7VjSeJ>jLqH#c-J1C(d=#R]a%9t]5LsNm<ed+(SgN6Ghqg_q:W8.YIE96
+2A=!-j8b4P$T:SM!<Wfco+3Vi&jCA,[[V9G"'q]B$9n;R58/DlF::(UDndN"0%:Ci
+!l.(U?&3`c^tX;DHk<d&)*b0@6"#X;4(\o&&iU0Q_5ca]PSM$@keFJ@NXR!^R2*Qm
+j2"\;\)ZMbF'XkY,f,[V&1f0FOL%7u;*q&q&_&>I`$YtX/%#d._K6j9<%1-:$Gr#N
+_^lWk1bgms7)?ci'9jN;`"te&LdRi466T">U_piA:rB(Z6WmS[Ub0M)0#N&i`#LJK
+6K!f=4c$I+6R4(_$o>?VS&:1D_e_f24A<;E/=NqA)2oTJ,U,KQ;FC%m)MD!V'M9;i
+;FE?C6pRB_<*)ItDOddV55E@?"A-Sf90G#u`=u%Tl1r9fi^)8l7Q`e#E6,rH24miY
+`CjSaUh%G[n"=c5`JeV%R$kqBD$c^`LobO7Ue&L=YK%l,M^2iN<([1u@QcEX66NtX
+fZ2$*ILLTTN"gWI@)5@_Bt"?e_5(\&KRO>;L<$B4[a=e>XBN@5)o]I7`-aGK"FW`2
+KuO3t!PETsI!@N2,"1rW_:^oe+Y#h#3_9_K`bA.=%"Z?2;91J"aW-!m"-Q5<LGmL!
+8;rVNS4YXaOiY*RXW3;/_1>,:BY&_SMO<Ka/6Td$4#UUY7ViRWJ;;36WQGTf_),c?
+9M[rj*PmD]6%gf*]W/ftY"HnR8gG*Aj)$A1,E%4*`ahQUHr!)!,K@?46Gt+jUN!;F
+,K[i2&nEPo4M+6k1rqC%6HhD]X?"::3l1DD312$!QoR#!5deL49S$bBP\69!Tu'B8
+\f4mK'[/JoF,iAZ5a44L;rtL+SiAhsa;iehgK_3-f0be'c(m;:1u(gddR:`::%I5[
+%,JjDd)5d&:,,Gf6Z!O]i&rnj:4lpl9\@>k,Yk[R)!pV"Upu]F<CUNZ74doM'N:9l
+?-aM:S(uc-%/%$GS&cP<c"_-Qr:n7L5s0dK7<jC&`'[>DAfIfD`Pb2@r)umD>Y(Cb
+Njt_,;jp7F"c<.4)W_7A8G(8e>Yqe6:_@cq]28l>@)GtTcI=c"'7<8,$p@So`^*8*
+h%RP.F\_K(%#jWmV&?\[)UV[ZLn,JB&;%SMo0Q.n8ebs_`>6IA)'@BOa&?<F%4/7'
+-F`(\)5S@nWCBb_.oNbub.0HiN'SO!Ag3usbZ-(.gqq*30b`@qdWpr&V(if8aO;S&
+%#cjD`@03/1"2[@e%uYoGs0TN:oeDA`-jnc.*0>b$rLk-Otatnl\n`$7ZqUX;LM)n
+E:";Z.R&cL;/Jd]^rXA4_:"<=Q`X%]I8S$f-;UF]e=@7Pq&YK*lmu[p<Inc4I4*RA
+<=[G=a69MQbBugF=NBd<_Sgh&'[]Flm8c)N2&,mf4=iAFHW(X)a5&IHKk\t^>=\2M
+<l@*3i4ob/Otkn^<V:<0&r&pBnA:`/_pg-U`?nHHJO*,f[KM.ZI2^\\,Z*TK%adQN
+ATpZS/5lCu_,0&J5hId8JleH\=-[\p/TB/"L9bRAWUthq4ZCG6LsqIZfH!E5eVM\m
+L(%XFa@1qeb(Gd)+UhqG9.:S.9nSRFPh7!OaG#2qFd^mA;94HDfu8cOUjfeYgt$nG
+eYS\=i9+8O=A''r=ig`SrL6nPBgd?Ra2P".`(7&%K!c&`fOCe@.Ai&8Y"J&2gB"#%
+rM1=-"j!YEfAePe*I#?c#KOb(Y:Y%6NOddYK@69=X=45'ID*H:JD9aT>OgS)dgW;]
+BA8]365lT>%E6hUNSHD3gT=,hlK18nQcRo`-k1IWZADTScIs;aaOSSJ:rYgY&6=4u
+bl!Q-2$dJtj0c7V-&'WMD#+bh*[YZ.h7MXm[GBUqZ<d(^dB2?&`SE</qR6pn;WZi?
+e=fGHrjHCiURQ^(+uS4N\A%@q6cJEKNF#q.D\C57?FAT-.jh_^RboV(YT<9lJ/D9,
+nD>r54iR-FV>+CsO5ELRbn^*al[RgO("f%??dth,`RdK*(#D[fh<XR'b@Fur!)VW8
+?PVL#-1tRc$B4A$@$>4EXp8@P4N]8`NWh8tgV)'b&rm,X@7,h+ee&pERc/CUiECA1
+MkV5P(:T^ahP:%?"m"Y(qRWZ:i:FY4e'te&*o5:g]m_!23P!9b-!cNW>4G<r4l51Q
+-fT"%i`6LICnjS)-!jn1i?g294tbep0k/%(8_*mQX&<D"H*ns`$Sp,[FI4t-P$i6`
+]7pQ#D4[jJET<jhj9@\P:-lu#6/UNbhtB@lmQo\66/EYPA.s%>baRUI8[Y31i?gfp
+L#$;%'kHEj8VTpgN`!6,MWFJ'?[baWQ;]`mMnG'7jaKS+S=G_lMI*/af7]US5"+LY
+7:(k(fVRD9'l.C+8n+B$h<nb/#%HF1AP+R`7t(\TG%e?IFCjTMiBCsa<bZ+\Bk8o7
+B!YZ>%Tpi\4Q[l6`sq;BPrN)FG+q`U\(5fcc?\D%2<Q6G^b$hRY'o4$IGKp3igtSS
+mXRn^IGQ#sBKL:T(3;VVia(,[=:'5b9fZm^CgeQf@3b\KAa$.MTA_tp`QdRZe=sWB
+eR"pU:hA_P;9hb3SAh?13gIi>)&:N3h$sl%hPQh-*gSo`;X&q&Bk+@fW!:%)_SB9D
+^hXLd)ceb2V?eHF:;f$4PX`fk,!c>Pg]"9J3pFr^8kT#a8-BgR,f%7?S\]]\_>LT3
+CLBe_B%Ou$_IOn8oC'l:\4asaZT*asCs,/HbdYQ&\]cA=N5&*QA4ufk6<pSR#/30:
+W,,/f<CGU-[,SO]1J[!W_?S+L<8l&#mS0j`c5al">jlMLnAMtPm2YrIMu)f\fu1Nh
+D&hA"^;JGLAMs,3lmt.l'6&b4,djmnd,*YrV%.AWr_AFUc:nDdN<quM+?Y>2_c6c`
+Y2hI):@;Z`e_s?N7aY"JmnfNNd7!@kAIS"["&[iNQ#pE^4C-'/'$irAd4LYQ>o$6=
+qX4hY;3A(\$Y3&h)XjdK:^&Gsmf(]f!7EG!6oP"^<Ij?Gm26?8E/+BO*PCm,/C8Na
+NAgs[2(iV1*m\[mdui*\NAR2&m;Y!Nkj8l(<:k/Ep=0%0k\Wt2oHR<Dm8V=p:^7pF
+jWE$.*mu'?=[a-*XY<cj:<$:*[R'5>eOikCRW;t6E]&+47<R.'+B'"R=%-%gk!)=o
+_9t2co"?A>V']3UKiPl>eP1`TQ@;gbF]-0(kDa"m>_H/F..]l,o<Wr<SRKtN1=1br
+f%24s'3drP4,hI/<^d[D"EdY>$-)XYnm+LW[6A[Q%S$,1gF#\D'sl?o8l7H,;FNn(
+$usq?-/,g6`sD'O[7ZDn7+[JtgO2(o`IlW5FkJ$_F\Piig=+R-Uf6/WnfM2B"\B7W
+Qh@Ola&F4abu!%5;aN8!7oSX)?UX%IU>M;QfS_N6#AE^IAlkMh/e!:)'kGrZd8e'A
+emg=V*G>+XCj0Ho$GE1c2-Q(nZ:C)Ba:,SpD.6TfHUG[SpEbI]&B8)$(=mp3gU3>J
+3sYOVJ&i$]0(4V4<PQSlnG'D!gc#tgh:u,@$nK)M?,`%Qlf$WKOBfhf@ARntNH+`q
+R^MF,a:FZl*#_GIMqg37f7i!NdUPI(@sRas8+3+427.Y<H$PBa_QmK<a/..jK0GQP
+q6oocl>bX6?[B)WqJFJ]?`RL'XkgsOqXl\tL%SQWY?WB2%.B?G[Hg?$/[.'\qh<)J
+NKIRKRTS,1>fDn6Fb9MPq0UBX=s(ILf=k9E^05HhH7ug9=*].HC;TrQ8&r^IHViX;
+H/CQ\$tFWl7AJ`TH[Oq_^b-,KT?^PgdJG<=fXK8\s3t'CdIo/^iD8(ac'^^a*CoSQ
+fu&oB"fsfB5?h_Er!&5A'm]d(NIE0`IO1lj-*#sCH%%-=rbZ"k-$t*%l8Lm[AW2M,
+"c*&iJE59@=O*0e<Ot>KZ8iH_%Of=J/t1>bp?93*Ia=1,Kunegb^Y>:J$8VGc(Y0Y
+&-r<D)DW7l"iDL^J7LVWMkMK=*#9%kKoH3H-mT]C$60JJ_?bg,-QF#Ci\@C)i*d^`
+']ef#N1*0aR)hbWR/ALD+Ge;ePBg^4'gRPtk>W*Op.%03:a:$Aj:ZH.S'u+nn\#.'
+97k]pK5/ptZ!OF>/2__n-8Au'_e?Hi/WtT)\(`$g>@!s0/#(4e<&os#E]9H&j]FOu
+LCY(<:T?1K<]88k^/$17HDKs`LSp-)f)4YaF#),'C`3UdFDmu)is)on.*-3_el'N=
+m!cDg(<u9U=&$uonV5p1L-#knbA0llj0;iof+OB,cd+8t#Y'l%3TfAsnNj=](#O]S
+FT(Y]T:b61`$m&N(rL%njUMLs!R-ehAHnF<"*4n2\W'fP!B^g<5m'8%,SYn_cqC7D
+5VAOVn[`TV(C#Vt,V8(<:b/EcV4_RHQ%nKr9SA9i45tpJ@A;![VEp+j(WItQBFmYL
+FC^=70RS![8!1Y?*QP)q@d;%^_s\nK6'KD<,Vk%*)p.KcUk+7l/=_YW8Gob22H$W3
+-co7#ALYa-6mXQBd`PfC`.8%i3_Z<1cRgtnI+fH4iM,0Hat\LC5th<SE0/FE%21lu
+MCOf&bd4BOJ^JI`)^EOD"Yhd[:/sAM7J&`!5fg<#b)?OD72\m!d</;`4S9-bg/a&l
+B/A&E/D"1X;uLo/:N_WM)Fh.[XF]$PWb#[:kd!Mn:h_MV6,L'.@i*kXQ'Y7o(;tfc
+;aI6?E`L]P6$$:O`RMBE(Ca;S8/Bb%6=-!!=aR?\<FH;4'dB@j<d,kmJ]!dRD.tM"
+"lXCSQqNK[X#5VVG;XAh.q[$#bXZPFE;c%X\Q4[g_V::P7:fSH:-B`Xm'pbphC(gR
+3ocp6GDmkO`=J/"F?:+dkOEM'k@doAMQLM(%T:KfERp=J#.3NfID2.^GB2mq7'WJd
++g/EMkYgM`V,S@.*O'8a2Pk]cZUc"L#-okoN,E\@]T@lWc#^)WR%F8TE#[BmZ"_o:
+n%3M!^@bW`D\e&I4^=#@ae9V#"pX>B[i_12gk$-R#%=!8]l[7\Q&G;CHd0^4)AcB,
+DV[NMTh/6j^Y?gKe=0>.SQ/edG1qW'l>I\Rh\YVX9cEB`*c%aRGC7tq4o&<kP@u(I
+Ztn'h53DBPqjN5ImdtU:0Ceu)QbfD"T%p%XjF;pSK=4rRmIbp6J*rHkCk;SJ[mnM5
+n]#;J"o:&F9F[Gc>ChW^58C+6NhD5IJC"c)5r])G+D]k-$2P/u#/k>@i<t60JdRoY
+[R4F:+<q*Hrt%^I$P@@dI?;ka3B.BQ:a@QC%Y,KO1r`'q$kRY:D'G'tB+A=n8TmrT
+#Wksq^.@$IMN:L]_+:gB@&-;@-GC7mctsUCX3HTB`83YeaTWHm"cTXj.R*H7XO@j?
+NfW:+,mYe+<kITI&@MQX3+C&V'J4kJc2Rk]N<*P2d?,!k#<F:JpZ.P`#0^?u_'NqB
+TZL>e;GJ%MjBN*uag..%kp4!b:8"<0gQN3B;^MfApX2kmMFMnp6uun&6&`C<ntF1>
+P#3nTAA_5@DIZ>mM]uXfac/(D7)mif0+c(3P]=dd8iPmKPB\g3.IM+?.=!"Afk=2[
+#'2"[,s#QsP(5g6UJ8iD,H#Q7"q?FkVn(a_'7B[(aOY^'&8sf[/H\L._GZcT%cN5#
+\d!6Z[F!sp=D3r'TPsTB9<'X,id#mG&RpaGAD9Xg3fPfB)McQ500PoS"A0fR3>b0"
+$l7NLT_-d)dg,\BVg92XPM,h3qJK5.<=`Z+$AZ]KKV,0%8-T\fV1Y3*6qNA3W.a4O
+RPJ\u'D%/,2/jP^;j<oQ/QJfMm#MkWUf2&#'F-6m)qNFP=DM><#;g2+-gEcuCU;9h
+Q)^*NOE4-4'gAiq*g>/:#@2+egBQg!5;I!r<[p*U:XpN*1@cY"/;[*-JE!HZ^iNI+
+r<9Oq-I%dZEEk(IT!_E:PM'_QCPb__#3c,Fcms'&$OIRlFo'c[iZ_N_GW;O$&<tXJ
+O@]drb<n2]eNaL[="8(41'OiD&L-Oa:=[64pHY`UCU7h0)+1TNi#CE^=@"BN-ST]<
+T@`CWH^JsD/g[YXO@j;;CjAaiPofp(X7J5_(&u%gg4J6E:dHcTXhf`]MdErC9ohD>
+_M%%qQW*(%E%.Z^EW"E&gd#Ccp*2IpWtQI^_hr>t.B*$=V.+(sL5qh\+IL<'j")!m
+:l.K6kKVSD]IN5=Z[d)g$R7TNl>"[h.m19Hp]Dc%Gu(F659PLTT@<d-ANiU9H$-*P
+*5PFW"[U?K9/&V!8>O_?1/bYS==%L*Z-om#7k&R+0/V<\;>Og%;J.tlGuL:J&qeK/
+Bl)t>]Xp!]EQr1=8L#MMQBL8:d:sZ1V>T=PFOI;?/1'GT[3#a>Y)u.DYq]ttB*jpi
+kD%.80.[Q;Ygr<1>&0[%XG'Wa<XP-u3n5hFXa@9PC8,&c+ca0fCp#ZZ/TcpP75-U-
+knn/heZ:iI0;WX/[DO(uD4u25"LbPd'#duMQ%63+g9XhcXtRsi7W-JDZBm,s>g-'!
+Y*\Og(S_IJN+&-SNUY^^I[,F'$#m*goZ<7/Y[raGB.iR%AsVGS:8D<JnEo#G)04!S
+r%Wc1[KPG7MZRW5Q]5qH3)1<W,i`Z[MlaWHka#E"G4fR2[tmK_*Uc(49c9=>h?*7P
+@od2(SS#O+E6UDl?[K)DV7JZ[dG5fOArWp`^"U+c+,ce*DRn=TLFq"\Hi.UV8Y,P*
+^==En@;(hgWOt]cfXiqPUV44\[J%2t)XLRC:63.JH\Bul,<P@2ICE,0Pk3U-FF"CY
+l*TU;1]1U1Dp@9%2n-ZPRNpqah3n!n[e]&jFPAq(eYP:Hm,$VIAoj%9e+qS/l.P[+
+AVYu<H[f&KV-8e#E5k>Y%s#toZakZ.0,_Ss7eC&Sb@9t;i=Lj*$_=XZF"PK\_e/7u
+TsK&>j:ULm(6kE_lb%h0AZ&:A_"Jq2jE](p]D_PCNFJsCrfM&fXj>$(@*K0+BO:_[
+bl>eVHjKencg67?Wr@jZ8grt\O;`TpZB%O-s!c$>./84JMTSa*Icr2NYTS;S36G&a
+Q:^(g8N;=K,\a0bY".QEOBU!B8<`CVJa#Apn5tqa(4k^>lY'[jBRi_^Cl)k.K]u>3
+#^louDNQAqLC%)i8Nr&OR[H]R$;+!GBi+klJu,P.:e@lt?t+LOM[U/O"t.cT#sOfY
+Q;C*C%8aigOP7rQ:6c.?$g8@5,]\dbB*??D"OP*kBVqA7i1gVlNG9O?;$s%2/J/:s
+N9T3taMsn<3fN=iQK;_R..!gE[T:1OMeYY4/4Q>s`=rYmP=dNtYssc]0T\"Z%O5SY
+l.Zil(<FY(P)?K,ba>Kq/JE+&P3VE=N4Q)=,o@29(^DW/Wmq]DJ9kl:(C7tqBIl3?
+r<mV>5:OORB[%>(,+<96!/ZH9.E&C2!uoER*"(2dZ+RFUb,reM*>!+T@Q=ZjU-?W3
+0u=]^&aHc<eg$<954Rul,4l*P)'B3o+:,q/#gFK+ppE]-\hXu0Z!&tp1Ef(uTL11^
+l2EAM7\IVkLlrr:BN1bDW5ctN+GpLb_RcHl^+Q]dU=)f4&l,6C:C=u4-u)a+bANt?
+a=d%(0PY@&WqdrMg8AI"^S9=.MN90CPX2AV-IRpSj#\J`QR$U<*Qi4>nr1Hr[jV>P
+TLua-Ek4"U1odg,^8gc>_Ug?]5qL/K/B[oC.dAgj#WP`?0oCT7bG?c:iiXLMWD^C7
+9-AUkCpF/3/1W;+K'KFMgE[.R1TO&-CJ6d*G-d6=TMm23djChg-EhJ<)/D.PlY/07
+CpsW2[mR[>6cun@b8X-Lb%@guCp(r+r'1YB3bsaBMnhF^I(@P;1dib&UdG.L9$N=P
+'(#sq9`j*Dma4`!=mZ>km,U_@cI&:':/cho%'WMQTM8tO"siumN=@u281R*,>Klk:
+EO@jG:]q3a4H4I2PJl6N7+MLJ?u:WlF66.bFOe?VeSSjTKcJc_@The">'($HmAA8W
+[Y,=:qCQaD%<k))E*Y:A;U"dh%?a]O0R(e$;,*(?B3&T\[+Rn_<6_I0Xp.V&T1&nj
+@L^%]DI.7X[+f[4:o6lTVL_-)A5FQ&ieG*7mOhX3C?=Qgh@;5AmMJc<7"-a\Bb!bk
+;#]@4A6T7g?m_i:D=27Xo1LCc8Z2@@k2'4;_anC\`m,-;FKTK+[c++e@:n`gB#s8V
+m-LS<DZ[70jg]:?4R&]:F63gJ#;"rV7o0FF9?0#X%RtLD!d9hCGifcd"r;9:JltTQ
+=g]%-a,XOTFCAg.MZ@HgmJM1)MK\+:HR8f>L),*URcfI&9?4-%k$i6>'RR#=H`,#!
+-hgT$(i:`BHcGGSM\'Q%DY=f[CZj\ia5ZgTOS8?bieDo4:OHjEJHLqXU$g?I#.Et*
+jS9?Tq.NV#E$XWOKa"ZY5*)gLFhDK<7.3Zr?"e!>BM.W);$c<oqTfTK[AR=Gm9S$L
+Lt29TY5F,/r.M6XDWnrME7@O'VdMCmJe&QU0.r<H3/rt<!A?]m,V\g]%9d^)EC_5E
+aR3j-kk@Urp?69pYs:p9m1^+/A17_(aV(U_&<gpI15,l,#qGX_AEjJ-oe:F\Q=0KL
+QWe)Wmcc"aWG6R4C@B8hn&[:lM3<+_P'RG)B5*Nt:Sa6k0UAmtS$,MTY?%/(<h+'O
+SM+B@al*):!r[u5AgbfpDqPYV^7Z$`TSOkk/teh3XT5?f#>-9Zasqgs,n]E`&kW.i
+l<a]L14hs$':/!Xmfpa.*<S#jEG@^YC#<[h/uBF3T#n38MJ33NJI&9>EGBBD0O&W)
+?ZcY]FU?d+:P(Oj%gD61J]f2PLl$;s/@*ZE"=iS>-qP6%Sup-JZqtkO;2hkZ(pm-^
+GB"pPa_nQpmX+]&Med\F0VY^o+M$+"L%i$7f=(aH[rXL1%4\TO$eDS%nu]t(I:spQ
+cn,j1)\>WkOGiZ7.GDNkdh,4=SsT%\0d%WYBYA1I'*;);X=GDB1aA+h*YCTD:isY'
+o+t&"&XXdTj6!d`?\&N$aM;bHfK+q,R(1c_+a5'P\3-$L<>u<G!16Q'3(04F3h$`B
+Rq\rN&ZiP<4sQEQ*>-5t8I6CLcFT.f,E^V/QiA/%WeKu;.^D,\1$C<+'-\Q:TfA6S
+6M2W2b9^8`]J:HSnK3X.,p',9,,5Ah@g==NCEH4eVfH/oZ=K\]\L,2'VZOB+dSEsX
+BYR[,-aItElQmoN=!o4@U4WIp@_!pTCoO_2.h\NXP,t?TYV]7i.lf"4MT!@5_^o],
+YN$J?Em1[!bbEP:/3-!KK6NIL'.o.s0!bPkZN2pBJMA$=^8j5OK%H=2CR3+kQItcC
+[pta50X8f?JCAg!MN50p'eiP\Ve_fQbHT!mE&&o:2f^c7E^r'/Wjg$DRKLAV9@ih=
+D4Csk4::&:FlpEU^qqXK0!"Qa+sWZ-3l10rSccLBK>>1%L;^Dp/333Bo2s'BW]pUX
+5EfV%/7c^5DT7<rVp&\M/7c`+J6uf.eJ!j$A>%5-"Pm"L8dtARF/gL,ZHoki8'LTs
+PQoF^oLY$)c]arCqC+HWMGL?m4tRE"()#0(imPDV5-A6VjTnN!#,SG)6\Mi$NAB85
+5GaF8ea:sR7:AOFj$3e*WVVKFAZ\5Bn5(\LIaf0,'H=*4^0INqW^Si)1a/k&$K6<]
+7heTdoL.S,pj$'"f[On9oL=r75\Efd8t,NgM;m8A_*b)fY"i%ec<[U6erdtpiRDeL
+q]/=OCU,6#GIN&l`p-IIPhe1j82TU?F`*GU02=Soi%DW4ArsiN8F$GRC55)J'a767
+@7uj;hp>PJXtdB2h+R#p[I'nr0+YPb@UX0u[PU8G-/S,$!qA+%DM<sb`S>Bh>2qJ^
+?mjc)[92>+M,jGJ:X;C(O#C:i?=A2^j[]8NV@gJno2$gq=g(IqL_[VlF&C]R]I4:`
+a&J/n4FX[o>5S)LY"JRD8p+++R+84s&#X"s='J-Nq"7?e7S&=-;#KuEq,LVo:6WNe
+K3a6(rf5"u2$!Q>k%BKRQ5iAKYMACga&g?W=LJ!D:`AfL,k'(N@$!3iYVdbFc<HR9
+?gcKs%l4>Yb(U)D!`7-HW*<aHa,_k4ISXCn2;85gT`rH#KWf9I'q0fT%VuCnB?5d2
+&AF_l8S6bWA<+oC#p!EXH!s9AAt6\H&9H+X"R6PJ@YFsMeh[Pl7$0#?opk-i:k*&U
+7d[$aQaV3::>sPq?-d\$$5KG%B8b,lI[3bDP"21/#G@9#Zud`0nqgEVAut_<]4`Xr
+prTqnYi]XkGkGc*!lp7`mpMP;iq\GEC8k`Vah(a`qogM^bUIfJo*CQXd;8O2f7nM$
+<og-$kb`).DX[<2chaCPqP+i+&9e2N(C(R9XV-E(E?2T0:f<tTnT!bJW3It/rQ?O3
+2#rM@$[4gVb%?#i5nom*U&9lS[lT/!0om_?FYHtT#XYI2!Hq:oWV8jd%Od&<hOU]9
+FouZ+:m@Qm*I9?(_hu'Sb3*tMI#5=bH`HHRaLJ:Th\O8II0bCP&WEj>NI'.<IOaLm
+QgC'jm1NLfSlc#?Lt&IB-EYY'_Qg-X;6GspkL3!1k@`Gcb6J`]eJ.<9hdbfRGVlH<
+CDLo#ZB9gCBaO%\&Jti/K`2o,$0`4=*?JN9*_@q*U[@@!!eW5T#*IYrJeoIY<5HI8
+JSCDr1%$D>B8OK'QdS!_hTo(kjLD_=Ko+Bgpq.lE%(NMJ+;ZgYaf?Kj@j8cON1t$J
+\8r^YGE&mI,r-R&.uL<(:Nd@/]':7'-FTd<Id)>[-uu*U^Fgpu(FYHD.uMN+nt%5q
+*@f^?WoD%!@g9Ba\A"-BNIpIDrr\Icc'7g60`nnN@]:s3jnWr*A$YhVEmVMk/!%">
+0PZ3FhcQpgLB>pA/o+]J1CK<ebVW\R1I'AE2Ii*L,.0EYR,?dX\LtA%1R5`4RA4T=
+?t^YaiK2PS1)g[VcpM1tA2bDlTTETlJD1Kf6m/75X<^(>L;VqhOgJ"<+Gc#Nn>RsJ
+%0VR/jb%!3EY_T:`^Z+_KV!6+)ogt!3:'h")&Z-sP\NU81Gb:6W08,6^4.jSdd"+T
+0ZnN@PDh"(]$T)>?*QdeURFU))dfpA+N"O+2A'UBgrB(j.+E6=OhgFkX)7:T:Q%Oi
+<grG#co8^40:9D+l@"W)`9Nb(*>^5ia^Sg?N6p-]LWEDmG0A.uF.'NIB<c8qU4kea
+hWX_X]M8^Bd9cJW\q.j<0Y`T_K7UggF$_l)6)AQ%]4InCj0:Iif4*-4Wcp+>#uoX?
+EjCpcr)b)cBb-i]L-?acZeaXGPX3#\"dJ(\L-@8XB[VW2ME(;`6&S)+/oXJm)E9DH
+EqVg2,38SL$A8!B]eC]X#DLKM?5Tn#$>0%-d2Ydj5]@th'/36.<=kjTP>MY*D+nW:
+6"t^^#<!`g%2UX;'@n'\aRTc?aV!$%_al3qfV?H,$qVm<&keQAb(5`a--H:'fe14B
+e@Qm!_4.hYY&d8W2,+H/ff-p/]WW^-0FG!5#&X"o0J/LLesF^EEk+"m6))Oi_9\AW
+!7@`V"$]QMo#j>H'NH?O]o/-&9nm]]4SdJ6>M2Na'\,[\:M\<i;FL*c,:J;)Pm:@@
+P@Udl="l=@&ks"hI8\3F,k#-DoGr%cbnB\Sjk5pbDe;slPp9\gi+er(cCp^J.TVjo
+re=JiEcl=aFn4]`g,E!]=#-*^iYgSRQ-!po(TlcB?8l=V,M/n8rB>sPji4H'fIc\l
+hA4Z@OPTXdO,(E,?4BcIGQ#n)6ha!"N`9tn+-7pl4\!f.<ucE_-2@FEO$QcgeX/pp
+X<g2CGuPrAk/s78Qo;Do5=9*Am,r]N)Dg,Fad?qlmqA/4eQ1!4p8:Gf[O/0Y<-+WL
+b>m'"a03_5[]r]\]+oZfghj_"AaPR5ASb\OSGB^MP)dVWiOc23Q>NrKr@;be<sNKs
+ZI0\TDmmY(^>\u:=i\3r/9A`nBPl#3>ukd,Iri+jBf_o4-PM5>I2YVAF1;Po)ST/2
+J_0<DVdIYY4WXuJG'npHf.7npR'q1ek'DUP&ZXt3h9lh!k%NUY1$CsP%IrPT'BYm;
+Wr.PoiQa08?gI9IbBpbdIl#Xme3.scor3D!q+,^SQRT:hfR-2H\$)FTSK*:ks+p/%
+7`_G-^fM$I+7';^c8F2e2tD"H'G,[c_;V/n@_To'#^Jrh(mlOV!*MCd6:a!G6&/3#
+aYWl\E/"4`#DWUkoI>Mi.8>F1J7d^I1c19e*^WnLl\dk'GfGm4!u0nehc&6bd4OH0
+fT?j*$WdP370:=2eCRuI?]$LnYCd)45iUhuMQ^D)/Vf(F@fua2Z*",9fZs&_KF)Oh
+_?@lW*'hgM1QF,G4e-0Y%:cIXO@U9O4J]&uUdTrG-:U0if]rl;jCWO0\]LHt@0k'[
+AqdNs5!18G-6b!tLF&fb1bo9A6%dNZZE<mJTO?4hEGAqQ`W++KedNau\<@AV<0G%;
+q]6`ZN0:14"(UDY>Bt3@!9Lc8JdXB,JTmMTiab^dO@(A*=pHZ$D35^+:8[s:K%"DD
+-.k(4k5c5@`KFiEdL;S-lNo,+7X@gKEscQ%glf"`?qI?l3"R)2RP;Tq(0%mSkB,WQ
+!8-0TfQ0EWCG_a67Z(#pRl-h?"e8P/0!o@>2]gKmS.Bp_(!8a2Ao$KT;`8-SL?07D
+OTbt(b*3!pk;K!/d=1_pXTOEn:>;!GVaRa/01pU[C'<Op5iI<\b%BG,m4G;9^m#WB
+S6Y?m8tZ=K\PN?\gmusKKlr8m<`!ah._S'?<ME;$C;!ed4]nF)'tHqg2-).08u*3A
+=VBGJ8E(S/CA$_]bNfR)6+o%X@,dd10Q.jVeV]hS!m4N;oL!8%g9W*dV3#^*B8dE@
+Zn^WoP/DK'N6tY4G-7gu\cHR0*NPjO(r)0u<*V#nm5F#`Ltg9p71J@pZhE5uOXj8u
+J[+,V["@FF)9$[`/^L[<0H3\7[;bBt^mO>IK1rLdGHVIJ3Fj%@S'.umUqPZU=0CZA
+6=WkG0eoXD\ocfnl$KG$mY#^Lo%HE;Gf`+D9@^n]?s9O\b&-2e'3\^MC]f=RQ38[9
+M[<8i,tRNjKu3UeaBa_V>]B4N-ds?[@T-Ug_7\roGS%_FN)teWlbG6O@i?/qjbul*
+oZ'E[)4:i'7BpD%`[.@("*ru=8bP`>=Wl:*@eX!M+>T'TnDtY-S9,7'e@E*iY.__d
+<\jcXbN;*ZA:ps`1E5(uGrbk9UL,K'+_Z86bj^mT;!cHW#^gLUqgd%H'`_tK6W9Kl
+*k.jY#cVi/`I_A0+K-.'a=[Z85WaMC:_:MMEsuK11'UQ?'S@fT%KX4$#;F:-6D/&o
+Tbg!1;uH>c#m@58ZlG@KT!gpcK*2FUm(J.^7<SE_8Xda/UGZ_k:MO:j3rm^qh2"rd
+PNLO1K/g"Xjfb7na4^>m,9Kg=[,;/=^q5PjD$5j-E-qX3>7Yh=:#'VEPKhgNX)"aF
+idpiVe_3*oIMR]e]O+FmhtkZIdBme>Zjq^Q8!s`-Op\?K;>C>52bG[K6)8V=n^UgI
+M4^[A7d>,)COAgdENW*6_*Bd9]!jsY1Io5t55j8!cZe_.Cm1"-$daEVLEA;r]m2f"
+ioEmp!ff:@^i(=X^k')RSk$^i-RRk78/).i>H<9lkfe]]Y&H-4f/M;fg<;^@P?e3i
+phBUX9%&B4/r?EN2cf0*H`!,R-DF*s;/#l?7J0q?%6DfghNd1?]Md_I[leZ7)jA4&
+[9u_>kA*<pnuktU9r/gW7g6G%_1:@=%TCcOnIpQ&PVm0#I1eO+Ql"<K*n/"g^MJ^j
+d(AsGNXS&L`d_;8+$QFqX?B5TpcI6g/h\U=r2bZJ,`g0hF-k;PpIaaU)eJp-D>!g1
+>5L^OB'oV\g:gH#q2CYsJq[q,p>=^!W;SDf,cC1AQbr+%hlZoajhJ;p_=S]`YSDuR
+5Ca;#\E8>E>dE+A%l7%inf04hpp\u&^j(QsinM7q@2P`X5a0P00S[BM%Bq>A2o/e8
+lde3$A\cL`RT'n^3#XCP%1cq,_"!"'9G"[IgHf&l2e3.XGiV0F_kLrh6*q=lr"hZ[
+(r7YQ0(^'k$_Y@@S3`qeVM#pJK*fC$*07oF5VlN@Wo$.;LOm"/(Rg^DKF+kU0"5So
+ZU?W!6TZ/R/<<0F6VGn=^sKCQHjN-d_ji]fldNa$gV_EaXopr+MW)JU!CP')Y7*f]
+3qTLQ6&DjlVP<97`"3h)DS`#?`4Fb=KM/EU:+j1I$oC_8BWsT]2+7'1ZZ?u&1bZfr
+q\JNV)[oh#e4da_9t(O8#s%\plEJ3C>XMtj`Sc]?>LEei>o+)jWq-t7KO[FB>V!0X
+5ap70a_VaVPK'WX0)8I9Zt_ood73HS(?iNP"(=[qp-t5%`)Lh@8SXRVoLETFYFJHA
+9&rDrnJ:auXGgm`@dt4\cn&FF7Df6EJSq?Ze$j.A/jt!+0n%+oJA@Vo4A"+hnmnfE
+G-#YAQn3iG'Q(q.gGaeAM*-WG_Kd^YLe0'.Q1BSXgMk7+M_k!j8Bd/e/;pHS4@k-p
+&:n1;6NkLm#/q,n8`P?D$cJ$]?R^SpaFp?I._,o@BhAa:ao\7cRpdg<Wu.q5MDUDe
+>aE:-HH:cC7,T%I]Wjoj/J[m#`K[X?9MDI-`1'n:/$`)E\@Y@\Z:O8sVM(tN)]$P3
+^*_(6N.G`^Jujn6O@tgf(%TSE'UHsJJgranb^18N!9;.8UQ'TEQ1Ee+XHq)cN@J*P
+8@[]N4O$QYOA+GlY4Er&!9FZ;Pd7k=8@[MC!L+>iouuKsc+<o!@VSSIWjaP'WMnFm
+I+:peo$*u]:-$m_JR:?>U/#CDb/0YW,BtZQf:.%^0f3Xj'ZnI5hT'B"Z,E#)Yd'Zc
+m#6U4cQJF?I.N:j?-c?;:9,>3oN/^;O\W!@aIC_a)ei'OT[2nEam7;KRfcBceVbE%
+coh:dD$<BKr%Fl17?$NKr(ON2:!`0hcV0VNeH\o+O$a'WX[Go\YcU#N&j\q^Ws[@b
+&r`nkbgC1Pa<_3F<0Xf%d*\pQ71tR,/AP-:`DMeqcSZdr/H2Ycp/2`^Y/*pbMh$B&
+3m/I]dW2os._S_0RM2)c.h&@Q1:/=/-)rem;Nd[!9!h.>0e-0Edd63]2!V-Kq`pMg
+drc8NI.XJ!3k_ojX;r6WAN`m24]6,[;T1Vm"YWgnDC@59$i4bdWm&su3)j`4;fslE
+'`P!5jj4jh-4NFD,lXP:+]Q\XUAZ=dbp?=nb>,&s8ht:[2)(eB5pKB2UqrbMAQ>S-
+dT*;PdgA=d8jC_'5LJa\d?6YS"Vr?ZaV=h.!KA=e[:N6qAlKC&:O5(QOoChU=sW]q
+;.XQC'l6m`Cf:dZ:ebb#fh`?]s&!3:TG7LZ9_?nI)-0IUTNq#`iV?6NH6:ZA=/"d.
+66jg)I8Xp1<#'g]]mV:`=rsAcfK$ICh1ZiF)'&#^SK3NV^r'8Oa=8Ko=E('<ag8_P
+>opi$4BibiEMqIJ[ohIIR$jQ!0fI\slkh%0=W*]kbI8<oNu)e]]g>d;eW_)-$sCsc
+=o5G"d>P@&[on-4V/_?Z/Ye](N*9)#(PS`Q6>YADC0<nYPi\CfHH?nqK9T)k'CE#-
+*O-<4UY;QG'ihWpd?GB>*LSF`509MQEAq#hZJ2W_]Nq_*aJ`<_5sN&n=j]oJ&Oonh
+%pLh^PK?c=Th<u1_:fc$Q,UfZl1PjgZohX3PsbV]U`R;r/<5PN^dsInPW0=M?BKU@
+4AF<jR3`+re3L[M?!IiO^":'ueN\EnWGE>UN"k*D,XH;%\&9&d>T_%hfa5#:3VCe:
+e'LCn4>mj9:Q,Ure^m,uRl2f=b&eS!$6YB]jkVNTW0ACDKGU?KVa;WH^sknKAa8-*
+FMeO$MVKO3'eDBQKu.<k-'T[2bX4q&6'n,B`&*rOHoT7/p-PnW6S,$$bVLVFR`4Vh
+alKe.MJL.@Yf9'n-]BNIp'*(jBLDFX[Z\u`r%q'Z;.1AA6tFQ^+WSE+N6a9RYp;<R
+<:!"69uBBZ`iA.*IM:\a,Xq8u_n=j?/7qZ,A4Ba%i[jE7_^*H";kqfU1NGh'6P^ea
+DR8DO7Uh.K.srt(-q,nY@cVp:nARmK3jCesj#h-f%!X94.E0:c8+bpSHP&b!BM4"m
+i?VZ<<[cuRCh"Wtj.*d$OKW*T(<;;ia"@ljZu]TeBk+k*MZ-0(jHrH6kK!LBatVZ-
+]S'\c/7_4G`uS=D^mN+klVp9*iS8Io]Nd*(Jn3N*@Z'eL:.n,_B1FKaA&AF<g;q@$
+.'NVOYPQN(Rg6m%J$>1a8FkP.X;X\fOKAq^8-DFlN(IRX8S&m!/O[cXS6Y#hOt@*X
+8Kutc`c3P/mD5U=V`\n=L37)Jeh^R08uji2lrV>]YK6j$dY+,gS;X;2Eli'LBDeAP
+]U2;;1$?M09#RUPS>rQAl,lo*7GOUeXJ`$cbK6cQB69oG"SPHnTB8bL;iHf*Y)u?Y
+B$Gd[;T=FT;R"QUg<3Z;:4AQYAq_PTo1O7r9Cc]YQBG#JOQl=Lj-8+=)Eo&*^o$7N
+C*H)>g+t#X`?`Hk,Ab<^\kGm#9sd$\V9I8^btH8Y,Kit<bT,1QX9QhH[_Q^8CHSI<
+KWu`0[\)s$CDnG2,+p,BVH+\[<ZQ39\MWQ9AnmlK:Bn/LI^3c9H"h\JB+8tG-$Dn0
+_!H(Fm"W7<0#Yj9`R9Uq+>j2db]_:"1sZ>H@^PoHSJG?F(t"Yu:eoIp%.'VR6L;qp
+(NL&7NnI:/32&7S+_5H:Bf+ARXJ*TA,!@:?rhiQ"dnk>_6Oap,odH$h,Z!\!<#46G
+eJ%@^(-"W2iGBMI9Nc7>mS\oDbCpcXjS+ekDf0E,mFn+p9d+FY1X;<X;<]#EFTIS%
+37EWZD!;6N[4<Kad32ir:9OXC"T%TC1*e^nlFd(1]h,$=1N2'sBbEU/0*P722UGnk
+dAf'$Y,uQp0@dWee3\PY`?t*!.&2OY,D0IU10E&k;/P#Jl8;Slc"A=e)Pt\r-1(W+
+Y3I<eAb!/f,uk;L2#a?trhY:SeC$Numibj96Q9<cVN&aP,&5`P9I\5=nrsdA5:o*o
+N+$5%.!f9f'sDYkYk!45BQ:N9U2Ume^Couo-+>AX28o*A/YpO$i[(;_%O*t\2fmIK
+5O1Fl8EIW<"5O6gO3mm>"9s]uG]!Ta\0__Y1!8<nH,gnqFDR6\5l>^sVVNiTh:'eT
+s%>Wmh`No.hBR4"c.\8ls5"Pj]d;TZHZn6f;SgW<607N$7I#"1lZH-N63g_WcVFq8
+7@53hFpr%V2E0Kpl,QNb?d!.j2$$H`p0SLRY8-W3r#&mbo>Q)0A@[!-[%h"t!FQ*'
+i=u@$/1F1_Cu?sS3Q._!PVIB@38NY7i>VbagW-k.8`:E@@4\@fX36K]k$d&+\\rU2
+Sf#Po&U4.07i[cfefMldS4Dn6a1`-U9T=9bQbt<FC@"bc,V!BKRcWB<Gh*i?b]^p&
+o45"H:LbTaFBh5R&U?c$82OWJ*+dBr<B(I9Xk\E(Q>X^/Rpr0iq6-64oJT6U4"Slg
+Xk$SM->9>JUA>lLjJn83`,a6$ElJ^%C,Tu,%QGrU@etOf7K.78Nf-rH1o[<)7V\o4
+g8misZ07c=.AsN#d@b"b4CbgU`d4^rs177URX;?MlL%!;KOucPA&jQtjAKU6b]>/W
+8>r+OP4,`T#JT9>1IioSA&@*o*_rV^.+D:!e5hQ>g04=Sk'\RDV1e$pVPn'E"D*j!
+AX=4S69=m"A*\e[=%lfL9MU#15"C3,IRi,fom?N=H`8iZ=-dG@%,gN-C*4""f/N&g
+n)$]sdV!k+lCQ[)#O=pmLZ_FMpODWD:3h<tQL8kQmW?LAFN<dZC<gFD+&pF$`kA!f
+\cInC$\kAVR)T>H#)pS)3"up51_;ts:rjUl.1q6MiR)n3i+3B:6X^14bV3TCLPQDF
+;08BL0p)Q1E`dF4<tg>)A+A4\TOSgm:LV-IN<Y/,NBq.fE,:\i/Y>Y11)Y&T?oaUu
+kg31\8tRN7a%!CtJDu)=Z,K07H:=je9Wck-2![Rs$"^;GC81g;[d@*7hJ@DJ9ObDC
+]8a$q9N634C:Fa.pNdT:.;c]UA9",>=pI".=Y_o5V4U=[N^dtKMFM\rQ)<iMqYSOC
+p+i`7Y2_[IPBe/g=XS3\%B>b-ZW4O*h,qR79Y,7if:FSOLC1,&XSnX%'-]I)dQ1XH
+O(.QBd!%KL!RH,)m.UpD4iits61XkAHkgRCChECLC?f^;--qdTKI]j)n?5(_*#AC\
+n2&`'LFjboqnf?a'HFpW-utrs:`Lmi5-B8e^r30ejN5?E`)q]1nN,hM,O^fu!Q<Bl
+fSd^ggf,9";1j,h82'mU*6%2^F!8U*E,O"A$5A=E.?I.F*l)f\OS1B6,e5#*&,[Ce
+bVLM!+N[P#6RT^/S)lN1'&;@o6&d/Q2F.q-""uo\[".j2Z[Dir[4hC#q,";s0\Arr
+4I8)oDWMHk5-G,;2C2e)@//.@^`,uu[(N),6AT28RFII)V,Btm`AJXWF`X)q`5kAS
+$s'b1@1Z<(KlnWL'ZG29#;upW9hCX.<nGoeV0+<@["WWTg,1i.32%L[C)Wl+_Tc2C
+6RWj'KEH03Y,IOqdXd9B3YE:N@C#c=#%<bPH!/b"'mj8-J7]\A=2d=Pb4l_Ls2A(q
+JH*@Y;JmC\2sPsM@CVUF4(2(/UN;))?9:1X6TPhue02-AS)fr18Wg_1Zn-lbR)E?^
+:Ns\7R,P;;@rtJ5p"PdF2NVQh@4PppDJ1u%CG+`"EjQbIY6Ij_4:%7HPpj4MMlabK
+C>l#J\QYLAd,DV@OjH0FJ[/];cA.?G]7.Z!l6sN>)cRumd"Lj"<qN&'Y]e9mclojR
+Z=1C0b-8OPZt^PhM8((G2uDZV)qQ7*!rMJ&L@NPR]B8[V^VR:4H?@p94WXh!%k#27
+4Eig<nbfQY.u*j`q'gMM#C2[-?"[HlpjD1Oc!Oo!cf@N$<rk5aqf$E0W4nlai-N5+
+Hd^5K_BI#rhY.'?d(-VGl!Jn#X5rf?]ac#OqrIqTE$(ZaY<M/WX7#o"l6,=jZ8$Al
+8JmR;%$03PRXWR_pV1q/cAH[X:P:%>VK.4k;k'A/O<qdfLcGH@+m!Y+/=X,EIaqi#
+,:Kd)1.&B9$VQ-c:ZqPt)H]UgMR3>7OPgs(=A5+:N$C]OX^4>M,&ReC;MSl.e<QpS
+7`t=a-S*%AO`GROiT*9Lj]X5PG`;k4JH^KFc.9ilFVtMu"_MaFPW>,'(#b"^,0egK
+&r;ej$n2@6&`P7X(t&h&>[`^*Y!G>Zl9h>X:Ps/Y)jrGgb2Xb-"tp$IOQe/c&F9ub
+TZ,_Y)#FK]4FiY.9d542<^EEaRq;(WgCf,R$"[fi2_gIo^%a$)@FSgKV!8?2Y[Vl(
+d4^2oSCG@gOpjph'UQjGobIfcHAe"B5BB;#bU8GIMPr7TF'uIM2kjU=m*2%(SG*j,
+aC>QC>q47)C!*_:;%)/hGt-$1(jXU>(\I;S"e=VjRJ:]X5sI5]7XM)N1/&)2[NSTm
+[4@FO5b[FfT<q"H_o&WIM^6(_a.@gPA7e0&g!_bl=L5tXG=bFQ#q7??Uf%lI>mW7>
+1_dn;+-R3TPhC>Xc7lHN;U1StMrI"@+XS:okd2SHhLt!]C.SKlR,.k"7`?Na8Wkk@
+$scsiaSmua'ZSA@OtJO*:#je=FD)>.ME-Lj`g\6nO^Fh]1+V`;;>T:<blW?rUa\RH
+1PhD/&rS1Fm3^Ca*1RD\"L/9oo0G1:O4/uVQRF^".%">76,Wesa8X8h,X.n?E\LRZ
+.aOuefW6'm7Tl_0?m2@l0i=[TZc`ql+'"M;P1?re8Ogjq`3j>r._&.9NaO7+j`+=Q
+\P4J[QnM(tE>Qc<ZhHIE>h%eB0!Ynh[q,?6la!<`rS4kprW(03aK62?S:iAD";;M9
+#E[FX7X)N@1$(0nmqSFo2q;Ulqsq#;SbuS_,6+\hR=1BM"]iXl!@g,"K!!bZ?E7p\
+Xn-eI<uU1*m.HF:`d\ubd:6L@g!qa@m.$MX!5tp@NNqVjRi)M=@?5.XY_NB"n["`t
+GcAM)<WS'cL-L#b[&5WK[3o(/IZbQr)jFTKORdFXOh!pHa%Tco=(:T*%cO09k$m5R
+l%WjOalbF3iq&VDnXN!?0BC]%T&h[qB,MaO1c/qW)r>a`Y_P@al1E^$;ho9P$2hNg
+8"Z<3LO$>)X_6fPd51D$Bc3++B6ZbqhWk)Tq>%5.'Z6\QcB$AtEW!F\d/ISACsUNs
+<Blh$VVf[kJ'HC=]QZSg9(SP(&0!F8VjjaFH\Boee_)>u,ci<8YHk?5?L5`'oV$_g
+GUR#r\sg"`(*hJ>%ojjg<0%N[\^o@eV!5[3aY5WY13IrC^a-q<h[O[;I++Md8E0F;
+G<YesNd<DI<uWUW1\d;u)Goj]m/>1Q#VPZd"VC(%0;O4IN6go@mYO`YM6=c]@*:sK
+UXdC)#9S+Eq<Ue(9>e*:C0sh-EoM*c"]q]mJE0^I4^L&5Gi#<VPH,A6?<^apq#i#!
+^4(\[_V`tK8*>`''_E^Md!:QdLB,L]3J)8[TM.4L]k2h;C-U7+Y>gB6,$.M&[j:hj
+Ar<ig>fOls*.*05+iu&<7j:k<@^.BDnc,W0rj*`YcZZ`/TU3V=q$#g#=7HHW+I8u(
+;<GEA/Q*t<)4A-@V0mD?OC*?%*UV8!G=OD/I+NK?4"/9PWQm=Y@F=O+A`gY12%`@3
+?\GI3pCshk;YH(H_U[44QWZ>U^1A@1UFtdq0:EUGE?C!<!*aNX5Fm2'(V.$J@KbQa
+&Olgl]`*S?lC=k.^.LX/X?rV.SbqVkJ(5(a=H&-MX<3V;/'6k+.dF7AFCM`-eBXhb
+<j'B$o.!#-MGUGE%^8;E8VFsUC?3[71pP*o!<RLGYUW=^0Nni=!K-5I$5BI49IrU<
+WJafVMe"Rs1p51ZX"/LsAB(A/d\BFuUJP:"ct6r]i4LR,+\N*RcuTBNOM!9!9PRO(
+b#Gt[m0M'XK4XV[/)[tW3+L,K6Yu>!MiL,;&IT$FD8]o-OLX!o57=MIZc$nnAd2A>
+T!i:#.hKusE6M\1@1=Na5NSP`E8oJ[?q[_o5-XZs.u[]N1eR8WGjt\l/"B>]!=\.T
+&CB?_0c3'/]+O*.IW6F@X\c@C,nVE^;UI=(CsN`jFAstU^>pLPX;4297T\cB'ErBu
+OX+%K<a!D(''og*NE6lh)&4GT&$&%67C58@OB]Lc>Qr&NL!7N[36!RO5"j,<OFSNP
+S@O6/?45I>#cPM#X@\C(!N]I;Z'&We#e-OGa,jKE96)GcU:Ba@#3+RZnX.V'Ak^Ul
+YsoLZKaSl_R*!O8+&U2%V4c#MZtAC+9Iuc:Z0L"YK!S/9c=I]!lF:;<oZg>>,#At_
+EW47\83Q=`V(D\#m,]EBhYn-17.N%-/iqD_G&:tFCF(seO.:"Mmb1.GSRT7]&nl%+
+&kK<).a9$114(;lr+Z:g-E0>0NF46V%jrr"1X_RBOt`9j1mc4rQd'%lLCQ>MY:+$U
+kD\tQAa7U)]^#e.m>ZcAXZn9ELl6)jf.Nr[/uEt*>(_i\/l%*>D5L\.3o)R\h4epr
+XgmZ`[-1Ei?EN*;jo3j[XYB.e0;G[rEr+St_B>bVN`,f+dj!]udU&iD0G?A,NYGhp
+oO%'CGnU>4.3*\)`p3.62"%;lEpA'jK^OUP20"(m'3'F`e:>YgJ^3F9d_;L=9TmY@
+jGlQaCJs;(C?F!.F30J$832cE#<9dWS>inWEiau9]fAXAjXJ_@Y'c+FR%e:;l2oOm
+NYabiOR)0SS28+K6Ua/TeEH0akis:]d?%X!5f<$*T4i+#C)i"L;a7H`m:mS*NV87:
+%d!8/lfrH%cJ9k(0&2MT92D:]#Zdi:7Wl!nN"S,3jf"<!RY>[cL,:IP,4'uD1dIil
+p?;#"Ln^lP3?dfsXXMc'Lt8R:8L0*aXXMKfA6ed<re;p/PdG8mlNmQUHq1>GYGbp6
+Y)]aT>63r$;9ke*M4Xjj.3?g-+UP0$/lNoa9-0/3"E_ZgWX/gmT1ah7H,U=J,ri:`
+n@\la6AdU$MDU%QPb@>q1^#5$j^?Dqpq?hS8Es2Mcija?nlV!L]Po'F6<LaTIg[q`
+%5:XWMG$cB+V7K&T.oq:Cr@JnM$9"1+]/gJd1E62(9DK\!YnU>OFJ$u7of_k(,4ng
+:q]nK[QAJ1=%rOl0fZ0\hYcl5b`'D(CsL6LlP*?VZqZ"\0i;(h<EHDK%1ui2ONN_!
+%9S:2cc0Qt/BM+tm[_8q%E9qk-^nL3lO[(=9NBBL27U!?&R>NIGr=2BBCfFsrd2'<
+JT/ncYq]OgcP)Sd]p7Hh8on5&qY&J.(D0MPAS5DP!7(9X7tX0:e]D5FV.-M,>uhUL
+<TGKHI):D"(f?+,0odm6^r5L8-Lmh&d@f@8$Q=YW)K[]GNPmVm\g>b>a7<paD9/o#
+aXNA,AeETQG)KqLb$g+9/'N'K@O5`pb/c0Ua3FKrK+fDB"MDsGj"/jON1qkYJSA/[
++SM<fVJqJ\]Zmd9c&"c!G.&ht.;fb%CP0eT-0liE>1&@6F#MO-;Em+G6Z!Hg/P,=X
+A*#"3Y&5Rak)CGFQQ#'_FXD/dAI.l`;K4GRZRrXAkZ8L<Ot\)h-IGm[3qA>Nk,gM-
+'fMBnF;%.m7I+p!=H@<'DW]N:DJL_>K[KNnUZW54L/E-CO#i*C/'/!:e%0.8HZne5
+40@Uh7f\;MW.<KmG*A52(QUNccS%5N39j1uEqCoh-CbOUHDaB5#k*-7]\Jj/BCeIH
+mFI2ZJD[KjI8`0`Xm2Pa4>k1%hm8jF1JB?ZOu2S)2JP$,eeHuLN7Pn8i&ClpYE:@H
+OFrUHJC@"J,M$m;+#p(:HcQJ1-p";JQols:qfANbF0+*`G,ph2XH#X$NkYHE=@_u&
+rs15DLt;Q-='is]rlCjhPSF2NIfH?U8Eid&$*O>Hd]<!K9?pjGNfO:0LIa$q8WKBE
+PY"LRd'OKY9ht!uW+c@[%>tN-"`um1Zoq+npPXVoScT,>7+iY.kfRj[%V[Ff[!,3#
+DbaF*\eKi::L>1s@iAJ/]5Vq;Z/1/6qO*-FlEHYE<A@'irCceq:!=`ObF+NY+\m/*
+T^^P5'it5m*^$Oo%S?7#[611o8>fTP<icgs<C9Z,DjCt9;R'K*Pq>^M"Vp\r<eDV4
+oj(PdRoQHZ&^[![0Q@_eG?3(\1^E1?d5%]K1KVh+YW6I"[=5I4Nk.*4ZdDEK$UpM"
+SIE'A8D1fh(+Gbr]a$'Y@l_pJ<M6iZM-\fW9spH&=lrMjlFQfZ7L/+I%>).DU:N@g
+(:gbZfs_a-]4%-$^X],`d9@G\moo&dfD6k#liCSh,FW1l(3U9*[PM5Y2.MbaA'oU,
+2FV/80,UcI>l[,;nWdZ\`FY6.c^%cd;6o2$ZBEdTOm)#JVE:WI5oE^K2&:TrQCa'j
+ULikrJN@5=K0&?drFn`VBnOs9G+Ye?$)n>VN&m.Bdn2jE-su3,D<;^OZMJGsRiIm"
++I^g"6hdV3bq_?#1FW!9U'i.XqLLQM.b<T&8jBLqo<-=5EH`QN[i$KYF)U1>F=,#j
+QLO2,)0uYa-YZCmma!7^*I!Oi!1PFCB_%MPf<aii//L2eY*`m3UN2AED0Q2BnrJ4R
+=>;RsRoahpW5l=C>kn\IG%c4R]6_r<A9dip2OAoD(Td@JH%<A`5qPj)GF%tN7C`XT
+6bB7KGK2$(Xgs2SUaMJ]6hrC&9Rt*=K?`5`j6&B/M_PR*0lPm]P!n*[hV/lQ1=UDi
+FCa5FJ\N%TH2+5M&->qe==<H!?;LQC"T62;=Cp!32V=9R9-H4se:F""Dj6#:'WF'>
+*e;bYDj7V]=Ld=s]RUHXN\oXTW*Z/g=RDqXL:GIl\H+a9e]#L:KY1BB.tu!jeVZJ1
+L:GT`7#nnIlN]l`M=K,V,db3TS@LVs)=KGH4I_Ql>8n8$Osk#ML4tXj-UrA.pKXiA
+CC%`_Fcrqd$Mb8>:R.,WaV->&'9Amp8[$C#E7q)n9p"5+=]YM^;P\^./F;h(b%K%9
+),[;u!ba_p205'UK9nT8$d^t96U;NYkEj<^QlP:V6[R6K:!q,`dfY0M9-;W8p!_9i
+'Z=Do=`h$YA4$*-S2ki$rC(1X6!Sh,@m+9ph,b(,+AP'R5^b(MK]SVEk7)DS=(CNC
+-\,&si_D@0&;Rlgq>.Z_rsfqL?of("RMrs[%`-j4@+ClX3Q2dL_dPRO(D,D*H:+;N
+AY%C6h$!9S5c=^iX2$O&N$)j_i2@r2\n"-`;e#k9JB#K9ef\A!%cA6/!2L$rjpg8(
+$m=aCi8bAhoAK].iBZN6TMc,Ie,c5#h;Wlo5\M<-#R5kbIXkW3$nr+*<Sd^@?/@b)
+,-0cn=0KOM,mA/H%(9>.\;r2(;r2OJra7%$Hfem\jfs>=?@X<^<+pue/&#0I!`/$q
+)s=";ks^ZqhKDL4V;s-Cl9:?lrite'Vs&S?,//M)rl=6'h<Edp.UKIGnR_(L!*"En
+mG=o*hPQUq>=AI)m,%-j53;71!/[?fh;.%dK"F(X5#`gb"<Ho?Sb**,Hf)O9"UVTr
+r\?/g=>2'E-3DObIUVc@]ALUgi-l";?S1;Dh?Jilk'ljnI_reU?15a6p-/U;57-1-
+J+440khebb+!?N7)=i8-irC%i)Lq?Flgpn?oDS4S4phLD:ZHo6ntJmFhLkL\RJQqp
+kjL%qYAa.7%Aff2hPBo9ImNi/-/cOno(mecUB4YPKDA9%i*VuG5YqZWU\-h$l5i,e
+?IfR;!"Bj*L4TGj$sY_0L^gR:34]n2)+%bD^hHI\67N(,,67pn4WP(C"u'.AGc;,h
+$\ea<R"2,F#)WShd=A$kC'Kf1@mQLA$of6G+b88=%O4<77A+[9<%<e.)T4$\3eUZk
+)NI?5iX$1CAKD^!#4i.#ZH"Ye9a7qLbjKgB&.HQGC*Y]u<4ZA8nE;Ilmgc>6n/'g&
+DFIg6N/'>O-(#W"[G.TXau.<fJZ2X*2qdj(Ai(E<U%h=s0*En[gr>GcDJrUEMWMks
+XZ!e*[Y$n)EJ';#FtsU=-j,l_aN=rBL^i#Ukeo`,1XW98@E@/\U5?g7iX!#/3'"hL
+ZK$E?`i7i5fl<UCSGUr!iC/^@dZ6FVdHTl,(sHaa)D9=q)XkHp$YoF;%h$DZ\4gEM
+l9W_]kbB`1Qsf,2$Yo>C4H4)V_?LST4Tdd-6qI<40g#gX^jp4cetq>o>3q!;S2ckI
+n[(:C_pI1+&][H7B->'s*'4KbYmYOt6]ZJ,n]#DcT,Y^'lua0M'"f_Ga"_rkcisuu
+2&!uI`-!hi&;6Mab&R(-oYRn<aVY613m,*1d,N4:cVY)S+&+OnCG=+V%*pTB/qdj:
+W55gr$cUUp3>Krh*6gIY1-GY%cL[kQ)'i/)Wk"p(m7BcG1jpfQ;.5//78bu?!l'ID
+boJ_IFgO7M="*H9<!E[uGq@Tj4\Cc,+g\FZ3)e'&B%N?&D,jZc/SSa![4@q^/@Eo5
+4M8l\@kU)+'h^-o2Ou!Tfp8DjA_e)gCsXH1c02iIe*P7u<ED>QIpEm#^JD+#!2Lje
+f;rkg0*/a>I^$sKDafC9Agr,@pr19448=6q;Ie,qqi,-"/<Us^<Rf'Ga15G<PiFUG
+2cA\GSh$97R&*F.`W<b?4CWFu@m4R-brM*P=OpK1ApS##T2qrr*FC33omLoAg)cBI
+<''/k;Wt[aa%#5iLgs""=3Y+llPZ7/XQ"PkAuJd*XrE5OHb4W]gWKu1)rLPl4b)i:
+T(U"N]4Ke7B?^Ef>N\p<+dd:n^B8l9g[.YYB3Y%m7#(Vc=1i0H)X5[gJY7!+L/r>S
+eh:<N4kR!/L1eu:4i8;`Z)a_37#)IYAT2f,K'@=N?'WmmZ.EVsf(o8O>5@qR;]`RV
+)06kfqd#LTj*>amKZAA0*5*0o&X-;_eI>ltpLc\aD=D[s^[(8Afft,^[!a>^=!S@,
+&VjESR:HJE8g4C"ACgf%PO^Br#ku+:*7%oBbQ^cFeZB*4m3(Fo#73fH]1<e6i%hVi
+L,l6F#6`SNA$Tu+D?R[50aJo>@Wi5EZCFEqUnQhW<X"X'4uW?J@7bQpc_\[kZa*K'
+"9U'fjWUBTZP8>I<'0VQgH!oW$D/9O/9-'X37st"e^RTDnX_;OQ*1su)OZI[]_BGZ
+>j)cNnh+M%.^J:2(1ZCQ#;NMD7VLNoScj7,7(OkJM%pe:@d-'R?9g9BFW;[%eWCI)
+M7QN(Y"PQe#)A'uOAbRmU:^;e.7BLm#sBOAr1B!i^%=`.QjhDOf8B+CBGq`H.\Ef:
+-.;_.)AQio<q%nqo,9-pWKf0d>e$/;jR/2qV(H)^TpXq::*s+\-iqN*4`OKNc5<lI
+g>XTK0u2.1f]P<LJHA5:jqX34/mO9C,)Ym0Dp5`M3%$iHLD/)uSn@Ir@nd)EKsjT%
+g(b@MFUa^Q<eF24j$BUa'gne.,gQcG'+K4=MX`C%:BLM)#k]9@1mmhLff\DTClG)Z
+dZ%+\',`60Gq-hl[`YUk9%-d"1J*IZ)M6]qC$d!Li6Iq?H&khcK\WPL5+k_PKi$Ea
+D0OL0O1KX:;\f5JU%Nk[;,ThVc(.t8&6Kk%>*N!%&MC.>VAE:E%p:,5ENO4T8tT;O
+4KEUFV-q;,1g8KQ)F]@@2B?(dk2Tf"'a(Sh%`$0)&R+7)&@0^GbZOF@dO]KsAX6M2
+fGQhTaXj?kP.d>fP$EYkEMGC7[^THILA2%nCUI3g;qMt9D^)bsX`G!1056$.CiNC^
+1+:b]gQM0r$+_G.^?=:9Mf%+RGujZ'@Cus!0&6]eLUE9R;X:M,DD;1s-/.WbldZ[9
+2=6?HZKOTD`I-j>l+V!YlU-$[mAqO#JMm\J=gn9@iN;:FB:@J>>2=e$[B%([/tHDe
+kuf]]qSBYdiSf!CL2^AC]$:*9?jCN@CKm"7JAo]47n89)FpQ&gcKsR1@c=FD[D?sV
+oOETq7'WLtXk<0Jile$QZ49=.=UA@j*)D]5hFbIA*u_J$XM&SAr3Xb?I9ql>pa]R_
+A<mCFZYLOWnss[BbDtQDPtLRer^FBC)]I]ufWLAiDoT<53n7KAO`Ars6ob',d*1R,
+CW;&ppYS-dXS7o868Pro0/Qr7@>$Gn'@1rN8*O;,Cf8eodlMU_iXE>No:e@DDX10b
+PqP<O4+BeiJIB-eq!PN^g"+4SMX-K[TCq0%Y8[?S'ci!:p(g?S<b#V*6<7nt2S7Y?
+E`*J9U33UC_TggC47"P=[7_MQfB!BP)ktBWG4EN+B#YDL%EK#2%cPUcLM;i5c`&js
+6+U7#Htnoh=RQ'q+s>a/3CksAb7i%#:>^20j3VUJ(;&P<#)7*"!o-N?^`l8Wigb(Q
+EmAAA.YN'2+VUsYcr&SL>b(+,ZdsEObi(^t]_KU$m!^r$qDsG>m%RF[Uq,HC<ZJ(D
+WKXC0cq4qAk^Qa1?!?_/qA`]:rcB9I;p]g<8Ogd,ihI3,O-U.;8,DmPTl"8&dQE:[
+86mPg"Itt.j#KVD>Ht#r^mA&iKL5/K66XDbhU5b@8ig%h+b&@>el&)83jk]]Y5-`"
+(QRlh5r1/O>hN+\+];WR7&m@mf+YW=o8$]m+;I8(]d!8o*hUY+eQBI!Ej/F+a^lu(
+,-P(o:A2kjCP-2MkC)?P=:69tY30-&QcmqSbDkb5Q*S%;YIjLdc#54'mbq4q2K5^n
+Ac$UL]=qXj@&/:AY_=+ijP!:7)6-Lep1iM&KW&DHNV`X?"M>PSg0njGMQqAdFkH<b
+REPB3BpkA,qS-HE+5*8)H,(;=.%'W2P?F>>6(+.Z$5qg6)IdP#\Y6gcnfT*aRgHkK
+_3bu-YJB+bPmdqen[^I>^`,<N)_l`6M7/j5\!8DGRtMP4):F)HBrFE1*8+U:.EjOJ
+_AcXq_3)[A>U;-[PT:XW*3mYVadJYJ[Q^33*9"IFWi$jo.@?7^SoQ0B\]Pu[0qIY[
+R+!`/l[^)9'HS4Q\3]\VU#WW`g-[UbSS;l1A2'0<nf@M@T<[&[6nb0/a#_oH*r4M3
+ETS=qko\,6TUG,VU",foBuH_NSY?+V`'p:9oq#UbV4:.G1dF!($H++s&n?,+OpRf?
+q&p@J0WGG`H5%L<s$]Mq7C40X=i[0r+,k4D7I[l2Cg8/-rC/>H+[O/al0Otb%]L@C
+SSATYE4S/:BoAuE`EFuc'Q#O4,bq/NUuXQEiRK0i,U;!q6%VY2nj/t<3M%.1Sf?(t
+.f(FLpHeXG%!3Sf.KIN!MkZ(\U8ee>P#F#R%j^E`V2Teu@ML4>-`#`3.2#f.nkL?C
+D]A5PVJ>n#aiVRpaf!P,VpW70g*k&G5UY?0N:Lo.;Q<)(I]^2+a"i^n)S(sH(b,)s
+.)^>.`+ZAAN1fHs_kP")q@fd;mB",U+KV*Pr19Lkd)m>8WU]^53fl%ARRT-5T"<N$
+Jb?"lWZ\=6+:8"G@IL/3#dX#h+H]I!\@OVg_*sf>`Hn."'&Y56\kAj*8a6'YM)@[n
+H_BC4.M:DfEA91qWNe"GYCsM\gr-\O^G1tlZ74$iH42V-^r'oa*6Om?Wf09UN#ZB"
+Yi2r^gsER:GXB'jRp)F#jImCL_j,Tgbi9kI;-1%R-;C6Rau_"DF!rf<W>3pcZGN4h
+e?Lgj!Qplc904lMlT1B<Xg0Lh:1H44X$!?!jt;n_^!Sg]HS@(rig%t,R"Fe-I,_0r
+,H5Zk5&@VAq\lg=os>(32Q9.rFSLE>6dMM(c_ABSUIS+R#VNAVc^VX"$0/#]Y>?GL
+'lsWn4KU-/8hc`j]$e2IUNr0#:G*Xn&Xt^UX&76/$S2*H/unOYEuE=L'U`udWpq-k
+o!/gineH-gXDj$'o_-[p'2`7[8Q+ZtW9Z9'*P)<ndDEk"nmbQ"B.Vj^XU;mA_['-Z
+$.9be;B6*B)(i"r#uK.e%Pl.e$PP<(R&r'/ddk28OY*[5*&/<M[W=NslXqrC1^ZkG
+;fM%uD)f!#Z;[N</mUQG4Zfj\402FF.s3qXKfcN040>g\;Z[;)aNbp&Y7kl[P4IC-
+@c<2biRCHg/UMZfdb5$937QlkYoQW3D+?O#):\P7/PC95D,[_4;m[iLZoqGAdt]JS
+=B1i@Y_?#[SQ"$!g^#_J/mUu`!j<+Q%+L-2\-h3G9%;Di9J8`n3"6<tKjV0GBqWW]
+f!$)H-#5_SjjqTs<m*g1b<skW[oUYrf$,Jkb6V04F#P3\<`O@pQ$:f]GLjZP!NaCD
+G_8-WD[b[PWpr=[3j@6M^FTZifJR+Ig!(&+hi.?g\BkdbaQ*h-jtB'r=;puEL`3?p
+MuftL=RuVr`?a+-9j%&q=S"N)o+BXJ&<;:D3>h-D/"P,+Pg[I8(HjI5;#$WGQm9ES
+&&"<em?itCT"3[.8Pp674/,lkVE%q[$tH*F+V'U_VNLIN\rELHYj5KFs#[j)&CFmP
+/%DuCZ.d1'3tnq]>HAKP)S?DV4(/\mXg/P.]%\Y`3n(^*3?")S^:\_=]FDF+PJNEE
+H+ZF9'A6\Slc0WZa\1S?gY$.$H$dm`(d-1`Tntus!I,=5d+lH_Q770ol!cei?;Mrl
+Q$(S58U8$qH^:pC(!Q4`"k&\s)81aNQ;d5g\TO4%e/#"n4n-5BO_ch[knfJ$^,]L>
+/+;<aGSbGWh9fduaZPpMl^-Z!?<MiGIH;9-PSl:O(X)RjKDFB7<Bn1g1MKY=&<B%!
+SNn_k5`pkn;3\l,LHpEX5\pG8liS*,r]b+]6!8s]fpG&cV;DTW)6O*:q78l6W^2j^
+6)fiO/clpO'LBG;9nXQ,4E8?i*h6*C)pt$=nX8=l&l!q:(E:c[oHh?4_T?eS_V?P5
+ac@8!.mcge5+EM84=;+KpbL?TTHl[k6no^Ge=LJ"*Q02?:*/D"+X'.6_W3]96p_s*
+aIetd*J*Uqe,H*#MW4!GT!@-@+nm!N>p,r^*m+Js63g0u:?!g"it;Zj>I6g55G.ca
+6l]>aH2jQ"4QA026oi()8\lH[5,"dhT_(63lOcQ/ahKji*.CDt@IXctED*[&6QSal
+am)GS3b6YoT.H0IhG9sV8P(a66N&I>l;F6oEl^<Ta>*ak!XPS):G4b*jeS)M_Ja";
+;TkS_A+!`7H<k$>K4AY3VO>RQ/mtEq_*(JNi^,Z>REjqh(a=g_U98-"0n)Y7)Q-U_
+82b2D]4']>;Wd%m@K(@W^3!)8D<D%?1BJ;f%WnVZLe8889lZ;nrcXBtJMLKDkHp_I
+5(OLiUVGTTiB4M>WuB-'$nXT@k]EukF^D#jk,3k4.J*hoN2N$GX?WeUc8LARfn(XO
+Ol"fSW)_lVjlE>MTs!I[1UO2sNfQs5T$rYebMJ`EP*`NKS@"t^aaMO7rR%OVfZBuB
+X2@\;`gKPsg!o-<9AZSj[\C.)gM2tJlBJ2]PhsSeT;b2dbCd:IOW5dg_9/>-1Eq'E
+S\h?)[E<s&[.NTuFM[9blg&[)WS=98Bb"j&BMh*@>"%tEDR/"lKhP*`W;VZ9R\+Co
+L+3jLC/2_qT#\B0cV_X8CfI1r<2XP5Y"TuDb^f+RSXcMBbmt5hO,UE-::,pp$]JW)
+m<!Jf1M9IKfZYDhcG%r;]_^$omd5$IksYBsPgg3&n*4SdbuI4^LnI\Ld>G#sZ4O;-
+G3GY7WU?Y*m\JHPUt]d_gp_+U[qaI<\>7CPG0?cJ:6t0([+Eh2]obMPVn$5o*gc>\
+;5\ra\+5JqA2rc=lr<>bZX\U4X]9<BE]AI,n2A=+$mJF_")OS5b!-'PG6RFO#]M;L
+BVt].#5aA@@BVs/ehY&2!LTuCZ#M&J<biO1nZXWQ("65!Z(#Z4eG*u>p@4=gEK`_/
+Pl4[2r`=Ejn_F2)Mr&HO+jd,);Pt&WjUH23hp=61YtKQ$eH8n9(Y@b(!,[K"^k(-t
+M7Dr2:i@N)-%&R4GL(+3#WkEF6bG$Y269k:[!+CS7=7p[Hr.M(:tIS2O#=0a1aNRt
+3O#Gl/YY9pRL]js&6kP_E;/&YT"17bO1UKq&>E>QSIc"@O[Z+X5=E(GVtBAT]=YD\
+B"hH\W&c6,FZlmM9s6UsYS-!!P//2D2cEpZZJ*""PY!8c-+@Y%*F&u_op*0oX1@!.
+XBX@5:_>NhD89p5^eg))>V!_*&UV/j`B8"YG$.)CNQ=3)b$A.4go]$=gWjuU`E_;A
+>kqrG("p7=dSG5AG8o-s&Q[^lftJ%\h0D3?Mr,9ZgUu3a?,8pqNgpl3gYM5_^3/?L
+d8[i$i>1jH(H.RD/+-_dk*D8(QYC<'S`uM=O;6mJQ\Ff%$#SPJRWOXFj"9tkTn,Mg
+Lh-DoRDH[P_uH,-!^8^JB_dct8X*TLph8.L_+DF-joSpS"$`(T1CONGq9YD,"2U[N
+TNA&LXpKD,$:(0h5e3*oXC[ceZc7*:):<XNe/mOnNu".eqXtRss0Y+3d$Jnc(idFN
+jCb#!&"%MY_NknQV?iTBl'hSk_UKTn].HP;dsMoTHe(fW*.8n>`19jtbn9<XC*,]U
++M[1d(pD.kr'$QYNu`eFaGJH4&'mYU*fWWMZ&Uo_5"bc35(-[:@Hmg9hFc#Vs5s#I
+Q`ng]l+85G972TK1=UlBKQQC_3.+tJ0ofc^*dL5F-DN6"rdUjl*e`V2IM>C>i6#9>
+Dn5`JEge7piCnl3)Fk]InTp^X)Lc\a$7Pom.$a@*qPl*3WbFaoEVeB=s*eHb&,gf8
+3WJ:S#Q_.J1`VJX"#5VY>W!'XN6j<#e6Fb`66O;#KM!Zu(lY/-ctQ62*#XPW&4i$b
+@jQ[l#1<32b!@YI$q;uIB]O"MS&6U/W:]j(&!od5;L-dCAN:^S7PcdD2H2B#6jE2(
+V$`+dT#`=F(n@Uu8>aDH@fahT$"^*XWn&"H^i<A:>4*W)Ffo.dW*J>k/+)c$ICS5"
+QQ,UD+`jtt.2^8+^4g\LN\Ir4XpUk:aQDr3SDD4O3QkRr=K!OD)`sj1YOJR=k?Xh+
+D!^1DUdFTaMsdcfBFr[%=h)WU]IkM%K-95[H#oP/_f8"unh(l.G?Z"li:-U'$9oWG
+NT,.sS\EF1(c'c^H+%^JVj#$\$nK'8a*7!?Tl@""@hSA9&&P@3^<;/uoVUj,fY]gJ
+>Lps5:dU?E_!kg.$,[2l*sslelnI';#o!7<U+i)^$TW-8JFQ':bGP-5:Lmr57*uVf
+(IF,IKTAJ1I!#iCW5O#i4-C!rnAqiOb9TL!*1RlO%-0np7*ggJn0@C3ipOfAPOe6:
+iPYgQ5]\-M*mF2NEoAqgA>]"DmoXQ7:!c;M3DU4Iml3]+m-,K`;r%%*7]?g@.7]D_
+[N%`='LaH1e:eha;A22EktL_3%#%O(9g(O/[%uY/<0(."2EXtJcR`(85]8F-n/YG(
+<Xh.&<X(k$Y:S9k]K$T/#W6fjfQ,V^S\)!-G7.Q)]`d:o(6+)Q6]a&\<$@FLZW^9c
+m<9_d<rd.`g/Wfj(gI*L<HH!-]j5hF@C43d?>INj/_uJg:)O8Y]=WNHe\f=rhq06O
+!T&nj$Nsi*8m_c,ets[;gN[T^6b$7$'h./Loun7_iO.-qL:;%hLL)u7(`Lt.A(Qq(
+&3t#_=BI7m?K&GT!:_aVUb/3n[\Bp^@ZVXHL(5UKB$2BTPk,^p"-CY0MW"QkT4XJ&
+KXPS/cFf$>>4-*dlliL[Yb6uuWF,i>NnT3t6TPDi7VU<B]1[Lf>J3HU:hQDU1,s!`
+anu@#*3!Zi)CU0KNo.="gNMbki6[W^)IK_7qousnVYq/qSHeQ1ma3nW`WhG9j!]%g
+R\#hT9AH#`F3@WB'6F,r!7V4P/$P63le@EL`\(0>frt@X=SR.pMU0rJ6*">)qMk>a
+l`]qFN4m:R1S*V%'\%3S[(.!S`3eCIeTH-h")mqD^QWol#2Xl=ST@SuHi:-a&b?n7
+P53oQ/hScPU'"kr=j4,uJOSqK'%e74h#$hqjf/-mGVK+7lj8&Ti.6MnNaEon,>>7R
+Y*O;_!oM3=KoeaR0f#t>=ID$>Y_<Z)F]@Ls1`1UZSe2c[']^3cP9GKJ,K#-%&YYnr
+LJ]aV(KMSY+eaOGO@h#*(M^b/gcJn`/?MA3&ImYiV'E4logX0P)I+KdL<s>/`]2mP
++1,W,mC8@`!hC#>5Vu`AOM%_oC@PgH5V5jsYt0)39r(WU2%fbR`5qLijGRo5,RbX)
+!YZ\_4I[Y&AjOL`-q@h\7[0\kitP'?8L0OfLEs#d(KT<X(qb<H!5tuj!c"C'oWNV"
+6<6aB$q6t;.Nq[K9LRkR+!^;;,1<na7@B2h@uSU!&c+?/11mUYjP#YD;J4*bq@4cS
+*sRpjR_"p4Eb31ES.dM[S%7K9kE47:F-)Co.BX.(9^S?=ep\4Qbs*RI1C"POX\a:d
+>,XR>To^mMcY:ZuV[Ts<&pA+)g+PgkgomJ/hI4ZD/M62b!$tU'Ra@IeMe>/pH[t*g
+9*u=eQt7k=V<4.<\d]E].Wm1>12=N!@5(DBFcZ`tT+\/N)I-P1NKc1[<!c8ePK>PW
+'f(D:pSBn5HaQU'b(S:`WB?_l;^o[PG!g9UI,W^<Ih;%O`N!]XTp\HR,si<_66TZD
+4+f6kWk(Up,iHuG+<ZJ*_OI#)@LU5'.M>VVf_@(8BVR"70X1itoR-lO`LA\b.E+Q!
+3rd?U,;q69?8WsQ?nA>0+plKI'T6As9V&@>-M2mnJtWZ]+V;,DI"K'O:AjGsXEZYu
+n$k[kGL$Qu\ArpLguhjQ/`g1\0$pOJ_qJp'NGY&,5h'(\aCZ4hr4=@T_d4T4kO2:q
+JYZif=prr-)r(<XY+V^R[mo3bAc"eF&?iA4n5:qTWPDE]UnfM+jmC%]7>4%D4ArtX
+C]fO(%UDgFoRpfq%;s%^)\+6QgP8dKH;4jtX!YJGSJ);40e#^3@c\PU)KeWg$(Wi:
+o-',&`]HdomiPLb*hFrY6,=EB+;mjf\?V3=_F[TR<84jLmSS4$=">2b!krLAM7$A!
+[k:I/>-'7B>ZSCpGI(e$XWQ+m=)@Np.Ygrm<jHF'M`/@^AWjq@eoErH_2TM4BVNg6
+W)G_l=uJMHY14SOO6L:F0C2MV=7dW\RT0-UFm5c)dWRgu.o.6--(ba[o=a>_LF:>=
+_Nm'8?cuAL"(o*DfCG?\3\+=.eV&G1;CGsL8Kt>tDm3D4-q8$F4);d'JZSGAAU?;)
+kA?oldaKdV)c`INSY3AKL9oS@*0E(e$IbJ0+DN0eW\nCmQ'sVb95P+6V>\Q'[sK8D
+Uf!6?Hnq?5qLrNBl,U``Lt(1SUq[CN(XApGIp>?fE/ke/E;V7rS9.0W>S5.ck47[)
+MjhA_i>9(<9?8d(ja!cOi?(,1nrYajj4CEg3HoZ.iIOC@k;hip3h#Q]qh4'e&?S"=
+JG*?gA0>eggV%7X[9]+lH^sWW^+Q2-?Q4pcck5o<pXjEAHc1Aj1SDE_b6D<Y%R+s6
+$Q&RFqdngm[=&:]FuqDf/'ImCE,%)!2b2OCGBpQ$NZZ/09MFCWJq_cO_Eu<EY@1B'
+]Cm-]Qi((KC]%UoE)lH(M\qJ!ZYhr]+sfLrTbe+4F._rVC>r@N>@PNVK+U)RHN,MS
+-?XWc0uUGF2qhG`4FWE1\jT%[5?_I8]D/X`_FAF&mu#'1OM<\n8*V5X,b/fL+PquW
+.Bb-,SBR7<bO*IH+XcLbe<:O&nc"$3/T]h*qXhi"9cpJp5?rc!5GhRRDs^]grEZ"U
+>b3U1POFa5V.tkOp8s0\T'7$/WR1<pm]S0FTT;^=mq/=ehPR:SLIuOf.L`Tk@\H=@
+To1CAn20hgW3WJ\U1b[BcS#I*&>Mb8J-m3K:bqVlE<XKA[u&U3a981e^3"*J1se"i
+l3@Q/%-_M=l\];_l59j=10^KuV#qXk$1<,>OQgL^V^JpGcX<\IC8aY3""$";l<:_K
+'W>N+V\$M=@eQj=CjF/9pBnS,UlHj\Hp%gu_kg>*&E]krX?MLu`T(L%d0>9bnj!PX
+k\&%4">I(-)WhCD6BG1[#>kp7S3ncg&81j@bPnOhpBW=O]'@0Gb/QfkE6F0*\g6:M
+Yu)2Bcu3Z$_o*aGMWdNe)&,LB/+"Oj.dTK[JJX94_o+6"j!`DM6Pm\(Y6O^&9*iLp
+!'g!7XTo??D-X5qOO_:rZKsuaV!p[f.2jm?)9d=Q,Z^kkb#,);Zm;Ig;51B@+PEcR
+.1tRSET3M/'Zc1t7UU2O&^7WD)\ti^(9R#!lW?jNFLCIk1CIU5.fgfN2RZ$D(oqJr
+Z6E&&Uf&ZD-SdH#X+ErA4!9XO\HPU:N4uM"FNdWP<=D^87<Z?j,$(Fe=U\dSCtPrq
+:q_R=<\!6:Oi1Lee6Isd>`8M\lf_X9">Y\<^64^.-2NuARTU5;@*c?p/I&@i5*u`a
+>mgZ`&VV_J-7G^6\Z?eJ$m8[\XCq!R0^T`.KkVf+9N;=&/-[B<ARNH^k1%R>BVkDR
+L%N?bbgJi[?>O<)$n>[ZE\V/H*)(bPK*#LUgG+D60l:%5V=^<Pgt"hT?>EH]cR:W)
+'XbhVeL\@C/Fm5n)U!k+ZkGM<9V@1db[3jUddHNg7R59H'[&k^dO%N2js8?\G#Z^%
+f`WlcAld>,>Wp=!AkaE(jMKFO@YPPfBam0hm@uXqOYI;AAZ_o]`f`[;\n=sKAh@"E
+X]f>"O?r#jemn.4"1gp<iB>HBcn4nC-BTG\`+c@MgubJKVQO\[Q=_EYg''7dmG)9Y
+-;?t$h8Wq_:;CQQJO..$dB2iuPMJOe(srg#FQ;#Dc5(>QlJsQ967sQ&JnF!M6:WXX
+/eg/)N](fn3d0Mj6dA)A:.[g.I-@K0j\CVMDI#^UAp91]8/,7gcDp%T]R)%rkJN,g
+DN>XuG3&+Xkn)!a6]-4CQ@&%mH7l$eDQ)_.9RQ/G3=a!kkM#1mYj:qf$]`5V$#8iP
+BS&V6mBk)fCP[D!P3tt2J]dQN$M*Y-jF_E?n'IkZcu+E]EeGi1nT=\_b<Ck<'Sp5V
+M(!V$8ZqWGLA.Xb0uu]T$tD#rC5aiiK+Nr?@kR+dC+6PB&/A*%06(!Jd.#AUdr9(!
+BDDAF3;Lkbqo^\hb99mM56R%;o'd?ScN9.\#5j*2=X,,PogkE&1B=gRqeh]Gn#olT
+[e:H9\g<LpkjnEPqH&SGPOSWpAU..p[e?d&P7MW&e\X,H#4#:I2<bWF.1Z(c6CWm6
+qe<iJms>&Re;uQ_Teti'_rdfYn<`11+UQ`a.Zn+r1p8BTY:>3ZMM5IM151[T!d(N=
+9-C4<6L&MQA2YR?8rBt%e>X3Y]Ep3bCSt_th$)u.AhI8\NUFr43\E"MT'+,pW(*mc
+HFp0c;Cfus9AO3gBW?cC&;lT`E$W%l5eBic&iPGWb,DtX.(lY2SEo>G$gS1tpBQWK
+Tnb9,/,p#q%\DiB#DWHm;.C28<=?0KWf0!5bW?02c>b@R`loM97eWfnp8ChBW(.K<
+.\&oX2%XMKaqR[DpD._1=WDDa7+61WOae+aR10`rXLB2c"="ekR2SD4e5o"WUopk?
+GqSJ/)ap^.CfM?(<$rpY:H)b&EM-"kflV9HZ#!hfV!04gbeDKL*DuPO[r/?gim"am
++%4ErpOooM)^"/D+jplDb^Q^8*l/I2DW[`l;AUG`G#>=e,:e:HQ9ZfQ$#lr2;rWoc
+'#>g8)h!Di]]A:f`L-bTX!@11b*%#o;N+Tep`slE.:l\t-'9kOS?K5qYIFN]m(P7g
+YoD[GJQO!@Em5sK/67n_BWp.)12O1,_d(Xd?1T<o`JVWZ1GD8"KdCo`ZE,rD2`)a8
+KQAVKnS6+mZS<c_aYP8K1FcB5SllJtaq(()'&9\qSGNZUbgOMTc2]^Wgrn.*5.$\`
+(oK%2m*nJW2Y,LlbkbA(NA4P>@Eg@NDcTK4.+<7)eBL!-GhCQ1l<sCl0Y"^FL)ru>
+@m#Jd4N8Yt'1\)F*=AT7ea7dHF5gM;-;-ej5a-2J%h"DWRYW5qOq$tj`RBt[!C8;a
+P"#%1"MTL?k[l/=6B-q4<cm5YSDVf"cI*RjAHl_J4dD#+Q&O3ee##o8Z<&X7c=N&!
+D!Y8gW_:?o>t&?LKoB)&LR6#h<lS=i3K?s^O,%fGgkMIW`h_EHr)I?jd7#8Ajd+`p
+)HhT*A0tbr3I`t6jPQg)AZc#N!'i!r.cAfoi>07#'LF<?!o_037&!mRm]:E+*ca9u
+7?03G/icI?5=SfCT!maSFDg0hEoegUG#XlAk:NAAL3HC%j&Cp!#DD8>P7>R)8#Mtn
+%Z+gGI1(g`l-uk_a2Oi2]h>_r9BW3H0!e6-!t7rBV67^HY+&pW@nin8mnX6d%cHZu
+iD.F)VR5p\W'a@A'*m6J$$qG)>,b>Z3M7K[oE\:"odmK#Lk\\DJ]i<+eO8u^U4fr#
+XXD]dFeqg_ZC-t8>=bcGojqEiFfq[[I/;ud0$dSk.fGV-=*jq/.j;'<JZtE#Y;]S\
+lQ`Z-3E^8!Q.jTMg=2;tAQh.+rK*4FM.V/Ao3.F,?7D)<Bg26iH*c&jp93-B$)i1c
+a/J72pBc>Vn-\mtEF%)`P8)61BA._*o8u+GW@(]U%%/JberpjDWMNOil02`*GGi'/
+3\-]1K)]?D@:6!HToP#$gReu=n>s7,@N$No)FgDFs.Zq>%P!?iO;b;\IRW`O7I^k*
+nIN;:<=\DcBkd%N=<hCTHY)7_"9cG+0Ono7O$f"!UFN5dOY^W\.>3R;Sm3?Ncug*$
+/4(e1;8dCh&o/)5F@>hi6C.)XC`gT#1C4iq`@NGEK@m,'Q#O#(`+j8(ZG@WL-cVJR
+C\1-;G>+i<I0gebF\6]lOOh?HcuSUoF*<"FjPlq>Rh4_?F_Wa@f1?J7_G2fX)pm!T
+;(9X"$H@J/:69)-Y\2*UhPno8WoWlR"Rr(#K0:"Za8FL`MA"&O2PXOFV<k<,Yt._g
+1<_ZKbW'dHKf9ajSTCV^d4DH)(IrKCq/VUQ,3(D#;EK#!jO-,jFcgMe.b7J%RQg:O
+YB"9!`HJGe7FOcLY_CrI/R>hEBO1/Ie^h+2bhmWGfWn3L*<iisWH>H@1O/JK*bA`e
+/Xi-unV4N>Ko8E(GFsZhS6OUC/7!UN1)Q9s,$jN"g="$qfU[AK+!EV?,@uuTV'Cmc
+@T]2H[(*iQAUc>oFCBUFN,hQGlTs>]`SAmT=b\"F7HZ'9hq].3]Hu/X9iED6omatC
+i8u<$"kS*B2h6/]Jjo=K7KgU((qYM;I3qH7`Z2NY7kA7HJ.f_O1:5\90Hu\ZBM/,7
+[)[g5;QaWW]dD%<L<gi/c\"]#c)/g?KJT"*:Zpb/h;_t`q2sm)m4cP1Bh"MZD9\NO
+d6Fba`^X.Qk%TS!c\@Z%M#OOB-BR-j*!eg.!N<AG,NJ-Flo04."9>AF"6+3MW&S6s
+$@p+sTMPt"W!o?Q%KOia+Qa+Ujoo.Jn"@Z/+NOta;@7s(!MGA;6Cr(FAd1Y9nh&'8
+i**K>dL<oklsN)859SXo-6jTp/cn(6?T^S]A<,nhpES;_$(1H4)>!t8p#6k]JueP$
+C7>0(S\s+]6f[dQ-he]^8tU\\+&2;j;D17WpuqPG?XPu\S+`J!.plr]l^RaCC+*G-
+pRcO%J%,;>,!d;\qB'qRX_%-6&1t\1r5(Di+,g)I=o&*To^2bH50'5.b^'b:-GqG&
+RK;g6>Ta+LW8p3C0nVms;1pJu<&FbKV*J_@?o]#3L8"^)b[M\Q`8\%HaM_X*N12()
+BY].0/WWM7;SeI1>pfi@_5&K@`*a^ZcY%h1R,hs"(lf`Dq4n?R#)#bq@gHm7+q5F5
+L*K!W\8N7Ge])Z4eS;WQMGbr^]'R-[-F):%dtuF0K0P>kA@@&^b*!41N5fg=31sJP
+WPfu\HfZ<dCTi\u1,6d,bV6D7m'b"G9.1pI>c2d\"S?:[U=&"t8l3$*18IjQOK:TH
+'f$WgEVUW`Al33sj/*EVDVj!;SEOV@RLF6=1)Rhb=6pVFV%1FDV;+5S#CeYcaWfLJ
+D2Z6CQqHJLaT%9%jmPiS5+-jLA+%Z;_5A?o/kR6+.07Tn3=MQoXq2&fP(4)R6Tb"H
+L<l@IObSsL;#3LeWl5?+cQHg>6VbKZNPk447%q?T0H)@U.*t4.#k-O5)PaBYAGV%B
+bMO7%TrO"h`^utK)$]ShG*.N]du:m`Y[aoQL*<jKgq8f.m]\g0*'jt-6)\WP.h_3_
+`J1ZB;&%1ABPd?5d?<;pX><Ou2GGd7ip8M\ZFr?BO*\6sL=>dra@_UhS;da&.`"KN
+ZS_D5_@1b"36UrYrhNFFXRf%_-m^T)L@G=aX/'1:V!LT"eOr2.&qo((daY*(&l;ND
+#tEE_W,ESRo]3aq]qN*j>Z_UHmnj9cJ79J%/:>-/0JM=R<6!74=^>+Z9^>^4EC6ua
+=;-k$Dq()L"``'Ke\te?[QKCX;@^Z3;F7jNaKE_[Q'FVg2,3g`>o)_/:fn>T++_q,
+6]A(J!PL,P<d%B'%H7E%j[!A-I(sk0p67Lqbb/dtf2jfs+'dgX;u39=b.?Docrk=+
+=(-<\B8P/![NAK"faG$L10*18P#Np;8rX&k'2%h0'"4'u9DNOH@`)k+=/]frm;@qt
+p1B5"0q*!pUe=m7Z*GbY`O-(eau]@#2Xb=!E2/Jsa#bs`=E/G_qHLYI10=&JYu*R:
+)6uY7Q3+j8pO`J%./0V[^?h19O2.dl5;0[Hdl:sgLDVY%5cFJ\!RZZ>mYf-S>9oil
+Dr#R#cE^Pn!EMG]Df:k^>$k4WELS=?OE7j$EK[OBc]+gt3R;Q=pO0K2kQZI5'mBmC
+?tYFF)K%:iCn>:UU\UUUMk5"!GJ;uh(l-YV1@G_IW;\\1XGS5gc@Up9T?OG9OuKVu
++.NCGm*-36np7Fq]EgT:H*>!sMZ&YO&7$ULrY%gHkDWX[5%)dY_8[2pT>UMXm:H/U
+2n4R"+d-GKC'(6170=Oj-\_#k*&P.h$DCu>6BL-s.O6GA).Ym\&1.3:k'6'\o?@K#
+VC"K;5agVIj+i]'&&F?@A`C?;C,'T*2,jMW85i0>bUFFJ,NasC\lOeem-dD&BU4HR
+</p:=o9E^!#20K2Iup)`3EQA&gClB%jW6`S3/j9R6hjbT+oXC`nHi]iJ80)`%EV`P
+#hTQG4fAQAV[*:VO2KI(jUsDeKc(pT6A^iO!HOlJ(3ASbOada)T#sFc%Tc7cQRf@(
+5R/2:<F@h-1C=%7R8j2+$9`kP/lKSGW3>+]Tpdb!A1Ak9rZ/"IJ.,%409C5H-8`Mu
+;j')a3B"FnHcJf8Fkt;qLeQK2A1U[%2EeSW3$)nh3V2WKK:)*"(ca,O&ak4q[YXS`
+5r4Y'cA"g2*C42!(7nK#Jk:X;5p8(B6g(*Z2;/alBTmW_F:iJgPD!YF@;[E4ZA?[b
+'gX:!25,,?J>H.U\l+L[+A#b-d[?Fp./\*.Pd[;aC2Q`oo8TYiH%.:dCe%'ee>b@q
+da_N!n#?6gR1GOp&1"YY!J@[-af9qS<7ObkoAs5b:9^jpB3)$tA$,A8iRUtf5or1'
+UXQr_SC3!je3rsX-sFI8Q=jB89?jQVcGg[;B0]Ds/-[[05ZgSUA^1lMX=!5Rg"Q+4
+%WmQ/[V]G%X%cBT6-b]jPsF%a_GP0$hQh=1S"TqT8--$E[l!s<&k^&Vm&e+0QF/j.
+8KaGgg$pR?cK1XUJDJ&KnHLi8MHsD6FkdGLZYCiCfh9"r/o%j"e1E(Rl5b0:2<h0N
+:;U;KWI-7mcj&#8AR+M'II&ieX&lU2hJ:kkX!?=O"W[?<>7"L&7@ST>f"tFfm=[$e
+GC*=\kMU[FL![-WZYqc+iA@pANcWRc=;b>E&nK0$%.tr]>8>i"B88%8*l?RXb"rh=
+D6Q0p3S:qb8W7#9nI:R?q%"1D*-+\[_W_9u]U?\.XBNr4?XDn$QXRL,LCX#P`L-e\
+AGip'kh]1Z`tKe(`&S$(iSD<A;`*UHj.#O$%aI`sL6Ep:_f94KHW7<miOo,N.P>,J
+e1WCaN<[a4Q7S*A9.m&X*K1W[;TN!Z6-3*PV(tp>dQ&<U2Ob!cFTrl7Gh5OF<F)J@
+ZcCR?hagf'9N@Rj+?Rh(&aEV6'Qo[d3R60[h$8A3n7J3BQWAe*CX-#SREfh"@a44C
+4B?QpJ8dRoA8.GtI.ZRS[l[@I/e]s]-(:P`GCsbb8Sj0aGpLfWY1C+P=g[Td]%pFB
+@5f^)-9&ojBKPY#CjT`$FdD?LaElC!>p7&@CO3)Y:>$Mn!p_9.XI</D8b$"*V`;Y;
+f">m8E@OmEop&\?<:a_Vb'U&^7b+sPRu>hAkisT0l/krj7.XT5V\_K)dX:JPCp&17
+[jNcar1cG:$@0I66i^h:Jc'WH>:?l'".n6sK7fa3eb*QVYK2"TlfY`\is``O$pn66
+1==eJX4MQAArcRZQ.tG>BU[Xr\P"R>-YW]lPJ%?,G+J*T\iVNu3m%Kh=M`I5:K$]1
+jd&('iq,?ce_*Xpi&>kEkqqEtFKu(FSaS]&P1/4Y?6dXt(]rJo:T6*K_q$]_kNgj2
+TW(Wff_\]h6@C(6p?UEX^Qn3L>5K<3BT(ks:NJ?V!sJ<L_,<67QGPh#lY)(;n"83O
+-]f5M5j0Ju'@`Ipj2se`)=\"Zb?L[`8mat_X[.EgAr=_1haPW%qBO+\HkGQ+Y:2c1
+^X49soDfS0ne4VfM8T.FbO?'W71t0kPSl]UN!L+YY.ltF'M,;V3C+'Wad'D&P=aKD
+q*2ZqCmIqa5nQJqkSXgi>nDk?_.a@pH;$Sl<g*8+Y]0?"Gu[-"8sN#16!7I/S0"$H
+(DY)[631I19I(C"KU)`GQF$r6ZjOWp^qj0&Q&0'!J;b@+#e6re_J*Pe\Rq8/F$9n;
+(UO2ZR;<X;$5Ppj&;kTIWI,Yd'>oZsQYEN4M=2\Y)'8DfQchgYHn^tVA/[MW(_O?F
+'L'F1-B,SZT5/P:)qLD(V8#Uo`3H)?8Y7!E#b$WMRLmaWq=_ZbbJb^Y)UYo2fj]h!
+^I;@S%sb+h_D"EC:)eJu&"1!;OiYMbc^QqkS@Q!r"4*K7]V_C;Sron?X-jpsYq#"T
+SU%HY\ZHllg5H(g)JR`nS7N`2bT)2V7R=-rq;\"9*#`P?T-S6DC$A,aUSdS7UHl#S
+U,AECgRpBESdIMK1'3tDJ!p]7UZpm5\["`,JY@A(+tS0haeYh5cPTOH-*1>mgN9%8
+8"TiHT+L1fC%A'.lQsZ`]";sN/$tf#ZQFL))^L836<_K-kG:bq]=MH?`0_OWQprp"
+3=rtEX/nb-_CJ`^TAf%H1i>BKTqB408bu3&)p8_<Y+N>+T<Vk'Z5#f3J05I'+!dCL
+_l&k.rM]8b4i2j^oWG/b@7qMsW(7gWRZL07Si9?O9-P3FMNOP%YH;W=%;`12Ehj'?
+[OC^69C%\4m(Fl']8PBp*,5jA+r)VCYY,V=3HW:j1)MO1BHXUpT^,oXC&4@hk)?SU
+XRsg^<6u\>`6:7Z/;&s)o[GRh%k/+Nc"atdK5NX_c7'GhTq^:7j*)U:Jk_E"+`,HL
+!m3njZ8WC+_<T^tfc2q-^+L,//el(0EYpbE]/U3n*:o+AD!&46ZnE%!Xo,FUq7r]8
+m\,=)b7`(AEVhcNAC"IuTnN+dU)pIjS0FG/T^(jD=sg<rdOk:P+q&!YK*f]\W\D*"
+:b8KN1*O!!JtgFbTnN?jK3ZS4l6loV1eJ7anios_/tmmhTka0r"&C5S3O5)98rG4I
+4%:BG5ga'Ud;\'?fXqN0YG6_4,@\/=qE.WtN%1#X-&!5L@Hp_\4jhD:,NC:6/L30Q
+2DQIDd<]Ij)bn_[[]sRL2MrcVD$ctH^aIqc2kj&%JkrOZY,#>"dApr]>$a**=>sC?
+-=m1PHGDUWA?LN!-04nIPiPVT>V:W+V,M5.X*(=$pS29^-S"Uad`NBs78D!hcHMBI
+N92G`F<b8PZf5jT.QK-pets++dZ!lFD"^+TDltQHXo0KI]d5)%La@XteSS408R&*e
+kU2k"%'k`7E\u=[1=^\feR^TdM:/AuP9Z6ZdsY<HU6*U4)S;0&ehW@7%;/@fc)IG?
+,>*ceHD*b'PUI_V.Oq-eHCE>m4?Tj9WBG;3C4rQ9QD7'G2bL3NHG`C=j%HDI\`3HK
+_M>3-I0a#\fBUOP"KJVfYF/sHLg$DnH6fN-D(DW8fDDJTU8l@.k=a=%.sbI$7>iK:
+KW:!+=KJ/Enj"1P`?2tjT\B+4RFJB<rlL&6=_d?WC7SLB?RoStY&Zcqr!a-aGTcjM
+'LG8>$4W4LjZt@l//=p425;`dUK&K.P'R&\7"?gD'K@Se82?f-'$qebS&-'2//08>
+*NYa1^"WptXIOI:FE=Q]kM'NQ/gP?eU#B+<004-i>H7DOWhs"&5G'@G.FHnPU#anS
+jKAlm>D-([\[n+7kJWq-)lh^A;c]tWaXoZt>&s(k6K]C^bes#<^%/Cpg;KR59IhTF
+[%bAb4$>0leLTJ+><.\D6&[V2otCd*(o%"p9!&s/M*&8*Y<cEt$!aKAh_+TZ>\2el
+MXnUVi"gX2)2g[E_/-.YWj.`[QCWk)>8/V'm3KRS(';ZO?0O#t+KrUTc+3D6WqtU-
+5GCd]P(Np,>5'f)TO48QQ'6MJ6kD%7YUr3Y?g5Sfd6HCM<>'p2?^!(1r!p#m"VaWG
+^q108X`?+p9U?'$P=h3M\Nd%t%2:lH=LF2FV2JC?3tW&Si=RP!.j2!spDg;E1>+Ce
+[ME5nri%Ct@B&-=>Pp0=)QN3G5RnhIQ("sElJT)e7/:DW_fXm0,N-ZkdT[0E*MP<J
+&u8_]@]LV\X$o<+%NE#"Y,`9WH9&4_dA"f#@k/0$4T2S=-fXG;667p<VDr#03$tCQ
+%r:oL+WI_!3+<pd@(%iM5upZ8/.X#8Z#L)PCF4r\.A#$B9J\.boUiGG8$Q)d0d]I4
+WI'\BJ)]s[aF6[Al-d:*N?4i2(X-nTfjs2>6tIs8ZANd91Fcsr%-<KZAW<TD=H0[g
+<$V#qAH!;\^lkr/G@hmrAM)?EYcL%)!"]_D&2=;/dY!uE.O[DJPH^(*Zga.]#N9b2
+@<;jFr<Eo_Z(>_PMTS#C?>PWn(QjP85UdqnX8]2g+2BTc'[-F;RU9]4"dC`BOGV$8
+=Z;M@Eu_4J5hSN?'FmKH'#A92_#t\n?@Y?N-Ga4=6$YY\ZmqSm+Hq6?6-\OXjl+'*
+E"q'h'_-ij0iC:G+lsl3Pp,2)hO#$\RZuK'*eZ%2A1V#\>Jf('_)sAV?CDgks69nl
+(-1Bm;<5JLc9jS56(Y!l=gXP)2]I\tgloJi'M]K%?^SC#^rE4;`(]J/YX%m1_H#(<
+W7OJJa.I/S+)D:UoI?J.\],U"42&6D1Y"g,0L6$uR=XP?&`1J?e![hm5kLnE:rhoq
+Y+'"+ROkHu.C,a(W$<Ida)9(l<)b0fInKh2S%6CeaeYSV5"4Ok`UY4B3[&?>N1<n-
+W<'Rll,1U7>ZffQ`p-hu_E](5SF)aF*$P^W"e1t2QCM[',jEQ"b[Xe=KUc4p`PN/-
+ndiafr^PlVm^8+qRU!lRUE5nB=@@Df2=qmZNCC_9W%<!N8_0Nn"'UHQW4BlB7(c$M
+q'<n!3O\N.(9HUTF2c%L`;Fm08]#C,Qu=9u8(DdOduBjONLV5QmPBim]8pn%RI4jV
+`iG=qo9:;cK>uoPa==1198UX*T,sP#nKck,C?e=[l_F*0/Dg7a63B5d)9s4^c89dm
+0)JHtfMF,Y:b7[Qk0PdbR4KVI:J@!37$T[p^FtG_<cpS;o_6Hb4)uo8ntQ]cZH\q3
+;%YeN8lJQTCAa\JoZ@PF)J\k6EMD&@(<;DU$9Y[n$4bHP%FIZB0?OAM[li%V.8f`C
+dE=^a3:0?T4%kP]9;<LM<5HtV#nN";V&ZkIe@ng;eMMZmd!W)rr5c0BH;(^lbeiLL
+7)O'F:fA(U0M2:&N7(Xpe'cqR9ps_[LFpdF.a-o+c`4cS6YN!JpC;;M2dGm_%.UD$
+CS<fO+K[ek9]FAlj73oG3"34(>j&195ctg5/DTO?r2s"N%aN=s:0cSH[qd)Vhp?9Z
+:_M+#7,de,'?fF.,(3a@Efit4$_ZqsTCl5*/iCm2$?tZR34-iYjSWu!$<E4=Wc\S-
+T7cVIZrMBjpYPnC;M`M:QdG;k:mAghj_;nDC$Nu"=5!I"H7u8Z%B:%7:qX-X&t75`
+%SHC&mbJX-&g>D%X@ksP9ma`Tbc4T@W[A@N-OgkoI43_\D:fR^fG-L#'V$D8kGAZf
+-7T7r'U,=+\YH9j;[&/WhUeNfNN#+r='jg[8dDh"-)HkRaLX=*f</9d.+r?)fkQIK
+C-B?"chfauVk:P-6h-s-1r`NHSR"*C9fY^N[)^Eo_("/<6+ZXH>!1EU%$b7l3b"X@
+Y,5`1,E^X-"gFj5YblEOV;8APB?m>97+YSfW<G/u4\@kS6U\%E%7N])D(o1o7bar%
+>H0jO131:,2!PN*l!N;b,$75:@Di=._[SQh]eDg542[-%_hqj>NP;=Lp!h2:VnS.>
+`$Q^SNMU/>i14%8I9j]I>a>WE>uaYU;F[TJnYI.__)LnL,paC_JKr53-ePdZ.Z6Tp
+.(d1cK4oc;7Uo<2\7@H.$qA-SF<K6<JjH(ATtl35&;%aW,@Rr95nAOd@W8ia@O2s3
+8"o$(`,6/'ON4%kk^_f+2B#*JZZ2M8CE&ki,Vk5HRWf[(:1aT2[309@T0VYH0q=Q+
+-\VsVd`Rej@ofI$lgb(aC.9nJ%.(;N%1:8b[b>GX]/8f4C9:F:'+8(i,At04mWZka
+_E3:L%7^#+mKdT4JQp,=;787GPKMP_2Ta6Zfg3!)X8+m^P0oK6bqAiD9e.HX^Jlf>
+$l)h=[('C_fBW@lYV_hD/"/'81H0om=Z0*=UfWg:)FH*o/n[gEUYo!i2$ui4);L(.
+0_ujr=22M7n@O(iIrD#ucjWC/>:7@'bPLfp*l"&=m)Z*-lYQV\mF2F0\$.n?)7V7,
+!q<C4;A'kYa]niQU9!>6)7dtLr"uP1$pK6B.E!R__9e]%#.8/;OV"^YF;E<Bb.qW@
+/Q%`Zj/5WjEtCBpMI[U9M^2.2/8U9*)8OEp(FI)K6aShG6'J5aL-`mG*$V*!W]:K\
+BW_mUdSt&dai_D0K!!7COY!c$E[DYdE3dim#3\JEKFU@3X"1=:KWLZR1]#c/U]H^)
+ahMj@7N0[];W.C?J7tY]cJ`m9&5Q^7Ua+7/F5%m$XITr"UiOuh;Psk]#,DIp7:),$
+OmOku;cD4e&5TU3WYgK\^h!5m.ntbd#4\N]A4a)4&f]N0]jh#_OF<_CcrRQ*AQ\VY
+1LDXGb98'"iOr5@_tQ$JFOmfnM&"aQIGnVfnETEZ7mVrN#i(aUgN4qH`.NS@'g;Dh
+#7qpdM2)](/L"Vh'TO.hZE>Qm6hhC%+6,s.n:]aYU(;e(GodQ8:0@b*MdS43+$*p@
+>m0]T9O/=##8=7CL.)eOGunF5bpst_\4+0,?ocf#KO"@[)&93'P85!j2s-p(C:5q#
+I:1NuAM.!,Xn@2-R09mPhWSF1*7e=p)6WAJ899@'RuXHMC+-6aKhZm4.3_g(V'E,0
+Q$0(Bj4lbTU$oU!KTU.JhP2Z;R4K<"f\EuXQV+n!]iT,Wr]SWf\%8KJATB.oWcO_/
+YT2e'Y>uY+]pE*$b<:;rY">+KRjMni3X+Fc@F!!MppZkEfN$d6mGY:COC<T_)d^YO
+TcTHGm!$U5\`n"'s/0jkCB(,aI&Qeb[/E20@7L$C#IX"P+.@o?r"c3YNI"SHpA:J5
+\9^oHs1][ak8iO2H;;BrUdroC)7.4@E"27\a86$J1UVe;Ql%Y(mfT3?0PKs,pGAg?
+!M0&JJT#iL!uJERTbHK:W[[G+#\a)YZn@&nW#2>[M#<t5/;OTZ&$9CWqB@aWIdn^(
+5giF;*qW$SOX1o-_K)BD@Q0((7L#LH'a^SX)M,-p0gd]1rfPWdKQ3fA4m:Pej'to1
+De8/JA4[dU/.G#T.>('eZG*)U5^Ms+W^!@YQ(HcdC6+J!V.[YijE'[N$7YF6\"tBX
+Pa?jhdNUe3M]F'j:QnE)#0>=?9FFea;FH'C8uV>3A,La0EUiKiA.8duMH5%dk!2.V
+GjjbTEe1O@I7IeL)P:KHM\@EY6=MG]hXn`TE.,f$\PY4XS)0VG&o9VY3>9W,G+0(D
+iQUoT32,@IJZ(IO^<,#n*qEKl&)M@P83Z;$CoEs<.X+Vm_`lhm_k']94&5F2NQ\>Z
+O!)l(K*DcP+[kjV'&8%7ahYY>Zls7MAbS%83<>J#+*pX&O[7O<6m,W5U<gD'"%Y!K
+92.$in7n:UP+tVu0rgtP$CDJ6AI)RY5CL\7Tg3>5NSreUVGFdG+*\jal?!$'n1"+\
+GW@pcX>"'_3Y8O\ZP25E.Y\W@)q@@(<+%Qg5&`]>T+H'2ebsEdE#OTYG`;:Z;VHBF
+hRueOogilK,d0u2MUr[_>2Dt.6f@(",C:5$&c8r=NhGcAkB0C`bF>C&AtiFnPRT1g
+9!^-BMV/oW@d8P8DKNnK<TJ&fD0;Ll2H1SMQN^!`ZW3mrk-NfME2h"A[;JrQePN\n
+n<(=BUMYjl'J"jg/Yo"Te>hah>&SO]jj\!'?%CRSYjH<;b]P:iYLq<ufBR-U@5Qf>
+hRf>"*N=7qllr8bAii\)[9LAr`qq\fk//\md:<u`oi@sl^?LQ,>h%TC@(VtVCT5Qd
+1h"HV$:BM5]d1K2&KBZ_%t^crQNm2R&Q;1J\?9uaB334*i]:(tC(;hoR'fDSQ!m_`
+D-j_3T)W7I(-p*Tcn7dm)_bZ7C%<i7`:\AejE8>S13$'*R71)@!t%Al(.TTd+"&R*
+jJ'`X?RG8U)O`?sR5.1Z+pQtZ3h4>n'kp"ZlA2ZV_Oa_JR8hJB_QmcO]q3=d#>tm?
+\K&"OSeASR,T6BYfj+egMZT_0=s1cFbp:`EH%LU9A@OmV+ehsXK/(?dpk)WIWJb5F
+eA]=*BU:`C<n=<#HGq5rK6UK6dFgZN%:A5!Am6M$2+-PR7I2njY`>l2=8M/rCa4Fr
+(X9A6)b2i('pZ+cl8[N'LE-s0IXTBD_oL]c,LHr9P4C@9aP21k&IWGD$=1*+"j;1&
+c/k?PQ>YPZ+*&Mf[$'TLPXp.\RQf0\fXNj&6?Q]d.RFc<0$7L%M1m[];?q>Qq+J<&
+,D2b-TuQ,USPq"T?LZqgh_[#FDs@anW>-5['lo@f8k@/Joe4CO_OFKhUFhaBAk(:-
+V$?>9TB1c4d$ZORgUuK?nl=q.\ao2kb7URk`LcBrEkpuK8t@P6_UDQM'?"XrD(sh@
+^R#l]?VU'Lo!U<L:Q#&9N.GTArlj(5,8'+^k52*Kq!(qu!Flpi]s:D]_]?W.6``SW
+Y;S2e=QbcX/;i>.$[fVSb>u*qrM[.T<m9:;5ASidTJcGSgY)hKA62ihH3Vu:Re)R&
+hQ]WJ`_5VI4&U2@q8-7bY46e,1p]l&cZP:3f35e%JY+=J3+m0u*S8SRI=]!mc$#QA
+V`pMKiC(6=i78r2L\re#O\JY[XK\gIFEN/KIVQro*g4C2O<)QppH\o2N6eN,Nh\?Y
+n-0+KrJ-iC%flXtYlEm*s6IIH#Z-Q()S$+4Ui6O7LRP"M.\p_LH74+@b.r>m1jg[F
+TuZAe#b(oj\q=\;NlWcA.9Qgg]V-T9IY`MW8+<&:n:PGjM^S]l81L,87gEiiLZnMn
+a<m"J=U:q/"_HV>W.>7fba>VPK^!UbOF2G3'TT.hJnXG7LiWV'EdHrnHKZ'*DRt\F
+plMIOM(k6P-q9%Ab+&a8"GgUm0[b`3mYf"KI?<rI#mbtcbgkm2NJGl?Md20:c?q%h
+"AO&/l6_P<n<N52TuYh!-a%m>#,3foORXT]&N#0g1lF(FN);Wrd59=noRekhVJ.<,
+l-ttGh$/]S"qYIIM^juAJ<%gKIaM2L.7/\;a@%D`(C2(TmH/^d?>ta3H`-<J.dE;(
+I$hrlRO;F/#@@dUWe>;k!GR;_Bi+Q'R.q9-DFqK_M5"l\igcoQJ'ZRJO4&lgdXDeZ
+SHd[^k<aN.4W&r2Q00d/l6NqIkdYVIG%[arCRUlmR%ULkI"s,^.J.EE(8YVBVB[\u
+$>;9e.3G4%bt8O].TFRQ.&QPtW009LniWmL4Tt$m?VC>ACjr@"#,W[^mRs',Eb-Fg
+#.BKCm)j_#N&%EY^84_PUb[1jP'J!=C01k`;/BJ_$IDl_SC#6,Y&:VH`Le.8b$6EP
+kY,aT9"*tV:0L<h.M>oeMV9EBi$2tX>#!_Rbau!hi1jkjaKjSM`g!T7S?VSE'Z9&Z
+dbH*`S3u^DYsN?JUjgVTS6,(:>)PYk$VntT@UC=NZNCi6o,se3o$VAu[R2C;KK^N:
+==oHT8FBlr_]6!li?M'm0?_ADc(-\D&u_!r[#86gCN))p@V1St.?e^BUVo)AG1DMF
+0e1J[X<bL>I\YAJUbdh&PDL^-`AafEAs7QjL:4NhW&b;MC24D>j4Lepm']N746uZ#
+lhrp:Gs"\uDTTXL-Dj(mdR\/932A7E,_j1s<5!r=[Yu\'MH)lUBg6CR5AH3?`'C:l
+!tg]`Ep1P0/dBEc-H;qTM99r!Y-R$i\kDH>9St<BBZ?t"3B*0^XQNXEPScjS0gonG
+=)N!A`M@7sTT:_,+\'&e%UA3-@OM_&;\W5#76FNQQ<"KYc3ClD:;H'g[U:_DkYF3/
+75mYGr*C]A=AIkH7?1f1\Br56kjiV$`3*K;7-q)Wm%q5YVf;"-[-^>g:eMTo"u9ts
+ia-Ni:'Nt/jq_tj$>G5QFmdn)mpNJdmWc'KD/TE^:OKQFB!H6XZ8E:8cRBd8I((_?
+[kB</0<Z7SB!$cGpeOZ_%oR.tNd.IT?L`(6oe-)Q_Yo`lIDq[TAVF*+!g[SI8u[iJ
+"VXpTK)X)PW5c])a%KH*_"h\c!"Ym#YFpP$WgAIB=>Z=_#_;,qPY21>=mod"B&OC-
+[1TW\EN&kVl+m!![eiY3pF6CCC#4c.31:B/O7$VMe^fN^4Ef)t!ANI4FlMT+p;;sL
+=;C1\BA!Iomfj>0L_()&d;&hSr<)OZ%-Q"?8::Wf329!bI^(eW#Tj*T?AjgPJqrcH
+LeV>Ire'K]#>2e$b'8EYGrAKdI;)NSk5KqPh&(qpHtVlILjXi-p4MR:L%1pMEMj//
+"G^o\B@!%ZA?N2!W-G?^6;b[V#5j?*jT_$/.aZCaW1'ne$Em!8?mtlT8#]1Dk%fe>
+mP#bn2DF[c!aeL7:2t%;LpHK*`:*49n41Q0Lmhg.>%2;sNqBdnG4q2U33*>X8J+j/
+#^j,''(#ua-h00$.>/gTlP2%jnSqf;nQ,!I`,&+EDi?7`X/a.\;0/_MF/StX[S_)N
+ct7upI>52oG>q]W$>O-]QDL3ckD!m+=W=H7)F\%\B']`BYBR7N0'C;jGC:A<]Tn6R
+,aXT>l'ru39mDgXS+?"h6:W#3i>ki6RnVc]bi*+;oe7ht-].]]\&KrGqDFE7+]i?J
+GIo""oU[iZIDZ4kF50aC&27&B1@mXXQh7'u:GW=4/f$XFXKOG&I=SWhJ?'32Z77RZ
+a+1JgJ+>uZP%HM5?o.AP1m1,QZ>_\,J2&Tic&H83F+l!Z@tWe=^a1&'mU!"i%*MP9
+d*7u5,FG1d*l9KSUBO:S=CX>U`&Hq6g]QW5Qt7H$m%pKE0!1HmUoqAu].V"=0*?[#
+NH2[KF"^7RW.XIjj.NBRL9p9]ZgF(j$S:$g,Wi=<2tIqR$TC28c9_k5h30,=P<M;M
+l9]5,h,@!29Hr<YLdop\\b"USc-\H1LEZ'n3E,B'POjY!0fao(0!6n?`,)<20YD9X
+02<(WNXEV`L:njf4"_;[mJT,bCqc]]`j=107*_V"gH;VD5(j]e`.p:9,<Y%25=Eg^
+UsumS)a]4]6GPkG7)2Jq1rH+9_O5/9-SA..(f"g(EeaG0/fn!Y=dQ3r9iP"8<1`D7
+4Aa>ApX5_sCqt;^c(*507jAC3cAO&FGq%%!A<)%:Z>*5sk][p.e&)Q_Wo@&Ogn=;?
++;D?U['[Eo\P@7\FnDJPmcq+>ZVO?EZ6sUrD\hgiP3dq-k%`qO:Np"t&o,TFn]JZ2
+M_](Q&nJ6\"R&2JE?e`9,4Z=J@s*'o8,H/^6W/&coWZVA;)MKg@%S^EOq@1rk]fuR
+p4t%XO6)gkkrNP*l)6'0<:J3,otp)F)P$7^>@t6tN`MP3i,LWD=(mW"YF,T;MlB^2
+LjI?scbcaoW;qt-<Y^.9p!!;Ue#%'Yr[/,)bZ8eb^gsXms#!VL:Yb=jo_fAVrj>%s
+7c\gWS9,,&XG:ES#A/6WSkqphk%A<,\eONZQN/bUQ%L^K>=A*;A8k?pFd<D2<Z^mu
+rcR]rTp?>")d@/V(F$nL,'GO]a4VdnS7XiY+L%Ug0RgWW2Xm#5nBi%!L^>CdP=l[9
+@OQq&-no"/V4NJ@SsH$\[Y//riO`=*?VjLQnl9B#]kN3=(lmU2cKp>9].J3(-1L2-
+W1q.P_f6HZ@(Yi-(E-BA1VWT.%n2UsV3$ALbAB0s%&NM!p=h)'gfu66_/W0]P+?JL
+/J;WWDWQurAY00\bD_*F<X>/&cA%LY_L3Cq]PbZ8,`d))=`k=5FU3D:(CF=BiH(p*
+\u_)-HtaEm`>J0jFerdlU+(7bAJVb+)Ae'ndbi/57gM&IGeuCL(R&PlP)NJVN)tk>
+W#EOS_gEZ!HHbWt!iUL5^O)<JI'-8i;[n79e=/dU+>Xma=3V=i.5EXtI$aUZ;C#)+
+2USGkcLTP]iY8Kh$DHgh:cJa/W_\-04b$DijmjJSnqApur\*jXKMmYXfM'ar;)GU7
+;=]o-$=ee\ShlP+26pUB'!/-n7]4KW5]'e^irl?`8u`=m`iXS<AL=jF@]O?U,oq1_
+X][>F"KbTa2hZY'WaaSn#;YSig+t-31G%5Sj+b),gCfn/Z6%f$6]*ktLPCRA,Jp79
+hSY8C^f^q($<oPabrSuZ41Q1l>e%G!]9<?D]7[_ZR+.r'SuGYbPQSe&'<@Bcoot*j
+E!uY*R9>N;4cL-340/NG9F*ZsBo^W05jBFX.N^`G,/UJ?U9jTU4unsheX;g9jTH?p
+-Rdi#1Qf!Y6]+H&P3YJn%muM>jf?Ef9,lQ;5gD_LO3EBDX.A@XXNH2kb/A,RK23)2
+Qfp%';03SuF;iFl7qLP36l,jL/f)cD?FAY"805E8m-r8]Qmlk)7"?1%R=Ug&[mKL1
+R*I81LO8D+QI0OYRE[oB=f0QK*m.t_m7`sJUu3\O#im9k+XME']AK2l^Ru:F=gF8r
+K19!#DX1HUnKP^1FFImf*H7G+p&@3gq?CeYK-"MF:B)$mb2Vapgpn=*;q^2GRL8h$
+NG:KeKI6Ju3\dIKcPN#p&[^&CPhBNW0SHUl@nrns#"9)fs'!_H>JHbU>"k[jVLfnB
+"!<:2`Jp_o\u'CDK'#1Qs02;27Slr=AJRd5lG9;f!WAYJW0L@]-\GK4W:]B(XHc7i
+cWGG\=9g#M+?"jA@j/(dA2Oo,7kf0bZ3^_g6D9$V'LiT>KoSWsk]eq^(laNLn5sdk
+5nJX-j3b--VB[XL%RtKl:s(?uR`FL:\EnUf0o=)LZ\f_VAN$5OVc6f10QJnE9'G;t
+Prbp!V+>0;Z&N4*?^m'%UCk<(@0Nr*#8XpBaDhTreE7FTeH-t+VHN,lX(9B1I^r]k
+G,dO]:Cs[6/l?F:_TFir9uf73-;u-R\(WCdWu]@r%A:OX\%*hM95L0]nFHNI*g8](
+C2QC"0%/!BO5fb`MS?gX=-X3^pF?pkM36fe`YU747shh7B_aTurYMUL)s(_'Sog=3
+0cT%2P]=DNO]nUkoJOo>0?<#1pp,:-Q]!NjZAnJ5DhIm(^$ih&l7,S6:Am=aU8AgD
+cI*En6-k0a`BVZ^>l?`UH\U1e%MOs7]M=\NpdB)*D[J<u"3fZADd/h6W@qJZ(F"F:
+\?qp41RdZ";6o!b`[G)0n3f#VL=M#%ZK!2]TsMi$2UYQu+\>Q7<</nrA<u^X;6rV@
+W:G>J0gH9Y`<8jigf!l=6*r@#`mEJ&"iefnLH<Lqm.!5)PB9^f6$$8H5t96Y"%(=5
+,fJlZaaB?l;%dr2!4,R%Rc2]2XDpq-FPIa(L<b.ENluG&O]%p)XKP6po\72]e'an%
+=GA\=@95V"7:f_(:TOV]f$DTkZA,\@8R"m=;aTao2I""1;pe<qV?XAWB5#lFg-F_%
+!NU&'=>p(t^fskdMaN55aD5nPf%[.$ePU,bGgk&oeQ5X-_O)6?N^`8<<;3,I)G9I=
+F+1b</e[-F_2\mCiPD@&\Dd+P&M(GO(*<*537qq!#'g"bjC@f,)hLBo/dXFHW*!bL
+i_u?L*+AHNOd_#jhJ&>>GnsaPB,P3pg]j*?Mg:&'/K:3kpXXCX#*5@O[-C::Pc<r!
+Nj.rXR^2E#lIY/%Yp,OOH*X,hq[9dsEsCBA,eJ^*Y%q(XjSA6.<fO0I&&,r_X8:[J
+Jo8p#8%pF;VWA,"G+TGS:)o#=6h5QZkK>k;h[@7d]On@G`%QT6&@Qo-Xr-fcp=3#k
+UP^;G2IQ[@&12r.j>):\\3MulZ1hD3GPt6=SLFH&g#4,[fV/S+6D,56\\=4Bk+KnR
+AB"t4)k&R6WmG,j2Su--mfhSU^+'WNBM^%7,<4I8Ne=:O15#^jauPIaGhb=YUTeeC
+^jma9OPC^@#]^%K);GH.l5;s.@h0]X.L)Oa&RK_`~>
endstream
endobj
187 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
189 0 obj
<<
/Length 548
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVgghn_^%7^I#\CbCG)iVdUUM)P1&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="5toF=17=*>;[LToF?5oq,stKc=u7'(L9[,uZu._"87Z9u
+,iknJSe+Yo6V5Y]E]h3uk4<#;hKYmG7Y=QWi*\5X8h6+AT[)Rm)2t`+$cq3.1E;D5
+<RTNmW+[rB%#.]SK[OZlR5.61R>g3@3#rGTo5K6:Ae5sl#+;Hthifr($t^M/M]ual
+SP@e4:6_Vt17Sdm6V^+!5ViaW,(hSR5[;*`Kf<F+"B$of#Rs9%l-M[E/sQ`AO_D[=
+$,,@oB9R=ocuRPA7O(brjBc[Ym00C4%felH2@VH=0W]%>cErUAJBBX\_#WEg$uFka
+hMgE$;B*4XJ7OeT%h]-m,&]db)(P`L@)T6B?r/.0:SVqj%DrQ_dt@dQd*a\%8B*[-
+Y8Rb#`'A!T(C"ZjBb[J*ErHiY.Ze*Y+YP@k`IY+(XSE&daAB;Ka?XS)%KhBq)MY9!
+^4Z_7`.oCbU+-@tJ,~>
endstream
endobj
190 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F10 22 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
192 0 obj
<<
/Length 3195
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f.++SI"?k8[qYt2,(uaEM0gW)ig0hP@:-4ImG9oj=p.e*#f,/8<$Gs
+!T"D!-AW%@fQiVu+>elTYum[?E\8=;,NDXs4tCQ]RfT?G1_'n5KYl]W)$n7BClOFW
+&a?[^FZc9m+G=12Es+4MiF([_Xt4BL`EZ#tnNfG*E]>#`Am0XZ2[Y:-n?DGE^g\q=
+NJA+.aPRjG.NS&cOTEhUAIoaM!X!_85[b4=b\$HdPF-AG),=HN.?*J)l>'e<>Rne1
+,0WA0[h6"i(Sf!A9ucdUbgLS&6*f5`SU<]V[dD5+(H8F'[M0+*i+t:]NmL$4KFDmE
+Sr8[u'a?`c9'R)oJHN4T%RVYd%ZJdXjt6f\8@g8W9Uj,U+g3pPc+RNcCr8F'+G_e5
+@i48`NXks'aWR^40)hSa"*#7a!NZRa4qKdqijeDLQKGaGj/2+Qm`W$n%3p\o0T:XG
+_XEFl";2TgE,2oH84.HU2nA2B@N'q&bWR!V0ak)E-a%^Y3e]B&ndn5e@YEL?.U3Jp
+c`n$H1IO#1au9`N/FYcU05NT^L&j^j%ZDX"juSL$kg(f?@gLdJ%@'g]1V".6bW1C,
+6OXY9P-!7n_:+%Q3Bm#T@QXjg!6R2.TktGYMLeSC"-'\$#!5aL6b5;fmbLJH%KhgL
+1(L'",V`(i1Qc=UBUd0^UImTti).V.]'9]UGiTQn@CT/f#gh)j1rC-b<u/l\g=E#'
+;7]/l-IeFK9MQaPo,"_&OqAT:9NZ'(1ef*M4B9pbGl5Y/i^AV]NO5"_.'P7t?4@Z#
+=[Q_bI@05X"*d]]:BS17kW2e`]3sB:*;97<j)lV'>G2%a']\f.W<DE'V!s_2'eA[D
+cPFJ.el3dmf]in(B^\:;,7]3"lr1mTK@++M)ek!9R)UscK+#+GgictE6AHGRO\-%h
+[4uLD;$c=6NQkYRQe18Zk<[Z$Gj,FDg4QkW":pm\2N/kkeI0XUcr#^=Lb$qu[d%Nk
+(:N1SG:4nZZ5bZ.K:q?Ja*M.K.CDK$HL4,Z5[kZ:*c+Xn[A\Rg(EiL.F;T4`@!h87
+d&:Uq"bG0#kk98bBSCXoj;un+3/BlpL'rNP*2C8uVAP%PVr.8%!P!)[?a7(R!6o&h
+\)Iku_t/;78aD+=H:*85&-hUI(d.sHoUll]-HIHf)RWJr_`2m-W0AMU:o'-SKHk]6
+YnF^YRLBcqcXdM6l+8<V%Ej8[,4K:KX48hf%RP\@8R]srp'R+LMj$5[%;m9K.W%Nq
+6:DB;1:QItl-j,GCB2o8'(Ei#'H;jJ8nC@;V:c%lZogVb.*rOpO<0NOK3*$g.Q.9'
+=/-=L;XolDOuQ9\*0S9^/o>[2[X?FH\t)V,Ysg_9;F<`l2IiU%2F47Ddt>9P6&7Z0
+PE[C5Ti):dUcMAmfgbQSE%-CX"uJJEEsD`!*ajQ5&Ag7c$!^.OETgFs8YG:(,s3i8
+18rch&nY0:\24F<r/I)L5;K*<17>!$AB_@Ea%MB;IUIbCR'QBA-=Id]+?"15fr,=V
+<8j7o<c/!GYh>pbd[WbKE_X++2lDV`Ss,ma:?h:5-WK-!'1ekCH.+dOh$7N@)JIHk
+5=!&r:8*l[GL606%,[TM08'VQ^3<u)O%eaqJCM4Ka-6uABnRa#`LoD<)apYZ0pnaH
+Jl!?Y;'oiXSeTb/;#5-:9t]Y?1tm`73XJ%9*BbnF-ABpZm6ccE:T$YF[nk^.<+kSa
+ScHtO)sQfNlK)>#PN&go8_7*["_7fo\u5]lf1p*[kG_Im\Q%#M>GuB0,PC'+9hP4d
+hotJg<Shgs5T1't/P!"q(:i)?m:"1\L9VFNWS%W\=mV,^YLXo>=j%O\m,`;q2E[!2
+HG;Tp/Bjt+hU0l#;ar2bHD>!ZoU2@<@L29bUo2(nd[!o>$],k(a0cnN?tE$u3CgAV
+.aQ^nQ!Ea*Ub.n(^"k`i?]/K:]/Gc,fdj[UCd$UWGDafNOqVsh4m&rUDY7'mgNdQL
+HG)1nb0biiH`t,D0"0o@?b=oK_1<W+=8L0;!p`K4laFS"P6G>V)h+aqrPCHl)BPCR
+Ks6,n]bjf[?$m(OlSRY>Q3r"K4?&'CQ)gFBK+")O@7H1?0t6peY>S#ODbQEG+m$]3
+hKt("8[("]"ZGu0gae!I-6\tK-N_Qd5@K,?:V7Q6ADfSBP@l!r_md]*AZV#\YT@2e
+<9"GM9Kb?!r;OW;VSUPCEKP;(Doim?!U!,Js71nhb'E#.R9[!PZ\7Yk)'\h*I0ZC\
+b/qPI-UMBLeWTQ:Lp&iHWFB#>JFpPOWVLS4ii1+rk1%Sno2=9%.r@&@*P4.]3o:P_
+iXJ2-0$!UOV\pqC6na`h[+";Yl+JNnEJ5C@VkVXC()s91YUqcB,(N_S6U&>c#MIg8
+;*;OAD>(E6`]FVITDKj;VgZ4$PbVG]8hZ1&(=BSfUB=6##t\aV^>8Yjg/8;P?$BR.
+\!rJXDJLo:83I71]DkE/RGVhhhY'1pEnc5.EK0X'jdhiMJlPCkU@aui]bCR":L5iQ
+33;I@O<2n9Y")VT1X)rYjn#@ngI=2<2pah2K_"J&bq6[c`*D7ZE-]RO!Od^e<sPDi
+IYlFZ&K'[/-SAQ?ff\Es:?bl=L*k+neNpT(RICl[olZJKZkSd"RX;;T5.A24T2Fti
+_l`Q*T@A43@HfqhE`%j<ZhiQNLD*K&G@]C`nm4iTpm8faXTd[*pPA>99=2u7^Wq1=
+Nq&Y7VYNFd7sR=Hn%@hH9`I!Zk#[6-*et=h01"D$D_9/H+-qO3U#Wh(>fo-<e9a?V
+l#]l1n=Jfuqh+oo^#-T*?@*,pT*b%8M+ttDB*2`&C#SfMq=("HG^/W:>J?Z;q];']
+f'`q>INOUI^&i5*:WMGe&2X'q2t[*a4fFtPK`2l/=Bg:8h`n<;re*M_C%(W8/Hc9\
+CB+n8!,n&$:[J"9aT2o;n-P]B:`@9V+9moJ!H"Y1cm8b^h#VF`[P0]?c`5,@0\-d]
+"E-@&DHd7)nHCUAatQ`<Y[$"&_TFE8!)OsGY\"*DC@[I.h/DMe/Y`ADJHtSnp$AFZ
+%(LSEMSu``J<5roK'<T'T^,:WlgUY;KA,.#W6;EHe'PCNO-64ho#.cO$k3@KY]UA9
+XR?SR%;]GMd+lQ4e:<SC07j6~>
endstream
endobj
193 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
195 0 obj
<<
/Length 1918
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVo^htbDNX#Ud\CbF2)3!NDctl/o+?:=UUa!U)
+?:QH\bi^\]'X8s<(r;quR?Zo*0Ub_QP+efm/K..!Z'a1NDDW/-j=m;Ri2CjjOA;Z?
+8^Q=74Mm*?o3mI3GbS&iK2HUG?n`Nkb*>gmY0mb'^uWl5OWJI6PFA0H"2#g!9b8)`
+Yk'+s5\Uc37RKJ_J8K55La8B^Y$>D'2Is+U_3!h9RiLNZqHX([3L7lYobsrCDaT`6
+luQ>^VOMG8fOsn]m8!sk\DqQ()SPWmDkkWmp_e(4+%OQ>ElLJ,[c`@VjCQ>:h'Y*P
+g)Fg"Ek!)'BnM,W@.I`b+"%R;N]f,&Ul\E.0'M"_NJ9a"hAV/&)u0F;/%Y;n.IKjF
+#eH$Y,4%<d]=-aT%eI":[LT?emC0=sB^S9+/#),o6%hYh1/9ASn4$7/IMnm,P"?Vt
+nI&PB4Kap!e\r,NAf/5O>B_=60m%mj81kmLdR^JKNt4iKMfT]WdaY$<bL.Ybai?Y[
+B/2fY]ZD&3F'NQ,1p\aZ/^/2cV)Z[r][&T6F%hQVc'(!c2p0V8FWJiU<;qNs.1I+3
+5B2>,JNcXd,_O>*'D"c0WS@KJJZob^NMJ;q&OfWl5\10C@@ENC<V,jb=4+FP#r=G[
+Q#g)0'RS)2b)uI<O\&F+LEB"Z4W@s5iL"Y=fX!H-A4Y:B)f&TMb^4$Vf%cf8gJ[rn
+E6g7hBGaj94'cr3N=F0q:cEfShq[GOUO(b*=uU\\(YrsI5-ljAK@cJ2`7JBU/_h2G
+2ng/Wi!YP)LZ)?))g,UAKb]=$9riJs[<.<o8YC;9k_%[`1\AoA2#<2/+m@Ql)'Lk$
+=T8SJ@pOUm=lp*`?9/8h)MYa;M25j>Ng"sIfXnlBl*uJCGj9MN.?&$4j'<*qiM8=\
+[DBhUN,2UNbBWCJqt5MWGV7UTA%MglZ0C['a/s6(54aZ;RP!qIn(.H^^i*I)q%iD#
+IL@([Z**3,3a>KiNOY1\58rTJDFmI]i<(M+AT1p;(dKp^5`MMB4;43^@A\/9h,#^0
+h-JfgL<<`Gr^QU&M*;"<U4LQKs)aM/*q4p,K9R;4SkE;,H/60OVYO2XH'<HuZDXS3
+q/;.cGj`:.oD+RLCWeRIlt>/&T#E;n#"k@c[WGMN^:YS+f,Mmno#EB_TB^!;:HdGs
+pWRRW\lqX#Q3<`.AtpJH;F&6ah'Qe^C>;Gg##J<P6&-Wm=+`>Tn:8q2o/7#AH[(5U
+Q,p]R8EC_Z+]2(,og4G*%&'aY290O]&bYB!%9u),koLnYpk]PeN(5XC(ke?eWb1.Q
+94!`M-^s7nr>.:lM(KJ<`+ZZ3@bIPu,pk:E(neoZ(c.-`-5r"kV]0);rf,<;3CahI
+*@&3n7.D0Y]60YFb"Lr2EA`e0k(M>i'Q]Aa&ilAgB,I4fO(9k48O=`f-"/Sk?4]PH
+'TtI(,]`B[&k5_d.3+L:bAmfMTd%X#/4ZLn8X9kA[@(E<&>V+2QL[nf!uCDY6+"@m
+L0,;3M/tBq`/\93>#*;P1Fh$n]9;bT;_thiIUnDhQ*XT9"*nlF!OU^HMqAumAp66^
+9]n1Hic@`"m5lSeSTHW1Gt)ChB3ec/T+L4oORR&rB)MT_e,dXQ=pGo.2#j/dX_9;a
+Sdf@LNA]3NN]Ti\'3N0]U;a6(;49QT.+J0\oN%&G.RbbWWpZZjg_`IXepHXm.ACq$
+QI&fL4(,QPSL(Ek;lUp8C"l33'`O!:Y\M+V)YC!$(4t%m'h%>0"ardBLXeF2>3_St
+<f?['R]<nrWq>$tFa=9i3lpAo%2Gt;d^7HB]3@gIc`Ra')aO`ZHL#-cXVAX^Y=Fd(
+l_SuI(&e?[n8,i$'n3D')T4uN%k$Q$hQdBcXi\1!qN%]'#52NLanc*Om.6?Cd"9CO&-~>
endstream
endobj
196 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F4 6 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
198 0 obj
<<
/Length 2645
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f/6PSBPR_d=fSP'U9,+0kf?U/fMaiV*ZH[BJuO1aKRZ54JYIO_9#S"
+<$4GMKL<kU!nh`<A;5mL+olF[-o)d#LB7bVe7fGNghp`>BhhA)K&#<=\8BMX0tH&6
+@r%<TD)e-5BD!)b(i<Tr$t/jT36!J.)\-kS18K:o:cb,,':K(4/"MA],'\?WaC$_=
+A]DWDaQ.9"LQrA@@S*rbCbhJRVW4>"_B>E1N1pE"Qp>^JR*FdR-W&nh3=$"T_6L6.
+AN:aLfgm`&#I;UqZVZVZb\]qkl"7mjagg1e%V&&lp)qSsA?)^S")QaO6)'Cs0uDR>
+/WJehkVtoS\EGWZiok^SV_3jMT8S7cdPjMqTNLCej!`+cL-_b71CeD,k7,)aR(*i`
+!D'dO#u%DTfV,L+,gO,t!,TS</MMu9VaHQo3"CR6[fSGrbRfWID9S4]#,-,]r<8mF
+>hbq>&/to_K1#j)_Qp,ql&@;OOQAKZH_1ltcC:j"].VjL2nSNG`:?%:6e*64Ts.?9
+\d@Ff5<@+-B(EV'9'A$h,B@-58.$S\_5XalcAj&C*$dQS&E#iL$tD^:9@4uJ`u'LR
+XCR[C0hTr^Nip:2Sh3f-1-,m'"^($7@7XlG%h<G.9Ka-7A/@b;5Z'GmK;dKY:t,B@
+>,Ca6aZ7i?r.6C%8Y"9E=^_<dDd3e]s&daVR+RbDp/'-#giUV&0iOiOSF0D;%:\O$
+UNQ4o3nKAo6XYOi%9DA=V*<L:P?:X?`Y"=#2`d&.Hop#tJ5@r>),T^57T":62VT!d
+EG`tBGf2KLiuSXg\bIEO1#R=j:caR\@*'(@p`=^Q"9ULe&.+Z,:cu@4\8/,kj+;OV
+j<7!"B8$Zs<"N\pE6]6K(L>c%AI*H\UMP43;mX)9Mi]X*,A>r+NK7ApU'<o*d\c1E
+"VH;\Xuhg.]_3;6=B8;/_DBK$ecmsk,H?,O6\A-iljRp8[]bZJA"@1Q'_'@7%)]%"
+d`U5f.#3Ma)AU1!]]d3j=]ki3(q6ke%MnQ8ct;17M6kdbG<RElj7&b0?l0,3fGd`n
+'2;F?#e3lGM7bWjIjg:8"1g2t4^Ftsm'V60aA*Z]_>$)M5io%Y[ahn#Q_NG:Xt<!o
+L)_(4g:p.\%GX%CRW)U1]lVL#A2!&U\)7qm7Ne?cYJs,G:=:b2.+%-A[Bph&oCRX3
+5s>tUCA!-C<s9o+'.UutjWN"rJSKn!WjVi-etTSWC>iG3FBJmBg=$I=V8t$WjE0=D
+^N_&d+V=-r6:)7hC;C%+`NWkh>S<`S%McmdkPjS*bU$l:U(eu-R[_Y#V@CiLC]p%K
+&(*GP@fV$,*H8ldP(XS[_!/:mP2om(a=^GNH4ZhG2[L.B6NdGJ&-GhE^Z'J\P"E?3
+Y;e5LNjK!t8.ED?eiq3;b`S'.nB+@:d,nlgWs2*,+dnRR64uY>/mumC)hiAC%!1>;
+&cK`m1L*4Dap01[8D9PT]VWH\)?s+?r?f<X%G=WU3O%/&SY4[U<9rjuU!Pe)QC.oF
+Li3`]nbZ(,]f6M^rFYNrm0>&2kt)di%]>aC*AHUo)$CmhE:(+t[*88E9-.=OZ@N(@
+mKsJ/B8pj.BqCTd!?Wh\5V`@AZN*fC%9dg5JYjk0noc'fEn=MOc6'Vd"V;EJf3?2,
+Gc+K)gEe?:Jdcq$Tu[fB6\P1BTp;I_VFlQhYqJMGodZK-G18m@D[j%IMPGK*VI/D<
++K*HXOO.6bJHUf6#4^h8J:%m$@ZjNcPV%u]&.AX(/?Q62YbiTe%`h@^R:19:]6_?Q
+Att/\Uq@c#kn=q#69R3EABWVL[:2kJf6ZA,aq4cqA?;o!QaTZ3VIK*`m-2&XTZ"tS
+gDO*f`+;8+p=!.p+IVT8PrA^*f\&W2%EN[b[`'@,gIj;>-/^YfNXYWSA;a_Ci^oS[
+7UO@NVbk206!nO9U!/FRCsS?j6&6p,V@kC:#l50KYna>Ei1WZ0ph=OtiUEEWZk8+b
+?$diNm"6Es%ICaC\4M@6)FI10P/YF"jFlEC+uVoATcLXD!a\P3@"Btg7)!2hqLaDi
+%PQ8V"kWHUi!GEpC@20L=;2ab;Cd?XeR-.jkS.2o5D2]W'-[,"d1N,/Idl2E1r8JX
+iYq$!hQ]QTJDf>?.AC4p2D-CmQl=o3K&RNZ&&mU&$!0X&%*\7P#"?iX@E_l0Y-&m<
+R#&BV#_kf@IRV48-N=`nB9_gB1'AJ%!u-H]-#hFAa*@>5j8@/G>W,^1)'32Jr0EbV
+Bning7*9-ml4(pm1j_6,*CsRW%9#hU"TYV=g05bLltQsP'pWuWXH[:9J[.3W`rqPQ
+R\TK5KZo*H"^=J*DSZO?^B!'$9H?o0ntn.ag=2nZK.[U>]qQs$mgmX*gRk(DKa&G'
+A7gehM`![lakA?jjXe<L5]2V+fP*gs?'9X0=Z-OH`.i%iJ./R\3I<gNNGI<PTs[A+
++e+?4VA(&5G<S`g3:gb?/YGTZ;q'OV>"`d\9;4?$YL/*:EF<8n%=tDW9\Z5\9;$@D
+FOlu@l&/)+"O%>s_qB=8Ql(Hc/ep4i/`p<aRWDePc2#C?D2,Y"/#"u'MJ9oh-;^[ldK0~>
endstream
endobj
199 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
201 0 obj
<<
/Length 2982
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVo^h,2=N!=k7\CrPo)3!NDctl/o+?:=UUa!U)
+?:QH\bi^\]'X8s<(r;r!RCqZo1n+u0;j#:%<&FbHUI_o71E.*h`e*0NJj`Q^:'uc%
+f`^SN1n>*=,KqRmD`/GlkDDDJBJgS9"p4n5T!:?q%IKh:/.PAb.1sD#E`ARZ#S8$8
+&FsLb[U"ZV+ef'0J/UA!jp*gW"H[@TLZYpt^hHPF"+lOf&@cVX9JP(0,D._ZE2b+S
+:Q(AJ[0ha[Ud5:<=AH)1#M6f33K2nKF1'P8k@FapaPf<<hVc&F<&,i)LQ$ri&TuT>
+3/`edni>AKg2Jqf9r:j/cp2"N(lTg%=Ff6a"9Y%60ob44aSu`;,)?dhD52KQL!J/%
+e[s*n:?/#X@oOBsXg;sqO!AW#3"BFkJ>BerU)LeO@0=I=4Mdbhof[oZ:b@[eW9?32
+:^H8=W++sU*l'AVGmB@=i(u7idGX4(":u]u1Beq`C(q)oS=hm_l5Ys$KE4WT.LAi`
+M!gt@Z6\O!5lb`R6cmu:16,i]j>;l!T[NtZ:?.<L,&qtQ2[0YCB^#[%T[=E!&^9l+
+%'65\pqC[HB`((jj8AsC:a?JQ5spkS,H,R5C+tTV7%uM&FF`%=KEImp8AVFq9/*k(
+GZsYtWm#<R^U.O>"V)'='`-AqPp/0?<>B9p"k*if7+PcHgcCFi'Gg_uE-4dA5uk$0
+RTW\!Z#*H@jM`kTU7bHi`mmde16%-dR981OI;`LWo_?U/<EG:<='7K,8Hn":AaDH)
+K7'^MNoP3Z*D+]ga"lK&J5A=]-u`!:b+X>^4(GS/VQl,hN]J.`P[MEf%HAI]9>;\[
+8hn(@#Z*R\.fe?\^H%$Z&.H`&nOSNT/j;=#n0hHc/H[-YNap6QA=ABB(+j]>+[cW9
+^*=(T2N@3&fa-1Q!*U6Da?&d)<gZ$<1t$<+kb5f_!'u+b1%<%9dPPMh1l`fZ_D2U!
+!7RH:Zd]?#X>NrG3cQBbIg(eKW8',tfTPu7=,9b['F_W&_cNp4fOFK-Ts>3:L!DYi
+p$MWCP?mjPG1F#*CRB1j.7&Jh(i@FVCa.dQm;3$SOAtO-gJBlJZG.-W8/UFBh'ot`
+\:-=IHMKKZZ%X@&YE`:5<?l;62V\=]6$O,MHR>(abKtDr!ZnK(>qZWO"+*OCca@kf
+!9D%\ZQ!5p8TLXQW<,u>pC9lu'F&]apBqU&:9<)&\8]U5S`hI/i2"^F[:Hu*ii7Ot
+Gf;mYg:Pb<jaI6Oh5+c,Q-#g3HcjhmL6h8(_ig.3cCJ(Q&@N.+GX<Ps#_U$6:_6/k
+:'_u`/tj%5:*"t).j27Y*]JtrT2U23cq4X2AL`+m@O#rsSS3\@!4c!;'k'@X-Qiu;
+h,LtX=fOoq.1h66f:)A)&@q]hdWVpKE&oXhYT+RXG5b.Hq^[LT-DT*.6:8\55lcL$
+acN$!fZN^nktUV4)(l1?a>K0%FG`EI\sF$3JL5rT0Sb=G$pe8g$]0I/K.0't_*X/k
+W\RaN?r8O&e@^ft8MclIe3XgZN!'.))O\(Y7as[l%h[Ul-UdfgNqsPS-]LEE0PG;s
+`7Q>tET*Ag'_.DY.0f-q3Zi$2%RYJXQAU+TWtNL;)?T#6Ts9tOaoIZ=bkl-NTpA.^
+#TTQHS0\Kg3g;%CUdLM_JIFij7<UI4R*s]]YU,;Q^ef\e'%3JT(to[&lul^N.%>)(
+jWoQVUlj[0;Bal;WtqYTTFE,T!.[$b@VH7gS5rpK'au'\]F0jcC-7$^oK,Q4DTHf\
+-fkMMUnG._;.1%ETX(baF`^(YJ30h8S/.O.?l*D/T6GEDi%asWOQHAUG\,G),@EfE
+a@!itA3Rc@+u3Ei"2Y9G3l2I/>\:'Q_F'0o^f]j$Tk#HID6F#U=:1s6lq)3(()6>.
+$R/R\4f:+A50CM\Adj7$HA^p`V\GoJ<*b#2"seKm:ADW4<.ddR'Y`O#_r?2[e1>3j
+Op&39dXK*,4#=6D4\aBS,u:jVE?XEq+6=YC&6q#Q$k7M^Uru[MohW%3:9)oLYRE#/
+5Y2]:[FPn51X#`,"9?%4=",4,M;=H4<W]RiC>/-mKkd^6Wjc%0;h(9IfQ:cmRKM:8
+3t%n!ZaKeYfS`=0m6-BFeiLlU)^[mg%@7:-B)gQ";.WsCK<_AldF]"@>d9d9#"F3k
+fW]B^nMJjOf$Q<Fqf.:+fiK[\JK"`&R-DLrGm-$m-jJG)Sh<-F8%3.ch8H%:cc^<4
+`=Of<-`DQ/"il@;3qF=@R[Ph=:q_n7pB*I^:Tp$h7ebL<i1'7>Wu_GHQ(kb>(=R/:
+Xq\&E"cVDtq)g42*OPTo*n\Y'M/=Re[A?]Yijc/j0ErIbedE(]9Q?(uG,;2=e@A`?
+?(HP45f8W&&S*SS7.%,_,jtRJ"(6"9#gj?5)S?rY&kPUp5XLt6eFeu7f5(`g9\<H;
+@\1A3$kS`79cE5NlbII]!Po]Z]*sef@X#,<%R`1D1m@;(Iq-<W,2@NDF%h"f7(1q[
+f7uQ1Rk;Wb2_NYl>:h[L_a?9%ePHJUYAo2O+Dq4:H_#]=C;7?`C\Gd4f)+CVD88F*
+o<uDV`iFUU:$]A&5mBb_(lh<Rj&@o0e#F?e6qcr*[^bc%jkB`aln/=`%EAS2=/=$t
+ZdqZ?L@HEL2i!U2D!g'q'K+RnnJAo&Y5u2'#*/_Hn.VWC!NU)c5bJjD^*QbFSXLeD
+0&D:Wa2E8<*3&2;BlRUo_)G^j7DrcGSo@!Hp%UI%qcgRNSo@%X^O%GUfXd2L-,hh[
+GTiT`UV'*PSVWsTWXiUVEA"$*HD_YMh8ffqSEsK$Djg.W>hfH(-.-m[/j+[.*4u4O
+A,IE+hWV#h-#0)ZI8T+s$6u6bSr)PUR3?`+k_bLLFXk)P_;]op\&2QAl$:g`2PAg_
+Gjg@P$lO$i5=;^L?T^e=aW%KM_qMa0fl$-=@g0WnqL;l>rVsq6s$3s)o>7LQ:@*IK
+j=b!=!MTV~>
endstream
endobj
202 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
204 0 obj
<<
/Length 209
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f/6PSBT!:@F3/;3JpF`WL1&11`$U2ERLNnCc!,.W/sl`+r(M'_;mJ@
+6r[DNM@Bb)q"2e/GFK;jVGR?sff5rs+Ot.12FA+4N.qEHF]KtN(Ciq.=hNh8@6*;j
+L0KKM#6=~>
endstream
endobj
205 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
206 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im28
/Width 1573
/Height 32
/BitsPerComponent 8
/ColorSpace 95 0 R
/Length 21629
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J,g]g3$]7K#D>EP:q0US$4;@d^]9I(-l*/G7A:@WFA;uNJc_^OTM0#!$O24BY[C.F
+/J=@@it+3j$<dFk8*"'gX9s4oT#[Vr0PkcJ"cgl9FJq<ZQNWbukV1/U<ioH)<MXVB
+GUsgL#D7WE0VCBB&IASl@1\EY\dA^t6G['^<$2h]K7S+?bu>Sq#MMN')9=0!IATMH
+o]T!jOaY;]CDA9LTGS%B"[YKdBJ^nE$O$STE0NmE+UnSW@=Yk,0qo'\!T=%"Cd8ca
+"N*P6O@*Y'WT9qlfVg>B%gmtUJF)p(+;+q!!Lt2G$N&?<p1SEjUm)bGS3ZDib^X]A
+%?gNLrkE*T+[M#RU@WW++0k4QHbWq&kP+oS^^phkRPH>Xm`E7@8n.lJTO8\%!C2"G
+_ZCBg,R69Ocl<=B^euYH\T%$\Pp_Ss*q1B\Jgh3a.dHH/\gVWqcD:u>Pb'OAU<MLF
+Y\K&f6,6sdbCT3[cJg&4'/8DscN8'E,q2a9#;!,:3h%G"H]3e+#qENU,AB6S#pS[+
+k4-ZrdRu!hCiW;k0o2(LOJ*"Z339-!3i\r*aK!Ml!t/d/%"dFD5S+"aBK?V*T[5S/
+K>>@R%>;P/8eeabo5:seO)P^9JtVlm%th\83"#d9\/GVS%jY26]CJY9'dX-lR,^^*
+$gUTpYKRq5,Yq&B3PeV1OTS6R1S+r\5fc8%/tf.$%"pn@1_KnlfL?b_@1ZBP"G'ZK
+&;-Z!8dp><3)g`JG/-?X##qNYH%JffoU3<V999I^/RUgQ!c+/]$;^`\031F+\nIHU
+((1PIVs)\Ml%)Z[*6)*$mM_(pM(51k-qXm6RliL$FbZnKS@4h7$0=C<A?bPA#D-?P
+;^$`C#$d-8m'9U06dmY;UF8\Inq3dF\o=7Yc<RP9Bl@UW@^8d..hL1tP@h-gOe<U!
+\W"/:@Cj$EN1WY?jLU96)PS"]D;1*4\[Yh5n:]Al`[n&BeV(N&V+B&E/)i28:8[%a
+JrNiLS86@N,*)LtMDLZ"M[VDr$oXiS[CZ$2a=+BQQR/t#RKlcZTHjdk\C=Eo6/?/&
+ksDF-Bb<CE9.mnO^hc&h!YrF.,1\2HA<hA]n/[quhHi:%j\Y7:,gAmn.eu&cP:na[
+bL.mOD0e,8XeRE/@AQ5HD]K"VP*3]+JurUfCBNND52-1u!'*OOTf>(;c"J("5`?G0
+0Jj"7ih?Li8R.jk('L99-No?,&-97BEtE\G8a]-pVEbuSaI1pOcA8YKonLZ<'?tmb
+9dhNWJsk@LlY-Z:.3-?J"jM9.;5uSb.*tG_!AV%cJ=IL0+BSsOJ0b>KS._tY8-e&9
+,m@\<&V:!Z$GgC#"CQ<_!Uq^]h?hD:"_!:Scmf4BR\Ks-:tDj),/?kia*FecQBDIP
+*E)u'BdkJN*)pI_)Hk6IA5&0+,5?ITRrCF0/k(s>beofOIU^Srq5bbg?IuaPGKR#p
+U1S"D&F6'29#5&8'@M9_)(^_\J^V8a6I8>]$Y\^7]0dbV;iG]3GK3)T439BQ9/AkT
+B7,Ua$#!hrPF+b$,$QfhQ<pG)d@*]D>*X,9;dT>65)R/!RFQ1PN4[n3bZT:saBo?a
+@ebtZY&mAuUf<0)14&(jbGMV3lO^%]6EbtQ7Mm!_e+E5V%lFq7&0>MHEFpk?aV#[4
+lLN$=8pelXiZ,K,+Ud#;<iXk_1m8@*bMt^(/rA.+`lOGPR_aY6J>XJ&MNX8E5E_h.
+G*>L,a\SViR^9N,!AGW"!2@mDTRJ:RQ2Uu^fH(.1I:r[NVJa3Gm0,tRVC<.u"&Clb
+NIXt<!eY`r_"i.i.4COF[eaWP5q4JMOqFqH;GtkUhCiU=UI&.)I:R0C.4'6`Q[%?j
+^mm@cnX]iuE&\->5TU"MJ.T\=<!e+rK*1Fm'7sUf@fY5Z"5nhIJm1>B@c/7ak&(o4
+Z4)^XYS@59NilK_FTTe@r1p91mo+6<<6bS<Q-Ju\;S$O7-G=]5m?Y%KOu"0$Tj16O
+DJqG1`:'B&F`n).7)"DsJVo$?-'c4'ST>_.PMGR]<rAFR-_d[q7(@2S9W9-."*kGL
+fKPJ/Q/4%YIIFI:.C)+OdO&Mq>S9@L88tmq8\1ANdo!!]10NLjA5m'd-qPsi@'nTF
+p5m`QFqB)[i'tZU-K1OHVKl2uQl#s()FAl9Pan8pqINGrU;BT94eV?pNLF[9V,@n\
+;>SGfVqsQa7OaM+G8>V/qD*JcFKEWt*)b)XcXrC^7KN!7Q,'mI2:)125_(`t!6p0q
+5b&Cg5VNGEa;=u[f_5B]/!rT[-3Uc6FArZ@=AFIWSLO3q=$,'R=J8,;1%(>?W<H!%
+jJflTD6W+XSm+p3JM)g2&V?ZEQEr2S"As/0JY516JKQ'<lW5mDn3RJ53$SP`4rc6Y
+Nc?go<I:RD#_>?j"TZqj1le\e+Xqa')E"BTo/e-/'^j#69T5Caf(`PJX,H*(bU(Ze
+0",lbZ!h1#fSkPO-4A?eB^m`V-cD@\"PeG!`_Si:6JX"LEA\\pf4:?e"O-N"ZM.Dq
+hadCQ+>Ssc;>,HX.;dQmPs5@)U1W/8=^l<^+*O%,0dXuaP\pVqdp=Im1:/Z[.JHr+
+WU`AbMQ&%'$8@0WlejOsdB#D&)VU.WXkTbkA0R@FT5^=Td1PA=1V-?0gL!1W<TT?L
+ekO&<HX\NZ0/r!K]EGXY[YoZLen'1aBE6=k"$g0NCRirYeEQ@Oq.("f?rNKoa_Rh0
+SUqbH]#?1@/rkhr-dta;A#T,X7S&*tdI$7K,MFK`#<b=U+=h,u4[WEoAgW+K4JP0u
+?`B02+/tnfBE6C#"Q6'h5\"c>1JtK&g;NCk5Tbk)=^d(T][9[E#n(p?DD<FH(!u:[
+a0nIl\4thNh'4Ii(tQjnAC>FhA*0tt]7,dJTbO0_hUbH]bq(fe[U)pRa6o9'\9k+B
+oS^YFp1aDc)p)ArYA:Mo1mdBEZgW@rV_/Vh<+JDU/"K`FY\@?oE%$HMP'$9I:Y\2&
+)NjG5g599P-a))QBNN8W-Y-asN!*SWB)RD<D^32f-`4H65a%q+7kXq@X0T2g$Dg@8
+-k;:@b]lm<gAE<@aD8(1lfLIZ!1(YL7"?1-5VQ'N2Herp>!P=Ub;QUu;Y&pC"6/IN
+5UOX+E7W3aWurt;!&CKd%T5P;!i>$3E2l_`l?&*F.1@-L:5G:Z#VqD3VC4._@daXH
+2E,1c"/%bRbg6JX5QlU."=OtlA^CMbL'0b(WPCbrTKE?"9O,@n$Gu'akr*e0`^`AJ
+3J3=o!&h5;de0Mi,m9tT6km6=:3Rs[p5&_Pn7FfCi[4kl0i1+gYWO?g0QAA`XJBC/
+7sm=1_"?ZI0#T_LKJmC6<0sMGXp0i3m_](*bTnV#AhCU7ON@:%L<8sP4`(2\Xmf+r
+\i\*bOq2Lr-A5*.aA8fuIBB"o#)N7QnGmM1#*7C`7[bU?cliTp%$<qocZ!V-)Yd1P
+h.+SRl96U(S5q"^9O^mf$!RMZQ@2Gqa(Re2#/p;78n2`_,@kj(%H@WX^iAo0DQ1XB
+B\ig3H<L\B#9Yd$Nuj/j+F^QM/8S!f+?Ed4%gf#<!T5e<YhXcgl2h=lonE/pCi#4%
+\HNUi,,2#3Vi!&RRP$*UW+Dtebgbp.5d:;kJ>K,$-0HN29+F3Z"(4.m8-DnTX96?%
+"-%,A-"@gt(dis[!lJ>@K$l30Ce-sh*c^P38Y#F0RS@HNF@fq'Z3I2CTR6"Y19JWk
+@VjE4<-p><b$rRSmnQfUP5^,e0ko3\7Ma)o1asjB])iDpZ-*qt(AgJQO6;UHU\OR<
+`jY3/Q__MT"0@Gsj<TRa=RFu_nAa,_C<=oZ5]V6%n4M(_M]RQ:9CY_.iY`pRDK2p>
+GqS/k_HrF<\i8"JG/[FI6;2'Qng0?C.5R&ZbUfoWqV5d-BlG@XF29!!cn,5G0+P#n
+5VQRg-j'`)o+K9j8,b=hkfWr_/o>G(UXfImoNDNHdpgmRWr.k<=MPI\V(KLW,+SGr
+NBADRG0sdMX^2'=@e/hMZQM$J:9k"1>[1,#"9gW]AJh\0LkeDR.-1p@UN$O6TLf`b
+'SfN9bbh<MXC-ra@#(1e-RTnZOF<ma@AfE[o7&U!Sgj7'8>a]W:q7TBr3qLi1P]r<
+LP.VgI-u]1AFJOW/%\6R]KVRa8`THqUDSASG!Bij\L@l3o3gO=AHj]B1f&;/'.H#i
+AB79h3&9S]M46?AW?,$H:C1]Ga'tTthP9.a///(VA0!]'&oqq^_PpO/Y[3ja:JiN2
+_FbRt_Ga#t[nkO6,_U9'L'Tg3,_r.XYUm'^")<b5*)T(4bOn]9@cg[CU-5><23Li>
+aFcqf_PcsXD'LW1M8X^T'ce`ZU@MG\Dq^oM&p^^]3WkBo%h=*qH@QL3%SFAlZEFgQ
+\caZ->6@4@nDt-NIb,mC3A4/u0g]?L%RT>:1F3Yij$bu1@1sA:5V%)KK!neJ?nl8p
+QR;'HnaS9X2NXp/Kd8WM8]$Q%,rLsM?E:^^o_T=8->h3k=G\Z>XI)WiNl`!k+N>Nf
+"B,,+FQ%Bf@E".#:Z#]bo4:R5+j)hjkpf:1G'%?EF7s3XD%C5(E->hu=/&sfWDJi"
+^3-5j8h*;oCa=@?Q?VE8<\,T<A.FmU9k@od7\`/"l@K)V#Z3.U!e;i$C6%iQ1'6bt
+5-r]'OL83NW[pU$Ic*8C.,r$m,g7`c2p$S%LK6EtEG9>rG1A!^kH(5\K`Et9X[G'!
+8/EjVl;:"Z;b-H^aDgG;_Q`Yn29e8/BFt`kj>Dp1/I(o1-7W#3nk*Kq1LiI>BYm7T
+=__CZ3=h49`dkM8lsgeE8;<4[BbGN+W&eTU3/!Yd%[Oo:+a'-.Gd8`bj9p4We3Z(C
+ERYe8f2j`j^;L0NAp&QJCcZA\5!hX_<qj2C2aW5#!1-$`36,00@Pq(2/8[t1Feak5
+7*7g63+bpOAuBHt(U.LnD\D,&8.l\IW%MaR7aV@]:?opp,&VLeh)C[b0r8FFBKoK2
+0(S*0bTJeHXLd_2HKp#5LTIXY(D:?2<%Lp).c<NA"p'3E57%TLGJcW6K0Ci?pg8Wm
+@$,.!$-%>rCGGRXDJ$1":i;4D,mqP0/"eT(-)Sp8FV!dn"UcqfPMfb\&lL$O>_WG9
+!miNWoPC87[:;1?a&,$pb(QZN9hc4N[)gsb.iPaCiIX6Q#kVb]EkP2'AcdB"B6/MI
+7`RG`=D7#&pj7u<"d"!8n.4bYp_H/^M3&t#9Shb0K0j3#IUIdc4JO`5P%[0Rn2U*o
+0^!V(LfFPu5#jqdHY19aUe:9r/koF"GAqH1LI!MII-LeoPCh5T#r['PP]r,T8P\+o
+Z@nESJlR$gFc6TN3B(RX.Yc!O/W6!lC?Ri/B#]Q]A=$M_NRq(,;H74L%<10/N6hXa
+49Z0bB-l^cZnG[e\1EG$4eNiK?nqjm@&df$53.;L-l>>Z%eSd<eu!2:m,+HfC+TOJ
+/>d#ZB7+=1@`HpP*3&.B7KUmGTRc.N295EG&9C4h:oRhhe0Vm5BS-XO1Hh*[%L!_6
+7@A8L#<)g'FK\J&\\nTE^h/3_8n@$W=UK&D+Mt""@;UnD,:LP\#*k$@!:Beb.Pc2n
+TPJc@80j;[,N3o+)iY`?V`Lr[ii#1#m`;uEARYk^6oHV!6;`A=dX')hVu[7'j-$/)
+W$=m+f(15RA=5ko?KG3IkB=_ATnj$L(]q3o3Kupd_FK943Tl\ajC!'Ee86R%*t0Wn
+`.ZBO;5"))=,(LVK0sag9(eq\`<+UI3ANEkAI0qqH\\oB=dG.E6q$eQedl`4YNKJ>
+IQQq30'D6;q7ZtB36W,JEW]:!8ssI2\l"/Vl2Vo:THuuK:^3S#"`fq[KVgQ9r<X`.
+4Yej$NkVFQ#sPCY[^e4K@am4:2IQ4(YH>]fmIEg<BS$<66L#)6]8!Zu&2tBCnKfiA
+kS'JHb07*Hd\WN;MNnWfFL>l%Wrq7.Lu&2ecsCKC0P1C2HO_I6G=_9KOf%NDp(tUp
+a=/^]3TM*Jn7*=Q#bcDC74'Qs#>1aJ!-7Cq9kRM!`ju2i!)YAY[6j0(dV*[,fHY%<
+'XhJE=)^\5c,aV9aCtAk9o_JB[[*"6@qOt9UTfd-7iYLc;pJsT\u[\(RVfSM'`>1o
+K.nidShhTlJ7(GETL@8Z:oIqn>m3f""p.s:_$\E9YQDls3+?q#DKu_X]bpd0E"YX?
+k"(BWGN`$BLctl2(.3K><^\!/A3$Vi0)E/5QtKl\]Ob0/"gUQo?8.O')oAMlR.TQ<
+2oerOh+<f@0jV6\R"m@eWa<ISEh.mIr]H@4,Z?Bi<?ieZIpb+>^g%&>XL&(,%o#C\
+kc;K!49S@!!lI8WKA$Cb8-Jum"e]Z:^jlU(?j-NfKs5JHe']p&[`_"gc"C*oLZ7SX
+m"X!;NJQKo?nuk9:ujW]E(E>5\uKS>!(cPbCF]DM'l77BUF>f9%VW9R+@bnJli]bW
+M1(C_8?38_lQbbtm:.t4q!:0,PpW%:%L#9I->PqHmao\YbL8N,Afp+[;,[ZP3=C>Y
+V06:/-^rU'f^*E"kiAF.<0s@D\^##DF%U7<Ju3ER<mKQ`6TiqRq#^bg!Xf7G#gng*
+cLLWObO%cM)IQPI!]`2e1MF\5b4rDAP:a8fT]:DPbbUu/MjTZA;0E:\Y6(kjEua2G
+)+?Y7C"F+,Ld[KK.<0[Da,m.YP1Xm;-;BRs8Q(UdO#%?l/ZQrQDYpCe13b"\9+g0O
+*p3Sm<%9\74JV=T(4Sm+V_8MB'ZGK\KW"psKQ$Q@hQD6>XEuah>--QOFb234#FACt
+0[-i*JJ:p<F4Q8,T(1h&?oX="*,8IV@=&u$HPjNJC(`j.2EF7"Do6rrA0nfefWW>b
+DQ45*".;Cp8*t!PO&GnIW_k/N7YF-r[#4^.q^Hln3M?4a0_Gpp%n1D;QZou+QR&"#
+63%>r!^Rq/:bi:VKg<HsTPuS!$\C`3E-Nod)[QL1@dp>gIR,->8E>osbVU:M#(j\M
+@$!W'(CLI8_1:aJ6miWP_kM,nO>Ia_M$)_Q!3f3C%gYS?:tS;['*s3N[94V[;DK#G
+7UQiO^gJMtKB46a0MF#4#D3'9:ln4!&-deS(-nNp+qk8V68lAS[bks1"n!0'`TS9O
+"bP_G#co!a%*:nI[;<9Y0cpP:Tto$"5%#5T#(n)(#*:Y[%gbZ+5j3kt,8#gO@M).m
+7N`A#"G3m2gcQGa#Xaej8<>qMie7HBm/>9K(!Oa?@.9go.M)l>!s.?K-nZ2>KL47O
+Q7!o>"\/?6GiW<El[cmGT\((5(&7!F66-oD*9b*fg'!340Ie?mTSOL9L:q94hTI."
+Jf*^&M-(Pm1+sIc`\MMM#)L*X!\+DNE3)A2Jh0e>^Fl0e+:81/qHhLdNd*?"3KFG"
+_1W/70F\)VfK9lPJLEPcWZ[g@R4Q`Y`4E;UE$PX=^mHIX![,(MPbfnY?jTJ)#VQo=
+9C&]-V)#'E.Y2;,rtiGN,X08C:r4LOTMK=&N1j'_.(1b7$HNDP^jmEtcYfIH"G*5-
+-3kZT`2^bLlR_1YZDeHi#;P\Y&HgH\8-$XROU;SS+`(*PQc-.T<.Q49UAbD"lqC^m
+Js:Ts'u)E.)#;\J=qHlRDo>\AZB*-PJ\!8cNFAJV6nZKU;([OB0i<<K$W.HmU@qB]
+oB/55=#J9d+@tK"$6lQ_-A]>n-/B1[EmQ#V57CX7A><t*0`O><Q2*R-."+qb;_4p^
+:..p,d>26kQ6tloWDs;m])^bE$HI\D0e>n(YVZg@+IZiRjP\<Q$n+l^>dl9pC@2M7
+bB0Tj8M8XDLV5Dj-G%<<g>=\4mi.Z^`Yntg8*Ppf4^B^KZ;jN3&9Fm%Z7rB9'Y3.[
+cE[Js'?n)jX.it-!^NPh#VT2YXL^#gP5fpep=5XDUF^^="[Vl8n;+>'r$[IIE*>+1
+,l?R=BAo'F-ZgSp>P!cM!2q7b-]K64'fM`c2A$-:GZ=,7/[JubWM'ke%>)BkYQu_G
+TE#B'c+e'6"sFgS%BURUJ>e)241)E1Qf?3p9JefOn_Z,2VX6%<8!^\TY]gVl?/13J
+mN]q[2@!91^b5&-_#Qk4K0\W]%Kp2o5RaW_fN8^g*9]X$"T]0((Bf:T4uHsqf7H7c
+#[$'IAF6Kd(XuK_N62t="NV":3$O@hO:u.7^'lp.^.OmKk>Oc+B=L8J6l&@V-&+su
+T9Z^tiH!P($-`'03)!f5d_9#N-,hG.)$lO3UHtoRIMXgnMU:YD6tA!(X>R/1b9GG6
+A?>bH,3Y:fnSCFM\X8^_@`Lag^B,\!eUe>bog"TV1eehS(F1PX;P4F[AZ71,FUW?K
+$&MOhMBSmBLm6K'=AJ,qLn,2D+:t!H,*4hQ_?9'jd;gL>Nljd=VYYnf0iV%D\g<Z\
+Uq2UqmNZ=`:S/7.6BG`G+NQ,r35b<9bGgVO-(+b5ok7RQWbsn0]dg:.(;1,[+^N/l
+Ag.Bd+X'_[0o0f4aH@rae>+JnC*$i\AAX5!X3!1(afZeOh!rqjRp!g'`h8)/,3L_1
+==^V-,$#,Jd)89p##PT%db;DMKRn&T)&"/K#ocQ:$sMr8!20Q5j4@f`SFe.^0cBgk
+drQlum'I0V:c&ColY8:NJ[6Z,,R*'J(BZpOO9-,H`dk<P""\jDQo8+OTYMXla'H#>
+oPW?@)<EI2]TetmdTt0<aY0LW]tBNRn55<p:l"NGR56a2&TWFj[45q%Eq##t3#+:n
+<":Z>ap*C(('<iBP+@CeOA"9fN%'GH['\'mTh1,IlMYt*H%(Io,&WaFn?s2Z,nuV1
+(,Lg#"KnLZT@T7)5OddS8MWhhl=l25ba]-V5Wf>pGU*D%QkFun4:-S;1'XR3(4rbs
+$]>>&"g?G6J\X1g:U@A/i/eOKRlUlc3`pe[ksJI'!aJTJi]N!)Q,U1b>EQ]9@uPNq
+UmBSrMsS;`MM?hi."XcrgAHM>^6Fhs7n$-s*<Z%h&"@N)DQLZB"CSGI5%%V&!C/(:
+TSsQd&5!<r-mStHK&csLAUb40c^m$KX%S'Lmnl`\!s!<XJ^S",J>k.nll?_c8O4e,
+$56/B/iX]5nIYb:4HE>N[^;4MG$[as/kYLI.!6M%WR9lr-YY33<VIui&IUX"2#O1:
+2$hh1h.oi[Q&s[PZ'C3aYD@H6YQP6=S#?`Xkt[eVe5GjCH8B6!ksNH-0Ns]%L*b6\
+6DCu8?3kYY<>,".bVB`a&8L/[KHQ:bPS?UBS3+d$o]_u.(A?*Q(ST3E^(@WJiJ8ua
+?kr2E/m2)XVBLk]p^!%FHud2)nK;hiI<A4D^u3gl]jGLe+[k#g8XsQ(<\Z(L7=+EE
+*kMi?Yr3O<iZd#gETq4q*GclTr3CE!+%/_]:Ye+1VU5OHEY+'l)'fVqV>>[\bW.g;
+=Znek63BJb:m()g(EtaahqSB<""8cR"@1)dN>5l^JYTC%N`29bom!u16V)5_a<73p
+?8%[,YQd]4==-_YM`UbX;qKq?h3A#K(K@t<>>^-@fWao`K0`?S]?;Z3i0H%<j--<l
+:Hn6$'UWKU"G"Hn4=LK:PTja3dH)-T?rF0Ko=+r(b:gD*`:7;Gkh2,M05Lp?';a4$
+M+_%+CQW*Kf1Q7&iU`.GjC_u@U]uBlQC*GqfiYYKP)t4`*i(HZ'Am1g$AnHE.q$R7
+K"u=6_0A$H@'gUM-ZfZ%J/nc>p^$r@Ad0oE(]o5(gu$&9F*;S)-,pB3!7[<?Bg1dV
+>akjA/,<`F8`54-/[_XC5\*M4(W^N4KlqejAr1([8nhV8J_T2(_#PMY?u4edcrf_P
+81b!7`!lb\E!QI%-j>.6(kP"J$Gcuq#,%L=FoXn@!;.s[r,W2_S;9if9F(^A%Z:@*
+_+IV9H<$rp`bC)Ke^($Pc75AqX36rjRh;8E=H,-jFC'GLDD:#4WorL9f`N/p.MFOc
+&E&<i;._VQ?]9Mj!3&Mt3<>6,-]!+,(.!S7Yl9Z=Pa\:uO8K=m>@n;tC^]bd'RB6U
+EAP+OOci<t]]hctTaNC8CGeqC#rtD^JPdC;-C`If-]rP51$g14PH5*6O7L*%1K,)/
+4,DP1]d!lNnR)VV`N`hBX4kVpC3?)0E0h52O>C&SCPG*2GSK^j1&-JL44+j$)Do'G
+'B<g5S-1+YPTgu\&s?h-ElGpi,7g3a'es8Br&1rS`>ddTOUOLP![&HH`g9V8'MKE3
+>B#o`LVBNlQml@Z8TkXr,8=:p1U.&o@652q9sh`!'@KIjCLP/';iJN7(<W$_!4519
+Ko1e3'"Tl]OVj5@^p&0TJC'XA,2`t;m>K(VNtCFrksq4g6G-e]#uMKRE6eo#)%4Ph
+N:?3F'@4GhZS@Qf[F2"?!cTq7+f,Na$%akNU5k.V]dV7@3Olpd0p@PQ>Rk2+P$#C.
+$g9%H@3F9a.<-4T+Rp?O4,SY+&E*Es!;OITo8M*/'O*o&0h.ZF?RaV7JG9]W&DI3^
+h17O#*O-giL`$4qUb?[)JRB;qTGbht)3+-^502ZM-jHf(U'nm*`V?blH6pS"SKNMB
+7\I=2!AKGIlT$]CJB5)HET&E66&uUF1'A)bjA\Nm8I9rR)YoSt$-iQ*%Z/7<aIj1I
+L`!6:'*1oG!L/Rp-kubTpPlBq!K\-!0Gf:B'7hPM&hjni^_@,pSf'7g%ae`!fguKB
+YDj\H.f.^F#bqCZfr8tc'tSr."$8gNFg>]R&R)[[e-i&r4:AC3YlUF1E>#1U0dc6t
+/"lm89"[kJI?Sa\N*BMJ,A]E:)5dIi)<,A)P.mplB,7:TOLZj@=SnhtK9l@?S=tk+
+5n0LYEh3"VRS7Q/8Mq6_TFTB-&rQ$L=_o#!:(L3AXFpA8fh*Z3`>a(YQbs^dBi^;Y
+rXAn4N03B;.\2Lo(CZfh*kG^Mr$9JFL)1/L^i]1__#T`KLGWFY[b1m31ujp:Bb1kP
+Q[&O(@qh$_9f'<]O=Tok)H0HWng?_>-X8<l!0dkjj;VeO$u/c]h#]-HNXnti&.9X,
+*>Y-L'->X.7,`;7)e>`a:X!oZ2TaVc_bA3mmO(V]:V9Lp;b3f7b9Z[j;>hf>;SYuQ
+R$-0pMfA0MGRBK,R>r_eOpDCTJ_%&%$+F<1.aYX:j1l<Am'hONObk?T8M1=#jqXjK
+7Y2&/_CiAZW=,L17M-KXi@pi+k>=f<8YZr[]Uk]gTuYX+Nk:c7H!NElS#GYB,4.&o
+@7Q/o1*t1=$gP-oi><VEjG`Y"&BP;S8S"n88Pg-K:jINs99,Zq$-L$oXR"L=iV%gV
+&HPuG!DjQ6P4>_p&PKFT!=7BZiUs5qZaShK!2pI1R4JYa>E&BXO-2"!3C5!BlHaRt
+$$iM#JuXa/3>/!?UOa)E8RalS<=6#X$^n3HJ@uI:q#PFMJN+Kt?krdq)T_-7T?%TF
+E#\nO)M*,NaY4F4;>gN/('.7,JVXs?>5*SU'qJjtQ,rNueG?nRFdi*nNCibm]W<Of
+'S-)4NH;rL8m;l^6l&X,LoRsMkeBClmP+$p&UHqUP,6bNEN?tq&uo!+@7H%b6j[7P
+5TQL<N7/<nT@smi/#\:cZ=XnN'-k^%5r#R4=lh,[UDiCVZ!q+0T`d,a`fl=UQ#UVr
+M<L81>El2pPsE\sEM*foPo:6%$A!%Z']'3@[hXFG/*OpNd1m:6'co/b\@_Xf'lJnm
+.$G(=16'2m#g\Z-.EZHt-Rjbg/QJ,71(LB6,AU#7YlUO%$'8lig3ohn',nb3D-Z?I
+QQ+C293tJRA/%`ZdNNau9/NtH4>]W%[WTmAPSm_fbtmj/g/3/]0ZVN0^;6;?S2D<C
+iBBY`b1B%q`2l%Z`TTj';\#:0hMpooiAV$&6djm&]o?VdZelWC%h4Ec$5q\#ifK0C
+&qJmN=TZkKm&Rb8b+/5<fa<imQjs-RMnWmKW1&f!R-'pTV5WW)Oo\gTh2\u7+e<)!
+0ep'GC9:L7k0+Jh\9,EJ"F;[d8/--7Mn#18;jiKHeB#2H]oWXn\b3GAdhp^JJB410
+Z'Du-i@-e=WGo]eiLhf;k"8K4S%Kf?ika&#lSeT./ui<;0^^PY&(<!:!:#ZZNYr]O
+mp?`U.<Z=3djqaE/!u\35%k?7fVp'>W"-&uN8rFBiOL"%>8"Q)]EKuA;jeKfQV&6<
+0n[0Nh$_XUd?d,o(%LDuM]"H-&:keU!@cEI+;fZ]p42Y-!:USO:`4i"(_'jhYB78T
++Q7k]:4X&Q=:+tX.Zl-a[2Cs:%n7fkM34aBj=9rYJD9+fi8kg0C6;'N*!oa%dUA3Q
+?aLNscior`Z=qKf-tYm8OPr-Z6<P!K^a?<3]O?7'JEo18"d$hr3'C,)@>g'0:XG4s
+&?r)`iMAOjR&`dF4S,]b!5@39<hP!8OWb(I[-T+h_jEGAB9^rPT[*ul6(9udT*W:o
+)E&^D<k.0*;!#$AR"rHb':S9;RTZJe%)9jh`8#=<j(]s"P:77MK@3oE<ttcE@)a#$
+V%6`h$!=UAe*9fq?GMO:Vnuff@_(-u;T+5F75g6.91dOr6oG@lVB+>\8Bg>GFj`1D
+h>QbV@IEDa&A#[%74+tO_"\[:@'mj5#lt5Y2$[2HVX"5CX5!B!\.PpS&V3'%Y6`_F
+0G=J;'S-8:fRC1k45/6+&qQD_T?%X<Ajj6_?3+.@4uh/Ep^iTCpAk7+SR<"d>C8&&
+UK"K>/ip'6^s^3CdAZQ$)f839pmE#B1T96C@k5jDV@5tVZ^p=J!4^sX?jkqYAn%Fo
+?\f-l(o&)Gj?'RUNGoJ0W";&-nEoel*FR>EaO)qDN^o2J*t]3^g#C9iDr+WPYb?bW
+_f2,7)(LK8Rk_+@ak,-TSdX"t*YU4JENY4-`?+4N+/fSh67S1V0V#bMW9]r&o94!i
+*+>kLN[aZ%i7B&Y%;k$l!7CRDlAl>(<?A9;[)mJDSsI8u9d^+IU7($SdagR,clb"R
+/BqY'!?b&q'<)NOJG>QT=:O1lPfTHqM85Q0hXS_I2AU=*0_iJJ$k]]$l`?KDc;aME
+7EcTY3gCpNLh4lnqE^@:RHE(7UXa7A!4_T22qI3*P9DJqJhX@SnObZ4<5?-Vg7Tgp
+ELUCH-*bXVko,X=CH=7)T*a,-hL]eS[CR5)R\73a<6:N@QD'/;2<tY]fa]c?XU_FB
+.L=AGGs`4M1?0gD$[FM;N27dL'cs$HRQ7R9'G(mJW/?D0$B["]DHrZ^I&=bqRopRI
+N:[I:PU-7!2[9Nm2^H=F]b7`]5?XhP>%Qs^Wj^=E%n!0V!]Htoa?ngE74^maTTJG%
+b7j/A,n"E]HlcUnaW,%-h=FW);d\e,D;A(p@RdTYWe3_P8O;B+-dbm[Yr7nP:DRb5
+(L9r%+rQucZLe8O6khr2FA5;5DH0VTOaNmS(B4Cf`aP5KNQBs?(_@/L?3(Z79*RfF
+p_g0=pjmtLSELXrUAH$R]H(2N<P65,$2>pO47;UNMM[VMG=i64c+aD9UT"tF_(6qT
+>r`i'T_63BXQ'f;]Q7`rW0m/Ocjm91H`9RV%6Le5*a+mRi]"['9#(pV*o0H+fT&;d
+eZ+_15iFCgRE%#J_.JnTZ=P**_SC01S5Ne'53f_?Ys]&DOEns0=b"M7li;k`36<`3
+d'StW\17(f'5q`E-jlLA0-uUHNtFm?cA+#Sne?A7Wt,j]-&hp*U?*lM!8%pEoiV`C
+%14H^iKRRe\Yc+,BL=\PY,>8.eI#VM30R:ikj%!<]!.SGOe5QnUHmbJ6KAaa%05V?
+N?K.J40Tf0*dR=C'31T0BgjFuB8`BYMqcc2E]'Oo*)EB[(]3lm*:sqc/dq'Hinb]u
+&_FL'.h5qsYZ]TF9eW7<R1<\c$VX\@ap\e%jV'!q$C/(T1\Z"El!"aITS!XrJO58K
+#7(;h*Y&AV!W^ST//f+OK0c_,>UCNu"bNI&OC1++%L.O$+J;\G.j5'diD?2+&do&3
+`aEanN2@'qL4_en:k24h((5ft@5p59JH^m`,r*NG5%5$0"@?)7Qp`&2#R#_Zq?9h>
+&sU97eR3Ve*E'.pU*."B/0>7[>4#_-J34YT!!"X<CTZIZHbNj*fDGgI&d\`t6"'c,
+L_Kgm6K]29O@Um1X+]Cs5^4nOJ^-e3d5WO@.h7-Y!O+Xj\iC)AB("@<jF0B;LduHr
+3/jjN*4SL^dSNUbJY&%G/fH]&)HdR#`ME!/QHK*CilLVOgI)]RWMF^1o!iWpD'$]=
+E-OSnmcip+kImC''RE&f`SNf3cc>5Aqu1kZM&Il%W/]NTNr^Z'k/!e7g,.$)WoBVX
+ZH9B`YlTB2)Ws+2Z\#G4%f-OC,UfT.\KONonE2rn,@J0gC]i8@^Tj;C)TL+a*X;`H
+YV6N>JI".D"JGfX%YN_*64SYl(g7K'iAaFEKV9Mb&HndU4qrYn&5j$l@/)l7KE32V
+%g2n-9Fq:kkUm?t5eo\t"/+:!%"_lK0V8D]g:3P'8]W0;\4Ld7YosEWcHRW8Ji&-0
+5_K?-!K^JF9!i7M]#`2Ho^E1hb_ga0Va-n1SV#B7.LZBOXQ`W7T[5;$::#1/%86cc
+7LoVei&+gC^pl3/<Ih;3$3H+C.L;p[8n@HR:D6op5#ELU"\"K9ArjUj_Y%e6O\Ahn
+0)$=M^TNS!AC_s*6nk+Ui2\)5JgpA!Sc^di.prIEP/r;\Z+BoA<hR=%AQ+jW4K0fd
+'-a%MoiO"KfRUqf+Tp[G6k9GE&5ElA+_7Md"CZ7?&dBL-9dBm?85Kg!@,-*>W],Md
+i%H[As+"_NjBfi0Lo\[\2X('2LW<)_V2-MjGV0;SOm"V4"+\Br$j.De/dhcF3'/2@
+.EF)feTu0[$Rs2Eh"9M93$bGrac,Y[DEu2`H)M0UY-=qJ\t,6<\!F0'Bt)/4=9?;5
+0FJ!)i'E5&^r5@D<kM6^3!/$J7CiU]GX&;$TWgHbCK4Io:MTS7-]!@^[-uR$>OLFL
+W_//WJV$T_1J,NE=s%e>;'hlh/SGh+UFPnN&IhS#F@kMf'O'Sf5\h0rL*kD/Uk,3<
+\rdQBXU@n#-7B\*jL)%?jKh7IF"FMrCKaW?a&&hUqDde&Z/W91ZngRLVDOI&1]5PO
+e-.u>$jH`&('I9uN`Y.=`O2Ld"ktJ20dWLE+4Fb4T$^%P,gkp&VV9^%g@GBB1t3/&
+11A=f#<4$GgUg91Z:XY8!\I^-XE\Ea<BB`&KFjrMJdV.+d8`N:aG22**^Iru\L*(G
+N1a):F,Mar2.T+MPgZF/b+Vuc,u$P$A1WS!aWrQqXHP8;G`5eZj#mV^"\.,P*93aX
+B>uLqT+XCU*a)Q#7!t728?@Y?B`]X)_8-gn1'ELQidIf^*Ah^RH.6;a,6me%a`8qL
+MqJ[eVmUTKK4)3LRlN.&L-!JF<+$8_8cp2H%C1LN#ZF8;"2K-o[3.F6JMUS*!.YO[
+YWTm0O;\3Nr!k3!Ghi@e(f[MlgQb*mV[1\=MXk<=WA=g!Mpa.F;Mn:Bf]#>^6uJO@
+r4<o"</69Ne22l`M8'\S=GUBi-RBV1'`t,/g<-3dWh'm2esbl(HCb2@XpUD+C5*1+
+ArN`B1SXJu?OU1SNJP_UT6!"]f$cRQKNUm.@Lc$So_qr&<RAt>lB"poYaF@.PW>"(
+M5=?t!i]uG!CD,`eUhlFNcdJuV3=4"#T3a&Hk*?a4:"5<-O)i;(P;]c%Dc^2#(Wcn
+K!8Vm!GtsC5i`Z3OBMsY3$SV-O:nDZ8d<i\&8]JlK[H_).[K?),ULT/Y-WAHc.h5*
+.Fj6XE&>:,+;\0P\-o*3G`Z]L5H(ORX-I]\:l;MC+ceZ[`i/#$Nbk:DYE;>g6pO(s
+)l[OdH=Y645j4a*7Uh8F2$'@C0nCGc"$htkU]d1m')3>8!*g(dO=gek':f2tEYGNU
+;IjQg3%+5K6G%9\r8]RN,:%Ff)i4L>9mOW]bAo!BWBUUH&J70E!T?oi,43Mr-t.Wk
+S?/UI_4,7p^'/>H&B5JOb\8mb6uD<R6Gi=%Bc"Qqc=i=((krXFbWJ]UnA*+!Zm;"G
+1F-Ro,'X*pN>]*t'M>pb;ZdpHn-]<UNgu2#ap%kj[D`,a'EQ6@#1a&!-jF/P8n/!6
+-IHL5$Dh7L!h4X;]<,eJ)'26[D]#$4"=rRhj8i65:YMQt"7j):jb7*3/[`W5Y*UNK
+8*][i<U_-9'\]on9VNsA%RgTq5G(:LRuAU7+t>h_)1oRie+BbjPK_CCZ6Y<`q;mRu
+f_(k8lF>l?,14i8J"/8Y$KkOp+cibq&@ClYEZ&:g,u.MZ3ZTFVH!S2S$>l6`FGUf=
+E&I3XE^sfs[op!na'(]4,>qWQ(X5TI;X%=X(9H);bVK=+]Vk+3kYN.jO\j"Vn<oK#
+Ct\pdf&u15d>UH#W2>8mlWFA+MBYQP9EEGC!D/c$+@dL0!PeBmXjD1\jZo4sEp\Rt
+869X*Y-NZ0Z>#rYg*]?e]PN-6a$cLdA6DMZ;DdTBSs926Y7k&#Xd\oC9OKme'#Ik_
+5ZFO^W9D%&];m<8nVSk)fYJLU4Y(<\$`4)NO]'7H"sBub!t\U:!J!!1<Ep8[^g5;Q
+?mQ!WS/;=S:(9K`:^$j/&HStHR3dH/N3mA9T=E7Y$dj_Qn$VedkL;lA\MnQ.eK[_g
+BeVgS`J4;$%W#;H$.+9o:FKfN_O+h(B.$hOm+V'o;D*et8Xaoc9VXt3(R1BrY]1H[
+X'A'D#,VGc=+H<@!Z)g\2@pt4MT?+8=Dh1Z0f^IN"W]/[`,3UA!&uYSD_?+qm-Bn:
+]:-m&,.RVW&@*H&jia!tp%#$5IDVDod&5c!FR'9bP=#-dVYlc_:<D`b.-/=$'IKDI
+'\C2'N59jlG%!2A'38nTrE(^VFKq3Vnm7&AVQ+hC:VL77a<^io&OXT/Hh;AlWQ5.D
+g;6V/"@fsn!&D'A:'7VUFJf6ij(A"[e:A%`0#/N17"T</0Q9HU=='"'A`-kV+tCXc
+o]8VX`FN!1;Y(%.@c1&c!)CM/Zif5g8^M.;%Q7$Vg?'\RfW"4'j!&mq$nZ#nG\o'0
+lUWtR'KF(3,jtLtLV?VZo(:ou1B\Q/jS&e=Ud=>]SYST9`)K"K_Y-4p0X/XlN>C8c
+Et(i[0#B:oa(W%1OS#`XKW%XEbSDF^(jf_n+sJRqU*tnp:nuCh&<R>3_dXma)Cd&q
+Q1(#ZV<1lULf<GJoWPVtN"/2X)C)3a,RLiI9kt=-Zpr:X'T+<d&Pe<Q$Ar=1c;@Qr
+6\+W]?EXDiG4:%]`ggL)U9^i\=MgZDkD9!f)Ch`S.cMLq8G(H68iC182God1LX)+#
+S,p_un"m$MkDli;hLsmc-\tMF:D,,`N>on$Y[Vi,9r(-+C'$fe.;BQ86Bl>]E%GcM
+Os7>@i&nE_2GRf2"Q2`P!*3T_YXng_8H;Qi?pY$i7Kd*oA)L)b5[I(@;?UB.\;"5k
+Ulkic/q,3(s.f*&L58$'(]hbhRAOS@j=#gn_C<kVK^MZ9W+KaumbXdn=Q6D5%N%&K
+0L8'.RflJjm;chb'c$rq0$-:2d&8EdhG1q4!c$?hMi_nU<i9M(")8<@c0G90VCKU0
+.h+$Q1!hntUdYjB'_!=].V_.V9YBDi,KiVqa)4CY;KC\R"7T,B6?JW)IhAG$"/&0e
+K-XnOgi?4(C<1"$d;VdV4@mDD"9pk0TM2Fp<!=C:"b9:J5Y_L@<Wp3C"Q3*e'-m]G
+<!9K49%"O["GW5AEi'.f=!Z3q;Wr,jnHCG7KHe_8nCAiE+Vd]GoLAsp81]m^oV%8]
+5@QrBB<EUq7P&#%h[BH)_AI*cKMhnK-dGiZ5W7mM2?`*c+WsE$+B2kO>9Zh&"@-Ej
++BAUf8-L,$"N8APB!tIZM?6@U<2.5YNLYA?BIYb&,smVKkotb6.Yn-Em%j^]$tsUW
+,+*!WnfT\g`-QFiA98>G=<u[@Wcj'ejE8is\Y>TDL>'?Si$dRpOO9"L;*-<ab:N,[
+nAb$;EP,`BZqi%^?=KRcW*7LT58GtQ3"?YQj6Yi+=%H;FY(-Mu1#eK)AoajdVa^/m
+V!Nk%0IfrZ.71!10#/fhE[2mHP;&=JUgTs7E7X;-'p2PEOO0%!ArdE+JFn/^1f/Bn
+2XnQlHnoXfLY+&rD\l.e?=P8[&(^TOJM%%$2"U^Xc.F7VWk.OF/dR3Ck2%C1c<Fko
+5jIo*_\sr__#I$p/ZY[o<(nG^HV<F3![V5%5U%cKQ@n6dM4tDK6E4/+kY6d"!>D[>
+COEUP/d$rH"+X'[5Y;-O7&^`&"1<PZ5WT&9ipJFnE^bLp^aLbXkr.r:`3%JtYUinp
+lmEuj,-_3=!c:?'N/ru=,3Fh@`=t.=:L+%p&4Bl/FGS<-"uYDeHjA`D:o_W2_Eqf8
+iT#/\#Va-:p=rGR784]JP_d7PZ<P\s22G:iU,Mc(,(bRQR?+^kV.=]1,,[i`"j9^E
+%jV8\J-3a*@YPj)+?0Kh6SjoK"Q3qsJ63$6>R+YI"i,Se^ha1iH3PL&#JadR?uuS1
+J-LO3#G>H/TQ14/F_/@/"i+@J!*0;SAd&rT"YQ/GJ7Jg!BE\%*1'F^\eURa7)J^\R
+I4\_9i]nrC*%rMi!lAX#6ng0F-GbYs8&P+,M*+Yc%"uKFh2]R;K#T9qf,eEU7qS=q
+8RAk/KeKZ>`Lp=+i)s/\ci`rk"BC-ZeU"2GZ@YuCr0I\^/XTYfg;kB]&n65;9oag\
+fZ*98LS\$n8Us?4:^'87+b3`gTO:CMC1EoOAKYXh^f1L\8-O`="b9PTJ7&OG7''ub
++S$-Ii)EDETEI2c8EA#WAC(FaqFD_uAaZ;%`F*]P]V(Q9.Z#8uLVi^qX";]EcD`!n
+bDpQh@'M!7IR^o#XI_#*TTe_g>1.lN<Y9j!"(<A\!\%GW!(Or']Ludm@jJlJlt%f(
+XC_WH=9\:`0lV9p\1D7d<V-29W[<_D>hZ0r&9l\gKPJma,(T1"or%pqVu/h,-B,#e
+,\7+>Cc"(^&g2seHfY_hbg&P,OIfo/>R4;-$`5\aL7ZVDSq<5aeF*2XBN#b<GiIOU
+X9a%sW&R1_7,i#Jauk1Eg@)NMf)Qr'7g]<mCnr:rIReK:,k6E#1eBVU"9;;D5YEo+
+7-L:B1dGLR'/q]aqI?PF"d/XlJ4*nrecV*5o>!5&lYL;-oRF8=DSsslUE7oZ!''#&
+)9!7p_qI5*)Mo\l6t>)C9''@!I?Kgq6!!3CbjLAo]WV_d!_aY<eJ;$c/i4t9R`RK>
+,NgUsc^7`?`-;DS("u+#hM>_HPCcsb`K%6](dl83-jN-iicentEo+;Ur2P4cL9)[M
+RS@0PX=C4RJ8tho?jAr-#N0<eJ78``C'F<W#!dJ<i,f1SK4]XW"i+fORFVObQj(9B
+GRfb6p9k,)<!C'2"o!tWlBnP]JT0bY;hDGF1")<Z,VM,HNeh!C5W+k&(j8iZC"/tY
+jZY$SD!Lgs0.!ECX5GAhB:?[QD^U)A6GB-\:@Tq%Om:Ma$[?/?P6PuAH6>D;J3'eX
+_X4=K[RB>!XJB/-==ePLfVIeHViFO3Eag<F!s5Kg"bLQbE-030@#l3.TN#JL:?V&,
+"tI@M5^EUL?jM9j#%3>OTS]6?J-FkO#Cp+c?u?/+IKmSlB0]Uk^fh!$=p8;Y"^k@9
+?rdHHGru(I"YOs%!*0=);/3Rd"Md\8A>Wnq6j:ND+94Am$Z9saOA2d<&Z-2j!Z#Y@
+p`r5W82[?k7rqH8NaF)JO_1K\k7F;i^+,$LcQ^=-%gn/Np7]P!_e8k$046o(b:K)b
+R+nXgkZDp5B]hW[ks/V[J5?EB9;/"Q1:[d=?q(:77p)EKA2CGbD1>UL+$mq"?R8<d
+:TA-5JA$`4>6V;m2;I.lqKL$Gn45en_LA0K8>q95rf[jFr"O9bN1_b^8Z!R(B+j:o
+N?![$YZecLekYL%NE5^j5*^#Qadch1;!dIPEp#'b7O$pV&of4!K%qrp76GCB7U?^B
+-6ft*fVBrq8gSh"325Oe&Hjd[lR^s6FA%VqU?4jh7h\57+N7Jp1&(lu^]dm%#0rED
+^h[YWC'C8N#$KF[!,p']F9V_O#2iSf?sX!ZBoi!.@phD%jGa1a%TY0Afo4b/((r0:
+X"*+tKb1MU0Ub6Y$ata'i8Q"I)*Xh",J'0QPZ9Lc;2AOJA7fC=dt2\p-qJs!86H-3
+6mt<JL5hF-_Z)qKdDSL7aiPFj3uK54).gaV]dJLCYp`"DD("UGR@&l]9L?eH-RKVD
+_bQgP[*6;u/*BW/5Y#k,_?F=IC3qE6p9k,I;*;X"1:FFN^e:@D8!(7Rg'!K?`.oMX
+H";9P+4h5h'<Y'+<6!>"cU06s7C)T_-9d%*Y(SP3CQWLdF"*rER5c^,?078Z,V:7B
+dSX-plKX>mY_]1I.*.Q/Ar2F64V&m0Xai/0XCZQe4p3.*"A6QTndR_(bcMAJ"S9tD
++APJhFp,g^l7A`Ll0$*%#)BoB;PKb*F6``9i-+*hCF/OXAS%t?cis$j"q&GO=jR=t
+lil=%"s@F@J8+;!EX3Q5YFp1H!*fdK"pa(!YlJ5:TRkjJI:_>_"b9hE5Ze8<.L/m8
+mV[UZi)0dn3X4_-#1M91P=B*@5\-;(9TgAccD.>[S8i>)=QJgKknp_GbVc-7!M]dX
+*Gj*Cr\ibP2e3sW"ZgBI?FVM'R(tm5Mi7b::74.,?3KkAR`,@r0ITo#e%u;UE3N,S
+r-%>_KgWR9NWE%)XnYa%0^<ahk"MjA>Ql6]49/f*4f/E>0f)mNTccZ*EY$sEF!6'!
+9Ai@.'nfq/ISJG"RFX(K_LOsh/iemF!Y>)X/%N`em!!')W2,$3Bm4nZl:@_orqE^c
+5WBkei95,C":g2SiR%XM4s(:@6fJ+HHpf(h#XgCe+G`N,&r=K#5p2Oc-PD93_MLOF
+9.#iojC1[hMEr6p7g("rb[N4dMoHsX#_Y)R$kC(*J^E4$3#\\!6Xc)'A24u0L-jjL
+YZr^o$O$U*5bLdr&I8KTTV)Ikfkn3&_)@r\VVcO.?1/T!\1Ag9#mLHsO@UW4%0lsN
+5bM48&.?@.Wpm8AKM3R(MFBl5@*i(2(Q-3VTjYB,1)1-"qLMb5?mcVG"G4HDJ5nTA
+LI?^/i-[:$Xp7;D@$k9G'*a')2m-0A'G(UN_SO$t<&IkfE5I/+Qp;Q##QlcI)i_<5
+M$7;_*fNi)"p!`TrZ<5KceXWg=2I+JJ53`jXTDnQ^At;eTJ-_*DO_7G"%pc=WWK3%
++:Gs0];GJ;@&P=UXFPW?%]ntM*XK\])U&F;^hV10XT3kk#6Eb'cPOQNF1MR[^gq?"
+JUgZ9o/t;lK)/#RX5:J%mh=9h1!<An\O\A9Gk"B7<1<PFTO^Fs_#W5A&-H>H1_#,2
+kX9uTkWhHE"JFhqJcjrX6k'5!)Q4/K!913nX,ZU&l@Xu[J-ppZWj:fh@+*+)!_X@S
+$H-i')@1o!b]X/@n`&a4;XXaE].nht1r->UcmT?TY+R0N""p=b%FGP#0!`I$]Q"pr
+N]S6!4O8,I?G+Kd*?Hpn)qugP/5mP+!W\/Z$3Ls'2A73a3'7cU_"^Y;"6!'G%u"F,
+^7b]1qIC*>_$n<ng(6&ja?rpo)(`ecHI3R-J90<``po"'**6"NjXeBdN(sbq/`8X2
+U>Y63MM7`H65Ll?Jm4,=+XgM1"G(o-(^2'*@MArRLej0:fcWftL$7`*&HneV?5A1p
+-s<!Nc%nOqKm'\&M!'<X<.P2qn2:s_^sGabK.XSe&;-Xe"U0O_J3-b-JB"PcJp)6J
+$%fsGXLQ]cUC+u\N+U=<`LqH)(-`qYaT/eb`;1$NWso(]]'cTt$U6Io]k2l!f"h0d
+eWnts!m<*tXm9o8.7XGeSXKid&G/[6<q9bT:NQI9mXTf~>
endstream
endobj
208 0 obj
<<
/Length 3112
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVgjBsSYNWrqn\CbCG)iWfg6YJA&&.fh?i6i3F
+5VF@Hi9#*JJ;RHm6B#="6-S7u0qAeDo/Xn/D%r6E5ga8l@P/Wi@q*iqdP2o-OXDGB
+]^UMq1)`oBo9&/LD`=-o7e=SGQ8BN0"p4n5TW)*/7;]ig/.PGd.1sD#E`A^^#S8$8
+&FsLb[U"ZV+ef'0J/UA!jp*aE"I*XXLZYpt^hHPH"+lOf&@cVX:,1:2,D._ZE_$Wk
+cY)k`OJcJ7U/@lnd\/,r7_6HZK,?ed%Pc1?#/d"7X)9=6*DT*,H-FHYK(IqtaI^*e
+1)NsXUM/#aE]8\D70GDl[,?'f)+4]s8*YJp-r(,0&.RYR5VRinR*mdM_[+oa3=T36
+k+rPs&EpMfY\G,cc]G"dNPg#""V,L)/EK!Pq\B`+%o>M1/dT@Zq$V-9`hL7`0^^QH
+!ULHT^bNXY/d2?e_E/1"A%\6>,Lhl8%>+rE((JCt_D_s6i)9nA0,bc:,#3M?(PXKn
+EZ.+ji.s.K@i48`NWYs&2iZ1:`9"s/S6?^l@>$TW`biWUqS)FB%g7k"+QsTd6Yl<=
+2o2PFm0t9gjSc%*^s'(nT`g0#MLmO]/O5Q5D'6>b,RjlOK.'p-dDKp,'Y'/Y*YtaC
+;R@46mn8nJ[kLeG#=1%K)E%c8"+2'l!i,T';e'4f2h`E?,Wgu1E6eS\1S'R/\#oGN
+3n>OMC+tZDd-C'.O4`;#%!/3G2EuA5YVuuVV6(roZ>`rX<hO-)'e=G0JOkIs[Ll/)
+17Sl&?FO5*r='ub_DAqoM!G9s6c`18"T`aZio!obK("FNPaNmiNaQiY"Z=)/)?rJm
+V^B/T/Iq5X"$Oh-"9Td`3^FQabBBt2KH)_,ZAf8JN$B1eBK/@2P@`FB5gl*[K.HNL
+]`CQ7J@;/H<Eo^XeH@eb1M.sF$ptF;1$XBD1bt'.*Y>Y`,F['Y>M92Ss%!J:Kk-'c
+[A?N()(#SSB:2:fT5Oh.qmR!o9rgio>a)l="Us\;rG/tedPbe-hCAJB]DUbO?fMm%
+cp&(+/]!)X73juCo#(-_\D2FPSIF+Fn%A+'9\J$%fbOW)m(5E$Ke#mATd`pV7UIa$
+W=W_\K`ZD<0l`W.d%fuodh?QT4PYg_g74Kk8R[dDiG@7f6b.#nQ:RCS)T*Cin&<R+
+YiN\nX2"b>6kD82e8AO7mXAQ;cajq6*?+gtDo&]o-UT:$RsL'9LX\#[Q^l/=J1bZb
+2<gHM"I2s.2+W8FQibWF%=sTq"U[Q;2%mp*_\$Jjm:iOKKWZ<EfQ'omD7C^u"MI^E
+$$T-=Ej,,0\5m-95tO&)Z!bl0fd$uWcVbR6ON^ju_o6N0e\!i=,[#a*G\_39fn+uo
+^-cjE#&@AC3G$WkK4/AD/+*_[<Z^g>]GYjrES#s/:2ut$.u\GX?39%mbm70PCG@M!
+#?LF@?;P`*8R\1"<!9*r0bR-p`2`tq*"GWJeMfnsU9K61!fm[$!Mk)_)1jb6iGlD7
+$5("Ta4>_ZG]R@fU"1!7/C'g)$<I5d[#q'n,g+WP@*De7#1^eGc`h4:7=b=^75f=d
+5sl+Q4Tc_Fg`=nM>&*3uB/>gaYh,\\#fKFO(c"<+!L^*LP#V(+;KSRh1GNo9hL-bm
+a@6UB!eo)'S[oBhIM=?,P[r?YPbONRMQuLPL":&RaZLOM(h6:(),n%V;UCjW,,<'k
+/tB;a65'nc1QQqo-?RZC![r:AiPF"kBlnVsWTQDnn;8f0d\'=U5tC,?QQS;]ZfBRY
+"X)dN";"Jp!<?dCXC2"',hPqO2.Cu,B!AeccErT&TV7#u'F#-?<^EZ5.^"I&2>"(E
+R\BCkn0uE)6_Pi+&6&rZ1aIcEK$_CCEBDKW.KprH&jgOj#_>MbOAL^E_2'`O@:4im
+CIMqFTIpKn&0\&EQlOULmt;46C!QE9UmVs*#qfDl\d%6U?4-n*8dTa7A+8bb>PN($
+7bY&Rm^DO6(1Ir52`5=AM<.tl9b!a4&YeS!JOFf-aOhQ^fhRYJ,#^r2YSdMX@[;Su
+HWK5jKAI!S$lH#]9nA9J,AZ5(.Qo^Yl&=h%o_b.mLa`OGd/FeQ)c>)/8k$P6)\I%"
+%F9U72^(^K[3a23</"Rf21<i)^etV@OElJpgnCZZE#dRS@W^ilTstisf3!Aj=lIR_
+biZ;/ODnh`KnqPifcFK+(i_F2^tKN<I4MLi0KmOOFF_`@#Qo(1-#&U#".BWhV1Gio
+3E1_:&0$e+^&j!ra;Lk2F$YEr,mE6Q2M35R&Hd7ebeuW[&G$8oP<lRR<#Cd\;X:!3
+^`YJ%ZSsY1';80q/CDradLfC;QcS]f!P2K'k5?$f1eG&!A=#c"el/Kk0aTO;F%g=3
+2j^o\37I_j<p?`"#W*<q-RK3jBe;!8Zo5YG3\NDW*F5f>nYF\XK3i@t%1Z%6UtOK!
+?"_%Z%?T_u9Y/tpC2GE-p<L1s3g4ICn7sR5;5ZD<U4/eGS;Rs4/<]7nLQ]&k;lDZ(
+4TN:2Qe?Oeoe`lu\1ER*XhV\12O`SDRrfQSe[ppB#6mS#Gp\0HBK,#oho(>3mB-UF
+aVNa^r,[P\5"!4Fd/lu%TePekfu7\)(#pSnNUC'ua3CL?feW#cC+^7IG<[N!Hpa3P
+4lUcIZ1=rccQm5=!QVVR:YM7=WH7G7eTq_ij]rLhCOgA0H:IOi^s<G:;B/s9klZ;1
+GFRq/:Xo$oDsH0![WHC*BtE.&+QYXdFq_$"4%C4V5hOf`%1D,T(7"D.f>IAhERoAY
+H0(T=\8a+`htY6+cl1l2kkY-kZY<IpjA^d.+$HiV2W*sD&%s1+XlgB-'IT1/_0NQa
+;tMH0jkf#nqG2>"oT-K6IRht71bB2c!O1oU_\@$P*Tjcu':PNU2B&cqnGW+5pH&WI
+F=pY,r^&0ZeGYX1%,-U?^;&B/>P.lEF2Yh3gX8&g?hLU\pc_^p^8K'EIVddDXTmA!
+!o=Iid]_O.O+?R.!;LJ5qsGZV:TPb?IZKP)qCX,dc`6ZU2Y:qu##HrO:;I&$]^(W=
+s!Vc_lk]WGK`hrfeo/j]&6T2K>kCb/f^5R!D-7(FJCY2=f1f5o%CFhCJF3thg(8GZ
+mWLG(!W~>
endstream
endobj
209 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/XObject <<
/Im28 206 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS7 95 0 R
>>
>>
endobj
211 0 obj
<<
/Length 3279
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f/6URuN1*(o4*FR>XPp6#bC6*@_XJ_bl*`J45%1@HA[m2@`?A)PI37
+]HSCk&/NHno-?.XBb1AUYsFK4>W<9b`hQ(P<o%^Q"%mTI*#@K>Ku7d@&WOZZ)]N#A
+dqQbcGtrr'L=NpB`Xd`TN+0;jYic[=.S%G]"0'B"D`O5+&7!F/)&'kS`^9c_]-]EU
+7Rn\N>Wes/#+!433Q]XpAN?2T7Ss2>5]\n&9VsU94ORk$(eoSa1!&3gZ^iE'_LW+\
+@lKfL_NBr0:gB"iN+S8&]>Q-NPmLS5Sc`<BUeJ'*c)q)QN5[V&Z\UOLj+ELT[:h?E
+f;_I45hWTJ\7hTqCg2S4MW%*F(^1!Lfb+e287M<RJa8ntVdgRS&r:I!f(Oe"0N^>p
+m3ot0a((3/\ci+BNYX^^*(_Cc@:8"R3^[T=/d3oGo_q0jC]K;J0H`V"0X*o4+uo`B
+j>;l!T[GcYd#2)M_PitYgIpLUC)97A98"c("%llU%\n!`2,03[m,PW/>$gA]DM+bM
+8rg6^m0!M&_UONq"UaETO#1H,%3oi70ZZtU:_n]sGfhcN1`4[74jcr('K&`4c8U]5
+ComT/iG32D.8CUE1X[LbE&,%8Gg$^Yc=<&0NIc%6&4Jn#;*I")m;DSt%t!=3^983>
+-onGTco6tPTNa8_Y%??\['!u*AiTLZo)4Gs;hCLM/t8nS].Vb)5.Z:FaYM*#':EI\
+=::RaiK<?f3"D^[2._^kF.+urJSS"=3KJ]&)\%Fmb97(nFerh,[_2K+j-A0_#2^P:
+=r7FZJ7dXspYJ,r^,[fA<4gOX@Pm$8=?n[%ou7Go9b\p3H/Y!1rGg(L)!X!f,GiaI
+LNfEVn[u#B!^+<b3aZ1TQd^??3*''SNGN`@c])\l/>2Vs"&>]!;`i1&oMpN_cPMUe
+0\SPKG-5+em't6HZqoFVm47>0^2b&5q<N\h9o`i+@G[#TSi;UJMFWM&,;1"%c^_&L
+MY4/:1J7:=`L&T;'pMiWN5Np)Y4SCk[E2pjB/?&j=m"WVEf#9@1(LSg+aUg(QM6;I
+,FIq`a\j]I3FVY4)eSJ"8A[0nK*]_cI$kO^3H6R/E&@>Q-5gZG=3sdKQo`VM$M52;
+k;lM1HM^nLN8uk(`4XqgB5K,\p4<H9[n>p^<CWe]2:U4,elu-8lijg_:iKYSn1IfI
+0c>`-,)_%4+:PK^8?.4&*DZ^l46:=_4Cah=_b*l<E3pD!'WOs^ZmLJ6r.Pi_1i3Yj
+ScoN3PH<t]$='nL9];O=WBePV6OPCQ0`ahMPqrib6nXB/;<"i-.0JN9on"ej["ii&
+F^OAhMG]<H6tdGBf*hG89pPc1Kr!b%>\K*i0pA171mB-BiXE*JTs[ns_,92U%%s0!
+ZSlQ;NDd(n#L#4pjOah^)o[sL+?H'dFR`HqV%"TPQaK9I^_EK^G`f680jr!<;bHRY
++c5/B[`]^e&a3GTiV>).m,JkOLgI=(ooS6,T[uPs3Ph4>WYlWnK4llSO:hX`eb6GD
+3f%g[:$S7&b-?uKV,EIe2^t)@XX:nO8<T[T&5jj)MR,8H.=`<L,*K[f!%A-qaV'A=
+<6WTr=X,':0H^]4pm;u%3j)FBL(pH)'[40mOWYEl+u0UYO>8S1VA5;@4<,(<L*UVY
+Gq?<I5L"-V0dR6fcsi56dM,6H1]a*Y:h4JRo"bJ>]k]m;bT#3mDhAO]3%@N_)..uR
+>_0=>2:^(CRpeVe^sLq9ain^V$8n5a\FkI)Fq,%)$]\Z#keP8Wa\lq>O/Z!AK_7a8
+_dk`[%i?%COPLB`;tN/8A[WG;BbKB)B3'S;Jt:Vu`Rm"TWK'.M=GDRCg+#&lo%':-
+!0'_^W&H-4^`:hbpKCG#N]hQR2iu)f%BOe3[D8K6^B!!R:E8AiPc0QD'K-4I2$]!4
+(kk*J1)uGO.BUDD)hT(h[\[3X4&VeA=2h(ENa_.U+h#55gJ1/9bpb'=[\QZ5J=D_H
+70_],f$ok!Hjm6(^AuEGhLd=r__Me%84oTq?u-:UD$N$j5*rPV?R*iaJYlG$0S;W2
+cE9Q/T^X5c0ZcY.V&OlJbt[b7R9Hn+Mi^l^"o&.b;c;ojNj94ti<4M';1YiDOCt#"
+:$S>G'ciPL<F0Z$3QV<[;Y@$^7]FidX,tqM=^5aa1r8i6)4Gs'7"L't41C*G<FijT
+e(JW0T^$PQ.T]]]C8E2;>E3ST-j\KlKnblHh:"&h?)QCU:$3=)l][H_:0#HJ$NBmg
+9;Ji#Nu?Uq</r?<-[8.'\<?[#],bq@9UTT-^ucd.%@`7Y#gB/.B$6u_b=XW>U3`Y0
+A"ta&OhjTM#\NRENcUM.3l`hal!4=MgGF$!KYKkoabX"S"]D^*#j,g4+09IVr))WX
+0?RR^EL/31@j.DFW_JU=G#@ZXZK[9->Q^fg!,PA\SX&HH<L3:KQX::"*eQ.TW/Q6Y
+``g:t".fBNU3JK%Yt7r.T](!DSWBJ)`0[3_E2`q1@15h]/?_mmK;G#jS&[Ni7EJ0-
+<=g`BB7!M8`eR#o_^EknIsFtp@<,aEbpM3\.0bJYEgU+@P3`)Zja$-ndZO3tXI@,B
+7MlSe+@9'[%*2$0;!K>V-NtDV'WY`W<)L>Ff;pbOWm!qV'FM!;S$d-.Cq3k-np%;4
+V#?BRqbBs"Qp>VY$e04RD%'Mp#bg8_S;Z>k%>"U=7aX7!.u^&PYB^C$>*$DR"rtHq
+O>sSFQ_&`](o$>GEiP(gAaJeX1Xb6Zp=+iJ3XZ9\J[oEXrqliu[qlRQ3kHh$^E#_$
+PEdBG7q'dn;;f"k&TBAt7RE=)*0:LJ4/jT`c;KE#JdVU81J32dI/I)Fnbm7dQlc>r
+,8=eW"#;ntrp`j?fh`[+Pc+lf:[1?&C:B"@oF-;q)&%(L0Kt"F"s<<up\Joa.usJk
+"t9hJH&n]^6\GbrdLC'M<fN1u.8W%BP4>Grl9O3+VA@6\g^\.LX,f*ccPk,G`_r^f
+3fUT$MX6UbEd*A[g'Q!@KM#5jie#N02's5'8IfnIlB2DmFGBuZjEdDl?DAed8cZs"
+K-EQV!;+HrJ>3HaCY\Td?EI#?"cm7*%r)OaDTV?hEA)VIYC?7"L5?GB2Qr/:0>%H!
+RecEHs/JX!WQLt(ZM]SB#I$#nLg2:pE)Ek'%A]s4_LVURZMre?qh#gs0>RK^]_ntY
+r?+B(?r@5JgCPb1q_3X$DsI3qS=jfo"q^h9U7_O]!W~>
endstream
endobj
212 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
214 0 obj
<<
/Length 1056
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGVo`+CVA%Ru$N\CrPo)3!NDctl/o+?:=UUa!U)
+?:QH\bi^\]'X8s<(r;r!RH3.>3#KU\6VoUC1`?aV0ppV#Db1kg,Xk$Fi2CjjOA;Z?
+8^Q=74Mm*?o3mI3GbNMSK35q)?oF5!-ZN?a&<1X^_Vq_E0ZFSW)iUO(_4\[M<0@Rq
+AlC+.Jo!H:m]]pn.N&o6_o>%ELq;Pr)iKIrGo/BH-n6,E1IE%mac/B>@D[X*d*?Yc
+R*?uLWQa%(3#o4k&ZDAhC"JaU"tKukb&"8LAqX*Vd)pA?(Bjt@EMQJfigmM_?Fe@n
+@5jU-"?RoW_IPT`"9^=8YZ`J.PmLB?DKbTN[-`,!/d3Bu_DaJAK7l$A9T-,"N3>mg
+if(d:b41/n#bF$d@gLZPYta0?1cjZ95UMGp)dLpRJHNFN4:X2%o"=H7>S%2rCLYu*
+Y0''M6]l'?3fHkHo)4Gs;KarUE?g])NQ\=S)(DZN?lTAf,374jE9PmK#iT`X)oXKb
+fc,j#Qt.'tK4*=cXNeQF(d'O?;A]Q<!2_.I"";5ON+3:Y2oNu-TJM65)]Bu]cEQ@g
+9WuA+r\LK8[b="Z3.fff+cB/D#U0g^'Sc4tdMX<0PP0U&CW[J51VpS?\A/,1Os8Kk
+d#oW1cM28k#U3YA-ji75$5<g+(lBc"@S!"6dm6N:ieZS"[:]cQ;XDQ09E8?KWV*#[
+'L"j)LH:18-s\p\2UGZ-"j#nC.YZB[C)D^Lb1I7f9\<1I.7'0Y2\#-Fj>[V]]hfKh
+='Uc\8nr,E)29R1'j?I!>gaLEe+=)C[Gqq84:\,GcU3?fK:k7PO*d&OX<LpQ`ehSm
+l9($11_/URUBoN'NIu'?2pr8Qo5,ZFIHufl+TU6[KFMVLPsm6;k;'_"6q&Lb5lf-4
+KE>PS+liCfo(+`#4-mnPj/k+'0!#V(=hgt;R+%$)W8J["iHXh+Kf;P!(GUJ[dP6I#
+aBUcc@<g-Y"ll!60T=AG:br:8+PJORp[%B.nDc"B4EJ%Rs3UCHG4IPNQI(M?THF~>
endstream
endobj
215 0 obj
<<
/ProcSet [/PDF /Text ]
/Font <<
/F2 5 0 R
/F6 7 0 R
/F10 22 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
>>
endobj
217 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im29
/Width 156
/Height 257
/BitsPerComponent 8
/ColorSpace 127 0 R
/Length 38010
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J-eT:nAn]s-5$^j,-bO;:,*K@`<(U0LeKE9MM/j?:jbD>'FDULYpcP[0,fZLJe=*O
+3[>;o!hrOWH<)!uL;e`6OP"A)&I1]jnW7QV.2E6.Je8im67!Aj7H2-kQp;H$$U[67
+n:4%PXbMH/T]h%s/JnSBJ]Q3:6m3"mK7\(KKIS2S#_N.Cn;'%@%gKp;nG$f^,7oP3
+1&=Fo80nk*lG<Q5N&a2IbltP&BYu#D'oQNFblEu3-526T!b!LA80/BOL1;C:RKbLs
+M1lfF88Kb"&oNE@;39^T0bK.nK(5M<;CN=f7,fp:Vk>:MN!5s$W,,-Yeqh69)sE)C
+*5U37JcPS=4soe*I5hf<S3RYpL]el_^iml;]o+ZP&;7l(>h"H9PLpEK^rStT^Hhu2
+m=h61>SJZ=:g+O,+[_n9KqUgie39Qk1(jbATP>FCT\s/b_kAJVXocD;8/)3#E+g-p
++i%Iu-/jYnNWgQP<2Tlde-lrn6%E'o"T]SMeA:U;":qPoaA/N\/cqdB4NVpU&qe!r
+`XIKmn1b+M..ZX4"#$T8%YI&(Pq@\]:co6iCKad4.\VAh(9J#O;AVE36q$5B.!'D@
+[D;hj'S`<s<<rctgU7e!5fc@."JGNbP.#qODAe*mn4M\$+]:oIU!66)eV350.].m)
+9?+,0E.BtZ,sc3L'.JJqL>Z&d3'`W\+Qt]nK%>03r<&"QCl^\E-q"f\iDd6"`6YA7
+^9Z\d6A:-0E)[X.+Z#dG"c/t7('V004P$LsZoB"&W9?J_3=Q^6'@[$\EYX=[Y[/7Q
+Pt4ReKsHuRkI%IF5SXE@dOpA6Tf>4K,u6R<%a>]>W5:!l)^#_HMkmQfTO>Q!%R-ro
+7`n?=g0p&SiCGF4[11Q#&-F'*bf./eHo2H>$Hkuf"n]l6WO^tY9*,4G(e"R_$1Ljh
+L(k7:&N*`9Qk1^_Qsq$>iJc1uW/_-_Us!Lg:_opqS"STHGTpLb:LLNKe-4JO%0J*5
+QpU&MYP*p\W$&th&'^bYJ=*%Y4>BS5c\'T66*lG,(gTj.Va:R:bqh`km^Q08+BB\H
+(^AME:88"ZQq4"t#`(/C[LaQc*X;_uCK,rfOCb(Of:$(U,*G[a'e,.MPSH?=rBm"U
+/@lYKjafIVD'3t!?NEClgtQ2u!73_hW8,0TV^W@(X\Z1&4dU5b1s@Y-bn)Epi3\36
+otH([3Thi)&/YL+<09Hh1Btf=$4t&Y=b.N2#!h8'"&Mgu!LPPmXl.P-AQ#9(8SA89
+i"R3mU0ghI*Wi70S0<QGIXrn#2eVBt!cn-Z_&+#$L+Ee9<7G=ifGQkEZk'i:RWM0%
+dojJ"&s`\hU)-KP@g#6_YsVKGLiPFR.XVZ"Q1teS=dO_0R#Wel<(b@(:M_MJ(]tC3
+#f2?_"`8)c&N#$/OO,UA94a%`P7HbJ=qE3;]lsOb)WsD5"9RhUZk`/qR2uBp/u3bL
+JeQfW$RmA_9O3TE&2XU<?kXf9\U#[3EXO1%%@.H>Zb#a+645MS"Q7'7K0WrSN&j9.
+TWk:b&l`8_=Y,25j;NX^;?m4V0oj&Ol_1^=;b2e!"__/]2.\b38?a6=D-RSPG8?Fa
+nfU2JF:49*J@LaClo`7S%&SY0#>Yr5!tW[@[m3j^$pud69RUg'6u^r.WHDO&4:d&+
+.U<F\+Y*dK'GAbpAH<o/,3M(I5`e6=!=0NcJERr)LR,cM#nfE)0^2Ab2H;&T7oX*]
+ecDM:W'N96"D;]('4s!),[$@3ae\VG8)@;Ih+7];D$U1F+QWltKKKK&BqM%bSH/5"
+1$Rg%!nT3I&\6X"@"etCpf:HjJJKHm&/kW"(^r]u-A7:sQmU;S$WpdnQ_:.s"$gHr
+5k,4QjY9Pn'tA?_\k*%#,'&76_\GgJ9Q6YdZ2uNO:`5WB+f5+(VmW$r$pYa5`XOmL
+U4R=q_4`C%\N-#:-r<nU$q*lZe.AoX]aY6";5i7_3C=cQ!?a*$!7VngYW;o<Lc&IR
+WGY&O%UP7Yagj[iNrfl&!=a#e=!2Gr!J@VO(Q*An`5.O%A&Mqf@8M_K]VYb74pB08
+irt0>p,HGFKFS$d=7oh0T+VWiV1MQE^lB^Fj2;2D=r_#W7-G@P-H8m2&U.ihD&l9n
+$phK&"[H#s*&U3,Q]#3:L*2D,0P^cA\H3osacINDXCN%+J0H@gl(]IGSY?/79I4q`
+)M9FD!D"#/#$h:ti'=(F$TA.pI8HNP#gLP<5tD!H\`832#_:WLVTf^201/o4iC_l.
+7*sI&j@!_i;:KqeXVJkF3f6X0UMaYj1:D7k%)KG2#1pL$K0g[ekA_YE@#ZTQ&gg),
+ED]!`\<sUUd]QaR-CiUIX.&f=7r@LHd\XaW\MFS<MD>`_A5.<Y[TQVZR=d2H*=A5a
+L36=thue^*`M4`lP#9(,5M$%t",S!&S^!'sg:Y;/Em+q$TK&@>L5M6V4B[Ze+)M6F
+e>1'joa?)@,N+dr5-++BNkpHOD'6/*q`J*2"@rX!Qk9@@fkX93*?oY4h46q(#ZdlJ
+R/iDR."qkrLrnT"jul29`CB1;XDt`uW#GfEc4&OZ4%%7pqO]7-PEdgW"p>2EK1!"k
+D\;,:`0AX_'tagDV"d'/-]9<NDf)PS>pr<1&')/0b;-V6/B-.&Sq71W(*Ft,KJljW
+'ut5nWU(a@aQFi6/p3G2U*7P1J#Y<%<qfuE"o)\B+6.!N<)cjq70r6A5]Cc[==+5c
+>s98cDK#TL?__EN.WU-.$*$a%"Ng+T!]2BK^u>hUl!VPs'$QlfKnPj:="M)\MlDd]
+'3NS@A=*oF7uthB"V"#M9t%(o%!nFS%_N7%F1g&>!&4\u(_i>c)FEB)+t#3qQ6VJs
+#51NS5p3!0)"_]4)#:D/`BJpl1Z4W0GRZ:,dfhl4N)rVccmCMmQns.G;U[+daiG)E
+^Gg=(9S%ToTO>PP:6'%fMRAa!E"5\:h/DKQ=O;S`hua[8%V.76"X)1Y0OpW(,uUc*
+i0S$m#"0L88Yi*I/37?%MQ@.G"0-,aY\S.54N$GfC4'E@S-$SJh`r_^jGnXVataBc
+60.AfmR0:_>"U1u7kRD`#u:DpV?5&1"bIGO-!G1rU::1q!ob3HMuGJkgg,i$+A`UR
+9h7Pr7[%O_"Me?_!-/8Hg'"<onB!dU^et7=4B*l13fO,u$bRf6'"!0O!eQ@UAirba
+DG;I`6c7.(!`W&&cDmYZ=hm3PKgmqRN0T3L/`Zb>Kr+q01*M:Z#/d6%U_5U_QDakL
+Y_#1r@`emeU';`.0gK8MV$>/<QO`$]70If,E@;sle8^<rZ"Fin$T)i-DJ0<'ST'*Q
+`b5HCVCA8;-"<0PJ3#Fq*)ic84AVV!K_@0`ACU_m5iclP.695>J7OCH47"/!"L^[N
+0Ot6q(^-!PKlSd*.%2bO#m(N+68Bf:`dP].>+f'l6rXAm#R(=;]u1%j#M`"/5$N^,
+8gaBllR4=%.Ysl=.>9`6TJhb3<*EflasnT>6Qe)fDD6fQZbjEY8j)!g]J>JXAV/&u
+TJf.IRK]P?K`f+cbUgDCXtm:Pd"kZ[Vpm_[E8e`u9V]UU5XGXLBQkS4d">e+/Mno2
+^<Iui,bs9eCm[*,!eUs;0PaKGNJoX0^3=Cm-,V2Tm%ORKgb=V%!ibJ/Ao7aP]R3Ho
+p`oXMNuTVOS93s_4,[]:;0"*s+G0e&B&YEgl$c@1lu$9q,U3=4`!Q^MoU2Ho"/K7a
+D$V9pKJeC62TQ/V/H@aS@V+SuR4VHP6G=n#K`^V>>RUI-!ch9h(<Al.AqKlCb+*Ap
+88@[4=l^\-5V+VL7T2":.L!UQ`1A/f`j''i25>=S0/fs<?71M/.5C'&8>lW$P&4c+
+$:KD2V9D\NDT_LP18Hf0AjCfVnBd1p.>K<*A0>FbXoZ[41a4bgii\^Oasgpf9n_4U
+i$(I>bTgi1"pq4]TKn6>.^?hr0^abgZ,2765U1nS)NMoY,K)'GI'(1Jrkp:4L;lN6
+F=H-I#(U[P#pM.'"=_E:3%Sr+6cQgWFB9\.1(UU0K+=PA!kdTo\'=Qj,9R%s]'f^6
+!oruKVZc'I?oLNj#=S89Vqrt<?mY'9J;0pM6Sq8#$s,-/+i7PX6X9JFi8_[t"9K:H
+63M[/(hWoq#'%qW:IGA*OPLIO>%1l;m7&rC?<b=!^OuY>6j!ECm.u?Bf*r!t#L7@D
+5;Ve.:1\SqKQ)0'V)5$O0Ou*+6_,6Y^,bU.hIVU%MB]ii+=.DYiP7]bL\tAU'$Wat
+"-W=Cj1&C4E'`pad6l,I@Q#ACDBgYI8h9>$ACBO/OD&J:>:UIY@iT)lVEDa-aij*I
+BT"Ak`%iH?N%7Re#$<Hj]J;f-d,I%/%&a6C3adiK3jdrO5\^K+L-:[F'*Ja'P<L<)
+Sd&.688Q<kJng-9Y.I(ES&,^cV_W"[:eXCKaoX[r%5]s.mh[i,/'6"0U:B]5!^VFV
+BOcQb7lhlREbsoh5=Dn6,`]?O!(c9028ZH_jJ5`Gjrl70#&,&)Jkf1?mSmbq3"VYc
+U/3].<B\>!4eiQXC%<U*5Q`3p1#f-\ia=F6QAD<g0ai=;mOUq]30V_&+[aCHUuOr0
+ZPP:*(JAm*6iN>Qf^T=bDSi7p;8P1X85!E^4f/K7bcm*m>ZC,2"3(sfU0oDZ[!\fm
+Y=X$E5YE:&::S1+f*%FIk5$E^?BpQF4:JLu87kRKQF--p=G8q<A.4_/_D+C6>g,Z'
+L5%g)FCsT!8Kq-u/PnX+PZ2[jGGIM#TJmFW^cYRF)PW1aX+j_a4orqO"iDP.BrPE>
+C.0UE?imh^k*.a`.QTtm/Pi%^m38$0\B<e9B&Zle&TTQLhRF)2`df21$Pr2&nF<6_
+^?U5p[?`JaEFjp_(.5%-6d.j5S82Rm5Dua'"%I%C@)kV;/Aba[Yp>\:1'UCShJgj&
+7<Sh_2WN+[+X3#*Y=?6=a?Z"#lGP51n:34SJEK9P.*X:d`BGa3DSBS5nI.t0m!`J7
+M_2f[2eKMB_?9r#.VQa9MMMo'JjLU`.`Vgq<(Au&dRHk3/mTT%2Zmr4,qbX?>Y[d7
+">mJUbDL&m9]KTV]T.`JJm_Y*,[9;^7I>!R"SOGa'O\f#SF8d'7cl#];$%qL/SKB&
+`#AVn63;dibm7M8C@!?)KUaI#2%=.TP'f,U5%k-c7g<)/i(!FuA6&lX."W1$@s2PI
+4t3CC@=fY6MW7Y=lp.>;T*VHaA7Vo6!$Wnk:;YiiAQ*P8/r52Obgc\Bj;>r<-#j1$
+B][Hd6B3LJnic'.7"RQ+A/nk(BEKe*>R]\H_^'jY/60Sg.75R3i)k8#pb?/W#,TgH
+Aq8hcac7U%-e5)\B3Jg47`V/s+NVDZ,o?eWIS&m7,RYS?9dj-]Co6;R+b]DM";kn@
+n,nQP4N4B]!o-/1Jj$u:14VDEjK>B!^,lJg1h0'WCrYpTE`#faE+fNeJnbD8c<LKl
+OjXrLJh@8J8=E+&#!t%*`?7Gj68H^d2eU.r6V+:i]eT`A>fK!k'%X-o.R:N'3b#0l
+UY&`/aBEF]abE&R@j!Y-W1IJL0>K=EU;gO!-=+UQ,6ON=)-ont4LOH.\6r]l"o_s>
+J0lQb"CN]1^b@5SfEIpc+\3H#K.(,_G*9:O3[S`KK1Ji!8VY,\,/hl@XJ.<.cF9il
+p&Y`](f,!#N&$@uo[#$dZog&;/-FfW=26csi$nf([NfULF(2(K#Y\#@p4Ft;9qr`6
+oq[70>jFtM,V#>\EF_2L9n#l;"pR1Y!+f2AP$;PrEg/+4Nr1+*ekm_s.>a-?j[([)
+dR`PEJ;(K9J0h6q/Mr/Z3DJK`a6j$RSN1iDPKK)ZO"a>)DP][p)Fnt"DWu/ZO./JM
+=`7;D,k;&kNWsJFJHQg/Bnr-BBK0MJ$,C%f,.pMpXB:]jWQW4o6U3R8m.XuI+DK9u
+`b%U_2Qgn7PJb7IlP;]3GFU8[M<*AL8YB9bA0]dLS<JW7\3`(W]H_Qb:IT:b0s:AX
+Jd&r1\4<b*qMq=BT0*2]E^Guo$^0mbC1r8-NmA9nAq:ZAmNU<C/FPa-_]W?@bV07,
+.uHGkBcEUH]I<!\6,I>nAD5-J63ZCG-Z=B>,@3K?17[&Z+UCarlVK?(82q.@2569C
+7*,N6A@R/#"Q\R&Ujaa`Hn2(+aVX"C$JG\u:0/Z.>f2+j6[%/nKJfKu=@>*@P'p[h
+\gc^'"NEV/]Fn(GecFbo_MN=0\DC$@0"se?q[Q^V/PplVb)d!WK*"!Og7oJfl<FFl
+]o&n/".08OEW`("=/Y-+Jdb8WA-V4;8)gs$;g(&$GV3Au&V`D/K;:R_pbW(O[FUX!
+UiAk3=FB\o\7F=1@]XVc8m4X:3XGd8aN@!3\J&Tr\ASqnaZQiI]K,!63hS_q=h-#%
+oLCH+TuDJ+5[5b!*ibsI:83TXF<3?iS0CANA-1GR"NWif#6.(N>pM$ZJf9@-g9/K$
+CBITlic2iJeQg<h.H\(Zm$8k`;IICmmD)9B-B(\F*f>YV>E'P,_cXDAj?&n=!r?Xd
+_MOu%:]fQ4>C^,&jN)g>VCnWQ\:@`f+D+`+280F$)ejj!UE-RNY#C!)]&Q=CllME'
+rd*;J,(;'GJ252%&82-6Z-1,AlEY#_g*9!R4N)0i6NSshJnTjg,"<b,_Nn&q^fZXA
+IcIJJV!'Sl7Znm-LIWb]5[HDZ\2XR+[H*<5kEW^MAHp[Ye#u/uCO_FW_.&%f>4hA:
+^c/HlVCmVa/tL;7ANEqG<]WR3<(:%FQ`HiLE`7VEeAD\tAZKJh]geh:d#DF#&#M+Z
+%8<`J/?uE-@q].>4DdNB.:k`X_\P>lEgO\5fAKI0L_JB>3r4#EbP7cdAM^1eLcf5'
+4Db;XY5iXB1:RE7>GS\_UKT9lbQ>mkpg\,k.$e#Q\lrUW&IYs-`o[B?)X@]mctn^F
+63&8C#=P:`:u$"E('oP&@Apt4)A7io!T<$866[*O#/X6!\7?uuLrLYo=F`FX&;c'[
+0dqE;,SQ#fU1#aO<$iE=Kn?QhPXZi/8d"&"!/sK&"c!5TJH1'a'bQ8@6@h+L7OXbN
+"@?5@G,$GoM8^/0?s5r;XGLC?aKUOS(oE2/Q;JKH9Igj8705aX?AD2d#D;P$#\Z=E
+'8m(TEKI+e+3+e!Zm`G75U6]t7H6,4fPE@+#t?,t:jbAKR`bh#@,>Ei8<sU:6BOEm
+='CQ=6c%N"HFt=0?:;Ap<#TQlR;MUu=\+?&)kr*T'4CTa74],YDk\r9(D%aKKZ*Vs
+jIemcX,;5^i:)?V,7X)E4`JbS1G'N'7Y8qtDANK8(eg('5k$JB,[kY.*/;;>@M8kF
+3+<_uJG:T,\8Le0%YLGNAu)<kU21MnO%QSN,:Q/M'W=9Y8<^7B!)+(/9[#[72_D?3
+aKd4hjq7g5,,PuD@8K3&-qllemt9rq1_U%Liqfh]c)RWOW:DEMnM;<g6Op@E!+6Ut
+n*>3:L+_+RM^%FBlD]L=U`,#gi@&*V""Fu4&gdVu#S7/t?rEXf+^;GjWaR;N&jso9
+TFllca@M5e/%Sgq[`S[dS$-TWqY@-$UqWJC1.kT8,&Kk1e-!fkI%CMI67/*'.]Onc
+"NgT@M`<u>#kWg:OD#=3+Q,@"Vef8(%n.WTo$3">/-M`%_/N-Z25lm3pe0PL8/=h6
+5WB@0+R!(-d43+1%l"T^:_d2qH=iPc<*HDA-8mE"T=:hF0G'uL(daYFQR]AcZN/?5
+%KmBN?kuuj3%,@B+S'KF+As,M/;.ao&>94XG[qXCd"8V<VD;-KMM-&<Bp(Wq,V&M\
+Z7H;GK:s,aZ71nI>2$$Mcn(lc+Pi*9VL\Q.MS`+?(>.=!-rucgR7mo?ZO;:A%'^sL
+L()[+co$?`5il)XK5$6\=X?Th+aCJc;N0K]li*3/KRoLq)?o'g2@h0Z$>cn..RR/M
+L2_*F)Gd%J8L(5B9%]H8+TPe781Am$SC<P#KV>tJ'3-_5f&MY<?8gO.Q:(1U8dlh\
+Xr/ot04]Ua^lZVu%(-)@T$2o)CA*oP@8_KH!gmX^MZaK:^nJ(@+C5`cd"jLn"nJs'
+0LOSmT%8T(phe$md%FDIh5R-O&>3';?G4$Ga@I*&$*6b9U2<<6]7fHp2'O<F+I5r0
+<6;t$2WqaHT2gD@%N7\gV;MrP-Yf[^\M,A'\/;l&r22hp.O(ZcEWOX6Ae)?f"CQ0b
+Z9V_r_#)UbV-/>27d(%Ma<h)kh8KI4q?i'6n,m4F&sR?)^d0co2Sc9&Jlh5j;d_"V
+m!99X&5Lj'WD/1[9WQ-3JkV*%l2r>+%&O:MWtuqAB#&?u!T6X['bX1t%B'qlUaBEp
+,/j`D[#,lFdR_]0mR+d/$m,I;[>=t)"7WP/QIN2G5QTI=TVNJ.?sqj4LaWE,a[;::
+Sq+m3?W3e7RKAZD*JmXu0'U$+2)>(8PaUN=OX4J+'=@"e#To"5BG(?Q_R%cX,Qd$5
+p*Gn8d9('-1r.4M(P#R.8=:2<AJ'WIF/4S\^b,h!^`*?N4G=gj&27o[$\?YOUeLhF
+#,'7!JhUA"PMo);5acGR5Zk9e@R6Tb=;.sfr;rIf4p&N:+TdJ:^>`!M88H#+P[I)e
+b'4dMo($-%E\^T(iB^j-'TB<t>(kb>qZH1QWr_h+o>skL":P=S!Rj(:JZpXQ^q:Qe
+fKNTq61$HNU`1j=EX\/s@g6P9p96rt^qg%64Je:84_![_hIKId5[@D),0<C`gWhm2
+TGF7GC'm6uR7#.]>Sa>1PEol#"Um+:J^d<0NhTZ;;Xb5S!*Fc>80J.JFQ.lI`d<RV
+^IR?^B$?%/Ia(R==J2d@ReF&D9^@QZ-!Ur_!+:s^GtFW9/GL-NWc"+R7t8QuUmQ3#
+fueOZ"$isEJs,>]M,Vq_j]%b>if^JR+mr?`_DMAd>&]:r.6L'fe0UEHcC]a,Gn!HI
+6r5CNj;8g<BAg65BFG<+.^B07Zl)"nH3m827?<[X`e/5<G/4/7"f^jaU%WSC;Yd[I
+`71fR]"2)GRIDWF8g9U)GZb>_m7PpiT@g%uQR-Z%"7-(J51lP7A;NW9ag@fD@tsn5
+A\]_pYRE'`)"S6Jn8AIEh@fl[$c.WV5Hd$]OnK&tg083GUhCTt!-!P+QmIL1=J/%p
+JtGX;ZSp:^R87=0*69;f"'5cHU_Snn#uOWb%=EdAf3Y;4-l+jdQ0+n&fMPQB^g3b/
+hO#u@r@Cbr-:Eli3>9?8(>p?FOo,NSU.Pj91MMJ,YeDWq=[ms)Pm7dQ)PPsc$cip6
+-C#"@!Uq[WAK_4-.*rJK</V[NWMrFfI^C`V$Wi1lF#L3AS!)<jDmWqAQ]_ds*Rj.s
+8j'V(^i9jKC:7,:\J)#4m4Xl:/o"^C+Es`r&LS]5$u(56"oug,7&CBr_'g<Nnk:!j
+dNT!Z$Q]B%!3VKKhm=W%[QBNkoZ?\2&E3`--lHHF*)kfC'Z2=&D#b,9!\TJ(EMrqH
+=XBaeM_TC%B/bl*$nQETRG+GWa<ZS[_CWP.^sNs,[%n0E!,;nXA^HUKYe!tF7#caO
+)C0jW)?ZnYF9+lI">+WX;2C+uAAjj4Wb6RT;Gd6mlm*ieN5$[UOOT.">;&Sp+Xc)@
+#A0VD"+XZ?!N5kK'$L95jAfR.co5$W90AMnrd*]dp.>s.][f_dPZ&]9-ETNfENjJ3
+[]U\T_%@anJD_E";?dHaU=_=48VSpte[pVd/18cO7Va,5#$>YU>aZm&P=<T-;K68S
+20r[Z_]n!ZZ+U7k2?'lm-#X24_J>U5Ob1AP6&^@F-L8I`nIgQ]Ts<55l"38g"c9!9
+7&230Z(2Fur!VH02?s6'U>f+phFrg^E#n$,P_hd86#$IF2@.'K?m^Y.UL\n['TArh
+,:JGlq^]ICCpnTnLRr!]iC<?XSUA,/m6`r,J<8K4`SkSs1X'@J%EedD*>H=T(]gQQ
+!BTEUT\?MV#aTb,%6tQ(W#5W83iISB&W"'$d.eA9\r/(2U0ndgJ./QQXqG4rO;R_L
+@PnpHLE\63NnG<p;B`1LL+P_J&F^*jBj_4p?4+KGN(Lemq/F,0>pGc_-#a7m^^1>b
+]7Bqh0*:#X66(Q%Z[h=5]c[iPLs-<R!fEWe-I<VJi4L4i!Z1uaU[/L(fouiedK+<E
+!2'i1@"Bmj:'d7g!?jTWfZ9_1R3$>^#g$nP0FTBR?_-2OO/n?Bo#V2h%`@hOU_'.S
+e%n81dg@%%TMgq$$0W-c_h"$0P@BW;8S\?/U]Ag!O`U=;fGh?!V`#G(Z:OhZ)WD9X
+lB3Vp4Ga];aqTn-_jLM^(>oQ58Og%:aKD2$M.iNLZ%\HOO=`a?JKj"nP1Lf.%fi(0
+UY.ss+l&6;bRdB*0T1\mJCfj$%DZDk(*F(eg2$eW'7k-Q3qEZ/)$Q3Q^5?nYP[`Gq
+//ol":F..SJP[,>$#UrUc,?OdOqHT78;Xt5c[b5IM&B>$b?#>O^^dl5$+_<3]?CV/
+//u.A$`FmdWEfO$(CBXVMCX"M+NtT]LEfV1S*1c_n.)e19bNO$#f+<[JjQA%SZ(cu
+!G_2$BTu(BTbN))$`PD_\SI@YTLU/*UMu&)i=6OrW''kLM_$V!ij?'Q5Fu;6YIW/>
+:_<]+M'L]].[21nEDiA?Ehf;_Or2-)=Mot]Z_bN@%8jhFE^VWI'YX&SLnZ;V^^c4b
+c\Qq.QNF:TI)<!B[g>U2,FLkWM9J+K2B]S?3\\I6nHbRdB9]3@a_:H-GeYI1Z5Vua
+&Fcb1Lr9f!P_^._)"Q.730oQ&'sl:UM9+J')B0#=2`6eSS`m6`L_^#21l6Gf9=gQJ
+d6EQ!WKR#lJVc/g8.P^-G)E;53cok3&Z^g4^(:Tm$:+7m#`B8[0+5<6MAt4m(m0]d
+5)L?'+tE$i328!+oSR=s%&kC8TY#afbrFnu#V[%#d^fI!S](>)!3tZ-E"E#Tg^WfI
+OYL:>BFfZf]tGQC'VMrK8In/:i0f7=!:$!R6Kl"RMB;oV6.)\5=TGcp2+>m-b'BkA
+4Nn+VQn5KdM0p;+)X.gTY(4p8(^Qq"Jp!$fT>e=TMAd*b=;%6XXV-jTaT/;t1#P"k
+N6CI+!:h3Z6#i;*R?.bR*KZ59?k&f3cpH+JdPQ'-n=u"!MN-QJ$(0Jb6)k46f2<#]
+/f>oARI1R_itLZ$N#;J^8=5F#il9p-W<i?XJ-Uu\X8rk?:`Pn'3#"8.&rFR+);q2-
+;ROOfh7[Tma\e3%.AN];(s1Ftb36U68Qu4p"jQP'Ttt]5D$d/J4hA7%X^nf+$Saf.
+b*lL"PsRd3&SIAL<fAK[cq<Gen-soJ[2S99!E$u?!"-*T0=Vk#517(E4]'DqI=[(N
+$h1S*&.&g4:o3[U*ccE;O;O3q%"VLt#m'f1MLL?nB;+f1N=9lYSKe/gi/C4FTclo:
+;C&>?\kR`!SpBNC8GBOmQnX3\T*.%bkb/!UkS"$l$i%RUC;'u%=pjej6_'9ui.8-.
+.5<@$+T#T>JKg'jpUNu\+Z^8;)\WL%mB4S-Y-a9!.*NF!$a.lcN<g2^RQQknoH`A5
+%*EoXW7jbo(CKE.dVCfrpsc%#W(ZGa%h_@.^s!r0&4h.&%m]7`W72-XaH$5"#d]U!
+lZ!S8TM[0A(,6)[@G%P%&>)O(WFJ"5BZPa_hcZ<^^f^FKiXJXeMLd3pP-U^JBop.R
+erbVg(+[fDJe;40O!@P[!:UAm+`Z5?eN>OJ]i`%*,3TWE4dBM_M5[^[.EXb$M@,a-
+]c4#MW#.IP]F?RK/ckts@94]4hl<'(!NC%0F#u9N(;=bX+rGlg$LIkMcor$:VK1Y4
+;!YbO`i;\4OdUHaYeP^]TY]Sg$4.d^.1T9.UrV[/+gFP]nFn?<pEAm[SVo,W+IG_S
+l\j9l/jS3U+OZS_!K\-5*@:H?;u&\)NgO&V!G-)(_U+3;T`Dp/+kRYSjjsN5*=-*g
+Tco/N(_rL.(m0@'TC@E7($e.I*fS>"#T_9N(mYg5MD[("J>"<HMh)gi21[#;,pdr>
+FPE(#7'nf'$>ag^C75bI)@PPaM1PmcMFtYqVjlTZ!Jndl_7u?=bG<2tJ]`/Q3XpXG
+D\DQ,$@r%X)6k_a66GaHOLPZ5q&^e2m1>3rQr'jiTh6H8@0%P/PNt-,R,8Qc,(SSV
+\"">'F'fai&M-bM+/#K^JD(9+TGm[G$%_`2:u7T2PC[*[&kcb%iYA/CR&I;)QNK;M
+bUjIOA^B9G+&$'*PJdld=-nL*VqA'q=frnkNYfi7A8n9oq/0!Ujss:>51LI8abIG^
+\rCMf'Zq,Tpt(RkT+T8p$s]O-X3q#qM`S?^*K"LQBU"<-1kDWI!<]X"XPZJinId8=
+S)>!cWEB]&Qlqj-R;"mHSA^nC.[gB-9AU2@+f!73BKO1iP51ja8aoh1X>TLk=Gf#7
+J.8nag7.qF&olW_n/3fdi=&i%,g[8>+VKboMM_/e5@\,]$n_lBl][QTMsJ$L9Q5Q]
+*"U]Y40`RY,?YP%TX]6AMr:_U.4G^D;$ra?TCGGi;]gt'At_'[8;Ns0nRa$@MO%rl
+No@X>?$G"9i=P4XJRF1FTG7IsTK[X?UWPVg;d5-(_kngu$u<0\O;XFA)@\GMBJbNr
+$PNsEQm\.h8*"@,mRA?nrEMnd$:p/u$!'n-:Ukh+1sCE6'eU+=R1Fh@`&UG"@?7r!
+^8kZ$M.UNP+hAg>W1bMRSer9%i7sKPWXU^]&RmdHj?HI;]T@(NJQWpH1qY_HAWOXY
+V=5?r!#`QaYb>5YJCCE$HmFS_g9uOCXAGs4rB@7n%SH\gTFDZm@<*H(JYVMTP&[m'
+.,d25TbiS^%sX`oTF?@^C+2^H0qE-JN.)hhKk>$g'T@JO8.I0QjoI1A+nuR+:_m[&
+Wf+@nQ1!?,_#?S1Jdgm6VB]uR;$"'CUPkN>)IO,,_WjZq85SUMOR^t2iIVE.k<4)E
+')IfZpBJ<EK,R$FU@U:B,$,Q'5M&a>SikmD`/nYOgGb+'UL]1AGp)*C)It7omBcjn
+!;/]gP!JP!]88<ES!8IiA<14GN2f%!nK=&=[?4o8XoOG(]7nXXL*tXuP63(i9eqa`
+*"S:gMA"W:V[X=9>q5h0`$gp"_"sS+Mq:W4:Z)kOZ\nj)o8j86!G1YX@R(8gErh,-
+!<=$hY`LT,\jR^KNg$aLe)5d*$9P^^m\S/_lp@RWp,Rg>MQ"/XR;AkuUVnU@#oRVV
+0VBU/*$o=$2LVU_EPN1u_@,V\Mh6A77$<_Sk^d%dT7Lc.Wn'EO,I*e9$-:kP8Cso(
+f#M`kN'["UWA57"houH\XIpA\a;l`%E+XGElM1,]8mMaRgHqVF1mjpTE1"$WW<a_-
+Xf/.S\YtBRE#9UT,9eS##b$fqjb[9]%nVfk8`-+Y'V"/9/#m4;F(60=s+jdF]h5@G
+!G?s?!.gh[!>9LO6"HYa0<QF[Z'obXd%SlAS@+J1ghe)C&h:<*MsKCpds/&lP!P%#
+R;-Hh(TIESTF>*t[*CL00MK0jZ\9Un7C_Va?T_!<1#ZtSjW;OD&;:#j,^kOH=U@K8
+,%:%QOg6?#bU1EB*Lo9LdRf#,*=/3NW9s<c(o%CG+V-3u,-GUWW2h.H@Pr,>(F_hJ
+.3!0/ePFQaN#>/*R"6;h\42#j]_97"=[j'LW#B@"2Crp_,i9ijNZ+:ESAJmYi7BRg
+>qmbIJ["hJb@7`FlUG1S&#e"ZHj>4i*!)[@JN@V7Z6G3go\Sg)+%$G6Obf617.,1q
+),p4Sd)4mV!m]IEQY;?g\-e=V58m^1,+3<qiK"?8^>*Os%[<V(,&EjphauSNM:^:V
+m<(hpQDF?MJWS5-HXLVV'ur;IY^ub/nMK)gMg\\G!Ej5t)4_A8qL&`kCN$#A_RuTk
+&-r9#8g+b%KVEG0'MKMY5f>uD&=>fd%0sbE!B=mX+VBE\+n4u#2BWB`"9LjPWXT+C
+MF2s)i.*X,%L5BUd?)FU1)>cO6I?X]H6sI;7[(*5S5(4?$&&Fh(i2A\(f!Ppd.i-#
+2&H]j@e"E!5T^NW!od(Eb[NLM$q3IU365\^&I66@!>HAE-5)/gJoMod<%epnC]`Pi
+W(\]U#HnrZp.#$&%YmH]LkqZ<&eP@"YkWI%9/R,F"(A:t5WfYnL.#J^pm>&l&W"AV
+MOfot1)gUU,8!J^<[JUk"lce#e8-u\MrTD_7molf$j_P2iMat6/WkuPUJ"G#"sX[r
+El.pFggi>[M6_aWLnI-Tg5(Fa;"0uO,7]TF_/NZ<^]A[J'no7Yp=f^Xn3.>8l``du
+TRbBe&qqf[8r1<AiX-?PWus501Vh@(%R5L_i.V;"3*(XK+WIH/UnKbQ*!JWaA/0g7
+(g%Ta_-feP49:UEl_$Nd.ak'mE+U$n@;%D+#,.6/-O&jq:l'at5ZK.c_74.m"/-[@
+g!"28pFV("!)OB4JTt:h"k/&5'fG=[?EpT*1(9;KO!%8r5@G`GN^;lf4q>;@W'h%^
+Y::G)KIVWn'Wb$-4:O3ab8_-H1%8T73=[HE"3ppd<##MaS2.B$@.JmgL?c?V)mH#t
+C@-\VW&GI"+[`OTbQ1>Wjb:MX(koEEfME27Tl<aB"VjFE)$Pt,:(IJ,;YpZO5pYg0
+6bt0Ad4[C]Q4GWkfKj@#!9;680#7fU'ErU,VS0[ocoMY)B`Li7#(^/c'npX8<ub1*
+G[d7uTo0`uUgY3)'F$0nILlUT["oGL6"MUmU*/)\XhA/ADdik.^'b.L2]u$$\cDp6
+'nmf'^nV)O"-Cn4!?rQr""^bAN^_n>-AX?0Wp5-Z;(+H#/>4::Ji3WKB+1MC6p6"T
+i3OmCA'Y-jJd#R2<?Bl1:b]cil.o!A"IkkH'S[dREl8'rUn!sb@9"!QK1HhH+U15d
+AC6(qi)[HUo<X2KB(=;q'Es&/GSgS+<D*Lmm8,bRcn21^H7Y6=o?gg4SG7ZRM)MQA
+TM*@-\\uk!:ma/_W_<o-+eWT:<%oj'(dJ+@:nDqULfm*^g-@D,L&p(u(LP"_E42o8
+GX`(X.":<d@c>CF0a-HkAeuU?K\R>b5r_9(X;5JQWl`BN#St-?!)/S^UgOe4KKa%9
+,?tAIUq`UD9S:D2s"gg2g7j1L7*99p"QtjV)*ff@<:DaK.p*W7_R^'^!%gcmbkN$O
+#R[!3[fet<]E;PFdK-j=Dh,nI,Xl)E#hn#:7kO'06ekSr0mR$$'a'iB^^M8$+CTf)
+jV1`*$A!445>=P&OE`BUM$%EV^mGgf+BSp$Zjd0BfF+EPF9W#d+#!*IXsciV?esrh
+?bhA/K9NVK#uO#tX'E1NP/<gl1X1EG2,>bM=?utl4?G/4qjGk<#$.1""cQ\#T]f46
+'G61'@'VIA;[<_j5V!%WOK]S=IL;,bXY_`1lQO8uc-X"T,iGJpPr>@(=6_&jLh-Gt
+i(fofqu&FGBW2TZ4piSs@!sVHBnJ7r$Q^uS-cECF5IBhb$J7=A^iU(h0QrYCQna*o
+e.R<T8oFaHCM]r;>_9:&!"iJ/5JW?sYZ,_PgUa(0$XI\6^b/oYRH5RT=:ZfOL7:IR
+mTaT0D3.-[8-&!m.AcO,']L0^aH>Nc;h5S_M5\Q<$_*I_WXuCb<@?S.#=Bci's//#
+%Dd!)!eBCF)t7<e<3]pe$j7N`5]R;R!%0inU^M``SuQG/(8!+.[(1jeiQA2[>bjcn
+!QGCNenOtLAamBb1DiMQal?TBc(kAj.\_f@jX:ET%2ANu?qbSM-@iL,K:m2-AYM+q
++K;"NTN_b2\Z\,Ln?>Y1>R&!b4,?DDI"M#BK1k,HDh-P]K/JJ(MfCX>&qIqDns'N?
+>1!KW*ZVqjVM3]SQNSG<^]D:^$%Zob5gSX0VeGR-(#,d@jF@XNo0f2OE$],="U^rg
+fLQ"i0*Pu@S17HK2%+F0=jl7#>Z;J(P?C]d!9-q/l7*9pg&Q?tZkff@1'['5\-@KI
+'nZe/$'"^2C+o4O]9Y`+5s5!OK^9ZlZ@q]g1=@Ue_</.ijIlnEK6#Cjbr*A&?O.6#
+!oS=OW'^AlQBWme1aIX<6Qu]M8a9A.5op*HX9d1`Jg^.Pr>$Y3!)+qi4(Qh]"4n"k
+cH-Tb/!-J-KS0e:DCd3AA:gLO>-T0sZ9%3s3R-"#%-F6t@Bmdtb/=ds9'X]UNa>OE
+ba0q#j8CDp]m0X$S:PY='jf6lL4V2%9GGPs4XV70!h>T7YV`.s#K3LMA"bfsEaT+p
+Y`iRY@W@tA2e,LGZk^0,%FTR\4(bm[(Iaja<bNUap[f99PHpG?8iK_K[+D2,\CU`q
+q#^d_fdAIC;=5n<6cJhQJa:lQ5c>u%L]J7m_lYO%,Od6riI7+)Dg\:J!%lM>$I(U%
+R`Yq#"H5m(PE9)\5uR=[+Rg0^U?#*8gS%!MXPO&cG`GLDf`eFl&16G!HVT);"mVCH
+T*U&?$NYV*a?9$Fg5/D&Oa@2,3"B&T!gbQ2*c0c!e3T<9"q8pC@$\M\+!X71b/lRE
+!,*+=",(.NTh%N;!6_<.!cf&rr2ka#*:+e-%PS;:-V;7G^VfCH!OLFeWi6'6QC8+[
+6!XUE*B'E8l[3+66uKfe'nXXZC`hg`.H\n;29%mi=kaK:bS?4D%T!H3YSmR.DAGQO
+N+&)1`AL&6]ZprPnW5ao@*p\%Pm)@NMsr17MX<p1ctuN"E#l4&\SJ<,`ja2Sk69f!
+*Wpq-[QtiD-ie[b5?fDL_%DR^#8RtA'91J$]$4)CXb\.^m,k99kU3B`s$]\X5-p*4
+2ZRgs7Q%;3==>Opcqq!6P%qA_0aEAc&/5l/=YSFTD?QVM$b%tqVi+n=h;EU!]S(Ub
+;mCTp<h((\J9:Sq\0ZnQXOkTa'CV=o\1k'fY>eu?MN<DSd:_:`J]mni$g&pB,iCB9
+\-;-dA.5,(KKLmHliSH)=o`.o_i0;%p5]9L"!UD@`HlDHY2t7WVdsmS!'CC]$7>*$
+"XJU$!*09`P\#A'!s!EI`%6SYH:&o<JRE0h9st6k:-,,,>]&iR5Y_E:)Np0ThX7s-
+6E3+VMC[_'"6kmLld2#9ij26PMP+9H6\I]4BLf5"f>bZ0n.qi)4F!oAPQ40%`\air
+"H]HHV#q!8-^^fENeGHA6&HGN"e9uOX>K'95lu]mA^2b04L5$0@Aa*Xi*IO6:]lW5
+.E60,`(2j4%*oIJ/g+[Rjqn7Gn9:m#;F:(e_sVPW*oKc\0Z&K5:OGAqg8Q2CKRdNQ
+BLn(s)D&+e-/_%JJ2@Ce"uusV-g!TP`Z@+\WZi!@B$\gK%RLBXE!IU!"/&s)a`-Mr
+[a%YIh#L^XAeG9_1^-:EIKqcbK4Oo^TMUa*.h!$pN1aR7=H"JH;bb,EBM<EAg.+Q&
+3!OPZM=NUng,D8T,qe\4"q3/:<)R9&!h_)gTL^T;YU>1m%OF`]8O+IsqGK\X6,^>>
+/&GToN%N*b=ekHglS^i_E+L8a3$cA#_sU_4aI-Q2']i4_5[rU4)^Yb!IKH;q0MYE"
+a?\i<[j5WXL*2r'ggPi^5eo_gUa"YAm$`Y7?"GPiKD[(XkZ^I-T-M.!ka5f&oSSRR
+0I=kSVPtu^1'M'-r$lG37$qT'<.4qj>s^5-#I#]F_IC\F6"B?-i&pJV=D&2<P3f&*
+9boc&_%T1P.MD59U*f8AXE+Tk39-YlWN$*A63El)+s`-ZW6R:n'N/H["/fI9UmMAR
+pi>YC7>kofK(^uep+RfH7:9L./nbE?5UV8eEoNs$TKWG]!!S%icJl';`mS!e'^sI6
+n%_2/n3gkA?O&)*-pU#uA&r1JoKd!bQtuQl@K`.?l6jr[8aYsY6HCWin?rDRN[huU
+6;U?C*&96bWf0\t_MSON0eoPCnKXbP+snJrcK9Xr"d/RgUjPpHSge&$0uYID&'"Ms
+La$HZ-jGel-Fd&#'O^@'[H42s,CK)l^u>lV,ieSO.<-*dn9ps704]DE_KMl4@PP4=
+Kk#l&5YM:?0%`McieLqaL"'VlGfYuN#%Ij0K8e[N=Pb]i0hm%8!-De).kM(/3)_^:
+U+Heh<p#?5nnsJ,jK;:3FGbdFN&6F$,iZN^]Ld_e0l;S!V0`WodQ-=f.A_2K,CEJp
+Y8?6G9u@YHXs@6D^nl%J[Y$t`:8ls@11[00-Qm"(,(r^.m`0sEI4(ThO(UM0W&\Hl
+"!BE`&IODjF$2oB4WnT5!+pcG9Ep#V>=^@u`ci4G@Tr)<0kW1'#O9E@VJ:]X/>knE
+U<5^<L0TAn"@J&:B.TLgG_q26!f!L0"8%;0N?DoS0;KF?M3.)'Qn>U#7g*e?/OEMi
+Lhu,E&jigNj*V)HBLFNoLEaM`/ZqBqn6dAR#9\<t$Xa'Ll9.HlIn5r+-*BugDISa&
+ZUIJo[;N.?80^Lg5is=8Vt>DtC3$-t0VXA80EuE-4=&rVYV8?%KIfL/4?no[;i`X6
+bsod+gIGqE#"EPmb+*^r%O$hC2h68[^gC!;J35)\IKh)"?p:'Z``@Uj3KL<HJ1WiP
+*am$W4smL;9c$[g:ppRi6";AqUS9&'b$*e0QNooY,m\8nQrO6`!^K/Km,VKI0Wnm[
+CPA'`Ju#9\;CscY#0+`<"5lpd*gCYb/"f)a"0AH:C'SB(-3.^B9*Qgo1-Z$E@&e/M
+LWD1U5%4h%T.-jqj\V1sgeF%FB4iio.h7n\\2kfZQAFW2b*Y(@K(#QFJ0RN.KD6mG
+2Xa-oQt7TeC+`kd5U:O?"-Jap"I`fao)psLe.([Gi\2KIN!AID"f2nn[bc:/@s1E4
+@=W+*OBd4QDCcur<$R9>jfUqiA;S0V`DB/0kgD"pqBX(Fr3DoS+rr-&\n[0J047UE
+--.E`6;c5<U?=p3!gs+#*]F^J"XehK"b\t]Lkd>f"=0q7K#(qC/OjBLG\UnnVm%So
+Zu0>HLr0[=Wc//Ol:[u[T^`MQKE=EYG\6#a-R:6nm\i<ZBJp7H0'cnpU,FQ4C+r"O
+59q^QK(s4pkU)#Ai9>tB9la$`e8SnA,Q^Y1/-7b\Ccf\c.]:Wdp1.db7%p]>^*$tK
+J6jl>_FF5s6SL""Dj)GIoIaN6"b:9!AL:/#:ci&QO6lL*a9"L?8j6'b:I$ZfiZL^D
+f(h%!(BX#!;?Sn0-%s:"0"5@BXj"H\U-DOT.@-HY6PE=U<9aRhBik0L;FC]jln@@O
+M1Z@s#kY!H?nJ10:r3>^W\/28`;Dl:SkkMgj6oQmVUQh!@D`e)!iec;&p0j5,o;&K
+cq91-Fp#dtpXW*@.HXJu0",?"j.c,ij+t4K[SQ@bJE=->kV<=$-tNeG/L$'#Y:=)f
+3'sI3Z3t'E!)i!QF9b';1p1NTW)01\:*\%,2=DRk+@N/98n[B^s+GKYcCR!s.PQ_W
+I/mY%7fl@l1,%QLrPbUdBCmk;1i3@:.H6asQ[]'KWM,#%(ugcrjrS+n`$"Km!oP3g
+"5-tA*'FOc/PFPaN$)a7^5QNo5IETY?uuTQ.Tf3F4`7$&7/(IBV?[*E#,"q+Odt\`
+De,_g/&U@l!(^(GQq%-_,:@jA/UDPM)HnSkeO[V_WYRqCE*Pa!.>%L,dr5CmdQ5Cs
+"KQ6i%*B\]H9ro580iVB,]Eq-J>EaM-ZWo,XaFdaE!3?eOe?7lXXGcG+JiO@R:?@N
+"bin.`>`?E:T1(E"FP7PE&Z(:=!N_._PC83fHN]DF=ZBc8!$_C$no"0C5$&_CR%t6
+qT`TNN"u?fa-o?^M)R2K?AG@(%!b[*E(GWd4rC;Q29n,*%Krgd#MO,_NKuNnPo90;
+!j#L#Lf(GXCEJL-odL<W"s>Fl.sfI1GUGVJ,n+#^ON!Aj3%R$3d*+=@icBJ)0BVER
+Xf`qb1h^Ae0Pf+R1BP*5r%)JF)8ig3AZGk8H3O@_-pt;m9BJl\a99g1#Lc!dfsFDu
+-Dg0M1K^`W.Y]h?d-;'g==[Ge5\%`aFTj%hN8e_ZEPtpsL1^f`M3,7!f3Ui.Q&paI
+0BR'rUETem>_Q_HOJb!EUI6Qsehus2";DL23iFDOIQPMZ/V8LGLaoj1d5A^c#<8pj
+4>@2k@=AIV.7Pt]5]R&R!X-EV0nY;d"1DVb$risMg";O=:V<HXp]Rp4;K,Gm$lWHf
+5WSuE2Hh5c&5F@j`\nA\Xd%94)VU(C$p$=YR>fZo@Z%1B/rE$05@A)jAdrEhp75T/
+#G?GJB7'p*_?G_DeS>.8-Ka13D/VbriR:,*,HQ.-idC"W7mq`RU9A9Di3/[EEl0NE
+Y1>::'Z*E)OKD@TE]tqWAh:H8R="^@kt!L![Yt2T+Mos@;9p+-%PVVr3(=OB,NF\r
+p"IO+#Cq3!TKGA3(4?7-5$H)i_mBYpL8]V`j<O_*-7ls6q'?n<I^<^H&ZD<tdF(Al
+rCq,a-@R_QU=RPS09:KFJl">tSP=r\[jO'V8B=\%K/9fm#9[.>:Lki3nqh)YV#l\;
+8\eM;A-[X2#CpJZ,Lgc#GfkZo]n4:o4\,g3KHP*t.ts_+NhAnh6<Y`&<@\:p0D*#a
+)qsTX07o+i#%D2^+st)`cUX?+SbSG'_8"Bp0)&*C!h>SZ&k.DBhP;(sXg'coZuG*h
+_'>Unjud,G5ik=#\CE`.)!hII/uZ[R;J-,1A*i](>WlS/Gp$uq"]N6R$A=2[B*0!d
+6]ZO;_?>H?5epbc`nj=JdY,T.Bgd1qU7?!;h!-)::BChsW"W`2LnV^#66Za<`;D%#
+Kc=gV4qU?Yad@E$U`p!k5:E0tmj'H[S;EaG0?)ZS`%F&8GR&7AL1m4ajq"I/8Erjp
+2o;eQNC%&##fVN,5=Or7"eA=3r5iT@;<.)e*W/X:0"aYsN$DX2!X(ifhP"]&QD=@'
+?pYt:i6Zj</K'KNU61hI?8!.SKn?"?4Cg/c%L,7>3.O+7&r/mWdA0`Z2%YJ]_^LnZ
+A1A7LK@/(3VH>\sNsB/lE/7+E*/at%0lXp10G=`3!g.H/>V?l0@07*Y!*1B_#t1M]
+Lm2!h&W,_Gb4qW7-kco],-a\O:,Nao"iA??2FCUYLkF[&(joL4&W/t#C[dug)QX4^
+T`F"]2BEJ>##`i6^h,<X%0[rl=O_(D)T_6=@/,[S.21IUK/(ZI4rG:GKb33^S6R3G
+KuARO/ZNVI*RF'30u_1*16@BIG7dBE<%/YO7IrfaGZ6*5e"G2Un;'4r(5[6%nR/.e
+)m5)g(?&4R+[ZqK]V80ZG5Nn_$3X]Z%*V0a%YV$I1_,,qa@$Ua!LRK,#!mjt)2-s^
+<n)k<;be";bqiar#6Eb/Muu?'D$HtJPEHQ2chL$BXeD\:*JZqr<"XfbLhcHD_1Y8p
+643jP\?5jW7M[0K(gbjL1.&,R^EG:9(I[4)<Yu!Un4j[O@>orL4TV";(BnUt2$3pJ
+g9M<Ca`pPn.h<ar&2\qT1DBqB!)+7j_5f&=/d_Sb'e"Vm8stB*SA5T:i?2GHLTU&R
+#6Y(3?58/fM_'j@.-O88L4R-X*X;_e<Y0s.W+)<Om=H+.]kUN/#_erd'Zdhjb@7Bh
+;gP[X;\'ie%5Tb]Eo_p_G[S:\+[S:&";JdU25<Fr?G`r)r!^St+TO\>eAsF0L8]Z]
+P,^X&;C3.^_%i:6L&o)5S-?^d4rVL6@Ri:L9INlI,b^lU)ccuIC`?XI9!jjUiHRs1
+Ttsp#+bbK:ckE,S17f56!A1;a11=QO'0.4)[&&F!?q?-._+_%eX/b4L&;,NF7lS0`
+.ngS/n2(-c;aBVWR'.odMZgT]64W.WNaQ$-L3Q6Y]LcO&@N8[Icr^f)!IC2i[V-49
+&d4Un>T*i(=t1-gXQ!SZ.P>Q8\*>JrP:$R!V#I)Y2FpLMKC6%/1h!PeOK!%>K<7?h
+c><[sKJm4)];pJSAe\kk5YnQdd9R9LK&ES!)MU)5SP!U4["3o8JYJ;=KOECK%bkF5
+Cu=7>E*/u/_-I*M0u3'f)@&R@?BM0PQu;"@JJ0l^Kcrc-XO"1kD5FmBY[7S;5c?XN
+H(g$B&d+%?>12'.gSEZpD(nndEtlO&N!6QrbFEL7!]9hY5l(Zq"MI:g\"LV]$jp)j
+J#7Ka!TFApJH.&%!9G!(<T4H[+]AOqg_5kchX^cH3aKPce:I*q:P`[9"[joK'XG@W
+LiH;q!5KG;e0r2MTq5%6<>72Y$I"<_a>Chh8[-cDYutMdCZfYfJb'k(P>Um%lmNO4
+:eG4`&/kXb]Ffcm<XlmN;F_kJ)?S8N7*Oru"ssr%S!TLZ!Ot,p!9b2Li'7]Y&]lIQ
+PS&IV7LB/u2FF/$*s5>C?NIfWHHA"GOOd<7JWZpI03Aqk@Lbg-P[l3#Hj_\%-3sVq
+&h1n69pNTFc,s0h1n^NB1XIr`J?pt):[HlB&6oO%W$DKR`!eHK6j_lM`<NE/V4@7b
+H6<N"56_i1V-lpJJ`FNLMe&NcZ6'AdGSpUDY"+-&FGE0'-t<JW<(6:W%%><!.=f)7
+OERot$.:g<TZF$mYVPMbBiBrqPp[:?->Can8hd,RI0)E@J!OIY/)[30]([mZ&;dVA
+^gT8*!&asWThC,JfFg`Z9_F=%8-DGEjdf<QJ(::]+^fC$*ekSD6%UQgi&hFH,tJPt
+^cj^'W"m>%^1@Zri<:g'&X(!\PNN9VCGC3k1KY5(<(V*5D1UFUj/N@m+`Ml1WFpgi
+gkFP#eT$gq'S2ILDN#8T1lJ"7Jb>DV5lo7o!72[TaQ*bu@Q+HuI*Eqp;R4*MX#!#T
+6'2LK3/OE'/>.4sJ[of8SbP2Mi5?W](Td7fb[38fL#eJM&>Y>+'*a>]L<:&uR#B<7
+=GQqdJqXIs<Oa>9,rcMO!fhO:al!8/F:LTlR#Kg+4f@^BVZJ-09L.ms"pg$?OE2OZ
+>#A%b8P%!rCOcWTfl%(fj;X2b5.m*UP_=eT&-:-IN7=Sn;2C#>:1/0iN.J3YW^sKY
+Aek]oBJ,Ej$?hrZ&dX#t+9Olr(kS&_QeA\p"=:_N4PI$a:"!g"CSlY+H#dUNOl&Le
+h?5JNLOXlm9K`Bge=$2p(Q>&["g0P1+BkT_m--o@MF=tO"*Wf:gsuZpn/_[NHIZV$
+1eM/\;\B_=L!"C,9B9W]bRd__'eFA/+E"P@ZJslgQn2jM3jk3k-M(A3B3?rW&cqfI
+?Ap%?Q:@=D-E<L=JAE6/$XhJ:?uAD@+uM-Q6lY<.De/q\+gCLPSe.Pn,QUdkH<C#(
+)nbn)=f=%[i9VO!J7<$)d4()I=K+P7AHNR-&1NMCa<!@cJk_`80J'"7T9mDfMYV])
+AZ5/#m7_DZ!MW"R%m>JSg0gLa>=ND$%=u]XGJQXg2-=`4ip"AiZa_mtKsNG)eDLX`
+d;'rAbS8WfR.ZE4qJg^i'<3`r2C?Fh"/)qWT[]leM,5F!M\)VW;_1@8_NII/.3foZ
+qJOT7(p:o0(KRb4`X8_=Zlk_FgQjs1&.:Wb#E]!1\T2SGq&7lCA.%ZR3Xj*>3)m-,
+e/:YIMpT%e3KnGW.8/oTgh#),R4&o'j7+)i/@bs$V,$"-6jnR]2?d*_+IOoa;+`!4
+=JW)[.55"-M0XN$lVnCd<2O?SC0s:9Uq`c3-CVb"H:;#=&HU!Ob[iXp0uoOsZXSMq
+ii0$_C8cd@Au)@3*9)pXS.6/G+ps/'Hso:_5Q[TF"p)84c@ER_jmmYpjBA4fi5]l#
+<%S*GgW]qH[MNjKVGPQp.l=H7Ck8sf;In:!9mX2D(($(q8`B.n[t`k'0LgQn!`\[U
+D+Vo,hee;(+p?2ecgdZKE2.5Q/S(j-SG8f0_#jHYALnPscoQuHo;R0G#*ArX1(3%3
+Z.e-7*!8^"<u27Q,+u<)W`(,0%&JV=08T(Z_?<5i:`QfPCC+kU'#'BB(H_l^&Z2S8
+)2\TV+e,<i[1+Ue!E.[`EWr"!)i:UT4rZJFb$KlYe;Fqh!5W7eRFHe5;6@D9$Tch%
+:_0p!#Q^%EPkZ&kaOQ*0SsM3$PsFE5]$?mp(m&DFX-1=+J]NBL3KK9o+k[N[&=3a*
++rfJ1O6DpkaM!MRQ`F92^adsAgM;jp%2R"qJ;O7Mj%6Dc40M2tPlMgX8N`BOd'E]`
+\pF0*TeHK)%@&I7#_CdBfX$J9oUUn3Qq.l9K:nBQ)ACL?!Jlo8ku/"@L`HNN&jWE,
+l9)O@gk\7\TsCR43@c"ejf?L7(/TT%f\Me=ZaX?)%i>m'ck)qE%fkMqJO0YSkT.;,
+,sM/,0-Ndr;#DZum?9U#Mh$Si)0m5(&sXj[]no+EW73S"kn0&cTW/V78YujQOg+D"
+N.GGhWMm``lO+gMX?c05E6'#.N<sjF&!2U'd[lt:dt&nT6V."_iMRHJgl\)\2*%lu
+g.NC;R$a95J_2#pg+=FdLR8[Z01d$';"C>XN0`+P#_7rD@#9]L)?C.%TKnp.\YXkV
+:4Z&Y[VO?Q&D@cm4KRgTLcG`t94l#^4r;QUS78H?$f36:ZO4f)%4PC>R8F@^YT6l*
+.mOM5C/)>AO.d_]*Q[Ms-k-0]3]6sNLoN?BqdpsiOU2p-&LceLBpH<WQ^/erM$\FB
+G`f>C#GA&dPaZ]R<!RsSK+c9k^QG>uYS2SW,nQ392Yd[dd%QP1pdn%h!>(AL34KDP
+^*D"R$](Aj3i7iao!f#P#j;R,;)L#DVhgNd,qoo2@m,?Ep`jPnPlMk^(t?)eoT2nK
+Z1+XulL6!BM2\YS[KHoF;K3149d!Rh/!/)`a;0<1&g3>!UteBpJ^fX9(m2nLZ:Gjt
+TG%am,R\"?5hqNR.8pkQS/Bnb1<KraCrmQob7cp?^#7_)O^#[/59aJIJCsjc3"miN
+*Lds`Y%qW7GqOZC+!!Y)!C8$)>Or@sL9AT;/+UFtTou^,+XEG>UfoH,n[SZk%h./`
+Shs`91m(0X!07c%1Otdm3@0Jp)@\0(._u1F5d1Q7Ru*QgN"G9F=sOm*@uaCoLj7/]
+a:]JKNkU(Y8(0u7^la_Q)8$r>,@oc'EsA(QgAtF[JRgTga`\us#G]Ya66NAX.3nr(
+(P(`9Mi(W1.K`B?8j%[O)GphIWR)6U)i@4/S)OGLYa;#P;n8<_OFa2A&H/B0h\OAh
+Y6.gc=P^g7j%W&R$SePCKN!G!huWTq.A2jPEBA`O6.(c8$.>j^\@`4?;Qlk2!8ShT
+J`)k$I264u)TrSKW#WVBTp;U2MG[9E@8;Amb*]0VMJ*q9(`S=**2Bd+P)tS2bpaIU
+Lmb8h+,)aNZ<&+DC6K:<N^4P=@94*:_Q\#rV+;B4gDg7p*lJp!JOn:`i#]qknGt?j
+P;j5HG_h2R#(WW[eD)d`]L]3IgCS21&4kc1jXh:rW/;bh,_>2-EY:bh"G+0,!O*+Q
+@40%)@Lu(uLmf<@=G2TYAr].4'F<h>r%tb6`"K#V2ZW$GGek/)gP?CNU<4@8i#[_G
+(BLHK!LZj1R=P]id0S1M%^H]RBt>"r%DbG\f>,k0V!]Cp\KlgVN/5iM&^V@,ku@H$
+&sAn5=S0qEPSlaRJJ4]<:q)7,Sg6oVU#<<h)191UN%hJf3LJ$NGe")oYR`1MJIi4q
+*28!On&Vb1!SO>EP@bFG!=ob,Mid'4]n"FJ*"2fY5^4*,iB3MV'nF@7/^d4oU-K%l
+)F$(A*[hn'dC19>BS_cr,[)e0i@1PNcb&DTQnYK?67UVYjHEH%`>&qR#u*k$>d'h*
+QrrGZ.gIUZ&$o@R)O^m:\=_$.D\C$i&4t4^!q;=Sbp7fZL`>QSdGKk$Yr!Au)6*a@
+'_`%Ks3^[n,?U+uOtrmH4hI1078l=OBTnRIq2=cA%Ud^P8CIoT;\kb_N%)l^i"<cO
+r/OmRP.ad.P$.m%fT5NQU8pPVaIK.aoq\!$`$sW#_,34^-]![BJ\_#1n`^JZ3$BI-
+$e,%b9gOs>QjO`ZNeeAMP7<u'!>odP$;_KI90AA(E/^b%TKsHn&QfHgUl@'fMu)!J
++Z53$%CKqg&#/QE'&&<flO$b<M,<Z*+L?m`]sI8]!UE46qYCW"eC:-1OQ.:\WBcBO
+%%@:)1/jd/fqkL6i3u5a_B@j/7#O<T^n;7mZ1FcR.b5LDV1C=p$7^*/&/L7PWj%0H
+958GSfcQ.QTK24m$g^WgO[P>adK'G5S8eN=@P3ftkH.#=0p-%7d8GP7C68+1V\8!O
+G"siN-5=jpN@g_6.;GoFK;2U8%Fd<CSWM1>:<P14$BXh@X(J@\)FQjT-OOp#fGfkP
+.g^IJ66s#LRc"l(>eJ3$JUFd2@./tMUEE^C/ceZR;^DI=/f?pBPR0=aqQsB40,P=j
+!Q-!>"hg[@%>nP\#i_K8J;X\[COkH[&5)6s^quD9fJ6&0%JUjO$-u"B+X:-s'?K\e
+E@3)+!sh`*2J_.kOM.2J1-4'a-'7F#Hb>[NWLDJ=kTL=pr,u)%cB*;;5MSpG&HP0J
+N<r>5=o&1/:/):WURO5tOC9Z#9">BB%GeHGJP3V=X&FRL6NOPsM;EoGLuj2X0%F+O
+d`g/U.$4Nb/t-2<P>jBh5nO+UQjqbJ.VU%C8F[KIj17efTVr@$8B6O&[gKb;P.Vu+
+9Im=-`T4Am^A/D!+I+I6Lp-\C/!;NL,34WkNZ)?)Lqnb*Yb"Rh(DlLf$/#V\aGGpt
+28QFi4KTus.3g@)OT>%6Le,rIlpQDpnL"Y5'4"*Q.6eL)XU?]rME9ZH0d`!U)TH16
+*`.grn-fj`,QUFUJb)?^iXhf*iJ`]d,4R3R0g-Q!+-uu.N'e,7i2o#uS-UQQ!HT5:
+\mBpTT)m<<&5=9I>'Ee?=g*Di0]7YVBXnI0d7Bub-)FNH#pu8VW29qIOkD*9@02jC
+ZjW'DPq)VJ5omrN'J6r#O7Jckclf]/M[5]Y%Xd-,E#b!j)A7@sAiPU?:`,8881/-Y
+%-ZZ6MV$p06'U<t>#Gfi0m3T>cjYXWM&R_pKb+9HZlsN<RE!tmE=+!J%r-\5_9<;>
+q9U]\TX(7+767d_C2lmfAs,FP^c@f.Z"8I.7u=WgiqXr-Bn3P)#,]<-&-2^#=qV?L
+G)Pi$Y.\oXi#`YkJ;a3dYH:/!+]5bs"W.Ld2Jq.RGbglqkmmK_Mbs_eR@Fe4jf<K`
+9`(L2i\;9QikG6NOqXY=BkG&H<k.j]j+tpG9FW15qD3pCPk@eI3Tn*fhZ;soLs\mB
+Tck&.#at3RStI-UnSjn8V?j342J[(DNC"9Tm2c9EdW-"i=JqQ=>cq2aQU1k4!^2+M
+duLm(0IXIEF]2"t/J=H'%+5NL@(u^&i$;Q?_9UJl;=('1QjG<0=RaKHr8>u0M`M4O
+*/cTQc8jM)m$#d5n7Wf%6bjiG\7$6Z!Kufp.Af)MUF'+U$E?--]e(,3K-q+[7sVk.
+o\l1*igruGVfd*=Ll.U/Mubp>,-hpj!IEZ2c]jXnJAK9HEXeTgObmSmTd%tqR&5c"
+juNdGP5[_*i/Rg:Q(@kRNar;FGk<Ydi)EgZ)J1aUGo!.M5EqPuTlRT<kpbfQUlrgi
+5q!EJZTtht$9TDtO%DHmLAl>ZYpb/%Lu@\1esYX$71q2OXoUREp_B[Ic7J2$S\(Q7
+%s1^3*0,;GPMl)J!G0puJ-"*XR+Mj%JV[IHUm$,Vi>\<giMbTgF&/fU-Z*t(f*@=%
+gDa&[,.Z2Q[^qic6O>4oVA9gV\>b>lR#AMp&AiJsll)2rVPjO8!7C`G(`mX38VfaI
+3_6bbNs)*?!A^CHN_G=eC,esC;R+:_\k.r*@&CYRB&#*IDWfa45m\1IS=gFGVeH>B
+@#'[=YaF1l+6,>=.0b302M'GceT4'8pmMRe%S=/(PoTOT.N$l&>nK=2g]RBRfG3mk
+_1=k%$O$T?@&R0](CUKM0t?:\0bfFsU+lY4>UkGd#,7dsJ8@+[%7]CZpsLc3&W0%f
+!MIYM2&ZmuJrrmRC,$S8a+M3Ag0,nt#fWPG(sHSC(rCr95q&s4,8(:cU!WS)BKI&g
+`<.i>k\;[fNX$/iOMG!^)[qFpE<)kL-5$T;JajSGL+jK<Kqe*>W)bLP$3S,l"qWsL
+*SCXL6!1X#,SLN=,8kIMCcEDnKH_h;CcERS@n*5e^o0X?Yt^!o6("<D's3FLK8K7<
+;BZ^3`T&,WcsSgSN^i^3=JSJ=(#K3^nY!7"0c/)(6>LP98gt8T"bRuNYXBtoE/(+W
+X=.dB&dsFLd>5.t)A(s4+gE@.:O@]hpHm[p,H)-*_%8R:"(>*?P;g\e/eeHI86d$!
+$&]W6"Mk0E$\SOre/\dFcr(C-+k"dY#Q`k(k(O8[;[<S9aD.IS+Zge_KRoM8*%<&P
+F;b>NqlH\=CiWjP"lY8Bp,W4Q";1kdBPnFd%?P=l+[K>@)2:F%p_P(:\4dD8JH/%;
+Z[jeu(<m,2&etQ.3*$]H!F3VS"(:U`'o)hD5T#1ddrQg-%Q'EkWUU$8aY2U\F<(Tp
++?L.RiQ-Qi#*!Rk'$mVt(DDNh&3LX1NaR#O7H'>E(:rIFT1fEg1@g4+JZqnl9+HbE
+&'cd=F:s5LaCl6mabnC*K`R!/(PJJY<A$J.pcoAmn"<Pl"T`s"KckGM:)4!Ucp/$B
+!9cfaLS=K_/-QenP2_/23(7P8!A*&KKkpHh<<T"gDArh3+?U0i@D]StLM1806ePn=
+7NNm"!'#Q73/fg;X\*UH(+L"h>*m9\BO['0TmQPGK`Lu9*4#ZR0^#;^e4^V]MmAE]
+WPMQ@JO6I0$VWk&R`.mlW%^-A+ts!Y7tkC0H60-5iX-ERc7NsL"KV<*UkSQW@,qN*
+pj<bY5j3BR#Jon[*O-bN5(Qn^,Yf0YCS4Ms3J$+;)_CdUO;,sIC.+C=6%uBRKY]/s
+&]HMUFr^eGE(oB,GMm`6fm+>l*X+gr!YVX:)[I#7!KHiegOWP&'a/Zkl4AUl892X:
+6(7h9TNsDed0D/]Og%JOhL$E!!<=eo\094F+c%Wc96]F;=ra:@_#Qm82c+a6*f"Ub
+A/>A_8ndAlXNRK`"ne%/'[lLO8/6ngn8Q+F/&jalXDbUFU'<'#NHZiX)CSS5dTenG
+35:'AjIed%*\&:[%K^]^%#hNu"\&OKS"O(o!O@Uejp<b&TMc-S#WN(-Fg2ntGRto^
+Hiu]k5(baUirLZ5?-pN["*e&[&J7S</V4`>A;X,J\Rn/.XI,j&XL,eGpBN@][h-Hu
+%@o1*G"l5CWY07Z(Pj5]Y&uCa;JHYu,3a\uYS*c8`!-usRg/4J'p`F.T9JRQ2Fbn0
+Y7ocpcM0!rb)@7$&3Ssg^cVlr&/qqV32d*b2?tY?R$PZ=W0%WK2F+YS*+GA+%o>%d
+-&`_9Z9h5[H>`o$U_k>LCp_$_2cmt`NuYY^A!WP)"j`mn'c0ti!>m2KYA=q#APc)%
+5U04GFLhOJ50Y4FVI#p_g]Gi)]tmir7R3)S'bW'2gmBWq`sOt_1O9MHBHmWB<M'@M
+G7\62"?'$m*ked]]0R%J?=fXgOO.**P'SZ>@$D;)J6L(rj<&Apg`)\L*)S$0qbNl]
+1bCStXk%M%"qY=4UnC@Bb`TA;^i0ge+B&a\C8upI'Xp&$i!E%jIfs/(W&53$O[7>S
+40/@."2KMkObb,5^m#\W[`5;_,:!FJ8VI99D@7HB,@7%E%$q,aDTl?D1?ibO!oe`s
+_+6+:AgA0@Y]/7rl(pqO*9Ir'fEoamKhP$g$Ul6X9%sEh3e45iV@YQghNEdZV=^XO
+d[Y<S&nV9^F;_0fm[=kfAShG2(;Ro_%Gi3k#@s(c<3Tc/e'T[Mok#lZ^hVR(R@otj
+@D]pl0dM=l4XK;GPdk*u"&m%C.u+I$1pD'g@_mC9j`,#j?qg;n(`t4V'H7-1**/5S
+E!6s[0GlVP$.1af/!*J:2$Xc+;h-N.Eb_pSi)U,B^c2M5GRm1]+:UXC5mQt&%[YVf
+p(&Q#"lP%BXE7cM!GSni.]Mj4$/U!NoUCd>S]7hcHSBu=l%:7_N>aQm8;Xqj>-(,Z
+'utp&^u-L@Ku=THe;gf0TIN-mG+cFa5%)O7i%OXnL0*^=6'APr7*JZK5SJT_JT;SZ
+/*It+&;C[TL`i,H`=in#BW$f+'1L$:/.a1,_io0sZgcZ;K'1<,R^khR76R7acrTQ@
+ar3;'D"S\b%RLHZ+p9$T&\U'%%:tuJ:$ZB8(fe3R!93#Cb((%h<8(B3"OU[(iNB)V
+9M-(ChZcQ5irSX6.GYY1#N4[W!V2*VV)*_8nf/6-!d=:qq,/LE"I`*tBTA=X\NNF1
+<1\&0Zb[e<OJ%2H,26W8M8?nm$))I&Eqi-8QleKU0^]#E0YL!qnL@!;0WaK$F)B(T
+:!'pr(Nq"R9NcL9k&(D+Kc&in'OXA;(`.gfbQaqkc>f-aJ]49aC5rQO"Y;eb,c[*7
+[Dl,j-I<GD\Pc&mHR+1Ch81'd/8E#r3l/B:4r=X5@HJ<c2!LS?QDK\5&?:b0V,.^(
+:dP?e.1E`26-_;[YlU"ckt%k_jcprRD\@3a"@1W0K:mU1\Y(H<V$tNg,9C)kGmY^N
+L_^#d,J9-9@Ur;I)aBlB1RboJ"5m_2,K%Y1N3STOi<hlB[#;Cbn1?R4`"eCj$AF$c
+)?u/>ARX*BVou.J"+X.,JnQo,JWVd>aeAlX:d@GM*@+q[9YR!sMjtFpCQEKe*7b[#
+"oCmVhrd*8TK8=Vam:pRl#;Iq;J6I>3sn"=Bml?CG$G\7,UmK!(o#G`h1>Ik#*FK7
+^I*@QVrI,>AoTDA"'iH3&sm4GRP]T&l3Va40s>;rR&;1hMB(SB-8#W5`FER_^q_&s
+lA-?2<@/'gm%cUKaa0;.0ZIM/nhQ!-JHA(lCRV7d"UkOjP[Jd*'1GGJHI5[:n6l-$
+Ad>)[O[<;g.ua12?j5^!"E1SBa`9kDA2V?_-k9FJ+@pAq"p9Q4!9HgW-pE%<UbcMD
+7AN[>"[XMEEi\,#Y6@[k^h@Q(`]FB4G9\Y!k6(qJE&"7Ymj]/S5X9Cjcp$b6#"L#[
+?s7CIDQ5!4>X1b)`qW9GTX*Q67B#38U`<M"i_>21"/A$^Kr,)!OtihC7S3AP_qkJF
+n,ibP>DZs%`#>[&VHE!OP:6-\.4C#sHo=F="X#2qC5=i\(sW@K+A0?OB"E.U*.abL
+RO1jh"6?C)##bm*"Me\?lLZFD-?3K7RY'fQ^hBQrp7c=<S>2O+%'1jOE(J-5":FW#
+-klk383(0H6A9;`7)T2MmhLq5-#J)RW@BY/@Q-ud@OY9oWpg.*<&rrc"VB$>_I.1h
+63ZGa<%sI]A>U](49D=cbO/iKjMjg8QM?&F9uRt`9Rr6o(:^#*,,euED<+]k(^I+i
+#R>ASc*6H,ekRHO"CN99/K?'+.&!B,E2l`FU?2PC1BSro1Fa:c@erfO,20"E6)1jk
+mPk?BE1,]d+oj4s@si'qmPd[[SgQpi80BX=Sc](T9aHP7D5'7Md'r%?"[Yn0#+/;,
+a@Cbe2X^PIDoaqP-7.Sd#HkQB5^(r%N-lj@c4Fr??pb<S#Qod@Z&+'-#Grs0TK\("
+0SI@IU3%Qo@%K[n>D8_OJtg/ZW<\9W#3.%&A/_4p9K2$#O'lW)5X8@^"?F><.o.Vs
+A!6p[0I<V"1a43ALHqPb@-57N#Jbos"C>V-N!+gN"@Lb@,?uY:>R/&n3$;,]KVh7,
+BEee<fPQ9DDrM"3*\%dF74En:TK8H-#V$10/-@1VTJcr28u]*%,q+-a!q7PW[*AYL
+0Sf?P`g-kFEiFYVHR5aA?q-KU/H-jk/]j_<a:+nX5ck,,01XeCJ;=H*-q\$7;;abe
+J6"-$OG1_q3GN",aD@/O?3]GE:Q.,U@OS>]CeKMW/S(5k,,B$'3WmDf[4,"=7$K.?
+*]h7m9L)-W,kCg'jB6!D33"stb^aN+(1fpb#DJ*@6ad/O!d"bb-Kb)<WL3?K\fbRo
+>,Ck.!.4u9L'XH*]c_\,"0_nn4sd,$2^MWT-uL2YE*mBY.tid+UA.F$DXZL[O<`%*
+baa4+JhA>4"$eJ4!(_+/S<HEO3=;(<B!s"</q'J,2H&4!TNn+k*X$8ceEb&C!%aI%
+E%bU*.0ZZ.6K1rXjA1W"V%aiYA__3WNn_Si6_J`2TSa#*L^4-h9S4g;!n8Ja(e)M^
+EI`'sVJ%_U/6PJ@"6dl28JWU]/kQ5K6B]UrTJclp0OO:1hF--Ml:15ujB'5MIY@Af
+jD&eR<j5su",G`+!-C6fi!#c1U?Pk5_Uff@VOAh'/M19^dTH05Zlp]$"orrs;DJLc
+dKi*_CEr*HJnu\481?3(K]%:aM"O;4HX*N$08!M6W3cZ5dP$@e"!chb"D$P#6:1`2
+H=D=G_lb]XS-@o*-N`lDaK,RG54#,156+tE5Wmi@X[V4bHYbGd#%f;9j@gf^b/H[o
+%P18)gfED=E(7Du#].QG^u+.s=,sOb"-Yi"D*nDn<c!-h+FFDb>VZE\/jN14ZogXT
+Q?=P\,#;/?:8S.:-6f9[-7Cdul"2t'W_14dirbB;`&(**mVkMP"2o@^^jIoqGao8&
+RKg&X_^+?bI!^Rq0*2\s-+lJfMJ<QU#Cq1,TT".Cn1h9a/k&GV_tZq;&>5c1Pp;qZ
+@Rt3cb*T"7?:40D">mp3YZiA&=+E.n9?BC%p)t]gX!8P$K\GL]fI_4-/Adj56_JZH
+1dL:A1I_WR?nFLB#0DocpkNHULA4INIm?Uc!f<I2+C&qr8-iU`#UF<p.:tbo:eGG6
+,6D[\`+"B$)I2uT2l(REoF/58aor-30L@DYW-1meJO^&*H_gEkC*q*F/tM,%E/"3O
+k+X4)_Dm./oYeNM8+Hn8Ad@Bh#@c>>N@9njE';4V>EW]BLC+0#2D,9B?G^*!J9>&r
+D@"%<#f):AO3"h%5UXG/9FY/K@qJ4rC'V`m;/#2Wi[4=e[e<9pmFT'-:iK1*kV<-M
+"A01G_]#X'0Q@B@52pF1`m@3XO?sS':<UT^M@*ao#X0WYA#;Z(`t3Bs_RF*<.KdC-
+W_d$$2Def\@$<JS!0;_>M1e5i2\8N%asPKDl>_]jJ`)%``(VU+W\!H=3oahU@j<Pj
+PQ`0V"X#]W^afZQ)Cm'%CGJ;0kGgIM6nC`J1kO1$7>P"&DBQsG7tMFJi(-uR+=eWK
+"isf"KpFVlBP*!,CIM?*YlNq(J4E.-7Um&r8]LJP_?MV-#aMZ"U)dk=$4,-lW5?8(
+'6'cXYi/0>E<Rt#TNI<FE'h>t<5;1IL9@c_Ls"0pd$8/(Jm-c;Nb>Ga(Ch-*i.*,*
+?3Q4T"2f4>`2f)YR(c>dDq:=e",oAras9AtDN'#L!m6cu9ik^l/46($i-I0#fl!h-
+>+fg?@#^iOA-[aZ-9!CX8&C/i5Arl[0r-3c!&uH]`W[k>7)H[3Jg!M'."^Fm2b%7C
+P5%V!4uPaR!J!FEJm&F*7:tIaF%tLRN^=lM:p>#@Dj`e$M1RoB3[en:4<o@]TTBF:
+VXss9H"l\JC9e&>Db)[5KLlsn/(6sI-uAAsH=j0EK8*#70QVq7,%;mM,;oY>:5&Dr
+CiDie@L=`_+>-+^FZ&JD"P=qCZn@*Qp2T.!+G:!8>ut_3--2TPNZt'IMEC+NEb-ro
+Ftb5b^-e85dVF^h2!n5Z1/4!`+iDnaV%s<5P\%p);#l=UTPSSNi,6J%8AdbuK)i<3
+:8<>#!l.d`G3`rhg-pT#/d:<_Y]6pZiiMB8RDdg;7Sj<brWkcDp+#<$94T@.\W;@%
+"b9/26_\u4gd<N21.$d?6=F[1JX8WUNO`Z_W<5.=H6K+CAIRNG@"&Am7Z]%m1Jh%I
+J5M<IelcSC9]i!ubg\ga4Vbb1#K0po6PjMoXDk5EFeY=iU2:J\('Op%eq+_E+E).q
+6j410O%CTFK9h7"3h>O'2M?=p_k:q#NZdNU<6Q*`!/Lo-`r>'LE>sueMAT]&*p\?.
+X<Mfm^l+OELE;Z@^uY9=!*q\lA6Xl4mmpS?!sM0t/7%`4#.Ak;j3gWj9O?c04>Z%L
+<.ZVM`a]^`#p<r,K6fFD5+X!B-_eb9D3ec8PE@AQ4bj/A'ej33ngf68"?N2iA8XD;
+]`)O[@"aOEaA<.iK?rIr#[i_o+9DibmQ7e3FMLMt!Z$Au["DiT:S:'-fFV3Mi]&A7
+4qV<rnq87LpHZ(G3+L)65V]>B$=F&0#N1EH7URp\/h_O7dY'A!@fV!2BM/EXLLfCT
+7]n&TQa?g!.l.D_YJX<71;;n8>diqF?u-(`L^;q$gL-)/B6$u`RX52sfI>Z-;Kaq8
+i_f=N"e,@'Khdip[b^-05$=sR!YC^Y*`e3=B]^.>2XeA1>Z'K;<MQ(!ql"dONj,=I
+$Np/qMio5/MP>$$#"O]EZoo-pqe7>l^.Fp.A0b[J(gsmm."I/+===F@i/GB!NM:Ub
+$IW+U#VCtu^53=*+GiR',_?6',4t$VK0m*Zi(]qr-PZ2,H5%nqL^='BN$)LaM_8#V
+U74It1*V]/-QG1ai,FC8FCQ`qic5<L_^TUiD*UobWAFa3I=056[1Oo;@Wj#DP`TC2
+3Kl9fb.\'-$Jn5&+HFcT@h&bZZ1&*[c*'C&,+;gei*:<J>\Lco5Y_F>2-Xbr#JD5#
+,ru0VNjU+X0P@tJ7:rUM4C0Qd1d_*_kn6VkBA47Q,_\gRNrlUpHREmO;G5GC_^nSF
+`bAh)5!WCE.LJ+%.(s)-CF;Xq7(?F!(^*)VQp=g\>e4WI1@HKIQ=ck'`8HD_@QMQW
+)GI5A.@:3t'qh4B`Ut\b+>lkc@R19)<<MM=-eN-&"1e[r<CN!86<Zuj]tO&M#Sj?D
+U7qgc!'DA7`a\Ioe7^icObi'qq!ntYKosHp;@r>60H,q+K+Ve$E]b6L7A@&3W*Utg
+MM/jO=I`J8%gW:]_#Uis2Ao)@,2o'a?7ZqN"_+/rKMX-8%&@mJ\CbC?(CUJanN_I[
+3#W0\j8mco@OVfp7"[dqr,+8+$:I3H+I86K*"OZSOh;fJ*YXH#!o*4]j=hU3`ab_!
+*,m\O#t&1&Ugf]M(lX7r=K)FJ1Q@HO`/O=bL-QhdL4V-,(j%k\N^hOgR%.2*'+)VZ
+;$_\7,+8m1QZ8+o?8BJ-Kn@tphiKc:%S'W0h`,X5&.?LQ&R_7k*#dCaUf"Y;?8S^?
+BL;e[^i/9K#A/Rup%2iT*7h^<0h?gk.DCZD,6<\M*X4oW^ljC[BOVPV+Y/Wk+JGg,
+(Tr>QHlfh8?t(5a@N^Va+fu#r)[0Y(Afh:&#_!jQC4K47Kcm^8%"oc01mnNA.#8rM
+J[f$NL$:+dOKn/!SfGhF_nHfgiNQc+"^qBljb=rj!Zm+_k].C@+R!DU#!l'h)QJ@%
+7LTDc?s">$JV'+&"tbaH&]p_&JMYK#TP,@QCm\<@"jSeg%g<S.g(Z873jcN6dPu'L
+0%-tW+p`c60ZaKL`(LdLJ]tuqae;7#&Hoo=8.WCak[5V8+ukB#UM?H.'Y#=(T'!b&
+\7[N"NLO;oTYWTW%L5a2IK52@+GLsAi:KJ\LCb+ET#O&%=;;&6'7QOKTdjBD"S)*=
+N.iZNJg!Q+e)oouWuIEF](+k.*JVD/A/^.&OCT;cBM5cM\H1Mu*P#4TIj2Mno4X;@
+6"8IYKHW$-m"<,nK[0pu#^ZQNJT^;rVu_d-WWcAk<8'`_^gR@u=#b:?Li!-@(kc<7
+=s4-Rg.3+*@2M-$#6G*Z/)GiP>;3R\D#5L_OD%l@#\"f$d0D8%6ks@U,L.,0!O.3S
+#U.*<1hZ>H.kZM@3.2/>(2C2jKur23Pm%1J9m$Shn3!0Da;BXR`<#h&)^OC,p_G!r
+S.@LF=V?^SY9>;X&6@(aL<Lm9+@$g#!U*c.a-1I7&VK%G%Nk#,VD08"$0Yb4L(Ec_
+)[3^DD%ae3(&el"TgAl)\hl#,+YpnWH_[TLr?GhCLjU]f#,14+k-40M?4eLB=?I<$
+Med5e#^9Zrk6?LKIql5a&&]E7%]\%[#2'W<).B3ME#+3Q"664;NAKQ4_<XoO6pR%&
+TCOu+;)gZC5i"N!E_]V#Ops^RU`#]/ReQon.qWKq9`o?<Dh7sUKE1]NK-4&%h)!,t
+.SLk7cqFo(UH_/_"jIdfJdVT=,\BKU;6rMmG0H%"5UB5D"4L:l6/Xt\!=>YlQS]"E
+$3LGsL_1BkF:gg\<D>`H:kKm2J)GQ)@qE:bVP6*\6$!#U#k9eo!)d@D,ObqnpmmW\
+9FD+S+*V,gH6pU2%0=oL604M%"&fU=>qAT`T_R,ke]:"m">WCn=o]2n<c-*m0fOXe
+*1F@,;om$C4/Q+)KRa.R9_fE'L`+%E!($q,g_0t0%&^n&?j@W*Fs+&?^)#=B$mX6&
+-U>L3,Nb<X6"0n*V#2<f!,tiP;>g]5/.dDt-qM0`G6SGr(P=Qp109m\BPtXhK>_gT
+JUft@JD_@d^iEnF!&+R%Hkq;62@&EL+9c0f,L<o07NbMd"Q9!%auN$BVrEkKjLFd`
+!)/]H?o&s@9HaN=B_DIa-O,+(GCnIdmX]Zt8u*T'OeZ"g;Y#6d"I/n<i/6D'Tl^M>
+kSSlT;IdpJ><hCe>>_%u7i$(M"N5PW""D<"_=0WukRH,FYXh`WE?>?Rj:HnimL'(B
+":5)K+G6>#RK6OuBuk$8O>\gT:=q$lXqVKL0K>rinetWh"<.Al<Xb4Vi()_5/LV06
+%q8d!ONmFF&gBMZ<hp005nP'SY_9gnBHdT;ng,NBC'phs8[4r4'UT,AcdBk9JO&<Z
+KAnkW-Aq@QcEn'(@`7JCTH=?5%7hMn[Ue%c2).L\aI:Z?d\[R$"UVTa]q@E](3B1j
+:l)B/.OJ2Yn1Fk)bRI'=HQk"N:gf+G(H4T]H\r(f+AjIV-%JMnOY%4O`B<6f@"Lk3
+]&]qE4VQ+n<cdL*4hhfpJ<SGm$@tN!"(6?^PC%P@#n!.e6l@irZ@ptkRQOV&*"l@]
+?u=2V1C%[eT!%!:#ialq"6]FpQ:#\0<Y.?Sc&!FCG@6m&N%@--N3c6?E,s*G3@o]g
+@2DB*3e<:cW:DA`K'Z;EVHf1:8>+M![4^+s4nr>4\.o'!9bsY31'B:Q(ZH/:P-)P^
+RB1gtK$n(2!HjKHQU-=WM;SV(n_j`2lkok:'UqB*,+B(R#HaX[S6DtJR-W%,?fS5U
+g+e$[_!&P1dXhjXTI'd:&0)EF[aLUE69n,LlP?ga>c2-"#7&q'X(<';coHJ<+GK2O
+,28oRXP>R=W#?9=*Y-Fq[RaK]N!#_F$0a]'"9=9262&&O_2'niMD:o@\`O/M!$VYU
+\.tl]:eQ@[?S@).U4S!nO!\6if>P8FV<kKU(UY/+i6aIrjuT+?ald@L!32T_E)B\s
+0.h#]Kt>-*J'HFO2`AU*U4dRF;Wod?(Q''I(4_T@Qn/AjC_2agNXuSp7g?b^'9U(T
+Z\q]ci^L5p.qKQgOF-4>jcJKLW\j:OiJ0EYYR\]`%0'Q<17]j/@;+sjE`?KG8'MP`
+/)1o$++[rbJ=mK/!(9P3n1;ZeR7X_oFCc/Y$Z&Q3-`(+ET)gr]"%AT.E&N.Sb8<((
+E/<DUYVpA"-mch@@p>=KE/oKo,Xm6lZmGCe%(I/c#;n1N"0U+%$o%k*dk<]S4pdG2
+61^XNf]F1Ak[EJ\-t-M+"G-&%#Jh*af%C/E.Bm;(OtW_(j<2E,nu?i<Ra_Jc?$hjK
+7BQZi*@XpK*YMM6#seb9":J;Rq-PNZa_M8;M4>FW*k)1OUN6THiqq#[J:tc3AB5Vn
++M*9PEfObB83lMYk<MJ>>leg?V'qMQ(a`>?Ag<l0JNfF[MFt]W/DG]b\,n?V#n.po
+!9gh`'!rG,V'_$@$h>^*dbl6mV3A-iVF]Z-d2k"[_@?XlS7qnQJ.!CE]T]iE53Tcj
+dI`^03saKiN`-jUEA`jt)SpD<N_#@b3r]4W%O.+o37&J4#uHgID2DAh#uHnD;7Vb7
+'Utls)3T4P+L_iT!#qV.$;_A#ddEM9a0VH4!<GuI;;DRNO[$C>$6j_l)eh*Q'/ndE
+O!'deLtr(m1Cu?"VhgZL.?P!?U9lWVS]D:kqQrUDlQX`e6Sn]B@oX21&K-dF!;I2)
+Lslg+UEcgq!Fa$,GhKBsVO[hgO($gp3<T[;&XTb-3.MX$QkV`/(PuiA'BpkcbOU3T
+&"%BOSH'93TF`<o',d3Q!@):g!#:%K;?6nt+hS\Cfr@7SP-ZB5/d+r_Bkdu0\IFW6
+2KGe*i;9qRo>MCB)j/qsaPn[_qZ0$\P;oAQWZ*V\QODS%MD4T2\L+NL\.?ug[[XI\
+&F^N90I&;0^S'R%=bW7lg;</*S^ET#lW#PC':/8?M#5iDZho`U>scWI!D6Ps.X3k^
+h*e;)(>NI<<,]N"'7fp6!>#q^BFmUR80Pd_R1L0k\>)3=-OE@#U;JaCGS,clP6qTi
+5FK#L:tWldU6@;YJ@LY%d/sEBP_f/SO=UIRn@0As`L'NLZaqMU#ceo?.6kIaPE6R\
+kR%i@8r73o'3]W8)u^.O[P$=q#qNXh1aTcL&ciCd!8+*b0Fs&)]h8W]J,~>
endstream
endobj
218 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Im30
/Width 156
/Height 257
/BitsPerComponent 8
/ColorSpace 127 0 R
/Length 38952
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J-s5(;"/F!/JX8aiusek>WEZ1L'$nDTNX2j$q6p'Lm1@^O:-R?&Qm+p2BE4D6?1)n
+6n8uZK;-2,Q<#5]%)ep7kk&mD&W-eQTSTOS1D^D;!hjk/=>CSJ7`-sJZq_PUN<A1&
++IlCY&.1e`i<9?^1`Qch67C4!:acm06t5+<>Z)OU#D5??5_qNJ&;S3@@0hro-jkh7
+K).o^?nrMUl!bf,N'o(_%0]*bKPYNUN/WLROdO't//emb_U3V8==b2D7:T3IjF/\3
+N\tlD<&e&)%>mT#_6!E^5TC,a!kCS??n`FV"k=3(]:gMiN<WjSE/(^''T$Ul_+:(a
++;376Jmg4[=t1/A`$/&j!);Sh"gC=?(lj1\KHW<K[tLrBSe\bDE*eMeO(,O0Y+[gc
+fnNq6@N)M-aClA6.0*fn#*;qheNP.$4r&f\fQnWn_&u,b_[u$6(d&qn32Qk=TQhT7
+iOT.,LB6F/(^"3&?Ag.i3*$lO$DKd"KrRCC'dt4*6M[[4peL-3C5Y=l"cPE7&VX"g
+<Y>PY+?U6hJFhD-"KLZ^&-LlAfYBB'K-9L)JKj0u"V;<.*!P;oCF6B=W+a\s:5U<P
+"q>fU0SJ@tAf_2O!+Rhid+E(NaPdK#&VYccOr1XDpjO6aJRX#jL*:&#LG`t*?5<b/
+aD)F0!Hh#5KU)tVb=\!SX;(oTW*0l=El_:u5+r6O_LmdslFqr:i'd^k[V@)O3lmiV
+'*FpQ.e&,_ctXL(+g>u&cU"&-M?Za`.Z)_"@[tNWJb2t[Y]k-6.7<Fb=;*Z&OE_iO
+_=^nC"ek=-.(U+Pi/T$*<%a*cTibD5@0ooR(BeM)_0J2$AX+sp!AIe=9X?uHRm-07
+^:28$$=e`>+b2V52/0!W'*J=98HLu??u$;XkdsJ`L;C*/(cs@0,:G^K?rK2o!UtIR
+52j0\UX)b8pncdi4)3f2#T-mAiA-L&VDUZ>B]iCsGZGY)bc"TZK^^BN'1r:MD3qtf
+S4<T.+a`0U0GB7>/?nHu9F*!Tl5b2UOe^AT4Vl[4_$/7pC`,N)]IFh7+fhrK#5+?k
+'B@_sQR2sS!.G`;5u;YDmrU</)0B_Y/E2I0!/;QN!RPs"L.K3!Qim\i>=1!elVs%_
+>Q,/,XJ&0o)2@[Y>n-*u5Y1aN5t_EIZJdK.&cPgq$f9)Hr/^BTkgH2"JLQ@0jW#-_
+"U]tuqr@s[=OB0^Skr(SUb1N7*!<T&$qVZO8ST^XVLk*@gNYab+QspMcsWgRfJn!Z
+>c3g=_J+hcLMR,^(]krsR88D<"(7Z!0*=[B9Z,t1i1U1'j2=h]:`gfo_#HA.["*]U
++AQnf'*BPJSt?mB"R*?,0;(W<S20D9L5clL0P%d*JZN2eID)$]U'Oc:?3e9i&V?;a
+a!3S^-n/"A"+Y@YJ\X;N9HY=-TN$*d;9r4><To'CE",_o/I"m^fd^Hq=&"Jr+jZ/s
+WaK_/bS")tM/:C)&5=5gEcEam0jZ\^,kN<<P>9+/Q%Dgh#_?HU7OlADWR,<n!OGu6
+9hZ7a&6S#;^b:c,p-CqTEXtl2P9E2rBnCSc$3Ad@#XJ_<4S%VELk;9FW5QRfF=PcJ
+EjB!T(mpjJ1:#A&`<FD7p+2@XRnob#/tdIc`'@4)c;R1dcib"#kbN;3Z6;MJPckiK
+Z@Gr;VGm\3d5lJ!!m':I#3_$k'b]@.b"SE48p$n]i-#L!N+Z*(I.77?C_4Gd,6fD5
+*YQqtM?0G@0Z\6&3l3.X:6F'1VHan?`f*XnUr@-Qi#,+]fN3s1"]-=uq9VApJ!.@I
+/u0Y,SG&an8E,2)-\ZDh(qV&Ub3aib7+\Tl((*?p2CZqr!ROi.$\>NF77:)g"-@a9
+_90o,<6XkT18GH&lm7!$oH#1f9_cj]_?EB!7Df7?$dDgG9eQ)&XLI=jk*k$.0j7:=
+^eHJu+t$?naIF1l;@%g=n,t@;'eX$0#7>HNITFspT)_W[9]=8$emO2s<TL(6EKDDV
+=K%[`>Rj'BrW[n;%"k4#%"Z5nV_F['Jb9CnJbUsDDA'aQ!hQTHGU%hI7H'ZWKS\:P
++#g&VntiY=B3ZQ0#(W3S-??a.%?*\n;cpa\"!X72#uPX4r"l9(B_ar&<<[,pZ*12L
+LecAH+tfsW&mF9(NYrfoY%boXa@+WGRcOb3r6C`hVbH(oc#)f!9EYo1_u[q@W222h
+.XLNqOUG*/B"7-*'4=L0$cbU7_6a:mQ&Wk(1JA01pUk$3$Au*,4N/elT*>gYM#t.Y
+P?8J96K)Gq@F^rhSh`?+(K!mb%5Xu;X\r\S&-855336/P5%c5t_8&6)DWNm1q3Ye*
+:*MKm+h^g@`oDru^,;e%A!7VnCD&BL0_n_$_>n1HMKP+HOmn$"pip5t+p07?`#,tl
+rd55b.k[qN\=p-C;]o%/6mWaC)8[_BQoYBSJF-?i&85J!;@6A2,d3DiHLJ]N63lH4
+\cW4:XjuHYCr!IK&J?FT84HK(#>3%TB^:2?]C]6cBnRHM-s^3f?pJ]t.>"cg5FG*G
+"KZ"u&Yia4Z:QMpEo\!gLLY;Q/TG;/.1RDoUf8GXL;_>]+9OtF:Imk^FUh0uS]_+/
+Br`?[drr98_cjB=nki>aN9;C?gmCbR:QDba=YD+/.FuVHA)NjqiAM6Z(4740AdoOt
+9X"oYfHXNs5?=VTXEbJ0.%Y=J^k6#kF8<:H?3%VO&CW\BeK]BCT]+saZ?-C=i&ecU
+eSl;n36qW$,R@QV`Frmn\JVUc"e]jH[dk\@LhYTjMZh[Tc/rEZB.YI`*6]>#IsgH4
+F=%B+%\NLV\XV[!,CmYtSKl9Y_&s;FQH`P7LJ8Z9;RmtoLE>a7M^6bc+%fq:*UODl
+Sj=*?H8J$c/n@c-Rh.[f@-AXent(#p+f`f1/BG0N-A(EK_,fhhiIZ#%W4KOnTZq/R
+WB);\m$Y"l79f7(4=6^n?'og3p%1=8Lk&XI"f2hkZm^/7oPU*2+ak>bR=efL`eF^m
+!XN1E:d]-[`TTdN?3Hp/+p^`d9feamJkRFX"so?7-?KCm(iNeWHt.g]U_#Y_U-,FG
+8SF:1!X&Vi,W)8)R`0/BAe$'m1g-UmE$U`F-n%Oe?n"Lr":;.Z+?Z6,ed!]*SAM4'
+jm&e>\m>Oc+_-0V/91t`=>i]$1ri@h,c39a0U^jH#VUodi*91k*\cfZ#!bMsL0b&j
+IS"4Q1&sQs_cWPjJgFeaI:A3gafO6L#$iDs=e]<&UXEZThZRMXE^BuZ,HP]HCrjJ$
+6*:2[a;,!BV$MZ",6U=W7&E/#UeD+>/*7D2LaiRY3X%cnl%`_8j5)G`hBM*q$cddb
+Wq9=9%X^fc!m%Ho@R**<5^$V("N;Yh!r+O)-:2*2J1R^VKmY)=<5?V9>:f!h@T6E^
+8i;2Y?DZ:<lR!oG"L`7d;kS#E5^%Noe3`1r1+][4V/GQfpa.1u#ALaSLPQ*aXP]a!
+3i],DA&JT?C3LeNXe9bt-pDZZ@X`ot,GHlO@j!!_%SVNe5,7+]V.<7MC'66o=f/Xj
+U_%T6P1!mVTB@Obj944f7Ri'))rodSWAKEcD?PVF.WPI.-0-7$QH76'W2!TW@LtM1
+E0*>8#,;U<-W!lR-CVh+0YgWli-5Mr0F-WEi1P+cE\bKa[(4<@<oU.KUT.ZgH:29b
+b(X;7dF^T-TJVgg$)1f2@`U7_J0mV6+i^kmngIe?G3VE0Pi`N@,3E0H!!^jCFb36)
+a36DQ4=MM0f7p_cWr+YEYXt^d87VfRif")<<&j&k1*CV"lf+iS(cn`:"Jp,`AcW4!
+N(O3a/'^+`%Ck7bg3cWkd\S9OX%NgFcuNi$-4;.d8h)7uYdU@SE.CC[_OQ0gghm0A
+C$P14#GNBhE[Heb?33f!&,N0.'F"_)]dmCmnlQ(RFpMK/Y="$Ia&I58">sq3,%G"^
+!+Q9[VKDs'2=Z(>M-D9"rWOE0!s=djj#B^V`!")q+jt<lU0p^r<Wa$9R%u3n,V4+j
+A-GBP.75^X/daZd'UBr?C5!F"b;(h"5!$Sf"UbCY6U*;8ZH>QbP%,1hj?NsjQ<!'0
+#0@!NYe[RHBMV&D,,,kL&TUKQhL!FXoEgRA_[e8*8;dRRLM;WN`a2<YH3GER=bFm[
+L\Q"ON\7=K>"q7n`%4t?!(5`]+[de*![eH>^o4:g$S"gTY"3S@F9Z9EA-L[EV6VEO
+E!NZ?Rj1ZY,_RKJHm3-HW3&6TA\LNa6mG1`h5-KBC&YhY@TS5U+QXS@6gmN81c#_+
+0!EJVKK=bk<2Sa9E$Bfai'dSM:'Nt*8gk=iCc9H<-<V!uW+J4Oc%oG1U^$C]+bN0T
+EI9`R<X0a@39QUG!uW(*%_W#_CI5$tUH1d(P!`[oCI`&>KC7h1?>q0_28E&4/0nA.
+`&FL-Z>MWckN"g`MSZQ\#6j$HA.UIa-9NDC.YgV`%[[GW0+C:=#(T!(P=n(!%V*:d
+g0fB/+Ajj#&i#E/5t-0hjAsu.!,^^<4N3C>!^M8^5naXP?:(S8.LK=1P\Waq,0C9(
+jg+"m(dhfC,_HS6<!#M+b*o*DA)_0-,o4SNc36Qf=+_n^#L7^,<&s%T?:6h8`HW__
+Ai8Z#"im.<!,@tFoa$8gI&!R"J4R6oJ2Y7Y\);F,8WZM:b\LZ'3hSea6We(L5X]1L
++k(\.oM@=O,[A3l__F,K/>cprRPO!-[)X.1ASt?.**D41UWA7N8L+K!:*UO$$Hn#f
+?r/)"BMrSh!)pIl!)@_\F>L(!8AkX-+C>I@Jt%::"j>CR[ZWSGn3[A,p#7ksOOTE?
+(=XP<=b&V_f.L.FBVYkQ5m*oM'Tb]CDa5LU,0`eD<@GCi1j1+>>DqWJ,cJu0k"1Fa
+Bqo#k`hKtT[+2!"/'$3E.1-=<E63V_CXp[<A1^A%r^S)YRq.+#`i(2ea=6.CquuaN
+lls9B%`A`34+i3:.#9LONdYcO+VE40J20<@X<A(``oFq'ku'DA<3bPV?FIR3.r7DN
+XujQK.IbhaB?4$T(H=kK95Q)+CZ[,iIL!_n4Nd<h<U001SAHCn#`6-27%m=jL.VrQ
+-AA%E#!?5q\DYSi4J5k@2iope+>/C4aMO<3J8?^Traj$bDJco\OraaC\?cQ4=2^&>
+VEg'=W1g#c6"^O`_kI=0ZGE>#f8p>XK@9rT3fh-SOD1r1%?@,/?7Xr%4lC)M;;=M?
+R+d;]ZQMlkj>U^Z;LsIj]+ZeRWb0Y8XA&?<>38.3j/Pu!iap"98S!o:@tZGp!ga*U
+;[`G,,>:f6?@A^N87Z>"AJ@/_8nqg#6oPj4`G0<`52`/]Bk"`YeCJH6:b0u&.Hj;m
+QEP)^HM^b531sn#_kqCj(j0LAJS<;DK4&rTf[OTC6[9nU83m'FAcn2Y>BCSk[J2_)
+85Dr6/`N'I8T63!iWN0uN5?ntK4\0O=t&Q,Op4%AMXh"*==HLM3<M`-DH\q8Lc31p
+G=n#&$,AW3&IQ^9"opbg&Psn9Zj)EeC-u$+j)EJHMG+;;kGp:'A_1(E\@:iW0,0p8
+XJioHa\r6m&&cmiidsj\c#';?N*%e67#jQCTg[JkD>!`1b[DSb@a7leA)]]=Lf/iE
+jot9IOp..C1(I9V:+Cl+?&k#BAILA(4)</+4,;BEM2&`#W8OY#'?O!(7)j2-7jD.]
+Chk^Lpn2%(at/'4+dE5*8C!@WW%$d`'a$F9Gglnq89r5i"[I)6!,eqW3`k#V"b8pY
+fM2]Oeq=Y7gdP[E,="+t-7YDLeuJd4,A&t^AnZD.9K(snk$CFWVJaM5^aA]e/\*Ft
+MJ0kuNDPcjM'OMm;!m;c"N&.\`:XR5Y]/N(Fef^/$0F'R2OH2r+TpU/5]fk5V[?;Z
+"t>FhM!G+qRdD5M*$Qp[$RSnC,!sS,3,==-B#IX<rt0Q(b6[A`nDZUjla^+Q;rCm_
+Kd+U45m7=@)Mq6>TNP5LgbZ/A=f$^Fb,6M"GToWE3epPS68G8_Xu,6fDka`HH%7ap
+:3jX$,:+LCV'[Bt4&#fn4rOt;PH<`JG>CYPc9`RL@qf!-bZ!hBXDg5F7,Wbf$VT(Z
+:JoP+88?<OQOF_Lf:nKQFGB,pe<XdV<Z&VqA3`1-N[$mc_6N4&Udcro;?m2VRkkbK
+*)J"W\HHU(H4>Z8aSneqW!@2k95HLHbSkgs+u>m2+XIYX#3aU8BXVk@.aT^M=10O>
+VHH^%8gd83`&P3ERU8Am#:()M`"YgdaNrnl"\^=*>OkhZ,XV_rDkgP_"kdNtRTGcW
+#"H1W_Ld!s:.+AUTB"@#i+N@gLWogF9nX9O!k`%&W'b2oA&9uaU+)$r%")PY6j#J!
+a5iG+q2A,fN10);!%pT1Ik1\FCId18?uUoOKQ#q1A&](qKs!H08ANU&cG2hd7J.p>
+bXl_.F$O5Kr>\ST:,c"7-X%QH+qlCP(>=Kc,7jVnm#&(9\=t7A_B^bfp#JHa>+1=2
+2<F-dJ8AfKCm%n>4.4oZKGDT:k[%Q5P'tW=7@*XW#'2BiZ5?ttC2te^*`b`eP&kRF
+&[O07Uel]r;ZLhtEJm9s_^'!p#N0[SB#&W04tZr;"Kd^dLos:cXD-nrKge%Aii4OC
+9J^D9Q3(geSQI+GO<R'KDj%5,Lu:(@3OQO22?P-i!eN0P(,LQ>2+G(#"X"sr@)N,7
+]#Jqq+s$uHC'J@97::4VY%Un"1lpRB#5DI*etQ#QSkK^Fl:QrP52\9Wd+\KO+uk%F
+KXNoQFs85Y"Fg/'".YN@E&m)$/]%^?hDk7@OT;/VE$G,$7&`fb$;;\E72_D0LA!Gm
+D[,A'LP+doJ9&:h+=V3V#:;[nFX;=kC"?a?`<=6d^ihI8H8W>`knNbMm]^g?Z?8Pi
+S^c^'U(%5.\CIH6l!+:.K1aP/VCDhi,NuR^-0hUj7g@taed2%G$-YJ.b#Uh`M)3ih
+U&ZVYMhV;<!2*(;(5`:TZ,lQj3#[[n6fHta?nN0%KjqkPUf&]W$jPcYq"0"o(lAKl
+1&/gh-l5Rripgi(<[eg/7KW[YcsSpU8qqrm.&9uOS;P<BB^!6@/JC[oUDV3g=[*f5
+7UjKl]M($p_F6c\OO.Sm)N7-PZ%/?R.M[dD@UUCL<%8T=.K`P0e6jrD%0kgCYdd:W
+K&.rNd872P/f"cW_a4qDGW-BE#UBH'](pUc$)qCMOPGF@*lH!>J`-<<.MKgV'<tZR
+O=hC!C;W.6jCgHZdtNC958nVrg]^*?q1ODb/Jd6F;VCaH=>/,2+JJ1aNk%%e#R3VH
+-X/he''T9\Yn4Q\LU;t.,8$m,BJLA2FFq>-R\ZX.>36M&JV\1e#XRZhik[q?@MV,-
+aBfB++io$S#U0P%)'DJ[BG?.$;N0>AJLWRVTRgci)MV[^AD[S^-s2T7bh<p#\=k<Y
+)[5G!$l>iCJ4eWLNOW42[UEQ1'"Gb;7%V=NlY7;k@@Cd?\A9:b!JQ'am%9#LP.\<C
+&I_'g1^OhQ'a0'p3pm7S_G^K0+j-gU8YJC;N?s.sJg*K(io1f1@H5iOK?JUV^')OT
+A:c2FWdqNHF!;;2UTL&g#_QQ)C_VRh12O)rLth40XQsB'Ua.Vg<e;H.\6Ti'8rRX$
+b:""t*X8=NY+#UrTP7S/.AEp_6tlp%'>U;<FrZ<:TMWs,Y:*#k0+#gt*J`W"2*n\0
+fQIu4:l;p@/'^+P)k_,<rYl#\K;9<_Xus5)"ei<udOfC3UEHS\JuoeQ/oY/kfjPFk
+djWR"BT.[:Cq,O[$'N:D=2D[OT%4Q+WjaGpOquH=!>&)'7:GD1T@oq-F;d!X$<^'>
+/s(/s#`X(NN<Q#sEYsJR:ghB'Mi^1?#5/ao(C#FUE9@FVC)#Bt5o<Hm\([??)$V_7
+@Y.&[diR[@b`]&\02m3h>$abC*Z9]@KP\<GTf>b)ecE!m)`M1"=f6%/MK[#c%"@`I
+\j9R:*sZ4if0Sh.nncR[0S"ZtUuC/](C..>6COQUKm",`WDI+=Vm0\WR"aK95fY+X
+`!RB^_+]ZPf$X0V>INl"H5?ca_W6S!_&u7rfR[k4(PXH75=ZsW3(iPP+iRlOjrpcO
+X=5`eVT0qRb&/:++o$2]"Td/$h7F<R'S`_Uq^rurn)$/HL5XSjd'6B>.Q@P>Wrf%k
+>0Sd2"Xd_:Js.I($QB.8BlFnPZ5Q"0Z*a`]SAd*i&oj&?G=?E*_7O15Y#,HI.:Be.
+]#$Fecb!KeTQJU:B(1Z0_fZ-un/VThJ6]p`3^1R9'-)'+?:nXl6SI+'"41ii>/<ob
+W8s6HU[SX_JMRN2jJ+/+&joM&FWk>9"IK`k7h*m%4+tio+&d?L'b"tk%`GTQ;fG3(
+Ji,OGKVT=_EXr2MITFJmW$=b#kt"Dj0.681Jm`[28eGnD0^Kc@:fd5uOl&S-llcJh
+Je&BcIg<dB_nOb?7fb:t#7'1nUjuef6%ZNK"a$p^UE_86-nn+YCu%L"N4i+W<bVQ@
+&XbE8UQlFSN*s1nJq.<$(0DpeLkN^=?t'WW_kSd@l0F\6/4.I8#X=8!Y;>tm%1YL\
+LLeUA-GWXbaT*[mJG^OB\&r@rKV9P`9T>DP$PC4]P#t9GJ!$#WXW>Or6tRFZJhsc(
+90%JLkNJkT,&ZW,*+]8R0U<h;!XjPeB0^:YKG!3%%RI.e.AtZ7"1\Xq$us=&kqNaL
+'f+&8i'IXLTH5#UE3Wa=,6T-Z%54M74G!%4"eajOR1kga$8\L^b4r(_1.^2Ynt@Dl
+ke)Lgr!e4?9Pa^Q&Yt'Mp<-XH-g2D[!rtMkJK(AZ/PM$6_]4>*do.`07#oM'=:P@o
+(RG<h)lrTlQ;KZ)1olpq)^]M564c%.!9lL$"6eSR&Kj!icleL%L_!4q.Q-A,m$,FX
+X=KEd##l"^ObAgA:aqMuB,q8C_Y+C1g95B:iCP\&L2G3rO=tM2BS,5S#i.jm/88Ah
+Jp?qikf>4t5iJ:L&6=DrLajP6=NCO63iJ,X15/E<3@2Tr:X0W7G_pMYcU[+/_<d7[
+`C.BRA3'o3@U(JT;&BBRr*5NgEs:ibdN?7s%>[=?IckA^`!RVflJa:&bb5T<G7K)T
+NSXg]d4WZ&6LES[<!OQ"Y8r^@FP<*),QOJLVU.j>Pf%2r5gUR8LTUtM^cdHinA-l7
+:h/hd3=':D*Q\;/%Mq.JK.`EA&_R+bMs9a[WsF9-g[9R5d]`ptB)S,*GR^$S_HsP,
+)1j_&$?:5%1*q)AcN>>D@MsCn-&)#aHo+O5\0c)D0kRq*kp<"g$jG&NcEY"hbMXUN
+G3V)eQ&p5#_B:h%@(h9#o4eT'&_V^^5hR6EIdftW>:eo5aLt8F:<Rl24GRU>UB6<V
+S)[CuA7bsqoUK70"p7CP]nS@/?IfRJ`[N$@(D.s@n4\+\51(40';o<sj)?%k_!iFu
+n9b]%S:+K,f1MbR'VRh^6O3\m+I+ekcO=eiBS>=BJcaS.$F)L4W-%u!'FN[EiAE5Q
+PpEA@KN@3QIopR\@KQ[C=#E:`UF[uq-$'Vf9QB]qA;<+LJ8gkfGm+CmV>Ut"4UgcS
+r`;cI*PY^DEP^9j,$BKd13F?@pCKXr5lAG#!-/R#BIAK:&FLJmnENfkq)$.I*,92u
+J5jA_-HCD@-ALML8b'Cs`(1UF2]c5Ib'F/_JM!TC^jaGu,t>fq'PA,i$P!_,0F2jV
++EL_;8>/s]^m#Hp6r(9Y0b4Nn&%O:@I#hGU$rk$\&VAJ<jqa2u##S8jWad+Q>+R65
+keJ!Uk4Z_fP-A:U)#`!KG!_[6PjN^R=Ds30T#!*%"MfVIQP/M\8V9>oamA&\0MJ_<
+5uCWsr.H:]-s5V^,Z2hAs%'qVN5;cB#Cumue`iNJqj8r<+L'CL!/M3g#<20)GFl3!
+Ht`UX,6Z<rY0Y'N=IorD+WuX\VOn*5$>Vtm`!M8O7>@cKBuN3YQ"GU<=U%Lf'nG$I
+MFf],.4h'XSH6=X'U]jKfslU3Kq#oR'A@=bcjpis('2V<Jb[fHqe7"3^*[S^2<b0n
+dm5X+irO0C'`b$>.mC5rm>8Gl!M\feJW?;Ee:@($$puc]0Un6j%LYOnM.me78B@Jj
+]<PJuQ=;3BR?S!j&@K$](;RO&.`%6P#H_clR6ll?OT,u%&\F/IJWLnRfGO]<&qSs^
+4g;^=@'Q+C*W_WLN9D:REXAu^]U\h]#k3Q\E/]Sk<e8U<Sj:AW_IsAq]aRaM'cA;'
+T_">OY*,ei(*fRgckAYn-DDG8)2XRhM_'ZU_Q)PeO85U^#bI%.XcL75!>#fn(_4Ar
+:r'>YS&7LBcliG3kbk2SJOBaPbX;k1)?J&;!U(JcR$A[02kH\a&"jLDS+-i:i2db8
+LnG67(n$HU70oRR&ni't1Ad(];i.R+$Yr2=+\)PE]pUlcJQ!!g1Rj:836*b3(;LH=
+>(;OBYX+Z]559d=^lSR>%h#,7$CHLO](Z^aFq!pV_S?c(3=(/_VOo7ZT/`2==<2t&
+oSL\uYi-mc\[`W?r2;<Q*hfQa+YAY?Y:d_7Le.r60ZT)jSVh*LJT9`Vr0%Mq7[e"J
+%!\0Nfb"6Q!0Ih_V2,qh)"%^o)ib&mR'A"L12*J^fc%XBJ[@EDGe4Ns*s%0;\!dgH
+_!$?b+I7lTM1hiI!2M-dZ+DPT%`nDQl!FjNQ`fPoJGDlhY`+,>N\)5D(gr#T$.6;n
+SL'H$&*bg+a^H&XO=hZTM2POmZ""u^*=f[8#a);&WPfM[I`0G!.Z*bRGhE,]M\Y`S
+8^N#[._^K*E5if.arh]9l9rFD\d8q%(*MEO+S_B+-l&O-&,`9&A"/;o,s]!BRc2j_
+#lapiieg'^$`FFJ#p?:1%Ob_B*Op_Z+QEg-JcW[3$2FB.d%l4sn4ri^&o/5U_PI\)
+)2antU#bR8&H</Y;%LGc2[CE4fmOc;hAB[;$cu=3#dtXTW.DfWR0^9se=Slsn':K*
+O"g[*Go@@4D%Z9X)u8b4fom1bKaN[t)SF2n0FN^,&=^OZRV9HuBXXqGi>>_^8!"BK
+![f+):P$;(!TRL;4S;IlJ&sca'aPbSdJ9<c^T8]Z'eoUpOV!'dYmQ#a0B*_'YiuKU
+N4o;bMo6C6!Ak8$Q:p`LTLbH/FIBl<O0uKXNcEC$8Qcn;mf8H2P0!D;i7"J8ZOgO;
+WX.XM0G#"0i!?!s6>4u/GSC2MPT/:H'Zg=^Rct6r++`JSJKhp]Ok6l('pCV>82q7k
+!#hTRm?/`WM95$=gBn]eSX?Y9QIt:45b.p`&.=VR:sch<Bj&5uK,ESP]"LhPq"h?'
+[C\gEJQNmGeISXK\Y:gC$a@ajLm.q&;[n)PJ]o=-^lXJA&V7i^JcHa@dDUUWPmX%f
+'l^FbfsrmEqn#4j&pXM>JP;I[JI:tL`#>chTu@epis8M_Yu&%N\D)rtDh1^lRfkX"
+r4/\EPR?*2(%E,&6,&F"10,"IdO?*_+;u56Si`;[1i/roK_LDWc,Wp.d>Os++;^YS
+JehjrMo$\>,)@no@?qNuO5_>*$'Ki^K8:3)6":]Ai9:m4R3>"2]gMsR(_-q[fcWj:
+XoJrlOi%2#-BO'\YfRq1"OM_+&@!XO&+C%HZCiQ*b^j<#,][Gs$6R[Ri#3jH&+I75
+RVPkf*W^d$.S63N\STr!.1Ng*%Ig",\Ho'k.1;6LR'NBZ0cO#j@uV&4ZCurtd>L0g
+o+;><MQnCaW37Ce91`nXJN4LG8JWT`LK3;aSLBQIp^UOc(TrnkSK5h`MB)`/Eu?+s
+!FQG;>'`@\(d<oF\ElScqt1LLOYj>QO,+a6H8gmf&R>!;#n+;DCjA!"it2pd.@k(o
+5rP1IWKbK!,q6H^(tfcgYnbKpPaJf2God>TCC.+QXs)k!^#]7ZBLK'D_b/`9AF,0e
+ZntVY)4bLnOHcGr>)JGS^@Wj3nAu$ji4&QQMpV&Ji4KH-o:p7;JG?!mK<:o)&(A>o
+P1UA-3"`.m*Y1%i]P3-Oi>M_h-Seo:Qg9+2T_P_O@M*_4)Sj9"RCki/huQXm[\<)n
+;/rb%Y5tS`-M,f>YT5`[++`,Z)ro&)E"0/'<\TX1%GV2RJk.\GSqs02%q3&*ptC]/
+N/PTCfd/^$ONEYsQ6!K_M\r'1YS5eh]9@#;Q=KD?_1Ie`\><pkO2<[]Ga4>_KMcKr
+;tq9<O:nX.M'^&GJP.a5#S!8eBg`6u/qEkN&G<@aEfXA(WuJ&Jo*%(G]p0<oYH\Y2
+fe+BBgZ">RLuKTdYpP8t%4VXEUoVt]GhRshe/JGY3ujF%YtTs)m0`)!&$R(=R^s<9
+?G!NS+e%U%&?l0h)\a6[R#rPC&.]%3dTH!p!N?<^_4Ugr$)kqMS%u#cE.m=lSrU>%
+\`h.cfFH)m;-CDrTOgm8?)81mj+/lp^p>crjLuL"!m.Bl%4(Cmaje$.4$(cI+Z"A+
+WRe->)-0sk3g^bE3"KP@\Yb7hO2)f19kmD24ue[:55?]F(a-DIkF,W(VMMhuFq<XP
+mgh91Mi)(<#SM[g&":.()o6.>$b6uc\Xduu&[[_+CUn/I!lI$^^B:SGE1J#[Esmd9
+bF:KLq-9aUXqi.eOc"XK$A"+/$YImh7o6'C7C55ZT93O=+DhLB0G4Db*J&d--SW0p
+YsbpV30hi'R5ou%Og#Z.N>>uIM"pWD'QgTVl""KU^&_iX),W_g&Sqgc>A66Z8Q,sf
+f=afEPB9h;3F&mMN!hYF&U&ggJKC3;l(]_#QGbSBBH%h:XZo_J$mo9eSd?,<2m?G&
+_bj[01$sNM7Y)<_(oRupOF`GO@0pV4M!tm/:+W8nHb@"i/nU7-.(Q;#V9rb2mF0u7
+30B`l`;qR]N>pe`UfIL2U&gFl&`qXaOVjJ-\IOl#X2/TPn`3rFca^,If^Td>i/E4V
+GtBGsQ1[A@@3q@5npo<>7;MBK0he.d"q-P=$B$\J\OTHB%qKC4$d":1p"M%3(?c>^
+QsJH`^'-d+rKH1uN[][XX475)&AM$T!9@`>q:_Fql_:Vg$35g>T\>2e&qK<+,5Q&*
+ks=NQ?P3k=!EG`m![3eL)mj=OJS5NT1$aB*IZ(X\O'!$FZ)UB`D2PT%C%9f@A4lq7
+$t+W`$RnpcE"=2CIZNH"_`:te0G!EBBG+jJ%&"5pV!ptN&-220!8P-JW"kf[^DcJ!
+RVBLJ>PoecIK9]_SXX4?fq9BK@LtP,MX\6/(_%qp&@&_d`WIG&>[V)[$U?6s!=C2P
+R/MR\!/MekUXYHWh`-P+eM1_Q^Yk0(#u`uRT[9I=N?9.S#"FK@(-<TQSt'kQI][#V
+/TUJa]feFoaVKH3k)&E<_"`K8MZC"h:]V9.)G0U\'ke'i.M!pC'$d<Rjm==.SmsOi
+R[0csKCq<g/DIm#O.b0t(&WW$96YArWWMT$aO,PKHK9!JO#[lnTFa05oe'h>?U!iK
+U^JL]X;/lE)n[uA#4@>XZjU)i?.)u"_cAI5rH9"he$<*&$PL&"RXq(qOnJ<s(73s7
+9o1jHJB/Ic#SuWIgRGsJZQg7mZlTXLM$W^h_`ihhfFe2Z&2A6Q8Z(;MLl\fHoD#Kj
+7:^p5#GW,>jsCoYJ@S0oju'D[L&iWB$W;J7Fh%h3GhU82X#X6]5HsLK!Z?Q6n:GKn
+OL,C/%,(*36NIr'O<6BZ'L8mphLDao!98UaZ'lBq\9WDQ6b"4/j+.aNH8tmk#+@8[
+a6YQ)`JNiZ$*8,6X_u2jU2oTi5eA&NSK#=r!>l72mdLLIn=(o+]UWFR9kK8JpIG8o
+P$orI$'!"-.Nm&.F(A<k5SAuCUaEP)V24tLm_8>lrCCDpVcXKBTRjEo\Kf\i!?_hs
+DM[`Vl2:_;P1dJ$UXXhp%dqWs`E\,t`cqm%2h;AWb(0Nl7T:ElIdQ($Gfl'[$hLUD
+'aOfT>UU>F"p1J`Hp/_bLID8qJE1Z.'F.$YEPT@n2AqF+U-T'07O8QP7UpGZluk9#
+#fS"XJ=o:U&I:df+\7ho-5;Al6?+EP==Y38"[]cpJ3kFk#t1L20Si=O'@T?X_$Gc2
++qt;O!_E5A7NN1t`8X&WJ3G$UL*Qgt#d?iHSkFb]HOtj#%(uuPUHtiK>lkiOL#XW7
+\6":tMag&7.%E;E&VbtUEKKC+3>I>P@pu%WAUb@#k/&Y)E+1dH%AdO,n>L.Y'ifkZ
+HC14!,nu8)372%`@P/H(FLH`Plo?/RM+*Z63/fd@&Vl%p_'P^9,he','-Ph;YSdt-
+liIc4HqGEcchuD)=E\P.)X,1-c5=G/0\m.k+fJ]]L-^W!&d9c3:(t2>W,i0Ri6Z@m
+#(a!R(560@d&dF:3+s7cNF6E7KAf@;)[2o,0G"?f+Ad_Pm3k48"eg02!X9fX:_PHR
+HD%46@5(LdKOG]o%mt2#^_=Uo0K9UG!>&-<+^lcQ%7NOWj9gQ4O?OD4Bl&M="5r0N
+&;+Bs30?RF#[eQ1JRD^q5=&sZ)'n0sBGlLQPZYPNJD`U(##,A@(Fq3**ZBbVJ4pNR
+8rtS;L96hb*!S]22#i;]?q1sR%(K'UVb$S`(kk8(()R0(TNW&3Os9CL2j5(A"['U\
+;AM2e0JX21@3aYV"2N(3%Q\"`Oq7\G;jN.A!G#1="JEnS'e0dl$5nOo+ATeniHd0s
+_CmTF'a71RL(T,JJ8Z'SWk`'_?8KZ5W7.dI3YO>Ye/:^X_"@143_9/W';<Oh5_N+q
+J63Hh!J"Vk_UI.9BdVd?*:g34"&KH)l:"&+XbkiAj$c5[4:[#4$8"Mq5t$IkK`Q($
+?;'57/.eZ:crM$=JS8JK0W5OU'!s@+f25/N(gn9f)?*L2L&mZ\)MS7o6k$[MlAlIl
+TsT[idVU`jR0?Oa;A@7S<bVU=a>=0o;i,NY&^f7lPS6/>%WsFY8oo*BTe[`aKdu$K
+Z4T8l!)++p@4!_DVTV4]YY%N$CIJG']lLs)@9?A."mQpjLV$/Ve.SK!ctjL#T\si(
+L%+;B(TcR?VM'X(88]?$@E<7!lN,(E(PGFjn??j1>%*hQ=Cur@W.#D\0<1uaVN>bW
+]-C[lRnu?a5q)oY'4iVs2MOC)kV<diIhcE)TqL^6[4fmo?5J<hAnDhA`?>'\2t@?m
+RcOYU?kP[h<".V-E$R"u<k4GG8&4CX"(7\""%"7C?4\Li5e%T@O@H0>-n-STQ%g!,
+(.l?(/T$$Nm(UrmR?"SC8*^2CS<BTRM.e"em(pXY174C@0mc?$R-:6PdeSo+%0I"9
+%g'O]mm4`AImBM>.YQT'=F_h).OfCi''KXr3&Cl#AZLCUS6s+4XTaQ[%PMD3%0;<T
+I*V9uU9kDae"PPFj;InGG@h=`d18_.Te2QDjP#^3H7b(%:+QHq#tpt!-(ns(RY%"C
+$_kE?Vd,,u<L?>71.Ec_`Glg+$4*(&6Xg%o)AH0AEE!2k9>t0tKB;sE_8F#A$7HMf
+G9BuqTJZpm0HGdu?j]R-0`suYWIiK%#hM$\"lQo2_oAR/h5S>B/Y&t&BhhDu0p)Sd
+at#)`:lJ!)81(8Te01JSiX1m8L(K=e!jnW>?9)d&o/m[Ci)^j`R0A+3$&>\qD)%[A
+O[?jgA/9-!%p/!P#=/&'".5qp<e)ItXDmHVa>OOLU*Bf6bS[%+Y,Trf/k8h[\H3K3
+$c0V=:<+'$/"fdV('4eZ07=R(Ld46,+WbKW$kS#bClj2<Nrpgt*tn7jEK/EVD,20B
+0DVOS_<\n1@'S6/eE3RS.Z>n=oRmq]N"(?sRRVgd*/!sb7)>ps-KtpK.St3sh3^6_
+k`GiXf,BTJ#m46uLk;!L2@h7B"Ds)OW@<G7#udKD"HJ&#=_!&&<B3kZ@&:IJ6>/\N
+nWTs6!hHnZp8D!->q*R*%[r"-$A#]MUk%5;P_D^=MED"G-OlMInqO@Y8O%i)S/7KQ
+D@bS+<<eEGOoaK;"]UU5#*U;K*huk]9gaCY-jBSfJclI4Mu&CJbf=$hic@ep7g:81
+'=%,QHr4Q-"Og(.^*:I7!;Tc/E/i\UdWF0b$bIqiM*NeMo`5*1Ps<4nhU#(uS&s>P
+RcGXd+cB66J_2[[!)t#ZF$cU[;G*o6nCIchF:U[M+[gk=('0`.$%ZtO32KFe)#S(`
+=,F&H^s!`!`H67EOWc%T4K9*>^@'+bMFE2GYEAU-:^j9<4\2tWemoG#9=].CUt"sd
+i*`BIn2s0C$>EA]C/>S>?VSfE_%Pc^%'E\f"/'PB+7nc+<RQm[i09H.TRQ2=^ah)D
+V'5sD!ip'6k)6&1(]q)rmrXO--uXtA)M/H*08M&(+IW.p_DFne0tKm_L)q&E1mubm
+3<gV"\#&E-G"HCA9d"No.9o5d$0lA?n@DgV=BJ>@nH:@mQl4=;H43qY4pU9[N$tu_
+C_0;A,%16"ed7^o$RMGL[c@qPTO.68,7hiqnBp"_5bcCiG9GhNY"`kEDNgL_-4lRQ
+/nrg&cDnP[AXJ79A7egZRCeDHI%$=^1^b,Y&l%)1(V<XgL#E"d[g*(B!]#Mj='.UC
+RkPBUi.>Vja>Y`;`E5gLGXa+0N!6d55_;N$_Z:*'2l8TPVdp[ff+\>laE\_goiB<D
+nu%M1@K!3Z!e:R)j]npeF$DEn#%b"bRh93m(q].n$<eif!3dDpY[e-7(>mm-^n`22
+7n4q@!l!5jbY4+F>PSuQ##s1t.Fgc/ct=CGHd!7XKPk>9q&YjG5E)Ji9+(dJ-u$KL
+N@1/:Aq=>GQHc"c!P:Nk>hCB$g:ZDVK'nOq67A3O5B!Q8X^r;$Udp2n[2U63VTJMq
+BD1BnUF6GE@2Xe'aXZNVV_S[sl>ZqLoH45Y7YL0E044E[=9ECDoXKu.G_!U#nYbpd
+;plFVUi[G&0PV*!@o`eY4qLKM^2!2QQ!C;G'*9O>%EpR_5CeFfJqK@n$<S4`A+g*,
+8-U;b"_)QUiab\nJ-01="i;V2j8s(0,V"IL^]MfoM/8-'e0MmVG+qM4J9mliJ-KU,
+-ALa2__g0OH7>]+#"%6lBNbV%!\m)RJ4/l1a>='sp][=*MP+;5Jj;p>)?kb>"D4_a
+#P;!"@KroO0S0]_Joh.R0E[st"3bKa,mH*a%!KV8.DiA>VqdO>6pef`Rc?_16]BZO
+E/OiK-XtG3:S\5gHN50RY"!m-b]GT_3bsB5#@N(eMNe7^gtlF*ii6B7X!f77XA8p*
+#9\-tbq.W/W=/0J-c-.4Ca)_lb%KhY0u@<_8Z!kI@!s.]>c2C]W_bZaKIl<)04M^K
++BC5a?7856J?WM"A^1E'S023#^;LXNi(!VeFpEPBj:)=&-Dl[9>^M=i"bTn^J:,=*
+?j-X9"m[_.5[4Mo*f][/.#$Y=7J_'RVGLq5Zi\U"kZUboRT/;UF(nSX9>k)9IPGXm
+DT:%195%*S,i`CEM2IBGLg!8C`nk/aNe7g.U:_U8BEb/UM^+sHOW)-13WhWp#=WZu
+_fd;Wp<lg0#!dLDJ2RO_!4)b]56GX(bRfJ)Y%Q(tkMTtXK\D;kAhr]a/VY=Qi'co?
+KPcA0C5/=mKD[r/`]tb0CB-a)@sVeJAkpTW5Va0TU@]d?3$mn<#3@JWYa#RbY$qGB
+.j`IhJiklc3uD@7Fl79FL!3N#"t(VW37)iq8T[4J5QtY0/*')_a@s!,39F%HVW/_k
+DhQ1WlD&s,2#ofB-5]"cH3VDTkqBmX"YBjl:`r2#>bo"8!&OcX.i&+uVf?*ALL_`G
+WZe$)WTE]/j\TU0JEQ*-;(p3Ym"ccPi.k]FlnCU-,.%Phr;YtceKf7f"Vhp\Ad0A;
+"fHlhk0e`hHQ&o_:8/)1m1u*dXsOQm+_#1^i(@H(=DeaHYq@S%Y:@sGm3W.B8OH='
+Nl[UL/i\OX,L[8.VpYYLi'WWgMrkjt,R/t$$:#pf"6]S77g`ZK2^?S54JY1TA@sCF
+'diuLdSB54UE&D_:7jmGedFZh<#@%JY\f5n$O$`/Y/X_aegY*+.AKLh`Yp'j[Z.Np
+FD7sT-X(,;dW,t>0k^jLjRuYGYi,fQ;oX,hJ8Y-RNkD8Z@>i8mKYGHi5"/j;2dfeo
+_G\:uM?ZIB7RD]iJs^Ak-N&HN@P&#0.qV5EI4e#._K.gD%6XH<3<nfr^=&Z$M'ud>
+_%[P.]VrR=m`%TB+LgH;IR#;H`CiC.>UtOI7AL>8J3H#'\;lWGJ5Kcj_g4P'\nreH
+:Mjj-:P^;eN!(MD$"ZsM,(Ke`/O=nnY@CfllB5f>"p<mXMBs/`U>T#ULr_sUa8f3J
+,o-VK)CaZ`5fe1>.X%_!"==4n8A[DB`S*#@B`F38-.L4Qjif?8Z9]bI/L%Q3J2#%,
+Lef\61a#2U&(9bFODO&e2[Pit5^%:i!&4$6F:1?8UJN5[63e!$Ar*Z<$S7ahOuK1I
+2ln?pA+_E%kVQ0=e`Y@;j%;Au/n0P<F0!B+FBet4^'<rN2PrG:";40h:j0^e-:hMs
+n,,gmjt.]P6?07bn'8S)K0HQp+;>Yo#2";o(<'['q7o1.X2m!WBUrN`"<]<E5["DC
+Fp4dmgW>E-K"`pNi$^i]:5-8S$*Gu.+C7lr:*;YBU;:>,Rg<^X-k.1"BX6uW*lnF!
+It0/#K`]a05_"J+-U;#G">D9]c3)-?#)2h*i,&H\@4N[p,7bn>KYH6Lg-5]Y#=)\u
+Ea4,kS116j/CNZ:CfE`O49a/::a0pYDT6im&k6EqBERPj#R%l\nf_\f];KHu8,6l"
+/0`)g-mJs$k,0ii.&dBK7A>N%Up_H?gc%W#/T;I,dZ1(K#ak/QFDQ7J#(BVT?FSj!
+01F/\[%D<Q5BFdX1&s4\`?%foGR&bLYE/<U!-/9q(-j6*J>7opi+<+uLi)GBKq^DI
+_UMH$QrhKS9a!B0BrK0%nt/5S5Dffg-b(_%pCAHO=pFVH7mRSN85*O7"9LL,OE^un
+(aS]X:h@)(MrQ<V=tPDI#Cq?o9il8:c:87-JEH%u!_ruBSku(@"f9-A"TS_A/hlLj
+]`d7=`rCe>c9eBF5UCq4##\rbbYsENKE,!gNhFHb-ooM*Be$!8"Jg&>8nUZ(-ZHS8
+UXi#04p&g"F")FUbFFs>*qs5dlGF#\_N\=mr!)PnL#>Aq7,1Qd9KLAoBblHbB7=U_
+%(u^Y<38IiWF@!Gi(I^S-4!d/EtT`/oPVP>Vdb)X6B6!EF=11X/(drP!uaG!G"dQC
+8Aj"0k^O>#&h6DiI,p`D.-NH0FR<ITC4l0DbKC0,aRu>=-Y.`nM0/R/7fJ#=1aE-X
+fBRH/kl]jgMPQng@j)$;ekZdq@A8e7`>4+06;Ea(.jDPT.u7'50#Ik[6AS)^V/dsE
+>2SACSDZf7jJ<1blr51%8d#Poa6I(g>'J,*>YmhKJ40TVdg*d5!4#C&J9+<??8?=8
+a;)/lU@]^@"uWZ?#,7IgK\\Xu8u2Ug?#7hTif74cBQ9ro;8Vr-@al`T5U4;85U7$e
+AK4&@e2hOYkY/Q:_AHbbjAr#D6=bsc!mCaZ$E:*'(GDR[$>Y4T+IMYC25<Db@_BG#
+aA+:-2^!6$q/cjACbb0=1kKO!j9.8`et\H*2JqA=[+7JB80alE)R^JZA4!X3&5g:Y
+RH%&k`"%^O8-;2M,UUr4_R,W'TSJ9hDBu="%HBZcFun]]-KL-#ZK,`<grKPO5=i,#
+^ihMNQm?,`<<E\]UKf#KN!&/mF!F#17$s]!j#8IBR"/9@okaQdN$D<!V$,RKB&7]%
+]`of.IN$d#A.Eu<-@^tp]-N%uWMibtDQ>%>/VK@;PX[*RIX`m9@>.$/6?Zp*7KUO0
+32i]1Ka)To\ZA+oC$9e,e:e.S$FZ5^#Cp1a+?D;G=>0B8"TU(U+A?Q96m<as"QEHS
+K:N2m=[(AP2LB[&BY5J-I5^D!04HN9@M3I/H]b$*-R'VGa$<%'PW:+3.:ussk7C>K
+Sp+m40_&*k7">A)-Z3<3o0@?U^iiRG^/6*`:.$$>=86OK$9B:h"[I&;0L,^_2L"L+
+K2ejBV]HtV4N1]G"aY5EjCB\C[-Ve::K5UBKD%P#<Wrk=@t6+oVq`PrXO2cSPN&Ti
+6]IMNqC,liG2fMoX]A^p)Jt*0l*VunK-iXV<hM.MX!s'CZPIE(\Hlh7\)MWm-$f^J
+!MBF,1?p^aq?XgPPXKP25=^1AKj4dl4=Z2ccUjQbD9#\1i6m=$:^"jCKTrhO@b^8o
+MTAK+U?5EI_"m03YX4jNL@,.SKYAeigh%I"L!ChA81hVDWULDpQ6gn\68SksgrNYo
+_u+]d/0op9#7a-,QbikF9UP,=R77SdUUW''s3\W!%mX0WQV\jejIqUR.YA69-jY'l
+D`lT;2ehne#SnQD#/Xob4!Ngd,BQ"/-7R,%3oZAt`J?-Xeg&$;KZ=#*gH\WbX>OQ:
+JnBBbjP^I7+JshIRYXEYV@"LiJ<5GC?\kX)EEHcuc_9AW,sZ9"E<8PK)[rN)_J[A"
+Vk4\,4<WcGOi),hjO0r:DT=aG<$R>O8B=f+P".";AmeXA!^]Rn.[#KXpZ1NaioIML
+=/7(X#3T)F&2#db#+Gs8]f%u]WGHaq8d8,h]VN!27s\Jk:acCN2aU6Yc#tPo:3WPW
+>HPV_Vu6t?K+l8'0ZMCUaEU!<&oS9(e162PBdT._HuK/FAqY866C:fCM.9/n0r;Hh
+9B)p<-E3Xjo>4>e7lP64$I4P'`<%,BM55jG`.L=*#QS%WJ9)")9cG)d(F^b=.?XqW
+$:ZHM3%HX;-IO-5#Y&m2cA1tt#%/RM=MeVf-1J9+$?]7WBIC_O_,B>A7=:Y8CC`lI
+P(JE2Xl,n]@[JUi+[Aj.i)6b%#:iQPo!-&97X?c/p,aIQU0rEU0<s4`m)T>!S-(BL
+5\_DD@IWW22AQP:K40;G==b/F`^9cK86dSWMadd<P\=e`(CC=T;-[@4/X$JDJoOaZ
+)($,W"TiZ,A5"(u$\b=[8A&"Y'Z`Y9;"0Q9+:nds,&%Ua<%=KYK]60KN%u:^#6\J/
+W2*TY)iGn-8C4kI-5I#E6G\JbA2bA5KQBujW*hG(O9afRW+^3/M2d8MB_Zs7,nPl$
+_i`L-GW?Fn`FDc\aAX/sNU;?A0YC7n)8eo'6#aJ=*#-];'u="R==k0m`8`#6^f:ip
+MWVbF(j&iQ(CPl4iF'7@0G=d]U&c[(6mIp#V,O&r3*W?t$A@C=n:3JA%LMi=6)`RS
+&K)"s4?:VZ=>Uq'7,hrX>J;[/O%5t]^h?8!(PVr]C`J32(f1fsE%"6l#7nUh)@&Q9
+65;ZO+rV='aG=)dU#B*aS;'>.?l:o^(fV?*TeJ;7UqrQt'S\3,=;@S_U6H9>6#^ES
+K`P"BQp:!71?9j7'41I3iFl+""^qC9&VVZcMWY'OlbFGD/Kerk#&eHiQ3HO2C`S9b
+e!:W!W^'f/0gXH2&-QF_C`1EI\7h[k/lFt=LB71!*X8<_7l:NBW(R^j!I.@n`Y8hm
+&-^;i?QUQ9?rZEG@8KZk+t8%M'r%BWaOGqFLgl)rJP]/\"sEb#('J%qW7WA8.o)rE
+WQL[$];dH-(X>QZClLRE'#=5GYBY5mKcq+O'8,VGa;N6r(bi\OJY\GCVSNn8(c"Db
+n/MWe\8iVon`X?ua"BVf("Cb`();R>W[&;__)Q%o]qI\tj>*F",c6;FmJ>eD:g8[5
+[#ko"7+L6=6D/ug9RQuA:;]iZ"JGN4%g,)\5SHXRX0*=p_4oG_L$VLa*'B%U;*:aO
+)Zh(8_6?68LFE>N(kj,d%[nT`aD`8WPP$4%LQ]M>)TI##KTdt[?/-6N+L6'6V3@!I
+&)na\kS'gNF&.[,!K_:/4i))I9EXZQ9G/c=:gTB?;8$G:<Zq!A&d*[\Wg#0\!lu:7
+@;ULe"eiqT)X$='<i6*UjCb7o(/Qt$#<YFK^BQ=3559ds88oOR_>&C!"fW&Haijc2
+jqd@-UFWR'/c<6o"k3NG(rXa>BGoLn]O0"g!BbDS"KD<?hKS]nY>Qp&0K,-t+TbTn
+";S;&LKT0^;<k+<pIV9;HuF]m,#IK-J>1;l':&f0l^ZU_JcL*=L1#g**25,j%9>dH
+3N9Y*!`3bF$s5RrM)Z7nji@j-ikd8NYdGP3,c$A5!_,V8%\N5mX?e;>C?6/X+lYb#
+'d@^9Y0@`dEo78LCNE)0^sdkm<)Qts#6[GgOFa&mklINU#0a`e0G?kB'_sF6Lqo(A
+a6X69g3j4a`")n_*(8*j>C*If+/[D&&&H=@"G"-)TAqtY:D3j_J>!Q,OqnGT!=Da/
+qDT!/6j`r$.:-Dm\2M]7[oG+,;(084.Io0IJN5hn+ES4t:ddjJ):p_kT\';Z?<i$V
+7UelDo<X#kH]sUJ<.qoqTnj1eJGZGRED.GUn3@1Ddo?U.?kf0R0F?!+0nCJ:+KU82
+l(Q<%?At\f&n=I7S\h4iO9?=H2Su=&-lW:9X;QVo6=i\s4\L['(_l#Y:5O9Z1$:A*
+^M.(HS<,""!3%/oPb.h>(`ibZ=;)bIb1fQmaCPi-0.<K2SQ0n]",.>#"$h/B;t)CB
+5\qG_q3XT:3#?*n+;^]dFQuXH^'<N[/55PL$!CXcRca7KV1^n/6-(l7e6K@?E(C18
+q7Qu_<1,lRHCWE8Ubemm<!'q%4:3SNO":"TPh%%VajJ04i-5nUislCZ#WO-g\N(n0
+d(5Wl/mBHo&=hE-[m?Pk#L^=:T]?#c&`>,eaV>[SEpaH:W$)?qR'Zqq>-NscVFRf.
+A2FtTK#+`9D)%U$Otr(9B"X3NUj24#12qROlN''N3;B#-\t0V`3cE$775&i(a?_3o
+"0t<-K7I2:P9P'CN<L.GY]LA+Tk0"U`@*E"(dS1SDfG;!c[tcN#Y>RZ0jt2,"<_Xl
+!=1@a5ktuoA6o]SMXCY)JFT=fgdaZPDLb"%)d=$C@=YnZ-OCKG.E,0kNiO]7J=W>F
++A`CWPN""+E`ftQZOMIcFLL+rH%HS`-I>Xo9L.Q)h;TQWf2=Xd7/\(BQ=pTdj8#D,
+MRkH.A;EN\70?qB\:VM:&:s=9#QXF>!f-DZ'%=KnC3<F\K]K/_!om$`i=LVFKEgW_
+*!Ag\4JHC\Vi#186U`ilh,7[-M^hUSO"_=M@ZUp_+Yg/+n>+M]Jd4Q..u7TMNe<Ee
+Gh#`R,%[ku6BZ@XS*:@dR#PMk7F^=5(c/qBL^0IQ<Xo0B3s\+D+$pND%ftp1AF$nU
+(/p24Q:!l\Oi^VH_D2P'O<?X,'bRDhb^[]j3ALnL;\dAi8(Qt)"EEc?_p_Wjgn!s<
+e_oJ>J4Kkop`ku1M0Z8(3br%:hCT/AL*RG]&4"CB2rMj@VuT!ccRQq7BeU&glY[0J
+n3%&&Zl&pA@L[$WeOrU:ecQ7IaRI#+4VY1FQ@jj,*j?\d/[Y;B_D%mKpanBMSDu(M
+cAgQtRQFo-&KPm[JZisnLEMiC[IT7]k/]?"LPi.gFjrnDaqlU6*1;C?WX^.L_D(X[
+`$b_g%&I*)J2\1^K.oWG_<Yj(j_Ug2dlR?KIZKD&],Mo$:J=%dVRCM/]Fa=L7tDZZ
+-\hWqfu%-t,(LbWNStr9-k9ksR7.65?\JQ8VNo6P]J<0T>11>AbM!4G4,<?DT4I5u
+_$Y-]Dp4-4B=!B:YWjjMoZdOH%(ar@co,rrFVY5a>nI^H"b>D64<R^;<7A?3meqM7
+[%7T3YmVoegst:!@L#1Y+XY!dTW+F@I&@Rs.Pq\F-MeVdRDFb`!6cCrK]IB[NNq69
+0Fg&JHS1+0E<W/lQ)Og-7EQs`QU'"3";b"-!L3t1i6<Yc-!$6k_sT'M?4*/HKFDjQ
+5<6e!eUlk"n&[1[.3Ol4R`8lR#l1]P/;m[4JqsR:euWmu>cAiY28XnY3%Nq>*WarY
+!E&lm0H.'N,87XZ!@e2&5RnTWL&nP++7UkQ&;(7mU7U;a!Ll9ZkT'].i.95r%/Igo
+M/iu4foa@j%/IelBGqI"[u4,@Rupg/\T]ooi$3;I+cqVR,11s--'@C%&`\KE,7]Se
+W"4_4JK`/rb,)3_%04#?JPeEcclI\b3he*#)*kD4_&b?m!]e?qMlLR#.6+:N,(Z.q
+)jh3ta:u?j*"s8E,:_4TM%5E*_uXq$!AUU=@G)"gp5$$4(>H6g5a?n7m%kjNM;]M,
+=X9]_,<'*3*auSd\D7LT>lc[B%7mHLi8an%%C+npJLJ8f^_o-nfY@M?^2T-`n=>Cc
+p5[on.:@l2&.G)ed#87T+?QuiGfZiLNIdJTO)sOkfcLp4XdtlP$Y,SGJUiRW'I!iG
+$n/P0$!\&T&[EQ-LoH?DbY/%&%Z2)9,.J)B;#$/WK-30K$-;Fscjr$\)?E,4-j[p1
+:`UZe!K3W(Lh!QHErQ.)C4SF^Lr^?%C!I5\$k2']Wc/^S!De9'5Ed#aJQs]W!?@+;
+Y_s'`]m:);_%8*>7i0!0]\pXGE9%X7;^AAK7X43V1AN*8d14;h$H#IGE"Kt8Z%4mc
+Nl1K2U.r4m!4LB]Xb)5*=MTKtdC%mJ_B9<gb-.M]lk(['$Zi8,&b(fOZOeQV&'0<Q
+M:)F_)j-MLQVg9d\.f4a^6=[X&]fY69.hg[(]cl4MAQp>iE2!TejR<p09Z>J@7pu[
+4H+OHMDEW#nf485R'0>`V9rrnq)eZX#_=`TSP_8Qd;q+6H@b.\%j;40-k-1Qd[i]<
+'#N=Q9M[frd?<FO*t[nEM:mHj2NQ=+!BV5I61C&qL`MnfY1Ur7Tbn4N<J^2jS$TCe
+;0Oq.fU"nG!Aem5Yh'KHF,d3.&hAG]H[c%2%uW0Q)t\7RBXe\+SK,udJ>a.pdF83]
+PE-S@OLQ:$6b4c44M%KR`rbOe3#-u5%uYGb])WTY\.,6iV^ojYN0k?A;"PICZ7`,s
+M_UGSbL_e8&HTO&O"dFUE#'W"V?pD70X/-IiqG;b;%_cCaf)LqZ"B8XB!jT.\qD>l
+K+4'n*33HT0FYIP!4JNKQ)NpU4`o9u@'>YgPa`Q5(uX&:5gQ17^kgF!JZ9cK&>TYH
+Z_aaMJFW\s/=MB'IZk+7&HY<0'A&?ROrR#_P;pI2"ON2r[fN/g!AL+HWeM7Ic'<il
+)jo];!"5\a_Mq_m%N+&cJmA^S%03JLXWS74K%3*\nj)Hr*'B7DOJ`OiP6hNiOdR?n
+EPO.knrm8A%RM:p&@rIq#H^6%P_'S`1'nti?73>Q!E-\Fg^4p-[k#7a-D['#jT2QI
+Ik#-\\cC/(MP(H#.?/T5bD^oNWJI3-aU'APQu\igci=J6"b>eM6[P)n3$1$2J;Agt
+;aIC=gN9'f>s>N?]su1JPLkeeOLle]'&pa4YSR;Pa<6`GOQa%q.E@XB(5S?7+RLut
+Bq,h+7#o_g!D,Nd6/3W@4hmYfMNo<[__j[5A>I#'#\`+^\:t^ejtH9J!=0,E:rSXr
+H@b:9JPeIcpsBsPCr'rMNp2Z9X)+$-JhlnTM0UL>#i.H7[]tY'!<BHd(lF,7nu*":
+%,lM%;_Lsf!2p14!Dj4*diK/&)BT8:$/cHsb:LcNlld4qM^c1O9=;s!Rh.%d>(j=S
+#SDs1OM/3=L`de?PJ]\$:oF_-&.finEjcB;+JK:7SeQm/n/VO\`n:pgU^[6bknfk(
+0*/R!JDp6(a;74Jnf77hQ!4P$.2WFY;M`]8+Ht)J8;RAOW/5>*4!9suE9%muO:!+t
+Q>)DunAkpc7CpB.!FQ5;)ZL<<dPXk)!W(h/f^YEDJLK_&ZgjN@X',oo\M\as.qDhg
+_LR3jJe@9BM<NiJ_)\Qr=>M@m*(\6!8rLhGoG,3`#k5Yco(a"D=0SrIPoq#(,XrC0
+LGG6`M1$KQ5bt>.F+E&k[?7s*p^u*Q;Mal\^Y%p$V8XEiB`\XP+;14YRKbS;*KC[D
+`u#Bq#S'd1'+GcmJ<1,pULO>Q\ID4S%H?Z/H/Ti1(4anF>q2'P!FM6T0,1.n-A\k1
+^^HF'UrW(2-Ah5]BG_nSQ\gDcT&RJROOL*e&/b`b&Q;WW<4GX.M$\GKVjJ"K?k*1S
+<>2=Q&&U.7f\'!_^mQY`M?qgkJ;4Q.k@-RYh@'Al-kq3I%+KG:<*DsRBVe"&M'*@`
+=2=kCg_^gBd$1c[^gNoEED-]7;@TK7:`'X<R8fHH-T=tX/KsJP5i0jIhm/Xa;]#jl
+\.4&)$3;kBWFNglRC9?A9HD+Q$:r^,3Y@@&pK8)@JFJ1):`_o;5_2H6g7t1PdL36n
+9GI!VUkoJk^r_D2SVYC>$K4FA4cr:Oju.GlJKV?Sfq:GM'*,P9dt-'[Em"IiZ(]=E
+/BG`I@4W%AP7GBmi]+dTa:83K%TsOTMuXiaGhF,LMN&eKX1[j_ffW6q9B>,E2\F=A
+r0j`3rtjrsPf(fR!87^!Cr4"M$$tM^WVMmK;\J%>=rAUdU.bj^(8;)_)_uS68KUss
+=:cr"&O];0L^DD722V,sP(=,Z@,<tI%fkH]!5ZC89%b.tX-FppN?.OAf`2K4,G-Da
+RD9d"L^f?33M6qTO-P]d17jn%$K.lASn!'pi3f(GgDVB==.+T#!A>/V'WiQQ$XAC:
+'J9`KTk<d+$-[%XN*6ZM'*.EYPJ@S=;FejEZB6i2UWihPn-oAeAB+FU#U7q08Q#i@
+d&\)"-#2Wl/VcZE?!"CO!=[g#p`#d>j8b=P&\A4CWMba&Sd7B@,B3f*9:rkIZ5:()
+M\-8\J<>sZ&%t&@/&igZiCoPj"[(0M.es0IL:Fu#[?F"gT.HG&:8'm/k100pJERK5
+#0dRhbWl3<'ekg^Gf;73/($Ga0GL#_g'KF<LlWHiMBE=/E;7/o(5rY-)$tc)JrpR4
+7uYhL:?=>>d_$4/,_<#(O[,XF.FAe#rO,=($6:KW#SqsCeXVp(Q["S5Mp;l"OUF.)
+%'6H<Gif#,$Dic8'#P.#n/E1X*\5P2,WMlUgi86%8!1mmW#uM<#uV9Vbp1oW$]*Go
+S1=W3$&h-@A/Oj'SY;:Pi@s!ZNN6*Hkd7Se?RgSkJYG[8b$AB='JFEsUf`^!Z,q%G
+8'n]DS4M<l!?#q")t&n<!4A[)'],;b^be$Z'en'2i>s]+BFOsn*_bEp-k!bqf,_X?
+!3n>Tbj1Am.2("_*_<Z!P6he?_o^QZ)oFK=?T(:@UmQt=N.J3aBFIY@!i1H@*p/N>
+EUaM%dUE3P`M@F7:mYU8&IdTn_=FIRf_PU+$NOQG0)j/8^s5>?6kB)hN]A6AGsmn%
+X+=sQ!76HG>7D_c[t.?^-h>dqFSa5fNqNks838(&_&iZ]euA`MOa%=pr,oSY$PI`3
+R_dAf5bbk62r&0AM>3^ld,]`(U4Da5e#=4K"%a)ljd`!.!@G\(BFOsa"AHZgVKe/1
+kqGpgct+YP6JrJ+=X8jAc2bsb$U[Jtb5XAEM[mB$O)ml!TXN/(Kp5JNOODgP8UM5N
+lmCBc*bHV*o,TJ,)%PU=&pmh1KC]OSVOrk![%InZUM&SjdhPejM989gD>pA<2g<'*
+JO&b6Ru]sI%>f?%XDN8#+X4Ls"UTtqPkaWri.qZj$j!:A!;Hq#,lthocC$4*'ii0Q
++omGdM'H1jM:<Cg>qu]Z.CWMoq5QEALp[QK2\[^AiW-C9J[(W/,Cn+8%:GbB+S:Zl
+2%#8I?bctfAl"=QH@aHTQ-8e4i:0NbcAXHPm[>++OUe/U_HImZJ]Jk/\Xb$KOGK=*
+Wp$,GUtVR\Z``fTNH%l.;9;D1JUr.U3bA\tM%g>rT")RqNCfF2jlESD0!_!J$Rrm6
+?Km?(95_i"V]5lYn-SVm%-EHP^jJUB@S/IT,2;G)>:T]Dd?uk+i;hL=JB<!A)e/p'
+H3"k5#=F**:q@&g(^gN,:p>mj.i4(r_QgW+AiP\U`'T#OZsY<sM?Dk#33#4q'o.H/
++Rj2:(_MVE6U;!F80\rZ`5/]<U,XWY$\e`qUc_Bq&decY+NSL]*tJPZK%MKi?nN1N
+CB@?uYX003"iDLfaH1!g(6$7"nOU#Z.[&5[oJ*;3:a6R-K-AVjLeJU"N%I>s+M:oW
+)NDbRCg_3>=Vck4is[oW2B!/9CDfEW]P]\J%)nHN0W8,='FR@h&J1aC-Pm,D!h*5=
+0n'uK@:D2MbY0As84B8?5eg&G(CNY5&HHc8+ps%A@GpWs<[cnQKt)Cs^fDfmKn;Up
+fMG0p)N0>ZnTL^._%[2D@So[VJ0F8dVm6=\]M]RN!73LAT`K[[)$N;W'FTQ8l]1A3
+5kCM""\KnM$ARd@-H64(!*Br>+b3<'"MoUR('S,N:(d[0a?U>l;1LP40YrrJfnF1F
+?581184ac+5k$T;_Fl"4%"p)s-5]+Qi&n)oNrUd?"$kco'/;0CN"NGcitr:]NG<eS
+_l?O0Str@,7)C?<MImet/pJcV"CV""(Um!"9'O0c1*RV@nMjr*[D=gl'r;?!fT*`*
+84pJt+V6sQ_1;-"6%d=U+;b;KRYM,:;'81;WBh(V%`1hW1qYmnMf]^k_(l;11>nfR
+%"eQLDAq,XMe!Hr@4HR9-D<ssLcp;m8.YlrrFI#n+WrHJ5QP=,*!W+3YR?*b$;;0o
+_*TAF"@4U.e;"(!;#%Q:3&VI3iH;6$]'AK_%Kp1n"I2N.pg4sD!>86l4]UJM'dbZX
+,S$^?Ldh]f5k$=U"CX&"gtkbr8>E$>\0qW788)fP#(`^`'ncotCFH=d;ECNq+W?rm
+"7M+/E<M@9L(mR;i,fd<i-79pWfB_5jFiA1[3c'.RhWuKc!jf'UPLZuQNP'K3YMWR
+6`:A]_0"VL\NulsSd'/GN/7]&ZUPLY2.E8-!t'?I6u(4j8RX9G#V6=849.&JL9LK9
+(K`sW4VrcN6WHl<9-?71Jr/Q_(C$"X2@>19Y[/6'@F/3/"!I)"b(`O#[l(o$86?`f
+.(aL9K^7puqFc`a/Iq!$84Q5RTb&g^@_oGG+2(CtM%7R7AnrG6!AHJ>K0\oi%0D\P
+/X35?lhD(p_'hhbKL!JS$?,_b%+mj$N?m]D!FT&UE?;><$A*eY1>ddoRmL2ld[kU>
+kg4qD\;QY6Lco[t'cbXk#!lo\=2:IHK1(%4eM&<Q"gp.VK1p*t6Ln^,g^o$Zn-i:c
+*E_I&p(@?r`JHoh-7@2kJ`&$9!72KDJ8je@`(ET3WQ[eb+i&Y*,R$HK,UR'c'e(nu
+$,I/q")j=m!Y@Pd9-OI_+G%4X15ZM@l[XT&X;M,5@T:cIdo`gG[1\:9;?8a/A?4,3
+!Q+b-5l/bp$6Y.n?sEr]1+8"[AaQ5u;%8Xa/Hc;%=@2V^#Q[aG"S(0&Jj;:!^pk3`
+!*flJU/\c7;'?&Q>!.C%6j1<8&HWFB&;+A0YCTp=:s'UdSO79"?ugBbLWmb.Oqd*:
+^_R-3p_e^Me-Nkl<CnH1P-1HY"rMp--k)=X\"pfFb%N"gN!R>-B+[%_MJE=P=:_!F
+g^(]1asqqW)GE*/(Cge7I"6*Y`XjI#)"Gm_.p=`[q+M'F+;&uQ^^C0.,sD>P2$V9l
+(+_di#hg/'=!S)mRkRVKJL)1,LEIN:\Y*VpnJ,m`Tnu4R3(1qO!.=iaP`[(l@R4Jb
+.5I<':0@:KJJ]:NKVT*F6j.@eEG?Y)FGUoK4q0fJVD4-h5lr/SZU"j:"/V.P!JVFW
+$->,aMMquFYXA^<]:4uaKG_NjA5su',m5>i&O&H6P!Ku(8V!5dJb#9)JKZ'=i,B&(
+n7E,%YVZSmj;:$*>n%Cf=9XRZd]=\QCQLP&;9dT%/^iJ`!Jpp]aFMn`5X,s`!#IF#
+3#@ab5Ym\3+"r.TloO10f1Qr!"6MWX!AHG?lcjNnd[='4^d81kZe,<ZI2'9P;")_l
+,DsK3Srcjq$,H^nRK.0T!nCNbU`^=]V%=Su^iJ$7&0NReQ.2%[9F"e$G$G$LMcOrG
+.)<tX9F-.bZjEObc(R'uJ9>`c^hdc:nI%EojGB]HAnr-D,UK:DI2QubXl[D^4srIg
++MsWS,esDP%Fhg+Z:T(ej=bi"d"3I9YAD#$%0FM)^D;oE$d6m2F#1$@K8RsuJ>?EQ
+j?Y^FYYo^N>]Fg4,o&U&(;?(\[jV6=Zb5?3@Gr,I!e?!5]*Ut88c^9-7P]n'90Ri;
+8/Nn"H;-PJ!3_8A&sCF\(<A`s-7\PV;:X*RYejOZT+[20@&5"I`^0mRE$d.eA.dh.
+F:A98R]s?8efo.]%*7odLHp(s&^Y%tJ[;c*bMk#gPS@pI_6@+YD3lH.:5#4k,rZsp
+/#hQ<$d1]8K1,M0c;c5qTsU6,?sW=C6UV:@Z$_S_<V%Lj/<p5DQpEYrUc6tAZXjsi
+:7%McXP*S=,5<HF-Q*!g]Nu$J;7;rl!4?;,F[qI;=H6:mn,`5"?5T4)"QY*4`c,/k
+:&l89;</7=<@299!%4>7BGck^A4G3<B/VWqc_j.2Hs6Rf!_A9DSU/#a+!\XqYp+hN
+C"bsNPMn\u!E3Y7KEo;c/L_t?`Y'S*Y5t:DIcfkd)=VJ+SeHJ!\mQG<OAj)YR3+<o
+n.pT)c3\(#Gu@1`X0gH&C8.u#2U2(N.FS\4<:d<t`[Pa;AW(t3)VoMDK/Y9#3,smg
+qm*1IaiVX_"i-KK>u/ii*!>?4<R5GE`oQR>:=9E4kV<;S?l5Z#C(!>c4U46V&V5/E
+7$bZ*"<aN2S.c<Mac]=U9/<I[>DVIYJ1<K56l?&k](j>X&tfoBfWG3\\t+D@74!3j
+,K#\?;Q`935'9a<JmqUXZ.5/<OVr_L2J)uR[7$[r8SRZVW>6)/Fl;$n)E!)=2jc)C
+%0-\8Sa:Y'i'.FE,RnZJ.J4+D,ch/h$Ht9l@EM`588:mb!s!6*4aA/KKV<OM+@60>
+dOkMlFmi]`le"3c4tDAj;8fJlA;EQ@7REj;@]$ZG9%HO*$3OurGT^H??ofS;,d)``
+,%@E2AFKf]@TWUY00h@r7`<:(;SFhGBqTJO!-J-H9XTHpN^tEu5Y;-o/l&IK#68^5
+VY5";*_8a<#Na/6MuEiQ?8T\X;kam-_up2G$@51["i[c!@_*sX*%/`Ua'p;iB/V33
+.\G"p7#T]/8W^:C1pfnb"C`Q*,!r8*-pbo7<X$F]$#3Up<===n,/@.[5WWu%C'TD'
+nDI%CJk@1\0Kiq,X5k0I5]-fS$3[H-T>GD<#^cfKA-W5i6I=q:"m$*2(uF1a=Fak4
+5\()WH3\t:ZNAL&7h@+9Os#WQ8E0?,TMj5!H6YiAW[YqJKr+r[*!;i\":<^),*$D,
+*&WB2S>'mQn!Jt[(-/9HJ&37^K$GQjG-'c["Rd>YdC?M*5i'[6(<2l5TI)!3*!E*=
+6]SDL%IY'A6:F7jF(MpSK$^TVcCKK7#N0hT8*2<oOB9c"9FIKql9$VJ6F-e_-E&aS
+"nDeOJj<]t!"Y"k8,NS8?8q#V,f[?/78T<^7\$UC.7@-6`I+[Se0=/l#/GBdTM>P8
+"AoGj4b]]?8O+O,.O3r'Ulj)1VC`:>MBg$gl_h[Y,$:(C:c6+/^YiQ++F"-SC+r#:
+-=qKY.c=:fE-fS`167Z!?q>C6C,tY]^PbMJ5[lH<@!e^o49nRT^bl0DX>%]U3COMf
+TMtuC3;Tcb"sA'oTR>321'FQ:4_'-sOjZGt66\aL2C#F/!%<Qm+Sjr9Tk@7-!-0S$
+(2K]k0LAH@5\MhoG,=_8-t9,!,i%jF9EX3"0uZt]d?l(b8nB@CMSbI]j.ojd0E^U]
+7l*3"ip8s%1fVJ0]$fLra':BT5!\%(!n.38ltcoWHj:d*$Go+s0W=R*^f5u3`T8/_
+Aam"$U=,]6"+Xba5]?rNDF\Z%AAD_d^e3s(ga9n$IXlJR&R&4#?Q"Ad]n-tMOt\OS
+0"hVV4sSd*O=WsNWpS"OZfA\BB+QeL,UOd#6cAJ]Y7<iF(rgDF"s?S@+=qX[cm%_5
+AH4J_e"gRaFsZ3O2'WfT"R(P+ppi`f,U?cJOD6?)Ad:SB#-XtYUg>HWA@=j!N`:\O
+b5c)CISg6>2?L*\._pum=9[W)JR_G.$7S7$B0dm01F]ng#K6bB:+B]^9kMWE#ZTu]
+EcWh>!s`3c;m_%I>$iX^ABc/S^eb+u,[87+0eX$)"=,4R.OTk!"S:LTZebk>!=4;&
+[UN9[iZ9qNkQbLG#QT8V$(O-\1dNeI=MPi4?oS6r9e*>6%&XrCi(=*4r^pY>2Xt*D
+E!.U8oMgE-A^o!imBe=X6jCP&rr>^o?lo"l"DGhjAtWI^64duZI'$tm73GGr-k&J<
+^:FW4;<HR9MZsE:E!P<;oH\6@KheqW68F-P;l^$,2;LFu3X"Fp,6L>]!a%ufWjR@Z
+#9pIG`IO^0\o%kLVl%*07mL?(fKZ)i,`4"N`?aM[$?i5/-I#pW^eQ>SC^$Rt=-U,s
+"rK/7:a[U85H-OmU>.UQ0Uo#E0(5C.!+Z<h@L&QV#NF#t#(URpRK_$#2O.0'!-AHA
+'3kN6.&PH!O/N6)l2pL32WI_CLnY"WC-H8GZg!Yo-1j4eM*9'h1.9Ck#6k;t)L(D>
+:rAAu!bPWR">jVc6pO;1^io5jE!7@6":3.3D[J@3YpTf:,_]c:ipM\"Skt>!5lc38
+i-kp(L^/NdSYKjoQ?66Q!^RAo.e&5tKFTj#3`gsbY(]o_iqP9I(-U_DX[8'.-a$GP
+WqkRl"\)-iCEG+e@T#P`FMbX)Zf!73(.<"I,_DIVJ6P7Hi!2%:/B3-UTN(PAVJfoh
+4_'""U@L<u\gG;PcqQ0+i-GRBKF!*\;dap3X(F:5=F;;h.a%ha6k#c!'!WZ\/F\UZ
+.\s^BD]C!\6`;i-LJ4km2KH+l(1]Hb=%";XHo,ELB12i7$&hfB1*a_R<7:mNi)lr\
+5c*C>!anQ87iYb<.Wib+1o_=qWH<h_8k"MMqJ^6U$O-iDM?n`g#[i)c!(<Z65#'#(
+)2J%mTQ<9:r=gAiKYVUu@q[r6PW<2V\Nit8UGOgh-711K-"'&)9odR+]K>0;-kEW5
+bN^Kh:h6=6#>_?GDb:-71^%G`"$g`-,-8#.@"(hG73W9cU/4qqR][tEkH'+[_LPb;
+*[++0"lOV0W!EOaI8aO+2(E(5\?_tUY<JV$#JbaF/mon=3<o0j>Cul75VagaL0;G3
+.0[jnC2sEsZ3(T;7"RC]5WHq77Nr\R-R3(X5[4Df,#%)01r?s/P*-"lH7(&p"!C!:
+(QQ595nM^o.UkGU01*eaJtA>['EnIAC]4T:0m/i*"_I6J_U_*7<.t<k#J%>L2(W:2
+IL&2h#G?,,WHOG;a@GK$fk+5&N$s@S_?8qR"=_uG+Bg,0kX:&fXtb%E,OA:RC*8XT
+FE/A@^gRg)'aESs!p"etkN"<@PVn140]aWd:7=?13f7C28&K?P;[Nb[M?jh[46tP0
+;hR:<Y/bO2.(FI87S60YF!+k<]>/#9kC36f'EqlhH)\R^n62SWJjs7I4G9Fl&#ofK
+5eW0@TE:4>`oK;YYWee32d,R`O[U#N]9.Va"Y'Y87hMb4?q'&Z9WN+\$'98'`WDqs
+>Rq1G@"&?rKF#ABJ;XE@KTH>6dPPXsKb%Jo!k>Go'e6==??=obTMVqlJgR.=:PIA-
+2AAGGJ18EsZD&+oYH%,To!q(p\OWZW#XVnZ%Q6\1A]<F,+E5m;bQjeiF=rYK!,nIg
+$]V.`ZXS6("7!%bO\j+X-*um%^jTHQM?q"R#[6A,kZ$jQ1:"CqA?l<<&Ob#(*>PDs
+/&[U/J5ccL%Pj#oUFo`nU8%fZ\--2K\:kLjV;PBC=M.2!d\Sr1d"sPp3[Z.A9!N"l
+TP6RLd<YC-7`%2QVGMXAGHVcsXf6&98>'8P6\5;RS:Gnj@!i6qN!Q)2#E$YR"3rVg
+Q?*Ac.a2[L:l1<m#=4-uRZ91(,=4A.I]a?G!oj24?oG"RTHL"A2",$EL$2PA/m"/?
+#_PGqKL2B4V?WlN#_LF=EpiIN!&`jL,q$K*iZR_9H6`lU.0a(NnNmHtq?LLo#M%T8
+'Db/*:n^8)2?7\@fb\W!2?mu4#@N=@H,aC7",UX$+kp?48]k8:[--^0<CXb*^d96k
+Db4k^"!S5hZoTd*X=#4N%>$cG#]^.2X9N'[0I9s-"Qff!jG`9_,&a&+KR$K$AjmJ[
+ZD1rj,i96mGR,N.0YhF:".DN1%:gm2Bu"rD]k\sN.L8"6c-uM@`*UYm9_jKN,bsI9
+)5sV%crt'/"H0iq$Hm@^Zm1Y:4)jq7"\=m!LaYW'PQ3WJU]E1@#Yl7*>Y)q*LKoD-
+i._;O6GqN)@\-$RN%8(kBAeXP_U_.#k,gm1?9iD:prsHUZ@6dt-Fdp1i-kqSL'V1=
+#Ff(,bbt`]F,sgoln]cKBh$<=Uc.pT_6?`[@uP(7E[?hrLIIS3,$(50\6ZX/Q/t#g
+H[Z3-<-*&.32A13Bl#\AXRFL7ZDM/dm!Kra!>>AEgW&#obe@K%qXrrq+<Y+r@OjuW
+F_1:%#Wmn..b^X?63fN@;pR9U:_^(.X=QUj![((&epbWlYW2g^CSeVu_O26iYBEpO
+<,/5.&OH[7#%u=\Fb;MH"Ejp$L]`R.0I#.&[:$1uA5Zf+3oYZT!f<Cq'p5g\IR4/?
+"TSb&=Sl4.BU.'4<Q&)J?[b!2h[$_eP^YA4hG/c`"T7[MLTm%))4[hse_$n\LJ0^]
+OIWZ^O,=i+TN7<$_uiZt#$2OPimIqe)REnS.YCVs.&I(sTKM?j"U\#]AX''L0Cc;]
+eY%2"IQ0<EU,+KZ3Fr(PZO>f^YQnFFOgIq7j?P?u3!C;E"ioCJ%Wr%>#dcq:8q9E6
+91f?(!%J`l!lAp_QrGFF$&#$M:nUiA(^rkY+csWA,nu6T69sa&/hn0#7tY6;]N-Tr
+"iGpO&=QEE'F7("i4t^N.i$"B6LeHj=t:<p6Ga<GLeo+c$\cHkYc)"i*"E25+_5+C
++rUn[Z*@Du>VR7[XFmK+]P'JPOU,JA!9e#D(CA&)5k'##1D5TK@UQF'$m-.<`'OI>
+N%Q%VL-jjm+Ojm^'F@/ofLVB(!uB>h_Yj%"@PAW,`PR_pI]b+-KYkVm@(^MB'T3-(
+5q$+n+,1*@eT!j53#rCHKn</=Y<BS&d=_Q5(n=8J'hUn]BeZ2c?\aL,JPd9.@mQdr
+C?'&jk,9XFMh_E*(V\Zg*=^!iTce;6/BC9",3fO%&d.)[$C-6/QnA^J!@Vt.L5sCn
+nc^0dEYUC59?<e1!C0<fUS-)3'nkM$-4,EX=D/QWiOEVA"b@d=K"fF.'&S=,i%P`G
+iE/PY0(+oO%PY]f4q^4sP(FI'+g?,-8>-GM&VZnQ)@`FB^dshTM?$ZiL(@Bu'f3\9
+Ej:E$pjA7D^t:=UL;CZA)E\@?64h3]1@>[)^q_9(`*ipn*JYfM^_-g2K*pWB1f.'`
+"CVj*%th\04IUo\gboiK@(7BdL4MZF*mETqB*-Q@9=DQf/8-RD":06Ek(@c7C^l#)
+n3R`j+Xg0t+CR69*JZqR@&AW,E'O^4%ffE="";uM\glZH:tLDPK(9gG_8QD\=b-QF
+'ub`n6l(IVW&FP-i<$:lc[_*0^T*0aC`;#A`9n1h^tNLN"-(AY%YLG*!"@Za3(OV`
+J?U"2KSZ"41C#)-8.,MC.S^YgTcG*]"!DP@%#"tURrsB"qk+IQ!7c2&1;PqH(Wg+8
+hAV,>a=[l(JV\%YdM:i\2biRP+rNNEPY`,"+Xg[E"pf!n)T+O"8.\ZuNi3EjJ=%Gf
+!\M2]*<h7\A/U*,GX)q9TWgRaK2dG]'#V321_TtO1S>6[i09ZH#@VRr*/4KU7Kp'A
+(fV(NCT'UPJscU2(l!*kY1b7![d4EUJJ^sWW$-[p)a+559_&;<Y[u5#0&TVE/7J$p
+6/8/qF<:bHpj*s8Tm0DYL/_hN_'<A'E/!7-N`)t8(p7fkn'*7W'8.1/-5;,5K*tp,
+8nOI<Kja=T'$fF>*mt3BI`n(25c#Nm<;kV?`7@M$Oi^#u)BRdgi@`gQiurq$@A'.;
+*Y^F95QP%4aWqXRoHXo4ljlCaL_U"gHk9\i6$DV=n,fgL"e-Vk?Ajcj!jFQgg8Qq3
+TO?OUQ9#?Rq%O#"Uk'^$8oG[](5(^fXt>mt$NSRp,9V\(!qLXJ_?&UH!,)cB(,?5[
+GV923;*?q$9FF,ea"/`H!J/2SSH/e93b7V9TCNhi!AH#*%CiX)ZG>GPi[b;UGb0L`
+E"<!8[=Z3qg`JdR#XN,`#AOA]1K&Tj?5^9V+B_m!&2XR,83mL]ll7>P;Tmfc.4kPV
+9hDbVS3`PZJ)H17(%=`uNG(-OT_'FoA/YbV)%m+gNKH2n:'X$d)^0aIbbM$j`merJ
+HmKt/JjPi:_6>s)V#ZLRTO%k`o#!LrLs6"\XD#nAr%lBD)1u=A=TRGB#/s^;-:VW-
+9:;!$+H-l,cnG^KA;pbD#U9I;Js-4t69@H@&2-:`M?sne6Z5EPZ6BDW!9b.m'-&3L
+3?SgJ=;V/MoGX4IXHGj%pc8E"'nZ'-iea,J15`T`Ju3@f_5)9O/rb10&3b\sW&IYn
+jUd%UE(-Xs,WpUu*!4K%Q[rib1'a5BK.q&=b^_2km:AaS:e"a+m"pF(W#p[hM@b@0
+_)%lp&CJ@LCsO"C9)t@C/!E(\_".nTEPrt8^jlprE$#1TU`Y5dFpqN(.7diT*<TF4
+<R7?SE^7_lJuHNnaLSJWi92:1BtOnk:a6(?=pKZdUl1@0M[.&MP_*ja*Pq+"S0XeD
+4-49l!T@:5kZ*Rn[@!_H19q"%-k6<YY9[`T4U(7A(9?q&\R8W8JS(/&P:3GD6#\!A
+n:jX?!.7c*YT*iIoGn!`DEu$X1BZQSh?+=6&)aZV#E6rn'[Trubh+OA&J,f^[*L\,
+(a^BnclX!)"L/"/CC!2lY6(qSHib!!G6%!/'i8?LJb`4L#VeRHE*NP^?mooCKFd#a
+3e2eiTdu/KU(SSE3(XZ;RqJ1=OYBtD!NC0*TY5`(n8&J`\3In3`7]a+RLBUVfim^,
+KHMCBc!YV$\j54_j!"VM%=)A5+PEVY#rKmmTIL'%WBcb\lQH;rMioI\VZWF$&4-pq
+bQkjQ2@rIi$Zic"!<"5XnqPZq$-g!\KGB.X1J`%R&i4TV*.t'fH]N_p^\+rHK%gHO
+e:9O`T]@;LP"'6:Qm2e8i"skkr0In%EX-<''KQpHkO,mo5K(>SfuBGW9aWp?i1q4l
+k->K5kV61]C*Eb<d*^1uTqb8!/*5gK*h4'0#QY(66t^G5&?:Wl0-1gYn5hanI$+\t
+J?Cj-W"D?M7gT/#D#b-/&]-C5#K-nh^rkVA!O,$!BWV#]n202>H2U)E#eko[H>)j5
++seT0+qtYdGYK'L#JgL6@j=GOWTf"/$YI9igdd<bZUZ4&I0W(Ip?htO-VXii)IP?f
+J">>Z"3^drJ`'K>G4+2mJG.F9YXf:J`n9$mCMqH[rXWfj:^-%c%P/`64KnQu#)ZY&
+"<`2Xboo8J`UjsLjb1.nreX<Z@%^B8P%_])$b;;1*oN,h#(\`rli^=oK*f&?$DQ&T
+T^k\#gGnQ&je")M]TJW6re0en?8U;+3e>X[&HY/N#lt1=!mI5GEs?"XJJ2@eK`]Z<
+]tHK^5R@In&.L`\M(PCQ$P``rOGpHXXoN8OK$\l,%ua!12h9L!6YRkJ:b;o<&ul_a
+g(2$CAd#p@0ID<dH@`?i/YN0SV<l/H+O$;FcF=gGb)&=2F#CnEc"VaU7>4V&/54$a
+,6VfQ7?&6KB_;:@U<37'a[A"aoTF=t_FtF?LcM_Z4;h33@U$,SEs06[^#.8ijtd>Q
+)46PY#b<)?(-Yr/1D76\OS:/5".BV94B"h8L`jKc0U"9<QJkYu,/1-ln>*Q.))31_
+\`jVYP;GkH#r,liJ/!hQH]JI3+BT6_o:1[5Um-*7JTr'73o$<O(]aUK*Le>lE:Adb
+8JY_0P:A\fa;fbg3/SQG(BQ!&X0N)#5peU(!FeVFYu-_ukbG[EVV%"=)q6b*j"C\d
+O)"BlC"t'ATaU),'S*fH#So7Y&V5`N%pBOB\/^=3*0q_3Ur(r=1!bE%*@.['!9an#
+6FMH4L^l_eMUFJD#T4WWifNHB1gl1A@tP*R]7D[*L_uA6!2]eLdN&&]Lklr_\<9"b
+OVZ,B0d:?A+H)&3JNP/?Zf,<na^(2>nHt[D%<B8rckMb\UC'%k!U5F\O;&WV'UPj\
+]$^hA,\`H&gClj9Wlu"]cl.KI+p$'<&O76Bl-[I(n;/$H*8hD\_VU6UT*U7`%4TF,
+)!h\K+U`f5Y9?]*!"c_Ga+9VKVD<Lu6JXA<'o<LJ!JmABJn'ZG[68cZ]m0Pp&/QQN
+R>`V<'Ta*E/,4\5)[SUEMe%o34HY\L+,SCB%OkG@?m*2AZ4eo3&pP?9H_uWb(Dkcj
+/YF+)&q5sNW>=/$$`M=9YarACXZHOf!GfCMU,rlBNe*W-PQ>1!R8H%#'r;!RJ\+)Z
+H"%&[n&B#R4aJ]oTcgu-0>'9Q!Vl7@!4Boms.k9(P<b`_=cBluIY%+MO*DXpn.^GK
+001NSN3Eb[WUQeOBrq.9^u<(bE1`.UPfmRr[LaIAE0<lagEX$i[L3&3lS2%b\4Y26
+3s<p*Z3RbZhLS3-Vbp(q+;'080;:6U4:nO)8jJ^'SYYn1X:iR2$+,6k&095$7Z\R>
+n.gM2g4Aba%-^k<\.A[E3m:"19aV.?.Kr=M),5,*'0)/:fG1VF1G8=d:@hkd__`#_
+/1b;@7E!'_SFsU)*=M*@SC$:%6WK"G)DG9U$>>P-TjeHRTWB90#SCAdLt[Ymr;i8t
+W8N:7fZ^<;)F&9&#iNRii:%_EngE]5WZ^Yf&>l+("irI7&)iF>j70igSJg)r0MJSt
+jJL<uSJ2[)MYkRQj#rK8)M*Lk*)I@MnVs-O!<FVn&rA3*3qAnVNJb4ZMkOG_@(r/Y
+Rg@)iJUjc&fj0HVh_!L;L_pr%W"pk-&;YTa'Mt>s!W399ObfE@JF#Ue=Rh]F$DB7M
+_3iCOf\XnAPG8J!Q1;GlO;Eq8<Im+AM379a(ljU6((%j#'nD&cMAhM:lA>WmJN96o
+W84'OS/=7jN1=K,OP57WaU\]UR)g3a&FL$qcPnRtMsVMsa:G:Q^d]H#(1=!O#bMBa
+()>3.Nf?[QnDhH(,n$.pe,di#'`SkI,`EX*e,Y;)ANh*^YnFq5/gLH5@%k>$,cX66
+(85Ir.]tpNLXIs/,<2BbZ*=Rg:CN3<JP[;faQ,>M(4_%bLjD\FP,(u@',GiTLsc7!
+R,ePkH\b"kMk)L0kS4*-kQntg=0bs=Gcu[4,/>?.,)X#_@Smt0]cMtB*8m&V+:jIt
+f9A*XZ-<eW\<N:fb#$n)%3WrICrO4u]E)E_MR`,7+J44()`JY1\sW$uiPem'*=VTq
+#tY+&=;Y!?'q7pB&?0]8n/%$o!fB8&N/Dt>C!BU2qbuR!M&``3d"]^EbmWgX,@_W7
+&F>@3(l/F~>
endstream
endobj
220 0 obj
<<
/Length 21085
/Filter [/ASCII85Decode /LZWDecode]
>>
stream
+J.RTgd<QR>+;fnAL1"]5?m(6BiPGW.*,[YPMh^7HS1*)#Lr9E$,<.N5=:bk]jZ#8j
+jrbk6,S6^f1f.71)GZ#bZ+TL92@<'2WL1&11`$U2ERLNnCc*),W.\7mL)s5;K4*c>
+&ZQBb42N0%d/e'q%l-L?#*AmD.hij27DjZZHtkKn`GSaE?o4c.J\c5cQs;Q6+W0#e
+nZfLI4:Nmek;0EJVAq9()tM[=r<0]2,s_gSCAnoW#K/pJ0jJ\MF,daG,N=<+eDtR-
+SBSAm(9/)XM;f]=+b7L:U`0dg,E]](*`P5^"U%1A[,,[\SIS+,fRW1!15H@9@7\IS
+-o2`7B0cR2c!\Y]9u`B:TA"2PmLD`S:LDiMN$/2`3"2ued/a\$38?3obl^A^0TH63
+OYl8h=Ln^Z;]OI;_O0mQ%HE!$1lcG4$K!\_ZG[;6N\cb8.1Ti/aGXPQl8fCe\6(G@
+@sc5d]]1]W&-nm/;AleI_K;A)bDS/!"UsV)'F^#[_A3VkOA`^p!FV912ZoGW'SS+8
+6A!&`qATa89iN_V#0]b!ft)g'`]4JQKD=cNa>6HH77`qPj3@[UC)9?9j!#qfO>>CR
+]uep^&.F1Bm5teE.*)r..<s2n]WAp8qEE7FeEoPQ":-]@FF`E`%)[>N2N/l"ka.=o
+aN"D2[BS(8%kdIi,>?61N5@$fLu:*Nj"'mZ_%9Q_(J)BCc61PRU38Opcf=<\1=%rM
+!`&o6jRrt;i+t;UBm^"];:-D[2ESg&7d@<GMp=Ch+[^Fs;hJZFn%:G-*%D+`[:<@j
+Y@HgNes"o:mQU(Iq/]Gn[7Odh2hcHj#qp`6DGurK6!./fV/93@[:&,48BMbgKK<.E
+TWjAtXuQM[[Fdc=KEJ1/8rcZfhD^CEpcoAs04="u3tH.G@:Fk>j>W$>ZpsoS")."m
+%>.4&c/6>;U`bP(TMcba@6fI4@*K0paP>=G?LQm>i7RH,155OP?boJ<?.Pc6/@EoK
+1Y+PrUM`__=DkIN[>hB:l%\=1q!5QEGk;Ml"hTe-KX*:;kn7Yj(sAY6RQWT'k<.WE
+nDY:#]^<<;e,-*,,EV"pi1*;QM-?&u&ek\0b$HmmY:rhg]_ju_\V2$r3Ge8oQS4WS
+%`%!VgOjIcIb5kfl[mcfGZksga?#dSGs+F;TfmhY]iJs>4l;k&n4u^`&t>U<UeM,V
+dZ=o(QoQk].&S@ZXIi?U^`u,")o/r>A5a@R-V,6X]Z0la:Qbbf/lf-Xo<rjN$H7O+
+8MpS`N(2!I,(8o[/MeYIT?.3L#2nV]5h*fp)KF\5B(>PHK'!Jm^bc/o[:@"f)@Ji]
+/d;<lpDjfA\j;]ABPqgA_dJH)'2]VO`*itdo:HbLA.XM.7;E!-G]V#L:l8+HKcLgN
+$WWBY"9C2)"?6CmQXd(2LTsINE71Umj#fT.q2.9O4S,.rr_dHah&kiYK:uO04N(nN
+P^%LKP722VV\g;(J8lOfE%!?<L_RL(L^`Af1bS;N-GK9:'[CF>IL?U+L6bC'Q]qGl
+$kZ(ML"<]^e/CF8m.r$970je\iB>EQ5"Fjs+B$WmAdJ@u*gc0tg]9ZB027,>F/7:&
+On2fG#%/QD(?8BT5s-ncIDQ.7`Qnn%8T4_]OhbjY+oDBuE8_.mPUu\>Up>fr`7]f?
+nHd$_Cf8]=(8qn$EE",9;!K<eR2;%*K*h`C0)_Gu7CK=%a<5+F9qY4+OJ]pap2:Vc
+&-Ga;1;bj$@h,5]'=FcMJ]#Q2@>m.U<,NOY$H7=M8OoF#D"E:m/1:^;Vui2=$3>8N
+6F)Od,7/&uN_uU,CSZ_aeX]6/+<X6F:nJF)VWG^G/-[6N.>%ug%-s1$9OR5D5,4)6
+U%GPn'ZHaM7-p0(2/m.BcFj:Jq%o]_:H6mN-9g/H&tljS;Lt&e.M,Ds6T`LroL(X0
+^unYB3-UK;..%6.cVBo(j&S[(>,eaC)4&tF8TUgdX[&Fk>_J)=DMl11jcFSNbk7JR
+D1M`lq"(*XBlAe'C!OiUWY_=LCarJ_[H;kG+#@'.f&Atnk>nQ3b/Gi\1cVA=8LI2F
+3Jg#J(rW(N%*QMDM+_dlKlB9rMbtcD`#KY%0PqGsaToS60IYil)@_K^1QB2$)+;8N
+7rVZ=+XLZSQ,qT[$Z0s5LR8W].!S8P'C?"&ZO%>-5[SLH,mLUk)re.eH&It=_H>8%
+QeZS<Z'Haf;7drZFUsOPIK[X"e@O^'F,L_r9J<7?LR"B>Nl]d0ak43VALs%01<rV7
+poboS*.<r(-76r>UG?<6Oc"3T'?(eU,3J6!Qh)h'`q^9+jW*0K1QFfI)>=qW%0;qn
+DKEaB'0k]nK9LBu1'[Rh^DI&A&u?Ta+W*lj?rNR$#q.2+#4hG>-s`Bc8QsX=P;;3Y
+9jdGAEn+@28SLNj5_s<H31(@T+ipAd,8i<b`a;UT4FaCWmV=FZ,9uB"O0!@;cdoWO
+>ECXmKao+]7@Nl%S4uJsY?is03GQ*eSI(XD0m)2t.i3*9Vkpi4&gC>&$^ALmYMr$g
+"V7eTPs)7&&S6(.3R;bc(o+YsT*F5!D_c8_]sW"),2P^4H>o*/^;tK:cOhOYmTnSf
+3(E2o)/Ct$c:=H#L@I]Jk`3T:h7`R6r;jNcJ0]a.T!3\Jk1Q4IQVMbM3A3VNS&7s-
+;jrjqcM+CE`0u:<1UoCC&L3ffN+L;4aDik7jI,V@Oe*ZB30u-"SK:lMn5+*aelTk>
+;k8*GZ'Tdn:[T3tYT,8EdD;qo2JFDCo3U8.Ep%qtqhlcq%F:ei#&;Ogf4O/nQaA\`
+bgs_X((sA_MZLp)i1%4"pcbaH!Qi@O*eP!eC^:N!/pR"Kgu)Ri0Lp2S#PJ(CfbYIX
+TD0jToNlm1qAh#qI)-%@UbK_FCor9Z/b7=3,?B)^-X?TNUs=<D\=-,$o`<Bu_>_un
+HiI>UGV4`-7E-X$4<C3qDLt5?-g_`HkBl6dF"t2i3bWHpM.jnYq[jeGH&qalcTm8H
+bl-uC"q=K2N7._YkcSf`6EK=tCii"G%0?r1eEm26jH0B0m/IVR_=-;BYQb<V-I!ck
+q/Ah*06Z1:k3'[Eq/?6WJf`:c?7mnE!f:=,n0\:AE5Ct'"L(4KbgM`[>k'L]k\sSg
+,3[<k?O0@7mS:q3Y,q:Gk(f%+qp8IIO@&L*Z6:d^$UA=Rc^m#<9%0u0mSM!E!,f^=
+@*S2hbDYZ[nC%HBAI5T]"X"^C&DGATo[4<B!\[IMd,L?&\08*2"V1eAmrh8(q%/Z%
+!79XI/s-VF*jA?f%h34b;#(ac%/KE*"-G@^NI_Z0DZ::$'P*=9E<sE(@2/lG&eR%D
+&FgK0a>K%C%?>QGE=WiR_[qD\8J-,'EE*_bn09V#(3,00O`q?F&JQcm..KS!d0TG6
+OS_CH(@bKODt+b9H;Mpj)DDO*0teF/3=sT,fs(\ln]W0'i>PQ6%?Ztb&Yf:;(Cq&(
+![s<RY7hpQN$@aA*!97E!tu7:!?M>E*AN#bM.%Osm2N>1#`iC*K,Y=ui=HQI+35kR
+NUmSjC^*cC,4[H&E6u;c3t;lk,HqCsn:DhRRfr6$,&mnTP#WgtUCcp-!)X%,DuU7V
+I#/En#I&C_&:hel@i;S)$urI!YeLroO>r@_-ZK>JE+U7Id-a8&&Fue&UK7e[k7/,J
+oe>nDd]47k_&4s6.oGadYh]/O%1Q,[/TBMU_\3Z%/Lo*t(Lqt##bqo+2(d/g#B/EO
+&1](_isj@E0[UgO@hTH[#R:rI0l\NE&q;U_^=!Z4!3b-2d6,A].fPR'0elB=$t';R
+58WoZrt@s=ca>Cm*>J)o2/j96;bBUopG:2^pd5Ja+EJmI'/pPF2XgS<o4'ZIml'Wt
+cpO&n0KUrVHN<YtoFO8Aca_6f3:mebM(^SEYBpAWmO8[8gl=AiZ9Zj5')Z@p168sk
+_[QDTV*-Il$:&S&PCYi[__1KEo+IZYm#%%rT0;Wt0N7K5Ns5h"mYMSh5YaNu@n;Fi
+(<i!8('>!i1`7Cb%+URO#h0"<e!WI/EB3%m!f2spZo6t7WC(Pt7!')/Z5H&p5;JHd
+6M!PDk`Io*@6/K3jAW'=Zss`D%7\W)6*<m1%_`-#:uoru+g4`&o/fM8)+8;4M%cnE
+PascJTg+VD8G">2oW:]'T(R12dLUam0*b/B0_b4)8<h1TFATskLI"fTpXCV<<8Bj'
+>t@ae0Me6)'\*n2OU#u]pN-^8JeLrHhb/f%9s8mmn%/-)f18h[$<6HSeG/XBpIph;
+:sY>&&W]g([eI/r;7+46[0o]/5rZ0(r+Sl!Na#$'X#lO`:)-o*FU(q=]#>'=5;SKo
+eP/[O5sp^>6r_&"P\Eik)&83t6hGLl;sQn0]id.\!H5;7op4Y/eOWXs4VapUo>=al
+9j9KHM%]2He5%7\Y<eGT3L-jC1g;R8A;M&O7.]S4c:(u/']\l07Wl7I1s&6$2dI0-
+9sT[Ke@f5\78%a"glle\eC@-uK3f;W9U4XHeY,U>[7up#@WiM?mCcC+`/8Fs-I'3`
+ogrQ`)(QAA9[sA?F.OP@55DKoATT-eFtt[.>@Woe.o6sVD4P;3:=[7>jO8Hf2,uVI
+#>OnMes23XA6VD:Ma6uW:K+@8aJiUVGefT6C)$hF2MGm&.4jk0aJa;p#j@*\B5,g%
+30/,&QD&-`[;<c``iUZ@G2"c1c"kgeDJ`Mg(;T%+hT"J^D"DI&O)#/)Tl;o>(B@u+
+2W&G]gCDe7'l8d:<r#clf4c$0fJb#1Xb1@!W:eb"EtNRTNZ3'6.lB5%=YF'!QV@t@
+0cQGi06]^'(B2r&0l4=0b`95K'GGZa9&MWGB%.s]ei.g5bpC8aG;6pYXkM_lTgQ\^
+B/c4\UPVJNo5Q^1*Z#bAQ\T'pYZfVoH<0>PUfd(DF%->8I!:bh",Pc"mr::_FI1I(
+/k?0_a_-j,Q?JsN[m`mp&TKb[(fkL'<k0t%cIpV<Ho'.!bW\/<_grWAJTDube9'78
+_eYFt4OVa0pQK[n$\;@8:dUk.Xg:/+<'mA(jF^6R/R=&(D1*6OIs=mg3*h'%@4bSN
+jgW1Ji*uF>`5gMOKbumI=4`-W$&CPILiaWdfPJmX`=;QYM+ujVf5/tsTm8GdMK`o`
+(n#gi3rF34KfHU](e9JO(=^h=H>V$3GJZ);J2MP7NEB,+fZ$Zg`9ZebIoh\%=-F5@
+l\_&kI$h0e=T<b,;CbR9`sfp9QYg6c&UZKdNu4XE\+LdZl]I=@e$AQ'[Tb2?=RC9n
+eCSu-o__H9SI?AjD>=t.XF62>Fct@,r67<:c2blR^t"GKPH5$7)%TMGEKrP,JU'h2
+R8$L'j-VG$2V(kRH"h&^OQ!O`@gk!J2X80R0cCK^pGXIaH$+2ta`.'`QM>0UPr!CS
+V4(P$1@7.#A!<#K$']W9P$+U>\"T5a&"YCX"Bd4i[iX6`nWo>Cf+(c1RF7!E<nGS]
+M=#bPJ>h_3WWWJB<9osGL;I^UqF,(b0aJG1,9E0@6_P]?$0:T_6l>;P$H=;'LQ!]>
+lnAjPm__:Tq!B)tYEmShY4TRC<:5;&K+c4aSB[L;g,aMVCqfjoDTVa.k\R;u30_a8
+M2BHkV`;_p)JmsXH);LEa;TTW3iL.]XW!3#W3+^kHG&moJZC@IWpL9k&.bl=c)((?
+nSCcaY:#sfMSa(?TRocrm[E949%A7(MH]dM(>#bdZ\'1R6nX7t:;Tgul)q1RfF#R]
+Xbc6N[`"U$Wk0]sHDdmW-H1;iYjJOD9sq6XCtm83+SrbBHGQS?e$'a_WGZtB3p%U]
+E7`1,L!B5nTP_';.,aL6oD<^oRo`/WL;ho$Zd'c_`Uk><9^KPu#+K^ge:G*3$b@:-
+iB+$KHT;Q'^Te`>gIPT2ibX$iSq/NH`Ro4nqP5flah%Td]mGa2iZs'og?BeoUQ%^Q
+m],F[4gUXL]cn'']"c#J]tO:),HBl[NOuatUA9/6_/.CNHl&fp3Pirj]8a&DHjrF1
+0=fg_`]HrSRomkf8]!SUWQl(`>6h)&\ZLqCVGf,BY:TGS>q,Z!`c$.8fF+cb3IjgB
+/6)E&#[K-fLdI/]k;pWagl8H6F$*6'L"gqI>b(MXE>>!Z/o;'5goU)D^EJZ+].s9-
+U(N;;<'qiARI@&dfq/'<d9A8d].s]7\Cf-p0d&/;5,1osr9YbKN7^+2/FWtPMt$>a
+mtWWIRc@2gq`,m^^!SRt"5:aJ&!qM=#n/&Ikg3&:cGoJ&.)*!kN-ig^O>";[IR5%u
+">X(d>l=e2+'.lk?Vf2OrESsM@?[6>]\$^!/m/C\2k0;<XEedl>0#3a`eTVK%(jd.
+OJ0FZWR_LAcf58`]k+ua\_*Fo$b_T1N'@"JdG$gXgO&tFSZ.+V=-ENY)84*u;gT&p
+im:O0drTYM)``;Md._rc&cHnd9fG#9/_Ddier/iId2:>R"l::('O<FLZ"W-ZW%I?$
+iF3JXoo:nuh?K4&(`a]@;,ZD;BAkB,2USSS'+<k!!Dei_]^Xi:9BkFn1;:I-j_6di
+S.,a$S%<R,)r1N^Oe'i3Y`m^\kC-oed0\/4/D7OS0c&U-n^l7hG1-`'*IHrmQJLPL
+#L;15++6^c;E_@:Bj0B"j&"^uSO"8:7I0@jaAO2/n.-c#-^h8Hdsa7)@\FA4i@Z1`
+dum8]Sp/\P"uUg)H*UN(4u"N-^CQm'j2`b'rorhlGLEsu%A+O,Ih/[U/LLFEmZNJ8
+IgO`U0.S;".JCN_OZP%>c/#[Jf_%de]DqO%T-i"$o<A#3nQS7A\MmFVo[A=7<tPn4
+M=d!e0RkB.h9X?M(GHkf1L7OP?0RSP6hrOoiV@9_>Q<JW/+QX-hq5R9INO=9-/LIE
+'P6r7FpHk[gbh]@3$5JKPA./WCHhT%ifj,u':JaR1Gh1klZ<7.[B_f!]fKIs4&^q>
+63&kS$q>k(!ONb"*"9g(-kO=/3>Xr?JC9r7(BYQa+Rt7u4uOO@_M414(sHtDN(II<
+0t`rE3#YBMnOW;D,rRPOiNh-1,"Xq]NFig7(q=JcTFNB5g*J(G(PN<qOkQ=o+?,Qc
+jeHQA.[rqt==dI`A=fb8S^l]JMQl*RD2;8jeKMnH#Vig5@ooXhnd$qQgaa"r*E"">
+_qV:jM1*HZ1Ss-m(b;[s;Zs*unPT`i@^%\nht/Z#2<#!re4fD:XB%T-DqE&eEG3A1
+@Pthsk:f'LRsV]h=gPB9/B9M&j5qRj*GFFYEZ0n=r>9e2LD?cuA"/iC"1_MP_5)N$
+\B>,nh0O:_+(j]8XmU,>n=MYf[Q4)-s$+85^AU:^)s6oDX'>4i4pnY.krUK$@fWti
+g[+r,:Wq,NUQ6r[k.hJ$#i<4pdtIlfcU8]U`9@?um6o5V;UD6n.nkOF;4Bn`5:A<F
+%jOqZ)[",hU9sDZOrNtX,>A"Y,bU-uR#O\rb_7%N8Lkr.517&VU:Y+@IetZE,\8[:
+1&RFZ5REs+!R5XHjJ#'R"QL6?YHnf)_/[[5o$;5Z#;HFF%)WS%%J2M#:@LehV,:!O
+r>*6X^hYLL:D@XB0EJ8U76:!5qVP6C]6p/J1g=GY16(rdmB[tA3:Jo$NF)P66*1Ab
+3pp9!hcF72-Ke5[K5_brFrIVp^Fft&!*7XcEm3,.C'Rp+::7'2#<'286+_:d@/F)K
+5\(]kD9U+B>h#L+FLT^^[,4\oh:"g:(Sde[UA&GDc%3@!Y0YmbW+smj_1i0C,.J<N
+G$MF#97]rVQ43Lbo<oG=+W-.5Ka&+KKU#f0r<7qnq''[7:[(mBO&:**70L/'^-(PQ
+\Um+TglaPA(eE'RFWY.s2Be[S2+A"/9,X8Nlt4(eS#55ODGQAXZMkdd3I1foQ/L*F
+I-P3FIZ9cEg2t;cC:cqKY<5d=]`DlZA)fu4PGM?ed<fHs(f(dhaZi]D"3"#QcP(*+
+@JN/sJ8;e$h5>3QXYkW`'\<r?EE]I6:1]\jq58<%SnCX/[j<m%@+CM!eP//1PJZoF
+/PC+BEV>sX+r9WHNFh((=)is)#\VZBSfBbN[fN+`hKN-L\)M,QfO_bSc+mnIpr^X^
+OG5\OBC>Zp8%aD^3,c"/?@MM[n7,g/ji_-5-bXkTBRbO"_RMi$XB`5B0gosUPWq+d
+m2uH:IrDlTO<ASBJWpBkT]JYYp_F,FKCUZcc34hjk/)\,*%hbF&3_nK;]kg]K('Wm
+6"ToqiE/'Vlfo"sB#;<Uq'H=UdKc4KE4Eu?-3i`F*J+QKs5>JHI7+tpZY4eQU0Ja2
+0a7!a(:6@O,ZPu7('?GhQM[-G2`Yj"-UUuW=CKD/N6T'A`>F:DU=<+nas$F:EmFQW
+UbRVC;@Q-`3=h7r.?+nu#90$^+Q@JI/hf$eX"oAO&Sqt2%+4ed#&+=<UhZ$R1-rs[
+2@(FhNWq+aiC(dV*[#`rPVFmq8shakgao.KYuXE=+pTO?Co9QF[J)bN1/q\gb'PO%
+_Q[,`nCqK`+n&k>R@0<?k%"[#@*o;)<"e^<]&\&$BlYP46T30[s#;9AE')am?<hU,
+;=*"Y:%KtGTR1(;9F`(.p>!8,nqWgWFR2eegH"2m).1k?#0h6ZDs#LN0@U/fY)1r%
+Vm@^_o=Ybu8fD4V[1sqoM1&.[UH4e^.!gW&K[/Y;K;g-WU^WYg002F1-Cl_7W;_dO
+Z;EZFV);[[1pg!,RLIt=g`dI3RNqZ2f?9]LW5-]<!76B6!,:76J@4qgdmYi[QrG43
+E&6#5>fVX3<"*.k'ErI&)FL0/%De8a!g'?!Le/Sh'%DJbPGep#V-!bk[)"@n@ot5m
+7L6h,&-O-()lmOf#dlY*<Np%?!<kYF.f9iX-`@:QOC^r_W.]a&Nk_Wg6F%$Rc^*1]
+i[f490h"?\&qbOG$:-SXQ@W8&gLFqHo'EX4QIjk_!H*dH/Iim\BEAP$#K`Nr3gQ!A
+"u6_t_FSOKTR\3jn/<!UAW!WJ6H?kL*Y#.J=TfIW]t]I&$3HT6%&&V@#9_k@_iS:9
+[N#M(R\+4DouXZ9W!:uh"`KetVZsT+7c2B2J8O$JZt'NjZ)eQD/_.(WjgPEN]H_oC
+^&PhN569Nno7ei\8%Ad2#El!NdVuKp`41^5i_!X1>!=CP9<?=dg>?m)ZfD=2VKZ$d
+ZWBH/.D2Qfq-QaAfA<AQ@$mnHjBOod1/9R$='lm$;E7XYleJZYll-[4b4gIA6`J"t
+]B"<aR.4;obZQjS_JGm9Z)(C=q,A;u9Qg[l^aM0FK)=KfV1,L[VBNlMhr-n#TP`P$
+2nBqoOaQ&0CQL:Uj_0DaXL!tn"^qQP$F\hQST6E($deTo5\^`48i//r_g3\09C3[X
+Y1A[f5fspVCjOuZk*X?FlV@UAj.DL&-J*pc;WIWrYB<UUf\3XtC@*&ObLX><ontrs
+]BQKkk+U,u")I6Y;Xk/1qS8SI".O.3Pq[C,Z22XI<[H4tYQ6'%`g\;lbR;'A4poCm
+0.CNC?b.]ZG9HsZLLpF`Vf2hA\!FK*BK\M.\4J%+fHM'h4@<tk?5:H75Dpn)('A?W
+e?h.Eaq/>AAo-:oj8#a:;2cN`q-P9'C,G1F4'eNTT.9"$Cn#GD>D@t&2o=AG(6Qm>
+7lYJokT'>:o?M-qVnYqP>c/FGI\kC`00.o!+09ReGL<Y`5G%dCQh%;[f/el=`CXU]
+_-BGuHXC=N)7LLM^!&c_^-'-=Mb@]"0rD$@:'QV3gNKb(e[aRkj!5kbQnIL+ZCZ%=
+#)cUFNGFjWk0dMFkom0Val9$J3pJnYXHDC!CpK)_nd,_bB3ao4qu7^@*N.>4+$nYp
+Vk`cghZEY'l0;#u%e?*qbj\FIDO":opp.fkr0:98r\p_!hY-=WN=56#(Oji'^B]!(
+6X@&(guc[Fm?R#1dU'uTmX@@e&\F'6G?oRO=-OJQIL5?9i%bMWUA]N.+oZ[&h$o;?
+5LZM?*!%u;7R!!G5@Xp5UH=$@=1m"W,6RA5$N@i1nA#G?^a"Y#e&OE."WD`/ZK$Id
+C[<^Lqk.a41^"N._ZrJ<%Bo+7_"1&<,R(RI#70)j\H2B<g^:4=Di(h$62OKi9,teO
+)7F&o_$aR)";3TQ*B-X`4X;*j>U]r[+[W7S3d^ci4+4r<N^-b/]>,*]BlZOlV*H"L
+\!"?fqsd$A/NKUb2q-8@>U>48#9NLn\VrC("?jW72ac>q3da.N,Qtr^LbL@lYH%0.
+X6dU5YJ_+V])/rbj/>A)5.F!2Vd%*R/5<`lZ+?GSTj1BL]&J8@.69"WM3Ljl&g!7D
+;Zi2b^UmX];MMC@=i@(#5Kg"AoDBPSmm(Dj\hmJ'._@;m)iq(15iL54<!saWr\*MF
+MC`.(oP(D.!?1<90TsStX!7YXB;ST6*aC._q;n2UMoINm`uK!*dCLj4Yb#(%a+BjM
+UBO/_Q&1pg,"%Wb]Qh;_0sUXl8->jtEtJGYV5pp`!Qff398H,D?4k?"NN@?=ktsru
+#"Z&J0(`tsjDblML92X+'=,4WdjmbP^.C.R8O1A:YoK>\N/FEta_Z)h.nD5nWl;%$
+N&.WYe:KkuiCOtZ62ZqT!V/XOijFn(/$u)[]PBAb+3>a:Q]m]*Zm.o*gGP0CX0C6o
+6n,6Q]1(ea`Xq.;iBbUkWCh9+N,5VuObq7k#s1MWQFe?`oUDE,Xfs6n94N>`5_?PA
+FZXY[a0_d&j)iFqkc.U]bOX"=;oLZ,#tb;jb^0LX'ZW=G"\ae\#V0Q#$dpcQ?qfq&
+O7OkkSA?i1jid;Fbpt9Y'Xc0_:s<qebok3RgeLPu5*cJ+OQ)lH`8*fF:/05+bq!G2
+1h*%\dnK@iakNc>4E3EXk00OaLa[m1b`AX.b"S"E#UIjCg*Y*U*LgTtZ,qTSh!(pC
+*6e!f0&2@3[($[;o1'At7mZ@=<;4\La/5*`&kV(T;Pc;$_FM\69e>QW']V\5R`oko
+V1dPP<7B(`rJ4G8$OXn@/%\>on>Z$r:rIb.>\pOTa@gXd_2Sjnm)lj2&N23)!M#Ot
+>nb>%EQek.`VUCTbg]J6)U0hU((Bc]>k=YfJtu%]UCA"u9]sN<kfaI"-++E7<?"LY
+hp!^>[?2)X/>(47j-BPjd_RV8Wt@m-Of>B$]2[n@']r%4?IDN&:&pVHFZ$Oha\?lW
+b\\$9XY`tP`_ta47bN1<UaXIZZ9Q:i/SY,V%7/2`Xro;P2b;ZMjLLo$a#r;`9q[TV
+K@3RH@_(;f[H.$<9hA:u(K$\&XE:kJ'Q)%D;U!(;<CJ+][*,W-]@<S=]N%[(6]Xm"
++Zhg6agFgNI9jHH.ajhr]8V)7j^HJ?OjD8:e?mW!,I^$O<4b9KR^HhV9PN'OmFDr-
+T-[XMSS?YrM:;uP/Hj:[BZSJq2H?5l;e9TC<8^f*7Fnf,81dNeOO)6$eAi61=2eWL
+7-[d;>;qgNN/\*;m$:>AG>RCF=7G>']`hKf"\1^[0N%&aS9Q*7B3;NRfJ;jHeIG^H
+m@?sua68-)[!p:`8[)3X=KKk=A+!Hi$JBND:CPO?-(3FXk#]5=aaHfbe6>VsRRZCC
+;E^>f6pt'uU=dtYTtO.JQ(1j\k+:[;^29^Y4Io%=+j=K]%TIRA@@:5bc]!gg3H3']
+7/p61P1qjoaeWa@P]9mo3D,"6eg3sfX]RLHCfR#k9BiHCA$aZBCK*a4[d%:%'Y2u;
+>?#^H)JS<F;LQb.W8)JCg]X@p0gSff^c+kG3:_L;h8[ud'Y3&F8$oa2'hh1>`LH2A
+>`2om!L5KqerTDn8=8;jP\JrB7U4]V(PB[;>1*aPgJ*h6h9@TN(stY)pRN;H-r&_o
+.0hu!A6s64[H6V\H2YohdBJd#?0,p!Q-IUJp>5G9h/)IaSF4J'4O5&&6/5q1)UMgk
+d8*^d?+'I1jka@$Z-AuLh.>,4h:0&X,g=6\\!?krK^)qks55d.7k0O)jDpc%e&ShM
+'OtNM%KFJ>g!AAu>mu,=e];.W\kapb`nh"ll?hHr`a2(HhWW?n<RjTkmU,mJ`EjCk
+K2>h]3aoG;9VD]"%3V`fWYF5hcOM)Sbobpj(u?]60&2MmQ6k=?U>J)"+?gaIgg?<%
+N^h-5hTdH>q,UbV-erPb:$glUFJWIk`l`o6_0.Z`H-Y4#X=bOM9#;S([Q%_S3S9/8
+<(8*3*-W0_b[RrT<;$9u/j\NF(L[Kle92-tE]dj\@cV$0>6/>0`4k<.(J?Jd@K"q[
+7GL"2EQchL/8S\T'$!+8;*Uk=Q:k@M9PHr.An?$Z`dURfL$*!t<4k<C[m[XDP`Xu7
+[UZ)Mh:4,hls%ZI<TB!uAW"LM;u].BhWAr=`gg>9CuAnlU1RA%XHlfIejj>L;eF7/
+7rTD("CsQRE^8biLbhS5RcNNdo&i?f2C;AK<d&)HHJRFhB<7uTUk@&fdRZH1AVL-H
+</41;Eap_KjMYlu%*3!q,>u_&k_<P[L+bXrj6#30&l(8r4UI%\No@-V7D<PN`]$!f
+1$HoH`GUSr[8#ifQU)"g1>[RoSI*aA_nh@q@pXmmeOSb&T$In7b_BS@m"B(e`bBd1
+4?Xus=;t.=>>foS8WEn;9>J[IpZcj$b0V(cl(7)AZ>0*$CBdq"jK.L58S@1,lTm:=
+KW:ji;sSU0e#\Vqj`0-0Y$uRa8h7f]C+F"a^?Q-0:A1qn4CWlK\Y?N2lpb2q7]]RJ
+XZr\:]^u8lK=>F3K^7]S8qt7D?>7q*[Q*t[aU>+c(6Q]XFD0^\?&^g\%b8i/bI*Yf
+]i`-3hT3j`CpnKG4XSt+%bKhah;-S6D*h%c</5=i%Q&j87f3`gKQ"=`k-^-^`\-B9
+PqHsM$Z(FUkFU&g6Xjl<;;24a@B>=K1KeWCm:O0XkJ[,`(3rj@oi24P_-Q/R^5_RS
+d-nF*Y!05\r"if(r'bMh7eYHRo<iM;&T#.$MM#&/rSPT,GAqV!`W$%U[HDJ/F7?PH
+W(cd<rcq%I%`Q.P1Rh2.[M`s`)/a>QD^8QW>>NkZd,FKp]_3Fck87+jp0mP`m6*Dr
+[^*%WbAm7<aH%?YX#b8Gd.0*A&g"3q9F8q]Ao_s%`d]5n6ts#gcL%eVD8s&(rj_O.
+/oBISDAKCrs!ZC"b;E8SUO8m.ZiJ/Wg?Rsgm0uVUqp'80d-Q5;e;j9t?C*cR@Q#eF
+oE/Dq%lNUd4D'o5eIbJN00[2_5ImYY\FLJ-FPQMc,Y"8+k%@AnX`%sX8o5NqFT`(H
+7oAW>8\8U`f.&SajWEUq.6<Mk[H(]e^<C_[kk-RldGIOHmoNQWk@:=/:OccgN.`E<
+M00Tp,l>&Zb/VWnAu'WBk?hn_<d/VHj_)NF2$An2e5c345Nq!9oUg*D[q=pKSVYJe
+8r%NS`3kGe01c+eaUDhVPnE[&,BLV3Dqfqdrf9In8a/`H8-S"24&:(gEHR9Z>6`e<
+r/%*Wo5r1na4TKnUkT:)Gu"s/`Or[)elbQcO6s\HlRn7lB9CIEL2^d!iQ$7Q`K9_`
+Zo_<qmD!7*B66aYEj\,PlUI(/%ek)[X>?K0ZnEs$r1nAJAi*8(H:E#KbRF6DU&!`o
+E5+X6Q[3_^MgCWP&"KH/S-&/i6$i9J[9&-)GHu41Cl](kqX4Pn0<Lt4gqYBg4gir1
+GIbNM?]YXt7\@.lA(YotO-!l[HcNn7T2ajngnQsdmd,-Krt,(b\jh1^mTZ7[Q^8C#
+<I=pLHcO>nS5Jd8EimY"r)=/1"(1PuW;SOW9/.mo=1tb4cg%Q<h=IXpP\A7Tehi09
+B.Vj+QKS39NVX1.7QfUWa&RPHDgeMaaVkAm5NKWChGBfh4h'Y"6;PA:lGc'&PS5e<
+j4sXr7n@tt4'+fL(Y!IIidQs$7Z[4-Ajhk"*<.'%G<b[i2qibGXXogo]q2P,PLtBC
+*!cPSC*5D:7Y?i1#XC-a%O"YN38,/XLV]Yr1!C1IAr@,;_^HACD](IRA+C5Aeggud
+80MJfPa5H"KoKLp3.U(.22'+?'-YR\6T,`VV_I@W0O[2(;CHU2d8$/EV9gVj8CSW#
+$BP\^,F[EsALjuZCibK(K#8Le<i1u$o`DTo)VOHN3=+=DEjq%2cru]L-[UbTiKf%n
+^gUIdi\=QOUfS4&OCW2F-tZZ8%E[Ap[*7n_Bcb<(oL"TB5=@;be?L58?B7u=Y&'cB
+rN/G*O-#>YRU(sQ23Z[P1OG%W'9Tua"*MK^PY[8b`8.a^5)!rm_VOT-H*6Mc_42?Y
+,Sl4!<r:A:=S,Y-hn&F,l?7UPh^*U-WSr=#DsI8B4"JLeloHP*$M^?5M@0!1%:YLf
+^Pd>KPq<JmN3tMoe26"!JZ>mQX,sCcrBuTd9Sl'=,9mK&&$/s.`%b`u(WM>'B$r.^
+,JM[EcP*Q*X0<9u*6<q@N5n:/Ro'p*.8oC'8aC[5!D3\;G5BAKMr<b\Lm,"<WXcXb
+0tVJ4)!8s)jK+fJEc>E>W@<Hu3A3#G]Yr#-Ur9E2NSJW<2A?;l`NdP=770-Mgj_:0
+WBs/H;<`KD6;DW\'1nuu_k0=$nrR9Fe*b)Uo@/_P"Oo32'g4ZFb&V7H5.-)G$bV;<
+(mrnBe5]eX1i(32L9]3O<EOB<@cN1N_I$GIE/fCdfngH7BeA;Ts#etKHK/@:NYl7p
+#!o'ic<Ms'.s!IsV:0-)p<1p+Y*#r(GrN3Lm"sH*b!CD1J[.D13e<4sL0uQ%#eo25
+U[MDnYW<]L"tm>.gZ!,$M0!(1Xq:27QNPIM\G3`!qHV@0-]GIcS_o8bf#>H*37tS=
+4C55@c\+RB]Fp4Zd"5)okNhPP)!D[2-)7^5`TmrqR$9V/inBC^!*VE>#0CWqc:8_J
+pRl$"=#ss2Pj0+)_''$9S^"QUZbEgUL<aYr/Yl:+A%QA89s6,8[_4]0V>KrO+U7Od
+bqj4'XNdK`)r<-1DOaG(jT[NH-c#8/Ik<CRf/3UJUH#_M);__g6*3q$*TKjiSHD%(
+"uO\HY]\M$=&fJ?ea$--G6`PsclpBu7!P0PNH3l5Vgj9KRHCp?jPB5=Z<%rn#/b1W
+2mn$4W2:/,Hl`>DOo"q[[;rFZ(I[5:?Y<+-eiMEdFM0nbqk8FdMsqksJ2M:t!gZaB
+#W,e:J/O]H5SXSS9+9`8`L*Ds'a#9^"T_:V##N;["-@F0iQ*^-cr(S\:^m]6r7F:(
+A.D@j0a@hlSH8dp`6.Ri%&@\S5QF%]^hbN4&@k?Lib2YSX?Hau\;)a\)NtP681:=/
+-5/q#;^.&NLkVQJ6qERW8/tf6_8HPB(^1c/RMgg0Jcu?68diL,D$FQ&+pRNT'L6I5
+J.N2G'X20XNefMQ0JWn8#Ta@]N.6GPTHcc'g)30V,D:$%'?D#9&YaAOL#a^U`JDhV
+U84-6UoD\Z;?moX/>A+3![/3@8Io6?6^8:%:`)a6.H5UkPqn@9Pf[hq,(MF^liJY0
+l!-YegIINM(+B??<?5L9G^tq@fn'3=EMN^L#7sWtR$f$&TDB:<dfNFl3JS:r'WRKU
+Ks*i-QQ;_-G^pp\)A"p,!oR`E:*`F=6"RnA-JX_TM/I9#Y]2oD"TOl>7Y=HMf/$nV
+c[cDNH,ot^hIkmpS!(#>a`s'Xc4q7T'3l)GkrN#4&V-:3hM/si.,jCs4.<M0OACs8
+2Q4!FP)UA`P$0jm.E%pU$kUu]BU_dt[-X41WNX6`#sBDap24h%6dN=>s5]nDUL<0A
+1hI4eP$t;i<9Aa"g9"4cAF?:+_4qQ&,t0;S(l7,&`RT:@>U??QX0o[Ob:,S\/#lpS
+e><5E.#s*5?mpHq<_-4]cO5\kEg$L_`mOXrA1IehZ'Fs\=8L0>@<?uE[MkT:Rb]<)
+*KQ%4B^!R[94$]@G*;HcKNe19&S5g`QWD\jX(YBsUZ=q30o?jli'@gG`&`[9qB+"0
+Gfh5@=gti$l9C,FC#<p-QO71!7:h$j-)=._G0S?u,+!<:mA_t/9(&*oT/Gp<hm_36
+Le#St;_CJu]!ouKh._.UX\>uV(S]L9]CCESd48Ia%DP/?)/`'l#I_Ro#>9pj8hAZ0
+Sl8Mka=<Ve.?)rb'O2PX8?IJ`((;B(QJX,26[kq3rN*9b&5NsJ6t`UqWY=U8<msOE
+-k8>Q`'BIC4FKQ$Fqhq#N2>Q+ok8=G6,=Ad-X]k+P]"33<Z&9NA83(n--f,ef]JX;
+pJ7"*)O%_7P6'f.M3_dl0JOoL0/)+'Db5XjO2hVh\b55WF32S<)>,$'XH!]!18C]/
+6>Sqq=q1!!Oh6db-"h65U_lKR/9cF4Bh\\fo%o$&!9C!(+Br),S1VXHg0mT::S*,o
+)-f*ur5jq"RjpN(e'!Jn=n#XZ1j.,LHD7M,rE620(4K+XQHW6SgS[e&'=6CAG%t->
+]/BeZg7&Uef:2fFp:do<"YFn6e<s`2CiA$%jIV`5,q-n_f\I@PoPXQDZF-jnf(jP+
+^AZ?c2QW\2S%F1:BedDFhHHltL*Pp,aLHFWm*[qlpXe3p`,s#>iS/\d[>8+kA.:<A
+YQ!rq$dZeqL!..kCkZ79l\"[R-KKHLm.0J])$'_8]TE%/Xkm,-_3-V:E"_-Fr^.%]
+V=Nf0No!d)Q[F*Wl-ArPVeb@*>@nSLWFX2PlD2"!<ua`>]jT*$l^cZoP<I`DW@mi9
+_qJuA"=\#e5>IdbfHQYn-$oQ31bRf&J[\jmRl02I?Gk]>MEc8qHc#80ZQH[NMsIOj
+0(hWAiVG3kJN_o6@$3eiS&tGd`(@3-U)CANICq$=)n(!04*m_FX1@)p?M-fBm+-BQ
+MEoM&8)e_BrRHtn*qnjmInnu%(C=S8ItXWKIIDGoba0A28]'n;8>;2'E'ER'T$Mu]
+DK/`kc*BQ^mW74LpZ&qnn*:QlWKlua7EYXu*QRPQ901!cV3f7"*8eZAY2;CrDu-N\
+g?o5IaA</-9^9;[R.l[NQNP7nNEi,oMM\P]+pd%h!rOQ&/<jOYm)\%cm`amQ/j07F
+!m+FE!bDM67bWJJ"YHVK:g3KE49fQIa091Xk7BSj$?GV."&5Xg"+5WOHmN_oCaRdd
+Y\aC/CC(P13MQZ\Dj%hrCu<R'2o=p)E*3Oe56tq,$W's-%uCF.WesLpO)M'(nB."f
+k62-?eZ`R7`kpP-i=6DSX!eDbC3]+op8LmZKr=#"&'"guFV#*`4C`c+d)_Tm!`m\W
+i@s8l-U'K7_Ia?0&l:XBVkF9Uh[?2<&hq=9d5qd`ZO+mFqTtu'0hVSO%-t/rP7A`N
+0"h\`86uiunn8O;%jr+>B_nru(8]IdcTlgg8GHc=2p[6C`(mOTN^C"7#]85i:lb6h
+K,CcdkL"sblr<QF2YZ9qg2XPk7`%W)I.qHf#]DtUE;o\X%gjtb)_a&gN"S\'<>c-;
+2p/d8E2*6WmfKcc#EcbBE(K_Cru=RiJMB,UOf9E5Ws=Td@PCY&LN*HS]W(HB!p+_e
+aI=2H.jGYCpC4#FOsF-@Nr`,."V;CU:Z>ZAI(k\D,sib$L;NJ!E0Co1,>ngMX^)H4
+i7a:@p9JlG:DYD$hSCt!D^h!&a9]hl?C2@2#=oRYO=q0D%W_-8.0h39:AEX=,-Y[*
+0J]FVZ<%9/^Eq7.JF^_PN!tEG=XfNBrB^pRaJ:cC<ep7r/]`CFN$0fn74lmD+gUhD
+n>Q[i2Yck"h3/%sV2d=pr31150@3E@WJi6f(G7J$-#0b.;V^Um"Z$\a^s/=>/.E'[
+,861*Pu$,N$.C5",quW*nC'"?doucJm$)Qh_6(ZC-k+id7e1S_noI5Gds!3]G9R],
+XlX[_ng_JZ:+"GQP62`=cTsS?'*E8B/^J&iC`rFmAL.jPSha@=o=H<rr:f5A-?6m\
+7ZBOZ\93tiqCpG_O)I/,U4Gu]4g2$3PD^`*]W(I-5>/IJO>eXBG&;%)5Z#?<OA.^a
+%iNS"b3.Kq'H8Qch&as.*0&T:P2.>s/qDA(m*X=!1clbuH7bqn%5P78F<[;3OV?ag
+!q\?=O>fP*R[d:he^S3IZtg(,=Tm5T`J6i-FEI\'ogfOto>X3dlfgk*V\k-QViiW'
+O'9/,lD[aX#Ues]e<q@VNCstZ8*h$N,%XDf#rlt>U6LcI`^D!PlIsP48b*0^MU=>H
+d]F-[mM+2>[*:36Etkb(8J<[Idk+0KcOdJ*7b#m@oQ)c%[5&5^r@lYhal8]:57qVl
+Cb/RUeLE(,01*'&%^_u?od*OrVY2jLSMTG.P2R=Yiu:sZnBUo02-V%X00j##;O(ln
+/Xn38QT<De;U]hdF+mVTX%[B`92f7t02D]"de*#8<f]OLQ!U\9W1GfNh*Qp_<M*Di
+X&@EQ!S";<<*(%.0hjOBm*e@@2.JZ^d'.DL/Z"LuFHJ_o\t1S&>-Ydto[<WSD+aKl
+s%<W62>[7bet+PI_'`/&:D[Ec<DiH'+HlAg1i#O%AOY*[>da0#O98taPnTC1%5bHn
+<8/ILgJ='M7T(e?NS,/7:9\W+Xqk)/oPlIa<r03F`<O3bp1lSgAS/&o&TBa(9BcPA
+Ahs(42K9+99p'+&$"njrAYpg`2M3ik5ACsk-$H1:G(E<954d?QD`2;\2H*<<9#NL+
+m4^7m[]6GDP3rGT%5.<jOU5fDdbRb7s7Vi40Q:rB-N?I[DcWnj2?Z_F95Ve0oQH!F
+(8R>Ii_.K_'UInrp4j@UNAAf(DjEX2f.02IgH]lLB1^Qh="eXGBUq">*er8c[Xg4f
+I^uXLBo`^C9LC^]b;7GAEq*o<W/2QkEiJb&Eq>Q,e!.Ig=$QF_g2E"&;8Ep#k?Cu<
+3nK!FbZ/pbdp?+!1\Ps9(7ALY1ggudEf\UgPG)q/gM0U=$+DQ/c?+GGo'mO@3Nj6G
+F(]E3"+E!2E>LJu[r4RAh')KC6*cGY-SK@Yqe:kT6;11*Qe^-Bkf!$<E"E^M<cqpG
+bCS7#,]e_!=-+b'(u!?9K2>QmdP5tu>uVXM<)GZ.;bHbn:OWg:C%_J>OYMNjJHo:H
++P8auO7e+pg;jO*7lX4Y,@uKeI_06d1oq@HOAu)O>A#p2L2XlbNd1jHT'P$K&%HUS
+AR1%nE5bQI>5-/rBNl^k1CDPka9o6.GfqFPNX#"1)iT?,(MGXJ,3N(Zp@=3&E`I`G
+l[<851GO_"E+1Ta8!!eYNq-Uj0XWaF+-@%n-$^:LNqJOcOT$GOB[_nd11qfa0/e'0
+m#_[;<gLf9RO-8<P4o-6mk'.?\J+HDg2o3;QF2f5>jXO#FnmI]O-\(t9&3Wk@9FOQ
+QsTK,BlRliD`LmG3=0$;c'A*X1iG[JK]m+$1PW1%LsbgO1&6sBPFF>\O>#"M6Ur;f
++[NVXS2al)pfSZj[i[8Pa>"!_Otd4$7gI]d*n]Dl1J<XH8"MV'OqL8b0*?EW\CgD=
++pX.aR"ln(B7sG'AT9`''<WJ3%'Xb'G-dZS=t9bOdWVn,-$gY:=t=Hjl(ef7*'-T3
+ianq*-_Ku@'B!k(oJNJs\YHZIUpT<^[nc?0@h^sm0$^#c<`,cXi;3:U"knU"g'\D%
+09"UBNLD^V33^Sk,4@d9R)[#7b9;,A75HW:ZB/&c>,\?]$`])LXAIbl3ZW<Y'!dpJ
+UUN`Qg=I_KYFXBDnC)BM]'BUt]9Tt^Y@B5d(2]bmC;idMW*8;YqBN/HIWoY2VA$]1
+a+'BVZN;ktAigecYI1[hH`tu1Uf4Tg$'ha]\Jt)qU,tl@],dZQ\Zts1U!qbrERUQK
+dC&g&Z;pM$<V*#j"/N3Ani@unRg/h\56*`K?TMSr:oLR4^TZ()q!*=DnA;V:>GP.k
+\[F`/'Me8E6)&1hTQ2U5':QO[P5RJ.Y^5n1Y`'dUHT9cp1q:627`)u'^OsD<L3,6W
+3+hO3mn#jf#VrNro&0CLs,fCL0^a%JXkAb_%^9jf^\EmAR'4@&MXCjl]4-=Dg_ha!
+f.MF+/N_uDODq60Xhc^W_3I7&'h)^s6W)($;DoMq(9T&%-7egh`csBmQY%e46V>3+
+F=a,-EP_r>4VRaFqQYDld:LAMg+3$c(k?\1Y+<\aLrs^/6p`I@[3*N:DdGa`9VR(u
+<l?-qeh!.n&A4b7r5WIJ-T]QGbVoYUPI&>OZcL!d_/,g4icCS_VmRN;^O5i(&ND.6
+X2oWq/<SB">lu-Qk(Y4Bb7X]pYJn]r]itQ8@W'ZBE-oH?hn[I>dUN?;7ZGl;B>H!b
++bK.tX0sRfS1K`E(1Q)m/>3)?2Tg&6p7f@ro7tjJ`\3Nfq*R6>K<X"sW&Ou.q#,5C
+,TOdar'%fW?)(B^L$@:5Q$f?6%qB5_"0i)%>X2#DErEK$?+aR3l9(B<,[IM:dAf7;
+DDaDn=/4<0A-E3>$elMrh@@6S6e0`IlA+fo1!X`;*VVlF'9.X/62#sn(sG*jh&qGg
+3Z]&%=M_Zl"kM`]Psn#RNGf-a@4#X:d#r%pWjC^':o-W;i(@!(K+g*IVrPH'8<7]N
+8^c,N*!Qmui/ptnd8f-h3n6_of)B,?%@UL3i>3PMm_,)+"fpd7MrOQ&<#(L7AE20-
+d>A(]fUf&A`8Nd*$0i,`F%#&h,l>;e#q+c<Zt=V_4Shp&;$:GdaJ2ZS50`*@69_['
+>JADnIcgZa:?S2&kM9)lb.ZA4aT^,Hc0jjq%8U0u+C3YM2(HT6MSr[^qWF];V-bY7
+K]+2+%j^$Wo041u^1Dsd5pHUM>jkmFAaA*)Zh4ZjogQ?%h[!RA`*dC`@ce6@STJ.4
+lej7Yo`c]I=NFuNb%j_4NMY0ST8+P\:16)&pYM-C``YG/>s+t"N.+<+/pL_1d(KW8
+qaZl]mqu&.8N)(#00c9S?.&K^'OYt'6KW25In>U=MiEIL/Ng*4hj@eq'E2@SBfrb=
+J7p&,!Jo*1+?"jAYVC+J"U#AU+V:S[`+D#`_r;n#]MN;YLdFRM+e3]n+,WUbT[P_e
+3\lQ0T^\@c9P-/C"%mUU&D@RENK!%`Bsc5u(kg8s6Q*QYP=pJL-M"`-\m5a^cY@T)
+V(,DHQ]3Kt)7=2c2k8>>FpX.c2DhX0L=>oL_DX0-=%5!^NS9pVNCmqeR\[[$CUhs!
+P++VsX^S`u.)QY1eq4RV`9#M-]F-N?]if:lC`YLdPJg?Eg1bs+9;@&s/C>'J$56hf
+7eX-)]M*+F]Og'5N40$L%EdUPorY@"P;L>@H*T!Y1L)^RCgeQV7>C9cPBUN$mG*W'
+GhL%u]a5C-+b>PPVS19Wr\9>u7m9jEHm!"7c976Kr4TclqteT'Ll:[=^5lqG+UWa7
+$5fG0CaK]9W2o@h$A^_M1Vt;S?lV(6TZ.1i"!GMrMM"_E$Qu[:$5s,K-to?mJ7r-=
+"p'@a'#`c`N%+r3&CNL+EG179+<U~>
endstream
endobj
221 0 obj
<<
/ProcSet [/PDF /Text /ImageC /ImageI]
/Font <<
/F2 5 0 R
/F4 6 0 R
/F6 7 0 R
/F8 21 0 R
/F10 22 0 R
/F12 34 0 R
>>
/XObject <<
/Im29 217 0 R
/Im30 218 0 R
>>
/ExtGState <<
/GS2 8 0 R
>>
/ColorSpace <<
/CS8 127 0 R
>>
>>
endobj
222 0 obj
<<
/Type /Halftone
/HalftoneType 1
/HalftoneName (Default)
/Frequency 60
/Angle 45
/SpotFunction /Round
>>
endobj
38 0 obj
<<
/Type /ExtGState
/SA false
/OP false
/HT /Default
>>
endobj
8 0 obj
<<
/Type /ExtGState
/SA true
/OP false
/HT /Default
>>
endobj
5 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F2
/Encoding 223 0 R
/BaseFont /Times-Roman
>>
endobj
6 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F4
/Encoding 223 0 R
/BaseFont /Helvetica
>>
endobj
7 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F6
/Encoding 223 0 R
/BaseFont /Helvetica-Bold
>>
endobj
21 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F8
/Encoding 223 0 R
/BaseFont /Times-Bold
>>
endobj
22 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F10
/Encoding 223 0 R
/BaseFont /Times-Italic
>>
endobj
34 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F12
/Encoding 223 0 R
/BaseFont /Courier
>>
endobj
84 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F14
/Encoding 224 0 R
/BaseFont /Symbol
>>
endobj
223 0 obj
<<
/Type /Encoding
/Differences [ 9/space 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde
/Odieresis/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring
/ccedilla/eacute/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex
/idieresis/ntilde/oacute/ograve/ocircumflex/odieresis/otilde/uacute
/ugrave/ucircumflex/udieresis/dagger/degree 164/section/bullet/paragraph
/germandbls/registered/copyright/trademark/acute/dieresis/notequal/AE
/Oslash/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff
/summation/product/pi/integral/ordfeminine/ordmasculine/Omega/ae
/oslash/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta
/guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE
/oe/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
/lozenge/ydieresis/Ydieresis/fraction/Euro/guilsinglleft/guilsinglright/fi
/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand/Acircumflex/Ecircumflex
/Aacute/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute
/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave 246/circumflex/tilde
/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
]
>>
endobj
224 0 obj
<<
/Type /Encoding
/Differences [ 240/apple
]
>>
endobj
2 0 obj
<<
/Type /Page
/Parent 9 0 R
/Resources 4 0 R
/Contents 3 0 R
>>
endobj
10 0 obj
<<
/Type /Page
/Parent 9 0 R
/Resources 12 0 R
/Contents 11 0 R
>>
endobj
18 0 obj
<<
/Type /Page
/Parent 9 0 R
/Resources 20 0 R
/Contents 19 0 R
>>
endobj
25 0 obj
<<
/Type /Page
/Parent 9 0 R
/Resources 27 0 R
/Contents 26 0 R
>>
endobj
28 0 obj
<<
/Type /Page
/Parent 9 0 R
/Resources 30 0 R
/Contents 29 0 R
>>
endobj
31 0 obj
<<
/Type /Page
/Parent 9 0 R
/Resources 33 0 R
/Contents 32 0 R
>>
endobj
35 0 obj
<<
/Type /Page
/Parent 9 0 R
/Resources 37 0 R
/Contents 36 0 R
>>
endobj
39 0 obj
<<
/Type /Page
/Parent 9 0 R
/Resources 41 0 R
/Contents 40 0 R
>>
endobj
47 0 obj
<<
/Type /Page
/Parent 9 0 R
/Resources 49 0 R
/Contents 48 0 R
>>
endobj
52 0 obj
<<
/Type /Page
/Parent 9 0 R
/Resources 54 0 R
/Contents 53 0 R
>>
endobj
55 0 obj
<<
/Type /Page
/Parent 59 0 R
/Resources 57 0 R
/Contents 56 0 R
>>
endobj
60 0 obj
<<
/Type /Page
/Parent 59 0 R
/Resources 62 0 R
/Contents 61 0 R
>>
endobj
63 0 obj
<<
/Type /Page
/Parent 59 0 R
/Resources 65 0 R
/Contents 64 0 R
>>
endobj
66 0 obj
<<
/Type /Page
/Parent 59 0 R
/Resources 68 0 R
/Contents 67 0 R
>>
endobj
69 0 obj
<<
/Type /Page
/Parent 59 0 R
/Resources 71 0 R
/Contents 70 0 R
>>
endobj
72 0 obj
<<
/Type /Page
/Parent 59 0 R
/Resources 74 0 R
/Contents 73 0 R
>>
endobj
75 0 obj
<<
/Type /Page
/Parent 59 0 R
/Resources 77 0 R
/Contents 76 0 R
>>
endobj
78 0 obj
<<
/Type /Page
/Parent 59 0 R
/Resources 80 0 R
/Contents 79 0 R
>>
endobj
81 0 obj
<<
/Type /Page
/Parent 59 0 R
/Resources 83 0 R
/Contents 82 0 R
>>
endobj
85 0 obj
<<
/Type /Page
/Parent 59 0 R
/Resources 87 0 R
/Contents 86 0 R
>>
endobj
88 0 obj
<<
/Type /Page
/Parent 91 0 R
/Resources 90 0 R
/Contents 89 0 R
>>
endobj
96 0 obj
<<
/Type /Page
/Parent 91 0 R
/Resources 98 0 R
/Contents 97 0 R
>>
endobj
102 0 obj
<<
/Type /Page
/Parent 91 0 R
/Resources 104 0 R
/Contents 103 0 R
>>
endobj
105 0 obj
<<
/Type /Page
/Parent 91 0 R
/Resources 107 0 R
/Contents 106 0 R
>>
endobj
109 0 obj
<<
/Type /Page
/Parent 91 0 R
/Resources 111 0 R
/Contents 110 0 R
>>
endobj
113 0 obj
<<
/Type /Page
/Parent 91 0 R
/Resources 115 0 R
/Contents 114 0 R
>>
endobj
116 0 obj
<<
/Type /Page
/Parent 91 0 R
/Resources 118 0 R
/Contents 117 0 R
>>
endobj
120 0 obj
<<
/Type /Page
/Parent 91 0 R
/Resources 122 0 R
/Contents 121 0 R
>>
endobj
123 0 obj
<<
/Type /Page
/Parent 91 0 R
/Resources 125 0 R
/Contents 124 0 R
>>
endobj
129 0 obj
<<
/Type /Page
/Parent 91 0 R
/Resources 131 0 R
/Contents 130 0 R
>>
endobj
137 0 obj
<<
/Type /Page
/Parent 140 0 R
/Resources 139 0 R
/Contents 138 0 R
>>
endobj
142 0 obj
<<
/Type /Page
/Parent 140 0 R
/Resources 144 0 R
/Contents 143 0 R
>>
endobj
145 0 obj
<<
/Type /Page
/Parent 140 0 R
/Resources 147 0 R
/Contents 146 0 R
>>
endobj
151 0 obj
<<
/Type /Page
/Parent 140 0 R
/Resources 153 0 R
/Contents 152 0 R
>>
endobj
155 0 obj
<<
/Type /Page
/Parent 140 0 R
/Resources 157 0 R
/Contents 156 0 R
>>
endobj
159 0 obj
<<
/Type /Page
/Parent 140 0 R
/Resources 161 0 R
/Contents 160 0 R
>>
endobj
162 0 obj
<<
/Type /Page
/Parent 140 0 R
/Resources 164 0 R
/Contents 163 0 R
>>
endobj
165 0 obj
<<
/Type /Page
/Parent 140 0 R
/Resources 167 0 R
/Contents 166 0 R
>>
endobj
168 0 obj
<<
/Type /Page
/Parent 140 0 R
/Resources 170 0 R
/Contents 169 0 R
>>
endobj
177 0 obj
<<
/Type /Page
/Parent 140 0 R
/Resources 179 0 R
/Contents 178 0 R
>>
endobj
181 0 obj
<<
/Type /Page
/Parent 184 0 R
/Resources 183 0 R
/Contents 182 0 R
>>
endobj
185 0 obj
<<
/Type /Page
/Parent 184 0 R
/Resources 187 0 R
/Contents 186 0 R
>>
endobj
188 0 obj
<<
/Type /Page
/Parent 184 0 R
/Resources 190 0 R
/Contents 189 0 R
>>
endobj
191 0 obj
<<
/Type /Page
/Parent 184 0 R
/Resources 193 0 R
/Contents 192 0 R
>>
endobj
194 0 obj
<<
/Type /Page
/Parent 184 0 R
/Resources 196 0 R
/Contents 195 0 R
>>
endobj
197 0 obj
<<
/Type /Page
/Parent 184 0 R
/Resources 199 0 R
/Contents 198 0 R
>>
endobj
200 0 obj
<<
/Type /Page
/Parent 184 0 R
/Resources 202 0 R
/Contents 201 0 R
>>
endobj
203 0 obj
<<
/Type /Page
/Parent 184 0 R
/Resources 205 0 R
/Contents 204 0 R
>>
endobj
207 0 obj
<<
/Type /Page
/Parent 184 0 R
/Resources 209 0 R
/Contents 208 0 R
>>
endobj
210 0 obj
<<
/Type /Page
/Parent 184 0 R
/Resources 212 0 R
/Contents 211 0 R
>>
endobj
213 0 obj
<<
/Type /Page
/Parent 216 0 R
/Resources 215 0 R
/Contents 214 0 R
>>
endobj
219 0 obj
<<
/Type /Page
/Parent 216 0 R
/Resources 221 0 R
/Contents 220 0 R
>>
endobj
9 0 obj
<<
/Type /Pages
/Kids [2 0 R 10 0 R 18 0 R 25 0 R 28 0 R 31 0 R 35 0 R 39 0 R 47 0 R 52 0 R]
/Count 10
/Parent 58 0 R
>>
endobj
59 0 obj
<<
/Type /Pages
/Kids [55 0 R 60 0 R 63 0 R 66 0 R 69 0 R 72 0 R 75 0 R 78 0 R 81 0 R 85 0 R]
/Count 10
/Parent 58 0 R
>>
endobj
91 0 obj
<<
/Type /Pages
/Kids [88 0 R 96 0 R 102 0 R 105 0 R 109 0 R 113 0 R 116 0 R 120 0 R 123 0 R 129 0 R]
/Count 10
/Parent 58 0 R
>>
endobj
140 0 obj
<<
/Type /Pages
/Kids [137 0 R 142 0 R 145 0 R 151 0 R 155 0 R 159 0 R 162 0 R 165 0 R 168 0 R 177 0 R]
/Count 10
/Parent 58 0 R
>>
endobj
184 0 obj
<<
/Type /Pages
/Kids [181 0 R 185 0 R 188 0 R 191 0 R 194 0 R 197 0 R 200 0 R 203 0 R 207 0 R 210 0 R]
/Count 10
/Parent 58 0 R
>>
endobj
216 0 obj
<<
/Type /Pages
/Kids [213 0 R 219 0 R]
/Count 2
/Parent 58 0 R
>>
endobj
58 0 obj
<<
/Type /Pages
/Kids [9 0 R 59 0 R 91 0 R 140 0 R 184 0 R 216 0 R ]
/Count 52
/MediaBox [0 0 612 792]
>>
endobj
225 0 obj
<<
/Type /Catalog
/Pages 58 0 R
>>
endobj
xref
0 226
0000000000 65535 f 
0000000016 00000 n 
0000838556 00000 n 
0000000231 00000 n 
0000036266 00000 n 
0000836583 00000 n 
0000836683 00000 n 
0000836781 00000 n 
0000836513 00000 n 
0000843023 00000 n 
0000838636 00000 n 
0000036380 00000 n 
0000036584 00000 n 
0000036679 00000 n 
0000040729 00000 n 
0000052597 00000 n 
0000043966 00000 n 
0000053698 00000 n 
0000838719 00000 n 
0000045936 00000 n 
0000052353 00000 n 
0000836884 00000 n 
0000836984 00000 n 
0000052646 00000 n 
0000053747 00000 n 
0000838802 00000 n 
0000054539 00000 n 
0000059047 00000 n 
0000838885 00000 n 
0000059164 00000 n 
0000063033 00000 n 
0000838968 00000 n 
0000063149 00000 n 
0000066174 00000 n 
0000837087 00000 n 
0000839051 00000 n 
0000066314 00000 n 
0000069308 00000 n 
0000836441 00000 n 
0000839134 00000 n 
0000069459 00000 n 
0000072128 00000 n 
0000072268 00000 n 
0000087652 00000 n 
0000074943 00000 n 
0000077822 00000 n 
0000080692 00000 n 
0000839217 00000 n 
0000083681 00000 n 
0000087405 00000 n 
0000087701 00000 n 
0000088749 00000 n 
0000839300 00000 n 
0000091725 00000 n 
0000095484 00000 n 
0000839383 00000 n 
0000095706 00000 n 
0000099096 00000 n 
0000843825 00000 n 
0000843159 00000 n 
0000839467 00000 n 
0000099236 00000 n 
0000102637 00000 n 
0000839551 00000 n 
0000102777 00000 n 
0000110582 00000 n 
0000839635 00000 n 
0000110711 00000 n 
0000114710 00000 n 
0000839719 00000 n 
0000114837 00000 n 
0000117716 00000 n 
0000839803 00000 n 
0000117856 00000 n 
0000154110 00000 n 
0000839887 00000 n 
0000154249 00000 n 
0000156046 00000 n 
0000839971 00000 n 
0000156186 00000 n 
0000157565 00000 n 
0000840055 00000 n 
0000157693 00000 n 
0000159788 00000 n 
0000837185 00000 n 
0000840139 00000 n 
0000159940 00000 n 
0000164995 00000 n 
0000840223 00000 n 
0000165145 00000 n 
0000168623 00000 n 
0000843297 00000 n 
0000168763 00000 n 
0000181954 00000 n 
0000177322 00000 n 
0000183051 00000 n 
0000840307 00000 n 
0000179274 00000 n 
0000181740 00000 n 
0000182003 00000 n 
0000183101 00000 n 
0000184150 00000 n 
0000840391 00000 n 
0000201826 00000 n 
0000203582 00000 n 
0000840478 00000 n 
0000203772 00000 n 
0000225112 00000 n 
0000225263 00000 n 
0000840565 00000 n 
0000233400 00000 n 
0000235883 00000 n 
0000236097 00000 n 
0000840652 00000 n 
0000237647 00000 n 
0000240925 00000 n 
0000840739 00000 n 
0000241150 00000 n 
0000382904 00000 n 
0000383055 00000 n 
0000840826 00000 n 
0000396140 00000 n 
0000398359 00000 n 
0000840913 00000 n 
0000398573 00000 n 
0000446796 00000 n 
0000446955 00000 n 
0000476965 00000 n 
0000448932 00000 n 
0000841000 00000 n 
0000472362 00000 n 
0000476736 00000 n 
0000477016 00000 n 
0000478069 00000 n 
0000489672 00000 n 
0000501028 00000 n 
0000528294 00000 n 
0000841087 00000 n 
0000524326 00000 n 
0000528048 00000 n 
0000843443 00000 n 
0000528345 00000 n 
0000841175 00000 n 
0000529398 00000 n 
0000530060 00000 n 
0000841263 00000 n 
0000530178 00000 n 
0000534000 00000 n 
0000534129 00000 n 
0000570808 00000 n 
0000550409 00000 n 
0000841351 00000 n 
0000566874 00000 n 
0000570565 00000 n 
0000570859 00000 n 
0000841439 00000 n 
0000571912 00000 n 
0000575064 00000 n 
0000575205 00000 n 
0000841527 00000 n 
0000583752 00000 n 
0000585822 00000 n 
0000841615 00000 n 
0000586025 00000 n 
0000591167 00000 n 
0000841703 00000 n 
0000591318 00000 n 
0000596939 00000 n 
0000841791 00000 n 
0000597057 00000 n 
0000599340 00000 n 
0000599481 00000 n 
0000629233 00000 n 
0000599843 00000 n 
0000600137 00000 n 
0000600509 00000 n 
0000600803 00000 n 
0000841879 00000 n 
0000610704 00000 n 
0000628971 00000 n 
0000629284 00000 n 
0000841967 00000 n 
0000630337 00000 n 
0000631376 00000 n 
0000843592 00000 n 
0000842055 00000 n 
0000631494 00000 n 
0000694592 00000 n 
0000842143 00000 n 
0000694731 00000 n 
0000695368 00000 n 
0000842231 00000 n 
0000695476 00000 n 
0000698761 00000 n 
0000842319 00000 n 
0000698912 00000 n 
0000700920 00000 n 
0000842407 00000 n 
0000701026 00000 n 
0000703761 00000 n 
0000842495 00000 n 
0000703902 00000 n 
0000706974 00000 n 
0000842583 00000 n 
0000707115 00000 n 
0000707413 00000 n 
0000707519 00000 n 
0000842671 00000 n 
0000729344 00000 n 
0000732546 00000 n 
0000842759 00000 n 
0000732771 00000 n 
0000736140 00000 n 
0000842847 00000 n 
0000736281 00000 n 
0000737427 00000 n 
0000843741 00000 n 
0000737545 00000 n 
0000775752 00000 n 
0000842935 00000 n 
0000814901 00000 n 
0000836077 00000 n 
0000836317 00000 n 
0000837282 00000 n 
0000838490 00000 n 
0000843947 00000 n 
trailer
<<
/Size 226
/Root 225 0 R
/Info 1 0 R
/ID [<442b3d64cedbe0ff9961d93a0acc3e40><442b3d64cedbe0ff9961d93a0acc3e40>]
>>
startxref
843999
%%EOF
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/CorrelogramArray.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function movie = CorrelogramArray(data, sr, frameRate, width)
+% function movie = CorrelogramArray(data, sr, frameRate, width)
+% Compute an array of correlogram frames, from the sound file data with
+% a sampling rate of sr Hz.  Compute frameRate frames per second, using
+% a window size of "width" samples.
+
+% (c) 1998 Interval Research Corporation
+
+if nargin < 2, sr = 16000; end
+if nargin < 3, frameRate = 12; end
+if nargin < 4, width = 256; end
+
+[channels, len] = size(data);
+frameIncrement = fix(sr/frameRate);
+frameCount = floor((len-width)/frameIncrement)+1;
+fprintf('Correlogram spacing is %g samples per frame.\n', frameIncrement);
+
+movie = zeros(channels*width, frameCount);
+for i=1:frameCount
+	start = (i-1)*frameIncrement + 1;
+	pic = CorrelogramFrame(data, width, start, frameIncrement*4);
+		minimum = min(min(pic));
+		maximum = max(max(pic));
+		image((pic-minimum)/(maximum-minimum)*length(colormap));
+		drawnow;
+	movie(:,i) = reshape(pic, channels*width, 1);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/CorrelogramFrame.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+% pic = CorrelogramFrame(data, picWidth, start, winLen)
+% Compute one frame of a correlogram.  The input data is a
+% two-dimensional array of cochlear data, each row representing
+% firing probabilities from one cochlear channel.  The output
+% picture is a two dimensional array of width "picWidth".
+%
+% The correlogram is computed with autocorrelation using 
+% data from the input array.  For each channel, the data from
+% is extracted starting at column "start" and extending for 
+% "winLength" time steps.  
+
+% (c) 1998 Interval Research Corporation
+
+function pic = CorrelogramFrame(data, picWidth, start, winLen)
+
+if nargin < 2
+	disp('Syntax: pic=CorrelogramFrame(data, picWidth[, start, len])');
+	return
+end
+
+if nargin < 3
+	start = 1;
+end
+
+if nargin < 4
+	[channels, winLen] = size(data);
+end
+	
+[channels, dataLen] = size(data);
+start = max(1, start);
+last = min(dataLen, start+winLen-1);
+
+pic = zeros(channels, picWidth);
+fftSize = 2^(nextpow2(max(picWidth, winLen))+1);
+% disp(['CorrelogramFrame fftSize is ' int2str(fftSize)]);
+
+a = .54;
+b = -.46;
+wr = sqrt(64/256);
+phi = pi/winLen;
+ws = 2*wr/sqrt(4*a*a+2*b*b)*(a + b*cos(2*pi*(0:winLen-1)/winLen + phi));
+
+for i=1:channels
+	f = zeros(1, fftSize);
+%	d = zeros(1, winLen);
+%	d(1:(last-start+1)) = data(i,start:last) .* ws(1:(last-start+1));
+%	f(1:(winLen/2)) = d(winLen/2+1:winLen);
+%	f(fftSize-(winLen/2)+1:fftSize) = d(1:min(length(d),winLen/2));
+	f(1:(last-start+1)) = data(i,start:last) .* ws(1:(last-start+1));
+	f = fft(f);
+	f = ifft(f.*conj(f));
+	pic(i,:) = real(f(1:picWidth));
+	if pic(i,1) > pic(i,2) & pic(i,1) > pic(i,3)
+		pic(i,:) = pic(i,:)/sqrt(pic(i,1));
+	else
+		pic(i,:) = zeros(1,picWidth);
+	end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/CorrelogramMovie.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function movie = CorrelogramMovie(data, sr, frameRate, width)
+% function movie = CorrelogramMovie(data, sr, frameRate, width)
+% Compute a Matlab movie of a sound array called "data" which has
+% a sampling rate of sr Hz.  Compute frameRate frames per second, each
+% time taking "width" samples for analysis.
+
+% (c) 1998 Interval Research Corporation
+
+if nargin < 2, sr = 16000; end
+if nargin < 3, frameRate = 12; end
+if nargin < 4, width = 256; end
+
+[channels, len] = size(data);
+frameIncrement = fix(sr/frameRate);
+frameCount = floor((len-width)/frameIncrement)+1;
+
+movie = moviein(frameCount);
+for i=1:frameCount
+	start = (i-1)*frameIncrement + 1;
+	pic = CorrelogramFrame(data, width, start, frameIncrement*2);
+		minimum = min(min(pic));
+		maximum = max(max(pic));
+		image((pic-minimum)/(maximum-minimum)*length(colormap));
+		drawnow;
+	movie(:,i) = getframe;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/CorrelogramPitch.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,54 @@
+function [pitch,salience]=CorrelogramPitch(correlogram, width, sr, low, high);
+% pitch=CorrelogramPitch(correlogram, width [, sr, lowPitch, highPitch]) 
+% computes the pitch of a correlogram sequence by finding the time lag
+% with the largest correlation energy. 
+%  
+% (c) 1998 Interval Research Corporation
+
+if nargin < 3; sr=22254.54; end;
+if nargin < 4; low=0; end;
+if nargin < 5; high=inf; end;
+
+dropLow = floor(sr/high);
+if low > 0
+	dropHigh = min(width,ceil(sr/low));
+else
+	dropHigh = width;
+end
+
+[pixels frames] = size(correlogram);
+channels = pixels/width;
+if channels < 1 | floor(channels) ~= channels
+	error('Correlogram Size Error');
+end
+
+pitch = zeros(1,frames);
+salience = zeros(1,frames);
+for j=1:frames
+	% Get one frame from the correlogram, reshape it, and compute
+	% the sum (as a function of time lag) across all channels.
+	if channels == 1
+		summary=reshape(correlogram(:,j),channels,width);
+	else
+		summary=sum(reshape(correlogram(:,j),channels,width));
+	end
+	zeroLag = summary(1);
+	% Now we need to find the first pitch past the peak at zero
+	% lag.  The following lines smooth the summary pitch a bit, then
+	% look for the first point where the summary goes back up.  
+	% Everything up to this point is zeroed out.
+	windowLength=16;
+	sumfilt=filter(ones(1,windowLength),[1],summary);
+	sumdif=sumfilt(2:width)-sumfilt(1:width-1);
+	sumdif(1:windowLength) = zeros(1,windowLength);
+	valleys=find(sumdif>0);
+	summary(1:valleys(1)) = zeros(1,valleys(1));
+	summary(1:dropLow) = zeros(1,dropLow);
+	summary(dropHigh:width) = zeros(1,width-dropHigh+1);
+	plot(summary);
+	drawnow;
+	% Now find the location of the biggest peak and call this the pitch
+	[m p] = max(summary);
+	pitch(j) = sr/(p-1);
+	salience(j) = m/zeroLag;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/DesignLyonFilters.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,102 @@
+% [filters, freqs] = DesignLyonFilters(fs,EarQ,StepFactor)
+% Design the cascade of second order filters and the front filters
+% (outer/middle and compensator) needed for Lyon's Passive Short Wave
+% (Second Order Sections) cochlear model.  The variables used here come
+% from Apple ATG Technical Report #13 titled "Lyon's Cochlear Model".
+%
+% Most of the parameters are hardwired into this m-function.  The user
+% settable parameters are the digital sampling rate, the basic Q of the
+% each stage (usually 8 or 4), and the spacing factor between channels
+% (usually .25 and .125, respectively.)
+%
+% The result is returned as rows of second order filters; three coefficients
+% for the numerator and two for the denomiator.  The coefficients are
+% [A0 A1 A2 B1 B2]..........................(Malcolm 1 Feb. 1993)
+%
+
+% (c) 1998 Interval Research Corporation  
+function [filters, CenterFreqs, gains] = DesignLyonFilters(fs,EarQ,StepFactor)
+
+if nargin < 2
+	EarQ = 8;
+end
+
+if nargin < 3
+	StepFactor=EarQ/32;
+end
+
+Eb = 1000.0;
+EarZeroOffset = 1.5;
+EarSharpness = 5.0;
+EarPremphCorner = 300;
+
+% Find top frequency, allowing space for first cascade filter.
+topf = fs/2.0;
+topf = topf - (sqrt(topf^2+Eb^2)/EarQ*StepFactor*EarZeroOffset)+ ...
+					sqrt(topf^2+Eb^2)/EarQ*StepFactor;
+
+% Find place where CascadePoleQ < .5
+lowf = Eb/sqrt(4*EarQ^2-1);
+NumberOfChannels = floor((EarQ*(-log(lowf + sqrt(lowf^2 + Eb^2)) + ...
+         log(topf + sqrt(Eb^2 + topf^2))))/StepFactor);
+
+% Now make an array of CenterFreqs..... This expression was derived by
+% Mathematica by integrating 1/EarBandwidth(cf) and solving for f as a 
+% function of channel number.
+cn = 1:NumberOfChannels;
+CenterFreqs = (-((exp((cn*StepFactor)/EarQ)*Eb^2)/ ...
+          (topf + sqrt(Eb^2 + topf^2))) + ...
+       (topf + sqrt(Eb^2 + topf^2))./exp((cn*StepFactor)/EarQ))/2;
+
+% OK, now we can figure out the parameters of each stage filter.
+EarBandwidth = sqrt(CenterFreqs.^2+Eb^2)/EarQ;
+CascadeZeroCF = CenterFreqs +	EarBandwidth * StepFactor * EarZeroOffset;
+CascadeZeroQ = EarSharpness*CascadeZeroCF./EarBandwidth;
+CascadePoleCF = CenterFreqs;
+CascadePoleQ = CenterFreqs./EarBandwidth;
+
+% Now lets find some filters.... first the zeros then the poles
+zerofilts = SecondOrderFilter(CascadeZeroCF, CascadeZeroQ, fs);
+polefilts = SecondOrderFilter(CascadePoleCF, CascadePoleQ, fs);
+filters = [zerofilts polefilts(:,2:3)];
+
+% Now we can set the DC gain of each stage.
+dcgain(2:NumberOfChannels)=CenterFreqs(1:NumberOfChannels-1)./ ...
+					CenterFreqs(2:NumberOfChannels);
+dcgain(1) = dcgain(2);
+for i=1:NumberOfChannels
+     filters(i,:) = SetGain(filters(i,:), dcgain(i), 0, fs);
+end
+
+% Finally, let's design the front filters.
+front(1,:) = SetGain([0 1 -exp(-2*pi*EarPremphCorner/fs) 0 0], 1, fs/4, fs);
+topPoles = SecondOrderFilter(topf,CascadePoleQ(1), fs);
+front(2,:) = SetGain([1 0 -1 topPoles(2:3)], 1, fs/4, fs);
+
+% Now, put them all together.
+filters = [front; filters];
+
+if nargout > 2
+	% Compute the gains needed so that everything is flat
+	% when we do the filter inversion.
+	[channels, width] = size(filters);
+	len = length(CenterFreqs);
+	clear cfs2;
+	cfs2(1) = fs/2;
+	cfs2(1:2:2*len) = CenterFreqs;
+	cfs2(2:2:2*len-1) = (CenterFreqs(1:len-1) + CenterFreqs(2:len))/2;
+%	cfs2 = CenterFreqs;
+	
+	resp = zeros(length(cfs2), channels);
+	for i=1:channels
+		resp(:,i) = FreqResp(filters(i,:), cfs2, fs)';
+	end
+	% Each column vector of resp contains one channel's response
+	% across all frequencies (in dB).
+	cumresp = cumsum(resp')';
+	% cumresp now contains the total gain at output of i'th channel at 
+	% frequency f
+	a=10.^(cumresp(:,3:channels)/20);
+	a = a.* a;			% Have to go through each filter twice.
+	gains = [0; 0; a \ ones(length(cfs2),1)];
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/ERBFilterBank.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,56 @@
+function output = ERBFilterBank(x, fcoefs)
+% function output = ERBFilterBank(x, fcoefs)
+% Process an input waveform with a gammatone filter bank. This function 
+% takes a single sound vector, and returns an array of filter outputs, one 
+% channel per row.
+%
+% The fcoefs parameter, which completely specifies the Gammatone filterbank,
+% should be designed with the MakeERBFilters function.  If it is omitted,
+% the filter coefficients are computed for you assuming a 22050Hz sampling
+% rate and 64 filters regularly spaced on an ERB scale from fs/2 down to 100Hz.
+%
+
+% Malcolm Slaney @ Interval, June 11, 1998.
+% (c) 1998 Interval Research Corporation  
+% Thanks to Alain de Cheveigne' for his suggestions and improvements.
+
+if nargin < 1
+	error('Syntax: output_array = ERBFilterBank(input_vector[, fcoefs]);');
+end
+
+if nargin < 2
+	fcoefs = MakeERBFilters(22050,64,100);
+end
+
+if size(fcoefs,2) ~= 10
+	error('fcoefs parameter passed to ERBFilterBank is the wrong size.');
+end
+
+A0  = fcoefs(:,1);
+A11 = fcoefs(:,2);
+A12 = fcoefs(:,3);
+A13 = fcoefs(:,4);
+A14 = fcoefs(:,5);
+A2  = fcoefs(:,6);
+B0  = fcoefs(:,7);
+B1  = fcoefs(:,8);
+B2  = fcoefs(:,9);
+gain= fcoefs(:,10);	
+
+output = zeros(size(gain,1), length(x));
+for chan = 1: size(gain,1)
+	y1=filter([A0(chan)/gain(chan) A11(chan)/gain(chan) ...
+		   A2(chan)/gain(chan)], ...
+				[B0(chan) B1(chan) B2(chan)], x);
+	y2=filter([A0(chan) A12(chan) A2(chan)], ...
+				[B0(chan) B1(chan) B2(chan)], y1);
+	y3=filter([A0(chan) A13(chan) A2(chan)], ...
+				[B0(chan) B1(chan) B2(chan)], y2);
+	y4=filter([A0(chan) A14(chan) A2(chan)], ...
+				[B0(chan) B1(chan) B2(chan)], y3);
+	output(chan, :) = y4;
+end
+
+if 0
+	semilogx((0:(length(x)-1))*(fs/length(x)),20*log10(abs(fft(output))));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/ERBSpace.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+function cfArray = ERBSpace(lowFreq, highFreq, N)
+% function cfArray = ERBSpace(lowFreq, highFreq, N)
+% This function computes an array of N frequencies uniformly spaced between
+% highFreq and lowFreq on an ERB scale.  N is set to 100 if not specified.
+%
+% See also linspace, logspace, MakeERBCoeffs, MakeERBFilters.
+%
+% For a definition of ERB, see Moore, B. C. J., and Glasberg, B. R. (1983).
+% "Suggested formulae for calculating auditory-filter bandwidths and
+% excitation patterns," J. Acoust. Soc. Am. 74, 750-753.
+
+if nargin < 1
+	lowFreq = 100;
+end
+
+if nargin < 2
+	highFreq = 44100/4;
+end
+
+if nargin < 3
+	N = 100;
+end
+
+% Change the following three parameters if you wish to use a different
+% ERB scale.  Must change in MakeERBCoeffs too.
+EarQ = 9.26449;				%  Glasberg and Moore Parameters
+minBW = 24.7;
+order = 1;
+
+% All of the followFreqing expressions are derived in Apple TR #35, "An
+% Efficient Implementation of the Patterson-Holdsworth Cochlear
+% Filter Bank."  See pages 33-34.
+cfArray = -(EarQ*minBW) + exp((1:N)'*(-log(highFreq + EarQ*minBW) + ...
+		log(lowFreq + EarQ*minBW))/N) * (highFreq + EarQ*minBW);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/EpsilonFromTauFS.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function y=EpslionFromTauFS(tau, fs)
+% EpsilonFromTauFS - Find first order filter coefficient
+% as a function of time constant (tau) and sample rate (fs)
+
+% (c) 1998 Interval Research Corporation  
+y=1-exp(-1/tau/fs);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/FMPoints.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+function points=FMPoints(len, freq, fmFreq, fmAmp, fs)
+% points=FMPoints(len, freq, fmFreq, fmAmp, fs)
+% Generates (fractional) sample locations for frequency-modulated impulses
+%     len         = number of samples
+%     freq        = pitch frequency (Hz)
+%     fmFreq      = vibrato frequency (Hz)  (defaults to 6 Hz)
+%     fmAmp       = max change in pitch  (defaults to 5% of freq)
+%     fs          = sample frequency     (defaults to 22254.545454 samples/s)
+%
+% Basic formula: phase angle = 2*pi*freq*t + (fmAmp/fmFreq)*sin(2*pi*fmFreq*t)
+%     k-th zero crossing approximately at sample number
+%     (fs/freq)*(k - (fmAmp/(2*pi*fmFreq))*sin(2*pi*k*(fmFreq/freq)))
+
+% (c) 1998 Interval Research Corporation  
+
+if nargin<2,
+   fprintf('Format: sig=fmPoints(len, freq [, fmAmp, fmFreq, sampleRate])\n');
+   return;
+   end;
+if nargin<5,
+   fs=22254.545454;
+   end;
+if nargin<4,
+   fmAmp=0.05*freq;
+   end;
+if nargin<3,
+   fmFreq=6;
+end;
+
+kmax=fix(freq*(len/fs));
+points=0:kmax-1;
+points=1+(fs/freq)*(points-(fmAmp/(2*pi*fmFreq))* ...
+sin(2*pi*(fmFreq/freq)*points));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/FreqResp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+% mag = FreqResp(filter, f, fs)
+% Find the frequency response (in dB) of a filter (1x5 vector) at
+% frequency f and sampling rate fs.
+
+% (c) 1998 Interval Research Corporation  
+
+function mag=FreqResp(filter,f,fs)
+cf = exp(i*2*pi*f/fs);
+mag = (filter(3) + filter(2)*cf + filter(1)*cf.^2) ./ ...
+	(filter(5) + filter(4)*cf + cf.^2);
+mag = 20*log10(abs(mag));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/LyonPassiveEar.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+function y=LyonPassiveEar(x,sr,df,earQ,stepfactor,differ,agcf,taufactor)
+% y=LyonPassiveEar(input, sample_rate, decimation, earQ, stepfactor);
+%
+% Changes
+% Zeroed out the preemphasis channels before doing the AGC.  This is needed
+% so that cochlear inversion is possible (since we don't have those channels,
+% we can't invert their gain.)..... Malcolm 6/26/95
+
+% (c) 1998 Interval Research Corporation  
+
+if nargin < 3
+	fprintf('Syntax: y=LyonPassiveEar(input, sample_rate, decimation, earQ, stepfactor)\n');
+	fprintf(' The input, sample_rate, and decimation parameters are mandatory.\n');
+	return;
+end
+
+if df < 1; df = 1; end
+if nargin < 4; earQ = 8; end
+if nargin < 5; stepfactor = earQ/32; end
+if nargin < 6; differ=1; end
+if nargin < 7; agcf=1; end
+if nargin < 8; taufactor=3; end
+
+earFilters = DesignLyonFilters(sr, earQ, stepfactor);
+
+nSamples = length(x);
+nOutputSamples = floor(nSamples/df);
+[nChannels filterWidth] = size(earFilters);
+
+sosOutput = zeros(nChannels, df);
+sosState = zeros(nChannels, 2);
+agcState = zeros(nChannels, 4);
+y = zeros(nChannels, nOutputSamples);
+
+decEps = EpsilonFromTauFS(df/sr*taufactor,sr);
+decState = zeros(nChannels, 2);
+decFilt = SetGain([0 0 1 -2*(1-decEps) (1-decEps)^2], 1, 0, sr);
+
+eps1 = EpsilonFromTauFS(.64,sr);
+eps2 = EpsilonFromTauFS(.16,sr);
+eps3 = EpsilonFromTauFS(.04,sr);
+eps4 = EpsilonFromTauFS(.01,sr);
+
+tar1 = .0032;
+tar2 = .0016;
+tar3 = .0008;
+tar4 = .0004;
+
+if 0
+	fprintf('df=%g, earq=%g, stepfactor=%g, differ=%g\n',df,earQ,stepfactor,differ);
+	fprintf('agcf=%g, taufactor=%g\n', agcf, taufactor);
+	[tar1 tar2 tar3 tar4; eps1 eps2 eps3 eps4]
+end
+
+for i=0:nOutputSamples-1
+	[sosOutput sosState]= soscascade(x(i*df+1:i*df+df), earFilters, ...  
+				sosState);
+	output = max(0, sosOutput);		%% Half Wave Rectify
+	output(1) = 0;					%% Test Hack to make inversion easier.
+	output(2) = 0;
+	if agcf > 0
+		[output agcState] = agc(output, [tar1 tar2 tar3 tar4; ...
+				eps1 eps2 eps3 eps4], ...
+				agcState);
+	end
+
+	if differ > 0
+		output = [output(1,:);output(1:nChannels-1,:) - ...
+					output(2:nChannels,:)];
+		output = max(0, output);
+	end
+
+	if df > 1
+		[output decState] = sosfilters(output, decFilt, decState);
+	end
+	y(:,i+1) = output(:,df);
+end
+
+%y = min(y,2*tar4);
+y=y(3:nChannels,:);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/MakeERBFilters.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,119 @@
+function fcoefs=MakeERBFilters(fs,numChannels,lowFreq)
+% function [fcoefs]=MakeERBFilters(fs,numChannels,lowFreq)
+% This function computes the filter coefficients for a bank of 
+% Gammatone filters.  These filters were defined by Patterson and 
+% Holdworth for simulating the cochlea.  
+% 
+% The result is returned as an array of filter coefficients.  Each row 
+% of the filter arrays contains the coefficients for four second order 
+% filters.  The transfer function for these four filters share the same
+% denominator (poles) but have different numerators (zeros).  All of these
+% coefficients are assembled into one vector that the ERBFilterBank 
+% can take apart to implement the filter.
+%
+% The filter bank contains "numChannels" channels that extend from
+% half the sampling rate (fs) to "lowFreq".  Alternatively, if the numChannels
+% input argument is a vector, then the values of this vector are taken to
+% be the center frequency of each desired filter.  (The lowFreq argument is
+% ignored in this case.)
+
+% Note this implementation fixes a problem in the original code by
+% computing four separate second order filters.  This avoids a big
+% problem with round off errors in cases of very small cfs (100Hz) and
+% large sample rates (44kHz).  The problem is caused by roundoff error
+% when a number of poles are combined, all very close to the unit
+% circle.  Small errors in the eigth order coefficient, are multiplied
+% when the eigth root is taken to give the pole location.  These small
+% errors lead to poles outside the unit circle and instability.  Thanks
+% to Julius Smith for leading me to the proper explanation.
+
+% Execute the following code to evaluate the frequency
+% response of a 10 channel filterbank.
+%	fcoefs = MakeERBFilters(16000,10,100);
+%	y = ERBFilterBank([1 zeros(1,511)], fcoefs);
+%	resp = 20*log10(abs(fft(y')));
+%	freqScale = (0:511)/512*16000;
+%	semilogx(freqScale(1:255),resp(1:255,:));
+%	axis([100 16000 -60 0])
+%	xlabel('Frequency (Hz)'); ylabel('Filter Response (dB)');
+
+% Rewritten by Malcolm Slaney@Interval.  June 11, 1998.
+% (c) 1998 Interval Research Corporation  
+
+T = 1/fs;
+if length(numChannels) == 1
+	cf = ERBSpace(lowFreq, fs/2, numChannels);
+else
+	cf = numChannels(1:end);
+	if size(cf,2) > size(cf,1)
+		cf = cf';
+	end
+end
+
+% Change the followFreqing three parameters if you wish to use a different
+% ERB scale.  Must change in ERBSpace too.
+EarQ = 9.26449;				%  Glasberg and Moore Parameters
+minBW = 24.7;
+order = 1;
+
+ERB = ((cf/EarQ).^order + minBW^order).^(1/order);
+B=1.019*2*pi*ERB;
+
+A0 = T;
+A2 = 0;
+B0 = 1;
+B1 = -2*cos(2*cf*pi*T)./exp(B*T);
+B2 = exp(-2*B*T);
+
+A11 = -(2*T*cos(2*cf*pi*T)./exp(B*T) + 2*sqrt(3+2^1.5)*T*sin(2*cf*pi*T)./ ...
+		exp(B*T))/2;
+A12 = -(2*T*cos(2*cf*pi*T)./exp(B*T) - 2*sqrt(3+2^1.5)*T*sin(2*cf*pi*T)./ ...
+		exp(B*T))/2;
+A13 = -(2*T*cos(2*cf*pi*T)./exp(B*T) + 2*sqrt(3-2^1.5)*T*sin(2*cf*pi*T)./ ...
+		exp(B*T))/2;
+A14 = -(2*T*cos(2*cf*pi*T)./exp(B*T) - 2*sqrt(3-2^1.5)*T*sin(2*cf*pi*T)./ ...
+		exp(B*T))/2;
+
+gain = abs((-2*exp(4*i*cf*pi*T)*T + ...
+                 2*exp(-(B*T) + 2*i*cf*pi*T).*T.* ...
+                         (cos(2*cf*pi*T) - sqrt(3 - 2^(3/2))* ...
+                          sin(2*cf*pi*T))) .* ...
+           (-2*exp(4*i*cf*pi*T)*T + ...
+             2*exp(-(B*T) + 2*i*cf*pi*T).*T.* ...
+              (cos(2*cf*pi*T) + sqrt(3 - 2^(3/2)) * ...
+               sin(2*cf*pi*T))).* ...
+           (-2*exp(4*i*cf*pi*T)*T + ...
+             2*exp(-(B*T) + 2*i*cf*pi*T).*T.* ...
+              (cos(2*cf*pi*T) - ...
+               sqrt(3 + 2^(3/2))*sin(2*cf*pi*T))) .* ...
+           (-2*exp(4*i*cf*pi*T)*T + 2*exp(-(B*T) + 2*i*cf*pi*T).*T.* ...
+           (cos(2*cf*pi*T) + sqrt(3 + 2^(3/2))*sin(2*cf*pi*T))) ./ ...
+          (-2 ./ exp(2*B*T) - 2*exp(4*i*cf*pi*T) +  ...
+           2*(1 + exp(4*i*cf*pi*T))./exp(B*T)).^4);
+	
+allfilts = ones(length(cf),1);
+fcoefs = [A0*allfilts A11 A12 A13 A14 A2*allfilts B0*allfilts B1 B2 gain];
+
+if (0)						% Test Code
+	A0  = fcoefs(:,1);
+	A11 = fcoefs(:,2);
+	A12 = fcoefs(:,3);
+	A13 = fcoefs(:,4);
+	A14 = fcoefs(:,5);
+	A2  = fcoefs(:,6);
+	B0  = fcoefs(:,7);
+	B1  = fcoefs(:,8);
+	B2  = fcoefs(:,9);
+	gain= fcoefs(:,10);	
+	chan=1;
+	x = [1 zeros(1, 511)];
+	y1=filter([A0(chan)/gain(chan) A11(chan)/gain(chan) ...
+		A2(chan)/gain(chan)],[B0(chan) B1(chan) B2(chan)], x);
+	y2=filter([A0(chan) A12(chan) A2(chan)], ...
+			[B0(chan) B1(chan) B2(chan)], y1);
+	y3=filter([A0(chan) A13(chan) A2(chan)], ...
+			[B0(chan) B1(chan) B2(chan)], y2);
+	y4=filter([A0(chan) A14(chan) A2(chan)], ...
+			[B0(chan) B1(chan) B2(chan)], y3);
+	semilogx((0:(length(x)-1))*(fs/length(x)),20*log10(abs(fft(y4))));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/MakeVowel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,130 @@
+function y=MakeVowel(len, pitch, sampleRate, f1, f2, f3)
+%  MakeVowel(len, pitch [, sampleRate, f1, f2, f3]) - Make a vowel with
+%    "len" samples and the given pitch.  The sample rate defaults to
+%    be 22254.545454 Hz (the native Mactinosh Sampling Rate).  The
+%    formant frequencies are f1, f2 & f3.  Some common vowels are
+%               Vowel       f1      f2      f3
+%                /a/        730    1090    2440
+%                /i/        270    2290    3010
+%                /u/        300     870    2240
+%
+% The pitch variable can either be a scalar indicating the actual
+%      pitch frequency, or an array of impulse locations. Using an
+%      array of impulses allows this routine to compute vowels with
+%      varying pitch.
+%
+% Alternatively, f1 can be replaced with one of the following strings
+%      'a', 'i', 'u' and the appropriate formant frequencies are
+%      automatically selected.
+%  Modified by R. Duda, 3/13/94
+
+% (c) 1998 Interval Research Corporation  
+
+if nargin < 2,
+   fprintf('Format: y = MakeVowel(len, pitch [, sampleRate, f1, f2, f3])\n');
+   return;
+end;
+
+if nargin < 6; f3 = 0; end;
+if nargin < 5; f2 = 0; end;
+if nargin < 4,
+   f1 = 0;
+else
+    if isstr(f1)
+        if f1 == 'a' | f1 == '/a/'
+               f1=730; f2=1090; f3=2440;
+        elseif f1 == 'i' | f1 == '/i/'
+               f1=270; f2=2290; f3=3010;
+        elseif f1 == 'u' | f1 == '/u/'
+               f1=300; f2=870; f3=2240;
+        end
+   end;
+end;
+
+if nargin < 3,
+   sampleRate = 22254.545454;
+elseif sampleRate < 1000,         % Apparently for test purposes
+   sampleRate = 22254.545454;
+end;
+
+%  GlottalPulses(pitch, fs, len) - Generate a stream of
+%    glottal pulses with the given pitch (in Hz) and sampling
+%    frequency (sampleRate).  A vector of the requested length is returned.
+y=zeros(1,len);
+if length(pitch) > 1,            % If true, use to determine points
+   points=pitch;                 % Check for valid sequence of points
+   if any(points~=sort(points)),
+      error('Values in pitch array must be in ascending order.')
+   end;
+   if points(1) < 1,
+      error('Values in pitch array cannot be less than 1.');
+   end;
+   kmax=sum(points <= len);
+   if kmax == 0,
+      error('All values in pitch array exceed "len"; none should.');
+   elseif kmax < length(points),
+      fprintf('Some values in pitch array exceed "len"; truncating.\n');
+      points=points(1:kmax);
+   end;
+else
+    points=1:sampleRate/pitch:len;
+end;
+indices=floor(points);
+
+%  Use a triangular approximation to an impulse function.  The important
+%  part is to keep the total amplitude the same.
+y(indices) = (indices+1)-points;
+y(indices+1) = points-indices;
+
+%  GlottalFilter(x,fs) - Filter an impulse train and simulate the glottal
+%    transfer function.  The sampling interval (sampleRate) is given in Hz.
+%    The filtering performed by this function is two first-order filters
+%    at 250Hz.
+a = exp(-250*2*pi/sampleRate);
+%y=filter([1,0,-1],[1,-2*a,a*a],y);      %  Not as good as one below....
+y=filter([1],[1,0,-a*a],y);
+
+%  FormantFilter(input, f, fs) - Filter an input sequence to model one
+%    formant in a speech signal.  The formant frequency (in Hz) is given
+%    by f and the bandwidth of the formant is a constant 50Hz.  The
+%    sampling frequency in Hz is given by fs.
+if f1 > 0
+        cft = f1/sampleRate;
+        bw = 50;
+        q = f1/bw;
+        rho = exp(-pi * cft / q);
+        theta = 2 * pi * cft * sqrt(1-1/(4 * q*q));
+        a2 = -2*rho*cos(theta);
+        a3 = rho*rho;
+        y=filter([1+a2+a3],[1,a2,a3],y);
+end;
+
+%  FormantFilter(input, f, fs) - Filter an input sequence to model one
+%    formant in a speech signal.  The formant frequency (in Hz) is given
+%    by f and the bandwidth of the formant is a constant 50Hz.  The
+%    sampling frequency in Hz is given by fs.
+if f2 > 0
+        cft = f2/sampleRate;
+        bw = 50;
+        q = f2/bw;
+        rho = exp(-pi * cft / q);
+        theta = 2 * pi * cft * sqrt(1-1/(4 * q*q));
+        a2 = -2*rho*cos(theta);
+        a3 = rho*rho;
+        y=filter([1+a2+a3],[1,a2,a3],y);
+end;
+
+%  FormantFilter(input, f, fs) - Filter an input sequence to model one
+%    formant in a speech signal.  The formant frequency (in Hz) is given
+%    by f and the bandwidth of the formant is a constant 50Hz.  The
+%    sampling frequency in Hz is given by fs.
+if f3 > 0
+        cft = f3/sampleRate;
+        bw = 50;
+        q = f3/bw;
+        rho = exp(-pi * cft / q);
+        theta = 2 * pi * cft * sqrt(1-1/(4 * q*q));
+        a2 = -2*rho*cos(theta);
+        a3 = rho*rho;
+        y=filter([1+a2+a3],[1,a2,a3],y);
+end;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/MeddisHairCell.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,72 @@
+function y = MeddisHairCell(data,sampleRate,subtractSpont)
+% y = MeddisHairCell(data,sampleRate)
+% This function calculates Ray Meddis' hair cell model for a
+% number of channels.  Data is arrayed as one channel per row.
+% All channels are done in parallel (but each time step is
+% sequential) so it will be much more efficient to process lots
+% of channels at once.
+
+% (c) 1998 Interval Research Corporation  
+% Changed h and added comment at suggestion of Alain de Cheveigne'   12/11/98
+
+if (nargin<3),  subtractSpont=0;  end
+
+% Parameters from Meddis' April 1990 JASA paper.
+M = 1;
+A = 5;
+B = 300;
+g = 2000;
+y = 5.05;
+l = 2500;
+r = 6580;
+x = 66.31;
+h = 50000;	% This parameter scales the discharge rate. Adjust as necessary.
+		% In combination with the gammatone filterbank (ERBFilterBank),
+		% h=50000 will produce a steady-state average discharge
+		% probability of about 135 spikes/s within the 1kHz channel,
+		% for an input consisting of a 1 kHz sinewave at 60 dB SPL
+		% (0 dB SPL corresponds to an RMS level of 1.0 at the
+		% input of the gammatone filter).  Scaling and constant 
+		% courtesy of Alain de Cheveigne'
+
+
+% Internal constants
+dt = 1/sampleRate;
+gdt = g*dt;
+ydt = y*dt;
+ldt = l*dt;
+rdt = r*dt;
+xdt = x*dt;
+[numChannels dataLength] = size(data);
+
+% Initial values 
+kt = g*A/(A+B);
+spont = M*y*kt/(l*kt+y*(l+r));
+c = spont * ones(numChannels,1);
+q = c*(l+r)/kt;
+w = c*r/x;
+zeroVector = zeros(numChannels,1);
+
+% Now iterate through each time slice of the data.  Use the
+% max function to implement the "if (0>" test.
+y = zeros(numChannels, dataLength);
+for i = 1:dataLength
+ limitedSt = max(data(:,i)+A,0);
+ kt = gdt*limitedSt./(limitedSt+B);
+ replenish = max(ydt*(M-q),zeroVector);
+ eject = kt.*q;
+ loss = ldt.*c;
+ reuptake = rdt.*c;
+ reprocess = xdt.*w;
+
+ q = q + replenish - eject + reprocess;
+ c = c + eject - loss - reuptake;
+ w = w + reuptake - reprocess;
+ y(:,i) = c;
+end
+
+y = h .* y;
+
+if (subtractSpont > 0)
+ y=max(0,y-spont);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/README	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+This is the Matlab Auditory Toolbox.  Version 2.
+
+First published by Apple Computer as Apple Technical Report #45.  This
+new version is published by Interval Research Corporation as TR #1998-010.
+
+I have put this collection of code together to support my own research.  I
+hope by adding documentation and testing everything that other researchers
+can also benefit from this work.
+
+Needless to say, support is limited.  I use this code, so I am interested
+in hearing bug reports.  I'll fix them if I can reproduce them and I have
+the time.  But no guarantees.  Sending bug fixes is a good way to make sure
+I pay attention.
+
+This archive contains ".m" files, some Matlab mex files, and the C sources
+needed to create the mex files.  I have tested this code on Macintosh, PC,
+SGI, and Sun computers running Matlab 5.2.  The code is reasonably 
+portable, so I don't expect any problems on any machine running Matlab.
+
+After installing this software on your machine, use the test_auditory
+script to run through the examples in the documentation.
+
+Please let me know if you have comments or questions.  I can be reached
+at 
+	Malcolm Slaney
+	Interval Research Corporation
+	1801 Page Mill Road, Building C
+	Palo Alto, CA 94304
+
+	malcolm@interval.com
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/SecondOrderFilter.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+% filter = SecondOrderFilter(f, q, fs)
+% Design a second order digital filter with a center frequency of
+% f, filter quality of q, and digital sampling rate of fs (Hz).
+
+% (c) 1998 Interval Research Corporation  
+
+function filts = SecondOrderFilter(f,q,fs)
+cft = f'/fs;
+rho = exp(- pi * cft ./ q');
+theta = 2 * pi * cft .* sqrt(1-1 ./(4*q'.^2));
+filts = [ ones(size(rho)) -2*rho.*cos(theta) rho.^2 ];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/SeneffEar.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,118 @@
+function y = SeneffEar(x, fs, plotChannel)
+
+% Compute the response of Stephanie Seneff's Auditory Model.  The
+% input waveform x (with sampling rate fs) is converted into fourty
+% channels of auditory firing probabilities.
+%
+% This m-function is based on data from the following paper:
+%	Benjamin D. Bryant and John D. Gowdy, "Simulation of Stages
+%	I and II of Seneff's Auditory Model (SAM) Using Matlab", and 
+%	published in the Proceedings of the 1993 Matlab User's Group
+%	Conference.
+% Thanks to Benjamin Bryant for supplying us with his filter 
+% coefficients and the initial organization of this implementation.
+
+% (c) 1998 Interval Research Corporation  
+
+global SeneffFS SeneffPreemphasis SeneffFilterBank
+global SeneffForward SeneffBackward
+
+if nargin < 2; fs = 16000; end
+if nargin < 3; plotChannel = 0; end
+
+if exist('SeneffFS') ~= 1 | length(SeneffFS) == 0 | SeneffFS ~= fs
+	[SeneffPreemphasis, SeneffFilterBank, ...
+	 SeneffForward, SeneffBackward] = SeneffEarSetup(fs);
+	SeneffFS = fs;
+end
+
+y=soscascade(filter(SeneffPreemphasis, [1], x), ...
+			SeneffFilterBank);
+
+[width,channels] = size(SeneffForward);
+for j=1:channels
+	y(j,:) = filter(SeneffForward(:,j),SeneffBackward(:,j),y(j,:));
+end
+
+if plotChannel > 0
+	clf
+	subplot(4,2,1);
+	plot(y(plotChannel,:))
+	subplot(4,2,2);
+	f=find(y(plotChannel,:)>max(y(plotChannel,:))/20);
+	plotStart = max(1,f(1)-10);
+	plotEnd = min(plotStart+84,length(y(plotChannel,:)));
+	plot(y(plotChannel,plotStart:plotEnd));
+	ylabel('Filter Bank')
+end
+
+% Implement Seneff's detector non-linearity.
+hwrA = 10;
+hwrB = 65;
+hwrG = 2.35;
+
+y = hwrA*atan(hwrB*max(0,y))+exp(hwrA*hwrB*min(0,y));
+if plotChannel > 0
+	subplot(4,2,3);
+	plot(y(plotChannel,:))
+	subplot(4,2,4);
+	plot(y(plotChannel,plotStart:plotEnd));
+	ylabel('HWR');
+end
+
+% Implement Seneff's short-term adaptation (a reservoir hair cell
+% model.)
+start_Cn = 442.96875;
+Tua = 58.3333/fs;
+Tub = 8.3333/fs;
+
+len = length(x);
+Cn = start_Cn*ones(channels,1)*0;		% Does this work non zero?
+for j=1:len
+	Sn = y(:,j);
+	flow = max(0,Tua*(Sn-Cn));
+	Cn = Cn + flow - Tub*Cn;
+	y(:,j) = flow;
+end
+
+% Implement Seneff's Low Pass filter (to model the loss of
+% Synchrony.
+
+lpAlpha = .209611;
+lpPoly = poly([lpAlpha lpAlpha lpAlpha lpAlpha]);
+Glp = sum(lpPoly);
+
+for j=1:channels
+	y(j,:) = filter([Glp],lpPoly,y(j,:));
+end
+
+if plotChannel > 0
+	subplot(4,2,5);
+	plot(y(plotChannel,:))
+	subplot(4,2,6);
+	plot(y(plotChannel,plotStart:plotEnd));
+	ylabel('Adaptation');
+end
+
+% Finally implement Seneff's Adaptive Gain Control.  This computes
+%				y(n) = y(n)/(1+k y'(n))
+% where y'(n) is a low-pass filtered version of the input.  Note, 
+% this is a single channel AGC.
+
+initial_yn = 0.23071276;
+alpha_agc = 0.979382181;
+kagc = 0.002;
+
+for j=1:channels
+	averageY(j,:) = filter([0 1-alpha_agc],[alpha_agc],y(j,:),initial_yn);
+end
+y = y./(1+kagc*averageY);
+
+if plotChannel > 0
+	subplot(4,2,7);
+	plot(y(plotChannel,:))
+	subplot(4,2,8);
+	plot(y(plotChannel,plotStart:plotEnd));
+	ylabel('AGC');
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/SeneffEarSetup.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,224 @@
+function [SeneffPreemphasis, SeneffFilterBank, SeneffForward, SeneffBackward] ...
+			= SeneffEarSetup(fs)
+			
+% This m-function is based on data from the following paper:
+%	Benjamin D. Bryant and John D. Gowdy, "Simulation of Stages
+%	I and II of Seneff's Auditory Model (SAM) Using Matlab", and 
+%	published in the Proceedings of the 1993 Matlab User's Group
+%	Conference.
+% Thanks to Benjamin Bryant for supplying us with his filter 
+% coefficients and the initial organization of this implementation.
+
+% (c) 1998 Interval Research Corporation  
+
+% Set the following variable to a non-zero value to see a summary
+% of the filter bank's behaviour.
+plotTests = 0;
+
+% The following values were taken from Figure 2 of Bryant's paper.
+PreemphasisRTheta = [0.86 3.1148863;0.99 0; 0.5 0; 0.95 3.14159];
+
+% The following values were taken from Table 1 of Bryant's paper.
+% They represent the cascade zeros (R-z and Theta-z), and the 
+% second order poles (radius and theta) and zeros (radius and theta/2).
+%
+%    R-z       Theta-z       Radius       Theta       R-z2
+FilterBankRTheta = [
+     0         3.14159       0.740055     2.633909    0.8
+     0.86      2.997077      0.753637     2.178169    0.8
+     0.86      2.879267      0.775569     1.856744    0.8
+     0.86      2.761458      0.798336     1.617919    0.8
+     0.86      2.643648      0.819169     1.433496    0.8
+     0.86      2.525839      0.837158     1.286795    0.8
+     0.8       2.964876      0.852598     1.167321    0.8
+     0.86      2.408029      0.865429     1.068141    0.8
+     0.86      2.29022       0.876208     0.984489    0.8
+     0.86      2.17241       0.885329     0.912985    0.8
+     0.86      2.054601      0.893116     0.851162    0.8
+     0.86      1.936791      0.899823     0.797179    0.8
+     0.8       2.788161      0.906118     0.749633    0.8
+     0.86      1.818981      0.911236     0.70744     0.8
+     0.86      1.701172      0.915747     0.669742    0.8
+     0.86      1.583362      0.919753     0.635858    0.8
+     0.86      1.465552      0.923335     0.605237    0.8
+     0.86      1.347743      0.926565     0.57743     0.8
+     0.8       2.611447      0.929914     0.552065    0.8
+     0.86      1.229933      0.932576     0.528834    0.8
+     0.86      1.112123      0.944589     0.487783    0.75
+     0.86      0.994314      0.957206     0.452645    0.660714
+     0.86      0.876504      0.956548     0.42223     0.672143
+     0.86      0.758694      0.956653     0.395644    0.682143
+     0.8       2.434732      0.956518     0.372208    0.690966
+     0.86      0.640885      0.956676     0.351393    0.69881
+     0.86      0.523075      0.956741     0.316044    0.712143
+     0.8       2.258018      0.956481     0.287157    0.723052
+     0.8       2.081304      0.956445     0.263108    0.732143
+     0.8       1.904589      0.956481     0.242776    0.739835
+     0.86      0.405265      0.958259     0.217558    0.749384
+     0.8       1.727875      0.963083     0.197086    0.757143
+     0.8       1.55116       0.969757     0.175115    0.769048
+     0.8       1.374446      0.97003      0.153697    0.780662
+     0.8       1.197732      0.970382     0.134026    0.791337
+     0.8       1.021017      0.970721     0.118819    0.799596
+     0.8       1.5           0.970985     0.106711    0.8
+     0.8       1.2           0.971222     0.096843    0.8
+     0.8       1             0.97144      0.088645    0.8
+     0.8       0.9           0.971645     0.081727    0.8];
+
+% Let's plot the cascade zero locations and the locations of the
+% pole and zeros in the resonator.
+if plotTests
+	clf;
+	subplot(3,3,1);
+	plot(FilterBankRTheta(:,1).*exp(i*FilterBankRTheta(:,2)))
+	axis([-1 1 0 1])
+	title('Cascade Zero Locations')
+
+	subplot(3,3,2);
+	plot([FilterBankRTheta(:,3).*exp(i*FilterBankRTheta(:,4)) ...
+		  FilterBankRTheta(:,5).*exp(i*FilterBankRTheta(:,4)/2)],'+')
+	title('Resonator Pole/Zero')
+	drawnow;
+end
+
+% Convert r-theta form, first into a list of roots, then a polynomial
+roots=exp(i*PreemphasisRTheta(:,2)).*PreemphasisRTheta(:,1);
+SeneffPreemphasis=real(poly([roots;conj(roots)]));
+
+% Plot the preemphasis filter response, if desired
+if plotTests
+	subplot(3,3,3);
+	freqScale=(0:255)/256*8000;
+	freqresp = FreqResp(SeneffPreemphasis,[1], freqScale, 16000);
+	semilogx(freqScale,freqresp)
+	title('Preemphasis Response');
+	axis([100 10000 -60 20])
+	drawnow;
+end
+
+% Now figure out the second order sections that make up the main
+% filter bank cascade.  We put the zeros into the numerator (b's)
+% and there are no poles.  Just to keep things simpler, we adjust
+% the gain of each filter to keep it unity gain at DC.
+[channels,width] = size(FilterBankRTheta);
+roots=exp(i*FilterBankRTheta(:,2)).*FilterBankRTheta(:,1);
+SeneffFilterBank = zeros(channels,5);
+for j=1:channels
+	SeneffFilterBank(j,1:3) = poly([roots(j) conj(roots(j))]);
+	SeneffFilterBank(j,1:3) = SeneffFilterBank(j,1:3)/sum(SeneffFilterBank(j,1:3));
+end
+
+% Plot the cascade zero responses, if desired.
+if plotTests
+	subplot(3,3,4);
+	y=soscascade([1 zeros(1,511)],SeneffFilterBank);
+	freqresp=20*log10(abs(fft(y(1:5:40,:)')));
+	freqScale=(0:511)/512*16000;
+	semilogx(freqScale(1:256),freqresp(1:256,:))
+	axis([100 10000 -150 0]);
+	title('Cascade Response');
+	drawnow;
+end
+
+% Now figure out the resonating filters.  Each of these resonators
+% is a double pole-zero pair.
+zlocs = FilterBankRTheta(:,5).*exp(i*FilterBankRTheta(:,4)/2);
+plocs = FilterBankRTheta(:,3).*exp(i*FilterBankRTheta(:,4));
+SeneffForward = zeros(5,channels);
+SeneffBackward = zeros(5,channels);
+
+for j=1:channels
+	SeneffForward(:,j) = real(poly([zlocs(j) conj(zlocs(j)) ...
+										zlocs(j) conj(zlocs(j))]))';
+	SeneffBackward(:,j) = real(poly([plocs(j) conj(plocs(j)) ...
+										plocs(j) conj(plocs(j))]))';
+end
+
+% Now plot the frequency response of just the resonating filters.
+% These are all bandpass filters.
+if plotTests
+	subplot(3,3,5);
+	impulse = [1 zeros(1,255)];
+	y=zeros(256,channels);
+	for j=1:40
+		y(:,j) = filter(SeneffForward(:,j),SeneffBackward(:,j),impulse)';
+	end
+	freqresp=20*log10(abs(fft(y(:,1:5:40))));
+	freqScale=(0:255)/256*16000;
+	semilogx(freqScale(1:128),freqresp(1:128,:))
+	axis([100 10000 -30 40]);
+	title('Resonators Response')
+	drawnow;
+end
+
+% The plot below shows the overall response of the preemphasis filters
+% along with the just-designed cascade of zeros.
+if plotTests
+	subplot(3,3,6);
+	impulse = [1 zeros(1,511)];
+	y=soscascade(filter(SeneffPreemphasis, [1], impulse), ...
+				SeneffFilterBank);
+	freqresp=20*log10(abs(fft(y(1:5:40,:)')));
+	freqScale=(0:511)/512*16000;
+	semilogx(freqScale(1:256),freqresp(1:256,:))
+	axis([100 10000 -100 25]);
+	title('Preemphasis+Cascade');
+	drawnow;
+end
+
+% Now we need to normalize the gain of each channel.  We run an impulse
+% through the preemphasis filter, and then through the cascade of zeros.
+% Finally, we run it through each of the resonator filters.
+impulse = [1 zeros(1,255)];
+y=soscascade(filter(SeneffPreemphasis, [1], impulse), ...
+			SeneffFilterBank);
+for j=1:channels
+	y(j,:) = filter(SeneffForward(:,j),SeneffBackward(:,j),y(j,:));
+end
+
+% Now we have impulse responses from each filter.   We can find the FFT
+% and then find the gain peak.  We divide each forward polynomial by the
+% maximum gain (to normalize) and then multiply by the desired low
+% frequency roll-off.  The Bryant paper says that the last 24 channels
+% should be cut at 6dB per octave and that this occurs at 1600 Hz, but 
+% it looks to me like the gain change happens at 3200 Hz.
+freqresp=abs(fft(y'));
+gain = ones(1,channels)./max(freqresp);
+cfs = FilterBankRTheta(:,4)/pi*fs/2;
+rolloff = min(cfs/1600,1);
+	
+for j=1:channels
+	SeneffForward(:,j)=SeneffForward(:,j)*gain(j)*rolloff(j);
+end
+	
+% All Done. The figure below should match Figure 3 of Bryant's paper.
+if plotTests
+	subplot(3,3,8);
+	impulse = [1 zeros(1,511)];
+	y=soscascade(filter(SeneffPreemphasis, [1], impulse), ...
+				SeneffFilterBank);
+	for j=1:channels
+		y(j,:) = filter(SeneffForward(:,j),SeneffBackward(:,j),y(j,:));
+	end
+
+	freqresp=20*log10(abs(fft(y(1:5:40,:)')));
+	freqScale=(0:511)/512*16000;
+	plot(freqScale(1:256),freqresp(1:256,:))
+	axis([100 10000 -120 0]);
+	title('Magnitude Response vs. Linear Frequency');
+	drawnow;
+end
+
+
+function mag=FreqResp(b,a,f,fs)
+cf = exp(i*2*pi*f/fs);
+num = 0;
+for i=1:length(b)
+	num = num + b(end-i+1)*cf.^i;
+end
+
+denom = 0;
+for i=1:length(a)
+	denom = denom + a(end-i+1)*cf.^i;
+end
+mag = 20*log10(abs(num./denom));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/SetGain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+% filter = SetGain(filter, desired, f, fs)
+% Set the gain of a filter (1x5 vector) to any desired gain
+% at any desired frequency (f).
+
+% (c) 1998 Interval Research Corporation  
+
+function filter = SetGain(filter, desired, f, fs)
+oldGain = 10^(FreqResp(filter, f, fs)/20);
+filter(1:3) = filter(1:3)*desired/oldGain;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/WhiteVowel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+function [output,aCoeff] = WhiteVowel(data,sr,L,pos)
+% function [output,aCoeff] = WhiteVowel(data,sr,L,pos)
+%
+% Speech is often described as having spectral peaks or formants which 
+% identify the phonetic signal. An interesting experiment, first proposed by
+% XXX, filters a speech signal to remove all the formant information at one
+% time during the speech. If there are no formant peaks, how can the speech
+% be understood?  It turns out that processing, much like RASTA, means that
+% relative changes in spectrum are the most important, thus the speech signal
+% is understood because the formant transitions carry the information.  This
+% gives speech an important transparency due 
+%
+% This function takes a speech signal (data) with a given sampling rate (sr).
+% It then finds the L-order LPC filter that describes the speech at the given
+% position (pos ms).  The entire speech signal is then filtered with the
+% inverse of the LPC filter, effectively turning the speech spectrum at the 
+% given time white (flat).
+
+% Chris Pal, Interval, May 1997
+% (c) 1998 Interval Research Corporation  
+
+fr = 20; fs = 30; preemp = .9378;			% LPC defaults
+
+[row col] = size(data);
+if col==1 data=data'; end
+
+nframe = 0;
+msfr = round(sr/1000*fr);
+msfs = round(sr/1000*fs);
+duration = length(data);
+msoverlap = msfs - msfr;
+frameNumber = floor(pos/1000*sr/msfr);
+
+frameStart = round(pos/1000*sr - msfs/2);	                
+frameData = data(frameStart:(frameStart+msfs-1));   
+aCoeff = proclpc(frameData, sr, L, fr, fs, preemp);
+                                % Calculate the filter response
+                                % by evaluating the z-transform
+spec=lpc_spec(aCoeff);
+subplot(2,3,1);
+plot(spec);
+title('LPC Spectral Slice');
+ylabel('Original')
+
+								% Now do the actual whitening filter
+output = filter(aCoeff,1,data)';
+
+frameData = output(frameStart:(frameStart+msfs-1));   
+bCoeff = proclpc(frameData, sr, L, fr, fs,  preemp);
+spec=lpc_spec(bCoeff);
+subplot(2,3,4);
+plot(spec);
+ylabel('Whitened'); xlabel('FFT Bin');
+
+% 256-DFT
+origSpec = 20*log10(abs(specgram(data,512,sr,msfs,msoverlap)));
+subplot(2,3,2),imagesc(origSpec); axis xy; colormap(1-gray);
+title('Spectrogram');
+
+synSpec = 20*log10(abs(specgram(output,512,sr,msfs,msoverlap)));
+subplot(2,3,5),imagesc(synSpec); axis xy; colormap(1-gray);
+xlabel('Frame #');
+
+origloc = origSpec(:,frameNumber); origloc=origloc-max(origloc);origmin=min(origloc);
+subplot(2,3,3),plot(origloc),title('Spectrogram'),
+axis([1 length(origloc) origmin 0]);
+
+filloc = synSpec(:,frameNumber); filloc=filloc-max(filloc);
+subplot(2,3,6),plot(filloc);ylabel('db');
+axis([1 length(origloc) origmin 0]);
+xlabel('FFT Bin');
+
+function spec=lpc_spec(aCoeff)
+gain=0;
+cft=0:(1/255):1;
+for index=1:size(aCoeff,1)
+ gain = gain + aCoeff(index)*exp(-i*2*pi*cft).^index;
+end
+gain = abs(1./gain);
+spec = 20*log10(gain(1:128))';
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/agc.dll has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/agc.mex has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/agc.mexsg has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/agc.mexsg64 has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/agc.mexsol has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/contents.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+% Auditory Toolbox
+% by Malcolm Slaney
+% (c) 1998 Interval Research Corporation  
+% Technical Report #1998-010
+%
+% Lyon's Cochlear Model.
+%   agc                - Adaptation process for Lyon's Passive 
+%                        longwave cochlear model
+%   DesignLyonCascade  - Designs the filters needed to implement
+%                        Lyon's passive cochlear model
+%   EpsilonFromTauFs   - Calculate the first order decay 
+%                        coefficient (tau)
+%   FreqResp           - Evaluate frequency response of the filter
+%   LyonPassiveEar     - Calculate auditory nerve responses using
+%                        Lyon's passive cochlear model
+%   SecondOrderSection - Design a second order filter section
+%   SetGain            - Set the gain of a second order system
+%   soscascade         - Implement a cascade of second order filters
+%   sosfilters         - Implement a bank of second order filters
+%
+% Patterson/Meddis Models
+%   ERBSpace           - Calculate frequencies for ERB filters
+%   MakeERBFilters     - Design for ERB cochlear model
+%   ERBFilterBank      - Implement a bank of ERB Gammatone filters
+%   MeddisHairCell     - Implement Meddis' Inner Hair Cell Model
+%
+% Seneff Auditory Model
+%   SeneffEar          - Implement Stages I/II of Seneff's Auditory Model
+%   SeneffEarSetup     - Design filters for Seneff's model
+%
+% Correlogram Processing
+%   CorrelogramArray   - Compute an array of correlogram frames
+%   CorrelogramFrame   - Compute a single correlogram frame
+%   CorrelogramMovie   - Compute a Matlab movie of a correlogram
+%   CorrelogramPitch   - Compute the pitch of a signal with a correlogram
+%
+% Signal Processing.
+%   mfcc               - Mel-frequency cepstral coefficient transform of
+%                        an audio signal
+%   spectrogram        - Compute the spectrogram of a signal
+%   rasta              - Implement RelAtive SpecTrAl filtering
+%   proclpc            - Perform Linear Preditive Coding (LPC) analysis
+%   synlpc             - Synthesize speech from LPC coefficients
+%
+% Demonstrations
+%   MakeVowel          - Synthesize a vowel sound
+%   FMPoints           - Create a changing pitch signal for vowel synthesis
+%   WhiteVowel         - Filter a speech signal so formants disappear
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/dtw.mexlx has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/dtw.mexsg has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/dtw.mexsg64 has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/dtw.mexsol has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/inverseagc.dll has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/inverseagc.mex has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/inverseagc.mexsg has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/inverseagc.mexsg64 has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/inverseagc.mexsol has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/invsoscascade.dll has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/invsoscascade.mex has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/invsoscascade.mexsg has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/invsoscascade.mexsg64 has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/invsoscascade.mexsol has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/mfcc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,181 @@
+%  mfcc - Mel frequency cepstrum coefficient analysis.
+%   [ceps,freqresp,fb,fbrecon,freqrecon] = ...
+%			mfcc(input, samplingRate, [frameRate])
+% Find the cepstral coefficients (ceps) corresponding to the
+% input.  Four other quantities are optionally returned that
+% represent:
+%	the detailed fft magnitude (freqresp) used in MFCC calculation, 
+%	the mel-scale filter bank output (fb)
+%	the filter bank output by inverting the cepstrals with a cosine 
+%		transform (fbrecon),
+%	the smooth frequency response by interpolating the fb reconstruction 
+%		(freqrecon)
+%  -- Malcolm Slaney, August 1993
+% Modified a bit to make testing an algorithm easier... 4/15/94
+% Fixed Cosine Transform (indices of cos() were swapped) - 5/26/95
+% Added optional frameRate argument - 6/8/95
+% Added proper filterbank reconstruction using inverse DCT - 10/27/95
+% Added filterbank inversion to reconstruct spectrum - 11/1/95
+
+% (c) 1998 Interval Research Corporation  
+
+function [ceps,freqresp,fb,fbrecon,freqrecon] = ...
+		mfcc(input, samplingRate, frameRate)
+global mfccDCTMatrix mfccFilterWeights
+
+[r c] = size(input);
+if (r > c) 
+	input=input';
+end
+
+%	Filter bank parameters
+lowestFrequency = 133.3333;
+linearFilters = 13;
+linearSpacing = 66.66666666;
+logFilters = 27;
+logSpacing = 1.0711703;
+fftSize = 512;
+cepstralCoefficients = 13;
+windowSize = 400;
+windowSize = 256;		% Standard says 400, but 256 makes more sense
+				% Really should be a function of the sample
+				% rate (and the lowestFrequency) and the
+				% frame rate.
+if (nargin < 2) samplingRate = 16000; end;
+if (nargin < 3) frameRate = 100; end;
+
+% Keep this around for later....
+totalFilters = linearFilters + logFilters;
+
+% Now figure the band edges.  Interesting frequencies are spaced
+% by linearSpacing for a while, then go logarithmic.  First figure
+% all the interesting frequencies.  Lower, center, and upper band
+% edges are all consequtive interesting frequencies. 
+
+freqs = lowestFrequency + (0:linearFilters-1)*linearSpacing;
+freqs(linearFilters+1:totalFilters+2) = ...
+		      freqs(linearFilters) * logSpacing.^(1:logFilters+2);
+
+lower = freqs(1:totalFilters);
+center = freqs(2:totalFilters+1);
+upper = freqs(3:totalFilters+2);
+
+% We now want to combine FFT bins so that each filter has unit
+% weight, assuming a triangular weighting function.  First figure
+% out the height of the triangle, then we can figure out each 
+% frequencies contribution
+mfccFilterWeights = zeros(totalFilters,fftSize);
+triangleHeight = 2./(upper-lower);
+fftFreqs = (0:fftSize-1)/fftSize*samplingRate;
+
+for chan=1:totalFilters
+	mfccFilterWeights(chan,:) = ...
+  (fftFreqs > lower(chan) & fftFreqs <= center(chan)).* ...
+   triangleHeight(chan).*(fftFreqs-lower(chan))/(center(chan)-lower(chan)) + ...
+  (fftFreqs > center(chan) & fftFreqs < upper(chan)).* ...
+   triangleHeight(chan).*(upper(chan)-fftFreqs)/(upper(chan)-center(chan));
+end
+%semilogx(fftFreqs,mfccFilterWeights')
+%axis([lower(1) upper(totalFilters) 0 max(max(mfccFilterWeights))])
+
+hamWindow = 0.54 - 0.46*cos(2*pi*(0:windowSize-1)/windowSize);
+
+if 0					% Window it like ComplexSpectrum
+	windowStep = samplingRate/frameRate;
+	a = .54;
+	b = -.46;
+	wr = sqrt(windowStep/windowSize);
+	phi = pi/windowSize;
+	hamWindow = 2*wr/sqrt(4*a*a+2*b*b)* ...
+		(a + b*cos(2*pi*(0:windowSize-1)/windowSize + phi));
+end
+
+% Figure out Discrete Cosine Transform.  We want a matrix
+% dct(i,j) which is totalFilters x cepstralCoefficients in size.
+% The i,j component is given by 
+%                cos( i * (j+0.5)/totalFilters pi )
+% where we have assumed that i and j start at 0.
+mfccDCTMatrix = 1/sqrt(totalFilters/2)*cos((0:(cepstralCoefficients-1))' * ...
+				(2*(0:(totalFilters-1))+1) * pi/2/totalFilters);
+mfccDCTMatrix(1,:) = mfccDCTMatrix(1,:) * sqrt(2)/2;
+
+%imagesc(mfccDCTMatrix);
+
+% Filter the input with the preemphasis filter.  Also figure how
+% many columns of data we will end up with.
+if 1
+	preEmphasized = filter([1 -.97], 1, input);
+else
+	preEmphasized = input;
+end
+windowStep = samplingRate/frameRate;
+cols = fix((length(input)-windowSize)/windowStep);
+
+% Allocate all the space we need for the output arrays.
+ceps = zeros(cepstralCoefficients, cols);
+if (nargout > 1) freqresp = zeros(fftSize/2, cols); end;
+if (nargout > 2) fb = zeros(totalFilters, cols); end;
+
+% Invert the filter bank center frequencies.  For each FFT bin
+% we want to know the exact position in the filter bank to find
+% the original frequency response.  The next block of code finds the
+% integer and fractional sampling positions.
+if (nargout > 4)
+	fr = (0:(fftSize/2-1))'/(fftSize/2)*samplingRate/2;
+	j = 1;
+	for i=1:(fftSize/2)
+		if fr(i) > center(j+1)
+			j = j + 1;
+		end
+		if j > totalFilters-1
+			j = totalFilters-1;
+		end
+		fr(i) = min(totalFilters-.0001, ...
+		    max(1,j + (fr(i)-center(j))/(center(j+1)-center(j))));
+	end
+	fri = fix(fr);
+	frac = fr - fri;
+
+	freqrecon = zeros(fftSize/2, cols);
+end
+
+% Ok, now let's do the processing.  For each chunk of data:
+%    * Window the data with a hamming window,
+%    * Shift it into FFT order,
+%    * Find the magnitude of the fft,
+%    * Convert the fft data into filter bank outputs,
+%    * Find the log base 10,
+%    * Find the cosine transform to reduce dimensionality.
+for start=0:cols-1
+    first = start*windowStep + 1;
+    last = first + windowSize-1;
+    fftData = zeros(1,fftSize);
+    fftData(1:windowSize) = preEmphasized(first:last).*hamWindow;
+    fftMag = abs(fft(fftData));
+    earMag = log10(mfccFilterWeights * fftMag');
+
+    ceps(:,start+1) = mfccDCTMatrix * earMag;
+    if (nargout > 1) freqresp(:,start+1) = fftMag(1:fftSize/2)'; end;
+    if (nargout > 2) fb(:,start+1) = earMag; end
+	if (nargout > 3) 
+		fbrecon(:,start+1) = ...
+			mfccDCTMatrix(1:cepstralCoefficients,:)' * ...
+			ceps(:,start+1);
+	end
+	if (nargout > 4)
+		f10 = 10.^fbrecon(:,start+1);
+		freqrecon(:,start+1) = samplingRate/fftSize * ...
+			(f10(fri).*(1-frac) + f10(fri+1).*frac);
+	end
+end
+
+% OK, just to check things, let's also reconstruct the original FB
+% output.  We do this by multiplying the cepstral data by the transpose
+% of the original DCT matrix.  This all works because we were careful to
+% scale the DCT matrix so it was orthonormal.
+if 1 & (nargout > 3) 
+	fbrecon = mfccDCTMatrix(1:cepstralCoefficients,:)' * ceps;
+%	imagesc(mt(:,1:cepstralCoefficients)*mfccDCTMatrix);
+end;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/proclpc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,158 @@
+function [aCoeff,resid,pitch,G,parcor,stream] = proclpc(data,sr,L,fr,fs,preemp)
+% USAGE: [aCoeff,resid,pitch,G,parcor,stream] = proclpc(data,sr,L,fr,fs,preemp)
+%
+% This function computes the LPC (linear-predictive coding) coefficients that
+% describe a speech signal.  The LPC coefficients are a short-time measure of
+% the speech signal which describe the signal as the output of an all-pole
+% filter.  This all-pole filter provides a good description of the speech
+% articulators; thus LPC analysis is often used in speech recognition and 
+% speech coding systems.  The LPC parameters are recalculated, by default in
+% this implementation, every 20ms.
+%
+% The results of LPC analysis are a new representation of the signal
+%	s(n) = G e(n) - sum from 1 to L a(i)s(n-i)
+% where s(n) is the original data.  a(i) and e(n) are the outputs of the LPC 
+% analysis with a(i) representing the LPC model. The e(n) term represents 
+% either the speech source's excitation, or the residual: the details of the 
+% signal that are not captured by the LPC coefficients.  The G factor is a
+% gain term.
+%
+% LPC analysis is performed on a monaural sound vector (data) which has been
+% sampled at a sampling rate of "sr".  The following optional parameters modify
+% the behaviour of this algorithm.
+% L - The order of the analysis.  There are L+1 LPC coefficients in the output
+%	array aCoeff for each frame of data.  L defaults to 13.
+% fr - Frame time increment, in ms.  The LPC analysis is done starting every
+% 	fr ms in time.  Defaults to 20ms (50 LPC vectors a second)
+% fs - Frame size in ms.  The LPC analysis is done by windowing the speech
+% 	data with a rectangular window that is fs ms long.  Defaults to 30ms
+% preemp - This variable is the epsilon in a digital one-zero filter which 
+%	serves to preemphasize the speech signal and compensate for the 6dB
+%	per octave rolloff in the radiation function.  Defaults to .9378.
+%
+% The output variables from this function are
+% aCoeff - The LPC analysis results, a(i).  One column of L numbers for each
+%	frame of data
+% resid - The LPC residual, e(n).  One column of sr*fs samples representing
+%	the excitation or residual of the LPC filter.
+% pitch - A frame-by-frame estimate of the pitch of the signal, calculated
+%	by finding the peak in the residual's autocorrelation for each frame.
+% G - The LPC gain for each frame.
+% parcor - The parcor coefficients.  The parcor coefficients give the ratio
+%	between adjacent sections in a tubular model of the speech 
+%	articulators.  There are L parcor coefficients for each frame of 
+%	speech.
+% stream - The LPC analysis' residual or excitation signal as one long vector.
+%	Overlapping frames of the resid output combined into a new one-
+%	dimensional signal and post-filtered.
+%
+% The synlpc routine inverts this transform and returns the original speech
+% signal.
+%
+% This code was graciously provided by:
+% 	Delores Etter (University of Colorado, Boulder) and 
+%	Professor Geoffrey Orsak (Southern Methodist University) 
+% It was first published in
+%	Orsak, G.C. et al. "Collaborative SP education using the Internet and
+%	MATLAB" IEEE SIGNAL PROCESSING MAGAZINE  Nov. 1995. vol.12, no.6, pp.
+%	23-32.
+% Modified and debugging plots added by Kate Nguyen and Malcolm Slaney
+
+% A more complete set of routines for LPC analysis can be found at
+%	http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
+
+% (c) 1998 Interval Research Corporation  
+   
+
+if (nargin<3), L = 13; end
+if (nargin<4), fr = 20; end
+if (nargin<5), fs = 30; end
+if (nargin<6), preemp = .9378; end
+
+[row col] = size(data);
+if col==1 data=data'; end
+
+nframe = 0;						
+msfr = round(sr/1000*fr);			% Convert ms to samples
+msfs = round(sr/1000*fs);			% Convert ms to samples
+duration = length(data);
+speech = filter([1 -preemp], 1, data)';		% Preemphasize speech
+msoverlap = msfs - msfr;
+ramp = [0:1/(msoverlap-1):1]';			% Compute part of window
+
+
+for frameIndex=1:msfr:duration-msfs+1		% frame rate=20ms
+  frameData = speech(frameIndex:(frameIndex+msfs-1));	% frame size=30ms
+  nframe = nframe+1;
+  autoCor = xcorr(frameData);			% Compute the cross correlation
+  autoCorVec = autoCor(msfs+[0:L]);
+
+						% Levinson's method
+  err(1) = autoCorVec(1);
+  k(1) = 0;
+  A = [];
+  for index=1:L
+    numerator = [1 A.']*autoCorVec(index+1:-1:2);
+    denominator = -1*err(index);
+    k(index) = numerator/denominator;		% PARCOR coeffs
+    A = [A+k(index)*flipud(A); k(index)];     			
+    err(index+1) = (1-k(index)^2)*err(index);
+  end
+
+  aCoeff(:,nframe) = [1; A];
+  parcor(:,nframe) = k';
+
+ 						% Calculate the filter 
+						% response
+						% by evaluating the 
+						% z-transform
+  if 0
+    gain=0;
+    cft=0:(1/255):1;
+    for index=1:L
+      gain = gain + aCoeff(index,nframe)*exp(-i*2*pi*cft).^index;
+    end
+    gain = abs(1./gain);
+    spec(:,nframe) = 20*log10(gain(1:128))';
+    plot(20*log10(gain));
+    title(nframe);
+    drawnow;
+  end
+
+						% Calculate the filter response
+						% from the filter's impulse
+						% response (to check above).
+  if 0
+    impulseResponse = filter(1, aCoeff(:,nframe), [1 zeros(1,255)]);
+    freqResp = 20*log10(abs(fft(impulseResponse)));
+    plot(freqResp);
+  end
+
+  errSig = filter([1 A'],1,frameData);		% find excitation noise
+  
+  G(nframe) = sqrt(err(L+1));			% gain
+  autoCorErr = xcorr(errSig);			% calculate pitch & voicing 
+						% information
+  [B,I] = sort(autoCorErr);
+  num = length(I);
+  if B(num-1) > .3*B(num)
+    pitch(nframe) = abs(I(num) - I(num-1));
+  else
+    pitch(nframe) = 0;
+  end
+
+  resid(:,nframe) = errSig/G(nframe);
+  if(frameIndex==1)				% add residual frames using a
+    stream = resid(1:msfr,nframe); 		% trapezoidal window
+  else
+    stream = [stream; 
+              overlap+resid(1:msoverlap,nframe).*ramp; 
+              resid(msoverlap+1:msfr,nframe)];
+  end
+  if(frameIndex+msfr+msfs-1 > duration)
+    stream = [stream; resid(msfr+1:msfs,nframe)];
+  else
+    overlap = resid(msfr+1:msfs,nframe).*flipud(ramp);	
+  end	
+end
+stream = filter(1, [1 -preemp], stream)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/rasta.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+function y=rasta(x,fs,low,high)
+% function y=rasta(x,fs) where x is the input data (rows of time data), 
+% and fs is the frame rate (sampling rate) in Hz.  This is a modified 
+% version of the original filter. Here the RASTA filter is approximated
+% by a simple fourth order Butterworth bandpass filter.  See pages 50-51
+% of my second IRC logbook for the derivation.
+%
+% Hermansky and Morgan, "RASTA Processing of Speech."  IEEE Transactions
+% on Speech and Audio Processing.  vol. 2, no. 4, October 1994
+%
+
+% (c) 1998 Interval Research Corporation  
+% Malcolm Slaney, January 30, 1996, Interval Research Corporation
+
+if (nargin < 2); fs=100; end
+if (nargin < 3); low=.9; end
+if (nargin < 4); high=12.8; end
+
+if (low == 0 & high == 0)			% Original Filter
+	num = .1*[2 1 0 -1 -2];
+	denum = [1 -.94];
+else						% New fourth order 
+						% Butterworth BP filter
+	w1=low/fs*2*pi;
+	w2=high/fs*2*pi;
+	theta=1;
+	
+	a=cos((w1+w2)/2)/cos((w2-w1)/2);
+	k=cot((w2-w1)/2)*tan(theta/2);
+	
+	num = [1 0 -2 0 1];
+	denum = [(1 + 2*2^(1/2)*k + 4*k^2) ...
+			(-4*2^(1/2)*a*k - 16*a*k^2) ...
+			(-2 + 8*k^2 + 16*a^2*k^2) ...
+			(4*2^(1/2)*a*k - 16*a*k^2) ...
+			(1 - 2*2^(1/2)*k + 4*k^2)];
+	scale = denum(1);			% Scale by a(1) component
+	num = num/scale;
+	denum = denum/scale;
+end
+
+if (0)
+	len = 1024;
+	impulse = zeros(1,len);
+	impulse(1) = 1;
+	
+	y=filter(num,denum,impulse);
+	ym = abs(fft(y));
+	ym=20*log10(ym);
+	f=(0:(len-1))/len*fs;
+	semilogx(f(1:len/2),ym(1:len/2));
+	drawnow;
+end
+
+if (length(x) == size(x,1)*size(x,2))
+	y = filter(num,denum,x,x(1)*[-1 -1 1 1]);
+else
+	y = zeros(size(x));
+	for i=1:size(x,1)
+		y(i,:) = filter(num,denum,x(i,:),x(i,1)*[-1 -1 1 1]/scale);
+	end
+end
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/soscascade.dll has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/soscascade.mex has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/soscascade.mexsg has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/soscascade.mexsg64 has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/soscascade.mexsol has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/sosfilters.dll has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/sosfilters.mex has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/sosfilters.mexsg has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/sosfilters.mexsg64 has changed
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/sosfilters.mexsol has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/spectrogram.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function [array,raw] = spectrogram(wave,segsize,nlap,ntrans);
+%function array = spectrogram(wave,segsize,nlap,ntrans);
+% defaults spectrogram(wave,128,8,4)
+% nlap is number of hamming windows overlapping a point;
+% ntrans is factor by which transform is bigger than segment;
+% returns a spectrogram 'array' with fourth root of power,
+% filter smoothed and formatted for display.
+
+% Added option to return raw spectrogram.... Malcolm 5/26/95
+% Added code so that input could be any direction ... Malcolm 5/26/95
+% (c) 1998 Interval Research Corporation  
+
+if nargin < 4; ntrans=4; end
+if nargin < 3; nlap=8; end
+if nargin < 2; segsize=128; end
+
+[r c] = size(wave);
+if (r < c)
+	wave = filter([1 -0.95],[1],wave');
+else
+	wave = filter([1 -0.95],[1],wave);
+end
+
+s = length(wave);
+nsegs = floor(s/(segsize/nlap))-nlap+1;
+array = zeros(ntrans/2*segsize,nsegs);
+window = 0.54-0.46*cos(2*pi/(segsize+1)*(1:segsize)');
+for i = 1:nsegs
+ seg = zeros(ntrans*segsize,1); % leave half full of zeroes
+ seg(1:segsize) = ...
+	 window.*wave(((i-1)*segsize/nlap+1):((i+nlap-1)*segsize/nlap));
+ seg = abs(fft(seg));
+						% reverse for image display
+ array(:,i) = seg(((ntrans/2*segsize)+1):(ntrans*segsize));
+end
+
+if nargout > 1
+	raw = array;
+end
+
+array = array .* array;			% back into power domain for smoothing
+
+for i=1:nsegs    % smooth the spectral slices
+ array(:,i) = filter([.2 1 .2],[1],array(:,i));
+end
+
+for i=1:ntrans/2*segsize    % smooth the channels
+ array(i,:) = filter([.2 1 .2],[1],array(i,:));
+end
+
+% compress with square root of amplitude (fourth root of power)
+off = 0.0001*max(max(array));      	% low end stabilization offset,
+array = (off+array).^0.25-off^0.25; 	% better than a threshold hack!
+array = 255/max(max(array))*array;
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/synlpc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,130 @@
+function synWave = synlpc(aCoeff,source,sr,G,fr,fs,preemp)
+% USAGE: synWave = synlpc(aCoeff,source,sr,G,fr,fs,preemp);
+%
+% This function synthesizes a (speech) signal based on a LPC (linear-
+% predictive coding) model of the signal.  The LPC coefficients are a 
+% short-time measure of the speech signal which describe the signal as the 
+% output of an all-pole filter.  This all-pole filter provides a good 
+% description of the speech articulators; thus LPC analysis is often used in 
+% speech recognition and speech coding systems.  The LPC analysis is done
+% using the proclpc routine.  This routine can be used to verify that the 
+% LPC analysis produces the correct answer, or as a synthesis stage after
+% first modifying the LPC model.
+%
+% The results of LPC analysis are a new representation of the signal
+%	s(n) = G e(n) - sum from 1 to L a(i)s(n-i)
+% where s(n) is the original data.  a(i) and e(n) are the outputs of the LPC 
+% analysis with a(i) representing the LPC model. The e(n) term represents 
+% either the speech source's excitation, or the residual: the details of the 
+% signal that are not captured by the LPC coefficients.  The G factor is a
+% gain term.
+%
+% LPC synthesis produces a monaural sound vector (synWave) which is 
+% sampled at a sampling rate of "sr".  The following parameters are mandatory
+% aCoeff - The LPC analysis results, a(i).  One column of L+1 numbers for each
+%	frame of data.  The number of rows of aCoeff determines L.
+% source - The LPC residual, e(n).  One column of sr*fs samples representing
+%	the excitation or residual of the LPC filter.
+% G - The LPC gain for each frame.
+%
+% The following parameters are optional and default to the indicated values.
+% fr - Frame time increment, in ms.  The LPC analysis is done starting every
+% 	fr ms in time.  Defaults to 20ms (50 LPC vectors a second)
+% fs - Frame size in ms.  The LPC analysis is done by windowing the speech
+% 	data with a rectangular window that is fs ms long.  Defaults to 30ms
+% preemp - This variable is the epsilon in a digital one-zero filter which 
+%	serves to preemphasize the speech signal and compensate for the 6dB
+%	per octave rolloff in the radiation function.  Defaults to .9378.
+%
+% This code was graciously provided by:
+% 	Delores Etter (University of Colorado, Boulder) and 
+%	Professor Geoffrey Orsak (Southern Methodist University) 
+% It was first published in
+%	Orsak, G.C. et al. "Collaborative SP education using the Internet and
+%	MATLAB" IEEE SIGNAL PROCESSING MAGAZINE  Nov. 1995. vol.12, no.6, pp.
+%	23-32.
+% Modified and debugging plots added by Kate Nguyen and Malcolm Slaney
+
+% (c) 1998 Interval Research Corporation  
+% A more complete set of routines for LPC analysis can be found at
+%	http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
+   
+
+
+if (nargin < 5), fr = 20; end;
+if (nargin < 6), fs = 30; end;
+if (nargin < 7), preemp = .9378; end;
+
+msfs = round(sr*fs/1000);
+msfr = round(sr*fr/1000);
+msoverlap = msfs - msfr;
+ramp = [0:1/(msoverlap-1):1]';
+[L1 nframe] = size(aCoeff); 			% L1 = 1+number of LPC coeffs 
+
+[row col] = size(source);
+if(row==1 | col==1)				% continous stream; must be 
+						% windowed
+  postFilter = 0; duration = length(source); frameIndex = 1;
+  for sampleIndex=1:msfr:duration-msfs+1
+    resid(:,frameIndex) = source(sampleIndex:(sampleIndex+msfs-1))';
+    frameIndex = frameIndex+1;    
+  end
+else
+  postFilter = 1; resid = source;
+end
+
+[row col] = size(resid);
+%if ~(col==nframe)
+%  error('synLPC: numbers of LPC frames and source frames do not match');
+if col<nframe  
+  nframe=col;
+end
+
+for frameIndex=1:nframe
+ 						% Calculate the filter response
+						% by evaluating the z-transform
+%  if 1
+%    gain=0;
+%    cft=0:(1/255):1;
+%    for index=1:L1-1
+%      gain = gain + aCoeff(index,frameIndex)*exp(-i*2*pi*cft).^index;
+%    end
+%    gain = abs(1./gain);
+%    spec(:,frameIndex) = 20*log10(gain(1:128))';
+    % plot(20*log10(gain));
+    % title(frameIndex);
+    % drawnow;
+%  end
+
+						% Calculate the filter response
+						% from the filter's impulse
+						% response (to check above).
+%  if 0
+%    impulseResponse = filter(1, aCoeff(:,frameIndex), [1 zeros(1,255)]);
+%    freqResp = 20*log10(abs(fft(impulseResponse)));
+%    plot(freqResp);
+%  end
+
+
+  A = aCoeff(:,frameIndex);
+  residFrame = resid(:,frameIndex)*G(frameIndex);
+  synFrame = filter(1, A', residFrame);		% synthesize speech from LPC 
+						% coeffs
+  if(frameIndex==1)				% add synthesize frames using a
+    synWave = synFrame(1:msfr);			% trapezoidal window
+  else
+    synWave = [synWave; overlap+synFrame(1:msoverlap).*ramp; ...
+			synFrame(msoverlap+1:msfr)];
+  end
+  if(frameIndex==nframe)
+    synWave = [synWave; synFrame(msfr+1:msfs)];
+  else
+    overlap = synFrame(msfr+1:msfs).*flipud(ramp);	
+  end	
+  %length(synWave)						
+end;
+
+if(postFilter)
+  synWave = filter(1, [1 -preemp], synWave);
+end
+
Binary file toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/tapestry.wav has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/AuditoryToolbox/test_auditory.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,332 @@
+function test_auditory(test)
+% function test_auditory(test)
+% Test each of the functions in the Auditory Toolbox.  The single argument
+% is a string, containing the word 'all' or the name of one routine from the
+% toolbox.  This routine defaults to running all tests.  There is a pause after
+% each plot, so be sure to hit the return key so the testing can proceed.
+% 
+
+% (c) 1998 Interval Research Corporation  
+
+if nargin < 1
+	test = 'all';
+end
+
+if strcmp(test,'agc') | strcmp(test,'all')
+	disp('agc test');
+	set_window_size(200, 150);
+	agc(ones(1,20), [.5;.5])
+	plot(agc(ones(1,30), [.8; .5])); pause;
+	plot(agc(ones(1,30),[.4;.5])); pause;
+	plot(agc(ones(1,30),[.4;.1])); pause;
+end
+
+if strcmp(test,'CorrelogramArray') | strcmp(test,'all')
+	disp('CorrelogramArray test');
+	u=MakeVowel(4000,FMPoints(4000,120),16000,'u');
+	soundsc(u,16000)
+	coch=LyonPassiveEar(u,16000,1,4,.25);
+	width = 256;
+	cor=CorrelogramArray(coch,16000,16,width);
+	[pixels frames] = size(cor);
+	colormap(1-gray);
+	for j=1:frames
+		imagesc(reshape(cor(:,j),pixels/width,width));
+		drawnow;
+	end
+end
+
+if strcmp(test,'CorrelogramFrame') | strcmp(test,'all')
+	disp('CorrelogramFrame test');
+	for j=20:-1:1
+		c(j,:) = max(0,sin((1:256)/256*(21-j)*3*2*pi));
+	end
+	picture=CorrelogramFrame(c,128,1,256);
+	imagesc(picture)
+	colormap(1-gray)
+end
+
+if strcmp(test,'CorrelogramMovie') | strcmp(test,'all')
+	disp('CorrelogramMovie test');
+	u=MakeVowel(4000,FMPoints(4000,120),16000,'u');
+	soundsc(u,16000)
+	coch=LyonPassiveEar(u,16000,1,4,.25);
+	mov=CorrelogramMovie(coch,16000,16,256);
+	movie(mov,-10,16)
+end
+
+if strcmp(test,'CorrelogramPitch') | strcmp(test,'all')
+	disp('CorrelogramPitch test');
+	u=MakeVowel(20000,FMPoints(20000,120),22254,'u');
+	cor=CorrelogramArray(u,22254,50,256);
+	p=CorrelogramPitch(cor,256,22254);
+	plot(p)
+	axis([0 45 110 130]); pause;
+	
+	coch=LyonPassiveEar(u,22254,1,4,.5);
+	cor=CorrelogramArray(coch,22254,50,256);
+	p=CorrelogramPitch(cor,256,22254);
+	plot(p)
+	axis([0 45 110 130]); pause;
+	
+	u=MakeVowel(20000,FMPoints(20000,120),22254,'u');
+	n=randn([1 20000]).*(1:20000)/20000;
+	un=u+n/4;
+	coch=LyonPassiveEar(un,22254,1,4,.5);
+	cor=CorrelogramArray(coch,22254,50,256);
+	[pitch sal]=CorrelogramPitch(cor,256,22254,100,200);
+	plot(pitch); pause
+	plot(sal); pause
+end
+
+if strcmp(test,'DesignLyonFilters') | strcmp(test,'all')
+	disp('DesignLyonFilters test');
+	filts=DesignLyonFilters(16000);
+	size(filts)
+	filts(1:5,:)
+	
+	resp=soscascade([1 zeros(1,255)],filts);
+	freqResp=20*log10(abs(fft(resp(1:5:88,:)')));
+	freqScale=(0:255)/256*16000;
+	semilogx(freqScale(1:128),freqResp(1:128,:))
+	axis([100 10000 -60 20]); pause;
+end
+
+if strcmp(test,'EpsilonFromTauFS') | strcmp(test,'all')
+	disp('EpsilonFromTauFS test');
+	eps=EpsilonFromTauFS(5,1)
+	filter(1, [1 eps-1],[1 zeros(1,9)])
+	sosfilters([1 zeros(1,9)],[1 0 0 eps-1 0])
+end
+
+if strcmp(test,'ERBSpace') | strcmp(test,'all')
+	set_window_size(250, 150);   
+	disp('ERBSpace test')
+	plot(ERBSpace)
+end
+
+if strcmp(test,'FMPoints') | strcmp(test,'all')
+	disp('FMPoints test');
+	u=MakeVowel(20000,FMPoints(20000,120), 22050,'u');
+	soundsc(u/max(u), 22050)
+end
+
+if strcmp(test,'FreqResp') | strcmp(test,'all')
+	disp('FreqResp test');
+	filts=DesignLyonFilters(16000);
+	f=10:10:7990;
+	resp=FreqResp(filts(2, :), f, 16000);
+	semilogx(f,resp);
+	axis([100 10000 -50 20]);
+end
+
+if strcmp(test,'LyonPassiveEar') | strcmp(test,'all')
+	disp('LyonPassiveEar test');
+	is=LyonPassiveEar([1 zeros(1,255)],16000,1);
+	imagesc(min(is, 0.0004)); pause
+	
+	s=sin((0:2041)/20000*2*pi*1000);
+	ys=LyonPassiveEar(s,20000,20);
+	imagesc(ys/max(max(ys))); pause;
+	
+	tap = wavread('tapestry.wav');
+	coch=LyonPassiveEar(tap,16000,100);
+	imagesc(coch/max(max(coch))); pause;
+end
+
+if strcmp(test,'MakeERBFilters') | strcmp(test,'all')
+	disp('MakeERBFilters test');
+	fcoefs = MakeERBFilters(16000,10,100);
+	y = ERBFilterBank([1 zeros(1,511)], fcoefs);
+	resp = 20*log10(abs(fft(y')));
+	freqScale = (0:511)/512*16000;
+	semilogx(freqScale(1:255),resp(1:255,:));
+	axis([100 16000 -60 0])
+	xlabel('Frequency (Hz)'); 
+	ylabel('Filter Response (dB)'); pause;
+	
+	tap = wavread('tapestry.wav');
+	fcoefs=MakeERBFilters(16000,40,100);
+	coch=ERBFilterBank(tap, fcoefs);
+	for j=1:size(coch,1)
+		c=max(coch(j,:),0);
+		c=filter([1],[1 -.99],c);
+		coch(j,:)=c;
+	end
+	imagesc(coch);
+end
+
+if strcmp(test,'MakeVowel') | strcmp(test,'all')
+	disp('MakeVowel test');
+	vowels=[MakeVowel(10000,100,16000,'a') ...
+		MakeVowel(10000,100,16000,'i') ... 
+		MakeVowel(10000,100,16000,'u')];
+	soundsc(vowels,16000);
+	
+	vowels=[MakeVowel(1000,100,16000,'a')...
+		MakeVowel(1000,100,16000,'i') ...
+		MakeVowel(1000,100,16000,'u')];
+	s=spectrogram(vowels,256,2,2);
+	imagesc(s); pause
+end
+
+if strcmp(test,'MeddisHairCell') | strcmp(test,'all')
+	disp('MeddisHairCell test');
+	tone=sin((0:4999)/20000*2*pi*1000);
+	s=[zeros(1,5000) ...
+	 tone*10^(40/20-1.35) zeros(1,5000) ...
+	 tone*10^(45/20-1.35) zeros(1,5000) ...
+	 tone*10^(50/20-1.35) zeros(1,5000) ...
+	 tone*10^(55/20-1.35) zeros(1,5000) ...
+	 tone*10^(60/20-1.35) zeros(1,5000) ...
+	 tone*10^(65/20-1.35) zeros(1,5000) ...
+	 tone*10^(70/20-1.35) zeros(1,5000) ...
+	 tone*10^(75/20-1.35) zeros(1,5000) ...
+	 tone*10^(80/20-1.35)];
+	y=MeddisHairCell(s,20000);
+	plot((1:90000)/20000,y(1:90000)); pause
+end
+
+if strcmp(test,'mfcc') | strcmp(test,'all')
+	disp('mfcc test');
+	set_window_size(348, 188);
+	tap = wavread('tapestry.wav');
+	[ceps,freqresp,fb,fbrecon,freqrecon] = mfcc(tap,16000,100);
+	imagesc(ceps); 
+	colormap(1-gray); pause
+	imagesc(flipud(freqresp)); pause
+	imagesc(flipud(fb)); pause
+	imagesc(flipud(fbrecon)); pause
+	imagesc(flipud(freqrecon)); pause
+end
+
+if strcmp(test,'proclpc') | strcmp(test,'all')
+	disp('proclpc test');
+	set_window_size(348, 188);
+	[tap sr]= wavread('tapestry.wav');
+	lpc_spec(tap,sr,13); pause
+	lpc_spec(tap,sr,26); pause
+end
+
+if strcmp(test,'rasta') | strcmp(test,'all')
+	disp('rasta test');
+	tap = wavread('tapestry.wav');
+	[ceps,freqresp,fb,fbrecon,freqrecon] = mfcc(tap,16000,100);
+	rastaout = rasta(ceps,100);
+	
+	mfccDCTMatrix = 1/sqrt(40/2)*cos((0:(13-1))' * ...
+				(2*(0:(40-1))+1) * pi/2/40);
+	mfccDCTMatrix(1,:) = mfccDCTMatrix(1,:)*sqrt(2)/2;
+	
+	rastarecon = 0*fbrecon;
+	for i=1:size(rastaout,2)
+		rastarecon(:,i) = mfccDCTMatrix' * rastaout(:,i);
+	end
+	imagesc(flipud(rastarecon));
+end
+
+if strcmp(test,'SecondOrderFilter') | strcmp(test,'all')
+	disp('SecondOrderFilter test');
+	f=10:10:7990;
+	sos=SecondOrderFilter(3000,5,16000)
+	filt=[1 0 0 sos(2:3)]
+	semilogx(f,FreqResp(filt,f,16000)); pause
+	
+	filt=[sos 0 0]
+	semilogx(f,FreqResp(filt,f,16000)); pause
+	
+	sos=SecondOrderFilter(3000,2,16000)
+	filt=[sos 0 0]
+	semilogx(f,FreqResp(filt,f,16000)); pause
+end
+
+if strcmp(test,'SeneffEar') | strcmp(test,'all')
+	disp('SeneffEar test');
+	s=[zeros(1,160) sin(2000*2*pi/16000*(1:1120))];
+	y=SeneffEar(s,16000,15); pause;
+	
+	tap = wavread('tapestry.wav');
+	hc=SeneffEar(tap,16000);
+	for j=1:40
+		c=hc(j,:);
+		c=filter([1],[1, -.99],c);
+		h(j,:)=c(1:100:50381);
+	end
+	clf; imagesc(h); pause;
+end
+
+if strcmp(test,'SetGain') | strcmp(test,'all')
+	disp('SetGain test');
+	filts=DesignLyonFilters(16000);
+	filt=filts(42,:)
+	f=10:10:7990;
+	semilogx(f,FreqResp(filt,f,16000)); pause;
+	
+	newFilt = SetGain(filt, 10, 1960, 16000);
+	semilogx(f, FreqResp(newFilt, f, 16000)); pause
+end
+
+if strcmp(test,'soscascade') | strcmp(test,'all')
+	disp('soscascade test');
+	soscascade([1 0 0 0 0],[1 0 0 -.9 0;1 1 0 0 0])
+end
+
+if strcmp(test,'sosfilters') | strcmp(test,'all')
+	disp('sosfilters test');
+	sosfilters([1 0 0 0 0 0],[1 0 0 -.9 0;1 0 0 -.8 0])
+	sosfilters([1 0 0 0 0 0;2 0 0 0 0 0], ...
+	            [1 0 0 -.9 0;1 0 0 -.8 0])
+	sosfilters([1 0 0 0 0 0;2 0 0 0 0 0],[1 0 0 -.9 0])
+end
+
+if strcmp(test,'spectrogram') | strcmp(test,'all')
+	disp('spectrogram test');
+	tap = wavread('tapestry.wav');
+	spec=spectrogram(tap,64,2,1);
+	imagesc(spec); pause;
+end
+
+if strcmp(test,'synlpc') | strcmp(test,'all')
+	disp('synlpc test');
+	[tap sr] = wavread('tapestry.wav');
+	[aCoeff,resid,pitch,G,parcor,stream] = proclpc(tap,sr,13);
+	syntap = synlpc(aCoeff, stream, sr, G);;
+	soundsc(syntap,16000);
+	
+	[aCoeff,resid,pitch,G,parcor,stream] = proclpc(tap,sr,13);
+	stream=randn(size(stream));
+	syntap = synlpc(aCoeff, stream, sr, G);;
+	soundsc(syntap,16000);
+end
+
+if strcmp(test,'WhiteVowel') | strcmp(test,'all')
+	disp('WhiteVowel test');
+	[tap sr] = wavread('tapestry.wav');
+	whitetap = WhiteVowel(tap,16000,13,1000);
+	soundsc(whitetap, 16000);
+end
+
+function lpc_spec(tap,sr,L)
+[aCoeff,resid,pitch,G,parcor,stream] = proclpc(tap,sr,L);
+cft=0:(1/255):1;
+spec = zeros(128, size(aCoeff,2));
+for nframe=1:size(aCoeff,2)
+	gain=20*log10(G(nframe)) * 0;
+	for index=1:size(aCoeff,1)
+		gain = gain + aCoeff(index,nframe)*exp(-i*2*pi*cft).^index;
+	end
+	gain = abs(1./gain);
+	spec(:,nframe) = 20*log10(gain(1:128))';
+end
+imagesc(flipud(spec));
+
+
+
+function set_window_size(width, height)
+cursize = get(gcf, 'position');
+cursize(3) = width+1;
+cursize(4) = height+1;
+set(gcf, 'position', cursize);
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/License.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,262 @@
+The MIRtoolbox 1.3.2 Software Package, Copyright © 2010, University of  Jyvaskyla
+
+Developed by Olivier Lartillot, Petri Toiviainen and Tuomas Eerola Department of Music
+lartillo@campus.jyu.fi
+
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of version 2 of GNU General Public License as published by
+the Free Software Foundation.
+
+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.  This is free software, and you are 
+welcome to redistribute it under certain conditions.  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.
+
+GNU GENERAL PUBLIC LICENSE
+
+Version 2, June 1991 
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
+59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, 
+but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and 
+change it. By contrast, the GNU General Public License is intended to guarantee your 
+freedom to share and change free software--to make sure the software is free for all its 
+users. This General Public License applies to most of the Free Software Foundation's 
+software and to any other program whose authors commit to using it. (Some other Free 
+Software Foundation software is covered by the GNU Library General Public License 
+instead.) You can apply it to your programs, too. 
+
+When we speak of free software, we are referring to freedom, not price. Our General 
+Public Licenses are designed to make sure that you have the freedom to distribute copies 
+of free software (and charge for this service if you wish), that you receive source code or 
+can get it if you want it, that you can change the software or use pieces of it in new free 
+programs; and that you know you can do these things. 
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these 
+rights or to ask you to surrender the rights. These restrictions translate to certain 
+responsibilities for you if you distribute copies of the software, or if you modify it. 
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you 
+must give the recipients all the rights that you have. You must make sure that they, too, 
+receive or can get the source code. And you must show them these terms so they know 
+their rights. 
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this 
+license which gives you legal permission to copy, distribute and/or modify the software. 
+
+Also, for each author's protection and ours, we want to make certain that everyone 
+understands that there is no warranty for this free software. If the software is modified by 
+someone else and passed on, we want its recipients to know that what they have is not the 
+original, so that any problems introduced by others will not reflect on the original authors' 
+reputations. 
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid 
+the danger that redistributors of a free program will individually obtain patent licenses, in 
+effect making the program proprietary. To prevent this, we have made it clear that any 
+patent must be licensed for everyone's free use or not licensed at all. 
+
+The precise terms and conditions for copying, distribution and modification follow. 
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND 
+MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by 
+the copyright holder saying it may be distributed under the terms of this General Public 
+License. The "Program", below, refers to any such program or work, and a "work based 
+on the Program" means either the Program or any derivative work under copyright law: 
+that is to say, a work containing the Program or a portion of it, either verbatim or with 
+modifications and/or translated into another language. (Hereinafter, translation is 
+included without limitation in the term "modification".) Each licensee is addressed as 
+"you". 
+
+Activities other than copying, distribution and modification are not covered by this 
+License; they are outside its scope. The act of running the Program is not restricted, and 
+the output from the Program is covered only if its contents constitute a work based on the 
+Program (independent of having been made by running the Program). Whether that is 
+true depends on what the Program does. 
+
+1. You may copy and distribute verbatim copies of the Program's source code as you 
+receive it, in any medium, provided that you conspicuously and appropriately publish on 
+each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the 
+notices that refer to this License and to the absence of any warranty; and give any other 
+recipients of the Program a copy of this License along with the Program. 
+
+You may charge a fee for the physical act of transferring a copy, and you may at your 
+option offer warranty protection in exchange for a fee. 
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming 
+a work based on the Program, and copy and distribute such modifications or work under 
+the terms of Section 1 above, provided that you also meet all of these conditions: 
+
+     a) You must cause the modified files to carry prominent notices stating that you 
+changed the files and the date of any change. 
+
+     b) You must cause any work that you distribute or publish, that in whole or in part 
+contains or is derived from the Program or any part thereof, to be licensed as a whole at 
+no charge to all third parties under the terms of this License. 
+
+     c) If the modified program normally reads commands interactively when run, you 
+must cause it, when started running for such interactive use in the most ordinary way, to 
+print or display an announcement including an appropriate copyright notice and a notice 
+that there is no warranty (or else, saying that you provide a warranty) and that users may 
+redistribute the program under these conditions, and telling the user how to view a copy 
+of this License. (Exception: if the Program itself is interactive but does not normally print 
+such an announcement, your work based on the Program is not required to print an 
+announcement.) 
+
+These requirements apply to the modified work as a whole. If identifiable sections of that 
+work are not derived from the Program, and can be reasonably considered independent 
+and separate works in themselves, then this License, and its terms, do not apply to those 
+sections when you distribute them as separate works. But when you distribute the same 
+sections as part of a whole which is a work based on the Program, the distribution of the 
+whole must be on the terms of this License, whose permissions for other licensees extend 
+to the entire whole, and thus to each and every part regardless of who wrote it. 
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work 
+written entirely by you; rather, the intent is to exercise the right to control the distribution 
+of derivative or collective works based on the Program. 
+
+In addition, mere aggregation of another work not based on the Program with the 
+Program (or with a work based on the Program) on a volume of a storage or distribution 
+medium does not bring the other work under the scope of this License. 
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in 
+object code or executable form under the terms of Sections 1 and 2 above provided that 
+you also do one of the following: 
+
+     a) Accompany it with the complete corresponding machine-readable source code, 
+which must be distributed under the terms of Sections 1 and 2 above on a medium 
+customarily used for software interchange; or, 
+
+     b) Accompany it with a written offer, valid for at least three years, to give any third 
+party, for a charge no more than your cost of physically performing source distribution, a 
+complete machine-readable copy of the corresponding source code, to be distributed 
+under the terms of Sections 1 and 2 above on a medium customarily used for software 
+interchange; or, 
+
+     c) Accompany it with the information you received as to the offer to distribute 
+corresponding source code. (This alternative is allowed only for noncommercial 
+distribution and only if you received the program in object code or executable form with 
+such an offer, in accord with Subsection b above.) 
+
+The source code for a work means the preferred form of the work for making 
+modifications to it. For an executable work, complete source code means all the source 
+code for all modules it contains, plus any associated interface definition files, plus the 
+scripts used to control compilation and installation of the executable. However, as a 
+special exception, the source code distributed need not include anything that is normally 
+distributed (in either source or binary form) with the major components (compiler, kernel, 
+and so on) of the operating system on which the executable runs, unless that component 
+itself accompanies the executable. 
+
+If distribution of executable or object code is made by offering access to copy from a 
+designated place, then offering equivalent access to copy the source code from the same 
+place counts as distribution of the source code, even though third parties are not 
+compelled to copy the source along with the object code.   
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly 
+provided under this License. Any attempt otherwise to copy, modify, sublicense or 
+distribute the Program is void, and will automatically terminate your rights under this 
+License. However, parties who have received copies, or rights, from you under this 
+License will not have their licenses terminated so long as such parties remain in full 
+compliance. 
+
+5. You are not required to accept this License, since you have not signed it. However, 
+nothing else grants you permission to modify or distribute the Program or its derivative 
+works. These actions are prohibited by law if you do not accept this License. Therefore, 
+by modifying or distributing the Program (or any work based on the Program), you 
+indicate your acceptance of this License to do so, and all its terms and conditions for 
+copying, distributing or modifying the Program or works based on it. 
+
+6. Each time you redistribute the Program (or any work based on the Program), the 
+recipient automatically receives a license from the original licensor to copy, distribute or 
+modify the Program subject to these terms and conditions. You may not impose any 
+further restrictions on the recipients' exercise of the rights granted herein. You are not 
+responsible for enforcing compliance by third parties to this License. 
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any 
+other reason (not limited to patent issues), conditions are imposed on you (whether by 
+court order, agreement or otherwise) that contradict the conditions of this License, they 
+do not excuse you from the conditions of this License. If you cannot distribute so as to 
+satisfy simultaneously your obligations under this License and any other pertinent 
+obligations, then as a consequence you may not distribute the Program at all. For 
+example, if a patent license would not permit royalty-free redistribution of the Program 
+by all those who receive copies directly or indirectly through you, then the only way you 
+could satisfy both it and this License would be to refrain entirely from distribution of the 
+Program. 
+
+If any portion of this section is held invalid or unenforceable under any particular 
+circumstance, the balance of the section is intended to apply and the section as a whole is 
+intended to apply in other circumstances. 
+
+It is not the purpose of this section to induce you to infringe any patents or other property 
+right claims or to contest validity of any such claims; this section has the sole purpose of 
+protecting the integrity of the free software distribution system, which is implemented by 
+public license practices. Many people have made generous contributions to the wide 
+range of software distributed through that system in reliance on consistent application of 
+that system; it is up to the author/donor to decide if he or she is willing to distribute 
+software through any other system and a licensee cannot impose that choice. 
+
+This section is intended to make thoroughly clear what is believed to be a consequence of 
+the rest of this License. 
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by 
+patents or by copyrighted interfaces, the original copyright holder who places the 
+Program under this License may add an explicit geographical distribution limitation 
+excluding those countries, so that distribution is permitted only in or among countries not 
+thus excluded. In such case, this License incorporates the limitation as if written in the 
+body of this License. 
+
+9. The Free Software Foundation may publish revised and/or new versions of the General 
+Public License from time to time. Such new versions will be similar in spirit to the 
+present version, but may differ in detail to address new problems or concerns. 
+
+Each version is given a distinguishing version number. If the Program specifies a version 
+number of this License which applies to it and "any later version", you have the option of 
+following the terms and conditions either of that version or of any later version published 
+by the Free Software Foundation. If the Program does not specify a version number of 
+this License, you may choose any version ever published by the Free Software 
+Foundation. 
+
+10. If you wish to incorporate parts of the Program into other free programs whose 
+distribution conditions are different, write to the author to ask for permission. For 
+software which is copyrighted by the Free Software Foundation, write to the Free 
+Software Foundation; we sometimes make exceptions for this. Our decision will be 
+guided by the two goals of preserving the free status of all derivatives of our free 
+software and of promoting the sharing and reuse of software generally. 
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO 
+WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 
+COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM 
+"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR 
+IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE 
+ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME 
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO 
+IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO 
+MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED 
+ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, 
+SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF 
+THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT 
+LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR 
+LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE 
+PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH 
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 
+SUCH DAMAGES. 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miraudio/miraudio.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,410 @@
+function varargout = miraudio(orig,varargin)
+%   a = miraudio('filename') loads the sound file 'filename' (in WAV or AU
+%       format) into a miraudio object.
+%   a = miraudio('Folder') loads all the sound files in the CURRENT folder
+%       into a miraudio object.
+%   a = miraudio(v,sr), where v is a column vector, translates the vector v
+%       into a miraudio object. The sampling frequency is set to sr Hertz.
+%           Default value for sr: 44100 Hz.
+%   a = miraudio(b, ...), where b is already a miraudio object, performs 
+%       operations on b specified by the optional arguments (see below).
+%
+%   Transformation options:
+%       miraudio(...,'Mono',0) does not perform the default summing of
+%           channels into one single mono track, but instead stores each 
+%           channel of the initial soundfile separately.       
+%       miraudio(...,'Center') centers the signals.
+%       miraudio(...,'Sampling',r) resamples at sampling rate r (in Hz).
+%           (Requires the Signal Processing Toolbox.)
+%       miraudio(...,'Normal') normalizes with respect to RMS energy.
+%   Extraction options:
+%       miraudio(...,'Extract',t1,t2,u,f) extracts the signal between dates
+%           t1 and t2, expressed in the unit u.
+%           Possible values for u:
+%               's' (seconds, by default),
+%               'sp' (sample index, starting from 1).
+%           The additional optional argument f indicates the referential
+%               origin of the temporal positions. Possible values for f:
+%               'Start' (by default)
+%               'Middle' (of the sequence)
+%               'End' of the sequence
+%               When using 'Middle' or 'End', negative values for t1 or t2
+%               indicate values before the middle or the end of the audio
+%               sequence.
+%       miraudio(...,'Trim') trims the pseudo-silence beginning and end off
+%           the audio file. Silent frames are frames with RMS below t times
+%           the medium RMS of the whole audio file.
+%               Default value: t = 0.06
+%           instead of 'Trim':
+%              'TrimStart' only trims the beginning of the audio file,
+%              'TrimEnd' only trims the end.
+%           miraudio(...,'TrimThreshold',t) specifies the trimming threshold t.
+%       miraudio(...,'Channel',c) or miraudio(...,'Channels',c) selects the
+%           channels indicated by the (array of) integer(s) c.
+%   Labeling option:
+%       miraudio(...,'Label',l) labels the audio signal(s) following the 
+%           label(s) l.
+%           If l is a (series of) number(s), the audio signal(s) are
+%           labelled using the substring of their respective file name of 
+%           index l. If l=0, the audio signal(s) are labelled using the
+%           whole file name.
+
+
+if isnumeric(orig)
+    if size(orig,2) > 1 || size(orig,3) > 1
+        mirerror('MIRAUDIO','Only column vectors can be imported into mirtoolbox.');
+    end
+    if nargin == 1
+        f = 44100;
+    else
+        f = varargin{1};
+    end
+    b = 32;
+    if size(orig,1) == 1
+        orig = orig';
+    end
+    tp = (0:size(orig,1)-1)'/f;
+    t = mirtemporal([],'Time',{{tp}},'Data',{{orig}},...
+                    'FramePos',{{tp([1 end])}},'Sampling',{f},...
+                    'Name',{inputname(1)},'Label',{{}},'Clusters',{{}},...
+                    'Channels',[],'Centered',0,'NBits',{b},...
+                    'Title','Audio signal',...
+                    'PeakPos',{{{}}},'PeakVal',{{{}}},'PeakMode',{{{}}});
+    aa.fresh = 1;
+    varargout = {class(aa,'miraudio',t)};
+    return
+end
+
+
+        center.key = 'Center';
+        center.type = 'Boolean';
+        center.default = 0;
+        center.when = 'After';
+    option.center = center;
+        
+        normal.key = 'Normal';
+        normal.type = 'Boolean';
+        normal.default = 0;
+        normal.when = 'After';
+    option.normal = normal;
+    
+        extract.key = {'Extract','Excerpt'};
+        extract.type = 'Integer';
+        extract.number = 2;
+        extract.default = [];
+        extract.unit = {'s','sp'};
+        extract.defaultunit = 's';
+        extract.from = {'Start','Middle','End'};
+        extract.defaultfrom = 'Start';
+    option.extract = extract;
+        
+        trim.type = 'String';
+        trim.choice = {'NoTrim','Trim','TrimBegin','TrimStart','TrimEnd'};
+        trim.default = 'NoTrim';
+        trim.when = 'After';
+    option.trim = trim;
+        
+        trimthreshold.key = 'TrimThreshold';
+        trimthreshold.type = 'Integer';
+        trimthreshold.default = .06;
+        trimthreshold.when = 'After';
+    option.trimthreshold = trimthreshold;
+        
+        label.key = 'Label';
+        label.default = '';
+        label.when = 'After';
+    option.label = label;
+        
+        sampling.key = 'Sampling';
+        sampling.type = 'Integer';
+        sampling.default = 0;
+        sampling.when = 'Both';
+    option.sampling = sampling;
+        
+   %     segment.key = 'Segment';
+   %     segment.type = 'Integer';
+   %     segment.default = [];
+   %     segment.when = 'After';
+   % option.segment = segment;
+
+        reverse.key = 'Reverse';
+        reverse.type = 'Boolean';
+        reverse.default = 0;
+        reverse.when = 'After';
+    option.reverse = reverse;
+
+        mono.key = 'Mono';
+        mono.type = 'Boolean';
+        mono.default = NaN;
+        mono.when = 'After';
+    option.mono = mono;    
+
+        separate.key = 'SeparateChannels';
+        separate.type = 'Boolean';
+        separate.default = 0;
+    option.separate = separate;    
+    
+        Ch.key = {'Channel','Channels'};
+        Ch.type = 'Integer';
+        Ch.default = [];
+        Ch.when = 'After';
+    option.Ch = Ch;
+        
+specif.option = option;
+
+specif.beforechunk = {@beforechunk,'normal'};
+specif.eachchunk = @eachchunk;
+specif.combinechunk = @combinechunk;
+
+if nargin > 1 && ischar(varargin{1}) && strcmp(varargin{1},'Now')
+    if nargin > 2
+        extract = varargin{2};
+    else
+        extract = [];
+    end
+    para = [];
+    varargout = {main(orig,[],para,[],extract)};
+else
+    varargout = mirfunction(@miraudio,orig,varargin,nargout,specif,@init,@main);
+end
+if isempty(varargout)
+    varargout = {{}};
+end
+
+
+function [x type] = init(x,option)
+if isa(x,'mirdesign')
+    if option.sampling
+        x = setresampling(x,option.sampling);
+    end
+end
+type = 'miraudio';
+
+
+function a = main(orig,option,after,index,extract)
+if iscell(orig)
+    orig = orig{1};
+end
+if ischar(orig)
+    if nargin < 5
+        extract = [];
+    end
+    [d{1},tp{1},fp{1},f{1},b{1},n{1},ch{1}] = mirread(extract,orig,1,0);
+    t = mirtemporal([],'Time',tp,'Data',d,'FramePos',fp,'Sampling',f,...
+                       'Name',n,'Label',cell(1,length(d)),...
+                       'Clusters',cell(1,length(d)),...
+                       'Channels',ch,'Centered',0,'NBits',b);
+    t = set(t,'Title','Audio waveform');
+    a.fresh = 1;
+    a = class(a,'miraudio',t);
+else
+    if not(isempty(option)) && not(isempty(option.extract))
+        if not(isstruct(after))
+            after = struct;
+        end
+        after.extract = option.extract;
+    end
+    if isa(orig,'miraudio')
+        a = orig;
+    else
+        a.fresh = 1;
+        a = class(a,'miraudio',orig);
+    end
+end      
+if not(isempty(after))
+    a = post(a,after);
+end    
+
+
+function a = post(a,para)
+if a.fresh && isfield(para,'mono')
+    a.fresh = 0;
+    if isnan(para.mono)
+        para.mono = 1;
+    end
+end
+if isfield(para,'mono') && para.mono == 1
+    a = mirsum(a,'Mean');
+end
+d = get(a,'Data');
+t = get(a,'Time');
+ac = get(a,'AcrossChunks');
+f = get(a,'Sampling');
+cl = get(a,'Clusters');
+for h = 1:length(d)
+    for k = 1:length(d{h})
+        tk = t{h}{k};
+        dk = d{h}{k};
+        if isfield(para,'extract') && not(isempty(para.extract))
+            t1 = para.extract(1);
+            t2 = para.extract(2);
+            if para.extract(4)
+                if para.extract(4) == 1
+                    shift = round(size(tk,1)/2);
+                elseif para.extract(4) == 2
+                    shift = size(tk,1);
+                end
+                if para.extract(3)
+                    shift = tk(shift,1,1);
+                end
+                t1 = t1+shift;
+                t2 = t2+shift;
+            end                
+            if para.extract(3) % in seconds
+                ft = find(tk>=t1 & tk<=t2);
+            else               % in samples
+                if not(t1)
+                    warning('WARNING IN MIRAUDIO: Extract sample positions should be real positive integers.')
+                    display('Positions incremented by one.');
+                    t1 = t1+1;
+                    t2 = t2+1;
+                end
+                ft = t1:t2;
+            end
+            tk = tk(ft,:,:);
+            dk = dk(ft,:,:);
+        end
+        if isfield(para,'Ch') && not(isempty(para.Ch))
+            dk = dk(:,:,para.Ch);
+        end
+        if isfield(para,'center') && para.center
+            dk = center(dk);
+            a = set(a,'Centered',1);
+        end
+        if isfield(para,'normal') && para.normal
+            nl = size(dk,1);
+            nc = size(dk,3);
+            if isempty(ac)
+                ee = 0;
+                for j = 1:nc
+                    ee = ee+sum(dk(:,:,j).^2);
+                end
+                ee = sqrt(ee/nl/nc);
+            else
+                ee = sqrt(sum(ac.sqrsum.^2)/ac.samples);
+            end
+            dk = dk./repmat(ee,[nl,1,nc]);
+        end
+        if isfield(para,'trim') && not(isequal(para.trim,0)) ...
+                && not(strcmpi(para.trim,'NoTrim'))
+            if not(para.trimthreshold)
+                para.trimthreshold = 0.06;
+            end
+            trimframe = 100;
+            trimhop = 10;
+            nframes = floor((length(tk)-trimframe)/trimhop)+1;
+            rms = zeros(1,nframes);
+            for j = 1:nframes
+                st = floor((j-1)*trimhop)+1;
+                for z = 1:size(dk,3)
+                    rms(1,j,z) = norm(dk(st:st+trimframe-1,1,z))/sqrt(trimframe);
+                end
+            end
+            rms = (rms-repmat(min(rms),[1,size(rms,2),1]))...
+                     ./repmat(max(rms)-min(rms),[1,size(rms,2),1]);
+            nosil = find(rms>para.trimthreshold);
+            if strcmpi(para.trim,'Trim') || strcmpi(para.trim,'TrimStart') ...
+                                         || strcmpi(para.trim,'TrimBegin')
+                nosil1 = min(nosil);
+                if nosil1 > 1
+                    nosil1 = nosil1-1;
+                end
+                n1 = floor((nosil1-1)*trimhop)+1;
+            else
+                n1 = 1;
+            end
+            if strcmpi(para.trim,'Trim') || strcmpi(para.trim,'TrimEnd')
+                nosil2 = max(nosil);
+                if nosil2 < length(rms)
+                    nosil2 = nosil2+1;
+                end
+                n2 = floor((nosil2-1)*trimhop)+1;
+            else
+                n2 = length(tk);
+            end
+            wh = ones(n2-n1+1,1);
+            dt = round(.02*f{h});
+            ha = hann(dt*2);
+            wh(1:dt) = ha(1:dt);
+            wh(end-dt+1:end) = ha(dt+1:end);
+            tk = tk(n1:n2);
+            dk = dk(n1:n2,1,:);%.*repmat(wh,[1 1 size(dk,3)]);
+        end
+        if isfield(para,'sampling') && para.sampling
+            if and(f{k}, not(f{k} == para.sampling))
+                for j = 1:size(dk,3)
+                    rk(:,:,j) = resample(dk(:,:,j),para.sampling,f{k});
+                end
+                dk = rk;
+                tk = repmat((0:size(dk,1)-1)',[1 1 size(tk,3)])...
+                            /para.sampling + tk(1,:,:);
+            end
+            f{k} = para.sampling;
+        end
+        d{h}{k} = dk;
+        t{h}{k} = tk;
+        %if isfield(para,'reverse') && para.reverse
+        %    d{h}{k} = flipdim(d{h}{k},1);
+        %end
+    end
+end
+a = set(a,'Data',d,'Time',t,'Sampling',f,'Clusters',cl);
+if isfield(para,'label') 
+    if isnumeric(para.label)
+        n = get(a,'Name');
+        l = cell(1,length(d));
+        for k = 1:length(d)
+            if para.label
+                l{k} = n{k}(para.label);
+            else
+                l{k} = n{k};
+            end
+        end
+        a = set(a,'Label',l);
+    elseif iscell(para.label)
+        idx = mod(get(a,'Index'),length(para.label));
+        if not(idx)
+            idx = length(para.label);
+        end
+        a = set(a,'Label',para.label{idx});
+    elseif ischar(para.label)
+        l = cell(1,length(d));
+        for k = 1:length(d)
+            l{k} = para.label;
+        end
+        a = set(a,'Label',l);
+    end
+end
+
+
+function [new orig] = beforechunk(orig,option,missing)
+option.normal = 0;
+a = miraudio(orig,option);
+d = get(a,'Data');
+old = get(orig,'AcrossChunks');
+if isempty(old)
+    old.sqrsum = 0;
+    old.samples = 0;
+end
+new = mircompute(@crossum,d);
+new = new{1}{1};
+new.sqrsum = old.sqrsum + new.sqrsum;
+new.samples = old.samples + new.samples;
+
+
+function s = crossum(d)
+s.sqrsum = sum(d.^2);
+s.samples = length(d);
+
+
+function [y orig] = eachchunk(orig,option,missing)
+y = miraudio(orig,option);
+
+
+function y = combinechunk(old,new)
+do = get(old,'Data');
+to = get(old,'Time');
+dn = get(new,'Data');
+tn = get(new,'Time');
+y = set(old,'Data',{{[do{1}{1};dn{1}{1}]}},...
+            'Time',{{[to{1}{1};tn{1}{1}]}});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miraudio/mirplay.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,127 @@
+function varargout = mirplay(a,varargin)
+
+% mirplay method for miraudio objects. Help displayed in ../mirplay.m
+
+        ch.key = 'Channel';
+        ch.type = 'Integer';
+        ch.default = 0;
+    option.ch = ch;
+        
+        sg.key = 'Segment';
+        sg.type = 'Integer';
+        sg.default = 0;
+    option.sg = sg;
+        
+        se.key = 'Sequence';
+        se.type = 'Integer';
+        se.default = 0;
+    option.se = se;
+
+        inc.key = 'Increasing';
+        inc.type = 'MIRtb';
+    option.inc = inc;
+
+        dec.key = 'Decreasing';
+        dec.type = 'MIRtb';
+    option.dec = dec;
+
+        every.key = 'Every';
+        every.type = 'Integer';
+    option.every = every;
+    
+        burst.key = 'Burst';
+        burst.type = 'Boolean';
+        burst.default = 1;
+    option.burst = burst;
+
+specif.option = option;
+
+specif.eachchunk = 'Normal';
+
+varargout = mirfunction(@mirplay,a,varargin,nargout,specif,@init,@main);
+if nargout == 0
+    varargout = {};
+end
+
+
+function [x type] = init(x,option)
+type = '';
+
+
+function noargout = main(a,option,postoption)
+if iscell(a)
+    a = a{1};
+end
+d = get(a,'Data');
+f = get(a,'Sampling');
+n = get(a,'Name');
+c = get(a,'Channels');
+fp = get(a,'FramePos');
+if not(option.se)
+    if length(d)>1
+        if isfield(option,'inc')
+            [unused order] = sort(mirgetdata(option.inc));
+        elseif isfield(option,'dec')
+            [unused order] = sort(mirgetdata(option.dec),'descend');
+        else
+            order = 1:length(d);
+        end
+        if isfield(option,'every')
+            order = order(1:option.every:end);
+        end
+    else
+        order = 1;
+    end
+else
+    order = option.se;
+end
+if not(isempty(order))
+    for k = order(:)'
+        display(['Playing file: ' n{k}])   
+        dk = d{k};
+        if not(iscell(dk))
+            dk = {dk};
+        end
+        if option.ch
+            if isempty(c{k})
+                chk = option.ch;
+            else
+                [unused unused chk] = intersect(option.ch,c{k});
+            end
+        else
+            chk = 1:size(dk{1},3);
+        end
+        if isempty(chk)
+            display('No channel to play.');
+        end
+        for l = chk
+            if chk(end)>1
+                display(['  Playing channel #' num2str(l)]);
+            end
+            if option.sg
+                sgk = option.sg(find(option.sg<=length(dk)));
+            else
+                sgk = 1:length(dk);
+            end
+            for i = sgk
+                if sgk(end)>1
+                    display(['      Playing segment #' num2str(i)])
+                end
+                di = dk{i};
+                for j = 1:size(di,2)
+                    tic
+                    sound(di(:,j,l),f{k});
+                    idealtime = size(di,1)/f{k};
+                    practime = toc;
+                    if practime < idealtime
+                        pause(idealtime-practime)
+                    end
+                end
+                if option.burst && sgk(end)>1
+                    sound(rand(1,10))
+                end
+            end
+        end
+    end
+end
+noargout = {};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miraudio/mirsave.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,99 @@
+function mirsave(a,f,multichan)
+
+ext = 0;    % Specified new extension
+if nargin < 2
+    f = '.mir';
+elseif length(f)>3 && strcmpi(f(end-3:end),'.wav')
+    ext = '.wav';
+    if length(f)==4
+        f = '.mir';
+    end
+elseif length(f)>2 && strcmpi(f(end-2:end),'.au')
+    ext = '.au';
+    if length(f)==3
+        f = '.mir';
+    end
+end
+
+if nargin < 3
+    multichan = '';
+end
+
+d = get(a,'Data');
+nf = length(d);
+fs = get(a,'Sampling');
+nb = get(a,'NBits');
+nm = get(a,'Name');
+ch = get(a,'Channels');
+maxd = 0;
+for i = 1:nf
+    for j = 1:length(d{i})
+        maxd = max(max(max(max(abs(d{i}{j}),[],1),[],2),[],3),maxd);
+    end
+end
+for i = 1:nf
+    nbi = nb{i};
+    di = d{i};
+    fsi = fs{i};
+    nmi = nm{i};
+    chi = ch{i};
+    out = [];
+    for j = 1:length(di)
+        di{j} = di{j}./repmat(maxd,size(di{j}))*.9999;
+        out = [out;reshape(di{j},[],size(di{j},3),1)];
+        if length(di)>1
+            out = [out;rand(100,size(di{j},3))]*.9;
+        end
+    end
+    
+    %Let's remove the extension from the original files
+    if length(nmi)>3 && strcmpi(nmi(end-3:end),'.wav')
+        nmi(end-3:end) = [];
+    elseif length(nmi)>2 && strcmpi(nmi(end-2:end),'.au')
+        nmi(end-2:end) = [];
+    end
+    
+    nchan = size(out,2);
+    if isempty(multichan) || nchan < 2
+        if nf>1 || strcmp(f(1),'.')
+            %Let's add the new suffix
+            n = [nmi f];
+        else
+            n = f;
+        end
+        if not(ischar(ext)) || strcmp(ext,'.wav')
+            if length(n)<4 || not(strcmpi(n(end-3:end),'.wav'))
+                n = [n '.wav'];
+            end
+            wavwrite(out,fsi,nbi,n)
+        elseif strcmp(ext,'.au')
+            if length(n)<3 || not(strcmpi(n(end-2:end),'.au'))
+                n = [n '.au'];
+            end
+            auwrite(out,fsi,nbi,'linear',n)
+        end
+        disp([n,' saved.']);
+    else
+        for j = 1:nchan
+            nb = num2str(chi(j));
+            if nf>1 || strcmp(f(1),'.')
+                %Let's add the new suffix
+                n = [nmi nb f];
+            else
+                n = [f nb];
+            end
+            if not(ischar(ext)) || strcmp(ext,'.wav')
+                if length(n)<4 || not(strcmpi(n(end-3:end),'.wav'))
+                    n = [n '.wav'];
+                end
+                wavwrite(out(:,j),fsi,nbi,n)
+            elseif strcmp(ext,'.au')
+                if length(n)<3 || not(strcmpi(n(end-2:end),'.au'))
+                    n = [n '.au'];
+                end
+                auwrite(out(:,j),fsi,nbi,'linear',n)
+            end
+            disp([n,' saved.']);
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miraudio/plus.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function c = plus(a,b)
+
+sa = get(a,'Sampling');
+if iscell(sa)
+    sa = sa{1};
+end
+sb = get(b,'Sampling');
+if iscell(sb)
+    sb = sb{1};
+end
+if sa>sb
+    b = miraudio(b,'Sampling',sa);
+elseif sb>sa
+    a = miraudio(a,'Sampling',sb);
+end
+c = plus(mirtemporal(a),mirtemporal(b));
+c = miraudio(c);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miraudio/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function aa = set(a,varargin)
+% SET Set properties for the miraudio object
+% and return the updated object
+
+t = mirtemporal(a);
+t = set(t,'Title',get(a,'Title'),'Abs',get(a,'Abs'),'Ord',get(a,'Ord'),...
+        varargin{:});
+aa.fresh = a.fresh;
+aa = class(aa,'miraudio',t);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirautocor/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function val = get(a, propName)
+% GET Get properties from the MIRautocor object
+% and return the value
+
+switch propName
+    case 'Coeff'
+        val = get(mirdata(a),'Data');
+    case 'Delay'
+        val = get(mirdata(a),'Pos');
+    case 'Lag'
+        val = get(mirdata(a),'Pos');
+    case 'FreqDomain'
+        val = a.freq;
+    case 'OfSpectrum'
+        val = a.ofspectrum;
+    case 'Window'
+        val = a.window;
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirautocor/mirautocor.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,604 @@
+function varargout = mirautocor(orig,varargin)
+%   a = mirautocor(x) computes the autocorrelation function related to x.
+%   Optional parameters:
+%       mirautocor(...,'Min',mi) indicates the lowest delay taken into
+%           consideration. The unit can be precised:
+%               mirautocor(...,'Min',mi,'s') (default unit)
+%               mirautocor(...,'Min',mi,'Hz')
+%           Default value: 0 s.
+%       mirautocor(...,'Max',ma) indicates the highest delay taken into
+%           consideration. The unit can be specified as for 'Min'.
+%           Default value:
+%               if x is a signal, the highest delay is 0.05 s
+%                   (corresponding to a minimum frequency of 20 Hz).
+%               if x is an envelope, the highest delay is 2 s.
+%       mirautocor(...,'Resonance',r) multiplies the autocorrelation function
+%           with a resonance curve:
+%           Possible values:
+%               'Toiviainen' from (Toiviainen & Snyder, 2003)
+%               'vanNoorden' from (van Noorden & Moelants, 2001)
+%           mirautocor(...,'Center',c) assigns the center value of the
+%               resonance curve, in seconds.
+%               Works mainly with 'Toiviainen' option.
+%               Default value: c = 0.5
+%       mirautocor(...,'Enhanced',a) reduces the effect of subharmonics.
+%           The original autocorrelation function is half-wave rectified,
+%           time-scaled by the factor a (which can be a factor list as
+%           well), and substracted from the original clipped function.
+%           (Tolonen & Karjalainen)
+%               If the 'Enhanced' option is not followed by any value, 
+%                   default value is a = 2:10
+%       mirautocor(...,'Halfwave') performs a half-wave rectification on the
+%           result.
+%       mirautocor(...,'Freq') represents the autocorrelation function in the
+%           frequency domain.
+%       mirautocor(...,'NormalWindow',w): applies a window to the input 
+%           signal and divides the autocorrelation by the autocorrelation of  
+%           that window (Boersma 1993).
+%           Possible values: any windowing function proposed in the Signal
+%               Processing Toolbox (help window) plus 'rectangle' (no
+%               windowing)
+%           Default value:  w = 'hanning'
+%           mirautocor(...,'NormalWindow',0): toggles off this normalization
+%               (which is on by default).
+%   All the parameters described previously can be applied to an
+%       autocorrelation function itself, in order to arrange the results
+%       after the actual computation of the autocorrelation computations.
+%       For instance: a = mirautocor(a,'Resonance','Enhanced')
+%   Other optional parameter:
+%       mirautocor(...,'Compres',k) computes the autocorrelation in the
+%           frequency domain and includes a magnitude compression of the
+%           spectral representation. A normal autocorrelation corresponds
+%           to the value k=2, but values lower than 2 are suggested by
+%           (Tolonen & Karjalainen, 2000).
+%           Default value: k = 0.67
+%       mirautocor(...,'Normal',n) or simply mirautocor(...,n) specifies
+%           the normalization strategy. Accepted values are 'biased',
+%           'unbiased', 'coeff' (default  value) and 'none'.
+%           See help xcorr for an explanation. 
+
+        min.key = 'Min';
+        min.type = 'Integer';
+        min.unit = {'s','Hz'};
+        if isamir(orig,'mirspectrum')
+            min.defaultunit = 'Hz';
+        else
+            min.defaultunit = 's';
+        end
+        min.default = 0;
+        min.opposite = 'max';
+    option.min = min;
+        
+        max.key = 'Max';
+        max.type = 'Integer';
+        max.unit = {'s','Hz'};
+        if isamir(orig,'mirspectrum')
+            max.defaultunit = 'Hz';
+        else
+            max.defaultunit = 's';
+        end
+        if isamir(orig,'mirenvelope') || isamir(orig,'mirdiffenvelope')
+            max.default = 2;             % for envelopes, longest period: 2 seconds.
+        elseif isamir(orig,'miraudio')  || ischar(orig)  % for audio signal,lowest frequency: 20 Hz.
+            max.default = 1/20; 
+        else
+            max.default = Inf;
+        end
+        max.opposite = 'min';
+    option.max = max;
+        
+        scaleoptbw.key = 'Normal'; %'Normal' keyword optional
+        scaleoptbw.key = 'Boolean';
+    option.scaleoptbw = scaleoptbw;
+        scaleopt.type = 'String';
+        scaleopt.choice = {'biased','unbiased','coeff','none'};
+        scaleopt.default = 'coeff';
+    option.scaleopt = scaleopt;
+            
+        gener.key = {'Generalized','Compres'};
+        gener.type = 'Integer';
+        gener.default = 2;
+        gener.keydefault = .67;
+    option.gener = gener;
+        
+        ni.key = 'NormalInput';  %% Normalize before frame or chunk??
+        ni.type = 'Boolean';
+        ni.default = 0;
+    option.ni = ni;
+    
+        reso.key = 'Resonance';
+        reso.type = 'String';
+        reso.choice = {'ToiviainenSnyder','Toiviainen','vanNoorden','no','off',0};
+        reso.keydefault = 'Toiviainen';
+        reso.when = 'After';
+        reso.default = 0;
+    option.reso = reso;
+        
+        resocenter.key = {'Center','Centre'};
+        resocenter.type = 'Integer';
+        resocenter.when = 'After';
+    option.resocenter = resocenter;
+
+        h.key = 'Halfwave';
+        h.type = 'Boolean';
+        h.when = 'After';
+        h.default = 0;
+    option.h = h;
+        
+        e.key = 'Enhanced';
+        e.type = 'Integers';
+        e.default = [];
+        e.keydefault = 2:10;
+        e.when = 'After';
+    option.e = e;
+        
+        fr.key = 'Freq';
+        fr.type = 'Boolean';
+        fr.default = 0;
+        fr.when = 'After';
+    option.fr = fr;
+        
+        nw.key = 'NormalWindow';
+        nw.when = 'Both';
+        if isamir(orig,'mirspectrum')
+            nw.default = 0;
+        elseif isamir(orig,'mirenvelope')
+            nw.default = 'rectangular';
+        else
+            nw.default = 'hanning';
+        end
+    option.nw = nw;
+    
+        win.key = 'Window';
+        win.type = 'String';
+        win.default = NaN;
+    option.win = win;
+    
+specif.option = option;
+
+specif.defaultframelength = 0.05;
+specif.defaultframehop = 0.5;
+specif.eachchunk = @eachchunk;
+specif.combinechunk = @combinechunk;
+
+if isamir(orig,'mirscalar') || isamir(orig,'mirenvelope')
+    specif.nochunk = 1;
+end
+
+varargout = mirfunction(@mirautocor,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = 'mirautocor';
+
+
+function a = main(orig,option,postoption)
+if iscell(orig)
+    orig = orig{1};
+end
+if isa(orig,'mirautocor')
+    a = orig;
+    if not(isempty(option)) && ...
+            (option.min || iscell(option.max) || option.max < Inf)
+        coeff = get(a,'Coeff');
+        delay = get(a,'Delay');
+        for h = 1:length(coeff)
+            if a.freq
+                mi = 1/option.max;
+                ma = 1/option.min;
+            else
+                mi = option.min;
+                ma = option.max;
+            end
+            for k = 1:length(coeff{h})
+                range = find(and(delay{h}{k}(:,1,1) >= mi,...
+                                 delay{h}{k}(:,1,1) <= ma));
+                coeff{h}{k} = coeff{h}{k}(range,:,:);
+                delay{h}{k} = delay{h}{k}(range,:,:);
+            end
+        end
+        a = set(a,'Coeff',coeff,'Delay',delay);
+    end
+    if not(isempty(postoption)) && not(isequal(postoption,0))
+        a = post(a,postoption);
+    end
+elseif ischar(orig)
+    a = mirautocor(miraudio(orig),option,postoption);
+else
+    if nargin == 0
+        orig = [];
+    end
+    a.freq = 0;
+    a.ofspectrum = 0;
+    a.window = {};
+    a.normalwindow = 0;
+    a = class(a,'mirautocor',mirdata(orig));
+    a = purgedata(a);
+    a = set(a,'Ord','coefficients');
+    sig = get(orig,'Data');
+    if isa(orig,'mirspectrum')
+        a = set(a,'Title','Spectrum autocorrelation','OfSpectrum',1,...
+                  'Abs','frequency (Hz)');
+        pos = get(orig,'Pos');
+    else
+        if isa(orig,'mirscalar')
+            a = set(a,'Title',[get(orig,'Title') ' autocorrelation']);
+            pos = get(orig,'FramePos');
+            for k = 1:length(sig)
+                for l = 1:length(sig{k})
+                    sig{k}{l} = sig{k}{l}';
+                    pos{k}{l} = pos{k}{l}(1,:,:)';
+                end
+            end
+        else
+            if isa(orig,'mirenvelope')
+                a = set(a,'Title','Envelope autocorrelation');
+            elseif not(isa(orig,'mirautocor'))
+                a = set(a,'Title','Waveform autocorrelation');
+            end
+            pos = get(orig,'Pos');
+        end
+        a = set(a,'Abs','lag (s)');
+    end
+    f = get(orig,'Sampling');
+    
+    if isnan(option.win) 
+        if isequal(option.nw,0) || ...
+                strcmpi(option.nw,'Off') || strcmpi(option.nw,'No')
+            option.win = 0;
+        elseif isequal(option.nw,1) || strcmpi(option.nw,'On') || ...
+                                     strcmpi(option.nw,'Yes')
+            option.win = 'hanning';
+        else
+            option.win = postoption.nw;
+        end
+    end
+
+    coeff = cell(1,length(sig));
+    lags = cell(1,length(sig));
+    wind = cell(1,length(sig));
+    for k = 1:length(sig)
+        s = sig{k};
+        p = pos{k};
+        fk = f{k};
+        if iscell(option.max)
+            mi = option.min{k};
+            ma = option.max{k};
+        else
+            mi = option.min;
+            ma = option.max;
+        end
+        coeffk = cell(1,length(s));
+        lagsk = cell(1,length(s));
+        windk = cell(1,length(s));
+        for l = 1:length(s)
+            sl = s{l};
+            sl(isnan(sl)) = 0;
+            if option.ni
+                mxsl = repmat(max(sl),[size(sl,1),1,1]);
+                mnsl = repmat(min(sl),[size(sl,1),1,1]);
+                sl = (sl-mnsl)./(mxsl-mnsl);
+            end
+            pl = p{l};
+            pl = pl-repmat(pl(1,:,:),[size(pl,1),1,1]);
+            ls = size(sl,1);
+            if mi
+                misp = find(pl(:,1,1)>=mi);
+                if isempty(misp)
+                    warning('WARNING IN MIRAUTOCOR: The specified range of delays exceeds the temporal length of the signal.');
+                    disp('Minimum delay set to zero.')
+                    misp = 1;  % misp is the lowest index of the lag range
+                    mi = 0;
+                else
+                    misp = misp(1);
+                end
+            else
+                misp = 1;
+            end
+            if ma
+                masp = find(pl(:,1,1)>=ma);
+                if isempty(masp)
+                    masp = Inf;
+                else
+                    masp = masp(1);
+                end
+            else
+                masp = Inf;
+            end
+            masp = min(masp,ceil(ls/2));
+            if masp <= misp
+                if size(sl,2) > 1
+                    warning('WARNING IN MIRAUTOCOR: Frame length is too small.');    
+                else
+                    warning('WARNING IN MIRAUTOCOR: The audio sequence is too small.');    
+                end
+                display('The autocorrelation is not defined for this range of delays.');
+            end
+            sl = center(sl);
+            if not(ischar(option.win)) || strcmpi(option.win,'Rectangular')
+                kw = ones(size(sl));
+            else
+                N = size(sl,1);
+                winf = str2func(option.win);
+                try
+                    w = window(winf,N);
+                catch
+                    if strcmpi(option.win,'hamming')
+                        disp('Signal Processing Toolbox does not seem to be installed. Recompute the hamming window manually.');
+                        w = 0.54 - 0.46 * cos(2*pi*(0:N-1)'/(N-1));
+                    else
+                        warning(['WARNING in MIRAUTOCOR: Unknown windowing function ',option.win,' (maybe Signal Processing Toolbox is not installed).']);
+                        disp('No windowing performed.')
+                        w = ones(size(sl,1),1);
+                    end
+                end
+                kw = repmat(w,[1,size(sl,2),size(sl,3)]);
+                sl = sl.* kw;
+            end
+
+            if strcmpi(option.scaleopt,'coeff')
+                scaleopt = 'none';
+            else
+                scaleopt = option.scaleopt;
+            end
+            c = zeros(masp,size(sl,2),size(sl,3));
+            for i = 1:size(sl,2)
+                for j = 1:size(sl,3)
+                    if option.gener == 2
+                        cc = xcorr(sl(:,i,j),masp-1,scaleopt);
+                        c(:,i,j) = cc(masp:end);
+                    else
+                        ss = abs(fft(sl(:,i,j)));
+                        ss = ss.^option.gener;
+                        cc = ifft(ss);
+                        ll = (0:masp-1);
+                        c(:,i,j) = cc(ll+1);
+                    end
+                end
+                if strcmpi(option.scaleopt,'coeff') && option.gener == 2
+                    % to be adapted to generalized autocor
+                    c(:,i,:) = c(:,i,:)/xcorr(sum(sl(:,i,:),3),0);
+                    % This is a kind of generalization of the 'coeff'
+                    % normalization for multi-channels signals. In the
+                    % original 'coeff' option, the autocorrelation at zero
+                    % lag is identically 1.0. In this multi-channels
+                    % version, the autocorrelation at zero lag is such that
+                    % the sum over channels becomes identically 1.0. 
+                end
+            end
+            coeffk{l} = c(misp:end,:,:);
+            pl = pl(find(pl(:,1,1) >=mi),:,:);
+            lagsk{l} = pl(1:min(size(coeffk{l},1),size(pl,1)),:,:);
+            windk{l} = kw;
+        end
+        coeff{k} = coeffk;
+        lags{k} = lagsk;
+        wind{k} = windk;
+    end
+    a = set(a,'Coeff',coeff,'Delay',lags,'Window',wind);
+    if not(isempty(postoption))
+        a = post(a,postoption);
+    end
+end
+
+
+function a = post(a,option)
+debug = 0;
+coeff = get(a,'Coeff');
+lags = get(a,'Delay');
+wind = get(a,'Window');
+freq = option.fr && not(get(a,'FreqDomain'));
+if isequal(option.e,1)
+    option.e = 2:10;
+end
+if max(option.e) > 1
+    pa = mirpeaks(a,'NoBegin','NoEnd','Contrast',.01);
+    va = mirpeaks(a,'Valleys','Contrast',.01);
+    pv = get(pa,'PeakVal');
+    vv = get(va,'PeakVal');
+end
+for k = 1:length(coeff)
+    for l = 1:length(coeff{k})
+        c = coeff{k}{l};  % Coefficients of autocorrelation
+        t = lags{k}{l};   % Delays of autocorrelation
+        if not(isempty(c))
+            if not(isequal(option.nw,0) || strcmpi(option.nw,'No') || ...
+                   strcmpi(option.nw,'Off') || a.normalwindow) % 'NormalWindow' option
+                xw = zeros(size(c));
+                lc = size(c,1);
+                for j = 1:size(c,3)
+                    for i = 1:size(c,2)
+                        xwij = xcorr(wind{k}{l}(:,i,j),lc,'coeff');
+                        xw(:,i,j) = xwij(lc+2:end);
+                    end
+                end
+                c = c./ xw;
+                a.normalwindow = 1;
+            end
+            if ischar(option.reso) && ...
+                    (strcmpi(option.reso,'ToiviainenSnyder') || ...
+                    strcmpi(option.reso,'Toiviainen') || ...
+                    strcmpi(option.reso,'vanNoorden'))
+                if isa(a,'mirautocor') && get(a,'FreqDomain')
+                    ll = 1./t;
+                else
+                    ll = t;
+                end
+                if not(option.resocenter)
+                    option.resocenter = .5;
+                end
+                if strcmpi(option.reso,'ToiviainenSnyder') || ...
+                    strcmpi(option.reso,'Toiviainen')
+                    w = max(1 - 0.25*(log2(max(ll,1e-12)/option.resocenter)).^2, 0);
+                elseif strcmpi(option.reso,'vanNoorden')
+                    f0=2.193; b=option.resocenter; 
+                    f=1./ll; a1=(f0*f0-f.*f).^2+b*f.^2; a2=f0^4+f.^4;
+                    w=(1./sqrt(a1))-(1./sqrt(a2));
+                end
+                if max(w) == 0
+                    warning('The resonance curve, not defined for this range of delays, will not be applied.')
+                else
+                    w = w/max(w);
+                    c = c.* repmat(w,[1,size(c,2),size(c,3)]);
+                end
+            end
+            if option.h
+                c = hwr(c);
+            end
+            if max(option.e) > 1
+                if a.freq
+                    freq = 1;
+                    for i = 1:size(c,3)
+                        c(:,:,i) = flipud(c(:,:,i));
+                    end
+                    t = flipud(1./t);
+                end
+                
+                for g = 1:size(c,2)
+                    for h = 1:size(c,3)
+                        cgh = c(:,g,h);
+                        if length(cgh)>1
+                            pvk = pv{k}{l}{1,g,h};
+                            mv = [];
+                            if not(isempty(pvk))
+                                mp = min(pv{k}{l}{1,g,h}); %Lowest peak
+                                vvv = vv{k}{l}{1,g,h}; %Valleys
+                                mv = vvv(find(vvv<mp,1,'last'));
+                                    %Highest valley below the lowest peak
+
+                                if not(isempty(mv))
+                                    cgh = cgh-mv;
+                                end
+                            end
+                            cgh2 = cgh;
+                            tgh2 = t(:,g,1);
+                            coef = cgh(2)-cgh(1); % initial slope of the autocor curve
+                            tcoef = tgh2(2)-tgh2(1);
+                            deter = 0;
+                            inter = 0;
+
+                            repet = find(not(diff(tgh2)));  % Avoid bug if repeated x-values
+                            if repet
+                                warning('WARNING in MIRAUTOCOR: Two successive samples have exactly same temporal position.');
+                                tgh2(repet+1) = tgh2(repet)+1e-12;
+                            end
+
+                            if coef < 0
+                                % initial descending slope removed
+                                deter = find(diff(cgh2)>0,1)-1;
+                                    % number of removed points
+                                if isempty(deter)
+                                    deter = 0;
+                                end
+                                cgh2(1:deter) = [];
+                                tgh2(1:deter) = [];
+                                coef = cgh2(2)-cgh2(1);
+                            end
+
+                            if coef > 0
+                                % initial ascending slope prolonged to the left
+                                % until it reaches the x-axis
+                                while cgh2(1) > 0
+                                    coef = coef*1.1;
+                                        % the further to the left, ...
+                                        % the more ascending is the slope
+                                        % (not sure it always works, though...)
+                                    inter = inter+1;
+                                        % number of added points
+                                    cgh2 = [cgh2(1)-coef; cgh2];
+                                    tgh2 = [tgh2(1)-tcoef; tgh2];
+                                end
+                                cgh2(1) = 0;
+                            end
+
+                            for i = option.e  % Enhancing procedure
+                                % option.e is the list of scaling factors
+                                % i is the scaling factor
+                                if i
+                                    be = find(tgh2 & tgh2/i >= tgh2(1),1);
+                                        % starting point of the substraction
+                                        % on the X-axis
+
+                                    if not(isempty(be))
+                                        ic = interp1(tgh2,cgh2,tgh2/i);
+                                            % The scaled autocorrelation
+                                        ic(1:be-1) = 0;
+                                        ic(find(isnan(ic))) = Inf;
+                                            % All the NaN values are changed
+                                            % into 0 in the resulting curve
+                                        ic = max(ic,0);
+
+                                        if debug
+                                           hold off,plot(tgh2,cgh2)
+                                        end
+
+                                        cgh2 = cgh2 - ic;       
+                                            % The scaled autocorrelation
+                                            % is substracted to the initial one
+
+                                        cgh2 = max(cgh2,0);
+                                            % Half-wave rectification
+
+                                        if debug
+                                           hold on,plot(tgh2,ic,'r')
+                                           hold on,plot(tgh2,cgh2,'g')
+                                           drawnow
+                                           figure
+                                        end
+                                    end
+                                end
+                            end
+
+                            % The  temporary modifications are
+                            % removed from the final curve
+                            if inter>=deter
+                                c(:,g,h) = cgh2(inter-deter+1:end);
+                                if not(isempty(mv))
+                                    c(:,g,h) = c(:,g,h) + mv;
+                                end
+                            else
+                                c(:,g,h) = [zeros(deter-inter,1);cgh2];
+                            end
+                        end
+                    end
+                end
+            end
+            if freq
+                if t(1,1) == 0
+                    c = c(2:end,:,:);
+                    t = t(2:end,:,:);
+                end
+                for i = 1:size(c,3)
+                    c(:,:,i) = flipud(c(:,:,i));
+                end
+                t = flipud(1./t);
+            end
+            coeff{k}{l} = c;
+            lags{k}{l} = t;
+        end
+    end
+end
+a = set(a,'Coeff',coeff,'Delay',lags,'Freq');
+if freq
+    a = set(a,'FreqDomain',1,'Abs','frequency (Hz)');
+end
+
+
+function [y orig] = eachchunk(orig,option,missing,postchunk)
+option.scaleopt = 'none';
+y = mirautocor(orig,option);
+
+
+function y = combinechunk(old,new)
+do = get(old,'Data');
+do = do{1}{1};
+dn = get(new,'Data');
+dn = dn{1}{1};
+if abs(size(dn,1)-size(do,1)) <= 2 % Probleme of border fluctuation
+    mi = min(size(dn,1),size(do,1));
+    dn = dn(1:mi,:,:);
+    do = do(1:mi,:,:);
+elseif length(dn) < length(do)
+    dn(length(do),:,:) = 0; % Zero-padding
+end
+y = set(old,'ChunkData',do+dn);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirautocor/mtimes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function c = mtimes(a,b)
+
+if not(get(a,'OfSpectrum'))
+    a = mirautocor(a,'Freq');
+end
+if isa(b,'mirautocor')
+    if not(get(b,'OfSpectrum'))
+        b = mirautocor(b,'Freq');
+    end
+elseif isa(b,'mircepstrum')
+    b = mircepstrum(b,'Freq');
+end
+c = mirtimes(a,b);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirautocor/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function aa = set(a,varargin)
+% SET Set properties for the MIRautocor object
+% and return the updated object
+
+propertyArgIn = varargin;
+f = a.freq;
+s = a.ofspectrum;
+w = a.window;
+nw = a.normalwindow;
+d = mirdata(a);
+d = set(d,'Title',get(a,'Title'),'Abs',get(a,'Abs'),'Ord',get(a,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Coeff'
+           d = set(d,'Data',val);
+       case 'Delay'
+           d = set(d,'Pos',val);
+       case 'FreqDomain'
+           f = val;
+       case 'OfSpectrum'
+           s = val;
+       case 'Window'
+           w = val;
+       case 'LowRemoved'
+           lr = val;
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+aa.freq = f;
+aa.ofspectrum = s;
+aa.window = w;
+aa.normalwindow = nw;
+aa = class(aa,'mirautocor',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mircepstrum/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function val = get(a, propName)
+% GET Get properties from the MIRcepstrum object
+% and return the value
+
+switch propName
+    case 'Magnitude'
+        val = get(mirdata(a),'Data');
+    case 'Phase'
+        val = a.phase;
+    case 'Quefrency'
+        val = get(mirdata(a),'Pos');
+    case 'FreqDomain'
+        val = a.freq;
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mircepstrum/mircepstrum.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,149 @@
+function varargout = mircepstrum(orig,varargin)
+%   s = mircepstrum(x) computes the cepstrum, which indicates
+%       periodicities, and is used for instance for pitch detection.
+%   x can be either a spectrum, an audio signal, or the name of an audio file.
+%   Optional parameter:
+%       mircepstrum(...,'Min',min) specifies the lowest delay taken into
+%           consideration, in seconds.
+%           Default value: 0.0002 s (corresponding to a maximum frequency of 
+%               5 kHz).
+%       mircepstrum(...,'Max',max) specifies the highest delay taken into
+%           consideration, in seconds.
+%           Default value: 0.05 s (corresponding to a minimum frequency of 
+%               20 Hz).
+%       mircepstrum(...,'Freq') represents the cepstrum in the frequency 
+%           domain.
+
+        mi.key = 'Min';
+        mi.type = 'Integer';
+        mi.default = 0.0002;
+        mi.unit = {'s','Hz'};
+        mi.defaultunit = 's';
+        mi.opposite = 'ma';
+    option.mi = mi;
+
+        ma.key = 'Max';
+        ma.type = 'Integer';
+        ma.default = .05;
+        ma.unit = {'s','Hz'};
+        ma.defaultunit = 's';
+        ma.opposite = 'mi';
+    option.ma = ma;
+        
+        fr.key = 'Freq';
+        fr.type = 'Boolean';
+        fr.default = 0;
+    option.fr = fr;
+
+        complex.key = 'Complex';
+        complex.type = 'Boolean';
+        complex.default = 0;
+    option.complex = complex;
+
+specif.option = option;
+
+specif.defaultframelength = 0.05;
+specif.defaultframehop = 0.5;
+
+varargout = mirfunction(@mircepstrum,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mircepstrum'))
+    x = mirspectrum(x);
+end
+type = 'mircepstrum';
+
+
+function c = main(orig,option,postoption)
+if iscell(orig)
+    orig = orig{1};
+end
+c.phase = [];
+if isa(orig,'mircepstrum')
+    c.freq = orig.freq;
+else
+    c.freq = 0;
+end
+c = class(c,'mircepstrum',mirdata(orig));
+c = purgedata(c);
+c = set(c,'Title','Cepstrum','Abs','quefrency (s)','Ord','magnitude');
+
+if isa(orig,'mircepstrum')
+    if option.ma < Inf || option.mi > 0 || get(orig,'FreqDomain')
+        mag = get(orig,'Magnitude');
+        pha = get(orig,'Phase');
+        que = get(orig,'Quefrency');
+        for h = 1:length(mag)
+            for k = 1:length(mag{h})
+                if get(orig,'FreqDomain')
+                    mag{h}{k} = flipud(mag{h}{k});
+                    que{h}{k} = flipud(1./que{h}{k});
+                    pha{h}{k} = flipud(pha{h}{k});
+                end
+                range = find(que{h}{k}(:,1,1) <= option.ma & ...
+                             que{h}{k}(:,1,1) >= option.mi);
+                mag{h}{k} = mag{h}{k}(range,:,:);
+                pha{h}{k} = pha{h}{k}(range,:,:);
+                que{h}{k} = que{h}{k}(range,:,:);
+            end
+        end
+        c = set(c,'Magnitude',mag,'Phase',pha,'Quefrency',que,'FreqDomain',0);
+    end
+    c = modif(c,option);
+elseif isa(orig,'mirspectrum')
+    mag = get(orig,'Magnitude');
+    pha = get(orig,'Phase');
+    f = get(orig,'Sampling');
+    q = cell(1,length(mag));
+    for h = 1:length(mag)
+        len = ceil(option.ma*f{h});
+        start = ceil(option.mi*f{h})+1;
+        q{h} = cell(1,length(mag{h}));
+        for k = 1:length(mag{h})
+            m = mag{h}{k}.*exp(1i*pha{h}{k});
+            m = [m(1:end-1,:) ; conj(flipud(m))];  % Reconstitution of the complete abs(FFT)
+            if not(option.complex)
+                m = abs(m);
+            end
+            m = log(m);
+            c0=fft(m);
+            q0=repmat((0:(size(c0,1)-1))'/f{k},[1,size(m,2),size(m,3)]);
+            len = min(len,floor(size(c0,1)/2));
+            mag{h}{k} = abs(c0(start:len,:,:));
+            if option.complex
+                pha{h}{k} = unwrap(angle(c0(start:len,:,:)));    
+            else
+                pha{h}{k} = nan(size(c0(start:len,:,:)));
+            end
+            q{h}{k} = q0(start:len,:,:);
+        end
+    end
+    c = set(c,'Magnitude',mag,'Phase',pha,'Quefrency',q);
+    c = modif(c,option);
+end
+
+
+function c = modif(c,option)
+mag = get(c,'Magnitude');
+que = get(c,'Quefrency');
+if option.fr && not(get(c,'FreqDomain'))
+    for k = 1:length(mag)
+        for l = 1:length(mag{k})
+            m = mag{k}{l};
+            q = que{k}{l};
+            if not(isempty(m))
+                if q(1,1) == 0
+                    m = m(2:end,:,:);
+                    q = q(2:end,:,:);
+                end
+                m = flipud(m);
+                q = flipud(1./q);
+            end
+            mag{k}{l} = m;
+            que{k}{l} = q;
+        end
+    end
+    c = set(c,'FreqDomain',1,'Abs','frequency (Hz)');
+end
+c = set(c,'Magnitude',mag,'Quefrency',que,'Freq');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mircepstrum/mtimes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function c = mtimes(a,b)
+
+a = mircepstrum(a,'Freq');
+if isa(b,'mirautocor')
+    if not(get(b,'OfSpectrum'))
+        b = mirautocor(b,'Freq');
+    end
+elseif isa(b,'mircepstrum')
+    b = mircepstrum(b,'Freq');
+end
+c = mirtimes(a,b);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mircepstrum/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function ss = set(s,varargin)
+% SET Set properties for the MIRcepstrum object
+% and return the updated object
+
+propertyArgIn = varargin;
+p = s.phase;
+f = s.freq;
+d = mirdata(s);
+d = set(d,'Title',get(s,'Title'),'Abs',get(s,'Abs'),'Ord',get(s,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Magnitude'
+           d = set(d,'Data',val);
+       case 'Phase'
+           p = val;
+       case 'Quefrency'
+           d = set(d,'Pos',val);
+       case 'FreqDomain'
+           f = val;
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+ss.phase = p;
+ss.freq = f;
+ss = class(ss,'mircepstrum',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirchromagram/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function val = get(a, propName)
+% GET Get properties from the MIRchromagram object
+% and return the value
+
+switch propName
+    case 'Magnitude'
+        val = get(mirdata(a),'Data');
+    case 'Chroma'
+        val = get(mirdata(a),'Pos');
+    case 'ChromaClass'
+        val = a.chromaclass;
+    case 'ChromaFreq'
+        val = a.chromafreq;
+    case 'Register'
+        val = a.register;
+    case 'PitchLabel'
+        val = a.plabel;
+    case 'Wrap'
+        val = a.wrap;
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirchromagram/mirchromagram.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,322 @@
+function varargout = mirchromagram(orig,varargin)
+%   c = mirchromagram(x) computes the chromagram, or distribution of energy 
+%       along pitches, of the audio signal x.
+%       (x can be the name of an audio file as well, or a spectrum, ...)
+%   Optional argument:
+%       c = mirchromagram(...,'Tuning',t): specifies the central frequency
+%           (in Hz.) associated to  chroma C.
+%               Default value, t = 261.6256 Hz
+%       c = mirchromagram(...,'Wrap',w): specifies whether the chromagram is
+%           wrapped or not.
+%           w = 1: groups all the pitches belonging to same pitch classes
+%               (default value)
+%           w = 0: pitches are considered as absolute values.
+%       c = mirchromagram(...,'Frame',l,h) orders a frame decomposition of window
+%           length l (in seconds) and hop factor h, expressed relatively to
+%           the window length. For instance h = 1 indicates no overlap.
+%           Default values: l = .2 seconds and h = .05
+%       c = mirchromagram(...,'Center'): centers the result.
+%       c = mirchromagram(...,'Normal',n): performs a n-norm of the
+%           resulting chromagram. Toggled off if n = 0
+%               Default value: n = Inf (corresponding to a normalization by
+%                   the maximum value).
+%       c = mirchromagram(...,'Pitch',p): specifies how to label chromas in
+%           the figures.
+%               p = 1: chromas are labeled using pitch names (default)
+%                   alternative syntax: chromagram(...,'Pitch')
+%               p = 0: chromas are labeled using MIDI pitch numbers
+%       c = mirchromagram(...,'Triangle'): weight the contribution of each
+%           frequency with respect to the distance with the actual
+%           frequency of the corresponding chroma.
+%       c = mirchromagram(...,'Weight',o): specifies the relative radius of
+%           the weighting window, with respect to the distance between
+%           frequencies of successive chromas.
+%           o = 1: each window begins at the centers of the previous one.
+%           o = .5: each window begins at the end of the previous one.
+%               (default value)
+%       mirchromagram(...,'Min',mi) indicates the lowest frequency taken into
+%           consideration in the spectrum computation, expressed in Hz.
+%           Default value: 100 Hz. (Gomez, 2006)
+%       mirchromagram(...,'Max',ma) indicates the highest frequency taken into
+%           consideration in the spectrum computation, expressed in Hz.
+%           This upper limit is further shifted to a highest value until
+%           the frequency range covers an exact multiple of octaves.
+%           Default value: 5000 Hz. (Gomez, 2006)
+%       mirchromagram(...,'Res',r) indicates the resolution of the
+%           chromagram in number of bins per octave.
+%               Default value, r = 12.
+%
+% Gómez, E. (2006). Tonal description of music audio signal. Phd thesis, 
+%   Universitat Pompeu Fabra, Barcelona .
+
+        cen.key = 'Center';
+        cen.type = 'Boolean';
+        cen.default = 0;
+    option.cen = cen;
+    
+        nor.key = {'Normal','Norm'};
+        nor.type = 'Integer';
+        nor.default = Inf;
+    option.nor = nor;
+    
+        wth.key = 'Weight';
+        wth.type = 'Integer';
+        wth.default = .5;
+    option.wth = wth;
+    
+        tri.key = 'Triangle';
+        tri.type = 'Boolean';
+        tri.default = 0;
+    option.tri = tri;
+    
+        wrp.key = 'Wrap';
+        wrp.type = 'Boolean';
+        wrp.default = 1;
+    option.wrp = wrp;
+    
+        plabel.key = 'Pitch';
+        plabel.type = 'Boolean';
+        plabel.default = 1;
+    option.plabel = plabel;
+    
+        thr.key = {'Threshold','dB'};
+        thr.type = 'Integer';
+        thr.default = 20;
+    option.thr = thr;
+    
+        min.key = 'Min';
+        min.type = 'Integer';
+        min.default = 100;
+    option.min = min;
+    
+        max.key = 'Max';
+        max.type = 'Integer';
+        max.default = 5000;
+    option.max = max;
+
+        res.key = 'Res';
+        res.type = 'Integer';
+        res.default = 12;
+    option.res = res;
+
+        origin.key = 'Tuning';
+        origin.type = 'Integer';
+        origin.default = 261.6256;
+    option.origin = origin;
+   
+specif.option = option;
+specif.defaultframelength = .2;
+specif.defaultframehop = .05;
+
+varargout = mirfunction(@mirchromagram,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if isamir(x,'mirtemporal') || isamir(x,'mirspectrum')
+    freqmin = option.min;
+    freqmax = freqmin*2;
+    while freqmax < option.max
+        freqmax = freqmax*2;
+    end
+    %freqres = freqmin*(2.^(1/option.res)-1);
+        % Minimal frequency resolution should correspond to frequency range
+        %   between the first two bins of the chromagram 
+        
+    x = mirspectrum(x,'dB',option.thr,'Min',freqmin,'Max',freqmax,...
+                      'NormalInput','MinRes',option.res,'OctaveRatio',.85);
+                  %freqres*.5,...
+                  %    'WarningRes',freqres);
+end
+type = 'mirchromagram';
+
+
+function c = main(orig,option,postoption)
+if iscell(orig)
+    orig = orig{1};
+end
+if option.res == 12
+    chromascale = {'C','C#','D','D#','E','F','F#','G','G#','A','A#','B'};
+else
+    chromascale = 1:option.res;
+    option.plabel = 0;
+end
+if isa(orig,'mirchromagram')
+    c = modif(orig,option,chromascale);
+else
+    c.plabel = 1;
+    c.wrap = 0;
+    c.chromaclass = {};
+    c.chromafreq = {};
+    c.register = {};
+    c = class(c,'mirchromagram',mirdata(orig));
+    c = purgedata(c);
+    c = set(c,'Title','Chromagram','Ord','magnitude','Interpolable',0);
+    if option.wrp
+        c = set(c,'Abs','chroma class');
+    else
+        c = set(c,'Abs','chroma');
+    end
+    m = get(orig,'Magnitude');
+    f = get(orig,'Frequency');
+    %disp('Computing chromagram...')
+    fs = get(orig,'Sampling');
+    n = cell(1,length(m));  % The final structured list of magnitudes.
+    cc = cell(1,length(m));  % The final structured list of chroma classes.
+    o = cell(1,length(m));  % The final structured list of octave registers.
+    p = cell(1,length(m));  % The final structured list of chromas.
+    cf = cell(1,length(m));  % The final structured list of central frequencies related to chromas.
+    for i = 1:length(m)
+        mi = m{i};
+        fi = f{i};
+        if not(iscell(mi))
+            mi = {mi};
+            fi = {fi};
+        end
+        ni = cell(1,length(mi));    % The list of magnitudes.
+        ci = cell(1,length(mi));    % The list of chroma classes.
+        oi = cell(1,length(mi));    % The list of octave registers.
+        pi = cell(1,length(mi));    % The list of absolute chromas.
+        cfi = cell(1,length(mi));    % The central frequency of each chroma.
+        for j = 1:length(mi)
+            mj = mi{j};
+            fj = fi{j};
+                        
+            % Let's remove the frequencies exceeding the last whole octave.
+            minfj = min(min(min(fj)));
+            maxfj = max(max(max(fj)));
+            maxfj = minfj*2^(floor(log2(maxfj/minfj)));
+            fz = find(fj(:,1,1,1) > maxfj);
+            mj(fz,:,:,:) = [];      
+            fj(fz,:,:,:) = [];
+            
+            [s1 s2 s3] = size(mj);
+            
+            cj = freq2chro(fj,option.res,option.origin);
+            if not(ismember(min(cj)+1,cj))
+                warning('WARNING IN MIRCHROMAGRAM: Frequency resolution of the spectrum is too low.');    
+                display('The conversion of low frequencies into chromas may be incorrect.');
+            end
+            ccj = min(min(min(cj))):max(max(max(cj)));
+            sc = length(ccj);   % The size of range of absolute chromas.
+            mat = zeros(s1,sc);
+            fc = chro2freq(ccj,option.res,option.origin);   % The absolute chromas in Hz.
+            fl = chro2freq(ccj-1,option.res,option.origin); % Each previous chromas in Hz.
+            fr = chro2freq(ccj+1,option.res,option.origin); % Each related next chromas in Hz.
+            for k = 1:sc
+                rad = find(and(fj(:,1) > fc(k)-option.wth*(fc(k)-fl(k)),...
+                               fj(:,1) < fc(k)-option.wth*(fc(k)-fr(k))));
+                if option.tri
+                    dist = fc(k) - fj(:,1,1,1);
+                    rad1 = dist/(fc(k) - fl(k))/option.wth;
+                    rad2 = dist/(fc(k) - fr(k))/option.wth;
+                    ndist = max(rad1,rad2);
+                    mat(:,k) = max(min(1-ndist,1),0)/length(rad);
+                else
+                    mat(rad,k) = ones(length(rad),1)/length(rad);
+                end
+                if k ==1 || k == sc
+                    mat(:,k) = mat(:,k)/2;
+                end
+            end
+            nj = zeros(sc,s2,s3);
+            for k = 1:s2
+                for l = 1:s3
+                    nj(:,k,l) = (mj(:,k,l)'*mat)';
+                end
+            end
+            cj = mod(ccj',option.res);
+            oi{j} = floor(ccj/option.res)+4;
+            if option.plabel
+                pj = strcat(chromascale(cj+1)',num2str(oi{j}'));
+            else
+                pj = ccj'+60;
+            end
+            ci{j} = repmat(cj,[1,s2,s3]);
+            pi{j} = repmat(pj,[1,s2,s3]);
+            ni{j} = nj;
+            cfi{j} = fc;
+        end
+        n{i} = ni;
+        cc{i} = ci;
+        o{i} = oi;
+        p{i} = pi;
+        cf{i} = cfi;
+    end
+    c = set(c,'Magnitude',n,'Chroma',p,'ChromaClass',cc,...
+              'ChromaFreq',cf,'Register',o);
+    c = modif(c,option,chromascale);
+    c = {c orig};
+end
+
+   
+function c = modif(c,option,chromascale)
+if option.plabel
+    c = set(c,'PitchLabel',1);
+end            
+if option.cen || option.nor || option.wrp
+    n = get(c,'Magnitude');
+    p = get(c,'Chroma');
+    cl = get(c,'ChromaClass');
+    fp = get(c,'FramePos');
+    n2 = cell(1,length(n));
+    p2 = cell(1,length(n));
+    wrp = option.wrp && not(get(c,'Wrap'));
+    for i = 1:length(n)
+        ni = n{i};
+        pi = p{i};
+        cli = cl{i};
+        if not(iscell(ni))
+            ni = {ni};
+            pi = {pi};
+            cli = {cli};
+        end
+        if wrp
+            c = set(c,'Wrap',option.wrp);
+        end
+        n2i = cell(1,length(ni));
+        p2i = cell(1,length(ni));
+        for j = 1:length(ni)
+            nj = ni{j};
+            pj = pi{j};
+            clj = cli{j};
+            if wrp
+                n2j = zeros(option.res,size(nj,2),size(nj,3));
+                for k = 1:size(pj,1)
+                    n2j(clj(k)+1,:,:) = n2j(clj(k)+1,:,:) + nj(k,:,:);  % squared sum (parameter)
+                end
+                p2i{j} = chromascale';
+            else
+                n2j = nj;
+                p2i{j} = pi{j};
+            end
+            if option.cen
+                n2j = n2j - repmat(mean(n2j),[size(n2j,1),1,1]);
+            end
+            if option.nor
+                n2j = n2j ./ repmat(vectnorm(n2j,option.nor) + ...
+                    repmat(1e-6,[1,size(n2j,2),size(n2j,3)] )...
+                    ,[size(n2j,1),1,1]);
+            end
+            n2i{j} = n2j;
+        end
+        n2{i} = n2i;
+        p2{i} = p2i;
+    end
+    c = set(c,'Magnitude',n2,'Chroma',p2,'FramePos',fp);
+end
+
+
+function c = freq2chro(f,res,origin)
+c = round(res*log2(f/origin));
+
+
+function f = chro2freq(c,res,origin)
+f = 2.^(c/res)*origin;
+
+
+function y = vectnorm(x,p)
+if isinf(p)
+    y = max(x);
+else
+    y = sum(abs(x).^p).^(1/p);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirchromagram/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function cc = set(c,varargin)
+% SET Set properties for the MIRchromagram object
+% and return the updated object
+
+propertyArgIn = varargin;
+pl = c.plabel;
+wr = c.wrap;
+cl = c.chromaclass;
+cf = c.chromafreq;
+or = c.register;
+d = mirdata(c);
+d = set(d,'Title',get(c,'Title'),'Abs',get(c,'Abs'),'Ord',get(c,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Magnitude'
+           d = set(d,'Data',val);
+       case 'Chroma'
+           d = set(d,'Pos',val);
+       case 'ChromaClass'
+           cl = val;
+       case 'ChromaFreq'
+           cf = val;
+       case 'Register'
+           or = val;
+       case 'PitchLabel'
+           pl = val;
+       case 'Wrap'
+           wr = val;
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+cc.plabel = pl;
+cc.wrap = wr;
+cc.chromaclass = cl;
+cc.chromafreq = cf;
+cc.register = or;
+cc = class(cc,'mirchromagram',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirclassify/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function display(c)
+
+% CLASSIFY/DISPLAY display of classification
+
+disp('Classification results:')
+c.classes
+
+if isnan(c.correct)
+    disp('No label has been associated to the test set. Correct classification rate cannot be computed.');
+else
+    disp(['Correct classification rate: ',num2str(c.correct)]);
+end
+
+%disp(['Number of observations: ',num2str(c.nbobs)])
+%disp(['Number of free parameters: ',num2str(c.nbparam)])
+
+%disp('Posterior probability:')
+%c.post{:}
+
+if 0
+    figure
+    hold on
+    vt = c.training;
+    lt = c.labtraining;
+    va = c.test;
+    la = c.labtest;
+    for i = 1:size(vt,2)
+        scatter3(vt(1,i),vt(2,i),vt(3,i),'k+','SizeData',2);
+        text(vt(1,i),vt(2,i),vt(3,i),lt{i},'Color','k');
+    end
+    for i = 1:size(va,2)
+        scatter3(va(1,:),va(2,:),va(3,:),'r+','SizeData',2);
+        text(va(1,i),va(2,i),va(3,i),la{i},'Color','r');
+    end
+    xlabel('1')
+    ylabel('2')
+    zlabel('3')
+    rotate3d
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirclassify/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function val = get(a, propName)
+% GET Get properties from the MIRclassify object
+% and return the value
+
+switch propName
+    case 'Correct'
+        val = a.correct;
+    case 'Data'
+        val = a.correct;
+    case 'Classes'
+        val = a.classes;
+    otherwise
+        error([propName,' is not a valid MIRdata property'])
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirclassify/mirclassify.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,270 @@
+function c = mirclassify(a,da,t,dt,varargin)
+%   c = mirclassify(test,features_test,train,features_train) classifies the
+%       audio sequence(s) contained in the audio object test, along the
+%       analytic feature(s) features_test, following the supervised
+%       learning of a training set defined by the audio object train and
+%       the corresponding analytic feature(s) features_train.
+%           * The analytic feature(s) features_test should *not* be frame 
+%               decomposed. Frame-decomposed data should first be 
+%               summarized, using for instance mirmean or mirstd.
+%           * Multiple analytic features have to be grouped into one array 
+%               of cells.
+%       You can also integrate your own arrays of numbers computed outside
+%           MIRtoolbox as part of the features. These arrays should be 
+%           given as matrices where each successive column is the analysis 
+%           of each successive file.
+%   Example:
+%       mirclassify(test, mfcc(test), train, mfcc(train))
+%       mirclassify(test, {mfcc(test), centroid(test)}, ...
+%                train, {mfcc(train), centroid(train)})
+%   Optional argument:
+%       mirclassify(...,'Nearest') uses the minimum distance strategy.
+%           (by default)
+%       mirclassify(...,'Nearest',k) uses the k-nearest-neighbour strategy.
+%           Default value: k = 1, corresponding to the minimum distance
+%               strategy.
+%       mirclassify(...,'GMM',ng) uses a gaussian mixture model. Each class is
+%           modeled by at most ng gaussians.
+%           Default value: ng = 1.
+%           Additionnally, the type of mixture model can be specified,
+%           using the set of value proposed in the gmm function: i.e.,
+%           'spherical','diag','full' (default value) and 'ppca'.
+%               (cf. help gmm)
+%           Requires the Netlab toolbox.
+
+lab = get(t,'Label');
+c.labtraining = lab;
+rlab = get(a,'Label');
+c.labtest = rlab;
+[k,ncentres,covartype,kmiter,emiter,d,norml,mahl] = scanargin(varargin);
+disp('Classifying...')
+if not(iscell(dt))
+    dt = {dt};
+end
+lvt = length(get(t,'Data'));
+vt = [];
+for i = 1:length(dt)
+    if isnumeric(dt{i})
+        d = cell(1,size(dt{i},2));
+        for j = 1:size(dt{i},2)
+            d{j} = dt{i}(:,j);
+        end
+    else
+        d = get(dt{i},'Data');
+    end
+    vt = integrate(vt,d,lvt,norml);
+    if isa(dt{i},'scalar')
+        m = mode(dt{i});
+        if not(isempty(m))
+            vt = integrate(vt,m,lvt,norml);
+        end
+    end
+end
+c.training = vt;
+dim = size(vt,1);
+if not(iscell(da))
+    da = {da};
+end
+lva = length(get(a,'Data'));
+va = [];
+for i = 1:length(da)
+    if isnumeric(da{i})
+        d = cell(1,size(da{i},2));
+        for j = 1:size(da{i},2)
+            d{j} = da{i}(:,j);
+        end
+    else
+        d = get(da{i},'Data');
+    end
+    va = integrate(va,d,lva,norml);
+    if isa(da{i},'scalar')
+        m = mode(da{i});
+        if not(isempty(m))
+            va = integrate(va,m,lva,norml);
+        end
+    end
+end
+c.test = va;
+c.nbobs = lvt;
+totva = [vt va];
+mahl = cov(totva');
+if k                % k-Nearest Neighbour
+    c.nbparam = lvt;
+    for l = 1:lva
+        [sv,idx] = sort(distance(va(:,l),vt,d,mahl));
+        labs = cell(0); % Class labels
+        founds = [];    % Number of found elements in each class
+        for i = idx(1:k)
+            labi = lab{i};
+            found = 0;
+            for j = 1:length(labs)
+                if isequal(labi,labs{j})
+                    found = j;
+                end
+            end
+            if found
+                founds(found) = founds(found)+1;
+            else
+                labs{end+1} = labi;
+                founds(end+1) = 1;
+            end
+        end
+        [b ib] = max(founds);
+        c.classes{l} = labs{ib};
+    end
+elseif ncentres     % Gaussian Mixture Model
+    labs = cell(0);    % Class labels
+    founds = cell(0);  % Elements associated to each label.
+    for i = 1:lvt
+        labi = lab{i};
+        found = 0;
+        for j = 1:length(labs)
+            if isequal(labi,labs{j})
+                founds{j}(end+1) = i;
+                found = 1;
+            end
+        end
+        if not(found)
+            labs{end+1} = labi;
+            founds{end+1} = i;
+        end
+    end
+    options      = zeros(1, 18);
+    options(2:3) = 1e-4;
+    options(4)   = 1e-6;
+    options(16)  = 1e-8;
+    options(17)  = 0.1;
+    options(1)   = 0; %Prints out error values, -1 else
+    c.nbparam = 0;
+    OK = 0;
+    while not(OK)
+        OK = 1;
+        for i = 1:length(labs)
+            options(14)  = kmiter;
+            try
+                mix{i} = gmm(dim,ncentres,covartype);
+            catch
+                error('ERROR IN CLASSIFY: Netlab toolbox not installed.');
+            end
+            mix{i} = netlabgmminit(mix{i},vt(:,founds{i})',options);
+            options(5)   = 1;
+            options(14)  = emiter;
+            try
+                mix{i} = gmmem(mix{i},vt(:,founds{i})',options);
+                c.nbparam = c.nbparam + ...
+                    length(mix{i}.centres(:)) + length(mix{i}.covars(:));
+            catch
+                err = lasterr;
+                warning('WARNING IN CLASSIFY: Problem when calling GMMEM:');
+                disp(err);
+                disp('Let us try again...');
+                OK = 0;
+            end
+        end    
+    end
+    pr = zeros(lva,length(labs));
+    for i = 1:length(labs)
+        prior = length(founds{i})/lvt;
+        pr(:,i) = prior * gmmprob(mix{i},va');
+        %c.post{i} = gmmpost(mix{i},va');
+    end
+    [mm ib] = max(pr');
+    for i = 1:lva
+        c.classes{i} = labs{ib(i)};
+    end
+end
+if isempty(rlab)
+    c.correct = NaN;
+else
+    correct = 0;
+    for i = 1:lva
+        if isequal(c.classes{i},rlab{i})
+            correct = correct + 1;
+        end
+    end
+    c.correct = correct / lva;
+end        
+c = class(c,'mirclassify');
+
+
+function vt = integrate(vt,v,lvt,norml)
+vtl = [];
+for l = 1:lvt
+    vl = v{l};
+    if iscell(vl)
+        vl = vl{1};
+    end
+    if iscell(vl)
+        vl = vl{1};
+    end
+    if size(vl,2) > 1
+        mirerror('MIRCLASSIFY','The analytic features guiding the classification should not be frame-decomposed.');
+    end
+    vtl(:,l) = vl;
+end
+if norml
+    dnom = repmat(std(vtl,0,2),[1 size(vtl,2)]);
+    dnom = dnom + (dnom == 0);  % In order to avoid division by 0
+    vtl = (vtl - repmat(mean(vtl,2),[1 size(vtl,2)])) ./ dnom;
+end
+vt(end+1:end+size(vtl,1),:) = vtl;
+
+
+function [k,ncentres,covartype,kmiter,emiter,d,norml,mahl] = scanargin(v)
+k = 1;
+d = 0;
+i = 1;
+ncentres = 0;
+covartype = 'full';
+kmiter = 10;
+emiter = 100;
+norml = 1;
+mahl = 1;
+while i <= length(v)
+    arg = v{i};
+    if ischar(arg) && strcmpi(arg,'Nearest')
+        k = 1;
+        if length(v)>i && isnumeric(v{i+1})
+            i = i+1;
+            k = v{i};
+        end
+    elseif ischar(arg) && strcmpi(arg,'GMM')
+        k = 0;
+        ncentres = 1;
+        if length(v)>i
+            if isnumeric(v{i+1})
+                i = i+1;
+                ncentres = v{i};
+                if length(v)>i && ischar(v{i+1})
+                    i = i+1;
+                    covartype = v{i};
+                end
+            elseif ischar(v{i+1})
+                i = i+1;
+                covartype = v{i};
+                if length(v)>i && isnumeric(v{i+1})
+                    i = i+1;
+                    ncentres = v{i};
+                end
+            end                
+        end
+    elseif isnumeric(arg)
+        k = v{i};
+    else
+        error('ERROR IN MIRCLASSIFY: Syntax error. See help mirclassify.');
+    end    
+    i = i+1;
+end
+
+
+function y = distance(a,t,d,mahl)
+
+for i = 1:size(t,2)
+    if det(mahl) > 0  % more generally, uses cond
+        lham = inv(mahl);
+    else
+        lham = pinv(mahl);
+    end
+    y(i) = sqrt((a - t(:,i))'*lham*(a - t(:,i)));        
+end
+%y = sqrt(sum(repmat(a,[1,size(t,2)])-t,1).^2);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/combine.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,92 @@
+function c = combine(varargin)
+
+c = varargin{1};
+l = length(varargin);
+p = cell(1,l);
+ch = cell(1,l);
+d = cell(1,l);
+fp = cell(1,l);
+sr = cell(1,l);
+n = cell(1,l);
+la = cell(1,l);
+cl = cell(1,l);
+pp = cell(1,l);
+pm = cell(1,l);
+pv = cell(1,l);
+ppp = cell(1,l);
+ppv = cell(1,l);
+tp = cell(1,l);
+tv = cell(1,l);
+tpp = cell(1,l);
+tpv = cell(1,l);
+ap = cell(1,l);
+rp = cell(1,l);
+if isa(c,'temporal')
+    nb = cell(1,l);
+end
+if isa(c,'mirscalar')
+    m = cell(1,l);
+end
+if isa(c,'miremotion')
+    dd = cell(1,l);
+    cd = cell(1,l);
+end
+for i = 1:l
+    argin = varargin{i};
+    p{i} = getargin(argin,'Pos');
+    ch{i} = getargin(argin,'Channels');
+    d{i} = getargin(argin,'Data');
+    fp{i} = getargin(argin,'FramePos');
+    sr{i} = getargin(argin,'Sampling');
+    nb{i} = getargin(argin,'NBits');
+    n{i} = getargin(argin,'Name');
+    la{i} = getargin(argin,'Label');
+    cl{i} = getargin(argin,'Clusters');
+    pp{i} = getargin(argin,'PeakPos');
+    pm{i} = getargin(argin,'PeakMode');
+    pv{i} = getargin(argin,'PeakVal');
+    ppp{i} = getargin(argin,'PeakPrecisePos');
+    ppv{i} = getargin(argin,'PeakPreciseVal');
+    tp{i} = getargin(argin,'TrackPos');
+    tv{i} = getargin(argin,'TrackVal');
+    tpp{i} = getargin(argin,'TrackPrecisePos');
+    tpv{i} = getargin(argin,'TrackPreciseVal');
+    ap{i} = getargin(argin,'AttackPos');
+    rp{i} = getargin(argin,'ReleasePos');
+    if isa(c,'temporal')
+        ct = getargin(argin,'Centered');
+        nb{i} = getargin(argin,'NBits');
+    end
+    if isa(c,'mirscalar')
+        m{i} = getargin(argin,'Mode');
+    end
+    if isa(c,'miremotion')
+        dd{i} = getargin(argin,'DimData');
+        cd{i} = getargin(argin,'ClassData');
+    end
+end
+c = set(c,'Pos',p,'Data',d,'FramePos',fp,'Channels',ch,...
+          'Sampling',sr,'NBits',nb,'Name',n,'Label',la,...
+          'Clusters',cl,'PeakPos',pp,'PeakMode',pm,'PeakVal',pv,...
+          'PeakPrecisePos',ppp,'PeakPreciseVal',ppv,...
+          'TrackPos',tp,'TrackVal',tv,...
+          'TrackPrecisePos',tpp,'TrackPreciseVal',tpv,...
+          'AttackPos',ap,'ReleasePos',rp);
+if isa(c,'temporal')
+    c = set(c,'Centered',ct,'NBits',nb);
+end
+if isa(c,'mirscalar')
+    c = set(c,'Mode',m);
+end
+if isa(c,'miremotion')
+    c = set(c,'DimData',dd,'ClassData',cd);
+end
+      
+      
+function y = getargin(argin,field)
+yi = get(argin,field);
+if isempty(yi) || ischar(yi)
+    y = yi;
+else
+    y = yi{1};
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function display(d)
+% MIRDATA/DISPLAY display of a MIR data
+
+mirdisplay(d,inputname(1));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/exportation.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+function x = exportation(s)
+
+% EXPORTATION exports the peaks of a vectorial dimension
+
+v = get(s,'Data');
+n = get(s,'Name');
+pt = get(s,'PeakPosUnit');
+pp = get(s,'PeakPos');
+t = get(s,'Title');
+frames = 0;
+for i = 1:length(v)
+    if iscell(v{i})
+        v{i} = v{i}{1}; %% Segmented audio cannot be exported properly now.
+    end
+    if size(v{i},2) > 1
+        frames = 1;
+    end
+end
+for i = 1:length(v)
+    if size(v{i},4) == 1
+        vi = v{i};
+    else
+        lvi = size(v{i},1);
+        vi = [];
+        for j = 1:size(v{i},4)
+            vi(lvi*(j-1)+1:lvi*j,:,:) = v{i}(:,:,:,1);
+        end
+    end
+    if i == 1
+        x{1,1} = ['mean',t];
+        x{1,2} = ['std',t];
+    end
+    x{i+1,1} = mean(mean(vi));
+    x{i+1,2} = mean(std(vi));
+    pti = pt{i};
+    ppi = pp{i};
+    if not(isempty(ppi{1}))
+        if iscell(ppi{1})
+            ppi = ppi{1}; %% Segmented audio cannot be exported properly now.
+            pti = pti{1};
+            if iscell(pti{1})
+                pti = ppi;
+            end
+        end
+        for j = 1:size(vi,2)
+            pep = ppi{1,j,1};
+            if isempty(pep)
+                pet(j) = NaN;
+                pev(j) = NaN;
+            else
+                pet(j) = pti{1,j,1}(1);
+                if size(vi,3) > 1 && size(vi,1) == 1
+                    pev(j) = pep(1);
+                else
+                    pev(j) = vi(pep(1),j,1);
+                end
+            end
+        end
+        if frames
+            if i == 1
+                x{1,3} = ['meanpeakpos',t];
+                x{1,4} = ['stdpeakpos',t];
+                x{1,5} = ['meanpeakval',t];
+                x{1,6} = ['stdpeakval',t];
+            end
+            x{i+1,3} = mean(pet);
+            x{i+1,4} = std(pet);
+            x{i+1,5} = mean(pev);
+            x{i+1,6} = std(pev);
+        else
+            if i == 1
+                x{1,3} = ['peakpos',t];
+                x{1,4} = ['peakval',t];
+            end
+            x{i+1,3} = pet;
+            x{i+1,4} = pev;
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,226 @@
+function val = get(a, propName)
+% GET Get properties from the MIRdata object
+% and return the value
+
+switch propName
+    case 'Pos'
+        val = a.pos;
+    case 'Data'
+        val = a.data;
+    case 'Unit'
+        val = a.unit;
+    case 'FramePos'
+        val = a.framepos;
+    case 'Framed'
+        val = a.framed;
+    case 'Sampling'
+        val = a.sr;
+    case 'NBits'
+        val = a.nbits;
+    case 'Name'
+        val = a.name;
+    case 'Name2'
+        val = a.name2;
+    case 'Label'
+        val = a.label;
+    case 'Channels'
+        val = a.channels;
+    case 'Clusters'
+        val = a.clusters;
+    case 'MultiData'
+        val = a.multidata;
+    case 'PeakPos'
+        val = a.peak.pos;
+    case {'PeakPosUnit','AttackPosUnit','ReleasePosUnit'}
+        switch propName
+            case 'PeakPosUnit'
+                pp = a.peak.pos;
+            case 'AttackPosUnit'
+                pp = a.attack.pos;
+            case 'ReleasePosUnit'
+                pp = a.release.pos;
+        end
+        po = a.pos;
+        d = a.data;
+        val = cell(1,length(pp));
+        if isempty(d)
+            return
+        end
+        for k = 1:length(pp)
+            val{k} = cell(1,length(pp{k}));
+            if isempty(pp{k})
+                nseg = 0;
+            elseif iscell(pp{k}{1})
+                nseg = length(pp{k});
+            else
+                nseg = 1;
+            end
+            for i = 1:nseg
+                ppi = pp{k}{i};
+                if isempty(po)
+                    poi = (1:size(d{k}{i},2))';
+                elseif iscell(po{k})
+                    if isempty(po{k})
+                        poi = mean(a.framepos{k}{1})';
+                    elseif isempty(a.pos)
+                        poi = po{k}{i}';
+                    elseif ischar(po{k}{1})
+                        poi = (1:length(po{k}))';
+                    else
+                        poi = po{k}{i};
+                    end
+                else
+                    for j = 1:size(po,3)
+                        poi(:,:,j) = po{k}(:,:,j)';
+                    end
+                end
+                val{k}{i} = cell(size(ppi));
+                for h = 1:size(ppi,3)
+                    for j = 1:size(ppi,2)
+                        if size(poi,3) > 1 && size(poi,1) == 1
+                            val{k}{i}{1,j,h} = ppi{1,j,h};
+                        else
+                            val{k}{i}{1,j,h} = poi(ppi{1,j,h},1);
+                        end
+                    end
+                end
+            end
+        end
+    case 'PeakPrecisePos'
+        val = a.peak.precisepos;
+    case 'PeakVal'
+        val = a.peak.val;
+    case 'PeakPreciseVal'
+        val = a.peak.preciseval;
+    case 'PeakMaxVal'
+        pv = a.peak.val;
+        val = cell(1,length(pv));
+        for h = 1:length(pv)
+            val{h} = cell(1,length(pv{h}));
+            for i = 1:length(pv{h})
+                pvi = pv{h}{i};
+                %if iscell(pvi)
+                %    pvi = pvi{1}; % Segmented data not taken into consideration yet.
+                %end
+                val{h}{i} = zeros(1,length(pvi));
+                for j = 1:length(pvi)
+                    if isempty(pvi{j})
+                        val{h}{i}(1,j) = NaN;
+                    else
+                        val{h}{i}(1,j) = max(pvi{j});
+                    end
+                end
+            end
+        end
+    case 'PeakMode'
+        val = a.peak.mode;
+    case 'AttackPos'
+        if isempty(a.attack)
+            val = [];
+        else
+            val = a.attack.pos;
+        end
+    case 'ReleasePos'
+        if isempty(a.release)
+            val = [];
+        else
+            val = a.release.pos;
+        end
+    case 'TrackPos'
+        if isempty(a.track)
+            val = [];
+        else
+            val = a.track.pos;
+        end
+    case 'TrackPosUnit'
+        if isempty(a.track)
+            val = [];
+        else
+            pp = a.track.pos;
+            po = a.pos;
+            d = a.data;
+            val = cell(1,length(pp));
+            for k = 1:length(pp)
+                val{k} = cell(1,length(pp{k}));
+                if isempty(pp{k})
+                    nseg = 0;
+                elseif iscell(pp{k}{1})
+                    nseg = length(pp{k});
+                else
+                    nseg = 1;
+                end
+                for i = 1:nseg
+                    ppi = pp{k}{i}{1};
+                    if isempty(po)
+                        poi = (1:size(d{k}{i},2))';
+                    elseif iscell(po{k})
+                        if isempty(po{k})
+                            poi = mean(a.framepos{k}{1})';
+                        elseif isempty(a.pos)
+                            poi = po{k}{i}';
+                        elseif ischar(po{k}{1})
+                            poi = (1:length(po{k}))';
+                        else
+                            poi = po{k}{i};
+                        end
+                    else
+                        for j = 1:size(po,3)
+                            poi(:,:,j) = po{k}(:,:,j)';
+                        end
+                    end
+                    val{k}{i}{1} = zeros(size(ppi));
+                    if size(poi,3) > 1 && size(poi,1) == 1
+                        val{k}{i}{1} = ppi;
+                    else
+                        for h = 1:size(ppi,2)
+                            for j = 1:size(ppi,1)
+                                if ppi(j,h)
+                                    val{k}{i}{1}(j,h) = poi(ppi(j,h),1);
+                                else
+                                    val{k}{i}{1}(j,h) = 0;
+                                end
+                            end
+                        end
+                    end
+                end
+            end
+        end
+    case 'TrackVal'
+        if isempty(a.track)
+            val = [];
+        else
+            val = a.track.val;
+        end
+    case 'TrackPrecisePos'
+        if isempty(a.track)
+            val = [];
+        else
+            val = a.track.precisepos;
+        end
+    case 'TrackPreciseVal'
+        if isempty(a.track)
+            val = [];
+        else
+            val = a.track.preciseval;
+        end
+    case 'Title'
+        val = a.title;
+    case 'Abs'
+        val = a.abs;
+    case 'Ord'
+        val = a.ord;
+    case 'InterChunk'
+        val = a.interchunk;
+    case 'TmpIdx'
+        val = a.tmpidx;       
+    case 'AcrossChunks'
+        val = a.acrosschunks;
+    case 'Interpolable'
+        val = a.interpolable;
+    case 'TmpFile'
+        val = a.tmpfile;
+    case 'Index'
+        val = a.index;
+    otherwise
+        error([propName,' is not a valid MIRdata property'])
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/gettmp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function [tmp y] = gettmp(x,y)
+
+idx = get(x,'TmpIdx')+1;
+tmps = get(x,'InterChunk');
+if idx > length(tmps)
+    tmp = [];
+else
+    tmp = tmps{idx};
+end
+if nargin<2
+    y = x;
+end
+y = set(y,'InterChunk',tmps,'TmpIdx',idx);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/intersect.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+function i = intersect(a,b,thr)
+
+if nargin<3
+    thr = .01;
+end
+
+va = get(a,'PeakVal');
+pa = get(a,'PeakPos');
+ma = get(a,'PeakMode');
+if isa(a,'mirscalar')
+    xa = get(a,'FramePos');
+else
+    xa = get(a,'Pos');
+end
+vb = get(b,'PeakVal');
+pb = get(b,'PeakPos');
+mb = get(b,'PeakMode');
+if isa(b,'mirscalar')
+    xb = get(b,'FramePos');
+else
+    xb = get(b,'Pos');
+end
+
+for j = 1:length(va)
+    for k = 1:length(va{j})
+        [nl nc np] = size(va{j}{k});
+        for c = 1:nc
+            for p = 1:np
+                [pacp,ix] = sort(pa{j}{k}{1,c,p});
+                vacp = va{j}{k}{1,c,p}(ix);
+                macp = ma{j}{k}{1,c,p}(ix);
+                [pbcp,ix] = sort(pb{j}{k}{1,c,p});
+                xajk = xa{j}{k};
+                xbjk = xb{j}{k};
+                if isa(a,'mirscalar')
+                    xajk = mean(xajk);
+                end
+                if isa(b,'mirscalar')
+                    xbjk = mean(xbjk);
+                end
+                ia = 1;
+                ib = 1;
+                ii = 1;
+                while ia <= length(pacp) && ib <= length(pbcp)
+                    if abs(xajk(pacp(ia))-xbjk(pbcp(ib)))<thr
+                        picp(ii) = pacp(ia);
+                        vicp(ii) = vacp(ia);
+                        micp(ii) = macp(ia);
+                        ia = ia+1;
+                        ib = ib+1;
+                        ii = ii+1;
+                    elseif xajk(pacp(ia))<xbjk(pbcp(ib))
+                        ia = ia+1;
+                    else
+                        ib = ib+1;
+                    end
+                end
+            pa{j}{k}{1,c,p} = picp;
+            va{j}{k}{1,c,p} = vicp;
+            ma{j}{k}{1,c,p} = micp;
+            end
+        end
+    end
+end
+
+i = set(a,'PeakPos',pa,'PeakVal',va,'PeakMode',ma);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/isframed.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function b = isframed(d)
+
+dat = get(d,'Data');
+b = 0;
+i = 0;
+while not(b) && i < length(dat)
+    i = i+1;
+    j = 0;
+    while not(b) && j < length(dat{i})
+        j = j+1;
+        if size(dat{i}{j},2) > 1
+            b = 1;
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/log.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function y = log(x)
+
+d = get(x,'Data');
+e = cell(1,length(d));
+l = get(x,'Name');
+m = cell(1,length(l));
+    
+for i = 1:length(d)
+    e{i} = cell(1,length(d{i}));
+    for j = 1:length(d{i})
+        e{i}{j} = log(d{i}{j});
+    end
+    m{i} = ['log_' l{i}];
+end
+y = set(x,'Data',e,'Name',m);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/mirdata.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function d = mirdata(orig,varargin)
+%   d = mirdata(x) creates a MIR object.
+
+if nargin > 0 && isa(orig,'mirdata')
+    d.pos = orig.pos;
+    d.data = orig.data;
+    d.unit = orig.unit;
+    d.framepos = orig.framepos;
+    d.framed = orig.framed;
+    d.sr = orig.sr;
+    d.nbits = orig.nbits;
+    d.name = orig.name;
+    d.name2 = orig.name2;
+    d.label = orig.label;
+    d.channels = orig.channels;
+    d.clusters = orig.clusters;
+    d.multidata = orig.multidata;
+    d.peak = orig.peak;
+    d.attack = orig.attack;
+    d.release = orig.release;
+    d.track = orig.track;
+    d.title = orig.title;
+    d.abs = orig.abs;
+    d.ord = orig.ord;
+    d.interchunk = orig.interchunk;
+    d.tmpidx = orig.tmpidx;
+    d.acrosschunks = orig.acrosschunks;
+    d.interpolable = orig.interpolable;
+    d.tmpfile = orig.tmpfile;
+    d.index = orig.index;
+else
+    d.pos = {};
+    d.data = {};
+    d.unit = '';
+    d.framepos = {};
+    d.framed = 0;
+    d.sr = {};
+    d.nbits = {};
+    d.name = {};
+    d.name2 = {};
+    d.label = {};
+    d.channels = [];
+    d.clusters = {};
+    d.multidata = [];
+    d.peak.pos = {};
+    d.peak.val = {};
+    d.peak.precisepos = {};
+    d.peak.preciseval = {};
+    d.peak.mode = {};
+    d.attack = {};
+    d.release = {};
+    d.track = {};
+    d.title = 'Unspecified data';
+    d.abs = 'Unspecified abscissa';
+    d.ord = 'Unspecified ordinate';
+    d.interchunk = [];
+    d.tmpidx = 0;
+    d.acrosschunks = [];
+    d.interpolable = 1;  % If the abscissae axis is non-numeric (0), 
+                         % then peak picking has to be done without interpolation.
+    d.tmpfile = [];
+    d.index = NaN;
+end
+d = class(d,'mirdata');
+d = set(d,varargin{:});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/mirdisplay.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+function mirdisplay(d,varargin)
+% MIRDATA/DISPLAY display of a MIR data
+
+disp(' ');
+v = d.data;
+f = d.sr;
+n = d.name;
+l = d.label;
+p = d.pos;
+fp = d.framepos;
+pp = d.peak.pos;
+pm = d.peak.mode;
+ld = length(v);
+if isempty(d.attack)
+    ap = cell(ld);
+else
+    ap = d.attack.pos;
+end
+if isempty(d.release)
+    rp = cell(ld);
+else
+    rp = d.release.pos;
+end
+if isempty(d.track)
+    tp = cell(ld);
+    tv = cell(ld);
+else
+    tp = d.track.pos;
+    tv = d.track.val;
+end
+if ld == 0
+    disp('No data.');
+else
+    for i = 1:length(v)
+        if nargin < 2
+            va = inputname(1);
+        else
+            va = varargin{1};
+        end
+        if isempty(va)
+            va = 'ans';
+        end
+        if length(v)>1
+            va = [va,'(',num2str(i),')'];
+        end
+        if not(isempty(l)) && iscell(l) && not(isempty(l{i}))
+            lab = ' with label ';
+            if isnumeric(l{i})
+                lab = [lab,num2str(l{i})];
+            else
+                lab = [lab,l{i}];
+            end
+        else
+            lab = '';
+        end
+        disp([va,' is the ',d.title,' related to ',n{i},lab,...
+            ', of sampling rate ',num2str(f{i}),' Hz.'])
+        if size(v{i},2) == 0
+            if isempty(d.init)
+                disp('It does not contain any data.');
+            else
+                disp('It has not been loaded yet.');
+            end
+        else
+            if iscell(d.channels)
+                cha = d.channels{i};
+            else
+                cha = [];
+            end
+            flag = displot(p{i},v{i},d.abs,d.ord,d.title,fp{i},pp{i},tp{i},tv{i},...
+                cha,d.multidata,pm{i},ap{i},rp{i},d.clusters{i});
+            if flag
+                fig = get(0,'CurrentFigure');
+                disp(['Its content is displayed in Figure ',num2str(fig),'.']);
+            else
+                disp('It does not contain any data.');
+            end
+        end
+    end
+end
+disp(' ');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/mpower.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function c = mpower(a,b)
+
+d = get(a,'Data');
+f = cell(1,length(d));
+n = get(a,'Name');
+t = get(a,'Title');
+if not(isa(a,'miraudio'))
+    if isa(b,'mirdata')
+        t = [t,' ^ ',get(b,'Title')];
+    else
+        t = [t,' ^ ',num2str(b)];
+    end
+end
+    
+if isa(b,'mirdata')
+    e = get(b,'Data');
+    m = get(b,'Name');
+else
+    e = {{b}};
+    m = {num2str(b)};
+end
+    
+for i = 1:length(d)
+    f{i} = cell(1,length(d{i}));
+    for j = 1:length(d{i})
+        ld = size(d{i}{j},1);
+        le = size(e{i}{j},1);
+        if ld > le
+            f{i}{j} = d{i}{j} .^ [e{i}{j};zeros(ld-le,size(e,2),size(e,3))];
+        else
+            f{i}{j} = [d{i}{j};zeros(le-ld,size(d,2),size(d,3))] .^ e{i}{j};
+        end
+    end
+    if isa(a,'miraudio')
+        n{i} = [n{i} '^' m{i}];
+    end
+end
+c = set(a,'Data',f,'Name',n,'Title',t);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/mtimes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function c = mtimes(a,b)
+
+d = get(a,'Data');
+f = cell(1,length(d));
+n = get(a,'Name');
+t = get(a,'Title');
+if not(isa(a,'miraudio'))
+    if isa(b,'mirdata')
+        t = [t,' * ',get(b,'Title')];
+    else
+        t = [t,' * ',num2str(b)];
+    end
+end
+
+if isa(b,'mirdata')
+    e = get(b,'Data');
+    m = get(b,'Name');
+else
+    e = cell(1,length(d));
+    for i = 1:length(d)
+        e{i} = {b};
+    end
+    m = {num2str(b)};
+end
+    
+for i = 1:length(d)
+    f{i} = cell(1,length(d{i}));
+    for j = 1:length(d{i})
+        ld = size(d{i}{j},1);
+        le = size(e{i}{j},1);
+        if ld > le
+            f{i}{j} = d{i}{j} .* [e{i}{j};zeros(ld-le,size(e,2),size(e,3))];
+        elseif ld < le
+            f{i}{j} = [d{i}{j};zeros(le-ld,size(d,2),size(d,3))] .* e{i}{j};
+        else
+            f{i}{j} = d{i}{j} .* e{i}{j};
+        end
+    end
+    if isa(a,'miraudio')
+        n{i} = [n{i} '*' m{i}];
+    end
+end
+c = set(a,'Data',f,'Name',n,'Title',t);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/plus.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function c = plus(a,b)
+
+d = get(a,'Data');
+f = cell(1,length(d));
+n = get(a,'Name');
+t = get(a,'Title');
+
+if isa(b,'mirdata')
+    e = get(b,'Data');
+    m = get(b,'Name');
+    u = get(b,'Title');
+    if not(isa(a,'miraudio'))
+       t = [t,' + ',get(b,'Title')];
+    end
+else
+    e = {{b}};
+    m = {num2str(b)};
+    t = [t,' + ',num2str(b)];
+end
+    
+for i = 1:length(d)
+    f{i} = cell(1,length(d{i}));
+    for j = 1:length(d{i})
+        ld = size(d{i}{j},1);
+        le = size(e{i}{j},1);
+        if ld > le
+            f{i}{j} = d{i}{j} + [e{i}{j};zeros(ld-le,size(e,2),size(e,3))];
+        elseif ld < le
+            f{i}{j} = [d{i}{j};zeros(le-ld,size(d,2),size(d,3))] + e{i}{j};
+        else
+            f{i}{j} = d{i}{j} + e{i}{j};
+        end
+    end
+    if isa(a,'miraudio')
+        n{i} = [n{i} '+' m{i}];
+    end
+end
+c = set(a,'Data',f,'Name',n,'Title',t);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+function a = set(a,varargin)
+% SET Set properties for the MIRdata object
+% and return the updated object
+
+propertyArgIn = varargin;
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Pos'
+           a.pos = val;
+       case {'Data','ChunkData'}
+           if strcmp(prop,'ChunkData')
+               val = {{val}};
+           end
+           a.data = val;
+       case 'Unit'
+           a.unit = val;
+       case 'FramePos'
+           a.framepos = val;
+       case 'Sampling'
+           a.sr = val;
+       case 'NBits'
+           a.nbits = val;
+       case 'Name'
+           a.name = val;
+       case 'Name2'
+           a.name2 = val;
+       case 'Label'
+           a.label = val;
+       case 'Channels'
+           a.channels = val;
+       case 'Clusters'
+           a.clusters = val;
+       case 'MultiData'
+           a.multidata = val;
+       case 'Title'
+           a.title = val;
+       case 'Abs'
+           a.abs = val;
+       case 'Ord'
+           a.ord = val;
+       case 'PeakPos'
+           a.peak.pos = val;
+       case 'PeakVal'
+           a.peak.val = val;
+       case 'PeakPrecisePos'
+           a.peak.precisepos = val;
+       case 'PeakPreciseVal'
+           a.peak.preciseval = val;
+       case 'PeakMode'
+           a.peak.mode = val;
+       case 'AttackPos'
+           a.attack.pos = val;
+       case 'ReleasePos'
+           a.release.pos = val;
+       case 'TrackPos'
+           a.track.pos = val;
+       case 'TrackVal'
+           a.track.val = val;
+       case 'TrackPrecisePos'
+           a.track.precisepos = val;
+       case 'TrackPreciseVal'
+           a.track.preciseval = val;
+       case 'InterChunk'
+           a.interchunk = val;
+       case 'TmpIdx'
+           a.tmpidx = val;
+       case 'AcrossChunks'
+           a.acrosschunks = val;
+       case 'Interpolable'
+           a.interpolable = val;
+       case 'TmpFile'
+           a.tmpfile = val;
+       case 'Index'
+           a.index = val;
+       otherwise
+           error(['Unknown MIRdata property: ' prop])
+   end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdata/settmp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function x = settmp(x,tmp)
+
+idx = get(x,'TmpIdx');
+tmps = get(x,'InterChunk');
+tmps{idx} = tmp;
+x = set(x,'InterChunk',tmps);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function display(d)
+% MIRDESIGN/DISPLAY display of a MIR design
+
+disp(' ');
+va = inputname(1);
+if isempty(va)
+    va = 'ans';
+end
+disp([va,' is the following non-evaluated MIRtoolbox command:']);
+method = d.method
+option = d.option;
+if not(isempty(option))
+    option
+end
+postoption = d.postoption;
+if not(isempty(postoption))
+    postoption
+end
+argument = d.argin;
+if not(ischar(d.argin))
+    disp('***Argument:')
+    argument
+end
+disp(' ');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/evaleach.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,986 @@
+function [y d2] = evaleach(d,single,name)
+% Top-down traversal of the design flowchart, at the beginning of the
+% evaluation phase.
+% Called by mirfunction, mireval, mirframe and mirsegment.
+% This is during that traversal that we check whether a chunk decomposition
+% needs to be performed or not, and carry out that chunk decomposition.
+
+if nargin<3 || isempty(name)
+    if not(ischar(d.method))
+        name = func2str(d.method);
+    end
+end
+if nargin<2
+    single = 0;
+end
+
+CHUNKLIM = mirchunklim;
+f = d.file;
+fr = d.frame;
+frnochunk = isfield(d.frame,'dontchunk');
+frchunkbefore = isfield(d.frame,'chunkbefore');
+sg = d.segment;
+sr = d.sampling;
+sr2 = d.resampling;
+w = d.size;
+lsz = w(2)-w(1)+1;    
+len = lsz/sr;
+if ischar(sg)
+    error('ERROR in MIREVAL: mirsegment of design object accepts only array of numbers as second argument.');
+end
+if not(isempty(sg))
+    over = find(sg(2,:) > len);
+    if not(isempty(over))
+        sg = sg(:,1:over-1);
+    end
+end
+a = d.argin;
+ch = d.chunk;
+chan = d.channel;
+specif = d.specif;
+if isaverage(specif)
+    specif.eachchunk = 'Normal';
+end
+
+if ischar(a)
+    % The top-down traversal of the design flowchart now reaches the lowest
+    % layer, i.e., audio file loading.
+    % Now the actual evaluation will be carried out bottom-up.
+    
+    if isempty(ch)
+        % No chunk decomposition
+        y = miraudio(f,'Now',[w(:)' 0 chan]);
+    else
+        % Chunk decomposition
+        y = miraudio(f,'Now',[ch(1),ch(2) 0 chan]);
+    end
+    if not(isempty(d.postoption)) && d.postoption.mono
+        y = miraudio(y,'Mono',1);
+    end
+    y = set(y,'AcrossChunks',get(d,'AcrossChunks'));
+    d2 = d;
+    
+elseif d.chunkdecomposed && isempty(d.tmpfile)
+    % Already in a chunk decomposition process
+    
+    [y d2] = evalnow(d);  
+    
+elseif isempty(fr) || frnochunk || not(isempty(sg)) %% WHAT ABOUT CHANNELS?
+    % No frame or segment decomposition in the design to evaluate
+    % (Or particular frame decomposition, where chunks are not distributed to children (frnochunk).)
+        
+    if not(isfield(specif,'eachchunk')) ...
+            || d.nochunk ...
+            || (not(isempty(single)) && isnumeric(single) && single > 1 ...
+                && isfield(specif,'combinechunk') ...
+                && iscell(specif.combinechunk))
+        chunks = [];
+    elseif not(isempty(sg))
+        meth = 'Segment ';
+        if size(sg,1) == 1
+            chunks = floor(sg(1:end-1)*sr)+1;
+            chunks(2,:) = min( floor(sg(2:end)*sr)-1,lsz-1)+1;
+        else
+            chunks = floor(sg*sr);
+            chunks(1,:) = chunks(1,:)+1;
+        end
+    else
+        meth = 'Chunk ';
+        if isempty(fr)
+            if lsz > CHUNKLIM
+            % The required memory exceed the max memory threshold.
+                nch = ceil(lsz/CHUNKLIM); 
+            %%% TAKE INTO CONSIDERATION NUMBER OF CHANNELS; ETC... 
+                chunks = max(0,lsz-CHUNKLIM*(nch:-1:1))+w(1);
+                chunks(2,:) = lsz-CHUNKLIM*(nch-1:-1:0)+w(1)-1;
+            else
+                chunks = [];
+            end
+        else
+            chunks = compute_frames(fr,sr,sr2,w,lsz,CHUNKLIM,d.overlap);
+        end
+    end
+    
+    if not(isempty(chunks))
+        % The chunk decomposition is performed.
+        nch = size(chunks,2);
+        d = callbeforechunk(d,d,w,lsz); % Some optional initialisation
+        tmp = [];
+        if mirwaitbar
+            h = waitbar(0,['Computing ' name]);
+        else
+            h = 0;
+        end
+        if not(isempty(d.tmpfile)) && d.tmpfile.fid == 0
+            % When applicable, a new temporary file is created.
+            d.tmpfile.fid = fopen('tmpfile.mirtoolbox','w');
+        end
+        tmpfile = [];
+        if not(d.ascending)
+            chunks = fliplr(chunks);
+        end
+
+        afterpostoption = d.postoption; % Used only when:
+                        % - eachchunk is set to 'Normal',
+                        % - combinechunk is not set to 'Average', and
+                        % - no afterchunk field has been specified.
+                        % afterpostoption will be used for the final call
+                        % to the method after the chunk decomposition.
+        method = d.method;
+        if ischar(specif.eachchunk) && strcmpi(specif.eachchunk,'Normal')
+            if not(isempty(d.postoption))
+                pof = fieldnames(d.postoption);
+                for o = 1:length(pof)
+                    if isfield(specif.option.(pof{o}),'chunkcombine')
+                        afterpostoption = rmfield(afterpostoption,pof{o});
+                    else
+                        d.postoption = rmfield(d.postoption,pof{o});
+                    end
+                end
+            end
+        else
+            method = specif.eachchunk;
+        end
+
+        d2 = d;
+        d2.method = method;
+        y = {};
+        for i = 1:size(chunks,2)
+            disp([meth,num2str(i),'/',num2str(nch),'...'])
+            d2 = set(d2,'Chunk',[chunks(1,i) chunks(2,i) (i == size(chunks,2))]);
+            
+            if not(ischar(specif.eachchunk) && ...
+                   strcmpi(specif.eachchunk,'Normal'))
+               if frnochunk
+                   d2.postoption = 0;
+               else
+                    diffchunks = diff(chunks); % Usual chunk size
+                    d2.postoption = max(diffchunks) -  diffchunks(i);
+                        % Reduction of the current chunk size to be taken into
+                        % consideration in mirspectrum, for instance, using
+                        % zeropadding
+               end
+            end
+            
+            d2 = set(d2,'InterChunk',tmp);
+            d2.chunkdecomposed = 1;
+
+            [ss d3] = evalnow(d2);
+            
+            if iscell(ss) && not(isempty(ss))
+                tmp = get(ss{1},'InterChunk');
+            elseif isstruct(ss)
+                tmp = [];
+            else
+                tmp = get(ss,'InterChunk');
+            end
+            
+            % d2 is like d3 except that its argument is now evaluated.
+            d3.postoption = d.postoption; % Pas joli joli
+            d3.method = method;
+            d2 = d3; % This new argument is transfered to d
+
+            y = combinechunk_noframe(y,ss,sg,i,d2,chunks,single);
+
+            clear ss
+            if h
+                if not(d.ascending)
+                    close(h)
+                    h = waitbar((chunks(1,i)-chunks(1,end))/chunks(2,1),...
+                        ['Computing ' func2str(d.method) ' (backward)']);
+                else
+                    waitbar((chunks(2,i)-chunks(1))/chunks(end),h)
+                end
+            end
+        end
+        
+        y = afterchunk_noframe(y,lsz,d,afterpostoption,d2);
+        % Final operations to be executed after the chunk decomposition
+                
+        if isa(d,'mirstruct') && ...
+                (isempty(d.frame) || isfield(d.frame,'dontchunk'))
+            y = evalbranches(d,y);
+        end
+        if h
+            close(h)
+        end
+        drawnow
+
+    else 
+        % No chunk decomposition
+        [y d2] = evalnow(d);
+        if isa(d,'mirstruct') && isfield(d.frame,'dontchunk')
+            y = evalbranches(d,y);
+        end
+    end    
+elseif d.nochunk
+    [y d2] = evalnow(d);
+else
+    % Frame decomposition in the design to be evaluated.
+    chunks = compute_frames(fr,sr,sr2,w,lsz,CHUNKLIM,d.overlap);
+    if size(chunks,2)>1
+        % The chunk decomposition is performed.
+        if mirwaitbar
+            h = waitbar(0,['Computing ' name]);
+        else
+            h = 0;
+        end
+        inter = [];
+        d = set(d,'FrameDecomposition',1);
+        d2 = d;
+        nch = size(chunks,2);
+        y = {};
+        
+        if frchunkbefore
+            d2after = d2;
+            d2.method = d2.argin.method;
+            d2.option = d2.argin.option;
+            d2.postoption = d2.argin.postoption;
+            d2.argin = d2.argin.argin;
+        end
+        
+        for fri = 1:nch     % For each chunk...
+            disp(['Chunk ',num2str(fri),'/',num2str(nch),'...'])
+            d2 = set(d2,'Chunk',chunks(:,fri)');
+            d2 = set(d2,'InterChunk',inter);
+            %d2.postoption = [];
+            [res d2] = evalnow(d2);
+            if not(isempty(res))
+                if iscell(res)
+                    inter = get(res{1},'InterChunk');
+                elseif not(isstruct(res))
+                    inter = get(res,'InterChunk');
+                    res = {res};
+                end
+            end
+            
+            y = combinechunk_frame(y,res,d2,fri);
+            if h
+                waitbar(chunks(2,fri)/chunks(end),h);
+            end
+        end
+        
+        if frchunkbefore
+            y = d2after.method(y,d2after.option,d2after.postoption);
+        end
+        
+        if isa(d,'mirstruct') && get(d,'Stat') 
+            y = mirstat(y);
+        end
+        if h
+            close(h)
+        end
+    else
+        % No chunk decomposition
+        [y d2] = evalnow(d);
+    end
+end
+
+ 
+if iscell(y)
+    for i = 1:length(y)
+        if not(isempty(y{i}) || isstruct(y{i}))
+            if iscell(y{i})
+                for j = 1:length(y{i})
+                    y{i}{j} = set(y{i}{j},'InterChunk',[]);
+                end
+            else
+                y{i} = set(y{i},'InterChunk',[]);
+            end
+        end
+    end
+end
+
+
+function chunks = compute_frames(fr,sr,sr2,w,lsz,CHUNKLIM,frov)
+if strcmpi(fr.length.unit,'s')
+    fl = fr.length.val*sr;
+    fl2 = fr.length.val*sr2;
+elseif strcmpi(fr.length.unit,'sp')
+    fl = fr.length.val;
+    fl2 = fl;
+end
+if strcmpi(fr.hop.unit,'/1')
+    h = fr.hop.val*fl;
+    h2 = fr.hop.val*fl2;
+elseif strcmpi(fr.hop.unit,'%')
+    h = fr.hop.val*fl*.01;
+    h2 = fr.hop.val*fl2*.01;
+elseif strcmpi(fr.hop.unit,'s')
+    h = fr.hop.val*sr;
+    h2 = fr.hop.val*sr2;
+elseif strcmpi(fr.hop.unit,'sp')
+    h = fr.hop.val;
+    h2 = fr.hop.val;
+elseif strcmpi(fr.hop.unit,'Hz')
+    h = sr/fr.hop.val;
+    h2 = sr2/fr.hop.val;
+end
+n = floor((lsz-fl)/h)+1;   % Number of frames
+if n < 1
+    %warning('WARNING IN MIRFRAME: Frame length longer than total sequence size. No frame decomposition.');
+    fp = w;
+    fp2 = (w-1)/sr*sr2+1;
+else
+    st = floor(((1:n)-1)*h)+w(1);
+    st2 = floor(((1:n)-1)*h2)+w(1);
+    fp = [st; floor(st+fl-1)];
+    fp(:,fp(2,:)>w(2)) = [];
+    fp2 = [st2; floor(st2+fl2-1)];
+    fp2(:,fp2(2,:)>(w(2)-w(1))/sr*sr2+w(2)) = [];
+end
+fpe = (fp2-1)/sr2-(fp-1)/sr; %Rounding error if resampling
+fpsz = (fp(2,1)-fp(1,1)) * n;      % Total number of samples
+fpsz2 = (fp2(2,1)-fp2(1,1)) * n;      % Total number of samples
+if max(fpsz,fpsz2) > CHUNKLIM
+    % The required memory exceed the max memory threshold.
+    nfr = size(fp,2);                     % Total number of frames
+    frch = max(ceil(CHUNKLIM/(fp(2,1)-fp(1,1))),2); % Number of frames per chunk
+    frch = max(frch,frov*2);
+    [unused cut] = min(abs(fpe(1,frch:-1:1)));
+    %frch = frch - cut;
+        % this correspond to the  frame with less rounding error
+    nch = ceil((nfr-frch)/(frch-frov))+1; % Number of chunks
+    chbeg = (frch-frov)*(0:nch-1)+1;    % First frame in the chunk
+    chend = (frch-frov)*(0:nch-1)+frch; % Last frame in the chunk
+    chend = min(chend,nfr);
+    if frov > 1
+        chbeg = chend-frch+1;
+    end
+    chunks = [fp(1,chbeg) ; fp(2,chend)+1]; % After resampling, one sample may be missing, leading to a complete frame drop.
+    chunks(end) = min(chunks(end),fp(end)); % Last chunk should not extend beyond audio size.
+else
+    chunks = [];
+end
+
+
+function res = combinechunk_frame(old,new,d2,fri)
+if isempty(mirgetdata(new))
+    res = old;
+    return
+end
+if isstruct(old)
+    f = fields(old);
+    for i = 1:length(f)
+        res.(f{i}) = combinechunk_frame(old.(f{i}),new.(f{i}),d2,fri);
+    end
+    return
+end
+if fri == 1
+    res = new;
+elseif isfield(d2,'specif') && isfield(d2.specif,'combineframes')
+    res = d2.specif.combineframes(old{1},new{1});
+else
+    res = combineframes(old,new);
+end
+
+
+function res = combinechunk_noframe(old,new,sg,i,d2,chunks,single)
+if isempty(new)
+    res = {};
+    return
+end
+if isempty(mirgetdata(new))
+    res = old;
+    return
+end
+if not(iscell(new))
+    new = {new};
+end
+if not(iscell(old))
+    old = {old};
+end
+if not(isempty(old)) && isstruct(old{1})
+    f = fields(old{1});
+    for j = 1:length(f)
+        index.type = '.';
+        index.subs = f{j};
+        res.(f{j}) = combinechunk_noframe(old{1}.(f{j}),new{1}.(f{j}),...
+                                    sg,i,subsref(d2,index),chunks,single);
+    end
+    return
+end
+if ischar(single) && not(isempty(old))
+    old = {old{1}};
+end
+if isempty(sg)
+    if isaverage(d2.specif)
+        % Measure total size for later averaging
+        if iscell(new)
+            new1 = new{1};
+        else
+            new1 = new;
+        end
+        dnew = get(new1,'Data');
+        dnew = mircompute(@multweight,dnew,chunks(2,i)-chunks(1,i)+1);
+        if iscell(new)
+            new{1} = set(new1,'Data',dnew);
+        else
+            new = set(new1,'Data',dnew);
+        end
+    end
+    %tmp = get(new{1},'InterChunk');
+    if not(isempty(d2.tmpfile)) && d2.tmpfile.fid > 0
+        % If temporary file is used, chunk results are written
+        % in the file
+        if i < size(chunks,2)
+            ds = get(new{1},'Data');
+            ps = get(new{1},'Pos');
+           % ftell(d2.tmpfile.fid)
+            count = fwrite(d2.tmpfile.fid,ds{1}{1},'double');
+            count = fwrite(d2.tmpfile.fid,ps{1}{1},'double');
+           % ftell(d2.tmpfile.fid)
+            clear ds ps
+        end
+        res = new;
+    else
+        % Else, chunk results are directly combined in active
+        % memory
+        if i == 1
+            res = new;
+        else
+            if isfield(d2.specif,'combinechunk')
+                if not(iscell(d2.specif.combinechunk))
+                    method = {d2.specif.combinechunk};
+                else
+                    method = d2.specif.combinechunk;
+                end
+                for z = 1:length(old)
+                    if isframed(old{z})
+                        res(z) = combineframes(old{z},new{z});
+                    elseif ischar(method{z})
+                        if strcmpi(method{z},'Concat')
+                            res{z} = concatchunk(old{z},new{z},d2.ascending);
+                        elseif strcmpi(method{z},'Average')
+                            res{z} = sumchunk(old{z},new{z});
+                        else
+                            error(['SYNTAX ERROR: ',...
+                                method{z},...
+                        ' is not a known keyword for combinechunk.']);
+                        end
+                    else
+                        res{z} = method{z}(old{z},new{z});
+                    end
+                end
+            else
+                for z = 1:length(old)
+                    if isframed(old{z})
+                        res(z) = combineframes(old{z},new{z});
+                    else
+                        mirerror('MIREVAL','Chunk recombination in non-framed mode is not available for all features yet. Please turn off the chunk decomposition.');
+                    end
+                end
+            end
+        end
+    end
+else
+    if i == 1
+        res = new;
+    else
+        for z = 1:length(old)
+            res{z} = combinesegment(old{z},new{z});
+        end
+    end
+end
+
+
+function res = afterchunk_noframe(input,lsz,d,afterpostoption,d2)
+if isstruct(input)
+    %mirerror('MIREVAL','Sorry, mirstruct only accepts frame-decomposed objects as ''tmp'' fields.');
+    res = input;
+    %f = fields(input);
+    %for i = 1:length(f)
+    %    index.type = '.';
+    %    index.subs = f{i};
+    %    res.(f{i}) = afterchunk_noframe(input.(f{i}),lsz,...
+    %                  subsref(d,index),afterpostoption,subsref(d2,index));
+    %end
+    return
+end
+if isfield(d2.specif,'afterchunk')
+    res{1} = d2.specif.afterchunk(input{1},lsz,d.postoption);
+elseif isaverage(d2.specif)
+    res{1} = divideweightchunk(input{1},lsz);
+elseif not(isempty(afterpostoption)) && isempty(d2.tmpfile)
+    res{1} = d.method(input{1},[],afterpostoption);
+else
+    res = input;
+end
+if not(isempty(d2.tmpfile))
+    adr = ftell(d2.tmpfile.fid);
+    fclose(d2.tmpfile.fid);
+    ytmpfile.fid = fopen('tmpfile.mirtoolbox');
+    fseek(ytmpfile.fid,adr,'bof');
+    ytmpfile.data = input{1};
+    ytmpfile.layer = 0;
+    res{1} = set(input{1},'TmpFile',ytmpfile);
+end
+            
+
+function old = combineframes(old,new)
+if not(iscell(old))
+    old = {old};
+end
+if not(iscell(new))
+    new = {new};
+end
+for var = 1:length(new)
+    ov = old{var};
+    nv = new{var};
+    if isa(ov,'mirscalar')
+        ov = combinedata(ov,nv,'Data');
+        ov = combinedata(ov,nv,'Mode');
+        if isa(ov,'mirpitch')
+            ov = combinedata(ov,nv,'Amplitude');
+        end
+    else
+        if isa(ov,'mirtemporal')
+            [ov omatch nmatch] = combinedata(ov,nv,'Time',[],[],@modiftime);
+        else
+            [ov omatch nmatch] = combinedata(ov,nv,'Pos',[],[]);
+            if isa(ov,'mirspectrum')
+                [ov omatch nmatch] = combinedata(ov,nv,'Phase',[],[]);
+            end
+        end
+        ov = combinedata(ov,nv,'Data',omatch,nmatch);
+    end
+    ov = combinedata(ov,nv,'FramePos');
+    ov = combinedata(ov,nv,'PeakPos');
+    ov = combinedata(ov,nv,'PeakVal');
+    ov = combinedata(ov,nv,'PeakMode');
+    old{var} = ov;
+end
+
+
+function [ov omatch nmatch] = combinedata(ov,nv,key,omatch,nmatch,modifdata)
+if isstruct(ov)
+    omatch = [];
+    nmatch = [];
+    f = fields(ov);
+    for i = 1:length(f)
+        ov.(f{i}) = combinedata(ov.(f{i}),nv.(f{i}),key);
+    end
+    return
+end
+odata = get(ov,key);
+if isempty(odata) || isempty(odata{1})
+    return
+end
+odata = odata{1};
+if iscell(odata)
+    if ischar(odata{1})
+        return
+    else
+        odata = odata{1};
+    end
+end
+ndata = get(nv,key);
+ndata = ndata{1};
+if iscell(ndata)
+    ndata = ndata{1};
+end
+if nargin>3 
+    if isempty(omatch)
+        ol = size(odata,1);
+        nl = size(ndata,1);
+        unmatch = ol-nl;
+        if unmatch>0
+            [unused idx] = min(odata(1:1+unmatch,1,1)-ndata(1));
+            omatch = idx:idx+nl-1;
+            nmatch = 1:nl;
+        elseif unmatch<0
+            [unused idx] = min(ndata(1:1-unmatch,1,1)-odata(1));
+            nmatch = idx:idx+ol-1;
+            omatch = 1:ol;
+        else
+            nmatch = 1:nl;
+            omatch = 1:ol;
+        end       
+    end
+    odata(omatch,end+1:end+size(ndata,2),:,:) = ndata(nmatch,:,:,:); %4.D for keysom
+else
+    odata(:,end+1:end+size(ndata,2),:,:) = ndata;
+end
+ov = set(ov,key,{{odata}});  %{odata} for warped chromagram for instance....
+
+
+function d = modiftime(d,p)
+d = d + p;
+
+
+function [y d] = evalnow(d)
+% Go one step further in the top-down evaluation initialisation
+argin = d.argin;
+if not(iscell(argin))
+    argin = {argin};
+end
+for i = 1:length(argin)
+    a = argin{i};
+    if not(d.ascending)
+        a.ascending = 0;
+    end
+    if isa(a,'mirdata')
+        % Input already computed
+        tmpfile = get(a,'TmpFile');
+        if not(isempty(tmpfile)) && tmpfile.fid > 0
+            % The input can be read from the temporary file
+            ch = get(d,'Chunk');
+            a = tmpfile.data;
+            a = set(a,'InterChunk',get(d,'InterChunk'),'TmpFile',tmpfile);
+            channels = get(a,'Channels');
+            channels = length(channels{1});
+            if not(channels)
+                channels = 1;
+            end
+            size = (ch(2)-ch(1)+1);
+            current = ftell(tmpfile.fid);
+            fseek(tmpfile.fid,current-size*(channels+1)*8,'bof');
+            %ftell(tmpfile.fid)
+            [data count] = fread(tmpfile.fid,[size,channels],'double');
+            %count
+            data = reshape(data,[size,1,channels]);
+            [pos count] = fread(tmpfile.fid,size,'double');
+            %count
+           % ftell(tmpfile.fid)
+            fseek(tmpfile.fid,current-size*(channels+1)*8,'bof');
+            a = set(a,'Data',{{data}},'Pos',{{pos}});
+            if ch(3)
+                fclose(tmpfile.fid);
+                delete('tmpfile.mirtoolbox');
+            end
+            argin{i} = a;
+        end
+    elseif isa(a,'mirdesign')
+        if isempty(a.stored)
+            % The design parameters are transfered to the previous component
+            % in the design process
+            a.size = d.size;
+            a.chunk = d.chunk;
+            a.file = d.file;
+            a.channel = d.channel;
+            a.eval = 1;
+            a.interchunk = d.interchunk;
+            a.sampling = d.sampling;
+            if isstruct(d.frame) && isfield(d.frame,'decomposition') ...
+                                 && not(isempty(d.frame.decomposition))
+                a.chunkdecomposed = 1;
+            else
+                a.chunkdecomposed = d.chunkdecomposed;
+            end
+            if not(isempty(d.frame)) && ...
+               not(strcmp(func2str(d.method),'mirframe'))
+                a.frame = d.frame;
+            end
+            a.ready = 1;
+            a.acrosschunks = d.acrosschunks;
+            a.index = d.index;
+            argin{i} = a;
+        else
+            % Variable already calculated
+            tmp = get(d,'Struct');
+            if not(isempty(tmp))
+                for j = 1:length(a.stored) % (if modified, modify also mirframe)
+                    stored = a.stored{j};
+                    if iscell(stored)
+                        if length(stored)>1
+                            tmp = tmp{stored{1},stored{2}};
+                        else
+                            tmp = tmp{stored{1}};
+                        end
+                    else
+                        tmp = getfield(tmp,stored);
+                    end
+                end
+                if iscell(tmp)
+                    tmp = tmp{1};
+                end
+            else
+                mirerror('evaleach','THERE is a problem..');
+            end
+            argin{i} = tmp;
+        end
+    end
+end
+if not(iscell(d.argin))
+    argin = argin{1};
+end
+d.option.struct = get(d,'Struct');
+if iscell(d.postoption)
+    [y argin] = d.method(argin,d.option,d.postoption{:});
+else
+    [y argin] = d.method(argin,d.option,d.postoption);
+end
+d = set(d,'Argin',argin);
+if isa(d,'mirstruct') && not(isfield(d.frame,'dontchunk')) && isempty(get(d,'Chunk'))
+    y = evalbranches(d,y);
+end
+
+
+function z = evalbranches(d,y)
+% For complex flowcharts, now that the first temporary variable (y) has been
+% computed, the dependent features (d) should be evaluated as well.
+branch = get(d,'Data');
+
+for i = 1:length(branch)
+    if isa(branch{i},'mirdesign') && get(branch{i},'NoChunk') == 1 
+                                        % if the value is 2, it is OK.
+        %mirerror('mireval','Flowchart badly designed: mirstruct should not be used if one or several final variables do not accept chunk decomposition.');
+    end
+end
+
+fields = get(d,'Fields');
+z = struct;
+tmp = get(d,'Tmp');
+for i = 1:length(branch)
+    z.(fields{i}) = evalbranch(branch{i},tmp,y);
+end
+if get(d,'Stat') && isempty(get(d,'Chunk'))
+    z = mirstat(z,'FileNames',0);
+end
+
+
+function b = evalbranch(b,d,y)
+% We need to evaluate the branch reaching the current node (b) from the parent 
+% corresponding to the temporary variable (d),
+
+if iscell(b)
+    mirerror('MIREVAL','Sorry, forked branching of temporary variable cannnot be evaluated in current version of MIRtoolbox.');
+end
+if isstruct(b)
+    % Subtrees are evaluated branch after branch.
+    f = fields(b);
+    for i = 1:length(f)
+        b.(f{i}) = evalbranch(b.(f{i}),d,y);
+    end
+    return
+end
+if isequal(b,d)
+    %% Does it happen ever??
+    b = y;
+    return
+end
+if not(isa(b,'mirdesign'))
+    mirerror('MIRSTRUCT','In the mirstruct object you defined, the final output should only depend on ''tmp'' variables, and should not therefore reuse the ''Design'' keyword.');
+end
+v = get(b,'Stored');
+if length(v)>1 && ischar(v{2})
+    % 
+    f = fields(d);
+    for i = 1:length(f)
+        if strcmpi(v{2},f)
+            b = y; % OK, now the temporary variable has been found.
+                   % End of recursion.
+            return
+        end
+    end
+end
+
+argin = evalbranch(get(b,'Argin'),d,y); % Recursion one parent up
+
+% The operation corresponding to the branch from the parent to the node
+% is finally evaluated.
+if iscell(b.postoption)
+    b = b.method(argin,b.option,b.postoption{:});
+else
+    b = b.method(argin,b.option,b.postoption);
+end
+
+
+function res = isaverage(specif)
+res = isfield(specif,'combinechunk') && ...
+        ((ischar(specif.combinechunk) && ...
+          strcmpi(specif.combinechunk,'Average')) || ...
+         (iscell(specif.combinechunk) && ...
+          ischar(specif.combinechunk{1}) && ...
+          strcmpi(specif.combinechunk{1},'Average')));
+      
+
+function d0 = callbeforechunk(d0,d,w,lsz)
+% If necessary, the chunk decomposition is performed a first time for
+% initialisation purposes.
+% Currently used only for miraudio(...,'Normal')
+if not(ischar(d)) && not(iscell(d))
+    specif = d.specif;
+    CHUNKLIM = mirchunklim;
+    nch = ceil(lsz/CHUNKLIM); 
+    if isfield(specif,'beforechunk') ...
+            && ((isfield(d.option,specif.beforechunk{2}) ...
+                    && d.option.(specif.beforechunk{2})) ...
+             || (isfield(d.postoption,specif.beforechunk{2}) ...
+                    && d.postoption.(specif.beforechunk{2})) )
+        if mirwaitbar
+            h = waitbar(0,['Preparing ' func2str(d.method)]);
+        else
+            h = 0;
+        end
+        for i = 1:nch
+            disp(['Chunk ',num2str(i),'/',num2str(nch),'...'])
+            chbeg = CHUNKLIM*(i-1);
+            chend = CHUNKLIM*i-1;
+            d2 = set(d,'Size',d0.size,'File',d0.file,...
+                       'Chunk',[chbeg+w(1) min(chend,lsz-1)+w(1)]);
+            d2.method = specif.beforechunk{1};
+            d2.postoption = {chend-lsz};
+            d2.chunkdecomposed = 1;
+            [tmp d] = evalnow(d2);
+            d0 = set(d0,'AcrossChunks',tmp);
+            if h
+                waitbar(chend/lsz,h)
+            end
+        end
+        if h
+            close(h);
+        end
+        drawnow
+    else
+        d0 = callbeforechunk(d0,d.argin,w,lsz);
+    end
+end
+
+
+function y = concatchunk(old,new,ascending)
+do = get(old,'Data');
+dn = get(new,'Data');
+fpo = get(old,'FramePos');
+fpn = get(new,'FramePos');
+if isa(old,'mirscalar')
+    y = set(old,'Data',{{[do{1}{1},dn{1}{1}]}},...
+                'FramePos',{{[fpo{1}{1},fpn{1}{1}]}});
+else
+    to = get(old,'Pos');
+    tn = get(new,'Pos');
+    if ascending
+        y = set(old,'Data',{{[do{1}{1};dn{1}{1}]}},...
+                    'Pos',{{[to{1}{1};tn{1}{1}]}},...
+                    'FramePos',{{[fpo{1}{1},fpn{1}{1}]}});
+    else
+        y = set(old,'Data',{{[dn{1}{1};do{1}{1}]}},...
+                    'Pos',{{[tn{1}{1};to{1}{1}]}},...
+                    'FramePos',{{[fpo{1}{1},fpn{1}{1}]}});
+    end
+end
+
+
+function y = combinesegment(old,new)
+do = get(old,'Data');
+to = get(old,'Pos');
+fpo = get(old,'FramePos');
+ppo = get(old,'PeakPos');
+pppo = get(old,'PeakPrecisePos');
+pvo = get(old,'PeakVal');
+ppvo = get(old,'PeakPreciseVal');
+pmo = get(old,'PeakMode');
+apo = get(old,'AttackPos');
+rpo = get(old,'ReleasePos');
+tpo = get(old,'TrackPos');
+tvo = get(old,'TrackVal');
+
+dn = get(new,'Data');
+tn = get(new,'Pos');
+fpn = get(new,'FramePos');
+ppn = get(new,'PeakPos');
+pppn = get(new,'PeakPrecisePos');
+pvn = get(new,'PeakVal');
+ppvn = get(new,'PeakPreciseVal');
+pmn = get(new,'PeakMode');
+apn = get(new,'AttackPos');
+rpn = get(new,'ReleasePos');
+tpn = get(new,'TrackPos');
+tvn = get(new,'TrackVal');
+
+if not(isempty(do))
+    y = set(old,'Data',{{do{1}{:},dn{1}{:}}});
+end
+
+y = set(old,'FramePos',{{fpo{1}{:},fpn{1}{:}}}); 
+        
+if not(isempty(to)) && size(do{1},2) == size(to{1},2)
+    y = set(y,'Pos',{{to{1}{:},tn{1}{:}}}); 
+end
+
+if not(isempty(ppo))
+    y = set(y,'PeakPos',{{ppo{1}{:},ppn{1}{:}}},...
+                'PeakVal',{{pvo{1}{:},pvn{1}{:}}},...
+                'PeakMode',{{pmo{1}{:},pmn{1}{:}}});
+end
+
+if not(isempty(pppn))
+    y = set(y,'PeakPrecisePos',{[pppo{1},pppn{1}{1}]},...
+                'PeakPreciseVal',{[ppvo{1},ppvn{1}{1}]});
+end
+
+if not(isempty(apn))
+    y = set(y,'AttackPos',{[apo{1},apn{1}{1}]});
+end
+
+if not(isempty(rpn))
+    y = set(y,'ReleasePos',{[rpo{1},rpn{1}{1}]});
+end
+
+if not(isempty(tpn))
+    y = set(y,'TrackPos',{[tpo{1},tpn{1}{1}]});
+end
+
+if not(isempty(tvn))
+    y = set(y,'TrackVal',{[tvo{1},tvn{1}{1}]});
+end
+
+if isa(old,'miremotion')
+    deo = get(old,'DimData');
+    ceo = get(old,'ClassData');
+    den = get(new,'DimData');
+    cen = get(new,'ClassData');
+    afo = get(old,'ActivityFactors');
+    vfo = get(old,'ValenceFactors');
+    tfo = get(old,'TensionFactors');
+    hfo = get(old,'HappyFactors');
+    sfo = get(old,'SadFactors');
+    tdo = get(old,'TenderFactors');
+    ago = get(old,'AngerFactors');
+    ffo = get(old,'FearFactors');
+    afn = get(new,'ActivityFactors');
+    vfn = get(new,'ValenceFactors');
+    tfn = get(new,'TensionFactors');
+    hfn = get(new,'HappyFactors');
+    sfn = get(new,'SadFactors');
+    tdn = get(new,'TenderFactors');
+    agn = get(new,'AngerFactors');
+    ffn = get(new,'FearFactors');
+    y = set(y,'DimData',{[deo{1},den{1}{1}]},...
+            'ClassData',{[ceo{1},cen{1}{1}]},...
+            'ActivityFactors',{[afo{1},afn{1}{1}]},...
+            'ValenceFactors',{[vfo{1},vfn{1}{1}]},...
+            'TensionFactors',{[tfo{1},tfn{1}{1}]},...
+            'HappyFactors',{[hfo{1},hfn{1}{1}]},...
+            'SadFactors',{[sfo{1},sfn{1}{1}]},...
+            'TenderFactors',{[tdo{1},tdn{1}{1}]},...
+            'AngerFactors',{[ago{1},agn{1}{1}]},...
+            'FearFactors',{[ffo{1},ffn{1}{1}]}...
+        );
+end
+ 
+
+function y = sumchunk(old,new,order)
+%do = mirgetdata(old);
+%dn = mirgetdata(new);
+do = get(old,'Data');
+do = do{1}{1};
+dn = get(new,'Data');
+dn = dn{1}{1};
+y = set(old,'ChunkData',do+dn);
+        
+
+function y = divideweightchunk(orig,length)
+d = get(orig,'Data');
+if isempty(d)
+    y = orig;
+else
+    v = mircompute(@divideweight,d,length);
+    y = set(orig,'Data',v);
+end
+
+function e = multweight(d,length)
+e = d*length;
+
+function e = divideweight(d,length)
+e = d/length;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,130 @@
+function varargout = get(a,varargin)
+% GET Get properties from the MIRdesign object and return the value
+
+if ischar(varargin{1})
+    switch varargin{1}
+        case 'Method'
+            varargout = {a.method};
+            return
+        case 'File'
+            varargout = {a.file};
+            return
+        case 'FrameLength'
+            if isstruct(a.frame)
+                varargout = {a.frame.length.val};
+            else
+                varargout = {[]};
+            end
+            return
+        case 'FrameHop'
+            if isstruct(a.frame)
+                varargout = {a.frame.hop.val};
+            else
+                varargout = {[]};
+            end
+            return
+        case 'FrameLengthUnit'
+            if isstruct(a.frame)
+                varargout = {a.frame.length.unit};
+            else
+                varargout = {[]};
+            end
+            return
+        case 'FrameHopUnit'
+            if isstruct(a.frame)
+                varargout = {a.frame.hop.unit};
+            else
+                varargout = {[]};
+            end
+            return
+        case 'FrameDontChunk'
+            if isstruct(a.frame)
+                varargout = {a.frame.dontchunk};
+            else
+                varargout = {[]};
+            end
+            return
+        case 'Segment'
+            varargout = {a.segment};
+            return
+        case 'ChunkDecomposed'
+            varargout = {a.chunkdecomposed};
+            return
+        case 'Size'
+            varargout = {a.size};
+            return
+        case 'Type'
+            varargout = {a.type};
+            return
+        case 'Chunk'
+            varargout = {a.chunk};
+            return
+        case 'Eval'
+            varargout = {a.eval};
+            return
+        case 'Argin'
+            varargout = {a.argin};
+            return
+        case 'VarArgin'
+            varargout = {a.varargin};
+            return
+        case 'Specif'
+            varargout = {a.specif};
+            return
+        case 'InterChunk'
+            varargout = {a.interchunk};
+            return
+        case 'AcrossChunks'
+            varargout = {a.acrosschunks};
+            return
+        case 'Option'
+            varargout = {a.option};
+            return
+        case 'PostOption'
+            varargout = {a.postoption};
+            return
+        case 'NoChunk'
+            varargout = {a.nochunk};
+            return
+        case 'Ready'
+            varargout = {a.ready};
+            return
+        case 'Struct'
+            varargout = {a.struct};
+            return
+        case 'Stored'
+            varargout = {a.stored};
+            return
+        case 'Index'
+            varargout = {a.index};
+            return            
+        case 'TmpFile'
+            varargout = {a.tmpfile};
+            return     
+        case 'TmpOf'
+            varargout = {a.tmpof};
+            return
+        case 'Ascending'
+            varargout = {a.ascending};
+            return            
+        case 'SeparateChannels'
+            varargout = {a.separate};
+            return            
+        case 'Channel'
+            varargout = {a.channel};
+            return            
+    end
+end
+
+        prop.type = 'String';
+        prop.position = 2;
+        prop.default = '';
+    option.prop = prop;
+specif.option = option;
+varargout = mirfunction(@get,a,varargin,nargout,specif,@init,@main);
+
+function [x type] = init(x,option)
+type = '';
+
+function val = main(a,option,postoption)
+val = get(a,option.prop);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/getsampling.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function s = getsampling(d)
+
+s = d.sampling;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/isframed.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function b = isframed(d)
+
+if isstruct(d.frame) && not(isfield(d.frame,'dontchunk'))
+    b = 1;
+else
+    b = 0;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/mirdesign.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,129 @@
+function d = mirdesign(orig,argin,option,postoption,specif,type); %,nout)
+
+if isa(orig,'mirdesign')
+    d.method = orig.method;
+    d.argin = orig.argin;
+    d.option = orig.option;
+    d.postoption = orig.postoption;
+    d.specif = orig.specif;
+    d.type = orig.type;
+    d.frame = orig.frame;
+    d.segment = orig.segment;
+    d.chunkdecomposed = orig.chunkdecomposed;
+    d.size = orig.size;
+    d.file = orig.file;
+    d.channel = orig.channel;
+    d.sampling = orig.sampling;
+    d.resampling = orig.resampling;
+    d.nochunk = orig.nochunk;
+    d.ascending = orig.ascending;
+    d.overlap = orig.overlap;
+    d.separate = orig.separate;
+    d.chunk = orig.chunk;
+    d.eval = orig.eval;
+    d.interchunk = orig.interchunk;
+    d.acrosschunks = orig.acrosschunks;
+    d.ready = orig.ready;
+    d.struct = orig.struct;
+    d.stored = orig.stored;
+    d.index = orig.index;
+    d.tmpfile = orig.tmpfile;
+    d.tmpof = orig.tmpof;
+else
+    d.method = orig;
+    d.argin = argin;
+    d.option = option;
+    d.postoption = postoption;
+    d.specif = specif;
+    d.type = type;
+    if ischar(argin)
+        d.frame = {};
+        d.segment = {};
+        d.chunkdecomposed = 0;
+        d.size = {};
+        d.file = '';
+        d.channel = [];
+        d.sampling = 0;
+        d.resampling = 0;
+        d.nochunk = 0;
+        if not(isempty(orig)) && ...
+                strcmp(func2str(orig),'mirenvelope') && d.option.zp == 2
+                d.ascending = 0;
+        else
+            d.ascending = 1;
+        end
+        d.overlap = 0;
+        d.separate = 0;
+    else
+        if iscell(argin)
+            argin = argin{1};
+        end
+        if (strcmp(func2str(orig),'mirspectrum') && d.option.alongbands) ...
+            || (isfield(specif,'nochunk') && specif.nochunk)
+            d.frame = [];
+            if isfield(d.specif,'eachchunk')
+                d.specif = rmfield(d.specif,'eachchunk');
+                d.specif = rmfield(d.specif,'combinechunk');
+            end
+        else
+            d.frame = argin.frame;
+            if not(isempty(d.frame))
+                if isfield(d.specif,'extensive') 
+                    d.frame.dontchunk = 1;
+                    % Some frame-decomposed extractor should not be evaluated
+                    % chunk after chunk because the whole result is needed for
+                    % subsequent computations.
+                elseif isfield(d.specif,'chunkframebefore')
+                    d.frame.chunkbefore = 1;
+                end
+            end
+        end
+        d.segment = argin.segment;
+        d.chunkdecomposed = argin.chunkdecomposed;
+        d.size = argin.size;
+        d.file = argin.file;
+        d.channel = argin.channel;
+        d.sampling = argin.sampling;
+        d.resampling = argin.resampling;
+        if (isfield(specif,'nochunk') && specif.nochunk) 
+            d.nochunk = 1; % was previously 2
+        elseif not(isempty(argin.stored))
+            % a temporary variable will be already computed.
+            d.nochunk = 2; % Flag to indicate that no chunk should be 
+                           % performed. Temporary variables cannot for the 
+                           % moment be dispatched to dependent variables 
+                           % chunk by chunk, but only once the whole 
+                           % variable has been computed.
+        else
+            d.nochunk = argin.nochunk;
+        end
+        if strcmp(func2str(orig),'mirenvelope')
+            if d.option.zp == 2
+                d.ascending = not(isempty(d.segment));
+            else
+                d.ascending = 1;
+            end
+        else
+            d.ascending = argin.ascending;
+        end
+        d.overlap = argin.overlap;
+        d.separate = argin.separate;
+    end
+    d.chunk = [];
+    d.eval = 0;
+    d.interchunk = [];   % Data that can be passed between successive chunks during the main process.
+    d.acrosschunks = []; % Data that can be accumulated among chunks during the beforechunk process.
+    d.ready = 0;
+    d.struct = [];
+    d.stored = [];
+    d.index = NaN;
+    if not(isempty(orig)) && strcmp(func2str(orig),'mirenvelope') && ...
+                d.option.zp == 2 && isempty(d.segment)
+        % Triggers the use of temporary file for the mirenvelope computation
+        d.tmpfile.fid = 0;
+    else
+        d.tmpfile = [];
+    end
+    d.tmpof = [];
+end
+d = class(d,'mirdesign');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/mtimes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function varargout = mtimes(a,b)
+
+varargout = mirfunction(@mtimescell,{a,b},{},1,struct,@init,@mtimescell);
+
+
+function [x type] = init(x,option)
+type = get(x{1},'Type');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/plus.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function varargout = plus(a,b)
+
+varargout = mirfunction(@pluscell,{a,b},{},1,struct,@init,@plus);
+
+
+function [x type] = init(x,option)
+type = get(x{1},'Type');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+function a = set(a,varargin)
+% SET Set properties for the MIRdesign object
+% and return the updated object
+
+propertyArgIn = varargin;
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Eval'
+           a.eval = val;
+       case 'File'
+           a.file = val;
+       case 'Sampling'
+           a.sampling = val;
+       case 'Size'
+           a.size = val;
+       case 'Chunk'
+           a.chunk = val;
+       case 'SamplesIn'
+           a.samplesin = val;
+           a.samplesout = val;
+       case 'SamplesOut'
+           a.samplesout = val;
+       case 'Frame'
+           a.frame = val;
+       case 'Segment'
+           a.segment = val;
+       case 'FrameDecomposition'
+           a.frame.decomposition = val;
+       case 'FrameLength'
+           a.frame.length.val = val;
+       case 'FrameHop'
+           a.frame.hop.val = val;
+       case 'FrameLengthUnit'
+           a.frame.length.unit = val;
+       case 'FrameHopUnit'
+           a.frame.hop.unit = val;
+       case 'FrameEval'
+           a.frame.eval = val;
+       case 'FrameDontChunk'
+           a.frame.dontchunk = val;
+       case 'Path'
+           a.path = val;
+       case 'Specif'
+           a.specif = val;
+       case 'InterChunk'
+           a.interchunk = val;
+       case 'AcrossChunks'
+           a.acrosschunks = val;
+       case 'NoChunk'
+           a.nochunk = val;
+       case 'Struct'
+           a.struct = val;
+       case 'Stored'
+           a.stored = val;
+       case 'Index'
+           a.index = val;
+       case 'TmpFile'
+           a.tmpfile = val;
+       case 'TmpOf'
+           a.tmpof = val;
+       case 'ChunkDecomposed'
+           a.chunkdecomposed = val;
+       case 'Argin'
+           a.argin = val;
+       case 'Option'
+           a.option = val;
+       case 'Overlap'
+           a.overlap = val;
+       case 'SeparateChannels'
+           a.separate = val;
+       case 'Channel'
+           a.channel = val;
+       otherwise
+           error(['Unknown MIRdesign property: ' prop])
+   end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirdesign/setresampling.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function d = setresampling(d,s)
+
+d.resampling = s;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miremotion/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function display(e)
+% MIREMOTION/DISPLAY display of emotion contents
+d = get(e,'Dim');
+dd = get(e,'DimData');
+c = get(e,'Class');
+cd = get(e,'ClassData');
+fp = get(e,'FramePos');
+n = get(e,'Name');
+if not(isempty(d))
+    s = mirscalar(e);
+    s = set(s,'Pos',repmat({{d'}},size(dd)),'Data',dd,...
+        'Title','Dimensional Emotion','Abs','Emotion Dimensions')
+end
+if not(isempty(c))
+    s = mirscalar(e);
+    s = set(s,'Pos',repmat({{c'}},size(cd)),'Data',cd,...
+        'Title','Basic Emotion Set','Abs','Emotion Classes')
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miremotion/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function val = get(a, propName)
+% GET Get properties from the MIRemotion object
+% and return the value
+
+switch propName
+    case 'Dim'
+        val = a.dim;
+    case 'Class'
+        val = a.class;
+    case 'DimData'
+        val = a.dimdata;
+    case 'ClassData'
+        val = a.classdata;
+    case 'ActivityFactors'
+        val = a.activity_fact;
+    case 'ValenceFactors'
+        val = a.valence_fact;
+    case 'TensionFactors'
+        val = a.tension_fact;
+    case 'HappyFactors'
+        val = a.happy_fact;
+    case 'SadFactors'
+        val = a.sad_fact;
+    case 'TenderFactors'
+        val = a.tender_fact;
+    case 'AngerFactors'
+        val = a.anger_fact;
+    case 'FearFactors'
+        val = a.fear_fact;
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miremotion/miremotion.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,470 @@
+function varargout = miremotion(orig,varargin)
+% Predicts emotion along three dimensions and five basic concepts.
+% Optional parameters:
+%   miremotion(...,'Dimensions',0) excludes all three dimensions.
+%   miremotion(...,'Dimensions',3) includes all three dimensions (default).
+%   miremotion(...,'Activity') includes the 'Activity' dimension. 
+%   miremotion(...,'Valence') includes the 'Valence' dimension. 
+%   miremotion(...,'Tension') includes the 'Tension' dimension. 
+%   miremotion(...,'Dimensions',2) includes 'Activity' and 'Valence'.
+%   miremotion(...,'Arousal') includes 'Activity' and 'Tension'.
+%   miremotion(...,'Concepts',0) excludes all five concepts.
+%   miremotion(...,'Concepts') includes all five concepts (default).
+%   miremotion(...,'Happy') includes the 'Happy' concept.
+%   miremotion(...,'Sad') includes the 'Sad' concept.
+%   miremotion(...,'Tender') includes the 'Tender' concept.
+%   miremotion(...,'Anger') includes the 'Anger' concept.
+%   miremotion(...,'Fear') includes the 'Fear' concept.
+%   miremotion(...,'Frame',...) predict emotion frame by frame.
+%
+% Selection of features and coefficients are taken from a study: 
+%         Eerola, T., Lartillot, O., and Toiviainen, P. 
+%            (2009). Prediction of multidimensional emotional ratings in 
+%            music from audio using multivariate regression models. 
+%            In Proceedings of 10th International Conference on Music Information Retrieval 
+%            (ISMIR 2009), pages 621-626.
+%
+% The implemented models are based on multiple linear regression with 5 best
+% predictors (MLR option in the paper). The box-cox transformations have now been 
+% removed until the normalization values have been established with a large sample of music.
+% 
+% TODO: Revision of coefficients to (a) force the output range between 0 - 1 and 
+%    (b) to be based on alternative models and materials (training sets). 
+%
+% Updated 03.05.2010 TE
+%
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [0 0];
+        frame.keydefault = [1 1];
+    option.frame = frame;
+
+        dim.key = 'Dimensions';
+        dim.type = 'Integer';
+        dim.default = NaN;
+        dim.keydefault = 3;
+    option.dim = dim;
+
+        activity.key = 'Activity';
+        activity.type = 'Boolean';
+        activity.default = NaN;
+    option.activity = activity;
+
+        valence.key = 'Valence';
+        valence.type = 'Boolean';
+        valence.default = NaN;
+    option.valence = valence;
+
+        tension.key = 'Tension';
+        tension.type = 'Boolean';
+        tension.default = NaN;
+    option.tension = tension;
+    
+        arousal.key = 'Arousal';
+        arousal.type = 'Boolean';
+        arousal.default = NaN;
+    option.arousal = arousal;
+    
+        concepts.key = 'Concepts';
+        concepts.type = 'Boolean';
+        concepts.default = NaN;
+    option.concepts = concepts;
+
+        happy.key = 'Happy';
+        happy.type = 'Boolean';
+        happy.default = NaN;
+    option.happy = happy;
+
+        sad.key = 'Sad';
+        sad.type = 'Boolean';
+        sad.default = NaN;
+    option.sad = sad;
+
+        tender.key = 'Tender';
+        tender.type = 'Boolean';
+        tender.default = NaN;
+    option.tender = tender;
+
+        anger.key = 'Anger';
+        anger.type = 'Boolean';
+        anger.default = NaN;
+    option.anger = anger;
+
+        fear.key = 'Fear';
+        fear.type = 'Boolean';
+        fear.default = NaN;
+    option.fear = fear;
+    
+specif.option = option;
+specif.defaultframelength = 1;
+%specif.defaultframehop = .5;
+
+specif.combinechunk = {'Average',@nothing};
+specif.extensive = 1;
+
+varargout = mirfunction(@miremotion,orig,varargin,nargout,specif,@init,@main);
+
+
+%%
+function [x type] = init(x,option)
+
+option = process(option);
+
+if option.frame.length.val
+    hop = option.frame.hop.val;
+    if strcmpi(option.frame.hop.unit,'Hz')
+        hop = 1/hop;
+        option.frame.hop.unit = 's';
+    end
+    if strcmpi(option.frame.hop.unit,'s')
+        hop = hop*get(x,'Sampling');
+    end
+    if strcmpi(option.frame.hop.unit,'%')
+        hop = hop/100;
+        option.frame.hop.unit = '/1';
+    end
+    if strcmpi(option.frame.hop.unit,'/1')
+        hop = hop*option.frame.length.val;
+    end
+    frames = 0:hop:1000000;
+    x = mirsegment(x,[frames;frames+option.frame.length.val]);
+elseif isa(x,'mirdesign')
+    x = set(x,'NoChunk',1);
+end
+rm = mirrms(x,'Frame',.046,.5);
+
+le = 0; %mirlowenergy(rm,'ASR');
+
+o = mironsets(x,'Filterbank',15,'Contrast',0.1);
+at = mirattacktime(o);
+as = 0; %mirattackslope(o);
+ed = 0; %mireventdensity(o,'Option1');
+
+fl = mirfluctuation(x,'Summary');
+fp = mirpeaks(fl,'Total',1);
+fc = 0; %mircentroid(fl);
+
+tp = 0; %mirtempo(x,'Frame',2,.5,'Autocor','Spectrum');
+pc = mirpulseclarity(x,'Frame',2,.5); %%%%%%%%%%% Why 'Frame'?? 
+
+s = mirspectrum(x,'Frame',.046,.5);
+sc = mircentroid(s);
+ss = mirspread(s);
+sr = mirroughness(s);
+
+%ps = mirpitch(x,'Frame',.046,.5,'Tolonen');
+
+c = mirchromagram(x,'Frame','Wrap',0,'Pitch',0);    %%%%%%%%%%%%%%%%%%%% Previous frame size was too small.
+cp = mirpeaks(c,'Total',1);
+ps = 0;%cp;
+ks = mirkeystrength(c);
+[k kc] = mirkey(ks);
+mo = mirmode(ks);
+hc = mirhcdf(c);
+
+se = mirentropy(mirspectrum(x,'Collapsed','Min',40,'Smooth',70,'Frame',1.5,.5)); %%%%%%%%% Why 'Frame'?? 
+
+ns = mirnovelty(mirspectrum(x,'Frame',.1,.5,'Max',5000),'Normal',0);
+nt = mirnovelty(mirchromagram(x,'Frame',.2,.25),'Normal',0);    %%%%%%%%%%%%%%%%%%%% Previous frame size was too small.
+nr = mirnovelty(mirchromagram(x,'Frame',.2,.25,'Wrap',0),'Normal',0);   %%%%%%%%%%%%%%%%%%%% Previous frame size was too small.
+
+
+
+x = {rm,le, at,as,ed, fp,fc, tp,pc, sc,ss,sr, ps, cp,kc,mo,hc, se, ns,nt,nr};
+
+type = {'miremotion','mirscalar','mirscalar',...
+                     'mirscalar','mirscalar','mirscalar',...
+                     'mirspectrum','mirscalar',...
+                     'mirscalar','mirscalar',...
+                     'mirscalar','mirscalar','mirscalar',...
+                     'mirscalar',...
+                     'mirchromagram','mirscalar','mirscalar','mirscalar',...
+                     'mirscalar',...
+                     'mirscalar','mirscalar','mirscalar'};
+                 
+
+%%
+function e = main(x,option,postoption)
+
+warning('WARNING IN MIRENOTION: The current model of miremotion is not correctly calibrated with this version of MIRtoolbox (but with version 1.3 only).');
+
+option = process(option);
+rm = get(x{1},'Data');
+%le = get(x{2},'Data');
+at = get(x{3},'Data');
+%as = get(x{4},'Data');
+%ed = get(x{5},'Data');
+%fpp = get(x{6},'PeakPosUnit');
+fpv = get(x{6},'PeakVal');
+%fc = get(x{7},'Data');
+%tp = get(x{8},'Data');
+pc = get(x{9},'Data');
+sc = get(x{10},'Data');
+ss = get(x{11},'Data');
+rg = get(x{12},'Data');
+%ps = get(x{13},'PeakPosUnit');
+cp = get(x{14},'PeakPosUnit');
+kc = get(x{15},'Data');
+mo = get(x{16},'Data');
+hc = get(x{17},'Data');
+se = get(x{18},'Data');
+ns = get(x{19},'Data');
+nt = get(x{20},'Data');
+nr = get(x{21},'Data');
+
+
+e.dim = {};
+e.dimdata = mircompute(@initialise,rm);
+if option.activity == 1
+    [e.dimdata e.activity_fact] = mircompute(@activity,e.dimdata,rm,fpv,sc,ss,se);
+    e.dim = [e.dim,'Activity'];
+else   
+    e.activity_fact = NaN;
+end
+if option.valence == 1
+    [e.dimdata e.valence_fact] = mircompute(@valence,e.dimdata,rm,fpv,kc,mo,ns);
+    e.dim = [e.dim,'Valence'];
+else
+    e.valence_fact = NaN;
+end
+if option.tension == 1
+    [e.dimdata e.tension_fact] = mircompute(@tension,e.dimdata,rm,fpv,kc,hc,nr);
+    e.dim = [e.dim,'Tension'];
+else
+    e.tension_fact = NaN;
+end
+
+e.class = {};
+e.classdata = mircompute(@initialise,rm);
+if option.happy == 1
+    [e.classdata e.happy_fact] = mircompute(@happy,e.classdata,fpv,ss,cp,kc,mo);
+    e.class = [e.class,'Happy'];
+else
+    e.happy_fact = NaN;
+end
+if option.sad == 1
+    [e.classdata e.sad_fact] = mircompute(@sad,e.classdata,ss,cp,mo,hc,nt);
+    e.class = [e.class,'Sad'];
+else
+    e.sad_fact = NaN;
+end
+if option.tender == 1
+    [e.classdata e.tender_fact] = mircompute(@tender,e.classdata,sc,rg,kc,hc,ns);
+    e.class = [e.class,'Tender'];
+else
+    e.tender_fact = NaN;
+end
+if option.anger == 1
+    [e.classdata e.anger_fact] = mircompute(@anger,e.classdata,rg,kc,se,nr);
+    e.class = [e.class,'Anger'];
+else
+    e.anger_fact = NaN;
+end
+if option.fear == 1
+    [e.classdata e.fear_fact] = mircompute(@fear,e.classdata,rm,at,fpv,kc,mo);
+    e.class = [e.class,'Fear'];
+else
+    e.fear_fact = NaN;
+end
+
+e = class(e,'miremotion',mirdata(x{1}));
+e = purgedata(e);
+fp = mircompute(@noframe,get(x{1},'FramePos'));
+e = set(e,'Title','Emotion','Abs','emotions','Ord','magnitude','FramePos',fp);
+      
+%%      
+function option = process(option)
+if option.arousal==1
+    option.activity = 1;
+    option.tension = 1;
+    if isnan(option.dim)
+        option.dim = 0; 
+    end
+end
+if option.activity==1 || option.valence==1 || option.tension==1
+    if isnan(option.activity)
+        option.activity = 0;
+    end
+    if isnan(option.valence)
+        option.valence = 0;
+    end
+    if isnan(option.tension)
+        option.tension = 0;
+    end
+    if isnan(option.concepts)
+        option.concepts = 0;
+    end
+end
+if not(isnan(option.dim)) && option.dim
+    if isnan(option.concepts)
+        option.concepts = 0;
+    end
+end
+if not(isnan(option.concepts)) && option.concepts
+    if isnan(option.dim)
+        option.dim = 0;
+    end
+end
+if not(isnan(option.dim))
+    switch option.dim 
+        case 0
+            if isnan(option.activity)
+                option.activity = 0;
+            end
+            if isnan(option.valence)
+                option.valence = 0;
+            end
+            if isnan(option.tension)
+                option.tension = 0;
+            end
+        case 2
+            option.activity = 1;
+            option.valence = 1;
+            if isnan(option.tension)
+                option.tension = 0;
+            end
+        case 3
+            option.activity = 1;
+            option.valence = 1;
+            option.tension = 1;
+    end
+end
+if isnan(option.activity)
+    option.activity = 1;
+end
+if isnan(option.valence)
+    option.valence = 1;
+end
+if isnan(option.tension)
+    option.tension = 1;
+end
+if isnan(option.concepts)
+    option.concepts = 1;
+end
+if option.concepts
+    option.happy = 1;
+    option.sad = 1;
+    option.tender = 1;
+    option.anger = 1;
+    option.fear = 1;
+end
+if option.happy==1 || option.sad==1 || option.tender==1 ...
+        || option.anger==1 || option.fear==1
+    if isnan(option.happy)
+        option.happy = 0;
+    end
+    if isnan(option.sad)
+        option.sad = 0;
+    end
+    if isnan(option.tender)
+        option.tender = 0;
+    end
+    if isnan(option.anger)
+        option.anger = 0;
+    end
+    if isnan(option.fear)
+        option.fear = 0;
+    end
+end
+
+
+%%
+function e = initialise(rm)
+e = [];
+
+      
+function e = activity(e,rm,fpv,sc,ss,se) % without the box-cox transformation, revised coefficients
+af = zeros(5,1);
+af(1) = 0.6664* ((mean(rm) - 0.0559)/0.0337); % 
+af(2) =  0.6099 * ((mean(fpv{1}) - 13270.1836)/10790.655);
+af(3) = 0.4486*((mean(cell2mat(sc)) - 1677.7)./570.34);
+af(4) = -0.4639*((mean(cell2mat(ss)) - 250.5574)./205.3147);
+af(5) = 0.7056*((mean(se) - 0.954)./0.0258);
+af(isnan(af)) = [];
+e(end+1,:) = sum(af)+5.4861;
+e = {e af};
+
+function e = valence(e,rm,fpv,kc,mo,ns) % without the box-cox transformation, revised coefficients
+vf = zeros(5,1);
+vf(1) = -0.3161 * ((std(rm) - 0.024254)./0.015667);
+vf(2) =  0.6099 * ((mean(fpv{1}) - 13270.1836)/10790.655);
+vf(3) = 0.8802 * ((mean(kc) - 0.5123)./0.091953);
+vf(4) = 0.4565 * ((mean(mo) - -0.0019958)./0.048664);
+ns(isnan(ns)) = [];
+vf(5) = 0.4015 * ((mean(ns) - 131.9503)./47.6463);
+vf(isnan(vf)) = [];
+e(end+1,:) = sum(vf)+5.2749;
+e = {e vf};
+
+function e = tension(e,rm,fpv,kc,hc,nr)
+tf = zeros(5,1);
+tf(1) = 0.5382 * ((std(rm) - 0.024254)./0.015667);
+tf(2) =  -0.5406 * ((mean(fpv{1}) - 13270.1836)/10790.655);
+tf(3) = -0.6808 * ((mean(kc) - 0.5124)./0.092);
+tf(4) = 0.8629 * ((mean(hc) - 0.2962)./0.0459);
+tf(5) = -0.5958 * ((mean(nr) - 71.8426)./46.9246);
+tf(isnan(tf)) = [];
+e(end+1,:) = sum(tf)+5.4679;
+e = {e tf};
+
+
+% BASIC EMOTION PREDICTORS
+
+function e = happy(e,fpv,ss,cp,kc,mo)
+ha_f = zeros(5,1);
+ha_f(1) = 0.7438*((mean(cell2mat(fpv)) - 13270.1836)./10790.655);
+ha_f(2) = -0.3965*((mean(cell2mat(ss)) - 250.5574)./205.3147);
+ha_f(3) = 0.4047*((std(cell2mat(cp)) - 8.5321)./2.5899);
+ha_f(4) = 0.7780*((mean(kc) - 0.5124)./0.092);
+ha_f(5) = 0.6220*((mean(mo) - -0.002)./0.0487);
+ha_f(isnan(ha_f)) = [];
+e(end+1,:) = sum(ha_f)+2.6166;
+e = {e ha_f};
+
+function e = sad(e,ss,cp,mo,hc,nt)
+sa_f = zeros(5,1);
+sa_f(1) = 0.4324*((mean(cell2mat(ss)) - 250.5574)./205.3147);
+sa_f(2) = -0.3137*((std(cell2mat(cp)) - 8.5321)./2.5899);
+sa_f(3) = -0.5201*((mean(mo) - -0.0020)./0.0487);
+sa_f(4) = -0.6017*((mean(hc) - 0.2962)./0.0459);
+sa_f(5) = 0.4493*((mean(nt) - 42.2022)./36.7782);
+sa_f(isnan(sa_f)) = [];
+e(end+1,:) = sum(sa_f)+2.9756;
+e = {e sa_f};
+
+function e = tender(e,sc,rg,kc,hc,ns)
+te_f = zeros(5,1);
+te_f(1) = -0.2709*((mean(cell2mat(sc)) - 1677.7106)./570.3432);
+te_f(2) = -0.4904*((std(rg) - 85.9387)./106.0767);
+te_f(3) = 0.5192*((mean(kc) - 0.5124)./0.0920);
+te_f(4) = -0.3995*((mean(hc) - 0.2962)./0.0459);
+te_f(5) = 0.3391*((mean(ns) - 131.9503)./47.6463);
+te_f(isnan(te_f)) = [];
+e(end+1,:) = sum(te_f)+2.9756;
+e = {e te_f};
+
+function e = anger(e,rg,kc,se,nr) % 
+an_f = zeros(5,1);
+%an_f(1) = -0.2353*((mean(pc) - 0.1462)./.1113);
+an_f(2) = 0.5517*((mean(rg) - 85.9387)./106.0767);
+an_f(3) = -.5802*((mean(kc) - 0.5124)./0.092);
+an_f(4) = .2821*((mean(se) - 0.954)./0.0258);
+an_f(5) = -.2971*((mean(nr) - 71.8426)./46.9246);
+an_f(isnan(an_f)) = [];
+e(end+1,:) = sum(an_f)+1.9767;
+e = {e an_f};
+
+function e = fear(e,rm,at,fpv,kc,mo)
+fe_f = zeros(5,1);
+fe_f(1) = 0.4069*((std(rm) - 0.0243)./0.0157);
+fe_f(2) = -0.6388*((mean(at) - 0.0707)./0.015689218536423);
+fe_f(3) = -0.2538*((mean(cell2mat(fpv)) - 13270.1836)./10790.655);
+fe_f(4) = -0.9860*((mean(kc) - 0.5124)./0.0920);
+fe_f(5) = -0.3144*((mean(mo) - -0.0019958)./0.048663550639094);
+fe_f(isnan(fe_f)) = [];
+e(end+1,:) = sum(fe_f)+2.7847;
+e = {e fe_f};
+
+function fp = noframe(fp)
+fp = [fp(1);fp(end)];
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miremotion/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,61 @@
+function ee = set(e,varargin)
+% SET Set properties for the MIRemotion object
+% and return the updated object
+
+propertyArgIn = varargin;
+%dim = e.dim;
+dimdata = e.dimdata;
+activity_fact = e.activity_fact;
+valence_fact = e.valence_fact;
+tension_fact = e.tension_fact;
+%classes = e.class;
+classdata = e.classdata;
+happy_fact = e.happy_fact;
+sad_fact = e.sad_fact;
+tender_fact = e.tender_fact;
+anger_fact = e.anger_fact;
+fear_fact = e.fear_fact;
+d = mirdata(e);
+d = set(d,'Title',get(e,'Title'),'Abs',get(e,'Abs'),'Ord',get(e,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'DimData'
+           dimdata = val;
+       case 'ClassData'
+           classdata = val;
+        case 'ActivityFactors'
+            activity_fact = val;
+        case 'ValenceFactors'
+            valence_fact = val;
+        case 'TensionFactors'
+            tension_fact = val;
+        case 'HappyFactors'
+            happy_fact = val;
+        case 'SadFactors'
+            sad_fact = val;
+        case 'TenderFactors'
+            tender_fact = val;
+        case 'AngerFactors'
+            anger_fact = val;
+        case 'FearFactors'
+            fear_fact = val;
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+ee.dim = e.dim;
+ee.dimdata = dimdata;
+ee.activity_fact = activity_fact;
+ee.valence_fact = valence_fact;
+ee.tension_fact = tension_fact;
+ee.class = e.class;
+ee.classdata = classdata;
+ee.happy_fact = happy_fact;
+ee.sad_fact = sad_fact;
+ee.tender_fact = tender_fact;
+ee.anger_fact = anger_fact;
+ee.fear_fact = fear_fact;
+ee = class(ee,'miremotion',d);
\ No newline at end of file
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/@miremotion/space.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function display(d)
+% MIRDATA/DISPLAY display of a MIRenvelope
+
+if d.hwr
+    d = set(d,'Title',[get(d,'Title'),' (half-wave rectified)']);
+end
+mirdisplay(mirtemporal(d),inputname(1));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function val = get(e, propName)
+% GET Get properties from the MIRenvelope object
+% and return the value
+
+switch propName
+    case 'DownSampling'
+        val = e.downsampl;
+    case 'Halfwave'
+        val = e.hwr;
+    case 'Diff'
+        val = e.diff;
+    case 'Phase'
+        val = e.phase;
+    otherwise
+        val = get(mirtemporal(e),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/mirenvelope.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,665 @@
+function varargout = mirenvelope(orig,varargin)
+%   e = mirenvelope(x) extracts the envelope of x, showing the global shape
+%       of the waveform.
+%   mirenvelope(...,m) specifies envelope extraction method.
+%       Possible values:
+%           m = 'Filter' uses a low-pass filtering. (Default strategy)
+%           m = 'Spectro' uses a spectrogram.
+%
+%   Options related to the 'Filter' method:
+%       mirenvelope(...,'Hilbert'): performs a preliminary Hilbert
+%           transform.
+%       mirenvelope(...,'PreDecim',N) downsamples by a factor N>1, where 
+%           N is an integer, before the low-pass filtering (Klapuri, 1999).
+%           Default value: N = 1.
+%       mirenvelope(...,'Filtertype',f) specifies the filter type.
+%           Possible values are:
+%               f = 'IIR': filter with one autoregressive coefficient 
+%                   (default)
+%               f = 'HalfHann': half-Hanning (raised cosine) filter 
+%                   (Scheirer, 1998)
+%           Option related to the 'IIR' option:
+%           mirenvelope(...,'Tau',t): time constant of low-pass filter in 
+%               seconds.
+%               Default value: t = 0.02 s.
+%       mirenvelope(...,'PostDecim',N) downsamples  by a factor N>1, where 
+%           N is an integer, after the low-pass filtering.
+%           Default value: N = 16 if 'PreDecim' is not used, else N = 1.
+%       mirenvelope(...,'Trim'): trims the initial ascending phase of the
+%           curves related to the transitory state.
+%
+%   Options related to the 'Spectro' method:
+%       mirenvelope(...,b) specifies whether the frequency range is further
+%           decomposed into bands. Possible values:
+%               b = 'Freq': no band decomposition (default value)
+%               b = 'Mel': Mel-band decomposition 
+%               b = 'Bark': Bark-band decomposition 
+%               b = 'Cents': decompositions into cents 
+%       mirenvelope(...,'Frame',...) specifies the frame configuration.
+%           Default value: length: .1 s, hop factor: 10 %.
+%       mirenvelope(...,'UpSample',N) upsamples by a factor N>1, where 
+%           N is an integer.
+%           Default value if 'UpSample' called: N = 2
+%       mirenvelope(...,'Complex') toggles on the 'Complex' method for the
+%           spectral flux computation.
+%
+%   Other available for all methods:
+%       mirenvelope(...,'Sampling',r): resamples to rate r (in Hz).
+%           'Down' and 'Sampling' options cannot therefore be combined.
+%       mirenvelope(...,'Halfwave'): performs a half-wave rectification.
+%       mirenvelope(...,'Center'): centers the extracted envelope.
+%       mirenvelope(...,'HalfwaveCenter'): performs a half-wave
+%           rectification on the centered envelope.
+%       mirenvelope(...,'Log'): computes the common logarithm (base 10) of
+%           the envelope.
+%       mirenvelope(...,'Mu',mu): computes the logarithm of the
+%           envelope, before the eventual differentiation, using a mu-law
+%           compression (Klapuri, 2006).
+%               Default value for mu: 100
+%       mirenvelope(...,'Log'): computes the logarithm of the envelope.
+%       mirenvelope(...,'Power'): computes the power (square) of the
+%           envelope.
+%       mirenvelope(...,'Diff'): computes the differentation of the
+%           envelope, i.e., the differences between successive samples.
+%       mirenvelope(...,'HalfwaveDiff'): performs a half-wave
+%           rectification on the differentiated envelope.
+%       mirenvelope(...,'Normal'): normalizes the values of the envelope by
+%           fixing the maximum value to 1.
+%       mirenvelope(...,'Lambda',l): sums the half-wave rectified envelope
+%           with the non-differentiated envelope, using the respective
+%           weight 0<l<1 and (1-l). (Klapuri et al., 2006)
+%       mirenvelope(...,'Smooth',o): smooths the envelope using a moving
+%           average of order o.
+%           Default value when the option is toggled on: o=30
+%       mirenvelope(...,'Gauss',o): smooths the envelope using a gaussian
+%           of standard deviation o samples.
+%           Default value when the option is toggled on: o=30
+%       mirenvelope(...,'Klapuri06'): follows the model proposed in
+%           (Klapuri et al., 2006). 
+
+        method.type = 'String';
+        method.choice = {'Filter','Spectro'};
+        method.default = 'Filter';
+    option.method = method;
+    
+%% options related to 'Filter':
+
+        hilb.key = 'Hilbert';
+        hilb.type = 'Boolean';
+        hilb.default = 0;
+    option.hilb = hilb;
+ 
+        decim.key = {'Decim','PreDecim'};
+        decim.type = 'Integer';
+        decim.default = 0;
+    option.decim = decim;
+    
+        filter.key = 'FilterType';
+        filter.type = 'String';
+        filter.choice = {'IIR','HalfHann',0};
+        if isamir(orig,'mirenvelope')
+            filter.default = 0; % no more envelope extraction, already done
+        else
+            filter.default = 'IIR';
+        end
+    option.filter = filter;
+
+            %% options related to 'IIR': 
+            tau.key = 'Tau';
+            tau.type = 'Integer';
+            tau.default = .02;
+    option.tau = tau;
+    
+        zp.key = 'ZeroPhase'; % internal use: for manual filtfilt
+        zp.type = 'Boolean';
+        if isamir(orig,'mirenvelope')
+            zp.default = 0;
+        else
+            zp.default = NaN;
+        end
+    option.zp = zp;
+
+        ds.key = {'Down','PostDecim'};
+        ds.type = 'Integer';
+        if isamir(orig,'mirenvelope')
+            ds.default = 1;
+        else
+            ds.default = NaN; % 0 if 'PreDecim' is used, else 16
+        end
+        ds.when = 'After';
+        ds.chunkcombine = 'During';
+    option.ds = ds;
+
+        trim.key = 'Trim';
+        trim.type = 'Boolean';
+        trim.default = 0;
+        trim.when = 'After';
+    option.trim = trim;
+     
+%% Options related to 'Spectro':
+
+        band.type = 'String';
+        band.choice = {'Freq','Mel','Bark','Cents'};
+        band.default = 'Freq';
+    option.band = band;
+
+        up.key = {'UpSample'};
+        up.type = 'Integer';
+        up.default = 0;
+        up.keydefault = 2;
+        up.when = 'After';
+    option.up = up;
+
+        complex.key = 'Complex';
+        complex.type = 'Boolean';
+        complex.default = 0;
+        complex.when = 'After';
+    option.complex = complex;    
+    
+%% Options related to all methods:
+    
+        sampling.key = 'Sampling';
+        sampling.type = 'Integer';
+        sampling.default = 0;
+        sampling.when = 'After';
+    option.sampling = sampling;
+
+        hwr.key = 'Halfwave';
+        hwr.type = 'Boolean';
+        hwr.default = 0;
+        hwr.when = 'After';
+    option.hwr = hwr;
+
+        c.key = 'Center';
+        c.type = 'Boolean';
+        c.default = 0;
+        c.when = 'After';
+    option.c = c;
+    
+        chwr.key = 'HalfwaveCenter';
+        chwr.type = 'Boolean';
+        chwr.default = 0;
+        chwr.when = 'After';
+    option.chwr = chwr;
+    
+        mu.key = 'Mu';
+        mu.type = 'Integer';
+        mu.default = 0;
+        mu.keydefault = 100;
+        mu.when = 'After';
+    option.mu = mu;
+    
+        oplog.key = 'Log';
+        oplog.type = 'Boolean';
+        oplog.default = 0;
+        oplog.when = 'After';
+    option.log = oplog;
+
+        oppow.key = 'Power';
+        oppow.type = 'Integer';
+        oppow.default = 0;
+        oppow.when = 'After';
+    option.power = oppow;
+
+        diff.key = 'Diff';
+        diff.type = 'Integer';
+        diff.default = 0;
+        diff.keydefault = 1;
+        diff.when = 'After';
+    option.diff = diff;
+    
+        diffhwr.key = 'HalfwaveDiff';
+        diffhwr.type = 'Integer';
+        diffhwr.default = 0;
+        diffhwr.keydefault = 1;
+        diffhwr.when = 'After';
+    option.diffhwr = diffhwr;
+
+        lambda.key = 'Lambda';
+        lambda.type = 'Integer';
+        lambda.default = 1;
+        lambda.when = 'After';
+    option.lambda = lambda;
+
+        aver.key = 'Smooth';
+        aver.type = 'Integer';
+        aver.default = 0;
+        aver.keydefault = 30;
+        aver.when = 'After';
+    option.aver = aver;
+        
+        gauss.key = 'Gauss';
+        gauss.type = 'Integer';
+        gauss.default = 0;
+        gauss.keydefault = 30;
+        gauss.when = 'After';
+    option.gauss = gauss;
+
+        norm.key = 'Normal';
+        norm.type = 'Boolean';
+        norm.default = 0;
+        norm.when = 'After';
+    option.norm = norm;
+
+        presel.type = 'String';
+        presel.choice = {'Klapuri06'};
+        presel.default = 0;
+    option.presel = presel;    
+    
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [.1 .1];
+    option.frame = frame;
+        
+specif.option = option;
+
+specif.eachchunk = 'Normal';
+specif.combinechunk = 'Concat';
+specif.extensive = 1;
+
+varargout = mirfunction(@mirenvelope,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = 'mirenvelope';
+if isamir(x,'mirscalar')
+    return
+end
+if ischar(option.presel) && strcmpi(option.presel,'Klapuri06')
+    option.method = 'Spectro';
+end
+if not(isamir(x,'mirenvelope'))
+    if strcmpi(option.method,'Filter')
+        if isnan(option.zp)
+            if strcmpi(option.filter,'IIR')
+                option.zp = 1;
+            else
+                option.zp = 0;
+            end
+        end
+        if option.zp == 1
+            x = mirenvelope(x,'ZeroPhase',2,'Down',1,...
+                              'Tau',option.tau,'PreDecim',option.decim);
+        end
+    elseif strcmpi(option.method,'Spectro')
+        x = mirspectrum(x,'Frame',option.frame.length.val,...
+                                  option.frame.length.unit,...
+                                  option.frame.hop.val,...
+                                  option.frame.hop.unit,...
+                                  'Window','hanning',...
+                                  option.band,'Power');
+
+    end
+end
+
+
+function e = main(orig,option,postoption)
+if iscell(orig)
+    orig = orig{1};
+end
+if isamir(orig,'mirscalar')
+    d = get(orig,'Data');
+    fp = get(orig,'FramePos');
+    for i = 1:length(d)
+        for j = 1:length(d{i})
+            d{i}{j} = reshape(d{i}{j},size(d{i}{j},2),1,size(d{i}{j},3));
+            p{i}{j} = mean(fp{i}{j})';
+        end
+    end
+    e.downsampl = 0;
+    e.hwr = 0;
+    e.diff = 0;
+    e.method = 'Spectro';
+    e.phase = {{}};
+    e = class(e,'mirenvelope',mirtemporal(orig));
+    e = set(e,'Title','Envelope','Data',d,'Pos',p,'FramePos',{{}});
+    postoption.trim = 0;
+    postoption.ds = 0;
+    e = post(e,postoption);
+    return
+end
+if isfield(option,'presel') && ischar(option.presel) && ...
+        strcmpi(option.presel,'Klapuri06')
+    option.method = 'Spectro';
+    postoption.up = 2;
+    postoption.mu = 100;
+    postoption.diffhwr = 1;
+    postoption.lambda = .8;
+end
+if isfield(postoption,'ds') && isnan(postoption.ds)
+    if option.decim
+        postoption.ds = 0;
+    else
+        postoption.ds = 16;
+    end
+end
+if not(isfield(option,'filter')) || not(ischar(option.filter))
+    e = post(orig,postoption);
+elseif strcmpi(option.method,'Spectro')
+    d = get(orig,'Data');
+    fp = get(orig,'FramePos');
+    sr = get(orig,'Sampling');
+    ch = get(orig,'Channels');
+    ph = get(orig,'Phase');
+    for h = 1:length(d)
+        sr{h} = 0;
+        for i = 1:length(d{h})
+            if size(d{h}{i},3)>1 % Already in bands (channels in 3d dim)
+                d{h}{i} = permute(sum(d{h}{i}),[2 1 3]);
+                ph{h}{i} = permute(ph{h}{i},[2 1 3]);
+            else % Simple spectrogram, frequency range sent to 3d dim
+                d{h}{i} = permute(d{h}{i},[2 3 1]);
+                ph{h}{i} = permute(ph{h}{i},[2 3 1]);
+            end
+            p{h}{i} = mean(fp{h}{i})';
+            if not(sr{h}) && size(fp{h}{i},2)>1
+                sr{h} = 1/(fp{h}{i}(1,2)-fp{h}{i}(1,1));
+            end
+        end
+        if not(sr{h})
+            warning('WARNING IN MIRENVELOPE: The frame decomposition did not succeed. Either the input is of too short duration, or the chunk size is too low.');
+        end
+        ch{h} = (1:size(d{h}{1},3))';
+    end
+    e.downsampl = 0;
+    e.hwr = 0;
+    e.diff = 0;
+    %e.todelete = {};
+    e.method = 'Spectro';
+    e.phase = ph;
+    e = class(e,'mirenvelope',mirtemporal(orig));
+    e = set(e,'Title','Envelope','Data',d,'Pos',p,...
+              'Sampling',sr,'Channels',ch);
+    postoption.trim = 0;
+    postoption.ds = 0;
+    e = post(e,postoption);
+else
+    if isnan(option.zp)
+        if strcmpi(option.filter,'IIR')
+            option.zp = 1;
+        else
+            option.zp = 0;
+        end
+    end
+    if option.zp == 1
+        option.decim = 0;
+    end
+    e.downsampl = 1;
+    e.hwr = 0;
+    e.diff = 0;
+    e.method = option.filter;
+    e.phase = {};
+    e = class(e,'mirenvelope',mirtemporal(orig));
+    e = purgedata(e);
+    e = set(e,'Title','Envelope');
+    sig = get(e,'Data');
+    x = get(e,'Pos');
+    sr = get(e,'Sampling');
+    disp('Extracting envelope...')
+    d = cell(1,length(sig));
+    [state e] = gettmp(orig,e);
+    for k = 1:length(sig)
+        if option.decim
+            sr{k} = sr{k}/option.decim;
+        end
+        if strcmpi(option.filter,'IIR')
+            a2 = exp(-1/(option.tau*sr{k})); % filter coefficient 
+            a = [1 -a2];
+            b = 1-a2;
+        elseif strcmpi(option.filter,'HalfHann')
+            a = 1;
+            b = hann(sr{k}*.4);
+            b = b(ceil(length(b)/2):end);
+        end
+        d{k} = cell(1,length(sig{k}));
+        for i = 1:length(sig{k})
+            sigi = sig{k}{i};
+            if option.zp == 2
+                sigi = flipdim(sigi,1);
+            end
+            if option.hilb
+                try
+                    for h = 1:size(sigi,2)
+                        for j = 1:size(sigi,3)
+                            sigi(:,h,j) = hilbert(sigi(:,h,j));
+                        end
+                    end
+                catch
+                    disp('Signal Processing Toolbox does not seem to be installed. No Hilbert transform.');
+                end 
+            end
+            sigi = abs(sigi);
+            
+            if option.decim
+                dsigi = zeros(ceil(size(sigi,1)/option.decim),...
+                              size(sigi,2),size(sigi,3));
+                for f = 1:size(sigi,2)
+                    for c = 1:size(sigi,3)
+                        dsigi(:,f,c) = decimate(sigi(:,f,c),option.decim);
+                    end
+                end
+                sigi = dsigi;
+                clear dsigi
+                x{k}{i} = x{k}{i}(1:option.decim:end,:,:);
+            end
+            
+            % tmp = filtfilt(1-a,[1 -a],sigi); % zero-phase IIR filter for smoothing the envelope
+
+            % Manual filtfilt
+            emptystate = isempty(state);
+            tmp = zeros(size(sigi));
+            for c = 1:size(sigi,3)
+                if emptystate
+                    [tmp(:,:,c) state(:,c,1)] = filter(b,a,sigi(:,:,c));
+                else
+                    [tmp(:,:,c) state(:,c,1)] = filter(b,a,sigi(:,:,c),...
+                                                        state(:,c,1));
+                end
+            end
+            
+            tmp = max(tmp,0); % For security reason...
+            if option.zp == 2
+                tmp = flipdim(tmp,1);
+            end
+            d{k}{i} = tmp;
+            %td{k} = round(option.tau*sr{k}*1.5); 
+        end
+    end
+    e = set(e,'Data',d,'Pos',x,'Sampling',sr); %,'ToDelete',td
+    e = settmp(e,state);
+    if not(option.zp == 2)
+        e = post(e,postoption);
+    end
+end
+if isfield(option,'presel') && ischar(option.presel) && ...
+        strcmpi(option.presel,'Klapuri06')
+    e = mirsum(e,'Adjacent',10);
+end
+
+    
+function e = post(e,postoption)
+if isempty(postoption)
+    return
+end
+if isfield(postoption,'lambda') && not(postoption.lambda)
+    postoption.lambda = 1;
+end
+d = get(e,'Data');
+tp = get(e,'Time');
+sr = get(e,'Sampling');
+ds = get(e,'DownSampling');
+ph = get(e,'Phase');
+for k = 1:length(d)
+    if isfield(postoption,'sampling')
+        if postoption.sampling
+            newsr = postoption.sampling;
+        elseif isfield(postoption,'ds') && postoption.ds>1
+            newsr = sr{k}/postoption.ds;
+        else
+            newsr = sr{k};
+        end
+    end
+    if isfield(postoption,'up') && postoption.up
+        [z,p,gain] = butter(6,10/newsr/postoption.up*2,'low');
+        [sos,g] = zp2sos(z,p,gain);
+        Hd = dfilt.df2tsos(sos,g);
+    end
+    for i = 1:length(d{k})
+        if isfield(postoption,'sampling') && postoption.sampling
+            if and(sr{k}, not(sr{k} == postoption.sampling))
+                dk = d{k}{i};
+                for j = 1:size(dk,3)
+                    if not(sr{k} == round(sr{k}))
+                        mirerror('mirenvelope','The ''Sampling'' postoption cannot be used after using the ''Down'' postoption.');
+                    end
+                    rk(:,:,j) = resample(dk(:,:,j),postoption.sampling,sr{k});
+                end
+                d{k}{i} = rk;
+                tp{k}{i} = repmat((0:size(d{k}{i},1)-1)',...
+                                    [1 1 size(tp{k}{i},3)])...
+                            /postoption.sampling + tp{k}{i}(1,:,:);
+                if not(iscell(ds))
+                    ds = cell(length(d));
+                end
+                ds{k} = round(sr{k}/postoption.sampling);
+            end
+        elseif isfield(postoption,'ds') && postoption.ds>1
+            if not(postoption.ds == round(postoption.ds))
+                mirerror('mirenvelope','The ''Down'' sampling rate should be an integer.');
+            end
+            ds = postoption.ds;
+            tp{k}{i} = tp{k}{i}(1:ds:end,:,:); % Downsampling...
+            d{k}{i} = d{k}{i}(1:ds:end,:,:);
+        end
+        if isfield(postoption,'sampling')
+            if not(strcmpi(e.method,'Spectro')) && postoption.trim 
+                tdk = round(newsr*.1); 
+                d{k}{i}(1:tdk,:,:) = repmat(d{k}{i}(tdk,:,:),[tdk,1,1]); 
+                d{k}{i}(end-tdk+1:end,:,:) = repmat(d{k}{i}(end-tdk,:,:),[tdk,1,1]);
+            end
+            if postoption.log
+                d{k}{i} = log10(d{k}{i});
+            end
+            if postoption.mu
+                dki = max(0,d{k}{i});
+                mu = postoption.mu;
+                dki = log(1+mu*dki)/log(1+mu);
+                dki(~isfinite(d{k}{i})) = NaN;
+                d{k}{i} = dki;
+            end
+            if postoption.power
+                d{k}{i} = d{k}{i}.^2;
+            end
+            if postoption.up
+                dki = zeros(size(d{k}{i},1).*postoption.up,...
+                            size(d{k}{i},2),size(d{k}{i},3));
+                dki(1:postoption.up:end,:,:) = d{k}{i};
+                dki = filter(Hd,[dki;...
+                                zeros(6,size(d{k}{i},2),size(d{k}{i},3))]);
+                d{k}{i} = dki(1+ceil(6/2):end-floor(6/2),:,:);
+                tki = zeros(size(tp{k}{i},1).*postoption.up,...
+                            size(tp{k}{i},2),...
+                            size(tp{k}{i},3));
+                dt = repmat((tp{k}{i}(2)-tp{k}{i}(1))...
+                                /postoption.up,...
+                            [size(tp{k}{i},1),1,1]);
+                for j = 1:postoption.up
+                    tki(j:postoption.up:end,:,:) = tp{k}{i}+dt*(j-1);
+                end
+                tp{k}{i} = tki;
+                newsr = sr{k}*postoption.up;
+            end
+            if (postoption.diffhwr || postoption.diff) && ...
+                    not(get(e,'Diff'))
+                tp{k}{i} = tp{k}{i}(1:end-1,:,:);
+                order = max(postoption.diffhwr,postoption.diff);
+                if postoption.complex
+                    dph = diff(ph{k}{i},2);
+                    dph = dph/(2*pi);% - round(dph/(2*pi));
+                    ddki = sqrt(d{k}{i}(3:end,:,:).^2 + d{k}{i}(2:end-1,:,:).^2 ...
+                                              - 2.*d{k}{i}(3:end,:,:)...
+                                                 .*d{k}{i}(2:end-1,:,:)...
+                                                 .*cos(dph));
+                    d{k}{i} = d{k}{i}(2:end,:,:); 
+                    tp{k}{i} = tp{k}{i}(2:end,:,:);
+                elseif order == 1
+                    ddki = diff(d{k}{i},1,1);
+                else
+                    b = firls(order,[0 0.9],[0 0.9*pi],'differentiator');
+                    ddki = filter(b,1,...
+                        [repmat(d{k}{i}(1,:,:),[order,1,1]);...
+                         d{k}{i};...
+                         repmat(d{k}{i}(end,:,:),[order,1,1])]);
+                    ddki = ddki(order+1:end-order-1,:,:);
+                end
+                if postoption.diffhwr
+                    ddki = hwr(ddki);
+                end
+                d{k}{i} = (1-postoption.lambda)*d{k}{i}(1:end-1,:,:)...
+                            + postoption.lambda*sr{k}/10*ddki;
+            end
+            if postoption.aver
+                y = filter(ones(1,postoption.aver),1,...
+                            [d{k}{i};zeros(postoption.aver,...
+                                           size(d{k}{i},2),...
+                                           size(d{k}{i},3))]);
+                d{k}{i} = y(1+ceil(postoption.aver/2):...
+                             end-floor(postoption.aver/2),:,:);
+            end
+            if postoption.gauss
+                sigma = postoption.gauss;
+                gauss = 1/sigma/2/pi...
+                        *exp(- (-4*sigma:4*sigma).^2 /2/sigma^2);
+                y = filter(gauss,1,[d{k}{i};zeros(4*sigma,1,size(d{k}{i},3))]);
+                y = y(4*sigma:end,:,:);
+                d{k}{i} = y(1:size(d{k}{i},1),:,:);
+            end
+            if postoption.chwr
+                d{k}{i} = center(d{k}{i});
+                d{k}{i} = hwr(d{k}{i});
+            end
+            if postoption.hwr
+                d{k}{i} = hwr(d{k}{i});
+            end
+            if postoption.c
+                d{k}{i} = center(d{k}{i});
+            end    
+            if postoption.norm
+                d{k}{i} = d{k}{i}./repmat(max(abs(d{k}{i})),...
+                                         [size(d{k}{i},1),1,1]);
+            end        
+        end
+    end
+    if isfield(postoption,'sampling')
+        sr{k} = newsr;
+    end
+end
+if isfield(postoption,'ds') && postoption.ds>1
+    e = set(e,'DownSampling',postoption.ds,'Sampling',sr);
+elseif isfield(postoption,'sampling') && postoption.sampling
+    e = set(e,'DownSampling',ds,'Sampling',sr);
+elseif isfield(postoption,'up') && postoption.up
+    e = set(e,'Sampling',sr);
+end
+if isfield(postoption,'sampling')
+    if postoption.hwr
+        e = set(e,'Halfwave',1);
+    end
+    if postoption.diff
+        e = set(e,'Diff',1,'Halfwave',0,'Title','Differentiated envelope');
+    end
+    if postoption.diffhwr
+        e = set(e,'Diff',1,'Halfwave',1,'Centered',0);
+    end
+    if postoption.c
+        e = set(e,'Centered',1);
+    end
+    if postoption.chwr
+        e = set(e,'Halfwave',1,'Centered',1);
+    end
+end
+e = set(e,'Data',d,'Time',tp); 
+%if isfield(postoption,'frame') && isstruct(postoption.frame)
+%    e = mirframenow(e,postoption);
+%end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/mirplay.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,129 @@
+function mirplay(e,varargin)
+
+% mirplay method for mirenvelope objects. Help displayed in ../mirplay.m
+
+        ch.key = 'Channel';
+        ch.type = 'Integer';
+        ch.default = 0;
+    option.ch = ch;
+        
+        sg.key = 'Segment';
+        sg.type = 'Integer';
+        sg.default = 0;
+    option.sg = sg;
+        
+        se.key = 'Sequence';
+        se.type = 'Integer';
+        se.default = 0;
+    option.se = se;
+
+        inc.key = 'Increasing';
+        inc.type = 'MIRtb';
+    option.inc = inc;
+
+        dec.key = 'Decreasing';
+        dec.type = 'MIRtb';
+    option.dec = dec;
+
+        every.key = 'Every';
+        every.type = 'Integer';
+    option.every = every;
+    
+        burst.key = 'Burst';
+        burst.type = 'Boolean';
+        burst.default = 1;
+    option.burst = burst;
+
+specif.option = option;
+
+specif.eachchunk = 'Normal';
+
+varargout = mirfunction(@mirplay,e,varargin,nargout,specif,@init,@main);
+if nargout == 0
+    varargout = {};
+end
+
+
+function [x type] = init(x,option)
+type = '';
+
+
+function noargout = main(a,option,postoption)
+if iscell(a)
+    a = a{1};
+end
+d = get(a,'Data');
+f = get(a,'Sampling');
+n = get(a,'Name');
+c = get(a,'Channels');
+fp = get(a,'FramePos');
+if not(option.se)
+    if length(d)>1
+        if isfield(option,'inc')
+            [unused order] = sort(mirgetdata(option.inc));
+        elseif isfield(option,'dec')
+            [unused order] = sort(mirgetdata(option.dec),'descend');
+        else
+            order = 1:length(d);
+        end
+        if isfield(option,'every')
+            order = order(1:option.every:end);
+        end
+    else
+        order = 1;
+    end
+else
+    order = option.se;
+end
+if not(isempty(order))
+    for k = order(:)'
+        display(['Playing envelope of file: ' n{k}])   
+        dk = d{k};
+        if not(iscell(dk))
+            dk = {dk};
+        end
+        if option.ch
+            if isempty(c{k})
+                chk = option.ch;
+            else
+                [unused unused chk] = intersect(option.ch,c{k});
+            end
+        else
+            chk = 1:size(dk{1},3);
+        end
+        if isempty(chk)
+            display('No channel to play.');
+        end
+        for l = chk
+            if chk(end)>1
+                display(['  Playing channel #' num2str(l)]);
+            end
+            if option.sg
+                sgk = option.sg(find(option.sg<=length(dk)));
+            else
+                sgk = 1:length(dk);
+            end
+            for i = sgk
+                if sgk(end)>1
+                    display(['      Playing segment #' num2str(i)])
+                end
+                di = dk{i};
+                for j = 1:size(di,2)
+                    djl = resample(di(:,j,l),11025,round(f{k}));
+                    djl = djl/max(djl);
+                    djl = rand(length(djl),1).*djl;
+                    sound(djl,11025);
+                    idealtime = length(djl)/11025;
+                    practime = toc;
+                    if practime < idealtime
+                        pause(idealtime-practime)
+                    end
+                end
+                if option.burst && sgk(end)>1
+                    sound(rand(1,10))
+                end
+            end
+        end
+    end
+end
+noargout = {};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/mirsave.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+function mirsave(e,f)
+
+ext = 0;    % Specified new extension
+if nargin == 1
+    f = '.envelope.mir';
+elseif length(f)>3 && strcmpi(f(end-3:end),'.wav')
+    ext = '.wav';
+    if length(f)==4
+        f = '.mir';
+    end
+elseif length(f)>2 && strcmpi(f(end-2:end),'.au')
+    ext = '.au';
+    if length(f)==3
+        f = '.mir';
+    end
+end
+
+d = get(e,'Data');
+nf = length(d);
+fs = get(e,'Sampling');
+nm = get(e,'Name');
+for i = 1:nf
+    di = d{i}{1};
+    fsi = fs{i};
+    nmi = nm{i};
+    di = resample(di,11025,round(fs{i}));
+    di = rand(size(di)).*di;
+    di = di/max(max(max(abs(di))))*.9999;
+    di = reshape(di,[],1);
+    
+    %Let's remove the extension from the original files
+    if length(nmi)>3 && strcmpi(nmi(end-3:end),'.wav')
+        nmi(end-3:end) = [];
+    elseif length(nmi)>2 && strcmpi(nmi(end-2:end),'.au')
+        nmi(end-2:end) = [];
+    end
+    
+    if nf>1 || strcmp(f(1),'.')
+        %Let's add the new suffix
+        n = [nmi f];
+    else
+        n = f;
+    end
+    
+    if not(ischar(ext)) || strcmp(ext,'.wav')
+        if length(n)<4 || not(strcmpi(n(end-3:end),'.wav'))
+            n = [n '.wav'];
+        end
+        wavwrite(di,11025,32,n)
+    elseif strcmp(ext,'.au')
+        if length(n)<3 || not(strcmpi(n(end-2:end),'.au'))
+            n = [n '.au'];
+        end
+        auwrite(di,11025,32,'linear',n)
+    end
+    disp([n,' saved.']);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirenvelope/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+function ee = set(e,varargin)
+% SET Set properties for the MIRenvelope object
+% and return the updated object
+
+propertyArgIn = varargin;
+ds = e.downsampl;
+hw = e.hwr;
+df = e.diff;
+mt = e.method;
+ph = e.phase;
+t = mirtemporal(e);
+t = set(t,'Title',get(e,'Title'),'Abs',get(e,'Abs'),'Ord',get(e,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'DownSampling'
+           ds = val;
+       case 'Halfwave'
+           hw = val;
+       case 'Diff'
+           df = val;
+   otherwise
+           t = set(t,prop,val);
+   end
+end
+ee.downsampl = ds;
+ee.hwr = hw;
+ee.diff = df;
+ee.method = mt;
+ee.phase = ph;
+ee = class(ee,'mirenvelope',t);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirhisto/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+function display(s)
+% SCALAR/DISPLAY display the values of an histogram
+disp(' ');
+d = get(s,'Data');
+b = get(s,'Bins');
+t = ['Histogram of ',get(s,'Title')];
+n = get(s,'Name');
+l = get(s,'MultiData');
+u = get(s,'Unit');
+if not(isempty(u)) && not(strcmp(u,'.'))
+    u = [' (in ',u,')'];
+end
+pp = get(s,'PeakPos');
+for i = 1:length(d)
+    figure
+    set(gca,'NextPlot','replacechildren',...
+            'LineStyleOrder',{'-',':','--',':','-.'})
+    nl = size(b{i},1);
+    for j = 1:nl
+        bar((b{i}(j,:,1)+b{i}(j,:,2))/2,d{i}(j,:));
+        hold all
+    end
+    if not(isempty(pp{i}{1}))
+        for j = 1:nl;
+            ppj = pp{i}{1}{1,j,1};
+            bar((b{i}(j,ppj,1)+b{i}(j,ppj,2))/2,d{i}(j,ppj),'or')
+        end
+    end
+    xlabel(['values',u]);
+    ylabel('number of occurrences')
+    title(t)
+    nl = size(d{i},1);
+    if nl>1
+        legend(l,'Location','Best')
+    end
+    fig = get(0,'CurrentFigure');
+    va = inputname(1);
+    if isempty(va)
+        va = 'ans';
+    end
+    disp([va,' is the ',t,' related to file ',n{i},...
+        ' is displayed in Figure ',num2str(fig),'.']);
+end
+disp(' ');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirhisto/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function val = get(a, propName)
+% GET Get properties from the MIRchromagram object
+% and return the value
+
+switch propName
+    case 'Bins'
+        val = get(mirdata(a),'Pos');
+    case 'Weight'
+        val = get(mirdata(a),'Data');
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirhisto/mirhisto.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,117 @@
+function varargout = mirhisto(x,varargin)
+%   h = mirhisto(x) constructs the histogram from x. The elements of x are
+%       binned into equally spaced containers.
+%   Optional argument:
+%       mirhisto(...,'Number',n): specifies the number of containers.
+%           Default value : n = 10.
+%       mirhisto(...,'Ampli'): adds the amplitude of the elements,instead of
+%           simply counting then.
+
+
+        n.key = 'Number';
+        n.type = 'Integer';
+        n.default = 10;
+    option.n = n;
+    
+        a.key = 'Ampli';
+        a.type = 'Boolean';
+        a.default = 0;
+    option.a = a;
+    
+specif.option = option;
+
+
+varargout = mirfunction(@mirhisto,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = 'mirhisto';
+
+
+function h = main(x,option,postoption)
+if iscell(x)
+    x = x{1};
+end
+d = get(x,'Data');
+%disp('Computing histogram...')
+ddd = cell(1,length(d));
+bbb = cell(1,length(d));
+for i = 1:length(d)
+    di = d{i}{1};  % To be generalized for segmented data
+    if iscell(di)
+        mx = -Inf;
+        mn = Inf;
+        nc = size(di,2);
+        for k = 1:nc
+            dk = di{k};
+            if size(dk,4) == 2
+                dk(end+1:end*2,:,:,1) = dk(:,:,:,2);
+                dk(:,:,:,2) = [];
+            end
+            mxk = max(dk);
+            mnk = min(dk);
+            if mxk > mx
+                mx = mxk;
+            end
+            if mnk < mn
+                mn = mnk;
+            end
+        end
+        if isinf(mx) || isinf(mx)
+            b = [];
+            dd = [];
+        else
+            dd = zeros(1,option.n);
+            if mn == mx
+                b(1,:) = mn-ceil(option.n/2) : mn+floor(option.n/2);
+            else
+                b(1,:) = mn : (mx-mn)/option.n : mx;
+            end
+            for k = 1:nc
+                dk = di{k};
+                for j = 1:option.n
+                    found = find(and(dk>=b(1,j),dk<=b(1,j+1)));
+                    if option.a
+                        dd(1,j) = dd(1,j) + sum(dk(found));
+                    else
+                        dd(1,j) = dd(1,j) + length(found);
+                    end
+                end
+            end
+        end
+    else
+        if isa(x,'mirscalar')
+            di = permute(di,[3 2 1]);
+        end
+        if size(di,4) == 2
+            di(end+1:end*2,:,:,1) = di(:,:,:,2);
+            di(:,:,:,2) = [];
+        end
+        nl = size(di,1);
+        nc = size(di,2);
+        np = size(di,3);
+        dd = zeros(1,option.n,np);
+        for l = 1:np
+            mx = max(max(di(:,:,l),[],1),[],2);
+            mn = min(min(di(:,:,l),[],1),[],2);
+            b(l,:) = mn:(mx-mn)/option.n:mx;
+            for k = 1:nc
+                dk = di(:,k,l);
+                for j = 1:option.n
+                    found = (find(and(dk>=b(l,j),dk<=b(l,j+1))));
+                    if option.a
+                        dd(1,j,l) = dd(1,j,l) + sum(dk(found));
+                    else
+                        dd(1,j,l) = dd(1,j,l) + length(found);
+                    end
+                end
+            end
+        end
+    end
+    ddd{i} = ipermute(dd,[3 2 1]);
+    bbb{i}(:,:,1) = b(:,1:end-1);
+    bbb{i}(:,:,2) = b(:,2:end);
+end
+h = class(struct,'mirhisto',mirdata(x));
+h = purgedata(h);
+h = set(h,'Bins',bbb,'Weight',ddd);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirhisto/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function cc = set(c,varargin)
+% SET Set properties for the MIRchromagram object
+% and return the updated object
+
+propertyArgIn = varargin;
+d = mirdata(c);
+d = set(d,'Title',get(c,'Title'),'Abs',get(c,'Abs'),'Ord',get(c,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Bins'
+           d = set(d,'Pos',val);
+       case 'Weight'
+           d = set(d,'Data',val);
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+cc = class(struct,'mirhisto',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeysom/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,54 @@
+function mov = display(k,filename)
+% KEYSOM/DISPLAY display of key som
+
+mov = [];
+load keysomaudiodata; 
+w = get(k,'Weight');
+n = get(k,'Name');
+if nargin>1
+    mov = avifile(filename);
+%elseif and(nargout>0,size(w)>0)
+%    mov = moviein(size(w{1}{1},2)); %no longer needed as of MATLAB Release 11 (5.3).
+end
+for i = 1:length(w)
+    wi = w{i};
+    fig = figure;
+    for j = 1:length(wi)
+        wj = wi{j};
+        for k = 1:size(wj,2)
+            for l = 1:size(wj,3)
+                h = pcolor(squeeze(wj(:,k,l,:)));
+                shading interp
+                axis([1,36,1,24]), view(2) , caxis([-1 1])
+                axis off;
+                hold on
+                for m=1:24 
+                    text(0.99*keyx(m)-1, 0.98*keyy(m)+1, keyN(m,:),...
+                                            'FontSize',16,'FontName','Arial'); 
+                end
+                hold off
+                set(gca,'PlotBoxAspectRatio',[1.5 1 1])
+                colormap('jet')
+                title('Self-organizing map projection of chromagram') 
+                drawnow
+                if nargin>1
+                    mov = addframe(mov,gca);
+                elseif nargout>0
+                    colormap('jet')
+                    if k == 1
+                        mov = getframe;
+                    else
+                        mov(k) = getframe; 
+                    end
+                end
+            end
+        end
+    end
+    disp(['The key som related to file ',n{i},...
+                ' is displayed in Figure ',num2str(fig),'.']);
+end
+if nargin>1
+    mov = close(mov);
+    disp(['Data exported to file ',filename,'.']);
+end
+disp(' ');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeysom/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function val = get(a, propName)
+% GET Get properties from the MIRchromagram object
+% and return the value
+
+switch propName
+    case 'Weight'
+        val = get(mirdata(a),'Data');
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeysom/keysomaudiodata.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeysom/mirkeysom.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+function varargout = mirkeysom(orig,varargin)
+%   ks = mirkeysom(x) projects a chromagram on a self-organizing map.
+% Creates a pseudocolor map showing the projection of chromagram onto a 
+% self-organizing map trained with the Krumhansl-Kessler profiles (modified
+% for chromagrams). Colors correspond to Pearson correlation values.
+% References:
+%	Toiviainen, P. & Krumhansl, C. L. (2003). Measuring and modeling 
+%	real-time responses to music: the dynamics of tonality induction. 
+%	Perception, 32(6), 741-766.
+%	Krumhansl, C. L., & Toiviainen, P. (2001) Tonal cognition. 
+%	In R. J. Zatorre & I. Peretz (Eds.), The Biological Foundations of Music. 
+%	Annals of the New York Academy of Sciences.
+
+   %     filename.key = 'File';
+   %     filename.type = 'String';
+   %     filename.default = 0;
+   % option.filename = filename;
+    
+specif.option = struct;
+specif.defaultframelength = 1;
+specif.defaultframehop = .5;
+
+varargout = mirfunction(@mirkeysom,orig,varargin,nargout,specif,@init,@main);
+
+
+function [c type] = init(orig,option)
+c = mirchromagram(orig,'Normal');
+type = 'mirkeysom';
+
+
+function s = main(c,option,postoption)
+if iscell(c)
+    c = c{1};
+end
+load keysomaudiodata;
+m = get(c,'Magnitude');
+disp('Projecting the chromagram to a self-organizing map...')
+z = cell(1,length(m));
+p = cell(1,length(m));
+for i = 1:length(m)
+    mi = m{i};
+    if not(iscell(mi))
+        mi = {mi};
+    end
+    zi = cell(1,length(mi));
+    pi = cell(1,length(mi));
+    for j = 1:length(mi)
+        mj = mi{j};
+        zj = zeros(24,size(mj,2),size(mj,3),36);
+        pi{j} = zeros(24,size(mj,2),size(mj,3),36);
+        for k = 1:size(mj,2)
+            for l = 1:size(mj,3)
+                for kk=1:36
+                    for ll=1:24
+                        tmp = corrcoef([mj(:,k,l) somw(:,kk,ll)]);
+                        zj(ll,k,l,kk) = tmp(1,2);
+                    end
+                end
+            end
+        end
+        zi{j} = zj;
+    end
+    z{i} = zi;
+    p{i} = pi;
+end
+s = class(struct,'mirkeysom',mirdata(c));
+s = purgedata(s);
+s = set(s,'Title','Key SOM','Abs','','Ord','','Weight',z,'Pos',p);
+%if option.filename
+%    mov = display(s,option.filename);
+%else
+%    mov = display(s);
+%end
+%s = {s,mov};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeysom/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function cc = set(c,varargin)
+% SET Set properties for the MIRchromagram object
+% and return the updated object
+
+propertyArgIn = varargin;
+d = mirdata(c);
+d = set(d,'Title',get(c,'Title'),'Abs',get(c,'Abs'),'Ord',get(c,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Weight'
+           d = set(d,'Data',val);
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+cc = class(struct,'mirkeysom',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeystrength/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function val = get(a, propName)
+% GET Get properties from the MIRchromagram object
+% and return the value
+
+switch propName
+    case 'Strength'
+        val = get(mirdata(a),'Data');
+    case 'Tonic'
+        val = get(mirdata(a),'Pos');
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeystrength/mirkeystrength.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+function varargout = mirkeystrength(orig,varargin)
+%   ks = mirkeystrength(x) computes the key strength, i.e., the probability
+%   	associated with each possible key candidate.
+%   Optional parameters:
+%       mirkeystrength(...,'Frame',l,h) orders a frame decomposition of window
+%           length l (in seconds) and hop factor h, expressed relatively to
+%           the window length. For instance h = 1 indicates no overlap.
+%           Default values: l = 1 seconds and h = .5
+%       The mirchromagram options 'Weight' and 'Triangle' can be specified.
+%   [ks,c] = mirkeystrength(...) also displays the chromagram used for the key 
+%       strength estimation.
+%
+% Krumhansl, Cognitive foundations of musical pitch. Oxford UP, 1990.
+% Gomez, Tonal description of polyphonic audio for music content processing,
+%   INFORMS Journal on Computing, 18-3, pp. 294-304, 2006.
+
+        wth.key = 'Weight';
+        wth.type = 'Integer';
+        wth.default = .5;
+    option.wth = wth;
+    
+        tri.key = 'Triangle';
+        tri.type = 'Boolean';
+        tri.default = 0;
+    option.tri = tri;
+
+specif.option = option;
+specif.defaultframelength = .1;
+specif.defaultframehop = .125;
+
+varargout = mirfunction(@mirkeystrength,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirchromagram'))
+    x = mirchromagram(x,'Weight',option.wth,'Triangle',option.tri,'Normal');
+else
+    x = mirchromagram(x,'Wrap','Normal');
+end
+type = 'mirkeystrength';
+
+
+function k = main(orig,option,postoption)
+if iscell(orig)
+    orig = orig{1};
+end
+if isa(orig,'mirkeystrength')
+    c = [];
+    k = orig;
+else
+    c = orig;
+    load gomezprofs;
+    m = get(c,'Magnitude');
+    st = cell(1,length(m));
+    kk = cell(1,length(m));
+    %disp('Computing key strengths...')
+    for i = 1:length(m)
+        mi = m{i};
+        if not(iscell(mi))
+            mi = {mi};
+        end
+        si = cell(1,length(mi));
+        ki = cell(1,length(mi));
+        for j = 1:length(mi)
+            mj = mi{j};
+            sj = zeros(12,size(mj,2),size(mj,3),2);
+            for k = 1:size(mj,2)
+                for l = 1:size(mj,3)
+                    tmp = corrcoef([mj(:,k,l) gomezprofs']);
+                    sj(:,k,l,1) = tmp(1,2:13);
+                    sj(:,k,l,2) = tmp(1,14:25);
+                    kj(:,k,l) = {'C','C#','D','D#','E','F','F#','G','G#','A','A#','B'};
+                end
+            end
+            si{j} = sj;
+            ki{j} = kj;
+        end
+        st{i} = si;
+        kk{i} = ki;
+    end
+    k = class(struct,'mirkeystrength',mirdata(c));
+    k = purgedata(k);
+    k = set(k,'Title','Key strength','Abs','tonal center','Ord','strength',...
+              'Tonic',kk,'Strength',st,'MultiData',{'maj','min'},'Interpolable',0);
+end
+k = {k c};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirkeystrength/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function cc = set(c,varargin)
+% SET Set properties for the MIRchromagram object
+% and return the updated object
+
+propertyArgIn = varargin;
+d = mirdata(c);
+d = set(d,'Title',get(c,'Title'),'Abs',get(c,'Abs'),'Ord',get(c,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Strength'
+           d = set(d,'Data',val);
+       case 'Tonic'
+           d = set(d,'Pos',val);
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+cc = class(struct,'mirkeystrength',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmatrix/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function display(m)
+% MATRIX/DISPLAY display of a matrix
+disp(' ');
+d = get(m,'Data');
+n = get(m,'Name');
+t = get(m,'Title');
+for i = 1:length(d)
+    for j = 1:length(d{i})
+        figure
+        h = imagesc(d{i}{j});
+        set(gca,'YDir','normal')
+        title(t)
+        fig = get(0,'CurrentFigure');
+        disp(['The ',t,' related to file ',n{i},' is displayed in Figure ',num2str(fig),'.']);
+    end
+end
+disp(' ');
+drawnow
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmatrix/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function val = get(a, propName)
+% GET Get properties from the MIRsimatrix object
+% and return the value
+
+switch propName
+    case 'DiagWidth'
+        val = a.diagwidth;
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmatrix/mirmatrix.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function m = mirmatrix(orig,varargin)
+% Simple numerical matrix object used to display for instance correlation
+% coefficients.
+
+m = class(struct,'mirmatrix',mirdata(orig));
+m = purgedata(m);
+m = set(m,'FramePos',[],varargin{:});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmfcc/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function val = get(a, propName)
+% GET Get properties from the MIRspectrum object
+% and return the value
+
+switch propName
+    case 'Rank'
+        val = get(mirdata(a),'Pos');
+    case 'Delta'
+        val = a.delta;
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmfcc/mirmfcc.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,156 @@
+function varargout = mirmfcc(orig,varargin)
+%   c = mirmfcc(a) finds the Mel frequency cepstral coefficients (ceps),
+%       a numerical description of the spectrum envelope.
+%
+%   Requires the Auditory Toolbox.
+%
+%   Optional arguments:
+%       c = mirmfcc(...,'Rank',N) computes the coefficients of rank(s) N
+%           (default: N = 1:13).
+%   If a is a frame decomposition, the temporal evolution of the MFCC,
+%       along the successive frames, is returned. In this case, a second
+%       option is available:
+%       mirmfcc(...,'Delta',d) performs d temporal differentiations of
+%           the coefficients, also called delta-MFCC (for d = 1) or
+%           delta-delta-MFCC (for d = 2).
+%       mirmfcc(...,'Delta') corresponds to mirmfcc(...,'Delta',1)
+%   Optional arguments related to the delta computation:
+%       mirmfcc(...,'Radius',r) specifies, for each frame, the number of
+%           successive and previous neighbouring frames taken into
+%           consideration for the least-square approximation.
+%           Usually 1 or 2.
+%           Default value: 2.
+
+        nbbands.key = 'Bands';
+        nbbands.type = 'Integer';
+        nbbands.default = 40;
+    option.nbbands = nbbands;
+
+        rank.key = 'Rank';
+        rank.type = 'Integer';
+        rank.default = 1:13;
+    option.rank = rank; 
+        
+        delta.key = 'Delta';
+        delta.type = 'Integer';
+        delta.default = 0;
+        delta.keydefault = 1;
+    option.delta = delta;
+        
+        radius.key = 'Radius';
+        radius.type = 'Integer';
+        radius.default = 2;
+    option.radius = radius;
+        
+specif.option = option;
+     
+varargout = mirfunction(@mirmfcc,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if isamir(x,'miraudio') || isamir(x,'mirspectrum')
+    x = mirspectrum(x,'Mel','log','Bands',option.nbbands);
+end
+type = 'mirmfcc';
+
+
+function c = main(orig,option,postoption)
+if iscell(orig)
+    orig = orig{1};
+end
+if isa(orig,'mirmfcc')
+    c = orig;
+    if option.rank
+        magn = get(c,'Data');
+        rank = get(c,'Rank');
+        for h = 1:length(magn)
+            for k = 1:length(magn{h})
+                m = magn{h}{k};
+                r = rank{h}{k};
+                r1 = r(:,1,1);
+                range = find(ismember(r1,option.rank));
+                magn{h}{k} = m(range,:,:);
+                rank{h}{k} = r(range,:,:);
+            end
+        end
+        c = set(c,'Data',magn,'Rank',rank);
+    end
+    c = modif(c,option);
+else
+    c.delta = 0;
+    %disp('Computing Mel frequency cepstral coefficients...');
+    e = get(orig,'Magnitude');
+
+    % The following is largely based on the source code from Auditory Toolbox 
+    % (A part that I could not call directly from MIRtoolbox)
+    
+    % (Malcolm Slaney, August 1993, (c) 1998 Interval Research Corporation)
+    
+    try
+        MakeERBFilters(1,1,1); % Just to be sure that the Auditory Toolbox is installed
+    catch
+        error(['ERROR IN MIRFILTERBANK: Auditory Toolbox needs to be installed.']);
+    end  
+    
+    dc = cell(1,length(e));
+    rk = cell(1,length(e));
+    for h = 1:length(e)
+        dc{h} = cell(1,length(e{h}));
+        rk{h} = cell(1,length(e{h}));
+        for i = 1:length(e{h})
+            ei = e{h}{i};
+            totalFilters = size(ei,3); %Number of mel bands.
+
+            % Figure out Discrete Cosine Transform.  We want a matrix
+            % dct(i,j) which is totalFilters x cepstralCoefficients in size.
+            % The i,j component is given by 
+            %                cos( i * (j+0.5)/totalFilters pi )
+            % where we have assumed that i and j start at 0.
+            mfccDCTMatrix = 1/sqrt(totalFilters/2)*...
+                            cos(option.rank' * ...
+                                (2*(0:(totalFilters-1))+1) * ...
+                                 pi/2/totalFilters);
+            rank0 = find(option.rank == 0);
+            mfccDCTMatrix(rank0,:) = mfccDCTMatrix(rank0,:) * sqrt(2)/2;
+            ceps = zeros(size(mfccDCTMatrix,1),size(ei,2));
+            for j = 1:size(ei,2)
+                ceps(:,j) = mfccDCTMatrix * permute(ei(1,j,:),[3 1 2]);
+            end
+            dc{h}{i} = ceps;
+            rk{h}{i} = repmat(option.rank(:),[1 size(ceps,2) size(ceps,3)]);
+        end
+    end
+    c = class(c,'mirmfcc',mirdata(orig));
+    c = purgedata(c);
+    c = set(c,'Title','MFCC','Abs','coefficient ranks','Ord','magnitude',...
+              'Data',dc,'Rank',rk);
+    c = modif(c,option);
+end
+c = {c orig};
+
+
+function c = modif(c,option)
+d = get(c,'Data');
+fp = get(c,'FramePos');
+t = get(c,'Title');
+if option.delta
+    M = option.radius;
+    for k = 1:option.delta
+        for h = 1:length(d)
+            for i = 1:length(d{h})
+                nc = size(d{h}{i},2)-2*M;
+                di = zeros(size(d{h}{i},1),nc);
+                for j = 1:M
+                    di = di + j * (d{h}{i}(:,M+j+(1:nc)) ...
+                                 - d{h}{i}(:,M-j+(1:nc)));
+                end
+                di = di / 2 / sum((1:M).^2); % MULTIPLY BY 2 INSTEAD OF SQUARE FOR NORMALIZATION ?
+                d{h}{i} = di;
+                fp{h}{i} = fp{h}{i}(:,M+1:end-M);
+            end
+        end
+        t = ['Delta-',t];
+    end
+end
+c = set(c,'Data',d,'FramePos',fp,'Delta',get(c,'Delta')+option.delta,...
+          'Title',t);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmfcc/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+function ss = set(s,varargin)
+% SET Set properties for the MIRspectrum object
+% and return the updated object
+
+propertyArgIn = varargin;
+dl = s.delta;
+d = mirdata(s);
+d = set(d,'Title',get(s,'Title'),'Abs',get(s,'Abs'),'Ord',get(s,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Rank'
+           d = set(d,'Pos',val);
+       case 'Delta'
+           df = val;
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+ss.delta = dl;
+ss = class(ss,'mirmfcc',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmidi/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function display(m)
+% MIRMIDI/DISPLAY display of MIDI representation
+
+figure
+disp(' ');
+d = get(m,'Data');
+n = get(m,'Name');
+for i = 1:length(d)
+    pianoroll(d{i});
+    fig = get(0,'CurrentFigure');
+    va = inputname(1);
+    if isempty(va)
+        va = 'ans';
+    end
+    disp([va,' is the MIDI representation related to file ',n{i},...
+        ' is displayed in Figure ',num2str(fig),'.']);
+end
+disp(' ');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmidi/mirmidi.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+function varargout = mirmidi(orig,varargin)
+%   m = mirmidi(x) converts into a MIDI sequence.
+%   Option associated to mirpitch function can be specified:
+%       'Contrast' with default value c = .3
+
+    thr.key = 'Contrast';
+    thr.type = 'Integer';
+    thr.default = .3;
+option.thr = thr;
+
+    mono.key = 'Mono';
+    mono.type = 'Boolean';
+    mono.default = 1;
+option.mono = mono;
+
+    release.key = {'Release','Releases'};
+    release.type = 'String';
+    release.choice = {'Olivier','Valeri',0,'no','off'};
+    release.default = 'Valeri';
+option.release = release;
+
+specif.option = option;
+
+varargout = mirfunction(@mirmidi,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+try
+    hz2midi(440);
+catch
+    mirerror('MIRMIDI','MIDItoolbox does not seem to be installed.');
+end
+if not(isamir(x,'mirmidi')) && not(isamir(x,'mirpitch'))
+    if isa(x,'mirdesign') && not(option.mono)
+        x = set(x,'SeparateChannels',1);
+    end
+    o = mironsets(x,'Attacks','Releases',option.release);
+    x = {o x};
+end
+type = 'mirmidi';
+    
+
+function m = main(x,option,postoption)
+if iscell(x) %not(isamir(x,'mirmidi'))
+    o = x{1};
+    a = x{2};
+    s = mirsegment(a,o);
+    x = mirpitch(s,'Contrast',option.thr,'Sum',0);
+    do = get(o,'PeakVal');
+    da = get(o,'AttackPos');
+    dr = get(o,'ReleasePos');
+    df = get(o,'FramePos');
+else
+    do = NaN;
+end
+dp = get(x,'Data');
+%fp = get(x,'FramePos');
+nmat = cell(1,length(dp));
+for i = 1:length(dp)
+    nmat{i} = [];
+    for j = 2:length(dp{i})
+        tij = mean(df{i}{1}(:,da{i}{1}{1}(j-1)));
+        dij = mean(df{i}{1}(:,dr{i}{1}{1}(j-1))) - tij;
+        if not(iscell(do))
+            vij = 120;
+        else
+            vij = round(do{i}{1}{1}(j-1)/max(do{i}{1}{1})*120);
+        end
+        for k = 1:size(dp{i}{j},3)
+            for l = 1:size(dp{i}{j},2)
+                for n = 1:length(dp{i}{j}{1,l,k})
+                    f = dp{i}{j}{1,l,k}(n);
+                    p = round(hz2midi(f));
+                    nmat{i} = [nmat{i}; tij dij 1 p vij tij dij];
+                end
+            end
+        end
+    end
+end
+m = class(struct,'mirmidi',mirdata(x));
+m = set(m,'Data',nmat);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmidi/mirplay.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function varargout = mirplay(a,varargin)
+% mirplay method for mirmidi objects.
+
+specif.option = struct;
+
+specif.eachchunk = 'Normal';
+
+varargout = mirfunction(@mirplay,a,varargin,nargout,specif,@init,@main);
+if nargout == 0
+    varargout = {};
+end
+
+
+function [x type] = init(x,option)
+type = '';
+
+
+function noargout = main(a,option,postoption)
+if iscell(a)
+    a = a{1};
+end
+d = get(a,'Data');
+n = get(a,'Name');
+for k = 1:length(d)
+    display(['Playing analysis of file: ' n{k}])   
+    playmidi(d{k});
+end
+noargout = {};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirmidi/mirsave.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function mirsave(m)
+
+nmat = get(m,'Data');
+n = get(m,'Name');
+for k = 1:length(nmat)
+    writemidi(nmat{k},[n{k},'.mid'],120,60);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpattern/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function display(p)
+
+% MIRPATTERN/DISPLAY display of pattern
+
+figure
+hold on
+
+k = 0;
+
+for i = 1:length(p.pattern)
+    display(['Pattern # ',num2str(i)])
+    col = num2col(i);
+    for j = 1:length(p.pattern{i}.occurrence)
+        display(['Occurrence # ',num2str(j)])
+        p.pattern{i}.occurrence{j}
+        fill([p.pattern{i}.occurrence{j}.start ...
+              p.pattern{i}.occurrence{j}.end ...
+              p.pattern{i}.occurrence{j}.end ...
+              p.pattern{i}.occurrence{j}.start], ...
+              [k k k+1 k+1],col);
+        k = k+1;
+    end
+    display('**************')
+end
+
+xlabel('time (in s.)')
+ylabel('pattern and their occurrences')
+set(gca,'YTick',[])
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpattern/mirpattern.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+function varargout = mirpattern(orig,varargin)
+%   p = mirpattern(a)
+
+        period.key = 'Period';
+        period.type = 'Boolean';
+        period.when = 'After';
+        period.default = 0;
+    option.period = period;
+        
+specif.option = option;
+     
+varargout = mirfunction(@mirpattern,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirpattern'))
+    x = mirsimatrix(x);
+end
+type = 'mirpattern';
+
+
+function p = main(orig,option,postoption)
+if not(isamir(orig,'mirpattern'))
+    b = get(orig,'Branch');
+    fp = get(orig,'FramePos');
+    pp = get(orig,'PeakPos');
+    for i = 1:length(b)
+        bi = b{i}{1}{1};
+        pi1 = sort(pp{i}{1}{bi(1,1)});
+        pi2 = sort(pp{i}{1}{bi(end,1)}); 
+        p.pattern{1}.occurrence{1}.start = ...
+            fp{i}{1}(1,bi(1,1)) - mean(fp{i}{1}(1:2,pi1(bi(1,2))));
+        p.pattern{end}.occurrence{2}.start = ...
+            fp{i}{1}(1,bi(1,1));
+        p.pattern{end}.occurrence{1}.end = ...
+            fp{i}{1}(1,bi(end,1)) - mean(fp{i}{1}(1:2,pi2(bi(end,2))));
+        p.pattern{end}.occurrence{2}.end = ...
+            fp{i}{1}(1,bi(end,1));
+    end
+    p = class(p,'mirpattern',mirdata(orig));
+end
+if postoption.period
+    for i = 1:length(p.pattern)
+        poi = p.pattern{i}.occurrence;
+        if poi{1}.end > poi{2}.start
+            poi{1}.end = poi{2}.start;
+            cycle = poi{1}.end - poi{1}.start;
+            ncycles = floor((poi{2}.end-poi{2}.start)/cycle)+2;
+            poi{ncycles}.end = poi{2}.end;
+            poi{2}.end = poi{2}.start + cycle;
+            for j = 2:ncycles-1
+                poi{j}.end = poi{j}.start + cycle;
+                poi{j+1}.start = poi{j}.end;
+            end
+        end
+        p.pattern{i}.occurrence = poi;
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpattern/mirplay.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+function varargout = mirplay(p,varargin)
+
+        pat.key = 'Pattern';
+        pat.type = 'Integer';
+        pat.default = 0;
+    option.pat = pat;
+            
+specif.option = option;
+
+specif.eachchunk = 'Normal';
+
+varargout = mirfunction(@mirplay,p,varargin,nargout,specif,@init,@main);
+if nargout == 0
+    varargout = {};
+end
+
+
+function [x type] = init(x,option)
+type = '';
+
+
+function noargout = main(p,option,postoption)
+if not(option.pat)
+    option.pat = 1:length(p.pattern);
+end
+n = get(p,'Name');
+for h = 1:length(n)
+    for i = option.pat
+        display(['Pattern # ',num2str(i)])
+        for j = 1:length(p.pattern{i}.occurrence)
+            display(['Occurrence # ',num2str(j)])
+            a = miraudio(n{h},'Extract',p.pattern{i}.occurrence{j}.start,...
+                                     p.pattern{i}.occurrence{j}.end);
+            mirplay(a)
+        end
+    end
+end
+noargout = {};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpitch/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function val = get(p, propName)
+% GET Get properties from the MIRpitch object
+% and return the value
+
+switch propName
+    case 'Amplitude'
+        val = p.amplitude;
+    otherwise
+        val = get(mirscalar(p),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpitch/mirpitch.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,378 @@
+function varargout = mirpitch(orig,varargin)
+%   p = mirpitch(x) evaluates the pitch frequencies (in Hz).
+%   Specification of the method(s) for pitch estimation (these methods can
+%       be combined):
+%       mirpitch(...,'Autocor') computes an autocorrelation function
+%           (Default method)
+%           mirpitch(...'Enhanced',a) computes enhanced autocorrelation
+%               (see help mirautocor)
+%              toggled on by default
+%           mirpitch(...,'Compress',k) performs magnitude compression
+%               (see help mirautocor)
+%           mirpitch(...,fb) specifies a type of filterbank.
+%               Possible values:
+%                   fb = 'NoFilterBank': no filterbank decomposition
+%                   fb = '2Channels' (default value)
+%                   fb = 'Gammatone' 
+%       mirpitch(...,'AutocorSpectrum') computes the autocorrelation of
+%           the FFT spectrum
+%       mirpitch(...,'Cepstrum') computes the cepstrum
+%       Alternatively, an autocorrelation or a cepstrum can be directly
+%           given as first argument of the mirpitch function.
+%   Peak picking options:
+%       mirpitch(...,'Total',m) selects the m best pitches.
+%           Default value: m = Inf, no limit is set concerning the number
+%           of pitches to be detected.
+%       mirpitch(...,'Mono') corresponds to morpitch(...,'Total',1)
+%       mirpitch(...,'Min',mi) indicates the lowest frequency taken into
+%           consideration.
+%           Default value: 75 Hz. (Praat)
+%       mirpitch(...,'Max',ma) indicates the highest frequency taken into
+%           consideration. 
+%           Default value: 2400 Hz. Because there seems to be some problems
+%           with higher frequency, due probably to the absence of 
+%           pre-whitening in our implementation of Tolonen and Karjalainen
+%           approach (used by default, cf. below).
+%       mirpitch(...,'Contrast',thr) specifies a threshold value.
+%           (see help peaks)
+%           Default value: thr = .1
+%       mirpitch(...,'Order',o) specifies the ordering for the peak picking.
+%           Default value: o = 'Amplitude'.
+%       Alternatively, the result of a mirpeaks computation can be directly
+%           given as first argument of the mirpitch function.
+%   Post-processing options:
+%       mirpitch(...,'Sum','no') does not sum back the channels at the end 
+%           of the computation. The resulting pitch information remains
+%           therefore decomposed into several channels.
+%       mirpitch(...,'Median') performs a median filtering of the pitch
+%           curve. When several pitches are extracted in each frame, the
+%           pitch curve contains the best peak of each successive frame.
+%       mirpitch(...,'Stable',th,n) remove pitch values when the difference 
+%           (or more precisely absolute logarithmic quotient) with the
+%           n precedent frames exceeds the threshold th. 
+%           if th is not specified, the default value .1 is used
+%           if n is not specified, the default value 3 is used
+%       mirpitch(...'Reso',r) removes peaks whose distance to one or
+%           several higher peaks is lower than a given threshold.
+%           Possible value for the threshold r:
+%               'SemiTone': ratio between the two peak positions equal to
+%                   2^(1/12)
+%       mirpitch(...,'Frame',l,h) orders a frame decomposition of window
+%           length l (in seconds) and hop factor h, expressed relatively to
+%           the window length. For instance h = 1 indicates no overlap.
+%           Default values: l = 46.4 ms and h = 10 ms (Tolonen and
+%           Karjalainen, 2000)
+%   Preset model:
+%       mirpitch(...,'Tolonen') implements (part of) the model proposed in
+%           (Tolonen & Karjalainen, 2000). It is equivalent to
+%           mirpitch(...,'Enhanced',2:10,'Generalized',.67,'2Channels')
+%   [p,a] = mirpitch(...) also displays the result of the method chosen for
+%       pitch estimation, and shows in particular the peaks corresponding
+%       to the pitch values.
+%   p = mirpitch(f,a,<r>) creates a mirpitch object based on the frequencies
+%       specified in f and the related amplitudes specified in a, using a
+%       frame sampling rate of r Hz (set by default to 100 Hz).
+%
+%   T. Tolonen, M. Karjalainen, "A Computationally Efficient Multipitch 
+%       Analysis Model", IEEE TRANSACTIONS ON SPEECH AND AUDIO PROCESSING,
+%       VOL. 8, NO. 6, NOVEMBER 2000
+
+        ac.key = 'Autocor';
+        ac.type = 'Boolean';
+        ac.default = 0;
+    option.ac = ac;
+    
+            enh.key = 'Enhanced';
+            enh.type = 'Integer';
+            enh.default = 2:10;
+        option.enh = enh;
+
+            filtertype.type = 'String';
+            filtertype.choice = {'NoFilterBank','2Channels','Gammatone'};
+            filtertype.default = '2Channels';
+        option.filtertype = filtertype;
+
+            gener.key = {'Generalized','Compress'};
+            gener.type = 'Integer';
+            gener.default = .5;
+        option.gener = gener;
+
+        as.key = 'AutocorSpectrum';
+        as.type = 'Boolean';
+        as.default = 0;
+    option.as = as;
+    
+        s.key = 'Spectrum';
+        s.type = 'Boolean';
+        s.default = 0;
+    option.s = s;
+        
+        ce.key = 'Cepstrum';
+        ce.type = 'Boolean';
+        ce.default = 0;
+    option.ce = ce;
+        
+%% peak picking options
+
+        m.key = 'Total';
+        m.type = 'Integer';
+        m.default = Inf;
+    option.m = m;
+    
+        multi.key = 'Multi';
+        multi.type = 'Boolean';
+        multi.default = 0;
+    option.multi = multi;
+
+        mono.key = 'Mono';
+        mono.type = 'Boolean';
+        mono.default = 0;
+    option.mono = mono;
+
+        mi.key = 'Min';
+        mi.type = 'Integer';
+        mi.default = 75;
+    option.mi = mi;
+        
+        ma.key = 'Max';
+        ma.type = 'Integer';
+        ma.default = 2400;
+    option.ma = ma;
+        
+        thr.key = 'Contrast';
+        thr.type = 'Integer';
+        thr.default = .1;
+    option.thr = thr;
+    
+        order.key = 'Order';
+        order.type = 'String';
+        order.choice = {'Amplitude','Abscissa'};
+        order.default = 'Amplitude';
+    option.order = order;    
+
+        reso.key = 'Reso';
+        reso.type = 'String';
+        reso.choice = {0,'SemiTone'};
+        reso.default = 0;
+    option.reso = reso;
+        
+        track.key = 'Track';        % Not used yet
+        track.type = 'Boolean';
+        track.default = 0;
+    option.track = track;
+
+%% post-processing options
+        
+        stable.key = 'Stable';
+        stable.type = 'Integer';
+        stable.number = 2;
+        stable.default = [Inf 0];
+        stable.keydefault = [.1 3];
+    option.stable = stable;
+    
+        median.key = 'Median';
+        median.type = 'Integer';
+        median.default = 0;
+        median.keydefault = .1;
+    option.median = median;
+    
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [0 0];
+        frame.keydefault = [NaN NaN];
+    option.frame = frame;
+
+        sum.key = 'Sum';
+        sum.type = 'Boolean';
+        sum.default = 1;
+    option.sum = sum;
+    
+%% preset model
+
+        tolo.key = 'Tolonen';
+        tolo.type = 'Boolean';
+        tolo.default = 0;
+    option.tolo = tolo;
+    
+specif.option = option;
+specif.chunkframebefore = 1;
+
+if isnumeric(orig)
+    if nargin<3
+        f = 100;
+    else
+        f = varargin{2};
+    end
+    fp = (0:size(orig,1)-1)/f;
+    fp = [fp;fp+1/f];
+    p.amplitude = {{varargin{1}'}};
+    s = mirscalar([],'Data',{{orig'}},'Title','Pitch','Unit','Hz',...
+                     'FramePos',{{fp}},'Sampling',f,'Name',{inputname(1)});
+    p = class(p,'mirpitch',s);
+    varargout = {p};
+else
+    varargout = mirfunction(@mirpitch,orig,varargin,nargout,specif,@init,@main);
+end
+
+
+
+function [y type] = init(orig,option)
+if option.tolo
+    option.enh = 2:10;
+    option.gener = .67;
+    option.filtertype = '2Channels';
+end
+if not(option.ac) && not(option.as) && not(option.ce) && not(option.s)
+    option.ac = 1;
+end
+if isnan(option.frame.length.val)
+    option.frame.length.val = .0464;
+end
+if isnan(option.frame.hop.val)
+    option.frame.hop.val = .01;
+    option.frame.hop.unit = 's';
+end
+if isamir(orig,'mirscalar') || haspeaks(orig)
+    y = orig;
+else
+    if isamir(orig,'mirautocor')
+        y = mirautocor(orig,'Min',option.mi,'Hz','Max',option.ma,'Hz','Freq');
+    elseif isamir(orig,'mircepstrum')
+        y = orig;
+    elseif isamir(orig,'mirspectrum')
+        if not(option.as) && not(option.ce) && not(option.s)
+            option.ce = 1;
+        end
+        if option.as
+            y = mirautocor(orig,...
+                            'Min',option.mi,'Hz','Max',option.ma,'Hz');
+        end
+        if option.ce
+            ce = mircepstrum(orig,'freq',...
+                            'Min',option.mi,'Hz','Max',option.ma,'Hz');
+            if option.as
+                y = y*ce;
+            else
+                y = ce;
+            end
+        end
+    else
+        if option.ac
+            x = orig;
+            if not(strcmpi(option.filtertype,'NoFilterBank'))
+                x = mirfilterbank(x,option.filtertype);
+            end
+            x = mirframenow(x,option);
+            y = mirautocor(x,'Generalized',option.gener,...
+                                'Min',option.mi,'Hz','Max',option.ma,'Hz');
+            if option.sum
+                y = mirsummary(y);
+            end
+            y = mirautocor(y,'Enhanced',option.enh,'Freq');
+        end
+        if option.as || option.ce || option.s
+            x = mirframenow(orig,option);
+            y = mirspectrum(x);
+            if option.as
+                as = mirautocor(y,...
+                                'Min',option.mi,'Hz','Max',option.ma,'Hz');
+                if option.ac
+                    y = y*as;
+                else
+                    y = as;
+                end
+            end
+            if option.ce
+                ce = mircepstrum(y,'freq',...
+                                'Min',option.mi,'Hz','Max',option.ma,'Hz');
+                if option.ac || option.as
+                    y = y*ce;
+                else
+                    y = ce;
+                end
+            end
+        end
+    end
+end
+type = {'mirpitch',mirtype(y)};
+    
+
+function o = main(x,option,postoption)
+if option.multi && option.m == 1
+    option.m = Inf;
+end
+if option.mono && option.m == Inf
+    option.m = 1;
+end
+if iscell(x)
+    x = x{1};
+end
+if not(isa(x,'mirpitch'))
+    x = mirpeaks(x,'Total',option.m,'Track',option.track,...
+                   'Contrast',option.thr,'Threshold',.4,...
+                   'Reso',option.reso,'NoBegin','NoEnd',...
+                   'Order',option.order);
+end
+if isa(x,'mirscalar')
+    pf = get(x,'Data');
+else
+    pf = get(x,'PeakPrecisePos');
+    pa = get(x,'PeakPreciseVal');
+end
+fp = get(x,'FramePos');
+if option.stable(1) < Inf
+    for i = 1:length(pf)
+        for j = 1:length(pf{i})
+            for k = 1:size(pf{i}{j},3)
+                for l = size(pf{i}{j},2):-1:option.stable(2)+1
+                    for m = length(pf{i}{j}{1,l,k}):-1:1
+                        found = 0;
+                        for h = 1:option.stable(2)
+                            for n = 1:length(pf{i}{j}{1,l-h,k})
+                                if abs(log10(pf{i}{j}{1,l,k}(m) ...
+                                            /pf{i}{j}{1,l-h,k}(n))) ...
+                                       < option.stable(1)
+                                    found = 1;
+                                end
+                            end
+                        end
+                        if not(found)
+                            pf{i}{j}{1,l,k}(m) = [];
+                        end
+                    end
+                    pf{i}{j}{1,1,k} = zeros(1,0);
+                end
+            end
+        end
+    end
+end
+if option.median
+    sr = get(x,'Sampling');
+    for i = 1:length(pf)
+        for j = 1:length(pf{i})
+            if size(fp{i}{j},2) > 1
+                npf = zeros(size(pf{i}{j}));
+                for k = 1:size(pf{i}{j},3)
+                    for l = 1:size(pf{i}{j},2)
+                        if isempty(pf{i}{j}{1,l,k})
+                            npf(1,l,k) = NaN;
+                        else
+                            npf(1,l,k) = pf{i}{j}{1,l,k}(1);
+                        end
+                    end
+                end
+                pf{i}{j} = medfilt1(npf,...
+                     round(option.median/(fp{i}{j}(1,2)-fp{i}{j}(1,1))));
+            end
+        end
+    end
+end
+if isa(x,'mirscalar')
+    p.amplitude = 0;
+else
+    p.amplitude = pa;
+end
+s = mirscalar(x,'Data',pf,'Title','Pitch','Unit','Hz');
+p = class(p,'mirpitch',s);
+o = {p,x};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpitch/mirsave.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,90 @@
+function mirsave(a)
+
+d = get(a,'Data');
+if isa(a,'mirpitch')
+    amp = get(a,'Amplitude');
+end
+n = get(a,'Name');
+t = get(a,'Title');
+c = get(a,'Channels');
+fp = get(a,'FramePos');
+out = cell(1,length(d));
+
+for k = 1:length(d)
+    dk = d{k};
+    if not(iscell(dk))
+        dk = {dk};
+    end
+    out = [];
+    for l = 1:size(dk{1},3)
+        for i = 1:length(dk)
+            di = dk{i};
+            if isa(a,'mirpitch')
+                ampi = amp{k}{i};
+            end
+            synth = zeros(1,ceil((fp{k}{i}(end)-fp{k}{i}(1))*44100)+1);
+            for j = 1:size(di,2)
+                if iscell(di)
+                    dj = di{j};
+                else
+                    dj = di(:,j);
+                end
+                dj(isnan(dj)) = 0;
+                ampj = zeros(size(dj));
+                if iscell(ampi)
+                    ampj(1:size(ampi{j})) = ampi{j};
+                else
+                    ampj(1:size(ampi(:,j))) = ampi(:,j);
+                end
+                if not(isempty(dj))
+                    k1 = floor((fp{k}{i}(1,j)-fp{k}{i}(1))*44100)+1;
+                    k2 = floor((fp{k}{i}(2,j)-fp{k}{i}(1))*44100)+1;
+                    if isa(a,'mirpitch')
+                        ampj = repmat(ampj,1,k2-k1+1);
+                    else
+                        ampj = ones(size(dj),k2-k1+1);
+                    end
+                    synth(k1:k2) = synth(k1:k2) ...
+                        + sum(ampj.*sin(2*pi*dj*(0:k2-k1)/44100),1) ...
+                                .*hann(k2-k1+1)';
+                end
+            end
+            out = [out synth];
+            if size(dk{1},3)>1
+                out = [out rand(1,10)];
+            end
+        end
+    end
+    fout = miraudio(out,44100);
+    mirsave(fout,[n{k},'.',t]);
+end
+
+
+function oldmirsave % not used anymore
+d = get(a,'Data');
+nf = length(d);
+fp = get(a,'FramePos');
+nm = get(a,'Name');
+t = get(a,'Title');
+for i = 1:nf
+    nmi = nm{i};
+    di = d{i}{1};
+    fpi = fp{i}{1};
+    
+    %Let's remove the extension from the original files
+    if length(nmi)>3 && strcmpi(nmi(end-3:end),'.wav')
+        nmi(end-3:end) = [];
+    elseif length(nmi)>2 && strcmpi(nmi(end-2:end),'.au')
+        nmi(end-2:end) = [];
+    end    
+    n = [nmi,'.',lower(t),'.txt'];
+    
+    fid = fopen(n, 'wt');
+    fprintf(fid,'Frame_start Frame_end Data \n');
+
+    for j = 1:length(di)
+        fprintf(fid,'%g %g %g \n',fpi(1,j),fpi(2,j),di(j));
+    end
+    fclose(fid);
+    disp([n,' saved.']);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirpitch/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function pp = set(p,varargin)
+% SET Set properties for the MIRpitch object
+% and return the updated object
+
+propertyArgIn = varargin;
+a = p.amplitude;
+s = mirscalar(p);
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Amplitude'
+           a = val;
+       otherwise
+           s = set(s,prop,val);
+   end
+end
+pp.amplitude = a;
+pp = class(pp,'mirpitch',s);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirquery/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function display(q)
+
+% MIRQUERY/DISPLAY display of mirquery
+
+disp(['Query: ',q.query.name{1}]);
+disp('********')
+disp('Retrieval:')
+for i = 1:length(q.dist)
+    disp([num2str(i),'. ',q.name{i},' (dist = ',num2str(q.dist(i)),')']);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirquery/mirplay.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function mirplay(q,varargin)
+
+rank = 1:length(q.name);
+if nargin>2 && strcmpi(varargin{1},'Sequence')
+    rank = intersect(rank,varargin{2});
+end
+disp(['Query: ',q.query.name{1}]);
+mirplay(q.query.name{1});
+disp('********')
+disp('Retrieval:')
+for i = rank
+    disp([num2str(i),'. ',q.name{i},' (dist = ',num2str(q.dist(i)),')']);
+    mirplay(q.name{i});
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirquery/mirquery.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+function res = mirquery(varargin)
+%   r = mirquery(q,b), where
+%           q is the analysis of one audio file and 
+%           b is the analysis of a folder of audio files,
+%               according to the same mirtoolbox feature,
+%       returns the name of the audio files in the database b in an
+%           increasing distance to q with respect to the chosen feature.
+%   r = mirquery(d), where
+%           d is the distance between one audio file and a folder of audio
+%           file, according to a mirtoolbox feature,
+%       returns the name of the audio files in an increasing distance d.
+%
+%   Optional argument:
+%       mirquery(...,'Best',n) returns the name of the n closest audio
+%           files.
+%       mirquery(..,'Distance',d) specifies the distance to use.
+%           Default value: d = 'Cosine'   (cf. mirdist)
+
+[distfunc,nbout] = scanargin(varargin);
+
+if nargin<2 || not(isa(varargin{2},'mirdata'))
+    returnval=0;
+    dist = varargin{1};
+    name =  get(dist,'Name2');
+    res.query.val = [];
+    res.query.name = get(dist,'Name');
+else
+    returnval=1;
+    query = varargin{1};
+    base = varargin{2};
+    name = get(base,'Name');
+    res.query.val = mirgetdata(query);
+    res.query.name = get(query,'Name');
+    database = mirgetdata(base);
+    dist = mirdist(query,base,distfunc);
+end
+datadist = mirgetdata(dist);
+
+[ordist order] = sort(datadist);
+order(isnan(ordist)) = [];
+nbout = min(nbout,length(order));
+res.dist = ordist(1:nbout);
+if returnval
+    res.val = database(order);
+else
+    res.val = [];
+end
+res.name = name(order);
+
+res = class(res,'mirquery');
+
+
+
+function [distfunc,nbout] = scanargin(v)
+distfunc = 'Cosine';
+nbout=Inf;
+i = 1;
+while i <= length(v)
+    arg = v{i};
+    if ischar(arg) && strcmpi(arg,'Distance')
+        if length(v)>i && ischar(v{i+1})
+            i = i+1;
+            distfunc = v{i};
+        end
+    elseif ischar(arg) && strcmpi(arg,'Best')
+        if length(v)>i && isnumeric(v{i+1})
+            i = i+1;
+            nbout = v{i};
+        end
+    %else
+    %    error('ERROR IN MIRQUERY: Syntax error. See help mirquery.');
+    end    
+    i = i+1;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/corrcoef.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function r = corrcoef(x,y)
+
+dx = get(x,'Data');
+dy = get(y,'Data');
+fx = get(x,'FramePos');
+fy = get(y,'FramePos');
+dr = cell(1,length(fx));
+for h = 1:length(fx)
+    dr{h} = cell(1,length(fx{h}));
+    for i = 1:length(fx{h})
+        [f,ix,iy] = intersect(fx{h}{i}',fy{h}{i}','rows');
+        dxi = dx{h}{i}(:,ix,:,:);
+        dyi = dy{h}{i}(:,iy,:,:);
+        dr{h}{i} = corrcoef(dxi,dyi);
+    end
+end
+r = mirmatrix(x,'Data',dr,'Title','Correlation coefficients','Unit','');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,343 @@
+function display(s,varargin)
+% SCALAR/DISPLAY display the values of a scalar object
+disp(' ');
+p = get(s,'Pos');
+v = get(s,'Data');
+m = get(s,'Mode');
+t = get(s,'Title');
+n = get(s,'Name');
+n2 = get(s,'Name2');
+u = get(s,'Unit');
+fp = get(s,'FramePos');
+pp = get(s,'PeakPos');
+leg = get(s,'Legend');
+legm = get(s,'MultiData');
+cha = get(s,'Channels');
+for i = 1:length(v)  % For each audio file
+    vi = v{i};
+    if isempty(m)
+        mi = [];
+    else
+        mi = m{i};
+    end
+    fpi = fp{i};
+    if isempty(pp)
+        ppi = [];
+    else
+        ppi = pp{i};
+    end
+    
+    if isempty(vi)
+        disp(['The ',t,' related to file ',n{i},...
+                    ' does not contain any data.']);
+        return
+    end
+    
+    %if iscell(ppi)
+    %    ppi = ppi{i};
+    %end
+    
+    if size(vi,1) == 1 && size(vi,2) == 1 && size(vi,3) == 1 && ...
+            (not(iscell(vi)) || (size(vi{1},1) == 1 && ...
+                    size(vi{1},2) == 1 && size(vi{1},3) == 1)) && ...
+            (not(iscell(vi{1})) || (size(vi{1}{1},1) == 1 && ...
+                    size(vi{1}{1},2) == 1 && size(vi{1},3) == 1))
+        % Simple results, returned directly in the Command Window
+        
+        if iscell(vi) 
+            vi = vi{1}; % There is only one segment, so let's look at it
+            if not(isempty(mi))
+                mi = mi{1};
+            end
+        end
+        if iscell(vi) 
+            if size(vi,2) > 1
+                error('BUG IN DISPLAY'); %test if this condition exists
+            end
+            vi = vi{1}; % There is only one frame, so let's look at it
+            if not(isempty(mi))
+                mi = mi{1};
+            end
+        end
+        if size(vi,1) == 1 && size(vi,3) == 1
+            if isempty(leg)
+                r = num2str(vi);
+            else
+                r = leg{vi};
+            end
+            if not(isempty(mi))
+                u = legm{mi};
+            end
+            if strcmp(u,'/1')
+                u = '';
+            end
+            if strcmp(r,'NaN')
+                r = 'undefined';
+                u = '';
+            end
+            if not(isempty(n2))
+                disp(['The ',t,' between files ',n{1},' and ',n2{i},...
+                        ' is ',r,' ',u]);
+            else
+                disp(['The ',t,' related to file ',n{i},' is ',r,' ',u]);
+            end
+        else
+            vi = squeeze(vi);
+            disp(['The ',t,' related to file ',n{i},' are:']);
+            for j = 1:size(vi,1)
+                if isempty(leg)
+                    r = num2str(vi(j));
+                else
+                    r = leg{vi(j)};
+                end
+                if not(isempty(mi))
+                    u = legm{mi(j)};
+                end
+                if strcmp(r,'NaN')
+                    r = 'undefined';
+                    u = '';
+                end
+                disp(['Value #',num2str(j),': ',r,' ',u]);
+            end
+        end
+        
+    else
+        %Graphical display
+        figure
+        
+        if not(iscell(vi))
+            vi = {vi};
+            fpi = {fpi};
+            ppi = {ppi};
+        end
+        
+        nl = size(vi{1},1);    % Number of bins
+        nc = size(vi{1},2);    % Number of frames
+        l = size(vi{1},3);     % Number of channels
+        il = (1-0.15)/l;
+        
+        if nc==1 && l>1        % If one frame and several channels
+            xlab = 'Channels'; % channels will be represented in the x axis
+            l = 1;
+        else
+            xlab = 'Temporal location of events (in s.)';
+        end
+
+        varpeaks = 0; % Variable data size over frames?
+        if iscell(vi{1})
+            for j = 1:length(vi)
+                for k = 1:l 
+                    for h = 1:size(vi{j},2)
+                        if length(vi{j}{1,h,k}) > 1
+                            varpeaks = 1;
+                        end
+                    end
+                end
+            end
+            if not(varpeaks)
+                for j = 1:length(vi)
+                    vj = zeros(size(vi{j}));
+                    for k = 1:l 
+                        for h = 1:size(vi{j},2)
+                            if isempty(vi{j}{1,h,k})
+                                vj(1,h,k) = NaN;
+                            else
+                                vj(1,h,k) = vi{j}{1,h,k};
+                            end
+                        end
+                    end
+                    vi{j} = vj;
+                end
+            end
+        end
+                
+        if varpeaks         % Peaks displayed with diamonds
+            diamond = 1;
+            set(gca,'NextPlot','replacechildren')
+            hold on
+        else
+            diamond = 0;
+            hold all
+        end
+
+        for k = 1:l         % For each channel
+            if l>1
+                subplot('Position',[0.1 (k-1)*il+0.1 0.89 il-0.02])
+            end
+            hold on
+            
+            vold = NaN;     % Buffers used to link curves between segments
+            fold = NaN;
+            
+            for j = 1:length(vi)     % for each segment
+                vj = vi{j};
+                
+                fpj = fpi{j};
+                if isempty(ppi) || length(ppi)<j
+                    ppj = [];
+                else
+                    ppj = ppi{j};
+                end
+
+                if strcmp(xlab,'Channels')
+                    %vj = squeeze(vj); % does not work with lowenergy
+                    %ppj = squeeze(ppj);
+                    vj = shiftdim(vj,1);
+                    ppj = shiftdim(ppj,1);
+                    fpj = cha{i};
+                end
+                
+                minvi = Inf;    % The limits of the rectangle bordering segments
+                maxvi = -Inf;
+                
+                if diamond
+                    % Variable data size for each frame
+                    legobj = [];
+                    legval = [];
+                    
+                    if not(strcmp(xlab,'Channels'))
+                        if iscell(fpi(1,j))
+                            fpj = fpi{j};
+                        else
+                            error('BUG IN DISPLAY'); %test if this condition exists
+                            fpj = fpi(:,j);
+                        end
+                    end
+                                        
+                    for h = 1:size(vj,2)    % for each frame
+                        if not(isempty(vj{1,h,k}))
+                            if isempty(mi)
+                                % No use of legends
+                                if not(isempty(vj{1,h,k}))
+                                    plot(mean(fpj(:,h),1),vj{1,h,k},'d',...
+                                        'LineWidth',2,'MarkerFaceColor','b');
+                                end
+                                
+                            else
+                                % Use of legends
+                                mj = mi{j}{1,h,k};
+                                lmj = length(mj);
+                                for kk = 1:lmj
+                                    handle = plot(mean(fpj(:,h),1),vj{1,h,k}(kk),'d',...
+                                        'Color',num2col(mj(kk)),...
+                                        'MarkerSize',7+(lmj-kk)*2,...
+                                        'MarkerFaceColor',num2col(mj(kk)));
+                                    if isempty(find(legval == mj(kk)))
+                                        legval = [legval mj(kk)];
+                                        legobj = [legobj handle];
+                                    end
+                                end
+                            end
+                            
+                            %if not(isempty(ppi)) ...    % Peaks display
+                            %&& not(isempty(find(ppi{1} == j)))
+                            %    plot(mean(fpj(:,h),1),vj{1,h,k},'+r')
+                            %end
+                        end
+                        
+                        if not(isempty(vj{1,h,k}))
+                            minvi = min(minvi,min(vj{1,h,k}));
+                            maxvi = max(maxvi,max(vj{1,h,k}));
+                        end
+                    end
+
+                    if (exist('legm') == 1) && not(isempty(legm))
+                        legend(legobj,legm{legval},'Location','Best') 
+                    end
+                    
+                else
+                    % Constant data size along frames
+                    
+                    for h = 1:nl    % For each dimension represented
+                        %if not(isempty(vj(h,:,k)))
+                            if isnan(vold)
+                                plot(mean(fpj,1),vj(h,:,k)',...
+                                    '+-','Color',num2col(h))
+                            else
+                                plot([fold mean(fpj,1)],[vold(h) vj(h,:,k)]',...
+                                    '+-','Color',num2col(h))
+                                % Current curve linked with curve from
+                                % previous segment
+                            end
+                            if h == nl
+                                if isempty(vj)
+                                    vold = NaN;
+                                    fold = NaN;
+                                else
+                                    vold = vj(:,end,k);
+                                    fold = mean(fpj(:,end),1);
+                                end
+                            end
+                       % else
+                       %     vold = NaN;
+                       %     fold = NaN;
+                       % end
+                    end
+                    
+                    if not(isempty(ppj))                % Peaks display
+                        for h = 1:nl;
+                            ppj = ppj{1,h,k};
+                            plot(mean(fpj(:,ppj)),vj(h,ppj,k),'or')
+                        end
+                    end
+                                        
+                    minvi = min(minvi,min(min(vj(h,:,k))));
+                    maxvi = max(maxvi,max(max(vj(h,:,k))));
+                end
+                
+                if length(vi)>1 && size(vj,2)>1 && minvi<Inf && maxvi>-Inf
+                    % Display of the segment rectangle
+                    rectangle('Position',[fpj(1),minvi,...
+                        fpj(end)-fpj(1),maxvi-minvi]+1e-16,...
+                        'EdgeColor',num2col(j),'Curvature',.1,'LineWidth',1)
+                end
+            end
+            if k == l
+                title([t,', ',n{i}])
+            end
+            if k == 1
+                xlabel(xlab)
+            end
+            if not(isempty(leg))
+                set(gca,'ytick',(1:length(leg)))
+                set(gca,'yticklabel',leg);
+            end
+            if l > 1
+                pos = get(gca,'Position');
+                hfig = axes('Position',[pos(1)-.05 pos(2)+pos(4)/2 .01 .01],...
+                            'Visible','off');
+                text(0,0,num2str(cha{i}(k)),'FontSize',12,'Color','r')
+            end
+        end
+        if i == 1
+            if strcmp(u,'/1')
+                u = ' (between 0 and 1)';
+            elseif isempty(u)
+                u = '';
+            else
+                u = [' (in ',u,')'];
+            end
+        end
+        ylabel(['coefficient value', u])
+        if nl>1
+            legnd = cell(nl,1);
+            for j = 1:nl
+                if isempty(p)
+                    legnd{j} = num2str(j);
+                else
+                    legnd{j} = p{i}{1}{j};
+                end
+            end
+            legend(legnd,'Location','Best')
+        end
+        fig = get(0,'CurrentFigure');
+        disp(['The ',t,' related to file ',n{i},...
+                    ' is displayed in Figure ',num2str(fig),'.']);
+        if nargin>1
+            saveas(fig,[n{i},varargin{1}]);
+            disp(['and is saved in file ',n{i},varargin{1}]);
+        end
+    end
+end
+disp(' ');
+drawnow
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/exportation.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,72 @@
+function x = exportation(s)
+
+% SCALAR/EXPORTATION exports the values of a scalar object
+% Filterbank not taken into consideration yet.
+
+v = get(s,'Data');
+t = get(s,'Title');
+n = get(s,'Name');
+pt = get(s,'PeakPosUnit');
+pp = get(s,'PeakPos');
+frames = 0;
+for i = 1:length(v)
+    if iscell(v{i})
+        v{i} = v{i}{1}; %% Segmented audio cannot be exported properly now.
+    end
+    if iscell(v{i})
+        v{i} = v{i}{1};
+    end
+    if size(v{i},2) > 1 || size(v{i},3) > 1
+        frames = 1;
+    end
+end
+for i = 1:length(v)
+    vi = v{i};
+    pti = pt{i};
+    ppi = pp{i};
+    for j = 1:size(vi,1)
+        me = mean(vi(j,:,1),2);
+        if frames
+            st = std(vi(j,:,1),0,2);
+            if not(isempty(pti{1}))
+                if i == 1
+                    if size(vi,1) > 1
+                        x{1,j*4-3} = ['mean',t,num2str(j)];
+                        x{1,j*4-2} = ['std',t,num2str(j)];
+                        x{1,j*4-1} = ['peakpos',t,num2str(j)];
+                        x{1,j*4} = ['peakval',t,num2str(j)];
+                    else
+                        x{1,j*4-3} = ['mean',t];
+                        x{1,j*4-2} = ['std',t];
+                        x{1,j*4-1} = ['peakpos',t];
+                        x{1,j*4} = ['peakval',t];
+                   end
+                end
+                pep = ppi{1,j,1}{1}; %% only first peak is taken
+                pet = pti{1,j,1}{1}; %% only first peak is taken
+                pev = vi(j,pep,1);
+                x{i+1,j*4-3} = me;
+                x{i+1,j*4-2} = st;
+                x{i+1,j*4-1} = pet; 
+                x{i+1,j*4} = pev;
+            else
+                if i == 1
+                    if size(vi,1) > 1
+                        x{1,j*2-1} = ['mean',t,num2str(j)];
+                        x{1,j*2} = ['std',t,num2str(j)];
+                    else
+                        x{1,j*2-1} = ['mean',t];
+                        x{1,j*2} = ['std',t];
+                    end
+                end
+                x{i+1,j*2-1} = me;
+                x{i+1,j*2} = st;
+            end
+        else
+            if i == 1
+                x{1,j} = t;
+            end
+            x{i+1,j} = me;
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function val = get(a, propName)
+% GET Get properties from the MIRdata object
+% and return the value
+
+switch propName
+    case 'Mode'
+        val = a.mode;
+    case 'Legend'
+        val = a.legend;
+    case 'Parameter'
+        val = a.parameter;
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/mirsave.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+function mirsave(a)
+
+d = get(a,'Data');
+n = get(a,'Name');
+t = get(a,'Title');
+c = get(a,'Channels');
+fp = get(a,'FramePos');
+out = cell(1,length(d));
+
+for k = 1:length(d)
+    dk = d{k};
+    if not(iscell(dk))
+        dk = {dk};
+    end
+    out = [];
+    for l = 1:size(dk{1},3)
+        for i = 1:length(dk)
+            di = dk{i};
+            synth = zeros(1,ceil((fp{k}{i}(end)-fp{k}{i}(1))*44100)+1);
+            for j = 1:size(di,2)
+                if iscell(di)
+                    dj = di{j};
+                else
+                    dj = di(j);
+                end
+                if not(isempty(dj))
+                    k1 = floor((fp{k}{i}(1,j)-fp{k}{i}(1))*44100)+1;
+                    k2 = floor((fp{k}{i}(2,j)-fp{k}{i}(1))*44100)+1;
+                    synth(k1:k2) = synth(k1:k2) ...
+                        + sum(sin(2*pi*dj*(0:k2-k1)/44100),1).*hann(k2-k1+1)';
+                end
+            end
+            out = [out synth];
+            if size(dk{1},3)>1
+                out = [out rand(1,10)];
+            end
+        end
+    end
+    fout = miraudio(out,44100);
+    mirsave(fout,[n{k},'.',t]);
+end
+
+
+function oldmirsave % not used anymore
+d = get(a,'Data');
+nf = length(d);
+fp = get(a,'FramePos');
+nm = get(a,'Name');
+t = get(a,'Title');
+for i = 1:nf
+    nmi = nm{i};
+    di = d{i}{1};
+    fpi = fp{i}{1};
+    
+    %Let's remove the extension from the original files
+    if length(nmi)>3 && strcmpi(nmi(end-3:end),'.wav')
+        nmi(end-3:end) = [];
+    elseif length(nmi)>2 && strcmpi(nmi(end-2:end),'.au')
+        nmi(end-2:end) = [];
+    end    
+    n = [nmi,'.',lower(t),'.txt'];
+    
+    fid = fopen(n, 'wt');
+    fprintf(fid,'Frame_start Frame_end Data \n');
+
+    for j = 1:length(di)
+        fprintf(fid,'%g %g %g \n',fpi(1,j),fpi(2,j),di(j));
+    end
+    fclose(fid);
+    disp([n,' saved.']);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/mirscalar.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function s = mirscalar(orig,varargin)
+%   s = mirscalar(x,n) creates a scalar object
+
+if nargin == 0
+    orig = [];
+end
+if iscell(orig)
+    orig = orig{1};
+end
+if isa(orig,'mirscalar')
+    s.mode = orig.mode;
+    s.legend = orig.legend;
+    s.parameter = orig.parameter;
+else
+    s.mode = [];
+    s.legend = '';
+    s.parameter = struct;
+end
+s = class(s,'mirscalar',mirdata(orig));
+s = purgedata(s);
+s = set(s,'Pos',{},'Abs','Temporal position of frames','Ord','Value',varargin{:});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirscalar/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function ss = set(s,varargin)
+% SET Set properties for the MIRscalar object
+% and return the updated object
+
+propertyArgIn = varargin;
+m = s.mode;
+l = s.legend;
+p = s.parameter;
+d = mirdata(s);
+d = set(d,'Title',get(s,'Title'),'Abs',get(s,'Abs'),'Ord',get(s,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Mode'
+           m = val;
+       case 'Legend'
+           l = val;
+       case 'Parameter'
+           p = val;
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+ss.mode = m;
+ss.legend = l;
+ss.parameter = p;
+ss = class(ss,'mirscalar',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirsimatrix/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,136 @@
+function display(m)
+% DISSIMATRIX/DISPLAY display of a dissimilarity matrix
+disp(' ');
+d = get(m,'Data');
+nam = get(m,'Name');
+fp = get(m,'FramePos');
+cha = get(m,'Channels');
+t = get(m,'Title');
+tp = get(m,'TrackPos');
+tv = get(m,'TrackVal');
+pp = get(m,'PeakPos');
+g = get(m,'Graph');
+b = get(m,'Branch');
+for i = 1:length(d)
+    if iscell(d{i})
+        d{i} = d{i}{1};
+    end
+    l = size(d{1},3);     % Number of channels
+    il = (1-0.15)/l;
+    figure
+    for k = 1:l         % For each channel
+        if l>1
+            subplot('Position',[0.1 (k-1)*il+0.1 0.89 il-0.02])
+        end
+        fpi = cell2mat(fp{i});
+        if size(fpi,1) == 2
+            fpi = (fpi(1,:,:,:)+fpi(2,:,:,:))/2;
+        end
+        if strcmp(m.view,'l')
+            h = imagesc(fpi,fpi(1:size(d{i},1))-fpi(1),d{i}(:,:,k));
+        else
+            h = imagesc(fpi,fpi,d{i}(:,:,k));
+        end
+        if not(isempty(g))
+            hold on
+            pi = cell(1,size(g{i}{1},2));
+            for j = 1:size(g{i}{1},2)
+                pi{j} = sort(pp{i}{1}{j});
+            end
+            for j = 1:size(g{i}{1},2)
+                for h = 1:length(g{i}{1}{1,j,l})
+                    next = g{i}{1}{1,j,l}{h};
+                    if length(next)>1
+                        for n = 1:size(next,1)
+                            plot([fpi(j) fpi(next(n,1))],...
+                                 [fpi(pi{j}(h)) - fpi(1), ...
+                                  fpi(pi{next(n,1)}(next(n,2))) - fpi(1)],...
+                                 'k','LineWidth',1)
+                            %plot([fpi(j) fpi(next(n,1))],...
+                            %     [fpi(pi{j}(h)) - fpi(1), ...
+                            %      fpi(pi{next(n,1)}(next(n,2))) - fpi(1)],...
+                            %     'w+','MarkerSize',10)
+                            plot([fpi(j) fpi(next(n,1))],...
+                                 [fpi(pi{j}(h)) - fpi(1), ...
+                                  fpi(pi{next(n,1)}(next(n,2))) - fpi(1)],...
+                                 'kx','MarkerSize',10)
+                        end
+                    end
+                end
+            end
+            bi = b{i}{1}{1};
+            for j = 1:size(bi,1)-1
+                plot([fpi(bi(j,1)) fpi(bi(j+1,1))],...
+                     [fpi(pi{bi(j,1)}(bi(j,2))) - fpi(1), ...
+                      fpi(pi{bi(j+1,1)}(bi(j+1,2))) - fpi(1)],...
+                     'w','LineWidth',1.5)
+                plot([fpi(bi(j,1)) fpi(bi(j+1,1))],...
+                     [fpi(pi{bi(j,1)}(bi(j,2))) - fpi(1), ...
+                      fpi(pi{bi(j+1,1)}(bi(j+1,2))) - fpi(1)],...
+                     'w+','MarkerSize',15)
+                plot([fpi(bi(j,1)) fpi(bi(j+1,1))],...
+                     [fpi(pi{bi(j,1)}(bi(j,2))) - fpi(1), ...
+                      fpi(pi{bi(j+1,1)}(bi(j+1,2))) - fpi(1)],...
+                     'kx','MarkerSize',15)
+            end
+        elseif not(isempty(tp)) && not(isempty(tp{i}))
+            hold on
+            for k = 1:size(tp{i}{1}{1},1)
+                prej = 0;
+                for j = 1:size(tp{i}{1}{1},2)
+                    if tv{i}{1}{1}(k,j)
+                        if prej% && not(isempty(tp(k,j)))
+                            plot([fpi(prej) fpi(j)],...
+                                 [fpi(tp{i}{1}{1}(k,prej)) - fpi(1) ...
+                                  fpi(tp{i}{1}{1}(k,j)) - fpi(1)],...
+                                 'k','LineWidth',1)
+                            plot([fpi(prej) fpi(j)],...
+                                 [fpi(tp{i}{1}{1}(k,prej)) - fpi(1) ...
+                                  fpi(tp{i}{1}{1}(k,j)) - fpi(1)],...
+                                 'w+','MarkerSize',10)
+                            plot([fpi(prej) fpi(j)],...
+                                 [fpi(tp{i}{1}{1}(k,prej)) - fpi(1) ...
+                                  fpi(tp{i}{1}{1}(k,j)) - fpi(1)],...
+                                 'kx','MarkerSize',10)
+                        end
+                        prej = j;
+                    end
+                end
+            end
+        elseif not(isempty(pp)) && not(isempty(pp{i}))
+            hold on
+            for k = 1:length(pp{i}{1})
+                for j = 1:length(pp{i}{1}{k})
+                    plot(fpi(k),fpi(pp{i}{1}{k}(j)) - fpi(1), ...
+                                 'w+','MarkerSize',10)
+                end
+            end
+        end
+        set(gca,'YDir','normal')
+        if k == l
+            title(t)
+        end
+        if k == 1
+            xlabel('temporal location of frame centers (in s.)')
+        end
+        if k == ceil(l/2)
+            if strcmp(m.view,'h')
+                ylabel('relative distance between compared frames (in s.)')
+            elseif strcmp(m.view,'l')
+                ylabel('temporal lag (in s.)')
+            else
+                ylabel('temporal location of frame centers (in s.)')
+            end
+        end
+        if l > 1
+            pos = get(gca,'Position');
+            hfig = axes('Position',[pos(1)-.05 pos(2)+pos(4)/2 .01 .01],...
+                        'Visible','off');
+            text(0,0,num2str(cha{i}(k)),'FontSize',12,'Color','r')
+        end
+    end
+    fig = get(0,'CurrentFigure');
+    disp(['The ',t,' related to file ',nam{i},' is displayed in Figure ',num2str(fig),'.']);
+end
+disp(' ');
+drawnow
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirsimatrix/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function val = get(a, propName)
+% GET Get properties from the MIRsimatrix object
+% and return the value
+
+switch propName
+    case 'DiagWidth'
+        val = a.diagwidth;
+    case 'Graph'
+        val = a.graph;
+    case 'Branch'
+        val = a.branch;
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirsimatrix/mirsimatrix.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,414 @@
+function varargout = mirsimatrix(orig,varargin)
+%   m = mirsimatrix(x) computes the similarity matrix resulting from the 
+%       mutual comparison between each possible frame analysis in x.
+%           By default, x is the spectrum of the frame decomposition.
+%           But it can be any other frame analysis.
+%   Optional argument:
+%       mirsimatrix(...,'Distance',f) specifies the name of a distance
+%           function, from those proposed in the Statistics Toolbox
+%               (help pdist).
+%           default value: f = 'cosine'
+%       mirsimatrix(...,'Dissimilarity') return the dissimilarity matrix,
+%           which is the intermediary result before the computation of the 
+%           actual similarity matrix. It shows the distance between each
+%           possible frame analysis in x.
+%       mirsimatrix(...,'Similarity',f) indicates the function f specifying
+%           the way the distance values in the dissimilarity matrix are
+%           transformed into similarity values.
+%           Possible values:
+%               f = 'oneminus' (default value) 
+%                   corresponding to f(x) = 1-x
+%               f = 'exponential'
+%                   corresponding to f(x)= exp(-x)
+%       mirsimatrix(...,'Width',w) or more simply dissimatrix(...,w) 
+%           specifies the size of the diagonal bandwidth, in samples,
+%           outside which the dissimilarity will not be computed.
+%           if w = inf (default value), all the matrix will be computed.
+%       mirsimatrix(...,'Horizontal') rotates the matrix 45 degrees in order to
+%           make the first diagonal horizontal, and to restrict on the
+%           diagonal bandwidth only.
+%       mirsimatrix(...,'TimeLag') transforms the (non-rotated) matrix into
+%           a time-lag matrix, making the first diagonal horizontal as well
+%           (corresponding to the zero-lag line).
+%
+%       mirsimatrix(M,r) creates a mirsimatrix similarity matrix based on
+%           the Matlab square matrix M, of frame rate r (in Hz.)
+%               By default r = 20 Hz.
+%           mirsimatrix(M,r,'Dissimilarity') creates instead a mirsimatrix
+%               dissimilarity matrix.
+%
+%   Foote, J. & Cooper, M. (2003). Media Segmentation using Self-Similarity
+% Decomposition,. In Proc. SPIE Storage and Retrieval for Multimedia
+% Databases, Vol. 5021, pp. 167-75.
+
+%       mirsimatrix(...,'Filter',10) filter along the diagonal of the matrix,
+%           using a uniform moving average filter of size f. The result is
+%           represented in a time-lag matrix.
+
+
+        distance.key = 'Distance';
+        distance.type = 'String';
+        distance.default = 'cosine';
+    option.distance = distance;
+
+        simf.key = 'Similarity';
+        simf.type = 'String';
+        simf.default = 'oneminus';
+        simf.keydefault = 'Similarity';        
+        simf.when = 'After';
+    option.simf = simf;
+
+        dissim.key = 'Dissimilarity';
+        dissim.type = 'Boolean';
+        dissim.default = 0;
+    option.dissim = dissim;
+    
+        K.key = 'Width';
+        K.type = 'Integer';
+        K.default = Inf;
+    option.K = K;
+    
+        filt.key = 'Filter';
+        filt.type = 'Integer';
+        filt.default = 0;
+        filt.when = 'After';
+    option.filt = filt;
+
+        view.type = 'String';
+        view.default = 'Standard';
+        view.choice = {'Standard','Horizontal','TimeLag'};
+        view.when = 'After';
+    option.view = view;
+    
+        rate.type = 'Integer';
+        rate.position = 2;
+        rate.default = 20;
+    option.rate = rate;
+    
+specif.option = option;
+specif.nochunk = 1;
+varargout = mirfunction(@mirsimatrix,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if isnumeric(x)
+    m.diagwidth = Inf;
+    m.view = 's';
+    m.similarity = NaN;
+    m.graph = {};
+    m.branch = {};
+    m = class(m,'mirsimatrix',mirdata);
+    m = set(m,'Title','Dissimilarity matrix');
+    fp = repmat(((1:size(x,1))-.5)/option.rate,[2,1]);
+    x = set(m,'Data',{x},'Pos',[],...
+              'FramePos',{{fp}},'Name',{inputname(1)});
+else
+    if not(isamir(x,'mirsimatrix'))
+        if (isamir(x,'miraudio'))
+            if isframed(x)
+                x = mirspectrum(x);
+            else
+                x = mirspectrum(x,'Frame',0.05,1);
+            end
+        end
+    end
+end
+type = 'mirsimatrix';
+
+
+function m = main(orig,option,postoption)
+if iscell(orig)
+    orig = orig{1};
+end
+if isa(orig,'mirsimatrix')
+    d = get(orig,'Data');
+    for k = 1:length(d)
+        if iscell(option) && isfield(option,'K') && option.K < orig.diagwidth
+            nl = size(d{k},1);
+            if strcmp(orig.view,'h')
+                dl = (nl - option.K)/2;
+                dk = d{k}(ceil(dl):nl-floor(dl),:);
+            else
+                [spA,spd] = spdiags(d{k},-ceil(option.K/2):ceil(option.K/2));
+                dk = full(spdiags(spA,spd,nl,size(d{k},2)));
+            end
+            d{k} = dk;
+            orig.diagwidth = option.K;
+        end
+    end
+    m = set(orig,'Data',d);
+else
+    v = get(orig,'Data');
+    d = cell(1,length(v));
+    for k = 1:length(v)
+        vk = v{k};
+        if mirwaitbar
+            handle = waitbar(0,'Computing dissimilarity matrix...');
+        else
+            handle = 0;
+        end
+        if 0 %iscell(vk)
+            try
+                vk = cell2mat(vk);
+            end
+        end
+        if 0 %iscell(vk) %&& length(vk) > 1 %%% ATTENTION KL!!<<<<<<<<<<<<
+            l = length(vk);
+            dk = NaN(l,l);
+            hK = floor(option.K/2);
+            for i = 1:l
+                if handle
+                    waitbar(i/l,handle);
+                end
+                for j = max(1,i-hK):min(l,i+hK)
+                    dk(i,j) = KL(vk{i},vk{j});
+                end
+            end
+        else
+            if not(iscell(vk))
+                vk = {vk};
+            end    
+            for z = 1:length(vk)
+                vz = vk{z};
+                ll = size(vz,1);
+                l = size(vz,2);
+                nc = size(vz,3);
+                if ll==1 && nc>1
+                    vz = squeeze(vz)';
+                    ll = nc;
+                    nc = 1;
+                end
+                nd = size(vz,4);
+                if not(isempty(postoption)) && ...
+                    strcmpi(postoption.view,'TimeLag')
+                    lK = ceil(option.K/2);
+                    if isinf(lK)
+                        lK = l;
+                    end
+                    dk{z} = NaN(lK,l,nc);
+                else
+                    dk{z} = NaN(l,l,nc);
+                end
+                for g = 1:nc
+                    if nd == 1
+                        vv = vz;
+                    else
+                        vv = zeros(ll*nd,l);
+                        for h = 1:nd
+                            if iscell(vz)
+                                for i = 1:ll
+                                    for j = 1:l
+                                        vj = vz{i,j,g,h};
+                                        if isempty(vj)
+                                            vv((h-1)*ll+i,j) = NaN;
+                                        else
+                                            vv((h-1)*ll+i,j) = vj;
+                                        end
+                                    end
+                                end
+                            else
+                                tic
+                                vv((h-1)*ll+1:h*ll,:) = vz(:,:,g,h);
+                                toc
+                            end
+                        end
+                    end
+                    if isinf(option.K) && not(strcmpi(postoption.view,'TimeLag'))
+                        try
+                            manually = 0;
+                            dk{z}(:,:,g) = squareform(pdist(vv',option.distance));
+                            if option.K < Inf
+                                [spA,spd] = spdiags(dk{z},...
+                                    -ceil(option.K/2):ceil(option.K/2));
+                                dk{z}(:,:,g) = full(spdiags(spA,spd,size(dk,1),size(dk{z},2)));
+                            end
+                        catch
+                            %err = lasterror;
+                            %warning(err.message)
+                            %disp('Statistics Toolbox does not seem to be
+                            %installed. Recompute the distance matrix manually.');
+                            manually = 1;
+                        end
+                    else
+                        manually = 1;
+                    end
+                    if manually
+                        disf = str2func(option.distance);
+                        if strcmpi(option.distance,'cosine')
+                            for i = 1:l
+                                vv(:,i) = vv(:,i)/norm(vv(:,i));
+                            end
+                        end
+                        if not(isempty(postoption)) && ...
+                                strcmpi(postoption.view,'TimeLag')
+                            lK = ceil(option.K/2);
+                            for i = 1:l
+                                if mirwaitbar && (mod(i,100) == 1 || i == l)
+                                    waitbar(i/l,handle);
+                                end
+                                ij = min(i+lK-1,l);
+                                dkij = disf(vv(:,i),vv(:,i:ij));
+                                for j = 1:ij-i+1
+                                    dk{z}(j,i+j-1,g) = dkij(j);
+                                end
+                            end
+                        else
+                            for i = 1:l
+                                if mirwaitbar && (mod(i,100) == 1 || i == l)
+                                    waitbar(i/l,handle);
+                                end
+                                j = min(i+option.K-1,l);
+                                dkij = disf(vv(:,i),vv(:,i:j));
+                                dk{z}(i,i:j,g) = dkij;
+                                dk{z}(i:j,i,g) = dkij';
+                            end
+                        end
+                    end
+                end
+            end
+        end
+        d{k} = dk;
+        if handle
+            delete(handle)
+        end
+    end
+    m.diagwidth = option.K;
+    if not(isempty(postoption)) && strcmpi(postoption.view,'TimeLag')
+        m.view = 'l';
+    else
+        m.view = 's';
+    end
+    m.similarity = 0;
+    m.graph = {};
+    m.branch = {};
+    m = class(m,'mirsimatrix',mirdata(orig));
+    m = purgedata(m);
+    m = set(m,'Title','Dissimilarity matrix');
+    m = set(m,'Data',d,'Pos',[]);
+end
+if not(isempty(postoption))
+    if strcmpi(m.view,'s')
+        if strcmpi(postoption.view,'Horizontal')
+            for k = 1:length(d)
+                for z = 1:length(d{k})
+                    d{k}{z} = rotatesim(d{k}{z},m.diagwidth);
+                    if option.K < m.diagwidth
+                        W = size(d{k}{z},1);
+                        hW = ceil(W/2);
+                        hK = ceil(option.K/2);
+                        d{k}{z} = d{k}{z}(hW-hK:hW+hK,:);
+                        m.diagwidth = option.K;
+                    end
+                end
+            end
+            m = set(m,'Data',d);
+            m.view = 'h';
+        elseif strcmpi(postoption.view,'TimeLag') || postoption.filt
+            W = ceil(m.diagwidth/2);
+            for k = 1:length(d)
+                for z = 1:length(d{k})
+                    if isinf(W)
+                        dz = NaN(size(d{k}{z}));
+                    else
+                        dz = NaN(W,size(d{k}{z},2));
+                    end
+                    for l = 1:size(dz,1)
+                        dz(l,l:end) = diag(d{k}{z},l-1)';
+                    end
+                    if option.K < m.diagwidth
+                        dz = dz(1:ceil(option.K/2),:);
+                        m.diagwidth = option.K;
+                    end
+                    d{k}{z}= dz;
+                end
+            end
+            m = set(m,'Data',d);
+            m.view = 'l';
+        end
+    end
+    if ischar(postoption.simf)
+        if strcmpi(postoption.simf,'Similarity')
+            if not(isequal(m.similarity,NaN))
+                option.dissim = 0;
+            end
+            postoption.simf = 'oneminus';
+        end
+        if isequal(m.similarity,0) && isstruct(option) ...
+                && isfield(option,'dissim') && not(option.dissim)
+            simf = str2func(postoption.simf);
+            for k = 1:length(d)
+                for z = 1:length(d{k})
+                     d{k}{z} = simf(d{k}{z});
+                end
+            end
+            m.similarity = postoption.simf;
+            m = set(m,'Title','Similarity matrix','Data',d);
+        elseif length(m.similarity) == 1 && isnan(m.similarity) ...
+                && option.dissim
+            m.similarity = 0;
+        end
+    end
+    if postoption.filt
+        fp = get(m,'FramePos');
+        for k = 1:length(d)
+            for z = 1:length(d{k})
+                dz = filter(ones(postoption.filt,1),1,d{k}{z});
+                d{k}{z} = dz(postoption.filt:end,1:end-postoption.filt+1);
+                fp{k}{z} = [fp{k}{z}(1,1:end-postoption.filt+1);...
+                            fp{k}{z}(1,postoption.filt:end)];
+            end
+        end
+        m = set(m,'Data',d,'FramePos',fp);
+    end
+end
+
+
+function S = rotatesim(d,K)
+if length(d) == 1;
+    S = d;
+else
+    K = min(K,size(d,1)*2);
+    lK = floor(K/2);
+    S = NaN(K,size(d,2),size(d,3));
+    for k = 1:size(d,3)
+        for j = -lK:lK
+            S(lK+1+j,:,k) = [NaN(1,floor(abs(j)/2)) diag(d(:,:,k),j)' ...
+                                                    NaN(1,ceil(abs(j)/2))];
+        end
+    end
+end
+
+function d = cosine(r,s)
+d = 1-r'*s;
+%nr = sqrt(r'*r);
+%ns = sqrt(s'*s);
+%if or(nr == 0, ns == 0);
+%    d = 1;
+%else
+%    d = 1 - r'*s/nr/ns;
+%end
+
+
+function d = KL(x,y)
+% Kullback-Leibler distance
+if size(x,4)>1
+    x(end+1:2*end,:,:,1) = x(:,:,:,2);
+    x(:,:,:,2) = [];
+end
+if size(y,4)>1
+    y(end+1:2*end,:,:,1) = y(:,:,:,2);
+    y(:,:,:,2) = [];
+end
+m1 = mean(x);
+m2 = mean(y);
+S1 = cov(x);
+S2 = cov(y);
+d = (trace(S1/S2)+trace(S2/S1)+(m1-m2)'*inv(S1+S2)*(m1-m2))/2 - size(S1,1);
+    
+
+function s = exponential(d)
+    s = exp(-d);
+    
+    
+function s = oneminus(d)
+    s = 1-d;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirsimatrix/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function mm = set(m,varargin)
+% SET Set properties for the MIRsimatrix object
+% and return the updated object
+
+propertyArgIn = varargin;
+graph = m.graph;
+branch = m.branch;
+d = mirdata(m);
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Graph'
+           graph = val;
+       case 'Branch'
+           branch = val;
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+mm.diagwidth = m.diagwidth;
+mm.view = m.view;
+mm.similarity = m.similarity;
+mm.graph = graph;
+mm.branch = branch;
+mm = class(mm,'mirsimatrix',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirspectrum/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function val = get(a, propName)
+% GET Get properties from the MIRspectrum object
+% and return the value
+
+switch propName
+    case 'Magnitude'
+        val = get(mirdata(a),'Data');
+    case 'Frequency'
+        val = get(mirdata(a),'Pos');
+    case 'Phase'
+        val = a.phase;
+    case 'log'
+        val = a.log;
+    case 'XScale'
+        val = a.xscale;
+    case 'Power'
+        val = a.pow;
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirspectrum/mirspectrum.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,942 @@
+function varargout = mirspectrum(orig,varargin)
+%   s = mirspectrum(x) computes the spectrum of the audio signal x, showing
+%       the distribution of the energy along the frequencies.
+%       (x can be the name of an audio file as well.)
+%   Optional argument:
+%       mirspectrum(...,'Frame',l,h) computes spectrogram, using frames of
+%           length l seconds and a hop rate h.
+%           Default values: l = .05 s, h = .5.
+%       mirspectrum(...,'Min',mi) indicates the lowest frequency taken into
+%           consideration, expressed in Hz.
+%           Default value: 0 Hz.
+%       mirspectrum(...,'Max',ma) indicates the highest frequency taken into
+%           consideration, expressed in Hz.
+%           Default value: the maximal possible frequency, corresponding to
+%           the sampling rate of x divided by 2.
+%       mirspectrum(...,'Window',w): windowing method:
+%           either w = 0 (no windowing) or any windowing function proposed
+%               in the Signal Processing Toolbox (help window).
+%           default value: w = 'hamming'
+%
+%       mirspectrum(...,'Cents'): decomposes the energy in cents.
+%       mirspectrum(...,'Collapsed'): collapses the spectrum into one
+%           octave divided into 1200 cents.
+%       Redistribution of the frequencies into bands:
+%           mirspectrum(...,'Mel'): Mel bands.
+%               (Requires the Auditory Toolbox.)
+%           mirspectrum(...,'Bark'): Bark bands.
+%               (Code based on Pampalk's MA toolbox).
+%           If the audio signal was frame decomposed, the output s is a
+%               band-decomposed spectrogram. It is then possible to compute
+%               the spectrum of the temporal signal in each band,
+%               using the following syntax:
+%                   mirspectrum(s,'AlongBands')
+%               This corresponds to fluctuation (cf. mirfluctuation).
+%           mirspectrum(...,'Mask'): Models masking phenomena in each band.
+%               (Code based on Pampalk's MA toolbox).
+%       mirspectrum(...,'Normal'): normalizes with respect to energy.
+%       mirspectrum(...,'NormalInput'): input signal is normalized from 0 to 1.
+%       mirspectrum(...,'Power'): squares the energy.
+%       mirspectrum(...,'dB'): represents the spectrum energy in decibel scale.
+%       mirspectrum(...,'dB',th): keeps only the highest energy over a
+%           range of th dB.
+%       mirspectrum(...,'Terhardt'): modulates the energy following
+%           (Terhardt, 1979) outer ear model. (Code based on Pampalk's MA
+%           toolbox).
+%       mirspectrum(...,'Resonance',r): multiplies the spectrum with a 
+%           resonance curve. Possible value for r:
+%               'ToiviainenSnyder': highlights best perceived meter 
+%                       (Toiviainen & Snyder 2003)
+%                   (default value for spectrum of envelopes)
+%               'Fluctuation': fluctuation strength (Fastl 1982)
+%                   (default value for spectrum of band channels)
+%       mirspectrum(...,'Prod',m): Enhances components that have harmonics
+%           located at multiples of range(s) m of the signal's fundamental 
+%           frequency. Computed by compressing the signal by the list of
+%           factors m, and by multiplying all the results with the original 
+%           signa (Alonso et al, 2003).
+%       mirspectrum(...,'Sum',s): Similar option using summation instead of
+%           product.
+%
+%       mirspectrum(...,'MinRes',mr): Indicates a minimal accepted
+%           frequency resolution, in Hz. The audio signal is zero-padded in
+%           order to reach the desired resolution.
+%           If the 'Mel' option is toggled on, 'MinRes' is set by default
+%               to 66 Hz.
+%       mirspectrum(...,'MinRes',mr,'OctaveRatio',tol): Indicates the
+%           minimal accepted resolution in terms of number of divisions of 
+%           the octave. Low  frequencies are ignored in order to reach the
+%           desired resolution.
+%               The corresponding required frequency resolution is equal to
+%               the difference between the first frequency bins, multiplied
+%               by the constraining multiplicative factor tol (set by
+%               default to .75).
+%       mirspectrum(...,'Res',r): Indicates the required precise frequency
+%           resolution, in Hz. The audio signal is zero-padded in order to
+%           reach the desired resolution.
+%       mirspectrum(...,'Length',l): Specifies the length of the FFT,
+%           overriding the FFT length initially planned.
+%       mirspectrum(...,'ZeroPad',s): Zero-padding of s samples.
+%       mirspectrum(...,'WarningRes',s): Indicates a required frequency
+%           resolution, in Hz, for the input signal. If the resolution does
+%           not reach that prerequisite, a warning is displayed.
+%       mirspectrum(...,'ConstantQ',nb): Carries out a Constant Q Transform
+%           instead of a FFT, with a number of bins per octave fixed to nb.
+%           Default value for nb: 12 bins per octave.
+%
+%       mirspectrum(...,'Smooth',o): smooths the envelope using a movering
+%           average of order o.
+%           Default value when the option is toggled on: o=10
+%       mirspectrum(...,'Gauss',o): smooths the envelope using a gaussian
+%           of standard deviation o samples.
+%           Default value when the option is toggled on: o=10
+%       mirspectrum(...,'Phase',0): do not compute the FFT phase.
+    
+        win.key = 'Window';
+        win.type = 'String';
+        win.default = 'hamming';
+    option.win = win;
+    
+        min.key = 'Min';
+        min.type = 'Integer';
+        min.default = 0;
+    option.min = min;
+    
+        max.key = 'Max';
+        max.type = 'Integer';
+        max.default = Inf;
+    option.max = max;
+    
+        mr.key = 'MinRes';
+        mr.type = 'Integer';
+        mr.default = 0;
+    option.mr = mr;
+
+        res.key = 'Res';
+        res.type = 'Integer';
+        res.default = NaN;
+    option.res = res;
+
+        length.key = 'Length';
+        length.type = 'Integer';
+        length.default = NaN;
+    option.length = length;
+    
+        zp.key = 'ZeroPad';
+        zp.type = 'Integer';
+        zp.default = 0;
+        zp.keydefault = Inf;
+    option.zp = zp;
+    
+        wr.key = 'WarningRes';
+        wr.type = 'Integer';
+        wr.default = 0;
+    option.wr = wr;
+    
+        octave.key = 'OctaveRatio';
+        octave.type = 'Boolean';
+        octave.default = 0;
+    option.octave = octave;
+    
+        constq.key = 'ConstantQ';
+        constq.type = 'Integer';
+        constq.default = 0;
+        constq.keydefault = 12;
+    option.constq = constq;
+    
+        alongbands.key = 'AlongBands';
+        alongbands.type = 'Boolean';
+        alongbands.default = 0;
+    option.alongbands = alongbands;
+
+        ni.key = 'NormalInput';
+        ni.type = 'Boolean';
+        ni.default = 0;
+    option.ni = ni;
+    
+        norm.key = 'Normal';
+        norm.type = 'Integer';
+        norm.default = 0;
+        norm.keydefault = 1;
+        norm.when = 'After';
+    option.norm = norm;
+    
+        band.type = 'String';
+        band.choice = {'Freq','Mel','Bark','Cents'};
+        band.default = 'Freq';
+        band.when = 'Both';
+    option.band = band;
+
+        nbbands.key = 'Bands';
+        nbbands.type = 'Integer';
+        nbbands.default = 0;
+        nbbands.when = 'After';
+    option.nbbands = nbbands;
+
+        mprod.key = 'Prod';
+        mprod.type = 'Integers';
+        mprod.default = [];
+        mprod.keydefault = 2:6;
+        mprod.when = 'After';
+    option.mprod = mprod;
+
+        msum.key = 'Sum';
+        msum.type = 'Integers';
+        msum.default = [];
+        msum.keydefault = 2:6;
+        msum.when = 'After';
+    option.msum = msum;
+
+        reso.key = 'Resonance';
+        reso.type = 'String';
+        reso.choice = {'ToiviainenSnyder','Fluctuation','Meter',0,'no','off'};
+        reso.default = 0;
+        reso.when = 'After';
+    option.reso = reso;
+    
+        log.key = 'log';
+        log.type = 'Boolean';
+        log.default = 0;
+        log.when = 'After';
+    option.log = log;
+
+        db.key = 'dB';
+        db.type = 'Integer';
+        db.default = 0;
+        db.keydefault = Inf;
+        db.when = 'After';
+    option.db = db;
+    
+        pow.key = 'Power';
+        pow.type = 'Boolean';
+        pow.default = 0;
+        pow.when = 'After';
+    option.pow = pow;
+
+        terhardt.key = 'Terhardt';
+        terhardt.type = 'Boolean';
+        terhardt.default = 0;
+        terhardt.when = 'After';
+    option.terhardt = terhardt;
+
+        mask.key = 'Mask';
+        mask.type = 'Boolean';
+        mask.default = 0;
+        mask.when = 'After';
+    option.mask = mask;
+
+    %    e.key = 'Enhanced';
+    %    e.type = 'Integer';
+    %    e.default = [];
+    %    e.keydefault = 2:10;
+    %    e.when = 'After';
+    %option.e = e;
+
+        collapsed.key = 'Collapsed';
+        collapsed.type = 'Boolean';
+        collapsed.default = 0;
+        collapsed.when = 'Both';
+    option.collapsed = collapsed;
+    
+        aver.key = 'Smooth';
+        aver.type = 'Integer';
+        aver.default = 0;
+        aver.keydefault = 10;
+        aver.when = 'After';
+    option.aver = aver;
+    
+        gauss.key = 'Gauss';
+        gauss.type = 'Integer';
+        gauss.default = 0;
+        gauss.keydefault = 10;
+        gauss.when = 'After';
+    option.gauss = gauss;
+    
+        rapid.key = 'Rapid';
+        rapid.type = 'Boolean';
+        rapid.default = 0;
+    option.rapid = rapid;
+
+        phase.key = 'Phase';
+        phase.type = 'Boolean';
+        phase.default = 1;
+    option.phase = phase;
+
+specif.option = option;
+
+specif.defaultframelength = 0.05;
+specif.defaultframehop = 0.5;
+
+specif.eachchunk = @eachchunk;
+specif.combinechunk = @combinechunk;
+
+if isamir(orig,'mirscalar') || isamir(orig,'mirenvelope')
+    specif.nochunk = 1;
+end
+
+varargout = mirfunction(@mirspectrum,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = 'mirspectrum';
+
+
+function s = main(orig,option,postoption)
+if isstruct(option)
+    if option.collapsed
+        option.band = 'Cents';
+    end
+    if isnan(option.res) && strcmpi(option.band,'Cents') && option.min
+        option.res = option.min *(2^(1/1200)-1)*.9;
+    end    
+end
+if not(isempty(postoption))
+    if not(strcmpi(postoption.band,'Freq') && isempty(postoption.msum) ...
+            || isempty(postoption.mprod)) || postoption.log || postoption.db ...
+            || postoption.pow || postoption.mask || postoption.collapsed ...
+            || postoption.aver || postoption.gauss
+        option.phase = 0;
+    end
+end
+if iscell(orig)
+    orig = orig{1};
+end
+if isa(orig,'mirspectrum') && ...
+        not(isfield(option,'alongbands') && option.alongbands)
+    s = orig;
+    if isfield(option,'min') && ...
+            (option.min || iscell(option.max) || option.max < Inf)
+        magn = get(s,'Magnitude');
+        freq = get(s,'Frequency');
+        for k = 1:length(magn)
+            m = magn{k};
+            f = freq{k};
+            if iscell(option.max)
+                mi = option.min{k};
+                ma = option.max{k};
+            else
+                mi = option.min;
+                ma = option.max;
+            end
+            if not(iscell(m))
+                m = {m};
+                f = {f};
+            end
+            for l = 1:length(m)
+                range = find(and(f{l}(:,1) >= mi,f{l}(:,1) <= ma));
+                m{l} = m{l}(range,:,:);
+                f{l} = f{l}(range,:,:);
+            end
+            magn{k} = m;
+            freq{k} = f;
+        end
+        s = set(s,'Magnitude',magn,'Frequency',freq);
+    end
+    if not(isempty(postoption)) && not(isequal(postoption,0))
+        s = post(s,postoption);
+    end
+elseif ischar(orig)
+    s = mirspectrum(miraudio(orig),option,postoption);
+else
+    if nargin == 0
+        orig = [];
+    end
+    s.phase = [];
+    s.log = 0;
+    s.xscale = 'Freq';
+    s.pow = 1;
+    s = class(s,'mirspectrum',mirdata(orig));
+    s = purgedata(s);
+    s = set(s,'Title','Spectrum','Abs','frequency (Hz)','Ord','magnitude');
+    %disp('Computing spectrum...')
+    sig = get(orig,'Data');
+    t = get(orig,'Pos');
+    if isempty(t)
+        t = get(orig,'FramePos');
+        for k = 1:length(sig)
+            for l = 1:length(sig{k})
+                sig{k}{l} = sig{k}{l}';
+                t{k}{l} = t{k}{l}(1,:,:)';
+            end
+        end
+    end
+    fs = get(orig,'Sampling');
+    fp = get(orig,'FramePos');
+    m = cell(1,length(sig));
+    p = cell(1,length(sig));
+    f = cell(1,length(sig));
+    for i = 1:length(sig)
+        d = sig{i};
+        fpi = fp{i};
+        if not(iscell(d))
+            d = {d};
+        end
+        if option.alongbands
+            fsi = 1 / (fpi{1}(1,2) - fpi{1}(1,1));
+        else
+            fsi = fs{i};
+        end
+        mi = cell(1,length(d));
+        phi = cell(1,length(d));
+        fi = cell(1,length(d));
+        for J = 1:length(d)
+            dj = d{J};
+            if option.ni
+                mxdj = repmat(max(dj),[size(dj,1),1,1]);
+                mndj = repmat(min(dj),[size(dj,1),1,1]);
+                dj = (dj-mndj)./(mxdj-mndj);
+            end
+            if option.alongbands
+                if size(dj,1)>1
+                    error('ERROR IN MIRSPECTRUM: ''AlongBands'' is restricted to spectrum decomposed into bands, such as ''Mel'' and ''Bark''.') 
+                end
+                dj = reshape(dj,[size(dj,2),1,size(dj,3)]);
+                fp{i}{J} = fp{i}{J}([1;end]);
+            end
+                        
+            if option.constq
+                % Constant Q Transform
+                r = 2^(1/option.constq);
+                Q = 1 / (r - 1);
+                f_max = min(fsi/2,option.max);
+                f_min = option.min;
+                if not(f_min)
+                    f_min = 16.3516;
+                end
+                B = floor(log(f_max/f_min) / log(r)); % number of bins
+                N0 = round(Q*fsi/f_min); % maximum Nkcq
+                j2piQn = -j*2*pi*Q*(0:N0-1)';
+
+                fj = f_min * r.^(0:B-1)';
+                transf = NaN(B,size(dj,2),size(dj,3));
+                for kcq = 1:B
+                    Nkcq = round(Q*fsi/fj(kcq));
+                    win = mirwindow(dj,option.win,Nkcq);
+                    exq = repmat(exp(j2piQn(1:Nkcq)/Nkcq),...
+                                 [1,size(win,2),size(win,3)]);
+                    transf(kcq,:) = sum(win.* exq) / Nkcq;
+                end
+            else
+                % FFT
+                dj = mirwindow(dj,option.win);
+                if option.zp
+                    if option.zp < Inf
+                        dj = [dj;zeros(option.zp,size(dj,2),size(dj,3))];
+                    else
+                        dj = [dj;zeros(size(dj))];
+                    end
+                end
+                if isstruct(postoption)
+                    if strcmpi(postoption.band,'Mel') && ...
+                            (not(option.mr) || option.mr > 66)
+                        option.mr = 66;
+                    end
+                else
+                    %warning('WARNING in MIRSPECTRUM (for debugging purposes): By default, minimum resolution specified.')
+                    if not(option.mr)
+                        option.mr = 66;
+                    end
+                end
+                if option.octave
+                    N = size(dj,1);
+                    res = (2.^(1/option.mr)-1)*option.octave;
+                        % Minimal freq ratio between 2 first bins.
+                        % freq resolution should be > option.min * res
+                    Nrec = fsi/(option.min*res);
+                        % Recommended minimal sample length.
+                    if Nrec > N
+                            % If actual sample length is too small.
+                        option.min = fsi/N / res;
+                        warning('WARNING IN MIRSPECTRUM: The input signal is too short to obtain the desired octave resolution. Lowest frequencies will be ignored.');
+                        display(['(The recommended minimal input signal length would be ' num2str(Nrec/fsi) ' s.)']);
+                        display(['New low frequency range: ' num2str(option.min) ' Hz.']);
+                    end
+                    N = 2^nextpow2(N);
+                elseif isnan(option.length)
+                    if isnan(option.res)
+                        N = size(dj,1);
+                        if option.mr && N < fsi/option.mr
+                            if option.wr && N < fsi/option.wr
+                                warning('WARNING IN MIRSPECTRUM: The input signal is too short to obtain the desired frequency resolution. Performed zero-padding will not guarantee the quality of the results.'); 
+                            end                
+                            N = max(N,fsi/option.mr);
+                        end
+                        N = 2^nextpow2(N);
+                    else
+                        N = ceil(fsi/option.res);
+                    end
+                else
+                    N = option.length;
+                end
+
+                % Here is the spectrum computation itself
+                transf = fft(dj,N);
+
+                len = ceil(size(transf,1)/2);
+                fj = fsi/2 * linspace(0,1,len)';
+                if option.max
+                    maxf = find(fj>=option.max,1);
+                    if isempty(maxf)
+                        maxf = len;
+                    end
+                else
+                    maxf = len;
+                end
+                if option.min
+                    minf = find(fj>=option.min,1);
+                    if isempty(minf)
+                        maxf = len;
+                    end
+                else
+                    minf = 1;
+                end
+                
+                transf = transf(minf:maxf,:,:);
+                fj = fj(minf:maxf);
+            end
+            
+            mi{J} = abs(transf);
+            if option.phase
+                phi{J} = angle(transf);
+            end
+            fi{J} = repmat(fj,[1,size(transf,2),size(transf,3)]);
+        end
+        if iscell(sig{i})
+            m{i} = mi;
+            p{i} = phi;
+            f{i} = fi;
+        else
+            m{i} = mi{1};
+            p{i} = phi{1};
+            f{i} = fi{1};
+        end
+    end
+    s = set(s,'Frequency',f,'Magnitude',m,'Phase',p,'FramePos',fp);
+    if not(isempty(postoption)) && isstruct(postoption)
+        s = post(s,postoption);
+    end
+end
+
+   
+function s = post(s,option)
+if option.collapsed
+    option.band = 'Cents';
+end
+m = get(s,'Magnitude');
+f = get(s,'Frequency');
+for k = 1:length(m)
+    if not(iscell(m{k}))
+        m{k} = {m{k}};
+        f{k} = {f{k}};
+    end
+end
+if get(s,'Power') == 1 && ...
+        (option.pow || any(option.mprod) || any(option.msum)) 
+    for h = 1:length(m)
+        for l = 1:length(m{k})
+            m{h}{l} = m{h}{l}.^2;
+        end
+    end
+    s = set(s,'Power',2,'Title',['Power ',get(s,'Title')]);
+end
+if any(option.mprod)
+    for h = 1:length(m)
+        for l = 1:length(m{k})
+            z0 = m{h}{l};
+            z1 = z0;
+            for k = 1:length(option.mprod)
+                mpr = option.mprod(k);
+                if mpr
+                    zi = ones(size(z0));
+                    zi(1:floor(end/mpr),:,:) = z0(mpr:mpr:end,:,:);
+                    z1 = z1.*zi;
+                end
+            end
+            m{h}{l} = z1;
+        end
+    end
+    s = set(s,'Title','Spectral product');
+end
+if any(option.msum)
+    for h = 1:length(m)
+        for l = 1:length(m{k})
+            z0 = m{h}{l};
+            z1 = z0;
+            for k = 1:length(option.msum)
+                mpr = option.msum(k);
+                if mpr
+                    zi = ones(size(z0));
+                    zi(1:floor(end/mpr),:,:) = z0(mpr:mpr:end,:,:);
+                    z1 = z1+zi;
+                end
+            end
+            m{h}{l} = z1;
+        end
+    end
+    s = set(s,'Title','Spectral sum');
+end
+%for i = option.e  % Enhancing procedure %%%% TO CHECK, t IS NOT DEFINED!
+%    for h = 1:length(m)
+%        for l = 1:length(m{k})
+%            c = m{h}{l};
+%            % option.e is the list of scaling factors
+%            % i is the scaling factor
+%            if i
+%                ic = zeros(size(c));
+%                for g = 1:size(c,2)
+%                    for h2 = 1:size(c,3)
+%                        beg = find(t(:,g,h2)/i >= t(1,g,h2))
+%                        if not(isempty(beg))
+%                            ic(:,g,h2) = interp1(t(:,g,h2),c(:,g,h2),t(:,g,h2)/i); %,'cubic'); 
+                                % The scaled autocorrelation
+%                            ic(1:beg(1)-1,g,h2) = 0;
+%                        end
+%                    end
+%                end
+%                ic(find(isnan(ic))) = Inf;    % All the NaN values are changed into 0 in the resulting curve
+%                ic = max(ic,0);
+%                c = c - ic;       % The scaled autocorrelation is substracted to the initial one
+%                c = max(c,0);               % Half-wave rectification
+                %figure
+                %plot(c)
+%            end
+%        end
+%    end
+%end
+if option.norm
+    for k = 1:length(m)
+        for l = 1:length(m{k})
+            mkl = m{k}{l};
+            nkl = zeros(1,size(mkl,2),size(mkl,3));
+            for kk = 1:size(mkl,2)
+                for ll = 1:size(mkl,3)
+                    nkl(1,kk,l) = norm(mkl(:,kk,ll));
+                end
+            end
+            m{k}{l} = mkl./repmat(nkl,[size(m{k}{k},1),1,1]);
+        end
+    end
+end
+if option.terhardt && not(isempty(find(f{1}{1}))) % This excludes the case where spectrum already along bands
+    % Code taken from Pampalk's MA Toolbox
+    for h = 1:length(m)
+        for l = 1:length(m{k})
+            W_Adb = zeros(size(f{k}{l}));
+            W_Adb(2:size(f{k}{l},1),:,:) = ...
+                + 10.^((-3.64*(f{k}{l}(2:end,:,:)/1000).^-0.8 ...
+                + 6.5 * exp(-0.6 * (f{k}{l}(2:end,:,:)/1000 - 3.3).^2) ...
+                - 0.001*(f{k}{l}(2:end,:,:)/1000).^4)/20);
+            W_Adb = W_Adb.^2;
+            m{h}{l} = m{h}{l}.*W_Adb;
+        end
+    end
+end
+if option.reso
+    if not(ischar(option.reso))
+        if strcmp(get(orig,'XScale'),'Mel')
+            option.reso = 'Fluctuation';
+        else
+            option.reso = 'ToiviainenSnyder';
+        end
+    end
+    %if strcmpi(option.reso,'ToiviainenSnyder') || ...
+    %   strcmpi(option.reso,'Meter') || ...
+    %   strcmpi(option.reso,'Fluctuation')
+    for k = 1:length(m)
+        for l = 1:length(m{k})
+            if strcmpi(option.reso,'ToiviainenSnyder') || strcmpi(option.reso,'Meter')
+                w = max(0,...
+                    1 - 0.25*(log2(max(1./max(f{k}{l},1e-12),1e-12)/0.5)).^2);
+            elseif strcmpi(option.reso,'Fluctuation')
+                w1 = f{k}{l} / 4; % ascending part of the fluctuation curve;
+                w2 = 1 - 0.3 * (f{k}{l} - 4)/6; % descending part;
+                w = min(w1,w2);
+            end
+            if max(w) == 0
+                warning('The resonance curve, not defined for this range of delays, will not be applied.')
+            else
+                m{k}{l} = m{k}{l}.* w;
+            end
+        end
+    end
+end
+if strcmp(s.xscale,'Freq')
+    if strcmpi(option.band,'Mel') 
+        % The following is largely based on the source code from Auditory Toolbox 
+        % (A part that I could not call directly from MIRtoolbox)
+
+        % (Malcolm Slaney, August 1993, (c) 1998 Interval Research Corporation)
+
+        try
+            MakeERBFilters(1,1,1); % Just to be sure that the Auditory Toolbox is installed
+        catch
+            error('ERROR IN MIRFILTERBANK: Auditory Toolbox needs to be installed.');
+        end  
+
+        %disp('Computing Mel-frequency spectral representation...')
+        lowestFrequency = 133.3333;
+        if not(option.nbbands)
+            option.nbbands = 40;
+        end
+        linearFilters = min(13,option.nbbands);
+        linearSpacing = 66.66666666;
+        logFilters = option.nbbands - linearFilters;
+        logSpacing = 1.0711703;
+        totalFilters = option.nbbands;
+
+        % Figure the band edges.  Interesting frequencies are spaced
+        % by linearSpacing for a while, then go logarithmic.  First figure
+        % all the interesting frequencies.  Lower, center, and upper band
+        % edges are all consequtive interesting frequencies. 
+        freqs = lowestFrequency + (0:linearFilters-1)*linearSpacing;
+        freqs(linearFilters+1:totalFilters+2) = ...
+                      freqs(linearFilters) * logSpacing.^(1:logFilters+2);
+        lower = freqs(1:totalFilters);
+        center = freqs(2:totalFilters+1);
+        upper = freqs(3:totalFilters+2);
+        
+        % Figure out the height of the triangle so that each filter has 
+        % unit weight, assuming a triangular weighting function.
+        triangleHeight = 2./(upper-lower);
+
+        e = cell(1,length(m));
+        nch = cell(1,length(m));
+        for h = 1:length(m)
+            e{h} = cell(1,length(m{h}));
+            for i = 1:length(m{h})
+                mi = m{h}{i};
+                fi = f{h}{i}(:,1,1);
+                fftSize = size(fi,1);
+                
+                % We now want to combine FFT bins and figure out 
+                % each frequencies contribution
+                mfccFilterWeights = zeros(totalFilters,fftSize);
+                for chan=1:totalFilters
+                     mfccFilterWeights(chan,:) = triangleHeight(chan).*...
+                        ((fi > lower(chan) & fi <= center(chan)).* ...
+                         (fi-lower(chan))/(center(chan)-lower(chan)) + ...
+                         (fi > center(chan) & fi < upper(chan)).* ...
+                         (upper(chan)-fi)/(upper(chan)-center(chan)));
+                end
+                if find(diff(not(sum(mfccFilterWeights,2)))==-1)
+                    % If one channel has no weight whereas the higher one
+                    % has a positive weight.
+                    warning('WARNING in MIRSPECTRUM: The frequency resolution of the spectrum is too low for the Mel transformation. Some Mel components are undefined.')
+                    display('Recommended frequency resolution: at least 66 Hz.')
+                end
+                e{h}{i} = zeros(1,size(mi,2),totalFilters);
+                for J = 1:size(mi,2)
+                    if max(mi(:,J)) > 0
+                        fftData = zeros(fftSize,1); % Zero-padding ?
+                        fftData(1:size(mi,1)) = mi(:,J);
+                        p = mfccFilterWeights * fftData + 1e-16;
+                        e{h}{i}(1,J,:) = reshape(p,[1,1,length(p)]);
+                    end
+                end
+                f{h}{i} = zeros(1,size(mi,2),totalFilters);
+            end
+            nch{h} = (1:totalFilters)';
+        end
+        m = e;
+        s = set(s,'XScale','Mel','Title','Mel-Spectrum','Abs','Mel bands','Channels',nch);
+    elseif strcmpi(option.band,'Bark')
+        sr = get(s,'Sampling');
+        % Code taken from Pampalk's MA Toolbox.
+        %% zwicker & fastl: psychoacoustics 1999, page 159
+        bark_upper = [10 20 30 40 51 63 77 92 108 127 148 172 200 232 270 315 370 440 530 640 770 950 1200 1550]*10; %% Hz
+        e = cell(1,length(m));
+        nch = cell(1,length(m));
+        for h = 1:length(m)
+            %% ignore critical bands outside of sampling rate range
+            cb = min(min([find(bark_upper>sr{h}/2),length(bark_upper)]),length(bark_upper));
+            e{h} = cell(1,length(m{h}));
+            for i = 1:length(m{h})
+                mi = sum(m{h}{i},3);
+                e{h}{i} = zeros(1,size(mi,2),cb);
+                k = 1;
+                for J=1:cb, %% group into bark bands
+                    idx = find(f{h}{i}(k:end,1,1)<=bark_upper(J));
+                    idx = idx + k-1;
+                    e{h}{i}(1,:,J) = sum(mi(idx,:,:),1);
+                    k = max(idx)+1;
+                end
+                f{h}{i} = zeros(1,size(mi,2),cb);
+            end
+            nch{h} = (1:length(bark_upper))';
+           end
+        m = e;
+        s = set(s,'XScale','Bark','Title','Bark-Spectrum','Abs','Bark bands','Channels',nch);
+    elseif strcmpi(option.band,'Cents') || option.collapsed
+        for h = 1:length(m)
+            for i = 1:length(m{h})
+                mi = m{h}{i};
+                fi = f{h}{i};
+                isgood = fi(:,1,1)*(2^(1/1200)-1) >= fi(2,1,1)-fi(1,1,1);
+                good = find(isgood);
+                if isempty(good)
+                    mirerror('mirspectrum',...
+                        'The frequency resolution of the spectrum is too low to be decomposed into cents.');
+                    display('Hint: if you specify a minimum value for the frequency range (''Min'' option)');
+                    display('      and if you do not specify any frequency resolution (''Res'' option), ');
+                    display('      the correct frequency resolution will be automatically chosen.');
+                end
+                if good>1
+                    warning(['MIRSPECTRUM: Frequency resolution in cent is achieved for frequencies over ',...
+                        num2str(floor(fi(good(1)))),' Hz. Lower frequencies are ignored.'])
+                    display('Hint: if you specify a minimum value for the frequency range (''Min'' option)');
+                    display('      and if you do not specify any frequency resolution (''Res'' option), ');
+                    display('      the correct frequency resolution will be automatically chosen.');
+                end
+                fi = fi(good,:,:);
+                mi = mi(good,:,:);
+                f2cents = 440*2.^(1/1200*(-1200*10:1200*10-1)');
+                    % The frequencies corresponding to the cent range
+                cents = repmat((0:1199)',[20,size(fi,2),size(fi,3)]);
+                    % The cent range is for the moment centered to A440
+                octaves = ones(1200,1)*(-10:10);
+                octaves = repmat(octaves(:),[1,size(fi,2),size(fi,3)]);
+                select = find(f2cents>fi(1) & f2cents<fi(end));
+                    % Cent range actually used in the current spectrum
+                f2cents = repmat(f2cents(select),[1,size(fi,2),size(fi,3)]);
+                cents = repmat(cents(select),[1,size(fi,2),size(fi,3)]);
+                octaves = repmat(octaves(select),[1,size(fi,2),size(fi,3)]);
+                m{h}{i} = interp1(fi(:,1,1),mi,f2cents(:,1,1));
+                f{h}{i} = octaves*1200+cents + 6900;
+                    % Now the cent range is expressed in midicent
+            end
+        end
+        s = set(s,'Abs','pitch (in midicents)','XScale','Cents');
+    end
+end
+if option.mask
+    if strcmp(s.xscale,'Freq')
+        warning('WARNING IN MIRSPECTRUM: ''Mask'' option available only for Mel-spectrum and Bark-spectrum.');
+        disp('''Mask'' option ignored');
+    else
+        nch = get(s,'Channels');
+        for h = 1:length(m)
+            % Code taken from Pampalk's MA Toolbox.
+            %% spreading function: schroeder et al., 1979, JASA, optimizing
+            %% digital speech coders by exploiting masking properties of the human ear
+            cb = length(nch{h});  % Number of bands.
+            for i = 1:cb, 
+                spread(i,:) = 10.^((15.81+7.5*((i-(1:cb))+0.474)-17.5*(1+((i-(1:cb))+0.474).^2).^0.5)/10);
+            end
+            for i = 1:length(m{h})
+                for J = 1:size(m{h}{i},2)
+                    mj = m{h}{i}(1,J,:);
+                    mj = spread(1:length(mj),1:length(mj))*mj(:);
+                    m{h}{i}(1,J,:) = reshape(mj,1,1,length(mj));
+                end
+            end
+        end
+    end
+end
+if option.collapsed
+    for h = 1:length(m)
+        for i = 1:length(m{h})
+            mi = m{h}{i};
+            fi = f{h}{i};
+            centclass = rem(fi(:,1,1),1200);
+            %neg = find(centclass<0);
+            %centclass(neg) = 1200 + centclass(neg);
+            m{h}{i} = NaN(1200,size(mi,2),size(mi,3));
+            for k = 0:1199
+                m{h}{i}(k+1,:,:) = sum(mi(find(centclass==k),:,:),1);
+            end
+            f{h}{i} = repmat((0:1199)',[1,size(fi,2),size(fi,3)]);
+        end
+    end
+    s = set(s,'Abs','Cents','XScale','Cents(Collapsed)');
+end
+if option.log || option.db
+    if not(isa(s,'mirspectrum') && s.log)
+        if option.db
+            s = set(s,'log',10);
+        else
+            s = set(s,'log',1);
+        end
+        for k = 1:length(m)
+            if not(iscell(m{k}))
+                m{k} = {m{k}};
+                f{k} = {f{k}};
+            end
+            for l = 1:length(m{k})
+                m{k}{l} = log10(m{k}{l}+1e-16);
+                if option.db
+                    m{k}{l} = 10*m{k}{l};
+                end
+            end
+        end
+    elseif isa(s,'mirspectrum') && s.log<10
+        for k = 1:length(m)
+            for l = 1:length(m{k})
+                m{k}{l} = 10*m{k}{l};
+            end
+        end
+    end
+    if option.db>0 && option.db < Inf
+        for k = 1:length(m)
+            for l = 1:length(m{k})
+                m{k}{l} = m{k}{l}-repmat(max(m{k}{l}),[size(m{k}{l},1) 1 1]);
+                m{k}{l} = option.db + max(-option.db,m{k}{l});
+            end
+        end
+    end
+end
+if option.aver
+    for k = 1:length(m)
+        for i = 1:length(m{k})
+            m{k}{i} = filter(ones(1,option.aver),1,m{k}{i});
+        end
+    end
+end
+if option.gauss
+    for k = 1:length(m)
+        for i = 1:length(m{k})
+            sigma = option.gauss;
+            gauss = 1/sigma/2/pi...
+                    *exp(- (-4*sigma:4*sigma).^2 /2/sigma^2);
+            y = filter(gauss,1,[m{k}{i};zeros(4*sigma,1)]);
+            y = y(4*sigma:end,:,:);
+            m{k}{i} = y(1:size(m{k}{i},1),:,:);
+        end
+    end
+end
+s = set(s,'Magnitude',m,'Frequency',f);
+
+
+function dj = mirwindow(dj,win,N)
+if nargin<3
+    N = size(dj,1);
+elseif size(dj,1)<N
+    dj(N,1,1) = 0;
+end
+if not(win == 0)
+    winf = str2func(win);
+    try
+        w = window(winf,N);
+    catch
+        if strcmpi(win,'hamming')
+            disp('Signal Processing Toolbox does not seem to be installed. Recompute the hamming window manually.');
+            w = 0.54 - 0.46 * cos(2*pi*(0:N-1)'/(N-1));
+        else
+            error(['ERROR in MIRSPECTRUM: Unknown windowing function ',win,' (maybe Signal Processing Toolbox is not installed).']);
+        end
+    end
+    kw = repmat(w,[1,size(dj,2),size(dj,3)]);
+    dj = dj(1:N,:,:).* kw;
+end
+
+
+function [y orig] = eachchunk(orig,option,missing,postchunk)
+option.zp = option.zp+missing;
+y = mirspectrum(orig,option);
+
+
+function y = combinechunk(old,new)
+do = get(old,'Data');
+do = do{1}{1};
+dn = get(new,'Data');
+dn = dn{1}{1};
+y = set(old,'ChunkData',do+dn);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirspectrum/mtimes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function c = mtimes(a,b)
+
+if isa(b,'mirautocor')
+    if not(get(b,'OfSpectrum'))
+        b = mirautocor(b,'Freq');
+    end
+elseif isa(b,'mircepstrum')
+    b = mircepstrum(b,'Freq');
+end
+c = mirtimes(a,b);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirspectrum/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function ss = set(s,varargin)
+% SET Set properties for the MIRspectrum object
+% and return the updated object
+
+propertyArgIn = varargin;
+ph = s.phase;
+log = s.log;
+pow = s.pow;
+xs = s.xscale;
+d = mirdata(s);
+d = set(d,'Title',get(s,'Title'),'Abs',get(s,'Abs'),'Ord',get(s,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Magnitude'
+           d = set(d,'Data',val);
+       case 'Frequency'
+           d = set(d,'Pos',val);
+       case 'Phase'
+           ph = val;
+       case 'log'
+           log = val;
+       case 'XScale'
+           xs = val;
+       case 'Power'
+           pow = val;
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+ss.phase = ph;
+ss.log = log;
+ss.xscale = xs;
+ss.pow = pow;
+ss = class(ss,'mirspectrum',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function display(d)
+% MIRDESIGN/DISPLAY display of a MIR design
+
+va = inputname(1);
+if isempty(va)
+    va = 'ans';
+end
+disp(' ');
+for f = 1:length(d.fields)
+    disp(['Field ',d.fields{f},' has value:']);
+    d.data{f}
+end
+disp(['Temporary field has value:']);
+d.tmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function v = get(a,varargin)
+% GET Get properties from the MIRstruct object and return the value
+
+switch varargin{1}
+    case 'Fields'
+        v = a.fields;
+    case 'Data'
+        v = a.data;
+    case 'Tmp'
+        v = a.tmp;
+    case 'Stat'
+        v = a.stat;
+    otherwise
+        v = get(mirdesign(a),varargin{:});
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/mirstruct.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function s = mirstruct(varargin)
+
+d = mirdesign('','',{},{},struct,{}); %,0);
+s.fields = {};
+s.data = {};
+s.tmp = struct;
+s.stat = 0;
+s = class(s,'mirstruct',d);
+s = set(s,varargin{:});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+function ss = set(s,varargin)
+% SET Set properties from the MIRstruct object and return the value
+
+propertyArgIn = varargin;
+f = s.fields;
+d = s.data;
+t = s.tmp;
+st = s.stat;
+des = mirdesign(s);
+while length(propertyArgIn) >= 2,
+    prop = propertyArgIn{1};
+    val = propertyArgIn{2};
+    propertyArgIn = propertyArgIn(3:end);
+    switch prop
+        case 'Fields'
+            f = val;
+        case 'Data'
+            d = val;
+        case 'Tmp'
+            t = val;
+        case 'Stat'
+            st = val;
+        otherwise
+            des = set(des,prop,val);
+    end
+end
+ss.fields = f;
+ss.data = d;
+ss.tmp = t;
+ss.stat = st;
+ss = class(ss,'mirstruct',des);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/subsasgn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+function a = subsasgn(a,index,val)
+% SUBSASGN Define index assignment for mirstruct objects
+switch index(1).type
+case '.'
+    if strcmpi(index(1).subs,'tmp')
+        fields = a.fields;
+        data = a.data;
+        
+        if isa(val,'mirdata') || (iscell(val) && isa(val{1},'mirdata'))
+            % If the 'tmp' data turns to be an actual evaluated data,
+            % the mirstruct object is transformed into a simple struct.
+            a = struct;
+            for i = 1:length(fields)
+                a.(fields{i}) = data{i};
+            end
+            a.tmp.(index(2).subs) = val;
+            return
+        end
+        
+        if isa(val,'mirdesign')
+            val = set(val,'Stored',{index.subs});
+        end
+        if length(index)>2
+            if strcmpi(index(3).type,'{}')
+                isubs = index(3).subs;
+                if length(isubs)>1
+                    a.tmp.(index(2).subs){isubs{1},isubs{2}} = val;
+                else
+                    a.tmp.(index(2).subs){isubs{1}} = val;
+                end
+            end
+        else
+            a.tmp.(index(2).subs) = val;
+        end
+        aa = struct;
+        aa.fields = fields;
+        aa.data = data;
+        aa.tmp = a.tmp;
+        aa.stat = a.stat;
+        a = class(aa,'mirstruct',val);
+        return
+    end
+    [is,id] = ismember(index(1).subs,a.fields);
+    if not(is)
+        a.fields{end+1} = index(1).subs;
+        a.data{end+1} = [];
+        id = length(a.fields);
+    end
+    if length(index) == 1
+        a.data{id} = val;
+    else
+        a.data{id} = subsasgn(a.data{id},index(2:end),val);
+    end
+    if get(val,'NoChunk') && isframed(a)
+        a = set(a,'FrameDontChunk',1);
+        % Frame-decomposed flowchart where one dependent variable requires
+        % a complete computation. Should not therefore be evaluated
+        % chunk after chunk.
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/subsref.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function b = subsref(a,index)
+% Define field name indexing for mirstruct objects
+switch index(1).type
+case '.'
+    if strcmpi(index(1).subs,'tmp')
+        if length(index)== 1
+            b = [];
+        else
+            if length(index)>2
+                if strcmpi(index(3).type,'{}')
+                    isubs = index(3).subs;
+                    if length(isubs)>1
+                        b = a.tmp.(index(2).subs){isubs{1},isubs{2}};
+                    else
+                        b = a.tmp.(index(2).subs){isubs{1}};
+                    end
+                end
+            else
+                b = a.tmp.(index(2).subs);
+            end
+        end
+        return
+    end
+    [is,id] = ismember(index(1).subs,a.fields);
+    if length(index) == 1
+        b = a.data{id};
+    else
+        b = subsref(a.data{id},index(2:end));
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtemporal/display.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function display(d)
+% MIRDATA/DISPLAY display of a MIRtemporal
+
+if d.centered
+    d = set(d,'Title',[get(d,'Title'),' (centered)']);
+end
+mirdisplay(mirdata(d),inputname(1));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtemporal/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function val = get(a, propName)
+% GET Get properties from the MIRtemporal object
+% and return the value
+
+switch propName
+    case 'Time'
+        val = get(a,'Pos');
+    case 'Centered'
+        val = a.centered;
+    case 'NBits'
+        val = a.nbits;
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtemporal/mirtemporal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function t = mirtemporal(orig,varargin)
+%   t = mirtemporal(x) creates a temporal object from signal x.
+%   Optional arguments:
+%       mirtemporal(...,'Center') centers the signal x.
+
+if nargin > 0 && isa(orig,'mirtemporal')
+    t.centered = orig.centered;
+    t.nbits = orig.nbits;
+else
+    t.centered = 0;
+    t.nbits = {};
+end
+t = class(t,'mirtemporal',mirdata(orig));
+if nargin == 0 || not(isa(orig,'mirtemporal'))
+    t = set(t,'Title','Temporal signal','Abs','time (s)','Ord','amplitude');
+end
+if nargin>1
+    for i = 1:nargin-1
+        if strcmp(varargin{i},'Center')
+            d = get(t,'Data');
+            for h = 1:length(d)
+                for k = 1:length(d{h})
+                    d{h}{k} = center(d{k});
+                end
+            end
+            t = set(t,'Data',d);
+        end
+    end
+    t = set(t,varargin{:});
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtemporal/plus.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function c = plus(a,b)
+
+d = get(a,'Data');
+e = get(b,'Data');
+f = cell(1,length(d));
+p = get(a,'Time');
+q = get(b,'Time');
+r = cell(1,length(d));
+l = get(a,'Name');
+m = get(b,'Name');
+n = cell(1,length(l));
+for i = 1:length(d)
+    f{i} = cell(1,length(d{i}));
+    for j = 1:length(d{i})
+        ld = size(d{i}{j},1);
+        le = size(e{i}{j},1);
+        if ld > le
+            r{i}{j} = p{i}{j};
+            f{i}{j} = d{i}{j} + [e{i}{j};zeros(ld-le,size(e,2),size(e,3))];
+        else
+            r{i}{j} = q{i}{j};
+            f{i}{j} = [d{i}{j};zeros(le-ld,size(d,2),size(d,3))] + e{i}{j};
+        end
+    end
+    n{i} = [l{i} '+' m{i}];
+end
+c = set(a,'Pos',r,'Data',f,'Name',n);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtemporal/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function tt = set(t,varargin)
+% SET Set properties for the MIRtemporal object
+% and return the updated object
+
+propertyArgIn = varargin;
+c = t.centered;
+b = t.nbits;
+d = mirdata(t);
+d = set(d,'Title',get(t,'Title'),'Abs',get(t,'Abs'),'Ord',get(t,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Time'
+           d = set(d,'Pos',val);
+       case 'Centered'
+           c = val;
+       case 'NBits'
+           b = val;
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+tt.centered = c;
+tt.nbits = b;
+tt = class(tt,'mirtemporal',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtonalcentroid/get.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function val = get(a, propName)
+% GET Get properties from the MIRchromagram object
+% and return the value
+
+switch propName
+    case 'Positions'
+        val = get(mirdata(a),'Data');
+    case 'Dimensions'
+        val = get(mirdata(a),'Pos');
+    otherwise
+        val = get(mirdata(a),propName);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtonalcentroid/mirtonalcentroid.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+function varargout = mirtonalcentroid(orig,varargin)
+%   c = mirtonalcentroid(x) calculates the 6-dimensional tonal centroid
+%       vector from the chromagram. 
+%   It corresponds to a projection of the chords along circles of fifths, 
+%       of minor thirds, and of major thirds.
+%   [c ch] = mirtonalcentroid(x) also returns the intermediate chromagram.
+%
+% C. A. Harte and M. B. Sandler, Detecting harmonic change in musical
+%   audio, in Proceedings of Audio and Music Computing for Multimedia
+%   Workshop, Santa Barbara, CA, 2006. 
+
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [0 0];
+        frame.keydefault = [.743 .1];
+    option.frame = frame;
+
+specif.option = option;
+
+varargout = mirfunction(@mirtonalcentroid,orig,varargin,nargout,specif,@init,@main);
+
+
+function [c type] = init(orig,option)
+if option.frame.length.val
+    c = mirchromagram(orig,'Frame',option.frame.length.val,...
+                                   option.frame.length.unit,...
+                                   option.frame.hop.val,...
+                                   option.frame.hop.unit);
+else
+    c = mirchromagram(orig);
+end
+type = 'mirtonalcentroid';
+
+
+function tc = main(ch,option,postoption)
+if iscell(ch)
+    ch = ch{1};
+end
+if isa(ch,'mirtonalcentroid')
+    tc = orig;
+    ch = [];
+else
+    x1 = sin(pi*7*(0:11)/6)';
+    y1 = cos(pi*7*(0:11)/6)';
+    % minor thirds circle
+    x2 = sin(pi*3*(0:11)/2)';
+    y2 = cos(pi*3*(0:11)/2)';
+    % major thirds circle
+    x3 = 0.5 * sin(pi*2*(0:11)/3)';
+    y3 = 0.5 * cos(pi*2*(0:11)/3)';
+    c = [x1 y1 x2 y2 x3 y3];
+    c = c';
+    tc = class(struct,'mirtonalcentroid',mirdata(ch));
+    tc = purgedata(tc);
+    tc = set(tc,'Title','Tonal centroid','Abs','dimensions','Ord','position');
+    m = get(ch,'Magnitude');
+    %disp('Computing tonal centroid...')
+    n = cell(1,length(m));  % The final structured list of magnitudes.
+    d = cell(1,length(m));  % The final structured list of centroid dimensions.
+    for i = 1:length(m)
+        mi = m{i};
+        if not(iscell(mi))
+            mi = {mi};
+        end
+        ni = cell(1,length(mi));    % The list of magnitudes.
+        di = cell(1,length(mi));    % The list of centroid dimensions.
+        for j = 1:length(mi)
+            mj = mi{j};
+            ni{j} = zeros(6,size(mj,2),size(mi,3));
+            for k = 1:size(mj,3)
+                ni{j}(:,:,k) = c * mj(:,:,k);
+            end
+            di{j} = repmat((1:6)',[1,size(mj,2),size(mi,3)]);
+        end
+        n{i} = ni;
+        d{i} = di;
+    end
+    tc = set(tc,'Positions',n,'Dimensions',d);
+end
+tc = {tc,ch};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirtonalcentroid/set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+function cc = set(c,varargin)
+% SET Set properties for the MIRtonalcentroid object
+% and return the updated object
+
+propertyArgIn = varargin;
+d = mirdata(c);
+d = set(d,'Title',get(c,'Title'),'Abs',get(c,'Abs'),'Ord',get(c,'Ord'));
+while length(propertyArgIn) >= 2,
+   prop = propertyArgIn{1};
+   val = propertyArgIn{2};
+   propertyArgIn = propertyArgIn(3:end);
+   switch prop
+       case 'Positions'
+           d = set(d,'Data',val);
+       case 'Dimensions'
+           d = set(d,'Pos',val);
+       otherwise
+           d = set(d,prop,val);
+   end
+end
+cc = class(struct,'mirtonalcentroid',d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/Contents.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,107 @@
+% MIRtoolbox
+% Version 1.3.2 19-January-2011
+%
+% A more detailed documentation of each function is available using the
+% help command. For instance, type help miraudio.
+%
+% A complete documentation is available in the downloaded folder and online.
+%			http://www.jyu.fi/music/coe/materials/mirtoolbox
+%
+%BASIC AUDIO OPERATIONS
+% miraudio         - Loads and return waveform
+% mirframe         - Decomposes into successive frames
+% mirsegment       - Decomposes into successive segments
+% mirlength        - Temporal length
+%
+%DATA OUTPUT
+% mirgetdata       - Return result as a Matlab standard structure
+% mirsave          - Save audio and other temporal data into audio files
+% mirexport        - Export the analytical results to a text file
+% mirplay          - Plays audio and other temporal data
+%
+%ANALYTICAL OPERATORS
+% mirspectrum      - FFT spectrum with many post-processing operations
+% mirautocor       - Autocorrelation function
+% mirfilterbank    - Decomposes into channels via a bank of filters
+% mirsum           - Sums the channels of a filterbank
+%
+%DYNAMIC
+% mirrms           - Root mean square energy
+% mirlowenergy     - Number of frames with lower than average energy
+% mirenvelope      - Amplitude envelope (global shape of the waveform)
+% mironsets        - Note onset positions and characteristics
+% mirattacktime    - Duration of note attacks
+% mirattackslope   - Average slope of note attacks
+% mireventdensity  - Average frequency of events
+%
+%RHYTHM
+% mirtempo         - Tempo (in beats per minute)
+% mirfluctuation   - Fluctuation strength (periodicities in each channel)
+% mirbeatspectrum  - Beat spectrum, characterizing the rhythmic content
+% mirpulseclarity  - Rhythmic clarity, i.e., beat strength
+%
+%TIMBRE
+% mirbrightness    - Spectral brightness (high-frequency rate)
+% mirrolloff       - Spectral rolloff (frequency above which is located a 
+%                       certain amount of energy)
+% mirmfcc          - Mel-frequency cepstrum coefficients
+%                       (numerical description of the spectrum envelope)
+% mirinharmonicity - Inharmonicity (partials non-multiple of fundamental)
+% mirroughness     - Roughness (sensory dissonance)
+% mirregularity    - Spectrum irregularity (amplitude variability of 
+%                        successive peaks)
+%
+%PITCH
+% mirpitch         - Pitch frequencies
+% mircepstrum      - Cepstrum representation (showing periodicities)
+% mirmidi          - Attempts a conversion of audio into MIDI
+%
+%TONALITY
+% mirchromagram    - Chromagram (distribution of energy along pitches)
+% mirkeystrength   - Key strengths (probability of key candidates)
+% mirkey           - Best keys and modes (in the 12 tone system)
+% mirkeysom        - Visualizes key strengths with self-organizing map
+% mirmode          - General estimation of mode (major/minor)
+% mirtonalcentroid - Tonal centroid (using circles of fifths and thirds)
+% mirhcdf          - Harmonic Change Detection Function
+%
+%PREDICTIONS
+% miremotion       - Emotion, represented both as classes and dimensions
+%
+%ANALYSIS
+% mirmean          - Returns the mean of any feature
+% mirstd           - Returns the standard deviation of any feature
+% mirstat          - Returns statistics of any feature
+% mirpeaks         - Peaks
+% mirhisto         - Histogram
+% mirentropy       - Entropy
+% mirzerocross     - Sign-changes ratio
+% mircentroid      - Centroid (center of gravity)
+% mirspread        - Spread (non-concentration)
+% mirskewness      - Skewness (lack of symmetry)
+% mirkurtosis      - Kurtosis (peakiness)
+% mirflatness      - Flatness
+%
+%SIMILARITY
+% mirflux          - Flux, i.e., distance between successive frames
+% mirsimatrix      - Similarity matrix
+% mirnovelty       - Novelty score
+% mirdist          - Distance between audio files
+% mirquery         - Query by example
+%
+%OTHER
+% mirclassify      - Classifies audio sequences
+% mircluster       - Clusters segments or frames
+% mirfeatures      - Compute a large range of features
+% mirmap           - Performs statistical mapping
+%
+%MATLAB FUNCTIONS generalized to the MIRtoolbox data
+% +                - Superposes audio files
+% *                - Combines autocor, cepstrum curves
+% corrcoef         - Computes correlation between curves
+%
+%PREFERENCES
+% mirchunklim      - Get or set the chunk size threshold
+% mirwaitbar       - Toggles on/off the display of progress bars
+% mirverbose       - Toggles on/off the display of ongoing operations
+% mirparallel      - Toggles on/off parallel processing
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/MakeERBFilters.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,120 @@
+function fcoefs=MakeERBFilters(fs,numChannels,lowFreq)
+% function [fcoefs]=MakeERBFilters(fs,numChannels,lowFreq)
+% This function computes the filter coefficients for a bank of 
+% Gammatone filters.  These filters were defined by Patterson and 
+% Holdworth for simulating the cochlea.  
+% 
+% The result is returned as an array of filter coefficients.  Each row 
+% of the filter arrays contains the coefficients for four second order 
+% filters.  The transfer function for these four filters share the same
+% denominator (poles) but have different numerators (zeros).  All of these
+% coefficients are assembled into one vector that the ERBFilterBank 
+% can take apart to implement the filter.
+%
+% The filter bank contains "numChannels" channels that extend from
+% half the sampling rate (fs) to "lowFreq".  Alternatively, if the numChannels
+% input argument is a vector, then the values of this vector are taken to
+% be the center frequency of each desired filter.  (The lowFreq argument is
+% ignored in this case.)
+
+% Note this implementation fixes a problem in the original code by
+% computing four separate second order filters.  This avoids a big
+% problem with round off errors in cases of very small cfs (100Hz) and
+% large sample rates (44kHz).  The problem is caused by roundoff error
+% when a number of poles are combined, all very close to the unit
+% circle.  Small errors in the eigth order coefficient, are multiplied
+% when the eigth root is taken to give the pole location.  These small
+% errors lead to poles outside the unit circle and instability.  Thanks
+% to Julius Smith for leading me to the proper explanation.
+
+% Execute the following code to evaluate the frequency
+% response of a 10 channel filterbank.
+%	fcoefs = MakeERBFilters(16000,10,100);
+%	y = ERBFilterBank([1 zeros(1,511)], fcoefs);
+%	resp = 20*log10(abs(fft(y')));
+%	freqScale = (0:511)/512*16000;
+%	semilogx(freqScale(1:255),resp(1:255,:));
+%	axis([100 16000 -60 0])
+%	xlabel('Frequency (Hz)'); ylabel('Filter Response (dB)');
+
+% Rewritten by Malcolm Slaney@Interval.  June 11, 1998.
+% (c) 1998 Interval Research Corporation  
+
+T = 1/fs;
+if length(numChannels) == 1
+	cf = ERBSpace(lowFreq, fs/2, numChannels);
+else
+	cf = numChannels(1:end);
+	if size(cf,2) > size(cf,1)
+		cf = cf';
+	end
+end
+
+% Change the followFreqing three parameters if you wish to use a different
+% ERB scale.  Must change in ERBSpace too.
+EarQ = 9.26449;				%  Glasberg and Moore Parameters
+minBW = 24.7;
+order = 1;
+
+ERB = ((cf/EarQ).^order + minBW^order).^(1/order);
+B=1.019*2*pi*ERB;
+
+A0 = T;
+A2 = 0;
+B0 = 1;
+B1 = -2*cos(2*cf*pi*T)./exp(B*T);
+B2 = exp(-2*B*T);
+
+A11 = -(2*T*cos(2*cf*pi*T)./exp(B*T) + 2*sqrt(3+2^1.5)*T*sin(2*cf*pi*T)./ ...
+		exp(B*T))/2;
+A12 = -(2*T*cos(2*cf*pi*T)./exp(B*T) - 2*sqrt(3+2^1.5)*T*sin(2*cf*pi*T)./ ...
+		exp(B*T))/2;
+A13 = -(2*T*cos(2*cf*pi*T)./exp(B*T) + 2*sqrt(3-2^1.5)*T*sin(2*cf*pi*T)./ ...
+		exp(B*T))/2;
+A14 = -(2*T*cos(2*cf*pi*T)./exp(B*T) - 2*sqrt(3-2^1.5)*T*sin(2*cf*pi*T)./ ...
+		exp(B*T))/2;
+
+gain = abs((-2*exp(4*i*cf*pi*T)*T + ...
+                 2*exp(-(B*T) + 2*i*cf*pi*T).*T.* ...
+                         (cos(2*cf*pi*T) - sqrt(3 - 2^(3/2))* ...
+                          sin(2*cf*pi*T))) .* ...
+           (-2*exp(4*i*cf*pi*T)*T + ...
+             2*exp(-(B*T) + 2*i*cf*pi*T).*T.* ...
+              (cos(2*cf*pi*T) + sqrt(3 - 2^(3/2)) * ...
+               sin(2*cf*pi*T))).* ...
+           (-2*exp(4*i*cf*pi*T)*T + ...
+             2*exp(-(B*T) + 2*i*cf*pi*T).*T.* ...
+              (cos(2*cf*pi*T) - ...
+               sqrt(3 + 2^(3/2))*sin(2*cf*pi*T))) .* ...
+           (-2*exp(4*i*cf*pi*T)*T + 2*exp(-(B*T) + 2*i*cf*pi*T).*T.* ...
+           (cos(2*cf*pi*T) + sqrt(3 + 2^(3/2))*sin(2*cf*pi*T))) ./ ...
+          (-2 ./ exp(2*B*T) - 2*exp(4*i*cf*pi*T) +  ...
+           2*(1 + exp(4*i*cf*pi*T))./exp(B*T)).^4);
+	
+allfilts = ones(length(cf),1);
+fcoefs = [A0*allfilts A11 A12 A13 A14 A2*allfilts B0*allfilts B1 B2 gain];
+
+if 0						% Test Code
+    figure
+	A0  = fcoefs(:,1);
+	A11 = fcoefs(:,2);
+	A12 = fcoefs(:,3);
+	A13 = fcoefs(:,4);
+	A14 = fcoefs(:,5);
+	A2  = fcoefs(:,6);
+	B0  = fcoefs(:,7);
+	B1  = fcoefs(:,8);
+	B2  = fcoefs(:,9);
+	gain= fcoefs(:,10);	
+	chan=1;
+	x = [1 zeros(1, 511)];
+	y1=filter([A0(chan)/gain(chan) A11(chan)/gain(chan) ...
+		A2(chan)/gain(chan)],[B0(chan) B1(chan) B2(chan)], x);
+	y2=filter([A0(chan) A12(chan) A2(chan)], ...
+			[B0(chan) B1(chan) B2(chan)], y1);
+	y3=filter([A0(chan) A13(chan) A2(chan)], ...
+			[B0(chan) B1(chan) B2(chan)], y2);
+	y4=filter([A0(chan) A14(chan) A2(chan)], ...
+			[B0(chan) B1(chan) B2(chan)], y3);
+	semilogx((0:(length(x)-1))*(fs/length(x)),20*log10(abs(fft(y4))));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/aiffread.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,575 @@
+function [data,Fs,nBits,formChunk] = aiffread(filePath,indexRange)
+%AIFFREAD   Read AIFF (Audio Interchange File Format) sound file.
+%   Y = AIFFREAD(FILE) reads an AIFF file specified by the string FILE,
+%   returning the sampled data in Y. The ".aif" extension is appended if no
+%   extension is given.
+%
+%   [Y,FS,NBITS,CHUNKDATA] = AIFFREAD(FILE) returns the sample rate (FS) in
+%   Hertz, the number of bits per sample (NBITS) used to encode the data in
+%   the file, and a complete structure of the chunk data (CHUNKDATA)
+%   contained in the AIFF file (minus the actual audio data returned in Y).
+%   See below for a description of CHUNKDATA.
+%
+%   [...] = AIFFREAD(FILE,N) returns only the first N samples from each
+%   channel in the file.
+%
+%   [...] = AIFFREAD(FILE,[N1 N2]) returns only samples N1 through N2 from
+%   each channel in the file.
+%
+%   [SIZ,...] = AIFFREAD(FILE,'size') returns the size of the audio data
+%   contained in the file in place of the actual audio data, where
+%   SIZ = [nSampleFrames nChannels].
+%
+%-NOTES--------------------------------------------------------------------
+%
+%   A note on compressed files:
+%
+%      Both AIFF and AIFC/AIFF-C (compressed) file types can be read by
+%      AIFFREAD, but the data returned for AIFC/AIFF-C files will be the
+%      raw, compressed data (i.e. AIFFREAD loads the data from the file
+%      without modification). Currently, since there are many compression
+%      formats, it is the responsibility of the user to uncompress the
+%      sound data using parameters defined in the COMM chunk (contained in
+%      the returned CHUNKDATA structure). When loading AIFC/AIFF-C files,
+%      any optional numerical subranges are ignored and the entire set of
+%      compressed data is returned as a column vector of signed bytes
+%      (INT8 type).
+%
+%   A note on the CHUNKDATA structure:
+%
+%      The CHUNKDATA structure has the following fields:
+%
+%         -'chunkID': The 4-character ID for the chunk. This will always be
+%                     the string 'FORM'.
+%         -'chunkSize': The size (in bytes) of the remaining data in the
+%                       file.
+%         -'formType': A 4-character string for the file type that should
+%                      be either 'AIFF' or 'AIFC'.
+%         -'chunkArray': An array of structures, one entry for every chunk
+%                        that is in the file (not counting this parent FORM
+%                        chunk). The fields of this structure are:
+%                           -'chunkID': The 4-character ID for the chunk.
+%                           -'chunkSize': The size (in bytes) of the
+%                                         remaining data in the chunk.
+%                           -'chunkData': A structure of data for the
+%                                         chunk. The form of this data for
+%                                         a given chunkID can be found at
+%                                         the links given below for the
+%                                         file format standards.
+%
+%      The data portion of certain chunks may not have a clearly defined
+%      format, or that format may be dependent on the implementation or
+%      application that will be using the data. In such cases, the data
+%      returned for that chunk in the CHUNKDATA structure will be in a raw
+%      format (vectors of signed or unsigned 8-bit integers) and it will be
+%      up to the user/application to parse and format this data correctly.
+%      The following is a list of such AIFF/AIFF-C chunks:
+%
+%         -Audio Recording Chunk (chunkID = 'AESD'): The chunkData
+%          structure has one field 'aesChannelStatusData' that stores a
+%          column vector of 24 8-bit unsigned integers.
+%         -Application Specific Chunk (chunkID = 'APPL'): The chunkData
+%          structure has two fields. 'applicationSignature' stores a
+%          4-character string identifying the application. 'data' stores a
+%          column vector of 8-bit signed integers.
+%         -MIDI Data Chunk (chunkID = 'MIDI'): The chunkData structure has
+%          one field 'midiData' that stores a column vector of 8-bit
+%          unsigned integers.
+%         -Sound Accelerator (SAXEL) Chunk (chunkID = 'SAXL'): There is no
+%          finalized format for Saxel chunks, so the chunkData structure
+%          follows the draft format given in Appendix D of the AIFF-C
+%          standard.
+%
+%   Description for the AIFF standard can be found here:
+%
+%      http://muratnkonar.com/aiff/index.html
+%
+%   Descriptions for the AIFC/AIFF-C standard can be found here:
+%
+%      http://www.cnpbagwell.com/aiff-c.txt
+%      http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/Docs/...
+%             AIFF-C.9.26.91.pdf
+
+% Author: Ken Eaton
+% Last modified: 3/17/09
+%--------------------------------------------------------------------------
+
+  % Initializations:
+
+  aiffChunkPrecedence = {'COMM' 'SSND' 'MARK' 'INST' 'COMT' 'NAME' ...
+                         'AUTH' '[c] ' 'ANNO' 'AESD' 'MIDI' 'APPL'};
+  aiffChunkLimits = [1 1 1 1 1 1 1 1 inf 1 inf inf];
+  aifcChunkPrecedence = {'FVER' 'COMM' 'INST' 'SAXL' 'COMT' 'MARK' ...
+                         'SSND' 'NAME' 'AUTH' '[c] ' 'ANNO' 'AESD' ...
+                         'MIDI' 'APPL'};
+  aifcChunkLimits = [1 1 1 inf 1 1 1 1 1 1 inf 1 inf inf];
+  fid = -1;
+
+  % Check the number of input arguments:
+
+  switch nargin,
+    case 0,
+      error(error_message('notEnoughInputs'));
+    case 1,
+      indexRange = [1 inf];
+  end
+
+  % Check the file name input argument:
+
+  if ~ischar(filePath),
+    error(error_message('badArgumentType','File name','char'));
+  end
+  [filePath,fileName,fileExtension] = fileparts(filePath);
+  if isempty(fileExtension),
+    fileExtension = '.aif';
+  end
+  if ~any(strcmpi(fileExtension,{'.aif' '.afc' '.aiff' '.aifc'})),
+    error(error_message('unknownExtension',fileExtension));
+  end
+
+  % Check the optional input argument:
+
+  if isnumeric(indexRange),  % Numeric range specification
+
+    indexRange = double(indexRange);
+    nRange = numel(indexRange);
+    if (nRange > 2) || any(indexRange < 1) || any(isnan(indexRange)),
+      error(error_message('badIndexValue'));
+    end
+    indexRange = [ones(nRange ~= 2) round(indexRange) inf(nRange == 0)];
+
+  elseif ischar(indexRange),  % Specification for returning just the size
+
+    if ~strncmpi(indexRange,'size',numel(indexRange)),
+      error(error_message('invalidString'));
+    end
+    indexRange = [];
+
+  else  % Invalid input
+
+    error(error_message('badArgumentType','Optional argument',...
+                        'numeric or char'));
+
+  end
+
+  % Check that the file exists and can be opened:
+
+  fid = fopen(fullfile(filePath,[fileName fileExtension]),'r','b');
+  if fid == -1,
+    error(error_message('invalidFile',[fileName fileExtension]));
+  end
+
+  % Initialize formChunk structure:
+
+  formChunk = struct('chunkID',[],'chunkSize',[],'formType',[],...
+                     'chunkArray',[]);
+
+  % Read FORM chunk data:
+
+  formChunk.chunkID = read_text(fid,4);
+  if ~strcmp(formChunk.chunkID,'FORM'),
+    error(error_message('invalidFileFormat',fileExtension));
+  end
+  formChunk.chunkSize = fread(fid,1,'int32');
+  formType = read_text(fid,4);
+  if ~any(strcmp(formType,{'AIFF' 'AIFC'})),
+    error(error_message('invalidFileFormat',fileExtension));
+  end
+  formChunk.formType = formType;
+
+  % Since the order of chunks is not guaranteed, first skip through the
+  %   file and read just the chunkIDs and chunkSizes:
+
+  iChunk = 0;
+  chunkIDArray = {};
+  chunkSizeArray = {};
+  chunkDataIndex = [];
+  nextChunkID = read_text(fid,4);
+  while ~feof(fid),
+    iChunk = iChunk+1;
+    chunkIDArray{iChunk} = nextChunkID;
+    chunkSize = fread(fid,1,'int32');
+    chunkSizeArray{iChunk} = chunkSize;
+    chunkDataIndex(iChunk) = ftell(fid);
+    fseek(fid,chunkSize+rem(chunkSize,2),'cof');
+    nextChunkID = read_text(fid,4);
+  end
+
+  % Check for the presence of required chunks:
+
+  if ~ismember('COMM',chunkIDArray),
+    error(error_message('missingChunk','COMM',formType));
+  end
+  if strcmp(formType,'AIFC') && ~ismember('FVER',chunkIDArray),
+    error(error_message('missingChunk','FVER',formType));
+  end
+
+  % Check for unknown chunks and order chunks based on chunk precedence:
+
+  if strcmp(formType,'AIFF'),
+    [isChunk,orderIndex] = ismember(chunkIDArray,aiffChunkPrecedence);
+  else
+    [isChunk,orderIndex] = ismember(chunkIDArray,aifcChunkPrecedence);
+  end
+  if ~all(isChunk),
+    unknownChunks = [chunkIDArray(~isChunk); ...
+                     repmat({', '},1,sum(~isChunk)-1) {'.'}];
+    orderIndex = orderIndex(isChunk);
+    chunkIDArray = chunkIDArray(isChunk);
+    chunkSizeArray = chunkSizeArray(isChunk);
+    chunkDataIndex = chunkDataIndex(isChunk);
+    warning('aiffread:unknownChunk',...
+            ['The following chunk IDs are unknown for an ' formType ...
+             ' file and will be ignored: ' unknownChunks{:}]);
+  end
+  [index,orderIndex] = sort(orderIndex);
+  chunkIDArray = chunkIDArray(orderIndex);
+  chunkSizeArray = chunkSizeArray(orderIndex);
+  chunkDataIndex = chunkDataIndex(orderIndex);
+
+  % Check for chunks that should not appear more than once:
+
+  index = unique(index(diff(index) < 1));
+  if strcmp(formType,'AIFF'),
+    repeatChunks = aiffChunkPrecedence(aiffChunkLimits(index) == 1);
+  else
+    repeatChunks = aifcChunkPrecedence(aifcChunkLimits(index) == 1);
+  end
+  if ~isempty(repeatChunks),
+    repeatChunks = [repeatChunks; ...
+                    repmat({', '},1,numel(repeatChunks)-1) {'.'}];
+    error(error_message('repeatChunk',formType,[repeatChunks{:}]));
+  end
+
+  % Initialize chunkArray data:
+
+  formChunk.chunkArray = struct('chunkID',chunkIDArray,...
+                                'chunkSize',chunkSizeArray,...
+                                'chunkData',[]);
+
+  % Read the data for each chunk:
+
+  for iChunk = 1:numel(chunkIDArray),
+    chunkData = [];
+    fseek(fid,chunkDataIndex(iChunk),'bof');
+    switch chunkIDArray{iChunk},
+
+      case '[c] ',  % Copyright Chunk
+
+        chunkData.text = read_text(fid,chunkSizeArray{iChunk});
+
+      case 'AESD',  % Audio Recording Chunk
+
+        chunkData.aesChannelStatusData = ...
+          fread(fid,[chunkSizeArray{iChunk} 1],'*uint8');
+
+      case 'ANNO',  % Annotation Chunk
+
+        chunkData.text = read_text(fid,chunkSizeArray{iChunk});
+
+      case 'APPL',  % Application Specific Chunk
+
+        chunkData.applicationSignature = read_text(fid,4);
+        chunkData.data = fread(fid,[chunkSizeArray{iChunk}-4 1],'*int8');
+
+      case 'AUTH',  % Author Chunk
+
+        chunkData.text = read_text(fid,chunkSizeArray{iChunk});
+
+      case 'COMM',  % Common Chunk
+
+        nChannels = fread(fid,1,'int16');
+        chunkData.nChannels = nChannels;
+        nSampleFrames = fread(fid,1,'uint32');
+        if (nSampleFrames > 0) && ~ismember('SSND',chunkIDArray),
+          error(error_message('missingChunk','SSND',formType));
+        end
+        chunkData.nSampleFrames = nSampleFrames;
+        nBits = fread(fid,1,'int16');
+        chunkData.sampleSize = nBits;
+        exponent = fread(fid,1,'uint16');
+        highMantissa = fread(fid,1,'uint32');
+        lowMantissa = fread(fid,1,'uint32');
+        Fs = extended2double(exponent,highMantissa,lowMantissa);
+        chunkData.sampleRate = Fs;
+        if strcmp(formType,'AIFF'),
+          compressionType = 'NONE';
+        else
+          compressionType = read_text(fid,4);
+          chunkData.compressionType = compressionType;
+          chunkData.compressionName = read_pstring(fid);
+        end
+
+      case 'COMT',  % Comments Chunk
+
+        nComments = fread(fid,1,'uint16');
+        chunkData.nComments = nComments;
+        chunkData.commentArray = struct('timeStamp',cell(nComments,1),...
+                                        'marker',[],'count',[],'text',[]);
+        for iComment = 1:nComments,
+          chunkData.commentArray(iComment) = read_comment(fid);
+        end
+
+      case 'FVER',  % Format Version Chunk (AIFC/AIFF-C only)
+
+        timeStamp = fread(fid,1,'uint32');
+        if timeStamp ~= 2726318400,
+          warning('aiffread:unknownVersion',...
+                  ['File contains an unrecognized version of the ' ...
+                   'AIFC/AIFF-C standard.']);
+        end
+        chunkData.timeStamp = timeStamp;
+
+      case 'INST',  % Instrument Chunk
+
+        chunkData.baseNote = fread(fid,1,'int8');
+        chunkData.detune = fread(fid,1,'int8');
+        chunkData.lowNote = fread(fid,1,'int8');
+        chunkData.highNote = fread(fid,1,'int8');
+        chunkData.lowVelocity = fread(fid,1,'int8');
+        chunkData.highVelocity = fread(fid,1,'int8');
+        chunkData.gain = fread(fid,1,'int16');
+        chunkData.sustainLoop = read_loop(fid);
+        chunkData.releaseLoop = read_loop(fid);
+
+      case 'MARK',  % Marker Chunk
+
+        nMarkers = fread(fid,1,'uint16');
+        chunkData.nMarkers = nMarkers;
+        chunkData.markerArray = struct('id',cell(nMarkers,1),...
+                                       'position',[],'markerName',[]);
+        for iMarker = 1:nMarkers,
+          chunkData.markerArray(iMarker) = read_marker(fid);
+        end
+        markerIDs = [chunkData.markerArray.id];
+        if any(markerIDs < 1) || (numel(unique(markerIDs)) < nMarkers),
+          warning('aiffread:invalidMarkers',...
+                  'Invalid or repeated marker IDs were detected.');
+        end
+
+      case 'MIDI',  % MIDI Data Chunk
+
+        chunkData.midiData = fread(fid,[chunkSizeArray{iChunk} 1],...
+                                   '*uint8');
+
+      case 'NAME',  % Name Chunk
+
+        chunkData.text = read_text(fid,chunkSizeArray{iChunk});
+
+      case 'SAXL',  % Sound Accelerator (SAXEL) Chunk (AIFC/AIFF-C only)
+
+        nSaxels = fread(fid,1,'uint16');
+        chunkData.nSaxels = nSaxels;
+        chunkData.saxelArray = struct('id',cell(nSaxels,1),'size',[],...
+                                      'saxelData',[]);
+        for iSaxel = 1:nSaxels,
+          chunkData.saxelArray(iSaxel) = read_saxel(fid);
+        end
+
+      case 'SSND',  % Sound Data Chunk
+
+        nBytes = ceil(nBits/8);
+        chunkData.offset = fread(fid,1,'uint32');
+        chunkData.blockSize = fread(fid,1,'uint32');
+        if isempty(indexRange),
+          data = [nSampleFrames nChannels];
+        elseif strcmp(compressionType,'NONE'),
+          if (chunkSizeArray{iChunk}-8 ~= nChannels*nSampleFrames*nBytes),
+            error(error_message('sizeMismatch'));
+          end
+          fseek(fid,nBytes*nChannels*(indexRange(1)-1),'cof');
+          nRead = min(indexRange(2),nSampleFrames)-indexRange(1)+1;
+          data = fread(fid,[nChannels nRead],['*bit' int2str(nBytes*8)]).';
+          if nBits < nBytes*8,
+            data = data./(2^(nBytes*8-nBits));
+          end
+        else
+          data = fread(fid,[chunkSizeArray{iChunk}-8 1],'*int8');
+        end
+
+    end
+    formChunk.chunkArray(iChunk).chunkData = chunkData;
+  end
+
+  % Close the file:
+
+  fclose(fid);
+
+%~~~Begin nested functions~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  %------------------------------------------------------------------------
+  function errorStruct = error_message(errorCode,varargin)
+  %
+  %   Initialize an error message (and close open files, if necessary).
+  %
+  %------------------------------------------------------------------------
+
+    % Close open files, if necessary:
+
+    if ~isempty(fopen(fid)),
+      fclose(fid);
+    end
+
+    % Initialize error message text:
+
+    switch errorCode,
+      case 'badArgumentType',
+        errorText = [varargin{1} ' should be of type ' varargin{2} '.'];
+      case 'badIndexValue',
+        errorText = ['Index range must be specified as a scalar or ' ...
+                     '2-element vector of positive, non-zero, non-NaN ' ...
+                     'values.'];
+      case 'invalidFile',
+        errorText = ['Could not open file ''' varargin{1} '''.'];
+      case 'invalidFileFormat',
+        errorText = ['Not a valid ' varargin{1} ' file.'];
+      case 'invalidString',
+        errorText = '''size'' is the only valid string argument.';
+      case 'missingChunk',
+        errorText = ['''' varargin{1} ''' chunk is required for a ' ...
+                     varargin{2} ' file.'];
+      case 'notEnoughInputs',
+        errorText = 'Not enough input arguments.';
+      case 'repeatChunk',
+        errorText = ['The following chunk IDs should not appear more ' ...
+                     'than once in an ' varargin{1} ' file: ' varargin{2}];
+      case 'sizeMismatch',
+        errorText =  'Data size mismatch between COMM and SSND chunks.';
+      case 'unknownExtension',
+        errorText = ['Unknown file extension ''' varargin{1} '''.'];
+    end
+
+    % Create error structure:
+
+    errorStruct = struct('message',errorText,...
+                         'identifier',['aiffread:' errorCode]);
+
+  end
+
+%~~~End nested functions~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+end
+
+%~~~Begin subfunctions~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+%--------------------------------------------------------------------------
+function value = extended2double(exponent,highMantissa,lowMantissa)
+%
+%   Converts an 80-bit extended floating-point type to a double.
+%
+%--------------------------------------------------------------------------
+
+  signBit = bitand(exponent,32768);
+  exponent = bitand(exponent,32767);
+  highMantissa = bitand(highMantissa,4294967295);
+  lowMantissa = bitand(lowMantissa,4294967295);
+  if (exponent == 0) && (highMantissa == 0) && (lowMantissa == 0),
+    value = 0;
+  elseif exponent == 32767,
+    if (highMantissa > 0) || (lowMantissa > 0),
+      value = nan;
+    else
+      value = inf;
+    end
+  else
+    value = highMantissa*2^(exponent-16414)+lowMantissa*2^(exponent-16446);
+  end
+  if signBit,
+    value = -value;
+  end
+
+end
+
+%--------------------------------------------------------------------------
+function commentStruct = read_comment(fid)
+%
+%   Reads a structure of comment data from a file.
+%
+%--------------------------------------------------------------------------
+
+  commentStruct = struct('timeStamp',fread(fid,1,'uint32'),...
+                         'marker',fread(fid,1,'int16'),...
+                         'count',[],'text',[]);
+  charCount = fread(fid,1,'uint16');
+  commentStruct.count = charCount;
+  commentStruct.text = read_text(fid,charCount);
+
+end
+
+%--------------------------------------------------------------------------
+function loopStruct = read_loop(fid)
+%
+%   Reads a structure of loop data from a file.
+%
+%--------------------------------------------------------------------------
+
+  loopStruct = struct('playMode',fread(fid,1,'int16'),...
+                      'beginLoop',fread(fid,1,'int16'),...
+                      'endLoop',fread(fid,1,'int16'));
+
+end
+
+%--------------------------------------------------------------------------
+function markerStruct = read_marker(fid)
+%
+%   Reads a structure of marker data from a file.
+%
+%--------------------------------------------------------------------------
+
+  markerStruct = struct('id',fread(fid,1,'int16'),...
+                        'position',fread(fid,1,'uint32'),...
+                        'markerName',read_pstring(fid));
+
+end
+
+%--------------------------------------------------------------------------
+function pascalString = read_pstring(fid)
+%
+%   Reads a Pascal-style string from a file, and afterwards shifts the file
+% pointer ahead by one byte if necessary to make the total number of bytes
+% read an even number.
+%
+%--------------------------------------------------------------------------
+
+  charCount = fread(fid,1,'uint8');
+  pascalString = fread(fid,[1 charCount],'int8=>char');
+  if rem(charCount+1,2),
+    fseek(fid,1,'cof');
+  end
+
+end
+
+%--------------------------------------------------------------------------
+function saxelStruct = read_saxel(fid)
+%
+%   Reads a structure of saxel data from a file.
+%
+%--------------------------------------------------------------------------
+
+  saxelStruct = struct('id',fread(fid,1,'int16'),'size',[],'saxelData',[]);
+  saxelBytes = fread(fid,1,'uint16');
+  saxelStruct.size = saxelBytes;
+  saxelStruct.saxelData = fread(fid,[saxelBytes 1],'*int8');
+  if rem(saxelBytes,2),
+    fseek(fid,1,'cof');
+  end
+
+end
+
+%--------------------------------------------------------------------------
+function textString = read_text(fid,charCount)
+%
+%   Reads ASCII text from a file, and afterwards shifts the file pointer
+% ahead by one byte if necessary to make the total number of bytes read an
+% even number.
+%
+%--------------------------------------------------------------------------
+
+  textString = fread(fid,[1 charCount],'int8=>char');
+  if rem(charCount,2),
+    fseek(fid,1,'cof');
+  end
+
+end
+
+%~~~End subfunctions~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/center.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+function c = center(x)
+if isempty(x)
+    c = [];
+else
+    c = x - repmat(mean(x),[size(x,1),1,1]);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/combinepeaks.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+function c = combinepeaks(p,v,thr)
+% dedicated function for (Klapuri, 99) that creates a curve made of burst
+% at position of peaks p and with amplitude related to peaks v.
+
+dp = get(p,'Data');
+dv = get(v,'Data');
+pp = get(p,'PeakPos');
+pv = get(v,'PeakPos');
+sr = get(v,'Sampling');
+l = length(dp);
+empty = cell(1,l);
+for i = 1:l
+    thr = round(thr*sr{i});
+    empty{i} = cell(1,length(dp{i}));
+    for h = 1:length(dp{i})
+        dih = zeros(size(dp{i}{h}));
+        for l = 1:size(pp{i}{h},3)
+            for k = 1:size(pp{i}{h},2)
+                j = 1;
+                ppkl = pp{i}{h}{1,k,l};
+                pvkl = pv{i}{h}{1,k,l};
+                while j < length(ppkl)
+                    if ppkl(j+1)-ppkl(j) < thr
+                        decreas = dv{i}{h}(pvkl(j+1),k,l) ...
+                                  < dv{i}{h}(pvkl(j),k,l);
+                        ppkl(j+decreas) = [];
+                        pvkl(j+decreas) = [];
+                    else
+                        j = j+1;
+                    end
+                end
+                dih(ppkl,k,l) = dv{i}{h}(pvkl,k,l);
+            end
+        end
+        dv{i}{h} = dih;
+    end
+end
+c = set(p,'Data',dv,'PeakPos',empty,'PeakVal',empty,...
+          'PeakPrecisePos',{},'PeakPreciseVal',{},'PeakMode',empty,...
+          'InterChunk',[]);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/convolve2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,223 @@
+function y = convolve2(x, m, shape, tol)
+%CONVOLVE2 Two dimensional convolution.
+%   Y = CONVOLVE2(X, M) performs the 2-D convolution of matrices X and
+%   M. If [mx,nx] = size(X) and [mm,nm] = size(M), then size(Y) =
+%   [mx+mm-1,nx+nm-1]. Values near the boundaries of the output array are
+%   calculated as if X was surrounded by a border of zero values.
+%
+%   Y = CONVOLVE2(X, M, SHAPE) where SHAPE is a string returns a
+%   subsection of the 2-D convolution with size specified by SHAPE:
+%
+%       'full'    - (default) returns the full 2-D convolution,
+%       'same'    - returns the central part of the convolution
+%                   that is the same size as A (using zero padding),
+%       'valid'   - returns only those parts of the convolution
+%                   that are computed without the zero-padded
+%                   edges, size(Y) = [mx-mm+1,nx-nm+1] when
+%                   size(X) > size(M),
+%       'wrap'    - as for 'same' except that instead of using
+%                   zero-padding the input A is taken to wrap round as
+%                   on a toroid.
+%       'reflect' - as for 'same' except that instead of using
+%                   zero-padding the input A is taken to be reflected
+%                   at its boundaries.
+%
+%   CONVOLVE2 is fastest when mx > mm and nx > nm - i.e. the first
+%   argument is the input and the second is the mask.
+%
+%   If the rank of the mask M is low, CONVOLVE2 will decompose it into a
+%   sum of outer product masks, each of which is applied efficiently as
+%   convolution with a row vector and a column vector, by calling CONV2.
+%   The function will often be faster than CONV2 or FILTER2 (in some
+%   cases much faster) and will produce the same results as CONV2 to
+%   within a small tolerance.
+%
+%   Y = CONVOLVE2(... , TOL) where TOL is a number in the range 0.0 to
+%   1.0 computes the convolution using a reduced-rank approximation to
+%   M, provided this will speed up the computation. TOL limits the
+%   relative sum-squared error in the effective mask; that is, if the
+%   effective mask is E, the error is controlled such that
+%
+%       sum(sum( (M-E) .* (M-E) ))
+%       --------------------------    <=  TOL
+%            sum(sum( M .* M ))
+%
+%   See also CONV2, FILTER2.
+
+% David Young, Department of Informatics, University of Sussex, February 2002,
+%   revised January 2005.
+
+% Deal with optional arguments
+error(nargchk(2,4,nargin));
+if nargin < 3
+    shape = 'full';    % shape default as for CONV2
+    tol = 0;
+elseif nargin < 4
+    if isnumeric(shape)
+        tol = shape;
+        shape = 'full';
+    else
+        tol = 0;
+    end
+end;
+
+% Set up to do the wrap & reflect operations, not handled by conv2
+if strcmp(shape, 'wrap')
+    x = wraparound(x, m);
+    shape = 'valid';
+elseif strcmp(shape, 'reflect')
+    x = reflectborders(x, m);
+    shape = 'valid';
+end
+
+% do the convolution itself
+y = doconv(x, m, shape, tol);
+
+%-----------------------------------------------------------------------
+
+function y = doconv(x, m, shape, tol);
+% Carry out convolution
+[mx, nx] = size(x);
+[mm, nm] = size(m);
+
+% If the mask is bigger than the input, or it is 1-D already,
+% just let CONV2 handle it.
+if mm > mx | nm > nx | mm == 1 | nm == 1
+    y = conv2(x, m, shape);
+else
+    % Get svd of mask
+    if mm < nm; m = m'; end        % svd(..,0) wants m > n
+    [u,s,v] = svd(m, 0);
+    s = diag(s);
+    rank = trank(m, s, tol);
+    if rank*(mm+nm) < mm*nm         % take advantage of low rank
+        if mm < nm;  t = u; u = v; v = t; end  % reverse earlier transpose
+        vp = v';
+        % For some reason, CONV2(H,C,X) is very slow, so use the normal call
+        y = conv2(conv2(x, u(:,1)*s(1), shape), vp(1,:), shape);
+        for r = 2:rank
+            y = y + conv2(conv2(x, u(:,r)*s(r), shape), vp(r,:), shape);
+        end
+    else
+        if mm < nm; m = m'; end     % reverse earlier transpose
+        y = conv2(x, m, shape);
+    end
+end
+
+%-----------------------------------------------------------------------
+
+function r = trank(m, s, tol)
+% Approximate rank function - returns rank of matrix that fits given
+% matrix to within given relative rms error. Expects original matrix
+% and vector of singular values.
+if tol < 0 | tol > 1
+    error('Tolerance must be in range 0 to 1');
+end
+if tol == 0             % return estimate of actual rank
+    tol = length(m) * max(s) * eps;
+    r = sum(s > tol);
+else
+    ss = s .* s;
+    t = (1 - tol) * sum(ss);
+    r = 0;
+    sm = 0;
+    while sm < t
+        r = r + 1;
+        sm = sm + ss(r);
+    end
+end
+
+%-----------------------------------------------------------------------
+
+function y = wraparound(x, m)
+% Extend x so as to wrap around on both axes, sufficient to allow a
+% "valid" convolution with m to return the cyclical convolution.
+% We assume mask origin near centre of mask for compatibility with
+% "same" option.
+[mx, nx] = size(x);
+[mm, nm] = size(m);
+if mm > mx | nm > nx
+    error('Mask does not fit inside array')
+end
+
+mo = floor((1+mm)/2); no = floor((1+nm)/2);  % reflected mask origin
+ml = mo-1;            nl = no-1;             % mask left/above origin
+mr = mm-mo;           nr = nm-no;            % mask right/below origin
+me = mx-ml+1;         ne = nx-nl+1;          % reflected margin in input
+mt = mx+ml;           nt = nx+nl;            % top of image in output
+my = mx+mm-1;         ny = nx+nm-1;          % output size
+
+y = zeros(my, ny);
+y(mo:mt, no:nt) = x;      % central region
+if ml > 0
+    y(1:ml, no:nt) = x(me:mx, :);                   % top side
+    if nl > 0
+        y(1:ml, 1:nl) = x(me:mx, ne:nx);            % top left corner
+    end
+    if nr > 0
+        y(1:ml, nt+1:ny) = x(me:mx, 1:nr);          % top right corner
+    end
+end
+if mr > 0
+    y(mt+1:my, no:nt) = x(1:mr, :);                 % bottom side
+    if nl > 0
+        y(mt+1:my, 1:nl) = x(1:mr, ne:nx);          % bottom left corner
+    end
+    if nr > 0
+        y(mt+1:my, nt+1:ny) = x(1:mr, 1:nr);        % bottom right corner
+    end
+end
+if nl > 0
+    y(mo:mt, 1:nl) = x(:, ne:nx);                   % left side
+end
+if nr > 0
+    y(mo:mt, nt+1:ny) = x(:, 1:nr);                 % right side
+end
+
+%-----------------------------------------------------------------------
+
+function y = reflectborders(x, m)
+% Extend x so as to reflect at each boundary, sufficient to allow a
+% "valid" convolution with m to return a matrix the same size as
+% the orginal.
+% We assume mask origin near centre of mask for compatibility with
+% "same" option.
+[mx, nx] = size(x);
+[mm, nm] = size(m);
+if mm > mx | nm > nx
+    error('Mask does not fit inside array')
+end
+
+mo = floor((1+mm)/2); no = floor((1+nm)/2);  % reflected mask origin
+ml = mo-1;            nl = no-1;             % mask left/above origin
+mr = mm-mo;           nr = nm-no;            % mask right/below origin
+me = mx-mr+1;         ne = nx-nr+1;          % translated margin in input
+mt = mx+ml;           nt = nx+nl;            % top/right of image in output
+my = mx+mm-1;         ny = nx+nm-1;          % output size
+
+y = zeros(my, ny);
+y(mo:mt, no:nt) = x;      % central region
+if ml > 0
+    y(1:ml, no:nt) = x(ml:-1:1, :);                   % top side
+    if nl > 0
+        y(1:ml, 1:nl) = x(ml:-1:1, nl:-1:1);          % top left corner
+    end
+    if nr > 0
+        y(1:ml, nt+1:ny) = x(ml:-1:1, nx:-1:ne);      % top right corner
+    end
+end
+if mr > 0
+    y(mt+1:my, no:nt) = x(mx:-1:me, :);               % bottom side
+    if nl > 0
+        y(mt+1:my, 1:nl) = x(mx:-1:me, nl:-1:1);      % bottom left corner
+    end
+    if nr > 0
+        y(mt+1:my, nt+1:ny) = x(mx:-1:me, nx:-1:ne);  % bottom right corner
+    end
+end
+if nl > 0
+    y(mo:mt, 1:nl) = x(:, nl:-1:1);                   % left side
+end
+if nr > 0
+    y(mo:mt, nt+1:ny) = x(:, nx:-1:ne);               % right side
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/displot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,514 @@
+function res = displot(x,y,xlab,ylab,t,fp,pp,tp,tv,ch,multidata,pm,ap,rp,cl)
+% graphical display of any data (except mirscalar data) computed by MIRToolbox
+
+%opengl('OpenGLWobbleTesselatorBug',1)
+% Rendering complex patch object may cause segmentation violation and
+% return a tesselator error message in the stack trace. This command
+% enables a workaround of that bug that might work sometimes...
+
+if isempty(y)
+    res = 0;
+    return
+end
+manychannels = 0;
+y1 = y{1};
+if length(y) == 1 
+    y = y{1};
+    if length(x) == 1
+        x = x{1};
+    end
+end
+if isempty(y)
+    res = 0;
+    return
+end
+
+if isstruct(cl)
+    y = cl.centr(:,cl.index);
+end
+
+figure
+fp2 = uncell(fp);
+c = size(y,2);
+lx = size(y,1);
+l = size(y1,3);     % Number of channels
+il = (1-0.15)/l;
+
+if iscell(y)
+    if size(y{1},3) > 1 && size(y{1},1) == 1  
+        for j = 1:c
+            y{j} = reshape(y{j},size(y{j},2),size(y{j},3));
+            y{j} = y{j}';
+        end
+        lx = l;
+        l = 1;
+    end
+else
+    if l > 1 && lx == 1
+        y = reshape(y,size(y,2),size(y,3));
+        y = y';
+        x = repmat(ch,[1 size(y,2) size(y,3)]);
+        lx = l;
+        l = 1;
+    end
+end
+if not(iscell(y)) && l > 20 %&& size(y,3) == 1
+    manychannels = 1;
+    if lx == 1
+        y = reshape(y,[c l])';
+        lx = l;
+        l = 1;
+    else
+        y = reshape(y,[lx l])';
+        fp = reshape(x,[1 lx size(x,3)]);
+        fp = fp(:,:,1);
+        fp2 = fp;
+        c = l;
+        l = 1;
+        x = ch';
+    end
+end
+curve = (not(iscell(y)) && not(isequal(fp2,0)) && size(fp2,2)==1) || ...
+        ...%(iscell(y) && size(y{1}) == 1) || ...
+        c == 1 || (strcmp(xlab,'time (s)') && not(manychannels));
+if curve
+    for i = 1:l
+        if l>1
+            subplot(l,1,l-i+1,'align');
+        end
+        if not(iscell(y))
+            y = {y};
+            x = {x};
+        end
+        col = cell(length(y));
+        for h = 1:length(y)
+            col{h} = zeros(size(y{h},2),3,size(y{h},4));
+            for j = 1:size(y{h},2)
+                if ischar(x{h})
+                    xj = x{h};
+                else
+                    xj = x{h}(:,j);
+                end
+                yj = y{h}(:,j,i,:);
+                lk = size(yj,4);
+                for k = 1:lk
+                    if c > 1
+                        col{h}(j,:,k) = rand(1,3);
+                    else
+                        col{h}(j,:,k) = num2col(k);
+                    end
+                    yk = yj(:,:,:,k);
+                    if not(isempty(yk))
+                        if iscell(xj)
+                            lj = length(xj);
+                            abs = 0:lj-1;
+                        elseif ischar(xj)
+                            abs = 1:length(yk);
+                        else
+                            abs = xj;
+                        end
+                        if length(abs) < 20 && lk == 1 && c == 1
+                            bar(abs,yk);
+                        else
+                            plot(abs,yk,'Color',col{h}(j,:,k));
+                        end
+                        if iscell(xj)
+                            tick = 0:ceil(lj/14):lj-1;
+                            set(gca,'xtick',tick);
+                            set(gca,'xticklabel',xj(tick+1));
+                        elseif ischar(xj)
+                            set(gca,'xticklabel',x);
+                        end
+                        hold on
+                    end
+                end
+            end
+            if length(y) > 1
+                if isempty(cl)% || isempty(cl{1}) ... this because of a bug..
+                    %|| isempty(cl{i})
+                    colr = h;
+                %elseif iscell(cl{i})
+                %    colr = cl{i}(h);
+                elseif length(cl) == 1
+                    colr = cl;
+                else
+                    colr = cl(h); %cl{i}(h);
+                end
+                if not(isempty(x{h}))
+                    rectangle('Position',[x{h}(1),...
+                                          min(min(y{h}(:,:,i))),...
+                                          x{h}(end)-x{h}(1),...
+                                          max(max(y{h}(:,:,i)))-...
+                                          min(min(y{h}(:,:,i)))]+1e-16,...
+                        'EdgeColor',num2col(colr),'Curvature',.1,'LineWidth',1)
+                end
+            end
+        end
+        if not(isempty(multidata))
+            legend(multidata{:},'Location','Best')
+        end
+        for h = 1:length(y)
+            for j = 1:size(y{h},2)
+                xj = x{h}(:,j);
+                yj = y{h}(:,j,i,:);
+                lk = size(yj,4);
+                for k = 1:lk
+                    yk = yj(:,:,:,k);
+                    if not(isempty(yk))
+                        if size(y{h},2) > 1
+                            rectangle('Position',[xj(1),min(yk),...
+                                xj(end)-xj(1),max(yk)-min(yk)]+1e-16,...
+                                'EdgeColor',col{h}(j,:,k))
+                        end
+                        if not(isempty(pp)) && not(isempty(pp{1}))
+                            [ppj order] = sort(pp{h}{1,j,i});
+                            if not(isempty(pm)) && not(isempty(pm{1}))
+                                pmj = pm{h}{1,j,i}(order);
+                                [R C] = find(pmj==k);
+                                if iscell(xj)
+                                    plot(ppj(R,C)-1,yk(ppj(R,C)),'or') 
+                                else
+                                    plot(xj(ppj(R,C)),yk(ppj(R,C)),'or') 
+                                end
+                            else
+                                if lk > 1
+                                    [R C] = find(ppj(:,:,2)==k);
+                                    plot(xj(ppj(R,C)),yk(ppj(R,C)),'or')
+                                else
+                                    plot(xj(ppj),yk(ppj),'or')
+                                end
+                            end
+                            if not(isempty(ap)) && not(isempty(ap{1}))
+                                apj = ap{h}{1,j,i};
+                                plot(xj(apj),yk(apj),'dr') 
+                                for g = 1:length(apj)
+                                    line([xj(ppj(g)),xj(apj(g))],...
+                                         [yk(ppj(g)),yk(apj(g))],...
+                                         'Color','r')
+                                end
+                            end
+                            if not(isempty(rp)) && not(isempty(rp{1}))
+                                rpj = rp{h}{1,j,i};
+                                plot(xj(rpj),yk(rpj),'dr') 
+                                for g = 1:length(rpj)
+                                    line([xj(ppj(g)),xj(rpj(g))],...
+                                         [yk(ppj(g)),yk(rpj(g))],...
+                                         'Color','r')
+                                end
+                            end
+                        end
+                    end
+                end
+            end
+        end
+        if i == l
+            title(t)
+        end
+        if i == 1
+            xlabel(xlab)
+        end
+        if l > 1
+            %if iscell(x)
+            %    num = x{i}(1);
+            %else
+                num = ch(i);
+            %end
+            pos = get(gca,'Position');
+            axes('Position',[pos(1)-.05 pos(2)+pos(4)/2 .01 .01],'Visible','off');
+            text(0,0,num2str(num),'FontSize',12,'Color','r')
+        end
+    end
+else
+    % 2-dimensional image
+    displayseg = 0;
+    if iscell(x) && ischar(x{1})
+        if size(y,4) > 1 || size(y,1) > size(x,1)
+            ticky = 0.5:23.5;
+            tickylab = {'CM','C#M','DM','D#M','EM','FM','F#M',...
+            'GM','G#M','AM','A#M','BM','Cm','C#m','Dm','D#m','Em',...
+            'Fm','F#m','Gm','G#m','Am','A#m','Bm'};
+        else
+            ticky = (1:size(x,1))';
+            tickylab = x;
+            displayseg = 1;
+        end
+        x = (1:size(y,1))';
+    elseif iscell(x) && iscell(x{1}) && ischar(x{1}{1})
+        if size(y{1},4) > 1
+            ticky = 0.5:23.5;
+            tickylab = {'CM','C#M','DM','D#M','EM','FM','F#M',...
+            'GM','G#M','AM','A#M','BM','Cm','C#m','Dm','D#m','Em',...
+            'Fm','F#m','Gm','G#m','Am','A#m','Bm'};
+        else
+            ticky = (1:size(x{1},1))';
+            tickylab = x{1};
+            displayseg = 1;
+        end
+        for i = 1:length(x)
+            x{i} = (1:size(x{i},1))';
+        end
+    else
+        ticky = [];
+    end
+    if iscell(y)
+        displayseg = 1;
+        for i = 1:l
+            if l>1
+                subplot(l,1,l-i+1,'align');
+%                subplot('Position',[0.1 (i-1)*il+0.1 0.89 il-0.02])
+            end
+            hold on
+            %surfplot(segt,x{1},repmat(x{1}/x{1}(end)*.1,[1,length(segt)]));
+            if length(x)==1 && length(y)>1
+                for k = 2:length(y)
+                    x{k} = x{1};
+                end
+            end
+            for j = 1:length(x)
+                if length(x{j}) > 1
+                    if size(x{j},1) == 1 && size(x{j},3) > 1
+                        x{j} = reshape(x{j},size(x{j},2),size(x{j},3))';
+                        mel = 1;
+                    else
+                        mel = 0;
+                    end
+                    xx = zeros(size(x{j},1)*size(y{j},4),1); %,size(x{j},2));
+                    yy = zeros(size(y{j},1)*size(y{j},4),size(y{j},2));
+                    for k = 1:size(y{j},4)
+                        xx((k-1)*size(x{j},1)+1:k*size(x{j},1),1) = x{j}(:,1);
+                        yy((k-1)*size(y{j},1)+1:k*size(y{j},1),:) = y{j}(:,:,i,k);
+                    end
+                    if size(y{j},4) == 1 && not(mel)
+                        xxx = [1.5*xx(1,1)-0.5*xx(2,1);...
+                                    (xx(1:end-1)+xx(2:end))/2;...
+                                    1.5*xx(end,1)-0.5*xx(end-1,1)];
+                    else
+                        xxx = (0:size(yy,1))';
+                    end
+                    if size(fp{j},2) > 1
+                        segt = [fp{j}(1,1),...
+                                mean([fp{j}(2,1:end-1);fp{j}(1,2:end)]),...
+                                fp{j}(2,end)];
+                    else
+                        segt = fp{j}';
+                    end
+                    surfplot(segt,xxx,yy(:,:));
+                    if not(isempty(ticky))
+                        set(gca,'ytick',ticky);
+                        set(gca,'yticklabel',tickylab);
+                    end
+                    set(gca,'YDir','normal')
+                    if (exist('pp') == 1) && not(isempty(pp))
+                        if not(isempty(pp{j}))
+                            for k = 1:length(pp{j})
+                                ppj = pp{j}{k};
+                                if size(ppj,3) == 2
+                                    ppj(:,:,1) = ppj(:,:,1) + (ppj(:,:,2)-1)*size(x,1);
+                                    ppj(:,:,2) = [];
+                                    plot(mean(fp{j}(:,k)),ppj-.5,'+w')
+                                elseif 0 %(exist('pm') == 1) && not(isempty(pm))
+                                    pmj = pm{k}{1,1,i};
+                                    ppj(:,:) = ppj(:,:) + (pmj(:,:)-1)*size(x,1);
+                                    plot(mean(fp{j}(:,k)),ppj-.5,'+w') % fp shows segmentation points
+                                elseif not(isempty(ppj))
+                                    plot(mean(fp{j}(:,k)),xx(ppj),'+k')
+                                end
+                            end
+                        end
+                    end
+                end
+            end
+            if i == l
+                title(t)
+            end
+            if i == 1
+                if manychannels
+                    xlabel(xlab);
+                elseif displayseg
+                    xlabel('time axis (in s.)');
+                else
+                    xlabel('temporal location of beginning of frame (in s.)');
+                end
+            end
+            if l > 1
+                num = ch(i);
+                pos = get(gca,'Position');
+                axes('Position',[pos(1)-.05 pos(2)+pos(4)/2 .01 .01],'Visible','off');
+                text(0,0,num2str(num),'FontSize',12,'Color','r')
+            end
+        end
+        y = y{1};
+    else
+        mel = 0;
+        if iscell(x)
+            x = x{1};
+        end
+        if size(x,1) == 1 && size(y,1) > 1
+            if size(x,3) == 1
+                x = x';
+            else
+                mel = 1;
+            end
+        end
+        if not(isempty(pp)) && iscell(pp{1})
+            pp = pp{1};
+            pm = pm{1};
+        end
+        for i = 1:l
+            if l>1
+                subplot('Position',[0.1 (i-1)*il+0.1 0.89 il-0.02])
+            end
+            xx = zeros(size(x,1)*size(y,4),1); %,size(x,2));
+            yy = zeros(size(y,1)*size(y,4),size(y,2));
+            for k = 1:size(y,4)
+                xx((k-1)*size(x,1)+1:k*size(x,1),1) = x(:,1);
+                yy((k-1)*size(y,1)+1:k*size(y,1),:) = y(:,:,i,k);
+            end
+            if iscell(fp)
+                fp = uncell(fp);
+            end
+            lx = length(xx);
+            if lx < 6
+                curve = 1;
+                ttt = (fp(1,:)+fp(2,:))/2;
+                plot(ttt,yy)
+                if i == 1
+                    legdata = cell(1,lx);
+                    if strcmp(xlab(end),'s')
+                        xlab(end) = [];
+                    end
+                    for j = 1:lx
+                        legdata{j} = [xlab,' ',num2str(j)];
+                    end
+                    legend(legdata)
+                end
+            else
+                ttt = [fp(1,:) 2*fp(1,end)-fp(1,end-1)];
+                if size(y,4) == 1 && not(mel)
+                    xxx = [1.5*xx(1)-0.5*xx(2);...
+                           (xx(1:end-1)+xx(2:end))/2;...
+                           1.5*xx(end)-0.5*xx(end-1)];
+                else
+                    xxx = (0:size(yy,1))';
+                end
+                surfplot(ttt,xxx,yy);
+                if not(isempty(ticky))
+                    set(gca,'ytick',ticky);
+                    set(gca,'yticklabel',tickylab);
+                end
+                set(gca,'YDir','normal');
+            end
+            hold on
+            %if iscell(pp)
+            %    pp = uncell(pp);
+            %    if iscell(pm)
+            %        pm = uncell(pm);
+            %    end
+            %end
+            if (exist('tp') == 1) && not(isempty(tp))
+                tp = tp{i}{1};
+                tv = tv{i}{1};
+                for k = 1:size(tp,1)
+                    prej = 0;
+                    for j = 1:size(tp,2)
+                        if tv(k,j)
+                            if prej% && not(isempty(tp(k,j)))
+                                plot([(ttt(prej)+ttt(prej+1))/2,...
+                                      (ttt(j)+ttt(j+1))/2],...
+                                     [(xxx(tp(k,prej))+xxx(tp(k,prej)+1))/2,...
+                                      (xxx(tp(k,j))+xxx(tp(k,j)+1))/2],...
+                                     'k','LineWidth',1)
+                                plot([(ttt(prej)+ttt(prej+1))/2,...
+                                      (ttt(j)+ttt(j+1))/2],...
+                                     [(xxx(tp(k,prej))+xxx(tp(k,prej)+1))/2,...
+                                      (xxx(tp(k,j))+xxx(tp(k,j)+1))/2],...
+                                     'w+','MarkerSize',10)
+                                plot([(ttt(prej)+ttt(prej+1))/2,...
+                                      (ttt(j)+ttt(j+1))/2],...
+                                     [(xxx(tp(k,prej))+xxx(tp(k,prej)+1))/2,...
+                                      (xxx(tp(k,j))+xxx(tp(k,j)+1))/2],...
+                                     'kx','MarkerSize',10)
+                            end
+                            prej = j;
+                        end
+                    end
+                end
+            elseif (exist('pp') == 1) && not(isempty(pp))
+                if size(pp,3) == l
+                    for j = 1:size(pp,2)
+                        ppj = pp{1,j,i};
+                        if (exist('pm') == 1)
+                            pmj = pm{1,j,i};
+                        else
+                            pmj = [];
+                        end
+                        if iscell(ppj)
+                            ppj = uncell(ppj);
+                            if iscell(pmj)
+                                pmj = uncell(pmj);
+                            end
+                        end
+                        if size(ppj,3) == 2
+                            ppj(:,:,1) = ppj(:,:,1) + (ppj(:,:,2)-1)*size(x,1);
+                            ppj(:,:,2) = [];
+                            %plot((fp(1,j)+fp(2,j))/2,ppj-.5,'+w')
+                            plot((ttt(j)+ttt(j+1))/2,(xxx(ppj)+xxx(ppj+1))/2,'+w')
+                        else
+                            if not(isempty(pmj))
+                                ppj(:,:,:) = ppj(:,:,:) + (pmj(:,:,:)-1)*size(x,1);
+                            end
+                            if not(isempty(ppj))
+                                %plot((segt(j)+segt(j+1))/2,xx(ppj),'+k','MarkerSize',10)
+                                plot((ttt(j)+ttt(j+1))/2,(xxx(ppj)+xxx(ppj+1))/2,'+w','MarkerSize',10)
+                            end
+                        end
+                    end
+                else
+                    for j = 1:size(pp,3)
+                        ppj = pp{1,1,j};
+                        if (exist('pm') == 1)
+                            pmj = pm{1,1,j};
+                        else
+                            pmj = [];
+                        end
+                        if not(isempty(ppj))
+                            %plot((segt(j)+segt(j+1))/2,xx(ppj),'+k','MarkerSize',10)
+                            plot((ttt(ppj)+ttt(ppj+1))/2,(xxx(j)+xxx(j+1))/2,'+w','MarkerSize',10)
+                        end
+                    end
+                end
+            end
+            if i == l
+                title(t)
+            end
+            if i == 1
+                xlabel('time axis (in s.)');
+            end
+            if l > 1
+                if iscell(x)
+                    num = x{i}(1);
+                else
+                    num = ch(i);
+                end
+                pos = get(gca,'Position');
+                hfig = axes('Position',[pos(1)-.05 pos(2)+pos(4)/2 .01 .01],'Visible','off');
+                text(0,0,num2str(num),'FontSize',12,'Color','r')
+            end
+        end
+    end
+end
+if l == 1
+    if curve
+        %if (exist('dbv') == 1) && dbv
+        %    ylabel([ylab ' (logarithmic scale)']);
+        %else
+            ylabel(ylab);
+        %end
+    elseif manychannels
+        ylabel('Channels');
+    else
+        ylabel(xlab)
+    end
+end
+res = 1;
+drawnow
\ No newline at end of file
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/emd_wrapper.mexmaci has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/emd_wrapper.mexmaci64 has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/emd_wrapper.mexw32 has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/gomezprofs.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/haspeaks.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function h = haspeaks(d)
+
+if isa(d,'mirdesign')
+    h = strcmp(func2str(get(d,'Method')),'mirpeaks');
+else
+    if iscell(d)
+        d = d{1};
+    end
+    p = get(d,'PeakVal');
+    h = not(isempty(p) || isempty(p{1}) || isempty(p{1}{1}));
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/hwr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function y = hwr(x)
+% Half-Wave Rectifier
+
+y = 0.5 * (x + abs(x));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/isamir.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,56 @@
+function b = isamir(x,class)
+
+if isempty(x) || isnumeric(x)
+    b = 0;
+    return
+end
+
+if iscell(x)
+    x = x{1};
+end
+
+if isa(x,class)
+    b = 1;
+    return
+elseif ischar(x) && strcmpi(class,'miraudio')
+    b = 1;
+    return
+elseif not(isa(x,'mirdesign'))
+    b = 0;
+    return
+end
+
+type = get(x,'Type');
+if iscell(type)
+    type = type{1};
+end
+types = lineage(type);
+b = 0;
+i = 0;
+while not(b) && i<length(types)
+    i = i+1;
+    if strcmpi(types(i),class)
+        b = 1;
+    end
+end
+
+
+function types = lineage(class)
+switch class
+    case {'miraudio','mirenvelope'}
+        parent = 'mirtemporal';
+    case {'mirautocor','mircepstrum','mirchromagram','mirhisto',...
+          'mirkeysom','mirkeystrength','mirmatrix','mirmfcc',...
+          'mirscalar','mirsimatrix','mirspectrum',...
+          'mirtemporal','mirtonalcentroid'}
+        parent = 'mirdata';
+    otherwise
+        parent = '';
+end
+
+if isempty(parent)
+    types = {class};
+else
+    parents = lineage(parent);
+    types = {class parents{:}};
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirattacks.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function varargout = mirattacks(orig,varargin)
+% Obsolete function, replaced by mironsets(...,'Attacks',...)
+
+        aver.key = 'Smooth';
+        aver.type = 'Integer';
+        aver.default = 20;
+    option.aver = aver;
+        
+specif.option = option;
+
+varargout = mirfunction(@mirattacks,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+x = mironsets(x,'Attack',option.aver);
+type = mirtype(x);
+
+
+function a = main(a,option,postoption)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirattackslope.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,78 @@
+function varargout = mirattackslope(orig,varargin)
+%   a = mirattackslope(x) estimates the average slope of each note attack. 
+%   Optional arguments:
+%   a = mirattackslope(x,m) specifies a method for slope computation.
+%       Possible values:
+%           m = 'Diff': ratio between the magnitude difference at the 
+%               beginning and the ending of the attack period, and the
+%               corresponding time difference.
+%           m = 'Gauss': average of the slope, weighted by a gaussian
+%               curve that emphasizes values at the middle of the attack
+%               period. (similar to Peeters 2004).
+%       mirattackslope(...,'Contrast',c) specifies the 'Contrast' parameter
+%           used in mironsets for event detection through peak picking.
+%           Same default value as in mironsets.
+%
+% Peeters. G. (2004). A large set of audio features for sound description
+% (similarity and classification) in the CUIDADO project. version 1.0
+
+        meth.type = 'String';
+        meth.choice = {'Diff','Gauss'};
+        meth.default = 'Diff';
+    option.meth = meth;
+    
+        cthr.key = 'Contrast';
+        cthr.type = 'Integer';
+        cthr.default = NaN;
+    option.cthr = cthr;
+    
+specif.option = option;
+
+varargout = mirfunction(@mirattackslope,orig,varargin,nargout,specif,@init,@main);
+
+
+function [o type] = init(x,option)
+o = mironsets(x,'Attack','Contrast',option.cthr);
+type = mirtype(x);
+
+
+function sl = main(o,option,postoption)
+if iscell(o)
+    o = o{1};
+end
+po = get(o,'PeakPos');
+pa = get(o,'AttackPos');
+pou = get(o,'PeakPosUnit');
+pau = get(o,'AttackPosUnit');
+sr = get(o,'Sampling');
+d = get(o,'Data');
+sl = mircompute(@algo,po,pa,pou,pau,d,option.meth,sr);
+fp = mircompute(@frampose,pau,pou);
+sl = mirscalar(o,'Data',sl,'FramePos',fp,'Title','Attack Slope');
+sl = {sl,o};
+
+
+function fp = frampose(pa,po)
+pa = sort(pa{1});
+po = sort(po{1});
+fp = [pa';po'];
+
+
+function sl = algo(po,pa,pou,pau,d,meth,sr)
+pa = sort(pa{1});
+po = sort(po{1});
+pau = sort(pau{1});
+pou = sort(pou{1});
+sl = zeros(1,length(pa));
+for i = 1:length(pa)
+    switch meth
+        case 'Diff'
+            sl(i) = (d(po(i))-d(pa(i)))/(pou(i)-pau(i));
+        case 'Gauss'
+            l = po(i)-pa(i);
+            h = ceil(l/2);
+            gauss = exp(-(1-h:l-h).^2/(l/4)^2);
+            dat = diff(d(pa(i):po(i))).*gauss';
+            sl(i) = mean(dat)*sr;
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirattacktime.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function varargout = mirattacktime(orig,varargin)
+%   a = mirattacktime(x) returns the duration (in s.) of each note attack. 
+%   Optional arguments:
+%   a = mirattacktime(x,l) specifies whether to consider the duration in s.
+%       (l='Lin') or the logarithm of that duration (l='Log') following the
+%       approach proposed in Krimphoff et al. (1994).
+%       Default value: l='Lin'.
+%
+% Krimphoff, J., McAdams, S. & Winsberg, S. (1994), Caractérisation du 
+% timbre des sons complexes. II : Analyses acoustiques et quantification 
+% psychophysique. Journal de Physique, 4(C5), 625-628.
+
+        scale.type = 'String';
+        scale.choice = {'Lin','Log'};
+        scale.default = 'Lin';
+    option.scale = scale;
+    
+specif.option = option;
+
+varargout = mirfunction(@mirattacktime,orig,varargin,nargout,specif,@init,@main);
+
+
+function [o type] = init(x,option)
+o = mironsets(x,'Attack');
+type = mirtype(x);
+
+
+function at = main(o,option,postoption)
+if iscell(o)
+    o = o{1};
+end
+po = get(o,'PeakPosUnit');
+pa = get(o,'AttackPosUnit');
+at = mircompute(@algo,po,pa,option.scale);
+fp = mircompute(@frampose,pa,po);
+at = mirscalar(o,'Data',at,'FramePos',fp,'Title','Attack Time');
+at = {at,o};
+
+
+function fp = frampose(pa,po)
+pa = sort(pa{1});
+po = sort(po{1});
+fp = [pa';po'];
+
+
+function at = algo(po,pa,sc)
+po = sort(po{1});
+pa = sort(pa{1});
+at = po-pa;
+if strcmpi(sc,'Log')
+    at = log10(at);
+end
+at = at';
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirauditory.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function varargout = mirauditory(x,varargin)
+% Produces the output based on an auditory modelling, of the signal x,
+% using a gammatone filterbank.
+%   Optional argument:
+%       mirtempo(...,'Filterbank',b) indicates the number of channels in
+%           the filterbank decomposition.
+%               Default value: b = 40.
+
+        fb.key = 'Filterbank';
+        fb.type = 'Integer';
+        fb.default = 40;
+    option.fb = fb;
+
+specif.option = option;
+
+varargout = mirfunction(@mirauditory,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if isamir(x,'miraudio')
+    x = mirfilterbank(x,'NbChannels',option.fb);
+    x = mirenvelope(x,'Center','Diff','Halfwave','Center');
+end
+type = 'mirenvelope';
+
+
+function x = main(x,option,postoption)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirbeatspectrum.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,75 @@
+function varargout = mirbeatspectrum(orig,varargin)
+%   n = mirbeatspectrum(m) evaluates the beat spectrum.
+%   [n,m] = mirbeatspectrum(m) also return the similarity matrix on which
+%       the estimation is made.
+%   Optional argument: 
+%       mirbeatspectrum(...,s) specifies the estimation method.
+%           Possible values:
+%           s = 'Diag', summing simply along the diagonals of the matrix.
+%           s = 'Autocor', based on the autocorrelation of the matrix.
+%       mirbeatspectrum(...,'Distance',f) specifies the name of a dissimilarity
+%           distance function, from those proposed in the Statistics Toolbox
+%               (help pdist).
+%           default value: f = 'cosine'
+%   J. Foote, M. Cooper, U. Nam, "Audio Retrieval by Rhythmic Similarity",
+%   ISMIR 2002.
+
+
+        dist.key = 'Distance';
+        dist.type = 'String';
+        dist.default = 'cosine';
+    option.dist = dist;
+
+        meth.type = 'String';
+        meth.choice = {'Diag','Autocor'};
+        meth.default = 'Autocor';
+    option.meth = meth;
+
+specif.option = option;
+varargout = mirfunction(@mirbeatspectrum,orig,varargin,nargout,specif,@init,@main);
+    
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirscalar'))
+    if isamir(x,'miraudio')
+        x = mirmfcc(x,'frame',.025,'s',.01,'s','Rank',8:30);
+    end
+    x = mirsimatrix(x,'Distance',option.dist,'Similarity');
+end
+type = 'mirscalar';
+
+
+function y = main(orig,option,postoption)
+if iscell(orig)
+    orig = orig{1};
+end
+fp = get(orig,'FramePos');
+if not(isa(orig,'mirscalar'))
+    s = get(orig,'Data');
+    total = cell(1,length(s));
+    for k = 1:length(s)
+        for h = 1:length(s{k})
+            maxfp = find(fp{k}{h}(2,:)>4,1);
+            if isempty(maxfp)
+                maxfp = Inf;
+            else
+                fp{k}{h}(:,maxfp+1:end) = [];
+            end
+            l = min(length(s{k}{h}),maxfp);
+            total{k}{h} = zeros(1,l);
+            if strcmpi(option.meth,'Diag')
+                for i = 1:l
+                    total{k}{h}(i) = mean(diag(s{k}{h},i-1));
+                end
+            else
+                for i = 1:l
+                    total{k}{h}(i) = mean(mean(s{k}{h}(:,1:l-i+1).*s{k}{h}(:,i:l)));
+                end
+            end
+        end
+    end
+else
+    total = get(orig,'Data');
+end
+n = mirscalar(orig,'Data',total,'FramePos',fp,'Title','Beat Spectrum'); 
+y = {n orig};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirbrightness.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+function varargout = mirbrightness(x,varargin)
+%   b = mirbrightness(s) calculates the spectral brightness, i.e. the amount
+%       of spectral energy corresponding to frequencies higher than a given
+%       cut-off threshold.
+%   Optional arguments:
+%   b = mirbrightness(s,'CutOff',f) specifies the frequency cut-off 
+%       threshold in Hz.
+%           Default value: f = 1500 Hz.
+%
+% Typical values for the frequency cut-off threshold:
+%       3000 Hz in Juslin 2000, p. 1802.
+%       1000 Hz and 500 Hz in Laukka, Juslin and Bresin 2005.
+%
+%   Juslin, P. N. (2000). Cue utilization in communication of emotion in 
+% music performance: relating performance to perception. Journal of 
+% Experimental Psychology: Human Perception and Performance, 26(6), 1797?813.
+%   Laukka, P., Juslin, P. N., and Bresin, R. (2005). A dimensional approach 
+% to vocal expression of emotion. Cognition and Emotion, 19, 633?653.
+
+
+        cutoff.key = 'CutOff';
+        cutoff.type = 'Integer';
+        cutoff.default = 1500;
+    option.cutoff = cutoff;
+    
+specif.option = option;
+specif.defaultframelength = .05;
+specif.defaultframehop = .5;
+
+
+varargout = mirfunction(@mirbrightness,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirspectrum'))
+    x = mirspectrum(x);
+end
+type = 'mirscalar';
+
+
+function b = main(s,option,postoption)
+if iscell(s)
+    s = s{1};
+end
+m = get(s,'Magnitude');
+f = get(s,'Frequency');
+w = warning('query','MATLAB:divideByZero');
+warning('off','MATLAB:divideByZero');
+v = mircompute(@algo,m,f,option.cutoff);
+warning(w.state,'MATLAB:divideByZero');
+b = mirscalar(s,'Data',v,'Title','Brightness');
+
+
+function v = algo(m,f,k)
+if not(any(max(f)>k))
+    warning('WARNING in MIRBRIGHTNESS: Frequency range of the spectrum too low for the estimation of brightness.');
+end
+sm = sum(m);
+v = sum(m(f(:,1,1) > k,:,:)) ./ sm;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mircentroid.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+function varargout = mircentroid(x,varargin)
+%   c = mircentroid(x) calculates the centroid (or center of gravity) of x.
+%   x can be either:
+%       - a spectrum (spectral centroid),
+%       - an envelope (temporal centroid)
+%       - a histogram,
+%       - or any data. Only the positive ordinates of the data are taken
+%           into consideration.
+%   c = mircentroid(x,'Peaks') calculates the centroid of the peaks only.
+
+% Beauchamp 1982 version?
+
+        peaks.key = 'Peaks';
+        peaks.type = 'String';
+        peaks.choice = {0,'NoInterpol','Interpol'};
+        peaks.default = 0;
+        peaks.keydefault = 'NoInterpol';
+    option.peaks = peaks;
+    
+specif.option = option;
+
+varargout = mirfunction(@mircentroid,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirdata')) || isamir(x,'miraudio')
+    x = mirspectrum(x);
+end
+type = 'mirscalar';
+
+
+function c = main(x,option,postoption)
+if iscell(x)
+    x = x{1};
+end
+if option.peaks
+    if strcmpi(option.peaks,'Interpol')
+        pt = get(x,'PeakPrecisePos');
+        pv = get(x,'PeakPreciseVal');
+    else
+        pt = get(x,'PeakPos');
+        pv = get(x,'PeakVal');
+    end
+    cx = cell(1,length(pt));
+    for h = 1:length(pt)
+        cx{h} = cell(1,length(pt{h}));
+        for i = 1:length(pt{h})
+            pti = pt{h}{i};
+            pvi = pv{h}{i};
+            %if isempty(pti)
+
+            nfr = size(pti,2);
+            nbd = size(pti,3);
+            ci = zeros(1,nfr,nbd);
+            for j = 1:nfr
+                for k = 1:nbd
+                    ptk = pti{1,j,k};
+                    pvk = pvi{1,j,k};
+                    sk = sum(pvk);
+                    ci(1,j,k) = sum(ptk.*pvk) ./ sk;
+                end
+            end
+            cx{h}{i} = ci;
+        end
+    end
+else
+    cx = peaksegments(@centroid,get(x,'Data'),get(x,'Pos'));
+end
+if isa(x,'mirspectrum')
+    t = 'Spectral centroid';
+elseif isa(x,'mirenvelope')
+    t = 'Temporal centroid';
+else
+    t = ['centroid of ',get(x,'Title')];
+end
+c = mirscalar(x,'Data',cx,'Title',t);
+
+
+function c = centroid(d,p)
+c = (p'*d) ./ sum(d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirchunklim.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+function cl = mirchunklim(lim)
+% c = mirchunklim returns the maximal chunk size.
+%   If the size of a long audio files exceeds that size, it will be
+%   decomposed into chunks of that size, before being analyzed in the 
+%   different functions on the toolbox.
+% mirchunklim(c) specifies a new maximal chunk size.
+%   If MIRtoolbox tends to use more memory than what is available in the
+%   RAM of your computer, you should decrease the maximal chunk size.
+% mirchunklim(Inf) toggles off the automated chunk decomposition.
+
+persistent chunklim
+
+if nargin
+    if not(isnumeric(lim))
+        error('ERROR IN MIRCHUNKLIM: The argument should be a number.')
+    end
+    chunklim = lim;
+else
+    if isempty(chunklim)
+        chunklim = 5e5;
+    end
+end
+
+cl = chunklim;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mircluster.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,238 @@
+function [a d] = mircluster(a,varargin)
+%   c = mircluster(a,f) clusters the segments in the audio sequence(s) 
+%       contained in the audio object a, along the analytic feature(s) 
+%       f, using the k-means strategy. Multiple analytic features have to
+%       be grouped into one array of cells.
+%       Example:
+%           sg = mirsegment(a);
+%           mircluster(sg, mirmfcc(sg))
+%           mircluster(sg, {mirmfcc(sg), mircentroid(sg)})
+%   c = mircluster(d) clusters the frame-decomposed data d into groups
+%       using K-means clustering.
+%       Example:
+%           cc = mirmfcc(a,'Frame');
+%           mircluster(cc)
+%   Optional argument:
+%       mircluster(...,n) indicates the maximal number of clusters.
+%           Default value: n = 2.
+%       mircluster(...,'Runs',r) indicates the maximal number of runs.
+%           Default value: r = 5.
+%
+%   Requires SOM Toolbox (included in the MIRtoolbox distribution).
+
+
+        nruns.key = 'Runs';
+        nruns.type = 'Integer';
+        nruns.default = 5;
+    option.nruns = nruns;
+     
+        nclust.position = 2;
+        nclust.type = 'Integer';
+        nclust.default = 2;
+    option.nclust = nclust;
+
+specif.option = option;
+
+specif.nochunk = 1;
+    
+d = a;
+if isa(a,'mirdesign')
+    if not(get(a,'Eval'))
+        % During bottom-up construction of the general design
+
+        [unused option] = miroptions(@mircluster,a,specif,varargin);
+        type = get(a,'Type');
+        a = mirdesign(@mircluster,a,option,{},struct,type);  
+        a = set(a,'NoChunk',1);
+    else
+        % During top-down evaluation initiation
+        
+        e = evaleach(a);
+        if iscell(e)
+            e = e{1};
+        end
+        a = mircluster(e,varargin{:});
+    end
+else
+    if not(isa(a,'mirdata'))
+        mirerror('mircluster','The input should be either frame- or segment-decomposed.');
+    end
+   
+    if isempty(varargin) || (not(isa(varargin{1},'mirdata') || ...
+                             (iscell(varargin{1}) && ...
+                              isa(varargin{1}{1},'mirdata'))))
+        % mircluster version for frame-decomposed data:
+        % frames are clustered into groups using K-means clustering.
+        [unused option] = miroptions(@mircluster,a,specif,varargin);
+        da = get(a,'Data');
+        lva = length(da); % Number of audio files in the audio object.
+        c = cell(1,lva);
+        display('Clustering frames...');
+        if mirwaitbar
+            handle = waitbar(0,'Clustering frames...');
+        else
+            handle = 0;
+        end
+        for j = 1:lva           % For each audio file,...
+            va = [];            % Data transmitted to the kmeans_cluster function.
+            v = da{j};
+            if iscell(v)
+                v = uncell(v,-Inf); %v{1};
+            end
+            if size(v,4)>1
+                v(end+1:2*end,:,:,1) = v(:,:,:,2);
+                v(:,:,:,2) = [];
+            end
+            % Standardization
+            %stv = std(v,0,2);
+            %stv(find(stv == 0)) = 1;
+            va(end+1:end+size(v,1),:,:) = v;%...
+                %(v - repmat(mean(v,2),[1 size(v,2) ])) ...
+                %./ repmat(stv,[1 size(v,2) ]);
+            if isa(a,'mirscalar')
+                m = get(a,'Mode');
+                if not(isempty(m))
+                    m = m{j};
+                    val = [];
+                    for l = 1:nseg
+                        vl = m{l};
+                        if iscell(vl)
+                            vl = vl{1};
+                        end
+                        val(:,l) = vl;
+                    end
+                    stv = std(val,0,2);
+                    stv(find(stv == 0)) = 1;
+                    va(end+1:end+size(val,1),:) = ...
+                        (val - repmat(mean(val,2),[1 size(val,2) ])) ...
+                            ./ repmat(stv,[1 size(val,2) ]);
+                end
+            end
+            if size(va,3)>1
+                mel = 1;
+                va = reshape(va,size(va,2),size(va,3))';
+            else
+                mel = 0;
+            end
+            [cc, p, err, ind] = kmeans_clusters(va',option.nclust,option.nruns);
+            [minind select] = min(ind);
+            c{j}.centr = cc{select}';
+            c{j}.index = p{select};
+            c{j}.weight = zeros(1,size(cc{select},1));
+            c{j}.covar = zeros(size(cc{select}'));
+            ii = 1;
+            for i = 1:size(c{j}.centr,2)
+                clus = va(:,c{j}.index == ii);
+                if isempty(clus)
+                    higher = find(c{j}.index > ii);
+                    c{j}.index(higher) = c{j}.index(higher)-1;
+                    c{j}.centr(:,ii) = [];
+                    c{j}.weight(ii) = [];
+                    c{j}.covar(:,ii) = [];
+                else
+                    c{j}.weight(ii) = size(clus,2)/size(va,2);
+                    if c{j}.weight(ii) == 0
+                        pause
+                    end
+                    c{j}.covar(:,ii) = mean((clus'-ones(1,size(clus,1))*c{j}.centr(:,ii)).^2);
+                    ii = ii+1;
+                end
+            end
+            if handle
+                waitbar(j/lva,handle);
+            end
+        end
+        if handle
+           delete(handle)
+        end
+        a = set(a,'Clusters',c);
+    else
+        % mircluster version for segmented audio:
+        % segments are clustered into groups using K-means clustering.
+        da = varargin{1};
+        varargin(1) = [];
+        [unused option] = miroptions(@mircluster,a,specif,varargin);
+        display('Clustering segments...');
+        if isa(da,'mirdata') || (iscell(da) && isa(da{1},'mirdata'))
+            if not(iscell(da))
+                da = {da};
+            end
+            vala = get(a,'Data');    % Data contained in the audio object a.
+            lva = length(vala); % Number of audio files in the audio object.
+            clus = cell(1,lva);
+            for j = 1:lva           % For each audio file,...
+                va = [];            % Data transmitted to the kmeans_cluster function.
+                nseg = length(vala{j}); % Number of segments in the audio file.
+                for i = 1:length(da)    % For each analytic feature,...
+                    v = get(da{i},'Data');
+                    v = v{j};
+                    if iscell(v)
+                        v = uncell(v,-Inf); %v{1};
+                    end
+                    val = [];           
+                    if size(v,4)>1
+                        v(end+1:2*end,:,:,1) = v(:,:,:,2);
+                        v(:,:,:,2) = [];
+                    end
+
+                    % Standardization
+                    stv = std(v,0,2);
+                    stv(find(stv == 0)) = 1;
+                    va(end+1:end+size(v,1),:) = ...
+                        (v - repmat(mean(v,2),[1 size(v,2) ])) ...
+                        ./ repmat(stv,[1 size(v,2) ]);
+                    if isa(da{i},'mirscalar')
+                        m = get(da{i},'Mode');
+                        if not(isempty(m))
+                            m = m{j};
+                            val = [];
+                            for l = 1:nseg
+                                vl = m{l};
+                                if iscell(vl)
+                                    vl = vl{1};
+                                end
+                                val(:,l) = vl;
+                            end
+                            stv = std(val,0,2);
+                            stv(find(stv == 0)) = 1;
+                            va(end+1:end+size(val,1),:) = ...
+                                (val - repmat(mean(val,2),[1 size(val,2) ])) ...
+                                    ./ repmat(stv,[1 size(val,2) ]);
+                        end
+                    end
+
+                end
+                [cc, p, err, ind] = kmeans_clusters(va',min(option.nclust,nseg),option.nruns);
+                clus{j} = p{end};
+            end
+            a = set(a,'Clusters',clus);
+            t = get(a,'Time'); 
+            fp = get(a,'FramePos'); 
+            for j = 1:lva           % For each audio file,...
+                aj = vala{j};
+                tj = t{j};
+                fpj = fp{j};
+                clj = clus{j};
+                k = 2;
+                while k <= length(aj)
+                    if clj(k) == clj(k-1)
+                        aj{k-1} = [aj{k-1};aj{k}];
+                        aj(k) = [];
+                        tj{k-1} = [tj{k-1};tj{k}];
+                        tj(k) = [];
+                        fpj{k-1} = [fpj{k-1}(1);fpj{k}(2)];
+                        fpj(k) = [];
+                        clj(k) = [];
+                        k = k-1;
+                    end
+                    k = k+1;
+                end
+                vala{j} = aj;
+                t{j} = tj;
+                fp{j} = fpj;
+                cl{j} = clj;
+            end
+            a = set(a,'Data',vala,'Time',t,'FramePos',fp,'Clusters',cl);
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mircompute.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+function varargout = mircompute(algo,varargin)
+
+l = length(varargin{1});    % number of audio files.
+for i = 1:l
+    % for each audio file
+    v = varargin;
+    for j = 1:length(v)
+        % for each variable associated to that audio
+        if isa(v{j},'mirdata')
+            v{j} = get(v{j},'Data');
+        end
+        if iscell(v{j})
+            v{j} = v{j}{i};
+        end
+        %if not(iscell(v{j}))
+        %    v{j} = {v{j}};
+        %end
+    end
+    % final result for that audio
+    for k = 1:length(v{1})
+        % for each segment in that audio file
+        vk = v;
+        for j = 1:length(vk)
+            if iscell(vk{j})
+                vk{j} = vk{j}{k};
+            end
+        end
+        if 1 %nargout == 1 
+            res = algo(vk{:});
+        else %% used for miremotion, provokes bug else...
+            [res res2 res3 res4] = algo(vk{:}); 
+        end
+        if iscell(res)
+            lr = length(res);
+            for j = 1:lr
+                varargout{j}{i}{k} = res{j};
+            end
+        else
+            varargout{1}{i}{k} = res;
+            if nargout == 4
+                varargout{2}{i}{k} = res2;
+                varargout{3}{i}{k} = res3;
+                varargout{4}{i}{k} = res4;
+            end
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirdist.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,122 @@
+function d = mirdist(x,y,dist)
+%   d = mirdist(x,y) evaluates the distance between x and y.
+%   x is the feature values corresponding to one audio file, and y is the
+%       values (for the same feature) corrdponding to one (or several)
+%       audio files.
+%   If x and y are not decomposed into frames,
+%       d = mirdist(x,y,f) specifies distance function.
+%           Default value: f = 'Cosine'
+%   If x and y are composed of clustered frames (using mircluster), the
+%       cluster signatures are compared using Earth Mover Distance.
+%       (Logan, Salomon, 2001)
+%   If x and y contains peaks, the vectors representing the peak
+%       distributions are compared using Euclidean distance.
+%       (used with mirnovelty in Jacobson, 2006)
+%
+% The Earth Mover Distance is based on the implementation by Yossi Rubner,
+% wrapped for Matlab by Elias Pampalk.
+
+if not(isa(x,'mirdata'))
+    x = miraudio(x);
+end
+if not(isa(y,'mirdata'))
+    y = miraudio(y);
+end
+
+clx = get(x,'Clusters');
+if isempty(clx{1})
+    px = get(x,'PeakPos');
+    if not(iscell(px)) || isempty(px{1}) || ...
+            not(iscell(px{1})) || isempty(px{1}{1}) || not(iscell(px{1}{1}))
+        if nargin < 3
+            dist = 'Cosine';
+        end
+
+        d = get(x,'Data');
+        dd = d{1}{1};
+        if iscell(dd)
+            dd = dd{1};
+        end
+        if size(dd,2)>1
+            if size(dd,1)>1
+                error('ERROR IN MIRDIST: If the input is decomposed into frames, they should first be clustered.'); 
+            else
+                dd = dd';
+            end
+        end
+
+        e = get(y,'Data');
+        dt = cell(1,length(e));
+        for h = 1:length(e)
+            ee = e{h}{1};
+            if iscell(ee)
+                ee = ee{1};
+            end
+            if size(ee,2)>1
+                if size(ee,1)>1
+                    error('ERROR IN MIRDIST: If the input is decomposed into frames, they should first be clustered.'); 
+                else
+                    ee = ee';
+                end
+            end
+            if isempty(ee)
+                if isempty(dd)
+                    dt{h}{1} = 0;
+                else
+                    dt{h}{1} = Inf;
+                end
+            else
+                if length(dd)<length(ee)
+                    dd(length(ee)) = 0;
+                    %ee = ee(1:length(d));
+                elseif length(ee)<length(dd)
+                    ee(length(dd)) = 0;
+                    %dd = dd(1:length(ee));
+                end
+                if length(dd) == 1
+                    dt{h}{1} = abs(dd-ee);
+                elseif norm(dd) && norm(ee)
+                    dt{h}{1} = pdist([dd(:)';ee(:)'],dist);
+                else
+                    dt{h}{1} = NaN;
+                end
+            end
+        end
+    else
+        % Euclidean distance between vectors to compare data with peaks
+        % (used with mirnovelty in Jacobson, 2006).
+        sig = pi/4;
+        dx = get(x,'Data');
+        nx = length(px{1}{1}{1});
+        cx = mean(px{1}{1}{1}/length(dx{1}{1}));
+        dy = get(y,'Data');
+        py = get(y,'PeakPos');
+        dt = cell(1,length(py));
+        for h = 1:length(py)
+            ny = length(py{h}{1}{1});
+            cy = mean(py{h}{1}{1}/length(dy{h}{1}));
+            dt{h}{1} = sqrt((nx*cos(sig*cx)-ny*cos(sig*cy))^2 ...
+                           +(nx*sin(sig*cx)-ny*sin(sig*cy))^2);
+        end
+    end
+else
+    % Earth Mover's Distance to compare clustered data.
+    cly = get(y,'Clusters');
+    dt = cell(1,length(cly));
+    for h = 1:length(cly)
+        cost = zeros(length(clx{1}.weight),length(cly{h}.weight));
+        for i = 1:length(clx{1}.weight)
+            for j = 1:length(cly{h}.weight)
+                covx = clx{1}.covar(:,i);
+                covy = cly{h}.covar(:,j);
+                mux = clx{1}.centr(:,i);
+                muy = cly{h}.centr(:,j);
+                cost(i,j) = sum(covx./covy + covy./covx + ...
+                        (mux-muy).^2.*(1./covx + 1./covy) - 2);
+            end
+        end
+        dt{h}{1} = emd_wrapper(cost,clx{1}.weight,cly{h}.weight);
+    end
+end
+d = mirscalar(y,'Data',dt,'Title',[get(y,'Title'),' Distance'],...
+                'Name',get(x,'Name'),'Name2',get(y,'Name'));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirentropy.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+function varargout = mirentropy(x,varargin)
+%   h = mirentropy(a) calculates the relative entropy of a.
+%   (Cf. User's Manual.)
+%   mirentropy(..., ?Center?) centers the input data before
+%       transforming it into a probability distribution.
+
+        center.key = 'Center';
+        center.type = 'Boolean';
+        center.default = 0;
+    option.center = center;
+    
+specif.option = option;
+
+varargout = mirfunction(@mirentropy,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if isamir(x,'miraudio')
+    x = mirspectrum(x);
+end
+type = 'mirscalar';
+
+
+function h = main(x,option,postoption)
+if iscell(x)
+    x = x{1};
+end
+m = get(x,'Data');
+v = cell(1,length(m));
+for h = 1:length(m)
+    v{h} = cell(1,length(m{h}));
+    for k = 1:length(m{h})
+        mk = m{h}{k};
+        mn = mk;
+        if isa(x,'mirhisto') || isa(x,'mirscalar')
+            mn = mn';
+        end
+        
+        if option.center
+            mn = center(mn);
+        end
+        
+        % Negative data is trimmed:
+        mn(mn<0) = 0;
+        
+        % Data is normalized such that the sum is equal to 1.
+        mn = mn./repmat(sum(mn)+repmat(1e-12,...
+                            [1 size(mn,2) size(mn,3) size(mn,4)]),...
+                       [size(mn,1) 1 1 1]);
+                   
+        % Actual computation of entropy
+        v{h}{k} = -sum(mn.*log(mn + 1e-12))./log(size(mn,1));
+        
+        if isa(x,'mirhisto') || isa(x,'mirscalar')
+            v{h}{k} = v{h}{k}';
+        end
+    end
+end
+t = ['Entropy of ',get(x,'Title')];
+h = mirscalar(x,'Data',v,'Title',t);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirerror.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function mirerror(operator,message)
+
+errordlg([operator,': ',message],'MIRtoolbox error');
+error(['ERROR using ',operator,': ', message]);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mireval.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,498 @@
+function v = mireval(d,file,single,export)
+%   mireval(d,filename) applies the mirdesign object d to the audio file
+%       named filename.
+%   mireval(d,'Folder') applied the mirdesign object to each audio files in
+%       the current directory.
+%   mireval(d,'Folders') applied the mirdesign object recursively to the
+%       subfolders.
+%   Optional argument: mireval(...,'Single') only keeps the first
+%       output when several output are returned for a given mirdesign
+%       object.
+
+% mireval performs the actual evaluation of the design flowchart.
+%   If 'Folder' is used, the evaluation is carried out for each audio file
+%       successively.
+%   If d is a structure or a cell array, evaluate each component
+%       separately.
+%   The evaluation starts with a top-down traversal of the design flowchart
+%       (evaleach).
+
+%if not(isa(d,'mirdesign'))
+%    error('ERROR IN MIREVAL: the first input should be a flowchart (using ''Design'')')
+%end
+if not(ischar(file))
+    error('ERROR IN MIREVAL: the second input should be a file name or ''Folder''')
+end
+
+if nargin<3
+    single = [];
+end
+if nargin<4
+    export = [];
+end
+
+% First, let's look at the content of the file(s): size, sampling rate,
+% etc.
+w = [];    % Array containing the index positions of the starting and ending dates.
+s = getsize(d);
+ch = 1;
+if strcmpi(file,'Folder') || strcmpi(file,'Folders')
+    [l w sr a] = evalfolder('',s,0,[],[],{},strcmpi(file,'Folders'));
+    if l == 0
+        disp('No sound file detected in this folder.')
+    end
+elseif length(file)>3 && strcmpi(file(end-3:end),'.txt')
+    a = importdata(file);
+    l = length(a);
+    for i = 1:l
+        [di,tpi,fpi,fi] = mirread([],a{i},0,0,0);
+        if not(isempty(s))
+            interval = s(1:2);
+            if s(3)
+                interval = round(interval*fi)+1;
+            end
+            if s(4) == 1
+                interval = interval+round(di/2);
+            elseif s(4) == 2
+                interval = interval+di;
+            end
+            w(:,i) = min(max(interval,1),di);
+        else
+            w(:,i) = [1;di];
+        end
+        if getsampling(d)
+            sr(i) = getsampling(d);
+        else
+            sr(i) = fi;
+        end
+    end
+else
+    l = 1;
+    [d1,tp1,fp1,f1,b,n,ch] = mirread([],file,0,0,0);
+    if length(s)>1
+        interval = s(1:2)';
+        if s(3)
+            interval = round(interval*f1)+1;
+        end
+        if s(4) == 1
+            interval = interval+round(d1/2);
+        elseif s(4) == 2
+            interval = interval+d1;
+        end
+        if d1 < interval(2)
+            warning('WARNING IN MIRAUDIO: The temporal region to be extracted exceeds the temporal extent of the whole audio file.'); 
+        end
+        w = min(max(interval,1),d1);
+    else
+        w = [1;d1];
+    end
+    if isa(d,'mirdesign') && getsampling(d)
+        sr = getsampling(d);
+    else
+        sr = f1;
+    end
+    a = {file};
+end
+
+if not(l)
+    v = [];
+    return
+end
+
+if isempty(export)
+    y = cell(1,l);
+end
+order = 1:l;
+if isa(d,'mirdesign') && isequal(get(d,'Method'),@mirplay)
+    op = get(d,'Option');
+    if isfield(op,'inc')
+        if not(isnumeric(op.inc))
+            op.inc = mirgetdata(op.inc);
+        end
+        [unused order] = sort(op.inc);
+    elseif isfield(op,'dec')
+        if not(isnumeric(op.inc))
+            op.inc = mirgetdata(op.inc);
+        end
+        [unused order] = sort(op.dec,'descend');
+    end
+    if isfield(op,'every')
+        order = order(1:op.every:end);
+    end
+    order = order(:)';
+end
+
+parallel = 0;
+if mirparallel
+    try
+        matlabpool;
+        parallel = 1;
+        mirwaitbar(0)
+        mirverbose(0)
+    end
+end
+
+if parallel
+    %   The evaluation is carried out for each audio file successively
+    %       (or in parallel).
+    parfor i = 1:l
+        if l > 1
+            fprintf('\n')
+            display(['*** File # ',num2str(i),'/',num2str(l),': ',a{i}]);
+        end
+        tic
+        yi = evalaudiofile(d,a{i},sr(i),w(:,i),{},0,i,single,'',ch);
+        toc
+        y{i} = yi;
+        if not(isempty(export))
+            if strncmpi(export,'Separately',10)
+                filename = a{i};
+                filename(filename == '/') = '.';
+                filename = [filename export(11:end)];
+                if i == 1
+                    mkdir('Backup');
+                end
+                mirexport(filename,yi);
+            elseif i==1
+                mirexport(export,yi);
+            else
+                mirexport(export,yi,'#add');
+            end
+        end
+        clear yi
+    end
+else
+    %   The evaluation is carried out for each audio file successively.
+    isstat = isfield(d,'Stat');
+    for i = 1:length(order)
+        f = order(i);
+        if l > 1
+            fprintf('\n')
+            display(['*** File # ',num2str(i),'/',num2str(l),': ',a{f}]);
+        end
+        tic
+        yf = evalaudiofile(d,a{f},sr(f),w(:,f),{},0,f,single,'',ch);
+        toc
+        y{f} = yf;
+        if not(isempty(export))
+            if strncmpi(export,'Separately',10)
+                filename = a{f};
+                filename(filename == '/') = '.';
+                filename = ['Backup/' filename export(11:end)];
+                if i == 1
+                    mkdir('Backup');
+                end
+                mirexport(filename,yf);
+            elseif i==1
+                mirexport(export,yf);
+            else
+                mirexport(export,yf,'#add');
+            end
+        end
+        clear yf
+    end
+end
+
+%if isempty(export)
+    v = combineaudiofile(a,isstat,y{:});
+%else
+%    v = [];
+%end
+    
+
+function v = evalaudiofile(d,file,sampling,size,struc,istmp,index,single,name,ch)
+% Now let's perform the analysis (or analyses) on the different files.
+%   If d is a structure or a cell array, evaluate each component
+%       separately.
+if isstruct(d)
+    v = struct;
+    if istmp
+        struc.tmp = struct;
+    end
+    isstat = isfield(d,'Stat');
+    if isstat
+        d = rmfield(d,'Stat');
+    end
+    fields = fieldnames(d);
+    for fi = 1:length(fields)
+        fieldname = fields{fi};
+        field = d.(fieldname);
+        display(['*******',fieldname,'******']);
+        if isstat
+            if isa(field,'mirstruct')
+                field = set(field,'Stat',1);
+            elseif isa(field,'mirdesign')
+                field = mirstat(field,'FileNames',0);
+            else
+                field.Stat = 1;
+            end
+        end
+        res = evalaudiofile(field,file,sampling,size,struc,istmp,index,...
+                                                     single,fieldname,ch);
+        if not(isempty(single)) && not(isequal(single,0)) && ...
+                iscell(res) && isa(field,'mirdesign')
+            res = res{1};
+        end
+        v.(fieldname) = res;
+        if istmp
+            struc.tmp.(fieldname) = res;
+        end
+        if fi == 1
+            if isfield(res,'Class')
+                v.Class = res.Class;
+                v.(fieldname) = rmfield(res,'Class');
+            end
+        end
+    end
+    if isfield(v,'tmp')
+        v = rmfield(v,'tmp');
+    end
+elseif iscell(d)
+    l = length(d);
+    v = cell(1,l);
+    for j = 1:l
+        v{j} = evalaudiofile(d{j},file,sampling,size,struc,istmp,index,...
+                                       single,[name,num2str(j)],ch);
+    end
+elseif isa(d,'mirstruct') && isempty(get(d,'Argin'))
+    mirerror('MIRSTRUCT','You should always use tmp fields when using mirstruct. Else, just use struct.');
+else
+    if get(d,'SeparateChannels')
+        v = cell(1,ch);
+        for i = 1:ch
+            d = set(d,'File',file,'Sampling',sampling,'Size',size,...
+                      'Eval',1,'Index',index,'Struct',struc,'Channel',i);
+            % For that particular file or this particular feature, let's begin the
+            % actual evaluation process.
+            v{i} = evaleach(d,single,name);    
+            % evaleach performs a top-down traversal of the design flowchart.
+        end
+        v = combinechannels(v);
+    else
+        d = set(d,'File',file,'Sampling',sampling,'Size',size,...
+                  'Eval',1,'Index',index,'Struct',struc);
+        % For that particular file or this particular feature, let's begin the
+        % actual evaluation process.
+        v = evaleach(d,single,name);    
+        % evaleach performs a top-down traversal of the design flowchart.
+    end
+end
+
+
+function y = combinechannels(c)
+y = c{1};
+v = get(y,'Data');
+for h = 2:length(c)
+    d = get(c{h},'Data');
+    for i = 1:length(d)
+        if isa(y,'mirmidi')
+            d{i}(:,3) = h;
+            v{i} = sortrows([v{i};d{i}]);
+        else
+            for j = 1:length(d{i})
+                v{i}{j}(:,:,h) = d{i}{j};
+            end
+        end
+    end
+end
+y = set(y,'Data',v);
+
+
+function c = combineaudiofile(filename,isstat,varargin) % Combine output from several audio files into one single
+c = varargin{1};    % The (series of) input(s) related to the first audio file
+if isempty(c)
+    return
+end
+if isstruct(c)
+    %fields = fieldnames(c);
+    for j = 1:length(varargin)
+        if j == 1
+            fields = fieldnames(varargin{1});
+        else
+            fields = union(fields,fieldnames(varargin{j}));
+        end
+    end
+    for i = 1:length(fields)
+        field = fields{i};
+        v = {};
+        for j = 1:length(varargin)
+            if isfield(varargin{j},field)
+                v{j} = varargin{j}.(field);
+            else
+                v{j} = NaN;
+            end
+        end
+        c.(field) = combineaudiofile('',isstat,v{:});
+        if strcmp(field,'Class')
+            c.Class = c.Class{1};
+        end
+    end
+    if not(isempty(filename)) && isstat
+        c.FileNames = filename;
+    end
+    return
+end
+if ischar(c)
+    c = varargin;
+    return
+end
+if (not(iscell(c)) && not(isa(c,'mirdata')))
+    for j = 1:length(varargin)
+        if j == 1
+            lv = size(varargin{j},1);
+        else
+            lv = max(lv,size(varargin{j},1));
+        end
+    end
+    c = NaN(lv,length(varargin));
+    for i = 1:length(varargin)
+        if not(isempty(varargin{i}))
+            c(1:length(varargin{i}),i) = varargin{i};
+        end
+    end
+    return
+end
+if (iscell(c) && not(isa(c{1},'mirdata')))
+    for i = 1:length(c)
+        v = cell(1,nargin-2);
+        for j = 1:nargin-2
+            v{j} = varargin{j}{i};
+        end
+        c{i} = combineaudiofile(filename,isstat,v{:});
+    end
+    return
+end
+if not(iscell(c))
+    c = {c};
+end
+nv = length(c); % The number of input variables for each different audio file
+for j = 1:nv % Combine files for each different input variable
+    v = varargin;
+    for i = 1:length(varargin)
+        if iscell(v{i})
+            v{i} = v{i}{j};
+        end
+    end
+    if not(isempty(v)) && not(isempty(v{1}))
+        c{j} = combine(v{:});
+    end
+end
+
+
+function s = getsize(d)
+if isa(d,'mirstruct')
+    d = get(d,'Data');
+    if isempty(d)
+        error('ERROR in MIREVAL: Your mirstruct object does not have any field (besides tmp).');
+        s = 0;
+    else
+        s = getsize(d{1});
+    end
+elseif isstruct(d)
+    fields = fieldnames(d);
+    s = getsize(d.(fields{1}));
+elseif iscell(d)
+    s = getsize(d{1});
+else
+    s = get(d,'Size');  % Starting and ending dates in seconds.
+end
+
+
+function d2 = sortnames(d,d2,n)
+if length(n) == 1
+    d2(end+1) = d(1);
+    return
+end
+first = zeros(1,length(n));
+for i = 1:length(n)
+    if isempty(n{i})
+        first(i) = -Inf;
+    else
+        ni = n{i}{1};
+        if ischar(ni)
+            first(i) = ni-10058;
+        else
+            first(i) = ni;
+        end
+    end
+end
+[o i] = sort(first);
+n = {n{i}};
+d = d(i);
+i = 0;
+while i<length(n)
+    i = i+1;
+    if isempty(n{i})
+        d2(end+1) = d(i);
+    else
+        dmp = (d(i));
+        tmp = {n{i}(2:end)};
+        while i+1<=length(n) && n{i+1}{1} == n{i}{1};
+            i = i+1;
+            dmp(end+1) = d(i);
+            tmp{end+1} = n{i}(2:end);
+        end
+        d2 = sortnames(dmp,d2,tmp);
+    end
+end
+
+
+function [l w sr a] = evalfolder(path,s,l,w,sr,a,folders)
+if not(isempty(path))
+    path = [path '/'];
+end
+dd = dir;
+dn = {dd.name};
+nn = cell(1,length(dn));  % Modified file names
+for i = 1:length(dn)      % Each file name is considered
+    j = 0;
+    while j<length(dn{i})   % Each successive character is modified if necessary
+        j = j+1;
+        tmp = dn{i}(j) - '0';
+        if tmp>=0 && tmp<=9
+            while j+1<length(dn{i}) && dn{i}(j+1)>='0' && dn{i}(j+1)<='9'
+                j = j+1;
+                tmp = tmp*10 + (dn{i}(j)-'0');
+            end
+        else
+            tmp = dn{i}(j);
+        end
+        nn{i}{end+1} = tmp;
+    end
+end
+dd = sortnames(dd,[],nn);
+for i = 1:length(dd);
+    nf = dd(i).name;
+    if folders && dd(i).isdir
+        if not(strcmp(nf(1),'.'))
+            cd(dd(i).name)
+            [l w sr a] = evalfolder([path nf],s,l,w,sr,a,1);
+            %l = l + l2;
+            %w = [w w2];
+            %sr = [sr sr2];
+            %a = [a a2];
+            cd ..
+        end
+    else
+        [di,tpi,fpi,fi,bi,ni] = mirread([],nf,0,1,0);
+        if not(isempty(ni))
+            l = l+1;
+            if not(isempty(s))
+                interval = s(1:2);
+                if s(3)
+                    interval = round(interval*fi)+1;
+                end
+                if s(4) == 1
+                    interval = interval+round(di/2);
+                elseif s(4) == 2
+                    interval = interval+di;
+                end
+                w(:,l) = min(max(interval,1),di);
+            else
+                w(:,l) = [1;di];
+            end
+            sr(l) = fi;
+            a{l} = [path ni];
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mireventdensity.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+function varargout = mireventdensity(x,varargin)
+%   e = mireventdensity(x) estimate the mean frequency of events (i.e., how
+%       many note onsets per second) in the temporal data x.
+
+%   Optional arguments: Option1, Option2
+% Tuomas Eerola, 14.08.2008
+%
+        normal.type = 'String';
+        normal.choice = {'Option1','Option2'};
+        normal.default = 'Option1';
+    option.normal = normal;
+
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [0 0];
+        frame.keydefault = [10 1];
+    option.frame = frame;
+    
+specif.option = option;
+
+specif.defaultframelength = 1.00;
+specif.defaultframehop = 0.5;
+
+%specif.eachchunk = 'Normal';
+specif.combinechunk = {'Average','Concat'};
+
+varargout = mirfunction(@mireventdensity,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirenvelope'))
+    if option.frame.length.val
+        x = mironsets(x,'Klapuri99', 'Frame',option.frame.length.val,...
+                                              option.frame.length.unit,...
+                                              option.frame.hop.val,...
+                                              option.frame.hop.unit);
+    else
+        x = mironsets(x,'Klapuri99');
+    end
+end
+type = 'mirscalar';
+
+
+function e = main(o,option,postoption)
+if iscell(o)
+    o = o{1};
+end
+sr = get(o,'Sampling');
+p = mirpeaks(o); %%%%<<<<<<< MORE OPTIONS HERE
+pv = get(p,'PeakVal');
+v = mircompute(@algo,pv,o,option,sr);
+e = mirscalar(o,'Data',v,'Title','Event density','Unit','per second');
+e = {e o};
+
+
+function e = algo(pv,o,option,sr)
+nc = size(o,2);
+nch = size(o,3);
+e = zeros(1,nc,nch);
+% for i = 1:nch
+%     for j = 1:nc
+%         if option.root
+%             e(1,j,i) = norm(d(:,j,i));
+%         else
+%             disp('do the calc...')
+%  %           e(1,j,i) = d(:,j,i)'*d(:,j,i);
+%             %tmp = mironsets(d,'Filterbank',10,'Contrast',0.1); % Change by TE, was only FB=20, no other params
+%             e2 = mirpeaks(e)
+%             [o1,o2] = mirgetdata(e);
+%             e(1,j,i) = length(o2)/mirgetdata(mirlength(d)); 
+%         end
+%     end
+% end
+for i = 1:nch
+    for j = 1:nc
+        e(1,j,i) = length(pv{1,j,i});
+        if strcmpi(option.normal,'Option1')
+            e(1,j,i) = e(1,j,i) *sr/size(o,1);
+        elseif strcmpi(option.normal,'Option2')
+            pvs = pv{1};
+            high_pvs = length(find(mean(pvs)>pvs));
+            e(1,j,i) = high_pvs(1,j,i) *sr/size(o,1); % only those which are larger than mean
+        end
+    end
+end
+
+
+
+%function [y orig] = eachchunk(orig,option,missing,postchunk)
+%y = mireventdensity(orig,option);
+
+
+%function y = combinechunk(old,new)
+%do = mirgetdata(old);
+%dn = mirgetdata(new);
+%y = set(old,'ChunkData',do+dn);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirexport.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,375 @@
+function m = mirexport(f,varargin)
+%   mirexport(filename,...) exports statistical information related to 
+%       diverse data into a text file called filename.
+%   mirexport('Workspace',...) instead directly output the statistical 
+%       information in a structure array saved in the Matlab workspace.
+%       This structure contains three fields:
+%           filenames: the name of the original audio files, 
+%           types: the name of the features,
+%           data: the data.
+%   The exported data should be related to the same initial audio file
+%       or the same ordered set of audio files.
+%   The data listed after the first arguments can be:
+%       - any feature computed in MIRtoolbox.
+%           What will be exported is the statistical description of the 
+%           feature (using the mirstat function)
+%       - any structure array of such features.
+%           Such as the ouput of the mirstat function.
+%       - any cell array of such features.
+%       - the name of a text file.
+%           The text file is imported with the Matlab importdata command.
+%           Each line of the file should contains a fixed number of data
+%           delimited by tabulations. The first line, or 'header',
+%           indicates the name of each of these columns.
+%   The file format of the output can be either:
+%       - a text file.
+%           It follows the same text file representation as for the input
+%           text files. The first column of the matrix indicates the name 
+%           of the audio files. The text file can be opened in Matlab,
+%           or in a spreadsheet program, such as Microsoft Excel, where the
+%           data matrix can be automatically reconstructed.
+%       - an attribute-relation file.
+%           It follows the ARFF standard, used in particular in the WEKA
+%           data mining environment.
+
+stored.data = {};
+stored.textdata = {};
+stored.name = {};
+narg = nargin;
+if strcmpi(f,'Workspace')
+    format = 'Workspace';
+elseif length(f)>4 && strcmpi(f(end-4:end),'.arff')
+    format = 'ARFF';
+else
+    format = 'Matrix';
+end
+v = ver('MIRtoolbox');
+title = ['MIRtoolbox' v.Version];
+class = {};
+if not(isempty(varargin)) && ischar(varargin{end}) && strcmp(varargin{end},'#add')
+    add = 1;
+    varargin(end) = [];
+    narg = narg-1;
+else
+    add = 0;
+end
+for v = 2:narg
+    argv = varargin{v-1};
+    if isa(argv,'mirdesign')
+        mirerror('MIREXPORT','You can only export features that have been already evaluated (using mireval).');
+    end
+    if ischar(argv)
+        if strcmpi(argv,'Matrix')
+            format = 'Matrix';
+        elseif strcmpi(argv,'ARFF')
+            format = 'ARFF';
+        else
+            imported = importdata(argv,'\t',1);
+            imported.name = {};
+            [stored class] = integrate(stored,imported);
+        end
+    elseif isstruct(argv) && isfield(argv,'data')
+        new.data = argv.data;
+        new.textdata = argv.fields;
+        new.name = {};
+        [stored class] = integrate(stored,new);
+    else
+        new.data = argv;
+        new.textdata = '';
+        new.name = {};
+        [stored class] = integrate(stored,new);
+    end
+end
+switch format
+    case 'Matrix'
+        matrixformat(stored,f,title,add);
+        m = 1;
+    case 'ARFF'
+        classes = {};
+        for i = 1:length(class)
+            if isempty(strcmp(class{i},classes)) || not(max(strcmp(class{i},classes)))
+                classes{end+1} = class{i};
+            end
+        end
+        ARFFformat(stored,f,title,class,classes,add);
+        m = 1;
+    case 'Workspace'
+        m = variableformat(stored,f,title);
+end
+
+
+
+function [stored class] = integrate(stored,new,class)
+
+if nargin<3
+    class = {};
+end
+    
+% Input information
+data = new.data;
+textdata = new.textdata;
+if isfield(new,'name')
+    name = new.name;
+else
+    name = {};
+end
+
+% Input information after processing
+newdata = {};
+newtextdata = {};
+newname = {};
+
+if isstruct(data)
+    if isfield(data,'Class')
+        class = data.Class;
+        data = rmfield(data,'Class');
+    end
+        
+    if isfield(data,'FileNames')
+        name = data.FileNames;
+        data = rmfield(data,'FileNames');
+    end
+    
+    fields = fieldnames(data);
+    nfields = length(fields);
+
+    for w = 1:nfields
+        % Field information
+        field = fields{w};
+        newfield.data = data.(field);
+        if 1 %not(isnumeric(newfield.data) && all(all(isnan(newfield.data))))
+            if isempty(textdata)
+                newfield.textdata = field;
+            else
+                newfield.textdata = strcat(textdata,'_',field);
+            end
+
+            % Processing of the field
+            [n class] = integrate({},newfield,class);
+
+            % Concatenation of the results
+            newdata = {newdata{:} n.data{:}};
+            newtextdata = {newtextdata{:} n.textdata{:}};
+            newname = checkname(newname,name);
+        end
+    end
+elseif isa(data,'mirdata')
+    newinput.data = mirstat(data);
+    if isfield(newinput.data,'FileNames')
+        newinput.data = rmfield(newinput.data,'FileNames');
+    end
+    title = get(data,'Title');
+    newinput.textdata = [textdata '_' title(find(not(isspace(title))))];
+    [n class] = integrate({},newinput,class);
+    newdata = n.data;
+    newtextdata = n.textdata;
+    newname = get(data,'Name');
+elseif iscell(textdata)
+    % Input comes from importdata
+    nvar = size(data,2);
+    newdata = cell(1,nvar);
+    newtextdata = cell(1,nvar);
+    for i = 1:nvar
+        newdata{i} = data(:,i);
+        newtextdata{i} = textdata{i};
+    end
+    newname = {};
+elseif iscell(data)
+    for i = 1:length(data)
+        if not(isempty(data{i}))
+            % Element information
+            newelement.data = data{i};
+            newelement.textdata = [textdata num2str(i)];
+
+            % Processing of the element
+            [n class] = integrate({},newelement,class);
+
+            % Concatenation of the results
+            newdata = {newdata{:} n.data{:}};
+            newtextdata = {newtextdata{:} n.textdata{:}};
+            newname = checkname(newname,n.name);
+        end
+    end
+elseif size(data,4)>1
+    % Input is vector
+    for w = 1:size(data,4)
+        % Bin information
+        bin.data = data(:,:,:,w);
+        if isempty(textdata)
+            bin.textdata = num2str(w);
+        else
+            bin.textdata = strcat(textdata,'_',num2str(w));
+        end
+        
+        % Processing of the bin
+        [n class] = integrate({},bin,class);
+        
+        % Concatenation of the results
+        newdata = {newdata{:} n.data{:}};
+        newtextdata = {newtextdata{:} n.textdata{:}};
+    end
+elseif size(data,3)>1
+    % Input is vector
+    for w = 1:size(data,3)
+        % Bin information
+        bin.data = data(:,:,w,:);
+        if isempty(textdata)
+            bin.textdata = num2str(w);
+        else
+            bin.textdata = strcat(textdata,'_',num2str(w));
+        end
+        
+        % Processing of the bin
+        [n class] = integrate({},bin,class);
+        
+        % Concatenation of the results
+        newdata = {newdata{:} n.data{:}};
+        newtextdata = {newtextdata{:} n.textdata{:}};
+    end
+elseif size(data,1)>1 && size(data,1)<=50
+    % Input is vector
+    for w = 1:size(data,1)
+        % Bin information
+        bin.data = data(w,:,:,:);
+        if isempty(textdata)
+            bin.textdata = num2str(w);
+        else
+            bin.textdata = strcat(textdata,'_',num2str(w));
+        end
+        
+        % Processing of the bin
+        [n class] = integrate({},bin,class);
+        
+        % Concatenation of the results
+        newdata = {newdata{:} n.data{:}};
+        newtextdata = {newtextdata{:} n.textdata{:}};
+    end
+else 
+    if size(data,1)>1
+        data = mean(data);
+    end
+    newdata = {data};
+    newtextdata = {textdata};
+    newname = {};
+end
+if isempty(stored)
+    stored.data = newdata;
+    stored.textdata = newtextdata;
+    stored.name = newname;
+else
+    stored.data = {stored.data{:} newdata{:}};
+    stored.textdata = {stored.textdata{:} newtextdata{:}};
+    if isempty(stored.name)
+        stored.name = newname;
+    else
+        stored.name = checkname(newname,stored.name);
+    end
+end
+
+
+function m = matrixformat(data,filename,title,add)
+named = ~isempty(data.name);
+if named
+    if not(add)
+        m(1,:) = {title,data.textdata{:}};
+    end
+    for i = 1:length(data.name)
+        m{i+~add,1} = data.name{i};
+    end
+elseif not(add)
+    m(1,:) = {data.textdata{:}};
+end
+for i = 1:length(data.data)
+    m((1:length(data.data{i}))+~add,i+named) = num2cell(data.data{i});
+end
+if add
+    fid = fopen(filename,'at');
+else
+    fid = fopen(filename,'wt');
+end
+for i = 1:size(m,1)
+    for j = 1:size(m,2)
+        if ischar(m{i,j})
+            fprintf(fid,'%s\t', m{i,j}(find(not(m{i,j} == ' '))));
+        else
+            if iscell(m{i,j}) % Problem with key strength pos to be solved
+                fprintf(fid,'%f\t', m{i,j}{1});
+            else
+                fprintf(fid,'%f\t', m{i,j});
+            end
+        end
+    end
+    %if i < size(m,1)
+        fprintf(fid,'\n');
+    %end
+end
+fclose(fid);
+disp(['Data exported to file ',filename,'.']);
+
+
+function ARFFformat(data,filename,title,class,classes,add)
+if add
+    fid = fopen(filename,'at');
+else
+    fid = fopen(filename,'wt');
+    fprintf(fid,['%% Attribution-Relation File automatically generated using ',title,'\n\n']);
+    fprintf(fid,'@RELATION %s\n\n',title);
+    for i = 1:length(data.textdata)
+        fprintf(fid,'@ATTRIBUTE %s NUMERIC\n',data.textdata{i});
+    end
+    if not(isempty(class))
+        fprintf(fid,'@ATTRIBUTE class {');
+        for i = 1:length(classes)
+            if i>1
+                fprintf(fid,',');
+            end
+            fprintf(fid,'%s',classes{i});
+        end
+        fprintf(fid,'}\n');
+    end
+    fprintf(fid,'\n@DATA\n');
+    fid2 = fopen([filename(1:end-5) '.filenames.txt'],'wt');    
+    for i = 1:length(data.name)
+        fprintf(fid2,'%s\n',data.name{i});
+    end
+    fclose(fid2);
+end
+
+try
+    data = cell2mat(data.data(:))';
+catch
+    error('ERROR IN MIREXPORT: Are you sure all the data to be exported relate to the same ordered list of audio files?');
+end
+for i = 1:size(data,1)
+    fprintf(fid,'%d ',data(i,:));
+    if not(isempty(class))
+        fprintf(fid,'%s',class{i});
+    end
+    fprintf(fid,'\n');
+end
+fclose(fid);
+disp(['Data exported to file ',filename,'.']);
+
+
+function m = variableformat(data,filename,title)
+m.types = data.textdata;
+m.filenames = data.name;
+for i = 1:length(data.data)
+    m.data{i} = data.data{i};
+end
+
+
+function name = checkname(newname,name)
+if not(isempty(newname)) && not(isempty(name))
+    if length(newname) == length(name)
+        for i = 1:length(name)
+            if not(strcmp(name{i},newname{i}))
+                error('ERROR IN MIREXPORT: All the input are not associated to the same audio files (or the same ordering of these files.');
+            end
+        end
+    else
+        error('ERROR IN MIREXPORT: All the input are not associated to the same audio files.');
+    end
+elseif isempty(name)
+    name = newname;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirfeatures.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,153 @@
+function r = mirfeatures(x,varargin)
+%   f = mirfeatures(x) computes a large set of features from one or several
+%       audio files. x can be either the name of an audio file, or the
+%       'Folder' keyword.
+%   mirfeatures(...,'Stat') returns the statistics of the features instead
+%       of the complete features themselves.
+%   mirfeatures(...,'Segment',t) segments the audio sequence at the 
+%       temporal positions indicated in the array t (in s.), and analyzes
+%       each segment separately.
+
+%(not available yet)
+%   mirfeatures(...,'Filterbank',nc) computes the analysis on each channel
+%       of a filterbank decomposition.
+%       Default value: nc = 5
+%   mirfeatures(...,'Frame',...) 
+%   mirfeatures(...,'Normal')
+%   mirfeatures(...,'Sampling',s)
+%   miraudio options (Extract, ...)
+
+[stat,nchan,segm,feat] = scanargin(varargin);
+
+if isa(x,'miraudio') || isa(x,'mirdesign')
+    a = miraudio(x,'Normal'); % normalize with respect to RMS energy 
+                              % in order to consider timbre independently of
+                             % energy
+else
+    a = miraudio('Design','Normal');
+end
+
+if not(isempty(segm))
+    a = mirsegment(a,segm);
+end
+
+
+
+% DYNAMICS
+% --------
+
+r.dynamics.rms = mirrms(a,'Frame');
+% Perceived dynamics: spectral slope?
+
+% RHYTHM
+% ------
+
+r.fluctuation = mirstruct;
+r.fluctuation.tmp.f = mirfluctuation(a,'Summary');
+r.fluctuation.peak = mirpeaks(r.fluctuation.tmp.f,'Total',1);%only one?
+r.fluctuation.centroid = mircentroid(r.fluctuation.tmp.f);
+
+r.rhythm = mirstruct;
+r.rhythm.tmp.onsets = mironsets(a);
+
+%r.rhythm.eventdensity = ...
+
+r.rhythm.tempo = mirtempo(r.rhythm.tmp.onsets,'Frame');
+%r.rhythm.pulseclarity = mirpulseclarity(r.tmp.onsets,'Frame');
+    % Should use the second output of mirtempo.
+
+attacks = mironsets(r.rhythm.tmp.onsets,'Attacks');
+r.rhythm.attack.time = mirattacktime(attacks);
+r.rhythm.attack.slope = mirattackslope(attacks);
+
+% TIMBRE
+% ------
+
+f = mirframe(a,.05,.5);
+r.spectral = mirstruct;
+r.spectral.tmp.s = mirspectrum(f);
+%pitch = mirpitch(a,'Frame',.05,.5);
+
+r.spectral.centroid = mircentroid(r.spectral.tmp.s);
+r.spectral.brightness = mirbrightness(r.spectral.tmp.s);
+r.spectral.spread = mirspread(r.spectral.tmp.s);
+r.spectral.skewness = mirskewness(r.spectral.tmp.s);
+r.spectral.kurtosis = mirkurtosis(r.spectral.tmp.s);
+r.spectral.rolloff95 = mirrolloff(r.spectral.tmp.s,95);
+r.spectral.rolloff85 = mirrolloff(r.spectral.tmp.s,85);
+r.spectral.spectentropy = mirentropy(r.spectral.tmp.s);
+r.spectral.flatness = mirflatness(r.spectral.tmp.s);
+
+r.spectral.roughness = mirroughness(r.spectral.tmp.s);
+r.spectral.irregularity = mirregularity(r.spectral.tmp.s);
+%r.spectral.inharmonicity = mirinharmonicity(r.spectral.tmp.s,'f0',pitch);
+
+r.spectral.mfcc = mirmfcc(r.spectral.tmp.s);
+r.spectral.dmfcc = mirmfcc(r.spectral.mfcc,'Delta');
+r.spectral.ddmfcc = mirmfcc(r.spectral.dmfcc,'Delta');
+
+r.timbre.zerocross = mirzerocross(f);
+r.timbre.lowenergy = mirlowenergy(f);
+r.timbre.spectralflux = mirflux(f);
+
+% PITCH
+% -----
+
+r.tonal = mirstruct;
+r.tonal.tmp.chromagram = mirchromagram(a,'Frame','Wrap',0,'Pitch',0);
+r.tonal.chromagram.peak=mirpeaks(r.tonal.tmp.chromagram,'Total',1);
+r.tonal.chromagram.centroid=mircentroid(r.tonal.tmp.chromagram);
+
+% TONALITY/HARMONY
+% ----------------
+
+keystrengths = mirkeystrength(r.tonal.tmp.chromagram);
+[k r.tonal.keyclarity] = mirkey(keystrengths,'Total',1);
+%r.tonal.keyclarity = k{2};
+r.tonal.mode = mirmode(keystrengths);
+r.tonal.hcdf = mirhcdf(r.tonal.tmp.chromagram);
+
+if stat
+    r = mirstat(r);
+    % SHOULD COMPUTE STAT OF CURVES FROM FRAMED_DECOMPOSED HIGH FEATURES
+end
+    
+if not(isa(x,'miraudio')) && not(isa(x,'mirdesign'))
+    r = mireval(r,x);
+end
+
+
+function [stat,nchan,segm,feat] = scanargin(v)
+stat = 0;
+nchan = 1;
+segm = [];
+feat = {};
+i = 1;
+while i <= length(v)
+    arg = v{i};
+    if ischar(arg) && strcmpi(arg,'Filterbank')
+        i = i+1;
+        if i <= length(v)
+            nchan = v{i};
+        else
+            nchan = 10;
+        end
+    elseif ischar(arg) && strcmpi(arg,'Stat')
+        i = i+1;
+        if i <= length(v)
+            stat = v{i};
+        else
+            stat = 1;
+        end
+    elseif ischar(arg) && strcmpi(arg,'Segment')
+        i = i+1;
+        if i <= length(v)
+            segm = v{i};
+        else
+            segm = 1;
+        end
+    else
+        feat{end+1} = arg;
+    end    
+    i = i+1;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirfilterbank.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,333 @@
+function varargout = mirfilterbank(orig,varargin)
+%   b = mirfilterbank(x) performs a filterbank decomposition of an audio
+%       waveform.
+%   Optional arguments:
+%       mirfilterbank(...,t) selects a type of filterbank.
+%           Possible values:
+%               t = 'Gammatone' (default for audio files).
+%                   Requires the Auditory Toolbox.
+%                   mirfilterbank(...,'Lowest',f): lowest frequency in Hz
+%                       (default: 50)
+%               t = '2Channels' proposed in (Tolonen & Karjalainen, 2000)
+%           mirfilterbank(...,'NbChannels',N), or simply filterbank(x,N):
+%               specifies the number of channels in the bank.
+%               (default: N = 10)
+%           mirfilterbank(...,'Channel',c) only output the channels whose
+%               ranks are indicated in the array c.
+%               (default: c = (1:N))
+%       mirfilterbank(...,'Manual',f) specifies a set of low-pass, band-
+%                   pass and high-pass eliptic filters (Scheirer, 1998). 
+%                   The series of cut-off frequencies as to be specified
+%                   as next parameter f.
+%                       If this series of frequencies f begins with -Inf,
+%                           the first filter is low-pass.
+%                       If this series of frequencies f ends with Inf,
+%                           the last filter is high-pass.
+%           mirfilterbank(...,'Order',o) specifies the order of the filter.
+%               (Default: o = 4) (Scheirer, 1998)
+%           mirfilterbank(...,'Hop',h) specifies the degree of spectral
+%               overlapping between successive channels.
+%               If h = 1 (default value), the filters are non-overlapping.
+%               If h = 2, the filters are half-overlapping.
+%               If h = 3, the spectral hop factor between successive
+%                   filters is a third of the whole frequency region, etc.
+%       mirfilterbank(...,p) specifies predefined filterbanks, all
+%           implemented using elliptic filters, by default of order 4.
+%           Possible values:
+%               p = 'Mel' (mel-scale)
+%               p = 'Bark' (bark-scale)
+%               p = 'Scheirer' proposed in (Scheirer, 1998) corresponds to
+%                   'Manual',[-Inf 200 400 800 1600 3200 Inf]
+%               p = 'Klapuri' proposed in (Klapuri, 1999) corresponds to
+%                   'Manual',44*[2.^ ([ 0:2, ( 9+(0:17) )/3 ]) ]
+
+        nCh.key = 'NbChannels';
+        nCh.type = 'Integer';
+        nCh.default = 10;
+    option.nCh = nCh;
+    
+        Ch.key = {'Channel','Channels'};
+        Ch.type = 'Integer';
+        Ch.default = 0;
+    option.Ch = Ch;
+    
+        lowF.key = 'Lowest';
+        lowF.type = 'Integer';
+        lowF.default = 50;
+    option.lowF = lowF;
+
+        freq.key = 'Manual';
+        freq.type = 'Integer';
+        freq.default = NaN;
+    option.freq = freq;
+    
+        overlap.key = 'Hop';
+        overlap.type = 'Boolean';
+        overlap.default = 1;
+    option.overlap = overlap;
+
+        filtertype.type = 'String';
+        filtertype.choice = {'Gammatone','2Channels',0};
+        filtertype.default = 'Gammatone';
+    option.filtertype = filtertype;
+
+        filterorder.key = 'Order';
+        filterorder.type = 'Integer';
+        filterorder.default = 4;
+    option.filterorder = filterorder;
+
+        presel.type = 'String';
+        presel.choice = {'Scheirer','Klapuri','Mel','Bark'};
+        presel.default = '';
+    option.presel = presel;
+
+specif.option = option;
+
+specif.eachchunk = @eachchunk;
+specif.combinechunk = @combinechunk;
+
+varargout = mirfunction(@mirfilterbank,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = 'miraudio';
+
+
+function b = main(x,option,postoption)
+if iscell(x)
+    x = x{1};
+end
+f = get(x,'Sampling');
+    
+if strcmpi(option.presel,'Scheirer')
+    option.freq = [-Inf 200 400 800 1600 3200 Inf];
+elseif strcmpi(option.presel,'Klapuri')
+    option.freq = 44*[2.^([0:2,(9+(0:17))/3])];
+elseif strcmpi(option.presel,'Mel')
+    lowestFrequency = 133.3333;
+    linearFilters = 13;
+    linearSpacing = 66.66666666;
+    logFilters = 27;
+    logSpacing = 1.0711703;
+    totalFilters = linearFilters + logFilters;
+    cepstralCoefficients = 13;
+    option.freq = lowestFrequency + (0:linearFilters-1)*linearSpacing;
+    option.freq(linearFilters+1:totalFilters+2) = ...
+        option.freq(linearFilters) * logSpacing.^(1:logFilters+2);
+
+    option.overlap = 2;
+elseif strcmpi(option.presel,'Bark')
+    option.freq = [10 20 30 40 51 63 77 92 108 127 148 172 200 232 ...
+                    270 315 370 440 530 640 770 950 1200 1550]*10; %% Hz
+end
+if not(isnan(option.freq))
+    option.filtertype = 'Manual';
+end
+        
+d = get(x,'Data');
+if size(d{1}{1},3) > 1
+    warning('WARNING IN MIRFILTERBANK: The input data is already decomposed into channels. No more channel decomposition.');
+    if option.Ch
+        cx = get(x,'Channels');
+        db = cell(1,length(d));
+        for k = 1:length(d)
+            db{k} = cell(1,length(d{k}));
+            for l = 1:length(d{k})
+                for i = 1:length(option.Ch)
+                    db{k}{l}(:,:,i) = d{k}{l}(:,:,find(cx{k} == option.Ch(i)));
+                end
+            end
+        end
+        b = set(x,'Data',db,'Channels',option.Ch);
+    else
+        b = x;
+    end
+else
+    i = 1;
+    while i <= length(d)
+        if size(d{i}{1},2) > 1
+            warning('WARNING IN MIRFILTERBANK: The frame decomposition should be performed after the filterbank decomposition.');
+            disp(['Suggestion: Use the ' char(34) 'Frame' char(34) ' option available to some of the MIRtoolbox functions.'])
+            break
+        end
+        i = i+1;
+    end
+    nCh = option.nCh;
+    Ch = option.Ch;
+    if strcmpi(option.filtertype, 'Gammatone');
+        [tmp x] = gettmp(x); %get(x,'Tmp');
+        if not(Ch)
+            Ch = 1:nCh;
+        end
+        erb = cell(1,length(d));
+        for i = 1:length(d)
+            erb{i} = cell(1,length(d{i}));
+            nch{i} = Ch;
+            for j = 1:length(d{i})
+                try
+                    coef = MakeERBFilters(f{i},nCh,option.lowF);
+                catch
+                    error(['ERROR IN MIRFILTERBANK: Auditory Toolbox needs to be installed.']);
+                end                    
+                [erb{i}{j} tmp] = ERBfilterbank(d{i}{j},coef,Ch,tmp);
+            end
+        end
+        b = set(x,'Data',erb,'Channels',nch);%,'Tmp',tmp);
+        clear erb
+        b = settmp(b,tmp);
+    elseif strcmpi(option.filtertype, '2Channels');
+        if not(Ch)
+            Ch = 1:2;
+        end
+        output = cell(1,length(d));
+        try
+            for i = 1:length(d)
+                output{i} = cell(1,length(d{i}));
+                [bl,al] = butter(4,[70 1000]/f{i}*2);
+                k = 1;
+                if ismember(1,Ch)
+                    Hdl = dfilt.df2t(bl,al);
+                    %fvtool(Hdl)
+                    Hdl.PersistentMemory = true;
+                    for j = 1:length(d{i})
+                        low = filter(Hdl,d{i}{j});
+                        output{i}{j}(:,:,k) = low;
+                    end
+                    k = k+1;
+                end
+                if ismember(2,Ch)
+                    if f{i} < 20000
+                        [bh,ah] = butter(2,1000/f{i}*2,'high');
+                    else
+                        [bh,ah] = butter(2,[1000 10000]/f{i}*2);
+                    end
+                    Hdlh = dfilt.df2t(bl,al);
+                    %fvtool(Hdlh)
+                    Hdh = dfilt.df2t(bh,ah);
+                    %fvtool(Hdh)
+                    Hdlh.PersistentMemory = true;
+                    Hdh.PersistentMemory = true;
+                    for j = 1:length(d{i})
+                        high = filter(Hdh,d{i}{j});
+                        high = max(high,0);
+                        high = filter(Hdlh,high);
+                        output{i}{j}(:,:,k) = high;
+                    end
+                end
+                nch{i} = Ch;
+            end
+            b = set(x,'Data',output,'Channels',nch);
+        catch
+            warning(['WARNING IN MIRFILTERBANK: Signal Processing Toolbox (version 6.2.1, or higher) not installed: no filterbank decomposition.']);
+            b = x;
+        end
+    elseif strcmpi(option.filtertype,'Manual');
+        output = cell(1,length(d));
+        for i = 1:length(d)
+            freqi = option.freq;
+            j = 1;
+            while j <= length(freqi)
+                if not(isinf(freqi(j))) && freqi(j)>f{i}/2
+                    if j == length(freqi)
+                        freqi(j) = Inf;
+                    else
+                        freqi(j) = [];
+                        j = j-1;
+                    end
+                end
+                j = j+1;
+            end
+            output{i} = cell(1,length(d{i}));
+            step = option.overlap;
+            for j = 1:length(freqi)-step
+                if isinf(freqi(j))
+                    [z{j},p{j},k{j}] = ellip(option.filterorder,3,40,...
+                                    freqi(j+step)/f{i}*2);
+                elseif isinf(freqi(j+step))
+                    [z{j},p{j},k{j}] = ellip(option.filterorder,3,40,...
+                                    freqi(j)/f{i}*2,'high');
+                else
+                    [z{j},p{j},k{j}] = ellip(option.filterorder,3,40,...
+                                    freqi([j j+step])/f{i}*2);
+                end
+            end
+            for j = 1:length(z)
+                [sos,g] = zp2sos(z{j},p{j},k{j});
+                Hd(j) = dfilt.df2tsos(sos,g);
+                Hd(j).PersistentMemory = true;
+                for h = 1:length(d{i})
+                    output{i}{h}(:,:,j) = filter(Hd(j),d{i}{h});
+                end
+            end
+            %fvtool(Hd)
+            nch{i} = 1:length(freqi)-step;
+        end
+        b = set(x,'Data',output,'Channels',nch);
+    end
+ end
+
+    
+function [output tmp] = ERBfilterbank(x, fcoefs, chans, tmp)
+% The following is based on the source code from Auditory Toolbox 
+% (A part that I could not call directly from MIRtoolbox, and that I
+% generalize to chunk decomposition)
+
+% (Malcolm Slaney, August 1993, (c) 1998 Interval Research Corporation)
+
+% Process an input waveform with a gammatone filter bank.
+% The fcoefs parameter, which completely specifies the Gammatone filterbank,
+% should be designed with the MakeERBFilters function.
+
+A0  = fcoefs(:,1);
+A11 = fcoefs(:,2);
+A12 = fcoefs(:,3);
+A13 = fcoefs(:,4);
+A14 = fcoefs(:,5);
+A2  = fcoefs(:,6);
+B0  = fcoefs(:,7);
+B1  = fcoefs(:,8);
+B2  = fcoefs(:,9);
+gain= fcoefs(:,10);	
+lc = length(chans);
+output = zeros(size(x,1),size(x,2),lc);
+if isempty(tmp)
+    emptytmp = 1;
+else
+    emptytmp = 0;
+end
+for i = 1:lc
+    chan = length(gain)-chans(i)+1; % Revert the channels order
+    aa1 = [A0(chan)/gain(chan) A11(chan)/gain(chan)  A2(chan)/gain(chan)];
+    bb1 = [B0(chan) B1(chan) B2(chan)];
+    aa2 = [A0(chan) A12(chan) A2(chan)];
+    bb2 = [B0(chan) B1(chan) B2(chan)];
+    aa3 = [A0(chan) A12(chan) A2(chan)];
+    bb3 = [B0(chan) B1(chan) B2(chan)];
+    aa4 = [A0(chan) A13(chan) A2(chan)];
+    bb4 = [B0(chan) B1(chan) B2(chan)];
+    if emptytmp
+        [y1 tmp(:,:,i,1)] = filter(aa1,bb1,x);
+        [y2 tmp(:,:,i,2)] = filter(aa2,bb2,y1);
+        [y3 tmp(:,:,i,3)] = filter(aa3,bb3,y2);
+        [y4 tmp(:,:,i,4)] = filter(aa4,bb4,y3);
+    else
+        [y1 tmp(:,:,i,1)] = filter(aa1,bb1,x,tmp(:,:,i,1));
+        [y2 tmp(:,:,i,2)] = filter(aa2,bb2,y1,tmp(:,:,i,2));
+        [y3 tmp(:,:,i,3)] = filter(aa3,bb3,y2,tmp(:,:,i,3));
+        [y4 tmp(:,:,i,4)] = filter(aa4,bb4,y3,tmp(:,:,i,4));
+    end
+    output(:,:,i) = y4;
+end
+
+
+function [y orig] = eachchunk(orig,option,missing)
+y = mirfilterbank(orig,option);
+
+
+function y = combinechunk(old,new)
+do = get(old,'Data');
+to = get(old,'Time');
+dn = get(new,'Data');
+tn = get(new,'Time');
+y = set(old,'Data',{{[do{1}{1};dn{1}{1}]}},...
+            'Time',{{[to{1}{1};tn{1}{1}]}});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirflatness.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function varargout = mirflatness(orig,varargin)
+%   f = mirflatness(x) calculates the flatness of x, which can be either:
+%       - a spectrum (spectral flatness),
+%       - an envelope (temporal flatness), or
+%       - any histogram.
+
+
+varargout = mirfunction(@mirflatness,orig,varargin,nargout,struct,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirenvelope') || isamir(x,'mirhisto'))
+    x = mirspectrum(x);
+end
+type = 'mirscalar';
+
+
+function f = main(x,option,postoption)
+if iscell(x)
+    x = x{1};
+end
+m = get(x,'Data');
+y = cell(1,length(m));
+for h = 1:length(m)
+    if not(iscell(m{h})) % for histograms
+        m{h} = {m{h}'};
+    end
+    y{h} = cell(1,length(m{h}));
+    for i = 1:length(m{h})
+        mm = m{h}{i};
+        nl = size(mm,1);
+        ari = mean(mm);
+        geo = (prod(mm.^(1/nl)));
+        divideByZero = warning('query','MATLAB:divideByZero');
+        logZero = warning('query','MATLAB:log:logOfZero');
+        warning('off','MATLAB:divideByZero');
+        warning('off','MATLAB:log:logOfZero');
+        y{h}{i} = ...10*log10(
+            geo./ari;%);
+        warning(divideByZero.state,'MATLAB:divideByZero');
+        warning(logZero.state,'MATLAB:log:logOfZero');
+        nany = find(isinf(y{h}{i}));
+        y{h}{i}(nany) = zeros(size(nany));
+    end
+end
+if isa(x,'mirenvelope')
+    t = 'Temporal flatness';
+elseif isa(x,'mirspectrum')
+    t = 'Spectral flatness';
+else
+    t = ['Flatness of ',get(x,'Title')];
+end
+f = mirscalar(x,'Data',y,'Title',t,'Unit','');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirfluctuation.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+function varargout = mirfluctuation(orig,varargin)
+%   f = mirfluctuation(x) calculates the fluctuation strength, indicating the
+%       rhythmic periodicities along the different channels.
+%   Optional arguments:
+%       mirfluctuation(...,'MinRes',mr) specifies the minimal frequency
+%           resolution of the resulting spectral decomposition, in Hz.
+%               Default: mr = .01 Hz
+%       mirfluctuation(...,'Summary') returns the summary of the fluctuation,
+%           i.e., the summation along the critical bands.
+%
+% E. Pampalk, A. Rauber, D. Merkl, "Content-based Organization and 
+% Visualization of Music Archives", 
+
+        sum.key = 'Summary';
+        sum.type = 'Boolean';
+        sum.default = 0;
+    option.sum = sum;
+
+        mr.key = 'MinRes';
+        mr.type = 'Integer';
+        mr.default = .01;
+    option.mr = mr;
+
+specif.option = option;
+     
+varargout = mirfunction(@mirfluctuation,orig,varargin,nargout,specif,@init,@main);
+
+
+function [f type] = init(x,option)
+if iscell(x)
+    x = x{1};
+end
+if isamir(x,'miraudio') && not(isframed(x))
+    x = mirframe(x,.023,.5);
+end
+m = mirspectrum(x,'Power','Terhardt','Bark','dB','Mask');
+f = mirspectrum(m,'AlongBands','Max',10,'Window',0,...
+                  'Resonance','Fluctuation','MinRes',option.mr);
+if option.sum
+    f = mirsummary(f);
+end
+type = 'mirspectrum';
+
+
+function f = main(f,option,postoption)
+f = set(f,'Title','Fluctuation');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirflux.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,254 @@
+function varargout = mirflux(orig,varargin)
+%   f = mirflux(x) measures distance between successive frames.
+%   First argument:
+%       If x is a spectrum, this corresponds to spectral flux.
+%       But the flux of any other data can be computed as well.
+%       If x is an audio file or audio signal, the spectral flux is
+%           computed by default.
+%   Optional arguments:
+%       f = mirflux(x,'Frame',...) specifies the frame parameters, if x is
+%           not already decomposed into frames. Default values are frame 
+%           length of .2 seconds and hop factor of 1.3.
+%       f = mirflux(x,'Dist',d) specifies the distance between 
+%           successive  frames:                 (IF 'COMPLEX': DISTANCE = 'CITY' ALWAYS)
+%           d = 'Euclidian': Euclidian distance (Default)
+%           d = 'City': City-block distance
+%           d = 'Cosine': Cosine distance (or normalized correlation)
+%       f = mirflux(...,'Inc'): Only positive difference between frames are
+%           summed, in order to focus on increase of energy solely.
+%       f = mirflux(...,'Complex'), for spectral flux, combines use of
+%           energy and phase information (Bello et al, 2004).
+%       f = mirflux(...,'Halfwave'): performs a half-wave  rectification on
+%           the result.
+%       f = mirflux(...,'Median',l,C): removes small spurious peaks by
+%           subtracting to the result its median filtering. The median
+%           filter computes the point-wise median inside a window of length
+%           l (in seconds), that  includes a same number of previous and
+%           next samples. C is a scaling factor whose purpose is to
+%           artificially rise the curve slightly above the steady state of
+%           the signal. If no parameters are given, the default values are:
+%           l = 0.2 s. and C = 1.3
+%       f = mirflux(...,'Median',l,C,'Halfwave'): The scaled median
+%           filtering is designed to be succeeded by the  half-wave 
+%           rectification process in order to select peaks above the
+%           dynamic threshold calculated with the help of the median
+%           filter. The resulting signal is called "detection function"
+%           (Alonso, David, Richard, 2004). To ensure accurate detection,
+%           the length l of the median filter must be longer than the
+%           average width of the peaks of the detection function.
+%
+%   (Bello et al, 2004) Juan P. Bello, Chris Duxbury, Mike Davies, and Mark
+%   Sandler, On the Use of Phase and Energy for Musical Onset Detection in
+%   the Complex Domain, IEEE SIGNAL PROCESSING LETTERS, VOL. 11, NO. 6,
+%   JUNE 2004
+
+        dist.key = 'Dist';
+        dist.type = 'String';
+        dist.choice = {'Euclidian','City','Cosine'};  %PDIST???? (euclidean)
+        dist.default = 'Euclidian';
+    option.dist = dist;
+    
+        inc.key = 'Inc';
+        inc.type = 'Boolean';
+        inc.default = 0;
+    option.inc = inc;
+    
+        complex.key = 'Complex';
+        complex.type = 'Boolean';
+        complex.default = 0;
+    option.complex = complex;
+    
+        h.key = 'Halfwave';
+        h.type = 'Boolean';
+        h.default = 0;
+        h.when = 'After';
+    option.h = h;
+    
+        median.key = 'Median';
+        median.type = 'Integer';
+        median.number = 2;
+        median.default = [0 0];
+        median.keydefault = [.2 1.3];
+        median.when = 'After';
+    option.median = median;
+    
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [.05 .5];
+    option.frame = frame;
+    
+specif.option = option;
+     
+varargout = mirfunction(@mirflux,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if isamir(x,'miraudio') 
+    if isframed(x)
+        x = mirspectrum(x);
+    else
+        x = mirspectrum(x,'Frame',option.frame.length.val,option.frame.length.unit,...
+                                  option.frame.hop.val,option.frame.hop.unit);
+    end
+end
+if isa(x,'mirdesign')
+    x = set(x,'Overlap',1);
+end
+type = 'mirscalar';
+
+
+function f = main(s,option,postoption)
+if iscell(s)
+    s = s{1};
+end
+t = get(s,'Title');
+if isa(s,'mirscalar') && ...
+        (strcmp(t,'Harmonic Change Detection Function') || ...
+         (length(t)>4 && strcmp(t(end-3:end),'flux')) || ...
+         (length(t)>5 && strcmp(t(end-4:end-1),'flux')))
+    if not(isempty(postoption))
+        f = modif(s,postoption);
+    end
+else
+    if isa(s,'mirspectrum')
+        t = 'Spectral';
+    end
+    m = get(s,'Data'); 
+    if option.complex
+        if not(isa(s,'mirspectrum'))
+            error('ERROR IN MIRFLUX: ''Complex'' option only defined for spectral flux.');
+        end
+        ph = get(s,'Phase');
+    end
+    param.complex = option.complex;
+    param.inc = option.inc;
+    fp = get(s,'FramePos');
+    if strcmp(t,'Tonal centroid')
+        t = 'Harmonic Change Detection Function';
+    else
+        t = [t,' flux'];
+    end
+    disp(['Computing ' t '...'])
+    ff = cell(1,length(m));
+    newsr = cell(1,length(m));
+    dist = str2func(option.dist);
+    %[tmp s] = gettmp(s); %get(s,'Tmp');
+    for h = 1:length(m)
+        ff{h} = cell(1,length(m{h}));
+        if not(iscell(m{h}))
+            m{h} = {m{h}};
+        end
+        for i = 1:length(m{h})
+            mi = m{h}{i};
+            if size(mi,3) > 1 && size(mi,1) == 1
+                mi = reshape(mi,size(mi,2),size(mi,3))';
+            end
+            if option.complex
+                phi = ph{h}{i};
+            end
+            fpi = fp{h}{i};
+            %if 0 %not(isempty(tmp)) && isstruct(tmp) && isfield(tmp,'mi')
+            %    mi = [tmp.mi mi];
+            %    fpi = [tmp.fpi fpi];
+            %end
+            nc = size(mi,2);
+            np = size(mi,3);
+            if nc == 1
+                warning('WARNING IN MIRFLUX: Flux can only be computed on signal decomposed into frames.');
+                ff{h}{i} = NaN(1,1,np);
+            else
+                if option.complex
+                    fl = zeros(1,nc-2,np);
+                    for k = 1:np
+                        d = diff(phi(:,:,k),2,2);
+                        d = d/(2*pi) - round(d/(2*pi));
+                        g = sqrt(mi(:,3:end,k).^2 + mi(:,2:(end-1),k).^2 ...
+                                                  - 2.*mi(:,3:end,k)...
+                                                     .*mi(:,2:(end-1),k)...
+                                                     .*cos(d));
+                        fl(1,:,k) = sum(g);
+                    end
+                    fp{h}{i} = fpi(:,3:end);
+                else
+                    fl = zeros(1,nc-1,np);
+                    for k = 1:np
+                        for j = 1:nc-1
+                            fl(1,j,k) = dist(mi(:,j,k),mi(:,j+1,k),option.inc);
+                        end
+                    end
+                    fp{h}{i} = fpi(:,2:end);
+                end
+                ff{h}{i} = fl;
+                %tmp.mi = mi(:,end,:);
+                %tmp.fpi = fpi(:,end,:);
+            end
+        end
+        %tmp = [];
+        if size(fpi,2)<2
+            newsr{h} = 0;
+        else
+            newsr{h} = 1/(fpi(1,2)-fpi(1,1));
+        end
+    end
+    f = mirscalar(s,'Data',ff,'FramePos',fp,'Sampling',newsr,...
+                        'Title',t,'Parameter',param); %,'Tmp',tmp);
+    %f = settmp(f,tmp);
+    if not(isempty(postoption))
+        f = modif(f,postoption);
+    end
+end
+
+
+function f = modif(f,option)
+fl = get(f,'Data'); 
+r = get(f,'Sampling');
+for h = 1:length(fl)
+    for i = 1:length(fl{h})
+        fli = fl{h}{i};
+        nc = size(fli,2);
+        np = size(fli,3);
+        if option.median(1)
+            ffi = zeros(1,nc,np);
+            lr = round(option.median(1)*r{i});
+            for k = 1:np
+                for j = 1:nc
+                    ffi(:,j,k) = fli(:,j,k) - ...
+                        option.median(2) * median(fli(:,max(1,j-lr):min(nc-1,j+lr),k));
+                end
+            end
+            fli = ffi;
+        end
+        if option.h
+            fli = hwr(fli);
+        end
+        fl{h}{i} = fli;
+    end
+end
+f = set(f,'Data',fl);
+
+
+function y = Euclidian(mi,mj,inc)
+if inc
+    y = sqrt(sum(max(0,(mj-mi)).^2));
+else
+    y = sqrt(sum((mj-mi).^2));
+end
+
+
+function y = City(mi,mj,inc)
+if inc
+    y = sum(max(0,(mj-mi)));
+else
+    y = sum(abs(mj-mi));
+end
+
+
+function d = Cosine(r,s,inc)
+nr = sqrt(r'*r);
+ns = sqrt(s'*s);
+if or(nr == 0, ns == 0);
+    d = 1;
+else
+    d = 1 - r'*s/nr/ns;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirframe.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,241 @@
+function [f x] = mirframe(x,varargin)
+%   f = mirframe(x) creates the frame decomposition of the audio signal x.
+%       (x can be a file name as well.)
+%   Optional arguments:
+%       mirframe(x,'Length',w,wu):
+%           w is the length of the window in seconds (default: .05 seconds)
+%           u is the unit, either 
+%               's' (seconds, default unit) 
+%            or 'sp' (number of samples)
+%       mirframe(x,'Hop',h,hu):
+%           h is the hop factor, or distance between successive frames
+%               (default: half overlapping: each frame begins at the middle
+%                   of the previous frame)
+%           u is the unit, either 
+%               '/1' (ratio with respect to the frame length, default unit)
+%               '%' (ratio as percentage)
+%               's' (seconds)
+%               'sp' (number of samples)
+%            or 'Hz' (hertz), i.e., number of frames per second: the
+%                   exactness of the frame rate is ensured and may cause a
+%                   slight fluctuation of the elementary hop distances.
+%       These arguments can also be written as follows:
+%           mirframe(x,w,wu,h,hu)
+%               (where some of these parameters can be omitted).
+
+if isempty(x)
+    f = {};
+    return
+end
+if iscell(x)
+    x = x{1};
+end
+if nargin == 0
+    f = miraudio;
+elseif isa(x,'mirdesign')
+    if not(get(x,'Eval'))
+        % During bottom-up construction of the general design
+        
+        para = scanargin(varargin);
+        type = get(x,'Type');
+        f = mirdesign(@mirframe,x,para,{},struct,type);
+        
+        fl = get(x,'FrameLength');
+        fh = get(x,'FrameHop');
+        flu = get(x,'FrameLengthUnit');
+        fhu = get(x,'FrameHopUnit');
+        if fl
+            f = set(f,'FrameLength',fl,'FrameLengthUnit',flu,...
+                      'FrameHop',fh,'FrameHopUnit',fhu);
+        else
+            f = set(f,'FrameLength',para.wlength.val,...
+                      'FrameLengthUnit',para.wlength.unit,...
+                      'FrameHop',para.hop.val,...
+                      'FrameHopUnit',para.hop.unit);
+        end
+        f = set(f,'FrameEval',1,...
+                  'SeparateChannels',get(x,'SeparateChannels'));
+        if not(isamir(x,'miraudio'))
+            f = set(f,'NoChunk',1);
+        end
+    else
+        % During top-down evaluation initiation
+        
+        if isstruct(varargin{1}) && isfield(varargin{1},'struct')
+            tmp = varargin{1}.struct;
+            x = set(x,'Struct',tmp);
+            varargin{1} = rmfield(varargin{1},'struct');
+        end
+        e = evaleach(x);
+        if iscell(e)
+            e = e{1};
+        end
+        if isempty(mirgetdata(e))
+            f = e;
+        else
+            f = mirframe(e,varargin{:});
+        end
+    end
+elseif isa(x,'mirdata')
+    if isframed(x)
+        warning('WARNING IN MIRFRAME: The input data is already decomposed into frames. No more frame decomposition.');
+        f = x;
+    else
+        x = purgedata(x);
+        dx = get(x,'Data');
+        if isa(x,'mirtemporal')
+            dt = get(x,'Time');
+        else
+            dt = get(x,'FramePos');
+        end
+        sf = get(x,'Sampling');
+        para = scanargin(varargin);
+        dx2 = cell(1,length(dx));   % magnitude in framed structure 
+        dt2 = cell(1,length(dx));   % time positions in framed structure
+        fp = cell(1,length(dx));    % frame positions
+        for k = 1:length(dx)    % For each audio file, ...
+            dxk = dx{k};
+            dtk = dt{k};
+            if strcmpi(para.wlength.unit,'s')
+                l = para.wlength.val*sf{k};
+            elseif strcmpi(para.wlength.unit,'sp')
+                l = para.wlength.val;
+            end
+            if strcmpi(para.hop.unit,'/1')
+                h = para.hop.val*l;
+            elseif strcmpi(para.hop.unit,'%')
+                h = para.hop.val*l*.01;
+            elseif strcmpi(para.hop.unit,'s')
+                h = para.hop.val*sf{k};
+            elseif strcmpi(para.hop.unit,'sp')
+                h = para.hop.val;
+            elseif strcmpi(para.hop.unit,'Hz')
+                h = sf{k}/para.hop.val;
+            end
+            l = floor(l);
+            dx2k = cell(1,length(dxk));
+            dt2k = cell(1,length(dxk));
+            fpk = cell(1,length(dxk));
+            for j = 1:length(dxk)   % For each segment, ...
+                dxj = dxk{j};
+                dtj = dtk{j};
+                if not(isa(x,'mirtemporal'))
+                    dxj = dxj';
+                    dtj = dtj(1,:)';
+                end
+
+                n = floor((size(dxj,1)-l)/h)+1; % Number of frames
+                dx2j = zeros(l,n,size(dxj,3));
+                dt2j = zeros(l,n);
+                fpj = zeros(2,n);
+                if n < 1
+                    disp('Frame length longer than total sequence size. No frame decomposition.');
+                    dx2j = dxj(:,1,:);
+                    dt2j = dtj;
+                    fpj = [dtj(1) ; dtj(end)];
+                else
+                    for i = 1:n % For each frame, ...
+                        st = floor((i-1)*h+1);
+                        stend = st+l-1;
+                        dx2j(:,i,:) = dxj(st:stend,1,:);
+                        dt2j(:,i) = dtj(st:stend);
+                        fpj(:,i) = [dtj(st) dtj(stend)];
+                    end
+                end
+                dx2k{j} = dx2j;
+                dt2k{j} = dt2j;
+                fpk{j} = fpj;
+            end
+            dx2{k} = dx2k;
+            dt2{k} = dt2k;
+            fp{k} = fpk;
+        end
+        if isa(x,'mirtemporal')
+            f = set(x,'Time',dt2,'Data',dx2,'FramePos',fp);
+        else
+            f = mirtemporal([],'Time',dt2,'Data',dx2,'FramePos',fp,...
+                    'Sampling',get(x,'Sampling'),'Name',get(x,'Name'),...
+                    'Label',get(x,'Label'),'Channels',get(x,'Channels'),...
+                    'Centered',0,'Title',get(x,'Title'));
+        end
+    end
+else
+    f = mirframe(miraudio(x),varargin{:});
+end
+
+
+function para = scanargin(v)
+if not(isempty(v)) && isstruct(v{1})
+    if length(v) == 1
+        para = v{1};
+    else
+        para.wlength = v{1};
+        para.hop = v{2};
+    end
+    return
+end
+para.wlength.val = 0.05;
+para.wlength.unit = 's';
+para.hop.val = 0.5;
+para.hop.unit = '/1';
+nv = length(v);
+i = 1;
+j = 1;
+while i <= nv
+    arg = v{i};
+    if strcmpi(arg,'WinLength') || strcmpi(arg,'Length')
+        if i < nv && isnumeric(v{i+1})
+            i = i+1;
+            j = 0;
+            para.wlength.val = v{i};
+        else
+            error('ERROR IN MIRFRAME: Incorrect use of Length option. See help mirframe.'); 
+        end
+        if i < nv && ischar(v{i+1}) && ...
+                (strcmpi(v{i+1},'s') || strcmpi(v{i+1},'sp'))
+            i = i+1;
+            para.wlength.unit = v{i};
+        end
+    elseif strcmpi(arg,'Hop')
+        if i < nv && isnumeric(v{i+1})
+            i = i+1;
+            j = 0;
+            para.hop.val = v{i};
+        else
+            error('ERROR IN MIRFRAME: Incorrect use of Hop option. See help mirframe.'); 
+        end
+        if i < nv && ischar(v{i+1}) && ...
+                (strcmpi(v{i+1},'%') || strcmpi(v{i+1},'/1') || ...
+                 strcmpi(v{i+1},'s') || strcmpi(v{i+1},'sp') || ...
+                 strcmpi(v{i+1},'Hz'))
+            i = i+1;
+            para.hop.unit = v{i};
+        end
+    elseif isnumeric(arg)
+        switch j
+            case 1
+                j = 2;
+                para.wlength.val = arg;
+                if i < nv && ischar(v{i+1}) && ...
+                        (strcmpi(v{i+1},'s') || strcmpi(v{i+1},'sp'))
+                    i = i+1;
+                    para.wlength.unit = v{i};
+                end
+            case 2
+                j = 3;
+                para.hop.val = arg;
+                if i < nv && ischar(v{i+1}) && ...
+                        (strcmpi(v{i+1},'%') || strcmpi(v{i+1},'/1') || ...
+                         strcmpi(v{i+1},'s') || strcmpi(v{i+1},'sp') || ...
+                         strcmpi(v{i+1},'Hz'))
+                    i = i+1;
+                    para.hop.unit = v{i};
+                end
+            otherwise
+                error('ERROR IN MIRFRAME: Syntax error. See help mirframe.');
+        end
+    elseif not(isempty(arg))
+        error('ERROR IN MIRFRAME: Syntax error. See help mirframe.');
+    end
+    i = i+1;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirframenow.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function x = mirframenow(x,option)
+
+if isfield(option,'frame') && ...
+        isstruct(option.frame) && option.frame.length.val
+    x = mirframe(x,...
+        option.frame.length.val,option.frame.length.unit,...
+        option.frame.hop.val,option.frame.hop.unit);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirfunction.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,207 @@
+function o = mirfunction(method,x,varg,nout,specif,init,main)
+% Meta function called by all MIRtoolbox functions.
+% Integrates the function into the general flowchart
+%   and eventually launches the "mireval" evaluation process.
+% Here are the successive steps in the following code:
+%   - If the input is an audio filename, instantiates a new design flowchart.
+%   - Reads all the options specified by the user.
+%   - Performs the 'init' part of the MIRtoolbox function:
+%       - If the input is a design flowchart,
+%           add the 'init' part in the flowchart.
+%       - If the input is some MIRtoolbox data,
+%           execute the 'init' part on that data.
+%   - Performs the 'main' part of the MIRtoolbox function.
+
+if isempty(x)
+    o = {{},{},{}};
+    return
+end
+
+if ischar(x) % The input is a file name.
+    % Starting point of the design process
+    design_init = 1;
+    filename = x;
+    if strcmpi(func2str(method),'miraudio')
+        postoption = {};
+    else
+        postoption.mono = 1;
+    end
+    orig = mirdesign(@miraudio,'Design',{varg},postoption,struct,'miraudio'); 
+    % Implicitly, the audio file needs to be loaded first.
+elseif isnumeric(x)
+    mirerror(func2str(method),'The input should be a file name or a MIRtoolbox object.');
+else
+    design_init = 0;
+    orig = x;
+end
+
+% Reads all the options specified by the user.
+[orig during after] = miroptions(method,orig,specif,varg);
+
+% Performs the 'init' part of the MIRtoolbox function.
+if isa(orig,'mirdesign')
+    if not(get(orig,'Eval'))
+        % Top-down construction of the general design flowchart
+        
+        if isstruct(during) && isfield(during,'frame') && ...
+                isstruct(during.frame) && during.frame.auto
+            % 'Frame' option: 
+            % Automatic insertion of the mirframe step in the design
+            orig = mirframe(orig,during.frame.length.val,...
+                                 during.frame.length.unit,...
+                                 during.frame.hop.val,...
+                                 during.frame.hop.unit);   
+        end
+        
+        % The 'init' part of the function can be integrated into the design
+        % flowchart. This leads to a top-down construction of the
+        % flowchart.
+        % Automatic development of the implicit prerequisites,
+        % with management of the data types throughout the design process.
+        [orig type] = init(orig,during);
+                
+        o = mirdesign(method,orig,during,after,specif,type);
+                    
+        if design_init && not(strcmpi(filename,'Design'))
+            % Now the design flowchart has been completed created.
+            % If the 'Design' keyword not used,
+            % the function is immediately evaluated
+            o = mireval(o,filename,nout);
+        else
+            o = returndesign(o,nout);
+        end
+        if not(iscell(o))
+            o = {o};
+        end
+        return
+    else
+        % During the top-down traversal of the flowchart (evaleach), at the
+        % beginning of the evaluation process.
+        
+        if not(isempty(get(orig,'TmpFile'))) && get(orig,'ChunkDecomposed')
+            orig = evaleach(orig);
+            if iscell(orig)
+                orig = orig{1};
+            end
+            x = orig;
+        else
+            [orig x] = evaleach(orig);
+        end
+        
+        if not(isequal(method,@nthoutput))
+            if iscell(orig)
+                orig = orig{1};
+            end
+            if isempty(get(orig,'InterChunk'))
+                orig = set(orig,'InterChunk',get(x,'InterChunk'));
+            end
+        end
+    end
+else
+    design = 0;
+    if iscell(orig)
+        i = 0;
+        while i<length(orig) && not(design)
+            i = i+1;
+            if isa(orig{i},'mirdesign')
+                design = i;
+            end
+        end
+    end
+    if design
+        % For function with multiple inputs
+        if design == 1 && not(get(orig{1},'Eval'))
+            % Progressive construction of the general design
+            [orig type] = init(orig,during);
+            o = mirdesign(method,orig,during,after,specif,type);
+            o = set(o,'Size',get(orig{1},'Size'));
+            o = returndesign(o,nout);
+            return
+        else
+            % Evaluation of the design.
+            % First top-down initiation (evaleach), then bottom-up process.
+            for io = 1:length(orig)
+                if isa(orig{io},'mirdesign')
+                    o = evaleach(orig{io});
+                    if iscell(o)
+                        o = o{:};
+                    end
+                    orig{io} = o;
+                end
+            end
+        end
+    elseif not(isempty(init)) && not(isempty(during))
+        if isstruct(during) && isfield(during,'frame') && ...
+                isstruct(during.frame) && during.frame.auto
+            orig = mirframe(orig,during.frame.length,during.frame.hop);        
+        end
+        % The input of the function is not a design flowchart, which
+        % the 'init' part of the function could be integrated into.
+            % (cf. previous call of 'init' in this script). 
+        % For that reason, the 'init' part of the function needs to be
+        % evaluated now.
+        orig = init(orig,during);
+    end
+end
+
+% Performs the 'main' part of the MIRtoolbox function.
+if not(iscell(orig) && not(ischar(orig{1}))) && ...
+        not(isa(orig,'mirdesign') || isa(orig,'mirdata'))
+    o = {orig};
+    return
+end
+filenamearg = orig;
+if iscell(filenamearg) && not(ischar(filenamearg{1}))
+    filenamearg = filenamearg{1};
+end
+if iscell(filenamearg) && not(ischar(filenamearg{1}))
+    filenamearg = filenamearg{1};
+end
+filename = get(filenamearg,'Name');
+if not(isempty(during)) && mirverbose
+%     if length(filename) == 1
+%         disp(['Computing ',func2str(method),' related to ',filename{1},'...'])
+%     else
+%         disp(['Computing ',func2str(method),' for all audio files ...'])
+%     end
+end
+if iscell(x)
+    x1 = x{1};
+else
+    x1 = x;
+end
+if not(iscell(orig) || isnumeric(x))
+    orig = set(orig,'Index',get(x1,'Index'));
+end
+if iscell(orig)
+    o = main(orig,during,after);
+else
+    d = get(orig,'Data');
+    if isamir(orig,'miraudio') && ...
+        length(d) == 1 && length(d{1}) == 1 && isempty(d{1}{1})
+        % To solve a problem when MP3read returns empty chunk.
+        % Warning: it should not be a cell, because for instance nthoutput can have first input empty... 
+        o = orig;
+    else
+        o = main(orig,during,after);
+    end
+end
+if not(iscell(o) && length(o)>1) || (isa(x,'mirdesign') && get(x,'Eval'))
+    o = {o x};
+elseif iscell(x) && isa(x{1},'mirdesign') && get(x{1},'Eval')
+    o = {o x{1}};
+elseif not(isempty(varg)) && isstruct(varg{1}) ...
+            && not(iscell(o) && iscell(o{1}))
+    % When the function was called by mireval, the output should be packed
+    % into one single cell array (in order to be send back to calling
+    % routines).
+    o = {o};
+end
+
+
+function o = returndesign(i,nout)
+o = cell(1,nout);
+o{1} = i;
+for k = 2:nout
+    o{k} = nthoutput(i,k);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirgetdata.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+function [d,d2] = mirgetdata(x,varargin)
+%   d = mirgetdata(x) return the data contained in the object x in a
+%       structure that can be used for further computation outside MIRtoolbox.
+%       If x corresponds to one non-segmented audio sequence, the result is 
+%           returned as a matrix. The columns of the matrix usually 
+%           correspond to the successive frames of the audio signal. The 
+%           third dimension of the matrix corresponds to the different
+%           channels of a filterbank.
+%       If x is a keystrength curve, the fourth dimension distinguishes
+%           between major and minor keys. i.e. d(:,:,:,1) is the
+%           keystrength for the major keys, and d(:,:,:,2) is the
+%           keystrength for the minor keys.
+%       If x is a key estimation, two output are returned: the first one
+%           gives the keys (from 1 to 12) and the second one indicates the
+%           modes (1 for major, 2 for minor).
+%
+%       If x corresponds to a set of audio sequences, and if each sequence
+%           has same number of frames, the corresponding resulting matrices 
+%           are concatenated columnwise one after the other. If the number
+%           of raws of the elementary matrices varies, the missing values
+%           are replaced by NaN in the final matrix. On the contrary, if 
+%           the number of columns (i.e., frames) differs, then the result
+%           remains a cell array of matrices.
+%       Idem if x corresponds to one or several segmented audio
+%           sequence(s).
+%
+%   If x is the result of a peak detection,
+%       [px,py] = getdata(x) return the position of the peaks (px) and the
+%           value corresponding to these peaks (py), in the units
+%           predefined for this data.
+
+if isempty(x)
+    d = {};
+    d2 = {};
+    return
+end
+
+if isstruct(x)
+    fields = fieldnames(x);
+    for f = 1:length(fields)
+        d.(fields{f}) = mirgetdata(x.(fields{f}));
+    end
+    d2 = {};
+    return
+end
+
+if iscell(x)
+    x = x{1};
+end
+v = get(x,'Data');
+if isa(x,'mirscalar')
+    m = get(x,'Mode');
+end
+d2 = {};
+
+if isa(x,'mirclassify')
+    d = get(x,'Data');
+    return
+end
+
+if isa(x,'mirsimatrix')
+    pt = [];
+else
+    pt = get(x,'PeakPrecisePos');
+end
+pv = get(x,'PeakPreciseVal');
+if not(isempty(pt)) && not(isempty(pt{1})) && not(isempty(pt{1}{1}))
+    d = uncell(pt);
+    d2 = uncell(pv);
+    if not(isempty(d))
+        return
+    end
+end
+
+if isa(x,'mirsimatrix')
+    pt = [];
+else
+    pt = get(x,'PeakPosUnit');
+end
+pv = get(x,'PeakVal');
+if not(isempty(pt)) && not(isempty(pt{1})) && not(isempty(pt{1}{1}))
+    d = uncell(pt);
+    d2 = uncell(pv);
+    if not(isempty(d))
+        return
+    end
+end
+
+d = uncell(v,isa(x,'mirscalar'));
+if iscell(d) && not(isempty(d)) && nargin == 1
+    disp('The result is an array of cell.')
+    disp(['If d is the name of the output variable, ',...
+        'the successive cells can be accessed by typing d{1}, d{2}, etc.']);
+end
+if exist('m')==1 && not(isempty(m)) && not(isempty(m{1}))
+    d2 = uncell(m);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirgetrange.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+function r = mirgetrange(x)
+
+if isempty(x)
+    r = {};
+    return
+end
+
+if isstruct(x)
+    fields = fieldnames(x);
+    for f = 1:length(fields)
+        d.(fields{f}) = mirgetrange(x.(fields{f}));
+    end
+    return
+end
+
+if iscell(x)
+    x = x{1};
+end
+v = get(x,'Data');
+if isa(x,'mirscalar')
+    m = get(x,'Mode');
+end
+
+if isa(x,'mirclassify')
+    d = get(x,'Data');
+    return
+end
+
+if isa(x,'miremotion')
+    return
+end
+
+if isa(x,'mirsimatrix')
+    return
+end
+
+pv = get(x,'PeakVal');
+if not(isempty(pv)) && not(isempty(pv{1})) && not(isempty(pv{1}{1}))
+    d = uncell(pv);
+else
+    d = uncell(v,isa(x,'mirscalar'));
+end
+
+if not(iscell(d))
+    d = {d};
+end
+r = [];
+for i = 1:length(d)
+    r = [r;d{i}(:)];
+end
+r = sort(r);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirhcdf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function varargout = mirhcdf(orig,varargin)
+%   df = mirhcdf(x) calculates the Harmonic Change Detection Function
+%       related to x.
+%
+% C. A. Harte and M. B. Sandler, Detecting harmonic change in musical
+%   audio, in Proceedings of Audio and Music Computing for Multimedia
+%   Workshop, Santa Barbara, CA, 2006. 
+
+specif.defaultframelength = .743;
+specif.defaultframehop = .1;
+varargout = mirfunction(@mirhcdf,orig,varargin,nargout,specif,@init,@main);
+
+
+function [df type] = init(orig,option)
+if isamir(orig,'mirscalar')
+    df = orig;
+else
+    if isframed(orig)
+        tc = mirtonalcentroid(orig);
+    else
+        tc = mirtonalcentroid(orig,'Frame');
+    end
+    df = mirflux(tc);
+end
+type = 'mirscalar';
+
+
+function df = main(df,option,postoption)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirinharmonicity.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,120 @@
+function varargout = mirinharmonicity(orig,varargin)
+%   ih = mirinharmonicity(x) estimates the inharmonicity of x, i.e., the
+%       amount of partials that are not multiples of the fundamental
+%       frequency.
+%       x can be either an audio file, a miraudio or a mirspectrum object.
+%   WARNING: This function presupposes that there is only one fundamental
+%       frequency.
+%   Optional argument:
+%       mirinharmonicity(...,'f0',f) bases the computation of the
+%           inharmonicity on the fundamental frequency indicated by f.
+%           Default value: f = mirpitch(...,'Mono')
+%   [ih,s] = mirinharmonicity(x) also displays the spectrum used for the
+%       computation of the inharmonicity.
+%   [ih,s,p] = mirinharmonicity(x) also displays the result of the
+%       estimation of the fundamental frequency.
+
+        f0.key = 'f0';
+        f0.default = [];
+    option.f0 = f0;
+    
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [0 0];
+        frame.keydefault = [.1 .125];
+    option.frame = frame;
+        
+specif.option = option;
+     
+varargout = mirfunction(@mirinharmonicity,orig,varargin,nargout,specif,@init,@main);
+
+
+function [i type] = init(x,option)
+if isamir(x,'miraudio')
+    if option.frame.length.val
+        s = mirspectrum(x,'Frame',option.frame.length.val,...
+                                  option.frame.length.unit,...
+                                  option.frame.hop.val,...
+                                  option.frame.hop.unit);
+    else
+        s = mirspectrum(x);
+    end
+else
+    s = x;
+end
+if isempty(option.f0)
+    if option.frame.length.val
+        p = mirpitch(x,'Mono','Frame',option.frame.length.val,...
+                                      option.frame.length.unit,...
+                                      option.frame.hop.val,...
+                                      option.frame.hop.unit);
+    else
+        p = mirpitch(x,'Mono');
+    end
+else
+    p = option.f0;
+end
+i = {s,p};
+type = {'mirscalar','mirspectrum','mirscalar'};
+
+
+function ih = main(x,option,postoption)
+if isa(x{2},'mirdesign')
+    x = x{1};
+end
+s = x{1};
+p = x{2};
+if iscell(p)
+    p = p{1};
+end
+m = get(s,'Magnitude');
+f = get(s,'Frequency');
+fp1 = get(s,'FramePos');
+if isnumeric(p)
+    pf = {{{p}}};
+else
+    pf = get(p,'Data');
+    fp2 = get(p,'FramePos');
+end
+v = cell(1,length(m));
+for h = 1:length(m)
+    v{h} = cell(1,length(m{h}));
+    for i = 1:length(m{h})
+        mi = m{h}{i};
+        fi = f{h}{i};
+        pfi = pf{h}{i};
+        v{h}{i} = zeros(1,size(mi,2),size(mi,3));
+        if not(size(mi,2) == size(pfi,2))
+            beg = find(fp2{h}{i}(1,:) == fp1{h}{i}(1,1));
+            if isempty(beg) || (beg + size(mi,2)-1 > size(pfi,2))
+                error('ERROR IN MIRINHARMONICITY: The ''f0'' argument should have the same frame decomposition than the main input.');
+            end
+            pfi = pfi(:,beg:beg+size(mi,2)-1);
+        end
+        for j = 1:size(mi,3)
+            for k = 1:size(mi,2)
+                mk = mi(:,k,j);
+                fk = fi(:,k,j);
+                pfk = pfi(:,k);
+                if isempty(pfk{1})
+                    v{h}{i}(1,k,j) = NaN;
+                else
+                    r = fk/pfk{1}(1);
+                    rr = 2*abs(r-round(r));
+                    if isempty(rr)
+                        v{h}{i}(1,k,j) = NaN;
+                    else
+                        v{h}{i}(1,k,j) = sum(rr.*mk) / sum(mk);
+                    end
+                end
+            end
+        end
+    end
+end
+ih = mirscalar(s,'Data',v,'Title','Inharmonicity');
+if isa(p,'mirdata')
+    ih = {ih s p};
+else
+    ih = {ih s};
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirkey.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,61 @@
+function varargout = mirkey(orig,varargin)
+%   k = mirkey(x) estimates the key.
+%   Optional argument:
+%       mirkey(...,'Total',m) selects not only the most probable key, but
+%           the m most probable keys.
+%       The other parameter 'Contrast' related to mirpeaks can be specified 
+%           here (see help mirchromagram).
+%       The optional parameters 'Weight' and 'Triangle' related to
+%           mirchromagram can be specified here (see help mirchromagram).
+%   [k,ks] = mirkey(...) also returns the key clarity, corresponding here 
+%       to the key strength associated to the best candidate.
+%   [k,ks,ksc] = mirkey(...) also displays the key strength curve used for
+%       the key estimation and shows in particular the peaks corresponding 
+%       to the selected key(s).
+
+        tot.key = 'Total';
+        tot.type = 'Integer';
+        tot.default = 1;
+    option.tot = tot;
+    
+        thr.key = 'Contrast';
+        thr.type = 'Integer';
+        thr.default = .1;
+    option.thr = thr;
+    
+        wth.key = 'Weight';
+        wth.type = 'Integer';
+        wth.default = .5;
+    option.wth = wth;
+    
+        tri.key = 'Triangle';
+        tri.type = 'Boolean';
+        tri.default = 0;
+    option.tri = tri;
+
+specif.option = option;
+specif.defaultframelength = 1;
+specif.defaultframehop = .5;
+
+varargout = mirfunction(@mirkey,orig,varargin,nargout,specif,@init,@main);
+
+
+function [p type] = init(x,option)
+if not(isamir(x,'mirkeystrength'))
+    x = mirkeystrength(x,'Weight',option.wth,'Triangle',option.tri);
+end
+p = mirpeaks(x,'Total',option.tot,'Contrast',option.thr);
+type = {'mirscalar','mirscalar','mirkeystrength'};
+
+
+function k = main(p,option,postoption)
+if iscell(p)
+    p = p{1};
+end
+pc = get(p,'PeakPos');
+pv = get(p,'PeakMaxVal');
+pm = get(p,'PeakMode');
+k = mirscalar(p,'Data',pc,'Mode',pm,'Title','Key',...
+    'Legend',{'C','C#','D','D#','E','F','F#','G','G#','A','A#','B'});
+m = mirscalar(p,'Data',pv,'Title','Key clarity','MultiData',{});
+k = {k m p};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirkurtosis.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function varargout = mirkurtosis(orig,varargin)
+%   k = mirkurtosis(x) calculates the kurtosis of x, indicating whether
+%       the curve is peaked or flat relative to a normal distribution.
+%   x can be either:
+%       - a spectrum (spectral kurtosis),
+%       - an envelope (temporal kurtosis), or
+%       - any histogram.
+
+
+varargout = mirfunction(@mirkurtosis,orig,varargin,nargout,struct,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirdata')) || isamir(x,'miraudio')
+    x = mirspectrum(x);
+end
+type = 'mirscalar';
+
+
+function k = main(x,option,postoption)
+if iscell(x)
+    x = x{1};
+end
+y = peaksegments(@kurtosis,get(x,'Data'),...
+                           get(x,'Pos'),...
+                           get(mircentroid(x),'Data'),...
+                           get(mirspread(x),'Data'));
+if isa(x,'mirspectrum')
+    t = 'Spectral kurtosis';
+elseif isa(x,'mirenvelope')
+    t = 'Temporal kurtosis';
+else
+    t = ['Kurtosis of ',get(x,'Title')];
+end
+k = mirscalar(x,'Data',y,'Title',t,'Unit','');
+
+
+function k = kurtosis(d,p,c,s)
+k = sum((p-c).^4.*d) ./ sum(d) ./ s.^4;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirlength.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function varargout = mirlength(orig,varargin)
+%   mirlength(x) indicates the temporal length of x.
+%   Optional argument:
+%       mirlength(...,'Unit',u) indicates the length unit.
+%           Possible values:
+%               u = 'Second': duration in seconds (Default).
+%               u = 'Sample': length in number of samples.
+
+        unit.key = 'Unit';
+        unit.type = 'String';
+        unit.choice = {'Second','Sample'};
+        unit.default = 'Second';
+    option.unit = unit;
+    
+specif.option = option;
+     
+varargout = mirfunction(@mirlength,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = 'mirscalar';
+
+
+function z = main(a,option,postoption)
+if iscell(a)
+    a = a{1};
+end
+d = get(a,'Data');
+f = get(a,'Sampling');
+v = cell(1,length(d));
+for h = 1:length(d)
+    v{h} = cell(1,length(d{h}));
+    for i = 1:length(d{h})
+        di = d{h}{i};
+        v{h}{i} = size(d{h}{i},1);
+        if strcmp(option.unit,'Second')
+            v{h}{i} = v{h}{i}/f{h};
+        end
+    end
+end
+z = mirscalar(a,'Data',v,'Title','Temporal length','Unit','s.');
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirlowenergy.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,92 @@
+function varargout = mirlowenergy(x,varargin)
+%   p = mirlowenergy(f) computes the percentage of frames showing a RMS 
+%       energy that is lower than a given threshold. 
+%   For instance, for a musical excerpt with some very loud frames and 
+%       lots of silent frames, we would get a high low-energy rate.
+%   Optional argument:
+%       mirlowenergy(...,'Threshold',t) expressed as a ratio to the average
+%           energy over the frames.
+%           Default value: t = 1
+%       mirlowenergy(...,'Frame',l,h) specifies the use of frames of
+%           length l seconds and a hop rate h.
+%           Default values: l = .05 s, h = .5
+%       mirlowenergy(...,'Root',0) uses mean square instead of root mean
+%           square
+%       mirlowenergy(...,'ASR') computes the Average Silence Ratio, which
+%           corresponds in fact to mirlowenergy(...,'Root',0,'Threshold',t)
+%           where t is fixed here by default to t = .5
+%   [p,e] = mirlowenergy(...) also returns the RMS energy curve.
+    
+        asr.key = 'ASR';
+        asr.type = 'Boolean';
+        asr.default = 0;
+    option.asr = asr;
+    
+        root.key = 'Root';
+        root.type = 'Boolean';
+        root.default = 1;
+    option.root = root;
+    
+        thr.key = 'Threshold';
+        thr.type = 'Integer';
+        thr.default = NaN;
+    option.thr = thr;
+
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [.05 .5];
+    option.frame = frame;
+
+specif.option = option;
+
+specif.combinechunk = {'Average',@nothing};
+specif.extensive = 1;
+
+varargout = mirfunction(@mirlowenergy,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if option.asr
+    option.root = 0;
+end
+if isamir(x,'miraudio')
+    if isframed(x)
+        x = mirrms(x,'Root',option.root);
+    else
+        x = mirrms(x,'Frame',option.frame.length.val,option.frame.length.unit,...
+                             option.frame.hop.val,option.frame.hop.unit,...
+                             'Root',option.root);
+    end
+end
+type = 'mirscalar';
+
+
+function e = main(r,option,postoption)
+if iscell(r)
+    r = r{1};
+end
+if isnan(option.thr)
+    if option.asr
+        option.thr = .5;
+    else
+        option.thr = 1;
+    end
+end
+v = mircompute(@algo,get(r,'Data'),option.thr);
+fp = mircompute(@noframe,get(r,'FramePos'));
+e = mirscalar(r,'Data',v,'Title','Low energy','Unit','/1','FramePos',fp);
+e = {e,r};
+
+
+function v = algo(d,thr)
+v = sum(d < repmat(thr*mean(d,2),[1 size(d,2) 1]));
+v = v / size(d,2);
+
+
+function fp = noframe(fp)
+fp = [fp(1);fp(end)];
+
+
+function y = nothing(old,new)
+y = old;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirmap.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,305 @@
+function res = mirmap(predics_ref,ratings_ref,dist,alpha,delta)
+% mirmap(predictors_file, ratings_file) performs a statistical mapping
+%   between ratings associated to a set of audio recordings, and a set of
+%   variables computed for the same set of audio recordings. It might be
+%   useful in particular when the set of predictors is large and diverse.
+
+if nargin<3
+    dist = 'lse';
+end
+if nargin<4
+    alpha = 1;
+end
+if nargin<5
+    delta = .00001;
+end
+
+crosscor_thres = .6;
+
+dist = str2func(dist);
+
+predics = import(predics_ref);
+ratings = import(ratings_ref);
+
+predics  = normalize(predics,dist,alpha,delta,'predictions',predics_ref);
+if isempty(predics.data)
+    res = [];
+    return
+end
+
+ratings = normalize(ratings,dist,alpha,delta,'ratings',ratings_ref);
+
+res = map(predics,ratings,crosscor_thres);
+
+
+%%
+function output = import(ref)
+output.data = [];
+output.fields = {};
+output.normal = [];
+if not(iscell(ref))
+    ref = {ref};
+end
+for i = 1:length(ref)
+    if not(iscell(ref{i}))
+        ref{i} = {ref{i}};
+    end
+    if ischar(ref{i}{1})
+        for j = 1:length(ref{i})
+            importj = importdata(ref{i}{j});
+            if not(isstruct(importj))
+                imp = importj;
+                importj = struct;
+                importj.data = imp;
+                for k = 1:size(imp,2)
+                    importj.textdata{k} = [ref{i}{j},'_',num2str(k)];
+                end
+            end
+            if j == 1
+                import = importj;
+            else
+                [c ia ib] = intersect(import.textdata(1,2:end),...
+                                      importj.textdata(1,2:end));
+                import.textdata = [import.textdata(:,[1 ia+1]);...
+                                   importj.textdata(2:end,[1 ib+1])];
+                import.data = [import.data(:,ia);importj.data(:,[1 ib+1])];
+            end
+        end
+        output.data = [output.data import.data];
+        nbfields = size(import.data,2);
+        field = import.textdata(1,:);
+        field = field(end-nbfields+1 : end);
+        output.fields = [output.fields field];
+    else
+        output.data = [output.data ref{i}{1}];
+        for j = 1:size(ref{i},2)
+            output.fields = [output.fields num2str(j)];
+        end
+    end
+end
+ndata = size(output.data,2);
+output.normal = NaN(1,ndata);
+warning('off','stats:lillietest:OutOfRangeP');
+for i = 1:ndata
+    data = output.data(:,i);
+    data = data(~isnan(data));
+    if length(data) < 4
+        output.normal(i) = 0;
+    else
+        output.normal(i) = ~lillietest(data);
+    end
+end
+
+
+%%
+function res = map(predics,ratings,crosscor_thres)
+nbrates = size(ratings.data,2);
+nbpreds = size(predics.data,2);
+res.normal.cor = NaN(nbpreds,nbrates);
+res.normal.pval = NaN(nbpreds,nbrates);
+
+res.significant = cell(nbrates,1);
+for j = 1:nbrates
+    figure
+    set(gca,'YDir','reverse')
+    hold on
+    select = []; % list of selected features
+    for i = 1:nbpreds
+        if ~predics.normal(i)
+            res.normal.cor(i,j) = NaN;
+            continue
+        end
+        [R P] = corrcoef(predics.data(:,i),ratings.data(:,j),...
+                            'rows','pairwise');
+        res.normal.pval(i,j) = P(2);
+        if P(2)<.05 % statistically significant
+            select(end+1) = i; % included into the list of selected features
+            res.normal.cor(i,j) = R(2);
+        else
+            res.normal.cor(i,j) = NaN;
+        end
+    end
+    %res.inter(:,:,j) = corrcoef(predics.data,'rows','pairwise');
+    
+    [unused index] = sort(abs(res.normal.cor(select,j)),'descend');
+    index = select(index);
+    res.significant{j}.cor = res.normal.cor(index,j);
+    res.significant{j}.pval = res.normal.pval(index,j);
+    res.significant{j}.inter = corrcoef(predics.data(:,index),'rows','pairwise');
+                %res.inter(index,index,j);
+    res.significant{j}.fields = {predics.fields{index}};
+    res.significant{j}.alpha = predics.alpha(index);
+    res.significant{j}.lambda = predics.lambda(index);
+    k = 0;
+    corfields = {};
+    corbest = [];
+    for i = 1:length(select)
+        inter = max(abs(res.significant{j}.inter(1:i-1,i)));
+        if i == 1 || inter < crosscor_thres
+            % Features sufficiently independent to the better scoring ones
+            % are selected
+            k = k+1;
+            if i == 1
+                own = 1;
+            else
+                own = 1-inter;
+            end
+            col = res.significant{j}.pval(i);
+            x1 = min(0,res.significant{j}.cor(i));
+            y1 = k-own/2;
+            x2 = x1+abs(res.significant{j}.cor(i));
+            y2 = k+own/2;
+            pcolor([x1 x1;x2 x2],[y1 y2;y1 y2],[col col;col col])
+            corbest = [corbest i];
+            corfields = [corfields res.significant{j}.fields{i}];
+            i
+            res.significant{j}.fields{i}
+            res.significant{j}.cor(i)
+            inter
+        end
+    end
+
+    set(gca,'YTick',1:k,'YTickLabel',corfields)%,...
+%            'Position',[.4 .11 .5 .815])
+    colorbar
+    grid on
+    title(['Correlation with rating ',ratings.fields{j}])
+    
+    predata = standardize(predics.data(:,index(corbest))); %% to be put out of the loop
+    res.best{j}.index = corbest;
+    res.best{j}.fields = {res.significant{j}.fields{corbest}};
+    res.best{j}.alpha = res.significant{j}.alpha(corbest);
+    res.best{j}.lambda = res.significant{j}.lambda(corbest);
+    if isempty(select)
+        close
+    elseif length(corbest)>1
+        display('****************************************')
+        display(['Regression for rating ',ratings.fields{j}])
+        ratej = standardize(ratings.data(:,j));
+        stepwisefit(predata,ratej,'maxiter',10);
+        [b,se,pval,inmodel,stats,nextstep,history] ...
+            = stepwisefit(predata,ratej,'maxiter',10,'scale','on');
+        res.best{j}.fields{find(inmodel)}
+        %stepwise(predata,ratej,[]);%,.001,.001);
+        pause
+    end
+end
+
+function x = standardize(x)
+%mx = mean(x);
+%x = x-repmat(mx,[size(x,1) 1]);
+%sx = std(x);
+%sx(sx==0) = 1;
+%x = x./repmat(sx,[size(x,1) 1]);
+
+
+%%
+function output = normalize(input,dist,alpha,delta,txt,filename)
+fields = input.fields;
+nbfields = length(fields);
+output = input;
+h = waitbar(0,['Normalizing ',txt]);
+for i = 1:nbfields
+    waitbar((i-1)/nbfields,h,['Normalizing ',txt,fields{i}]);
+    d = input.data(:,i);
+    if length(d(~isnan(d)))>3 && ~input.normal(i)
+        %figure(1)
+        %hist(d,round(7.5*log(size(d,1))));
+        %figure(2)
+        %normplot(d)
+        
+        [output.data(:,i) output.alpha(i) output.lambda(i)] = ...
+                                        boxcox_search(d,dist,alpha,delta);
+        %figure(3)
+        %hist(output.data(:,i),round(7.5*log(size(d,1))));
+        output.normal(i) = ~lillietest(output.data(:,i),.01);
+        %figure(4)
+        %normplot(data(:,i))
+    end
+end
+display('Excluded:')
+output.fields{~output.normal}
+display('..')
+output.data(:,~output.normal) = [];
+output.fields(~output.normal) = [];
+output.normal(~output.normal) = [];
+if max(~output.normal)
+    output.alpha(~output.normal) = [];
+    output.lambda(~output.normal) = [];
+end
+ %if strcmpi(filename(end-3:end),'.txt')
+ %    filename = filename(1:end-4);
+ %end
+ %filename = [filename '.mir.txt'];
+ %mirexport(filename,output);
+close(h);
+
+
+function [y resalpha lambda] = boxcox_search(x,dist,alpha,delta)
+if nargin<2
+    dist = @lse;
+end
+if nargin<3
+    alpha = 0;
+end
+lambda = -10:.01:10;
+if min(x)<0
+    x = x-min(x);
+    resalpha = -min(x);
+else
+    resalpha = 0;
+end
+y = boxcox_transf(x,lambda);
+[y lambda d] = optimize(y,lambda,dist,x);
+%y = y(~isnan(y));
+while lillietest(y,.01) && alpha > delta
+    yp = boxcox_transf(x+alpha,lambda);
+    %plot(alpha,lse(yp,lambda,x))
+    if dist(yp,lambda,x)<d
+        x = x+alpha;
+        resalpha = resalpha + alpha;
+        y = yp;
+        alpha = alpha*.999;
+        d = dist(y,lambda,x);
+    else
+        minalpha = min(alpha,min(x)); % to avoid negative values
+        yn = boxcox_transf(x - minalpha,lambda);
+        %plot(alpha,lse(yn,lambda,x))
+        if dist(yn,lambda,x)<d
+            x = minalpha;
+            resalpha = resalpha - minalpha;
+            y = yn;
+            alpha = alpha*.999;
+            d = dist(y,lambda,x);
+        else
+            alpha = alpha/2;
+        end
+    end
+end
+%plot(lambda,dist(y,lambda,x),'.r')
+
+
+function y = boxcox_transf(x,lambda)
+lambda0 = find(~lambda);
+if min(x)<0
+    x = x-min(x);
+end
+x = repmat(x,[1 length(lambda)]);
+lambda = repmat(lambda,[size(x,1) 1]);
+y = (x.^lambda-1)./lambda;
+y(:,lambda0) = log(x(:,lambda0));
+
+
+function [z,lambda,d] = optimize(y,lambda,dist,x)
+[d index] = min(dist(y,lambda,x));
+lambda = lambda(index);
+z = y(:,index);
+
+
+function d = lse(y,lambda,x)
+d = skewness(y).^2 + (kurtosis(y)-3).^2/4; % equation used in Jarque-Bera test
+%plot(lambda,d,'.')
+
+
+function d = mle(y,lambda,x)
+d = -size(y,1)/2*log(var(y))+(lambda-1)*sum(log(x));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirmean.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,111 @@
+function varargout = mirmean(f,varargin)
+% m = mirmean(f) returns the mean along frames of the feature f
+%
+%   f can be a structure array composed of features. In this case,
+%       m will be structured the same way.
+
+if isa(f,'mirstruct')
+    data = get(f,'Data');
+    for fi = 1:length(data)
+        data{fi} = mirmean(data{fi});
+    end
+    varargout = {set(f,'Data',data)};
+elseif isstruct(f)
+    fields = fieldnames(f);
+    for i = 1:length(fields)
+        field = fields{i};
+        stat.(field) = mirmean(f.(field));
+    end
+    varargout = {stat};
+else
+    specif.nochunk = 1;
+    varargout = mirfunction(@mirmean,f,varargin,nargout,specif,@init,@main);
+end
+
+
+function [x type] = init(x,option)
+type = '';
+
+
+function m = main(f,option,postoption)
+if iscell(f)
+    f = f{1};
+end
+if isa(f,'mirhisto')
+    warning('WARNING IN MIRMEAN: histograms are not taken into consideration yet.')
+    m = struct;
+    return
+end
+fp = get(f,'FramePos');
+ti = get(f,'Title');
+if 0 %get(f,'Peaks')
+    if not(isempty(get(f,'PeakPrecisePos')))
+        stat = addstat(struct,get(f,'PeakPrecisePos'),fp,'PeakPos');
+        stat = addstat(stat,get(f,'PeakPreciseVal'),fp,'PeakMag');
+    else
+        stat = addstat(struct,get(f,'PeakPosUnit'),fp,'PeakPos');
+        stat = addstat(stat,get(f,'PeakVal'),fp,'PeakMag');
+    end
+else
+    d = get(f,'Data');
+end
+l = length(d);
+for i = 1:l
+    if iscell(d{i})
+        if length(d{i}) > 1
+            error('ERROR IN MIRMEAN: segmented data not accepted yet.');
+        else
+            dd = d{i}{1};
+        end
+    else
+        dd = d{i};
+    end
+    %dd = uncell(dd);
+    if 0 %iscell(dd)
+        j = 0;
+        singul = 1;
+        ddd = [];
+        while j<length(dd) && singul
+            j = j+1;
+            if length(dd{j}) > 1
+                singul = 0;
+            elseif length(dd{j}) == 1
+                ddd(end+1) = dd{j};
+            end
+        end
+        if singul
+            dd = ddd;
+        end
+    end
+    if iscell(dd)
+        m{i} = {zeros(1,length(dd))};
+        for j = 1:length(dd)
+            m{i}{1}(j) = mean(dd{j});
+        end
+    elseif size(dd,2) < 2
+        nonan = find(not(isnan(dd)));
+        dn = dd(nonan);
+        m{i}{1} = mean(dn,2);
+    else
+        %diffp = fp{i}{1}(1,2:end) - fp{i}{1}(1,1:end-1);
+        %if round((diffp(2:end)-diffp(1:end-1))*1000)
+            % Not regular sampling (in mirattacktime for instance)
+        %    framesampling = NaN;
+        %else
+        %    framesampling = fp{i}{1}(1,2)-fp{i}{1}(1,1);
+        %end
+        dd = mean(dd,4);
+        m{i} = {NaN(size(dd,1),1,size(dd,3))};
+        for k = 1:size(dd,1)
+            for l = 1:size(dd,3)
+                dk = dd(k,:,l);
+                nonan = find(not(isnan(dk)));
+                if not(isempty(nonan))
+                    dn = dk(nonan);
+                    m{i}{1}(k,1,l) = mean(dn,2);
+                end
+            end
+        end
+    end
+end
+m = mirscalar(f,'Data',m,'Title',['Average of ',ti]);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirmode.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+function varargout = mirmode(x,varargin)
+%   m = mirmode(a) estimates the mode. A value of 0 indicates a complete
+%       incertainty, whereas a positive value indicates a dominance of
+%       major mode and a negative value indicates a dominance of minor mode.
+%   Optional arguments:
+%   mirmode(a,s) specifies a strategy. 
+%       Possible values for s: 'Sum', 'Best'(default)
+
+        stra.type = 'String';
+        stra.default = 'Best';
+        stra.choice = {'Best','Sum'};
+    option.stra = stra;
+    
+specif.option = option;
+specif.defaultframelength = 1;
+specif.defaultframehop = .5;
+
+varargout = mirfunction(@mirmode,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirkeystrength'))
+    x = mirkeystrength(x);
+end
+type = 'mirscalar';
+
+
+function o = main(s,option,postoption)
+if iscell(s)
+    s = s{1};
+end
+m = get(s,'Data');
+if strcmpi(option.stra,'sum')
+    v = mircompute(@algosum,m);
+elseif strcmpi(option.stra,'best')
+    v = mircompute(@algobest,m);
+end
+b = mirscalar(s,'Data',v,'Title','Mode');
+o = {b,s};
+
+
+function v = algosum(m)
+v = sum(abs(m(:,:,:,1))) - sum(abs(m(:,:,:,2)));
+
+
+function v = algobest(m)
+v = max(m(:,:,:,1)) - max(m(:,:,:,2));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirnovelty.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,208 @@
+function varargout = mirnovelty(orig,varargin)
+%   n = mirnovelty(m) evaluates the novelty score from a similarity matrix.
+%   [n,m] = mirnovelty(m) also return the similarity matrix.
+%   Optional argument: 
+%       mirnovelty(...,'Distance',f) specifies the name of a dissimilarity
+%           distance function, from those proposed in the Statistics Toolbox
+%               (help pdist).
+%           default value: f = 'cosine'
+%       mirnovelty(...,'Similarity',f) specifies the name of a similarity
+%           measure function. This function is applied to the result of the
+%           distance function. cf. mirsimatrix 
+%           default value: f = 'exponential'
+%               corresponding to f(x) = exp(-x)
+%       mirnovelty(...,'KernelSize',s) or more simply mirnovelty(...,s) 
+%           specifies the length of the gaussian kernel, in samples.
+%           default value: s = 64.
+%       mirnovelty(...,'Normal',0) does not normalize the novelty curve
+%           between the values 0 and 1.
+%
+%   Foote, J. & Cooper, M. (2003). Media Segmentation using Self-Similarity
+% Decomposition,. In Proc. SPIE Storage and Retrieval for Multimedia
+% Databases, Vol. 5021, pp. 167-75.
+
+        dist.key = 'Distance';
+        dist.type = 'String';
+        dist.default = 'cosine';
+    option.dist = dist;
+
+        sm.key = {'Measure','Similarity'};
+        sm.type = 'String';
+        sm.default = 'exponential';
+    option.sm = sm;
+
+        K.key = {'KernelSize','Width'};
+        K.type = 'Integer';
+        K.default = 64;
+    option.K = K;
+    
+        transf.type = 'String';
+        transf.default = 'TimeLag';
+        transf.choice = {'Horizontal','TimeLag'};
+    option.transf = transf;
+
+        normal.key = 'Normal';
+        normal.type = 'Boolean';
+        normal.default = 1;
+        normal.when = 'After';
+    option.normal = normal;
+    
+specif.option = option;
+specif.combineframes = @combineframes;
+specif.nochunk = 1;
+varargout = mirfunction(@mirnovelty,orig,varargin,nargout,specif,@init,@main);
+    
+
+function [x type] = init(x,option)
+type = 'mirscalar';
+if not(isamir(x,'mirscalar') && strcmp(get(x,'Title'),'Novelty'))
+    x = mirsimatrix(x,'Distance',option.dist,'Similarity',option.sm,...
+                      'Width',option.K,option.transf);
+end
+if isa(x,'mirdesign')
+    x = set(x,'Overlap',ceil(option.K));
+end
+
+
+function y = main(orig,option,postoption)
+if iscell(orig)
+    orig = orig{1};
+end
+if not(isa(orig,'mirscalar'))
+    s = get(orig,'Data');
+    dw = get(orig,'DiagWidth');
+    for k = 1:length(s)
+        if isnumeric(dw)
+            dwk = dw;
+        else
+            dwk = dw{k};
+        end
+        if option.K
+            cgs = min(option.K,dwk);
+        else
+            cgs = dwk;
+        end
+        cg = checkergauss(cgs,option.transf);
+        disp('Computing convolution, please wait...')
+        for z = 1:length(s{k})
+            sz = s{k}{z};
+            szm = max(max(sz));
+            for i = find(isnan(sz))
+                sz(i) = szm;
+            end
+            cv = convolve2(sz,cg,'same');
+            nl = size(cv,1);
+            nc = size(cv,2);
+            if nl == 0
+                warning('WARNING IN NOVELTY: No frame decomposition. The novelty score cannot be computed.');
+                score{k}{z} = [];
+            else
+                sco = cv(floor(size(cv,1)/2),:);
+                incr = find(diff(sco)>=0);
+                if not(isempty(incr))
+                    decr = find(diff(sco)<=0);
+                    sco(1:incr(1)-1) = NaN(1,incr(1)-1);
+                    if not(isempty(decr))
+                        sco(decr(end)+1:end) = NaN(1,length(sco)-decr(end));
+                    end
+                    incr = find(diff(sco)>=0);
+                    sco2 = sco;
+                    if not(isempty(incr))
+                        sco2 = sco2(1:incr(end)+1);
+                    end
+                    decr = find(diff(sco)<=0);
+                    if not(isempty(decr)) && decr(1)>2
+                        sco2 = sco2(decr(1)-1:end);
+                    end
+                    mins = min(sco2);
+                    rang = find(sco>= mins);
+                    if not(isempty(rang))
+                        sco(1:rang(1)-1) = NaN(1,rang(1)-1);
+                        sco(rang(end)+1:end) = NaN(1,length(sco)-rang(end));
+                    end
+                end
+                score{k}{z} = sco;
+            end
+        end
+    end
+else
+    score = get(orig,'Data');
+end
+if not(isempty(postoption)) && postoption.normal
+    for k = 1:length(score)
+        for l = 1:length(score{k})
+            sco = score{k}{l};
+            sco = (sco-min(sco))/(max(sco)-min(sco));
+            score{k}{l} = sco;
+        end
+    end
+end
+n = mirscalar(orig,'Data',score,'Title','Novelty'); 
+y = {n orig};
+
+
+function old = combineframes(old,new)
+if not(iscell(old))
+    old = {old};
+end
+if not(iscell(new))
+    new = {new};
+end
+for var = 1:length(new)
+    ov = old{var};
+    nv = new{var};
+    ofp = get(ov,'FramePos');
+    ofp = ofp{1}{1};
+    nfp = get(nv,'FramePos');
+    nfp = nfp{1}{1};
+    od = get(ov,'Data');
+    od = od{1}{1};
+    onan = find(isnan(od));
+    od(onan) = [];
+    ofp(:,onan) = [];
+    nd = get(nv,'Data');
+    nd = nd{1}{1};
+    nnan = find(isnan(nd));
+    nd(nnan) = [];
+    nfp(:,nnan) = [];
+    [unused omatch nmatch] = intersect(ofp(1,:),nfp(1,:));
+    if isempty(omatch)
+        ov = set(ov,'FramePos',{{[ofp nfp]}},'Data',{{[od nd]}});
+    else
+        lm = length(omatch);
+        ov = set(ov,'FramePos',{{[ofp(:,1:omatch(1)-1) nfp]}},...
+            'Data',{{[od(1:omatch(1)-1),...
+                      (od(omatch).*(lm:-1:1) + nd(nmatch).*(1:lm))/(lm+1),...
+                      nd(nmatch(end)+1:end)]}});
+    end
+    old{var} = ov;
+end
+
+
+function y = checkergauss(N,transf)
+hN = ceil(N/2);
+if strcmpi(transf,'TimeLag')
+    y = zeros(hN,N);
+    for j = 1:N
+        for i = 1:hN
+            g = exp(-((i/hN)^2 + (((j-hN)/hN)^2))*4);
+            if j>hN && j<hN+i
+                y(hN-i+1,j) = -g;
+            else
+                y(hN-i+1,j) = g;
+            end
+        end
+    end
+else
+    y = zeros(N);
+    for i = 1:N
+        for j = 1:N
+            g = exp(-(((i-hN)/hN)^2 + (((j-hN)/hN)^2))*4);
+            if xor(j>i,j>N-i)
+                y(i,j) = -g;
+            else
+                y(i,j) = g;
+            end
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mironsets.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,643 @@
+function varargout = mironsets(x,varargin)
+%   o = mironsets(x) shows a temporal curve where peaks relate to the 
+%       position of note onset times, and estimates those note onset 
+%       positions.
+%   Optional arguments:
+%       mironsets(...,f) selects the strategy for the computation of the
+%           onset detection function.
+%           f = 'Envelope': Envelope of the audio signal. (Default choice).
+%           With two methods for envelope extraction:
+%               mironsets(...,'Spectro') (Default):
+%                   mironsets(...,'SpectroFrame',fl,fh) species the frame
+%                       length fl (in s.) and the hop factor fh (as a value
+%                       between 0 and 1)
+%                       Default values: fl = .1 s., fh = .1
+%                    the frequency reassigment method can be specified:
+%                    'Freq' (default), 'Mel', 'Bark' or 'Cents' (cf. mirspectrum).
+%               mironsets(...,'Filter'):
+%                   mironsets(...,'Filterbank',nc) specifies a preliminary
+%                       filterbank decomposition into nc channels. If nc = 0,
+%                       no decomposition is performed.
+%                       Default value: 40.
+%                   mironsets(...,'FilterbankType',ft) specifies the type of
+%                       filterbank (see mirfilterbank).
+%                       Default value: 'Gammatone';
+%                   Options associated to the mirenvelope function can be
+%                       passed here as well (see help mirenvelope):
+%                      'FilterType','Tau','PreDecim'
+%               mironsets(...,'Sum','no') does not sum back the channels at
+%                   the end of the computation. The resulting onset curve
+%                   remains therefore decomposed into several channels.
+%               Options associated to the mirenvelope function can be
+%                   passed here as well (see help mirenvelope):
+%                   'HalfwaveCenter','Diff','HalfwaveDiff','Center',
+%                   'Smooth', 'Sampling','Log','Power','Lambda',
+%                  ,'PostDecim','UpSample'
+%           f = 'SpectralFlux': Spectral flux of the audio signal.
+%               Options associated to the mirflux function can be
+%               passed here as well (see help mirflux):
+%                   'Inc' (toggled on by default here),
+%                   'Halfwave' (toggled on by default here),
+%                   'Complex' (toggled off by default),
+%                   'Median' (toggled on by default here)
+%           f = 'Pitch ':computes a frame-decomposed autocorrelation function ,
+%                of same default characteristics than those returned
+%                by mirpitch, with however a range of frequencies set by 
+%                the following options:
+%                   'Min' (set by default to 30 Hz),
+%                   'Max' (set by default to 1000 Hz),
+%                and subsequently computes the novelty curve of the 
+%                resulting similatrix matrix.
+%               Option associated to the mirnovelty function can be
+%               passed here as well (see help mirnovelty):
+%                   'KernelSize' (set by default to 32 samples)
+%       mironsets(...,'Detect',d) toggles on or off the onset detection, 
+%           which is based on the onset detection function.
+%           (By default toggled on.)
+%           Option associated to the mirpeaks function can be specified as
+%               well:
+%               'Contrast' with default value c = .01
+%               'Threshold' with default value t = 0
+%       mironsets(...,'Attack') (or 'Attacks') detects attack phases.
+%       mironsets(...,'Release') (or 'Releases') detects release phases.
+%           mironsets(...,'Gauss',o) estimate the attack and/or release
+%               points using a gaussian envelope smoothing of order o of the
+%               onset curve.
+%       mironsets(...,'Frame',...) decomposes into frames, with default frame
+%           length 3 seconds and hop factor .1
+%   Preselected onset detection models:
+%       mironsets(...,'Scheirer') corresponds to (Scheirer, 1998):
+%           mironsets(...,'FilterBankType','Scheirer',...
+%                         'FilterType','HalfHann','Sampling',200,...
+%                         'HalfWaveDiff','Sum',0,'Detect',0)
+%       mironsets(...,'Klapuri99') corresponds to most of (Klapuri, 1999).
+        
+%% options related to 'Envelope':
+
+        env.key = 'Envelope';
+        env.type = 'Boolean';
+        env.default = NaN;
+    option.env = env;
+
+        envmethod.key = 'Method'; % optional
+        envmethod.type = 'Boolean';
+    option.envmethod = envmethod;
+    
+        envmeth.type = 'String';
+        envmeth.choice = {'Filter','Spectro'};
+        envmeth.default = 'Spectro';
+    option.envmeth = envmeth;
+ 
+%%      options related to 'Filter':
+
+            filter.key = 'FilterType';
+            filter.type = 'String';
+            filter.choice = {'IIR','HalfHann'};
+            filter.default = 'IIR';
+        option.filter = filter;
+
+            tau.key = 'Tau';
+            tau.type = 'Integer';
+            tau.default = .02;
+        option.tau = tau;
+
+            fb.key = {'Filterbank','NbChannels'};
+            fb.type = 'Integer';
+            fb.default = 40;
+        option.fb = fb;
+
+            filtertype.key = 'FilterbankType';
+            filtertype.type = 'String';
+            %filtertype.choice = {'Gammatone','2Channels','Scheirer','Klapuri'};
+            filtertype.default = 'Gammatone';
+        option.filtertype = filtertype;
+
+            decim.key = {'Decim','PreDecim'};
+            decim.type = 'Integer';
+            decim.default = 0;
+        option.decim = decim;
+    
+%%      options related to 'Spectro':
+
+            band.type = 'String';
+            band.choice = {'Freq','Mel','Bark','Cents'};
+            band.default = 'Freq';
+        option.band = band;
+        
+            specframe.key = 'SpectroFrame';
+            specframe.type = 'Integer';
+            specframe.number = 2;
+            specframe.default = [.1 .1];
+        option.specframe = specframe;
+                    
+        sum.key = 'Sum';
+        sum.type = 'Boolean';
+        sum.default = 1;
+    option.sum = sum;
+
+        chwr.key = 'HalfwaveCenter';
+        chwr.type = 'Boolean';
+        chwr.default = 0;
+        chwr.when = 'After';
+    option.chwr = chwr;
+    
+        mu.key = 'Mu';
+        mu.type = 'Boolean';
+        mu.default = 0;
+        mu.when = 'After';
+    option.mu = mu;
+    
+        oplog.key = 'Log';
+        oplog.type = 'Boolean';
+        oplog.default = 0;
+        oplog.when = 'After';
+    option.log = oplog;
+
+        oppow.key = 'Power';
+        oppow.type = 'Boolean';
+        oppow.default = 0;
+        oppow.when = 'After';
+    option.power = oppow;
+    
+        diffenv.key = 'DiffEnvelope'; % obsolete, replaced by 'Diff'
+        diffenv.type = 'Boolean';
+        diffenv.default = 0;
+    option.diffenv = diffenv;
+
+        diff.key = 'Diff';
+        diff.type = 'Integer';
+        diff.default = 0;
+        diff.keydefault = 1;
+        diff.when = 'After';
+    option.diff = diff;
+    
+        diffhwr.key = 'HalfwaveDiff';
+        diffhwr.type = 'Integer';
+        diffhwr.default = 0;
+        diffhwr.keydefault = 1;
+        diffhwr.when = 'After';
+    option.diffhwr = diffhwr;
+
+        lambda.key = 'Lambda';
+        lambda.type = 'Integer';
+        lambda.default = 1;
+        lambda.when = 'After';
+    option.lambda = lambda;
+
+        c.key = 'Center';
+        c.type = 'Boolean';
+        c.default = 0;
+        c.when = 'After';
+    option.c = c;
+    
+        aver.key = 'Smooth';
+        aver.type = 'Integer';
+        aver.default = 0;
+        aver.keydefault = 30;
+        aver.when = 'After';
+    option.aver = aver;
+    
+        ds.key = {'Down','PostDecim'};
+        ds.type = 'Integer';
+        if isamir(x,'mirenvelope')
+            ds.default = 1;
+        else
+            ds.default = NaN;
+        end
+        ds.when = 'After';
+        ds.chunkcombine = 'During';
+    option.ds = ds;
+
+        sampling.key = 'Sampling';
+        sampling.type = 'Integer';
+        sampling.default = 0;
+        sampling.when = 'After';
+    option.sampling = sampling;
+    
+        up.key = {'UpSample'};
+        up.type = 'Integer';
+        up.default = 0;
+        up.keydefault = 2;
+    option.up = up;
+
+%% options related to 'SpectralFlux'
+        flux.key = 'SpectralFlux';
+        flux.type = 'Boolean';
+        flux.default = 0;
+    option.flux = flux;
+    
+        complex.key = 'Complex';
+        complex.type = 'Boolean';
+        complex.when = 'Both';
+        complex.default = 0;
+    option.complex = complex;
+    
+        inc.key = 'Inc';
+        inc.type = 'Boolean';
+        inc.default = 1;
+    option.inc = inc;
+    
+        median.key = 'Median';
+        median.type = 'Integer';
+        median.number = 2;
+        median.default = [.2 1.3];
+        median.when = 'After';
+    option.median = median;
+
+        hw.key = 'Halfwave';
+        hw.type = 'Boolean';
+        hw.default = 1;
+        hw.when = 'After';
+    option.hw = hw;
+    
+%% options related to 'Pitch':
+        pitch.key = 'Pitch';
+        pitch.type = 'Boolean';
+        pitch.default = 0;
+    option.pitch = pitch;
+
+        min.key = 'Min';
+        min.type = 'Integer';
+        min.default = 30;
+    option.min = min;
+
+        max.key = 'Max';
+        max.type = 'Integer';
+        max.default = 1000;
+    option.max = max;
+
+        kernelsize.key = 'KernelSize';
+        kernelsize.type = 'Integer';
+        kernelsize.default = 32;
+    option.kernelsize = kernelsize;
+    
+%% options related to event detection
+        detect.key = 'Detect';
+        detect.type = 'String';
+        detect.choice = {'Peaks','Valleys',0,'no','off'};
+        detect.default = 'Peaks';
+        detect.keydefault = 'Peaks';
+        detect.when = 'After';
+    option.detect = detect;
+    
+        cthr.key = 'Contrast';
+        cthr.type = 'Integer';
+        cthr.default = NaN;
+        cthr.when = 'After';
+    option.cthr = cthr;
+
+        thr.key = 'Threshold';
+        thr.type = 'Integer';
+        thr.default = 0;
+        thr.when = 'After';
+    option.thr = thr;
+
+        attack.key = {'Attack','Attacks'};
+        attack.type = 'Boolean';
+        attack.default = 0;
+        attack.when = 'After';
+    option.attack = attack;
+        
+        release.key = {'Release','Releases'};
+        release.type = 'String';
+        release.choice = {'Olivier','Valeri',0,'no','off'};
+        release.default = 0;
+        release.keydefault = 'Olivier';
+        release.when = 'After';
+    option.release = release;
+
+        gauss.key = 'Gauss';
+        gauss.type = 'Integer';
+        gauss.default = 0;
+        gauss.when = 'After';
+    option.gauss = gauss;
+    
+%% preselection
+        presel.choice = {'Scheirer','Klapuri99'};
+        presel.type = 'String';
+        presel.default = 0;
+    option.presel = presel;
+
+            
+%% 'Frame' option
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.when = 'Both';
+        frame.number = 2;
+        frame.default = [0 0];
+        frame.keydefault = [3 .1];
+    option.frame = frame;
+
+specif.option = option;
+
+specif.eachchunk = 'Normal';
+specif.combinechunk = 'Concat';
+specif.extensive = 1;
+
+specif.title = 'Onset curve'; %used for miroptions
+
+varargout = mirfunction(@mironsets,x,varargin,nargout,specif,@init,@main);
+
+
+%% INIT
+
+function [y type] = init(x,option)
+if iscell(x)
+    x = x{1};
+end
+if ischar(option.presel)
+    if strcmpi(option.presel,'Scheirer')
+        option.filtertype = 'Scheirer';
+        option.filter = 'HalfHann';
+        option.envmeth = 'Filter';
+    elseif strcmpi(option.presel,'Klapuri99')
+        option.filtertype = 'Klapuri';
+        option.filter = 'HalfHann';
+        option.envmeth = 'Filter';
+        option.decim = 180;
+    end
+end
+if option.diffenv
+    option.env = 1;
+end
+if isnan(option.env)
+    if option.flux || option.pitch
+        option.env = 0;
+    else
+        option.env = 1;
+    end
+end
+if isamir(x,'miraudio')
+    if option.env
+        if strcmpi(option.envmeth,'Filter') && option.fb>1
+            fb = mirfilterbank(x,option.filtertype,'NbChannels',option.fb);
+        else
+            fb = x;
+        end
+        y = mirenvelope(fb,option.envmeth,option.band,...
+                          'Frame',option.specframe(1),option.specframe(2),...
+                          'FilterType',option.filter,...
+                          'Tau',option.tau,'UpSample',option.up,...
+                          'PreDecim',option.decim,'PostDecim',0);
+        type = 'mirenvelope';
+    elseif option.flux
+        x = mirframenow(x,option);
+        y = mirflux(x,'Inc',option.inc,'Complex',option.complex);
+        type = 'mirscalar';
+    elseif option.pitch
+        [unused ac] = mirpitch(x,'Frame','Min',option.min,'Max',option.max);
+        y = mirnovelty(ac,'KernelSize',option.kernelsize);
+        type = 'mirscalar';
+    end
+elseif (option.pitch && not(isamir(x,'mirscalar'))) ...
+        || isamir(x,'mirsimatrix')
+    y = mirnovelty(x,'KernelSize',option.kernelsize);
+    type = 'mirscalar';
+elseif isamir(x,'mirscalar') || isamir(x,'mirenvelope')
+    y = x; %mirframenow(x,option);
+    type = mirtype(x);
+else
+    x = mirframenow(x,option);
+    y = mirflux(x,'Inc',option.inc,'Complex',option.complex); %Not used...
+    type = 'mirscalar';
+end
+
+
+%% MAIN
+
+function o = main(o,option,postoption)
+if not(isempty(option)) && ischar(option.presel)
+    if strcmpi(option.presel,'Scheirer')
+        postoption.sampling = 200;
+        postoption.diffhwr = 1;
+        option.sum = 0;
+        postoption.detect = 0;
+    elseif strcmpi(option.presel,'Klapuri99')
+        postoption.mu = 1;
+        postoption.diffhwr = 1;
+        option.sum = 0;
+        postoption.ds = 0;
+        o2 = o;
+    end
+end
+if iscell(o)
+    o = o{1};
+end
+if not(isempty(option)) && option.diffenv
+    postoption.diff = 1;
+end
+if isa(o,'mirenvelope')
+    if isfield(postoption,'sampling') && postoption.sampling
+        o = mirenvelope(o,'Sampling',postoption.sampling);
+    elseif isfield(postoption,'ds') 
+        if isnan(postoption.ds)
+            if option.decim || strcmpi(option.envmeth,'Spectro')
+                postoption.ds = 0;
+            else
+                postoption.ds = 16;
+            end
+        end
+        if postoption.ds
+            o = mirenvelope(o,'Down',postoption.ds);
+        end
+    end
+end
+if isfield(postoption,'cthr')
+    if isa(o,'mirenvelope')
+        if postoption.mu
+            o = mirenvelope(o,'Mu');
+        end
+        if postoption.log
+            o = mirenvelope(o,'Log');
+        end
+        if postoption.power
+            o = mirenvelope(o,'Power');
+        end
+        if postoption.diff
+            o = mirenvelope(o,'Diff',postoption.diff,...
+                              'Lambda',postoption.lambda,...
+                              'Complex',postoption.complex);
+        end
+        if postoption.diffhwr
+            o = mirenvelope(o,'HalfwaveDiff',postoption.diffhwr,...
+                              'Lambda',postoption.lambda,...
+                              'Complex',postoption.complex);
+        end
+        if postoption.aver
+            o = mirenvelope(o,'Smooth',postoption.aver);
+        end    
+        if postoption.chwr
+            o = mirenvelope(o,'HalfwaveCenter');
+        end
+        if postoption.c
+            o = mirenvelope(o,'Center');
+        end
+    elseif isa(o,'mirscalar') && strcmp(get(o,'Title'),'Spectral flux')
+        if postoption.median
+            o = mirflux(o,'Median',postoption.median(1),postoption.median(2),...
+                          'Halfwave',postoption.hw);
+        else
+            o = mirflux(o,'Halfwave',postoption.hw);
+        end
+    end
+end
+if isfield(option,'sum') && option.sum
+    o = mirsum(o,'Adjacent',option.sum);
+end
+if isfield(option,'presel') && ...
+        ischar(option.presel) && strcmpi(option.presel,'Klapuri99')
+    % o, already computed, corresponds to mirenvelope(o,'Mu','HalfwaveDiff');
+    % o is the relative distance function W in (Klapuri, 99);
+    o2 = mirenvelope(o2,'HalfwaveDiff');
+    % o2 is the absolute distance function D in (Klapuri, 99);
+    p = mirpeaks(o,'Contrast',.2,'Chrono');
+    p2 = mirpeaks(o2,'ScanForward',p,'Chrono');
+    o = combinepeaks(p,p2,.05);
+    clear o2 p p2
+    filtfreq = 44*[2.^ ([ 0:2, ( 9+(0:17) )/3 ]) ];% Center frequencies of bands
+    o = mirsum(o,'Weights',(filtfreq(1:end-1)+filtfreq(2:end))/2);
+    o = mirenvelope(o,'Smooth',12);
+end
+if not(isa(o,'mirscalar'))
+    o = mirframenow(o,postoption);
+end
+if isfield(postoption,'detect') && ischar(postoption.detect)
+    if isnan(postoption.cthr) || not(postoption.cthr)
+        if ischar(postoption.detect) || postoption.detect
+            postoption.cthr = .01;
+        end
+    elseif postoption.cthr
+        if not(ischar(postoption.detect) || postoption.detect)
+            postoption.detect = 'Peaks';
+        end
+    end
+    if strcmpi(postoption.detect,'Peaks')
+        o = mirpeaks(o,'Total',Inf,'SelectFirst',...
+            'Threshold',postoption.thr,'Contrast',postoption.cthr,...
+            'Order','Abscissa','NoBegin','NoEnd');
+    elseif strcmpi(postoption.detect,'Valleys')
+        o = mirpeaks(o,'Total',Inf,'SelectFirst',...
+            'Threshold',postoption.thr,'Contrast',postoption.cthr,...
+            'Valleys','Order','Abscissa','NoBegin','NoEnd');
+    end
+    nop = cell(size(get(o,'Data')));
+    o = set(o,'AttackPos',nop,'ReleasePos',nop);
+end
+if (isfield(postoption,'attack') && postoption.attack) || ...
+        (isfield(postoption,'release') && postoption.release)
+    p = get(o,'PeakPos');
+    pm = get(o,'PeakMode');
+    d = get(o,'Data');
+    if postoption.attack
+        [st p pm] = mircompute(@startattack,d,p,pm);
+    end
+    if ischar(postoption.release) && ~strcmpi(postoption.release,'No') ...
+                                  && ~strcmpi(postoption.release,'Off')
+        [rl p pm st] = mircompute(@endrelease,d,p,pm,st,postoption.release);
+        o = set(o,'ReleasePos',rl);
+    end
+    o = set(o,'AttackPos',st,'PeakPos',p,'PeakMode',pm);
+end
+title = get(o,'Title');
+if not(length(title)>11 && strcmp(title(1:11),'Onset curve'))
+    o = set(o,'Title',['Onset curve (',title,')']);
+end
+
+
+function st = startattack(d,z,pm)
+z = sort(z{1});
+pm = pm{1};
+st = zeros(size(z));
+i = 1;
+dd = diff(d,1,1);       % d'
+ddd = diff(dd,1,1);     % d''
+dddd = diff(ddd,1,1);   % d'''
+while i<=length(z)
+    % Start attack is identified to previous peak in d''.
+    p = find(dddd((z(i)-1)-1:-1:1)<0,1); % previous decreasing d''
+    if isempty(p)
+        st(i) = 1;
+    else
+        n = find(dddd((z(i)-1)-p-1:-1:1)>0,1); % previous increasing d''
+        if isempty(n)
+            st(i) = 1;
+        else
+            st(i) = ((z(i)-1)-p-(n-1))+1;
+        end
+        if i>1 && st(i-1)==st(i)
+            if d(z(i))>d(z(i-1))
+                del = i-1;
+            else
+                del = i;
+            end
+            st(del) = [];
+            z(del) = [];
+            pm(del) = [];
+            i = i-1;
+        end
+    end
+    i = i+1;
+end
+st = {{st} {z} {pm}};
+
+
+function rt = endrelease(d,z,pm,st,meth)
+z = sort(z{1});
+pm = pm{1};
+if not(isempty(st))
+    st = st{1};
+end
+rt = zeros(size(z));
+i = 1;
+dd = diff(d,1,1);       % d'
+ddd = diff(dd,1,1);     % d''
+dddd = diff(ddd,1,1);   % d'''
+while i<=length(z)
+    if strcmpi(meth,'Olivier')
+        % Release attack is identified to next (sufficiently positive) peak 
+        % in d''.
+        l = find(ddd((z(i)-1):end)<min(ddd)/100,1); 
+            % next d'' sufficiently negative
+        if isempty(l)
+            rt(i) = length(d);
+        else
+            p = find(ddd((z(i)-1)+(l-1)+1:end)>max(ddd)/100,1); % next increasing d''
+            if isempty(p)
+                rt(i) = length(d);
+            else
+                n = find(dddd((z(i)-1)+(l-1)+p+1:end)<0,1); % next decreasing d''
+                if isempty(n)
+                    rt(i) = length(d);
+                else
+                    rt(i) = ((z(i)-1)+(l-1)+p+n)+1;
+                end
+            end
+        end
+    elseif strcmpi(meth,'Valeri')
+        p = find(dd((z(i)-1)+1:end)>min(dd)/100,1); % find point nearest to min(dd)/100 from current peak. 
+        if isempty(p)
+            rt(i) = length(d);
+        elseif p<=3                                 %that means if p is less than 3 points away from the peak then it can not be considered as the end point of release.
+                                                  %Assumption is that the whole DSR(decay sustain release) section can not be shorter than 30 ms (sampling rate is 100 Hz), also, no successive note can be nearer than 30ms.
+            rt(i) = z(i)+3;
+        else
+            rt(i) = (z(i)-1)+(p-1);
+        end
+    end
+    if i>1 && rt(i-1)==rt(i)
+        if d(z(i))>d(z(i-1))
+            del = i-1;
+        else
+            del = i;
+        end
+        rt(del) = [];
+        z(del) = [];
+        pm(del) = [];
+        if not(isempty(st))
+            st(del) = [];
+        end
+        i = i-1;
+    end
+    i = i+1;
+end
+rt = {{rt} {z} {pm} {st}};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/miroptions.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,416 @@
+function [orig during after] = miroptions(method,orig,specif,varg)
+
+DEFAULTFRAMELENGTH = .05;
+DEFAULTFRAMEHOP = .5;
+
+% The options are determined during the bottom-up process design (see below). 
+
+% During the following top-down evaluation initiation, the options being
+% therefore already computed have simply been passed as fourth and fifth
+% arguments of miroptions.
+if not(isempty(varg)) && (isstruct(varg{1}) || isempty(varg{1}))
+    during = varg{1};
+    if isstruct(varg{1})
+        if isfield(during,'struct')
+            if isa(orig,'mirdesign') 
+                orig = set(orig,'Struct',during.struct);
+            elseif iscell(orig)
+                for i = 1:length(orig)
+                    if isa(orig{i},'mirdesign')
+                        orig{i} = set(orig{i},'Struct',during.struct);
+                    end
+                end
+            end
+            during = rmfield(during,'struct');
+        end
+    end
+    if length(varg) > 1
+        after = varg{2};
+    else
+        after = [];
+    end
+    return
+%elseif length(varg) > 1 && isstruct(varg{2})
+%    during = varg{1};
+%    after = varg{2};
+%    return
+%elseif length(varg) >= 1 && isempty(varg{1})
+%    during = [];
+%    after = [];
+%    return
+end
+
+
+during = struct;
+after = struct;
+if isfield(specif,'option')
+    option = specif.option;
+else
+    option = struct;
+end
+frame = [];
+after = [];
+fields = fieldnames(option);
+persoframe = '';
+for i = 1:length(fields)
+    field = fields{i};
+    if isfield(option.(field),'key') && ischar(option.(field).key) ...
+            && strcmpi(option.(field).key,'Frame')
+        persoframe = field;
+        during.(field).auto = 0;
+    end
+    if isfield(option.(field),'when') && ...
+            (strcmpi(option.(field).when,'After') || ...
+             strcmpi(option.(field).when,'Both'))
+        if isamir(orig,func2str(method)) ...
+                && not(strcmp(func2str(method),'miraudio'))
+            after.(field) = 0;
+        elseif strcmp(field,'detect')
+           %if haspeaks(orig)
+           %    after.(field) = 0;
+           %else
+               after.(field) = 'Peaks';
+           %end
+        elseif isfield(specif,'title')
+            if isa(orig,'mirdata')
+                title = get(orig,'Title');
+                sameclass = (length(title) > length(specif.title) && ...
+                    strcmp(title(1:length(specif.title)),specif.title));
+            else
+                sameclass = strcmp(func2str(get(orig,'Method')),'mironsets');
+            end
+            if sameclass
+                after.(field) = 0;
+            else
+                after.(field) = option.(field).default;
+            end
+        elseif isfield(option.(field),'default')
+            after.(field) = option.(field).default;
+        else
+            after.(field) = 0;
+        end
+    end
+    if not(isfield(option.(field),'when')) || strcmpi(option.(field).when,'Both')
+        if isfield(option.(field),'default')
+            if strcmpi(persoframe,field)
+                during.(field).length.val = option.(field).default(1);
+                during.(field).length.unit = 's';
+                during.(field).hop.val = option.(field).default(2);
+                during.(field).hop.unit = '/1';
+            else
+                during.(field) = option.(field).default;
+            end
+        end
+    end
+end
+i = 1;
+while i <= length(varg)
+    arg = varg{i};
+    if strcmpi(arg,'Frame')
+        frame.auto = isempty(persoframe);
+        frame.length.unit = 's';
+        frame.hop.unit = '/1';
+        if length(varg) > i && isnumeric(varg{i+1})
+            i = i+1;
+            frame.length.val = varg{i};
+            if length(varg) > i && ischar(varg{i+1}) && ...
+                    (strcmpi(varg{i+1},'s') || strcmpi(varg{i+1},'sp'))
+                i = i+1;
+                frame.length.unit = varg{i};
+            end
+            if length(varg) > i && isnumeric(varg{i+1})
+                i = i+1;
+                frame.hop.val = varg{i};
+                if length(varg) > i && ischar(varg{i+1}) && ...
+                        (strcmpi(varg{i+1},'%') || strcmpi(varg{i+1},'/1') || ...
+                         strcmpi(varg{i+1},'s') || strcmpi(varg{i+1},'sp')|| ...
+                         strcmpi(varg{i+1},'Hz'))
+                    i = i+1;
+                    frame.hop.unit = varg{i};
+                end
+                if not(frame.hop.val || strcmpi(frame.hop.unit,'Hz'))
+                    mirerror(func2str(method),'The hop factor should be strictly positive.')
+                end
+            else
+                if not(isempty(persoframe))
+                    if isfield(option.(persoframe),'keydefault')
+                        frame.hop.val = option.(persoframe).keydefault(2);
+                    else
+                        frame.hop.val = option.(persoframe).default(2);
+                    end
+                elseif isfield(specif,'defaultframehop')
+                    frame.hop.val = specif.defaultframehop;
+                else
+                    frame.hop.val = DEFAULTFRAMEHOP;
+                end
+            end
+        else
+            if not(isempty(persoframe))
+                if isfield(option.(persoframe),'keydefault')
+                    frame.length.val = option.(persoframe).keydefault(1);
+                else
+                    frame.length.val = option.(persoframe).default(1);
+                end
+            elseif isfield(specif,'defaultframelength')
+                frame.length.val = specif.defaultframelength;
+            else
+                frame.length.val = DEFAULTFRAMELENGTH;
+            end
+            if not(isempty(persoframe))
+                if isfield(option.(persoframe),'keydefault')
+                    frame.hop.val = option.(persoframe).keydefault(2);
+                else
+                    frame.hop.val = option.(persoframe).default(2);
+                end
+            elseif isfield(specif,'defaultframehop')
+                frame.hop.val = specif.defaultframehop;
+            else
+                frame.hop.val = DEFAULTFRAMEHOP;
+            end
+        end
+        frame.eval = 0;
+        if not(isfield(option,'frame')) || ...
+                not(isfield(option.frame,'when')) || ...
+                strcmpi(option.frame.when,'Before') || ...
+                strcmpi(option.frame.when,'Both')
+            during.frame = frame;
+        end
+        if isfield(option,'frame') && ...
+               isfield(option.frame,'when') && ...
+               (strcmpi(option.frame.when,'After') || ...
+               strcmpi(option.frame.when,'Both'))
+            after.frame = frame;
+        end
+    else
+        match = 0;
+        k = 0;
+        while not(match) && k<length(fields)
+            k = k+1;
+            field = fields{k};
+            if isfield(option.(field),'key')
+                key = option.(field).key;
+                if not(iscell(key))
+                    key = {key};
+                end
+                for j = 1:length(key)
+                    if strcmpi(arg,key{j})
+                        match = 1;
+                    end
+                end
+                if match
+                    if isfield(option.(field),'type')
+                        type = option.(field).type;
+                    else
+                        type = [];
+                    end
+                    if isfield(option.(field),'unit')
+                        unit = option.(field).unit;
+                        defaultunit = option.(field).defaultunit;
+                    else
+                        unit = {};
+                    end
+                    if isfield(option.(field),'from')
+                        from = option.(field).from;
+                        defaultfrom = option.(field).defaultfrom;
+                    else
+                        from = {};
+                    end
+                    if strcmpi(type,'String')
+                        if length(varg) > i && ...
+                                (ischar(varg{i+1}) || varg{i+1} == 0)
+                            if isfield(option.(field),'choice')
+                                match2 = 0;
+                                arg2 = varg{i+1};
+                                for j = option.(field).choice
+                                    if (ischar(j{1}) && strcmpi(arg2,j)) || ...
+                                       (not(ischar(j{1})) && isequal(arg2,j{1}))
+                                            match2 = 1;
+                                            i = i+1;
+                                            optionvalue = arg2;
+                                    end
+                                end
+                                if not(match2)
+                                    if isfield(option.(field),'keydefault')
+                                        optionvalue = option.(field).keydefault;
+                                    else
+                                        error(['SYNTAX ERROR IN ',func2str(method),...
+                                            ': Unexpected keyword after key ',arg'.']);
+                                    end
+                                end
+                            else
+                                i = i+1;
+                                optionvalue = varg{i};
+                            end
+                        elseif isfield(option.(field),'keydefault')
+                            optionvalue = option.(field).keydefault;
+                        elseif isfield(option.(field),'default')
+                            optionvalue = option.(field).default;
+                        else
+                            error(['SYNTAX ERROR IN ',func2str(method),...
+                                ': A string should follow the key ',arg'.']);
+                        end
+                    elseif strcmpi(type,'Boolean')
+                        if length(varg) > i && (isnumeric(varg{i+1}) || islogical(varg{i+1}))
+                            i = i+1;
+                            optionvalue = varg{i};
+                        elseif length(varg) > i && ischar(varg{i+1}) ...
+                                && (strcmpi(varg{i+1},'on') || ...
+                                    strcmpi(varg{i+1},'yes'))
+                            i = i+1;
+                            optionvalue = 1;
+                        elseif length(varg) > i && ischar(varg{i+1}) ...
+                                && (strcmpi(varg{i+1},'off') || ...
+                                    strcmpi(varg{i+1},'no'))
+                            i = i+1;
+                            optionvalue = 0;
+                        else
+                            optionvalue = 1;
+                        end
+                    elseif strcmpi(type,'Integer') || strcmpi(type,'Integers')
+                        if length(varg) > i && isnumeric(varg{i+1})
+                            i = i+1;
+                            optionvalue = varg{i};
+                        elseif isfield(option.(field),'keydefault')
+                            if strcmpi(type,'Integers')
+                                optionvalue = option.(field).keydefault;
+                            else
+                                optionvalue = option.(field).keydefault(1);
+                            end
+                        elseif isfield(option.(field),'default')
+                            if strcmpi(type,'Integers')
+                                optionvalue = option.(field).default;
+                            else
+                                optionvalue = option.(field).default(1);
+                            end
+                        else
+                            error(['SYNTAX ERROR IN ',func2str(method),...
+                                ': An integer should follow the key ',arg'.']);
+                        end
+                        if isfield(option.(field),'number')...
+                                && option.(field).number == 2
+                            if length(varg) > i && isnumeric(varg{i+1})
+                                i = i+1;
+                                optionvalue = [optionvalue varg{i}];
+                            elseif isfield(option.(field),'keydefault')
+                                optionvalue = [optionvalue option.(field).keydefault(2)];
+                            elseif isfield(option.(field),'default')
+                                optionvalue = [optionvalue option.(field).default(2)];
+                            else
+                                error(['SYNTAX ERROR IN ',func2str(method),...
+                                ': Two integers should follow the key ',arg'.']);
+                            end
+                        end
+                        if not(isempty(unit))
+                            if (strcmpi(unit{1},'s') || ...
+                                strcmpi(unit{2},'s')) && ...
+                               (strcmpi(unit{1},'Hz') || ...
+                                strcmpi(unit{2},'Hz'))
+                                if length(varg) > i && ...
+                                   ischar(varg{i+1}) && ...
+                                   (strcmpi(varg{i+1},'s') || ...
+                                    strcmpi(varg{i+1},'Hz'))
+                                    i = i+1;
+                                    if not(strcmpi(varg{i},defaultunit))
+                                        if isfield(option.(field),'opposite')
+                                            field = option.(field).opposite;
+                                        end
+                                        optionvalue = 1/optionvalue;
+                                    end
+                                end
+                            end
+                            if (strcmpi(unit{1},'s') || ...
+                                strcmpi(unit{2},'s')) && ...
+                               (strcmpi(unit{1},'sp') || ...
+                                strcmpi(unit{2},'sp'))
+                                if length(varg) > i && ...
+                                   ischar(varg{i+1}) && ...
+                                   (strcmpi(varg{i+1},'sp') || ...
+                                    strcmpi(varg{i+1},'s'))
+                                    i = i+1;
+                                    if strcmpi(varg{i},'sp')
+                                        optionvalue = [optionvalue 0];
+                                    else
+                                        optionvalue = [optionvalue 1];
+                                    end
+                                else
+                                    optionvalue = [optionvalue 1];
+                                end
+                            end
+                        end
+                        if not(isempty(from))
+                            if length(varg) > i && ...
+                               ischar(varg{i+1}) && ...
+                               (strcmpi(varg{i+1},'Start') || ...
+                                strcmpi(varg{i+1},'Middle') || ...
+                                strcmpi(varg{i+1},'End'))
+                                i = i+1;
+                                if strcmpi(varg{i},'Start')
+                                    optionvalue = [optionvalue 0];
+                                elseif strcmpi(varg{i},'Middle')
+                                    optionvalue = [optionvalue 1];
+                                elseif strcmpi(varg{i},'End')
+                                    optionvalue = [optionvalue 2];           
+                                end
+                            else
+                                optionvalue = [optionvalue 0];
+                            end
+                            if isa(orig,'mirdesign')
+                                orig = set(orig,'Size',optionvalue);
+                            end
+                        end
+                    else
+                        if length(varg) > i
+                            i = i+1;
+                            optionvalue = varg{i};
+                        elseif isfield(option.(field),'keydefault')
+                            optionvalue = option.(field).keydefault(1);
+                        else
+                            error(['SYNTAX ERROR IN ',func2str(method),...
+                                ': Data should follow the key ',arg'.']);
+                        end
+                    end
+                end
+            else
+                if isfield(option.(field),'choice')
+                    for j = option.(field).choice
+                        if strcmpi(arg,j)
+                            match = 1;
+                            optionvalue = arg;
+                        end
+                    end
+                end
+            end
+            if not(match)
+                if isfield(option.(field),'position')
+                    if i+1 == option.(field).position
+                        match = 1;
+                        optionvalue = arg;
+                    end
+                %else
+                %    error(['SYNTAX ERROR IN ',func2str(method),...
+                %            ': Badly specified key ',arg'.']);
+                end
+            end
+            if match == 1
+                match = 2;
+                if isfield(option.(field),'when') ...
+                        && (strcmpi(option.(field).when,'After') || ...
+                            strcmpi(option.(field).when,'Both'))
+                    after.(field) = optionvalue;
+                end
+                if not(isfield(option.(field),'when')) ...
+                        || strcmpi(option.(field).when,'Both')
+                    during.(field) = optionvalue;
+                end
+            end
+        end
+        if not(match)
+            if isnumeric(arg) || islogical(arg)
+                arg = num2str(arg);
+            end
+            error(['SYNTAX ERROR IN ',func2str(method),...
+                ': Unknown parameter ',arg'.']);
+        end
+    end    
+    i = i+1;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirparallel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function p = mirparallel(s)
+% mirparallel(1) toggles on parallel processing: (BETA)
+%   When ?Folder? or ?Folders? is used, several audio files can be analysed
+%   in parallel using several  parallel Matlab sessions running on the 
+%   different processors and/or  processor cores of your computer.
+%   (Requires MathWorks? Parallel Computing Toolbox.)
+% mirparallel(0) toggles back off parallel processing.
+
+persistent mir_parallel
+
+if nargin
+    warning('MIRtoolbox Parallel computing is currently in Beta Version.');
+    if s
+        try
+            matlabpool size;
+        catch
+            mirerror('mirparallel','Are you sure Parallel Processing Toolbox is installed?');
+        end
+    end
+    mir_parallel = s;
+else
+    if isempty(mir_parallel)
+        mir_parallel = 0;
+    end
+end
+
+p = mir_parallel;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirpeaks.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1132 @@
+function varargout = mirpeaks(orig,varargin)
+%   p = mirpeaks(x) detect peaks in x.
+%   Optional argument:
+%       mirpeaks(...,'Total',m): only the m highest peaks are selected.
+%           If m=Inf, no limitation of number of peaks.
+%               Default value: m = Inf
+%       mirpeaks(...,'Order',o): specifies the ordering of the peaks.
+%           Possible values for o:
+%               'Amplitude': orders the peaks from highest to lowest
+%                   (Default choice.)
+%               'Abscissa': orders the peaks along the abscissa axis.
+%       mirpeaks(...,'Contrast',cthr): a threshold value. A given local
+%           maximum will be considered as a peak if its distance with the
+%           previous and successive local minima (if any) is higher than 
+%           this threshold. This distance is expressed with respect to the
+%           total amplitude of x: a distance of 1, for instance, is
+%           equivalent to the distance between the maximum and the minimum
+%           of x.
+%               Default value: cthr = 0.1
+%           mirpeaks(...,'SelectFirst',fthr): If the 'Contrast' selection has
+%               been chosen, this additional option specifies that when one
+%               peak has to be chosen out of two candidates, and if the 
+%               difference of their amplitude is below the threshold fthr,
+%               then the most ancien one is selected.
+%               Option toggled off by default:
+%               Default value if toggled on: fthr = cthr/2
+%       mirpeaks(...,'Threshold',thr): a threshold value.
+%           A given local maximum will be considered as a peak if its
+%               normalized amplitude is higher than this threshold. 
+%           A given local minimum will be considered as a valley if its
+%               normalized amplitude is lower than this threshold. 
+%           The normalized amplitude can have value between 0 (the minimum 
+%               of the signal in each frame) and 1 (the maximum in each 
+%               frame).
+%           Default value: thr=0 for peaks thr = 1 for valleys
+%       mirpeaks(...,'Interpol',i): estimates more precisely the peak
+%           position and amplitude using interpolation. Performed only on
+%           data with numerical abscissae axis.
+%           Possible value for i:
+%               '', 'no', 'off', 0: no interpolation
+%               'Quadratic': quadratic interpolation. (default value).
+%       mirpeaks(...,'Valleys'): detect valleys instead of peaks.
+%       mirpeaks(...,'Reso',r): removes peaks whose distance to one or
+%           several higher peaks is lower than a given threshold.
+%           Possible value for the threshold r:
+%               'SemiTone': ratio between the two peak positions equal to
+%                   2^(1/12)
+%               a numerical value : difference between the two peak
+%                   positions equal to that value
+%           When two peaks are distant by an interval lower than the
+%               resolution, the highest of them is selected by default.
+%           mirpeaks(...,'Reso',r,'First') specifies on the contrary that
+%               the first of them is selected by default.
+%       mirpeaks(...,'Nearest',t,s): takes the peak nearest a given abscisse
+%           values t. The distance is computed either on a linear scale
+%           (s = 'Lin') or logarithmic scale (s = 'Log'). In this case,
+%           only one peak is extracted.
+%       mirpeaks(...,'Pref',c,std): indicates a region of preference for
+%           the peak picking, centered on the abscisse value c, with a
+%           standard deviation of std.
+%       mirpeaks(...,'NoBegin'): does not consider the first sample as a
+%           possible peak candidate.
+%       mirpeaks(...,'NoEnd'): does not consider the last sample as a possible
+%           peak candidate.
+%       mirpeaks(...,'Normalize',n): specifies whether frames are
+%           normalized globally or individually.
+%           Possible value for n:
+%               'Global': normalizes the whole frames altogether from 0 to 
+%                   1 (default choice).
+%               'Local': normalizes each frame from 0 to 1.
+%       mirpeaks(...,'Extract'): extracts from the initial curves all the 
+%           positive continuous segments (or "curve portions") where peaks
+%           are located.
+%       mirpeaks(...,'Only'): keeps from the original curve only the data
+%           corresponding to the peaks, and zeroes the remaining data.
+%       mirpeaks(...,'Track',t): tracks temporal continuities of peaks. If
+%           a value t is specified, the variation between successive peaks
+%           is tolerated up to t samples.
+%       mirpeaks(...,'CollapseTrack',ct): collapses tracks into one single
+%           track, and remove small track transitions, of length shorter
+%           than ct samples. Default value: ct = 7
+
+        m.key = 'Total';
+        m.type = 'Integer';
+        m.default = Inf;
+    option.m = m;
+        
+        nobegin.key = 'NoBegin';
+        nobegin.type = 'Boolean';
+        nobegin.default = 0;
+    option.nobegin = nobegin;
+        
+        noend.key = 'NoEnd';
+        noend.type = 'Boolean';
+        noend.default = 0;
+    option.noend = noend;
+        
+        order.key = 'Order';
+        order.type = 'String';
+        order.choice = {'Amplitude','Abscissa'};
+        order.default = 'Amplitude';
+    option.order = order;
+    
+        chro.key = 'Chrono'; % obsolete, corresponds to 'Order','Abscissa'
+        chro.type = 'Boolean';
+        chro.default = 0;
+    option.chro = chro;
+    
+        ranked.key = 'Ranked'; % obsolete, corresponds to 'Order','Amplitude'
+        ranked.type = 'Boolean';
+        ranked.default = 0;
+    option.ranked = ranked;
+        
+        vall.key = 'Valleys';
+        vall.type = 'Boolean';
+        vall.default = 0;
+    option.vall = vall;
+    
+        cthr.key = 'Contrast';
+        cthr.type = 'Integer';
+        cthr.default = .1;
+    option.cthr = cthr;
+        
+        first.key = 'SelectFirst';
+        first.type = 'Integer';
+        first.default = 0;
+        first.keydefault = NaN;
+    option.first = first;
+    
+        thr.key = 'Threshold';
+        thr.type = 'Integer';
+        thr.default = NaN;
+    option.thr = thr;
+            
+        smthr.key = 'MatrixThreshold'; % to be documented in version 1.3
+        smthr.type = 'Integer';
+        smthr.default = NaN;
+    option.smthr = smthr;
+    
+        graph.key = 'Graph';
+        graph.type = 'Integer';
+        graph.default = 0;
+        graph.keydefault = .25;
+    option.graph = graph;
+        
+        interpol.key = 'Interpol';
+        interpol.type = 'String';
+        interpol.default = 'Quadratic';
+        interpol.keydefault = 'Quadratic';
+    option.interpol = interpol;
+    
+        reso.key = 'Reso';
+        %reso.type = 'String';
+        %reso.choice = {0,'SemiTone'};
+        reso.default = 0;
+    option.reso = reso;
+    
+        resofirst.key = 'First';
+        resofirst.type = 'Boolean';
+        resofirst.default = 0;
+    option.resofirst = resofirst;
+        
+        c.key = 'Pref';
+        c.type = 'Integer';
+        c.number = 2;
+        c.default = [0 0];
+    option.c = c;
+        
+        near.key = 'Nearest';
+        near.type = 'Integer';
+        near.default = NaN;
+    option.near = near;
+        
+        logsc.type = 'String';
+        logsc.choice = {'Lin','Log',0};
+        logsc.default = 'Lin';
+    option.logsc = logsc;
+        
+        normal.key = 'Normalize';
+        normal.type = 'String';
+        normal.choice = {'Local','Global'};
+        normal.default = 'Global';
+    option.normal = normal;
+
+        extract.key = 'Extract';
+        extract.type = 'Boolean';
+        extract.default = 0;
+    option.extract = extract;
+    
+        only.key = 'Only';
+        only.type = 'Boolean';
+        only.default = 0;
+    option.only = only;
+
+        delta.key = 'Track';
+        delta.type = 'Integer';
+        delta.default = 0;
+        delta.keydefault = Inf;
+    option.delta = delta;
+    
+        mem.key = 'TrackMem';
+        mem.type = 'Integer';
+        mem.default = Inf;
+    option.mem = mem;
+
+        shorttrackthresh.key = 'CollapseTracks';
+        shorttrackthresh.type = 'Integer';
+        shorttrackthresh.default = 0;
+        shorttrackthresh.keydefault = 7;
+    option.shorttrackthresh = shorttrackthresh;
+
+        scan.key = 'ScanForward'; % specific to mironsets(..., 'Klapuri99')
+        scan.default = [];
+    option.scan = scan;
+    
+specif.option = option;
+
+varargout = mirfunction(@mirpeaks,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = mirtype(x);
+
+
+function p = main(x,option,postoption)
+if iscell(x)
+    x = x{1};
+end
+if option.chro
+    option.order = 'Abscissa';
+elseif option.ranked
+    option.order = 'Amplitude';
+end
+if not(isnan(option.near)) && option.m == 1
+    option.m = Inf;
+end
+x = purgedata(x);
+if option.m <= 0
+    p = x;
+    return
+end
+d = get(x,'Data');
+sr = get(x,'Sampling');
+cha = 0; % Indicates when it is possible to represent as a curve along the 
+         % Z-axis (channels) instead of the X-axis (initial abscissa).
+if isnan(option.first)
+    option.first = option.cthr / 2;
+end
+if isa(x,'mirscalar')
+    t = get(x,'FramePos');
+    for i = 1:length(d)
+        for j = 1:length(d{i})
+            d{i}{j} = d{i}{j}';
+            if size(t{i},1) == 1
+                t{i}{j} = t{i}{j}(1,:,:)';
+            else
+                t{i}{j} = (t{i}{j}(1,:,:)+t{i}{j}(2,:,:))'/2;
+            end
+        end
+    end
+elseif isa(x,'mirsimatrix')
+    t = get(x,'FramePos');
+    for i = 1:length(t)
+        for j = 1:length(t{i})
+            t{i}{j} = repmat((t{i}{j}(1,:,:)+t{i}{j}(2,:,:))'/2,...
+                                    [1 size(d{i}{j},2) 1]);
+        end
+    end
+elseif isa(x,'mirhisto')
+    error('ERROR IN MIRPEAKS: peaks of histogram not considered yet.');
+else
+    for i = 1:length(d)
+        for j = 1:length(d{i})
+            if iscell(d{i})
+                dij = d{i}{j};
+                if ~cha && j == 1 && size(dij,3) > 1 && size(dij,1) == 1
+                    cha = 1;
+                end
+                if cha && j > 1 && size(dij,1) > 1
+                    cha = -1;
+                end
+            end
+        end
+        for j = 1:length(d{i})
+            if iscell(d{i})
+                dij = d{i}{j};
+                if cha == 1
+                    if iscell(dij)
+                        for k = 1:size(dij,2)
+                            d{i}{j}{k} = reshape(dij{k},size(dij{k},2),size(dij{k},3));
+                            d{i}{j}{k} = d{i}{j}{k}';
+                        end
+                    else
+                        d{i}{j} = reshape(dij,size(dij,2),size(dij,3));
+                        d{i}{j} = d{i}{j}';
+                    end
+                end
+            end
+        end
+    end
+    if cha == 1
+        t = get(x,'Channels');
+    else
+        t = get(x,'Pos');
+    end
+end
+pp = cell(1,length(d));
+pv = cell(1,length(d));
+pm = cell(1,length(d));
+ppp = cell(1,length(d));
+ppv = cell(1,length(d));
+tp = cell(1,length(d));
+tv = cell(1,length(d));
+
+if isnan(option.thr)
+    option.thr = 0;
+else
+    if option.vall
+        option.thr = 1-option.thr;
+    end
+end
+%if isnan(option.lthr)
+%    option.lthr = 1;
+%else
+%    if option.vall
+%        option.lthr = 1-option.lthr;
+%    end
+%end
+if isnan(option.smthr)
+    option.smthr = option.thr - .2;
+end
+
+if not(isempty(option.scan))
+    pscan = get(option.scan,'PeakPos');
+end
+
+interpol = get(x,'Interpolable') && not(isempty(option.interpol)) && ...
+                ((isnumeric(option.interpol) && option.interpol) || ...
+                 (ischar(option.interpol) && not(strcmpi(option.interpol,'No')) && not(strcmpi(option.interpol,'Off'))));
+                
+for i = 1:length(d) % For each audio file,...
+    di = d{i};
+    if cha == 1
+        ti = t; %sure ?
+    else
+        ti = t{i};
+    end
+    if not(iscell(di))
+        di = {di};
+        if isa(x,'mirchromagram') && not(cha)
+            ti = {ti};
+        end
+    end
+    for h = 1:length(di)    % For each segment,...
+        dh0 = di{h};
+        if option.vall
+            dh0 = -dh0;
+        end
+        dh2 = dh0;
+        [nl0 nc np nd0] = size(dh0);
+        if cha == 1
+            if iscell(ti)
+                %% problem here!!!
+                ti = ti{i}; %%%%%it seems that sometimes we need to use instead ti{i}(:);
+            end
+            th = repmat(ti,[1,nc,np,nd0]);
+        else
+            th = ti{h};
+            if iscell(th)  % Non-numerical abscissae are transformed into numerical ones. 
+                th = repmat((1:size(th,1))',[1,nc,np]);
+            else
+                if size(th,3)<np
+                    th = repmat(th,[1,1,np]);
+                end
+            end
+        end
+        if option.c    % If a prefered region is specified, the data is amplified accordingly
+            dh0 = dh0.*exp(-(th-option.c(1)).^2/2/option.c(2)^2)...
+                                    /option.c(2)/sqrt(2*pi)/2;
+        end
+
+        % Now the data is rescaled. the minimum is set to 0
+        % and the maximum to 1.
+        state = warning('query','MATLAB:divideByZero');
+        warning('off','MATLAB:divideByZero');
+        
+        % Let's first normalize all frames globally:
+        dh0 = (dh0-repmat(min(min(min(dh0,[],1),[],2),[],4),[nl0 nc 1 nd0]))./...
+            repmat(max(max(max(dh0,[],1),[],2),[],4)...
+                  -min(min(min(dh0,[],1),[],2),[],4),[nl0 nc 1 nd0]);
+        for l = 1:nd0 
+            [unused lowc] = find(max(dh0(:,:,:,l))<option.thr);
+            dh0(:,lowc,1,l) = 0;
+        end
+        
+        if strcmpi(option.normal,'Local')
+            % Normalizing each frame separately:
+            dh0 = (dh0-repmat(min(min(dh0,[],1),[],4),[nl0 1 1 nd0]))./... 
+                repmat(max(max(dh0,[],1),[],4)...
+                      -min(min(dh0,[],1),[],4),[nl0 1 1 nd0]);
+        end
+        warning(state.state,'MATLAB:divideByZero');
+
+        if option.nobegin
+            dh0 = [Inf(1,nc,np,nd0);dh0];   
+            % This infinite value at the beginning
+            % prevents the selection of the first sample of data
+            dh2 = [Inf(1,nc,np,nd0);dh2];
+            th = [NaN(1,nc,np,1);th];
+        else
+            dh0 = [-Inf(1,nc,np,nd0);dh0];
+            % This infinite negative value at the beginning
+            % ensures the selection of the first sample of data
+            dh2 = [-Inf(1,nc,np,nd0);dh2];
+            th = [NaN(1,nc,np,1);th];
+        end
+        if option.noend
+            dh0 = [dh0;Inf(1,nc,np,nd0)];
+            % idem for the last sample of data
+            dh2 = [dh2;Inf(1,nc,np,nd0)];
+            th = [th;NaN(1,nc,np,1)];
+        else
+            dh0 = [dh0;-Inf(1,nc,np,nd0)];
+            dh2 = [dh2;-Inf(1,nc,np,nd0)];
+            th = [th;NaN(1,nc,np,1)];
+        end
+        nl0 = nl0+2;
+
+        % Rearrange the 4th dimension (if used) into the 1st one.
+        nl = nl0*nd0;
+        dh = zeros(nl,nc,np);
+        dh3 = zeros(nl,nc,np);
+        th2 = zeros(nl,nc,np);
+        for l = 1:nd0
+            dh((l-1)*nl0+(1:nl0)',:,:) = dh0(:,:,:,l);
+            dh3((l-1)*nl0+(1:nl0)',:,:) = dh2(:,:,:,l);
+            th2((l-1)*nl0+(1:nl0)',:,:) = th(:,:,:);
+        end
+        
+        th = th2; % The X-abscissa
+
+        ddh = diff(dh);
+        % Let's find the local maxima
+        for l = 1:np
+            dl = dh(2:end-1,:,l);
+            for k = 1:nc
+                dk = dl(:,k);
+                mx{1,k,l} = find(and(and(dk >= option.cthr, ...
+                                         dk >= option.thr),...     
+                                         ... dk <= option.lthr)),
+                                     and(ddh(1:(end-1),k,l) > 0, ...
+                                         ddh(2:end,k,l) <= 0)))+1;
+            end
+        end
+        if option.cthr
+            for l = 1:np
+                for k = 1:nc
+                    finalmxk = [];
+                    mxk = mx{1,k,l};
+                    if not(isempty(mxk))
+                        wait = 0;
+                        if length(mxk)>5000
+                            wait = waitbar(0,['Selecting peaks... (0 out of 0)']);
+                        end
+                        %if option.m < Inf
+                        %    [unused,idx] = sort(dh(mxk,k,l),'descend'); % The peaks are sorted in decreasing order
+                        %    mxk = mxk(sort(idx(1:option.m)));
+                        %end
+                        j = 1;  % Scans the peaks from begin to end.
+                        mxkj = mxk(j); % The current peak
+                        jj = j+1;
+                        bufmin = Inf;
+                        bufmax = dh(mxkj,k,l);
+                        oldbufmin = min(dh(1:mxk(1)-1,k,l));
+                        while jj <= length(mxk)
+                            if wait && not(mod(jj,5000))
+                                waitbar(jj/length(mxk),wait,['Selecting peaks... (',num2str(length(finalmxk)),' out of ',num2str(jj),')']);
+                            end
+                            bufmin = min(bufmin, ...
+                                min(dh(mxk(jj-1)+1:mxk(jj)-1,k,l)));
+                            if bufmax - bufmin < option.cthr
+                                % There is no contrastive notch
+                                if dh(mxk(jj),k,l) > bufmax && ...
+                                        (dh(mxk(jj),k,l) - bufmax > option.first ...
+                                        || (bufmax - oldbufmin < option.cthr))
+                                    % If the new peak is significantly
+                                    % higher than the previous one,
+                                    % The peak is transfered to the new
+                                    % position
+                                    j = jj;
+                                    mxkj = mxk(j); % The current peak
+                                    bufmax = dh(mxkj,k,l);
+                                    oldbufmin = min(oldbufmin,bufmin);
+                                    bufmin = Inf;
+                                elseif dh(mxk(jj),k,l) - bufmax <= option.first
+                                    bufmax = max(bufmax,dh(mxk(jj),k,l));
+                                    oldbufmin = min(oldbufmin,bufmin);
+                                end
+                            else
+                                % There is a contrastive notch
+                                if bufmax - oldbufmin < option.cthr
+                                    % But the previous peak candidate
+                                    % is too weak and therefore
+                                    % discarded
+                                    oldbufmin = min(oldbufmin,bufmin);
+                                else
+                                    % The previous peak candidate is OK
+                                    % and therefore stored
+                                    finalmxk(end+1) = mxkj;
+                                    oldbufmin = bufmin;
+                                end
+                                bufmax = dh(mxk(jj),k,l);
+                                j = jj;
+                                mxkj = mxk(j); % The current peak
+                                bufmin = Inf;
+                            end
+                            jj = jj+1;
+                        end
+                        if bufmax - oldbufmin >= option.cthr && ...
+                                bufmax - min(dh(mxk(j)+1:end,k,l)) >= option.cthr
+                            % The last peak candidate is OK and stored
+                            finalmxk(end+1) = mxk(j);
+                        end
+                        if wait
+                            waitbar(1,wait);
+                            close(wait);
+                            drawnow
+                        end
+                    end
+                    mx{1,k,l} = finalmxk;
+                end
+            end
+        end
+        if not(isempty(option.scan)) % 'ScanForward' option, used for 'Klapuri99' in mironsets
+            for l = 1:np
+                for k = 1:nc   
+                    pscankl = pscan{i}{h}{1,k,l}; % scan seed positions
+                    mxkl = [];
+                    lp = length(pscankl); % number of peaks
+                    for jj = 1:lp         % for each peak
+                        fmx = find(mx{1,k,l}>pscankl(jj),1);
+                            % position of the next max following the
+                            % current seed
+                        fmx = mx{1,k,l}(fmx);
+                        if jj<lp && (isempty(fmx) || fmx>=pscankl(jj+1))
+                            [unused fmx] = max(dh(pscankl(jj):...
+                                                  pscankl(jj+1)-1,k,l));
+                            fmx = fmx+pscankl(jj)-1;
+                        elseif jj==lp && isempty(fmx)
+                            [unused fmx] = max(dh(pscankl(jj):end,k,l));
+                            fmx = fmx+pscankl(jj)-1;
+                        end
+                        mxkl = [mxkl fmx];
+                    end
+                    mx{1,k,l} = mxkl;
+                end
+            end
+        end
+        if not(isequal(option.reso,0)) % Removing peaks too close to higher peaks
+            if ischar(option.reso) && strcmpi(option.reso,'SemiTone')
+                compar = @semitone_compar;
+            elseif isnumeric(option.reso)
+                compar = @dist_compar;
+            end
+            for l = 1:np
+                for k = 1:nc
+                    mxlk = sort(mx{1,k,l});
+                    j = 1;
+                    while j < length(mxlk)-1
+                        if compar(th(mxlk(j+1),k,l),th(mxlk(j),k,l),option.reso)
+                            decreas = option.resofirst || ...
+                                dh(mxlk(j+1),k,l)<dh(mxlk(j),k,l);
+                            mxlk(j + decreas) = [];
+                        else
+                            j = j+1;
+                        end
+                    end
+                    if length(mxlk)>1 && compar(th(mxlk(end),k,l),...
+                                                 th(mxlk(end-1),k,l),...
+                                                 option.reso)
+                        decreas = not(option.resofirst) &&...
+                            dh(mxlk(end),k,l)>dh(mxlk(end-1),k,l);
+                        mxlk(end-decreas) = [];
+                    end
+                    mx{1,k,l} = mxlk;
+                end
+            end
+        end
+        if not(isnan(option.near)) % Finding a peak nearest a given prefered location
+            for l = 1:np
+                for k = 1:nc
+                    mxlk = mx{1,k,l};
+                    if strcmp(option.logsc,'Log')
+                        [M I] = min(abs(log(th(mxlk,k,l)/option.near)));
+                    else
+                        [M I] = min(abs(th(mxlk,k,l)-option.near));
+                    end
+                    mx{1,k,l} = mxlk(I);
+                end
+            end
+        end
+        if option.delta % Peak tracking
+            tp{i}{h} = cell(1,np);
+            if interpol
+                tpp{i}{h} = cell(1,np);
+                tpv{i}{h} = cell(1,np);
+            end
+            for l = 1:np
+                
+                % mxl will be the resulting track position matrix
+                % and myl the related track amplitude
+                % In the first frame, tracks can be identified to peaks.
+                mxl = mx{1,1,l}(:)-1;        
+                myl = dh(mx{1,1,l}(:),k,l); 
+                
+                % To each peak is associated the related track ID
+                tr2 = 1:length(mx{1,1,l});
+                
+                grvy = []; % The graveyard...
+                
+                wait = 0;
+                if nc-1>500
+                    wait = waitbar(0,['Tracking peaks...']);
+                end
+
+                for k = 1:nc-1
+                    % For each successive frame...
+                    
+                    if not(isempty(grvy))
+                        old = find(grvy(:,2) == k-option.mem-1);
+                        grvy(old,:) = [];
+                    end
+                    
+                    if wait && not(mod(k,100))
+                        waitbar(k/(nc-1),wait);
+                    end
+
+                    mxk1 = mx{1,k,l};   % w^k
+                    mxk2 = mx{1,k+1,l}; % w^{k+1}
+                    thk1 = th(mxk1,k,l);
+                    thk2 = th(mxk2,k,l);
+                    myk2 = dh(mx{1,k+1,l},k,l); % amplitude
+                    tr1 = tr2;
+                    tr2 = NaN(1,length(mxk2));
+                    
+                    mxl(:,k+1) = mxl(:,k);
+                                        
+                    if isempty(thk1) || isempty(thk2)
+                        %% IS THIS TEST NECESSARY??
+                        
+                        myl(:,k+1) = 0;
+                    else
+                        for n = 1:length(mxk1)
+                            % Let's check each track.
+                            tr = tr1(n); % Current track.
+
+                            if not(isnan(tr))
+                                % still alive...
+
+                                % Step 1 in Mc Aulay & Quatieri
+                                [int m] = min(abs(thk2-thk1(n)));
+                                if isinf(int) || int > option.delta
+                                    % all w^{k+1} outside matching interval:
+                                        % partial becomes dead
+                                    mxl(tr,k+1) = mxl(tr,k);
+                                    myl(tr,k+1) = 0;
+                                    grvy = [grvy; tr k]; % added to the graveyard
+                                else
+                                    % closest w^{k+1} is tentatively selected:
+                                        % candidate match
+
+                                    % Step 2 in Mc Aulay & Quatieri
+                                    [best mm] = min(abs(thk2(m)-th(mx{1,k,l})));
+                                    if mm == n
+                                        % no better match to remaining w^k:
+                                            % definite match
+                                        mxl(tr,k+1) = mxk2(m)-1;
+                                        myl(tr,k+1) = myk2(m);
+                                        tr2(m) = tr;
+                                        thk1(n) = -Inf; % selected w^k is eliminated from further consideration
+                                        thk2(m) = Inf;  % selected w^{k+1} is eliminated as well
+                                        if not(isempty(grvy))
+                                            zz = find ((mxl(grvy(:,1),k) >= mxl(tr,k) & ...
+                                                        mxl(grvy(:,1),k) <= mxl(tr,k+1)) | ...
+                                                       (mxl(grvy(:,1),k) <= mxl(tr,k) & ...
+                                                        mxl(grvy(:,1),k) >= mxl(tr,k+1)));
+                                            grvy(zz,:) = [];
+                                        end
+                                    else
+                                        % let's look at adjacent lower w^{k+1}...
+                                        [int mmm] = min(abs(thk2(1:m)-thk1(n)));
+                                        if int > best || ... % New condition added (Lartillot 16.4.2010)
+                                                isinf(int) || ... % Conditions proposed in Mc Aulay & Quatieri (all w^{k+1} below matching interval)
+                                                int > option.delta
+                                                % partial becomes dead
+                                            mxl(tr,k+1) = mxl(tr,k);
+                                            myl(tr,k+1) = 0;
+                                            grvy = [grvy; tr k]; % added to the graveyard
+                                        else
+                                            % definite match
+                                            mxl(tr,k+1) = mxk2(mmm)-1;
+                                            myl(tr,k+1) = myk2(mmm);
+                                            tr2(mmm) = tr;
+                                            thk1(n) = -Inf;     % selected w^k is eliminated from further consideration
+                                            thk2(mmm) = Inf;    % selected w^{k+1} is eliminated as well
+                                            if not(isempty(grvy))
+                                                zz = find ((mxl(grvy(:,1),k) >= mxl(tr,k) & ...
+                                                            mxl(grvy(:,1),k) <= mxl(tr,k+1)) | ...
+                                                           (mxl(grvy(:,1),k) <= mxl(tr,k) & ...
+                                                            mxl(grvy(:,1),k) >= mxl(tr,k+1)));
+                                                grvy(zz,:) = [];
+                                            end
+                                        end
+                                    end
+                                end
+                            end
+                        end
+                    end
+                    
+                    % Step 3 in Mc Aulay & Quatieri
+                    for m = 1:length(mxk2)
+                        if not(isinf(thk2(m)))
+                            % unmatched w^{k+1}
+                            
+                            if isempty(grvy)
+                                int = [];
+                            else
+                                % Let's try to reuse a zombie from the
+                                % graveyard (Lartillot).
+                                [int z] = min(abs(th(mxl(grvy(:,1),k+1)+1,k,l)-thk2(m)));
+                            end
+                            if isempty(int) || int > option.delta ...
+                                    || int > min(abs(th(mxl(:,k+1)+1,k,l)-thk2(m)))
+                                % No suitable zombie.
+                                % birth of a new partial (Mc Aulay &
+                                % Quatieri)
+                                mxl = [mxl;zeros(1,k+1)];
+                                tr = size(mxl,1);
+                                mxl(tr,k) = mxk2(m)-1;
+                            else
+                                % Suitable zombie found. (Lartillot)
+                                tr = grvy(z,1);
+                                grvy(z,:) = [];
+                            end
+                            mxl(tr,k+1) = mxk2(m)-1;
+                            myl(tr,k+1) = myk2(m);
+                            tr2(m) = tr;
+                        end
+                    end
+                end
+                
+                if wait
+                    waitbar(1,wait);
+                    close(wait);
+                    drawnow
+                end
+
+                if size(mxl,1) > option.m
+                    tot = sum(myl,2);
+                    [tot ix] = sort(tot,'descend');
+                    mxl(ix(option.m+1:end),:) = [];
+                    myl(ix(option.m+1:end),:) = [];
+                end
+                
+                mxl(:,not(max(myl))) = 0;
+                
+                if option.shorttrackthresh
+                    [myl bestrack] = max(myl,[],1);
+                    mxl = mxl(bestrack + (0:size(mxl,2)-1)*size(mxl,1));
+                    changes = find(not(bestrack(1:end-1) == bestrack(2:end)))+1;
+                    if not(isempty(changes))
+                        lengths = diff([1 changes nc+1]);
+                        shorts = find(lengths < option.shorttrackthresh);
+                        for k = 1:length(shorts)
+                            if shorts(k) == 1
+                                k1 = 1;
+                            else
+                                k1 = changes(shorts(k)-1);
+                            end
+                            k2 = k1 + lengths(shorts(k)) -1;
+                            myl(1,k1:k2) = 0;
+                            mxl(1,k1:k2) = 0;
+                        end
+                    end
+                end
+                
+                tp{i}{h}{l} = mxl;
+                tv{i}{h}{l} = myl;
+                
+                if interpol  
+                    tpv{i}{h}{l} = zeros(size(mxl));
+                    tpp{i}{h}{l} = zeros(size(mxl));
+                    for k = 1:size(mxl,2)
+                        for j = 1:size(mxl,1)
+                            mj = mxl(j,k);
+                            if mj>2 && mj<size(dh3,1)-1
+                                % More precise peak position
+                                y0 = dh3(mj,k,l);
+                                ym = dh3(mj-1,k,l);
+                                yp = dh3(mj+1,k,l);
+                                p = (yp-ym)/(2*(2*y0-yp-ym));
+                                tpv{i}{h}{l}(j,k) = y0 - 0.25*(ym-yp)*p;
+                                if p >= 0
+                                    tpp{i}{h}{l}(j,k) = (1-p)*th(mj,k,l)+p*th(mj+1,k,l);
+                                elseif p < 0
+                                    tpp{i}{h}{l}(j,k) = (1+p)*th(mj,k,l)-p*th(mj-1,k,l);
+                                end
+                            elseif mj
+                                tpv{i}{h}{l}(j,k) = dh3(mj,k,l);
+                                tpp{i}{h}{l}(j,k) = th(mj,k,l);
+                            end
+                        end
+                    end
+                end
+            end
+        end
+        if isa(x,'mirsimatrix') && option.graph
+            % Finding the best branch inside a graph constructed out of a
+            % similarity matrix
+            g{i}{h} = cell(1,nc,np);
+                % Branch info related to each peak
+            br{i}{h} = {};
+                % Info related to each branch
+            scog{i}{h} = cell(1,nc,np);
+                % Score related to each peak
+            scob{i}{h} = [];
+                % Score related to each branch
+            for l = 1:np
+                wait = waitbar(0,['Creating peaks graph...']);
+                for k = 1:nc
+                    g{i}{h}{1,k,l} = cell(size(mx{1,k,l}));
+                    scog{i}{h}{1,k,l} = zeros(size(mx{1,k,l}));
+                    if wait && not(mod(k,50))
+                        waitbar(k/(nc-1),wait);
+                    end
+                    mxk = mx{1,k,l}; % Peaks in current frame
+                    for j = k-1:-1:max(1,k-100) % Recent frames
+                        mxj = mx{1,j,l};        % Peaks in one recent frame
+                        for kk = 1:length(mxk)
+                            mxkk = mxk(kk);     % For each of current peaks
+                            for jj = 1:length(mxj)
+                                mxjj = mxj(jj); % For each of recent peaks
+                                sco = k-j - abs(mxkk-mxjj);
+                                    % Crossprogression from recent to
+                                    % current peak
+                                if sco >= 0 
+                                        % Negative crossprogression excluded
+                                    dist = 0;
+                                    % The distance between recent and
+                                    % current peak is the sum of all the
+                                    % simatrix values when joining the two
+                                    % peaks with a straight line.
+                                    for m = j:k
+                                        % Each point in that straight line.
+                                        mxm = mxjj + (mxkk-mxjj)*(m-j)/(k-j);
+                                        if mxm == floor(mxm)
+                                            dist = dist + 1-dh(mxm,m,l);
+                                        else
+                                            dhm0 = dh(floor(mxm),m,l);
+                                            dhm1 = dh(ceil(mxm),m,l);
+                                            dist = dist + 1-...
+                                                (dhm0 + ...
+                                                 (dhm1-dhm0)*(mxm-floor(mxm)));
+                                        end
+                                        if dist > option.graph
+                                            break
+                                        end
+                                    end
+                                    if dist < option.graph
+                                        % If the distance between recent
+                                        % and current peak is not too high,
+                                        % a new edge is formed between the
+                                        % peaks, and added to the graph.
+                                        gj = g{i}{h}{1,j,l}{jj};
+                                            % Branch information associated
+                                            % with recent peak
+                                        gk = g{i}{h}{1,k,l}{kk};
+                                            % Branch information associated
+                                            % with current peak
+                                        if isempty(gk) || ...
+                                                sco > scog{i}{h}{1,k,l}(kk)
+                                            % Current peak branch to be updated
+                                            if isempty(gj)
+                                                % New branch starting
+                                                % from scratch
+                                                newsco = sco;
+                                                scob{i}{h}(end+1) = newsco;
+                                                bid = length(scob{i}{h});
+                                                g{i}{h}{1,j,l}{jj} = ...
+                                                    [k kk bid newsco];
+                                                br{i}{h}{bid} = [j jj;k kk];
+                                            else
+                                                newsco = scog{i}{h}{1,j,l}(jj)+sco;
+                                                if length(gj) == 1
+                                                    % Recent peak not
+                                                    % associated with other
+                                                    % branch
+                                                    % -> Branch extension
+                                                    bid = gj;
+                                                    g{i}{h}{1,j,l}{jj} = ...
+                                                        [k kk bid newsco];
+                                                    br{i}{h}{bid}(end+1,:) = [k kk];
+                                                else
+                                                    % Recent peak already
+                                                    % associated with other
+                                                    % branch
+                                                    % -> Branch fusion
+                                                    bid = length(scob{i}{h})+1;
+                                                    g{i}{h}{1,j,l}{jj} = ...
+                                                        [k kk bid newsco; gj];
+                                                    other = br{i}{h}{gj(1,3)};
+                                                        % Other branch
+                                                        % info
+                                                        % Let's copy its
+                                                        % prefix to the new
+                                                        % branch:
+                                                    other(other(:,1)>j,:) = [];
+                                                    br{i}{h}{bid} = [other;k kk];
+                                                end
+                                                scob{i}{h}(bid) = newsco;
+                                            end
+                                            g{i}{h}{1,k,l}{kk} = bid;
+                                                % New peak associated with
+                                                % branch
+                                            scog{i}{h}{1,k,l}(kk) = newsco;
+                                        end
+                                    end
+                                end
+                            end
+                        end
+                    end
+                end
+                [scob{i}{h} IX] = sort(scob{i}{h},'descend');
+                    % Branch are ordered from best score to lowest
+                br{i}{h} = br{i}{h}(IX);
+                if wait
+                    waitbar(1,wait);
+                    close(wait);
+                    drawnow
+                end
+            end
+        end
+        for l = 1:np % Orders the peaks and select the best ones
+            for k = 1:nc
+                mxk = mx{1,k,l};
+                if length(mxk) > option.m 
+                    [unused,idx] = sort(dh(mxk,k,l),'descend');
+                    idx = idx(1:option.m);
+                elseif strcmpi(option.order,'Amplitude')
+                    [unused,idx] = sort(dh(mxk,k,l),'descend');
+                else
+                    idx = 1:length(dh(mxk,k,l));
+                end
+                if strcmpi(option.order,'Abscissa')
+                    mx{1,k,l} = sort(mxk(idx));
+                elseif strcmpi(option.order,'Amplitude')
+                    mx{1,k,l} = mxk(idx);
+                end
+            end
+        end
+        if option.extract % Extracting the positive part of the curve containing the peaks
+            if isa(x,'mirtemporal')
+                filn = floor(sr{i}/25);
+            else
+                filn = 10;
+            end
+            if filn>1 && size(dh3,1)>5
+                filn = min(filn,floor(size(dh3,1)/3));
+                fild = filtfilt(ones(1,filn)/2,1,dh3(2:end-1,:,:))/filn/2;
+            else
+                fild = dh3(2:end-1,:,:);
+            end
+            fild = [zeros(1,size(fild,2),size(fild,3));diff(fild)];
+            for l = 1:np
+                for k = 1:nc
+                    idx = 1:size(dh,1);
+                    mxlk = sort(mx{1,k,l}-1);
+                    for j = 1:length(mxlk)
+                        
+                        if fild(mxlk(j),k,l) < 0
+                            bef0 = find(fild(1:mxlk(j)-1,k,l)>=0);
+                            if isempty(bef0)
+                                bef0 = [];
+                            end
+                        else
+                            bef0 = mxlk(j)-1;
+                        end
+                        if isempty(bef0)
+                            bef = 0;
+                        else
+                            bef = find(fild(1:bef0(end),k,l)<=0);
+                            if isempty(bef)
+                                bef = 0;
+                            end
+                        end
+                        if j>1 && bef(end)<aft(1)+2
+                            idx(mxlk(j-1):mxlk(j)) = 0;
+                            [unused btw] = min(dh3(mxlk(j-1)+1:mxlk(j)+1,k,l));
+                            btw = btw+mxlk(j-1);
+                            idx(btw-2:btw+2) = btw-2:btw+2;
+                            bef = btw+2;
+                        end
+                        
+                        if fild(mxlk(j),k,l) > 0
+                            aft0 = find(fild(mxlk(j)+1:end,k,l)<=0)+mxlk(j);
+                            if isempty(aft0)
+                                aft0 = [];
+                            end
+                        else
+                            aft0 = mxlk(j)+1;
+                        end
+                        if isempty(aft0)
+                            aft = size(d{i}{h},1)+1;
+                        else
+                            aft = find(fild(aft0(1):end,k,l)>=0)+mxlk(j);
+                            if isempty(aft)
+                                aft = size(d{i}{h},1)+1;
+                            end
+                        end
+                        
+                        idx(bef(end)+3:aft(1)-3) = 0;
+                    end
+                    idx = idx(find(idx));
+                    dh3(idx,k,l) = NaN;
+                end
+            end
+        end
+        if option.vall
+            dh3 = -dh3;
+        end
+        mmx = cell(1,nc,np);
+        mmy = cell(1,nc,np);
+        mmv = cell(1,nc,np);
+        for l = 1:np
+            for k = 1:nc
+                mmx{1,k,l} = mod(mx{1,k,l}(:,:,1),nl0)-1;
+                mmy{1,k,l} = ceil(mx{1,k,l}/nl0);
+                mmv{1,k,l} = dh3(mx{1,k,l}(:,:,1),k,l);
+            end
+        end
+        pp{i}{h} = mmx;
+        pm{i}{h} = mmy;
+        pv{i}{h} = mmv;
+        if not(interpol)
+            ppp{i}{h} = {};
+            ppv{i}{h} = {};
+        else % Interpolate to find the more exact peak positions
+            pih = cell(1,nc,np);
+            vih = cell(1,nc,np);
+            for l = 1:np
+                for k = 1:nc
+                    mxlk = mx{1,k,l};
+                    vih{1,k,l} = zeros(length(mxlk),1);
+                    pih{1,k,l} = zeros(length(mxlk),1);
+                    for j = 1:length(mxlk)
+                        mj = mxlk(j); % Current values
+                        if strcmpi(option.interpol,'quadratic')
+                            if mj>2 && mj<length(dh3)-1
+                                % More precise peak position
+                                y0 = dh3(mj,k,l);
+                                ym = dh3(mj-1,k,l);
+                                yp = dh3(mj+1,k,l);
+                                p = (yp-ym)/(2*(2*y0-yp-ym));
+                                vih{1,k,l}(j) = y0 - 0.25*(ym-yp)*p;
+                                if p >= 0
+                                    pih{1,k,l}(j) = (1-p)*th(mj,k,l)+p*th(mj+1,k,l);
+                                elseif p < 0
+                                    pih{1,k,l}(j) = (1+p)*th(mj,k,l)-p*th(mj-1,k,l);
+                                end
+                            else
+                                vih{1,k,l}(j) = dh3(mj,k,l);
+                                pih{1,k,l}(j) = th(mj,k,l);
+                            end
+                        end
+                    end
+                end
+            end
+            ppp{i}{h} = pih;
+            ppv{i}{h} = vih;
+        end
+        if not(iscell(d{i})) % for chromagram
+            d{i} = dh3(2:end-1,:,:,:);
+        else
+            if cha == 1
+                d{i}{h} = zeros(1,size(dh3,2),size(dh3,1)-2);
+                for k = 1:size(dh3,2)
+                     d{i}{h}(1,k,:) = dh3(2:end-1,k);
+                end
+            else
+                d{i}{h} = dh3(2:end-1,:,:,:);
+            end
+        end
+        if option.only
+            dih = zeros(size(d{i}{h}));
+            for l = 1:np
+                for k = 1:nc
+                    dih(pp{i}{h}{1,k,l},k,l) = ...
+                        d{i}{h}(pp{i}{h}{1,k,l},k,l);
+                end
+            end
+            d{i}{h} = dih;
+        end
+    end
+end
+p = set(x,'PeakPos',pp,'PeakVal',pv,'PeakMode',pm);
+if interpol
+   p = set(p,'PeakPrecisePos',ppp,'PeakPreciseVal',ppv);
+end
+if option.extract
+    p = set(p,'Data',d);
+end
+empty = cell(1,length(d));
+if option.only
+    p = set(p,'Data',d,'PeakPos',empty,'PeakVal',empty,'PeakMode',empty);
+end
+if option.delta
+    p = set(p,'TrackPos',tp,'TrackVal',tv);
+    if interpol
+       p = set(p,'TrackPrecisePos',tpp,'TrackPreciseVal',tpv);
+    end
+end
+if isa(x,'mirsimatrix') && option.graph
+    p = set(p,'Graph',g,'Branch',br);
+end
+
+
+function y = semitone_compar(p1,p2,thres)
+y = p1/p2 < 2^(1/12);
+
+
+function y = dist_compar(p1,p2,thres)
+y = p1-p2 < thres;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirplay.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,183 @@
+function varargout = mirplay(a,varargin)
+%   mirplay(a) plays audio signal, envelope, or pitches.
+%       If a is an envelope, what is actually played is a white noise of
+%           same envelope.
+%       If a is a mirpitch object, pitches are played using sinusoids.
+%   Optional arguments:
+%       mirplay(...,'Channel',i) plays the channel(s) of rank(s) indicated by 
+%           the array i.
+%       mirplay(...,'Segment',k) plays the segment(s) of rank(s) indicated by 
+%           the array k.
+%       mirplay(...,'Sequence',l) plays the sequence(s) of rank(s) indicated
+%           by the array l.
+%       mirplay(...,'Increasing',d) plays the sequences in increasing order
+%           of d, which could be either an array or a mirscalar data.
+%       mirplay(...,'Decreasing',d) plays the sequences in decreasing order
+%           of d, which could be either an array or a mirscalar data.
+%       mirplay(...,'Every',s) plays every s sequence, where s is a number
+%           indicating the step between sequences.
+%       mirplay(...,'Burst',0) toggles off the burst sound between
+%           segments.
+%       Example: mirplay(mirenvelope('Folder'),...
+%                        'increasing', mirrms('Folder'),...
+%                        'every',5)
+
+if ischar(a)
+    varargout = mirplay(miraudio(a),varargin{:});
+elseif isscalar(a)
+            ch.key = 'Channel';
+            ch.type = 'Integer';
+            ch.default = 0;
+        option.ch = ch;
+
+            sg.key = 'Segment';
+            sg.type = 'Integer';
+            sg.default = 0;
+        option.sg = sg;
+
+            se.key = 'Sequence';
+            se.type = 'Integer';
+            se.default = 0;
+        option.se = se;
+
+            inc.key = 'Increasing';
+            inc.type = 'MIRtb';
+        option.inc = inc;
+
+            dec.key = 'Decreasing';
+            dec.type = 'MIRtb';
+        option.dec = dec;
+
+            every.key = 'Every';
+            every.type = 'Integer';
+        option.every = every;
+
+            burst.key = 'Burst';
+            burst.type = 'Boolean';
+            burst.default = 1;
+        option.burst = burst;
+
+    specif.option = option;
+
+    specif.eachchunk = 'Normal';
+
+    varargout = mirfunction(@mirplay,a,varargin,nargout,specif,@init,@main);
+    if nargout == 0
+        varargout = {};
+    end
+else
+    mirerror('mirplay','You cannot play this type of object.')
+end
+
+
+function [x type] = init(x,option)
+type = '';
+
+
+function noargout = main(a,option,postoption)
+if iscell(a)
+    a = a{1};
+end
+d = get(a,'Data');
+if isa(a,'mirpitch')
+    amp = get(a,'Amplitude');
+end
+f = get(a,'Sampling');
+n = get(a,'Name');
+c = get(a,'Channels');
+fp = get(a,'FramePos');
+if not(option.se)
+    if length(d)>1
+        if isfield(option,'inc')
+            [unused order] = sort(mirgetdata(option.inc));
+        elseif isfield(option,'dec')
+            [unused order] = sort(mirgetdata(option.dec),'descend');
+        else
+            order = 1:length(d);
+        end
+        if isfield(option,'every')
+            order = order(1:option.every:end);
+        end
+    else
+        order = 1;
+    end
+else
+    order = option.se;
+end
+if not(isempty(order))
+    for k = order(:)'
+        display(['Playing analysis of file: ' n{k}])   
+        dk = d{k};
+        if not(iscell(dk))
+            dk = {dk};
+        end
+        if option.ch
+            if isempty(c{k})
+                chk = option.ch;
+            else
+                [unused unused chk] = intersect(option.ch,c{k});
+            end
+        else
+            chk = 1:size(dk{1},3);
+        end
+        if isempty(chk)
+            display('No channel to play.');
+        end
+        for l = chk
+            if chk(end)>1
+                display(['  Playing channel #' num2str(l)]);
+            end
+            if option.sg
+                sgk = option.sg(find(option.sg<=length(dk)));
+            else
+                sgk = 1:length(dk);
+            end
+            for i = sgk
+                if sgk(end)>1
+                    display(['      Playing segment #' num2str(i)])
+                end
+                di = dk{i};
+                if isa(a,'mirpitch')
+                    ampi = amp{k}{i};
+                end
+                synth = zeros(1,ceil((fp{k}{i}(end)-fp{k}{i}(1))*44100)+1);
+                for j = 1:size(di,2)
+                    if iscell(di)
+                        dj = di{j};
+                    else
+                        dj = di(:,j);
+                    end
+                    dj(isnan(dj)) = 0;
+                    if isa(a,'mirpitch')
+                        ampj = zeros(size(dj));
+                        if iscell(ampi)
+                            ampj(1:size(ampi{j})) = ampi{j};
+                        else
+                            ampj(1:size(ampi(:,j))) = ampi(:,j);
+                        end
+                    end
+                    if not(isempty(dj))
+                        k1 = floor((fp{k}{i}(1,j)-fp{k}{i}(1))*44100)+1;
+                        k2 = floor((fp{k}{i}(2,j)-fp{k}{i}(1))*44100)+1;
+                        if isa(a,'mirpitch')
+                            ampj = repmat(ampj,1,k2-k1+1);
+                        else
+                            ampj = ones(size(dj),k2-k1+1);
+                        end
+                        synth(k1:k2) = synth(k1:k2) ...
+                            + sum(ampj.*sin(2*pi*dj*(0:k2-k1)/44100),1) ...
+                                    .*hann(k2-k1+1)';
+                        %plot((ampj.*sin(2*pi*dj*(0:k2-k1)/44100))')
+                        %drawnow
+                    end
+                end
+                soundsc(synth,44100);
+                if option.burst && sgk(end)>1
+                    sound(rand(1,10))
+                end
+                %pause(0.5)
+            end
+        end
+    end
+end
+noargout = {};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirpulseclarity.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,450 @@
+function varargout = mirpulseclarity(orig,varargin)
+%   r = mirpulseclarity(x) estimates the rhythmic clarity, indicating the
+%       strength of the beats estimated by the mirtempo function.
+%   Optional arguments:
+%       mirpulseclarity(...,s): specifies a strategy for pulse clarity
+%           estimation.
+%           Possible values: 'MaxAutocor' (default), 'MinAutocor',
+%               'KurtosisAutocor', MeanPeaksAutocor', 'EntropyAutocor', 
+%               'InterfAutocor', 'TempoAutocor', 'ExtremEnvelop', 
+%               'Attack', 'Articulation'
+%       mirpulseclarity(...,'Frame',l,h): orders a frame decomposition of
+%           the audio input of window length l (in seconds) and hop factor
+%           h, expressed relatively to the window length.
+%           Default values: l = 5 seconds and h = .1
+%       Onset detection strategies: 'Envelope' (default), 'DiffEnvelope', 
+%           'SpectralFlux', 'Pitch'.
+%       Options related to the autocorrelation computation can be specified
+%           as well: 'Min', 'Max', 'Resonance', 'Enhanced'
+%       Options related to the tempo estimation can be specified here
+%           as well: 'Sum', 'Total', 'Contrast'.
+%       cf. User's Manual for more details.
+%   [r,a] = mirpulseclarity(x) also returns the beat autocorrelation.
+        
+        model.key = 'Model';
+        model.type = 'Integer';
+        model.default = 0;
+    option.model = model;
+
+        stratg.type = 'String';
+        stratg.choice = {'MaxAutocor','MinAutocor','MeanPeaksAutocor',...
+                         'KurtosisAutocor','EntropyAutocor',...
+                         'InterfAutocor','TempoAutocor','ExtremEnvelop',...
+                         'Attack','Articulation'};    ...,'AttackDiff'
+        stratg.default = 'MaxAutocor';
+    option.stratg = stratg;
+
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.keydefault = [5 .1];
+        frame.default = [0 0];
+    option.frame = frame;
+        
+%% options related to mironsets:  
+
+        fea.type = 'String';
+        fea.choice = {'Envelope','DiffEnvelope','SpectralFlux','Pitch'};
+        fea.default = 'Envelope';
+    option.fea = fea;
+    
+    
+    %% options related to 'Envelope':
+    
+            envmeth.key = 'Method';
+            envmeth.type = 'String';
+            envmeth.choice = {'Filter','Spectro'};
+            envmeth.default = 'Spectro';
+        option.envmeth = envmeth;
+
+            %% options related to 'Filter':
+
+                ftype.key = 'FilterType';
+                ftype.type = 'String';
+                ftype.choice = {'IIR','HalfHann'};
+                ftype.default = 'IIR';
+            option.ftype = ftype;
+
+                fb.key = 'Filterbank';
+                fb.type = 'Integer';
+                fb.default = 20;
+            option.fb = fb;
+
+                fbtype.key = 'FilterbankType';
+                fbtype.type = 'String';
+                fbtype.choice = {'Gammatone','Scheirer','Klapuri'};
+                fbtype.default = 'Scheirer';
+            option.fbtype = fbtype;
+
+            %% options related to 'Spectro':
+
+                band.type = 'String';
+                band.choice = {'Freq','Mel','Bark','Cents'};
+                band.default = 'Freq';
+            option.band = band;
+
+
+            diffhwr.key = 'HalfwaveDiff';
+            diffhwr.type = 'Integer';
+            diffhwr.default = 0;
+            diffhwr.keydefault = 1;
+        option.diffhwr = diffhwr;
+
+            lambda.key = 'Lambda';
+            lambda.type = 'Integer';
+            lambda.default = 1;
+        option.lambda = lambda;
+
+            aver.key = 'Smooth';
+            aver.type = 'Integer';
+            aver.default = 0;
+            aver.keydefault = 30;
+        option.aver = aver;
+
+            oplog.key = 'Log';
+            oplog.type = 'Boolean';
+            oplog.default = 0;
+        option.log = oplog;
+        
+            mu.key = 'Mu';
+            mu.type = 'Boolean';
+            mu.default = 1;
+        option.mu = mu;
+
+    %% options related to 'SpectralFlux'
+    
+            inc.key = 'Inc';
+            inc.type = 'Boolean';
+            inc.default = 1;
+        option.inc = inc;
+
+            median.key = 'Median';
+            median.type = 'Integer';
+            median.number = 2;
+            median.default = [0 0]; % Not same default as in mirtempo
+        option.median = median;
+
+            hw.key = 'Halfwave';
+            hw.type = 'Boolean';
+            hw.default = 0; %NaN; %0; % Not same default as in mirtempo
+        option.hw = hw;    
+        
+    
+%% options related to mirattackslope
+        slope.type = 'String';
+        slope.choice = {'Diff','Gauss'};
+        slope.default = 'Diff';
+    option.slope = slope;
+    
+%% options related to mirautocor:    
+    
+        enh.key = 'Enhanced';
+        enh.type = 'Integers';
+        enh.default = [];
+        enh.keydefault = 2:10;
+    option.enh = enh;
+    
+        r.key = 'Resonance';
+        r.type = 'String';
+        r.choice = {'ToiviainenSnyder','vonNoorden',0,'off','no'};
+        r.default = 'ToiviainenSnyder';
+    option.r = r;
+        
+        mi.key = 'Min';
+        mi.type = 'Integer';
+        mi.default = 40;
+    option.mi = mi;
+        
+        ma.key = 'Max';
+        ma.type = 'Integer';
+        ma.default = 200;
+    option.ma = ma;    
+
+%% options related to mirtempo:
+
+        sum.key = 'Sum';
+        sum.type = 'String';
+        sum.choice = {'Before','After','Adjacent'};
+        sum.default = 'Before';
+    option.sum = sum;
+    
+        m.key = 'Total';
+        m.type = 'Integer';
+        m.default = 1;
+    option.m = m;
+        
+        thr.key = 'Contrast';
+        thr.type = 'Integer';
+        thr.default = 0.01; % Not same default as in mirtempo
+    option.thr = thr;
+
+specif.option = option;
+
+varargout = mirfunction(@mirpulseclarity,orig,varargin,nargout,specif,@init,@main);
+
+
+
+%% Initialisation
+
+function [x type] = init(x,option)
+%if isframed(x)
+%    warning('WARNING IN MIRPULSECLARITY: The input should not be already decomposed into frames.');
+%    disp(['Suggestion: Use the ''Frame'' option instead.'])
+%end
+if iscell(x)
+    x = x{1};
+end
+if isamir(x,'mirautocor')
+    type = {'mirscalar','mirautocor'};
+elseif length(option.model) > 1
+    a = x;
+    type = {'mirscalar'};
+    for m = 1:length(option.model)
+        if option.frame.length.val
+            y = mirpulseclarity(a,'Model',option.model(m),...
+                                  'Frame',option.frame.length.val,...
+                                          option.frame.length.unit,...
+                                          option.frame.hop.val,...
+                                          option.frame.hop.unit);
+        else
+            y = mirpulseclarity(a,'Model',option.model(m));
+        end
+        if m == 1
+            x = y;
+        else
+            x = x + y;
+        end
+    end
+else
+    if option.model
+        switch option.model
+            case 1
+            case 2
+                option.envmeth = 'Filter';
+                option.fbtype = 'Gammatone';
+                option.mu = 0;
+                option.r = 0;
+                option.lambda = .8;
+                option.sum = 'After';
+        end
+    end
+    if length(option.stratg)>7 && strcmpi(option.stratg(end-6:end),'Autocor')
+        if (strcmpi(option.stratg,'MaxAutocor') || ...
+            strcmpi(option.stratg,'MinAutocor') || ...
+            strcmpi(option.stratg,'EntropyAutocor'))
+            option.m = 0;
+        end
+        if strcmpi(option.stratg,'MinAutocor')
+            option.enh = 0;
+        end
+        if option.frame.length.val
+            [t,x] = mirtempo(x,option.fea,'Method',option.envmeth,...
+                       option.band,...
+                       'Sum',option.sum,'Enhanced',option.enh,...
+                       'Resonance',option.r,'Smooth',option.aver,...
+                       'HalfwaveDiff',option.diffhwr,...
+                       'Lambda',option.lambda,...
+                       'Frame',option.frame.length.val,...
+                               option.frame.length.unit,...
+                               option.frame.hop.val,...
+                               option.frame.hop.unit,...
+                       'FilterbankType',option.fbtype,...
+                       'FilterType',option.ftype,...
+                       'Filterbank',option.fb,'Mu',option.mu,...
+                       'Log',option.log,...
+                       'Inc',option.inc,'Halfwave',option.hw,...
+                       'Median',option.median(1),option.median(2),...
+                       'Min',option.mi,'Max',option.ma,...
+                       'Total',option.m,'Contrast',option.thr);
+        else
+            [t,x] = mirtempo(x,option.fea,'Method',option.envmeth,...
+                       option.band,...
+                       'Sum',option.sum,'Enhanced',option.enh,...
+                       'Resonance',option.r,'Smooth',option.aver,...
+                       'HalfwaveDiff',option.diffhwr,...
+                       'Lambda',option.lambda,...
+                       'FilterbankType',option.fbtype,...
+                       'FilterType',option.ftype,...
+                       'Filterbank',option.fb,'Mu',option.mu,...
+                       'Log',option.log,...
+                       'Inc',option.inc,'Halfwave',option.hw,...
+                       'Median',option.median(1),option.median(2),...
+                       'Min',option.mi,'Max',option.ma,...
+                       'Total',option.m,'Contrast',option.thr);
+        end
+        type = {'mirscalar','mirautocor'};
+    elseif strcmpi(option.stratg,'ExtremEnvelop')
+        x = mironsets(x,'Filterbank',option.fb);
+        type = {'mirscalar','mirenvelope'};
+    elseif strcmpi(option.stratg,'Attack')
+        x = mirattackslope(x,option.slope);
+        type = {'mirscalar','mirenvelope'};
+%    elseif strcmpi(option.stratg,'AttackDiff')
+%        type = {'mirscalar','mirenvelope'};
+    elseif strcmpi(option.stratg,'Articulation')
+        x = mirlowenergy(x,'ASR');
+        type = {'mirscalar','mirscalar'};
+    else
+        type = {'mirscalar','miraudio'};
+    end
+end
+
+
+
+%% Main function
+
+function o = main(a,option,postoption)
+if option.model == 2
+    option.stratg = 'InterfAutocor';
+end
+if isa(a,'mirscalar') && not(strcmpi(option.stratg,'Attack')) % not very nice test... to improve.
+    o = {a};
+    return
+end
+if option.m == 1 && ...
+        (strcmpi(option.stratg,'InterfAutocor') || ...
+         strcmpi(option.stratg,'MeanPeaksAutocor'))
+    option.m = Inf;
+end
+if iscell(a)
+    a = a{1};
+end
+if strcmpi(option.stratg,'MaxAutocor')
+    d = get(a,'Data');
+    rc = mircompute(@max,d);
+elseif strcmpi(option.stratg,'MinAutocor')
+    d = get(a,'Data');
+    rc = mircompute(@minusmin,d);
+elseif strcmpi(option.stratg,'MeanPeaksAutocor')
+    m = get(a,'PeakVal');
+    rc = mircompute(@meanpeaks,m);    
+elseif strcmpi(option.stratg,'KurtosisAutocor')
+    a = mirpeaks(a,'Extract','Total',option.m,'NoBegin','NoEnd');
+    k = mirkurtosis(a);
+    %d = get(k,'Data');
+    %rc = mircompute(@meanpeaks,d);
+    rc = mirmean(k);
+elseif strcmpi(option.stratg,'EntropyAutocor')
+    rc = mirentropy(a);
+elseif strcmpi(option.stratg,'InterfAutocor')
+    a = mirpeaks(a,'Total',option.m,'NoBegin','NoEnd');
+    m = get(a,'PeakVal');
+    p = get(a,'PeakPosUnit');
+    rc = mircompute(@interf,m,p);
+elseif strcmpi(option.stratg,'TempoAutocor')
+    a = mirpeaks(a,'Total',1,'NoBegin','NoEnd');
+    p = get(a,'PeakPosUnit');
+    rc = mircompute(@tempo,p);
+elseif strcmpi(option.stratg,'ExtremEnvelop')
+    a = mirenvelope(a,'Normal');
+    p = mirpeaks(a,'Order','Abscissa');
+    p = get(p,'PeakPreciseVal');
+    n = mirpeaks(a,'Valleys','Order','Abscissa');
+    n = get(n,'PeakPreciseVal');
+    rc = mircompute(@shape,p,n);
+elseif strcmpi(option.stratg,'Attack')
+    rc = mirmean(a);
+%elseif strcmpi(option.stratg,'AttackDiff')
+%    a = mirpeaks(a);
+%    m = get(a,'PeakVal');
+%    rc = mircompute(@meanpeaks,m);    
+elseif strcmpi(option.stratg,'Articulation')
+    rc = a;
+end
+
+if iscell(rc)
+    pc = mirscalar(a,'Data',rc,'Title','Pulse clarity');
+else
+    pc = set(rc,'Title',['Pulse clarity (',get(rc,'Title'),')']);
+end
+
+if option.model
+    switch option.model
+        case 1
+            alpha = 0;
+            beta = 2.2015;
+            lambda = .1;
+        case 2
+            alpha = 0;
+            beta = 3.5982;
+            lambda = 1.87;
+    end
+    if not(lambda == 0)
+        pc = (pc+alpha)^lambda * beta;
+    else
+        pc = log(pc+alpha) * beta;
+    end
+    title = ['Pulse clarity (Model ',num2str(option.model),')'];
+    pc = set(pc,'Title',title);
+end
+
+o = {pc a};
+
+
+%% Routines
+
+function r  = shape(p,n)
+p = p{1};
+n = n{1};
+if length(p)>length(n)
+    d = sum(p(1:end-1) - n) + sum(p(2:end) - n);
+    r  = d/(2*length(n));
+elseif length(p)<length(n)
+    d = sum(p - n(1:end-1)) + sum(p - n(2:end));
+    r  = d/(2*length(p));
+else
+    d = sum(p(2:end) - n(1:end-1)) + sum(p(1:end-1) - n(2:end));
+    r  = d/(2*(length(p)-1));
+end
+
+
+function rc = minusmin(ac)
+rc = -min(ac);
+
+
+function rc = meanpeaks(ac)
+rc = zeros(1,length(ac));
+for j = 1:length(ac)
+    if isempty(ac{j})
+        rc(j) = NaN;
+    else
+        rc(j) = mean(ac{j});
+    end
+end
+
+
+function rc = interf(mk,pk)
+rc = zeros(size(mk));
+for j = 1:size(mk,3)
+    for i = 1:size(mk,2)
+        pij = pk{1,i,j};
+        mij = mk{1,i,j};
+        if isempty(pij)
+            rc(1,i,j) = 0;
+        else
+            high = max(pij(2:end),pij(1));
+            low = min(pij(2:end),pij(1));
+            quo = rem(high,low)./low;
+            nomult = quo>.15 & quo<.85;
+            fij = mij(2:end)/mij(1) .*nomult;
+            fij(fij<0) = 0;
+            rc(1,i,j) = exp(-sum(fij)/4); % Pulsations that are not in integer ratio
+                                          % with dominant pulse decrease clarity
+        end
+    end
+end
+
+
+function rc = tempo(pk)
+rc = zeros(size(pk));
+for j = 1:size(pk,3)
+    for i = 1:size(pk,2)
+        pij = pk{1,i,j};
+        if isempty(pij)
+            rc(1,i,j) = 0;
+        else
+            rc(1,i,j) = exp(-pij(1)/4)/exp(-.33/4); % Fast dominant pulse
+                                                    % increases clarity
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirread.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,138 @@
+function [d,tp,fp,f,b,n,ch] = mirread(extract,orig,load,folder,verbose)
+% Read the audio file ORIG, at temporal position indicated by EXTRACT. If
+% EXTRACT is empty, all the audio file is loaded.
+%   If LOAD is set to 0, just the meta-data is collected, and the actual
+%       audio data is not taken into consideration. If it is set to 1, the
+%       data are loaded from the current directory. If LOAD is a string, it
+%       is considered as the path of the directory.   
+%   If FOLDER is set to 1, no error is returned if an audio file cannot be
+%       loaded.
+% Output:
+%   D is the audio signal,
+%   TP are the temporal positions,
+%   FP are the two extreme temporal positions (used for frame positions),
+%   F is the sampling rate,
+%   B is the resolution in number of bits,
+%   N is the file name.
+%   CH are the channel index.
+
+if nargin < 5
+    verbose = 0;
+end
+d = {};
+f = {};
+b = {};
+tp = {};
+fp = {};
+n = {};
+ch = {};
+try
+    [d,f,b,tp,fp,n,ch] = audioread(extract,@wavread,orig,load,verbose,folder);
+catch
+    err.wav = lasterr;
+    try
+       [d,f,b,tp,fp,n,ch] = audioread(extract,@auread,orig,load,verbose,folder);
+    catch
+        err.au = lasterr;
+        try
+            [d,f,b,tp,fp,n,ch] = audioread(extract,@mp3read,orig,load,verbose,folder);
+        catch
+            err.mp3 = lasterr;
+            try
+                [d,f,b,tp,fp,n,ch] = audioread(extract,@aiffread,orig,load,verbose,folder);
+            catch
+                err.aiff = lasterr;
+                if length(orig)>4 && strcmpi(orig(end-3:end),'.bdf')
+                    try
+                       [d,f,b,tp,fp,n,ch] = audioread(extract,@bdfread,orig,load,verbose,folder);
+                    catch
+                        if not(strcmp(err.wav(1:16),'Error using ==> ') && folder)
+                            misread(orig, err);
+                        end
+                    end
+                else
+                    if not(strcmp(err.wav(1:16),'Error using ==> ') && folder)
+                        misread(orig, err);
+                    end
+                end
+            end
+        end
+    end
+end
+
+        
+function [d,f,b,tp,fp,n,ch] = audioread(extract,reader,file,load,verbose,folder)
+n = file;
+if folder
+    file = ['./',file];
+end
+if load
+    if isempty(extract)
+        [s,f,b] = reader(file);
+    else
+        [unused,f,b] = reader(file,1);
+        s = reader(file,extract(1:2));
+        if length(extract) > 3
+            s = s(:,extract(4));
+        end
+    end
+    if verbose
+        disp([file,' loaded.']);
+    end
+    d{1} = reshape(s,size(s,1),1,size(s,2)); %channels along dim 3
+    ch = 1:size(s,2);
+    if isempty(extract) || extract(3)
+        tp{1} = (0:size(s,1)-1)'/f;
+    else
+        tp{1} = (extract(1)-1+(0:size(s,1)-1))'/f;
+    end
+    if isempty(s)
+        fp{1} = 0;
+    else
+        fp{1} = tp{1}([1 end]);
+    end
+else
+    [unused,f,b] = reader(file,1);
+    dsize = reader(file,'size');
+    d = dsize(1);
+    tp = {};
+    fp = {};
+    ch = dsize(2);
+end
+
+
+function [y,fs,nbits] = bdfread(file,check)
+DAT = openbdf(file);
+NRec = DAT.Head.NRec;
+if not(length(check)==2)
+    b = readbdf(DAT,1);
+    y = length(b.Record(43,:)) * NRec;
+else
+    y = [];
+    if mirwaitbar
+        handle = waitbar(0,'Loading BDF channel...');
+    else
+        handle = 0;
+    end
+    for i = 1:NRec
+        b = readbdf(DAT,i);
+        y = [y;b.Record(43,:)'];
+        if handle
+            waitbar(i/NRec,handle);
+        end
+    end
+    if handle
+        delete(handle)
+    end
+end
+fs = DAT.Head.SampleRate(43);
+nbits = NaN;
+
+
+function misread(file,err)
+display('Here are the error message returned by each reader:');
+display(err.wav);
+display(err.au);
+display(err.mp3);
+display(err.aiff);
+mirerror('MIRREAD',['Cannot open file ',file]);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirregularity.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,90 @@
+function varargout = mirregularity(orig,varargin)
+%   i = mirregularity(x) calculates the irregularity of a spectrum, i.e.,
+%       the degree of variation of the successive peaks of the spectrum.
+%   Specification of the definition of irregularity:
+%       mirregularity(...,'Jensen') is based on (Jensen, 1999),
+%           where the irregularity is the sum of the square of the 
+%           difference in amplitude between adjoining partials.
+%           (Default approach)
+%       mirregularity(...,'Krimphoff') is based on (Krimphoff et al., 1994),
+%           where the irregularity is the sum of the amplitude minus the 
+%           mean of the preceding, same and next amplitude.
+%   If the input x is not already a spectrum with peak extracted, the peak
+%       picking is performed prior to the calculation of the irregularity.
+%       In this case the 'Contrast' parameter used in mirpeaks can be
+%       modified, and is set by default to .1.
+%
+%   [Krimphoff et al. 1994] J. Krimphoff, S. McAdams, S. Winsberg, 
+%       Caracterisation du timbre des sons complexes. II Analyses
+%       acoustiques et quantification psychophysique. Journal de Physique 
+%       IV, Colloque C5, Vol. 4. 1994. 
+%   [Jensen, 1999] K. Jensen, Timbre Models of Musical Sounds, Ph.D.
+%       dissertation, University of Copenhagen, Rapport Nr. 99/7.
+
+
+        meth.type = 'String';
+        meth.default = 'Jensen';
+        meth.choice = {'Jensen','Krimphoff'};
+    option.meth = meth;
+    
+        cthr.key = 'Contrast';
+        cthr.type = 'Integer';
+        cthr.default = .01;
+    option.cthr = cthr;
+
+specif.option = option;
+
+varargout = mirfunction(@mirregularity,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirdata')) || isamir(x,'miraudio')
+    x = mirspectrum(x);
+end
+if not(haspeaks(x))
+    x = mirpeaks(x,'Reso','SemiTone','Contrast',option.cthr);  %% FIND BETTER
+end
+type = 'mirscalar';
+
+
+function o = main(x,option,postoption)
+if iscell(x)
+    x = x{1};
+end
+m = get(x,'PeakVal');
+p = get(x,'PeakPos');
+y = cell(1,length(m));
+for h = 1:length(m)
+    y{h} = cell(1,length(m{h}));
+    for k = 1:length(m{h})
+        y{h}{k} = zeros(size(m{h}{k}));
+        for j = 1:size(m{h}{k},3)
+            for l = 1:size(m{h}{k},2)
+                state = warning('query','MATLAB:divideByZero');
+                warning('off','MATLAB:divideByZero');
+                mm = m{h}{k}{1,l,j};
+                pp = p{h}{k}{1,l,j};
+                [pp oo] = sort(pp); % Sort peaks in ascending order of x abscissae. 
+                mm = mm(oo);
+                if strcmpi(option.meth,'Jensen')
+                    y{h}{k}(1,l,j) = sum((mm(2:end,:)-mm(1:end-1,:)).^2)...
+                                    ./sum(mm.^2);
+                elseif strcmpi(option.meth,'Krimphoff')
+                    avrg = filter(ones(3,1),1,mm)/3;
+                    y{h}{k}(1,l,j) = log10(sum(abs(mm(2:end-1,:)-avrg(3:end))));
+                end
+                warning(state.state,'MATLAB:divideByZero');
+                if isnan(y{h}{k}(1,l,j))
+                    y{h}{k}(1,l,j) = 0;
+                end
+            end
+        end
+    end
+end
+if isa(x,'mirspectrum')
+    t = 'Spectral irregularity';
+else
+    t = ['Irregularity of ',get(x,'Title')];;
+end
+i = mirscalar(x,'Data',y,'Title',t);
+o = {i,x};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirrms.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,82 @@
+function varargout = mirrms(x,varargin)
+%   e = mirrms(x) calculates the root mean square energy.
+%   Optional arguments:
+%       mirrms(...,'Frame') computes the temporal evolution of the energy.
+%       mirrms(...,'Root',0) does not apply the root operation to the mean
+%           square energy.
+
+        normal.key = 'Normal';
+        normal.type = 'Boolean';
+        normal.default = 1;
+    option.normal = normal;
+    
+        root.key = 'Root';
+        root.type = 'Boolean';
+        root.default = 1;
+    option.root = root;
+    
+specif.option = option;
+
+specif.defaultframelength = 0.05;
+specif.defaultframehop = 0.5;
+
+specif.eachchunk = @eachchunk;
+specif.combinechunk = @combinechunk;
+specif.afterchunk = @afterchunk;
+
+varargout = mirfunction(@mirrms,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = 'mirscalar';
+
+
+function e = main(x,option,postoption)
+if iscell(x)
+    x = x{1};
+end
+d = get(x,'Data');
+v = mircompute(@algo,d,option);
+e = mirscalar(x,'Data',v,'Title','RMS energy');
+
+
+function e = algo(d,option)
+nl = size(d,1);
+nc = size(d,2);
+nch = size(d,3);
+e = zeros(1,nc,nch);
+for i = 1:nch
+    for j = 1:nc
+        if option.root
+            e(1,j,i) = norm(d(:,j,i));
+        else
+            e(1,j,i) = d(:,j,i)'*d(:,j,i);
+        end
+    end
+end
+if option.normal
+    e = e/sqrt(nl);
+end
+
+
+function [y orig] = eachchunk(orig,option,missing,postchunk)
+option.normal = 0;
+y = mirrms(orig,option);
+
+
+function y = combinechunk(old,new)
+do = get(old,'Data');
+do = do{1}{1};
+dn = get(new,'Data');
+dn = dn{1}{1};
+y = set(old,'ChunkData',sqrt(do^2+dn^2));
+
+
+function y = afterchunk(orig,length,postoption)
+d = get(orig,'Data');
+v = mircompute(@afternorm,d,length);
+y = set(orig,'Data',v);
+
+
+function e = afternorm(d,length)
+e = d/sqrt(length);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirrolloff.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+function varargout = mirrolloff(x,varargin)
+%   r = mirrolloff(s) calculates the spectral roll-off in Hz.
+%   Optional arguments:
+%   r = mirrolloff(s,'Threshold',p) specifies the energy threshold in 
+%       percentage. (Default: .85)
+%           p can be either a value between 0 and 1. But if p exceeds 1, it
+%               is understood as a percentage, i.e. between 1 and 100.  
+%           In other words, r is the frequency under which p percents
+%               of the spectral energy is distributed.
+%
+% Typical values for the energy threshold:
+%       85% in G. Tzanetakis, P. Cook. Musical genre classification of audio
+%           signals. IEEE Tr. Speech and Audio Processing, 10(5),293-302, 2002.
+%       95% in T. Pohle, E. Pampalk, G. Widmer. Evaluation of Frequently
+%           Used Audio Features for Classification of Music Into Perceptual
+%           Categories, ?
+
+        p.key = 'Threshold';
+        p.type = 'Integer';
+        p.default = 85;
+        p.position = 2;
+    option.p = p;
+    
+specif.option = option;
+
+varargout = mirfunction(@mirrolloff,x,varargin,nargout,specif,@init,@main);
+
+
+function [s type] = init(x,option)
+s = mirspectrum(x);
+type = 'mirscalar';
+
+
+function r = main(s,option,postoption)
+if iscell(s)
+    s = s{1};
+end
+m = get(s,'Magnitude');
+f = get(s,'Frequency');
+if option.p>1
+    option.p = option.p/100;
+end
+v = mircompute(@algo,m,f,option.p);
+r = mirscalar(s,'Data',v,'Title','Rolloff','Unit','Hz.');
+
+
+function v = algo(m,f,p)
+cs = cumsum(m);          % accumulation of spectrum energy
+thr = cs(end,:,:)*p;   % threshold corresponding to the rolloff point
+v = zeros(1,size(cs,2),size(cs,3));
+for l = 1:size(cs,3)
+    for k = 1:size(cs,2)
+        fthr = find(cs(:,k,l) >= thr(1,k,l)); % find the location of the threshold
+        if isempty(fthr)
+            v(1,k,l) = NaN;
+        else
+            v(1,k,l) = f(fthr(1));
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirroughness.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,103 @@
+function varargout = mirroughness(x,varargin)
+%   r = mirroughness(x) calculates the roughness, or sensory dissonance,
+%           due to beating phenomenon between close frequency peaks. 
+%       The frequency components are supposed to remain sufficiently 
+%           constant throughout each frame of each audio file.
+%   r = mirroughness(...,'Contrast',c) specifies the contrast parameter
+%       used for peak picking (cf. mirpeaks).
+%       Default value: c = .01
+%   [r,s] = mirroughness(x) also displays the spectrum and its peaks, used
+%           for the computation of roughness.
+%   Optional arguments:
+%       Method used:
+%           mirroughness(...,'Sethares') (default): based on the summation
+%               of roughness between all pairs of sines (obtained through
+%               spectral peak-picking).
+%           mirroughness(...,'Vassilakis'): variant of 'Sethares' model
+%               with a more complex weighting (Vassilakis, 2001, Eq. 6.23).
+
+        meth.type = 'String';
+        meth.choice = {'Sethares','Vassilakis'};
+        meth.default = 'Sethares';
+    option.meth = meth;
+    
+        cthr.key = 'Contrast';
+        cthr.type = 'Integer';
+        cthr.default = .01;
+    option.cthr = cthr;
+    
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [.05 .5];
+    option.frame = frame;
+    
+specif.option = option;
+specif.defaultframelength = .05;
+specif.defaultframehop = .5;
+
+
+varargout = mirfunction(@mirroughness,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if isamir(x,'miraudio') && not(isframed(x))
+    x = mirframenow(x,option);
+end
+x = mirspectrum(x);
+if not(haspeaks(x))
+    x = mirpeaks(x,'Contrast',option.cthr);
+end
+type = 'mirscalar';
+
+
+function r = main(p,option,postoption)
+if iscell(p)
+    p = p{1};
+end
+if strcmpi(option.meth,'Sethares') || strcmpi(option.meth,'Vassilakis')
+    pf = get(p,'PeakPosUnit');
+    pv = get(p,'PeakVal');
+    rg = cell(1,length(pf));
+    for h = 1:length(pf)
+        rg{h} = cell(1,length(pf{h}));
+        for i = 1:length(pf{h})
+            pfi = pf{h}{i};
+            pvi = pv{h}{i};
+            rg{h}{i} = zeros(1,length(pfi));
+            for k = 1:size(pfi,3)
+                for j = 1:size(pfi,2)
+                    pfj = pfi{1,j,k};
+                    pvj = pvi{1,j,k};
+                    f1 = repmat(pfj,[1 length(pfj)]);
+                    f2 = repmat(pfj',[length(pfj) 1]);
+                    v1 = repmat(pvj,[1 length(pvj)]);
+                    v2 = repmat(pvj',[length(pvj) 1]);
+                    rj = plomp(f1,f2);
+                    if strcmpi(option.meth,'Sethares')
+                        rj = v1.*v2.*rj;
+                    elseif strcmpi(option.meth,'Vassilakis')
+                        rj = (v1.*v2).^.1.*.5.*(2*v2./(v1+v2)).^3.11.*rj;
+                    end
+                    rg{h}{i}(1,j,k) = sum(sum(rj));
+                end
+            end
+        end
+    end
+else
+end    
+r = mirscalar(p,'Data',rg,'Title','Roughness');
+r = {r,p};
+
+
+function pd = plomp(f1, f2)
+% returns the dissonance of two pure tones at frequencies f1 & f2 Hz
+% according to the Plomp-Levelt curve (see Sethares)
+    b1 = 3.51;
+    b2 = 5.75;
+    xstar = .24;
+    s1 = .0207;
+    s2 = 18.96;
+    s = tril(xstar ./ (s1 * min(f1,f2) + s2 ));
+    pd = exp(-b1*s.*abs(f2-f1)) - exp(-b2*s.*abs(f2-f1));
+return
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirsave.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function mirsave(d,varargin)
+%   mirsave(d) saves temporal data d in a file.
+%       If d is a miraudio object, the waveform is directly saved.
+%       mirenvelope data is sonified using modulated white noise.
+%       mirpitch data is sonified using sinusoids.
+%    (cf. User's Manual for more details).
+%   The file(s) name is based on  the original file name(s), adding '.mir'
+%       before the standard extension of the file.
+%   mirsave(d,f) specifies the file names.
+%       If d contains one single audio sequence, d is saved in a file
+%               named f.
+%       If d contains multiple audio sequences, each sequence is saved 
+%               in a file whose name is the concatenation of the original
+%               name and f.
+%       If f ends with '.wav', the file is saved in WAV format (by
+%               default).
+%       If f ends with '.au', the file is saved in AU format.
+%   mirsave(d,f,'SeparateChannels') save each separate channel in a 
+%               different file.
+
+
+mirsave(miraudio(d),varargin{:})
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirsegment.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,402 @@
+function [f,p,m,fe] = mirsegment(x,varargin)
+%   f = mirsegment(a) segments an audio signal. It can also be the name of an
+%       audio file or 'Folder', for the analysis of the audio files in the
+%       current folder. The segmentation of audio signal already decomposed
+%       into frames is not available for the moment.
+%   f = mirsegment(...,'Novelty') segments using a self-similarity matrix
+%           (Foote & Cooper, 2003)     (by default)
+%       f = mirsegment(...,feature) bases the segmentation strategy on a
+%           specific feature.
+%           'Spectrum': from FFT spectrum (by default)
+%           'MFCC': from MFCCs
+%           'Keystrength': from the key strength profile
+%           'AutocorPitch': from the autocorrelation function computed as
+%               for pitch extraction.
+%           The option related to this feature extraction can be specified.
+%           Example: mirsegment(...,'Spectrum','Window','bartlett')
+%                    mirsegment(...,'MFCC','Rank',1:10)
+%                    mirsegment(...,'Keystrength','Weight',.5)
+%       These feature need to be frame-based, in order to appreciate their
+%           temporal evolution. Therefore, the audio signal x is first
+%           decomposed into frames. This decomposition can be controled
+%           using the 'Frame' keyword.  
+%       The options available for the chosen strategies can be specified
+%           directly as options of the segment function.
+%           Example: mirsegment(a,'Novelty','KernelSize',10)
+%   f = mirsegment(...,'HCDF') segments using the Harmonic Change Detection  
+%           Function (Harte & Sandler, 2006)
+%   f = mirsegment(...,'RMS') segments at positions of long silences. A
+%       frame decomposed RMS is computed using mirrms (with default
+%       options), and segments are selected from temporal positions
+%       where the RMS rises to a given 'On' threshold, until temporal
+%       positions where the RMS drops back to a given 'Off' threshold.
+%       f = mirsegment(...,'Off',t1) specifies the RMS 'Off' threshold.
+%           Default value: t1 = .01
+%       f = mirsegment(...,'On',t2) specifies the RMS 'On' threshold.
+%           Default value: t2 = .02
+%
+%   f = mirsegment(a,s) segments a using the results of a segmentation
+%       analysis s. s can be the peaks detected on an analysis of the
+%       audio for instance.
+%
+%   f = mirsegment(a,v) where v is an array of numbers, segments a using
+%       the temporal positions specified in v (in s.)
+%
+%   Foote, J. & Cooper, M. (2003). Media Segmentation using Self-Similarity
+%       Decomposition,. In Proc. SPIE Storage and Retrieval for Multimedia
+%       Databases, Vol. 5021, pp. 167-75.
+%   Harte, C. A. & Sandler, M. B. (2006). Detecting harmonic change in
+%       musical audio, in Proceedings of Audio and Music Computing for 
+%       Multimedia Workshop, Santa Barbara, CA.
+
+
+%   [f,p] = mirsegment(...) also displays the analysis produced by the chosen
+%       strategy.
+%           For 'Novelty', p is the novelty curve.
+%           For 'HCDF', p is the Harmonic Change Detection Function.
+%   [f,p,m] = mirsegment(...) also displays the preliminary analysis
+%       undertaken in the chosen strategy.
+%           For 'Novelty', m is the similarity matrix.
+%           For 'HCDF', m is the tonal centroid.
+%   [f,p,m,fe] = mirsegment(...) also displays the temporal evolution of the
+%       feature used for the analysis.
+ 
+%   f = mirsegment(...,'Novelty')
+
+        mfc.key = {'Rank','MFCC'};
+        mfc.type = 'Integers';
+        mfc.default = 0;
+        mfc.keydefault = 1:13;
+    option.mfc = mfc;
+
+        K.key = 'KernelSize';
+        K.type = 'Integer';
+        K.default = 128;
+    option.K = K;
+    
+        distance.key = 'Distance';
+        distance.type = 'String';
+        distance.default = 'cosine';
+    option.distance = distance;
+
+        measure.key = {'Measure','Similarity'};
+        measure.type = 'String';
+        measure.default = 'exponential';
+    option.measure = measure;
+
+        tot.key = 'Total';
+        tot.type = 'Integer';
+        tot.default = Inf;
+    option.tot = tot;
+
+        cthr.key = 'Contrast';
+        cthr.type = 'Integer';
+        cthr.default = .1;
+    option.cthr = cthr;
+
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [0 0];
+        frame.keydefault = [3 .1];
+    option.frame = frame;
+
+        ana.type = 'String';
+        ana.choice = {'Spectrum','Keystrength','AutocorPitch','Pitch'};
+        ana.default = 0;
+    option.ana = ana;
+    
+%       f = mirsegment(...,'Spectrum')    
+    
+            band.choice = {'Mel','Bark','Freq'};
+            band.type = 'String';
+            band.default = 'Freq';
+        option.band = band;
+
+            mi.key = 'Min';
+            mi.type = 'Integer';
+            mi.default = 0;
+        option.mi = mi;
+
+            ma.key = 'Max';
+            ma.type = 'Integer';
+            ma.default = 0;
+        option.ma = ma;
+
+            norm.key = 'Normal';
+            norm.type = 'Boolean';
+            norm.default = 0;
+        option.norm = norm;
+
+            win.key = 'Window';
+            win.type = 'String';
+            win.default = 'hamming';
+        option.win = win;
+    
+%       f = mirsegment(...,'Silence')    
+    
+            throff.key = 'Off';
+            throff.type = 'Integer';
+            throff.default = .01;
+        option.throff = throff;
+
+            thron.key = 'On';
+            thron.type = 'Integer';
+            thron.default = .02;
+        option.thron = thron;
+
+        strat.choice = {'Novelty','HCDF','RMS'}; % should remain as last field
+        strat.default = 'Novelty';
+        strat.position = 2;
+    option.strat = strat;
+   
+specif.option = option;
+
+
+p = {};
+m = {};
+fe = {};
+
+if isa(x,'mirdesign')
+    if not(get(x,'Eval'))
+        % During bottom-up construction of the general design
+
+        [unused option] = miroptions(@mirframe,x,specif,varargin);
+        type = get(x,'Type');
+        f = mirdesign(@mirsegment,x,option,{},struct,type);
+        
+        sg = get(x,'Segment');
+        if not(isempty(sg))
+            f = set(f,'Segment',sg);
+        else
+            f = set(f,'Segment',option.strat);
+        end
+        
+    else
+        % During top-down evaluation initiation
+        
+        f = evaleach(x);
+        if iscell(f)
+            f = f{1};
+        end
+        p = x;
+    end
+elseif isa(x,'mirdata')
+    [unused option] = miroptions(@mirframe,x,specif,varargin);
+    if ischar(option.strat)
+        dx = get(x,'Data');
+        if size(dx{1},2) > 1
+            error('ERROR IN MIRSEGMENT: The segmentation of audio signal already decomposed into frames is not available for the moment.');
+        end
+        if strcmpi(option.strat,'Novelty')
+            if not(option.frame.length.val)
+                if strcmpi(option.ana,'Keystrength')
+                    option.frame.length.val = .5;
+                    option.frame.hop.val = .2;
+                elseif strcmpi(option.ana,'AutocorPitch') ...
+                        || strcmpi(option.ana,'Pitch')
+                    option.frame.length.val = .05;
+                    option.frame.hop.val = .01;
+                else
+                    option.frame.length.val = .05;
+                    option.frame.hop.val = 1;
+                end
+            end
+            fr = mirframenow(x,option);
+            if not(isequal(option.mfc,0))
+                fe = mirmfcc(fr,'Rank',option.mfc);
+            elseif strcmpi(option.ana,'Spectrum')
+                fe = mirspectrum(fr,'Min',option.mi,'Max',option.ma,...
+                                    'Normal',option.norm,option.band,...
+                                    'Window',option.win);
+            elseif strcmpi(option.ana,'Keystrength')
+                    fe = mirkeystrength(fr);
+            elseif strcmpi(option.ana,'AutocorPitch') ...
+                    || strcmpi(option.ana,'Pitch')
+                [unused,fe] = mirpitch(x,'Frame');
+            else
+                fe = fr;
+            end
+            [n m] = mirnovelty(fe,'Distance',option.distance,...
+                                  'Measure',option.measure,...
+                                  'KernelSize',option.K);
+            p = mirpeaks(n,'Total',option.tot,...
+                           'Contrast',option.cthr,...
+                           'Chrono','NoBegin','NoEnd');
+        elseif strcmpi(option.strat,'HCDF')
+            if not(option.frame.length.val)
+                option.frame.length.val = .743;
+                option.frame.hop.val = 1/8;
+            end
+            fr = mirframenow(x,option);
+            %[df m fe] = mirhcdf(fr);
+            df = mirhcdf(fr);
+            p = mirpeaks(df);
+        elseif strcmpi(option.strat,'RMS')
+            if not(option.frame.length.val)
+                option.frame.length.val = .05;
+                option.frame.hop.val = .5;
+            end
+            fr = mirframenow(x,option);
+            %[df m fe] = mirhcdf(fr);
+            df = mirrms(fr);
+            fp = get(df,'FramePos');
+            p = mircompute(@findsilence,df,fp,option.throff,option.thron);
+        end
+        f = mirsegment(x,p);
+    else
+        dx = get(x,'Data');
+        dt = get(x,'Time');
+
+        if isa(option.strat,'mirscalar')
+            ds = get(option.strat,'PeakPos');
+            fp = get(option.strat,'FramePos');
+        elseif isa(option.strat,'mirdata')
+            ds = get(option.strat,'AttackPos');
+            if isempty(ds) || isempty(ds{1})
+                ds = get(option.strat,'PeakPos');
+            end
+            xx = get(option.strat,'Pos');
+        else
+            ds = option.strat;
+            fp = cell(1,length(dx));
+        end
+        st = cell(1,length(dx));
+        sx = cell(1,length(dx));
+        cl = cell(1,length(dx));
+        for k = 1:length(dx)
+            dxk = dx{k}{1}; % values in kth audio file
+            dtk = dt{k}{1}; % time positions in kth audio file
+            if isa(option.strat,'mirdata')
+                dsk = ds{k}{1}; % segmentation times in kth audio file
+            else
+                dsk = {ds};
+            end
+            fsk = [];   % the structured array of segmentation times 
+                         % needs to be flatten
+            for j = 1:length(dsk)
+                if isa(option.strat,'mirdata')
+                    dsj = dsk{j}; % segmentation times in jth segment
+                else
+                    dsj = ds;
+                end
+                if not(iscell(dsj))
+                    dsj = {dsj};
+                end
+                for m = 1:length(dsj)
+                    % segmentation times in mth bank channel
+                    if isa(option.strat,'mirscalar')
+                        dsm = fp{k}{m}(1,dsj{m});
+                    elseif isa(option.strat,'mirdata')
+                        dsm = xx{k}{m}(dsj{m});
+                    else
+                        dsm = dsj{m};
+                    end
+                    if iscell(dsm)
+                        dsm = dsm{1};
+                    end
+                    dsm(:,find(dsm(1,:) < dtk(1))) = [];
+                    dsm(:,find(dsm(end,:) > dtk(end))) = [];
+                    % It is presupposed here that the segmentations times
+                    % for a given channel are not decomposed per frames,
+                    % because the segmentation of the frame decomposition
+                    % is something that does not seem very clear.
+                    % Practically, the peak picking for instance is based 
+                    % therefore on a frame analysis (such as novelty), and
+                    % segmentation are inferred between these frames...
+                    if size(dsm,2) == 1
+                        dsm = dsm';
+                    end
+                    fsk = [fsk dsm];
+                end
+            end
+
+            fsk = sort(fsk); % Here is the chronological ordering
+            
+            if isempty(fsk)
+                ffsk = {[0;dtk(end)]};
+                sxk = {dxk};
+                stk = {dtk};
+                n = 1;
+            elseif size(fsk,1) == 1
+                ffsk = cell(1,length(fsk)+1);
+                ffsk{1} = [dtk(1);fsk(1)];
+                for h = 1:length(fsk)-1
+                    ffsk{h+1} = [fsk(h);fsk(h+1)];
+                end
+                ffsk{end} = [fsk(end);dtk(end)];
+                
+                n = length(ffsk);
+
+                crd = zeros(1,n+1); % the sample positions of the
+                                    % segmentations in the channel
+                crd0 = 0;
+                for i = 1:n
+                    crd0 = crd0 + find(dtk(crd0+1:end)>=ffsk{i}(1),1);
+                    crd(i) = crd0;
+                end
+                crd(n+1) = size(dxk,1)+1;
+
+                sxk = cell(1,n); % each cell contains a segment
+                stk = cell(1,n); % each cell contains
+                                 % the corresponding time positions
+
+                for i = 1:n
+                    sxk{i} = dxk(crd(i):crd(i+1)-1,1,:);
+                    stk{i} = dtk(crd(i):crd(i+1)-1);
+                end
+
+            elseif size(fsk,1) == 2
+                ffsk = cell(1,size(fsk,2));
+                for h = 1:length(fsk)
+                    ffsk{h} = [fsk(1,h);fsk(2,h)];
+                end
+                n = length(ffsk);
+                crd = zeros(2,n); % the sample positions of the
+                                  % segmentations in the channel
+                crd0 = 0;
+                for i = 1:n
+                    crd0 = crd0 + find(dtk(crd0+1:end)>=ffsk{i}(1),1);
+                    crd(i,1) = crd0;
+                    crd0 = crd0 + find(dtk(crd0+1:end)>=ffsk{i}(2),1);
+                    crd(i,2) = crd0;                    
+                end
+                sxk = cell(1,n); % each cell contains a segment
+                stk = cell(1,n); % each cell contains
+                                 % the corresponding time positions
+                for i = 1:n
+                    sxk{i} = dxk(crd(i,1):crd(i,2),1,:);
+                    stk{i} = dtk(crd(i,1):crd(i,2));
+                end
+            end
+            sx{k} = sxk;
+            st{k} = stk;
+            fp{k} = ffsk;
+            cl{k} = 1:n;
+        end
+        f = set(x,'Data',sx,'Time',st,'FramePos',fp,'Clusters',cl);
+        p = strat;
+        m = {};
+        fe = {};
+    end
+else
+    [f p] = mirsegment(miraudio(x),varargin{:});
+end 
+
+
+function p = findsilence(d,fp,throff,thron)
+d = [0 d 0];
+begseg = find(d(1:end-1)<thron & d(2:end)>=thron);
+nseg = length(begseg);
+endseg = zeros(1,nseg);
+removed = [];
+for i = 1:nseg
+    endseg(i) = begseg(i) + find(d(begseg(i)+1:end)<=throff, 1)-1;
+    if i>1 && endseg(i) == endseg(i-1)
+        removed = [removed i];
+    end
+end
+begseg(removed) = [];
+%endseg(removed) = [];
+%endseg(end) = min(endseg(end),length(d)+1);
+p = fp(1,begseg); %; fp(2,endseg-1)];
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirskewness.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function varargout = mirskewness(orig,varargin)
+%   s = skewness(x) calculates the skewness of x, showing the (lack of)
+%       symmetry of the curve.
+%   x can be either:
+%       - a spectrum (spectral skewness),
+%       - an envelope (temporal skewness), or
+%       - any histogram.
+
+
+varargout = mirfunction(@mirskewness,orig,varargin,nargout,struct,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirdata')) || isamir(x,'miraudio')
+    x = mirspectrum(x);
+end
+type = 'mirscalar';
+
+
+function s = main(x,option,postoption)
+if iscell(x)
+    x = x{1};
+end
+y = peaksegments(@skewness,get(x,'Data'),...
+                           get(x,'Pos'),...
+                           get(mircentroid(x),'Data'),...
+                           get(mirspread(x),'Data'));
+if isa(x,'mirspectrum')
+    t = 'Spectral skewness';
+elseif isa(x,'mirenvelope')
+    t = 'Temporal skewness';
+else
+    t = ['Skewness of ',get(x,'Title')];
+end
+s = mirscalar(x,'Data',y,'Title',t,'Unit','');
+
+
+function s = skewness(d,p,c,sp)
+s = sum((p-c).^3.*d) ./ sum(d) ./ sp.^3;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirspread.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+function varargout = mirspread(orig,varargin)
+%   S = mirspread(x) calculates the spread of x, which can be either:
+%       - a spectrum (spectral spread),
+%       - an envelope (temporal spread), or
+%       - any histogram.
+
+
+varargout = mirfunction(@mirspread,orig,varargin,nargout,struct,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirdata')) || isamir(x,'miraudio')
+    x = mirspectrum(x);
+end
+type = 'mirscalar';
+
+
+function S = main(x,option,postoption)
+if iscell(x)
+    x = x{1};
+end
+y = peaksegments(@spread,get(x,'Data'),...
+                         get(x,'Pos'),...
+                         get(mircentroid(x),'Data'));
+if isa(x,'mirspectrum')
+    t = 'Spectral spread';
+elseif isa(x,'mirenvelope')
+    t = 'Temporal spread';
+else
+    t = ['Spread of ',get(x,'Title')];
+end
+S = mirscalar(x,'Data',y,'Title',t);
+
+
+function s = spread(d,p,c)
+s = sqrt( sum((p-c).^2.*d) ) ./ sum(d);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirstat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,292 @@
+function varargout = mirstat(f,varargin)
+% stat = mirstat(f) returns basic statistics of the feature f as a
+%   structure array stat such that:
+%       stat.Mean is the mean of the feature;
+%       stat.Std is the standard deviation;
+%       stat.Slope is the linear slope of the curve;
+%       stat.PeriodFreq is the frequency (in Hz) of the main periodicity;
+%       stat.PeriodAmp is the normalized amplitude of the main periodicity;
+%       stat.PeriodEntropy is the entropy of the periodicity curve.
+%   The main periodicity and periodicity curve are evaluated through the
+%       computation of the autocorrelation sequence related to f.
+%
+%   f can be itself a structure array composed of features. In this case,
+%       stat will be structured the same way.
+%
+% mirstat does not work for multi-channels objects.
+
+if isa(f,'mirstruct')
+    varargout = {set(f,'Stat',1)};
+elseif isstruct(f)
+    if isdesign(f)
+        f.Stat = 1;
+        varargout = {f};
+    else
+        fields = fieldnames(f);
+        for i = 1:length(fields)
+            field = fields{i};
+            ff = f.(field);
+            if iscell(ff) && isa(ff{1},'mirdata')
+                ff = ff{1};
+            end
+            if isa(ff,'mirdata')
+                if i == 1 
+                    la = get(ff,'Label');
+                    if not(isempty(la) || isempty(la{1}))
+                        stat.Class = la;
+                    end
+                end
+                ff = set(ff,'Label','');
+            end
+            stat.(field) = mirstat(ff,'FileNames',0);
+        end
+        if isempty(varargin)
+            f0 = f;
+            while isstruct(f0)
+                fields = fieldnames(f0);
+                f0 = f0.(fields{1});
+            end
+            if iscell(f0)
+                f0 = f0{1};
+            end
+            stat.FileNames = get(f0,'Name');
+        end
+        varargout = {stat};
+    end
+elseif iscell(f)
+    if 0 %ischar(f{1})
+        varargout = {f};
+    else
+        res = zeros(length(f),1);
+        for i = 1:length(f)
+            res(i) = mirstat(f{i});
+        end
+        varargout = {res};
+    end
+elseif isnumeric(f)
+    f(isnan(f)) = [];
+    varargout = {mean(f)};
+else
+            alongfiles.key = 'AlongFiles';
+            alongfiles.type = 'Boolean';
+            alongfiles.default = 0;
+        option.alongfiles = alongfiles;
+
+            filenames.key = 'FileNames';
+            filenames.type = 'Boolean';
+            filenames.default = 1;
+        option.filenames = filenames;
+        
+    specif.option = option;
+
+    specif.nochunk = 1;
+    varargout = mirfunction(@mirstat,f,varargin,nargout,specif,@init,@main);
+end
+
+
+function [x type] = init(x,option)
+type = '';
+
+
+function stat = main(f,option,postoption)
+if iscell(f)
+    f = f{1};
+end
+if isa(f,'mirhisto')
+    warning('WARNING IN MIRSTAT: histograms are not taken into consideration yet.')
+    stat = struct;
+    return
+end
+fp = get(f,'FramePos');
+if haspeaks(f)
+    ppp = get(f,'PeakPrecisePos');
+    if not(isempty(ppp)) && not(isempty(ppp{1}))
+        stat = addstat(struct,ppp,fp,'PeakPos');
+        stat = addstat(stat,get(f,'PeakPreciseVal'),fp,'PeakMag');
+    else
+        if isa(f,'mirkeystrength') || (isa(f,'mirchromagram') && get(f,'Wrap'))
+            stat = struct; % This needs to be defined using some kind of circular statistics..
+        else
+            stat = addstat(struct,get(f,'PeakPosUnit'),fp,'PeakPos');
+        end
+        stat = addstat(stat,get(f,'PeakVal'),fp,'PeakMag');
+    end
+else
+    stat = addstat(struct,get(f,'Data'),fp,'',option.alongfiles,...
+                          get(f,'Name'),get(f,'Label'));
+end
+if option.filenames
+    stat.FileNames = get(f,'Name');
+end
+
+
+function stat = addstat(stat,d,fp,field,alongfiles,filename,labels)
+l = length(d);
+if nargin<5
+    alongfiles = 0;
+end
+if nargin<7
+    labels = {};
+end
+if not(alongfiles) || l == 1
+    anyframe = 0;
+    for i = 1:l
+        if not(iscell(d{i}))
+            d{i} = {d{i}};
+        end
+        for k = 1:length(d{i})
+            dd = d{i}{k};
+            if iscell(dd)
+                if length(dd)>1
+                    anyframe = 1;
+                end
+                dn = cell2array(dd);
+                [m{i}{k},s{i}{k},sl{i}{k},pa{i}{k},pf{i}{k},pe{i}{k}] ...
+                    = computestat(dn,fp{i}{k});
+            elseif size(dd,2) < 2
+                nonan = find(not(isnan(dd)));
+                dn = dd(nonan);
+                if isempty(dn)
+                    m{i}{k} = NaN;
+                else
+                    m{i}{k} = mean(dn,2);
+                end
+                s{i}{k} = NaN;
+                sl{i}{k} = NaN;
+                pa{i}{k} = NaN;
+                pf{i}{k} = NaN;
+                pe{i}{k} = NaN;
+            else
+                anyframe = 1;
+                s1 = size(dd,1);
+                s3 = size(dd,3);
+                dd = mean(dd,4); %mean(dd,3),4);
+                m{i}{k} = NaN(s1,1,s3);
+                s{i}{k} = NaN(s1,1,s3);
+                sl{i}{k} = NaN(s1,1,s3);
+                pa{i}{k} = NaN(s1,1,s3);
+                pf{i}{k} = NaN(s1,1,s3);
+                pe{i}{k} = NaN(s1,1,s3);
+                for h = 1:s3
+                    for j = 1:s1
+                        [m{i}{k}(j,1,h),s{i}{k}(j,1,h),sl{i}{k}(j,1,h),...
+                         pa{i}{k}(j,1,h),pf{i}{k}(j,1,h),pe{i}{k}(j,1,h)] = ...
+                            computestat(dd(j,:,h),fp{i}{k});
+                    end
+                end
+            end
+        end
+    end
+    if anyframe
+        fields = {'Mean','Std','Slope','PeriodFreq','PeriodAmp','PeriodEntropy'};
+        stats = {m,s,sl,pf,pa,pe};   
+    else
+        fields = {'Mean'};
+        stats = {m};   
+    end
+    for i = 1:length(stats)
+        data = stats{i};
+        data = uncell(data,NaN);
+        stat.(strcat(field,fields{i})) = data;
+    end
+else
+    if iscell(d{1}{1})
+        slash = strfind(filename{1},'/');
+        nbfolders = 1;
+        infolder = 0;
+        foldername{1} = filename{1}(1:slash(end)-1);
+        for i = 1:length(d)
+            slash = strfind(filename{i},'/');
+            if not(strcmpi(filename{i}(1:slash(end)-1),foldername))
+                nbfolders = nbfolders + 1;
+                infolder = 0;
+                foldername{nbfolders} = filename{i}(1:slash(end)-1);
+            end
+            infolder = infolder+1;
+            dd{nbfolders}(infolder,:) = cell2array(d{i}{1});
+        end
+        for i = 1:length(dd)
+            figure
+            plot(dd{i}')
+            stat.Mean{i} = mean(dd{i});
+            stat.Std{i} = std(dd{i});
+        end
+    end
+end
+if not(isempty(labels) || isempty(labels{1}))
+    stat.Class = labels;
+end
+
+
+function dn = cell2array(dd)
+dn = zeros(1,length(dd));
+for j = 1:length(dd)
+    if isempty(dd{j})
+        dn(j) = NaN;
+    else
+        dn(j) = dd{j}(1);
+    end
+end
+
+
+function [m,s,sl,pa,pf,pe] = computestat(d,fp)
+m = NaN;
+s = NaN;
+sl = NaN;
+pa = NaN;
+pf = NaN;
+pe = NaN;
+diffp = fp(1,2:end) - fp(1,1:end-1);
+if isempty(diffp) || sum(round((diffp(2:end)-diffp(1:end-1))*1000))
+    % Not regular sampling (in mirattacktime for instance)
+    framesampling = NaN;
+else
+    framesampling = fp(1,2)-fp(1,1);
+end
+nonan = find(not(isnan(d)));
+if not(isempty(nonan))
+    dn = d(nonan);
+    m = mean(dn,2);
+    s = std(dn,0,2);
+    if not(isnan(s))
+        if s
+            dk = (dn-m)/s;
+            tk = linspace(0,1,size(d,2));
+            sl = dk(:)'/tk(nonan);
+        elseif size(s,2) == 1
+            s = NaN;
+        end
+    end
+    if length(dn)>1
+        cor = xcorr(dn',dn','coeff');
+        cor = cor(ceil(length(cor)/2):end);
+        % let's zero the first descending slope of the
+        % autocorrelation function
+        firstmin = find(cor(2:end)>cor(1:end-1));
+        if not(isempty(firstmin) || isnan(framesampling))
+            cor2 = cor;
+            cor2(1:firstmin(1)) = 0;
+            [pa,pfk] = max(cor2);
+            if pfk > 1
+                pf = 1/(pfk-1)/framesampling;
+            end
+        end
+        cor = abs(cor);
+        cor = cor/sum(cor);
+        pe = -sum(cor.*log(cor+1e-12))./log(length(cor));
+    end
+end
+
+
+function b = isdesign(f)
+if iscell(f)
+    f = f{1};
+end
+if isa(f,'mirdesign') || isa(f,'mirstruct')
+    b = 1;
+elseif isa(f,'mirdata') || not(isstruct(f))
+    b = 0;
+else
+    fields = fieldnames(f);
+    b = isdesign(f.(fields{1}));
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirstd.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,92 @@
+function varargout = mirstd(f,varargin)
+% m = mirstd(f) returns the standard deviation along frames of the feature f
+%
+%   f can be a structure array composed of features. In this case,
+%       m will be structured the same way.
+
+if isa(f,'mirstruct')
+    data = get(f,'Data');
+    for fi = 1:length(data)
+        data{fi} = mirstd(data{fi});
+    end
+    varargout = {set(f,'Data',data)};
+elseif isstruct(f)
+    fields = fieldnames(f);
+    for i = 1:length(fields)
+        field = fields{i};
+        stat.(field) = mirstd(f.(field));
+    end
+    varargout = {stat};
+else
+    
+        normdiff.key = 'NormDiff';
+        normdiff.type = 'Boolean';
+        normdiff.default = 0;
+    specif.option.normdiff = normdiff;
+
+    specif.nochunk = 1;
+    
+    varargout = mirfunction(@mirstd,f,varargin,nargout,specif,@init,@main);
+end
+
+
+function [x type] = init(x,option)
+type = '';
+
+
+function m = main(f,option,postoption)
+if iscell(f)
+    f = f{1};
+end
+if isa(f,'mirhisto')
+    warning('WARNING IN MIRSTD: histograms are not taken into consideration yet.')
+    m = struct;
+    return
+end
+fp = get(f,'FramePos');
+ti = get(f,'Title');
+d = get(f,'Data');
+l = length(d);
+for i = 1:l
+    if iscell(d{i})
+        if length(d{i}) > 1
+            error('ERROR IN MIRSTD: segmented data not accepted yet.');
+        else
+            dd = d{i}{1};
+        end
+    else
+        dd = d{i};
+    end
+    if iscell(dd)
+        m{i} = {zeros(1,length(dd))};
+        for j = 1:length(dd)
+            m{i}{1}(j) = std(dd{j});
+        end
+    elseif size(dd,2) < 2
+        nonan = find(not(isnan(dd)));
+        dn = dd(nonan);
+        if option.normdiff
+            m{i}{1} = norm(diff(dn,2));
+        else
+            m{i}{1} = std(dn,0,2);
+        end
+    else
+        dd = mean(dd,4);
+        m{i} = {NaN(size(dd,1),1,size(dd,3))};
+        for k = 1:size(dd,1)
+            for l = 1:size(dd,3)
+                dk = dd(k,:,l);
+                nonan = find(not(isnan(dk)));
+                if not(isempty(nonan))
+                    dn = dk(nonan);
+                    if option.normdiff
+                        m{i}{1}(k,1,l) = norm(diff(dn,2));
+                    else
+                        m{i}{1}(k,1,l) = std(dn,0,2);
+                    end
+                end
+            end
+        end
+    end
+end
+m = mirscalar(f,'Data',m,'Title',['Standard deviation of ',ti]);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirsum.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,195 @@
+function varargout = mirsum(orig,varargin)
+%   s = mirsum(f) sums the envelope of the multi-channel object f.
+%
+%   Optional arguments:
+%       mirsum(f,'Centered') centers the resulting envelope.
+%       mirsum(f,'Mean') divides the summation by the number of channels.
+
+%       mirsum(f,'Weights')...
+
+        c.key = 'Centered';
+        c.type = 'Boolean';
+        c.default = 0;
+        c.when = 'After';
+    option.c = c;
+
+        m.key = 'Mean';
+        m.type = 'Boolean';
+        m.default = 0;
+        m.when = 'After';
+    option.m = m;
+
+        adj.key = 'Adjacent';
+        adj.type = 'Integer';
+        adj.default = 1;
+    option.adj = adj;
+
+        weights.key = 'Weights';
+        weights.type = 'Integer';
+        weights.default = [];
+    option.weights = weights;    
+    
+specif.option = option;
+
+if isamir(orig,'mirtemporal')
+    specif.eachchunk = @eachtemporalchunk;
+    specif.combinechunk = 'Concat'; %@combinetemporalchunk;
+else
+    specif.combinechunk = @combinechunk;
+end
+varargout = mirfunction(@mirsum,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = mirtype(x);
+
+
+function s = main(x,option,postoption)
+x = purgedata(x);
+if iscell(x)
+    x = x{1};
+end
+d = get(x,'Data');
+pp = get(x,'PeakPos');
+pv = get(x,'PeakVal');
+pm = get(x,'PeakMode');
+p = get(x,'Pos');
+sc = cell(1,length(d));
+spp = cell(1,length(d));
+spv = cell(1,length(d));
+spm = cell(1,length(d));
+for h = 1:length(d)
+    dh = d{h};
+    sch = cell(1,length(dh));
+    spph = cell(1,length(dh));
+    spvh = cell(1,length(dh));
+    spmh = cell(1,length(dh));
+    for i = 1:length(dh)
+        % Summation of signal
+        s3 = size(dh{i},3);
+        if not(isempty(option.weights))
+            weights = reshape(option.weights,1,1,length(option.weights));
+            if length(weights)~=s3
+                %warning('WARNING in MIRSUM..');
+                weights = weights(1,1,1:s3);
+            end
+            dh{i} = dh{i}.*repmat(weights,[size(dh{i},1),size(dh{i},2),1]);
+        end
+        if option.adj < 2
+            sch{i} = sum(dh{i},3);
+        else
+            m0 = option.adj;
+            nc1 = size(dh{i},3);
+            nc2 = ceil(nc1/m0);
+            sch{i} = zeros(size(dh{i},1),size(dh{i},2),nc2);
+            for j = 1:nc2
+                sch{i}(:,:,j) = sum(dh{i}(:,:,(j-1)*m0+1:min(j*m0,nc1))...
+                                        ,3);
+            end
+        end
+        % Summation of peaks
+        if not(isempty(pp)) && not(isempty(pp{1}))
+            ppi = pp{h}{i};
+            pvi = pv{h}{i};
+            pmi = pm{h}{i};
+            nfr = size(ppi,2);
+            nbd = size(ppi,3);
+            sppi = cell(1,nfr,1);
+            spvi = cell(1,nfr,1);
+            spmi = cell(1,nfr,1);
+            for j = 1:nfr
+                sppj = [];
+                spvj = [];
+                spmj = [];
+                for k = 1:nbd
+                    ppk = ppi{1,j,k};
+                    pvk = pvi{1,j,k};
+                    pmk = pmi{1,j,k};
+                    for l = 1:length(ppk)
+                        fp = find(ppk(l) == sppj);
+                        if fp
+                            spvj(fp) = spvj(fp) + pvk(l);
+                        else
+                            sppj(end+1) = ppk(l);
+                            spvj(end+1) = pvk(l);
+                            spmj(end+1) = pmk(l);
+                        end
+                    end
+                end
+                sppi{1,j,1} = sppj;
+                spvi{1,j,1} = spvj;
+                spmi{1,j,1} = spmj;
+            end
+            spph{i} = sppi;
+            spvh{i} = spvi;
+            spmh{i} = spmi;
+        else
+            spph{i} = [];
+            spvh{i} = [];
+            spmh{i} = [];
+        end
+        if not(isempty(p)) && not(isempty(p{h}))
+            p{h}{i} = p{h}{i}(:,:,1);
+        end
+    end
+    sc{h} = sch;
+    spp{h} = spph;
+    spv{h} = spvh;
+    spm{h} = spmh;
+end
+s = set(x,'Data',sc,'Pos',p,'PeakPos',spp,'PeakVal',spv,'PeakMode',spm);
+if not(isempty(postoption))
+    s = post(s,postoption);
+end
+
+
+function s = post(s,option)
+if option.c
+    d = get(s,'Data');
+    for k = 1:length(d)
+        for i = 1:length(d{k})
+            d{k}{i} = center(d{k}{i});
+        end
+    end
+    s = set(s,'Data',d);
+end
+if option.m
+    d = get(s,'Data');
+    ch = get(s,'Channels');
+    if not(isempty(ch))
+        for k = 1:length(d)
+            for i = 1:length(d{k})
+                d{k}{i} = d{k}{i}/length(ch{k});
+            end
+            ch{k} = [1];
+        end
+        s = set(s,'Data',d,'Channels',ch);
+    end
+end
+
+
+function [y orig] = eachtemporalchunk(orig,option,missing)
+[y orig] = mirsum(orig,option);
+
+
+%function y = combinetemporalchunk(old,new)
+%do = get(old,'Data');
+%to = get(old,'Time');
+%dn = get(new,'Data');
+%tn = get(new,'Time');
+%y = set(old,'Data',{{[do{1}{1};dn{1}{1}]}},...
+%            'Time',{{[to{1}{1};tn{1}{1}]}});
+%        
+        
+function y = combinechunk(old,new)
+if isa(old,'mirspectrum')
+    warning('WARNING IN MIRSUM: not yet fully generalized to mirspectrum')
+end
+do = get(old,'Data');
+do = do{1}{1};
+dn = get(new,'Data');
+dn = dn{1}{1};
+if length(dn) < length(do)
+    dn(length(do),:,:) = 0; % Zero-padding
+end
+y = set(old,'ChunkData',do+dn);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirsummary.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function varargout = mirsummary(varargin)
+%   mirsummary is the same function as mirsum.
+
+vout = '';
+for i = 1:max(1,nargout)
+    vout = [vout,'y',num2str(i),' '];
+end
+eval(['[ ',vout,'] = mirsum(varargin{:});'])
+eval(['varargout = { ',vout,'};'])
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirtempo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,405 @@
+function varargout = mirtempo(x,varargin)
+%   t = mirtempo(x) evaluates the tempo in beats per minute (BPM).
+%   Optional arguments:
+%       mirtempo(...,'Total',m) selects not only the best tempo, but the m
+%           best tempos.
+%       mirtempo(...,'Frame',l,h) orders a frame decomposition of window
+%           length l (in seconds) and hop factor h, expressed relatively to
+%           the window length. For instance h = 1 indicates no overlap.
+%           Default values: l = 3 seconds and h = .1
+%       mirtempo(...,'Min',mi) indicates the lowest tempo taken into
+%           consideration, expressed in bpm.
+%           Default value: 40 bpm.
+%       mirtempo(...,'Max',ma) indicates the highest tempo taken into
+%           consideration, expressed in bpm.
+%           Default value: 200 bpm.
+%       mirtempo(...,s) selects the tempo estimation strategy:
+%           s = 'Autocor': Approach based on the computation of the
+%               autocorrelation. (Default strategy)
+%               Option associated to the mirautocor function can be
+%               passed here as well (see help mirautocor):
+%                   'Enhanced' (toggled on by default here)
+%           s = 'Spectrum': Approach based on the computation of the
+%               spectrum .
+%               Option associated to the mirspectrum function can be
+%               passed here as well (see help mirspectrum):
+%                   'ZeroPad' (set by default to 10000 samples)
+%                   'Prod' (toggled off by default)
+%           These two strategies can be combined: the autocorrelation
+%               function is translated into the frequency domain in order
+%               to be compared to the spectrum curve.
+%               tempo(...,'Autocor','Spectrum') multiplies the two curves.
+%           Alternatively, an autocorrelation function ac or a spectrum sp
+%               can be directly passed to the function tempo:
+%                   mirtempo(ac) or mirtempo(sp)
+%       The options related to the onset detection phase can be specified 
+%               here as well (see help mironsets):
+%               onset detection strategies: 'Envelope', 'DiffEnvelope'
+%               (corresponding to 'Envelope', 'Diff'), 'SpectralFlux,
+%               'Pitch', 'Log', 'Mu', 'Filterbank'
+%               mironsets(...,'Sum',w) specifies when to sum the channels.
+%                   Possible values:
+%                       w = 'Before': sum before the autocorrelation or
+%                           spectrum computation.
+%                       w = 'After': autocorrelation or spectrum computed
+%                           for each band, and summed into a "summary".
+%               mirenvelope options: 'HalfwaveCenter','Diff' (toggled on by
+%                   default here),'HalfwaveDiff','Center','Smooth',
+%                   'Sampling'
+%               mirflux options: 'Inc','Halfwave','Complex','Median'
+%       mirtempo(...,'Resonance',r) specifies the resonance curve, which
+%           emphasizes the periods that are more easily perceived.
+%           Possible values: 'ToiviainenSnyder' (default), 0 (toggled off)
+%   Optional arguments used for the peak picking (cf. help mirpeaks)
+%       mirtempo(...,'Contrast',thr): a threshold value. A given local
+%           maximum will be considered as a peak if its distance with the
+%           previous and successive local minima (if any) is higher than 
+%           this threshold. This distance is expressed with respect to the
+%           total amplitude of the autocorrelation function.
+%               if no value for thr is given, the value thr=0.1 is chosen
+%                   by default.
+%
+%   [t,p] = mirtempo(...) also displays the result of the signal analysis
+%       leading to the tempo estimation, and shows in particular the
+%       peaks corresponding to the tempo values.
+            
+    
+        sum.key = 'Sum';
+        sum.type = 'String';
+        sum.choice = {'Before','After','Adjacent',0};
+        sum.default = 'Before';
+    option.sum = sum;
+        
+%% options related to mironsets:    
+
+        frame.key = 'Frame';
+        frame.type = 'Integer';
+        frame.number = 2;
+        frame.default = [0 0];
+        frame.keydefault = [3 .1];
+    option.frame = frame;
+    
+        fea.type = 'String';
+        fea.choice = {'Envelope','DiffEnvelope','SpectralFlux','Pitch'};
+        fea.default = 'Envelope';
+    option.fea = fea;
+    
+    %% options related to 'Envelope':
+    
+            envmeth.key = 'Method';
+            envmeth.type = 'String';
+            envmeth.choice = {'Filter','Spectro'};
+            envmeth.default = 'Filter';
+        option.envmeth = envmeth;
+    
+        %% options related to 'Filter':
+
+                fb.key = 'Filterbank';
+                fb.type = 'Integer';
+                fb.default = 10;
+            option.fb = fb;
+
+                fbtype.key = 'FilterbankType';
+                fbtype.type = 'String';
+                fbtype.choice = {'Gammatone','Scheirer','Klapuri'};
+                fbtype.default = 'Gammatone';
+            option.fbtype = fbtype;
+
+                ftype.key = 'FilterType';
+                ftype.type = 'String';
+                ftype.choice = {'IIR','HalfHann'};
+                ftype.default = 'IIR';
+            option.ftype = ftype;
+
+        %% options related to 'Spectro':
+        
+                band.type = 'String';
+                band.choice = {'Freq','Mel','Bark','Cents'};
+                band.default = 'Freq';
+            option.band = band;
+
+        
+            chwr.key = 'HalfwaveCenter';
+            chwr.type = 'Boolean';
+            chwr.default = 0;
+        option.chwr = chwr;
+
+            diff.key = 'Diff';
+            diff.type = 'Boolean';
+            diff.default = 1; % Different default for mirtempo
+        option.diff = diff;
+
+            diffhwr.key = 'HalfwaveDiff';
+            diffhwr.type = 'Integer';
+            diffhwr.default = 0;
+            diffhwr.keydefault = 1;
+        option.diffhwr = diffhwr;
+        
+            lambda.key = 'Lambda';
+            lambda.type = 'Integer';
+            lambda.default = 1;
+        option.lambda = lambda;
+
+            mu.key = 'Mu'; 
+            mu.type = 'Boolean'; 
+            mu.default = 0; 
+	        option.mu = mu; 
+        
+            log.key = 'Log';
+            log.type = 'Boolean';
+            log.default = 0;
+        option.log = log;
+
+            c.key = 'Center';
+            c.type = 'Boolean';
+            c.default = 0;
+        option.c = c;
+
+            aver.key = 'Smooth';
+            aver.type = 'Integer';
+            aver.default = 0;
+            aver.keydefault = 30;
+        option.aver = aver;
+
+            sampling.key = 'Sampling';
+            sampling.type = 'Integer';
+            sampling.default = 0;
+        option.sampling = sampling;
+
+    %% options related to 'SpectralFlux'
+    
+            complex.key = 'Complex';
+            complex.type = 'Boolean';
+            complex.default = 0;
+        option.complex = complex;
+
+            inc.key = 'Inc';
+            inc.type = 'Boolean';
+            inc.default = 1;
+        option.inc = inc;
+
+            median.key = 'Median';
+            median.type = 'Integer';
+            median.number = 2;
+            median.default = [.2 1.3];
+        option.median = median;
+
+            hw.key = 'Halfwave';
+            hw.type = 'Boolean';
+            hw.default = 1;
+        option.hw = hw;                
+        
+        
+%% options related to mirautocor:    
+
+        aut.key = 'Autocor';
+        aut.type = 'Integer';
+        aut.default = 0;
+        aut.keydefault = 1;
+    option.aut = aut;            
+    
+        nw.key = 'NormalWindow';
+        nw.default = 0;
+    option.nw = nw;
+
+        enh.key = 'Enhanced';
+        enh.type = 'Integers';
+        enh.default = 2:10;
+        enh.keydefault = 2:10;
+    option.enh = enh;
+
+        r.key = 'Resonance';
+        r.type = 'String';
+        r.choice = {'ToiviainenSnyder','vanNoorden',0,'off','no'};
+        r.default = 'ToiviainenSnyder';
+    option.r = r;
+
+
+%% options related to mirspectrum:
+    
+        spe.key = 'Spectrum';
+        spe.type = 'Integer';
+        spe.default = 0;
+        spe.keydefault = 1;
+    option.spe = spe;
+
+        zp.key = 'ZeroPad';
+        zp.type = 'Integer';
+        zp.default = 10000;
+        zp.keydefault = Inf;
+    option.zp = zp;
+    
+        prod.key = 'Prod';
+        prod.type = 'Integers';
+        prod.default = 0;
+        prod.keydefault = 2:6;
+    option.prod = prod;
+
+    
+%% options related to the peak detection
+
+        m.key = 'Total';
+        m.type = 'Integer';
+        m.default = 1;
+    option.m = m;
+        
+        thr.key = 'Contrast';
+        thr.type = 'Integer';
+        thr.default = 0.1;
+    option.thr = thr;
+        
+        mi.key = 'Min';
+        mi.type = 'Integer';
+        mi.default = 40;
+    option.mi = mi;
+        
+        ma.key = 'Max';
+        ma.type = 'Integer';
+        ma.default = 200;
+    option.ma = ma;
+
+        track.key = 'Track';
+        track.type = 'Boolean';
+        track.default = 0;
+    option.track = track;
+
+        pref.key = 'Pref';
+        pref.type = 'Integer';
+        pref.number = 2;
+        pref.default = [0 .2];
+    option.pref = pref;
+            
+        perio.key = 'Periodicity';
+        perio.type = 'Boolean';
+        perio.default = 0;
+    option.perio = perio;
+    
+specif.option = option;
+
+varargout = mirfunction(@mirtempo,x,varargin,nargout,specif,@init,@main);
+
+
+%% INIT
+
+function [y type] = init(x,option)
+if iscell(x)
+    x = x{1};
+end
+if option.perio
+    option.m = 3;
+    option.enh = 2:10;
+end
+if not(isamir(x,'mirautocor')) && not(isamir(x,'mirspectrum'))
+    if isframed(x) && strcmpi(option.fea,'Envelope') && not(isamir(x,'mirscalar'))
+        warning('WARNING IN MIRTEMPO: The input should not be already decomposed into frames.');
+        disp(['Suggestion: Use the ''Frame'' option instead.'])
+    end
+    if strcmpi(option.sum,'Before')
+        optionsum = 1;
+    elseif strcmpi(option.sum,'Adjacent')
+        optionsum = 5;
+    else
+        optionsum = 0;
+    end
+    if option.frame.length.val
+        x = mironsets(x,option.fea,'Filterbank',option.fb,...
+                    'FilterbankType',option.fbtype,...
+                    'FilterType',option.ftype,...
+                    'Sum',optionsum,'Method',option.envmeth,...
+                    option.band,'Center',option.c,...
+                    'HalfwaveCenter',option.chwr,'Diff',option.diff,...
+                    'HalfwaveDiff',option.diffhwr,'Lambda',option.lambda,...
+                    'Smooth',option.aver,'Sampling',option.sampling,...
+                    'Complex',option.complex,'Inc',option.inc,...
+                    'Median',option.median(1),option.median(2),...
+                    'Halfwave',option.hw,'Detect',0,...
+                    'Mu',option.mu,'Log',option.log,...
+                    'Frame',option.frame.length.val,...
+                            option.frame.length.unit,...
+                            option.frame.hop.val,...
+                            option.frame.hop.unit);
+    else
+        x = mironsets(x,option.fea,'Filterbank',option.fb,...
+                    'FilterbankType',option.fbtype,...
+                    'FilterType',option.ftype,...
+                    'Sum',optionsum,'Method',option.envmeth,...
+                    option.band,'Center',option.c,...
+                    'HalfwaveCenter',option.chwr,'Diff',option.diff,...
+                    'HalfwaveDiff',option.diffhwr,'Lambda',option.lambda,...
+                    'Smooth',option.aver,'Sampling',option.sampling,...
+                    'Complex',option.complex,'Inc',option.inc,...
+                    'Median',option.median(1),option.median(2),...
+                    'Halfwave',option.hw,'Detect',0,...
+                    'Mu',option.mu,'Log',option.log);
+    end
+end
+if option.aut == 0 && option.spe == 0
+    option.aut = 1;
+end
+if isamir(x,'mirautocor') || (option.aut && not(option.spe))
+    y = mirautocor(x,'Min',60/option.ma,'Max',60/option.mi,...
+          'Enhanced',option.enh,...'NormalInput','coeff',...
+          'Resonance',option.r,'NormalWindow',option.nw);
+elseif isamir(x,'mirspectrum') || (option.spe && not(option.aut))
+    y = mirspectrum(x,'Min',option.mi/60,'Max',option.ma/60,...
+                       'Prod',option.prod,...'NormalInput',...
+                       'ZeroPad',option.zp,'Resonance',option.r);
+elseif option.spe && option.aut
+    ac = mirautocor(x,'Min',60/option.ma,'Max',60/option.mi,...
+          'Enhanced',option.enh,...'NormalInput','coeff',...
+          'Resonance',option.r);
+    sp = mirspectrum(x,'Min',option.mi/60,'Max',option.ma/60,...
+                       'Prod',option.prod,...'NormalInput',...
+                       'ZeroPad',option.zp,'Resonance',option.r);
+    y = ac*sp;
+end
+if ischar(option.sum)
+    y = mirsum(y);
+end
+y = mirpeaks(y,'Total',option.m,'Track',option.track,...
+               'Pref',option.pref(1),option.pref(2),...
+               'Contrast',option.thr,'NoBegin','NoEnd',...
+               'Normalize','Local');
+type = {'mirscalar',mirtype(y)};            
+
+
+%% MAIN
+
+function o = main(p,option,postoption)
+if iscell(p)
+    p = p{1};
+end
+pt = get(p,'TrackPrecisePos');
+track = 1;
+if isempty(pt) || isempty(pt{1})
+    pt = get(p,'PeakPrecisePos');
+    track = 0;
+end
+bpm = cell(1,length(pt));
+for j = 1:length(pt)
+    bpm{j} = cell(1,length(pt{j}));
+    for k = 1:length(pt{j})
+        ptk = pt{j}{k};
+        bpmk = cell(1,size(ptk,2));
+        for h = 1:size(ptk,3)
+            for l = 1:size(ptk,2)
+                ptl = ptk{1,l,h};
+                if isempty(ptl)
+                    bpmk{1,l,h} = NaN;
+                else
+                    if isa(p,'mirautocor') && not(get(p,'FreqDomain'))
+                        bpmk{1,l,h} = 60./ptl;
+                    else
+                        bpmk{1,l,h} = ptl*60;
+                    end
+                end
+            end
+        end
+        if track
+            bpmk = bpmk{1};
+        end
+        bpm{j}{k} = bpmk;
+    end 
+end
+t = mirscalar(p,'Data',bpm,'Title','Tempo','Unit','bpm');
+o = {t,p};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirtimes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,41 @@
+function c = mirtimes(a,b)
+
+d = get(a,'Data');
+e = get(b,'Data');
+f = cell(1,length(d));
+p = get(a,'Pos');
+q = get(b,'Pos');
+r = cell(1,length(d));
+l = get(a,'Name');
+m = get(b,'Name');
+n = cell(1,length(l));
+for i = 1:length(d)
+    f{i} = cell(1,length(d{i}));
+    for j = 1:length(d{i})
+        pij = p{i}{j}(:,1,1);
+        qij = q{i}{j}(:,1,1);
+        pq = pij; %union(pij,qij);
+            % The sampling of the product is the sampling of the first
+            % operand.
+        dij = d{i}{j}; %interp1(pij,d{i}{j},pq);
+        eij = interp1(qij,e{i}{j},pq);
+        dij = max(dij,0);
+        eij = max(eij,0);
+        eij = eij./repmat(max(eij)+1e-16,[size(eij,1),1,1,1]);
+            % The second operand of mirtimes is scaled from 0 to 1.
+            % In this way, the range of value of the first operand is kept.
+        f{i}{j} = dij.*eij;
+        [x y] = find(isnan(f{i}{j}));
+        x = unique(x);
+        pq(x) = [];
+        f{i}{j}(x,:) = [];
+        r{i}{j} = repmat(pq,[1 size(p{i}{j},2) size(p{i}{j},3)]);
+    end
+    if strcmpi(l{i},m{i})
+        n{i} = l{i};
+    else
+        n{i} = [l{i} '*' m{i}];
+    end
+end
+c = set(a,'Pos',r,'Data',f,'Name',n,...
+          'Title',[get(a,'Title') ' * ' get(b,'Title')]);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirtype.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function type = mirtype(x)
+
+if iscell(x)
+    for i = 1:length(x)
+        type{i} = mirtype(x{i});
+    end
+    return
+end
+    
+if isa(x,'mirdesign')
+    type = get(x,'Type');
+else
+    type = class(x);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirverbose.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function v = mirverbose(s)
+% mirverbose(0) toggles off the display by MIRtoolbox of minor informations
+% in the Matlab Command Window (such as "Computing mirfunction ...").
+% mirverbose(1) toggles back on the display of such information.
+
+persistent mir_verbose
+
+if nargin
+    mir_verbose = s;
+else
+    if isempty(mir_verbose)
+        mir_verbose = 1;
+    end
+end
+
+v = mir_verbose;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirwaitbar.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function pb = mirwaitbar(s)
+% mirwaitbar(0) toggles off the display by MIRtoolbox of waitbar windows.
+% mirverbose(1) toggles back on the display of these waitbar windows.
+
+persistent mir_wait_bar
+
+if nargin
+    mir_wait_bar = s;
+else
+    if isempty(mir_wait_bar)
+        mir_wait_bar = 1;
+    end
+end
+
+pb = mir_wait_bar;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mirzerocross.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,72 @@
+function varargout = mirzerocross(orig,varargin)
+%   mirzeroscross(x) computes the sign-changes rate along the signal x,
+%       i.e., how many time the waveform crosses the X-axis. When applied on
+%       an audio waveform, gives a notion of noise.
+%   Optional argument:
+%       mirzerocross(...,'Per',p) precises the temporal reference for the
+%           rate computation.
+%           Possible values:
+%               p = 'Second': number of sign-changes per second (Default).
+%               p = 'Sample': number of sign-changes divided by the total 
+%                   number of samples.
+%           The 'Second' option returns a result equal to the one returned
+%               by the 'Sample' option multiplied by the sampling rate.
+%       mirzerocross(...,'Dir',d) precises the definition of sign change.
+%           Possible values:
+%               d = 'One': number of sign-changes from negative to positive 
+%                   only (or, equivalently, from positive to negative only).
+%                       (Default)
+%               d = 'Both': number of sign-changes in both ways.
+%           The 'Both' option returns a result equal to twice the one
+%               returned by the 'One' option.
+
+
+        per.key = 'Per';
+        per.type = 'String';
+        per.choice = {'Second','Sample'};
+        per.default = 'Second';
+    option.per = per;
+
+        dir.key = 'Dir';
+        dir.type = 'String';
+        dir.choice = {'One','Both'};
+        dir.default = 'One';
+    option.dir = dir;
+    
+specif.option = option;
+     
+varargout = mirfunction(@mirzerocross,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+if not(isamir(x,'mirdata'))
+    x = miraudio(x);
+end
+type = 'mirscalar';
+
+
+function z = main(a,option,postoption)
+if iscell(a)
+    a = a{1};
+end
+d = get(a,'Data');
+f = get(a,'Sampling');
+v = cell(1,length(d));
+for h = 1:length(d)
+    v{h} = cell(1,length(d{h}));
+    for i = 1:length(d{h})
+        di = d{h}{i};
+        nc = size(di,2);
+        nf = size(di,3);
+        nl = size(di,1);
+        zc = sum( di(2:end,:,:).*di(1:(end-1),:,:) < 0 ) /nl;
+        if strcmp(option.per,'Second')
+            zc = zc*f{h};
+        end
+        if strcmp(option.dir,'One')
+            zc = zc/2;
+        end
+        v{h}{i} = zc;
+    end
+end
+z = mirscalar(a,'Data',v,'Title','Zero-crossing rate');
\ No newline at end of file
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3info.exe has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3info.glnx86 has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3info.mac has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3info.maci has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3info.maci64 has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3read.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,334 @@
+function [Y,FS,NBITS,OPTS] = mp3read(FILE,N,MONO,DOWNSAMP,DELAY)
+% MP3READ   Read MP3 audio file via use of external binaries.
+%   Y = MP3READ(FILE) reads an mp3-encoded audio file into the
+%     vector Y just like wavread reads a wav-encoded file (one channel 
+%     per column).  Extension ".mp3" is added if FILE has none.
+%     Also accepts other formats of wavread, such as
+%   Y = MP3READ(FILE,N) to read just the first N sample frames (N
+%     scalar), or the frames from N(1) to N(2) if N is a two-element vector.  
+%   Y = MP3READ(FILE,FMT) or Y = mp3read(FILE,N,FMT) 
+%     with FMT as 'native' returns int16 samples instead of doubles; 
+%     FMT can be 'double' for default behavior (to exactly mirror the
+%     syntax of wavread).
+%
+%   [Y,FS,NBITS,OPTS] = MP3READ(FILE...) returns extra information:
+%     FS is the sampling rate,  NBITS is the bit depth (always 16), 
+%     OPTS.fmt is a format info string; OPTS has multiple other
+%     fields, see WAVREAD.
+%
+%   SIZ = MP3READ(FILE,'size') returns the size of the audio data contained
+%     in the file in place of the actual audio data, returning the
+%     2-element vector SIZ=[samples channels].
+%
+%   [Y...] = MP3READ(FILE,N,MONO,DOWNSAMP,DELAY) extends the
+%     WAVREAD syntax to allow access to special features of the
+%     mpg123 engine:  MONO = 1 forces output to be mono (by
+%     averaging stereo channels); DOWNSAMP = 2 or 4 downsamples by 
+%     a factor of 2 or 4 (thus FS returns as 22050 or 11025
+%     respectively for a 44 kHz mp3 file); DELAY controls how many
+%     "warm up" samples to drop at the start of the file; the
+%     default value of 2257 makes an mp3write/mp3read loop for a 44
+%     kHz mp3 file be as close as possible to being temporally
+%     aligned; specify as 0 to prevent discard of initial samples.
+%
+%   Example:
+%   To read an mp3 file as doubles at its original width and sampling rate:
+%     [Y,FS] = mp3read('piano.mp3');
+%   To read the first 1 second of the same file, downsampled by a
+%   factor of 4, cast to mono, using the default filename
+%   extension:
+%     [Y,FS4] = mp3read('piano', FS/4, 1, 4);
+%
+%   Note: Because the mp3 format encodes samples in blocks of 26 ms (at
+%   44 kHz), and because of the "warm up" period of the encoder,
+%   the file length may not be exactly what you expect.
+%
+%   Note: requires external binaries mpg123 and mp3info; you
+%   can find binaries for several platforms at:
+%     http://labrosa.ee.columbia.edu/matlab/mp3read.html
+%
+%   See also mp3write, wavread.
+
+% 2003-07-20 dpwe@ee.columbia.edu  This version calls mpg123.
+% 2004-08-31 Fixed to read whole files correctly
+% 2004-09-08 Uses mp3info to get info about mp3 files too
+% 2004-09-18 Reports all mp3info fields in OPTS.fmt; handles MPG2LSF sizes
+%            + added MONO, DOWNSAMP flags, changed default behavior.
+% 2005-09-28 Fixed bug reading full-rate stereo as 1ch (thx bjoerns@vjk.dk)
+% 2006-09-17 Chop off initial 2257 sample delay (for 44.1 kHz mp3)
+%            so read-write loop doesn't get progressively delayed.
+%            You can suppress this with a 5th argument of 0.
+% 2007-02-04 Added support for FMT argument to match wavread
+%            Added automatic selection of binary etc. to allow it
+%            to work cross-platform without editing prior to
+%            submitting to Matlab File Exchange
+% 2007-07-23 Tweaks to 'size' mode so it exactly agrees with read data.
+
+% find our baseline directory
+path = fileparts(which('mp3read'));
+
+% %%%%% Directory for temporary file (if needed)
+% % Try to read from environment, or use /tmp if it exists, or use CWD
+tmpdir = getenv('TMPDIR');
+if isempty(tmpdir) || exist(tmpdir,'file')==0
+  tmpdir = '/tmp';
+end
+if exist(tmpdir,'file')==0
+  tmpdir = '';
+end
+% ensure it exists
+%if length(tmpdir) > 0 && exist(tmpdir,'file')==0
+%  mkdir(tmpdir);
+%end
+
+%%%%%% Command to delete temporary file (if needed)
+rmcmd = 'rm';
+
+%%%%%% Location of the binaries - attempt to choose automatically
+%%%%%% (or edit to be hard-coded for your installation)
+ext = lower(computer);
+if ispc
+  ext = 'exe';
+  rmcmd = 'del';
+end
+mpg123 = fullfile(path,['mpg123.',ext]);
+mp3info = fullfile(path,['mp3info.',ext]);
+
+%%%%% Process input arguments
+if nargin < 2
+  N = 0;
+end
+
+% Check for FMT spec (per wavread)
+FMT = 'double';
+if ischar(N)
+  FMT = lower(N);
+  N = 0;
+end
+
+if length(N) == 1
+  % Specified N was upper limit
+  N = [1 N];
+end
+if nargin < 3
+  forcemono = 0;
+else
+  % Check for 3rd arg as FMT
+  if ischar(MONO)
+    FMT = lower(MONO);
+    MONO = 0;
+  end
+  forcemono = (MONO ~= 0);
+end
+if nargin < 4
+  downsamp = 1;
+else
+  downsamp = DOWNSAMP;
+end
+if downsamp ~= 1 && downsamp ~= 2 && downsamp ~= 4
+  error('DOWNSAMP can only be 1, 2, or 4');
+end
+if nargin < 5
+  mpg123delay44kHz = 2257;  % empirical delay of lame/mpg123 loop
+  delay = round(mpg123delay44kHz/downsamp);
+else
+  delay = DELAY;
+end
+
+if strcmp(FMT,'native') == 0 && strcmp(FMT,'double') == 0 && ...
+      strcmp(FMT,'size') == 0
+  error(['FMT must be ''native'' or ''double'' (or ''size''), not ''',FMT,'''']);
+end
+
+
+%%%%%% Constants
+NBITS=16;
+
+%%%%% add extension if none (like wavread)
+[path,file,ext] = fileparts(FILE);
+if isempty(ext)
+  FILE = [FILE, '.mp3'];
+end
+
+%%%%%% Probe file to find format, size, etc. using "mp3info" utility
+cmd = ['"',mp3info, '" -r m -p "%Q %u %b %r %v * %C %e %E %L %O %o %p" "', FILE,'"'];
+% Q = samprate, u = #frames, b = #badframes (needed to get right answer from %u) 
+% r = bitrate, v = mpeg version (1/2/2.5)
+% C = Copyright, e = emph, E = CRC, L = layer, O = orig, o = mono, p = pad
+w = mysystem(cmd);
+% Break into numerical and ascii parts by finding the delimiter we put in
+starpos = findstr(w,'*');
+nums = str2num(w(1:(starpos - 2)));
+strs = tokenize(w((starpos+2):end));
+
+SR = nums(1);
+nframes = nums(2);
+nchans = 2 - strcmp(strs{6}, 'mono');
+layer = length(strs{4});
+bitrate = nums(4)*1000;
+mpgv = nums(5);
+% Figure samples per frame, after
+% http://board.mp3-tech.org/view.php3?bn=agora_mp3techorg&key=1019510889
+if layer == 1
+  smpspfrm = 384;
+elseif SR < 32000 && layer ==3
+  smpspfrm = 576;
+  if mpgv == 1
+    error('SR < 32000 but mpeg version = 1');
+  end
+else
+  smpspfrm = 1152;
+end
+
+OPTS.fmt.mpgBitrate = bitrate;
+OPTS.fmt.mpgVersion = mpgv;
+% fields from wavread's OPTS
+OPTS.fmt.nAvgBytesPerSec = bitrate/8;
+OPTS.fmt.nSamplesPerSec = SR;
+OPTS.fmt.nChannels = nchans;
+OPTS.fmt.nBlockAlign = smpspfrm/SR*bitrate/8;
+OPTS.fmt.nBitsPerSample = NBITS;
+OPTS.fmt.mpgNFrames = nframes;
+OPTS.fmt.mpgCopyright = strs{1};
+OPTS.fmt.mpgEmphasis = strs{2};
+OPTS.fmt.mpgCRC = strs{3};
+OPTS.fmt.mpgLayer = strs{4};
+OPTS.fmt.mpgOriginal = strs{5};
+OPTS.fmt.mpgChanmode = strs{6};
+OPTS.fmt.mpgPad = strs{7};
+OPTS.fmt.mpgSampsPerFrame = smpspfrm;
+
+if SR == 16000 && downsamp == 4
+  error('mpg123 will not downsample 16 kHz files by 4 (only 2)');
+end
+
+if downsamp == 1
+  downsampstr = '';
+else
+  downsampstr = [' -',num2str(downsamp)];
+end
+FS = SR/downsamp;
+
+if forcemono == 1
+  nchans = 1;
+  chansstr = ' -m';
+else
+  chansstr = '';
+end
+
+% Size-reading version
+if strcmp(FMT,'size') == 1
+   Y = [floor(smpspfrm*nframes/downsamp)-delay, nchans];
+else
+
+  % Temporary file to use
+  tmpfile = fullfile(tmpdir, ['tmp',num2str(round(1000*rand(1))),'.wav']);
+
+  skipx = 0;
+  skipblks = 0;
+  skipstr = '';
+  sttfrm = N(1)-1;
+
+  % chop off transcoding delay?
+  %sttfrm = sttfrm + delay;  % empirically measured
+  % no, we want to *decode* those samples, then drop them
+  % so delay gets added to skipx instead
+  
+  if sttfrm > 0
+    skipblks = floor(sttfrm*downsamp/smpspfrm);
+    skipx = sttfrm - (skipblks*smpspfrm/downsamp);
+    skipstr = [' -k ', num2str(skipblks)];
+  end
+  skipx = skipx + delay;
+  
+  lenstr = '';
+  endfrm = -1;
+  decblk = 0;
+  if length(N) > 1
+    endfrm = N(2);
+    if endfrm > sttfrm
+      decblk = ceil((endfrm+delay)*downsamp/smpspfrm) - skipblks + 10;   
+      % we read 10 extra blks (+10) to cover the case where up to 10 bad 
+      % blocks are included in the part we are trying to read (it happened)
+      lenstr = [' -n ', num2str(decblk)];
+      % This generates a spurious "Warn: requested..." if reading right 
+      % to the last sample by index (or bad blks), but no matter.
+    end
+ end
+
+  % Run the decode
+  cmd=['"',mpg123,'"', downsampstr, chansstr, skipstr, lenstr, ...
+       ' -q -w "', tmpfile,'"  "',FILE,'"'];
+  %w = 
+  mysystem(cmd);
+
+  % Load the data
+  Y = wavread(tmpfile);
+
+%  % pad delay on to end, just in case
+%  Y = [Y; zeros(delay,size(Y,2))];
+%  % no, the saved file is just longer
+  
+  if decblk > 0 && length(Y) < decblk*smpspfrm/downsamp
+    % This will happen if the selected block range includes >1 bad block
+    disp(['Warn: requested ', num2str(decblk*smpspfrm/downsamp),' frames, returned ',num2str(length(Y))]);
+  end
+  
+  % Delete tmp file
+  mysystem([rmcmd,' "', tmpfile,'"']);
+  
+  % debug
+%  disp(['sttfrm=',num2str(sttfrm),' endfrm=',num2str(endfrm),' skipx=',num2str(skipx),' delay=',num2str(delay),' len=',num2str(length(Y))]);
+  
+  % Select the desired part
+  if skipx+endfrm-sttfrm > length(Y)
+      endfrm = length(Y)+sttfrm-skipx;
+  end
+  
+  if endfrm > sttfrm
+    Y = Y(skipx+(1:(endfrm-sttfrm)),:);
+  elseif skipx > 0
+    Y = Y((skipx+1):end,:);
+  end
+  
+  % Convert to int if format = 'native'
+  if strcmp(FMT,'native')
+    Y = int16((2^15)*Y);
+  end
+
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function w = mysystem(cmd)
+% Run system command; report error; strip all but last line
+[s,w] = system(cmd);
+if s ~= 0 
+  error(['unable to execute ',cmd,' (',w,')']);
+end
+% Keep just final line
+w = w((1+max([0,findstr(w,10)])):end);
+% Debug
+%disp([cmd,' -> ','*',w,'*']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function a = tokenize(s)
+% Break space-separated string into cell array of strings
+% 2004-09-18 dpwe@ee.columbia.edu
+a = [];
+p = 1;
+n = 1;
+l = length(s);
+nss = findstr([s(p:end),' '],' ');
+for ns = nss
+  % Skip initial spaces
+  if ns == p
+    p = p+1;
+  else
+    if p <= l
+      a{n} = s(p:(ns-1));
+      n = n+1;
+      p = ns+1;
+    end
+  end
+end
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mp3write.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,173 @@
+function mp3write(D,SR,NBITS,FILE,OPTIONS)
+% MP3WRITE   Write MP3 file by use of external binary
+%   MP3WRITE(Y,FS,NBITS,FILE) writes waveform data Y to mp3-encoded
+%     file FILE at sampling rate FS using bitdepth NBITS.  
+%     The syntax exactly mirrors WAVWRITE.  NBITS must be 16.
+%   MP3WRITE(Y,FS,FILE) assumes NBITS is 16
+%   MP3WRITE(Y,FILE) further assumes FS = 8000.
+%
+%   MP3WRITE(..., OPTIONS) specifies additional compression control 
+%     options as a string passed directly to the lame encoder
+%     program; default is '--quiet -h' for high-quality model.
+%
+%   Example: 
+%   To convert a wav file to mp3 (assuming the sample rate is 
+%   supported):
+%     [Y,FS] = wavread('piano.wav');
+%     mp3write(Y,FS,'piano.mp3');
+%   To force lame to use 160 kbps (instead of default 128 kbps)
+%   with the default filename extension (mp3):
+%     mp3write(Y,FS,'piano','--quiet -h -b 160');
+%
+%   Note: The actual mp3 encoding is done by an external binary, 
+%     lame, which is available for multiple platforms.  Usable
+%     binaries are available from:
+%     http://labrosa.ee.columbia.edu/matlab/mp3read.html
+%
+%   Note: MP3WRITE will use the mex file popenw, if available, to
+%     open a pipe to the lame encoder.  Otherwise, it will have to
+%     write a large temporary file, then execute lame on that file.
+%     popenw is available at: 
+%       http://labrosa.ee.columbia.edu/matlab/popenrw.html
+%     This is a nice way to save large audio files as the
+%     incremental output of your code, but you'll have to adapt the
+%     central loop of this function (rather than using it directly).
+%
+%   See also: mp3read, wavwrite, popenw.
+
+% 2005-11-10 Original version
+% 2007-02-04 Modified to exactly match wavwrite syntax, and to
+%   automatically find architecture-dependent binaries.
+% 2007-07-26 Writing of stereo files via tmp file fixed (thx Yu-ching Lin)
+%
+% $Header: /Users/dpwe/matlab/columbiafns/RCS/mp3write.m,v 1.2 2007/07/26 15:09:16 dpwe Exp $
+
+% find our baseline directory
+[path] = fileparts(which('mp3write'));
+
+% %%%%% Directory for temporary file (if needed)
+% % Try to read from environment, or use /tmp if it exists, or use CWD
+tmpdir = getenv('TMPDIR');
+if isempty(tmpdir) || exist(tmpdir,'file')==0
+  tmpdir = '/tmp';
+end
+if exist(tmpdir,'file')==0
+  tmpdir = '';
+end
+% ensure it exists
+%if length(tmpdir) > 0 && exist(tmpdir,'file')==0
+%  mkdir(tmpdir);
+%end
+
+%%%%%% Command to delete temporary file (if needed)
+rmcmd = 'rm';
+
+%%%%%% Location of the binary - attempt to choose automatically
+%%%%%% (or edit to be hard-coded for your installation)
+ext = lower(computer);
+if ispc
+  ext = 'exe';
+  rmcmd = 'del';
+end
+lame = fullfile(path,['lame.',ext]);
+
+%%%% Process input arguments
+% Do we have NBITS?
+mynargin = nargin;
+if ischar(NBITS)
+  % NBITS is a string i.e. it's actually the filename
+  if mynargin > 3
+    OPTIONS = FILE;
+  end
+  FILE = NBITS;
+  NBITS = 16;
+  % it's as if NBITS had been specified...
+  mynargin = mynargin + 1;
+end
+
+if mynargin < 5
+  OPTIONS = '--quiet -h';  % -h means high-quality psych model
+end
+
+[nr, nc] = size(D);
+if nc < nr
+  D = D';
+  [nr, nc] = size(D);
+end
+% Now rows are channels, cols are time frames (so interleaving is right)
+
+%%%%% add extension if none (like wavread)
+[path,file,ext] = fileparts(FILE);
+if isempty(ext)
+  FILE = [FILE, '.mp3'];
+end
+
+nchan = nr;
+nfrm = nc;
+
+if nchan == 1
+  monostring = ' -m m';
+else
+  monostring = '';
+end
+
+lameopts = [' ', OPTIONS, monostring, ' '];
+
+%if exist('popenw') == 3
+if length(which('popenw')) > 0
+
+  % We have the writable stream process extensions
+  cmd = ['"',lame,'"', lameopts, '-r -s ',num2str(SR),' - "',FILE,'"'];
+
+  p = popenw(cmd);
+  if p < 0
+    error(['Error running popen(',cmd,')']);
+  end
+
+  % We feed the audio to the encoder in blocks of <blksize> frames.
+  % By adapting this loop, you can create your own code to 
+  % write a single, large, MP3 file one part at a time.
+  
+  blksiz = 10000;
+
+  nrem = nfrm;
+  base = 0;
+
+  while nrem > 0
+    thistime = min(nrem, blksiz);
+    done = popenw(p,32767*D(:,base+(1:thistime)),'int16be');
+    nrem = nrem - thistime;
+    base = base + thistime;
+    %disp(['done=',num2str(done)]);
+  end
+
+  % Close pipe
+  popenw(p,[]);
+
+else 
+  disp('Warning: popenw not available, writing temporary file');
+  
+  tmpfile = fullfile(tmpdir,['tmp',num2str(round(1000*rand(1))),'.wav']);
+
+  wavwrite(D',SR,tmpfile);
+  
+  cmd = ['"',lame,'"', lameopts, '"',tmpfile, '" "', FILE, '"'];
+
+  mysystem(cmd);
+
+  % Delete tmp file
+  mysystem([rmcmd, ' "', tmpfile,'"']);
+
+end 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function w = mysystem(cmd)
+% Run system command; report error; strip all but last line
+[s,w] = system(cmd);
+if s ~= 0 
+  error(['unable to execute ',cmd,' (',w,')']);
+end
+% Keep just final line
+w = w((1+max([0,findstr(w,10)])):end);
+% Debug
+%disp([cmd,' -> ','*',w,'*']);
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/mpg123.exe has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/mpg123.glnx86 has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/mpg123.mac has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/mpg123.maci has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolbox/mpg123.maci64 has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/mtimescell.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function varargout = mtimescell(x,varargin)
+
+specif.combinechunk = 'Average';
+
+varargout = mirfunction(@mtimescell,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = mirtype(x{1});
+
+
+function y = main(x,option,postoption)
+y = mtimes(x{1},x{2});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/netlabgmminit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,95 @@
+function mix = netlabgmminit(mix, x, options)
+%GMMINIT Initialises Gaussian mixture model from data
+%(Renamed NETLABGMMINIT in MIRtoolbox to avoid conflict with statistics
+%toolbox)
+%	Description
+%	MIX = GMMINIT(MIX, X, OPTIONS) uses a dataset X to initialise the
+%	parameters of a Gaussian mixture model defined by the data structure
+%	MIX.  The k-means algorithm is used to determine the centres. The
+%	priors are computed from the proportion of examples belonging to each
+%	cluster. The covariance matrices are calculated as the sample
+%	covariance of the points associated with (i.e. closest to) the
+%	corresponding centres. For a mixture of PPCA model, the PPCA
+%	decomposition is calculated for the points closest to a given centre.
+%	This initialisation can be used as the starting point for training
+%	the model using the EM algorithm.
+%
+%	See also
+%	GMM
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[ndata, xdim] = size(x);
+
+% Check that inputs are consistent
+errstring = consist(mix, 'gmm', x);
+if ~isempty(errstring)
+  error(errstring);
+end
+
+% Arbitrary width used if variance collapses to zero: make it 'large' so
+% that centre is responsible for a reasonable number of points.
+GMM_WIDTH = 1.0;
+
+% Use kmeans algorithm to set centres
+options(5) = 1;	
+[mix.centres, options, post] = netlabkmeans(mix.centres, x, options);
+
+% Set priors depending on number of points in each cluster
+cluster_sizes = max(sum(post, 1), 1);  % Make sure that no prior is zero
+mix.priors = cluster_sizes/sum(cluster_sizes); % Normalise priors
+
+switch mix.covar_type
+case 'spherical'
+   if mix.ncentres > 1
+      % Determine widths as distance to nearest centre 
+      % (or a constant if this is zero)
+      cdist = dist2(mix.centres, mix.centres);
+      cdist = cdist + diag(ones(mix.ncentres, 1)*realmax);
+      mix.covars = min(cdist);
+      mix.covars = mix.covars + GMM_WIDTH*(mix.covars < eps);
+   else
+      % Just use variance of all data points averaged over all
+      % dimensions
+      mix.covars = mean(diag(cov(x)));
+   end
+  case 'diag'
+    for j = 1:mix.ncentres
+      % Pick out data points belonging to this centre
+      c = x(find(post(:, j)),:);
+      diffs = c - (ones(size(c, 1), 1) * mix.centres(j, :));
+      mix.covars(j, :) = sum((diffs.*diffs), 1)/size(c, 1);
+      % Replace small entries by GMM_WIDTH value
+      mix.covars(j, :) = mix.covars(j, :) + GMM_WIDTH.*(mix.covars(j, :)<eps);
+    end
+  case 'full'
+    for j = 1:mix.ncentres
+      % Pick out data points belonging to this centre
+      c = x(find(post(:, j)),:);
+      diffs = c - (ones(size(c, 1), 1) * mix.centres(j, :));
+      mix.covars(:,:,j) = (diffs'*diffs)/(size(c, 1));
+      % Add GMM_WIDTH*Identity to rank-deficient covariance matrices
+      if rank(mix.covars(:,:,j)) < mix.nin
+	mix.covars(:,:,j) = mix.covars(:,:,j) + GMM_WIDTH.*eye(mix.nin);
+      end
+    end
+  case 'ppca'
+    for j = 1:mix.ncentres
+      % Pick out data points belonging to this centre
+      c = x(find(post(:,j)),:);
+      diffs = c - (ones(size(c, 1), 1) * mix.centres(j, :));
+      [tempcovars, tempU, templambda] = ...
+	ppca((diffs'*diffs)/size(c, 1), mix.ppca_dim);
+      if length(templambda) ~= mix.ppca_dim
+	error('Unable to extract enough components');
+      else 
+        mix.covars(j) = tempcovars;
+        mix.U(:, :, j) = tempU;
+        mix.lambda(j, :) = templambda;
+      end
+    end
+  otherwise
+    error(['Unknown covariance type ', mix.covar_type]);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/netlabkmeans.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,126 @@
+function [centres, options, post, errlog] = netlabkmeans(centres, data, options)
+%KMEANS	Trains a k means cluster model.
+%(Renamed NETLABKMEANS in MIRtoolbox in order to avoid conflict with
+%   statistics toolbox...)
+%
+%	Description
+%	 CENTRES = KMEANS(CENTRES, DATA, OPTIONS) uses the batch K-means
+%	algorithm to set the centres of a cluster model. The matrix DATA
+%	represents the data which is being clustered, with each row
+%	corresponding to a vector. The sum of squares error function is used.
+%	The point at which a local minimum is achieved is returned as
+%	CENTRES.  The error value at that point is returned in OPTIONS(8).
+%
+%	[CENTRES, OPTIONS, POST, ERRLOG] = KMEANS(CENTRES, DATA, OPTIONS)
+%	also returns the cluster number (in a one-of-N encoding) for each
+%	data point in POST and a log of the error values after each cycle in
+%	ERRLOG.    The optional parameters have the following
+%	interpretations.
+%
+%	OPTIONS(1) is set to 1 to display error values; also logs error
+%	values in the return argument ERRLOG. If OPTIONS(1) is set to 0, then
+%	only warning messages are displayed.  If OPTIONS(1) is -1, then
+%	nothing is displayed.
+%
+%	OPTIONS(2) is a measure of the absolute precision required for the
+%	value of CENTRES at the solution.  If the absolute difference between
+%	the values of CENTRES between two successive steps is less than
+%	OPTIONS(2), then this condition is satisfied.
+%
+%	OPTIONS(3) is a measure of the precision required of the error
+%	function at the solution.  If the absolute difference between the
+%	error functions between two successive steps is less than OPTIONS(3),
+%	then this condition is satisfied. Both this and the previous
+%	condition must be satisfied for termination.
+%
+%	OPTIONS(14) is the maximum number of iterations; default 100.
+%
+%	See also
+%	GMMINIT, GMMEM
+%
+
+%	Copyright (c) Ian T Nabney (1996-2001)
+
+[ndata, data_dim] = size(data);
+[ncentres, dim] = size(centres);
+
+if dim ~= data_dim
+  error('Data dimension does not match dimension of centres')
+end
+
+if (ncentres > ndata)
+  error('More centres than data')
+end
+
+% Sort out the options
+if (options(14))
+  niters = options(14);
+else
+  niters = 100;
+end
+
+store = 0;
+if (nargout > 3)
+  store = 1;
+  errlog = zeros(1, niters);
+end
+
+% Check if centres and posteriors need to be initialised from data
+if (options(5) == 1)
+  % Do the initialisation
+  perm = randperm(ndata);
+  perm = perm(1:ncentres);
+
+  % Assign first ncentres (permuted) data points as centres
+  centres = data(perm, :);
+end
+% Matrix to make unit vectors easy to construct
+id = eye(ncentres);
+
+% Main loop of algorithm
+for n = 1:niters
+
+  % Save old centres to check for termination
+  old_centres = centres;
+  
+  % Calculate posteriors based on existing centres
+  d2 = dist2(data, centres);
+  % Assign each point to nearest centre
+  [minvals, index] = min(d2', [], 1);
+  post = id(index,:);
+
+  num_points = sum(post, 1);
+  % Adjust the centres based on new posteriors
+  for j = 1:ncentres
+    if (num_points(j) > 0)
+      centres(j,:) = sum(data(find(post(:,j)),:), 1)/num_points(j);
+    end
+  end
+
+  % Error value is total squared distance from cluster centres
+  e = sum(minvals);
+  if store
+    errlog(n) = e;
+  end
+  if options(1) > 0
+    fprintf(1, 'Cycle %4d  Error %11.6f\n', n, e);
+  end
+
+  if n > 1
+    % Test for termination
+    if max(max(abs(centres - old_centres))) < options(2) & ...
+        abs(old_e - e) < options(3)
+      options(8) = e;
+      return;
+    end
+  end
+  old_e = e;
+end
+
+% If we get here, then we haven't terminated in the given number of 
+% iterations.
+options(8) = e;
+if (options(1) >= 0)
+  disp(maxitmess);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/nthoutput.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function varargout = nthoutput(orig,varargin)
+
+        nth.type = 'Integer';
+        nth.default = 1;
+        nth.position = 2;
+    option.nth = nth;
+specif.option = option;
+
+varargout = mirfunction(@nthoutput,orig,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = mirtype(x);
+type = type{option.nth};
+
+
+function y = main(x,option,postoption)
+y = x{option.nth};
+%y = x{1}{option.nth};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/num2col.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function col = num2col(k);
+
+switch k
+    case 1 
+        col = [0 0 1];
+    case 2 
+        col = [1 0 0];
+    case 3 
+        col = [0 1 0];
+    case 4
+        col = [0 0 0];
+    case 5 
+        col = [1 0 1];
+    case 6 
+        col = [1 1 0];
+    case 7 
+        col = [0 1 1];
+    case 8
+        col = [1 0 .5];
+    case 9
+        col = [.5 1 0];
+    case 10
+        col = [0 .5 1];
+    case 11
+        col = [1 .5 0];
+    case 12
+        col = [.5 0 1];
+    case 13
+        col = [0 1 .5];
+    otherwise
+        col = [rand rand rand];
+end    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/openbdf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,192 @@
+function [DAT,H1]=openbdf(FILENAME)
+% EDF=openedf(FILENAME)
+% Opens an EDF File (European Data Format for Biosignals) in MATLAB (R)
+% <A HREF="http://www.medfac.leidenuniv.nl/neurology/knf/kemp/edf.htm">About EDF</A> 
+
+%	Copyright (C) 1997-1998 by Alois Schloegl
+%	a.schloegl@ieee.org
+%	Ver 2.20 	18.Aug.1998
+%	Ver 2.21 	10.Oct.1998
+%	Ver 2.30 	 5.Nov.1998
+%
+%	For use under Octave define the following function
+% function s=upper(s); s=toupper(s); end;
+
+% V2.12    Warning for missing Header information  
+% V2.20    EDF.AS.* changed
+% V2.30    EDF.T0 made Y2K compatible until Year 2090
+
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License
+% as published by the Free Software Foundation; either version 2
+% of the  License, or (at your option) any later version.
+% 
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+% 
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+% Name changed Sept 6,2002  T.S. Lorig
+
+SLASH='/';		% defines Seperator for Subdirectories
+BSLASH=setstr(92);
+
+cname=computer;
+if cname(1:2)=='PC' SLASH=BSLASH; end;
+
+fid=fopen(FILENAME,'r','ieee-le');          
+if fid<0 
+	% fprintf(2,['Error LOADEDF: File ' FILENAME ' not found\n']);  
+    % Warning desactivated in MIRtoolbox
+	return;
+end;
+
+EDF.FILE.FID=fid;
+EDF.FILE.OPEN = 1;
+EDF.FileName = FILENAME;
+
+PPos=min([max(find(FILENAME=='.')) length(FILENAME)+1]);
+SPos=max([0 find((FILENAME=='/') | (FILENAME==BSLASH))]);
+EDF.FILE.Ext = FILENAME(PPos+1:length(FILENAME));
+EDF.FILE.Name = FILENAME(SPos+1:PPos-1);
+if SPos==0
+	EDF.FILE.Path = pwd;
+else
+	EDF.FILE.Path = FILENAME(1:SPos-1);
+end;
+EDF.FileName = [EDF.FILE.Path SLASH EDF.FILE.Name '.' EDF.FILE.Ext];
+
+H1=setstr(fread(EDF.FILE.FID,256,'char')');     %
+EDF.VERSION=H1(1:8);                     % 8 Byte  Versionsnummer 
+%if 0 fprintf(2,'LOADEDF: WARNING  Version EDF Format %i',ver); end;
+EDF.PID = deblank(H1(9:88));                  % 80 Byte local patient identification
+EDF.RID = deblank(H1(89:168));                % 80 Byte local recording identification
+%EDF.H.StartDate = H1(169:176);         % 8 Byte		
+%EDF.H.StartTime = H1(177:184);         % 8 Byte		
+EDF.T0=[str2num(H1(168+[7 8])) str2num(H1(168+[4 5])) str2num(H1(168+[1 2])) str2num(H1(168+[9 10])) str2num(H1(168+[12 13])) str2num(H1(168+[15 16])) ];
+
+% Y2K compatibility until year 2090
+if EDF.VERSION(1)=='0'
+        if EDF.T0(1) < 91
+                EDF.T0(1)=2000+EDF.T0(1);
+        else
+                EDF.T0(1)=1900+EDF.T0(1);
+        end;
+else ;
+        % in a future version, this is hopefully not needed   
+end;
+
+EDF.HeadLen = str2num(H1(185:192));  % 8 Byte  Length of Header
+% reserved = H1(193:236);	         % 44 Byte		
+EDF.NRec = str2num(H1(237:244));     % 8 Byte  # of data records
+EDF.Dur = str2num(H1(245:252));      % 8 Byte  # duration of data record in sec
+EDF.NS = str2num(H1(253:256));       % 8 Byte  # of signals
+
+EDF.Label = setstr(fread(EDF.FILE.FID,[16,EDF.NS],'char')');		
+EDF.Transducer = setstr(fread(EDF.FILE.FID,[80,EDF.NS],'char')');	
+EDF.PhysDim = setstr(fread(EDF.FILE.FID,[8,EDF.NS],'char')');	
+
+EDF.PhysMin= str2num(setstr(fread(EDF.FILE.FID,[8,EDF.NS],'char')'));	
+EDF.PhysMax= str2num(setstr(fread(EDF.FILE.FID,[8,EDF.NS],'char')'));	
+EDF.DigMin = str2num(setstr(fread(EDF.FILE.FID,[8,EDF.NS],'char')'));	%	
+EDF.DigMax = str2num(setstr(fread(EDF.FILE.FID,[8,EDF.NS],'char')'));	%	
+
+% check validity of DigMin and DigMax
+if (length(EDF.DigMin) ~= EDF.NS)
+        fprintf(2,'Warning OPENEDF: Failing Digital Minimum\n');
+        EDF.DigMin = -(2^15)*ones(EDF.NS,1);
+end
+if (length(EDF.DigMax) ~= EDF.NS)
+        fprintf(2,'Warning OPENEDF: Failing Digital Maximum\n');
+        EDF.DigMax = (2^15-1)*ones(EDF.NS,1);
+end
+if (any(EDF.DigMin >= EDF.DigMax))
+        fprintf(2,'Warning OPENEDF: Digital Minimum larger than Maximum\n');
+end  
+% check validity of PhysMin and PhysMax
+if (length(EDF.PhysMin) ~= EDF.NS)
+        fprintf(2,'Warning OPENEDF: Failing Physical Minimum\n');
+        EDF.PhysMin = EDF.DigMin;
+end
+if (length(EDF.PhysMax) ~= EDF.NS)
+        fprintf(2,'Warning OPENEDF: Failing Physical Maximum\n');
+        EDF.PhysMax = EDF.DigMax;
+end
+if (any(EDF.PhysMin >= EDF.PhysMax))
+        fprintf(2,'Warning OPENEDF: Physical Minimum larger than Maximum\n');
+        EDF.PhysMin = EDF.DigMin;
+        EDF.PhysMax = EDF.DigMax;
+end  
+EDF.PreFilt= setstr(fread(EDF.FILE.FID,[80,EDF.NS],'char')');	%	
+tmp = fread(EDF.FILE.FID,[8,EDF.NS],'char')';	%	samples per data record
+EDF.SPR = str2num(setstr(tmp));	%	samples per data record
+
+fseek(EDF.FILE.FID,32*EDF.NS,0);
+
+EDF.Cal = (EDF.PhysMax-EDF.PhysMin)./ ...
+    (EDF.DigMax-EDF.DigMin);
+EDF.Off = EDF.PhysMin - EDF.Cal .* EDF.DigMin;
+tmp = find(EDF.Cal < 0);
+EDF.Cal(tmp) = ones(size(tmp));
+EDF.Off(tmp) = zeros(size(tmp));
+
+EDF.Calib=[EDF.Off';(diag(EDF.Cal))];
+%EDF.Calib=sparse(diag([1; EDF.Cal]));
+%EDF.Calib(1,2:EDF.NS+1)=EDF.Off';
+
+EDF.SampleRate = EDF.SPR / EDF.Dur;
+
+EDF.FILE.POS = ftell(EDF.FILE.FID);
+if EDF.NRec == -1   % unknown record size, determine correct NRec
+  fseek(EDF.FILE.FID, 0, 'eof');
+  endpos = ftell(EDF.FILE.FID);
+  EDF.NRec = floor((endpos - EDF.FILE.POS) / (sum(EDF.SPR) * 2));
+  fseek(EDF.FILE.FID, EDF.FILE.POS, 'bof');
+  H1(237:244)=sprintf('%-8i',EDF.NRec);      % write number of records
+end; 
+
+EDF.Chan_Select=(EDF.SPR==max(EDF.SPR));
+for k=1:EDF.NS
+	if EDF.Chan_Select(k)
+	    EDF.ChanTyp(k)='N';
+	else
+	    EDF.ChanTyp(k)=' ';
+	end;         
+	if findstr(upper(EDF.Label(k,:)),'ECG')
+	    EDF.ChanTyp(k)='C';
+	elseif findstr(upper(EDF.Label(k,:)),'EKG')
+	    EDF.ChanTyp(k)='C';
+	elseif findstr(upper(EDF.Label(k,:)),'EEG')
+	    EDF.ChanTyp(k)='E';
+	elseif findstr(upper(EDF.Label(k,:)),'EOG')
+	    EDF.ChanTyp(k)='O';
+	elseif findstr(upper(EDF.Label(k,:)),'EMG')
+	    EDF.ChanTyp(k)='M';
+	end;
+end;
+
+EDF.AS.spb = sum(EDF.SPR);	% Samples per Block
+bi=[0;cumsum(EDF.SPR)]; 
+
+idx=[];idx2=[];
+for k=1:EDF.NS, 
+	idx2=[idx2, (k-1)*max(EDF.SPR)+(1:EDF.SPR(k))];
+end;
+maxspr=max(EDF.SPR);
+idx3=zeros(EDF.NS*maxspr,1);
+for k=1:EDF.NS, idx3(maxspr*(k-1)+(1:maxspr))=bi(k)+ceil((1:maxspr)'/maxspr*EDF.SPR(k));end;
+
+%EDF.AS.bi=bi;
+EDF.AS.IDX2=idx2;
+%EDF.AS.IDX3=idx3;
+
+
+DAT.Head=EDF;  
+DAT.MX.ReRef=1;
+
+%DAT.MX=feval('loadxcm',EDF);
+
+return;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/peaksegments.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function y = peaksegments(func,d,p,varargin)
+
+y = cell(1,length(d));
+for h = 1:length(d)
+    if not(iscell(d{h})) % for histograms
+        p{h} = {p{h}(:,:,1)'};
+        d{h} = {d{h}'};
+    end
+    for i = 1:length(d{h})
+        %sum(var(p{h}{i},1,2))
+        %p{h}{i} = repmat(p{h}{i}(:,1,1),[1,size(p{h}{i},2),size(p{h}{i},3)]);
+        d{h}{i} = d{h}{i} + repmat(min(d{h}{i}),[size(d{h}{i},1),1,1]);
+        for j = 1:size(d{h}{i},3)
+            for k = 1:size(d{h}{i},2)
+                yk = [];
+                nb = 0;
+                f = find(not(isnan(d{h}{i}(1:end,k,j))));
+                while not(isempty(f))
+                    l = f(1);
+                    f = find(isnan(d{h}{i}(l:end,k,j)))+l-1;
+                    if isempty(f)
+                        f = size(d{h}{i},1)+1;
+                    end
+                    r = l:f(1)-1;
+                    if length(r)>1
+                        nb = nb+1;
+                        if nargin > 3
+                            for g = 1:length(varargin)
+                                if g == 1
+                                    v{g} = repmat(varargin{g}{h}{i}{1,k,j}(nb),...
+                                              [length(r),1,1]);
+                                else
+                                    v{g} = varargin{g}{h}{i}{1,k,j}(nb);
+                                end
+                            end
+                        else
+                            v = {};
+                        end
+                        yk(nb,1) = func(abs(d{h}{i}(r,k,j)),...
+                                        p{h}{i}(r,k,1),...
+                                        v{:});
+                    end
+                    f = find(not(isnan(d{h}{i}(f(1):end,k,j))))+f(1)-1;
+                end
+                y{h}{i}{1,k,j} = yk;
+            end
+        end
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/pluscell.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function varargout = pluscell(x,varargin)
+
+specif.combinechunk = 'Average';
+
+varargout = mirfunction(@pluscell,x,varargin,nargout,specif,@init,@main);
+
+
+function [x type] = init(x,option)
+type = mirtype(a{1});
+
+
+function y = main(x,option,postoption)
+y = plus(x{1},x{2});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/purgedata.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function c = purgedata(c)
+
+d = get(c,'Data');
+l = length(d);
+empty = cell(1,l);
+for i = 1:l
+    empty{i} = cell(1,length(d{i}));
+end
+c = set(c,'PeakPos',empty,'PeakVal',empty,...
+          'PeakPrecisePos',{},'PeakPreciseVal',{},'PeakMode',empty);
+          %,...'Tmp',[]);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/readbdf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,81 @@
+function [DAT,S]=readbdf(DAT,Records,Mode)
+% [DAT,signal]=readedf(EDF_Struct,Records)
+% Loads selected Records of an EDF File (European Data Format for Biosignals) into MATLAB
+% <A HREF="http://www.medfac.leidenuniv.nl/neurology/knf/kemp/edf.htm">About EDF</A> 
+%
+% Records1	List of Records for Loading
+% Mode		0 	default
+%		1 	No AutoCalib
+%		Mode+2	Concatanated (channels with lower sampling rate if more than 1 record is loaded)
+
+%	Version 2.11
+%	03.02.1998
+%	Copyright (c) 1997,98 by Alois Schloegl
+%	a.schloegl@ieee.org	
+                      
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License
+% as published by the Free Software Foundation; either version 2
+% of the  License, or (at your option) any later version.
+% 
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+% 
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This program has been modified from the original version for .EDF files
+% The modifications are to the number of bytes read on line 53 (from 2 to
+% 3) and to the type of data read - line 54 (from int16 to bit24). Finally the name
+% was changed from readedf to readbdf
+% T.S. Lorig Sept 6, 2002
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargin<3 Mode=0; end;
+ 
+EDF=DAT.Head; 
+RecLen=max(EDF.SPR);
+
+S=NaN*zeros(RecLen,EDF.NS);
+DAT.Record=zeros(length(Records)*RecLen,EDF.NS);
+DAT.Valid=uint8(zeros(1,length(Records)*RecLen));
+DAT.Idx=Records(:)';
+        
+for nrec=1:length(Records),
+
+	NREC=(DAT.Idx(nrec)-1);
+	if NREC<0 fprintf(2,'Warning READEDF: invalid Record Number %i \n',NREC);end;
+
+	fseek(EDF.FILE.FID,(EDF.HeadLen+NREC*EDF.AS.spb*3),'bof');
+	[s, count]=fread(EDF.FILE.FID,EDF.AS.spb,'bit24');
+
+	S(EDF.AS.IDX2)=s;
+
+	%%%%% Test on  Over- (Under-) Flow
+%	V=sum([(S'==EDF.DigMax(:,ones(RecLen,1))) + (S'==EDF.DigMin(:,ones(RecLen,1)))])==0;
+	V=sum([(S(:,EDF.Chan_Select)'>=EDF.DigMax(EDF.Chan_Select,ones(RecLen,1))) + ...
+	       (S(:,EDF.Chan_Select)'<=EDF.DigMin(EDF.Chan_Select,ones(RecLen,1)))])==0;
+	EDF.ERROR.DigMinMax_Warning(find(sum([(S'>EDF.DigMax(:,ones(RecLen,1))) + (S'<EDF.DigMin(:,ones(RecLen,1)))]')>0))=1;
+	%	invalid=[invalid; find(V==0)+l*k];
+                             
+	if floor(Mode/2)==1
+		for k=1:EDF.NS,
+			DAT.Record(nrec*EDF.SPR(k)+(1-EDF.SPR(k):0),k)=S(1:EDF.SPR(k),k);
+		end;
+	else
+		DAT.Record(nrec*RecLen+(1-RecLen:0),:)=S;
+	end;
+
+	DAT.Valid(nrec*RecLen+(1-RecLen:0))=V;
+end;
+if rem(Mode,2)==0	% Autocalib
+	DAT.Record=[ones(RecLen*length(Records),1) DAT.Record]*EDF.Calib;
+end;                   
+
+DAT.Record=DAT.Record';
+return;         
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/surfplot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+function h = surfplot(varargin)
+%SURFPLOT Pseudocolor (checkerboard) plot.
+%   SURFPLOT(C) is a pseudocolor or "checkerboard" plot of matrix C.
+%   The values of the elements of C specify the color in each
+%   cell of the plot. In the default shading mode, 'faceted',
+%   each cell has a constant color and the last row and column of
+%   C are not used. With shading('interp'), each cell has color
+%   resulting from bilinear interpolation of the color at its 
+%   four vertices and all elements of C are used. 
+%   The smallest and largest elements of C are assigned the first and
+%   last colors given in the color table; colors for the remainder of the 
+%   elements in C are determined by table-lookup within the remainder of 
+%   the color table.
+%
+%   SURFPLOT(X,Y,C), where X and Y are vectors or matrices, makes a
+%   pseudocolor plot on the grid defined by X and Y.  X and Y could 
+%   define the grid for a "disk", for example.
+%
+%   SURFPLOT(AX,..) plots into AX instead of GCA.
+%
+%   H = SURFPLOT(...) returns a handle to a SURFACE object.
+%
+%   SURFPLOT is really a SURF with its view set to directly above.
+
+% SURFPLOT is equivalent to PCOLOR, but slighted corrected for MIRToolbox
+
+%-------------------------------
+%   Additional details:
+%
+%
+%   PCOLOR sets the View property of the SURFACE object to directly 
+%   overhead.
+%
+%   If the NextPlot axis property is REPLACE (HOLD is off), PCOLOR resets 
+%   all axis properties, except Position, to their default values
+%   and deletes all axis children (line, patch, surf, image, and 
+%   text objects).  View is set to [0 90].
+
+%   Copyright 1984-2002 The MathWorks, Inc. 
+%   $Revision: 5.9.4.1 $  $Date: 2002/10/24 02:14:11 $
+
+%   Slightly corrected for MIRToolbox
+
+%   J.N. Little 1-5-92
+
+% Parse possible Axes input
+[cax,args,nargs] = axescheck(varargin{:});
+error(nargchk(1,4,nargs))
+
+cax = newplot(cax);
+hold_state = ishold(cax);
+
+if nargs == 1
+    x = args{1};
+    hh = surface(zeros(size(x)),x,'parent',cax);
+    [m,n] = size(x);
+    lims = [ 1 n 1 m];
+elseif nargs == 3
+    [x,y,c] = deal(args{1:3});
+    %cc = zeros(size(y,1),size(x,2));
+    %cc(1:size(c,1),1:size(c,2)) = c;
+    hh = surface(x,y,zeros(size(y,1),size(x,2)),c,'parent',cax,'EdgeColor','none');  % Here are the modification
+    lims = [min(min(x)) max(max(x)) min(min(y)) max(max(y))];
+else
+    error('Must have one or three input data arguments.')
+end
+if ~hold_state
+    set(cax,'View',[0 90]);
+    set(cax,'Box','on');
+    axis(cax,lims);
+end
+if nargout == 1
+    h = hh;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/uncell.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,140 @@
+function x = uncell(x,lvl)
+    % lvl >= 0: The recursion level, starting from 0, when observing the 
+    %   cell structures of cell structures of etc. of the input data x. 
+    % lvl = NaN:
+    % lvl = -Inf: used in display of segmented mirscalar
+if nargin < 2
+    lvl = 0;
+end
+if iscell(x)
+    if isempty(x)
+        x = [];
+    elseif length(x) == 1
+        x = uncell(x{1},lvl+1);
+    else
+        het = 0;    % Flags different kinds of structures:
+                    % - structures with fixed column size but variable nb of columns (het = 1)
+                    % - structures with variable column size but fixed nb of columns (het = 2)
+                    % - structures with variable column size and variable nb of columns (het = NaN)
+        l = length(x(:,:,1));
+        nf = size(x,3);
+        z = cell(size(x));
+        for i1 = 1:size(x,1)
+            for i2 = 1:size(x,2)
+                for i3 = 1:size(x,3)
+                    z{i1,i2,i3} = uncell(x{i1,i2,i3},lvl+1);
+                    if i1 == 1 && i2 == 1 && i3 == 1
+                        s = size(z{i1,i2,i3});
+                    elseif not(isequal(s,size(z{i1,i2,i3})))
+                        % A break in the homogeneity has been discovered.
+                        if lvl>0
+                            if (het == 0 || het == 2) && (s(2) == size(z{i1,i2,i3},2))
+                                het = 2;
+                                s = max(s,size(z{i1,i2,i3}));
+                            elseif (het == 0 || het == 1) && (s(1) == size(z{i1,i2,i3},1))
+                                het = 1;
+                                s = max(s,size(z{i1,i2,i3}));
+                            else
+                                het = NaN;
+                            end
+                        else
+                            het = NaN;
+                        end
+                    end
+                end
+            end
+        end
+        if isnan(het)
+            x = z;
+        else
+            if size(s)<3
+                s(3) = 1;
+            end
+            if (s(1)>1 || isnan(lvl)) || lvl == -Inf
+                x = NaN([s(1) l*s(2) nf*s(3:end)]);
+                for j = 1:nf
+                    for i = 1:l
+                        if size(z,1)>size(z,2)
+                            zij =  z{i,1,j};
+                        else
+                            zij =  z{1,i,j};
+                        end
+                        if size(zij,3) == 1
+                            x(1:size(z{1,i,j},1),...
+                              (i-1)*s(2)+1:(i-1)*s(2)+size(z{1,i,j},2),...
+                              j,1:size(z{1,i,j},4)) = z{1,i,j};
+                        elseif nf == 1
+                            x(1:size(z{1,i,j},1),...
+                              (i-1)*s(2)+1:(i-1)*s(2)+size(z{1,i,j},2),...
+                              :,1:size(z{1,i,j},4)) = z{1,i,j};
+                        end
+                    end
+                end
+            else
+                x = NaN([l*s(1) s(2) nf*s(3:end)]);
+                for j = 1:nf
+                    for i = 1:l
+                        if size(z,1)>size(z,2)
+                            zij =  z{i,1,j};
+                        else
+                            zij =  z{1,i,j};
+                        end
+                        if ischar(zij) && length(zij) == 1 && zij>='A' && zij <= 'G'
+                            %zi
+                            zij = zij-'A';
+                        end
+                        x((i-1)*s(1)*size(zij,1)+1:(i-1)*s(1)*size(zij,1)+size(zij,1),...
+                          1:size(zij,2),...
+                          j,...
+                          1:size(zij,4)) = zij;
+                    end
+                end
+            end
+        end
+    end
+elseif ischar(x)
+    switch x
+        case 'C'
+            x = 0;
+        case 'C#'
+            x = 1;
+        case 'D'
+            x = 2;
+        case 'D#'
+            x = 3;
+        case 'E'
+            x = 4;
+        case 'F'
+            x = 5;
+        case 'F#'
+            x = 6;
+        case 'G'
+            x = 7;
+        case 'G#'
+            x = 8;
+        case 'A'
+            x = 9;
+        case 'A#'
+            x = 10;
+        case 'B'
+            x = 11;
+    end
+elseif 0 %scal
+    if size(x,1)==1 && size(x,2)==1 && size(x,3)>1
+        x = shiftdim(x,2);
+    else
+        %y = zeros(size(x,2),size(x,1),size(x,3));
+        %y = zeros(size(x));
+        %for i = 1:size(x,3)
+        %    y(:,:,i) = x(:,:,i);
+        %end
+        %x = y;
+    end
+elseif 0 %not(isnan(lvl)) && lvl>=0
+    %x = squeeze(x);
+    if size(x,1) == 1
+        x = x(:);
+    end
+elseif 0 %size(x,3) > 1 && size(x,1) == 1
+    x = reshape(x,size(x,2),size(x,3))';
+end
\ No newline at end of file
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amaj3.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amaj4.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amaj5.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amin3.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amin4.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Amin5.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/Cmaj.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/czardas.wav has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo0grandbuffet.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+help mirtoolbox
+help miraudio
+a = miraudio('ragtime','Center','Sampling',11025)
+mirplay(a)
+mirspectrum(a)
+mirgetdata(a)
+get(a,'Sampling')
+
+a = miraudio('laksin')
+a = miraudio(a,'Trim')
+a = miraudio(a,'Extract',0,1)
+e = mirenvelope(a)
+e = mirenvelope(a,'Diff')
+e = mirenvelope(a,'HalfwaveDiff')
+
+pause, close all
+
+s = mirspectrum('Amin3')
+s = mirspectrum(s,'Max',3000)
+s = mirspectrum(s,'dB')
+s = mirspectrum('Amin3','Mel')
+mirpeaks(s)
+
+pause, close all
+
+ac = mirautocor('Amin3')
+ac = mirautocor(ac,'Enhanced',2:10)
+ac = mirautocor(ac,'Freq')
+
+pause, close all
+
+f = mirframe('ragtime',.1,.5)
+s = mirspectrum(f)
+s = mirspectrum('ragtime','frame',.1,.5)
+mirpeaks(s)
+mirflux(s)
+mirflux(mirautocor(a,'Frame'))
+
+pause, close all
+
+fb = mirfilterbank('ragtime','NbChannels',5)
+e = mirenvelope(fb)
+ae = mirautocor(e)
+sa = mirsum(ae)
+
+pause, close all
+
+r1 = mirrms('movie1','Frame')
+r2 = mirrms('movie2','Frame')
+mirlowenergy(r1)
+mirlowenergy(r2)
+
+pause, close all
+
+[t,ac] = mirtempo('ragtime')
+[t,ac] = mirtempo('czardas','frame')
+
+pause, close all
+
+at = mirattacks('ragtime')
+mirattackslope(at)
+mirbrightness('ragtime','frame')
+mirroughness('ragtime','frame')
+
+pause, close all
+
+[p,a] = mirpitch('ragtime','frame')
+mirchromagram('ragtime','wrap','no')
+mirchromagram('ragtime')
+mirkey('ragtime')
+k = mirkey('ragtime','frame')
+mirmode('ragtime')
+m = mirmode('ragtime','frame')
+
+pause, close all
+
+mirstat(m)
+mirhisto(m)
+mirexport('result.txt',k,m)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo1pitch.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,147 @@
+function demo1pitch
+
+% Demo 1:Pitch extraction		
+% Aims: To study the diverse tools available in the toolbox for pitch
+%extraction.
+% In the following exercises, we will try to extract the pitch contents of various audio files using diverse techniques. All the audio files are included in the ?MIRtoolbox_Demos? folder.
+
+%% 1. Analyis of a single chord
+
+% Load the audio file 'Amin3.wav'.
+a = miraudio('Amin3')
+%and play it:
+mirplay(a)
+
+% Observe the periodicities contained in the signal by computing the autocorrelation function:
+ac = mirautocor(a)
+% The autocorrelation function can also be displayed in the frequency domain (?Freq?), and the frequency range can be specified, for instance between 75 and 2400 Hz:
+ac = mirautocor(ac, 'Freq','Min',75,'Hz','Max',2400,'Hz')
+
+% The peaks of the curve indicates the most important periodicities:
+pac = mirpeaks(ac)
+% But the two peaks at the start and end of the curves are meaningless, so should be removed:
+pac = mirpeaks(ac, 'NoBegin','NoEnd')
+
+% The corresponding pitch height are given by:
+p = mirpitch(pac)
+
+% The actual numerical data (here, the frequency of each pitch) is given by:
+mirgetdata(p)
+
+% The resulting pitches can be finally played:
+mirplay(p)
+
+% So far, the results do not seem very convincing, do they?
+
+pause, close all
+
+%% 2. Improving the analysis
+
+% Clearly, we need to refine the methods in order to retrieve the notes played in the chord. First of all, the autocorrelation function can be ?generalized?, i.e., ?compressed? by a factor of, for instance, 0.5 (cf. MIRtoolbox User?s Manual at the mirautocor section for an explanation of the 'Compres' option):
+ac = mirautocor(a,'Compres',.5)
+
+% The rest of the computation can actually be performed using the shortcut:
+[p pac] = mirpitch(ac)  
+
+% Look and listen to the results. 
+mirgetdata(p)
+mirplay(p)
+
+% Does it sound better? What is the problem this time?
+
+pause, close all
+
+%% 3. Improving the analysis, again
+
+% In fact, the autocorrelation function contains a lot of harmonics that need to be removed. For that purpose, the autocorrelation function can be ?enhanced? (cf. MIRtoolbox User?s Manual at the mirautocor section for an explanation of the 'Enhanced' option):
+ac = mirautocor(ac,'Enhanced')
+
+% Carry out the rest of the computation as in section 2.2. 
+[p pac] = mirpitch(ac)
+mirgetdata(p)
+mirplay(p)
+
+% What do you think of the results?
+
+pause, close all
+
+%% 4. Improving the analysis, still
+
+% An additional improvement consists in first decomposing the audio into two channels using the command:
+fb = mirfilterbank(a,'2Channels') 
+
+% Compute the autocorrelation on each channel:
+ac = mirautocor(fb,'Compres',.5)
+
+% The autocorrelation of each channel can then be summed together:
+ac = mirsum(ac)
+
+% And the enhancement can be performed afterwards:
+ac = mirautocor(ac,'Enhanced')
+
+% And the rest of the computation follows the same principle than before.
+[p ac] = mirpitch(ac)
+
+% The result should be better this way.
+mirgetdata(p)
+mirplay(p)
+
+% Hopefully, the whole chain of operation can be performed automatically using the simple command:
+[p ac] = mirpitch(a)
+[p ac] = mirpitch(a,'Cepstrum')
+[p ac] = mirpitch(a,'AutocorSpectrum')
+
+pause, close all
+
+%% 5. Frame-based analysis
+
+% Let?s analyze a longer musical sequence, such as ragtime.wav:
+a = miraudio('ragtime');
+mirplay(a)
+
+% A direct analysis of the recording using the previous command
+[p ac] = mirpitch(a) 
+% is not concluding, as it tries to find the pitches contained in the whole signal.
+mirgetdata(p)
+mirplay(p)
+
+% It is better to estimate the pitch content frame-by-frame:
+[p ac] = mirpitch(a,'Frame')
+mirgetdata(p)
+
+% Don?t forget to listen to the results.
+mirplay(p)
+
+pause, close all
+
+%% 6. Segment-based analysis
+
+% But it might get more sense to first decompose the signal into notes, using the commands:
+o = mironsets(a,'Attacks')
+% (The 'Attacks' option enables to segment at the beginning of each note
+% attack phase, i.e., where the energy is minimum, instead of segmenting where the energy is maximum.)
+mirplay(o)
+
+sg = mirsegment(a,o)
+mirplay(sg)
+
+% and to compute the pitch on each successive segment:
+[p ac] = mirpitch(sg)
+mirgetdata(p)
+
+% Again, don?t forget to listen to the results.
+mirplay(p)
+
+pause, close all
+
+%% 7. Monody analysis
+
+% Conclude with the analysis of a Finnish folk song, Läksin minä kesäyönä, whose excerpt is recorded in the file ?laksin.wav?. As the melody is sung by one voice only, you can use the ?Mono? option in mirpitch.
+mirplay('laksin')
+o = mironsets('laksin','Attacks','Contrast',.1)
+mirplay(o)
+sg = mirsegment('laksin',o)
+mirplay(sg)
+p = mirpitch(sg,'mono')
+mirgetdata(p)
+mirplay(p)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo2timbre.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function demo2timbre
+
+try
+    cd('train_set')
+catch
+end
+
+a = miraudio('Folder');
+
+z = mirzerocross(a)
+disp('Ascending order of zero crossing...')
+mirplay(a,'Increasing',z,'Every',5)
+
+l = mirlowenergy(a)
+disp('Ascending order of low energy rate...')
+mirplay(a,'Increasing',l,'Every',5)
+
+c = mircentroid(a)
+disp('Ascending order of spectral centroid...')
+mirplay(a,'Increasing',c,'Every',5)
+
+r = mirrolloff(a)
+disp('Ascending order of spectral roll-off...')
+mirplay(a,'Increasing',r,'Every',5)
+
+i = mirregularity(a)
+disp('Ascending order of spectral irregularity...')
+mirplay(a,'Increasing',i,'Every',5)
+
+e = mirentropy(a)
+disp('Ascending order of spectral entropy...')
+mirplay(a,'Increasing',e,'Every',5)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo3tempo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+function demo3tempo
+% To get familiar with tempo estimation from audio using the MIR Toolbox.
+% To assess the performance of the tempo estimation method.
+
+% 1. Let's investigate the different stages needed for tempo estimation. 
+ 
+d = miraudio('ragtime')
+mirenvelope(d)
+e = mirenvelope(d,'Halfwavediff')
+
+% Decompose the audio file with a filter bank.
+f = mirfilterbank(d)
+
+% Calculate also a half-wave rectified differentiated envelope.
+ee = mirenvelope(f,'HalfwaveDiff')
+
+% Sum the frequency channels.ok
+s = mirsum(ee,'Centered') 
+
+d2 = miraudio('vivaldi')
+f2 = mirfilterbank(d2)
+ee2 = mirenvelope(f2,'HalfwaveDiff')
+s2 = mirsum(ee2,'Centered') 
+
+% Calculate the autocorrelation function.
+ac = mirautocor(s) 
+ 
+% Apply the resonance model to the autocorrelation function.
+ac = mirautocor(s,'Resonance') 
+ 
+% Find peaks in the autocorrelation function.
+p = mirpeaks(ac) 
+mirgetdata(p)
+
+% Get the period of the peaks.
+t = mirtempo(p,'Total',1)
+
+display('Strike any key to continue...');
+pause
+close all
+
+% 2. All the functions we used are integrated into the function tempo.
+help mirtempo
+
+% For instance, we can simply write:
+[t,ac] = mirtempo('ragtime')
+
+% As you can see in the help, the resonance is integrated by default in the
+% tempo function. To toggle off the use of the resonance function, type:
+[t,ac] = mirtempo('ragtime','Resonance',0)
+
+[t,ac] = mirtempo('ragtime','total',5)
+
+display('Strike any key to continue...');
+pause
+close all
+
+% 3. The excerpt 'laksin' and 'czardas' have variable tempi. Use frame-
+% based tempo analysis to estimate the variation of the tempi. 
+% Apply to this end the tempo command with the 'frame' option. 
+[t1,p1] = mirtempo('laksin','Frame')
+[t2,p2] = mirtempo('czardas','Frame')
+
+% What is the range of variation of tempi?
+help mirhisto
+h1 = mirhisto(t1)
+h2 = mirhisto(t2)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo4segmentation.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,154 @@
+function demo4segmentation
+% To get familiar with some approaches of segmentation of audio files 
+% using MIRtoolbox. 
+ 
+% 1. Load an audio file (for instance, guitar.wav). 
+a = miraudio('guitar');
+
+% 2. We will perform the segmentation strategy as proposed in (Foote &
+% Cooper, 2003). First, decompose the file into successive frames of 50 ms 
+% without overlap. 
+help mirframe
+fr = mirframe(a,0.05,1)
+
+% 3. Compute the spectrum representation (FFT) of the frames.
+sp = mirspectrum(fr)
+clear fr
+% (Remove from the memory any data that will not be used any more.)
+
+% 4. Compute the similarity matrix that shows the similarity between the 
+% spectrum of different frames.
+help mirsimatrix
+sm = mirsimatrix(sp)
+clear sp
+% Look at the structures shown in the matrix and find the relation with the
+% structure heard when listening to the extract. 
+
+% 5. Estimate the novelty score related to the similarity matrix. It 
+% consists in a convolution of the diagonal of the matrix with a
+% checker-board Gaussian kernel. Use the novelty function for that purpose. 
+help mirnovelty
+nv = mirnovelty(sm)
+
+% 6. Detect the peaks in the novelty score.
+help mirpeaks
+p1 = mirpeaks(nv)
+
+% You can change the threshold value of the peak picker function in order to 
+% get better results. 
+p2 = mirpeaks(nv,'Contrast',0.01)
+
+clear nv
+
+% 7. Segment the original audio file using the peaks as position for
+% segmentation. 
+help mirsegment
+s1 = mirsegment(a,p1)
+clear p1
+
+% 8. Listen to the results.
+mirplay(s1)
+
+%s2 = mirsegment(a,p2)
+%clear p2
+%mirplay(s2)
+
+% 9. Compute the similarity matrix of this obtained segmentation, in order
+% to view the relationships between the different segments and their
+% possible clustering into higher-level groups. 
+mirsimatrix(s1,'Similarity')
+clear s1
+%mirsimatrix(s2)
+%clear s2
+
+display('Strike any key to continue...');
+pause
+close all
+
+% 10. Change the size of the kernel used in the novelty function, in order
+% to obtain segmentations of different levels of detail, from detailed
+% analysis of the local texture, to very simple segmentation of the whole 
+% piece.
+n100 = mirnovelty(sm,'KernelSize',100)
+n50 = mirnovelty(sm,'KernelSize',50)
+n10 = mirnovelty(sm,'KernelSize',10)
+clear sm
+% As you can see, the smaller the gaussian kernel is, the more peaks can be
+% found in the novelty score. Indeed, if the kernel is small, the cumulative
+% multiplication of its elements with the superposed elements in the
+% similarity matrix may vary more easily, throughout the progressive
+% sliding of the kernel along the diagonal of the similarity matrix, and
+% local change of texture may be more easily detected. On the contrary,
+% when the kernel is large, only large-scale change of texture are
+% detected.
+
+display('Strike any key to continue...');
+pause
+close all
+
+p100 = mirpeaks(n100,'NoBegin','NoEnd')
+clear n100
+p50 = mirpeaks(n50,'NoBegin','NoEnd')
+clear n50
+p10 = mirpeaks(n10,'NoBegin','NoEnd')
+clear n10
+s100 = mirsegment(a,p100)
+clear p100
+mirplay(s100)
+clear s100
+s50 = mirsegment(a,p50)
+clear p50
+mirplay(s50)
+clear s50
+s10 = mirsegment(a,p10)
+clear p10
+mirplay(s10)
+clear s10
+
+display('Strike any key to continue...');
+pause
+close all
+
+% One more compact way of writing these commands is as follows:
+mirsegment(a,'Novelty')
+mirsegment(a,'Novelty','Contrast',0.01)
+mirsegment(a,'Novelty','KernelSize',100)
+
+display('Strike any key to continue...');
+pause
+close all
+
+% Besides, if you want to see the novelty curve with the peaks, just add a
+% second output:
+[s50 p50] = mirsegment(a,'Novelty','KernelSize',50)
+clear s50 p50
+[s10 p10] = mirsegment(a,'Novelty','KernelSize',10)
+clear a s10 p10
+
+display('Strike any key to continue...');
+pause
+close all
+
+
+% 11. Try the whole process with MFCC instead of spectrum analysis. Take the
+% first ten MFCC for instance.
+help mirsegment
+% The segment function can simply be called as follows:
+sc = mirsegment('czardas','Novelty','MFCC','Rank',1:10)
+clear sc
+
+% Here are some other examples of use:
+[ssp p m b] = mirsegment('valse_triste_happy','Spectrum',...
+                                'KernelSize',150,'Contrast',.1)
+clear p m b
+mirplay(ssp)
+clear ssp
+
+display('Strike any key to continue...');
+pause
+close all
+
+[smfcc2 p m a] = mirsegment('valse_triste_happy','MFCC',2:10,...
+                                'KernelSize',150,'Contrast',.1)
+clear p m a
+mirplay(smfcc2)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo5export.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function demo5export
+% Example of use of the export function.
+% For more examples, cf. mirfeatures.
+
+s = mirspectrum('Folder');
+if not(isempty(get(s,'Data')))
+    ch = mirchromagram(s);
+    k = mirkeystrength(ch);
+    %h = mirhisto(k);
+    e = mirenvelope('Folder');
+    d = mirenvelope(e,'Diff');
+    mirexport('NoFrameNoPeaks.txt',ch,k);
+
+    ch = mirpeaks(ch,'Total',1);
+    k = mirpeaks(k,'Total',1);
+    %h = mirpeaks(h);
+    e = mirpeaks(e,'Total',1);
+    d = mirpeaks(d,'Total',1);
+    mirexport('NoFrameButPeaks.txt',ch,k,e,d);
+    clear ch k e d
+    
+    ac = mirautocor('Folder','Frame',.5,.2);
+    s = mirspectrum('Folder','Frame',.5,.2);
+    sf = mirflux(s);
+    ms = mirspectrum(s,'Mel');
+    m = mirmfcc(ms);
+    ch = mirchromagram(s);
+    k = mirkeystrength(ch);
+    %h = mirhisto(k);
+    e = mirenvelope('Folder','Frame',.5,.2);
+    d = mirenvelope(e,'Diff');
+    mirexport('FrameNoPeaks.txt',ms,m,ch,k);
+    
+    ac = mirpeaks(ac,'Total',1,'NoBegin');
+    s = mirpeaks(s,'Total',1);
+    sf = mirpeaks(sf,'Total',1);
+    ms = mirpeaks(ms,'Total',1);
+    m = mirpeaks(m,'Total',1,'Interpol',0);
+    ch = mirpeaks(ch,'Total',1);
+    k = mirpeaks(k,'Total',1);
+    %h = mirpeaks(h)
+    e = mirpeaks(e,'Total',1);
+    d = mirpeaks(d,'Total',1);
+    mirexport('FrameAndPeaks.txt',ac,s,sf,ms,m,ch,k,e,d);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo6curves.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+function demo6curves(file)
+% Example of use of curve analysis tools, such as moment estimations.
+
+if nargin == 0
+    file = 'trumpet';
+end
+
+s = mirspectrum(file)
+mircentroid(s)
+mirspread(s)
+mirskewness(s)
+mirkurtosis(s)
+mirflatness(s)
+mirregularity(s)
+mirentropy(s)
+clear s
+
+e = mirenvelope(file)
+mircentroid(e)
+mirspread(e)
+mirskewness(e)
+mirkurtosis(e)
+mirflatness(e)
+mirentropy(e)
+
+display('Strike any key to continue...');
+pause
+close all
+
+s = mirspectrum(file,'Frame',.1,1)
+mircentroid(s)
+mirspread(s)
+mirskewness(s)
+mirkurtosis(s)
+mirflatness(s)
+mirregularity(s)
+mirentropy(s)
+clear s
+
+display('Strike any key to continue...');
+pause
+close all
+
+fe = mirframe(e,.1,1)
+clear e
+mircentroid(fe)
+mirspread(fe)
+mirskewness(fe)
+mirkurtosis(fe)
+mirflatness(fe)
+mirentropy(fe)
+clear fe
+
+display('Strike any key to continue...');
+pause
+close all
+
+if nargin == 0
+    file = 'czardas';
+end
+t = mirtempo(file,'Periodicity','Frame')
+h = mirhisto(t)
+clear t
+mircentroid(h)
+mirspread(h)
+mirskewness(h)
+mirkurtosis(h)
+mirflatness(h)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo7tonality.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,100 @@
+function demo7tonality
+%To get familiar with some approaches of tonal analysis using MIRtoolbox, 
+% and to assess their performances.  
+
+% Part 1. We will first investigate the performance of the chromagram
+% analysis, using very simple musical samples. 
+
+% 1.3. In the audio file ÔtrumpetÕ, the same pitch is played by a trumpet.
+% Compute its chromagram. What are the chromas detected by the function? 
+% Can you explain the result?
+mirchromagram('trumpet')
+
+% 1.4. A more detailed representation of the chromagram can be obtained by 
+% decomposing each pitch class into its different possible absolute values. 
+% For that purpose, just add the parameter: 
+c = mirchromagram('trumpet','Wrap',0) 
+
+% 1.5. Compute also the key strength related to the chromagram. 
+mirkeystrength(c) 
+
+pause, close all
+
+% 1.6. In the audio file ÔpianoF4Õ, the same pitch is  played by a piano.
+[ks c] = mirkeystrength('pianoF4') 
+
+a = miraudio('pianoF4','excerpt',.7,2);
+[ks c] = mirkeystrength(a)
+
+pause, close all
+
+% 1.7. Investigate the chromagram analysis of triad chords
+[ks c] = mirkeystrength('Amin3')
+p = mirpeaks(ks)
+mirkey(p)
+
+pause, close all
+
+[k kc ks] = mirkey('Amaj3')
+[k kc ks] = mirkey('Amin4')
+[k kc ks] = mirkey('Amaj4')
+
+pause, close all
+
+[k kc ks] = mirkey('Amin5')
+[k kc ks] = mirkey('Amaj5')
+[k kc ks] = mirkey('Cmaj')
+
+pause, close all
+
+[k kc ks] = mirkey(miraudio('Amin3','Excerpt',.2,1))
+[k kc ks] = mirkey(miraudio('Amin4','Excerpt',.2,1))
+[k kc ks] = mirkey(miraudio('Amaj3','Excerpt',.2,1))
+[k kc ks] = mirkey(miraudio('Amaj4','Excerpt',.2,1))
+
+pause, close all
+
+[k kc ks] = mirkey(miraudio('Amin5','Excerpt',.2,1))
+[k kc ks] = mirkey(miraudio('Amaj5','Excerpt',.2,1))
+[k kc ks] = mirkey(miraudio('Cmaj','Excerpt',.2,1))
+
+pause, close all
+ 
+%Part 2. Let's analyze several extracts from 
+%real music. For each extract, try the 
+%following: 
+
+%2.1. Listen to the piece: 
+mirplay('vivaldi') 
+soundsc(sin(2*pi*440*(0:1/8192:1)))
+
+%2.2. Compute the chromagram of the 
+%whole extract. What tonal center could be 
+%inferred from the curve? Does it 
+%correspond to your expectation? 
+c = mirchromagram('vivaldi')
+
+%2.3. Compute the key strength related to 
+%the chromagram. Is the result congruent 
+%with the tonality inferred in 2.1. and 2.2.? 
+ks = mirkeystrength(c)
+[k kc ks] = mirkey(ks)
+
+%2.4. A more detailed representation of the 
+%key strengths can be obtained by 
+%computing the self-organizing map: 
+som = mirkeysom(c)
+
+pause, close all
+
+%2.5. Analyse in the same way other audio files
+[k kc ks] = mirkey('czardas')
+mirkeysom('czardas')
+
+pause, close all
+
+%Part 3. The temporal evolution of the 
+%tonal dimension can be assessed by 
+%decomposing first the audio into frames
+[k kc ks] = mirkey('czardas','frame')
+mirkeysom('czardas','frame')
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo8classification.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,162 @@
+function demo8classification
+% To get familiar with different approaches of classification using 
+% MIRtoolbox, and to assess their performances. 
+
+% Part 1. The aim of this experiment is to categorize a set of very short 
+% musical excerpts according to their genres, through a supervised learning.
+
+% 1.3. Select the training set for current directory.
+try
+    cd train_set
+catch
+    error('Please change current directory to ''MIRtoolboxDemos'' directory')
+end
+
+% Load all the files of the folder into one audio structure (called for 
+% instance training), and associate for each folder a label defined by the
+% first two letters of the respective file name.
+train = miraudio('Folder','Label',1:2);
+cd ..
+
+% In the same way, select the testing set for current directory, and load
+% all the files including their labels:
+cd test_set
+test = miraudio('Folder','Label',1:2);
+cd ..
+
+% 1.4. Compute the mel-frequency cepstrum coefficient for each different 
+% audio file of both sets:
+mfcc_train = mirmfcc(train);
+mfcc_test = mirmfcc(test);
+
+% 1.5.  Estimate the label (i.e., genre) of each file from the testing set,
+% based on a prior learning using the training set. Use for this purpose
+% the classify function.
+help mirclassify
+
+% Let's first try a classification based of mfcc, for instance, using the
+% minimum distance strategy:
+mirclassify(test,mfcc_test,train,mfcc_train)
+
+% The results indicates the outcomes and the total correct classification
+% rate (CCR).
+
+% 1.6. Let's try a k-nearest-neighbour strategy. For instance, for k = 5:
+mirclassify(test,mfcc_test,train,mfcc_train,5)
+
+% 1.7. Use a Gaussian mixture modelling with one gaussian per class:
+mirclassify(test,mfcc_test,train,mfcc_train,'GMM',1)
+
+% try also with three Gaussians per class.
+mirclassify(test,mfcc_test,train,mfcc_train,'GMM',3)
+
+% As this strategy is stochastic, the results vary for every trial.
+mirclassify(test,mfcc_test,train,mfcc_train,'GMM',1)
+mirclassify(test,mfcc_test,train,mfcc_train,'GMM',1)
+mirclassify(test,mfcc_test,train,mfcc_train,'GMM',3)
+mirclassify(test,mfcc_test,train,mfcc_train,'GMM',3)
+
+% 1.8. Carry out the classification using other features such as spectral
+% centroid:
+spectrum_train = mirspectrum(train);
+spectrum_test = mirspectrum(test);
+centroid_train = mircentroid(spectrum_train);
+centroid_test = mircentroid(spectrum_test);
+mirclassify(test,centroid_test,train,centroid_train,'GMM',1)
+mirclassify(test,centroid_test,train,centroid_train,'GMM',1)
+mirclassify(test,centroid_test,train,centroid_train,'GMM',3)
+mirclassify(test,centroid_test,train,centroid_train,'GMM',3)
+
+% try also spectral entropy and spectral irregularity. 
+entropy_train = mirentropy(spectrum_train);
+entropy_test = mirentropy(spectrum_test);
+mirclassify(test,entropy_test,train,entropy_train,'GMM',1)
+mirclassify(test,entropy_test,train,entropy_train,'GMM',1)
+mirclassify(test,entropy_test,train,entropy_train,'GMM',3)
+mirclassify(test,entropy_test,train,entropy_train,'GMM',3)
+
+irregularity_train = mirregularity(spectrum_train,'Contrast',.1);
+irregularity_test = mirregularity(spectrum_test,'Contrast',.1);
+mirclassify(test,irregularity_test,train,irregularity_train,'GMM',1)
+mirclassify(test,irregularity_test,train,irregularity_train,'GMM',1)
+mirclassify(test,irregularity_test,train,irregularity_train,'GMM',3)
+mirclassify(test,irregularity_test,train,irregularity_train,'GMM',3)
+
+% Try classification based on a set of features such as:
+mirclassify(test,{entropy_test,centroid_test},...
+         train,{entropy_train,centroid_train},'GMM',1)
+mirclassify(test,{entropy_test,centroid_test},...
+         train,{entropy_train,centroid_train},'GMM',1)
+mirclassify(test,{entropy_test,centroid_test},...
+         train,{entropy_train,centroid_train},'GMM',3)
+mirclassify(test,{entropy_test,centroid_test},...
+         train,{entropy_train,centroid_train},'GMM',3)
+
+% 1.9. By varying the features used for classification, the strategies and
+% their parameters, try to find an optimal strategy that give best correct
+% classification rate.
+bright_train = mirbrightness(spectrum_train);
+bright_test = mirbrightness(spectrum_test);
+rolloff_train = mirbrightness(spectrum_train);
+rolloff_test = mirbrightness(spectrum_test);
+spread_train = mirspread(spectrum_train);
+spread_test = mirspread(spectrum_test);
+mirclassify(test,{bright_test,rolloff_test,spread_test},...
+         train,{bright_train,rolloff_train,spread_train},'GMM',3)
+skew_train = mirskewness(spectrum_train);
+skew_test = mirskewness(spectrum_test);
+kurtosis_train = mirkurtosis(spectrum_train);
+kurtosis_test = mirkurtosis(spectrum_test);
+flat_train = mirflatness(spectrum_train);
+flat_test = mirflatness(spectrum_test);
+mirclassify(test,{skew_test,kurtosis_test,flat_test},...
+         train,{skew_train,kurtosis_train,flat_train},'GMM',3)
+for i = 1:3
+     mirclassify(test,{mfcc_test,centroid_test,skew_test,kurtosis_test,...
+               flat_test,entropy_test,irregularity_test,...
+               bright_test,rolloff_test,spread_test},...
+              train,{mfcc_train,centroid_train,skew_train,kurtosis_train,...
+                    flat_train,entropy_train,irregularity_train,...
+                    bright_train,rolloff_train,spread_train},'GMM',3)
+end
+
+% You can also try to change the size of the training and testing sets (by
+% simply interverting them for instance). 
+for i = 1:3
+    mirclassify(train,{mfcc_train,centroid_train,skew_train,kurtosis_train,...
+                flat_train,entropy_train,irregularity_train,...
+                bright_train,rolloff_train,spread_train},...
+             test,{mfcc_test,centroid_test,skew_test,kurtosis_test,...
+                   flat_test,entropy_test,irregularity_test,...
+                   bright_test,rolloff_test,spread_test},'GMM',3)
+end
+
+%%
+% Part 2. In this second experiment, we will try to cluster the segments of
+% an audio file according to their mutual similarity.
+
+% 2.1.  To simplify the computation, downsample
+% the audio file to 11025 Hz.
+a = miraudio('czardas','Sampling',11025);
+
+% 2.2. Decompose the file into successive frames of 2 seconds with half-
+% overlapping.
+f = mirframe(a,2,.1);
+
+% 2.3. Segment the file based on the novelty of the key strengths.
+n = mirnovelty(mirkeystrength(f),'KernelSize',5)
+p = mirpeaks(n)
+s = mirsegment(a,p)
+
+% 2.4. Compute the key strengths of each segment.
+ks = mirkeystrength(s)
+
+% 2.5. Cluster the segments according to their key strengths.
+help mircluster
+mircluster(s,ks)
+
+% The k means algorithm used in the clustering is stochastic, and its
+% results may vary at each run. By default, the algorithm is run 5 times 
+% and the best result is selected. Try the analysis with a higher number of
+% runs:
+mircluster(s,ks,'Runs',10)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/demo9retrieval.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function demo9retrieval(query)
+
+if nargin<1
+    query = 'vivaldi';
+end
+
+%%
+% 1. Timbre
+
+cc0 = mirmfcc(query,'frame',.025,'s',.01,'s','Rank',8:30)
+cl0 = mircluster(cc0,16)
+
+cc = mirmfcc('Folder','frame',.025,'s',.01,'s','Rank',8:30);
+cl = mircluster(cc,16);
+
+d1 = mirdist(cl0,cl)
+mirquery(cl0,cl)
+mirplay(ans,'Sequence',1:6)
+
+pause
+
+%%
+% 2. Rhythm
+
+[bs0 sm0] = mirbeatspectrum(query)
+bs = mirbeatspectrum('Folder');
+
+d2 = mirdist(bs0,bs)
+mirquery(bs0,bs)
+mirplay(ans,'Sequence',1:6)
+
+    % Variant
+    
+    [tp0,ac0] = mirtempo(query) 
+    [tp,ac] = mirtempo('Folder');
+    ac0 = purgedata(ac0);
+    ac = purgedata(ac);
+    d2bis = mirdist(ac0,ac)
+    mirquery(ac0,ac)
+    mirplay(ans,'Sequence',1:6)
+
+pause
+    
+%%
+% 3. Structure
+
+pk0 = mirpeaks(mirnovelty(query))
+pk = mirpeaks(mirnovelty('Folder'));
+
+d3 = mirdist(pk0,pk)
+mirquery(pk0,pk)
+mirplay(ans,'Sequence',1:6)
+
+pause
+
+%%
+% 4. Combination
+
+d = d1*.6 + d2*.3 + d3*.1
+mirquery(d)
+mirplay(ans,'Sequence',1:6)
+
+dbis = d1*.6 + d2bis*.3+ d3*.1
+mirquery(dbis)
+mirplay(ans,'Sequence',1:6)
\ No newline at end of file
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/guitar.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/laksin.wav has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/mirdemo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+%%%% SEGMENTATION
+
+m = mirmfcc('valse_triste_happy','Rank',2:10,'Frame',0.05,1)
+sim = mirsimatrix(m)
+n = mirnovelty(sim,'KernelSize',150)
+p = mirpeaks(n,'Contrast',.1,'Total',Inf,'NoBegin','NoEnd')
+seg = mirsegment('valse_triste_happy',p)
+mirplay(seg)
+
+display('Strike any key to continue...');
+pause
+close all
+
+[seg p m a] = mirsegment('valse_triste_happy','MFCC',2:10,...
+                                'KernelSize',150,'Contrast',.1)
+       
+display('Strike any key to continue...');
+pause
+close all
+                                
+%%%% TEMPO
+                                
+fb = mirfilterbank('czardas')
+%mirplay(fb)
+e = mirenvelope(fb) 
+de = mirenvelope(e,'Diff','Halfwave')
+s = mirsum(de,'Centered') 
+f = mirframe(s,3,.2);
+ac = mirautocor(s,'Resonance','Enhanced') 
+p = mirpeaks(ac,'Total',1) 
+t = mirtempo(p)
+
+display('Strike any key to continue...');
+pause
+close all
+
+[t,p] = mirtempo('czardas','Periodicity','Frame')
+h = mirhisto(t)
+
+display('Strike any key to continue...');
+pause
+close all
+
+%%%% TONALITY
+
+c = mirchromagram('vivaldi','Frame',2) 
+k = mirkeystrength(c) 
+p = mirpeaks(k,'Total',1) 
+
+[k,p] = mirkey('vivaldi','Frame',1)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/mirtest.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,173 @@
+function mirtest(audio)
+
+if not(nargin)
+    audio = 'ragtime';
+end
+
+%% Version 1.0
+
+mirpeaks(mirspectrum(audio,'Mel'))
+f = mirframe(audio,.5,.5)
+mirpeaks(mirspectrum(f,'Mel'),'Total',1)
+mirpeaks(mirautocor(f),'Total',1,'NoBegin')
+mirpeaks(mirspectrum(f),'Total',1,'NoBegin')
+mirpeaks(mirchromagram(f),'Total',1)
+mirpeaks(mirkeystrength(f),'Total',1)
+%mirpeaks(mirfluctuation(f),'Total',1,'NoBegin') %Not implemented yet..
+[a,b,c] = mirkey(audio)
+
+%%
+%pause
+clear a b c f
+close all
+
+f = mirfeatures(audio);
+sf = mirstat(f);
+
+f.dynamics.rms{1}
+f.fluctuation.peak{1}
+f.fluctuation.centroid{1}
+f.rhythm.tempo{:}
+f.rhythm.attack.time{:}
+f.rhythm.attack.slope{1}
+sf.dynamics.rms
+sf.fluctuation.peak
+sf.fluctuation.centroid
+sf.rhythm.tempo
+sf.rhythm.attack.time
+sf.rhythm.attack.slope
+
+%pause
+close all
+
+f.timbre.zerocross{:}
+f.spectral.centroid{:}
+f.spectral.brightness{:}
+f.spectral.spread{:}
+f.spectral.skewness{:}
+f.spectral.kurtosis{:}
+f.spectral.rolloff95{:}
+f.spectral.rolloff85{:}
+f.spectral.spectentropy{:}
+f.spectral.flatness{:}
+sf.timbre.zerocross
+sf.spectral.centroid
+sf.spectral.brightness
+sf.spectral.spread
+sf.spectral.skewness
+sf.spectral.kurtosis
+sf.spectral.rolloff95
+sf.spectral.rolloff85
+sf.spectral.spectentropy
+sf.spectral.flatness
+
+%pause
+close all
+
+f.spectral.roughness{:}
+f.spectral.irregularity{:}
+%f.timbre.inharmonicity{:}
+f.spectral.mfcc{:}
+f.spectral.dmfcc{:}
+f.spectral.ddmfcc{:}
+f.timbre.lowenergy{:}
+sf.spectral.roughness
+sf.spectral.irregularity
+%sf.timbre.inharmonicity
+sf.spectral.mfcc
+sf.spectral.dmfcc
+sf.spectral.ddmfcc
+sf.timbre.lowenergy
+
+%pause
+close all
+
+f.timbre.spectralflux{:}
+%f.pitch.salient{:}
+f.tonal.chromagram.peak{:}
+f.tonal.chromagram.centroid{:}
+f.tonal.keyclarity{:}
+f.tonal.mode{:}
+f.tonal.hcdf{:}
+sf.timbre.spectralflux
+%sf.pitch.salient
+sf.tonal.chromagram.peak
+sf.tonal.chromagram.centroid
+sf.tonal.keyclarity
+sf.tonal.mode
+sf.tonal.hcdf
+
+mirexport('resultdemo.txt',sf)
+mirexport('resultdemo.arff',f)
+
+%% Version 1.1
+
+%pause
+clear f
+close all
+
+mirlength(audio)
+s = mirspectrum(audio,'cents','Min',50)
+s = mirspectrum(s,'Collapsed')
+mirspectrum(s,'Gauss')
+ss = mirspectrum(s,'Smooth')
+p = mirpeaks(ss,'Extract')
+mirkurtosis(p)
+[le,f] = mirlowenergy(audio,'ASR')
+p = mirpitch(audio,'frame')
+mirpitch(p,'median')
+mirauditory(audio)
+mirroughness('ragtime')
+
+%%
+%pause
+clear s ss p le f
+close all
+
+fb = mirfilterbank('Design','NbChannels',5)
+f = mirfeatures(fb);
+%sf = mirstat(f);
+f = mireval(f,audio)
+
+f.dynamics.rms{1}
+f.fluctuation.peak{1}
+f.fluctuation.centroid{1}
+f.rhythm.tempo{:}
+f.rhythm.attack.time{:}
+f.rhythm.attack.slope{1}
+
+%pause
+close all
+
+f.timbre.zerocross{:}
+f.spectral.centroid{:}
+f.spectral.brightness{:}
+f.spectral.spread{:}
+f.spectral.skewness{:}
+f.spectral.kurtosis{:}
+f.spectral.rolloff95{:}
+f.spectral.rolloff85{:}
+f.spectral.spectentropy{:}
+f.spectral.flatness{:}
+
+%pause
+close all
+
+f.spectral.roughness{:}
+f.spectral.irregularity{:}
+%f.timbre.inharmonicity{:}
+f.spectral.mfcc{:}
+f.spectral.dmfcc{:}
+f.spectral.ddmfcc{:}
+f.timbre.lowenergy{:}
+
+%pause
+close all
+
+f.timbre.spectralflux{:}
+%f.pitch.salient{:}
+f.tonal.chromagram.peak{:}
+f.tonal.chromagram.centroid{:}
+f.tonal.keyclarity{:}
+f.tonal.mode{:}
+f.tonal.hcdf{:}
\ No newline at end of file
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/movie1.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/movie2.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/pianoA4.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/pianoF4.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/ragtime.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq011.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq012.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq013.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq014.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq015.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq016.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq017.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/bq018.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl011.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl012.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl013.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl014.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl015.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl016.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl017.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/cl018.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md011.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md012.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md013.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md014.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md015.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md016.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md017.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/md018.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm011.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm012.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm013.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm014.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm015.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm016.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm017.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/test_set/rm018.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/bq001.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/bq002.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/bq003.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/bq004.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/bq005.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/cl001.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/cl002.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/cl003.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/cl004.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/cl005.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/md001.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/md002.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/md003.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/md004.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/md005.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/rm001.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/rm002.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/rm003.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/rm004.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/train_set/rm005.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/trumpet.wav has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/tutorial.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,93 @@
+help mirtoolbox
+help miraudio
+
+
+a = miraudio('ragtime','Center','Sampling',11025,'Normal')
+mirplay(a)
+a = miraudio('ragtime','Extract',0,1)
+mirplay(a)
+miraudio('ragtime','Trim')
+a1 = miraudio('pianoA4');
+a2 = miraudio('pianoF4');
+a3 = a1+a2;
+mirplay(a3)
+mirsave(a3)
+
+f = mirframe('ragtime',1,.5)
+mirplay(f)
+
+mirenvelope('ragtime')
+mirenvelope('ragtime','Tau',.05)
+mirenvelope('ragtime','Diff')
+mirenvelope('ragtime','HalfwaveDiff')
+
+s = mirspectrum('pianoF4')
+mirspectrum(s,'Max',3000)
+mirspectrum('pianoF4','dB')
+mirspectrum('pianoF4','Mel')
+mirspectrum('trumpet')
+mirspectrum('trumpet','Prod',2:6)
+
+c = mircepstrum('pianoA4')
+mircepstrum(c,'Freq')
+
+mirautocor('trumpet')
+ac = mirautocor('Amin3','Freq')
+mirautocor(ac,'Halfwave')
+mirautocor(ac,'Enhanced')
+mirautocor(ac,'Enhanced',2:10)
+
+as = mirautocor(mirspectrum('Amin3'))
+ac = mirautocor('Amin3','Freq')
+cp = mircepstrum('Amin3','Freq')
+ac*as
+ac*cp
+as*cp
+
+mirspectrum('ragtime','frame')
+mirflux(ans)
+mircepstrum('ragtime','frame')
+mirflux(ans)
+
+fb = mirfilterbank('ragtime','Gammatone')
+mirsum(fb)
+s = mirspectrum(fb)
+mirsummary(s)
+mirauditory('ragtime')
+mirauditory('ragtime','Filterbank',20)
+
+mirpeaks(mirspectrum('ragtime','mel'))
+mirpeaks(mirspectrum('ragtime','mel','frame'),'total',1)
+
+
+r1 = mirrms('movie1','Frame')
+r2 = mirrms('movie2','Frame')
+mirlowenergy(r1)
+mirlowenergy(r2)
+
+s = mirspectrum('ragtime','Frame',.023,.5,'Mel', 'dB')
+s2 = mirspectrum(s,'AlongBands','Max',10,'Window', 0,'Resonance', 'Fluctuation')
+mirsum(s2)
+
+mironsets('ragtime')
+mironsets('ragtime','Detect',0)
+mironsets('ragtime','Diffenvelope')
+mironsets('ragtime','diffenvelope','Contrast',.1)
+mironsets('ragtime','SpectralFlux')
+mironsets('ragtime','SpectralFlux','Inc','off')
+mironsets('ragtime','SpectralFlux','Complex')
+
+[t,a] = mirtempo('ragtime')
+[t,a] = mirtempo('ragtime','spectrum')
+[t,a] = mirtempo('ragtime','frame')
+
+%[p s] = mirpulseclarity('ragtime')
+
+mirattacks('ragtime')
+mirattacktime('ragtime')
+mirattackslope('ragtime')
+
+t = mirtempo('czardas','frame')
+st = mirstat(t)
+h = mirhisto(t)
+mirexport('result.txt',t)
\ No newline at end of file
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/valse_triste_happy.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/MIRToolboxDemos/vivaldi.wav has changed
Binary file toolboxes/MIRtoolbox1.3.2/ReleaseHistory.pdf has changed
Binary file toolboxes/MIRtoolbox1.3.2/manual1.3.2.pdf has changed
Binary file toolboxes/MIRtoolbox1.3.2/overview.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/readme.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,96 @@
+Congratulations! You have downloaded MIRtoolbox 1.3.2
+-----------------------------------------------------
+
+The list of new features and bug fixes offered by this new version is shown in the ReleaseNotes text file located in the toolbox folder, and also available from our website. New versions of the toolbox will also be released at the same address:
+http://www.jyu.fi/hum/laitokset/musiikki/en/research/coe/materials/mirtoolbox
+
+Please inform me if you find any bug when using the toolbox.
+
+**
+
+Conditions of Use
+-----------------
The Toolbox is free software; you can redistribute it and/or modify it under the terms of version 2 of GNU General Public License as published by the Free Software Foundation. 
+
When MIRtoolbox is used for academic research, we would highly appreciate if scientific publications of works partly based on MIRtoolbox cite one of the following publications:
+
Olivier Lartillot, Petri Toiviainen, ÒA Matlab Toolbox for Musical Feature Extraction From AudioÓ, International Conference on Digital Audio Effects, Bordeaux, 2007.
+
Olivier Lartillot, Petri Toiviainen, Tuomas Eerola, ÒA Matlab Toolbox for Music Information RetrievalÓ, in C. Preisach, H. Burkhardt, L. Schmidt-Thieme, R. Decker (Eds.), Data Analysis, Machine Learning and Applications, Studies in Classification, Data Analysis, and Knowledge Organization, Springer-Verlag, 2008.
+
For commercial use of MIRtoolbox, please contact the authors.
+
+**
+
+Please register to the MIRtoolbox announcement list.Ê
+--------------------------------------------
+http://www.freelists.org/list/mirtoolboxnews
+--------------------------------------------
+This will allow us to estimate the number of users, and this will allow you in return to get informed on the new major releases (including critical bug fixes).
+
+**
+
+MIRtoolbox requires Matlab version 7 and Mathworks' Signal Processing toolbox.
+
+**
+
+This distribution actually includes four different toolboxes:
+
+- the MIRtoolbox itself, version 1.3.2,
+
+- the Auditory toolbox, version 2, by Malcolm Slaney
+(also available directly at http://cobweb.ecn.purdue.edu/~malcolm/interval/1998-010/),
+
+- the Netlab toolbox, version 3.3, by Ian Nabney
+(also available directly at http://www.ncrg.aston.ac.uk/netlab/)
+
+- the SOM toolbox, version 2.0, by Esa Alhoniemi, Johan Himberg, Jukka Parviainen and Juha Vesanto
+(also available directly at http://www.cis.hut.fi/projects/somtoolbox/)
+
+**
+
+MIRtoolbox license is based on GPL 2.0. As such, it can integrate codes from other GPL 2.0 projects, as long as their origins are explicitly stated.
+
- codes from the Music Analysis Toolbox by Elias Pampalk (2004), related to the computation of Terhardt outer ear modeling, Bark band decomposition and masking effects.
+
+- openbdf and readbdf script by T.S. Lorig to read BDF files, based on openedf and readedf by Alois Schloegl,
+
+- implementation of Earth Mover Distance written by Yossi Rubner and wrapped for Matlab by Elias Pampalk.
+
+Code integrated with BSD license:
+
- mp3read for Matlab by Dan Ellis, which calls the mpg123 decoder and the mp3info scanner,
+
- aiffread for Matlab by Kenneth Eaton.
+
+**
+
+To install MIRtoolbox in your Matlab environment, copy all the toolboxes folders (or only those that are not installed yet in your computer) into your Matlab "toolbox" folder. Then add each folder in your Matlab path.
+
+**
+
+NOTICE: If you replace an older version of MIRtoolbox with a new one, please update your Matlab path using the following command:
+rehash toolboxcache
+Update also the class structure of the toolbox, either by restarting Matlab, or by typing the following command:
+clear classes
+
+**
+
+To get an overview of the functions available in the toolbox, type:
+help mirtoolbox
+
+A complete documentation in PDF is provided in the main toolbox folder.
+
+A short documentation for each function is available directly in Matlab using the help command. For instance: help miraudio
+
+Examples of use of the toolbox are shown in the MIRToolboxDemos folder:
+mirdemo
+demo1basics
+demo2timbre
+demo3segmentation
+demo4tempo
+demo5export
+demo6curves
+demo7tonality
+demo8classification
+demo9retrieval
+
+**
+
+If you have any problem or request, please contact us.
+
+Olivier Lartillot, Petri Toiviainen and Tuomas Eerola
+
+Olivier.Lartillot@campus.jyu.fi
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/Contents.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,196 @@
+% SOM Toolbox
+% Version 2.0beta, May 30 2002
+% 
+% Copyright 1997-2000 by
+% Esa Alhoniemi, Johan Himberg, Juha Parhankangas and Juha Vesanto
+% Contributed files may contain copyrights of their own.
+% 
+% SOM Toolbox comes with ABSOLUTELY NO WARRANTY; for details
+% see License.txt in the program package. This is free software,
+% and you are welcome to redistribute it under certain conditions;
+% see License.txt for details.
+% 
+% 
+% Demos
+% 
+%            som_demo1   SOM Toolbox demo 1: basic properties
+%            som_demo2   SOM Toolbox demo 2: basic usage
+%            som_demo3   SOM Toolbox demo 3: visualization
+%            som_demo4   SOM Toolbox demo 4: data analysis
+% 
+% Creation of structs
+% 
+%              som_set   create & set (& check) values to structs
+%             som_info   print out information on a given struct  
+%      som_data_struct   create & initialize a data struct 
+%       som_map_struct   create & initialize a map struct 
+%     som_topol_struct   create & initialize a topology struct 
+%     som_train_struct   create & initialize a train struct 
+%         som_clstruct   create a cluster struct
+%            som_clset   set properties in a cluster struct
+%            som_clget   get stuff from a cluster struct
+% 
+% Struct conversion and file I/O
+% 
+%           som_vs1to2   converts a version 1.0 struct to version 2.0 struct
+%           som_vs2to1   converts a version 2.0 struct to version 1.0 struct
+%        som_read_data   reads a (SOM_PAK format) ASCII data file
+%       som_write_data   writes a SOM_PAK format codebook file
+%        som_write_cod   writes a SOM_PAK format data file
+%         som_read_cod   reads a SOM_PAK format codebook file
+% 
+% Data preprocessing
+% 
+%        som_normalize   normalize data set
+%      som_denormalize   denormalize data set 
+%    som_norm_variable   (de)normalize one variable
+%           preprocess   preprocessing GUI
+% 
+% Initialization and training functions
+% 
+%             som_make   create, initialize and train a SOM
+%         som_randinit   random initialization algorithm
+%          som_lininit   linear initialization algorithm
+%         som_seqtrain   sequential training algorithm
+%       som_batchtrain   batch training algorithm
+%              som_gui   SOM initialization and training GUI
+%       som_prototrain   a simple version of sequential training: easy to modify
+% 
+% Clustering algorithms
+% 
+%           som_kmeans   k-means algorithm (was earlier kmeans)
+%      kmeans_clusters   try and evaluate several k-means clusterings
+%           neural_gas   neural gas vector quantization algorithm
+%          som_linkage   hierarchical clustering algorithms
+%        som_cllinkage   hierarchical clustering of SOM
+%       som_dmatminima   local minima from distance (or U-) matrix
+%     som_dmatclusters   distance (or U-) matrix based clustering
+%         som_clspread   spreads clusters to unassinged map units
+%           som_cldist   calculate distances between clusters
+%         som_gapindex   gap validity index of clustering
+%             db_index   Davies-Bouldin validity index of clustering  
+% 
+% Supervised/classification algorithms
+% 
+%       som_supervised   supervised SOM algorithm
+%                 lvq1   LVQ1 algorithm
+%                 lvq3   LVQ3 algorithm
+%                  knn   k-NN classification algorithm 
+%              knn_old   k-NN classification algorithm (old version)
+% 
+% SOM error measures
+% 
+%          som_quality   quantization and topographic error of SOM
+%       som_distortion   SOM distortion measure
+%      som_distortion3   elements of the SOM distortion measure
+% 
+% Auxiliary functions
+% 
+%             som_bmus   calculates BMUs for given data vectors
+%         som_eucdist2   pairwise squared euclidian distances between vectors
+%            som_mdist   calculates pairwise distances between vectors 
+%           som_divide   extract subsets of data based on map
+%            som_label   give labels to map units
+%        som_label2num   rcodes string data labels to interger class labels 
+%        som_autolabel   automatically labels the SOM based on given data
+%      som_unit_coords   calculates coordinates in output space for map units
+%       som_unit_dists   distances in output space between map units
+%      som_unit_neighs   units in 1-neighborhood for each map unit
+%     som_neighborhood   calculates neighborhood matrix for the given map
+%        som_neighbors   calculates different kinds of neighborhoods 
+%           som_neighf   calculates neighborhood function values
+%           som_select   GUI for manual selection of map units
+%     som_estimate_gmm   create Gaussian mixture model on top of SOM
+%  som_probability_gmm   evaluate Gaussian mixture model
+%          som_ind2sub   from linear index to subscript index 
+%          som_sub2ind   from subscript index to linear index
+%          som_ind2cod   from linear index to SOM_PAK linear index 
+%          som_cod2ind   from SOM_linear index to SOM_PAK linear index 
+%             nanstats   mean, std and median which ignore NaNs
+%   som_modify_dataset   add, remove, or extract samples and components
+%         som_fillnans   fill NaNs in a data set based on given SOM
+%            som_stats   statistics of a data set
+%           som_drmake   calculate descriptive rules for a cluster
+%           som_dreval   evaluate descriptive rules for a cluster
+%         som_drsignif   rule significance measures
+% 
+% Using SOM_PAK from Matlab
+% 
+%      som_sompaktrain   uses SOM_PAK to train a map
+%           sompak_gui   GUI for using SOM_PAK from Matlab
+%          sompak_init   call SOM_PAK's initialization programs from Matlab
+%      sompak_init_gui   GUI for using SOM_PAK's initialization from Matlab
+%    sompak_rb_control   an auxiliary function for sompak_*_gui functions.
+%        sompak_sammon   call SOM_PAK's Sammon program from Matlab
+%    sompak_sammon_gui   GUI for using SOM_PAK's Sammon program from Matlab
+%         sompak_train   call SOM_PAK's training program from Matlab
+%     sompak_train_gui   GUI for using SOM_PAK's training program from Matlab 
+% 
+% Visualization
+% 
+%             som_show   basic visualization
+%         som_show_add   add labels, hits and trajectories
+%       som_show_clear   remove extra markers
+%       som_recolorbar   refresh/reconfigure colorbars
+%         som_show_gui   GUI for using som_show and associated functions
+%             som_grid   visualization of SOM grid
+%           som_cplane   component planes and U-matrices
+%         som_barplane   bar chart visualization of map
+%         som_pieplane   pie chart visualization of map
+%        som_plotplane   plot chart visualization of map
+%       som_trajectory   launches a GUI for presenting comet-trajectories 
+%       som_dendrogram   visualization of clustering tree
+%       som_plotmatrix   pairwise scatter plots and histograms
+%    som_order_cplanes   order and visualize the component planes
+%           som_clplot   plots of clusters (based on cluster struct)
+% som_projections_plot   projections plots (see som_projections)
+%       som_stats_plot   plots of statistics (see som_stats)
+% 
+% Auxiliary functions for visualization
+% 
+%                 hits   calculates hits, or sum of values for each map unit
+%             som_hits   calculates the response of data on the map
+%             som_umat   calculates the U-matrix
+%                  cca   curvilinear component analysis projection algorithm
+%              pcaproj   principal component projection algorithm
+%               sammon   Sammon's mapping projection algorithm
+%       som_connection   connection matrix for map 
+%       som_vis_coords   map unit coordinates used in visualizations
+%        som_colorcode   create color coding for map/2D data
+%         som_bmucolor   colors of the BMUs from a given map color code
+%        som_normcolor   simulate indexed colormap
+%     som_clustercolor   color coding which depends on clustering structure
+%      som_kmeanscolor   color coding according to k-means clustering
+%     som_kmeanscolor2   a newer version of the som_kmeanscolor function
+%       som_fuzzycolor   a fuzzy color coding 
+%         som_coloring   a SOM-based color coding 
+%      som_projections   calculates a default set of projections
+% 
+% Report generation stuff
+% 
+%     som_table_struct   creates a table struct
+%     som_table_modify   modifies a table struct
+%      som_table_print   print a table in various formats
+%            rep_utils   various utilities for printing report elements
+%      som_stats_table   a table of data set statistics
+%     som_stats_report   report on data set statistics
+% 
+% Low level routines used by visualization functions
+% 
+%            vis_patch   defines hexagonal and rectangular patches
+%    vis_som_show_data   returns UserData and subplot handles stored by som_show.m
+%        vis_valuetype   used for type checks 
+%         vis_footnote   adds a movable text to the current figure 
+%          vis_trajgui   the actual GUI started by som_trajectory.m 
+% vis_PlaneAxisProperties   set axis properties in visualization functions
+% vis_footnoteButtonDownFcn   callback function for vis_footnote.m
+%     vis_planeGetArgs   converts topol struct to lattice, msize argument pair
+%    vis_show_gui_comp   internal function used by som_show_gui.m
+%    vis_show_gui_tool   internal function used by som_show_gui.m
+% 
+% Other
+% 
+%           somtoolbox   this file
+%            iris.data   IRIS data set (used in demos)
+%          License.txt   GNU General Public License 
+%        Copyright.txt   Copyright notice
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/Copyright.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+COPYRIGHT
+---------
+
+SOM Toolbox 2.0, a software library for Matlab 5 implementing the
+Self-Organizing Map algorithm is Copyright (C) 1999 by Esa Alhoniemi,
+Johan Himberg, Jukka Parviainen and Juha Vesanto.
+
+This package is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or any later version.
+
+Note: only part of the files distributed in the package belong to the
+SOM Toolbox. The package also contains contributed files, which may
+have their own copyright notices. If not, the GNU General Public
+License holds for them, too, but so that the author(s) of the file
+have the Copyright.
+
+This package is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this package (file License.txt); if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.
+
+
+LICENSING THE LIBRARY FOR PROPRIETARY PROGRAMS
+----------------------------------------------
+
+As stated in the GNU General Public License (see License.txt) it is
+not possible to include this software library in a commercial
+proprietary program without written permission from the owners of the
+copyright. If you wish to obtain such permission, you can reach us by
+paper mail:
+
+  SOM Toolbox team
+  Laboratory of Computer and Information Science
+  P.O.Box 5400
+  FIN-02015 HUT 
+  Finland
+  Europe 
+
+and by email:
+
+  somtlbx@mail.cis.hut.fi
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/License.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,386 @@
+GNU GENERAL PUBLIC LICENSE
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
+59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+------------------------------------------------------------------------
+
+Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+---------------------------------------------------------------------
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0.
+
+This License applies to any program or other work which contains a
+notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+1.
+
+You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously
+and appropriately publish on each copy an appropriate copyright notice
+and disclaimer of warranty; keep intact all the notices that refer to
+this License and to the absence of any warranty; and give any other
+recipients of the Program a copy of this License along with the
+Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+2.
+
+You may modify your copy or copies of the Program or any portion of
+it, thus forming a work based on the Program, and copy and distribute
+such modifications or work under the terms of Section 1 above,
+provided that you also meet all of these conditions:
+
+a) You must cause the modified files to carry prominent notices
+   stating that you changed the files and the date of any change.
+
+b) You must cause any work that you distribute or publish, that in
+   whole or in part contains or is derived from the Program or any part
+   thereof, to be licensed as a whole at no charge to all third parties
+   under the terms of this License.
+
+c) If the modified program normally reads commands interactively when
+   run, you must cause it, when started running for such interactive use
+   in the most ordinary way, to print or display an announcement
+   including an appropriate copyright notice and a notice that there is
+   no warranty (or else, saying that you provide a warranty) and that
+   users may redistribute the program under these conditions, and telling
+   the user how to view a copy of this License.  (Exception: if the
+   Program itself is interactive but does not normally print such an
+   announcement, your work based on the Program is not required to print
+   an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+3.
+
+You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable
+   source code, which must be distributed under the terms of Sections 1
+   and 2 above on a medium customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least three years,
+   to give any third party, for a charge no more than your cost of
+   physically performing source distribution, a complete machine-readable
+   copy of the corresponding source code, to be distributed under the
+   terms of Sections 1 and 2 above on a medium customarily used for
+   software interchange; or,
+
+c) Accompany it with the information you received as to the offer to
+   distribute corresponding source code.  (This alternative is allowed
+   only for noncommercial distribution and only if you received the
+   program in object code or executable form with such an offer, in
+   accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+4.
+
+You may not copy, modify, sublicense, or distribute the Program except
+as expressly provided under this License.  Any attempt otherwise to
+copy, modify, sublicense or distribute the Program is void, and will
+automatically terminate your rights under this License.  However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+5.
+
+You are not required to accept this License, since you have not signed
+it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+6.
+
+Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+7.
+
+If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+8.
+
+If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an
+explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+9.
+
+The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions
+will be similar in spirit to the present version, but may differ in
+detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Program does not specify a
+version number of this License, you may choose any version ever
+published by the Free Software Foundation.
+
+10.
+
+If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the
+author to ask for permission.  For software which is copyrighted by
+the Free Software Foundation, write to the Free Software Foundation;
+we sometimes make exceptions for this.  Our decision will be guided by
+the two goals of preserving the free status of all derivatives of our
+free software and of promoting the sharing and reuse of software
+generally.
+
+NO WARRANTY
+
+11.
+ 
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT
+WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
+PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
+DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
+(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
+INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
+THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
+OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+-----------------------------------------------------------------------
+
+How to Apply These Terms to Your New Programs 
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+one line to give the program's name and an idea of what it does.
+Copyright (C) 20<yy>  <name of author>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+USA. 
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 20<yy> <name of author> 
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show
+ w'.  This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.  
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the program,
+if necessary.  Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright
+ interest in the program `Gnomovision'
+ (which makes passes at compilers) written 
+ by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library,
+you may consider it more useful to permit linking proprietary
+applications with the library.  If this is what you want to do, use
+the GNU Library General Public License instead of this License.
+
+FSF & GNU inquiries & questions to gnu@prep.ai.mit.edu.
+
+Copyright notice above.
+Free Software Foundation, Inc.,
+59 Temple Place - Suite 330, Boston, MA  02111,  USA
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/cca.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,282 @@
+function [P] = cca(D, P, epochs, Mdist, alpha0, lambda0)
+
+%CCA Projects data vectors using Curvilinear Component Analysis.
+%
+% P = cca(D, P, epochs, [Dist], [alpha0], [lambda0])
+%
+%  P = cca(D,2,10);           % projects the given data to a plane
+%  P = cca(D,pcaproj(D,2),5); % same, but with PCA initialization
+%  P = cca(D, 2, 10, Dist);   % same, but the given distance matrix is used
+%  
+%  Input and output arguments ([]'s are optional):
+%   D          (matrix) the data matrix, size dlen x dim
+%              (struct) data or map struct            
+%   P          (scalar) output dimension
+%              (matrix) size dlen x odim, the initial projection
+%   epochs     (scalar) training length
+%   [Dist]     (matrix) pairwise distance matrix, size dlen x dlen.
+%                       If the distances in the input space should
+%                       be calculated otherwise than as euclidian
+%                       distances, the distance from each vector
+%                       to each other vector can be given here,
+%                       size dlen x dlen. For example PDIST
+%                       function can be used to calculate the
+%                       distances: Dist = squareform(pdist(D,'mahal'));
+%   [alpha0]   (scalar) initial step size, 0.5 by default
+%   [lambda0]  (scalar) initial radius of influence, 3*max(std(D)) by default
+%  
+%   P          (matrix) size dlen x odim, the projections
+%
+% Unknown values (NaN's) in the data: projections of vectors with
+% unknown components tend to drift towards the center of the
+% projection distribution. Projections of totally unknown vectors are
+% set to unknown (NaN).
+%
+% See also SAMMON, PCAPROJ. 
+
+% Reference: Demartines, P., Herault, J., "Curvilinear Component
+%   Analysis: a Self-Organizing Neural Network for Nonlinear
+%   Mapping of Data Sets", IEEE Transactions on Neural Networks, 
+%   vol 8, no 1, 1997, pp. 148-154.
+
+% Contributed to SOM Toolbox 2.0, February 2nd, 2000 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% juuso 171297 040100
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check arguments 
+
+error(nargchk(3, 6, nargin)); % check the number of input arguments
+
+% input data
+if isstruct(D), 
+  if strcmp(D.type,'som_map'), D = D.codebook; else D = D.data; end
+end
+[noc dim] = size(D);
+noc_x_1  = ones(noc, 1); % used frequently
+me = zeros(1,dim); st = zeros(1,dim);
+for i=1:dim,
+  me(i) = mean(D(find(isfinite(D(:,i))),i));
+  st(i) = std(D(find(isfinite(D(:,i))),i));
+end
+
+% initial projection
+if prod(size(P))==1, 
+  P = (2*rand(noc,P)-1).*st(noc_x_1,1:P) + me(noc_x_1,1:P); 
+else
+  % replace unknown projections with known values
+  inds = find(isnan(P)); P(inds) = rand(size(inds));
+end
+[dummy odim] = size(P);
+odim_x_1  = ones(odim, 1); % this is used frequently
+
+% training length
+train_len = epochs*noc;
+
+% random sample order
+rand('state',sum(100*clock));
+sample_inds = ceil(noc*rand(train_len,1));
+
+% mutual distances
+if nargin<4 | isempty(Mdist) | all(isnan(Mdist(:))),
+  fprintf(2, 'computing mutual distances\r');
+  dim_x_1 = ones(dim,1);
+  for i = 1:noc,
+    x = D(i,:); 
+    Diff = D - x(noc_x_1,:);
+    N = isnan(Diff);
+    Diff(find(N)) = 0; 
+    Mdist(:,i) = sqrt((Diff.^2)*dim_x_1);
+    N = find(sum(N')==dim); %mutual distance unknown
+    if ~isempty(N), Mdist(N,i) = NaN; end
+  end
+else
+  % if the distance matrix is output from PDIST function
+  if size(Mdist,1)==1, Mdist = squareform(Mdist); end
+  if size(Mdist,1)~=noc, 
+    error('Mutual distance matrix size and data set size do not match'); 
+  end
+end
+
+% alpha and lambda
+if nargin<5 | isempty(alpha0) | isnan(alpha0), alpha0 = 0.5; end
+alpha = potency_curve(alpha0,alpha0/100,train_len);
+
+if nargin<6 | isempty(lambda0) | isnan(lambda0), lambda0 = max(st)*3; end
+lambda = potency_curve(lambda0,0.01,train_len);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Action
+
+k=0; fprintf(2, 'iterating: %d / %d epochs\r',k,epochs);
+
+for i=1:train_len, 
+  
+  ind = sample_inds(i);     % sample index
+  dx = Mdist(:,ind);        % mutual distances in input space
+  known = find(~isnan(dx)); % known distances
+
+  if ~isempty(known),
+    % sample vector's projection
+    y = P(ind,:);                 
+
+    % distances in output space
+    Dy = P(known,:) - y(noc_x_1(known),:); 
+    dy = sqrt((Dy.^2)*odim_x_1);           
+  
+    % relative effect
+    dy(find(dy==0)) = 1;        % to get rid of div-by-zero's
+    fy = exp(-dy/lambda(i)) .* (dx(known) ./ dy - 1);
+
+    % Note that the function F here is e^(-dy/lambda)) 
+    % instead of the bubble function 1(lambda-dy) used in the 
+    % paper.
+    
+    % Note that here a simplification has been made: the derivatives of the
+    % F function have been ignored in calculating the gradient of error
+    % function w.r.t. to changes in dy.
+    
+    % update
+    P(known,:) = P(known,:) + alpha(i)*fy(:,odim_x_1).*Dy;
+  end
+
+  % track
+  if rem(i,noc)==0, 
+    k=k+1; fprintf(2, 'iterating: %d / %d epochs\r',k,epochs);
+  end
+
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% clear up
+
+% calculate error
+error = cca_error(P,Mdist,lambda(train_len));
+fprintf(2,'%d iterations, error %f          \n', epochs, error);
+
+% set projections of totally unknown vectors as unknown
+unknown = find(sum(isnan(D)')==dim);
+P(unknown,:) = NaN;
+
+return;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% tips
+
+% to plot the results, use the code below
+
+%subplot(2,1,1), 
+%switch(odim), 
+%  case 1, plot(P(:,1),ones(dlen,1),'x')
+%  case 2, plot(P(:,1),P(:,2),'x'); 
+%  otherwise, plot3(P(:,1),P(:,2),P(:,3),'x'); rotate3d on
+%end
+%subplot(2,1,2), dydxplot(P,Mdist);
+
+% to a project a new point x in the input space to the output space
+% do the following:
+
+% Diff = D - x(noc_x_1,:); Diff(find(isnan(Diff))) = 0; 
+% dx = sqrt((Diff.^2)*dim_x_1);
+% p = project_point(P,x,dx); % this function can be found from below
+% tlen = size(p,1);
+% plot(P(:,1),P(:,2),'bx',p(tlen,1),p(tlen,2),'ro',p(:,1),p(:,2),'r-')
+
+% similar trick can be made to the other direction
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+function vals = potency_curve(v0,vn,l)
+
+  % curve that decreases from v0 to vn with a rate that is 
+  % somewhere between linear and 1/t
+  vals = v0 * (vn/v0).^([0:(l-1)]/(l-1));
+
+
+function error = cca_error(P,Mdist,lambda)
+
+  [noc odim] = size(P);
+  noc_x_1 = ones(noc,1);
+  odim_x_1 = ones(odim,1);
+
+  error = 0;
+  for i=1:noc,
+    known = find(~isnan(Mdist(:,i)));
+    if ~isempty(known),   
+      y = P(i,:);                 
+      Dy = P(known,:) - y(noc_x_1(known),:);
+      dy = sqrt((Dy.^2)*odim_x_1);
+      fy = exp(-dy/lambda);
+      error = error + sum(((Mdist(known,i) - dy).^2).*fy);
+    end
+  end
+  error = error/2;
+
+
+function [] = dydxplot(P,Mdist)
+
+  [noc odim] = size(P);
+  noc_x_1 = ones(noc,1);
+  odim_x_1 = ones(odim,1);
+  Pdist = zeros(noc,noc);
+    
+  for i=1:noc,
+    y = P(i,:);                 
+    Dy = P - y(noc_x_1,:);
+    Pdist(:,i) = sqrt((Dy.^2)*odim_x_1);
+  end
+
+  Pdist = tril(Pdist,-1); 
+  inds = find(Pdist > 0); 
+  n = length(inds);
+  plot(Pdist(inds),Mdist(inds),'.');
+  xlabel('dy'), ylabel('dx')
+
+
+function p = project_point(P,x,dx)
+
+  [noc odim] = size(P);
+  noc_x_1 = ones(noc,1);
+  odim_x_1 = ones(odim,1);
+
+  % initial projection
+  [dummy,i] = min(dx);
+  y = P(i,:)+rand(1,odim)*norm(P(i,:))/20;
+ 
+  % lambda 
+  lambda = norm(std(P));
+
+  % termination
+  eps = 1e-3; i_max = noc*10;
+  
+  i=1; p(i,:) = y; 
+  ready = 0;
+  while ~ready,
+
+    % mutual distances
+    Dy = P - y(noc_x_1,:);        % differences in output space
+    dy = sqrt((Dy.^2)*odim_x_1);  % distances in output space
+    f = exp(-dy/lambda);
+  
+    fprintf(2,'iteration %d, error %g \r',i,sum(((dx - dy).^2).*f));
+
+    % all the other vectors push the projected one
+    fy = f .* (dx ./ dy - 1) / sum(f);
+  
+    % update    
+    step = - sum(fy(:,odim_x_1).*Dy);
+    y = y + step;
+  
+    i=i+1;
+    p(i,:) = y;   
+    ready = (norm(step)/norm(y) < eps | i > i_max);
+
+  end
+  fprintf(2,'\n');
+     
+  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/db_index.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,83 @@
+function [t,r] = db_index(D, cl, C, p, q)
+ 
+% DB_INDEX Davies-Bouldin clustering evaluation index.
+%
+% [t,r] = db_index(D, cl, C, p, q)
+%
+%  Input and output arguments ([]'s are optional):  
+%    D     (matrix) data (n x dim)
+%          (struct) map or data struct
+%    cl    (vector) cluster numbers corresponding to data samples (n x 1)
+%    [C]   (matrix) prototype vectors (c x dim) (default = cluster means)
+%    [p]   (scalar) norm used in the computation (default == 2)
+%    [q]   (scalar) moment used to calculate cluster dispersions (default = 2)
+% 
+%    t     (scalar) Davies-Bouldin index for the clustering (=mean(r))
+%    r     (vector) maximum DB index for each cluster (size c x 1)    
+% 
+% See also  KMEANS, KMEANS_CLUSTERS, SOM_GAPINDEX.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+if isstruct(D), 
+    switch D.type,
+    case 'som_map', D = D.codebook; 
+    case 'som_data', D = D.data; 
+    end
+end
+
+% cluster centroids
+[l dim] = size(D);
+u = unique(cl); 
+c = length(u); 
+if nargin <3, 
+  C = zeros(c,dim); 
+  for i=1:c, 
+      me = nanstats(D(find(cl==u(i)),:));
+      C(i,:) = me';
+  end 
+end
+
+u2i = zeros(max(u),1); u2i(u) = 1:c; 
+D = som_fillnans(D,C,u2i(cl)); % replace NaN's with cluster centroid values
+
+if nargin <4, p = 2; end % euclidian distance between cluster centers
+if nargin <5, q = 2; end % dispersion = standard deviation
+ 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+% dispersion in each cluster 
+for i = 1:c
+  ind = find(cl==u(i)); % points in this cluster
+  l   = length(ind);
+  if l > 0
+    S(i) = (mean(sqrt(sum((D(ind,:) - ones(l,1) * C(i,:)).^2,2)).^q))^(1/q);
+  else
+    S(i) = NaN;
+  end
+end
+ 
+% distances between clusters
+%for i = 1:c
+%  for j = i+1:c
+%    M(i,j) = sum(abs(C(i,:) - C(j,:)).^p)^(1/p);
+%  end
+%end
+M = som_mdist(C,p); 
+
+% Davies-Bouldin index
+R = NaN * zeros(c);
+r = NaN * zeros(c,1);
+for i = 1:c
+  for j = i+1:c
+    R(i,j) = (S(i) + S(j))/M(i,j);
+  end
+  r(i) = max(R(i,:));
+end
+ 
+t = mean(r(isfinite(r)));
+ 
+return;                                                                                                     
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/hits.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+function [hits,ninvalid] = hits(bmus, mmax, values)
+
+%HITS Calculate number of occurances of each value.
+%
+% hits = hits(bmus,[mmax],[values])
+%
+%   h = hits(bmus);
+%   h = hits(bmus,length(sM.codebook)); 
+%
+%  Input and output arguments ([]'s are optional): 
+%   bmus     (vector) BMU indeces (or other similar) 
+%   [mmax]   (scalar) maximum index, default value max(bmus)
+%            (struct) map or topology struct from where the maximum
+%                     index is acquired
+%   [values] (vector) values associated with the data (default = 1)
+%
+%   hits     (vector) the number of occurances of each index
+%                     (or if values are given, their sum for each index)
+%   ninvalid (scalar) number of invalid indeces (NaN, Inf or 
+%                     <=0 or > mmax)
+%
+% See also SOM_HITS, SOM_BMUS.    
+
+% Copyright (c) 2002 by the SOM toolbox programming team.
+% Contributed to SOM Toolbox by Juha Vesanto, April 24th, 2002
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 240402
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargin<2 | isempty(mmax), 
+  mmax = max(bmus);
+elseif isstruct(mmax), 
+  switch mmax.type, 
+   case 'som_map',   mmax = prod(mmax.topol.msize);
+   case 'som_topol', mmax = prod(mmax.msize);
+   otherwise, 
+    error('Illegal struct for 2nd argument.')
+  end
+end
+
+if nargin<3, values = 1; end
+
+valid_bmus = find(isfinite(bmus) & bmus>0 & bmus<=mmax); 
+ninvalid = length(bmus)-length(valid_bmus); 
+
+bmus = bmus(valid_bmus); 
+if length(values)>length(bmus), values = values(valid_bmus); end
+hits = full(sum(sparse(bmus,1:length(bmus),values,mmax,length(bmus)),2));
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/iris.data	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,153 @@
+4
+#n SepalL SepalW PetalL PetalW
+5.1 3.5 1.4 0.2 Setosa
+4.9 3.0 1.4 0.2 Setosa
+4.7 3.2 1.3 0.2 Setosa
+4.6 3.1 1.5 0.2 Setosa
+5.0 3.6 1.4 0.2 Setosa
+5.4 3.9 1.7 0.4 Setosa
+4.6 3.4 1.4 0.3 Setosa
+5.0 3.4 1.5 0.2 Setosa
+4.4 2.9 1.4 0.2 Setosa
+4.9 3.1 1.5 0.1 Setosa
+5.4 3.7 1.5 0.2 Setosa
+4.8 3.4 1.6 0.2 Setosa
+4.8 3.0 1.4 0.1 Setosa
+4.3 3.0 1.1 0.1 Setosa
+5.8 4.0 1.2 0.2 Setosa
+5.7 4.4 1.5 0.4 Setosa
+5.4 3.9 1.3 0.4 Setosa
+5.1 3.5 1.4 0.3 Setosa
+5.7 3.8 1.7 0.3 Setosa
+5.1 3.8 1.5 0.3 Setosa
+5.4 3.4 1.7 0.2 Setosa
+5.1 3.7 1.5 0.4 Setosa
+4.6 3.6 1.0 0.2 Setosa
+5.1 3.3 1.7 0.5 Setosa
+4.8 3.4 1.9 0.2 Setosa
+5.0 3.0 1.6 0.2 Setosa
+5.0 3.4 1.6 0.4 Setosa
+5.2 3.5 1.5 0.2 Setosa
+5.2 3.4 1.4 0.2 Setosa
+4.7 3.2 1.6 0.2 Setosa
+4.8 3.1 1.6 0.2 Setosa
+5.4 3.4 1.5 0.4 Setosa
+5.2 4.1 1.5 0.1 Setosa
+5.5 4.2 1.4 0.2 Setosa
+4.9 3.1 1.5 0.1 Setosa
+5.0 3.2 1.2 0.2 Setosa
+5.5 3.5 1.3 0.2 Setosa
+4.9 3.1 1.5 0.1 Setosa
+4.4 3.0 1.3 0.2 Setosa
+5.1 3.4 1.5 0.2 Setosa
+5.0 3.5 1.3 0.3 Setosa
+4.5 2.3 1.3 0.3 Setosa
+4.4 3.2 1.3 0.2 Setosa
+5.0 3.5 1.6 0.6 Setosa
+5.1 3.8 1.9 0.4 Setosa
+4.8 3.0 1.4 0.3 Setosa
+5.1 3.8 1.6 0.2 Setosa
+4.6 3.2 1.4 0.2 Setosa
+5.3 3.7 1.5 0.2 Setosa
+5.0 3.3 1.4 0.2 Setosa
+7.0 3.2 4.7 1.4 Versicolor
+6.4 3.2 4.5 1.5 Versicolor
+6.9 3.1 4.9 1.5 Versicolor
+5.5 2.3 4.0 1.3 Versicolor
+6.5 2.8 4.6 1.5 Versicolor
+5.7 2.8 4.5 1.3 Versicolor
+6.3 3.3 4.7 1.6 Versicolor
+4.9 2.4 3.3 1.0 Versicolor
+6.6 2.9 4.6 1.3 Versicolor
+5.2 2.7 3.9 1.4 Versicolor
+5.0 2.0 3.5 1.0 Versicolor
+5.9 3.0 4.2 1.5 Versicolor
+6.0 2.2 4.0 1.0 Versicolor
+6.1 2.9 4.7 1.4 Versicolor
+5.6 2.9 3.6 1.3 Versicolor
+6.7 3.1 4.4 1.4 Versicolor
+5.6 3.0 4.5 1.5 Versicolor
+5.8 2.7 4.1 1.0 Versicolor
+6.2 2.2 4.5 1.5 Versicolor
+5.6 2.5 3.9 1.1 Versicolor
+5.9 3.2 4.8 1.8 Versicolor
+6.1 2.8 4.0 1.3 Versicolor
+6.3 2.5 4.9 1.5 Versicolor
+6.1 2.8 4.7 1.2 Versicolor
+6.4 2.9 4.3 1.3 Versicolor
+6.6 3.0 4.4 1.4 Versicolor
+6.8 2.8 4.8 1.4 Versicolor
+6.7 3.0 5.0 1.7 Versicolor
+6.0 2.9 4.5 1.5 Versicolor
+5.7 2.6 3.5 1.0 Versicolor
+5.5 2.4 3.8 1.1 Versicolor
+5.5 2.4 3.7 1.0 Versicolor
+5.8 2.7 3.9 1.2 Versicolor
+6.0 2.7 5.1 1.6 Versicolor
+5.4 3.0 4.5 1.5 Versicolor
+6.0 3.4 4.5 1.6 Versicolor
+6.7 3.1 4.7 1.5 Versicolor
+6.3 2.3 4.4 1.3 Versicolor
+5.6 3.0 4.1 1.3 Versicolor
+5.5 2.5 4.0 1.3 Versicolor
+5.5 2.6 4.4 1.2 Versicolor
+6.1 3.0 4.6 1.4 Versicolor
+5.8 2.6 4.0 1.2 Versicolor
+5.0 2.3 3.3 1.0 Versicolor
+5.6 2.7 4.2 1.3 Versicolor
+5.7 3.0 4.2 1.2 Versicolor
+5.7 2.9 4.2 1.3 Versicolor
+6.2 2.9 4.3 1.3 Versicolor
+5.1 2.5 3.0 1.1 Versicolor
+5.7 2.8 4.1 1.3 Versicolor
+6.3 3.3 6.0 2.5 Virginica
+5.8 2.7 5.1 1.9 Virginica
+7.1 3.0 5.9 2.1 Virginica
+6.3 2.9 5.6 1.8 Virginica
+6.5 3.0 5.8 2.2 Virginica
+7.6 3.0 6.6 2.1 Virginica
+4.9 2.5 4.5 1.7 Virginica
+7.3 2.9 6.3 1.8 Virginica
+6.7 2.5 5.8 1.8 Virginica
+7.2 3.6 6.1 2.5 Virginica
+6.5 3.2 5.1 2.0 Virginica
+6.4 2.7 5.3 1.9 Virginica
+6.8 3.0 5.5 2.1 Virginica
+5.7 2.5 5.0 2.0 Virginica
+5.8 2.8 5.1 2.4 Virginica
+6.4 3.2 5.3 2.3 Virginica
+6.5 3.0 5.5 1.8 Virginica
+7.7 3.8 6.7 2.2 Virginica
+7.7 2.6 6.9 2.3 Virginica
+6.0 2.2 5.0 1.5 Virginica
+6.9 3.2 5.7 2.3 Virginica
+5.6 2.8 4.9 2.0 Virginica
+7.7 2.8 6.7 2.0 Virginica
+6.3 2.7 4.9 1.8 Virginica
+6.7 3.3 5.7 2.1 Virginica
+7.2 3.2 6.0 1.8 Virginica
+6.2 2.8 4.8 1.8 Virginica
+6.1 3.0 4.9 1.8 Virginica
+6.4 2.8 5.6 2.1 Virginica
+7.2 3.0 5.8 1.6 Virginica
+7.4 2.8 6.1 1.9 Virginica
+7.9 3.8 6.4 2.0 Virginica
+6.4 2.8 5.6 2.2 Virginica
+6.3 2.8 5.1 1.5 Virginica
+6.1 2.6 5.6 1.4 Virginica
+7.7 3.0 6.1 2.3 Virginica
+6.3 3.4 5.6 2.4 Virginica
+6.4 3.1 5.5 1.8 Virginica
+6.0 3.0 4.8 1.8 Virginica
+6.9 3.1 5.4 2.1 Virginica
+6.7 3.1 5.6 2.4 Virginica
+6.9 3.1 5.1 2.3 Virginica
+5.8 2.7 5.1 1.9 Virginica
+6.8 3.2 5.9 2.3 Virginica
+6.7 3.3 5.7 2.5 Virginica
+6.7 3.0 5.2 2.3 Virginica
+6.3 2.5 5.0 1.9 Virginica
+6.5 3.0 5.2 2.0 Virginica
+6.2 3.4 5.4 2.3 Virginica
+5.9 3.0 5.1 1.8 Virginica
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/kmeans_clusters.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,120 @@
+function [centers,clusters,errors,ind] = kmeans_clusters(sD, n_max, c_max, verbose)
+
+% KMEANS_CLUSTERS Clustering with k-means with different values for k.
+%
+% [c, p, err, ind] = kmeans_clusters(sD, [n_max], [c_max], [verbose])
+%
+%   [c, p, err, ind] = kmeans_clusters(sD);
+%  
+%  Input and output arguments ([]'s are optional):
+%   D         (struct) map or data struct
+%             (matrix) size dlen x dim, the data 
+%   [n_max]   (scalar) maximum number of clusters, default is sqrt(dlen)
+%   [c_max]   (scalar) maximum number of k-means runs, default is 5
+%   [verbose] (scalar) verbose level, 0 by default
+%
+%   c         (cell array) c{i} contains cluster centroids for k=i
+%   p         (cell array) p{i} contains cluster indeces for k=i
+%   err       (vector) squared sum of errors for each value of k
+%   ind       (vector) Davies-Bouldin index value for each clustering
+%
+% Makes a k-means to the given data set with different values of
+% k. The k-means is run multiple times for each k, and the best of
+% these is selected based on sum of squared errors. Finally, the
+% Davies-Bouldin index is calculated for each clustering. 
+%
+% For example to cluster a SOM: 
+%    [c, p, err, ind] = kmeans_clusters(sM); % find clusterings
+%    [dummy,i] = min(ind); % select the one with smallest index
+%    som_show(sM,'color',{p{i},sprintf('%d clusters',i)}); % visualize
+%    colormap(jet(i)), som_recolorbar % change colormap
+%  
+% See also SOM_KMEANS.
+
+% References: 
+%   Jain, A.K., Dubes, R.C., "Algorithms for Clustering Data", 
+%   Prentice Hall, 1988, pp. 96-101.
+%
+%   Davies, D.L., Bouldin, D.W., "A Cluster Separation Measure", 
+%   IEEE Transactions on Pattern Analysis and Machine Intelligence, 
+%   vol. PAMI-1, no. 2, 1979, pp. 224-227.
+%
+%   Vesanto, J., Alhoniemi, E., "Clustering of the Self-Organizing
+%   Map", IEEE Transactions on Neural Networks, 2000.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Esa Alhoniemi
+% Copyright (c) by Esa Alhoniemi
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% ecco 301299 juuso 020200 211201
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments and initialization
+
+if isstruct(sD), 
+  if isfield(sD,'data'), D = sD.data; 
+  else D = sD.codebook; 
+  end
+else D = sD; 
+end
+[dlen dim] = size(D);
+
+if nargin < 2 | isempty(n_max) | isnan(n_max), n_max = ceil(sqrt(dlen)); end
+if nargin < 3 | isempty(c_max) | isnan(c_max), c_max = 5; end
+if nargin < 4 | isempty(verbose) | isnan(verbose), verbose = 0; end
+
+centers   = cell(n_max,1); 
+clusters  = cell(n_max,1);
+ind       = zeros(1,n_max)+NaN;
+errors    = zeros(1,n_max)+NaN;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+% the case k=1 is trivial, but Davies-Boulding index cannot be evaluated
+m = zeros(1,dim);
+for i=1:dim, m(i)=mean(D(isfinite(D(:,i)),i)); end
+centers{1} = m;
+clusters{1} = ones(dlen,1);
+[dummy qerr] = som_bmus(m,D);
+errors(1) = sum(qerr.^2);
+ind(1) = NaN; 
+
+if verbose, fprintf(2,'Doing k-means for 2-%d clusters\n',n_max); end
+
+for i = 2:n_max, % number of clusters
+
+  % make k-means with k=i for c_max times and select the best based
+  % on sum-of-squared errors (SSE)
+  best = realmax;  
+  for j = 1:c_max     % run number j for cluster i      
+    if verbose,
+      fprintf('%d/%d clusters, k-means run %d/%d\r', i, n_max,j, c_max);
+    end      
+    [c, k, err] = som_kmeans('batch', D, i, 100, 0);
+    if err < best, k_best = k'; c_best = c; best = err; end
+    % ' added in k_best = k'; by kr 1.10.02
+  end
+  if verbose, fprintf(1, '\n');  end
+
+  % store the results  
+  centers{i}  = c_best;
+  clusters{i} = k_best;
+  errors(i)   = best;
+%  ind(i)      = db_index(D, c_best, k_best, 2); wrong version in somtbx ??
+  ind(i)      = db_index(D, k_best, c_best, 2); % modified by kr 1.10.02
+
+  % if verbose mode, plot the index & SSE
+  if verbose
+    subplot(2,1,1), plot(ind), grid
+    title('Davies-Bouldin''s index')
+    subplot(2,1,2), plot(errors), grid
+    title('SSE')
+    drawnow
+  end
+end
+
+return; 
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/knn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,158 @@
+function [C,P]=knn(d, Cp, K)
+
+%KNN K-Nearest Neighbor classifier using an arbitrary distance matrix
+%
+%  [C,P]=knn(d, Cp, [K])
+%
+%  Input and output arguments ([]'s are optional): 
+%   d     (matrix) of size NxP: This is a precalculated dissimilarity (distance matrix).
+%           P is the number of prototype vectors and N is the number of data vectors
+%           That is, d(i,j) is the distance between data item i and prototype j.
+%   Cp    (vector) of size Px1 that contains integer class labels. Cp(j) is the class of 
+%            jth prototype.
+%   [K]   (scalar) the maximum K in K-NN classifier, default is 1
+%   C     (matrix) of size NxK: integers indicating the class 
+%           decision for data items according to the K-NN rule for each K.
+%           C(i,K) is the classification for data item i using the K-NN rule
+%   P     (matrix) of size NxkxK: the relative amount of prototypes of 
+%           each class among the K closest prototypes for each classifiee. 
+%           That is, P(i,j,K) is the relative amount of prototypes of class j 
+%           among K nearest prototypes for data item i.
+%
+% If there is a tie between representatives of two or more classes
+% among the K closest neighbors to the classifiee, the class i selected randomly 
+% among these candidates.
+%
+% IMPORTANT  If K>1 this function uses 'sort' which is considerably slower than 
+%            'max' which is used for K=1. If K>1 the knn always calculates 
+%            results for all K-NN models from 1-NN up to K-NN.   
+%
+% EXAMPLE 1 
+%
+% sP;                           % a SOM Toolbox data struct containing labeled prototype vectors
+% [Cp,label]=som_label2num(sP); % get integer class labels for prototype vectors                 
+% sD;                           % a SOM Toolbox data struct containing vectors to be classified
+% d=som_eucdist2(sD,sP);        % calculate euclidean distance matrix
+% class=knn(d,Cp,10);           % classify using 1,2,...,10-rules
+% class(:,5);                   % includes results for 5NN 
+% label(class(:,5))             % original class labels for 5NN
+%
+% EXAMPLE 2 (leave-one-out-crossvalidate KNN for selection of proper K)
+%
+% P;                          % a data matrix of prototype vectors (rows)
+% Cp;                         % column vector of integer class labels for vectors in P 
+% d=som_eucdist2(P,P);        % calculate euclidean distance matrix PxP
+% d(eye(size(d))==1)=NaN;     % set self-dissimilarity to NaN:
+%                             % this drops the prototype itself away from its neighborhood 
+%                             % leave-one-out-crossvalidation (LOOCV)
+% class=knn(d,Cp,size(P,1));  % classify using all possible K
+%                             % calculate and plot LOOC-validated errors for all K
+% failratep = ...
+%  100*sum((class~=repmat(Cp,1,size(P,1))))./size(P,1); plot(1:size(P,1),failratep) 
+
+% See also SOM_LABEL2NUM, SOM_EUCDIST2, PDIST. 
+%
+% Contributed to SOM Toolbox 2.0, October 29th, 2000 by Johan Himberg
+% Copyright (c) by Johan Himberg
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta Johan 291000
+
+%% Init %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Check K 
+if nargin<3 | isempty(K),
+  K=1;
+end
+
+if ~vis_valuetype(K,{'1x1'})
+  error('Value for K must be a scalar');
+end
+
+% Check that dist is a matrix
+if ~vis_valuetype(d,{'nxm'}),
+  error('Distance matrix not valid.')
+end
+
+[N_data N_proto]=size(d);
+
+% Check class label vector: must be numerical and of integers
+if ~vis_valuetype(Cp,{[N_proto 1]});
+  error(['Class vector is invalid: has to be a N-of-data_rows x 1' ...
+	 ' vector of integers']);
+elseif sum(fix(Cp)-Cp)~=0
+  error('Class labels in vector ''Cp'' must be integers.');
+end
+
+if size(d,2) ~= length(Cp),
+  error('Distance matrix and prototype class vector dimensions do not match.');
+end
+
+% Check if the classes are given as labels (no class input arg.)
+% if they are take them from prototype struct
+
+% Find all class labels
+ClassIndex=unique(Cp);
+N_class=length(ClassIndex); % number of different classes  
+
+
+%%%% Classification %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if K==1,   % sort distances only if K>1
+  
+  % 1NN
+  % Select the closest prototype
+  [tmp,proto_index]=min(d,[],2); 
+  C=Cp(proto_index);
+
+else 
+  
+  % Sort the prototypes for each classifiee according to distance
+  [tmp, proto_index]=sort(d');
+  
+  %% Select up to K closest prototypes
+  proto_index=proto_index(1:K,:);
+  knn_class=Cp(proto_index);
+  for i=1:N_class,
+    classcounter(:,:,i)=cumsum(knn_class==ClassIndex(i));
+  end
+  
+  %% Vote between classes of K neighbors 
+  [winner,vote_index]=max(classcounter,[],3);
+  
+  %%% Handle ties
+  
+  % Set index to classes that got as much votes as winner
+  
+  equal_to_winner=(repmat(winner,[1 1 N_class])==classcounter);
+ 
+  % set index to ties
+  [tie_indexi,tie_indexj]=find(sum(equal_to_winner,3)>1); % drop the winner from counter 
+  
+  % Go through tie cases and reset vote_index randomly to one
+  % of them 
+  
+  for i=1:length(tie_indexi),
+    tie_class_index=find(squeeze(equal_to_winner(tie_indexi(i),tie_indexj(i),:)));
+    fortuna=randperm(length(tie_class_index));
+    vote_index(tie_indexi(i),tie_indexj(i))=tie_class_index(fortuna(1));
+  end
+  
+  C=ClassIndex(vote_index)';
+end
+
+%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Relative amount of classes in K neighbors for each classifiee
+
+if K==1,
+  P=zeros(N_data,N_class);
+  if nargout>1,
+    for i=1:N_data,
+      P(i,ClassIndex==C(i))=1;
+    end
+  end
+else
+  P=shiftdim(classcounter,1)./repmat(shiftdim(1:K,-1), [N_data N_class 1]);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/knn_old.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,251 @@
+function [Class,P]=knn_old(Data, Proto, proto_class, K)
+
+%KNN_OLD A K-nearest neighbor classifier using Euclidean distance 
+%
+% [Class,P]=knn_old(Data, Proto, proto_class, K)
+%
+%  [sM_class,P]=knn_old(sM, sData, [], 3);
+%  [sD_class,P]=knn_old(sD, sM, class);
+%  [class,P]=knn_old(data, proto, class);
+%  [class,P]=knn_old(sData, sM, class,5);
+%
+%  Input and output arguments ([]'s are optional): 
+%   Data   (matrix) size Nxd, vectors to be classified (=classifiees)
+%          (struct) map or data struct: map codebook vectors or
+%                   data vectors are considered as classifiees.
+%   Proto  (matrix) size Mxd, prototype vector matrix (=prototypes)
+%          (struct) map or data struct: map codebook vectors or
+%                   data vectors are considered as prototypes.
+%   [proto_class] (vector) size Nx1, integers 1,2,...,k indicating the
+%                   classes of corresponding protoptypes, default: see the 
+%                   explanation below. 
+%   [K]    (scalar) the K in KNN classifier, default is 1
+% 
+%   Class  (matrix) size Nx1, vector of 1,2, ..., k indicating the class 
+%                   desicion according to the KNN rule
+%   P      (matrix) size Nxk, the relative amount of prototypes of 
+%                   each class among the K closest prototypes for
+%                   each classifiee.
+%
+% If 'proto_class' is _not_ given, 'Proto' _must_ be a labeled SOM
+% Toolbox struct. The label of the data vector or the first label of
+% the map model vector is considered as class label for th prototype
+% vector. In this case the output 'Class' is a copy of 'Data' (map or
+% data struct) relabeled according to the classification.  If input
+% argument 'proto_class' _is_ given, the output argument 'Class' is
+% _always_ a vector of integers 1,2,...,k indiacating the class.
+%
+% If there is a tie between representatives of two or more classes
+% among the K closest neighbors to the classifiee, the class is
+% selected randomly among these candidates.
+%
+% IMPORTANT
+% 
+% ** Even if prototype vectors are given in a map struct the mask _is not 
+%    taken into account_ when calculating Euclidean distance
+% ** The function calculates the total distance matrix between all
+%    classifiees and prototype vectors. This results to an MxN matrix; 
+%    if N is high it is recommended to divide the matrix 'Data'
+%    (the classifiees) into smaller sets in order to avoid memory
+%    overflow or swapping. Also, if K>1 this function uses 'sort' which is
+%    considerably slower than 'max' which is used for K==1.
+%
+% See also KNN, SOM_LABEL, SOM_AUTOLABEL
+
+% Contributed to SOM Toolbox 2.0, February 11th, 2000 by Johan Himberg
+% Copyright (c) by Johan Himberg
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta Johan 040200
+
+%% Init %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This must exist later
+classnames='';
+
+% Check K 
+if nargin<4 | isempty(K),
+  K=1;
+end
+
+if ~vis_valuetype(K,{'1x1'})
+  error('Value for K must be a scalar.');
+end
+
+% Take data from data or map struct
+
+if isstruct(Data);
+  if isfield(Data,'type') & ischar(Data.type),
+    ;
+  else
+    error('Invalid map/data struct?');
+  end
+  switch Data.type
+   case 'som_map'
+    data=Data.codebook;
+   case 'som_data'
+    data=Data.data;
+  end
+else
+  % is already a matrix
+  data=Data;
+end
+
+% Take prototype vectors from prototype struct
+
+if isstruct(Proto),
+  
+  if isfield(Proto,'type') & ischar(Proto.type),
+    ;
+  else
+    error('Invalid map/data struct?');
+  end
+  switch Proto.type
+   case 'som_map'
+    proto=Proto.codebook;
+   case 'som_data'
+    proto=Proto.data;
+  end
+else
+  % is already a matrix
+  proto=Proto; 
+end
+
+% Check that inputs are matrices
+if ~vis_valuetype(proto,{'nxm'}) | ~vis_valuetype(data,{'nxm'}),
+  error('Prototype or data input not valid.')
+end
+
+% Record data&proto sizes and check their dims 
+[N_data dim_data]=size(data); 
+[N_proto dim_proto]=size(proto);
+if dim_proto ~= dim_data,
+  error('Data and prototype vector dimension does not match.');
+end
+
+% Check if the classes are given as labels (no class input arg.)
+% if they are take them from prototype struct
+
+if nargin<3 | isempty(proto_class)
+  if ~isstruct(Proto)
+    error(['If prototypes are not in labeled map or data struct' ...
+	   'class must be given.']);  
+    % transform to interger (numerical) class labels
+  else
+    [proto_class,classnames]=class2num(Proto.labels); 
+  end
+end
+
+% Check class label vector: must be numerical and of integers
+if ~vis_valuetype(proto_class,{[N_proto 1]});
+  error(['Class vector is invalid: has to be a N-of-data_rows x 1' ...
+	 ' vector of integers']);
+elseif sum(fix(proto_class)-proto_class)~=0
+  error('Class labels in vector ''Class'' must be integers.');
+end
+
+% Find all class labels
+ClassIndex=unique(proto_class);
+N_class=length(ClassIndex); % number of different classes  
+
+% Calculate euclidean distances between classifiees and prototypes
+d=distance(proto,data);
+
+%%%% Classification %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if K==1,   % sort distances only if K>1
+  
+  % 1NN
+  % Select the closest prototype
+  [tmp,proto_index]=min(d);
+  class=proto_class(proto_index);
+
+else 
+  
+  % Sort the prototypes for each classifiee according to distance
+  [tmp,proto_index]=sort(d);
+  
+  %% Select K closest prototypes
+  proto_index=proto_index(1:K,:);
+  knn_class=proto_class(proto_index);
+  for i=1:N_class,
+    classcounter(i,:)=sum(knn_class==ClassIndex(i));
+  end
+  
+  %% Vote between classes of K neighbors 
+  [winner,vote_index]=max(classcounter);
+  
+  %% Handle ties
+  
+  % set index to clases that got as amuch votes as winner
+  
+  equal_to_winner=(repmat(winner,N_class,1)==classcounter);
+  
+  % set index to ties
+  tie_index=find(sum(equal_to_winner)>1); % drop the winner from counter 
+  
+  % Go through equal classes and reset vote_index randomly to one
+  % of them 
+  
+  for i=1:length(tie_index),
+    tie_class_index=find(equal_to_winner(:,tie_index(i)));
+    fortuna=randperm(length(tie_class_index));
+    vote_index(tie_index(i))=tie_class_index(fortuna(1));
+  end
+  
+  class=ClassIndex(vote_index);
+end
+
+%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Relative amount of classes in K neighbors for each classifiee
+
+if K==1,
+  P=zeros(N_data,N_class);
+  if nargout>1,
+    for i=1:N_data,
+      P(i,ClassIndex==class(i))=1;
+    end
+  end
+else
+  P=classcounter'./K;
+end
+
+% xMake class names to struct if they exist
+if ~isempty(classnames),
+  Class=Data;
+  for i=1:N_data,
+    Class.labels{i,1}=classnames{class(i)};
+  end
+else
+  Class=class;
+end
+
+
+%%% Subfunctions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
+
+function [nos,names] = class2num(class)
+
+% Change string labels in map/data struct to integer numbers
+
+names = {};
+nos = zeros(length(class),1);
+for i=1:length(class)
+  if ~isempty(class{i}) & ~any(strcmp(class{i},names))
+    names=cat(1,names,class(i));
+  end
+end
+
+tmp_nos = (1:length(names))';
+for i=1:length(class)
+  if ~isempty(class{i})
+    nos(i,1) = find(strcmp(class{i},names));    
+  end
+end
+
+function d=distance(X,Y);
+
+% Euclidean distance matrix between row vectors in X and Y
+
+U=~isnan(Y); Y(~U)=0;
+V=~isnan(X); X(~V)=0;
+d=X.^2*U'+V*Y'.^2-2*X*Y';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/lvq1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,180 @@
+function codebook=lvq1(codebook, data, rlen, alpha);
+
+%LVQ1 Trains a codebook with the LVQ1 -algorithm.
+%
+%  sM = lvq1(sM, D, rlen, alpha)
+%
+%   sM = lvq1(sM,sD,30*length(sM.codebook),0.08);
+%
+%  Input and output arguments: 
+%   sM    (struct) map struct, the class information must be 
+%                  present on the first column of .labels field
+%   D     (struct) data struct, the class information must
+%                  be present on the first column of .labels field
+%   rlen  (scalar) running length
+%   alpha (scalar) learning parameter
+%
+%   sM    (struct) map struct, the trained codebook
+%
+% NOTE: does not take mask into account.
+% 
+% For more help, try 'type lvq1', or check out online documentation. 
+% See also LVQ3, SOM_SUPERVISED, SOM_SEQTRAIN.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% lvq1
+%
+% PURPOSE
+%
+% Trains codebook with the LVQ1 -algorithm (described below).
+%
+% SYNTAX
+%
+%  sM = lvq1(sM, D, rlen, alpha)
+%
+% DESCRIPTION
+%
+% Trains codebook with the LVQ1 -algorithm. Codebook contains a number
+% of vectors (mi, i=1,2,...,n) and so does data (vectors xj,
+% j=1,2,...,k).  Both vector sets are classified: vectors may have a
+% class (classes are set to the first column of data or map -structs'
+% .labels -field). For each xj there is defined the nearest codebook
+% -vector index c by searching the minimum of the euclidean distances
+% between the current xj and codebook -vectors:
+%
+%    c = min{ ||xj - mi|| },  i=[1,..,n], for fixed xj
+%         i
+% If xj and mc belong to the same class, mc is updated as follows:
+%    mc(t+1) = mc(t) + alpha * (xj(t) - mc(t))
+% If xj and mc belong to different classes, mc is updated as follows:
+%    mc(t+1) = mc(t) - alpha * (xj(t) - mc(t))
+% Otherwise updating is not performed.
+% 
+% Argument 'rlen' tells how many times training sequence is performed.
+% LVQ1 -algorithm may be stopped after a number of steps, that is
+% 30-50 times the number of codebook vectors.
+%
+% Argument 'alpha' is the learning rate, recommended to be smaller
+% than 0.1.
+%
+% NOTE: does not take mask into account.
+%
+% REFERENCES
+%
+% Kohonen, T., "Self-Organizing Map", 2nd ed., Springer-Verlag, 
+%    Berlin, 1995, pp. 176-179.
+%
+% See also LVQ_PAK from http://www.cis.hut.fi/research/som_lvq_pak.shtml
+%   
+% REQUIRED INPUT ARGUMENTS
+%
+%  sM                The data to be trained.
+%          (struct)  A map struct.
+%
+%  D                 The data to use in training.
+%          (struct)  A data struct.
+%
+%  rlen    (integer) Running length of LVQ1 -algorithm.
+%                    
+%  alpha   (float)   Learning rate used in training.
+%
+% OUTPUT ARGUMENTS
+%
+%  codebook          Trained data.
+%          (struct)  A map struct.
+%
+% EXAMPLE
+%
+%   lab = unique(sD.labels(:,1));         % different classes
+%   mu = length(lab)*5;                   % 5 prototypes for each    
+%   sM = som_randinit(sD,'msize',[mu 1]); % initial prototypes
+%   sM.labels = [lab;lab;lab;lab;lab];    % their classes
+%   sM = lvq1(sM,sD,50*mu,0.05);          % use LVQ1 to adjust
+%                                         % the prototypes      
+%   sM = lvq3(sM,sD,50*mu,0.05,0.2,0.3);  % then use LVQ3 
+%
+% SEE ALSO
+% 
+%  lvq3             Use LVQ3 algorithm for training.
+%  som_supervised   Train SOM using supervised training.
+%  som_seqtrain     Train SOM with sequential algorithm.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas
+% Copyright (c) Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 310100 juuso 020200
+
+cod = codebook.codebook;
+c_class = class2num(codebook.labels(:,1));
+
+dat = data.data;
+d_class = class2num(data.labels(:,1));
+
+x=size(dat,1);
+y=size(cod,2);
+
+ONES=ones(size(cod,1),1);
+
+for t=1:rlen
+
+  fprintf(1,'\rTraining round: %d',t);
+  tmp=NaN*ones(x,y);
+
+  for j=1:x
+    no_NaN=find(~isnan(dat(j,:)));
+    di = sqrt(sum([cod(:,no_NaN)  - ONES*dat(j,no_NaN)].^2,2));
+
+    [foo,ind] = min(di);
+
+    if d_class(j) & d_class(j) == c_class(ind) % 0 is for unclassified vectors
+      tmp(ind,:) = cod(ind,:) + alpha * (dat(j,:) - cod(ind,:));
+    elseif d_class(j)
+      tmp(ind,:) = cod(ind,:) - alpha*(dat(j,:) - cod(ind,:));
+    end
+  end
+
+  inds = find(~isnan(sum(tmp,2)));
+  cod(inds,:) = tmp(inds,:);
+end
+
+codebook.codebook = cod;
+
+sTrain = som_set('som_train','algorithm','lvq1',...
+		 'data_name',data.name,...
+		 'neigh','',...
+		 'mask',ones(y,1),...
+		 'radius_ini',NaN,...
+		 'radius_fin',NaN,...
+		 'alpha_ini',alpha,...
+		 'alpha_type','constant',...
+		 'trainlen',rlen,...
+		 'time',datestr(now,0));
+codebook.trainhist(end+1) = sTrain;
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function nos = class2num(class)
+
+names = {};
+nos = zeros(length(class),1);
+
+for i=1:length(class)
+  if ~isempty(class{i}) & ~any(strcmp(class{i},names))
+    names=cat(1,names,class(i));
+  end
+end
+
+tmp_nos = (1:length(names))';
+
+for i=1:length(class)
+  if ~isempty(class{i})
+    nos(i,1) = find(strcmp(class{i},names));    
+  end
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/lvq3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,215 @@
+function codebook = lvq3(codebook,data,rlen,alpha,win,epsilon)
+
+%LVQ3 trains codebook with LVQ3 -algorithm
+%
+% sM = lvq3(sM,D,rlen,alpha,win,epsilon)
+%
+%   sM = lvq3(sM,sD,50*length(sM.codebook),0.05,0.2,0.3);
+%
+%  Input and output arguments: 
+%   sM      (struct) map struct, the class information must be 
+%                    present on the first column of .labels field
+%   D       (struct) data struct, the class information must
+%                    be present on the first column of .labels field
+%   rlen    (scalar) running length
+%   alpha   (scalar) learning parameter, e.g. 0.05
+%   win     (scalar) window width parameter, e.g. 0.25
+%   epsilon (scalar) relative learning parameter, e.g. 0.3
+%
+%   sM      (struct) map struct, the trained codebook
+%
+% NOTE: does not take mask into account.
+%
+% For more help, try 'type lvq3', or check out online documentation.
+% See also LVQ1, SOM_SUPERVISED, SOM_SEQTRAIN.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% lvq3
+%
+% PURPOSE
+%
+% Trains codebook with the LVQ3 -algorithm (described below).
+%
+% SYNTAX
+%
+% sM = lvq3(sM, data, rlen, alpha, win, epsilon)
+%
+% DESCRIPTION
+%
+% Trains codebook with the LVQ3 -algorithm. Codebook contains a number
+% of vectors (mi, i=1,2,...,n) and so does data (vectors xj, j=1,2,...k).
+% Both vector sets are classified: vectors may have a class (classes are
+% set to data- or map -structure's 'labels' -field. For each xj the two 
+% closest codebookvectors mc1 and mc2 are searched (euclidean distances
+% d1 and d2). xj must fall into the zone of window. That happens if:
+%
+%    min(d1/d2, d2/d1) > s, where s = (1-win) / (1+win).
+%
+% If xj belongs to the same class of one of the mc1 and mc1, codebook
+% is updated as follows (let mc1 belong to the same class as xj):
+%    mc1(t+1) = mc1(t) + alpha * (xj(t) - mc1(t))
+%    mc2(t+1) = mc2(t) - alpha * (xj(t) - mc2(t))
+% If both mc1 and mc2 belong to the same class as xj, codebook is
+% updated as follows:
+%    mc1(t+1) = mc1(t) + epsilon * alpha * (xj(t) - mc1(t))
+%    mc2(t+1) = mc2(t) + epsilon * alpha * (xj(t) - mc2(t))
+% Otherwise updating is not performed.
+%
+% Argument 'rlen' tells how many times training -sequence is performed.
+%
+% Argument 'alpha' is recommended to be smaller than 0.1 and argument
+% 'epsilon' should be between 0.1 and 0.5.
+%
+% NOTE: does not take mask into account.
+%
+% REFERENCES
+%
+% Kohonen, T., "Self-Organizing Map", 2nd ed., Springer-Verlag, 
+%    Berlin, 1995, pp. 181-182.
+%
+% See also LVQ_PAK from http://www.cis.hut.fi/research/som_lvq_pak.shtml
+% 
+% REQUIRED INPUT ARGUMENTS
+%
+%  sM                The data to be trained.
+%          (struct)  A map struct.
+%
+%  data              The data to use in training.
+%          (struct)  A data struct.
+%
+%  rlen    (integer) Running length of LVQ3 -algorithm.
+%                    
+%  alpha   (float)   Learning rate used in training, e.g. 0.05
+%
+%  win     (float)   Window length, e.g. 0.25
+%  
+%  epsilon (float)   Relative learning parameter, e.g. 0.3
+%
+% OUTPUT ARGUMENTS
+%
+%  sM          Trained data.
+%          (struct)  A map struct.
+%
+% EXAMPLE
+%
+%   lab = unique(sD.labels(:,1));         % different classes
+%   mu = length(lab)*5;                   % 5 prototypes for each    
+%   sM = som_randinit(sD,'msize',[mu 1]); % initial prototypes
+%   sM.labels = [lab;lab;lab;lab;lab];    % their classes
+%   sM = lvq1(sM,sD,50*mu,0.05);          % use LVQ1 to adjust
+%                                         % the prototypes      
+%   sM = lvq3(sM,sD,50*mu,0.05,0.2,0.3);  % then use LVQ3 
+% 
+% SEE ALSO
+% 
+%  lvq1             Use LVQ1 algorithm for training.
+%  som_supervised   Train SOM using supervised training.
+%  som_seqtrain     Train SOM with sequential algorithm.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 310100 juuso 020200
+
+NOTFOUND = 1;
+
+cod = codebook.codebook;
+dat = data.data;
+
+c_class = codebook.labels(:,1);
+d_class = data.labels(:,1);
+
+s = (1-win)/(1+win);
+
+x = size(dat,1);
+y = size(cod,2);
+
+c_class=class2num(c_class);
+d_class=class2num(d_class);
+
+ONES=ones(size(cod,1),1);
+
+for t=1:rlen
+  fprintf('\rTraining round: %d/%d',t,rlen);
+  tmp = NaN*ones(x,y);
+ 
+  for j=1:x
+    flag = 0;
+    mj = 0;
+    mi = 0;
+    no_NaN=find(~isnan(dat(j,:)));
+    di=sqrt(sum([cod(:,no_NaN) - ONES*dat(j,no_NaN)].^2,2));
+    [foo, ind1] = min(di);
+    di(ind1)=Inf;
+    [foo,ind2] =  min(di);    
+  
+    %ind2=ind2+1;
+
+    if d_class(j) & d_class(j)==c_class(ind1)
+      mj = ind1;
+      mi = ind2;
+      if d_class(j)==c_class(ind2)
+        flag = 1;
+      end
+    elseif d_class(j) & d_class(j)==c_class(ind2)
+      mj = ind2;
+      mi = ind1;
+      if d_class(j)==c_class(ind1)
+        flag = 1;
+      end
+    end
+
+    if mj & mi
+      if flag
+        tmp([mj mi],:) = cod([mj mi],:) + epsilon*alpha*...
+                       (dat([j j],:) - cod([mj mi],:));
+      else
+        tmp(mj,:) = cod(mj,:) + alpha * (dat(j,:)-cod(mj,:));
+        tmp(mi,:) = cod(mi,:) - alpha * (dat(j,:)-cod(mj,:));
+      end
+    end  
+  end    
+  inds = find(~isnan(sum(tmp,2)));
+  cod(inds,:) = tmp(inds,:);
+end
+fprintf(1,'\n');
+
+sTrain = som_set('som_train','algorithm','lvq3',...
+		 'data_name',data.name,...
+		 'neigh','',...
+		 'mask',ones(y,1),...
+		 'radius_ini',NaN,...
+		 'radius_fin',NaN,...
+		 'alpha_ini',alpha,...
+		 'alpha_type','constant',...
+		 'trainlen',rlen,...
+		 'time',datestr(now,0));
+codebook.trainhist(end+1) = sTrain;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function nos = class2num(class)
+
+names = {};
+nos = zeros(length(class),1);
+
+for i=1:length(class)
+  if ~isempty(class{i}) & ~any(strcmp(class{i},names))
+    names=cat(1,names,class(i));
+  end
+end
+
+tmp_nos = (1:length(names))';
+
+for i=1:length(class)
+  if ~isempty(class{i})
+    nos(i,1) = find(strcmp(class{i},names));    
+  end
+end
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/nanstats.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function [me, st, md, no] = nanstats(D)
+
+%NANSTATS Statistical operations that ignore NaNs and Infs.
+%
+% [mean, std, median, nans] = nanstats(D)
+%
+%  Input and output arguments: 
+%   D   (struct) data or map struct
+%       (matrix) size dlen x dim
+%
+%   me  (double) columnwise mean
+%   st  (double) columnwise standard deviation
+%   md  (double) columnwise median
+%   no  (vector) columnwise number of samples (finite, not-NaN)
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 300798 200900
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+(nargchk(1, 1, nargin));  % check no. of input args is correct
+
+if isstruct(D), 
+  if strcmp(D.type,'som_map'), D = D.codebook;
+  else D = D.data;
+  end
+end
+[dlen dim] = size(D);
+me = zeros(dim,1)+NaN;
+md = me;
+st = me;
+no = me;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% computation
+
+for i = 1:dim,
+  ind = find(isfinite(D(:, i))); % indices of non-NaN/Inf elements
+  n   = length(ind);             % no of non-NaN/Inf elements
+
+  me(i) = sum(D(ind, i)); % compute average
+  if n == 0, me(i) = NaN; else me(i) = me(i) / n; end
+
+  if nargout>1, 
+    md(i) = median(D(ind, i)); % compute median
+
+    if nargout>2, 
+      st(i) = sum((me(i) - D(ind, i)).^2); % compute standard deviation
+      if n == 0,     st(i) = NaN;
+      elseif n == 1, st(i) = 0;
+      else st(i) = sqrt(st(i) / (n - 1));
+      end
+
+      if nargout>3, 
+	no(i) = n; % number of samples (finite, not-NaN)
+      end
+    end
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/neural_gas.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,89 @@
+function [Neurons] = neural_gas(D,n,epochs,alpha0,lambda0)
+
+%NEURAL_GAS Quantizes the data space using the neural gas algorithm.
+%
+% Neurons = neural_gas(D, n, epochs, [alpha0], [lambda0])
+%
+%   C = neural_gas(D,50,10);
+%   sM = som_map_struct(sD); 
+%   sM.codebook = neural_gas(sD,size(sM.codebook,1),10);
+%
+%  Input and output arguments ([]'s are optional):
+%   D          (matrix) the data matrix, size dlen x dim
+%              (struct) a data struct
+%   n          (scalar) the number of neurons
+%   epochs     (scalar) the number of training epochs (the number of
+%                       training steps is dlen*epochs)
+%   [alpha0]   (scalar) initial step size, 0.5 by default
+%   [lambda0]  (scalar) initial decay constant, n/2 by default
+%
+%   Neurons    (matrix) the neuron matrix, size n x dim
+%
+% See also SOM_MAKE, KMEANS.
+
+% References: 
+%  T.M.Martinetz, S.G.Berkovich, and K.J.Schulten. "Neural-gas" network
+%  for vector quantization and its application to time-series prediction. 
+%  IEEE Transactions on Neural Networks, 4(4):558-569, 1993.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% juuso 101297 020200
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check arguments and initialize
+
+error(nargchk(3, 5, nargin));  % check the number of input arguments
+
+if isstruct(D), D = D.data; end
+[dlen,dim] = size(D);
+Neurons = (rand(n,dim)-0.5)*10e-5; % small initial values
+train_len = epochs*dlen;
+
+if nargin<4 | isempty(alpha0) | isnan(alpha0), alpha0 = 0.5; end
+if nargin<5 | isempty(lambda0) | isnan(lambda0), lambda0 = n/2; end
+
+% random sample order
+rand('state',sum(100*clock));
+sample_inds = ceil(dlen*rand(train_len,1));
+
+% lambda
+lambda = lambda0 * (0.01/lambda0).^([0:(train_len-1)]/train_len);
+
+% alpha
+alpha = alpha0 * (0.005/alpha0).^([0:(train_len-1)]/train_len);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Action
+
+for i=1:train_len,
+
+  % sample vector
+  x = D(sample_inds(i),:); % sample vector
+  known = ~isnan(x);       % its known components
+  X = x(ones(n,1),known);  % we'll need this 
+
+  % neighborhood ranking
+  Dx = Neurons(:,known) - X;  % difference between vector and all map units
+  [qerrs, inds] = sort((Dx.^2)*known'); % 1-BMU, 2-BMU, etc.
+  ranking(inds) = [0:(n-1)];             
+  h = exp(-ranking/lambda(i));
+  H = h(ones(length(known),1),:)';
+
+  % update 
+  Neurons = Neurons + alpha(i)*H.*(x(ones(n,1),known) - Neurons(:,known));
+
+  % track
+  fprintf(1,'%d / %d \r',i,train_len);
+  if 0 & mod(i,50) == 0, 
+    hold off, plot3(D(:,1),D(:,2),D(:,3),'bo')
+    hold on, plot3(Neurons(:,1),Neurons(:,2),Neurons(:,3),'r+')
+    drawnow
+  end
+end
+
+fprintf(1,'\n');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/pcaproj.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+function [P,V,me,l] = pcaproj(D,arg1,arg2)
+
+%PCAPROJ Projects data vectors using Principal Component Analysis.
+%
+% [P,V,me,l] = pcaproj(D, odim)
+% P =          pcaproj(D, V, me)
+%
+%  Input and output arguments ([]'s are optional)
+%   D      (matrix) size dlen x dim, the data matrix
+%          (struct) data or map struct            
+%   odim   (scalar) how many principal vectors are used
+%  
+%   P      (matrix) size dlen x odim, the projections
+%   V      (matrix) size dim x odim, principal eigenvectors (unit length)
+%   me     (vector) size 1 x dim, center point of D
+%   l      (vector) size 1 x odim, the corresponding eigenvalues, 
+%                   relative to total sum of eigenvalues
+%                   
+% See also SAMMON, CCA.
+
+% Contributed to SOM Toolbox 2.0, February 2nd, 2000 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% juuso 191297 070200
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+error(nargchk(2, 3, nargin)); % check the number of input arguments
+
+% the data
+if isstruct(D), 
+  if strcmp(D.type,'som_map'), D=D.codebook; else D=D.data; end
+end
+[dlen dim] = size(D);
+
+if nargin==2, 
+
+  odim = arg1;
+    
+  % autocorrelation matrix
+  A = zeros(dim);
+  me = zeros(1,dim);
+  for i=1:dim, 
+    me(i) = mean(D(isfinite(D(:,i)),i)); 
+    D(:,i) = D(:,i) - me(i); 
+  end  
+  for i=1:dim, 
+    for j=i:dim, 
+      c = D(:,i).*D(:,j); c = c(isfinite(c));
+      A(i,j) = sum(c)/length(c); A(j,i) = A(i,j); 
+    end
+  end
+  
+  % eigenvectors, sort them according to eigenvalues, and normalize
+  [V,S]   = eig(A);
+  eigval  = diag(S);
+  [y,ind] = sort(abs(eigval)); 
+  eigval  = eigval(flipud(ind));
+  V       = V(:,flipud(ind)); 
+  for i=1:odim, V(:,i) = (V(:,i) / norm(V(:,i))); end
+  
+  % take only odim first eigenvectors
+  V = V(:,1:odim);
+  l = abs(eigval)/sum(abs(eigval));
+  l = l(1:odim); 
+
+else % nargin==3, 
+
+  V = arg1;
+  me = arg2;
+  odim = size(V,2);    
+  D = D-me(ones(dlen,1),:);
+  
+end
+  
+% project the data using odim first eigenvectors
+P = D*V;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/preprocess.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6642 @@
+function preprocess(sData,arg2)
+
+%PREPROCESS  A GUI for data preprocessing.
+%
+%  preprocess(sData)
+%
+%    preprocess(sData)
+%
+% Launches a preprocessing GUI. The optional input argument can be
+% either a data struct or a struct array of such. However, primarily
+% the processed data sets are loaded to the application using the
+% tools in the GUI. Also, the only way to get the preprocessed data
+% sets back into the workspace is to use the tools in the GUI (press
+% the button DATA SET MANAGEMENT).
+%  
+% For a more throughout description, see online documentation.
+% See also SOM_GUI. 
+
+%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% IN FILES: preprocess.html,preproc.jpg,sDman.jpg,clip.jpg,delay.jpg,window.jpg,selVect.jpg
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas and the SOM Toolbox team
+
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100
+
+global no_of_sc  % every Nth component in 'relative values' is drawn stronger.
+no_of_sc=5;
+
+if nargin < 1 | nargin > 2 
+  error('Invalid number of input arguments');
+  return;
+end
+  
+if nargin == 1, arg2=[]; end
+
+if ~isstr(sData)   %%% Preprocess is started...
+data.LOG{1}='% Starting the ''Preprocess'' -window...';
+data.LOG{2}=cat(2,'preprocess(',...
+                     sprintf('%s);',inputname(1)));
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+if ~isempty(pre_h)
+  figure(pre_h);
+  msgbox('''Preprocess''-figure already exists.');
+  return;
+end
+
+h0 = figure('Color',[0.8 0.8 0.8], ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperUnits','points', ...
+	'Position',[595 216 600 775], ...
+	'Tag','Preprocess');
+	
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.015 0.06064516129032258 0.9550000000000001 0.1458064516129032], ...
+	'Style','text', ...
+	'Tag','StaticText1');
+
+data.results_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess close', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.8067 0.0142 0.1667 0.0348],...
+	'String','CLOSE', ...
+	'Tag','Pushbutton1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.2141935483870968 0.07000000000000001 0.01806451612903226], ...
+	'String','LOG', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess sel_comp',...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.7983333333333333 0.2090322580645161 0.1666666666666667 0.03483870967741935], ...
+	'String',' ', ...
+	'Style','popupmenu', ...
+	'Tag','sel_comp_h', ...
+	'Value',1);
+
+data.sel_comp_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.0183 0.2568 0.2133 0.1290], ...
+	'Style','text', ...
+	'Tag','StaticText3');
+
+data.sel_cdata_h=h1;
+
+h1 = axes('Parent',h0, ...
+	'CameraUpVector',[0 1 0], ...
+	'CameraUpVectorMode','manual', ...
+	'Color',[1 1 1], ...
+	'Position',[0.2583 0.2568 0.2133 0.1290], ...
+	'Tag','Axes1', ...
+	'XColor',[0 0 0], ...
+	'XTickLabel',['0  ';'0.5';'1  '], ...
+	'XTickLabelMode','manual', ...
+	'XTickMode','manual', ...
+	'YColor',[0 0 0], ...
+	'YTickMode','manual', ...
+	'ZColor',[0 0 0]);
+
+data.sel_chist_h=h1;
+
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4960629921259843 -0.08080808080808044 9.160254037844386], ...
+	'Tag','Axes1Text4', ...
+	'VerticalAlignment','cap');
+set(get(h2,'Parent'),'XLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[-0.0551181102362206 0.4848484848484853 9.160254037844386], ...
+	'Rotation',90, ...
+	'Tag','Axes1Text3', ...
+	'VerticalAlignment','baseline');
+set(get(h2,'Parent'),'YLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','right', ...
+	'Position',[-1.2283    5.7980    9.1603], ...
+	'Tag','Axes1Text2', ...
+	'Visible','off');
+set(get(h2,'Parent'),'ZLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4960629921259843 1.070707070707071 9.160254037844386], ...
+	'Tag','Axes1Text1', ...
+	'VerticalAlignment','bottom');
+set(get(h2,'Parent'),'Title',h2);
+
+h1 = axes('Parent',h0, ...
+	'CameraUpVector',[0 1 0], ...
+	'CameraUpVectorMode','manual', ...
+	'Color',[0.7529 0.7529 0.7529], ...
+	'Position',[0.4950000000000001 0.2567741935483871 0.4766666666666667 0.1290322580645161], ...
+	'Tag','Axes2', ...
+	'XColor',[0 0 0], ...
+	'XTickMode','manual', ...
+	'YColor',[0 0 0], ...
+	'YTick',[0 0.5 1], ...
+	'YTickMode','manual', ...
+	'ZColor',[0 0 0]);
+
+data.vector_h=h1;
+
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4982456140350879 -0.08080808080808044 9.160254037844386], ...
+	'Tag','Axes2Text4', ...
+	'VerticalAlignment','cap');
+set(get(h2,'Parent'),'XLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[-0.1018    0.4848    9.1603], ...
+	'Rotation',90, ...
+	'Tag','Axes2Text3', ...
+	'VerticalAlignment','baseline');
+set(get(h2,'Parent'),'YLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','right', ...
+	'Position',[-1.045614035087719 5.797979797979799 9.160254037844386], ...
+	'Tag','Axes2Text2', ...
+	'Visible','off');
+set(get(h2,'Parent'),'ZLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4982456140350879 1.070707070707071 9.160254037844386], ...
+	'Tag','Axes2Text1', ...
+	'VerticalAlignment','bottom');
+set(get(h2,'Parent'),'Title',h2);
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.3922580645161291 0.17 0.01806451612903226], ...
+	'String','STATISTICS', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2583333333333334 0.3922580645161291 0.1633333333333333 0.01806451612903226], ...
+	'String','HISTOGRAM', ...
+	'Style','text', ...
+	'Tag','StaticText5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi',...
+	'FontSize',6,...
+	'HorizontalAlignment','left',...
+	'String',{'LEFT: NEW SELECTION';'RIGHT: ADD TO SELECTION'}, ...
+	'ListboxTop',0, ...
+	'Position',[0.5016666666666667 0.38 0.235 0.03741935483870968], ...
+	'Style','text', ...
+	'Tag','StaticText6', ...
+	'UserData','[ ]');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess selall', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.8066666666666668 0.3922580645161291 0.1666666666666667 0.03483870967741935], ...
+	'String','SELECT ALL', ...
+	'Tag','Pushbutton2', ...
+	'UserData','[ ]');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.7529 0.7529 0.7529], ...
+	'Position',[0.01833333333333333 0.4503225806451613 0.23 0.3225806451612903], ...
+	'String',' ', ...
+	'Style','listbox', ...
+	'Tag','Listbox1', ...
+	'Value',1);
+
+data.comp_names_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Position',[0.4950000000000001 0.4503225806451613 0.2333333333333333 0.3225806451612903], ...
+	'String',' ', ...
+	'Style','listbox', ...
+	'Tag','Listbox2', ...
+	'Value',1);
+
+data.vect_mean_h = h1;
+
+h1 = axes('Parent',h0, ...
+	'CameraUpVector',[0 1 0], ...
+	'CameraUpVectorMode','manual', ...
+	'Color',[1 1 1], ...
+	'Position',[0.7383333333333334 0.4503225806451613 0.2333333333333333 0.3225806451612903], ...
+	'Tag','Axes3', ...
+	'XColor',[0 0 0], ...
+	'XTickMode','manual', ...
+	'YColor',[0 0 0], ...
+	'YTickMode','manual', ...
+	'ZColor',[0 0 0]);
+
+data.sel_cplot_h = h1;
+
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4964028776978418 -0.03212851405622486 9.160254037844386], ...
+	'Tag','Axes3Text4', ...
+	'VerticalAlignment','cap');
+set(get(h2,'Parent'),'XLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[-0.05035971223021596 0.493975903614458 9.160254037844386], ...
+	'Rotation',90, ...
+	'Tag','Axes3Text3', ...
+	'VerticalAlignment','baseline');
+set(get(h2,'Parent'),'YLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','right', ...
+	'Position',[-3.1942    1.7028    9.1603], ...
+	'Tag','Axes3Text2', ...
+	'Visible','off');
+set(get(h2,'Parent'),'ZLabel',h2);
+h2 = text('Parent',h1, ...
+	'Color',[0 0 0], ...
+	'HandleVisibility','off', ...
+	'HorizontalAlignment','center', ...
+	'Position',[0.4964028776978418 1.028112449799197 9.160254037844386], ...
+	'Tag','Axes3Text1', ...
+	'VerticalAlignment','bottom');
+set(get(h2,'Parent'),'Title',h2);
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess plxy', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.265 0.4683870967741936 0.125 0.03483870967741935], ...
+	'String','XY-PLOT', ...
+	'Tag','Pushbutton3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess hist', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.265 0.5303225806451613 0.125 0.03483870967741935], ...
+	'String','HISTOGRAM', ...
+	'Tag','Pushbutton4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess bplo', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.265 0.5922580645161291 0.125 0.03483870967741935], ...
+	'String','BOX PLOT', ...
+	'Tag','Pushbutton5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess plot', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.265 0.654195483870968 0.125 0.03483870967741935], ...
+	'String','PLOT', ...
+	'Tag','Pushbutton6');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.4088888888888889 0.5333333333333333 0.06 0.03268817204301075], ...
+	'String','30', ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.no_of_bins_h = h1;
+
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.775483870967742 0.2016666666666667 0.01806451612903226], ...
+	'String','COMPONENT LIST', ...
+	'Style','text', ...
+	'Tag','StaticText7');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4950000000000001 0.775483870967742 0.1966666666666667 0.01806451612903226], ...
+	'String','AVERAGE', ...
+	'Style','text', ...
+	'Tag','StaticText8');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.7383333333333334 0.775483870967742 0.225 0.01806451612903226], ...
+	'String','RELATIVE VALUES', ...
+	'Style','text', ...
+	'Tag','StaticText9');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',10, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.8154838709677419 0.2033333333333333 0.0232258064516129], ...
+	'String','COMPONENTS', ...
+	'Style','text', ...
+	'Tag','StaticText10');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',10, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4950000000000001 0.8154838709677419 0.2 0.0232258064516129], ...
+	'String','VECTORS', ...
+	'Style','text', ...
+	'Tag','StaticText11');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess sD_management', ...
+	'FontSize',5, ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.8503225806451613 0.1666666666666667 0.03483870967741935], ...
+	'String','DATA SET MANAGEMENT', ...
+	'Tag','Pushbutton7');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','preprocess sel_sD', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.8890322580645161 0.1666666666666667 0.03483870967741935], ...
+	'String',' ', ...
+	'Style','popupmenu', ...
+	'Tag','PopupMenu2', ...
+	'Value',1);
+
+data.sD_set_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.2516666666666667 0.8503225806451613 0.7216666666666667 0.07354838709677419], ...
+	'Style','text', ...
+	'Tag','StaticText12');
+
+data.sD_name_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',10, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.01833333333333333 0.9341935483870968 0.1616666666666667 0.02064516129032258], ...
+	'String','DATA SETS', ...
+	'Style','text', ...
+	'Tag','StaticText13');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',10, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2516666666666667 0.9341935483870968 0.2833333333333333 0.02064516129032258], ...
+	'String','SELECTED DATA SET', ...
+	'Style','text', ...
+	'Tag','StaticText14');
+
+if ~isstruct(sData), 
+  sData=som_data_struct(sData);
+end
+
+ui_h=uimenu('Label','&Normalization');
+uimenu(ui_h,'Label','Scale [0,1]','Callback','preprocess zscale');
+uimenu(ui_h,'Label','Scale var=1','Callback','preprocess vscale');
+uimenu(ui_h,'Label','HistD','Callback','preprocess histeq');
+uimenu(ui_h,'Label','HistC','Callback','preprocess histeq2');
+uimenu(ui_h,'Label','Log','Callback','preprocess log');
+uimenu(ui_h,'Label','Eval (1-comp)','Callback','preprocess eval1');
+
+ui_h=uimenu('Label','&Components');
+uimenu(ui_h,'Label','Move component','Callback','preprocess move');
+uimenu(ui_h,'Label','Copy component','Callback','preprocess copy');
+uimenu(ui_h,'Label','Add: N binary types','Callback','preprocess oneo');
+uimenu(ui_h,'Label','Add: zeros','Callback','preprocess zero');
+uimenu(ui_h,'Label','Remove component','Callback','preprocess remove');
+uimenu(ui_h,'Label','Remove selected vectors',...
+            'Callback','preprocess remove_vects');
+uimenu(ui_h,'Label','Select all components',...
+            'Callback','preprocess sel_all_comps');
+
+ui_h=uimenu('Label','&Misc');
+ui_h1=uimenu(ui_h,'Label','Calculate');
+ui_h2=uimenu(ui_h,'Label','Process');
+
+uimenu(ui_h,'Label','Get LOG-file','Callback','preprocess LOG');
+uimenu(ui_h,'Label','Indices of the selected vectors',...
+            'Callback','preprocess get_inds');
+uimenu(ui_h,'Label','Undo','Callback','preprocess undo');
+uimenu(ui_h1,'Label','Number of values','Callback','preprocess noof');
+uimenu(ui_h1,'Label','Number of selected vectors',...
+             'Callback','preprocess no_of_sel');
+uimenu(ui_h1,'Label','Correlation','Callback','preprocess corr');
+uimenu(ui_h2,'Label','Unit length','Callback','preprocess unit');
+uimenu(ui_h2,'Label','Eval','Callback','preprocess eval2');
+uimenu(ui_h2,'Label','Clipping','Callback','preprocess clipping');
+uimenu(ui_h2,'Label','Delay','Callback','preprocess delay');
+uimenu(ui_h2,'Label','Windowed','Callback','preprocess window');
+uimenu(ui_h2,'Label','Select vectors','Callback','preprocess select');
+
+len=getfield(size(sData(1).data),{1});
+data.selected_vects=find(ones(1,len));
+data.sD_set=sData;
+set(data.vector_h,'ButtonDownFcn','preprocess(''vector_bdf'',''down'')');
+set(gcf,'UserData',data);
+if ~set_sD_stats;
+  return;
+end
+sel_sD;
+return;    %%% Preprocess-window is ready.
+
+else
+ arg=sData;
+ if strcmp(arg,'rename')
+   rename(arg2);
+ elseif strcmp(arg,'sel_sD')
+   if isempty(arg2)
+     sel_sD;
+   else
+     sel_sD(arg2);
+   end
+ elseif strcmp(arg,'zscale')
+   if isempty(arg2)
+      zero2one_scale;
+   else
+      zero2one_scale(arg2);
+   end
+ elseif strcmp(arg,'vscale');
+   if isempty(arg2)
+      var_scale;
+   else
+      var_scale(arg2);
+   end
+ elseif strcmp(arg,'histeq2')
+   if isempty(arg2)
+     hist_eq2;
+   else
+     hist_eq2(arg2);
+   end
+ elseif strcmp(arg,'log')
+   if isempty(arg2)
+     logarithm;
+   else
+     logarithm(arg2);
+   end
+ elseif strcmp(arg,'eval1')
+   if isempty(arg2)
+     eval1;
+   else
+     eval1(arg2);
+   end
+ elseif strcmp(arg,'eval2')
+   if isempty(arg2)
+     eval2;
+   else
+     eval2(arg2);
+   end
+ elseif strcmp(arg,'histeq');
+   if isempty(arg2)
+     hist_eq;
+   else
+      hist_eq(arg2);
+   end
+ elseif strcmp(arg,'selall')
+   if isempty(arg2)
+     select_all;
+   else
+     select_all(arg2);
+   end
+ elseif strcmp(arg,'sel_button');
+   if isempty(arg2)
+     sel_button;
+   else
+     sel_button(arg2);
+   end
+ elseif strcmp(arg,'clear_button')
+   if isempty(arg2)
+     clear_button;
+   else
+     clear_button(arg2)
+   end
+ elseif(strcmp(arg,'move'))
+   if isempty(arg2)
+     move_component;
+   else
+     move_component(arg2);
+   end
+ elseif(strcmp(arg,'copy'))
+   if isempty(arg2)
+     copy_component;
+   else
+     copy_component(arg2);
+   end
+ elseif strcmp(arg,'oneo')
+   if isempty(arg2)
+     one_of_n;
+   else
+     one_of_n(arg2);
+   end
+ elseif strcmp(arg,'zero')
+   if isempty(arg2)
+     add_zeros;
+   else
+     add_zeros(arg2);
+   end
+ elseif strcmp(arg,'remove')
+   if isempty(arg2)
+     remove_component;
+   else
+     remove_component(arg2);
+   end
+ elseif strcmp(arg,'remove_vects')
+   if isempty(arg2)
+     remove_vects;
+   else
+     remove_vects(arg2);
+   end
+ elseif strcmp(arg,'noof')
+   if isempty(arg2)
+     no_of_values;
+   else
+     no_of_values(arg2);
+   end
+ elseif strcmp(arg,'corr');
+   if isempty(arg2)
+     correlation;
+   else
+     correlation(arg2);
+   end
+ elseif strcmp(arg,'unit')
+   if isempty(arg2)
+     unit_length;
+   else
+     unit_length(arg2);
+   end
+ elseif strcmp(arg,'clip_data')
+   clip_data(arg2);
+ elseif strcmp(arg,'copy_delete')
+   copy_delete(arg2);
+ elseif strcmp(arg,'and_or_cb')
+   and_or_cb(arg2);
+ elseif strcmp(arg,'all_sel_cb')
+   all_sel_cb(arg2);
+ elseif strcmp(arg,'clip_exp_cb')
+   clip_exp_cb(arg2);
+ elseif strcmp(arg,'window_cb')
+   window_cb(arg2);
+ elseif strcmp(arg,'set_state_vals')
+   set_state_vals(arg2);
+ elseif strcmp(arg,'vector_bdf')
+   vector_bdf(arg2);
+ elseif strcmp(arg,'sD_management');
+   if isempty(arg2)
+     sD_management;
+   else
+     sD_management(arg2);
+   end
+ elseif strcmp(arg,'clipping')
+   if isempty(arg2)
+     clipping;
+   else
+     clipping(arg2);
+   end
+ elseif strcmp(arg,'delay')
+   if isempty(arg2)
+     delay;
+   else
+     delay(arg2);
+   end
+ elseif strcmp(arg,'window');
+   if isempty(arg2)
+     window;
+   else
+     window(arg2);
+   end
+ elseif strcmp(arg,'select');
+   if isempty(arg2)
+     select;
+   else
+     select(arg2);
+   end
+ elseif strcmp(arg,'import')
+   if isempty(arg2)
+     import;
+   else
+     import(arg2);
+   end
+ elseif strcmp(arg,'export')
+   if isempty(arg2)
+     export;
+   else
+     export(arg2);
+   end
+ elseif strcmp(arg,'undo');
+   if isempty(arg2)
+     undo;
+   else
+     undo(arg2);
+   end
+ elseif strcmp(arg,'delay_data')
+   if isempty(arg2)
+     delay_data;
+   else
+     delay_data(arg2);
+   end
+ elseif strcmp(arg,'eval_windowed')
+   if isempty(arg2)
+     eval_windowed;
+   else
+     eval_windowed(arg2);
+   end 
+ elseif strcmp(arg,'get_inds')
+   if isempty(arg2)
+     get_selected_inds;
+   else
+     get_selected_inds(arg2);
+   end
+ elseif strcmp(arg,'no_of_sel')
+   if isempty(arg2)
+     no_of_selected;
+   else
+     no_of_selected(arg2);
+   end
+ elseif strcmp(arg,'sel_comp');
+   if isempty(arg2)
+     sel_comp;
+   else
+     sel_comp(arg2);
+   end
+ elseif strcmp(arg,'sel_all_comps')
+   if isempty(arg2)
+     select_all_comps;
+   else
+     select_all_comps(arg2);
+   end 
+ elseif strcmp(arg,'refresh')
+   set_var_names;  
+ elseif any(strcmp(arg,{'close_c','close_d','close_s','close_w','close_sD'}))
+   if isempty(arg2)
+     close_func(arg)
+   else
+     close_func(arg,arg2);
+   end 
+ end
+ 
+
+ switch arg
+   case 'sD_stats'
+     sD_stats;
+   case 'LOG'
+     log_file;
+   otherwise
+     pro_tools(arg);
+ end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function set_compnames(sData,h)
+
+%SET_COMPNAMES
+%
+% set_compnames(sData,h)
+%
+% ARGUMENTS
+%
+%  sData     (struct)  som_data_struct
+%  h         (scalar)  handle to a list box object
+%
+%
+% This function sets the component names of sData to the list box
+% indicated by 'h'. 
+%
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  error('Figure ''Preprocess'' does not exist. Closing program...');
+  close_preprocess;
+end
+
+udata=get(pre_h,'UserData');
+
+set(h,'Value',[]);
+for i=1:length(sData.comp_names)	
+  tmp=sprintf('#%d: ',i);
+  names{i,1}=cat(2,tmp, sData.comp_names{i});
+end
+
+
+set(h,'String',names,'Max',2);
+set(udata.sel_comp_h,'String',names);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function draw_vectors(vectors,h)
+
+%DRAW_VECTORS
+%
+% draw_vectors(vectors,h)
+%
+% ARGUMENTS
+%
+%  vectors  (vector) vector of 0's and 1's
+%  h        (scalar) handle to an axis object
+%
+%
+%  This function draws an horizontal bar of 'vectors' in the axis
+%  indicated by 'h'.
+%
+%
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+subplot(h);
+hold off;
+cla;
+
+set(h,'YLim',[0 1]);
+set(h,'YTick',[]);
+set(h,'XLim',[0 length(vectors)+1]);
+hold on;
+
+comp_no=get(getfield(get(pre_h,'UserData'),'sel_comp_h'),'Value');
+comp=getfield(get(pre_h,'UserData'),'sData');
+comp=comp.data(:,comp_no);
+Max = max(comp);
+Min = min(comp);
+lims=get(gca,'YLim');
+lims(1)=Min;
+h=abs(0.1*Max);
+lims(2)=Max;
+if Max - Min <= eps
+  tmp=Max;
+  lims(1)=tmp-1;
+  lims(2)=tmp+1;
+end
+lims(2)=lims(2)+h;
+if ~all(isnan(lims))
+  set(gca,'YLim',lims);
+end
+h=(lims(2)-lims(1))/4;
+set(gca,'YTickMode','auto'); 
+t=1:length(vectors);
+h=plot(t,comp);
+set(h,'ButtonDownFcn','preprocess(''vector_bdf'',''down'')');
+indices =find(vectors);
+vectors(indices)=0.1*(getfield(get(gca,'YLim'),...
+                      {2})-getfield(get(gca,'YLim'),{1}));
+plot(indices,vectors(indices)+getfield(get(gca,'YLim'),{1}),...
+     'ored','MarkerSize',4);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function vect_means(sData,handle,indices)
+
+%VECT_MEANS
+%
+% vect_means(sData,handle,indices)
+%
+% ARGUMENTS
+% 
+%  sData    (struct)    som_data_struct
+%  handle   (scalar)    handle to the static text box object
+%  indices  (vector)    indices of selected vectors
+%
+%
+% This function calculates means of selected vectors' components
+% and writes them in the static text box indicated by 'handle'.
+%
+%
+
+sData= sData.data(indices,:);
+
+for i=1:length(sData(1,:))
+  names{i}=sprintf('#%d: ',i);
+end
+
+
+for i=1:length(sData(1,:))
+  tmp=sData(:,i);
+  tmp=cat(2,names{i},sprintf('%-10.3g',mean(tmp(find(~isnan(tmp))))));
+  string{i}=tmp;
+end
+
+set(handle,'String',string);
+set(handle,'HorizontalAlignment','left');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function vector_bdf(arg)
+
+%VECTOR_BDF   A button down function.
+%
+% vector_bdf(arg)
+%
+% ARGUMENTS
+%
+%  arg      (string)  'down' or 'up',  tells the mouse button's state.
+%                     
+%
+%  This function selects vectors in the vector-window and plots maxima,
+%  minima and means of the selected vectors. It also writes means of the
+%  selected vectors' components in a static text box and takes care of
+%  changes of the chosen component's data.
+%
+%  See also VECTOR_MEANS, SEL_COMP
+%
+%
+ 
+
+arg2=arg(6:length(arg));
+if ~isempty(arg2)
+  LOG=1;
+else
+  LOG=0;
+end
+arg=arg(1:4);
+
+%%% arg's first "word" is 4 letters long and it can be:
+%%%
+%%% 'key '
+%%% 'down'
+%%% 'drag'
+%%% 'up  '
+
+if strcmp(arg,'key ') %string is 'key' + 1 space!!!
+  if ~LOG
+    key=get(gcf,'CurrentCharacter');
+   else 
+    key=arg2
+  end
+  if ~strcmp(key,'<') & ~strcmp(key,'>')
+    return;
+  end
+  data=get(gcf,'UserData');
+  sel=data.selected_vects;
+  if length(sel) == 1
+    if strcmp(key,'<') & sel ~= 1 
+      data.selected_vects=sel-1;
+      set(gcf,'UserData',data);
+     elseif strcmp(key,'>') & sel ~= length(data.sData.data(:,1))
+      data.selected_vects = sel + 1;
+      set(gcf,'UserData',data);
+     end
+  else
+    if strcmp(key,'<') & sel(1) ~= 1
+      data.selected_vects=cat(2,sel(1)-1,sel);
+      set(gcf,'UserData',data);
+     elseif strcmp(key,'>') & sel(length(sel)) ~= length(sel)
+      data.selected_vects=cat(2,sel,sel(length(sel))+1);
+      set(gcf,'UserData',data);
+     end
+  end
+  cplot_mimema;
+  pro_tools('plot_hist');
+  pro_tools('c_stat');
+  vects=zeros(1,length(data.sData.data(:,1)));
+  vects(data.selected_vects)=1;
+  draw_vectors(vects,data.vector_h);
+ 
+  if ~LOG
+    data=get(gcf,'UserData');
+    data.LOG{length(data.LOG)+1}=...
+    sprintf('preprocess(''vector_bdf'',''key  %s'');',key);
+                                                %string is 'key'+2spaces+%s
+    set(gcf,'UserData',data);
+  end
+  return;
+end
+
+switch arg
+  case 'down'
+   set(gcf,'WindowButtonUpFcn','preprocess(''vector_bdf'',''up  '')');
+   set(gcf,'WindowButtonMotionFcn','preprocess(''vector_bdf'',''drag'')');
+   switch get(gcf,'SelectionType')
+     case 'normal'
+      data.lims1=round(getfield(get(gca,'CurrentPoint'),{1,1}));
+      data.lims2=[];
+     case 'alt'
+      tmp=round(getfield(get(gca,'CurrentPoint'),{1,1}));
+      if isempty(get(gca,'UserData'))
+        data.lims1=tmp;
+        data.lims2=[];
+      else
+        data.lims1=cat(2,getfield(get(gca,'UserData'),'lims1'),tmp);
+        data.lims2=getfield(get(gca,'UserData'),'lims2');
+      end
+   end
+   coords=get(gca,'CurrentPoint');
+   h=line([coords(1),coords(1)],get(gca,'YLim'),'EraseMode','xor');
+   set(h,'Color','red');
+   h2=line([coords(1),coords(1)],get(gca,'YLim'),'EraseMode','xor');
+   set(h2,'Color','red');
+   data.h=h;
+   data.h2=h2;
+   set(gca,'UserData',data);
+
+  case 'drag'
+   coords=get(gca,'CurrentPoint');
+   lim=get(gca,'XLim');
+   h2=getfield(get(gca,'UserData'),'h2');
+   if lim(1) >= coords(1)
+     set(h2,'XData',[lim(1) lim(1)]);
+   elseif lim(2) <= coords(2)
+     set(h2,'XData',[lim(2) lim(2)]);
+   else
+     set(h2,'XData',[coords(1) coords(1)]);
+   end
+  case 'up  '   % string is 'up' + 2 spaces!!! 
+   set(gcf,'WindowButtonUpFcn','');
+   set(gcf,'WindowButtonMotionFcn','');
+   if ~LOG
+     data=get(gca,'UserData');
+     delete(data.h);
+     delete(data.h2);
+     tmp=round(getfield(get(gca,'CurrentPoint'),{1,1}));
+     data.lims2=cat(2,data.lims2,tmp);
+     tmp_data=sort(cat(1,data.lims1,data.lims2));
+     high=getfield(get(gca,'XLim'),{2})-1;
+     vectors=zeros(1,high);
+     tmp_data(find(tmp_data<1))=1;
+     tmp_data(find(tmp_data>high))=high;
+
+     for i=1:getfield(size(tmp_data),{2})
+       vectors(tmp_data(1,i):tmp_data(2,i))=1;
+     end
+     selected_vects=find(vectors);
+   else
+     pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+     len=size(getfield(getfield(get(pre_h,'UserData'),'sData'),'data'));
+     vectors=zeros(1,len(1));
+     i=1;
+     while i <= length(arg2) & (isspace(arg2(i)) | ~isletter(arg2(i)))
+      i=i+1;
+     end
+     arg3=arg2(i:length(arg2));
+     selected_vects=str2num(arg2(1:i-1));
+     if ~isempty(arg3) & ~all(isspace(arg3))
+       selected_vects=unique(cat(2,selected_vects,...
+                            getfield(get(pre_h,'UserData'),'selected_vects')));
+     end           
+     vectors(selected_vects)=1;  
+     set(pre_h,'CurrentAxes',getfield(get(pre_h,'UserData'),'vector_h'));
+     set(0,'CurrentFigure',pre_h);
+   end
+   draw_vectors(vectors,gca);
+   sData=getfield(get(gcf,'UserData'),'sData');
+   h=getfield(get(gcf,'UserData'),'vect_mean_h');
+   vect_means(sData,h,selected_vects);
+   if ~LOG
+     set(gca,'UserData',data);
+   end
+   data=get(gcf,'UserData');  
+   data.undo.sData=data.sData;
+   data.undo.selected=data.selected_vects;
+   data.selected_vects=selected_vects;
+   if ~LOG
+     data.LOG{length(data.LOG)+1}='% Vector selection by using the mouse...';
+     tmp=sprintf('preprocess(''vector_bdf'',''up   %s'');',...
+                num2str(data.selected_vects));
+     if length(tmp) > 500
+       tmp=textwrap({tmp},500);
+       data.LOG{length(data.LOG)+1}=cat(2,tmp{1},''');');
+       for i=2:length(tmp)-1
+         data.LOG{length(data.LOG)+1}=...
+               cat(2,sprintf('preprocess(''vector_bdf'',''up   %s',...
+                     tmp{i}),'add'');');
+       end
+       data.LOG{length(data.LOG)+1}=...
+             cat(2,sprintf('preprocess(''vector_bdf'',''up   %s',...
+                   tmp{length(tmp)}(1:length(tmp{length(tmp)})-3)),' add'');');
+     else
+       data.LOG{length(data.LOG)+1}=tmp;
+     end
+   end   
+   set(gcf,'UserData',data);
+   cplot_mimema;
+   sel_comp;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sel_button(varargin) 
+
+%SEL_BUTTON     A Callback function. It performs the operations needed
+%               when vector components are selected.
+%
+% See also SEL_COMP
+%
+
+if nargin == 1
+  LOG=1;
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  string=getfield(get(pre_h,'UserData'),'comp_names_h');
+  string=getfield(get(string,'String'),{str2num(varargin{1})});
+  set(0,'CurrentFigure',pre_h);
+else
+  LOG=0;
+  val=get(getfield(get(gcf,'UserData'),'comp_names_h'),'Value');
+end
+
+sel_button_h=getfield(get(gcf,'UserData'),'sel_button_h');
+sel_comps_h=getfield(get(gcf,'UserData'),'sel_comps_h');
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+if ~LOG
+  string=getfield(get(comp_names_h,'String'),{get(comp_names_h,'Value')});
+end
+tmp_string=get(sel_comps_h,'String');
+
+if iscell(tmp_string)
+
+  for i=1:length(string)
+    if ~any(strcmp(string{i},tmp_string))
+      tmp_string=cat(1,tmp_string,string(i));
+    end
+  end
+  string=tmp_string;
+end
+
+set(sel_comps_h,'String',string);
+set(comp_names_h,'Value',[]);
+sel_comp;
+if ~LOG
+  data=get(gcf,'UserData');
+  data.LOG{length(data.LOG)+1}='% Select components';
+  data.LOG{length(data.LOG)+1}=sprintf('preprocess(''sel_button'',''%s'');',...
+                                        num2str(val));
+  set(gcf,'UserData',data);
+end
+ 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clear_button(varargin)
+
+%CLEAR_BUTTON  Function callback evaluated when a 'Clear'-button is
+%              pressed. It removes texts from the 'selected components' 
+%              -window and the 'selected component data' -window and
+%              clears the 'histogram' -axis.
+%
+%
+
+if nargin==1
+  LOG=1;
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  set(0,'CurrentFigure',pre_h);
+else
+  LOG=0;
+end
+
+sel_comp_h=getfield(get(gcf,'UserData'),'sel_comp_h');
+sel_cdata_h=getfield(get(gcf,'UserData'),'sel_cdata_h');
+sel_cplot_h=getfield(get(gcf,'UserData'),'sel_cplot_h');
+sel_chist_h=getfield(get(gcf,'UserData'),'sel_chist_h');
+vector_h=getfield(get(gcf,'UserData'),'vector_h');
+
+set(sel_comp_h,'Value',1);
+set(sel_cdata_h,'String',' ');
+subplot(sel_chist_h);
+hold off;
+cla;
+
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+dims=size(getfield(getfield(get(gcf,'UserData'),'sData'),'data'));
+vectors=zeros(1,dims(1));
+vectors(selected)=1;
+subplot(vector_h);
+draw_vectors(vectors,vector_h);
+if ~LOG
+  data=get(gcf,'UserData');
+  data.LOG{length(data.LOG)+1}='% Remove components from the selected list.';
+  data.LOG{length(data.LOG)+1}='preprocess(''clear_button'',''foo'');';
+  set(gcf,'UserData',data);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sel_comp(varargin)
+
+%SEL_COMP  performs the operations needed when vector components are
+%          chosen. It writes maxima, minima, mean and standard deviation
+%          of the chosen component to a text box window and draws a
+%          histogram of the chosen component of selected vectors' 
+%
+%
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+set(0,'CurrentFigure',pre_h);
+sel_comp_h=getfield(get(pre_h,'UserData'),'sel_comp_h');
+
+if nargin == 1
+  set(sel_comp_h,'Value',str2num(varargin{1}));
+elseif ~isempty(gcbo)
+  no=get(sel_comp_h,'Value');
+  data=get(gcf,'UserData');
+  data.LOG{length(data.LOG)+1}='% Select one component';
+  data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''sel_comp'',''',...
+                                      num2str(no),''');');
+  set(gcf,'UserData',data);
+end
+
+pro_tools('c_stat');
+pro_tools('plot_hist');
+data=get(gcf,'UserData');
+sData=data.sData;  
+vector_h=data.vector_h;
+len=length(sData.data(:,1));
+vects=zeros(1,len);
+vects(data.selected_vects)=1;
+draw_vectors(vects,vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function cplot_mimema
+
+global no_of_sc
+
+sData=getfield(get(gcf,'UserData'),'sData');
+sel_cplot_h=getfield(get(gcf,'UserData'),'sel_cplot_h');
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+
+set(sel_cplot_h,'YLim',[0 length(sData.data(1,:))+1]);
+
+subplot(sel_cplot_h);
+hold off;
+cla;
+hold on;
+
+for i=1:length(sData.data(1,:))
+  Max=max(sData.data(:,i));
+  Min=min(sData.data(:,i));
+  tmp=sData.data(selected,i);
+
+  selMax=max(tmp);
+  selMin=min(tmp);
+  Mean=abs(mean(tmp(find(~isnan(tmp)))));
+  Median=abs(median(tmp(find(~isnan(tmp)))));
+  
+  if Max ~= Min & ~all(isnan(sData.data(:,i)))
+
+    if rem(i,no_of_sc)   % no_of_sc is defined in the beginning of this file...
+
+      line([abs(selMin-Min)/(Max-Min) (selMax-Min)/(Max-Min)],...
+           [i i],'Color','black');
+      plot(abs(Mean-Min)/(Max-Min),i,'oblack');
+      plot(abs(Median-Min)/(Max-Min),i,'xblack');
+    else
+      line([abs(selMin-Min)/(Max-Min) (selMax-Min)/(Max-Min)],...
+           [i i],'Color','black','LineWidth',2);
+      plot(abs(Mean-Min)/(Max-Min),i,'oblack','LineWidth',2);
+      plot(abs(Median-Min)/(Max-Min),i,'xblack','LineWidth',2);
+    end
+  else
+
+    if rem(i,no_of_sc)     % N is defined in the beginning of this file.
+
+      plot(mean(get(gca,'XLim')),i,'oblack');
+      plot(mean(get(gca,'XLim')),i,'xblack');
+    else
+      plot(mean(get(gca,'XLim')),i,'oblack','LineWidth',2);
+      plot(mean(get(gca,'XLim')),i,'xblack','LineWidth',2);
+    end
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+function bool=set_sD_stats
+
+%SET_SD_STATS Writes the data set names to popup menu.
+%
+%
+
+bool=1;
+data=get(gcf,'UserData');
+
+for i=1:length(data.sD_set)
+ % if ~isvalid_var_name({data.sD_set(i).name})
+ %   close_preprocess;
+ %   bool=0;
+ %   return;
+ % end
+  string{i}=cat(2,sprintf('#%d: ',i),data.sD_set(i).name);
+end
+
+set(data.sD_set_h,'String',string);
+data.sData=data.sD_set(get(data.sD_set_h,'Value'));
+data.sData.MODIFIED=0;
+data.sData.INDEX=1;
+set(gcf,'UserData',data);
+write_sD_stats;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function write_sD_stats
+
+%WRITE_SD_STATS  writes data's name, length and dimension to text box.
+%
+%
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+
+sD_name_h=getfield(get(pre_h,'UserData'),'sD_name_h');
+sData=getfield(get(pre_h,'UserData'),'sData');
+dims=size(sData.data);
+string{1}=cat(2,'Name:   ',sData.name);
+string{2}=cat(2,'Length: ',sprintf('%d',dims(1)));
+string{3}=cat(2,'Dim:     ',sprintf('%d',dims(2)));
+
+set(sD_name_h,'String',string);
+set(sD_name_h,'HorizontalAlignment','left');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sel_sD(varargin)
+
+%SEL_SD  sets new data to UserData's 'sData'.
+%        
+%
+
+if nargin==1
+  LOG=1;
+  index=str2num(varargin{1});
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  set(0,'CurrentFigure',pre_h);
+else
+  LOG=0;
+end
+
+sD_set_h=getfield(get(gcf,'UserData'),'sD_set_h');
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+vector_h=getfield(get(gcf,'UserData'),'vector_h');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+
+if ~LOG
+  index=get(sD_set_h,'Value');
+end
+data=get(gcf,'UserData');
+data.undo = [];
+INDEX=data.sData.INDEX;
+data.sData=rmfield(data.sData,'MODIFIED'); 
+data.sData=rmfield(data.sData,'INDEX');
+
+tmp=data.sD_set(index);
+tmp.MODIFIED=0;
+tmp.INDEX=index;
+data.sD_set(INDEX)=data.sData;
+data.sData=tmp;
+
+len=getfield(size(tmp.data),{1});
+
+data.selected_vects=find(ones(1,len));
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Select a new data set.';
+  data.LOG{length(data.LOG)+1}=sprintf('preprocess(''sel_sD'',''%s'');',...
+                                        num2str(index));
+end
+set(gcf,'UserData',data);
+write_sD_stats;
+set_compnames(tmp,comp_names_h);
+draw_vectors(ones(1,len),vector_h);
+vect_means(tmp,vect_mean_h,data.selected_vects);
+clear_button;
+sel_comp;
+cplot_mimema;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function indices=get_indices
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+comp_names_h=getfield(get(pre_h,'UserData'),'comp_names_h');
+indices = get(comp_names_h,'Value');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sD_management(varargin)
+
+if nargin ~= 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+           '% Starting the ''Data Set Management'' -window...';
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+                 'preprocess(''sD_management'',''foo'');';
+  set(pre_h,'UserData',preh_udata);
+end 
+
+man_h=findobj(get(0,'Children'),'Tag','Management');
+if ~isempty(man_h)
+  figure(man_h);
+  return;
+end
+
+h0 = figure('BackingStore','off', ...
+	'Color',[0.8 0.8 0.8], ...
+	'Name','Data Set Management', ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperUnits','points', ...
+	'Position',[753 523 324 470], ...
+	'RendererMode','manual', ...
+	'Tag','Management');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Max',2, ...
+	'Position',[0.02777777777777778 0.0723404255319149 0.7716049382716049 0.1914893617021277], ...
+	'String',' ', ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.new_c_name_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess rename comp',...
+	'Units','normalized', ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.8240740740740741 0.2106382978723404 0.154320987654321 0.05319148936170213], ...
+	'String','RENAME', ...
+	'Tag','Pushbutton1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess close_sD',...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.8240740740740741 0.01914893617021277 0.154320987654321 0.05319148936170213], ...
+	'String','CLOSE', ...
+	'Tag','Pushbutton2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.02777777777777778 0.2680851063829787 0.345679012345679 0.02978723404255319], ...
+	'String','COMPONENTS:', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'HorizontalAlignment','left', ...
+	'Position',[0.02777777777777778 0.3170212765957447 0.3549382716049382 0.5319148936170213], ...
+	'String',' ', ...
+	'Style','listbox', ...
+	'Tag','Listbox1', ...
+	'Value',1);
+
+data.sets_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'HorizontalAlignment','left', ...
+	'Position',[0.6234567901234568 0.3170212765957447 0.3549382716049382 0.5319148936170213], ...
+	'String',' ', ...
+	'Style','listbox', ...
+	'Tag','Listbox2', ...
+	'Value',1);
+
+
+data.variables_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess export',...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.4259259259259259 0.551063829787234 0.154320987654321 0.0425531914893617], ...
+	'String','->', ...
+	'Tag','Pushbutton4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess import',...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.4259259259259259 0.625531914893617 0.154320987654321 0.0425531914893617], ...
+	'String','<-', ...
+	'Tag','Pushbutton3');
+
+
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.02777777777777778 0.8531914893617022 0.2993827160493827 0.02978723404255319], ...
+	'String','DATA SETS', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.6234567901234568 0.8531914893617022 0.2561728395061728 0.02978723404255319], ...
+	'String','WORKSPACE', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess rename set',...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1820987654320987 0.9127659574468086 0.7808641975308641 0.0425531914893617], ...
+	'Style','edit', ...
+	'Tag','EditText2');
+
+data.new_name_h = h1;
+
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.02777777777777778 0.9127659574468086 0.1388888888888889 0.02978723404255319], ...
+	'String','NAME:', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+
+
+ui_h=uimenu('Label','&Tools');
+uimenu(ui_h,'Label','Copy','Callback','preprocess copy_delete copy');
+uimenu(ui_h,'Label','Delete','Callback','preprocess copy_delete delete');
+uimenu(ui_h,'Label','Refresh','Callback','preprocess refresh');
+
+set(gcf,'UserData',data);
+set_var_names;
+sD_names;
+sD_stats;
+
+
+
+%%% Subfunction: set_var_names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function set_var_names
+
+
+variables_h=getfield(get(gcf,'UserData'),'variables_h');
+value=get(variables_h,'Value');
+len=evalin('base','length(who)');
+
+names=cell(len,1);
+
+for i=1:len
+  string=cat(2,'getfield(who,{',num2str(i),'})');
+  names(i)=evalin('base',string);
+end
+
+set(variables_h,'String',names);
+if(value > length(names))
+  set(variables_h,'Value',1);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: sD_names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sD_names
+
+sets_h=getfield(get(gcf,'UserData'),'sets_h');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+sD_set = getfield(get(pre_h,'UserData'),'sD_set');
+
+for i=1:length(sD_set)
+  names{i,1}=cat(2,sprintf('#%d: ',i),sD_set(i).name);
+end
+
+set(sets_h,'String',names);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: sD_stats %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function sD_stats
+
+man_h=findobj(get(0,'Children'),'Tag','Management');
+c_names_h=getfield(get(man_h,'UserData'),'new_c_name_h');
+sD_name_h=getfield(get(man_h,'UserData'),'new_name_h');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+INDEX=getfield(getfield(get(pre_h,'UserData'),'sData'),'INDEX');
+MODIFIED=getfield(getfield(get(pre_h,'UserData'),'sData'),'MODIFIED');
+value=get(getfield(get(man_h,'UserData'),'sets_h'),'Value');
+ 
+if value==INDEX
+  data=get(pre_h,'UserData');
+  sData=rmfield(data.sData,[{'INDEX'};{'MODIFIED'}]);
+  data.sD_set(INDEX)=sData;
+  data.sData.MODIFIED=0;
+  set(pre_h,'UserData',data);
+end      
+
+sData=getfield(getfield(get(pre_h,'UserData'),'sD_set'),{value});
+string1=[{sData.name}];
+
+
+set(sD_name_h,'String',string1);
+set(c_names_h,'String',sData.comp_names);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: import %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function import(varargin)
+
+if nargin==1
+  LOG=1;
+  man_h=findobj(get(0,'Children'),'Tag','Management');
+  set(0,'CurrentFigure',man_h);
+  name=varargin;
+else 
+  LOG=0;
+end
+
+variables_h=getfield(get(gcf,'UserData'),'variables_h');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+if ~LOG
+  name=getfield(get(variables_h,'String'),{get(variables_h,'Value')});
+end
+errstr='Data to be imported must be real matrix or ''som_data_struct''.';
+new_sD=evalin('base',name{1});
+
+if isempty(pre_h)
+  errordlg('''Preprocess'' -figure does not exist. Terminating program...');
+  close_preprocess;
+  return;
+end
+
+if isstr(new_sD) | (~isstruct(new_sD) & ~isreal(new_sD))
+  errordlg(errstr);
+  return;
+elseif isstruct(new_sD) & length(new_sD) > 1
+  errordlg(errstr)
+  return;
+elseif ~isstruct(new_sD)
+  new_sD=som_data_struct(new_sD);
+  new_sD.name=name{1};
+end
+
+new_sD_names=fieldnames(new_sD);
+right_names=fieldnames(som_data_struct(1));
+for i=1:length(new_sD_names)
+  if ~any(strcmp(new_sD_names(i),right_names));
+    errordlg(errstr);
+    return;
+  end
+end
+
+data=get(pre_h,'UserData');
+data.sD_set(length(data.sD_set) + 1)=new_sD;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Import a data set from the workspace.';
+  data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''import'',''',...
+                                    name{1},''');');
+end
+set(pre_h,'UserData',data);
+sD_names;
+sD_stats;
+old =gcf;
+set(0,'CurrentFigure',pre_h);
+set_sD_stats;
+set(0,'CurrentFigure',old);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: export %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function export(varargin)
+
+if nargin == 1
+  LOG=1;
+  man_h=findobj(get(0,'Children'),'Tag','Management');
+  set(0,'CurrentFigure',man_h);
+  index=str2num(varargin{1});  
+else
+  LOG=0;
+end
+
+sets_h=getfield(get(gcf,'UserData'),'sets_h');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if ~LOG
+  index=get(sets_h,'Value');
+end
+
+if isempty(pre_h)
+  errordlg('''Preprocess''-figure does not exist. Terminating program...');
+  close(findobj(get(0,'Children'),'Tag','Management'));
+  close(findobj(get(0,'Children'),'Tag','PlotWin'));
+  return;
+end
+
+sData=getfield(getfield(get(pre_h,'UserData'),'sD_set'),{index});
+
+if ~isvalid_var_name({sData.name})
+  return;
+end
+
+assignin('base',sData.name,sData);
+disp(sprintf('Data set ''%s'' is set to the workspace.',sData.name));
+if ~LOG
+  data=get(pre_h,'UserData');
+  data.LOG{length(data.LOG)+1}='% Export a data set to the workspace.';
+  data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''export'',''',...
+                                   num2str(index),''');');
+  set(pre_h,'UserData',data);
+end
+set_var_names;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Subfunction: rename %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function rename(arg)
+
+i=1;
+while i <= length(arg) & arg(i) ~= ' '
+  i=i+1;
+end
+
+arg2=arg(i+1:length(arg));
+arg=arg(1:i-1);
+if ~isempty(arg2)
+  LOG=1;
+  i=1;
+  if arg2(1) ~= '{'
+    while i <= length(arg2) & arg2(i) ~= ' '
+      i=i+1;
+    end
+    index=str2num(arg2(i+1:length(arg2)));
+    arg2=arg2(1:i-1);
+  else
+    while i <= length(arg2) & arg2(i) ~= '}'
+      i=i+1;
+    end
+    index=str2num(arg2(i+1:length(arg2)));
+    arg2=arg2(1:i);
+  end
+else
+  LOG=0;
+end
+
+new_name_h=getfield(get(gcf,'UserData'),'new_name_h');
+new_c_name_h=getfield(get(gcf,'UserData'),'new_c_name_h');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  errordlg('''Preprocess'' -figure does not exist. Terminating program...');
+  close_preprocess;
+  return;
+end
+
+switch arg
+  case 'set'
+   if LOG
+     name={arg2};
+   else
+     name=get(new_name_h,'String');
+   end
+   if ~isempty(name{1}) & ~any(isspace(name{1}))
+     if ~isvalid_var_name(name)
+       sD_stats;
+       return;
+     end
+     if ~LOG
+       index=get(getfield(get(gcf,'UserData'),'sets_h'),'Value');
+     end
+     data=get(pre_h,'UserData');
+     tmp_set.name=name{1};        
+     data.sD_set(index).name=name{1};
+     if data.sData.INDEX == index
+       data.sData.name=name{1};
+     end
+     if ~LOG
+       data.LOG{length(data.LOG)+1}='% Rename a data set.';
+       data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''rename'',''set ',...
+                                                       name{1},' ',...
+                                                       num2str(index),...
+                                                       ''');');
+     end 
+
+     set(pre_h,'UserData',data);
+     sD_names;
+     string=get(data.sD_set_h,'String');
+     string{index}=cat(2,sprintf('#%d: ',index),name{1});
+     set(data.sD_set_h,'String',string);
+     string=get(data.sD_name_h,'String');
+     string{1}=cat(2,'Name:   ',name{1});
+     if index==data.sData.INDEX
+       set(data.sD_name_h,'String',string);
+     end
+   else
+     sD_stats;
+   end
+  case 'comp'
+   if ~LOG
+     names=get(new_c_name_h,'String');
+     index=get(getfield(get(gcf,'UserData'),'sets_h'),'Value');
+   else
+     names=eval(arg2);
+   end
+   if check_cell_names(names)
+     data=get(pre_h,'UserData');
+     sData=data.sD_set(index);
+     if length(sData.comp_names)==length(names)
+       data.sD_set(index).comp_names=names;
+       if index == data.sData.INDEX
+         for i=1:length(names)
+           names{i}=cat(2,sprintf('#%d: ',i),names{i});
+         end
+         set(data.comp_names_h,'String',names);
+         set(data.sel_comp_h,'String',names);
+       end
+       if ~LOG
+         data.LOG{length(data.LOG)+1}='% Rename components.';
+         str='preprocess(''rename'',''comp {';
+         for i=1:length(names)-1
+           str=cat(2,str,'''''',names{i},''''',');
+         end
+         str=cat(2,str,'''''',names{length(names)},'''''} ',...
+                 num2str(index),''');');
+         data.LOG{length(data.LOG)+1}=str;
+       else
+         set(new_c_name_h,'String',names);
+       end
+       set(pre_h,'UserData',data);          
+     else
+       errordlg('There are less components in data.');
+       sD_stats;
+       return;
+     end
+   else
+     sD_stats;  
+   end
+end
+
+%%% Subfunction: check_cell_names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bool=check_cell_names(names)
+
+bool = 1;
+
+if isempty(names)
+  bool= 0;
+  return;
+end
+for i=1:length(names)
+  if isempty(names{i}) | isspace(names{i})
+    bool = 0;
+    return;
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: isvalid_var_name %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bool=isvalid_var_name(name)
+
+bool=1;
+
+tmp=name{1};
+if ~((tmp(1)>='a' & tmp(1)<='z') | (tmp(1)>='A' & tmp(1)<='Z'))
+  errordlg('Invalid name.');
+  bool=0;
+  return;
+end
+for j=1:length(tmp)
+  if ~((tmp(j)>='a' & tmp(j)<='z') | ...
+       (tmp(j)>='A' & tmp(j)<='Z') | ...
+       (j>1 & tmp(j) == '_') | ...
+       (tmp(j)>='0' & tmp(j) <= '9')) | tmp(j) == '.'
+    errordlg('Invalid name.');
+    bool=0;
+    return;
+  end
+  if j == length(tmp) & tmp(j) == '_'
+    errordlg('Invalid name.');
+    bool=0;
+    return;
+  end
+end 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: copy_delete %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function copy_delete(arg)
+
+i=1;
+while i <= length(arg) & arg(i) ~= ' '
+  i=i+1;
+end
+
+arg2=arg(i+1:length(arg));
+arg=arg(1:i-1);
+
+if ~isempty(arg2)
+  index=str2num(arg2);
+  LOG=1;
+else
+  LOG=0;
+end
+
+sets_h=getfield(get(gcf,'UserData'),'sets_h');
+if ~LOG
+  index=get(sets_h,'Value');
+end
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  errordlg('''Preprocess'' -figure does not exist. Terminating program.');
+  close_preprocess;
+  return;
+end
+
+switch arg
+  case 'copy'
+   data=get(pre_h,'UserData');
+   data.sD_set(length(data.sD_set)+1)=data.sD_set(index);
+   if ~LOG
+     data.LOG{length(data.LOG)+1}='% Copy a data set.';
+     data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''copy_delete'',''',...
+                                      'copy ',num2str(index),''');');
+   end
+   set(pre_h,'UserData',data);
+   sD_names;   
+   old=gcf;
+   set(0,'CurrentFigure',pre_h);
+   set_sD_stats;
+   set(0,'CurrentFigure',old);
+  case 'delete'
+   if length(get(sets_h,'String')) == 1
+     msgbox('No data left. Closing program...')
+     close_preprocess;
+     return;
+   end
+   data=get(pre_h,'UserData');
+   if ~isempty(data.undo) &  any(strcmp('index',fieldnames(data.undo)))
+     if data.undo.index > index
+       data.undo.index = data.undo.index-1;
+     elseif data.undo.index==index;
+       data.undo=[];
+     end
+   end
+   set1=data.sD_set(1:index-1);
+   set2=data.sD_set(index+1:length(data.sD_set));
+
+   if ~isempty(set1)
+     data.sD_set=[set1 set2];
+   else
+     data.sD_set=set2;
+   end
+   if ~LOG
+     data.LOG{length(data.LOG)+1}='% Delete a data set.';
+     data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''copy_delete'',''',...
+                                      'delete ',num2str(index),''');');
+   end
+   set(pre_h,'UserData',data);
+
+   set(sets_h,'Value',1);
+   sD_names;
+   sD_stats;
+   old = gcf;
+   set(0,'CurrentFigure',pre_h);
+
+   for i=1:length(data.sD_set)
+     string{i}=cat(2,sprintf('#%d: ',i),data.sD_set(i).name);
+   end
+
+   set(data.sD_set_h,'String',string);
+   data.sData=data.sD_set(get(data.sD_set_h,'Value'));
+   data.sData.MODIFIED=0;
+   data.sData.INDEX=1;
+   set(gcf,'UserData',data);
+   write_sD_stats;
+
+   sData=getfield(get(gcf,'UserData'),'sData');
+   if sData.INDEX > index
+     value=get(getfield(get(gcf,'UserData'),'sD_set_h'),'Value');
+     set(getfield(get(gcf,'UserData'),'sD_set_h'),'Value',value-1);
+     sData.INDEX = sData.INDEX -1;
+   elseif sData.INDEX == index
+     set(getfield(get(gcf,'UserData'),'sD_set_h'),'Value',1);
+   end
+ 
+   sel_sD;
+   set(0,'CurrentFigure',old);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clipping(varargin)
+
+if nargin ~= 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+        '% Starting the ''Clipping'' -window...';
+  preh_udata.LOG{length(preh_udata.LOG)+1}='preprocess(''clipping'',''foo'');';
+  set(pre_h,'UserData',preh_udata);
+end
+
+clip_h=findobj(get(0,'Children'),'Tag','Clipping');
+
+if ~isempty(clip_h)
+  figure(clip_h);
+  return;
+end
+
+h0 = figure('Color',[0.8 0.8 0.8], ...
+	'PaperPosition',[18 180 575 432], ...
+	'PaperUnits','points', ...
+	'Position',[718 389 300 249], ...
+	'Tag','Clipping');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.03 0.03614457831325301 0.4666666666666667 0.9236947791164658], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.05333333333333334 0.5983935742971887 0.42 0.3333333333333333], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Style','frame', ...
+	'Position',[0.05333333333333334 0.33 0.42 0.24], ...
+	'Tag','Frame3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Style','frame', ...
+	'Position',[0.05333333333333334 0.06 0.42 0.24],...
+	'Tag','Frame4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.5133333333333334 0.6385542168674698 0.4666666666666667 0.321285140562249], ...
+	'Style','frame', ...
+	'Tag','Frame5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.5366666666666667 0.6666666666666666 0.42 0.2650602409638554], ...
+	'Style','frame', ...
+	'Tag','Frame6');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.31 0.823293172690763 0.15 0.09638554216867469], ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.big_val_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.31 0.7148594377510039 0.15 0.09638554216867469], ...
+	'Style','edit', ...
+	'Tag','EditText2');
+
+data.small_val_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.31 0.606425702811245 0.15 0.09638554216867469], ...
+	'Style','edit', ...
+	'Tag','EditText3');
+
+data.equal_val_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.06000000000000001 0.8473895582329316 0.22 0.05622489959839357], ...
+	'String','Bigger than', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.06000000000000001 0.7389558232931727 0.24 0.04819277108433735], ...
+	'String','Smaller than', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.06000000000000001 0.610441767068273 0.22 0.07228915662650602], ...
+	'String','Equal to', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.07000000000000001 0.465863453815261 0.06333333333333334 0.07228915662650602], ...
+	'Style','radiobutton', ...
+	'Value',1,...
+	'Tag','Radiobutton1');
+
+data.and_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.07000000000000001 0.3734939759036144 0.06333333333333334 0.07228915662650602], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton2');
+
+data.or_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[0.1466666666666667 0.45 0.2333333333333333 0.07228915662650602], ...
+	'String','AND', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'String','OR', ...
+	'Position',[0.1466666666666667 0.35 0.2333333333333333 0.07228915662650602], ...
+	'Style','text', ...
+	'Tag','StaticText5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.07000000000000001 0.1967871485943775 0.06333333333333334 0.07228915662650602], ...
+	'Style','radiobutton', ...
+	'Value',1,...
+	'Tag','Radiobutton3');
+
+data.all_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.07000000000000001 0.09236947791164658 0.06333333333333334 0.07228915662650602], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton4');
+
+data.sel_vects_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1466666666666667 0.1927710843373494 0.2333333333333333 0.07228915662650602], ...
+	'String','All vectors', ...
+	'Style','text', ...
+	'Tag','StaticText6');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1466666666666667 0.09638554216867469 0.3133333333333334 0.05622489959839357], ...
+	'String','Among selected', ...
+	'Style','text', ...
+	'Tag','StaticText7');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.7866666666666667 0.823293172690763 0.1366666666666667 0.09236947791164658], ...
+	'Style','edit', ...
+	'Tag','EditText4');
+
+data.replace_val_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',6, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.5633333333333334 0.8273092369477911 0.2066666666666667 0.07630522088353413], ...
+	'String','Replace', ...
+	'Style','text', ...
+	'Tag','StaticText8');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.5700000000000001 0.6827309236947791 0.3566666666666667 0.08032128514056225], ...
+	'String','Replace', ...
+	'Tag','Pushbutton1');
+
+data.OK_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess close_c',...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.6633333333333333 0.07228915662650602 0.2833333333333333 0.09638554216867469], ...
+	'String','Close', ...
+	'Tag','Pushbutton2');
+
+
+data.state.and=1;
+data.state.all=1;
+data.state.big=[];
+data.state.small=[];
+data.state.equal=[];
+data.state.replace=[];
+
+set(data.or_button_h,'Callback','preprocess and_or_cb or');
+set(data.and_button_h,'Callback','preprocess and_or_cb and');
+set(data.and_button_h,'Value',1);
+set(data.all_button_h,'Callback','preprocess all_sel_cb all');
+set(data.sel_vects_button_h,'Callback','preprocess all_sel_cb sel');
+set(data.big_val_h,'Callback','preprocess set_state_vals big');
+set(data.small_val_h,'Callback','preprocess set_state_vals small');
+set(data.equal_val_h,'Callback','preprocess set_state_vals equal');
+set(data.replace_val_h,'Callback','preprocess set_state_vals replace');
+set(data.OK_button_h,'Callback','preprocess clip_data clip');
+set(h0,'UserData',data);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function select(varargin)
+
+if nargin ~= 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+      '% Starting the ''Select'' -window...';
+  preh_udata.LOG{length(preh_udata.LOG)+1}='preprocess(''select'',''foo'');';
+  set(pre_h,'UserData',preh_udata);
+end
+
+sel_h=findobj(get(0,'Children'),'Tag','Select');
+
+if ~isempty(sel_h)
+  figure(sel_h);
+  return;
+end
+
+h0 = figure('Color',[0.8 0.8 0.8], ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperUnits','points', ...
+	'Position',[750 431 168 365], ...
+	'Tag','Select');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.05357142857142857 0.2712328767123288 0.8333333333333333 0.6301369863013698], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.05357142857142857 0.1041095890410959 0.8333333333333333 0.1397260273972603], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+
+h1 = uicontrol('Parent',h0,...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.6547945205479452 0.75 0.2273972602739726], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.4794520547945206 0.75 0.1506849315068493], ...
+	'Style','frame', ...
+	'Tag','Frame4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.2986301369863014 0.75 0.1506849315068493], ...
+	'Style','frame', ...
+	'Tag','Frame5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.5535714285714285 0.8082191780821918 0.2678571428571429 0.06575342465753425], ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.big_val_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.5535714285714285 0.7342465753424657 0.2678571428571429 0.06575342465753425], ...
+	'Style','edit', ...
+	'Tag','EditText2');
+
+data.small_val_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.5535714285714285 0.6602739726027397 0.2678571428571429 0.06575342465753425], ...
+	'Style','edit', ...
+	'Tag','EditText3');
+
+data.equal_val_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1071 0.8247 0.3929 0.0384], ...
+	'String','Bigger than', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+
+h1 = uicontrol('Parent',h0, ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1071 0.7507 0.4286 0.0329], ...
+	'String','Smaller than', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1071 0.6630 0.3929 0.0493], ...
+	'String','Equal to', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.125 0.5643835616438356 0.1130952380952381 0.04931506849315068], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton1');
+
+data.and_button_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.125 0.5013698630136987 0.1130952380952381 0.04931506849315068], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton2');
+
+data.or_button_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2619047619047619 0.5561643835616439 0.3809523809523809 0.05205479452054795], ...
+	'String','AND', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2619047619047619 0.4986301369863014 0.3809523809523809 0.04657534246575343], ...
+	'String','OR', ...
+	'Style','text', ...
+	'Tag','StaticText5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.125 0.3808219178082192 0.1130952380952381 0.04931506849315068], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton3');
+
+data.all_button_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.125 0.3095890410958904 0.1130952380952381 0.04931506849315068], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton4');
+
+data.sel_vects_button_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2619047619047619 0.3780821917808219 0.4166666666666666 0.04931506849315068], ...
+	'String','All vectors', ...
+	'Style','text', ...
+	'Tag','StaticText6');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2619047619047619 0.3123287671232877 0.5595238095238095 0.03835616438356165], ...
+	'String','Among selected', ...
+	'Style','text', ...
+	'Tag','StaticText7');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.0952    0.1178    0.7500    0.1068], ...
+	'Style','frame', ...
+	'Tag','Frame6');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.5298    0.1342    0.2738    0.0712], ...
+	'Style','edit', ...
+	'Tag','EditText4');
+
+data.replace_val_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',8,...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1369047619047619 0.136986301369863 0.3214285714285714 0.06027397260273973], ...
+	'String','Vectors', ...
+	'Style','text', ...
+	'Tag','StaticText8');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.05357142857142857 0.01917808219178082 0.3869047619047619 0.0684931506849315], ...
+	'String','OK', ...
+	'Tag','Pushbutton1');
+
+data.OK_button_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'Callback','preprocess close_s',...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.5 0.01917808219178082 0.3869047619047619 0.0684931506849315], ...
+	'String','Close', ...
+	'Tag','Pushbutton2');
+
+
+
+data.state.and=1;
+data.state.all=1;
+data.state.big=[];
+data.state.small=[];
+data.state.equal=[];
+data.state.replace=[];
+
+set(data.or_button_h,'Callback','preprocess and_or_cb or');
+set(data.and_button_h,'Callback','preprocess and_or_cb and');
+set(data.and_button_h,'Value',1);
+set(data.all_button_h,'Callback','preprocess all_sel_cb all');
+set(data.sel_vects_button_h,'Callback','preprocess all_sel_cb sel');
+set(data.big_val_h,'Callback','preprocess set_state_vals big');
+set(data.small_val_h,'Callback','preprocess set_state_vals small');
+set(data.equal_val_h,'Callback','preprocess set_state_vals equal');
+set(data.replace_val_h,'Callback','preprocess set_state_vals replace');
+set(data.OK_button_h,'Callback','preprocess clip_data sel');
+set(h0,'UserData',data);
+
+
+
+%%% Subfunction: and_or_cb %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function and_or_cb(arg)
+
+%AND_OR_CB  A callback function. Checks that only one of the radiobox
+%           buttons 'AND' and 'OR' is pressed down.
+%
+%
+
+and_button_h=getfield(get(gcf,'UserData'),'and_button_h');
+or_button_h=getfield(get(gcf,'UserData'),'or_button_h');
+data=get(gcf,'UserData');
+
+switch arg
+  case 'or'
+   set(and_button_h,'Value',0);
+   set(or_button_h,'Value',1);
+   data.state.and=0;
+  case 'and'
+   set(or_button_h,'Value',0);
+   set(and_button_h,'Value',1);
+   data.state.and=1;
+end
+
+set(gcf,'UserData',data);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: all_sel_cb %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function all_sel_cb(arg)
+
+all_button_h=getfield(get(gcf,'UserData'),'all_button_h');
+sel_vects_button_h=getfield(get(gcf,'UserData'),'sel_vects_button_h');
+data=get(gcf,'UserData');
+
+switch arg
+ case 'all'
+  set(sel_vects_button_h,'Value',0);
+  set(all_button_h,'Value',1);
+  data.state.all=1;
+ case 'sel'
+  set(all_button_h,'Value',0);
+  set(sel_vects_button_h,'Value',1);
+  data.state.all=0;
+end
+
+set(gcf,'UserData',data);
+
+%%% Subfunction: set_state_vals %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function set_state_vals(arg)
+
+%SET_STATE_VALS  sets the values to the UserData's state-struct.
+%
+%
+
+
+data=get(gcf,'UserData');
+
+switch arg
+  case 'big'
+   big_val_h=getfield(get(gcf,'UserData'),'big_val_h');
+   val =str2num(get(big_val_h,'String'));
+   dims=size(val);
+   if dims(1) ~= 1 | dims(2) ~= 1
+     errordlg('Argument of the operation must be scalar.');
+     set(big_val_h,'String','');
+     return;
+   end 
+   if isreal(val) 
+     data.state.big=val;
+   else
+     errordlg('Limits of the operation must be real.');
+     set(big_val_h,'String','');
+     return;
+   end
+  case 'small'
+   small_val_h=getfield(get(gcf,'UserData'),'small_val_h');
+   val=str2num(get(small_val_h,'String'));
+   dims=size(val);
+   if dims(1) ~= 1 | dims(2) ~= 1
+     errordlg('Argument of the operation must be scalar.')
+     set(small_val_h,'String','');
+     return;
+   end 
+   if isreal(val)
+     data.state.small=val;
+   else
+     errordlg('Limits of the operation must be real.');
+     set(small_val_h,'String','');
+     return;
+   end 
+  case 'equal'
+   equal_val_h=getfield(get(gcf,'UserData'),'equal_val_h');
+   val = str2num(get(equal_val_h,'String'));
+   dims=size(val);
+   if dims(1) ~= 1 | dims(2) ~= 1
+     errordlg('Argument of the operation must be scalar.');
+     set(equal_val_h,'String','');
+     return;
+   end
+   if isreal(val)
+     data.state.equal=val;
+   else
+     errordlg('Limits of the operation must be real.');
+     set(equal_val_h,'String','');
+     return;
+   end
+  case 'replace'
+   replace_val_h=getfield(get(gcf,'UserData'),'replace_val_h');
+   val=str2num(get(replace_val_h,'String'));
+   dims=size(val);
+   if (dims(1) ~= 1 | dims(2) ~= 1) & ~strcmp(get(gcf,'Tag'),'Select')
+     errordlg('Argument of the operation must be scalar.');
+     set(replace_val_h,'String','');
+     return;
+   end
+   if isreal(val)
+     data.state.replace=val;
+   else
+     errordlg('Limits of the operation must be real.');
+     set(replace_val_h,'String','');
+     return;
+   end
+end
+
+set(gcf,'UserData',data);   
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: clip_data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clip_data(arg)
+
+%CLIP_DATA  A callback function. Filters the data.
+%
+%
+
+i=1;
+while i <= length(arg) & arg(i) ~= ' '
+  i=i+1;
+end
+
+arg2=arg(i+1:length(arg));
+arg=arg(1:i-1);
+
+if ~isempty(arg2)
+  LOG=1;
+  if strcmp(arg,'sel')
+    c_h=findobj(get(0,'Children'),'Tag','Select');
+  else
+    c_h=findobj(get(0,'Children'),'Tag','Clipping');
+  end
+  set(0,'CurrentFigure',c_h);
+  i=1;
+  while i <= length(arg2) & arg2(i) ~= ' '
+    i=i+1;
+  end
+  BT=str2num(arg2(1:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg2) & arg2(i) ~= ' '
+    i=i+1;
+  end
+  ST=str2num(arg2(j:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg2) & arg2(i) ~= ' '
+    i=i+1;
+  end
+  EQ=str2num(arg2(j:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg2) & arg2(i) ~= ' '
+    i=i+1;
+  end
+  AND_OR=str2num(arg2(j:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg2) & arg2(i) ~= ' '
+    i=i+1;
+  end
+  ALL_AMONG=str2num(arg2(j:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg2)
+    i=i+1;
+  end
+  VECT_REPL=str2num(arg2(j:i-1));
+else
+  LOG=0;
+end
+
+if ~LOG
+  big_val_h=getfield(get(gcf,'UserData'),'big_val_h');
+  small_val_h=getfield(get(gcf,'UserData'),'small_val_h');
+  equal_val_h=getfield(get(gcf,'UserData'),'equal_val_h');
+  replace_val_h=getfield(get(gcf,'UserData'),'replace_val_h');
+end
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  errordlg('''Preprocess'' -figure does not exist. Terminating program...');
+  pro_tools('close');
+  return;
+end
+
+comp_names_h=getfield(get(pre_h,'UserData'),'comp_names_h');
+selected=getfield(get(pre_h,'UserData'),'selected_vects');
+sData=getfield(get(pre_h,'UserData'),'sData');
+undo = sData;
+state=getfield(get(gcf,'UserData'),'state');
+
+if LOG
+  state.big=BT;
+  state.small=ST;
+  state.equal=EQ;
+  state.replace=VECT_REPL;
+  state.and=AND_OR;
+  state.all=ALL_AMONG;
+end
+
+if isempty(pre_h)
+  pro_tools('close');
+end
+
+if isempty(get(comp_names_h,'Value'))
+  clear_state_vals;
+  errordlg('There must be one component chosen for the operation.');
+  return;
+end
+
+n_th_comp=getfield(get_indices,{1});
+
+if isempty(state.big) & isempty(state.small) & isempty(state.equal) & ...
+   strcmp(arg,'clip')
+  clear_state_vals;
+  errordlg('At least one limit must be chosen for the-operation.');
+  return;
+end
+
+if ~isempty(state.replace) & strcmp(arg,'sel')
+  if ~all(state.replace == round(state.replace)) | any(state.replace < 1)
+    errordlg('Indices of vectors must be positive integers.');
+    return;
+  elseif any(state.replace > length(sData.data(:,1)))
+    errordlg('Indices of the vectors to be selected are too big.');
+    return;
+  end
+end
+
+if isempty(state.replace) & strcmp(arg,'clip')
+  clear_state_vals;
+  errordlg('Replace value must be determined for Clipping-operation.');
+  return;
+end
+
+if isempty(state.big) & isempty(state.small) & isempty(state.equal) & ...
+   isempty(state.replace)
+   clear_state_vals;
+   return;
+end
+
+bt_indices=[];
+lt_indices=[];
+equal_indices=[];
+
+
+if ~isempty(state.big)
+  if state.all
+    bt_indices=find(sData.data(:,n_th_comp) > state.big); 
+  else
+    bt_indices=selected(find(sData.data(selected,n_th_comp) > state.big));
+  end
+end
+
+if ~isempty(state.small)
+  if state.all
+    lt_indices=find(sData.data(:,n_th_comp) < state.small);
+  else
+    lt_indices=selected(find(sData.data(selected,n_th_comp) < state.small)); 
+  end
+end
+
+if ~isempty(state.equal)
+  if isnan(state.equal)
+    if state.all
+      equal_indices=find(isnan(sData.data(:,n_th_comp)));
+    else
+      equal_indices=selected(find(isnan(sData.data(selected,n_th_comp))));
+    end
+  elseif state.all
+    equal_indices=find(sData.data(:,n_th_comp)==state.equal);
+  else
+    equal_indices=selected(find(sData.data(selected,n_th_comp)==state.equal));
+  end
+end
+
+if state.and
+
+  if ~isempty(bt_indices) | ~isempty(lt_indices) | ~isempty(equal_indices)...
+     | strcmp(arg,'sel')
+
+    if isempty(bt_indices) & isempty(lt_indices) & isempty(equal_indices) &...
+       isempty(state.replace)
+      clear_state_vals;
+      return;
+    end
+    if isempty(bt_indices)
+      if ~state.all
+        bt_indices=selected;
+      else
+        bt_indices=1:getfield(size(sData.data),{1});
+      end
+    end
+    if isempty(lt_indices)
+      if ~state.all
+        lt_indices=selected;
+      else
+        lt_indices=1:getfield(size(sData.data),{1});
+      end
+    end
+    if isempty(equal_indices)
+      if ~state.all
+        equal_indices=selected;
+      else
+        equal_indices=1:getfield(size(sData.data),{1});
+      end
+    end
+    
+    indices=intersect(intersect(bt_indices,lt_indices),equal_indices);
+    if strcmp(arg,'sel')
+      if ~isempty(indices) | ~isempty(state.replace)
+        if isempty(state.replace)
+          NOTEMPTY=0;
+          if ~state.all
+            state.replace=selected;
+          else
+            state.replace=1:getfield(size(sData.data),{1});
+          end
+        else
+          NOTEMPTY=1;
+        end
+        if isempty(indices)
+          indices=selected;
+        end
+        indices=intersect(indices,state.replace);
+        if isempty(indices)
+          indices=selected;
+        end
+        data=get(pre_h,'UserData');
+        data.undo.sData=sData;
+        data.undo.selected=data.selected_vects;
+        data.selected_vects=indices;
+        if ~LOG
+         if ~NOTEMPTY
+           data.LOG{length(data.LOG)+1}='% Select vectors.';
+           data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''clip_data'',''',...
+                                                 arg,...
+                                                 ' ',num2str(state.big),...
+                                                 ' ',num2str(state.small),...
+                                                 ' ',num2str(state.equal),...
+                                                 ' ',num2str(state.and),...
+                                                 ' ',num2str(state.all),...
+                                                 ''');');
+         else
+           code=write_log_code(state.replace,...
+                               arg,...
+                               state.big,...
+                               state.small,...
+                               state.equal,...
+                               state.and,...
+                               state.all);
+           data.LOG(length(data.LOG)+1:length(data.LOG)+length(code))=code;
+         end 
+        end 
+        set(pre_h,'UserData',data);
+        old=gcf;
+        set(0,'CurrentFigure',pre_h);
+        sel_comp;
+        cplot_mimema;
+        vect_means(data.sData,data.vect_mean_h,data.selected_vects);
+        set(0,'CurrentFigure',old);
+      end
+      clear_state_vals;
+      return;
+    end
+    sData.data(indices,n_th_comp) = state.replace;
+    sData.MODIFIED=1;
+  end
+else
+  indices=union(union(bt_indices,lt_indices),equal_indices);
+  if ~isempty(indices) | strcmp(arg,'sel')
+    if strcmp(arg,'sel')
+      if ~isempty(indices) | ~isempty(state.replace')
+        data=get(pre_h,'UserData');
+        data.undo.sData=sData;
+        data.undo.selected=data.selected_vects;
+        data.selected_vects=union(indices,state.replace);
+        if ~LOG
+         if isempty(state.replace);
+           data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''clip_data'',''',...
+                                                 arg,...
+                                                 ' ',num2str(state.big),...
+                                                 ' ',num2str(state.small),...
+                                                 ' ',num2str(state.equal),...
+                                                 ' ',num2str(state.and),...
+                                                 ' ',num2str(state.all),...
+                                                 ''');');
+         else
+           code=write_log_code(state.replace,...
+                               arg,...
+                               state.big,...
+                               state.small,...
+                               state.equal,...
+                               state.and,...
+                               state.all);
+           data.LOG(length(data.LOG)+1:length(data.LOG)+length(code))=code;
+         end
+        end 
+        set(pre_h,'UserData',data);
+        old=gcf;
+        set(0,'CurrentFigure',pre_h);
+        sel_comp;
+	vect_means(data.sData,data.vect_mean_h,data.selected_vects);
+        cplot_mimema;
+        set(0,'CurrentFigure',old);
+      end
+      clear_state_vals;
+      return;
+    end
+    sData.data(indices,n_th_comp)=state.replace;
+    sData.MODIFIED=1;
+  end
+end
+
+if sData.MODIFIED
+  data=get(pre_h,'UserData');
+  data.sData=sData;
+  data.undo.sData=undo;
+  if ~LOG
+    if strcmp(arg,'sel')
+      data.LOG{length(data.LOG)+1}='% Select vectors';
+    else
+      data.LOG{length(data.LOG)+1}='% Clip values.';
+    end
+    if strcmp(arg,'clip') | isempty(state.replace)
+     data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''clip_data'',''',arg,...
+                                                 ' ',num2str(state.big),...
+                                                 ' ',num2str(state.small),...
+                                                 ' ',num2str(state.equal),...
+                                                 ' ',num2str(state.and),...
+                                                 ' ',num2str(state.all),...
+                                                 ' ',num2str(state.replace),...
+                                                 ''');');
+    else
+      code=write_log_code(state.replace,...
+                          arg,...
+                          state.big,...
+                          state.small,...
+                          state.equal,...
+                          state.and,...
+                          state.all);
+      data.LOG(length(data.LOG)+1:length(data.LOG)+length(code))=code;
+    end
+  end 
+  set(pre_h,'UserData',data);
+  old=gcf;
+  set(0,'CurrentFigure',pre_h)
+
+  vector_h=getfield(get(gcf,'UserData'),'vector_h');
+  vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+  set(gcf,'CurrentAxes',vector_h);
+  vect_means(sData,vect_mean_h,selected);
+  cplot_mimema;
+  sel_comp;
+
+  set(0,'CurrentFigure',old);
+end
+
+clear_state_vals;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: clear_state_vals %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clear_state_vals
+
+%CLEAR_STATE_VALS  Sets the fields of the UserData's state-struct empty.
+%
+%
+
+
+data=get(gcf,'UserData');
+set(data.big_val_h,'String','');
+set(data.small_val_h,'String','');
+set(data.equal_val_h,'String','');
+set(data.replace_val_h,'String','');
+data.state.big=[];
+data.state.small=[];
+data.state.equal=[];
+data.state.replace=[];
+set(gcf,'UserData',data);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function delay(varargin)
+
+delay_h=findobj(get(0,'Children'),'Tag','Delay');
+
+if nargin ~= 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+      '% Starting the ''Delay'' -window...';
+  preh_udata.LOG{length(preh_udata.LOG)+1}='preprocess(''delay'',''foo'');';
+  set(pre_h,'UserData',preh_udata);
+end
+
+if ~isempty(delay_h)
+  figure(delay_h);
+  return;
+end
+
+h0 = figure('Color',[0.8 0.8 0.8], ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperUnits','points', ...
+	'Position',[759 664 162 215], ...
+	'Tag','Delay');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.05555555555555555 0.2046511627906977 0.8950617283950617 0.7441860465116279], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.08641975308641975 0.6976744186046512 0.8333333333333333 0.2232558139534884], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.08641975308641975 0.227906976744186 0.8333333333333333 0.4418604651162791], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','preprocess delay_data',...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.0556 0.0326 0.4012 0.1163], ...
+	'String','OK', ...
+	'Tag','Pushbutton1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','preprocess close_d',...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.5494 0.0326 0.4012 0.1163], ...
+	'String','Close', ...
+	'Tag','Pushbutton2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.4876543209876543 0.7534883720930232 0.3518518518518519 0.1255813953488372], ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.delay_val_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1173 0.7860 0.3086 0.0651], ...
+	'String','Delay', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','preprocess clip_exp_cb c_this',...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.1173 0.5349 0.1173 0.0837], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton1');
+
+data.c_this_button_h=h1;
+data.mode='c_this';
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess clip_exp_cb c_all',...
+	'ListboxTop',0, ...
+	'Position',[0.1173 0.4047 0.1173 0.0837], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton2');
+
+data.c_all_button_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess clip_exp_cb e_all',...
+	'ListboxTop',0, ...
+	'Position',[0.1173    0.2651    0.1173    0.0837], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton3');
+
+data.e_all_button_h=h1;
+
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.26 0.5534883720930233 0.4135802469135802 0.06511627906976744], ...
+	'String','Clip this', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.26 0.413953488372093 0.3765432098765432 0.06511627906976744], ...
+	'String','Clip all', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.26 0.2744186046511628 0.4197530864197531 0.06511627906976744], ...
+	'String','Expand all', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+
+
+set(gcf,'UserData',data);
+
+%%% Subfunction clip_exp_cb %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clip_exp_cb(arg)
+
+c_this_button_h=getfield(get(gcf,'UserData'),'c_this_button_h');
+c_all_button_h=getfield(get(gcf,'UserData'),'c_all_button_h');
+e_all_button_h=getfield(get(gcf,'UserData'),'e_all_button_h');
+data=get(gcf,'UserData');
+
+
+switch arg    
+  case 'c_this'
+   set(c_all_button_h,'Value',0);
+   set(e_all_button_h,'Value',0);
+   set(c_this_button_h,'Value',1);
+   data.mode='c_this';
+  case 'c_all'
+   set(c_this_button_h,'Value',0);
+   set(e_all_button_h,'Value',0);
+   set(c_all_button_h,'Value',1);
+   data.mode='c_all';
+  case 'e_all'
+   set(c_this_button_h,'Value',0);
+   set(c_all_button_h,'Value',0);
+   set(e_all_button_h,'Value',1);
+   data.mode='e_all';
+end
+
+set(gcf,'UserData',data);
+
+%%% Subfunction: delay_data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function delay_data(varargin)
+
+if nargin == 1
+  del_h=findobj(get(0,'Children'),'Tag','Delay');
+  set(0,'CurrentFigure',del_h);
+  LOG=1;
+  arg=varargin{1};
+  i=1;
+  while i <= length(arg) & arg(i) ~= ' ' 
+    i=i+1;
+  end
+  delay=str2num(arg(1:i-1));
+  no=str2num(arg(i+1:length(arg)));
+else
+  LOG=0;
+end
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+q='Delay operation is not evaluated.';
+t='Warning';
+if isempty(pre_h)
+  errordlg('''Preprocess'' -figure does not exist. Terminating program...');
+  pro_tools('close');
+  return;
+end
+
+sData=getfield(get(pre_h,'UserData'),'sData');
+undo = sData;
+data=get(gcf,'UserData');
+if ~LOG
+  delay=str2num(get(data.delay_val_h,'String'));
+  if isempty(delay)
+    errordlg('Value of ''Delay'' must be defined.');
+    return
+  end
+  set(data.delay_val_h,'String','');
+  if round(delay) ~= delay
+    errordlg('Value of ''Delay'' must be integer.');
+    return;
+  end
+end
+comp_names_h=getfield(get(pre_h,'UserData'),'comp_names_h');
+if isempty(get(comp_names_h,'Value'))
+  errordlg('There are not components chosen.');
+  return;
+end
+n_th_comp=getfield(get_indices,{1});
+len=length(sData.data(:,1));
+
+if LOG
+  switch no
+    case 1
+     data.mode='c_this';
+     preprocess('clip_exp_cb','c_this');
+    case 2
+     data.mode='c_all';
+     preprocess('clip_exp_cb','c_all');
+    case 3
+     data.mode='e_all';
+     preprocess('clip_exp_cb','e_all');
+  end
+end
+
+switch data.mode
+  case 'c_this'
+   MODE='1';
+   if delay > 0
+     sData.data(delay+1:len,n_th_comp)=sData.data(1:len-delay);
+     if delay >= len
+       errordlg(q,t);
+       return;
+     else
+       sData.data(1:delay,n_th_comp)=NaN;
+     end
+   elseif delay < 0
+     sData.data(1:len+delay,n_th_comp)=...
+              sData.data(abs(delay)+1:len,n_th_comp);    
+     if abs(delay) >= len
+       errordlg(q,t);
+       return;
+     else
+       sData.data(len+delay+1:len,n_th_comp)=NaN;
+     end
+   end
+   if delay ~= 0
+     data=get(pre_h,'UserData');
+     sData.MODIFIED=1;
+     sData.comp_norm(n_th_comp)=[];
+     data.sData=sData;
+     data.undo.sData=undo;
+     set(pre_h,'UserData',data);
+     old = gcf;
+     set(0,'CurrentFigure',pre_h);
+     sel_comp;
+     cplot_mimema;
+     set(0,'CurrentFigure',old);
+   end
+  case 'c_all'
+   MODE='2';
+   if delay > 0
+     sData.data(delay+1:len,n_th_comp)=sData.data(1:len-delay,n_th_comp);
+     if delay >= len
+       errordlg(q,t);
+       return;
+     else
+       sData.data=sData.data(delay+1:len,:);
+     end
+   elseif delay < 0
+    sData.data(1:len+delay,n_th_comp)=sData.data(abs(delay)+1:len,n_th_comp);
+    if abs(delay) >= len
+      errordlg(q,t);
+      return;
+    else
+      sData.data=sData.data(1:len+delay,:);
+    end
+   end
+   if delay ~= 0
+     data=get(pre_h,'UserData');
+     sData.MODIFIED=1;
+     sData.comp_norm(:,:)={[]};
+     data.sData=sData;
+     data.undo.sData=undo;
+     data.undo.selected=data.selected_vects;
+     if delay > 0
+       data.selected_vects=...
+                        data.selected_vects(find(data.selected_vects>delay));
+       data.selected_vects=data.selected_vects-delay;
+     elseif nargin == 1
+       data.selected_vects=...
+         data.selected_vects(find(data.selected_vects<=len-abs(delay)));
+     end
+     set(pre_h,'UserData',data);
+     old=gcf;
+     set(0,'CurrentFigure',pre_h);
+     vects=zeros(1,length(sData.data(:,1)));
+     vects(data.selected_vects)=1;
+     write_sD_stats;
+     draw_vectors(vects,data.vector_h);
+     sel_comp;
+     cplot_mimema;
+     set(0,'CurrentFigure',old);
+   end
+  case 'e_all'
+   MODE='3';
+   if delay > 0
+     sData.data(len+1:len+delay,:)=NaN;
+     sData.data(1+delay:delay+len,n_th_comp)=sData.data(1:len,n_th_comp);
+     sData.data(1:delay,n_th_comp)=NaN;
+   elseif delay < 0
+     delay=abs(delay);
+     sData.data(delay+1:len+delay,:)=sData.data;
+     sData.data(1:delay,:)=NaN;
+     sData.data(1:len,n_th_comp)=sData.data(delay+1:len+delay,n_th_comp);
+     sData.data(len+1:len+delay,n_th_comp)=NaN;
+   end 
+   if delay ~= 0
+     data=get(pre_h,'UserData');
+     sData.MODIFIED=1;
+     sData.comp_norm(:,:)={[]};
+     data.sData=sData;
+     data.undo.sData=undo;
+     data.undo.selected=data.selected_vects;
+     set(pre_h,'UserData',data);
+     old=gcf;
+     set(0,'CurrentFigure',pre_h);
+     write_sD_stats;
+     pro_tools('selall');
+     set(0,'CurrentFigure',old);
+   end
+end
+ 
+if ~LOG
+  data=get(pre_h,'UserData');
+  data.LOG{length(data.LOG)+1}='% Delay a component.';
+  data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''delay_data'',''',...
+                                      num2str(delay),' ',MODE,''');');
+  set(pre_h,'UserData',data);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function window(varargin)
+
+if nargin ~= 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=...
+    '% Starting the ''Windowed'' -window...';
+  preh_udata.LOG{length(preh_udata.LOG)+1}='preprocess(''window'',''foo'');';
+  set(pre_h,'UserData',preh_udata);
+end
+
+win_h=findobj(get(0,'Children'),'Tag','Window');
+
+if ~isempty(win_h)
+  figure(win_h);
+  return;
+end
+
+h0 = figure('Color',[0.8 0.8 0.8], ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperUnits','points', ...
+	'Position',[513 703 288 219], ...
+	'Tag','Window');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.03125 0.1552511415525114 0.9375 0.7990867579908676], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.04861111111111111 0.7214611872146118 0.9027777777777777 0.2009132420091324], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.04861111111111111 0.1780821917808219 0.2777777777777778 0.5251141552511416], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.3611111111111111 0.1780821917808219 0.2777777777777778 0.5251141552511416], ...
+	'Style','frame', ...
+	'Tag','Frame4');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'ListboxTop',0, ...
+	'Position',[0.6736111111111111 0.1780821917808219 0.2777777777777778 0.5251141552511416], ...
+	'Style','frame', ...
+	'Tag','Frame5');
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess eval_windowed',...	
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.03125 0.0319634703196347 0.2256944444444444 0.091324200913242], ...
+	'String','OK', ...
+	'Tag','Pushbutton1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Callback','preprocess close_w', ...
+	'Units','normalized', ...
+	'FontWeight','demi', ...
+	'ListboxTop',0, ...
+	'Position',[0.7430555555555555 0.0319634703196347 0.2256944444444444 0.091324200913242], ...
+	'String','Close', ...
+	'Tag','Pushbutton2');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'ListboxTop',0, ...
+	'Position',[0.7083333333333333 0.7625570776255708 0.2083333333333333 0.1232876712328767], ...
+	'Style','edit', ...
+	'Tag','EditText1');
+
+data.win_len_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.07638888888888888 0.8036529680365296 0.3784722222222222 0.0547945205479452], ...
+	'String','Window length', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb centered',...
+	'ListboxTop',0, ...
+	'Position',[0.06597222222222222 0.5616438356164384 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton1');
+
+data.centered_h=h1;
+data.position='center';
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb previous',...
+	'ListboxTop',0, ...
+	'Position',[0.06597222222222222 0.4018264840182648 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton2');
+
+data.previous_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb next',...
+	'ListboxTop',0, ...
+	'Position',[0.06597222222222222 0.2465753424657534 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton3');
+
+data.next_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	 'Callback','preprocess window_cb mean',...
+	'ListboxTop',0, ...
+	'Position',[0.3784722222222222 0.5799086757990868 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton4');
+
+data.mean_h=h1;
+data.mode='mean';
+
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb median',...
+	'ListboxTop',0, ...
+	'Position',[0.3784722222222222 0.4611872146118721 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton5');
+
+
+data.median_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb max',...
+	'ListboxTop',0, ...
+	'Position',[0.3784722222222222 0.3515981735159817 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton6');
+
+data.max_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','preprocess window_cb min',...
+	'BackgroundColor',[0.8 0.8 0.8], ...	
+	'ListboxTop',0, ...
+	'Position',[0.3784722222222222 0.2374429223744292 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton7');
+
+data.min_h = h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb clip',...
+	'ListboxTop',0, ...
+	'Position',[0.6909722222222222 0.5525114155251141 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton8');
+
+data.clip_h=h1;
+data.eval_mode='clip';
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Callback','preprocess window_cb expand',...
+	'ListboxTop',0, ...
+	'Position',[0.6909722222222222 0.2922374429223744 0.06597222222222222 0.0821917808219178], ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton9');
+
+data.expand_h=h1;
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.132 0.5799 0.19 0.0548], ...
+	'String','Centered', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.132 0.4247 0.1667 0.0548], ...
+	'String','Previous', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.132 0.2648 0.1632 0.0548], ...
+	'String','Next', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+h1 = uicontrol('Parent',h0, ...,
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.445 0.6027397260273972 0.19 0.0547945205479452], ...
+	'String','Mean', ...
+	'Style','text', ...
+	'Tag','StaticText5');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.445 0.4795 0.1806 0.0548], ...
+	'String','Median', ...
+	'Style','text', ...
+	'Tag','StaticText6');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.445 0.3699 0.1667 0.0548], ...
+	'String','Max', ...
+	'Style','text', ...
+	'Tag','StaticText7');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.445 0.2557077625570776 0.1597222222222222 0.0547945205479452], ...
+	'String','Min', ...
+	'Style','text', ...
+	'Tag','StaticText8');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.7535 0.5753 0.1354 0.054], ...
+	'String','Clip', ...
+	'Style','text', ...
+	'Tag','StaticText9');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'FontSize',8,...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.7534722222222222 0.3150684931506849 0.1527777777777778 0.0547945205479452], ...
+	'String','Expand', ...
+	'Style','text', ...
+	'Tag','StaticText10');
+
+
+
+set(gcf,'UserData',data);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function window_cb(arg)
+
+data=get(gcf,'UserData');
+
+if any(strcmp(arg,[{'centered'},{'previous'},{'next'}]))
+  switch arg
+    case 'centered'
+     data.position='center';
+     set(data.previous_h,'Value',0);
+     set(data.next_h,'Value',0);
+     set(data.centered_h,'Value',1);
+    case 'previous'
+     data.position='previous';
+     set(data.centered_h,'Value',0);
+     set(data.next_h,'Value',0);
+     set(data.previous_h,'Value',1);
+    case 'next'
+     data.position='next';
+     set(data.centered_h,'Value',0);
+     set(data.previous_h,'Value',0);
+     set(data.next_h,'Value',1);
+  end
+elseif any(strcmp(arg,[{'mean'},{'median'},{'min'},{'max'}]))
+  switch arg
+    case 'mean'
+     data.mode='mean';
+     set(data.median_h,'Value',0);
+     set(data.min_h,'Value',0);
+     set(data.max_h,'Value',0);
+     set(data.mean_h,'Value',1);
+    case 'median'
+     data.mode='median';
+     set(data.mean_h,'Value',0);
+     set(data.max_h,'Value',0);
+     set(data.min_h,'Value',0);
+     set(data.median_h,'Value',1);
+    case 'max'
+     data.mode='max';
+     set(data.mean_h,'Value',0);
+     set(data.median_h,'Value',0);
+     set(data.min_h,'Value',0);
+     set(data.max_h,'Value',1);
+    case 'min'
+     data.mode='min';
+     set(data.mean_h,'Value',0);
+     set(data.median_h,'Value',0);
+     set(data.max_h,'Value',0);
+     set(data.min_h,'Value',1);
+  end
+elseif any(strcmp(arg,[{'clip','expand'}]))
+  switch arg
+    case 'clip'
+     data.eval_mode='clip';
+     set(data.expand_h,'Value',0);
+     set(data.clip_h,'Value',1);
+    case 'expand'
+     data.eval_mode='expand';
+     set(data.clip_h,'Value',0);
+     set(data.expand_h,'Value',1); 
+  end
+end
+
+set(gcf,'UserData',data);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function eval_windowed(varargin)
+
+if nargin == 1
+  LOG=1;
+  i=1;
+  arg=varargin{1};
+  while i <= length(arg) & arg(i) ~= ' '
+    i=i+1;
+  end
+  value=str2num(arg(1:i-1));
+  i=i+1;
+  j=i;
+  while i <= length(arg) & arg(i) ~= ' '
+    i=i+1;
+  end
+  position=arg(j:i-1);
+  i=i+1;
+  j=i;
+  while i <= length(arg) & arg(i) ~= ' '
+    i=i+1;
+  end
+  mode=arg(j:i-1);
+  i=i+1;
+  j=i;
+  while i <= length(arg) & arg(i) ~= ' '
+    i=i+1;
+  end
+  eval_mode=arg(j:i-1);
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+if LOG
+  data.position=position;
+  data.eval_mode=eval_mode;
+  data.mode=mode;
+end
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  errordlg('''Preprocess''-window does not exist. Terminating program...');
+  pro_tools('close');
+  return;
+end
+
+comp_names_h=getfield(get(pre_h,'UserData'),'comp_names_h');
+sData=getfield(get(pre_h,'UserData'),'sData');
+undo=sData;
+
+if isempty(get(comp_names_h,'Value'))
+ errordlg('There are not components chosen.');
+ return;
+end
+
+if ~LOG
+  if isempty(get(data.win_len_h,'String'))
+    errordlg('Window length must be defined');
+    return;
+  end
+
+  value=str2num(get(data.win_len_h,'String'));
+end
+
+set(data.win_len_h,'String','');
+
+if ~LOG
+  if isempty(value) | value < 0 | value ~= round(value)
+    errordlg('Window length must be positive integer.');
+    return;
+  end
+
+  if value > length(sData.data(:,1))
+    errordlg('Length of window is too big.');
+    return;
+  end
+end
+
+index=getfield(get_indices,{1});
+
+sData=eval_operation(sData,value,data.mode,data.eval_mode,data.position,index);
+sData.comp_norm(index)={[]};
+u_data=get(pre_h,'UserData');
+u_data.sData=sData;
+u_data.undo.sData=undo;
+u_data.undo.selected=u_data.selected_vects;
+
+if ~LOG
+  u_data.LOG{length(u_data.LOG)+1}=...
+    '% Evaluating the wanted ''windowed'' -operation.';
+  u_data.LOG{length(u_data.LOG)+1}=cat(2,'preprocess(''eval_windowed'',',...
+                                        '''',num2str(value),...
+                                       ' ',data.position,' ',data.mode,...
+                                       ' ',data.eval_mode,''');');
+end
+ 
+set(pre_h,'UserData',u_data);
+old=gcf;
+set(0,'CurrentFigure',pre_h);
+
+if strcmp(data.eval_mode,'expand');
+  write_sD_stats;
+  pro_tools('selall');
+else
+  sel_comp;
+  cplot_mimema;
+end
+
+set(0,'CurrentFigure',old);
+
+
+
+%%% Subfunction: eval_operation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+function sData=eval_operation(sData,winlen,mode,evalmode,position,n)
+
+
+len=length(sData.data(:,1));
+dim=length(sData.data(1,:));
+
+switch(position)
+  case 'center'
+   prev=round(winlen/2)-1;
+   next=winlen-round(winlen/2);
+  case 'previous'
+   prev=winlen-1;
+   next=0;
+  case 'next'
+   prev=0;
+   next=winlen-1;
+end
+
+switch(evalmode)
+  case 'clip'
+   for center=1:len
+     win=center-prev:center-prev+winlen-1;
+     win=win(find(win > 0 & win <= len));
+     str=cat(2,mode,'(sData.data(win(find(~isnan(sData.data(win,n)))),n))');
+     tmp(center)=eval(str);
+   end
+   sData.data(:,n)=tmp;
+  case 'expand'   
+   for i=1:len+winlen-1  
+     win=i-(winlen-1):i;
+     win=win(find(win > 0 & win <= len));
+     str=cat(2,mode,'(sData.data(win(find(~isnan(sData.data(win,n)))),n))');
+     tmp(i)=eval(str);
+   end  
+  sData.data=cat(1,repmat(NaN,next,dim),sData.data,repmat(NaN,prev,dim));
+  sData.data(:,n)=tmp;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function pro_tools(arg)
+
+switch arg
+  case 'close'
+   close_preprocess;
+  case 'c_stat'
+   write_c_stats;
+  case 'plot_hist'
+   plot_hist;
+  case 'plot'
+   plot_button;
+  case 'plxy'
+   plxy_button;
+  case 'bplo'
+   bplo_button;
+  case 'hist'
+   hist_button;
+end
+
+
+%%% Subfunction close_preprocess %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function close_preprocess
+
+ 
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+man_h=findobj(get(0,'Children'),'Tag','Management');
+clip_h=findobj(get(0,'Children'),'Tag','Clipping');
+plot_h=findobj(get(0,'Children'),'Tag','PlotWin');
+delay_h=findobj(get(0,'Children'),'Tag','Delay');
+window_h=findobj(get(0,'Children'),'Tag','Window');
+sel_h=findobj(get(0,'Children'),'Tag','Select');
+
+if ~isempty(man_h)
+  close(man_h);
+end
+if ~isempty(clip_h)
+  close(clip_h);
+end
+if ~isempty(plot_h)
+  close(plot_h);
+end
+if ~isempty(delay_h)
+  close(delay_h);
+end
+if ~isempty(window_h)
+  close(window_h);
+end
+if ~isempty(sel_h)
+  close(sel_h);
+end
+if ~isempty(pre_h)
+  close(pre_h);
+end
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: undo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function undo(varargin)
+
+if nargin == 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  set(0,'CurrentFigure',pre_h);
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+if ~isempty(data.undo)
+  if any(strcmp('selected',fieldnames(data.undo)))
+    data.selected_vects=data.undo.selected;
+  end
+  if ~any(strcmp('index',fieldnames(data.undo)))
+    data.sData=data.undo.sData;
+    data.undo=[];
+    if ~LOG
+      data.LOG{length(data.LOG)+1}='% Undo the most recent operation.';
+      data.LOG{length(data.LOG)+1}='preprocess(''undo'',''foo'');';
+    end
+    set(gcf,'UserData',data);
+    set_compnames(data.sData,data.comp_names_h);
+    write_sD_stats;
+    vect_means(data.sData,data.vect_mean_h,data.selected_vects);
+    sel_comp;
+    cplot_mimema;
+    return;
+  end
+  
+  % 'undo.sData' does not exist in sD_set - array
+
+  index=data.undo.index; 
+  data.undo.sData=rmfield(data.undo.sData,[{'INDEX'};{'MODIFIED'}]);
+  if index<=length(data.sD_set)
+    rest=data.sD_set(index:length(data.sD_set));        
+  else
+    rest=[];
+  end
+  data.sD_set=cat(2,data.sD_set(1:index-1),data.undo.sData,rest);
+  data.undo=[];
+  if ~LOG
+    data.LOG{length(data.LOG)+1}='% Undo the most recent operation.';
+    data.LOG{length(data.LOG)+1}='preprocess(''undo'',''foo'');';
+  end
+  set(gcf,'UserData',data);
+  set(getfield(get(gcf,'UserData'),'sD_set_h'),'Value',index);
+  set_sD_stats;
+  sel_sD;
+else
+  msgbox('Can''t do...');
+end
+
+%%% Subfunction: write_c_stats %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function write_c_stats(varargin)
+
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+comp_names_h=getfield(get(pre_h,'UserData'),'comp_names_h');
+sel_comp_h=getfield(get(pre_h,'UserData'),'sel_comp_h');
+sel_chist_h=getfield(get(pre_h,'UserData'),'sel_chist_h');
+
+if nargin==1
+  val1=varargin(1);
+else
+  val1=get(sel_comp_h,'String');
+end
+   
+if ~isempty(val1) & iscell(val1)
+  selected_vects=getfield(get(pre_h,'UserData'),'selected_vects');
+  sData=getfield(get(pre_h,'UserData'),'sData');
+  sel_cdata_h=getfield(get(pre_h,'UserData'),'sel_cdata_h');
+  name=getfield(get(sel_comp_h,'String'),{get(sel_comp_h,'Value')});
+  name=name{1};
+  i=2;
+
+  while ~isempty(str2num(name(i)))
+   value(i-1)=name(i);
+   i=i+1;
+  end
+
+  value=str2num(value);
+
+
+  data=sData.data(selected_vects,value);
+
+  string{1} = cat(2,'Min: ',sprintf('%-10.3g',min(data)));
+  string{2} = cat(2,'Mean: ',sprintf('%-10.3g',mean(data(find(~isnan(data))))));
+  string{3} = cat(2,'Max: ',sprintf('%-10.3g',max(data)));
+  string{4} = cat(2,'Std: ',sprintf('%-10.3g',std(data(find(~isnan(data)))))); 
+  string{5} = cat(2,'Number of NaNs: ',sprintf('%-10.3g',sum(isnan(data))));
+  string{6} = cat(2,'NaN (%):',...
+                    sprintf('%-10.3g',100*sum(isnan(data))/length(data)));
+  string{7} = cat(2,'Number of values: ',sprintf('%-10.3g',...
+                    length(find(~isnan(unique(data))))));
+  set(sel_cdata_h,'String',string);
+  set(sel_cdata_h,'HorizontalAlignment','left');  
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction plot_hist %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function plot_hist
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+sel_chist_h=getfield(get(pre_h,'UserData'),'sel_chist_h');
+sData=getfield(get(pre_h,'UserData'),'sData');
+selected=getfield(get(pre_h,'UserData'),'selected_vects');
+
+value=get(getfield(get(pre_h,'UserData'),'sel_comp_h'),'Value');
+subplot(sel_chist_h);
+hold off;
+cla;
+if all(isnan(sData.data(:,value)));
+  return;
+end
+hold on;
+lim1=min(sData.data(:,value));
+lim2=max(sData.data(:,value));
+if lim2 - lim1 >= eps
+  x=lim1:(lim2-lim1)/(30-1):lim2;
+  set(sel_chist_h,'XLim',[lim1 lim2]);
+elseif lim1 ~= 0
+  x=(lim1)/2:lim1/(30-1):lim1+(lim1)/2;
+  set(sel_chist_h,'Xlim',[lim1-abs(lim1/2) lim1+abs(lim1/2)]);
+else
+  x=-1:2/(30-1):1;
+  set(sel_chist_h,'XLim',[-1 1]);
+end
+
+hist(sData.data(selected,value),x);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: select_all %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function select_all(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+data.selected_vects=(1:length(data.sData.data(:,1)));
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Select all vectors.';
+  data.LOG{length(data.LOG)+1}='selall(''foo'');';
+end
+set(gcf,'UserData',data);
+tmp=zeros(1,length(data.sData.data(:,1)));
+tmp(data.selected_vects)=1;
+draw_vectors(tmp,data.vector_h);
+cplot_mimema;
+vect_means(data.sData,data.vect_mean_h,data.selected_vects);
+sel_comp;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: plot_button %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function plot_button
+
+%PLOT_BUTTON  A callback function. Plots all the components and marks
+%             the chosen components.
+%
+%
+
+sData=getfield(get(gcf,'UserData'),'sData');
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+
+indices=get_indices;
+if isempty(indices)
+  return;
+end
+h=findobj(get(0,'Children'),'Tag','PlotWin');
+if isempty(h)
+  h= figure;
+  set(h,'Tag','PlotWin');
+end
+
+names=sData.comp_names(indices);  
+data=sData.data(:,indices);
+
+set(0,'CurrentFigure',h);
+hold off;
+clf;
+t=0:1/(getfield(size(data),{1})-1):1;
+tmp=setdiff(1:length(data(:,1)),selected);
+for i=1:length(names)
+  subplot(length(names),1,i);
+  hold on;
+  if max(data(:,i))- min(data(:,i)) <= eps
+    set(gca,'YLim',[max(data(:,i))-1 max(data(:,i))+1]);
+  end
+  plot(t,data(:,i));
+  if ~isempty(tmp);
+    data(tmp,i)=NaN;
+  end
+  plot(t,data(:,i),'red');
+  ylabel(names{i});
+  set(gca,'XTick',[]);
+end
+set(gcf,'Name','Plotted Data Components');    
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: plxy_button %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function plxy_button
+
+%PLXY_BUTTON  A callback function. XY-plots the first and the second
+%             components chosen.
+%
+%
+
+
+sData=getfield(get(gcf,'UserData'),'sData');
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+
+inds = get_indices;
+if length(inds) < 2
+  errordlg('There must be two components chosen for XY-plot.');
+  return;
+end
+
+inds=inds(1:2);
+names=getfield(sData,'comp_names',{inds});
+
+h=findobj(get(0,'Children'),'Tag','PlotWin');
+
+if isempty(h)
+  h= figure;
+  set(h,'Tag','PlotWin');
+end
+
+set(0,'CurrentFigure',h);
+clf;
+axes;
+if max(sData.data(:,inds(1))) - min(sData.data(:,inds(1))) <= eps
+  set(gca,'XLim',[max(sData.data(:,inds(1)))-1 max(sData.data(:,inds(1)))+1]);
+end
+if max(sData.data(:,inds(2))) - min(sData.data(:,inds(2))) <= eps
+  set(gca,'YLim',[max(sData.data(:,inds(2)))-1 max(sData.data(:,inds(2)))+1]);
+end
+hold on;
+plot(sData.data(:,inds(1)),sData.data(:,inds(2)),'o');
+x=sData.data(selected,inds(1));
+y=sData.data(selected,inds(2));
+
+plot(x,y,'ored','MarkerSize',4);
+xlabel(names(1));
+ylabel(names(2));
+set(h,'Name','Plotted Data Components');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Sub_function: bplo_button %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bplo_button
+
+%BPLO_BUTTON  A callback function. Box-plots the first component chosen.
+
+
+sData=getfield(get(gcf,'UserData'),'sData');
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+
+if length(selected) == 1
+  errordlg('There are too few vectors chosen for box-plotting.');
+else
+  indices=get_indices;
+  if isempty(indices)
+    return;
+  end
+  for i=1:length(indices)
+    if length(unique(sData.data(selected,indices(i))))==1
+      errordlg('All the values are the same. Operation can''t be evaluated.');
+      return;
+    end
+  end 
+  names=getfield(sData,'comp_names',{indices});
+  h= findobj(get(0,'Children'),'Tag','PlotWin');
+  if isempty(h)
+    h= figure;
+    set(h,'Tag','PlotWin');
+  end
+
+  data=sData.data(selected,indices);
+
+  set(0,'CurrentFigure',h);
+  hold off;
+  clf;
+  hold on;
+  for i=1:getfield(size(data),{2})
+    subplot(getfield(size(data),{2}),1,i);
+    if ~all(isnan(data(:,i)))
+      boxplot(data(:,i));
+    end
+    name=names{i};
+    tmp=get(get(gca,'YLabel'),'String');
+    ylabel(cat(2,sprintf('[%s]    ',name),tmp));
+  end
+  set(h,'Name','Box-plot');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: hist_button %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function hist_button
+
+no_of_bins_h=getfield(get(gcf,'UserData'),'no_of_bins_h');
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+sData=getfield(get(gcf,'UserData'),'sData');
+n=str2num(get(no_of_bins_h,'String'));
+s1='Invalid number of bins.';
+s2=sprintf('\nSet new value to the box under the ''Histogram''-button.');
+
+if isempty(n)
+  errordlg(cat(2,s1,s2));
+else
+  indices=get_indices;
+  if isempty(indices)
+    return;
+  end
+  n=round(n);
+  if n < 1
+    errordlg('Number of bins must be positive integer.');
+  else
+    h= findobj(get(0,'Children'),'Tag','PlotWin');
+    if isempty(h)
+      h= figure;
+      set(h,'Tag','PlotWin');
+    end
+
+    set(0,'CurrentFigure',h);
+    hold off;
+    clf;
+    data=sData.data(selected,indices);
+    names=sData.comp_names(indices);
+    for i=1:length(names)
+      subplot(length(names),1,i);
+      hold on;
+      lim1=min(sData.data(:,indices(i)));
+      lim2=max(sData.data(:,indices(i)));
+      if n > 1
+        if lim2 - lim1 >= eps
+          x=lim1:(lim2-lim1)/(n-1):lim2;
+          set(gca,'XLim',[lim1 lim2]);
+        elseif lim1 ~= 0
+          x=lim1/2:lim1/(n-1):lim1/2+lim1;
+          if ~all(isnan([lim1 lim2]))
+            set(gca,'XLim',[lim1-abs(lim1/2) lim1+abs(lim1/2)]);
+          end
+        else
+          x=-1:2/(n-1):1;
+          set(gca,'XLim',[-1 1]);
+        end
+      else 
+        x=1;
+        if lim2 ~= lim1
+          set(gca,'XLim',[lim1 lim2]);
+        else
+          set(gca,'XLim',[lim1/2 lim1/2+lim1]);
+        end
+      end
+      if ~all(isnan(data(:,i)))
+        hist(data(:,i),x);
+      end
+      name=names{i};
+      xlabel(name);     
+    end
+    set(h,'Name','Histogram');      
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: no_of_values %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function no_of_values(varargin); 
+
+%NO_OF_VALUES  A callback function. Calculates the number of different
+%              values of the chosen components.
+%
+%
+
+if nargin==1;
+  LOG=1;
+else
+  LOG=0;
+end
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+results_h=getfield(get(pre_h,'UserData'),'results_h');
+sData=getfield(get(pre_h,'UserData'),'sData');
+selected=getfield(get(pre_h,'UserData'),'selected_vects');
+str1='There must be one component chosen for ''Number of Values''-operation';
+
+
+if ~LOG & isempty(get_indices) 
+  errordlg(str1);
+else
+  indices=get_indices;
+  data=sData.data(selected,indices);
+
+  string{1} = 'Number of different values:';
+
+  for i=1:getfield(size(data),{2})
+
+    tmp=data(:,i);
+    string{i+1}=cat(2,sprintf('#%d:',indices(i)),... 
+                      sprintf('%d',length(find(~isnan(unique(data(:,i)))))));
+  end
+
+  set(results_h,'String',string);
+  set(results_h,'HorizontalAlignment','left');
+  if ~LOG
+    data=get(pre_h,'UserData');
+    data.LOG{length(data.LOG)+1}='% Number of values';
+    data.LOG{length(data.LOG)+1}='preprocess(''noof'',''foo'');';
+    set(pre_h,'UserData',data);
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: correlation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function correlation(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+results_h=getfield(get(pre_h,'UserData'),'results_h');
+selected=getfield(get(pre_h,'UserData'),'selected_vects');
+sData=getfield(get(pre_h,'UserData'),'sData');
+
+if length(get_indices) < 2
+  errordlg('There must be two components chosen for Correlation');
+else
+  indices=getfield(get_indices,{1:2});
+  data=sData.data(selected,indices);
+  inds=find(~isnan(data(:,1)) & ~isnan(data(:,2)));
+  value=getfield(corrcoef(data(inds,1),data(inds,2)),{1,2});
+  names=sData.comp_names(indices);
+  string{1}='Correlation between';
+  string{2}=cat(2,names{1},' and ',names{2},':');
+  string{3}=sprintf('%-10.3g',value);
+
+  set(results_h,'String',string);
+  set(results_h,'HorizontalAlignment','left');
+  if ~LOG
+    data=get(pre_h,'UserData');
+    data.LOG{length(data.LOG)+1}='% Correlation';
+    data.LOG{length(data.LOG)+1}='preprocess(''corr'',''foo'');';
+    set(pre_h,'UserData',data);
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: unit_length %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function unit_length(varargin) 
+
+%UNIT_LENGTH  A callback function Scales all the vectors to the unit
+%             length.
+%
+% 
+
+if nargin==1
+  LOG=1;
+else
+  LOG=0;
+end
+
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+sData=getfield(get(gcf,'UserData'),'sData');
+sData.MODIFIED=1;
+scaled=sData.data;
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+
+if ~LOG & isempty(get(comp_names_h,'Value'))
+  errordlg('There must be components chosen for the ''unit length''- operation');
+  return;
+end
+inds=get_indices;
+for i=1:length(scaled(:,1));
+  x=find(~isnan(scaled(i,inds)));
+  scaled(i,inds(x))=(1/sqrt(sum(scaled(i,inds(x)).^2)))*scaled(i,inds(x));
+end
+
+data=get(gcf,'UserData');
+
+
+data.undo.sData = sData;
+data.sData.data=scaled;
+
+for i=1:length(inds)
+  data.sData.comp_norm{inds(i)}=[];
+end
+
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Unit length';
+  data.LOG{length(data.LOG)+1}='preprocess(''unit'',''foo'');';
+end
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+draw_vectors(vects,data.vector_h);
+vect_means(sData,vect_mean_h,data.selected_vects);
+cplot_mimema;
+plot_hist;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: one_of_n %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function one_of_n(varargin)
+
+if nargin==1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+vector_h=getfield(get(gcf,'Userdata'),'vector_h');
+comp_names_h=getfield(get(gcf,'Userdata'),'comp_names_h');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+sData=data.sData;
+undo=data.sData;
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+msg='Creating over 10 new components. Stop operation?';
+
+if ~LOG
+  if isempty(get(data.comp_names_h,'Value'))
+    errordlg('There must be one component chosen for ''Add: N binary types'' -operation');
+    return;
+  end
+end
+
+index=getfield(get_indices,{1});
+
+tmp=unique(sData.data(:,index)); 
+n=length(tmp);
+
+if ~LOG
+  if n>10
+    answer=questdlg(msg,'Question','Yes','No','Yes');
+
+    if strcmp(answer,'Yes')
+      msgbox('Operation stopped.');
+      return;
+    end
+
+  end
+end
+
+dim1=getfield(size(sData.data),{1});
+dim2=getfield(size(sData.data),{2});
+sData.data=cat(2,sData.data,zeros(dim1,n));
+
+dim=dim2+n;
+for i=1:n
+  sData.data(:,dim-(n-i))=(sData.data(:,index) == tmp(i));
+end
+
+INDEX=sData.INDEX;
+for i=1:n
+  sData.comp_names{dim2+i}=sprintf('%dNewVar',dim2+i);
+end
+tmp_norm=cat(1,sData.comp_norm,cell(n,1));
+sData=som_data_struct(sData.data,...
+                      'name',sData.name,...
+                      'labels',sData.labels,...
+                      'comp_names',sData.comp_names);
+                
+sData.MODIFIED=1;
+sData.INDEX=INDEX;
+sData.comp_norm=tmp_norm;
+data.undo.sData=undo;
+data.sData=sData;
+data.selected_vects=1:length(sData.data(:,1));
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Add: N binary types';
+  data.LOG{length(data.LOG)+1}='preprocess(''oneo'',''foo'');';
+end
+set(gcf,'UserData',data);
+clear_button;
+write_sD_stats;
+set_compnames(sData,comp_names_h);
+tmp=ones(1,length(sData.data(:,1)));
+draw_vectors(tmp,vector_h);
+vect_means(sData,vect_mean_h,1:length(sData.data(:,1)));
+cplot_mimema;
+sel_comp;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: add_zeros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function add_zeros(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+vector_h=getfield(get(gcf,'Userdata'),'vector_h');
+comp_names_h=getfield(get(gcf,'Userdata'),'comp_names_h');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+sData=data.sData;
+undo=sData;
+
+dim1=getfield(size(sData.data),{1});
+dim2=getfield(size(sData.data),{2});
+sData.data=cat(2,sData.data,zeros(dim1,1));
+
+INDEX=sData.INDEX;
+
+sData.comp_names{dim2+1}=sprintf('%dNewVar',dim2+1);
+tmp_norm=cat(1,sData.comp_norm,cell(1,1));
+sData=som_data_struct(sData.data,...
+                      'name',sData.name,...
+                      'labels',sData.labels,...
+                      'comp_names',sData.comp_names);
+         
+sData.MODIFIED=1;
+sData.INDEX=INDEX;
+sData.comp_norm=tmp_norm;
+data.sData=sData;
+data.undo.sData=undo;
+data.selected_vects=1:length(sData.data(:,1));
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Add: zeros';
+  data.LOG{length(data.LOG)+1}='preprocess(''zero'',''foo'');';
+end
+set(gcf,'UserData',data);
+clear_button;
+write_sD_stats;
+set_compnames(sData,comp_names_h);
+tmp=ones(1,length(sData.data(:,1)));
+draw_vectors(tmp,vector_h);
+vect_means(sData,vect_mean_h,1:length(sData.data(:,1)));
+cplot_mimema;
+sel_comp;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: move_component %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function move_component(varargin)
+
+%MOVE_COMPONENT  A callback function. Moves one component of vectors to
+%                the position wanted.
+%
+%
+
+if nargin == 1
+  LOG=1;
+  i=1;
+  while varargin{1}(i) ~= ' ' 
+    value(i)=varargin{1}(i);
+    i=i+1;
+  end
+  value=str2num(value);                                 % the new place
+  index=str2num(varargin{1}(i:length(varargin{1})));    % index of the chosen
+                                                        % component
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+prompt='Enter the number of the new component place:';
+
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be one component chosen for ''Move Component''-operation');
+  return;
+end
+
+if ~LOG
+  index=getfield(get_indices,{1});
+  answer=inputdlg(prompt);
+
+  if isempty(answer) | (iscell(answer) & isempty(answer{1}))
+    msgbox('No components moved');
+    return;
+  end
+
+  value=str2num(answer{1});
+
+
+  dims=size(value);
+
+  if dims(1) ~= 1 | dims(2) ~= 1 | ~isreal(value)
+    errordlg('The new component place must be positive integer.')
+    return;
+  end
+
+  if value <= 0 | round(value) ~= value
+    errordlg('The new component place must be positive integer.');
+    return;
+  end
+
+  if value > getfield(size(sData.data),{2})
+    errordlg('Too big value for the new component place.');
+    return;
+  end
+end
+
+sData.MODIFIED=1;
+if index < value
+  indices1=setdiff(1:value,index);
+  indices2=setdiff(value+1:length(sData.data(1,:)),index);
+elseif index > value
+  indices1=setdiff(1:value-1,index);
+  indices2=setdiff(value:length(sData.data(1,:)),index);
+else
+  data.sData=sData;
+  data.undo.sData=undo;
+  set(gcf,'UserData',data);
+  return;
+end
+
+tmp1=sData.data(:,indices1);
+tmp2=sData.data(:,indices2);
+sData.data=cat(2,tmp1,sData.data(:,index),tmp2);
+
+tmp1=sData.comp_names(indices1);
+tmp2=sData.comp_names(indices2);
+sData.comp_names=cat(1,tmp1,sData.comp_names(index),tmp2);
+
+tmp1=sData.comp_norm(indices1);
+tmp2=sData.comp_norm(indices2);
+sData.comp_norm=cat(1,tmp1,sData.comp_norm(index),tmp2);
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Move component.';
+  data.LOG{length(data.LOG)+1}=sprintf('preprocess(''move'',''%s %s'');',...
+           num2str(value),num2str(index));
+end
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+vector_h=getfield(get(gcf,'UserData'),'vector_h');
+data.selected_vects=1:length(sData.data(:,1));
+set(gcf,'UserData',data);
+clear_button;
+set_compnames(sData,comp_names_h);
+draw_vectors(ones(1,length(sData.data(:,1))),vector_h);
+vect_means(sData,vect_mean_h,data.selected_vects);
+cplot_mimema;
+sel_comp;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: copy_component %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function copy_component(varargin)
+
+%COPY_COMPONENT  Copies one component of vectors to the position wanted.
+%
+%
+
+if nargin == 1
+  LOG=1;
+  i=1;
+  while varargin{1}(i) ~= ' ' 
+    value(i)=varargin{1}(i);
+    i=i+1;
+  end
+  value=str2num(value);                                 % the new place
+  index=str2num(varargin{1}(i:length(varargin{1})));    % index of the chosen
+                                                        % component
+else
+  LOG=0;
+end
+
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+if ~LOG
+  prompt='Enter the number of the new component place:';
+
+
+  if isempty(get(data.comp_names_h,'Value'))
+    errordlg('There must be one component chosen for ''Copy Component''-operation');
+    return;
+  end
+
+  index=getfield(get_indices,{1});
+  answer=inputdlg(prompt);
+
+  if isempty(answer) | (iscell(answer) & isempty(answer{1}))
+    msgbox('No components moved');
+    return
+  end
+
+
+  value=str2num(answer{1});
+  dims=size(value);
+
+  if dims(1) ~= 1 | dims(2) ~= 1 | ~isreal(value)
+    errordlg('The new component place must be positive integer.')
+    return;
+  end
+
+  if value <= 0 | round(value) ~= value
+    errordlg('The new component place must be positive integer.');
+    return;
+  end
+
+  if value > getfield(size(sData.data),{2}) + 1
+    errordlg('Too big value for the new component place.');
+    return;
+  end
+end
+
+sData.MODIFIED=1;
+
+indices1=1:value-1;
+indices2=value:length(sData.data(1,:));
+tmp1=sData.data(:,indices1);
+tmp2=sData.data(:,indices2);
+sData.data=cat(2,tmp1,sData.data(:,index),tmp2);
+
+tmp1=sData.comp_names(indices1);
+tmp2=sData.comp_names(indices2);
+name=cell(1,1);
+name{1}=cat(2,'Copied',sData.comp_names{index});
+sData.comp_names=cat(1,tmp1,name,tmp2);
+
+tmp1=sData.comp_norm(indices1);
+tmp2=sData.comp_norm(indices2);
+norm=cell(1,1);
+norm{1}=sData.comp_norm{index};
+sData.comp_norm=cat(1,tmp1,norm,tmp2);
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Copy component';
+  data.LOG{length(data.LOG)+1}=sprintf('preprocess(''copy'',''%s %s'');',...
+           num2str(value),num2str(index));
+end
+
+
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+vector_h=getfield(get(gcf,'UserData'),'vector_h');
+data.selected_vects=1:length(sData.data(:,1));
+set(gcf,'UserData',data);
+clear_button;
+write_sD_stats;
+set_compnames(sData,comp_names_h);
+draw_vectors(ones(1,length(sData.data(:,1))),vector_h);
+vect_means(sData,vect_mean_h,data.selected_vects);
+cplot_mimema;
+sel_comp;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: remove_component %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function remove_component(varargin)
+
+if nargin == 1
+  LOG=1;
+  value=str2num(varargin{1});
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+vect_mean_h=getfield(get(gcf,'UserData'),'vect_mean_h');
+vector_h=getfield(get(gcf,'UserData'),'vector_h');
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+sData=data.sData;
+undo=sData;
+prompt='Enter the number of component to be removed.';
+dim=length(sData.data(1,:));
+
+if ~LOG
+  answer=inputdlg(prompt);
+
+  if isempty(answer) | (iscell(answer) & isempty(answer{1}))
+    msgbox('Components not removed.');
+    return;
+  end
+
+  value=str2num(answer{1});
+  dims=size(value);
+
+  if dims(1) ~= 1 | dims(2) ~= 1 | ~isreal(value)
+    errordlg('Number of the component to be removed must be positive integer.')
+    return;
+  end
+
+  if value <= 0 | round(value) ~= value
+    errordlg('Number of the component to be removed must be positive integer.');
+    return;
+  end
+
+  if value > getfield(size(sData.data),{2})
+    errordlg('There are less components.');
+    return;
+  end
+end
+
+sD_set_h=getfield(get(gcf,'UserData'),'sD_set_h');
+index=get(sD_set_h,'Value');
+if value == 1 & getfield(size(sData.data),{2}) == 1
+   if length(get(sD_set_h,'String')) == 1
+    msgbox('No data left. Closing program...')
+    pro_tools('close');
+    return;
+  end
+ 
+  set1=data.sD_set(1:index-1);
+  set2=data.sD_set(index+1:length(data.sD_set));
+  data.sD_set=[set1 set2];
+   set(gcf,'UserData',data);
+  
+  set_sD_stats;
+  sel_sD;
+  data=get(gcf,'UserData');
+  data.undo.sData=undo;
+  data.undo.index=index;
+  set(gcf,'UserData',data);
+  return;
+end
+dims=size(sData.data);
+tmp_data=cat(2,sData.data(:,1:value-1),sData.data(:,value+1:dims(2)));
+tmp_norm=cat(1,sData.comp_norm(1:value-1),sData.comp_norm(value+1:dims(2)));
+names=cat(1,sData.comp_names(1:value-1),sData.comp_names(value+1:dims(2)));
+INDEX=sData.INDEX;
+comp_norm=sData.comp_norm;
+sData=som_data_struct(tmp_data,...
+                      'name',sData.name,...
+                      'labels',sData.labels,...
+                      'comp_names',names);
+sData.comp_norm=tmp_norm;
+sData.MODIFIED=1;
+sData.INDEX=INDEX;
+data=get(gcf,'UserData');
+data.sData=sData;
+data.undo.sData=undo;
+data.selected_vects=1:length(sData.data(:,1));
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Remove component';
+  data.LOG{length(data.LOG)+1}=sprintf('preprocess(''remove'',''%s'');',...
+                                        answer{1});
+end
+set(gcf,'UserData',data);
+clear_button;
+write_sD_stats;
+set_compnames(sData,comp_names_h);
+tmp=ones(1,length(sData.data(:,1)));
+draw_vectors(tmp,vector_h);
+vect_means(sData,vect_mean_h,1:length(sData.data(:,1)));
+cplot_mimema;
+sel_comp;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: remove_vects %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function remove_vects(varargin)
+
+if nargin==1
+  LOG=1;
+  tmp_str=varargin{1};
+else
+  LOG=0;
+  tmp_str='_foo';
+end
+data=get(gcf,'UserData');
+vect_mean_h=data.vect_mean_h;
+vector_h=data.vector_h;
+sData=data.sData;
+undo=sData;
+
+if length(data.selected_vects) == getfield(size(sData.data),{1})
+  if LOG
+    answer='Yes';
+  else
+    answer=questdlg('Do you want to delete this data set?');
+  end
+  if strcmp(answer,'No')
+    return;
+  else
+    index=get(data.sD_set_h,'Value');
+    if length(get(data.sD_set_h,'String')) == 1
+      msgbox('No data left. Closing program...')
+      pro_tools('close');
+      return;
+    end
+     
+    set1=data.sD_set(1:index-1);
+    set2=data.sD_set(index+1:length(data.sD_set));
+    data.sD_set=[set1 set2];
+    set(gcf,'UserData',data);
+  
+    set(data.sD_set_h,'Value',1);
+    set_sD_stats;
+    sel_sD;
+    data=get(gcf,'UserData');
+    data.undo.sData=undo;
+    data.undo.index=index;
+    if ~LOG
+      data.LOG{length(data.LOG)+1}='% Remove selected vectors';
+      data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''remove_vects'',''',...
+                                          tmp_str,''');');
+    end
+    set(gcf,'UserData',data);
+    return;
+  end
+end
+
+tmp=sData.data(data.selected_vects,:);
+if ~LOG
+  answer=questdlg('Do you want to save removed values to workspace?');
+else
+  if ~strcmp(tmp_str,'_foo')
+    answer='Yes';
+  else
+    answer='No';
+  end
+end
+old=gcf;
+if strcmp(answer,'Yes')
+  if ~LOG
+    answer=inputdlg('Give the name of the output -variable.');
+  else
+    answer={tmp_str};
+  end
+  if isvalid_var_name(answer)
+    assignin('base',answer{1},tmp);
+    disp(sprintf('Removed values are set to workspace as''%s''.',answer{1}));
+    tmp_str=answer{1};
+  end
+end
+set(0,'CurrentFigure',old);
+sData.data(data.selected_vects,:)=[];
+sData.labels(data.selected_vects,:)=[];
+sData.MODIFIED=1;
+data.sData=sData;
+data.selected=1:length(sData.data(:,1));
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)}='% Remove selected vectors';
+  data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''remove_vects'',''',...
+                                      tmp_str,''');');
+end
+set(gcf,'UserData',data);
+
+
+draw_vectors(ones(1,length(data.selected)),data.vector_h);
+write_sD_stats;
+select_all('foo');
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+%%% Subfunction: eval1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function eval1(varargin);
+
+if nargin == 1
+  answer=varargin
+  LOG=1;
+else
+  LOG=0;
+end
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+if isempty(pre_h)
+  errordlg('''Preprocess''-figure does not exist. Terminating program...');
+  pro_tools('close');
+  return;
+end  
+
+undo=getfield(get(pre_h,'UserData'),'sData');
+
+if ~LOG
+  prompt={'Enter the expression to be evaluated.',...
+          'Enter the inverse normalization method (optional).'};
+  title='Single component eval.';
+  answer= inputdlg(prompt,title,1);
+end
+
+if ~isempty(answer)
+  tmp=[];
+  if ~isempty(answer{1})
+    [tmp,method]=build_expr(answer{1},'single');
+    if ~isstr(tmp)
+      sData=getfield(get(gcf,'UserData'),'sData');
+      tmp='Done.';
+      %if ~isempty(answer{2})
+      %  sN=som_norm_struct('eval',{method,answer{2}});
+      %else
+      %  sN=som_norm_struct('eval',{method});
+      %end
+      %sN=som_set(sN,'status','done');
+      params={answer{1};answer{2}};
+      ind=getfield(get_indices,{1});
+      x.type='';
+      x.method='eval';
+      x.params={answer{1};answer{2}};
+      x.status='';
+      sData.comp_norm{ind}=x;
+      data=get(gcf,'UserData');
+      data.undo.sData=undo;
+      data.sData=sData;
+      if ~LOG
+        data.LOG{length(data.LOG)+1}='% Eval (1-comp)';
+        data.LOG{length(data.LOG)+1}=cat(2,'preprocess eval1 ',...
+                 sprintf('{''%s''  ''%s''};',answer{1},answer{2}));
+      end 
+      set(pre_h,'UserData',data);
+
+    end
+  end    
+  set(getfield(get(pre_h,'UserData'),'results_h'),'String',tmp);
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: eval2
+
+function eval2(varargin)
+
+if nargin == 1
+  answer=varargin{1};
+  LOG=1;
+else
+  LOG=0;
+end
+
+undo=getfield(get(gcf,'UserData'),'sData');
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  errordlg('''Preprocess''-figure does not exist. Terminating program.');
+  pro_tools('close');
+  return;
+end
+
+if ~LOG
+  prompt='Enter the expression to be evaluated.';
+  title ='Eval';
+  answer=inputdlg(prompt,title,1);
+end
+
+if ~isempty(answer) & ~isempty(answer{1})
+   str=answer{1};
+   [answer,foo]=build_expr(answer{1},'multiple');
+   if ~isstr(answer)
+     
+     answer='Done.';
+     data=get(gcf,'UserData');
+     data.undo.sData=undo;
+     if ~LOG
+        data.LOG{length(data.LOG)+1}='% Eval';
+        data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''eval2'',',...
+                 sprintf('{''%s''});',str));
+      end 
+     set(gcf,'UserData',data);
+   end
+end
+
+set(getfield(get(pre_h,'UserData'),'results_h'),'String',answer);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: zero2one_scale %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function zero2one_scale(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+INDEX=sData.INDEX;
+sData=rmfield(sData,[{'INDEX'};{'MODIFIED'}]);
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be components chosen for scaling.');
+  return;
+end
+
+sData=som_normalize(sData,'range',get_indices);
+sData.MODIFIED=1;
+sData.INDEX=INDEX;
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Scale [0,1]';
+  data.LOG{length(data.LOG)+1}='preprocess(''zscale'', ''foo'');';
+end 
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+cplot_mimema;
+plot_hist;
+vect_means(sData,data.vect_mean_h,data.selected_vects);
+draw_vectors(vects,data.vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: var_scale %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function var_scale(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+INDEX=sData.INDEX;
+sData=rmfield(sData,[{'INDEX'};{'MODIFIED'}]);
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be components chosen for scaling.');
+  return;
+end  
+
+sData=som_normalize(sData,'var',get_indices);
+
+sData.INDEX=INDEX;
+sData.MODIFIED=1;
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Scale var=1';
+  data.LOG{length(data.LOG)+1}='preprocess(''vscale'', ''foo'');';
+end 
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+cplot_mimema;
+plot_hist;
+vect_means(sData,data.vect_mean_h,data.selected_vects);
+draw_vectors(vects,data.vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: hist_eq %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function hist_eq(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+INDEX=sData.INDEX;
+sData=rmfield(sData,[{'INDEX'},{'MODIFIED'}]);
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be components chosen for ''Histogram eq''.');
+  return;
+end
+
+sData=som_normalize(sData,'histD',get_indices);
+
+sData.INDEX=INDEX;
+sData.MODIFIED=1;
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Histogram eq';
+  data.LOG{length(data.LOG)+1}='preprocess(''histeq'', ''foo'');';
+end 
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+cplot_mimema;
+plot_hist;
+vect_means(sData,data.vect_mean_h,data.selected_vects);
+draw_vectors(vects,data.vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: hist_eq2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function hist_eq2(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+
+INDEX=sData.INDEX;
+sData=rmfield(sData,[{'INDEX'};{'MODIFIED'}]);
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be components chosen for ''Histogram eq2''.');
+  return;
+end
+
+inds=get_indices;
+%%%[sData,ok]=som_normalize(sData,inds,'histC');
+sData=som_normalize(sData,'histC',inds);
+sData.INDEX=INDEX;
+sData.MODIFIED=1;
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Histogram eq2';
+  data.LOG{length(data.LOG)+1}='preprocess(''histeq2'', ''foo'');';
+end 
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+cplot_mimema;
+plot_hist;
+vect_means(sData,data.vect_mean_h,data.selected_vects);
+draw_vectors(vects,data.vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: logarithm %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function logarithm(varargin)
+
+if nargin == 1
+  LOG=1;
+else
+  LOG=0;
+end
+
+data=get(gcf,'UserData');
+sData=data.sData;
+undo=sData;
+
+INDEX=sData.INDEX;
+sData=rmfield(sData,[{'INDEX'},{'MODIFIED'}]);
+
+if isempty(get(data.comp_names_h,'Value'))
+  errordlg('There must be components chosen for ''Log''.');
+  return;
+end
+
+Data=som_normalize(sData,'log',get_indices);
+
+sData.INDEX=INDEX;
+sData.MODIFIED=1;
+
+data.sData=sData;
+data.undo.sData=undo;
+if ~LOG
+  data.LOG{length(data.LOG)+1}='% Log';
+  data.LOG{length(data.LOG)+1}='preprocess(''log'', ''foo'');';
+end 
+set(gcf,'UserData',data);
+
+vects=zeros(1,length(sData.data(:,1)));
+vects(data.selected_vects)=1;
+
+cplot_mimema;
+plot_hist;
+vect_means(sData,data.vect_mean_h,data.selected_vects);
+draw_vectors(vects,data.vector_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [answer,method]=build_expr(string,evaltype)
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+method=[];
+if isempty(pre_h)
+  close_preprocess;
+  errordlg('''Preprocess'' -figure does not exist. Terminating program...'); 
+  return;
+
+end
+
+if isempty(string)
+  str = '[]';
+  return;
+end
+
+tmp=[];
+[name,assign,skip]=check_assign(string,evaltype);
+
+if ~strcmp(assign,'NOTASSIGN') & ~strcmp(assign,'error')
+  string=string(skip:length(string));
+end
+
+if ~strcmp(assign,'error')
+  if isempty(string)
+    answer='Illegal expression.';
+    return;
+  end
+  [str,skip]=check_token(string,evaltype);
+  method=string;
+  while ~strcmp(str,'error') & ~strcmp(tmp,'error') & skip < length(string)
+    if ~strcmp(tmp,')')
+      str=cat(2,str,tmp);
+    end
+    [tmp,skip2]=check_token(string(skip+1:length(string)),evaltype);
+    skip=skip+skip2;
+               
+  end
+   if ~strcmp(tmp,')') & ~strcmp(tmp,'error')
+     str=cat(2,str,tmp);
+   elseif strcmp(tmp,'error')
+     str='error';
+   end
+end
+
+if ~strcmp(assign,'error') & ~strcmp(str,'error');
+  answer=evalin('caller',str,'lasterr');
+else
+  answer='??? Illegal expression.';
+end
+
+
+data=get(pre_h,'UserData');
+sData=data.sData;
+if strcmp(assign,'NOTASSIGN') & strcmp(evaltype,'single') & ~isstr(answer)
+  if isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'))
+    errordlg('There are not components chosen.');
+    answer='??? Illegal expression.';
+    return;
+  end
+  index=getfield(get_indices,{1});
+  if strcmp(assign,'NOTASSIGN')
+    if length(sData.data(:,index)) ~=length(answer) & ~isscalar(answer)
+      answer='??? Illegal assignment.';
+    else
+      sData.data(:,index)=answer;
+      sData.MODIFIED=1;
+      data.sData=sData;
+      set(pre_h,'UserData',data);
+    end
+  else
+    if length(sData.data(str2num(assign),index)) ~=length(answer) & ~isscalar(answer)
+      answer='??? Illegal assignment.';
+    else
+      sData.data(str2num(assign),index)=answer;
+      sData.MODIFIED=1;
+      data.sData=sData;
+      set(pre_h,'UserData',data);
+    end
+  end
+elseif ~strcmp(assign,'error') & ~isstr(answer) & ~strcmp(assign,'NOTASSIGN')  
+  switch name
+    case 'x'
+     if isempty(get(data.comp_names_h,'Value'))
+       return;
+     end
+     index = getfield(get_indices,{1});
+     if isempty(assign)
+       if length(sData.data(:,index)) ~= length(answer) & ~isscalar(answer)
+         answer='??? Illegal assignment.';
+       else
+         sData.data(:,index)=answer;
+         sData.MODIFIED=1;
+         data.sData=sData;
+         if strcmp(evaltype,'multiple')
+           data.sData.comp_norm(index)={[]};
+         end
+         set(pre_h,'UserData',data);
+       end
+     else
+       args=create_args(assign,'x');
+       if length(args) == 1
+         len=max(str2num(args{1}));
+         if ~isscalar(len)
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > length(sData.data(:,1)) | min(str2num(args{1})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         elseif ~all(size(sData.data(str2num(args{1}),index))) == size(answer) & ~isscalar(answer)
+           answer='??? Illegal assignment.';
+           return;
+         else            
+           sData.data(str2num(args{1}),index)=answer;
+           sData.MODIFIED=1;
+           data.sData=sData;
+           if strcmp(evaltype,'multiple')
+             data.sData.comp_norm(index)={[]};
+           end
+           set(pre_h,'UserData',data);
+         end
+       else
+         len=max(str2num(args{1}));
+         dim=max(str2num(args{2}));
+         asize=size(answer);
+         msize=size(sData.data);
+         if ~isscalar(len) | ~isscalar(dim) 
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > length(sData.data(:,1)) | len < 1
+           answer='??? Illegal assignment.';
+           return;
+         elseif dim > 1 | dim > msize(2) | min(str2num(args{2})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         end 
+         len=length(str2num(args{1}));
+         dim=length(str2num(args{1}));
+         if ~all([len dim] == asize) & ~isscalar(answer) 
+           answer='??? Illegal assignment.';
+           return;
+         else
+           tmp=sData.data(:,index);
+           tmp([str2num(args{1})],[str2num(args{2})])=answer;
+           sData.data(:,index)=tmp;
+           sData.MODIFIED=1;
+           data.sData=sData;
+           if strcmp(evaltype,'multiple')
+             data.sData.comp_norm(index)={[]};
+           end
+           set(pre_h,'UserData',data);
+         end
+       end
+     end
+
+    case 'xs'
+     if isempty(get(data.comp_names_h,'Value'))
+       return;
+     end
+     indices=get_indices;
+     if isempty(assign)
+       if ~all(size(answer) == size(sData.data(:,indices))) & ~isscalar(answer)
+         answer='??? Illegal assignment.';
+       else       
+         sData.data(:,indices) = answer;
+         sData.MODIFIED=1;
+         data.sData=sData;
+         data.sData.comp_norm(indices)={[]};
+         set(pre_h,'UserData',data);
+       end
+     else
+       args=create_args(assign,'xs');
+       if length(args) == 1
+         len=max(str2num(args{1}));
+         if ~isscalar(len)
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > length(sData.data(:,1)) | min(str2num(args{1})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         end
+         if ~all(size(answer) == size(sData.data(str2num(args{1})))) &...
+            ~isscalar(answer)
+           answer='??? Illegal assignment.';
+           return;
+         else
+           tmp=sData.data(:,indices);
+           tmp(str2num(args{1}))=answer;
+           sData.data(:,indices)=tmp;
+           sData.MODIFIED=1;
+           sData.comp_norm{indices}={[]};
+           data.sData=sData;
+           set(pre_h,'UserData',data);
+         end
+       else
+         len=max(str2num(args{1}));
+         dim=max(str2num(args{2}));
+         asize=size(answer);
+         msize=size(sData.data(:,indices));
+         if ~isscalar(len) | ~isscalar(dim)
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > msize(1) | min(str2num(args{1})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         elseif dim > msize(2) | min(str2num(args{2})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         end
+         len=length(str2num(args{1}));
+         dim=length(str2num(args{2}));
+         if ~all([len dim] == asize) & ~isscalar(answer)
+           answer='??? Illegal assignment';
+           return;
+         else
+           tmp=sData.data(:,indices);
+           tmp([str2num(args{1})],[str2num(args{2})])=answer;
+           sData.MODIFIED=1;
+           sData.data(:,indices)=tmp;
+           data.sData=sData;
+           data.sData.comp_norm(indices)={[]};
+           set(pre_h,'UserData',data); 
+         end
+        
+       end
+     end
+
+    case 'D'
+     if isempty(assign)
+       if ~all(size(answer) == size(sData.data)) & ~isscalar(answer)
+         answer='??? Illegal assignment.';
+       else
+         if isscalar(answer)
+           sData.data(:,:)=answer;
+         else
+           sData.data=answer;
+         end
+         sData.MODIFIED=1;
+         data.sData=sData;
+         data.sData.comp_norm(1:length(sData.data(1,:)))={[]};
+         set(pre_h,'UserData',data);
+       end
+     else
+       args=create_args(assign,'D');
+       if length(args) == 1
+         len=max(str2num(args{1}));
+         if ~isscalar(len)
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > length(sData.data(:,1)) | min(str2num(args{1})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         end 
+         if ~all(size(answer) == size(sData.data(str2num(args{1})))) &...
+            ~isscalar(answer)
+           answer='??? Illegal assignment.';
+         else
+           sData.data(str2num(args{1}))=answer;
+           sData.MODIFIED=1;
+           data.sData=sData;
+           [i,j]=ind2sub(size(sData.data),str2num(args{1}));
+           data.sData.comp_norm(j)={[]};
+           set(pre_h,'UserData',data);
+         end
+       else
+         len=max(str2num(args{1}));
+         dim=max(str2num(args{2}));
+         asize=size(answer);
+         msize=size(sData.data);
+         if ~isscalar(len) | ~isscalar(dim)
+           answer='??? Illegal assignment.';
+           return;
+         elseif len > msize(1) | min(str2num(args{1})) < 1
+           answer='??? Illegal assignment.';
+           return;
+         elseif dim > msize(2) | min(str2num(args{2})) < 1
+           answer= '??? Illegal assignment.';
+           return;
+         end
+         len = length(str2num(args{1}));
+         dim = length(str2num(args{2}));
+         if ~all([len dim] == asize) & ~isscalar(answer)
+           answer='??? Illegal assignment.';
+           return;
+         else
+           sData.data([str2num(args{1})],[str2num(args{2})])=answer;
+           sData.MODIFIED=1;
+           data.sData=sData;
+           data.sData.comp_norm(str2num(args{2}))={[]};
+           set(pre_h,'UserData',data);
+         end
+       end
+     end
+  end
+end
+if sData.MODIFIED
+  selected=getfield(get(pre_h,'UserData'),'selected_vects');
+  vector_h=getfield(get(pre_h,'UserData'),'vector_h');
+  vect_mean_h=getfield(get(pre_h,'UserData'),'vect_mean_h');
+  vects=zeros(length(sData.data(:,1)));
+  vects(selected)=1;
+  draw_vectors(vects,vector_h);
+  vect_means(sData,vect_mean_h,selected);
+  pro_tools('plot_hist');
+  pro_tools('c_stat');
+  cplot_mimema;
+end
+
+ 
+%%% Subfunction: check_assign %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [name,string,skip]=check_assign(string,evaltype)
+
+
+reswords=[{'D'};{'x'};{'xs'}];
+flag=0;
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+if isempty(pre_h)
+  man_h=findobj(get(0,'Children'),'Tag','Management');
+  clip_h=findobj(get(0,'Children'),'Tag','Clipping');
+  errordlg('''Preprocess'' -window does not exist. Terminating program.');
+  if ~isempty(man_h)
+    close man_h;
+  end
+  if ~isempty(clip_h)
+    close clip_h;
+  end
+  return;
+end
+
+EMPTY=isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'));
+
+[name,s]=give_token(string,evaltype);
+skip=length(s);
+
+if strcmp(evaltype,'single') & ~strcmp(name,'x')
+  string='NOTASSIGN';
+  return;
+end
+
+if strcmp(name,'other') & ~strcmp(s,'x') 
+  string = 'error';
+  return;
+end
+
+if strcmp(name,[{'x'};{'xs'}])
+  comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+  if isempty(get(comp_names_h,'Value'))
+    errordlg('There are not components chosen.');
+    string='error';
+    return;
+  end
+end
+
+
+if skip == length(string) | ~strcmp(name,reswords)
+  string = 'NOTASSIGN';
+  return;
+end
+
+if (strcmp(name,'x') | strcmp(name,'xs')) & EMPTY
+  errordlg('There are not components chosen.');
+  string = 'error';
+  return;
+end
+
+[t,s]=give_token(string(length(name)+1),evaltype);
+
+if strcmp(t,'(')
+  flag=1;
+end
+
+[foo,skip]=check_token(string,evaltype);
+if length(name) ~= skip-1
+  skip=skip-1;
+  tmp=string(length(name)+1:skip);
+else 
+  tmp = [];
+end
+
+if flag & tmp(length(tmp)) ~= ')'
+  tmp(length(tmp)+1)=')';
+end
+
+if skip==length(string)
+  return;
+end
+
+skip=skip+1;
+if length(string) ~= skip
+  [t,s]=give_token(string(skip+1:length(string)),evaltype);
+else
+  string='NOTASSIGN';
+  return;
+end
+
+if ~strcmp(t,'=')
+  string = 'NOTASSIGN';
+  return;
+end
+string=tmp;
+skip = skip+2;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: isscalar %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bool = isscalar(x)
+
+  m= size(x);
+  
+  bool = m(1) == 1 & m(2) == 1;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: create_args %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function args=create_args(string,type)
+
+arg2='';
+i=2;
+j=1;
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+msize=size(getfield(getfield(get(pre_h,'UserData'),'sData'),'data'));
+
+
+if string(i) == ':'
+  arg1=num2str(cat(2,'1:',num2str(msize(1))));
+  i=i+1;
+  j=j+length(arg1);
+end
+
+while string(i) ~=',' & string(i) ~=')'
+  arg1(j)=string(i);
+  i=i+1;
+  j=j+1;
+end
+
+
+
+if string(i) ==','
+  j=1;
+  i=i+1;
+  if string(i)==':'
+    switch type
+      case 'x'
+       arg2='1';
+      case 'cs'
+       arg2=num2str(get_indices);
+      case 'D'
+       arg2=num2str(cat(2,'1:',num2str(msize(2))));
+    end
+    i=i+1;
+    j=j+length(arg2);
+  end
+
+  while string(i) ~= ')'
+    arg2(j)=string(i);
+    j=j+1;
+    i=i+1;
+  end
+end
+
+
+args{1}=arg1;
+if ~isempty(arg2)
+  args{2} = arg2;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [str,skip] = check_token(string,evaltype)
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+tmp_string=string;
+[t,s]=give_token(tmp_string,evaltype);
+skip=length(s);
+
+if strcmp(t,'c')
+  if isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'))
+    errordlg('There are no components chosen.');
+    str='error';
+    return;
+  end
+  index=getfield(get_indices,{1});
+  str=cat(2,'[',num2str(index),']');
+  if skip == length(tmp_string)
+    return;
+  end
+  tmp_string=tmp_string(skip+1:length(tmp_string));  
+  [t,s] = give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  end
+  [args,skip2] = get_args(tmp_string(length(s)+1:length(tmp_string)),'c',...
+                          evaltype);
+  skip=skip+skip2+2;
+  if strcmp(args,'error')
+    str = 'error'
+    return;
+  elseif ~strcmp(args,'all')
+    str=cat(2,'getfield(',str,',',args,')');
+  else
+    str=cat(2,'getfield(',str,',{[1]})'); 
+  end
+elseif strcmp(t,'cs')
+  if isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'))
+    errordlg('There are no components chosen.');
+    str='error';
+    return;
+  end
+  str =cat(2,'[',num2str(get_indices),']');
+  if length(s) == length(string)
+    return;
+  end
+  tmp_string=tmp_string(1+length(s):length(string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  else
+    [args,skip2]=get_args(tmp_string(1+length(s):length(tmp_string)),'cs',...
+                          evaltype);
+    skip=2+skip+skip2;
+    if strcmp(args,'error')
+      str='error';
+      return;
+    elseif ~strcmp(args,'all')
+      str = cat(2,'getfield(',str,',',args,')');
+    else
+      tmp_str=str;
+      str=cat(2,'[getfield(',str,',','{1})');
+      for i=2:length(get_indices)
+        str=cat(2,str,';getfield(',tmp_str,',',sprintf('{%d})',i));
+      end
+      str=cat(2,str,']');
+    end
+  end
+elseif strcmp(t,'dim')
+  ind1=getfield(size(getfield(getfield(get(pre_h,'UserData'),'sData'),'data')),{2});
+  str=cat(2,'[',num2str(ind1),']');
+  if length(s)==length(string)
+    return;
+  end
+  tmp_string=string(1+length(s):length(string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  end
+  skip=1+skip+length(s);
+  [args,skip2]=get_args(tmp_string(1+length(s):length(tmp_string)),'dim',...
+                        evaltype);
+  if strcmp(args,'error')
+    str = 'error';
+    return;
+  else
+    skip=skip+skip2;
+    if ~strcmp(args,'all')
+      str=cat(2,'getfield(',str,',',args,')');
+    end
+  end
+
+elseif strcmp(t,'dlen') 
+  ind1=getfield(size(getfield(getfield(get(pre_h,'UserData'),'sData'),'data')),{1});
+  str=cat(2,'[',num2str(ind1),']');
+  if length(s)==length(string)
+    return;
+  end
+  tmp_string=string(1+length(s):length(string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  end
+  skip=skip+length(s);
+  [args,skip2]=get_args(tmp_string(1+length(s):length(tmp_string)),'dlen',...
+                        evaltype);
+  if strcmp(args,'error')
+    str='error';
+    return;
+  else
+    skip=1+skip+skip2;
+    if ~strcmp(args,'all')
+      str=cat(2,'getfield(',str,',',args,')');
+    end
+  end
+
+elseif strcmp(t,'x')
+  if isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'))
+    errordlg('There are not components chosen.');
+    str='error';
+    return;
+  end
+  len=getfield(size(getfield(getfield(get(pre_h,'UserData'),...
+               'sData'),'data')),{1});
+  index=num2str(getfield(get_indices,{1}));
+  h_str='findobj(get(0,''Children''),''Tag'',''Preprocess'')';
+  get_str=cat(2,'getfield(get(',h_str,',''UserData''),''sData'')');
+  get_str=cat(2,'getfield(',get_str,',''data'')');
+  str=cat(2,'getfield(',get_str,',{[1:',num2str(len),'],',index,'})');
+  if length(s) == length(string)
+    return;
+  end
+  tmp_string=string(1+length(s):length(string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(');
+    return;
+  end
+  skip=skip+length(s);
+  [args,skip2]=get_args(tmp_string(1+length(s):length(tmp_string)),'x',...
+                        evaltype);
+  if strcmp(args,'error')
+    str = 'error';
+    return;
+  else
+    skip=1+skip+skip2;
+    if ~strcmp(args,'all')
+      str=cat(2,'getfield(',str,',',args,')');
+    end
+  end
+
+elseif strcmp(t,'xs')
+  if isempty(get(getfield(get(pre_h,'UserData'),'comp_names_h'),'Value'))
+    errordlg('There are not components chosen.');
+    str='error';
+    return;
+  end
+  len=getfield(size(getfield(getfield(get(pre_h,'UserData'),...
+               'sData'),'data')),{1});
+  index=get_indices;
+  index=cat(2,'[',num2str(index),']');
+  h_str='findobj(get(0,''Children''),''Tag'',''Preprocess'')';
+  get_str=cat(2,'getfield(get(',h_str,',''UserData''),''sData'')');
+  get_str=cat(2,'getfield(',get_str,',''data'')');
+  str=cat(2,'getfield(',get_str,',{[1:',num2str(len),'],',index,'})');
+  if length(s) == length(string)
+    return;
+  end
+  tmp_string=string(1+length(s):length(string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  end
+  skip=1+skip+length(s);
+
+  [args,skip2]=get_args(tmp_string(1+length(s):length(tmp_string)),'xs',...
+                        evaltype);
+  if strcmp(args,'error')
+    str = 'error';
+    return;
+  elseif ~strcmp(args,'all')  
+    str=cat(2,'getfield(',str,',',args,')');
+    skip=skip+skip2;
+  else
+    skip=skip+skip2;
+    [dlen,dim]=size(eval(str));
+    tmp_str=str;
+    str=cat(2,'[','getfield(',tmp_str,sprintf(',{1:%d,1})',dlen));
+    for i=2:dim
+      tmp=sprintf(',{1:%d,%d})',dlen,dim);
+      str=cat(2,str,';','getfield(',tmp_str,tmp);
+    end
+    str=cat(2,str,']');
+  end
+elseif strcmp(t,'D')
+  get_h='findobj(get(0,''Children''),''Tag'',''Preprocess'')';
+  str=cat(2,'getfield(getfield(get(',get_h,',''UserData''),''sData''),''data'')');
+
+  if length(s) >= length(tmp_string)
+    return;
+  end
+
+  tmp_string=tmp_string(1+length(s):length(tmp_string));
+  [t,s]=give_token(tmp_string,evaltype);
+  if ~strcmp(t,'(')
+    return;
+  else
+    tmp_string=tmp_string(1+length(s):length(tmp_string));
+    skip = skip+length(s);
+    [args, skip2]=get_args(tmp_string,'D',evaltype);
+    if strcmp(args,'error')
+      str='error';
+      return;
+    elseif ~strcmp(args,'all')
+      str=cat(2,'getfield(',str,',',args,')');
+      skip=1+skip+skip2;
+    else
+      skip=1+skip+skip2;
+      [dlen,dim]=size(eval(str));
+      tmp_str=str;
+      str=cat(2,'[getfield(',str,sprintf(',{1:%d,1})',dlen));
+      for i=2:dim
+        tmp=sprintf(',{1:%d,%d}',dlen,i);
+        str=cat(2,str,';getfield(',tmp_str,tmp,')');
+      end
+      str=cat(2,str,']');
+    end
+  end  
+else
+  if strcmp(t,'(')
+    str = t;
+    str2='';
+    tmp_string=tmp_string(1+length(s):length(tmp_string));
+    while ~strcmp(str2,')') & ~isempty(tmp_string)
+      [str2,skip2]=check_token(tmp_string,evaltype);
+      if strcmp(str2,'error')
+        str='error';
+        return;
+      end
+      skip=skip+skip2;
+      tmp_string=tmp_string(skip2+1:length(tmp_string));
+      str=cat(2,str,str2);
+    end
+    if ~strcmp(str2,')')
+      str = 'error';
+    end
+  else
+    str = s;
+  end
+end
+
+%%% Subfunction: get_args %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [str,skip] = get_args(string,flag,evaltype)
+
+res_words=[{'D'};{'c'};{'cs'};{'dim'};{'dlen'};{'x'};{'xs'}];
+NOTALL=1;
+if isempty(string)
+  str='error'
+  skip=[];
+  return;
+end
+[t,s] = give_token(string,evaltype);
+
+
+skip=length(s);
+if any(strcmp(t,res_words));
+  [str,skip2] = check_token(string,evaltype);
+  string=string(1+length(s):length(string)); 
+  str=cat(2,'{[',str);
+  [t,s]=give_token(string,evaltype);
+elseif t==')' | t==','
+  str = 'error';
+  return;
+elseif strcmp(t,':');
+  if length(s) == length(string)
+    str='error';
+    return;
+  end
+  [t,s]=give_token(string(1+length(s):length(string)),evaltype);
+  if t == ')'
+    str = 'all';
+    return;
+  end
+  switch flag
+    case {'c','cs','dim','dlen'}
+     str= '{[1';
+    otherwise
+     str=cat(2,'{[',get_all('vect'));
+  end
+  NOTALL=0;
+  string=string(1+length(s):length(string));
+  [t,s]=give_token(string,evaltype);
+  skip=skip+1;
+else 
+  str = cat(2,'{[',s);
+end
+str2 =[];
+
+
+if ~strcmp(t,',') & ~strcmp(t,')')
+  skip=skip-length(s);
+end
+
+
+
+while ~strcmp(t,',') & ~strcmp(t,')') & NOTALL;
+  str=cat(2,str,str2);
+  [t,s] = give_token(string,evaltype);
+  if length(s) == length(string)
+    str = 'error';
+    return;
+  end
+  string=string(1+length(s):length(string));
+  skip=skip+length(s);
+  [t,s]=give_token(string,evaltype);
+  if length(s) == length(string) & ~strcmp(t,')')
+    str = 'error';
+    return;
+  end
+
+  [str2,foo]=check_token(string,evaltype);  
+end 
+
+if NOTALL & ~strcmp(t,')')
+ skip=skip+1;
+end
+
+if strcmp(t,')')
+  str=cat(2,str,']}');
+  return
+end
+
+str=cat(2,str,']',',','[');
+str2 = [];
+
+
+[t,s] = give_token(string,evaltype);
+if strcmp(t,')')
+  str = 'error'
+  return;
+end
+NOTALL=1;
+string=string(1+length(s):length(string));
+[t,s]=give_token(string,evaltype);
+if strcmp(t,':');
+   switch flag
+     case {'c','dim','dlen','x'}
+      str=cat(2,str,'1');
+     case 'D'
+      str=cat(2,str,get_all('comp'));
+     case {'cs','xs'}
+      str=cat(2,str,'1:',num2str(length(get_indices)));
+   end
+   NOTALL=0;
+   if length(s) == length(string)
+    str='error';
+    return;
+   end
+   string=string(1+length(s):length(string));
+   [t,s]=give_token(string,evaltype);
+end
+
+if ~strcmp(t,')') & NOTALL
+  skip=skip-1;
+end
+
+while ~strcmp(t,')') & NOTALL
+  str=cat(2,str,str2);
+  skip=skip+length(s);
+  if length(s) == length(string) & ~strcmp(t,')')
+    str='error';
+    return;
+  end
+  [str2,foo]=check_token(string,evaltype);
+  string=string(1+length(s):length(string));
+  [t,s]=give_token(string,evaltype);
+end
+if ~strcmp(t,')')
+  str='error';
+  return;
+end
+
+
+str=cat(2,str,str2,']}');
+skip=skip+length(s);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: get_all %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function str=get_all(vect_or_comp)
+
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+
+switch vect_or_comp
+  case 'vect'
+   dim=getfield(size(getfield(getfield(get(pre_h,'UserData'),...
+                'sData'),'data')),{1});
+   str=cat(2,'1:',num2str(dim));
+  case 'comp'
+   dim=getfield(size(getfield(getfield(get(pre_h,'UserData'),...
+                'sData'),'data')),{2});
+   str=cat(2,'1:',num2str(dim));
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [token,str]=give_token(string,evaltype)
+
+n=length(string);
+i=1;
+char=string(i);
+
+switch analyze_char(string(i));
+  case 'num'
+   token='num';
+   while i <= n & strcmp('num',analyze_char(string(i)))
+     str(i)=string(i);
+     i=i+1;
+   end
+  case 'other'
+   switch string(i)
+     case ':'
+      token = ':';
+     case ','
+      token = ',';
+     case '('
+      token = '(';
+     case ')'
+      token = ')';
+     case '='
+      token = '=';
+     otherwise
+      token='other';
+   end
+   str=string(i);
+  case 'alpha'
+   while i <= n & strcmp('alpha',analyze_char(string(i)))
+    str(i)=string(i);
+    i=i+1;
+   end
+   token = find_res_word(str,evaltype);
+end
+
+%%% Subfunction: analyze_char %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function type=analyze_char(char)
+
+
+if ((char-0) >= ('0'-0) &  (char-0) <= ('9'-0))
+  type='num';
+elseif   ((char-0) >= ('a'-0) & (char-0) <= ('z'-0)) ...
+       | ((char-0) >= ('A'-0) & (char-0) <= ('Z'-0))  
+  type='alpha';
+else
+  type='other';
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Subfunction: find_res_word %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function token = find_res_word(string,evaltype)
+
+reswords=[{'D'};{'c'};{'cs'};{'dim'};{'dlen'};{'x'};{'xs'};{'other'}];
+
+for i=1:length(reswords);
+  token=reswords{i};
+  if strcmp(string,reswords{i})
+    if strcmp(evaltype,'single') & ~strcmp(string,'x')
+      token = 'other';
+    end
+    return;
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function close_func(varargin)
+
+switch varargin{1}
+  case 'close_c'
+   str='% Closing the ''Clipping'' -window...';
+   clip_h=findobj(get(0,'Children'),'Tag','Clipping');
+   close(clip_h);
+  case 'close_sD'
+   str='% Closing the ''Data Set Management'' -window...';
+   sD_h=findobj(get(0,'Children'),'Tag','Management');
+   close(sD_h);
+  case 'close_w'
+   str='% Closing the ''Windowed'' -window...';
+   win_h=findobj(get(0,'Children'),'Tag','Window');
+   close(win_h);
+  case 'close_s'
+   str='% Closing the ''Select'' -window...';
+   sel_h=findobj(get(0,'Children'),'Tag','Select');
+   close(sel_h);
+  case 'close_d'
+   str='% Closing the ''Delay'' -window...';
+   del_h=findobj(get(0,'Children'),'Tag','Delay');
+   close(del_h);
+end
+
+if nargin ~= 2
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  preh_udata=get(pre_h,'UserData');
+  str2=cat(2,'preprocess(''',varargin{1},''',''foo'');');
+  preh_udata.LOG{length(preh_udata.LOG)+1}=str;
+  preh_udata.LOG{length(preh_udata.LOG)+1}=str2;
+  set(pre_h,'UserData',preh_udata);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function log_file
+
+answer=inputdlg('Give the name of the outputfile:','LOG function',1,...
+                {'log_function'});
+
+if isempty(answer)
+  return;
+end
+
+
+tmp=clock;
+str =cat(2,'% Created: ',...
+           date,...
+           ' ',sprintf('%d:%d\n%\n\n',tmp(4),tmp(5)));
+pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+LOG=getfield(get(pre_h,'UserData'),'LOG');
+file=cat(2,pwd,'/',answer{1},'.m');
+fid =fopen(file,'w');
+
+arg=LOG{2}(12:length(LOG{2})-2);
+fprintf(fid,'%s\n \n',cat(2,'function ',answer{1},'(',arg,')'));
+fprintf(fid,'%s\n',str);
+for i=1:length(LOG)
+  fprintf(fid,'%s\n',LOG{i});
+end
+fclose(fid);
+disp(sprintf('LOG-file ''%s'' is done.',file));
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function get_selected_inds(varargin)
+
+if nargin == 1
+  LOG=1;
+  answer = {varargin{1}};
+else
+  LOG=0;
+end
+
+selected=getfield(get(gcf,'UserData'),'selected_vects');
+if ~LOG
+  answer=inputdlg('Give the name of the output variable:',...
+                '',1,{'indices'});
+end
+
+if isempty(answer) | isempty(answer{1})
+  return;
+else
+  assignin('base',answer{1},selected);
+  disp(cat(2,'Indices of the selected vectors are set to the workspace ',...  
+           sprintf(' as ''%s''.',answer{1})));
+  if ~LOG
+    data=get(gcf,'UserData');
+    data.LOG{length(data.LOG)+1}=...
+    '% Saving indices of the selected vectors to the workspace.';
+    data.LOG{length(data.LOG)+1}=cat(2,'preprocess(''get_inds'',',...
+                                        '''',answer{1},''');');
+    set(gcf,'UserData',data);
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function no_of_selected(varargin)
+
+if nargin == 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  set(0,'CurrentFigure',pre_h);
+  LOG = 1;
+else
+  LOG = 0;
+end
+
+results_h=getfield(get(gcf,'UserData'),'results_h');
+no=length(getfield(get(gcf,'UserData'),'selected_vects'));
+str={sprintf('Number of selected vectors: %d\n', no)};
+set(results_h,'String',str,'HorizontalAlignment','left');
+
+if ~LOG
+  data=get(gcf,'UserData');
+  data.LOG{length(data.LOG)+1}='% Number of selected vectors';
+  data.LOG{length(data.LOG)+1}='preprocess(''no_of_sel'',''foo'');';
+  set(gcf,'UserData',data);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function select_all_comps(varargin)
+
+if nargin == 1
+  pre_h=findobj(get(0,'Children'),'Tag','Preprocess');
+  set(0,'CurrentFigure',pre_h);
+  LOG=1;
+else
+  LOG=0;
+end
+
+comp_names_h=getfield(get(gcf,'UserData'),'comp_names_h');
+
+set(comp_names_h,'Value',[1:length(get(comp_names_h,'String'))]);
+sel_comp;
+
+if ~LOG
+  data=get(gcf,'UserData');
+  data.LOG{length(data.LOG)+1}='% Select all components';          
+  data.LOG{length(data.LOG)+1}='preprocess(''sel_all_comps'',''foo'');';
+  set(gcf,'UserData',data);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
+
+function code=write_log_code(indices,arg1,arg2,arg3,arg4,arg5,arg6);
+
+str=textwrap({num2str(indices)},500);
+
+code{1}=sprintf('inds=[];');
+for i=1:length(str);
+  code{i+1}=sprintf('  inds=cat(2,inds,[%s]);',str{i});
+end
+str=cat(2,'preprocess(''''clip_data'''',''''',arg1,' ',num2str(arg2),' ',...
+                      num2str(arg3),' ',num2str(arg4),...
+                      ' ',num2str(arg5),' ',num2str(arg6),' ');
+code{length(code)+1}=cat(2,'eval(cat(2,',...
+                            '''',str,'''',...
+                            ',num2str(inds),'''''');''));');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/rep_utils.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,572 @@
+function aout = rep_utils(action,fmt,fid)
+
+%REP_UTILS Utilities for print reports and report elements.
+%  
+% aout = rep_utils(action,fmt,[fid])
+% 
+%  Input and output arguments ([]'s are optional): 
+%   action      (string)     action identifier
+%               (cell array) {action,par1,par2,...}
+%                            the action identifier, followed by action 
+%                            parameters
+%   [fmt]       (string)     format of output, 'txt' by default
+%   [fid]       (scalar)     output file id, by default NaN in which
+%                            case output is not written, only returned
+%                            in aout
+%   
+%   aout        (varies)     output of the action
+%
+%  Here are the actions and their arguments: 
+%  'printlines'   par1 (cellstr)   print par1, each cell on a new line
+%  'header'       par1 (string)    print document header using par1 as title
+%  'footer'                        print document footer
+%  'compile'      par1 (string)    compile the named document (only 'ps' and 'pdf')
+%  'inserttable'  par1 (struct)    print given table
+%                 par2 (scalar)    print lines between rows if par2=1
+%                 par3 (scalar)    use longtable format (only 'ps' and 'pdf')
+%  'printfigure'  par1 (string)    print current figure to file, par1 = filename
+%                 par2 (scalar)    used resolution (150 dpi by default)
+%                 par3 (scalar)    if par3=1, insert figure in minipage
+%  'insertfigure' par1 (string)    insert figure to report, par1 = filename of figure
+%                 par2 (vector)    size 2 x 1, size of figure relative to page size 
+%                                  NaN = automatic scaling
+%                 par3 (scalar)    if par3=1, insert figure in minipage (only 'ps' and 'pdf')
+%  'insertbreak'                   insert paragraph break into report 
+%
+% See also  REP_STATS.
+
+% Contributed to SOM Toolbox 2.0, January 2nd, 2002 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 020102
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+pars = {''}; 
+if iscell(action), 
+    if length(action)>1, pars = action(2:end); end
+    action = action{1}; 
+end
+
+if nargin<2 | isempty(fmt), fmt = 'txt'; end
+global REPORT_OUTPUT_FMT
+REPORT_OUTPUT_FMT = fmt;
+
+if nargin<3 | isempty(fid), fid = NaN; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+aout = []; 
+printable = 0; 
+
+switch action,
+case 'printlines',
+    aout = pars{1}; 
+case 'header',     
+    switch fmt, 
+    case {'ps','pdf'}, aout = tex_startdocument(pars{1}); 
+    case 'html',       aout = html_startpage(pars{1});
+    case 'txt',        aout = cell(0);
+    end 
+    printable = 1; 
+case 'footer', 
+    switch fmt, 
+    case {'ps','pdf'}, aout = tex_enddocument; 
+    case 'html',       aout = html_endpage;
+    case 'txt',        aout = cell(0);
+    end 
+    printable = 1; 
+case 'compile',      aout = compiledocument(pars{1});
+case 'inserttable',  aout = inserttable(pars{:}); printable = 1; 
+case 'printfigure',  printfigure(pars{:});
+case 'insertfigure', aout = insertfigure(pars{:}); printable = 1;
+case 'insertbreak',  aout = insertbreak; printable = 1; 
+case 'joinstr',      aout = joinstr(pars{:}); printable = 1; 
+case 'rulestr',      aout = rulestr(pars{:}); printable = 1; 
+case 'c_and_p_str',  aout = c_and_p_str(pars{:}); printable = 1; 
+case 'p_str',        aout = p_str(pars{:}); printable = 1; 
+end 
+
+% if output file is given, print lines
+if ~isnan(fid) & printable,
+    if ~iscell(aout), aout = {aout}; end
+    for i = 1:length(aout), fprintf(fid,'%s\n',fmtline(aout{i})); end
+end
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+%% simple formatter strings
+
+function s = joinstr(cs, sep1, sep2)
+  if nargin==1, sep1 = ', '; sep2 = ' and '; end
+  if nargin<3, sep2 = sep1; end
+  if isempty(cs), 
+    s = '';     
+  elseif strcmp(sep1,'\n'), 
+    if size(cs,1)==1, cs = cs'; end
+    s = char(cs); 
+  else
+    s = cs{1}; 
+    for i=2:length(cs)-1, s = [s sep1 cs{i}]; end
+    if length(cs)>1, s = [s sep2 cs{end}]; end
+  end
+  return; 
+
+function str = c_and_p_str(n,m)
+
+  % return a string of form # (%), e.g. '23 (12%)'
+  if n==m, p = '100'; 
+  elseif n==0, p = '0';
+  else p = sprintf('%.2g',100*n/m);
+  end
+  str = sprintf('%d (%s%%)',round(n),p); 
+  return;
+  
+function str = p_str(p)
+  % return a string of form %, e.g. '12%'
+  if round(p*100)>=100, p = sprintf('%3g',100*p); 
+  elseif abs(p)<eps, p = '0';
+  else p = sprintf('%.2g',100*p);
+  end
+  str = sprintf('%s%%',p); 
+  return;
+
+function cs = rulestr(sR,cnames)
+  global REPORT_OUTPUT_FMT
+  switch REPORT_OUTPUT_FMT
+   case {'ps','pdf'}, [leq,geq,infi,m,less,in] = deal('\leq','\geq','\inf','$','<','\in'); 
+   case 'html',  [leq,geq,infi,m,less,in]  = deal('&lt;=','&gt;=','Inf',' ','&lt;',' '); 
+   case 'txt', [leq,geq,infi,m,less,in]  = deal('<=','>=','inf',' ','<',''); 
+  end
+  nr = length(sR); 
+  cs = cell(nr,1); 
+  fmt = '%.2g'; 
+  if nargin<2, cnames = {sR.name}; end
+  if isempty(cnames), cnames = cell(nr,1); cnames(:) = {''}; end 
+  for i=1:nr,       
+    low  = sR(i).low; 
+    high = sR(i).high; 
+    switch isfinite(low) + 2*isfinite(high), 
+     case 0, cs{i} = [cnames{i} ' ' 'any']; 
+     case 1, cs{i} = [cnames{i} ' ' m geq sprintf(fmt,low) m];
+     case 2, cs{i} = [cnames{i} ' ' m less sprintf(fmt,high) m]; 
+     case 3, cs{i} = [cnames{i} ' ' m in '[' sprintf(fmt,low) ',' sprintf(fmt,high) ']' m];
+    end
+  end
+  return; 
+
+%% print figure
+
+function imgfmt = fmt2imgfmt
+  global REPORT_OUTPUT_FMT
+  switch REPORT_OUTPUT_FMT, 
+  case 'ps',   imgfmt = 'ps'; 
+  case 'pdf',  imgfmt = 'pdf'; 
+  case 'html', imgfmt = 'png'; 
+  case 'txt',  imgfmt = ''; 
+  end
+  return; 
+
+function printfigure(fname,resolution)
+  if nargin<2, resolution = 150; end
+  fnameps = [fname '.ps']; 
+  switch fmt2imgfmt,
+  case 'ps',  
+      print('-dpsc2',fnameps); 
+  case 'pdf', 
+      print('-dpsc2',fnameps);       
+      eval(sprintf('!ps2pdf %s',fnameps));  
+  case 'gif',       
+      print('-dpsc2',fnameps);              
+      cmd = 'pstogif'; 
+      opt = sprintf('-depth 1 -density %d',resolution); 
+      unix(sprintf('%s %s -out %s %s',cmd,opt,[fname '.gif'],fnameps));
+  case 'png',
+      opt = sprintf('-r%d',resolution); 
+      print('-dpng',opt,[fname '.png']);
+  end
+  return; 
+
+%% headers and footers, and compilation
+
+function cs = tex_startdocument(title)
+  % tex document headers
+  global REPORT_OUTPUT_FMT
+  cs = cell(0); 
+  cs{end+1} = '\documentclass[10pt,a4paper]{article}'; 
+  cs{end+1} = '\usepackage[dvips]{epsfig,graphicx,color}'; 
+  cs{end+1} = '\usepackage{float,graphics,subfigure}'; 
+  cs{end+1} = '\usepackage{multirow,rotating,portland,lscape,longtable,pifont}'; 
+  cs{end+1} = '\usepackage[T1]{fontenc}'; 
+  if strcmp(REPORT_OUTPUT_FMT,'pdf'), cs{end+1} = '\usepackage{pslatex}'; end
+  cs{end+1} = '\usepackage[english]{babel}'; 
+
+  cs{end+1} = '\oddsidemargin 0 mm';
+  cs{end+1} = '\evensidemargin 0 mm';
+  cs{end+1} = '\textwidth 17 cm';
+  cs{end+1} = '\topmargin 0 mm';
+  cs{end+1} = '\textheight 21 cm';
+  cs{end+1} = '\voffset 0 mm';
+
+  cs{end+1} = '\begin{document}'; 
+  cs{end+1} = ['\title{' title '}']; 
+  cs{end+1} = '\maketitle'; 
+  %cs{end+1} = '\tableofcontents'; 
+  %cs{end+1} = '\clearpage'; 
+  return;
+
+function cs = tex_enddocument
+  cs = cell(0);
+  cs{end+1} = '\end{document}';
+  return; 
+
+function cs = html_startpage(title)
+  % print HTML document headers
+  cs = cell(0);
+  cs{end+1} = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">';
+  cs{end+1} = '<HTML>';
+  cs{end+1} = '<HEAD>';
+  cs{end+1} = sprintf('  <TITLE>%s</TITLE>',title);
+  cs{end+1} = '</HEAD>';
+  cs{end+1} = '<BODY bgcolor=white vlink="#000033" link="#0000ff" text="#000000">';
+  if ~isempty(title), cs{end+1} = sprintf('<H1>%s</H1>',title); end
+  return;
+
+function cs = html_endpage
+  % print HTML document footers
+  cs = cell(0);
+  cs{end+1} = '<P><HR>';
+  cs{end+1} = '</BODY>';
+  cs{end+1} = '</HTML>';
+  return;
+
+function files = compiledocument(filename)
+  global REPORT_OUTPUT_FMT
+  switch REPORT_OUTPUT_FMT, 
+   case 'pdf', 
+    eval(sprintf('!pdflatex --interaction batchmode %s.tex',filename));
+    eval(sprintf('!pdflatex --interaction batchmode %s.tex',filename));
+    %eval(sprintf('!acroread %s.pdf &',filename)); 
+    files = {[filename '.aux'],[filename '.log'],[filename '.out'],[filename '.pdf']}; 
+   case 'ps', 
+    eval(sprintf('!latex --interaction batchmode %s.tex',filename));
+    eval(sprintf('!latex --interaction batchmode %s.tex',filename));
+    eval(sprintf('!dvips %s.dvi',filename)); 
+    eval(sprintf('!ps2pdf %s.ps',filename));
+    %eval(sprintf('!ghostview %s.ps &',filename)); 
+    files = {[filename '.aux'],[filename '.log'],[filename '.out'],[filename '.dvi'],[filename '.pdf']}; 
+   case 'html',   
+   case 'txt',
+  end
+  return; 
+
+
+function vstr = defaultformat(val)  
+  global REPORT_OUTPUT_FMT
+  if ischar(val),        vstr = val; 
+  elseif iscellstr(val), vstr = char(val); 
+  elseif isempty(val),   vstr = ''; 
+  elseif isnumeric(val), 
+    if val==round(val), fmt = '%d'; else fmt = '%.3g'; end 
+    if abs(val)<=eps, vstr = '0'; else vstr = sprintf(fmt,val); end
+  elseif isstruct(val) & isfield(val,'values') & isfield(val,'headers'), 
+    % a table
+    vstr = joinstr(inserttable(val,0),'\n');
+    if any(strcmp(REPORT_OUTPUT_FMT,{'ps','pdf'})), 
+      vstr= inserttominipage(vstr); 
+    end
+  else
+    vstr = ''; fprintf(1,'defaultformat unable to handle input\n');     
+    whos val
+  end
+  return; 
+
+%% report elements (list, table, image, link)
+
+function str = fmtline(str)
+  % replace some formatting elements depeding on output format
+  global REPORT_OUTPUT_FMT
+  if isempty(str), str = ''; return; end
+  switch REPORT_OUTPUT_FMT, 
+   case {'ps','pdf'}, 
+     str = strrep(str,'<B>',  '{\bf ');
+     str = strrep(str,'<I>',  '{\em ');
+     str = strrep(str,'<TT>', '{\tt ');
+     str = strrep(str,'</B>', '}');
+     str = strrep(str,'</I>', '}');
+     str = strrep(str,'</TT>','}');
+     str = strrep(str,'#','\#'); 
+     str = strrep(str,'%','\%');
+   case 'html', % nil
+   case 'txt', 
+     str = strrep(str,'<B>',  '*');
+     str = strrep(str,'<I>',  '*');
+     str = strrep(str,'<TT>', '');
+     str = strrep(str,'</B>', '*');
+     str = strrep(str,'</I>', '*');
+     str = strrep(str,'</TT>','');
+  end
+  return;
+
+function cs = insertbreak
+    global REPORT_OUTPUT_FMT
+    cs = cell(0); 
+    switch REPORT_OUTPUT_FMT
+    case {'ps','pdf'}, cs{end+1} = '';
+    case 'html', cs{end+1} = '<P>';
+    case 'txt', cs{end+1} = ''; 
+    end   
+    return;
+    
+function insertlist(list,enum)
+  % make list
+  global REPORT_OUTPUT_FMT
+  if nargin<2, enum = 0; end
+  cs = cell(0);
+  switch REPORT_OUTPUT_FMT
+   case {'ps','pdf'}, 
+    if enum, tag = 'enumerate'; else tag = 'itemize'; end
+    starttag = ['\begin{' tag '}'];
+    listtag = '\item ';
+    endtag = ['\end{' tag '}'];
+   case 'html', 
+    if enum, tag = 'OL'; else tag = 'UL'; end
+    starttag = ['<' tag '>'];
+    listtag = '<LI>';
+    endtag = ['</' tag '>'];   
+   case 'txt',
+    starttag = ''; 
+    listtag = '- ';
+    endtag = ''; 
+  end
+  cs{end+1} = starttag;
+  for i=1:length(list), cs{end+1} = sprintf('%s %s',listtag,list{i}); end
+  cs{end+1} = endtag; 
+  return;
+
+function csout = tablerow(cs,emp,span)
+  % construct one table row
+  global REPORT_OUTPUT_FMT
+  if nargin<2 | isempty(emp), emp = 'none'; end
+  if nargin<3 | isempty(span), span = ones(length(cs),2); end
+  rowspan = span(:,1); colspan = span(:,2);
+  switch emp,
+   case 'bold',   emp1 = '<B>';  emp2 = '</B>'; 
+   case 'italic', emp1 = '<I>';  emp2 = '</I>'; 
+   case 'fixed',  emp1 = '<TT>'; emp2 = '</TT>';           
+   case 'none',   emp1 = '';     emp2 = ''; 
+   case 'header', emp1 = '';     emp2 = ''; tag = 'TH';
+  end      
+  csout = cell(0); 
+  switch REPORT_OUTPUT_FMT, 
+   case {'pdf','ps'}, 
+    %switch emp,
+    % case 'bold',   emp1 = '{\bf '; emp2 = '}'; 
+    % case 'italic', emp1 = '{\em '; emp2 = '}'; 
+    % case 'fixed',  emp1 = '{\tt '; emp2 = '}';       
+    % case 'none',   emp1 = '';      emp2 = ''; 
+    %end    
+    s0 = ''; 
+    for i=1:length(cs), 
+      if rowspan(i) & colspan(i), 
+	 sp1 = ''; sp2 = '';
+         if colspan(i)>1, sp1 = [sp1 ' \multicolumn{' num2str(colspan(i)) '}{|c|}{']; sp2 = [sp2 '}']; end
+         if rowspan(i)>1, sp1 = [sp1 ' \multirow{' num2str(rowspan(i)) '}{2cm}{']; sp2 = [sp2 '}']; end
+	 s = s0; 
+	 content = cellstr(defaultformat(cs{i})); 
+	 csout{end+1} = [s sp1 emp1 content{1}]; 
+	 for j=2:length(content), csout{end+1} = content{j}; end
+	 csout{end} = [csout{end} emp2 sp2]; 
+	 s0 = ' & '; 
+      end
+    end
+    csout{end} = [csout{end} ' \\']; 
+   case 'html', 
+    tag = 'TD';
+    csout{end+1} = '<TR>';     
+    for i=1:length(cs),
+      if rowspan(i) & colspan(i), 
+         sp = '';
+         if rowspan(i)>1, sp = [sp ' ROWSPAN=' num2str(rowspan(i))]; end
+         if colspan(i)>1, sp = [sp ' COLSPAN=' num2str(colspan(i))]; end
+         s = sprintf('<%s%s>%s',tag,sp,emp1);
+	     content = cellstr(defaultformat(cs{i})); 
+	     csout{end+1} = [s content{1}]; 
+	     for j=2:length(content), csout{end+1} = content{j}; end
+	     csout{end} = [csout{end} emp2 '</' tag '>']; 
+      end
+    end
+    csout{end+1} = '</TR>'; 
+   case 'txt',
+    for i=1:length(cs), csout{end+1} = defaultformat(cs{i}); end
+  end
+  return;  
+
+function cs = inserttable(sTable,rowlines,long)
+  % put table contents to cellstr
+  global REPORT_OUTPUT_FMT  
+  if nargin<2, rowlines = 1; end
+  if nargin<3, long = 0; end
+  [rows cols] = size(sTable.values);
+  cs = cell(0); 
+  if isempty(sTable.colfmt), cf = 'c'; sTable.colfmt = cf(ones(1,cols)); end
+  if isempty(sTable.span), sTable.span = ones([rows cols 2]); end  
+  switch REPORT_OUTPUT_FMT
+   case {'ps','pdf','tex','latex'}
+    li1 = ' \hline';  
+    if rowlines>0, li2 = li1; li3 = li1; 
+    elseif rowlines==0, li2 = ''; li3 = li1; 
+    else li1 = ''; li2 = ''; li3 = '';  
+    end
+    if long, tbl = 'longtable'; else tbl = 'tabular'; end
+    cs{end+1} = ['\begin{' tbl '}{' sTable.colfmt '}' li1];
+    if ~isempty(sTable.headers), 
+      row = tablerow(sTable.headers,'bold'); 
+      for i=1:length(row), cs{end+1} = row{i}; end
+      cs{end} = [cs{end} li1 li2]; 
+    end
+    for i=1:rows, 
+      row = tablerow(sTable.values(i,:),'',squeeze(sTable.span(i,:,:))); 
+      for i=1:length(row), cs{end+1} = row{i}; end
+      cs{end} = [cs{end} li2]; 
+    end 
+    if ~rowlines, cs{end} = [cs{end} li3]; end
+    cs{end+1} = ['\end{' tbl '}'];
+   case 'html'
+    cs{end+1} = ['<TABLE BORDER=' num2str(rowlines>0) '>'];
+    if ~isempty(sTable.headers), 
+      row = tablerow(sTable.headers,'header'); 
+      for i=1:length(row), cs{end+1} = row{i}; end
+    end
+    for i=1:rows, 
+      row = tablerow(sTable.values(i,:),'',squeeze(sTable.span(i,:,:))); 
+      for i=1:length(row), cs{end+1} = row{i}; end
+    end
+    cs{end+1} = '</TABLE>';
+   case 'txt'
+    cT = [sTable.headers(:)'; sTable.values]; 
+    A = cell2char(cT); 
+    for i=1:size(A,1), cs{end+1} = A(i,:); end        
+  end  
+  return;
+
+function A = cell2char(T)
+
+  [nrow,ncol] = size(T); 
+  rowsep = 0; 
+  colsep = 1;
+
+  % change to strings
+  for i=1:nrow, 
+    for j=1:ncol, 
+      t = T{i,j};
+      if ischar(t),        % ok
+      elseif isempty(t),   T{i,j} = ''; 
+      elseif isstruct(t),  % ??
+      elseif iscell(t),    T{i,j} = cell2char(t); 
+      elseif isnumeric(t), T{i,j} = num2str(t,3); 
+      end
+    end
+  end
+
+  % widths of columns and heights of rows 
+  HW = ones(nrow,ncol,2);
+  for i=1:nrow, for j=1:ncol, HW(i,j,:) = size(T{i,j}); end, end
+  colw = max(HW(:,:,2),[],1); 
+  rowh = max(HW(:,:,1),[],2); 
+
+  % the table itself
+  A = char(32*ones(sum(rowh)+rowsep*(nrow-1),sum(colw)+colsep*(ncol-1)));
+  for i=1:nrow, 
+    for j=1:ncol,
+      i0 = (i-1)*rowsep+sum(rowh(1:i-1));
+      j0 = (j-1)*colsep+sum(colw(1:j-1)); 
+      S = char(32*ones(rowh(i),colw(j))); 
+      si = size(T{i,j}); S(1:si(1),1:si(2)) = T{i,j}; 
+      A(i0+[1:rowh(i)],j0+[1:colw(j)]) = S; 
+    end
+  end
+  return; 
+  
+
+function s = inserttominipage(s,width)
+  if nargin<2 | isempty(width) | isnan(width), width = 1; end
+  width = ['{' num2str(width) '\columnwidth}'];
+  mp1 = '\begin{minipage}[t]'; mp2 = '\end{minipage}';   
+  if size(s,1)==1, s = [mp1 width s mp2];
+  else s = char({[mp1 width]; s; mp2});
+  end
+  return; 
+  
+function cs = insertfigure(fname,boxsize,inminipage)
+  global REPORT_OUTPUT_FMT
+  if nargin<2, boxsize = [NaN 1]; end
+  if nargin<3, inminipage = 0; end
+  htmlpagewidth = 800;
+  si = cell(0); 
+  switch REPORT_OUTPUT_FMT,     
+   case {'ps','pdf'}, 
+    if ~isnan(boxsize(1)), si{end+1} = ['height=' num2str(boxsize(1)) '\textheight']; end
+    if ~isnan(boxsize(2)), si{end+1} = ['width=' num2str(boxsize(2)) '\columnwidth']; end
+    if length(si), si = [', ' joinstr(si, ', ', ', ')]; end
+   case 'html', 
+    if ~isnan(boxsize(1)), si{end+1} = ['HEIGHT=' num2str(htmlpagewidth*boxsize(1))]; end
+    if ~isnan(boxsize(2)), si{end+1} = ['WIDTH=' num2str(htmlpagewidth*boxsize(2))]; end   
+    if length(si), si = [' ' joinstr(si, ' ', ' ')]; end
+   case 'txt', 
+    % nil 
+  end    
+  switch REPORT_OUTPUT_FMT,     
+   case 'ps',   s = ['\epsfig{file=./' fname '.ps ' si '}']; 
+   case 'pdf',  s = ['\includegraphics[' si ']{./' fname '.pdf}'];
+   case 'html', 
+    fn = [fname '.' fmt2imgfmt]; 
+    s = ['<IMG SRC="' fn '" ALIGN="center" ALT="' fname '"' si '>'];
+    s = makelinkfrom(fn,s); 
+   case 'txt', 
+    s = ['[image:' fname ']'];
+  end
+  switch REPORT_OUTPUT_FMT, 
+   case {'ps','pdf'},
+    if inminipage, s = inserttominipage(s,boxsize(2)); end
+   case 'html', 
+    s = ['<CENTER>' s '</CENTER>']; 
+   case 'txt', 
+    % nil
+  end
+  cs = {s};
+  return;
+
+function str = makelinkfrom(linkto,anchor)  
+  global REPORT_OUTPUT_FMT
+  if iscell(linkto), 
+    if strcmp(REPORT_OUTPUT_FMT,'html'), linkto = joinstr(linkto,'','#'); 
+    else linkto = joinstr(linkto,'',''); 
+    end
+  end
+  switch REPORT_OUTPUT_FMT,  
+   case 'pdf',  str = ['\hyperlink{' linkto '}{' anchor '}'];
+   case 'ps',   str = [anchor ' (p.\pageref{' linkto '})']; 
+   case 'html', str = ['<a href="' linkto '">' anchor '</a>']; 
+   case 'txt', str = ''; 
+  end
+  return; 
+      
+function str = makelinkto(linkname)
+  global REPORT_OUTPUT_FMT
+  switch REPORT_OUTPUT_FMT,  
+   case 'pdf', 
+    fmt = '\pdfdest name {%s} fit \pdfoutline goto name {%s} {%s}'; 
+    str = sprintf(fmt,linkname,linkname,linkname);
+   case 'ps',   str = ['\label{' linkname '}']; 
+   case 'html', str = ['<a name="' linkname '"> </a>']; 
+   case 'txt', str = ''; 
+  end
+  return;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/sammon.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,249 @@
+function P = sammon(D, P, varargin)
+
+%SAMMON Computes Sammon's mapping of a data set.
+%
+% P = sammon(D, P, [value], [mode], [alpha], [Mdist])
+%
+%  P = sammon(D,2);            % projection to 2-dim space
+%  P = sammon(sMap,3);         % projects the codebook vectors
+%  P = sammon(sMap,3,[],[],[],Md) % uses distance matrix Md
+%  som_grid(sMap,'Coord',P)    % visualization of map projection
+%
+%  Input and output arguments ([]'s are optional):
+%   D        (matrix) size dlen x dim, data to be projected
+%            (struct) data or map struct            
+%   P        (scalar) output dimension
+%            (matrix) size dlen x odim, initial projection matrix
+%   [value]  (scalar) all different modes (the next argument) require 
+%                     a value, default = 100
+%   [mode]   (string) 'steps' or 'errlimit' or 'errchange' or 'seconds',
+%                     see below, default is 'steps'
+%   [alpha]  (scalar) iteration step size, default = 0.2
+%   [Dist]   (matrix) pairwise distance matrix, size dlen x dlen.
+%                     If the distances in the input space should
+%                     be calculated otherwise than as euclidian
+%                     distances, the distance from each vector
+%                     to each other vector can be given here,
+%                     size dlen x dlen. For example PDIST
+%                     function can be used to calculate the
+%                     distances: Dist = squareform(pdist(D,'mahal'));
+%
+%   P        (matrix) size dlen x odim, the projections
+%
+% The output dimension must be 2 or higher but (naturally) lower 
+% than data set dimension.
+%
+% The mode argument determines the end condition for iteration. If 
+% the mode argument is used, also the value argument has to be 
+% specified. Different mode possibilities are:
+% 'steps'      the iteration is terminated when it is run <value> 
+% 'errlimit'   steps, the iteration is terminated when projection error 
+%              is lower than <value>,
+% 'errchange'  the iteration is terminated when change between 
+%              projection error on two successive iteration rounds
+%	       is less than <value> percent of total error, and
+% 'seconds'    the iteration is terminated after <value> seconds 
+%              of iteration.
+%
+% See also CCA, PCAPROJ, SOM_GRID.
+
+% Reference: Sammon, J.W. Jr., "A nonlinear mapping for data
+%   structure analysis", IEEE Transactions on Computers, vol. C-18,
+%   no. 5, 1969, pp. 401-409.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% juuso 040100 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(2, 6, nargin));  % check no. of input arguments is correct
+
+% input data
+if isstruct(D),
+  if isfield(D, 'data'),         D = D.data; % data struct
+  elseif isfield(D, 'codebook'), D = D.codebook; % map struct
+  else error('Invalid structure');
+  end
+end
+if any(isnan(D(:))), 
+  error('Cannot make Sammon''s projection for data with unknown components')
+end 
+
+% compute data dimensions
+orig_si = size(D); 
+dim = orig_si(end); 
+noc = prod(orig_si)/dim;
+if length(orig_si)>2, D = reshape(D,[noc dim]); end
+
+% output dimension / initial projection matrix
+if prod(size(P))==1, 
+  odim = P; 
+  P = rand(noc,odim)-0.5; 
+else 
+  si = size(P);
+  odim = si(end);
+  if prod(si) ~= noc*odim, 
+    error('Initial projection matrix size does not match data size');
+  end
+  if length(si)>2, P = reshape(P,[noc odim]); end
+  inds = find(isnan(P)); 
+  if length(inds), P(inds) = rand(size(inds)); end
+end
+if odim > dim | odim < 2, 
+  error('Output dimension must be within [2, dimension of data]');
+end
+
+% determine operating mode
+if nargin < 3 | isempty(varargin{1}) | isnan(varargin{1}), value=100;
+else value = varargin{1}; 
+end
+  
+if nargin < 4 | isempty(varargin{2}) | isnan(varargin{2}), mode='steps';
+else mode = varargin{2}; 
+end  
+switch mode,
+case 'steps',     runlen = value;
+case 'errlimit',  errlimit = value;
+case 'errchange', errchange = value; e_prev = 0;
+case 'seconds',   endtime = value;
+otherwise, error(['Illegal mode: ' mode]);
+end
+
+% iteration step size
+if nargin > 4, alpha = varargin{3}; else alpha = NaN; end
+if isempty(alpha) | isnan(alpha), alpha = 0.2; end
+
+% mutual distances
+if nargin > 5, Mdist = varargin{4}; else Mdist = []; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialization
+
+% these are used quite frequently
+noc_x_1  = ones(noc, 1); 
+odim_x_1 = ones(odim,1); 
+
+% compute mutual distances between vectors
+if isempty(Mdist) | all(isnan(Mdist(:))),  
+  fprintf(2, 'computing mutual distances\r');
+  dim_x_1 = ones(dim,1);
+  for i = 1:noc,
+    x = D(i,:); 
+    Diff = D - x(noc_x_1,:);
+    N = isnan(Diff);
+    Diff(find(N)) = 0; 
+    Mdist(:,i) = sqrt((Diff.^2)*dim_x_1);
+    N = find(sum(N')==dim); %mutual distance unknown
+    if ~isempty(N), Mdist(N,i) = NaN; end
+  end
+else
+  % if the distance matrix is output from PDIST function
+  if size(Mdist,1)==1, Mdist = squareform(Mdist); end
+  if size(Mdist,1)~=noc, 
+    error('Mutual distance matrix size and data set size do not match'); 
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+if strcmp(mode, 'seconds'), tic; end;
+fprintf(2, 'iterating                    \r');
+
+% sammon iteration   
+
+x  = P ;
+xu = zeros(noc, odim);
+xd = zeros(noc, odim);
+dq = zeros(noc, 1);
+dr = zeros(noc, 1);
+
+i = 0;
+ready = 0;
+while ~ready
+  for j = 1:noc,
+    xd      = -x + x(j*noc_x_1,:);
+    xd2     = xd.^2;
+    dpj     = sqrt(sum(xd2'))';
+    dq      = Mdist(:,j) - dpj;
+    dr      = Mdist(:,j) .* dpj;
+    ind     = find(dr ~= 0);
+    term    = dq(ind) ./ dr(ind);
+    e1      = sum(xd(ind,:) .* term(:,odim_x_1));
+    term2   = ((1.0 + dq(ind) ./ dpj(ind)) ./ dpj(ind)) ./ dr(ind);
+    e2      = sum(term) - sum(xd2(ind,:) .* term2(:,odim_x_1));
+    xu(j,:) = x(j,:) + alpha * e1 ./ abs(e2);
+  end
+
+  % move the center of mass to the center 
+
+  c = sum(xu) / noc;
+  x = xu - c(noc_x_1, :);
+
+  i = i + 1;
+
+  % compute mapping error
+  % doing this adds about 25% to computing time  
+  if 0,
+    e = 0; tot = 0;
+    for j = 2:noc, 
+      d   = Mdist(1:(j - 1), j);
+      tot = tot + sum(d);
+      ind = find(d ~= 0);
+      xd  = -x(1:(j - 1), :) + x(j * ones(j - 1, 1), :);
+      ee  = d - sqrt(sum(xd'.^2))';
+      e   = e + sum(ee(ind).^2 ./ d(ind));
+    end
+    e = e/tot; 
+    fprintf(2, '\r%d iterations, error %f', i, e);
+  else
+    fprintf(2, '\r%d iterations', i);
+  end
+  
+  % determine is the iteration ready
+  
+  switch mode
+    case 'steps', 
+      if i == runlen, ready = 1; end;
+    case 'errlimit',
+      if e < errlimit, ready = 1; end;
+    case 'errchange',
+      if i > 1
+	change = 100 * abs(e - e_prev) / e_prev;
+	if change < errchange, ready = 1; end;
+	fprintf(2, ', change of error %f %%    ', change);
+      end
+      e_prev = e;
+    case 'seconds'
+      if toc > endtime, ready = 1; end;
+      fprintf(2, ', elapsed time %f seconds  ', toc);
+  end
+  fprintf(2, '        ');
+  
+  % If you want to see the Sammon's projection plotted (in 2-D and 3-D case),
+  % execute the code below; it is not in use by default to speed up 
+  % computation.  
+  if 0, 
+    clf
+    if odim == 1,     plot(x(:,1), noc_x_1, 'o');
+    elseif odim == 2, plot(x(:,1), x(:,2), 'o');
+    else              plot3(x(:,1), x(:,2), x(:,3), 'o')
+    end
+    drawnow
+  end
+end
+
+fprintf(2, '\n');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% clean up
+
+% reshape
+orig_si(end) = odim; 
+P = reshape(x, orig_si);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_autolabel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,237 @@
+function [sTo] = som_autolabel(sTo, sFrom, mode, inds)
+
+%SOM_AUTOLABEL Automatical labeling, or clearing of labels.
+%
+% sTo = som_autolabel(sTo, sFrom, [mode], [inds])
+%
+%   sM = som_autolabel(sM,sD);      
+%   sD = som_autolabel(sD,sM);   
+%   sM = som_autolabel(sM,sD,'vote',[5]);
+%
+%  Input and output arguments ([]'s are optional): 
+%   sTo      (struct) data or map struct to which the labels are put,
+%                     the modified struct is returned
+%   sFrom    (struct) data or map struct from which the labels are taken
+%   [mode]   (string) labeling algorithm: 'add' (the default), 'freq' 
+%                     or 'vote'
+%   [inds]   (vector) the column-indexes of the labels that are to be
+%                     used in the operation (e.g. [2] would mean to use
+%                     only the second column of labels array in sFrom) 
+% 
+% The modes:
+%  'add':   all labels from sFrom are added to sTo (even multiple
+%           copies of same)  
+%  'add1':  only one instance of each label is kept
+%  'freq':  only one instance of each label is kept and '(#)', where 
+%           # is the frequency of the label, is added to the end of 
+%           the label. Labels are ordered according to frequency. 
+%  'vote':  only the label with most instances is kept
+%
+% NOTE: The operations are only performed for the new labels. 
+%       The old labels in sTo are left as they are.
+% NOTE: all empty labels ('') are ignored.
+%
+% For more help, try 'type som_autolabel' or check out online documentation.
+% See also SOM_LABEL, SOM_BMUS, SOM_SHOW_ADD, SOM_SHOW.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_autolabel
+%
+% PURPOSE
+%
+% Automatically label to map/data structs based on given data/map.
+%
+% SYNTAX
+%
+%  sTo = som_autolabel(sTo, sFrom)
+%  sTo = som_autolabel(sTo, sFrom, 'add')
+%  sTo = som_autolabel(sTo, sFrom, 'freq')
+%  sTo = som_autolabel(sTo, sFrom, 'vote')
+%  sTo = som_autolabel(..., inds)
+%
+% DESCRIPTION
+%
+% This function automatically labels given map/data struct based on an
+% already labelled data/map struct. Basically, the BMU of each vector in the
+% sFrom struct is found from among the vectors in sTo, and the vectors in
+% sFrom are added to the corresponding vector in the sTo struct. The actual
+% labels to add are selected based on the mode ('add', 'freq' or 'vote').
+%
+%  'add'  :  all labels from sFrom are added to sTo - even if there would 
+%            be multiple instances of the same label
+%  'add1' :  only one instance of each label is kept
+%  'freq' :  only one instance of each label is kept and '(#)', where 
+%            # is the frequency of the label, is added to the end of 
+%            the label. Labels are ordered according to frequency. 
+%  'vote' :  only the label with most instances is added
+%
+% Note that these operations do not effect the old labels of sTo: they 
+% are left as they were.  
+% 
+% NOTE: empty labels ('') are ignored.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%   sTo    (struct) data or map struct to which the labels are put 
+%   sFrom  (struct) data or map struct from which the labels are taken
+%
+% OPTIONAL INPUT ARGUMENTS 
+%
+%   mode   (string) The mode of operation: 'add' (default), 
+%                   'add1', 'freq' or 'vote'
+%   inds   (vector) The columns of the '.labels' field in sFrom to be 
+%                   used in operation
+%
+% OUTPUT ARGUMENTS
+% 
+%   sTo    (struct) the given data/map struct with modified labels
+% 
+% EXAMPLES
+%
+% To label a trained map based on (labelled) training data, just do
+%
+%  sM = som_autolabel(sM,sD);      
+%
+% This operation is sometimes called "calibration" in the literature.
+% You can also do this the other way around: use a labelled map to 
+% label a data set: 
+%
+%  sD = som_autolabel(sD,sM);   
+%
+% If you only want a single instance of each label, use the 'freq' mode: 
+%
+%  sM = som_autolabel(sM,sD,'freq');
+%
+% If you already have labels in the struct, and want to perform 'freq' on 
+% them, do the following: 
+%
+%  sMtemp = som_label(sM,'clear','all'); % make a map struct with no labels
+%  sM = som_autolabel(sMtemp,sM,'freq'); % add labels to it
+%
+% The third mode 'vote' votes between the labels and only adds the one
+% which is most frequent. If two labels are equally frequent, one or the
+% other is chosen based on which appears first in the list.
+%
+%  sM = som_autolabel(sM,sD,'vote');
+%
+% The lat argument is useful if you have specific labels in each column
+% of the '.labels' field. For example, the first column might be an
+% identifier, the next a typecode and the last a year. In this case, you
+% might want to label the map based only on the typecode: 
+% 
+%  sM  = som_autolabel(sM,sD,'vote',2);
+%
+% SEE ALSO
+% 
+%  som_label     Give/remove labels from a map/data set.
+%  som_bmus      Find BMUs from the map for the given set of data vectors.
+%  som_show      Show map planes.
+%  som_show_add  Add for example labels to the SOM_SHOW visualization.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 101297 
+% Version 2.0beta juuso 101199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(2, 4, nargin));  % check no. of input args is correct
+
+% sTo
+todata = strcmp(sTo.type,'som_data');
+
+% sFrom 
+[dummy m] = size(sFrom.labels);
+
+% mode
+if nargin<3 | isempty(mode), mode = 'add'; end
+
+% inds
+if nargin<4, inds = 1:m; end
+inds = inds(find(inds>0 & inds<=m));
+  
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% get a list of the labels to be added to each vector
+
+% calculate BMUs
+if todata, bmus = som_bmus(sFrom,sTo,1);
+else bmus = som_bmus(sTo,sFrom,1); end
+
+% for each vector in sTo, make a list of all new labels
+Labels = cell(size(sTo.labels,1),1);
+for d=1:length(bmus), 
+  m = bmus(d); 
+  if todata, t = d; f = m; else t = m; f = d; end
+  if ~isnan(m), 
+    % add the labels
+    for j=1:length(inds), 
+      if ~isempty(sFrom.labels{f,inds(j)}), 
+        Labels{t}{length(Labels{t})+1} = sFrom.labels{f,inds(j)}; 
+      end
+    end 
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% insert the labels to sTo
+
+
+if strcmp(mode,'add1') | strcmp(mode,'freq') | strcmp(mode,'vote'),
+
+  % modify the Labels array apprpriately
+  
+  for i=1:length(Labels),
+    
+    % calculate frequency of each label in each node
+    new_labels = {};
+    new_freq = [];
+    for j=1:length(Labels{i}),
+      if isempty(Labels{i}{j}), % ignore
+      elseif ~any(strcmp(Labels{i}{j},new_labels)), % a new one!
+	k = length(new_labels) + 1;
+	new_labels{k} = Labels{i}{j};
+	new_freq(k) = sum(strcmp(new_labels{k},Labels{i}));
+      else, % an old one, ignore       
+      end
+    end
+    
+    % based on frequency, select label(s) to be added 
+    if length(new_labels) > 0,
+      if strcmp(mode,'add1'), 
+	Labels{i} = new_labels;
+      else
+      
+	% sort labels according to frequency
+	[dummy order] = sort(1./(1+new_freq));
+	new_labels = new_labels(order);
+	new_freq = new_freq(order);
+	
+	switch mode,
+	 case 'freq', 
+	  % replace each label with 'label(#)' where # is the frequency
+	  for j=1:length(new_labels), 
+	    labf = sprintf('%s(%d)',new_labels{j},new_freq(j));
+	    new_labels{j} = labf;
+	  end
+	  Labels{i} = new_labels;
+	 case 'vote',
+	  % place only the one with most votes 
+	  Labels{i} = {new_labels{1}};
+	end 
+      end 
+    end
+    
+  end
+
+end
+
+sTo = som_label(sTo,'add',[1:length(Labels)]',Labels);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_barplane.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,444 @@
+function h = som_barplane(varargin)
+
+%SOM_BARPLANE Visualize the map prototype vectors as bar charts
+%
+% h = som_barplane(lattice, msize, data, [color], [scaling], [gap], [pos])
+% h = som_barplane(topol, data, [color], [scaling], [gap], [pos])
+%
+%  som_barplane('hexa',[5 5], rand(25,4), jet(4)) 
+%  som_barplane(sM, sM.codebook,'none')
+% 
+%  Input and output argumetns ([]'s are optional):
+%   lattice   (string) grid 'hexa' or 'rect'
+%   msize     (vector) size 1x2, defines the map grid size msize, M=prod(msize)
+%             (matrix) size Mx2, gives explicit coordinates for each node:
+%                      in this case the first argument does not matter.
+%   topol     (struct) map or topology struct
+%   data      (matrix) size Mxd, each row defines heights of the bars
+%   [color]   (matrix) size dx3, of RGB triples. The rows define colors 
+%                      for each bar in a node. Default is hsv(d). A ColorSpec or
+%             (string) A ColorSpec or 'none' gives each bar the same color.       
+%   [scaling] (string) 'none', 'unitwise' or 'varwise'. The scaling
+%                      mode for the values. Default is 'varwise'.
+%   [gap]     (scalar) Defines the gap between bars, limits: 0 <= gap <= 1 
+%                      where 0=no gap, 1=bars are thin lines. Default is 0.25.
+%   [pos]     (vector) 1x2 vector defines the position of origin.
+%                      Default is [1 1].
+%
+%   h         (scalar) the object handle to the PATCH object
+% 
+% Axis are set as in SOM_CPLANE.
+%
+% For more help, try 'type som_barplane' or check out online documentation.
+% See also SOM_CPLANE, SOM_PLOTPLANE, SOM_PIEPLANE.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_barplane
+%
+% PURPOSE
+% 
+% Visualizes the map prototype vectors as bar charts.
+%
+% SYNTAX
+%
+%  h = som_barplane(topol, data)
+%  h = som_barplane(lattice, msize, data)
+%  h = som_barplane(..., color)
+%  h = som_barplane(..., color, scaling)
+%  h = som_barplane(..., color, scaling, gap)
+%  h = som_barplane(..., color, scaling, gap, pos)
+%
+% DESCRIPTION
+%
+% Visualizes the map prototype vectors as bar charts.
+%
+% REQUIRED INPUT ARGUMENTS
+% 
+% lattice     The basic shape of the map units 
+%    (string) 'hexa' or 'rect' positions the bar charts according to
+%             hexagonal or rectangular map lattice
+%
+% msize       The size of the map grid     
+%    (vector) [n1 n2] vector defines the map size (height: n1 units widht: n2
+%             units, total: M=n1xn2 units). The units will be placed to their
+%             topological locations in order to form a uniform hexagonal or 
+%             rectangular grid.
+%    (matrix) Mx2 matrix defines arbitary coordinates for the N units. In 
+%             this case the argument 'lattice' has no effect
+%
+% topol    Topology of the map grid
+%
+%   (struct) map or topology struct from which the topology is taken
+%
+% data        The data to use when constructing the bar charts.
+%             Typically, the map codebook or some of its components.
+%    (matrix) Mxd matrix. A row defines heights of the bars.
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+% Note: if unspecified or given an empty value ('' or []), default
+% values are used for optional input arguments.
+%
+% color       The color of the bars in each pie
+%    (ColorSpec) or (string) 'none' gives the same color for each slice.
+%    (matrix) dx3 matrix assigns an RGB color determined by the dth row of
+%             the matrix to the dth bar (variable) in each bar plot. 
+%             Default value is hsv(d).
+%
+% scaling     How to scale the values  
+%    (string) 'none', 'unitwise' or 'varwise'. This determines the 
+%             scaling of codebook values when drawing the bars.  
+%
+%             'none' don't scale at all. The bars are not limited
+%              to remain inside he units' area: That is, if value of
+%              some variable exceeds [-.625,.625] for 'rect' (and
+%              in "worst case" [-.5,-.5] for 'hexa') the bars may
+%              overlap other units. 
+%             
+%              Base line (zero value line) 
+%              - is in the middle of the unit if data (codebook) contains both 
+%                negative and positive values (or is completely zero).
+%              - is in the top the unit if data (codebook) contains only
+%                non-positive values (everything <=0).
+%              - is in the bottom the unit if data (codebook) contains only
+%                non-negative values (everything >=0).
+% 
+%             'varwise' scales values so that each variable is scaled separately 
+%              so that when it gets its overall maximum value, the
+%              corresponding bar gets maximum range and for minimum value
+%              it gets the minimum range. Baseline: see scaling 'none' 
+%              This is the default.
+%             
+%             'unitwise' scales values in each unit individually so that the 
+%              bars for variables having minimum and maximum values have minimum 
+%              and maximum range inside each unit, respectively. 
+%              In this case the zero value line may move depending on the values. 
+% 
+
+% gap         The gap between bars        
+%    (scalar) 0: no gap: bars are glued together 
+%             ... default value is 0.25       
+%             1: maximum gap: bars are thin lines 
+% 
+% pos         Position of origin          
+%    (vector) size 1x2. This is meant for drawing the plane in arbitrary 
+%             location in a figure. Note the operation: if this argument is
+%             given, the axis limits setting part in the routine is skipped and 
+%             the limits setting will be left to be done by MATLAB's defaults. 
+%             Default is [1 1].
+%
+% OUTPUT ARGUMENTS
+%
+%  h (scalar) handle to the created patch object
+%
+% OBJECT TAGS     
+%
+%  One object handle is returned: field Tag is set to 'planeBar'       
+%
+% FEATURES
+%
+%  - The colors are fixed: changing colormap in the figure (see help
+%    colormap) will not change the coloring of the bars.
+%
+% EXAMPLES
+%
+% %%% Create the data and make a map 
+%    
+% data=rand(100,5); map=som_make(data);
+% 
+% %%% Create a 'jet' colormap that has as many rows as the data has variables
+%    
+% colors=jet(5);
+% 
+% %%% Draw bars
+%    
+% som_barplane(map.topol.lattice, map.topol.msize, map.codebook, colors);
+% or som_barplane(map.topol, map.codebook, colors);
+% or som_barplane(map, map.codebook, colors);
+% 
+% %%% Draw the bars so that the gap between the bars is bigger and all 
+%     bars are black
+%
+% som_barplane(map, map.codebook, 'k', '', 0.6);
+% 
+% SEE ALSO
+%
+% som_cplane     Visualize a 2D component plane, u-matrix or color plane
+% som_plotplane  Visualize the map prototype vectors as line graphs
+% som_pieplane   Visualize the map prototype vectors as pie charts
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Juha P 110599, Johan 140799, juuso 151199 140300 070600
+
+%%% Check & Init arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+[nargin, lattice, msize, data, color, scaling, gap, pos] = vis_planeGetArgs(varargin{:});
+error(nargchk(3, 7, nargin))   % check that no. of input args is correct
+
+% Check pos
+
+if nargin < 7 | isempty(pos)
+  pos=NaN;                            % default value for pos (no translation) 
+elseif ~vis_valuetype(pos,{'1x2'})
+  error('Position of origin has to be given as an 1x2 vector');
+end
+
+% Check gap
+
+if nargin < 6 | isempty(gap),  
+  gap=0.25;                           % default value for gap
+elseif ~vis_valuetype(gap, {'1x1'}),
+  error('Gap value must be scalar.');
+elseif ~(gap >= 0 & gap<=1) 
+  error('Gap value must be in interval [0,1].')
+end
+
+% Check scaling
+
+if nargin < 5 | isempty(scaling),
+  scaling='varwise';
+elseif ~vis_valuetype(scaling,{'string'}) | ... 
+      ~any(strcmp(scaling,{'none','unitwise','varwise'})),
+  error('scaling sholud be ''none'', ''unitwise'' or ''varwise''.');
+end
+  
+% Check msize
+
+if ~vis_valuetype(msize,{'1x2','nx2'}),
+  error('msize has to be 1x2 grid size vector or a Nx2 coordinate matrix.');
+end
+
+% Check data
+
+if ~isnumeric(data),
+  error('Data matrix has to be numeric.');
+elseif length(size((data)))>2
+  error('Data matrix has too many dimensions!');
+else
+  d=size(data,2);
+  N=size(data,1);
+end
+
+s=.8;                                 % patch size scaling factor
+
+switch scaling,
+case 'none'  
+  % no scaling: don't scale
+  % Check data max and min values
+  positive=any(data(:)>0); negative=any(data(:)<0);
+  if (positive & negative) | (~positive & ~negative),
+    % Data contains both negative and positive values (or is
+    % completely zero) baseline to centre
+    zeroline='zero';
+  elseif positive & ~negative
+    % Data contains only positive values: baseline to bottom
+    zeroline='bottom';
+  elseif ~positive & negative
+    % Data contains only negative values: baseline to top
+    zeroline='top';
+  end
+case 'unitwise'
+  % scale the variables so that the bar for variable with the maximum 
+  % value in the unit spans to the upper edge of the unit
+  % and the bar for the variable with minimum value spans to the lower edge,
+  % respectively.
+  zeroline='moving';
+ case 'varwise'
+  % Check data max and min values
+  positive=any(data(:)>0); negative=any(data(:)<0);
+  if (positive & negative) | (~positive & ~negative),
+    % Data contains both negative and positive values (or is
+    % completely zero) baseline to
+    % centre, scale data so that it doesn't overflow
+    data=data./repmat(max(abs([max(data); min(data)])),N,1)*.5;
+    zeroline='zero';
+  elseif positive & ~negative
+    % Data contains only positive values: baseline to
+    % bottom, scale data so that it doesn't overflow
+    data=data./repmat(max(abs([max(data); min(data)])),N,1)*.5;
+    zeroline='bottom';
+  elseif ~positive & negative
+    % Data contains only negative values: baseline to
+    % top, scale data so that it doesn't overflow
+    zeroline='top';
+    data=data./repmat(max(abs([max(data); min(data)])),N,1)*.5;
+  end
+otherwise
+  error('Unknown scaling mode?');
+end
+
+for i=1:N,                            % calculate patch coordinates for
+  v=data(i,:);
+  [nx,ny]=vis_barpatch(v,gap,zeroline); % bars
+  barx(:,(1+(i-1)*d):(i*d))=s*nx;
+  bary(:,(1+(i-1)*d):(i*d))=s*ny;        
+end
+l=size(barx,1);
+
+if size(msize,1) == 1,
+  xdim=msize(2);
+  ydim=msize(1);
+  if xdim*ydim~=N 
+    error('Data matrix has wrong size.');
+  else
+    y=reshape(repmat(1:ydim,d,1),1,d*ydim); y=repmat(repmat(y,l,1),1,xdim);
+    x=reshape(repmat(1:xdim,l*ydim*d,1),l,N*d);  
+  end
+else
+  x=reshape(repmat(msize(:,1),1,l*d)',l,d*N);
+  y=reshape(repmat(msize(:,2),1,l*d)',l,d*N);
+  if N ~= size(msize,1),
+    error('Data matrix has wrong size.');
+  else
+    lattice='rect'; 
+    if isnan(pos),
+      pos=[0 0];
+    end
+  end
+end
+
+% Check lattice
+
+if ~ischar(lattice)
+  error('Invalid lattice.');
+end
+
+switch lattice                      
+case {'hexa','rect'}
+  pos=pos-1;
+otherwise
+  error([ 'Lattice' lattice ' not implemented!']);
+end  
+
+% Check color
+% C_FLAG is for color 'none'
+
+if nargin < 4 | isempty(color)
+  color=hsv(d);                       % default n hsv colors
+end
+if ~vis_valuetype(color, {[d 3],'nx3rgb'},'all') & ...
+  ~vis_valuetype(color,{'colorstyle','1x3rgb'})
+error('The color matrix has wrong size or has invalid values.');
+elseif ischar(color) & strcmp(color,'none')
+  C_FLAG=1;
+  color='w';
+else
+  C_FLAG=0;
+end
+
+%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Making lattice.
+% Command view([0 90]) shows the map in 2D properly oriented
+
+switch lattice
+  case 'hexa'
+   t=find(rem(y(1,:),2));                        % move even rows by .5
+   x(:,t)=x(:,t)-.5; 
+   x=x+barx+.5; 
+   y=y+bary;   
+  case 'rect' 
+   x=x+barx; 
+   y=y+bary;         
+end
+
+% NB: The coordinates in hexa are not uniform in order to get even  
+% y-coordinates for the nodes. This is handled by setting _axis scaling_ 
+% so that the hexa-nodes look like uniform hexagonals. See 
+% vis_PlaneAxisProperties
+
+if ~isnan(pos)
+  x=x+pos(1);y=y+pos(2);               % move upper left corner 
+end                                    % to pos
+
+%% Set axes properties  
+
+ax=newplot;                            % get current axis
+vis_PlaneAxisProperties(ax,lattice, msize, pos);                         
+
+%% Rearrange dx3 color matrix
+
+if ~isstr(color) & size(color,1)~=1,
+  color=reshape(repmat(color,N,1),[1 N*d 3]);
+end
+
+%% Draw the plane! 
+
+if isnumeric(color), 
+  % explicit color settings by RGB-triplets won't work with 
+  % patch in 'painters' mode, unless there only a single triplet
+  si = size(color); 
+  if length(si)~=2 | any(si==[1 3]), set(gcf,'renderer','zbuffer'); end
+end
+
+h_=patch(x,y,color);
+
+if C_FLAG
+  set(h_,'FaceColor','none');
+end
+
+set(h_,'Tag','planeBar');              % tag the object 
+
+%%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargout>0, h=h_; end                % Set h only if 
+                                       % there really is output
+
+%%% Subfunctions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [xcoord,ycoord]=vis_barpatch(y,gap,zeroline)
+
+x = length(y);
+d = gap/(2*(x-1)+2);
+step= -.5:1/x:.5;
+
+miny=min(y);
+maxy=max(y);
+
+switch(zeroline)
+ case 'moving'
+  if miny < 0 
+    if maxy > 0
+      zl = .5 - (abs(miny)/(maxy-miny));    %reverse mode
+      y= .5 - ((y-miny*ones(1,x))./(maxy-miny));
+    else
+      zl = -.5;
+      y=-.5+abs(y./miny);
+    end
+  else
+    zl = .5;    %reverse mode
+    y=.5-y./maxy;
+  end
+ case 'moveNotScale'
+  if miny < 0
+    if maxy > 0
+      zl = 0.5+miny;
+      y = zl - y; 
+    else
+      zl=-.5;
+      y=-.5+abs(y);
+    end
+  else
+    zl=.5;
+    y =.5-y;
+  end
+ case 'zero'
+  zl=0; y=zl-y; 
+ case 'top'
+  zl=-.5; y=zl-2*y; 
+ case 'bottom'
+  zl=.5; y=zl-2*y; 
+end
+
+for i=1:x
+  xcoord(:,i) = [d+step(i);d+step(i);step(i+1)-d;step(i+1)-d;d+step(i)];
+  ycoord(:,i) = [zl;y(i);y(i);zl;zl];
+end
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_batchtrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,539 @@
+function [sMap,sTrain] = som_batchtrain(sMap, D, varargin)
+
+%SOM_BATCHTRAIN  Use batch algorithm to train the Self-Organizing Map.
+%
+% [sM,sT] = som_batchtrain(sM, D, [argID, value, ...])
+% 
+%  sM     = som_batchtrain(sM,D);
+%  sM     = som_batchtrain(sM,sD,'radius',[10 3 2 1 0.1],'tracking',3);
+%  [M,sT] = som_batchtrain(M,D,'ep','msize',[10 3],'hexa');
+%
+%  Input and output arguments ([]'s are optional): 
+%   sM      (struct) map struct, the trained and updated map is returned
+%           (matrix) codebook matrix of a self-organizing map
+%                    size munits x dim or  msize(1) x ... x msize(k) x dim
+%                    The trained map codebook is returned.
+%   D       (struct) training data; data struct
+%           (matrix) training data, size dlen x dim
+%   [argID, (string) See below. The values which are unambiguous can 
+%    value] (varies) be given without the preceeding argID.
+%
+%   sT      (struct) learning parameters used during the training
+%
+% Here are the valid argument IDs and corresponding values. The values which
+% are unambiguous (marked with '*') can be given without the preceeding argID.
+%   'mask'       (vector) BMU search mask, size dim x 1
+%   'msize'      (vector) map size
+%   'radius'     (vector) neighborhood radiuses, length 1, 2 or trainlen
+%   'radius_ini' (scalar) initial training radius
+%   'radius_fin' (scalar) final training radius
+%   'tracking'   (scalar) tracking level, 0-3 
+%   'trainlen'   (scalar) training length in epochs
+%   'train'     *(struct) train struct, parameters for training
+%   'sTrain','som_train'  = 'train'
+%   'neigh'     *(string) neighborhood function, 'gaussian', 'cutgauss',
+%                         'ep' or 'bubble'
+%   'topol'     *(struct) topology struct
+%   'som_topol','sTopol'  = 'topol'
+%   'lattice'   *(string) map lattice, 'hexa' or 'rect'
+%   'shape'     *(string) map shape, 'sheet', 'cyl' or 'toroid'
+%   'weights'    (vector) sample weights: each sample is weighted 
+%
+% For more help, try 'type som_batchtrain' or check out online documentation.
+% See also  SOM_MAKE, SOM_SEQTRAIN, SOM_TRAIN_STRUCT.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_batchtrain
+%
+% PURPOSE
+%
+% Trains a Self-Organizing Map using the batch algorithm. 
+%
+% SYNTAX
+%
+%  sM = som_batchtrain(sM,D);
+%  sM = som_batchtrain(sM,sD);
+%  sM = som_batchtrain(...,'argID',value,...);
+%  sM = som_batchtrain(...,value,...);
+%  [sM,sT] = som_batchtrain(M,D,...);
+%
+% DESCRIPTION
+%
+% Trains the given SOM (sM or M above) with the given training data
+% (sD or D) using batch training algorithm.  If no optional arguments
+% (argID, value) are given, a default training is done. Using optional
+% arguments the training parameters can be specified. Returns the
+% trained and updated SOM and a train struct which contains
+% information on the training.
+%
+% REFERENCES
+%
+% Kohonen, T., "Self-Organizing Map", 2nd ed., Springer-Verlag, 
+%    Berlin, 1995, pp. 127-128.
+% Kohonen, T., "Things you haven't heard about the Self-Organizing
+%    Map", In proceedings of International Conference
+%    on Neural Networks (ICNN), San Francisco, 1993, pp. 1147-1156.
+%
+% KNOWN BUGS
+%
+% Batchtrain does not work correctly for a map with a single unit. 
+% This is because of the way 'min'-function works. 
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  sM          The map to be trained. 
+%     (struct) map struct
+%     (matrix) codebook matrix (field .data of map struct)
+%              Size is either [munits dim], in which case the map grid 
+%              dimensions (msize) should be specified with optional arguments,
+%              or [msize(1) ... msize(k) dim] in which case the map 
+%              grid dimensions are taken from the size of the matrix. 
+%              Lattice, by default, is 'rect' and shape 'sheet'.
+%  D           Training data.
+%     (struct) data struct
+%     (matrix) data matrix, size [dlen dim]
+%  
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments can be given as 'argID',value -pairs. If an
+%  argument is given value multiple times, the last one is
+%  used. The valid IDs and corresponding values are listed below. The values 
+%  which are unambiguous (marked with '*') can be given without the 
+%  preceeding argID.
+%
+%  Below is the list of valid arguments: 
+%   'mask'       (vector) BMU search mask, size dim x 1. Default is 
+%                         the one in sM (field '.mask') or a vector of
+%                         ones if only a codebook matrix was given.
+%   'msize'      (vector) map grid dimensions. Default is the one
+%                         in sM (field sM.topol.msize) or 
+%                         'si = size(sM); msize = si(1:end-1);' 
+%                         if only a codebook matrix was given. 
+%   'radius'     (vector) neighborhood radius 
+%                         length = 1: radius_ini = radius
+%                         length = 2: [radius_ini radius_fin] = radius
+%                         length > 2: the vector given neighborhood
+%                                     radius for each step separately
+%                                     trainlen = length(radius)
+%   'radius_ini' (scalar) initial training radius
+%   'radius_fin' (scalar) final training radius
+%   'tracking'   (scalar) tracking level: 0, 1 (default), 2 or 3
+%                         0 - estimate time 
+%                         1 - track time and quantization error 
+%                         2 - plot quantization error
+%                         3 - plot quantization error and two first 
+%                             components 
+%   'trainlen'   (scalar) training length in epochs
+%   'train'     *(struct) train struct, parameters for training. 
+%                         Default parameters, unless specified, 
+%                         are acquired using SOM_TRAIN_STRUCT (this 
+%                         also applies for 'trainlen', 'radius_ini' 
+%                         and 'radius_fin').
+%   'sTrain', 'som_topol' (struct) = 'train'
+%   'neigh'     *(string) The used neighborhood function. Default is 
+%                         the one in sM (field '.neigh') or 'gaussian'
+%                         if only a codebook matrix was given. Other 
+%                         possible values is 'cutgauss', 'ep' and 'bubble'.
+%   'topol'     *(struct) topology of the map. Default is the one
+%                         in sM (field '.topol').
+%   'sTopol', 'som_topol' (struct) = 'topol'
+%   'lattice'   *(string) map lattice. Default is the one in sM
+%                         (field sM.topol.lattice) or 'rect' 
+%                         if only a codebook matrix was given. 
+%   'shape'     *(string) map shape. Default is the one in sM
+%                         (field sM.topol.shape) or 'sheet' 
+%                         if only a codebook matrix was given. 
+%   'weights'    (vector) weight for each data vector: during training, 
+%                         each data sample is weighted with the corresponding
+%                         value, for example giving weights = [1 1 2 1] 
+%                         would have the same result as having third sample
+%                         appear 2 times in the data
+%
+% OUTPUT ARGUMENTS
+% 
+%  sM          the trained map
+%     (struct) if a map struct was given as input argument, a 
+%              map struct is also returned. The current training 
+%              is added to the training history (sM.trainhist).
+%              The 'neigh' and 'mask' fields of the map struct
+%              are updated to match those of the training.
+%     (matrix) if a matrix was given as input argument, a matrix
+%              is also returned with the same size as the input 
+%              argument.
+%  sT (struct) train struct; information of the accomplished training
+%
+% EXAMPLES
+%
+% Simplest case:
+%  sM = som_batchtrain(sM,D);  
+%  sM = som_batchtrain(sM,sD);  
+%
+% To change the tracking level, 'tracking' argument is specified:
+%  sM = som_batchtrain(sM,D,'tracking',3);
+%
+% The change training parameters, the optional arguments 'train','neigh',
+% 'mask','trainlen','radius','radius_ini' and 'radius_fin' are used. 
+%  sM = som_batchtrain(sM,D,'neigh','cutgauss','trainlen',10,'radius_fin',0);
+%
+% Another way to specify training parameters is to create a train struct:
+%  sTrain = som_train_struct(sM,'dlen',size(D,1));
+%  sTrain = som_set(sTrain,'neigh','cutgauss');
+%  sM = som_batchtrain(sM,D,sTrain);
+%
+% By default the neighborhood radius goes linearly from radius_ini to
+% radius_fin. If you want to change this, you can use the 'radius' argument
+% to specify the neighborhood radius for each step separately:
+%  sM = som_batchtrain(sM,D,'radius',[5 3 1 1 1 1 0.5 0.5 0.5]);
+%
+% You don't necessarily have to use the map struct, but you can operate
+% directly with codebook matrices. However, in this case you have to
+% specify the topology of the map in the optional arguments. The
+% following commads are identical (M is originally a 200 x dim sized matrix):
+%  M = som_batchtrain(M,D,'msize',[20 10],'lattice','hexa','shape','cyl');
+%   or
+%  M = som_batchtrain(M,D,'msize',[20 10],'hexa','cyl');
+%   or
+%  sT= som_set('som_topol','msize',[20 10],'lattice','hexa','shape','cyl');
+%  M = som_batchtrain(M,D,sT);
+%   or
+%  M = reshape(M,[20 10 dim]);
+%  M = som_batchtrain(M,D,'hexa','cyl');
+%
+% The som_batchtrain also returns a train struct with information on the 
+% accomplished training. This struct is also added to the end of the 
+% trainhist field of map struct, in case a map struct was given.
+%  [M,sTrain] = som_batchtrain(M,D,'msize',[20 10]);
+%  [sM,sTrain] = som_batchtrain(sM,D); % sM.trainhist{end}==sTrain
+%
+% SEE ALSO
+% 
+%  som_make         Initialize and train a SOM using default parameters.
+%  som_seqtrain     Train SOM with sequential algorithm.
+%  som_train_struct Determine default training parameters.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 071197 041297
+% Version 2.0beta juuso 101199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check arguments 
+
+error(nargchk(2, Inf, nargin));  % check the number of input arguments
+
+% map 
+struct_mode = isstruct(sMap);
+if struct_mode, 
+  sTopol = sMap.topol;
+else  
+  orig_size = size(sMap);
+  if ndims(sMap) > 2, 
+    si = size(sMap); dim = si(end); msize = si(1:end-1);
+    M = reshape(sMap,[prod(msize) dim]);
+  else
+    msize = [orig_size(1) 1]; 
+    dim = orig_size(2);    
+  end
+  sMap   = som_map_struct(dim,'msize',msize);
+  sTopol = sMap.topol;
+end
+[munits dim] = size(sMap.codebook);
+
+% data
+if isstruct(D), 
+  data_name = D.name; 
+  D = D.data;
+else 
+  data_name = inputname(2); 
+end
+nonempty = find(sum(isnan(D),2) < dim);
+D = D(nonempty,:);                    % remove empty vectors from the data
+[dlen ddim] = size(D);                % check input dimension
+if dim ~= ddim, 
+  error('Map and data input space dimensions disagree.'); 
+end
+
+% varargin
+sTrain = som_set('som_train','algorithm','batch','neigh', ...
+		 sMap.neigh,'mask',sMap.mask,'data_name',data_name);
+radius     = [];
+tracking   = 1;
+weights    = 1; 
+
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     % argument IDs
+     case 'msize', i=i+1; sTopol.msize = varargin{i}; 
+     case 'lattice', i=i+1; sTopol.lattice = varargin{i};
+     case 'shape', i=i+1; sTopol.shape = varargin{i};
+     case 'mask', i=i+1; sTrain.mask = varargin{i};
+     case 'neigh', i=i+1; sTrain.neigh = varargin{i};
+     case 'trainlen', i=i+1; sTrain.trainlen = varargin{i};
+     case 'tracking', i=i+1; tracking = varargin{i};
+     case 'weights', i=i+1; weights = varargin{i}; 
+     case 'radius_ini', i=i+1; sTrain.radius_ini = varargin{i};
+     case 'radius_fin', i=i+1; sTrain.radius_fin = varargin{i};
+     case 'radius', 
+      i=i+1; 
+      l = length(varargin{i}); 
+      if l==1, 
+        sTrain.radius_ini = varargin{i}; 
+      else 
+        sTrain.radius_ini = varargin{i}(1); 
+        sTrain.radius_fin = varargin{i}(end);
+        if l>2, radius = varargin{i}; end
+      end 
+     case {'sTrain','train','som_train'}, i=i+1; sTrain = varargin{i};
+     case {'topol','sTopol','som_topol'}, 
+      i=i+1; 
+      sTopol = varargin{i};
+      if prod(sTopol.msize) ~= munits, 
+        error('Given map grid size does not match the codebook size.');
+      end
+      % unambiguous values
+     case {'hexa','rect'}, sTopol.lattice = varargin{i};
+     case {'sheet','cyl','toroid'}, sTopol.shape = varargin{i}; 
+     case {'gaussian','cutgauss','ep','bubble'}, sTrain.neigh = varargin{i};
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}(1).type, 
+     case 'som_topol', 
+      sTopol = varargin{i}; 
+      if prod(sTopol.msize) ~= munits, 
+        error('Given map grid size does not match the codebook size.');
+      end
+     case 'som_train', sTrain = varargin{i};
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_batchtrain) Ignoring invalid argument #' num2str(i+2)]); 
+  end
+  i = i+1; 
+end
+
+% take only weights of non-empty vectors
+if length(weights)>dlen, weights = weights(nonempty); end
+
+% trainlen
+if ~isempty(radius), sTrain.trainlen = length(radius); end
+
+% check topology
+if struct_mode, 
+  if ~strcmp(sTopol.lattice,sMap.topol.lattice) | ...
+	~strcmp(sTopol.shape,sMap.topol.shape) | ...
+	any(sTopol.msize ~= sMap.topol.msize), 
+    warning('Changing the original map topology.');
+  end
+end
+sMap.topol = sTopol; 
+
+% complement the training struct
+sTrain = som_train_struct(sTrain,sMap,'dlen',dlen);
+if isempty(sTrain.mask), sTrain.mask = ones(dim,1); end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialize
+
+M        = sMap.codebook;
+mask     = sTrain.mask;
+trainlen = sTrain.trainlen;
+
+% neighborhood radius
+if trainlen==1, 
+  radius = sTrain.radius_ini; 
+elseif length(radius)<=2,  
+  r0 = sTrain.radius_ini; r1 = sTrain.radius_fin;
+  radius = r1 + fliplr((0:(trainlen-1))/(trainlen-1)) * (r0 - r1);
+else
+  % nil
+end
+                                   
+% distance between map units in the output space
+%  Since in the case of gaussian and ep neighborhood functions, the 
+%  equations utilize squares of the unit distances and in bubble case
+%  it doesn't matter which is used, the unitdistances and neighborhood
+%  radiuses are squared.
+Ud = som_unit_dists(sTopol);
+Ud = Ud.^2;
+radius = radius.^2;
+% zero neighborhood radius may cause div-by-zero error
+radius(find(radius==0)) = eps; 
+
+% The training algorithm involves calculating weighted Euclidian distances 
+% to all map units for each data vector. Basically this is done as
+%   for i=1:dlen, 
+%     for j=1:munits, 
+%       for k=1:dim
+%         Dist(j,i) = Dist(j,i) + mask(k) * (D(i,k) - M(j,k))^2;
+%       end
+%     end
+%   end
+% where mask is the weighting vector for distance calculation. However, taking 
+% into account that distance between vectors m and v can be expressed as
+%   |m - v|^2 = sum_i ((m_i - v_i)^2) = sum_i (m_i^2 + v_i^2 - 2*m_i*v_i)
+% this can be made much faster by transforming it to a matrix operation:
+%   Dist = (M.^2)*mask*ones(1,d) + ones(m,1)*mask'*(D'.^2) - 2*M*diag(mask)*D'
+% Of the involved matrices, several are constant, as the mask and data do 
+% not change during training. Therefore they are calculated beforehand.
+
+% For the case where there are unknown components in the data, each data
+% vector will have an individual mask vector so that for that unit, the 
+% unknown components are not taken into account in distance calculation.
+% In addition all NaN's are changed to zeros so that they don't screw up 
+% the matrix multiplications and behave correctly in updating step.
+Known = ~isnan(D);
+W1 = (mask*ones(1,dlen)) .* Known'; 
+D(find(~Known)) = 0;  
+
+% constant matrices
+WD = 2*diag(mask)*D';    % constant matrix
+dconst = ((D.^2)*mask)'; % constant in distance calculation for each data sample 
+                         % W2 = ones(munits,1)*mask'; D2 = (D'.^2); 		      
+
+% initialize tracking
+start = clock;
+qe = zeros(trainlen,1); 
+  
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Action
+
+% With the 'blen' parameter you can control the memory consumption 
+% of the algorithm, which is in practive directly proportional
+% to munits*blen. If you're having problems with memory, try to 
+% set the value of blen lower. 
+blen = min(munits,dlen);
+
+% reserve some space
+bmus = zeros(1,dlen); 
+ddists = zeros(1,dlen); 
+
+for t = 1:trainlen,  
+
+  % batchy train - this is done a block of data (inds) at a time
+  % rather than in a single sweep to save memory consumption. 
+  % The 'Dist' and 'Hw' matrices have size munits*blen
+  % which - if you have a lot of data - would be HUGE if you 
+  % calculated it all at once. A single-sweep version would 
+  % look like this: 
+  %  Dist = (M.^2)*W1 - M*WD; %+ W2*D2 
+  %  [ddists, bmus] = min(Dist);
+  % (notice that the W2*D2 term can be ignored since it is constant)
+  % This "batchy" version is the same as single-sweep if blen=dlen. 
+  i0 = 0;     
+  while i0+1<=dlen, 
+    inds = [(i0+1):min(dlen,i0+blen)]; i0 = i0+blen;      
+    Dist = (M.^2)*W1(:,inds) - M*WD(:,inds);
+    [ddists(inds), bmus(inds)] = min(Dist);
+  end  
+  
+  % tracking
+  if tracking > 0,
+    ddists = ddists+dconst; % add the constant term
+    ddists(ddists<0) = 0;   % rounding errors...
+    qe(t) = mean(sqrt(ddists));
+    trackplot(M,D,tracking,start,t,qe);
+  end
+  
+  % neighborhood 
+  % notice that the elements Ud and radius have been squared!
+  % note: 'bubble' matches the original "Batch Map" algorithm
+  switch sTrain.neigh, 
+   case 'bubble',   H = (Ud<=radius(t)); 
+   case 'gaussian', H = exp(-Ud/(2*radius(t))); 
+   case 'cutgauss', H = exp(-Ud/(2*radius(t))) .* (Ud<=radius(t));
+   case 'ep',       H = (1-Ud/radius(t)) .* (Ud<=radius(t));
+  end  
+  
+  % update 
+
+  % In principle the updating step goes like this: replace each map unit 
+  % by the average of the data vectors that were in its neighborhood.
+  % The contribution, or activation, of data vectors in the mean can 
+  % be varied with the neighborhood function. This activation is given 
+  % by matrix H. So, for each map unit the new weight vector is
+  %
+  %      m = sum_i (h_i * d_i) / sum_i (h_i), 
+  % 
+  % where i denotes the index of data vector.  Since the values of
+  % neighborhood function h_i are the same for all data vectors belonging to
+  % the Voronoi set of the same map unit, the calculation is actually done
+  % by first calculating a partition matrix P with elements p_ij=1 if the
+  % BMU of data vector j is i.
+
+  P = sparse(bmus,[1:dlen],weights,munits,dlen);
+       
+  % Then the sum of vectors in each Voronoi set are calculated (P*D) and the
+  % neighborhood is taken into account by calculating a weighted sum of the
+  % Voronoi sum (H*). The "activation" matrix A is the denominator of the 
+  % equation above.
+  
+  S = H*(P*D); 
+  A = H*(P*Known);
+  
+  % If you'd rather make this without using the Voronoi sets try the following: 
+  %   Hi = H(:,bmus); 
+  %   S = Hi * D;            % "sum_i (h_i * d_i)"
+  %   A = Hi * Known;        % "sum_i (h_i)"
+  % The bad news is that the matrix Hi has size [munits x dlen]... 
+    
+  % only update units for which the "activation" is nonzero
+  nonzero = find(A > 0); 
+  M(nonzero) = S(nonzero) ./ A(nonzero); 
+
+end; % for t = 1:trainlen
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Build / clean up the return arguments
+
+% tracking
+if tracking > 0, fprintf(1,'\n'); end
+
+% update structures
+sTrain = som_set(sTrain,'time',datestr(now,0));
+if struct_mode, 
+  sMap = som_set(sMap,'codebook',M,'mask',sTrain.mask,'neigh',sTrain.neigh);
+  tl = length(sMap.trainhist);
+  sMap.trainhist(tl+1) = sTrain;
+else
+  sMap = reshape(M,orig_size);
+end
+
+return;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+%%%%%%%%
+function [] = trackplot(M,D,tracking,start,n,qe)
+
+  l = length(qe);
+  elap_t = etime(clock,start); 
+  tot_t = elap_t*l/n;
+  fprintf(1,'\rTraining: %3.0f/ %3.0f s',elap_t,tot_t)  
+  switch tracking
+   case 1, 
+   case 2,   
+    plot(1:n,qe(1:n),(n+1):l,qe((n+1):l))
+    title('Quantization error after each epoch');
+    drawnow
+   otherwise,
+    subplot(2,1,1), plot(1:n,qe(1:n),(n+1):l,qe((n+1):l))
+    title('Quantization error after each epoch');
+    subplot(2,1,2), plot(M(:,1),M(:,2),'ro',D(:,1),D(:,2),'b+'); 
+    title('First two components of map units (o) and data vectors (+)');
+    drawnow
+  end
+  % end of trackplot
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_bmucolor.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,93 @@
+function bmu_colors=som_bmucolor(bmus, m, colors);
+
+% SOM_BMUCOLOR Returns the colors of the bmus according to a map colorcode
+%
+% bmu_colors=som_bmucolor(bmus, msize, colors);
+%
+% INPUT ARGUMENTS ([]'s are optional)
+%
+% bmus   (matrix) Nx1 vector of BMU indexes
+% msize  (map struct, topol struct or 1x2 vector) 
+%          gives the map grid size 
+% colors (matrix) colormap(s): munits x 3 x d matrix of RGB vectors
+%
+% OUTPUT ARGUMENTS 
+%
+% bmu_colors (Nx3xd matrix) color of the data point according to its BMU's 
+%              color(s).
+%
+% Idea is to get a color for each data point that links it to its BMU. 
+%
+% EXAMPLE
+%
+% We want to show how an time series is projected  to a map. Instead of 
+% a trajectory, we use 'color linking'
+%
+% map=som_make(multi_dim_signal); 
+% bmus=som_bmu(map,multi_dim_signal);
+% Colors=som_bmucolor(bmus, map, som_colorcode(map,'rgb1'));
+% colorsignal(Colors, multi_dim_signal);
+%
+% See also SOM_COLORCODE.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0alpha Johan 170699
+
+%% Check arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+error(nargchk(3, 3, nargin))   % check no. of input args is correct
+
+% Check map grid size
+
+if vis_valuetype(m,{'1x2'}),
+  msize=m;  
+else
+  [tmp,ok,tmp]=som_set(m);
+  if isstruct(m) & all(ok)        % check m type
+    switch m.type
+    case 'som_topol'
+      msize=m.msize;
+      lattice=m.lattice;
+    case 'som_map'
+      msize=m.topol.msize;
+      lattice=m.topol.lattice;
+    otherwise
+      error('Invalid map or topol struct.');
+    end
+  end
+end  
+
+if length(msize)>2
+  error('Only 2D maps allowed!');
+end
+
+n=prod(msize)
+
+% Check colorcode size
+
+if ~vis_valuetype(colors,{'nx3xdimrgb','nx3rgb'})
+  error('Colorcode matrix not valid!');
+end
+
+% Check bmu vector
+
+if ~vis_valuetype(bmus,{'nx1'}),
+  error('Need a column vector of BMU indexes!');
+else
+  bmus=round(bmus);
+  if max(bmus) > n | min(bmus) < 1
+    error('BMU indexes exeed the map size!')
+  end
+end
+
+%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+bmu_c=colors(bmus,:,:);
+
+%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+bmu_colors=squeeze(bmu_c);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_bmus.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,253 @@
+function [Bmus,Qerrors] = som_bmus(sMap, sData, which_bmus, mask)
+
+%SOM_BMUS Find the best-matching units from the map for the given vectors.
+%
+% [Bmus, Qerrors] = som_bmus(sMap, sData, [which], [mask])
+% 
+%   bmus = som_bmus(sM,sD);
+%   [bmus,qerrs] = som_bmus(sM,D,[1 2 3]);
+%   bmus = som_bmus(sM,D,1,[1 1 0 0 1]);
+%
+%  Input and output arguments ([]'s are optional): 
+%   sMap     (struct) map struct
+%            (matrix) codebook matrix, size munits x dim
+%   sData    (struct) data struct
+%            (matrix) data matrix, size dlen x dim
+%   [which]  (vector) which BMUs are returned, [1] by default 
+%            (string) 'all', 'best' or 'worst' meaning [1:munits],
+%                     [1] and [munits] respectively  
+%   [mask]   (vector) mask vector, length=dim, sMap.mask by default
+%
+%   Bmus     (matrix) the requested BMUs for each data vector, 
+%                     size dlen x length(which)
+%   Qerrors  (matrix) the corresponding quantization errors, size as Bmus
+%
+% NOTE: for a vector with all components NaN's, bmu=NaN and qerror=NaN
+% NOTE: the mask also effects the quantization errors
+%
+% For more help, try 'type som_bmus' or check out online documentation.
+% See also  SOM_QUALITY.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_bmus
+%
+% PURPOSE
+%
+% Finds Best-Matching Units (BMUs) for given data vector from a given map.
+%
+% SYNTAX
+%
+%  Bmus = som_bmus(sMap, sData)
+%  Bmus = som_bmus(..., which)
+%  Bmus = som_bmus(..., which, mask)
+%  [Bmus, Qerrs] = som_bmus(...)
+%
+% DESCRIPTION
+%
+% Returns the indexes and corresponding quantization errors of the
+% vectors in sMap that best matched the vectors in sData.
+%
+% By default only the index of the best matching unit (/vector) is
+% returned, but the 'which' argument can be used to get others as
+% well. For example it might be desirable to get also second- and
+% third-best matching units as well (which = [1:3]). 
+%
+% A mask can be used to weight the search process. The mask is used to
+% weight the influence of components in the distance calculation, as
+% follows: 
+%
+%   distance(x,y) = (x-y)' diag(mask) (x-y)
+%
+% where x and y are two vectors, and diag(mask) is a diagonal matrix with 
+% the elements of mask vector on the diagonal. 
+%
+% The vectors in the data set (sData) can contain unknown components
+% (NaNs), but the map (sMap) cannot. If there are completely empty
+% vectors (all NaNs), the returned BMUs and quantization errors for those 
+% vectors are NaNs.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%   sMap              The vectors from among which the BMUs are searched
+%                     for. These must not have any unknown components (NaNs).
+%            (struct) map struct
+%            (matrix) codebook matrix, size munits x dim
+%                     
+%   sData             The data vector(s) for which the BMUs are searched.
+%            (struct) data struct
+%            (matrix) data matrix, size dlen x dim
+%
+% OPTIONAL INPUT ARGUMENTS 
+%
+%   which    (vector) which BMUs are returned, 
+%                     by default only the best (ie. which = [1])
+%            (string) 'all', 'best' or 'worst' meaning [1:munits],
+%                     [1] and [munits] respectively  
+%   mask     (vector) mask vector to be used in BMU search, 
+%                     by default sMap.mask, or ones(dim,1) in case
+%                     a matrix was given
+%
+% OUTPUT ARGUMENTS
+% 
+%   Bmus     (matrix) the requested BMUs for each data vector, 
+%                     size dlen x length(which)
+%   Qerrors  (matrix) the corresponding quantization errors, 
+%                     size equal to that of Bmus
+%
+% EXAMPLES
+%
+% Simplest case:
+%  bmu = som_bmus(sM, [0.3 -0.4 1.0]);
+%           % 3-dimensional data, returns BMU for vector [0.3 -0.4 1]
+%  bmu = som_bmus(sM, [0.3 -0.4 1.0], [3 5]);
+%           % as above, except returns the 3rd and 5th BMUs
+%  bmu = som_bmus(sM, [0.3 -0.4 1.0], [], [1 0 1]);
+%           % as above, except ignores second component in searching
+%  [bmus qerrs] = som_bmus(sM, D);
+%           % returns BMUs and corresponding quantization errors 
+%           % for each vector in D
+%  bmus = som_bmus(sM, sD);
+%           % returns BMUs for each vector in sD using the mask in sM
+%
+% SEE ALSO
+% 
+%  som_quality      Measure the quantization and topographic error of a SOM.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 071197, 101297 
+% Version 2.0alpha juuso 201198 080200
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments and initialize
+
+error(nargchk(1, 4, nargin));  % check no. of input args is correct
+
+% sMap
+if isstruct(sMap), 
+  switch sMap.type, 
+   case 'som_map', M = sMap.codebook; 
+   case 'som_data', M = sMap.data;
+   otherwise, error('Invalid 1st argument.');
+  end
+else 
+  M = sMap; 
+end
+[munits dim] = size(M);
+if any(any(isnan(M))), 
+  error ('Map codebook must not have missing components.');
+end
+
+% data
+if isstruct(sData), 
+  switch sData.type, 
+   case 'som_map', D = sData.codebook;
+   case 'som_data', D = sData.data;
+   otherwise, error('Invalid 2nd argument.');
+  end
+else 
+  D = sData;
+end
+[dlen ddim] = size(D);
+if dim ~= ddim, 
+  error('Data and map dimensions do not match.')
+end
+
+% which_bmus
+if nargin < 3 | isempty(which_bmus) | any(isnan(which_bmus)), 
+  which_bmus = 1; 
+else
+  if ischar(which_bmus), 
+    switch which_bmus,
+     case 'best', which_bmus = 1; 
+     case 'worst', which_bmus = munits; 
+     case 'all', which_bmus = [1:munits];
+    end
+  end
+end
+
+% mask
+if nargin < 4 | isempty(mask) | any(isnan(mask)), 
+  if isstruct(sMap) & strcmp(sMap.type,'som_map'), 
+    mask = sMap.mask; 
+  elseif isstruct(sData) & strcmp(sData.type,'som_map'), 
+    mask = sData.mask; 
+  else
+    mask = ones(dim,1); 
+  end
+end
+if size(mask,1)==1, mask = mask'; end
+if all(mask == 0), 
+  error('All components masked off. BMU search cannot be done.');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+Bmus = zeros(dlen,length(which_bmus));
+Qerrors = Bmus;
+
+% The BMU search involves calculating weighted Euclidian distances 
+% to all map units for each data vector. Basically this is done as
+%   for i=1:dlen, 
+%     for j=1:munits, 
+%       for k=1:dim,
+%         Dist(j,i) = Dist(j,i) + mask(k) * (D(i,k) - M(j,k))^2;
+%       end
+%     end
+%   end
+% where mask is the weighting vector for distance calculation. However, taking 
+% into account that distance between vectors m and v can be expressed as
+%   |m - v|^2 = sum_i ((m_i - v_i)^2) = sum_i (m_i^2 + v_i^2 - 2*m_i*v_i)
+% this can be made much faster by transforming it to a matrix operation:
+%   Dist = (M.^2)*mask*ones(1,d) + ones(m,1)*mask'*(D'.^2) - 2*M*diag(mask)*D'
+%
+% In the case where there are unknown components in the data, each data
+% vector will have an individual mask vector so that for that unit, the 
+% unknown components are not taken into account in distance calculation.
+% In addition all NaN's are changed to zeros so that they don't screw up 
+% the matrix multiplications.
+
+% calculate distances & bmus
+
+% This is done a block of data at a time rather than in a
+% single sweep to save memory consumption. The 'Dist' matrix has 
+% size munits*blen which would be HUGE if you did it in a single-sweep
+% operation. If you _want_ to use the single-sweep version, just 
+% set blen = dlen. If you're having problems with memory, try to 
+% set the value of blen lower. 
+blen = min(munits,dlen);
+
+% handle unknown components
+Known = ~isnan(D);
+W1 = (mask*ones(1,dlen)) .* Known'; 
+D(find(~Known)) = 0;  
+unknown = find(sum(Known')==0); % completely unknown vectors 
+
+% constant matrices
+WD = 2*diag(mask)*D';   % constant matrix
+dconst = ((D.^2)*mask); % constant term in the distances
+
+i0 = 0; 
+while i0+1<=dlen, 
+  % calculate distances 
+  inds = [(i0+1):min(dlen,i0+blen)]; i0 = i0+blen;      
+  Dist = (M.^2)*W1(:,inds) - M*WD(:,inds); % plus dconst for each sample
+  
+  % find the bmus and the corresponding quantization errors
+  if all(which_bmus==1), [Q B] = min(Dist); else [Q B] = sort(Dist); end
+  if munits==1, Bmus(inds,:) = 1; else Bmus(inds,:) = B(which_bmus,:)'; end
+  Qerrors(inds,:) = Q(which_bmus,:)' + dconst(inds,ones(length(which_bmus),1));
+end  
+
+% completely unknown vectors
+if ~isempty(unknown), 
+  Bmus(unknown,:) = NaN;
+  Qerrors(unknown,:) = NaN;
+end
+
+Qerrors = sqrt(Qerrors);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_cldist.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,227 @@
+function Cd = som_cldist(D,clinds1,clinds2,cldist,q,mask)
+
+% SOM_CLDIST Distances between two clusters.
+% 
+%   Cd = som_cldist(Md,c1,c2,'single')
+%   Cd = som_cldist(Md,c1,c2,'average')
+%   Cd = som_cldist(Md,c1,c2,'complete')
+%   Cd = som_cldist(Md,c1,c2,'neighf',H)
+%   Cd = som_cldist(Md,c1,[],...)
+%   Cd = som_cldist(D,c1,c2,'centroid',q,mask)
+%   Cd = som_cldist(D,c1,c2,'ward',q,mask)
+%   Cd = som_cldist(D,c1,[],...)
+%
+%  Input and output arguments ([]'s are optional):
+%   D        (matrix) size dlen x dim, the data set
+%            (struct) map or data struct
+%   Md       (matrix) size dlen x dlen, mutual distance matrix, see SOM_MDIST
+%   c1       (cell array) size n1 x 1, indices of clusters from which 
+%                     the distances should be calculated, each cell
+%                     contains indices of vectors that belong to that
+%                     cluster (indices are between 1...dlen)
+%   c2       (cell array) size n2 x 1, same as c1 but have the clusters
+%                     to which the distances should be calculated
+%            (empty)  c1 is used in place of c2
+%   [q]      (scalar) distance norm, default = 2
+%   [mask]   (vector) size dim x 1, the weighting mask, a vector of ones
+%                     by default
+%   H        (matrix) size dlen x dlen, neighborhood function values
+%
+%   Cd       (matrix) size n1 x n2, distances between the clusters
+%
+% See also SOM_MDIST. 
+
+% Copyright (c) 2000 by Juha Vesanto
+% Contributed to SOM Toolbox on XXX by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta juuso 250800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+[dlen dim] = size(D); 
+if nargin<5, q = 2; end
+if nargin<6, mask = ones(dim,1); end
+if ~iscell(clinds1), clinds1 = {clinds1}; end
+if ~isempty(clinds2) & ~iscell(clinds2), clinds2 = {clinds2}; end
+
+n1 = length(clinds1); 
+n2 = length(clinds2); 
+if n2>0, Cd = zeros(n1,n2); else Cd = zeros(n1); end
+if n1==0, return; end
+
+switch cldist, 
+  
+ % centroid distance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+ case 'centroid',  
+
+  C1 = zeros(n1,dim); for i=1:n1, C1(i,:) = mean(D(clinds1{i},:),1); end
+  C2 = zeros(n2,dim); for i=1:n2, C2(i,:) = mean(D(clinds2{i},:),1); end
+  if n2==0, 
+    for i=1:n1-1, 
+      for j=i+1:n1, 
+	diff = C1(i,:)-C1(j,:); 
+	switch q, 
+	 case 1,    Cd(i,j)=abs(diff)*mask;
+	 case 2,    Cd(i,j)=sqrt((diff.^2)*mask);  
+	 case Inf,  Cd(i,j)=max(diag(mask)*abs(diff),[],2);
+	 otherwise, Cd(i,j)=((abs(diff).^q)*mask).^(1/q);
+	end   
+      end
+      Cd([(i+1):n1],i) = Cd(i,[(i+1):n1])';
+    end
+  else
+    for i=1:n1, 
+      for j=1:n2, 
+	diff = C1(i,:)-C2(j,:); 
+	switch q, 
+	 case 1,    Cd(i,j)=abs(diff)*mask;
+	 case 2,    Cd(i,j)=sqrt((diff.^2)*mask);  
+	 case Inf,  Cd(i,j)=max(diag(mask)*abs(diff),[],2);
+	 otherwise, Cd(i,j)=((abs(diff).^q)*mask).^(1/q);
+	end   
+      end
+    end
+  end
+
+ % ward distance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ case 'ward',
+
+  C1 = zeros(n1,dim); nn1 = zeros(n1,dim); 
+  for i=1:n1, C1(i,:) = mean(D(clinds1{i},:),1); nn1(i) = length(clinds1{i}); end
+  C2 = zeros(n2,dim); nn2 = zeros(n2,dim); 
+  for i=1:n2, C2(i,:) = mean(D(clinds2{i},:),1); nn2(i) = length(clinds2{i}); end
+  if n2==0, 
+    for i=1:n1-1, 
+      for j=i+1:n1, 
+	diff = C1(i,:) - C1(j,:); 
+	f = 2*nn1(i)*nn1(j) / (nn1(i)+nn1(j)); 
+	switch q, 
+	 case 1,    Cd(i,j)=f*abs(diff)*mask;
+	 case 2,    Cd(i,j)=f*sqrt((diff.^2)*mask);  
+	 case Inf,  Cd(i,j)=f*max(diag(mask)*abs(diff),[],2);
+	 otherwise, Cd(i,j)=f*((abs(diff).^q)*mask).^(1/q);
+	end   
+      end
+      Cd([(i+1):n1],i) = Cd(i,[(i+1):n1])';
+    end
+  else
+    for i=1:n1, 
+      for j=1:n2, 
+	diff = C1(i,:) - C2(j,:); 
+	f = 2*nn1(i)*nn2(j) / (nn1(i)+nn2(j)); 
+	switch q, 
+	 case 1,    Cd(i,j)=f*abs(diff)*mask;
+	 case 2,    Cd(i,j)=f*sqrt((diff.^2)*mask);  
+	 case Inf,  Cd(i,j)=f*max(diag(mask)*abs(diff),[],2);
+	 otherwise, Cd(i,j)=f*((abs(diff).^q)*mask).^(1/q);
+	end   
+      end
+    end
+  end  
+
+ % single linkage distance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ case 'single',
+
+  if n2==0, 
+    for i=1:n1-1, 
+      for j=i+1:n1, 
+	vd = D(clinds1{i},clinds1{j}); 
+	fi = isfinite(vd(:));
+	if any(fi), Cd(i,j) = min(vd(fi)); else Cd(i,j) = Inf; end
+      end
+      Cd([(i+1):n1],i) = Cd(i,[(i+1):n1])';
+    end
+  else
+    for i=1:n1, 
+      for j=1:n2, 
+	vd = D(clinds1{i},clinds2{j}); 
+	fi = isfinite(vd(:));
+	if any(fi), Cd(i,j) = min(vd(fi)); else Cd(i,j) = Inf; end
+      end
+    end
+  end
+
+ % average linkage distance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ case 'average',
+  
+  if n2==0, 
+    for i=1:n1-1, 
+      for j=i+1:n1, 
+	vd = D(clinds1{i},clinds1{j}); 
+	fi = isfinite(vd(:));
+	if any(fi), Cd(i,j) = mean(vd(fi)); else Cd(i,j) = Inf; end
+      end
+      Cd([(i+1):n1],i) = Cd(i,[(i+1):n1])';
+    end
+  else
+    for i=1:n1, 
+      for j=1:n2, 
+	vd = D(clinds1{i},clinds2{j}); 
+	fi = isfinite(vd(:));
+	if any(fi), Cd(i,j) = mean(vd(fi)); else Cd(i,j) = Inf; end
+      end
+    end
+  end
+    
+ % complete linkage distance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+ case 'complete',
+ 
+   if n2==0, 
+    for i=1:n1-1, 
+      for j=i+1:n1, 
+	vd = D(clinds1{i},clinds1{j}); 
+	fi = isfinite(vd(:));
+	if any(fi), Cd(i,j) = max(vd(fi)); else Cd(i,j) = Inf; end
+      end
+      Cd([(i+1):n1],i) = Cd(i,[(i+1):n1])';
+    end
+  else
+    for i=1:n1, 
+      for j=1:n2, 
+	vd = D(clinds1{i},clinds2{j}); 
+	fi = isfinite(vd(:));
+	if any(fi), Cd(i,j) = max(vd(fi)); else Cd(i,j) = Inf; end
+      end
+    end
+  end
+ 
+ % neighborhood function linkage distance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+ case 'neighf',
+  
+  if n2==0, 
+    for i=1:n1-1, 
+      for j=i+1:n1, 
+	vd = D(clinds1{i},clinds1{j}); 
+	fi = isfinite(vd(:));
+	if any(fi), 
+	  hd = q(clinds1{i},clinds1{j}); 
+	  hd = hd(fi); 
+	  Cd(i,j) = sum(hd.*vd(fi))/sum(hd); 	  
+	else Cd(i,j) = Inf; 
+	end
+      end
+      Cd([(i+1):n1],i) = Cd(i,[(i+1):n1])';
+    end
+  else
+    for i=1:n1, 
+      for j=1:n2, 
+	vd = D(clinds1{i},clinds2{j}); 
+	fi = isfinite(vd(:));
+	if any(fi), 
+	  hd = q(clinds1{i},clinds2{j}); 
+	  hd = hd(fi); 
+	  Cd(i,j) = sum(hd.*vd(fi))/sum(hd); 	  
+	else Cd(i,j) = Inf; 
+	end
+      end
+    end
+  end
+
+ otherwise, error(['Unknown cluster distance metric: ' cldist]); 
+end
+  
+return;
+  
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clget.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,115 @@
+function a = som_clget(sC, mode, ind)
+
+%SOM_CLGET Get properties of specified clusters.
+%
+%  a = som_clget(sC, mode, ind)
+% 
+%     inds = som_clget(sC,'dinds',20); 
+%     col  = som_clget(sC,'depth',[1 2 3 20 54]); 
+%
+%  Input and output arguments: 
+%    sC     (struct) clustering struct
+%    mode   (string) what kind of property is requested
+%                    'binds' (a union over) indeces of base clusters 
+%                            belonging to the specified cluster(s)
+%                    'dinds' (a union over) indeces of the data vectors 
+%                            belonging to the specified cluster(s)
+%                    'dlen'  number of data vectors belonging 
+%                            to each of the specified cluster(s)
+%                    'depth' depths of the specified clusters
+%                            (depth of the root cluster is 0, 
+%                             depth of its children are 1, etc.)
+%                    'child' (a union over) children clusters 
+%                             of specified cluster(s), including
+%                             the clusters themselves
+%                    'base'  base partitioning based on given 
+%                            clusters
+%    ind    (vector) indeces of the clusters
+%    
+%    a      (vector) the answer
+%
+% See also  SOM_CLSTRUCT, SOM_CLPLOT.
+
+% Copyright (c) 2000 by the SOM toolbox programming team.
+% Contributed to SOM Toolbox on XXX by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 180800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+clen = size(sC.tree,1)+1; 
+
+switch mode, 
+ case 'binds', 
+  a = []; 
+  for i=1:length(ind), a = [a, getbaseinds(sC.tree,ind(i))]; end
+  a = unique(a);
+ case 'dinds', 
+  b = []; 
+  for i=1:length(ind), b = [b, getbaseinds(sC.tree,ind(i))]; end
+  b = unique(b);
+  a = zeros(length(sC.base),1); 
+  for i=1:length(b), a(find(sC.base==b(i)))=1; end
+  a = find(a); 
+ case 'dlen', 
+  a = zeros(length(ind),1); 
+  for i=1:length(ind), 
+    b = getbaseinds(sC.tree,ind(i)); 
+    for j=1:length(b), a(i) = a(i) + sum(sC.base==b(j)); end
+  end
+ case 'depth', 
+  a = getdepth(sC.tree); 
+  a = a(ind);
+ case 'child', 
+  a = getchildren(sC.tree,ind); 
+ case 'base',
+  a = sC.base*0; 
+  ind = -sort(-ind);
+  for i=1:length(ind), a(som_clget(sC,'dinds',ind(i))) = ind(i); end
+end
+
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function ch = getchildren(Z,ind)
+
+  clen = size(Z,1)+1; 
+  ch = ind; cho = ind; 
+  while any(cho), 
+    i = cho(1); cho = cho(2:end); 
+    j = Z(i-clen,1); k = Z(i-clen,2); 
+    if j>clen, cho(end+1) = j; end
+    if k>clen, cho(end+1) = k; end
+    ch(end+1) = j; ch(end+1) = k; 
+  end
+  return;
+
+function binds = getbaseinds(Z,ind)
+
+  clen = size(Z,1)+1; 
+  binds = ind; 
+  while binds(1)>clen,   
+    i = binds(1); 
+    binds = binds(2:end); 
+    j = Z(i-clen,1); k = Z(i-clen,2);  
+    if j>clen, binds = [j binds]; else binds(end+1) = j; end
+    if k>clen, binds = [k binds]; else binds(end+1) = k; end
+  end
+  return;
+
+function depth = getdepth(Z)
+
+  clen = size(Z,1)+1; 
+  depth = zeros(2*clen-1,1); 
+  ch = 2*clen-1; % active nodes
+  while any(ch), 
+    c  = ch(1); ch = ch(2:end);
+    if c>clen & isfinite(Z(c-clen,3)), 
+      chc = Z(c-clen,1:2); % children of c
+      depth(chc) = depth(c) + 1; % or +(ind==chc(1))
+      ch = [ch, chc]; 
+    end
+  end
+  return; 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_cllinkage.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,272 @@
+function sC = som_cllinkage(sM,varargin)
+
+%SOM_CLLINKAGE Make a hierarchical linkage of the SOM map units.
+%
+% sC = som_cllinkage(sM, [[argID,] value, ...])
+%  
+%  sC = som_cllinkage(sM);
+%  sC = som_cllinkage(D,'complete');
+%  sC = som_cllinkage(sM,'single','ignore',find(~som_hits(sM,D)));
+%  sC = som_cllinkage(sM,pdist(sM.codebook,'mahal'));
+%  som_clplot(sC); 
+%
+%  Input and output arguments ([]'s are optional):
+%   sM       (struct) map or data struct to be clustered
+%            (matrix) size dlen x dim, a data set: the matrix must not
+%                     contain any NaN's!
+%   [argID,  (string) See below. The values which are unambiguous can 
+%    value]  (varies) be given without the preceeding argID.
+%
+%   sC       (struct) a clustering struct with e.g. the following fields
+%                     (for more information see SOMCL_STRUCT)
+%     .base  (vector) if base partitioning is given, this is a newly 
+%                     coded version of it so that the cluster indices
+%                     go from 1 to the number of clusters. 
+%     .tree  (matrix) size clen-1 x 3, the linkage info
+%                     Z(i,1) and Z(i,2) hold the indeces of clusters 
+%                     combined on level i (starting from bottom). The new
+%                     cluster has index dlen+i. The initial cluster 
+%                     index of each unit is its linear index in the 
+%                     original data matrix. Z(i,3) is the distance
+%                     between the combined clusters. See LINKAGE
+%                     function in the Statistics Toolbox.
+%     
+% Here are the valid argument IDs and corresponding values. The values 
+% which are unambiguous (marked with '*') can be given without the
+% preceeding argID.
+%   'topol'   *(struct) topology struct
+%   'connect' *(string) 'neighbors' or 'any' (default), whether the
+%                       connections should be allowed only between 
+%                       neighbors or between any vectors
+%              (matrix) size dlen x dlen indicating the connections
+%                       between vectors
+%   'linkage' *(string) the linkage criteria to use: 'single' (the
+%                       default), 'average', 'complete', 'centroid', or 'ward' 
+%   'dist'     (matrix) size dlen x dlen, pairwise distance matrix to 
+%                       be used instead of euclidian distances
+%              (vector) as the output of PDIST function
+%              (scalar) distance norm to use (default is euclidian = 2)
+%   'mask'     (vector) size dim x 1, the search mask used to 
+%                       weight distance calculation. By default 
+%                       sM.mask or a vector of ones is used.
+%   'base'     (vector) giving the base partitioning of the data: 
+%                       base(i) = j denotes that vector i belongs to
+%                       base cluster j, and base(i) = NaN that vector
+%                       i does not belong to any cluster, but should be
+%                       ignored. At the beginning of the clustering, the 
+%                       vector of each cluster are averaged, and these
+%                       averaged vectors are then clustered using 
+%                       hierarchical clustering.
+%   'ignore'   (vector) units to be ignored (in addition to those listed
+%                       in base argument)
+%   'tracking' (scalar) 1 or 0: whether to show tracking bar or not (default = 0)
+%
+% Note that if 'connect'='neighbors' and some vector are ignored (as denoted
+% by NaNs in the base vector), there may be areas on the map which will
+% never be connected: connections across the ignored map units simply do not
+% exist. In such a case, the neighborhood is gradually increased until 
+% the areas can be connected.
+%
+% See also KMEANS_CLUSTERS, LINKAGE, PDIST, DENDROGRAM. 
+
+% Copyright (c) 2000 by Juha Vesanto
+% Contributed to SOM Toolbox on XXX by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta juuso 160600 250800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+% the data
+if isstruct(sM), 
+  switch sM.type, 
+   case 'som_map', M = sM.codebook; sT = sM.topol; mask = sM.mask; data_name = sM.name; sTr = sM.trainhist(end); 
+   case 'som_data', M = sM.data; sT = []; mask = []; data_name = sM.name; sTr = [];
+   case 'som_topol', M = []; sT = sM; mask = []; data_name = inputname(1); 
+                     sTr = som_set('som_train','neigh','gaussian','radius_fin',1);
+   otherwise, error('Bad first argument');
+  end
+else M = sM; sT = []; mask = []; data_name = inputname(1); sTr = []; 
+end
+[dlen dim] = size(M);
+if isempty(mask), mask = ones(dim,1); end
+if any(isnan(M(:))), error('Data matrix must not have any NaNs.'); end
+
+% varargin
+q = 2; 
+Md = []; 
+linkage = 'single';
+ignore = []; 
+Ne = 'any';
+base = []; 
+tracking = 0; 
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+      % argument IDs
+     case {'topol','som_topol','sTopol'}, i=i+1; sT = varargin{i};
+     case 'connect', i=i+1; Ne = varargin{i};
+     case 'ignore',  i=i+1; ignore = varargin{i}; 
+     case 'dist',    i=i+1; Md = varargin{i};
+     case 'linkage', i=i+1; linkage = varargin{i};
+     case 'mask',    i=i+1; mask = varargin{i};
+     case 'tracking',i=i+1; tracking = varargin{i}; 
+     case 'base',    i=i+1; base = varargin{i};
+      % unambiguous values
+     case 'neighbors', Ne = varargin{i};
+     case 'any',       Ne = varargin{i};
+     case {'single','average','complete','neighf','centroid','ward'}, linkage = varargin{i};
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}(1).type, 
+     case 'som_topol', sT = varargin{i}; 
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, disp(['(som_cllinkage) Ignoring invalid argument #' num2str(i+1)]); end
+  i = i+1; 
+end
+
+% check distance metric
+if prod(size(Md))==1, q = Md; Md = []; end
+if ~isempty(Md) & prod(size(Md))<dlen^2, Md = squareform(Md); end    
+if prod(size(Md))>0 & any(strcmp(linkage,{'ward','centroid'})),
+  warning(['The linkage method ' linkage ' cannot be performed with precalculated distance matrix.']);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% distance matrix and connections between units
+
+% base partition 
+if isempty(base), base = 1:dlen; end
+if ~isempty(ignore), base(ignore) = NaN; end
+cid = unique(base(isfinite(base))); 
+nc = length(cid); 
+if max(cid)>nc | min(cid)<1, 
+  b = base; for i=1:nc, base(find(b==cid(i))) = i; end
+end
+
+% initial clusters
+clinds = cell(nc,1); 
+for i=1:nc, clinds{i} = find(base==i); end
+
+% neighborhood constraint (calculate connection matrix Ne)
+if ischar(Ne),
+  switch Ne, 
+   case 'any', Ne = []; 
+   case 'neighbors', if ischar(Ne), Ne = som_unit_neighs(sT); end  
+   otherwise, error(['Unrecognized connection mode ' Ne]);
+  end
+end
+if ~isempty(Ne), l = size(Ne,1); Ne([0:l-1]*l+[1:l]) = 1; end % diagonal=1
+if all(Ne(:)>0), Ne = []; end
+
+% neighborhood function values
+if strcmp(linkage,'neighf') 
+  if isempty(sTr), error('Cannot use neighf linkage.'); end
+  q = som_unit_dists(sT).^2; 
+  r = sTr.radius_fin^2; 
+  if isnan(r) | isempty(r), r = 1; end 
+  switch sTr.neigh,
+   case 'bubble',   q = (q <= r);
+   case 'gaussian', q = exp(-q/(2*r));
+   case 'cutgauss', q = exp(-q/(2*r)) .* (q <= r);
+   case 'ep',       q = (1-q/r) .* (q <= r);
+  end
+end
+
+% mutual distances and initial cluster distances
+Cd = []; 
+if any(strcmp(linkage,{'single','average','complete','neighf'})), 
+  M = som_mdist(M,2,mask,Ne); 
+  if (nc == dlen & all(base==[1:dlen])), Cd = M; end
+end 
+if isempty(Cd), Cd = som_cldist(M,clinds,[],linkage,q,mask); end
+Cd([0:nc-1]*nc+[1:nc]) = NaN; % NaNs on the diagonal
+			      
+% check out from Ne which of the clusters are not connected
+if ~isempty(Ne) & any(strcmp(linkage,{'centroid','ward'})),
+  Clconn = sparse(nc); 
+  for i=1:nc-1, 
+    for j=i+1:nc, Clconn(i,j) = any(any(Ne(clinds{i},clinds{j}))); end
+    Clconn(i+1:nc,i) = Clconn(i,i+1:nc)'; 
+  end
+  Cd(Clconn==0) = Inf; 
+else
+  Clconn = []; 
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% construct dendrogram
+
+clen = nc; 
+cid = 1:clen; 
+Z = zeros(nc-1,3)+NaN;     % merged clusters and distance for each step
+if tracking, h = waitbar(0,'Making hierarchical clustering'); end
+
+for i=1:clen-1,
+  if tracking, waitbar(i/clen,h); end
+  
+  % find two closest clusters and combine them
+  [d,c1] = min(min(Cd));          % cluster1
+  [d,c2] = min(Cd(:,c1));         % cluster2
+  i1 = clinds{c1};                % vectors belonging to c1
+  i2 = clinds{c2};                % vectors belonging to c2
+  clinds{c1} = [i1; i2];          % insert clusters to c1 
+  Z(i,:) = [cid(c1), cid(c2), d]; % update tree info   
+  
+  % remove cluster c2
+  notc2 = [1:c2-1,c2+1:nc]; 
+  nc = nc-1; if nc<=1, break; end
+  if c1>c2, c1=c1-1; end 
+  clinds = clinds(notc2); 
+  Cd = Cd(notc2,notc2);
+  cid = cid(notc2);
+  if ~isempty(Clconn), Clconn = Clconn(notc2,notc2); end
+  
+  % update cluster distances
+  notc1 = [1:c1-1,c1+1:nc];   
+  Cd(c1,notc1) = som_cldist(M,clinds(c1),clinds(notc1),linkage,q,mask); 
+  Cd(notc1,c1) = Cd(c1,notc1)'; 
+  if ~isempty(Clconn), 
+    for j=notc1, Clconn(c1,j) = any(any(Ne(clinds{c1},clinds{j}))); end
+    Clconn(notc1,c1) = Clconn(c1,notc1)'; 
+    Cd(Clconn==0) = Inf; 
+  end
+  
+end
+
+if tracking, close(h); end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% return values
+
+% to maintain compatibility with Statistics Toolbox, the values in 
+% Z must be yet transformed so that they are similar to the output
+% of LINKAGE function
+
+clen = size(Z,1)+1; 
+Zs = Z;
+current_cluster = 1:clen;
+for i=1:size(Z,1),
+  Zs(i,1) = current_cluster(Z(i,1));
+  Zs(i,2) = current_cluster(Z(i,2));
+  current_cluster(Z(i,[1 2])) = clen+i;  
+end
+Z = Zs;
+
+% make a clustering struct
+name = sprintf('Clustering of %s at %s',data_name,datestr(datenum(now),0)); 
+sC = som_clstruct(Z,'base',base,'name',name); 
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clplot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,238 @@
+function h = som_clplot(sC,varargin)
+
+%SOM_CLPLOT Visualize clustering.
+% 
+% h = som_clplot(sC, [[argID,] value, ...])
+% som_clplot(sM, part)
+% 
+%   som_clplot(sC);
+%   som_clplot(som_clstruct(Z))
+%   som_clplot(sC,sM);
+%   som_clplot(sC,'coord',P);
+%   som_clplot(sC,'dendrogram',[1 1 1 1 0 0 1 1 0 0 1]);
+%   som_clplot(sC,'linewidth',10);
+%   som_clplot(sC,'size',10);
+%   som_clplot(sM,part);
+%    
+%  Input and output arguments ([]'s are optional):    
+%   sC        (struct) clustering struct, as produced by SOM_CLSTRUCT
+%   [argID,   (string) See below. Each pair is the fieldname and 
+%    value]   (varies) the value to be given to that field.
+%   sM        (struct) map struct
+%   part      (vector) length = munits, partitioning for the map
+%
+%   h         (vector) handles to the arcs between 
+%   
+% Here are the valid argument IDs and corresponding values. The values 
+% which are unambiguous (marked with '*') can be given without the
+% preceeding argID.
+%   'linecolor' (string) color of the arc lines, 'k' by default
+%               (vector) size 1 x 3
+%   'linewidth' (scalar) width of the arc lines
+%   'size'      (vector) length 2*clen-1, sizes for each of the 
+%                        cluster markers
+%               (scalar) this size is used for all cluster markers
+%   'dendrogram'(vector) size 2*clen-1, indicates which clusters 
+%                        are shown in the dendrogram
+%              *(string) 'on' or 'off' ('on' by default)
+%   'coord'     (matrix) size dlen x odim, the coordinates
+%                        for the data. If odim<=2, these are used as is.
+%                        Otherwise a 2-dimensional PCA-projection is
+%                        first made (see function PCAPROJ). These
+%                        coordinates are applied also to the clusters.
+%              *(struct) data struct: as above
+%                        map or topology struct: the coordinates given 
+%                        by SOM_VIS_COORDS are used for the data 
+%   'color'     (matrix) size dlen x 3, color for each data. By
+%                        default the colors defined for base 
+%                        clusters are used (sC.color(sC.base,:)).
+%                        For ignored data figure background color is used. 
+%               (vector) size dlen x 1, indexed colors are used
+%
+% See also SOM_CLSTRUCT, SOM_LINKAGE, SOM_CLPRUNE, LINKAGE, DENDROGRAM.
+
+% Copyright (c) 2000 by Juha Vesanto
+% Contributed to SOM Toolbox on XXX by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta juuso 180600
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% read the arguments
+
+% sC
+if strcmp(sC.type,'som_map'), 
+  base = varargin{1}; 
+  clen = length(unique(base(isfinite(base)))); 
+  Z = ones(clen-1,3); 
+  Z(:,1) = randperm(clen-1)'; 
+  Z(:,2) = [clen:2*clen-2]'; 
+  Z(:,3) = [1:clen-1]'; 
+  sT = sC;
+  sC = som_clstruct(Z,'base',varargin{1}); 
+  h = som_clplot(sC,'coord',sT,'dendrogram','off',varargin{2:end}); 
+  return; 
+end
+clen = size(sC.tree,1)+1; 
+
+% varargin
+show = 'on'; 
+markersize = 10; 
+linecolor = 'k'; 
+linewidth = 1; 
+datacoord = []; 
+datacolor = []; 
+
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     case 'dendrogram', i=i+1; show = varargin{i}; 
+     case 'size',       i=i+1; markersize = varargin{i}; 
+     case 'linecolor',  i=i+1; linecolor = varargin{i}; 
+     case 'linewidth',  i=i+1; linewidth = varargin{i};
+     case 'color',      i=i+1; datacolor = varargin{i};
+     case 'coord',      i=i+1; datacoord = varargin{i};
+     case {'on','off'}, show = varargin{i}; 
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}), datacoord = varargin{i}; 
+  else argok = 0; 
+  end
+  if ~argok, disp(['(som_clplot) Ignoring invalid argument #' num2str(i+1)]); end
+  i=i+1;
+end
+
+% markersize
+if length(markersize)==1, markersize = ones(2*clen-1,1)*markersize; end
+
+% datacoord
+if ~isempty(datacoord),
+  if isstruct(datacoord), 
+    switch datacoord.type, 
+     case 'som_map',   datacoord = datacoord.topol;
+     case 'som_topol', %nil 
+     case 'som_data',  datacoord = datacoord.data;
+     otherwise,        datacoord = []; 
+    end  
+  end
+  if isstruct(datacoord), 
+    sC = som_clstruct(sC,'coord',som_vis_coords(datacoord.lattice,datacoord.msize));
+  else
+    [dlen dim] = size(datacoord);
+    if dim>2, datacoord = pcaproj(datacoord,2); end
+    sC = som_clstruct(sC,'coord',datacoord);
+  end
+end
+
+% show
+if ischar(show), show = strcmp(show,'on'); end
+if prod(size(show)) == 1, show = ones(2*clen-1,1)*show; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialize values
+
+% find the children to show for each cluster
+sTree0 = struct('parent',0,'children',[]); 
+sTree = sTree0; 
+for i=2:(2*clen-1), sTree(i) = sTree0; end
+for i=(clen+1):(2*clen-1), 
+  if isfinite(sC.tree(i-clen,3)), 
+    ch = sC.tree(i-clen,1:2);
+    sTree(i).children = ch; 
+    for j=1:length(ch), sTree(ch(j)).parent = i; end
+  end  
+end
+if any(show==0), % some clusters are not shown
+  for i=(clen+1):(2*clen-1), 
+    if ~show(i),
+      p = sTree(i).parent;
+      ch = sTree(i).children;
+      if p, 
+	j = find(sTree(p).children == i);
+	sTree(p).children = [sTree(p).children([1:(j-1),(j+1):end]), ch]; 
+	for j=1:length(ch), sTree(ch(j)).parent = p; end
+      end
+    end    
+  end  
+end
+
+% the arcs
+lfrom = []; lto = []; ladd = [];
+for i=(clen+1):(2*clen-1),   
+  if show(i), 
+    ch = sTree(i).children'; 
+    %ch = ch(find(show(ch)==1)); 
+    lfrom = [lfrom; i*ones(length(ch),1)]; 
+    lto = [lto; ch];     
+  end
+end
+
+% infinite height
+%isinf = ~isfinite(sC.height); 
+%sC.height(isinf) = 2*max(sC.height(~isinf)); 
+
+% the coordinates of the arcs
+Co = [sC.coord, sC.height];
+if size(Co,2)==2, 
+  Lx = [Co(lfrom,1),   Co(lto,1),     Co(lto,1)];
+  Ly = [Co(lfrom,end), Co(lfrom,end), Co(lto,end)];
+  Lz = []; 
+else
+  Lx = [Co(lfrom,1),   Co(lto,1),     Co(lto,1)];
+  Ly = [Co(lfrom,2),   Co(lto,2),     Co(lto,2)];
+  Lz = [Co(lfrom,end), Co(lfrom,end), Co(lto,end)];
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% plot
+
+washold = ishold; 
+if ~washold, cla; hold on; end
+
+% plot data
+if ~isempty(datacoord), 
+  if isempty(datacolor),
+    nancolor = get(gcf,'Color'); 
+    Col = nancolor(ones(length(sC.base),1),:);
+    ind = find(isfinite(sC.base)); 
+    Col(ind,:) = sC.color(sC.base(ind),:); 
+  elseif size(datacolor,2)==1, Col = som_normcolor(datacolor,jet); 
+  else Col = datacolor;     
+  end    
+  if isstruct(datacoord), som_cplane(datacoord,Col);
+  else som_grid('rect',[length(sC.base) 1],'line','none',...
+		'Coord',datacoord,'Markercolor',Col); 
+  end
+end
+
+h = []; 
+if any(show), 
+
+  % plot the lines
+  if isempty(Lz), 
+    h = line(Lx',Ly','color',linecolor,'linewidth',linewidth); 
+  else 
+    h = line(Lx',Ly',Lz','color',linecolor,'linewidth',linewidth); 
+    if ~washold, view(3); end
+    rotate3d on
+  end
+  
+  % plot the nodes
+  inds = find(show); 
+  som_grid('rect',[length(inds) 1],'line','none',...
+	   'Coord',Co(inds,:),...
+	   'Markercolor',sC.color(inds,:),...
+	   'Markersize',markersize(inds));
+end
+
+if ~washold, hold off, end
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clset.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,278 @@
+function [sC,old2new,newi] = som_clset(sC,action,par1,par2)
+
+% SOM_CLSET Create and/or set values in the som_clustering struct.
+%
+%   first argument
+%     sC       (struct) a som_clustering struct
+%     Z        (matrix) size nb-1 x 3, as given by LINKAGE function
+%     base     (vector) size dlen x 1, a partitioning of the data
+%
+%   actions    
+%     'remove'           removes the indicated clusters (par1: vector)
+%     'add'              add a cluster by making a combination of the indicated
+%                        clusters (par1: vector)
+%     %'move'             moves a child cluster (par1: scalar) from a parent to another
+%     %                   (par2: vector 1 x 2)
+%     'merge'            like 'add', followed by removing the indicated clusters (par1: vector)
+%     %'split'            the indicated cluster (par1: scalar) is partitioned into indicated
+%     %                   parts (par2: vector), which are then added, while the indicated cluster
+%     %                   (par1) is removed
+%     'coord'            sets the coordinates of base clusters (par1: matrix nb x *), and 
+%                        recalculates coordinates of the derived clusters (by averaging base cluster
+%                        coordinates)
+%     'color'            sets the colors of base clusters (par1: matrix nb x 3), and recalculates
+%                        colors of the derived clusters (as averages of base cluster colors)
+%                        
+%   sC
+%     .type     (string) 'som_clustering'
+%     .name     (string) Identifier for the clustering.
+%     .nb       (scalar) Number of base clusters in the clustering.
+%     .base     (vector) Size dlen x 1, the basic groups of data 
+%                        forming the base clusters, e.g. as a result 
+%                        of partitive clustering. Allowed values are 
+%                         1:nb   indicating the base cluster
+%                                to which the data belongs to. 
+%                         NaN    indicating that the data has
+%                                been ignored in the clustering                        
+%     .nc       (scalar) Number of clusters in the clustering (nb + derived clusters).
+%     .children (cellarray) size nc x 1, each cell gives the list of indeces
+%                        of child clusters for the cluster
+%     .parent   (vector) size nc x 1, the index of parent of each cluster 
+%                        (or zero if the cluster does not have a parent)
+%     .coord    (matrix) size nc x *, visualization coordinates for each cluster
+%                        By default the coordinates are set so that 
+%                        the base clusters are ordered on a line, and the
+%                        position of each combined cluster is average of 
+%                        the base clusters that constitute it.
+%     .color    (matrix) size nc x 3, color for each cluster. 
+%                        By default the colors are set so that the 
+%                        base clusters are ordered on a line,
+%                        and then colors are assigned from the 'hsv' 
+%                        colormap to the base clusters. The color
+%                        of each combined cluster is average as above.
+%     .cldist   (string) Default cluster distance function.
+
+inew = []; 
+if isstruct(sC), 
+    % it should be a som_clustering struct
+    old2new = [1:sC.nc];
+elseif size(sC,2)==3, 
+    % assume it is a cluster hierarchy matrix Z 
+    sC = Z2sC(sC); 
+    old2new = [1:sC.nc];
+else
+    % assume it is a partitioning vector
+    base = sC; 
+    u = unique(base(isfinite(base)));
+    old2new = sparse(u,1,1:length(u));
+    base = old2new(base);
+    sC = part2sC(base); 
+end 
+
+switch action, 
+case 'remove',        
+    for i=1:length(par1),         
+        [sC,o2n] = removecluster(sC,old2new(par1(i)));
+        old2new = o2n(old2new);
+    end 
+case 'add', 
+    [sC,old2new,inew] = addmergedcluster(sC,par1);    
+case 'move',
+    % not implemented yet
+case 'split', 
+    % not implemented yet
+case 'merge', 
+    [sC,old2new,inew] = addmergedcluster(sC,par1);
+    for i=1:length(par1), 
+        [sC,o2n] = removecluster(sC,old2new(par1(i)));
+        old2new = o2n(old2new);
+    end 
+case 'color', 
+    sC.color = derivative_average(sC,par1);
+case 'coord',
+    sC.coord = derivative_average(sC,par1);
+end 
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+function sC = clstruct(nb,nc)
+
+    sC = struct('type','som_clustering',...
+                'name','','base',[],'nb',nb,'nc',nc,...
+                'parent',[],'children',[],'coord',[],'color',[],'cldist','centroid');
+    sC.base = [1:nb]; 
+    sC.parent = zeros(nc,1);
+    sC.children = cell(nc,1); sC.children(:) = {[]}; 
+    sC.coord = zeros(nc,2);
+    sC.color = zeros(nc,3);
+    return;
+
+function Z = sC2Z(sC,height)
+
+    if nargin<2, height = 'level'; end
+
+    root   = find(sC.parent==0); 
+    order  = [root]; 
+    ch     = sC.children(root); 
+    while any(ch), i = ch(1); order = [ch(1), order]; ch = [ch(2:end), sC.children{i}]; end 
+
+    he = zeros(sC.nc,1); 
+    if strcmp(height,'level'), 
+        ch = sC.children{root}; 
+        while any(ch),
+            i = ch(1); he(i) = he(sC.parent(i))+1; 
+            ch = [ch(2:end), sC.children{i}]; 
+        end 
+        he = max(he)-he; 
+    elseif strcmp(height,'level2'), 
+        for i=order, if any(sC.children{i}), he(i) = max(he(sC.children{i}))+1; end, end
+    else
+        %he = som_cldist ( between children )
+    end 
+    
+    Z = zeros(sC.nb-1,3);    
+    i = sC.nb-1; 
+    inds = root; 
+    while i>0, 
+        ch = sC.children{inds(1)}; h = he(inds(1)); inds = [inds(2:end), ch]; 
+        if length(ch)>=2,
+            for k=1:length(ch)-2, Z(i,:) = [i-1, ch(k), h]; i = i - 1; end
+            Z(i,:) = [ch(end-1) ch(end) h]; i = i - 1;             
+        end 
+    end 
+    return;
+
+function sC = Z2sC(Z)
+
+    nb        = size(Z,1)+1;
+    nc        = 2*nb-1;
+    sC        = clstruct(nb,nc);
+    sC.base   = [1:nb];
+    for i=1:nc, 
+        j = find(Z(:,1)==i | Z(:,2)==i); 
+        sC.parent(i) = nb+j;
+        sC.children{sC.parent(i)}(end+1) = i; 
+    end 
+    % coords and color
+    order = nc; 
+    nonleaves = 1; 
+    while any(nonleaves), 
+        j = nonleaves(1); 
+        ch = sC.children{order(j)};
+        if j==1, oleft = []; else oleft = order(1:(j-1)); end
+        if j==length(order), oright = []; else oright = order((j+1):length(order)); end
+        order = [oleft, ch, oright];
+        nonleaves = find(order>nb); 
+    end
+    [dummy,co] = sort(order);     
+    sC.coord   = derivative_average(sC,co');
+    H          = hsv(nb+1);
+    sC.color   = derivative_average(sC,H(co,:));    
+    return;
+    
+function sC = part2sC(part)
+
+    nb      = max(part); 
+    nc      = nb+1; 
+    sC      = clstruct(nb,nc);
+    sC.base = part; 
+    sC.parent(1:nb) = nc; 
+    sC.children{nc} = [1:nb]; 
+    co       = [1:nb]'; 
+    sC.coord = derivative_average(sC,co);
+    H        = hsv(nb+1);
+    sC.color = derivative_average(sC,H(1:nb,:));
+    return;
+
+function [sC,old2new] = removecluster(sC,ind)
+  
+    old2new = [1:sC.nc]; 
+    parent_ind = sC.parent(ind);
+    ch = sC.children{ind};
+    if ~parent_ind, 
+        % trying to remove root cluster - no go
+        return; 
+    elseif ~any(ch), 
+        % trying to remove a base cluster - no go
+        return;
+    else
+        % ok, proceed
+        old2new = [1:ind-1 0 ind:sC.nc-1];
+        % update parent and child fields
+        sC.parent(ch) = parent_ind;
+        sC.children{parent_ind} = setdiff([sC.children{parent_ind}, ch],ind);
+        % remove old cluster
+        j = [1:ind-1, ind+1:sC.nc]; 
+        sC.parent   = sC.parent(j);
+        sC.children = sC.children(j);
+        sC.color    = sC.color(j,:);
+        sC.coord    = sC.coord(j,:);
+        sC.nc       = sC.nc-1; 
+        % update old indeces to new indices
+        sC.parent = old2new(sC.parent);
+        for i=1:sC.nc, sC.children{i} = old2new(sC.children{i}); end
+    end     
+    return;
+
+function [sC,old2new,inew] = addmergedcluster(sC,inds)
+
+    old2new    = [1:sC.nc]; 
+    inew       = 0; 
+    p_inds     = sC.parent(inds); 
+    if ~all(p_inds(1)==p_inds),  
+        % clusters are not siblings - no go
+        return;
+    end
+    parent_ind = p_inds(1); 
+    if isempty(setdiff(sC.children{parent_ind},inds)),  
+        % such a merged cluster exists already
+        return;     
+    else
+        % ok, proceed
+        inew = parent_ind;
+        old2new = [1:inew-1,inew+1:sC.nc+1];
+        % add the new cluster (=copy of parent_ind) 
+        j = [1:inew,inew:sC.nc];
+        sC.parent   = sC.parent(j);
+        sC.children = sC.children(j);
+        sC.color    = sC.color(j,:);
+        sC.coord    = sC.coord(j,:);
+        sC.nc       = sC.nc+1;
+        % update old indeces to new indices
+        sC.parent = old2new(sC.parent);
+        for i=1:sC.nc, sC.children{i} = old2new(sC.children{i}); end
+        inds = old2new(inds);
+        parent_ind = old2new(parent_ind);
+        % update parent, child, color and coord fields
+        sC.parent(inds)         = inew; 
+        sC.parent(inew)         = parent_ind;
+        sC.children{inew}       = inds; 
+        sC.children{parent_ind} = [setdiff(sC.children{parent_ind}, inds), inew];
+        b = baseind(sC,inew); 
+        sC.color(inew,:)        = mean(sC.color(b,:));
+        sC.coord(inew,:)        = mean(sC.coord(b,:));
+    end    
+    return;
+    
+function C = derivative_average(sC,Cbase)
+
+    [n dim] = size(Cbase);
+    if n ~= sC.nb, error('Color / Coord matrix should have nb rows'); end
+    C = zeros(sC.nc,dim);     
+    for i=1:sC.nc, C(i,:) = mean(Cbase(baseind(sC,i),:)); end   
+    return;
+    
+function bi = baseind(sC,ind)
+
+    bi = [ind]; 
+    i = 1; 
+    while i<=length(bi), bi = [bi, sC.children{bi(i)}]; end 
+    bi = bi(bi<=sC.nb);
+    return;
+  
+
+      
+      
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clspread.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,161 @@
+function base = som_clspread(sM,base,cldist,Ne,verbosity)
+
+% SOM_CLSPREAD Partition the given data by flooding.
+%
+%  part = som_clspread(sM,part,cldist,[Ne],[verbos])
+%
+%  Input and output arguments ([]'s are optional):
+%   sM       (struct) map or data struct
+%            (matrix) size dlen x dim, the data set            
+%   base     (vector) initial partition, where if base(i) is
+%                      0         i should be assigned to some cluster
+%                      NaN       i should not be assigned to any cluster
+%                      otherwise i belongs to cluster base(i)
+%   cldist   (string) cluster distance measure: 'single', 'average',
+%                     'complete', 'neighf', 'ward', 'centroid', 'BMU'  
+%   [Ne]     (scalar) 0 = not constrined to neighborhood
+%                     1 = constrained   
+%            (matrix) size dlen x dlen, indicating possible connections
+%   [verbos] (scalar) 1 (default) = show status bar
+%                     0  = don't
+%
+% See also SOM_CLDIST. 
+
+% Copyright (c) 2000 by Juha Vesanto
+% Contributed to SOM Toolbox on XXX by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta juuso 220800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+q = 2; 
+
+% map/data
+if isstruct(sM), 
+  switch sM.type, 
+   case 'som_map',  M = sM.codebook; mask = sM.mask; sT = sM.topol; 
+   case 'som_data', M = sM.data; mask = []; sT = []; 
+  end
+else M = sM; mask = []; sT = []; 
+end
+[dlen dim] = size(M); 
+if isempty(mask), mask = ones(dim,1); end
+
+% simple option
+if any(strcmp(cldist,{'closest','BMU'})), 
+  i0 = find(base==0);
+  i1 = find(base>0);
+  bmus = som_bmus(M(i1,:),M(i0,:));
+  base(i0) = base(i1(bmus));
+  return; 
+end
+
+% constrained clustering
+if nargin<4, Ne = []; end
+if prod(size(Ne))==1,  
+  if Ne & isempty(sT),
+    warning('Cannot use constrained clustering.'); Ne = 0; 
+  end
+  if Ne, Ne = som_unit_neighs(sT); else Ne = []; end
+end
+if ~isempty(Ne), 
+  Ne([0:dlen-1]*dlen+[1:dlen]) = 1; % set diagonal elements = 1
+  if all(Ne(:)>0), Ne = []; end
+end
+
+if nargin<5, verbosity = 1; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialize
+
+if size(base,1)==1, base = base'; end
+
+cid = unique(base(isfinite(base) & base~=0)); % cluster IDs
+nc = length(cid);    
+uind = find(base==0); % unclustered points
+nu = length(uind); 
+if nu==0, return; end
+
+% initial clusters
+clinds = cell(nc,1); for i=1:nc, clinds{i} = find(base==i); end
+clinds2 = cell(nu,1); for i=1:nu, clinds2{i} = uind(i); end
+
+% neighborhood function values
+if strcmp(cldist,'neighf')   
+  if isempty(sT), error('Cannot use neighf linkage.'); end
+  q = som_unit_dists(sT).^2; 
+  r = sM.trainhist(end).radius_fin^2; 
+  if isnan(r) | isempty(r), r = 1; end 
+  switch sM.neigh,
+   case 'bubble',   q = (q <= r);
+   case 'gaussian', q = exp(-q/(2*r));
+   case 'cutgauss', q = exp(-q/(2*r)) .* (q <= r);
+   case 'ep',       q = (1-q/r) .* (q <= r);
+  end
+end
+
+% distance of each cluster to the unclustered points
+if any(strcmp(cldist,{'single','average','complete','neighf'})), 
+  M = som_mdist(M,2,mask,Ne); 
+end 
+Cd = som_cldist(M,clinds,clinds2,cldist,q,mask); 
+			      
+% check out from Ne which of the clusters are not connected
+if ~isempty(Ne) & any(strcmp(cldist,{'centroid','ward'})),
+  Clconn = sparse(nc,nu);   
+  for i=1:nc, for j=1:nu, Clconn(i,j) = any(any(Ne(clinds{i},uind(j)))); end, end
+  Cd(Clconn==0) = Inf; 
+else
+  Clconn = []; 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+if verbosity,
+  nu0 = nu; 
+  h = waitbar(1-nu/nu0,'Assigning unclustered points'); % tracking
+end
+
+while 1, 
+
+  % find closest unclustered point
+  [dk,k] = min(Cd,[],2);  % min distance from each unclustered point
+  [d,c]  = min(dk);       % cluster to which it is assigned  
+  k = k(c); 
+
+  if ~isfinite(d), 
+    break; 
+  end
+
+  % add k to cluster c
+  base(uind(k)) = cid(c);   
+  clinds{c} = [clinds{c}; uind(k)];
+  
+  % remove point k
+  notk = [1:k-1,k+1:nu]; 
+  nu = nu-1; if nu<=0, break; end  
+  Cd = Cd(:,notk); 
+  uind = uind(notk); 
+  clinds2 = clinds2(notk); 
+  if ~isempty(Clconn), Clconn = Clconn(:,notk); end
+
+  % update cluster distances to c
+  Cd(c,:) = som_cldist(M,clinds(c),clinds2,cldist,q,mask); 
+  if ~isempty(Clconn), 
+    for j=1:nu, Clconn(c,j) = any(any(Ne(clinds{c},uind(j)))); end
+    Cd(c,find(Clconn(c,:)==0)) = Inf; 
+  end
+  
+  if verbosity, waitbar(1-nu/nu0,h); end % tracking
+
+end
+if verbosity, close(h); end
+
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clstruct.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,206 @@
+function sC = som_clstruct(Z,varargin)
+
+%SOM_CLSTRUCT Create a clustering struct or set its field values.
+%
+%  sC = som_clstruct(Z, [argID, value, ...]) 
+%
+%    Z  = linkage(pdist(sM.codebook));
+%    sC = som_clstruct(Z); 
+%    sC = som_clstruct(sC,'coord',som_vis_coords(lattice,msize));
+%    sC = som_clstruct(sC,'color',som_colorcode(sM));
+%    sC = som_clstruct(sC,'base',sC.base(som_bmus(sM,sD)));
+%
+%  Input and output arguments ([]'s are optional): 
+%   Z         (matrix) size clen-1 x 3, where clen is the number of 
+%                      base clusters. This is a clustering matrix 
+%                      similar to that produced by LINKAGE in 
+%                      Statistical Toolbox. See SOM_LINKAGE.
+%             (struct) clustering struct (as produced by this function)
+%   [argID,   (string) See below. Each pair is the fieldname and 
+%    value]   (varies) the value to be given to that field.
+%
+%   sC        (struct) clustering struct
+% 
+%   The clustering struct is based on the assumption that there 
+%   is a base partitioning of the SOM (or data) which is saved in 
+%   the .base field of the struct. Then a hierarchical clustering
+%   is applied to this base partitioning. The results are saved to 
+%   .tree field of the struct. Each cluster (base and combined)
+%   has also three properties: height, coordinate and color, which 
+%   are used in the visualizations. The fields of the struct are:
+%     .type   (string) 'som_clustering'
+%     .name   (string) Identifier for the clustering.
+%     .tree   (matrix) Size clen-1 x 3, as argument Z above. 
+%     .base   (vector) Size dlen x 1, the basic groups of data 
+%                      forming the base clusters, e.g. as a result 
+%                      of partitive clustering. Allowed values are 
+%                       1:clen indicating the base cluster
+%                              to which the data belongs to. 
+%                       NaN    indicating that the data has
+%                              been ignored in the clustering
+%                      By default [1:clen]. 
+%     .height (vector) Size 2*clen-1 x 1, (clustering) height for each 
+%                      cluster. By default 0 for each base cluster and
+%                      .tree(:,3) for the others.
+%     .coord  (matrix) Size 2*clen-1 x *, coordinate for each cluster, 
+%                      By default the coordinates are set so that 
+%                      the base clusters are ordered on a line, and the
+%                      position of each combined cluster is average of 
+%                      the base clusters that constitute it.
+%     .color  (matrix) Size 2*clen-1 x 3, color for each cluster. 
+%                      By default the colors are set so that the 
+%                      base clusters are ordered on a line, like above,
+%                      and then colors are assigned from the 'hsv' 
+%                      colormap to the base clusters. The color
+%                      of each combined cluster is average as above.
+%
+% Height, coord and color can also be specified in alternate forms:
+%   'height' (vector) size 2*clen-1 x 1, if given explicitly
+%                     size clen-1 x 1, specified heights of the 
+%                          combined clusters (the base cluster heights
+%                          are all = 0)
+%                     size 0 x 0, default value is used
+%   'coord'  (matrix) size 2*clen-1 x *, if given explicitly
+%                     size clen x *, to give coordinates for base 
+%                          clusters; the coordinate of combined clusters
+%                          are averaged from these
+%                     size dlen x *, to give coordinates of the 
+%                          original data: the cluster coordinates are
+%                          averaged from these based on base clusters
+%                     size 0 x 0, default value is used
+%   'color'  (matrix) as 'coord'
+%
+% See also  SOM_CLPLOT, SOM_CLVALIDITY, SOM_CLGET, SOM_CLLINKAGE.
+
+% Copyright (c) 2000 by the SOM toolbox programming team.
+% Contributed to SOM Toolbox on XXX by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 180800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if isstruct(Z), 
+  base = Z.base; 
+  color = Z.color; 
+  coord = Z.coord; 
+  height = Z.height; 
+  name = Z.name; 
+  Z = Z.tree; 
+else
+  base  = []; 
+  color = []; 
+  coord = []; 
+  height = []; 
+  name = ''; 
+end    
+clen  = size(Z,1)+1; 
+
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     case 'tree',   i=i+1; Z = varargin{i}; clen = size(Z,1)+1;
+     case 'base',   i=i+1; base = varargin{i}; 
+     case 'color',  i=i+1; color = varargin{i}; 
+     case 'coord',  i=i+1; coord = varargin{i}; 
+     case 'height', i=i+1; height = varargin{i}; 
+     case 'name',   i=i+1; name = varargin{i}; 
+     otherwise argok=0; 
+    end
+  else argok = 0; 
+  end
+  if ~argok, disp(['(som_clstruct) Ignoring invalid argument #' num2str(i+1)]); end
+  i = i+1; 
+end
+
+if isempty(base), 
+  dlen = clen; 
+  base = 1:dlen; 
+else
+  dlen = length(base); 
+  if any(base)>clen | any(base)<1, error('Incorrect base partition vector.'); end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% analysis of hierarchy
+
+% order of base clusters
+order = 2*clen-1; 
+nonleaves = 1; 
+while any(nonleaves), 
+  j = nonleaves(1); 
+  ch = Z(order(j)-clen,1:2);
+  if j==1, oleft = []; else oleft = order(1:(j-1)); end
+  if j==length(order), oright = []; else oright = order((j+1):length(order)); end
+  order = [oleft, ch, oright];
+  nonleaves = find(order>clen); 
+end
+
+% base cluster indeces for each non-base cluster
+basecl = cell(clen-1,1); 
+for i=1:clen-1, 
+  c1 = Z(i,1); if c1>clen, c1 = basecl{c1-clen}; end
+  c2 = Z(i,2); if c2>clen, c2 = basecl{c2-clen}; end
+  basecl{i} = [c1 c2];   
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% set coordinates, color and height and make the struct
+
+% coordinates
+if size(coord,1)==2*clen-1, % this is ok already
+else
+  if size(coord,1)==0, % the default    
+    [dummy,coord] = sort(order); 
+    coord = coord'; 
+  elseif size(coord,1)==dlen & dlen>clen, % coordinates given for original data
+    codata = coord; 
+    coord = zeros(clen,size(coord,2)); 
+    for i=1:clen, coord(i,:) = mean(codata(find(base==i),:),1); end  
+  end
+  if size(coord,1)==clen, % average from base clusters
+    coord = [coord; zeros(clen-1,size(coord,2))]; 
+    for i=1:clen-1, coord(i+clen,:) = mean(coord(basecl{i},:),1); end
+  else
+    error('Incorrect coordinate matrix.'); 
+  end
+end
+
+% color
+if size(color,1)==2*clen-1, % this is ok already
+else
+  if size(color,1)==0, % the default
+    color(order,:) = hsv(length(order)); 
+  elseif size(color,1)==dlen & dlen>clen, % colors given for original data
+    codata = color; 
+    color = zeros(clen,3); 
+    for i=1:clen, color(i,:) = mean(codata(find(base==i),:),1); end  
+  end
+  if size(color,1)==clen, % average from base clusters
+    color = [color; zeros(clen-1,3)]; 
+    for i=1:clen-1, color(i+clen,:) = mean(color(basecl{i},:),1); end
+  else
+    error('Incorrect color matrix.'); 
+  end
+end
+
+% height 
+if isempty(height), 
+  height = [zeros(clen,1); Z(:,3)]; 
+elseif length(height)==clen-1, 
+  if size(height,2)==clen-1, height = height'; end
+  height = [zeros(clen,1); height]; 
+elseif length(height)~=2*clen-1, 
+  error('Incorrect height vector.'); 
+end
+
+% make the struct
+sC = struct('type','som_clustering',...
+	    'name',name,'base',base,'tree',Z,...
+	    'color',color,'coord',coord,'height',height); 
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_clustercolor.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,152 @@
+function color=som_clustercolor(m, class, colorcode)
+
+% SOM_CLUSTERCOLOR Sets map unit coloring according to classification
+%
+% syntax 1: color = som_clustercolor(m, class, [colorcode]) 
+% syntax 2: color = som_clustercolor(class, colormatrix)
+%
+%  Input and output arguments ([]'s are optional):
+%   m           (struct) map or topol struct
+%               (cell array) of form {str,[m1 m2]} where str = 'hexa'
+%                  or 'rect' and [m1 m2] = msize.
+%   class       (matrix) Mxn matrix of integers (class labels)
+%                  where M is the number of map units and each
+%                  column gives some classification for the units. 
+%   colorcode   (string) 'rgb1', 'rgb2' (default), 'rgb3', 'rgb4', 'hsv'.
+%   colormatrix (matrix) Mx3 matrix of RGB triplets giving the
+%                  initial color code for each unit.
+%   color       (matrix) size Mx3xn of RGB triplets giving the
+%                  resulting color code for each unit 
+%    
+% The function gives a color coding by class and location for the
+% map units. The color is determined by calculating the mean of the 
+% initial RGB values of units belonging to the same class. 
+% 
+% Function has two syntaxes: 
+% 
+% * If first argument gives the map topology, i.e. is map or topol struct
+% or cell indicating the topology, the initial color coding of the
+% units may be given by a string ('rgb1','rgb2','rgb3','rgb4', or 'hsv')
+% which describe a predefined coloring scheme. (see SOM_COLORCODE).
+% or an initial color matrix of size Mx3 with RGB triplets as rows.  
+% * Another possibility is to give just the classification vector
+% of size Mx1 and an initial color matrix of size Mx3 with RGB 
+% triplets as rows.  
+%
+% EXAMPLE (requires Matlab Statistics Toolbox)
+%
+% % Do a 10-cluster single linkage hierachical clustering for SOM units
+%    class=cluster(linkage(pdist(sM.codebook),'single'),10);
+% % Color code the clusters 
+%    C=som_clustercolor(sM, class, 'rgb2');
+% % Visualize
+%    som_show(sM,'color',C);
+%
+% See also SOM_COLORCODE, SOM_KMEANSCOLOR, SOM_CPLANE, SOM_SHOW
+
+% Contributed to SOM Toolbox 2.0, February 11th, 2000 by Johan Himberg
+% Copyright (c) by Johan Himberg
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta Johan 100200 
+
+%%% Check arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+error(nargchk(2, 3, nargin));   % check no. of input args is correct
+
+% Check 1s argument 
+
+% Class matrix?
+if vis_valuetype(m, {'nxm'});
+   colorcode=class; 
+   class=m;
+   if ~vis_valuetype(colorcode,{'nx3rgb',[size(class,1) 3]},'all'),
+      error(['If map or topol is not specified the colorcode must be a' ...
+            ' [size(class,1) 3] sized RGB matrix.']);
+   end
+else
+   [tmp,ok,tmp]=som_set(m);
+   if isstruct(m) & all(ok)
+      switch m.type
+      case 'som_topol'              % topol? 
+         msize=m.msize;
+         lattice=m.lattice;
+      case 'som_map'   
+         msize=m.topol.msize;         % map?
+         lattice=m.topol.lattice;
+      otherwise
+         error('Invalid map or topol struct.');
+      end
+      % cell?  
+   elseif iscell(m) & vis_valuetype(size(m),{[1 2]}),
+      if vis_valuetype(m{2},{[1 2]}) & vis_valuetype(m{1},{'string'}),
+         lattice=m{1};    
+         msize=m{2}; 
+      else
+         error('Invalid map size information.');
+      end
+   else
+      % not known type
+      error('Invalid first argument!');
+   end
+   % Check map parameters
+   switch lattice                   % lattice  
+   case 'hexa' 
+      ;
+   case 'rect'
+      ;
+   otherwise
+      error('Unknown lattice type');
+   end
+   if length(msize)>2               % dimension
+      error('Only 2D maps allowed!');
+   end
+   % Check colorcode
+   if nargin<3 | isempty(colorcode)
+      colorcode='rgb2';
+   end
+end
+
+% Check class
+if any(class~=round(class))
+   error('Class labels must be integer numbers.');
+end
+
+if min(class)<=0 
+   error('Class numbers should be greater than 0');
+end
+
+if ischar(colorcode),
+   switch colorcode
+   case{'rgb1','rgb2','rgb3','rgb4','hsv'}
+      colorcode=som_colorcode(m, colorcode);
+   otherwise
+      error(['Color code not known: should be ''rgb1'',''rgb2'',' ...
+            ' ''rgb3'',''rgb4'' or ''hsv''.']);
+   end
+elseif ~vis_valuetype(colorcode,{'nx3rgb',[size(class,1) 3]},'all');
+   error(['Invalid colorcode matrix: should be a ' ...
+         '[length(class) 3] sized RGB matrix.']);
+end
+
+%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Go through all i classifications (columns)
+for i=1:size(class,2), 
+   % Get unique class labels in ith classification
+   c=unique(class(:,i))'; % row vector for loop indexing
+   % Go through all class in ith classification    
+   for j=c;             
+      index=(class(:,i)==j); 
+      N=sum(index);
+      colors=colorcode(index,:);
+      % Calculate the mean color
+      meancolor=repmat(mean(colors,1),N,1);
+      % Select the original color that is closest to this mean
+      dist=sum((meancolor-colors).^2,2);
+      [tmp,min_dist_index]=min(dist);
+      best_color=repmat(colors(min_dist_index,:),N,1);
+      % Set the color to output variable
+      color(index,:,i)=best_color;
+   end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_cod2ind.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function ind = som_cod2ind(msize,cind)
+
+%SOM_COD2IND Matlab linear index from SOM_PAK style linear indeces.
+%
+% ind = som_cod2ind(msize,cind)
+%
+%  ind = som_cod2ind([10 15],44);
+%  ind = som_cod2ind(sMap,44);
+%  ind = som_cod2ind(sMap.msize,44);
+%  ind = som_cod2ind([10 15],[44 13 91]');
+%
+%  Input and output arguments: 
+%   msize  (struct) map or topology struct
+%          (vector) size 1 x m, specifies the map grid size
+%   cind   (vector) size n x 1, SOM_PAK style linear indeces for n map units
+%                   (row first, then column)
+% 
+%   ind    (vector) size n x 1, Matlab linear indeces
+%
+% See also SOM_IND2COD.
+
+% Contributed to SOM Toolbox vs2, January 14th, 2002 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 140102
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if isstruct(msize), 
+  if strcmp(msize.type,'som_map'), msize = msize.topol.msize; 
+  elseif strcmp(msize.type,'som_topol'), msize = msize.msize;
+  else error('Invalid first argument.'); end
+end
+
+if nargin<2, cind = 1:prod(msize); end
+
+I2C = som_ind2cod(msize,[1:prod(msize)]); 
+[dummy,C2I] = sort(I2C); 
+ind = C2I(cind); 
+
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_colorcode.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,333 @@
+function colors=som_colorcode(m, colorcode, scaling)
+
+%SOM_COLORCODE Calculates a heuristic color coding for the SOM grid
+%
+% colors = som_colorcode(m, colorcode, scaling) 
+%
+%  Input and output arguments ([]'s are optional):
+%   m           (struct) map or topol struct
+%               (cell array) of form {str,[m1 m2]} where 
+%                        str = 'hexa' or 'rect' and [m1 m2] = msize
+%               (matrix) size N x 2, unit coordinates 
+%   [colorcode] (string) 'rgb1' (default),'rgb2','rgb3','rgb4','hsv'  
+%   [scaling]   (scalar) 1=on (default), 0=off. Has effect only
+%                        if m is a Nx2 matrix of coordinates: 
+%                        controls whether these are scaled to 
+%                        range [0,1] or not.
+%
+%   colors      (matrix) size N x 3, RGB colors for each unit (or point)
+%
+% The function gives a color coding by location for the map grid 
+% (or arbitrary set of points). Map grid coordinates are always linearly 
+% normalized to a unit square (x and y coordinates between [0,1]), except
+% if m is a Nx2 matrix and scaling=0. In that case too, the coordinates
+% must be in range [0,1].
+% 
+% Following heuristic color codings are available:
+%
+%  'rgb1' slice of RGB-cube so that       green - yellow
+%         the corners have colors:          |       |
+%                                         blue  - magenta
+%
+%  'rgb2' slice of RGB-cube so that       red   - yellow
+%         the corners have colors:          |       |
+%                                         blue  - cyan   
+%
+%  'rgb3' slice of RGB-cube so that   mixed_green - orange
+%         the corners have colors:          |        |
+%                                     light_blue  - pink 
+%
+%  'rgb4' has 'rgb1' on the diagonal + additional colors in corners
+%         (more resolution but visually strongly discontinuous) 
+%
+%  'hsv'  angle and radius from map centre are coded by hue and 
+%         intensity (more resoluton but visually discontinuous)
+%
+% See also SOM_CPLANE, SOM_SHOW, SOM_CLUSTERCOLOR, SOM_KMEANSCOLOR, 
+%          SOM_BMUCOLOR.
+
+% Contributed to SOM Toolbox 2.0, February 11th, 2000 by Johan Himberg
+% Copyright (c) by Johan Himberg
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0 Johan 140799 
+
+%%% Check arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+error(nargchk(1, 3, nargin));   % check no. of input args is correct
+
+%% Check m: map, topol, cell or data?
+
+if vis_valuetype(m,{'nx2'}),
+  p=m;  % explicit coordinates
+  
+else
+  
+  % map, topol, cell
+  
+  [tmp,ok,tmp]=som_set(m);
+  if isstruct(m) & all(ok)
+    switch m.type
+    case 'som_topol'              % topol 
+      msize=m.msize;
+      lattice=m.lattice;
+    case 'som_map'   
+      msize=m.topol.msize;        % map
+      lattice=m.topol.lattice;
+    otherwise
+      error('Invalid map or topol struct.');
+    end
+
+  % cell  
+    
+  elseif iscell(m) & vis_valuetype(size(m),{[1 2]}),
+    if vis_valuetype(m{2},{[1 2]}) & vis_valuetype(m{1},{'string'}),
+      lattice=m{1};    
+      msize=m{2}; 
+    else
+      error('Invalid map size information.');
+    end
+  end
+
+  %% Check map parameters
+ 
+  switch lattice                   % lattice  
+  case 'hexa' 
+    ;
+  case 'rect'
+    ;
+  otherwise
+    error('Unknown lattice type');
+  end
+  
+  if length(msize)>2                % dimension
+    error('Only 2D maps allowed!');
+  end
+  
+                                     
+  % Calculate coordinates 
+  p=som_unit_coords(msize,lattice,'sheet');
+
+  % Set scaling to 1 as it is done always in this case
+  scaling=1;   
+end
+
+% Check colorcode
+
+if nargin < 2 | isempty(colorcode),
+  colorcode='rgb1';
+end
+if ~ischar(colorcode)
+  error('String value for colorcode mode expected.');
+else
+ switch colorcode
+ case { 'rgb1', 'rgb2', 'rgb3' , 'rgb4' ,'hsv'}
+  otherwise
+    error([ 'Colorcode mode ' colorcode ' not implemented.']);
+  end
+end
+
+% Check scaling
+
+if nargin < 3 | isempty(scaling) 
+  scaling=1;
+end
+
+if ~vis_valuetype(scaling,{'1x1'})
+  error('Scaling should be 0 (off) or 1 (on).');
+end
+
+%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% scale coordintes between [0,1]
+
+if scaling  
+  n=size(p,1);
+  mn=min(p);
+  e=max(p)-mn;
+  p=(p-repmat(mn,n,1))./repmat(e,n,1);
+elseif sum(p(:,1)>1+p(:,1)<0+p(:,2)>1+p(:,2)<0),  
+  error('Coordinates out of range [0,1].');
+end
+
+switch colorcode 
+case 'rgb1'
+  h(:,1)=p(:,1);
+  h(:,2)=1-p(:,2);
+  h(:,3)=p(:,2);
+case 'rgb2'
+  h(:,1)=p(:,1);
+  h(:,2)=1-p(:,2);
+  h(:,3)=1-p(:,1);
+case 'rgb3'
+  h(:,1)=p(:,1);
+  h(:,2)=.5;
+  h(:,3)=p(:,2);
+case 'rgb4'  
+ p=rgb4(p);
+ h(:,1)=p(:,1);
+ h(:,2)=1-p(:,2);
+ h(:,3)=p(:,3);
+case 'hsv'
+  munits = n;
+  Hsv = zeros(munits,3);
+  for i=1:n, 
+    dx = .5-p(i,1);
+    dy = .5-p(i,2);
+    r = sqrt(dx^2+dy^2);
+    if r==0, 
+      h=1; 
+    elseif dx==0, 
+      h=.5; %h=ay; 
+    elseif dy==0, 
+      h=.5; %h=ax; 
+    else 
+      h = min(abs(.5/(dx/r)),abs(.5/(dy/r))); 
+    end
+    
+    if r==0, 
+      angle = 0; 
+    else 
+      angle = acos(dx/r); 
+      if dy<0, 
+	angle = 2*pi-angle; 
+      end
+    end
+    
+    Hsv(i,1) = 1-sin(angle/4);
+    Hsv(i,2) = 1;
+    Hsv(i,3) = r/h; 
+    h = hsv2rgb(Hsv);
+  end
+end
+
+
+%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+colors=h;
+
+%% Subfunctions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% juha %%%%
+
+function p=rgb4(coord)
+
+for i=1:size(coord,1);
+ p(i,:)=get_coords(coord(i,:))';
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function coords=get_coords(coords)
+
+%GET_COORDS
+%
+% get_coords(coords)
+%
+% ARGUMENTS
+%
+% coords (1x2 or 2x1 vector) coords(1) is an x-coordinate and coords(2)
+%                            y-coordinate.
+%
+%
+% RETURNS
+%
+% coords (3x1 vector) x,y and z-coordinates.
+%
+
+if ~(all(size(coords) == [1 2]) | all(size(coords) == [2 1]))
+  error('Argument ''coords'' must be an 2x1 or 1x2 vector.');
+end
+
+if all(size(coords) == [1 2])
+  coords=coords';
+end
+
+if any(coords > 1) any(coords < 0)
+  error('Coordinates must lay inside the interval [0,1].');
+end
+
+if coords(1) <= 1/(sqrt(2)+1),
+  if coords(2) <= line3(coords(1))
+    coords=coords_in_base(4,coords);
+  elseif coords(2) <= line2(coords(1))
+    coords=coords_in_base(1,coords);
+  else
+    coords=coords_in_base(2,coords);
+  end
+elseif coords(1) <= sqrt(2)/(sqrt(2)+1)
+  if coords(2) <= line1(coords(1))
+    coords=coords_in_base(3,coords);
+  elseif coords(2) <= line2(coords(1))
+    coords=coords_in_base(1,coords);
+  else
+    coords=coords_in_base(2,coords);
+  end
+else
+  if coords(2) <= line1(coords(1)),
+    coords=coords_in_base(3,coords);
+  elseif coords(2) <= line4(coords(1))
+    coords=coords_in_base(1,coords);
+  else
+    coords=coords_in_base(5,coords);
+  end
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function coords=coords_in_base(base_no,coords)
+
+A=[0;1/(sqrt(2)+1)];
+E=[1;1];
+F=[0;0];
+G=[1;0];
+H=[0;1];
+
+const=1+1/sqrt(2);
+
+switch base_no
+  case 1
+    x=(coords-A)*const;
+    coords=[(1/sqrt(2))*(x(1)-x(2));0.5*(x(1)+x(2));0.5*(x(1)+x(2))];
+  case 2
+    x=(coords-H)*const;
+    coords=[0;x(1);1+x(2)];
+  case 3
+    x=(coords-G)*const;
+    coords=[1;1+x(1);x(2)];
+  case 4
+    x=(coords-F)*const;
+    coords=[0.5+(1/sqrt(2))*(x(1)-x(2));...
+            0.5-(1/sqrt(2))*(x(1)+x(2));... 
+            0];
+  case 5
+    x=(coords-E)*const;
+    coords=[0.5+(1/sqrt(2))*(x(1)-x(2));...
+            0.5-(1/sqrt(2))*(x(1)+x(2));...      
+            1];
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function y=line1(x)
+  
+y = x-1/(sqrt(2)+1);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function y=line2(x)
+
+y = x+1/(sqrt(2)+1);
+ 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function y=line3(x)
+
+y = -x+1/(sqrt(2)+1);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function y= line4(x)
+
+y = -x+(2*sqrt(2)+1)/(sqrt(2)+1);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_coloring.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,98 @@
+function Col = som_coloring(sM,ncol,chaingap,dw)
+
+% SOM_COLORING Make a SOM-based coloring for given data/map.
+%
+% Col = som_coloring(sM,[ncol],[chaingap],[dw])
+% 
+%  Col = som_coloring(sM,5);
+%  som_show(sM,'color',Col); 
+%
+% Input and output arguments ([]'s are optional):
+%  sM          (struct) map or data struct
+%              (matrix) data matrix
+%  [ncol]      (scalar) number of colors to use
+%  [chaingap]  (scalar) size of gap in the color circle (see below), 
+%                       0.1 by default
+%  [dw]        (scalar) 1 = use input space distances to stretch
+%                           the color circle (default) 
+%                       0 = don't use
+%
+%  Col         (matrix) color for each data/codebook vector
+%
+% This function trains a 1-dimensional SOM using the input data
+% (codebook of a SOM, or a set of data vectors). A color from the 
+% color circle (see HSV function) is associated with each map unit, 
+% and each data/codebook vector of the input data picks its color
+% from its BMU on the 1-dimensional SOM. 
+%
+% If the chaingap argument == 0, the 1-dimensional map has a cylinder
+% (in effect, a ring) topology. Otherwise, the topology is rectangular
+% (in effect, a chain). 
+%
+% The colors are mapped to the 1-dimensional SOM simply by picking colors
+% from the color circle. If chaingap>0, a slice of the color circle is
+% removed before map units pick their colors from it. This creates a
+% discontiuity in the coloring at the ends of the 1-dimensional SOM.
+%
+% If the dw argument == 0, the colors are picked from the color circle
+% equidistantly. If not, the distances between the prototype vectors
+% in the 1-dimensional SOM are taken into account.
+%
+% See also SOM_KMEANSCOLOR, SOM_KMEANSCOLOR2, SOM_FUZZYCOLOR.
+
+% Contributed to SOM Toolbox 2.0, December 21st, 2001 by Juha Vesanto 
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta juuso 211201
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if isstruct(sM), 
+  if strcmp(sM.type,'som_map'), ismap = 1; D = sM.codebook; 
+  else ismap = 0; D = sM.data; 
+  end
+else ismap = 0; D = sM; 
+end
+
+if nargin<2 | isempty(ncol) | isnan(ncol), ncol = min(64,size(D,1)); end
+if nargin<3 | isempty(chaingap) | isnan(chaingap), chaingap = 0.1; end
+if nargin<4 | isempty(dw) | isnan(dw), dw = 1; end
+
+if chaingap == 0, lattice = 'sheet'; else lattice = 'cyl'; end
+sMring = som_make(D,'msize',[1,ncol],lattice,'tracking',0);
+b = som_bmus(sMring,D);
+
+Colmap = hsv(ceil(ncol*(1+chaingap))); 
+Colmap = Colmap(1:ncol,:);
+
+if dw, % take distances in input space into account
+  dist = sqrt(sum((sMring.codebook-sMring.codebook([2:end 1],:)).^2,2));  
+  ind  = round([0; cumsum(dist)/sum(dist)]*(ncol-1)) + 1;
+  Colmap = Colmap(ind,:);
+end  
+Col = Colmap(b,:); 
+
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% visualization
+  if ismap, 
+    a = som_bmus(sM.codebook,sMring.codebook); 
+    if chaingap==0, a(end+1) = a(1); end
+    som_show(sM,'color',Col); 
+    som_show_add('traj',a) 
+  else
+    i = find(sum(isnan(D),2)==0); 
+    [P,V,me] = pcaproj(D(i,:),2); 
+    Pr = pcaproj(sMring.codebook,V,me);
+    a = som_bmus(D(i,:),sMring.codebook); % Pr = P(a,:);
+    som_grid({'rect',[length(i) 1]},'line','none',...
+             'coord',P,'markercolor',Col(i,:));
+    hold on
+    if chaingap==0, Pr(end+1,:) = Pr(1,:); end
+    som_grid({'rect',[size(Pr,1) 1]},'linecolor','k',...
+             'linewidth',2,'markercolor','k','coord',Pr);
+  end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_connection.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,173 @@
+function C=som_connection(S)
+
+%SOM_CONNECTION Connection matrix for 'hexa' and 'rect' lattices
+%
+% C=som_connection(S)
+%
+%  C=som_connection(sMap);
+%  C=som_connection(sTopol);
+%  C=som_connection({'hexa', [6 5], 'sheet'});
+%
+% Input and output arguments:
+%  S    (struct) map or topol struct
+%       (cell array) a cell array of form {lattice, msize, shape}, where
+%                lattice: 'hexa' or 'rect'
+%                msize  : 1x2 vector
+%                shape  : 'sheet', 'cyl or 'toroid' 
+%
+%  C    (sparse) An NxN connection matrix, N=prod(msize)
+%
+% The function returns a connection matrix, e.g., for drawing
+% connections between map units in the function som_grid. Note that
+% the connections are defined only in the upper triangular part to
+% save some memory!! Function SOM_UNIT_NEIGHS does the same thing, 
+% but also has values in the lower triangular. It is also slower.
+%
+% For more help, try 'type som_connection' or check out online documentation.
+% See also SOM_GRID, SOM_UNIT_NEIGHS.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_connection
+%
+% PURPOSE
+% 
+%  To create a connection matrix of SOM 'hexa' and 'rect' negihborhoods
+%
+% SYNTAX
+%
+%  C = som_connection(S)
+%
+% DESCRIPTION
+%
+%  Creates a connection matrix of SOM 'hexa' and 'rect'
+%  neighborhoods. The connections are defined only in the upper
+%  triangular part to save some memory.
+%  
+%  Function SOM_UNIT_NEIGHS does the same thing, but also has values
+%  in the lower triangular. It is also slower, except for 
+%  'toroid' shape because in that case this function calls 
+%  SOM_UNIT_NEIGHS...
+%
+% REQUIRED INPUT ARGUMENTS
+%  
+%  S                 map topology 
+%    (map struct)    S.topol is used to build the matrix
+%    (topol struct)  topology information is used to build the matrix
+%    (cell array)    of form {lattice, msize, shape}, where
+%                     lattice: 'hexa' or 'rect'
+%                     msize  : 1x2 vector
+%                     shape  : 'sheet', 'cyl or 'toroid' 
+%
+% OUTPUT ARGUMENTS
+%
+%  C (sparse)        munits x munits sparse matrix which describes 
+%                    nearest neighbor connections between units
+%
+% EXAMPLE 
+%
+% C = som_connection('hexa',[3 4],'sheet');
+% full(C)
+% ans =
+%
+%      0     1     0     1     0     0     0     0     0     0     0     0
+%      0     0     1     1     1     1     0     0     0     0     0     0
+%      0     0     0     0     0     1     0     0     0     0     0     0
+%      0     0     0     0     1     0     1     0     0     0     0     0
+%      0     0     0     0     0     1     1     1     1     0     0     0
+%      0     0     0     0     0     0     0     0     1     0     0     0
+%      0     0     0     0     0     0     0     1     0     1     0     0
+%      0     0     0     0     0     0     0     0     1     1     1     1
+%      0     0     0     0     0     0     0     0     0     0     0     1
+%      0     0     0     0     0     0     0     0     0     0     1     0
+%      0     0     0     0     0     0     0     0     0     0     0     1
+%      0     0     0     0     0     0     0     0     0     0     0     0
+%
+% SEE ALSO
+% 
+% som_grid         Visualization of a SOM grid
+% som_unit_neighs  Units in 1-neighborhood for all map units.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0alpha Johan 061099 juuso 151199 170400
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Check arguments
+
+error(nargchk(1, 1, nargin));   % check number of input arguments
+
+[tmp,ok,tmp]=som_set(S);
+if isstruct(S) & all(ok),       % check m type
+  switch S.type
+  case 'som_topol' 
+    msize=S.msize;
+    lattice=S.lattice;
+    shape=S.shape;
+  case 'som_map'  
+    msize=S.topol.msize;
+    lattice=S.topol.lattice;
+    shape=S.topol.shape;
+  otherwise
+    error('Invalid map or topol struct.');
+  end
+elseif iscell(S),
+  if vis_valuetype(S,{'topol_cell'}),
+    lattice=S{1};
+    msize=S{2}; 
+    shape=S{3}; 
+  else
+    error('{lattice, msize, shape} expected for cell input.')
+  end
+else
+  error('{lattice, msize, shape}, or map or topol struct expected.')
+end
+
+if ~vis_valuetype(msize,{'1x2'})
+  error('Invalid map size: only 2D maps allowed.')
+end  
+
+%% Init %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+N=msize(1)*msize(2);
+
+%% Action & Build output arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+switch lattice
+case 'hexa'
+  l1=ones(N,1); l1((msize(1)+1):msize(1):end)=0;
+  l2=zeros(msize(1),1); l3=l2;
+  l2(1:2:end-1)=1; l3(3:2:end)=1;
+  l2=repmat(l2,msize(2),1); 
+  l3=repmat(l3,msize(2),1);
+  C= ...
+    spdiags([l1 l2 ones(N,1) l3], [1 msize(1)-1:msize(1)+1],N,N);
+case 'rect'
+  l1=ones(N,1);l1((msize(1)+1):msize(1):end)=0;
+  C=spdiags([l1 ones(N,1)],[1 msize(1)],N,N);
+otherwise
+  error('Unknown lattice.')
+end
+
+switch shape
+case 'sheet'
+  ;
+case 'cyl'
+  C=spdiags(ones(N,1),msize(1)*(msize(2)-1),C);
+case 'toroid'
+  %warning('Toroid not yet implemented: using ''cyl''.');
+  %C=spdiags(ones(N,1),msize(1)*(msize(2)-1),C);
+  %l=zeros(N,1); l(1:msize(2):end)=1;
+  %C=spdiags(l,msize(1),C);
+
+  % use som_unit_neighs to calculate these
+  C = som_unit_neighs(msize,lattice,'toroid');
+  % to be consistent, set the lower triangular values to zero
+  munits = prod(msize);
+  for i=1:(munits-1), C((i+1):munits,i) = 0; end
+otherwise
+  error('Unknown shape.');
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_cplane.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,470 @@
+function h=som_cplane(varargin) 
+
+%SOM_CPLANE Visualize one 2D component plane, U-matrix or color plane.
+%
+% h=som_cplane(lattice, msize, color, [s], [pos]) 
+% h=som_cplane(topol, color, [s], [pos]) 
+%
+%  som_cplane('hexa', [10 5], 'none');
+%  som_cplane('rect', [10 5], 'r');
+%  som_cplane(sM.topol, sM.codebook(:,1));
+%  U = som_umat(sM); som_cplane('hexaU',sM.topol.msize,U(:));
+%
+%  Input and output arguments ([]'s are optional): 
+%   lattice   (string) 'hexa', 'rect' (component planes)
+%                      'hexaU', 'rectU' (corresponding U-matrices)
+%             (matrix) defines the patch (see function VIS_PATCH).
+%   msize     (vector) 1x2 vector defines grid size (M=prod(msize))
+%             (matrix) Mx2 matrix gives explicit coordinates for each node
+%   topol     (struct) map or topology struct
+%   color              color for the nodes
+%             (matrix) Mx1 matrix gives indexed colors for the units
+%                      Mx3 matrix of RGB triples gives explicit
+%                      color for each unit
+%                      (Note: in case of U-matrix, the number of color
+%                      values is 4*prod(msize)-2*sum(msize)+1, not prod(msize))
+%             (string) ColorSpec gives the same color for each node
+%                      'none' draws black edges only.              
+%   [s]       (matrix) size Mx1, gives individual size scaling for each node 
+%             (scalar) gives the same size for each node, default=1.
+%                      Additional features: see 'type som_cplane' 
+%                      This argument is ignored if the lattice is 'rectU' or 'hexaU'.
+%   [pos]     (vector) a 1x2 vector that determines position of origin, 
+%                      default is [1 1].
+%
+%   h         (scalar) the object handle for the PATCH object
+%
+% Axis are set to the 'ij' mode with equal spacing and turned off if
+% 'pos' is not given. If 'lattice' is 'rect', 'hexa', 'rectU' or
+% 'hexaU' the node (a,b) has coordinates (a,b) (+pos), except on the
+% even numbered rows on the 'hexa' and 'hexaU' grids where the
+% coordinates are (a,b+0.5) (+pos).
+%
+% For more help, try 'type som_cplane' or check out online documentation.
+% See also SOM_PIEPLANE, SOM_PLOTPLANE, SOM_BARPLANE, VIS_PATCH,
+%          SOM_VIS_COORDS
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_cplane
+%
+% PURPOSE
+% 
+% Visualizes a 2D component plane or u-matrix
+%
+% SYNTAX
+%
+%  h = som_cplane(topol, color)
+%  h = som_cplane(lattice, msize, color)
+%  h = som_cplane(lattice, msize, color)
+%  h = som_cplane(..., size) 
+%  h = som_cplane(..., size, pos) 
+%
+% DESCRIPTION
+%
+% Creates some basic visualizations of the SOM grid: the component plane and
+% the unified distance matrix. The routine draws the SOM grid as a patch
+% object according to the specifications given in the input arguments and
+% returns its object handle.
+% 
+% Each unit of the map is presented by a polygon whose color, size, shape
+% and location can be specified in various ways. The usual procedure 
+% is to choose the lattice and map size used in the map training. Then
+% the function creates the standard sheet shaped topological 
+% representation of the map grid with hexagonal or rectangular units.
+% When the values from a map codebook component (or from SOM_UMAT) 
+% are given to the function it produces an indexed coloring for the 
+% units (as in SURF command). Another possibility is to give a fixed 
+% RGB color for each unit explicitly.
+% 
+% Special effects (variable unit size, location or shape) can be produced
+% giving different types of input variables.
+%
+% KNOWN BUGS
+%
+% Using 1x3 or 3x1 grids causes problem, as the MATLAB will treat the color 
+% information vector 1x3 or 3x1 as a single RGB triple. So, using indexed 
+% colors is not possible for this particular map size.
+%
+% It is not possible to specify explicit coordinates for map
+% consistig of just one unit as then the msize is interpreted as
+% map size.
+%
+% REQUIRED INPUT ARGUMENTS
+% 
+% Note: M is the number of map units
+%
+% lattice  The basic shape of the map units 
+%
+%   (string) 'hexa' or 'rect' creates standard component plane; 
+%            'hexaU' or 'rectU' creates standard u-matrix.
+%   (matrix) Lx2 matrix defines the cornes of an arbitary polygon to be used
+%            as the unit marker. (L is the number of patch vertex: L=6 for 
+%            'hexa' and L=4 for 'rect') 
+%
+% msize    The size of the map grid     
+%         
+%   (vector) [n1 n2] vector defines the map size (height n1 units, width 
+%            n2 units, total M=n1 x n2 units). The units will be placed to their 
+%            topological locations to form a uniform hexagonal or rectangular grid.
+%   (matrix) Mx2 matrix defines arbitrary coordinates for the M units
+%            In this case the argument 'lattice' defines the unit form only. 
+%
+% topol    Topology of the map grid
+%
+%   (struct) map or topology struct from which the topology is taken
+% 
+% color    Unit colors
+%           
+%   (string) (ColorSpec) gives the same color for each unit, 'none'
+%            draws black unit edges only.
+%   (vector) Mx1 column vector gives indexed color for each unit using the 
+%            current colormap (see help colormap).   
+%   (matrix) Mx3 matrix of RGB triples as rows gives each unit a fixed color.
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+% Note: M is the number of map units. 
+% Note: if unspecified or given empty values ('' or []) default
+% values are used for optional input arguments.
+% 
+% s        The size scaling factors for the units
+% 
+%   (scalar) scalar gives each unit the same size scaling: 
+%            0   unit disappears (edges can be seen as a dot).
+%            1   by default unit has its normal size (ie. no scaling)
+%            >1  unit overlaps others      
+%   (matrix) Mx1 double: each unit gets individual size scaling
+%
+% pos      Position of origin          
+% 
+%   (vector) This argument exists to be able drawing component planes
+%            in arbitrary locations in a figure. Note the operation:
+%            if this argument is given, the axis limits setting
+%            part in the routine is skipped and the limits setting
+%            will be left to be done by MATLAB's default
+%            operation. 
+%
+% OUTPUT ARGUMENTS
+%
+% h (scalar) handle to the created patch object
+% 
+% OBJECT TAGS     
+%
+% One object handle is returned: field Tag is set to
+%  'planeC'  for component plane     
+%  'planeU'  for U-matrix
+%
+% FEATURES
+%
+% There are some extra features in following arguments
+%
+% size
+%  - MxL matrix: radial scaling: the distance between 
+%    the center of node m and its kth vertex is scaled by
+%    s(m,k).
+%  - Mx1x2 matrix: the uniform scaling is done separately for
+%    x- and y-directions
+%  - MxLx2 matrix: the scaling is done separately to x- and y-
+%    directions for each vertex.
+%
+% color
+%    Each vertex may be given individual color. 
+%    The PATCH object interpolates the colors on the 
+%    face if shading is turned to interp. 
+%  - 1xMxL matrix: colormap index for each vertex
+%  - LxMx3 matrix: RGB color for each vertex
+%
+% Note: In both cases (size and color) the ordering of the patch
+% vertices in the "built-in" patches is the following
+%
+%          'rect'      'hexa'
+%            1 3          1 
+%            2 4         5 2
+%                        6 3
+%                         4
+%
+% The color interpolation result seem to depend on the order 
+% in which the patch vertices are defined. Anyway, it gives 
+% unfavourable results in our case especially with hexa grid: 
+% this is a MATLAB feature.
+%
+% EXAMPLES
+%
+% m=som_make(rand(100,4),'msize',[6 5])         % make a map
+% 
+% % show the first variable plane using indexed color coding
+%          
+% som_cplane(m.topol.lattice,m.topol.msize,m.codebook(:,1));  
+% or som_cplane(m.topol,m.codebook(:,1));  
+% or som_cplane(m,m.codebook(:,1));  
+%
+% % show the first variable using different sized black units
+%  
+% som_cplane(m,'k',m.codebook(:,1));
+% 
+% % Show the u-matrix. First we have to calculate it. 
+% % Note: som_umat returns a matrix therefore we write u(:) to get 
+% % a vector which contains the values in the proper order.
+% 
+% u=som_umat(m); 
+% som_cplane('hexaU', m.topol.msize, u(:)); 
+%
+% % Show three first variables coded as RGB colors
+% % and turn the unit edges off
+% 
+% h=som_cplane(m, m.codebook(:,1:3),1)
+% set(h,'edgecolor','none');
+%
+% % Try this! (see section FEATURES)
+% 
+% som_cplane('rect',[5 5],'none',rand(25,4));
+% som_cplane('rect',[5 5],rand(1,25,4));
+%
+% SEE ALSO
+%
+% som_barplane   Visualize the map prototype vectors as bar diagrams
+% som_plotplane  Visualize the map prototype vectors as line graphs
+% som_pieplane   Visualize the map prototype vectors as pie charts
+% som_umat       Compute unified distance matrix of self-organizing map
+% vis_patch      Define the basic patches used in som_cplane
+% som_vis_coords The default 'hexa' and 'rect' coordinates in visualizations
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 061099 juuso 151199 juuso 070600
+
+%%% Check & Init  arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+[nargin, lattice, msize, color, s, pos]=vis_planeGetArgs(varargin{:});
+error(nargchk(3, 5, nargin));  % check no. of input args is correct
+
+%% Translation?
+
+if nargin < 5 | isempty(pos)
+  pos=NaN;              % "no translation" flag
+elseif ~vis_valuetype(pos,{'1x2'}),
+  error('Position of origin has to be given as an 1x2 vector.');
+end
+
+%% Patchform %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+switch class(lattice)
+case 'char'             % built-in patchforms
+  pos=pos-1;
+  switch lattice
+  case {'hexa', 'hexaU'}
+    patchform=vis_patch('hexa');
+  case {'rect', 'rectU'}
+    patchform=vis_patch('rect');
+  otherwise
+    error([ 'Lattice ' lattice ' not implemented!']);
+  end
+case { 'double', 'sparse'}
+  if vis_valuetype(lattice,{'nx2'}),
+    patchform=lattice; % users patchform
+    lattice='rect';    
+  else
+    error('Patchform matrix has wrong size');
+  end
+otherwise
+  error('String or matrix expected for lattice.');
+end
+
+l=size(patchform,1);     % number of vertices    
+planeType=lattice(end);  % 'U' if umatrix otherwise something else
+
+if ~vis_valuetype(msize,{ '1x2', 'nx2'}),
+  error('msize has to be given as 1x2 or nx2 vectors.');
+end
+
+%% msize or coordinates %%%%%%%%%%%%%%%%%%%%%%%
+
+if size(msize,1)>1 
+  % msize is coordinate matrix Nx2?
+  
+  if planeType == 'U',  % don't accept u-matrix
+    error('U-matrix visualization doesn''t work with free coordinates.');
+  end
+  
+  % set number of map unit and unit coordinates 
+  munits=size(msize,1);
+  unit_coords=msize; msize=[munits 1];
+  
+  if isnan(pos),         % no translation is done here 
+    pos=[0 0];           % using [0 0] in order to prevent 
+  end	                 % axis tightening in
+                         % vis_PlaneAxisProperties (arbitary coords!) 
+else
+  % msize is built-in lattice
+  
+  unit_coords=som_vis_coords(lattice,msize);
+  
+  % Calculate matrices x and y which 'moves' nodes 
+  % to the correct positions:
+  % For U-matrix, the size has to be recalculated
+  if planeType == 'U',
+    xdim=2*msize(1)-1;ydim=2*msize(2)-1;
+  else
+    xdim=msize(1);ydim=msize(2);
+  end
+  munits=xdim*ydim;
+  
+  % Feature warning
+  if munits == 3  
+    warning('Problems with 1x3 and 3x1 maps. See documentation.');
+  end
+end
+
+%% Color matrix %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if ~isnumeric(color) & ~ischar(color),
+  error('Color matrix is invalid.');
+else
+  d=size(color);           
+  switch length(d)       
+  case 2   %% Flat colors
+    if ischar(color) % Check for string 'none'
+      if strcmp(color,'none'), 
+	color=NaN;
+      end
+    else               
+      if ~(d(1)== 1 & d(2) == 3) & ...
+	    ~(d(1) == munits & (d(2)==1 | d(2)==3))
+	error('Color data matrix has wrong size.');
+      elseif d(1)~=1 & d(2)==3 
+	if any(color>1 | color<0)
+	  error('Color data matrix has invalid RGB values.');
+	end
+	color=reshape(color,[1 munits 3]);  % RGB colors
+      elseif d(2)==1
+	color=color';                       % indexed
+      end
+    end
+  case 3   %% Interpolated colors
+    if d(1) == 1 & d(2) == munits & d(3) == l,  
+      color=reshape(color, l, munits);
+    elseif ~(d(1) == l & d(2) == munits & d(3) == 3) 
+      error('Color data matrix has wrong size.');
+    end
+  otherwise
+    error('Color data matrix has too many dimensions.');
+  end
+end
+
+%% Size matrix? %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargin < 4 | isempty(s),  
+   s=1;      % default value for s (no scaling)
+elseif ~isnumeric(s)
+  error('Size matrix is not numeric.');
+end
+
+%%Determine the type of size matrix
+d=size(s);                  
+switch length(d)
+case 2  
+  if (d(1)==1 & d(2)==1),
+    % Each node gets the same, uniform scaling.
+    s=s'; sx=s; sy=s;	
+  elseif (d(1)==munits & d(2)==l),
+    % Each vertex is scaled radially respetc to the 
+    % node center.
+    s=s'; sx=s; sy=s;          
+  elseif d(1)==munits & d(2)==1  
+    % Each node gets an individual uniform scaling.
+    sx=repmat(s',l,1); sy=sx;
+  else
+    error('Size matrix has wrong size.');
+  end
+case 3  
+  if d(1)==munits & d(2)==1 & d(3)==2,     
+    % Each node is individually and uniformly 
+    % scaled separately to x- and y-directions.
+    sx=repmat(shiftdim(s(:,:,1))',l,1);   
+    sy=repmat(shiftdim(s(:,:,2))',l,1);   
+  elseif d(1)==munits & d(2)==l & d(3)==2,
+    % Each vertex is scaled separately to x- and y-directions
+    % with respect to the node center.
+    sx=shiftdim(s(:,:,1))';                
+    sy=shiftdim(s(:,:,2))';              
+  else
+    error('Size matrix has wrong size.');
+  end
+otherwise 
+  error('Size matrix has too many dimensions.');
+end
+
+% Size zero would cause division by zero. eps is as good (node disappears)
+% I tried first NaN, it works well otherwise, but the node is 
+% then not on the axis and some commands may the work oddly. 
+% The edge may be visible, though.
+
+sx(sx==0)=eps;                    
+sy(sy==0)=eps;                
+
+% Rescale sizes for u-matrix
+if planeType=='U', 
+   sx=sx/2;sy=sy/2; 
+end
+
+%%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Making grid. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Translation for each patch
+
+x=repmat(unit_coords(:,1)',l,1);
+y=repmat(unit_coords(:,2)',l,1);
+
+% patch vertex coordiantes 
+
+nx=repmat(patchform(:,1),1,munits); 
+ny=repmat(patchform(:,2),1,munits); 
+
+% NB: The hexagons are not uniform in order to get even  
+% y-coordinates for the nodes. This is handled by setting _axis scaling_ 
+% so that the hexa-nodes look like uniform hexagonals. See 
+% vis_PlaneAxisProperties
+
+%% Make and scale the final input for PATCH:
+
+% 1: combine translation and scaling of each patch 
+x=(x./sx+nx).*sx; y=(y./sy+ny).*sy;  
+
+%% 2: translation of origin (pos)
+if ~isnan(pos)
+   x=x+pos(1);y=y+pos(2);    % move upper left corner 
+end                         % to pos
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Set axes properties  
+%% Command view([0 90]) shows the map in 2D properly oriented
+
+ax=newplot;                               % set new plot
+vis_PlaneAxisProperties(ax,lattice,msize,pos);
+
+%% Draw the map! 
+
+if ~isnan(color)
+   h_=patch(x,y,color);         
+else
+   h_=patch(x,y,'k');                     % empty grid 
+   set(h_,'FaceColor','none');
+end
+
+%% Set object tag
+
+if planeType=='U'
+   set(h_,'Tag','planeU');                      
+else
+   set(h_,'Tag','planeC');
+end	
+
+%%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargout>0, h=h_; end                   % Set h only, 
+                                          % if there really is output
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_data_struct.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,173 @@
+function sData = som_data_struct(D, varargin)
+
+%SOM_DATA_STRUCT Create a data struct.
+%
+% sData = som_data_struct(D, [argID, value, ...])
+%
+%  sData  = som_data_struct(D); 
+%  sData  = som_data_struct(D,'name','my_data','labels',labs);
+%
+%  Input and output arguments ([]'s are optional): 
+%   D        (matrix) data matrix, size dlen x dim
+%   [argID,  (string) See below. These are given as argID, value pairs.
+%    value]  (varies) 
+%
+%   sData    (struct) created data struct
+%
+%  Here are the argument IDs and corresponding values: 
+%   'labels'     (string array / cellstr) labels for each data vector,
+%                 length=dlen
+%   'name'       (string) data name
+%   'comp_names' (string array / cellstr) component names, size dim x 1
+%   'comp_norm'  (cell array) normalization operations for each
+%                 component, size dim x 1. Each cell is either empty, 
+%                 or a cell array of normalization structs.
+%
+% For more help, try 'type som_data_struct' or check out online documentation.
+% See also SOM_SET, SOM_INFO, SOM_MAP_STRUCT.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_data_struct   
+%
+% PURPOSE
+%
+% Creates a data structure. 
+%
+% SYNTAX
+%
+%  sD = som_data_struct(D);
+%  sD = som_data_struct(...,'argID',value,...);
+%
+% DESCRIPTION
+%
+% Creates a data struct. The struct contains, in addition to the data
+% matrix, component names, normalization operations for the components,
+% labels for each vector, and a name for the whole data set. All of these
+% can be given in the optional arguments of the function. If left
+% unspecified, they are given default values. 
+%
+%  Field         Type         Size / default value    
+%  ------------------------------------------------------------------------
+%   .type        (string)     'som_data'               
+%   .data        (matrix)     size dlen x dim             
+%   .name        (string)     'unnamed'
+%   .labels      (cellstr)    size dlen x m, {''; ''; ... ''}
+%   .comp_names  (cellstr)    size dim x 1, {'Variable1', 'Variable2', ...}
+%   .comp_norm   (cell array) size dim x 1, {[], [], ... []}
+%   .label_names (cellstr)    size m x 1, []
+%                          
+% '.type' field is the struct identifier. Do not change it.
+% '.data' field is the data matrix, each row is one data vector
+% '.name' field is the identifier for the whole data struct
+% '.labels' field contains the labels for each of the vectors. The ith
+%         of '.labels' contains the labels for ith data vector. Note that 
+%         if some vectors have more labels than others, the others are
+%         are given empty labels ('') to pad the '.labels' array up.
+% '.comp_names' field contains the names of the vector components
+% '.comp_norm' field contains normalization information for each
+%         component. Each cell of '.comp_norm' is itself a cell array of
+%         normalization structs. If no normalizations are performed for 
+%         the particular component, the cell is empty ([]).
+% '.label_names' is similar to .comp_names field holding the names for
+%         each data label column
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  D  (matrix) The data matrix, size dlen x dim. The data matrix may 
+%              contain unknown values, indicated by NaNs. 
+%  
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments can be given as 'argID',value -pairs as
+%  listed below. If an argument is given value multiple times, the
+%  last one is used.
+%
+%   'labels'     (string array / cellstr) labels for each data vector,
+%                 size dlen x m
+%   'name'       (string) data name
+%   'comp_names' (string array / cellstr) component names, size dim x 1
+%   'comp_norm'  (cell array) normalization operations for each
+%                 component, size dim x 1. Each cell is either empty, 
+%                 or a cell array of normalization structs.
+%   'label_names'(string array / cellstr) label names, size m x 1
+%
+% OUTPUT ARGUMENTS
+% 
+%  sD (struct) the data struct
+%
+% EXAMPLES
+%
+% Simplest case:
+%  D  = rand(8, 3); % 8 3-dimensional vectors
+%  sD = som_data_struct(D);
+%  
+% With optional arguments, the other fields can be given values:
+%  labs   = cell(8, 1); labs{1, 1} = 'first_label';
+%  cnames = {'first'; 'second'; 'third'};
+%  
+%  sD = som_data_struct(D,'labels',labs,'name','a data struct');
+%  sD = som_data_struct(D,'comp_names',cnames);
+%
+% SEE ALSO
+% 
+%  som_set          Set values and create SOM Toolbox structs.
+%  som_map_struct   Create a map struct.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta ecco 071197
+% Version 2.0beta juuso 101199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% data
+[dlen dim] = size(D);
+
+% default values
+if ~isempty(inputname(1)), name = inputname(1); 
+else name = 'unnamed'; end
+labels = cell(dlen,1);
+labels(1:dlen) = {''};
+%for i=1:dlen, labels{i} = ''; end
+comp_names = cell(dim,1);
+for i = 1:dim, comp_names{i} = sprintf('Variable%d', i); end
+comp_norm = cell(dim,1);
+label_names = []; 
+
+% varargin
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+      % argument IDs
+     case 'comp_names', i=i+1; comp_names = varargin{i}; 
+     case 'labels',     i=i+1; labels = varargin{i};
+     case 'name',       i=i+1; name = varargin{i};
+     case 'comp_norm',  i=i+1; comp_norm = varargin{i};
+     case 'label_names',i=i+1; label_names = varargin{i};
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_data_struct) Ignoring invalid argument #' num2str(i+1)]); 
+  end
+  i = i+1; 
+end
+
+% create struct
+sData = som_set('som_data','data',D,'labels',labels,...
+                          'name',name,'comp_names',comp_names,...
+                          'comp_norm',comp_norm,'label_names',label_names);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_demo1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,294 @@
+
+%SOM_DEMO1 Basic properties and behaviour of the Self-Organizing Map.
+
+% Contributed to SOM Toolbox 2.0, February 11th, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 071197
+% Version 2.0beta juuso 030200 
+
+clf reset;
+figure(gcf)
+echo on
+
+
+
+clc
+%    ==========================================================
+%    SOM_DEMO1 - BEHAVIOUR AND PROPERTIES OF SOM
+%    ==========================================================
+
+%    som_make        - Create, initialize and train a SOM.
+%     som_randinit   - Create and initialize a SOM.
+%     som_lininit    - Create and initialize a SOM.
+%     som_seqtrain   - Train a SOM.
+%     som_batchtrain - Train a SOM.
+%    som_bmus        - Find best-matching units (BMUs).
+%    som_quality     - Measure quality of SOM.
+
+%    SELF-ORGANIZING MAP (SOM):
+
+%    A self-organized map (SOM) is a "map" of the training data, 
+%    dense where there is a lot of data and thin where the data 
+%    density is low. 
+
+%    The map constitutes of neurons located on a regular map grid. 
+%    The lattice of the grid can be either hexagonal or rectangular.
+
+subplot(1,2,1)
+som_cplane('hexa',[10 15],'none')
+title('Hexagonal SOM grid')
+
+subplot(1,2,2)
+som_cplane('rect',[10 15],'none')
+title('Rectangular SOM grid')
+
+%    Each neuron (hexagon on the left, rectangle on the right) has an
+%    associated prototype vector. After training, neighboring neurons
+%    have similar prototype vectors.
+
+%    The SOM can be used for data visualization, clustering (or 
+%    classification), estimation and a variety of other purposes.
+
+pause % Strike any key to continue...
+
+clf
+clc
+%    INITIALIZE AND TRAIN THE SELF-ORGANIZING MAP
+%    ============================================
+
+%    Here are 300 data points sampled from the unit square:
+
+D = rand(300,2);
+
+%    The map will be a 2-dimensional grid of size 10 x 10.
+
+msize = [10 10];
+
+%    SOM_RANDINIT and SOM_LININIT can be used to initialize the
+%    prototype vectors in the map. The map size is actually an
+%    optional argument. If omitted, it is determined automatically
+%    based on the amount of data vectors and the principal
+%    eigenvectors of the data set. Below, the random initialization
+%    algorithm is used.
+
+sMap  = som_randinit(D, 'msize', msize);
+
+%    Actually, each map unit can be thought as having two sets
+%    of coordinates: 
+%      (1) in the input space:  the prototype vectors
+%      (2) in the output space: the position on the map
+%    In the two spaces, the map looks like this: 
+
+subplot(1,3,1) 
+som_grid(sMap)
+axis([0 11 0 11]), view(0,-90), title('Map in output space')
+
+subplot(1,3,2) 
+plot(D(:,1),D(:,2),'+r'), hold on
+som_grid(sMap,'Coord',sMap.codebook)
+title('Map in input space')
+
+%    The black dots show positions of map units, and the gray lines
+%    show connections between neighboring map units.  Since the map
+%    was initialized randomly, the positions in in the input space are
+%    completely disorganized. The red crosses are training data.
+
+pause % Strike any key to train the SOM...
+
+%    During training, the map organizes and folds to the training
+%    data. Here, the sequential training algorithm is used:
+
+sMap  = som_seqtrain(sMap,D,'radius',[5 1],'trainlen',10);
+
+subplot(1,3,3)
+som_grid(sMap,'Coord',sMap.codebook)
+hold on, plot(D(:,1),D(:,2),'+r')
+title('Trained map')
+
+pause % Strike any key to view more closely the training process...
+
+
+clf
+
+clc
+%    TRAINING THE SELF-ORGANIZING MAP
+%    ================================
+
+%    To get a better idea of what happens during training, let's look
+%    at how the map gradually unfolds and organizes itself. To make it
+%    even more clear, the map is now initialized so that it is away
+%    from the data.
+
+sMap = som_randinit(D,'msize',msize);
+sMap.codebook = sMap.codebook + 1;
+
+subplot(1,2,1)
+som_grid(sMap,'Coord',sMap.codebook)
+hold on, plot(D(:,1),D(:,2),'+r'), hold off
+title('Data and original map')
+
+%    The training is based on two principles: 
+%     
+%      Competitive learning: the prototype vector most similar to a
+%      data vector is modified so that it it is even more similar to
+%      it. This way the map learns the position of the data cloud.
+%
+%      Cooperative learning: not only the most similar prototype
+%      vector, but also its neighbors on the map are moved towards the
+%      data vector. This way the map self-organizes.
+
+pause % Strike any key to train the map...
+
+echo off
+subplot(1,2,2)
+o = ones(5,1);
+r = (1-[1:60]/60);
+for i=1:60,
+  sMap = som_seqtrain(sMap,D,'tracking',0,...
+		      'trainlen',5,'samples',...
+		      'alpha',0.1*o,'radius',(4*r(i)+1)*o);
+  som_grid(sMap,'Coord',sMap.codebook)
+  hold on, plot(D(:,1),D(:,2),'+r'), hold off
+  title(sprintf('%d/300 training steps',5*i))
+  drawnow
+end
+title('Sequential training after 300 steps')
+echo on
+
+pause % Strike any key to continue with 3D data...
+
+clf
+
+clc
+%    TRAINING DATA: THE UNIT CUBE
+%    ============================
+
+%    Above, the map dimension was equal to input space dimension: both
+%    were 2-dimensional. Typically, the input space dimension is much
+%    higher than the 2-dimensional map. In this case the map cannot
+%    follow perfectly the data set any more but must find a balance
+%    between two goals:
+
+%      - data representation accuracy
+%      - data set topology representation accuracy    
+
+%    Here are 500 data points sampled from the unit cube:
+
+D = rand(500,3);
+
+subplot(1,3,1), plot3(D(:,1),D(:,2),D(:,3),'+r')
+view(3), axis on, rotate3d on
+title('Data')
+
+%    The ROTATE3D command enables you to rotate the picture by
+%    dragging the pointer above the picture with the leftmost mouse
+%    button pressed down.
+
+pause % Strike any key to train the SOM...
+
+
+
+
+clc
+%    DEFAULT TRAINING PROCEDURE
+%    ==========================
+
+%    Above, the initialization was done randomly and training was done
+%    with sequential training function (SOM_SEQTRAIN). By default, the
+%    initialization is linear, and batch training algorithm is
+%    used. In addition, the training is done in two phases: first with
+%    large neighborhood radius, and then finetuning with small radius.
+
+%    The function SOM_MAKE can be used to both initialize and train
+%    the map using default parameters:
+
+pause % Strike any key to use SOM_MAKE...
+
+sMap = som_make(D);
+
+%    Here, the linear initialization is done again, so that 
+%    the results can be compared.
+
+sMap0 = som_lininit(D); 
+
+subplot(1,3,2)
+som_grid(sMap0,'Coord',sMap0.codebook,...
+	 'Markersize',2,'Linecolor','k','Surf',sMap0.codebook(:,3)) 
+axis([0 1 0 1 0 1]), view(-120,-25), title('After initialization')
+
+subplot(1,3,3)
+som_grid(sMap,'Coord',sMap.codebook,...
+	 'Markersize',2,'Linecolor','k','Surf',sMap.codebook(:,3)) 
+axis([0 1 0 1 0 1]), view(3), title('After training'), hold on
+
+%    Here you can see that the 2-dimensional map has folded into the
+%    3-dimensional space in order to be able to capture the whole data
+%    space. 
+
+pause % Strike any key to evaluate the quality of maps...
+
+
+
+clc
+%    BEST-MATCHING UNITS (BMU)
+%    =========================
+
+%    Before going to the quality, an important concept needs to be
+%    introduced: the Best-Matching Unit (BMU). The BMU of a data
+%    vector is the unit on the map whose model vector best resembles
+%    the data vector. In practise the similarity is measured as the
+%    minimum distance between data vector and each model vector on the
+%    map. The BMUs can be calculated using function SOM_BMUS. This
+%    function gives the index of the unit.
+
+%    Here the BMU is searched for the origin point (from the
+%    trained map):
+
+bmu = som_bmus(sMap,[0 0 0]);
+
+%    Here the corresponding unit is shown in the figure. You can
+%    rotate the figure to see better where the BMU is.
+
+co = sMap.codebook(bmu,:);
+text(co(1),co(2),co(3),'BMU','Fontsize',20)
+plot3([0 co(1)],[0 co(2)],[0 co(3)],'ro-')
+
+pause % Strike any key to analyze map quality...
+
+
+
+
+clc
+%    SELF-ORGANIZING MAP QUALITY
+%    ===========================
+
+%    The maps have two primary quality properties:
+%      - data representation accuracy
+%      - data set topology representation accuracy
+
+%    The former is usually measured using average quantization error
+%    between data vectors and their BMUs on the map.  For the latter
+%    several measures have been proposed, e.g. the topographic error
+%    measure: percentage of data vectors for which the first- and
+%    second-BMUs are not adjacent units.
+
+%    Both measures have been implemented in the SOM_QUALITY function.
+%    Here are the quality measures for the trained map: 
+
+[q,t] = som_quality(sMap,D)
+
+%    And here for the initial map:
+
+[q0,t0] = som_quality(sMap0,D)
+
+%    As can be seen, by folding the SOM has reduced the average
+%    quantization error, but on the other hand the topology
+%    representation capability has suffered.  By using a larger final
+%    neighborhood radius in the training, the map becomes stiffer and
+%    preserves the topology of the data set better.
+
+
+echo off
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_demo2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,406 @@
+
+%SOM_DEMO2 Basic usage of the SOM Toolbox.
+
+% Contributed to SOM Toolbox 2.0, February 11th, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 071197 
+% Version 2.0beta juuso 070200
+
+clf reset;
+figure(gcf)
+echo on
+
+
+
+clc
+%    ==========================================================
+%    SOM_DEMO2 - BASIC USAGE OF SOM TOOLBOX
+%    ==========================================================
+
+%    som_data_struct    - Create a data struct.
+%    som_read_data      - Read data from file.
+%
+%    som_normalize      - Normalize data.
+%    som_denormalize    - Denormalize data.
+%
+%    som_make           - Initialize and train the map. 
+%
+%    som_show           - Visualize map.
+%    som_show_add       - Add markers on som_show visualization.
+%    som_grid           - Visualization with free coordinates.
+%
+%    som_autolabel      - Give labels to map.
+%    som_hits           - Calculate hit histogram for the map.
+
+%    BASIC USAGE OF THE SOM TOOLBOX
+
+%    The basic usage of the SOM Toolbox proceeds like this: 
+%      1. construct data set
+%      2. normalize it
+%      3. train the map
+%      4. visualize map
+%      5. analyse results
+
+%    The four first items are - if default options are used - very
+%    simple operations, each executable with a single command.  For
+%    the last, several different kinds of functions are provided in
+%    the Toolbox, but as the needs of analysis vary, a general default
+%    function or procedure does not exist. 
+
+pause % Strike any key to construct data...
+
+
+
+clc
+%    STEP 1: CONSTRUCT DATA
+%    ======================
+
+%    The SOM Toolbox has a special struct, called data struct, which
+%    is used to group information regarding the data set in one
+%    place.
+
+%    Here, a data struct is created using function SOM_DATA_STRUCT.
+%    First argument is the data matrix itself, then is the name 
+%    given to the data set, and the names of the components
+%    (variables) in the data matrix.
+
+D = rand(1000,3); % 1000 samples from unit cube
+sData = som_data_struct(D,'name','unit cube','comp_names',{'x','y','z'});
+			
+%    Another option is to read the data directly from an ASCII file.
+%    Here, the IRIS data set is loaded from a file (please make sure
+%    the file can be found from the current path):
+
+try, 
+  sDiris = som_read_data('iris.data');
+catch
+  echo off
+
+  warning('File ''iris.data'' not found. Using simulated data instead.')
+  
+  D = randn(50,4); 
+  D(:,1) = D(:,1)+5;     D(:,2) = D(:,2)+3.5; 
+  D(:,3) = D(:,3)/2+1.5; D(:,4) = D(:,4)/2+0.3;
+  D(find(D(:)<=0)) = 0.01; 
+  
+  D2 = randn(100,4); D2(:,2) = sort(D2(:,2));
+  D2(:,1) = D2(:,1)+6.5; D2(:,2) = D2(:,2)+2.8; 
+  D2(:,3) = D2(:,3)+5;   D2(:,4) = D2(:,4)/2+1.5;
+  D2(find(D2(:)<=0)) = 0.01; 
+  
+  sDiris = som_data_struct([D; D2],'name','iris (simulated)',...
+			  'comp_names',{'SepalL','SepalW','PetalL','PetalW'});
+  sDiris = som_label(sDiris,'add',[1:50]','Setosa');
+  sDiris = som_label(sDiris,'add',[51:100]','Versicolor');
+  sDiris = som_label(sDiris,'add',[101:150]','Virginica');
+  
+  echo on
+end
+
+%     Here are the histograms and scatter plots of the four variables.
+
+echo off 
+k=1;
+for i=1:4, 
+  for j=1:4, 
+    if i==j, 
+      subplot(4,4,k); 
+      hist(sDiris.data(:,i)); title(sDiris.comp_names{i})
+    elseif i<j, 
+      subplot(4,4,k); 
+      plot(sDiris.data(:,i),sDiris.data(:,j),'k.')
+      xlabel(sDiris.comp_names{i})
+      ylabel(sDiris.comp_names{j})
+    end
+    k=k+1;
+  end
+end
+echo on
+
+%     Actually, as you saw in SOM_DEMO1, most SOM Toolbox functions
+%     can also handle plain data matrices, but then one is without the
+%     convenience offered by component names, labels and
+%     denormalization operations.
+
+
+pause % Strike any key to normalize the data...
+
+
+
+
+
+clc
+%    STEP 2: DATA NORMALIZATION
+%    ==========================
+
+%    Since SOM algorithm is based on Euclidian distances, the scale of
+%    the variables is very important in determining what the map will
+%    be like. If the range of values of some variable is much bigger
+%    than of the other variables, that variable will probably dominate
+%    the map organization completely. 
+
+%    For this reason, the components of the data set are usually
+%    normalized, for example so that each component has unit
+%    variance. This can be done with function SOM_NORMALIZE:
+
+sDiris = som_normalize(sDiris,'var');
+
+%    The function has also other normalization methods.
+
+%    However, interpreting the values may be harder when they have
+%    been normalized. Therefore, the normalization operations can be
+%    reversed with function SOM_DENORMALIZE:
+
+x = sDiris.data(1,:)
+
+orig_x = som_denormalize(x,sDiris)
+
+pause % Strike any key to to train the map...
+
+
+
+
+
+clc
+%    STEP 3: MAP TRAINING
+%    ====================
+
+%    The function SOM_MAKE is used to train the SOM. By default, it
+%    first determines the map size, then initializes the map using
+%    linear initialization, and finally uses batch algorithm to train
+%    the map.  Function SOM_DEMO1 has a more detailed description of
+%    the training process.
+
+sMap = som_make(sDiris);
+
+
+pause % Strike any key to continues...
+
+%    The IRIS data set also has labels associated with the data
+%    samples. Actually, the data set consists of 50 samples of three
+%    species of Iris-flowers (a total of 150 samples) such that the
+%    measurements are width and height of sepal and petal leaves. The
+%    label associated with each sample is the species information:
+%    'Setosa', 'Versicolor' or 'Virginica'.
+
+%    Now, the map can be labelled with these labels. The best
+%    matching unit of each sample is found from the map, and the
+%    species label is given to the map unit. Function SOM_AUTOLABEL 
+%    can be used to do this: 
+
+sMap = som_autolabel(sMap,sDiris,'vote');
+
+pause % Strike any key to visualize the map...
+
+
+
+
+
+clc
+%    STEP 4: VISUALIZING THE SELF-ORGANIZING MAP: SOM_SHOW
+%    =====================================================
+
+%    The basic visualization of the SOM is done with function SOM_SHOW.
+
+colormap(1-gray)
+som_show(sMap,'norm','d')
+
+%    Notice that the names of the components are included as the
+%    titles of the subplots. Notice also that the variable values
+%    have been denormalized to the original range and scale.
+
+%    The component planes ('PetalL', 'PetalW', 'SepalL' and 'SepalW')
+%    show what kind of values the prototype vectors of the map units
+%    have. The value is indicated with color, and the colorbar on the
+%    right shows what the colors mean.
+
+%    The 'U-matrix' shows distances between neighboring units and thus
+%    visualizes the cluster structure of the map. Note that the
+%    U-matrix visualization has much more hexagons that the
+%    component planes. This is because distances *between* map units
+%    are shown, and not only the distance values *at* the map units. 
+
+%    High values on the U-matrix mean large distance between
+%    neighboring map units, and thus indicate cluster
+%    borders. Clusters are typically uniform areas of low
+%    values. Refer to colorbar to see which colors mean high
+%    values. In the IRIS map, there appear to be two clusters.
+
+pause % Strike any key to continue...
+
+%    The subplots are linked together through similar position. In
+%    each axis, a particular map unit is always in the same place. For
+%    example:
+
+h=zeros(sMap.topol.msize); h(1,2) = 1;
+som_show_add('hit',h(:),'markercolor','r','markersize',0.5,'subplot','all')
+
+%    the red marker is on top of the same unit on each axis. 
+
+pause % Strike any key to continue...
+
+
+
+clf
+
+clc
+
+%    STEP 4: VISUALIZING THE SELF-ORGANIZING MAP: SOM_SHOW_ADD
+%    =========================================================
+
+%    The SOM_SHOW_ADD function can be used to add markers, labels and
+%    trajectories on top of SOM_SHOW created figures. The function
+%    SOM_SHOW_CLEAR can be used to clear them away.
+
+%    Here, the U-matrix is shown on the left, and an empty grid
+%    named 'Labels' is shown on the right.
+
+som_show(sMap,'umat','all','empty','Labels')
+
+pause % Strike any key to add labels...
+
+%    Here, the labels added to the map with SOM_AUTOLABEL function
+%    are shown on the empty grid.
+
+som_show_add('label',sMap,'Textsize',8,'TextColor','r','Subplot',2)
+
+pause % Strike any key to add hits...
+
+%    An important tool in data analysis using SOM are so called hit
+%    histograms. They are formed by taking a data set, finding the BMU
+%    of each data sample from the map, and increasing a counter in a
+%    map unit each time it is the BMU. The hit histogram shows the
+%    distribution of the data set on the map.
+
+%    Here, the hit histogram for the whole data set is calculated
+%    and visualized on the U-matrix.
+
+h = som_hits(sMap,sDiris);
+som_show_add('hit',h,'MarkerColor','w','Subplot',1)
+
+pause % Strike any key to continue...
+
+%    Multiple hit histograms can be shown simultaniously. Here, three
+%    hit histograms corresponding to the three species of Iris
+%    flowers is calculated and shown. 
+
+%    First, the old hit histogram is removed.
+
+som_show_clear('hit',1)
+
+%    Then, the histograms are calculated. The first 50 samples in
+%    the data set are of the 'Setosa' species, the next 50 samples
+%    of the 'Versicolor' species and the last 50 samples of the
+%    'Virginica' species. 
+
+h1 = som_hits(sMap,sDiris.data(1:50,:));
+h2 = som_hits(sMap,sDiris.data(51:100,:));
+h3 = som_hits(sMap,sDiris.data(101:150,:));
+
+som_show_add('hit',[h1, h2, h3],'MarkerColor',[1 0 0; 0 1 0; 0 0 1],'Subplot',1)
+
+%    Red color is for 'Setosa', green for 'Versicolor' and blue for
+%    'Virginica'. One can see that the three species are pretty well
+%    separated, although 'Versicolor' and 'Virginica' are slightly
+%    mixed up.
+
+pause % Strike any key to continue...
+
+
+
+clf
+clc
+
+%    STEP 4: VISUALIZING THE SELF-ORGANIZING MAP: SOM_GRID
+%    =====================================================
+
+%    There's also another visualization function: SOM_GRID.  This
+%    allows visualization of the SOM in freely specified coordinates,
+%    for example the input space (of course, only upto 3D space). This
+%    function has quite a lot of options, and is pretty flexible.
+
+%    Basically, the SOM_GRID visualizes the SOM network: each unit is
+%    shown with a marker and connected to its neighbors with lines.
+%    The user has control over: 
+%     - the coordinate of each unit (2D or 3D)
+%     - the marker type, color and size of each unit
+%     - the linetype, color and width of the connecting lines
+%    There are also some other options.
+
+pause % Strike any key to see some visualizations...
+
+%    Here are four visualizations made with SOM_GRID: 
+%     - The map grid in the output space.
+
+subplot(2,2,1)
+som_grid(sMap,'Linecolor','k')
+view(0,-90), title('Map grid')
+
+%     - A surface plot of distance matrix: both color and 
+%       z-coordinate indicate average distance to neighboring 
+%       map units. This is closely related to the U-matrix.
+
+subplot(2,2,2)
+Co=som_unit_coords(sMap); U=som_umat(sMap); U=U(1:2:size(U,1),1:2:size(U,2));
+som_grid(sMap,'Coord',[Co, U(:)],'Surf',U(:),'Marker','none');
+view(-80,45), axis tight, title('Distance matrix')
+
+%     - The map grid in the output space. Three first components
+%       determine the 3D-coordinates of the map unit, and the size
+%       of the marker is determined by the fourth component.
+%       Note that the values have been denormalized.
+
+subplot(2,2,3)
+M = som_denormalize(sMap.codebook,sMap);
+som_grid(sMap,'Coord',M(:,1:3),'MarkerSize',M(:,4)*2)
+view(-80,45), axis tight, title('Prototypes')
+
+%     - Map grid as above, but the original data has been plotted
+%       also: coordinates show the values of three first components
+%       and color indicates the species of each sample.  Fourth
+%       component is not shown.
+
+subplot(2,2,4)
+som_grid(sMap,'Coord',M(:,1:3),'MarkerSize',M(:,4)*2)
+hold on
+D = som_denormalize(sDiris.data,sDiris); 
+plot3(D(1:50,1),D(1:50,2),D(1:50,3),'r.',...
+      D(51:100,1),D(51:100,2),D(51:100,3),'g.',...
+      D(101:150,1),D(101:150,2),D(101:150,3),'b.')
+view(-72,64), axis tight, title('Prototypes and data')
+
+pause % Strike any key to continue...
+
+%    STEP 5: ANALYSIS OF RESULTS
+%    ===========================
+
+%    The purpose of this step highly depends on the purpose of the
+%    whole data analysis: is it segmentation, modeling, novelty
+%    detection, classification, or something else? For this reason, 
+%    there is not a single general-purpose analysis function, but 
+%    a number of individual functions which may, or may not, prove 
+%    useful in any specific case.
+
+%    Visualization is of course part of the analysis of
+%    results. Examination of labels and hit histograms is another
+%    part. Yet another is validation of the quality of the SOM (see
+%    the use of SOM_QUALITY in SOM_DEMO1).
+
+[qe,te] = som_quality(sMap,sDiris)
+
+%    People have contributed a number of functions to the Toolbox
+%    which can be used for the analysis. These include functions for 
+%    vector projection, clustering, pdf-estimation, modeling,
+%    classification, etc. However, ultimately the use of these
+%    tools is up to you.
+
+%    More about visualization is presented in SOM_DEMO3.
+%    More about data analysis is presented in SOM_DEMO4.
+
+echo off
+warning on
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_demo3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,706 @@
+
+%SOM_DEMO3 Self-organizing map visualization.
+
+% Contributed to SOM Toolbox 2.0, February 11th, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 071197 
+% Version 2.0beta juuso 080200 070600
+
+clf reset;
+figure(gcf)
+echo on
+
+
+
+
+clc
+%    ==========================================================
+%    SOM_DEMO3 - VISUALIZATION
+%    ==========================================================
+
+%    som_show           - Visualize map.
+%    som_grid           - Visualization with free coordinates.
+%
+%    som_show_add       - Add markers on som_show visualization.
+%    som_show_clear     - Remove markers from som_show visualization.
+%    som_recolorbar     - Refresh and rescale colorbars in som_show 
+%                         visualization.
+%
+%    som_cplane         - Visualize component/color/U-matrix plane.
+%    som_pieplane       - Visualize prototype vectors as pie charts.
+%    som_barplane       - Visualize prototype vectors as bar charts.
+%    som_plotplane      - Visualize prototype vectors as line graphs.
+%
+%    pcaproj            - Projection to principal component space.
+%    cca                - Projection with Curvilinear Component Analysis.
+%    sammon             - Projection with Sammon's mapping.
+%    som_umat           - Calculate U-matrix.
+%    som_colorcode      - Color coding for the map.
+%    som_normcolor      - RGB values of indexed colors.
+%    som_hits           - Hit histograms for the map.
+
+%    The basic functions for SOM visualization are SOM_SHOW and
+%    SOM_GRID. The SOM_SHOW has three auxiliary functions:
+%    SOM_SHOW_ADD, SOM_SHOW_CLEAR and SOM_RECOLORBAR which are used 
+%    to add and remove markers and to control the colorbars.
+%    SOM_SHOW actually uses SOM_CPLANE to make the visualizations.
+%    Also SOM_{PIE,BAR,PLOT}PLANE can be used to visualize SOMs.
+
+%    The other functions listed above do not themselves visualize
+%    anything, but their results are used in the visualizations.
+    
+%    There's an important limitation that visualization functions have:
+%    while the SOM Toolbox otherwise supports N-dimensional map grids, 
+%    visualization only works for 1- and 2-dimensional map grids!!!
+
+pause % Strike any key to create demo data and map...
+
+
+
+
+
+clc
+%    DEMO DATA AND MAP
+%    =================
+
+%    The data set contructed for this demo consists of random vectors
+%    in three gaussian kernels the centers of which are at [0, 0, 0],
+%    [3 3 3] and [9 0 0]. The map is trained using default parameters.
+
+D1 = randn(100,3);
+D2 = randn(100,3) + 3;
+D3 = randn(100,3); D3(:,1) = D3(:,1) + 9;
+
+sD = som_data_struct([D1; D2; D3],'name','Demo3 data',...
+		     'comp_names',{'X-coord','Y-coord','Z-coord'});
+sM = som_make(sD);
+
+%    Since the data (and thus the prototypes of the map) are
+%    3-dimensional, they can be directly plotted using PLOT3.
+%    Below, the data is plotted using red 'o's and the map
+%    prototype vectors with black '+'s.
+
+plot3(sD.data(:,1),sD.data(:,2),sD.data(:,3),'ro',...
+      sM.codebook(:,1),sM.codebook(:,2),sM.codebook(:,3),'k+')
+rotate3d on
+
+%    From the visualization it is pretty easy to see what the data is
+%    like, and how the prototypes have been positioned. One can see
+%    that there are three clusters, and that there are some prototype
+%    vectors between the clusters, although there is actually no
+%    data there. The map units corresponding to these prototypes
+%    are called 'dead' or 'interpolative' map units.
+
+pause % Strike any key to continue...
+
+
+
+clc
+%    VISUALIZATION OF MULTIDIMENSIONAL DATA
+%    ======================================
+
+%    Usually visualization of data sets is not this straightforward,
+%    since the dimensionality is much higher than three. In principle,
+%    one can embed additional information to the visualization by
+%    using properties other than position, for example color, size or
+%    shape.
+
+%    Here the data set and map prototypes are plotted again, but
+%    information of the cluster is shown using color: red for the
+%    first cluster, green for the second and blue for the last.
+
+plot3(sD.data(1:100,1),sD.data(1:100,2),sD.data(1:100,3),'ro',...
+      sD.data(101:200,1),sD.data(101:200,2),sD.data(101:200,3),'go',...
+      sD.data(201:300,1),sD.data(201:300,2),sD.data(201:300,3),'bo',...
+      sM.codebook(:,1),sM.codebook(:,2),sM.codebook(:,3),'k+')
+rotate3d on
+
+%    However, this works only for relatively small dimensionality, say
+%    less than 10. When the information is added this way, the
+%    visualization becomes harder and harder to understand. Also, not
+%    all properties are equal: the human visual system perceives
+%    colors differently from position, not to mention the complex
+%    rules governing perception of shape. 
+
+pause % Strike any key to learn about linking...
+
+
+
+
+
+clc
+%    LINKING MULTIPLE VISUALIZATIONS
+%    ===============================
+
+%    The other option is to use *multiple visualizations*, so called
+%    small multiples, instead of only one. The problem is then how to
+%    link these visualizations together: one should be able to idetify
+%    the same object from the different visualizations.
+
+%    This could be done using, for example, color: each object has
+%    the same color in each visualization. Another option is to use 
+%    similar position: each object has the same position in each
+%    small multiple.
+
+%    For example, here are four subplots, one for each component and
+%    one for cluster information, where color denotes the value and
+%    position is used for linking. The 2D-position is derived by
+%    projecting the data into the space spanned by its two greatest
+%    eigenvectors.
+
+[Pd,V,me] = pcaproj(sD.data,2);        % project the data
+Pm        = pcaproj(sM.codebook,V,me); % project the prototypes
+colormap(hot);                         % colormap used for values
+
+echo off
+for c=1:3, 
+  subplot(2,2,c), cla, hold on
+  som_grid('rect',[300 1],'coord',Pd,'Line','none',...
+	   'MarkerColor',som_normcolor(sD.data(:,c)));
+  som_grid(sM,'Coord',Pm,'Line','none','marker','+');
+  hold off, title(sD.comp_names{c}), xlabel('PC 1'), ylabel('PC 2');
+end
+
+subplot(2,2,4), cla
+plot(Pd(1:100,1),Pd(1:100,2),'ro',...
+     Pd(101:200,1),Pd(101:200,2),'go',...
+     Pd(201:300,1),Pd(201:300,2),'bo',...
+     Pm(:,1),Pm(:,2),'k+')
+title('Cluster')
+echo on
+
+pause % Strike any key to use color for linking...
+
+%    Here is another example, where color is used for linking. On the
+%    top right triangle are the scatter plots of each variable without
+%    color coding, and on the bottom left triangle with the color
+%    coding. In the colored figures, each data sample can be
+%    identified by a unique color. Well, almost identified: there are
+%    quite a lot of samples with almost the same color. Color is not as
+%    precise linking method as position.
+
+echo off 
+Col = som_normcolor([1:300]',jet(300));
+k=1;
+for i=1:3, 
+  for j=1:3, 
+    if i<j, i1=i; i2=j; else i1=j; i2=i; end
+    if i<j,
+      subplot(3,3,k); cla
+      plot(sD.data(:,i1),sD.data(:,i2),'ko')
+      xlabel(sD.comp_names{i1}), ylabel(sD.comp_names{i2})
+    elseif i>j,
+      subplot(3,3,k); cla
+      som_grid('rect',[300 1],'coord',sD.data(:,[i1 i2]),...
+	       'Line','none','MarkerColor',Col);
+      xlabel(sD.comp_names{i1}), ylabel(sD.comp_names{i2})
+    end
+    k=k+1;
+  end
+end
+echo on
+
+pause % Strike any key to learn about data visualization using SOM...
+
+
+clc
+%    DATA VISUALIZATION USING SOM
+%    ============================
+
+%    The basic visualization functions and their usage have already
+%    been introduced in SOM_DEMO2. In this demo, a more structured
+%    presentation is given. 
+
+%    Data visualization techniques using the SOM can be divided to
+%    three categories based on their goal:
+
+%     1. visualization of clusters and shape of the data:
+%        projections, U-matrices and other distance matrices
+%
+%     2. visualization of components / variables: 
+%        component planes, scatter plots
+%
+%     3. visualization of data projections: 
+%        hit histograms, response surfaces
+
+pause % Strike any key to visualize clusters with distance matrices...
+
+
+
+clf
+clc
+%    1. VISUALIZATION OF CLUSTERS: DISTANCE MATRICES
+%    ===============================================
+
+%    Distance matrices are typically used to show the cluster
+%    structure of the SOM. They show distances between neighboring
+%    units, and are thus closely related to single linkage clustering
+%    techniques. The most widely used distance matrix technique is
+%    the U-matrix. 
+
+%    Here, the U-matrix of the map is shown (using all three
+%    components in the distance calculation):
+
+colormap(1-gray)
+som_show(sM,'umat','all');
+
+pause % Strike any key to see more examples of distance matrices...
+
+%    The function SOM_UMAT can be used to calculate U-matrix.  The
+%    resulting matrix holds distances between neighboring map units,
+%    as well as the median distance from each map unit to its
+%    neighbors. These median distances corresponding to each map unit
+%    can be easily extracted. The result is a distance matrix using
+%    median distance.
+
+U = som_umat(sM);
+Um = U(1:2:size(U,1),1:2:size(U,2));
+
+%    A related technique is to assign colors to the map units such
+%    that similar map units get similar colors.
+
+%    Here, four clustering figures are shown: 
+%     - U-matrix
+%     - median distance matrix (with grayscale)
+%     - median distance matrix (with map unit size)
+%     - similarity coloring, made by spreading a colormap
+%       on top of the principal component projection of the
+%       prototype vectors
+
+subplot(2,2,1)
+h=som_cplane([sM.topol.lattice,'U'],sM.topol.msize, U(:)); 
+set(h,'Edgecolor','none'); title('U-matrix')
+
+subplot(2,2,2)
+h=som_cplane(sM, Um(:));
+set(h,'Edgecolor','none'); title('D-matrix (grayscale)')
+
+subplot(2,2,3)
+som_cplane(sM,'none',1-Um(:)/max(Um(:)))
+title('D-matrix (marker size)')
+
+subplot(2,2,4)
+C = som_colorcode(Pm);  % Pm is the PC-projection calculated earlier
+som_cplane(sM,C)
+title('Similarity coloring')
+
+pause % Strike any key to visualize shape and clusters with projections...
+
+
+
+clf
+clc
+%    1. VISUALIZATION OF CLUSTERS AND SHAPE: PROJECTIONS
+%    ===================================================
+
+%    In vector projection, a set of high-dimensional data samples is
+%    projected to a lower dimensional such that the distances between
+%    data sample pairs are preserved as well as possible. Depending 
+%    on the technique, the projection may be either linear or
+%    non-linear, and it may place special emphasis on preserving
+%    local distances. 
+
+%    For example SOM is a projection technique, since the prototypes
+%    have well-defined positions on the 2-dimensional map grid. SOM as
+%    a projection is however a very crude one. Other projection
+%    techniques include the principal component projection used
+%    earlier, Sammon's mapping and Curvilinear Component Analysis
+%    (to name a few). These have been implemented in functions
+%    PCAPROJ, SAMMON and CCA. 
+
+%    Projecting the map prototype vectors and joining neighboring map
+%    units with lines gives the SOM its characteristic net-like look.
+%    The projection figures can be linked to the map planes using
+%    color coding.
+
+%    Here is the distance matrix, color coding, a projection without
+%    coloring and a projection with one. In the last projection,
+%    the size of interpolating map units has been set to zero.
+
+subplot(2,2,1)
+som_cplane(sM,Um(:));
+title('Distance matrix')
+
+subplot(2,2,2)
+C = som_colorcode(sM,'rgb4');
+som_cplane(sM,C);
+title('Color code')
+
+subplot(2,2,3)
+som_grid(sM,'Coord',Pm,'Linecolor','k');
+title('PC-projection')
+
+subplot(2,2,4)
+h = som_hits(sM,sD); s=6*(h>0);
+som_grid(sM,'Coord',Pm,'MarkerColor',C,'Linecolor','k','MarkerSize',s);
+title('Colored PC-projection')
+
+pause % Strike any key to visualize component planes...
+
+
+clf
+clc
+%    2. VISUALIZATION OF COMPONENTS: COMPONENT PLANES
+%    ================================================
+
+%    The component planes visualizations shows what kind of values the
+%    prototype vectors of the map units have for different vector
+%    components.
+
+%    Here is the U-matrix and the three component planes of the map.
+
+som_show(sM)
+
+pause % Strike any key to continue...
+
+%    Besides SOM_SHOW and SOM_CPLANE, there are three other
+%    functions specifically designed for showing the values of the 
+%    component planes: SOM_PIEPLANE, SOM_BARPLANE, SOM_PLOTPLANE. 
+
+%    SOM_PIEPLANE shows a single pie chart for each map unit.  Each
+%    pie shows the relative proportion of each component of the sum of
+%    all components in that map unit. The component values must be
+%    positive. 
+
+%    SOM_BARPLANE shows a barchart in each map unit. The scaling of 
+%    bars can be made unit-wise or variable-wise. By default it is
+%    determined variable-wise.
+
+%    SOM_PLOTPLANE shows a linegraph in each map unit. 
+
+M = som_normalize(sM.codebook,'range'); 
+
+subplot(1,3,1)
+som_pieplane(sM, M);
+title('som\_pieplane')
+
+subplot(1,3,2)
+som_barplane(sM, M, '', 'unitwise');
+title('som\_barplane')
+
+subplot(1,3,3)
+som_plotplane(sM, M, 'b');
+title('som\_plotplane')
+
+pause % Strike any key to visualize cluster properties...
+
+
+
+clf
+clc
+%    2. VISUALIZATION OF COMPONENTS: CLUSTERS
+%    ========================================
+
+%    An interesting question is of course how do the values of the
+%    variables relate to the clusters: what are the values of the
+%    components in the clusters, and which components are the ones
+%    which *make* the clusters.
+
+som_show(sM)
+
+%    From the U-matrix and component planes, one can easily see
+%    what the typical values are in each cluster. 
+
+pause % Strike any key to continue...
+
+%    The significance of the components with respect to the clustering
+%    is harder to visualize. One indication of importance is that on
+%    the borders of the clusters, values of important variables change
+%    very rabidly.
+
+%    Here, the distance matrix is calculated with respect to each
+%    variable. 
+
+u1 = som_umat(sM,'mask',[1 0 0]'); u1=u1(1:2:size(u1,1),1:2:size(u1,2));
+u2 = som_umat(sM,'mask',[0 1 0]'); u2=u2(1:2:size(u2,1),1:2:size(u2,2));
+u3 = som_umat(sM,'mask',[0 0 1]'); u3=u3(1:2:size(u3,1),1:2:size(u3,2));
+
+%    Here, the distance matrices are shown, as well as a piechart
+%    indicating the relative importance of each variable in each
+%    map unit. The size of piecharts has been scaled by the
+%    distance matrix calculated from all components.
+
+subplot(2,2,1)
+som_cplane(sM,u1(:));
+title(sM.comp_names{1})
+
+subplot(2,2,2)
+som_cplane(sM,u2(:));
+title(sM.comp_names{2})
+
+subplot(2,2,3)
+som_cplane(sM,u3(:));
+title(sM.comp_names{3})
+
+subplot(2,2,4)
+som_pieplane(sM, [u1(:), u2(:), u3(:)], hsv(3), Um(:)/max(Um(:)));
+title('Relative importance')
+
+%    From the last subplot, one can see that in the area where the
+%    bigger cluster border is, the 'X-coord' component (red color)
+%    has biggest effect, and thus is the main factor in separating
+%    that cluster from the rest.
+
+pause % Strike any key to learn about correlation hunting...
+
+
+clf
+clc
+%    2. VISUALIZATION OF COMPONENTS: CORRELATION HUNTING
+%    ===================================================
+
+%    Finally, the component planes are often used for correlation
+%    hunting. When the number of variables is high, the component
+%    plane visualization offers a convenient way to visualize all
+%    components at once and hunt for correlations (as opposed to
+%    N*(N-1)/2 scatterplots).
+
+%    Hunting correlations this way is not very accurate. However, it
+%    is easy to select interesting combinations for further
+%    investigation.
+
+%    Here, the first and third components are shown with scatter
+%    plot. As with projections, a color coding is used to link the
+%    visualization to the map plane. In the color coding, size shows
+%    the distance matrix information.
+
+C = som_colorcode(sM);
+subplot(1,2,1)
+som_cplane(sM,C,1-Um(:)/max(Um(:)));
+title('Color coding + distance matrix')
+
+subplot(1,2,2)
+som_grid(sM,'Coord',sM.codebook(:,[1 3]),'MarkerColor',C);
+title('Scatter plot'); xlabel(sM.comp_names{1}); ylabel(sM.comp_names{3})
+axis equal
+
+pause % Strike any key to visualize data responses...
+
+
+clf
+clc
+%    3. DATA ON MAP
+%    ==============
+
+%    The SOM is a map of the data manifold. An interesting question
+%    then is where on the map a specific data sample is located, and
+%    how accurate is that localization? One is interested in the
+%    response of the map to the data sample. 
+
+%    The simplest answer is to find the BMU of the data sample.
+%    However, this gives no indication of the accuracy of the
+%    match. Is the data sample close to the BMU, or is it actually
+%    equally close to the neighboring map units (or even approximately
+%    as close to all map units)? Sometimes accuracy doesn't really
+%    matter, but if it does, it should be visualized somehow.
+
+%    Here are different kinds of response visualizations for two
+%    vectors: [0 0 0] and [99 99 99]. 
+%     - BMUs indicated with labels       
+%     - BMUs indicated with markers, relative quantization errors
+%       (in this case, proportion between distances to BMU and 
+%       Worst-MU) with vertical lines
+%     - quantization error between the samples and all map units 
+%     - fuzzy response (a non-linear function of quantization
+%       error) of all map units
+
+echo off
+[bm,qe] = som_bmus(sM,[0 0 0; 99 99 99],'all'); % distance to all map units
+[dummy,ind] = sort(bm(1,:)); d0 = qe(1,ind)'; 
+[dummy,ind] = sort(bm(2,:)); d9 = qe(2,ind)'; 
+bmu0 = bm(1,1); bmu9 = bm(2,1); % bmus
+
+h0 = zeros(prod(sM.topol.msize),1); h0(bmu0) = 1; % crisp hits
+h9 = zeros(prod(sM.topol.msize),1); h9(bmu9) = 1; 
+
+lab = cell(prod(sM.topol.msize),1); 
+lab{bmu0} = '[0,0,0]'; lab{bmu9} = '[99,99,99]';
+
+hf0 = som_hits(sM,[0 0 0],'fuzzy'); % fuzzy response
+hf9 = som_hits(sM,[99 99 99],'fuzzy'); 
+
+som_show(sM,'umat',{'all','BMU'},...
+	 'color',{d0,'Qerror 0'},'color',{hf0,'Fuzzy response 0'},...
+	 'empty','BMU+qerror',...
+	 'color',{d9,'Qerror 99'},'color',{hf9,'Fuzzy response 99'});	 
+som_show_add('label',lab,'Subplot',1,'Textcolor','r');
+som_show_add('hit',[h0, h9],'Subplot',4,'MarkerColor','r');
+hold on
+Co = som_vis_coords(sM.topol.lattice,sM.topol.msize);
+plot3(Co(bmu0,[1 1]),Co(bmu0,[2 2]),[0 10*qe(1,1)/qe(1,end)],'r-')
+plot3(Co(bmu9,[1 1]),Co(bmu9,[2 2]),[0 10*qe(2,1)/qe(2,end)],'r-')
+view(3), axis equal
+echo on
+
+%    Here are the distances to BMU, 2-BMU and WMU:
+
+qe(1,[1,2,end]) % [0 0 0]
+qe(2,[1,2,end]) % [99 99 99]
+
+%    One can see that for [0 0 0] the accuracy is pretty good as the
+%    quantization error of the BMU is much lower than that of the
+%    WMU. On the other hand [99 99 99] is very far from the map:
+%    distance to BMU is almost equal to distance to WMU.
+
+pause % Strike any key to visualize responses of multiple samples...
+
+
+
+clc
+clf
+%    3. DATA ON MAP: HIT HISTOGRAMS
+%    ==============================
+
+%    One can also investigate whole data sets using the map. When the
+%    BMUs of multiple data samples are aggregated, a hit histogram
+%    results. Instead of BMUs, one can also aggregate for example
+%    fuzzy responses.
+
+%    The hit histograms (or aggregated responses) can then be compared
+%    with each other. 
+
+%    Here are hit histograms of three data sets: one with 50 first
+%    vectors of the data set, one with 150 samples from the data
+%    set, and one with 50 randomly selected samples. In the last
+%    subplot, the fuzzy response of the first data set.
+
+dlen = size(sD.data,1);
+Dsample1 = sD.data(1:50,:); h1 = som_hits(sM,Dsample1); 
+Dsample2 = sD.data(1:150,:); h2 = som_hits(sM,Dsample2); 
+Dsample3 = sD.data(ceil(rand(50,1)*dlen),:); h3 = som_hits(sM,Dsample3); 
+hf = som_hits(sM,Dsample1,'fuzzy');
+
+som_show(sM,'umat','all','umat','all','umat','all','color',{hf,'Fuzzy'})
+som_show_add('hit',h1,'Subplot',1,'Markercolor','r')
+som_show_add('hit',h2,'Subplot',2,'Markercolor','r')
+som_show_add('hit',h3,'Subplot',3,'Markercolor','r')
+
+pause % Strike any key to visualize trajectories...
+
+
+
+clc
+clf
+%    3. DATA ON MAP: TRAJECTORIES
+%    ============================
+
+%    A special data mapping technique is trajectory. If the samples
+%    are ordered, forming a time-series for example, their response on
+%    the map can be tracked. The function SOM_SHOW_ADD can be used to
+%    show the trajectories in two different modes: 'traj' and 'comet'.
+
+%    Here, a series of data points is formed which go from [8,0,0]
+%    to [2,2,2]. The trajectory is plotted using the two modes.
+
+Dtraj = [linspace(9,2,20); linspace(0,2,20); linspace(0,2,20)]';
+T = som_bmus(sM,Dtraj);
+
+som_show(sM,'comp',[1 1]);
+som_show_add('traj',T,'Markercolor','r','TrajColor','r','subplot',1);
+som_show_add('comet',T,'MarkerColor','r','subplot',2);
+
+%    There's also a function SOM_TRAJECTORY which lauches a GUI
+%    specifically designed for displaying trajectories (in 'comet'
+%    mode).
+
+pause % Strike any key to learn about color handling...
+
+
+
+
+clc
+clf
+%    COLOR HANDLING
+%    ==============
+
+%    Matlab offers flexibility in the colormaps. Using the COLORMAP
+%    function, the colormap may be changed. There are several useful
+%    colormaps readily available, for example 'hot' and 'jet'. The
+%    default number of colors in the colormaps is 64. However, it is
+%    often advantageous to use less colors in the colormap. This way
+%    the components planes visualization become easier to interpret.
+
+%    Here the three component planes are visualized using the 'hot'
+%    colormap and only three colors.
+
+som_show(sM,'comp',[1 2 3])
+colormap(hot(3));
+som_recolorbar 
+
+pause % Press any key to change the colorbar labels...
+
+%     The function SOM_RECOLORBAR can be used to reconfigure
+%     the labels beside the colorbar. 
+
+%     Here the colorbar of the first subplot is labeled using labels
+%     'small', 'medium' and 'big' at values 0, 1 and 2.  For the
+%     colorbar of the second subplot, values are calculated for the
+%     borders between colors.
+
+som_recolorbar(1,{[0 4 9]},'',{{'small','medium','big'}});
+som_recolorbar(2,'border','');
+
+pause % Press any key to learn about SOM_NORMCOLOR...
+
+%     Some SOM Toolbox functions do not use indexed colors if the
+%     underlying Matlab function (e.g. PLOT) do not use indexed
+%     colors. SOM_NORMCOLOR is a convenient function to simulate
+%     indexed colors: it calculates fixed RGB colors that
+%     are similar to indexed colors with the specified colormap. 
+
+%     Here, two SOM_GRID visualizations are created. One uses the
+%     'surf' mode to show the component colors in indexed color
+%     mode, and the other uses SOM_NORMALIZE to do the same. 
+
+clf
+colormap(jet(64))
+subplot(1,2,1)
+som_grid(sM,'Surf',sM.codebook(:,3));
+title('Surf mode')
+
+subplot(1,2,2)
+som_grid(sM,'Markercolor',som_normcolor(sM.codebook(:,3)));
+title('som\_normcolor')
+
+pause % Press any key to visualize different map shapes...
+
+
+
+clc
+clf
+%    DIFFERENT MAP SHAPES
+%    ====================
+
+%    There's no direct way to visualize cylinder or toroid maps. When
+%    visualized, they are treated exactly as if they were sheet
+%    shaped. However, if function SOM_UNIT_COORDS is used to provide
+%    unit coordinates, then SOM_GRID can be used to visualize these
+%    alternative map shapes.
+
+%    Here the grids of the three possible map shapes (sheet, cylinder
+%    and toroid) are visualized. The last subplot shows a component 
+%    plane visualization of the toroid map.
+
+Cor = som_unit_coords(sM.topol.msize,'hexa','sheet');
+Coc = som_unit_coords(sM.topol.msize,'hexa','cyl');
+Cot = som_unit_coords(sM.topol.msize,'hexa','toroid');
+
+subplot(2,2,1)
+som_grid(sM,'Coord',Cor,'Markersize',3,'Linecolor','k');
+title('sheet'), view(0,-90), axis tight, axis equal
+
+subplot(2,2,2)
+som_grid(sM,'Coord',Coc,'Markersize',3,'Linecolor','k');
+title('cylinder'), view(5,1), axis tight, axis equal
+
+subplot(2,2,3)
+som_grid(sM,'Coord',Cot,'Markersize',3,'Linecolor','k');
+title('toroid'), view(-100,0), axis tight, axis equal
+
+subplot(2,2,4)
+som_grid(sM,'Coord',Cot,'Surf',sM.codebook(:,3));
+colormap(jet), colorbar
+title('toroid'), view(-100,0), axis tight, axis equal
+
+echo off
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_demo4.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,307 @@
+
+%SOM_DEMO4 Data analysis using the SOM.
+
+% Contributed to SOM Toolbox 2.0, February 11th, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 071197 
+% Version 2.0beta juuso 090200 070600
+
+clf reset;
+f0 = gcf;
+echo on
+
+
+
+
+clc
+%    ==========================================================
+%    SOM_DEMO4 - DATA ANALYSIS USING THE SOM
+%    ==========================================================
+
+%    In this demo, the IRIS data set is analysed using SOM. First, the
+%    data is read from ascii file (please make sure they can be found
+%    from the current path), normalized, and a map is
+%    trained. Since the data also had labels, the map is labelled.
+
+try, 
+  sD = som_read_data('iris.data');     
+catch
+  echo off
+
+  warning('File ''iris.data'' not found. Using simulated data instead.')
+  
+  D = randn(50,4); 
+  D(:,1) = D(:,1)+5;     D(:,2) = D(:,2)+3.5; 
+  D(:,3) = D(:,3)/2+1.5; D(:,4) = D(:,4)/2+0.3;
+  D2 = randn(100,4); D2(:,2) = sort(D2(:,2));
+  D2(:,1) = D2(:,1)+6.5; D2(:,2) = D2(:,2)+2.8; 
+  D2(:,3) = D2(:,3)+5;   D2(:,4) = D2(:,4)/2+1.5;  
+  sD = som_data_struct([D; D2],'name','iris (simulated)',...
+		       'comp_names',{'SepalL','SepalW','PetalL','PetalW'});
+  sD = som_label(sD,'add',[1:50]','Setosa');
+  sD = som_label(sD,'add',[51:100]','Versicolor');
+  sD = som_label(sD,'add',[101:150]','Virginica');
+  
+  echo on
+end
+
+sD = som_normalize(sD,'var');
+sM = som_make(sD);
+sM = som_autolabel(sM,sD,'vote');
+
+pause % Strike any key to visualize the map...
+
+clc 
+%    VISUAL INSPECTION OF THE MAP
+%    ============================
+
+%    The first step in the analysis of the map is visual inspection.
+%    Here is the U-matrix, component planes and labels (you may
+%    need to enlarge the figure in order to make out the labels).
+
+som_show(sM,'umat','all','comp',[1:4],'empty','Labels','norm','d');
+som_show_add('label',sM.labels,'textsize',8,'textcolor','r','subplot',6);
+
+%    From this first visualization, one can see that:
+%     - there are essentially two clusters
+%     - PetalL and PetalW are highly correlated
+%     - SepalL is somewhat correlated to PetalL and PetalW
+%     - one cluster corresponds to the Setosa species and exhibits
+%       small petals and short but wide sepals
+%     - the other cluster corresponds to Virginica and Versicolor
+%       such that Versicolor has smaller leaves (both sepal and
+%       petal) than Virginica
+%     - inside both clusters, SepalL and SepalW are highly correlated
+
+pause % Strike any key to continue...
+
+%    Next, the projection of the data set is investigated. A
+%    principle component projection is made for the data, and applied
+%    to the map. The colormap is done by spreading a colormap on the
+%    projection. Distance matrix information is extracted from the
+%    U-matrix, and it is modified by knowledge of zero-hits
+%    (interpolative) units. Finally, three visualizations are shown:
+%    the color code, with clustering information and the number of
+%    hits in each unit, the projection and the labels.
+
+echo off
+
+f1=figure;
+[Pd,V,me,l] = pcaproj(sD,2); Pm = pcaproj(sM,V,me); % PC-projection
+Code = som_colorcode(Pm); % color coding
+hits = som_hits(sM,sD);  % hits
+U = som_umat(sM); % U-matrix
+Dm = U(1:2:size(U,1),1:2:size(U,2)); % distance matrix
+Dm = 1-Dm(:)/max(Dm(:)); Dm(find(hits==0)) = 0; % clustering info
+
+subplot(1,3,1)
+som_cplane(sM,Code,Dm);
+hold on
+som_grid(sM,'Label',cellstr(int2str(hits)),...
+	 'Line','none','Marker','none','Labelcolor','k');
+hold off 
+title('Color code')
+
+subplot(1,3,2)
+som_grid(sM,'Coord',Pm,'MarkerColor',Code,'Linecolor','k');
+hold on, plot(Pd(:,1),Pd(:,2),'k+'), hold off, axis tight, axis equal
+title('PC projection')
+
+subplot(1,3,3)
+som_cplane(sM,'none')
+hold on
+som_grid(sM,'Label',sM.labels,'Labelsize',8,...
+	 'Line','none','Marker','none','Labelcolor','r');
+hold off
+title('Labels')
+
+echo on
+
+%    From these figures one can see that: 
+%     - the projection confirms the existence of two different clusters
+%     - interpolative units seem to divide the Virginica
+%       flowers into two classes, the difference being in the size of
+%       sepal leaves
+    
+pause % Strike any key to continue...
+
+%    Finally, perhaps the most informative figure of all: simple
+%    scatter plots and histograms of all variables. The species
+%    information is coded as a fifth variable: 1 for Setosa, 2 for
+%    Versicolor and 3 for Virginica. Original data points are in the
+%    upper triangle, map prototype values on the lower triangle, and
+%    histograms on the diagonal: black for the data set and red for
+%    the map prototype values. The color coding of the data samples
+%    has been copied from the map (from the BMU of each sample). Note
+%    that the variable values have been denormalized.
+
+echo off
+
+% denormalize and add species information
+names = sD.comp_names; names{end+1} = 'species';
+D = som_denormalize(sD.data,sD); dlen = size(D,1);
+s = zeros(dlen,1)+NaN; s(strcmp(sD.labels,'Setosa'))=1;
+s(strcmp(sD.labels,'Versicolor'))=2; s(strcmp(sD.labels,'Virginica'))=3;
+D = [D, s];
+M = som_denormalize(sM.codebook,sM); munits = size(M,1);
+s = zeros(munits,1)+NaN; s(strcmp(sM.labels,'Setosa'))=1;
+s(strcmp(sM.labels,'Versicolor'))=2; s(strcmp(sM.labels,'Virginica'))=3;
+M = [M, s];
+
+f2=figure;
+
+% color coding copied from the map
+bmus = som_bmus(sM,sD); Code_data = Code(bmus,:); 
+
+k=1; 
+for i=1:5, for j=1:5, 
+    if i<j, i1=i; i2=j; else i1=j; i2=i; end
+    subplot(5,5,k); cla
+    if i<j,
+      som_grid('rect',[dlen 1],'coord',D(:,[i1 i2]),...
+	       'Line','none','MarkerColor',Code_data,'Markersize',2);
+      title(sprintf('%s vs. %s',names{i1},names{i2}))
+    elseif i>j,
+      som_grid(sM,'coord',M(:,[i1 i2]),...
+	       'markersize',2,'MarkerColor',Code);
+      title(sprintf('%s vs. %s',names{i1},names{i2}))
+    else
+      if i1<5, b = 10; else b = 3; end
+      [nd,x] = hist(D(:,i1),b); nd=nd/sum(nd); 
+      nm = hist(M(:,i1),x); nm = nm/sum(nm);
+      h=bar(x,nd,0.8); set(h,'EdgeColor','none','FaceColor','k'); 
+      hold on 
+      h=bar(x,nm,0.3); set(h,'EdgeColor','none','FaceColor','r'); 
+      hold off
+      title(names{i1})
+    end
+    k=k+1;
+  end
+end
+
+echo on
+
+%    This visualization shows quite a lot of information:
+%    distributions of single and pairs of variables both in the data
+%    and in the map. If the number of variables was even slightly
+%    more, it would require a really big display to be convenient to
+%    use.
+
+%    From this visualization we can conform many of the earlier
+%    conclusions, for example: 
+%     - there are two clusters: 'Setosa' (blue, dark green) and 
+%       'Virginica'/'Versicolor' (light green, yellow, reds)
+%       (see almost any of the subplots)
+%     - PetalL and PetalW have a high linear correlation (see
+%       subplots 4,3 and 3,4)
+%     - SepalL is correlated (at least in the bigger cluster) with
+%       PetalL and PetalW (in subplots 1,3 1,4 3,1 and 4,1)
+%     - SepalL and SepalW have a clear linear correlation, but it
+%       is slightly different for the two main clusters (in
+%       subplots 2,1 and 1,2)       
+
+pause % Strike any key to cluster the map...
+
+close(f1), close(f2), figure(f0), clf
+
+clc 
+%    CLUSTERING OF THE MAP
+%    =====================
+
+%    Visual inspection already hinted that there are at least two
+%    clusters in the data, and that the properties of the clusters are
+%    different from each other (esp. relation of SepalL and
+%    SepalW). For further investigation, the map needs to be
+%    partitioned.
+
+%    Here, the KMEANS_CLUSTERS function is used to find an initial
+%    partitioning. The plot shows the Davies-Boulding clustering
+%    index, which is minimized with best clustering.
+
+subplot(1,3,1)
+[c,p,err,ind] = kmeans_clusters(sM, 7); % find at most 7 clusters
+plot(1:length(ind),ind,'x-')
+[dummy,i] = min(ind)
+cl = p{i};
+
+%    The Davies-Boulding index seems to indicate that there are
+%    two clusters on the map. Here is the clustering info
+%    calculated previously and the partitioning result: 
+
+subplot(1,3,2)
+som_cplane(sM,Code,Dm)
+subplot(1,3,3)
+som_cplane(sM,cl)
+
+%    You could use also function SOM_SELECT to manually make or modify
+%    the partitioning.
+
+%    After this, the analysis would proceed with summarization of the
+%    results, and analysis of each cluster one at a time.
+%    Unfortunately, you have to do that yourself. The SOM Toolbox does
+%    not, yet, have functions for those purposes.
+
+pause % Strike any key to continue...
+
+
+clf
+clc 
+%    MODELING
+%    ========
+
+%    One can also build models on top of the SOM. Typically, these
+%    models are simple local or nearest-neighbor models. 
+
+%    Here, SOM is used for probability density estimation. Each map 
+%    prototype is the center of a gaussian kernel, the parameters
+%    of which are estimated from the data. The gaussian mixture
+%    model is estimated with function SOM_ESTIMATE_GMM and the
+%    probabilities can be calculated with SOM_PROBABILITY_GMM.
+
+[K,P] = som_estimate_gmm(sM,sD);
+[pd,Pdm,pmd] = som_probability_gmm(sD,sM,K,P);
+
+%    Here is the probability density function value for the first data
+%    sample (x=sD.data(:,1)) in terms of each map unit (m):
+
+som_cplane(sM,Pdm(:,1))
+colorbar
+title('p(x|m)')
+
+pause % Strike any key to continue...
+
+%    Here, SOM is used for classification. Although the SOM can be
+%    used for classification as such, one has to remember that it does
+%    not utilize class information at all, and thus its results are
+%    inherently suboptimal. However, with small modifications, the
+%    network can take the class into account. The function
+%    SOM_SUPERVISED does this.
+
+%    Learning vector quantization (LVQ) is an algorithm that is very
+%    similar to the SOM in many aspects. However, it is specifically
+%    designed for classification. In the SOM Toolbox, there are
+%    functions LVQ1 and LVQ3 that implement two versions of this
+%    algorithm.
+
+%    Here, the function SOM_SUPERVISED is used to create a classifier
+%    for IRIS data set:
+
+sM = som_supervised(sD,'small');
+
+som_show(sM,'umat','all');
+som_show_add('label',sM.labels,'TextSize',8,'TextColor','r')
+
+sD2 = som_label(sD,'clear','all'); 
+sD2 = som_autolabel(sD2,sM);       % classification
+ok = strcmp(sD2.labels,sD.labels); % errors
+100*(1-sum(ok)/length(ok))         % error percentage (%)
+
+echo off
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dendrogram.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,292 @@
+function [h,Coord,Color,height] = som_dendrogram(Z,varargin)
+
+%SOM_DENDROGRAM Visualize a dendrogram.
+%
+% [h,Coord,Color,height] = som_dendrogram(Z, [[argID,] value, ...])
+%
+%  Z = som_linkage(sM); 
+%  som_dendrogram(Z); 
+%  som_dendrogram(Z,sM); 
+%  som_dendrogram(Z,'coord',co); 
+%
+%  Input and output arguments ([]'s are optional):
+%   h        (vector) handle to the arc lines
+%   Z        (matrix) size n-1 x 1, the hierarchical cluster matrix
+%                     returned by functions like LINKAGE and SOM_LINKAGE
+%                     n is the number of original data samples.
+%   [argID,  (string) See below. The values which are unambiguous can 
+%    value]  (varies) be given without the preceeding argID.
+%   Coord    (matrix) size 2*n-1 x {1,2}, the coordinates of the
+%                     original data samples and cluster nodes used 
+%                     in the visualization
+%   Color    (matrix) size 2*n-1 x 3, the colors of ...
+%   height   (vector) size 2*n-1 x 1, the heights of ...
+%   
+% Here are the valid argument IDs and corresponding values. The values 
+% which are unambiguous (marked with '*') can be given without the
+% preceeding argID.
+%   'data'  *(struct) map or data struct: many other optional 
+%                     arguments require this 
+%            (matrix) data matrix
+%   'coord'  (matrix) size n x 1 or n x 2, the coordinates of 
+%                     the original data samples either in 1D or 2D
+%            (matrix) size 2*n-1 x {1,2}, the coordinates of both
+%                     original data samples and each cluster
+%           *(string) 'SOM', 'pca#', 'sammon#', or 'cca#': the coordinates
+%                     are calculated using the given data and the 
+%                     required projection algorithm. The '#' at the
+%                     end of projection algorithms refers to the 
+%                     desired output dimension and can be either 1 or 2
+%                     (2 by default). In case of 'SOM', the unit
+%                     coordinates (given by SOM_VIS_COORDS) are used.
+%   'color'  (matrix) size n x 3, the color of the original data samples
+%            (matrix) size 2*n-1 x 3, the colors of both original 
+%                     data samples and each cluster
+%            (string) color specification, e.g. 'r.', used for each node
+%   'height' (vector) size n-1 x 1, the heights used for each cluster
+%            (vector) size 2*n-1 x 1, the heights used for both original
+%                     data samples and each cluster
+%           *(string) 'order', the order of combination determines height
+%                     'depth', the depth at which the combination
+%                     happens determines height
+%   'linecolor' (string) color specification for the arc color, 'k' by default
+%               (vector) size 1 x 3
+%
+% See also SOM_LINKAGE, DENDROGRAM.
+
+% Copyright (c) 2000 by Juha Vesanto
+% Contributed to SOM Toolbox on June 16th, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta juuso 160600
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% read the arguments
+
+% Z 
+nd = size(Z,1)+1; 
+nc = size(Z,1); 
+
+% varargin
+Coordtype = 'natural'; Coord = []; codim = 1; 
+Colortype = 'none'; Color = [];
+height = [zeros(nd,1); Z(:,3)]; 
+M = []; 
+linecol = 'k'; 
+
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     case 'data', i = i + 1; M = varargin{i}; 
+     case 'coord', 
+      i=i+1; 
+      if isnumeric(varargin{i}), Coord = varargin{i}; Coordtype = 'given'; 
+      else 
+	if strcmp(varargin{i},'SOM'), Coordtype = 'SOM'; 
+	else Coordtype = 'projection'; Coord = varargin{i}; 
+	end
+      end
+     case 'color', 
+      i=i+1; 
+      if isempty(varargin{i}), Colortype = 'none'; 
+      elseif ischar(varargin{i}), Colortype = 'colorspec'; Color = varargin{i};
+      else Colortype = 'given'; Color = varargin{i}; 
+      end
+     case 'height', i=i+1; height = varargin{i}; 
+     case 'linecolor', i=i+1; linecol = varargin{i}; 
+     case 'SOM', 
+      Coordtype = 'SOM'; 
+     case {'pca','pca1','pca2','sammon','sammon1','sammon2','cca','cca1','cca2'}, 
+      Coordtype = 'projection'; Coord = varargin{i}; 
+     case {'order','depth'}, height = varargin{i};  
+    end
+  elseif isstruct(varargin{i}), M = varargin{i}; 
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_dendrogram) Ignoring invalid argument #' num2str(i+1)]); 
+  end
+  i = i+1; 
+end
+
+switch Coordtype, 
+ case 'SOM', 
+  if isempty(M) | ~any(strcmp(M.type,{'som_map','som_topol'})) , 
+    error('Cannot determine SOM coordinates without a SOM.'); 
+  end
+  if strcmp(M.type,'som_map'), M = M.topol; end
+ case 'projection', 
+  if isempty(M), error('Cannot do projection without the data.'); end
+  if isstruct(M), 
+    if strcmp(M.type,'som_data'), M = M.data; 
+    elseif strcmp(M.type,'som_map'), M = M.codebook; 
+    end
+  end  
+  if size(M,1) ~= nd, 
+    error('Given data must be equal in length to the number of original data samples.')
+  end    
+ case 'given', 
+  if size(Coord,1) ~= nd & size(Coord,1) ~= nd+nc, 
+    error('Size of given coordinate matrix does not match the cluster hierarchy.');
+  end  
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialization
+
+% Coordinates
+switch Coordtype, 
+ case 'natural', o = leavesorder(Z)'; [dummy,Coord] = sort(o); codim = 1; 
+ case 'SOM', Coord = som_vis_coords(M.lattice,M.msize); codim = 2;   
+ case 'projection', 
+  switch Coord, 
+   case {'pca','pca2'},       Coord = pcaproj(M,2);   codim = 2; 
+   case 'pca1',               Coord = pcaproj(M,1);   codim = 1; 
+   case {'cca','cca2'},       Coord = cca(M,2,20);    codim = 2; 
+   case 'cca1',               Coord = cca(M,1,20);    codim = 1; 
+   case {'sammon','sammon2'}, Coord = sammon(M,2,50); codim = 2; 
+   case 'sammon1',            Coord = sammon(M,1,50); codim = 1; 
+  end
+ case 'given', codim = min(size(Coord,2),2); % nill
+end
+
+if size(Coord,1) == nd, 
+  Coord = [Coord; zeros(nc,size(Coord,2))]; 
+  for i=(nd+1):(nd+nc), 
+    leaves = leafnodes(Z,i,nd);
+    if any(leaves), Coord(i,:) = mean(Coord(leaves,:),1); else Coord(i,:) = Inf; end
+  end
+end
+
+% Colors
+switch Colortype, 
+ case 'colorspec', % nill
+ case 'none', Color = ''; 
+ case 'given',
+  if size(Color,1) == nd, 
+    Color = [Color; zeros(nc,3)]; 
+    for i=(nd+1):(nd+nc), 
+      leaves = leafnodes(Z,i,nd);
+      if any(leaves), Color(i,:) = mean(Color(leaves,:),1); 
+      else Color(i,:) = 0.8; 
+      end
+    end
+  end
+end
+
+% height
+if ischar(height), 
+  switch height, 
+   case 'order', height = [zeros(nd,1); [1:nc]']; 
+   case 'depth', height = nodedepth(Z); height = max(height) - height; 
+  end
+else
+  if length(height)==nc, height = [zeros(nd,1); height]; end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% draw
+
+% the arcs
+lfrom = []; lto = []; 
+for i=1:nd+nc, 
+  if i<=nd, ch = [];  
+  elseif ~isfinite(Z(i-nd,3)), ch = []; 
+  else ch = Z(i-nd,1:2)'; 
+  end
+  if any(ch), 
+    lfrom = [lfrom; i*ones(length(ch),1)]; 
+    lto = [lto; ch]; 
+  end
+end
+
+% the coordinates of the arcs
+if codim == 1, 
+  Lx = [Coord(lfrom), Coord(lto), Coord(lto)];
+  Ly = [height(lfrom), height(lfrom), height(lto)];
+  Lz = []; 
+else
+  Lx = [Coord(lfrom,1), Coord(lto,1), Coord(lto,1)];
+  Ly = [Coord(lfrom,2), Coord(lto,2), Coord(lto,2)];
+  Lz = [height(lfrom), height(lfrom), height(lto)];
+end
+
+washold = ishold; 
+if ~washold, cla; end
+
+% plot the lines
+if isempty(Lz), 
+  h = line(Lx',Ly','color',linecol); 
+else 
+  h = line(Lx',Ly',Lz','color',linecol); 
+  if ~washold, view(3); end
+  rotate3d on
+end
+
+% plot the nodes
+hold on
+switch Colortype, 
+ case 'none', % nill
+ case 'colorspec', 
+  if codim == 1, plot(Coord,height,Color); 
+  else plot3(Coord(:,1), Coord(:,2), height, Color); 
+  end
+ case 'given', 
+  som_grid('rect',[nd+nc 1],'line','none','Coord',[Coord, height],...
+	   'Markersize',10,'Markercolor',Color);
+end
+if ~washold, hold off, end
+
+return;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+function depth = nodedepth(Z)
+
+  nd = size(Z,1)+1; 
+  nc = size(Z,1);  
+  depth = zeros(nd+nc,1); 
+  ch = nc+nd-1; 
+  while any(ch), 
+    c  = ch(1); ch = ch(2:end);
+    if c>nd & isfinite(Z(c-nd,3)), 
+      chc = Z(c-nd,1:2); 
+      depth(chc) = depth(c) + 1; 
+      ch = [ch, chc]; 
+    end
+  end
+  return;
+
+function inds = leafnodes(Z,i,nd)
+
+  inds = []; 
+  ch = i; 
+  while any(ch), 
+    c  = ch(1); ch = ch(2:end);
+    if c>nd & isfinite(Z(c-nd,3)), ch = [ch, Z(c-nd,1:2)]; end
+    if c<=nd, inds(end+1) = c; end 
+  end
+  return;
+
+function order = leavesorder(Z)
+
+  nd = size(Z,1)+1;
+  order = 2*nd-1; 
+  nonleaves = 1; 
+  while any(nonleaves), 
+    j = nonleaves(1); 
+    ch = Z(order(j)-nd,1:2);
+    if j==1, oleft = []; else oleft = order(1:(j-1)); end
+    if j==length(order), oright = []; else oright = order((j+1):length(order)); end
+    order = [oleft, ch, oright];
+    nonleaves = find(order>nd); 
+  end
+  return; 
+
+
+  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_denormalize.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,293 @@
+function sD = som_denormalize(sD,varargin)
+
+%SOM_DENORMALIZE Denormalize data.
+%   
+% sS = som_denormalize(sS, [argID, value, ...])               
+%
+%   sS = som_denormalize(sS) 
+%   sS = som_denormalize(sS,[1:3 10],'remove') 
+%    D = som_denormalize(D,sM.comp_norm)
+%    D = som_denormalize(D,sM,[1:3 10])
+%
+%  Input and output arguments ([]'s are optional): 
+%   sS                The data to which the denormalization is applied.
+%                     The modified and updated data is returned.
+%            (struct) data or map struct
+%            (matrix) data matrix (a matrix is also returned)
+%   [argID, (string) See below. The values which are unambiguous can 
+%    value] (varies) be given without the preceeding argID.
+%
+% Here are the valid argument IDs and corresponding values. The values which
+% are unambiguous (marked with '*') can be given without the preceeding argID.
+%   'norm'   *(struct) Normalization struct, or an array of such. 
+%                      Alternatively, a map/data struct can be given 
+%                      in which case its '.comp_norm' field is used 
+%                      (see below).
+%            *(cell array) Of normalization structs. Typically, the
+%                      '.comp_norm' field of a map/data struct. The 
+%                      length of the array must be equal to data dimension.
+%   'remove' *(string) If 'remove' tag is specified, the
+%                      normalization operations are not only undone, 
+%                      they are also removed from the struct.
+%   'comps'  *(vector) the components to which the denormalization is
+%                      applied, default is [1:dim] ie. all components
+%
+% For more help, try 'type som_denormalize' or check out online documentation.
+% See also SOM_NORMALIZE, SOM_NORM_VARIABLE, SOM_INFO.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_denormalize
+%
+% PURPOSE
+%
+% Undo normalizations of data structs/sets.
+%
+% SYNTAX
+%
+%  sS = som_denormalize(sS)
+%  sS = som_denormalize(...,'argID',value,...);
+%  sS = som_denormalize(...,value,...);
+%   D = som_denormalize(D,sNorm)
+%
+% DESCRIPTION
+%
+% This function is used to undo normalizations of data structs/sets. If a
+% data/map struct is given, all normalizations in the '.comp_norm' field are
+% undone and, thus, the values in the original data context are returned. If
+% a matrix is given, the normalizations to undo must be given as the second
+% argument. SOM_DENORMALIZE actually uses function SOM_NORM_VARIABLE to
+% handle the normalization operations, and only handles the data struct/set
+% specific stuff itself.
+%
+% Normalizations are always one-variable operations. In the data and map
+% structs the normalization information for each component is saved in the
+% '.comp_norm' field, which is a cell array of length dim. Each cell
+% contains normalizations for one vector component in a
+% struct array of normalization structs. Each component may have different
+% amounts of different kinds of normalizations. Typically, all
+% normalizations are either 'undone' or 'done', but in special situations
+% this may not be the case. The easiest way to check out the status of the
+% normalizations is to use function SOM_INFO, e.g. som_info(sS,3)
+% 
+% REQUIRED INPUT ARGUMENTS
+%
+%   sS                The data to which the denormalization is applied.
+%            (struct) Data or map struct. The normalizations in the 
+%                     '.comp_norm' field are undone for the specified 
+%                     components.
+%            (matrix) Data matrix. The normalization to undo must be
+%                     given in the second argument.
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments can be given as 'argID',value -pairs. If an
+%  argument is given value multiple times, the last one is used. The
+%  valid IDs and corresponding values are listed below. The values
+%  which are unambiguous (marked with '*') can be given without the
+%  preceeding argID.
+%
+%   sNorm    *(struct) Normalization struct, or an array of structs, which
+%                      is undone for all specified components. If the 
+%                      '.status' field of the struct(s) is 'uninit', 
+%                      the undoing operation is interrupted - it cannot be 
+%                      done. Alternatively, the struct may be map or 
+%                      data struct in which case its '.comp_norm' field 
+%                      is used (see the cell array option below).
+%            *(cell array) In practice, the '.comp_norm' field of 
+%                      a data/map struct. The length of the array 
+%                      must be equal to the dimension of the given 
+%                      data set (sS). Each cell contains the
+%                      normalization(s) for one component. Only the
+%                       normalizations listed in comps argument are
+%                      undone though.
+%
+%   'remove' *(string) If 'remove' tag is specified, the
+%                      normalization operations are not only undone, 
+%                      they are also removed from the struct.
+%
+%   'comps'  *(vector) The components which are denormalized.
+%                      Default is to undo all components.
+%            *(string) 'all'
+%
+% OUTPUT ARGUMENTS
+% 
+%   sS                Modified and/or updated data.
+%            (struct) If a struct was given as input argument, the
+%                     same struct is returned with denormalized data and
+%                     updated '.comp_norm' fields. 
+%            (matrix) If a matrix was given as input argument, the 
+%                     denormalized data matrix is returned.
+% 
+% EXAMPLES
+%
+%  To undo normalization of a data/map struct: 
+%
+%    sD = som_denormalize(sD); 
+%    sM = som_denormalize(sM); 
+%
+%  To completely remove the normalizations, use the 'remove' tag: 
+%
+%    sD = som_denormalize(sD,'remove');
+%
+%  To undo only a few selected components, use the comps argument: 
+% 
+%    sD = som_denormalize(sD,[1 3:5]); 
+% 
+%  To denormalize a set of values from a data set D (which must be 
+%  of equal dimension as the data in sD): 
+%
+%    D = som_denormalize(D,sD); 
+%  or 
+%    D = som_denormalize(D,sD.comp_norm); 
+%  only denormalize a few components
+%    D = som_denormalize(D,sD,[1 3:5]); 
+% 
+%  Assuming you have a few values of a certain vector component (i)
+%  in a vector (x) which you want to denormalize: 
+%
+%    xorig = som_denormalize(x,sD.comp_norm{i}); 
+%  or using SOM_NORM_VARIABLE
+%    xorig = som_norm_variable(x,sD.comp_norm{i},'undo');
+%
+%  To check out the status of normalization in a struct use SOM_INFO: 
+% 
+%    som_info(sM,3)
+%    som_info(sD,3)
+%
+% SEE ALSO
+%  
+%  som_normalize      Add/apply/redo normalizations of a data struct/set.
+%  som_norm_variable  Normalization operations for a set of scalar values.
+%  som_info           User-friendly information of SOM Toolbox structs.
+
+% Copyright (c) 1998-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 151199 150300
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(1, 3, nargin));  % check no. of input arguments is correct
+
+% sD
+struct_mode = isstruct(sD);
+if struct_mode, 
+  switch sD.type
+   case 'som_map', D = sD.codebook; 
+   case 'som_data', D = sD.data; 
+   otherwise, error('Illegal struct.')
+  end
+else 
+  D = sD;
+end
+[dlen dim] = size(D);
+
+% varargin
+comps = [1:dim];
+remove_tag = 0;
+if struct_mode, sNorm = sD.comp_norm; else sNorm = []; end
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     % argument IDs
+     case 'comps', i=i+1; comps = varargin{i}; 
+     case {'norm','sNorm','som_norm'}, i=i+1; sNorm = varargin{i};
+     % unambiguous values
+     case 'remove', remove_tag = 1;
+     otherwise argok=0; 
+    end    
+  elseif isnumeric(varargin{i}), 
+    comps = varargin{i};
+  elseif isstruct(varargin{i}), 
+    sNorm = varargin{i};
+  elseif iscell(varargin{i}), 
+    sNorm = varargin{i};
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_denormalize) Ignoring invalid argument #' num2str(i+1)]); 
+  end
+  i = i+1; 
+end
+
+% check comps
+if ischar(comps), comps = [1:dim]; end
+if isempty(comps), return; end
+if size(comps,1)>1, comps = comps'; end  % make it a row vector
+
+% sNorm
+% check out the given normalization
+% (and if necessary, copy it for each specified component)
+if isstruct(sNorm),
+  switch sNorm(1).type, 
+   case {'som_map','som_data'}, csNorm = sNorm(1).comp_norm; 
+   case {'som_norm'}, for i=comps, csNorm{i} = sNorm; end
+   otherwise, 
+    error('Invalid struct for sNorm.')
+  end
+elseif iscell(sNorm), 
+  csNorm = sNorm; 
+else
+  error('Illegal value for sNorm.')
+end
+
+% check that csNorm and comps possibly agree
+if max(comps) > length(csNorm), 
+  error('Given normalizations does not match the components.')
+end  
+if length(csNorm) ~= dim, 
+  error('Given normalizations does not match data dimension.')
+end  
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+% undo the normalizations 
+for i = comps, 
+  len = length(csNorm{i});
+  for j=len:-1:1, 
+    sN = csNorm{i}(j); 
+    if struct_mode, 
+      if strcmp(sN.status,'done'), 
+	[x,sN] = som_norm_variable(D(:,i), sN, 'undo'); 
+	D(:,i) = x; 
+	csNorm{i}(j) = sN; 
+      end      
+    else
+      D(:,i) = som_norm_variable(D(:,i), sN, 'undo'); 
+    end
+  end
+end
+
+% remove normalizations
+if struct_mode & remove_tag, 
+  for i = comps, csNorm{i} = []; end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% output 
+
+
+if struct_mode, 
+  switch sD.type
+   case 'som_map', sD.codebook = D; 
+   case 'som_data', sD.data = D; 
+   otherwise, error('Illegal struct.')
+  end
+  sD.comp_norm = csNorm; 
+else
+  sD = D;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_distortion.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,138 @@
+function [adm,admu,tdmu] = som_distortion(sM, D, arg1, arg2)
+
+%SOM_DISTORTION Calculate distortion measure for the map.
+%
+% [adm,admu,tdmu] = som_distortion(sMap, D, [radius], ['prob'])
+%
+%  adm = som_distortion(sMap,D);
+%  [adm,admu] = som_distortion(sMap,D);
+%  som_show(sMap,'color',admu);
+%
+%  Input and output arguments: 
+%   sMap     (struct) a map struct
+%   D        (struct) a data struct
+%            (matrix) size dlen x dim, a data matrix
+%   [radius] (scalar) neighborhood function radius to be used.
+%                     Defaults to the last radius_fin in the 
+%                     trainhist field of the map struct, or 1 if
+%                     that is missing.
+%   ['prob'] (string) If given, this argument forces the 
+%                     neigborhood function values for each map
+%                     unit to be normalized so that they sum to 1.
+%
+%   adm      (scalar) average distortion measure (sum(dm)/dlen)
+%   admu     (vector) size munits x 1, average distortion in each unit 
+%   tdmu     (vector) size munits x 1, total distortion for each unit
+%
+% The distortion measure is defined as: 
+%                                           2
+%    E = sum sum h(bmu(i),j) ||m(j) - x(i)|| 
+%         i   j    
+% 
+% where m(i) is the ith prototype vector of SOM, x(j) is the jth data
+% vector, and h(.,.) is the neighborhood function. In case of fixed
+% neighborhood and discreet data, the distortion measure can be
+% interpreted as the energy function of the SOM. Note, though, that
+% the learning rule that follows from the distortion measure is
+% different from the SOM training rule, so SOM only minimizes the
+% distortion measure approximately.
+% 
+% If the 'prob' argument is given, the distortion measure can be 
+% interpreted as an expected quantization error when the neighborhood 
+% function values give the likelyhoods of accidentally assigning 
+% vector j to unit i. The normal quantization error is a special case 
+% of this with zero incorrect assignement likelihood. 
+% 
+% NOTE: when calculating BMUs and distances, the mask of the given 
+%       map is used.
+%
+% See also SOM_QUALITY, SOM_BMUS, SOM_HITS.
+
+% Reference: Kohonen, T., "Self-Organizing Map", 2nd ed., 
+%    Springer-Verlag, Berlin, 1995, pp. 120-121.
+%
+%    Graepel, T., Burger, M. and Obermayer, K., 
+%    "Phase Transitions in Stochastic Self-Organizing Maps",
+%    Physical Review E, Vol 56, No 4, pp. 3876-3890 (1997).
+
+% Contributed to SOM Toolbox vs2, Feb 3rd, 2000 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 030200
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+% input arguments
+if nargin < 2, error('Not enough input arguments.'); end
+
+% map
+M = sM.codebook;
+munits = prod(sM.topol.msize);
+
+% data
+if isstruct(D), D = D.data; end
+[dlen dim] = size(D);
+
+% arg1, arg2
+rad = NaN;
+normalize = 0;
+if nargin>2, 
+  if isnumeric(arg1), rad = arg1;
+  elseif ischar(arg1) & strcmp(arg1,'prob'), normalize = 0;
+  end
+end
+if nargin>3, 
+  if isnumeric(arg2), rad = arg2;
+  elseif ischar(arg2) & strcmp(arg2,'prob'), normalize = 0;
+  end
+end
+
+% neighborhood radius
+if isempty(rad) | isnan(rad), 
+  if ~isempty(sM.trainhist), rad = sM.trainhist(end).radius_fin;
+  else rad = 1; 
+  end
+end
+if rad<eps, rad = eps; end
+
+% neighborhood  
+Ud = som_unit_dists(sM.topol); 
+switch sM.neigh, 
+ case 'bubble',   H = (Ud <= rad);
+ case 'gaussian', H = exp(-(Ud.^2)/(2*rad*rad)); 
+ case 'cutgauss', H = exp(-(Ud.^2)/(2*rad*rad)) .* (Ud <= rad);
+ case 'ep',       H = (1 - (Ud.^2)/rad) .* (Ud <= rad);
+end  
+if normalize, 
+  for i=1:munits, H(:,i) = H(:,i)/sum(H(:,i)); end
+end
+
+% total distortion measure
+mu_x_1 = ones(munits,1);
+tdmu = zeros(munits,1);
+hits = zeros(munits,1);
+for i=1:dlen,
+  x = D(i,:);                        % data sample
+  known = ~isnan(x);                 % its known components
+  Dx = M(:,known) - x(mu_x_1,known); % each map unit minus the vector
+  dist2 = (Dx.^2)*sM.mask(known);    % squared distances  
+  [qerr bmu] = min(dist2);           % find BMU
+  tdmu = tdmu + dist2.*H(:,bmu);     % add to distortion measure
+  hits(bmu) = hits(bmu)+1;           % add to hits
+end 
+
+% average distortion per unit
+admu = tdmu; 
+ind = find(hits>0);
+admu(ind) = admu(ind) ./ hits(ind);
+  
+% average distortion measure
+adm = sum(tdmu)/dlen;
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_distortion3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,207 @@
+function [Err,sPropTotal,sPropMunits,sPropComps] = som_distortion3(sM,D,rad)
+
+%SOM_DISTORTION3 Map distortion measures.
+%  
+% [sE,Err] = som_distortion3(sM,[D],[rad]);
+% 
+%  sE = som_distortion3(sM); 
+%
+%  Input and output arguments ([]'s are optional): 
+%   sM          (struct) map struct
+%   [D]         (matrix) a matrix, size dlen x dim
+%               (struct) data or map struct
+%                        by default the map struct is used
+%   [rad]       (scalar) neighborhood radius, looked from sM.trainhist
+%                        by default, or = 1 if that has no valid values
+%                           
+%   Err         (matrix) size munits x dim x 3
+%                        distortion error elements (quantization error, 
+%                        neighborhood bias, and neighborhood variance)
+%                        for each map unit and component
+%   sPropTotal  (struct) .n   = length of data
+%                        .h   = mean neighborhood function value
+%                        .err = errors
+%   sPropMunits (struct) .Ni  = hits per map unit
+%                        .Hi  = sum of neighborhood values for each map unit
+%                        .Err = errors per map unit
+%   sPropComps  (struct) .e1  = total squared distance to centroid
+%                        .eq  = total squared distance to BMU
+%                        .Err = errors per component
+%
+% See also  SOM_QUALITY.
+
+% Contributed to SOM Toolbox 2.0, January 3rd, 2002 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 030102
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% arguments
+
+% map
+[munits dim] = size(sM.codebook);
+
+% neighborhood radius
+if nargin<3, 
+  if ~isempty(sM.trainhist), 
+    rad = sM.trainhist(end).radius_fin; 
+  else 
+    rad = 1; 
+  end
+end
+if rad<eps, rad = eps; end
+if isempty(rad) | isnan(rad), rad = 1; end
+
+% neighborhood function
+Ud = som_unit_dists(sM.topol); 
+switch sM.neigh, 
+ case 'bubble',   H = (Ud <= rad);
+ case 'gaussian', H = exp(-(Ud.^2)/(2*rad*rad)); 
+ case 'cutgauss', H = exp(-(Ud.^2)/(2*rad*rad)) .* (Ud <= rad);
+ case 'ep',       H = (1 - (Ud.^2)/rad) .* (Ud <= rad);
+end  
+Hi = sum(H,2); 
+
+% data
+if nargin<2, D = sM.codebook; end
+if isstruct(D), D = D.data; end
+[dlen dim] = size(D);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% quality measures
+
+% find Voronoi sets, and calculate their properties
+
+[bmus,qerr] = som_bmus(sM,D); 
+M  = sM.codebook; 
+Vn = M; 
+Vm = M; 
+Ni = zeros(munits,dim);
+for i=1:munits, 
+  inds    = find(bmus==i);   
+  Ni(i,:) = sum(isfinite(D(inds,:)),1);                      % size of Voronoi set
+  if any(Ni(i,:)), Vn(i,:) = centroid(D(inds,:),M(i,:)); end % centroid of Voronoi set  
+  Vm(i,:) = centroid(M,M(i,:),H(i,:)');                      % centroid of neighborhood
+end
+
+HN = repmat(Hi,1,dim).*Ni; 
+
+%% distortion
+
+% quantization error (in each Voronoi set and for each component)
+
+Eqx           = zeros(munits,dim); 
+Dx            = (Vn(bmus,:) - D).^2; 
+Dx(isnan(Dx)) = 0; 
+for i = 1:dim, 
+  Eqx(:,i)    = full(sum(sparse(bmus,1:dlen,Dx(:,i),munits,dlen),2)); 
+end
+Eqx           = repmat(Hi,1,dim).*Eqx; 
+  
+% bias in neighborhood (in each Voronoi set / component)
+
+Enb = (Vn-Vm).^2;
+Enb = HN.*Enb; 
+
+% variance in neighborhood (in each Voronoi set / component)
+
+Env = zeros(munits,dim);
+for i=1:munits, Env(i,:) = H(i,:)*(M-Vm(i*ones(munits,1),:)).^2; end
+Env = Ni.*Env; 
+
+% total distortion (in each Voronoi set / component)
+
+Ed = Eqx + Enb + Env;
+
+%% other error measures
+
+% squared quantization error (to data centroid)
+
+me            = centroid(D,mean(M));
+Dx            = D - me(ones(dlen,1),:); 
+Dx(isnan(Dx)) = 0; 
+e1            = sum(Dx.^2,1); 
+
+% squared quantization error (to map units)
+
+Dx            = D - M(bmus,:);
+Dx(isnan(Dx)) = 0; 
+eq            = sum(Dx.^2,1);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% output
+
+% distortion error matrix
+
+Err  = zeros(munits,dim,5); 
+Err(:,:,1) = Eqx; 
+Err(:,:,2) = Enb; 
+Err(:,:,3) = Env; 
+
+% total errors
+
+sPropTotal = struct('n',sum(Ni),'h',mean(Hi),'e1',sum(e1),'err',sum(sum(Err,2),1));
+
+% properties of map units
+
+sPropMunits = struct('Ni',[],'Hi',[],'Err',[]); 
+sPropMunits.Ni  = Ni; 
+sPropMunits.Hi  = Hi; 
+sPropMunits.Err = squeeze(sum(Err,2));
+
+% properties of components
+
+sPropComps = struct('Err',[],'e1',[],'eq',[]);
+sPropComps.Err = squeeze(sum(Err,1));
+sPropComps.e1  = e1; 
+sPropComps.eq  = eq;
+
+
+return; 
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
+%% subfunctions
+
+function v = centroid(D,default,weights)
+  
+  [n dim] = size(D);
+  I       = sparse(isnan(D));
+  D(I)    = 0;
+  
+  if nargin==3, 
+    W    = weights(:,ones(1,dim)); 
+    W(I) = 0; 
+    D    = D.*W;
+    nn   = sum(W,1);
+  else
+    nn   = n-sum(I,1);
+  end 
+
+  c    = sum(D,1);
+  v    = default; 
+  i    = find(nn>0); 
+  v(i) = c(i)./nn(i);
+      
+  return; 
+
+
+function vis
+
+  figure
+  som_show(sM,'color',{Hi,'Hi'},'color',{Ni,'hits'},...
+           'color',{Ed,'distortion'},'color',{Eqx,'qxerror'},...
+           'color',{Enb,'N-bias'},'color',{Env,'N-Var'});
+
+  ed = Eqx + Enb + Env;
+  i = find(ed>0); 
+  eqx = 0*ed; eqx(i) = Eqx(i)./ed(i);
+  enb = 0*ed; enb(i) = Enb(i)./ed(i);
+  env = 0*ed; env(i) = Env(i)./ed(i);
+
+  figure
+  som_show(sM,'color',Hi,'color',Ni,'color',Ed,...
+           'color',eqx,'color',enb,'color',env); 
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_divide.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,96 @@
+function [V,I]=som_divide(sMap, D, inds, mode)
+
+%SOM_DIVIDE Divides a dataset according to a given map.
+%
+% [V,I]=som_divide(sMap, sData, [inds], [mode])
+%
+% ARGUMENTS ([]'s are optional) 
+%
+%  sMap     (struct or matrix) map struct or codebook (size munits x dim)
+%  sData    (struct or matrix) data struct or matrix (size N x dim )
+%  [inds]            From which map units should the local data sets
+%                    be constructed. Interpretation depends on mode
+%                    argument. By default [1:munits].
+%           'class': (vector) munits x 1 matrix of class numbers
+%           'index': (vector) K x 1 vector of map node indexes 
+%           'index': (matrix) K x k matrix of map node subscripts
+%  [mode]   (string) 'index' or 'class', if inds is a vector of length 
+%                    munits, default is 'class', otherwise 'index'.
+% RETURNS
+%  
+% If mode == 'index' 
+%  V        (matrix) data vectors hitting the specified nodes (size K x dim)                   
+%  I        (vector) corresponding data row indexes (size K x 1)
+%   
+% If mode == 'class' (this can be used after using som_select)
+%  V        (cell array) V{K} includes vectors whose BMU has class number 
+%                        K in the input matrix 'coord'. Note that 
+%                        values of K below 1 are ignored. 
+%  I        (cell array) corresponding data indexes in the cell array                        
+%
+% NOTE: if the same node is specified multiple times, only one
+%       set of hits is returned.
+%
+% See also SOM_BMU, SOM_HITS, SOM_SELECT.
+
+% Version 1.0beta 260997 Johan 
+% Version 2.0beta 230300 juuso
+
+% Contributed to SOM Toolbox vs2, Mar 23rd, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+%%%% Init & Check %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+
+error(nargchk(0, 4, nargin)) % check if no. of input args is correct
+
+% map
+if isstruct(sMap), 
+  msize = sMap.topol.msize;     
+  dim = size(sMap.codebook,2); 
+else
+  msize = [size(sMap,1) 1];
+  dim = size(sMap,2); 
+end
+munits = prod(msize);
+
+% data
+if isstruct(D), D=D.data; end
+
+% inds
+if nargin<3, inds = 1:munits; end
+isvec = prod(size(inds))==length(inds);
+
+% mode
+if nargin<4, 
+  if isvec & length(inds)==munits, 
+    mode = 'class'; 
+  else
+    mode = 'index'; 
+  end
+end
+
+%%% Action & Build output according to the mode string output
+
+if ~isvec, inds = som_sub2ind(msize,inds); end
+
+bmus=som_bmus(sMap,D); 
+
+switch mode
+ case 'index'
+  I=find(ismember(bmus,inds));         
+  V=D(I,:);
+ case 'class'   
+  K=max(inds); % classes  
+  V = cell(K,1); 
+  I = cell(K,1);
+  for i=1:K,
+    N_ind=find(inds == i);           % indexes of the units of class i
+    I{i}=find(ismember(bmus,N_ind)); % data indexes       
+    V{i}=D(I{i},:);
+  end
+end
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dmat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+function dmat = som_dmat(sM,Ne,mode)
+
+%SOM_DMAT Find distance to neighbors for each map unit.
+%
+% dmat = som_dmat(sM,[Ne],[mode])
+%
+%  Input and output arguments ([]'s are optional):
+%   sM         (struct) map or data struct 
+%              (matrix) data matrix, size n x dim
+%   [Ne]       (matrix) neighborhood connections matrix 
+%              (string) 'Nk' (on map) or 'kNN' (any vector set)
+%                       where k = some number, e.g. 'N1' or '10NN'
+%              (empty)  use default 
+%   [mode]     (string) 'min', 'median', 'mean', 'max', or 
+%                       some arbitrary scalar function of 
+%                       a set of vectors
+%
+%   dmat       (vector) size n x 1, distance associated with each vector
+%   
+% See also KMEANS_CLUSTERS, SOM_CLLINKAGE, SOM_CLSTRUCT.
+
+% Copyright (c) 2000 by Juha Vesanto
+% Contributed to SOM Toolbox on June 16th, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta juuso 220800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% map 
+if isstruct(sM), 
+  switch sM.type, 
+   case 'som_map',  M = sM.codebook; mask = sM.mask; 
+   case 'som_data', M = sM.data; mask = ones(size(M,2),1);
+  end
+else
+  M = sM; mask = ones(size(M,2),1);
+end
+[n dim] = size(M);
+
+% neighborhoods 
+if nargin<2 | isempty(Ne), Ne = som_neighbors(sM); 
+elseif ischar(Ne), Ne = som_neighbors(sM,Ne); 
+end
+l = size(Ne,1); Ne([0:l-1]*l+[1:l]) = 0; % set diagonal elements = 0
+
+% mode
+if nargin<3 | isempty(mode), mode = 'median'; end
+calc = sprintf('%s(x)',mode); 
+
+% distances
+dmat = zeros(n,1); 
+for i=1:n, 
+  ne = find(Ne(i,:));
+  if any(ne), 
+    [dummy,x] = som_bmus(M(ne,:),M(i,:),[1:length(ne)],mask); 
+    dmat(i) = eval(calc); 
+  else 
+    dmat(i) = NaN; 
+  end
+end
+
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+  
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dmatclusters.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,61 @@
+function [base,seed] = som_dmatclusters(sM,linkage,neigh,ignore)
+
+% SOM_DMATCLUSTERS Cluster map based on neighbor distance matrix.
+%
+% base = som_dmatclusters(sM,linkage,neigh,ignore)
+%
+% sM        (struct) map or data struct
+%           (matrix) data matrix, size n x dim
+% [linkage] (string) 'closest', 'single', 'average', 'complete', 
+%                    'centroid', 'ward', and 'neighf' (last for SOM only)
+%                    default is 'centroid'
+% [neigh]   (string) 'kNN' or 'Nk' (which is valid for a SOM only)
+%                    for example '6NN' or 'N1'
+%                    default is '10NN' for a data set and 'N1' for SOM
+%           (matrix) 0/1 matrix of size size n x n, 1=connection exists
+% [ignore]  (vector) indeces of vectors to be ignored in the spreading
+%                    phase, empty vector by default
+%
+% base      (vector) size n x 1, cluster indeces (1...c)
+% seed      (vector) size c x 1, indeces of seed units for the clusters
+%
+% See also  SOM_NEIGHBORS, KMEANS_CLUSTERS, SOM_DMATMINIMA.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+if nargin<2 | isempty(linkage), linkage = 'centroid'; end
+
+if nargin<3 | isempty(neigh),
+  if isstruct(sM) & strcmp(sM.type,'som_map'),
+    neigh = 'N1';
+  else
+    neigh = '10NN';
+  end
+end
+
+if nargin<4, ignore = []; end
+n = size(sM.codebook,1);
+
+% neighborhoods
+if ischar(neigh),
+  Ne = som_neighbors(sM,neigh);
+else
+  Ne = neigh;
+end
+
+% find seed points
+seed = som_dmatminima(sM,[],Ne);
+
+% make partition
+base = zeros(n,1);
+base(seed) = 1:length(seed);
+if any(ignore), base(ignore) = NaN; end
+base = som_clspread(sM,base,linkage,Ne,0);
+
+% assign the ignored units, too
+base(isnan(base)) = 0;
+if any(base==0), base = som_clspread(sM,base,linkage,Ne,0); end
+
+return;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dmatminima.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,70 @@
+function minima = som_dmatminima(sM,U,Ne)
+
+%SOM_DMATMINIMA Find clusters based on local minima of U-matrix.
+%
+% minima = som_dmatminima(sM,[U],[Ne])
+%
+%  Input and output arguments ([]'s are optional):
+%   sM         (struct) map struct
+%   U          (matrix) the distance matrix from which minima is
+%                       searched from 
+%                       size msize(1) x ... x msize(end) or 
+%                            2*msize(1)-1 x 2*msize(2)-1 or 
+%                            munits x 1
+%   Ne         (matrix) neighborhood connections matrix
+%
+%   minima     (vector) indeces of the map units where locla minima of
+%                       of U-matrix (or other distance matrix occured)
+%   
+% See also KMEANS_CLUSTERS, SOM_CLLINKAGE, SOM_CLSTRUCT.
+
+% Copyright (c) 2000 by Juha Vesanto
+% Contributed to SOM Toolbox on June 16th, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta juuso 220800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% map 
+if isstruct(sM), 
+  switch sM.type, 
+   case 'som_map',  M = sM.codebook; mask = sM.mask; 
+   case 'som_data', M = sM.data; mask = ones(size(M,2),1);
+  end
+else
+  M = sM; mask = ones(size(M,2),1);
+end
+[munits dim] = size(M);
+
+% distances between map units
+if nargin<2, U = []; end
+
+% neighborhoods 
+if nargin<3, Ne = som_neighbors(sM); end
+
+% distance matrix
+if nargin<2 | isempty(U), U = som_dmat(sM,Ne,'median'); end
+if prod(size(U))>munits, U = U(1:2:size(U,1),1:2:size(U,2)); end
+U = U(:); 
+if length(U) ~= munits, error('Distance matrix has incorrect size.'); end
+
+% find local minima
+minima = []; 
+for i=1:munits, 
+  ne = find(Ne(i,:));
+  if all(U(i)<=U(ne)) & ~anycommon(ne,minima), minima(end+1)=i; end
+end
+
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function t = anycommon(i1,i2)
+  if isempty(i1) | isempty(i2), t = 0; 
+  else 
+    m = max(max(i1),max(i2));
+    t = any(sparse(i1,1,1,m,1) & sparse(i2,1,1,m,1)); 
+  end
+  return;   
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dreval.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,88 @@
+function [sig,cm,truex,truey] = som_dreval(sR,D,sigmea,inds1,inds2,andor)
+
+% SOM_DREVAL Evaluate the significance of the given descriptive rule.
+%
+% [sig,Cm,truex,truey] = som_dreval(cR,D,sigmea,[inds1],[inds2],[andor]) 
+% 
+%  sR      (struct) a rule struct, or an array of rule structs
+%  D       (matrix) the data, of size [dlen x nr]
+%  sigmea  (string) significance measure ('accuracy','accuracyI','mutuconf'), 
+%                   see definitions below
+%  [inds1] (vector) indeces belonging to the group
+%                   (by default: the whole data set) 
+%  [inds2] (vector) indeces belonging to the contrast group
+%                   (by default: the rest of the data set)
+%  [andor] (string) 'and' or 'or': which conjunction operator to use
+%                   to join the rules for each variable
+%
+%  sig     (scalar) significance of the rule
+%  cm      (vector) length 4, vectorized confusion matrix ([a,c,b,d]: see below)
+%  truex   (vector) binary vector indicating for each item in the 
+%                   group whether it was true or not
+%  truey   (vector) binary vector indicating for each item in the 
+%                   contrast group whether it was true or not
+%
+% Descriptive rule significance is measured as the match between the 
+% given groups (inds1 = G1, inds2 = G2) and the rule being true or false.
+% 
+%          G1    G2   
+%       ---------------    accuracy  = (a+d) / (a+b+c+d)
+% true  |  a  |   b   |    
+%       |--------------    mutuconf  =  a*a  / ((a+b)(a+c)) 
+% false |  c  |   d   | 
+%       ---------------    accuracyI =   a   / (a+b+c)
+%
+% See also  SOM_DRSIGNIF, SOM_DRMAKE.
+
+% Contributed to SOM Toolbox 2.0, March 4th, 2002 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 040302
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% input arguments
+if isstruct(D), 
+  switch D.type, 
+   case 'som_data', D = D.data; 
+   case 'som_map',  D = D.codebook; 
+  end
+end
+[dlen,dim] = size(D);
+if nargin<4, inds1 = 1:dlen; end
+if nargin<5, i = ones(dlen,1); i(inds1) = 0; inds2 = find(i); end
+if nargin<6, andor = 'and'; end
+
+% initialize
+nr  = length(sR);
+X   = D(inds1,:);
+Y   = D(inds2,:); 
+nx  = size(X,1);
+ny  = size(Y,1);  
+truex = ones(nx,1);
+truey = ones(ny,1);
+
+% go through the individual rules
+for i=1:nr,  
+  tx = (X(:,i)>=sR(i).low & X(:,i)<sR(i).high);
+  tx(isnan(X(:,i))) = sR(i).nanis;     
+
+  ty = (Y(:,i)>=sR(i).low & Y(:,i)<sR(i).high);
+  ty(isnan(Y(:,i))) = sR(i).nanis;     
+
+  switch andor, 
+   case 'and', truex = (truex & tx); truey = (truey & ty);
+   case 'or',  truex = (truex | tx); truey = (truey | ty);
+  end    
+end  
+
+% evaluate criteria
+tix = sum(truex(isfinite(truex)));
+tiy = sum(truey(isfinite(truey))); 
+cm  = [tix,nx-tix,tiy,ny-tiy];
+sig = som_drsignif(sigmea,cm);
+
+return; 
+    
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_drmake.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,167 @@
+function [sR,best,sig,Cm] = som_drmake(D,inds1,inds2,sigmea,nanis)
+
+% SOM_DRMAKE Make descriptive rules for given group within the given data. 
+%
+% sR = som_drmake(D,[inds1],[inds2],[sigmea],[nanis]) 
+% 
+%  D        (struct) map or data struct
+%           (matrix) the data, of size [dlen x dim]
+%  [inds1]  (vector) indeces belonging to the group
+%                    (the whole data set by default)
+%  [inds2]  (vector) indeces belonging to the contrast group
+%                    (the rest of the data set by default)
+%  [sigmea] (string) significance measure: 'accuracy', 
+%                    'mutuconf' (default), or 'accuracyI'.
+%                    (See definitions below).
+%  [nanis]  (scalar) value given for NaNs: 0 (=FALSE, default),
+%                    1 (=TRUE) or NaN (=ignored)
+%
+%  sR      (struct array) best rule for each component. Each 
+%                   struct has the following fields:
+%    .type     (string) 'som_rule'
+%    .name     (string) name of the component
+%    .low      (scalar) the low end of the rule range
+%    .high     (scalar) the high end of the rule range
+%    .nanis    (scalar) how NaNs are handled: NaN, 0 or 1
+%
+%  best    (vector) indeces of rules which make the best combined rule
+%  sig     (vector) significance measure values for each rule, and for the combined rule
+%  Cm      (matrix) A matrix of vectorized confusion matrices for each rule, 
+%                   and for the combined rule: [a, c, b, d] (see below). 
+% 
+% For each rule, such rules sR.low <= x < sR.high are found 
+% which optimize the given significance measure. The confusion
+% matrix below between the given grouping (G: group - not G: contrast group) 
+% and rule (R: true or false) is used to determine the significance values:
+%
+%          G    not G    
+%       ---------------    accuracy  = (a+d) / (a+b+c+d)
+% true  |  a  |   b   |    
+%       |--------------    mutuconf  =  a*a  / ((a+b)(a+c)) 
+% false |  c  |   d   | 
+%       ---------------    accuracyI =   a   / (a+b+c)
+%
+% See also  SOM_DREVAL, SOM_DRTABLE.
+
+% Contributed to SOM Toolbox 2.0, January 7th, 2002 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 070102
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+if isstruct(D), 
+  switch D.type, 
+   case 'som_data', cn = D.comp_names; D = D.data; 
+   case 'som_map',  cn = D.comp_names; D = D.codebook; 
+  end  
+else
+  cn = cell(size(D,2),1);
+  for i=1:size(D,2), cn{i} = sprintf('Variable%d',i); end
+end
+
+[dlen,dim] = size(D);
+if nargin<2 | isempty(inds1), inds1 = 1:dlen; end
+if nargin<3 | isempty(inds2), i = ones(dlen,1); i(inds1) = 0; inds2 = find(i); end
+if nargin<4, sigmea = 'mutuconf'; end
+if nargin<5, nanis = 0; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+sig = zeros(dim+1,1); 
+Cm  = zeros(dim+1,4); 
+
+sR1tmp = struct('type','som_rule','name','','low',-Inf,'high',Inf,'nanis',nanis,'lowstr','','highstr','');
+sR = sR1tmp;  
+
+% single variable rules
+for i=1:dim,
+    
+    % bin edges
+    mi = min(D(:,i)); 
+    ma = max(D(:,i)); 
+    [histcount,bins] = hist([mi,ma],10); 
+    if size(bins,1)>1, bins = bins'; end
+    edges = [-Inf, (bins(1:end-1)+bins(2:end))/2, Inf];
+    
+    % find the rule for this variable
+    [low,high,s,cm] = onevar_descrule(D(inds1,i),D(inds2,i),sigmea,nanis,edges);
+    sR1 = sR1tmp;      
+    sR1.name = cn{i}; 
+    sR1.low = low; 
+    sR1.high = high; 
+    sR(i) = sR1; 
+    sig(i) = s; 
+    Cm(i,:) = cm; 
+    
+end  
+
+% find combined rule
+[dummy,order] = sort(-sig);
+maxsig = sig(order(1)); bestcm = Cm(order(1),:);
+best  = order(1);
+for i=2:dim,    
+    com = [best, order(i)];
+    [s,cm,truex,truey] = som_dreval(sR(com),D(:,com),sigmea,inds1,inds2,'and');
+    if s>maxsig, best = com; maxsig = s; bestcm = cm; end
+end   
+sig(end) = maxsig;
+Cm(end,:) = cm; 
+
+return;
+    
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
+%% descriptive rules
+
+function [low,high,sig,cm] = onevar_descrule(x,y,sigmea,nanis,edges)
+
+  % Given a set of bin edges, find the range of bins with best significance.
+  %
+  %  x          data values in cluster
+  %  y          data values not in cluster
+  %  sigmea     significance measure
+  %  bins       bin centers
+  %  nanis      how to handle NaNs 
+
+  % histogram counts
+  if isnan(nanis), x = x(~isnan(x)); y = y(~isnan(y)); end
+  [xcount,xbin] = histc(x,edges); 
+  [ycount,ybin] = histc(y,edges); 
+  xcount = xcount(1:end-1);
+  ycount = ycount(1:end-1); 
+  xnan=sum(isnan(x));
+  ynan=sum(isnan(y));
+    
+  % find number of true items in both groups in all possible ranges
+  n = length(xcount);
+  V = zeros(n*(n+1)/2,4); 
+  s1 = cumsum(xcount);
+  s2 = cumsum(xcount(end:-1:1)); s2 = s2(end:-1:1);       
+  m  = s1(end);      
+  Tx = triu(s1(end)-m*log(exp(s1/m)*exp(s2/m)')+repmat(xcount',[n 1])+repmat(xcount,[1 n]),0); 
+  s1 = cumsum(ycount); 
+  s2 = cumsum(ycount(end:-1:1)); s2 = s2(end:-1:1);        
+  Ty = triu(s1(end)-m*log(exp(s1/m)*exp(s2/m)')+repmat(ycount',[n 1])+repmat(ycount,[1 n]),0); 
+  [i,j] = find(Tx+Ty);
+  k = sub2ind(size(Tx),i,j);
+  V = [i, j, Tx(k), Ty(k)];
+  tix = V(:,3) + nanis*xnan; 
+  tiy = V(:,4) + nanis*ynan; 
+  
+  % select the best range
+  nix   = length(x);
+  niy   = length(y);
+  Cm    = [tix,nix-tix,tiy,niy-tiy];
+  [s,k] = max(som_drsignif(sigmea,Cm));
+
+  % output
+  low  = edges(V(k,1));
+  high = edges(V(k,2)+1);
+  sig  = s;   
+  cm   = Cm(k,:);
+
+  return;
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_drsignif.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,63 @@
+function sig = som_drsignif(sigmea,Cm)
+
+% SOM_DRSIGNIF Significance measure from confusion matrix between two clusters and a rule.
+%
+% sig = som_drsignif(sigmea,Cm)
+% 
+%  sigmea   (string) significance measure: 'accuracy', 
+%                    'mutuconf' (default), or 'accuracyI'.
+%                    (See definitions below).
+%  Cn                Vectorized confusion matrix, or a matrix of such vectors.
+%           (vector) [a, c, b, d] (see below)
+%           (matrix) [[a1,c1,b1,d1], ..., [an,cn,bn,dn]]
+%
+%  sig      (vector) length=n, significance values 
+%
+% The confusion matrix Cm below between group (G) and contrast group (not G)
+% and rule (true - false) is used to determine the significance values:
+%
+%          G    not G    
+%       ---------------    accuracy  = (a+d) / (a+b+c+d)
+% true  |  a  |   b   |    
+%       |--------------    mutuconf  =  a*a  / ((a+b)(a+c)) 
+% false |  c  |   d   | 
+%       ---------------    accuracyI =   a   / (a+b+c)
+%
+% See also  SOM_DREVAL, SOM_DRMAKE.
+
+% Contributed to SOM Toolbox 2.0, March 4th, 2002 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 040302
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+true_x     = Cm(:,1); % x     = in group
+false_x    = Cm(:,2); % false = rule is false
+true_y     = Cm(:,3); % true  = rule is true
+false_y    = Cm(:,4); % y     = not in group
+
+true_items = true_x + true_y; 
+x_items    = true_x + false_x; 
+all_items  = true_x + false_x + true_y + false_y; 
+true_or_x  = x_items + true_items - true_x; 
+
+switch sigmea, 
+case 'mutuconf',
+    % mutual confidence, or relevance (as defined in WSOM2001 paper)
+    sig = zeros(size(true_x)); 
+    i = find(true_items>0 & x_items>0); 
+    sig(i) = (true_x(i).^2) ./ (true_items(i).*x_items(i)); 
+case 'accuracy', 
+    % accuracy 
+    sig = (true_x + false_y) ./ all_items;
+case 'accuracyI', 
+    % accuracy such that false_y is left out of consideration
+    sig = true_x./true_or_x;
+otherwise, 
+    error(['Unrecognized significance measures: ' sigmea]);
+end 
+
+return;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_estimate_gmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+function [K,P] = som_estimate_gmm(sM, sD)
+
+%SOM_ESTIMATE_GMM Estimate a gaussian mixture model based on map.
+%
+% [K,P] = som_estimate_gmm(sM, sD)
+%
+%  Input and output arguments:
+%   sM    (struct) map struct
+%   sD    (struct) data struct
+%         (matrix) size dlen x dim, the data to use when estimating
+%                  the gaussian kernels
+%
+%   K     (matrix) size munits x dim, kernel width parametes for 
+%                  each map unit
+%   P     (vector) size 1 x munits, a priori probability of each map unit
+%
+% See also SOM_PROBABILITY_GMM.
+
+% Reference: Alhoniemi, E., Himberg, J., Vesanto, J.,
+%   "Probabilistic measures for responses of Self-Organizing Maps", 
+%   Proceedings of Computational Intelligence Methods and
+%   Applications (CIMA), 1999, Rochester, N.Y., USA, pp. 286-289.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Esa Alhoniemi
+% Copyright (c) by Esa Alhoniemi
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% ecco 180298 juuso 050100 250400
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+[c, dim] = size(sM.codebook);
+M = sM.codebook;
+
+if isstruct(sD), D = sD.data; else D = sD; end
+dlen = length(D(:,1));
+
+%%%%%%%%%%%%%%%%%%%%%
+% compute hits & bmus
+
+[bmus, qerrs] = som_bmus(sM, D);
+hits = zeros(1,c);
+for i = 1:c, hits(i) = sum(bmus == i); end
+
+%%%%%%%%%%%%%%%%%%%%
+% a priori  
+
+% neighborhood kernel
+r  = sM.trainhist(end).radius_fin; % neighborhood radius
+if isempty(r) | isnan(r), r=1; end
+Ud = som_unit_dists(sM);
+Ud = Ud.^2; 
+r = r^2; 
+if r==0, r=eps; end % to get rid of div-by-zero errors
+switch sM.neigh, 
+ case 'bubble',   H = (Ud<=r); 
+ case 'gaussian', H = exp(-Ud/(2*r)); 
+ case 'cutgauss', H = exp(-Ud/(2*r)) .* (Ud<=r);
+ case 'ep',       H = (1-Ud/r) .* (Ud<=r);
+end  
+
+% a priori prob. = hit histogram weighted by the neighborhood kernel
+P = hits*H;
+P = P/sum(P);              
+
+%%%%%%%%%%%%%%%%%%%%
+% kernel widths (& centers)
+
+K = ones(c, dim) * NaN; % kernel widths
+for m = 1:c,
+  w = H(bmus,m);
+  w = w/sum(w);
+  for i = 1:dim,
+    d = (D(:,i) - M(m,i)).^2;   % compute variance of ith
+    K(m,i) = w'*d;              % variable of centroid m
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_eucdist2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,94 @@
+function d=som_eucdist2(Data, Proto)
+
+%SOM_EUCDIST2 Calculates matrix of squared euclidean distances between set of vectors or map, data struct
+%
+% d=som_eucdist2(D, P)
+%
+%  d=som_eucdist(sMap, sData);
+%  d=som_eucdist(sData, sMap);
+%  d=som_eucdist(sMap1, sMap2);
+%  d=som_eucdist(datamatrix1, datamatrix2);
+%
+%  Input and output arguments ([]'s are optional): 
+%   D (matrix) size Nxd
+%     (struct) map or data struct
+%   P (matrix) size Pxd
+%     (struct) map or data struct
+%   d (matrix) distance matrix of size NxP 
+%
+% IMPORTANT
+%
+% * Calculates _squared_ euclidean distances
+% * Observe that the mask in the map struct is not taken into account while 
+%   calculating the euclidean distance
+%
+% See also KNN, PDIST.
+
+% Contributed to SOM Toolbox 2.0, October 29th, 2000 by Johan Himberg
+% Copyright (c) by Johan Himberg
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta Johan 291000
+
+%% Init %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if isstruct(Data);
+  if isfield(Data,'type') & ischar(Data.type),
+    ;
+  else
+    error('Invalid map/data struct?');
+  end
+  switch Data.type
+   case 'som_map'
+    data=Data.codebook;
+   case 'som_data'
+    data=Data.data;
+  end
+else
+  % is already a matrix
+  data=Data;
+end
+
+% Take prototype vectors from prototype struct
+
+if isstruct(Proto),
+  
+  if isfield(Proto,'type') & ischar(Proto.type),
+    ;
+  else
+    error('Invalid map/data struct?');
+  end
+  switch Proto.type
+   case 'som_map'
+    proto=Proto.codebook;
+   case 'som_data'
+    proto=Proto.data;
+  end
+else
+  % is already a matrix
+  proto=Proto; 
+end
+
+% Check that inputs are matrices
+if ~vis_valuetype(proto,{'nxm'}) | ~vis_valuetype(data,{'nxm'}),
+  error('Prototype or data input not valid.')
+end
+
+% Record data&proto sizes and check their dims 
+[N_data dim_data]=size(data); 
+[N_proto dim_proto]=size(proto);
+if dim_proto ~= dim_data,
+  error('Data and prototype vector dimension does not match.');
+end
+
+% Calculate euclidean distances between classifiees and prototypes
+d=distance(data,proto);
+
+%%%% Classification %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function d=distance(X,Y);
+
+% Euclidean distance matrix between row vectors in X and Y
+
+U=~isnan(Y); Y(~U)=0;
+V=~isnan(X); X(~V)=0;
+d=abs(X.^2*U'+V*Y'.^2-2*X*Y');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_fillnans.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,56 @@
+function sD = som_fillnans(sD,sM,bmus)
+
+% SOM_FILLNANS Replaces NaNs in the data matrix with values from
+%              SOM prototypes. 
+%
+%   sD = som_fillnans(sD,sM, [bmus])
+%
+%      sD      (struct) data struct
+%              (matrix) size dlen x dim
+%      sM      (struct) data struct, with .data of size dlen x dim
+%              (matrix) size dlen x dim, a matrix from which 
+%                       the values are taken from directly
+%              (struct) map struct: replacement values are taken from 
+%                       sM.codebook(bmus,:)
+%      [bmus]  (vector) BMU for each data vector (calculated if not specified)
+%
+% See also  SOM_MAKE.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if isstruct(sD), 
+  [dlen dim] = size(sD.data); 
+  nans = find(isnan(sD.data)); 
+else
+  [dlen dim] = size(sD); 
+  nans = find(isnan(sD)); 
+end
+
+if nargin<3, 
+  bmus = som_bmus(sM,sD);   
+end
+
+if isstruct(sM) & strcmp(sM.type,'som_map'),
+  sM = sM.codebook(bmus,:); 
+elseif isstruct(sM), 
+  sM = sM.data(bmus,:);   
+else
+  sM = sM(bmus,:);
+end
+me = mean(sM); 
+
+if any(size(sM) ~= [dlen dim]), 
+  error('Invalid input arguments.')
+end
+
+if isstruct(sD), 
+  sD.data(nans) = sM(nans); 
+else
+  sD(nans) = sM(nans); 
+end
+  
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_fuzzycolor.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,205 @@
+function [color,X]=som_fuzzycolor(sM,T,R,mode,initRGB,S)
+
+% SOM_FUZZYCOLOR Heuristic contraction projection/soft cluster color coding for SOM 
+% 
+% function [color,X]=som_fuzzycolor(map,[T],[R],[mode],[initRGB],[S])
+%
+%  sM        (map struct)
+%  [T]       (scalar) parameter that defines the speed of contraction 
+%              T<1: slow contraction, T>1: fast contraction. Default: 1
+%  [R]       (scalar) number of rounds, default: 30
+%  [mode]    (string) 'lin' or 'exp', default: 'lin'  
+%  [initRGB] (string) Strings accepted by SOM_COLORCODE,  default: 'rgb2'
+%  [S]       (matrix) MxM matrix a precalculated similarity matrix 
+%  color     (matrix) of size MxRx3 resulting color codes at each step 
+%  X         (matrix) of size MxRx2 coordiantes for projected unit weight vectors 
+%             at each step of iteration. (Color code C is calculated using this
+%             projection.)
+%
+% The idea of the projection is to use a naive contraction model which
+% pulls the units together. Units that are close to each other in the
+% output space (clusters) contract faster into the same point in the
+% projection. The original position for each unit is its location in
+% the topological grid.
+% 
+% This is an explorative tool to color code the map units so that
+% similar units (in the sense of euclidean norm) have similar coloring
+% (See also SOM_KMEANSCOLOR) The tool gives a series of color codings
+% which start from an initial color coding (see SOM_COLORCODE) and
+% show the how the fuzzy clustering process evolves.
+%
+% The speed of contraction is controlled by the input parameter T. If
+% it is high the projection contracts more slowly and reveals more
+% intermediate stages (hierarchy).  A good value for T must be
+% searched manually. It is probable that the default values do not
+% yield good results.
+%
+% The conatrction process may be slow. In this case the mode can be
+% set to 'exp' instead of 'lin', however, then the computing becomes
+% heavier.
+%
+% EXAMPLE
+%
+%  load iris; % or any other map struct sM 
+%  [color]=som_fuzzycolor(sM,'lin',10);
+%  som_show(sM,'color',color);
+%
+% See also SOM_KMEANSCOLOR, SOM_COLORCODE, SOM_CLUSTERCOLOR
+%
+% REFERENCES
+% 
+% Johan Himberg, "A SOM Based Cluster Visualization and Its
+% Application for False Coloring", in Proceedings of International
+% Joint Conference on Neural Networks (IJCNN2000)},
+% pp. 587--592,Vol. 3, 2000
+% 
+% Esa Alhoniemi, Johan Himberg, and Juha Vesanto, Probabilistic
+% Measures for Responses of Self-Organizing Map Units, pp. 286--290,
+% in Proceedings of the International ICSC Congress on Computational
+% Intelligence Methods and Applications (CIMA '99)}, ICSC Academic
+% Press}, 1999
+%
+% Outline of the heuristic
+%
+% First a matrix D of squared pairwise euclidean distances
+% D(i,j)=d(i,j)^2 between map weight vectors is calculated. This
+% matrix is transformed into a similarity matrix S,
+% s(i,j)=exp(-(D(i,j)/(T.^2*v)), where T is a free input parameter and
+% v the variance of all elements of D v=var(D(:)). The matrix is
+% further normalized so that all rows sum to one. The original
+% topological coordinates X=som_unit_coords(sM) are successively
+% averaged using this matrix. X(:,:,i)=S^i*X(:,:,1); As the process is
+% actually a series of successive weighted averagings of the initial
+% coordinates, all projected points eventually contract into one
+% point.  T is a user defined parameter that defines how fast the
+% projection contracts into this center point. If T is too small, the
+% process will end into the center point at once.
+% 
+% In practise, we don't calculate powers of S, but compute
+% 
+%  X(:,:,i)=S.*X(:,:,i-1); % mode: 'lin'
+%
+% The contraction process may be slow if T is selected to be large,
+% then for each step the similarity matrix is squared
+%
+%  X(:,:,i)=S*X(:,:,1); S=S*S % mode: 'exp'
+%
+% The coloring is done using the function SOM_COLORCODE according to
+% the projections in X, The coordinates are rescaled in order to
+% achieve maximum color resolution.
+
+% Contributed to SOM Toolbox vs2, 2000 by Johan Himberg
+% Copyright (c) by Johan Himberg
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Previously rownorm function normalized the rows of S erroneously
+% into unit length, this major bug was corrected 14042003. Now the
+% rownorm normalizes the rows to have unit sum as it should johan 14042003
+
+%% Check input arguments
+
+if isstruct(sM), 
+   if ~isfield(sM,'topol')
+      error('Topology field missing.');
+   end
+   M=size(sM.codebook,1);
+else
+   error('Requires a map struct.');
+end
+
+if nargin<2 | isempty(T),
+   T=1;
+end
+if ~vis_valuetype(T,{'1x1'})
+   error('Input for T must be a scalar.');
+end
+
+if nargin<3 | isempty(R),
+   R=30;
+end
+if ~vis_valuetype(R,{'1x1'})
+   error('Input for R must be a scalar.');
+end
+
+if nargin < 4 | isempty(mode),
+   mode='lin';
+end
+if ~ischar(mode),
+   error('String input expected for mode.');
+else
+   mode=lower(mode);
+   switch mode
+   case {'lin','exp'}
+      ;   
+   otherwise
+      error('Input for mode must be ''lin'' or ''exp''.');
+   end
+end
+
+if nargin < 5 | isempty(initRGB)
+   initRGB='rgb2';
+end
+
+if ischar(initRGB),   
+   try
+      dummy=som_colorcode(sM,initRGB);
+   catch
+      error(['Color code ''' initRGB ''' not known, see SOM_COLORCODE.']);
+   end
+else
+   error('Invalid color code string');   
+end
+
+if nargin<6 | isempty(S),
+   S=fuzzysimilarity(sM,1./T);
+end
+
+if ~vis_valuetype(S,{[M M]}),
+   error('Similarity matrix must be a MunitsxMunits matrix.')
+end
+
+x = maxnorm(som_unit_coords(sM.topol.msize,sM.topol.lattice,'sheet'));
+
+x = x-repmat(mean(x),size(x,1),1);
+
+X(:,:,1)=x; 
+color(:,:,1)=som_colorcode(x,'rgb2',1);
+
+%%% Actions
+
+for i=1:R,
+   switch mode
+   case 'exp'
+      S=rownorm(S*S);
+      tmpX=S*X(:,:,1);
+   case 'lin'
+      tmpX=S*X(:,:,i);
+   end
+   X(:,:,i+1)=tmpX;
+   color(:,:,i+1)=som_colorcode(X(:,:,i+1),initRGB);
+end
+
+color(isnan(color))=0;
+
+function r=fuzzysimilarity(sM,p)
+  % Calculate a "fuzzy response" similarity matrix
+  % sM: map
+  % p: sharpness factor
+  d=som_eucdist2(sM,sM);
+  v=std(sqrt(d(:))).^2;
+  r=rownorm(exp(-p^2*(d./v)));
+  r(~isfinite(r))=0;
+  return;
+
+
+function X = rownorm(X)
+
+  r = sum(X,2);
+  X = X ./ r(:,ones(size(X,2),1)); 
+  return;
+
+
+function X = maxnorm(X)
+
+  for i=1:size(X,2), r = (max(X(:,i))-min(X(:,i))); if r, X(:,i) = X(:,i) / r; end, end
+  return; 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_gapindex.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,72 @@
+function [t,r,Cd,S] = som_gapindex(sM, base, between)
+ 
+% SOM_GAPINDEX Gap clustering evaluation index.
+%
+% [t,r] = som_gapindex(sM, base, [between])
+%
+%  Input and output arguments ([]'s are optional):  
+%    sM        (struct) map struct
+%    base      (vector) clusters indeces for each map unit, map units
+%                       with index<=0 or NaN are not taken into account
+%    [between] (vector) indices of prototypes which are "between" clusters:
+%                       the associated distances are doubled
+% 
+%    t         (scalar) Gap index index for the clustering (=mean(r))
+%    r         (vector) maximum Gap index for each cluster (size max(base) x 1)    
+% 
+% See also  KMEANS, KMEANS_CLUSTERS, SOM_GAPINDEX.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargin<3, between = find(isnan(base)); end
+
+nc = max(base); 
+cinds = cell(nc,1); 
+for i=1:nc, cinds{i} = find(base==i); end
+ 
+% distances between neighboring prototypes
+Ne = som_neighbors(sM,'N1'); 
+Md = som_mdist(sM.codebook,2,[],Ne);
+Md(Ne==0) = NaN;
+
+Md(between,:) = Md(between,:)*2;
+Md(:,between) = Md(:,between)*2;
+Md(between,between) = Md(between,between)/2;
+ 
+% dispersion in each cluster 
+S = zeros(nc,1);
+for i=1:nc, 
+    inds = setdiff(cinds{i},between);    
+    if any(inds), 
+        indist = Md(inds,inds); 
+        for j=1:size(indist,1), indist(j,j) = NaN; end
+        indist = indist(isfinite(indist(:))); 
+        if any(indist), S(i) = mean(indist); end
+    end
+end 
+ 
+% distances between clusters
+Cd = zeros(nc,nc) + NaN;
+for i=1:nc,
+    inds1 = cinds{i}; 
+    for j=1:nc, 
+        inds2 = cinds{j}; 
+	od = Md(inds1,inds2); 
+	od = od(isfinite(od(:)));
+	if any(od), Cd(i,j) = mean(od(:)); end        
+    end    
+end
+
+% Gap index
+R = NaN * zeros(nc);
+for i = 1:nc
+  for j = i+1:nc
+    R(i,j) = (S(i) + S(j))/Cd(i,j);
+    R(j,i) = R(i,j); 
+  end
+end
+r = max(R,[],2);
+ 
+t = mean(r(isfinite(r)));
+ 
+return; 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_grid.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,771 @@
+function [S,m,l,t,s]=som_grid(varargin)
+
+%SOM_GRID Visualization of a SOM grid
+%
+% [sGrid,m,l,t,s]=som_grid(sGrid, ['argID', value, ...])
+% [sGrid,m,l,t,s]=som_grid(topol, ['argID', value, ...])
+% [sGrid,m,l,t,s]=som_grid(lattice, msize, ['argID', value, ...])
+%
+% Input and output arguments ([]'s are optional)
+%  sGrid    (struct) som_grid struct (see output arguments)
+%  topol    (struct) map or topol struct for giving the topology
+%           (cell array) of form {'lattice', msize, ['shape']}. 
+%                    Default value for 'shape' is 'sheet'.
+%  lattice  (string) 'hexa', 'rect' 
+%           (matrix) size M x M, defines topological connections             
+%  msize    (vector) 1x2 vector defines the grid size, M=msize(1)*msize(2)
+%  ['argID',(string) Other arguments can be given as 'argID', value   
+%   value]  (varies) pairs. See list below for valid values.
+%
+%  sGrid    (struct) with fields S.msize, S.shape, S.lattice, S.coord, S.marker, 
+%                    S.markersize, S.markercolor, S.line, S.linewidth, S.linecolor,
+%                    S.surf, S.label, S.labelsize, S.labelcolor
+%  m        (matrix) handels to LINE objects (unit markers) 
+%  l        (matrix) handles to LINE objects (lines connecting the units)
+%  t        (matrix) handles to TEXT objects (labels)
+%  s        (scalar) handle  to SURF object  (surface between units)
+%
+%  Here are the valid argument IDs (case insensitive) and
+%  associated values: 
+%  'Coord'       Mx2 or Mx3 matrix of coordinates 
+%                (default: according to lattice as in som_cplane)
+%  'Marker'      string 'o','+','x','*','v','^','<','>','h','s','d','p','.', 
+%                'none' or Mx1 cell or char array of these strings 
+%                Default: 'o'.  
+%  'MarkerSize'  scalar or Mx1 matrix of double. Default: 6.
+%  'MarkerColor' ColorSpec or Mx3 matrix of RGB triples. Default: 'k'.
+%  'Line'        string '-',':','--' or '-.' or 'none'. Default: '-'.
+%  'Surf'        [], Mx1 or Mx3 matrix of RGB triples 
+%                to define surface values. Default: [] = no surf. 
+%                Note: shading is turned to 'interp'.
+%  'LineWidth'   scalar or MxM matrix, default: 0.5
+%  'LineColor'   ColorSepc, MxMx3 matrix of RGB triples or a cell array 
+%                of form {r g b} where r,g, and b are MxM  
+%                (sparse) matrices of R,G, and B values
+%  'Label'       Mx1 char array, cell array of strings size MxL 
+%                or [] to indicate no labels, default: [] = no labels.
+%  'LabelSize'   scalar
+%  'LabelColor'  ColorSpec or string 'none', default: 'g'.
+%
+% For more help, try 'type som_grid' or check out online documentation.
+% See also SOM_CONNECTION, SOM_SHOW, SOM_CPLANE, SOM_SET, SCATTER, SCATTER3.
+
+%%%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_grid
+%
+% PURPOSE 
+% 
+%  To visualize the SOM grid in various ways 
+% 
+% SYNTAX
+%
+%  [sGrid,m,l,t,s]=som_grid(sGrid)
+%  [sGrid,m,l,t,s]=som_grid(sTopol)
+%  [sGrid,m,l,t,s]=som_grid(sMap)
+%  [sGrid,m,l,t,s]=som_grid({lattice, msize, [shape]}) 
+%  [sGrid,m,l,t,s]=som_grid(lattice, msize)
+%  [sGrid,m,l,t,s]=som_grid(..., ['argID', value, ...])
+%
+% DESCRIPTION 
+%
+% The SOM can be defined as a set of units (neurons) and their
+% topological relations.  This function is used to visualize these in
+% various ways. The units may be drawn using different markers and
+% colors, in different sizes and in different locations in 2D or
+% 3D. However the topological neighborhood is limited to be
+% 2-dimensional. The connections between these units may be drawn using
+% lines having different thicknesses and colors. Labeling text may be
+% plotted on the units. It is possible also to draw a surface between
+% the units. The surface coloring is either indexed (one value per
+% unit) or fixed RGB (a 1x3 RGB triple per unit).
+%
+% REQUIRED INPUT ARGUMENTS 
+%
+% Note: M is the number of map units.
+% 
+% The first (or first two) argument may have various different types of values
+%
+%   1. sGrid   (struct) som_grid struct (the output of this function)
+%  
+%     The struct initiates the visualization. The argID-value -pairs
+%     are used to alter the initiation.
+%
+%   Following argument types may be used to give the topology for the grid
+% 
+%   2. sTopol  (struct) som_topol struct 
+%   3. sMap    (struct) som_map struct (only topology matters)
+%   4. {lattice, msize} or {lattice, msize, sheet} (cell array) 
+%       - lattice must be 'hexa' or 'rect'
+%       - msize must be a 1x2 vector
+%       - shape (if specified) must be string 'sheet', 'cyl' or 'toroid'
+%         If shape is not given it is 'sheet' by default.
+%   5. lattice (string or matrix) AND msize (1x2 vector) as two separate arguments
+%       - lattice may be string 'rect' or 'hexa' or a connection matrix
+%         (see SOM_CONNECTION) to define a free topology. This connection
+%         matrix is of size MxM and its element i,j (i<j) is set
+%         to 1 if there is a connection between units i and j, otherwise to 
+%         zero. Shape is set to 'sheet' by default. Shape does not have any 
+%         meaning if a free topology is specified, anyway.
+%       - msize must be a 1x2 vector
+%
+%  In cases 2...5 the sGrid structure is initiated by default values
+%  which are set in SOM_SET. These include black markers 'o' (6pt),
+%  light gray conncection lines (graph edges), unit coordinates
+%  according to the lattice ('hexa','rect'), no labels, and no
+%  surface.
+%
+%  OPTIONAL INPUT ARGUMENTS 
+%   
+%  Note: M is the number of map units.
+%   
+%  Here is a list of the valid arguments IDs and the associated
+%  values (identifiers are case insensitive):
+%
+%  'Coord'     Unit coordinates
+%              This defines the coordinates of the units. Default: the
+%              topological coordinates (calculated as in function
+%              SOM_VIS_COORDS and SOM_CPLANE). If the topology is free
+%              (lattice is a connection matrix) this argument is obligatory!
+%     (matrix) size Mx2 of 2D coordinates for each unit
+%     (matrix) size Mx3 of 3D coordinates for each unit
+% 
+% 'Marker'       Unit markers, default is 'o'.
+%     (string) 'o','+','x','*','v','^','<','>','h','s','d', 'p','.', or 'none'
+%              give the same marker for each unit. 
+%     (cell array) of size Mx1 of previous strings gives individual 
+%              markers for each unit.
+%     
+% 'MarkerSize'   Size (pt) of unit markers, default is 6 (pt).
+%     (scalar) gives the same size for every unit.  
+%     (matrix) Mx1 gives an individual size for each unit marker.  
+%
+%  'MarkerColor' Unit marker colors, default is 'k'
+%     (ColorSpec) gives the same color each unit. 
+%     (matrix) Mx3 of RGB triples gives individual color for each unit
+%              Note that indexed coloring - like in SOM_CPLANE - is
+%              not possible. If indexed coloring is needed, you can
+%              use SOM_NORMCOLOR to calculate RGB colors that
+%              emulate indexed coloring. However, the colors for the
+%              units are fixed, so changing colormap will not
+%              change the colors.
+%  
+%  'Line'        Line type, default is '-'.
+%     (string) '-',':','--' or '-.' or 'none'. Only one linetype in
+%              grid is allowed.  
+%
+%  'LineWidth'   Width of the topological connection lines (edges)  
+%     (scalar) gives the same width for each line. Default is 0.5.
+%     (matrix) MxM sparse (or full) matrix gives individual width for 
+%              each connection. The element (i,j), i<j, gives the line width for 
+%              connection between nodes i and j. (The sparse form is
+%              recommended for saving memory, a full matrix works as well,
+%              of course). Note that only the elements satisfying i<j
+%              matter - as the elememts for which j >= i are ignored in
+%              order to avoid ambiguous situations if the matrix would be 
+%              non-symmetric. The "connections to oneself" is not drawn. 
+%
+%              Line width zero is valid and causes the line to disappear.
+%           
+%  'LineColor'   Color of connection lines, default is [0.9 0.9 0.9].
+%     (ColorSpec) gives the same color for each line
+%     (matrix) MxMx3 matrix of RGB triples gives individual width for 
+%              each connection. The element (i,j,:), i<j, gives the RGB triple for 
+%              line between nodes i and j.     
+%     (cell array) of three sparse (or full) matrices {r,g,b} where 
+%              r(i,j), g(i,j) and b(i,j) gives the R,G, and B values in the RGB
+%              triple for the line between nodes i and j. (The motivation for this
+%              form is the fact that a 3D arrays can't use sparse format in 
+%              Matlab version 5.1.)
+%  
+%              Note that only the elements satisfying i<j matter - the elememts 
+%              for which j >= i are ignored in order to avoid ambiguous situations 
+%              if the matrix was non-symmetric. The "connections to oneself"
+%              is not drawn. 
+%    
+%
+%  'Label'       Labels for units, default is [].
+%     (empty)  [] means no labels.
+%     (char array) of size Mx1. Element (i,:) has the label for unit i.     
+%     (cell array) of size MxL consisting of sets of labels. Element {i,:} 
+%              contains the labeling for unit i. 
+%               In case of multiple labels, the labels for one unit are shown 
+%               in one column centered at that unit.
+%    
+%   'LabelSize'   Text size of labels (points), default is 10.
+%     (scalar) Default is 10.
+%
+%   'LabelColor'  Color of labels, default is 'c' (cyan).
+%     (ColorSpec) gives the same color for each label string 'xor'
+%                 sets the colors automatically so that they differ
+%                 from the background (using Matlab's built-in xor-color feature.)
+%    
+%  'Surf'         Surface between nodes, default is [].
+%     (empty)  [] gives no surface
+%     (vector) Mx1 gives an indexed interpolated color surface between 
+%              units using the actual colormap.
+%     (matrix) Mx3 matrix of RGB triples gives a interpolated color surface 
+%              between units using fixed RGB colors.
+%    
+%              Note that the interpolation is done using Matlab's built-in
+%              color interpolation for SURF objects.
+%
+% OUTPUT ARGUMENTS
+%
+%  sGrid    (struct) with fields S.msize, S.shape, S.lattice, S.coord, S.marker, 
+%                    S.markersize, S.markercolor, S.line, S.linewidth, S.linecolor,
+%                    S.surf, S.label, S.labelsize, S.labelcolor
+%
+%  m        (matrix) handels to LINE objects (unit markers) 
+%
+%  l        (matrix) handles to LINE objects (lines connecting the units)
+% 
+%  t        (matrix) handles to TEXT objects (labels)
+%
+%  s        (scalar) handle  to SURF object  (surface between units)
+%
+% EXAMPLES
+%
+% % Make map of size 15x10 on random data:
+% 
+%    map=som_make(rand(1000,4),'msize',[15 10], 'lattice', 'hexa');
+%
+% % Draw the grid using two frist varable values as coordinates
+% % and store the sGrid struct in varable S:
+%
+%    S=som_grid(map, 'coord', map.codebook(:,[1 2]))
+%
+% %Define some things: 
+% %
+% % Create a cell array of size 150x1 that divides map in to two label classes
+% % 'circles' and 'squares'
+%   
+%    L(1:75,1)='o'; L(76:150,1)='s'; L = cellstr(L);
+%    
+% % Create a coloring according to the 3rd variable according to current
+% % colormap: 
+%    
+%    C = som_normcolor(map.codebook(:,3));
+% 
+% % Change the visualization: use black lines, unit markers in M and unit
+% % color in C, and set unit size to 10:
+%
+%    S=som_grid(S, 'linecolor', 'k', 'marker', L, 'MarkerColor',C, ...
+%     'MarkerSize', 10);
+%
+% % Do a new visualization, use indexed color surface calcualted from the
+% % first variable, coordinates according to the lattice (default) but 
+% % no markers nor lines:
+% 
+%    S=som_grid(map,'line','none','marker','none','surf',map.codebook(:,1));
+%
+% % Set coordinates according to three last varables
+%
+%    som_grid(S,'coord',map.codebook(:,2:4));
+%
+% % Create a random connection matrix R1 and the usual hexagonal
+% % neighborhood connection matrix R2: 
+% 
+%    R1=sparse(rand(150,150)>0.9); 
+%    R2=som_connection(map);
+%
+% % Show these connections. Note that coordinates _must_ now be given
+% % explicitly: we form default topological coordinates using
+% % som_unit_coords.
+%
+%    som_grid(R1,map.topol.msize,'coord',som_unit_coords(map));
+%    som_grid(R2,map.topol.msize,'coord',som_unit_coords(map));
+%    
+% % Show connections (R1 AND R2)
+%    som_grid(R2.*R2,map.topol.msize,'coord',som_unit_coords(map));
+% 
+% OBJECT TAGS
+%
+%  No tags are set.
+%
+% SEE ALSO
+%
+%  som_show        The basic map visualization routine
+%  som_cplane      The basic component plane visualization
+%  som_connection  The basic topological connections
+%  scatter         Scatter plots
+%  scatter3        3-dimensional scatter plots 
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 061099 juuso 151199 310300
+
+%% Init %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+True=1; False=0;                % const.
+m=[]; l=[]; t=[]; s=[];         % default values for outputs
+Ref=som_set('som_grid');        % reference struct
+
+num_of_args=length(varargin);   % numb. of varargins
+
+if num_of_args==0,
+  S=som_set('som_grid');
+  return;
+end
+
+switch class(varargin{1})
+case 'struct'
+  S=varargin{1};
+  first_identifier=2;
+  if ~isfield(S,'type'),
+    error('Input struct is invalid: field ''type'' is missing.');
+  end
+  switch  S.type
+  case 'som_grid'
+    S=varargin{1};
+    first_identifier=2;
+  case 'som_map'
+    Ref.lattice=S.topol.lattice;
+    Ref.msize=S.topol.msize;
+    Ref.shape=S.topol.shape;
+    S=Ref;
+    first_identifier=2;
+  case 'som_topol'
+    Ref.lattice=S.lattice;
+    Ref.msize=S.msize;
+    Ref.shape=S.shape;
+    S=Ref;
+    first_identifier=2;
+  otherwise
+    error('Input struct has to be of type som_grid, som_map or som_topol.');
+  end
+case 'cell'
+  S=varargin{1};
+  first_identifier=2;
+  if vis_valuetype(S,{'topol_cell_no_shape'}),
+    Ref.lattice=S{1};
+    Ref.msize=S{2};
+  elseif vis_valuetype(S,{'topol_cell'}),
+    Ref.lattice=S{1};
+    Ref.msize=S{2};
+    Ref.shape=S{3};
+  else
+    error(['The cell value for 1st argument has to be {lattice, msize}' ...
+	  'or {lattice, msize, shape}.']); 
+  end
+  S=Ref; 
+case{'double','sparse','char'} 
+  % Set defaults
+  S=Ref;
+  first_identifier=3; 
+  if num_of_args<2,
+    error('Not enough input arguments.');
+  end
+  S.lattice=varargin{1};
+  S.msize=varargin{2};
+otherwise
+  error('Invalid input arguments!');
+end  
+
+%% Check input args %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+for i=first_identifier:2:num_of_args,
+  if ischar(varargin{i}) & isfield(Ref,lower(varargin{i})),
+    if i+1>num_of_args,
+      error('Invalid identifier-value pairs or wrong argument order.');
+    else
+      S=setfield(S,lower(varargin{i}),varargin{i+1});
+    end
+  elseif ischar(varargin{i}), 
+    error(['Identifier ''' varargin{i} ''' is unknown.']);
+  else
+    error('Invalid identifier-value pairs or wrong argument order.');
+  end
+end 
+
+% msize
+
+if ~vis_valuetype(S.msize,{'1x2'}),
+  error('msize has to be a 1x2 vector.');
+end
+munits=prod(S.msize);
+
+% Default coordinates according to negihborhood
+
+if isempty(S.coord),
+  if ischar(S.lattice),
+    switch S.lattice,
+    case{'hexa','rect'}
+      S.coord=som_vis_coords(S.lattice,S.msize);
+    otherwise
+      error('String value for lattice must be ''hexa'' or ''rect''.');
+    end
+  else
+    error('Lattice is not ''hexa'' or ''rect'': coordinates must be given.');
+  end
+end
+
+% connections
+
+type=class(S.lattice);
+switch type
+case {'sparse','double'}   % free topology
+  fixedline=False;   
+case 'char'                % default topologies (hexa,char)
+  switch S.lattice
+  case 'hexa'
+    hexa=True;
+  case 'rect'
+    hexa=False;
+  otherwise
+    error('Unknown lattice or neighborhood.');
+  end
+
+  % If topology is hexa/rect but linetype, color etc. is 
+  % not constant, the topology is set to free
+
+  if size(S.linewidth,1)>1 | size(S.linecolor,1)>1 | ...
+    iscell(S.linecolor) % matrix or cell = not constant 
+    fixedline=False;
+    S.lattice=som_connection({S.lattice,S.msize,S.shape});
+  else
+    fixedline=True;
+  end
+end
+
+% Check coordinate matrix size and set dummy zeros to z-axis
+% if 2D coordinates (always 3D plots!)
+
+if ~vis_valuetype(S.coord,{[munits 2],[munits 3]}),
+   error('Coordinate matrix has wrong size.');
+elseif size(S.coord,2)==2,
+   S.coord(:,3)=0;
+end
+
+% Fixed marker size, color, type? 
+
+if size(S.markersize,1)>1 | size(S.markercolor,1)>1 | size(S.marker,1)>1
+   fixedmarker=False;
+else
+   fixedmarker=True;
+end
+
+% Check labels
+
+if ~vis_valuetype(S.label,{'chararray','2Dcellarray_of_char'}) ...
+      & ~isempty(S.label),
+  error('Labels should be in a char array or cell array of strings.');
+elseif ischar(S.label)
+  S.label=cellstr(S.label);
+end
+
+if size(S.label,1) ~= munits & ~isempty(S.label),
+  error('Number of labels and map size do not match.');
+end
+
+% Check line width, marker size, marker color,
+% label size label color and surf sizes&types:
+
+if ~vis_valuetype(S.linewidth,{[munits munits] [1 1]}),
+  error('LineWidth matrix value has wrong size or dimension.');
+elseif any(S.linewidth(:)<0),
+  error('All elements of LineWidth must be non-negative.');
+elseif ~vis_valuetype(S.markersize,{[munits 1] [1 1]}), 
+  error('MarkerSize matrix value has wrong size or dimension.');
+elseif any(S.markersize(:)<0), 
+  error('All elements of MarkerSize must be non-negative.');
+elseif ~vis_valuetype(S.markercolor,{'1x3rgb','colorstyle'}) & ...
+      ~vis_valuetype(S.markercolor,{[munits 3],'nx3rgb'},'all'),
+  error('MarkerColor should be a ColorSpec or Mx3 matrix of RGB triples.');
+elseif ~vis_valuetype(S.labelcolor,{'1x3rgb','colorstyle','xor'}),
+  error('LabelColor shoud be a ColorSpec or ''xor'' or ''none''.')
+elseif ~vis_valuetype(S.labelsize,{'1x1'})
+  error('LabelSize should be a scalar.');
+elseif ~isempty(S.surf) & ~vis_valuetype(S.surf,{[munits 1] [munits 3]});
+  error('Surf matrix value has wrong size or dimension.');
+end
+
+% Check marker type & size
+
+if vis_valuetype(S.marker,{'cellcolumn_of_char'}) 
+  % Don't bother to check the mareker strings in this case
+  % let the plot3 handle them; it returns quite understandable
+  % error messages, anyway
+  
+  if ~size(S.marker) == [munits 1],
+    error(['Marker should be one of Matlab''s valid marker type,' ...
+	   ' string ''none'' or a Mx1 cell array of these.']); 
+  end
+elseif ~vis_valuetype(S.marker,{'markerstyle','none'}),
+      error(['Marker should be one of Matlab''s valid marker type,' ...
+	   ' string ''none'' or a Mx1 cell array of these.']); 
+end
+
+% Check line type & size: only one line style allowed
+
+if ~vis_valuetype(S.line,{'linestyle','none'}) 
+  error(['Line should be a valid Matlab''s line style string or' ...
+	 ' string ''none''.']);
+end
+	
+% Check line color
+
+if iscell(S.linecolor),
+  if ndims(S.linecolor) ~= 2 | any(size(S.linecolor) ~= [1 3]),
+    error('Cell input for LineColor should be of form {r,g,b}.')
+  elseif ~vis_valuetype(S.linecolor{1},{[munits munits],'nxn[0,1]'},'all')| ...
+	~vis_valuetype(S.linecolor{2},{[munits munits],'nxn[0,1]'},'all')| ...
+	~vis_valuetype(S.linecolor{3},{[munits munits],'nxn[0,1]'},'all'),
+    error(['In cell input {r,g,b} some matrix r,g or b is invalid: ' ...
+	   'Size must be MxM and values in interval [0,1].']);
+  end 
+elseif ~vis_valuetype(S.linecolor,{'colorstyle','1x3rgb'}) & ...
+      ~vis_valuetype(S.linecolor,{'nxnx3rgb', [munits munits 3]},'all'),
+  error('Invalid LineColor: see help text for valid values.'),
+elseif vis_valuetype(S.linecolor, {'none'}),
+  error('LineColor ''none'' not allowed: set Line to ''none'' instead.');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Action
+
+memhold=ishold; % take hold state
+if ~memhold
+   cla;
+end
+hold on;
+
+% Set surf if it exist
+
+if ~isempty(S.surf),
+   for i=1:3,
+      s(:,:,i)=reshape(S.coord(:,i),S.msize);
+   end
+   s(:,:,4:3+size(S.surf,2))=reshape(S.surf,[S.msize size(S.surf,2)]);
+   s=surf(s(:,:,1),s(:,:,2),s(:,:,3),s(:,:,4:end));
+   set(s,'EdgeColor','none','Marker','none','FaceColor','interp');
+end
+
+
+if fixedline,
+  % Line properties are fixed: draw fast, but
+  % if line is set to 'none' set empty handle ans skip
+  if strcmp(S.line,'none')
+    l={};
+  else
+    p1=reshape(S.coord, [S.msize 3]);
+    p2=zeros(size(p1)-[0 1 0]);
+    p2(1:2:end,:,:)=p1(1:2:end,2:end,:);
+    p2(2:2:end,:,:)=p1(2:2:end,1:end-1,:);
+    
+    l{1}=plot3(p1(:,:,1), p1(:,:,2), p1(:,:,3), ...
+	       'Color', S.linecolor(1,:), ...
+	       'LineWidth', S.linewidth(1), ...
+	       'LineStyle', S.line);
+    l{2}=plot3(p1(:,:,1)', p1(:,:,2)', p1(:,:,3)', ...
+	       'Color', S.linecolor(1,:), ...
+	       'LineWidth', S.linewidth(1), ...
+	       'LineStyle', S.line);
+    if hexa,
+      l{3}=plot3(p2(:,:,1), p2(:,:,2), p2(:,:,3), ...
+		 'Color', S.linecolor(1,:), ...
+		 'LineWidth', S.linewidth(1), ...
+		 'LineStyle', S.line);
+    end
+  end
+  l=cat(1,l{:});
+else
+   % Variable properties: draw connection by connection
+   
+   [I,J,lw]=find(S.lattice); 
+   x=[S.coord(I,1)'; S.coord(J,1)']; 
+   y=[S.coord(I,2)'; S.coord(J,2)'];
+   z=[S.coord(I,3)'; S.coord(J,3)'];
+   if S.linewidth(1)==0,
+      linewidth=0.5;
+   else
+      linewidth=S.linewidth(1);
+   end
+   if ndims(S.linecolor) ~=  3
+     if isstr(S.linecolor)  
+       l=plot3(x, y, z, ...
+	       'Color', S.linecolor, ...
+	       'LineWidth', linewidth, ...
+	       'LineStyle',S.line);
+     else 
+       if iscell(S.linecolor)
+         lcolor=[S.linecolor{1}(1,1) S.linecolor{2}(1,1) S.linecolor{3}(1,1)];
+         l=plot3(x, y, z, ...
+		 'Color', lcolor, ...
+		 'LineWidth', linewidth, ...
+		 'LineStyle',S.line);
+       else
+         l=plot3(x, y, z, ...
+                 'Color', S.linecolor(1,:), ...
+                 'LineWidth', linewidth, ...
+                 'LineStyle',S.line);
+       end
+     end
+   else
+     l=plot3(x, y, z, ...
+	     'Color', S.linecolor(1,1,:), ...
+	     'LineWidth', linewidth, ...
+	     'LineStyle',S.line);
+   end
+end
+
+if fixedmarker,
+
+  % If marker is set to 'none' skip and set empty handle 
+  if strcmp(S.marker,'none')
+    m=[]; 
+  else
+    % Fixed markers: draw all in one command
+
+    m=plot3(S.coord(:,1), S.coord(:,2), S.coord(:,3), ... 
+	    'LineStyle', 'none', ...
+	    'Marker', S.marker, ...
+	    'MarkerSize', S.markersize(1), ...
+	    'MarkerFaceColor', S.markercolor(1,:), ...
+	    'MarkerEdgeColor', S.markercolor(1,:));
+  end
+else
+  % Variable marker properties: draw marker by marker
+
+  x=[S.coord(:,1)'; S.coord(:,1)']; 
+  y=[S.coord(:,2)'; S.coord(:,2)'];
+  z=[S.coord(:,3)'; S.coord(:,3)'];
+  if iscell(S.marker)
+    marker=S.marker{1};
+  else
+    marker=S.marker(1);
+  end
+  sz=max(S.markersize(1),0.1);
+  m=plot3(x, y, z, ... 
+	  'LineStyle', 'none', ...
+	  'Marker', marker, ...
+	  'MarkerSize', sz, ... 
+	  'MarkerFaceColor', S.markercolor(1,:), ...
+	  'MarkerEdgeColor', S.markercolor(1,:));
+end
+
+L=length(l); 
+n=munits;
+
+%%% Set variable properties %%%
+
+% Line width
+
+if length(S.linewidth)>1 
+   lwidth=diag(S.linewidth(I,J)); 
+
+   % Handle zero width
+   iszero=(lwidth == 0);lwidth(iszero)=0.5;
+   for i=1:length(l),
+     set(l(i),'LineWidth', lwidth(i));
+   end
+   if ~isempty(iszero), % zero width
+      set(l(iszero),'Visible','off');
+   end
+end
+
+% Line color
+
+if size(S.linecolor,1)>1 | iscell(S.linecolor)
+   if length(size(S.linecolor)) == 3 | iscell(S.linecolor) 
+     if ~iscell(S.linecolor)
+       for i=1:L
+         set(l(i),'Color',S.linecolor(I(i),J(i),:));
+       end
+     else
+       for i=1:L
+         lcolor=[S.linecolor{1}(I(i),J(i)),...
+                 S.linecolor{2}(I(i),J(i)),...
+                 S.linecolor{3}(I(i),J(i))];
+         set(l(i),'Color',lcolor);
+       end
+     end
+   else
+     for i=1:L,
+       set(l(i),'Color', S.linecolor(I(i),:));
+     end
+   end
+end
+
+% Marker size
+
+if length(S.markersize)>1
+   % handle zero size
+   iszero=find(~S.markersize);
+   S.markersize(iszero)=1;
+   for i=1:n,
+      set(m(i),'MarkerSize', S.markersize(i));
+   end
+   if ~isempty(iszero), % zero size
+      set(m(iszero),'Visible','off');
+   end
+end
+
+% Marker type
+
+if size(S.marker,1)>1
+   S.marker=char(S.marker);
+   for i=1:n,
+      set(m(i),'Marker', S.marker(i));
+   end
+end
+
+% Marker color
+
+if size(S.markercolor,1)>1
+   for i=1:n,
+     set(m(i),'MarkerFaceColor', S.markercolor(i,:), ...
+	      'MarkerEdgeColor', S.markercolor(i,:));
+   end
+end
+
+% Set labels if they exist
+
+if ~isempty(S.label)
+  if vis_valuetype(S.labelcolor,{'xor'}),
+    S.labelcolor='g';
+    XOR=1;
+  else
+    XOR=0;
+  end
+  if vis_valuetype(S.labelcolor,{'none'}),
+    S.labelcolor='g';
+    VIS = 1;
+  else
+    VIS = 0;
+  end
+  for i=1:size(S.label,1),
+    L=cat(1,S.label(i,:)); 
+    for j=length(L):-1:1,
+      if isempty(L{j}),
+	L=L(1:end-1); 
+      end
+    end
+    
+    if isempty(L),
+      L='';
+    end
+    t(i)=text(S.coord(i,1), S.coord(i,2), S.coord(i,3), L,...
+	'FontSize', S.labelsize, 'Color',S.labelcolor, ...
+	'HorizontalAlignment', 'center');
+  end
+  if XOR
+    set(t,'EraseMode','xor');
+  end
+  if VIS
+    set(t,'Visible','off');
+  end 
+else
+   t=[];
+end
+
+%% Set hold state
+
+if ~memhold,
+   hold off; 
+end
+
+if nargout==0,
+  clear S m l t s;
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_gui.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3130 @@
+function som_gui(varargin)
+
+%SOM_GUI A GUI for initialization and training of SOM.
+%
+% som_gui([sD]) 
+% 
+%   som_gui
+%   som_gui(sD)
+%
+%  Input and output arguments ([]'s are optional) 
+%   [sD]     (struct) SOM data struct
+%            (matrix) a data matrix, size dlen x dim
+%
+%   Actually, there are more arguments the function takes, but 
+%   they are for internal action of the function only. DO NOT use
+%   them.
+%
+% For a more throughout description, see the online documentation.
+% See also PREPROCESS.
+
+%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% IN FILES: som_gui.html,browsewin.jpg,wspace.jpg,loadgui.jpg,initgui.jpg,questdlg.jpg,paragui.jpg,mwindow.jpg,visgui.gif,reload.gif,savemap.gif,browse.gif
+%
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Mika Pollari
+% Copyright (c) by Mika Pollari and SOM Toolbox Team
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Mika Pollari 31.1.2000 vs 1.1
+
+global NEWMAP NEWST MAPSAVED MAP DATA  LOAD_NAME LOAD_DATA;
+global SAVEMAP ALGORITHM HANDLE2 STOPOLINIT INIT_TYPE;
+global STRAIN1 STRAIN2 SOTHERS;
+
+if nargin == 0
+  main_gui;
+  action = 'dummy';	
+elseif nargin == 1
+  temp = varargin{1};
+  if isstruct(temp),
+    DATA = temp;
+    main_gui;
+    action = 'input_data';
+  elseif isnumeric(temp), 
+    DATA = som_data_struct(temp);
+    main_gui;
+    action = 'input_data';
+  else
+    action = temp;			
+  end
+end 
+
+
+switch(action)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LOAD %%%%%%%%%%%%%%%%%%%%%%%%%%
+  case 'load_data'
+     loadgui3;		%%% Activates load GUI
+  case 'workspace'
+       workspace;	%%% Workspace selected
+  case 'file'
+        file;  		%%% File Selected
+  case 'file_select'
+	file_select; 
+  case 'missing'	
+       Handle = findobj(gcf,'Tag','Checkbox1');
+       set(Handle,'Value',1);	
+  case 'load_ok'	%%% <Load OK> pushed
+     	load_ok;	
+  case 'input_data'	%%% GUI activated with data as arg1
+     	input_data;     %%% eg. som_gui(data)
+
+  case 'browse'		%%% Activates Browse GUI		
+	browse;		%%% Browse files or workspace variables
+
+  case 'works_ok'	%%% <OK> pushed in (workspace) browse GUI
+	works_ok;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%% Initialization %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+  case 'def_initialization'	%%% Finds default initialization ...
+	def_initialization;     %%% parameters
+
+  case 'change_initialization'	%%% Activates change (init) parameters GUI    
+	change_initialization;
+
+  case 'change_initialization_ok'%%% Set new init. parameters 	
+	change_initialization_ok;
+
+  case 'change_initialization_cancel'
+	close(gcf);
+	return;
+
+  case 'map_size' %%% Checks that 'map_size' is given in correct form
+	map_size;
+
+  case 'munits'   %%% Checks that 'munits' is given in correct form
+	munits;
+  
+  case 'init'	%%% Initialize Map
+	init;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%% Train %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+  case 'def_values_others'
+	def_values_others;
+
+  case 'def_values_train'
+ 	STRAIN1 = som_train_struct('algorithm',ALGORITHM,'phase','rough','data',DATA);
+	STRAIN2 = som_train_struct('previous',STRAIN1);
+
+  case 'fill_fields'	%%% Fill text fields in GUI
+	fill_fields;
+
+  case 'def_train'	%%% Train Map
+     	def_train;
+
+  case 'change_def'	%%% Change default training parameters 
+	change_def;	%%% Activate GUI
+
+  case 'fill_new_defaults' 
+	fill_new_defaults;
+
+  case 'set_batch_mask'
+	set_batch_mask;
+
+  case 'set_new_parameters'
+	set_new_parameters;
+
+  case 'only_finetune' 	%%% Train only once with finetune parameters
+	only_finetune;
+
+%%%%%%% Next function check correctnes of new training parameters.
+
+  case 'check_rough_radini'
+	check_rough_radini;
+  case 'check_fine_radini'
+	check_fine_radini;
+  case 'check_rough_radfin'
+	check_rough_radfin;
+  case 'check_fine_radfin'
+	check_fine_radfin;
+  case 'check_rough_alphaini'
+	check_rough_alphaini;
+  case 'check_fine_alphaini'
+	check_fine_alphaini;
+  case 'check_rough_trainlen'
+	check_rough_trainlen;
+  case 'check_fine_trainlen'
+	check_fine_trainlen;
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%% Save Map %%%%%%%%%%%%%%%%%%%%%%
+
+  case 'savemap'	%%% Save as <.cod> file
+	savemap;
+  case 'save_workspace'	%%% Save in workspace
+	save_workspace;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%% Help & Info %%%%%%%%%%%%%%%%%%%%%%%
+  case 'help'
+    web file:///share/somtoolbox/vs2/html/som_GUI.html;
+  case 'helpwin'
+    helpwin1;
+  case 'helpwin2'
+    helpwin som_gui;	
+  case 'data_info'
+	data_info;   %%% Info about data
+  case 'map_info'    %%% Info about map
+	map_info;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%% Other Functions %%%%%%%%%%%%%%%%%%%%%%%
+
+  case 'preprocess'
+	preprocess_gui;		%%%%% Call preprocess GUI
+  case 'visualize'
+	visualize;		%%%%% Call visualization GUI
+
+  case 'clear_all'		%%%%% Clear all filds
+	clear_all;		
+
+  case 'close'
+	close_fig;		%%%%% Close active GUI 	
+
+end 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%   END OF SWITCH-STATEMENT  %%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%% (SUB) FUNCTIONS
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     LOAD SECTION STARTS	%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+function [] = workspace()
+Handle = findobj(gcbf,'Tag','Radiobutton2');
+Value = get(Handle,'Value');
+HandleTemp = findobj(gcbf,'Tag','Radiobutton1');
+if Value == 1	
+  set(HandleTemp,'Value',0);
+  HandleBar = findobj(gcbf,'Tag','PopupMenu1');
+  set(HandleBar,'Enable','off');
+  set(HandleBar,'Visible','off');
+  Handle3 = findobj(gcbf,'Tag','StaticText3');
+  set(Handle3,'Visible','off');
+  Handle3 = findobj(gcbf,'Tag','Checkbox1');
+  set(Handle3,'Visible','off');
+  Handle3 = findobj(gcbf,'Tag','EditText3');
+  set(Handle3,'Visible','off');
+  Handle = findobj(gcbf,'Tag','EditText2');
+  set(Handle,'String','');
+end
+
+
+
+function [] = file()
+Handle = findobj(gcbf,'Tag','Radiobutton1');
+Value = get(Handle,'Value');
+HandleTemp = findobj(gcbf,'Tag','Radiobutton2');
+if Value == 1
+  set(HandleTemp,'Value',0);
+  HandleBar = findobj(gcbf,'Tag','PopupMenu1');
+  set(HandleBar,'Enable','on');
+  set(HandleBar,'Visible','on');
+  Handle3 = findobj(gcbf,'Tag','StaticText3');
+  set(Handle3,'Visible','on');
+  Handle3 = findobj(gcbf,'Tag','Checkbox1');
+  set(Handle3,'Visible','on');
+  Handle3 = findobj(gcbf,'Tag','EditText3');
+  set(Handle3,'Visible','on'); 
+  Handle = findobj(gcbf,'Tag','EditText1');
+  set(Handle,'String','');
+end
+
+function [] = file_select() 
+Handle = findobj(gcbf,'Tag','PopupMenu1');
+temp = get(Handle,'String');
+val = get(Handle,'Value');
+Handle1 = findobj(gcbf,'Tag','Checkbox1');
+Handle2 = findobj(gcbf,'Tag','EditText3');
+if strcmp(temp{val},'dat file')
+   set(Handle2,'String','x');
+   set(Handle1,'Enable','on');
+   set(Handle2,'Enable','on');
+   set(Handle1,'Visible','on');
+   set(Handle2,'Visible','on');
+  else 
+   set(Handle1,'Value',0);
+   set(Handle1,'Enable','off');
+   set(Handle2,'Enable','off');
+   set(Handle1,'Visible','off');
+   set(Handle2,'Visible','off');
+end
+
+function [] = load_ok()
+global MAP DATA LOAD_DATA LOAD_NAME;
+Handle1 = findobj(gcbf,'Tag','EditText1');
+Handle2 = findobj(gcbf,'Tag','EditText2');
+Name1 = get(Handle1,'String');
+Name2 = get(Handle2,'String');
+if isempty(Name1) & not(isempty(Name2))
+  Handle = findobj(gcbf,'Tag','PopupMenu1')
+  type = get(Handle,'String');
+  val = get(Handle,'Value');
+  type = type{val};
+  if strcmp(type,'mat file')
+      ltemp = 'load:::';
+      ltemp = strcat(ltemp,Name2);
+      ltemp = strrep(ltemp,':::',' ');
+      evalin('base',ltemp);
+      DATA = evalin('base','sD');
+      LOAD_DATA = evalin('base','sD.data');
+      LOAD_NAME = evalin('base','sD.name');
+      LOAD_NAME = strrep(LOAD_NAME,'.','_');
+      load_labels = evalin('base','sD.labels');
+      load_comp_names = evalin('base','sD.comp_names');
+      DATA = som_data_struct(LOAD_DATA);
+      DATA.name = LOAD_NAME;
+      DATA.comp_names = load_comp_names;
+      DATA.labels = load_labels;
+   else
+      Handle = findobj(gcbf,'Tag','Checkbox1');
+      value = get(Handle,'Value');
+      if value == 0	
+         temp = 'som_read_data(''';
+         temp = strcat(temp,Name2,''');');
+      else 
+          Handle = findobj(gcbf,'Tag','EditText3');
+          missing = get(Handle,'String');
+          if not(isempty(missing))
+              temp = 'som_read_data(''';
+              temp = strcat(temp,Name2,'''',',','''',missing,''');');
+          else
+	      temp = 'som_read_data(''';
+              temp = strcat(temp,Name2,''');');
+          end   
+      end
+     evalin('base',temp);
+     DATA = evalin('base','ans');
+     name = DATA.name;
+     temp = findstr('/',name);
+     if not(isempty(temp))	
+         name = name(temp(end)+1:end);
+     end
+     name = strrep(name,'.','_');		
+     LOAD_NAME = name;
+     DATA.name = name;	
+   end
+elseif isempty(Name2) & not(isempty(Name1))
+   LOAD_DATA = evalin('base',Name1);
+   if not(isstruct(LOAD_DATA))
+      DATA = som_data_struct(LOAD_DATA);
+      LOAD_NAME = Name1;
+      DATA.name = Name1;
+   else
+      DATA = LOAD_DATA;
+      name = DATA.name;
+      temp = findstr('/',name);
+      if not(isempty(temp))	
+	 name = name(temp(end)+1:end);
+      end
+      name = strrep(name,'.','_');		
+      LOAD_NAME = name;
+      DATA.name = name;
+   end
+else 
+   errmsg = {'Give name of data before loading'};
+   errordlg(errmsg,'Empty data name!');
+   return;
+end
+close(gcbf);			     			
+if not(isempty(MAP))
+   clear MAP;
+   global MAP;
+   str1 = 'Map:  <empty>';
+   str2 = 'Train';
+   Handle = findobj(gcf,'Tag','StaticText3');
+   set(Handle,'String',str1);
+   Handle = findobj(gcf,'Tag','StaticText8');
+   set(Handle,'String',str2);
+end	
+temp =  'Data:';
+temp = strcat(temp,' <',LOAD_NAME,'>');	
+Handle = findobj(gcf,'Tag','StaticText4');
+set(Handle,'String',temp);
+som_gui('def_initialization');
+Handle = findobj(gcf,'Tag','Pushbutton2');
+set(Handle,'Enable','off');
+Handle = findobj(gcf,'Tag','Pushbutton4');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','Pushbutton9');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','Subuimenu2');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','&Help/InfoHelp windowuimenu1');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','&Init&Trainuimenu1');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','&Init&TrainInitialize1');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','Subuimenu1');
+set(Handle,'Enable','off'); %%%%%%????????	
+Handle = findobj(gcf,'Tag','StaticText10');
+set(Handle,'String','Status <data loaded>');	
+ 
+
+
+function [] = input_data()
+global DATA; 
+name = DATA.name;
+newname = strrep(name,'.','_');
+DATA.name = newname;
+temp = strcat('Data:  <',newname,'>');	
+Handle = findobj(gcf,'Tag','StaticText4');
+set(Handle,'String',temp);
+som_gui('def_initialization');
+Handle = findobj(gcf,'Tag','Pushbutton2');
+set(Handle,'Enable','off');
+Handle = findobj(gcf,'Tag','Pushbutton4');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','Pushbutton9');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','Subuimenu2');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','&Help/InfoHelp windowuimenu1');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','&Init&Trainuimenu1');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','&Init&TrainInitialize1');
+set(Handle,'Enable','on');
+Handle = findobj(gcf,'Tag','Subuimenu1');
+set(Handle,'Enable','off'); %%%%%%????????	
+Handle = findobj(gcf,'Tag','StaticText10');
+set(Handle,'String','Status <data loaded>');	
+
+
+function [] = browse()
+global HANDLE2;
+HandleWorkspace = findobj(gcbf,'Tag','Radiobutton2');
+HandleFile = findobj(gcbf,'Tag','Radiobutton1');
+WorkspaceVal = get(HandleWorkspace,'Value');
+FileVal = get(HandleFile,'Value');
+if FileVal == 1
+   Handle = findobj(gcbf,'Tag','PopupMenu1');
+   str = get(Handle,'String');
+   value = get(Handle,'Value');
+   str = str{value};
+   if strcmp(str,'mat file')
+      filtter = '*.mat';
+   else
+      filtter = '*.dat*';
+   end 
+   [filename pathname] = uigetfile(filtter,'Load file.');
+   temp = strcat(pathname,filename);
+   Handle = findobj(gcbf,'Tag','EditText2');
+   set(Handle,'String',temp);
+elseif WorkspaceVal == 1
+   HANDLE2 = gcf;
+   works;
+   temp = evalin('base','who');
+   index2 = 1;
+   names = '';
+   for index = 1:length(temp)
+      if isnumeric(evalin('base',temp{index}))
+	test = size(evalin('base',temp{index}));
+	if test(1) ~= 1 & test(2) ~= 1
+   	   names{index2} = temp{index};	
+	   index2 = index2 + 1;
+	end
+      end
+   end
+   for index = 1:length(temp)
+	variable = evalin('base',temp{index});
+	if isstruct(variable)
+	   fnames = fieldnames(variable);
+	   if size(fnames,1) == 6 & strcmp(fnames(1),'type') & strcmp(variable.type,'som_data')
+	     names{index2} = temp{index};	
+	     index2 = index2 + 1;
+	   end
+	end 
+   end	
+   Handle = findobj(gcf,'Tag','Listbox1');
+   %%%%%% if is empty string#%%%
+   set(Handle,'String',names);
+else
+   errmsg = 'Select browse type: Workspace or file.';
+   errordlg(errmsg,'Browse error!');
+   return;
+end
+
+
+function [] = works_ok()
+global HANDLE2;
+Handle = findobj(gcbf,'Tag','Listbox1');
+temp = get(Handle,'String');
+val = get(Handle,'Value');
+data = temp{val};
+Handle = findobj(HANDLE2,'Tag','EditText1');
+set(Handle,'String',data);
+close;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     END OF LOAD SECTION	%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     START OF INITIALIZATION	%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+function [] = def_initialization()
+global DATA STOPOLINIT INIT_TYPE;
+sTopol = som_topol_struct('data',DATA);
+Handle = findobj(gcf,'Tag','StaticText5');
+temp = num2str(sTopol.msize);
+temp = strcat('map size:',' [',temp,']');
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText6');
+set(Handle,'String','type: linear');
+Handle = findobj(gcf,'Tag','StaticText20');
+temp = strcat('lattice:',sTopol.lattice);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText21');
+temp = strcat('shape:',sTopol.shape);
+set(Handle,'String',temp);
+STOPOLINIT = sTopol;
+INIT_TYPE = 'linear';
+
+function [] = change_initialization()
+global INIT_TYPE STOPOLINIT; 
+initialization2;
+Handle = findobj(gcf,'Tag','PopupMenu1');
+temp = get(Handle,'String');
+val = loop(temp,INIT_TYPE);
+set(Handle,'Value',val);
+Handle = findobj(gcf,'Tag','PopupMenu2');
+temp = get(Handle,'String');
+val = loop(temp,STOPOLINIT.lattice);
+set(Handle,'Value',val);
+Handle = findobj(gcf,'Tag','PopupMenu3');
+temp = get(Handle,'String');
+val = loop(temp,STOPOLINIT.shape);
+set(Handle,'Value',val);
+Handle = findobj(gcf,'Tag','EditText1');
+temp = num2str(STOPOLINIT.msize);
+msize = strcat('[',temp,']');
+set(Handle,'String',msize);
+
+function [] = change_initialization_ok()
+Handle = findobj(gcbf,'Tag','PopupMenu1');
+temp = get(Handle,'String');
+val = get(Handle,'Value');
+INIT_TYPE = temp{val};
+Handle = findobj(gcbf,'Tag','PopupMenu2');
+temp = get(Handle,'String');
+val = get(Handle,'Value');
+lattice = temp{val};
+Handle = findobj(gcbf,'Tag','PopupMenu3');
+temp = get(Handle,'String');
+val = get(Handle,'Value');
+shape = temp{val};
+Handle = findobj(gcbf,'Tag','EditText1');
+temp = get(Handle,'String');
+msize = str2num(temp);
+STOPOLINIT = som_set('som_topol','msize',msize,'lattice',lattice,'shape',shape);
+close(gcf);
+Handle = findobj(gcf,'Tag','StaticText5');
+temp = num2str(STOPOLINIT.msize);
+temp = strcat('map size:',' [',temp,']');
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText6');
+temp = strcat('type:',INIT_TYPE);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText20');
+temp = strcat('lattice:',STOPOLINIT.lattice);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText21');
+temp = strcat('shape:',STOPOLINIT.shape);
+set(Handle,'String',temp);
+
+
+function [] = def_values_others()
+global SOTHERS;
+Handle = findobj(gcf,'Tag','StaticText19');
+temp = strcat('tracking:',SOTHERS.tracking);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText12');
+temp = strcat('order:',SOTHERS.oder);
+set(Handle,'String',temp); 
+Handle = findobj(gcf,'Tag','StaticText14');
+temp = strcat('length_type:',SOTHERS.length_type);
+set(Handle,'String',temp);
+
+
+
+function [] = fill_fields()
+global STRAIN1 STRAIN2 ALGORITHM
+
+neigh = STRAIN1.neigh;
+mask = STRAIN1.mask;
+rad_ini1 = STRAIN1.radius_ini;
+rad_ini2 = STRAIN2.radius_ini;
+rad_fin1 = STRAIN1.radius_fin;
+rad_fin2 = STRAIN2.radius_fin;
+trainlen1 = num2str(STRAIN1.trainlen);
+trainlen2 = num2str(STRAIN2.trainlen);
+alpha_ini1 = num2str(STRAIN1.alpha_ini);
+alpha_ini2 = num2str(STRAIN2.alpha_ini);
+if strcmp(ALGORITHM,'seq')
+        alpha_type = STRAIN1.alpha_type; %%% only in sequential
+        Handle = findobj(gcf,'Tag','StaticText28');
+        temp = strcat('alpha type:',alpha_type);
+        set(Handle,'String',temp);
+end
+Handle = findobj(gcf,'Tag','StaticText11');
+temp = strcat('neigh: ',neigh);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText22');
+temp = num2str(rad_fin1);
+temp = strcat('radius final:',temp);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText25');
+temp = num2str(rad_fin2);
+temp = strcat('radius final:',temp);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText11');
+temp = strcat('neigh: ',neigh);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText17');
+temp = num2str(rad_ini1);
+temp = strcat('radius initial:',temp);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText24');
+temp = num2str(rad_ini2);
+temp = strcat('radius initial:',temp);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText16');
+temp = num2str(trainlen1);
+temp = strcat('training length:',temp);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText23');
+temp = num2str(trainlen2);
+temp = strcat('training length:',temp);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText26');
+temp = strcat('alpha initial:',alpha_ini1);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText27');
+temp = strcat('alpha initial:',alpha_ini2);
+set(Handle,'String',temp);
+
+
+function [] = init();
+global INIT_TYPE MAP NEWMAP ALGORITHM SOTHERS DATA STOPOLINIT;
+if strcmp(INIT_TYPE,'random')
+   MAP = som_randinit(DATA,STOPOLINIT);
+else 
+   MAP = som_lininit(DATA,STOPOLINIT);
+end
+NEWMAP = MAP;	
+temp = 'Map:';
+temp = strcat(temp,' <',MAP.name,'>');
+Handle = findobj(gcbf,'Tag','StaticText3');
+set(Handle,'String',temp);
+Handle = findobj(gcbf,'Tag','StaticText10');
+set(Handle,'String','Status <map initialized>');
+ALGORITHM = 'batch';
+Handle = findobj(gcbf,'Tag','Pushbutton4');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','Pushbutton6');
+set(Handle,'Enable','on');
+Handle = findobj(gcbf,'Tag','Pushbutton5');
+set(Handle,'Enable','on');		
+SOTHERS.tracking = '1';
+SOTHERS.length_type = 'epochs';
+SOTHERS.oder = 'random';			
+som_gui('def_values_topol');
+som_gui('def_values_train');
+som_gui('def_values_others');
+som_gui('fill_fields');
+Handle = findobj(gcbf,'Tag','Pushbutton4');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','Pushbutton9');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','Radiobutton1');
+set(Handle,'Enable','on');
+Handle = findobj(gcbf,'Tag','&Init&TrainChange initialization valuesuimenu1');
+set(Handle,'Enable','on');
+Handle = findobj(gcbf,'Tag','&Init&TrainTrain1');
+set(Handle,'Enable','on');
+Handle = findobj(gcbf,'Tag','&Help/InfoData infouimenu1');
+set(Handle,'Enable','on');	
+Handle = findobj(gcbf,'Tag','Subuimenu2');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','&Init&Trainuimenu1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','&Init&TrainInitialize1');
+set(Handle,'Enable','off');  %%%%%%%%%%%??????????			
+Handle = findobj(gcbf,'Tag','StaticText9');
+set(Handle,'String','training type: batch');	
+
+
+
+function [] = set_batch_mask()
+Handle = findobj(gcbf,'Tag','Listbox2');
+temp = get(Handle,'String');
+mask = str2num(temp);
+Handle = findobj(gcbf,'Tag','Listbox1');
+replace = get(Handle,'Value');
+Handle = findobj(gcbf,'Tag','EditText2');
+temp = get(Handle,'String');
+value = str2num(temp);
+if not(isempty(value))
+  mask(replace) = value;
+  Handle = findobj(gcbf,'Tag','Listbox2');
+  temp = num2str(mask);
+  set(Handle,'String',temp);
+end
+
+function [] = munits()
+global DATA STOPOLINIT;
+msgs = {'Correct map units is number';'Correct map units is number'};
+[msgs_nro, value] = check_ok('EditText2');
+if msgs_nro > 0
+   errordlg({msgs{msgs_nro}},'Incorrect map units!')
+   return;
+end
+STOPOLINIT = som_topol_struct('munits',value,'data',DATA);
+Handle = findobj(gcbf,'Tag','EditText1');
+temp = num2str(STOPOLINIT.msize);
+msize = strcat('[',temp,']');
+set(Handle,'String',msize);
+
+function [] = map_size()
+ global STOPOLINIT;
+ msgs = {'Map size must be in form [x y]';...
+		'Map size must be in form [x y]'};
+ [msgs_nro, value, Handle] = msize_ok('EditText1');
+ if msgs_nro > 0
+   errordlg({msgs{msgs_nro}},'Incorrect map size!');
+   temp = num2str(STOPOLINIT.msize);
+   temp = strcat('[',temp,']');
+   set(Handle,'String',temp);	
+   return;
+ end
+ STOPOLINIT.msize = value;
+ Handle = findobj(gcbf,'Tag','EditText2');
+ set(Handle,'String','');
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     END OF INITIALIZATION	%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     START OF TRAINING		%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+
+function  [] = def_train()
+global SOTHERS ALGORITHM MAP NEWST DATA STRAIN1 STRAIN2 MAPSAVED;
+tlen_type = SOTHERS.length_type;
+sample_order = SOTHERS.oder;	
+tracking = SOTHERS.tracking;
+test = str2num(tracking);
+Handle = findobj(gcbf,'Tag','Radiobutton1');
+tempval = get(Handle,'Value');
+if strcmp(ALGORITHM,'seq')
+    if tempval ~= 1
+       [MAP NEWST] = som_seqtrain(MAP,DATA,'train',STRAIN1,tlen_type,sample_order);
+    end
+    if test > 1
+	figure;
+	set(gcf,'Name',MAP.name);
+	 set(gcf,'NumberTitle','off');
+    end
+    [NEWMAP NEWST] = som_seqtrain(MAP,DATA,'train',STRAIN2,'tracking',test,tlen_type,sample_order); 
+else
+    if tempval ~= 1
+       [MAP NEWST] = som_batchtrain(MAP,DATA,'train',STRAIN1);
+    end
+    if test > 1
+       figure;
+       set(gcf,'Name',MAP.name);
+       set(gcf,'NumberTitle','off');
+    end
+        [NEWMAP NEWST] = som_batchtrain(MAP,DATA,'train',STRAIN2,'tracking',test);
+end
+MAP = NEWMAP;
+clear MAPSAVED;	
+Handle = findobj(gcbf,'Tag','StaticText10');
+set(Handle,'String','Status <map trained>');
+Handle = findobj(gcbf,'Tag','Load/SaveSubuimenu1');
+set(Handle,'Enable','on');		
+Handle = findobj(gcbf,'Tag','Load/SaveSave mapuimenu1');
+set(Handle,'Enable','on');	 
+Handle = findobj(gcbf,'Tag','&Load/SaveSave mapSave in workspaceuimenu1');
+set(Handle,'Enable','on');
+Handle = findobj(gcbf,'Tag','&ToolsSubuimenu1');
+set(Handle,'Enable','on');
+Handle = findobj(gcbf,'Tag','&Init&TrainChange initialization valuesuimenu1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','&Init&TrainTrain1');
+set(Handle,'Enable','off');		
+
+
+function [] = change_def()
+global ALGORITHM STRAIN1 DATA; 
+
+ButtonName = questdlg('Select training type!',...
+	'Change values.',...
+	'Batch','Sequential','Cancel',...
+        'Batch');	
+if strcmp(ButtonName,'Sequential')
+   Handle = findobj(gcbf,'Visible','off');
+   set(Handle,'Visible','on');
+   ALGORITHM = 'seq';
+   Handle = findobj(gcf,'Tag','StaticText9');
+   set(Handle,'String','training type: sequential');
+   new_para2_2;
+   Handle = findobj(gcf,'Tag','StaticText1');
+   set(Handle,'String','Change parameters for sequential training');
+   Handle = findobj(gcf,'Enable','off');
+   set(Handle,'Enable','on');
+   Handle = findobj(gcf,'Visible','off');
+   set(Handle,'Visible','on');
+elseif strcmp(ButtonName,'Batch')
+   ALGORITHM = 'batch';
+   Handle = findobj(gcbf,'Tag','StaticText26');
+   set(Handle,'Visible','off');
+   Handle = findobj(gcbf,'Tag','StaticText27');
+   set(Handle,'Visible','off');
+   Handle = findobj(gcf,'Tag','StaticText9');
+   set(Handle,'String','training type: batch');
+   Handle = findobj(gcf,'Tag','StaticText12');
+   set(Handle,'Visible','off');
+   Handle = findobj(gcf,'Tag','StaticText28');
+   set(Handle,'Visible','off');
+   Handle = findobj(gcf,'Tag','StaticText14');
+   set(Handle,'Visible','off');
+   new_para2_2;	
+   Handle = findobj(gcf,'Tag','StaticText1');
+   set(Handle,'String','Change parameters for batch training');
+   Handle = findobj(gcf,'Tag','PopupMenu3');
+   set(Handle,'Enable','off');
+   set(Handle,'Visible','off');
+   Handle = findobj(gcf,'Tag','PopupMenu4');
+   set(Handle,'Enable','off');
+   set(Handle,'Visible','off');
+   Handle = findobj(gcf,'Tag','PopupMenu5');
+   set(Handle,'Enable','off');
+   set(Handle,'Visible','off');
+   Handle = findobj(gcf,'Tag','StaticText17');
+   set(Handle,'Visible','off');
+   Handle = findobj(gcf,'Tag','StaticText18');
+   set(Handle,'Visible','off');
+   Handle = findobj(gcf,'Tag','StaticText19');
+   set(Handle,'Visible','off');
+   Handle = findobj(gcf,'Tag','StaticText13');
+   set(Handle,'Visible','off'); 
+   Handle = findobj(gcf,'Tag','StaticText14');
+   set(Handle,'Visible','off');
+   Handle = findobj(gcf,'Tag','EditText6');
+   set(Handle,'Visible','off');
+   set(Handle,'Enable','off');
+   Handle = findobj(gcf,'Tag','EditText10');
+   set(Handle,'Visible','off');
+   set(Handle,'Enable','off');    
+else 
+   return;	
+end
+som_gui('def_values_train');	
+mask = STRAIN1.mask;
+Handle = findobj(gcf,'Tag','Listbox1');
+set(Handle,'String',DATA.comp_names);
+som_gui('fill_new_defaults');
+
+
+function [] = fill_new_defaults()
+global STRAIN1 STRAIN2 SOTHERS ALGORITHM;
+
+Handle = findobj(gcf,'Tag','EditText4');
+temp = num2str(STRAIN1.radius_ini);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','EditText8');
+temp = num2str(STRAIN2.radius_ini);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','EditText5');
+temp = num2str(STRAIN1.radius_fin);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','EditText9');
+temp = num2str(STRAIN2.radius_fin);
+set(Handle,'String',temp);	
+Handle = findobj(gcf,'Tag','EditText6');
+temp = num2str(STRAIN1.alpha_ini);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','EditText10');
+temp = num2str(STRAIN2.alpha_ini);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','EditText7');
+temp = num2str(STRAIN1.trainlen);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','EditText11');
+temp = num2str(STRAIN2.trainlen);
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','Listbox2');
+temp = num2str(STRAIN1.mask');
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','PopupMenu2');
+string = get(Handle,'String');
+val = loop(string,SOTHERS.tracking);
+set(Handle,'Value',val);
+Handle = findobj(gcf,'Tag','PopupMenu1');
+string = get(Handle,'String');
+val = loop(string,STRAIN1.neigh);
+set(Handle,'Value',val);
+if strcmp(ALGORITHM,'seq')
+   Handle = findobj(gcf,'Tag','PopupMenu3');
+   string = get(Handle,'String');
+   val = loop(string,SOTHERS.length_type);
+   set(Handle,'Value',val);
+   Handle = findobj(gcf,'Tag','PopupMenu4');
+   string = get(Handle,'String');
+   val = loop(string,SOTHERS.oder);
+   set(Handle,'Value',val);
+   Handle = findobj(gcf,'Tag','PopupMenu5');
+   string = get(Handle,'String');
+   val = loop(string,STRAIN1.alpha_type);
+   set(Handle,'Value',val);
+end			
+
+
+
+function [] = set_new_parameters()
+global STRAIN1 STRAIN2 ALGORITHM SOTHERS; 
+
+Handle = findobj(gcbf,'Tag','Listbox2');
+temp = get(Handle,'String');
+mask = str2num(temp); %%%%%%%%%%%%% Do somthing
+mask = mask';
+Handle = findobj(gcbf,'Tag','PopupMenu1');
+temp = get(Handle,'String');
+val = get(Handle,'Value');
+neigh = temp{val};
+Handle = findobj(gcbf,'Tag','PopupMenu2');
+temp = get(Handle,'String');
+val = get(Handle,'Value');
+SOTHERS.tracking = temp{val};  %%%%% finetune phase!
+Handle = findobj(gcbf,'Tag','EditText4');
+temp = get(Handle,'String');
+rad_ini1 = str2num(temp);
+Handle = findobj(gcbf,'Tag','EditText8');
+temp = get(Handle,'String');
+rad_ini2 = str2num(temp);
+Handle = findobj(gcbf,'Tag','EditText5');
+temp = get(Handle,'String');
+rad_fin1 = str2num(temp);
+Handle = findobj(gcbf,'Tag','EditText9');
+temp = get(Handle,'String');
+rad_fin2 = str2num(temp);
+Handle = findobj(gcbf,'Tag','EditText6');
+temp = get(Handle,'String');
+alpha_ini1 = str2num(temp);
+Handle = findobj(gcbf,'Tag','EditText10');
+temp = get(Handle,'String');
+alpha_ini2 = str2num(temp);
+Handle = findobj(gcbf,'Tag','EditText7');
+temp = get(Handle,'String');
+train_length1 = str2num(temp);
+Handle = findobj(gcbf,'Tag','EditText11');
+temp = get(Handle,'String');
+train_length2 = str2num(temp);
+if strcmp(ALGORITHM,'seq')
+   Handle = findobj(gcbf,'Tag','PopupMenu3');
+   temp = get(Handle,'String');
+   val = get(Handle,'Value');
+   SOTHERS.length_type = temp{val};
+   Handle = findobj(gcbf,'Tag','PopupMenu4');
+   temp = get(Handle,'String');
+   val = get(Handle,'Value');
+   SOTHERS.oder= temp{val};
+   Handle = findobj(gcbf,'Tag','PopupMenu5');
+   temp = get(Handle,'String');
+   val = get(Handle,'Value');
+   alpha_type = temp{val};
+else 
+   alpha_type = 'inv';
+end
+STRAIN1.neigh = neigh;
+STRAIN2.neigh = neigh;
+STRAIN1.mask = mask;
+STRAIN2.mask = mask;
+STRAIN1.radius_ini = rad_ini1;
+STRAIN2.radius_ini = rad_ini2;
+STRAIN1.radius_fin = rad_fin1;
+STRAIN2.radius_fin = rad_fin2;
+STRAIN1.alpha_ini = alpha_ini1;
+STRAIN2.alpha_ini = alpha_ini2;
+STRAIN1.alpha_type = alpha_type;
+STRAIN2.alpha_type = alpha_type;
+STRAIN1.trainlen = train_length1;
+STRAIN2.trainlen = train_length2;
+close(gcbf);
+som_gui('fill_fields');
+som_gui('def_values_others');
+
+function [] = only_finetune()
+
+Handle = findobj(gcbf,'Tag','Radiobutton1');
+test = get(Handle,'Value');
+if test == 1
+   Handle = findobj(gcbf,'Tag','StaticText16');
+   set(Handle,'Enable','off');
+   Handle = findobj(gcbf,'Tag','StaticText17');
+   set(Handle,'Enable','off');
+   Handle = findobj(gcbf,'Tag','StaticText22');
+   set(Handle,'Enable','off');
+   Handle = findobj(gcbf,'Tag','StaticText26');
+   set(Handle,'Enable','off');
+else 
+   Handle = findobj(gcbf,'Tag','StaticText16');
+   set(Handle,'Enable','on');
+   Handle = findobj(gcbf,'Tag','StaticText17');
+   set(Handle,'Enable','on');
+   Handle = findobj(gcbf,'Tag','StaticText22');
+   set(Handle,'Enable','on');
+   Handle = findobj(gcbf,'Tag','StaticText26');
+   set(Handle,'Enable','on');
+end
+
+
+function [] = check_rough_radini()
+global STRAIN1;
+msgs = {'Initial radius must be number!';...
+        'Initial radius must be single valued number!'};
+[msgs_nro, value, Handle] = check_ok('EditText4');
+if msgs_nro > 0
+   errordlg({msgs{msgs_nro}},'Incorrect initial radius!')
+   temp = num2str(STRAIN1.radius_ini);
+   set(Handle,'String',temp);
+   return;
+end
+
+
+function [] = check_fine_radini()
+global STRAIN2;
+msgs = {'Initial radius must be number!';...
+        'Initial radius must be single valued number!'};
+[msgs_nro, value, Handle] = check_ok('EditText8');
+if msgs_nro > 0
+   errordlg({msgs{msgs_nro}},'Incorrect initial radius!')
+   temp = num2str(STRAIN2.radius_ini);
+   set(Handle,'String',temp);
+   return;
+end
+
+function [] = check_rough_radfin()
+global STRAIN1;
+msgs = {'Final radius must be number!';...
+	'Final radius must be single valued number!'};
+[msgs_nro, value, Handle] = check_ok('EditText5');
+if msgs_nro > 0
+   errordlg({msgs{msgs_nro}},'Incorrect final radius!')
+   temp = num2str(STRAIN1.radius_fin);
+   set(Handle,'String',temp);
+   return;
+end
+
+function [] = check_fine_radfin()
+global STRAIN2;
+msgs = {'Final radius must be number!';...
+	'Final radius must be single valued number!'};
+[msgs_nro, value, Handle] = check_ok('EditText9');
+if msgs_nro > 0
+   errordlg({msgs{msgs_nro}},'Incorrect final radius!')
+   temp = num2str(STRAIN2.radius_fin);
+   set(Handle,'String',temp);
+   return;
+end
+
+function [] = check_rough_alphaini()
+global STRAIN1;	
+msgs = {'Alpha initial must be number!';...
+	'Alpha initial must be single valued number!'};
+[msgs_nro, value, Handle] = check_ok('EditText6');
+if msgs_nro > 0
+   errordlg({msgs{msgs_nro}},'Incorrect initial alpha!')
+   temp = num2str(STRAIN1.alpha_ini);
+   set(Handle,'String',temp);
+   return;
+end
+
+function [] = check_fine_alphaini()
+global STRAIN2;
+msgs = {'Alpha initial must be number!';...
+	'Alpha initial must be single valued number!'};
+[msgs_nro, value, Handle] = check_ok('EditText10');
+if msgs_nro > 0
+   errordlg({msgs{msgs_nro}},'Incorrect initial alpha!')
+   temp = num2str(STRAIN2.alpha_ini);
+   set(Handle,'String',temp);
+   return;
+end
+
+function [] = check_rough_trainlen()
+global STRAIN1;
+msgs = {'Training length must be number!';...
+	'Training length must be single valued number!'};
+[msgs_nro, value, Handle] = check_ok('EditText7');
+if msgs_nro > 0
+   errordlg({msgs{msgs_nro}},'Incorrect training length!')
+   temp = num2str(STRAIN1.trainlen);
+   set(Handle,'String',temp);
+   return;
+end
+
+function [] = check_fine_trainlen()
+global STRAIN2;
+
+msgs = {'Training length must be number!';...
+	'Training length must be single valued number!'};
+[msgs_nro, value, Handle] = check_ok('EditText11');
+if msgs_nro > 0
+   errordlg({msgs{msgs_nro}},'Incorrect training length!')
+   temp = num2str(STRAIN2.trainlen);
+   set(Handle,'String',temp);
+   return;
+end	
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     END OF TRAINING		%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     START OF SAVING		%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+
+function [] = savemap()
+global MAP MAPSAVED;
+if isempty(MAP)
+  str = {'There is no map to be saved! Train map before saving.'};
+  helpdlg(str,'Empty map!');	
+  return;
+end
+[FileName Path] = uiputfile('*.cod','Save file!');
+if FileName ~= 0
+   temp = strcat(Path,FileName);
+   som_write_cod(MAP,temp);
+   MAPSAVED = 'SAVED';
+end
+Handle = findobj(gcf,'Tag','StaticText10');
+set(Handle,'String','Status <map saved>');	 
+
+function [] = save_workspace()
+global MAP MAPSAVED;
+if isempty(MAP)
+   str = {'There is no map to be saved! Train map before saving.'};
+   helpdlg(str,'Empty map!');
+   return;
+else
+   prompt = {'Save map as?'};
+   title = 'Save map!';
+   lineNo = 1;
+   answer = inputdlg(prompt,title,lineNo);
+   if isempty(answer)
+      return;
+   end
+   if not(isempty(answer{1}))
+      ws_variable = evalin('base','who');
+      max_length = 0;
+      for index = 1:size(ws_variable,1)
+         if max_length < size(ws_variable{index},2)
+	    max_length = size(ws_variable{index},2);
+         end
+      end
+      length = max_length + 1;
+      tempfoo(1:1:length) = 'A'; 
+      assignin('base',tempfoo,answer{1});
+      str = ['exist(' tempfoo ')'];	
+      temp = evalin('base',str); %%%%%%%%%%@@@@@@@@@
+      evalin('base',['clear ' tempfoo ]) 
+      if temp == 0
+         assignin('base',answer{1},MAP);
+         MAPSAVED = 'SAVED';
+      elseif temp ~= 0
+         Questmsg = strcat('Variable',' ''',answer{1},'''',...
+         ' exist. Overwrite?');
+         ButtonName = questdlg(Questmsg);
+         switch(ButtonName)
+         case 'Yes'
+            assignin('base',answer{1},MAP);
+            MAPSAVED = 'SAVED';
+         case 'No' 
+             som_gui('save_workspace');		
+         end
+     end	
+   else
+      helpmsg = {'There cannot be any empty field in ''save'''};
+      helpdlg(helpmsg,'Help Save!');
+      som_gui('save'); 
+   end
+end
+Handle = findobj(gcf,'Tag','StaticText10');
+set(Handle,'String','Status <map saved>');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     END OF SAVING		%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     START OF HELP & INFO	%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+%HEREXX
+
+function [] = data_info()
+global DATA;
+if isempty(DATA)
+   helpmsg = 'Load data first!';
+   helpdlg(helpmsg,'Empty data!');
+   return;
+end
+file_name = tempname;
+file_name = strcat(file_name,'.m');
+fid = fopen(file_name,'w');
+fprintf(fid,'%% %+35s\n','DATA INFO');
+fprintf(fid,'%%\n');
+print_info(DATA,2,fid);
+directory = tempdir;
+addpath (directory);
+helpwin (file_name);
+fclose(fid);
+delete(file_name);
+rmpath (directory);
+
+
+function [] = map_info()
+global MAP;
+if isempty(MAP)
+   helpmsg = 'There is no map!';
+   helpdlg(helpmsg,'Empty map!');
+   return;
+end
+file_name = tempname;
+file_name = strcat(file_name,'.m');
+fid = fopen(file_name,'w');
+fprintf(fid,'%% %+35s\n','MAP INFO');
+fprintf(fid,'%%\n');
+print_info(MAP,2,fid);
+directory = tempdir;
+addpath (directory);
+helpwin (file_name);
+fclose(fid);
+delete(file_name);
+rmpath (directory); 
+
+
+function [] = helpwin1()
+file1 = tempname;
+file1 = strcat(file1,'.m');
+directory = tempdir;	
+html2tex('file:///share/somtoolbox/vs2/html/som_GUI.html',file1);
+addpath (directory);
+helpwin (file1);
+rmpath (directory);
+delete (file1);		
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     END OF HELP & INFO	%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     START OF OTHER FUNC	%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+
+
+function [msgs_nro, value, Handle] = check_ok(Tag)
+Handle = findobj(gcbf,'Tag',Tag);
+temp = get(Handle,'String');
+value = str2num(temp);
+if isempty(value)
+   msgs_nro = 1;
+   return;
+end
+[test1 test2] = size(value);
+if test1 ~= 1 | test2 ~= 1
+   msgs_nro = 2;	  
+   return; 
+end
+msgs_nro = 0;	
+
+
+function [msgs_nro, value, Handle] = msize_ok(Tag)
+Handle = findobj(gcbf,'Tag',Tag);
+temp = get(Handle,'String');
+value = str2num(temp);
+if isempty(value)
+   msgs_nro = 1;
+   return;
+end
+[test1 test2] = size(value);
+if test1 ~= 1 | test2 ~= 2
+   msgs_nro = 2;	  
+   return; 
+end
+msgs_nro = 0;
+
+
+%%% Changed 1.2.2000
+
+function [] = visualize()
+global MAP;
+if isempty(MAP)
+   helpmsg = {'Train map before tryinig to visualize it!'};
+   helpdlg(helpmsg,'Empty Map!');
+   return;
+end
+
+dim = size(MAP.codebook,2);
+odim = 2;
+[P,V] = pcaproj(MAP.codebook,odim);
+ccode = som_colorcode(MAP, 'rgb1');
+
+figure; 
+som_show(MAP,'umat','all','comp',1:dim,'norm','d');  
+figure;
+subplot(1,2,1) 
+som_grid(MAP,'Coord',P,'MarkerColor',ccode,'Markersize',5, ...
+	 'Linewidth',1,'Linecolor','k');
+xlabel('PC1'), ylabel('PC2')
+title('PCA-projection (on the left), color coding (on the right)')
+axis tight, axis equal
+subplot(1,2,2) 
+som_cplane(MAP.topol.lattice,MAP.topol.msize,ccode);
+
+%msgbox('Save map in workspace. Load it from there.');
+%som_gui('save_workspace');  
+%som_comp_vis;
+
+%%%%%%%%%%%%%%%%
+
+
+function [] = clear_all()
+
+Handle = findobj(gcbf,'Enable','off');
+set(Handle,'Enable','on');
+Handle = findobj(gcbf,'Tag','Radiobutton1');
+set(Handle,'Value',0);
+Handle = findobj(gcbf,'Tag','StaticText10');
+set(Handle,'String','Status <no action>');
+Handle = findobj(gcbf,'Tag','StaticText3');
+set(Handle,'String','Map: <empty>');
+Handle = findobj(gcbf,'Tag','StaticText4');
+set(Handle,'String','Data: <empty>');
+Handle = findobj(gcbf,'Tag','StaticText20');
+set(Handle,'String','lattice:');
+Handle = findobj(gcbf,'Tag','StaticText11');
+set(Handle,'String','neigh:');
+Handle = findobj(gcbf,'Tag','StaticText16');
+set(Handle,'String','training length:');
+Handle = findobj(gcbf,'Tag','StaticText23');
+set(Handle,'String','training length:');
+Handle = findobj(gcbf,'Tag','StaticText17');
+set(Handle,'String','radius initial:');
+Handle = findobj(gcbf,'Tag','StaticText24');
+set(Handle,'String','radius initial:');
+Handle = findobj(gcbf,'Tag','StaticText5');
+set(Handle,'String','map size:');
+Handle = findobj(gcbf,'Tag','StaticText21');
+set(Handle,'String','shape:');
+Handle = findobj(gcbf,'Tag','StaticText12');
+set(Handle,'String','order:');
+set(Handle,'Visible','off');
+Handle = findobj(gcbf,'Tag','StaticText14');
+set(Handle,'String','length type:');
+set(Handle,'Visible','off');
+Handle = findobj(gcbf,'Tag','StaticText22');
+set(Handle,'String','radius final:');
+Handle = findobj(gcbf,'Tag','StaticText25');
+set(Handle,'String','radius final:');
+Handle = findobj(gcbf,'Tag','StaticText19');
+set(Handle,'String','tracking:');
+Handle = findobj(gcbf,'Tag','StaticText7');
+set(Handle,'String','Initialization');
+Handle = findobj(gcbf,'Tag','StaticText28');
+set(Handle,'String','alpha type:');
+set(Handle,'Visible','off');
+Handle = findobj(gcbf,'Tag','StaticText26');
+set(Handle,'String','alpha initial:');
+Handle = findobj(gcbf,'Tag','StaticText27');
+set(Handle,'String','alpha initial:');
+Handle = findobj(gcbf,'Tag','StaticText6');
+set(Handle,'String','type:');
+Handle = findobj(gcbf,'Tag','StaticText9');
+set(Handle,'String','training type:');
+Handle = findobj(gcbf,'Tag','Pushbutton9');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','Pushbutton6');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','Pushbutton4');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','Pushbutton5');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','Pushbutton2');
+set(Handle,'Enable','on');
+Handle = findobj(gcbf,'Tag','Radiobutton1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','Load/SaveSave mapuimenu1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','&Load/SaveSave mapSave in workspaceuimenu1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','Subuimenu2');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','&ToolsSubuimenu1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','&Help/InfoHelp windowuimenu1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','&Help/InfoData infouimenu1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','&Init&Trainuimenu1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','&Init&TrainInitialize1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','&Init&TrainChange initialization valuesuimenu1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','&Init&TrainTrain1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'Tag','Load/SaveSubuimenu1');
+set(Handle,'Enable','off');
+Handle = findobj(gcbf,'String','alpha initial:');
+set(Handle,'Visible','off');
+clear;
+clear global;
+
+
+function [] = close_fig()
+global MAPSAVED NEWMAP;
+if isempty(MAPSAVED)
+  if not(isempty(NEWMAP))
+     quest = 'Save map before closing?';
+     ButtonName = questdlg(quest);
+     switch ButtonName
+        case 'Yes'
+	  som_gui('savemap');		
+	  som_gui('clear');
+	  clear global;
+	  close(gcbf);
+	 case 'No'
+	   som_gui('clear');	
+	   clear global;
+	   close(gcbf);
+	 case 'Cancel'
+      end
+  else
+     som_gui('clear');
+     clear global;
+     close(gcbf);	
+  end	
+else
+  som_gui('clear');
+  clear global;
+  close(gcbf);
+end
+
+
+function [] = preprocess_gui()
+global DATA; 
+if isempty(DATA)
+   helpmsg = {'Load data before tryinig to preprocess!'};
+   helpdlg(helpmsg,'Empty Data!');
+   return;
+end
+preprocess(DATA);
+waitfor(gcf);
+prompt = {'Name of preprocessed data in workspace?'};
+tittle = 'Reload preprocessed data!';
+lineNo = 1;
+def = {DATA.name};
+answer = inputdlg(prompt,tittle,lineNo,def);
+if isempty(answer)
+  return;
+end
+data = answer{1};
+new_name = retname;
+assignin('base',new_name,data);
+str = ['exist(' new_name ')'];	
+temp = evalin('base',str); 
+if temp ~= 1
+ temp = strcat('Variable ''',data,''' doesn''t exist in workspace.',...
+	'Old Data which is not preprocessed will be used.');
+  errordlg(temp,'Unknown variable!');
+  return;
+end
+evalin('base',['clear ' new_name ]) 
+Handle = findobj(gcf,'Tag','StaticText4');
+temp = strcat('Data: <',data,'>');
+set(Handle,'String',temp);
+Handle = findobj(gcf,'Tag','StaticText10');
+set(Handle,'String','Status <data preprocessed>');
+temp = evalin('base',data);
+DATA.data = temp;
+som_gui('def_initialization');
+
+
+function [val] = loop(cell_data, search_data)
+for val = 1: length(cell_data) 
+  if strcmp(cell_data{val},search_data)
+    break;
+  end
+end
+if not(strcmp(cell_data{val},search_data))
+  val = -1;
+end
+
+
+function [] = comp_names(names,fid)
+last = size(names);
+for index=1:last
+	fprintf(fid,'%% %s\n',names{index})
+end	
+
+function [] = fill_field(names,mask,fid)
+last = size(mask);
+for index=1:last
+	num = num2str(mask(index))
+	fprintf(fid,'%% %-15s %-2s\n',names{index},num)
+end	
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%     END OF OTHER FUNC		%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%				%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	
+
+
+      
+
+function fig = main_gui()
+
+v = version;
+ver_53_or_newer = (str2num(v(1:3)) >= 5.3);
+
+h0 = figure('Units','normalized', ...
+	'Color',[0.85 0.85 0.85], ...
+	'Name','SOM Toolbox -- Initialization & Training', ...
+	'NumberTitle','off', ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperUnits','points', ...
+	'Position',[0.3296875 0.28125 0.3828125 0.576171875], ...
+	'Tag','Fig1'); 
+if ver_53_or_newer, set(h0,'ToolBar','none'); end
+
+h1 = uimenu('Parent',h0, ...
+	'Label','&Load/Save', ...
+	'Tag','uimenu1');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''load_data'');',...
+	'Label','Load Data', ...
+	'Tag','Subuimenu1');
+h2 = uimenu('Parent',h1, ...
+	'Label','Save map', ...
+	'Enable','off',...
+	'Tag','Load/SaveSubuimenu1');
+h3 = uimenu('Parent',h2, ...
+	'Callback','som_gui(''save_workspace'');', ...
+	'Enable','off', ...
+	'Label','Save in workspace', ...
+	'Tag','Load/SaveSave mapuimenu1');
+h3 = uimenu('Parent',h2, ...
+	'Callback','som_gui(''savemap'');', ...
+	'Enable','off', ...
+	'Label','Write cod-file', ...
+	'Tag','&Load/SaveSave mapSave in workspaceuimenu1');
+h1 = uimenu('Parent',h0, ...
+	'Label','&Utilities', ...
+	'Tag','uimenu2');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''preprocess'');', ...
+	'Enable','off', ...
+	'Label','Preprocess Data', ...
+	'Tag','Subuimenu2');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''visualize'');', ...
+	'Enable','off', ...
+	'Label','Visualize Map', ...
+	'Tag','&ToolsSubuimenu1');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''clear_all'');', ...
+	'Label','Clear all', ...
+	'Tag','&ToolsSubuimenu2');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''close'');', ...
+	'Label','Close Figure', ...
+	'Tag','&ToolsClear alluimenu1');
+h1 = uimenu('Parent',h0, ...
+	'Label','&Info', ...
+	'Tag','&ToolsClose Figureuimenu1');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''help'');', ...
+	'Label','WWW Help', ...
+	'Tag','Helpuimenu1');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''helpwin'');', ...
+	'Label','Help window', ...
+	'Tag','Helpuimenu2');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''helpwin2'');', ...
+	'Label','About GUI', ...
+	'Tag','&Help/InfoHelp windowuimenu2');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''data_info'');', ...
+	'Enable','off', ...
+	'Label','Data info', ...
+	'Tag','&Help/InfoHelp windowuimenu1');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''map_info'');', ...
+	'Enable','off', ...
+	'Label','Map info', ...
+	'Tag','&Help/InfoData infouimenu1');
+h1 = uimenu('Parent',h0, ...
+	'Label','&Init/Train', ...
+	'Tag','&Init/Train1');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''change_initialization'');', ...
+	'Enable','off', ...
+	'Label','Change initialization values', ...
+	'Tag','&Init&Trainuimenu1');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''init'');', ...
+	'Enable','off', ...
+	'Label','Initialize', ...
+	'Tag','&Init&TrainInitialize1');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''change_def'');', ...
+	'Enable','off', ...
+	'Label','Change training values', ...
+	'Tag','&Init&TrainChange initialization valuesuimenu1');
+h2 = uimenu('Parent',h1, ...
+	'Callback','som_gui(''def_train'');', ...
+	'Enable','off', ...
+	'Label','Train', ...
+	'Tag','&Init&TrainTrain1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.04081632653061224 0.01129943502824859 0.7619047619047619 0.9717514124293786], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.06802721088435373 0.7909604519774012 0.7074829931972788 0.1807909604519774], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.8527570621468927 0.6530612244897959 0.03389830508474576], ...
+        'FontUnits','normalized',...
+	'String','Map <empty>', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.8075593220338984 0.6530612244897959 0.03389830508474576], ...
+	'String','Data <empty>', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText4');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.06802721088435373 0.5988700564971752 0.7074829931972788 0.1694915254237288], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.1041 0.7356 0.6286 0.0271], ...
+	'String','Initialization', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'FontWeight','bold', ...
+	'Tag','StaticText7');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4489795918367346 0.7005649717514124 0.2993197278911565 0.03389830508474576], ...
+	'String','map size:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText5');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.6553672316384182 0.2993197278911565 0.03389830508474576], ...
+	'String','lattice:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText20');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.7000000000000001 0.2993197278911565 0.03389830508474576], ...
+	'String','type:', ...
+   'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText6');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4489795918367346 0.6553672316384182 0.2993197278911565 0.03389830508474576], ...
+	'String','shape:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText21');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.3129251700680272 0.6101694915254238 0.217687074829932 0.03389830508474576], ...
+	'String','Change values', ...
+        'FontUnits','normalized',...	       
+	'Callback','som_gui(''change_initialization'');', ...
+	'Enable','off', ...
+	'Tag','Pushbutton9');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.06802721088435373 0.02259887005649718 0.7074829931972788 0.5536723163841808], ...
+	'Style','frame', ...
+	'Tag','Frame4');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.1041 0.5316 0.6429 0.0339], ...
+	'String','Training', ...
+   'FontUnits','normalized',...	       
+	'Style','text', ...
+	'FontWeight','bold', ...
+	'Tag','StaticText8');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.4971751412429379 0.6530612244897959 0.03389830508474576], ...
+	'String','training type', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText9');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4489795918367346 0.4519774011299435 0.2993197278911565 0.03389830508474576], ...
+	'String','tracking:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText19');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.4519774011299435 0.2993197278911565 0.03389830508474576], ...
+	'String','neigh:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText11');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'HorizontalAlignment','left', ...	       
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.36519774011299435 0.2993197278911565 0.03389830508474576], ...	       
+	'String','alpha type:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Visible','off',...
+	'Tag','StaticText28');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'ListboxTop',0, ...
+	'HorizontalAlignment','left', ...	       
+	'Position',[0.09523809523809523 0.4067796610169492 0.2993197278911565 0.03389830508474576], ...	       
+	'String','length type:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Visible','off',...
+	'Tag','StaticText14');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4489795918367346 0.4067796610169492 0.2993197278911565 0.03389830508474576], ...
+	'String','order:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Visible','off',...
+	'Tag','StaticText12');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.07909604519774012 0.2993197278911565 0.2711864406779661], ...
+	'Style','frame', ...
+	'Tag','Frame5');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.4353741496598639 0.07909604519774012 0.2993197278911565 0.2711864406779661], ...
+	'Style','frame', ...
+	'Tag','Frame6');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.108843537414966 0.3050847457627119 0.2721088435374149 0.03389830508474576], ...
+	'String','Rough', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText13');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.4489795918367346 0.3050847457627119 0.2721088435374149 0.03389830508474576], ...
+	'String','Finetune', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText15');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.108843537414966 0.1807909604519774 0.2721088435374149 0.03389830508474576], ...
+	'String','training length:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText16');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.108843537414966 0.2694915254237288 0.2714285714285714 0.03389830508474576], ...
+	'String','radius initial:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText17');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.1088 0.2260 0.2721 0.0339], ...
+	'String','radius final:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText22');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'ListboxTop',0, ...
+	'Position',[0.108843537414966 0.13694915254237288 0.2714285714285714 0.03389830508474576], ...	       
+	'String','alpha initial:', ...
+        'FontUnits','normalized',...	       
+	'HorizontalAlignment','left', ...	       
+	'Style','text', ...
+	'Visible','off',...
+	'Tag','StaticText26');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4489795918367346 0.1807909604519774 0.2721088435374149 0.03389830508474576], ...
+	'String','training length:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText23');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4489795918367346 0.2711864406779661 0.2721088435374149 0.03389830508474576], ...
+	'String','radius initial:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText24');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4490 0.2260 0.2721 0.0339], ...
+	'String','radius final:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText25');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'ListboxTop',0, ...
+	'Position',[0.4489795918367346  0.13694915254237288 0.2721088435374149 0.03389830508474576], ...	       
+	'String','alpha initial:', ...
+        'FontUnits','normalized',...	       
+	'HorizontalAlignment','left', ...	       
+	'Style','text', ...
+	'Visible','off',...
+	'Tag','StaticText27');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.3129251700680272 0.03389830508474576 0.217687074829932 0.03389830508474576], ...
+	'String','Change values', ...
+        'FontUnits','normalized',...	       
+	'Callback','som_gui(''change_def'');', ...
+	'Enable','off', ...
+	'Tag','Pushbutton6');
+if ver_53_or_newer, set(h1,'TooltipString','Change default values in training.'); end
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.8163265306122448 0.8152542372881356 0.163265306122449 0.05593220338983051], ...
+	'String','LOAD', ...
+        'FontUnits','normalized',...	       
+	'Callback','som_gui(''load_data'');', ...
+	'Tag','Pushbutton2');
+if ver_53_or_newer, set(h1,'TooltipString','Load data file.'); end
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.8163265306122448 0.6457627118644068 0.163265306122449 0.05593220338983051], ...
+	'String','INITIALIZE', ...
+        'FontUnits','normalized',...	       
+	'Callback','som_gui(''init'');', ...
+	'Enable','off', ...
+	'Tag','Pushbutton4');
+if ver_53_or_newer, set(h1,'TooltipString','Initialize map.'); end
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.8163265306122448 0.384180790960452 0.163265306122449 0.05649717514124294], ...
+	'String','TRAIN', ...
+        'FontUnits','normalized',...	       
+	'Callback','som_gui(''def_train'');', ...
+	'Enable','off', ...
+	'Tag','Pushbutton5');
+if ver_53_or_newer, set(h1,'TooltipString','Train map whit default values.'); end
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
+	'ListboxTop',0, ...
+	'Position',[0.8163265306122448 0.06779661016949153 0.163265306122449 0.05649717514124294], ...
+	'Callback','som_gui(''close'');', ...
+	'String','CLOSE', ...
+        'FontUnits','normalized',...	       
+	'Tag','Pushbutton8');
+if ver_53_or_newer, set(h1,'TooltipString','Close figure.'); end
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.9 0.9 0.9], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.09387755102040815 0.897954802259887 0.6530612244897959 0.03389830508474576], ...
+	'String','Status <no action>', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText10');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.108843537414966 0.0903954802259887 0.2721088435374149 0.03389830508474576], ...
+	'String','Only finetune', ...
+        'FontUnits','normalized',...	       
+	'Callback','som_gui(''only_finetune'');', ...
+	'Enable','off', ...
+	'Style','radiobutton', ...
+	'Tag','Radiobutton1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.09523809523809523 0.9418531073446328 0.6530612244897959 0.0259887005649718], ...
+   'String','Information', ...
+   'FontUnits','normalized',...
+	'FontWeight','bold', ...
+	'Style','text', ...
+	'Tag','StaticText18');
+if nargout > 0, fig = h0; end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function fig = loadgui3()
+
+temp = {'dat file';'mat file'};
+
+h0 = figure('Units','normalized', ...
+        'Color',[0.8 0.8 0.8], ...
+	'Name','Load data!', ...
+	'NumberTitle','off', ...
+	'PaperType','a4letter', ...
+	'Position',[0.3828125 0.5 0.3421875 0.189453125], ...
+	'Tag','Fig1');
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.02853881278538813 0.06443298969072164 0.7705479452054794 0.8698453608247422], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.04337899543378995 0.547680412371134 0.7420091324200913 0.354381443298969], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.04280821917808219 0.09664948453608246 0.7420091324200913 0.4188144329896907], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'FontWeight','bold', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.05717762557077625 0.7881958762886597 0.2853881278538812 0.09664948453608246], ...
+	'String','From', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','som_gui(''workspace'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.05107762557077625 0.7087628865979381 0.1997716894977169 0.09664948453608246], ...	       	       
+	'String','Ws', ...
+   'FontUnits','normalized',...	       
+	'Style','radiobutton', ...
+	'Tag','Radiobutton2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','som_gui(''file'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.05107762557077625 0.5773195876288659 0.2009132420091324 0.09793814432989689], ...
+	'String','File', ...
+        'FontUnits','normalized',...	       
+	'Style','radiobutton', ...
+	'Tag','Radiobutton1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','Handle = findobj(gcbf,''Tag'',''EditText2'');set(Handle,''String'','''');',...
+        'FontUnits','normalized',...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2893881278538812 0.7087628865979381 0.3139269406392694 0.09664948453608246], ...	       
+	'Style','edit', ...
+	'Tag','EditText1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','Handle = findobj(gcbf,''Tag'',''EditText1'');set(Handle,''String'','''');',...
+        'FontUnits','normalized',...	       
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.2893881278538812 0.5798969072164948 0.3139269406392694 0.09664948453608246], ...	       
+	'Style','edit', ...
+	'Tag','EditText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'Callback','som_gui(''browse'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.6279 0.5799 0.1427 0.2255], ...
+	'String','Browse', ...
+        'FontUnits','normalized',...	       
+	'Tag','Pushbutton1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'Callback','som_gui(''load_ok'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.8276 0.5577 0.1427 0.2255], ...
+	'String','Load', ...
+        'FontUnits','normalized',...	       
+	'Tag','Pushbutton2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'Callback','close;',...
+	'ListboxTop',0, ...
+	'Position',[0.8276 0.2577 0.1427 0.2255], ...
+	'String','Cancel', ...
+	'FontUnits','normalized',...       
+	'Tag','Pushbutton3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'Callback','som_gui(''file_select'');', ...
+	'ListboxTop',0, ...
+	'Max',2, ...
+	'Min',1, ...
+	'String',temp,...
+   'FontUnits','normalized',... 
+	'Position',[0.3995433789954338 0.2977319587628866 0.1997716894977169 0.08664948453608246], ...	       
+	'Style','popupmenu', ...
+	'Tag','PopupMenu1', ...
+	'Value',1);
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'FontWeight','bold', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.05707762557077625 0.3865979381443299 0.7134703196347032 0.09664948453608246], ...
+	'String','Parameters for file', ...
+        'FontUnits','normalized',...
+	'Style','text', ...
+	'Tag','StaticText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.05707762557077625 0.2777319587628866 0.2568493150684931 0.09664948453608246], ...
+	'String','File type ', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.05707762557077625 0.1288659793814433 0.2996575342465753 0.09664948453608246], ...
+	'String','Missing value', ...
+	'Style','checkbox', ...
+        'FontUnits','normalized',...	       
+	'Tag','Checkbox1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''missing'');',...
+	'ListboxTop',0, ...
+	'Position',[0.5136986301369862 0.1258659793814433 0.08561643835616438 0.10664948453608246], ...	       
+	'String','x', ...
+        'FontUnits','normalized',...	       
+	'Style','edit', ...
+	'Tag','EditText3');
+if nargout > 0, fig = h0; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+function fig = works()
+
+v = version;
+ver_53_or_newer = (str2num(v(1:3)) >= 5.3);
+
+h0 = figure('Units','normalized', ...
+	'Color',[0.8 0.8 0.8], ...
+	'Name','Load from workspace!', ...
+	'NumberTitle','off', ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperType','a4letter', ...
+	'PaperUnits','points', ...
+	'Position',[0.5390625 0.2490234375 0.203125 0.251953125], ...
+	'Tag','Fig1');
+if ver_53_or_newer, set(h0,'ToolBar','none'); end
+
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.05384615384615385 0.1472868217054263 0.9076923076923078 0.8255813953488372], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'Callback','som_gui(''works_ok'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.1077 0.0194 0.2885 0.1202], ...
+	'String','OK', ...
+        'FontUnits','normalized',...	       
+	'Tag','Pushbutton1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'Callback','close;', ...
+	'ListboxTop',0, ...
+	'Position',[0.6115 0.0155 0.2885 0.1202], ...
+	'String','Cancel', ...
+        'FontUnits','normalized',...	       
+	'Tag','Pushbutton2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Position',[0.1192 0.1977 0.7692 0.6395], ...
+	'String',' ', ...
+        'FontUnits','normalized',...	       
+	'Style','listbox', ...
+	'Tag','Listbox1', ...
+	'Value',1);
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'FontWeight','bold', ...
+	'ListboxTop',0, ...
+	'Position',[0.2115384615384616 0.8720930232558139 0.576923076923077 0.06976744186046512], ...
+	'String','Your options', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText1');
+if nargout > 0, fig = h0; end
+
+
+
+
+
+
+function fig = initialization2()
+
+
+temp1 = {'random';'linear'};
+temp2 = {'hexa';'rect'};
+temp3 = {'sheet';'cyl';'toroid'};
+
+
+
+% position bug in following corrected 1.12.04 KimmoR
+h0 = figure('Units','normalized', ...
+        'Color',[0.8 0.8 0.8], ...
+	'Name','Change initialization parameters!', ...
+	'NumberTitle','off', ...
+	'PaperType','a4letter', ...
+	'Position',[0.48828125 0.4267578125 0.3515625 0.146484375], ...
+	'Tag','Fig1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.02777777777777778 0.08333333333333333 0.8055555555555556 0.8333333333333334], ...	       
+	'Style','frame', ...
+	'Tag','Frame1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'Callback','som_gui(''change_initialization_ok'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.8472222222222222 0.55 0.125 0.25], ...
+        'FontUnits','normalized',...	       
+	'String','OK', ...
+	'Tag','Pushbutton1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'Callback','som_gui(''change_initialization_cancel'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.8472222222222222 0.25 0.125 0.25], ...	       
+        'FontUnits','normalized',...
+	'String','Cancel', ...
+	'Tag','Pushbutton2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'FontWeight','bold', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.08333333333333334 0.6666666666666666 0.7066666666666667 0.1933333333333333], ...
+	'String','Initialization parameters:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.0556 0.200 0.1667 0.1250],...       
+	'String','type:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'ListboxTop',0, ...
+	'Max',2, ...
+	'Min',1, ...
+	'Position',[0.2500 0.200 0.1667 0.1250], ...
+	'String',temp1, ...
+        'FontUnits','normalized',...	       
+	'Style','popupmenu', ...
+	'Tag','PopupMenu1', ...
+	'Value',1);
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.05555555555555556 0.6 0.1666666666666667 0.125], ...
+	'String','map size:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''map_size'');', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.25 0.6 0.1666666666666667 0.125], ...
+        'FontUnits','normalized',...	       
+	'Style','edit', ...
+	'Tag','EditText1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.05555555555555556 0.4033333333333333 0.1666666666666667 0.125], ...
+	'String','lattice:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Max',2, ...
+	'Min',1, ...
+	'Position',[0.25 0.4333333333333333 0.1666666666666667 0.125], ...
+	'String',temp2, ...
+        'FontUnits','normalized',...	       
+	'Style','popupmenu', ...
+	'Tag','PopupMenu2', ...
+	'Value',2);
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4444444444444445 0.4033333333333333 0.1666666666666667 0.125], ...	       
+	'String','shape:', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText4');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Max',3, ...
+	'Min',1, ...
+	'Position',[0.638888888888889 0.4333333333333333 0.1666666666666667 0.125], ...	       
+	'String',temp3, ...
+        'FontUnits','normalized',...	       
+	'Style','popupmenu', ...
+	'Tag','PopupMenu3', ...
+	'Value',2);
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.4444444444444445 0.6 0.1666666666666667 0.125], ...
+        'FontUnits','normalized',...
+	'String','munits:', ...
+	'Style','text', ...
+	'Tag','StaticText5');	       
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''munits'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.638888888888889 0.6 0.1666666666666667 0.125], ...
+	'Style','edit', ...
+        'FontUnits','normalized',...	       
+	'Tag','EditText2');
+if nargout > 0, fig = h0; end
+
+
+
+
+
+
+
+function fig = new_para2_2()
+
+temp1 = {'0';'1';'2';'3'};
+temp2 = {'gaussian';'cutgauss';'ep';'bubble'};
+temp3 = {'epochs';'samples'};
+temp4 = {'random';'ordered'};
+temp5 = {'inv';'linear';'power'};
+
+v = version;
+ver_53_or_newer = (str2num(v(1:3)) >= 5.3);
+
+h0 = figure('Units','normalized', ...
+	'Color',[0.8 0.8 0.8], ...
+	'Name','Change training parameters!', ...
+	'NumberTitle','off', ...
+	'PaperPosition',[18 180 576 432], ...
+	'PaperType','a4letter', ...
+	'PaperUnits','points', ...
+	'Position',[0.59140625 0.4560546875 0.3046875 0.4619140625], ...
+	'Tag','Fig3');
+if ver_53_or_newer, set(h0,'ToolBar','none'); end
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.02051282051282051 0.08456659619450317 0.9641025641025641 0.8921775898520086], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.5308 0.1374 0.4000 0.3742], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'ListboxTop',0, ...
+	'Position',[0.08012820512820512 0.1416490486257928 0.4102564102564102 0.3699788583509514], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'Callback','close(gcbf);', ...
+	'ListboxTop',0, ...
+	'Position',[0.6410 0.0036 0.2897 0.0740], ...
+        'FontUnits','normalized',...	       
+	'String','Cancel', ...
+	'Tag','Pushbutton2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'Callback','som_gui(''set_new_parameters'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.1026 0.0036 0.2897 0.0740], ...
+	'String','Set parameters', ...
+        'FontUnits','normalized',...	       
+	'Tag','Pushbutton1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'ListboxTop',0, ...
+	'Max',4, ...
+	'Min',1, ...
+	'Position',[0.7051282051282051 0.6723044397463003 0.1923076923076923 0.040169133192389], ...
+	'String',temp1, ...
+        'FontUnits','normalized',...	       
+	'Style','popupmenu', ...
+	'Tag','PopupMenu2', ...
+	'Value',1);
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'ListboxTop',0, ...
+	'Max',4, ...
+	'Min',1, ...
+	'Position',[0.2948717948717949 0.6670190274841438 0.1923076923076923 0.03964059196617336], ...
+	'String',temp2, ...
+	'FontUnits','normalized',...       
+	'Style','popupmenu', ...
+	'Tag','PopupMenu1', ...
+	'Value',1);
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'Callback','som_gui(''batch_cancel'');', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.5076923076923077 0.6575052854122622 0.1923076923076923 0.05285412262156448], ...
+	'String','tracking', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText6');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'Callback','som_gui(''batch_cancel'');', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.09615384615384615 0.6553911205073996 0.1923076923076923 0.05285412262156448], ...
+	'String','neigh.', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText5');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.09615384615384615 0.7526427061310783 0.09487179487179487 0.04228329809725159], ...
+	'String','mask:', ...
+	'FontUnits','normalized',... 
+	'Style','text', ...
+	'Tag','StaticText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Position',[0.2948717948717949 0.7399577167019028 0.6025641025641025 0.07399577167019028], ...
+	'String',' ', ...
+	'FontUnits','normalized',...  
+	'Style','listbox', ...
+	'Tag','Listbox2', ...
+	'Value',1);
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.0962 0.8060 0.1154 0.0529], ...
+        'FontUnits','normalized',...
+	'String','Set', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''set_batch_mask'');', ...
+	'Position',[0.2948717948717949 0.8165961945031712 0.3205128205128205 0.05285412262156448], ...
+	'String',' ', ...
+        'FontUnits','normalized',...	       
+	'Style','listbox', ...
+	'Tag','Listbox1', ...
+	'Value',1);
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.6250 0.8060 0.1603 0.0529], ...
+	'String','to value', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText4');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''set_batch_mask'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.7923076923076923 0.8181818181818182 0.09487179487179487 0.05285412262156448], ...
+	'Style','edit', ...
+        'FontUnits','normalized',...	       
+	'Tag','EditText2');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''check_fine_trainlen'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.7923 0.2352 0.0974 0.0402], ...
+        'FontUnits','normalized',...	       
+	'Style','edit', ...
+	'Tag','EditText11');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''check_fine_alphaini'');', ...
+	'Enable','off', ...
+	'ListboxTop',0, ...
+	'Position',[0.7923076923076923 0.1664904862579281 0.09743589743589742 0.03805496828752643], ...
+	'Style','edit', ...
+        'FontUnits','normalized',...	       
+	'Tag','EditText10', ...
+	'Visible','off');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''check_fine_radfin'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.7923076923076923 0.3002114164904862 0.09743589743589742 0.040169133192389], ...
+	'Style','edit', ...
+	'FontUnits','normalized',...       
+	'Tag','EditText9');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''check_fine_radini'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.7923076923076923 0.3657505285412262 0.09743589743589742 0.040169133192389], ...
+	'Style','edit', ...
+	'FontUnits','normalized',...     
+	'Tag','EditText8');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.5590 0.2326 0.2179 0.0402], ...
+	'String','training length', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText16');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.5590 0.1665 0.2179 0.0381], ...
+	'String','alpha initial', ...
+	'FontUnits','normalized',...     
+	'Style','text', ...
+	'Tag','StaticText14', ...
+	'Visible','off');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.5590 0.2981 0.2179 0.0402], ...
+	'String','radius final', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText12');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.5590 0.3636 0.2179 0.0402], ...
+	'String','radius initial', ...
+	'FontUnits','normalized',...      
+	'Style','text', ...
+	'Tag','StaticText10');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''check_rough_trainlen'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.3590 0.2352 0.0949 0.0402], ...
+	'Style','edit', ...
+	'FontUnits','normalized',...     
+	'Tag','EditText7');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''check_rough_alphaini'');', ...
+	'Enable','off', ...
+	'ListboxTop',0, ...
+	'Position',[0.3590 0.1691 0.0949 0.0381], ...
+	'Style','edit', ...
+        'FontUnits','normalized',...	       
+	'Tag','EditText6', ...
+	'Visible','off');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''check_rough_radfin'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.358974358974359 0.3044397463002114 0.09487179487179487 0.040169133192389], ...
+	'Style','edit', ...
+	'FontUnits','normalized',...      
+	'Tag','EditText5');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','som_gui(''check_rough_radini'');', ...
+	'ListboxTop',0, ...
+	'Position',[0.358974358974359 0.3699788583509514 0.09487179487179487 0.040169133192389], ...
+	'Style','edit', ...
+        'FontUnits','normalized',...	       
+	'Tag','EditText4');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.0962 0.2326 0.2179 0.0402], ...
+	'String','training length', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText15');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.0962 0.1691 0.2179 0.0381], ...
+	'String','alpha initial', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText13', ...
+	'Visible','off');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.0962 0.3023 0.2179 0.0402], ...
+	'String','radius final', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText11');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.0962 0.3679 0.2179 0.0402], ...
+        'FontUnits','normalized',...
+	'String','radius initial', ...
+	'Style','text', ...
+	'Tag','StaticText9');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'ListboxTop',0, ...
+	'Position',[0.5948717948717949 0.4291754756871036 0.2871794871794872 0.05285412262156448], ...
+	'String','Finetune', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText8');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'ListboxTop',0, ...
+	'Position',[0.1205128205128205 0.4355179704016914 0.3153846153846154 0.04862579281183932], ...
+	'String','Rough', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText7');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'FontWeight','bold', ...
+	'ListboxTop',0, ...
+	'Position',[0.1641025641025641 0.8900634249471459 0.7025641025641025 0.05285412262156448], ...
+	'String','Change parameters for batch training', ...
+	'Style','text', ...
+        'FontUnits','normalized',...	       
+	'Tag','StaticText1');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.09615384615384615 0.6025369978858351 0.1743589743589744 0.040169133192389], ...
+	'String','length type:', ...
+	'Style','text', ...
+        'FontUnits','normalized',...	       
+	'Tag','StaticText17');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'ListboxTop',0, ...
+	'Max',2, ...
+	'Min',1, ...
+	'Position',[0.2948717948717949 0.6062367864693446 0.1923076923076923 0.03964059196617336], ...
+	'String',temp3, ...
+        'FontUnits','normalized',...	       
+	'Style','popupmenu', ...
+	'Tag','PopupMenu3', ...
+	'Value',1);
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.5102564102564102 0.6004228329809724 0.1641025641025641 0.040169133192389], ...
+	'String','order', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText18');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Max',2, ...
+	'Min',1, ...
+	'Position',[0.7051282051282051 0.6109936575052853 0.1923076923076923 0.040169133192389], ...
+	'String',temp4, ...
+        'FontUnits','normalized',...	       
+	'Style','popupmenu', ...
+	'Tag','PopupMenu4', ...
+	'Value',1);
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'HorizontalAlignment','left', ...
+	'ListboxTop',0, ...
+	'Position',[0.09615384615384615 0.5369978858350951 0.2051282051282051 0.040169133192389], ...
+	'String','learning func', ...
+        'FontUnits','normalized',...	       
+	'Style','text', ...
+	'Tag','StaticText19');
+h1 = uicontrol('Parent',h0, ...
+	'Units','normalized', ...
+	'BackgroundColor',[0.701960784313725 0.701960784313725 0.701960784313725], ...
+	'ListboxTop',0, ...
+	'Max',3, ...
+	'Min',1, ...
+	'Position',[0.2948717948717949 0.5454545454545455 0.1923076923076923 0.03964059196617336], ...
+	'String',temp5, ...
+        'FontUnits','normalized',...	       
+	'Style','popupmenu', ...
+	'Tag','PopupMenu5', ...
+	'Value',1);
+if nargout > 0, fig = h0; end
+
+
+function print_info(sS,level,fid)
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+
+%error(nargchk(1, 2, nargin))  % check no. of input args is correct
+
+if ~isstruct(sS),
+  if ~iscell(sS) | ~isstruct(sS{1}), 
+    error('Input argument is not a struct or a cell array of structs.')
+  end
+  csS = sS;
+else
+  csS = {sS};
+end
+
+if nargin<2 | isempty(level) | isnan(level), level = 1; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% print struct information
+
+for c=1:length(csS), 
+ sS = csS{c};
+
+ switch sS.type, 
+ case 'som_map', 
+  mdim = length(sS.topol.msize);
+  [munits dim] = size(sS.codebook);
+  t    = length(sS.trainhist);  
+  if t==0, st='uninitialized'; 
+  elseif t==1, st = 'initialized';
+  else st = sprintf('initialized, trained %d times',t-1);
+  end
+
+  % level 1
+  fprintf(fid,'%% Struct type                           : %s\n', sS.type);
+  fprintf(fid,'%% Map name                              : %s\n', sS.name);
+  fprintf(fid,'%% Input dimension                       : %d\n', dim);
+  fprintf(fid,'%% Map grid size                         : ');
+  for i = 1:mdim - 1, fprintf(fid,'%d x ',sS.topol.msize(i)); end
+  fprintf(fid,'%d\n', sS.topol.msize(mdim));
+  fprintf(fid,'%% Lattice type (rect/hexa)              : %s\n', sS.topol.lattice);
+  fprintf(fid,'%% Shape (sheet/cyl/toroid)              : %s\n', sS.topol.shape);
+  fprintf(fid,'%% Neighborhood type                     : %s\n', sS.neigh);
+  fprintf(fid,'%% Mask                                  : ');
+  if dim,
+    for i = 1:dim-1, fprintf(fid,'%d ',sS.mask(i)); end; 
+    fprintf(fid,'%d\n',sS.mask(dim));
+  else fprintf(fid,'%% \n');
+  end
+  fprintf(fid,'%% Training status                       : %s\n', st);
+   
+  % level 1,
+  status = cell(dim,1);
+  for i=1:dim, 
+    n = length(sS.comp_norm{i});
+    if n, 
+      uninit = strcmp('uninit',{sS.comp_norm{i}.status});
+      done   = strcmp('done',{sS.comp_norm{i}.status});
+      undone = strcmp('undone',{sS.comp_norm{i}.status});
+      if sum(uninit)==n, status{i} = 'no normalization';
+      elseif sum(done)==n, status{i} = 'normalized';
+      elseif sum(undone)==n, status{i} = 'denormalized';
+      else status{i} = 'partial';
+      end
+    else status{i} = 'no normalization'; end
+  end
+  if level>1, 
+    fprintf(fid,'%% Vector components\n');
+    M = sS.codebook;
+    fprintf(fid,'%%  #   name          mask     min    mean     max     std  status\n');
+    fprintf(fid,'%%  --- ------------  ----  ------  ------  ------  ------  ------\n');
+    for i = 1:dim,
+      fprintf(fid,'%%  %-3d %-12s  %-4.2f  %6.1g  %6.1g  %6.1g  %6.1g  %s\n', ...
+              i,sS.comp_names{i}, sS.mask(i), ...
+              min(M(:,i)),mean(M(:,i)),max(M(:,i)),std(M(:,i)),status{i});
+    end
+  end
+
+  % level 3
+  if level>2,
+    fprintf(fid,'%% Vector component normalizations\n');
+    fprintf(fid,'%%  #   name          method (i=uninit,u=undone,d=done)\n');
+    fprintf(fid,'%%  --- ------------  ---------------------------------------\n');
+    for i=1:dim,  
+      fprintf(fid,'%%  %-3d %-12s  ',i,sS.comp_names{i});
+      n = length(sS.comp_norm{i}); 
+      for j=1:n, 
+        m = sS.comp_norm{i}(j).method;
+        s = sS.comp_norm{i}(j).status;
+        if strcmp(s,'uninit'), c='i'; 
+        elseif strcmp(s,'undone'), c='u'; 
+        else c='d';
+        end
+        fprintf(fid,'%% %s[%s] ',m,c);
+      end
+      fprintf(fid,'%% \n');
+    end
+  end
+  
+  % level 4
+  if level>3,
+    fprintf(fid,'%% Training history\n');
+    for i=1:t, 
+      sT = sS.trainhist(i);
+      fprintf(fid,'%% * Algorithm: %8s   Data: %13s  Trainlen:  %8d\n',...
+	      sT.algorithm,sT.data_name,sT.trainlen);
+      %if i>1, 
+        fprintf(fid,'%%   Neighborh: %8s  Mask:  ',sT.neigh);
+        for i = 1:dim-1, fprintf(fid,'%% %d ',sT.mask(i)); end; 
+        fprintf(fid,'%% %d\n',sT.mask(mdim));
+        fprintf(fid,'%%   Radius:  %4.2f->%4.2f  Alpha: %5.3f (%s)\n', ...
+		sT.radius_ini,sT.radius_fin,sT.alpha_ini,sT.alpha_type);
+      %end
+      fprintf(fid,'%%   Time:  %s\n',sT.time);
+    end
+  end
+
+ case 'som_data',
+
+  [dlen dim] = size(sS.data);
+  if dlen*dim
+    ind      = find(~isnan(sum(sS.data),2));
+  else ind = []; end
+  complete = size(sS.data(ind,:),1);
+  partial  = dlen - complete;
+  values   = prod(size(sS.data));
+  missing  = sum(sum(isnan(sS.data))); 
+
+  % level 1  
+  fprintf(fid,'%% Struct type             : %s\n', sS.type);
+  fprintf(fid,'%% Data name               : %s\n', sS.name);
+  fprintf(fid,'%% Vector dimension        : %d\n', dim);
+  fprintf(fid,'%% Number of data vectors  : %d\n', dlen);
+  fprintf(fid,'%% Complete data vectors   : %d\n', complete);
+  fprintf(fid,'%% Partial data vectors    : %d\n', partial);  
+  if values, r = floor(100 * (values - missing) / values); else r = 0; end
+  fprintf(fid,'%% Complete values         : %d of %d (%d%%)\n', ...
+          values-missing, values, r); 
+
+  % level 2,
+  status = cell(dim,1);
+  for i=1:dim, 
+    n = length(sS.comp_norm{i});
+    if n, 
+      uninit = strcmp('uninit',{sS.comp_norm{i}.status});
+      done   = strcmp('done',{sS.comp_norm{i}.status});
+      undone = strcmp('undone',{sS.comp_norm{i}.status});
+      if sum(uninit)==n, status{i} = 'no normalization';
+      elseif sum(done)==n, status{i} = 'normalized';
+      elseif sum(undone)==n, status{i} = 'denormalized';
+      else status{i} = 'partial';
+      end
+    else status{i} = 'no normalization'; end
+  end
+  if level>1, 
+    fprintf(fid,'%% Vector components\n');
+    D = sS.data;
+    fprintf(fid,'%%  #   name            min     mean     max     std  missing      status\n');
+    fprintf(fid,'%%  --- ------------  ------  ------  ------  ------  -----------  ------\n');
+    for i = 1:dim,
+      known = find(~isnan(D(:,i))); 
+      miss = dlen-length(known);
+      fprintf(fid,'%%  %-3d %-12s  %6.1g  %6.1g  %6.1g  %6.1g  %5d (%2d%%)  %s\n', ...
+              i,sS.comp_names{i}, ...
+              min(D(known,i)),mean(D(known,i)),max(D(known,i)),std(D(known,i)), ...
+              miss,floor(100*miss/dlen),status{i});
+    end
+  end
+
+  % level 3
+  if level>2,
+    fprintf(fid,'%% Vector component normalizations\n');
+    fprintf(fid,'%%  #   name          method (i=uninit,u=undone,d=done)\n');
+    fprintf(fid,'%%  --- ------------  ---------------------------------------\n');
+    for i=1:dim,  
+      fprintf(fid,'%%  %-3d %-12s  ',i,sS.comp_names{i});
+      n = length(sS.comp_norm{i});         
+      for j=1:n, 
+        m = sS.comp_norm{i}(j).method;
+        s = sS.comp_norm{i}(j).status;
+        if strcmp(s,'uninit'), c='i'; 
+        elseif strcmp(s,'undone'), c='u'; 
+        else c='d';
+        end
+        fprintf(fid,'%% %s[%s] ',m,c);
+      end
+      fprintf(fid,'%% \n');
+    end
+  end
+
+ case 'som_topol', 
+
+  mdim = length(sS.msize);
+ 
+  % level 1
+  fprintf(fid,'%% Struct type                           : %s\n',sS.type);
+  fprintf(fid,'%% Map grid size                         : ');
+  for i = 1:mdim - 1, fprintf(fid,'%% %d x ',sS.msize(i)); end
+  fprintf(fid,'%% %d\n', sS.msize(mdim));
+  fprintf(fid,'%% Lattice type (rect/hexa)              : %s\n', sS.lattice);
+  fprintf(fid,'%% Shape (sheet/cyl/toroid)              : %s\n', sS.shape);
+
+ case 'som_train', 
+
+  % level 1
+  fprintf(fid,'%% Struct type                           : %s\n',sS.type);
+  fprintf(fid,'%% Training algorithm                    : %s\n',sS.algorithm);
+  fprintf(fid,'%% Training data                         : %s\n',sS.data_name);
+  fprintf(fid,'%% Neighborhood function                 : %s\n',sS.neigh);
+  fprintf(fid,'%% Mask                                  : ');
+  dim = length(sS.mask);
+  if dim, 
+    for i = 1:dim-1, fprintf(fid,'%% %d ',sS.mask(i)); end; 
+    fprintf(fid,'%% %d\n',sS.mask(end));
+  else fprintf(fid,'%% \n'); end
+  fprintf(fid,'%% Initial radius                        : %-6.1f\n',sS.radius_ini);
+  fprintf(fid,'%% Final radius                          : %-6.1f\n',sS.radius_fin);
+  fprintf(fid,'%% Initial learning rate (alpha)         : %-6.1f\n',sS.alpha_ini);
+  fprintf(fid,'%% Alpha function type (linear/inv)      : %s\n',sS.alpha_type);
+  fprintf(fid,'%% Training length                       : %d\n',sS.trainlen);
+  fprintf(fid,'%% Average quantization error            : %-6.1f\n',sS.qerror);
+  fprintf(fid,'%% When training was done                : %s\n',sS.time);
+
+ case 'som_norm', 
+  
+  % level 1
+  fprintf(fid,'%% Struct type                           : %s\n',sS.type);
+  fprintf(fid,'%% Normalization method                  : %s\n',sS.method);
+  fprintf(fid,'%% Status                                : %s\n',sS.status);
+
+  % level 2
+  if level>1, 
+    fprintf(fid,'%% Parameters:\n');
+    sS.params
+  end
+ end
+end
+
+function [] = html2tex(html_addres,texfile)
+
+tempfile = tempname;
+fid = fopen(texfile,'w');
+eval(['!lynx -dump ' html_addres ' > ' tempfile]);
+fid2 = fopen(tempfile,'r');
+while not(feof(fid2))
+	line = fgets(fid2);
+	line = strcat('%',line);
+	fprintf(fid,'%s',line);
+end
+	fclose(fid);
+	fclose(fid2);
+	delete (tempfile);
+
+
+function [name] = retname
+resnames = who;
+if size(resnames,1) > 0
+  max_length = size(resnames{1},2);
+  for index = 1:size(resnames,1)
+    if size(resnames{index},2) > max_length
+	max_length =  size(resnames{index},2);
+    end
+  end
+ length = max_length + 1;
+ name(:,1:1:length) = 'A' 				
+else
+ name = 'A';
+end	
+%%
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_hits.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,217 @@
+function [hits] = som_hits(sMap, sData, mode)
+
+%SOM_HITS Calculate the response of the given data on the map.
+%
+% hits = som_hits(sMap, sData, [mode])
+%
+%   h = som_hits(sMap,sData);
+%   h = som_hits(sMap,sData,'fuzzy');
+%
+%  Input and output arguments ([]'s are optional): 
+%   sMap     (struct) map struct
+%            (matrix) codebook matrix, size munits x dim
+%   sData    (struct) data struct
+%            (matrix) data matrix, size dlen x dim
+%   [mode]   (string) 'crisp' (default), 'kernel', 'fuzzy'
+%
+%   hits     (vector) the number of hits in each map unit, length = munits
+%
+% The response of the data on the map can be calculated e.g. in
+% three ways, selected with the mode argument: 
+%  'crisp'    traditional hit histogram
+%  'kernel'   a sum of dlen neighborhood kernels, where kernel
+%             is positioned on the BMU of each data sample. The 
+%             neighborhood function is sMap.neigh and the
+%             neighborhood width is sMap.trainhist(end).radius_fin
+%             or 1 if this is empty or NaN
+%  'fuzzy'    fuzzy response calculated by summing 1./(1+(q/a)^2)
+%             for each data sample, where q is a vector containing
+%             distance from the data sample to each map unit and 
+%             a is average quantization error
+% 
+% For more help, try 'type som_hits' or check out online documentation.
+% See also SOM_AUTOLABEL, SOM_BMUS.    
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_hits
+%
+% PURPOSE
+%
+% Calculate the response of the given data on the map.
+%
+% SYNTAX
+%
+%  hits = som_hits(sMap, sData)
+%  hits = som_hits(M, D)
+%  hits = som_hits(..., mode)
+%
+% DESCRIPTION
+%
+% Returns a vector indicating the response of the map to the data.
+% The response of the data on the map can be calculated e.g. in
+% three ways, selected with the mode argument: 
+%  'crisp'    traditional hit histogram: how many times each map unit 
+%             was the BMU for the data set
+%  'kernel'   a sum of neighborhood kernels, where a kernel
+%             is positioned on the BMU of each data sample. The 
+%             neighborhood function is sMap.neigh and the
+%             neighborhood width is sMap.trainhist(end).radius_fin
+%             or 1 if this is not available 
+%  'fuzzy'    fuzzy response calculated by summing 
+%
+%                            1
+%                       ------------
+%                       1 +  (q/a)^2
+%
+%             for each data sample, where q is a vector containing
+%             distance from the data sample to each map unit and 
+%             a is average quantization error
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%   sMap              The vectors from among which the BMUs are searched
+%                     for. These must not have any unknown components (NaNs).
+%            (struct) map struct
+%            (matrix) codebook matrix, size munits x dim
+%                     
+%   sData             The data vector(s) for which the BMUs are searched.
+%            (struct) data struct
+%            (matrix) data matrix, size dlen x dim
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+%   mode     (string) The respond mode: 'crisp' (default), 'kernel'
+%                     or 'fuzzy'. 'kernel' can only be used if 
+%                     the first argument (sMap) is a map struct.                     
+% 
+% OUTPUT ARGUMENTS
+% 
+%   hits     (vector) The number of hits in each map unit.
+%
+% EXAMPLES
+%
+%  hits = som_hits(sM,D);
+%  hits = som_hits(sM,D,'kernel');
+%  hits = som_hits(sM,D,'fuzzy');
+%
+% SEE ALSO
+% 
+%  som_bmus      Find BMUs and quantization errors for a given data set.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 220997
+% Version 2.0beta juuso 161199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(2, 3, nargin));  % check no. of input args is correct
+
+if isstruct(sMap), 
+  switch sMap.type, 
+   case 'som_map', munits = prod(sMap.topol.msize);
+   case 'som_data', munits = size(sMap.data,1);
+   otherwise, 
+    error('Illegal struct for 1st argument.')
+  end
+else 
+  munits = size(sMap,1); 
+end
+hits = zeros(munits,1);
+
+if nargin<3, mode = 'crisp'; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+% calculate BMUs
+[bmus,qerrs] = som_bmus(sMap,sData,1);
+
+switch mode, 
+case 'crisp',    
+
+ % for each unit, check how many hits it got
+ for i=1:munits, hits(i) = sum(bmus == i); end
+   
+case 'kernel',
+
+ % check that sMap really is a map 
+ if ~isstruct(sMap) & ~strcmp(sMap.type,'som_map'), 
+   error('Kernel mode can only be used for maps.');
+ end	   
+
+ % calculate neighborhood kernel  
+ Ud = som_unit_dists(sMap.topol).^2;
+ sTrain = sMap.trainhist(end); 
+ if ~isempty(sTrain), 
+   rad = sTrain.radius_fin; 
+   if isempty(rad) | isnan(rad), rad = 1; end 
+ else 
+   rad = 1; 
+ end    
+ rad = rad^2;
+ if rad==0, rad = eps; end % to avoid divide-by-0 errors
+ switch sTrain.neigh, 
+  case 'bubble',   H = (Ud<=rad); 
+  case 'gaussian', H = exp(-Ud/(2*rad)); 
+  case 'cutgauss', H = exp(-Ud/(2*rad)) .* (Ud<=rad);
+  case 'ep',       H = (1-Ud/rad) .* (Ud<=rad);
+ end
+ 
+ % weight hits with neighborhood kernel
+ hits = sum(H(bmus,:),1)';
+   
+case 'fuzzy',	
+
+ % extract the two matrices (M, D) and the mask
+ mask = [];
+ if isstruct(sMap), 
+   if strcmp(sMap.type,'som_data'), M = sMap.data; 
+   else M = sMap.codebook; mask = sMap.mask;
+   end
+ else M = sMap;
+ end
+ if any(isnan(M(:))), 
+   error('Data in first argument must not have any NaNs.'); 
+ end
+
+ if isstruct(sData), 
+   switch sData.type, 
+    case 'som_map', 
+     D = sData.codebook; 
+     if isempty(mask), mask = sData.mask; end
+    case 'som_data', D = sData.data;
+    otherwise, error('Illegal 2nd argument.');
+   end	
+ else D = sData;
+ end
+ [dlen dim] = size(D);   
+ if isempty(mask), mask = ones(dim,1); end
+
+ % scaling factor   
+ a = mean(qerrs).^2;
+ 
+ % calculate distances & bmus
+ % (this is better explained in som_batchtrain and som_bmus)
+ Known = ~isnan(D); D(find(~Known)) = 0; % unknown components  
+ blen = min(munits,dlen); % block size 
+ W1 = mask*ones(1,blen); W2 = ones(munits,1)*mask'; D = D'; Known = Known';
+ i0 = 0; 
+ while i0+1<=dlen,    
+   inds = [(i0+1):min(dlen,i0+blen)]; i0 = i0+blen; % indeces   
+   Dist = (M.^2)*(W1(:,1:length(inds)).*Known(:,inds)) ...
+	  + W2*(D(:,inds).^2) ...
+	  - 2*M*diag(mask)*D(:,inds); % squared distances
+   hits = hits + sum(1./(1+Dist/a),2);   
+ end  
+ 
+ otherwise, 
+  error(['Unknown mode: ' mode]);
+  
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_ind2cod.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+function cind = som_ind2cod(msize,ind)
+
+%SOM_IND2COD SOM_PAK style linear indeces from Matlab linear index.
+%
+% Cind = som_ind2cod(msize,inds)
+%
+%  cind = som_ind2cod([10 15],44);
+%  cind = som_ind2cod(sMap,44);
+%  cind = som_ind2cod(sMap.msize,44);
+%  Cind = som_ind2cod([10 15],[44 13 91]');
+%
+%  Input and output arguments: 
+%   msize  (struct) map or topology struct
+%          (vector) size 1 x m, specifies the map grid size
+%   ind    (vector) size n x 1, linear indeces of n map units
+% 
+%   cind   (matrix) size n x 1, SOM_PAK style linear indeces
+%                   (row first, then column)
+%
+% See also SOM_COD2IND.
+
+% Contributed to SOM Toolbox vs2, January 14th, 2002 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 140102
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if isstruct(msize), 
+  if strcmp(msize.type,'som_map'), msize = msize.topol.msize; 
+  elseif strcmp(msize.type,'som_topol'), msize = msize.msize;
+  else error('Invalid first argument.'); end
+end
+
+if nargin<2, ind = 1:prod(msize); end
+
+Co = som_unit_coords(msize,'rect','sheet');
+
+switch size(Co,2),
+case 1, I2C = [1:prod(msize)]; 
+case 2, I2C = 1 + Co(:,1) + Co(:,2)*msize(2); 
+case 3, I2C = 1 + Co(:,1) + Co(:,2)*msize(2) + Co(:,3)*msize(1)*msize(2); % ?????
+end
+
+cind = I2C(ind); 
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_ind2sub.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+function Subs = som_ind2sub(msize,inds)
+
+%SOM_IND2SUB Map grid subscripts from linear index.
+%
+% Subs = som_ind2sub(msize,inds)
+%
+%  sub = som_ind2sub([10 15],44);
+%  sub = som_ind2sub(sMap,44);
+%  sub = som_ind2sub(sMap.msize,44);
+%  Subs = som_ind2sub([10 15],[44 13 91]');
+%
+%  Input and output arguments: 
+%   msize  (struct) map or topology struct
+%          (vector) size 1 x m, specifies the map grid size
+%   inds   (vector) size n x 1, linear indeces of n map units
+% 
+%   Subs   (matrix) size n x m, the subscripts
+%
+% See also SOM_SUB2IND.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 300798
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if isstruct(msize), 
+  if strcmp(msize.type,'som_map'), msize = msize.topol.msize; 
+  elseif strcmp(msize.type,'som_topol'), msize = msize.msize;
+  else error('Invalid first argument.'); end
+end
+
+n = length(msize); 
+k = [1 cumprod(msize(1:end-1))]; 
+inds = inds - 1;
+for i = n:-1:1, 
+  Subs(:,i) = floor(inds/k(i))+1; 
+  inds = rem(inds,k(i)); 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_info.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,403 @@
+function som_info(sS,level)
+
+%SOM_INFO Displays information on the given SOM Toolbox struct.
+% 
+% som_info(sS,[level])
+%
+%  som_info(sMap);
+%  som_info(sData,3);
+%  som_info({sMap,sData});
+%  som_info(sMap.comp_norm{2}); 
+%
+%  Input and output arguments ([]'s are optional): 
+%   sS       (struct) SOM Toolbox struct 
+%            (cell array of structs) several structs in a cell array
+%   [level]  (scalar) detail level (1-4), default = 1
+%
+% For more help, try 'type som_info' or check out online documentation.
+% See also SOM_SET.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_info
+%
+% PURPOSE
+%
+% Display information of the given SOM Toolbox struct(s).
+%
+% SYNTAX
+%
+%  som_info(sM)
+%  som_info({sM,sD})
+%  som_info(...,level)
+%
+% DESCRIPTION
+%
+% Display the contents of the given SOM Toolbox struct(s). Information
+% of several structs can be shown if the structs are given in a cell 
+% array. The level of detail can be varied with the second argument.
+% The number of different levels varies between structs. For map and 
+% data structs, not only the fields, but also some statistics of the 
+% vectors ('.data' and '.codebook' fields) is displayed. 
+%
+%   map struct
+%    level 1: name, dimension, topology, dimension, neigborhood function,
+%             mask and training status
+%    level 2: ..., training history
+%    level 3: ..., vector component names, statistics and normalization status
+%    level 4: ..., vector component normalizations
+%
+%   data struct:
+%    level 1: name, dimension, data set completeness statistics
+%    level 2: ..., vector component names, statistics and normalization status
+%    level 3: ..., vector component normalizations
+%    level 4: ..., label statistics
+%    
+%   topology struct: 
+%    level 1: all fields
+%
+%   train struct: 
+%    level 1: all fields
+%
+%   normalization struct: 
+%    level 1: method, status
+%    level 2: ..., parameters
+%    
+% REQUIRED INPUT ARGUMENTS
+%
+%   sS       (struct) SOM Toolbox struct 
+%            (cell array of structs) several structs in a cell array
+%  
+% OPTIONAL INPUT ARGUMENTS 
+%
+%   level    (scalar) detail level (1-4), default = 1
+%
+% EXAMPLES
+%
+%  som_info(sM)
+%  som_info(sM,4)
+%  som_info(sM.trainhist)
+%  som_info(sM.comp_norm{3})
+%
+% SEE ALSO
+% 
+%  som_set        Set fields and create SOM Toolbox structs.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta ecco 110997
+% Version 2.0beta juuso 101199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(1, 2, nargin))  % check no. of input args is correct
+
+if ~isstruct(sS),
+  if ~iscell(sS) | ~isstruct(sS{1}), 
+    error('Invalid first input argument.')
+  end
+  csS = sS;
+else
+  l = length(sS);   
+  csS = cell(l,1); 
+  for i=1:l, csS{i} = sS(i); end
+end
+
+if nargin<2 | isempty(level) | isnan(level), level = 1; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% print struct information
+
+for c=1:length(csS), 
+ sS = csS{c};
+ fprintf(1,'\n');
+ 
+ switch sS.type, 
+ case 'som_map', 
+  mdim = length(sS.topol.msize);
+  [munits dim] = size(sS.codebook);
+  t    = length(sS.trainhist);  
+  if t==0, st='uninitialized'; 
+  elseif t==1, st = 'initialized';
+  else st = sprintf('initialized, trained %d times',t-1);
+  end
+
+  % level 1
+  fprintf(1,'Struct type                           : %s\n', sS.type);
+  fprintf(1,'Map name                              : %s\n', sS.name);
+  fprintf(1,'Input dimension                       : %d\n', dim);
+  fprintf(1,'Map grid size                         : ');
+  for i = 1:mdim - 1, fprintf(1,'%d x ',sS.topol.msize(i)); end
+  fprintf(1,'%d\n', sS.topol.msize(mdim));
+  fprintf(1,'Lattice type (rect/hexa)              : %s\n', sS.topol.lattice);
+  fprintf(1,'Shape (sheet/cyl/toroid)              : %s\n', sS.topol.shape);
+  fprintf(1,'Neighborhood type                     : %s\n', sS.neigh);
+  fprintf(1,'Mask                                  : ');
+  if dim,
+    for i = 1:dim-1, fprintf(1,'%d ',sS.mask(i)); end; 
+    fprintf(1,'%d\n',sS.mask(dim));
+  else fprintf(1,'\n');
+  end
+  fprintf(1,'Training status                       : %s\n', st);
+   
+  % level 1,
+  status = cell(dim,1);
+  for i=1:dim, 
+    n = length(sS.comp_norm{i});
+    if n, 
+      uninit = strcmp('uninit',{sS.comp_norm{i}.status});
+      done   = strcmp('done',{sS.comp_norm{i}.status});
+      undone = strcmp('undone',{sS.comp_norm{i}.status});
+      if sum(uninit)==n, status{i} = 'none';
+      elseif sum(done)==n, status{i} = 'done';
+      elseif sum(undone)==n, status{i} = 'undone';
+      else status{i} = 'partial';
+      end
+    else status{i} = 'no normalization'; end
+  end
+  if level>1, 
+    fprintf(1,'\nVector components\n');
+    M = sS.codebook;
+    fprintf(1,' #   name          mask     min    mean     max     std  normalization\n');
+    fprintf(1,' --- ------------  ----  ------  ------  ------  ------  -------------\n');
+    for i = 1:dim,
+      fprintf(1,' %-3d %-12s  %-4.2f  %6.2g  %6.2g  %6.2g  %6.2g  %s\n', ...
+              i,sS.comp_names{i}, sS.mask(i), ...
+              min(M(:,i)),mean(M(:,i)),max(M(:,i)),std(M(:,i)),status{i});
+    end
+  end
+
+  % level 3
+  if level>2,
+    fprintf(1,'\nVector component normalizations\n');
+    fprintf(1,' #   name          method (i=uninit,u=undone,d=done)\n');
+    fprintf(1,' --- ------------  ---------------------------------------\n');
+    for i=1:dim,  
+      fprintf(1,' %-3d %-12s  ',i,sS.comp_names{i});
+      n = length(sS.comp_norm{i}); 
+      for j=1:n, 
+        m = sS.comp_norm{i}(j).method;
+        s = sS.comp_norm{i}(j).status;
+        if strcmp(s,'uninit'), c='i'; 
+        elseif strcmp(s,'undone'), c='u'; 
+        else c='d';
+        end
+        fprintf(1,'%s[%s] ',m,c);
+      end
+      fprintf(1,'\n');
+    end
+  end
+  
+  % level 4
+  if level>3,
+    fprintf(1,'\nTraining history\n');
+    fprintf(1,'Algorithm Data          Trainlen Neigh.f. Radius     Alpha (type)   Date\n');
+    fprintf(1,'--------- ------------- -------- -------- ---------- -------------- --------------------\n');	       
+    for i=1:t, 
+      sT = sS.trainhist(i);
+      fprintf(1,'%8s  %13s %8d %8s %4.2f->%4.2f %5.3f (%6s) %s\n',...
+	      sT.algorithm,sT.data_name,sT.trainlen,...
+	      sT.neigh,sT.radius_ini,sT.radius_fin,sT.alpha_ini,sT.alpha_type,sT.time);      
+      %for j = 1:length(sT.mask)-1, fprintf(1,'%d ',sT.mask(j)); end; 
+      %if ~isempty(sT.mask), fprintf(1,'%d\n',sT.mask(end)); else fprintf(1,'\n'); end
+    end
+  end
+
+ case 'som_data',
+
+  [dlen dim] = size(sS.data);
+  if dlen*dim
+    if dim>1, ind = find(~isnan(sum(sS.data,2)));
+    else ind = find(~isnan(sS.data));
+    end
+  else ind = []; end
+  complete = size(sS.data(ind,:),1);
+  partial  = dlen - complete;
+  values   = prod(size(sS.data));
+  missing  = sum(sum(isnan(sS.data))); 
+
+  % level 1  
+  fprintf(1,'Struct type             : %s\n', sS.type);
+  fprintf(1,'Data name               : %s\n', sS.name);
+  fprintf(1,'Vector dimension        : %d\n', dim);
+  fprintf(1,'Number of data vectors  : %d\n', dlen);
+  fprintf(1,'Complete data vectors   : %d\n', complete);
+  fprintf(1,'Partial data vectors    : %d\n', partial);  
+  if values, r = floor(100 * (values - missing) / values); else r = 0; end
+  fprintf(1,'Complete values         : %d of %d (%d%%)\n', ...
+          values-missing, values, r); 
+
+  % level 2,
+  status = cell(dim,1);
+  for i=1:dim, 
+    n = length(sS.comp_norm{i});
+    if n, 
+      uninit = strcmp('uninit',{sS.comp_norm{i}.status});
+      done   = strcmp('done',{sS.comp_norm{i}.status});
+      undone = strcmp('undone',{sS.comp_norm{i}.status});
+      if sum(uninit)==n, status{i} = 'none';
+      elseif sum(done)==n, status{i} = 'done';
+      elseif sum(undone)==n, status{i} = 'undone';
+      else status{i} = 'partial';
+      end
+    else status{i} = 'no normalization'; end
+  end
+  if level>1, 
+    fprintf(1,'\nVector components\n');
+    D = sS.data;
+    fprintf(1,' #   name            min     mean     max     std  missing      normalization\n');
+    fprintf(1,' --- ------------  ------  ------  ------  ------  -----------  -------------\n');
+    for i = 1:dim,
+      known = find(~isnan(D(:,i))); 
+      miss = dlen-length(known);
+      switch length(known), 
+       case 0, mi = NaN; me = NaN; ma = NaN; st = NaN; 
+       case 1, mi = D(known,i); me = mi; ma = mi; st = 0;
+       otherwise, 
+	mi = min(D(known,i)); ma = max(D(known,i)); 
+	me = mean(D(known,i)); st = std(D(known,i)); 
+      end
+      fprintf(1,' %-3d %-12s  %6.2g  %6.2g  %6.2g  %6.2g  %5d (%2d%%)  %s\n', ...
+              i,sS.comp_names{i},mi,me,ma,st,miss,floor(100*miss/dlen),status{i});
+    end
+  end
+
+  % level 3
+  if level>2,
+    fprintf(1,'\nVector component normalizations\n');
+    fprintf(1,' #   name          method (i=uninit,u=undone,d=done)\n');
+    fprintf(1,' --- ------------  ---------------------------------------\n');
+    for i=1:dim,  
+      fprintf(1,' %-3d %-12s  ',i,sS.comp_names{i});
+      n = length(sS.comp_norm{i});         
+      for j=1:n, 
+        m = sS.comp_norm{i}(j).method;
+        s = sS.comp_norm{i}(j).status;
+        if strcmp(s,'uninit'), c='i'; 
+        elseif strcmp(s,'undone'), c='u'; 
+        else c='d';
+        end
+        fprintf(1,'%s[%s] ',m,c);
+      end
+      fprintf(1,'\n');
+    end
+  end
+
+  % level 4
+  if level>3,
+    m = size(sS.labels,2);
+    fprintf(1,'\nLabels\n');   
+    if isempty(sS.label_names),       
+      labs = {''}; freq = 0; 
+      for i=1:dlen*m, 
+	l = sS.labels{i}; 
+	if isempty(l), freq(1) = freq(1)+1; 
+	else 
+	  k = find(strcmp(labs,l)); 
+	  if isempty(k), labs{end+1} = l; freq(end+1) = 1; 
+	  else freq(k)=freq(k)+1;
+	  end
+	end
+      end
+      emp = freq(1); 
+      uni = length(freq)-1;
+      if uni>0, tot = sum(freq(2:end)); else tot = 0; end
+      fprintf(1,' Total: %d\n Empty: %d\n Unique: %d\n',tot,emp,uni);
+    else
+      for j=1:m, 
+	labs = {''}; freq = 0; 
+	for i=1:dlen, 
+	  l = sS.labels{i,j}; 
+	  if isempty(l), freq(1) = freq(1)+1; 
+	  else 
+	    k = find(strcmp(labs,l)); 
+	    if isempty(k), labs{end+1} = l; freq(end+1) = 1; 
+	    else freq(k)=freq(k)+1;
+	    end
+	  end
+	end
+	emp = freq(1); 
+	uni = length(freq)-1;
+	if uni>0, tot = sum(freq(2:end)); else tot = 0; end
+	fprintf(1,' [%s] Total / empty / unique: %d / %d / %d\n', ...
+		sS.label_names{j},tot,emp,uni); 
+      end
+    end
+  end
+  
+ case 'som_topol', 
+
+  mdim = length(sS.msize);
+ 
+  % level 1
+  fprintf(1,'Struct type                           : %s\n',sS.type);
+  fprintf(1,'Map grid size                         : ');
+  for i = 1:mdim - 1, fprintf(1,'%d x ',sS.msize(i)); end
+  fprintf(1,'%d\n', sS.msize(mdim));
+  fprintf(1,'Lattice type (rect/hexa)              : %s\n', sS.lattice);
+  fprintf(1,'Shape (sheet/cyl/toroid)              : %s\n', sS.shape);
+
+ case 'som_train', 
+
+  % level 1
+  fprintf(1,'Struct type                           : %s\n',sS.type);
+  fprintf(1,'Training algorithm                    : %s\n',sS.algorithm);
+  fprintf(1,'Training data                         : %s\n',sS.data_name);
+  fprintf(1,'Neighborhood function                 : %s\n',sS.neigh);
+  fprintf(1,'Mask                                  : ');
+  dim = length(sS.mask);
+  if dim, 
+    for i = 1:dim-1, fprintf(1,'%d ',sS.mask(i)); end; 
+    fprintf(1,'%d\n',sS.mask(end));
+  else fprintf(1,'\n'); end
+  fprintf(1,'Initial radius                        : %-6.1f\n',sS.radius_ini);
+  fprintf(1,'Final radius                          : %-6.1f\n',sS.radius_fin);
+  fprintf(1,'Initial learning rate (alpha)         : %-6.1f\n',sS.alpha_ini);
+  fprintf(1,'Alpha function type (linear/inv)      : %s\n',sS.alpha_type);
+  fprintf(1,'Training length                       : %d\n',sS.trainlen);
+  fprintf(1,'When training was done                : %s\n',sS.time);
+
+  case 'som_norm', 
+   
+   % level 1
+   fprintf(1,'Struct type                           : %s\n',sS.type);
+   fprintf(1,'Normalization method                  : %s\n',sS.method);
+   fprintf(1,'Status                                : %s\n',sS.status);
+   
+   % level 2
+   if level>1, 
+     fprintf(1,'Parameters:\n');
+     sS.params
+   end
+   
+  case 'som_grid', 
+   
+   % level 1
+   fprintf(1,'Struct type                           : %s\n',sS.type);
+   if ischar(sS.neigh), 
+     fprintf(1,'Connections                           : [%d %d], %s, %s\n',...
+	     sS.msize(1),sS.msize(2),sS.neigh,sS.shape);
+   else
+     fprintf(1,'Connections                           : [%d %d] %d lines\n',...
+	     sS.msize(1),sS.msize(2),sum(sS.neigh));
+   end
+   fprintf(1,'Line                                  : %s\n',sS.line);
+   if length(sS.marker)==1, 
+     fprintf(1,'Marker                                : %s\n',sS.marker);
+   else
+     fprintf(1,'Marker                                : varies\n');
+   end
+   fprintf(1,'Surf                                  : ');
+   if isempty(sS.surf), fprintf(1,'off\n'); else fprintf(1,'on\n'); end
+   fprintf(1,'Labels                                : ');
+   if isempty(sS.label), fprintf(1,'off\n'); 
+   else fprintf(1,'on (%d)\n',sS.labelsize); end
+   
+ end
+
+ fprintf(1,'\n');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_kmeans.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,145 @@
+function [codes,clusters,err] = som_kmeans(method, D, k, epochs, verbose)
+
+% SOM_KMEANS K-means algorithm.
+%
+% [codes,clusters,err] = som_kmeans(method, D, k, [epochs], [verbose])
+%
+%  Input and output arguments ([]'s are optional):  
+%    method     (string) k-means algorithm type: 'batch' or 'seq'
+%    D          (matrix) data matrix
+%               (struct) data or map struct
+%    k          (scalar) number of centroids
+%    [epochs]   (scalar) number of training epochs
+%    [verbose]  (scalar) if <> 0 display additonal information
+%
+%    codes      (matrix) codebook vectors
+%    clusters   (vector) cluster number for each sample
+%    err        (scalar) total quantization error for the data set
+%
+% See also KMEANS_CLUSTERS, SOM_MAKE, SOM_BATCHTRAIN, SOM_SEQTRAIN.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Function has been renamed by Kimmo Raivio, because matlab65 also have 
+% kmeans function 1.10.02
+%% input arguments
+
+if isstruct(D), 
+    switch D.type, 
+    case 'som_map', data = D.codebook; 
+    case 'som_data', data = D.data; 
+    end 
+else 
+    data = D; 
+end
+[l dim]   = size(data);
+
+if nargin < 4 | isempty(epochs) | isnan(epochs), epochs = 100; end
+if nargin < 5, verbose = 0; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+rand('state', sum(100*clock)); % init rand generator
+
+lr = 0.5;                      % learning rate for sequential k-means
+temp      = randperm(l);
+centroids = data(temp(1:k),:);
+res       = zeros(k,l);
+clusters  = zeros(1, l);
+
+if dim==1, 
+    [codes,clusters,err] = scalar_kmeans(data,k,epochs); 
+    return; 
+end
+
+switch method
+ case 'seq',
+  len = epochs * l;
+  l_rate = linspace(lr,0,len);
+  order  = randperm(l);
+  for iter = 1:len
+    x  = D(order(rem(iter,l)+1),:);                   
+    dx = x(ones(k,1),:) - centroids; 
+    [dist nearest] = min(sum(dx.^2,2)); 
+    centroids(nearest,:) = centroids(nearest,:) + l_rate(iter)*dx(nearest,:);
+  end
+  [dummy clusters] = min(((ones(k, 1) * sum((data.^2)', 1))' + ...
+			 ones(l, 1) * sum((centroids.^2)',1) - ...
+			 2.*(data*(centroids')))');
+
+ case 'batch',
+  iter      = 0;
+  old_clusters = zeros(k, 1);
+  while iter<epochs
+    
+    [dummy clusters] = min(((ones(k, 1) * sum((data.^2)', 1))' + ...
+			   ones(l, 1) * sum((centroids.^2)',1) - ...
+			   2.*(data*(centroids')))');
+
+    for i = 1:k
+      f = find(clusters==i);
+      s = length(f);
+      if s, centroids(i,:) = sum(data(f,:)) / s; end
+    end
+
+    if iter
+      if sum(old_clusters==clusters)==0
+	if verbose, fprintf(1, 'Convergence in %d iterations\n', iter); end
+	break; 
+      end
+    end
+
+    old_clusters = clusters;
+    iter = iter + 1;
+  end
+  
+  [dummy clusters] = min(((ones(k, 1) * sum((data.^2)', 1))' + ...
+			  ones(l, 1) * sum((centroids.^2)',1) - ...
+			  2.*(data*(centroids')))');
+ otherwise,
+  fprintf(2, 'Unknown method\n');
+end
+
+err = 0;
+for i = 1:k
+  f = find(clusters==i);
+  s = length(f);
+  if s, err = err + sum(sum((data(f,:)-ones(s,1)*centroids(i,:)).^2,2)); end
+end
+
+codes = centroids;
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [y,bm,qe] = scalar_kmeans(x,k,maxepochs)
+
+    nans = ~isfinite(x);
+    x(nans) = []; 
+    n = length(x); 
+    mi = min(x); ma = max(x)
+    y = linspace(mi,ma,k)'; 
+    bm = ones(n,1); 
+    bmold = zeros(n,1); 
+    i = 0; 
+    while ~all(bm==bmold) & i<maxepochs, 
+        bmold  = bm;  
+        [c bm] = histc(x,[-Inf; (y(2:end)+y(1:end-1))/2; Inf]);
+        y      = full(sum(sparse(bm,1:n,x,k,n),2));
+        zh     = (c(1:end-1)==0);
+        y(~zh) = y(~zh)./c(~zh);
+        inds   = find(zh)';
+        for j=inds, if j==1, y(j) = mi; else y(j) = y(j-1) + eps; end, end         
+        i=i+1;
+    end
+    if i==maxepochs, [c bm] = histc(x,[-Inf; (y(2:end)+y(1:end-1))/2; Inf]); end
+    if nargout>2, qe = sum(abs(x-y(bm)))/n; end
+    if any(nans),
+        notnan = find(~nans); n = length(nans);
+        y  = full(sparse(notnan,1,y ,n,1)); y(nans)  = NaN;  
+        bm = full(sparse(notnan,1,bm,n,1)); bm(nans) = NaN;
+        if nargout>2, qe = full(sparse(notnan,1,qe,n,1)); qe(nans) = NaN; end
+    end 
+       
+    return; 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_kmeanscolor.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,139 @@
+function [color,best,kmeans]=som_kmeanscolor(sM,C,initRGB,contrast)
+
+% SOM_KMEANSCOLOR Map unit color code according to K-means clustering
+%
+% [color, best, kmeans] = som_kmeanscolor(sM, C, [initRGB],[contrast])
+%
+%  color        = som_kmeanscolor(sM,15,som_colorcode(sM,'rgb1'),'enhance');
+%  [color,best] = som_kmeanscolor(sM,15,[],'normal');
+%  
+%  Input and output arguments ([]'s are optional):
+%   sM       (struct) map struct
+%   C        (scalar) maximum number of clusters
+%   initRGB  (string, matrix) color code string accepted by SOM_COLORCODE
+%                     or an Mx3 matrix of RGB triples, where M is the number
+%                     of map units. Default: SOM_COLORCODEs default
+%   contrast (string) 'flat', 'enhanced' color contrast mode, default:
+%                     'enhanced'
+%
+%   color    (matrix) MxCx3 of RGB triples
+%   best     (scalar) index for "best" clustering according to 
+%                     Davies-Boulding index; color(:,:,best) includes the 
+%                     corresponding color code.
+%   kmeans   (cell)   output of KMEANS_CLUSTERS in a cell array.
+% 
+% The function gives a set of color codings according to K-means 
+% clustering. For clustering, it uses function KMEANS_CLUSTERS for map units, 
+% and it calculates color codings for 1,2,...,C clusters. 
+% The idea of coloring is that the color of a cluster is the mean of the 
+% original colors (RGB values) of the map units belonging to that cluster, 
+% see SOM_CLUSTERCOLOR. The original colors are defined by  SOM_COLORCODE
+% by default. Input 'contrast' simply specifies whether or not 
+% to linearly redistribute R,G, and B values so that minimum is 0 and 
+% maximum 1 ('enahanced')  or to use directly the output of 
+% SOM_CLUSTERCOLOR ('flat'). KMEANS_CLUSTERS uses certain heuristics to 
+% select the best of 5 trials for each  number of clusters. Evaluating the 
+% clustering multiple times may take some time. 
+%
+% EXAMPLE
+% 
+%  load iris; % or any other map struct sM 
+%  [color,b]=som_kmeanscolor(sM,10);
+%  som_show(sM,'color',color,'color',{color(:,:,b),'"Best clustering"');
+% 
+% See also SOM_SHOW, SOM_COLORCODE, SOM_CLUSTERCOLOR, KMEANS_CLUSTERS
+
+% Contributed to SOM Toolbox 2.0, April 1st, 2000 by Johan Himberg
+% Copyright (c) by Johan Himberg
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% corrected help text 11032005 johan
+
+%%% Check number of inputs
+
+error(nargchk(2, 4, nargin));  % check no. of input args
+
+%%% Check input args & set defaults
+
+if isstruct(sM) & isfield(sM,'type') & strcmp(sM.type,'som_map'),
+   [tmp,lattice,msize]=vis_planeGetArgs(sM);
+   munits=prod(msize);
+   if length(msize)>2 
+      error('Does not work with 3D maps.')
+   end
+else
+   error('Map struct requires for first input argument!');
+end
+
+if ~vis_valuetype(C,{'1x1'}),
+   error('Scalar value expect for maximum number of clusters.');
+end
+
+% check initial color coding
+if nargin<3 | isempty(initRGB)
+   initRGB=som_colorcode(sM);
+end
+
+% check contrast checking
+if nargin<4 | isempty(contrast),
+   contrast='enhanced';
+end
+
+if ~ischar(contrast),
+   error('String input expected for input arg. ''contrast''.');
+else
+   switch lower(contrast)
+   case {'flat','enhanced'}
+      ;
+   otherwise 
+      error(['''flat'' or ''enhanced'' expected for '...
+            'input argument ''contrast''.']);
+   end
+end
+
+if ischar(initRGB),
+   try 
+      initRGB=som_colorcode(sM,initRGB);
+   catch
+      error(['Color code ' initRGB ...
+            'was not recognized by SOM_COLORCODE.']);
+   end
+elseif vis_valuetype(initRGB,{'nx3rgb',[munits 3]},'all'),
+   ;
+else
+   error(['The initial color code must be a string '...
+         'or an Mx3 matrix of RGB triples.']);
+end
+
+%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+disp('Wait...');
+[c,p,err,ind]=kmeans_clusters(sM,C,5,0); % use 5 trials, verbose off
+
+% Store outputs to kmeans
+kmeans{1}=c; 
+kmeans{2}=p; 
+kmeans{3}=err; 
+kmeans{4}=ind;
+
+%%% Build output
+color=som_clustercolor(sM,cat(2,p{:}),initRGB);
+[tmp,best]=min(ind);
+
+switch contrast
+case 'flat'
+   ;
+case 'enhanced'
+   warning off;
+   ncolor=maxnorm(color);
+   ncolor(~isfinite(ncolor))=color(~isfinite(ncolor));
+   color=ncolor;
+   warning on;
+end
+
+%%% Subfunctions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function X=maxnorm(x)
+% normalize columns of x between [0,1]
+
+x=x-repmat(min(x),[size(x,1) 1 1]);
+X=x./repmat(max(x),[size(x,1) 1 1]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_kmeanscolor2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,193 @@
+function [color,centroids]=som_kmeanscolor2(mode,sM,C,initRGB,contrast,R)
+
+% SOM_KMEANSCOLOR2 Color codes a SOM according to averaged or best K-means clustering
+%
+% color = som_kmeanscolor2('average',sM, C, [initRGB], [contrast],[R]) 
+%
+%  color=som_kmeanscolor2('average',sM,[2 4 8 16],som_colorcode(sM,'rgb1'),'enhanced');
+%  [color,centroid]=som_kmeanscolor2('best',sM,15,[],'flat',R);
+%  
+%  Input and output arguments ([]'s are optional):
+%
+%   mode       (string) 'average' or 'best', defalut: 'average'
+%   sM         (struct) a map struct
+%   C          (vector) number of clusters
+%   [initRGB]  (string, matrix) a color code string accepted by SOM_COLORCODE
+%               or an Mx3 matrix of RGB triples, where M is the number
+%               of map units. Default: SOM_COLORCODEs default
+%   [contrast] (string) 'flat', 'enhanced' color contrast mode, default:
+%               'enhanced'.
+%   [R]        (scalar) number of K-means trials, default: 30.
+%   color      (matrix) Mx3xC of RGB triples
+%   centroid   (array of matrices) centroid{i} includes codebook for the best
+%               k-means for C(i) clusters, i.e. the cluster centroids corresponding to
+%               the color code color(:,:,i).
+% 
+% The function gives a set of color codes for the SOM according to K-means 
+% clustering. It has two operation modes: 
+% 
+% 'average': The idea of coloring is that the color of the units belonging to the same 
+%   cluster is the  mean of the original RGB values (see SOM_COLORCODE) of the map units 
+%   belonging to the cluster (see SOM_CLUSTERCOLOR). The K-means clustering is made,
+%   by default, 30 times and the resulting color codes are averaged for
+%   each specified number of clusters C(i), i=1,...,k. In a way, the resulting averaged color 
+%   codes reflect the stability of the K-means clustering made on the map units.
+%
+% 'best': runs the k-means R times for C(i), i=1,...,n clusters as in previous mode, 
+%   but instead of averaging all the R color codes, it picks the one that corresponds to the 
+%   best k-means clustering for each C(i). The 'best' is the one with the lowest 
+%   quantization error. The result may differ from run to run.
+%
+% EXAMPLE
+% 
+%  load iris; % or any other map struct sM 
+%  color=som_kmeanscolor2('average',sM,[2:6]);
+%  som_show(sM,'umat','all','color',color);
+% 
+% See also SOM_KMEANS, SOM_SHOW, SOM_COLORCODE, SOM_CLUSTERCOLOR, SOM_KMEANSCOLOR
+
+% Contributed to SOM Toolbox 2.0, 2001 February by Johan Himberg
+% Copyright (c) by Johan Himberg
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+%%% Check number of inputs
+
+error(nargchk(3, 6, nargin));  % check no. of input args
+
+%%% Check input args & set defaults
+
+if ~vis_valuetype(mode,{'string'}),
+   error('Mode must be a string.');
+end
+switch lower(mode),
+case{'average','best'}
+   ;
+otherwise
+   error('Mode must be string ''average'' or ''best''.');
+end
+
+if isstruct(sM) & isfield(sM,'type') & strcmp(sM.type,'som_map'),
+   [tmp,lattice,msize]=vis_planeGetArgs(sM);
+   munits=prod(msize);
+   if length(msize)>2 
+      error('Does not work with 3D maps.')
+   end
+else
+   error('Map struct required for the second input argument!');
+end
+
+if ~vis_valuetype(C,{'1xn','nx1'}),
+   error('Vector value expected for cluster number.');
+end
+
+% Round C and check
+C=round(C(:)');
+
+if any(C<2),
+   error('Cluster number must be 2 or more.');
+end
+
+% check initial color coding
+if nargin<4 | isempty(initRGB)
+   initRGB=som_colorcode(sM);
+end
+
+% check contrast checking
+if nargin<5 | isempty(contrast),
+   contrast='enhanced';
+end
+
+if ~ischar(contrast),
+   error('String input expected for input arg. ''contrast''.');
+else
+   switch lower(contrast)
+   case {'flat','enhanced'}
+      ;
+   otherwise 
+      error(['''flat'' or ''enhanced'' expected for '...
+            'input argument ''contrast''.']);
+   end
+end
+
+if ischar(initRGB),
+   try 
+      initRGB=som_colorcode(sM,initRGB);
+   catch
+      error(['Color code ' initRGB ...
+            'was not recognized by SOM_COLORCODE.']);
+   end
+elseif vis_valuetype(initRGB,{'nx3rgb',[munits 3]},'all'),
+   ;
+else
+   error(['The initial color code must be a string '...
+         'or an Mx3 matrix of RGB triples.']);
+end
+
+if nargin<6|isempty(R),
+   R=30;
+end
+
+if ~vis_valuetype(R,{'1x1'}),
+   error('''R'' must be scalar.');
+end
+
+%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+disp('Wait...');
+index=0; hit_=zeros(munits,munits);
+
+switch mode,
+   %% Averaged k-means coloring
+case 'average'
+   for k=C,
+      disp(['Running K-means for ' num2str(k) ' clusters...']); 
+      color_=zeros(munits,3);
+      colord_=color_;
+      % Average R k-means colorings for C clusters
+      for j=1:R,
+         [dummy,c]=som_kmeans('batch',sM,k,100,0); % max 100 iterations, verbose off 
+         color_=color_+som_clustercolor(sM,c,initRGB);
+      end
+      index=index+1;
+      color(:,:,index)=color_./R;
+   end
+   
+   %% coloring for 'best' k-means coloring
+case 'best'
+   for k=C,
+      disp(['Running K-means for ' num2str(k) ' clusters...']);
+      c=[];err=Inf; div=[];
+      %% look for the best k-means among R trials
+      for i=1:R,
+         [c_,div_,err_(i)]=som_kmeans('batch',sM,k,100,0); % max 100 iterations, verbose off
+         if err_(i)<err, 
+            err=err_(i); c=c_; div=div_; 
+         end
+      end
+      % record the 'best' k-means for C clusters
+      index=index+1;
+      color(:,:,index)=som_clustercolor(sM,div,initRGB);
+      centroid{index}=c;   
+   end
+end
+
+%%% Build output
+
+switch contrast
+case 'flat'
+   ;
+case 'enhanced'
+   warning off;
+   ncolor=maxnorm(color);
+   ncolor(~isfinite(ncolor))=color(~isfinite(ncolor));
+   color=ncolor;
+   warning on;
+end
+
+
+%%% Subfunctions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function X=maxnorm(x)
+% normalize columns of x between [0,1]
+
+x=x-repmat(min(x),[size(x,1) 1 1]);
+X=x./repmat(max(x),[size(x,1) 1 1]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_label.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,283 @@
+function [sTo] = som_label(sTo, mode, inds, labels)
+
+%SOM_LABEL Give/clear labels to/from map or data struct.
+%
+% sTo = som_label(sTo, mode, inds [, labels])
+% 
+%   sD = som_label(sD,'add',20,'a_label');
+%   sM = som_label(sM,'replace',[2 4],'a_label');
+%   sM = som_label(sM,'add',som_bmus(sM,x),'BMU');
+%   sD = som_label(sD,'prune',[1:10]');
+%   sM = som_label(sM,'clear','all');         
+%
+%  Input and output arguments ([]'s are optional): 
+%   sTo      (struct) data or map struct to which the labels are put 
+%   mode     (string) 'add' or 'replace' or 'prune' or 'clear'
+%   inds     (vector) indeces of the vectors to which the labels
+%                     are put. Note: this must be a column vector!
+%            (matrix) subscript indeces to the '.labels' field. The vector 
+%                     is given by the first index (e.g. inds(i,1)). 
+%            (string) for 'prune' and 'clear' modes, the string 'all'
+%                     means that all vectors should be pruned/cleared
+%   [labels]          The labels themselves. The number of rows much match 
+%                     the number of given indeces, except if there is either
+%                     only one index or only one label. If mode is
+%                     'prune' or 'clear', labels argument is ignored.
+%            (string) Label.
+%            (string array) Each row is a label.
+%            (cell array of strings) All labels in a cell are handled 
+%                     as a group and are applied to the same vector given 
+%                     on the corresponding row of inds.
+%
+% Note: If there is only one label/index, it is used for each specified
+% index/label.
+%
+% For more help, try 'type som_label' or check out online documentation.
+% See also  SOM_AUTOLABEL, SOM_SHOW_ADD, SOM_SHOW.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_label
+%
+% PURPOSE
+%
+% Add (or remove) labels to (from) map and data structs.
+%
+% SYNTAX
+%
+%  sTo = som_label(sTo, 'clear', inds)
+%  sTo = som_label(sTo, 'prune', inds)
+%  sTo = som_label(sTo, 'add', inds, labels)
+%  sTo = som_label(sTo, 'replace', inds, labels)
+%
+% DESCRIPTION
+%
+% This function can be used to give and remove labels in map and data
+% structs. Of course the same operation could be done by hand, but this
+% function offers an alternative and hopefully slightly user-friendlier
+% way to do it.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%   sTo    (struct) data or map struct to which the labels are put 
+%   mode   (string) The mode of operation. 
+%                    'add'     : adds the given labels
+%                    'clear'   : removes labels
+%                    'replace' : replaces current labels with given
+%                                labels; basically same as 'clear'
+%                                followed by 'add'
+%                    'prune'   : removes empty labels ('') from between
+%                                non-empty labels, e.g. if the labels of
+%                                a vector were {'A','','','B','','C'}
+%                                they'd become {'A','B','C'}. Some empty
+%                                labels may be left at the end of the list.
+%
+%   inds            Identifies the vectors to which the operation
+%                   (given by mode) is applied to.
+%          (vector) Linear indexes of the vectors, size n x 1.
+%                   Notice! This should be a column vector!
+%          (matrix) The labels are in a cell matrix. By giving matrix 
+%                   argument for inds, you can address this matrix
+%                   directly. The first index gives the vector and the
+%                   second index the vertical position of the label in
+%                   the labels array. Size n x 2, where n is the 
+%                   number of labels. 
+%          (string) for 'prune' and 'clear' modes, the string 'all'
+%                   means that all vectors should be pruned/cleared
+%
+% OPTIONAL INPUT ARGUMENTS 
+%
+%   [labels]        The labels themselves. The number of rows much match 
+%                   the number of given indeces, except if there is either
+%                   only one index or only one label. 
+%          (string) Label, e.g. 'label'
+%          (string array) Each row is a label, 
+%                   e.g. ['label1'; 'label2'; 'label3']
+%          (cell array of strings) All labels in a cell are handled 
+%                   as a group and are applied to the same vector given 
+%                   on the corresponding row of inds.
+%                   e.g. three labels: {'label1'; 'label2'; 'label3'}
+%                   e.g. a group of labels: {'label1', 'label2', 'label3'}
+%                   e.g. three groups: {{'la1'},{'la21','la22'},{'la3'}
+%
+% OUTPUT ARGUMENTS
+% 
+%   sTo    (struct) the given data/map struct with modified labels
+% 
+% EXAMPLES
+%
+%  This is the basic way to add a label to map structure:
+%   sMap = som_label(sMap,'add',3,'label');
+%
+%  The following examples have identical results: 
+%   sMap = som_label(sMap,'add',[4; 13], ['label1'; 'label2']);
+%   sMap = som_label(sMap,'add',[4; 13], {{'label1'};{'label2'}});
+%
+%  Labeling the BMU of a vector x (and removing any old labels)
+%   sMap = som_label(sMap,'replace',som_bmus(sMap,x),'BMU');
+%
+%  Pruning labels 
+%   sMap = som_label(sMap,'prune','all');
+%
+%  Clearing labels from a struct
+%   sMap = som_label(sMap,'clear','all');
+%   sMap = som_label(sMap,'clear',[1:4, 9:30]');
+%
+% SEE ALSO
+% 
+%  som_autolabel   Automatically label a map/data set.
+%  som_show        Show map planes.
+%  som_show_add    Add for example labels to the SOM_SHOW visualization.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 101199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(3, 4, nargin));  % check no. of input args is correct
+
+% sTo
+switch sTo.type, 
+case 'som_map',  [dlen dim] = size(sTo.codebook);
+case 'som_data', [dlen dim] = size(sTo.data);
+end
+maxl = size(sTo.labels,2); % maximum number of labels for a single vector
+
+% inds
+if ischar(inds) & strcmp(inds,'all'), 
+  inds = [1:dlen]'; 
+end
+if length(inds)>2 & size(inds,2)>2, inds = inds'; end
+ni = size(inds,1);
+n = ni; 
+
+% labels
+if nargin==4, 
+  % convert labels to a cell array of cells
+  if ischar(labels), labels = cellstr(labels); end
+  if iscellstr(labels), 
+    tmplab = labels; 
+    nl = size(labels,1);
+    labels = cell(nl,1);  
+    for i=1:nl, 
+      if ~iscell(tmplab{i}) 
+	if ~isempty(tmplab{i}), labels{i} = tmplab(i,:);
+	else labels{i} = {}; end
+      else
+	labels(i) = tmplab(i);
+      end
+    end
+    clear tmplab;
+  end
+  nl = size(labels,1);    
+end
+
+% the case of a single label/index
+if any(strcmp(mode,{'add','replace'})),
+  n = max(nl,ni);   
+  if n>1, 
+    if ni==1, 
+      inds = zeros(n,1)+inds(1); 
+    elseif nl==1,
+      label = labels{1}; 
+      labels = cell(n,1); 
+      for i=1:n, labels{i} = label; end
+    elseif ni ~= nl,
+      error('The number of labels and indexes does not match.'); 
+    end
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+switch mode,   
+ case 'clear',
+  if size(inds,2)>2, 
+    inds = inds(find(inds(:,2)<=maxl),:); % ignore if subindex is out-of-range
+    inds = sub2ind([dlen maxl],inds(:,1),inds(:,2)); 
+    sTo.labels{inds} = []; 
+  else
+    sTo.labels(inds,:) = cell(n,maxl); 
+  end
+ case 'prune', 
+  if size(inds,2)==1, 
+    % subindex gives the index from which the pruning is started
+    inds = [inds, ones(n,1)]; % from 1 by default
+  end 
+  select = ones(1,maxl);     
+  for i=1:n, 
+    v = inds(i,1); s = inds(i,2); select(:) = 1; 
+    for j=s:maxl, select(j) = ~isempty(sTo.labels{v,j}); end
+    if ~all(select), 
+      labs = cell(1,maxl); 
+      labs(1:sum(select)) = sTo.labels(v,find(select));
+      sTo.labels(v,:) = labs; 
+    end
+  end
+ case 'add', 
+  if size(inds,2)==1, 
+    % subindex gives the index from which the adding is started
+    inds = [inds, ones(n,1)]; % from 1 by default
+  end 
+  for i=1:n, 
+    v = inds(i,1); s = inds(i,2); l = length(labels{i});
+    for j=1:l, 
+      while s<=size(sTo.labels,2) & ~isempty(sTo.labels{v,s}), s=s+1; end
+      sTo.labels{v,s} = labels{i}{j}; 
+      s=s+1; 
+    end
+  end
+ case 'replace', 
+  if size(inds,2)==1, 
+    % subindex gives the index from which the replacing is started
+    inds = [inds, ones(n,1)]; % from 1 by default
+  end 
+  for i=1:n, 
+    v = inds(i,1); s = inds(i,2); l = length(labels(i)); 
+    for j=1:l, sTo.labels{v,s-1+j} = labels{i}{j}; end 
+  end
+ otherwise
+  error(['Unrecognized mode: ' mode]);
+end
+
+sTo.labels = remove_empty_columns(sTo.labels);
+
+[dlen maxl] = size(sTo.labels);
+for i=1:dlen, 
+  for j=1:maxl, 
+    if isempty(sTo.labels{i,j}) & ~ischar(sTo.labels{i,j}), 
+      sTo.labels{i,j} = ''; 
+    end
+  end
+end
+
+return;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+function labels = remove_empty_columns(labels)
+
+  [dlen maxl] = size(labels);
+  
+  % find which columns are empty
+  cols = zeros(1,maxl); 
+  for i=1:dlen, 
+    for j=1:maxl,
+      cols(j) = cols(j) + ~isempty(labels{i,j}); 
+    end
+  end
+  while maxl>0 & cols(maxl)==0, maxl = maxl-1; end % check starting from end
+
+  if maxl==0, labels = cell(dlen,1); 
+  elseif maxl<size(labels,2), labels = labels(:,1:maxl); 
+  else % ok
+  end
+  % end of remove_empty_columns
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_label2num.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,70 @@
+function [nos,names] = som_label2num(L)
+
+%SOM_LABEL2NUM Recodes textual data labels to interger class labels 
+%
+% [class,names]=class2num(L)
+%
+%  [class,names]=class2num(sData)
+%  [class,names]=class2num(sMap)
+%  [class,names]=class2num(sData.labels);
+%
+%  Input and output arguments ([]'s are optional): 
+%   
+%   L      (map struct, data struct, 
+%           Nx1 cell array of strings, 
+%           a Nxn char array)           textual labels
+%   class  (vector) Nx1 vector of integers where N is the number of original text labels
+%   names  (cell)   kx1 array of strings where names(i) correspons to integer label i
+%
+% See also KNN
+
+% Contributed to SOM Toolbox 2.0, October 29th, 2000 by Johan Himberg
+% Copyright (c) by Johan Himberg
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta Johan 291000
+
+%% Init %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if isstruct(L);
+   if isfield(L,'type') & ischar(L.type),
+      ;
+   else
+      error('Invalid map/data struct?');
+   end
+   switch L.type
+   case {'som_map', 'som_data'}
+      class=L.labels(:,1);
+   otherwise error('Invalid map/data struct?');
+   end
+elseif vis_valuetype(L,{'cellcolumn_of_char'}),
+   class=L;
+elseif vis_valuetype(L,{'chararray'}),
+   class=cellstr(L);   
+else
+   error('Input must be an Nx1 cell array of strings, a char array, a map struct or a data struct.');   
+end
+
+names = {};
+nos = zeros(length(class),1);
+for i=1:length(class),
+   if ~isempty(class{i}) & ~any(strcmp(class{i},names)),
+      names=cat(1,names,class(i));
+   end
+end
+
+tmp_nos = (1:length(names))';
+for i=1:length(class),
+   if ~isempty(class{i}),
+      nos(i,1) = find(strcmp(class{i},names));    
+   end
+end
+
+if any(nos==0),
+   nos=nos+1;
+   names(2:end+1)=names;
+   names{1}='';
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_lininit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,285 @@
+function sMap = som_lininit(D, varargin)
+
+%SOM_LININIT Initialize a Self-Organizing Map linearly.
+%
+% sMap = som_lininit(D, [[argID,] value, ...])
+%
+%  sMap = som_lininit(D);
+%  sMap = som_lininit(D,sMap);
+%  sMap = som_lininit(D,'munits',100,'hexa');
+% 
+%  Input and output arguments ([]'s are optional): 
+%   D                 The training data.
+%            (struct) data struct
+%            (matrix) data matrix, size dlen x dim
+%   [argID,  (string) Parameters affecting the map topology are given 
+%    value]  (varies) as argument ID - argument value pairs, listed below.
+%   sMap     (struct) map struct
+%
+% Here are the valid argument IDs and corresponding values. The values 
+% which are unambiguous (marked with '*') can be given without the
+% preceeding argID.
+%  'munits'       (scalar) number of map units
+%  'msize'        (vector) map size
+%  'lattice'     *(string) map lattice: 'hexa' or 'rect'
+%  'shape'       *(string) map shape: 'sheet', 'cyl' or 'toroid'
+%  'topol'       *(struct) topology struct
+%  'som_topol','sTopol'    = 'topol'
+%  'map'         *(struct) map struct
+%  'som_map','sMap'        = 'map'
+%
+% For more help, try 'type som_lininit' or check out online documentation.
+% See also SOM_MAP_STRUCT, SOM_RANDINIT, SOM_MAKE.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_lininit
+%
+% PURPOSE
+%
+% Initializes a SOM linearly along its greatest eigenvectors.
+%
+% SYNTAX
+%
+%  sMap = som_lininit(D);
+%  sMap = som_lininit(D,sMap);
+%  sMap = som_lininit(D,'munits',100,'hexa');
+%
+% DESCRIPTION
+%
+% Initializes a SOM linearly. If necessary, a map struct is created
+% first. The initialization is made by first calculating the eigenvalues
+% and eigenvectors of the training data. Then, the map is initialized
+% along the mdim greatest eigenvectors of the training data, where
+% mdim is the dimension of the map grid.
+%
+% REFERENCES
+%
+% Kohonen, T., "Self-Organizing Map", 2nd ed., Springer-Verlag, 
+%    Berlin, 1995, pp. 106-107.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  D                 The training data.
+%           (struct) Data struct. If this is given, its '.comp_names' and 
+%                    '.comp_norm' fields are copied to the map struct.
+%           (matrix) data matrix, size dlen x dim
+%  
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments can be given as 'argID',value -pairs. If an
+%  argument is given value multiple times, the last one is used. 
+%
+%  Here are the valid argument IDs and corresponding values. The values 
+%  which are unambiguous (marked with '*') can be given without the 
+%  preceeding argID.
+%  'dlen'         (scalar) length of the training data
+%  'data'         (matrix) the training data
+%                *(struct) the training data
+%  'munits'       (scalar) number of map units
+%  'msize'        (vector) map size
+%  'lattice'     *(string) map lattice: 'hexa' or 'rect'
+%  'shape'       *(string) map shape: 'sheet', 'cyl' or 'toroid'
+%  'topol'       *(struct) topology struct
+%  'som_topol','sTopol'    = 'topol'
+%  'map'         *(struct) map struct
+%  'som_map','sMap'        = 'map'
+%
+% OUTPUT ARGUMENTS
+% 
+%  sMap     (struct) The initialized map struct.
+%
+% EXAMPLES
+%
+%  sMap = som_lininit(D);
+%  sMap = som_lininit(D,sMap);
+%  sMap = som_lininit(D,'msize',[10 10]);
+%  sMap = som_lininit(D,'munits',100,'rect');
+%
+% SEE ALSO
+% 
+%  som_map_struct   Create a map struct.
+%  som_randinit     Initialize a map with random values.
+%  som_make         Initialize and train self-organizing map.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta ecco 100997
+% Version 2.0beta 101199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+% data
+if isstruct(D), 
+  data_name = D.name; 
+  comp_names = D.comp_names; 
+  comp_norm = D.comp_norm; 
+  D = D.data;
+  struct_mode = 1; 
+else 
+  data_name = inputname(1); 
+  struct_mode = 0;
+end
+[dlen dim] = size(D);
+
+% varargin
+sMap = [];
+sTopol = som_topol_struct; 
+sTopol.msize = 0; 
+munits = NaN;
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     case 'munits',     i=i+1; munits = varargin{i}; sTopol.msize = 0;
+     case 'msize',      i=i+1; sTopol.msize = varargin{i};
+                               munits = prod(sTopol.msize); 
+     case 'lattice',    i=i+1; sTopol.lattice = varargin{i}; 
+     case 'shape',      i=i+1; sTopol.shape = varargin{i}; 
+     case {'som_topol','sTopol','topol'}, i=i+1; sTopol = varargin{i}; 
+     case {'som_map','sMap','map'}, i=i+1; sMap = varargin{i}; sTopol = sMap.topol;
+     case {'hexa','rect'}, sTopol.lattice = varargin{i}; 
+     case {'sheet','cyl','toroid'}, sTopol.shape = varargin{i};
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}.type, 
+     case 'som_topol',
+      sTopol = varargin{i}; 
+     case 'som_map', 
+      sMap = varargin{i};
+      sTopol = sMap.topol;
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_topol_struct) Ignoring invalid argument #' num2str(i)]); 
+  end
+  i = i+1; 
+end
+
+if length(sTopol.msize)==1, sTopol.msize = [sTopol.msize 1]; end
+
+if ~isempty(sMap), 
+  [munits dim2] = size(sMap.codebook);
+  if dim2 ~= dim, error('Map and data must have the same dimension.'); end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% create map
+
+% map struct
+if ~isempty(sMap), 
+  sMap = som_set(sMap,'topol',sTopol);
+else  
+  if ~prod(sTopol.msize), 
+    if isnan(munits), 
+      sTopol = som_topol_struct('data',D,sTopol);
+    else
+      sTopol = som_topol_struct('data',D,'munits',munits,sTopol);
+    end
+  end  
+  sMap = som_map_struct(dim, sTopol); 
+end
+
+if struct_mode, 
+  sMap = som_set(sMap,'comp_names',comp_names,'comp_norm',comp_norm);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialization
+
+% train struct
+sTrain = som_train_struct('algorithm','lininit');
+sTrain = som_set(sTrain,'data_name',data_name);
+
+msize = sMap.topol.msize;
+mdim = length(msize);
+munits = prod(msize);
+
+[dlen dim] = size(D);
+if dlen<2,  
+  %if dlen==1, sMap.codebook = (sMap.codebook - 0.5)*diag(D); end
+  error(['Linear map initialization requires at least two NaN-free' ...
+	 ' samples.']);
+  return;
+end
+
+% compute principle components
+if dim > 1 & sum(msize > 1) > 1,
+  % calculate mdim largest eigenvalues and their corresponding
+  % eigenvectors
+    
+  % autocorrelation matrix
+  A = zeros(dim);
+  me = zeros(1,dim);
+  for i=1:dim, 
+    me(i) = mean(D(isfinite(D(:,i)),i)); 
+    D(:,i) = D(:,i) - me(i); 
+  end  
+  for i=1:dim, 
+    for j=i:dim, 
+      c = D(:,i).*D(:,j); c = c(isfinite(c));
+      A(i,j) = sum(c)/length(c); A(j,i) = A(i,j); 
+    end
+  end
+  
+  % take mdim first eigenvectors with the greatest eigenvalues
+  [V,S]   = eig(A);
+  eigval  = diag(S);
+  [y,ind] = sort(eigval); 
+  eigval  = eigval(flipud(ind));
+  V       = V(:,flipud(ind)); 
+  V       = V(:,1:mdim);
+  eigval  = eigval(1:mdim);   
+
+  % normalize eigenvectors to unit length and multiply them by 
+  % corresponding (square-root-of-)eigenvalues
+  for i=1:mdim, V(:,i) = (V(:,i) / norm(V(:,i))) * sqrt(eigval(i)); end
+  
+else
+
+  me = zeros(1,dim);
+  V = zeros(1,dim);
+  for i=1:dim, 
+    inds = find(~isnan(D(:,i)));
+    me(i) = mean(D(inds,i),1);
+    V(i) = std(D(inds,i),1);
+  end
+  
+end
+
+% initialize codebook vectors
+if dim>1, 
+  sMap.codebook = me(ones(munits,1),:); 
+  Coords = som_unit_coords(msize,'rect','sheet');
+  cox = Coords(:,1); Coords(:,1) = Coords(:,2); Coords(:,2) = cox;
+  for i=1:mdim,
+    ma = max(Coords(:,i)); mi = min(Coords(:,i)); 
+    if ma>mi, Coords(:,i) = (Coords(:,i)-mi)/(ma-mi); else Coords(:,i) = 0.5; end
+  end
+  Coords = (Coords-0.5)*2;
+  for n = 1:munits,   
+    for d = 1:mdim,    
+      sMap.codebook(n,:) = sMap.codebook(n,:)+Coords(n,d)*V(:, d)';
+    end
+  end
+else  
+  sMap.codebook = [0:(munits-1)]'/(munits-1)*(max(D)-min(D))+min(D);
+end
+
+% training struct
+sTrain = som_set(sTrain,'time',datestr(now,0));
+sMap.trainhist = sTrain;
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_linkage.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,291 @@
+function [Z,order,Md] = som_linkage(sM,varargin)
+
+%SOM_LINKAGE Make a hierarchical linkage of the SOM map units.
+%
+% [Z,order,Dist] = som_linkage(sM, [[argID,] value, ...])
+%  
+%  Z = som_linkage(sM);
+%  Z = som_linkage(D,'complete');
+%  Z = som_linkage(sM,'single','ignore',find(~som_hits(sM,D)));
+%  Z = som_linkage(sM,pdist(sM.codebook,'mahal'));
+%  som_dendrogram(Z); 
+%
+%  Input and output arguments ([]'s are optional):
+%   sM       (struct) map or data struct to be clustered
+%            (matrix) size dlen x dim, a data set: the matrix must not
+%                     contain any NaN's!
+%   [argID,  (string) See below. The values which are unambiguous can 
+%    value]  (varies) be given without the preceeding argID.
+%
+%   Z        (matrix) size dlen-1 x 3, the linkage info
+%                     Z(i,1) and Z(i,2) hold the indeces of clusters 
+%                     combined on level i (starting from bottom). The new
+%                     cluster has index dlen+i. The initial cluster 
+%                     index of each unit is its linear index in the 
+%                     original data matrix. Z(i,3) is the distance
+%                     between the combined clusters. See LINKAGE
+%                     function in the Statistics Toolbox.
+%                     The ignored samples are listed at the 
+%                     end of the Z-matrix and have Z(*,3) == Inf
+%   Dist     (matrix) size dlen x dlen, pairwise distance matrix
+%
+% Here are the valid argument IDs and corresponding values. The values 
+% which are unambiguous (marked with '*') can be given without the
+% preceeding argID.
+%   'linkage' *(string) the linkage criteria to use: 'single' (the
+%                       default), 'average' or 'complete' 
+%   'topol'   *(struct) topology struct
+%   'connect' *(string) 'neighbors' or 'any' (default), whether the
+%                       connections should be allowed only between 
+%                       neighbors or between any vectors
+%              (matrix) size dlen x dlen indicating the connections
+%                       between vectors
+%              (scalar) the N-neighborhood upto which the connections
+%                       should be formed (implies 'neighbors')
+%   'ignore'   (vector) the units/vectors which should be ignored 
+%   'dist'     (matrix) size dlen x dlen, pairwise distance matrix to 
+%                       be used instead of euclidian distances
+%              (vector) as the output of PDIST function
+%              (scalar) distance norm to use (euclidian = 2)
+%   'mask'     (vector) size dim x 1, the search mask used to 
+%                       weight distance calculation. By default 
+%                       sM.mask or a vector of ones is used.
+%
+% Note that together 'connect'='neighbors' and 'ignore' may form
+% areas on the map which will never be connected: connections
+% across the ignored map units simply do not exist.
+%
+% See also KMEANS_CLUSTERS, LINKAGE, PDIST, DENDROGRAM. 
+
+% Copyright (c) 2000 by Juha Vesanto
+% Contributed to SOM Toolbox on June 16th, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta juuso 160600
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+% the data
+if isstruct(sM), 
+  if isfield(sM,'data'), D = sM.data; sT = []; mask = []; 
+  else D = sM.codebook; sT = sM.topol; mask = sM.mask;
+  end
+else
+  D = sM; sT = []; mask = []; 
+end
+[dlen dim] = size(D);
+if isempty(mask), mask = ones(dim,1); end
+if any(isnan(D(:))), error('Data matrix must not have any NaNs.'); end
+
+% varargin
+Md = 2; 
+linkage = 'single';
+ignore_units = []; 
+constrained = 0;
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+      % argument IDs
+     case {'topol','som_topol','sTopol'}, i=i+1; sT = varargin{i};
+     case 'connect', i=i+1; 
+       if ischar(varargin{i}), constrained = ~strcmp(varargin{i},'any');
+       else constrained = varargin{i}; end
+     case 'ignore',  i=i+1; ignore_units = varargin{i}; 
+     case 'dist',    i=i+1; Md = varargin{i};
+     case 'linkage', i=i+1; linkage = varargin{i};
+     case 'mask',    i=i+1; mask = varargin{i};
+     case 'tracking',i=i+1; tracking = varargin{i}; 
+      % unambiguous values
+     case 'neighbors', constrained = 1; 
+     case 'any',       constrained = 0; 
+     case {'single','average','complete'}, linkage = varargin{i};
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}(1).type, 
+     case 'som_topol', sTopol = varargin{i}; 
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_linkage) Ignoring invalid argument #' num2str(i+1)]); 
+  end
+  i = i+1; 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% distance matrix
+
+% given distance matrix % jh corrected this place totally 27.3. 03
+if (prod(size(Md))==1), % no explicit distance matrix, set flag
+  q=2; % 17.2.03 kr added some brackets
+else
+  if (prod(size(Md))<dlen^2), % check pdist form
+    Md = squareform(Md);   % transform to ordinary square diastance matrix
+  end
+  % jh: 27.3. 03 "calculate pairwise dist. matrix" see approx. 20 lines below
+  % sets self-distance to Inf! This must be set here also,
+  % otherwise clustering fails for user defined dist. matrix! 
+  Md(eye(dlen)==1)=Inf; 
+end
+
+% neighborhood constraint
+if length(constrained)==1 & constrained>0, 
+  Ne1 = som_unit_neighs(sT); 
+  Conn = som_neighborhood(Ne1,constrained); 
+  Conn(~isfinite(Conn(:))) = 0; 
+else Conn = constrained; end
+if ~isempty(Conn), for i=1:dlen, C(i,i) = 1; end, end
+
+% pairwise distance matrix across connected units
+n = size(D,1);
+if prod(size(Md))>1,   
+  % remove distances between non-neighbors
+  if constrained, for i = 1:n, Md(i,find(Conn(i,:)==0)) = Inf; end, end
+else    
+  % calculate pairwise distance matrix
+  q = Md; 
+  Md = zeros(n,n)+Inf;
+  if ~constrained & q==2, % fast for the default case 
+    for i = 1:n-1,
+      x = D(i,:);
+      inds = [(i+1):n]; 
+      Diff = D(inds,:) - x(ones(n-i,1),:);
+      Md(inds,i) = sqrt((Diff.^2)*mask);
+      Md(i,inds) = Md(inds,i)';
+    end  
+  else
+    for i = 1:n-1, 
+      inds = find(Conn(i,:)==1); 
+      inds = inds(find(inds>i)); 
+      Diff = abs(D(inds,:) - D(i*ones(length(inds),1),:));
+      switch q, 
+       case 1,    dist = Diff*mask;
+       case 2,    dist = sqrt((Diff.^2)*mask);
+       case Inf,  dist = max(Diff,[],2);
+       otherwise, dist = ((Diff.^q)*mask).^(1/q);
+      end
+      Md(inds,i) = dist; 
+      Md(i,inds) = dist'; 
+    end
+  end
+end
+
+% set distances to ignored units to Inf
+if ~isempty(ignore_units), 
+  Md(ignore_units,:) = Inf;
+  Md(:,ignore_units) = Inf;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% construct dendrogram
+
+Z = zeros(n-1,3)+NaN;  % merged clusters and distance for each step
+clusters = 1:dlen;     % each vector is at first in its own cluster
+Cd = Md;               % distances between clusters
+
+h = waitbar(0,'Constructing hierarchical clustering'); 
+  
+for i=1:n-1,   
+
+  % tracking
+  waitbar(i/(n-1),h); 
+
+  %% combine two closest clusters  
+  % find the clusters which are closest to each other (c1 and c2)
+  [d,ind] = min(min(Cd));  
+  if ~isfinite(d), break; end   % no more connected clusters
+  [d,c1] = min(Cd(:,ind));      % cluster1
+  c2 = clusters(ind);           % cluster2    
+  % combine the two clusters
+  c1_inds = find(clusters==c1); % vectors belonging to c1
+  c2_inds = find(clusters==c2); % vectors belonging to c2
+  c_inds = [c1_inds, c2_inds];  % members of the new cluster  
+  % new cluster index = bigger cluster
+  if length(c2_inds)>length(c1_inds), c=c2; k=c1; else c=c1; k=c2; end
+  clusters(c_inds) = c;         % update cluster info
+  Z(i,:) = [c, k, d];           % save info into Z
+  
+  %% update cluster distances  
+  % remove the subclusters from the Cd table  
+  Cd(c_inds,c_inds) = Inf;      % distance of the cluster to its members = Inf
+  k_inds = c_inds(c_inds ~= c); % vectors of the smaller cluster
+  Cd(k_inds,:) = Inf;           % distance of the subclusters to 
+  Cd(:,k_inds) = Inf;           % other clusters = Inf
+  % update the distance of this cluster to the other clusters
+  cl = unique(clusters(clusters ~= c)); % indeces of all other clusters
+  if ~isempty(cl), % added since v6.5 works differently than 6.1
+    for l=cl,   
+      o_inds = find(clusters==l); % indeces belonging to cluster k
+      vd = Md(c_inds,o_inds);     % distances between vectors in c and k
+      vd = vd(isfinite(vd(:)));   % remove infinite distances (no connection)
+      len = length(vd);
+      if ~len, % if the two clusters are not connected, their distance in Inf
+	sd = Inf;
+      else   % otherwise, calculate the distance between them
+	switch linkage,
+	 case 'single',   sd = min(vd);
+	 case 'average',  sd = sum(vd)/len; 
+	 case 'complete', sd = max(vd);
+	 otherwise, error(['Unknown set distance: ' linkage]);
+	end
+      end
+      Cd(c,l) = sd; Cd(l,c) = sd;
+    end  
+  end
+end
+close(h); 
+
+last = Z(i,1); 
+if isnan(last), 
+  last = Z(i-1,1); 
+  rest = setdiff(unique(clusters),last); 
+  Z(i:n-1,1) = rest'; 
+  Z(i:n-1,2) = last; 
+  Z(i:n-1,3) = Inf; 
+  i = i - 1; 
+else 
+  rest = []; 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% return values
+
+% calculate the order of samples
+order = last; 
+% go through the combination matrix from top to down
+for k=i:-1:1, 
+  c = Z(k,1); k = Z(k,2);                     % what (k) change to what (c)
+  j = find(order==c);                         % the occurance of c in order    
+  if j == length(order), order = [order k];   % put k behind c
+  else order = [order(1:j) k order(j+1:end)]; 
+  end
+end  
+order = [rest, order]; 
+
+% to maintain compatibility with Statistics Toolbox, the values in 
+% Z must be yet transformed so that they are similar to the output
+% of LINKAGE function
+
+Zs = Z;
+current_cluster = 1:dlen;
+for i=1:size(Z,1),
+  Zs(i,1) = current_cluster(Z(i,1));
+  Zs(i,2) = current_cluster(Z(i,2));
+  current_cluster(Z(i,[1 2])) = dlen+i;  
+end
+
+Z = Zs;
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_make.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,339 @@
+function sMap = som_make(D, varargin)
+
+%SOM_MAKE Create, initialize and train Self-Organizing Map.
+%
+% sMap = som_make(D, [[argID,] value, ...])
+%
+%  sMap = som_make(D);
+%  sMap = som_make(D, 'munits', 20);
+%  sMap = som_make(D, 'munits', 20, 'hexa', 'sheet');
+%  sMap = som_make(D, 'msize', [4 6 7], 'lattice', 'rect');
+%
+%  Input and output arguments ([]'s are optional): 
+%   D        (matrix) training data, size dlen x dim
+%            (struct) data struct
+%   [argID,  (string) See below. The values which are unambiguous can 
+%    value]  (varies) be given without the preceeding argID.
+%
+%   sMap     (struct) map struct
+%
+% Here are the valid argument IDs and corresponding values. The values 
+% which are unambiguous (marked with '*') can be given without the
+% preceeding argID.
+%   'init'       *(string) initialization: 'randinit' or 'lininit' (default)
+%   'algorithm'  *(string) training: 'seq' or 'batch' (default) or 'sompak'
+%   'munits'      (scalar) the preferred number of map units
+%   'msize'       (vector) map grid size
+%   'mapsize'    *(string) do you want a 'small', 'normal' or 'big' map
+%                          Any explicit settings of munits or msize override this.
+%   'lattice'    *(string) map lattice, 'hexa' or 'rect'
+%   'shape'      *(string) map shape, 'sheet', 'cyl' or 'toroid'
+%   'neigh'      *(string) neighborhood function, 'gaussian', 'cutgauss',
+%                          'ep' or 'bubble'
+%   'topol'      *(struct) topology struct
+%   'som_topol','sTopol' = 'topol'
+%   'mask'        (vector) BMU search mask, size dim x 1
+%   'name'        (string) map name
+%   'comp_names'  (string array / cellstr) component names, size dim x 1
+%   'tracking'    (scalar) how much to report, default = 1
+%   'training'    (string) 'short', 'default', 'long'
+%                 (vector) size 1 x 2, first length of rough training in epochs, 
+%                          and then length of finetuning in epochs
+%
+% For more help, try 'type som_make' or check out online documentation.
+% See also SOM_MAP_STRUCT, SOM_TOPOL_STRUCT, SOM_TRAIN_STRUCT,
+%          SOM_RANDINIT, SOM_LININIT, SOM_SEQTRAIN, SOM_BATCHTRAIN.          
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_make
+%
+% PURPOSE
+%
+% Creates, initializes and trains a SOM using default parameters.
+%
+% SYNTAX
+%
+%  sMap = som_make(D);
+%  sMap = som_make(...,'argID',value,...);
+%  sMap = som_make(...,value,...);
+%
+% DESCRIPTION
+%
+% Creates, initializes and trains a SOM with default parameters. Uses functions
+% SOM_TOPOL_STRUCT, SOM_TRAIN_STRUCT, SOM_DATA_STRUCT and SOM_MAP_STRUCT to come
+% up with the default values.
+%
+% First, the number of map units is determined. Unless they are
+% explicitly defined, function SOM_TOPOL_STRUCT is used to determine this.
+% It uses a heuristic formula of 'munits = 5*dlen^0.54321'. The 'mapsize'
+% argument influences the final number of map units: a 'big' map has 
+% x4 the default number of map units and a 'small' map has x0.25 the
+% default number of map units. 
+%
+% After the number of map units has been determined, the map size is 
+% determined. Basically, the two biggest eigenvalues of the training
+% data are calculated and the ratio between sidelengths of the map grid
+% is set to this ratio. The actual sidelengths are then set so that 
+% their product is as close to the desired number of map units as
+% possible.
+%
+% Then the SOM is initialized. First, linear initialization along two
+% greatest eigenvectors is tried, but if this can't be done (the
+% eigenvectors cannot be calculated), random initialization is used
+% instead.  After initialization, the SOM is trained in two phases:
+% first rough training and then fine-tuning. If the 'tracking'
+% argument is greater than zero, the average quantization error and
+% topographic error of the final map are calculated.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  D           The data to use in the training.
+%     (struct) A data struct. If a struct is given, '.comp_names' field as 
+%              well as '.comp_norm' field is copied to the map struct.
+%     (matrix) A data matrix, size dlen x dim. The data matrix may
+%              contain unknown values, indicated by NaNs. 
+%  
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+% Here are the valid argument IDs and corresponding values. The values 
+% which are unambiguous (marked with '*') can be given without the
+% preceeding argID.
+%   'init'       *(string) initialization: 'randinit' or 'lininit' (default)
+%   'algorithm'  *(string) training: 'seq' or 'batch' (default) or 'sompak'
+%   'munits'      (scalar) the preferred number of map units
+%   'msize'       (vector) map grid size
+%   'mapsize'    *(string) do you want a 'small', 'normal' or 'big' map
+%                          Any explicit settings of munits or msize override this.
+%   'lattice'    *(string) map lattice, 'hexa' or 'rect'
+%   'shape'      *(string) map shape, 'sheet', 'cyl' or 'toroid'
+%   'neigh'      *(string) neighborhood function, 'gaussian', 'cutgauss',
+%                          'ep' or 'bubble'
+%   'topol'      *(struct) topology struct
+%   'som_topol','sTopol' = 'topol'
+%   'mask'        (vector) BMU search mask, size dim x 1
+%   'name'        (string) map name
+%   'comp_names'  (string array / cellstr) component names, size dim x 1
+%   'tracking'    (scalar) how much to report, default = 1
+%   'training'    (string) 'short', 'default' or 'long'
+%                 (vector) size 1 x 2, first length of rough training in epochs, 
+%                          and then length of finetuning in epochs
+%
+% OUTPUT ARGUMENTS
+% 
+%  sMap (struct) the trained map struct
+%
+% EXAMPLES
+%
+%  To simply train a map with default parameters: 
+%
+%   sMap = som_make(D); 
+%  
+%  With the optional arguments, the initialization and training can be
+%  influenced. To change map size, use 'msize', 'munits' or 'mapsize'
+%  arguments:  
+%
+%   sMap = som_make(D,'mapsize','big'); or sMap=som_make(D,'big');
+%   sMap = som_make(D,'munits', 100);
+%   sMap = som_make(D,'msize', [20 10]); 
+%
+%  Argument 'algorithm' can be used to switch between 'seq' and 'batch'
+%  algorithms. 'batch' is the default, so to use 'seq' algorithm: 
+%
+%   sMap = som_make(D,'algorithm','seq'); or sMap = som_make(D,'seq'); 
+%
+%  The 'tracking' argument can be used to control the amout of reporting
+%  during training. The argument is used in this function, and it is
+%  passed to the training functions. To make the function work silently
+%  set it to 0.
+%
+%   sMap = som_make(D,'tracking',0); 
+%
+% SEE ALSO
+% 
+%  som_map_struct   Create a map struct.
+%  som_topol_struct Default values for SOM topology.
+%  som_train_struct Default values for SOM training parameters.
+%  som_randinint    Random initialization algorithm.
+%  som_lininit      Linear initialization algorithm.
+%  som_seqtrain     Sequential training algorithm.
+%  som_batchtrain   Batch training algorithm.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 111199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+% D
+if isstruct(D) 
+  data_name = D.name; 
+  comp_names = D.comp_names;
+  comp_norm = D.comp_norm;
+  D = D.data;
+else 
+  data_name = inputname(1);
+  sDummy = som_data_struct(D(1,:)); 
+  comp_names = sDummy.comp_names;
+  comp_norm = sDummy.comp_norm;
+end
+[dlen dim] = size(D);
+
+% defaults
+mapsize = '';
+sM = som_map_struct(dim); 
+sTopol = sM.topol;
+munits = prod(sTopol.msize); % should be zero
+mask = sM.mask; 
+name = sM.name; 
+neigh = sM.neigh; 
+tracking = 1;
+algorithm = 'batch'; 
+initalg = 'lininit';
+training = 'default'; 
+
+% varargin
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+      % argument IDs
+     case 'mask',       i=i+1; mask = varargin{i}; 
+     case 'munits',     i=i+1; munits = varargin{i}; 
+     case 'msize',      i=i+1; sTopol.msize = varargin{i}; 
+                        munits = prod(sTopol.msize); 
+     case 'mapsize',    i=i+1; mapsize = varargin{i}; 
+     case 'name',       i=i+1; name = varargin{i};
+     case 'comp_names', i=i+1; comp_names = varargin{i}; 
+     case 'lattice',    i=i+1; sTopol.lattice = varargin{i};
+     case 'shape',      i=i+1; sTopol.shape = varargin{i}; 
+     case {'topol','som_topol','sTopol'}, 
+                        i=i+1; sTopol = varargin{i}; munits = prod(sTopol.msize); 
+     case 'neigh',      i=i+1; neigh = varargin{i};
+     case 'tracking',   i=i+1; tracking = varargin{i};
+     case 'algorithm',  i=i+1; algorithm = varargin{i}; 
+     case 'init',       i=i+1; initalg = varargin{i};
+     case 'training',   i=i+1; training = varargin{i}; 
+      % unambiguous values
+     case {'hexa','rect'}, sTopol.lattice = varargin{i};
+     case {'sheet','cyl','toroid'}, sTopol.shape = varargin{i}; 
+     case {'gaussian','cutgauss','ep','bubble'}, neigh = varargin{i};
+     case {'seq','batch','sompak'}, algorithm = varargin{i}; 
+     case {'small','normal','big'}, mapsize = varargin{i}; 
+     case {'randinit','lininit'}, initalg = varargin{i};
+     case {'short','default','long'}, training = varargin{i}; 
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}(1).type, 
+     case 'som_topol', sTopol = varargin{i}; 
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_make) Ignoring invalid argument #' num2str(i+1)]); 
+  end
+  i = i+1; 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% make the map struct
+
+%% map size
+if isempty(sTopol.msize) | ~prod(sTopol.msize), 
+  if tracking>0, fprintf(1,'Determining map size...\n'); end
+  if ~munits,     
+    sTemp = som_topol_struct('dlen',dlen);
+    munits = prod(sTemp.msize);
+    switch mapsize,
+     case 'small', munits = max(9,ceil(munits/4));
+     case 'big',   munits = munits*4;
+     otherwise % nil
+    end
+  end
+  sTemp = som_topol_struct('data',D,'munits',munits);
+  sTopol.msize = sTemp.msize;
+  if tracking>0, 
+    fprintf(1,' map size [%d, %d]\n',sTopol.msize(1), sTopol.msize(2));   
+  end
+end
+
+% map struct
+sMap = som_map_struct(dim,sTopol,neigh,'mask',mask,'name',name, ...
+                      'comp_names', comp_names, 'comp_norm', comp_norm); 
+       
+% function
+if strcmp(algorithm,'sompak'), 
+  algorithm = 'seq';
+  func = 'sompak';
+else
+  func = algorithm;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialization
+
+if tracking>0, fprintf(1,'Initialization...\n'); end
+
+switch initalg, 
+ case 'randinit', sMap = som_randinit(D, sMap);
+ case 'lininit', sMap = som_lininit(D, sMap); 
+end
+sMap.trainhist(1) = som_set(sMap.trainhist(1),'data_name',data_name);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% training
+
+if tracking>0, fprintf(1,'Training using %s algorithm...\n',algorithm); end
+
+% rough train
+if tracking>0, fprintf(1,'Rough training phase...\n'); end
+sTrain = som_train_struct(sMap,'dlen',dlen,'algorithm',algorithm,'phase','rough');
+sTrain = som_set(sTrain,'data_name',data_name);
+if isnumeric(training), sTrain.trainlen = training(1); 
+else
+  switch training, 
+   case 'short', sTrain.trainlen = max(1,sTrain.trainlen/4);
+   case 'long',  sTrain.trainlen = sTrain.trainlen*4;
+  end
+end
+switch func,
+ case 'seq',    sMap = som_seqtrain(sMap,D,sTrain,'tracking',tracking,'mask',mask);
+ case 'sompak', sMap = som_sompaktrain(sMap,D,sTrain,'tracking',tracking,'mask',mask);
+ case 'batch',  sMap = som_batchtrain(sMap,D,sTrain,'tracking',tracking,'mask',mask);
+end
+
+% finetune
+if tracking>0, fprintf(1,'Finetuning phase...\n'); end
+sTrain = som_train_struct(sMap,'dlen',dlen,'phase','finetune');
+sTrain = som_set(sTrain,'data_name',data_name,'algorithm',algorithm);
+if isnumeric(training), sTrain.trainlen = training(2); 
+else
+  switch training, 
+   case 'short', sTrain.trainlen = max(1,sTrain.trainlen/4);
+   case 'long',  sTrain.trainlen = sTrain.trainlen*4;
+  end
+end
+switch func,
+ case 'seq',    sMap = som_seqtrain(sMap,D,sTrain,'tracking',tracking,'mask',mask);
+ case 'sompak', sMap = som_sompaktrain(sMap,D,sTrain,'tracking',tracking,'mask',mask);
+ case 'batch',  sMap = som_batchtrain(sMap,D,sTrain,'tracking',tracking,'mask',mask);
+end
+
+% quality
+if tracking>0, 
+  [mqe,tge] = som_quality(sMap,D);
+  fprintf(1,'Final quantization error: %5.3f\n',mqe)
+  fprintf(1,'Final topographic error:  %5.3f\n',tge)
+end  
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_map_struct.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,231 @@
+function sMap = som_map_struct(dim, varargin)
+
+%SOM_MAP_STRUCT Create map struct. 
+% 
+% sMap = som_map_struct(dim, [[argID,] value, ...])
+%
+%  sMap = som_map_struct(4);
+%  sMap = som_map_struct(4,'msize',[3 4],'hexa','sheet');
+%  sMap = som_map_struct(4,'msize',[3 4 5],'rect','name','a 3D-SOM');
+%  sMap = som_map_struct(4,'msize',[3 4],'bubble','mask',[1 1 1 0]);
+%
+%  Input and output arguments ([]'s are optional): 
+%   dim      (scalar) input space dimension
+%   [argID,  (string) See below. The values which are unambiguous can 
+%    value]  (varies) be given without the preceeding argID.
+%
+%   sMap     (struct) self-organizing map struct
+%
+% Here are the valid argument IDs and corresponding values. The values
+% which are unambiguous (marked with '*') can be given without the
+% preceeding argID.
+%   'mask'       (vector) BMU search mask, size dim x 1
+%   'msize'      (vector) map grid size, default is [0]
+%   'labels'     (string array / cellstr) labels for each map unit, 
+%                 length=prod(msize)
+%   'name'       (string) map name
+%   'comp_names' (string array / cellstr) component names, size dim x 1
+%   'comp_norm'  (cell array) normalization operations for each
+%                 component, size dim x 1. Each cell is either empty, 
+%                 or a cell array of normalization structs.
+%   'topol'     *(struct) topology struct
+%   'som_topol','sTopol' = 'topol'
+%   'lattice'   *(string) map lattice, 'hexa' or 'rect'
+%   'shape'     *(string) map shape, 'sheet', 'cyl' or 'toroid'
+%   'neigh'     *(string) neighborhood function, 'gaussian', 'cutgauss',
+%                 'ep' or 'bubble'
+%
+% For more help, try 'type som_map_struct' or check out online documentation.
+% See also SOM_SET, SOM_INFO, SOM_DATA_STRUCT, SOM_TOPOL_STRUCT, SOM_MAKE.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_map_struct
+%
+% PURPOSE
+%
+% Creates a self-organizing map structure. 
+%
+% SYNTAX
+%
+%  sM = som_map_struct(dim)
+%  sM = som_map_struct(...,'argID',value,...);
+%  sM = som_map_struct(...,value,...);
+%
+% DESCRIPTION
+%
+% Creates a self-organizing map struct. The struct contains the map
+% codebook, labels, topology, information on normalization and training, 
+% as well as component names and a name for the map. The obligatory
+% parameter is the map dimension. Most of the other fields can be
+% given values using optional arguments. If they are left unspecified,
+% default values are used.
+%
+%  Field         Type         Size / default value (munits = prod(msize))
+%  ------------------------------------------------------------------------
+%   .type        (string)     'som_map'               
+%   .name        (string)     'SOM date'
+%   .codebook    (matrix)     rand(munits, dim)
+%   .topol       (struct)     topology struct, with the following fields
+%     .type         (string)  'som_topol'
+%     .msize        (vector)  size k x 1, [0] 
+%     .lattice      (string)  'hexa' 
+%     .shape        (string)  'sheet'
+%   .labels      (cellstr)    size munits x m, {''; ''; ... ''}
+%   .neigh       (string)     'gaussian'
+%   .mask        (vector)     size dim x 1, [1; 1; ...; 1]
+%   .trainhist   (cell array) size tl x 1, []
+%   .comp_names  (cellstr)    size dim x 1, {'Variable1', 'Variable2', ...}
+%   .comp_norm   (cell array) size dim x 1, {[], [], ... []}
+%
+% '.type' field is the struct identifier. Do not change it.
+% '.name' field is the identifier for the whole map struct
+% '.codebook' field is the codebook matrix, each row corresponds to one unit
+% '.topol' field is the topology of the map. This struct has three fields:
+%   '.msize' field is the dimensions of the map grid. Note that the
+%         matrix notation of indeces is used.
+%   '.lattice' field is the map grid lattice
+%   '.shape' field is the map grid shape
+% '.labels' field contains the labels for each of the vectors. The ith row
+%         of '.labels' contains the labels for ith map unit. Note that 
+%         if some vectors have more labels than others, the others are
+%         are given empty labels ('') to pad the '.labels' array up.
+% '.neigh' field is the neighborhood function. 
+% '.mask' field is the BMU search mask.
+% '.trainhist' field contains information on the training. It is a cell
+%         array of training structs. The first training struct contains
+%         information on initialization, the others on actual trainings. 
+%         If the map has not been initialized, '.trainhist' is empty ([]).
+% '.comp_names' field contains the names of the vector components
+% '.comp_norm' field contains normalization information for each
+%         component. Each cell of '.comp_norm' is itself a cell array of
+%         normalization structs. If no normalizations are performed for 
+%         the particular component, the cell is empty ([]).
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  dim    (scalar) Input space dimension. 
+%  
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments are given as 'argID',value -pairs. If the
+%  value is unambiguous (marked below with '*'), it can be given
+%  without the preceeding argID. If an argument is given value
+%  multiple times, the last one is used.
+%
+%   'mask'       (vector) BMU search mask, size dim x 1
+%   'msize'      (vector) map grid size, default is [0]
+%   'labels'     (string array / cellstr) labels for each map unit, 
+%                 length=prod(msize)
+%   'name'       (string) map name
+%   'comp_names' (string array / cellstr) component names, size dim x 1
+%   'comp_norm'  (cell array) normalization operations for each
+%                 component, size dim x 1. Each cell is either empty, 
+%                 or a cell array of normalization structs.
+%   'lattice'   *(string) map lattice, 'hexa' or 'rect'
+%   'shape'     *(string) map shape, 'sheet', 'cyl' or 'toroid'
+%   'topol'     *(struct) topology struct, sets msize, lattice and shape
+%   'som_topol','sTopol' = 'topol'
+%   'neigh'     *(string) neighborhood function, 'gaussian', 'cutgauss',
+%                 'ep' or 'bubble'
+%
+% OUTPUT ARGUMENTS
+% 
+%  sMap (struct) the map struct
+%
+% EXAMPLES
+%
+% Simplest case:
+%  sMap = som_map_struct(3);
+%  
+% With optional arguments, the other fields can be given values:
+%  sTo    = som_set('som_topol','msize',[10 5]);
+%  labs   = cell(50, 1); labs{1, 1} = 'first_unit';
+%  cnames = {'first'; 'second'; 'third'};
+%  sN     = som_set('som_norm');
+%  csN    = {sN; sN; sN};
+%  
+%  sMap = som_map_struct(3,'msize',[10 5],'rect');
+%  sMap = som_map_struct(3,'msize',[10 5],'lattice','rect');
+%  sMap = som_map_struct(3,sTo,'bubble','labels',labs);
+%  sMap = som_map_struct(3,sTo,'comp_names',cnames);
+%  sMap = som_map_struct(3,sTo,'name','a data struct');
+%  sMap = som_map_struct(3,sTo,'comp_norm',csN,'mask',[1 0 0.5]);
+%
+% SEE ALSO
+% 
+%  som_set          Set values and create SOM Toolbox structs.
+%  som_data_struct  Create a data struct.
+%  som_make         Initialize and train self-organizing map.
+%  som_topol_struct Default values for map topology.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta ecco 100997
+% Version 2.0beta juuso 101199 130300
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% default values
+sTopol     = som_set('som_topol','lattice','hexa','shape','sheet');
+neigh      = 'gaussian';
+mask       = ones(dim,1);
+name       = sprintf('SOM %s', datestr(now, 1));
+labels     = cell(prod(sTopol.msize),1);
+for i=1:length(labels), labels{i} = ''; end
+comp_names = cell(dim,1); 
+for i = 1:dim, comp_names{i} = sprintf('Variable%d', i); end
+comp_norm  = cell(dim,1); 
+
+% varargin
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+      % argument IDs
+     case 'mask',       i=i+1; mask = varargin{i}; 
+     case 'msize',      i=i+1; sTopol.msize = varargin{i}; 
+     case 'labels',     i=i+1; labels = varargin{i};
+     case 'name',       i=i+1; name = varargin{i};
+     case 'comp_names', i=i+1; comp_names = varargin{i}; 
+     case 'comp_norm',  i=i+1; comp_norm = varargin{i};
+     case 'lattice',    i=i+1; sTopol.lattice = varargin{i};
+     case 'shape',      i=i+1; sTopol.shape = varargin{i}; 
+     case {'topol','som_topol','sTopol'}, i=i+1; sTopol = varargin{i};
+     case 'neigh',      i=i+1; neigh = varargin{i};
+      % unambiguous values
+     case {'hexa','rect'}, sTopol.lattice = varargin{i};
+     case {'sheet','cyl','toroid'}, sTopol.shape = varargin{i}; 
+     case {'gaussian','cutgauss','ep','bubble'}, neigh = varargin{i};
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}(1).type, 
+     case 'som_topol', sTopol = varargin{i};
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_map_struct) Ignoring invalid argument #' num2str(i+1)]); 
+  end
+  i = i+1; 
+end
+
+% create the SOM
+codebook = rand(prod(sTopol.msize),dim); 
+sTrain = som_set('som_train','time',datestr(now,0),'mask',mask);
+sMap = som_set('som_map','codebook',codebook,'topol',sTopol,...
+                         'neigh',neigh,'labels',labels,'mask',mask,...
+                         'comp_names',comp_names,'name',name,...
+                         'comp_norm',comp_norm,'trainhist',sTrain);
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_mdist.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,89 @@
+function Md = som_mdist(D,q,mask,Ne)
+
+% SOM_MDIST Mutual (or pairwise) distance matrix for the given data.
+% 
+%   Md = som_mdist(D,[q],[mask],[Ne])
+%
+%    Md = som_mdist(D); 
+%    Md = som_mdist(D,Inf); 
+%    Md = som_mdist(D,2,Ne); 
+%
+%  Input and output arguments ([]'s are optional):
+%   D        (matrix) size dlen x dim, the data set
+%            (struct) map or data struct
+%   [q]      (scalar) distance norm, default = 2
+%   [mask]   (vector) size dim x 1, the weighting mask
+%   [Ne]     (matrix) size dlen x dlen, sparse matrix 
+%                     indicating which distances should be 
+%                     calculated (ie. less than Infinite) 
+%
+% See also PDIST. 
+
+% Copyright (c) 2000 by Juha Vesanto
+% Contributed to SOM Toolbox on XXX by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta juuso 220800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% mask
+if nargin<3, mask = []; end
+
+% the data
+if isstruct(D), 
+  switch D.type, 
+   case 'som_map', if isempty(mask), mask = D.mask; end, D = D.codebook; 
+   case 'som_data', D = D.data; 
+   otherwise, error('Bad first argument');
+  end
+end
+nans = sum(isnan(D),2);
+if any(nans>0), 
+  D(find(nans>0),:) = 0; 
+  warning('Distances of vectors with NaNs are not calculated.'); 
+end
+[dlen dim] = size(D);
+
+% distance norm
+if nargin<2 | isempty(q) | isnan(q), q = 2; end
+
+% mask
+if isempty(mask), mask = ones(dim,1); end
+
+% connections 
+if nargin<4, Ne = []; end
+if ~isempty(Ne), 
+  l = size(Ne,1); Ne([0:l-1]*l+[1:l]) = 1; % set diagonal elements = 1
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+m = mask; 
+o = ones(dlen,1); 
+l = dlen; 
+Md = zeros(dlen);
+calculate_all = isempty(Ne); 
+
+if ~calculate_all, Md(Ne==0) = Inf; end
+
+for i=1:l-1,
+  j=(i+1):l; 
+  if ~calculate_all, j=find(Ne(i,j))+i; end
+  C=D(j,:)-D(i*o(1:length(j)),:);
+  switch q, 
+   case 1,    Md(j,i)=abs(C)*m;
+   case 2,    Md(j,i)=sqrt((C.^2)*m);  
+   case Inf,  Md(j,i)=max(diag(m)*abs(C),[],2);
+   otherwise, Md(j,i)=((abs(C).^q)*m).^(1/q);
+  end   
+  Md(i,j) = Md(j,i)';
+end
+
+Md(find(nans>0),:) = NaN; 
+Md(:,find(nans>0)) = NaN; 
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_modify_dataset.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,247 @@
+function sD = som_modify_dataset(sD,action,varargin)
+
+%SOM_MODIFY_DATASET Add or remove components or samples to/from a data struct.
+%
+% sD = som_modify_dataset(sD, 'addcomp', D, [indsto], [cnames})
+% sD = som_modify_dataset(sD, 'addsamp', D, [indsto], ['norm'])
+% sD = som_modify_dataset(sD, 'removecomp', [inds])
+% sD = som_modify_dataset(sD, 'removesamp', inds)
+% sD = som_modify_dataset(sD, 'extractcomp', [inds])
+% sD = som_modify_dataset(sD, 'extractsamp', inds)
+% sD = som_modify_dataset(sD, 'movecomp', inds, indsto)
+% sD = som_modify_dataset(sD, 'movesamp', inds, indsto)
+%
+%  Input and output arguments ([]'s are optional)
+%   sD      (struct) data struct
+%   action  (string) 'addcomp', 'addsamp', 'removecomp', 'removesamp', 
+%                    'extractcomp', 'extractsamp', 'movecomp', or 'movesamp' 
+%
+%   other input arguments depend on the action
+%
+%   'addcomp': 
+%   D        (matrix) data matrix, size [dlen x d]
+%            (struct) data struct, size of .data field [dlen x d]
+%   [indsto] (vector) new indeces of the components, length=d
+%   [cnames] (cellstr) of size d x 1, the component names
+%
+%   'addsamp': 
+%   D        (matrix) data matrix, size [n x dim] 
+%   [indsto] (vector) new indeces of the samples, length=n
+%   ['norm'] (string) specified if the normalization procedure
+%                     should be applied to the new samples
+%
+%   'removecomp', 'extractcomp': 
+%   [inds]   (vector) indeces of the components to be removed/extracted. 
+%                     If not given, a prompt will appear from which the
+%                     user can select the appropriate components.
+%
+%   'removesamp', 'extractsamp': 
+%   inds     (vector) indeces of the samples to be removed/extracted
+%
+%   'movecomp', 'movesamp': 
+%   inds     (vector) indeces of the components/samples to be moved
+%   indsto   (vector) new indeces of the components/samples 
+%
+% See also SOM_DATA_STRUCT.
+
+% Copyright (c) 2000 by Juha Vesanto
+% Contributed to SOM Toolbox on June 16th, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta juuso 200400 160600 280800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+[dlen dim] = size(sD.data);
+
+switch action, 
+  case 'addcomp',  
+    D = varargin{1};     
+    if isstruct(D), [n d] = size(D.data); else [n d] = size(D); end
+    if n ~= dlen, error('The number of samples in the data struct and new data should match.'); end
+    indsto = []; 
+    cnames = []; 
+    for i=2:length(varargin), 
+      if isnumeric(varargin{i}), 
+	indsto = varargin{i}; 
+	if length(indsto) ~= d, 
+	  error('The number of indeces should match the number of new components'); 
+	end
+      else
+	if ischar(varargin{i}), cnames = cellstr(varargin{i}); 
+	elseif iscellstr(varargin{i}), cnames = varargin{i}; 
+	else
+	  error(['[som_modify_dataset] Unrecognized argument #' num2str(i+1)]); 
+	end	
+	if length(cnames) ~= d, 
+	  error('The number of component names should match the number of new components'); 
+	end
+      end
+    end
+ case 'addsamp',
+  D = varargin{1};
+  if isstruct(D), 
+    lab = D.labels; 
+    if isfield(D,'data'), D = D.data; else D = D.codebook; end
+  else lab = []; 
+  end
+  [n d] = size(D); 
+  if d ~= dim, 
+    error(['The dimensions of the old and new data sets should match.']); 
+  end
+  norm = 0; 
+  indsto = []; 
+  for i=2:length(varargin),
+    if ischar(varargin{i}) & strcmp(varargin{i},'norm'), norm = 1; 
+    elseif isnumeric(varargin{i}), 
+      indsto = varargin{i}; 
+      if length(indsto) ~= n, 
+	error(['The number of new indeces should match the number of new' ...
+	       ' samples']); 
+      end
+    else
+      warning(['[som_modify_dataset] Ignoring unrecognized argument #', ...
+	       num2str(i+2)]);
+    end
+  end
+ case 'removecomp',
+  if length(varargin)>0, 
+    inds = varargin{1};
+  else
+    [inds, ok] = listdlg('ListString',sD.comp_names, 'PromptString', ...
+                         'Components', 'Name', 'Remove components', 'uh', 25);
+    if ~ok, return; end
+  end
+  if min(inds)<1 | max(inds)>dim, 
+    error('The component indeces must be within [1,dim]'); 
+  end
+ case 'removesamp',
+  inds = varargin{1};
+  if min(inds)<1 | max(inds)>dlen, 
+    error('The sample indeces must be within [1,dlen]'); 
+  end
+ case 'extractcomp',
+  if length(varargin)>0, 
+    inds = varargin{1};
+  else
+    [inds, ok] = listdlg('ListString',sD.comp_names, 'PromptString',... 
+                         'Components', 'Name', 'Extract components', 'uh', 25);
+    if ~ok, return; end
+  end
+  if min(inds)<1 | max(inds)>dim, 
+    error('The component indeces must be within [1,dim]'); 
+  end
+ case 'extractsamp',
+  inds = varargin{1};
+  if min(inds)<1 | max(inds)>dlen, 
+    error('The sample indeces must be within [1,dlen]'); 
+  end
+ case 'movecomp',
+  inds = varargin{1};
+  indsto = varargin{2};
+  if min(inds)<1 | max(inds)>dim | min(indsto)<1 | max(indsto)>dim, 
+    error('The component indeces must be within [1,dim]'); 
+  end
+ case 'movesamp',
+  inds = varargin{1};
+  indsto = varargin{2};
+  if min(inds)<1 | max(inds)>dlen | min(indsto)<1 | max(indsto)>dlen, 
+    error('The sample indeces must be within [1,dlen]'); 
+  end
+ otherwise, 
+  error('Unrecognized action mode');
+end   
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+switch action, 
+  case 'addcomp', 
+    if isstruct(D),       
+      sD.data = [sD.data, D.data]; 
+      sD.comp_names(dim+[1:d]) = D.comp_names; 
+      sD.comp_norm(dim+[1:d]) = D.comp_norm; 
+      sD = som_label(sD,'add',1:dlen,D.labels);
+    else
+      sD.data = [sD.data, D];
+      if isempty(cnames), 
+	for i=1:d, sD.comp_names(dim+i) = {sprintf('Variable%d',i+dim)}; end
+      else
+	sD.comp_names(dim+[1:d]) = cnames; 
+      end
+      for i=1:d, sD.comp_norm(dim+i) = {[]}; end
+    end
+    if ~isempty(indsto), 
+      sD = som_modify_dataset(sD,'movecomp',dim+[1:d],indsto);
+    end
+
+  case 'addsamp', 
+    if norm, D = som_normalize(D,sD); end
+    sD.data = [sD.data; D]; 
+    nl = size(sD.labels,2); 
+    sD.labels(dlen+[1:n],1:nl) = {''};
+    if ~isempty(lab), 
+      nl2 = size(lab,2); 
+      if nl2>nl, sD.labels(1:dlen,nl+[1:(nl2-nl)]) = {''}; end
+      sD.labels(dlen+[1:n],1:nl2) = lab; 
+    end
+    if ~isempty(indsto), 
+      sD = som_modify_dataset(sD,'movesamp',dlen+[1:n],indsto);
+    end
+
+  case 'removecomp', 
+    includeinds = 1:dim; 
+    includeinds(inds) = 0; 
+    sD = som_modify_dataset(sD,'extractcomp',find(includeinds));
+
+  case 'removesamp', 
+    includeinds = 1:dlen; 
+    includeinds(inds) = 0; 
+    sD = som_modify_dataset(sD,'extractsamp',find(includeinds));
+
+  case 'extractcomp', 
+    sD.data = sD.data(:,inds);
+    sD.comp_names = sD.comp_names(inds);
+    sD.comp_norm = sD.comp_norm(inds);    
+
+  case 'extractsamp', 
+    sD.data = sD.data(inds,:);
+    sD.labels = sD.labels(inds,:);
+
+  case 'movecomp', 
+    [indsto,order] = sort(indsto);
+    inds = inds(order);
+    oldinds = 1:dim; 
+    oldinds(inds) = 0; 
+    newinds = oldinds(oldinds>0);
+    for i=1:length(indsto),
+      ifrom = inds(i); ito = indsto(i);
+      if ito==1, newinds = [ifrom, newinds];
+      else newinds = [newinds(1:ito-1), ifrom, newinds(ito:end)];
+      end
+    end
+    sD.data = sD.data(:,newinds); 
+    sD.comp_names = sD.comp_names(:,newinds); 
+    sD.comp_norm = sD.comp_norm(:,newinds); 
+
+  case 'movesamp', 
+    [indsto,order] = sort(indsto);
+    inds = inds(order);
+    oldinds = 1:dim; 
+    oldinds(inds) = 0; 
+    newinds = oldinds(oldinds>0);
+    for i=1:length(indsto),
+      ifrom = inds(i); ito = indsto(i);
+      if ito==1, newinds = [ifrom, newinds];
+      else newinds = [newinds(1:ito-1), ifrom, newinds(ito:end)];
+      end
+    end
+    sD.data = sD.data(newinds,:);
+    sD.labels = sD.labels(newinds,:);
+
+end
+
+%som_set(sD);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_neighborhood.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,157 @@
+function Ne = som_neighborhood(Ne1,n)
+
+%SOM_NEIGHBORHOOD Calculate neighborhood matrix.
+%
+% Ne = som_neighborhood(Ne1,n)
+% 
+%  Ne = som_neighborhood(Ne1);
+%  Ne = som_neighborhood(som_unit_neighs(topol),2);
+%
+%  Input and output arguments ([]'s are optional): 
+%   Ne1       (matrix, size [munits m]) a sparse matrix indicating
+%                      the units in 1-neighborhood for each map unit
+%   [n]       (scalar) maximum neighborhood which is calculated, default=Inf
+% 
+%   Ne        (matrix, size [munits munits]) neighborhood matrix,
+%                      each row (and column) contains neighborhood
+%                      values from the specific map unit to all other
+%                      map units, or Inf if the value is unknown.
+%
+% For more help, try 'type som_neighborhood' or check out online documentation.
+% See also SOM_UNIT_NEIGHS, SOM_UNIT_DISTS, SOM_UNIT_COORDS, SOM_CONNECTION.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_neighborhood
+%
+% PURPOSE
+%
+% Calculate to which neighborhood each map unit belongs to relative to
+% each other map unit, given the units in 1-neighborhood of each unit.
+%
+% SYNTAX
+%
+%  Ne = som_neighborhood(Ne1);
+%  Ne = som_neighborhood(Ne1,n);
+%
+% DESCRIPTION
+%
+% For each map unit, finds the minimum neighborhood to which it belongs
+% to relative to each other map unit. Or, equivalently, for each map 
+% unit, finds which units form its k-neighborhood, where k goes from 
+% 0 to n. 
+%
+% The neighborhood is calculated iteratively using the reflexivity of
+% neighborhood.
+%     let  N1i  be the 1-neighborhood set a unit i
+% and let  N11i be the set of units in the 1-neighborhood of any unit j in N1i
+%     then N2i  (the 2-neighborhood set of unit i) is N11i \ N1i
+%
+% Consider, for example, the case of a 5x5 map. The neighborhood in case of
+% 'rect' and 'hexa' lattices (and 'sheet' shape) for the unit at the
+% center of the map are depicted below: 
+% 
+%   'rect' lattice           'hexa' lattice
+%   --------------           --------------
+%   4  3  2  3  4            3  2  2  2  3
+%   3  2  1  2  3             2  1  1  2  3
+%   2  1  0  1  2            2  1  0  1  2
+%   3  2  1  2  3             2  1  1  2  3
+%   4  3  2  3  4            3  2  2  2  3
+% 
+% Because the iterative procedure is rather slow, the neighborhoods 
+% are calculated upto given maximal value. The uncalculated values
+% in the returned matrix are Inf:s.
+% 
+% REQUIRED INPUT ARGUMENTS
+% 
+%  Ne1   (matrix) Each row contains 1, if the corresponding unit is adjacent 
+%                 for that map unit, 0 otherwise. This can be calculated 
+%                 using SOM_UNIT_NEIGHS. The matrix can be sparse.
+%                 Size munits x munits.
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+%  n     (scalar) Maximal neighborhood value which is calculated, 
+%                 Inf by default (all neighborhoods).
+%
+% OUTPUT ARGUMENTS
+%
+%  Ne    (matrix) neighborhood values for each map unit, size is
+%                 [munits, munits]. The matrix contains the minimum
+%                 neighborhood of unit i, to which unit j belongs, 
+%                 or Inf, if the neighborhood was bigger than n.
+%
+% EXAMPLES
+%
+%  Ne = som_neighborhood(Ne1,1);    % upto 1-neighborhood
+%  Ne = som_neighborhood(Ne1,Inf);  % all neighborhoods
+%  Ne = som_neighborhood(som_unit_neighs(topol),4);
+%
+% SEE ALSO
+% 
+%  som_unit_neighs   Calculate units in 1-neighborhood for each map unit.
+%  som_unit_coords   Calculate grid coordinates.
+%  som_unit_dists    Calculate interunit distances.
+%  som_connection    Connection matrix.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 141097
+% Version 2.0beta juuso 101199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check arguments 
+
+error(nargchk(1, 2, nargin));
+
+if nargin<2, n=Inf; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Action
+
+% initialize
+if issparse(Ne1), Ne = full(Ne1); else Ne = Ne1; end
+clear Ne1
+[munits dummy] = size(Ne);
+Ne(find(Ne==0)) = NaN;
+for i=1:munits, Ne(i,i)=0; end
+
+% Calculate neighborhood distance for each unit using reflexsivity
+% of neighborhood: 
+%   let  N1i be the 1-neighborhood set a unit i
+%   then N2i is the union of all map units, belonging to the 
+%        1-neighborhood of any unit j in N1i, not already in N1i
+k=1; 
+if n>1, 
+  fprintf(1,'Calculating neighborhood: 1 '); 
+  N1 = Ne; 
+  N1(find(N1~=1)) = 0;   
+end
+while k<n & any(isnan(Ne(:))),
+  k=k+1;
+  fprintf(1,'%d ',k);
+  for i=1:munits,
+    candidates = isnan(Ne(i,:));              % units not in any neighborhood yet
+    if any(candidates), 
+      prevneigh = find(Ne(i,:)==k-1);         % neighborhood (k-1)
+      N1_of_prevneigh = any(N1(prevneigh,:)); % union of their N1:s
+      Nn = find(N1_of_prevneigh & candidates); 
+      if length(Nn), Ne(i,Nn) = k; Ne(Nn,i) = k; end
+    end
+  end
+end
+if n>1, fprintf(1,'\n'); end
+
+% finally replace all uncalculated distance values with Inf
+Ne(find(isnan(Ne))) = Inf;
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% faster version? 
+
+l = size(Ne1,1); Ne1([0:l-1]*(l+1)+1) = 1; Ne = full(Ne1); M0 = Ne1; k = 2; 
+while any(Ne(:)==0), M1=(M0*Ne1>0); Ne(find(M1-M0))=k; M0=M1; k=k+1; end
+Ne([0:l-1]*(l+1)+1) = 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_neighbors.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+function Ne = som_neighbors(sM,neigh)
+
+% Ne = som_neighbors(sM,neigh)
+%
+% sM      (struct) map or data struct
+%         (matrix) data matrix, size n x dim
+% [neigh] (string) 'kNN' or 'Nk' (which is valid for a SOM only)
+%                  for example '6NN' or 'N1'
+%                  default is '10NN' for a data set and 'N1' for SOM
+%
+% Ne      (matrix) size n x n, a sparse matrix
+%                  indicating the neighbors of each sample by value 1 
+%                  (note: the unit itself also has value 0)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if isstruct(sM), 
+  switch sM.type, 
+   case 'som_map',  M = sM.codebook; 
+   case 'som_data', M = sM.data; sM = []; 
+  end
+else
+  M = sM; 
+  sM = []; 
+end
+
+n = size(M,1);
+
+if nargin<2, 
+  if isempty(sM), neigh = '10NN'; else neigh = 'N1'; end
+end
+
+if strcmp(neigh(end-1:end),'NN'),
+  k  = str2num(neigh(1:end-2));
+  kmus = som_bmus(M,M,1:k+1);
+  Ne = sparse(n,n);
+  for i=1:n, Ne(i,kmus(i,:)) = 1; end
+else
+  if ~isstruct(sM), error('Prototypes must be in a map struct.'); end      
+  k  = str2num(neigh(2:end));
+  N1 = som_unit_neighs(sM);    
+  Ne = sparse(som_neighborhood(N1,k)<=k);
+end
+Ne([0:n-1]*n+[1:n]) = 0; % remove self from neighbors
+
+return;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_neighf.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,117 @@
+function H = som_neighf(sMap,radius,neigh,ntype)
+
+%SOM_NEIGHF Return neighborhood function values.
+%
+% H = som_neighf(sMap,[radius],[neigh],[ntype]);
+% 
+%  Input and output arguments ([]'s are optional): 
+%   sMap     (struct) map or topology struct
+%   [radius] (scalar) neighborhood radius (by default, the last used value
+%                     in sMap.trainhist is used, or 1 if that is unavailable)
+%   [neigh]  (string) neighborhood function type (by default, ..., or 
+%                     'gaussian' if that is unavailable)
+%   [ntype]  (string) 'normal' (default), 'probability' or 'mirror'
+%
+%   H        (matrix) [munits x munits] neighborhood function values from 
+%                     each map unit to each other map unit
+%
+% For more help, try 'type som_batchtrain' or check out online documentation.
+% See also  SOM_MAKE, SOM_SEQTRAIN, SOM_TRAIN_STRUCT.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check arguments 
+
+% defaults
+rdefault = 1; 
+ndefault = 'gaussian';
+tdefault = 'normal';
+
+% map 
+switch sMap.type, 
+ case 'som_map',   
+   sTopol = sMap.topol; 
+   sTrain = sMap.trainhist(end); 
+   if isempty(sTrain.radius_fin) | isnan(sTrain.radius_fin), 
+     rdefault = 1; 
+   else
+     rdefault = sTrain.radius_fin;
+   end
+   if ~isempty(sTrain.neigh) & ~isnan(sTrain.neigh), 
+     ndefault = sTrain.neigh;
+   end
+ case 'som_topol', sTopol = sMap; 
+end
+munits = prod(sTopol.msize); 
+
+% other parameters
+if nargin<2 | isempty(radius), radius = rdefault; end
+if nargin<3 | isempty(neigh), neigh = ndefault; end
+if nargin<4 | isempty(ntype), ntype = tdefault; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialize
+                                   
+% basic neighborhood 
+Ud = som_unit_dists(sTopol);
+Ud = Ud.^2;
+radius = radius.^2;
+if radius==0, radius = eps; end % zero neighborhood radius may cause div-by-zero error
+
+switch ntype, 
+case 'normal', 
+    H = neighf(neigh,Ud,radius); 
+case 'probability', 
+    H = neighf(neigh,Ud,radius); 
+    for i=1:munits, H(i,:) = H(i,:)/sum(H(i,:)); end
+case 'mirror', % only works for 2-dim grid!!!
+    H  = zeros(munits,munits);
+    Co = som_unit_coords(sTopol); 
+    for i=-1:1,
+        for j=-1:1,
+           Ud = gridmirrordist(Co,i,j);
+           H  = H + neighf(neigh,Ud,radius); 
+        end
+    end    
+end     
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+function H = neighf(neigh,Ud,radius)
+
+ switch neigh, 
+ case 'bubble',   H = (Ud<=radius); 
+ case 'gaussian', H = exp(-Ud/(2*radius)); 
+ case 'cutgauss', H = exp(-Ud/(2*radius)) .* (Ud<=radius);
+ case 'ep',       H = (1-Ud/radius) .* (Ud<=radius);
+ end  
+ return; 
+
+function Ud = gridmirrordist(Co,mirrorx,mirrory)
+
+ [munits,mdim] = size(Co); 
+ if mdim>2, error('Mirrored neighborhood only works for 2-dim map grids.'); end
+   
+ % width and height of the grid
+ dx = max(Co(:,1))-min(Co(:,1));
+ dy = max(Co(:,2))-min(Co(:,2));
+
+ % calculate distance from each location to each other location
+ Ud = zeros(munits,munits);
+ for i=1:munits, 
+   inds = [i:munits]; 
+   coi = Co(i,:); % take hexagonal shift into account
+   coi(1) = coi(1)*(1-2*(mirrorx~=0)) + 2*dx*(mirrorx==1); % +mirrorx * step
+   coi(2) = coi(2)*(1-2*(mirrory~=0)) + 2*dy*(mirrory==1); % +mirrory * step
+   Dco = (Co(inds,:) - coi(ones(munits-i+1,1),:))'; 
+   Ud(i,inds) = sqrt(sum(Dco.^2));
+   Ud(inds,i) = Ud(i,inds)'; 
+ end
+ return; 
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_norm_variable.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,533 @@
+function [x,sNorm] = som_norm_variable(x, method, operation)
+
+%SOM_NORM_VARIABLE Normalize or denormalize a scalar variable.
+%
+% [x,sNorm] = som_norm_variable(x, method, operation)
+%
+%   xnew = som_norm_variable(x,'var','do');
+%   [dummy,sN] = som_norm_variable(x,'log','init');
+%   [xnew,sN]  = som_norm_variable(x,sN,'do');
+%   xorig      = som_norm_variable(xnew,sN,'undo');
+%
+%  Input and output arguments: 
+%   x         (vector) a set of values of a scalar variable for
+%                      which the (de)normalization is performed.
+%                      The processed values are returned.
+%   method    (string) identifier for a normalization method: 'var',
+%                      'range', 'log', 'logistic', 'histD', or 'histC'.
+%                      A normalization struct with default values is created.
+%             (struct) normalization struct, or an array of such
+%             (cellstr) first string gives normalization operation, and the
+%                      second gives denormalization operation, with x 
+%                      representing the variable, for example: 
+%                      {'x+2','x-2}, or {'exp(-x)','-log(x)'} or {'round(x)'}.
+%                      Note that in the last case, no denorm operation is 
+%                      defined. 
+%   operation (string) the operation to be performed: 'init', 'do' or 'undo'
+%                     
+%   sNorm     (struct) updated normalization struct/struct array
+%
+% For more help, try 'type som_norm_variable' or check out online documentation.
+% See also SOM_NORMALIZE, SOM_DENORMALIZE.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_norm_variable
+%
+% PURPOSE
+%
+% Initialize, apply and undo normalizations on a given vector of
+% scalar values.
+%
+% SYNTAX
+%
+%  xnew = som_norm_variable(x,method,operation)
+%  xnew = som_norm_variable(x,sNorm,operation)
+%  [xnew,sNorm] = som_norm_variable(...)
+%
+% DESCRIPTION
+%
+% This function is used to initialize, apply and undo normalizations
+% on scalar variables. It is the low-level function that upper-level
+% functions SOM_NORMALIZE and SOM_DENORMALIZE utilize to actually (un)do
+% the normalizations.
+%
+% Normalizations are typically performed to control the variance of 
+% vector components. If some vector components have variance which is
+% significantly higher than the variance of other components, those
+% components will dominate the map organization. Normalization of 
+% the variance of vector components (method 'var') is used to prevent 
+% that. In addition to variance normalization, other methods have
+% been implemented as well (see list below). 
+%
+% Usually normalizations convert the variable values so that they no 
+% longer make any sense: the values are still ordered, but their range 
+% may have changed so radically that interpreting the numbers in the 
+% original context is very hard. For this reason all implemented methods
+% are (more or less) revertible. The normalizations are monotonic
+% and information is saved so that they can be undone. Also, the saved
+% information makes it possible to apply the EXACTLY SAME normalization
+% to another set of values. The normalization information is determined
+% with 'init' operation, while 'do' and 'undo' operations are used to
+% apply or revert the normalization. 
+%
+% The normalization information is saved in a normalization struct, 
+% which is returned as the second argument of this function. Note that 
+% normalization operations may be stacked. In this case, normalization 
+% structs are positioned in a struct array. When applied, the array is 
+% gone through from start to end, and when undone, in reverse order.
+%
+%    method  description
+%
+%    'var'   Variance normalization. A linear transformation which 
+%            scales the values such that their variance=1. This is
+%            convenient way to use Mahalanobis distance measure without
+%            actually changing the distance calculation procedure.
+%
+%    'range' Normalization of range of values. A linear transformation
+%            which scales the values between [0,1]. 
+%
+%    'log'   Logarithmic normalization. In many cases the values of
+%            a vector component are exponentially distributed. This 
+%            normalization is a good way to get more resolution to
+%            (the low end of) that vector component. What this 
+%            actually does is a non-linear transformation: 
+%               x_new = log(x_old - m + 1) 
+%            where m=min(x_old) and log is the natural logarithm. 
+%            Applying the transformation to a value which is lower 
+%            than m-1 will give problems, as the result is then complex.
+%            If the minimum for values is known a priori, 
+%            it might be a good idea to initialize the normalization with
+%              [dummy,sN] = som_norm_variable(minimum,'log','init');
+%            and normalize only after this: 
+%              x_new = som_norm_variable(x,sN,'do');
+%
+%    'logistic' or softmax normalization. This normalization ensures
+%            that all values in the future, too, are within the range
+%            [0,1]. The transformation is more-or-less linear in the 
+%            middle range (around mean value), and has a smooth 
+%            nonlinearity at both ends which ensures that all values
+%            are within the range. The data is first scaled as in 
+%            variance normalization: 
+%               x_scaled = (x_old - mean(x_old))/std(x_old)
+%            and then transformed with the logistic function
+%               x_new = 1/(1+exp(-x_scaled))
+% 
+%    'histD' Discrete histogram equalization. Non-linear. Orders the 
+%            values and replaces each value by its ordinal number. 
+%            Finally, scales the values such that they are between [0,1].
+%            Useful for both discrete and continuous variables, but as 
+%            the saved normalization information consists of all 
+%            unique values of the initialization data set, it may use
+%            considerable amounts of memory. If the variable can get
+%            more than a few values (say, 20), it might be better to
+%            use 'histC' method below. Another important note is that
+%            this method is not exactly revertible if it is applied
+%            to values which are not part of the original value set.
+%            
+%    'histC' Continuous histogram equalization. Actually, a partially
+%            linear transformation which tries to do something like 
+%            histogram equalization. The value range is divided to 
+%            a number of bins such that the number of values in each
+%            bin is (almost) the same. The values are transformed 
+%            linearly in each bin. For example, values in bin number 3
+%            are scaled between [3,4[. Finally, all values are scaled
+%            between [0,1]. The number of bins is the square root
+%            of the number of unique values in the initialization set,
+%            rounded up. The resulting histogram equalization is not
+%            as good as the one that 'histD' makes, but the benefit
+%            is that it is exactly revertible - even outside the 
+%            original value range (although the results may be funny).
+%
+%    'eval'  With this method, freeform normalization operations can be 
+%            specified. The parameter field contains strings to be 
+%            evaluated with 'eval' function, with variable name 'x'
+%            representing the variable itself. The first string is 
+%            the normalization operation, and the second is a 
+%            denormalization operation. If the denormalization operation
+%            is empty, it is ignored.
+% 
+% INPUT ARGUMENTS
+%
+%   x          (vector) The scalar values to which the normalization      
+%                       operation is applied.
+%                     
+%   method              The normalization specification.
+%              (string) Identifier for a normalization method: 'var', 
+%                       'range', 'log', 'logistic', 'histD' or 'histC'. 
+%                       Corresponding default normalization struct is created.
+%              (struct) normalization struct 
+%              (struct array) of normalization structs, applied to 
+%                       x one after the other
+%              (cellstr) of length 
+%              (cellstr array) first string gives normalization operation, and 
+%                       the second gives denormalization operation, with x 
+%                       representing the variable, for example: 
+%                       {'x+2','x-2}, or {'exp(-x)','-log(x)'} or {'round(x)'}.
+%                       Note that in the last case, no denorm operation is 
+%                       defined. 
+%
+%               note: if the method is given as struct(s), it is
+%                     applied (done or undone, as specified by operation)
+%                     regardless of what the value of '.status' field
+%                     is in the struct(s). Only if the status is
+%                     'uninit', the undoing operation is halted.
+%                     Anyhow, the '.status' fields in the returned 
+%                     normalization struct(s) is set to approriate value.
+%   
+%   operation  (string) The operation to perform: 'init' to initialize
+%                       the normalization struct, 'do' to perform the 
+%                       normalization, 'undo' to undo the normalization, 
+%                       if possible. If operation 'do' is given, but the
+%                       normalization struct has not yet been initialized,
+%                       it is initialized using the given data (x).
+%
+% OUTPUT ARGUMENTS
+% 
+%   x        (vector) Appropriately processed values. 
+%
+%   sNorm    (struct) Updated normalization struct/struct array. If any,
+%                     the '.status' and '.params' fields are updated.
+% 
+% EXAMPLES
+%
+%  To initialize and apply a normalization on a set of scalar values: 
+%
+%    [x_new,sN] = som_norm_variable(x_old,'var','do'); 
+%
+%  To just initialize, use: 
+% 
+%    [dummy,sN] = som_norm_variable(x_old,'var','init'); 
+% 
+%  To undo the normalization(s): 
+%
+%    x_orig = som_norm_variable(x_new,sN,'undo');
+%
+%  Typically, normalizations of data structs/sets are handled using
+%  functions SOM_NORMALIZE and SOM_DENORMALIZE. However, when only the
+%  values of a single variable are of interest, SOM_NORM_VARIABLE may 
+%  be useful. For example, assume one wants to apply the normalization
+%  done on a component (i) of a data struct (sD) to a new set of values 
+%  (x) of that component. With SOM_NORM_VARIABLE this can be done with: 
+%
+%    x_new = som_norm_variable(x,sD.comp_norm{i},'do'); 
+% 
+%  Now, as the normalizations in sD.comp_norm{i} have already been 
+%  initialized with the original data set (presumably sD.data), 
+%  the EXACTLY SAME normalization(s) can be applied to the new values.
+%  The same thing can be done with SOM_NORMALIZE function, too: 
+%
+%    x_new = som_normalize(x,sD.comp_norm{i}); 
+%
+%  Or, if the new data set were in variable D - a matrix of same
+%  dimension as the original data set: 
+%
+%    D_new = som_normalize(D,sD,i);
+%
+% SEE ALSO
+%  
+%  som_normalize    Add/apply/redo normalizations for a data struct/set.
+%  som_denormalize  Undo normalizations of a data struct/set.
+
+% Copyright (c) 1998-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 151199 170400 150500
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(3, 3, nargin));  % check no. of input arguments is correct
+
+% method
+sNorm = []; 
+if ischar(method) 
+  if any(strcmp(method,{'var','range','log','logistic','histD','histC'})), 
+    sNorm = som_set('som_norm','method',method);
+  else 
+    method = cellstr(method); 
+  end
+end
+if iscell(method), 
+  if length(method)==1 & isstruct(method{1}), sNorm = method{1}; 
+  else
+    if length(method)==1 | isempty(method{2}), method{2} = 'x'; end
+    sNorm = som_set('som_norm','method','eval','params',method);
+  end
+else 
+  sNorm = method; 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+order = [1:length(sNorm)]; 
+if length(order)>1 & strcmp(operation,'undo'), order = order(end:-1:1); end
+
+for i=order, 
+
+  % initialize
+  if strcmp(operation,'init') | ...
+     (strcmp(operation,'do') & strcmp(sNorm(i).status,'uninit')), 
+
+    % case method = 'hist'
+    if strcmp(sNorm(i).method,'hist'), 
+      inds = find(~isnan(x) & ~isinf(x));
+      if length(unique(x(inds)))>20, sNorm(i).method = 'histC'; 
+      else sNorm{i}.method = 'histD'; end
+    end
+
+    switch(sNorm(i).method), 
+    case 'var',   params = norm_variance_init(x);
+    case 'range', params = norm_scale01_init(x);
+    case 'log',   params = norm_log_init(x);
+    case 'logistic', params = norm_logistic_init(x);
+    case 'histD', params = norm_histeqD_init(x);
+    case 'histC', params = norm_histeqC_init(x);
+    case 'eval',  params = sNorm(i).params; 
+    otherwise, 
+      error(['Unrecognized method: ' sNorm(i).method]); 
+    end
+    sNorm(i).params = params;
+    sNorm(i).status = 'undone';
+  end
+
+  % do / undo
+  if strcmp(operation,'do'), 
+    switch(sNorm(i).method), 
+    case 'var',   x = norm_scale_do(x,sNorm(i).params);
+    case 'range', x = norm_scale_do(x,sNorm(i).params);
+    case 'log',   x = norm_log_do(x,sNorm(i).params);
+    case 'logistic', x = norm_logistic_do(x,sNorm(i).params);
+    case 'histD', x = norm_histeqD_do(x,sNorm(i).params);
+    case 'histC', x = norm_histeqC_do(x,sNorm(i).params);
+    case 'eval',  x = norm_eval_do(x,sNorm(i).params);
+    otherwise, 
+      error(['Unrecognized method: ' sNorm(i).method]);
+    end
+    sNorm(i).status = 'done';
+
+  elseif strcmp(operation,'undo'), 
+
+    if strcmp(sNorm(i).status,'uninit'), 
+      warning('Could not undo: uninitialized normalization struct.')
+      break;
+    end
+    switch(sNorm(i).method), 
+    case 'var',   x = norm_scale_undo(x,sNorm(i).params);
+    case 'range', x = norm_scale_undo(x,sNorm(i).params);
+    case 'log',   x = norm_log_undo(x,sNorm(i).params);    
+    case 'logistic', x = norm_logistic_undo(x,sNorm(i).params);
+    case 'histD', x = norm_histeqD_undo(x,sNorm(i).params);
+    case 'histC', x = norm_histeqC_undo(x,sNorm(i).params);
+    case 'eval',  x = norm_eval_undo(x,sNorm(i).params);
+    otherwise, 
+      error(['Unrecognized method: ' sNorm(i).method]);
+    end
+    sNorm(i).status = 'undone';
+
+  elseif ~strcmp(operation,'init'),
+
+    error(['Unrecognized operation: ' operation])
+
+  end
+end  
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+% linear scaling
+
+function p = norm_variance_init(x)
+  inds = find(~isnan(x) & isfinite(x));
+  p = [mean(x(inds)), std(x(inds))];
+  if p(2) == 0, p(2) = 1; end
+  %end of norm_variance_init
+
+function p = norm_scale01_init(x)
+  inds = find(~isnan(x) & isfinite(x));
+  mi = min(x(inds)); 
+  ma = max(x(inds));
+  if mi == ma, p = [mi, 1]; else p = [mi, ma-mi]; end
+  %end of norm_scale01_init  
+
+function x = norm_scale_do(x,p)
+  x = (x - p(1)) / p(2);
+  % end of norm_scale_do
+
+function x = norm_scale_undo(x,p)
+  x = x * p(2) + p(1);
+  % end of norm_scale_undo
+
+% logarithm
+
+function p = norm_log_init(x)
+  inds = find(~isnan(x) & isfinite(x));
+  p = min(x(inds));
+  % end of norm_log_init
+
+function x = norm_log_do(x,p)
+  x = log(x - p +1); 
+  % if any(~isreal(x)), ok = 0; end
+  % end of norm_log_do 
+
+function x = norm_log_undo(x,p)
+  x = exp(x) -1 + p; 
+  % end of norm_log_undo 
+
+% logistic
+
+function p = norm_logistic_init(x)
+  inds = find(~isnan(x) & isfinite(x));
+  p = [mean(x(inds)), std(x(inds))];
+  if p(2)==0, p(2) = 1; end
+  % end of norm_logistic_init
+
+function x = norm_logistic_do(x,p)
+  x = (x-p(1))/p(2);
+  x = 1./(1+exp(-x));
+  % end of norm_logistic_do
+
+function x = norm_logistic_undo(x,p)
+  x = log(x./(1-x));
+  x = x*p(2)+p(1);
+  % end of norm_logistic_undo
+
+% histogram equalization for discrete values
+
+function p = norm_histeqD_init(x)
+  inds = find(~isnan(x) & ~isinf(x));
+  p = unique(x(inds));
+  % end of norm_histeqD_init
+
+function x = norm_histeqD_do(x,p)
+  bins = length(p);
+  inds = find(~isnan(x) & ~isinf(x))';
+  for i = inds, 
+    [dummy ind] = min(abs(x(i) - p));
+    % data item closer to the left-hand bin wall is indexed after RH wall
+    if x(i) > p(ind) & ind < bins, 
+      x(i) = ind + 1;  
+    else 
+      x(i) = ind;
+    end
+  end
+  x = (x-1)/(bins-1); % normalization between [0,1]
+  % end of norm_histeqD_do 
+
+function x = norm_histeqD_undo(x,p)
+  bins = length(p);
+  x = round(x*(bins-1)+1);
+  inds = find(~isnan(x) & ~isinf(x));
+  x(inds) = p(x(inds));
+  % end of norm_histeqD_undo
+
+% histogram equalization with partially linear functions
+
+function p = norm_histeqC_init(x)
+  % investigate x
+  inds = find(~isnan(x) & ~isinf(x));
+  samples = length(inds);
+  xs = unique(x(inds));
+  mi = xs(1);
+  ma = xs(end);
+  % decide number of limits
+  lims = ceil(sqrt(length(xs))); % 2->2,100->10,1000->32,10000->100
+  % decide limits
+  if lims==1,     
+    p = [mi, mi+1];
+    lims = 2; 
+  elseif lims==2, 
+    p = [mi, ma];
+  else
+    p = zeros(lims,1);   
+    p(1) = mi; 
+    p(end) = ma;
+    binsize = zeros(lims-1,1); b = 1; avebinsize = samples/(lims-1);
+    for i=1:(length(xs)-1), 
+      binsize(b) = binsize(b) + sum(x==xs(i)); 
+      if binsize(b) >= avebinsize, 
+        b = b + 1;
+        p(b) = (xs(i)+xs(i+1))/2;
+      end
+      if b==(lims-1), 
+        binsize(b) = samples-sum(binsize); break;
+      else
+        avebinsize = (samples-sum(binsize))/(lims-1-b);
+      end
+    end
+  end
+  % end of norm_histeqC_init
+
+function x = norm_histeqC_do(x,p)
+  xnew = x; 
+  lims = length(p);
+  % handle values below minimum
+  r = p(2)-p(1); 
+  inds = find(x<=p(1) & isfinite(x)); 
+  if any(inds), xnew(inds) = 0-(p(1)-x(inds))/r; end 
+  % handle values above maximum
+  r = p(end)-p(end-1); 
+  inds = find(x>p(end) & isfinite(x)); 
+  if any(inds), xnew(inds) = lims-1+(x(inds)-p(end))/r; end
+  % handle all other values
+  for i=1:(lims-1), 
+    r0 = p(i); r1 = p(i+1); r = r1-r0; 
+    inds = find(x>r0 & x<=r1); 
+    if any(inds), xnew(inds) = i-1+(x(inds)-r0)/r; end
+  end
+  % scale so that minimum and maximum correspond to 0 and 1
+  x = xnew/(lims-1);
+  % end of norm_histeqC_do
+
+function x = norm_histeqC_undo(x,p)
+  xnew = x; 
+  lims = length(p); 
+  % scale so that 0 and 1 correspond to minimum and maximum
+  x = x*(lims-1);
+
+  % handle values below minimum
+  r = p(2)-p(1); 
+  inds = find(x<=0 & isfinite(x)); 
+  if any(inds), xnew(inds) = x(inds)*r + p(1); end 
+  % handle values above maximum
+  r = p(end)-p(end-1); 
+  inds = find(x>lims-1 & isfinite(x)); 
+  if any(inds), xnew(inds) = (x(inds)-(lims-1))*r+p(end); end
+  % handle all other values
+  for i=1:(lims-1), 
+    r0 = p(i); r1 = p(i+1); r = r1-r0; 
+    inds = find(x>i-1 & x<=i); 
+    if any(inds), xnew(inds) = (x(inds)-(i-1))*r + r0; end
+  end
+  x = xnew;
+  % end of norm_histeqC_undo
+
+% eval
+
+function p = norm_eval_init(method)
+  p = method;
+  %end of norm_eval_init
+
+function x = norm_eval_do(x,p)
+  x_tmp = eval(p{1});
+  if size(x_tmp,1)>=1 & size(x,1)>=1 & ...
+     size(x_tmp,2)==1 & size(x,2)==1,
+    x = x_tmp;
+  end
+  %end of norm_eval_do
+
+function x = norm_eval_undo(x,p)
+  x_tmp = eval(p{2});
+  if size(x_tmp,1)>=1 & size(x,1)>=1 & ...
+     size(x_tmp,2)==1 & size(x,2)==1,
+    x = x_tmp;
+  end
+  %end of norm_eval_undo
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_normalize.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,319 @@
+function sD = som_normalize(sD,method,comps)
+
+%SOM_NORMALIZE (Re)normalize data or add new normalizations.
+%   
+% sS = som_normalize(sS,[method],[comps])               
+%
+%   sS = som_normalize(sD) 
+%   sS = som_normalize(sS,sNorm) 
+%    D = som_normalize(D,'var')
+%   sS = som_normalize(sS,'histC',[1:3 10])
+%
+%  Input and output arguments ([]'s are optional): 
+%   sS                The data to which the normalization is applied.
+%                     The modified and updated data is returned.
+%            (struct) data or map struct
+%            (matrix) data matrix (a matrix is also returned)
+%   [method]          The normalization method(s) to add/use. If missing, 
+%                     or an empty variable ('') is given, the 
+%                     normalizations in sS are used.
+%            (string) identifier for a normalization method to be added: 
+%                     'var', 'range', 'log', 'logistic', 'histD' or 'histC'. 
+%            (struct) Normalization struct, or an array of such. 
+%                     Alternatively, a map/data struct can be given 
+%                     in which case its '.comp_norm' field is used 
+%                     (see below).
+%            (cell array) Of normalization structs. Typically, the
+%                     '.comp_norm' field of a map/data struct. The 
+%                     length of the array must be equal to data dimension.
+%            (cellstr array) norm and denorm operations in a cellstr array
+%                     which are evaluated with EVAL command with variable
+%                     name 'x' reserved for the variable.
+%   [comps]  (vector) the components to which the normalization is
+%                     applied, default is [1:dim] ie. all components
+%
+% For more help, try 'type som_normalize' or check out online documentation.
+% See also SOM_DENORMALIZE, SOM_NORM_VARIABLE, SOM_INFO.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_normalize
+%
+% PURPOSE
+%
+% Add/apply/redo normalization on data structs/sets.
+%
+% SYNTAX
+%
+%  sS = som_normalize(sS)
+%  sS = som_normalize(sS,method)
+%   D = som_normalize(D,sNorm)
+%  sS = som_normalize(sS,csNorm)
+%  sS = som_normalize(...,comps)
+%
+% DESCRIPTION
+%
+% This function is used to (initialize and) add, redo and apply 
+% normalizations on data/map structs/sets. If a data/map struct is given, 
+% the specified normalizations are added to the '.comp_norm' field of the 
+% struct after ensuring that all normalizations specified therein have
+% status 'done'. SOM_NORMALIZE actually uses function SOM_NORM_VARIABLE 
+% to handle the normalization operations, and only handles the data 
+% struct/set specific stuff itself.
+%
+% The different normalization methods are listed below. For more 
+% detailed descriptions, see SOM_NORM_VARIABLE.
+%  
+%   method     description
+%   'var'      Variance is normalized to one (linear operation).
+%   'range'    Values are normalized between [0,1] (linear operation).
+%   'log'      Natural logarithm is applied to the values: 
+%                xnew = log(x-m+1)
+%              where m = min(x).
+%   'logistic' Logistic or softmax trasformation which scales all
+%              possible values between [0,1].
+%   'histD'    Histogram equalization, values scaled between [0,1].
+%   'histC'    Approximate histogram equalization with partially 
+%              linear operations. Values scaled between [0,1].
+%   'eval'     freeform operations
+%  
+% To enable undoing and applying the exactly same normalization to
+% other data sets, normalization information is saved into a 
+% normalization struct, which has the fields: 
+% 
+%   .type   ; struct type, ='som_norm'
+%   .method ; normalization method, a string
+%   .params ; normalization parameters
+%   .status ; string: 'uninit', 'undone' or 'done'
+%
+% Normalizations are always one-variable operations. In the data and map
+% structs the normalization information for each component is saved in the
+% '.comp_norm' field, which is a cell array of length dim. Each cell
+% contains normalizations for one vector component in a struct array of
+% normalization structs. Each component may have different amounts of
+% different kinds of normalizations. Typically, all normalizations are
+% either 'undone' or 'done', but in special situations this may not be the
+% case. The easiest way to check out the status of the normalizations is to
+% use function SOM_INFO, e.g. som_info(sS,3)
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%   sS                The data to which the normalization is applied.
+%            (struct) Data or map struct. Before adding any new 
+%                     normalizations, it is ensured that the
+%                     normalizations for the specified components in the
+%                     '.comp_norm' field have status 'done'. 
+%            (matrix) data matrix 
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+%   method            The normalization(s) to add/use. If missing, 
+%                     or an empty variable ('' or []) is given, the 
+%                     normalizations in the data struct are used.
+%            (string) Identifier for a normalization method to be added: 
+%                     'var', 'range', 'log', 'logistic', 'histD' or 'histC'. The 
+%                     same method is applied to all specified components
+%                     (given in comps). The normalizations are first 
+%                     initialized (for each component separately, of
+%                     course) and then applied.
+%            (struct) Normalization struct, or an array of structs, which
+%                     is applied to all specified components. If the 
+%                     '.status' field of the struct(s) is 'uninit', 
+%                     the normalization(s) is initialized first.
+%                     Alternatively, the struct may be map or data struct
+%                     in which case its '.comp_norm' field is used
+%                     (see the cell array option below).
+%            (cell array) In practice, the '.comp_norm' field of 
+%                     a data/map struct. The length of the array 
+%                     must be equal to the dimension of the given 
+%                     data set (sS). Each cell contains the
+%                     normalization(s) for one component. Only the
+%                     normalizations listed in comps argument are
+%                     applied though.
+%            (cellstr array) norm and denorm operations in a cellstr array
+%                     which are evaluated with EVAL command with variable
+%                     name 'x' reserved for the variable.
+%
+%   comps    (vector) The components to which the normalization(s) is
+%                     applied. Default is to apply to all components.
+%
+% OUTPUT ARGUMENTS
+% 
+%   sS                Modified and/or updated data.
+%            (struct) If a struct was given as input argument, the
+%                     same struct is returned with normalized data and
+%                     updated '.comp_norm' fields. 
+%            (matrix) If a matrix was given as input argument, the 
+%                     normalized data matrix is returned.
+% 
+% EXAMPLES
+%
+%  To add (initialize and apply) a normalization to a data struct: 
+%
+%    sS = som_normalize(sS,'var'); 
+%
+%  This uses 'var'-method to all components. To add a method only to
+%  a few selected components, use the comps argument: 
+% 
+%    sS = som_normalize(sS,'log',[1 3:5]); 
+% 
+%  To ensure that all normalization operations have indeed been done: 
+% 
+%    sS = som_normalize(sS); 
+%
+%  The same for only a few components: 
+%
+%    sS = som_normalize(sS,'',[1 3:5]); 
+% 
+%  To apply the normalizations of a data struct sS to a new data set D: 
+%
+%    D = som_normalize(D,sS); 
+%  or 
+%    D = som_normalize(D,sS.comp_norm); 
+% 
+%  To normalize a data set: 
+%
+%    D = som_normalize(D,'histD'); 
+%
+%  Note that in this case the normalization information is lost.
+%
+%  To check out the status of normalization in a struct use SOM_INFO: 
+% 
+%    som_info(sS,3)
+%
+%
+% SEE ALSO
+%  
+%  som_denormalize    Undo normalizations of a data struct/set.
+%  som_norm_variable  Normalization operations for a set of scalar values.
+%  som_info           User-friendly information of SOM Toolbox structs.
+
+% Copyright (c) 1998-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 151199 150500
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(1, 3, nargin));  % check no. of input arguments is correct
+
+% sD
+struct_mode = isstruct(sD);
+if struct_mode, 
+  switch sD.type
+   case 'som_map', D = sD.codebook; 
+   case 'som_data', D = sD.data; 
+   otherwise, error('Illegal struct.')
+  end
+else 
+  D = sD;
+end
+[dlen dim] = size(D);
+
+% comps
+if nargin<3 | (ischar(comps) & strcmp(comps,'all')), 
+  comps = [1:dim]; 
+end
+if isempty(comps), return; end
+if size(comps,1)>1, comps = comps'; end  % make it a row vector
+
+% method
+csNorm = cell(dim,1); 
+if nargin<2 | isempty(method), 
+  if ~struct_mode, 
+    warning('No normalization method given. Data left unchanged.');
+    return; 
+  end
+  method = '';
+else  
+  % check out the given method 
+  % (and if necessary, copy it for each specified component)
+  if ischar(method),
+    switch method, 
+    case {'var','range','log','histD','histC','logistic'}, 
+      sN = som_set('som_norm','method',method); 
+    otherwise,       
+      error(['Unrecognized method: ' method]);
+    end
+    for i=comps, csNorm{i} = sN; end
+  elseif isstruct(method),
+    switch method(1).type, 
+    case {'som_map','som_data'}, csNorm = method(1).comp_norm; 
+    case {'som_norm'}, for i=comps, csNorm{i} = method; end
+    otherwise, 
+      error('Invalid struct given as normalization method.')
+    end
+  elseif iscellstr(method), 
+    [dummy,sN] = som_norm_variable(1,method,'init');      
+    for i=comps, csNorm{i} = sN; end
+  elseif iscell(method), 
+    csNorm = method; 
+  else
+    error('Illegal method argument.')
+  end
+  % check the size of csNorm is the same as data dimension
+  if length(csNorm) ~= dim, 
+    error('Given number of normalizations does not match data dimension.')
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialize
+
+% make sure all the current normalizations for current 
+% components have been done
+if struct_mode, 
+  alldone = 1; 
+  for i = comps, 
+    for j=1:length(sD.comp_norm{i}), 
+      sN = sD.comp_norm{i}(j); 
+      if ~strcmp(sN.status,'done'), 
+	alldone = 0; 
+        [x,sN] = som_norm_variable(D(:,i), sN, 'do'); 
+        D(:,i) = x; 
+        sD.comp_norm{i}(j) = sN; 
+      end
+    end
+  end
+  if isempty(method), 
+    if alldone,
+      warning('No ''undone'' normalizations found. Data left unchanged.');
+    else
+      fprintf(1,'Normalizations have been redone.\n');
+    end
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action 
+
+% add the new normalizations to the old ones
+for i = comps, 
+  if ~isempty(csNorm{i}), 
+    [x,sN] = som_norm_variable(D(:,i), csNorm{i}, 'do'); 
+    D(:,i) = x; 
+    if struct_mode, 
+      if isempty(sD.comp_norm{i}), sD.comp_norm{i} = sN; 
+      else sD.comp_norm{i} = [sD.comp_norm{i}, sN]; end
+    end
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% output
+
+if struct_mode, 
+  switch sD.type
+   case 'som_map', sD.codebook = D; 
+   case 'som_data', sD.data = D; 
+   otherwise, error('Illegal struct.')
+  end
+else
+  sD = D;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_normcolor.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,89 @@
+function color = som_normcolor(data, clrmap)
+
+%SOM_NORMCOLOR RGB values of indexed colors for a given dataset and colormap 
+%  
+% color = som_normcolor(data, [clrmap])
+%
+%  color = som_normcolor(data);
+%  color = som_normcolor(data,jet(64));
+%
+%  Input and output arguments ([]'s are optional):
+%   data     (struct) map or data struct
+%            (matrix) size N x dim
+%   [clrmap] (matrix) size N x 3, a valid colormap (an RGB value matrix)
+%                     Default is current colormap. See COLORMAP.
+%
+%   color    (matrix) size N x 3 x dim, RGB matrix 
+%
+% Purpose of this function is to calculate fixed RGB colors that are similar
+% to indexed colors with the specified colormap. This is because some
+% SOM Toolbox visualization functions (as SOM_GRID) do not use indexed colors 
+% if the underlying Matlab function (e.g. PLOT) do not use indexed colors
+%
+% EXAMPLE
+%
+% %%% Visualize three variables in a map using som_grid:
+% %%% Give coordinates for the markers according to variables 1 and 2, and 
+% %%% 'indexed colors' according to variable 3. 
+%
+% som_grid(map.topol.lattice,map.topol.msize,'Coord',map.codebook(:,1:2), ...
+%          'markercolor', som_normcolor(map.codebook(:,3)));
+
+% Contributed to SOM Toolbox 2.0, February 11th, 2000 by Johan Himberg
+% Copyright (c) by Johan Himberg
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% juha 150799 johan 010999
+
+%%%% check possible errors %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+error(nargchk(1,2,nargin));
+
+if nargin < 2| isempty(clrmap),
+  clrmap=colormap;
+elseif ~vis_valuetype(clrmap,{'nx3rgb'}),
+  error('The specified colormap is invalid!');
+end
+
+d=size(clrmap,1);
+
+if isstruct(data),
+  m_names={'type';'codebook';'topol';'labels';'neigh';'mask';'trainhist';...
+           'name';'comp_names';'comp_norm'};
+  d_names=fieldnames(vis_struct);
+  if length(fieldnames(data)) ~= length(d_names)  % data is not som_data_struct
+    if length(fieldnames(data)) ~= length(m_names) % and not som_map_struct 
+      error('Input argument is not a ''som_vis'' or ''som_map'' struct.')
+    elseif ~all(strcmp(fieldnames(data),m_names))
+      error('Input argument is not a ''som_vis'' or ''som_map'' struct.')
+    else
+      data=data.codebook;
+    end
+  elseif ~all(strcmp(fieldnames(data),dnames))
+    error('Input argument is not a ''som_vis'' or ''som_map'' struct.')
+  else
+    data=data.data;
+  end
+end
+
+if ~isnumeric(data) | ndims(data) ~= 2
+  error('Data is not 2 dimensional numeric matrix.');
+end
+
+%%% action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+data=som_normalize(data,'range');
+
+for i=1:size(data,2),
+  inds=~isnan(data(:,i));
+  color(inds,:,i)=clrmap(round(data(inds,i)*(d-1))+1,:);
+  color(~inds,:,i)=NaN;
+end
+
+  
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_order_cplanes.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,293 @@
+function P = som_order_cplanes(sM, varargin)
+
+%SOM_ORDER_CPLANES Orders and shows the SOM component planes.
+%
+% P = som_order_cplanes(sM, [[argID,] value, ...])
+%
+%  som_order_cplanes(sM);
+%  som_order_cplanes(sM,'comp',1:30,'simil',C,'pca');
+%  P = som_order_cplanes(sM);
+%
+%  Input and output arguments ([]'s are optional): 
+%   sM       (struct) map or data struct
+%            (matrix) a data matrix, size * x dim
+%   [argID,  (string) See below. The values which are unambiguous can
+%    value]  (varies) be given without the preceeding argID.
+%
+%   P        (matrix) size n x * (typically n x 2), the projection coordinates
+%   
+% Here are the valid argument IDs and corresponding values. The values
+% which are unambiguous (marked with '*') can be given without the
+% preceeding argID.
+%   'comp'    (vector) size 1 x n, which components to project, 1:dim by default
+%   'simil'  *(string) similarity measure to use 
+%                      'corr'        linear correlation between component planes
+%                      'abs(corr)'   absolute value of correlation (default)
+%                      'umat'        as 'abs(corr)' but calculated from U-matrices
+%                      'mutu'        mutual information (not implemented yet)
+%             (matrix) size n x n, a similarity matrix to be used             
+%   'proj'   *(string) projection method to use: 'SOM' (default), 
+%                      'pca', 'sammon', 'cca', 'order', 'ring'
+%   'msize'   (vector) size of the SOM that is used for projection
+%   'show'   *(string) how visualization is done: 'planes' (default), 
+%                      'names', or 'none'
+%   'mask'    (vector) dim x 1, the mask to use, ones(dim,1) by default
+%   'comp_names' (cell array) of strings, size dim x 1, the component names
+%
+% The visualized objects have a callback associated with them: by
+% clicking on the object, the index and name of the component are printed
+% to the standard output.
+% 
+% See also SOM_SHOW.
+
+% Copyright (c) 2000 by the SOM toolbox programming team.
+% Contributed to SOM Toolbox on June 16th, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 120600 070601
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+% sM
+if isstruct(sM), 
+  switch sM.type
+  case 'som_map', 
+    D = sM.codebook; dim = size(D,2); cnames = sM.comp_names; mask = sM.mask; 
+    ismap = 1; 
+  case 'som_data', 
+    D = sM.data; dim = size(D,2); cnames = sM.comp_names; mask = ones(dim,1); 
+    ismap = 0; 
+  otherwise, error('Invalid first argument.');
+  end                  
+else
+  D = sM; 
+  dim = size(D,2); mask = ones(dim,1);
+  cnames = cell(dim,1); 
+  for i = 1:dim, cnames{i} = sprintf('Variable%d',i); end
+  ismap = 0; 
+end
+
+% defaults
+comps = 1:dim; 
+simil = 'abs(corr)';
+proj = 'SOM'; 
+show = 'planes'; 
+mapsize = NaN;
+
+% varargin
+i=1;
+while i<=length(varargin),
+  argok = 1;
+  if ischar(varargin{i}),
+    switch varargin{i},
+     % argument IDs
+     case 'mask',       i=i+1; mask = varargin{i};
+     case 'comp_names', i=i+1; cnames = varargin{i};
+     case 'comp',       i=i+1; comps = varargin{i}; 
+     case 'proj',       i=i+1; proj = varargin{i}; 
+     case 'show',       i=i+1; show = varargin{i}; 
+     case 'simil',      i=i+1; simil = varargin{i}; 
+     case 'msize',      i=i+1; mapsize = varargin{i};
+     % unambiguous values
+     case {'corr','abs(corr)','umat','mutu'}, simil = varargin{i}; 
+     case {'SOM','pca','sammon','cca','order','ring'}, proj = varargin{i}; 
+     case {'planes','names','none'}, show = varargin{i}; 
+     otherwise argok=0;
+    end
+  else
+    argok = 0;
+  end
+  if ~argok,
+    disp(['(som_order_cplanes) Ignoring invalid argument #' num2str(i+1)]);
+  end
+  i = i+1;
+end
+
+if strcmp(show,'planes') & ~ismap, 
+  warning('Given data is not a map: using ''names'' visualization.'); 
+  show = 'names'; 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% similarity matrix
+
+fprintf(1,'Calculating similarity matrix\n');
+
+% use U-matrix
+if strcmp(simil,'umat'), 
+  if ~ismap, error('Given data is not a map: cannot use U-matrix similarity.'); end
+  U = som_umat(sM);
+  D = zeros(prod(size(U)),dim); 
+  m = zeros(dim,1);
+  for i=1:dim, m=m*0; m(i)=1; U = som_umat(sM,'mask',m); D(:,i) = U(:); end
+end
+
+% components
+D = D(:,comps); 
+cnames = cnames(comps);
+mask = mask(comps);
+dim = length(comps);
+  
+% similarity matrix
+if ischar(simil), 
+  switch simil, 
+  case {'corr','abs(corr)','umat'}, 
+    A = zeros(dim);
+    me = zeros(1,dim);
+    for i=1:dim, 
+        me(i) = mean(D(isfinite(D(:,i)),i)); D(:,i) = D(:,i) - me(i); 
+    end  
+    for i=1:dim, 
+      for j=i:dim, 
+        c = D(:,i).*D(:,j); c = c(isfinite(c));
+        A(i,j) = sum(c)/length(c); A(j,i) = A(i,j); 
+      end
+    end
+    s = diag(A); 
+    A = A./sqrt(s*s');
+    switch simil, 
+    case {'abs(corr)','umat'}, A = abs(A); 
+    case 'corr', A = A + 1; 
+    end
+  case 'mutu', 
+    error('Mutual information not implemented yet.');
+  end
+else
+  A = simil; 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% projection
+
+fprintf(1,'Projection\n');
+
+mu = 2*dim; 
+
+switch proj, 
+ case 'SOM',
+
+  if isnan(mapsize), 
+    sMtmp = som_randinit(A,'munits',mu); 
+    msize = sMtmp.topol.msize; 
+  else 
+    msize = mapsize; 
+  end
+
+  sM2 = som_make(A,'msize',msize,'rect','tracking',0);
+  bm  = assign_unique_bm(sM2,A);
+  Co  = som_unit_coords(sM2);
+  P   = Co(bm,:);
+
+ case 'ring', 
+
+  if isnan(mapsize), msize = [1 mu]; else msize = mapsize; end
+
+  sM2 = som_make(A,'msize',msize,'cyl','rect','tracking',0);
+  bm  = assign_unique_bm(sM2,A);
+  Co  = som_unit_coords(sM2);
+  P   = Co(bm,[1 3]);   
+  
+ case 'order',
+
+  if isnan(mapsize), msize = [1 mu]; else msize = mapsize; end
+
+  sM2 = som_make(A,'msize',msize,'tracking',0);
+  bm  = assign_unique_bm(sM2,A);
+  [dummy,i] = sort(bm); 
+  [dummy,P] = sort(i);
+  if size(P,2)>1, P = P'; end
+  if size(P,2)==1, P(:,2) = zeros(length(P),1); end
+
+ case {'pca','sammon','cca'}, 
+  P = pcaproj(A,2);  
+  if strcmp(proj,'sammon'), P = sammon(A,P,50,'steps');
+  elseif strcmp(proj,'cca'), P = cca(A,P,50);
+  end
+
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% visualization
+
+if ~strcmp(show,'none'), 
+  fprintf(1,'Visualization\n');
+  cla
+  hold on
+  if strcmp(show,'planes')
+    s = findscaling(sM.topol.msize,P);
+    for i=1:dim, 
+      C = som_normcolor(D(:,i));
+      if strcmp(simil,'umat'), 
+	h=som_cplane([sM.topol.lattice 'U'],sM.topol.msize,C,1,s*P(i,:));
+      else
+	h=som_cplane(sM,C,1,s*P(i,:)); 
+      end 
+      set(h,'edgecolor','none','Userdata',sprintf('[%d] %s',i,cnames{i}));
+      set(h,'ButtonDownFcn','fprintf(1,''%s\n'',get(gco,''UserData''))');
+    end
+  else 
+    s=1; 
+    a=[min(P(:,1))-1 max(P(:,1))+1 min(P(:,2))-1-3 max(P(:,2))+1-3];
+    axis(s*a);
+  end
+  h=text(s*P(:,1),s*P(:,2)-3,cnames);
+  for i=1:length(h), set(h(i),'Userdata',sprintf('[%d] %s',i,cnames{i})); end
+  set(h,'ButtonDownFcn','fprintf(1,''%s\n'',get(gco,''UserData''))');
+  hold off
+
+  axis on; axis equal; axis tight; set(gca,'XTick',[],'YTick',[],'Box','on');
+end
+
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%% subfunctions
+
+function bm = assign_unique_bm(sM,D)
+
+  munits = size(sM.codebook,1);
+  [dlen dim] = size(D);
+  margin = max(0,dlen-munits);
+
+  [bm,qers] = som_bmus(sM,D); 
+  bmi=ones(dim,1);  
+  hits = som_hits(sM,D); 
+  mult = find(hits>1); 
+  while any(mult) & sum(hits(mult))-length(mult)>margin, 
+    choices = find(bm==mult(1)); 
+    while length(choices)>1,
+      [dummy,mv] = max(qers(choices)); mv = choices(mv);
+      [mv_to,q] = som_bmus(sM,D(mv,:),bmi(mv)); 
+      bmi(mv)=bmi(mv)+1; qers(mv) = q; bm(mv) = mv_to;
+      choices = find(bm==mv_to);
+    end
+    for i=1:length(hits), hits(i)=sum(bm==i); end
+    mult = find(hits>1);
+  end
+  return;
+  
+function s = findscaling(msize,P)
+
+  d1 = median(abs(diff(unique(sort(P(:,1))))));
+  d2 = median(abs(diff(unique(sort(P(:,2))))));
+  if d1>0, s1 = 1.5*msize(2)/d1; else s1 = 0; end
+  if d2>0, s2 = 1.5*msize(1)/d2; else s2 = 0; end
+  s = max(s1,s2);
+  if s==0, s=1; end
+  return; 
+
+function alternative_SOM_plane_vis(sT,bm,simil,D,cnames)
+
+  clf
+  for i=1:size(D,2), 
+    subplot(sT.msize(2),sT.msize(1),bm(i));
+    if strcmp(simil,'umat'), h=som_cplane([sT.lattice 'U'],sT.msize,D(:,i));
+    else h=som_cplane(sT,D(:,i)); 
+    end
+    set(h,'edgecolor','none');
+    title(cnames{i});
+    axis off
+  end    
+  return;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_pieplane.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,325 @@
+function h=som_pieplane(varargin)
+
+%SOM_PIEPLANE Visualize the map prototype vectors as pie charts
+%
+% h=som_pieplane(lattice, msize, data, [color], [s], [pos])
+% h=som_pieplane(topol, data, [color], [s], [pos])
+%
+%  som_pieplane('hexa',[5 5], rand(25,4), jet(4), rand(25,1)) 
+%  som_pieplane(sM, sM.codebook);
+%
+% Input and output arguments ([]'s are optional):
+%  lattice   (string) grid 'hexa' or 'rect'
+%  msize     (vector) size 1x2, defines the grid, M=msize(1)*msize(2)
+%            (matrix) size Mx2, gives explicit coordinates for each node: in 
+%             this case the lattice does not matter.
+%  topol     (struct) map or topology struct
+%  data      (matrix) size Mxd, Mth row is the data for Mth pie. The 
+%             values will be normalized to have unit sum in each row.
+%  [color]   (matrix) size dx3, RGB triples. The first row is the
+%             color of the first slice in each pie etc. Default is hsv(d).
+%            (string) ColorSpec or 'none' gives the same color for each slice.
+%  [s]       (matrix) size Mx1,  gives an individual size scaling for each node. 
+%            (scalar) gives the same size for each node. Default is 0.8. 
+%  [pos]     (vectors) a 1x2 vector that determines position for the
+%              origin, i.e. upper left corner. Default is no translation.
+%
+%  h         (scalar) the object handle to the PATCH object
+%
+% The data will be linearly scaled so that its sum is 1 in each unit.
+% Negative values are invalid. Axis are set as in som_cplane.
+%
+% For more help, try 'type som_pieplane' or check out online documentation.
+% See also SOM_CPLANE, SOM_PLOTPLANE, SOM_BARPLANE
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_pieplane
+%
+% PURPOSE
+% 
+% Visualizes the map prototype vectors as pie charts.
+%
+% SYNTAX
+%
+%  h = som_pieplane(topol, data)
+%  h = som_pieplane(lattice, msize, data)
+%  h = som_pieplane(..., color)
+%  h = som_pieplane(..., color, s)
+%  h = som_pieplane(..., color, s, pos)
+%
+% DESCRIPTION
+%
+%  Visualizes the map prototype vectors as pie charts.
+%
+% KNOWN BUGS
+%
+% It is not possible to specify explicit coordinates for map
+% consisting of just one unit as then the msize is interpreted as
+% map size.
+%
+%  FEATURES
+% 
+%  - negative values in data cause an error
+%
+%  - the colors are fixed: changing colormap in the figure (see help
+%    colormap) will not affect the coloring of the slices.
+%
+%  - if input variable s has size Nxd it gives each slice an individual
+%    scaling factor. This may be used to create a glyph where
+%    the radius of the slice, not the angle, shows the variable
+%    try, e.g., som_pieplane('rect',[5 4],ones(20,4),'w',rand(20,4));
+%
+% REQUIRED INPUT ARGUMENTS
+% 
+% lattice  The basic shape of the map units 
+%         
+%    (string) 'hexa' or 'rect' positions the pies according to hexagonal or 
+%             rectangular map lattice.
+%
+% msize    The size of the map grid     
+%
+%    (vector) [n1 n2] vector defines the map size (height n1 units,
+%             width n2 units, total M=n1xn2 units). The units will 
+%             be placed to their topological locations to form a
+%             uniform hexagonal or rectangular grid.
+%    (matrix) Mx2 matrix defines arbitary coordinates for the M units. In 
+%             this case the argument 'lattice' has no effect.
+%
+% topol    Topology of the map grid
+%
+%   (struct) map or topology struct from which the topology is taken
+%
+% data     The data to be visualized
+%
+%    (matrix) Mxd matrix of data vectors. Negative values are invalid.
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+% If value is unspecified or empty ([] or ''), the default values
+% are used for optional input arguments.
+%
+% s       The size scaling factors for the units
+%
+%    (scalar) gives each unit the same size scaling: 
+%             0   unit disappears (edges can be seen as a dot)
+%             ... default size is 0.8
+%             >1  unit overlaps others          
+%    (matrix) Mx1 double: each unit gets individual size scaling 
+%
+% color   The color of the slices in each pie
+%
+%    (string) ColorSpec or 'none' gives the same color for each slice
+%    (matrix) dx3 matrix assigns an RGB color determined by the dth row of
+%             the matrix to the dth slice (variable) in each pie plot
+%
+% pos    Position of origin       
+% 
+%    (vector) size 1x2: this is meant for drawing the plane in arbitary 
+%             location in a figure. Note the operation: if this argument is
+%             given, the axis limits setting part in the routine is skipped and 
+%             the limits setting will be left to be done by
+%             MATLAB's defaults. Default is no translation.
+%
+% OUTPUT ARGUMENTS
+%
+%  h (scalar)  Handle to the created patch object.
+%
+% OBJECT TAGS     
+%
+% One object handle is returned: field Tag is set to 'planePie'       
+% 
+% EXAMPLES
+%
+% %%% Create the data and make a map 
+%    
+% data=rand(100,5); map=som_make(data);
+% 
+% %%% Create a 'jet' colormap that has as many rows as the data has variables
+%    
+% colors=jet(5);
+% 
+% %%% Draw pies
+%    
+% som_pieplane(map, map.codebook, colors);
+% 
+% %%% Calculate the hits of data on the map and normalize them between [0,1]
+%  
+% hit=som_hits(map,data); hit=hit./max(max(hit));
+% 
+% %%% Draw the pies so that their size tells the hit count
+%
+% som_pieplane(map, map.codebook, colors, hit);
+% 
+% %%% Try this! (see section FEATURES) 
+%
+% som_pieplane('rect',[5 4],ones(20,4),'w',rand(20,4));
+%
+% SEE ALSO
+%
+% som_cplane     Visualize a 2D component plane, u-matrix or color plane
+% som_barplane   Visualize the map prototype vectors as bar diagrams
+% som_plotplane  Visualize the map prototype vectors as line graphs
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 140799 juuso 310300 070600
+
+%%% Check & Init arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+[nargin, lattice, msize, data, color, s, pos] = vis_planeGetArgs(varargin{:});
+error(nargchk(3, 6, nargin));  % check no. of input args is correct
+
+% check pos
+
+if nargin < 6 | isempty(pos)
+  pos=NaN;                            % default value for pos (no translation) 
+elseif ~vis_valuetype(pos,{'1x2'})
+  error('Position of origin has to be given as an 1x2 vector');
+end
+
+% check msize
+
+if ~vis_valuetype(msize,{'1x2','nx2'}),
+  error('msize has to be 1x2 grid size vector or a Nx2 coordinate matrix.');
+end
+
+% check data
+
+if ~isnumeric(data),
+  error('Data matrix must be numeric.');
+elseif length(size((data)))>2
+  error('Data matrix has too many dimensions!');
+else
+  d=size(data,2);
+  N=size(data,1);
+end
+
+if any(data(:)<0)
+  error('Negative data values not allowed in pie plots!');
+end
+
+% Check lattice
+if ~ischar(lattice) | ~any(strcmp(lattice,{'hexa','rect'})),
+  error('Invalid lattice.');
+end
+
+%% Calculate patch coordinates for slices
+
+for i=1:N,                            
+  [nx,ny]=vis_piepatch(data(i,:));    
+  piesx(:,(1+(i-1)*d):(i*d))=nx;
+  piesy(:,(1+(i-1)*d):(i*d))=ny;
+end
+l=size(piesx,1);
+
+if size(msize,1) == 1,
+  if prod(msize) ~= N 
+    error('Data matrix has wrong size.');
+  else
+    coord=som_vis_coords(lattice, msize);
+  end
+else
+  if N ~= size(msize,1),
+    error('Data matrix has wrong size.');
+  end
+  coord=msize; 
+  % This turns the axis tightening off,
+  % as now we don't now the limits (no fixed grid)
+  if isnan(pos); pos=[0 0]; end
+end
+x=reshape(repmat(coord(:,1),1,l*d)',l,d*N);
+y=reshape(repmat(coord(:,2),1,l*d)',l,d*N);
+
+% Check size
+
+if nargin < 5 | isempty(s),  
+  s=0.8;                              % default value for scaling
+elseif ~vis_valuetype(s, {'1x1', [N 1], [N d]}),
+  error('Size matrix does not match with the data matrix.');
+elseif size(s) == [N 1],
+  s=reshape(repmat(s,1,l*d)',l,d*N);
+elseif all(size(s) ~= [1 1]),
+  s=reshape(repmat(reshape(s',d*N,1),1,l)',l,d*N);
+end
+
+% Check color
+% C_FLAG is a flag for color 'none' 
+
+if nargin < 4 | isempty(color)
+  color=hsv(d); C_FLAG=0;       % default n hsv colors
+end
+
+if ~(vis_valuetype(color, {[d 3], 'nx3rgb'},'all')) & ...
+      ~vis_valuetype(color,{'colorstyle','1x3rgb'}), 
+  error('The color matrix has wrong size or contains invalid values.');
+elseif ischar(color) & strcmp(color,'none'), 
+  C_FLAG=1;        % check for color 'none'
+  color='w';    
+else
+  C_FLAG=0;        % valid color string or colormap
+end
+
+%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Size zero would cause division by zero. eps is as good (node disappears)
+% The edge may be visible, though. (NaN causes some other problems)
+
+s(s==0)=eps;                    
+
+%% 1. Scaling
+x=(x./s+piesx).*s; y=(y./s+piesy).*s;      
+
+%% 2. Translation  
+if ~isnan(pos)
+  x=x+pos(1);y=y+pos(2);               
+end
+
+%% 3. Rearrange dx3 color matrix
+
+if ~isstr(color) & size(color,1)~=1,
+  color=reshape(repmat(color,N,1),[1 N*d 3]);
+end
+
+%% Set axes properties  
+ax=newplot;                            % get current axis
+vis_PlaneAxisProperties(ax,lattice, msize, pos);                         
+
+%% Draw the plane! 
+
+h_=patch(x,y,color);
+
+if C_FLAG
+  set(h_,'FaceColor','none');
+end
+
+set(h_,'Tag','planePie');              % tag the object 
+
+%%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargout>0, h=h_; end                % Set h only if 
+                                       % there really is output
+%%% Subfunctions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [x,y]=vis_piepatch(v)
+
+% Do a pie (see e.g. the MathWorks function PIE). 
+% Origin is at (0,0) and the radius is .5.
+
+N=25;
+
+if sum(v)==0, v_is_zero = 1; v(1) = 1; else v_is_zero = 0; end
+
+v(v==0) = eps; % Matlab 5.2 version of linspace doesn't work otherwise
+
+phi=[0 2*pi*cumsum(v./sum(v))];
+
+for i=2:length(phi),
+  [xi,yi]=pol2cart(linspace(phi(i-1),phi(i),N),0.5);
+  x(:,i-1)=[0 xi 0]';
+  y(:,i-1)=[0 yi 0]';
+end
+
+if v_is_zero, x = x*0; y = y*0; end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_plotmatrix.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,122 @@
+function som_plotmatrix(sM,D,Col,comps)
+
+%SOM_PLOTMATRIX Visualize pairwise scatter plots and histograms.
+%
+%  som_plotmatrix(sM,[sD],[Col],[comps])
+% 
+%  Input and output arguments ([]'s are optional):
+%   sM       (struct) map struct
+%   [sD]     (struct) data struct, corresponding to the map
+%            (matrix) data matrix (size dlen x dim)
+%   [Col]    (matrix) size munits x 3, color for each map unit
+%   [comps]  (vector) which components to plot (1:dim by default)
+%
+% See also: SOM_SHOW, SOM_ORDER_CPLANES.
+
+% Copyright (c) 2000 by the SOM toolbox programming team.
+% Contributed to SOM Toolbox on June 16th, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 140600
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
+
+% sM
+[munits dim] = size(sM.codebook); 
+M = sM.codebook;
+
+% sD
+if nargin>1 & ~isempty(D), 
+  if isstruct(D), D = D.data; end
+  bmus = som_bmus(sM,D);
+else D = []; bmus = []; 
+end
+
+% Col
+if nargin<3 | isempty(Col), Col = som_colorcode(sM); end
+if ischar(Col), Col = som_colorcode(sM,Col); end
+
+% comps
+if nargin<4 | isempty(comps), comps = 1:dim; end
+n = length(comps)+1;
+
+% histogram bins
+if ~isempty(D), C=D; else C=M; end
+cHbins = cell(dim,1);
+cAxis = cell(dim,1);
+for i=1:dim, 
+  if ~isempty(D), mima = [min(D(:,i)),max(D(:,i))];
+  else mima = [min(M(:,i)),max(M(:,i))];
+  end
+  cAxis{i} = mima; 
+  [dummy,cHbins{i}] = hist(mima,20);   
+end
+
+nt = 4; % number of ticks in scatter plots
+
+% visualization
+clf
+for i=1:n, 
+  for j=1:n, 
+    subplot(n,n,(i-1)*n+j); 
+    if j==1 & i==1, 
+      h=som_cplane(sM,Col); set(h,'edgecolor','none')
+    elseif i==1, 
+      ind = comps(j-1); 
+      b  = cHbins{ind};      
+      hs = hist(M(:,ind),b); 
+      h  = bar(b,hs,0.8); set(h,'EdgeColor','none','FaceColor','k'); 
+      axis on, axis tight
+      set(gca,'XTick',[],'Box','on');
+      title(sM.comp_names{ind});
+    elseif j==1, 
+      ind = comps(i-1); 
+      if ~isempty(D), 
+	b  = cHbins{ind}; 
+	hs = hist(D(:,ind),b); 
+	h  = bar(b,hs,0.8); set(h,'EdgeColor','none','FaceColor','k'); 
+	axis on, axis tight	
+	set(gca,'XTick',[],'Box','on');
+	ylabel(sM.comp_names{ind})
+      else
+	text(0.5,0.5,sM.comp_names{ind});
+	axis off
+      end
+    elseif i==j, 
+      ind = comps(i-1); 
+      h=som_cplane(sM,M(:,ind)); 
+      set(h,'edgecolor','none')
+      a = cAxis{ind}; 
+      caxis(a); v = unique([a, min(M(:,ind)), max(M(:,ind))]); 
+      vn=som_denormalize(v,sM.comp_norm{ind})'; 
+      h=colorbar('vert');
+      set(h,'YTick',v,'YTickLabel',cellstr(num2str(vn,2)));
+    elseif i<j | ~isempty(D), 
+      if i>j, i1 = i-1; i2 = j-1; else i1 = j-1; i2 = i-1; end
+      ind1 = comps(i1); ind2 = comps(i2); 
+      if i<j, 
+	som_grid(sM,'coord',M(:,[ind1 ind2]),'markersize',2,'MarkerColor',Col);
+      else
+	som_grid('rect',[size(D,1) 1],'coord',D(:,[ind1 ind2]),...
+		 'Line','none','MarkerColor',Col(bmus,:),'Markersize',2);	
+	%cla; hold on
+	%for k=1:max(bmus), 
+	%  inds = find(bmus==k); 
+	%  if any(inds), 
+	%    som_grid('rect',[length(inds) 1],'coord',D(inds,[ind1 ind2]),...
+	%	     'Line','none','MarkerColor',Col(k,:),'Markersize',2);	
+	%  end
+	%end
+      end	      
+      a = [cAxis{ind1} cAxis{ind2}]; axis(a); 
+      x = linspace(a(1),a(2),nt); xn = som_denormalize(x,sM.comp_norm{ind1})';
+      set(gca,'XTick',x,'XTickLabel',cellstr(num2str(xn,2)));
+      y = linspace(a(3),a(4),nt); yn = som_denormalize(y,sM.comp_norm{ind2})';
+      set(gca,'YTick',y,'YTickLabel',cellstr(num2str(yn,2)));
+      xlabel(sM.comp_names{ind1}), ylabel(sM.comp_names{ind2})
+    end    
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_plotplane.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,285 @@
+function h=som_plotplane(varargin)
+
+%SOM_PLOTPLANE  Visualize the map prototype vectors as line graphs
+%
+% h=som_plotplane(lattice, msize, data, [color], [scaling], [pos])
+% h=som_plotplane(topol, data, [color], [scaling], [pos])
+%
+%  som_plotplane('hexa',[5 5], rand(25,4), jet(25)) 
+%  som_plotplane(sM, sM.codebook)
+%
+% Input and output arguments ([]'s are optional)
+%  lattice   (string) grid 'hexa' or 'rect'
+%  msize     (vector) size 1x2, defines the grid size 
+%            (matrix) size Mx2, defines explicit coordinates: in 
+%             this case the first argument does not matter 
+%  topol     (struct) map or topology struct
+%  data      (matrix) Mxd matrix, M=prod(msize) 
+%  [color]   (matrix) size Mx3, gives an individual color for each graph
+%            (string) ColorSpec gives the same color for each
+%             graph, default is 'k' (black)
+%  [scaling] (string) 'on' or 'off', default is 'on' 
+%  [pos]     (vector) 1x2 vector that determines translation. 
+%             Default is no translation.
+%
+%  h         (vector) the object handles for the LINE objects
+%
+%  If scaling is set on, the data will be linearly scaled in each
+%  unit so that min and max values span from lower to upper edge
+%  in each unit. If scaling is 'off', the proper scaling is left to 
+%  the user: values in range [-.5,.5] will be plotted within the limits of the 
+%  unit while values exceeding this range will be out of the unit. 
+%  Axis are set as in SOM_CPLANE.
+%
+% For more help, try 'type som_plotplane' or check out online documentation.
+% See also SOM_PLANE, SOM_PIEPLANE, SOM_BARPLANE
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_plotplane
+%
+% PURPOSE
+% 
+% Visualizes the map prototype vectors as line graph
+%
+% SYNTAX
+%
+%  h = som_plotplane(topol, data)
+%  h = som_plotplane(lattice, msize, data)
+%  h = som_plotplane(..., color)
+%  h = som_plotplane(..., color, scaling)
+%  h = som_plotplane(..., color, scaling, pos)
+%
+% DESCRIPTION
+%
+%  Visualizes the map prototype vectors as line graph
+%
+% KNOWN BUGS
+%
+%  It is not possible to specify explicit coordinates for map
+%  consistig of just one unit as then the msize is interpreted as
+%  map size.
+%
+% FEATURES
+%
+%  - the colors are fixed: changing colormap in the figure (see
+%    COLORMAP) will not affect the coloring of the plots
+%
+% REQUIRED INPUT ARGUMENTS
+% 
+% lattice  The basic topology
+%
+%   (string) 'hexa' or 'rect' positions the plots according to hexagonal or 
+%            rectangular map lattice.
+%
+% msize    The size of the map grid     
+%         
+%   (vector) [n1 n2] vector defines the map size (height n1 units, width n2 
+%            units, total M=n1 x n2 units). The units will be placed to their 
+%            topological locations in order to form a uniform hexagonal or 
+%            rectangular grid.   
+%   (matrix) Mx2 matrix defines arbitary coordinates for the M units.
+%            In this case the argument 'lattice' has no effect.
+% 
+% topol    Topology of the map grid
+%
+%   (struct) map or topology struct from which the topology is taken
+% 
+% data     The data to be visualized
+%
+%   (matrix) Mxd matrix of data vectors. 
+% 
+% OPTIONAL INPUT ARGUMENTS
+%
+% If unspecified or given empty values ('' or []), default values
+% will be used for optional input arguments.
+% 
+% color    The color of the plots
+%
+%    (string) Matlab's ColorSpec (see help plot) string gives the same color 
+%             for each line.
+%
+%    (matrix) Mx3 matrix assigns an RGB color determined by the Nth row of
+%             the matrix to the Nth plot. 
+%
+%    (vector) 1x3 RGB vector gives the same color for each line.
+%
+% scaling  The data scaling mode
+%
+%    (string) 'on or 'off': if scaling is set on, the data will be
+%             linearly scaled in each unit so that min and max values span from 
+%             lower to upper edge in each unit. If scaling is 'off', the proper 
+%             scaling is left to the user: values in range [-.5,.5] will be plotted 
+%             within the limits of the unit while values exceeding this
+%             range will be out of the unit.
+%
+% pos      Position of the origin          
+%
+%    (vector) This is meant for drawing the plane in arbitary location in a 
+%             figure. Note the operation: if this argument is given, the
+%             axis limits setting part in the routine is skipped and the limits
+%             setting will be left to be done by MATLAB's
+%             defaults. By default no translation is done.
+%
+% OUTPUT ARGUMENTS
+%
+%  h (scalar)  Handle to the created patch object
+%
+% OBJECT TAG     
+%
+% Object property 'Tag' is set to 'planePlot'.       
+%
+% EXAMPLES
+%
+% %%% Create the data and make a map 
+%    
+% data=rand(1000,20); map=som_make(data);
+% 
+% %%% Create a 'gray' colormap that has 64 levels
+%    
+% color_map=gray(64);
+% 
+% %%% Draw plots using red color
+%    
+% som_plotplane(map, map.codebook,'r');
+%
+% %%% Calculate hits on the map and calculate colors so that
+%     black = min. number of hits and white = max. number of hits
+%
+% hit=som_hits(map,data); color=som_normcolor(hit(:),color_map);
+%
+% %%% Draw plots again. Now the gray level indicates the number of hits to 
+%     each node
+%
+% som_plotplane(map, map.codebook, color);
+%
+% SEE ALSO  
+%
+% som_cplane     Visualize a 2D component plane, u-matrix or color plane
+% som_barplane   Visualize the map prototype vectors as bar diagrams.
+% som_pieplane   Visualize the map prototype vectors as pie charts
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 160799 juuso 151199 070600
+
+%%% Init & Check arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+[nargin, lattice, msize, data, color, scaling, pos] = vis_planeGetArgs(varargin{:});
+error(nargchk(3, 5, nargin));  % check no. of input args is correct
+
+s=0.8; % size of plot
+
+if nargin < 6 | isempty(pos)
+  pos=NaN; 
+end
+
+if nargin < 5 | isempty(scaling)
+  scaling='on'; 
+elseif ~vis_valuetype(scaling,{'string'}) | ...
+      ~any(strcmp(scaling,{'on','off'})),
+  error('Scaling should be string ''on'' or ''off''.');
+end
+
+l=size(data,2);
+
+if ~isnumeric(msize) | ndims(msize) ~= 2 | size(msize,2)~=2, 
+  error('msize has to be 1x2 grid size vector or a Nx2 coordinate matrix.');
+elseif size(msize,1) == 1,
+   xdim=msize(2);
+   ydim=msize(1);
+   N=xdim*ydim;
+   y=repmat(repmat([1:ydim]',xdim,1),1,l);
+   x=reshape(repmat([1:xdim],ydim*l,1),l,N)';
+else
+   x=repmat(msize(:,1),1,l);y=repmat(msize(:,2),1,l);
+   N=size(msize,1);
+   lattice='rect'; 
+   if isnan(pos),
+      pos=[0 0];
+   end
+end
+
+switch lattice
+case {'hexa', 'rect'}
+  ;
+otherwise
+  error(['Lattice' lattice ' not implemented!']);
+end  
+
+if ~isnumeric(data) | size(data,1) ~= N
+  error('Data matrix is invalid or has wrong size!');
+end
+
+if nargin < 4 | isempty(color),
+  color='k';
+elseif vis_valuetype(color, {'colorstyle',[N 3]}),
+  if ischar(color) & strcmp(color,'none'),
+    error('Colorstyle ''none'' not allowed in som_plotplane.');
+  end
+elseif vis_valuetype(color,{'1x3rgb'})
+  ;
+elseif ~vis_valuetype(color,{'nx3rgb',[N 3]},'all'), 
+  error('The color matrix has wrong size or contains invalid RGB values or colorstyle.');
+end
+
+[linesx, linesy]=vis_line(data,scaling);
+
+%%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Making the lattice.
+% Command view([0 90]) shows the map in 2D properly oriented
+
+switch lattice
+case 'hexa'
+  t=find(rem(y(:,1),2));                  % move even rows by .5
+  x(t,:)=x(t,:)-.5; 
+  x=(x./s+linesx).*s+.5; y=(y./s+linesy).*s;      % scale with s
+case 'rect' 
+  x=(x./s+linesx).*s; y=(y./s+linesy).*s;         % scale with s
+end
+
+%% Draw the map! ...
+
+h_=plot(x',y');
+
+if size(color,1) == 1
+  set(h_,'Color',color);
+else
+  for i=1:N,
+    set(h_(i,:),'Color',color(i,:));
+  end
+end
+
+if ~isnan(pos)
+  x=x+pos(1);y=y+pos(2);                    % move upper left corner 
+end                                         % to pos(1),pos(2)
+
+%% Set axes properties  
+
+ax=gca;           
+vis_PlaneAxisProperties(ax, lattice, msize, pos);
+
+%%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+set(h_,'Tag','planePlot');                % tag the lineobject 
+
+if nargout>0, h=h_; end                   % Set h only, 
+                                          % if there really is output
+                                          
+%% Subfuntion %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+                                          
+function [x,y]=vis_line(data, scaling)
+
+s=size(data);
+% normalization between [0,1] if scaling is on
+if strcmp(scaling,'on')
+  mn=repmat(min(data,[],2),1,s(2));  
+  mx=repmat(max(data,[],2),1,s(2));
+  y=-((data-mn)./(mx-mn))+.5;        
+else                       % -sign is beacuse we do axis ij
+  y=-data;
+end
+
+x=repmat(linspace(-.5, .5, size(data,2)), size(data,1),1);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_probability_gmm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,100 @@
+function [pd,Pdm,pmd] = som_probability_gmm(D, sM, K, P)
+
+%SOM_PROBABILITY_GMM Probabilities based on a gaussian mixture model.
+%
+% [pd,Pdm,pmd] = som_probability_gmm(D, sM, K, P)
+% 
+%   [K,P] = som_estimate_gmm(sM,D);
+%   [pd,Pdm,pmd] = som_probability_gmm(D,sM,K,P);
+%   som_show(sM,'color',pmd(:,1),'color',Pdm(:,1))  
+%
+%  Input and output arguments:
+%   D    (matrix) size dlen x dim, the data for which the 
+%        (struct) data struct,     probabilities are calculated
+%   sM   (struct) map struct
+%        (matrix) size munits x dim, the kernel centers
+%   K    (matrix) size munits x dim, kernel width parameters
+%                 computed by SOM_ESTIMATE_GMM
+%   P    (matrix) size 1 x munits, a priori probabilities for each 
+%                 kernel computed by SOM_ESTIMATE_GMM
+%
+%   pd   (vector) size dlen x 1, probability of each data vector in 
+%                 terms of the whole gaussian mixture model
+%   Pdm  (matrix) size munits x dlen, probability of each vector in 
+%                 terms of each kernel
+%   pmd  (matrix) size munits x dlen, probability of each vector to 
+%                 have been generated by each kernel
+%
+% See also SOM_ESTIMATE_GMM.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Esa Alhoniemi
+% Copyright (c) by Esa Alhoniemi
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% ecco 180298 juuso 050100
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% input arguments
+if isstruct(sM), M = sM.codebook; else M = sM; end
+[c dim] = size(M);
+
+if isstruct(D), D = D.data; end
+dlen = size(D,1);
+
+% reserve space for output variables
+pd = zeros(dlen,1); 
+if nargout>=2, Pdm = zeros(c,dlen); end
+if nargout==3, pmd = zeros(c,dlen); end
+
+% the parameters of each kernel
+cCoeff = cell(c,1);
+cCoinv = cell(c,1);
+for m=1:c, 
+  co = diag(K(m,:));
+  cCoinv{m} = inv(co);
+  cCoeff{m} = 1 / ((2*pi)^(dim/2)*det(co)^.5);
+end
+
+% go through the vectors one by one
+for i=1:dlen, 
+
+  x = D(i,:);
+  
+  % compute p(x|m)
+  pxm = zeros(c,1); 
+  for m = 1:c,
+    dx     = M(m,:) - x;
+    pxm(m) = cCoeff{m} * exp(-.5 * dx * cCoinv{m} * dx');
+    %pxm(m) = normal(dx, zeros(1,dim), diag(K(m,:)));  
+  end
+  pxm(isnan(pxm(:))) = 0;
+  
+  % p(x|m)  
+  if nargin>=2, Pdm(:,i) = pxm; end
+  
+  % P(x) = P(x|M) = sum( P(m) * p(x|m) )
+  pd(i) = P*pxm; 
+  
+  % p(m|x) = p(x|m) * P(m) / P(x)
+  if nargout==3, pmd(:,i) = (P' .* pxm) / pd(i); end
+  
+end
+
+
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% subfunction normal
+%
+% computes probability of x when mean and covariance matrix
+% of a distribution are known
+
+function result = normal(x, mu, co)
+
+[l dim] = size(x);
+coinv   = inv(co);
+coeff   = 1 / ((2*pi)^(dim/2)*det(co)^.5);
+diff   = x - mu;
+result = coeff * exp(-.5 * diff * coinv * diff');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_projections.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,70 @@
+function [cPCAarg, Pdata, Pproto] = som_projections(D,sM,bmus)
+
+% SOM_PROJECTIONS Makes different kinds of projections for the data and the prototypes.
+%
+% [cPCAarg, Pdata, Pproto] = som_projections(D,sM,[bmus])
+%
+%      sD      (struct) data struct
+%              (matrix) size dlen x dim
+%      sM      (struct) map struct
+%              (matrix) size munits x dim: prototype vectors
+%      [bmus]  (vector) BMU for each data vector (calculated if not specified)
+%
+%      cPCAarg (cell array) PCA arguments: {V, me, l} from pcaproj function
+%      Pdata   (matrix) size dlen x 7, consisting of 3 projection coordinates from PCA, 
+%                       1 residual from the rest of the PCA-projection coordinates, 
+%                       and 3 color components 
+%      Pproto  (matrix) size dlen x 7, consisting of 3 projection coordinates from PCA, 
+%                       1 residual from the rest of the PCA-projection coordinates, 
+%                       3 color components, and 3 projection coordinates from CCA
+%
+% See also  PCAPROJ, CCA, SAMMON, SOM_PROJECTIONS_PLOT, SOM_COLORING, SOM_COLORCODE, 
+%           SOM_CLUSTERCOLOR, SOM_KMEANCOLOR.
+
+if isstruct(D), 
+    cn = D.comp_names;
+    D = D.data; 
+end
+[dlen dim] = size(D);
+if nargin<3, bmus = som_bmus(sM,D); end
+
+% projection of data
+
+[P0,V,me,l] = pcaproj(D,dim);
+D1 = som_fillnans(D,sM); 
+P1 = pcaproj(D1,V,me); 
+Res4 = zeros(dlen,1); 
+if dim<=3, 
+    Res4 = zeros(dlen,1); 
+else
+    Res4 = sqrt(sum(P1(:,4:end).*P1(:,4:end),2));
+end
+P1 = P1(:,1:min(3,dim)); 
+if dim<3, P1 = [P1, zeros(dlen,3-dim)]; end
+
+% projection of codebook vectors
+
+P1_m = pcaproj(sM,V,me); 
+Res4_m = zeros(dlen,1); 
+if dim<=3, 
+    Res4_m = zeros(dlen,1); 
+else
+    Res4_m = sum(P1_m(:,4:end).*P1_m(:,4:end),2);
+end
+P1_m = P1_m(:,1:min(3,dim)); 
+if dim<3, P1_m = [P1_m, zeros(size(P1_m,1),3-dim)]; end
+
+P2_m = cca(sM,P1_m,20); 
+
+PCol_m = som_coloring(sM); 
+
+PCol = PCol_m(bmus,:); 
+
+% output
+
+cPCAarg = {V,me,l};
+Pdata = [P1, Res4, PCol]; 
+Pproto = [P1_m, Res4_m, PCol_m, P2_m]; 
+ 
+return;
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_projections_plot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+function som_projections_plot(pmode,varargin)
+
+% SOM_PROJECTIONS_PLOT Projection visualizations.
+%
+% som_projections_plot(pmode,varargin)
+%
+%   [cPCAarg, Pdata, Pproto] = som_projections(D,sM);
+%   som_projections_plot('scatter',Pdata(:,1:3))
+%   som_projections_plot('scatter',Pproto(:,1:3),Pproto(:,5:7),5,sM)
+%   som_projections_plot('residuals',Pdata(:,1:4))
+%   som_projections_plot('scree',cPCAarg{3})
+%
+% The other arguments depend on the pmode:
+%
+%  pmode = 'scatter'
+%
+%     arg1: Co     (matrix) coordinates
+%     arg2: color  (matrix) color vectors
+%                  (string) colorstring ('k' by default)
+%     arg3: psize  (scalar) point size
+%     arg4: sT     (struct) topology struct, if map grid is drawn
+%  
+%  pmode = 'residuals'
+%
+%     arg1: Co     (matrix) coordinates (2 first columns) + residuals (the rest)
+%     arg2: color  (string) colorstring ('k' by default)
+%
+%  pmode = 'scree'
+%
+%     arg1: eigval (vector) vector of eigenvalues
+%      
+% See also  SOM_PROJECTIONS.
+
+switch pmode, 
+case 'scatter', 
+    Co = varargin{1}; 
+    if length(varargin)>1, color = varargin{2}; else color = 'k'; end
+    if length(varargin)>2, psize = varargin{3}; else psize = 5; end
+    if length(varargin)>3, sT = varargin{4}; else sT = []; end
+    if isstruct(sT) & strcmp(sT.type,'som_map'), sT = sT.topol; end
+    
+    if isempty(sT),
+        som_grid({'rect',[size(Co,1) 1]},'Coord',Co,'Markercolor',color,'line','none','markersize',psize);
+    else
+        if ischar(color), lcolor = color; else lcolor = 'k'; end
+        som_grid(sT,'Coord',Co,'Markercolor',color,'markersize',psize,'linecolor',lcolor); 
+    end 
+    
+case 'residuals',
+    CoRes = varargin{1}; 
+    n = size(CoRes,1); 
+    if length(varargin)>1, color = varargin{2}; else color = 'k'; end
+    Co = CoRes(:,1:2); Co(end+1,:) = NaN; 
+    res = sqrt(sum(CoRes(:,3:end).*CoRes(:,3:end),2)); 
+    h=plot(Co(:,1),Co(:,2),'k.'); set(h,'color',color);
+    Co(end+1,:) = NaN;
+    res = [res; 0; NaN];  
+    i = [1:n; 1:n; (n+1)+zeros(1,n)]; i = i(:); 
+    j = [(n+1)+zeros(1,n); 1:n; (n+2)+zeros(1,n)]; j = j(:);  
+    h = line(Co(i,1),Co(i,2),res(j)); set(h,'color',color);
+    axis tight, axis equal, view(3)
+    
+case 'scree', 
+    eigval = varargin{1};
+    if size(eigval,1)>1, eigval = eigval'; end
+    eigval = eigval / sum(eigval); 
+    cumeig = cumsum(eigval);
+    bar(cumeig,0.1)
+    i = find(cumeig>=0.75); i75 = i(1); 
+    hold on
+    plot([0 2],cumeig([2 2]),'r-',[0 i75],cumeig([i75 i75]),'r-');
+    set(gca,'YTick',unique([0:0.1:1 cumeig(2) cumeig(i75)]));  
+    axis tight, grid on
+
+end 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_prototrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,155 @@
+function [sM,sTrain] = som_prototrain(sM, D)
+
+%SOM_PROTOTRAIN  Use sequential algorithm to train the Self-Organizing Map.
+%
+% [sM,sT] = som_prototrain(sM, D)
+% 
+%  sM = som_prototrain(sM,D);
+%
+%  Input and output arguments: 
+%   sM      (struct) map struct, the trained and updated map is returned
+%           (matrix) codebook matrix of a self-organizing map
+%                    size munits x dim or  msize(1) x ... x msize(k) x dim
+%                    The trained map codebook is returned.
+%   D       (struct) training data; data struct
+%           (matrix) training data, size dlen x dim
+%
+% This function is otherwise just like SOM_SEQTRAIN except that
+% the implementation of the sequential training algorithm is very 
+% straightforward (and slower). This should make it easy for you 
+% to modify the algorithm, if you want to. 
+%
+% For help on input and output parameters, try 
+% 'type som_prototrain' or check out the help for SOM_SEQTRAIN.
+% See also SOM_SEQTRAIN, SOM_BATCHTRAIN.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 080200 130300
+ 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check input arguments
+
+% map 
+struct_mode = isstruct(sM);
+if struct_mode, 
+  M = sM.codebook; 
+  sTopol = sM.topol; 
+  mask = sM.mask; 
+  msize = sTopol.msize;
+  neigh = sM.neigh;
+else  
+  M = sM; orig_size = size(M);
+  if ndims(sM) > 2, 
+    si = size(sM); dim = si(end); msize = si(1:end-1);
+    M = reshape(sM,[prod(msize) dim]);
+  else
+    msize = [orig_size(1) 1]; dim = orig_size(2);
+  end
+  sM = som_map_struct(dim,'msize',msize); sTopol = sM.topol;
+  mask = ones(dim,1);
+  neigh = 'gaussian';
+end
+[munits dim] = size(M); 
+
+% data
+if isstruct(D), data_name = D.name; D = D.data; 
+else data_name = inputname(2); 
+end
+D = D(find(sum(isnan(D),2) < dim),:); % remove empty vectors from the data
+[dlen ddim] = size(D);                % check input dimension
+if dim ~= ddim, error('Map and data input space dimensions disagree.'); end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialize (these are default values, change as you will)
+
+% training length
+trainlen = 20*dlen; % 20 epochs by default
+
+% neighborhood radius
+radius_type = 'linear';
+rini = max(msize)/2;
+rfin = 1;
+
+% learning rate
+alpha_type = 'inv'; 
+alpha_ini = 0.2;
+
+% initialize random number generator
+rand('state',sum(100*clock));
+
+% tracking 
+start = clock; trackstep = 100;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Action
+
+Ud = som_unit_dists(sTopol); % distance between map units on the grid
+mu_x_1 = ones(munits,1);     % this is used pretty often
+
+for t = 1:trainlen, 
+
+  %% find BMU
+  ind = ceil(dlen*rand(1)+eps);       % select one vector
+  x = D(ind,:);                       % pick it up
+  known = ~isnan(x);                  % its known components
+  Dx = M(:,known) - x(mu_x_1,known);  % each map unit minus the vector
+  dist2 = (Dx.^2)*mask(known);        % squared distances  
+  [qerr bmu] = min(dist2);            % find BMU
+
+  %% neighborhood  
+  switch radius_type, % radius
+   case 'linear', r = rini+(rfin-rini)*(t-1)/(trainlen-1);
+  end
+  if ~r, r=eps; end % zero neighborhood radius may cause div-by-zero error  
+  switch neigh, % neighborhood function 
+  case 'bubble',   h = (Ud(:,bmu) <= r);
+  case 'gaussian', h = exp(-(Ud(:,bmu).^2)/(2*r*r)); 
+  case 'cutgauss', h = exp(-(Ud(:,bmu).^2)/(2*r*r)) .* (Ud(:,bmu) <= r);
+  case 'ep',       h = (1 - (Ud(:,bmu).^2)/(r*r)) .* (Ud(:,bmu) <= r);
+  end  
+
+  %% learning rate
+  switch alpha_type,
+   case 'linear', a = (1-t/trainlen)*alpha_ini;
+   case 'inv',    a = alpha_ini / (1 + 99*(t-1)/(trainlen-1));
+   case 'power',  a = alpha_ini * (0.005/alpha_ini)^((t-1)/trainlen); 
+  end
+  
+  %% update
+  M(:,known) = M(:,known) - a*h(:,ones(sum(known),1)).*Dx;
+			 
+  %% tracking
+  if t==1 | ~rem(t,trackstep),
+    elap_t = etime(clock,start); tot_t = elap_t*trainlen/t; 
+    fprintf(1,'\rTraining: %3.0f/ %3.0f s',elap_t,tot_t)
+  end
+  
+end; % for t = 1:trainlen
+fprintf(1,'\n');
+
+% outputs
+sTrain = som_set('som_train','algorithm','proto',...
+		 'data_name',data_name,...
+		 'neigh',neigh,...
+		 'mask',mask,...
+		 'radius_ini',rini,...
+		 'radius_fin',rfin,...
+		 'alpha_ini',alpha_ini,...
+		 'alpha_type',alpha_type,...
+		 'trainlen',trainlen,...
+		 'time',datestr(now,0));
+
+if struct_mode, 
+  sM = som_set(sM,'codebook',M,'mask',mask,'neigh',neigh);
+  sM.trainhist(end+1) = sTrain;
+else
+  sM = reshape(M,orig_size);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_quality.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,156 @@
+function [mqe,tge] = som_quality(sMap, D)
+
+%SOM_QUALITY Calculate the mean quantization and topographic error.
+%
+% [qe,te] = som_quality(sMap, D)
+%
+%  qe = som_quality(sMap,D);
+%  [qe,te] = som_quality(sMap,sD);
+%
+%  Input and output arguments: 
+%   sMap     (struct) a map struct
+%   D                 the data
+%            (struct) a data struct
+%            (matrix) a data matrix, size dlen x dim
+%
+%   qe       (scalar) mean quantization error
+%   te       (scalar) topographic error
+%
+% The issue of SOM quality is a complicated one. Typically two
+% evaluation criterias are used: resolution and topology preservation.
+% If the dimension of the data set is higher than the dimension of the 
+% map grid, these usually become contradictory goals. 
+%
+% The first value returned by this function measures resolution and the
+% second the topology preservation.
+%  qe : Average distance between each data vector and its BMU.
+%  te : Topographic error, the proportion of all data vectors
+%       for which first and second BMUs are not adjacent units.
+%
+% NOTE: when calculating BMUs of data vectors, the mask of the given 
+%       map is used.
+%
+% For more help, try 'type som_quality' or check out the online documentation.
+% See also SOM_BMUS.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_quality
+%
+% PURPOSE
+%
+% Calculates two quality measures for the given map.
+%
+% SYNTAX
+%
+%  qe = som_quality(sM,sD);
+%  qe = som_quality(sM,D);
+%  [qe,te] = som_quality(...);
+%
+% DESCRIPTION
+%
+% This function measures the quality of the given map. The measures are
+% data-dependent: they measure the map in terms of the given
+% data. Typically, the quality of the map is measured in terms of the
+% training data. The returned quality measures are average quantization
+% error and topographic error.
+%
+% The issue of SOM quality is a complicated one. Typically two evaluation
+% criterias are used: resolution and topology preservation. There are
+% many ways to measure them. The ones implemented here were chosen for
+% their simplicity.
+%
+%  qe : Average distance between each data vector and its BMU.
+%       Measures map resolution.
+%  te : Topographic error, the proportion of all data vectors
+%       for which first and second BMUs are not adjacent units.
+%       Measures topology preservation.
+%
+% NOTE: when calculating BMUs of data vectors, the mask of the given 
+%       map is used. The mask affects the quantization errors, too.
+%       If you want the quantization errors without the weighting given
+%       by the mask, you can use the following code: 
+%         bmus = som_bmus(sMap,D); % this uses the mask in finding the BMUs
+%         for i=1:length(bmus), 
+%           dx = sMap.codebook(bmus(i),:)-D(i,:); % m - x
+%           dx(isnan(dx)) = 0;                    % remove NaNs 
+%           qerr(i) = sqrt(sum(dx.^2));           % euclidian distance
+%         end
+%         qe = mean(qerr); % average quantization error
+%
+% Please note that you should _not_ trust the measures blindly. Generally,
+% both measures give the best results when the map has overfitted the
+% data. This may happen when the number of map units is as large or larger
+% than the number of training samples. Beware when you have such a case.
+%
+% REFERENCES
+%
+% Kohonen, T., "Self-Organizing Map", 2nd ed., Springer-Verlag, 
+%    Berlin, 1995, pp. 113.
+% Kiviluoto, K., "Topology Preservation in Self-Organizing Maps", 
+%    in the proceeding of International Conference on Neural
+%    Networks (ICNN), 1996, pp. 294-299.
+%
+% INPUT ARGUMENTS
+%
+%  sMap    (struct) Map struct.
+%  D                The data to be used.
+%          (matrix) A data matrix, size dlen x dim.
+%          (struct) A data struct.
+%
+% OUTPUT ARGUMENTS
+% 
+%  qe      (scalar) mean quantization error
+%  te      (scalar) topographic error
+%
+% EXAMPLES
+%
+%  qe = som_quality(sMap,D);
+%  [qe,te] = som_quality(sMap,sD);
+%
+% SEE ALSO
+% 
+%  som_bmus         Find BMUs for the given set of data vectors.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 220997
+% Version 2.0beta juuso 151199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+% input arguments
+if nargin < 2, error('Not enough input arguments.'); end
+
+% data
+if isstruct(D), D = D.data; end
+[dlen dim] = size(D);
+
+% calculate topographic error, too?
+if nargout==1, b=1; else b=[1:2]; end
+[bmus qerrs]= som_bmus(sMap,D,b);
+inds = find(~isnan(bmus(:,1)));
+bmus = bmus(inds,:);
+qerrs = qerrs(inds,:);
+l = length(inds);
+if ~l, error('Empty data set.'); end
+
+% mean quantization error
+mqe = mean(qerrs(:,1));
+
+if length(b)==2, % topographic error
+  Ne = full(som_unit_neighs(sMap.topol));
+  tge = 0;
+  for i=1:l, tge = tge+(Ne(bmus(i,1),bmus(i,2)) ~= 1); end
+  tge = tge / l;
+else
+  tge = NaN;
+end
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_randinit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,215 @@
+function sMap = som_randinit(D, varargin)
+
+%SOM_RANDINIT Initialize a Self-Organizing Map with random values.
+%
+% sMap = som_randinit(D, [[argID,] value, ...])
+%
+%  sMap = som_randinit(D);
+%  sMap = som_randinit(D,sMap);
+%  sMap = som_randinit(D,'munits',100,'hexa');
+% 
+%  Input and output arguments ([]'s are optional): 
+%    D                 The training data.
+%             (struct) data struct
+%             (matrix) data matrix, size dlen x dim
+%   [argID,   (string) Parameters affecting the map topology are given 
+%    value]   (varies) as argument ID - argument value pairs, listed below.
+%
+%   sMap      (struct) map struct
+%
+% Here are the valid argument IDs and corresponding values. The values 
+% which are unambiguous (marked with '*') can be given without the
+% preceeding argID.
+%  'munits'       (scalar) number of map units
+%  'msize'        (vector) map size
+%  'lattice'     *(string) map lattice: 'hexa' or 'rect'
+%  'shape'       *(string) map shape: 'sheet', 'cyl' or 'toroid'
+%  'topol'       *(struct) topology struct
+%  'som_topol','sTopol'    = 'topol'
+%  'map'         *(struct) map struct
+%  'som_map','sMap'        = 'map'
+%
+% For more help, try 'type som_randinit' or check out online documentation.
+% See also SOM_MAP_STRUCT, SOM_LININIT, SOM_MAKE.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_randinit
+%
+% PURPOSE
+%
+% Initializes a SOM with random values.
+%
+% SYNTAX
+%
+%  sMap = som_randinit(D)
+%  sMap = som_randinit(D,sMap);
+%  sMap = som_randinit(D,'munits',100,'hexa');
+%
+% DESCRIPTION
+%
+% Initializes a SOM with random values. If necessary, a map struct
+% is created first. For each component (xi), the values are uniformly
+% distributed in the range of [min(xi) max(xi)]. 
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  D                 The training data.
+%           (struct) Data struct. If this is given, its '.comp_names' and 
+%                    '.comp_norm' fields are copied to the map struct.
+%           (matrix) data matrix, size dlen x dim
+%  
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments can be given as 'argID',value -pairs. If an
+%  argument is given value multiple times, the last one is used. 
+%
+%  Here are the valid argument IDs and corresponding values. The values 
+%  which are unambiguous (marked with '*') can be given without the 
+%  preceeding argID.
+%  'dlen'         (scalar) length of the training data
+%  'data'         (matrix) the training data
+%                *(struct) the training data
+%  'munits'       (scalar) number of map units
+%  'msize'        (vector) map size
+%  'lattice'     *(string) map lattice: 'hexa' or 'rect'
+%  'shape'       *(string) map shape: 'sheet', 'cyl' or 'toroid'
+%  'topol'       *(struct) topology struct
+%  'som_topol','sTopol'    = 'topol'
+%  'map'         *(struct) map struct
+%  'som_map','sMap'        = 'map'
+%
+% OUTPUT ARGUMENTS
+% 
+%  sMap     (struct) The initialized map struct.
+%
+% EXAMPLES
+%
+%  sMap = som_randinit(D);
+%  sMap = som_randinit(D,sMap);
+%  sMap = som_randinit(D,sTopol);
+%  sMap = som_randinit(D,'msize',[10 10]);
+%  sMap = som_randinit(D,'munits',100,'hexa');
+%
+% SEE ALSO
+% 
+%  som_map_struct   Create a map struct.
+%  som_lininit      Initialize a map using linear initialization algorithm.
+%  som_make         Initialize and train self-organizing map.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta ecco 100997
+% Version 2.0beta juuso 101199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+% data
+if isstruct(D), 
+  data_name = D.name; 
+  comp_names = D.comp_names; 
+  comp_norm = D.comp_norm; 
+  D = D.data;
+  struct_mode = 1; 
+else 
+  data_name = inputname(1); 
+  struct_mode = 0; 
+end
+[dlen dim] = size(D);
+
+% varargin
+sMap = [];
+sTopol = som_topol_struct; 
+sTopol.msize = 0; 
+munits = NaN;
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     case 'munits',     i=i+1; munits = varargin{i}; sTopol.msize = 0;
+     case 'msize',      i=i+1; sTopol.msize = varargin{i};
+                               munits = prod(sTopol.msize); 
+     case 'lattice',    i=i+1; sTopol.lattice = varargin{i}; 
+     case 'shape',      i=i+1; sTopol.shape = varargin{i}; 
+     case {'som_topol','sTopol','topol'}, i=i+1; sTopol = varargin{i}; 
+     case {'som_map','sMap','map'}, i=i+1; sMap = varargin{i}; sTopol = sMap.topol;
+     case {'hexa','rect'},          sTopol.lattice = varargin{i}; 
+     case {'sheet','cyl','toroid'}, sTopol.shape = varargin{i};
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}.type, 
+     case 'som_topol',
+      sTopol = varargin{i}; 
+     case 'som_map', 
+      sMap = varargin{i};
+      sTopol = sMap.topol;
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_topol_struct) Ignoring invalid argument #' num2str(i)]); 
+  end
+  i = i+1; 
+end
+
+if ~isempty(sMap), 
+  [munits dim2] = size(sMap.codebook);
+  if dim2 ~= dim, error('Map and data must have the same dimension.'); end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% create map
+
+% map struct
+if ~isempty(sMap), 
+  sMap = som_set(sMap,'topol',sTopol);
+else  
+  if ~prod(sTopol.msize), 
+    if isnan(munits), 
+      sTopol = som_topol_struct('data',D,sTopol);
+    else
+      sTopol = som_topol_struct('data',D,'munits',munits,sTopol);
+    end
+  end  
+  sMap = som_map_struct(dim, sTopol); 
+end
+
+if struct_mode, 
+  sMap = som_set(sMap,'comp_names',comp_names,'comp_norm',comp_norm);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialization
+
+% train struct
+sTrain = som_train_struct('algorithm','randinit');
+sTrain = som_set(sTrain,'data_name',data_name);
+
+munits = prod(sMap.topol.msize);
+sMap.codebook = rand([munits dim]); 
+
+% set interval of each component to correct value
+for i = 1:dim,
+  inds = find(~isnan(D(:,i)) & ~isinf(D(:,i))); 
+  if isempty(inds), mi = 0; ma = 1; 
+  else ma = max(D(inds,i)); mi = min(D(inds,i));  
+  end
+  sMap.codebook(:,i) = (ma - mi) * sMap.codebook(:,i) + mi; 
+end
+
+% training struct
+sTrain = som_set(sTrain,'time',datestr(now,0));
+sMap.trainhist = sTrain;
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_read_cod.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,215 @@
+function sMap = som_read_cod(filename)
+
+%SOM_READ_COD Reads a SOM_PAK format codebook file.
+%
+% sMap = som_read_cod(filename);
+%
+%  sMap = som_read_cod('map1.cod');
+%
+%  Input and output arguments: 
+%   filename    (string) name of input file
+%   sMap        (struct) self-organizing map structure
+%
+% The file must be in SOM_PAK format. Empty lines and lines starting 
+% with a '#' are ignored, except the ones starting with '#n'. The strings 
+% after '#n' are read to field 'comp_names' of the map structure.
+%
+% For more help, try 'type som_read_cod' or check out online documentation.
+% See also SOM_WRITE_COD, SOM_READ_DATA, SOM_WRITE_DATA, SOM_MAP_STRUCT.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_read_cod
+%
+% PURPOSE
+%
+% Reads a Self-Organizing Map from an ascii file in SOM_PAK format.
+%
+% SYNTAX
+%
+%  sMap = som_read_cod(filename); 
+%
+% DESCRIPTION
+%
+% This function is offered for compatibility with SOM_PAK, a SOM 
+% software package in C. It reads map files written in SOM_PAK format.
+%
+% The SOM_PAK map file format is as follows. The first line must contain
+% the input space dimension, lattice type ('rect' or 'hexa'), map grid
+% size in x-direction, map grid size in y-direction, and neighborhood
+% function ('bubble' or 'gaussian'), in that order. The following lines
+% are comment lines, empty lines or data lines. 
+%
+% Each data line contains the weight vector of one map unit and its
+% labels. From the beginning of the line, first are values of the vector
+% components separated by whitespaces, then labels, again separated by
+% whitespaces. The order of map units in the file are one row at a time
+% from right to left, from the top to the bottom of the map (x-direction
+% first, then y-direction). 
+% 
+% Comment lines start with '#'. Comment lines as well as empty lines are
+% ignored, except if the comment line starts with '#n'. In that case the
+% line should contain names of the vector components separated by
+% whitespaces.
+%
+% In the returned map struct, several fields has to be set to default
+% values, since the SOM_PAK file does not contain information on
+% them. These include map shape ('sheet'), mask ([1 ... 1]),
+% normalizations (none), trainhist (two entries, first with algorithm
+% 'init' and the second with 'seq', both with data name 'unknown'),
+% possibly also component names ('Var1',...). 
+%
+% REQUIRED INPUT PARAMETERS
+%
+%  filename   (string) the name of the input file
+%
+% OUTPUT ARGUMENTS
+%
+%  sMap       (struct) the resulting SOM struct
+% 
+% EXAMPLES
+%
+%  sMap = som_read_cod('map1.cod');
+%
+% SEE ALSO
+% 
+%  som_write_cod    Writes a map struct into a file in SOM_PAK format.
+%  som_read_data    Reads data from an ascii file.
+%  som_write_data   Writes data struct into a file in SOM_PAK format.
+%  som_map_struct   Creates map structs.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta ecco 221097
+% Version 2.0beta juuso 151199 250400
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(1, 1, nargin))  % check no. of input args is correct
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialize variables
+
+lnum           = 0;    % codebook vector counter
+comment_start  = '#';  % the char a SOM_PAK command line starts with
+comp_name_line = '#n'; % string used to start a special command line,
+                       % which contains names of each component
+
+% open input file
+
+fid = fopen(filename);
+if fid < 0, error(['Cannot open ' filename]); end
+ 
+% read header line
+
+ok_cnt = 0;
+lin = fgetl(fid); li = lin;
+[dim c err n]  = sscanf(li, '%d%[^ \t]'); ok_cnt=ok_cnt+c; li = li(n:end);
+[lattice c err n] = sscanf(li,'%s%[^ \t]'); ok_cnt=ok_cnt+c; li = li(n:end);
+[msize(2) c err n] = sscanf(li, '%d%[^ \t]'); ok_cnt=ok_cnt+c; li = li(n:end);
+[msize(1) c err n] = sscanf(li, '%d%[^ \t]'); ok_cnt=ok_cnt+c; li = li(n:end);
+[neigh c err n] = sscanf(li, '%s%[^ \t\n]'); ok_cnt=ok_cnt+c;
+
+if ok_cnt ~= 5
+  error([ 'Invalid header line: ' lin ]); 
+end                                 
+
+% create map struct and set its fields according to header line
+
+munits = prod(msize);
+sMap   = som_map_struct(dim, 'msize', msize, ...
+			lattice, 'sheet', 'neigh', neigh);
+[sT0, ok] = som_set('som_train','algorithm','init','data_name','unknown');
+sT1       = som_set('som_train','algorithm','seq','data_name','unknown',...
+                    'neigh',neigh,'mask',ones(dim,1));
+[sMap, ok, msgs] = som_set(sMap,'name',filename,'trainhist',{sT0,sT1});
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% read codebook from the file
+
+codebook   = zeros(munits,dim);
+labels     = cell(munits,1);
+comp_names = sMap.comp_names;
+form       = [repmat('%f',[1 dim-1]) '%f%[^ \t]'];
+
+while 1, 
+  li = fgetl(fid);                         % read next line
+  if ~isstr(li), break, end;               % is this the end of file?
+
+  [data, c, err, n] = sscanf(li, form);
+  if c < dim % if there were less numbers than dim on the input file line
+    if c == 0
+      if strncmp(li, comp_name_line, 2) % component name line?
+        li = li(3:end); i = 0; c = 1;
+        while c
+          [s, c, e, n] = sscanf(li, '%s%[^ \t]');
+          if ~isempty(s), i = i + 1; comp_names{i} = s; li = li(n:end); end
+        end
+
+        if i ~= dim
+          error(['Illegal number of component names: ' num2str(i) ...
+                 ' (dimension is ' num2str(dim) ')']);
+        end
+      elseif ~strncmp(li, comment_start, 1) % not a comment, is it error?
+        [s, c, e, n] = sscanf(li, '%s%[^ \t]');
+        if c
+          error(['Invalid vector on input file line ' ...
+                 num2str(lnum+1) ': [' deblank(li) ']']),
+        end
+      end
+    else
+      error(['Only ' num2str(c) ' vector components on input file line ' ...
+             num2str(lnum+1) ' (dimension is ' num2str(dim) ')']);
+    end
+
+  else
+
+    lnum = lnum + 1;                % this was a line containing data vector
+    codebook(lnum, 1:dim) = data'; % add data to struct
+
+    % read labels
+
+    if n < length(li)
+      li = li(n:end);
+      i = 0; n = 1; c = 1;
+      while c
+        [s, c, e, n_new] = sscanf(li(n:end), '%s%[^ \t]');
+        if c, i = i + 1; labels{lnum, i} = s; n = n + n_new - 1; end
+      end
+    end
+  end
+end
+
+% close the input file
+
+if fclose(fid) < 0
+  error(['Cannot close file ' filename]); 
+else
+  fprintf(2, '\rmap read ok         \n');
+end
+
+% check that the number of lines read was correct
+
+if lnum ~= munits
+  error(['Illegal number of map units: ' num2str(lnum) ' (should be ' num2str(munits) ').']);
+end
+
+% set values
+
+% in SOM_PAK the xy-indexing is used, while in Matlab ij-indexing
+% therefore, the codebook vectors have to be reorganized 
+
+order = reshape([1:munits],msize);
+order = reshape(order',[munits 1]);
+codebook(order,:) = codebook;
+labels(order,:) = labels; 
+
+sMap.codebook   = codebook;
+sMap.labels     = labels;
+sMap.comp_names = comp_names;
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_read_data.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,288 @@
+function sData = som_read_data(filename, varargin)
+
+%SOM_READ_DATA Read data from an ascii file in SOM_PAK format.
+%
+% sD = som_read_data(filename, dim, [missing])
+% sD = som_read_data(filename, [missing])
+%
+%  sD = som_read_data('system.data');
+%  sD = som_read_data('system.data',10);
+%  sD = som_read_data('system.data','*');
+%  sD = som_read_data('system.data',10,'*');
+%
+%  Input and output arguments ([]'s are optional): 
+%   filename    (string) input file name
+%   dim         (scalar) input space dimension
+%   [missing]   (string) string which indicates a missing component
+%                        value, 'NaN' by default
+%
+%   sD          (struct) data struct
+%
+% Reads data from an ascii file. The file must be in SOM_PAK format, 
+% except that it may lack the input space dimension from the first
+% line. 
+%
+% For more help, try 'type som_read_data' or check out online documentation.
+% See also  SOM_WRITE_DATA, SOM_READ_COD, SOM_WRITE_COD, SOM_DATA_STRUCT.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_read_data
+%
+% PURPOSE
+%
+% Reads data from an ascii file in SOM_PAK format.
+%
+% SYNTAX
+%
+%  sD = som_read_data(filename)
+%  sD = som_read_data(..., dim)
+%  sD = som_read_data(..., 'missing')
+%  sD = som_read_data(..., dim, 'missing')
+%
+% DESCRIPTION
+%
+% This function is offered for compatibility with SOM_PAK, a SOM software
+% package in C. It reads data from a file in SOM_PAK format.
+%
+% The SOM_PAK data file format is as follows. The first line must
+% contain the input space dimension and nothing else. The following
+% lines are comment lines, empty lines or data lines. Unlike programs
+% in SOM_PAK, this function can also determine the input dimension
+% from the first data lines, if the input space dimension line is
+% missing.  Note that the SOM_PAK format is not fully supported: data
+% vector 'weight' and 'fixed' properties are ignored (they are treated
+% as labels).
+%
+% Each data line contains one data vector and its labels. From the beginning
+% of the line, first are values of the vector components separated by
+% whitespaces, then labels also separated by whitespaces. If there are
+% missing values in the vector, the missing value marker needs to be
+% specified as the last input argument ('NaN' by default). The missing
+% values are stored as NaNs in the data struct. 
+% 
+% Comment lines start with '#'. Comment lines as well as empty lines are
+% ignored, except if the comment lines that start with '#n' or '#l'. In that
+% case the line should contain names of the vector components or label names
+% separated by whitespaces.
+%
+% NOTE: The minimum value Matlab is able to deal with (realmax)
+% should not appear in the input file. This is because function sscanf is
+% not able to read NaNs: the NaNs are in the read phase converted to value
+% realmax.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  filename    (string) input filename
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+%  dim         (scalar) input space dimension
+%  missing     (string) string used to denote missing components (NaNs); 
+%                       default is 'NaN'
+%
+% OUTPUT ARGUMENTS
+%
+%  sD   (struct) the resulting data struct
+%
+% EXAMPLES
+%
+% The basic usage is:
+%  sD = som_read_data('system.data');
+%
+% If you know the input space dimension beforehand, and the file does
+% not contain it on the first line, it helps if you specify it as the
+% second argument: 
+%  sD = som_read_data('system.data',9);
+%
+% If the missing components in the data are marked with some other
+% characters than with 'NaN', you can specify it with the last argument: 
+%  sD = som_read_data('system.data',9,'*')
+%  sD = som_read_data('system.data','NaN')
+%
+% Here's an example data file:
+%
+% 5
+% #n one two three four five
+% #l ID
+% 10 2 3 4 5 1stline label
+% 0.4 0.3 0.2 0.5 0.1 2ndline label1 label2
+% # comment line: missing components are indicated by 'x':s
+% 1 x 1 x 1 3rdline missing_components
+% x 1 2 2 2 
+% x x x x x 5thline emptyline
+%
+% SEE ALSO
+%
+%  som_write_data   Writes data structs/matrices to a file in SOM_PAK format.
+%  som_read_cod     Read a map from a file in SOM_PAK format.
+%  som_write_cod    Writes data struct into a file in SOM_PAK format.
+%  som_data_struct  Creates data structs.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta ecco 221097
+% Version 2.0beta ecco 060899, juuso 151199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(1, 3, nargin))  % check no. of input args is correct
+
+dont_care       = 'NaN';  % default don't care string
+comment_start   = '#';    % the char a SOM_PAK command line starts with
+comp_name_line  = '#n';   % string denoting a special command line,
+                          % which contains names of each component
+label_name_line = '#l';   % string denoting a special command line,
+                          % which contains names of each label
+block_size      = 1000;   % block size used in file read
+
+kludge          = num2str(realmax, 100); % used in sscanf                
+  
+
+% open input file
+
+fid = fopen(filename);
+if fid < 0
+  error(['Cannot open ' filename]); 
+end
+
+% process input arguments
+
+if nargin == 2 
+  if isstr(varargin{1})
+    dont_care = varargin{1};
+  else
+    dim      = varargin{1};
+  end
+elseif nargin == 3
+  dim       = varargin{1};
+  dont_care = varargin{2};
+end
+
+% if the data dimension is not specified, find out what it is
+
+if nargin == 1 | (nargin == 2 & isstr(varargin{1}))
+
+  fpos1 = ftell(fid); c1 = 0;      % read first non-comment line
+  while c1 == 0,
+    line1 = strrep(fgetl(fid), dont_care, kludge);
+    [l1, c1] = sscanf(line1, '%f ');
+  end
+
+  fpos2 = ftell(fid); c2 = 0;      % read second non-comment line
+  while c2 == 0,
+    line2 = strrep(fgetl(fid), dont_care, kludge);
+    [l2, c2] = sscanf(line2, '%f ');
+  end
+
+  if (c1 == 1 & c2 ~= 1) | (c1 == c2 & c1 == 1 & l1 == 1)
+    dim = l1;
+    fseek(fid, fpos2, -1);
+  elseif (c1 == c2)
+    dim = c1;
+    fseek(fid, fpos1, -1);
+    warning on
+    warning(['Automatically determined data dimension is ' ...
+	     num2str(dim) '. Is it correct?']); 
+  else
+    error(['Invalid header line: ' line1]);
+  end
+end 
+
+% check the dimension is valid
+
+if dim < 1 | dim ~= round(dim) 
+  error(['Illegal data dimension: ' num2str(dim)]);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% read data
+
+sData       = som_data_struct(zeros(1, dim), 'name', filename); 
+lnum        = 0;                                    % data vector counter
+data_temp   = zeros(block_size, dim);
+labs_temp   = cell(block_size, 1);
+comp_names  = sData.comp_names;
+label_names = sData.label_names;
+form        = [repmat('%g',[1 dim-1]) '%g%[^ \t]'];
+
+limit       = block_size;
+while 1,
+  li = fgetl(fid);                         % read next line
+  if ~isstr(li), break, end;               % is this the end of file? 
+
+  % all missing vectors are replaced by value realmax because
+  % sscanf is not able to read NaNs  
+  li = strrep(li, dont_care, kludge);     
+  [data, c, err, n] = sscanf(li, form);
+  if c < dim % if there were less numbers than dim on the input file line
+    if c == 0
+      if strncmp(li, comp_name_line, 2) % component name line?
+	li = strrep(li(3:end), kludge, dont_care); i = 0; c = 1;
+	while c
+	  [s, c, e, n] = sscanf(li, '%s%[^ \t]');
+	  if ~isempty(s), i = i + 1; comp_names{i} = s; li = li(n:end); end
+	end
+
+	if i ~= dim 
+	  error(['Illegal number of component names: ' num2str(i) ...
+		 ' (dimension is ' num2str(dim) ')']); 
+	end
+      elseif strncmp(li, label_name_line, 2) % label name line?
+	li = strrep(li(3:end), kludge, dont_care); i = 0; c = 1;
+	while c
+	  [s, c, e, n] = sscanf(li, '%s%[^ \t]');
+	  if ~isempty(s), i = i + 1; label_names{i} = s; li = li(n:end); end
+	end
+      elseif ~strncmp(li, comment_start, 1) % not a comment, is it error?
+	[s, c, e, n] = sscanf(li, '%s%[^ \t]');
+	if c
+	  error(['Invalid vector on input file data line ' ...
+		 num2str(lnum+1) ': [' deblank(li) ']']),
+	end
+      end
+    else
+      error(['Only ' num2str(c) ' vector components on input file data line ' ...
+	     num2str(lnum+1) ' (dimension is ' num2str(dim) ')']);
+    end
+
+  else
+
+    lnum = lnum + 1;                % this was a line containing data vector
+    data_temp(lnum, 1:dim) = data'; % add data to struct
+
+    if lnum == limit       % reserve more memory if necessary
+      data_temp(lnum+1:lnum+block_size, 1:dim) = zeros(block_size, dim);
+      [dummy nl] = size(labs_temp);
+      labs_temp(lnum+1:lnum+block_size,1:nl) = cell(block_size, nl);
+      limit = limit + block_size;
+    end
+    
+    % read labels
+    
+    if n < length(li)
+      li = strrep(li(n:end), kludge, dont_care); i = 0; n = 1; c = 1;
+      while c
+	[s, c, e, n_new] = sscanf(li(n:end), '%s%[^ \t]');
+	if c, i = i + 1; labs_temp{lnum, i} = s; n = n + n_new - 1; end
+      end
+    end
+  end
+end
+
+% close input file
+if fclose(fid) < 0, error(['Cannot close file ' filename]);
+else fprintf(2, '\rdata read ok         \n'); end
+
+% set values
+data_temp(data_temp == realmax) = NaN;
+sData.data        = data_temp(1:lnum,:);
+sData.labels      = labs_temp(1:lnum,:);
+sData.comp_names  = comp_names;
+sData.label_names = label_names;
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_recolorbar.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,351 @@
+function h=som_recolorbar(p, ticks, scale, labels)
+
+%SOM_RECOLORBAR Refresh and  rescale colorbars in the current SOM_SHOW fig.
+%
+% h = som_recolorbar([p], [ticks], [scaling], [labels])
+%
+%   colormap(jet); som_recolorbar   
+%
+% Input and output arguments ([]'s are optional) 
+%  [p]      (vector) subplot number vector 
+%           (string) 'all' (the default), 'comp' to process only
+%                    component planes        
+%  [ticks]  (string) 'auto' or 'border', default: 'auto'
+%           (cell array) p x 1 cell array of p row vectors
+%           (vector) the same ticks are applied to all given subplots
+%           (scalar) value is at least 2: the number of ticks to show, 
+%                    evenly spaced between and including minimum and maximum 
+%  [scale]  (string) 'denormalized' or 'normalized' (the default)
+%  [labels] (cell array) p x 1 cell array of cells containing strings
+%
+%  h        (vector) handles to the colorbar objects.
+%
+% This function refreshes the colorbars in the figure created by SOM_SHOW.
+% Refreshing  is necessary if you have changed the colormap.
+% Each colorbar has letter 'd' or 'n' and possibly 'u' as label. Letter 'd' means
+% that the scale is denormalized, letter 'n' that the scale is
+% normalized, and 'u' is for user specified labels.
+%
+% For more help, try 'type som_recolorbar' or check out online documentation.
+% See also SOM_SHOW
+ 
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_recolorbar
+%
+% PURPOSE
+% 
+% Refreshes the the colorbars in the figure.
+%
+% SYNTAX
+%
+%  h = som_recolorbar
+%  h = som_recolorbar(p)
+%  h = som_recolorbar(p, ticks)
+%  h = som_recolorbar(p, ticks, scaling)
+%  h = som_recolorbar(p, ticks, scaling, labels)
+%
+% DESCRIPTION
+%
+% This function refreshes the colorbars in the figure created by SOM_SHOW.
+% Refreshing is necessary if you have changed the colormap.  Each colorbar
+% has letter 'd' or 'n' and possibly 'u' as label. Letter 'd' means that the
+% scale is denormalized, letter 'n' that the scale is normalized, and 'u' is
+% for user specified labels.
+%
+% Different argument combinations:
+%
+% 1. Argument 'ticks' has string values:
+%  - 'auto' for input argument ticks sets the automatic tick
+%     marking on (factory default). 
+%  - 'border' sets the tick marks to the color borders. This is 
+%     convenient if there are only few colors in use. 
+%
+%  Argument scale controls the scaling of the tick mark label values. 
+%  'normalized' means that the tick mark labels are directly the values 
+%  of the ticks, that is, they refer to the map codebook values. 
+%  Value 'denormalized' scales the tick mark label values back to the original
+%  data scaling. This is made using som_denormalize_data.
+%
+% 2. Argument 'ticks' is a cell array of vectors:
+%  The values are set to be the tick marks to the colorbar specified by p.
+%  - if arg. scale is 'normalized' the ticks are set directly to the colorbar.
+%  - if arg. scale is 'denormalized' the tick values are first normalized 
+%    in the same way as the data.
+%
+% 3. Argument 'ticks' is a vector
+%  As above, but the same values are used for all (given) subplots.
+%  
+% 4. Argument 'ticks' is a scalar
+%  The ticks are set to equally spaced values between (and including)
+%  minimum and maximum.
+%     
+% Argument 'labels' specify user defined labels to the tick marks
+%
+% NOTE: ticks are rounded to contain three significant digits.
+%
+% OPTIONAL INPUT ARGUMENTS
+% 
+%  p        (vector) subplot number vector 
+%           (string) 'all' (the default), 'comp' to effect only 
+%                    component planes
+%
+%  ticks    (string) 'auto' or 'border', default: 'auto'
+%           (cell array) p x 1 cell array of p row vectors
+%           (vector) as the cell array, but the same vector is 
+%                    applied to all given subplots
+%           (scalar) the number of ticks to show: these are 
+%                    evenly space between minimum and maximum
+%
+%  scale    (string) 'denormalized' or 'normalized' (the default)
+%
+%  labels   (cell array) p x 1 cell array of cells containing strings
+%
+% OUTPUT ARGUMENTS
+%
+%  h        (vector) handles to the colorbar objects.
+%
+% EXAMPLE
+%
+%  colormap(jet(5)); som_recolorbar('all','border','denormalized')
+%      % Uses five colors and sets the ticks on the color borders.
+%      % Tick label values are denormalized back to the original data scaling
+%
+%  colormap(copper(64));som_recolorbar
+%      % changes to colormap copper and resets default ticking and labeling
+%
+%  som_recolorbar('all',3)
+%      % To put 3 ticks to each colorbar so that minimum, mean and
+%      % maximum values on the colorbar are shown.
+% 
+%  som_recolorbar([1 3],{[0.1 0.2 0.3];[0.2 0.4]},'denormalized')
+%      % Ticks colorbar 1 by first normalizing values 0.1, 0.2, 0.3 and
+%      % then setting the ticks to the colorbar. Labels are of course 
+%      % 0.1, 0.2 and 0.3. Ticks colorbar 3 in the same way using values
+%      % 0.2 and 0.4.
+%
+%  som_recolorbar([2 4],{[0.1 0.2];[-1.2 3]},'normalized',{{'1' '2'};{'a' 'b'}})
+%      % Ticks colorbar 2 and 4 directly to the specified values. Sets labels
+%      % '1' '2' and 'a' 'b' to the ticks.
+%
+%  som_recolorbar([2 4],{[0.1 0.2];[-1.2 3]},'normalized',{{'1' '2'};{'a' 'b'}})
+%      % as previous one, but normalizes tick values first
+%
+% SEE ALSO
+% 
+%  som_show        Basic SOM visualization.
+%  som_normalize   Normalization operations.
+%  som_denormalize Denormalization operations.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 1.0beta Johan 061197 
+% Version 2.0beta juuso 151199 130300 160600 181101
+
+%% Init & check %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+error(nargchk(0, 4, nargin))    % check no. of input args
+
+% Check the subplot vector p and  get the handles, exit if error
+% Default subplot vector is 'all'
+
+if nargin < 1 | isempty(p)                       % default p
+  p= 'all';
+end
+
+% check SOM_SHOW and get the figure data. Exit, if error
+
+[handles, msg, lattice, msize, dim, normalization, comps]= ...
+    vis_som_show_data(p, gcf);
+error(msg);                                       
+
+if nargin < 2 | isempty(ticks)                   % default tick mode is 'auto'
+  ticks = 'auto';
+elseif isa(ticks,'cell')                         % check for cell
+  tickValues = ticks; 
+  ticks= 'explicit';
+elseif isa(ticks,'double') & length(ticks)>1,
+  tickValues = {ticks}; 
+  ticks = 'explicit'; 
+elseif isa(ticks,'double') & length(ticks)==1,
+  tickValues = max(2,round(ticks)); 
+  ticks = 'evenspace'; 
+end
+if ~ischar(ticks)                                % invalid argument
+  error('The second argument should be a string or a cell array of vectors.');
+end
+
+switch ticks                                     % check ticks
+ case {'auto','border'}, % nill
+ case 'evenspace', 
+  tickValues_tmp = cell(length(handles),1); 
+  for i=1:length(handles), tickValues_tmp{i} = tickValues; end
+  tickValues = tickValues_tmp; 
+ case 'explicit', 
+  if length(tickValues)==1 & length(handles)>1, 
+    tickValues_tmp = cell(length(handles),1); 
+    for i=1:length(handles), tickValues_tmp{i} = tickValues{1}; end
+    tickValues = tickValues_tmp; 
+  end
+  if length(tickValues) ~= length(handles), 
+    error('Cell containing the ticks has wrong size.')
+  end
+otherwise
+  error('''auto'' or ''border'' expected for the second argument.');
+end
+
+if nargin < 3 | isempty(scale)                   % default mode is normalized
+  scale= 'normalized';
+end
+if ~ischar(scale)                                % check scale type
+  error('The third argument should be a string.'); 
+end
+switch scale                                     % check the string
+ case { 'normalized', 'denormalized'} % ok
+ case 'n', scale = 'normalized'; 
+ case 'd', scale = 'denormalized'; 
+ otherwise   
+  error('''normalized'' or ''denormalized'' expected for the third argument.')
+end
+
+if nargin < 4 | isempty(labels)                  % default is autolabeling
+  labels = 'auto';
+elseif ~isa(labels,'cell')                       % check type
+  error('The fourth argument should be a cell array of cells containing strings.')
+else
+  labelValues=labels;                            % set labels
+  labels = 'explicit';
+  if length(labelValues) == length(handles)      % check size
+    ;
+  else
+    error('Cell containing the labels has wrong size')
+  end
+end
+
+%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+n = size(colormap,1)+1;                      % number of colors+1
+h_ = zeros(length(handles),1);  
+
+for i=1:length(handles),                   % MAIN LOOP BEGINS
+  axes(handles(i));                        % set axes, refres colorbar and  
+  if comps(i)>=0,   
+    h_(i)=colorbar;                          % get colorbar handles
+
+    colorbardir=get(h_(i),'YaxisLocation');
+    switch colorbardir                     % get colorbar direction &
+     case 'left'                            % set some strings
+      Tick='Xtick'; Lim='Xlim'; LabelMode='XTickLabelMode'; Label='XtickLabel';
+     case 'right'
+      Tick='Ytick'; Lim='Ylim'; LabelMode='YTickLabelMode'; Label='YtickLabel';
+     otherwise
+      error('Internal error: unknown value for YaxisLocation'); % fatal
+    end                                                         
+    
+    switch ticks                         
+     case 'auto'
+      set(h_(i),LabelMode,'auto');        % factory default ticking
+      tickValues{i}=get(h_(i),Tick);       % get tick values
+     case 'border' 
+      limit=caxis;                        
+      t=linspace(limit(1),limit(2),n);    % set n ticks between min and max 
+      t([1 length(t)])=get(h_(i),Lim); % <- caxis is not necerraily the same 
+      tickValues{i}=t;                    % as the colorbar min & max values
+     case 'evenspace'
+      limit = caxis; 
+      t = linspace(limit(1),limit(2),tickValues{i}); 
+      t([1 length(t)])=get(h_(i),Lim);
+      tickValues{i}=t; 
+     case 'explicit'
+      if comps(i)>0, 
+	if strcmp(scale,'normalized')     % normalize tick values
+	  tickValues{i} = som_normalize(tickValues{i},normalization{comps(i)});
+	end
+      end
+      
+     otherwise 
+      error('Internal error: unknown tick type')   % this shouldn't happen
+    end
+
+    %tickValues{i} = epsto0(tickValues{i});
+
+    switch labels
+     case 'auto'
+      switch scale                         
+       case 'normalized'
+	labelValues{i} = round2(tickValues{i});     % use the raw ones 
+       case 'denormalized'                 % denormalize tick values
+	if comps(i)>0, 
+	  labelValues{i} = som_denormalize(tickValues{i},normalization{comps(i)});
+	  labelValues{i} = round2(labelValues{i});     % round the scale
+	else
+	  labelValues{i} = round2(tickValues{i});
+	end
+       otherwise
+	error('Internal error: unknown scale type'); % this shouldn't happen
+      end
+     case 'explicit'
+      ;                                            % they are there already
+     otherwise
+      error('Internal error: unknown label type'); % this shouldn't happen
+    end
+
+    set(h_(i),Tick,tickValues{i});                 % set ticks and labels
+    set(h_(i),Label,labelValues{i});            
+    
+    if comps(i)>0, 
+      % Label the colorbar with letter 'n' if normalized, with letter 'd' 
+      % if denormalized and 'u' if the labels are user specified  
+      mem_axes=gca; axes(h_(i));
+      ch='  ';
+      if strcmp(scale,'normalized'),   ch(1)='n'; end
+      if strcmp(scale,'denormalized'), ch(1)='d'; end
+      if strcmp(labels,'explicit'),    ch(2)='u'; end
+      xlabel(ch); 
+      axes(mem_axes);
+    end
+  end
+end                                              % MAIN LOOP ENDS 
+
+
+%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargout>0
+  h=h_;
+end
+
+return; 
+
+%% Subfunction: ROUND2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ROUND2 rounds the labels to tol significant digits
+
+function r=round2(d)
+
+tol=3;
+
+zero=(d==0);
+d(zero)=1;
+k=floor(log10(abs(d)))-(tol-1);
+r=round(d./10.^k).*10.^k;
+r(zero)=0;
+%r=epsto0(r);
+
+%% Subfunction: ISVECTOR %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function t=isvector(v)
+% ISVECTOR checks if a matrix is a vector or not
+
+t=(ndims(v) == 2 & min(size(v)) == 1) & isnumeric(v);
+
+%% Subfunction: EPSTO0
+
+function t=epsto0(t)
+% EPSTO0 checks whether first tick value is *very* close to zero, 
+% if so sets it to zero.
+
+if (t(end)-t(1))/t(end) > 1-0.005 & abs(t(1))<1, t(1) = 0; end
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_select.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,716 @@
+function varargout=som_select(c_vect,plane_h,arg)
+
+%SOM_SELECT  Manual selection of map units from a visualization.
+%
+% som_select(c_vect,[plane_h])
+%     
+%   som_select(3)
+%   som_select(sM.labels(:,1))
+%
+%  Input arguments ([]'s are optional):
+%   c_vect    (scalar) number of classes 
+%             (vector) initial class identifiers
+%             (cell array) of strings, class names
+%             (matrix) size * x 3, the color of each class
+%   [plane_h] (scalar) handle of the plane (axes) to be marked. 
+%                      By default, the current axes is used (GCA).
+%                      For the function to work, the plot in the 
+%                      axes must have been created with the
+%                      SOM_CPLANE function (or SOM_SHOW).
+% 
+% Launches a GUI which allows user to select nodes from plane by 
+% clicking them or by choosing a region (a polygon). 
+% 
+%   Middle mouse button: selects (or clears selection of) a single node
+%   Left mouse button:   lets user draw a polygon
+%   Right mouse button:  selects (or clears selection of) the units 
+%                        inside the polygon
+% 
+% From the GUI, the color (class) is selected as well as whether
+% but buttons select or clear the selection from the units. The
+% buttons on the bottom have the following actions: 
+% 
+%   'OK'    Assigns the class identifiers to the 'ans' variable in 
+%           workspace. The value is an array of class identifiers: 
+%           strings (cellstr) if the c_vect was an array of
+%           strings, a vector otherwise.
+%   'Clear' Removes marks from the plane.
+%   'Close' Closes the application. 
+%
+% See also SOM_SHOW, SOM_CPLANE.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas 
+% Copyright (c) by Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100, juuso 010200
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+if nargin < 2, plane_h = gca; end
+if(isempty(gcbo)), arg='start'; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+switch arg
+ case 'start'
+  patch_h=find_patch(plane_h);
+  lattice=getfield(size(get(patch_h,'XData')),{1});
+  msize(1)=floor(getfield(get(plane_h,'YLim'),{2})); 
+  msize(2)=floor(getfield(get(plane_h,'XLim'),{2})-0.5);   
+  if lattice==6
+    lattice='hexa';
+  else
+    lattice='rect';
+  end
+  
+  if any(strcmp(get(patch_h,'Tag'),{'planeBar','planePie'}))
+    tmp_dim=size(get(patch_h,'XData'),2)/prod(msize);
+    tmp_xdata=get(patch_h,'XData');
+    tmp_x=tmp_xdata(:,(msize(1)*(msize(2)-1)+2)*tmp_dim);
+    if floor(tmp_x(1)) ~= round(tmp_x(1))
+      lattice = 'hexa';
+    else
+      lattice = 'rect';
+    end
+  elseif strcmp(get(patch_h,'Tag'),'planePlot')
+    tmp_lines_h=get(gca,'Children');
+    test_x=mean(get(tmp_lines_h(2),'XData'));
+    if round(test_x) ~= floor(test_x)
+      lattice = 'hexa';
+    else
+      lattice = 'rect';
+    end
+    form=0.5*vis_patch('hexa');
+    l = size(form,1);
+    
+    nx = repmat(form(:,1),1,prod(msize));
+    ny = repmat(form(:,2),1,prod(msize));
+    
+    x=reshape(repmat(1:msize(2),l*msize(1),1),l,prod(msize));
+    y=repmat(repmat(1:msize(1),l,1),1,msize(2));
+    
+    if strcmp(lattice,'hexa')
+      t = find(~rem(y(1,:),2));
+      x(:,t)=x(:,t)+.5;
+    end
+    x=x+nx;
+    y=y+ny;
+    
+    colors=reshape(ones(prod(msize),1)*[NaN NaN NaN],...
+		   [1 prod(msize) 3]);
+    v=caxis;
+    patch_h=patch(x,y,colors,...
+		  'EdgeColor','none',...
+		  'ButtonDownFcn',...
+		  'som_select([],[],''click'')',...
+		  'Tag','planePlot');
+    set([gca gcf],'ButtonDownFcn','som_select([],[],''click'')');
+    caxis(v)
+  end
+
+  c_colors = []; 
+  if iscell(c_vect)
+    [c_vect,c_names,c_classes]=class2num(c_vect);
+    if length(c_classes)<prod(msize), 
+      c_classes = zeros(prod(msize),1);
+    end
+  else
+    if all(size(c_vect)>1), 
+      c_colors = c_vect; 
+      c_names = 1:size(c_vect,1); 
+      c_vect = size(c_vect,1); 
+      c_classes = zeros(prod(msize),1);
+    elseif length(c_vect)==prod(msize),
+      c_classes = c_vect;
+      u = unique(c_classes(isfinite(c_classes) & c_classes>0));
+      c_names = u;
+      c_vect = length(u);       
+    elseif length(c_vect)>1, 
+      c_names = c_vect; 
+      c_vect = length(c_vect);
+      c_classes = zeros(prod(msize),1);
+    elseif length(c_vect)==1,
+      c_names = 1:c_vect;        
+      c_classes = zeros(prod(msize),1);
+    end
+  end
+  
+  udata.lattice=lattice;
+  udata.patch_h=patch_h;
+  udata.plane_h=plane_h;
+  udata.type=get(udata.patch_h,'Tag');
+  udata.msize=msize;
+  set(patch_h,'UserData',udata);
+  if strcmp(udata.type,'planePlot')
+    set([gca gcf],'UserData',udata);
+  end
+  str=cat(2,'som_select([],[],''click'')');
+  set(patch_h,'ButtonDownFcn',str);
+
+  draw_colorselection(c_names,c_colors);
+  tmp_data=findobj(get(0,'Children'),'Tag','SELECT_GUI');
+  tmp_data=get(tmp_data,'UserData');
+  tmp_data.c_names=c_names;
+  tmp_data.mat=reshape(c_classes,msize);
+  tmp_data.patch_h=patch_h;
+  tmp_data.plane_h=plane_h;
+  tmp_data.type=get(udata.patch_h,'Tag');
+  tmp_data.lattice=lattice;
+  tmp_data.coords=[];
+  tmp_data.poly_h=[];
+  tmp_data.msize=msize;
+  tmp_data.mode='select';  
+  set(tmp_data.fig_h,'UserData',tmp_data);   
+  draw_classes;
+  
+ case 'click'
+  switch get(gcf,'SelectionType')
+   case 'open'
+    return;
+   case {'normal','alt'}
+    draw_poly;
+   case 'extend'
+    click;
+  end 
+ case 'choose'
+  draw_colorselection(0,0,'choose');
+ case 'close'
+  close_gui;
+ case 'clear'
+  clear_plane;
+ case 'rb'
+  rb_control;
+ case 'ret_mat'
+  gui=findobj(get(0,'Children'),'Tag','SELECT_GUI');
+  gui=get(gui,'UserData');
+  mat=reshape(gui.mat,prod(size(gui.mat)),1);
+  if ~isempty(gui.c_names)
+    if isnumeric(gui.c_names), tmp=zeros(length(mat),1);
+    else tmp=cell(length(mat),1);
+    end
+    for i=1:length(gui.c_names)
+      inds=find(mat==i);
+      tmp(inds)=gui.c_names(i);
+    end       
+    mat=tmp;
+  end  
+  varargout{1}=mat;
+  %gui.mat=zeros(size(gui.mat));
+  %set(gui.fig_h,'UserData',gui);
+  %h=findobj(get(gui.plane_h,'Children'),'Tag','SEL_PATCH');
+  %delete(h);
+end  
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+function rb_control;
+
+h=findobj(get(gcf,'Children'),'Style','radiobutton');
+set(h,'Value',0);
+set(gcbo,'Value',1);
+
+udata=get(gcf,'UserData');
+if strcmp(get(gcbo,'Tag'),'Radiobutton1')
+  udata.mode='select';
+else
+  udata.mode='clear';
+end
+
+set(gcf,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clear_plane
+
+h=findobj(get(0,'Children'),'Tag','SELECT_GUI');
+gui=get(h,'UserData');
+
+if strcmp(get(gui.patch_h,'Tag'),'planePlot')
+  colors=reshape(get(gui.patch_h,'FaceVertexCData'),[prod(gui.msize) 3]);
+  colors(:,:)=NaN;
+  set(gui.patch_h,'FaceVertexCData',colors);
+end
+
+h=findobj(get(gui.plane_h,'Children'),'Tag','SEL_PATCH');
+gui.mat=zeros(gui.msize);
+set(gui.fig_h,'UserData',gui);
+delete(h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function click
+
+udata=get(gcbo,'UserData');
+
+udata=get(udata.patch_h,'UserData');  
+coords=get(gca,'CurrentPoint');
+row=round(coords(1,2));
+if row > udata.msize(1), row = udata.msize(1); end
+if row < 1, row = 1; end
+if any(strcmp(udata.lattice,{'hexa','hexaU'})) & ~mod(row,2), 
+  col=floor(coords(1,1))+0.5;
+  if col > udata.msize(2)+0.5, col=udata.msize(2)+0.5; end
+else
+  col=round(coords(1,1));
+  if col > udata.msize(2), col=udata.msize(2); end
+end
+if col < 1, col = 1; end
+
+if strcmp(udata.type,'planePlot')
+
+  if ~mod(row,2) & strcmp(udata.lattice,'hexa'), col=round(col-0.5); end
+  
+  ind=sub2ind(udata.msize,row,col);
+  colors=reshape(get(udata.patch_h,'FaceVertexCData'),[prod(udata.msize) 3]);
+  gui=findobj(get(0,'Children'),'Tag','SELECT_GUI');
+  gui=get(gui,'UserData');
+  
+  if ~isempty(gui.curr_col) & all(~isnan(colors(ind,1,:))),
+    if ~strcmp(gui.mode,'clear') & ~all(gui.curr_col == colors(ind,:))
+      colors(ind,:)=gui.curr_col;
+      gui.mat(row,col)=gui.class;
+    else
+      colors(ind,:)=[NaN NaN NaN];
+      gui.mat(row,col)=0;
+    end
+  elseif strcmp(gui.mode,'clear')
+    colors(ind,:)=[NaN NaN NaN];
+    gui.mat(row,col)=0;
+  elseif isempty(gui.curr_col)
+    return;
+  else
+    gui.mat(row,col)=gui.class;
+    colors(ind,:)=gui.curr_col;
+  end
+  set(udata.patch_h,'FaceVertexCData',colors);
+  set(gui.fig_h,'UserData',gui);
+  return;
+end  
+
+if any(strcmp(udata.type,{'planePie','planeBar'}))
+  [x,y]=pol2cart(0:0.1:2*pi,0.5);
+  coords=[x';0.5]*0.7;
+  coords(:,2)=[y';0]*0.7;
+elseif strcmp(udata.lattice,'hexa');
+  coords=0.7*vis_patch('hexa');
+else
+  coords=0.7*vis_patch('rect');
+end
+coords(:,1)=coords(:,1)+col;
+coords(:,2)=coords(:,2)+row;
+if ~mod(row,2) & strcmp(udata.lattice,'hexa'), col=round(col-0.5); end
+ 
+hold on;
+if gco == udata.patch_h
+  gui=findobj(get(0,'Children'),'Tag','SELECT_GUI');
+  gui=get(gui,'UserData');
+  if isnan(gui.curr_col) | strcmp(gui.mode,'clear'), return; end
+  h=fill(coords(:,1),coords(:,2),gui.curr_col);
+  str=cat(2,'som_select([],[],''click'')');
+  set(h,'ButtonDownFcn',str,'Tag','SEL_PATCH');
+  tmp.patch_h=udata.patch_h;
+  set(h,'UserData',tmp);
+  gui.mat(row,col)=gui.class;
+  set(gui.fig_h,'UserData',gui);
+else
+  gui=findobj(get(0,'Children'),'Tag','SELECT_GUI');
+  gui=get(gui,'UserData');
+  if ~all(get(gcbo,'FaceColor') == gui.curr_col) & ~strcmp(gui.mode,'clear'),
+    if ~isnan(gui.curr_col), 
+      set(gcbo,'FaceColor',gui.curr_col);
+      gui.mat(row,col) = gui.class;
+    end
+  else
+    gui.mat(row,col)=0;
+    delete(gco);
+  end
+  set(gui.fig_h,'UserData',gui);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function draw_colorselection(varargin)
+
+if length(varargin)==2, 
+
+  if length(varargin{1})==1, 
+    n = varargin{1};
+    names = 1:n;
+  else
+    n = length(varargin{1}); 
+    names = varargin{1}; 
+  end
+  colors = varargin{2}; 
+  
+  shape=[0.5 -0.5;0.5 0.5;1.5 0.5;1.5 -0.5];
+  rep_x=repmat(shape(:,1),1,n);
+  rep_y=repmat(shape(:,2),1,n);
+  for i=0:getfield(size(rep_y,2))-1, rep_x(:,i+1)=rep_x(:,i+1)+i; end
+  if isempty(colors), colors=jet(n); end
+  data=som_select_gui;
+  data.colors=colors;
+  data.curr_col=NaN;
+  data.class=0;
+  set(0,'CurrentFigure',data.fig_h);
+  hold on;
+  tmp=fill(rep_x,rep_y,0.8);
+  for i=1:n
+    set(tmp(i),...
+        'EdgeColor',[0 0 0],...
+        'FaceColor',colors(i,:),...
+        'ButtonDownFcn','som_select([],0,''choose'');');
+  end
+  axis('equal');
+  axis('on');
+  set(gca,'XTick',1:n,'XTickLabel',names,'XAxisLocation','top');
+  set(data.a_h,'YLim',[-0.5,0.5],...
+	       'XLim',[0.5 n+0.5],...
+	       'YTickLabel','');
+  set(data.fig_h,'UserData',data);
+
+elseif strcmp(varargin{3},'choose')
+  
+  udata=get(gcf,'UserData');
+  if strcmp(get(gcbo,'Selected'),'off')
+    old=findobj(get(gca,'Children'),'Type','patch');
+    set(old,'Selected','off');
+    set(gcbo,'Selected','on');
+    udata.curr_col=udata.colors(round(mean(get(gcbo,'XData'))),:);
+    udata.class=mean(get(gcbo,'XData'));
+  else
+    set(gcbo,'Selected','off');
+    udata.curr_col=NaN;
+    udata.class=0;
+  end
+  set(gcf,'UserData',udata);
+
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function data=som_select_gui()
+
+
+a = figure('Color',[0.8 0.8 0.8], ...
+	'PaperType','a4letter', ...
+	'Position',[586 584 560 210], ...
+	'Tag','SELECT_GUI');
+
+data.fig_h=a;
+
+b = axes('Parent',a, ...
+	'Box','on', ...
+	'CameraUpVector',[0 1 0], ...
+	'Color',[1 1 1], ...
+	'DataAspectRatioMode','manual', ...
+	'PlotBoxAspectRatio',[20 1 2], ...
+	'PlotBoxAspectRatioMode','manual', ...
+	'Position',[0.13 0.11 0.775 0.815], ...
+	'Tag','Axes1', ...
+	'WarpToFill','off', ...
+	'XColor',[0 0 0], ...
+	'XLimMode','manual', ...
+	'YColor',[0 0 0], ...
+	'YLimMode','manual', ...
+	'YTickLabelMode','manual', ...
+	'ZColor',[0 0 0]);
+
+data.a_h=b;
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Callback','som_select([],[],''close'')', ...
+	'FontWeight','demi', ...
+	'Position',[150 12 50 20], ...
+	'String','CLOSE', ...
+	'Tag','Pushbutton1');
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+        'Callback','som_select([],0,''ret_mat'')',...
+	'FontWeight','demi', ...
+	'Position',[365 12 50 20], ...
+	'String','OK', ...
+	'Tag','Pushbutton2');
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+        'Callback','som_select([],0,''clear'')',...
+	'FontWeight','demi', ...
+	'Position',[257.5 12 50 20], ...
+	'String','CLEAR', ...
+	'Tag','Pushbutton3');
+
+b = uicontrol('Parent',a, ...
+        'Units','points', ...
+        'Position',[50 27 17 16], ...
+        'Callback','som_select([],[],''rb'')',...
+        'Style','radiobutton', ...
+        'Tag','Radiobutton1', ...
+        'Value',1);
+b = uicontrol('Parent',a, ...
+        'Units','points', ...
+        'BackgroundColor',[0.701961 0.701961 0.701961], ...
+        'Callback','som_select([],[],''rb'')',...
+        'Position',[50 7 17 16], ...
+        'Style','radiobutton', ...
+        'Tag','Radiobutton2');
+b = uicontrol('Parent',a, ...
+        'Units','points', ...
+        'BackgroundColor',[0.8 0.8 0.8], ...
+        'FontSize',9, ...
+        'FontWeight','demi', ...
+        'HorizontalAlignment','left', ...
+        'Position',[72 25 28 15], ...
+        'String','Select', ...
+        'Style','text', ...
+        'Tag','StaticText1');
+b = uicontrol('Parent',a, ...
+        'Units','points', ...
+        'BackgroundColor',[0.8 0.8 0.8], ...
+        'FontSize',9, ...
+        'FontWeight','demi', ...
+        'HorizontalAlignment','left', ...
+        'Position',[72 7 25 13.6], ...
+        'String','Clear', ...
+        'Style','text', ...
+        'Tag','StaticText2');
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function close_gui
+
+udata=get(get(gcbo,'Parent'),'UserData');
+
+if strcmp(udata.type,'planePlot');
+  set(udata.plane_h,'ButtonDownFcn','','UserData',[]);
+  set(get(udata.plane_h,'Parent'),'ButtonDownFcn','');
+  delete(udata.patch_h);
+  return;
+end  
+
+h=findobj(get(udata.plane_h,'Children'),'Tag','SEL_PATCH');
+set(udata.patch_h,'ButtonDownFcn','','UserData',[]);
+delete(h);
+close(udata.fig_h);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function draw_poly
+
+udata=get(findobj(get(0,'Children'),'Tag','SELECT_GUI'),'UserData');
+
+if isempty(udata.coords) & strcmp(get(gcf,'SelectionType'),'alt')
+  return;
+end
+
+coords(1,1) = getfield(get(gca,'CurrentPoint'),{3});
+coords(1,2) = getfield(get(gca,'CurrentPoint'),{1});
+udata.coords = cat(1,udata.coords,coords);
+delete(udata.poly_h);
+subplot(udata.plane_h);
+
+hold on;
+switch get(gcf,'SelectionType');
+ case 'normal'
+  udata.poly_h=plot(udata.coords(:,2),udata.coords(:,1),'black',...
+		    'ButtonDownFcn','som_select([],[],''click'')',...
+		    'LineWidth',2);
+  set(udata.fig_h,'UserData',udata);
+ case 'alt'
+  udata.coords=cat(1,udata.coords,udata.coords(1,:));
+  udata.poly_h=plot(udata.coords(:,2),udata.coords(:,1),'black',...
+		    'LineWidth',2);
+  delete(udata.poly_h);
+  if ~isnan(udata.curr_col)
+    tmp=sort(repmat((1:udata.msize(1))',udata.msize(2),1));
+    tmp(:,2)=repmat((1:udata.msize(2))',udata.msize(1),1);
+    tmp2=tmp;
+    if strcmp(udata.type,'planePlot')
+      in=find(inpolygon(tmp(:,2),tmp(:,1),...
+			udata.coords(:,2),udata.coords(:,1)));
+      row=tmp2(in,1);
+      col=tmp2(in,2);
+      in=sub2ind(udata.msize,row,col);
+      colors=reshape(get(udata.patch_h,'FaceVertexCData'),...
+		     [prod(udata.msize) 3]);
+      if ~isnan(udata.curr_col) & ~strcmp(udata.mode,'clear')
+        colors(in,:)=ones(length(in),1)*udata.curr_col;
+        udata.mat(row,col)=udata.class;
+      elseif strcmp(udata.mode,'clear')
+        colors(in,:)=[NaN NaN NaN];
+        udata.mat(row,col)=0;
+      end
+      udata.poly_h=[];
+      udata.coords=[];
+      set(udata.patch_h,'FaceVertexCData',colors);
+      set(udata.fig_h,'UserData',udata);
+      return;
+    end
+    if strcmp(udata.lattice,'hexa');
+      t=find(~rem(tmp(:,1),2));
+      tmp(t,2)=tmp(t,2)+0.5;
+      if any(strcmp(get(udata.patch_h,'Tag'),{'planeC','planeU'}))
+        p=0.7*vis_patch('hexa');
+      else
+        [x,y]=pol2cart(0:0.1:2*pi,0.5);
+        p=[x';0.5]*0.7;
+        p(:,2)=[y';0]*0.7;
+      end
+    else
+      if any(strcmp(get(udata.patch_h,'Tag'),{'planeC','planeU'}))
+        p=0.7*vis_patch('rect');
+      else
+        [x,y]=pol2cart(0:0.1:2*pi,0.5);
+        p=[x';0.5]*0.7;
+        p(:,2)=[y';0]*0.7;
+      end 
+    end
+    in=find(inpolygon(tmp(:,2),tmp(:,1),udata.coords(:,2),udata.coords(:,1)));
+    set(udata.fig_h,'UserData',udata);
+    if strcmp(udata.mode,'select')
+      remove_selpatches;
+      udata=get(udata.fig_h,'UserData');
+      for i=1:length(in)
+	udat.patch_h=udata.patch_h;
+	h=patch(p(:,1)+tmp(in(i),2),p(:,2)+tmp(in(i),1),...
+		udata.curr_col,...
+		'EdgeColor','black',...
+		'ButtonDownFcn','som_select([],[],''click'')', ...
+		'Tag','SEL_PATCH',...
+		'UserData',udat);
+	udata.mat(tmp2(in(i),1),tmp2(in(i),2))=udata.class;
+      end
+    else
+      remove_selpatches;
+      udata=get(udata.fig_h,'UserData');
+      %h=findobj(get(udata.plane_h,'Children'),'Tag','SEL_PATCH');
+      %for i=1:length(h)
+      %    if all(get(h(i),'FaceColor')==udata.curr_col) & ...
+      %       inpolygon(mean(get(h(i),'XData')),mean(get(h(i),'YData')),...
+      %       udata.coords(:,2),udata.coords(:,1))
+      %       coords=[floor(mean(get(h(i),'YData')))...
+      %               floor(mean(get(h(i),'XData')))];
+      %       udata.mat(coords(1),coords(2))=0;
+      %      delete(h(i));
+      %    end
+      %end
+    end
+  end
+  udata.poly_h=[];
+  udata.coords=[];
+  set(udata.fig_h,'UserData',udata);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function remove_selpatches
+
+udata=get(findobj(get(0,'Children'),'Tag','SELECT_GUI'),'UserData');
+h=findobj(get(udata.plane_h,'Children'),'Tag','SEL_PATCH');
+for i=1:length(h)
+  if inpolygon(mean(get(h(i),'XData')),mean(get(h(i),'YData')),...
+               udata.coords(:,2),udata.coords(:,1));
+    coords=[floor(mean(get(h(i),'YData')))...           
+            floor(mean(get(h(i),'XData')))];
+    udata.mat(coords(1),coords(2))=0;
+    delete(h(i));
+  end
+end
+
+set(udata.fig_h,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [n,names,classes]=class2num(class)
+
+names = {};
+classes = zeros(length(class),1);
+for i=1:length(class)
+  if ~isempty(class{i}), 
+    a = find(strcmp(class{i},names));
+    if isempty(a), 
+      names=cat(1,names,class(i));
+      classes(i) = length(names);
+    else
+      classes(i) = a;
+    end
+  end
+end
+n=length(names);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function h=find_patch(a_h)
+
+h=[];
+
+tags={'planeC','planeU','planePie','planeBar','planePlot'};
+
+for i=1:5
+  if ~isempty(findobj(get(a_h,'Children'),'Tag',tags{i}))
+    h=findobj(get(gca,'Children'),'Tag',tags{i});
+    if length(h) > 1
+      h=h(1);
+    end
+    return;
+  end
+end
+  
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function draw_classes
+
+udata=get(findobj(get(0,'Children'),'Tag','SELECT_GUI'), ...
+	  'UserData');
+figure(get(udata.plane_h,'Parent'))
+subplot(udata.plane_h);
+
+colors=zeros(prod(udata.msize),3)+NaN;
+c_map=jet(length(udata.c_names));
+inds = find(udata.mat);
+for i=1:length(inds), 
+  colors(inds(i),:) = c_map(udata.mat(inds(i)),:);
+end
+
+if strcmp(udata.type,'planePlot'),
+
+  set(udata.patch_h,'FaceVertexCData',colors);
+  set(udata.fig_h,'UserData',udata);
+
+else
+
+  hold on
+  co = som_vis_coords(udata.lattice,udata.msize);
+  if any(strcmp(get(udata.patch_h,'Tag'),{'planeC','planeU'}))
+    p=0.7*vis_patch(udata.lattice);
+  else
+    [x,y]=pol2cart(0:0.1:2*pi,0.5);
+    p=[x';0.5]*0.7;
+    p(:,2)=[y';0]*0.7;
+  end
+  for i=1:length(inds),
+    udat.patch_h=udata.patch_h;
+    h=patch(p(:,1)+co(inds(i),1),p(:,2)+co(inds(i),2),...
+	    colors(inds(i),:),...
+	    'EdgeColor','black',...
+	    'ButtonDownFcn','som_select([],[],''click'')', ...
+	    'Tag','SEL_PATCH',...
+	    'UserData',udat);
+  end 
+  
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_seqtrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,557 @@
+function [sMap, sTrain] = som_seqtrain(sMap, D, varargin)
+
+%SOM_SEQTRAIN  Use sequential algorithm to train the Self-Organizing Map.
+%
+% [sM,sT] = som_seqtrain(sM, D, [[argID,] value, ...])
+% 
+%  sM     = som_seqtrain(sM,D);
+%  sM     = som_seqtrain(sM,sD,'alpha_type','power','tracking',3);
+%  [M,sT] = som_seqtrain(M,D,'ep','trainlen',10,'inv','hexa');
+%
+%  Input and output arguments ([]'s are optional): 
+%   sM      (struct) map struct, the trained and updated map is returned
+%           (matrix) codebook matrix of a self-organizing map
+%                    size munits x dim or  msize(1) x ... x msize(k) x dim
+%                    The trained map codebook is returned.
+%   D       (struct) training data; data struct
+%           (matrix) training data, size dlen x dim
+%   [argID, (string) See below. The values which are unambiguous can 
+%    value] (varies) be given without the preceeding argID.
+%
+%   sT      (struct) learning parameters used during the training
+%
+% Here are the valid argument IDs and corresponding values. The values which
+% are unambiguous (marked with '*') can be given without the preceeding argID.
+%   'mask'        (vector) BMU search mask, size dim x 1
+%   'msize'       (vector) map size
+%   'radius'      (vector) neighborhood radiuses, length 1, 2 or trainlen
+%   'radius_ini'  (scalar) initial training radius
+%   'radius_fin'  (scalar) final training radius
+%   'alpha'       (vector) learning rates, length trainlen
+%   'alpha_ini'   (scalar) initial learning rate
+%   'tracking'    (scalar) tracking level, 0-3 
+%   'trainlen'    (scalar) training length
+%   'trainlen_type' *(string) is the given trainlen 'samples' or 'epochs'
+%   'train'      *(struct) train struct, parameters for training
+%   'sTrain','som_train '  = 'train'
+%   'alpha_type' *(string) learning rate function, 'inv', 'linear' or 'power'
+%   'sample_order'*(string) order of samples: 'random' or 'ordered'
+%   'neigh'      *(string) neighborhood function, 'gaussian', 'cutgauss',
+%                          'ep' or 'bubble'
+%   'topol'      *(struct) topology struct
+%   'som_topol','sTopo l'  = 'topol'
+%   'lattice'    *(string) map lattice, 'hexa' or 'rect'
+%   'shape'      *(string) map shape, 'sheet', 'cyl' or 'toroid'
+%
+% For more help, try 'type som_seqtrain' or check out online documentation.
+% See also  SOM_MAKE, SOM_BATCHTRAIN, SOM_TRAIN_STRUCT.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_seqtrain
+%
+% PURPOSE
+%
+% Trains a Self-Organizing Map using the sequential algorithm. 
+%
+% SYNTAX
+%
+%  sM = som_seqtrain(sM,D);
+%  sM = som_seqtrain(sM,sD);
+%  sM = som_seqtrain(...,'argID',value,...);
+%  sM = som_seqtrain(...,value,...);
+%  [sM,sT] = som_seqtrain(M,D,...);
+%
+% DESCRIPTION
+%
+% Trains the given SOM (sM or M above) with the given training data
+% (sD or D) using sequential SOM training algorithm. If no optional
+% arguments (argID, value) are given, a default training is done, the
+% parameters are obtained from SOM_TRAIN_STRUCT function. Using
+% optional arguments the training parameters can be specified. Returns
+% the trained and updated SOM and a train struct which contains
+% information on the training.
+%
+% REFERENCES
+%
+% Kohonen, T., "Self-Organizing Map", 2nd ed., Springer-Verlag, 
+%    Berlin, 1995, pp. 78-82.
+% Kohonen, T., "Clustering, Taxonomy, and Topological Maps of
+%    Patterns", International Conference on Pattern Recognition
+%    (ICPR), 1982, pp. 114-128.
+% Kohonen, T., "Self-Organized formation of topologically correct
+%    feature maps", Biological Cybernetics 43, 1982, pp. 59-69.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  sM          The map to be trained. 
+%     (struct) map struct
+%     (matrix) codebook matrix (field .data of map struct)
+%              Size is either [munits dim], in which case the map grid 
+%              dimensions (msize) should be specified with optional arguments,
+%              or [msize(1) ... msize(k) dim] in which case the map 
+%              grid dimensions are taken from the size of the matrix. 
+%              Lattice, by default, is 'rect' and shape 'sheet'.
+%  D           Training data.
+%     (struct) data struct
+%     (matrix) data matrix, size [dlen dim]
+%  
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments can be given as 'argID',value -pairs. If an
+%  argument is given value multiple times, the last one is
+%  used. The valid IDs and corresponding values are listed below. The values 
+%  which are unambiguous (marked with '*') can be given without the 
+%  preceeding argID.
+%
+%   'mask'       (vector) BMU search mask, size dim x 1. Default is 
+%                         the one in sM (field '.mask') or a vector of
+%                         ones if only a codebook matrix was given.
+%   'msize'      (vector) map grid dimensions. Default is the one
+%                         in sM (field sM.topol.msize) or 
+%                         'si = size(sM); msize = si(1:end-1);' 
+%                         if only a codebook matrix was given. 
+%   'radius'     (vector) neighborhood radius 
+%                         length = 1: radius_ini = radius
+%                         length = 2: [radius_ini radius_fin] = radius
+%                         length > 2: the vector given neighborhood
+%                                     radius for each step separately
+%                                     trainlen = length(radius)
+%   'radius_ini' (scalar) initial training radius
+%   'radius_fin' (scalar) final training radius
+%   'alpha'      (vector) learning rate
+%                         length = 1: alpha_ini = alpha
+%                         length > 1: the vector gives learning rate
+%                                     for each step separately
+%                                     trainlen is set to length(alpha)
+%                                     alpha_type is set to 'user defined'
+%   'alpha_ini'  (scalar) initial learning rate
+%   'tracking'   (scalar) tracking level: 0, 1 (default), 2 or 3
+%                         0 - estimate time 
+%                         1 - track time and quantization error 
+%                         2 - plot quantization error
+%                         3 - plot quantization error and two first 
+%                             components 
+%   'trainlen'   (scalar) training length (see also 'tlen_type')
+%   'trainlen_type' *(string) is the trainlen argument given in 'epochs'
+%                         or in 'samples'. Default is 'epochs'.
+%   'sample_order'*(string) is the sample order 'random' (which is the 
+%                         the default) or 'ordered' in which case
+%                         samples are taken in the order in which they 
+%                         appear in the data set
+%   'train'     *(struct) train struct, parameters for training. 
+%                         Default parameters, unless specified, 
+%                         are acquired using SOM_TRAIN_STRUCT (this 
+%                         also applies for 'trainlen', 'alpha_type',
+%                         'alpha_ini', 'radius_ini' and 'radius_fin').
+%   'sTrain', 'som_train' (struct) = 'train'
+%   'neigh'     *(string) The used neighborhood function. Default is 
+%                         the one in sM (field '.neigh') or 'gaussian'
+%                         if only a codebook matrix was given. Other 
+%                         possible values is 'cutgauss', 'ep' and 'bubble'.
+%   'topol'     *(struct) topology of the map. Default is the one
+%                         in sM (field '.topol').
+%   'sTopol', 'som_topol' (struct) = 'topol'
+%   'alpha_type'*(string) learning rate function, 'inv', 'linear' or 'power'
+%   'lattice'   *(string) map lattice. Default is the one in sM
+%                         (field sM.topol.lattice) or 'rect' 
+%                         if only a codebook matrix was given. 
+%   'shape'     *(string) map shape. Default is the one in sM
+%                         (field sM.topol.shape) or 'sheet' 
+%                         if only a codebook matrix was given. 
+%   
+% OUTPUT ARGUMENTS
+% 
+%  sM          the trained map
+%     (struct) if a map struct was given as input argument, a 
+%              map struct is also returned. The current training 
+%              is added to the training history (sM.trainhist).
+%              The 'neigh' and 'mask' fields of the map struct
+%              are updated to match those of the training.
+%     (matrix) if a matrix was given as input argument, a matrix
+%              is also returned with the same size as the input 
+%              argument.
+%  sT (struct) train struct; information of the accomplished training
+%  
+% EXAMPLES
+%
+% Simplest case:
+%  sM = som_seqtrain(sM,D);  
+%  sM = som_seqtrain(sM,sD);  
+%
+% To change the tracking level, 'tracking' argument is specified:
+%  sM = som_seqtrain(sM,D,'tracking',3);
+%
+% The change training parameters, the optional arguments 'train', 
+% 'neigh','mask','trainlen','radius','radius_ini', 'radius_fin', 
+% 'alpha', 'alpha_type' and 'alpha_ini' are used. 
+%  sM = som_seqtrain(sM,D,'neigh','cutgauss','trainlen',10,'radius_fin',0);
+%
+% Another way to specify training parameters is to create a train struct:
+%  sTrain = som_train_struct(sM,'dlen',size(D,1),'algorithm','seq');
+%  sTrain = som_set(sTrain,'neigh','cutgauss');
+%  sM = som_seqtrain(sM,D,sTrain);
+%
+% By default the neighborhood radius goes linearly from radius_ini to
+% radius_fin. If you want to change this, you can use the 'radius' argument
+% to specify the neighborhood radius for each step separately:
+%  sM = som_seqtrain(sM,D,'radius',[5 3 1 1 1 1 0.5 0.5 0.5]);
+%
+% By default the learning rate (alpha) goes from the alpha_ini to 0
+% along the function defined by alpha_type. If you want to change this, 
+% you can use the 'alpha' argument to specify the learning rate
+% for each step separately: 
+%  alpha = 0.2*(1 - log([1:100]));
+%  sM = som_seqtrain(sM,D,'alpha',alpha);
+%
+% You don't necessarily have to use the map struct, but you can operate
+% directly with codebook matrices. However, in this case you have to
+% specify the topology of the map in the optional arguments. The
+% following commads are identical (M is originally a 200 x dim sized matrix):
+%  M = som_seqtrain(M,D,'msize',[20 10],'lattice','hexa','shape','cyl');
+%
+%  M = som_seqtrain(M,D,'msize',[20 10],'hexa','cyl');
+%
+%  sT= som_set('som_topol','msize',[20 10],'lattice','hexa','shape','cyl');
+%  M = som_seqtrain(M,D,sT);
+%
+%  M = reshape(M,[20 10 dim]);
+%  M = som_seqtrain(M,D,'hexa','cyl');
+%
+% The som_seqtrain also returns a train struct with information on the 
+% accomplished training. This is the same one as is added to the end of the 
+% trainhist field of map struct, in case a map struct is given.
+%  [M,sTrain] = som_seqtrain(M,D,'msize',[20 10]);
+%
+%  [sM,sTrain] = som_seqtrain(sM,D); % sM.trainhist{end}==sTrain
+%
+% SEE ALSO
+% 
+%  som_make         Initialize and train a SOM using default parameters.
+%  som_batchtrain   Train SOM with batch algorithm.
+%  som_train_struct Determine default training parameters.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 220997
+% Version 2.0beta juuso 101199
+ 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check arguments
+
+error(nargchk(2, Inf, nargin));  % check the number of input arguments
+
+% map 
+struct_mode = isstruct(sMap);
+if struct_mode, 
+  sTopol = sMap.topol;
+else  
+  orig_size = size(sMap);
+  if ndims(sMap) > 2, 
+    si = size(sMap); dim = si(end); msize = si(1:end-1);
+    M = reshape(sMap,[prod(msize) dim]);
+  else
+    msize = [orig_size(1) 1]; 
+    dim = orig_size(2);
+  end
+  sMap   = som_map_struct(dim,'msize',msize);
+  sTopol = sMap.topol;
+end
+[munits dim] = size(sMap.codebook);
+
+% data
+if isstruct(D), 
+  data_name = D.name; 
+  D = D.data; 
+else 
+  data_name = inputname(2); 
+end
+D = D(find(sum(isnan(D),2) < dim),:); % remove empty vectors from the data
+[dlen ddim] = size(D);                % check input dimension
+if dim ~= ddim, error('Map and data input space dimensions disagree.'); end
+
+% varargin
+sTrain = som_set('som_train','algorithm','seq','neigh', ...
+		 sMap.neigh,'mask',sMap.mask,'data_name',data_name);
+radius     = [];
+alpha      = [];
+tracking   = 1;
+sample_order_type = 'random';
+tlen_type  = 'epochs';
+
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     % argument IDs
+     case 'msize', i=i+1; sTopol.msize = varargin{i}; 
+     case 'lattice', i=i+1; sTopol.lattice = varargin{i};
+     case 'shape', i=i+1; sTopol.shape = varargin{i};
+     case 'mask', i=i+1; sTrain.mask = varargin{i};
+     case 'neigh', i=i+1; sTrain.neigh = varargin{i};
+     case 'trainlen', i=i+1; sTrain.trainlen = varargin{i};
+     case 'trainlen_type', i=i+1; tlen_type = varargin{i}; 
+     case 'tracking', i=i+1; tracking = varargin{i};
+     case 'sample_order', i=i+1; sample_order_type = varargin{i};
+     case 'radius_ini', i=i+1; sTrain.radius_ini = varargin{i};
+     case 'radius_fin', i=i+1; sTrain.radius_fin = varargin{i};
+     case 'radius', 
+      i=i+1; 
+      l = length(varargin{i}); 
+      if l==1, 
+        sTrain.radius_ini = varargin{i}; 
+      else 
+        sTrain.radius_ini = varargin{i}(1); 
+        sTrain.radius_fin = varargin{i}(end);
+        if l>2, radius = varargin{i}; tlen_type = 'samples'; end
+      end 
+     case 'alpha_type', i=i+1; sTrain.alpha_type = varargin{i};
+     case 'alpha_ini', i=i+1; sTrain.alpha_ini = varargin{i};
+     case 'alpha',     
+      i=i+1; 
+      sTrain.alpha_ini = varargin{i}(1);
+      if length(varargin{i})>1, 
+        alpha = varargin{i}; tlen_type = 'samples'; 
+        sTrain.alpha_type = 'user defined'; 
+      end
+     case {'sTrain','train','som_train'}, i=i+1; sTrain = varargin{i};
+     case {'topol','sTopol','som_topol'}, 
+      i=i+1; 
+      sTopol = varargin{i};
+      if prod(sTopol.msize) ~= munits, 
+        error('Given map grid size does not match the codebook size.');
+      end
+      % unambiguous values
+     case {'inv','linear','power'}, sTrain.alpha_type = varargin{i}; 
+     case {'hexa','rect'}, sTopol.lattice = varargin{i};
+     case {'sheet','cyl','toroid'}, sTopol.shape = varargin{i}; 
+     case {'gaussian','cutgauss','ep','bubble'}, sTrain.neigh = varargin{i};
+     case {'epochs','samples'}, tlen_type = varargin{i};
+     case {'random', 'ordered'}, sample_order_type = varargin{i}; 
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}(1).type, 
+     case 'som_topol', 
+      sTopol = varargin{i}; 
+      if prod(sTopol.msize) ~= munits, 
+        error('Given map grid size does not match the codebook size.');
+      end
+     case 'som_train', sTrain = varargin{i};
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_seqtrain) Ignoring invalid argument #' num2str(i+2)]); 
+  end
+  i = i+1; 
+end
+
+% training length
+if ~isempty(radius) | ~isempty(alpha), 
+  lr = length(radius);
+  la = length(alpha);
+  if lr>2 | la>1,
+    tlen_type = 'samples';
+    if     lr> 2 & la<=1, sTrain.trainlen = lr;
+    elseif lr<=2 & la> 1, sTrain.trainlen = la;
+    elseif lr==la,        sTrain.trainlen = la;
+    else
+      error('Mismatch between radius and learning rate vector lengths.')
+    end
+  end
+end
+if strcmp(tlen_type,'samples'), sTrain.trainlen = sTrain.trainlen/dlen; end 
+
+% check topology
+if struct_mode, 
+  if ~strcmp(sTopol.lattice,sMap.topol.lattice) | ...
+	~strcmp(sTopol.shape,sMap.topol.shape) | ...
+	any(sTopol.msize ~= sMap.topol.msize), 
+    warning('Changing the original map topology.');
+  end
+end
+sMap.topol = sTopol; 
+
+% complement the training struct
+sTrain = som_train_struct(sTrain,sMap,'dlen',dlen);
+if isempty(sTrain.mask), sTrain.mask = ones(dim,1); end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialize
+
+M        = sMap.codebook;
+mask     = sTrain.mask;
+trainlen = sTrain.trainlen*dlen;
+
+% neighborhood radius
+if length(radius)>2,
+  radius_type = 'user defined';
+else
+  radius = [sTrain.radius_ini sTrain.radius_fin];    
+  rini = radius(1); 
+  rstep = (radius(end)-radius(1))/(trainlen-1);
+  radius_type = 'linear';
+end    
+
+% learning rate
+if length(alpha)>1, 
+  sTrain.alpha_type ='user defined';
+  if length(alpha) ~= trainlen, 
+    error('Trainlen and length of neighborhood radius vector do not match.')
+  end
+  if any(isnan(alpha)), 
+    error('NaN is an illegal learning rate.')
+  end
+else
+  if isempty(alpha), alpha = sTrain.alpha_ini; end
+  if strcmp(sTrain.alpha_type,'inv'), 
+    % alpha(t) = a / (t+b), where a and b are chosen suitably
+    % below, they are chosen so that alpha_fin = alpha_ini/100
+    b = (trainlen - 1) / (100 - 1);
+    a = b * alpha;
+  end
+end
+                                   
+% initialize random number generator
+rand('state',sum(100*clock));
+
+% distance between map units in the output space
+%  Since in the case of gaussian and ep neighborhood functions, the 
+%  equations utilize squares of the unit distances and in bubble case
+%  it doesn't matter which is used, the unitdistances and neighborhood
+%  radiuses are squared.
+Ud = som_unit_dists(sTopol).^2;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Action
+
+update_step = 100; 
+mu_x_1 = ones(munits,1);
+samples = ones(update_step,1);
+r = samples; 
+alfa = samples;
+
+qe = 0;
+start = clock;
+if tracking >  0, % initialize tracking
+  track_table = zeros(update_step,1);
+  qe = zeros(floor(trainlen/update_step),1);  
+end
+
+for t = 1:trainlen, 
+
+  % Every update_step, new values for sample indeces, neighborhood
+  % radius and learning rate are calculated. This could be done
+  % every step, but this way it is more efficient. Or this could 
+  % be done all at once outside the loop, but it would require much
+  % more memory.
+  ind = rem(t,update_step); if ind==0, ind = update_step; end
+  if ind==1, 
+    steps = [t:min(trainlen,t+update_step-1)];
+    % sample order    
+    switch sample_order_type, 
+     case 'ordered', samples = rem(steps,dlen)+1;
+     case 'random',  samples = ceil(dlen*rand(update_step,1)+eps);
+    end
+
+    % neighborhood radius
+    switch radius_type, 
+     case 'linear',       r = rini+(steps-1)*rstep;
+     case 'user defined', r = radius(steps); 
+    end    
+    r=r.^2;        % squared radius (see notes about Ud above)
+    r(r==0) = eps; % zero radius might cause div-by-zero error
+    
+    % learning rate
+    switch sTrain.alpha_type,
+     case 'linear',       alfa = (1-steps/trainlen)*alpha;
+     case 'inv',          alfa = a ./ (b + steps-1);
+     case 'power',        alfa = alpha * (0.005/alpha).^((steps-1)/trainlen); 
+     case 'user defined', alfa = alpha(steps);
+    end    
+  end
+  
+  % find BMU
+  x = D(samples(ind),:);                 % pick one sample vector
+  known = ~isnan(x);                     % its known components
+  Dx = M(:,known) - x(mu_x_1,known);     % each map unit minus the vector
+  [qerr bmu] = min((Dx.^2)*mask(known)); % minimum distance(^2) and the BMU
+
+  % tracking
+  if tracking>0, 
+    track_table(ind) = sqrt(qerr);
+    if ind==update_step, 
+      n = ceil(t/update_step); 
+      qe(n) = mean(track_table);
+      trackplot(M,D,tracking,start,n,qe);
+    end
+  end
+  
+  % neighborhood & learning rate
+  % notice that the elements Ud and radius have been squared!
+  % (see notes about Ud above)
+  switch sTrain.neigh, 
+  case 'bubble',   h = (Ud(:,bmu)<=r(ind));
+  case 'gaussian', h = exp(-Ud(:,bmu)/(2*r(ind))); 
+  case 'cutgauss', h = exp(-Ud(:,bmu)/(2*r(ind))) .* (Ud(:,bmu)<=r(ind));
+  case 'ep',       h = (1-Ud(:,bmu)/r(ind)) .* (Ud(:,bmu)<=r(ind));
+  end  
+  h = h*alfa(ind);  
+  
+  % update M
+  M(:,known) = M(:,known) - h(:,ones(sum(known),1)).*Dx;
+
+end; % for t = 1:trainlen
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Build / clean up the return arguments
+
+if tracking, fprintf(1,'\n'); end
+
+% update structures
+sTrain = som_set(sTrain,'time',datestr(now,0));
+if struct_mode, 
+  sMap = som_set(sMap,'codebook',M,'mask',sTrain.mask,'neigh',sTrain.neigh);
+  tl = length(sMap.trainhist);
+  sMap.trainhist(tl+1) = sTrain;
+else
+  sMap = reshape(M,orig_size);
+end
+
+return;
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+%%%%%%%%
+function [] = trackplot(M,D,tracking,start,n,qe)
+
+  l = length(qe);
+  elap_t = etime(clock,start); 
+  tot_t = elap_t*l/n;
+  fprintf(1,'\rTraining: %3.0f/ %3.0f s',elap_t,tot_t)  
+  switch tracking
+   case 1, 
+   case 2,       
+    plot(1:n,qe(1:n),(n+1):l,qe((n+1):l))
+    title('Quantization errors for latest samples')    
+    drawnow
+   otherwise,
+    subplot(2,1,1), plot(1:n,qe(1:n),(n+1):l,qe((n+1):l))
+    title('Quantization error for latest samples');
+    subplot(2,1,2), plot(M(:,1),M(:,2),'ro',D(:,1),D(:,2),'b.'); 
+    title('First two components of map units (o) and data vectors (+)');
+    drawnow
+  end  
+  % end of trackplot
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_set.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,777 @@
+function [sS, ok, msgs] = som_set(sS, varargin)
+
+%SOM_SET Create and check SOM Toolbox structs, give values to their fields.
+%
+% [sS, ok, msgs] = som_set(sS, [field, contents, ...])
+%
+%   sM              = som_set(sM,'name','SOM#1.1');
+%   [dummy,ok,msgs] = som_set(sData);   
+%   sT              = som_set('som_topol','msize',[10 10],'lattice','hexa');
+%   [sTrain,ok]     = som_set(sTrain,'algorithm','lininit');
+%   [sN,ok,msgs]    = som_set('som_norm');
+%
+% Input and output arguments ([]'s are optional):
+%  sS                   the target struct
+%              (struct) a SOM Toolbox structure (not visualization struct)
+%              (string) structure identifier (see below)
+%                       the updated/created structure is returned
+%  [field,     (string) field to be given value to (see below)
+%   contents]  (varies) the contents for the field
+%
+%  ok          (vector)  status for each field-contents pair (1=ok)
+%  msgs        (cellstr) status string for each field-contents pair (''=ok)
+%
+%  There can be arbitrarily many field-contents pairs. If there
+%  are _no_ field-content pairs, and the first argument is a struct,
+%  the fields of the struct are checked for validity.
+% 
+%  Valid struct and corresponding field identifiers: 
+%  'som_map'   : 'codebook', 'labels', 'mask', 'neigh', 'name', 
+%                'topol', 'msize, 'lattice', 'shape',
+%                'trainhist', 'comp_names', 'comp_norm', 
+%  'som_data'  : 'data', 'labels', 'name', 'comp_names', 'comp_norm', 
+%                'label_names'
+%  'som_topol' : 'msize', 'lattice', 'shape'
+%  'som_norm'  : 'method', 'params', 'status'
+%  'som_train' : 'algorithm', 'data_name', 'mask', 'neigh', 
+%                'radius_ini', 'radius_fin', 'alpha_ini', 'alpha_type', 
+%                'trainlen', 'time'
+%  'som_grid'  : 'lattice', 'shape', 'msize', 'coord',
+%                'line', 'linecolor', 'linewidth', 
+%                'marker', 'markersize', 'markercolor', 'surf', 
+%                'label', 'labelcolor', 'labelsize'
+%                checking given values has not been implemented yet!
+%                
+% For more help, try 'type som_set' or check out online documentation.
+% See also SOM_INFO, SOM_MAP_STRUCT, SOM_DATA_STRUCT, SOM_VS1TO2.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_set
+%
+% PURPOSE
+%
+% Create and set values for fields of SOM Toolbox structs (except
+% visualization struct). Can also be used to check the validity of structs.
+%
+% SYNTAX
+%
+%  sMap   = som_set('som_map');
+%  sData  = som_set(sData);
+%  sNorm  = som_set(...,'field',contents,...);
+%  [sTopol,ok]      = som_set(sTopol,...);
+%  [sTrain,ok,msgs] = som_set('som_train',...);
+%
+% DESCRIPTION
+%
+% The function is used to create and set values for fields of SOM
+% Toolbox structs, except visualization structs. The given values are
+% first checked for validity, and if they are not valid, an error
+% message is returned. The function can also be used to check the
+% validity of all the fields of the struct by supplying a struct as
+% the first and only argument.
+% 
+% NOTE: Using SOM_SET to create structures does _not_ guarantee that the
+% structs are valid (try e.g. sM = som_set('som_map'); som_set(sM)). The
+% initial values that the function gives to the fields of the structs are
+% typically invalid. It is recommended that when creating map or data 
+% structs, the corresponding functions SOM_MAP_STRUCT and SOM_DATA_STRUCT 
+% are used instead of SOM_SET. However, when giving values for the fields, 
+% SOM_SET tries to guarantee that the values are valid.
+%
+% If a string is given as the first argument, the corresponding 
+% structure is first created and the field-content pairs are then
+% applied to it. 
+%
+% There can be arbitrarily many field-contents pairs. The pairs
+% are processed sequentially one pair at a time. For each pair,
+% the validity of the contents is checked and the corresponding 
+% items in the returned 'ok'-vector and 'msgs'-cellstring are set.
+% - if the contents is ok, the status is set to 1 and message to ''
+% - if the contents is suspicious, status is set to 1, but a
+%   message is produced
+% - if the contents is invalid, status is set to 0 and an error
+%   message is produced. The contents are _not_ given to the field.
+% If there is only one output argument, the status and messages
+% for each pair are printed to standard output.
+%
+% The different field-contents pairs have no effect on each other.
+% If a field is given a value multiple times, the last valid one 
+% stays in effect.
+% 
+% In some cases, the order of the given fields is significant.
+% For example in the case of 'som_map', the validity of some fields, 
+% like '.comp_names', depends on the input space dimension, which is
+% checked from the '.data' field (dim = size(sD.data,2) to be specific).
+% Therefore, the '.data' field (or '.codebook' field in case of map 
+% struct) should always be given a value first. Below is a list of 
+% this kind of dependancies:
+% 
+% som_map:   'comp_names', 'comp_norm', 'msize', 'topol.msize',
+%            'labels' and 'mask' depend on 'codebook'
+%            new value for 'codebook' should have equal size to the old
+%            one (unless the old one was empty)
+% som_data:  'comp_names' and 'comp_norm' depend on 'data'
+%            new value for 'data' should have equal dimension (size(data,2))
+%            as the old one (unless the old one was empty)
+% 
+% KNOWN BUGS
+%
+% Checking the values given to som_grid struct has not been
+% implemented. Use SOM_GRID function to give the values.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  sS          The struct.
+%     (struct) A SOM Toolbox struct.
+%     (string) Identifier of a SOM Toolbox struct: 'som_map', 
+%              'som_data', 'som_topol', 'som_norm' or 'som_train'
+%   
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  field     (string) Field identifier string (see below).
+%  contents  (varies) Value for the field (see below).
+%
+%  Below is the list of valid field identifiers for the different 
+%  SOM Toolbox structs. 
+%
+%  'som_map' (map struct)
+%    'codebook'    : matrix, size [munits, dim] 
+%    'labels'      : cell array of strings, 
+%                    size [munits, maximum_number_of_labels]
+%    'topol'       : topology struct (prod(topol.msize)=munits)
+%    'mask'        : vector, size [dim, 1]
+%    'neigh'       : string ('gaussian' or 'cutgauss' or 'bubble' or 'ep')
+%    'trainhist'   : struct array of train structs
+%    'name'        : string
+%    'comp_names'  : cellstr, size [dim, 1], e.g. {'c1','c2','c3'}
+%    'comp_norm'   : cell array, size [dim, 1], of cell arrays 
+%                    of normalization structs
+%    Also the following can be used (although they are fields
+%    of the topology struct)
+%    'msize'       : vector (prod(msize)=munits)
+%    'lattice'     : string ('rect' or 'hexa')
+%    'shape'       : string ('sheet' or 'cyl' or 'toroid')
+%
+%  'som_data' (data struct)
+%    'data'        : matrix, size [dlen, dim]
+%    'name'        : string
+%    'labels'      : cell array of strings, 
+%                    size [dlen, m]
+%    'comp_names'  : cellstr, size [dim, 1], e.g. {'c1','c2','c3'}
+%    'comp_norm'   : cell array, size [dim, 1], of cell arrays 
+%                    of normalization structs
+%    'label_names' : cellstr, size [m, 1]
+%
+% 'som_topol' (topology struct)
+%    'msize'       : vector
+%    'lattice'     : string ('rect' or 'hexa')
+%    'shape'       : string ('sheet' or 'cyl' or 'toroid')
+%
+% 'som_norm' (normalization struct)
+%    'method'      : string
+%    'params'      : varies
+%    'status'      : string ('done' or 'undone' or 'uninit')
+%
+% 'som_train' (train struct)
+%    'algorithm'   : string ('seq' or 'batch' or 'lininit' or 'randinit')
+%    'data_name'   : string
+%    'mask'        : vector, size [dim, 1]
+%    'neigh'       : string ('gaussian' or 'cutgauss' or 'bubble' or 'ep')
+%    'radius_ini'  : scalar
+%    'radius_fin'  : scalar
+%    'alpha_ini'   : scalar
+%    'alpha_type'  : string ('linear' or 'inv' or 'power')
+%    'trainlen'    : scalar
+%    'time'        : string
+%
+% 'som_grid' (grid struct) : checking the values has not been implemented yet!
+%    'lattice'     : string ('rect' or 'hexa') or 
+%                    (sparce) matrix, size munits x munits
+%    'shape'       : string ('sheet' or 'cyl' or 'toroid')
+%    'msize'       : vector, size 1x2
+%    'coord'       : matrix, size munits x 2 or munits x 3
+%    'line'        : string (linespec, e.g. '-', or 'none')
+%    'linecolor'   : RGB triple or string (colorspec, e.g. 'k') or 
+%                    munits x munits x 3 (sparce) matrix or cell
+%                    array of RGB triples 
+%    'linewidth'   : scalar or munits x munits (sparce) matrix
+%    'marker'      : string (markerspec, e.g. 'o', or 'none') or 
+%                    munits x 1 cell or char array of these
+%    'markersize'  : scalar or munits x 1 vector
+%    'markercolor' : RGB triple or string (colorspec, e.g. 'k')
+%    'surf'        : [], munits x 1 or munits x 3 matrix of RGB triples
+%    'label'       : [] or munits x 1 char array or 
+%                    munits x l cell array of strings 
+%    'labelcolor'  : RGB triple or string (colorspec, e.g. 'g' or 'none')
+%    'labelsize'   : scalar
+%
+% OUTPUT ARGUMENTS
+% 
+%  sS    (struct)  the created / updated struct
+%  ok    (vector)  length = number of field-contents pairs, gives
+%                  validity status for each pair (0=invalid, 1 otherwise)
+%  msgs  (cellstr) length = number of field-contents pairs, gives
+%                  error/warning message for each pair ('' if ok)
+%
+% EXAMPLES
+%
+% To create a struct:
+%  sM  = som_set('som_map');
+%  sD  = som_set('som_data');
+%  sTo = som_set('som_topol');
+%  sTr = som_set('som_train');
+%  sN  = som_set('som_norm');
+%  sG  = som_set('som_grid');
+%
+% To check the the contents of a struct: 
+%  som_set(sS);
+%  [dummy,ok]      = som_set(sS);
+%  [dummy,ok,msgs] = som_set(sS);
+%
+% To give values to fields: 
+%  sTo = som_set(sTo,'msize',[10 10],'lattice','hexa','shape','toroid');
+%  sM  = som_set('som_map','codebook',rand(100,4),'topol',sTo);
+%   
+% SEE ALSO
+% 
+%  som_info         Prints information the given struct.
+%  som_map_struct   Create map struct.
+%  som_data_struct  Create data struct.
+%  som_topol_struct Create topology struct.
+%  som_train_struct Create training struct.
+%  som_grid         Create and visualize grid struct.
+%  som_vs1to2       Conversion from version 1.0 structs to 2.0.
+%  som_vs2to1       Conversion from version 2.0 structs to 1.0.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 101199 130300
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% create struct if necessary
+
+if ischar(sS), 
+  switch sS
+   case 'som_map',
+    sS=struct('type', 'som_map', ...
+              'codebook', [], ...
+              'topol', som_set('som_topol'), ...
+              'labels', cell(1), ...
+              'neigh', 'gaussian', ...
+              'mask', [], ...
+              'trainhist', cell(1), ...
+              'name', '',...
+              'comp_names', {''}, ...
+              'comp_norm', cell(1));
+   case 'som_data', 
+    sS=struct('type', 'som_data', ...
+              'data', [], ...
+              'labels', cell(1), ...
+              'name', '', ...
+              'comp_names', {''}, ...
+              'comp_norm', cell(1), ...
+              'label_names', []);
+   case 'som_topol',
+    sS=struct('type', 'som_topol', ...
+              'msize', 0, ...
+              'lattice', 'hexa', ...
+              'shape', 'sheet');
+   case 'som_train',
+    sS=struct('type', 'som_train', ...
+              'algorithm', '', ...
+              'data_name', '', ...
+              'neigh', 'gaussian', ...
+              'mask', [], ...
+              'radius_ini', NaN, ...
+              'radius_fin', NaN, ...
+              'alpha_ini', NaN, ...
+              'alpha_type', 'inv', ...
+              'trainlen', NaN, ...
+              'time', '');
+   case 'som_norm',
+    sS=struct('type', 'som_norm', ...
+              'method', 'var', ...
+              'params', [], ...
+              'status', 'uninit');
+   case 'som_grid', 
+    sS=struct('type','som_grid',...
+	      'lattice','hexa',...
+	      'shape','sheet',...
+	      'msize',[1 1],...
+	      'coord',[],...
+	      'line','-',...
+	      'linecolor',[.9 .9 .9],...
+	      'linewidth',0.5,...
+	      'marker','o',...
+	      'markersize',6,...
+	      'markercolor','k',...
+	      'surf',[],...
+	      'label',[],...
+	      'labelcolor','g',...
+	      'labelsize',12);    
+   otherwise
+    ok=0; msgs = {['Unrecognized struct type: ' sS]}; sS = [];
+    return;
+  end  
+  
+elseif isstruct(sS) & length(varargin)==0, 
+  
+  % check all fields
+  fields = fieldnames(sS);
+  if ~any(strcmp('type',fields)), 
+    error('The struct has no ''type'' field.');
+  end
+  k = 0;
+  for i=1:length(fields), 
+    contents = getfield(sS,fields{i});
+    if ~strcmp(fields{i},'type'), 
+      varargin{k+1} = fields{i};
+      varargin{k+2} = contents;
+      k = k + 2;
+    else 
+      if ~any(strcmp(contents, ...
+        {'som_map','som_data','som_topol','som_train','som_norm'})), 
+	error(['Unknown struct type: ' contents]);
+      end
+    end
+  end
+  
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% set field values
+
+p = ceil(length(varargin)/2);
+ok = ones(p,1);
+msgs = cell(p,1);
+
+for i=1:p, 
+  field = varargin{2*i-1}; 
+  content = varargin{2*i};
+  msg = '';
+  isok = 0;
+  
+  si = size(content);
+  isscalar = (prod(si)==1);
+  isvector = (sum(si>1)==1);
+  isrowvector = (isvector & si(1)==1);
+  if isnumeric(content), 
+    iscomplete = all(~isnan(content(:))); 
+    ispositive = all(content(:)>0); 
+    isinteger  = all(content(:)==ceil(content(:)));
+    isrgb = all(content(:)>=0 & content(:)<=1) & size(content,2)==3;
+  end
+  
+  switch sS.type, 
+   case 'som_map',
+    [munits dim] = size(sS.codebook);
+    switch field, 
+     case 'codebook', 
+      if ~isnumeric(content), 
+	msg = '''codebook'' should be a numeric matrix'; 
+      elseif size(content) ~= size(sS.codebook) & ~isempty(sS.codebook), 
+	msg = 'New ''codebook'' must be equal in size to the old one.'; 
+      elseif ~iscomplete, 
+	msg = 'Map codebook must not contain NaN''s.'; 
+      else
+	sS.codebook = content; isok=1;
+      end
+     case 'labels', 
+      if isempty(content), 
+	sS.labels = cell(munits,1); isok = 1;
+      elseif size(content,1) ~= munits, 
+	msg = 'Length of labels array must be equal to the number of map units.';
+      elseif ~iscell(content) & ~ischar(content), 
+	msg = '''labels'' must be a string array or a cell array/matrix.';
+      else
+	isok = 1;
+	if ischar(content), content = cellstr(content); 
+	elseif ~iscellstr(content), 
+	  l = prod(size(content));
+	  for j=1:l, 
+	    if ischar(content{j}), 
+	      if ~isempty(content{j}), 
+		msg = 'Invalid ''labels'' array.';
+		isok = 0; 
+		break;
+	      else
+		content{j} = ''; 
+	      end
+	    end
+	  end
+	end
+	if isok, sS.labels = content; end
+      end
+     case 'topol', 
+      if ~isstruct(content), 
+	msg = '''topol'' should be a topology struct.'; 
+      elseif ~isfield(content,'msize') | ...
+	    ~isfield(content,'lattice') | ...
+	    ~isfield(content,'shape'), 
+	msg = '''topol'' is not a valid topology struct.'; 
+      elseif prod(content.msize) ~= munits, 
+	msg = '''topol''.msize does not match the number of map units.'; 
+      else
+	sS.topol = content; isok = 1;
+      end
+     case 'msize', 
+      if ~isnumeric(content) | ~isvector | ~ispositive | ~isinteger, 
+	msg = '''msize'' should be a vector with positive integer elements.'; 
+      elseif prod(content) ~= munits, 
+	msg = '''msize'' does not match the map size.'; 
+      else
+	sS.topol.msize = content; isok = 1;
+      end
+     case 'lattice', 
+      if ~ischar(content),
+	msg = '''lattice'' should be a string'; 
+      elseif ~strcmp(content,'rect') & ~strcmp(content,'hexa'),
+	msg = ['Unknown lattice type: ' content];
+	sS.topol.lattice = content; isok = 1;
+      else
+	sS.topol.lattice = content; isok = 1;
+      end
+     case 'shape', 
+      if ~ischar(content),
+	msg = '''shape'' should be a string';
+      elseif ~strcmp(content,'sheet') & ~strcmp(content,'cyl') & ...
+	    ~strcmp(content,'toroid'),
+	msg = ['Unknown shape type:' content]; 
+	sS.topol.shape = content; isok = 1;
+      else
+	sS.topol.shape = content; isok = 1;
+      end
+     case 'neigh', 
+      if ~ischar(content),
+	msg = '''neigh'' should be a string'; 
+      elseif ~strcmp(content,'gaussian') & ~strcmp(content,'ep') & ...
+	    ~strcmp(content,'cutgauss') & ~strcmp(content,'bubble'),
+	msg = ['Unknown neighborhood function: ' content]; 
+	sS.neigh = content; isok = 1;
+      else
+	sS.neigh = content; isok = 1;
+      end
+     case 'mask', 
+      if size(content,1) == 1, content = content'; end
+      if ~isnumeric(content) | size(content) ~= [dim 1], 
+	msg = '''mask'' should be a column vector (size dim x 1).'; 
+      else
+	sS.mask = content; isok = 1;
+      end
+     case 'name', 
+      if ~ischar(content), 
+	msg = '''name'' should be a string.';
+      else 
+	sS.name = content; isok = 1;
+      end
+     case 'comp_names', 
+      if ~iscell(content) & ~ischar(content), 
+	msg = '''comp_names'' should be a cell string or a string array.'; 
+      elseif length(content) ~= dim, 
+	msg = 'Length of ''comp_names'' should be equal to dim.'; 
+      else
+	if ischar(content), content = cellstr(content); end
+	if size(content,1)==1, content = content'; end
+	sS.comp_names = content;
+	isok = 1;
+      end        
+     case 'comp_norm', 
+      if ~iscell(content) & length(content)>0, 
+	msg = '''comp_norm'' should be a cell array.'; 
+      elseif length(content) ~= dim, 
+	msg = 'Length of ''comp_norm'' should be equal to dim.'; 
+      else
+	isok = 1;
+	for j=1:length(content), 
+	  if ~isempty(content{j}) & (~isfield(content{j}(1),'type') | ...
+				     ~strcmp(content{j}(1).type,'som_norm')), 
+	    msg = 'Each cell in ''comp_norm'' should be either empty or type ''som_norm''.';
+	    isok = 0; 
+	    break; 
+	  end
+	end
+	if isok, sS.comp_norm = content; end
+      end        
+     case 'trainhist', 
+      if ~isstruct(content) & ~isempty(content), 
+	msg = '''trainhist'' should be a struct array or empty.';
+      else
+	isok = 1;
+	for j=1:length(content), 
+	  if ~isfield(content(j),'type') | ~strcmp(content(j).type,'som_train'), 
+	    msg = 'Each cell in ''trainhist'' should be of type ''som_train''.';
+	    isok = 0; 
+	    break; 
+	  end
+	end
+	if isok, sS.trainhist = content; end      
+      end        
+     otherwise, 
+      msg = ['Invalid field for map struct: ' field]; 
+    end
+    
+   case 'som_data',
+    [dlen dim] = size(sS.data);
+    switch field,      
+     case 'data', 
+      [dummy dim2] = size(content);
+      if prod(si)==0, 
+	msg = '''data'' is empty';
+      elseif ~isnumeric(content), 
+	msg = '''data'' should be numeric matrix.'; 
+      elseif dim ~= dim2 & ~isempty(sS.data), 
+	msg = 'New ''data'' must have the same dimension as old one.'; 
+      else
+	sS.data = content; isok = 1;
+      end
+     case 'labels', 
+      if isempty(content), 
+	sS.labels = cell(dlen,1); isok = 1;
+      elseif size(content,1) ~= dlen, 
+	msg = 'Length of ''labels'' must be equal to the number of data vectors.';
+      elseif ~iscell(content) & ~ischar(content), 
+	msg = '''labels'' must be a string array or a cell array/matrix.';
+      else
+	isok = 1;
+	if ischar(content), content = cellstr(content); 
+	elseif ~iscellstr(content), 
+	  l = prod(size(content));
+	  for j=1:l, 
+	    if ~ischar(content{j}), 
+	      if ~isempty(content{j}), 
+		msg = 'Invalid ''labels'' array.';
+		isok = 0; j
+		break;
+	      else
+		content{j} = ''; 
+	      end
+	    end
+	  end
+	end
+	if isok, sS.labels = content; end
+      end
+     case 'name', 
+      if ~ischar(content), 
+	msg = '''name'' should be a string.';
+      else 
+	sS.name = content; isok = 1;
+      end
+     case 'comp_names', 
+      if ~iscell(content) & ~ischar(content), 
+	msg = '''comp_names'' should be a cell string or a string array.'; 
+      elseif length(content) ~= dim, 
+	msg = 'Length of ''comp_names'' should be equal to dim.'; 
+      else
+	if ischar(content), content = cellstr(content); end
+	if size(content,1)==1, content = content'; end
+	sS.comp_names = content;
+	isok = 1;
+      end        
+     case 'comp_norm', 
+      if ~iscell(content) & length(content)>0, 
+	msg = '''comp_norm'' should be a cell array.'; 
+      elseif length(content) ~= dim, 
+	msg = 'Length of ''comp_norm'' should be equal to dim.'; 
+      else
+	isok = 1;
+	for j=1:length(content), 
+	  if ~isempty(content{j}) & (~isfield(content{j}(1),'type') | ...
+				     ~strcmp(content{j}(1).type,'som_norm')), 
+	    msg = 'Each cell in ''comp_norm'' should be either empty or type ''som_norm''.';
+	    isok = 0; 
+	    break; 
+	  end
+	end
+	if isok, sS.comp_norm = content; end
+      end        
+     case 'label_names', 
+      if ~iscell(content) & ~ischar(content) & ~isempty(content), 
+	msg = ['''label_names'' should be a cell string, a string array or' ...
+	       ' empty.']; 
+      else
+	if ~isempty(content), 
+	  if ischar(content), content = cellstr(content); end
+	  if size(content,1)==1, content = content'; end
+	end
+	sS.label_names = content;
+	isok = 1;
+      end        
+     otherwise, 
+      msg = ['Invalid field for data struct: ' field]; 
+    end
+    
+   case 'som_topol', 
+    switch field,      
+     case 'msize', 
+      if ~isnumeric(content) | ~isvector | ~ispositive | ~isinteger, 
+	msg = '''msize'' should be a vector with positive integer elements.'; 
+      else
+	sS.msize = content; isok=1;
+      end
+     case 'lattice', 
+      if ~ischar(content),
+	msg = '''lattice'' should be a string'; 
+      elseif ~strcmp(content,'rect') & ~strcmp(content,'hexa'),
+	msg = ['Unknown lattice type: ' content]; 
+	sS.lattice = content; isok = 1;
+      else
+	sS.lattice = content; isok = 1;
+      end
+     case 'shape', 
+      if ~ischar(content),
+	msg = '''shape'' should be a string';
+      elseif ~strcmp(content,'sheet') & ~strcmp(content,'cyl') & ...
+	    ~strcmp(content,'toroid'),
+	msg = ['Unknown shape type: ' content]; 
+	sS.shape = content; isok = 1;
+      else
+	sS.shape = content; isok = 1;
+      end
+     otherwise, 
+      msg = ['Invalid field for topology struct: ' field]; 
+    end
+    
+   case 'som_train', 
+    switch field,      
+     case 'algorithm', 
+      if ~ischar(content),
+	msg = '''algorithm'' should be a string.'; 
+      else
+	sS.algorithm = content; isok = 1;
+      end
+     case 'data_name', 
+      if ~ischar(content),
+	msg = '''data_name'' should be a string'; 
+      else
+	sS.data_name = content; isok = 1;
+      end
+     case 'neigh', 
+      if ~ischar(content),
+	msg = '''neigh'' should be a string'; 
+      elseif ~isempty(content) & ~strcmp(content,'gaussian') & ~strcmp(content,'ep') & ...
+	    ~strcmp(content,'cutgauss') & ~strcmp(content,'bubble'),
+	msg = ['Unknown neighborhood function: ' content]; 
+	sS.neigh = content; isok = 1;
+      else
+	sS.neigh = content; isok = 1;
+      end
+     case 'mask', 
+      if size(content,1) == 1, content = content'; end
+      dim = size(content,1); %[munits dim] = size(sS.data); 
+      if ~isnumeric(content) | size(content) ~= [dim 1], 
+	msg = '''mask'' should be a column vector (size dim x 1).'; 
+      else
+	sS.mask = content; isok = 1;
+      end
+     case 'radius_ini', 
+      if ~isnumeric(content) | ~isscalar, 
+	msg = '''radius_ini'' should be a scalar.'; 
+      else
+	sS.radius_ini = content; isok = 1;
+      end
+     case 'radius_fin', 
+      if ~isnumeric(content) | ~isscalar, 
+	msg = '''radius_fin'' should be a scalar.'; 
+      else
+	sS.radius_fin = content; isok = 1;
+      end
+     case 'alpha_ini', 
+      if ~isnumeric(content) | ~isscalar,
+	msg = '''alpha_ini'' should be a scalar.'; 
+      else
+	sS.alpha_ini = content; isok = 1;
+      end
+     case 'alpha_type', 
+      if ~ischar(content),
+	msg = '''alpha_type'' should be a string'; 
+      elseif ~strcmp(content,'linear') & ~strcmp(content,'inv') & ...
+	    ~strcmp(content,'power') & ~strcmp(content,'constant') & ~strcmp(content,''),
+	msg = ['Unknown alpha type: ' content]; 
+	sS.alpha_type = content; isok = 1;
+      else
+	sS.alpha_type = content; isok = 1;
+      end        
+     case 'trainlen', 
+      if ~isnumeric(content) | ~isscalar, 
+	msg = '''trainlen'' should be a scalar.'; 
+      else
+	sS.trainlen = content; isok = 1;
+      end
+     case 'time', 
+      if ~ischar(content),
+	msg = '''time'' should be a string'; 
+      else
+	sS.time = content; isok = 1;
+      end        
+     otherwise, 
+      msg = ['Invalid field for train struct: ' field]; 
+    end
+    
+   case 'som_norm', 
+    switch field,      
+     case 'method', 
+      if ~ischar(field), 
+	msg = '''method'' should be a string.';
+      else
+	sS.method = content; isok = 1;
+      end
+     case 'params', 
+      sS.params = content; isok = 1;
+     case 'status', 
+      if ~ischar(content),
+	msg = '''status'' should be a string'; 
+      elseif ~strcmp(content,'done') & ~strcmp(content,'undone') & ...
+	    ~strcmp(content,'uninit'),
+	msg = ['Unknown status type: ' content]; 
+	sS.status = content; isok = 1;
+      else
+	sS.status = content; isok = 1;
+      end        
+     otherwise, 
+      msg = ['Invalid field for normalization struct: ' field];
+    end
+
+   case 'som_grid', 
+    if any(strcmp(field,{'lattice', 'shape', 'msize', 'coord',...
+			 'line', 'linecolor', 'linewidth', ...
+			 'marker', 'markersize', 'markercolor', 'surf', ... 
+			 'label', 'labelcolor', 'labelsize'})), 
+      warning('No checking done on field identifier or content.');
+      sS = setfield(sS,field,content);       
+      isok = 1;
+    else
+      msg = ['Invalid field for grid struct: ' field];
+    end
+    
+   otherwise, 
+    error('Unrecognized structure.'); 
+    
+  end
+  
+  msgs{i} = msg;
+  ok(i) = isok;
+  
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% return
+
+if nargout < 2, 
+  for i=1:p,     
+    if ~isempty(msgs{i}), 
+      if ~ok(i), fprintf(1,'[Error! '); 
+      else fprintf(1,'[Notice ');
+      end
+      fprintf(1,'in setting %s] ',varargin{2*i-1});
+      fprintf(1,'%s\n',msgs{i});
+    end
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_show.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,815 @@
+function h=som_show(sMap, varargin)
+
+% SOM_SHOW Basic SOM visualizations: component planes, u-matrix etc.
+%
+% h = som_show(sMap, ['argID', value, ...])
+% 
+%  som_show(sMap);
+%  som_show(sMap,'bar','none');
+%  som_show(sMap,'comp',[1:3],'umat','all');
+%  som_show(sMap,'comp',[1 2],'umat',{[1 2],'1,2 only'},'comp',[3:6]);   
+%  som_show(sMap,'size',m,'bar','vert','edge','off');
+%
+% Input and output arguments ([]'s are optional):
+%  sMap        (struct) map struct
+%  [argID,     (string) Additional parameters are given as argID, value
+%    value]    (varies) pairs. See below for list of valid IDs and values.
+%
+%  h           (struct) struct with the following fields:
+%   .plane     (vector) handles to the axes objecets (subplots)
+%   .colorbar  (vector) handles to the colorbars. Colorbars for empty
+%                       grids & RGB color planes do not exist: the
+%                       value for them in the vector is -1.
+%   .label     (vector) handles to the axis labels
+%
+% Here are the valid argument IDs and corresponding values. M is
+% the number of map units
+%  'comp'               Which component planes to draw, title is
+%                       the name of the component (from sMap.comp_names) 
+%              (vector) a vector of component indices
+%              (string) 'all' (or '' or []) for all components
+%  'compi'              as 'comp' but uses interpolated shading
+%  'umat'               Show u-matrix calculated using specified 
+%                       components 
+%              (vector) a vector of component indeces
+%              (string) 'all' (or '' or []) to use all components
+%              (cell)   of form {v, str} uses v as the vector, and put
+%                       str as title instead of the default 'U-matrix'
+%  'umati'              as 'umat' but uses interpolated shading of colors 
+%  'empty'     (string) Make an empty plane using given string as title
+%  'color'              Set arbitrary unit colors explicitly  
+%              (matrix) size Mx1 or Mx3, Mx1 matrix uses indexed
+%                       coloring;  Mx3 matrix (RGB triples as rows)
+%                       defines fixed unit colors
+%              (cell)   of from {color, str}. 'color' is the Mx1
+%                       or Mx3 RGB triple matrix and 'str' is title 
+%                       string
+%  'colori'             as 'color' but uses interpolated shading of colors 
+%  'norm'      (string) 'n' or 'd': Whether to show normalized 'n' or 
+%                       denormalized 'd' data values on the
+%                       colorbar. By default denormalized values are used.
+%  'bar'       (string) Colorbar direction: 'horiz', 'vert' (default)
+%                       or 'none'
+%  'size'               size of the units
+%              (scalar) same size for each unit, default is 1
+%              (vector) size Mx1, individual size for each unit
+%  'edge'      (string) Unit edges on component planes 'on'
+%                       (default) or 'off'
+%  'footnote'  (string) Footnote string, sMap.name by default
+%  'colormap'  (matrix) user defined colormap 
+%  'subplots'  (vector) size 1 x 2, the number of subplots in y- and
+%                       and x-directions (as in SUBPLOT command)
+%
+% If identifiers 'comp', 'compi', 'umat', 'umati', 'color', 'colori'
+% or 'empty' are not specified at all, e.g. som_show(sMap) or
+% som_show(sMap,'bar','none'), the U-matrix and all component planes
+% are shown.
+%
+% For more help, try 'type som_show' or check out online documentation. 
+% See also SOM_SHOW_ADD, SOM_SHOW_CLEAR, SOM_UMAT, SOM_CPLANE, SOM_GRID.
+
+%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_show
+%
+% PURPOSE 
+%
+% Shows basic visualizations of SOM: component planes, unified distance
+% matrices as well as empty planes and fixed color planes.
+%
+% SYNTAX
+%
+%  h = som_show(sMap)
+%  h = som_show(sMap, 'argID', value, ...)
+%
+% DESCRIPTION 
+%
+% This function is used for basic visualization of the SOM. Four
+% kinds of SOM planes can be shown: 
+%
+%  1. U-matrix (see SOM_UMAT) which shows clustering structure of
+%     the SOM. Either all or just part of the components can 
+%     be used in calculating the U-matrix.
+%  2. component planes: each component plane shows the values of
+%     one variable in each map unit
+%  3. an empty plane which may be used as a base for, e.g., hit 
+%     histogram visualization or labeling (see SOM_SHOW_ADD)
+%  4. a fixed or indexed color representation for showing color coding or 
+%     clustering
+%
+% The component planes and u-matrices may have colorbars showing the
+% scale for the variable. The scale shows by default the values that
+% variables have in the map struct. It may be changed to show the
+% original data values (estimated by SOM_DENORMALIZE). In this case a
+% small 'd' appears below the colorbar. The orientation of these
+% colorbars may be changed, or they can be removed.
+%
+% By default the u-matrix - calculated using all variables - and all
+% component planes are shown. This is achieved by giving command
+% som_show(sMap) without any further arguments
+%
+% REQUIRED INPUT ARGUMENTS
+%
+% sMap  (struct) Map to be shown. If only this argument is
+%                specified, the function draws first the u-matrix 
+%                calculated using all the variables followed by all
+%                the component planes.
+%
+% OPTIONAL INPUT ARGUMENTS
+% 
+% (M is the number of map units)
+%
+% Optional arguments must be given as 'argID',value -pairs
+% 
+% 'comp'      Defines the variabels to be shown as component planes.
+%    (vector) 1xN or Nx1 vector with integer positive numbers ranging 
+%             from 1 to the number of variables in the map codebook
+%             (dim). This vector determines the variables to be show
+%             as component planes and their order. Note that the same
+%             component plane (the same variable index) is allowed to
+%             occur several times.
+%    (string) 'all' or '' or []. This uses all variables, that is, it's
+%             the same that using value [1:dim] where dim is the
+%             number of variables in the codebook.
+%       
+% 'compi'     Same as 'comp' but uses a Gouraud shaded color plane 
+%             (made using SOM_GRID function) instead of the cell-like
+%             visualization of 'comp' (made using SOM_CPLANE). Note
+%             that the color interpolation doesn't work strictly
+%             correctly on 'hexa' grid, as it uses rectangular grid
+%             (see SURF).
+% 
+% 'umat'      Show U-matrix: value defines the variables to be used
+%             for calculating a u-matrix.
+%    (vector) as in 'comps'. However, multiple occurences of the
+%             same variable (same variable index) are ignored. 
+%    (string) 'all' or '' or []. This uses all variables, that is, 
+%             is the same as using value [1:dim] where dim is the
+%             number of variables in the codebook. 
+%    (cell)   of form {v, str} where v is a valid index vector for 'umat' 
+%             (see above) and str is a string that is used as a title 
+%             for the u-matrix instead of the default title
+%             'U-matrix'. This may be useful if several u-matrices
+%             are shown in the same figure. 
+% 
+% 'umati'     Same as 'umat' but uses shaded color plane (see 'compi').
+%
+% 'empty'     Show an empty plane (patch edges only)
+%    (string) value is used as title
+% 
+% 'color'     Define fixed RGB colors for the map units
+%    (matrix) a Mx3 matrix of RGB triples as rows             
+%    (vector) a Mx1 vector of any values: sets indexed coloring using
+%             the current colormap (as SURF does)  
+%    (matrix) a Mx3xN matrix of RGB triples as rows. This gives N
+%             color planes.
+%    (matrix) a Mx1xN matrix of any values: sets indexed coloring using
+%             the current colormap (as SURF does). This gives N
+%             color planes.
+%    (cell)   of form {rgb, str} where rgb is a Mx3 (xN) matrix of RGB
+%             triples as rows and str is a string that is used as
+%             title(s).  
+%    (cell)   of form {v, str} where v is a Mx1(xN) matrix of values
+%             and str is a string that is used as title(s). 
+%
+% 'colori'    Same as 'color' but uses shaded color plane (see 'compi').
+%
+% 'norm'      Defines whether to use normalized or denormalized
+%             values in the colorbar. If denormalized values are
+%             used, they are acquired from SOM_DENORMALIZE function 
+%             using sMap.comp_norm field.
+%    (string) 'd' (default) for denormalized values and 'n' for
+%             normalized values. The corresponding letter appears
+%             below the colorbar.
+%   
+% 'bar'       Define the direction of the colorbars for component planes 
+%             and U-matrices or turn them completely off.
+%    (string) 'vert' (default), 'horiz' or 'none'. 'vert' gives
+%             vertical and 'horiz' horizontal colorbars. 'none'
+%             shows no colorbars at all. 
+%
+% 'size'      Define sizes of the units. 
+%    (scalar) all units have the same size (1 by default)
+%    (vector) size Mx1, each unit gets individual size scaling 
+%             (as in SOM_CPLANE)
+%
+% 'edge'      Unit edges on component plane visualizations.
+%    (string) 'on' or 'off' determines whether the unit edges on component 
+%             planes ('comp') are shown or not. Default is 'off'. Note that
+%             U-matrix and color planes are _always_ drawn without edges.
+%
+% 'footnote'  Text on the figure
+%    (string) is printed as a movable text object on the figure
+%             where it may be moved using mouse. Default value is the
+%             string in the sMap.name field. Note: value [] gives the
+%             string, but input value '' gives no footnote a all. 
+%             See VIS_FOOTNOTE for more information on the text object 
+%             and ways to change its font size.
+% 
+% 'colormap'  som_show ghages the colormap by default to a gray-level map
+%    (matrix) This argument is used to set some other colormap. 
+%
+% 'subplots'  the number of subplots in y- and x-directions, as in 
+%    (vector) command SUBPLOT
+% 
+% OUTPUT ARGUMENTS
+%
+% h (struct)
+%    .plane         (vector) handles to the axes objects (subplots)
+%    .colorbar      (vector) handles to the colorbars. Colorbars of empty
+%                            & color planes do not exist: the corresponding
+%                            value in the vector is -1
+%    .label         (vector) handles to the axis labels
+%
+% OBJECT TAGS
+%
+% The property field 'Tag' of the axis objects created by this function 
+% are set to contain string 'Cplane' if the axis contains component plane
+% ('comp'), color plane ('color') or empty plane ('empty') and string
+% 'Uplane' if it contains a u-matrix ('umat'). The tag is set to 
+% 'CplaneI' for planes created using 'compi' and 'colori', and 
+% 'UplaneI' for 'umati'.
+%
+% FEATURES
+%
+% Note that when interpolated shading is used in coloring ('compi' and
+% 'colori') the standard built-in bilinear Gouraud interpolation for a 
+% SURF object is used. If the lattice is hexagonal - or anything else than 
+% rectangular in general - the result is not strictly what is looked 
+% for, especially if the map is small. 
+%
+% EXAMPLES
+%
+%% Make random data, normalize it, and give component names
+%% Make a map
+%
+%   data=som_data_struct(rand(1000,3),'comp_names',{'One','Two','Three'});
+%   data=som_normalize(data,'var');
+%   map=som_make(data);
+%
+%% Do the basic visualization with som_show: u-matrix and all
+%% component planes
+%
+%   som_show(map);   
+%
+%% The values shown in the colorbar are denormalized codebook values 
+%% (if denormalization is possible). To view the actual values, use
+%% the ..., 'norm', 'n' argument pair.
+%
+%   som_show(map,'norm','n')
+%
+%% Something more complex:
+%% Show 1-2. Component planes 1 and 2 (variables 'One' and 'Two')
+%%        3. U-matrix that is calculated only using variables
+%%           'One' and 'Two' 
+%%           with title '1,2 only'
+%%        4. U-matrix that is calculated using all variables with the 
+%%           deafult title 'U-matrix'
+%%        5. The color code (in c) with title 'Color code'
+%%        6. Component plane 3 (variable 'Three')
+%% and  use vertical colorbars and and the values      
+%% But first: make a continuous color code (see som_colorcode)
+%
+% c=som_colorcode(map,'rgb1');
+% 
+% som_show(map,'comp',[1 2],'umat',{1:2,'1,2 only'},'umat','all', ...
+%  'color',{c,'Color code'},'bar','vert','norm','n','comp',3)
+%
+%  SEE ALSO
+%
+% som_show_add   Show hits, labels and trajectories on SOM_SHOW visualization.
+% som_show_clear Clear hit marks, labels or trajectories from current figure. 
+% som_umat       Compute unified distance matrix of self-organizing map.
+% som_grid       Visualization of a SOM grid.
+% som_cplane     Visualization of component, u-matrix and color planes.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 1.0beta johan 100298 
+% Version 2.0beta johan 201099 juuso 181199 johan 011299-100200
+%                 juuso 130300 190600
+
+%% Check arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+error(nargchk(1,Inf,nargin))     % check no. of input args
+
+if isstruct(sMap),               % check map
+  [tmp,ok,tmp]=som_set(sMap);
+  if all(ok) & strcmp(sMap.type,'som_map') 
+    ;
+  else
+    error('Map struct is invalid!');
+  end
+else
+  error('Requires a map struct!')
+end
+
+munits=size(sMap.codebook,1); % numb. of map units
+d=size(sMap.codebook,2);      % numb. of components
+msize=sMap.topol.msize;       % size of the map
+lattice=sMap.topol.lattice;   % lattice
+
+if length(msize)>2 
+  error('This visualizes only 2D maps!')
+end
+
+if rem(length(varargin),2)
+  error('Mismatch in identifier-value  pairs.');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  read in optional arguments
+ 
+if isempty(varargin),
+  varargin = { 'umat','all','comp','all'};
+end
+
+%% check the varargin and build visualization infostrcuts
+% Vis:       what kind of planes, in which order, what are the values in
+%            the units
+% Vis_param: general properties
+% see subfunction
+
+% The try-catch construction is here just for avoiding the
+% possible termination to happen in subfunction because an error
+% message containing subfunction line numbers etc. might be confusing, as
+% there probably is nothing wrong with the subfunction but with the 
+% input. Ok, this isn't proper programming sytle... 
+
+try       
+  [Plane, General]= check_varargin(varargin, munits, d, sMap.name);
+catch
+  error(lasterr);
+end
+
+% Set default values for missing ones
+
+% No planes at all (only general properties given in varargin):
+% set default visualization
+
+if isempty(Plane)
+  varargin = [varargin, { 'umat','all','comp','all'}];
+  % and again we go...
+  try
+    [Plane, General]= check_varargin(varargin, munits, d, sMap.name);
+  catch
+    error(lasterr);
+  end
+end
+
+% set defaults for general properties
+
+if isempty(General.colorbardir)
+  General.colorbardir='vert';
+end
+
+if isempty(General.scale)
+  General.scale='denormalized';
+end
+
+if isempty(General.size)
+  General.size=1;
+end
+
+if isempty(General.edgecolor)
+  General.edgecolor='none';
+end
+
+%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% get rid of an annoying warning: "RGB color data not yet supported in
+% Painter's mode."
+%set(gcf, 'renderer','zbuffer'); 
+%% -> a much more annoying thing results: the output to PostScript is 
+%%    as bitmap, making the files over 6MB in size... 
+
+n=length(Plane);                     % the number of subfigures
+
+% get the unique component indices
+c=General.comp(General.comp>0);
+c=setdiff(unique(c),[0 -1]); 
+c=c(~isnan(c));                   
+
+% estimate the suitable dimension for
+if isempty(General.subplots), 
+  y=ceil(sqrt(n));                   % subplots
+  x=ceil(n/y);
+else
+  y = General.subplots(2); 
+  x = General.subplots(1); 
+  if y*x<n, 
+    error(['Given subplots grid size is too small: should be >=' num2str(n)]); 
+  end    
+end
+
+clf;                               % clear figure
+
+for i=1:n,                         % main loop
+  h_axes(i,1)=subplot(x,y,i);      % open a new subplot
+  
+  % Main switch: select function according to the flags set in comps  
+
+  switch Plane{i}.mode
+  
+  case 'comp'
+    %%% Component plane
+
+    tmp_h=som_cplane(lattice,msize, sMap.codebook(:,General.comp(i)), ...
+		     General.size);
+    set(tmp_h,'EdgeColor', General.edgecolor);
+    set(h_axes(i),'Tag','Cplane');
+    h_label(i,1)=xlabel(sMap.comp_names{General.comp(i)});
+    
+
+  case 'compi'
+    %%% Component plane (interpolated shading)
+    
+    tmp_h=som_grid(lattice, msize, 'surf', sMap.codebook(:,Plane{i}.value), ...
+	'Marker', 'none', 'Line', 'none');
+    set(h_axes(i),'Tag','CplaneI');
+    h_label(i,1)=xlabel(sMap.comp_names(Plane{i}.value));
+    vis_PlaneAxisProperties(gca,lattice,msize,NaN);
+  
+  case 'color'
+    %%% Color plane
+
+    tmp_h=som_cplane(lattice,msize,Plane{i}.value,General.size);
+    set(tmp_h,'EdgeColor','none');
+    set(h_axes(i),'Tag','Cplane');
+    h_label(i,1)=xlabel(Plane{i}.name);
+    
+      
+  case 'colori'
+    %%% Color plane (interpolated shading)
+    
+    tmp_h=som_grid(lattice, msize, 'surf', Plane{i}.value, 'Marker', 'none', ...
+	'Line', 'none');
+    set(h_axes(i),'Tag','CplaneI');
+    h_label(i,1)=xlabel(Plane{i}.name);
+    vis_PlaneAxisProperties(gca,lattice,msize,NaN);
+  
+  case 'empty'      
+    %%% Empty plane
+    
+    tmp_h=som_cplane(lattice,msize,'none');
+    h_label(i,1)=xlabel(Plane{i}.name);
+    set(h_axes(i),'Tag','Cplane');
+    
+  case 'umat'
+    %%% Umatrix  
+    
+    u=som_umat(sMap.codebook(:,Plane{i}.value),sMap.topol,'median',...
+	'mask',sMap.mask(Plane{i}.value)); u=u(:);
+    tmp_h=som_cplane([lattice 'U'],msize,u);
+    set(tmp_h,'EdgeColor','none');
+    set(h_axes(i),'Tag','Uplane');
+    h_label(i,1)=xlabel(Plane{i}.name);
+
+  case 'umati'
+    %%% Umatrix (interpolated shading) 
+    
+    u=som_umat(sMap.codebook(:,Plane{i}.value),sMap.topol,'mean',...
+	'mask',sMap.mask(Plane{i}.value)); u=u(1:2:end,1:2:end);
+    u=u(:);
+    tmp_h=som_grid('rect', msize, 'surf', u, ...
+	'Marker', 'none', 'Line', 'none', ...
+	'coord', som_vis_coords(lattice,msize));
+    set(h_axes(i),'Tag','UplaneI');
+    h_label(i,1)=xlabel(Plane{i}.name);
+    vis_PlaneAxisProperties(gca,lattice,msize,NaN);
+    
+  otherwise
+    error('INTERNAL ERROR: unknown visualization mode.');
+  end
+
+  %%% Adjust axis ratios to optimal (only 2D!) and put the
+  %%% title as close to axis as possible
+
+  set(h_label,'Visible','on','verticalalignment','top');
+  set(gca,'plotboxaspectratio',[msize(2) msize(1) msize(1)]);
+  
+  %%% Draw colorbars if they are turned on and the plane is umat or c-plane
+
+  if General.comp(i)> -1 & ~strcmp(General.colorbardir,'none'),
+    h_colorbar(i,1)=colorbar(General.colorbardir);           % colorbars
+  else
+    h_colorbar(i,1)=-1;
+    General.comp(i)=-1;
+  end
+end         %% main loop ends
+  
+% Set window name
+
+set(gcf,'Name',[ 'Map name: ' sMap.name]);
+
+%% Set axes handles to the UserData field (for som_addxxx functions
+%% and som_recolorbar) 
+%% set component indexes and normalization struct for som_recolorbar
+
+SOM_SHOW.subplotorder=h_axes;
+SOM_SHOW.msize=msize;
+SOM_SHOW.lattice=lattice;
+SOM_SHOW.dim=d;
+SOM_SHOW.comps=General.comp;
+SOM_SHOW.comp_norm=sMap.comp_norm; %(General.comp(find(General.comp>0)));
+
+set(gcf,'UserData', SOM_SHOW);
+
+% Set text property 'interp' to 'none' in title texts
+
+set(h_label,'interpreter','none');
+
+h_colorbar=som_recolorbar('all', 3, General.scale);   %refresh colorbars
+
+% Set a movable text to lower corner pointsize 12.
+
+vis_footnote(General.footnote);  vis_footnote(12);  
+
+% set colormap
+colormap(General.colormap);
+
+%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+
+if nargout > 0
+  h.plane=h_axes; h.colorbar=h_colorbar; h.label=h_label;
+end
+
+
+%%%%%% SUBFUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [Plane, General]=check_varargin(args, munits, dim, name)
+
+% args: varargin of the main function
+% munits: number of map units
+% dim: map codebook dimension
+% name: map name
+% Define some variables (they must exist later)
+
+Plane={};           % stores the visualization data for each subplot
+General.comp=[];    % information stored on SOM_SHOW figure (which component)
+General.size=[];            % unit size
+General.scale=[];           % normalization
+General.colorbardir=[];     % colorbar direction
+General.edgecolor=[];       % edge colors
+General.footnote=name;      % footnote text
+General.colormap=colormap;  % default colormap (used to be gray(64).^.5;)
+General.subplots=[];        % number of subplots in y- and x-directions
+
+for i=1:2:length(args),
+  %% Check that all argument types are strings
+  
+  if ~ischar(args{i}),
+    error('Invalid input identifier names or input argument order.');
+  end
+  
+  %% Lower/uppercase in identifier types doesn't matter: 
+  
+  identifier=lower(args{i});     % identifier (lowercase)
+  value=args{i+1};
+  
+  %%% Check first the identifiers that define planes and get values
+  %%% to the visualization data struct array Plane.
+  %%% (comps,compi,umat,color,empty) Note that name, value and comp_
+  %%% must be specified in these cases 
+  %%% comp_ are collected to comp in order. This is stored to the
+  %%% SOM_SHOW user property field to give information for SOM_RECOLROBAR
+  %%% how to operate, i.e., which component is in which subplot:
+  %%% comp(i)=0: draw colorbar, but no normalization (umat) 
+  %%% comp(i)=1...N: a component plane of variable comp(i)
+  %%% comp(i)=-1: no colorbar (color or empty plane)    
+  
+  switch identifier  
+   case {'comp','compi'}
+    %%% Component planes: check values & set defaults
+    
+    if ~vis_valuetype(value,{'nx1','1xn','string'}) & ~isempty(value),
+      error([ 'A vector argument or string ''all'' expected for ''' ...
+	      identifier '''.'])
+    end
+    if isempty(value) 
+      value=1:dim;
+    elseif ischar(value), 
+      if ~strcmp(value,'all')
+	error([ 'Only string value ''all'' is valid for ''' ...
+		identifier '''.']);
+      else
+	value=1:dim;
+      end
+    else
+      value=round(value);
+      if min(value)<1 | max(value)>dim,
+	error([ 'Component indices out of range in ''' identifier '''.']) 
+      end
+    end
+    if size(value,1)==1, value=value';end
+    comp_=value; 
+    name=[]; % name is taken form sMap by index in main loop 
+    
+  case {'umat','umati'}
+    %%% Check first the possible cell input
+    
+    if iscell(value),
+      if ndims(value) ~= 2 | any(size(value) ~= [1 2]) | ...
+	    ~vis_valuetype(value{2},{'string'}),
+	error('Cell input for ''umat'' has to be of form {vector, string}.');
+      else
+	name=value{2}; value=value{1};
+      end
+    else 
+      name='U-matrix'; % no cell: default title is set
+    end
+    if ~vis_valuetype(value,{'nx1','1xn','string'}) & ~isempty(value),
+      error('Vector, string ''all'', or cell {vector, string} expected for ''umat''.')
+    end
+    if isempty(value)
+      value=1:dim;
+    elseif ischar(value), 
+      if ~strcmp(value,'all')
+	error('Only string value ''all'' is valid for ''umat''.')
+      else
+	value=1:dim;
+      end
+    else
+      value=unique(round(value));
+    end
+    if min(value)<1 | max(value)>dim,
+      error('Component indices out of range in ''umat''.') 
+    end
+    
+    if size(value,1)==1, value=value';end
+    comp_=0;
+    
+  case 'empty'
+    %%% Empty plane: check values & set defaults
+    
+    if ~vis_valuetype(value,{'string'}), 
+      error('A string value for title name expected for ''empty''.');
+    end
+    name=value;
+    comp_=-1;
+    
+  case { 'color','colori'}
+    %%% Color plane: check values & set defaults
+    
+    % Check first the possible cell input
+    if iscell(value),
+      if ndims(value)~=2 | any(size(value) ~= [1 2]) | ...
+	    ~vis_valuetype(value{2},{'string'}),
+	error([ 'Cell input for ''' identifier ...
+	      ''' has to be of form {M, string}.']);
+      else
+	name=value{2}; value=value{1};
+      end
+    else 
+      name='Color code'; % no cell: default title is set
+    end
+    if size(value,1)~=munits | ...
+	  (~vis_valuetype(value,{'nx3rgb'}) & ... 
+	   ~vis_valuetype(value,{'nx1'}) & ...
+	   ~vis_valuetype(value,{'nx1xm'}) & ...
+	   ~vis_valuetype(value,{'nx3xdimrgb'})),
+      error(['Mx3 or Mx3xN RGBmatrix, Mx1 or Mx1xN matrix, cell '...
+	     '{RGBmatrix, string},' ...
+	     ' or {matrix, string} expected for ''' identifier '''.']);
+    end
+
+    % if colormap is fixed, we don't draw colorbar (comp_ flag is -1)
+    % if colormap is indexed, we draw colorbar as in umat (comp_=0)
+
+    if size(value,2)==3
+      comp_=-1;
+    else
+      comp_=0;
+    end
+    
+    %%%% The next things are general properties of the visualization---
+    %%%%
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    
+  case 'size'
+    %%% Unit size: check & set
+  
+    if ~vis_valuetype(value,{'1x1',[munits 1]})
+      error('A munits x 1 vector or a scalar expected for ''size''.')
+    end
+    if isempty(value),
+      General.size=1;
+    else
+      General.size=value;
+    end
+    
+   case 'bar'
+    %%% Colorbar existence & direction: check & set
+    
+    if ~vis_valuetype(value,{'string'})
+      error('String value expected for ''bar''.')
+    elseif isempty(value)
+      value='vert';
+    end
+    if any(strcmp(value,{'vert','horiz','none'})),
+      General.colorbardir=value;
+    else
+      error('String ''vert'', ''horiz'' or ''none'' expected for ''bar''.');
+    end
+    
+  case 'norm' 
+    %%% Value normalization: check & set
+    
+    if ~vis_valuetype(value,{'string'})
+      error('String ''n'' or ''d'' expected for ''norm''.');
+    elseif isempty(value)
+      value='n';
+    end
+    if strcmp(value(1),'n'), 
+      General.scale='normalized';
+    elseif strcmp(value(1),'d'),
+      General.scale='denormalized';
+    else
+      error('String ''n(ormalized)'' or ''d(enormalized)'' expected for ''norm''.');
+    end
+    
+  case 'edge'
+    %%% Edge on or off : check % set 
+    
+    if ~vis_valuetype(value,{'string'}) & ~isempty(value),
+      error('String value expected for ''edge''.')
+    elseif ~isempty(value),
+      switch value
+      case 'on'
+	General.edgecolor='k';
+      case 'off' 
+	General.edgecolor='none';
+      otherwise
+	error('String value ''on'' or ''off'' expected for ''edge''.')  
+      end
+    end
+    
+  case 'footnote'
+    %%% Set the movable footnote text  
+    
+    if ~vis_valuetype(value,{'string'}) 
+      if ~isempty(value),
+	error('String value expected for ''footnote''.');
+      else
+	General.footnote=sMap.name;
+      end
+    else
+      General.footnote=value;
+    end
+
+   case 'colormap'
+    %%% Set the colormap
+    if isempty(value)
+      General.colormap=gray(64).^2;
+    elseif ~vis_valuetype(value,{'nx3rgb'})
+      error('Colormap is invalid!');
+    else
+      General.colormap=value;
+    end
+    
+   case 'subplots'
+    %%% set the number of subplots
+    if ~vis_valuetype(value,{'1x2'}) & ~vis_valuetype(value,{'2x1'})
+      error('Subplots grid size is invalid!');
+    else
+      General.subplots=value; 
+    end
+    
+  otherwise
+    %%% Unknown identifier
+    
+    error(['Invalid argument identifier ''' identifier '''!']);
+  end
+  
+  %%% Set new entry to the Plane array if the indentifier means 
+  %%% making a new plane/planes
+  
+  tail=length(Plane);
+  switch identifier
+  case {'comp','compi'}
+    for i=1:length(value)
+      Plane{tail+i}.mode=identifier;
+      Plane{tail+i}.value=value(i);
+      Plane{tail+i}.name=name; % not used actually
+    end
+    General.comp = [General.comp; comp_];
+   case {'umat','umati','empty'}
+    Plane{tail+1}.mode=identifier;
+    Plane{tail+1}.value=value;
+    Plane{tail+1}.name=name;
+    General.comp = [General.comp; comp_];
+   case {'color','colori'},
+    for i=1:size(value,3),
+      Plane{tail+i}.mode=identifier;
+      Plane{tail+i}.name=[name '_' num2str(i)];
+      Plane{tail+i}.value=value(:,:,i);
+      General.comp = [General.comp; comp_];
+    end
+    if size(value,3)==1,
+      Plane{tail+1}.name=name;
+    end
+  otherwise
+    ; % do nothing
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_show_add.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1610 @@
+function h=som_show_add(mode,D,varargin)
+
+%SOM_SHOW_ADD Shows hits, labels and trajectories on SOM_SHOW visualization
+%
+% h = som_show_add(mode, D, ['argID',value,...])
+%
+%  som_show_add('label',sMap)
+%  som_show_add('hit',som_hits(sMap,sD))
+%  som_show_add('traj',som_bmus(sMap,sD))
+%  som_show_add('comet',som_bmus(sMap,sD))
+%  som_show_add('comet',inds, 'markersize', [1 0.2])
+% 
+%  Input and output arguments ([]'s are optional): 
+%   mode    (string) operation mode 'label', 'hit', 'traj', 'comet'
+%   D       (varies) depending on operation mode
+%      In 'label' mode gives the labels  
+%           (struct) map struct, the .labels field of which is used
+%           (cell array of strings) size munits x number_of_labels
+%      In 'hit' mode gives the hit histogram(s)
+%           (matrix) size munits x k, if k>1, D gives hit histograms 
+%                    for k different sets of data (e.g. k classes).     
+%      In 'traj' and 'comet' modes gives the trace of the trajectory
+%           (vector) size N x 1, D(1) is the current and D(end) 
+%                    is oldest item of the trajectory
+%   [argID, (string) Additional arguments are given as argID, value
+%    value] (varies) pairs. Depend on the operation mode (see below).                   
+%
+%   h    (vector)    handles to the created objects
+%
+% Here are the valid argument IDs and corresponding values. Most of 
+% them depend on the operation mode: 
+%
+% all modes
+%   'SubPlot'   (vector) which subplots are affected (default: current)
+%               (string) 'all': all subplots are affected 
+% mode = 'label'
+%   'TextSize'  (scalar) text size in points
+%   'TextColor' (string) ColorSpec, 'xor' or 'none': label color 
+%
+% mode = 'hit'
+%   'EdgeColor'  (string) ColorSpec, 'none' 
+%   'MarkerSize' (scalar) maximum marker size
+%  if k == 1, 
+%   'Marker'     (string) 'lattice', Matlab's built-in markerstyles, 'none'
+%   'MarkerColor'(string) Colorspec, 'none': fill color for markers
+%   'Text'       (string) 'on', 'off':  whether to write the number of hits
+%   'TextColor'  (string) ColorSpec, 'xor': text color if Text is 'on'
+%   'TextSize'   (scalar) text font size in points if Text is 'on'
+%  if k > 1, 
+%   'SizeFactor' (string) 'common', 'separate': size scaling
+%   'Marker'     (string) 'lattice', Matlab's built-in markerstyles, 'pie', 'none' 
+%                (cell array) size k x 1, marker style for each histogram
+%   'MarkerColor'(string) Colorspec, 'none': fill color for markers
+%                (matrix) size k x 3, color for each histogram
+%
+% mode = 'traj'
+%   'TrajWidth'  (scalar) basic trajectory line width in points
+%   'WidthFactor'(string) 'hit' or 'equal': effect of hits on line width 
+%   'TrajColor'  (string) ColorSpec, 'xor': color for trajectory line
+%   'Marker'     (string) 'lattice', Matlab's built-in markerstyles, 'none'
+%   'MarkerSize' (scalar) basic marker size (in points)
+%   'SizeFactor' (string) 'equal', 'hit' (equal size/size depends on freq.) 
+%   'MarkerColor'(string) Colorspec, 'none': color of markers
+%   'EdgeColor'  (string) ColorSpec, 'none': edgecolor of markers 
+%
+% mode = 'comet'
+%   'Marker'     (string) 'lattice', Matlab's built-in markerstyles
+%   'MarkerColor'(string) ColorSpec, 'none': color for the markers
+%                (matrix) size N x 3, RGB color for each step 
+%   'EdgeColor'  (string) ColorSpec, 'none': edgecolor for markers
+%   'MarkerSize' (vector) size 1 x 2, size of comet core and tail
+% 
+% For more help, try 'type som_show_add' or check out online documentation.
+% See also SOM_SHOW.
+
+%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_show_add 
+%
+% PURPOSE 
+%
+%  Shows hits, labels and trajectories on SOM_SHOW visualization
+%
+% SYNTAX
+%
+%  h = som_show_add(mode, D); 
+%  h = som_show_add(..., 'argID', value);
+%
+% DESCRIPTION 
+%
+% The SOM_SHOW function makes the basic visualization of the SOM.
+% With SOM_SHOW_ADD one can set labels, hit histogarms or different 
+% trajectories on this visualization.
+%
+%  labels (mode = 'label')
+%
+% Labels are strings describing the units. They may be, e.g., a result
+% of SOM_AUTOLABEL function. Labels are centered on the unit so that
+% multiple labels are in a column.
+%
+%  hit histograms (mode = 'hit')
+%
+% Hit histograms indicate how the best matching units of a data
+% set/some data sets are distribited on a SOM. The hit histogram can
+% be calculated using function SOM_HITS.
+%
+%  trajectories (mode = 'traj' or mode = 'comet')
+%
+% Trajectories show the best matching units for a data set that is
+% time (or any ordered) series. It may be either a line connecting the
+% consecutive best matching units ('traj' mode) or a "comet"
+% trajectory where the current (first sample in D) best matching unit
+% has biggest marker and the oldest (last sample) has smallest
+% marker ('comet' mode).
+%
+% NOTE: that the SOM_SHOW_ADD function can only be applied to
+% figures that have been drawn by SOM_SHOW.
+% 
+% KNOWN BUGS
+%
+% for 'hit' mode, if the given hit matrix is all zeros, a series of 
+% error messages is generated
+% 
+% REQUIRED INPUT ARGUMENTS
+%
+% mode     (string) Visuzalization mode 
+%                   'label'  map labeling
+%                   'hit'    hit histograms
+%                   'traj'   line style trajectory
+%                   'comet'  comet style trajectory 
+%
+% D (vector, map struct, cell array of strings) Data
+%
+% The valid value of D depends on the visualization mode:
+%
+%  Mode       Valid D
+%  'label'    map struct or Mxl cell array of strings, where
+%              M is number of map units and l maximum numer of
+%              labels in unit.
+%
+%  'hit'      Mx1 vector or MxK matrix, where M is number of map
+%             units and K is number of hit histograms (of K
+%             different classes of data) to be shown
+%
+%  'comet'    Lx1 vector of best matchig unit indices that have to
+%  'traj'     be in range of the map that is in the figure. L is 
+%             the length of trajectory
+%             
+% OPTIONAL INPUT ARGUMENTS
+%
+% Optional arguments must be given as 'argument identifier', value
+% -pairs. This section is divided in four parts because each mode
+% functions in a different way, though they may have same identifier
+% names.
+%
+% If user specifies an identifier that is not operational in the
+% specified mode, the functions gives a warning message. If the
+% identifier does not exist in any mode the execution is terminated
+% and an error message is returned.
+%
+% GENERAL OPTIONAL INPUT ARGUMENTS (in all modes)
+%
+% 'SubPlot'     Target subplots in the figure    
+%      (vector) Subplots' ordinal numbers in a vector. By default
+%               the target is the current subplot (see GCA).
+%      (string) String 'all' means all subplots. 
+%
+% 'Marker'      Data marker (not in use in 'label' mode)
+%      (string) 'none': sets the markers off
+%               'lattice': sets the marker shape according to the
+%                lattice of the underlying map, i.e. it gives
+%                rectangles if underlying map lattice is 'rect' and
+%                hexagons for 'hexa', respectively
+%               any of the Matlab's built-in marker styles: 'o', 's',
+%               'd', 'v', '^', '<' ,'> ', 'p', 'h', 'x', '.', '*', '+'
+%      
+%               NOTE that '.','x','+' or '*' are not recommended since
+%               they have only edgecolor and many visualizations are 
+%               based on _face_ color. 
+%
+%               NOTE there is an important difference between built-in
+%               markers. If figure size is changed the 'lattice'
+%               markers are rescaled but the built-in markers stay at
+%               fixed size, and consequently, the size unit for
+%               'lattice' markers is normalized but for built-in
+%               markers the size is given in points. For 'lattice'
+%               markers size 1 means the size of the map unit.
+%
+%               NOTE that in 'hit' mode there are some additional features.
+%
+% 'EdgeColor'   Sets edgecolor for the markers (not in use in 'label' mode)
+%      (string) ColorSpec, e.g. 'r',  gives each edge the specified color
+%               'none': sets markers edges invisible 
+%               Default is 'none' - except if MarkerColor is set to 'none' the
+%               defaults is 'black'.
+%
+% OPTIONAL INPUT ARGUMENTS mode 'label'
+%
+% Labels are centered on the unit so that multiple labels are in
+% a single column.
+%
+% 'SubPlot'     see General Optional Input Arguments 
+%
+% 'TextSize'    Text size for labels
+%      (scalar) Text size in points. Default is 10.
+%
+% 'TextColor'   Text color
+%      (string) ColorSpec specifies the text color for all labels 
+%               'xor': gives Matlab's "xor" text color mode where the 
+%                label color depends on background color     
+%               'none': sets labels invisble (but creates the objects)
+%
+% OPTIONAL INPUT ARGUMENTS mode 'hit'
+%
+% The function in mode 'hit' depends on the input argument size. If
+% only one hit histogram is drawn (K==1), it is possible to show the
+% hits using numbers. This is not possible for multiple hit
+% histograms (K>1).
+%
+% 'SubPlot'     see General Optional Input Arguments 
+%        
+% 'Marker'      Marker style(s)
+%      (string) As in General Optional Input Arguments. In addition 
+%               'pie': sets pie charts for markers. The size of the
+%                pie in each unit describes the number of total hits in the
+%                unit and the share of each sector is the relative amount of
+%                hits in each class (requires multiple histograms). Color for
+%                each class is set by MarkerColor. Default coloring 
+%                is hsv(K), where K is the number of hit histograms (classes).
+%      (cell array) size K x 1, of built-in marker style characters. K is
+%               number of histograms (classes), i.e., same as size(D,2)
+%               where D is the second input argument. Cell value is
+%               valid only if multiple histograms are specified (K>1). 
+% 
+%               NOTE if multiple histograms (classes) are specified
+%               and Marker is one of the built-in marker styles or
+%               'lattice', the markers are drawn in size order from
+%               largest to smallest. This insures that all markers are
+%               visible (or at least their edges are). But if two
+%               markers for different classes in the same node were of
+%               same size, the other would be totally hidden. In order
+%               to prevent this, the markers for different classes are
+%               shifted different amounts from the exact centre of the
+%               unit. (Evidently, if Marker is 'pie' this problem does
+%               not exist.)
+%
+%               Default marker is 'lattice' for one histogram and
+%               'pie' for multiple histograms.
+%
+% 'MarkerColor' Marker color(s) 
+%      (string) ColorSpec gives all markers the same color
+%               'none': leaves the markes transparent (only edges are visible)
+%      (matrix) size K x 3, RGB triples for each histogram class
+%               giving each hit histogram an own color
+%
+%               NOTE that markers '*','+','x', or '.' cannot use 
+%               MarkerColor since these objects have no face (fill)
+%               color. For them only EdgeColor matters.
+% 
+% 'MarkerSize'  Maximum size for marker
+%      (scalar) set the _maximum_ marker size that corresponds to
+%               maximum hit count. If Marker is 'pie' or 'lattice' the 
+%               MarkerSize is in normalized scale: 1 correspons to unit size.
+%               If Marker is one of the built-in styles, MarkerSize is given
+%               in points.  
+%               
+%               Marker        Default MarkerSize  
+%               'lattice'      1 (normalized units)
+%               'pie'          1 (normalized units) 
+%               'o','s', etc.  6 (points)
+%
+% 'SizeFactor'  Defines the scaling of the marker sizes in multiple
+%               histogram case (when Marker is one of the built-in marker 
+%               styles or 'lattice').
+%      (string) 'separate' (the default) means that marker size shows 
+%                the share of the data which hits the unit compared to 
+%                amount of data in that class. That is, the size of
+%                markers show the relative distribution of data on the map 
+%                in each class separately. The maximum size is SizeFactor.       
+%               'common' means that marker size shows the distribution of
+%                the data in the different classes compared to 
+%                _the total amount of data_. 
+%
+% 'EdgeColor'   Sets edgecolor for the markers, see General
+%               Optional Input Arguments. Default is 'none' -
+%               except if MarkerColor is 'none' or Marker is
+%               'x','*,'x', or '.'. In these cases default EdgeColor is 'black'. 
+%
+% 'Text'        Write/don't write the number of hits on the
+%               units. This option is not in use for multiple histograms.
+%      (string) 'on' or 'off' (the default)
+%
+% 'TextColor'   Text color 
+%      (string) ColorSpec gives each letter the same color
+%               'xor' gives a "xor" coloring for the text
+%
+% 'TextSize'    Text size (in points)    
+%      (scalar) text size in points, default is 10
+%
+% OPTIONAL INPUT ARGUMENTS mode 'traj'
+%
+% Input D is a Nx1 vector of N BMU indices that describe the trace of the 
+% comet. First element D(1) is "newest" and D(end) "oldest". Note
+% that at least two indeces are expected: size of D must be at
+% least 2x1.
+%
+% 'SubPlot'     see General Optional Input Arguments
+%
+% 'TrajColor'   Color for trajectory line
+%      (string) ColorSpec gives each marker the same color, 'w' by default
+%               'none' sets the marker fill invisible: only edges are shown
+%
+% 'TrajWidth'   Maximum width of trajectory line
+%      (scalar) width in points. Default is 3.
+%
+% 'WidthFactor' Shows how often edge between two units has been traversed.
+%      (string) 'hit': the size of the marker shows how frequent the
+%                trajectory visits the unit (TrajWidth sets the
+%                maximum size). This is the default.
+%               'equal': all lines have the same width (=TrajWidth)
+%
+% 'Marker'      Marker style, see General Optional Input
+%               Arguments. Default is 'o'.
+%    
+%               NOTE Marker style 'lattice' is not valid in mode 'traj'.
+%               NOTE Markers can be turned off by setting MarkerSize to zero.
+%
+% 'MarkerSize'  Maximum size of markers
+%      (scalar) Default is 12 (points).
+%
+% 'SizeFactor'  Sets the frequency based marker size or constant marker size.                  
+%      (string) 'hit': the size of the marker shows how frequent the
+%                trajectory visits the unit (MarkerSize sets the
+%                maximum size). This is the default.
+%               'equal': all markers have th esame size (=MarkerSize)
+%
+% 'MarkerColor' The fill color(s) for hit markers
+%      (string) ColorSpec gives each marker the same color, default is 'w'
+%               'none' sets the marker fill invisible: only edges are shown
+%
+%               NOTE markers '*','+','x', or '.' can't use MarkerColor since
+%               these objects have no face (fill) color: only EdgeColor
+%               matters for these markers.
+% 
+% 'EdgeColor'   see General Optional Input Arguments. Default is
+%               'none' - except if MarkerColor is 'none' or Marker
+%               is 'x','*','x', or '.'. In these cases default
+%               EdgeColor is 'white'. 
+%
+% OPTIONAL INPUT ARGUMENTS mode 'comet'
+%
+% Input D is a Nx1 vector of N BMU indices that describe the trace of
+% the comet. First element D(1) is "newest" and D(end) "oldest". Note
+% that at least two indeces are expected: size of D must be at least
+% 2x1.
+%
+% 'SubPlot'     see General Optional Input Arguments 
+%
+% 'Marker'      Marker style, see General Optional Input
+%               Arguments. Default is 'lattice'.
+%
+% 'MarkerColor' The fill color(s) for comet markers
+%      (string) ColorSpec gives each marker the same color, default is 'w'
+%               'none' sets the marker fill invisible: only edges are shown 
+%      (matrix) size N x 3, consisting of RGB triples as rows 
+%               sets different color for each marker. This may be
+%               used to code the time series using color/grayscale.
+%
+%               NOTE Markers '*','+','x', or '.' can't use MarkerColor
+%               since these objects have no face (fill) color: only 
+%               EdgeColor matters for these markers.
+% 
+% 'EdgeColor'   see General Optional Input Arguments. Default is
+%               'none' - except if MarkerColor is 'none' or Marker
+%               is 'x','*,'x', or '.'. In these cases default 
+%               EdgeColor is 'white'. 
+%
+% 'MarkerSize'  The size of "comet core" and tail 
+%      (vector) size 1 x 2: first element sets the size for the marker
+%               representing D(1) and the second set size for D(end)
+%               the size (area) of the markes between these changes linearly.
+%               Note that size units for 'lattice' marker style are
+%               normalized so that 1 means map unit size but for built-in
+%               marker styles the size is given points.
+%
+%               Marker          default value
+%               'lattice'        [0.8 0.1]
+%               'o','v', etc.    [20 4]
+%
+% OUTPUT ARGUMENTS
+%
+% h (vector) handles to all objects created by the function
+% 
+% OBJECT TAGS
+%
+%  Field Tag in every object is set to
+%
+%   'Lab'  for objects created in mode 'label'
+%   'Hit'                -"-           'hit'
+%   'Traj'               -"-           'traj'
+%   'Comet'              -"-           'comet'
+%
+% EXAMPLES
+%
+% Not yet ready
+%
+% SEE ALSO
+%             
+%  som_show       Basic map visualization
+%  som_show_clear Clear hit marks, labels or trajectories from current figure. 
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 131199
+
+%% Check arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+error(nargchk(2,Inf,nargin))     % check no. of input args
+
+% Get data from the SOM_SHOW figure, exit if error
+
+[handles,msg,lattice,msize,dim]=vis_som_show_data('all',gcf);    
+error(msg);                    
+
+munits=prod(msize);
+% Initialize some variables: these must exist later; 
+% the default values are set by subfunctions
+
+Property=init_properties;
+Property.handles=handles; 
+
+%%% Check mode and that D is of right type & size for that mode 
+% mode has to be string
+if ~vis_valuetype(mode,{'string'}),
+  error('String value expected for first input argument (mode).');
+else                
+  mode=lower(mode); % case insensitive
+  mode_=mode;       % 'mode' is internal variable; 
+                    % for program constructs 'mode_' is shown to
+                    % user in some error messags
+end
+
+switch mode         % check mode
+ case 'hit'
+  %%% Hit histogram visualization: vector [msize k]
+ 
+  if ~vis_valuetype(D,{'nxm'}),
+    error('Hit visualization: a matrix expected for data input.');
+  elseif size(D,1) ~= prod(msize)
+    error('Hit visualization: data and map size do not match.');
+  end
+  % Multiple hit histograms
+  if size(D,2)>1
+    mode='mhit';
+    % Hit count musn't be negative
+    if any(D(:)<0),
+      error('Hit visualization: negative hit count in data not allowed!');
+    end
+  end
+ 
+ case {'traj','comet'}
+  %%% Trajectory like visualizations
+  
+  if ~vis_valuetype(D,{'nx1'}),
+    error('Trajectory/Comet: a Nx1 vector expected for data input.');
+  elseif any(D>prod(msize))| any(D<1),
+    error('Trajectory/Comet: BMU indices out of range in data input.');
+  elseif any(fix(D)~=D),
+    warning('Trajectory/Comet: BMU indices not integer. Rounding...');
+  elseif size(D,1)<2
+    error('At least two BMU indexes expected.');
+  end
+  
+ case  'label' 
+  %%% Label visualizations
+  
+  if isstruct(D),                  % check if D is a map
+    [tmp,ok,tmp]=som_set(D);
+    if all(ok) & strcmp(D.type,'som_map') 
+      ;
+    else
+      error('Map struct is invalid!');
+    end
+    % Size check
+    if length(msize) ~= length(D.topol.msize) | ...
+	  munits ~= prod(D.topol.msize),
+      error(['The size of the input map and the map in the figure' ...
+	     ' do not match.']);
+    end
+    D=D.labels;
+    % Cell input  
+  elseif vis_valuetype(D,{'2Dcellarray_of_char'}) 
+    ;
+    % Char input   
+  elseif vis_valuetype(D,{'char_array'}),
+    D=cellstr(D);
+  else
+    error(['Labels has to be in a map struct or in a cell array' ...
+	   ' of strings']);
+  end
+  if size(D,1) ~= munits
+    error(['The number of labels does not match the size of the map' ...
+	   ' in the figure.']);
+  end
+ otherwise
+  error('Invalid visualization mode.');
+end  
+
+if rem(length(varargin),2)
+  error('Mismatch in identifier-value pairs or wrong input argument order.');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  read in optional arguments
+
+for i=1:2:length(varargin),
+  %% Check that all argument types are strings
+  
+  if ~ischar(varargin{i})
+    error('Invalid identifier name or input argument order.');
+  end
+  
+  %% Lower/uppercase in identifier types doesn't matter: 
+  
+  identifier=lower(varargin{i});     % identifier (lowercase)
+  value=varargin{i+1};
+  
+  % Check property identifiers and values and store the values.
+  % Struct used_in is set to initiate warning messages:
+  % if a don't care propersty is set, the user is warned.
+  
+  switch identifier  
+   case 'marker'
+    %%% Marker for hits or trajectories
+    switch mode
+     case 'mhit'
+      if vis_valuetype(value,{'markerstyle'}) | ...
+	    (vis_valuetype(value,{'string'}) & ...
+	     any(strcmp(value,{'lattice','pie'}))),
+	; % ok
+      elseif vis_valuetype(value,{'cellcolumn_of_char'}),
+	if size(value,1) ~= size(D,2)
+	  error([' If a cell of Markers is specified its size must be' ...
+		 ' number_of_hit_histograms x 1.']);
+	else
+	  for i=1:size(D,2),
+	    if ~vis_valuetype(value{i},{'markerstyle'})
+	      error('Cell input for ''Marker'' contains invalid styles.')
+	    end
+	  end
+	end
+      else
+	error([' Invalid ''Marker'' in case of multiple hit histograms.' ...
+	       char(10) ' See detailed documentation.'])
+      end
+     case {'comet','hit'}
+      if vis_valuetype(value,{'markerstyle'}) | isempty(value),
+	% ok;
+      elseif ischar(value) & strcmp(value,'lattice'),
+	% ok;
+      else
+	error(['Marker must be Matlab''s marker style, or string' ...
+	       ' ''lattice''.']);
+      end
+     case 'traj'
+      if ~vis_valuetype(value,{'markerstyle'}) & ~isempty(value),
+	error('In mode ''traj'' Marker must be one of Matlab''s built-in marker styles');
+      end
+    end
+    used_in.comet=1;           % Set relevance flags
+    used_in.traj=1;
+    used_in.label=0;
+    used_in.hit=1;
+    used_in.mhit=1;
+    
+   case 'markersize'
+    %%% Marker for hits or trajectories
+    switch mode 
+     case 'comet'
+      if ~vis_valuetype(value,{'1x2'}) & ~isempty(value), 
+	error('In mode ''comet'' MarkerSize'' must be a 1x2 vector.');
+      end
+     case {'hit','traj'}
+      if ~vis_valuetype(value,{'1x1'}) & ~isempty(value), 
+	error(['In mode ''' mode_ ...
+	       ''' ''MarkerSize'' must be a scalar.']);
+      end
+    end
+    used_in.comet=1;           % Set relevance flags
+    used_in.traj=1;
+    used_in.label=0;
+    used_in.hit=1;
+    used_in.mhit=1;
+    
+   case 'sizefactor'   
+    %%% Hit dependent size factor
+    switch mode
+     case 'traj'
+      if ~vis_valuetype(value,{'string'}) | ...
+	    ~any(strcmp(value,{'hit', 'equal'})),
+	error(['In mode ''traj'' ''SizeFactor'' must be ' ...
+	       'string ''equal'' or ''hit''.']);
+      end
+     case 'mhit'
+      if ~vis_valuetype(value,{'string'}) | ...
+	    ~any(strcmp(value,{'common', 'separate'})),
+	error(['In mode ''hit'' ''SizeFactor'' must be ' ...
+	       'string ''common'' or ''separate''.']);
+      end
+    end
+    used_in.comet=0;           % Set relevance flags
+    used_in.traj=1;
+    used_in.label=0;
+    used_in.hit=0;
+    used_in.mhit=1;
+    
+   case 'markercolor'
+    %%% Markercolor
+    switch mode
+     case 'comet' 
+      if ~vis_valuetype(value,{'colorstyle','1x3rgb'}) & ...
+	    ~vis_valuetype(value,{'nx3rgb',[size(D,1) 3]},'all') & ...
+	    ~isempty(value),
+	error(['MarkerColor in mode ''comet'' must be a ColorSpec,' ...
+	       ' string ''none'' or Mx3 matrix of RGB triples.']);
+      end
+     case 'mhit'
+      if ~vis_valuetype(value,{[size(D,2) 3],'nx3rgb'},'all') & ...
+	    ~vis_valuetype(value,{'colorstyle','1x3rgb'}),
+	error([' If multiple hit histograms in mode ''hit'' are' ...
+	       char(10) ...
+	       ' given MarkerColor must be ColorSpec or a Kx3 matrix' ...
+	       char(10)...
+	       ' of RGB triples where K is the number of histograms.']);
+      end
+     case 'hit'
+      if ~vis_valuetype(value,{'colorstyle','1x3rgb'}) & ...
+	    ~isempty(value),
+	error(['MarkerColor in mode ''hit'' ' ...
+	       'must be a ColorSpec or string ''none''.']);
+      end
+     case 'traj'
+      if ~vis_valuetype(value,{'colorstyle','1x3rgb'}) & ...
+	    ~isempty(value),
+	error(['MarkerColor in mode ''traj'' ' ...
+	       'must be a ColorSpec or string ''none''.']);
+      end
+    end
+    
+    used_in.comet=1;           % Set relevance flags
+    used_in.traj=1;
+    used_in.label=0;
+    used_in.hit=1;
+    used_in.mhit=1;
+    
+   case 'edgecolor'
+    %%% Color for marker edges
+    if ~vis_valuetype(value,{'colorstyle','1x3rgb'}) & ~isempty(value),
+      error('''EdgeColor'' must be a ColorSpec or string ''none''.')
+    end
+    
+    used_in.comet=1;           % Set relevance flags
+    used_in.traj=1;
+    used_in.label=0;
+    used_in.hit=1;
+    used_in.mhit=1;
+    
+   case 'text'
+    %%% Labeling for trajectories/hits
+    switch mode
+     case 'hit'
+      %%% Hit count using numbers?
+      if isempty(value),
+	value='off';
+      elseif vis_valuetype(value,{'string'}) & ...
+	    ~any(strcmp(value,{'on','off'})),
+	error('Value for Text in mode ''hit'' should be ''on'' or ''off''.');
+      else
+	; % ok
+      end
+     %case 'traj','comet'
+     % if ~vis_valuetype(value,{'char_array','cellcolumn_of_char'}) & ...
+     %	    ~isempty(value)
+     %	 error('Value for Text is of wrong type or size.')
+     % elseif ischar(value)
+     %	value=strcell(value) % ok, convert to cell
+     % end
+     % if size(traj_label,1)~=size(D,1)
+     %	error(['The number of labels in Text and the length of the' ...
+     % 	       ' trajectory do not match.']);
+     % end
+     case 'label'
+      ; % not used
+    end
+    used_in.comet=0;            % Set relevance flags
+    used_in.traj=0;
+    used_in.label=0;
+    used_in.hit=1;
+    used_in.mhit=0;
+    
+   case 'textsize'
+    %%% Text size for labels
+    
+    if ~vis_valuetype(value,{'1x1'}) & ~isempty(value), 
+      error('TextSize must be scalar.');
+    end
+    used_in.comet=0;            % Set relevance flags
+    used_in.traj=0;
+    used_in.label=1;
+    used_in.hit=1;
+    used_in.mhit=0;
+    
+   case 'textcolor'
+    %%% Color for labels
+    
+    if ~vis_valuetype(value,{'colorstyle','1x3rgb','xor'}) & ~isempty(value),
+      error('''TextColor'' must be ColorSpec, ''xor'' or ''none''.')
+    end
+    used_in.comet=0;            % Set relevance flags
+    used_in.traj=0;
+    used_in.label=1;
+    used_in.hit=1;
+    used_in.mhit=0;
+    
+   case 'trajwidth'
+    %%% Basic line width for a line trajectory
+    if ~vis_valuetype(value,{'1x1'}) & ~isempty(value), 
+      error('TrajWidth must be a scalar.');
+    end
+    used_in.comet=0;            % Set relevance flags
+    used_in.traj=1; 
+    used_in.label=0;
+    used_in.hit=0;
+    used_in.mhit=0;
+    
+   case 'widthfactor'
+    %%% Hit factor for a line trajectory
+    if ~vis_valuetype(value,{'string'}) | ...
+	  ~any(strcmp(value,{'hit', 'equal'})),
+      error(['In mode ''traj'' ''WidthFactor'' must be ' ...
+	     'string ''equal'' or ''hit''.']);
+    end
+    used_in.comet=0;            % Set relevance flags
+    used_in.traj=1;
+    used_in.label=0;
+    used_in.hit=0;
+    used_in.mhit=0;
+    
+   case 'trajcolor'
+    %%% Color for trajectory line
+    
+    if ~vis_valuetype(value,{'colorstyle','1x3rgb','xor'}) & ~isempty(value),
+      error('''TrajColor'' must be a ColorSpec or string ''xor''.')
+    end
+    used_in.comet=0;            % Set relevance flags
+    used_in.traj=1;
+    used_in.label=0;
+    used_in.hit=0;
+    used_in.mhit=0;
+    
+   case 'uselabel' 
+    %%% Which labels to show
+    error('Not yet implemented.');
+   
+   case 'shift'
+    if ~vis_valuetype(value,{'1x1'}) | ((value < 0) | (value > 1)),
+      error('''Shift'' must be a scalar in range [0,1].')
+    end
+    used_in.comet=0;            % Set relevance flags
+    used_in.traj=0;
+    used_in.label=0;
+    used_in.hit=0;
+    used_in.mhit=1;
+    
+   case 'subplot'
+    %%% The subplots which are affected 
+    
+    if vis_valuetype(value,{'1xn','nx1','string'}), 
+      if ischar(value),
+	if ~strcmp(value,'all'),
+	  error('Only valid string value for subplot indices is ''all''.');
+	else
+	  value=1:length(handles);
+	end
+      elseif any(value<1) | any(value>length(handles)),
+	error('Subplot indices must be in range 1...number_of_subplots!');
+      end
+    elseif ~isempty(value)
+      error('Invalid subplot indices!');
+    end
+    used_in.comet=1;              % Set relevance flags
+    used_in.traj=1;
+    used_in.label=1;
+    used_in.hit=1;
+    used_in.mhit=1;
+    
+   otherwise
+    error([ 'Unknown identifier ''' identifier '''.']);
+  end
+  
+  % Warn user if the property that was set has no effect in the 
+  % selected visuzlization mode
+
+  if ~getfield(used_in, mode),
+    warning(['Property ''' identifier ''' has no effect in mode ''' ...
+	       mode_ '''.']);
+  else 
+    Property=setfield(Property,identifier,value);
+  end
+end
+
+% set default subplot
+if isempty(Property.subplot)
+  % search the subplot number for current axis
+  value=find(gca==handles);    
+  if isempty(value) | value>length(handles) 
+    error('SubPlot default value setting: current axis is not in the figure!');
+  else
+    Property.subplot=value;
+  end
+end
+  
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%% Main switch: select the right subfunction %%%%%%%%%%%%%%%%%%%
+
+switch mode
+ case 'hit'
+  h_=hit(D, lattice, msize, Property);  
+ case 'mhit'
+  h_=mhit(D, lattice, msize, Property);  
+ case 'label'
+  h_=label(D, lattice, msize, Property);
+ case 'traj'
+  h_=traj(D, lattice, msize, Property);
+ case 'comet'
+  %error('Not yet implemented.'); 
+  h_=comet(D, lattice, msize, Property);
+ otherwise
+  error('Whoops! Internal error: unknown mode!');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Build output if necessary %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargout>0
+  h=h_;
+end
+
+%%%% SUBFUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function h_=hit(Hits, lattice, msize, Property);  
+
+% number of map units
+munits=prod(msize);
+
+% subplots
+p=Property.subplot;
+handles=Property.handles;
+
+% Set default marker
+if isempty(Property.marker),
+  if strcmp(Property.text,'on')
+    Property.marker='none';
+  else
+    Property.marker='lattice';
+  end
+end
+
+% Set default markersize
+if isempty(Property.markersize)
+  if strcmp(Property.marker,'none'),
+    warning('MarkerSize is not meaningful since Marker is set to ''none''.');
+  elseif strcmp(Property.marker,'lattice'),
+    Property.markersize=1; % normalized size
+  else
+    Property.markersize=12; % points
+  end
+end
+
+% Set default colors
+if ~isempty(Property.markercolor),
+  if strcmp(Property.marker,'none')
+    warning('MarkerColor is not used since Marker is set to ''none''.');
+    Property.markercolor=[]; % not used
+  else
+    ; % ok
+  end
+elseif any(strcmp(Property.marker,{'+','*','.','x'})),
+  % these don't use fill color: 'none' will cause default
+  % edgecolor to be 'k'.
+  Property.markercolor='none'; 
+else
+  Property.markercolor='k';
+end
+
+if ~isempty(Property.edgecolor),
+  if strcmp(Property.marker,'none')
+    warning(['EdgeColor is not used since Marker is set to' ...
+	     ' ''none''.']);
+  else
+    ; %ok 
+  end
+elseif ~strcmp(Property.markercolor,'none'),
+  Property.edgecolor='none';
+else
+  Property.edgecolor='k';
+end
+
+% Set default text
+if isempty(Property.text),
+  Property.text='off';
+end
+
+% Set default textsize
+if isempty(Property.textsize)
+  Property.textsize=10;
+elseif strcmp(Property.text,'off')  
+  warning('TextSize not used as hits are not set to be shown as numbers.');
+end
+
+% Set default textcolor
+if isempty(Property.textcolor)
+  Property.textcolor='w';
+elseif strcmp(Property.text,'off')  
+  warning('TextColor not used as hits are not set to be shown as numbers.');
+end
+
+%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+h_=[];          % this variable is for collecting the object handles
+
+% Select the drawing mode 
+
+if ~strcmp(Property.marker,'none') 
+  
+  %%%%% Draw spots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  
+  % unit coordinates 
+  coord=som_vis_coords(lattice,msize);
+  
+  % Calculate the size of the spots
+  mx=max(Hits);
+  
+  if mx==0,
+    % nothing to draw!
+    h_=[]; 
+    return
+  else
+    Size=sqrt(Hits./mx);      
+  end
+  % coordinates for non-zero hits (only those are drawn)
+  coord=coord(Size~=0,:);
+  Size=Size(Size~=0);
+  N=size(Size,1);
+  
+  % som_cplane can't draw one unit with arbitrary
+  % coordinates as it its mixed with msize:
+  if size(coord,1)==1 & strcmp(Property.marker,'lattice'),
+    Size=[Size;Size];
+    coord=[coord;coord];
+  end
+  
+  for i=1:length(p),
+    % Set axes
+    axes(handles(p(i)));
+    % Get hold state and caxis
+    memhold=ishold; cax=caxis;     
+    hold on;
+    
+    switch Property.marker
+     case 'lattice'
+      h_(i,1)=som_cplane(lattice, coord, Property.markercolor, ...
+			 Property.markersize*Size);
+     otherwise  
+      [S,m]=som_grid(lattice, [N 1],...
+		     'Coord',coord, ...
+		     'Line','none',...
+		     'Marker',Property.marker,...
+		     'MarkerColor',Property.markercolor,...
+		     'MarkerSize', Size*Property.markersize);
+      h_=[h_;m(:)];
+    end
+    
+    % Restore hold state
+    if ~memhold         
+      hold off;
+    end
+  end
+  
+  % Set edgecolor
+  if strcmp(Property.marker,'lattice')
+    set(h_,'edgecolor',Property.edgecolor);
+  else
+    set(h_,'markeredgecolor',Property.edgecolor);
+  end
+end
+  
+if strcmp(Property.text,'on'),
+  %%%%% Draw numbers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
+
+  % Do numbers
+  Hits=reshape(Hits,[munits 1]);
+  labels=cell([munits 1]);
+  for i=1:length(Hits)
+    if Hits(i)              % zero hit won't be shown
+      labels(i)={num2str(Hits(i))};
+    end
+  end
+
+  for i=1:length(p),
+    axes(handles(p(i)));    % Set axes
+    memhold=ishold;         % Get hold state
+    hold on;
+    [S,m,l,t]=som_grid(lattice, msize, ...
+		       'Line','none',...
+		       'Marker','none', ...
+		       'Label',labels, ...
+		       'LabelColor', Property.textcolor, ...
+		       'LabelSize', Property.textsize);
+    % Get handles
+    h_=[h_;t(:)];
+    
+    % Restore hold state and caxis
+    if ~memhold     
+      hold off;
+    end
+    caxis(cax);
+  end
+
+  % Remove zero object handles (missing objects)
+  h_=setdiff(h_,0);
+end
+
+%% Set object tags (for som_show_clear) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+set(h_,'Tag','Hit')
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function h_=mhit(Hits, lattice, msize, Property);  
+
+% number of map units
+munits=prod(msize);
+
+% subplots
+p=Property.subplot;
+handles=Property.handles;
+
+
+% Set default marker
+if isempty(Property.marker),
+  Property.marker=lattice;
+end
+
+% variable 'mode' indicates which kind of markers are used:
+
+if iscell(Property.marker),
+  mode='marker';
+elseif vis_valuetype(Property.marker,{'markerstyle'}),
+  mode='marker';
+elseif strcmp(Property.marker,'pie'),
+  mode='pie';
+else
+  mode='lattice';
+end
+
+% Set default size scaling
+if isempty(Property.sizefactor)
+  Property.sizefactor='separate';
+end
+
+% Set default markersize 
+if isempty(Property.markersize)
+  if any(strcmp(mode,{'lattice','pie'})),
+    Property.markersize=1; % normalized
+  else
+    Property.markersize=12;  % points
+  end
+end
+
+% Set default colors
+
+if isempty(Property.markercolor),
+  Property.markercolor=hsv(size(Hits,2));
+end
+
+if isempty(Property.edgecolor),
+  if vis_valuetype(Property.markercolor,{'none'}),
+    Property.edgecolor='k';
+  else
+    Property.edgecolor='none';
+  end
+end
+
+% Set default shift
+if isempty(Property.shift)
+  Property.shift=0;
+end
+
+%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+h_=[];          % this variable is for collecting the object handles
+
+switch mode
+  case {'marker','lattice'}
+   % Number of hits histograms
+   n_Hits=size(Hits,2);
+   % Calculate the size of the spots
+   
+   if strcmp(Property.sizefactor,'common')
+     mx=max(max(Hits));
+     if mx==0 % nothing to draw!
+       h_=[]; return
+     end
+     spotSize=sqrt(Hits./mx);
+   else
+     mx=repmat(max(Hits),munits,1);
+     mx(mx==0)=1; % Prevent division by zero
+     spotSize=sqrt(Hits./mx);
+   end
+   
+   %%% Make spotSize
+   
+   %reshape Size to a vector [spotSizeforHist(:,1); spotSizeforHist(:,2);...]
+   spotSize=spotSize(:);
+   
+   % indices for non-zero hits (only those are drawn)
+   notZero=find(spotSize ~= 0);
+   
+   % Drop zeros away from spotSize
+   spotSize=spotSize(notZero);
+   
+   % Order spots so that bigger will be drawn first, so that they 
+   % won't hide smaller ones
+   [dummy, sizeOrder]=sort(spotSize); sizeOrder=sizeOrder(end:-1:1);
+   spotSize=spotSize(sizeOrder);
+   
+   %%% Make unit coordinates 
+   coord=som_vis_coords(lattice,msize);
+   
+   move=repmat(linspace(-.1,.1,n_Hits),size(coord,1),1)*Property.shift;
+   move=repmat(move(:),1,2);
+   
+   % do n_Hits copies of unit coordinates so that they match spotSize
+   coord=repmat(coord,n_Hits,1)+move;
+   
+   % Drop zeros away from coords and order
+   coord=coord(notZero,:);
+   coord=coord(sizeOrder,:);
+   
+   %%% Make unit colors
+   
+   if vis_valuetype(Property.markercolor,{'nx3'}),
+     % If multiple colors Copy unit colors so that they match spotSize
+     color=Property.markercolor(reshape(repmat([1:n_Hits]',1,munits)',...
+					munits*n_Hits,1),:);
+     % drop zeros away & order
+     color=color(notZero,:);
+     color=color(sizeOrder,:);
+   else
+     % only on color
+     color=Property.markercolor;
+   end
+   
+   %%% Make unit markers
+   
+   if iscell(Property.marker),
+     %marker shows class: 
+     marker=char(Property.marker);
+     marker=marker(reshape(repmat([1:n_Hits]',1,munits)',...
+			   munits*n_Hits,1),:);
+     % Drop zeros, order & make to cell array (for som_grid)
+     marker=marker(notZero,:);
+     marker=cellstr(marker(sizeOrder,:));
+   else
+     marker=Property.marker;
+   end
+
+   % som_cplane can't draw one unit with arbitrary
+   % coordinates as it its mixed with msize:
+   if size(coord,1)==1 & strcmp(mode,'lattice'),
+     spotSize = [spotSize; spotSize];
+     coord = [coord; coord];
+   end
+
+   N=length(notZero); % for som_grid visuzalization routine
+ case 'pie'
+  % marker 'pie' requires size parameter totHits
+  if strcmp(mode,'pie')
+    coord=som_vis_coords(lattice, msize);
+    notZero=sum(Hits,2)>0;
+    Hits=Hits(notZero,:);
+    coord=coord(notZero,:);
+    N=size(notZero,1);
+    totHits=sqrt(sum(Hits,2)./max(sum(Hits,2)));
+  end
+  
+  % som_pieplane can't draw one unit with arbitrary
+  % coordinates as it its mixed with msize:
+  if size(coord,1)==1,
+    Hits= [Hits; Hits];
+    coord = [coord; coord];
+  end
+ otherwise
+  error('Whoops: internal error. Bad mode in subfunction mhit');
+end
+
+for i=1:length(p),    %%% Main loop begins
+  % Set axis
+  axes(handles(p(i)));
+  % Get hold state and caxis 
+  memhold=ishold; cax=caxis;
+  hold on;
+  
+  switch mode
+   case 'lattice'
+    h_(i,1)=som_cplane(lattice, coord, color, spotSize*Property.markersize);
+   case 'marker'
+    [S,m]=som_grid(lattice, [N 1],...
+		   'Coord',coord, ...
+		   'Line','none',...
+		   'Marker',marker,...
+		   'MarkerColor',color,...
+		   'MarkerSize', spotSize*Property.markersize);
+    h_=[h_;m(:)];
+   case 'pie'
+    h_(i)=som_pieplane(lattice, coord, ...
+		       Hits, Property.markercolor, ...
+		       totHits*Property.markersize);
+  end
+  
+  % Restore hold state and caxis
+  if ~memhold         
+    hold off;
+  end
+  caxis(cax);
+end
+
+% Set edgecolor
+if any(strcmp(mode,{'lattice','pie'})),
+  set(h_,'edgecolor',Property.edgecolor);
+else
+  set(h_,'markeredgecolor',Property.edgecolor);
+end
+
+%% Set object tags (for som_show_clear) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+set(h_,'Tag','Hit')
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function h_=label(Labels, lattice, msize, Property)
+
+% number of map units
+munits=prod(msize);
+
+% subplots and handles
+p=Property.subplot;
+handles= Property.handles;
+
+% Set default text size
+if isempty(Property.textsize)   % default point size
+  Property.textsize=10;
+end
+
+% Check color/set default
+if isempty(Property.textcolor),                   
+  Property.textcolor='k';
+end
+
+% handles will be collected in h_ for output
+h_=[];                            
+
+%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+for i=1:length(p);
+  % set axes
+  axes(handles(p(i)));
+  % store hold state and caxis (for some reason matlab may 
+  % change caxis(!?)
+  memhold=ishold;
+  hold on;
+  cax=caxis;
+  
+  % Write labels
+  [S,m,l,t]=som_grid(lattice, msize, ...
+		     'Line','none', ...
+		     'Marker', 'none', ...
+		     'Label', Labels, ...
+		     'LabelColor', Property.textcolor,  ...
+		     'LabelSize', Property.textsize);
+  % Get handles
+  h_=[h_;m(:);l(:);t(:)];
+  
+  % reset hold state and caxis
+  if ~memhold
+    hold off;
+  end
+  caxis(cax);
+end
+
+%%% Set object tags %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+set(h_,'Tag','Lab');
+  
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function h_=traj(bmu, lattice, msize, Property)
+
+% number of map units
+munits=prod(msize);
+
+% subplots and handles
+p=Property.subplot;
+handles=Property.handles;
+
+% Set default text color
+%if isempty(Property.textcolor),                   
+%  Property.textcolor='k';
+%end
+
+% Set default text size
+%if isempty(Property.textsize)
+%  Property.textsize=10;
+%end
+
+% Set default marker
+if isempty(Property.marker)
+  Property.marker='o';
+end
+
+% Set default markersize
+if isempty(Property.markersize)
+  Property.markersize=10;
+end
+
+% Set default markercolor
+if isempty(Property.markercolor)
+  Property.markercolor='w';
+end
+
+% Set default sizefactor
+if isempty(Property.sizefactor)
+  %Property.sizefactor=0;
+  Property.sizefactor='hit';
+end
+
+% Set default trajwidth
+if isempty(Property.trajwidth)
+  Property.trajwidth=3;
+end
+
+% Set default widthfactor
+if isempty(Property.widthfactor)
+  Property.widthfactor='hit';
+end
+
+% Set default trajcolor
+if isempty(Property.trajcolor)
+  Property.trajcolor='w';
+end
+
+% if no labels, do a empty cell array for syntax reasons
+%if isempty(Property.text),
+%  Property.text=cell(munits,1);
+%end
+
+h_=[];                    % handles will be collected in h_ for output    
+l=length(bmu);            % length of trajectory
+C=sparse(munits, munits); % init a connection matrix
+
+%%%%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Calculate the connection matrix that describes the trajectory
+for i=1:l-1,
+  % The following if structure removes the possible redundancy due
+  % to travels in both directions between two nodes of trajectory 
+  % (i.e. reflexivity) 
+  I=bmu(i+1);J=bmu(i);
+  %if bmu(i)>bmu(i+1)
+  
+  %else 
+  %  I=bmu(i);J=bmu(i+1);
+  %end
+  C(I,J)=C(I,J)+1;
+end
+
+% transitive connections are equal
+C=C+C';
+% drop reflexive conncetions away
+C=spdiags(zeros(munits,1),0,C);
+
+% Do labels of trajectory nodes
+
+%traj_lab=cell(munits,1);
+hits=zeros(munits,1);
+
+for i=1:l,
+%  traj_lab{bmu(i)}=strvcat(traj_lab{bmu(i)},Property.text{i});
+  hits(bmu(i))=(hits(bmu(i))+1);
+end
+
+% Calculate unit coordinates
+unit_coord=som_vis_coords(lattice, msize);
+
+% Calculate line width
+if strcmp(Property.widthfactor,'equal')
+  TrajWidth=(C>0)*Property.trajwidth;
+else
+  TrajWidth=Property.trajwidth.*sqrt(C./max(max(C)));
+end
+
+% Calculate marker sizes
+if strcmp(Property.sizefactor,'hit')
+  MarkerSize=Property.markersize*sqrt(hits/max(hits));
+else
+  MarkerSize=Property.markersize*(hits>0);
+end
+
+for i=1:length(p),
+  axes(handles(p(i)));
+  % Get hold state and caxis
+  memhold=ishold; cax=caxis;
+  hold on;
+
+  	%'Label', traj_lab, ...
+	%'LabelColor', Property.textcolor, ...
+	%'LabelSize', Property.textsize, ...
+
+  % Draw
+  [S,m,l,t,s]=som_grid(C,msize,'coord',unit_coord,...
+	'Line','-', ...
+	'LineColor', Property.trajcolor, ...
+	'LineWidth', TrajWidth, ...
+	'Marker', Property.marker, ...
+	'MarkerColor', Property.markercolor, ...
+	'MarkerSize', MarkerSize);
+  
+  % Restore hold state and caxis
+  if ~memhold   
+    hold off;
+  end
+  caxis(cax);
+  % Get handles
+  h_=[h_;m(:);l(:);t(:);s(:)];
+end
+
+%% Set object tags %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
+
+set(h_,'Tag','Traj');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function h_=comet(bmu, lattice, msize, Property)
+
+% number of map units
+munits=prod(msize);
+
+% subplots and handles
+p=Property.subplot;
+handles=Property.handles;
+
+% Set default text color
+%if isempty(Property.textcolor),                   
+%  Property.textcolor='k';
+%end
+
+%% Set default text size
+%if isempty(Property.textsize)
+%  Property.textsize=10;
+%end
+
+% Set default marker
+if isempty(Property.marker)
+  Property.marker='o';
+end
+
+% Set default markersize
+if isempty(Property.markersize),
+  if strcmp(Property.marker,'lattice'),
+    Property.markersize=linspace(0.8,0.1,length(bmu))';
+  else 
+    Property.markersize=sqrt(linspace(400,16,length(bmu)))';
+  end
+else
+  if strcmp(Property.marker,'lattice'),
+    Property.markersize=linspace(Property.markersize(1),...
+				 Property.markersize(2), ...
+				 length(bmu))';
+  else
+    Property.markersize=sqrt(linspace(Property.markersize(1).^2,...
+				      Property.markersize(2).^2, ...
+				      length(bmu)))';
+
+  end
+end
+
+% Set default markercolor
+if isempty(Property.markercolor)
+  Property.markercolor='w';
+end
+
+% Set default edgecolor
+if isempty(Property.edgecolor),
+  if vis_valuetype(Property.markercolor,{'nx3rgb'}),
+    Property.edgecolor='none';
+  else
+    Property.edgecolor=Property.markercolor;
+  end
+end
+
+h_=[];l_=[];              % handles will be collected in h_ for output       
+N_bmus=length(bmu);       % length of trajectory
+
+% if no labels, do a empty cell array for syntax reasons
+%if isempty(Property.text),
+%  Property.text=cell(N_bmus,1);
+%end
+
+%%%%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Calculate unit coordinates for trajectory points
+unit_coord=som_vis_coords(lattice, msize);
+coord=unit_coord(bmu,:);
+
+% Make labels for the _unique_ units that the comet hits
+
+unique_bmu=unique(bmu);               % count units
+%N_labels=length(unique_bmu);    
+%traj_lab=cell(N_labels,1);            % cell for labels
+%label_coord=unit_coord(unique_bmu,:); % label coordinates
+
+% Make labels
+%for i=1:N_bmus,
+%  index=find(unique_bmu==bmu(i));
+%  traj_lab{index}=strvcat(traj_lab{index},Property.text{i});
+%end
+
+%Main loop for drawing comets
+for i=1:length(p),
+  % set axis
+  axes(handles(p(i)));
+
+  % Get hold state and caxis
+  memhold=ishold; cax=caxis;
+  hold on;
+  
+  if strcmp(Property.marker,'lattice'),
+    % Draw: marker is a patch ('hexa','rect')
+     l_=som_cplane(lattice, coord, Property.markercolor, ...
+		  Property.markersize);
+     
+     % Set edgecolor
+     set(l_,'edgecolor',Property.edgecolor);
+  else
+    % Draw: other markers than 'hexa' or 'rect'
+     [S,m,l,t,s]=som_grid(lattice, [N_bmus 1], 'coord', coord,...
+			  'Line','none', ...
+			  'Marker', Property.marker, ...
+			  'MarkerColor', Property.markercolor, ...
+			  'MarkerSize',Property.markersize);
+     
+     % Set edgecolor
+     set(m, 'markeredgecolor', Property.edgecolor);
+     
+     % Get handles from markers
+     h_=[h_;l_(:);m(:);l(:);t(:);s(:)];
+  end
+  
+  % Set labels
+  %[S,m,l,t,s]=som_grid(lattice, [N_labels 1], 'coord', label_coord,...
+  %		       'Marker','none','Line','none',...
+  %		       'Label', traj_lab, ...
+  %		       'LabelColor', Property.textcolor, ...
+  %		       'LabelSize', Property.textsize);
+  % Get handles from labels
+  %h_=[h_;m(:);l(:);t(:);s(:)];
+
+  % Restore hold state and caxis
+  if ~memhold   
+    hold off;
+  end
+  caxis(cax);
+end
+
+%% Set object tags %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
+
+set(h_,'Tag','Comet');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+function P=init_properties;
+
+% Initialize an empty property struct
+
+P.marker=[];
+P.markersize=[];
+P.sizefactor=[];
+P.markercolor=[];
+P.edgecolor=[];
+P.trajwidth=[];
+P.widthfactor=[];
+P.trajcolor=[];
+P.text=[];
+P.textsize=[];
+P.textcolor=[];
+P.subplot=[];
+P.shift=[];
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_show_clear.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,142 @@
+function som_show_clear(type, p)
+
+%SOM_SHOW_CLEAR Clear hit marks, labels or trajectories from current figure. 
+%
+% som_show_clear([type], [p])
+% 
+%  som_show_clear
+%  som_show_clear('Traj',[1 2])
+% 
+% Input arguments ([]'s are optional):        
+%  [type] (string) which markers to delete (case insensitive)
+%                  'hit'   to remove hit marks
+%                  'lab'   to remove labels
+%                  'traj'  to remove line trajectories
+%                  'comet' to remove comet trajectories
+%                  'all'   to remove all (the default)
+%  [p]    (vector) subplot number vector 
+%         (string) 'all' for all subplots (the default)
+%
+% This function removes the objects made by SOM_SHOW_ADD from a
+% figure.  If no value is given for p, the function operates on every
+% axis in the current figure. It simply searches for the objects with
+% certain values in the 'Tag' field. It does not matter if the figure
+% objects are created by SOM Toolbox -functions or not. However, if
+% vector p or string 'all' _is_ given, the figure has to have been
+% created by SOM_SHOW.
+%  
+% For more help, try 'type som_show_clear' or check out the helpdesk.
+% See also SOM_SHOW_ADD, SOM_SHOW.
+
+%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_show_clear
+%
+% PURPOSE
+%
+% Clear hit marks, labels or trajectories created by SOM_SHOW_ADD
+% from the current figure. 
+%
+% SYNTAX
+% 
+%  som_show_clear
+%  som_show_clear([type],[p])
+%
+% DESCRIPTION
+%
+% The function SOM_SHOW_ADD creates some markers on the top of
+% visualizations made by SOM_SHOW. These objects may be removed using
+% SOM_SHOW_CLEAR even if the object handles are not known. The function
+% removes the objects based on certain tags written to the 'Tag' property
+% field of the objects.
+%
+% If the function if called without input arguments it searches for
+% every object in the current figure that have string
+% 'Hit','Lab','Traj' or 'Comet' in their Tag property field and
+% deletes them.
+%
+% If input argument p is not specified, the function does not check that the
+% figure is created by function SOM_SHOW.
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+% type  (string) Which type of markers to delete
+%                'Hit' for removing hit marks    
+%                'Lab'              labels 
+%                'Traj'             line trajectories 
+%                'Comet'            comet trajectories 
+%                'All'              all (the default)
+%                Strings are case insensitive.
+%
+% p     (vector) Subplots from which the markers are removed
+%                Specifies the subplots from which the markers are removed. 
+%                The valid values are 1...N where N is the number of subplots. 
+%                It is required that the figure has been created by 
+%                the SOM_SHOW function.
+%
+% EXAMPLES 
+%          
+%   som_show_clear;
+%      % deletes all labels, hit marks and trajectories in the figure
+%   som_show_clear('hit');
+%      % deletes all the hit marks in the current figure
+%   som_show_clear('lab',[1 2]);
+%      % deletes labels in SOM_SHOW figure subplots 1 and 2. 
+%
+% SEE ALSO
+%
+% som_show       Basic map visualizations: component planes, u-matrix etc.
+% som_show_add   Show hits, labels and trajectories on SOM_SHOW visualization.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 1.0beta Johan 061197 
+% Version 2.0beta Johan 061099 juuso 181199
+
+%%% Check number of arguments
+
+error(nargchk(0,2, nargin))     % check no. of input args is correct
+
+%%% Initialize & check & action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargin == 0 | isempty(type) | strcmp(type,'all') % delete everything 
+                                                    % in the gcf
+  delete(findobj(gcf,'Tag','Hit'));
+  delete(findobj(gcf, 'Tag','Lab'));
+  delete(findobj(gcf, 'Tag','Traj'));
+  delete(findobj(gcf, 'Tag','Comet'));
+  return
+end
+
+if nargin < 2 | isempty(p)            % check handles
+  handle=gcf;                       
+else                                  % check subplot handles if p is given
+  [handle,msg]=vis_som_show_data(p,gcf);
+  if ~isempty(msg)
+    error('2nd argument invalid or figure not made by SOM_SHOW: try SOM_SHOW_CLEAR without arguments.');
+    end
+end
+
+switch lower(type)                    % check type & make proper tag names
+case 'hit'  
+  tag = 'Hit'; 
+case 'lab'
+  tag = 'Lab';
+case 'traj'
+  tag = 'Traj';                     
+case 'comet'
+  tag = 'Comet';
+otherwise                             
+  error('Invalid object tag. Must be {lab | hit | traj | comet}');
+end
+
+%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+for i=1:length(handle),
+  h=findobj(handle(i),'Tag',tag);     % find object handles 
+  delete(h);                          % delete objects
+end				
+
+%%% No output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_show_gui.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,708 @@
+function fig = som_show_gui(input,varargin)
+
+%SOM_SHOW_GUI A GUI for using SOM_SHOW and associated functions.
+%
+%  h = som_show_gui(sM);
+%
+%  Input and output arguments:
+%    sM     (struct) a map struct: the SOM to visualize
+%    h      (scalar) a handle to the GUI figure
+%
+% This is a graphical user interface to make the usage of SOM_SHOW and
+% associated functions somewhat easier for beginning users of the SOM
+% Toolbox.
+%
+% How to use the GUI: 
+%  1. Start the GUI by giving command som_show_gui(sM);
+%  2. Build a list of visualization planes using the buttons 
+%     ('Add components', etc.) on the right 
+%     - the options associated with each of the planes can be 
+%       modified by selecting a plane from the list, and pressing
+%       the 'Plane options' button
+%     - the controls below the list apply to all planes
+%     - the subplot grid size can be controlled using the 'subplots'
+%       field on top right corner, e.g. '4 3' to get 4 times 3 grid
+%  3. To visualize the planes, press the 'Visualize' button on the bottom.
+%  4. To add hits, labels, trajectories (or comets) to the 
+%     visualization, or clear them, or reset the colorbars, 
+%     see the tools available from the 'Tools' menu. 
+%     - the arguments to those tools are either given in the tool, 
+%       or read from the workspace ('Select variable' buttons)
+%     - the tools always apply to the latest figure created
+%       by the GUI
+%  5. To quit, press the 'Close' button on the bottom.
+%
+% Known bugs:
+%  - Especially when using the adding tools, you can easily 
+%    give arguments which do not fit each other, and this 
+%    results in a lengthy (and often cryptic) error message.
+%    In such a case, check the arguments you are giving to see
+%    if there's something wrong with them. See function 
+%    SOM_SHOW_ADD for more information on how the options 
+%    can be set.
+%  - The default values in the adding tools may not be 
+%    very reasonable: you may have to try out different 
+%    values for e.g. markersize before getting the kind of
+%    result you want.
+% 
+% SOM_SHOW_GUI has two subfunctions: VIS_SHOW_GUI_COMP and 
+% VIS_SHOW_GUI_TOOL. These are for internal use of SOM_SHOW_GUI.
+%
+% See also SOM_SHOW, SOM_SHOW_ADD, SOM_SHOW_CLEAR, SOM_RECOLORBAR.
+
+% Copyright (c) 2000 by Roman Feldman and Juha Vesanto
+% Contributed to SOM Toolbox on August 22nd, 2000
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta roman 160800 juuso 220800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                    MAIN                                   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+warning off;
+if (nargin < 1)
+  errordlg({'Make sure you have SOM as input argument'; ''; ...
+            'example: som_show_gui(sMap)'},'Error in SOM_VIS: input arguments');
+  return
+end
+
+if isstruct(input)
+  fig_h = create_main_gui(input);
+  if (nargout > 0) fig = fig_h; end
+  return;
+
+elseif ischar(input)
+  action = lower(input);
+
+  % 
+  udata = get(varargin{1},'UserData');
+  plot_array = udata.plot_array;
+  l = length(plot_array);
+  list1_h = udata.h(1);
+
+  if (strcmp(action,''))
+    errordlg('','Error in SOM_VIS: input arguments');
+    return;
+
+  %%%%%%%%%%%%%%%%%%%%
+  % add_selected_comp
+  %
+  elseif (strcmp(action,'add_selected_comp'))
+    if isempty(plot_array(1).string), tmp = 1; else tmp = l+1; end 
+    [sel,ok] = listdlg('ListString',udata.sM.comp_names,...
+                       'Name','Component selection',...
+                       'PromptString','Select components to add');  
+    if ok & ~isempty(sel), 
+      for i=1:length(sel),
+        plot_array(tmp+i-1).string = udata.sM.comp_names{sel(i)}; 
+        plot_array(tmp+i-1).args = {'comp' sel(i)};
+        udata.property{tmp+i-1} = {0};
+      end      
+      set(list1_h,'Value',tmp+i-1, ...
+                  'String',{plot_array(:).string});
+    end
+
+    udata.plot_array = plot_array;
+    set(varargin{1},'UserData',udata);
+
+  %%%%%%%%%%%%%%%%%%%%
+  % add_all_comps
+  %
+  elseif (strcmp(action,'add_all_comps'))
+    if (strcmp(plot_array(1).string,''))
+      tmp = 1;
+    else
+      tmp = l+1;
+    end
+    indx = length(udata.sM.comp_names);
+    for (i=1:indx)
+      plot_array(tmp+i-1).string = udata.sM.comp_names{i};
+      plot_array(tmp+i-1).args = {'comp' i};
+      udata.property{tmp+i-1} = {0};
+    end	
+    % update list
+    set(list1_h,'Value',tmp+indx-1, ...
+                'String',{plot_array(:).string});
+
+    udata.plot_array = plot_array;
+    set(varargin{1},'UserData',udata);
+
+  %%%%%%%%%%%%%%%%%%%%
+  % add_u_matrix
+  %
+  elseif (strcmp(action,'add_u_matrix'))
+    if (strcmp(plot_array(1).string,''))
+      tmp = 1;
+    else
+      tmp = l+1;
+    end
+    plot_array(tmp).string = 'U-matrix';
+    plot_array(tmp).args = {'umat' 'all'};
+    udata.property{tmp} = {0 'U-matrix' 1:length(udata.sM.comp_names)};
+    % update list
+    set(list1_h,'Value',tmp, ...
+                'String',{plot_array(:).string});
+
+    udata.plot_array = plot_array;
+    set(varargin{1},'UserData',udata);
+
+  %%%%%%%%%%%%%%%%%%%%
+  % add_colorplane
+  %
+  elseif (strcmp(action,'add_colorplane'))
+    if (strcmp(plot_array(1).string,''))
+      tmp = 1;
+    else
+      tmp = l+1;
+    end
+    plot_array(tmp).string = 'color plane';
+    c = som_colorcode(udata.sM);
+    plot_array(tmp).args = {'color' c};
+    udata.property{tmp} = {0 'Color code' {'rgb1' 'rgb2' 'rgb3' 'rgb4' 'hsv' '-variable-'} 1};
+    % update list
+    set(list1_h,'Value',tmp, ...
+                'String',{plot_array(:).string});
+
+    udata.plot_array = plot_array;
+    set(varargin{1},'UserData',udata);
+
+  %%%%%%%%%%%%%%%%%%%%
+  % add_empty
+  %
+  elseif (strcmp(action,'add_empty'))
+    if (strcmp(plot_array(1).string,''))
+      tmp = 1;
+    else
+      tmp = l+1;
+    end
+    plot_array(tmp).string = 'empty plane';
+    plot_array(tmp).args = {'empty' ''};
+    udata.property{tmp} = {''};
+    % update list
+    set(list1_h,'Value',tmp, ...
+                'String',{plot_array(:).string});
+
+    udata.plot_array = plot_array;
+    set(varargin{1},'UserData',udata);
+
+  %%%%%%%%%%%%%%%%%%%%
+  % remove
+  %
+  elseif (strcmp(action,'remove'))
+    rm_indx = get(list1_h,'Value');
+    rm_l = length(rm_indx);
+    % rebuild array
+    incl_inds = setdiff(1:length(plot_array),rm_indx);
+    if isempty(incl_inds), 
+      clear plot_array;
+      plot_array(1).args = {};
+      plot_array(1).string = '';
+      udata.property = {};
+      udata.property{1} = {};
+    else
+      plot_array = plot_array(incl_inds);
+      udata.property = udata.property(incl_inds);
+    end
+    set(list1_h,'Value',length(plot_array), ...
+                'String',{plot_array(:).string});
+
+    udata.plot_array = plot_array;
+    set(varargin{1},'UserData',udata);
+
+  %%%%%%%%%%%%%%%%%%%%
+  % remove_all
+  %
+  elseif (strcmp(action,'remove_all'))
+    plot_array = [];
+    plot_array(1).args = {};
+    plot_array(1).string = '';
+    udata.property = {};
+    set(list1_h,'Value',1, ...
+                'String',{plot_array(:).string});
+
+    udata.plot_array = plot_array;
+    set(varargin{1},'UserData',udata);
+
+  %%%%%%%%%%%%%%%%%%%%
+  % more_options
+  %
+  elseif (strcmp(action,'more_options'))
+    vis_show_gui_comp(varargin{1},get(list1_h,'Value'),'init');
+
+  %%%%%%%%%%%%%%%%%%%%
+  % close
+  %
+  elseif (strcmp(action,'close'))
+    close(varargin{1});
+
+  %%%%%%%%%%%%%%%%%%%%
+  % visualize
+  %
+  elseif (strcmp(action,'visualize'))     %% s = {k k.^2}; plot(s{:});
+    current_fig = varargin{1}; 
+    figure;
+    args = [{udata.sM} plot_array(:).args];
+    % edge
+    tmp = get(udata.h(2),'UserData');
+    i = get(udata.h(2),'Value');
+    args = [args {'edge' tmp{i}}];
+    % bar
+    tmp = get(udata.h(3),'UserData');
+    i = get(udata.h(3),'Value');
+    args = [args {'bar' tmp{i}}];
+    % norm
+    tmp = get(udata.h(4),'UserData');
+    i = get(udata.h(4),'Value');
+    args = [args {'norm' tmp{i}}];
+    % size
+    tmp = get(udata.h(5),'String');
+    args = [args {'size' eval(tmp)}];
+    % colormap
+    tmp = get(udata.h(6),'String');
+    if ~isempty(tmp)
+      args = [args {'colormap' eval(tmp)}];
+    end
+    % footnote
+    tmp = get(udata.h(7),'String');
+    args = [args {'footnote' tmp}];
+    % subplots
+    tmp = get(udata.h(8),'String');
+    if ~(strcmp(tmp,'default') | isempty(tmp))
+      tmp2 = sscanf(tmp,'%i %i');
+      if length(tmp2)<2, tmp2 = sscanf(tmp,'%ix%i'); end
+      if length(tmp2)<2, tmp = eval(tmp);
+      else tmp = tmp2';
+      end
+      if length(tmp)<2, tmp(2) = 1; end
+      if tmp(1)*tmp(2)<length(get(udata.h(1),'string')),
+        close(varargin{1});
+        errordlg('Too small subplot size', ...
+                 'Error in SOM_VIS: subplot size');
+        return;
+      end
+      args = [args {'subplots' tmp}];
+    end
+
+    som_show(args{:});
+
+    % udata.vis_h = varargin{1};
+    %  first refresh plot info
+    udata.vis_h = setdiff( ...
+                    udata.vis_h, ...
+                    setdiff(udata.vis_h,get(0,'children')));
+    udata.vis_h = [udata.vis_h gcf];
+    set(current_fig,'UserData',udata);
+
+  else
+    ;
+  end
+
+else
+  errordlg({'Make sure you have SOM as input argument'; ''; ...
+            'example: som_show_gui(sMap)'},'Error in SOM_VIS: input arguments');
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ----------------------        SUBFUNCTIONS       -----------------------  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                              CREATE_MAIN_GUI                              %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function fig_h = create_main_gui(sM)
+
+oldFigNumber=watchon;
+
+% init variables
+FIGURENAME = 'SOM_SHOW_GUI';
+plot_array = [];
+plot_array(1).args = {};
+plot_array(1).string = '';
+
+% colors
+fig_color = [0.8 0.8 0.8];
+bg_color1 = [0.701960784313725 0.701960784313725 0.701960784313725];
+bg_color2 = [0.9 0.9 0.9];
+
+%%%%  positions  %%%%%
+%---------  figure
+fig_i =            [0.02 0.25];
+fig_s =            [0.24 0.55];
+%---------  
+ue = 0.02;
+th = 0.03;
+hint_text_pos =                [0.05 0.94 0.8 th];
+big_frame_pos =                [ue 0.38 (1-2*ue) 0.56];
+planes_listbox_text_pos =      [0.07 0.87 0.3 th];
+planes_listbox_pos =           [(ue+0.03) 0.395 0.46 0.47];
+subplots_text_pos =            [0.53 0.885 0.2 th];
+subplots_pos =                 [0.73 0.88 0.22 0.05];  ah = 0.045; d = (planes_listbox_pos(4) - 10*ah)/7;
+add_components_pos =           [0.53 (sum(planes_listbox_pos([2 4]))-ah) 0.42 ah]; tmp = add_components_pos(2)-(d+ah);
+add_all_components_pos =       [0.53 tmp 0.42 ah]; tmp = add_all_components_pos(2)-(d+ah);
+add_u_matrix_pos =             [0.53 tmp 0.42 ah]; tmp = add_u_matrix_pos(2)-(d+ah);
+add_colorplane_pos =           [0.53 tmp 0.42 ah]; tmp = add_colorplane_pos(2)-(d+ah);
+add_empty_pos =                [0.53 tmp 0.42 ah]; tmp = add_empty_pos(2)-2*(d+ah)+d;
+remove_pos =                   [0.53 tmp 0.42 ah]; tmp = remove_pos(2)-(d+ah);
+remove_all_pos =               [0.53 tmp 0.42 ah]; tmp = remove_all_pos(2)-2*(d+ah)+d;
+plane_options_pos =            [0.53 tmp 0.42 ah]; 
+ph = 0.041;
+dd = (ph-th)/2;
+tmp = big_frame_pos(2) - (planes_listbox_pos(2)-big_frame_pos(2)) - ph;
+ie1 = 0.25;
+tw = 0.21;
+iw = 0.28;
+unit_edges_text_pos =          [ue (tmp+dd) tw th];
+unit_edges_pos =               [ie1 tmp iw ph]; tmp = unit_edges_pos(2)-(d+ph) - d;
+unit_sizes_text_pos =          [ue (tmp+dd) tw th];
+unit_sizes_pos =               [ie1 tmp iw ph]; tmp = unit_sizes_pos(2)-(d+ph) - d;
+colorbar_dir_text_pos =        [ue (tmp+dd) tw th];
+colorbar_dir_pos =             [ie1 tmp iw ph]; tmp2 = sum(colorbar_dir_pos([1 3]));
+colorbar_norm_text_pos =       [(tmp2) (tmp+dd) 0.11 th];
+colorbar_norm_pos =            [(1-ue-(iw+0.06)) tmp (iw+0.06) ph]; tmp = colorbar_norm_pos(2)-(d+ph) - d;
+colormap_text_pos =            [ue (tmp+dd) tw th];
+colormap_pos =                 [ie1 tmp iw ph]; tmp = colormap_pos(2)-(d+ph) - d;
+footnote_text_pos =            [ue (tmp+dd) tw th]; 
+footnote_pos =                 [ie1 tmp (1-ue-ie1) ph];
+tmp = planes_listbox_pos(2)-big_frame_pos(2);
+tmp2 = ah+2*tmp;
+little_frame_pos =             [ue tmp (1-2*ue) tmp2]; tmp2 = little_frame_pos(2)+tmp;
+ddd = 0.1;
+bw = (little_frame_pos(3)-2*0.03-ddd)/2;
+visualize_pos =                [(ue+0.03) tmp2 bw ah];
+close_pos =                    [(sum(visualize_pos([1 3]))+ddd) tmp2 bw ah];
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  main figure
+%
+fig_h = figure( ...
+  'Units','normalized', ...
+  'Color',fig_color, ...
+  'PaperPosition',[18 180 576 432], ...
+  'PaperType','A4', ...
+  'PaperUnits','normalized', ...
+  'Position',[fig_i fig_s], ...
+  'ToolBar','none', ...
+  'NumberTitle','off', ...
+  'Name',FIGURENAME, ...
+  'Visible','off');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  hint text
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',fig_color, ...
+  'HorizontalAlignment','left', ...
+  'Position',hint_text_pos, ...
+  'String','Add planes and then visualize', ...
+  'Style','text');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  planes listbox
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'Position',big_frame_pos, ...
+  'Style','frame');
+
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',bg_color1, ...
+  'HorizontalAlignment','left', ...
+  'Position',planes_listbox_text_pos, ...
+  'String','Planes', ...
+  'Style','text');
+
+list1_h = uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',bg_color2, ...
+  'Position',planes_listbox_pos, ...
+  'String',{plot_array(:).string}, ...
+  'Style','listbox', ...
+  'Max',2, ...
+  'Value',1);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% edit subplots
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',bg_color1, ...
+  'HorizontalAlignment','center', ...
+  'Position',subplots_text_pos, ...
+  'String','subplots', ...
+  'Style','text');
+
+edit4_h = uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',bg_color2, ...
+  'Position',subplots_pos, ...
+  'FontSize',14, ...
+  'String','', ...
+  'Style','edit');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  pushbutton 'Add components'
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',bg_color1, ...
+  'HorizontalAlignment','left', ...
+  'Position',add_components_pos, ...
+  'String',' Add components', ...
+  'Callback',['som_show_gui(''add_selected_comp'',' mat2str(gcf) ')']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  pushbutton 'Add all components'
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'HorizontalAlignment','left', ...
+  'Position',add_all_components_pos, ...
+  'String',' Add all components', ...
+  'Callback',['som_show_gui(''add_all_comps'',' mat2str(gcf) ')']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  pushbutton 'Add U-matrix'
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'HorizontalAlignment','left', ...
+  'Position',add_u_matrix_pos, ...
+  'String',' Add U-matrix', ...
+  'Callback',['som_show_gui(''add_u_matrix'',' mat2str(gcf) ')']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  pushbutton 'Add colorplane'
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'HorizontalAlignment','left', ...
+  'Position',add_colorplane_pos, ...
+  'String',' Add colorplane', ...
+  'Callback',['som_show_gui(''add_colorplane'',' mat2str(gcf) ')']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  pushbutton 'Add empty'
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'HorizontalAlignment','left', ...
+  'Position',add_empty_pos, ...
+  'String',' Add empty', ...
+  'Callback',['som_show_gui(''add_empty'',' mat2str(gcf) ')']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  pushbutton 'Remove'
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'HorizontalAlignment','left', ...
+  'Position',remove_pos, ...
+  'String',' Remove', ...
+  'Callback',['som_show_gui(''remove'',' mat2str(gcf) ')']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% creat pushbutton 'Remove all'
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',bg_color1, ...
+  'HorizontalAlignment','left', ...
+  'Position',remove_all_pos, ...
+  'String',' Remove all', ...
+  'Callback',['som_show_gui(''remove_all'',' mat2str(gcf) ')']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  pushbutton 'Plane options'
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'Position',plane_options_pos, ...
+  'String',' Plane options', ...
+  'Callback',['som_show_gui(''more_options'',' mat2str(gcf) ')']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  popupmenu unitedges
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',fig_color, ...
+  'HorizontalAlignment','left', ...
+  'Position',unit_edges_text_pos, ...
+  'String','unit edges are', ...
+  'Style','text');
+
+popup1_h = uicontrol( ...
+  'Units','normalized', ...
+  'Max',2, ...
+  'Min',1, ...
+  'Position',unit_edges_pos, ...
+  'UserData',{'off' 'on'}, ...
+  'String',{'off' 'on'}, ...
+  'Style','popupmenu', ...
+  'Value',1);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  unit sizes edit
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',fig_color, ...
+  'HorizontalAlignment','left', ...
+  'Position',unit_sizes_text_pos, ...
+  'String','unit sizes', ...
+  'Style','text');
+
+edit1_h = uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',bg_color2, ...
+  'Position',unit_sizes_pos, ...
+  'FontSize',12, ...
+  'String','1', ...
+  'Style','edit');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  popupmenu colorbardir
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',fig_color, ...
+  'HorizontalAlignment','left', ...
+  'Position',colorbar_dir_text_pos, ...
+  'String','colorbar is', ...
+  'Style','text');
+
+popup2_h = uicontrol( ...
+  'Units','normalized', ...
+  'Max',3, ...
+  'Min',1, ...
+  'Position',colorbar_dir_pos, ...
+  'UserData', {'vert' 'horiz' 'none'}, ...
+  'String','vert| horiz| none', ...
+  'Style','popupmenu', ...
+  'Value',1);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  popupmenu colorbarnorm
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',fig_color, ...
+  'HorizontalAlignment','left', ...
+  'Position',colorbar_norm_text_pos, ...
+  'String',' and  ', ...
+  'Style','text');
+
+popup3_h = uicontrol( ...
+  'Units','normalized', ...
+  'Max',2, ...
+  'Min',1, ...
+  'Position',colorbar_norm_pos, ...
+  'UserData', {'d' 'n'}, ...
+  'String',{'denormalized','normalized'}, ...
+  'Style','popupmenu', ...
+  'Value',1);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  colormap edittext
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',fig_color, ...
+  'HorizontalAlignment','left', ...
+  'Position',colormap_text_pos, ...
+  'String','colormap', ...
+  'Style','text');
+
+edit2_h = uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',bg_color2, ...
+  'Position',colormap_pos, ...
+  'FontSize',12, ...
+  'String','', ...
+  'Style','edit');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  footnote edittext
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',fig_color, ...
+  'HorizontalAlignment','left', ...
+  'Position',footnote_text_pos, ...
+  'String','footnote', ...
+  'Style','text');
+
+edit3_h = uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',bg_color2, ...
+  'Position',footnote_pos, ...
+  'FontSize',12, ...
+  'String',sM.name, ...
+  'Style','edit');
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  pushbutton 'Visualize'
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'Position',little_frame_pos, ...
+  'Style','frame');
+
+uicontrol( ...
+  'Units','normalized', ...
+  'Position',visualize_pos, ...
+  'String','Visualize', ...
+  'Callback',['som_show_gui(''visualize'',' mat2str(gcf) ')']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  pushbutton 'Close'
+%
+uicontrol( ...
+  'Units','normalized', ...
+  'BackgroundColor',bg_color1, ...
+  'Position',close_pos, ...
+  'String','Close', ...
+  'Callback',['som_show_gui(''close'',' mat2str(gcf) ')']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% menus
+%
+uimenu('Parent',fig_h','Label','    ','Enable','off');
+m = uimenu('Parent',fig_h,'Label','Tools');
+ a = uimenu('Parent',m,'Label','Add');
+  s = strcat('vis_show_gui_tool(',mat2str(gcf),',''add_label'')');
+  uimenu('Parent',a,'Label','label','Callback',s);
+  s = strcat('vis_show_gui_tool(',mat2str(gcf),',''add_hit'')');
+  uimenu('Parent',a,'Label','hit','Callback',s);
+  s = strcat('vis_show_gui_tool(',mat2str(gcf),',''add_traj'')');
+  uimenu('Parent',a,'Label','traj','Callback',s);
+  s = strcat('vis_show_gui_tool(',mat2str(gcf),',''add_comet'')');
+  uimenu('Parent',a,'Label','comet','Callback',s);
+ s = ['vis_show_gui_tool(',mat2str(gcf),',''clear'')'];
+ c = uimenu('Parent',m,'Label','Clear','Separator','on','callback',s);
+ s = strcat('vis_show_gui_tool(',mat2str(gcf),',''recolorbar'')');
+ r = uimenu('Parent',m,'Label','Recolorbar','Separator','on', ...
+  'Callback',s);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% end
+%
+
+ud.sM = sM;
+ud.plot_array = plot_array;
+ud.property = {};
+ud.vis_h = [];
+ud.h = [list1_h popup1_h popup2_h popup3_h ...
+        edit1_h edit2_h edit3_h edit4_h];
+
+watchoff(oldFigNumber);
+set(fig_h,'Visible','on', ...
+          'UserData', ud, ...
+          'handlevisibility','off');
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_sompaktrain.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,443 @@
+function [sMap, sTrain] = som_sompaktrain(sMap, D, varargin)
+
+%SOM_SOMPAKTRAIN  Use SOM_PAK to train the Self-Organizing Map.
+%
+% [sM,sT] = som_sompaktrain(sM, D, [[argID,] value, ...])
+% 
+%  sM     = som_sompaktrain(sM,D);
+%  sM     = som_sompaktrain(sM,sD,'alpha_type','inv');
+%  [M,sT] = som_sompaktrain(M,D,'bubble','trainlen',10,'inv','hexa');
+%
+%  Input and output arguments ([]'s are optional): 
+%   sM      (struct) map struct, the trained and updated map is returned
+%           (matrix) codebook matrix of a self-organizing map
+%                    size munits x dim or  msize(1) x ... x msize(k) x dim
+%                    The trained map codebook is returned.
+%   D       (struct) training data; data struct
+%           (matrix) training data, size dlen x dim
+%           (string) name of data file
+%   [argID, (string) See below. The values which are unambiguous can 
+%    value] (varies) be given without the preceeding argID.
+%
+%   sT      (struct) learning parameters used during the training
+%
+% Here are the valid argument IDs and corresponding values. The values which
+% are unambiguous (marked with '*') can be given without the preceeding argID.
+%   'msize'        (vector) map size
+%   'radius_ini'   (scalar) neighborhood radius
+%   'radius' = 'radius_ini'
+%   'alpha_ini'    (scalar) initial learning rate
+%   'alpha' = 'alpha_ini'
+%   'trainlen'     (scalar) training length
+%   'seed'         (scalar) seed for random number generator
+%   'snapfile'     (string) base name for snapshot files
+%   'snapinterval' (scalar) snapshot interval
+%   'tlen_type'   *(string) is the given trainlen 'samples' or 'epochs'
+%   'train'       *(struct) train struct, parameters for training
+%   'sTrain','som_train' = 'train'
+%   'alpha_type'  *(string) learning rate function, 'inv' or 'linear'
+%   'neigh'       *(string) neighborhood function, 'gaussian' or 'bubble'
+%   'topol'       *(struct) topology struct
+%   'som_topol','sTopol' = 'topol'
+%   'lattice'     *(string) map lattice, 'hexa' or 'rect'
+%
+% For more help, try 'type som_sompaktrain' or check out online documentation.
+% See also  SOM_MAKE, SOM_SEQTRAIN, SOM_BATCHTRAIN, SOM_TRAIN_STRUCT.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_sompaktrain
+%
+% PURPOSE
+%
+% Use SOM_PAK to train the Self-Organizing Map.
+%
+% SYNTAX
+%
+%  sM = som_sompaktrain(sM,D);
+%  sM = som_sompaktrain(sM,sD);
+%  sM = som_sompaktrain(...,'argID',value,...);
+%  sM = som_sompaktrain(...,value,...);
+%  [sM,sT] = som_sompaktrain(M,D,...);
+%
+% DESCRIPTION
+%
+% Trains the given SOM (sM or M above) with the given training data (sD or
+% D) using SOM_PAK. If no optional arguments (argID, value) are
+% given, a default training is done, the parameters are obtained from
+% SOM_TRAIN_STRUCT function.  Using optional arguments the training
+% parameters can be specified. Returns the trained and updated SOM and a
+% train struct which contains information on the training.
+%
+% Notice that the SOM_PAK program 'vsom' must be in the search path of your
+% shell. Alternatively, you can set a variable 'SOM_PAKDIR' in the Matlab
+% workspace to tell the som_sompaktrain where to find the 'vsom' program.
+%
+% Notice also that many of the training parameters are much more limited in
+% values than when using SOM Toolbox function for training:
+%   - the map shape is always 'sheet'
+%   - only initial value for neighborhood radius can be given
+%   - neighborhood function can only be 'bubble' or 'gaussian'
+%   - only initial value for learning rate can be given
+%   - learning rate can only be 'linear' or 'inv'
+%   - mask cannot be used: all variables are always used in BMU search
+% Any parameters not confirming to these restrictions will be converted
+% so that they do before training. On the other hand, there are some 
+% additional options that are not present in the SOM Toolbox: 
+%   - random seed
+%   - snapshot file and interval
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  sM          The map to be trained. 
+%     (struct) map struct
+%     (matrix) codebook matrix (field .data of map struct)
+%              Size is either [munits dim], in which case the map grid 
+%              dimensions (msize) should be specified with optional arguments,
+%              or [msize(1) ... msize(k) dim] in which case the map 
+%              grid dimensions are taken from the size of the matrix. 
+%              Lattice, by default, is 'rect' and shape 'sheet'.
+%  D           Training data.
+%     (struct) data struct
+%     (matrix) data matrix, size [dlen dim]
+%     (string) name of data file
+%  
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments can be given as 'argID',value -pairs. If an
+%  argument is given value multiple times, the last one is
+%  used. The valid IDs and corresponding values are listed below. The values 
+%  which are unambiguous (marked with '*') can be given without the 
+%  preceeding argID.
+%
+%   'msize'        (vector) map grid dimensions. Default is the one
+%                           in sM (field sM.topol.msize) or 
+%                           'si = size(sM); msize = si(1:end-1);' 
+%                           if only a codebook matrix was given. 
+%   'radius_ini'   (scalar) initial neighborhood radius 
+%   'radius'       (scalar) = 'radius_ini'
+%   'alpha_ini'    (vector) initial learning rate
+%   'alpha'        (scalar) = 'alpha_ini'
+%   'trainlen'     (scalar) training length (see also 'tlen_type')
+%   'seed'         (scalar) seed for random number generator
+%   'snapfile'     (string) base name for snapshot files
+%   'snapinterval' (scalar) snapshot interval
+%   'tlen_type'   *(string) is the trainlen argument given in 'epochs' or
+%                           in 'samples'. Default is 'epochs'.
+%   'train'       *(struct) train struct, parameters for training. 
+%                           Default parameters, unless specified, 
+%                           are acquired using SOM_TRAIN_STRUCT (this 
+%                           also applies for 'trainlen', 'alpha_type',
+%                           'alpha_ini', 'radius_ini' and 'radius_fin').
+%   'sTrain', 'som_topol' (struct) = 'train'
+%   'neigh'       *(string) The used neighborhood function. Default is 
+%                           the one in sM (field '.neigh') or 'gaussian'
+%                           if only a codebook matrix was given. The other 
+%                           possible value is 'bubble'.
+%   'topol'       *(struct) topology of the map. Default is the one
+%                           in sM (field '.topol').
+%   'sTopol', 'som_topol' (struct) = 'topol'
+%   'alpha_type'  *(string) learning rate function, 'inv' or 'linear'
+%   'lattice'     *(string) map lattice. Default is the one in sM
+%                           (field sM.topol.lattice) or 'rect' 
+%                           if only a codebook matrix was given. 
+%   
+% OUTPUT ARGUMENTS
+% 
+%  sM          the trained map
+%     (struct) if a map struct was given as input argument, a 
+%              map struct is also returned. The current training 
+%              is added to the training history (sM.trainhist).
+%              The 'neigh' and 'mask' fields of the map struct
+%              are updated to match those of the training.
+%     (matrix) if a matrix was given as input argument, a matrix
+%              is also returned with the same size as the input 
+%              argument.
+%  sT (struct) train struct; information of the accomplished training
+%  
+% EXAMPLES
+%
+% Simplest case:
+%  sM = som_sompaktrain(sM,D);  
+%  sM = som_sompaktrain(sM,sD);  
+%
+% The change training parameters, the optional arguments 'train', 
+% 'neigh','mask','trainlen','radius','radius_ini', 'alpha', 
+% 'alpha_type' and 'alpha_ini' are used. 
+%  sM = som_sompaktrain(sM,D,'bubble','trainlen',10,'radius_ini',3);
+%
+% Another way to specify training parameters is to create a train struct:
+%  sTrain = som_train_struct(sM,'dlen',size(D,1),'algorithm','seq');
+%  sTrain = som_set(sTrain,'neigh','gaussian');
+%  sM = som_sompaktrain(sM,D,sTrain);
+%
+% You don't necessarily have to use the map struct, but you can operate
+% directly with codebook matrices. However, in this case you have to
+% specify the topology of the map in the optional arguments. The
+% following commads are identical (M is originally a 200 x dim sized matrix):
+%  M = som_sompaktrain(M,D,'msize',[20 10],'lattice','hexa');
+%
+%  M = som_sompaktrain(M,D,'msize',[20 10],'hexa');
+%
+%  sT= som_set('som_topol','msize',[20 10],'lattice','hexa');
+%  M = som_sompaktrain(M,D,sT);
+%
+%  M = reshape(M,[20 10 dim]);
+%  M = som_sompaktrain(M,D,'hexa');
+%
+% The som_sompaktrain also returns a train struct with information on the 
+% accomplished training. This is the same one as is added to the end of the 
+% trainhist field of map struct, in case a map struct is given.
+%  [M,sTrain] = som_sompaktrain(M,D,'msize',[20 10]);
+%
+%  [sM,sTrain] = som_sompaktrain(sM,D); % sM.trainhist(end)==sTrain
+%
+% SEE ALSO
+% 
+%  som_make         Initialize and train a SOM using default parameters.
+%  som_seqtrain     Train SOM with sequential algorithm.
+%  som_batchtrain   Train SOM with batch algorithm.
+%  som_train_struct Determine default training parameters.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 151199
+ 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check arguments
+
+error(nargchk(2, Inf, nargin));  % check the number of input arguments
+
+% map 
+struct_mode = isstruct(sMap);
+if struct_mode, 
+  sTopol = sMap.topol;
+else  
+  orig_size = size(sMap);
+  if ndims(sMap) > 2, 
+    si = size(sMap); dim = si(end); msize = si(1:end-1);
+    M = reshape(sMap,[prod(msize) dim]);
+  else
+    msize = [orig_size(1) 1]; 
+    dim = orig_size(2);
+  end
+  sMap   = som_map_struct(dim,'msize',msize);
+  sTopol = sMap.topol;
+end
+[munits dim] = size(sMap.codebook);
+
+% data
+givendatafile = '';
+if ischar(D), 
+  data_name = D; 
+  givendatafile = D;
+  D = [];
+  dlen = NaN;
+else
+  if isstruct(D), 
+    data_name = D.name; 
+    D = D.data;   
+  else
+    data_name = inputname(2); 
+  end
+  D = D(find(sum(isnan(D),2) < dim),:); % remove empty vectors from the data
+  [dlen ddim] = size(D);                % check input dimension
+  if ddim ~= dim, error('Map and data dimensions must agree.'); end
+end
+
+% varargin
+sTrain = som_set('som_train','algorithm','seq',...
+			     'neigh',sMap.neigh,...
+			     'mask',ones(dim,1),...
+			     'data_name',data_name);
+tlen_type  = 'epochs';
+random_seed = 0; 
+snapshotname = ''; 
+snapshotinterval = 0;
+
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     % argument IDs
+     case 'msize',       i=i+1; sTopol.msize = varargin{i}; 
+     case 'lattice',     i=i+1; sTopol.lattice = varargin{i};
+     case 'neigh',       i=i+1; sTrain.neigh = varargin{i};
+     case 'trainlen',    i=i+1; sTrain.trainlen = varargin{i};
+     case 'tlen_type',   i=i+1; tlen_type = varargin{i}; 
+     case 'radius_ini',  i=i+1; sTrain.radius_ini = varargin{i};
+     case 'radius',      i=i+1; sTrain.radius_ini = varargin{i}(1);
+     case 'alpha_type',  i=i+1; sTrain.alpha_type = varargin{i};
+     case 'alpha_ini',   i=i+1; sTrain.alpha_ini = varargin{i};
+     case 'alpha',       i=i+1; sTrain.alpha_ini = varargin{i}(1);
+     case 'seed',        i=i+1; random_seed = varargin{i};
+     case 'snapshotname',i=i+1; snapshotname = varargin{i};
+     case 'snapshotinterval',i=i+1; snapshotinterval = varargin{i};
+     case {'sTrain','train','som_train'}, i=i+1; sTrain = varargin{i};
+     case {'topol','sTopol','som_topol'}, 
+      i=i+1; 
+      sTopol = varargin{i};
+      if prod(sTopol.msize) ~= munits, 
+        error('Given map grid size does not match the codebook size.');
+      end
+      % unambiguous values
+     case {'inv','linear'}, sTrain.alpha_type = varargin{i}; 
+     case {'hexa','rect'}, sTopol.lattice = varargin{i};
+     case {'gaussian','bubble'}, sTrain.neigh = varargin{i};
+     case {'epochs','samples'}, tlen_type = varargin{i};
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}(1).type, 
+     case 'som_topol', 
+      sTopol = varargin{i}; 
+      if prod(sTopol.msize) ~= munits, 
+        error('Given map grid size does not match the codebook size.');
+      end
+     case 'som_train', sTrain = varargin{i};
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_sompaktrain) Ignoring invalid argument #' num2str(i+2)]); 
+  end
+  i = i+1; 
+end
+
+% check topology
+if struct_mode, 
+  if ~strcmp(sTopol.lattice,sMap.topol.lattice) | ...
+	~strcmp(sTopol.shape,sMap.topol.shape) | ...
+	any(sTopol.msize ~= sMap.topol.msize), 
+    warning('Changing the original map topology.');
+  end
+end
+sMap.topol = sTopol; 
+
+% complement the training struct
+if ~isnan(dlen), 
+  sTrain = som_train_struct(sTrain,sMap,'dlen',dlen);
+else
+  sTrain = som_train_struct(sTrain,sMap); 
+end
+if isempty(sTrain.mask), sTrain.mask = ones(dim,1); end
+
+% training length
+if strcmp(tlen_type,'epochs'), 
+  if isnan(dlen),   
+    error('Training length given as epochs, but data length is not known.\n');
+  else
+    rlen = sTrain.trainlen*dlen;
+  end
+else
+  rlen = sTrain.trainlen;
+  sTrain.trainlen = sTrain.trainlen/dlen;   
+end 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+% mask
+if any(sTrain.mask~=1), 
+  sTrain.mask = ones(dim,1); 
+  fprintf(1,'Ignoring given mask.\n');
+end
+
+% learning rate
+if strcmp(sTrain.alpha_type,'power'), 
+  sTrain.alpha_type = 'inv';
+  fprintf(1,'Using ''inv'' learning rate type instead of ''power''\n');
+end
+  
+% neighborhood
+if any(strcmp(sTrain.neigh,{'cutgauss','ep'})), 
+  fprintf(1,'Using ''gaussian'' neighborhood function instead of %s.\n',sTrain.neigh);
+  sTrain.neigh = 'gaussian'; 
+end
+
+% map shape
+if ~strcmp(sMap.topol.shape,'sheet'), 
+  fprintf(1,'Using ''sheet'' map shape of %s.\n',sMap.topol.shape);
+  sMap.topol.shape = 'sheet'; 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Action
+
+% write files
+if ~isempty(givendatafile), 
+  temp_din = givendatafile; 
+else 
+  temp_din = tempname; 
+  som_write_data(D, temp_din, 'x')
+end
+temp_cin  = tempname;
+som_write_cod(sMap, temp_cin)
+temp_cout = tempname;
+
+% check if the environment variable 'SOM_PAKDIR' has been defined
+if any(strcmp('SOM_PAKDIR', evalin('base', 'who')))
+  som_pak_dir = evalin('base', 'SOM_PAKDIR');
+else
+  som_pak_dir = '';
+end
+if ~isempty(som_pak_dir) & ~strncmp(som_pak_dir(end), '/', 1)
+  som_pak_dir(end + 1) = '/';
+end
+
+aini  = sTrain.alpha_ini; 
+atype = sTrain.alpha_type;
+if strcmp(atype,'inv'), atype = 'inverse_t'; end
+rad   = sTrain.radius_ini;
+str = [som_pak_dir 'vsom ' ...
+       sprintf('-cin %s -din %s -cout %s', temp_cin, temp_din, temp_cout) ...
+       sprintf(' -rlen %d -alpha %g -alpha_type %s', rlen, aini, atype) ...
+       sprintf(' -radius %g -rand %g ',rad,random_seed)];
+if ~isempty(snapshotname) & snapinterval>0, 
+  str = [str, sprintf(' -snapfile %s -snapinterval %d',snapshotname,snapshotinterval)];
+end
+
+fprintf(1,'Execute: %s\n',str);
+if isunix, 
+  [status,w] = unix(str); 
+  if status, fprintf(1,'Execution failed.\n'); end
+  if ~isempty(w), fprintf(1,'%s\n',w); end
+else 
+  [status,w] = dos(str); 
+  if status, fprintf(1,'Execution failed.\n'); end
+  if ~isempty(w), fprintf(1,'%s\n',w); end
+end
+
+sMap_temp = som_read_cod(temp_cout);
+M = sMap_temp.codebook;
+
+if isunix
+  unix(['/bin/rm -f ' temp_din ' ' temp_cin ' ' temp_cout]);
+else
+  dos(['del ' temp_din ' ' temp_cin ' ' temp_cout]);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Build / clean up the return arguments
+
+% update structures
+sTrain = som_set(sTrain,'time',datestr(now,0));
+if struct_mode, 
+  sMap = som_set(sMap,'codebook',M,'mask',sTrain.mask,'neigh',sTrain.neigh);
+  tl = length(sMap.trainhist);
+  sMap.trainhist(tl+1) = sTrain;
+else
+  sMap = reshape(M,orig_size);
+end
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_stats.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,257 @@
+function csS = som_stats(D,varargin)
+
+%SOM_STATS Calculate descriptive statistics for the data.
+%  
+% csS = som_stats(D,[sort]); 
+% 
+%  csS = som_stats(D); 
+%  csS = som_stats(D,'nosort'); 
+%  som_table_print(som_stats_table(csS))
+%
+%  Input and output arguments ([]'s are optional): 
+%   D           (matrix) a matrix, size dlen x dim
+%               (struct) data or map struct
+%   [sort]      (string) 'sort' (default) or 'nosort'
+%                        If 'nosort' is specified, the data is not 
+%                        sorted, and therefore the values of
+%                        nunique, uvalues, ucount, fvalues, fcount, and tiles fields 
+%                        are not calculated. This may be useful if
+%                        there is a very large amount of data, and
+%                        one wants to reduce calculation time.
+%
+%   csS         (cell array) size dim x 1, of statistics structs with 
+%                        the following fields
+%      .type             (string) 'som_stat'
+%      .name             (string) name of the variable
+%      .normalization    (struct array) variable normalization (see SOM_NORMALIZE)
+%      .ntotal           (scalar) total number of values
+%      .nvalid           (scalar) number of valid values (not Inf or NaN)
+%      .min              (scalar) minimum value 
+%      .max              (scalar) maximum value 
+%      .mean             (scalar) mean value (not Inf or NaN)
+%      .std              (scalar) standard deviation (not Inf or NaN)
+%      .nunique          (scalar) number of unique values
+%      .mfvalue          (vector) most frequent value
+%      .mfcount          (vector) number of occurances of most frequent value
+%      .values           (vector) at most MAXDISCRETE (see below) sample values 
+%      .counts           (vector) number of occurances for each sampled value
+%      .tiles            (vector) NT-tile values, for example
+%                                    NT=4   for quartiles: 25%, 50% and 75%
+%                                    NT=100 for percentiles: 1%, 2%, ... and 99%
+%      .hist             (struct) histogram struct with the following fields
+%           .type        (string) 'som_hist'
+%           .bins        (vector) histogram bin centers 
+%           .counts      (vector) count of values in each bin
+%           .binlabels   (cellstr) labels for the bins (denormalized bin
+%                                  center values)
+%           .binlabels2  (cellstr) labels for the bins (denormalized bin
+%                                  edge values, e.g. '[1.4,2.5['
+%
+%   Constants: 
+%      MAXDISCRETE = 10
+%      NT          = 10
+%
+% See also  SOM_STATS_PLOT, SOM_STATS_TABLE, SOM_TABLE_PRINT, SOM_STATS_REPORT.
+
+% Contributed to SOM Toolbox 2.0, December 31st, 2001 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 311201
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%% arguments
+
+% default values
+nosort      = 0; 
+nbins       = 10; 
+maxdiscrete = 20; 
+ntiles      = 10; 
+
+% first argument
+if isstruct(D), 
+    switch D.type, 
+    case 'som_map',  cn = D.comp_names; sN = D.comp_norm; D = D.codebook; 
+    case 'som_data', cn = D.comp_names; sN = D.comp_norm; D = D.data; 
+    otherwise, error('Invalid first argument')
+    end    
+else
+    cn = cell(size(D,2),1); 
+    cn(:) = {'Variable'};
+    for i=1:length(cn), cn{i} = sprintf('%s%d',cn{i},i); end    
+    sN = cell(size(D,2),1); 
+end
+[dlen dim] = size(D);
+
+% other arguments
+
+if length(varargin)>0, 
+  if strcmp(varargin{1},'nosort'), nosort = 1; end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%% action
+
+sStat = struct('type','som_stat','name','','normalization',[],...
+               'min',NaN,'max',NaN,'mean',NaN,'std',NaN,...
+               'nunique',NaN,'values',[],'counts',[],'mfvalue',NaN,'mfcount',NaN,'tiles',[],...
+               'ntotal',dlen,'nvalid',NaN,'hist',[]);
+csS = cell(0);
+           
+for i=1:dim, 
+    sS = sStat;
+    sS.name = cn{i};
+    sS.normalization = sN{i}; 
+    x = D(:,i); 
+    x(find(~isfinite(x))) = [];
+    % basic descriptive statistics
+    sS.nvalid = length(x);
+    if length(x), 
+        sS.min  = min(x);
+        sS.max  = max(x);
+        sS.mean = mean(x);  
+        sS.std = std(x);
+        bins = [];
+        if ~nosort, 
+            xsorted    = sort(x);
+            % number of unique values
+            repeated   = (xsorted(1:end-1)==xsorted(2:end));
+            j          = [1; find(~repeated)+1];         
+            xunique    = xsorted(j); 
+            sS.nunique = length(xunique);           
+            ucount     = diff([j; length(xsorted)+1]);
+            % most frequent value
+            [fcount,j] = max(ucount);
+            sS.mfvalue = xunique(j);
+            sS.mfcount = fcount;
+            % -tiles (k*100/ntiles % of values, k=1..)
+            pickind    = round(linspace(1,sS.nvalid,ntiles+1)); 
+            pickind    = pickind(2:end-1);
+            sS.tiles   = xsorted(pickind);
+            if sS.nunique <= sS.nvalid/2, 
+                % unique values
+                sS.values = xunique; 
+	            sS.counts = ucount; 
+                bins = sS.values; 
+            else
+                % just maxdiscrete values, evenly  picked
+                pickind    = round(linspace(1,sS.nunique,maxdiscrete));
+                sS.values  = xunique(pickind);
+                sS.counts  = ucount(pickind);
+ 	    
+                %% OPTION 2: maxdiscrete most frequent values
+                %[v,j]     = sort(ucount); 
+                %pickind   = j(1:maxdiscrete);             
+                %sS.values = xunique(pickind);
+                %sS.counts = ucount(pickind);
+
+                % OPTION 3: representative values - calculated using k-means
+                %[y,bm,qe] = kmeans(x,maxdiscrete);
+               %sS.values = y; 
+                %sS.counts = full(sum(sparse(bm,1:length(bm),1,maxdiscrete,length(bm)),2));
+            end 
+        end 
+        if isempty(bins), 
+            bins = linspace(sS.min,sS.max,nbins+1); 
+            bins = (bins(1:end-1)+bins(2:end))/2; 
+        end
+        sS.hist = som_hist(x,bins,sS.normalization);    
+    else
+        sS.hist = som_hist(x,0);
+    end
+    csS{end+1} = sS; 
+end
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%% subfunctions
+
+function sH = som_hist(x,bins,sN)
+
+    binlabels  = []; 
+    binlabels2 = []; 
+    if nargin<2 | isempty(bins) | isnan(bins), 
+        bins = linspace(min(x),max(x),10);    
+    end
+    if isstruct(bins), 
+        bins = sH.bins; 
+        binlabels  = sH.binlabels;
+        binlabels2 = sH.binlabels2;
+    end 
+    if nargin<3, sN = []; end
+
+    sH = struct('type','som_hist','bins',bins,'counts',[],...
+                'binlabels',binlabels,'binlabels2',binlabels2);                         
+            
+    if length(bins)==1,
+        sH.counts = [length(x)];
+        edges = bins;
+    elseif length(x),
+        edges = (bins(1:end-1)+bins(2:end))/2;
+        counts = histc(x,[-Inf; edges(:); Inf]);
+        sH.counts = counts(1:end-1);       
+    end 
+
+    if isempty(sH.binlabels),
+        b = som_denormalize(bins(:),sN); 
+        sH.binlabels = numtostring(b,4);
+    end 
+
+    if isempty(sH.binlabels2),
+        if length(edges)==1, 
+            sH.binlabels2 = numtostring(som_denormalize(edges,sN),2);
+            if length(bins)>1, 
+              sH.binlabels2 = sH.binlabels2([1 1]);
+              sH.binlabels2{1} = [']' sH.binlabels2{1} '['];
+              sH.binlabels2{2} = ['[' sH.binlabels2{2} '['];
+            end 
+        else
+            if size(edges,1)==1, edges = edges'; end
+            bstr = numtostring(som_denormalize(edges,sN),4);
+            sH.binlabels2 = bstr([1:end end]);
+            sH.binlabels2{1} = [bstr{1} '['];
+            for i=2:length(sH.binlabels2)-1,
+                sH.binlabels2{i} = ['[' bstr{i-1} ',' bstr{i} '[']; 
+            end 
+            sH.binlabels2{end} = ['[' bstr{end}];
+        end         
+    end 
+    
+    if 0, 
+        if length(bins)==1, sH.binlabels2 = {'constant'}; 
+        else    
+            ntiles = 10; 
+            plim = [1:ntiles-1] / ntiles; 
+            cp = cumsum(sH.counts)/sum(sH.counts);
+            [dummy,i] = histc(cp,[-Inf plim Inf]);            
+            l2 = cell(length(bins),1);            
+            for j=1:length(bins), l2{j} = sprintf('Q%d',i(j)); end
+            if i(1) > 1, l2{1} = ['...' l2{1}]; end            
+            k = 0; 
+            for j=2:length(bins), 
+                if i(j)==i(j-1), 
+                    if k==0, l2{j-1} = [l2{j-1} '.1']; k = 1; end
+                    k = k + 1; 
+                    l2{j} = [l2{j} '.' num2str(k)]; 
+                else k = 0; end
+            end 
+            if i(end) < ntiles, l2{end} = [l2{end} '...']; end
+            sH.binlabels2 = l2; 
+        end 
+    end    
+
+    return;
+
+function vstr = numtostring(v,d)
+
+    r = max(v)-min(v); 
+    if r==0, r=1; end
+    nearzero = (abs(v)/r < 10.^-d);
+    i1 = find(v > 0 & nearzero); 
+    i2 = find(v < 0 & nearzero);     
+    vstr = strrep(cellstr(num2str(v,d)),' ','');
+    vstr(i1) = {'0.0'};
+    vstr(i2) = {'-0.0'};
+    return;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_stats_plot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,144 @@
+function som_stats_plot(csS,plottype,varargin)
+
+%SOM_STATS_PLOT Plots of data set statistics.
+%  
+% som_stats_plot(csS, plottype, [argID, value, ...])
+%
+%  som_stats_plot(csS,'stats')
+%  som_stats_plot(csS,'stats','p','vert','color','r')
+%
+%  Input and output arguments ([]'s are optional): 
+%   csS         (cell array) of statistics structs
+%               (struct) a statistics struct
+%   plottype    (string) some of the following
+%                        'hist'   histogram
+%                        'box'    min, max, mean, and std shown as a boxplot
+%                        'stats'  both histogram (with black) and the boxplot
+%   [argID, (string) See below. The values which are unambiguous can 
+%    value] (varies) be given without the preceeding argID.
+%
+% Here are the valid argument IDs and corresponding values. The values which
+% are unambiguous (marked with '*') can be given without the preceeding argID.
+%   'counts'      *(string) 'c' (for counts, the default) or 'p' (for percentages)
+%   'color'        (vector) size 1 x 3, color to be used
+%                  (string) a color string
+%   'title'        (string) 'on' (default) or 'off'
+%   'orientation' *(string) 'horiz' or 'vert' (default): orientation for the 
+%                           bin values (horizontally or vertically)
+%
+% See also  SOM_STATS, SOM_STATS_TABLE, SOM_TABLE_PRINT, SOM_STATS_REPORT.
+
+% Contributed to SOM Toolbox 2.0, December 31st, 2001 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 311201
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% arguments
+
+% statistics
+if isstruct(csS), csS = {csS}; end
+
+% default values
+useprob   = 0; 
+color     = [0 0 1];
+showtitle = 1; 
+horiz     = 0; 
+
+% varargin
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     % argument IDs
+     case 'counts',      i=i+1; useprob = strcmp(varargin{i}(1),'p'); 
+     case 'color',       i=i+1; color = varargin{i}; 
+     case 'title',       i=i+1; showtitle = strcmp(varargin{i},'on');
+     case 'orientation', i=i+1; horiz = strcmp(varargin{i},'horiz'); 
+     % unambiguous values
+     case {'horiz','vert'}, horiz = strcmp(varargin{i},'horiz'); 
+     case {'c','p'}, useprob = strcmp(varargin{i}(1),'p'); 
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    argok = 0; 
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_stats_plot) Ignoring invalid argument #' num2str(i+2)]); 
+  end
+  i = i+1; 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%% action
+
+ss = ceil(sqrt(length(csS))); ss = [ss, ceil(length(csS)/ss)];
+
+for j = 1:length(csS), 
+    sS = csS{j};    
+    subplot(ss(1),ss(2),j);
+    switch plottype, 
+    case 'stats',
+        cla, hold on
+        Counts = sS.hist.counts; 
+        if useprob, for i=1:size(Counts,2), Counts(:,i) = Counts(:,i)/sum(Counts(:,i)); end, end
+        hist_plot(sS.hist.bins,sS.hist.binlabels,Counts,color);
+        box_plot(sS.min,sS.max,sS.mean,sS.std,[0 0 0]);
+    case 'hist',
+        cla, hold on
+        Counts = sS.hist.counts; 
+        if useprob, for i=1:size(Counts,2), Counts(:,i) = Counts(:,i)/sum(Counts(:,i)); end, end
+        hist_plot(sS.hist.bins,sS.hist.binlabels,Counts,color);
+    case 'box', 
+        cla
+	box_plot(sS.min,sS.max,sS.mean,sS.std,color);    
+    end
+    if showtitle, title(sprintf('%s (valid: %d/%d)',sS.name,sS.nvalid,sS.ntotal)); end
+    if ~horiz, view(90,-90); end
+    a = axis; a(1) = sS.min; a(2) = sS.max; axis(a); 
+end
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%% subfunctions
+
+function hist_plot(bins,binlabels,Counts,color)
+    
+    if nargin<4, color = jet(size(Counts,2)); end
+    h = bar(bins,Counts);
+    for j=1:length(h), set(h(j),'facecolor',color(j,:),'edgecolor','none'); end
+    a = axis; a(3:4) = [0 max(Counts(:))]; axis(a);
+    set(gca,'XTick',bins,'XTickLabel',binlabels);
+    return;
+
+function vstr = numtostring(v,d)
+
+    nearzero = (abs(v)/(max(v)-min(v)) < 10.^-d);
+    i1 = find(v > 0 & nearzero); 
+    i2 = find(v < 0 & nearzero);     
+    vstr = strrep(cellstr(num2str(v,d)),' ','');
+    vstr(i1) = {'0.0'};
+    vstr(i2) = {'-0.0'};
+    return;
+
+function box_plot(mi,ma,me,st,Color)
+
+    if nargin < 5, Color = jet(length(mi)); end
+    a = axis;      
+    y = linspace(a(3),a(4),length(mi)+2); y = y(2:end);
+    d = (y(2)-y(1))/20;   
+    for i=1:length(mi),
+        h1 = line([mi(i) ma(i)],[y(i) y(i)]); 
+        h2 = line([mi(i) mi(i) NaN ma(i) ma(i)],[y(i)-d y(i)+d NaN y(i)-d y(i)+d]); 
+        h3 = line([me(i)-st(i) me(i)+st(i)],[y(i) y(i)]); 
+        h4 = line([me(i) me(i)],[y(i)-2*d y(i)+2*d]); 
+        set([h1 h2 h3 h4],'color',Color(i,:));
+        set([h1 h2],'linewidth',1);
+        set([h3 h4],'linewidth',3);
+    end 
+    return;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_stats_report.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,113 @@
+function som_stats_report(csS,fname,fmt,texonly)
+
+% SOM_STATS_REPORT Make report of the statistics.
+%  
+% som_stats_report(csS, fname, fmt, [standalone])
+%
+%  som_stats_report(csS, 'data_stats', 'ps')
+%
+%  Input and output arguments ([]'s are optional): 
+%   csS          (cell array) of statistics structs
+%                (struct) a statistics struct
+%   fname        (string) output file name (without extension)
+%                (cellstr) {direc, fname}
+%   fmt          (string) report format: 'ps', 'pdf', 'html' or 'txt'
+%   [texonly]    (any)    for 'ps' and 'pdf' formats: if 4th argument 
+%                         is given, only the tex file is written 
+%                         (w/o document start/end), and it is not compiled
+%
+% See also  SOM_STATS, SOM_STATS_PLOT, SOM_STATS_TABLE, SOM_TABLE_PRINT, REP_UTILS.
+
+% Contributed to SOM Toolbox 2.0, December 31st, 2001 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 311201
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+if isstruct(csS), csS = {csS}; end
+dim = length(csS);
+if iscell(fname), direc = fname{1}; fname = fname{2}; else direc = '.'; end
+if nargin<4, texonly = 0; else texonly = 1; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+% additional analysis
+continuity = zeros(dim,1);
+for i=1:dim, continuity(i) = csS{i}.nunique / csS{i}.nvalid; end
+
+entropy_rel = zeros(dim,1);
+for i=1:dim, 
+    c = csS{i}.hist.counts; 
+    if length(c) < 2 | all(c==0), entropy(i) = 0; 
+    else
+        maxent = log(length(c));
+        c = c(c>0)/sum(c);
+        entropy_rel(i) = -sum(c.*log(c)) / maxent;
+    end 
+end
+
+% meta-statistics
+values  = {'Number of variables',dim; ...
+           'Number of samples',csS{1}.ntotal; ...
+           'Valid values',c_and_p_str(count_total(csS,'nvalid'),dim*csS{1}.ntotal); ...
+           'Mean(#unique / #valid)',mean(continuity); ...
+           'Mean relative entropy',mean(entropy_rel)};
+           %'Dataset name',sD.name; 'Report generated',datestr(now);          
+sTdset = som_table_struct(values);
+
+% statistics tables
+[sTstats,csThist] = som_stats_table(csS); 
+sTstats = som_table_modify(sTstats,'addcol',entropy_rel,{'entropy'});
+
+% write report
+if isempty(fname), fid = 1; 
+else 
+    switch fmt,
+    case {'ps','pdf'}, ending = '.tex'; 
+    case 'html', ending = '.html'; 
+    case 'txt', ending = '.txt'; 
+    end 
+    fid = fopen([direc '/' fname ending],'w'); 
+end
+if ~texonly, rep_utils('header',fmt,fid); end
+
+rep_utils({'inserttable',sTdset,1,0},fmt,fid);
+rep_utils({'insertbreak'},fmt,fid);
+rep_utils({'inserttable',sTstats,1,0},fmt,fid);
+rep_utils({'insertbreak'},fmt,fid);
+som_stats_plot(csS,'stats'); 
+rep_utils({'printfigure',[direc '/histograms']},fmt);
+rep_utils({'insertfigure','histograms'},fmt,fid);
+for i=1:dim, 
+    rep_utils({'insertbreak'},fmt,fid);
+    rep_utils({'inserttable',csThist{i},1,0},fmt,fid);
+end 
+
+if ~texonly, rep_utils('footer',fmt,fid); end
+if fid~=1, fclose(fid); end
+
+if ~texonly & any(strcmp(fmt,{'ps','pdf'})), rep_utils('compile',fmt); end
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+function a = count_total(csS,field)
+  % count total of the field values
+  a = 0; for i=1:length(csS), a = a + getfield(csS{i},field); end
+  return;
+  
+function str = c_and_p_str(n,m)
+  % return a string of form # (%), e.g. '23 (12%)'
+  if n==m, p = '100'; 
+  elseif n==0, p = '0';
+  else p = sprintf('%.2g',100*n/m);
+  end
+  str = sprintf('%d (%s%%)',round(n),p); 
+  return;
+
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_stats_table.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,116 @@
+function [sTstats,csThist] = som_stats_table(csS,histlabel)
+
+%SOM_STATS_TABLE Statistics table.
+%  
+% [sTstats,csThist] = som_stats_table(csS)
+% 
+%   sTstats = som_stats_table(csS); 
+%   som_table_print(sTstats);
+%  
+%  Input and output arguments ([]'s are optional): 
+%   csS           (cell array) of statistics structs
+%                 (struct) a statistics struct
+%
+%   sTstats       (struct) a table struct with basic descriptive 
+%                          statistics for each variable
+%   csThist       (cell array) of table structs, with histograms for
+%                          each variable
+%
+% See also  SOM_STATS, SOM_STATS_PLOT, SOM_TABLE_PRINT, SOM_STATS_REPORT.
+
+% Contributed to SOM Toolbox 2.0, December 31st, 2001 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 311201
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% arguments
+
+if isstruct(csS), csS = {csS}; end
+dim = length(csS);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%% action
+
+sTable = struct('colfmt','','headers',[],'values',[],'span',[]); 
+
+% summary table of all variables
+sT = sTable; 
+sT.headers = {'name','min','mean','max','std','missing'};
+if ~isnan(csS{1}.nunique), sT.headers{end+1} = 'unique'; end
+%if length(col_values), sT.headers = [sT.headers, col_headers]; end
+sT.values  = cell(dim,length(sT.headers));
+sT.span    = ones([size(sT.values) 2]); 
+
+%if length(col_values), sT.values(:,end-size(col_values,2)+1:end) = col_values; end 
+%if length(col_spans),  sT.span(:,end-size(col_spans,2)+1:end,:)  = col_spans;  end 
+
+for i=1:dim, 
+    sT.values{i,1} = csS{i}.name;
+    v = [csS{i}.min,csS{i}.mean,csS{i}.max,csS{i}.std];
+    v = som_denormalize(v,csS{i}.normalization); 
+    vstr = numtostring(v,6);
+    sT.values(i,2:5) = vstr'; 
+    sT.values{i,6} = c_and_p_str(csS{i}.ntotal-csS{i}.nvalid,csS{i}.ntotal); 
+    if ~isnan(csS{1}.nunique),
+        sT.values{i,7} = c_and_p_str(csS{i}.nunique,csS{i}.nvalid);
+    end
+end
+sTstats = sT; 
+
+% histograms
+csThist = cell(dim,1); 
+for i=1:dim, 
+    sH     = csS{i}.hist; 
+    nvalid = csS{i}.nvalid;
+    nbins  = length(sH.bins); 
+    sT         = sTable; 
+    sT.headers = {[csS{i}.name ' values'],'frequency #','frequency %'};
+    sT.values  = cell(nbins,length(sT.headers));  
+    sT.span    = ones(nbins,length(sT.headers),2);
+    for j=1:nbins,         
+        if length(sH.bins) < csS{i}.nunique, sT.values{j,1} = sH.binlabels2{j};
+        else sT.values{j,1} = sH.binlabels{j}; end
+        sT.values{j,2} = sprintf('%d',round(sH.counts(j)));
+        sT.values{j,3} = p_str(sH.counts(j)/nvalid);
+    end     
+    csThist{i} = sT; 
+end   
+   
+return; 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%% subfunctions
+
+function vstr = numtostring(v,d)
+
+    tp = (size(v,2)>1);  
+    if tp, v = v'; end
+    nearzero = (abs(v)/(max(v)-min(v)) < 10.^-d);
+    i1 = find(v > 0 & nearzero); 
+    i2 = find(v < 0 & nearzero);     
+    vstr = strrep(cellstr(num2str(v,d)),' ','');
+    vstr(i1) = {'0.0'};
+    vstr(i2) = {'-0.0'};
+    if tp, vstr = vstr'; end
+    return;
+
+function str = c_and_p_str(n,m)
+  % return a string of form # (%), e.g. '23 (12%)'
+  if     n==m, p = '100'; 
+  elseif n==0, p = '0';
+  else         p = sprintf('%.2g',100*n/m);
+  end
+  str = sprintf('%d (%s%%)',round(n),p); 
+  return;
+
+function str = p_str(p)
+  % return a string of form %, e.g. '12%'
+  if round(p*100)>100,  p = sprintf('%3g',100*p); 
+  elseif p==1,          p = '100';
+  elseif abs(p)<eps,    p = '0';
+  else                  p = sprintf('%.2g',100*p);
+  end
+  str = sprintf('%s%%',p); 
+  return;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_sub2ind.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+function inds = som_sub2ind(msize,Subs)
+
+%SOM_SUB2IND Linear index from map grid subscripts.
+%
+% ind = som_sub2ind(msize,Subs)
+%
+%  ind = som_sub2ind([10 15],[4 5]);
+%  ind = som_sub2ind(sMap,[4 5]);
+%  ind = som_sub2ind(sMap.msize,[4 5]);
+%  inds = som_sub2ind([10 15],[4 5; 3 2; 1 10]);
+%
+%  Input and output arguments: 
+%   msize  (struct) map or topology struct
+%          (vector) size 1 x m, specifies the map grid size
+%   Subs   (matrix) size n x m, the subscripts of n vectors
+%
+%   inds   (vector) size n x 1, corresponding linear indeces
+%
+% See also SOM_IND2SUB.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% juuso 300798
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if isstruct(msize), 
+  if strcmp(msize.type,'som_map'), msize = msize.topol.msize; 
+  elseif strcmp(msize.type,'som_topol'), msize = msize.msize;
+  else error('Invalid first argument.'); end
+end
+
+% check off-limits
+[n d] = size(Subs);
+offl = find(Subs < 1 | Subs > msize(ones(n,1),1:d)); 
+Subs(offl) = NaN;
+
+% indexes
+k = [1 cumprod(msize(1:end-1))]';
+inds = 1 + (Subs-1)*k;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_supervised.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,337 @@
+function sM  = som_supervised(sData,varargin)
+
+%SOM_SUPERVISED SOM training which utilizes class information.
+%
+% sM = som_supervised(sData, [ArgID, value,...]))
+%
+%  Input and output arguments ([]'s are optional)
+%   sData    (struct) data struct, the class information is 
+%                     taken from the first column of .labels field
+%   [argID,  (string) See below. These are given as 
+%    value]  (varies) 'argID', value -pairs.
+%
+%   sMap     (struct) map struct
+%
+%  Here are the argument IDs and corresponding values: 
+%  'munits'     (scalar) the preferred number of map units
+%  'msize'      (vector) map grid size
+%  'mask'       (vector) BMU search mask, size dim x 1
+%  'name'       (string) map name
+%  'comp_names' (string array / cellstr) component names, size dim x 1
+%  'tracking'   (scalar) how much to report, default = 1
+%  The following values are unambiguous and can therefore
+%  be given without the preceeding argument ID:
+%  'algorithm'  (string) training algorithm: 'seq' or 'batch'
+%  'mapsize'    (string) do you want a 'small', 'normal' or 'big' map
+%               Any explicit settings of munits or msize override this.
+%  'topol'      (struct) topology struct
+%  'som_topol','sTopol' = 'topol'
+%  'lattice'    (string) map lattice, 'hexa' or 'rect'
+%  'shape'      (string) map shape, 'sheet', 'cyl' or 'toroid'
+%  'neigh'      (string) neighborhood function, 'gaussian', 'cutgauss',
+%                       'ep' or 'bubble'
+%
+% For more help, try 'type som_supervised', or check out online documentation.
+% See also SOM_MAKE, SOM_AUTOLABEL.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_supervised
+%
+% PURPOSE
+%
+% Creates, initializes and trains a supervised SOM by taking the 
+% class-identity into account.
+%
+% SYNTAX
+%
+% sMap = som_supervised(sData);
+% sMap = som_supervised(...,'argID',value,...)
+% sMap = som_make(...,value,...);
+%
+% DESCRIPTION
+%
+% Creates, initializes and trains a supervised SOM. It constructs the
+% training data by adding 1-of-N -coded matrix to the original data
+% based on the class information in the .labels field. The dimension
+% of vectors after the process is (the old dimension + number of
+% different classes). In each vector, one of the new components has
+% value '1' (this depends on the class of the vector), and others '0'.
+% Calls SOM_MAKE to construct the map. Then the class of each map unit
+% is determined by taking maximum over these added components, and a
+% label is give accordingly. Finally, the extra components (the
+% 1-of-N -coded ones) are removed.
+%
+% REFERENCES
+%
+% Kohonen, T., "Self-Organizing Map", 2nd ed., Springer-Verlag, 
+%    Berlin, 1995, pp. 160-161.
+% Kohonen, T., Mäkivasara, K., Saramäki, T., "Phonetic Maps - 
+%    Insightful Representation of Phonological Features For 
+%    Speech Recognition", In proceedings of International
+%    Conference on Pattern Recognition (ICPR), Montreal, Canada, 
+%    1984, pp. 182-185.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+% sData           The data to use in the training.
+%        (struct) A data struct. '.comp_names' as well as '.name' 
+%                 is copied to the map. The class information is 
+%                 taken from the first column of '.labels' field.
+%
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments can be given as 'argID',value -pairs. If an
+%  argument is given value multiple times, the last one is used. 
+%  Here are the argument IDs and corresponding values: 
+%   'munits'     (scalar) the preferred number of map units - this may 
+%                 change a bit, depending on the properties of the data
+%   'msize'      (vector) map grid size
+%   'mask'       (vector) BMU search mask, size dim x 1
+%   'name'       (string) map name
+%   'comp_names' (string array / cellstr) component names, size dim x 1
+%   'tracking'   (scalar) how much to report, default = 1. This parameter 
+%                 is also passed to the training functions. 
+%   The following values are unambiguous and can therefore
+%   be given without the preceeding argument ID:
+%   'algorithm'  (string) training algorithm: 'seq' or 'batch' (default)
+%   'mapsize'    (string) do you want a 'small', 'normal' or 'big' map
+%                 Any explicit settings of munits or msize (or topol) 
+%                 override this.
+%   'topol'      (struct) topology struct
+%   'som_topol','sTopol' = 'topol'
+%   'lattice'    (string) map lattice, 'hexa' or 'rect'
+%   'shape'      (string) map shape, 'sheet', 'cyl' or 'toroid'
+%   'neigh'      (string) neighborhood function, 'gaussian', 'cutgauss',
+%                 'ep' or 'bubble'
+%
+% OUTPUT ARGUMENTS
+% 
+%  sMap (struct)  SOM -map struct
+%
+% EXAMPLES
+%
+%  To simply train a map with default parameters:
+%
+%   sMap = som_supervised(sData);
+%
+%  With the optional arguments, the initialization and training can be
+%  influenced. To change map size, use 'msize', 'munits' or 'mapsize'
+%  arguments:  
+%
+%   sMap = som_supervised(D,'mapsize','big'); or 
+%   sMap = som_supervised(D,'big');
+%   sMap = som_supervised(D,'munits', 100);
+%   sMap = som_supervised(D,'msize', [20 10]); 
+%
+%  Argument 'algorithm' can be used to switch between 'seq' and 'batch'
+%  algorithms. 'batch' is the default, so to use 'seq' algorithm: 
+%
+%   sMap = som_supervised(D,'algorithm','seq'); or 
+%   sMap = som_supervised(D,'seq'); 
+%
+%  The 'tracking' argument can be used to control the amout of reporting
+%  during training. The argument is used in this function, and it is
+%  passed to the training functions. To make the function work silently
+%  set it to 0.
+%
+%   sMap = som_supervised(D,'tracking',0); 
+%
+% SEE ALSO
+% 
+%  som_make         Create, initialize and train Self-Organizing map.
+%  som_autolabel    Label SOM/data set based on another SOM/data set.
+
+% Contributed to SOM Toolbox vs2, Feb 2nd, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+D0 = sData.data;
+[c,n,classlabels] = class2num(sData.labels(:,1));
+
+%%%%%%%% Checking arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if ~isstruct(sData)
+  error('Argument ''sData'' must be a ''som_data'' -struct.');
+else
+  data_name = sData.name;
+  comp_names = sData.comp_names;
+  comp_norm = sData.comp_norm;
+end
+
+[dlen,dim] = size(sData.data);
+
+% defaults
+
+mapsize = '';
+sM = som_map_struct(dim+n); 
+sTopol = sM.topol;
+munits = prod(sTopol.msize); % should be zero
+mask = sM.mask; 
+name = sM.name; 
+neigh = sM.neigh; 
+tracking = 1;
+algorithm = 'batch'; 
+
+%%%% changes to defaults (checking varargin) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+i=1; 
+while i <= length(varargin) 
+  argok = 1; 
+  if ischar(varargin{i}) 
+    switch varargin{i}, 
+      % argument IDs
+     case 'mask',       
+      i=i+1; 
+      mask = varargin{i}; 
+     case 'munits',     
+      i=i+1; 
+      munits = varargin{i}; 
+     case 'msize',      
+      i=i+1; 
+      sTopol.msize = varargin{i}; 
+      munits = prod(sTopol.msize); 
+     case 'mapsize',    
+      i=i+1; 
+      mapsize = varargin{i}; 
+     case 'name',       
+      i=i+1; 
+      name = varargin{i};
+     case 'comp_names', 
+      i=i+1; 
+      comp_names = varargin{i}; 
+     case 'lattice',    
+      i=i+1; 
+      sTopol.lattice = varargin{i};
+     case 'shape',      
+      i=i+1; 
+      sTopol.shape = varargin{i}; 
+     case {'topol','som_topol','sTopol'}, 
+      i=i+1; 
+      sTopol = varargin{i}; 
+      munits = prod(sTopol.msize); 
+     case 'neigh',      
+      i=i+1; 
+      neigh = varargin{i};
+     case 'tracking',   
+      i=i+1; 
+      tracking = varargin{i};
+     case 'algorithm',  
+      i=i+1; 
+      algorithm = varargin{i}; 
+  % unambiguous values
+     case {'hexa','rect'}, 
+      sTopol.lattice = varargin{i};
+     case {'sheet','cyl','toroid'}, 
+      sTopol.shape = varargin{i}; 
+     case {'gaussian','cutgauss','ep','bubble'}, 
+      neigh = varargin{i};
+     case {'seq','batch'}, 
+      algorithm = varargin{i}; 
+     case {'small','normal','big'}, 
+      mapsize = varargin{i}; 
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}(1).type, 
+      case 'som_topol', 
+       sTopol = varargin{i}; 
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_supervised) Ignoring invalid argument #' num2str(i+1)]); 
+  end
+  i = i+1; 
+end
+
+%%%%%%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% constructing the training data by adding 1-of-N -coded matrix to the
+% original data.
+
+[dlen,dim] = size(D0);
+
+Dc = zeros(dlen,n);
+
+for i=1:dlen 
+  if c(i)
+    Dc(i,c(i)) = 1;
+  end
+end
+
+D = [D0, Dc];
+
+% initialization and training 
+
+sD = som_data_struct(D,...
+                     'name',data_name);
+
+sM = som_make(sD,...
+              'mask',mask,...
+              'munits',munits,...
+              'name',data_name,...
+              'tracking',tracking,...
+              'algorithm',algorithm,...
+              'mapsize',mapsize,...
+              'topol',sTopol,...
+              'neigh',neigh);
+
+% add labels
+
+for i=1:prod(sM.topol.msize), 
+  [dummy,class] = max(sM.codebook(i,dim+[1:n]));
+  sM.labels{i} = classlabels{class};
+end
+
+%sD.labels = sData.labels;
+%sM = som_autolabel(sM,sD,'vote');
+
+% remove extra components and modify map -struct
+
+sM.codebook = sM.codebook(:,1:dim);
+sM.mask = sM.mask(1:dim);
+sM.comp_names = sData.comp_names;
+sM.comp_norm = sData.comp_norm;
+
+% remove extras from sM.trainhist
+
+for i=1:length(sM.trainhist)
+  if sM.trainhist(i).mask
+    sM.trainhist(i).mask = sM.trainhist(i).mask(1:dim);
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [numbers, n, names] = class2num(class)
+
+names = {};
+numbers = zeros(length(class),1);
+
+for i=1:length(class)
+  if ~isempty(class{i}) & ~any(strcmp(class{i},names))
+    names=cat(1,names,class(i));
+  end
+end
+
+n=length(names);
+
+tmp_numbers = (1:n)';
+
+for i=1:length(class)
+  if ~isempty(class{i})
+    numbers(i,1) = find(strcmp(class{i},names));    
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_table_modify.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,91 @@
+function sT = som_table_modify(sT,action,arg1,arg2,arg3)
+
+%SOM_TABLE_MODIFY Modify table: add or remove columns or rows.
+%  
+% sTable = som_table_modify(sTable,action,arg1,[arg2],[arg3])
+% 
+%  Input and output arguments ([]'s are optional): 
+%   sTable      (struct) table struct
+%   action      (string) action id (see below).
+%   arg1        (varies) Depending on action, 1 to 3 arguments
+%   [arg2]      (varies) are needed. See below.
+%   [arg3]      (varies) 
+%
+%   sTable      (struct) the modified table struct
+%
+%  Actions and their arguments:
+%   'addcol'    Add one or several new columns.
+%               arg1 (cell array) new values
+%                    (char)       new values (a single column can be given)
+%                    (matrix)     new values
+%               arg2 (cell array) new headers
+%               arg3 (scalar)     at which position the new columns 
+%                                 should be inserted (at the end by default)
+%   'addrow'    Add one or several new rows.
+%               arg1 (cell array) new values
+%                    (char)       new values (a single row can be given)
+%                    (matrix)     new values
+%               arg2 (scalar)     at which position the new rows 
+%                                 should be inserted (at the end by default)
+%   'removecol' Remove one or several columns.           
+%               arg1 (vector)     indeces of columns to be removed
+%   'removerow' Remove one or several rows.           
+%               arg1 (vector)     indeces of rows to be removed
+% 
+% See also  SOM_TABLE_STRUCT, SOM_TABLE_PRINT.
+
+% Contributed to SOM Toolbox 2.0, January 4th, 2002 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 040102
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+[nrT,ncT] = size(sT.values); 
+
+switch action, 
+ case 'addcol', 
+  values = arg1; 
+  if ischar(values), values = cellstr(values); end
+  if isnumeric(values), values = num2cell(values); end
+  spans  = ones([size(values) 2]);
+  [nr,nc] = size(values); 
+  if nargin<4, header = cell(1,nc); header(:) = {''}; else header = arg2; end
+  if ischar(header), header = cellstr(header); end
+  if nargin<5, where = ncT+1; else  where  = arg3; end
+  if nrT ~= nr, 
+    error('Mismatch between sizes of given table and additional columns')
+  else
+    sT.headers = [sT.headers(:,1:where-1), header, sT.headers(:,where:end)]; 
+    sT.values  = [sT.values(:,1:where-1), values, sT.values(:,where:end)]; 
+    sT.span    = [sT.span(:,1:where-1,:), spans, sT.span(:,where:end,:)]; 
+  end
+ case 'addrow', 
+  values  = arg1; 
+  if ischar(values), values = cellstr(values); end
+  if isnumeric(values), values = num2cell(values); end
+  [nr,nc] = size(values); 
+  spans   = ones([size(values) 2]);
+  if nargin<4, where = nrT+1; else where  = arg2; end
+  if ncT ~= nc, 
+    error('Mismatch between sizes of given table and additional rows')
+  else
+    sT.values = [sT.values(1:where-1,:); values; sT.values(where:end,:)]; 
+    sT.span   = [sT.span(1:where-1,:,:); spans; sT.span(where:end,:,:)]; 
+  end
+ case 'removecol',
+  where      = setdiff(1:ncT,arg1);     
+  sT.values  = sT.values(:,where); 
+  sT.headers = sT.headers(:,where); 
+  sT.span    = sT.span(:,where,:); 
+ case 'removerow',
+  where      = setdiff(1:nrT,arg1);     
+  sT.values  = sT.values(where,:); 
+  sT.headers = sT.headers(where,:); 
+  sT.span    = sT.span(where,:,:); 
+end
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_table_print.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+function T = som_table_print(sTable,fid,fmt)
+
+%SOM_TABLE_PRINT Print a table to a file / standard output.
+%  
+% som_table_print(sTable,[fid],[fmt])
+%  
+%  som_table_print(sTable)
+%  som_table_print(sTable,fid,'html')
+%
+%  Input and output arguments ([]'s are optional): 
+%   sTable      (struct) a table struct (see SOM_TABLE_STRUCT)
+%   [fid]       (scalar) a file id (from FOPEN, for example)
+%               (empty)  by default standard output (fid=1) is used
+%   [fmt]       (string) 'txt' (default), 'ps', 'pdf' or 'html'
+%                        the output format type
+%
+% See also  SOM_TABLE_STRUCT, SOM_STATS_TABLE, SOM_STATS_REPORT.
+
+% Contributed to SOM Toolbox 2.0, January 2nd, 2002 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 020102
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargin<2 | isempty(fid) | isnan(fid), fid = 1; end
+if nargin<3 | isempty(fmt) | isnan(fmt), fmt = 'txt'; end
+
+rowlines = 0; 
+longtable = 0; 
+
+T = rep_utils({'inserttable',sTable,rowlines,longtable},fmt,fid);
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_table_struct.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+function sTable = som_table_struct(values,headers,span,colfmt)
+
+%SOM_TABLE_STRUCT Create a table struct.
+%  
+% sTable = som_table_struct(values,[headers],[span],[colfmt])
+% 
+%  Input and output arguments ([]'s are optional): 
+%   values      (cell array) size nrow x ncol, the contents of the table 
+%               (char array) size nrow x *
+%               (matrix)     size nrow x ncol
+%   [headers]   (cell array) size 1 x ncol, header row of the table 
+%               (empty)      by default, empty headers are used ('')
+%   [span]      (matrix)     size nrow x ncol x 2, span of each cell of the 
+%                            table: span(:,:,1) gives horizontal span and 
+%                            span(:,:,2) gives vertical span. If the value
+%                            for a cell is greater than 1, it should be 
+%                            followed by a corresponding number of zeros
+%                            for the following cells (left or down)
+%               (empty)      by default ones(nrow,ncol,1)
+%   [colfmt]    (string)     the format of each column as given in LaTeX, 
+%                            only used if the table is printed as 'ps' or 'pdf', 
+%                            by default colfmt = ''
+%   
+%   sTable      (struct)     the table struct, with the following fields:
+%         .headers  (cell array) header row, size 1 x ncol
+%         .values   (cell array) values,  size nrow x ncol
+%         .span     (matrix)     span of each cell, size nrow x ncol x 2
+%
+% See also  SOM_TABLE_MODIFY, SOM_TABLE_PRINT.
+
+% Contributed to SOM Toolbox 2.0, December 31st, 2001 by Juha Vesanto
+% Copyright (c) by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 311201
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if ischar(values), values = cellstr(values); 
+elseif isnumeric(values), values = num2cell(values); 
+end
+[nrow,ncol] = size(values);
+
+if nargin<2 | isempty(headers), headers = cell(1,ncol); headers(:) = {''}; end
+if ischar(headers), headers = cellstr(headers); end
+
+if nargin<3 | isempty(span), span = ones(nrow,ncol,2); end
+if sum(span(:)) > 2*nrow*ncol, 
+  warning('span matrix has overlapping cells')
+elseif sum(span(:)) < 2*nrow*ncol,
+  warning('span matrix has noncontinuous cells')
+end
+
+if nargin<4 | isempty(colfmt), colfmt = ''; end
+    
+sTable = struct('colfmt','','headers',[],'values',[],'span',[]); 
+sTable.colfmt  = colfmt; 
+sTable.headers = headers; 
+sTable.span    = span;
+sTable.values  = values; 
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_topol_struct.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,272 @@
+function sTopol = som_topol_struct(varargin)
+
+%SOM_TOPOL_STRUCT Default values for SOM topology.
+%
+% sT = som_topol_struct([[argID,] value, ...])
+%
+%  sTopol = som_topol_struct('data',D); 
+%  sTopol = som_topol_struct('data',D,'munits',200); 
+%  sTopol = som_topol_struct(sTopol); 
+%  sTopol = som_topol_struct; 
+% 
+%  Input and output arguments ([]'s are optional): 
+%    [argID,  (string) Default map topology depends on a number of 
+%     value]  (varies) factors (see below). These are given as a 
+%                      argument ID - argument value pairs, listed below.
+%
+%    sT       (struct) The ready topology struct.
+%
+% Topology struct contains values for map size, lattice (default is 'hexa')
+% and shape (default is 'sheet'). Map size depends on training data and the
+% number of map units. The number of map units depends on number of training
+% samples.
+%
+% Here are the valid argument IDs and corresponding values. The values which
+% are unambiguous (marked with '*') can be given without the preceeding argID.
+%  'dlen'         (scalar) length of the training data
+%  'data'         (matrix) the training data
+%                *(struct) the training data
+%  'munits'       (scalar) number of map units
+%  'msize'        (vector) map size
+%  'lattice'     *(string) map lattice: 'hexa' or 'rect'
+%  'shape'       *(string) map shape: 'sheet', 'cyl' or 'toroid'
+%  'topol'       *(struct) incomplete topology struct: its empty fields 
+%                          will be given values
+%  'som_topol','sTopol'    = 'topol'
+%
+% For more help, try 'type som_topol_struct' or check out online documentation.
+% See also SOM_SET, SOM_TRAIN_STRUCT, SOM_MAKE.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_topol_struct
+%
+% PURPOSE
+%
+% Default values for map topology and training parameters.
+%
+% SYNTAX
+%
+%  sT = som_topol_struct('argID',value,...);
+%  sT = som_topol_struct(value,...);
+%
+% DESCRIPTION
+%
+% This function is used to give sensible values for map topology (ie. map
+% size). The topology struct is returned. 
+%
+% The topology struct has three fields: '.msize', '.lattice' and
+% '.shape'. Of these, default value for '.lattice' is 'hexa' and for
+% '.shape' 'sheet'. Only the '.msize' field depends on the optional
+% arguments: 'dlen', 'munits' and 'data'.  The value for '.msize' field is
+% determined as follows.
+%
+% First, the number of map units is determined (unless it is given). A
+% heuristic formula of 'munits = 5*sqrt(dlen)' is used to calculate
+% it. After this, the map size is determined. Basically, the two biggest
+% eigenvalues of the training data are calculated and the ratio between
+% sidelengths of the map grid is set to the square root of this ratio. The
+% actual sidelengths are then set so that their product is as close to the
+% desired number of map units as possible. If the lattice of the grid is
+% 'hexa', the ratio is modified a bit to take it into account. If the
+% lattice is 'hexa' and shape is 'toroid', the map size along the first axis
+% must be even.
+%  
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments can be given as 'argID',value -pairs. If an
+%  argument is given value multiple times, the last one is
+%  used. The valid IDs and corresponding values are listed below. The values 
+%  which are unambiguous (marked with '*') can be given without the 
+%  preceeding argID.
+%
+%  'dlen'         (scalar) length of the training data
+%  'data'         (matrix) the training data
+%                *(struct) the training data
+%  'munits'       (scalar) number of map units
+%  'msize'        (vector) map size
+%  'lattice'     *(string) map lattice: 'hexa' or 'rect'
+%  'shape'       *(string) map shape: 'sheet', 'cyl' or 'toroid'
+%  'topol'       *(struct) incomplete topology struct: its empty fields 
+%                          will be given values
+%  'som_topol','sTopol'    = 'topol'
+%
+% OUTPUT ARGUMENTS
+% 
+%  sT     (struct) The topology struct.
+%
+% EXAMPLES
+%
+%  The most important optional argument for the default topology is 'data'.
+%  To get a default topology (given data) use:
+%
+%    sTopol = som_topol_struct('data',D); 
+%
+%  This sets lattice to its default value 'hexa'. If you want to have a
+%  'rect' lattice instead: 
+%
+%    sTopol = som_topol_struct('data',D,'lattice','rect');
+%     or 
+%    sTopol = som_topol_struct('data',D,'rect');
+%
+%  If you want to have (close to) a specific number of map units, e.g. 100: 
+%
+%    sTopol = som_topol_struct('data',D,'munits',100);
+%
+% SEE ALSO
+%
+%  som_make         Initialize and train a map using default parameters.
+%  som_train_struct Default training parameters.
+%  som_randinint    Random initialization algorithm.
+%  som_lininit      Linear initialization algorithm.
+%  som_seqtrain     Sequential training algorithm.
+%  som_batchtrain   Batch training algorithm.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0alpha juuso 060898 250399 070499 050899 240801
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+% initialize
+sTopol = som_set('som_topol','lattice','hexa','shape','sheet'); 
+D = [];
+dlen = NaN;
+dim = 2; 
+munits = NaN;
+
+% varargin
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     case 'dlen',       i=i+1; dlen = varargin{i}; 
+     case 'munits',     i=i+1; munits = varargin{i}; sTopol.msize = 0;
+     case 'msize',      i=i+1; sTopol.msize = varargin{i}; 
+     case 'lattice',    i=i+1; sTopol.lattice = varargin{i}; 
+     case 'shape',      i=i+1; sTopol.shape = varargin{i}; 
+     case 'data',       
+      i=i+1; 
+      if isstruct(varargin{i}), D = varargin{i}.data; 
+      else D = varargin{i}; 
+      end
+      [dlen dim] = size(D); 
+     case {'hexa','rect'}, sTopol.lattice = varargin{i}; 
+     case {'sheet','cyl','toroid'}, sTopol.shape = varargin{i};
+     case {'som_topol','sTopol','topol'}, 
+      i=i+1;
+      if ~isempty(varargin{i}.msize) & prod(varargin{i}.msize), 
+	sTopol.msize = varargin{i}.msize; 
+      end
+      if ~isempty(varargin{i}.lattice), sTopol.lattice = varargin{i}.lattice; end   
+      if ~isempty(varargin{i}.shape), sTopol.shape = varargin{i}.shape; end
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}.type, 
+     case 'som_topol',
+      if ~isempty(varargin{i}.msize) & prod(varargin{i}.msize), 
+	sTopol.msize = varargin{i}.msize; 
+      end
+      if ~isempty(varargin{i}.lattice), sTopol.lattice = varargin{i}.lattice; end   
+      if ~isempty(varargin{i}.shape), sTopol.shape = varargin{i}.shape; end
+     case 'som_data', 
+      D = varargin{i}.data; 
+      [dlen dim] = size(D);       
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_topol_struct) Ignoring invalid argument #' num2str(i)]); 
+  end
+  i = i+1; 
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action - topology struct
+
+% lattice and shape set already, so if msize is also set, there's
+% nothing else to do
+if prod(sTopol.msize) & ~isempty(sTopol.msize), return; end
+
+% otherwise, decide msize 
+% first (if necessary) determine the number of map units (munits)
+if isnan(munits), 
+  if ~isnan(dlen), 
+    munits = ceil(5 * dlen^0.5); % this is just one way to make a guess...
+  else
+    munits = 100; % just a convenient value
+  end
+end
+
+% then determine the map size (msize)
+if dim == 1, % 1-D data
+
+  sTopol.msize = [1 ceil(munits)]; 
+
+elseif size(D,1)<2, % eigenvalues cannot be determined since there's no data
+
+  sTopol.msize = round(sqrt(munits)); 
+  sTopol.msize(2) = round(munits/sTopol.msize(1));
+
+else % determine map size based on eigenvalues
+  
+  % initialize xdim/ydim ratio using principal components of the input
+  % space; the ratio is the square root of ratio of two largest eigenvalues	
+  
+  % autocorrelation matrix
+  A = zeros(dim)+Inf;
+  for i=1:dim, D(:,i) = D(:,i) - mean(D(isfinite(D(:,i)),i)); end  
+  for i=1:dim, 
+    for j=i:dim, 
+      c = D(:,i).*D(:,j); c = c(isfinite(c));
+      A(i,j) = sum(c)/length(c); A(j,i) = A(i,j); 
+    end
+  end  
+  % take mdim first eigenvectors with the greatest eigenvalues
+  [V,S]   = eig(A);
+  eigval  = diag(S);
+  [y,ind] = sort(eigval); 
+  eigval  = eigval(ind);
+  
+  %me     = mean(D);
+  %D      = D - me(ones(length(ind),1),:); % remove mean from data
+  %eigval = sort(eig((D'*D)./size(D,1))); 
+  if eigval(end)==0 | eigval(end-1)*munits<eigval(end), 
+    ratio = 1; 
+  else
+    ratio  = sqrt(eigval(end)/eigval(end-1)); % ratio between map sidelengths
+  end
+  
+  % in hexagonal lattice, the sidelengths are not directly 
+  % proportional to the number of units since the units on the 
+  % y-axis are squeezed together by a factor of sqrt(0.75)
+  if strcmp(sTopol.lattice,'hexa'), 
+    sTopol.msize(2)  = min(munits, round(sqrt(munits / ratio * sqrt(0.75))));
+  else
+    sTopol.msize(2)  = min(munits, round(sqrt(munits / ratio)));
+  end
+  sTopol.msize(1)  = round(munits / sTopol.msize(2));
+  
+  % if actual dimension of the data is 1, make the map 1-D    
+  if min(sTopol.msize) == 1, sTopol.msize = [1 max(sTopol.msize)]; end;
+  
+  % a special case: if the map is toroid with hexa lattice, 
+  % size along first axis must be even
+  if strcmp(sTopol.lattice,'hexa') & strcmp(sTopol.shape,'toroid'), 
+    if mod(sTopol.msize(1),2), sTopol.msize(1) = sTopol.msize(1) + 1; end
+  end
+
+end
+  
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_train_struct.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,389 @@
+function sTrain = som_train_struct(varargin)
+
+%SOM_TRAIN_STRUCT Default values for SOM training parameters.
+%
+% sT = som_train_struct([[argID,] value, ...])
+%
+%  sTrain = som_train_struct('train',sM,sD);
+%  sTrain = som_train_struct('finetune','data',D); 
+%  sTrain = som_train_struct('previous',sT0);
+% 
+%  Input and output arguments ([]'s are optional): 
+%    [argID,  (string) Several default values depend on other SOM parameters
+%     value]  (varies) or on the proporties of a data set. See below for a
+%                      a list of required and optional arguments for
+%                      different parameters, and well as the list of valid 
+%                      argIDs and associated values. The values which are 
+%                      unambiguous can be given without the preceeding argID.
+%
+%    sT       (struct) The training struct.
+%
+% Training struct contains values for training and initialization
+% parameters. These parameters depend on the number of training samples,
+% phase of training, the training algorithm.
+% 
+% Here are the valid argument IDs and corresponding values. The values which
+% are unambiguous (marked with '*') can be given without the preceeding rgID.
+%  'dim'          (scalar) input space dimension
+%  'dlen'         (scalar) length of the training data
+%  'data'         (matrix / struct) the training data
+%  'munits'       (scalar) number of map units
+%  'msize'        (vector) map size
+%  'previous'     (struct) previous training struct can be given in 
+%                          conjunction with 'finetune' phase (see below) 
+%  'phase'       *(string) training phase: 'init', 'train', 'rough' or 'finetune'
+%  'algorithm'   *(string) algorithm to use: 'lininit', 'randinit', 'batch' or 'seq'
+%  'map'         *(struct) If a map struct is given, the last training struct
+%                          in '.trainhist' field is used as the previous training
+%                          struct. The map size and input space dimension are 
+%                          extracted from the map struct.
+%  'sTrain'      *(struct) a train struct, the empty fields of which are
+%                          filled with sensible values
+%
+% For more help, try 'type som_train_struct' or check out online documentation.
+% See also SOM_SET, SOM_TOPOL_STRUCT, SOM_MAKE.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_train_struct
+%
+% PURPOSE
+%
+% Default values for SOM training parameters.
+%
+% SYNTAX
+%
+%  sT = som_train_struct('argID',value,...);
+%  sT = som_train_struct(value,...);
+%
+% DESCRIPTION
+%
+% This function is used to give sensible values for SOM training
+% parameters and returns a training struct. Often, the parameters
+% depend on the properties of the map and the training data. These are
+% given as optional arguments to the function. If a partially filled
+% train struct is given, its empty fields (field value is [] or '' or
+% NaN) are supplimented with default values.
+%
+% The training struct has a number of fields which depend on each other
+% and the optional arguments in complex ways. The most important argument 
+% is 'phase' which can be either 'init', 'train', 'rough' or 'finetune'.
+%
+%  'init'     Map initialization. 
+%  'train'    Map training in a onepass operation, as opposed to the
+%             rough-finetune combination.
+%  'rough'    Rough organization of the map: large neighborhood, big
+%             initial value for learning coefficient. Short training.
+%  'finetune' Finetuning the map after rough organization phase. Small
+%             neighborhood, learning coefficient is small already at 
+%             the beginning. Long training.
+%
+% The fields of training struct set by this function are listed below.
+%
+%  '.mask'  Basically, a column vector of ones. But if a previous
+%           train or map struct is given, it is copied from there.
+%  '.neigh' Default value is 'gaussian' but if a previous train or map 
+%           struct is given, it is copied from there.
+%  '.alpha_type' Default value is 'inv' but if a previous training struct 
+%           is given, it is copied from there.
+%  '.alpha_ini' For 'train' and 'rough' phases, this is 0.5, for
+%           'finetune' it is 0.05.
+%  '.radius_ini' Depends on the previous training operation and the 
+%           maximum sidelength of the map ms = max(msize).
+%           if there isn't one, or it is 'randinit', rad_ini = max(1,ms/2)
+%           if it is 'lininit', rad_ini = max(1,ms/8)
+%           otherwise, rad_ini = rad_fin of the previous training
+%  '.radius_fin' Default value is 1, but if the training phase is
+%           'rough', rad_fin = max(1,rad_ini/4).
+%  '.trainlen' For 'train' phase this is 20 x mpd epochs, for 'rough'
+%           phase 4 x mpd epochs and for 'finetune' 16 x mpd
+%           epochs, where mpd = munits/dlen. If mpd cannot be
+%           calculated, it is set to be = 0.5. In any case,
+%           trainlen is at least one epoch.
+%  '.algorithm' Default training algorithm is 'batch' and default
+%           initialization algorithm is 'lininit'.
+%
+% OPTIONAL INPUT ARGUMENTS 
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments can be given as 'argID',value -pairs. If an
+%  argument is given value multiple times, the last one is used.  The
+%  valid IDs and corresponding values are listed below. The values
+%  which are unambiguous (marked with '*') can be given without the
+%  preceeding argID.
+%
+%  'dim'          (scalar) input space dimension
+%  'dlen'         (scalar) length of the training data
+%  'data'         (matrix / struct) the training data
+%  'munits'       (scalar) number of map units
+%  'msize'        (vector) map size
+%  'previous'     (struct) previous training struct can be given in 
+%                  conjunction with 'finetune' phase. 
+%  'phase'       *(string) training phase: 'init', 'train', 'rough' or 'finetune'
+%  'algorithm'   *(string) algorithm to use: 'lininit', 'randinit', 
+%                  'batch' or 'seq'
+%  'map'         *(struct) If a map struc is given, the last training struct
+%                  in '.trainhist' field is used as the previous training
+%                  struct. The map size and input space dimension are 
+%                  extracted from the map struct.
+%  'sTrain'      *(struct) a train struct, the empty fields of which are
+%                  filled with sensible values
+%
+% OUTPUT ARGUMENTS
+% 
+%  sT     (struct) The training struct.
+%
+% EXAMPLES
+%
+%  The most important optional argument for the training parameters is
+%  'phase'. The second most important are 'previous' and/or 'map'. 
+%
+%  To get default initialization parameters, use: 
+%
+%    sTrain = som_train_struct('phase','init');
+%     or
+%    sTrain = som_train_struct('init');
+%
+%  To get default training parameters, use: 
+%
+%    sTrain = som_train_struct('phase','train','data',D,'map',sMap);
+%     or  
+%    sTrain = som_train_struct('train','data',D,sMap);
+%     or
+%    sTrain = som_train_struct('train','dlen',dlen, ...
+%                              'msize',sMap.topol.msize,'dim',dim);
+%  
+%  If you want to first rough train and then finetune, do like this: 
+%
+%   sT1 = som_train_struct('rough','dlen',length(D),sMap); % rough training
+%   sT2 = som_train_struct('finetune','previous',sT1);     % finetuning
+%
+% SEE ALSO
+%
+%  som_make         Initialize and train a map using default parameters.
+%  som_topol_struct Default map topology.
+%  som_randinint    Random initialization algorithm.
+%  som_lininit      Linear initialization algorithm.
+%  som_seqtrain     Sequential training algorithm.
+%  som_batchtrain   Batch training algorithm.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 101199 090200 210301
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+% initial default structs
+sTrain = som_set('som_train'); 
+
+% initialize optional parameters
+dlen = NaN;
+msize = 0; 
+munits = NaN;
+sTprev = [];
+dim = NaN; 
+phase = '';
+
+% varargin
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+     case 'dim',        i=i+1; dim = varargin{i}; 
+     case 'dlen',       i=i+1; dlen = varargin{i}; 
+     case 'msize',      i=i+1; msize = varargin{i};
+     case 'munits',     i=i+1; munits = varargin{i}; msize = 0; 
+     case 'phase',      i=i+1; phase = varargin{i}; 
+     case 'algorithm',  i=i+1; sTrain.algorithm = varargin{i}; 
+     case 'mask',       i=i+1; sTrain.mask = varargin{i}; 
+     case {'previous','map'},   
+      i=i+1; 
+      if strcmp(varargin{i}.type,'som_map'), 
+	if length(varargin{i}.trainhist), 
+	  sTprev = varargin{i}.trainhist(end); 
+	  msize = varargin{i}.topol.msize;
+	end
+      elseif strcmp(varargin{i}.type,'som_train'), 
+	sTprev = varargin{i}; 
+      end
+     case 'data',       
+      i=i+1; 
+      if isstruct(varargin{i}), [dlen dim] = size(varargin{i}.data); 
+      else [dlen dim] = size(varargin{i}); 
+      end
+     case {'init','train','rough','finetune'},  phase = varargin{i};       
+     case {'lininit','randinit','seq','batch'}, sTrain.algorithm = varargin{i}; 
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}.type, 
+     case 'som_train', 
+      sT = varargin{i}; 
+      if ~isempty(sT.algorithm),  sTrain.algorithm = sT.algorithm; end
+      if ~isempty(sT.neigh),      sTrain.neigh = sT.neigh; end
+      if ~isempty(sT.mask),       sTrain.mask = sT.mask; end
+      if ~isnan(sT.radius_ini),   sTrain.radius_ini = sT.radius_ini; end
+      if ~isnan(sT.radius_fin),   sTrain.radius_fin = sT.radius_fin; end
+      if ~isnan(sT.alpha_ini),    sTrain.alpha_ini = sT.alpha_ini; end
+      if ~isempty(sT.alpha_type), sTrain.alpha_type = sT.alpha_type; end
+      if ~isnan(sT.trainlen),     sTrain.trainlen = sT.trainlen; end
+      if ~isempty(sT.data_name),  sTrain.data_name = sT.data_name; end
+      if ~isempty(sT.time),       sTrain.time = sT.time; end
+     case 'som_map', 
+      if strcmp(varargin{i}.type,'som_map'), 
+	if length(varargin{i}.trainhist), 
+	  sTprev = varargin{i}.trainhist(end); 
+	  msize = varargin{i}.topol.msize; 
+	end
+	if ~isempty(varargin{i}.neigh) & isempty(sTrain.neigh), 
+	  sTrain.neigh = varargin{i}.neigh; 
+	end
+	if ~isempty(varargin{i}.mask) & isempty(sTrain.mask),  
+	  sTrain.mask = varargin{i}.mask; 
+	end
+      elseif strcmp(varargin{i}.type,'som_train'), 
+	sTprev = varargin{i}; 
+      end
+     case 'som_topol', msize = varargin{i}.msize; 
+     case 'som_data', [dlen dim] = size(varargin{i}.data); 
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_train_struct) Ignoring invalid argument #' num2str(i)]); 
+  end
+  i = i+1; 
+end
+
+% dim
+if ~isempty(sTprev) & isnan(dim), dim = length(sTprev.mask); end
+
+% mask
+if isempty(sTrain.mask) & ~isnan(dim), sTrain.mask = ones(dim,1); end
+
+% msize, munits
+if ~msize | isempty(msize), 
+  if isnan(munits), msize = [10 10]; 
+  else s = round(sqrt(munits)); msize = [s round(munits/s)]; 
+  end
+end
+munits = prod(msize);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% action
+
+% previous training
+prevalg = ''; 
+if ~isempty(sTprev), 
+  if any(findstr(sTprev.algorithm,'init')), prevalg = 'init';
+  else prevalg = sTprev.algorithm; 
+  end
+end
+
+% first determine phase  
+if isempty(phase), 
+  switch sTrain.algorithm,
+   case {'lininit','randinit'},    phase = 'init'; 
+   case {'batch','seq',''}, 
+    if     isempty(sTprev),        phase = 'rough'; 
+    elseif strcmp(prevalg,'init'), phase = 'rough';
+    else                           phase = 'finetune'; 
+    end
+   otherwise,                      phase = 'train'; 
+  end
+end
+
+% then determine algorithm  
+if isempty(sTrain.algorithm),
+  if     strcmp(phase,'init'),             sTrain.algorithm = 'lininit';
+  elseif any(strcmp(prevalg,{'init',''})), sTrain.algorithm = 'batch';
+  else sTrain.algorithm = sTprev.algorithm; 
+  end
+end
+
+% mask
+if isempty(sTrain.mask), 
+  if ~isempty(sTprev), sTrain.mask = sTprev.mask; 
+  elseif ~isnan(dim),  sTrain.mask = ones(dim,1); 
+  end
+end
+
+% neighborhood function
+if isempty(sTrain.neigh), 
+  if ~isempty(sTprev) & ~isempty(sTprev.neigh), sTrain.neigh = sTprev.neigh; 
+  else sTrain.neigh = 'gaussian';
+  end
+end
+
+if strcmp(phase,'init'), 
+  sTrain.alpha_ini = NaN;
+  sTrain.alpha_type = '';
+  sTrain.radius_ini = NaN;
+  sTrain.radius_fin = NaN;
+  sTrain.trainlen = NaN;
+  sTrain.neigh = '';
+else
+  mode = [phase, '-', sTrain.algorithm];
+  
+  % learning rate
+  if isnan(sTrain.alpha_ini), 
+    if strcmp(sTrain.algorithm,'batch'), sTrain.alpha_ini = NaN; 
+    else
+      switch phase, 
+       case {'train','rough'}, sTrain.alpha_ini = 0.5;
+       case 'finetune',        sTrain.alpha_ini = 0.05;
+      end
+    end
+  end
+  if isempty(sTrain.alpha_type),     
+    if ~isempty(sTprev) & ~isempty(sTprev.alpha_type) ... 
+	  & ~strcmp(sTrain.algorithm,'batch'),
+      sTrain.alpha_type = sTprev.alpha_type;
+    elseif strcmp(sTrain.algorithm,'seq'),
+      sTrain.alpha_type = 'inv';
+    end
+  end
+  
+  % radius
+  ms = max(msize);   
+  if isnan(sTrain.radius_ini),     
+    if isempty(sTprev) | strcmp(sTprev.algorithm,'randinit'), 
+      sTrain.radius_ini = max(1,ceil(ms/4));
+    elseif strcmp(sTprev.algorithm,'lininit') | isnan(sTprev.radius_fin),
+      sTrain.radius_ini = max(1,ceil(ms/8));
+    else
+      sTrain.radius_ini = sTprev.radius_fin;
+    end
+  end
+  if isnan(sTrain.radius_fin), 
+    if strcmp(phase,'rough'), 
+      sTrain.radius_fin = max(1,sTrain.radius_ini/4);
+    else
+      sTrain.radius_fin = 1;
+    end
+  end
+  
+  % trainlen  
+  if isnan(sTrain.trainlen),     
+    mpd = munits/dlen; 
+    if isnan(mpd), mpd = 0.5; end
+    switch phase, 
+     case 'train',    sTrain.trainlen = ceil(50*mpd);
+     case 'rough',    sTrain.trainlen = ceil(10*mpd); 
+     case 'finetune', sTrain.trainlen = ceil(40*mpd);
+    end
+    sTrain.trainlen = max(1,sTrain.trainlen);
+  end
+
+end
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_trajectory.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,285 @@
+function som_trajectory(bmus,varargin)
+
+%SOM_TRAJECTORY Launch a "comet" trajectory visualization GUI.
+%
+%  som_show(sM,'umat','all')
+%  bmus = som_bmus(sM,sD);
+%  som_trajectory(bmus)
+%  som_trajectory(bmus, 'data1', sD, 'trajsize', [12 6 3 1]')
+%  som_trajectory(bmus, 'data1', sD.data(:,[1 2 3]), 'name1', {'fii' 'faa' 'foo'})
+%
+% Input arguments ([]'s are optional):
+%   bmus      (matrix) size Nx1, vector of BMUS
+%   ['argID', (string) Other arguments can be given as 'argID', value   
+%    value]   (varies) pairs. See list below for valid values.
+%
+% NOTE: the GUI only works on a figure which has been made with SOM_SHOW.
+%
+% Here are the valid argument IDs (case insensitive) and associated values: 
+%  'color'      string 'xor' or ColorSpec, default: 'xor'. 
+%               (default: according to lattice as in som_cplane)
+%  'TrajSize'   vector of size Nx1 to define the length of comet
+%               (N) and size of the comet dots in points. 
+%               default: [16 12 10 8 6 4]' 
+%  'Data1'      SOM Toolbox data struct or matrix. The size of
+%               data matrix (in data struct the field .data) is
+%               Nxd, where N must be the same as the amount of
+%               BMUS given in the first input argument 'bmus'
+%               This data is shown in a new window in d subplots.
+%               Default: BMU indices (first input argument)
+%  'Name1'      cell array of d strings which contains names
+%               for the components in 'Data1'. If 'Data1' is a SOM
+%               Toolbox data struct, the existing component names 
+%               are overdone.                 
+%  'Figure'     scalar that must be a handle to an existing figure
+%               which has been made using SOM_SHOW function.
+%               Default: current active figure (gcf).
+%
+% The following tools can be found in the 'Tools' -menu.
+%
+%  Remove Trajectory: removes trajectory from the map.
+%  Dye Nodes        : opens GUI for selecting color for the nodes
+%                     and points selected.
+%  Clear Markers    : removes markers from map and data figure.
+%  Save             : saves the current situation as a struct.
+%  Load             : loads the struct from workspace and draws markers.
+%
+% Mouse operation
+%
+%  In data window: Left button is used to drag the operation point ruler  
+%                  if left button is on blank area, it starts 
+%  In map window : Left button starts a polygon; right button
+%                  finishes; middle button toggles a unit.
+%
+% SOM_TRAJECTORY is an application for observing trajectory behavior.
+%
+% Using mouse the line in data figure can be dragged and the
+% trajectory moves in the SOM SHOW figure. It is also possible to move
+% trajectory by pressing keys '>' and '<' when mouse pointer is above
+% data figure.
+% 
+% Regions can be chosen from the data and the points in that region
+% are mapped to the component planes. Regions can be chosen also in
+% the map.  In this situation data points and map nodes are also
+% marked (Left mouse button adds point to the polygon indicating the
+% region and right button finals the polygon). By clicking a node (the
+% middle button) that node is either added or removed from selection.
+% 
+% It should be noticed that choosing intervals from data may cause
+% situations that seem to be bugs. If there exisist marks of different
+% color, removing them by clicking the map may left some marks in the
+% data, because more than one point in the data is mapped to the same
+% node in the map and the removing operation depends on the color of
+% the marks. However, all the marks can be removed by using the 'Clear
+% Markers' -operation.
+%
+% FEATURES
+%
+% The first input argument 'bmus' may also be a munits x N matrix
+% In this case each column defines a "fuzzy response". That is,
+% each column defines a hit histogram function). The element
+% bmus(i,t) sets the size of marker on unit i at time t. 
+% NOTE: - in this case no regions can be selcted on the map!
+%       - only > and < keys can be used to move the operation point
+%         line: it can't be dragged
+%       - "fuzzy response is always black (hope this will be fixed) 
+%       
+% It is possible to open a second data window showing different data:
+% use indetifiers 'Data2' (and 'Name2'). The argument syntax is
+% identical to 'Data1' (and 'Name1').
+%
+% See also SOM_SHOW, SOM_SHOW_ADD, SOM_BMUS. 
+
+% Contributed to SOM Toolbox 2.0, February 11th, 2000 by Johan
+% Himberg and Juha Parhankangas
+% Copyright (c) 2000 by the Johan Himberg and Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/        
+
+% Check arguments
+
+error(nargchk(1,Inf,nargin)); % Check no. of input arguments
+
+%% Init input argument struct (see subfunction)
+Traj=iniTraj(bmus);
+
+% Check tentative BMU input validity
+
+if ~vis_valuetype(bmus,{'nxm'}),
+  error(['First input should be a vector of BMU indices or' ...
+	 ' a "response matrix"']);
+end
+
+%% Check optional arguments
+for i=1:2:length(varargin)
+  identifier=lower(varargin{i});
+  value=varargin{i+1};
+
+  % Trajectory color
+  switch identifier  
+   case 'color'
+    if isempty(value)
+      value='xor';
+    end
+    if vis_valuetype(value,{'colorstyle','xor'})
+      Traj.color=value;
+    else
+      error('''Color'' has to be ColorSpec or string ''xor''.');
+    end
+   
+   % 1st data  
+   case 'data1'
+    if isempty(value),
+      value=[];
+    elseif vis_valuetype(value,{'nxm'})
+      Traj.primary_data=value;
+    elseif isstruct(value) & isfield(value,'type') & ...
+	  ischar(value.type) & strcmp(value.type,'som_data'),
+      Traj.primary_data=value.data;
+      if isempty(Traj.primary_names),
+	Traj.primary_names=value.comp_names;
+      end
+    end
+   
+    % 2nd data
+   case 'data2'
+    if isempty(value),
+      value=[];
+    elseif vis_valuetype(value,{'nxm'})
+      Traj.secondary_data=value;
+    elseif isstruct(value) & isfield(value,'type') & ...
+	  ischar(value.type) & strcmp(value.type,'som_data'),
+      Traj.secondary_data=value.data;
+      if isempty(Traj.secondary_names),
+	Traj.secondary_names=value.comp_names;
+      end
+     end
+   
+   % Trajectory length & size
+   case 'trajsize'
+    if isempty(value),
+      Traj.size=[16 12 10 8 6 4]';
+    end
+    if vis_valuetype(value,{'nx1'})
+      Traj.size=value
+    else
+      error('''TrajSize'' has to be a nx1 vector.');
+    end
+   
+   % Names for first data variables
+   case 'name1'
+    if isempty(value),
+      Traj.primary_names=[];
+    elseif ~vis_valuetype(value,{'cellcolumn_of_char'}),
+      error('''Name1'': variable names must be in a cell column array.') 
+    else
+      Traj.primary_names = value;
+    end
+   % Names for 2nd data variables
+   case 'name2'
+    if isempty(value),
+      Traj.secondary_names=[];
+    elseif ~vis_valuetype(value,{'cellcolumn_of_char'}),
+      error('''Name2'': variable names must be in a cell column array.') 
+    else
+      Traj.secondary_names = value;
+    end
+   
+   % Figure number
+   case 'figure'
+    if isempty(value)
+      Traj.figure='gcf';
+    end
+    if vis_valuetype(value,{'1x1'})
+      Traj.figure=value;
+    else
+      error('''Figure'' should be number of an existing figure.')
+    end
+  end
+end
+
+%% Get SOM data from figure
+[h,msg,lattice,msize,dim]=vis_som_show_data('all',Traj.figure);
+
+%% Not a SOM_SHOW figure?
+if ~isempty(msg);
+  error('Figure is invalid: use SOM_SHOW to draw the figure.');
+end
+
+% Get map size from figure data
+Traj.lattice=lattice; 
+Traj.msize=msize;  
+if length(msize)>2,
+  error(['This function works only with 2D maps: figure contains' ...
+	 ' something else.']);
+end
+munits=prod(msize);
+
+% Check BMU (or response) and map match 
+
+if vis_valuetype(bmus,{'nx1'});
+  if max(bmus)>prod(msize) | min(bmus) <1
+    error('BMU indexes out of range.')
+  elseif any(round(bmus)~=bmus)
+    error('BMU indexes must be integer.');
+  elseif isempty(Traj.primary_data),
+    Traj.primary_data=bmus;
+  end
+elseif size(bmus,1) ~= munits 
+  error(['Response matrix column number must match with the number of' ...
+	 ' map units.']);
+else
+  bmus=bmus';
+  if isempty(Traj.primary_data),
+    Traj.primary_data=[1:size(bmus,1)]';
+    Traj.primary_names={'BMU Index'};
+  end
+end
+
+size1=size(Traj.primary_data);
+size2=size(Traj.secondary_data);
+
+% Data2 must not be defined alone
+
+if isempty(Traj.primary_data)&~isempty(Traj.secondary_data),
+  error('If ''Data2'' is specified ''Data1'' must be specified, too.');
+elseif ~isempty(Traj.secondary_data) ...
+      & size1~= size2
+  % If data1 and data2 exist both, check data1 and data2 match
+  error('''Data1'' and ''Data2'' have different amount of data vectors.')
+end
+
+% Check BMU and data1 match (data2 matches with 1 anyway)
+
+if ~isempty(Traj.primary_data) & size(bmus,1) ~= size1,
+  error(['The number of data vectors in ''data1'' must match with' ...
+	 ' the number of rows in the first input argument (bmus).']);
+end
+
+% Check that number of names and data dimension is consistent
+
+if ~isempty(Traj.primary_names) & (size1(2)~=length(Traj.primary_names)),
+  error('Number of component names and ''Data1'' dimension mismatch.');
+end
+if ~isempty(Traj.secondary_names) & ...
+      (size2(2)~=length(Traj.secondary_names)),
+  error('Number of component names and ''Data2'' dimension mismatch.');
+end
+
+%% Call the function that does the job
+vis_trajgui(Traj);
+
+%%% Subfunctions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function Traj=iniTraj(bmus)
+
+Traj.figure=gcf;
+Traj.primary_data=[];
+Traj.secondary_data=[];
+Traj.primary_names = [];  
+Traj.secondary_names = [];  
+Traj.size=[16 12 10 8 6 4]';
+Traj.bmus=bmus;
+Traj.color='xor';
+Traj.msize=[];
+Traj.lattice=[];
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_umat.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,362 @@
+function U = som_umat(sMap, varargin)
+
+%SOM_UMAT Compute unified distance matrix of self-organizing map.
+%
+% U = som_umat(sMap, [argID, value, ...])
+%
+%  U = som_umat(sMap);  
+%  U = som_umat(M,sTopol,'median','mask',[1 1 0 1]);
+%
+%  Input and output arguments ([]'s are optional): 
+%   sMap     (struct) map struct or
+%            (matrix) the codebook matrix of the map
+%   [argID,  (string) See below. The values which are unambiguous can 
+%    value]  (varies) be given without the preceeding argID.
+%
+%   U        (matrix) u-matrix of the self-organizing map 
+%
+% Here are the valid argument IDs and corresponding values. The values which
+% are unambiguous (marked with '*') can be given without the preceeding argID.
+%   'mask'       (vector) size dim x 1, weighting factors for different 
+%                         components (same as BMU search mask)
+%   'msize'      (vector) map grid size
+%   'topol'     *(struct) topology struct
+%   'som_topol','sTopol' = 'topol'
+%   'lattice'   *(string) map lattice, 'hexa' or 'rect'
+%   'mode'      *(string) 'min','mean','median','max', default is 'median'
+%
+% NOTE! the U-matrix is always calculated for 'sheet'-shaped map and
+% the map grid must be at most 2-dimensional.
+% 
+% For more help, try 'type som_umat' or check out online documentation.
+% See also SOM_SHOW, SOM_CPLANE.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_umat
+%
+% PURPOSE
+%
+% Computes the unified distance matrix of a SOM.
+%
+% SYNTAX
+%
+%  U = som_umat(sM)  
+%  U = som_umat(...,'argID',value,...)
+%  U = som_umat(...,value,...)
+%
+% DESCRIPTION
+%
+% Compute and return the unified distance matrix of a SOM. 
+% For example a case of 5x1 -sized map:
+%            m(1) m(2) m(3) m(4) m(5)
+% where m(i) denotes one map unit. The u-matrix is a 9x1 vector:
+%    u(1) u(1,2) u(2) u(2,3) u(3) u(3,4) u(4) u(4,5) u(5) 
+% where u(i,j) is the distance between map units m(i) and m(j)
+% and u(k) is the mean (or minimum, maximum or median) of the 
+% surrounding values, e.g. u(3) = (u(2,3) + u(3,4))/2. 
+%
+% Note that the u-matrix is always calculated for 'sheet'-shaped map and
+% the map grid must be at most 2-dimensional.
+%
+% REFERENCES
+%
+% Ultsch, A., Siemon, H.P., "Kohonen's Self-Organizing Feature Maps
+%   for Exploratory Data Analysis", in Proc. of INNC'90,
+%   International Neural Network Conference, Dordrecht,
+%   Netherlands, 1990, pp. 305-308.
+% Kohonen, T., "Self-Organizing Map", 2nd ed., Springer-Verlag, 
+%    Berlin, 1995, pp. 117-119. 
+% Iivarinen, J., Kohonen, T., Kangas, J., Kaski, S., "Visualizing 
+%   the Clusters on the Self-Organizing Map", in proceedings of
+%   Conference on Artificial Intelligence Research in Finland,
+%   Helsinki, Finland, 1994, pp. 122-126.
+% Kraaijveld, M.A., Mao, J., Jain, A.K., "A Nonlinear Projection
+%   Method Based on Kohonen's Topology Preserving Maps", IEEE
+%   Transactions on Neural Networks, vol. 6, no. 3, 1995, pp. 548-559.
+% 
+% REQUIRED INPUT ARGUMENTS
+%
+%  sM (struct) SOM Toolbox struct or the codebook matrix of the map.
+%     (matrix) The matrix may be 3-dimensional in which case the first 
+%              two dimensions are taken for the map grid dimensions (msize).
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+%  argID (string) Argument identifier string (see below).
+%  value (varies) Value for the argument (see below).
+%
+%  The optional arguments are given as 'argID',value -pairs. If the 
+%  value is unambiguous, it can be given without the preceeding argID.
+%  If an argument is given value multiple times, the last one is used. 
+%
+%  Below is the list of valid arguments: 
+%   'mask'      (vector) mask to be used in calculating
+%                        the interunit distances, size [dim  1]. Default is 
+%                        the one in sM (field sM.mask) or a vector of
+%                        ones if only a codebook matrix was given.
+%   'topol'     (struct) topology of the map. Default is the one
+%                        in sM (field sM.topol).
+%   'sTopol','som_topol' (struct) = 'topol'
+%   'msize'     (vector) map grid dimensions
+%   'lattice'   (string) map lattice 'rect' or 'hexa'
+%   'mode'      (string) 'min', 'mean', 'median' or 'max'
+%                        Map unit value computation method. In fact, 
+%                        eval-function is used to evaluate this, so 
+%                        you can give other computation methods as well.
+%                        Default is 'median'. 
+%
+% OUTPUT ARGUMENTS
+%
+%  U   (matrix) the unified distance matrix of the SOM 
+%               size 2*n1-1 x 2*n2-1, where n1 = msize(1) and n2 = msize(2)
+%
+% EXAMPLES
+%
+%  U = som_umat(sM);  
+%  U = som_umat(sM.codebook,sM.topol,'median','mask',[1 1 0 1]);
+%  U = som_umat(rand(10,10,4),'hexa','rect'); 
+% 
+% SEE ALSO
+%
+%  som_show    show the selected component planes and the u-matrix
+%  som_cplane  draw a 2D unified distance matrix
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 260997
+% Version 2.0beta juuso 151199, 151299, 200900
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(1, Inf, nargin));  % check no. of input arguments is correct
+
+% sMap
+if isstruct(sMap), 
+  M = sMap.codebook;
+  sTopol = sMap.topol; 
+  mask = sMap.mask;
+elseif isnumeric(sMap),
+  M = sMap; 
+  si = size(M);
+  dim = si(end);
+  if length(si)>2, msize = si(1:end-1);
+  else msize = [si(1) 1];
+  end
+  munits = prod(msize);
+  sTopol = som_set('som_topol','msize',msize,'lattice','rect','shape','sheet'); 
+  mask = ones(dim,1);
+  M = reshape(M,[munits,dim]);
+end
+mode = 'median';
+
+% varargin
+i=1; 
+while i<=length(varargin), 
+  argok = 1; 
+  if ischar(varargin{i}), 
+    switch varargin{i}, 
+      % argument IDs
+     case 'mask',       i=i+1; mask = varargin{i}; 
+     case 'msize',      i=i+1; sTopol.msize = varargin{i}; 
+     case 'lattice',    i=i+1; sTopol.lattice = varargin{i};
+     case {'topol','som_topol','sTopol'}, i=i+1; sTopol = varargin{i};
+     case 'mode',       i=i+1; mode = varargin{i};
+      % unambiguous values
+     case {'hexa','rect'}, sTopol.lattice = varargin{i};
+     case {'min','mean','median','max'}, mode = varargin{i};
+     otherwise argok=0; 
+    end
+  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'), 
+    switch varargin{i}(1).type, 
+     case 'som_topol', sTopol = varargin{i};
+     case 'som_map',   sTopol = varargin{i}.topol;
+     otherwise argok=0; 
+    end
+  else
+    argok = 0; 
+  end
+  if ~argok, 
+    disp(['(som_umat) Ignoring invalid argument #' num2str(i+1)]); 
+  end
+  i = i+1; 
+end
+
+% check
+[munits dim] = size(M);
+if prod(sTopol.msize)~=munits, 
+  error('Map grid size does not match the number of map units.')
+end
+if length(sTopol.msize)>2, 
+  error('Can only handle 1- and 2-dimensional map grids.')
+end
+if prod(sTopol.msize)==1,
+  warning('Only one codebook vector.'); U = []; return;
+end
+if ~strcmp(sTopol.shape,'sheet'), 
+  disp(['The ' sTopol.shape ' shape of the map ignored. Using sheet instead.']);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% initialize variables
+
+y = sTopol.msize(1);
+x = sTopol.msize(2);
+lattice = sTopol.lattice;
+shape = sTopol.shape;
+M = reshape(M,[y x dim]);
+
+ux = 2 * x - 1; 
+uy = 2 * y - 1;
+U  = zeros(uy, ux);
+
+calc = sprintf('%s(a)',mode);
+
+if size(mask,2)>1, mask = mask'; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% u-matrix computation
+
+% distances between map units
+
+if strcmp(lattice, 'rect'), % rectangular lattice
+  
+  for j=1:y, for i=1:x,
+      if i<x, 
+	dx = (M(j,i,:) - M(j,i+1,:)).^2; % horizontal
+	U(2*j-1,2*i) = sqrt(mask'*dx(:));
+      end 
+      if j<y, 
+	dy = (M(j,i,:) - M(j+1,i,:)).^2; % vertical
+	U(2*j,2*i-1) = sqrt(mask'*dy(:));
+      end
+      if j<y & i<x,	
+	dz1 = (M(j,i,:) - M(j+1,i+1,:)).^2; % diagonals
+	dz2 = (M(j+1,i,:) - M(j,i+1,:)).^2;
+	U(2*j,2*i) = (sqrt(mask'*dz1(:))+sqrt(mask'*dz2(:)))/(2 * sqrt(2));
+      end
+    end
+  end
+
+elseif strcmp(lattice, 'hexa') % hexagonal lattice
+
+  for j=1:y, 
+    for i=1:x,
+      if i<x,
+	dx = (M(j,i,:) - M(j,i+1,:)).^2; % horizontal
+	U(2*j-1,2*i) = sqrt(mask'*dx(:));
+      end
+      
+      if j<y, % diagonals
+	dy = (M(j,i,:) - M(j+1,i,:)).^2;
+	U(2*j,2*i-1) = sqrt(mask'*dy(:));	
+	
+	if rem(j,2)==0 & i<x,
+	  dz= (M(j,i,:) - M(j+1,i+1,:)).^2; 
+	  U(2*j,2*i) = sqrt(mask'*dz(:));
+	elseif rem(j,2)==1 & i>1,
+	  dz = (M(j,i,:) - M(j+1,i-1,:)).^2; 
+	  U(2*j,2*i-2) = sqrt(mask'*dz(:));
+	end
+      end
+    end
+  end
+  
+end
+
+% values on the units
+
+if (uy == 1 | ux == 1),
+  % in 1-D case, mean is equal to median 
+
+  ma = max([ux uy]);
+  for i = 1:2:ma,
+    if i>1 & i<ma, 
+      a = [U(i-1) U(i+1)]; 
+      U(i) = eval(calc);
+    elseif i==1, U(i) = U(i+1); 
+    else U(i) = U(i-1); % i==ma
+    end
+  end    
+
+elseif strcmp(lattice, 'rect')
+
+  for j=1:2:uy, 
+    for i=1:2:ux,
+      if i>1 & j>1 & i<ux & j<uy,    % middle part of the map
+	a = [U(j,i-1) U(j,i+1) U(j-1,i) U(j+1,i)];        
+      elseif j==1 & i>1 & i<ux,        % upper edge
+	a = [U(j,i-1) U(j,i+1) U(j+1,i)];
+      elseif j==uy & i>1 & i<ux,       % lower edge
+	a = [U(j,i-1) U(j,i+1) U(j-1,i)];
+      elseif i==1 & j>1 & j<uy,        % left edge
+	a = [U(j,i+1) U(j-1,i) U(j+1,i)];
+      elseif i==ux & j>1 & j<uy,       % right edge
+	a = [U(j,i-1) U(j-1,i) U(j+1,i)];
+      elseif i==1 & j==1,              % top left corner
+	a = [U(j,i+1) U(j+1,i)];
+      elseif i==ux & j==1,             % top right corner
+	a = [U(j,i-1) U(j+1,i)];
+      elseif i==1 & j==uy,             % bottom left corner
+	a = [U(j,i+1) U(j-1,i)];
+      elseif i==ux & j==uy,            % bottom right corner
+	a = [U(j,i-1) U(j-1,i)];
+      else
+	a = 0;
+      end
+      U(j,i) = eval(calc);
+    end
+  end
+
+elseif strcmp(lattice, 'hexa')
+  
+  for j=1:2:uy, 
+    for i=1:2:ux,
+      if i>1 & j>1 & i<ux & j<uy,      % middle part of the map
+	a = [U(j,i-1) U(j,i+1)];
+	if rem(j-1,4)==0, a = [a, U(j-1,i-1) U(j-1,i) U(j+1,i-1) U(j+1,i)];
+	else a = [a, U(j-1,i) U(j-1,i+1) U(j+1,i) U(j+1,i+1)]; end       
+      elseif j==1 & i>1 & i<ux,        % upper edge
+	a = [U(j,i-1) U(j,i+1) U(j+1,i-1) U(j+1,i)];
+      elseif j==uy & i>1 & i<ux,       % lower edge
+	a = [U(j,i-1) U(j,i+1)];
+	if rem(j-1,4)==0, a = [a, U(j-1,i-1) U(j-1,i)];
+	else a = [a, U(j-1,i) U(j-1,i+1)]; end
+      elseif i==1 & j>1 & j<uy,        % left edge
+	a = U(j,i+1);
+	if rem(j-1,4)==0, a = [a, U(j-1,i) U(j+1,i)];
+	else a = [a, U(j-1,i) U(j-1,i+1) U(j+1,i) U(j+1,i+1)]; end
+      elseif i==ux & j>1 & j<uy,       % right edge
+	a = U(j,i-1);
+	if rem(j-1,4)==0, a=[a, U(j-1,i) U(j-1,i-1) U(j+1,i) U(j+1,i-1)];
+	else a = [a, U(j-1,i) U(j+1,i)]; end
+      elseif i==1 & j==1,              % top left corner
+	a = [U(j,i+1) U(j+1,i)];
+      elseif i==ux & j==1,             % top right corner
+	a = [U(j,i-1) U(j+1,i-1) U(j+1,i)];
+      elseif i==1 & j==uy,             % bottom left corner
+	if rem(j-1,4)==0, a = [U(j,i+1) U(j-1,i)];
+	else a = [U(j,i+1) U(j-1,i) U(j-1,i+1)]; end
+      elseif i==ux & j==uy,            % bottom right corner
+	if rem(j-1,4)==0, a = [U(j,i-1) U(j-1,i) U(j-1,i-1)];
+	else a = [U(j,i-1) U(j-1,i)]; end
+      else
+	a=0;
+      end
+      U(j,i) = eval(calc);
+    end
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% normalization between [0,1]
+
+% U = U - min(min(U)); 
+% ma = max(max(U)); if ma > 0, U = U / ma; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_unit_coords.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,252 @@
+function Coords = som_unit_coords(topol,lattice,shape)
+
+%SOM_UNIT_COORDS Locations of units on the SOM grid. 
+%
+% Co = som_unit_coords(topol, [lattice], [shape])
+% 
+%  Co = som_unit_coords(sMap);
+%  Co = som_unit_coords(sMap.topol);
+%  Co = som_unit_coords(msize, 'hexa', 'cyl');
+%  Co = som_unit_coords([10 4 4], 'rect', 'toroid');
+%
+%  Input and output arguments ([]'s are optional): 
+%   topol              topology of the SOM grid
+%             (struct) topology or map struct
+%             (vector) the 'msize' field of topology struct
+%   [lattice] (string) map lattice, 'rect' by default
+%   [shape]   (string) map shape, 'sheet' by default
+%
+%   Co        (matrix, size [munits k]) coordinates for each map unit    
+%
+% For more help, try 'type som_unit_coords' or check out online documentation.
+% See also SOM_UNIT_DISTS, SOM_UNIT_NEIGHS.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_unit_coords
+%
+% PURPOSE
+%
+% Returns map grid coordinates for the units of a Self-Organizing Map.
+%
+% SYNTAX
+%
+%  Co = som_unit_coords(sTopol);
+%  Co = som_unit_coords(sM.topol);
+%  Co = som_unit_coords(msize);
+%  Co = som_unit_coords(msize,'hexa');
+%  Co = som_unit_coords(msize,'rect','toroid');
+%
+% DESCRIPTION
+%
+% Calculates the map grid coordinates of the units of a SOM based on 
+% the given topology. The coordinates are such that they can be used to
+% position map units in space. In case of 'sheet' shape they can be 
+% (and are) used to measure interunit distances. 
+%
+% NOTE: for 'hexa' lattice, the x-coordinates of every other row are shifted 
+% by +0.5, and the y-coordinates are multiplied by sqrt(0.75). This is done 
+% to make distances of a unit to all its six neighbors equal. It is not 
+% possible to use 'hexa' lattice with higher than 2-dimensional map grids.
+%
+% 'cyl' and 'toroid' shapes: the coordinates are initially determined as 
+% in case of 'sheet' shape, but are then bended around the x- or the 
+% x- and then y-axes to get the desired shape. 
+% 
+% POSSIBLE BUGS
+%
+% I don't know if the bending operation works ok for high-dimensional
+% map grids. Anyway, if anyone wants to make a 4-dimensional
+% toroid map, (s)he deserves it.
+%
+% REQUIRED INPUT ARGUMENTS
+% 
+%  topol          Map grid dimensions.
+%        (struct) topology struct or map struct, the topology 
+%                 (msize, lattice, shape) of the map is taken from 
+%                 the appropriate fields (see e.g. SOM_SET)
+%        (vector) the vector which gives the size of the map grid
+%                 (msize-field of the topology struct).
+%  
+% OPTIONAL INPUT ARGUMENTS 
+% 
+%  lattice (string) The map lattice, either 'rect' or 'hexa'. Default
+%                   is 'rect'. 'hexa' can only be used with 1- or 
+%                   2-dimensional map grids.
+%  shape   (string) The map shape, either 'sheet', 'cyl' or 'toroid'. 
+%                   Default is 'sheet'. 
+%
+% OUTPUT ARGUMENTS
+%
+%  Co   (matrix) coordinates for each map units, size is [munits k] 
+%                where k is 2, or more if the map grid is higher
+%                dimensional or the shape is 'cyl' or 'toroid'
+%
+% EXAMPLES
+%
+% Simplest case:
+%  Co = som_unit_coords(sTopol);
+%  Co = som_unit_coords(sMap.topol);
+%  Co = som_unit_coords(msize);
+%  Co = som_unit_coords([10 10]);
+%
+% If topology is given as vector, lattice is 'rect' and shape is 'sheet'
+% by default. To change these, you can use the optional arguments:
+%  Co = som_unit_coords(msize, 'hexa', 'toroid');
+%
+% The coordinates can also be calculated for high-dimensional grids:
+%  Co = som_unit_coords([4 4 4 4 4 4]);
+%
+% SEE ALSO
+% 
+%  som_unit_dists    Calculate interunit distance along the map grid.
+%  som_unit_neighs   Calculate neighborhoods of map units.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 110997
+% Version 2.0beta juuso 101199 070600
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check arguments 
+
+error(nargchk(1, 3, nargin));
+
+% default values
+sTopol = som_set('som_topol','lattice','rect');
+
+% topol
+if isstruct(topol), 
+  switch topol.type, 
+  case 'som_map', sTopol = topol.topol;
+  case 'som_topol', sTopol = topol;
+  end
+elseif iscell(topol), 
+  for i=1:length(topol), 
+    if isnumeric(topol{i}), sTopol.msize = topol{i}; 
+    elseif ischar(topol{i}),  
+      switch topol{i}, 
+      case {'rect','hexa'}, sTopol.lattice = topol{i}; 
+      case {'sheet','cyl','toroid'}, sTopol.shape = topol{i}; 
+      end
+    end
+  end
+else
+  sTopol.msize = topol;
+end
+if prod(sTopol.msize)==0, error('Map size is 0.'); end
+
+% lattice
+if nargin>1 & ~isempty(lattice) & ~isnan(lattice), sTopol.lattice = lattice; end
+
+% shape 
+if nargin>2 & ~isempty(shape) & ~isnan(shape), sTopol.shape = shape; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Action
+
+msize = sTopol.msize;
+lattice = sTopol.lattice;
+shape = sTopol.shape;
+
+% init variables
+
+if length(msize)==1, msize = [msize 1]; end
+munits = prod(msize);
+mdim = length(msize);
+Coords = zeros(munits,mdim);
+
+% initial coordinates for each map unit ('rect' lattice, 'sheet' shape)
+k = [1 cumprod(msize(1:end-1))]; 
+inds = [0:(munits-1)]';
+for i = mdim:-1:1, 
+  Coords(:,i) = floor(inds/k(i)); % these are subscripts in matrix-notation
+  inds = rem(inds,k(i)); 
+end
+% change subscripts to coordinates (move from (ij)-notation to (xy)-notation)
+Coords(:,[1 2]) = fliplr(Coords(:,[1 2])); 
+
+% 'hexa' lattice
+if strcmp(lattice,'hexa'), 
+  % check
+  if mdim > 2, 
+    error('You can only use hexa lattice with 1- or 2-dimensional maps.');
+  end
+  % offset x-coordinates of every other row 
+  inds_for_row = (cumsum(ones(msize(2),1))-1)*msize(1); 
+  for i=2:2:msize(1), 
+    Coords(i+inds_for_row,1) = Coords(i+inds_for_row,1) + 0.5; 
+  end
+end
+
+% shapes
+switch shape, 
+case 'sheet', 
+  if strcmp(lattice,'hexa'), 
+    % this correction is made to make distances to all 
+    % neighboring units equal
+    Coords(:,2) = Coords(:,2)*sqrt(0.75); 
+  end
+
+case 'cyl', 
+  % to make cylinder the coordinates must lie in 3D space, at least
+  if mdim<3, Coords = [Coords ones(munits,1)]; mdim = 3; end
+
+  % Bend the coordinates to a circle in the plane formed by x- and 
+  % and z-axis. Notice that the angle to which the last coordinates
+  % are bended is _not_ 360 degrees, because that would be equal to 
+  % the angle of the first coordinates (0 degrees).
+
+  Coords(:,1)     = Coords(:,1)/max(Coords(:,1));
+  Coords(:,1)     = 2*pi * Coords(:,1) * msize(2)/(msize(2)+1);
+  Coords(:,[1 3]) = [cos(Coords(:,1)) sin(Coords(:,1))];
+                    
+case 'toroid', 
+
+  % NOTE: if lattice is 'hexa', the msize(1) should be even, otherwise 
+  % the bending the upper and lower edges of the map do not match 
+  % to each other
+  if strcmp(lattice,'hexa') & rem(msize(1),2)==1, 
+    warning('Map size along y-coordinate is not even.');
+  end
+
+  % to make toroid the coordinates must lie in 3D space, at least
+  if mdim<3, Coords = [Coords ones(munits,1)]; mdim = 3; end
+
+  % First bend the coordinates to a circle in the plane formed
+  % by x- and z-axis. Then bend in the plane formed by y- and
+  % z-axis. (See also the notes in 'cyl').
+
+  Coords(:,1)     = Coords(:,1)/max(Coords(:,1));
+  Coords(:,1)     = 2*pi * Coords(:,1) * msize(2)/(msize(2)+1);
+  Coords(:,[1 3]) = [cos(Coords(:,1)) sin(Coords(:,1))];
+
+  Coords(:,2)     = Coords(:,2)/max(Coords(:,2));
+  Coords(:,2)     = 2*pi * Coords(:,2) * msize(1)/(msize(1)+1);
+  Coords(:,3)     = Coords(:,3) - min(Coords(:,3)) + 1;
+  Coords(:,[2 3]) = Coords(:,[3 3]) .* [cos(Coords(:,2)) sin(Coords(:,2))];
+  
+end
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+function C = bend(cx,cy,angle,xishexa)
+
+  dx = max(cx) - min(cx);
+  if dx ~= 0, 
+    % in case of hexagonal lattice it must be taken into account that
+    % coordinates of every second row are +0.5 off to the right
+    if xishexa, dx = dx-0.5; end
+    cx = angle*(cx - min(cx))/dx; 
+  end    
+  C(:,1) = (cy - min(cy)+1) .* cos(cx);
+  C(:,2) = (cy - min(cy)+1) .* sin(cx);
+
+% end of bend
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_unit_dists.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,268 @@
+function Ud = som_unit_dists(topol,lattice,shape)
+
+%SOM_UNIT_DISTS Distances between unit-locations on the map grid.
+%
+% Ud = som_unit_dists(topol,[lattice],[shape])
+% 
+%  Ud = som_unit_dists(sMap);
+%  Ud = som_unit_dists(sMap.topol);
+%  Ud = som_unit_dists(msize, 'hexa', 'cyl');
+%  Ud = som_unit_dists([10 4 4], 'rect', 'toroid');
+%
+%  Input and output arguments ([]'s are optional): 
+%   topol              topology of the SOM grid
+%             (struct) topology or map struct
+%             (vector) the 'msize' field of topology struct
+%   [lattice] (string) map lattice, 'rect' by default
+%   [shape]   (string) map shape, 'sheet' by default
+%
+%   Ud        (matrix, size [munits munits]) distance from each map unit 
+%                      to each map unit
+%
+% For more help, try 'type som_unit_dists' or check out online documentation.
+% See also SOM_UNIT_COORDS, SOM_UNIT_NEIGHS.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_unit_dists
+%
+% PURPOSE
+%
+% Returns interunit distances between the units of a Self-Organizing Map
+% along the map grid.
+%
+% SYNTAX
+%
+%  Ud = som_unit_dists(sTopol);
+%  Ud = som_unit_dists(sM.topol);
+%  Ud = som_unit_dists(msize);
+%  Ud = som_unit_dists(msize,'hexa');
+%  Ud = som_unit_dists(msize,'rect','toroid');
+%
+% DESCRIPTION
+%
+% Calculates the distances between the units of a SOM based on the 
+% given topology. The distance are euclidian and they are measured
+% along the map grid (in the output space). 
+%
+% In case of 'sheet' shape, the distances can be measured directly
+% from the unit coordinates given by SOM_UNIT_COORDS. 
+%
+% In case of 'cyl' and 'toroid' shapes this is not so. In these cases
+% the coordinates are calculated as in the case of 'sheet' shape and
+% the shape is then taken into account by shifting the map grid into
+% different positions. 
+%
+% Consider, for example, a 4x3 map. The basic position of map units 
+% is shown on the left (with '1' - 'C' each denoting one map unit). 
+% In case of a 'cyl' shape, units on the left and right edges are
+% neighbors, so for this purpose the map is copied on the left and
+% right sides of the map, as on right. 
+%
+%    basic               left     basic    right
+%    -------             -------  -------  -------
+%    1  5  9             1  5  9  1  5  9  1  5  9
+%    2  6  a             2  6  a  2  6  a  2  6  a  
+%    3  7  b             3  7  b  3  7  b  3  7  b 
+%    4  8  c             4  8  c  4  8  c  4  8  c 
+% 
+% For the 'toroid' shape a similar trick is done, except that the 
+% copies are placed all around the basic position:
+%
+%             1  5  9  1  5  9  1  5  9
+%             2  6  a  2  6  a  2  6  a  
+%             3  7  b  3  7  b  3  7  b 
+%             4  8  c  4  8  c  4  8  c 
+%             1  5  9  1  5  9  1  5  9
+%             2  6  a  2  6  a  2  6  a  
+%             3  7  b  3  7  b  3  7  b 
+%             4  8  c  4  8  c  4  8  c 
+%             1  5  9  1  5  9  1  5  9
+%             2  6  a  2  6  a  2  6  a  
+%             3  7  b  3  7  b  3  7  b 
+%             4  8  c  4  8  c  4  8  c 
+%
+% From this we can see that the distance from unit '1' is 1 to units
+% '9','2','4' and '5', and sqrt(2) to units 'C','A','8' and '6'. Notice 
+% that in the case of a 'hexa' lattice and 'toroid' shape, the size
+% of the map in y-direction should be even. The reason can be clearly
+% seen from the two figures below. On the left the basic positions for
+% a 3x3 map. If the map is copied above itself, it can be seen that the
+% lattice is broken (on the right):
+%
+%     basic positions                 example of broken lattice
+%     ---------------                 -------------------------
+%                                     1  4  7 
+%                                      2  5  8
+%                                     3  6  9
+%     1  4  7                         1  4  7 
+%      2  5  8                         2  5  8
+%     3  6  9                         3  6  9
+%
+% 
+% REQUIRED INPUT ARGUMENTS
+% 
+%  topol          Map grid dimensions.
+%        (struct) topology struct or map struct, the topology 
+%                 (msize, lattice, shape) of the map is taken from 
+%                 the appropriate fields (see e.g. SOM_SET)
+%        (vector) the vector which gives the size of the map grid
+%                 (msize-field of the topology struct).
+%  
+% OPTIONAL INPUT ARGUMENTS 
+% 
+%  lattice (string) The map lattice, either 'rect' or 'hexa'. Default
+%                   is 'rect'. 'hexa' can only be used with 1- or 
+%                   2-dimensional map grids.
+%  shape   (string) The map shape, either 'sheet', 'cyl' or 'toroid'. 
+%                   Default is 'sheet'. 
+%
+% OUTPUT ARGUMENTS
+%
+%  Ud   (matrix) distances from each map unit to each other map unit,
+%                size is [munits munits]
+%
+% EXAMPLES
+%
+% Simplest case:
+%  Ud = som_unit_dists(sTopol);
+%  Ud = som_unit_dists(sMap.topol);
+%  Ud = som_unit_dists(msize);
+%  Ud = som_unit_dists([10 10]);
+%
+% If topology is given as vector, lattice is 'rect' and shape is 'sheet'
+% by default. To change these, you can use the optional arguments:
+%  Ud = som_unit_dists(msize, 'hexa', 'toroid');
+%
+% The distances can also be calculated for high-dimensional grids:
+%  Ud = som_unit_dists([4 4 4 4 4 4]);
+%
+% SEE ALSO
+% 
+%  som_unit_coords   Calculate grid coordinates.
+%  som_unit_neighs   Calculate neighborhoods of map units.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 110997
+% Version 2.0beta juuso 101199 170400 070600 130600
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check arguments 
+
+error(nargchk(1, 3, nargin));
+
+% default values
+sTopol = som_set('som_topol','lattice','rect');
+
+% topol
+if isstruct(topol), 
+  switch topol.type, 
+  case 'som_map', sTopol = topol.topol;
+  case 'som_topol', sTopol = topol;
+  end
+elseif iscell(topol), 
+  for i=1:length(topol), 
+    if isnumeric(topol{i}), sTopol.msize = topol{i}; 
+    elseif ischar(topol{i}),  
+      switch topol{i}, 
+      case {'rect','hexa'}, sTopol.lattice = topol{i}; 
+      case {'sheet','cyl','toroid'}, sTopol.shape = topol{i}; 
+      end
+    end
+  end
+else
+  sTopol.msize = topol;
+end
+if prod(sTopol.msize)==0, error('Map size is 0.'); end
+
+% lattice
+if nargin>1 & ~isempty(lattice) & ~isnan(lattice), sTopol.lattice = lattice; end
+
+% shape 
+if nargin>2 & ~isempty(shape) & ~isnan(shape), sTopol.shape = shape; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Action
+
+msize = sTopol.msize;
+lattice = sTopol.lattice;
+shape = sTopol.shape;
+
+munits = prod(msize);
+Ud = zeros(munits,munits);
+
+% free topology
+if strcmp(lattice,'free'),
+  N1 = sTopol.connection; 
+  Ud = som_neighborhood(N1,Inf);
+end
+
+% coordinates of map units when the grid is spread on a plane
+Coords = som_unit_coords(msize,lattice,'sheet');
+
+% width and height of the grid
+dx = max(Coords(:,1))-min(Coords(:,1));
+if msize(1)>1, dx = dx*msize(1)/(msize(1)-1); else dx = dx+1; end
+dy = max(Coords(:,2))-min(Coords(:,2));
+if msize(2)>1, dy = dy*msize(2)/(msize(2)-1); else dy = dy+1; end
+
+% calculate distance from each location to each other location
+switch shape, 
+case 'sheet',
+  for i=1:(munits-1), 
+    inds = [(i+1):munits]; 
+    Dco = (Coords(inds,:) - Coords(ones(munits-i,1)*i,:))'; 
+    Ud(i,inds) = sqrt(sum(Dco.^2));
+  end
+
+case 'cyl', 
+  for i=1:(munits-1), 
+    inds = [(i+1):munits]; 
+    Dco  = (Coords(inds,:) - Coords(ones(munits-i,1)*i,:))'; 
+    dist = sum(Dco.^2);
+    % The cylinder shape is taken into account by adding and substracting
+    % the width of the map (dx) from the x-coordinate (ie. shifting the
+    % map right and left).
+    DcoS = Dco; DcoS(1,:) = DcoS(1,:) + dx;  %East (x+dx)
+    dist = min(dist,sum(DcoS.^2));
+    DcoS = Dco; DcoS(1,:) = DcoS(1,:) - dx;  %West (x-dx)
+    dist = min(dist,sum(DcoS.^2));
+    Ud(i,inds) = sqrt(dist);
+  end
+
+case 'toroid', 
+  for i=1:(munits-1), 
+    inds = [(i+1):munits]; 
+    Dco  = (Coords(inds,:) - Coords(ones(munits-i,1)*i,:))'; 
+    dist = sum(Dco.^2); 
+    % The toroid shape is taken into account as the cylinder shape was 
+    % (see above), except that the map is shifted also vertically.
+    DcoS = Dco; DcoS(1,:) = DcoS(1,:) + dx;  %East (x+dx)
+    dist = min(dist,sum(DcoS.^2));
+    DcoS = Dco; DcoS(1,:) = DcoS(1,:) - dx;  %West (x+dx)
+    dist = min(dist,sum(DcoS.^2));
+    DcoS = Dco; DcoS(2,:) = DcoS(2,:) + dy;  %South (y+dy)
+    dist = min(dist,sum(DcoS.^2));
+    DcoS = Dco; DcoS(2,:) = DcoS(2,:) - dy;  %North (y-dy)
+    dist = min(dist,sum(DcoS.^2));
+    DcoS = Dco; DcoS(1,:) = DcoS(1,:) + dx; DcoS(2,:) = DcoS(2,:) - dy; %NorthEast (x+dx, y-dy)
+    dist = min(dist,sum(DcoS.^2));
+    DcoS = Dco; DcoS(1,:) = DcoS(1,:) + dx; DcoS(2,:) = DcoS(2,:) + dy; %SouthEast (x+dx, y+dy)
+    dist = min(dist,sum(DcoS.^2));
+    DcoS = Dco; DcoS(1,:) = DcoS(1,:) - dx; DcoS(2,:) = DcoS(2,:) + dy; %SouthWest (x-dx, y+dy)
+    dist = min(dist,sum(DcoS.^2));
+    DcoS = Dco; DcoS(1,:) = DcoS(1,:) - dx; DcoS(2,:) = DcoS(2,:) - dy; %NorthWest (x-dx, y-dy)
+    dist = min(dist,sum(DcoS.^2));
+    Ud(i,inds) = sqrt(dist);
+  end
+
+otherwise, 
+  error (['Unknown shape: ', shape]);
+
+end
+
+Ud = Ud + Ud';
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_unit_neighs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,164 @@
+function Ne1 = som_unit_neighs(topol,lattice,shape)
+
+%SOM_UNIT_NEIGHS Matrix indicating units in 1-neighborhood for each map unit.
+%
+% Ne1 = som_unit_neighs(topol,[lattice],[shape])
+% 
+%  Ne1 = som_unit_neighs(sTopol);
+%  Ne1 = som_unit_neighs(sMap.topol);
+%  Ne1 = som_unit_neighs([10 4], 'hexa', 'cyl');
+%  Ne1 = som_unit_neighs(msize, 'rect', 'toroid');
+%
+%  Input and output arguments ([]'s are optional): 
+%   topol              topology of the SOM grid
+%             (struct) topology or map struct
+%             (vector) the 'msize' field of topology struct
+%   [lattice] (string) map lattice, 'rect' by default
+%   [shape]   (string) map shape, 'sheet' by default
+%
+%   Ne1       (matrix, size [munits munits]) a sparse matrix
+%                      indicating the map units in 1-neighborhood
+%                      by value 1 (note: the unit itself also has value 0)
+%
+% For more help, try 'type som_unit_neighs' or check out online documentation.
+% See also SOM_NEIGHBORHOOD, SOM_UNIT_DISTS, SOM_UNIT_COORDS, SOM_CONNECTION.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_unit_neighs
+%
+% PURPOSE
+%
+% Find the adjacent (in 1-neighborhood) units for each map unit of a SOM
+% based on given topology.
+%
+% SYNTAX
+%
+%  Ne1 = som_unit_neighs(sMap);
+%  Ne1 = som_unit_neighs(sM.topol);
+%  Ne1 = som_unit_neighs(msize);
+%  Ne1 = som_unit_neighs(msize,'hexa');
+%  Ne1 = som_unit_neighs(msize,'rect','toroid');
+%
+% DESCRIPTION
+%
+% For each map unit, find the units the distance of which from 
+% the map unit is equal to 1. The distances are calculated
+% along the map grid. Consider, for example, the case of a 4x3 map. 
+% The unit ('1' to 'C') positions for 'rect' and 'hexa' lattice (and
+% 'sheet' shape) are depicted below: 
+% 
+%   'rect' lattice           'hexa' lattice
+%   --------------           --------------
+%      1  5  9                  1  5  9
+%      2  6  a                   2  6  a
+%      3  7  b                  3  7  b
+%      4  8  c                   4  8  c
+%
+% The units in 1-neighborhood (adjacent units) for unit '6' are '2','5','7'
+% and 'a' in the 'rect' case and '5','2','7','9','a' and 'b' in the 'hexa'
+% case. The function returns a sparse matrix having value 1 for these units.  
+% Notice that not all units have equal number of neighbors. Unit '1' has only 
+% units '2' and '5' in its 1-neighborhood. 
+% 
+% REQUIRED INPUT ARGUMENTS
+% 
+%  topol          Map grid dimensions.
+%        (struct) topology struct or map struct, the topology 
+%                 (msize, lattice, shape) of the map is taken from 
+%                 the appropriate fields (see e.g. SOM_SET)
+%        (vector) the vector which gives the size of the map grid
+%                 (msize-field of the topology struct).
+%  
+% OPTIONAL INPUT ARGUMENTS 
+% 
+%  lattice (string) The map lattice, either 'rect' or 'hexa'. Default
+%                   is 'rect'. 'hexa' can only be used with 1- or 
+%                   2-dimensional map grids.
+%  shape   (string) The map shape, either 'sheet', 'cyl' or 'toroid'. 
+%                   Default is 'sheet'. 
+%
+% OUTPUT ARGUMENTS
+%
+%  Ne1   (matrix) sparse matrix indicating units in 1-neighborhood
+%                 by 1, all others have value 0 (including the unit itself!),
+%                 size is [munits munits]
+%
+% EXAMPLES
+%
+% Simplest case:
+%  Ne1 = som_unit_neighs(sTopol);
+%  Ne1 = som_unit_neighs(sMap.topol);
+%  Ne1 = som_unit_neighs(msize);
+%  Ne1 = som_unit_neighs([10 10]);
+%
+% If topology is given as vector, lattice is 'rect' and shape is 'sheet'
+% by default. To change these, you can use the optional arguments:
+%  Ne1 = som_unit_neighs(msize, 'hexa', 'toroid');
+%
+% The neighbors can also be calculated for high-dimensional grids:
+%  Ne1 = som_unit_neighs([4 4 4 4 4 4]);
+%
+% SEE ALSO
+% 
+%  som_neighborhood  Calculate N-neighborhoods of map units.
+%  som_unit_coords   Calculate grid coordinates.
+%  som_unit_dists    Calculate interunit distances.
+%  som_connection    Connection matrix.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 141097
+% Version 2.0beta juuso 101199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check arguments 
+
+error(nargchk(1, 3, nargin));
+
+% default values
+sTopol = som_set('som_topol','lattice','rect');
+
+% topol
+if isstruct(topol), 
+  switch topol.type, 
+  case 'som_map', sTopol = topol.topol;
+  case 'som_topol', sTopol = topol;
+  end
+elseif iscell(topol), 
+  for i=1:length(topol), 
+    if isnumeric(topol{i}), sTopol.msize = topol{i}; 
+    elseif ischar(topol{i}),  
+      switch topol{i}, 
+      case {'rect','hexa'}, sTopol.lattice = topol{i}; 
+      case {'sheet','cyl','toroid'}, sTopol.shape = topol{i}; 
+      end
+    end
+  end
+else
+  sTopol.msize = topol;
+end
+if prod(sTopol.msize)==0, error('Map size is 0.'); end
+
+% lattice
+if nargin>1 & ~isempty(lattice) & ~isnan(lattice), sTopol.lattice = lattice; end
+
+% shape 
+if nargin>2 & ~isempty(shape) & ~isnan(shape), sTopol.shape = shape; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Action
+
+% distances between each map unit
+Ud = som_unit_dists(sTopol);
+
+% 1-neighborhood are those units the distance of which is equal to 1
+munits = prod(sTopol.msize);
+Ne1 = sparse(zeros(munits));
+for i=1:munits, 
+  inds = find(Ud(i,:)<1.01 & Ud(i,:)>0); % allow for rounding error
+  Ne1(i,inds) = 1;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_use_vs1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function som_use_vs1()
+
+% SOM_USE_VS1  Use SOM Toolbox version 1.
+%
+% Removes SOM Toolbox version 2 from the path and adds version 1 there
+% instead. Before doing this, remember to convert any version 2 structs you
+% will need to the corresponding version 1 structs using function SOM_VS2TO1.
+%
+% See also  SOM_USE_VS2, SOM_VS1TO2, SOM_VS2TO1, PATHTOOL.
+
+rmpath /share/somtoolbox/www/package/codes2
+
+s=path; 
+p=findstr(s,'/share/matlab5'); p=p(1);
+i=p+12; while ~strcmp(s(i),'/'), i=i+1; end
+r=strcat(s(p:i),'toolbox/somtoolbox');
+addpath(r)
+
+fprintf(1,'Version 1 of SOM Toolbox now in use.\n');
+fprintf(1,'Use som_vs2to1 function to convert any vs2 structs to vs1.\n')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_use_vs2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+function som_use_vs2()
+
+% SOM_USE_VS2  Use SOM Toolbox version 2.
+%
+% Removes SOM Toolbox version 1 from the path and adds version 2
+% there instead. You can use function SOM_VS1TO2 to convert 
+% any version 1 structs to the corresponding version 2 structs.
+%
+% See also  SOM_USE_VS1, SOM_VS1TO2, SOM_VS2TO1, PATHTOOL.
+
+s=path; p=findstr(s,'somtoolbox'); 
+while any(p), 
+  p=p(1); 
+  i=p; while i<length(s) & ~strcmp(s(i),':'), i=i+1; end
+  if strcmp(s(i),':'), i=i-1; end
+  j=p; while j>1         & ~strcmp(s(j),':'), j=j-1; end
+  if strcmp(s(j),':'), j=j+1; end
+  r=s(j:i);
+  rmpath(r);
+  s=path; p=findstr(s,'somtoolbox'); 
+end
+
+addpath /share/somtoolbox/www/package/codes2
+
+fprintf(1,'Version 2 of SOM Toolbox now in use.\n');
+fprintf(1,'Latest changes to SOM Toolbox: August 22nd 2000\n');
+fprintf(1,' see /share/somtoolbox/vs2/changelog.txt\n');
+fprintf(1,'Use som_vs1to2 function to convert any vs1 structs to vs2.\n')
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_vis_coords.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,153 @@
+function unit_coord=som_vis_coords(lattice, msize)
+
+%SOM_VIS_COORDS Unit coordinates used in visualizations.
+% 
+% Co = som_vis_coords(lattice, msize)
+%
+%  Co = som_vis_coords('hexa',[10 7])
+%  Co = som_vis_coords('rectU',[10 7])
+%
+%  Input and output arguments: 
+%   lattice   (string) 'hexa', 'rect', 'hexaU' or 'rectU'
+%   msize     (vector) grid size in a 1x2 vector    
+%
+%   Co        (matrix) Mx2 matrix of unit coordinates, where 
+%               M=prod(msize) for 'hexa' and 'rect', and 
+%               M=(2*msize(1)-1)*(2*msize(2)-1) for 'hexaU' and 'rectU'
+%
+% This function calculates the coordinates of map units on a 'sheet'
+% shaped map with either 'hexa' or 'rect' lattice as used in the
+% visualizations. Note that this slightly different from the
+% coordinates provided by SOM_UNIT_COORDS function. 
+%
+% 'rectU' and 'hexaU' gives the coordinates of both units and the
+% connections for u-matrix visualizations.
+%
+% For more help, try 'type som_vis_coords' or check out online documentation.
+% See also SOM_UNIT_COORDS, SOM_UMAT, SOM_CPLANE, SOM_GRID.
+
+%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% PURPOSE 
+% 
+% Returns coordinates of the map units for map visualization
+%
+% SYNTAX
+%
+%  Co = som_vis_coords(lattice, msize)
+%
+% DESCRIPTION
+%
+% This function calculates the coordinates of map units in 'hexa' and
+% 'rect' lattices in 'sheet' shaped map for visualization purposes. It
+% differs from SOM_UNIT_COORDS in the sense that hexagonal lattice is
+% calculated in a "wrong" way in order to get integer coordinates for
+% the units. Another difference is that it may be used to calculate
+% the coordinates of units _and_ the center points of the lines
+% connecting them (edges) by using 'hexaU' or 'rectU' for lattice. 
+% This property may be used for drawing u-matrices.
+%
+% The unit number 1 is set to (ij) coordinates (1,1)+shift
+%                 2                            (2,1)+shift
+%
+%  ... columnwise
+% 
+%             n-1th                        (n1-1,n2)+shift
+%             nth                            (n1,n2)+shift
+%
+% where grid size = [n1 n2] and shift is zero, except for 
+% the even lines of 'hexa' lattice, for which it is +0.5.
+%
+% For 'rectU' and 'hexaU' the unit coordinates are the same and the
+% coordinates for connections are set according to these. In this case
+% the ordering of the coordinates is the following:
+%   let
+%     U  = som_umat(sMap); U=U(:); % make U a column vector
+%     Uc = som_vis_coords(sMap.topol.lattice, sMap.topol.msize); 
+%   now the kth row of matrix Uc, i.e. Uc(k,:), contains the coordinates 
+%   for value U(k). 
+%
+% REQUIRED INPUT ARGUMENTS 
+%
+%  lattice  (string) The local topology of the units: 
+%                    'hexa', 'rect', 'hexaU' or 'rectU'
+%  msize    (vector) size 1x2, defining the map grid size. 
+%                    Notice that only 2-dimensional grids
+%                    are allowed.
+%
+% OUTPUT ARGUMENTS
+% 
+%  Co       (matrix) size Mx2, giving the coordinates for each unit.
+%                    M=prod(msize) for 'hexa' and 'rect', and 
+%                    M=(2*msize(1)-1)*(2*msize(2)-1) for 'hexaU' and 'rectU'
+%
+% FEATURES
+% 
+% Only 'sheet' shaped maps are considered. If coordinates for 'toroid'
+% or 'cyl' topologies are required, you must use SOM_UNIT_COORDS
+% instead.
+%
+% EXAMPLES
+%
+% Though this is mainly a subroutine for visualizations it may be
+% used, e.g., in the following manner:
+%
+% % This makes a hexagonal lattice, where the units are rectangular
+% % instead of hexagons.
+%    som_cplane('rect',som_vis_coords('hexa',[10 7]),'none');
+%
+% % Let's make a map and calculate a u-matrix: 
+%    sM=som_make(data,'msize',[10 7],'lattice','hexa');
+%    u=som_umat(sM); u=u(:);
+% % Now, these produce equivalent results:
+%    som_cplane('hexaU',[10 7],u);
+%    som_cplane(vis_patch('hexa')/2,som_vis_coords('hexaU',[10 7]),u);
+%
+% SEE ALSO
+%
+% som_grid         Visualization of a SOM grid
+% som_cplane       Visualize a 2D component plane, u-matrix or color plane
+% som_barplane     Visualize the map prototype vectors as bar diagrams
+% som_plotplane    Visualize the map prototype vectors as line graphs
+% som_pieplane     Visualize the map prototype vectors as pie charts
+% som_unit_coords  Locations of units on the SOM grid
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 201099 juuso 261199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if ~vis_valuetype(msize,{'1x2'}),
+  error('msize must be a 1x2 vector.')
+end
+
+if vis_valuetype(lattice,{'string'})
+  switch lattice
+  case {'hexa', 'rect'}
+    munits=prod(msize);
+    unit_coord(:,1)=reshape(repmat([1:msize(2)],msize(1),1),1,munits)';
+    unit_coord(:,2)=repmat([1:msize(1)]',msize(2),1);
+    if strcmp(lattice,'hexa')
+      % Move even rows by .5
+      d=rem(unit_coord(:,2),2) == 0;   
+      unit_coord(d,1)=unit_coord(d,1)+.5;
+    end
+  case {'hexaU','rectU'}
+    msize=2*msize-1; munits=prod(msize);
+    unit_coord(:,1)=reshape(repmat([1:msize(2)],msize(1),1),1,munits)';
+    unit_coord(:,2)=repmat([1:msize(1)]',msize(2),1);
+    if strcmp(lattice,'hexaU')
+      d=rem(unit_coord(:,2),2) == 0;   
+      unit_coord(d,1)=unit_coord(d,1)+.5;
+      d=rem(unit_coord(:,2)+1,4) == 0; 
+      unit_coord(d,1)=unit_coord(d,1)+1;
+    end
+    unit_coord=unit_coord/2+.5;
+  otherwise
+    error([ 'Unknown lattice ''' lattice '''.']);
+  end
+else
+  error('Lattice must be a string.');
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_vs1to2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,262 @@
+function sS = som_vs1to2(sS)
+
+%SOM_VS1TO2 Convert version 1 structure to version 2.
+%
+% sSnew = som_vs1to2(sSold)
+%
+%  sMnew = som_vs1to2(sMold);  
+%  sDnew = som_vs1to2(sDold);  
+%
+%  Input and output arguments: 
+%   sSold   (struct) a SOM Toolbox version 1 structure
+%   sSnew   (struct) a SOM Toolbox version 2 structure
+%
+% For more help, try 'type som_vs1to2' or check out online documentation.
+% See also  SOM_SET, SOM_VS2TO1.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_vs1to2
+%
+% PURPOSE
+%
+% Transforms SOM Toolbox 1 version structs from to 2 version structs.
+%
+% SYNTAX
+%
+%  sS2 = som_vs1to2(sS1)
+%
+% DESCRIPTION
+%
+% This function is offered to allow the change of old map and data structs
+% to new ones. There are quite a lot of changes between the versions,
+% especially in the map struct, and this function makes it easy to update 
+% the structs.
+%
+% WARNING!
+%
+% 'som_unit_norm' normalization type is not supported by version 2,
+% so this type of normalization will be lost.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  sS1       (struct) any SOM Toolbox version 1 struct (map, data, 
+%                     training or normalization struct)
+%
+% OUTPUT ARGUMENTS
+% 
+%  sS2       (struct) the corresponding SOM Toolbox 2 version struct
+%
+% EXAMPLES
+%
+%  sM = som_vs1to2(sMold);
+%  sD = som_vs1to2(sDold);
+%  sT = som_vs1to2(sMold.train_sequence{1});
+%  sN = som_vs1to2(sDold.normalization); 
+%
+% SEE ALSO
+% 
+%  som_set          Set values and create SOM Toolbox structs.
+%  som_vs2to1       Transform structs from version 2.0 to 1.0.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 101199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(1, 1, nargin));   % check no. of input arguments is correct
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% set field values
+
+if isfield(sS,'codebook'), type='som_map'; 
+elseif isfield(sS,'data'), type='som_data'; 
+elseif isfield(sS,'algorithm'), type = 'som_train';
+elseif isfield(sS,'inv_params'), type = 'som_norm'; 
+else
+  error('Unrecognized input struct.'); 
+end
+
+switch type, 
+ case 'som_map',
+  msize = sS.msize; munits = prod(msize); dim = prod(size(sS.codebook))/munits; 
+  M = reshape(sS.codebook,[munits dim]);
+
+  % topology
+  if strcmp(sS.shape,'rect'), shape = 'sheet'; else shape = sS.shape; end
+  sTopol = struct('type','som_topol','msize',msize,'lattice',sS.lattice,'shape',shape);
+  
+  % labels
+  labels = cell(munits,1);
+  for i=1:munits, 
+    for j=1:length(sS.labels{i}), labels{i,j} = sS.labels{i}{j}; end
+  end
+  
+  % trainhist
+  tl = length(sS.train_sequence); 
+  if strcmp(sS.init_type,'linear'); alg = 'lininit'; else alg = 'randinit'; end
+  trh = struct('type','som_train');
+  trh.algorithm = alg;
+  trh.neigh = sS.neigh;
+  trh.mask = sS.mask;
+  trh.data_name = sS.data_name; 
+  trh.radius_ini = NaN;
+  trh.radius_fin = NaN;
+  trh.alpha_ini = NaN; 
+  trh.alpha_type = '';
+  trh.trainlen = NaN;
+  trh.time = '';
+  for i=1:tl, 
+    trh(i+1) = som_vs1to2(sS.train_sequence{i});     
+    trh(i+1).mask = sS.mask;
+    trh(i+1).neigh = sS.neigh;
+    trh(i+1).data_name = sS.data_name;
+  end
+  
+  % component normalizations
+  cnorm = som_vs1to2(sS.normalization); 
+  if isempty(cnorm), 
+    cnorm = cell(dim,1);
+  elseif length(cnorm) ~= dim, 
+    warning('Incorrect number of normalizations. Normalizations ignored.\n');	    
+    cnorm = cell(dim,1);
+  else
+    if strcmp(cnorm{1}.method,'histD'),
+      M = redo_hist_norm(M,sS.normalization.inv_params,cnorm);
+    end
+  end     
+  
+  % map
+  sSnew = struct('type','som_map');
+  sSnew.codebook = M;
+  sSnew.topol = sTopol;
+  sSnew.labels = labels;
+  sSnew.neigh = sS.neigh;
+  sSnew.mask = sS.mask;
+  sSnew.trainhist = trh;
+  sSnew.name = sS.name;
+  sSnew.comp_norm = cnorm;
+  sSnew.comp_names = sS.comp_names;
+  
+ case 'som_data',
+  [dlen dim] = size(sS.data);
+  
+  % component normalizations
+  cnorm = som_vs1to2(sS.normalization);
+  if isempty(cnorm), 
+    cnorm = cell(dim,1);
+  elseif length(cnorm) ~= dim, 
+    warning('Incorrect number of normalizations. Normalizations ignored.\n');
+    cnorm = cell(dim,1);
+  else
+    if strcmp(cnorm{1}.method,'histD'),
+      sS.data = redo_hist_norm(sS.data,sS.normalization.inv_params,cnorm);
+    end     
+  end
+
+  % data
+  sSnew = struct('type','som_data');
+  sSnew.data = sS.data;
+  sSnew.name = sS.name;
+  sSnew.labels = sS.labels;
+  sSnew.comp_names = sS.comp_names;
+  sSnew.comp_norm = cnorm;
+  sSnew.label_names = []; 
+  
+ case 'som_norm',       
+  if isempty(sS.inv_params), 
+    sSnew = []; 
+  else 
+    dim = size(sS.inv_params,2);      
+    sSnew = cell(dim,1);
+    switch sS.name, 
+     case 'som_var_norm',  method = 'var'; 
+     case 'som_lin_norm',  method = 'range'; 
+     case 'som_hist_norm', method = 'histD'; 
+     case 'som_unit_norm', method = '';
+      warning(['Normalization method ''som_unit_norm'' is not available' ...
+	       ' in version 2 of SOM Toolbox.\n']);
+    end
+    if ~isempty(method), 
+      for i=1:dim, 
+	sSnew{i} = struct('type','som_norm');
+	sSnew{i}.method = method;
+	sSnew{i}.params = [];
+	sSnew{i}.status = 'done';
+	switch method, 
+	 case 'var',   
+	  me = sS.inv_params(1,i); st = sS.inv_params(2,i);
+	  sSnew{i}.params = [me, st];
+	 case 'range', 
+	  mi = sS.inv_params(1,i); ma = sS.inv_params(2,i); 
+	  sSnew{i}.params = [mi, ma-mi]; 
+	 case 'histD',
+	  vals = sS.inv_params(1:(end-1),i);
+	  bins = sum(isfinite(vals));
+	  vals = vals(1:bins);
+	  sSnew{i}.params = vals;
+	end	  
+      end
+    end
+  end
+  
+ case 'som_train', 
+  sSnew = struct('type','som_train');
+  sSnew.algorithm = sS.algorithm;
+  sSnew.neigh = 'gaussian';
+  sSnew.mask = [];
+  sSnew.data_name = 'unknown'; 
+  sSnew.radius_ini = sS.radius_ini;
+  sSnew.radius_fin = sS.radius_fin;
+  sSnew.alpha_ini = sS.alpha_ini;
+  sSnew.alpha_type = sS.alpha_type;
+  sSnew.trainlen = sS.trainlen;
+  sSnew.time = sS.time;
+  
+ case 'som_topol', 
+  disp('Version 1.0 of SOM Toolbox did not have topology structure.\n');
+ 
+ case {'som_grid','som_vis'}
+  disp('Version 1.0 of SOM Toolbox did not have visualization structs.\n');
+  
+ otherwise, 
+  
+  error('Unrecognized struct.');
+end
+
+sS = sSnew;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+function D = redo_hist_norm(D,inv_params,cnorm)
+
+  dim = size(D,2);
+
+  % first - undo the old way
+  n_bins = inv_params(end,:);
+  D   = round(D * sparse(diag(n_bins)));
+  for i = 1:dim,
+    if any(isnan(D(:, i))), D(isnan(D(:, i)), i) = n_bins(i); end
+    D(:, i) = inv_params(D(:, i), i);
+  end
+  % then - redo the new way
+  for i=1:dim, 
+    bins = length(cnorm{i}.params);
+    x = D(:,i);
+    inds = find(~isnan(x) & ~isinf(x))';
+    for j = inds, 
+      [dummy ind] = min(abs(x(j) - cnorm{i}.params));
+      if x(j) > cnorm{i}.params(ind) & ind < bins, x(j) = ind + 1;  
+      else x(j) = ind;
+      end
+    end
+    D(:,i) = (x-1)/(bins-1);
+  end
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_vs2to1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,298 @@
+function sS = som_vs2to1(sS)
+
+%SOM_VS2TO1 Convert version 2 struct to version 1.
+%
+% sSold = som_vs2to1(sSnew)
+%
+%  sMold = som_vs2to1(sMnew);  
+%  sDold = som_vs2to1(sDnew);  
+%
+%  Input and output arguments: 
+%   sSnew   (struct) a SOM Toolbox version 2 struct
+%   sSold   (struct) a SOM Toolbox version 1 struct
+%
+% For more help, try 'type som_vs2to1' or check out online documentation.
+% See also  SOM_SET, SOM_VS1TO2.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_vs2to1
+%
+% PURPOSE
+%
+% Converts SOM Toolbox version 2 structs to version 1 structs.
+%
+% SYNTAX
+%
+%  sS1 = som_vs2to1(sS2)
+%
+% DESCRIPTION
+%
+% This function is offered to allow the change of new map and data structs
+% to old ones. There are quite a lot of changes between the versions,
+% especially in the map struct, and this function makes it possible to 
+% use the old functions with new structs.
+%
+% Note that part of the information is lost in the conversion. Especially, 
+% training history is lost, and the normalization is, except in the simplest
+% cases (like all have 'range' or 'var' normalization) screwed up.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  sS2       (struct) som SOM Toolbox version 2.0 struct (map, data, 
+%                     training or normalization struct)
+%
+% OUTPUT ARGUMENTS
+% 
+%  sS1       (struct) the corresponding SOM Toolbox version 2.0 struct
+%
+% EXAMPLES
+%
+%  sM = som_vs2to1(sMnew);
+%  sD = som_vs2to1(sDnew);
+%  sT = som_vs2to1(sMnew.trainhist(1));
+%
+% SEE ALSO
+% 
+%  som_set          Set values and create SOM Toolbox structs.
+%  som_vs1to2       Transform structs from 1.0 version to 2.0.   
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 101199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(1, 1, nargin));   % check no. of input arguments is correct
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% set field values
+  
+switch sS.type, 
+ case 'som_map',
+  msize = sS.topol.msize; 
+  [munits dim] = size(sS.codebook);
+  
+  % topology
+  if strcmp(sS.topol.shape,'sheet'), shape = 'rect'; 
+  else shape = sS.shape; 
+  end
+  
+  % labels
+  labels = cell(munits,1);
+  nl = size(sS.labels,2);
+  for i=1:munits, 
+    labels{i} = cell(nl,1);      
+    for j=1:nl, labels{i}{j} = sS.labels{i,j}; end
+  end
+  
+  % trainhist 
+  tl = length(sS.trainhist); 
+  if tl==0 | strcmp(sS.trainhist(1).algorithm,'lininit'), 
+    init_type = 'linear';
+  else
+    init_type = 'random';
+  end
+  if tl>1, 
+    for i=2:tl, 
+      train_seq{i-1} = som_vs2to1(sS.trainhist(i));
+    end
+    train_type = sS.trainhist(tl).algorithm; 
+  else
+    train_seq = [];
+    train_type = 'batch';
+  end 
+  if tl>0, data_name = sS.trainhist(tl).data_name; else data_name = ''; end
+  
+  % component normalizations 
+  sN = convert_normalizations(sS.comp_norm);   
+  if strcmp(sN.name,'som_hist_norm'), 
+    sS.codebook = redo_hist_norm(sS.codebook,sS.comp_norm,sN);
+  end
+  
+  % map 
+  sSnew = struct('init_type', 'linear', 'train_type', 'batch', 'lattice' ,...
+		 'hexa', 'shape', 'rect', 'neigh', 'gaussian', 'msize', msize, ...
+		 'train_sequence', [], 'codebook', [], 'labels', [], ...
+		 'mask', [], 'data_name', 'unnamed', 'normalization', [], ...
+		 'comp_names', [], 'name', 'unnamed');
+  sSnew.init_type = init_type;
+  sSnew.train_type = train_type;
+  sSnew.lattice = sS.topol.lattice;
+  sSnew.shape = shape;
+  sSnew.neigh = sS.neigh;
+  sSnew.msize = sS.topol.msize;
+  sSnew.train_sequence = train_seq;
+  sSnew.codebook = reshape(sS.codebook,[sS.topol.msize dim]);
+  sSnew.labels = labels;
+  sSnew.mask = sS.mask;
+  sSnew.data_name = data_name;
+  sSnew.normalization = sN;
+  sSnew.comp_names = sS.comp_names;
+  sSnew.name = sS.name;
+  
+ case 'som_data',
+  [dlen dim] = size(sS.data);
+  
+  % component normalizations
+  sN = convert_normalizations(sS.comp_norm); 
+  if strcmp(sN.name,'som_hist_norm'), 
+    sS.codebook = redo_hist_norm(sS.codebook,sS.comp_norm,sN);
+  end
+  
+  % data
+  sSnew = struct('data', [], 'name', '', 'labels' , [], 'comp_names', ...
+		 [], 'normalization', []);
+  sSnew.data = sS.data;
+  sSnew.name = sS.name;
+  sSnew.labels = sS.labels;
+  sSnew.comp_names = sS.comp_names;
+  sSnew.normalization = sN;
+  
+ case 'som_norm',     
+  sSnew = struct('name','som_var_norm','inv_params',[]);
+  
+  switch sS.method, 
+   case 'var',   sSnew.name = 'som_var_norm';
+   case 'range', sSnew.name = 'som_lin_norm';
+   case 'histD', sSnew.name = 'som_hist_norm';
+   otherwise, 
+    warning(['Method ' method ' does not exist in version 1.'])
+  end
+
+  if strcmp(sS.status,'done'),   
+    switch sS.method, 
+     case 'var', 
+      sSnew.inv_params = zeros(2,1);
+      sSnew.inv_params(1) = sS.params(1);
+      sSnew.inv_params(2) = sS.params(2);
+     case 'range', 
+      sSnew.inv_params = zeros(2,1);
+      sSnew.inv_params(1) = sS.params(1);
+      sSnew.inv_params(2) = sS.params(2) + sS.params(1);;
+     case 'histD',
+      bins = length(sS.params);
+      sSnew.inv_params = zeros(bins+1,1) + Inf;
+      sSnew.inv_params(1:bins,i) = sS.params;
+      sSnew.inv_params(end,i) = bins; 
+    end
+  end
+  
+ case 'som_train', 
+  sSnew = struct('algorithm', sS.algorithm, 'radius_ini', ...
+		 sS.radius_ini, 'radius_fin', sS.radius_fin, 'alpha_ini', ...
+		 sS.alpha_ini, 'alpha_type', sS.alpha_type, 'trainlen', sS.trainlen, ...
+		 'qerror', NaN, 'time', sS.time);
+  
+ case 'som_topol', 
+  disp('Version 1 of SOM Toolbox did not have topology structure.\n');
+  
+ otherwise, 
+  
+  error('Unrecognized struct.');
+end
+
+sS = sSnew;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% subfunctions
+
+function sN = convert_normalizations(cnorm)
+
+  dim = length(cnorm);
+  sN = struct('name','som_var_norm','inv_params',[]);
+    
+  % check that there is exactly one normalization per component
+  % and that their status and method is the same
+  ok = 1;
+  nof = zeros(dim,1);
+  for i=1:dim, nof(i) = length(cnorm{i}); end
+  if any(nof>1), ok=0; 
+  elseif any(nof==1) & any(nof==0), ok=0;
+  elseif any(nof>0), 
+    status = cnorm{1}.status;
+    method = cnorm{1}.method;
+    for i=2:dim, 
+      if ~strcmp(cnorm{i}.status,status) | ~strcmp(cnorm{i}.method,method), 
+	ok = 0; 
+      end
+    end    
+  elseif all(nof==0), 
+    return;
+  end
+  if ~ok, 
+    warning(['Normalization could not be converted. All variables can' ...
+	     ' only be normalized with a single, and same, method.']);
+    return;
+  end  
+  
+  % method name
+  switch method, 
+   case 'var', sN.name = 'som_var_norm';
+   case 'range', sN.name = 'som_lin_norm';
+   case 'histD', sN.name = 'som_hist_norm';
+   otherwise, 
+    warning(['Normalization could not be converted. Method ' method ...
+	     'does not exist in version 1.']);
+    return;
+  end
+
+  % if not done, inv_params is empty
+  if ~strcmp(status,'done'), return; end  
+   
+  % ok, make the conversion  
+  switch method, 
+   case 'var',   
+    sN.inv_params = zeros(2,dim);
+    for i=1:dim, 
+      sN.inv_params(1,i) = cnorm{i}.params(1);
+      sN.inv_params(2,i) = cnorm{i}.params(2);
+    end
+   case 'range',
+    sN.inv_params = zeros(2,dim);
+    for i=1:dim, 
+      sN.inv_params(1,i) = cnorm{i}.params(1);
+      sN.inv_params(2,i) = cnorm{i}.params(2) + cnorm{i}.params(1);
+    end
+   case 'histD',     
+    bins = zeros(dim,1); 
+    for i=1:dim, bins(i) = length(cnorm{i}.params); end
+    m = max(bins); 
+    sN.inv_params = zeros(m+1,dim) + Inf;
+    for i=1:dim, 
+      sN.inv_params(1:bins(i),i) = cnorm{i}.params;
+      if bins(i)<m, sN.inv_params(bins(i)+1,i) = NaN; end
+      sN.inv_params(end,i) = bins(i); 
+    end
+  end
+
+function D = redo_hist_norm(D,cnorm,sN)
+
+  dim = size(D,2);
+
+  % first - undo the new way
+  for i=1:dim, 
+    bins = length(cnorm{i}.params);
+    D(:,i) = round(D(:,i)*(bins-1)+1);
+    inds = find(~isnan(D(:,i)) & ~isinf(D(:,i)));
+    D(inds,i) = cnorm{i}.params(D(inds,i));
+  end  
+  % then - redo the old way
+  n_bins = sN.inv_params(size(sN.inv_params,1),:);
+  for j = 1:dim,        
+    for i = 1:size(D, 1)
+      if ~isnan(D(i, j)),
+	[d ind] = min(abs(D(i, j) - sN.inv_params(1:n_bins(j), j)));
+	if (D(i, j) - sN.inv_params(ind, j)) > 0 & ind < n_bins(j),
+	  D(i, j) = ind + 1;   
+	else                   
+	  D(i, j) = ind;
+	end
+      end
+    end
+  end
+  D = D * sparse(diag(1 ./ n_bins));
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_write_cod.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,187 @@
+function som_write_cod(sMap, filename)
+
+%SOM_WRITE_COD Writes a map struct to ascii file in SOM_PAK format.
+%
+% som_write_cod(sMap,filename)
+%
+%  som_write_cod(sMap,'map1.cod');
+%
+%  Input and output arguments: 
+%   sMap        (struct) self-organizing map structure
+%   filename    (string) name of input file
+%
+% Note that much of the information in the map struct is lost.
+% Typically, when saving map structs into files use the 'save' command.
+%
+% For more help, try 'type som_write_cod' or check out online documentation.
+% See also SOM_READ_COD, SOM_READ_DATA, SOM_WRITE_DATA.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_write_cod
+%
+% PURPOSE
+%
+% Writes a self-organizing map struct to a file in SOM_PAK format.
+%
+% SYNTAX
+%
+%  som_write_cod(sMap,filename); 
+%
+% DESCRIPTION
+%
+% This function is offered for compatibility with SOM_PAK, a SOM 
+% software package in C. It writes map struct to files in SOM_PAK format.
+%
+% See SOM_READ_COD for description of the SOM_PAK map file format.
+% Because the SOM_PAK package does not support many of the features and
+% options of the SOM Toolbox, some of the information is changed, or even
+% lost. 
+%
+% SOM_PAK does not support 3- or higher dimensional map grids. These cannot
+%         be exported using this function.  
+% SOM_PAK always supposes that the map has 'sheet' shape. 
+% SOM_PAK only supports 'bubble' and 'gaussian' neighborhood functions.
+%         Any other neighborhood function is changed to 'gaussian'.
+% SOM_PAK doesn't support component names. However, the component names are
+%         written on a comment line which begins with '#n '. Any spaces (' ') 
+%         in the component names are replaced with underscores ('_').      
+% Information on map name, mask, training history and normalizations is lost.
+%
+% This function is only offered for compatibility with SOM_PAK. In general,
+% when saving map structs in files, use 'save filename.mat sMap'. This is
+% faster and retains all information of the map.
+% 
+% REQUIRED INPUT ARGUMENTS
+%
+%  sMap       (struct) the SOM struct to be written
+%  filename   (string) the name of the input file
+%
+% EXAMPLES
+%
+%  som_write_cod(sMap,'map1.cod');
+%
+% SEE ALSO
+% 
+%  som_read_cod     Read a map from a file in SOM_PAK format.
+%  som_read_data    Reads data from an ascii file.
+%  som_write_data   Writes data struct into a file in SOM_PAK format.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta ecco 221097
+% Version 2.0beta ecco 030899, juuso 151199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments and initialize
+
+error(nargchk(2, 2, nargin))  % check no. of input args is correct
+
+% sMap
+msize = sMap.topol.msize;           % map grid size
+mdim  = length(msize);              % map grid dimension
+[munits dim] = size(sMap.codebook); % input space dimension
+
+% map dimension check:
+% map dimensions higher than 2 are not supported by SOM_PAK
+if mdim > 2,      
+  error('Cannot write maps with higher dimension than two');
+end
+
+% in SOM_PAK the xy-indexing is used, while in Matlab ij-indexing
+% therefore, the codebook vectors have to be reorganized 
+order = reshape([1:munits],msize);
+order = reshape(order',[munits 1]);
+msize = fliplr(msize);
+
+% open output file
+fid = fopen(filename, 'w');
+if fid < 0,
+  error(['Cannot open file ' filename]);
+end
+
+% check version
+v = version;
+ver_53_or_newer = (str2num(v(1:3)) >= 5.3);
+
+
+[lines numlabs] = size(sMap.labels);
+has_labels = zeros(lines, 1);
+if ver_53_or_newer
+  has_labels = sum((~(cellfun('isempty', sMap.labels))), 2);
+else
+  for i = 1:lines
+    for j = 1:numlabs
+      if ~isempty(sMap.labels{i,j}) 
+	has_labels(i) = 1; break; 
+      end
+    end
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% write map into a file
+
+% write header
+
+fprintf(fid, '%d %s ', dim, sMap.topol.lattice); % dimension and lattice
+fprintf(fid, '%d ', msize);                      % map size
+% neighborhood type ('ep' and 'cutgauss' are not supported by SOM_PAK; 
+% they are converted to 'gaussian')
+if strcmp(sMap.neigh,'bubble'), fprintf(fid, 'bubble\n');
+else 
+  if ~strcmp(sMap.neigh,'gaussian'), 
+    warning(['Neighborhood type ''' sMap.neigh ''' converted to ''gaussian''']);
+  end
+  fprintf(fid,'gaussian\n'); 
+end
+
+% write the component names as a SOM_PAK comment line
+
+fprintf(fid,'#n ');
+for i=1:dim, fprintf(fid, '%s ', strrep(sMap.comp_names{i},' ','_')); end
+fprintf(fid,'\n');
+
+% write codebook
+
+form  = [repmat('%g ',[1 dim]) '\n'];
+if ~has_labels  % no labels; fast
+  fprintf(fid, form, sMap.codebook(order,:)');
+else            % has labels; slow
+  for i=1:munits, 
+    fprintf(fid, '%g ', sMap.codebook(order(i),:));
+
+    if has_labels(order(i))
+      temp = '';
+      if ver_53_or_newer
+	nonempty = ~(cellfun('isempty', sMap.labels(i,:)));
+      else
+	for j = 1:numlabs, nonempty(j) = ~isempty(sMap.labels{i, j}); end
+      end
+      labs = char(sMap.labels{order(i), nonempty});
+      labs(:,end + 1) = ' ';
+      temp = reshape(labs',[1 prod(size(labs))]);
+      temp(findstr('  ', temp))='';
+      fprintf(fid, '%s\n', temp(1:end-1));
+    else
+      fprintf(fid, '\n');
+    end
+  end
+end
+
+% close file
+
+if fclose(fid) 
+  error(['Cannot close file ' filename]);
+else
+  fprintf(2, 'map write ok\n');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_write_data.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,210 @@
+function som_write_data(sData, filename, missing)
+
+%SOM_WRITE_DATA Writes data structs/matrices to a file in SOM_PAK format.
+%
+% som_write_data(data,filename,[missing])
+%
+%  som_write_data(sD,'system.data')
+%  som_write_data(D,'system.data','*')
+%
+%  Input and output arguments ([]'s are optional): 
+%   data        (struct) data struct to be written in the file
+%               (matrix) data matrix
+%   filename    (string) output filename
+%   [missing]   (string) string used to denote missing components (NaNs); 
+%                default is 'NaN'
+%
+% Note that much of the information in the data struct is lost.
+% Typically, when saving data structs into files use the 'save' command.
+%
+% For more help, try 'type som_write_data' or check out online documentation.
+% See also  SOM_READ_DATA, SOM_READ_COD, SOM_WRITE_COD.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_write_data
+%
+% PURPOSE
+%
+% Writes data structs/matrices to a file in SOM_PAK format.
+%
+% SYNTAX
+%
+%  som_write_data(sD,'filename')
+%  som_write_data(D,'filename')
+%  som_write_data(...,'missing')
+%
+% DESCRIPTION
+%
+% This function is offered for compatibility with SOM_PAK, a SOM software
+% package in C. It writes data structs/matrices to a file in SOM_PAK format.
+%
+% See SOM_READ_DATA for a decription of the SOM_PAK data file format. Since
+% the format does not support information on normalizations, that
+% information is lost, as well as the data name. The component names are
+% written on a comment line which begins with '#n' and label names on
+% comment line which begins with '#l', respectively. Any spaces (' ') in the
+% component names and in the label names are replaced with
+% underscores ('_').
+%
+% This function is only offered for compatibility with SOM_PAK. In
+% general, when saving data in files, use 'save filename.mat sData'. This is
+% faster and retains all information of the data struct.
+%
+% The string to use for missing values (NaNs) in the written file can
+% be given with the last argument. Notice that if you use SOM_PAK to
+% read the files, you need to set the SOM_PAK environment variable
+% LVQSOM_MASK_STR accordingly, e.g. to 'NaN' if you use the default
+% replacement. For more information, see the SOM_PAK instructions.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  data        (struct or matrix) data to be written
+%  filename    (string) output filename
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+%  missing     (string) string used to denote missing components (NaNs); 
+%               default is 'NaN'
+%
+% EXAMPLES
+%
+% The basic usage is:
+%  som_write_data(sData,'system.data')
+%
+% To write a data matrix to a file in plain SOM_PAK format, give a
+% data matrix as the first argument: 
+%  som_write_data(D,'system.data')
+%
+% By default, all NaNs in the data matrix are written as 'NaN':s. The
+% third argument can be used to change this:
+%  som_write_data(sData,'system.data','+')
+%  som_write_data(sData,'system.data','missing')
+%
+% SEE ALSO
+%
+%  som_read_data    Reads data from an ascii file.
+%  som_read_cod     Read a map from a file in SOM_PAK format.
+%  som_write_cod    Writes data struct into a file in SOM_PAK format.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta ecco 131197
+% Version 2.0beta ecco 030899 juuso 151199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(2, 3, nargin));  % check no. of input args is correct
+
+% data
+if isstruct(sData)
+  is_struct = 1;
+  D = sData.data;
+else 
+  is_struct = 0;
+  D = sData; 
+end
+[samples dim] = size(D);
+
+% missing
+if nargin == 2, missing = 'NaN'; end
+
+% open output file
+fid = fopen(filename, 'w');
+if fid < 0, error(['Cannot open file ' filename]); end
+
+% check version
+v = version;
+ver_53_or_newer = (str2num(v(1:3)) >= 5.3);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% write data
+
+% write dimension
+
+fprintf(fid, '%d\n', dim);
+
+% write component names as a SOM_PAK comment line
+if is_struct,
+  fprintf(fid,'#n ');                     
+  for i = 1:dim, fprintf(fid, '%s ', strrep(sData.comp_names{i},' ','_')); end
+  fprintf(fid,'\n');                      
+  if ~isempty(sData.label_names)
+    fprintf(fid,'#l ');                     
+    l = length(sData.label_names);
+    for i = 1:l,  fprintf(fid, '%s ', strrep(sData.label_names{i},' ','_')); end
+    fprintf(fid,'\n');                      
+  end
+end
+
+% are there NaNs and/or labels?
+
+has_nans = isnan(sum(D,2)) * (~strcmp(missing, 'NaN'));
+
+has_labels = 0;
+if is_struct
+  [lines numlabs] = size(sData.labels);
+  has_labels = zeros(lines, 1);
+  if ver_53_or_newer
+    has_labels = sum((~(cellfun('isempty', sData.labels))), 2);
+  else
+    for i = 1:lines
+      for j = 1:numlabs
+	if ~isempty(sData.labels{i,j}) 
+	  has_labels(i) = 1; break; 
+	end
+      end
+    end
+  end
+end
+
+% write data
+
+form = [repmat('%g ',[1 dim-1]) '%g\n'];
+
+if ~sum(has_labels) & ~sum(has_nans)    % no NaNs, no labels
+  fprintf(fid, form, D'); 
+elseif ~sum(has_labels)                 % no labels, NaNs
+  fprintf(fid, '%s', strrep(sprintf(form, D'), 'NaN', missing));
+else                                    % labels and NaNs
+  for i = 1:samples
+    if has_nans(i)
+      fprintf(fid, strrep(sprintf('%g ', D(i,:)), 'NaN', missing));
+    else
+      fprintf(fid, '%g ', D(i,:));
+    end
+    
+    if has_labels(i)
+      temp = '';
+      if ver_53_or_newer
+	nonempty = ~(cellfun('isempty', sData.labels(i,:)));
+      else
+	for j = 1:numlabs, nonempty(j) = ~isempty(sData.labels{i, j}); end
+      end
+      labs = char(sData.labels{i, nonempty});
+      labs(:,end + 1) = ' ';
+      temp = reshape(labs',[1 prod(size(labs))]);
+      temp(findstr('  ', temp))='';
+      fprintf(fid, '%s', temp(1:end-1));
+    end
+    fprintf(fid,'\n');
+  end
+end
+
+% close file
+
+if fclose(fid), 
+  error(['Cannot close file ' filename]); 
+else
+  fprintf(2, 'data write ok\n');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_gui.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,69 @@
+function sompak_gui()
+
+%SOMPAK_GUI  A GUI for using SOM_PAK functions from Matlab.
+%
+%  sompak_gui
+%
+% Launches a GUI which allows the use of SOM_PAK functions from
+% Matlab. Notice that to use this function, the SOM_PAK programs must
+% be in your search path, or the variable 'SOM_PAKDIR' which is a
+% string containing the program path, must be defined in the
+% workspace. SOM_PAK programs can be found from:
+% http://www.cis.hut.fi/research/som_lvq_pak.shtml
+%  
+% See also SOM_GUI, SOMPAK_INIT_GUI, SOMPAK_SAMMON_GUI, SOMPAK_TRAIN_GUI.
+
+% Contributed to SOM Toolbox 2.0, February 2nd, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100
+
+h=findobj(get(0,'Children'),'Tag','sompak_gui');
+if ~isempty(h)
+  figure(h);
+  return;
+end
+
+a = figure('Color',[0.8 0.8 0.8], ...
+	'PaperType','a4letter', ...
+	'Position',[689 536 210 70], ...
+	'Tag','sompak_gui');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+        'Callback','sompak_init_gui',...
+	'FontWeight','demi', ...
+	'Position',[8 30 50 20], ...
+	'String','INIT', ...
+	'Tag','Pushbutton1');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+        'Callback','sompak_train_gui',...
+	'FontWeight','demi', ...
+	'Position',[63 30 50 20], ...
+	'String','TRAIN', ...
+	'Tag','Pushbutton2');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+        'Callback','sompak_sammon_gui',...
+	'FontWeight','demi', ...
+	'Position',[118 30 50 20], ...
+	'String','SAMMON', ...
+	'Tag','Pushbutton3');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Callback','close gcf', ...
+	'FontSize',9, ...
+	'FontWeight','demi', ...
+	'Position',[128 5 40 15], ...
+	'String','Close', ...
+	'Tag','Pushbutton4');
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_init.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,211 @@
+function sMap=sompak_init(sData,ft,init_type,cout,ct,xdim,ydim,topol,neigh)
+
+%SOMPAK_INIT Call SOM_PAK initialization programs from Matlab.
+%
+% sMap=sompak_init(sData,ft,init_type,cout,ct,xdim,ydim,topol,neigh)
+%
+% ARGUMENTS  ([]'s are optional and can be given as empty: [] or '')
+%  sData      (struct) data struct
+%             (matrix) data matrix
+%             (string) filename
+%  [ft]       (string) 'pak' or 'box'. Argument must be defined, if input
+%                      file is used.
+%  init_type  (string) string 'rand' or 'linear'
+%  [cout]     (string) filename for output SOM, if argument is not defined
+%                      (i.e. argument is '[]') temporary file '__abcdef' is
+%                      used in operations and *it_is_removed* after 
+%                      operations!!!
+%  [ct]       (string) 'pak' or 'box'. Argument must be defined, if output
+%                      file is used.
+%  xdim       (scalar) Number of units of the map in x-direction.
+%  ydim       (scalar) Number of units of the map in y-direction.
+%  topol      (string) string 'hexa' or 'rect'
+%  neigh      (string) string 'bubble' or 'gaussian'.
+%
+% RETURNS
+%  sMap       (struct) map struct
+%
+% Calls SOM_PAK initialization programs (randinit and lininit) from
+% Matlab. Notice that to use this function, the SOM_PAK programs must
+% be in your search path, or the variable 'SOM_PAKDIR' which is a
+% string containing the program path, must be defined in the
+% workspace. SOM_PAK programs can be found from:
+% http://www.cis.hut.fi/research/som_lvq_pak.shtml
+%  
+% See also SOMPAK_TRAIN, SOMPAK_SAMMON, SOMPAK_INIT_GUI,
+%          SOMPAK_GUI, SOM_LININIT, SOM_RANDINIT.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100
+
+nargchk(9,9,nargin);
+
+NO_FILE = 0;
+if isstruct(sData);
+  sData=sData.data;
+elseif ~(isreal(sData) | isstr(sData))
+  error('Argument ''sData'' must be a struct or a real matrix.');
+else
+  if isempty(ft)
+    if isstr(sData)
+      error('Argument ''file_type'' must be defined when input file is used.');
+    end
+  elseif strcmp(ft,'pak');
+    sData=som_read_data(sData);
+  elseif strcmp(ft,'box')
+    new_var=diff_varname;
+    varnames=evalin('base','who');
+    loadname=eval(cat(2,'who(''-file'',''',sData,''')'));
+    if any(strcmp(loadname{1},evalin('base','who')))
+      assignin('base',new_var,evalin('base',loadname{1}));
+      evalin('base',cat(2,'load(''',sData,''');'));
+      new_var2=diff_varname;
+
+      assignin('base',new_var2,evalin('base',loadname{1}));
+      assignin('base',loadname{1},evalin('base',new_var));
+      evalin('base',cat(2,'clear ',new_var));
+      sData=evalin('base',new_var2);
+      evalin('base',cat(2,'clear ',new_var2));
+    else
+      evalin('base',cat(2,'load(''',sData,''');'));
+      sData=evalin('base',loadname{1});
+      evalin('base',cat(2,'clear ',loadname{1}));
+    end              
+  else
+    error('Argument ''ft'' must be a string ''pak'' or ''box''.');
+  end
+end
+if isstr(init_type)
+  if strcmp(init_type,'rand')
+    if any(strcmp('SOM_PAKDIR',evalin('base','who')))
+      init_command=cat(2,evalin('base','SOM_PAKDIR'),'randinit');
+    else
+      init_command='randinit';
+    end
+  elseif strcmp(init_type,'linear')
+    if any(strcmp('SOM_PAKDIR',evalin('base','who')))
+      init_command=cat(2,evalin('base','SOM_PAKDIR'),'lininit');
+    else
+      init_command='lininit';
+    end
+  else
+    error('Argument ''init_type'' must be string ''rand'' or ''linear''.');
+  end
+else
+  error('Argument ''init_type'' must be string ''rand'' or ''linear''.');
+end
+
+if (isstr(cout) & isempty(cout)) | (~isstr(cout) & isempty(cout))
+  NO_FILE = 1;
+  cout = '__abcdef';
+elseif  ~isstr(cout) & ~isempty(cout)
+  error('Argument ''cout'' must be a string or ''[]''.');
+end
+  
+if ~is_positive_integer(xdim)
+  error('Argument ''xdim'' must be a positive integer.');
+end
+
+if ~is_positive_integer(ydim)
+  error('Argument ''ydim'' must be a positive integer.');
+end
+
+if isstr(topol)
+  if isempty(topol) | (~strcmp(topol,'hexa') & ~strcmp(topol,'rect'))
+    error ('Argument ''topol'' must be either a string ''hexa'' or ''rect''.');
+  end
+else
+  error ('Argument ''topol'' must be either a string ''hexa'' or ''rect''.');  
+end
+
+if isstr(neigh)
+  if isempty(neigh) | (~strcmp(neigh,'bubble') & ~strcmp(neigh,'gaussian'))
+    error(sprintf(cat(2,'Argument ''neigh'' must be either a string ',...
+                        '''bubble'' or ''gaussian''.')));
+  end
+else
+  error(sprintf(cat(2,'Argument ''neigh'' must be either a string ',...
+                       '''bubble'' or ''gaussian''.')));
+end
+
+som_write_data(sData, cout); 
+str=cat(2,init_command,sprintf(' -din %s -cout %s ', cout ,cout),...
+           sprintf('-topol %s ',topol),...
+           sprintf('-neigh %s ',neigh),...
+           sprintf('-xdim %d -ydim %d',xdim,ydim));
+
+if isunix
+  unix(str);
+else
+  dos(str);
+end
+
+sMap=som_read_cod(cout);
+
+if ~NO_FILE
+    if isunix
+      unix(cat(2,'/bin/rm ',cout));
+    else
+      dos(cat(2,'del ',cout));
+    end
+    if strcmp(ct,'pak')
+      som_write_cod(sMap,cout);
+      disp(cat(2,'Output written to the file ',cout,'.'));
+    elseif strcmp(ct,'box')
+      eval(cat(2,'save ',cout,' sMap'));	
+      disp(cat(2,'Output written to the file ',sprintf('''%s.mat''.',cout)));
+    end
+else
+  sMap.name=cat(2,'SOM ',date);
+  if isunix	
+    unix('/bin/rm __abcdef');
+  else
+    dos('del __abcdef');
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bool = is_positive_integer(x)
+
+bool = ~isempty(x) & isreal(x) & all(size(x) == 1) & x > 0;
+if ~isempty(bool)
+  if bool & x~=round(x)
+    bool = 0;
+  end
+else
+  bool = 0;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function str = diff_varname();
+
+array=evalin('base','who');
+
+if isempty(array)
+  str='a';
+  return;
+end
+
+for i=1:length(array)
+  lens(i)=length(array{i});
+end
+
+
+ind=max(lens);
+
+str(1:ind+1)='a';
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_init_gui.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,369 @@
+function sompak_init_gui()
+
+%SOMPAK_INIT_GUI A GUI for using SOM_PAK initialization programs from Matlab.
+%
+%  sompak_init_gui
+%
+% Launches a GUI which allows the use of SOM_PAK initialization
+% programs (randinit and lininit) from Matlab. Notice that to use this
+% function, the SOM_PAK programs must be in your search path, or the
+% variable 'SOM_PAKDIR' which is a string containing the program path,
+% must be defined in the workspace. SOM_PAK programs can be found
+% from: http://www.cis.hut.fi/research/som_lvq_pak.shtml
+%  
+% See also SOMPAK_INIT, SOMPAK_GUI, SOMPAK_SAMMON_GUI,
+%          SOMPAK_TRAIN_GUI, SOM_GUI.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000
+% Copyright (c) by Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100
+
+h=findobj(get(0,'Children'),'Tag','InitGUI');
+
+if ~isempty(h)
+  figure(h);
+  return;
+end
+
+a = figure('Color',[0.8 0.8 0.8], ...
+	'PaperType','a4letter', ...
+	'Position',[483 407 172 440], ...
+	'Tag','InitGUI');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+        'Callback','close gcf',...
+	'FontWeight','demi', ...
+	'Position',[8 20 50 20], ...
+	'String','CLOSE', ...
+	'Tag','Pushbutton1');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Callback','sompak_rb_control init_ok', ...
+	'FontWeight','demi', ...
+	'Position',[86 20 50 20], ...
+	'String','OK', ...
+	'Tag','Pushbutton2');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Position',[8 50 130 300], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 54 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'Position',[45.5 78 55 12], ...
+	'String','INIT TYPE', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+b = uicontrol('Parent',a, ...
+	'Callback','sompak_rb_control linear',...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Position',[14 56 17 16], ...
+	'Style','radiobutton', ...
+	'Tag','LINEAR', ...
+	'Value',1);
+
+udata.inittype = 'linear';
+
+b = uicontrol('Parent',a, ...
+	'Callback','sompak_rb_control rand',...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Position',[73 56 17 16], ...
+	'Style','radiobutton', ...
+	'Tag','RANDOM');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[33 58 30 12], ...
+	'String','Linear', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[91 58 37 12], ...
+	'String','Random', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 96 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'Position',[36.4235 118.588 74 12], ...
+	'String','NEIGHBORHOOD', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+b = uicontrol('Parent',a, ...
+	'Callback','sompak_rb_control bubble',...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Position',[14 98 17 16], ...
+	'Style','radiobutton', ...
+	'Tag','BUBBLE', ...
+	'Value',1);
+
+udata.neigh='bubble';
+
+b = uicontrol('Parent',a, ...
+	'Callback','sompak_rb_control gaussian',...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Position',[73 98 17 16], ...
+	'Style','radiobutton', ...
+	'Tag','GAUSSIAN');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[33 100 32 12], ...
+	'String','Bubble', ...
+	'Style','text', ...
+	'Tag','StaticText5');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[89.5 100 43 12], ...
+	'String','Gaussian', ...
+	'Style','text', ...
+	'Tag','StaticText6');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 138 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame4');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'Position',[45 162 55 12], ...
+	'String','TOPOLOGY', ...
+	'Style','text', ...
+	'Tag','StaticText7');
+b = uicontrol('Parent',a, ...
+	'Callback','sompak_rb_control hexa',...
+	'Units','points', ...
+	'Position',[14 140 17 16], ...
+	'Style','radiobutton', ...
+	'Tag','HEXA', ...
+	'Value',1);
+
+udata.topol='hexa';
+
+b = uicontrol('Parent',a, ...
+	'Callback','sompak_rb_control rect',...
+	'Units','points', ...
+	'Position',[73 140 17 16], ...
+	'Style','radiobutton', ...
+	'Tag','RECT');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[33 142 30 12], ...
+	'String','Hexa', ...
+	'Style','text', ...
+	'Tag','StaticText8');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[90 142 30 12], ...
+	'String','Rect', ...
+	'Style','text', ...
+	'Tag','StaticText9');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 180 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame5');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[25 202 33 12], ...
+	'String','X-dim', ...
+	'Style','text', ...
+	'Tag','StaticText10');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[89 202 33 12], ...
+	'String','Y-dim', ...
+	'Style','text', ...
+	'Tag','StaticText11');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control xdim',...
+	'Position',[20 183 40 20], ...
+	'Style','edit', ...
+	'Tag','XDIM');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control ydim',...
+	'Position',[85 183 40 20], ...
+	'Style','edit', ...
+	'Tag','YDIM');
+
+udata.xdim=[];
+udata.ydim=[];
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 222 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame6');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'Position',[25 245 95 12], ...
+	'String','OUTPUT VARIABLE', ...
+	'Style','text', ...
+	'Tag','StaticText12');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+        'Callback','sompak_rb_control out_var',...
+	'Position',[22 226 102 20], ...
+	'String','''ans''', ...
+	'Style','edit', ...
+	'Tag','OUT_VAR');
+
+udata.out_var='ans';
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 264 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame7');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+        'Callback','sompak_rb_control out_file',...
+	'Position',[15 267 50 20], ...
+	'Style','edit', ...
+	'Tag','OUT_FILE');
+
+udata.out_file=[];
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[40 288 60 12], ...
+	'String','OUTPUT FILE', ...
+	'Style','text', ...
+	'Tag','StaticText13');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Callback','sompak_rb_control out_ft',...
+	'FontSize',9, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Max',3, ...
+	'Min',1, ...
+	'Position',[70 272 62 15], ...
+	'String',{'No File';'mat-file';'cod-file'}, ...
+	'Style','popupmenu', ...
+	'Tag','OUT_FILE_TYPE', ...
+	'Value',1);
+
+udata.out_file_type='';
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 306 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame8');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[57 330 30 12], ...
+	'String','DATA', ...
+	'Style','text', ...
+	'Tag','StaticText14');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control data',...
+	'Position',[15 309 50 20], ...
+	'Style','edit', ...
+	'Tag','DATA');
+
+udata.data=[];
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'Callback','sompak_rb_control input_ft',...
+	'FontSize',9, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Max',3, ...
+	'Min',1, ...
+	'Position',[70 314 62 15], ...
+	'String',{'Variable';'mat-file';'dat-file'}, ...
+	'Style','popupmenu', ...
+	'Tag','INPUT_FILE_TYPE', ...
+	'Value',1);
+udata.input_file_type='';
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',12, ...
+	'FontWeight','bold', ...
+	'HorizontalAlignment','left', ...
+	'Position',[57 355 30 12], ...
+	'String','INIT', ...
+	'Style','text', ...
+	'Tag','StaticText15');
+
+set(gcf,'UserData',udata);
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_rb_control.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,252 @@
+function varargout=sompak_rb_control(str)
+
+%SOMPAK_RB_CONTROL  An auxiliary function for SOMPAK_*_GUI functions.
+%
+% This is an auxiliary function for SOMPAK_GUI, SOMPAK_INIT_GUI, 
+% SOMPAK_SAMMON_GUI and SOMPAK_TRAIN_GUI functions. It controls the 
+% radio buttons in the GUIs.
+%  
+% See also SOMPAK_GUI, SOMPAK_INIT_GUI, SOMPAK_SAMMON_GUI, SOMPAK_TRAIN_GUI.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100
+
+data=get(gcf,'UserData');
+switch str
+  case {'rand','linear'}
+   h=cat(2,findobj(get(gcf,'Children'),'Tag','RANDOM'),...
+	   findobj(get(gcf,'Children'),'Tag','LINEAR'));
+   set(h,'Value',0);
+   set(gcbo,'Value',1);
+   data.inittype=str;
+  case {'bubble','gaussian'}
+   h=cat(2,findobj(get(gcf,'Children'),'Tag','BUBBLE'),...
+           findobj(get(gcf,'Children'),'Tag','GAUSSIAN'));
+   set(h,'Value',0);
+   set(gcbo,'Value',1);
+   data.neigh=str;
+  case {'hexa','rect'}
+   h=cat(2,findobj(get(gcf,'Children'),'Tag','HEXA'),...
+           findobj(get(gcf,'Children'),'Tag','RECT'));
+   set(h,'Value',0);
+   set(gcbo,'Value',1);
+   data.topol=str;
+  case {'out_ft'}
+   value=get(gcbo,'Value');
+   switch value
+     case 1
+      h=findobj(get(gcf,'Children'),'Tag','OUT_FILE');
+      data.out_file_type='';
+      set(h,'String','');
+     case 2
+      data.out_file_type='box';
+     case 3
+      data.out_file_type='pak';
+   end
+  case {'input_ft'}
+   value=get(gcbo,'Value');
+   switch value
+     case 1
+      data.input_file_type='';
+     case 2
+      data.input_file_type='box';
+     case 3
+      data.input_file_type='pak';
+   end
+  case {'map_ft'}
+   value=get(gcbo,'Value');
+   switch value
+     case 1
+      data.map_type='';
+     case 2
+      data.map_type='box';
+     case 3
+      data.map_type='pak';
+   end
+  case {'out_file'}
+   if isempty(data.out_file_type)
+     data.out_file='';
+     h=findobj(get(gcf,'Children'),'Tag','OUT_FILE');
+     set(h,'String','');
+   else
+     data.out_file=get(findobj(get(gcf,'Children'),'Tag','OUT_FILE'),'String');
+     if isempty(data.out_file)
+       h=findobj(get(gcf,'Children'),'Tag','OUT_FILE_TYPE');
+       set(h,'Value',1);
+     end
+   end
+
+  case {'out_var'}
+   h=findobj(get(gcf,'Children'),'Tag','OUT_VAR');
+   if ~isempty(get(h,'String'))
+     data.out_var=get(h,'String');
+   else
+     data.out_var=[];
+     set(h,'String','''ans''');
+   end
+  case {'xdim'}
+   h=findobj(get(gcf,'Children'),'Tag','XDIM');
+   data.xdim=str2num(get(h,'String'));
+  case {'ydim'}
+   h=findobj(get(gcf,'Children'),'Tag','YDIM');
+   data.ydim=str2num(get(h,'String'));
+  case {'radius'}
+   h=findobj(get(gcf,'Children'),'Tag','RADIUS');
+   data.radius=str2num(get(h,'String'));
+  case {'data'}
+   h=findobj(get(gcf,'Children'),'Tag','DATA');
+   data.data=get(h,'String');
+  case {'rlen'}
+   h=findobj(get(gcf,'Children'),'Tag','RLEN');
+   data.rlen=str2num(get(h,'String'));
+  case {'alpha'}
+   h=findobj(get(gcf,'Children'),'Tag','ALPHA');
+   data.alpha=str2num(get(h,'String'));
+  case {'map'}
+   h=findobj(get(gcf,'Children'),'Tag','MAP');
+   data.map=get(h,'String');
+  case 'init_ok'
+   if isempty(data.xdim) | ~is_positive_integer(data.xdim)
+     errordlg('Argument ''xdim'' must be positive integer.');
+     return;
+   end
+   if isempty(data.ydim) | ~is_positive_integer(data.ydim)
+     errordlg('Argument ''ydim'' must be positive integer.');
+     return;
+   end
+   if isempty(data.data)
+     errordlg('Argument ''Workspace data'' must be a string.');
+     return;
+   end
+
+   if isempty(data.input_file_type)
+     sData=evalin('base',data.data);
+   else 
+     sData=data.data;
+   end
+   if isempty(data.out_file)
+     if ~isempty(data.out_file_type)
+       errordlg('Argument ''Output file'' is not defined.');
+       return;
+     end
+     data.out_file=[];
+   end
+   answer=sompak_init(sData,...
+                      data.input_file_type,...
+                      data.inittype,...
+                      data.out_file,...
+                      data.out_file_type,...
+                      data.xdim,...
+                      data.ydim,...
+                      data.topol,...
+                      data.neigh);
+   if any(strcmp(data.out_var,{'ans','''ans'''})) | isstr(answer)
+     varargout{1}=answer; 
+   else
+     assignin('base',data.out_var,answer);
+     disp(sprintf('Map is set to workspace as ''%s''.',data.out_var));
+   end
+   close(findobj(get(0,'Children'),'Tag','InitGUI'));
+   return;
+  case 'train_ok'
+   if isempty(data.rlen) | ~is_positive_integer(data.rlen)
+     errordlg('Argument ''Running Length'' must be positive integer.');
+     return;
+   end
+   if isempty(data.alpha) | data.alpha <= 0
+     errordlg('Argument ''Initial Alpha Value'' must be a positive float.');
+     return;
+   end
+   if isempty(data.radius) | data.radius <= 0
+     errordlg('Argument ''Neighborhood Radius'' must be a positive float.');
+     return;
+   end
+   if isempty(data.data)
+     errordlg('Argument ''Teaching Data'' must be a string.');
+     return;
+   end
+   if isempty(data.input_file_type)
+     sData=evalin('base',data.data);
+   else 
+     sData=data.data;
+   end
+   if isempty(data.out_file);
+     data.outfile = [];
+   end
+   if isempty(data.map)
+     errordlg('Argument ''Workspace Map'' must be a string.');
+     return;
+   end
+   if isempty(data.map_type)
+     sMap=evalin('base',data.map);
+   else
+     sMap=data.map;
+   end
+
+   answer=sompak_train(sMap,...
+                       data.map_type,...
+                       data.out_file,...
+                       data.out_file_type,...
+                       data.data,...
+                       data.input_file_type,...
+                       data.rlen,...
+                       data.alpha,...
+                       data.radius);
+   if any(strcmp(data.out_var,{'''ans''','ans'})) | isstr(answer)
+     varargout{1}=answer;
+   else
+     assignin('base',data.out_var,answer);
+     disp(sprintf('Map is set to workspace as ''%s''.',data.out_var));
+   end
+   close(findobj(get(0,'Children'),'Tag','TrainGUI')); 
+   return;
+  case 'sammon_ok'
+   if isempty(data.map)
+    errordlg('Argument ''Workspace Map'' must be a string.');
+    return;
+   end
+   if isempty(data.map_type)
+     sMap=evalin('base',data.map);
+   else
+     sMap=data.map;
+   end
+   if isempty(data.out_file);
+     data.outfile = [];
+   end
+   answer=sompak_sammon(sMap,...
+                        data.map_type,...
+                        data.out_file,...
+                        data.out_file_type,...
+                        data.rlen);
+   if strcmp(data.out_var,'''ans''')|strcmp(data.out_var,'ans')|isstr(answer)
+     varargout{1}=answer;
+   else
+     assignin('base',data.out_var,answer);
+     disp(sprintf('Codebook is set to workspace as ''%s''.',data.out_var));
+   end
+   close(findobj(get(0,'Children'),'Tag','SammonGUI')); 
+   return;
+end
+
+set(gcf,'UserData',data);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bool = is_positive_integer(x)
+
+bool = ~isempty(x) & isreal(x) & all(size(x) == 1) & x > 0;
+if ~isempty(bool)
+  if bool & x~=round(x)
+    bool = 0;
+  end
+else
+  bool = 0;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_sammon.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,172 @@
+function sMap=sompak_sammon(sMap,ft,cout,ct,rlen)
+
+%SOMPAK_SAMMON Call SOM_PAK Sammon's mapping program from Matlab.
+%
+%  P = sompak_sammon(sMap,ft,cout,ct,rlen)
+%
+% ARGUMENTS ([]'s are optional and can be given as empty: [] or '')
+%  sMap   (struct) map struct
+%         (string) filename
+%  [ft]   (string) 'pak' or 'box'. Argument must be defined, if
+%                  input file is used.
+%  [cout] (string) output file name. If argument is not defined 
+%                  (i.e argument is '[]') temporary file '__abcdef' is
+%                  used in operations and *it_is_removed* after 
+%                  operations!!!
+%  [ct]   (string) 'pak' or 'box'. Argument must be defined, if
+%                  output file is used.
+%  rlen   (scalar) running length
+%
+% RETURNS: 
+%  P      (matrix) the mapping coordinates
+%
+% Calls SOM_PAK Sammon's mapping program (sammon) from Matlab. Notice
+% that to use this function, the SOM_PAK programs must be in your
+% search path, or the variable 'SOM_PAKDIR' which is a string
+% containing the program path, must be defined in the workspace.
+% SOM_PAK programs can be found from:
+% http://www.cis.hut.fi/research/som_lvq_pak.shtml
+%
+% See also SOMPAK_INIT, SOMPAK_SAMMON, SOMPAK_SAMMON_GUI,
+%          SOMPAK_GUI, SAMMON.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100
+
+NO_FILE = 0;
+
+nargchk(5,5,nargin);
+
+if ~(isstruct(sMap) | isstr(sMap))
+  error('Argument ''sMap'' must be a struct or filename.');
+end
+
+if isstr(sMap)
+ if isempty(ft) | ~isstr(ft) | ~(strcmp(ft,'pak') | strcmp(ft,'box'))
+   error('Argument ''ft'' must be string ''pak'' or ''box''.');
+ end
+ if strcmp(ft,'pak')
+   sMap=som_read_cod(sMap);
+ else
+   new_var=diff_varname;
+   varnames=evalin('base','who');
+   loadname=eval(cat(2,'who(''-file'',''',sMap,''')'));
+   if any(strcmp(loadname{1},evalin('base','who')))
+     assignin('base',new_var,evalin('base',loadname{1}));
+     evalin('base',cat(2,'load(''',sMap,''');'));
+     new_var2=diff_varname;
+
+     assignin('base',new_var2,evalin('base',loadname{1}));
+     assignin('base',loadname{1},evalin('base',new_var));
+     evalin('base',cat(2,'clear ',new_var));
+     sMap=evalin('base',new_var2);
+     evalin('base',cat(2,'clear ',new_var2));
+   else
+     evalin('base',cat(2,'load(''',sMap,''');'));
+     sMap=evalin('base',loadname{1});
+     evalin('base',cat(2,'clear ',loadname{1}));
+   end   
+ end
+end
+
+if ~isstr(cout) & isempty(cout)
+  NO_FILE = 1;
+  cout = '__abcdef';
+elseif ~isstr(cout) | isempty(cout)
+  error('Argument ''cout'' must be a string or ''[]''.');
+end
+
+if ~NO_FILE & (isempty(ct) | ~(strcmp(ct,'pak') | strcmp(ct,'box')))
+  error('Argument ''ct'' must be string ''pak'' or ''box''.');
+end
+
+som_write_cod(sMap,cout);
+
+if ~is_positive_integer(rlen)
+  error('Argument ''rlen'' must be a positive integer.');
+end
+
+if any(strcmp('SOM_PAKDIR',evalin('base','who')))
+  command=cat(2,evalin('base','SOM_PAKDIR'),'sammon ');
+else
+  command='sammon ';
+end
+
+str = sprintf('%s -cin %s -cout %s -rlen %d',command,cout,cout,rlen);
+
+if isunix
+  unix(str);
+else
+  dos(str);
+end
+
+sMap=som_read_cod(cout);
+
+if ~NO_FILE
+  if isunix
+    unix(cat(2,'/bin/rm ',cout));
+  else
+    dos(cat(2,'del ',cout));
+  end
+  if strcmp(ct,'box');
+    sMap=sMap.codebook;
+    eval(cat(2,'save ',cout,' sMap'));
+    disp(cat(2,'Output is saved to the file ',sprintf('''%s.mat''.',cout)));
+  else
+    som_write_cod(sMap,cout);
+    sMap=sMap.codebook;
+    disp(cat(2,'Output is saved to the file ',cout,'.'));
+  end
+else
+  if isunix
+    unix('/bin/rm __abcdef');
+  else
+    dos('del __abcdef');
+  end
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bool = is_positive_integer(x)
+
+bool = ~isempty(x) & isreal(x) & all(size(x) == 1) & x > 0;
+if ~isempty(bool)
+  if bool & x~=round(x)
+    bool = 0;
+  end
+else
+  bool = 0;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function str = diff_varname();
+
+array=evalin('base','who');
+
+if isempty(array)
+  str='a';
+  return;
+end
+
+for i=1:length(array)
+  lens(i)=length(array{i});
+end
+
+
+ind=max(lens);
+
+str(1:ind+1)='a';
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_sammon_gui.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,200 @@
+function sompak_sammon_gui()
+
+%SOMPAK_SAMMON_GUI A GUI for using SOM_PAK Sammon's mapping program 
+%                  from Matlab.
+%
+%  sompak_sammon_gui
+%
+% Launches a GUI which allows the use of SOM_PAK Sammon's mapping
+% program (sammon) from Matlab. Notice that to use this function, the
+% SOM_PAK programs must be in your search path, or the variable
+% 'SOM_PAKDIR' which is a string containing the program path, must be
+% defined in the workspace. SOM_PAK programs can be found from:
+% http://www.cis.hut.fi/research/som_lvq_pak.shtml
+%
+% See also SOMPAK_SAMMON, SOMPAK_GUI, SOMPAK_INIT_GUI,
+%          SOMPAK_TRAIN_GUI, SOM_GUI.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100
+
+h=findobj(get(0,'Children'),'Tag','SammonGUI');
+
+if ~isempty(h)
+  figure(h);
+  return;
+end
+
+
+a = figure('Color',[0.8 0.8 0.8], ...
+	'PaperType','a4letter', ...
+	'Position',[665 517 175 295], ...
+	'Tag','SammonGUI');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Callback','close gcf', ...
+	'FontWeight','demi', ...
+	'Position',[8 20 50 20], ...
+	'String','CLOSE', ...
+	'Tag','Pushbutton1');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Callback','sompak_rb_control sammon_ok',...
+	'FontWeight','demi', ...
+	'Position',[86 20 50 20], ...
+	'String','OK', ...
+	'Tag','Pushbutton2');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Position',[8 50 130 175], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 54 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[30 78 90 12], ...
+	'String','RUNNING LENGTH', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control rlen',...
+	'Position',[48 57 50 20], ...
+	'Style','edit', ...
+	'Tag','RLEN');
+
+udata.rlen=[];
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 96 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[33 119 90 12], ...
+	'String','OUTPUT VARIABLE', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...	
+	'Callback','sompak_rb_control out_var',...
+	'Position',[48 99 50 20], ...
+	'String','''ans''', ...
+	'Style','edit', ...
+	'Tag','OUT_VAR');
+
+udata.out_var='ans';
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 138 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame4');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[43 162 60 12], ...
+	'String','OUTPUT FILE', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control out_file',...
+	'Position',[15 141 50 20], ...
+	'Style','edit', ...
+	'Tag','OUT_FILE');
+
+udata.out_file=[];
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'Callback','sompak_rb_control out_ft',...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Max',3, ...
+	'Min',1, ...
+	'Position',[70 146 62 15], ...
+	'String',{'No File';'mat-file';'cod-file'}, ...
+	'Style','popupmenu', ...
+	'Tag','OUT_FILE_TYPE', ...
+	'Value',1);
+
+udata.out_file_type='';
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 180 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame5');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[60 203 25 12], ...
+	'String','MAP', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control map',...
+	'Position',[15 183 50 20], ...
+	'Style','edit', ...
+	'Tag','MAP');
+
+udata.map=[];
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'Callback','sompak_rb_control map_ft',... 
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Max',3, ...
+	'Min',1, ...
+	'Position',[70 188 62 15], ...
+	'String',{'Variable';'mat-file';'cod-file'}, ...
+	'Style','popupmenu', ...
+	'Tag','MAP_TYPE', ...
+	'Value',1);
+
+udata.map_type='';
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',12, ...
+	'FontWeight','demi', ...
+	'Position',[41 230 62 12], ...
+	'String','SAMMON', ...
+	'Style','text', ...
+	'Tag','StaticText5');
+
+
+set(gcf,'UserData',udata);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_train.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,243 @@
+function sMap=sompak_train(sMap,ft,cout,ct,din,dt,rlen,alpha,radius)
+
+%SOMPAK_TRAIN Call SOM_PAK training program from Matlab.
+%
+% sMap=sompak_train(sMap,ft,cout,ct,din,dt,rlen,alpha,radius)
+%
+% ARGUMENTS ([]'s are optional and can be given as empty: [] or '')
+%  sMap   (struct) map struct 
+%         (string) filename
+%  [ft]   (string) 'pak' or 'box'. Argument must be defined, if input file
+%                  is used.
+%  [cout] (string) filename for output SOM, if argument is not defined
+%                  (i.e. argument is '[]') temporary file '__abcdef' is
+%                  used in operations and *it_is_removed* after 
+%                  operations!!!
+%   [ct]  (string) 'pak' or 'box'. Argument must be defined, if output
+%                  file is used.
+%   din   (struct) data struct to be used in teaching
+%         (matrix) data matrix
+%         (string) filename
+%                  If argument is not a filename or file is .mat -file, 
+%                   temporary file '__din' is used in operations
+%                   and *it_is_removed* after operations!!!
+%  [dt]   (string) 'pak' or 'box'. Argument must be defined, if input file
+%                  is used.
+%  rlen   (scalar) running length of teaching
+%  alpha  (float)  initial alpha value
+%  radius (float)  initial radius of neighborhood
+% 
+% RETURNS
+%  sMap   (struct) map struct
+%
+% Calls SOM_PAK training program (vsom) from Matlab. Notice that to
+% use this function, the SOM_PAK programs must be in your search path,
+% or the variable 'SOM_PAKDIR' which is a string containing the
+% program path, must be defined in the workspace. SOM_PAK programs can
+% be found from: http://www.cis.hut.fi/research/som_lvq_pak.shtml
+%
+% See also SOMPAK_TRAIN, SOMPAK_SAMMON, SOMPAK_TRAIN_GUI,
+%          SOMPAK_GUI, SOM_SEQTRAIN.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100
+
+
+nargchk(9,9,nargin);
+
+NO_FILE=0;
+DIN_FILE = 0;
+
+if ~isstruct(sMap) & ~isstr(sMap)
+  error('Argument ''sMap'' must be a struct or string.');
+end
+
+if isstr(sMap)
+  if isempty(ft)
+    error('Argument ''ft'' must be defined.');
+  end
+  if strcmp(ft,'pak')
+    sMap=som_read_cod(sMap);
+  elseif strcmp(ft,'box')
+    new_var=diff_varname;
+    varnames=evalin('base','who');
+    loadname=eval(cat(2,'who(''-file'',''',sMap,''')'));
+    if any(strcmp(loadname{1},evalin('base','who')))
+      assignin('base',new_var,evalin('base',loadname{1}));
+      evalin('base',cat(2,'load(''',sMap,''');'));
+      new_var2=diff_varname;
+
+      assignin('base',new_var2,evalin('base',loadname{1}));
+      assignin('base',loadname{1},evalin('base',new_var));
+      evalin('base',cat(2,'clear ',new_var));
+      sMap=evalin('base',new_var2);
+      evalin('base',cat(2,'clear ',new_var2));
+    else
+      evalin('base',cat(2,'load(''',sMap,''');'));
+      sMap=evalin('base',loadname{1});
+      evalin('base',cat(2,'clear ',loadname{1}));
+    end
+
+  end
+end
+if ~isstr(cout) & isempty(cout)
+  cout = '__abcdef';
+  NO_FILE = 1;
+elseif ~isstr(cout) | (isstr(cout) & isempty(cout))
+  error('Argument ''cout'' must be a string or ''[]''.');
+end
+
+if ~NO_FILE & (isempty(ct) | ~(~isempty(ct) & ...
+   (strcmp(ct,'pak') | strcmp(ct,'box'))))
+  error('Argument ''ct'' must be string ''pak'' or ''box''.');
+end
+
+map_name=sMap.name;
+som_write_cod(sMap,cout);
+
+if ~isempty(din)
+  som_write_data(din, '__din');
+  DIN_FILE = 1;
+  din = '__din';
+else
+  DIN_FILE=0;
+end
+
+if ~DIN_FILE
+  if isempty(dt) | ~isstr(dt) | ~(strcmp(dt,'box') | strcmp(dt,'pak'))
+    error('Argument ''dt'' must be string ''pak'' or ''box''.');
+  end
+  if strcmp(dt,'box');
+    DIN_FILE = 1;
+    din_var=diff_varname;
+    varnames=evalin('base','who');
+    loadname=eval(cat(2,'who(''-file'',''',din,''')'));
+    if any(strcmp(loadname{1},evalin('base','who')))
+      assignin('base',din_var,evalin('base',loadname{1}));
+      evalin('base',cat(2,'load(''',din,''');'));
+      din_var2=diff_varname;
+
+      assignin('base',new_var2,evalin('base',loadname{1}));
+      assignin('base',loadname{1},evalin('base',din_var));
+      evalin('base',cat(2,'clear ',din_var));
+      din=evalin('base',din_var2);
+    else
+      evalin('base',cat(2,'load(''',din,''')'));
+      din=evalin('base',loadname{1});
+      evalin('base',cat(2,'clear ',loadname{1}));
+    end
+    som_write_data(din,'__din');
+    din = '__din';
+  end
+end
+if ~is_positive_integer(rlen)
+  error('Argument ''rlen'' must be positive integer.');
+end
+
+if ~(isreal(alpha) & all(size(alpha)==1))
+  error('Argument ''alpha'' must be a floating point number.');
+end
+
+if ~(isreal(radius) & all(size(radius)==1) & radius > 0)
+  error('Argument ''radius'' must be a positive floating point number.');
+end
+
+if any(strcmp('SOM_PAKDIR',evalin('base','who')))
+  traincommand=cat(2,evalin('base','SOM_PAKDIR'),'vsom ');
+else
+  traincommand='vsom ';
+end
+
+str=cat(2,traincommand,sprintf('-cin %s -din %s -cout %s ',cout,din,cout),...
+                  sprintf(' -rlen %d -alpha %f -radius %f',rlen,alpha,radius));
+if isunix
+  unix(str);
+else
+  dos(str);
+end
+
+sMap=som_read_cod(cout);
+sMap.name=map_name;
+
+if ~NO_FILE
+  if isunix
+    unix(cat(2,'/bin/rm ',cout));
+  else
+    dos(cat(2,'del ',cout));
+  end
+  if isempty(ct) | ~isstr(ct) | ~(strcmp(ct,'pak') | strcmp(ct,'box'))
+    error('Argument ''ct'' must be string ''pak'' or ''box''.');
+  elseif strcmp(ct,'box');
+    eval(cat(2,'save ',cout,' sMap'));
+    disp(cat(2,'Output written to the file ',sprintf('''%s.mat''.',cout)));
+  else
+    som_write_cod(sMap,cout);
+  end
+else
+  if isunix
+    unix('/bin/rm __abcdef');
+  else
+    dos('del __abcdef');
+  end
+end 
+
+if DIN_FILE
+  if isunix
+    unix('/bin/rm __din');
+  else
+    dos('del __abcdef');
+  end
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function bool = is_positive_integer(x)
+
+bool = ~isempty(x) & isreal(x) & all(size(x) == 1) & x > 0;
+if ~isempty(bool)
+  if bool & x~=round(x)
+    bool = 0;
+  end
+else
+  bool = 0;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function str = diff_varname();
+
+array=evalin('base','who');
+
+if isempty(array)
+  str='a';
+  return;
+end
+
+for i=1:length(array)
+  lens(i)=length(array{i});
+end
+
+
+ind=max(lens);
+
+str(1:ind+1)='a';
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/sompak_train_gui.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,290 @@
+function sompak_train_gui()
+
+%SOMPAK_TRAIN_GUI A GUI for using SOM_PAK training program from Matlab.
+%
+%  sompak_train_gui
+%
+% Launches a GUI which allows the use of SOM_PAK training program
+% (vsom) from Matlab. Notice that to use this function, the SOM_PAK
+% programs must be in your search path, or the variable 'SOM_PAKDIR'
+% which is a string containing the program path, must be defined in
+% the workspace. SOM_PAK programs can be found from:
+% http://www.cis.hut.fi/research/som_lvq_pak.shtml
+%
+% See also SOMPAK_TRAIN, SOMPAK_GUI, SOMPAK_INIT_GUI,
+%          SOMPAK_SAMMON_GUI, SOM_GUI.
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Juha Parhankangas 050100
+
+h=findobj(get(0,'Children'),'Tag','TrainGUI');
+
+if ~isempty(h)
+  figure(h);
+  return;
+end
+
+a = figure('Color',[0.8 0.8 0.8],... 
+	'PaperType','a4letter', ...
+	'Position',[558 207 173 445], ...
+	'Tag','TrainGUI');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Callback','close gcf', ...
+	'FontWeight','demi', ...
+	'Position',[8 20 50 20], ...
+	'String','CLOSE', ...
+	'Tag','Pushbutton1');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Callback','sompak_rb_control train_ok',...
+	'FontWeight','demi', ...
+	'Position',[86 20 50 20], ...
+	'String','OK', ...
+	'Tag','Pushbutton2');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Position',[8 50 130 300], ...
+	'Style','frame', ...
+	'Tag','Frame1');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 54 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame2');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[18 78 110 12], ...
+	'String','NEIGHBORHOOD RADIUS', ...
+	'Style','text', ...
+	'Tag','StaticText1');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control radius', ...
+	'Position',[48 56 50 20], ...
+	'Style','edit', ...
+	'Tag','RADIUS');
+
+udata.radius=[];	
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 96 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame3');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[22 120 101 12], ...
+	'String','INITIAL ALPHA VALUE', ...
+	'Style','text', ...
+	'Tag','StaticText2');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control alpha',...
+	'Position',[48 99 50 20], ...
+	'Style','edit', ...
+	'Tag','ALPHA');
+
+
+udata.alpha=[];
+
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 138 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame4');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[30 163 90 12], ...
+	'String','RUNNING LENGTH', ...
+	'Style','text', ...
+	'Tag','StaticText3');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control rlen',...
+	'Position',[48 141 50 20], ...
+	'Style','edit', ...
+	'Tag','RLEN');
+
+udata.rlen=[];
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 180 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame5');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[30 204 90 11], ...
+	'String','OUTPUT VARIABLE', ...
+	'Style','text', ...
+	'Tag','StaticText4');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control out_var',...
+	'Position',[48 183 50 20], ...
+	'String','''ans''',...
+	'Style','edit', ...
+	'Tag','OUT_VAR');
+
+udata.out_var='ans';
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 222 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame6');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[42 245 65 12], ...
+	'String','OUTPUT FILE', ...
+	'Style','text', ...
+	'Tag','StaticText5');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control out_file',...
+	'Position',[15 225 50 20], ...
+	'Style','edit', ...
+	'Tag','OUT_FILE');
+
+udata.out_file=[];
+
+b = uicontrol('Parent',a, ...
+	'Callback','sompak_rb_control out_ft',...
+	'Units','points', ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Max',3, ...
+	'Min',1, ...
+	'Position',[70 230 62 15], ...
+	'String',{'No File';'mat-file';'cod-file'}, ...
+	'Style','popupmenu', ...
+	'Tag','OUT_FILE_TYPE', ...
+	'Value',1);
+
+udata.out_file_type='';
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 264 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame7');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[34 288 85 12], ...
+	'String','TEACHING DATA', ...
+	'Style','text', ...
+	'Tag','StaticText6');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control data',...
+	'Position',[15 267 50 20], ...
+	'Style','edit', ...
+	'Tag','DATA');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Callback','sompak_rb_control input_ft',...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Max',3, ...
+	'Min',1, ...
+	'Position',[70 272 62 15], ...
+	'String',{'Variable';'mat-file';'dat-file'}, ...
+	'Style','popupmenu', ...
+	'Tag','INPUT_FILE_TYPE', ...
+	'Value',1);
+
+udata.input_file_type='';
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'Position',[12 306 122 40], ...
+	'Style','frame', ...
+	'Tag','Frame8');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[60 331 25 12], ...
+	'String','MAP', ...
+	'Style','text', ...
+	'Tag','StaticText7');
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[1 1 1], ...
+	'Callback','sompak_rb_control map',...
+	'Position',[15 309 50 20], ...
+	'Style','edit', ...
+	'Tag','MAP');
+
+udata.map=[];
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	'Callback','sompak_rb_control map_ft',...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Max',3, ...
+	'Min',1, ...
+	'Position',[70 314 62 15], ...
+	'String',{'Variable','mat-file','cod-file'}, ...
+	'Style','popupmenu', ...
+	'Tag','MAP_TYPE', ...
+	'Value',1);
+
+udata.map_type='';
+
+b = uicontrol('Parent',a, ...
+	'Units','points', ...
+	'BackgroundColor',[0.8 0.8 0.8], ...
+	'FontSize',12, ...
+	'FontWeight','demi', ...
+	'HorizontalAlignment','left', ...
+	'Position',[50 359 48 12], ...
+	'String','TRAIN', ...
+	'Style','text', ...
+	'Tag','StaticText8');
+
+set(gcf,'UserData',udata);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/somtoolbox.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,196 @@
+% SOM Toolbox
+% Version 2.0beta, May 30 2002
+% 
+% Copyright 1997-2000 by
+% Esa Alhoniemi, Johan Himberg, Juha Parhankangas and Juha Vesanto
+% Contributed files may contain copyrights of their own.
+% 
+% SOM Toolbox comes with ABSOLUTELY NO WARRANTY; for details
+% see License.txt in the program package. This is free software,
+% and you are welcome to redistribute it under certain conditions;
+% see License.txt for details.
+% 
+% 
+% Demos
+% 
+%            som_demo1   SOM Toolbox demo 1: basic properties
+%            som_demo2   SOM Toolbox demo 2: basic usage
+%            som_demo3   SOM Toolbox demo 3: visualization
+%            som_demo4   SOM Toolbox demo 4: data analysis
+% 
+% Creation of structs
+% 
+%              som_set   create & set (& check) values to structs
+%             som_info   print out information on a given struct  
+%      som_data_struct   create & initialize a data struct 
+%       som_map_struct   create & initialize a map struct 
+%     som_topol_struct   create & initialize a topology struct 
+%     som_train_struct   create & initialize a train struct 
+%         som_clstruct   create a cluster struct
+%            som_clset   set properties in a cluster struct
+%            som_clget   get stuff from a cluster struct
+% 
+% Struct conversion and file I/O
+% 
+%           som_vs1to2   converts a version 1.0 struct to version 2.0 struct
+%           som_vs2to1   converts a version 2.0 struct to version 1.0 struct
+%        som_read_data   reads a (SOM_PAK format) ASCII data file
+%       som_write_data   writes a SOM_PAK format codebook file
+%        som_write_cod   writes a SOM_PAK format data file
+%         som_read_cod   reads a SOM_PAK format codebook file
+% 
+% Data preprocessing
+% 
+%        som_normalize   normalize data set
+%      som_denormalize   denormalize data set 
+%    som_norm_variable   (de)normalize one variable
+%           preprocess   preprocessing GUI
+% 
+% Initialization and training functions
+% 
+%             som_make   create, initialize and train a SOM
+%         som_randinit   random initialization algorithm
+%          som_lininit   linear initialization algorithm
+%         som_seqtrain   sequential training algorithm
+%       som_batchtrain   batch training algorithm
+%              som_gui   SOM initialization and training GUI
+%       som_prototrain   a simple version of sequential training: easy to modify
+% 
+% Clustering algorithms
+% 
+%           som_kmeans   k-means algorithm (was earlier kmeans)
+%      kmeans_clusters   try and evaluate several k-means clusterings
+%           neural_gas   neural gas vector quantization algorithm
+%          som_linkage   hierarchical clustering algorithms
+%        som_cllinkage   hierarchical clustering of SOM
+%       som_dmatminima   local minima from distance (or U-) matrix
+%     som_dmatclusters   distance (or U-) matrix based clustering
+%         som_clspread   spreads clusters to unassinged map units
+%           som_cldist   calculate distances between clusters
+%         som_gapindex   gap validity index of clustering
+%             db_index   Davies-Bouldin validity index of clustering  
+% 
+% Supervised/classification algorithms
+% 
+%       som_supervised   supervised SOM algorithm
+%                 lvq1   LVQ1 algorithm
+%                 lvq3   LVQ3 algorithm
+%                  knn   k-NN classification algorithm 
+%              knn_old   k-NN classification algorithm (old version)
+% 
+% SOM error measures
+% 
+%          som_quality   quantization and topographic error of SOM
+%       som_distortion   SOM distortion measure
+%      som_distortion3   elements of the SOM distortion measure
+% 
+% Auxiliary functions
+% 
+%             som_bmus   calculates BMUs for given data vectors
+%         som_eucdist2   pairwise squared euclidian distances between vectors
+%            som_mdist   calculates pairwise distances between vectors 
+%           som_divide   extract subsets of data based on map
+%            som_label   give labels to map units
+%        som_label2num   rcodes string data labels to interger class labels 
+%        som_autolabel   automatically labels the SOM based on given data
+%      som_unit_coords   calculates coordinates in output space for map units
+%       som_unit_dists   distances in output space between map units
+%      som_unit_neighs   units in 1-neighborhood for each map unit
+%     som_neighborhood   calculates neighborhood matrix for the given map
+%        som_neighbors   calculates different kinds of neighborhoods 
+%           som_neighf   calculates neighborhood function values
+%           som_select   GUI for manual selection of map units
+%     som_estimate_gmm   create Gaussian mixture model on top of SOM
+%  som_probability_gmm   evaluate Gaussian mixture model
+%          som_ind2sub   from linear index to subscript index 
+%          som_sub2ind   from subscript index to linear index
+%          som_ind2cod   from linear index to SOM_PAK linear index 
+%          som_cod2ind   from SOM_linear index to SOM_PAK linear index 
+%             nanstats   mean, std and median which ignore NaNs
+%   som_modify_dataset   add, remove, or extract samples and components
+%         som_fillnans   fill NaNs in a data set based on given SOM
+%            som_stats   statistics of a data set
+%           som_drmake   calculate descriptive rules for a cluster
+%           som_dreval   evaluate descriptive rules for a cluster
+%         som_drsignif   rule significance measures
+% 
+% Using SOM_PAK from Matlab
+% 
+%      som_sompaktrain   uses SOM_PAK to train a map
+%           sompak_gui   GUI for using SOM_PAK from Matlab
+%          sompak_init   call SOM_PAK's initialization programs from Matlab
+%      sompak_init_gui   GUI for using SOM_PAK's initialization from Matlab
+%    sompak_rb_control   an auxiliary function for sompak_*_gui functions.
+%        sompak_sammon   call SOM_PAK's Sammon program from Matlab
+%    sompak_sammon_gui   GUI for using SOM_PAK's Sammon program from Matlab
+%         sompak_train   call SOM_PAK's training program from Matlab
+%     sompak_train_gui   GUI for using SOM_PAK's training program from Matlab 
+% 
+% Visualization
+% 
+%             som_show   basic visualization
+%         som_show_add   add labels, hits and trajectories
+%       som_show_clear   remove extra markers
+%       som_recolorbar   refresh/reconfigure colorbars
+%         som_show_gui   GUI for using som_show and associated functions
+%             som_grid   visualization of SOM grid
+%           som_cplane   component planes and U-matrices
+%         som_barplane   bar chart visualization of map
+%         som_pieplane   pie chart visualization of map
+%        som_plotplane   plot chart visualization of map
+%       som_trajectory   launches a GUI for presenting comet-trajectories 
+%       som_dendrogram   visualization of clustering tree
+%       som_plotmatrix   pairwise scatter plots and histograms
+%    som_order_cplanes   order and visualize the component planes
+%           som_clplot   plots of clusters (based on cluster struct)
+% som_projections_plot   projections plots (see som_projections)
+%       som_stats_plot   plots of statistics (see som_stats)
+% 
+% Auxiliary functions for visualization
+% 
+%                 hits   calculates hits, or sum of values for each map unit
+%             som_hits   calculates the response of data on the map
+%             som_umat   calculates the U-matrix
+%                  cca   curvilinear component analysis projection algorithm
+%              pcaproj   principal component projection algorithm
+%               sammon   Sammon's mapping projection algorithm
+%       som_connection   connection matrix for map 
+%       som_vis_coords   map unit coordinates used in visualizations
+%        som_colorcode   create color coding for map/2D data
+%         som_bmucolor   colors of the BMUs from a given map color code
+%        som_normcolor   simulate indexed colormap
+%     som_clustercolor   color coding which depends on clustering structure
+%      som_kmeanscolor   color coding according to k-means clustering
+%     som_kmeanscolor2   a newer version of the som_kmeanscolor function
+%       som_fuzzycolor   a fuzzy color coding 
+%         som_coloring   a SOM-based color coding 
+%      som_projections   calculates a default set of projections
+% 
+% Report generation stuff
+% 
+%     som_table_struct   creates a table struct
+%     som_table_modify   modifies a table struct
+%      som_table_print   print a table in various formats
+%            rep_utils   various utilities for printing report elements
+%      som_stats_table   a table of data set statistics
+%     som_stats_report   report on data set statistics
+% 
+% Low level routines used by visualization functions
+% 
+%            vis_patch   defines hexagonal and rectangular patches
+%    vis_som_show_data   returns UserData and subplot handles stored by som_show.m
+%        vis_valuetype   used for type checks 
+%         vis_footnote   adds a movable text to the current figure 
+%          vis_trajgui   the actual GUI started by som_trajectory.m 
+% vis_PlaneAxisProperties   set axis properties in visualization functions
+% vis_footnoteButtonDownFcn   callback function for vis_footnote.m
+%     vis_planeGetArgs   converts topol struct to lattice, msize argument pair
+%    vis_show_gui_comp   internal function used by som_show_gui.m
+%    vis_show_gui_tool   internal function used by som_show_gui.m
+% 
+% Other
+% 
+%           somtoolbox   this file
+%            iris.data   IRIS data set (used in demos)
+%          License.txt   GNU General Public License 
+%        Copyright.txt   Copyright notice
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_PlaneAxisProperties.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+function vis_PlaneAxisProperties(ax,lattice,msize,pos)
+
+% VIS_PLANEAXISPROPERTIES Set axis properties for SOM_CPLANE, 
+%                         SOM_PIEPLANE, SOM_BARPLANE and SOM_PLOTPLANE.
+%
+% vis_PlaneAxisProperties(ax,lattice,msize,pos)
+%
+%  Input arguments: 
+%   ax        (scalar) axis handle     
+%   lattice   (string) 'hexa', 'rect', 'hexaU' or 'rectU'
+%             (matrix) defines the patch, see e.g. help vis_patch
+%   msize     (vector) a 1x2 vector defining the grid size
+%   pos       (vector) a 1x2 vector that determines position of
+%                      origin or NaN which means default operation: 
+%                      origin to [1 1] and tighten axis limits 
+%                      according to the grid size.
+% 
+% This is a subfunction for SOM_CPLANE, SOM_PIEPLANE, SOM_BARPLANE and
+% SOM_PLOTPLANE. This subfunction sets the proper values for axis.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 060799
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+xdim=msize(1);ydim=msize(2);
+set(ax,'Visible','off');
+set(get(ax,'Title'),'Visible','on');
+set(ax,'XaxisLocation','Top');            % axis orientation
+set(ax,'xdir','normal');                  % = axis ij = matrix mode
+set(ax,'ydir','reverse'); 
+
+switch lattice
+case {'rect', 'rectU'}
+  lelim=-.51; rilim=.51; uplim=-.51; lolim=.51;  % axis limits
+  set(ax,'DataAspectRatio', [1 1 1]);            % =axis equal
+case {'hexa','hexaU'}
+  lelim=-.51; rilim=1.01; uplim=-.67; lolim=.67; % axis limits
+  set(ax,'DataAspectRatio',[0.9015 1 1]);        % this corrects hexagons
+end
+
+% Nan: default origin [1 1] & tighten the axis
+if isnan(pos)
+  set(ax,'XLim',[1+lelim ydim+rilim],'YLim',[1+uplim xdim+lolim], ...
+      'XLimMode','manual','YLimMode','manual'); % tighten the axis
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_footnote.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,101 @@
+function h=vis_footnote(txt)
+
+% VIS_FOOTNOTE Adds a movable text to the current figure
+%
+%  h = vis_footnote(T)
+%
+%  Input and output arguments ([]'s are optional)
+%   [T]  (string) text to be written
+%        (scalar) font size to use in all strings 
+%
+%   h    (vector) handles to axis objects created by this function 
+%
+% This function sets a text to the current figure. If T is a string,
+% it's written as it is to the same place. If T is a scalar, the font
+% size of all text objects created by this function are changed to the
+% pointsize T. If no input argument is given the function only returns
+% the handles to all objects created by this function. The texts may
+% be dragged to a new location at any time using mouse.  Note that the
+% current axis will be the parent of the text object after dragging.
+%
+% String 'Info' is set to the Tag property field of the objects. 
+% 
+% EXAMPLES
+%
+% % add movable texts to the current figure and change their
+% % fontsize to 20 points
+% vis_footnote('Faa'); vis_footnote('Foo'); vis_footnote(20);
+% 
+% % delete all objects created by this function from the current figure
+% delete(vis_footnote);
+% 
+% See also SOM_SHOW.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 080698
+
+%% Check arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+error(nargchk(0, 1, nargin))  % check no. of input args
+
+%% Init %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Get the handles to the existing Info-axes objects
+
+h_infotxt=findobj(gcf,'tag','Info','type','text');
+h_infoax=findobj(gcf,'tag','Info','type','axes');
+
+%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% If no arguments are given, return the old axes handles
+
+if nargin == 0 | isempty(txt),
+  ;  
+elseif ischar(txt)                    % text: set new text
+  [t,h_]=movetext(txt);
+  h_infoax=[h_; h_infoax];
+elseif vis_valuetype(txt,{'1x1'})      % scalar: change font size  
+  set(h_infotxt,'fontunits','points');
+  set(h_infotxt,'fontsize',txt);
+else
+  error('Input argument should be a string or a scalar.');
+end
+
+%% Build output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if nargout>0     % output only if necessary
+  h=h_infoax;
+end
+
+%%% SUBFUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
+
+function [t,h]=movetext(txt)
+% Moves the text. See also VIS_FOOTNOTEBUTTONDOWNFCN
+%
+%
+initpos=[0.05 0.05 0.01 0.01];   
+
+memaxes = gca;                   % Memorize the gca
+
+%% Create new axis on the lower left corner.
+%% This will be the parent for the text object
+
+h = axes('position',initpos,'units','normalized');
+set(h,'visible','off');          % hide axis
+
+t = text(0,0,txt);               % write text 
+set(t,'tag','Info');             % set tag
+set(h,'tag','Info');             % set tag
+
+set(t,'verticalalignment','bottom');  % set text alignment
+set(t,'horizontalalignment','left');
+
+%% Set ButtonDownFcn
+
+set(t,'buttondownfcn','vis_footnoteButtonDownFcn') 
+
+axes(memaxes);                   % Reset original gca
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_footnoteButtonDownFcn.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+function vis_footnoteButtonDownFcn
+
+% VIS_FOOTNOTEBUTTONDOWNFCN Callback set by VIS_FOOTNOTE
+%
+%  som_showtitleButtonDownFcn
+%
+% Moves the axis of current callback object using DRAGRECT
+% command. This callback is set to all texts added to figures by 
+% VIS_FOOTNOTE function.
+%
+% See also DRAGRECT, SOM_SHOWTITLE.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 080698
+
+% Action
+
+[txt,fig]=gcbo;                     % Get text and figure handles
+ax=get(txt,'parent');               % Get axis handle
+
+memunits_fig=get(fig,'units');      % Get figure size in pixels
+set(gcf,'units','pixels'); 
+pos_fig=get(fig,'position');        
+
+memunits_txt=get(txt,'units');      % Get text field size in pixels
+set(txt,'units','pixels');            
+text_size=get(txt,'extent');
+
+memunits_ax=get(ax,'units');        % Get axis position in pixels
+set(ax,'units','pixels');          
+pos_ax=get(ax,'position');
+
+%%% Move text
+
+pos_final=dragrect([pos_ax(1:2) text_size(3:4)]);
+
+%%% Keep the text inside the figure!
+
+pos_final(1)=max(pos_final(1),0);
+pos_final(2)=max(pos_final(2),0);
+pos_final(1)=min(pos_final(1),pos_fig(3)-text_size(3));
+pos_final(2)=min(pos_final(2),pos_fig(4)-text_size(4));
+
+%%% Set new position
+
+new_pos=[pos_final(1:2) pos_ax(3:4)];
+set(ax,'position', new_pos);
+
+%%% Set the text on the top of the object stack 
+
+children=get(gcf,'children');
+i=find(ismember(children,ax));
+new_i=[i 1:i-1 i+1:length(children)];
+set(gcf,'children',children(new_i));
+
+set(txt,'position',[0 0 0]);
+set(fig,'units',memunits_fig);
+set(ax,'units',memunits_ax);
+set(txt,'units',memunits_txt);
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_grid_struct.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+function S=vis_grid_struct
+
+% VIS_GRID_STRUCT Initiates and returns a default grid struct
+%
+%  S = vis_grid_struct
+%
+%  Output arguments:
+%   S       (struct) som_grid struct 
+%
+% Fields and their initial values: 
+%  S.type='som_grid';
+%  S.neigh=neigh;
+%  S.shape='sheet';
+%  S.msize=msize;
+%  S.coord=[];
+%  S.line='-';
+%  S.linecolor=[.8 .8 .8];
+%  S.linewidth=0.5;
+%  S.marker='o';
+%  S.markersize=6;
+%  S.markercolor='k';
+%  S.surf=[];
+%  S.label=[];
+%  S.labelcolor='g';
+%  S.labelsize=12;
+%
+% This is a subfunction for SOM_GRID. 
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 090499
+
+S.type='som_grid';
+S.neigh='hexa';
+S.shape='sheet';
+S.msize=[1 1];
+S.coord=[];
+S.line='-';
+S.linecolor=[.8 .8 .8];
+S.linewidth=0.5;
+S.marker='o';
+S.markersize=6;
+S.markercolor='k';
+S.surf=[];
+S.label=[];
+S.labelcolor='g';
+S.labelsize=12;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_patch.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,117 @@
+function p=vis_patch(lattice)
+
+% VIS_PATCH Defines the basic patches (hexa and rect) used in SOM_CPLANE
+%
+%  p = vis_patch(lattice)
+%
+%  Input and output arguments: 
+%   lattice   (string) 'rect', 'hexa' or 'hexagon'
+%
+%   p         (matrix) size Lx2, defines the vertices of the patch
+%
+% This function produces vertex coordinates for a patch presenting
+% a map unit in hexagonal or rectangular lattice with its centre in (0,0). 
+%
+% For more help, try 'type vis_patch' or check out online documentation.
+% See also SOM_CPLANE, PATCH.
+
+%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% vis_patch
+%
+% SYNTAX
+%  
+%  p = vis_patch(lattice)
+% 
+% DESCRIPTION
+% 
+% Forms a map unit patch for SOM_CPLANE function. Mainly a subroutine
+% of SOM_CPLANE, although can be used for on its own as well.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+% lattice (string)
+% 
+%    'hexa'  produces vertex coordiantes for a hexagoanl patch which 
+%            has its center on (0,0), unit width, and a height of
+%            1.3334 units. This is not a regular hexagon but such that
+%            the node which has topological coordinates (a,b) has its
+%            center in the visualization at coordinates (a,b) for odd
+%            a and at (a,b+.5) for even a. The non-regular look of the
+%            patch is taken care simply by changing the axis ratio.
+%
+%    'rect'  produces vertex coordinates for a uniform rectangular patch.
+%            having its center on (0,0) and unit sidelength. Used as a
+%            subfunction in SOM_CPLANE.
+%
+%    'hexagon' produces vertex coordinates for a regular hexagonal patch.
+%            It may be used in som_cplane if, for some reason, truly
+%            regular hexagons are needed instead of the default unit
+%            markers which are not uniform, but have integer
+%            y-coordinates in the lattice.
+%
+% OUTPUT ARGUMENTS
+%
+% p (matrix) The 2-dimensional vertex coordinates: 
+%
+%   case 'rect'        case 'hexa'                case 'hexagon'
+%    p=[[-.5 -.5];...     p=[[0     0.6667];...    p=[[0     0.5774];...
+%       [-.5  .5];...        [0.5   0.3333];...       [0.5   0.2887];...
+%       [ .5  .5];...        [0.5  -0.3333];...       [0.5  -0.2887];...
+%       [ .5 -.5]];          [0    -0.6667];...       [0    -0.5774];...
+%                            [-0.5 -0.3333];...       [-0.5 -0.2887];...
+%                            [-0.5  0.3333]];         [-0.5  0.2887]]; 
+%
+% EXAMPLES
+%
+%  som_cplane(vis_patch('rect'),[6 5],'none');
+%  % this produces the same result as som_cplane('rect',[6 5], 'none') 
+%  
+%  som_cplane(vis_patch('hexa'), vis_unit_coord('hexa',[6 5]), 'none');
+%  % produces in principle the same result as 
+%  % som_cplane(vis_patch('hexa'),[6 5],'none'), 
+%  % _but_ in this case the axis are not rescaled and the non-regular 
+%  % shape of hexagons can be seen.
+%
+%  som_cplane(vis_patch('hexagon'), som_unit_coords([6 5],'hexa'), 'none');
+%  % produces a truly regular hexa lattice 
+%
+% SEE ALSO 
+%
+%  vis_unit_coord   The default 'hexa' and 'rect' coordinates in visualizations
+%  som_unit_coords  Locations of units on the SOM grid.
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 041099
+
+if ~ischar(lattice)
+  error('Input argument should be a string')
+else
+  switch lattice
+  case 'rect'
+    p=[[-.5 -.5]; ...
+      [-.5 .5];...
+      [.5 .5];...
+      [.5 -.5]];
+  case 'hexagon'
+    p=[[0 0.5774];...
+      [0.5 0.2887];...
+      [0.5 -0.2887];...
+      [0 -0.5774];...
+      [-0.5 -0.2887];...
+      [-0.5 0.2887]];
+  case 'hexa'
+    p=[[0 0.6667];...
+      [0.5 0.3333];...
+      [0.5 -0.3333];...
+      [0 -0.6667];...
+      [-0.5 -0.3333];...
+      [-0.5 0.3333]];
+  otherwise
+    error('Unknown lattice');
+  end
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_planeGetArgs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,107 @@
+function [nargin_,varargout]=vis_planeGetArgs(varargin)
+
+% VIS_PLANEGETARGS Subfunction for som_*plane: extracts topolopy 
+%                  information from the first arguments.
+%
+% [nargin,varargout]=vis_planeGetArgs(varargin)
+%
+%  Input and output arguments: 
+%   varargin   (varies) arguments given to som_*plane function
+%   nargin_    (scalar) number of arguments that nargchk of som_*plane "should see"
+%                       +number_of_varargins if varargin{1} is not map/topol struct
+%                       +number_of_varargins+1 if varargin{2} is a map/topol struct
+%   varargout  (varies) the arguments that som_*plane "should see"
+%
+% Basically, this function allows topology information to be given 
+% in various ways: either as a map/topology struct, or as a argument pair:
+% lattice, msize. The topology is always converted into the (lattice, msize)
+% argument pair.
+%  - if first input argument (varargin{1}) is a map or topol struct 
+%    the function extracts lattice and msize fields to two first 
+%    output variables after 'nargin_'. 
+%  - otherwise it copies the input arguments to the output arguments 
+%    after 'nargin_'. 
+% If there are too many inputs (as compared to number of outputs), the 
+% last ones are ignored. If too few, they are replaced by empty values 
+% in outputs.
+%
+% Example of usage: 
+%   function definition: h = som_cplane(varargin)
+%   first code line:     [nargin,lattice,msize,color,size,pos]=vis_planeGetArgs(varargin);
+%
+% See also SOM_CPLANE, SOM_BARPLANE, SOM_PLOTPLANE, SOM_PIEPLANE.
+
+% Copyright (c) 2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 240300
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+nout=nargout-1;
+
+% Set first all varargins to contain empty (==default values in som_*plane)
+
+for i=1:nout, varargout{i}=[]; end
+
+nargin_ = nargin;
+% Struct: might be map or topol
+
+if isstruct(varargin{1}),
+
+  % Get topol from topol field
+  if isfield(varargin{1},'topol'), topol=varargin{1}.topol;
+  else topol=varargin{1}; % assume that this is topol struct 
+  end
+
+  if ~isstruct(topol),
+    % topol not a struct !?
+    warning('Field ''topol'' is not a struct.');
+    varargout{1}=varargin{1};
+    varargoutC=2;
+    nargin_ = nargin;
+  elseif ~isfield(topol,'msize') | ~isfield(topol,'lattice'),
+    % Field missing?!
+    warning('Invalid topology struct.');
+    varargout{1}=topol;
+    varargoutC=2;
+    nargin_ = nargin;
+  else
+    varargout{1}=topol.lattice;
+    varargout{2}=topol.msize;
+    % increment input arg. counter
+    varargoutC=3;
+    nargin_ = nargin+1;    
+  end
+
+elseif iscell(varargin{1}), 
+
+  c = varargin{1}; 
+  lattice = 'hexa'; shape = 'sheet'; msize = [1 1]; 
+  for i=1:length(c), 
+    if ischar(c{i}), 
+      switch c{i}, 
+      case {'hexa','hexaU','rect','rectU'}, lattice = c{i}; 
+      case {'sheet','cyl','toroid'}, shape = c{i}; 
+      end
+    else
+      msize = c{i}; 
+    end 
+  end
+  varargout{1} = lattice;
+  varargout{2} = msize;
+  varargoutC=3;
+  nargin_ = nargin+1;    
+
+else
+
+  % should be a lattice (string) 
+  varargout{1}=varargin{1};
+  varargoutC=2;
+  nargin_=nargin;
+
+end
+
+for i=2:nargin, varargout{varargoutC+i-2}=varargin{i}; end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_show_gui_comp.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,702 @@
+function vis_show_gui_comp(h, indx, action,varargin)
+
+%VIS_SHOW_GUI_COMP is a subfunction of SOM_SHOW_GUI.
+%
+%  vis_show_gui_comp(handle, indx, action, varargin)
+%
+%  Input arguments:
+%     handle    (struct) 
+%     indx     (scalar)
+%     action    (string)
+%     varargin  (varies)
+% 
+% See also  SOM_SHOW_GUI.
+
+% Copyright (c) 2000 by Roman Feldman and Juha Vesanto
+% Contributed to SOM Toolbox on August 22nd, 2000
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta roman 160800 juuso 220800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                    MAIN                                   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+udata = get(h,'UserData');
+plot_array = udata.plot_array;
+l = length(plot_array);
+
+ %%%%%%
+% init %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%
+
+if (strcmp(action,'init'))
+
+  %---  color vars  ---
+    fig_color = [0.8 0.8 0.8];
+    bg_color1 = [0.701960784313725 0.701960784313725 0.701960784313725];
+    bg_color2 = [0.9 0.9 0.9];
+  %---  object position vars (in pixels) ---
+    % calculations based on case 'comp'
+    %% hint text
+    hint_dist1 = 98.17-(61.27+36.9);   % hint text lower edge and next lower frame upper edge
+    hint_dist2 = 123-(98.17+18.45);    % figure upper edge and hint text upper edge
+    %% general
+    dist1 = 67.42-61.27;               % general distance between frame edge and object in frame
+    %% frame + ok / cancel
+    frames_dist = 61.27-(8.38+36.9);
+    frames_dist2 = 8.38;
+    f_fr = [7.9 8.38 216.2 36.9];      % final frame
+    ok_pb = [17.1 15.76 75.9 22.14];
+    cancel_pb = [139 15.76 75.9 22.14];
+    %% objects
+    hint_txt = [230 18.45];           % hint text width and height
+    interp_cb = [98.9 24.6];
+    title_txt = [35 hint_txt(2)];
+    title_edit_h =  23.083;
+    var_pop = interp_cb;
+    list_lt = [130 130];
+    calc_txt = [list_lt(1) hint_txt(2)];
+    useall_pb = [50 interp_cb(2)];
+
+  if (length(indx) > 1)
+    errordlg({'Same options for multiple subplots', ...
+              'not yet available'},'Error in SOM_VIS: options');
+    return;
+
+  elseif (isempty(plot_array(1).args))
+    errordlg({'Try to select subplot first'}, ...
+              'Error in SOM_VIS: options');
+    return;
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  % 'comp'
+  %
+  elseif (strncmp('comp',plot_array(indx).args{1},4))
+    old_fig_n = watchon;
+    W = 230; H = 123;
+    units = get(h,'units');
+    set(h,'units','pixels');
+    fp = get(h,'Position');
+    fig_pos = [(fp(1)+fp(3)) ...
+               (fp(2)+fp(2)+fp(4)/2-H/2) ...
+               W ...
+               H];
+    o1 = sum(f_fr([2 4]))+frames_dist;
+    o2 = o1+dist1;
+    o3 = 2*dist1+interp_cb(2);
+    o4 = o1+o3+hint_dist1;
+    hint_text_pos = [1 o4 hint_txt];
+    frame1_pos = [f_fr(1) o1 f_fr(3) o3];
+    interp_pos = [ok_pb(1) o2 interp_cb];
+    frame2_pos = f_fr;
+    ok_pos = ok_pb;
+    cancel_pos = cancel_pb;
+    
+    fig_h = figure( ...
+      'Units','pixels', ...
+      'Position', fig_pos, ...
+      'Color',fig_color, ...
+      'NumberTitle','off', ...
+      'Name','component', ...
+      'MenuBar','none', ...
+      'Visible','off');
+
+    set( ...
+    uicontrol( ...                                                            %% hint
+      'Units','pixels', ...
+      'BackgroundColor',fig_color, ...
+      'HorizontalAlignment','center', ...
+      'Position',hint_text_pos, ...
+      'String','Options for component plane', ...
+      'Style','text'),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame1_pos, ...
+      'Style','frame'),'units','normalized');
+
+    pr = udata.property{indx};
+    chkb_h =  uicontrol( ...                                                  %% interpolated
+      'Units','pixels', ...
+      'HorizontalAlignment','center', ...
+      'Position',interp_pos, ...
+      'Style','checkbox', ...
+      'String','interpolated', ...
+      'Value',pr{1});
+    set(chkb_h,'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame2_pos, ...
+      'Style','frame'),'units','normalized');
+
+    s = ['vis_show_gui_comp(', ...
+         mat2str(h), ',', mat2str(indx), ...
+         ',''comp'',' mat2str(fig_h) ')'];
+    set( ...
+    uicontrol( ...                                                            %% OK
+      'Units','pixels', ...
+      'Position',ok_pos, ...
+      'String','OK', ...
+      'Callback',s),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% Cancel
+      'Units','pixels', ...
+      'Position',cancel_pos, ...
+      'String','Cancel', ...
+      'Callback',['close(' mat2str(fig_h) ')']),'units','normalized');
+
+    watchoff(old_fig_n);
+    tmp_udata = [chkb_h];
+    set(fig_h,'units','normalized', ...
+	      'Visible','on', ...
+              'UserData',tmp_udata, ...
+              'handlevisibility','off');
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  % 'umat'
+  %
+  elseif (strncmp('umat',plot_array(indx).args{1},4))
+    old_fig_n = watchon;
+    W = 230; H = 335.893;
+    units = get(h,'units');
+    set(h,'units','pixels');
+    fp = get(h,'Position');
+    fig_pos = [(fp(1)+fp(3)) ...
+               (fp(2)+fp(2)+fp(4)/2-H/2) ...
+               W ...
+               H];
+    o1 = sum(f_fr([2 4]))+frames_dist;
+    o2 = o1+dist1;
+    o3 = 2*dist1+list_lt(2)+calc_txt(2);
+    o4 = o2+list_lt(2);
+    o5 = sum(cancel_pb([1 3]))-useall_pb(1);
+    o6 = o2+o3/2-useall_pb(2)/2;
+    o7 = o1+o3+frames_dist2;
+    o8 = 2*dist1+interp_cb(2);
+    o9 = o7+dist1;
+    o10 = o7+o8+frames_dist2;;
+    o11 = 2*dist1+max(title_edit_h,title_txt(2));
+    o12 = W-(title_txt(1)+2*ok_pb(1));
+    o13 = o10+dist1+(title_edit_h-title_txt(2))/2;
+    o14 = o10+dist1;
+    if title_txt(2)>title_edit_h,
+      o13 = o10+dist1;
+      o14 = o13+(title_edit_h-title_txt(2))/2;
+    end
+    o15 = ok_pb(1)+title_txt(1);
+    o16 = o10+o11+hint_dist1;
+    hint_text_pos = [1 o16 hint_txt];
+    frame1_pos = [f_fr(1) o10 f_fr(3) o11];
+    title_text_pos = [ok_pb(1) o13 title_txt];
+    title_pos = [o15 o14 o12 title_edit_h];
+    frame2_pos = [f_fr(1) o7 f_fr(3) o8];
+    interp_pos = [ok_pb(1) o9 interp_cb];
+    frame3_pos = [f_fr(1) o1 f_fr(3) o3];
+    list_text_pos = [ok_pb(1) o4 calc_txt];
+    list_pos = [ok_pb(1) o2 list_lt];
+    use_all_pos = [o5 o6 useall_pb];
+    frame4_pos = f_fr;
+    ok_pos = ok_pb;
+    cancel_pos = cancel_pb;
+
+    fig_h = figure( ...
+      'Units','pixels', ...
+      'Position', fig_pos, ...
+      'Color',fig_color, ...
+      'NumberTitle','off', ...
+      'Name','U-matrix', ...
+      'MenuBar','none', ...
+      'Visible','off');
+
+    set( ...
+    uicontrol( ...                                                            %% hint
+      'Units','pixels', ...
+      'BackgroundColor',fig_color, ...
+      'HorizontalAlignment','center', ...
+      'Position',hint_text_pos, ...
+      'String','Options for U-matrix', ...
+      'Style','text'),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame1_pos, ...
+      'Style','frame'),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% title
+      'Units','pixels', ...
+      'Position',title_text_pos, ...
+      'BackgroundColor',bg_color1, ...
+      'HorizontalAlignment','left', ...
+      'Style','text', ...
+      'String','Title'),'units','normalized');
+
+    pr = udata.property{indx};
+    ed_h =  uicontrol( ...                                                    %% [edit]
+      'Units','pixels', ...
+      'Position',title_pos, ...
+      'FontSize',12, ...
+      'Style','edit', ...
+      'String',pr{2}, ...
+      'BackgroundColor',bg_color2);
+    set(ed_h,'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame2_pos, ...
+      'Style','frame'),'units','normalized');
+
+    chkb_h =  uicontrol( ...                                                  %% interpolated
+      'Units','pixels', ...
+      'Position',interp_pos, ...
+      'Style','checkbox', ...
+      'String','interpolated', ...
+      'Value',pr{1});
+    set(chkb_h,'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame3_pos, ...
+      'Style','frame'),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% calculated from
+      'Units','pixels', ...
+      'BackgroundColor',bg_color1, ...
+      'HorizontalAlignment','left', ...
+      'Position',list_text_pos, ...
+      'String','calculated from', ...
+      'Style','text'),'units','normalized');
+
+    list1_h = uicontrol( ...                                                  %% [listbox]
+      'Units','pixels', ...
+      'BackgroundColor',bg_color2, ...
+      'Position',list_pos, ...
+      'String',udata.sM.comp_names, ...
+      'Style','listbox', ...
+      'Max',2, ...
+      'Value',pr{3});
+    set(list1_h,'units','normalized');
+
+    s = ['tmp=get(' mat2str(fig_h) ',''userdata'');set(tmp(3),''value'',' ...
+         mat2str(1:length(udata.sM.comp_names)) ');'];
+    set( ...
+    uicontrol( ...                                                            %% Use all
+      'Units','pixels', ...
+      'Position',use_all_pos, ...
+      'String','Use all', ...
+      'Callback',s),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame4_pos, ...
+      'Style','frame'),'units','normalized');
+
+    s = ['vis_show_gui_comp(' ...
+         mat2str(h) ',' mat2str(indx) ...
+         ',''umat'',' mat2str(fig_h) ')'];
+    set( ...
+    uicontrol( ...                                                            %% OK
+      'Units','pixels', ...
+      'Position',ok_pos, ...
+      'String','OK', ...
+      'Callback',s),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% Cancel
+      'Units','pixels', ...
+      'Position',cancel_pos, ...
+      'String','Cancel', ...
+      'Callback',['close(' mat2str(fig_h) ')']),'units','normalized');
+
+    watchoff(old_fig_n);
+    tmp_udata = [chkb_h ed_h list1_h];
+    set(fig_h,'units','normalized', ...
+	      'Visible','on', ...
+              'UserData', tmp_udata, ...
+              'handlevisibility','off');
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  % 'color'
+  %
+  elseif (strncmp('color',plot_array(indx).args{1},5))
+    old_fig_n = watchon;
+    W = 230; H = 212.043;
+    units = get(h,'units');
+    set(h,'units','pixels');
+    fp = get(h,'Position');
+    fig_pos = [(fp(1)+fp(3)) ...
+               (fp(2)+fp(2)+fp(4)/2-H/2) ...
+                W ...
+                H];
+    o1 = sum(f_fr([2 4]))+frames_dist;
+    o2 = o1+dist1;
+    o3 = 2*dist1+var_pop(2);
+    o4 = o1+o3+frames_dist2;
+    o5 = o4+dist1;
+    o6 = 2*dist1+interp_cb(2);
+    o7 = o4+o6+frames_dist2;
+    o8 = 2*dist1+max(title_edit_h,title_txt(2));
+    o9 = W-(title_txt(1)+2*ok_pb(1));
+    o10 = o7+dist1+(title_edit_h-title_txt(2))/2;
+    o11 = o7+dist1;
+    if title_txt(2)>title_edit_h,
+      o10 = o7+dist1;
+      o11 = o10+(title_edit_h-title_txt(2))/2;
+    end
+    o12 = ok_pb(1)+title_txt(1);
+    o13 = o7+o8+hint_dist1;
+    hint_text_pos = [1 o13 hint_txt];
+    frame1_pos = [f_fr(1) o7 f_fr(3) o8];
+    title_text_pos = [ok_pb(1) o10 title_txt];
+    title_pos = [o12 o11 o9 title_edit_h];
+    frame2_pos = [f_fr(1) o4 f_fr(3) o6];
+    interp_pos = [ok_pb(1) o5 interp_cb];
+    frame3_pos = [f_fr(1) o1 f_fr(3) o3];
+    popup_pos = [ok_pb(1) o2 var_pop];
+    frame4_pos = f_fr;
+    ok_pos = ok_pb;
+    cancel_pos = cancel_pb;
+        
+    fig_h = figure( ...
+      'Units','pixels', ...
+      'Position',fig_pos, ...
+      'Color',fig_color, ...
+      'NumberTitle','off', ...
+      'Name','color plane', ...
+      'MenuBar','none', ...
+      'Visible','off');
+
+    set( ...
+    uicontrol( ...                                                            %% hint
+      'Units','pixels', ...
+      'BackgroundColor',fig_color, ...
+      'HorizontalAlignment','center', ...
+      'Position',hint_text_pos, ...
+      'String','Options for colorplane', ...
+      'Style','text'),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame1_pos, ...
+      'Style','frame'),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% title
+      'Units','pixels', ...
+      'Position',title_text_pos, ...
+      'HorizontalAlignment','left', ...
+      'Style','text', ...
+      'String','Title'),'units','normalized');
+
+    pr = udata.property{indx};
+    ed_h =  uicontrol( ...                                                    %% [edit]
+      'Units','pixels', ...
+      'Position',title_pos, ...
+      'FontSize',12, ...
+      'Style','edit', ...
+      'String',pr{2}, ...
+      'BackgroundColor',bg_color2);
+    set(ed_h,'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame2_pos, ...
+      'Style','frame'),'units','normalized');
+
+    chkb_h =  uicontrol(  ...                                                 %% interpolated
+      'Units','pixels', ...
+      'Position',interp_pos, ...
+      'Style','checkbox', ...
+      'String','interpolated', ...
+      'Value',pr{1});
+    set(chkb_h,'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame3_pos, ...
+      'Style','frame'),'units','normalized');
+
+    popup1_h = uicontrol( ...                                                 %% [popup]
+      'Units','pixels', ...
+      'Max',2, ...
+      'Min',1, ...
+      'Position',popup_pos, ...
+      'String',pr{3}, ...
+      'Style','popupmenu', ...
+      'Value',pr{4});
+    s = ['tmp=get(' mat2str(fig_h) ',''userdata'');' ...
+         'vis_show_gui_tool([tmp(3) 6],''popup_select'');' ...
+         'u=get(' mat2str(h) ',''UserData'');' ...
+         'v=' mat2str(indx) ';' ...
+         'pr=u.property{v};' ...
+         'pr{3}=get(tmp(3),''string'');' ...
+         'pr{4}=get(tmp(3),''value'');' ...
+         'u.property{v}=pr;' ...
+         'set(' mat2str(h) ',''userdata'',u)'];
+    set(popup1_h,'units','normalized', ...
+                 'Callback',s);
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame4_pos, ...
+      'Style','frame'),'units','normalized');
+
+    s = ['vis_show_gui_comp(', ...
+         mat2str(h), ',', mat2str(indx), ...
+         ',''color'',' mat2str(fig_h) ')'];
+    set( ...
+    uicontrol( ...                                                            %% OK
+      'Units','pixels', ...
+      'Position',ok_pos, ...
+      'String','OK', ...
+      'Callback',s),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% Cancel
+      'Units','pixels', ...
+      'Position',cancel_pos, ...
+      'String','Cancel', ...
+      'Callback',['close(' mat2str(fig_h) ')']),'units','normalized');
+
+    watchoff(old_fig_n);
+    tmp_udata = [chkb_h ed_h popup1_h];
+    set(fig_h,'units','normalized', ...
+	      'Visible','on', ...
+              'UserData', tmp_udata, ...
+              'handlevisibility','off');
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  % 'empty'
+  %
+  elseif (strncmp('empty',plot_array(indx).args{1},5))
+    old_fig_n = watchon;
+    W = 230; H = 121.483;
+    units = get(h,'units');
+    set(h,'units','pixels');
+    fp = get(h,'Position');
+    fig_pos = [(fp(1)+fp(3)) ...
+               (fp(2)+fp(2)+fp(4)/2-H/2) ...
+               W ...
+               H]; 
+    o1 = sum(f_fr([2 4]))+frames_dist;
+    o2 = 2*dist1+max(title_edit_h,title_txt(2));
+    o3 = 2*dist1+interp_cb(2);
+    o4 = W-(title_txt(1)+2*ok_pb(1));
+    o5 = o1+dist1+(title_edit_h-title_txt(2))/2;
+    o6 = o1+dist1;
+    if title_txt(2)>title_edit_h,
+      o5 = o1+dist1;
+      o6 = o5+(title_edit_h-title_txt(2))/2;
+    end
+    o7 = ok_pb(1)+title_txt(1);
+    o8 = o1+o2+hint_dist1;
+    hint_text_pos = [1 o8 hint_txt];
+    frame1_pos = [f_fr(1) o1 f_fr(3) o3];
+    title_text_pos = [ok_pb(1) o5 title_txt];
+    title_pos = [o7 o6 o4 title_edit_h];
+    frame2_pos = f_fr;
+    ok_pos = ok_pb;
+    cancel_pos = cancel_pb;
+    
+    fig_h = figure( ...
+      'Units','pixels', ...
+      'Position', fig_pos, ...
+      'Color',fig_color, ...
+      'NumberTitle','off', ...
+      'Name','empty plane', ...
+      'MenuBar','none', ...
+      'Visible','off');
+
+    set( ...
+    uicontrol( ...                                                            %% hint
+      'Units','pixels', ...
+      'BackgroundColor',fig_color, ...
+      'HorizontalAlignment','center', ...
+      'Position',hint_text_pos, ...
+      'String','Options for empty plane', ...
+      'Style','text'),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame1_pos, ...
+      'Style','frame'),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% title
+      'Units','pixels', ...
+      'Position',title_text_pos, ...
+      'HorizontalAlignment','left', ...
+      'Style','text', ...
+      'String','Title'),'units','normalized');
+
+    pr = udata.property{indx};
+    ed_h =  uicontrol( ...                                                    %% [edit]
+      'Units','pixels', ...
+      'Position',title_pos, ...
+      'Style','edit', ...
+      'FontSize',12, ...
+      'String',pr{1}, ...
+      'BackgroundColor',bg_color2);
+    set(ed_h,'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% [frame]
+      'Units','pixels', ...
+      'Position',frame2_pos, ...
+      'Style','frame'),'units','normalized');
+
+    s = ['vis_show_gui_comp(', ...
+         mat2str(h) ',' mat2str(indx), ...
+         ',''empty'',' mat2str(fig_h) ')'];
+    set( ...
+    uicontrol( ...                                                            %% OK
+      'Units','pixels', ...
+      'Position',ok_pos, ...
+      'String','OK', ...
+      'Callback',s),'units','normalized');
+
+    set( ...
+    uicontrol( ...                                                            %% Cancel
+      'Units','pixels', ...
+      'Position',cancel_pos, ...
+      'String','Cancel', ...
+      'Callback',['close(' mat2str(fig_h) ')']),'units','normalized');
+
+    watchoff(old_fig_n);
+    tmp_udata = [ed_h];
+    set(fig_h,'units','normalized', ...
+	      'Visible','on', ...
+              'UserData', tmp_udata, ...
+              'handlevisibility','off');
+
+  end
+
+ %%%%%%
+% comp %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%
+elseif (strcmp(action,'comp'))
+  tmp_h = get(varargin{1},'UserData');
+  v = get(tmp_h,'Value');
+  pr = udata.property{indx};
+  if (v)
+    v = 'compi';
+    pr{1} = 1;
+  else
+    v = 'comp';
+    pr{1} = 0;
+  end
+  plot_array(indx).args{1} = v;
+  udata.plot_array = plot_array;
+  udata.property{indx} = pr;
+  set(h,'UserData',udata);
+  close(varargin{1});
+
+ %%%%%%
+% umat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%
+elseif (strcmp(action,'umat'))
+  tmp_h = get(varargin{1},'UserData');
+  v = get(tmp_h(1),'Value');
+  pr = udata.property{indx};
+  if (v)
+    v = 'umati';
+    pr{1} = 1;
+  else
+    v = 'umat';
+    pr{1} = 0;
+  end
+  plot_array(indx).args{1} = v;
+
+  s = get(tmp_h(2),'String');
+  v = get(tmp_h(3),'Value');  % userdata
+  plot_array(indx).string = s;
+  if strcmp(s,'U-matrix')
+    plot_array(indx).args{2} = v;
+  else
+    plot_array(indx).args{2} = {v s};
+  end
+  pr{2} = s;
+  pr{3} = v;
+  udata.plot_array = plot_array;
+  udata.property{indx} = pr;
+  set(h,'UserData',udata);
+  set(udata.h(1),'String',{plot_array(:).string});
+  close(varargin{1});
+
+ %%%%%%%
+% color %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%
+elseif (strcmp(action,'color'))
+  tmp_h = get(varargin{1},'UserData'); % tmp_h =  [chkb_h ed_h popup1_h];
+
+  v = get(tmp_h(1),'Value');
+  pr = udata.property{indx};
+  if (v)
+    v = 'colori';
+    pr{1} = 1;
+  else
+    v = 'color';
+    pr{1} = 0;
+  end
+  plot_array(indx).args{1} = v;
+
+  v = get(tmp_h(3),'Value');
+  s = get(tmp_h(3),'string');
+  if v>5 & ~strcmp(s{v},'-variable-'),
+    m = evalin('base',s{v});
+  elseif ~strcmp(s{v},'-variable-'),
+    m = som_colorcode(udata.sM,s{v});
+  end
+  plot_array(indx).args{2} = m;
+  pr{3} = s;
+  s = get(tmp_h(2),'String');
+  plot_array(indx).string = s;
+  if ~strcmp(s,'Color code')
+    plot_array(indx).args{2} = ...
+        {plot_array(indx).args{2} s};
+  end
+  pr{2} = s;
+  pr{4} = v;
+  udata.plot_array = plot_array;
+  udata.property{indx} = pr;
+  set(h,'UserData',udata);
+  set(udata.h(1),'String',{plot_array(:).string});
+  close(varargin{1});
+
+ %%%%%%%
+% empty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%
+elseif (strcmp(action,'empty'))
+  pr = udata.property{indx};
+  tmp_h = get(varargin{1},'UserData');
+  s = get(tmp_h,'String');
+  pr{1} = s;
+  plot_array(indx).string = s;
+  plot_array(indx).args{2} = s;
+  udata.plot_array = plot_array;
+  udata.property{indx} = pr;
+  set(h,'UserData',udata);
+  set(udata.h(1),'String',{plot_array(:).string});
+  close(varargin{1});
+
+else
+
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_show_gui_tool.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2085 @@
+function r=vis_show_gui_tool(h,action,varargin)
+
+%VIS_SHOW_GUI_TOOL is a subfunction of SOM_SHOW_GUI.
+%
+%  r = vis_show_gui_tool(handle, action, varargin)
+%
+%  Input arguments:
+%     handle    (struct) 
+%     action    (string)
+%     varargin  (varies)
+% 
+% See also  SOM_SHOW_GUI.
+
+% Copyright (c) 2000 by Roman Feldman and Juha Vesanto
+% Contributed to SOM Toolbox on August 22nd, 2000
+% http://www.cis.hut.fi/projects/somtoolbox/
+ 
+% Version 2.0beta roman 160800 juuso 220800
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if ishandle(h(1)),
+  udata = get(h(1),'UserData');
+  if isfield(udata,'plot_array'),
+    plot_array = udata.plot_array;
+    if isfield(udata,'vis_h')
+      % get most recent plotted
+      children = get(0,'children');
+      %  first refresh plot info
+      udata.vis_h = setdiff(udata.vis_h,setdiff(udata.vis_h,children));
+      set(h(1),'userdata',udata);
+      for i=1:length(children),
+        if any(children(i)==udata.vis_h),
+          child = children(i);
+          [handles,msg,lattice,msize,dim]=vis_som_show_data('all',children(i));
+          break;
+        elseif i==length(children),
+          errordlg({'Plot not found', ...
+                    'Try to visualize first'},'Error in SOM_VIS: tools');
+          return;
+        end
+      end
+    else
+      errordlg({'Plot not found', ...
+                'Try to visualize first'},'Error in SOM_VIS: tools');
+      return;
+    end
+  end
+end
+
+%---  color vars  ---
+  fig_color = [0.8 0.8 0.8];
+  bg_color1 = [0.701960784313725 0.701960784313725 0.701960784313725];
+  bg_color2 = [0.9 0.9 0.9];
+%---  object position vars (in pixels) ---
+  % calculations based on case 'comp'
+  %% hint text
+  hint_dist1 = 98.17-(61.27+36.9);   % hint text lower edge and next lower frame upper edge
+  hint_dist2 = 123-(98.17+18.45);    % figure upper edge and hint text upper edge
+  %% general
+  dist1 = 67.42-61.27;               % general distance between frame edge and object in frame
+  %% frame + ok / cancel
+  frames_dist = 61.27-(8.38+36.9);
+  frames_dist2 = 8.38;
+  f_fr = [7.9 8.38 216.2 36.9];      % final frame
+  ok_pb = [17.1 15.76 75.9 22.14];
+  cancel_pb = [139 15.76 75.9 22.14];
+  %% objects
+  hint_txt = [460 18.45];           % hint text width and height
+  interp_cb = [98.9 24.6];
+  title_txt = [90 hint_txt(2)-3];
+  title_edit_h =  23.083;
+  var_pop = [interp_cb(1) ok_pb(4)];
+  list_lt = [130 130];
+  calc_txt = [list_lt(1) hint_txt(2)];
+  selvar_pb = [110 ok_pb(4)];
+  strd_ed = [var_pop(1) title_edit_h];
+  radio_rb = selvar_pb;
+  
+ %%%%%%%%%%%
+% add_label %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%
+if strcmp(action,'add_label')
+  old_fig_n = watchon;
+  W = 345.4; H = 222.769;
+  o21 = zeros(1,4);
+  o21(1) = (W-f_fr(3))/2;
+  f_fr = [7.9 8.38 (W-2*7.9) 36.9];      % final frame
+  cancel_pb = [(W-(ok_pb(1)+75.9)) 15.76 75.9 22.14];
+  hint_txt = [W 18.45];           % hint text width and height
+  units = get(h,'units');
+  set(h,'units','pixels');
+  fp = get(h,'Position');
+  fig_pos = [(fp(1)+fp(3)) ...
+             (fp(2)+fp(2)+fp(4)/2-H/2) ...
+             W ...
+             H];
+  o1 = sum(f_fr([2 4]))+frames_dist;
+  o2 = 4*dist1+2*max([title_edit_h,title_txt(2)]) ...
+      +max([title_txt(2),var_pop(2)]);
+  o6 = max([title_txt(2),var_pop(2)]);
+  o7 = max([title_txt(2),title_edit_h]);
+  o8 = max([title_txt(2),title_edit_h,selvar_pb(2)]);
+  o3 = o1+0.5*o6+dist1-title_txt(2)/2;
+  o4 = o1+0.5*o6+dist1-var_pop(2)/2;  
+  o5 = ok_pb(1)+title_txt(1);
+  o9 = o1+o6+0.5*o7+2*dist1-title_txt(2)/2;
+  o10 = o1+o6+0.5*o7+2*dist1-title_edit_h/2;;
+  o11 = o1+o6+o7+0.5*o8+3*dist1-title_txt(2)/2;
+  o12 = o1+o6+o7+0.5*o8+3*dist1-title_edit_h/2;
+  o13 = o1+o6+o7+0.5*o8+3*dist1-selvar_pb(2)/2;
+  o15 = o1+o2+frames_dist2;
+  o16 = 2*dist1+o7;
+  o17 = o5+strd_ed(1)+2*dist1; % W-ok_pb(1)-selvar_pb(1);
+  o18 = o15+0.5*o7+dist1-title_txt(2)/2;
+  o19 = o15+0.5*o7+dist1-title_edit_h/2;
+  o20 = o15+o16+hint_dist1;
+  hint_text_pos = [1 o20 hint_txt];
+  frame1_pos = [f_fr(1) o15 f_fr(3) o16];
+  subplots_text_pos = [ok_pb(1) o18 title_txt];
+  subplots_pos = [o5 o19 strd_ed];
+  frame2_pos = [f_fr(1) o1 f_fr(3) o2];
+  labels_text_pos = [ok_pb(1) o11 title_txt];
+  labels_pos = [o5 o12 strd_ed];
+  sel_var_pos = [o17 o13 selvar_pb];
+  text_size_text_pos = [ok_pb(1) o9 title_txt];
+  text_size_pos = [o5 o10  strd_ed];
+  text_color_text_pos = [ok_pb(1) o3 title_txt];
+  text_color_pos = [o5 o4 var_pop];
+  f_fr = [7.9 8.38 216.2 36.9];      % final frame
+  cancel_pb = [139 15.76 75.9 22.14];
+  frame3_pos = f_fr+o21;
+  ok_pos = ok_pb+o21;
+  cancel_pos = cancel_pb+o21;
+
+  fig_h = figure( ...
+    'Units','pixels', ...
+    'Position', fig_pos, ...
+    'Color',fig_color, ...
+    'NumberTitle','off', ...
+    'Name','add label', ...
+    'MenuBar','none', ...
+    'Visible','off');
+
+    set( ...
+    uicontrol( ...                                                            %% hint
+      'Units','pixels', ...
+      'BackgroundColor',fig_color, ...
+      'HorizontalAlignment','center', ...
+      'Position',hint_text_pos, ...
+      'String','Options for adding labels', ...
+      'Style','text'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame1_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% To subplot(s)
+    'Units','pixels', ...
+    'Position',subplots_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','To subplot(s)', ...
+    'Style','text'),'units','normalized');
+
+  ed1_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',subplots_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed1_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame2_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Labels
+    'Units','pixels', ...
+    'Position',labels_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Labels', ...
+    'Style','text'),'units','normalized');
+
+  ed2_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',labels_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed2_h,'units','normalized');
+
+  s = ['tmp=get(' mat2str(fig_h) ',''userdata'');' ...
+       'vis_show_gui_tool(tmp(2),''select'')'];
+  set( ...
+  uicontrol( ...                                                            %% Select variable
+    'Units','pixels', ...
+    'Position',sel_var_pos, ...
+    'String','Select variable', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Text size
+    'Units','pixels', ...
+    'Position',text_size_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Text size', ...
+    'Style','text'),'units','normalized');
+
+  ed3_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',text_size_pos, ...
+    'String','10', ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed3_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Text color
+    'Units','pixels', ...
+    'Position',text_color_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Text color', ...
+    'Style','text'),'units','normalized');
+
+  ud = {'k' 'w' 'y' 'm' 'c' 'r' 'g' 'b' 'xor' 'none'};
+  s = {'black' 'white' 'yellow' 'magenta' 'cyan' 'red' 'green' ...
+       'blue' 'xor' 'none'};
+  p_h = uicontrol( ...                                                      %% [popupmenu]
+    'Units','pixels', ...
+    'Position',text_color_pos, ...
+    'UserData',ud, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame3_pos, ...
+    'Style','frame'),'units','normalized');
+
+  s = ['vis_show_gui_tool(' mat2str(h) ',''label'',' mat2str(fig_h) ')'];
+  set( ...
+  uicontrol( ...                                                            %% OK
+    'Units','pixels', ...
+    'Position',ok_pos, ...
+    'String','OK', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Cancel
+    'Units','pixels', ...
+    'Position',cancel_pos, ...
+    'String','Cancel', ...
+    'Callback',['close(' mat2str(fig_h) ')']),'units','normalized');
+
+  watchoff(old_fig_n);
+  ud = [ed1_h ed2_h ed3_h p_h];
+  set(fig_h,'units','normalized', ...
+            'Visible','on', ...
+            'UserData',ud, ...
+            'handlevisibility','off');
+
+ %%%%%%%%%
+% add_hit %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%
+elseif strcmp(action,'add_hit')
+  old_fig_n = watchon;
+  W = 424.3; H = 337.642;
+  o37 = zeros(1,4);
+  o37(1) = (W-f_fr(3))/2;
+  f_fr = [7.9 8.38 (W-2*7.9) 36.9];      % final frame
+  cancel_pb = [(W-(ok_pb(1)+75.9)) 15.76 75.9 22.14];
+  hint_txt = [W 18.45];           % hint text width and height
+  units = get(h,'units');
+  set(h,'units','pixels');
+  fp = get(h,'Position');
+  fig_pos = [(fp(1)+fp(3)) ...
+             (fp(2)+fp(2)+fp(4)/2-H/2) ...
+             W ...
+             H];
+  o1 = sum(f_fr([2 4]))+frames_dist;
+  o2 = o1+dist1;
+  o6 = max([title_txt(2),var_pop(2)]);
+  o7 = max([title_txt(2),title_edit_h]);
+  o8 = max([title_txt(2),title_edit_h,var_pop(2)]);
+  o38 = max([title_txt(2),title_edit_h,selvar_pb(2)]);
+  o3 = o8+o6+3*dist1;
+  o4 = o1+0.5*o8+dist1-title_txt(2)/2;
+  o5 = o1+0.5*o8+dist1-var_pop(2)/2;
+  o9 = o1+0.5*o8+dist1-title_edit_h/2;
+  o21 = o1+o8+0.5*o6+2*dist1-title_txt(2)/2;
+  o22 = o1+o8+0.5*o6+2*dist1-var_pop(2)/2;
+  o20 = ok_pb(1)+title_txt(1);
+  o10 = o20+var_pop(1)+2*dist1;
+  o11 = o10+title_txt(1);
+  o12 = o2+o8+dist1+0.5*o6-title_txt(2)/2;
+  o13 = o2+o8+dist1+0.5*o6-var_pop(2)/2;
+  o14 = o1+o3+frames_dist2;
+  o15 = 2*o6+o8+4*dist1;
+  o16 = o14+dist1+0.5*o6-title_txt(2)/2;
+  o17 = o14+dist1+0.5*o6-var_pop(2)/2;
+  o18 = o14+o6+2*dist1+0.5*o8-title_txt(2)/2;
+  o19 = o14+o6+2*dist1+0.5*o8-title_edit_h/2;
+  o23 = o14+o6+2*dist1+0.5*o8-var_pop(2)/2;
+  o24 = o14+o6+3*dist1+o8+0.5*o6-title_txt(2)/2;
+  o25 = o14+o6+3*dist1+o8+0.5*o6-var_pop(2)/2;
+  o26 = o14+o15+frames_dist2;
+  o27 = o8+2*dist1;
+  o28 = o26+dist1+0.5*o38-title_txt(2)/2;
+  o29 = o26+dist1+0.5*o38-title_edit_h/2;
+  o30 = o26+dist1+0.5*o38-selvar_pb(2)/2;
+  o31 = o10; %W-(ok_pb(1)+selvar_pb(1));
+  o32 = o26+o27+frames_dist2;
+  o33 = o7+2*dist1;
+  o34 = o32+dist1+0.5*o7-title_txt(2)/2;
+  o35 = o32+dist1+0.5*o7-title_edit_h/2;
+  o36 = o32+o33+hint_dist1;
+  hint_text_pos = [1 o36 hint_txt];
+  frame1_pos = [f_fr(1) o32 f_fr(3) o33];
+  subplots_text_pos = [ok_pb(1) o34 title_txt];
+  subplots_pos = [o20 o35 strd_ed];
+  frame2_pos = [f_fr(1) o26 f_fr(3) o27];
+  trace_vect_text_pos = [ok_pb(1) o28 title_txt];
+  trace_vect_pos = [o20 o29 strd_ed];
+  sel_vect_pos = [o31 o30 selvar_pb];
+  frame3_pos = [f_fr(1) o14 f_fr(3) o15];
+  marker_text_pos = [ok_pb(1) o24 title_txt];
+  marker_pos = [o20 o25 var_pop];
+  marker_size_text_pos = [ok_pb(1) o18 title_txt];
+  marker_size_pos = [o20 o19 strd_ed];
+  size_fact_text_pos = [o10 o18 title_txt];
+  size_fact_pos = [o11 o23 var_pop];
+  marker_color_text_pos = [ok_pb(1) o16 title_txt];
+  marker_color_pos = [o20 o17 var_pop];
+  edge_color_text_pos = [o10 o16 title_txt];
+  edge_color_pos = [o11 o17 var_pop];
+  frame4_pos = [f_fr(1) o1 f_fr(3) o3];
+  text_text_pos = [ok_pb(1) o21 title_txt];
+  text_pos = [o20 o22 var_pop];
+  text_color_text_pos = [ok_pb(1) o4 title_txt];
+  text_color_pos = [o20 o5 var_pop];
+  text_size_text_pos = [o10 o4 title_txt];
+  text_size_pos = [o11 o9 strd_ed];
+  f_fr = [7.9 8.38 216.2 36.9];      % final frame
+  cancel_pb = [139 15.76 75.9 22.14];
+  frame5_pos = f_fr+o37;
+  ok_pos = ok_pb+o37;
+  cancel_pos = cancel_pb+o37;
+
+  fig_h = figure( ...
+    'Units','pixels', ...
+    'Position', fig_pos, ...
+    'Color',fig_color, ...
+    'NumberTitle','off', ...
+    'Name','add hit histogram', ...
+    'MenuBar','none', ...
+    'Visible','off');
+
+    set( ...
+    uicontrol( ...                                                            %% hint
+      'Units','pixels', ...
+      'BackgroundColor',fig_color, ...
+      'HorizontalAlignment','center', ...
+      'Position',hint_text_pos, ...
+      'String','Options for adding hit histogram', ...
+      'Style','text'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame1_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% To subplot(s)
+    'Units','pixels', ...
+    'Position',subplots_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','To subplot(s)', ...
+    'Style','text'),'units','normalized');
+
+  ed1_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',subplots_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed1_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame2_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Trace vector
+    'Units','pixels', ...
+    'Position',trace_vect_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Hit vector', ...
+    'Style','text'),'units','normalized');
+
+  ed2_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',trace_vect_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed2_h,'units','normalized');
+
+  s = ['tmp=get(' mat2str(fig_h) ',''userdata'');' ...
+       'vis_show_gui_tool(tmp(2),''select'')'];
+  set( ...
+  uicontrol( ...                                                            %% Select variable
+    'Units','pixels', ...
+    'Position',sel_vect_pos, ...
+    'String','Select variable', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame3_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Marker
+    'Units','pixels', ...
+    'Position',marker_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Marker', ...
+    'Style','text'),'units','normalized');
+
+  s = {'lattice' 'o' '.' 'x' '+' '*' 's' 'd' 'v' '^' ...
+       '<' '>' 'p' 'h' 'none' 'cell array'};
+  p3_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',marker_pos, ...
+    'String',s, ...
+    'Style','popupmenu');
+  s = ['tmp=get(' mat2str(fig_h) ',''userdata'');' ...
+       'vis_show_gui_tool([tmp(6),16],''popup_select'')'];
+  set(p3_h,'units','normalized','Callback',s);
+
+  set( ...
+  uicontrol( ...                                                            %% Marker size
+    'Units','pixels', ...
+    'HorizontalAlignment','left', ...
+    'Position',marker_size_text_pos, ...
+    'String','Marker size', ...
+    'Style','text'),'units','normalized');
+
+  ed4_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',marker_size_pos, ...
+    'String','12', ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed4_h,'units','normalized','Callback',s);
+
+  set( ...
+  uicontrol( ...                                                            %% Size factor
+    'Units','pixels', ...
+    'HorizontalAlignment','left', ...
+    'Position',size_fact_text_pos, ...
+    'String','Size factor', ...
+    'Style','text'),'units','normalized');
+
+  s = {'common' 'separate'};
+  p4_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',size_fact_pos, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p4_h,'units','normalized');
+
+
+  set( ...
+  uicontrol( ...                                                            %% Marker color
+    'Units','pixels', ...
+    'HorizontalAlignment','left', ...
+    'Position',marker_color_text_pos, ...
+    'String','Marker color', ...
+    'Style','text'),'units','normalized');
+
+  ud = {'w' 'k' 'y' 'm' 'c' 'r' 'g' 'b' 'none' ''};
+  s = {'white' 'black' 'yellow' 'magenta' 'cyan' ...
+       'red' 'green' 'blue' 'none' '-matrix-'};
+  p5_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',marker_color_pos, ...
+    'UserData',ud, ...
+    'String',s, ...
+    'Style','popupmenu');
+  s = ['tmp=get(' mat2str(fig_h) ',''userdata'');' ...
+      'vis_show_gui_tool([tmp(9) 10],''popup_select'')'];
+  set(p5_h,'units','normalized','Callback',s);
+
+  set( ...
+  uicontrol( ...                                                            %% EdgeColor
+    'Units','pixels', ...
+    'Position',edge_color_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Edge color', ...
+    'Style','text'),'units','normalized');
+
+  ud = {'none' 'w' 'k' 'y' 'm' 'c' 'r' 'g' 'b'};
+  s = {'none' 'white' 'black' 'yellow' 'magenta' 'cyan' ...
+       'red' 'green' 'blue'};
+  p6_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',edge_color_pos, ...
+    'UserData',ud, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p6_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame4_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Text
+    'Units','pixels', ...
+    'Position',text_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Text', ...
+    'Style','text'),'units','normalized');
+
+  s = {'off' 'on'};
+  p2_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',text_pos, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p2_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Text
+    'Units','pixels', ...
+    'Position',text_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Text', ...
+    'Style','text'),'units','normalized');
+
+  s = {'off' 'on'};
+  p2_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',text_pos, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p2_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Text color
+    'Units','pixels', ...
+    'Position',text_color_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Text color', ...
+    'Style','text'),'units','normalized');
+
+  ud = {'k' 'w' 'y' 'm' 'c' 'r' 'g' 'b' 'xor'};
+  s = {'black' 'white' 'yellow' 'magenta' 'cyan' ...
+       'red' 'green' 'blue' 'xor'};
+  p1_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',text_color_pos, ...
+    'UserData',ud, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p1_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Text size
+    'Units','pixels', ...
+    'Position',text_size_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Text size', ...
+    'Style','text'),'units','normalized');
+
+  ed3_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',text_size_pos, ...
+    'String','3', ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed3_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame5_pos, ...
+    'Style','frame'),'units','normalized');
+
+  s = ['vis_show_gui_tool(' mat2str(h) ',''hit'',' mat2str(fig_h) ')'];
+  set( ...
+  uicontrol( ...                                                            %% OK
+    'Units','pixels', ...
+    'Position',ok_pos, ...
+    'String','OK', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Cancel
+    'Units','pixels', ...
+    'Position',cancel_pos, ...
+    'String','Cancel', ...
+    'Callback',['close(' mat2str(fig_h) ')']),'units','normalized');
+
+  watchoff(old_fig_n);
+  tmp_udata = [ed1_h ed2_h p1_h ed3_h p2_h p3_h ed4_h p4_h p5_h p6_h];
+  set(fig_h,'units','normalized', ...
+            'Visible','on', ...
+            'UserData',tmp_udata, ...
+            'handlevisibility','off');
+
+ %%%%%%%%%%
+% add_traj %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%
+elseif strcmp(action,'add_traj')
+  old_fig_n = watchon;
+  W = 424.3; H = 337.642;
+  o34 = zeros(1,4);
+  o34(1) = (W-f_fr(3))/2;
+  f_fr = [7.9 8.38 (W-2*7.9) 36.9];      % final frame
+  cancel_pb = [(W-(ok_pb(1)+75.9)) 15.76 75.9 22.14];
+  hint_txt = [W 18.45];           % hint text width and height
+  units = get(h,'units');
+  set(h,'units','pixels');
+  fp = get(h,'Position');
+  fig_pos = [(fp(1)+fp(3)) ...
+             (fp(2)+fp(2)+fp(4)/2-H/2) ...
+             W ...
+             H];
+  o1 = sum(f_fr([2 4]))+frames_dist;
+  o2 = o1+dist1;
+  o6 = max([title_txt(2),var_pop(2)]);
+  o7 = max([title_txt(2),title_edit_h]);
+  o8 = max([title_txt(2),title_edit_h,var_pop(2)]);
+  o38 = max([title_txt(2),title_edit_h,selvar_pb(2)]);
+  o20 = ok_pb(1)+title_txt(1);
+  o10 = o20+var_pop(1)+2*dist1;
+  o11 = o10+title_txt(1);
+  o3 = 2*o6+o8+4*dist1;
+  o4 = o1+dist1+0.5*o6-title_txt(2)/2;
+  o5 = o1+dist1+0.5*o6-var_pop(2)/2;
+  o9 = o1+2*dist1+o6+0.5*o8-title_txt(2)/2;
+  o12 = o1+2*dist1+o6+0.5*o8-title_edit_h/2;
+  o13 = o1+2*dist1+o6+0.5*o8-var_pop(2)/2;
+  o14 = o1+3*dist1+o6+o8+0.5*o6-title_edit_h/2;
+  o15 = o1+3*dist1+o6+o8+0.5*o6-var_pop(2)/2;
+  o16 = o1+o3+frames_dist2;
+  o17 = o8+o6+3*dist1;
+  o18 = o16+dist1+0.5*o8-title_txt(2)/2;
+  o19 = o16+dist1+0.5*o8-title_edit_h/2;
+  o21 = o16+dist1+0.5*o8-var_pop(2)/2;
+  o22 = o16+2*dist1+o8+0.5*o6-title_txt(2)/2;
+  o23 = o16+2*dist1+o8+0.5*o6-var_pop(2)/2;
+  o24 = o16+o17+frames_dist2;
+  o25 = o38+2*dist1;
+  o26 = o24+dist1+0.5*o38-title_txt(2)/2;
+  o27 = o24+dist1+0.5*o38-title_edit_h/2;
+  o28 = o24+dist1+0.5*o38-selvar_pb(2)/2;
+  o29 = o24+o25+frames_dist2;
+  o30 = o7+2*dist1;
+  o31 = o29+dist1+0.5*o7-title_txt(2)/2;
+  o32 = o29+dist1+0.5*o7-title_edit_h/2;
+  o33 = o29+o30+hint_dist1;
+  hint_text_pos = [1 o33 hint_txt];
+  frame1_pos = [f_fr(1) o29 f_fr(3) o30];
+  subplots_text_pos = [ok_pb(1) o31 title_txt];
+  subplots_pos = [o20 o32 strd_ed];
+  frame2_pos = [f_fr(1) o24 f_fr(3) o25];
+  trace_vect_text_pos = [ok_pb(1) o26 title_txt];
+  trace_vect_pos = [o20 o27 strd_ed];
+  sel_vect_pos = [o10 o28 selvar_pb];
+  frame3_pos = [f_fr(1) o16 f_fr(3) o17];
+  line_color_text_pos = [ok_pb(1) o22 title_txt];
+  line_color_pos = [o20 o23 var_pop];
+  line_width_text_pos = [ok_pb(1) o18 title_txt];
+  line_width_pos = [o20 o19 strd_ed];
+  width_factor_text_pos = [o10 o18 title_txt];
+  width_factor_pos = [o11 o19 var_pop];
+  frame4_pos = [f_fr(1) o1 f_fr(3) o3];
+  marker_text_pos = [ok_pb(1) o14 title_txt];
+  marker_pos = [o20 o15 var_pop];
+  marker_size_text_pos = [ok_pb(1) o9 title_txt];
+  marker_size_pos = [o20 o12 strd_ed];
+  size_factor_text_pos = [o10 o9 title_txt];
+  size_factor_pos = [o11 o13 var_pop];
+  marker_color_text_pos = [ok_pb(1) o4 title_txt];
+  marker_color_pos = [o20 o5 var_pop];
+  edge_color_text_pos = [o10 o4 title_txt];
+  edge_color_pos = [o11 o5 var_pop];
+  f_fr = [7.9 8.38 216.2 36.9];      % final frame
+  cancel_pb = [139 15.76 75.9 22.14];
+  frame5_pos = f_fr+o34;
+  ok_pos = ok_pb+o34;
+  cancel_pos = cancel_pb+o34;
+
+  fig_h = figure( ...
+    'Units','pixels', ...
+    'Position', fig_pos, ...
+    'Color',fig_color, ...
+    'NumberTitle','off', ...
+    'Name','add trajectory', ...
+    'MenuBar','none', ...
+    'Visible','off');
+
+    set( ...
+    uicontrol( ...                                                            %% hint
+      'Units','pixels', ...
+      'BackgroundColor',fig_color, ...
+      'HorizontalAlignment','center', ...
+      'Position',hint_text_pos, ...
+      'String','Options for adding trajectory', ...
+      'Style','text'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame1_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...
+    'Units','pixels', ...                                                   %% To subplot(s)
+    'Position',subplots_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','To subplot(s)', ...
+    'Style','text'),'units','normalized');
+
+  ed1_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',subplots_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed1_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame2_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Trace vector
+    'Units','pixels', ...
+    'Position',trace_vect_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Trajectory', ...
+    'Style','text'),'units','normalized');
+
+  ed2_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',trace_vect_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed2_h,'units','normalized');
+
+  s = ['tmp=get(' mat2str(fig_h) ',''userdata'');' ...
+       'vis_show_gui_tool(tmp(2),''select'')'];
+  set( ...
+  uicontrol( ...                                                            %% Select variable
+    'Units','pixels', ...
+    'Position',sel_vect_pos, ...
+    'String','Select variable', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame3_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Line color
+    'Units','pixels', ...
+    'Position',line_color_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Line color', ...
+    'Style','text'),'units','normalized');
+
+  ud = {'w' 'k' 'y' 'm' 'c' 'r' 'g' 'b' 'xor'};
+  s = {'white' 'black' 'yellow' 'magenta' 'cyan' ...
+       'red' 'green' 'blue' 'xor'};
+  p1_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',line_color_pos, ...
+    'UserData',ud, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p1_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Line width
+    'Units','pixels', ...
+    'Position',line_width_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Line width', ...
+    'Style','text'),'units','normalized');
+
+  ed3_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',line_width_pos, ...
+    'String','3', ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed3_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Factor
+    'Units','pixels', ...
+    'Position',width_factor_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Factor', ...
+    'Style','text'),'units','normalized');
+
+  s = {'hit' 'equal'};
+  p2_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',width_factor_pos, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p2_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame4_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Marker
+    'Units','pixels', ...
+    'Position',marker_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Marker', ...
+    'Style','text'),'units','normalized');
+
+  s = {'o' '.' 'x' '+' '*' 's' 'd' 'v' '^' ...
+       '<' '>' 'p' 'h' 'none'};
+  p3_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',marker_pos, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p3_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Marker size
+    'Units','pixels', ...
+    'HorizontalAlignment','left', ...
+    'Position',marker_size_text_pos, ...
+    'String','Marker size', ...
+    'Style','text'),'units','normalized');
+
+  ed4_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',marker_size_pos, ...
+    'String','10', ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed4_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Factor
+    'Units','pixels', ...
+    'HorizontalAlignment','left', ...
+    'Position',size_factor_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Factor', ...
+    'Style','text'),'units','normalized');
+
+  s = {'hit' 'equal'};
+  p4_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',size_factor_pos, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p4_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Marker color
+    'Units','pixels', ...
+    'HorizontalAlignment','left', ...
+    'Position',marker_color_text_pos, ...
+    'String','Marker color', ...
+    'Style','text'),'units','normalized');
+
+  ud = {'w' 'k' 'y' 'm' 'c' 'r' 'g' 'b' 'none'};
+  s = {'white' 'black' 'yellow' 'magenta' 'cyan' ...
+       'red' 'green' 'blue' 'none'};
+  p5_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',marker_color_pos, ...
+    'UserData',ud, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p5_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Edge color
+    'Units','pixels', ...
+    'Position',edge_color_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Edge color', ...
+    'Style','text'),'units','normalized');
+
+  ud = {'none' 'w' 'k' 'y' 'm' 'c' 'r' 'g' 'b'};
+  s = {'none' 'white' 'black' 'yellow' 'magenta' 'cyan' ...
+       'red' 'green' 'blue'};
+  p6_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',edge_color_pos, ...
+    'UserData',ud, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p6_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame5_pos, ...
+    'Style','frame'),'units','normalized');
+
+  s = ['vis_show_gui_tool(' mat2str(h) ',''traj'',' mat2str(fig_h) ')'];
+  set( ...
+  uicontrol( ...                                                            %% OK
+    'Units','pixels', ...
+    'Position',ok_pos, ...
+    'String','OK', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Cancel
+    'Units','pixels', ...
+    'Position',cancel_pos, ...
+    'String','Cancel', ...
+    'Callback',['close(' mat2str(fig_h) ')']),'units','normalized');
+
+  watchoff(old_fig_n);
+  tmp_udata = [ed1_h ed2_h p1_h ed3_h p2_h p3_h ed4_h p4_h p5_h p6_h];
+  set(fig_h,'units','normalized', ...
+            'Visible','on', ...
+            'UserData',tmp_udata, ...
+            'handlevisibility','off');
+
+ %%%%%%%%%%%
+% add_comet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%
+elseif strcmp(action,'add_comet')
+  old_fig_n = watchon;
+  W = 424.3; H = 265.589;
+  o26 = zeros(1,4);
+  o26(1) = (W-f_fr(3))/2;
+  f_fr = [7.9 8.38 (W-2*7.9) 36.9];      % final frame
+  cancel_pb = [(W-(ok_pb(1)+75.9)) 15.76 75.9 22.14];
+  hint_txt = [W 18.45];           % hint text width and height
+  units = get(h,'units');
+  set(h,'units','pixels');
+  fp = get(h,'Position');
+  fig_pos = [(fp(1)+fp(3)) ...
+             (fp(2)+fp(2)+fp(4)/2-H/2) ...
+             W ...
+             H];
+  o1 = sum(f_fr([2 4]))+frames_dist;
+  o2 = o1+dist1;
+  o6 = max([title_txt(2),var_pop(2)]);
+  o7 = max([title_txt(2),title_edit_h]);
+  o8 = max([title_txt(2),title_edit_h,var_pop(2)]);
+  o38 = max([title_txt(2),title_edit_h,selvar_pb(2)]);
+  o20 = ok_pb(1)+title_txt(1);
+  o10 = o20+var_pop(1)+2*dist1;
+  o11 = o10+title_txt(1);
+  o3 = 2*o6+o7+4*dist1;
+  o4 = o1+dist1+0.5*o6-title_txt(2)/2;
+  o5 = o1+dist1+0.5*o6-var_pop(2)/2;
+  o9 = o1+2*dist1+o6+0.5*o7-title_txt(2)/2;
+  o12 = o1+2*dist1+o6+0.5*o7-title_edit_h/2;
+  o13 = o1+3*dist1+o7+1.5*o6-title_txt(2)/2;
+  o14 = o1+3*dist1+o7+1.5*o6-var_pop(2)/2;
+  o15 = o1+o3+frames_dist2;
+  o16 = o38+2*dist1;
+  o17 = o15+dist1+0.5*o38-title_txt(2)/2;
+  o18 = o15+dist1+0.5*o38-title_edit_h/2;
+  o19 = o15+dist1+0.5*o38-selvar_pb(2)/2;
+  o21 = o15+o16+frames_dist2;
+  o22 = o7+2*dist1;
+  o23 = o21+dist1+0.5*o7-title_txt(2)/2;
+  o24 = o21+dist1+0.5*o7-title_edit_h/2;
+  o25 = o21+o22+hint_dist1;
+  hint_text_pos = [1 o25 hint_txt];
+  frame1_pos = [f_fr(1) o21 f_fr(3) o22];
+  subplots_text_pos = [ok_pb(1) o23 title_txt];
+  subplots_pos = [o20 o24 strd_ed];
+  frame2_pos = [f_fr(1) o15 f_fr(3) o16];
+  trace_vect_text_pos = [ok_pb(1) o17 title_txt];
+  trace_vect_pos = [o20 o18 strd_ed];
+  sel_var_pos = [o10 o19 selvar_pb];
+  frame3_pos = [f_fr(1) o1 f_fr(3) o3];
+  marker_text_pos = [ok_pb(1) o13 title_txt];
+  marker_pos = [o20 o14 var_pop];
+  marker_size_text_pos = [ok_pb(1) o9 title_txt];
+  marker_size_pos = [o20 o12 var_pop];
+  marker_color_text_pos = [ok_pb(1) o4 title_txt];
+  marker_color_pos = [o20 o5 var_pop];
+  edge_color_text_pos = [o10 o4 title_txt];
+  edge_color_pos = [o11 o5 var_pop];
+  f_fr = [7.9 8.38 216.2 36.9];      % final frame
+  cancel_pb = [139 15.76 75.9 22.14];
+  frame4_pos = f_fr+o26;
+  ok_pos = ok_pb+o26;
+  cancel_pos = cancel_pb+o26;
+
+  fig_h = figure( ...
+    'Units','pixels', ...
+    'Position', fig_pos, ...
+    'Color',fig_color, ...
+    'NumberTitle','off', ...
+    'Name','add comet', ...
+    'MenuBar','none', ...
+    'Visible','off');
+
+    set( ...
+    uicontrol( ...                                                            %% hint
+      'Units','pixels', ...
+      'BackgroundColor',fig_color, ...
+      'HorizontalAlignment','center', ...
+      'Position',hint_text_pos, ...
+      'String','Options for adding comet', ...
+      'Style','text'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame1_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% To subplot(s)
+    'Units','pixels', ...
+    'Position',subplots_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','To subplot(s)', ...
+    'Style','text'),'units','normalized');
+
+  ed1_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',subplots_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed1_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame2_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Trace vector
+    'Units','pixels', ...
+    'Position',trace_vect_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Trace vector', ...
+    'Style','text'),'units','normalized');
+
+  ed2_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',trace_vect_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed2_h,'units','normalized');
+
+  s = ['tmp=get(' mat2str(fig_h) ',''userdata'');' ...
+       'vis_show_gui_tool(tmp(2),''select'')'];
+  set( ...
+  uicontrol( ...                                                            %% Select variable
+    'Units','pixels', ...
+    'Position',sel_var_pos, ...
+    'String','Select variable', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame3_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Marker
+    'Units','pixels', ...
+    'Position',marker_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Marker', ...
+    'Style','text'),'units','normalized');
+
+  s = {'o' '.' 'x' '+' '*' 's' 'd' 'v' '^' ...
+       '<' '>' 'p' 'h' 'lattice' 'none'};
+  p1_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',marker_pos, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p1_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Marker size
+    'Units','pixels', ...
+    'HorizontalAlignment','left', ...
+    'Position',marker_size_text_pos, ...
+    'String','Marker size', ...
+    'Style','text'),'units','normalized');
+
+  ed3_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',marker_size_pos, ...
+    'String','[20 4]', ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed3_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Marker color
+    'Units','pixels', ...
+    'HorizontalAlignment','left', ...
+    'Position',marker_color_text_pos, ...
+    'String','Marker color', ...
+    'Style','text'),'units','normalized');
+
+  ud = {'w' 'k' 'y' 'm' 'c' 'r' 'g' 'b' 'none' ''};
+  s = {'white' 'black' 'yellow' 'magenta' 'cyan' ...
+       'red' 'green' 'blue' 'none' '-matrix-'};
+  p2_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',marker_color_pos, ...
+    'UserData',ud, ...
+    'String',s, ...
+    'Style','popupmenu');
+  s = ['tmp=get(' mat2str(fig_h) ',''userdata'');' ...
+       'vis_show_gui_tool([tmp(5) 10],''popup_select'')'];
+  set(p2_h,'units','normalized','Callback',s);
+
+  set( ...
+  uicontrol( ...                                                            %% Edge color
+    'Units','pixels', ...
+    'Position',edge_color_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Edge color', ...
+    'Style','text'),'units','normalized');
+
+  ud = {'none' 'w' 'k' 'y' 'm' 'c' 'r' 'g' 'b'};
+  s = {'none' 'white' 'black' 'yellow' 'magenta' 'cyan' ...
+       'red' 'green' 'blue'};
+  p3_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',edge_color_pos, ...
+    'UserData',ud, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p3_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame4_pos, ...
+    'Style','frame'),'units','normalized');
+
+  s = ['vis_show_gui_tool(' mat2str(h) ',''comet'',' mat2str(fig_h) ')'];
+  set( ...
+  uicontrol( ...                                                            %% OK
+    'Units','pixels', ...
+    'Position',ok_pos, ...
+    'String','OK', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Cancel
+    'Units','pixels', ...
+    'Position',cancel_pos, ...
+    'String','Cancel', ...
+    'Callback',['close(' mat2str(fig_h) ')']),'units','normalized');
+
+  watchoff(old_fig_n);
+  tmp_udata = [ed1_h ed2_h p1_h ed3_h p2_h p3_h];
+  set(fig_h,'units','normalized', ...
+            'Visible','on', ...
+            'UserData',tmp_udata, ...
+            'handlevisibility','off');
+
+ %%%%%%%%%%%%
+% recolorbar %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%
+elseif strcmp(action,'recolorbar')
+  old_fig_n = watchon;
+  W = 345.4; H = 237.299;
+  o25 = zeros(1,4);
+  o25(1) = (W-f_fr(3))/2;
+  f_fr = [7.9 8.38 (W-2*7.9) 36.9];      % final frame
+  cancel_pb = [(W-(ok_pb(1)+75.9)) 15.76 75.9 22.14];
+  hint_txt = [W 18.45];           % hint text width and height
+  units = get(h,'units');
+  set(h,'units','pixels');
+  fp = get(h,'Position');
+  fig_pos = [(fp(1)+fp(3)) ...
+             (fp(2)+fp(2)+fp(4)/2-H/2) ...
+             W ...
+             H];
+  o1 = sum(f_fr([2 4]))+frames_dist;
+  o2 = o1+dist1;
+  o6 = max([title_txt(2),var_pop(2)]);
+  o7 = max([title_txt(2),title_edit_h]);
+  o8 = max([title_txt(2),title_edit_h,selvar_pb(2)]);
+  o20 = ok_pb(1)+title_txt(1);
+  o10 = o20+var_pop(1)+2*dist1;
+  o11 = o10+title_txt(1);
+  o3 = o6+2*dist1;
+  o4 = o1+dist1+0.5*o6-title_txt(2)/2;
+  o5 = o1+dist1+0.5*o6-var_pop(2)/2;
+  o9 = o1+o3+frames_dist2;
+  o12 = 2*o8+3*dist1;
+  o13 = o9+dist1+0.5*o8-title_txt(2)/2;
+  o14 = o9+dist1+0.5*o8-title_edit_h/2;
+  o15 = o9+dist1+0.5*o8-var_pop(2)/2;
+  o16 = o9+2*dist1+1.5*o8-title_txt(2)/2;
+  o17 = o9+2*dist1+1.5*o8-title_edit_h/2;
+  o18 = o9+2*dist1+1.5*o8-var_pop(2)/2;
+  o19 = o9+o12+frames_dist2;
+  o21 = o7+2*dist1;
+  o22 = o19+dist1+0.5*o7-title_txt(2)/2;
+  o23 = o19+dist1+0.5*o7-title_edit_h/2;
+  o24 = o19+o21+hint_dist1;
+  hint_text_pos = [1 o24 hint_txt];
+  frame1_pos = [f_fr(1) o19 f_fr(3) o21];
+  subplots_text_pos = [ok_pb(1) o22 title_txt];
+  subplots_pos = [o20 o23 strd_ed];
+  frame2_pos = [f_fr(1) o9 f_fr(3) o12];
+  tics_text_pos = [ok_pb(1) o16 title_txt];
+  tics_pos = [o20 o17 strd_ed];
+  sel_var2_pos = [o10 o18 var_pop];
+  labels_text_pos = [ok_pb(1) o13 title_txt];
+  labels_pos = [o20 o14 strd_ed];
+  sel_var1_pos = [o10 o15 var_pop];
+  frame3_pos = [f_fr(1) o1 f_fr(3) o3];
+  scale_text_pos = [ok_pb(1) o4 title_txt];
+  scale_pos = [o20 o5 1.3*var_pop(1) var_pop(2)];
+  f_fr = [7.9 8.38 216.2 36.9];      % final frame
+  cancel_pb = [139 15.76 75.9 22.14];
+  frame4_pos = f_fr+o25;
+  ok_pos = ok_pb+o25;
+  cancel_pos = cancel_pb+o25;
+
+  fig_h = figure( ...
+    'Units','pixels', ...
+    'Position', fig_pos, ...
+    'Color',fig_color, ...
+    'NumberTitle','off', ...
+    'Name','recolorbar', ...
+    'MenuBar','none', ...
+    'Visible','off');
+
+    set( ...
+    uicontrol( ...                                                            %% hint
+      'Units','pixels', ...
+      'BackgroundColor',fig_color, ...
+      'HorizontalAlignment','center', ...
+      'Position',hint_text_pos, ...
+      'String','Options, recolorbar', ...
+      'Style','text'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame1_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% In subplot(s)
+    'Units','pixels', ...
+    'Position',subplots_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','In subplot(s)', ...
+    'Style','text'),'units','normalized');
+
+  ed1_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',subplots_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed1_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame2_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Ticks
+    'Units','pixels', ...
+    'Position',tics_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Ticks', ...
+    'Style','text'),'units','normalized');
+
+  ed3_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',tics_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed3_h,'units','normalized');
+
+  s = ['tmp=get(' mat2str(fig_h) ',''userdata'');' ...
+       'vis_show_gui_tool(tmp(3),''select'')'];
+  set( ...
+  uicontrol( ...                                                            %% Select variable
+    'Units','pixels', ...
+    'Position',sel_var2_pos, ...
+    'String','Select variable', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Labels (cell array)
+    'Units','pixels', ...
+    'Position',labels_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Labels', ...
+    'Style','text'),'units','normalized');
+
+  ed2_h = uicontrol( ...                                                    %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',labels_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed2_h,'units','normalized');
+
+  s = ['tmp=get(' mat2str(fig_h) ',''userdata'');' ...
+       'vis_show_gui_tool(tmp(2),''select'')'];
+  set( ...
+  uicontrol( ...                                                            %% Select variable
+    'Units','pixels', ...
+    'Position',sel_var1_pos, ...
+    'String','Select variable', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame3_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Scale
+    'Units','pixels', ...
+    'Position',scale_text_pos, ...
+    'HorizontalAlignment','left', ...
+    'String','Scale', ...
+    'Style','text'),'units','normalized');
+
+  s = {'denormalized' 'normalized'};
+  p1_h = uicontrol( ...                                                     %% [popupmenu]
+    'Units','pixels', ...
+    'Position',scale_pos, ...
+    'String',s, ...
+    'Style','popupmenu');
+  set(p1_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame4_pos, ...
+    'Style','frame'),'units','normalized');
+
+  s = ['vis_show_gui_tool(' mat2str(h) ',''do_recolorbar'',' mat2str(fig_h) ')'];
+  set( ...
+  uicontrol( ...                                                            %% OK
+    'Units','pixels', ...
+    'Position',ok_pos, ...
+    'String','OK', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% Cancel
+    'Units','pixels', ...
+    'Position',cancel_pos, ...
+    'String','Cancel', ...
+    'Callback',['close(' mat2str(fig_h) ')']),'units','normalized');
+
+  watchoff(old_fig_n);
+  tmp_udata = [ed1_h ed2_h ed3_h p1_h];
+  set(fig_h,'units','normalized', ...
+            'Visible','on', ...
+            'UserData',tmp_udata, ...
+            'handlevisibility','off');
+
+ %%%%%%%
+% clear %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%
+elseif strcmp(action,'clear')
+  old_fig_n = watchon;
+  W = 232; H = 277.463;
+  o25 = zeros(1,4);
+  o25(1) = (W-f_fr(3))/2;
+  f_fr = [7.9 8.38 (W-2*7.9) 36.9];      % final frame
+  cancel_pb = [(W-(ok_pb(1)+75.9)) 15.76 75.9 22.14];
+  hint_txt = [W 18.45];           % hint text width and height
+  units = get(h,'units');
+  set(h,'units','pixels');
+  fp = get(h,'Position');
+  fig_pos = [(fp(1)+fp(3)) ...
+             (fp(2)+fp(2)+fp(4)/2-H/2) ...
+             W ...
+             H];
+  o1 = sum(f_fr([2 4]))+frames_dist;
+  o2 = o1+dist1;
+  o3 = (W-radio_rb(1))/2;
+  o4 = o2+radio_rb(2)+dist1;
+  o5 = o4+radio_rb(2)+dist1;
+  o6 = o5+radio_rb(2)+dist1;
+  o7 = o6+radio_rb(2)+dist1;
+  o8 = 5*radio_rb(2)+6*dist1;
+  o9 = o1+o8+frames_dist2;
+  o10 = max([title_txt(2),title_edit_h]);
+  o11 = o9+dist1+0.5*o10-title_txt(2)/2;
+  o12 = o9+dist1+0.5*o10-strd_ed(2)/2;
+  o20 = W-(ok_pb(1)+strd_ed(1));
+  o13 = o10+2*dist1;
+  o24 = o9+o13+hint_dist1;
+  hint_text_pos = [1 o24 hint_txt];
+  frame1_pos = [f_fr(1) o9 f_fr(3) o13];
+  subplots_text_pos = [ok_pb(1) o11 title_txt];
+  subplots_pos = [o20 o12 strd_ed];
+  frame2_pos = [f_fr(1) o1 f_fr(3) o8];
+  radiob1_pos = [o3 o7 selvar_pb];
+  radiob2_pos = [o3 o6 selvar_pb];
+  radiob3_pos = [o3 o5 selvar_pb];
+  radiob4_pos = [o3 o4 selvar_pb];
+  radiob5_pos = [o3 o2 selvar_pb];
+  f_fr = [7.9 8.38 216.2 36.9];      % final frame
+  cancel_pb = [139 15.76 75.9 22.14];
+  frame3_pos = f_fr;%+o25;
+  ok_pos = ok_pb;%+o25;
+  cancel_pos = cancel_pb;%+o25;
+
+  fig_h = figure( ...
+    'Units','pixels', ...
+    'Position', fig_pos, ...
+    'Color',fig_color, ...
+    'NumberTitle','off', ...
+    'Name','clear label', ...
+    'MenuBar','none', ...
+    'Visible','off');
+
+    set( ...
+    uicontrol( ...                                                            %% hint
+      'Units','pixels', ...
+      'BackgroundColor',fig_color, ...
+      'HorizontalAlignment','center', ...
+      'Position',hint_text_pos, ...
+      'String','Options for clearing', ...
+      'Style','text'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame1_pos, ...
+    'Style','frame'),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                               %% From subplots
+    'Units','pixels', ...
+    'Position',subplots_text_pos, ...
+    'String','From subplots', ...
+    'Style','text'),'units','normalized');
+
+  ed1_h = uicontrol( ...                                                       %% [edit]
+    'Units','pixels', ...
+    'BackgroundColor',bg_color2, ...
+    'Position',subplots_pos, ...
+    'FontSize',12, ...
+    'Style','edit');
+  set(ed1_h,'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame2_pos, ...
+    'Style','frame'),'units','normalized');
+
+  rb1_h = uicontrol( ...                                                       %% 
+    'Units','pixels', ...
+    'Position',radiob1_pos, ...
+    'style','radiobutton', ...
+    'String','All', ...
+    'value',1);                
+
+  rb2_h = uicontrol( ...                                                       %% 
+    'Units','pixels', ...
+    'Position',radiob2_pos, ...
+    'style','radiobutton', ...
+    'String','Comet');                
+
+  rb3_h = uicontrol( ...                                                       %% 
+    'Units','pixels', ...
+    'Position',radiob3_pos, ...
+    'style','radiobutton', ...
+    'String','Hit');                
+
+  rb4_h = uicontrol( ...                                                       %% 
+    'Units','pixels', ...
+    'Position',radiob4_pos, ...
+    'style','radiobutton', ...
+    'String','Label');                
+
+  rb5_h = uicontrol( ...                                                       %% 
+    'Units','pixels', ...
+    'Position',radiob5_pos, ...
+    'style','radiobutton', ...
+    'String','Trajectory');                
+
+  set( ...
+  uicontrol( ...                                                            %% [frame]
+    'Units','pixels', ...
+    'Position',frame3_pos, ...
+    'Style','frame'),'units','normalized');
+
+  s = ['vis_show_gui_tool(' mat2str(h) ',''c_clear'',' mat2str(fig_h) ')'];
+  set( ...
+  uicontrol( ...                                                               %% OK
+    'Units','pixels', ...
+    'Position',ok_pos, ...
+    'String','OK', ...
+    'Callback',s),'units','normalized');
+
+  set( ...
+  uicontrol( ...                                                               %% Cancel
+    'Units','pixels', ...
+    'Position',cancel_pos, ...
+    'String','Cancel', ...
+    'Callback',['close(' mat2str(fig_h) ')']),'units','normalized');
+
+  watchoff(old_fig_n);
+  tmp_udata = [ed1_h rb1_h rb2_h rb3_h rb4_h rb5_h];
+  set(fig_h,'units','normalized', ...
+            'Visible','on', ...
+            'UserData',tmp_udata, ...
+            'handlevisibility','off');
+
+ %%%%%%%%%
+% c_clear %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%
+elseif strcmp(action,'c_clear')
+  thisfig = varargin{1};
+  u = get(varargin{1},'UserData');
+  s = get(u(1),'String');
+  if ~isempty(s)
+    if s(1)=='[' | (s(1)>='1' & s(1)<='9') 
+      sprintf(s,'[%s]',s);
+      e = eval(s); else e = s;
+    end
+    if vis_valuetype(e,{'1xn','nx1','string'}), 
+      if ischar(e),
+        if ~strcmp(e,'all'),
+          errordlg({'Only valid string value' ...
+                    'for subplot indices is ''all''.'}, ...
+                    'Error in SOM_VIS: tools');
+          return;
+        else
+          e=1:length(handles);
+        end
+      elseif any(e<1) | any(e>length(handles)),
+        errordlg({'Subplot indices must be in', ...
+               'range 1...number_of_subplots!'}, ...
+              'Error in SOM_VIS: tools');
+        return;
+      end
+    elseif ~isempty(e)
+      errordlg('Invalid subplot indices!','Error in SOM_VIS: tools');
+      return;
+    end
+  else,
+    e = '';
+  end
+  set(0,'currentfigure',child)
+  v = get(u(2),'value');
+  if v,
+    if ~isempty(e),
+      som_show_clear('lab',e);
+      som_show_clear('hit',e);
+      som_show_clear('traj',e);
+      som_show_clear('comet',e);
+    else
+      som_show_clear('lab');
+      som_show_clear('hit');
+      som_show_clear('traj');
+      som_show_clear('comet');
+    end
+  end
+  v = get(u(3),'value');
+  if v,
+    if ~isempty(e)
+      som_show_clear('comet',e);
+    else
+      som_show_clear('comet');
+    end
+  end
+  v = get(u(4),'value');
+  if v,
+    if ~isempty(e),
+      som_show_clear('hit',e);
+    else
+      som_show_clear('hit');
+    end
+  end
+  v = get(u(5),'value');
+  if v,
+    if ~isempty(e),
+      som_show_clear('lab',e);
+    else
+      som_show_clear('lab');
+    end
+  end
+  v = get(u(6),'value');
+  if v,
+    if ~isempty(e),
+      som_show_clear('traj',e);
+    else
+      som_show_clear('traj');
+    end
+  end
+  close(thisfig);
+
+ %%%%%%%%%%%%%%
+% do_recolorbar %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%
+elseif strcmp(action,'do_recolorbar')
+  args = {};
+  ud = get(varargin{1},'UserData');
+  s = get(ud(1),'String');
+  e = 1:length(handles);
+  if ~isempty(s)
+    if s(1)=='[' | (s(1)>='1' & s(1)<='9') 
+      sprintf(s,'[%s]',s);
+      e = eval(s); else e = s;
+    end
+    if vis_valuetype(e,{'1xn','nx1','string'}), 
+      if ischar(e) & ~strcmp(e,'all'),
+        errordlg({'Only valid string value' ...
+                  'for subplot indices is ''all''.'}, ...
+                  'Error in SOM_VIS: tools');
+        return;
+      elseif any(e<1) | any(e>length(handles)),
+        errordlg({'Subplot indices must be in', ...
+               'range 1...number_of_subplots.'}, ...
+              'Error in SOM_VIS: tools');
+        return;
+      end
+    elseif ~isempty(e)
+      errordlg('Invalid subplot indices!','Error in SOM_VIS: tools');
+      return;
+    end
+  end
+  args = [args {e}];
+  s = get(ud(3),'String');
+  tmp = 'auto';
+  if strcmp(s,'auto') | strcmp(s,'border'),
+    tmp = s;
+  elseif ~isempty(s)
+    tmp = evalin('base',s);
+  end
+  args = [args {tmp}];
+  v = get(ud(4),'Value');
+  s = get(ud(4),'String');
+  args = [args {s{v}}];
+  s = get(ud(2),'String');
+  if ~isempty(s)
+    args = [args {evalin('base',s)}];
+  end
+  thisfig = varargin{1};
+  % set(0,'CurrentFigure',udata.vis_h);
+  set(0,'currentfigure',child)
+  som_recolorbar(args{:});
+  close(thisfig);
+
+ %%%%%%%
+% label %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%
+elseif strcmp(action,'label')
+  args = {'label'};
+  ud = get(varargin{1},'UserData');
+  s = get(ud(2),'String');
+  if ~isempty(s)
+    args = [args {evalin('base',s)}];
+  else
+    args = [args {udata.sM}];
+  end
+  s = get(ud(3),'String');
+  if ~isempty(s)
+    args = [args {'TextSize' eval(s)}];
+  end
+  v = get(ud(4),'Value');
+  if v>1,
+    s = get(ud(4),'UserData');
+    args = [args {'TextColor' s{v}}];
+  end
+  s = get(ud(1),'String');
+  if ~isempty(s)
+    if s(1)=='[' | (s(1)>='1' & s(1)<='9') 
+      sprintf(s,'[%s]',s);
+      e = eval(s); else e = s; 
+    end
+    if vis_valuetype(e,{'1xn','nx1','string'}), 
+      if ischar(e),
+        if ~strcmp(e,'all'),
+          errordlg({'Only valid string value' ...
+                    'for subplot indices is ''all''.'}, ...
+                   'Error in SOM_VIS: tools');
+          return;
+        else
+          e=1:length(handles);
+        end
+      elseif any(e<1) | any(e>length(handles)),
+        errordlg({'Subplot indices must be in', ...
+               'range 1...number_of_subplots!'}, ...
+              'Error in SOM_VIS: tools');
+        return;
+      end
+    elseif ~isempty(e)
+      errordlg('Invalid subplot indices!','Error in SOM_VIS: tools');
+      return;
+    end
+    args = [args {'SubPlot' e}];
+  end
+  thisfig = varargin{1};
+  % set(0,'CurrentFigure',udata.vis_h);
+  set(0,'currentfigure',child)
+  som_show_add(args{:});
+  close(thisfig);
+
+ %%%%%
+% hit %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%
+elseif strcmp(action,'hit')
+  args = {'hit'};
+  ud = get(varargin{1},'UserData');
+  s = get(ud(2),'String');
+  e = evalin('base',s);
+  [dummy k] = size(e);
+  args = [args {e}];
+  v = get(ud(10),'Value');
+  s = get(ud(10),'UserData');
+  args = [args {'EdgeColor' s{v}}];
+  %
+  s = get(ud(7),'String');
+  if ~isempty(s)
+    args = [args {'MarkerSize' eval(s)}];
+  end
+  if k == 1,
+    v = get(ud(6),'Value');
+    if v<16,
+      s = get(ud(6),'String');
+      args = [args {'Marker' s{v}}];
+    else
+      % errordlg();
+      return;
+    end
+    v = get(ud(9),'Value');
+    if v<10,
+      s = get(ud(9),'UserData');
+      args = [args {'MarkerColor' s{v}}];
+    else
+      % errordlg();
+      return;
+    end
+    %
+    v = get(ud(5),'Value');
+    s = get(ud(5),'String');
+    args = [args {'Text' s{v}}];
+    if v>1,  % 1='off'
+      v = get(ud(3),'Value');
+      s = get(ud(3),'UserData');
+      args = [args {'TextColor' s{v}}];
+      %
+      s = get(ud(4),'String');
+      args = [args {'TextSize' eval(s)}];
+    end
+  else
+    v = get(ud(8),'Value');
+    s = get(ud(8),'String');
+    args = [args {'SizeFactor' s{v}}];
+    %
+    v = get(ud(6),'Value');
+    s = get(ud(6),'String');
+    args = [args {'Marker' s{v}}];
+    %
+    v = get(ud(9),'Value');
+    s = get(ud(9),'UserData');
+    args = [args {'MarkerColor' s{v}}];
+  end
+
+  s = get(ud(1),'String');
+  if ~isempty(s)
+    if s(1)=='[' | (s(1)>='1' & s(1)<='9') 
+      sprintf(s,'[%s]',s);
+      e = eval(s); else e = s; 
+    end
+    if vis_valuetype(e,{'1xn','nx1','string'}), 
+      if ischar(e),
+        if ~strcmp(e,'all'),
+          errordlg({'Only valid string value' ...
+                    'for subplot indices is ''all''.'}, ...
+                   'Error in SOM_VIS: tools');
+          return;
+        else
+          e=1:length(handles);
+        end
+      elseif any(e<1) | any(e>length(handles)),
+        errordlg({'Subplot indices must be in', ...
+               'range 1...number_of_subplots!'}, ...
+              'Error in SOM_VIS: tools');
+        return;
+      end
+    elseif ~isempty(e)
+      errordlg('Invalid subplot indices!','Error in SOM_VIS: tools');
+      return;
+    end
+    args = [args {'SubPlot' e}];
+  end
+  thisfig = varargin{1};
+  % set(0,'CurrentFigure',udata.vis_h);
+  set(0,'currentfigure',child)
+  som_show_add(args{:});
+  close(thisfig);
+
+ %%%%%%
+% traj %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%
+elseif strcmp(action,'traj')
+  args = {'traj'};
+  ud = get(varargin{1},'UserData');
+  s = get(ud(2),'String');
+  args = [args {evalin('base',s)}];
+  s = get(ud(4),'String');
+  if ~isempty(s)
+    args = [args {'TrajWidth' eval(s)}];
+  end
+  v = get(ud(5),'Value');
+  if v>1,
+    s = get(ud(5),'String');
+    args = [args {'WidthFactor' s{v}}];
+  end
+  v = get(ud(3),'Value');
+  if v>1,
+    s = get(ud(3),'UserData');
+    args = [args {'TrajColor' s{v}}];
+  end
+  v = get(ud(6),'Value');
+  if v>1,
+    s = get(ud(6),'String');
+    args = [args {'Marker' s{v}}];
+  end
+  s = get(ud(7),'String');
+  if ~isempty(s)
+    args = [args {'MarkerSize' eval(s)}];
+  end
+  v = get(ud(8),'Value');
+  if v>1,
+    s = get(ud(8),'String');
+    args = [args {'SizeFactor' s{v}}];
+  end
+  v = get(ud(9),'Value');
+  if v>1,
+    s = get(ud(9),'UserData');
+    args = [args {'MarkerColor' s{v}}];
+  end
+  v = get(ud(10),'Value');
+  if v>1,
+    s = get(ud(10),'UserData');
+    args = [args {'EdgeColor' s{v}}];
+  end
+  s = get(ud(1),'String');
+  if ~isempty(s)
+    if s(1)=='[' | (s(1)>='1' & s(1)<='9') 
+      sprintf(s,'[%s]',s);
+      e = eval(s); else e = s; 
+    end
+    if vis_valuetype(e,{'1xn','nx1','string'}), 
+      if ischar(e),
+        if ~strcmp(e,'all'),
+          errordlg({'Only valid string value' ...
+                    'for subplot indices is ''all''.'}, ...
+                   'Error in SOM_VIS: tools');
+          return;
+        else
+          e=1:length(handles);
+        end
+      elseif any(e<1) | any(e>length(handles)),
+        errordlg({'Subplot indices must be in', ...
+               'range 1...number_of_subplots!'}, ...
+              'Error in SOM_VIS: tools');
+        return;
+      end
+    elseif ~isempty(e)
+      errordlg('Invalid subplot indices!','Error in SOM_VIS: tools');
+      return;
+    end
+    args = [args {'SubPlot' e}];
+  end
+  thisfig = varargin{1};
+  % set(0,'CurrentFigure',udata.vis_h);
+  set(0,'currentfigure',child)
+  som_show_add(args{:});
+  close(thisfig);
+
+ %%%%%%%
+% comet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%
+elseif strcmp(action,'comet')
+  args = {'comet'};
+  ud = get(varargin{1},'UserData');
+  s = get(ud(2),'String');
+  args = [args {evalin('base',s)}];
+  v = get(ud(3),'Value');
+  if v>1,
+    s = get(ud(3),'String');
+    args = [args {'Marker' s{v}}];
+  end
+  s = get(ud(4),'String');
+  if ~isempty(s)
+    args = [args {'MarkerSize' eval(s)}];
+  end
+  v = get(ud(5),'Value');
+  s = get(ud(5),'UserData');
+  if v==10,
+    args = [args {'MarkerColor' evalin('base',s{10})}];
+  else
+    args = [args {'MarkerColor' s{v}}];
+  end
+  v = get(ud(6),'Value');
+  if v>1,
+    s = get(ud(6),'UserData');
+    args = [args {'EdgeColor' s{v}}];
+  end
+  s = get(ud(1),'String');
+  if ~isempty(s)
+    if s(1)=='[' | (s(1)>='1' & s(1)<='9') 
+      sprintf(s,'[%s]',s);
+      e = eval(s); else e = s; 
+    end
+    if vis_valuetype(e,{'1xn','nx1','string'}), 
+      if ischar(e),
+        if ~strcmp(e,'all'),
+          errordlg({'Only valid string value' ...
+                    'for subplot indices is ''all''.'}, ...
+                   'Error in SOM_VIS: tools');
+          return;
+        else
+          e=1:length(handles);
+        end
+      elseif any(e<1) | any(e>length(handles)),
+        errordlg({'Subplot indices must be in', ...
+               'range 1...number_of_subplots!'}, ...
+              'Error in SOM_VIS: tools');
+        return;
+      end
+    elseif ~isempty(e)
+      errordlg('Invalid subplot indices!','Error in SOM_VIS: tools');
+      return;
+    end
+    args = [args {'SubPlot' e}];
+  end
+  thisfig = varargin{1};
+  % set(0,'CurrentFigure',udata.vis_h);
+  set(0,'currentfigure',child)
+  som_show_add(args{:});
+  close(thisfig);
+
+ %%%%%%%%
+% select %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%
+elseif strcmp(action,'select')
+  %% NOTE: input h is not main_gui_handle
+  %%       but edit menu handle
+  w = evalin('base','whos');
+  for (i=1:length(w)) 
+    size_frst{i} = mat2str(w(i).size(1));
+    x(i,1) = 'x';
+    size_scnd{i} = mat2str(w(i).size(2));
+  end    
+  names = strvcat(w.name);
+  [dummy vert] = size(names);
+  for (i=1:length(w))
+    for (j=1:8)
+      sp(i,j) = ' ';
+    end
+  end
+  size_M = strjust(strvcat(size_frst{:}),'right');
+  size_N = strjust(strvcat(size_scnd{:}),'left');
+  classes = strvcat(w.class);
+  s = [cellstr([names sp size_M x size_N sp classes])]';
+
+  [sel,ok] = listdlg('ListString',s,...
+                     'Name','Variable selection',...
+                     'PromptString','Select variable', ...
+                     'SelectionMode','single');
+  if ok & ~isempty(sel), 
+    w = {w.name};
+    if ishandle(h),
+      set(h,'String',w{sel});
+    elseif nargout==1,
+      r = w{sel};
+    end
+  elseif nargout==1,
+    r = '';
+  end
+
+ %%%%%%%%%%%%%%
+% popup_select %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%
+elseif strcmp(action,'popup_select')
+  %% NOTE: input h is not main_gui_handle
+  %%       but h(1) is popupmenu handle and h(2:end) are indeces
+  v = get(h(1),'Value');
+  if any(v==h(2:end)),
+    w = evalin('base','whos');
+    for (i=1:length(w)) 
+      size_frst{i} = mat2str(w(i).size(1));
+      x(i,1) = 'x';
+      size_scnd{i} = mat2str(w(i).size(2));
+    end
+    names = strvcat(w.name);
+    [dummy vert] = size(names);
+    for (i=1:length(w))
+      for (j=1:8)
+        sp(i,j) = ' ';
+      end
+    end
+    size_M = strjust(strvcat(size_frst{:}),'right');
+    size_N = strjust(strvcat(size_scnd{:}),'left');
+    classes = strvcat(w.class);
+    s = [cellstr([names sp size_M x size_N sp classes])]';
+    [sel,ok] = listdlg('ListString',s,...
+                       'Name','Variable selection',...
+                       'PromptString','Select variable', ...
+                       'SelectionMode','single');
+    if ok & ~isempty(sel),
+      w = {w.name};
+      i = find(v==h(2:end));
+      s = get(h(1),'String');
+      s{h(i+1)} = w{sel};
+      set(h(1),'String',s);
+      if nargout==1,
+        r = w{sel};
+      end
+    elseif nargout==1,
+      r = '';
+    end    
+  end
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_som_show_data.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,151 @@
+function [handles,msg,lattice,msize,dim,normalization,comps]=vis_som_show_data(p,f)
+
+% VIS_SOM_SHOW_DATA Checks and returns UserData and subplot handles stored by SOM_SHOW
+%
+% [handles,msg,lattice,msize,dim,normalization,comps] = vis_som_show_data(p, f)
+%
+%  Input and output arguments ([]'s are optional): 
+%   [p]           (vector) subplot numbers 
+%                 (string) 'all' to process all subplots, this is default
+%                          'comp' to process only subplots which have
+%                          component planes
+%   [f]           (double) figure handle, default is current figure
+%
+%   handles       (vector) handles of requested subplots
+%   msg           (string) error message or empty string (no error)
+%   lattice       (string) map lattice: 'hexa' or 'rect'
+%   msize         (vector) map grid size in figure
+%   dim           (scalar) map data dimension in figure
+%   normalization (struct) normalization struct used in the map in figure
+%   comps         (vector) the component indexes in figure
+%
+% This function gets the handles of component planes and u-matrices in
+% subplots p from figure f. SOM_SHOW writes the handles into the
+% UserData field of the figure where their order won't be mixed
+% up. This function reads the data according to the vector p. If the
+% figure has been manipulated (original planes are missing) the function
+% warns user or returns error string.
+% 
+% The main purpose for this is to be a subfuncion for SOM_SHOW_ADD,
+% SOM_SHOW_CLEAR and SOM_RECOLORBAR functions, but it may be used on
+% command line in the followong manner:
+%
+%  % plots text on the fifth plane
+%  axes(vis_som_show_data(5)); hold on; text(1,3,'I am here');
+%    
+% See also SOM_SHOW, SOM_SHOW_ADD.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 201099 juuso 160600
+
+%% Check input args %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+error(nargchk(0, 2, nargin))  % check no. of input args 
+
+%% Init %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handles=[];                                     % initialize output
+normalize=[];
+comps=[];
+dim=[];
+msize=[];
+lattice=[];
+msg=[];      
+
+cr=sprintf('\n');                               % carriage return            
+
+if nargin < 2 | isempty(f)
+  f=gcf;                                        % default figure
+end
+
+if nargin < 1 | isempty(p)                      % default p 
+  p= 'all';
+end
+
+% Find component planes and u-matrices from the figure and get the 
+% UserData field where the handles for the components are 
+% in the original order. 
+% If the fields are corrupted, return an error message.
+
+h_real = [findobj(f, 'Tag', 'Cplane'); ...
+    findobj(f, 'Tag', 'Uplane'); ...
+    findobj(f,'Tag','CplaneI'); ...
+    findobj(f,'Tag','UplaneI')];
+eval( 'h_stored=getfield(get(f,''UserData''),''subplotorder'');' , ...
+    'msg=[ msg cr '' Missing SOM_SHOW.subplotorder''];');  
+eval( 'normalization=getfield(get(f,''UserData''),''comp_norm'');' , ...
+    'msg=[msg cr '' Missing SOM_SHOW.comp_norm''];');
+eval( 'comps=getfield(get(f,''UserData''),''comps'');' , ...
+    'msg=[msg cr '' Missing SOM_SHOW.comps''];');    
+eval( 'msize=getfield(get(f,''UserData''),''msize'');' , ...
+    'msg=[msg cr '' Missing SOM_SHOW.msize''];');    
+eval( 'dim=getfield(get(f,''UserData''),''dim'');' , ...
+    'msg=[msg cr '' Missing SOM_SHOW.dim''];');    
+eval( 'lattice=getfield(get(f,''UserData''),''lattice'');' , ...
+    'msg=[msg cr '' Missing SOM_SHOW.lattice''];');    
+if ~isempty(msg), 
+  msg=['The figure does not contain SOM_SHOW visualization or is corrupted.'...
+	cr msg cr cr ...
+	'This command may be applied only to a SOM_SHOW visualization.']; 
+  return; 
+end
+
+%% Check arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+index=ismember(h_stored, h_real);  % the original order for plot axes 
+
+if ~prod(double(index))                    % missing planes?!
+                                           % double added by kr 1.10.02
+  l1= 'Some of the original planes seems to be missing.';
+  l2= 'Subplot numbers now refer to the existing ones.';
+  warning([l1 cr l2]);
+end
+
+if ~prod(double(ismember(h_real, h_stored))) % extra planes?! 
+                                             % double added by kr 5.9.02
+  warning('There seems to be new planes. Subplot numbers refer to the old ones.');
+end
+
+h_stored=h_stored(index);          % existing original plots in original order
+
+if ischar(p)                       % check if p is 'all'
+  switch(p)
+   case 'all'                                   
+    p=1:size(h_stored,1);          % all original subplots
+   case 'comp'
+    p=find(comps>0); 
+   otherwise
+    msg= 'String value for subplot number vector has to be ''all''!';
+    return;
+  end
+end
+
+if ~vis_valuetype(p,{ '1xn','nx1'}) % check the size
+  msg= 'Subplot numbers (argument p in help text) have to be in a vector!';
+  return
+end
+
+if min(p) < 1                      % check for invalid values
+  msg= 'Subplot numbers (argument p in help text) must be at least 1!';
+  return
+end
+
+%% p is too large
+
+if max(p) > size(h_stored,1)
+  l1= 'There are not so many existing subplots created by SOM_SHOW in the';
+  l2= 'figure as you are trying to refer with subplot numbers.';
+  l3= 'This is probably caused by having a too large subplot number.';
+  l4= 'However, the reason may be invalid manipulation of';
+  l5= 'this figure object or a program failure, too.';
+  msg=([l1 cr l2 cr l3 cr cr l4 cr l5]);
+  return;
+end
+
+%% Action and building output %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handles=h_stored(p);
+comps=comps(p);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_trajgui.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1647 @@
+function vis_trajgui(trajStruct,arg)
+
+% VIS_TRAJGUI subfuntion for SOM_TRAJECTORY
+%
+% This function is the actual GUI called by SOM_TRAJECTORY
+% function. 
+%
+% See also SOM_TRAJECTORY.
+
+% Contributed code to SOM Toolbox 2.0, February 11th, 2000 by Juha Parhankangas
+% Copyright (c) by Juha Parhankangas.
+% http://www.cis.hut.fi/projects/somtoolbox/        
+
+% Version 2.0beta juha 180699
+
+if nargin == 1
+
+  sM_h=trajStruct.figure;
+
+  if size(trajStruct.bmus,1) ~= 1 & size(trajStruct.bmus,2) ~= 1
+    fuzzy_traj(trajStruct,[]);
+    return;
+  end
+  
+  
+  if size(trajStruct.bmus,1) == 1 | size(trajStruct.bmus,2) == 1
+
+    udata.bmus = trajStruct.bmus;
+    udata.a_h=[findobj(get(sM_h,'Children'),'Tag','Uplane');...
+	       findobj(get(sM_h,'Children'),'Tag','Cplane')];
+    udata.sM_h=trajStruct.figure;
+    udata.traj=[];
+    data1 = trajStruct.primary_data;
+    if ~isempty(trajStruct.primary_names)
+      names=trajStruct.primary_names;
+    else
+      for i=1:size(data1,2)
+	names{i,1}=sprintf('Var%d',i);
+      end
+    end
+
+    udata.lattice=trajStruct.lattice;
+    form = 0.7*vis_patch(udata.lattice);
+    udata.msize = trajStruct.msize;
+
+
+    %%%%%%%%%%%%%%%%%%%%%%%%
+    %
+    % forming a patch object, which is placed above every component plane
+    %
+    
+    
+    l = size(form,1);
+    
+    nx = repmat(form(:,1),1,prod(udata.msize));
+    ny = repmat(form(:,2),1,prod(udata.msize));
+    
+    x=reshape(repmat(1:udata.msize(2),l*udata.msize(1),1),l,prod(udata.msize));
+    y=repmat(repmat(1:udata.msize(1),l,1),1,udata.msize(2));
+    
+    if strcmp(udata.lattice,'hexa')
+      t = find(~rem(y(1,:),2));
+      x(:,t)=x(:,t)+.5;
+    end
+    x=x+nx;
+    y=y+ny;
+    
+    colors=reshape(ones(prod(udata.msize),1)*[NaN NaN NaN],...
+		   [1 prod(udata.msize) 3]);
+    
+    set(0,'CurrentFigure',udata.sM_h);
+    
+    %%%%%%%%%%%%%%%%%%%%%%
+    %
+    % drawing patch
+    %
+    % caxis -commands keep the colormap of the original patch unchanged.
+    %
+    
+    for i=1:length(udata.a_h)
+      udata.real_patch(i)=get(udata.a_h(i),'Children');
+      set(udata.real_patch(i),'ButtonDownFcn',...
+			'vis_trajgui([],''click'')');
+      subplot(udata.a_h(i));
+      v=caxis;
+      udata.tmp_patch(i)=patch(x,y,colors,'EdgeColor','none',...
+			       'ButtonDownFcn',...
+			       'vis_trajgui([],''click'')',...
+			       'Tag','TmpPatch');
+      caxis(v);
+    end
+    
+    %%%%%%%%%%%%%%%%%%%%
+    
+    
+    
+    udata.length_of_traj=length(trajStruct.size);
+    udata.size=trajStruct.size;
+    udata.color=trajStruct.color;
+    udata.poly.x=[];
+    udata.poly.y=[];
+    udata.poly.h=[];
+    udata.new_marks=[];
+    udata.all_marks=[];
+    udata.d_mark2=[];
+    udata.fig1 = figure;
+    set(udata.fig1,'KeyPressFcn','vis_trajgui([],''key'')',...
+		   'Name','Primary Data');
+    
+    
+    %%%%%%%%%%%%%%%%%%%%
+    %
+    % making the 'Tools' -menu
+    %
+    
+    udata.m_i=uimenu(udata.fig1,'Label','Trajectoy T&ools');
+    udata.m_i(2)=uimenu(udata.m_i,'Label','&Remove Trajectory',...
+			'Callback',...
+			'vis_trajgui([],''remove_traj'')');
+    udata.m_i(3)=uimenu(udata.m_i(1),'Label','&Dye Nodes',...
+			'Callback',...
+			'vis_trajgui([],''dye_gui'')');
+    udata.m_i(4)=uimenu(udata.m_i(1),'Label','&Clear Markers',...
+			'Callback',...
+			'vis_trajgui([],''clear'')');
+    udata.m_i(5)=uimenu(udata.m_i(1),'Label','&Save',...
+			'Callback',...
+			'vis_trajgui([],''save'')');
+    udata.m_i(6)=uimenu(udata.m_i(1),'Label','&Load',...
+			'Callback',...
+			'vis_trajgui([],''load'')');
+
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+    %
+    % drawing data components to the figure ....
+    %
+    % 
+    
+    if nargin < 5 | isempty(comps) | (isstr(comps) & strcmp(comps,'all'))
+      comps = 1:size(data1,2);
+    end
+    
+    x=1:size(data1,1);
+    
+    for i=1:length(comps)
+      subplot(length(comps),1,i);
+      udata.h(i)=gca;
+      udata.d_mark(i).h=[];
+      
+      udata.d(i)=plot(x,data1(:,comps(i)),...
+		      'ButtonDownFcn',...
+		      'vis_trajgui([],''line_down'')');        
+      set(gca,'XLim',[1 size(data1,1)],...
+	      'XTick',[],...	      
+	      'ButtonDownFcn','vis_trajgui([],''line_down'')'); %,...
+	      %'YLim',[min(data1(:,comps(i))) max(data1(:,comps(i)))]);
+	      
+      ylabel(names{comps(i)});
+      hold on;
+      ymin=get(udata.h(i),'YLim');
+      pos=mean(get(udata.h(i),'XLim'));
+      udata.l(i) = line([pos pos],[ymin(1) ymin(2)],...
+			'Color','red',...
+			'ButtonDownFcn',...
+			'vis_trajgui([],''down'')');
+    end
+    udata.text1=[];
+    
+    udata.fig2=[];
+    udata.h2=[];
+    udata.l2=[];
+    udata.text2=[];
+    
+    %%%%%%%%%%%%%%%%%%%%%%%%%%%
+    %
+    % ... and to the figure 2.
+    %
+    
+    
+    if ~isempty(trajStruct.secondary_data)
+      data2=trajStruct.secondary_data;
+      if isempty(trajStruct.secondary_names)
+	for i=1:size(data1,2)
+	  names2{i,1}=sprintf('Var%d',i);
+	end
+      else
+	names2=trajStruct.secondary_names;
+      end
+      
+      udata.fig2 = figure;
+      set(udata.fig2,'Name','Secondary Data');
+      set(udata.fig2,'KeyPressFcn',...
+		     'vis_trajgui([],''key'')');
+      for i=1:size(data2,2)
+	subplot(size(data2,2),1,i);
+	udata.h2(i) = gca;
+	udata.d_mark2(i).h=[];
+	udata.d2(i) = plot(x,data2(:,i),...
+			   'ButtonDownFcn',...
+			   'vis_trajgui([],''line_down'')');
+	set(gca,'XLim',[1 size(data1,1)],'XTick',[],'ButtonDownFcn',...
+		'vis_trajgui([],[],[],[],[],[],''line_down'')');
+	ylabel(names2{i});
+	hold on;
+	ymin = get(udata.h2(i),'YLim');
+	pos = mean(get(udata.h2(i),'XLim'));
+	udata.l2(i) = line([pos pos],ymin,'Color','red',...
+			   'ButtonDownFcn','vis_trajgui([],''down'')');
+      end
+    end  
+    
+    %%%%%%%%%%%%%%%%%%%%%%%%%%
+    
+    set(udata.fig1,'UserData',udata);
+    if ~isempty(udata.fig2);
+      tmp.fig1=udata.fig1;
+      set(udata.fig2,'UserData',tmp);
+    end
+    tmp=get(udata.sM_h,'UserData');
+    tmp.fig1=udata.fig1;
+    set(udata.sM_h,'UserData',tmp);  
+    set_numbers(round(pos)); 
+    return;
+  end
+  
+end
+
+%%%%%%%%%%%%%%%%%
+%
+% if figures have been drawn, the only function calls that may exist
+% are the ones that change the state of the application.
+%
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+switch arg
+ case 'fuzzy'
+  fuzzy_traj(tS,[]);
+  return;
+ case 'move_fuzzy'
+  fuzzy_traj([],'move');
+  return;
+ case 'remove_traj'
+  remove_traj;
+  return;
+ case 'line_down'
+  line_bdf('down');
+  return;
+ case 'line_drag'
+  line_bdf('drag');
+  return;
+ case 'line_up'
+  line_bdf('up');
+  return;
+ case 'dye_gui';
+  color_gui(udata.fig1);
+  return;
+ case {'dye','cyan','magenta','yellow','red','green','blue','white','grey'}
+  dye_nodes(arg);
+  return;
+ case 'clear'
+  clear_markers;
+  return;
+ case 'key'
+  key_bdf;
+  return;   
+ case 'click'
+  click;
+  return;
+ case 'save'
+  save_data;
+  return;
+ case 'load'
+  load_data;
+  return;
+end
+
+
+%%%%%%%%%%
+%
+% lines in the data figure(s) are dragged ...
+%
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+
+lims=get(gca,'XLim');
+x = getfield(get(gca,'CurrentPoint'),{1});  % the location of the line
+
+if x < lims(1)
+  x=lims(1);
+elseif x > lims(2)
+  x=lims(2);
+end
+
+old = gcf;
+
+switch arg
+ case 'down',...
+      
+  % mouse button is pressed down above the line
+  
+  set(gcf,'WindowButtonMotionFcn','vis_trajgui([],''drag'')');
+  set(gcf,'WindowButtonUpFcn','vis_trajgui([],''up'')');
+  set(udata.l,'EraseMode','xor');
+  delete(udata.text1);
+  if ~isempty(udata.l2);
+    set(udata.l2,'EraseMode','xor');
+    delete(udata.text2);
+  end
+  set(gcf,'Pointer','crosshair');
+  
+ case 'drag'
+  % change the location of the lines
+  
+  set(0,'CurrentFigure',udata.fig1);
+  set(udata.l,'XData',[x x]);
+  if ~isempty(udata.fig2)
+    set(0,'CurrentFigure',udata.fig2);
+    set(udata.l2,'XData',[x x]);
+  end
+  draw_traj(round(x));
+  set(0,'CurrentFigure',old);
+ case 'up'
+  
+  % draw trajectory and set figure to the normal state.
+  
+  set(udata.l,'EraseMode','normal');
+  set(gcf,'Pointer','arrow','WindowButtonMotionFcn','',...
+	  'WindowButtonUpFcn','');
+  draw_traj(round(x));
+  set_numbers(round(x));
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function draw_traj(point)
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+color=udata.color;
+eMode='normal';
+if isstr(udata.color) & strcmp(udata.color,'xor')
+  eMode='xor';
+  color='black';
+end
+ind=udata.bmus(point);
+[i j] = ind2sub(udata.msize,ind);
+if ~mod(i,2)
+  j=j+0.5;
+end
+old = gcf;
+set(0,'CurrentFigure',udata.sM_h);
+hold on;
+if isempty(udata.traj) | length(udata.traj.h) ~= length(udata.a_h)
+  
+  % trajectory does not exist
+  
+  for i=1:length(udata.a_h)
+    subplot(udata.a_h(i));
+    hold on;
+    new.h = plot(j,i,'Color',color,'EraseMode',eMode,'LineStyle','none');
+    udata.traj.h(i)=new;
+    udata.traj.j=j;
+    udata.traj.i=i;
+  end
+else
+  if length(udata.traj.j) == udata.length_of_traj
+    % if the length of trajectory == ..., 
+    udata.traj.j(1) = [];         % the first (the oldest) coordinate pair
+    udata.traj.i(1) = [];         % is removed.
+  end
+  udata.traj.j=[udata.traj.j;j]; % the new point is added to the
+  udata.traj.i=[udata.traj.i;i]; % end of coordinate vectors (i and j)
+  for i=1:length(udata.a_h)
+    subplot(udata.a_h(i));            % remove the existing trajectory
+    delete(udata.traj.h(i).h);          % and plot the new one.
+    for j=1:length(udata.traj.j)
+      udata.traj.h(i).h(j)=plot(udata.traj.j(j),udata.traj.i(j),...
+				'Color',color,...
+				'EraseMode',eMode,'Marker','o','LineWidth',2,...
+				'MarkerSize',udata.size(udata.length_of_traj-j+1),...
+				'LineStyle','none');
+    end
+  end
+end 
+set(0,'CurrentFigure',udata.fig1);
+set(udata.fig1,'UserData',udata);
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function set_numbers(x);
+
+% This function writes the numbers beside of the pointer lines
+
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+xlim = get(gca,'XLim');
+ylim = get(gca,'YLim');
+p = ylim(1) + 0.9*(ylim(2)-ylim(1));
+
+old = gcf;
+set(0,'CurrentFigure',udata.fig1);
+
+
+for i=1:length(udata.h)
+  subplot(udata.h(i));
+  
+  % check if the text is placed to the left side of the line...
+  
+  if abs(x-xlim(1)) > (abs(x-xlim(2)))
+    udata.text1(i)=text(x-1,p,sprintf('%d ->',x),...
+                        'VerticalAlignment','top',...
+                        'HorizontalAlignment','right',...
+                        'FontWeight','demi');
+  else
+    
+    %  or to the right side.
+    
+    udata.text1(i)=text(x+1,p,sprintf('<- %d',x),...
+			'VerticalAlignment','top',...
+			'FontWeight','demi');
+  end
+end
+
+if ~isempty(udata.fig2)
+  set(0,'CurrentFigure',udata.fig2);
+  
+  for i=1:length(udata.h2)
+    subplot(udata.h2(i));
+    
+    if abs(x-xlim(1)) > (abs(x-xlim(2)))
+      udata.text2(i)=text(x-1,p,sprintf('%d ->',x),...
+			  'VerticalAlignment','top',...
+			  'HorizontalAlignment','right',...
+			  'FontWeight','demi');
+    else
+      udata.text2(i)=text(x+1,p,sprintf('<- %d',x),...
+			  'VerticalAlignment','top',...
+			  'FontWeight','demi');
+    end
+  end
+end
+
+set(0,'CurrentFigure',old);
+set(udata.fig1,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function remove_traj()
+
+% delete trajectory -object from every component plane.
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+if isempty(udata.traj)
+  return;
+end
+
+
+for i=1:length(udata.traj.h)
+  delete(udata.traj.h(i).h);
+end
+
+udata.traj=[];
+set(udata.fig1,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function line_bdf(arg)
+
+% this function takes care of action when region is selected in the
+% data figure.
+
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+xlim=get(gca,'XLim');
+
+if ~(any(strcmp('THIS',fieldnames(udata))))
+  p = getfield(get(gca,'CurrentPoint'),{1});
+else
+  p = getfield(get(udata.THIS,'CurrentPoint'),{1});
+end
+
+if p < xlim(1)
+  p = xlim(1);
+elseif p > xlim(2)
+  p = xlim(2);
+end
+
+
+
+switch arg
+ case 'down'
+  
+  % the mouse button is pressed down, the pointer lines are drawn.
+  % and the state of the figure is changed.
+  
+  udata.THIS=gca;
+  set(gcf,'WindowButtonMotionFcn',...
+	  'vis_trajgui([],''line_drag'')',...
+	  'WindowButtonUpFcn','vis_trajgui([],''line_up'')');
+  udata.start_p=p;
+  
+  old = gcf;
+  set(0,'CurrentFigure',udata.fig1);
+  
+  for i=1:length(udata.h)
+    subplot(udata.h(i));
+    udata.t_line.h(i)=line([p p],get(gca,'YLim'),'Color','red');
+    udata.t_line.h2(i)=line([p p],get(gca,'YLim'),'Color','red',...
+			    'EraseMode','xor');
+  end
+  if ~isempty(udata.h2)
+    set(0,'CurrentFigure',udata.fig2);
+    for i=1:length(udata.h2)
+      subplot(udata.h2(i));
+      udata.t_line2.h(i)=line([p p],get(gca,'YLim'),'Color','red');
+      udata.t_line2.h2(i)=line([p p],get(gca,'YLim'),'Color','red',...
+			       'EraseMode','xor');
+    end
+  end
+  
+ case 'drag'
+  
+  % change the position of the pointer lines
+  
+  old = gcf;
+  set(0,'CurrentFigure',udata.fig1);
+  set(udata.t_line.h2,'XData',[p p]);
+  if ~isempty(udata.fig2)
+    set(0,'CurrentFigure',udata.fig2);
+    set(udata.t_line2.h2,'XData',[p p]);
+  end
+  set(0,'CurrentFigure',old);
+ case 'up'
+  
+  
+  % sort the 'points' -vector and draw the markers to the data and nodes
+  
+  points=sort([round(udata.start_p) round(p)]);
+  draw_markers(points(1):points(2));
+  udata=get(udata.fig1,'UserData');
+  udata.new_marks=unique([udata.new_marks ;(points(1):points(2))']);
+  delete([udata.t_line.h2 udata.t_line.h]);
+  if ~isempty(udata.fig2)
+    delete([udata.t_line2.h2 udata.t_line2.h]);
+  end
+  set(get(udata.THIS,'Parent'),'WindowButtonMotionFcn','',...
+		    'WindowButtonUpFcn','');
+  udata=rmfield(udata,'THIS');
+end
+
+set(udata.fig1,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function draw_markers(x);
+
+plot2data(x);
+plot2plane(x);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function plot2data(x);
+
+% plot black markers to the data figure(s)
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+old = gcf;
+
+set(0,'CurrentFigure',udata.fig1);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% if there already exist points in the positions that are members
+% of the set x, then the old points are removed from data figures...
+
+for i=1:length(udata.d_mark(1).h)
+  tmp1 = get(udata.d_mark(1).h(i),'XData');
+  tmp2 = setdiff(tmp1,x);
+  if length(tmp1) ~= length(tmp2)
+    inds=[];
+    for j=1:length(tmp2);
+      inds=[inds find(tmp2(j)==tmp1)];
+    end
+    for j=1:length(udata.d_mark)
+      ydata=getfield(get(udata.d_mark(j).h(i),'YData'),{inds});
+      set(udata.d_mark(j).h(i),'XData',tmp2,'YData',ydata);
+    end
+    if ~isempty(udata.fig2)
+      for j=1:length(udata.d_mark2)
+        ydata=getfield(get(udata.d_mark2(j).h(i),'YData'),{inds});
+        set(udata.d_mark2(j).h(i),'XData',tmp2,'YData',ydata);
+      end
+    end
+  end
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% ... and the new ones are plotted.
+
+for i=1:length(udata.h)
+  subplot(udata.h(i));
+  h=plot(x,getfield(get(udata.d(i),'YData'),{x}),'oblack',...
+	 'ButtonDownFcn',...
+	 'vis_trajgui([],''line_down'')');
+  udata.d_mark(i).h=[udata.d_mark(i).h;h];
+end
+
+if ~isempty(udata.h2)
+  set(0,'CurrentFigure',udata.fig2);
+  
+  for i=1:length(udata.h2)
+    subplot(udata.h2(i));
+    h=plot(x,getfield(get(udata.d2(i),'YData'),{x}),'oblack',...
+	   'ButtonDownFcn',...
+	   'vis_trajgui([],''line_down'')');
+    udata.d_mark2(i).h=[udata.d_mark2(i).h;h];
+  end
+end
+
+set(0,'CurrentFigure',old);
+set(udata.fig1,'UserData',udata);
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function plot2plane(x);
+
+% sets markers to the component planes.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% actually new markers are never plotted, but the color of the patch
+% lying above the original component plane patch is changed black in
+% the right positions.
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+udata.new_marks=unique([udata.new_marks ;x']);
+
+for i=1:length(udata.a_h)
+  col=get(udata.tmp_patch(i),'FaceVertexCData');
+  if length(size(col)) == 3
+    col = reshape(col,[size(col,1) 3]);
+  end
+  for j=1:length(udata.new_marks)
+    col(udata.bmus(udata.new_marks(j)),:)=[0 0 0];
+  end
+  set(udata.tmp_patch(i),'FaceVertexCData',col);
+end
+
+set(udata.fig1,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function color_gui(fig1)
+
+% construct the graphical user interface for changing the color of the
+% black (marked) nodes.
+
+
+udata=get(fig1,'UserData');
+
+a = figure('Color',[0.8 0.8 0.8], ...
+	   'Name','Colors', ...
+	   'PaperType','a4letter', ...
+	   'Position',[518 456 120 311], ...
+	   'Tag','Fig1');
+
+udata.c_struct.fig=a;
+
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.701961 0.701961 0.701961], ...
+	      'Position',[0.0700415 0.28956 0.830492 0.594566], ...
+	      'Style','frame', ...
+	      'Tag','Frame1');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.8 0.8 0.8], ...
+	      'Position',[0.100059 0.301143 0.770456 0.571399], ...
+	      'Style','frame', ...
+	      'Tag','Frame2');
+
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'Callback','vis_trajgui([],''cyan'')', ...
+	      'Position',[0.130077 0.795326 0.170101 0.0617729], ...
+	      'Style','radiobutton', ...
+	      'Tag','cyan', ...
+	      'Value',1);
+
+
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'Callback','vis_trajgui([],''magenta'')', ...
+	      'Position',[0.130077 0.733553 0.170101 0.057912], ...
+	      'Style','radiobutton', ...
+	      'Tag','magenta');
+
+
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'Callback','vis_trajgui([],''yellow'')', ...
+	      'Position',[0.130077 0.664059 0.170101 0.0617729], ...
+	      'Style','radiobutton', ...
+	      'Tag','yellow');
+
+
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'Callback','vis_trajgui([],''red'')', ...
+	      'Position',[0.130077 0.590703 0.170101 0.0617729], ...
+	      'Style','radiobutton', ...
+	      'Tag','red');
+
+
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'Callback','vis_trajgui([],''green'')', ...
+	      'Position',[0.130077 0.525068 0.170101 0.057912], ...
+	      'Style','radiobutton', ...
+	      'Tag','green');
+
+
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'Callback','vis_trajgui([],''blue'')', ...
+	      'Position',[0.130077 0.455575 0.170101 0.0617729], ...
+	      'Style','radiobutton', ...
+	      'Tag','blue');
+
+
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'Callback','vis_trajgui([],''white'')', ...
+	      'Position',[0.130077 0.38608 0.170101 0.0617729], ...
+	      'Style','radiobutton', ...
+	      'Tag','white');
+
+
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'Callback','vis_trajgui([],''grey'')', ...
+	      'Position',[0.130077 0.320447 0.170101 0.057912], ...
+	      'Style','radiobutton', ...
+	      'Tag','grey');
+
+
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.8 0.8 0.8], ...
+	      'FontWeight','demi', ...
+	      'HorizontalAlignment','left', ...
+	      'Position',[0.32019 0.795326 0.470278 0.0501905], ...
+	      'String','Cyan', ...
+	      'Style','text', ...
+	      'Tag','StaticText1');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.8 0.8 0.8], ...
+	      'FontWeight','demi', ...
+	      'HorizontalAlignment','left', ...
+	      'Position',[0.32019 0.733553 0.520308 0.0463296], ...
+	      'String','Magenta', ...
+	      'Style','text', ...
+	      'Tag','StaticText2');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.8 0.8 0.8], ...
+	      'FontWeight','demi', ...
+	      'HorizontalAlignment','left', ...
+	      'Position',[0.32019 0.664059 0.470278 0.0501905], ...
+	      'String','Yellow', ...
+	      'Style','text', ...
+	      'Tag','StaticText3');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.8 0.8 0.8], ...
+	      'FontWeight','demi', ...
+	      'HorizontalAlignment','left', ...
+	      'Position',[0.32019 0.590703 0.470278 0.0501905], ...
+	      'String','Red', ...
+	      'Style','text', ...
+	      'Tag','StaticText4');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.8 0.8 0.8], ...
+	      'FontWeight','demi', ...
+	      'HorizontalAlignment','left', ...
+	      'Position',[0.32019 0.525068 0.470278 0.0463296], ...
+	      'String','Green', ...
+	      'Style','text', ...
+	      'Tag','StaticText5');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.8 0.8 0.8], ...
+	      'FontWeight','demi', ...
+	      'HorizontalAlignment','left', ...
+	      'Position',[0.32019 0.455575 0.470278 0.0463296], ...
+	      'String','Blue', ...
+	      'Style','text', ...
+	      'Tag','StaticText6');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.8 0.8 0.8], ...
+	      'FontWeight','demi', ...
+	      'HorizontalAlignment','left', ...
+	      'Position',[0.32019 0.38608 0.470278 0.0501905], ...
+	      'String','White', ...
+	      'Style','text', ...
+	      'Tag','StaticText7');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.8 0.8 0.8], ...
+	      'FontWeight','demi', ...
+	      'HorizontalAlignment','left', ...
+	      'Position',[0.32019 0.320447 0.470278 0.0463296], ...
+	      'String','Grey', ...
+	      'Style','text', ...
+	      'Tag','StaticText8');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'Position',[0.0700415 0.146711 0.830492 0.135128], ...
+	      'Style','frame', ...
+	      'Tag','Frame3');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.8 0.8 0.8], ...
+	      'Position',[0.100059 0.158293 0.770456 0.111963], ...
+	      'Style','frame', ...
+	      'Tag','Frame4');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[0.8 0.8 0.8], ...
+	      'FontWeight','demi', ...
+	      'HorizontalAlignment','left', ...
+	      'Position',[0.130077 0.177597 0.270833 0.0617729], ...
+	      'String','RGB', ...
+	      'Style','text', ...
+	      'Tag','StaticText9');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'BackgroundColor',[1 1 1], ...
+	      'Position',[0.410243 0.173736 0.420249 0.0810768], ...
+	      'Style','edit', ...
+	      'Tag','EditText1');
+
+udata.c_struct.RGB=b;
+
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'Callback','vis_trajgui([],''dye'')', ...
+	      'FontWeight','demi', ...
+	      'Position',[0.0700415 0.0270256 0.360214 0.0772162], ...
+	      'String','OK', ...
+	      'Tag','Pushbutton1');
+b = uicontrol('Parent',a, ...
+	      'Units','normalized', ...
+	      'Callback','close gcf', ...
+	      'FontWeight','demi', ...
+	      'Position',[0.54032 0.0270256 0.360214 0.0772162], ...
+	      'String','Close', ...
+	      'Tag','Pushbutton2');
+
+udata.c_struct.color=[0 1 1];
+
+tmp.fig1=fig1;
+set(a,'UserData',tmp);
+set(udata.fig1,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function dye_nodes(arg)
+
+% takes care of the action, when radiobuttons are pressed 
+% (or the RGB value is set) in the color_gui -figure.
+% It also handles the starting of dying nodes and plots.
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+
+switch arg
+ case {'cyan','magenta','yellow','red','green','blue','white','grey'}
+  h=findobj(get(gcf,'Children'),'Style','radiobutton');
+  set(h,'Value',0);
+  set(gcbo,'Value',1);
+end
+
+
+switch arg
+ case 'cyan'
+  RGB = [0 1 1];
+ case 'magenta'
+  RGB = [1 0 1];
+ case 'yellow'
+  RGB = [1 1 0];
+ case 'red'
+  RGB = [1 0 0];
+ case 'green'
+  RGB = [0 1 0];
+ case 'blue'
+  RGB = [0 0 1];
+ case 'white'
+  RGB = [1 1 1];
+ case 'grey'
+  RGB = [0.4 0.4 0.4];
+ case 'dye'
+  
+  RGB = get(udata.c_struct.RGB,'String');
+  if isempty(RGB)
+    dye;
+    return;
+  else
+    str1='The value of RGB must be vector containing three scalars';
+    str2='between 0 and 1.';
+    color = str2num(RGB);
+    set(udata.c_struct.RGB,'String','');
+    if isempty(color)
+      close gcf;
+      udata=rmfield(udata,'c_struct');
+      set(udata.fig1,'UserData',udata);
+      errordlg([{str1};{str2}]);
+      return;
+    end
+    if ~all([1 3] == size(color)) & ~all([3 1] == size(color))
+      close gcf;
+      errordlg([{str1};{str2}]);
+      udata=rmfield(udata,'c_struct',udata);
+      set(udata.fig1,'UserData',udata);
+      return;
+    end
+    if ~isempty(cat(2,find(color>1),find(color<0)))
+      close gcf
+      errordlg([{str1};{str2}]);
+      udata=rmfield(udata,'c_struct',udata);
+      set(udata.fig1,'UserData',udata);
+      return;
+    end
+    udata.c_struct.color=color;
+    set(udata.fig1,'UserData',udata);
+    dye;
+    return;
+  end
+end
+
+udata.c_struct.color=RGB;
+set(udata.fig1,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function dye()
+
+% dyes black markers in the component planes and in the data figures
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+inds=unique([udata.all_marks ; udata.new_marks]);
+
+
+for i=1:length(udata.d_mark);
+  for j=1:length(udata.d_mark(i).h)
+    if all(get(udata.d_mark(i).h(j),'Color') == [0 0 0])
+      set(udata.d_mark(i).h(j),'Color',udata.c_struct.color);
+    end
+  end
+end
+
+if ~isempty(udata.fig2);
+  for i=1:length(udata.d_mark2)
+    for j=1:length(udata.d_mark2(i).h)
+      if all(get(udata.d_mark2(i).h(j),'Color') == [0 0 0])
+        set(udata.d_mark2(i).h(j),'Color',udata.c_struct.color);
+      end
+    end
+  end
+end
+
+
+for i=1:length(udata.a_h)
+  col=get(udata.tmp_patch(i),'FaceVertexCData');
+  for j=1:length(udata.new_marks)
+    col(udata.bmus(udata.new_marks(j)),:)=udata.c_struct.color;
+  end
+  set(udata.tmp_patch(i),'FaceVertexCData',col);
+end
+
+
+udata.all_marks=unique([udata.all_marks;udata.new_marks]);
+udata.new_marks=[];
+close gcf;
+udata=rmfield(udata,'c_struct');
+set(udata.fig1,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function clear_markers()
+
+% removes markers from the componentplanes and the data figure(s).
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+for i=1:length(udata.d_mark)
+  delete(udata.d_mark(i).h);
+  udata.d_mark(i).h=[];
+end
+
+for i=1:length(udata.d_mark2)
+  delete(udata.d_mark2(i).h);
+  udata.d_mark2(i).h=[];
+end
+
+col=NaN*get(udata.tmp_patch(1),'FaceVertexCData');
+col=reshape(col,[size(col,1) 3]);
+
+for i=1:length(udata.tmp_patch)
+  set(udata.tmp_patch(i),'FaceVertexCData',col);
+end
+
+udata.new_marks=[];
+udata.all_marks=[];
+
+
+if any(strcmp('c_struct',fieldnames(udata)))
+  udata=rmfield(udata,'c_struct');
+end
+
+set(udata.fig1,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function key_bdf
+
+% moves trajectory and pointer lines, when either of 
+% the keys '>' or '<' is pressed.
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+key=get(gcbo,'CurrentCharacter');
+
+% The easiest way to get a new coordinates is to get them from the texts...
+% The texts are either '<- x' or 'x ->' 
+
+x=get(udata.text1(1),'String');
+x=str2num(x(4:length(x)));
+
+if isempty(x)
+  x=get(udata.text1(1),'String');
+  x=str2num(x(1:length(x)-3));
+end
+
+switch(key)
+ case '<'
+  if x ~= 1
+    x= x-1;
+  end
+ case '>'
+  if x ~= getfield(get(get(udata.text1(1),'Parent'),'XLim'),{2}) 
+    x = x+1;
+  end
+ otherwise
+  return;
+end
+
+set(udata.l,'XData',[x x]);
+if ~isempty(udata.fig2)
+  set(udata.l2,'XData',[x x]);
+end
+
+delete(udata.text1);
+delete(udata.text2);
+
+set_numbers(x);
+draw_traj(x);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function click()
+
+
+switch get(gcf,'SelectionType')
+ case 'open'
+  return;
+ case {'normal','alt'}
+  draw_poly;
+ case 'extend'
+  click_node;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function click_node()
+
+% takes care of the action, when the middle mouse button is
+% pressed (mouse pointer is above some component plane).
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+new_marks=[];
+
+old=gcf;
+
+NEW=0;
+AGAIN = 0;
+
+
+coords=get(gca,'CurrentPoint');
+row=round(coords(1,2));
+
+if strcmp(udata.lattice,'hexa') & ~mod(row,2)
+  col = round(coords(1,1) - 0.5);
+else
+  col = round(coords(1,1));
+end
+
+ind = sub2ind(udata.msize,row,col);
+new_marks=find(udata.bmus==ind);
+
+if strcmp(get(gcbo,'Tag'),'TmpPatch');
+  
+  % if the callback is made via temporary patch object, node is marked
+  % (node is black) => the mark is to be removed 
+  
+  node_color = getfield(get(gcbo,'FaceVertexCData'),{ind,[1:3]});
+  AGAIN = 1;
+end
+
+
+
+for i=1:length(udata.tmp_patch)
+  color = get(udata.tmp_patch(i),'FaceVertexCData');
+  if length(size(color)) ~= 2
+    color = reshape(color,[size(color,1) 3]);
+  end
+  if all(isnan(color(ind,:)))
+    NEW=1;
+    color(ind,:)=[0 0 0];
+  else
+    color(ind,:)=[NaN NaN NaN];
+  end
+  set(udata.tmp_patch(i),'FaceVertexCData',color);
+end
+
+set(0,'CurrentFigure',udata.fig1);
+
+for j=1:length(udata.h)
+  subplot(udata.h(j));
+  if NEW
+    y=getfield(get(udata.d(j),'YData'),{new_marks});
+    udata.d_mark(j).h=[udata.d_mark(j).h;plot(new_marks,y,'Color',[0 0 0],...
+                                              'LineStyle','none',...
+                                              'Marker','o')];
+  end
+end
+
+
+if ~isempty(udata.fig2)
+  set(0,'CurrentFigure',udata.fig2);
+  for j=1:length(udata.h2);
+    subplot(udata.h2(j));
+    if NEW
+      y=getfield(get(udata.d2(j),'YData'),{new_marks});
+      udata.d_mark2(j).h=[udata.d_mark2(j).h;plot(new_marks,y,...
+						  'LineStyle','none',...
+						  'Color','black',...
+						  'Marker','o')];
+    end
+  end
+end
+
+if NEW
+  udata.new_marks=[udata.new_marks; new_marks];
+end
+
+if AGAIN
+  
+  % find marks from the data that map to the clicked node. if the color
+  % of the mark(s) is the same as the node's color, remove mark(s), else
+  % let mark be unchanged.
+  
+  for i=1:length(udata.d_mark(1).h)
+    if all(node_color==get(udata.d_mark(1).h(i),'Color'))
+      tmp1 = get(udata.d_mark(1).h(i),'XData');
+      tmp2 = setdiff(tmp1,new_marks);
+      if length(tmp1) ~= length(tmp2)
+        inds=[];
+        for j=1:length(tmp2);
+          inds=[inds find(tmp2(j)==tmp1)];
+        end
+        for j=1:length(udata.d_mark)
+          ydata=getfield(get(udata.d_mark(j).h(i),'YData'),{inds});
+          set(udata.d_mark(j).h(i),'XData',tmp2,'YData',ydata);
+        end
+        if ~isempty(udata.fig2)
+          for j=1:length(udata.d_mark2)
+            ydata=getfield(get(udata.d_mark2(j).h(i),'YData'),{inds});
+            set(udata.d_mark2(j).h(i),'XData',tmp2,'YData',ydata);
+          end
+        end
+      end  
+    end
+  end
+  udata.new_marks=setdiff(udata.new_marks, new_marks);
+  udata.all_marks=setdiff(udata.all_marks,new_marks);
+end
+
+set(udata.fig1,'UserData',udata);
+set(0,'CurrentFigure',old);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function draw_poly()
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+if isempty(udata.poly.x)
+  if strcmp(get(gcf,'SelectionType'),'alt')
+    return;
+  end
+  udata.poly.THIS = gca;
+end
+
+% 'THIS' indicates what was the axes where the polygon was meant to
+% drawn. It is not possible to add points, that lie in another axes, to the
+% polygon.
+
+
+if gca ~= udata.poly.THIS
+  return;
+end
+
+coords(1,1) = getfield(get(gca,'CurrentPoint'),{3});
+coords(1,2) = getfield(get(gca,'CurrentPoint'),{1});
+
+udata.poly.x=cat(1,udata.poly.x,coords(2));
+udata.poly.y=cat(1,udata.poly.y,coords(1));
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% remove old 'polygon' from axis
+
+delete(udata.poly.h);
+
+
+switch get(gcf,'SelectionType')
+ case 'normal'
+  
+  % add point to the 'polygon' and draw it
+  
+  for i=1:length(udata.a_h)
+    subplot(udata.a_h(i));
+    hold on;
+    udata.poly.h(i) = plot(udata.poly.x,udata.poly.y,'black',...
+			   'EraseMode','xor',...
+			   'ButtonDownFcn',...
+			   'vis_trajgui([],''click'')',...
+			   'LineWidth',2);
+  end
+ case 'alt'
+  
+  % The polygon is ready.
+  
+  
+  udata.poly.x=cat(1,udata.poly.x,udata.poly.x(1));
+  udata.poly.y=cat(1,udata.poly.y,udata.poly.y(1));
+  
+  for i=1:length(udata.a_h)
+    subplot(udata.a_h(i));
+    udata.poly.h(i) = plot(udata.poly.x,udata.poly.y,'black',...
+			   'EraseMode','xor',...
+			   'ButtonDownFcn',...
+			   'vis_trajgui([],''click'')',...
+			   'LineWidth',2);
+  end
+  
+  tmp=sort(repmat((1:udata.msize(1))',udata.msize(2),1));
+  tmp(:,2)=repmat((1:udata.msize(2))',udata.msize(1),1);
+  tmp2=tmp;
+  if strcmp(udata.lattice,'hexa');
+    t=find(~rem(tmp(:,1),2));
+    tmp(t,2)=tmp(t,2)+0.5;
+  end
+  
+  
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  % find the nodes that lie inside polygon and change coordinates to
+  % linear indices.
+  
+  in = find(inpolygon(tmp(:,2),tmp(:,1),udata.poly.x,udata.poly.y));
+  in = sub2ind(udata.msize,tmp2(in,1),tmp2(in,2));
+  
+  colors=get(udata.tmp_patch(1),'FaceVertexCData');
+  colors=reshape(colors,[size(colors,1) 3]);
+  tmp=ones(length(in),1);
+  
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
+  % set the color of the nodes just selected, black.
+  
+  colors(in,:)=tmp*[0 0 0];
+  set(udata.tmp_patch,'FaceVertexCData',colors);
+  
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  % find the points mapping to the nodes from data 
+  
+  inds = [];
+  for i=1:length(in)
+    inds=[inds;find(in(i) == udata.bmus)];
+  end
+  
+  %%%%%%%%%%%%%%%%%%%  
+  % plot marks to data
+  
+  set(udata.fig1,'UserData',udata);
+  plot2data(inds);
+  udata=get(udata.fig1,'UserData');
+  udata.new_marks=union(udata.new_marks,inds);
+  delete(udata.poly.h);
+  udata.poly.h=[];
+  udata.poly.x=[];
+  udata.poly.y=[];
+  udata.poly.THIS=[];
+end
+
+set(udata.fig1,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function save_data()
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+data.points=[];
+data.nodes=[];
+k=1;
+
+for i=1:length(udata.d_mark(1).h)
+  data.points(i).inds=get(udata.d_mark(1).h(i),'XData');
+  data.points(i).color=get(udata.d_mark(1).h(i),'Color');
+end
+
+color=get(udata.tmp_patch(1),'FaceVertexCData');
+color=reshape(color,[size(color,1) 3]);
+
+for i=1:size(color,1)
+  if all(~isnan(color(i,:)))
+    tmp.ind=i;
+    tmp.color=color(i,:);
+    data.nodes(k)=tmp;
+    k=k+1;
+  end
+end
+
+answer=inputdlg('Enter the name of the output variable:','',1);
+
+if isempty(answer) | isempty(answer{1})
+  msgbox('Output is not set to workspace.');
+  return;
+else
+  assignin('base',answer{1},data);
+  disp(sprintf('Struct is set to the workspace as ''%s''.',answer{1}));
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function load_data()
+
+answer = inputdlg('Enter the name of the struct to be loaded:','',1);
+
+if isempty(answer) | isempty(answer{1})
+  msgbox('Data is not loaded.');
+  return;
+end
+
+data=evalin('base',answer{1});
+
+if ~isstruct(data)  
+  errordlg('Input variable must be a struct.');
+  return;
+end
+
+tmp1 = fieldnames(data);
+tmp2 = {'nodes','points'};
+
+for i=1:length(tmp1)
+  for j=1:length(tmp2);
+    if ~any(strcmp(tmp2{j},tmp1))
+      errordlg('Wrong type of struct.');
+      return;
+    end
+  end
+end
+
+if ~isempty(data.points)
+  tmp1=fieldnames(data.points(1));
+end
+if ~isempty(data.nodes)
+  tmp2=fieldnames(data.nodes(1));
+end
+
+for i=1:length(tmp1)
+  if ~any(strcmp(tmp1{i},{'inds','color'}))
+    errordlg('Wrong type of struct.');
+    return;
+  end
+end
+
+for i=1:length(tmp2)
+  if ~any(strcmp(tmp2{i},{'ind','color'}))
+    errordlg('Wrong type of struct.');
+    return;
+  end
+end
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+clear_markers;
+remove_traj;
+
+old = gcf;
+
+for i=1:length(data.points)
+  for j=1:length(udata.h);
+    set(0,'CurrentFigure',udata.fig1);
+    subplot(udata.h(j));
+    ydata=getfield(get(udata.d(j),'YData'),{data.points(i).inds});
+    udata.d_mark(j).h=[udata.d_mark(j).h;...
+                       plot(data.points(i).inds,ydata,...
+			    'Color',data.points(i).color,...
+			    'LineStyle','none',...
+			    'Marker','o',...
+			    'ButtonDownFcn',...
+			    'vis_trajgui([],''line_down'')')];  
+    if all(data.points(i).color == [0 0 0])
+      udata.new_marks=unique([udata.new_marks; (data.points(i).inds)']);
+    else
+      udata.all_marks=unique([udata.all_marks; (data.points(i).inds)']);
+    end
+  end
+  if ~isempty(udata.fig2)
+    set(0,'CurrentFigure',udata.fig2);
+    for j=1:length(udata.h2)
+      subplot(udata.h2(j));
+      ydata=getfield(get(udata.d2(j),'YData'),{data.points(i).inds});
+      udata.d_mark2(j).h=[udata.d_mark2(j).h;...
+                          plot(data.points(i).inds,ydata,...
+			       'Color',data.points(i).color,...
+			       'LineStyle','none',...
+			       'Marker','o',...
+			       'ButtonDownFcn',...
+			       'vis_trajgui([],''line_down'')')];
+    end
+  end
+end     
+
+
+set(0,'CurrentFigure',udata.sM_h);
+color=get(udata.tmp_patch(1),'FaceVertexCData');
+color=reshape(color,[size(color,1) 3]);
+for i=1:length(data.nodes)
+  color(data.nodes(i).ind,:)=data.nodes(i).color;
+end
+for i=1:length(udata.tmp_patch);
+  set(udata.tmp_patch(i),'FaceVertexCData',color);
+end
+
+set(0,'CurrentFigure',old);
+set(udata.fig1,'UserData',udata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function fuzzy_traj(trajStruct,arg); 
+%function fuzzy_traj(sM_h,sM,sD,interval,arg)
+
+
+if isempty(arg)
+  
+  if strcmp(trajStruct.lattice,'hexa')
+    udata.lattice='hexa';
+    udata.form=vis_patch('hexa');
+  else
+    data.lattice='rect';
+    udata.form=vis_patch('rect');
+  end
+  
+  % interval=[1 size(trajStruct.primary_data,1)];
+  
+  l=size(udata.form,1);
+  dim = size(trajStruct.primary_data,2);
+  udata.a_h=[findobj(get(trajStruct.figure,'Children'),'Tag','Uplane');...
+             findobj(get(trajStruct.figure,'Children'),'Tag','Cplane')];
+  
+  udata.sM_h=trajStruct.figure;
+  udata.msize=trajStruct.msize;
+  
+  %%%%%%%%%%%%%%%
+  %
+  % constructing patch that is drawn above every plane in map
+  %
+  
+  nx = repmat(udata.form(:,1),1,prod(udata.msize));
+  ny = repmat(udata.form(:,2),1,prod(udata.msize));
+  
+  x_c=reshape(repmat(1:udata.msize(2),l*udata.msize(1),1),l,prod(udata.msize));
+  y_c=repmat(repmat(1:udata.msize(1),l,1),1,udata.msize(2));
+  
+  if strcmp(udata.lattice,'hexa')
+    t = find(~rem(y_c(1,:),2));
+    x_c(:,t)=x_c(:,t)+.5;
+  end
+  
+  x_c=x_c+nx;
+  y_c=y_c+ny;
+  
+  udata.orig_c=ones(prod(udata.msize),1)*[NaN NaN NaN];
+  colors=reshape(udata.orig_c,[1 size(udata.orig_c,1) 3]);
+  set(0,'CurrentFigure',trajStruct.figure);
+  
+  %%%%%%%%%
+  % drawing 
+  
+  for i=1:length(udata.a_h);
+    subplot(udata.a_h(i));
+    v=caxis;
+    udata.patch_h(i) =patch(x_c,y_c,colors,'EdgeColor','none');
+    caxis(v);
+  end
+  
+  
+  udata.orig_x=get(udata.patch_h(1),'XData');
+  udata.orig_y=get(udata.patch_h(1),'YData');
+  
+  %  if interval(1) < 1 | interval(2) > size(trajStruct.primary_data,1)
+  %    error('Invalid argument ''interval''.');
+  %  end
+  
+  x=1:size(trajStruct.primary_data,1);
+  udata.fig1=figure;
+  set(udata.fig1,'KeyPressFcn',...
+                 'vis_trajgui([],''move_fuzzy'')');
+  for i=1:size(trajStruct.primary_data,2)
+    subplot(size(trajStruct.primary_data,2),1,i);
+    udata.h(i)=gca;
+    set(udata.h(1),'XTick',[]);
+    udata.d(i)=plot(x,trajStruct.primary_data(:,i));
+    l_x=1;
+    lims(1) = round(min(trajStruct.primary_data(:,i)));
+    lims(2) = round(max(trajStruct.primary_data(:,i)));
+    udata.l(i) = line([l_x l_x],lims,'Color','red','EraseMode','xor');
+  end
+  
+  udata.l_x = l_x;  
+  udata.interval=[1 size(trajStruct.bmus,2)];
+  
+  tmp.fig1=udata.fig1;
+  %  [K,P] = estimate_kernels(sM,sD);
+  %  udata.K=K;
+  %  udata.P=P;
+  %  udata.codebook=sM.codebook;
+  %  udata.data=sD.data;
+  udata.bmus=trajStruct.bmus;
+  set(udata.fig1,'UserData',udata);
+  set(trajStruct.figure,'UserData',tmp);  
+  draw_fuzzy(l_x);
+  return;
+end
+
+move_fuzzy;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function draw_fuzzy(x)
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+inds = find(udata.bmus(:,x));
+[row col] = ind2sub(udata.msize,inds);
+if strcmp(udata.lattice,'hexa')
+  t=find(~mod(row,2));
+  col(t)=col(t)+0.5;
+end
+
+color=udata.orig_c;
+color=reshape(color,[size(color,1) 3]);
+xdata=udata.orig_x;
+ydata=udata.orig_y;
+tmp= ones(size(xdata(:,1),1),1)*udata.bmus(inds,x)';
+color(inds,:) = ones(length(inds),1)*[0 0 0];
+xdata(:,inds) = udata.form(:,1)*ones(1,length(inds)).*tmp+ones(6,1)*col';
+ydata(:,inds) = udata.form(:,2)*ones(1,length(inds)).*tmp+ones(6,1)*row';
+
+set(udata.patch_h,'FaceVertexCData',color,'XData',xdata,'YData',ydata);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function move_fuzzy
+
+% moves pointer lines and draws fuzzy response.
+
+udata=get(gcf,'UserData');
+udata=get(udata.fig1,'UserData');
+
+switch get(gcf,'CurrentCharacter');
+ case {'<','>'}
+  key = get(gcf,'CurrentCharacter');
+  if key == '>'
+    if udata.l_x + 1 > udata.interval(2) 
+      return;
+    end
+    l_x = udata.l_x + 1;
+  else
+    if udata.l_x - 1 < udata.interval(1)
+      return;
+    end
+    l_x = udata.l_x - 1;
+  end
+  draw_fuzzy(l_x);
+  set(udata.l,'XData',[l_x l_x]);
+  udata.l_x=l_x;
+  set(udata.fig1,'UserData',udata);
+ otherwise
+  return;
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/vis_valuetype.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,269 @@
+function flag=vis_valuetype(value, valid, str);
+
+% VIS_VALUETYPE Used for type checks in SOM Toolbox visualization routines
+%
+%  flag = vis_valuetype(value, valid, str)
+%
+%  Input and output arguments:
+%   value  (varies) variable to be checked
+%   valid  (cell array) size 1xN, cells are strings or vectors (see below)
+%   str    (string) 'all' or 'any' (default), determines whether
+%                   all or just any of the types listed in argument 'valid' 
+%                   should be true for 'value'
+%
+%   flag   (scalar) 1 or 0 (true or false) 
+%
+% This is an internal function of SOM Toolbox visualization.  It makes
+% various type checks. For example:
+%
+%  % Return 1 if X is a numeric scalar otherwise 0:
+%  f=vis_valuetype(X,{'1x1'});
+%
+%  % Return 1 if X is a ColorSpec, that is, a 1x3 vector presenting an RGB
+%  % value or any of strings 'red','blue','green','yellow','magenta','cyan',
+%  % 'white' or 'black' or their shortenings  'r','g','b','y','m','c','w','k': 
+%  f=vis_valueype(X,{'1x3rgb','colorstyle'})
+%
+%  % Return 1 if X is _both_ 10x3 size numeric matrix and has RGB values as rows
+%  f=vis_valuetype(X,{'nx3rgb',[10 3]},'all')
+%
+% Strings that may be used in argument valid: 
+%  id             is true if value is 
+% 
+%  [n1 n2 ... nn] any n1 x n2 x ... x nn sized numeric matrix
+%  '1x1'          scalar (numeric)
+%  '1x2'          1x2 vector (numeric)
+%  'nx1'          any nx1 numeric vector
+%  'nx2'              nx2
+%  'nx3'              nx3
+%  'nxn'          any numeric square matrix
+%  'nxn[0,1]'     numeric square matrix with values in interval [0,1]
+%  'nxm'          any numeric matrix
+%  '1xn'          any 1xn numeric vector
+%  '1x3rgb'       1x3 vector v for which all(v>=0 & v<=1), e.g., a RGB code
+%  'nx3rgb'       nx3 numeric matrix that contains n RGB values as rows
+%  'nx3dimrgb'    nx3xdim numeric matrix that contains RGB values
+%  'nxnx3rgb'     nxnx3 numeric matrix of nxn RGB triples
+%  'none'         string 'none'
+%  'xor'          string 'xor'
+%  'indexed'      string 'indexed'
+%  'colorstyle'   strings 'red','blue','green','yellow','magenta','cyan','white' 
+%                 or 'black', or 'r','g','b','y','m','c','w','k'                 
+%  'markerstyle'  any of Matlab's marker chars '.','o','x','+','*','s','d','v',
+%                 '^','<','>','p'or 'h'
+%  'linestyle'    any or Matlab's line style strings '-',':','--', or '-.'
+%  'cellcolumn'   a nx1 cell array
+%  'topol_cell'   {lattice, msize, shape} 
+%  'topol_cell_no_shape' {lattice, msize}
+%  'string'       any string (1xn array of char)  
+%  'chararray'    any MxN char array
+
+% Copyright (c) 1999-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/             
+
+% Version 2.0beta Johan 201099 juuso 280800
+
+if nargin == 2
+  str='any';
+end
+
+flag=0;  
+sz=size(value);
+dims=ndims(value);
+
+% isnumeric
+numeric=isnumeric(value);
+character=ischar(value);
+
+% main loop: go through all types in arg. 'valid'
+for i=1:length(valid),
+  if isnumeric(valid{i}), % numeric size for double matrix
+    if numeric & length(valid{i}) == dims,
+      flag(i)=all(sz == valid{i});
+    else
+      flag(i)=0; % not numeric or wrong dimension
+    end
+  else
+    msg=''; % for a error message inside try 
+    try 
+      switch valid{i}
+	
+	% scalar
+       case '1x1'
+	flag(i)=numeric & dims == 2 & sz(1)==1 & sz(2) ==1;
+	
+	% 1x2 numeric vector
+       case '1x2'
+	flag(i)=numeric & dims == 2 & sz(1)==1 & sz(2) == 2;
+	
+	% 1xn numeric vector
+       case '1xn'
+	flag(i)=numeric & dims == 2 & sz(1) == 1;
+	
+	% any numeric matrix
+       case 'nxm' 
+	flag(i)=numeric & dims == 2;
+	
+	% nx3 numeric matrix 
+       case 'nx3'
+	flag(i)=numeric & dims == 2 & sz(2) == 3;
+	
+	% nx2 numeric matrix 
+       case 'nx2'
+	flag(i)=numeric & dims == 2 & sz(2) == 2;
+	
+	% nx1 numeric vector
+       case 'nx1'
+	flag(i)=numeric & dims == 2 & sz(2) == 1;
+       
+	% nx1xm numric matrix
+       case 'nx1xm'
+	flag(i)=numeric & dims == 3 & sz(2) == 1;
+	
+	% nx3 matrix of RGB triples
+       case 'nx3rgb'  
+	flag(i)=numeric & dims == 2 & sz(2) == 3 & in0_1(value);
+	
+	% RGB triple (ColorSpec vector)
+       case '1x3rgb'
+	flag(i) = numeric & dims == 2 & sz(1)==1 & sz(2) == 3 & in0_1(value);
+	
+	% any square matrix
+       case 'nxn'
+	flag(i)=numeric & dims == 2 & sz(1) == sz(2);
+	
+	% nx3xdim array of nxdim RGB triples
+       case 'nx3xdimrgb'
+	flag(i)=numeric & dims == 3 & sz(2) == 3 & in0_1(value);
+	
+	% nxnx3 array of nxn RGB triples
+       case 'nxnx3rgb'
+	flag(i)= numeric & dims == 3 & sz(1) == sz(2) & sz(3) == 3 ...
+		 & in0_1(value);
+	
+	% nxn matrix of values between [0,1]
+       case 'nxn[0,1]' 
+	
+	flag(i)=numeric & dims == 2 & sz(1) == sz(2) & in0_1(value);
+	
+	% string 'indexed'
+       case 'indexed'
+	flag(i) = ischar(value) & strcmp(value,'indexed');
+	
+	% string 'none'
+       case 'none'
+	flag(i) = character & strcmp(value,'none');
+      
+	% string 'xor'
+       case 'xor'
+	flag(i) = character & strcmp(value,'xor');
+	
+	% any string (1xn char array)
+       case 'string'
+	flag(i) = character & dims == 2 & sz(1)<=1;
+	
+	% any char array
+       case 'chararray'
+	flag(i) = character & dims == 2 & sz(1)>0;
+	
+	% ColorSpec string
+       case 'colorstyle'
+	flag(i)=(character &  sz(1) == 1 & sz(2) == 1 & ...
+		 any(ismember('ymcrgbwk',value))) | ...
+	(ischar(value) & any(strcmp(value,{'none','yellow','magenta',...
+		    'cyan','red','green','blue','white','black'})));
+	
+	% any valid Matlab's Marker
+       case 'markerstyle'
+	flag(i)=character &  sz(1) == 1 & sz(2) == 1 & ...
+		any(ismember('.ox+*sdv^<>ph',value));
+	
+	% any valid Matlab's LineStyle
+       case 'linestyle'
+	str=strrep(strrep(strrep(value,'z','1'),'--','z'),'-.','z');
+	flag(i)=character & any(ismember(str,'z-:')) & sz(1)==1 & (sz(2)==1 | sz(2)==2);
+	
+	% any struct
+       case 'struct'
+	flag(i)=isstruct(value);
+	
+	% nx1 cell array of strings
+       case 'cellcolumn_of_char'
+	flag(i)=iscell(value) & dims == 2 & sz(2)==1;  
+	try, char(value); catch, flag(i)=0; end
+	
+	% mxn cell array of strings
+       case '2Dcellarray_of_char'  
+	flag(i)=iscell(value) & dims == 2; 
+	try, char(cat(2,value{:})); catch, flag(i)=0; end
+	
+	% valid {lattice, msize} 
+       case 'topol_cell_no_shape'
+	flag(i)=1;
+	if ~iscell(value) | length(size(value)) ~= 2 | size(value,2)~=2
+	  flag(i)=0;
+	else
+	  if vis_valuetype(value{1},{'string'}),
+	    switch value{1}
+	     case { 'hexa','rect'}
+	      ;
+	     otherwise
+	      flag(i)=0;
+	    end
+	  end
+	  if ~vis_valuetype(value{2},{'1xn'}),
+	    flag(i)=0;
+	  end
+	end
+	
+	% valid {lattice, msize, shape} 
+       case 'topol_cell'
+	flag(i)=1;
+	if ~iscell(value) | length(size(value)) ~= 2 | size(value,2) ~= 3,
+	  flag(i)=0;
+	else
+	  if vis_valuetype(value{1},{'string'}),
+	    switch value{1}
+	     case { 'hexa','rect'}
+	      ;
+	     otherwise
+	      flag(i)=0;
+	    end
+	  end
+	  if ~vis_valuetype(value{2},{'1xn'})
+	    flag(i)=0;
+	  end
+	  if ~vis_valuetype(value{3},{'string'})
+	    flag(i)=0;
+	  else
+	    switch value{3}
+	     case { 'sheet','cyl', 'toroid'}
+	      ;
+	     otherwise
+	      flag(i)=0;
+	    end
+	  end
+	end
+       otherwise
+	msg='Unknown valuetype!';
+      end
+    catch 
+      % error during type check is due to wrong type of value: 
+      % lets set flag(i) to 0
+      flag(i)=0; 
+    end
+    % Unknown indetifier?
+    error(msg);
+  end
+  % set flag according to 3rd parameter (all ~ AND, any ~ OR) 
+  if strcmp(str,'all');
+    flag=all(flag);
+  else
+    flag=any(flag);
+  end
+end
+
+
+function f=in0_1(value)
+
+f=all(value(:) >= 0 & value(:)<=1);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/Main.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
+% Main script of KRBM-Knowledge-based Restricted Boltzmann Machine   %
+% -*-sontran2012-*-                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% loading background knowledge 
+% bk_file  = 'XOR.bk';
+% w = 5;
+W  = rand(0,0);
+mW = rand(0,0);
+% [W mW nNames] = encode_bk(bk_file,w)
+%%% visualize_system(W,nNames,w,100,100);
+%% Loading data
+PRO_DIR = 'C://Pros/';
+% dat_file = 'XOR.dat';
+% dat_file = 'DNA.dat';
+% train_file  = strcat(PRO_DIR,'/Data/ICDAR/digit_train_data.mat';
+% train_label = strcat(PRO_DIR,'/Data/ICDAR/digit_train_label.mat';
+% test_file   = strcat(PRO_DIR,'/Data/ICDAR/digit_test_data.mat';
+% test_label  = strcat(PRO_DIR,'/Data/ICDAR/digit_test_label.mat';
+%-----------------------------------------------------
+% train_file  = strcat(PRO_DIR,'/Data/MNIST/mnist_train_data.mat';
+% train_label = strcat(PRO_DIR,'/Data/MNIST/mnist_train_label.mat';
+% test_file   = strcat(PRO_DIR,'/Data/MNIST/mnist_test_data.mat';
+% test_label  = strcat(PRO_DIR,'/Data/MNIST/mnist_test_label.mat';
+%-----------------------------------------------------
+% train_file  = strcat(PRO_DIR,'/RBMLIB/train_dat.mat');
+% train_label = strcat(PRO_DIR,'/RBMLIB/train_lab.mat');
+% test_file   = strcat(PRO_DIR,'/RBMLIB/test_dat.mat');
+% test_label  = strcat(PRO_DIR,'/RBMLIB/test_lab.mat');
+%-----------------------------------------------------
+% train_file  = strcat(PRO_DIR,'/RBMLIB/train_dat.mat');
+data_file = strcat(PRO_DIR,'/DATA/XOR/xorall.mat');
+mod_file = strcat(PRO_DIR,'/DATA/XOR/model.mat');
+%% Move weights encoded from rule to right position of input if needed
+
+%% Setting parameters
+conf.hidNum = 4;
+conf.eNum   = 50;                                                           % number of epoch
+conf.bNum   = 1;                                                           % number of batches devides the data set
+conf.sNum   = 4;                                                          % number of samples per batch
+conf.gNum   = 1;                                                            % number of iteration for gibb sampling
+conf.params = [0.5 0.5 0.1 0.00002];                                        % [lr1 lr2 momentum cost] 
+                                                                            % lr1: learning rate in first 10 epoches
+                                                                            % lr2: learning rate in the other epoches
+%% Training system
+% training_kbrm(conf,W,mW,dat_file);                                        % unsupevised learning
+% [W visB hidB] = gen_training_kbrbm(conf,W,mW,train_file,train_label);     % unsupervised learning for generative classification
+% dis_training_kbrm(conf,W,mW,dat_file,dat_label);                          % unsupervised learning for discriminative classification
+[W visB hidB] = training_rbm(conf,W,mW,data_file);
+save(mod_file,'W','mW','visB','hidB');
+nNames = {'X' 'Y' 'Z'};
+visualize_system(W,nNames,100,100);
+%% Classify (if wanted)
+% gen_classify(W, visB, hidB,mW,test_file,test_label);
+%% Generate features (if wanted)
+% in_f_file = '../Data/ICDAR/images.bin';
+% out_f_file = '../Data/ICDAR/feature.mat';
+% input_features = mnist2mat(in_f_file);
+% output_features = input_features*W;
+% save(out_f_file,'output_features');
+%% Extract knowledge (if wanted)
+% name_file = 'names.txt';                                                    % File contains name of input
+% rule_file = 'rules.txt';
+% extract_knowledge(rule_file,W);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% END%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+clear;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/classify.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function [ output_args ] = classify( input_args )
+%CLASSIFY Summary of this function goes here
+%   Detailed explanation goes here
+
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/discrete2softmax.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function S = discrete2softmax( D,Vals )
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% convert a col-array of discrete value to softmax   %
+% D: col-array                                       %
+% Vals: list of possible values                      %
+%  sontran2012                                       %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+S = zeros(size(D,1),size(Vals,2));
+for i=1:size(D,1)
+    S(i,find(Vals==D(i))) = 1;
+end
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/gen_classify.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+function [count total] = gen_classify(W, visB, hidB,mW,test_file,test_label);
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% RBM for generative classification                                  %   
+% conf: training setting                                             %
+% WW = [W visB hidB]                                                 %
+% mW: mask of connections                                            %
+% -*-sontran2012-*-                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Loading data & label
+vars = whos('-file', test_file);
+A = load(test_file,vars(1).name);
+data = A.(vars(1).name);
+vars = whos('-file', test_label);
+A = load(test_label,vars(1).name);
+label = A.(vars(1).name);
+assert(size(data,1) == size(label,1),'[KRBM-GEN] Number of data and label mismatch'); 
+Classes = unique(label)';
+lNum = size(Classes,2);
+%% Loading structure
+[total visNum]= size(data);
+sNum = 500;                                                                 % fix
+bNum  = floor(total/sNum);                                                   % divide the testing samples to batches of sNum
+%% Classifying
+count = 0;
+for i=1:bNum
+    % Find the position of softmax unit which make lowest free energy
+    L = lowest_fenergy(data((i-1)*sNum + 1:i*sNum,:),W, visB, hidB,Classes);
+    count = count + sum(L==label((i-1)*sNum + 1:i*sNum));
+end
+L = lowest_fenergy(data(bNum*sNum + 1:total,:),W, visB, hidB,Classes);
+count = count + sum(L==label(bNum*sNum + 1:total));
+fprintf('Correct rate: %f (%d/%d)\n',count/total,count,total);
+clear A vars data lNum sNum bNum out;
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/gen_evaluate.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function [ output_args ] = gen_evaluate( data,label,WW,Classes)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% generative classification                                          %   
+% WW = [W visB hidB]                                                 %
+% mW: mask of connections                                            %
+% -*-sontran2012-*-                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Loading data & label
+assert(size(data,1) == size(label,1),'[KRBM-GEN] Number of data and label mismatch'); 
+lNum = size(Classes);
+%% Loading structure
+[total visNum]= size(data);
+sNum = 500;                                                              % fix
+bNum  = ceil(total/sNum);                                                % divide the testing samples to batches of sNum
+%% Classifying
+count = 0;
+for i=1:bNum
+    % Find the position of softmax unit which make lowest free energy
+    L = lowest_fenergy(data((i-1)*sNum + 1:i*sNum,:),WW,lNum,Classes);
+    count = count + sum(L==label((i-1)*sNum + 1:i*sNum));
+end
+L = lowest_fenergy(data(bNum*sNum + 1:total,:),WW,Classes);
+count = count + sum(L==label(bNum*sNum + 1:total));
+fprintf('Correct rate: %f (%d/%d)',count/total,count,total;
+clear A vars data lNum sNum bNum out;
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/gen_training_rbm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+function [W visB hidB] = gen_training_krbm(conf,W,mW,train_file,train_label)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Training Knowledge Based RBM for generative classification         %  
+% conf: training setting                                             %
+% W: weights of connections                                          %
+% mW: mask of connections                                            %
+% -*-sontran2012-*-                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% load data
+vars = whos('-file', train_file);
+A = load(train_file,vars(1).name);
+data = A.(vars(1).name);
+vars = whos('-file', train_label);
+A = load(train_label,vars(1).name);
+label = A.(vars(1).name);
+assert(~isempty(data),'[KRBM-GEN] Data is empty'); 
+assert(size(data,1) == size(label,1),'[KRBM-GEN] Number of data and label mismatch'); 
+Classes = unique(label)';
+lNum = size(Classes,2);
+data = [data discrete2softmax(label,Classes)]                              
+%% initialization
+visNum  = size(data,2);
+hidNum  = conf.hidNum;
+sNum  = conf.sNum;
+lr    = conf.params(1);
+N     = 10;                                                                     % Number of epoch training with lr_1                     
+W     = [W;0.1*randn(visNum - size(W,1),size(W,2))];
+W     = [W 0.1*randn(size(W,1),hidNum-size(W,2))];
+
+DW    = zeros(size(W));
+visB  = zeros(1,visNum);
+DVB   = zeros(1,visNum);
+hidB  = zeros(1,hidNum);
+DHB   = zeros(1,hidNum);
+visP  = zeros(sNum,visNum);
+visN  = zeros(sNum,visNum);
+visNs = zeros(sNum,visNum);
+hidP  = zeros(sNum,hidNum);
+hidPs = zeros(sNum,hidNum);
+hidN  = zeros(sNum,hidNum);
+hidNs = zeros(sNum,hidNum);
+%% Reconstruction error & evaluation error & early stopping
+mse    = 0;
+omse   = 0;
+inc_count = 0;
+MAX_INC = 3;                                                                % If the error increase MAX_INC times continuously, then stop training
+%% Average best settings
+n_best  = 1;
+aW  = size(W);
+aVB = size(visB);
+aHB = size(hidB);
+%% ==================== Start training =========================== %%
+for i=1:conf.eNum
+    if i== N+1
+        lr = conf.params(2);
+    end
+    omse = mse;
+    mse = 0;
+    for j=1:conf.bNum
+       visP = data((j-1)*conf.sNum+1:j*conf.sNum,:);
+       %up
+       hidP = logistic(visP*W + repmat(hidB,sNum,1));
+       hidPs =  1*(hidP >rand(sNum,hidNum));
+       hidNs = hidPs;
+       for k=1:conf.gNum
+           % down
+           visN  = hidNs*W' + repmat(visB,sNum,1);
+           visN(:,1:visNum-lNum) = logistic(visN(:,1:visNum-lNum));
+           visN(:,visNum-lNum+1:visNum) = softmax_activation(visN(:,visNum-lNum+1:visNum));
+           visNs = [1*(visN(:,1:visNum-lNum)>rand(sNum,visNum-lNum)) visN(:,visNum-lNum+1:visNum)];
+           if j==5 && k==1, observe_reconstruction(visN(:,1:visNum-lNum),sNum,i,28,28); end
+           % up
+           hidN  = logistic(visNs*W + repmat(hidB,sNum,1));
+           hidNs = 1*(hidN>rand(sNum,hidNum));
+       end
+       % Compute MSE for reconstruction
+       rdiff = (visP - visN);
+       mse = mse + sum(sum(rdiff.*rdiff))/(sNum*visNum);
+       % Update W,visB,hidB
+       diff = (visP'*hidP - visNs'*hidN)/sNum;
+       DW  = lr*(diff - conf.params(4)*W) +  conf.params(3)*DW;
+       W   = W + DW;
+%        W = W.*mW;
+       DVB  = lr*sum(visP - visN,1)/sNum + conf.params(3)*DVB;
+       visB = visB + DVB;
+       DHB  = lr*sum(hidP - hidN,1)/sNum + conf.params(3)*DHB;
+       hidB = hidB + DHB;
+    end
+    if mse > omse
+        inc_count = inc_count + 1
+    else
+        inc_count = 0;
+    end
+    if inc_count> MAX_INC, break; end;
+    fprintf('Epoch %d  : MSE = %f\n',i,mse);
+end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/license.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,678 @@
+
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. [http://fsf.org/]
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    {one line to give the program's name and a brief idea of what it does.}
+    Copyright (C) {year}  {name of author}
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see [http://www.gnu.org/licenses/].
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    {project}  Copyright (C) {year}  {fullname}
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+[http://www.gnu.org/licenses/].
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+[http://www.gnu.org/philosophy/why-not-lgpl.html].
+
+        
+          
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/logistic.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function A = logistic( A )
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Logistic function                        %
+% sontran2012                              %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+A = 1./(1+exp(-A));
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/lowest_fenergy.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function L = lowest_fenergy(V,W,visB,hidB,Classes)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Return the labels L(Classes) to the lowest energy softmax unit      %   
+% visP: hidden states                                                %
+% visN: reconstructed data (with softmax)                            %
+% WW = [W visB hidB]                                                 %
+% F(v) = -\sum_i v_ia_i - \sum_jlog(1+e^(x_j))                       %
+% -*-sontran2012-*-                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+lNum = size(Classes,2);
+sNum = size(V,1);
+F = zeros(sNum,lNum);
+out = zeros(sNum,lNum);
+for i=1:lNum
+    F(:,i) = 1;
+    X = [V F]*W + repmat(hidB,sNum,1);
+    out(:,i) = sum(repmat(visB,sNum,1).*[V F],2) + sum(log(1+exp(X)),2);
+    F(:,i) = 0;
+end
+L =  softmax2discrete(out,Classes);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/observe_reconstruction.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function observe_reconstruction(Is,num,g,img_row,img_col)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Saving images to files                                             %   
+% Is: Images                                                         %
+% sNum: Number of images to save                                     %
+% g: indices: imaged group gth                                     %
+% -*-sontran2012-*-                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+if num>100, return; end;
+dir = 'C://Pros/tmp/obsv/';
+col = floor(sqrt(num));
+row = ceil(num/col);
+gap = 2;
+pos = ones(1,col*row);
+pos = cumsum(pos);
+pos = vec2mat(pos,col);
+bigImg = zeros(row*img_row + (row-1)*gap,col*img_col + (col-1)*gap);
+for i=1:row
+    for j=1:col
+        y = 1 + (i-1)*(img_row+gap);
+        x = 1 + (j-1)*(img_col+gap);
+        if pos(i,j) <= num, bigImg(y:y+img_row-1,x:(x+img_col-1)) = vec2mat(Is(pos(i,j),:),img_col); end;
+    end
+end
+imwrite(bigImg,strcat(dir,'img_',num2str(g),'.bmp'),'BMP');
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/softmax2discrete.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+function D = softmax2discrete( S,Vals )
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% convert softmax to col-array of discrete value     %
+% S: softmax                                         %
+% Vals: list of possible values                      %
+% sontran2012                                       %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+[dummy out] = max(S');
+out = out';
+D = zeros(size(out));
+for i=1:size(out,1)
+    D(i) = Vals(out(i));
+end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/softmax_activation.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function A = softmax_activation( softmax_group)
+A = exp(softmax_group);
+A = A./repmat(sum(A,2),1,size(A,2));
+for i=1:size(A,1)
+    A(i,:) = cumsum(A(i,:))>rand();
+    m = max(A(i,:));
+    inx = find(A(i,:)==m,1,'first');
+    A(i,:) = 0;
+    A(i,inx) = 1;
+end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/RBM/training_rbm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+function [W visB hidB] = training_rbm(conf,W,data_file)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Training RBM                                                       %  
+% conf: training setting                                             %
+% W: weights of connections                                          %
+% -*-sontran2012-*-                                                  %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% load data
+vars = whos('-file', data_file);
+A = load(data_file,vars(1).name);
+data = A.(vars(1).name);
+assert(~isempty(data),'[KBRBM] Data is empty'); 
+%% initialization
+visNum  = size(data,2);
+hidNum  = conf.hidNum;
+sNum  = conf.sNum;
+lr    = conf.params(1);
+N     = 10;                                                                     % Number of epoch training with lr_1                     
+W     = 0.1*randn(visNum - size(W,1),size(W,2));
+W     = 0.1*randn(size(W,1),hidNum-size(W,2));
+
+DW    = zeros(size(W));
+visB  = zeros(1,visNum);
+DVB   = zeros(1,visNum);
+hidB  = zeros(1,hidNum);
+DHB   = zeros(1,hidNum);
+visP  = zeros(sNum,visNum);
+visN  = zeros(sNum,visNum);
+visNs = zeros(sNum,visNum);
+hidP  = zeros(sNum,hidNum);
+hidPs = zeros(sNum,hidNum);
+hidN  = zeros(sNum,hidNum);
+hidNs = zeros(sNum,hidNum);
+%% Reconstruction error & evaluation error & early stopping
+mse    = 0;
+omse   = 0;
+inc_count = 0;
+MAX_INC = 3000;                                                                % If the error increase MAX_INC times continuously, then stop training
+%% Average best settings
+n_best  = 1;
+aW  = size(W);
+aVB = size(visB);
+aHB = size(hidB);
+%% Plotting
+h = plot(nan);
+%% ==================== Start training =========================== %%
+for i=1:conf.eNum
+    if i== N+1
+        lr = conf.params(2);
+    end
+    omse = mse;
+    mse = 0;
+    for j=1:conf.bNum
+       visP = data((j-1)*conf.sNum+1:j*conf.sNum,:);
+       %up
+       hidP = logistic(visP*W + repmat(hidB,sNum,1));
+       hidPs =  1*(hidP >rand(sNum,hidNum));
+       hidNs = hidPs;
+       for k=1:conf.gNum
+           % down
+           visN  = logistic(hidNs*W' + repmat(visB,sNum,1));
+           visNs = 1*(visN>rand(sNum,visNum));
+           if j==5 && k==1, observe_reconstruction(visN,sNum,i,28,28); end
+           % up
+           hidN  = logistic(visNs*W + repmat(hidB,sNum,1));
+           hidNs = 1*(hidN>rand(sNum,hidNum));
+       end
+       % Compute MSE for reconstruction
+       rdiff = (visP - visN);
+       mse = mse + sum(sum(rdiff.*rdiff))/(sNum*visNum);
+       % Update W,visB,hidB
+       diff = (visP'*hidP - visNs'*hidN)/sNum;
+       DW  = lr*(diff - conf.params(4)*W) +  conf.params(3)*DW;
+       W   = W + DW;
+%        W = W.*mW;
+       DVB  = lr*sum(visP - visN,1)/sNum + conf.params(3)*DVB;
+       visB = visB + DVB;
+       DHB  = lr*sum(hidP - hidN,1)/sNum + conf.params(3)*DHB;
+       hidB = hidB + DHB;
+    end
+    %% 
+    mse_plot(i) = mse;
+    axis([0 (conf.eNum+1) 0 2]);
+    set(h,'YData',mse_plot);
+    drawnow;
+%    plot(mse_plot,'XDataSource','real(mse_plot)','YDataSource','imag(mse_plot)')
+%     linkdata on;
+    
+    if mse > omse
+        inc_count = inc_count + 1
+    else
+        inc_count = 0;
+    end
+    if inc_count> MAX_INC, break; end;
+    fprintf('Epoch %d  : MSE = %f\n',i,mse);
+end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/LICENSE.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+SVM-Light
+---------
+
+Available at http://svmlight.joachims.org/
+
+Author: Thorsten Joachims
+	thorsten@joachims.org
+
+	Cornell University
+	Department of Computer Science
+	4153 Upson Hall
+	Ithaca, NY 14853
+	USA
+
+LICENSING TERMS 
+
+This program is granted free of charge for research and education
+purposes. However you must obtain a license from the author to use it
+for commercial purposes.
+
+Scientific results produced using the software provided shall
+acknowledge the use of SVM-Light. Please cite as  
+
+       T. Joachims, Making large-Scale SVM Learning
+       Practical. Advances in Kernel Methods - Support Vector
+       Learning, B. Schölkopf and C. Burges and A. Smola (ed.),
+       MIT-Press, 1999. 
+       http://www-ai.cs.uni-dortmund.de/DOKUMENTE/joachims_99a.pdf
+
+Moreover shall the author of SVM-Light be informed about the
+publication.
+
+The software must not be modified and distributed without prior
+permission of the author.
+
+By using SVM-Light you agree to the licensing terms.
+
+
+NO WARRANTY 
+
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
+WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
+PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF
+THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO
+LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
+OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGES.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/Readme_optimization_relative_constraints.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+Solving general optimization problems
+-------------------------------------
+
+You can use SVM-light to solve general optimzation problems of the form:
+
+   min 0.5 w*w + C sum_i C_i \xi_i
+   s.t. x_i * w > rhs_i - \xi_i
+
+Use the option "-z o". This allows specifying a training set where the examples are the inequality constraints. For example, to specify the problem
+
+   min 0.5 w*w + 10 (1000 \xi_1 + 1 \xi_2 + 1 \xi_3 + 1 \xi_4)
+   s.t.	1 w_1 >= 0 - \xi_1
+   	-2 w_1 >= 1 - \xi_2
+   	2 w_3 >= 2 - \xi_3
+   	2 w_2 + 1 w_3 >= 3 - \xi_4
+
+you can use the training set
+
+0 cost:10000 1:1
+1 1:-2
+2 3:2
+3 2:3 3:1
+
+and run 
+
+    svm_learn -c 10 -z o train.dat model 
+
+The format is just like the normal SVM-light format. Each line corresponds to one inequality. However, the first element of each line is the right-hand side of the inequality. The remainder of the line specifies the left-hand side. The parameter cost:<value> is optional and lets you specify a factor by which the value of the slack variable is weighted in the objective. The general regularization parameter (10 in the example) is specified with the option -c <value> on the command line.
+
+To classify new inequalities, you can use svm_classify in the normal way.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/SVM-Light Support Vector Machine.htm	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
+   "http://www.w3.org/TR/html4/frameset.dtd">
+<html>
+<head>
+  <title>SVM-Light Support Vector Machine</title>
+  <meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
+  <meta name="description" content="SVM-Light Support Vector Machine">
+  <meta name="keywords" content="Thorsten Joachims, SVM-light, SVM light, SVMlight, Support Vector Machine, Text Classification, Training Support Vector Machines, Classification, Regression, Estimators, Leave-one-out, loo, Estimator, Algorithm, Learning, Machine Learning, Training">
+  <meta name="google-site-verification" content="">
+</head>
+<frameset rows="*,0" border="0" frameborder="0" style="border: none">
+  <frame src="http://www.cs.cornell.edu/People/tj/svm_light" noresize scrolling="auto">
+  <noframes>
+    <body>
+      Hier finden Sie Informationen zu den folgenden Themen:<BR/><UL><LI>Thorsten Joachims</LI>
+<LI>SVM-light</LI>
+<LI>SVM light</LI>
+<LI>SVMlight</LI>
+<LI>Support Vector Machine</LI>
+<LI>Text Classification</LI>
+<LI>Training Support Vector Machines</LI>
+<LI>Classification</LI>
+<LI>Regression</LI>
+<LI>Estimators</LI>
+<LI>Leave-one-out</LI>
+<LI>loo</LI>
+<LI>Estimator</LI>
+<LI>Algorithm</LI>
+<LI>Learning</LI>
+<LI>Machine Learning</LI>
+<LI>Training</LI>
+</UL>      <p><a href="http://www.cs.cornell.edu/People/tj/svm_light">Weiter zur Startseite</a></p>
+    </body>
+  </noframes>
+</frameset>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/example1/test.dat	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,601 @@
+# Reuters category "corporate aquisitions" (test examples: 300 positive/ 300 negative) 
++1 6:0.0342598670723747 26:0.148286149621374 27:0.0570037235976456 31:0.0373086482671729 33:0.0270832794680822 63:0.0317368459004657 67:0.138424991237843 75:0.0297571881179897 96:0.0303237495966756 142:0.0241139382095992 144:0.0581948804675796 185:0.0285004985793364 199:0.0228776475252599 208:0.0366675566391316 274:0.0528930062061687 308:0.0361623318128513 337:0.0374174808347037 351:0.0347329937800643 387:0.0690970538458777 408:0.0288195477724883 423:0.0741629177979597 480:0.0719961218888683 565:0.0520577748209694 580:0.0442849093862884 593:0.329982711875242 598:0.0517245325094578 613:0.0452655621746453 641:0.0387269206869957 643:0.0398205809532254 644:0.0466353065571088 657:0.0508331832990127 717:0.0495981406619795 727:0.104798994968809 764:0.0452655621746453 827:0.0418050310923008 1027:0.05114477444793 1281:0.0633241153685135 1340:0.0657101916402099 1395:0.0522617631894159 1433:0.0471872599750513 1502:0.840963375098259 1506:0.0686138465829187 1558:0.0589627036028818 1598:0.0512079697459134 1726:0.0660884976719923 1836:0.0521934221969394 1943:0.0587388821544177 2433:0.0666767220421155 2646:0.0729483627336339 2731:0.071437898589286 2771:0.0706069752753547 3553:0.0783933439550538 3589:0.0774668403369963
++1 179:0.183380155787579 199:0.157247710191107 408:0.198088894016017 587:0.426066443224553 1990:0.447885839011823 2134:0.458297202655782 3005:0.5569874337712
++1 6:0.00482709726364712 17:0.0526067936384763 26:0.10446503857735 27:0.0281106990768854 28:0.0356456751828835 63:0.0313012858968506 72:0.0300401635230985 83:0.012507314153985 88:0.0737185781091803 102:0.0919905568442081 142:0.00876215636178203 155:0.100271086073242 172:0.0378545536912375 179:0.0526268994083645 199:0.0225636721456629 204:0.0579559481364334 306:0.0378786130534899 308:0.106998107844821 337:0.0369039591653246 357:0.0446845288778611 437:0.130255551720447 475:0.0391145025392082 538:0.0422966045382641 539:0.0448465452746061 587:0.0611368109939652 598:0.0510146592713463 755:0.100761643621509 808:0.0503808218107545 823:0.0549991894617621 871:0.0554451802614129 1990:0.128535407197547 2026:0.348920957396963 2134:0.460331503040801 2736:0.315429331039326 2804:0.315429331039326 2975:0.0686186332932993 3005:0.559459802671567 3813:0.0839264409437691 3835:0.0782990010086473 5570:0.079922828953081
++1 6:0.00797462873810959 26:0.0345163916642208 27:0.0696606189381528 33:0.0441290005061936 67:0.0451094300865861 142:0.0165434990048971 172:0.0625377934701842 204:0.047873198353993 308:0.117844484878955 437:0.0717297656206316 455:0.0582264995123673 473:0.0702120797712105 480:0.0586545824892089 546:0.0688988300164216 764:0.0737548795917481 808:0.166463747265811 882:0.05988570937618 1710:0.111056350005715 2976:0.107683390065739 5954:0.457701287906402 7029:0.316132177802849 7836:0.741910821304179 8399:0.165428413714452
++1 6:0.020398477445271 11:0.0458319874879689 15:0.0349435129583541 26:0.0441451169688967 28:0.0753162264530517 29:0.0370416466621968 30:0.0613060121073632 48:0.0623952610910362 63:0.0881825438769616 75:0.0826819575927399 80:0.0664082539832147 81:0.0620988371567663 83:0.0528537445458926 106:0.0713919290192784 142:0.0264481114418981 179:0.0555980417403573 216:0.266211025112519 227:0.0724969884807626 229:0.106824100071866 243:0.0961696532496726 284:0.0619384650702658 345:0.0748473146787298 384:0.11052547545743 414:0.0753592469880539 437:0.0917395689641771 455:0.372347094775744 505:0.0733654174810628 507:0.0545348021447396 557:0.0959891051878867 689:0.254925792581784 710:0.117536871080518 967:0.130689853323039 1043:0.570342575896572 1055:0.111292231708947 1057:0.13894866046608 1081:0.113390061284155 1788:0.125587611447188 2423:0.131638583246465 4488:0.396846996835276
++1 6:0.0331457691319788 31:0.126333924126773 60:0.251579838716322 68:0.203480917932947 204:0.198980295178862 252:0.239210120129266 5580:0.615880116120099 5956:0.634130303264387
++1 6:0.0218491019698381 18:0.0584788160942556 26:0.0472844683977855 27:0.0159048362045602 28:0.0403361455817294 31:0.0208192694179522 37:0.077533872728326 51:0.0370980624567537 60:0.0414592396979942 63:0.0236133971064361 67:0.123592027933923 68:0.0335327512474576 75:0.0110702289383883 84:0.0641156774433354 92:0.0360590870325244 103:0.0519974019127433 107:0.0522501480135825 142:0.018413818652895 159:0.0328608104261246 172:0.0428356814897517 185:0.0636163019598063 192:0.0441125876391305 194:0.0432773337366851 204:0.131164274452059 211:0.0543244512486792 213:0.0563928096988284 232:0.0969671517729285 239:0.0463098055362765 252:0.15768306012483 284:0.0331715894680471 286:0.030606506930599 287:0.0507016764518807 345:0.040085016515859 363:0.051026999054523 375:0.0387225623952956 415:0.0475237416516677 426:0.0491732437178919 427:0.0580242638507468 441:0.0385172511217403 477:0.0584037142091113 485:0.0756011625507409 502:0.0377036999516413 505:0.0785827516737091 538:0.0478622438631065 553:0.0698262795454381 571:0.0431101852912942 593:0.052611309792993 594:0.0523012127600622 613:0.101037799870997 633:0.11360316945256 643:0.0444419962528649 742:0.0560604792625693 772:0.0506100095692246 834:0.055043988873594 856:0.0409950423925163 986:0.0488447376658748 1126:0.116501558650048 1149:0.0524038671928424 1242:0.0693401562200767 1776:0.0632632525374431 1924:0.0753375504929324 1972:0.0794131539517976 2020:0.0911057714338088 2161:0.0725259184071201 2163:0.0690246184898803 2756:0.0904395511493393 3307:0.106267128558266 3469:0.0904395511493393 4335:0.0989905857074216 5149:0.0958785930963484 5580:0.202988613791452 5956:0.627011139929495 7828:0.508176797928401
++1 6:0.00348466932721003 26:0.0452478285578935 27:0.0710256494147685 29:0.0506225585902376 33:0.0578490784540854 64:0.0906702916249511 72:0.0650577546064757 83:0.00902899850939436 94:0.0209191263164869 100:0.0215332395464819 142:0.00903625507849666 179:0.0379912258109207 199:0.0162886579533739 204:0.0418382526329738 205:0.0827195493716847 206:0.0332360142102708 308:0.051494442603469 331:0.0272407348950546 402:0.0265604598582834 434:0.0301532126179079 437:0.0626874359458724 455:0.0254432028806464 483:0.0338337899521216 574:0.0260916749111685 609:0.0246767946892561 724:0.0407746897115988 883:0.0406340798592227 963:0.0295653354325134 987:0.0284489282230777 1102:0.0417428067970281 1149:0.0334311495064964 1230:0.0486889327373641 1248:0.0448663319578005 1380:0.0717810677581099 1990:0.185578771861469 2026:0.125942579096003 2134:0.427258478319213 2736:0.45541527536764 2804:0.45541527536764 2943:0.0690700557675639 3005:0.51926479589435 3241:0.0585658966812517 3813:0.0605862858204954 3814:0.0590323939629308
++1 6:0.00785445606167515 15:0.0538201516085403 28:0.0580011908235646 29:0.0570517063228698 40:0.0490761508769594 63:0.0339547850150409 74:0.0643894984454069 75:0.0318367782471932 96:0.0486644010703318 103:0.0747694452996197 142:0.00407354970079566 159:0.0472520640892858 162:0.0425397682230292 180:0.121054290840425 204:0.0471517791425653 229:0.0822654732534441 308:0.116068642063443 455:0.114698125032326 475:0.0636455254138321 574:0.0588107205940729 626:0.0741303185094789 834:0.0791502722013582 896:0.0994793287716406 965:0.0784550120313395 1031:0.0965166644860253 1057:0.107004667518699 2503:0.311368263248173 2886:0.583773246240059 2974:0.541319416898089 3079:0.115582692920521 4281:0.126591596142855 5122:0.147997359941209 5845:0.144068112306189 7126:0.173944414020896 7127:0.173944414020896
++1 6:0.00783355108261519 15:0.0536769069161587 28:0.057846818112062 29:0.0568998607059805 40:0.0489455325504489 63:0.033864412866524 74:0.0642181229731765 75:0.0317520432665188 96:0.0485348786339782 103:0.0745704431438957 142:0.00406270776972797 159:0.0471263006497083 162:0.0424265467654344 180:0.120732099539682 204:0.0470262826157689 229:0.0820465200907787 255:0.0729109308825163 308:0.115759720285436 455:0.114392850945465 475:0.0634761300584328 574:0.0586541932836052 626:0.073933017417719 834:0.0789396102828286 896:0.0992145601780499 965:0.0782462005782249 1031:0.096259781153281 1057:0.106719869906206 2503:0.310539542968624 2886:0.582219508159079 2974:0.539878671544605 3079:0.115275064517456 4281:0.126254667061356 5122:0.147603458481171 5845:0.143684668710946 7126:0.173481453339195 7127:0.173481453339195
++1 31:0.121578360639455 174:0.23382059176088 232:0.283129708150668 389:0.271848845786714 506:0.17845240482837 719:0.343333813947578 1228:0.392774642160119 2344:0.528140164045503 2402:0.439948957845025
++1 6:0.0261488826243853 15:0.044794216690105 26:0.16976935928035 29:0.047483821936342 63:0.0282603811429679 67:0.0739571227278646 68:0.160527234053451 142:0.0305135374553196 153:0.226795963556356 186:0.0741927484319776 204:0.156976667594588 242:0.183226987379415 411:0.0979529405146104 496:0.10963592358768 643:0.10637586343034 764:0.120921471880174 808:0.136459048170714 827:0.111677081843667 834:0.131752673974476 858:0.131169345927101 1005:0.13782583765324 1359:0.145140959979797 1731:0.48703532778565 2833:0.197531264581186 3236:0.391474393061168 4525:0.289545961533446 5918:0.271220662115919 6225:0.279225688098712
++1 26:0.15620989586763 28:0.266510561058506 63:0.0780096811503992 142:0.00935880799034978 158:0.259041653526988 204:0.216658432969386 513:0.270072471546516 719:0.388459554684346 6495:0.74867487688954
++1 26:0.176202309110135 27:0.118536549536136 60:0.308989992539676 80:0.265064145238512 142:0.0527829421196014 153:0.353084673037169 726:0.375164594544601 1174:0.721778856572601
++1 6:0.0282619337466596 15:0.0322759791183498 26:0.0407751468824368 29:0.0342139445339461 31:0.0359064528910632 67:0.106577979266019 68:0.057833064590458 85:0.0577323885836754 142:0.00488582068801075 153:0.0817076659082195 174:0.13811122339312 256:0.0641103449933427 275:0.126700078476862 373:0.269005974824668 389:0.160573439605384 505:0.0677648147583194 506:0.105406798275044 507:0.0503716995296016 713:0.0942018187339389 719:0.101398796229673 800:0.0830770129861911 808:0.196648126240849 1058:0.105679822541211 1228:0.116000447047891 1500:0.215018198278552 1604:0.126481124896071 1643:0.12612458776665 1786:0.12612458776665 2055:0.145126137835124 2303:0.130766611311505 2344:0.623914973698835 2402:0.129932715380012 4839:0.381424628223378 5880:0.201192991959869
++1 6:0.023702409591198 12:0.0798915346740287 27:0.0345078660644096 29:0.0860825307648993 31:0.0451704469881664 37:0.0560736885551188 42:0.0709043655986918 63:0.0256163576346981 75:0.0240184791968325 83:0.0307072207966611 88:0.0904947547868725 108:0.438827290193259 142:0.00921957001925433 205:0.18755032939063 229:0.12412635114105 231:0.381151880942266 242:0.0830421927661675 259:0.144170846573517 317:0.0706357473502409 339:0.0921799788350054 363:0.110710530205736 408:0.069784991702609 506:0.0663010658295947 586:0.0871179957043673 601:0.160029758207399 688:0.131561662932881 697:0.127050626980755 847:0.126383576997735 897:0.197667282950779 1264:0.196221820699538 1388:0.153335954486604 1407:0.144457346632878 2152:0.191007871138408 2892:0.245845427332808 3785:0.404868936445694 4535:0.21737733205829
++1 6:0.0263446335928295 15:0.120345458501861 26:0.152035782680804 27:0.0511395031541379 28:0.129694541815601 29:0.0318928577425718 63:0.0189812925495308 64:0.0761645872986944 75:0.0177972913530987 80:0.0571775066193463 94:0.0527172658427635 97:0.0547955036626274 134:0.188679104991507 142:0.0296033711057475 150:0.153165204020884 176:0.273111573113587 178:0.141741955202564 179:0.0478699138880459 192:0.0709185491033759 198:0.0764624274072915 205:0.0694858285610122 226:0.0680911560199281 325:0.315420055478884 363:0.0820346511442473 387:0.0619887400344992 485:0.121541832968126 546:0.0758703839123821 561:0.0778185117835585 742:0.0901268337252244 823:0.200111083346736 966:0.0877153269964253 997:0.167028578917694 1433:0.0846658034959993 1511:0.105997242953918 1880:0.122698595146067 2103:0.703286804341054
++1 111:0.215994569070182 186:0.195992437000748 229:0.180872475933477 426:0.310925435082124 586:0.253890450118932 800:0.304579905334509 3046:0.529396953756829 3266:0.589960522405692
++1 6:0.0414181490451389 15:0.0709511595535961 26:0.0896345837153026 27:0.0602998583070711 28:0.07646302772154 29:0.0752113213571199 37:0.0979844847061062 63:0.0671439404351639 68:0.0635662047336336 75:0.020985228260957 94:0.0621602374796953 97:0.0646107393097281 134:0.14831747924497 142:0.0429613170728851 176:0.161016319528302 185:0.0602969742168158 192:0.0836218226326396 198:0.0901587472325944 199:0.0484010102185417 204:0.310801187398477 226:0.0802879732247478 255:0.0963750593588942 265:0.19563693259551 317:0.0617152846931116 322:0.0897378363726056 323:0.0885780441804325 351:0.0734827295950458 387:0.0730924629722711 389:0.0882457484228118 394:0.0964631554400182 436:0.0914602402840867 485:0.0716564969771972 549:0.1105674056468 594:0.0991445519512959 613:0.0957659188928411 742:0.106270788101238 747:0.57056874585112 808:0.108071179883261 823:0.117977974239532 856:0.0777120624119458 965:0.10342732062337 1014:0.12697855241545 1036:0.117052453853647 1126:0.110422820279291 1175:0.109710728782976 1471:0.119924691929821 1548:0.113949996766476 1568:0.153664409222043 1625:0.139819885222829 1897:0.276482184431207 2723:0.134980209271462 4501:0.176869379977319
++1 6:0.0300323798317241 15:0.0205787291063404 26:0.129988419388934 27:0.0174894174677238 31:0.0228934702338641 63:0.0129829868888305 67:0.101929023871331 83:0.015563158926836 100:0.0371165449770361 102:0.057233057325837 134:0.0430181162129126 142:0.0202483670660566 153:0.312574236673861 154:0.0434198156457661 159:0.0361346966720378 172:0.0471033531218586 174:0.0880578538711608 176:0.0934025953098023 179:0.0327424732934381 180:0.0462864444620022 192:0.0485074760204765 256:0.0408758915630218 281:0.0693339744816167 310:0.0616457228891572 320:0.0570133117299494 327:0.0505138901011015 345:0.0881572848698004 405:0.0571228182825204 507:0.064232632909117 541:0.0619374238762957 561:0.0532269715330434 574:0.0899477130021352 593:0.115705832950305 631:0.0403117057689293 686:0.0710320151654598 755:0.0626900969346451 808:0.0626900969346451 987:0.0490370211904717 1122:0.07336095765149 1289:0.0813440710747443 1305:0.0546294659868671 1557:0.0883886371890227 1689:0.0962080252018784 1731:0.074582307094512 2017:0.0903297811822488 2280:0.0815846691510866 2975:0.0853838547699421 3057:0.107631558977073 4387:0.128277938972961 4810:0.121595600088751 4841:0.74546156893899 4903:0.121595600088751 7826:0.139701472748155 7930:0.139701472748155 8626:0.128277938972961 8700:0.133019133863945 8855:0.124600382507832
++1 6:0.0142894732787166 26:0.0618487797440109 28:0.0527602713605547 29:0.0259482905819441 31:0.0272319104410711 63:0.0154433352655841 96:0.0885342859211242 102:0.0680790406803614 134:0.0511702889988598 142:0.00370546853543854 144:0.084953909971397 199:0.0333971922032047 216:0.0621617526773957 255:0.0664997768945582 275:0.0480454752858271 345:0.0524317908508095 355:0.0430007188032256 382:0.0627543576605838 408:0.0420712826834366 426:0.0643193256276283 457:0.0492665333774512 465:0.121508346001675 513:0.0534654117616068 561:0.063313779301716 574:0.0534966529720355 755:0.0745702197101191 799:0.0720788553505339 952:0.066560564091775 1017:0.0841913742155727 1159:0.0726518689533112 1359:0.0793145886602619 2163:0.0902852156437678 2306:0.20100929030518 3719:0.238335376572902 3905:0.708083481941373 3929:0.248444265723718 4176:0.238335376572902 7592:0.152587323371781 7907:0.33235136093401 8259:0.152587323371781
++1 6:0.0149480029785652 29:0.0271441163254978 31:0.0569737834901793 63:0.0161550406404948 68:0.0458826789511475 75:0.0151473333204142 80:0.0486639643084019 142:0.00387623487754545 172:0.0586118271937767 174:0.0547862452679215 200:0.216609767462195 229:0.0391403468798352 255:0.0695644159658666 306:0.0586490793350709 383:0.447654814377486 404:0.0627642931155378 411:0.0559947768172002 515:0.05399857126391 610:0.0962303737840539 625:0.0830922297197326 952:0.0696280045381906 1064:0.0692493975111957 1322:0.0839703521684585 1330:0.0987041278940621 1576:0.0828480923346686 1829:0.122875157312138 1955:0.112399503946328 2642:0.103745538764432 2796:0.386324218027172 2852:0.128774739342391 2879:0.140828655724198 3089:0.121233697641679 3335:0.109533364124953 4050:0.116344531703242 4535:0.137089733201073 6319:0.620172926452531
++1 6:0.0176610820154908 15:0.0302542309798681 26:0.152884063717583 27:0.0257124175665849 31:0.0673145880687707 60:0.0670247256493164 67:0.0499509990116545 68:0.0542104358159842 142:0.0228988789277747 153:0.153179092609325 154:0.0638345120761401 174:0.0647300092450498 232:0.0783805587357477 465:0.0750891520787726 549:0.0942939298055075 574:0.0661192163815171 764:0.0816709479707576 801:0.106794861614436 808:0.184330204553469 858:0.0885924117528628 1174:0.626260150934097 1424:0.0821155365065742 1557:0.129946326213534 2010:0.129413790592454 3366:0.424326468588064 4459:0.168942033745949 4474:0.166389212153817 5440:0.178766208166242 8419:0.37718076517307
++1 6:0.0576644726785321 26:0.124793867491993 28:0.212911502547412 31:0.219786093578729 63:0.062320826465597 67:0.163092952925902 92:0.190335350337991 102:0.274729649212512 142:0.00747661880026088 159:0.173453472607481 220:0.46259397537499 287:0.267625226936218 373:0.205825720711774 502:0.199016323759425 1013:0.357252331580081 1159:0.293183074742331 1418:0.366007129208101
++1 6:0.0309109297810553 15:0.0423614548000294 29:0.134714964920907 31:0.0471263652636768 41:0.0284667086458094 63:0.0668139185635034 74:0.0506805117873142 75:0.0501169990194908 81:0.0376407072535309 88:0.0944132536401569 134:0.0442765434181804 142:0.0144281777114774 144:0.0367543896759755 161:0.120663214978495 166:0.0461279441883187 171:0.160361361931441 176:0.0320449803530592 179:0.0337003027566411 186:0.0701633601706766 190:0.106011528734172 199:0.0288978674844588 205:0.0489178540257817 229:0.0971258447628325 242:0.0866379894274748 243:0.0582924565158315 307:0.0593689212818384 313:0.0701051525576181 318:0.0746218008093872 320:0.0586811463275474 346:0.0515063769161204 347:0.0507859802621381 355:0.0744151823393614 373:0.132398978529295 398:0.048085724652166 408:0.0728067404283462 462:0.075967573443728 472:0.0563250525105958 475:0.0500949359573031 485:0.0855651543097052 506:0.0345859788201245 508:0.0959316915330136 510:0.0558907040985861 513:0.0925249269272811 515:0.0446653923473126 557:0.058183018770295 586:0.0454451390272826 609:0.0437793429583077 613:0.0571771295928983 655:0.0468114690436231 720:0.0615506310734709 743:0.0784789673419087 758:0.129526951245147 792:0.0678400873563805 823:0.0704388575830351 827:0.0528059647459434 952:0.115186830624065 966:0.0617513765136621 1020:0.0790291601689063 1027:0.0646034480987148 1138:0.121924534355226 1225:0.0551449667926113 1314:0.0720893187447353 1380:0.0636737473984825 1504:0.0863795120648748 1751:0.0842226053069354 1776:0.0716011471631414 1792:0.0729789573829539 1817:0.0878816249001201 1917:0.0769279879500865 1949:0.0769279879500865 2424:0.0866694813775285 2642:0.0858140333111687 3046:0.189518890157775 3266:0.633600151926369 3374:0.103902330458892 3785:0.105600025321061 3884:0.108515085436422 6267:0.143788219202885 7829:0.143788219202885 8310:0.273820798048236 8311:0.136910399024118
++1 6:0.0222985466329023 15:0.0327415005210145 26:0.0689387551446239 27:0.0278262942367657 28:0.0470467154727192 29:0.0809839741885217 31:0.0121414457247986 60:0.120891636127864 63:0.0275418674488828 67:0.0720767798837155 68:0.01955573325369 75:0.00645597024171451 80:0.0207411495326037 81:0.0193951984883513 88:0.0243242479737164 96:0.0592099971991269 102:0.0607065728425958 103:0.0303240051550381 106:0.0222976902176069 107:0.0304714024053397 134:0.0228144583519524 142:0.00660838617332151 150:0.0277803509423583 153:0.110514864159309 154:0.023027497782491 158:0.022864120132169 176:0.0330237553889001 192:0.102902859432539 199:0.0297805177769913 255:0.0296491659527042 279:0.0360666419941116 306:0.0249969220906283 308:0.023536794249081 319:0.0288976721093133 345:0.0233769035134964 355:0.0191720259438454 387:0.022486425211802 405:0.0302948216561265 455:0.023258876141289 473:0.0280465781164473 478:0.0249810447932488 513:0.0476754942670872 530:0.0261867785270182 571:0.0251411307665253 593:0.0613640516906302 613:0.029461767813739 644:0.0303532864212979 719:0.0685741910913678 737:0.037537028580738 757:0.0302657352738633 799:0.0321366182529827 808:0.0332474020600189 829:0.0236314326812149 856:0.0239076152098478 933:0.0740378486941982 987:0.026006556682229 1149:0.0305610488302154 1269:0.0325415114761671 1411:0.0403455136841346 1472:0.0323920984394628 1476:0.0410145083862148 1511:0.0384505165779135 2010:0.0466843981252169 2824:0.0464964242180091 3653:0.0483543068319278 3704:0.0591897628015669 4187:0.0564788692192719 5736:0.0570818979493356 6367:0.0740900279301984 6495:0.925137286953672 8834:0.0705460805055158
++1 186:0.143427256583034 252:0.182408394129025 527:0.241068649672439 586:0.185797019979149 965:0.252463123260795 1038:0.335593089045898 1543:0.354337817151707 1704:0.383663086405428 9210:0.635930948119661
++1 6:0.0149480029785652 29:0.0271441163254978 31:0.0569737834901793 63:0.0161550406404948 68:0.0458826789511475 75:0.0151473333204142 80:0.0486639643084019 142:0.00387623487754545 172:0.0586118271937767 174:0.0547862452679215 200:0.216609767462195 229:0.0391403468798352 255:0.0695644159658666 306:0.0586490793350709 383:0.447654814377486 404:0.0627642931155378 411:0.0559947768172002 515:0.05399857126391 610:0.0962303737840539 625:0.0830922297197326 952:0.0696280045381906 1064:0.0692493975111957 1322:0.0839703521684585 1330:0.0987041278940621 1576:0.0828480923346686 1829:0.122875157312138 1955:0.112399503946328 2642:0.103745538764432 2796:0.386324218027172 2852:0.128774739342391 2879:0.140828655724198 3089:0.121233697641679 3335:0.109533364124953 4050:0.116344531703242 4535:0.137089733201073 6319:0.620172926452531
++1 6:0.0146297124837151 26:0.0379928572932579 27:0.00851964281532518 29:0.042505810900465 37:0.013844026081929 41:0.0134728966678032 59:0.0181685471640235 60:0.0666246245630472 63:0.0189732581727803 65:0.0209327604650782 67:0.0165509395896327 75:0.0118598387592201 88:0.0223422388972282 94:0.017564983915748 97:0.0182574366311048 102:0.0278800141025292 132:0.0177459099509591 134:0.0628664137153555 142:0.0106223530464662 153:0.0253774494838448 176:0.0606657712895947 178:0.0236136598087765 186:0.132829364041641 198:0.0509533749938393 204:0.017564983915748 215:0.0186402030483247 226:0.0226874448280762 252:0.10558135690717 265:0.0276411393657311 278:0.0252599607572872 284:0.0177688151106728 308:0.0432378982944178 314:0.0233488825586506 317:0.017439250989741 337:0.0447386313232517 351:0.0207644471088749 355:0.0176098346080052 365:0.0310016059235205 387:0.0206541671738259 394:0.0272581612050579 408:0.0172292080323638 411:0.0219209880169309 423:0.022168431460398 426:0.0263403198347466 442:0.0248988660302021 527:0.0279069998524211 528:0.0306136921589578 538:0.0256380648507869 539:0.0271837101024018 586:0.0215085512619901 641:0.0231521388967129 713:0.0292579878477027 727:0.0313260239222756 732:0.0320170526612756 757:0.0277995968722073 767:0.0279885056594272 794:0.0341776856789772 800:0.0516055054783715 808:0.0610766178950154 965:0.233808530579289 1015:0.0365663668787134 1038:0.0776989981833226 1046:0.230110598131319 1126:0.0624056516119596 1229:0.0330249014429755 1244:0.0413011802461341 1377:0.0279069998524211 1432:0.034790827277604 1880:0.0408822198149219 1924:0.0403555882327969 2280:0.0397424466341701 2736:0.0382394650034405 2804:0.0382394650034405 3944:0.0508719685445558 8887:0.0624882002589617 9210:0.88341266603217
++1 6:0.0117995828147134 26:0.0510718473903028 27:0.0114525184122277 28:0.0580893061722454 29:0.0571383792156861 31:0.0149912305459559 37:0.0372196269349355 68:0.0482915317246779 83:0.0101911549936382 88:0.030033524630942 139:0.0321769735446853 142:0.0020398691166289 144:0.0467673266228436 145:0.0330057620031033 172:0.0308444818074296 176:0.0203874703947774 185:0.0458078825925683 186:0.0223194617771269 198:0.102741008854105 204:0.0472234120763218 229:0.0205976127186792 252:0.0283855194443666 256:0.0267665805110807 308:0.0290612433558901 322:0.0681742380286973 323:0.033646569341161 355:0.0236719965209912 365:0.0416738671261063 377:0.0302723353773737 382:0.0345464210265002 389:0.0670406921002371 404:0.0330297175475864 408:0.0231603397578842 429:0.0448859066049951 448:0.0356192575818064 510:0.0355584575992542 543:0.0435351499266029 571:0.0310421424309632 575:0.0410510807883302 576:0.0385026350994586 586:0.0289128411469541 608:0.0429182981330283 640:0.0367089864866958 647:0.0355281855783999 653:0.0401795067828452 693:0.0935350456844679 719:0.254008838351131 744:0.0485315032286177 827:0.0335959027299826 880:0.0462654803054719 895:0.0409008421435314 930:0.0344365781611045 987:0.0321106971745107 1057:0.0535836144490644 1192:0.0489426755636146 1236:0.0433463643249416 1245:0.0384628856314699 1291:0.0597038094175846 1380:0.0405101399878739 1472:0.0399950241989276 1598:0.0411524145690789 1636:0.05740985306149 1912:0.0597038094175846 2264:0.320542383072269 2393:0.123116823905425 2415:0.05740985306149 2783:0.0661041343399302 2792:0.0602873011587577 2844:0.0741110986881332 3496:0.0666306762478457 3699:0.0597038094175846 3882:0.0690388343930002 3920:0.0871043350967414 4246:0.155920646794678 4534:0.0704799009570514 5560:0.783939015870673 7012:0.0871043350967414 7100:0.0871043350967414 7592:0.0839996792735751
++1 6:0.0248233972589892 12:0.0669359558643418 26:0.0644655040654039 27:0.101191691115903 28:0.109984950453772 29:0.0360614957734894 31:0.0189226997472824 37:0.0234902606239233 63:0.0214622912306972 64:0.0430599378257527 75:0.0100617660557372 80:0.0969765596078856 97:0.0309788454782842 132:0.0301108974578455 134:0.14222726191795 142:0.0244608600771128 176:0.154404661993963 186:0.112691075608453 190:0.0425669222899587 192:0.0400940702679591 204:0.0298039058575978 218:0.0281615526184567 265:0.046900920570408 284:0.0301497624648978 322:0.0430265091568752 337:0.0379557978120468 351:0.0352326896390228 363:0.0463786006477731 387:0.0700911377964767 506:0.0277746899858419 594:0.0475367375102991 613:0.0459167877532789 717:0.0503116980840021 764:0.0459167877532789 806:0.0532945211102417 808:0.0518167787279182 834:0.0500296553850073 895:0.051627139808201 965:0.198360769002493 994:0.05684014321471 1046:0.16733441218955 1113:0.0602767476889109 1243:0.0660994651742307 1664:0.0589246792075206 1954:0.0703244501115541 2160:0.0768763442164821 2736:0.0648839429898741 2804:0.0648839429898741 3052:0.0889633442658422 3243:0.0965865288711802 3950:0.0910632119155682 4500:0.0922484961835545 8199:0.848229612580095
++1 6:0.0233852875833601 28:0.0431721342934449 29:0.0212327013641281 31:0.0222830486711246 49:0.0528092931406353 60:0.0887483837700482 63:0.0126368141563986 75:0.011848564197065 80:0.0380659811859224 96:0.0362224642026636 142:0.00303207282879307 179:0.0956083265521862 204:0.0701931430170101 240:0.0526305587907913 312:0.0529900414410242 341:0.048847946795986 391:0.0605022409496835 405:0.0555997202267035 408:0.0344256581527883 413:0.0505497649831883 455:0.0426867344169262 478:0.045847409740222 480:0.0430005685730902 507:0.0312599809196063 546:0.0505107826020565 565:0.0621842915207824 737:0.0688912551102194 984:0.067042738366994 1033:0.0700330110136091 1059:0.0535919479684362 1149:0.0560883237433081 1192:0.0727486658507355 1232:0.0661926723699248 1248:0.0752734317895601 1359:0.0649007289911362 1665:0.18903402845875 2017:0.0879212670676161 2223:0.0742153840702509 3945:0.107234486112636 4177:0.104761717762101 5406:0.105950501673203 8157:0.811164615705082 8218:0.118353427736976 8233:0.355060283210927 8778:0.129472369361315
++1 27:0.0824301952103377 65:0.202530970937398 111:0.177040474823198 142:0.0146820815679921 204:0.169946684905274 322:0.245344104534315 389:0.241264721781999 506:0.158375768260663 515:0.204531317863223 740:0.405358169601848 4784:0.462245465456058 6813:0.573097935967924
++1 6:0.00932846504342859 15:0.0639203273874091 28:0.0688860026494896 40:0.0582860422576615 63:0.0403269204872715 74:0.229419522126822 75:0.0378114373092552 96:0.0577970212933066 103:0.0888010769068194 142:0.00725702054123597 159:0.112239275291774 180:0.143771982629323 229:0.146555773977211 255:0.0868248719958979 308:0.0689253502486419 363:0.0871438245120165 455:0.136222984953927 475:0.0755895830763557 574:0.0698474530804937 626:0.0880420081854042 834:0.0940040330750488 896:0.118148148478161 965:0.0931782966852619 1031:0.114629494862079 2503:0.55470193031881 2886:0.346663618592946 2974:0.482179722396907 3079:0.137273555554714 7126:0.206587747509473 7127:0.206587747509473
++1 6:0.0193999731994898 28:0.0716295016917865 29:0.0352284602828621 41:0.0446648959379451 63:0.0628995102379255 75:0.0589760105509383 80:0.0631575739393211 122:0.208810969583638 142:0.0125767389876663 265:0.0916349797536096 317:0.0578140209858445 472:0.176750508138243 719:0.104405484791819 995:0.151814461685456 1245:0.0948566100356253 1534:0.164323606237195 1910:0.118710881830781 1955:0.291750994072121 2369:0.505790336400408 4234:0.617737775183914 7374:0.188710680087724 7861:0.225606898489992
++1 6:0.0188827964772949 31:0.0359855547168811 81:0.0574846679931861 142:0.00489658413875352 199:0.0441326542263463 205:0.0747070605945489 229:0.0988866814172384 308:0.0697597812079606 327:0.0794012588579452 355:0.0568232156428109 394:0.0879563270558713 528:0.0987839164815495 574:0.0706930472932133 671:0.115317897289906 808:0.0985406707852993 819:0.189651012568893 1003:0.0997804038085154 1700:0.135693019548118 1709:0.120409748466338 2195:0.146970141533205 2873:0.272412032081084 3050:0.146970141533205 3185:0.14858976116028 7003:0.836355042927923
++1 6:0.0217372792609427 15:0.0248246272815232 29:0.0263151868382218 63:0.0313233930871678 75:0.0293695253621568 80:0.0943557195016307 83:0.0187742215607852 96:0.0448930589135629 142:0.00375786206514385 172:0.0568219338967748 243:0.273284005596316 306:0.0568580484287981 355:0.0436087281322537 473:0.0637948020570457 496:0.0607594270161872 1273:0.0972812249065944 1298:0.12597857363201 1527:0.188433096789657 1700:0.104137013929572 1949:0.0901625611015171 2033:0.146683764370384 2161:0.192412624158587 2542:0.109470382161166 3087:0.124842204667946 3185:0.114034561831331 4660:0.845786065868825
++1 6:0.0378781390022991 15:0.0432579750005485 26:0.136622523364546 27:0.0183820093962911 28:0.0466184874560938 29:0.0687830081881928 37:0.0298699162672356 63:0.0409367643186802 64:0.0547544685825109 75:0.0127944135825934 88:0.144617064674684 94:0.0378982671438036 96:0.0391140378092698 97:0.0393923054029287 134:0.13564078127173 142:0.0294670593204523 174:0.0925519846652484 176:0.0981695009448596 185:0.0367622604012472 186:0.0716482683265993 198:0.0549685848463441 204:0.227389602862822 220:0.0506441201632148 226:0.0489505056781672 232:0.112069754890685 255:0.0587585873811435 265:0.0596386133267334 308:0.0466451158782254 317:0.0376269853685717 322:0.164135883338614 323:0.0540048512929543 373:0.0450670051375294 389:0.215209020018628 394:0.0588122983859936 404:0.0530147655268838 405:0.0600381450296855 430:0.0491341305622593 473:0.0555825858179672 502:0.0435760392544814 506:0.10595382624839 507:0.0337554084881013 508:0.0489809749651534 515:0.273664032739745 561:0.055943469395831 740:0.180790489782803 772:0.0584925024994054 774:0.0708188449494794 799:0.0636882094681692 800:0.167016312860688 808:0.0658895559576931 834:0.0636170726733823 909:0.111165171635934 987:0.103079360527917 1192:0.0785560598732089 1380:0.0650213120903696 1446:0.131779111915386 1731:0.156777396655832 1954:0.0894236751989118 2376:0.087630165800354 2694:0.0925189359779094 3493:0.117302012987243 3904:0.107834900311134 3929:0.109761526869616 4740:0.103788274042862 4784:0.618486985337668 5369:0.113124655644205
++1 63:0.0554623927735796 75:0.0520028001652496 80:0.167069830553479 142:0.00665381369336155 583:0.403827876529974 784:0.251965884414255 8379:0.568248239941652 9778:0.645595234862229
++1 6:0.0388432556231812 26:0.084062159420414 29:0.141071131790459 31:0.148049691928897 41:0.0894295034565314 60:0.147412177192 63:0.041979813229998 67:0.10986073342172 68:0.119228811349009 81:0.118250051360661 96:0.240663867196013 142:0.00503631095136563 153:0.168448757701598 176:0.100670812242646 192:0.15684640222121 306:0.152403045673935 345:0.142525999039629 355:0.116889396822067 404:0.163096668163035 414:0.143500832460711 453:0.188380252839145 473:0.170996409485191 477:0.2076598300012 505:0.139704135897603 510:0.175583274398261 547:0.243783638105157 561:0.172106645634674 1675:0.286997628953447 1711:0.282360844216937 1785:0.294810041249064 1980:0.241158013090468 2254:0.313021658668157
++1 6:0.028889833868409 15:0.0329930599593022 29:0.0174870407387728 37:0.0683457747413102 63:0.0104075539033663 75:0.00975835911110638 80:0.0627015236868723 142:0.00124859244640461 145:0.0404052836419311 158:0.0345596845486589 179:0.0524947084440417 205:0.0380994868701225 228:0.0364155495856052 229:0.0504307329227322 256:0.0327673476398793 299:0.0398601102551111 341:0.0402306810131076 351:0.0341702675298935 423:0.0364806840147525 437:0.0433094563658061 507:0.0514908160256943 521:0.0474802328140203 546:0.0416001759720378 560:0.0573575476345053 583:0.0757785624184204 586:0.0353947758372292 647:0.0869864125811391 676:0.0481473581694873 784:0.0472815613014792 903:0.0536098143989301 1251:0.063253628015891 1379:0.0508219144309986 1598:0.0503783243379635 1947:0.0668359375226883 2001:0.0630895090529645 2095:0.0714556195976454 2137:0.0679658057308719 2682:0.0708549976878781 3836:0.0815685265134845 4164:0.272177927286844 4400:0.213264300075529 4900:0.0845165667041774 7804:0.106632150037764 8320:0.223977828901135 8379:0.426528600151058 9778:0.726878182196186
++1 6:0.0152120609834458 15:0.052117894732535 60:0.230922253366318 176:0.0788507817132726 180:0.234451022465785 229:0.079663530239198 337:0.116298729172355 345:0.111634009782819 457:0.104894770515721 496:0.127560965380363 499:0.226612741856907 513:0.22766944263341 571:0.120058896436863 574:0.113901237861992 908:0.161802796985846 930:0.13318724956819 960:0.17530504965161 2970:0.24675060667547 3691:0.699503282903985 4771:0.259842398209246
++1 6:0.0385691451573562 15:0.0330353436234322 26:0.0556459643921961 27:0.0280760251439387 29:0.210113424026112 37:0.0152074147079818 41:0.0147997356933988 42:0.0192295552522063 63:0.0138945228643521 67:0.0545427321481672 75:0.0130278204702808 83:0.0166558488737677 88:0.0245425492847387 92:0.02121777764473 94:0.0385896404940302 96:0.059741385467663 102:0.0306256961676039 134:0.0690576295446961 138:0.0269518454004014 142:0.0050007705333762 153:0.0278766737542806 158:0.0461386346498596 174:0.070680299214384 176:0.0499801974397117 180:0.0247681086946236 199:0.0751194678306818 205:0.101728839716271 227:0.0456920846124874 255:0.0598305129459228 284:0.0390374503281493 306:0.0252212604080884 312:0.0873960002821365 323:0.0274950275222466 351:0.0228093732630858 375:0.0227850116670036 387:0.0226882327295203 404:0.0269909536337764 405:0.0305667067023513 408:0.018925976452779 411:0.0240798127372291 413:0.0277904247326015 475:0.0260441704367873 480:0.0236401507462392 500:0.0332619345277884 502:0.0221854957458012 527:0.0613106790611043 538:0.0563259101346218 557:0.0302491345367105 587:0.0814152000983476 603:0.0344110762374281 643:0.0523008468700656 644:0.0612513923352078 709:0.0280296695251128 737:0.0757478196194078 757:0.12214943712139 781:0.0348299941988376 799:0.0648500655124802 808:0.0335457854454222 823:0.0366208994423858 824:0.0359465155478636 1050:0.0379414878581873 1080:0.0324979165774742 1154:0.0873127317008702 1155:0.0748296607333241 1216:0.0344110762374281 1229:0.0362772627674488 1274:0.0895203322245181 1292:0.0385741896192526 1296:0.0981607600987053 1305:0.0292325013774332 1410:0.0443298909153152 1614:0.284306783493085 1625:0.0434007278883708 2114:0.0460221570222816 2246:0.0407076000491738 2306:0.0452125161446931 2646:0.0479056439838901 3170:0.0497691560962486 3184:0.0508729563580725 3738:0.0597209694737174 3930:0.055881946342062 4450:0.0614906626994053 4784:0.0524808305083667 4787:0.0575941872982785 5096:0.343210844182776 5106:0.063706977544092 5795:0.390398494607882 6141:0.343210844182776 6754:0.0711792060137937 8033:0.523284713576581 8784:0.0711792060137937
++1 15:0.105450788249814 37:0.145628925778241 111:0.192483214099402 1347:0.465011537051164 1815:0.400215849436182 3170:0.476598348789827 5086:0.571898695333651
++1 6:0.0302267084411683 15:0.0258898582243751 26:0.0981221453880711 27:0.0440064628215326 28:0.0558022436721909 29:0.0274443780630933 63:0.0326674876902074 64:0.131081996208489 83:0.0195798280864224 86:0.0587032732614979 94:0.0453641560100826 97:0.0471525170561116 134:0.108241177001436 142:0.0274337900396278 176:0.117508711925967 178:0.0609857516905525 192:0.0610266878242485 198:0.0657972948779195 199:0.0353227572419868 203:0.286437116737916 226:0.0585936651913616 308:0.0558341178444663 387:0.0533424264107484 402:0.115195331438015 436:0.0667471164395443 485:0.0522944673284334 575:0.0788696771954799 582:0.06373689159867 609:0.0535128450001247 757:0.0717965502033602 808:0.0788696771954799 994:0.0865156780707726 1243:0.100609177356612 2548:0.105235868101329 2783:0.127003032235854 2798:0.516312708703442 2799:0.645390885879302 2833:0.1141677835393 3900:0.135410004572456 5975:0.147013159453649
++1 6:0.0465197544584178 15:0.0531269599932497 29:0.197109125498686 37:0.0366845153179505 48:0.0474318444127603 88:0.0592034571599471 138:0.130030699421792 204:0.0465444746855768 208:0.0580872078637154 252:0.0559548339742998 275:0.10427553530909 286:0.043443652412102 287:0.21590173751101 292:0.0764548796714273 331:0.0606098780875045 373:0.276743534449629 382:0.0680994849057698 408:0.0456547208333008 475:0.0628257851632187 490:0.0802370402938302 502:0.0535175882391109 505:0.0557711756692832 546:0.133973077205012 586:0.0569943146284116 631:0.0520352439788353 655:0.0587078761776635 800:0.0683732804679934 814:0.0860702401336092 834:0.0781308342511082 866:0.0867129966246282 1026:0.107276415659362 1048:0.105311300606918 1067:0.0824677470797452 1155:0.0902549804855349 1192:0.0964780401777562 1314:0.0904096984150204 1347:0.351414859983661 1411:0.0981980570817945 1415:0.114572092502417 1638:0.116599685196054 1707:0.0886234506963206 1730:0.109441702176974 1815:0.100815990921234 1903:0.130307492496484 1972:0.112721045399058 2013:0.122022166446987 2073:0.112282398486776 2108:0.116599685196054 2275:0.122022166446987 2487:0.138933203752224 2596:0.107276415659362 3170:0.120057051394543 3852:0.301676516460096 4281:0.124961124462828 4335:0.140509748704585 4517:0.138933203752224 5086:0.288127188155335 5730:0.260614984992969 7440:0.171704048549558
++1 6:0.013325664913783 11:0.0199603690761067 29:0.0483962170803702 33:0.0245799644947942 46:0.0371937118956486 58:0.0297965331198064 68:0.109074495266723 75:0.0270067230324561 80:0.0867647247167335 83:0.011509213390181 94:0.0266654921320558 142:0.00345553898934581 172:0.0348337085691337 176:0.0230242546017569 178:0.143392072058873 179:0.0968544018159923 183:0.117230802324806 199:0.0207630602696404 206:0.0423657595454352 208:0.19967018573867 251:0.0502131493350844 288:0.046134658179768 351:0.0315226136080759 387:0.0313551970733112 400:0.0391397576086539 414:0.0656396750664107 441:0.0939659639205114 455:0.129729227877642 460:0.181541322832333 471:0.0463035440057646 477:0.0474935355143559 507:0.0475010942341178 599:0.0416486272951932 658:0.0410816538078751 671:0.0542535338871401 696:0.0980463156529863 852:0.088162915435147 913:0.0463603633724921 1036:0.0502131493350844 1057:0.0605137742774442 1083:0.047619183349761 1098:0.0498286464031741 1146:0.0508547570549513 1426:0.0527197870406471 1626:0.0638394040067757 1726:0.0599799196477033 1819:0.0616572121309281 1949:0.110545212451321 2146:0.0684278117823742 2185:0.0555115890216103 2334:0.444519864849215 2401:0.0601552857248635 2592:0.0601552857248635 2944:0.0730261727901213 3785:0.0758734080082523 4188:0.0740866441415358 7194:0.196739698388268 8372:0.688588944358936
++1 6:0.0154538482330866 15:0.0264731398428215 26:0.0334442577736283 28:0.0570594318236276 29:0.0280626819995292 63:0.0334034648796299 75:0.0469797719344831 80:0.0503107685970351 83:0.0200209488417458 94:0.0463861808550123 96:0.0478742425057613 134:0.0553398900580458 142:0.0100185197981433 162:0.0418490546530072 227:0.109847164852715 228:0.0584385890743137 337:0.0590736163984042 339:0.0601008685452097 363:0.0721826920179178 404:0.0648882570906194 472:0.0703989510655916 561:0.0684728903093436 731:0.0890457129628213 903:0.0860314329911338 1081:0.0859040976429328 3028:0.430720937854771 4181:0.450975810128688 6690:0.171120097570372 6691:0.684480390281489 7591:0.165020871776471
++1 6:0.0295069493811985 15:0.0505467366782536 37:0.0698057082950505 63:0.0318896087399656 75:0.0299004220287158 81:0.179655295306443 96:0.0914091318210502 142:0.0114773725780005 178:0.119067115204418 179:0.0804240712439451 204:0.177135774835106 229:0.077261975114799 243:0.139112004710105 312:0.133722920014076 345:0.108268665221184 346:0.122917368325519 355:0.0887940379840147 363:0.137822696809669 405:0.140308570034905 413:0.127564764920979 475:0.119549035730757 485:0.102098460596868 568:0.207536374451944 571:0.116439573302401 693:0.350851454036774 737:0.173850398041793 834:0.148672489667952 837:0.160097498760137 1033:0.176731674017289 1391:0.186433833907593 1726:0.19921982854708 1746:0.17233408421708 2313:0.270611386955605 2528:0.16974011788059 2935:0.23489152634094 4727:0.28702495760079 5690:0.32672975565428
++1 6:0.0453634771895804 28:0.167493183247378 29:0.0823756526894421 31:0.086450642653301 60:0.172156757466151 75:0.0459683952798846 80:0.14768304756323 142:0.00588170515824538 159:0.136452347218157 200:0.438237904171408 229:0.118781233548168 245:0.26225666018102 631:0.15222562742016 646:0.294930441341106 655:0.171745966815969 777:0.312834207833607 2874:0.433937064981276 4258:0.427379999906658
++1 6:0.0175546378484058 15:0.060143774630316 26:0.075981312158585 27:0.0511148952473556 28:0.129632133872654 29:0.0637550223253768 31:0.0669088798990578 64:0.152255875055987 80:0.114299986550275 142:0.00455217326275922 159:0.105607933402859 172:0.137665131789912 192:0.141768847365901 325:0.315268277951849 365:0.185998858594175 404:0.147418278820842 499:0.130754952253391 513:0.131364665804561 842:0.254224494320699 1294:0.199381009672605 2134:0.478308917035103 4786:0.347952617971805 5414:0.314565986693132 7993:0.364159384463314
++1 6:0.0360662000516493 29:0.0654927036758332 63:0.0389785129437095 75:0.036547139746122 83:0.046724902125302 96:0.111728935181156 142:0.00935249094753347 172:0.141417277478115 174:0.396561002445273 186:0.102331351812105 218:0.102290611142528 339:0.140263442188372 404:0.151436252377749 405:0.171498479577295 473:0.158771210437009 480:0.132636137397366 506:0.100885418195445 535:0.1710061417798 574:0.135023940389522 613:0.166782575684637 716:0.172666684878148 737:0.212496492057882 761:0.183371128430541 808:0.188212987945917 850:0.165305464788257 1080:0.182333783509555 1471:0.208856650042935 1482:0.427285575007345 1711:0.26217376815869 2175:0.280713427829898
++1 6:0.0307751052188546 27:0.0224024313841222 33:0.0425748545286803 64:0.200190283708799 67:0.0870415101986518 81:0.0468441395343224 142:0.00399021649850197 204:0.0461871882971346 215:0.0490144808682639 229:0.0402912782147778 308:0.0568471044344703 387:0.0543102067701137 426:0.0692619656157757 437:0.138407138237636 440:0.347356387858342 478:0.0603353221010309 749:0.0895621619236232 764:0.0711573621287499 882:0.0577766397559774 1003:0.0813108489963127 1146:0.0880853137181903 1213:0.0978934382805912 1665:0.0829231070322105 1791:0.107860812807534 2166:0.579879025172371 3292:0.133768024012065 3837:0.144969756293093 5697:0.545641032142531 5724:0.170386007690754 6098:0.159602315212523
++1 6:0.0240421286534719 28:0.177538976713979 29:0.0436581620848101 31:0.0916357211401508 67:0.203995713890172 153:0.208523546196392 159:0.0723181971517975 185:0.0700015642879584 220:0.0964349742022963 277:0.108863523410562 278:0.207558155016499 322:0.104180831683381 373:0.0858152034985716 387:0.0848564428344354 539:0.111682689644127 764:0.111179113297912 772:0.111379622182775 903:0.133842312220137 1150:0.131171660240692 1236:0.132479963587487 2354:0.350924713599238 6118:0.748107153839511
++1
++1 6:0.0289087459745033 17:0.0196908767159219 26:0.156406277857325 27:0.0210438337574897 28:0.106738243779768 29:0.0918670633256142 32:0.0270886781270908 37:0.0341952579136788 41:0.0499178317427381 48:0.0221066591579332 60:0.0274275489761522 63:0.00781077523789518 67:0.0204407173401665 88:0.0275930793881201 97:0.0225482728343821 134:0.103521582444417 140:0.0510707395945824 142:0.0046852867893606 153:0.0313416207523683 174:0.0529770314341748 232:0.0320745305956329 255:0.0336335902679715 274:0.0390525937355592 284:0.0438896323897466 331:0.0564971458762792 355:0.0869938893027654 373:0.0515929756979373 420:0.0367451336934935 469:0.0417820217882027 475:0.0585626907883505 527:0.0344656623695686 530:0.0297059074383681 558:0.0802298745002329 561:0.0320222083560847 586:0.0265634596973704 598:0.0381898723317035 757:0.583661300851596 799:0.109365961859759 903:0.0402336816799845 936:0.0422832497282302 965:0.0360947339228746 987:0.0295014663524149 1015:0.0903202824802521 1059:0.0331250151313237 1080:0.109611790731335 1122:0.220675702886791 1140:0.0734064191319521 1294:0.0410422519859102 1312:0.046987520231565 1359:0.0401149372501165 1497:0.0438730537395757 1579:0.0907168973565179 1744:0.0496837542746801 1808:0.0726673242881373 1969:0.0493786520055008 1979:0.0533988553327426 2054:0.112502469973899 2062:0.578803065402553 2190:0.0556678289940823 2398:0.210144535715547 2864:0.0533988553327426 2975:0.154104930767555 4238:0.0654876731325986 4787:0.0647528895217039
++1 6:0.0141355841981236 15:0.0242148940246298 26:0.0917740580674349 27:0.0617391465252767 28:0.0521920747942329 29:0.0256688430122031 31:0.0269386390531879 37:0.0668821743899479 41:0.0325446015176895 63:0.0458310593445725 64:0.122601546104145 75:0.0143240810049871 94:0.0424292872050842 97:0.0441019488640267 132:0.0428663250496773 134:0.151857646774786 142:0.0329900657001712 174:0.0518086318282289 176:0.109906395840324 192:0.0570785195319087 198:0.0615404885097471 205:0.0559253999532514 226:0.0548029031610391 255:0.0657836140713149 265:0.0667688536721568 284:0.0429216538563889 323:0.0604615334332315 387:0.0498913972938167 455:0.206421041893965 508:0.054837015278186 546:0.0610639845962411 808:0.0737671430447319 1038:0.0938433284448334 1457:0.0935898250494305 1471:0.0818581042026056 2185:0.0883282836913057 2423:0.0912219199788117 3391:0.412506091637592 4593:0.656631710875465 6831:0.405653686539159 8110:0.156522990954337
++1 6:0.0289647101277303 15:0.0992357127044262 26:0.188050875854257 27:0.0843382892221503 29:0.0525970902045471 63:0.0313035841593436 64:0.37682753620358 81:0.088176915279128 88:0.110585986222058 94:0.0869403052322815 97:0.0903676952441828 134:0.31116596653252 142:0.0187774279574499 176:0.150136791993884 192:0.116957513010406 198:0.126100370937648 204:0.347761220929126 226:0.112294630484977 229:0.0758421578654286 402:0.110385799686529 457:0.0998630831551675 483:0.14061390428548 582:0.122151612584032 808:0.151153562901567 856:0.108691837423105 991:0.153842110777084 1150:0.158028815609724 2578:0.218802306084868 6261:0.269096018949229 6842:0.320725553169536 7934:0.336837497164726
++1 6:0.0161695016590906 15:0.0276990864769444 27:0.0235408554321563 28:0.0597018013651501 29:0.0587244777230855 64:0.0701211168690571 80:0.0526406137830566 92:0.0533712981341371 132:0.0490342036307126 142:0.00838597455103156 204:0.0970685640212466 209:0.101573974583171 251:0.0913937435844595 278:0.139592961183677 284:0.0490974934968674 299:0.0669285384440717 308:0.0597359029599363 309:0.059498285414381 327:0.0679919835169113 337:0.0618092609656551 346:0.202072321885327 351:0.0573748052722821 389:0.0689016679125509 438:0.0901495062880852 505:0.0581554306130303 537:0.0904200350438176 539:0.0751120444250528 565:0.257979894751465 643:0.0657788986600919 723:0.0829754937934637 772:0.0749082168068835 827:0.069056976012795 856:0.0606770389826867 1098:0.0906939037450585 1237:0.0991439724509621 1262:0.249093074897588 1487:0.121584399477793 1588:0.144872690842494 1688:0.108855737047762 2291:0.13696054094291 2341:0.112589933314916 2754:0.113341974250914 3050:0.125851801146902 3148:0.144872690842494 4130:0.141910552871493 4160:0.139297762010856 4784:0.132010529014326 5193:0.167712823873143 5211:0.13809838435169 5824:0.15728669433661 6754:0.179044511103966 7090:0.376077954533685 7722:0.480746496922831
++1 6:0.0242923294433093 80:0.158169764174159 147:0.312772207199468 204:0.145831429162654 220:0.19487710068808 339:0.188948419385073 916:0.588717781016531 995:0.380199176524505 1046:0.272924143950457 5477:0.464750182008055
++1 147:0.36548778701912 204:0.170410302116462 387:0.20038064850717 742:0.291337965245097 916:0.343971033886199 995:0.444279102988885 1046:0.318923609900304 5477:0.543080592293579
++1 6:0.0660475591935363 27:0.0961573260204772 29:0.119935929390391 31:0.125868965337487 41:0.0760312225176722 42:0.0987886962703321 47:0.078152078096731 63:0.142761679203182 68:0.202732027704935 75:0.133856595498258 80:0.107510550668883 83:0.0427833502630387 142:0.0513812820795892 144:0.0981666414169981 169:0.12035893395462 174:0.121036160566512 176:0.085588364363175 180:0.254484218166513 186:0.0936990313158246 189:0.12356158548514 204:0.297371953532987 229:0.172941120035126 255:0.153684739287842 345:0.121172829197277 404:0.138661611545479 498:0.169664134775884 507:0.0882882210798903 530:0.135737654041705 553:0.211077569133424 561:0.146321718954646 579:0.193884557774778 582:0.139269749760171 636:0.168872750169623 684:0.154534244490191 808:0.172335988329076 823:0.188133883738427 1001:0.193545188272275 1482:0.195620617554851 1707:0.18873796757782 2731:0.241011529469681 4071:0.251849978075879
++1 174:0.199993319951885 204:0.163786877049189 278:0.235539645619139 389:0.232519953801046 1038:0.362256985925487 1543:0.382491039984551 2376:0.378715763897119 9640:0.634568300470963
++1 6:0.0157122733513238 17:0.0428089738324386 29:0.028531956823793 31:0.0299433864624089 63:0.0169810251515995 75:0.0159217951732578 81:0.0956653658905956 142:0.0162976852646507 158:0.0563877812213207 159:0.0472621745895149 162:0.0425488704356977 199:0.0367225441293929 229:0.0411415377775523 255:0.0731211467343314 317:0.04682427609192 324:0.0832391113534508 339:0.0611058980903232 365:0.0832391113534508 408:0.0925206242202849 436:0.0693922026575926 515:0.227037769124375 829:0.0582801371000452 1010:0.437350416405896 1064:0.0727900218290447 1190:0.170035837303023 1273:0.105476116353054 1817:0.111677335716659 1946:0.109406204727201 2161:0.104310653741429 2537:0.472585330118103 2581:0.36687919202473 2589:0.127432206126081 2734:0.260149996350624 2837:0.236292665059051 3535:0.137897719123633 3636:0.136590906448393 4540:0.150300157850841 4778:0.130074998175312 5153:0.12434755189313 5620:0.14237355329201
++1 6:0.0213711237689241 11:0.096034724141457 15:0.0732194000613626 63:0.0461936451999761 75:0.0433122117548295 81:0.130119705095067 142:0.0138546091147146 158:0.0766961103966746 179:0.232996337012093 180:0.0823439017290237 218:0.0606125765396758 229:0.111917718872153 255:0.0994560775543914 312:0.0968520682176557 317:0.063688263141526 345:0.0784162068008451 346:0.0890258853227614 386:0.0851028982667493 430:0.0831655102269505 480:0.0785938996759241 507:0.0571351469479018 531:0.601180150087555 641:0.507310611634787 1033:0.128002201465099 1064:0.0990056964303093 2202:0.1498033403255 2216:0.14557405219649 4619:0.3620396885026
++1 6:0.0177777108780408 15:0.0121816085951201 26:0.0153893667457476 27:0.020705772163824 29:0.0129130360160237 31:0.0271036459376923 41:0.0163719732644466 60:0.0539738706033267 63:0.0153705959059039 75:0.00720591005312963 81:0.0216481877296478 134:0.025464636396989 142:0.00553202321785959 147:0.595124979531625 171:0.0307427173130333 176:0.036859868004251 192:0.0287140709110439 198:0.0309587208193321 204:0.0213445893744801 205:0.0562679590555404 220:0.0855694492585043 232:0.0315592648387278 286:0.0199225993617521 292:0.0350610469510272 339:0.0553107988845557 346:0.0296227089795072 365:0.0376724824549216 387:0.100393992801082 394:0.0331235292224615 414:0.0262708804328154 415:0.0618689657885149 457:0.0245172420078548 478:0.0278828983210349 505:0.0255758143503493 506:0.0198913308740086 510:0.0321442539992361 561:0.0315077831370726 574:0.0266223397022272 586:0.0261367273052573 599:0.0333379501576117 607:0.034878006688169 613:0.0328841120580526 664:0.120580454519539 742:0.0364912752346588 800:0.031354948264734 806:0.0381678050669886 844:0.0389613935882598 856:0.0266847767782222 876:0.0686286806833684 916:0.17233513194522 987:0.0290275359438447 995:0.0556477801117873 1046:0.119839471157618 1080:0.0359503056256564 1086:0.044828885622029 1127:0.0409743622716002 1198:0.0423547980163935 1216:0.0380667082055589 1339:0.0429170138001182 1380:0.0366204924856511 1471:0.0411797542752181 1472:0.0361548363836481 1591:0.0421999414344166 1778:0.055056340861904 1936:0.0478729861056212 1980:0.0441491050517048 2185:0.0444346598713917 3719:0.059303199412296 3950:0.0652165147328691 5477:0.680230719374807 5563:0.0737573774682231 5564:0.0737573774682231 6275:0.0704748351401837 8807:0.0787408695658093
++1 6:0.0409486489985813 15:0.0467645898490248 26:0.0590790139316581 28:0.100795030060399 29:0.049572503358624 60:0.103601503102802 63:0.0295034768052981 134:0.0977574732812203 142:0.0283162161820589 158:0.0979702686094165 228:0.103231300315781 337:0.20870614201202 404:0.114624587294042 480:0.100394471407844 507:0.0729834363773306 513:0.102142154441832 561:0.120956813211637 579:0.160274622297554 731:0.157298539925535 808:0.142461502631911 1064:0.126468143207955 1175:0.144622787445718 2442:0.237318218672753 3028:0.253621697536412 4181:0.265548387506673 6690:0.302282284055303 6691:0.604564568110607 7591:0.29150805046073
++1 6:0.0278753901557114 15:0.0382014416414632 26:0.0723914240528455 27:0.0162332901435247 29:0.0202475965275167 37:0.0791350401703078 41:0.025671198361598 63:0.0361515631069316 68:0.0342252427695261 75:0.0112988424401741 94:0.0334682434993372 97:0.0347876398734244 134:0.0798569264185969 142:0.0173483871580754 174:0.0408666753465257 176:0.0866942213838967 192:0.0450235654688699 198:0.0485431688860796 204:0.0334682434993372 226:0.0432285581089015 232:0.0494848198647222 252:0.0402348510981727 255:0.155670445513026 265:0.105334612013166 278:0.0962604374092977 317:0.0664573450645092 322:0.048316542545435 323:0.0953841771371653 363:0.0520807677709963 389:0.0475131742693334 394:0.103875162189833 404:0.0468177364147403 414:0.0411926511136668 502:0.0384823265657968 506:0.0623790782326462 527:0.0531738754146774 549:0.0595315752531652 561:0.0494040967317292 586:0.0409822994662052 599:0.0522737923915152 806:0.0598469884524693 808:0.0581875602514408 856:0.0418416391746938 987:0.0455150775735182 1059:0.051105515072228 1126:0.0594537277660503 1297:0.082384143681994 1709:0.0711010939737901 1792:0.0658122199693154 2376:0.464321133591416 9640:0.778006887233504
++1 6:0.0190840109347916 15:0.0653835449421606 28:0.140925781647542 31:0.0727380312060518 60:0.14484962994578 96:0.118240137174213 107:0.182550733190262 186:0.108294892955595 245:0.220658083581216 345:0.140048390925354 363:0.178277314879195 571:0.1506176773097 737:0.224880102269162 903:0.212481031672545 936:0.223305155023677 1014:0.234028814772916 1844:0.248149221191068 3298:0.291081626283472 4856:0.345851728403253 5294:0.350043008582281 8894:0.422633607363095
++1 6:0.0255107953889721 27:0.0185703294657037 28:0.047096084687407 29:0.0231625588577684 98:0.0413701062888459 142:0.00496149059087309 172:0.0500145180951036 176:0.0330584093887216 186:0.21714687221418 198:0.0555317271824516 314:0.0508937347690455 408:0.0375546342176004 411:0.047781342306498 442:0.0542722453893887 527:0.0608290972864011 528:0.0667288948464885 555:0.0734971293038885 586:0.0468823508124839 640:0.0595238487180394 641:0.0504648911306832 693:0.0758338276538225 727:0.0682815697438331 761:0.0648521792001558 772:0.0590917466785009 800:0.0562424540412472 808:0.0665645814940211 880:0.0750197625741703 963:0.0541109608977625 965:0.318521381916036 1017:0.0751528373102761 1046:0.0716533999886547 1080:0.0644853053128432 1126:0.0680130338839668 1309:0.150573863572205 1598:0.0667288948464885 1675:0.0942446464886701 1785:0.0968100963765629 2194:0.0972767705250737 2264:0.086626909574438 2280:0.086626909574438 3944:0.110886012115669 5107:0.114283595482822 5351:0.124076448403504 9210:0.802325511076747
++1 6:0.00858448929765018 26:0.111468108885999 27:0.0249959739979075 33:0.142511311185335 37:0.0406173032686046 41:0.0395284382320727 48:0.052516806952596 67:0.0971183568586278 72:0.0534232993823828 76:0.214257012324942 85:0.052608191254739 110:0.0828484301043985 142:0.015582581705682 176:0.0444971718470992 194:0.0680144765320368 207:0.101519356340568 229:0.0899116462254043 303:0.0767004388572469 323:0.0734361423486117 355:0.051665894628512 398:0.0667711051673483 423:0.0650404657061146 426:0.0772804639769118 437:0.077215306883269 480:0.0631401977662617 671:0.104851551654762 676:0.0858406765782185 712:0.157662180890213 780:0.174186692496916 789:0.0882079499659202 795:0.101702659011429 808:0.0895970397982974 1011:0.206054689530299 1042:0.195620650476475 1128:0.516399329099443 1171:0.14213441998624 1215:0.100623648632734 1241:0.321152497478326 1558:0.206839850183378 1769:0.263163045528813 2787:0.323505979922645 3807:0.178079568804553
++1 6:0.00575681589278553 15:0.0394467422949836 29:0.0209076330105527 42:0.103327058924339 80:0.0374831987307305 96:0.0356679056187662 138:0.0482738659541185 159:0.0346327525903946 174:0.0421988579901514 179:0.0941445824544647 245:0.0665629445912814 346:0.0479624410056165 351:0.0408542202228297 471:0.0600107341170578 535:0.0545913278001056 586:0.0423182512553293 998:0.0637201789913509 1080:0.0582075195721385 1916:0.0703116984542046 2007:0.310942852226836 2823:0.0830505120126701 4355:0.108472636056499 4784:0.0939992248947812 5114:0.106967149454683 6483:0.0927835749345129 6831:0.440547497135287 7217:0.127490173633131 7388:0.114106549982649 8315:0.535579040401313 8316:0.535579040401313
++1 31:0.119541300923265 67:0.177411986779731 274:0.338950836618281 278:0.270765281913992 387:0.221395094444331 764:0.290072379499267 2354:0.457790873120507 6118:0.650617476003702
++1 6:0.0193883363307221 28:0.0715865354926835 29:0.0352073288635048 31:0.073897956665203 67:0.219344832450031 153:0.168160012152114 159:0.0583196916304678 185:0.0564514852929051 220:0.0777682268000268 274:0.104766193953881 277:0.0877910037190741 278:0.16738149003553 322:0.084014732347755 373:0.0692041063293867 387:0.0684309312713514 415:0.0843427146899536 539:0.0900644689307615 720:0.0965163734214197 726:0.0893378948383602 764:0.089658368967262 903:0.107934692556051 987:0.0791434332564372 1236:0.106836051338785 2354:0.282996837430275 6118:0.804396500222264 7392:0.196249548326366
++1 28:0.314065747971827 159:0.255861209756145 245:0.491756336248595 4781:0.770761605849939
++1 6:0.0146379186248927 11:0.0328889695353966 15:0.0250754155806298 17:0.0398818338608909 28:0.108093635607039 29:0.0531620667305215 92:0.0483159429068222 142:0.00189791274425902 144:0.130538235745887 158:0.0525321660653521 159:0.0440305390701788 161:0.071425315187205 179:0.0398970762833779 180:0.0564005592685918 204:0.0878741825898741 218:0.0415159246011668 245:0.0846251629812821 252:0.0528202899555701 255:0.068121357853401 256:0.0498077389947142 318:0.176686346160997 351:0.0519402359084186 387:0.0516643814244357 411:0.0548332100043428 478:0.0573959717661984 502:0.101039153464775 731:0.0843442927991663 780:0.148507997500038 1018:0.158843540796054 1058:0.0821033332247227 1064:0.0678128742043527 1620:0.44257041909936 1746:0.256476425449025 2833:0.110576295681373 3874:0.120326210553686 4111:0.123987572122637 4425:0.127251259495397 4781:0.663192537714375 6060:0.135993269405803 6607:0.156308128308206
++1 6:0.03978060460099 15:0.0681459719773409 29:0.144475400538293 63:0.0859857045725763 75:0.0806221511251845 80:0.259015458485685 83:0.0515370306215998 142:0.0257892253609591 158:0.142763556802778 204:0.238810462185405 229:0.104162854757591 408:0.117122655876969 521:0.19613740700699 664:0.224849129749997 881:0.453253972284832 1017:0.23438119118583 1109:0.275206999093542 1226:0.314825276034605 4126:0.327003416799411 4402:0.394248107962897
++1 6:0.0187773804190207 15:0.0643330011032867 26:0.162547358192032 27:0.0546752283599602 31:0.0357846599321692 63:0.0202936368307058 64:0.162861034881262 94:0.0563620757084458 97:0.0585840004511419 134:0.134482771189886 137:0.0768606592570394 142:0.0389539857563679 174:0.0688213783875146 176:0.048665697770293 179:0.102359167061589 192:0.0758217743237966 198:0.0817489498646463 226:0.0727988986021662 265:0.0886941882253753 286:0.0526071986598457 317:0.0559586270785671 457:0.0647397158111251 808:0.097990552633765 862:0.0903399788642294 991:0.0997334972726273 1607:0.121474887953072 2161:0.12465928915974 4887:0.306603378988438 5829:0.365308981894108 5869:0.601531665062754 6556:0.179620299233549 8291:0.415842982402195
++1 27:0.0905956384882189 111:0.19457790696647 134:0.222834963603646 142:0.0161364722065045 176:0.161275959670362 204:0.186781414124548 515:0.22479196228243 693:0.369956496894239 1731:0.386338295350388 3350:0.498360078998627 4784:0.508034986140899
++1 4:0.0341443594725359 6:0.0236811577334933 15:0.0270445950144837 26:0.136664772281333 27:0.0459692345440416 63:0.0341245196117181 64:0.068464250951576 94:0.0473874834243575 97:0.0492556087655769 134:0.113068938830218 137:0.0646220560677888 142:0.0266104327520104 174:0.0578628783022461 176:0.0409166077976609 192:0.0637485938694035 198:0.0687319790475541 218:0.0447761818295734 226:0.0612070538116233 274:0.0853084975708934 286:0.0884609987535202 308:0.0583244254181695 317:0.047048276341924 322:0.0684111001833546 389:0.0672736159031243 457:0.1088622862567 496:0.198578703115663 506:0.0441610796789315 800:0.0696116502921883 1031:0.0969991360172665 1038:0.104809660121587 1227:0.0862554867507872 2161:0.104809660121587 2845:0.129775461690283 4281:0.127224407497853 5643:0.4794033309273 9888:0.734383495477712
++1 6:0.0186763857238375 15:0.0319934920783724 26:0.202091365531347 27:0.0815717340440484 28:0.0689578376756345 29:0.0678289919201463 64:0.0809925409974851 81:0.17056888272959 142:0.00968611764836289 176:0.0484039478774694 178:0.150726755372364 186:0.052990883302029 189:0.0698794583584015 204:0.168176791858696 218:0.0529697863065438 256:0.0635492360174479 322:0.323718656628689 373:0.0666628926502099 389:0.0795840313499762 423:0.0707509080078838 515:0.202401246555888 643:0.0759771148033135 740:0.133712202261845 834:0.0941020614395053 852:0.092672558509733 909:0.082217487944826 1057:0.381654775799455 1201:0.11909353098052 1243:0.12432817865877 1731:0.347856532667972 2139:0.279603793050696 2268:0.150505232978284 3350:0.149573410304711 4784:0.457431455488294
++1 6:0.0293406790951005 15:0.100523816340444 67:0.165969019474021 80:0.191040069006635 590:0.493120872911408 1046:0.329642315433068 2142:0.381516584304229 3467:0.424908754620377 3962:0.497048748343836
++1 6:0.0279393822610455 15:0.0957228468356681 26:0.0604646744474799 28:0.20631822614968 29:0.0507351947443324 37:0.0660972553571119 63:0.0603909239976395 67:0.237063627440881 75:0.0283119515350233 142:0.00724508873410287 162:0.0756599079775109 232:0.123996049077377 411:0.10466009916917 493:0.124712523897526 590:0.234784827653715 609:0.0989268041040311 613:0.129201361104349 1041:0.199299818090456 1046:0.156949377866284 1457:0.184982938175807 1518:0.179003250582257 1576:0.154851756763489 1676:0.189747305310559 2142:0.363295534273581 2866:0.191476784537548 3467:0.404615315239445 3962:0.47330993728334
++1 6:0.0261154360637205 11:0.0391180286903481 26:0.113034806918294 29:0.063230781656585 63:0.018816155868608 75:0.035284910894776 94:0.0522586271970611 96:0.10787015207267 102:0.0829474863296985 142:0.00225737097362683 228:0.0658368588244491 306:0.0683099623750156 346:0.072526206898033 351:0.0617775402255231 473:0.0766438639499832 505:0.0626180679303279 587:0.220507189786952 909:0.306575455799933 915:0.10786306820153 1235:0.102037926437308 1317:0.1129102561779 1418:0.110506352094081 2216:0.592969886809335 3237:0.557734584039951 4332:0.166543019161092 5478:0.152800255213767 6263:0.164026448205325
++1 6:0.0253841413120028 31:0.0322502516059167 48:0.0517636713813121 58:0.0567595997809172 63:0.0182892584428617 75:0.0171484244442445 83:0.0219239715974074 118:0.221625098509932 142:0.00658247754106159 171:0.0731606641168595 174:0.124047945296699 254:0.081660313321271 256:0.0575822614071696 355:0.0509249618619396 414:0.0625187110114226 582:0.0713676236046872 586:0.0621994571274678 842:0.490147431467909 884:0.174711443042623 1725:0.122067821994317 1943:0.101549845224334 2254:0.545493995623995 4226:0.50314216110586 4604:0.141128105530826 4692:0.171292890810147
++1 6:0.01642637276635 15:0.0562782365654234 29:0.119314767013404 31:0.062608537532472 37:0.07772098503712 102:0.469558959093373 159:0.0988203400229513 179:0.2686300958951 213:0.169586706993003 220:0.131775090034011 252:0.118547697206268 278:0.141810555718182 325:0.147502736876814 448:0.148758276937506 457:0.113268057734389 527:0.156671152244659 574:0.122993471673946 613:0.151922451226051 871:0.377354401341942 1123:0.186566468399739 1448:0.206186677692508 1649:0.186566468399739 1868:0.25852005649868 2134:0.223783613098043 4195:0.314262152203602
++1 6:0.00869644320567049 11:0.117236772380144 17:0.0947757975698586 28:0.128437681208649 33:0.0481232868924867 41:0.0400439450938765 63:0.018797346189564 75:0.0176248190647586 83:0.0450660681792141 88:0.0664052734712139 96:0.107762319051245 107:0.166374048806314 142:0.00451022875935347 159:0.0523174219164881 169:0.0633903596869833 176:0.135232434113646 237:0.298932487391144 298:0.0862115045810749 351:0.0617157839501242 475:0.211404720852842 909:0.0765672464680885 1036:0.0983085956751206 1274:0.121108489457116 1746:0.203164828248904 1892:0.115467909159341 2216:0.118475424206467 5076:0.161588238607889 5478:0.763237537774339 6770:0.180401978790165
++1 6:0.0264384981103107 11:0.0297014548719019 15:0.0226451705475508 26:0.0572165542596512 28:0.0488087386937884 29:0.0480097354279902 31:0.0755770487854962 37:0.0625465568468275 41:0.0304349071699656 59:0.0410422539402106 63:0.0285733828162985 65:0.04728653661304 67:0.0373881224213616 75:0.0133955266112228 92:0.0872665710183408 100:0.0408436539884215 120:0.0550675464314401 142:0.0102838314220361 158:0.0474408831214387 176:0.034260581876307 190:0.113341204145342 203:0.0501077858632068 204:0.198394104882902 209:0.0415205024819692 232:0.176002601556564 252:0.0477010827824107 274:0.0714311113038899 296:0.119205639578838 309:0.0486423558270412 331:0.0516694735152246 355:0.0795602749413018 377:0.050871824934653 404:0.0555055296453188 430:0.205770291609606 466:0.0610755037176016 485:0.0457405800017387 505:0.0475445154335504 507:0.0353413206284208 530:0.0543350845012123 534:0.0503791466157876 609:0.0468062625530939 613:0.0611303769978033 661:0.088243606717584 678:0.0715283533881861 719:0.0711424748887585 749:0.0769417044047128 834:0.0666059592667669 863:0.0698531073167449 991:0.0702122399487114 1118:0.0851012191759812 1123:0.0750703958261908 1238:0.105232484305036 1245:0.0646358188072989 1272:0.250569645566508 1338:0.167046430377672 1558:0.079628135096328 1560:0.100814250378726 1819:0.0917472465890514 1820:0.0842950595564091 2123:0.107924170932138 2146:0.101822043264222 2196:0.102347749790726 2344:0.328309040636081 2703:0.102347749790726 2913:0.0972643039940849 2992:0.101311147359424 3209:0.121235146172263 3787:0.121235146172263 3880:0.119783523221097 4839:0.53522315933362 5760:0.131010173951846 5880:0.141159144985101 6466:0.141159144985101 7130:0.146376433494547
++1 6:0.0070545768221264 17:0.0384411838853215 26:0.0610683066546295 28:0.0260472433244717 29:0.0384312715541095 31:0.0134441347467956 33:0.0195188662932285 59:0.0219025855528095 60:0.0267724862870984 63:0.0152484549844375 67:0.0199525238352098 75:0.00714864900096999 83:0.0182788544996276 88:0.0538681265452906 94:0.0423499534085141 97:0.0440194875437926 102:0.0336099737959979 132:0.0213930870423687 134:0.0505245683604773 142:0.00640274079902958 148:0.0310060127476004 150:0.0307609810106475 153:0.030593076783412 176:0.0914174117639843 192:0.028485897384032 198:0.0307127104036371 204:0.0211749767042571 226:0.0820506499780373 240:0.0317538382932068 242:0.0247159482285002 275:0.0237195934201631 306:0.0276789104410492 307:0.0338733434254533 322:0.0305693264975227 345:0.0258850756262389 404:0.059242097838078 457:0.0243224181669976 473:0.0310557724286415 485:0.0244098915274649 493:0.0314893891459808 498:0.0362438426900479 550:0.0287377976422344 574:0.0264107879105644 609:0.0249786030628303 643:0.0286986144444098 730:0.033906774327927 755:0.0368146070416338 757:0.0335130290457576 834:0.0355448977849149 876:0.0340416648270522 882:0.105953104831798 886:0.0303813936674444 952:0.0328603163707142 963:0.0299269328730816 997:0.0335452361857726 1011:0.0423329969451065 1025:0.0429950147229173 1038:0.140501791891841 1056:0.103910693011112 1057:0.048053782554088 1154:0.0479103986479737 1179:0.0439862113812401 1232:0.0798726619257393 1359:0.0391568567927947 1462:0.0433438177567989 1538:0.0448802222329638 1863:0.0424943046231989 2146:0.0543382928482765 2241:0.0492844204328111 2284:0.0523460079542496 2402:0.243247772048892 3564:0.0602508155143309 3929:0.122654567063382 5123:0.878055261081223 5124:0.0731712717567686 5743:0.0655403948402807
++1 6:0.025441811293251 26:0.220238346406887 27:0.111120679081023 31:0.0484852809535236 37:0.0601886570750022 63:0.0549924288882797 64:0.220663352608838 88:0.0971357137955974 94:0.0763659926076629 97:0.0793765185037147 134:0.182213131462188 137:0.104139893055139 142:0.0593768898640302 174:0.0932473264536381 176:0.0659380313705524 192:0.102732289127586 198:0.110763126137178 199:0.0594623080350994 204:0.229097977822989 226:0.0986365403087161 255:0.118400079680656 265:0.120173354817497 317:0.0758193527847035 323:0.108821177996524 457:0.0877170082349138 808:0.132769166571513 856:0.0954719451581152 862:0.12240326622833 991:0.135130713688682 1281:0.164588515927402 1607:0.329177031854804 2161:0.168903118538317 4268:0.657531836671034
++1 6:0.010200042920367 15:0.0349462682124096 26:0.0441485977583841 28:0.0753221650471085 37:0.0482612561195383 42:0.183076974406001 74:0.167236443264025 75:0.020672119241464 96:0.126394234231791 102:0.194383410325245 134:0.0730522579601803 142:0.00529003936874813 158:0.0732112757691144 176:0.158613883810047 194:0.161628853104394 329:0.136945289815002 351:0.0723863343056043 404:0.0856567241206734 535:0.0967260195586122 561:0.0903886733585956 609:0.0722319225534731 871:0.234320208400608 993:0.112089426965832 1274:0.142047933996501 1620:0.123357353891052 1829:0.167692216843665 1868:0.160529394381215 2596:0.14113024328794 3691:0.312688881816552 4202:0.634779489635139 4355:0.192194012118439 7555:0.206490519030214
++1 6:0.0215803181552368 15:0.0246453729737476 26:0.0622703775642034 27:0.0418911405420879 29:0.0261251694596252 31:0.0274175392300165 63:0.0155486061619772 67:0.162762160687237 92:0.047487325970253 97:0.0448859688387466 134:0.154557287753294 142:0.0111921815939971 153:0.0623905441795745 172:0.0564116326136326 174:0.0527296569362456 176:0.074573500505654 186:0.0408201793035803 192:0.0580932297792592 284:0.0873693824028182 308:0.0531502585688749 405:0.0684110838239555 561:0.0637453634243492 593:0.13857091920316 808:0.0750785343803711 987:0.058727420460012 1482:0.0852225318867041 2335:0.106299022284112 4900:0.631327409902092 7226:0.142582039451586 8699:0.637222279331474 8721:0.159305569832868
++1 6:0.0308382602955863 15:0.0528273323900328 26:0.0667382461028505 27:0.134690426959967 63:0.0666568436026862 64:0.26746813845181 94:0.0925639425047791 97:0.0962130294404123 137:0.126228950139285 142:0.0679728852397129 174:0.113025967054775 179:0.336210756457511 185:0.0897893232219493 192:0.124522780094604 198:0.134257033652209 204:0.370255770019116 226:0.119558284181723 265:0.145663260910943 286:0.0863972742465507 317:0.0919013552009881 337:0.117881807276669 457:0.106322615992986 546:0.133217490361277 626:0.145525676128263 719:0.16596329712361 723:0.158249767352542 808:0.160930763567392 834:0.155380377549112 862:0.148366157639904 991:0.163793217182039 1241:0.1922805960149 1607:0.199499298117186 2161:0.204729068783031 4438:0.286502196647829 7708:0.294992028628463
++1 6:0.0259229620868932 26:0.112201726484393 75:0.0525372851404557 81:0.157833917318001 142:0.0134444032309323 308:0.191537325058644 507:0.138608738049913 582:0.218647561664162 1782:0.319200577480715 3787:0.47548451272985 3880:0.469791244289178 6466:0.553626480354417
++1 6:0.0223592925203947 28:0.165112081851627 204:0.134227044422579 1227:0.244322302328424 3393:0.427768168247317 3787:0.410118923655696 3880:0.40520831760553 3929:0.388750369168975 6466:0.477518594510451
++1 4:0.0141015884975091 6:0.0456413812144979 11:0.278346187839674 15:0.0111693924228625 26:0.183437874788476 27:0.0189852508320435 31:0.0248515009495281 37:0.0462752336080319 41:0.105080946321268 60:0.0742334647319309 63:0.0493268812874764 67:0.184411334152383 79:0.0221084173245629 80:0.0424536508243836 85:0.019978811525307 88:0.0995753035210143 94:0.0195709862919034 102:0.0310640406183053 111:0.0203879040524277 142:0.0135262570029627 144:0.0193819689853282 151:0.0257463865564841 153:0.0282756715493781 159:0.0392252218419787 162:0.0176567085249619 168:0.0242126540169247 174:0.023897314569806 176:0.0844926035793247 180:0.0251226137135867 186:0.0369997728903486 190:0.0279519287373178 199:0.137150369965961 228:0.0246560679195901 232:0.05787377107191 255:0.0303434324267248 274:0.0352323296342144 283:0.0244387669508305 286:0.0182671548356939 294:0.0311545484729108 296:0.205787409565976 327:0.0548342376663792 337:0.0249239949363368 345:0.0478485967018002 363:0.0304548994971356 364:0.0302060239390697 398:0.0507148143153368 422:0.0297281295911578 423:0.0247001688305261 430:0.0253732813706178 436:0.259164131812539 459:0.0297799854850747 480:0.0239785113450203 485:0.0225608584671936 493:0.0291040888461759 506:0.0182384845654788 538:0.028566050396199 543:0.0360848903104449 557:0.030682089274788 594:0.0312153998412496 597:0.029152440945796 607:0.0639597210147499 609:0.0230864904817236 633:0.0339013970284337 656:0.0321816386113857 662:0.067968445548693 712:0.119749526510881 717:0.0660752022388621 726:0.0300438723693397 730:0.0313383587071958 747:0.0359284119765095 776:0.040654285102564 789:0.0334983956941132 796:0.0286573278887185 800:0.0287495464028994 1009:0.203391976937354 1179:0.040654285102564 1239:0.043646546237123 1242:0.0413849046176846 1265:0.0837476609874201 1267:0.0437699291125803 1509:0.0823931588330825 1561:0.0868095432194662 1627:0.0435248420923921 1720:0.0423910332999322 1815:0.127173099899797 1863:0.0392753892899158 1912:0.0494865738967574 2090:0.0525435611939712 2227:0.0863387204338689 2643:0.047396861801893 2651:0.0572240768765575 2659:0.0507485384149343 2866:0.0446848253487348 2951:0.0532319866843976 2989:0.0502222032785167 3118:0.0481751887188953 3472:0.103808704851003 3887:0.680181390750963 5239:0.0572240768765575 5376:0.0605757534895988 8232:0.0659977089579484
++1 6:0.035567496927282 15:0.121857456578244 26:0.0769729660636875 27:0.103564020821641 29:0.129174214827939 63:0.0384395399950655 67:0.100595875286881 142:0.0184463399283794 176:0.184361930927872 192:0.143619113268375 204:0.106759191635951 284:0.215996137160518 345:0.130506389116223 355:0.214063584300569 377:0.136874906395902 404:0.298684554148275 546:0.153647210759263 553:0.227336206916362 608:0.388106035850828 712:0.163307592913425 772:0.164773029328898 1080:0.179812574527635 1155:0.207018100920583 4785:0.547921473575299
++1 6:0.0357291186666192 11:0.0401386947647968 28:0.13192074750103 29:0.0973208951073524 31:0.034045067326483 42:0.05344077956947 60:0.0677969326630598 63:0.0579213188145583 75:0.0362055634096388 142:0.0138976212526286 161:0.174339236849189 179:0.0486916005447602 192:0.0721358653836614 264:0.0735310374226199 276:0.0693895010289107 304:0.0676351594834362 375:0.31660867087512 475:0.0723792491884266 505:0.0642518961093993 804:0.0841441805754229 1225:0.0796757439987912 1340:0.11992436082952 1353:0.256751800693088 1393:0.10226482100524 1502:0.639499956312589 1577:0.136240882520593 1877:0.144888022020194 1894:0.139799082738197 1918:0.258712745998642 2722:0.12319702133892 2733:0.116146351535582 3105:0.139799082738197 3360:0.250447350406935 3467:0.129356372999321 4346:0.165970305785091
++1 6:0.040125495724 26:0.115782804994373 27:0.03894527338762 28:0.148153259506648 29:0.145727977859296 31:0.0254894841035896 37:0.0316421352533832 41:0.0307938757189976 59:0.0415263322475189 63:0.0433655930541861 67:0.0756582031796865 83:0.0173279493241889 88:0.204263164737114 96:0.0414347219320613 106:0.0468112804052324 132:0.0405603456349719 134:0.0957923441203285 140:0.0472576417999661 142:0.0156076881534477 153:0.116006237521019 174:0.098043208107656 176:0.0693293457060827 179:0.0364553186563551 192:0.0540079999361676 199:0.0312602819993202 204:0.160587272371898 232:0.0593594958609631 289:0.0581843499430746 299:0.0553622665635531 309:0.0492160745440138 322:0.0579580892702496 345:0.0490769570613305 355:0.160997318311485 373:0.0954817723135583 377:0.0514718394206977 436:0.0590705212576507 469:0.077324896213358 475:0.0541902209775638 505:0.0481052855264014 506:0.0374133991624488 538:0.0585987855586711 557:0.0629395084363688 580:0.0605114120322558 598:0.0706769990552292 657:0.0694590491918255 719:0.0719815742440727 757:0.444774532574515 808:0.139597729216644 810:0.0984115007271777 858:0.0670931795279276 936:0.0782525056679298 975:0.0828640017983568 1015:0.167153387266641 1122:0.326719006735073 1126:0.0713176953436506 1140:0.0679256711121521 1227:0.0730759070933248 1312:0.0869585761944795 1392:0.106473662797583 1822:0.095065989849032 1838:0.1025060751233 1979:0.0988238665770428 2280:0.0908359941144771 2306:0.188147765871772 2344:0.221454216771801 2571:0.0890381018203439 2722:0.0922374007051906 2900:0.111542776362022 3090:0.122665070182548 3482:0.102003317425263 4238:0.121196325871964 4787:0.119836481038707 4839:0.270767959935056 5880:0.142824065241796
++1 6:0.01816715541077 27:0.0176327998291777 29:0.0659795666993734 31:0.0461623125840453 64:0.0525227989744809 80:0.078858766062833 142:0.00157033599582934 158:0.0434651969964582 159:0.0364309374215549 208:0.0453690843781685 229:0.0317129882663727 245:0.0700189932252731 286:0.0339317175754919 308:0.0447439653390396 322:0.0524820240141793 355:0.0364464444576636 367:0.0516868585125118 381:0.0582118204228618 478:0.047489517499001 502:0.0417999774103964 513:0.0453160834146184 530:0.0995632878763649 538:0.0530621852723937 643:0.0492703485818454 658:0.056007470853268 671:0.0369824841044776 684:0.0566752740039481 733:0.0683504566030429 890:0.0635968716292588 1046:0.136071905607635 1378:0.0742617797189028 1380:0.0623711889164474 1811:0.390404153220543 2213:0.336234225376267 2393:0.0947780319309789 2736:0.0791428521824455 2804:0.0791428521824455 2866:0.0830032310604134 3284:0.473890159654894 4053:0.120031134428523 4602:0.111075282847981 6234:0.342314097541999 6781:0.129329591713616 7099:0.463421388683082
++1 6:0.0356869888751535 15:0.0407556155943285 26:0.0514877087399677 28:0.0878434625904467 29:0.172810915049629 63:0.0257124538727884 80:0.154907680567553 114:0.0835289603443632 142:0.00616943731104894 176:0.0616604366947371 204:0.07141190531385 220:0.0954289836016962 252:0.171699920672351 275:0.0799935406334197 296:0.107270095695451 373:0.0849199962480668 398:0.0925257793316884 457:0.0820265470609138 561:0.105414575401676 608:0.12980330339341 655:0.090073877148638 772:0.110217731966688 795:0.14093098746161 834:0.119873986661648 876:0.114804383462039 1008:0.309358395230535 1236:0.13109795877814 1536:0.195568793963937 2435:0.175051301835374 3024:0.199927196057231 3136:0.194236383188668 3996:0.263440791626883 4532:0.462853968691075 4887:0.388472766377336 5618:0.218192793184919
++1 6:0.0161708943763479 17:0.0881170252993188 37:0.038256097610168 41:0.0372305315639341 94:0.145615387147895 111:0.0505645192914404 174:0.0592682906723159 176:0.167641671166765 179:0.220376756776897 215:0.0515096853379154 218:0.0458637357445216 265:0.076382558034326 327:0.0679978398265736 353:0.0907017154245734 365:0.0856687538194023 408:0.0476105910470921 423:0.0612594683652266 457:0.0557532032144388 495:0.0891068976892066 577:0.11801713898665 593:0.0778770619349269 641:0.0639778110988217 908:0.086000705055782 1213:0.102876948060156 1654:0.114130237371749 1720:0.21026999298864 1797:0.562311276429131 1851:0.109499013137008 1856:0.125862641058917 1917:0.100611205853166 2951:0.264043798784153 3300:0.132927535084184 7189:0.167727269373629 7951:0.518033122975191
++1 6:0.00930956515425675 15:0.0318954109665503 28:0.137492873028127 29:0.0676210514138394 31:0.03548307758882 57:0.139006097472072 159:0.0560059367393677 172:0.073006491215307 186:0.052828431365305 237:0.160004004066702 255:0.0866489609054407 365:0.0986388046083853 404:0.0781787743764622 423:0.0705340099055185 499:0.208025666679628 535:0.0882817051087871 608:0.304752828255016 645:0.11845227957681 884:0.0961124236314295 993:0.102303865933553 1316:0.387674201286647 2935:0.444655516313149 5108:0.193120789245056 5793:0.188463612913787 5796:0.188463612913787 7247:0.184526026431066 7451:0.184526026431066 9664:0.433052581907198
++1 6:0.0203275281623863 15:0.0464292981774041 17:0.0369223303644743 26:0.14663857646969 27:0.0197296289377721 63:0.0146459717308082 67:0.153313421115517 80:0.0441181833850268 134:0.145584861025079 140:0.047881329675496 142:0.0175707470200348 153:0.176305863716261 192:0.109441552797062 205:0.107230577489996 226:0.0525391589420799 276:0.0526374411676314 331:0.0529688523976982 345:0.0497246555482042 363:0.0632979644810888 457:0.0467228252648945 574:0.0507345371739331 613:0.0626676777586711 761:0.0689007394181139 808:0.141440085454656 824:0.151562354655815 844:0.0742492317903387 848:0.0748903876610951 858:0.0679786490733495 975:0.0839576084886416 987:0.055318150766721 1005:0.142856765578096 1216:0.0725442182823105 1309:0.0799869076499913 1392:0.107878860560755 1645:0.0774507823977272 1689:0.217062534137784 1817:0.48160316802902 1853:0.0997102972281976 3719:0.113014874303651 4033:0.589041750032445 5038:0.127673619430842 5563:0.140560388413206 5564:0.140560388413206 5782:0.137170724790813
++1 6:0.0259376406929523 15:0.0444323497229169 28:0.191536375725059 29:0.0471002271800484 31:0.0494301990441593 176:0.0672230819565781 317:0.231890934269705 322:0.112394581122344 455:0.284074294758609 477:0.138665154877395 571:0.102354458122424 2657:0.209020669904952 2786:0.221524840351377 6831:0.248113777253034 7260:0.787625640046943
++1 6:0.0155352352993529 15:0.053225119124748 28:0.114719866023997 31:0.0592119986652075 159:0.0934592960025544 174:0.113877046000818 220:0.249252474589574 339:0.241669549347922 374:0.200508726270782 404:0.130459976940816 473:0.136778929267277 561:0.1376670000298 1001:0.182097269154594 2335:0.229567559393108 3710:0.4917858630293 8855:0.6445364208546
++1 6:0.0320118785168872 15:0.0548377933979301 28:0.236391554029873 29:0.0581304509710162 31:0.122012140240429 64:0.138823615100019 159:0.0962910304304243 174:0.234654840573417 176:0.0829658008837113 179:0.0872515001545743 185:0.0932064545646872 192:0.129261769982014 242:0.224309395749677 245:0.185068007703072 351:0.113588862231494 408:0.0942498554035402 499:0.11921953853913 781:0.173450597127028 896:0.202720606148509 987:0.130672891556966 1124:0.177946068601913 1655:0.301591445038117 1711:0.232701942666309 2457:0.263143151246355 2723:0.208651046026847 3382:0.283784479542159 5932:0.30621860291049 9930:0.354466776986494
++1 6:0.0279302145852025 26:0.0805931124443469 27:0.0542173908717591 28:0.0687501758313542 29:0.067624729518183 64:0.161497274923188 75:0.0377368821453422 88:0.0710908852341954 142:0.0144854228444744 159:0.0560089830640681 162:0.0504233879275821 185:0.0542147977006792 232:0.0826369083871279 341:0.07778871686996 430:0.0724600968372792 437:0.083741735267517 500:0.0963477894145546 550:0.0758517366424441 882:0.0699142563410954 930:0.0815131376018151 960:0.107290034750876 1017:0.109707013090372 1055:0.101589801547259 1243:0.123953772793584 1377:0.0887974268319772 1625:0.125716205337777 1740:0.133309537046977 1838:0.14270311794644 2444:0.131876723782626 2976:0.251432410675553 3071:0.156471858884796 3523:0.439568780965344 4857:0.168722620242541 6732:0.206180405591947 9643:0.433076136888217 9721:0.46848922008378
++1 6:0.0288838710357327 41:0.0443332259905719 42:0.0576029353736701 68:0.0591057495996511 81:0.117241090417483 179:0.104967747177952 187:0.0897764828935532 325:0.0864554841162742 327:0.161940400701797 337:0.0736073281739938 377:0.0741028089484832 408:0.0566935524090163 473:0.0847686968201508 478:0.0755033503031049 499:0.0717134167199264 580:0.0871168711959045 663:0.0901077393918471 685:0.203504060355603 710:0.110953373369549 772:0.0892065947932421 781:0.104334701379573 847:0.102674425708819 862:0.0926422550485989 882:0.072301426741821 946:0.136864292447425 1294:0.109351830934727 1309:0.113655310505702 1359:0.106881119428775 1726:0.130008691877428 2135:0.134524945506518 2320:0.158286927575473 2343:0.174483528904872 2365:0.133214725277639 2478:0.160585538410244 3316:0.148319810198378 5212:0.411240963562793 5448:0.199725618345076 6491:0.599176855035228
++1 6:0.0177619507706619 29:0.0322539712213041 75:0.0539964145972816 142:0.0115148313071003 179:0.0484119308897915 180:0.136875191458289 204:0.106628335979353 205:0.0702725962278297 229:0.0930169622555149 303:0.238048421723263 317:0.0529325367641018 387:0.0626906203657249 405:0.0844598972759251 437:0.319528496582223 507:0.0474861162349748 560:0.105793125227073 582:0.0749067026635754 717:0.0899991543495159 1037:0.0993250283769188 1324:0.10598885140489 1424:0.0825845277009051 1776:0.102858120092369 2833:0.268351091521264 4871:0.150449063739915 5954:0.679627688464171 8903:0.393355325233285
++1 6:0.0290139351665723 15:0.0497021810665094 26:0.188370465162329 27:0.0844816207295095 63:0.0627135681507134 64:0.251645298852195 94:0.0870880588221888 97:0.0905212736259047 134:0.207796525247574 142:0.0564280196435502 144:0.172493918283761 174:0.106339594024885 176:0.0751959734763113 186:0.0823218193968935 192:0.117156280341252 198:0.126314676402126 204:0.261264176466566 226:0.112485473325213 265:0.137046135797307 286:0.0812861973902194 317:0.0864646687577001 337:0.110908173186837 351:0.102951155543425 808:0.151410445845402 834:0.146188408722028 862:0.139589134971201 965:0.144904282021311 991:0.154103562862921 1046:0.162985674890717 1607:0.187697348873378 1610:0.602165661571285 2736:0.189593158383877 2804:0.189593158383877
++1 6:0.0113377941339566 17:0.123561835145194 29:0.0411766579506265 78:0.0871025726199448 79:0.230662360746054 96:0.07024636163921 139:0.0927530848247882 146:0.305427562498221 216:0.0986428458370067 271:0.125130222355737 274:0.245058166721627 278:0.195760672136747 387:0.0800332527675537 403:0.131312625023069 411:0.0849420826368067 473:0.0998228422043916 479:0.143596977478858 489:0.258362097796552 508:0.0879667626651376 626:0.107006046471644 639:0.130442390905371 712:0.104114600628203 767:0.108453230245261 828:0.172101720243571 900:0.165489180124292 914:0.145278946073214 951:0.147797799772303 1048:0.153998815362758 1052:0.173783688837927 1255:0.178435447787061 1347:0.17129365296497 1627:0.151368333016105 1738:0.153097046684748 2497:0.229523249427088 2751:0.193664725731508 2866:0.155402459813543 3622:0.213632056275661 3702:0.213632056275661 5516:0.193664725731508
++1 4:0.0308909563290456 6:0.0142831519010725 26:0.0618214190788579 27:0.0415891127763532 29:0.02593681157633 31:0.0272198635876628 33:0.03951915745371 63:0.0308730068848748 75:0.0289472330212792 80:0.139498526055015 83:0.0185042747409679 88:0.0545324442182957 96:0.0442475600604493 142:0.0129634025855244 179:0.0389301249424276 185:0.0831742472098628 204:0.0428722255628384 218:0.0405097386170421 312:0.0647299981621627 388:0.0742644401575017 405:0.0679178519250034 413:0.0617490778545859 437:0.0642366667987777 480:0.0525273551221115 507:0.0381856373848544 565:0.075961236609628 737:0.0841541296327658 794:0.0834201418386272 922:0.406078564007088 1248:0.0919502791259513 1509:0.0902452752671957 1665:0.153943042654401 1731:0.0886768237592408 2223:0.090657820674063 3070:0.111772784154668 5784:0.136629495766624 8157:0.566216191958464 8218:0.144574658776716 8233:0.144574658776716 9060:0.539053540624703
++1 6:0.0235713348477782 7:0.0243942427313339 15:0.0269191739729572 17:0.0214071431958883 26:0.0340077451617003 27:0.0228780246373077 28:0.0290104003752094 29:0.0142677488083821 30:0.0236139281055282 37:0.0185878666892101 41:0.0180895648199858 63:0.00849156624160461 64:0.170366859007009 77:0.0296236031085062 81:0.0478386189429098 85:0.048150614004914 94:0.0235838604674565 97:0.0245135913626067 132:0.023826783227296 140:0.0277610451630407 142:0.0132435125828916 144:0.0233560866742651 176:0.061090281612571 178:0.0634103920308039 198:0.0342066150462946 204:0.0235838604674565 226:0.0304616010896975 232:0.104610487279078 274:0.0424564369747935 299:0.0325220286891294 306:0.0308276873618328 308:0.0290269710798709 322:0.034046919662337 347:0.0322726555194398 351:0.0278796624949106 365:0.0832494412604473 387:0.0277315936658681 389:0.0334808151003233 398:0.0305567406416476 426:0.0707323650998502 431:0.0438056006894866 473:0.0345887041055831 493:0.0350716494377511 502:0.0271171034180154 518:0.0342603769595336 534:0.0299438021345832 541:0.0405103804065602 543:0.0434838083973865 561:0.0348132797547294 574:0.0294153021095468 582:0.132541820706052 603:0.0420603047931509 609:0.0278201906681361 663:0.0367672272001556 676:0.0392836285116164 692:0.0548910589579636 713:0.0392836285116164 829:0.0291436848091717 1215:0.0460488219564519 1471:0.0454999420167831 1472:0.0399478575828281 1557:0.0578108854397334 1608:0.0425723439115625 1963:0.0562524094927897 2123:0.0641467797098046 2154:0.0536825195521621 2252:0.130091140378321 2292:0.0689574160600202 2403:0.0590804971973447 2986:0.0696530923498907 3929:0.0683039286351976 4297:0.427173665207551 4825:0.0751594049899767 5119:0.22547821496993 5228:0.0778683838443989 7414:0.755105556916402
++1 6:0.0253016484856781 15:0.0216714331767929 26:0.164268764897222 28:0.0934199472532019 31:0.0241090840835853 60:0.0480105365781261 63:0.0273447336171777 67:0.107341324053033 88:0.0483002891880106 111:0.0395576664835112 140:0.0446983726746704 142:0.0213235293367081 153:0.0548619211602782 158:0.0908018710881817 174:0.0463668063756349 232:0.168434528261361 252:0.0456499466766649 274:0.0683595891722585 320:0.0600406453167499 328:0.064174033999411 345:0.0464191617040807 355:0.0380696002774015 386:0.151132222175567 387:0.0446509524861034 586:0.0464979920207619 593:0.0609248319949731 613:0.117003568367767 667:0.0609248319949731 909:0.0556916635294259 933:0.0735079149549054 1026:0.0875199210985577 1050:0.0746697017702802 1122:0.0772563302288654 1446:0.0660188605207522 1731:0.392712658788966 2073:0.091603980203097 2211:0.0974437177186001 4155:0.793426595113159
++1 6:0.00979701101061979 12:0.0660437700939426 15:0.0167827222458751 26:0.042404164543138 27:0.0142632732121699 29:0.0355808340279005 39:0.0491985670805368 41:0.0225558289587608 63:0.0105881107502381 75:0.0198553066298451 80:0.0318946547464218 86:0.0380535390164427 102:0.0466756960266233 108:0.0453455562950477 110:0.0945504099081971 142:0.00762152292105836 199:0.0457949223679108 205:0.0387604609357461 259:0.178772124309543 262:0.0458449551588086 284:0.0297478978959266 316:0.0667344687930445 322:0.0424530111209689 350:0.0714997688554055 351:0.0347630750060065 437:0.044060816287047 587:0.124082440802014 647:0.132743262066187 717:0.0496410961551055 784:0.0481018318187438 965:0.0489292072343335 1069:0.0779895895076771 1149:0.0469951821906516 1274:0.0682176136053669 1754:0.0693870992828331 4909:0.091018920919066 5898:0.0991657537287502 8768:0.797522384229611 9857:0.455727076702635
++1 6:0.0172136567397609 15:0.117951085116099 60:0.261306893743434 63:0.037207287769628 75:0.0348863987616599 142:0.004463751895182 176:0.0892259301057996 179:0.0938350039594043 180:0.265299976604343 255:0.160216448906985 345:0.126322759748053 475:0.139484162734215 717:0.174441937132292 2889:0.780202068145089 6998:0.357085956249641
++1 6:0.0161579285366898 15:0.0276792611956868 26:0.069935969205644 27:0.0235240063537444 28:0.0596590705334082 37:0.038225423831958 63:0.0349253331767118 84:0.0948301248848577 86:0.0627606076311759 103:0.0769066211837421 107:0.0772804446425664 142:0.00837997239264876 159:0.0972053912798812 203:0.0612468998602992 232:0.0717095059978314 252:0.174915537979142 289:0.0702898656854451 296:0.0728527088584546 345:0.0592876387459214 442:0.0687494881407358 571:0.0637620067041456 613:0.0747198467046211 639:0.0929492459248079 643:0.0657318182205316 714:0.0836073434709593 757:0.0767588392645984 1118:0.104019480387536 1238:0.643129936520864 1433:0.0778919925515 1972:0.117455817469994 2123:0.131916044098051 2196:0.125099967487535 2902:0.115681494298587 3136:0.131916044098051 3209:0.592744359324291
++1 6:0.0504777152834248 15:0.0345882422420382 26:0.0873925870786422 27:0.0587916002897756 28:0.149100972670898 29:0.146660176877236 30:0.0606827138470591 31:0.0769576090066528 63:0.0218214979756802 64:0.0875612334207481 67:0.0571066326292207 68:0.123952493606426 75:0.0204603325206024 88:0.0770886765617521 94:0.121210892974693 97:0.125989309645823 102:0.0961959721034761 134:0.0723038345409745 142:0.0130896067388395 144:0.060020116852551 148:0.177486216169758 153:0.0875612334207481 174:0.074002781349391 176:0.052329625992552 192:0.0815302209614669 198:0.0879036398880563 199:0.0471903736804661 215:0.0643153352019683 226:0.078279759893765 232:0.0896088138687887 256:0.0687032339040548 275:0.067888459562664 284:0.0613087366603247 308:0.074593069480647 317:0.0601716231399774 322:0.0874932571154788 325:0.0906542334269476 341:0.084351590435079 351:0.0716447333019187 373:0.0720694156765443 387:0.0712642282736022 389:0.258115470626454 394:0.0940503582685036 426:0.181766957699642 436:0.0891725791759996 475:0.0818053009826937 506:0.056479090213287 546:0.0872230078451137 586:0.0742121574822621 772:0.0935389530262017 808:0.105368035496628 824:0.112908780519976 885:0.14153173119426 909:0.0888855265502535 912:0.096010684921014 1026:0.139684358079403 1124:0.336711673397875 1126:0.107660855182615 1227:0.110315043314325 1228:0.124310762129478 1243:0.134411496889017 1283:0.125091104731823 1446:0.105368035496628 1453:0.142013488215283 1464:0.129055045394951 1625:0.136322622231086 1787:0.145094475067483 1951:0.125894069083482 3090:0.185174609096007 3473:0.171024570491775 3929:0.175526398550748 4537:0.167153118497196 4649:0.182957399639641 5369:0.180904584318582
++1 6:0.0273059836676758 60:0.207255259027211 67:0.154459524280559 203:0.207007580641735 1118:0.351574055564435 1676:0.370891293972492 2123:0.445861279490931 2196:0.4228237129883 3209:0.500852190244055
++1 6:0.021515711562381 26:0.139688896802033 27:0.0313242959547381 31:0.164012743902986 63:0.0465061714528495 64:0.1866112829938 94:0.064581434520633 97:0.0671273855963613 134:0.154094578181964 142:0.0251070181493845 144:0.0639577046469421 176:0.11152536646134 179:0.0586431723999121 198:0.0936705113581017 226:0.0834152618432661 229:0.0563374529109777 308:0.0794867080694343 363:0.100496779690679 387:0.15187896001644 455:0.471288862442587 513:0.161006127460281 582:0.181474549660456 694:0.158307835893019 862:0.103514381900973 991:0.114277769983917 1613:0.123365788503949 2423:0.138848489805695 2491:0.662904134546404
++1 27:0.140277523361439 111:0.301282791816278 322:0.41752010009904 325:0.432604361326545 389:0.410577914557952 506:0.269519688451311 1124:0.535598956294597
++1 6:0.0364214688742504 15:0.0499132966363512 26:0.0630568632564511 29:0.105820539563531 37:0.0344654596321394 68:0.0447180687796959 75:0.0147628584192406 88:0.333733349639891 142:0.00566677039645692 158:0.0522833525797168 176:0.0755153767791365 199:0.0340495348594298 204:0.131186962630246 208:0.0545734978483129 252:0.0525701117992047 275:0.0489839407944499 284:0.0884728728887958 287:0.0676139287853091 291:0.0586304289934956 308:0.0538215555729855 312:0.0660235676165141 341:0.060862675901133 355:0.219203228966427 373:0.104001298993443 377:0.0560645035342974 389:0.0620798341512289 404:0.0611711879212192 442:0.0619870879303054 457:0.0502288496419713 475:0.0590254373986738 502:0.100560591360027 505:0.0523975630318897 530:0.0598812710369173 543:0.0806272967215634 558:0.0808638293607741 626:0.0687491295904055 655:0.0551566217776853 685:0.0769832768349066 737:0.0858358724821593 757:0.138417231825282 772:0.269966740534508 776:0.0908370533973516 795:0.0862989072775054 824:0.0814677053477541 834:0.0734046801645842 863:0.0769832768349066 936:0.0852347211594523 952:0.0678606822249186 997:0.0692751277036192 1015:0.0910339690270714 1086:0.0918416253673486 1106:0.0933386609418523 1154:0.0989409931797516 1269:0.0744126302761837 1294:0.165466227229903 1347:0.110052561831852 1359:0.0808638293607741 1375:0.0914337178472719 1411:0.0922580315692772 1416:0.0879247442496963 1730:0.102821545705619 1903:0.122425159048109 1917:0.0906420589263533 1992:0.0951992382585171 2194:0.333314220824159 2306:0.204935576490131 2406:0.118156501614252 2526:0.218106029641924 3170:0.112794769742197 3469:0.12060692660903 3677:0.129150153849142 4431:0.129150153849142 4517:0.130529098830509 4714:0.15556779008973 4835:0.137254093631542 5086:0.135349150536962 7088:0.15556779008973
++1 6:0.0242900348508204 15:0.124829779552781 29:0.0441083355740907 41:0.0559233699853505 60:0.092181946749389 80:0.0790774119275443 96:0.0752477312694112 176:0.0629529502252881 227:0.0863277360529421 252:0.087649529740478 255:0.113039988726979 278:0.104849177283532 309:0.0893790950858935 339:0.0944652858957279 404:0.101990002902037 513:0.0908834559309613 561:0.107624254286996 603:0.130028224009307 795:0.143885154151506 1431:0.425594749650843 2171:0.16804137760655 2401:0.164476669213706 2642:0.16858323856496 2941:0.174549790747361 3114:0.205743898781206 4679:0.451332096863349 9007:0.537925967819594
++1 60:0.188830759558213 355:0.149731955708542 795:0.294742559749201 1431:0.581208379547043 4679:0.462267209952757 9007:0.550959123078697
++1 6:0.0262959742400409 15:0.0300307941797698 29:0.0318339506482346 31:0.0334087245670598 60:0.0665297274377765 88:0.0669312468444307 102:0.0835209091848935 142:0.00227297636646281 158:0.0629135202905561 252:0.063258582936381 255:0.0815834326001051 275:0.117886554745481 355:0.0527542558496329 373:0.0625733384684148 377:0.0674634488158923 426:0.0789084055957972 448:0.0793793386197199 485:0.0606586707223573 655:0.0663709779910929 713:0.0876489422485269 761:0.0891309584906166 808:0.0914844346521915 950:0.0955123802220904 987:0.0715603321735912 994:0.10035336999337 1007:0.404719709669792 1373:0.101689850134096 1880:0.122471967047147 1911:0.118706410078433 1942:0.113690814147083 2650:0.152398526386727 3542:0.609594105546907 3767:0.14039756237374 4432:0.17373857093027 5211:0.149723499382419 8305:0.388232938039757 8715:0.194116469019879
++1 6:0.028650659512365 26:0.0930059646953653 27:0.0417119245748263 28:0.0528926623482583 29:0.0260134024498472 31:0.0273002432874985 37:0.033889975451941 67:0.0810329210707546 75:0.0290327136076837 80:0.0466368207820538 134:0.0512986902547089 142:0.00928691660566287 171:0.0619314216171508 174:0.105008144658719 176:0.0371272324902134 204:0.0859976527341953 211:0.0712354840977251 255:0.0666666443294312 291:0.0576514522230092 313:0.243670952744406 323:0.0612731240432544 345:0.0525633575846189 373:0.0511323729246169 404:0.06014978703731 409:0.0365799815563354 485:0.0991355695062594 597:0.0640499527059572 643:0.0582766515735231 713:0.0716231307326222 800:0.063164765202585 834:0.0721790115491612 1544:0.0938508015092107 1917:0.267385711786327 2756:0.118593102362185 3136:0.116954399664824 5580:0.133089169217442 5956:0.82219775922044 7828:0.166592663964285
++1 6:0.0231991958853524 15:0.0794825402256819 26:0.150618773193877 31:0.044211456386972 62:0.265605388906231 63:0.0250725098792188 67:0.196843490629395 92:0.0765744811543578 94:0.139269142520093 102:0.110527446997153 134:0.083075809362601 142:0.0180476681100668 174:0.0850278687806008 176:0.0601258019104067 185:0.0675472636223049 232:0.102958920303924 308:0.171412198517181 331:0.0906776347409274 337:0.0886808500906976 373:0.0828064662908809 423:0.0878844653463383 457:0.0799850306671622 465:0.197270806671134 469:0.134119869302595 574:0.0868526996973005 613:0.107281100809914 757:0.110208641162644 827:0.0990795107695989 829:0.0860507124957338 909:0.102127876144641 952:0.108062175175104 975:0.143727436250548 997:0.110314555347003 1005:0.1222785941453 1237:0.142246835198458 1359:0.128768544718594 1676:0.157554840099486 1931:0.151210635324228 2114:0.332185854201455 2946:0.179615762280695 5440:0.234823227551558 7501:0.513768299465535
++1 6:0.0271381613770662 26:0.0880960830183765 33:0.0750868771747741 37:0.160504441875528 41:0.0312403306280263 67:0.0383775544141337 72:0.0422217929822359 78:0.0521222127556128 81:0.0413081875500265 97:0.042334500949524 110:0.0654772225828621 111:0.084857896696917 135:0.0618130211316507 142:0.00175933012244318 144:0.0403355126086143 162:0.0367451000398539 176:0.10550174173496 178:0.0547542639087279 215:0.0432220420419923 262:0.0634962944348779 303:0.0606183086502749 342:0.0633792151659453 423:0.0514031351537484 437:0.0610252219532569 499:0.0505343520291615 504:0.0720703229972935 616:0.0935746744123608 661:0.0905788683458623 671:0.0414334247324066 712:0.186906650458665 721:0.0898390805729836 780:0.0688320878332949 789:0.0697129875148942 908:0.0721636341821306 912:0.0645223700864665 974:0.0871429739222348 984:0.0778017651687346 986:0.0606686890393416 991:0.0720703229972935 1019:0.0975083078045691 1042:0.231905967142263 1044:0.0990287886538862 1068:0.0799469321035879 1104:0.601539791998734 1117:0.0809692187174272 1128:0.306092648078643 1129:0.079113261050158 1241:0.169209994153842 1249:0.102502187420832 1769:0.207984451678332 1820:0.0865258276013454 1893:0.116895536566814 1910:0.0830309154350352 2154:0.0927086790889619 2238:0.104516641993724 2471:0.105056260715396 3451:0.124443489477641 3561:0.111540178749993 3728:0.116895536566814 4277:0.134477201689311 7052:0.144894753116116 7369:0.129798847294462
++1 6:0.00841407794366733 27:0.0244997770052373 34:0.0670559940938056 37:0.0398110060731466 57:0.0628175494448435 60:0.063863727632499 63:0.0181870141887387 75:0.0170525579074921 80:0.0547848952566962 142:0.00436378590964928 148:0.0739624826715023 172:0.0659839957399492 205:0.0665781714631774 229:0.0440634016278101 237:0.0723066082684063 312:0.0762637341676644 336:0.0769271906462215 405:0.0800196068516958 411:0.0630377739760662 437:0.0756824999173635 505:0.0605243545957364 583:0.132421681665301 586:0.061851737337695 644:0.0801740334918919 647:0.0760035996224317 695:0.0830584727710145 704:0.116049807961458 784:0.0826236822062085 1155:0.0979470914389636 1296:0.0856573079968933 1379:0.0888103859405883 2240:0.228573216339128 2682:0.123817840412595 2688:0.4349158996915 2866:0.115328289970677 2912:0.13738789282808 3184:0.133178690357352 4164:0.158542018979318 4909:0.156341621772469 6249:0.163693666453347 7015:0.327387332906695 8923:0.186337773863008 8977:0.372675547726016 9778:0.423402204969948
++1 6:0.025179105993277 11:0.0565732650359966 27:0.036657758946172 29:0.0457228021049772 64:0.218384842184709 67:0.213642883966229 88:0.0961327165428963 132:0.0763559345577924 142:0.00652930889674748 204:0.151154915818452 232:0.11174583723062 299:0.104220946259711 323:0.107697519783687 331:0.0984164187260915 426:0.226670792660539 437:0.226479680841285 440:0.28419474913667 609:0.0891533127983459 643:0.102430730173575 644:0.119960291592035 749:0.146553206042678 764:0.23287377904971 882:0.0945416190135305 969:0.140801843760233 1003:0.133051339433093 1296:0.128164633819193 1412:0.158026251013141 1791:0.176495827967992 1819:0.174753772836751 2166:0.237218286245662 2246:0.159450924647924 3170:0.194944873903338 3837:0.237218286245662 5697:0.446424253788763
++1 6:0.0100597627655999 12:0.0678150365015108 26:0.0870828531508294 27:0.0585832330370272 29:0.0730701943551699 33:0.055667453715291 64:0.174501803564252 75:0.0203878176841866 94:0.0603906506606652 132:0.0610126974009449 142:0.0208691439774354 176:0.052144161056206 179:0.054837731065029 186:0.0570855327835313 206:0.0959478179518178 308:0.148657398362802 337:0.0769085547768841 351:0.071390812398619 387:0.0710116559436874 415:0.0875235178836008 437:0.0904850180582439 455:0.0734510396661531 539:0.0934610557191071 546:0.173827749868866 780:0.102060631837652 965:0.100482936387989 1046:0.113021361230642 1607:0.260315023185639 2736:0.131472148426113 2804:0.131472148426113 4500:0.186920020939892 4530:0.165385962809665 5930:0.429684774020124 8118:0.626049431757518 8417:0.214842387010062
++1 6:0.00938972183110889 15:0.0643400699608118 29:0.0341016391304131 31:0.0715771838426482 60:0.142537932636621 63:0.0202958666789168 65:0.0671758922614193 80:0.122274818572123 158:0.0673951589948654 159:0.112976311602028 172:0.0736350874630896 176:0.0486710451173466 179:0.0511852071015588 205:0.074298160089379 337:0.0717859807049315 346:0.0782296998498936 365:0.0994880987112854 375:0.199693748501799 398:0.07303429268049 455:0.0685587569748018 505:0.0675423804564451 515:0.135678742952483 768:0.11734612479486 952:0.0874749082143347 963:0.079666174746341 1027:0.0981219929769291 1047:0.211635064028282 1844:0.122094467853326 1936:0.126426294656295 2024:0.0914463978753503 2076:0.117092293326167 2385:0.14777647218976 2801:0.155466751721866 3044:0.152308064032964 3496:0.159067534473966 3899:0.636270137895863 4601:0.163254621089108 6464:0.401065173913299
++1 6:0.0209452939473502 15:0.0717604686359027 28:0.103113611055651 29:0.0253564080853646 60:0.0529923206001418 63:0.0301821432095212 75:0.0282994635354311 83:0.0180901935565543 88:0.0533121392127237 96:0.0432574060374613 142:0.00543141977129532 179:0.0380589623342632 205:0.0552446895591562 312:0.0632814964142537 325:0.0626936578527031 327:0.0587159749199589 331:0.0545786076231589 346:0.05816800143253 351:0.0495472767986969 405:0.0663980136734847 442:0.0594126586036 480:0.102703838380553 496:0.0585456921102932 505:0.0502214030053233 507:0.0373311346184799 782:0.079549131857368 829:0.0517936764276686 903:0.0777348409937613 1124:0.0776197854529997 1164:0.0740698382492418 1175:0.0739747676325209 1308:0.0815533996063571 1471:0.0808617472267374 1472:0.0709946742552077 2223:0.0886291165888408 4189:0.10868209482277 4512:0.229565228427292 6782:0.894640768997853
++1 15:0.0354237037070739 28:0.0763512155571623 63:0.0223485852020405 75:0.0209545414851159 81:0.0629521940343211 83:0.0267900280780937 108:0.095711978491631 142:0.00268115591138779 144:0.0614698723621358 159:0.0622013527580222 179:0.0563620652465937 229:0.0541460338322383 258:0.0980474892707483 351:0.0733752755314907 365:0.109550298384047 574:0.0774168588850042 745:0.140437785643299 993:0.113620791364594 1141:0.412974415464854 1335:0.11113882321379 1626:0.148599158591445 2240:0.421313356929897 2397:0.189647407948293 3323:0.562129928762994 3756:0.194819764393032 4737:0.189647407948293 6233:0.194819764393032 6450:0.228975772071183
++1 6:0.0324635632572275 11:0.0145880458873667 15:0.0111223099507975 29:0.0589506664306886 31:0.0123733720617344 52:0.0529341041837197 59:0.0201581466760793 63:0.0280679732005846 72:0.0202028402479867 75:0.0263171696784221 84:0.0381054260872605 100:0.0200606031307404 102:0.154665480001287 111:0.0203019626791935 118:0.0212575845577188 132:0.0196892273478135 138:0.054444739253739 140:0.0229402989238533 142:0.00420913737866897 185:0.0189043178590498 198:0.113066344545254 209:0.0407860825731129 226:0.025171899350071 232:0.0288149075398998 255:0.0302155253969151 276:0.0504379741814134 296:0.0292742787804325 299:0.0268745306726429 304:0.0245813875096177 306:0.0254744142037223 312:0.029424407225128 320:0.030814328771477 322:0.05626924418035 327:0.0273015471277023 336:0.0593607698066065 337:0.024818932525517 341:0.054248754654633 349:0.0321824976749526 355:0.058614752037948 372:0.0320459829692913 377:0.024985998824686 382:0.0285137180334755 408:0.0955797124265386 422:0.0592056325093453 448:0.0293992094425723 466:0.029997596234563 485:0.0224657574134988 489:0.0369884750331122 493:0.0289814060360284 502:0.0224081786080053 505:0.0233517710101598 506:0.0181616036656453 514:0.0344851584760439 515:0.0234544512272248 574:0.0243072917235421 580:0.0293740827398924 587:0.041116195150959 609:0.0229891737251774 613:0.0300245475718973 656:0.0320459829692913 673:0.0328241084806014 676:0.0324619687615313 687:0.0365286356344739 697:0.034802504361344 712:0.029811186228649 720:0.129284548832984 730:0.0312062577528615 755:0.0338824951409577 795:0.0384604207631722 800:0.0286283580997089 804:0.0305814420369669 824:0.0363073221333995 867:0.0856095849459665 942:0.0840054921661931 1019:0.0466570608750804 1033:0.0388880585715292 1086:0.0409306173929108 1168:0.0422123418755835 1216:0.0347564711312756 1268:0.0439645211556944 1305:0.0590518345435899 1309:0.0383223186139816 1347:0.0490465982437918 1422:0.0881891173009391 1424:0.0301879908767102 1553:0.0452094381058541 1669:0.0486011349137896 1692:0.0481768923447317 1779:0.044226522696608 1865:0.038530283162037 1880:0.0453591460028668 1919:0.0473846006011125 1921:0.0490465982437918 1924:0.0447748441001944 1932:0.0418997690957973 1981:0.0466570608750804 2008:0.115115461258249 2198:0.19806207028823 2371:0.0537503114543538 2379:0.0488210821428784 2380:0.100537409824209 2771:0.0468334509993142 2815:0.0980931964875835 3335:0.0475761651927187 3366:0.103996264348486 3950:0.0595453617726885 4189:0.0505346175003669 4696:0.460036556240266 4976:0.0595453617726885 5036:0.0621078639972994 6261:0.0603204077990263 6412:0.0755052983329831 7667:0.0718936542959588 7907:0.679547684996848 8399:0.0673435209277838
++1 15:0.110990356910167 31:0.123474798615528 80:0.210931162535445 111:0.20259479314178 375:0.229655541587521 505:0.233029056946601 3899:0.548801468038163 6464:0.691860714854494
++1 6:0.0264385530728988 15:0.0452904352484971 26:0.228866692825073 29:0.0480098352346928 63:0.0285734422170658 67:0.149552800587823 75:0.0535822178359103 117:0.136476482576772 134:0.0946758760847364 142:0.00685590186729034 232:0.234670623260898 274:0.142862519601863 286:0.0740709397555788 345:0.0970099217849379 539:0.122814779008927 592:0.130217580038927 633:0.137465760788122 743:0.167810411873068 827:0.112914211202157 1050:0.156049822153568 1150:0.144246333214467 2683:0.187250428214802 2709:0.197905521744486 7199:0.535224272000837 8149:0.548450346641691
++1 6:0.0268544151610694 15:0.0230014128919068 26:0.0290583280442717 31:0.0511773257382979 63:0.014511442395546 88:0.102528973081636 102:0.191912898383819 142:0.00348187048171882 159:0.0403887467288381 180:0.0517356351243674 204:0.0403030280752328 205:0.0531228100425035 229:0.0703164915184044 275:0.0451462805790831 383:0.0804221691110364 423:0.0508656836702971 430:0.0522518413833774 437:0.0603871656174201 457:0.0925873134061092 507:0.0358972923702483 574:0.100537038742951 586:0.0987031641506239 686:0.0793944417520679 755:0.0700704497530491 799:0.0677294210977297 867:0.0590147616085138 881:0.0764937490721157 952:0.0625441185483652 963:0.0569609134704232 979:0.6174295378541 1064:0.0622040306349362 1159:0.0682678575005901 1387:0.10889949823564 1509:0.0848371600727812 1550:0.64132769043853 1863:0.0808808045546499 2017:0.100964086881748 5362:0.133071159600202
++1 6:0.0275521183979816 15:0.0235990114667401 26:0.0894398730995802 27:0.0401125804450436 28:0.0508646195308257 29:0.0500319613182526 31:0.0262534806581411 63:0.0297769269305994 64:0.0597416468023549 68:0.0422854144694563 75:0.0279195235414518 80:0.0448486432690334 81:0.0419382897157567 134:0.0493317644904174 142:0.0178616639355876 158:0.0494391482909892 174:0.0504909290681557 185:0.0401106618948907 208:0.0516047100990122 255:0.0641104710684895 308:0.0508936733383244 331:0.0538458518298986 355:0.0414557231241484 399:0.129895855204727 414:0.101787346676649 423:0.0521872224910704 471:0.071802836947376 561:0.0610389448763932 582:0.058097175452095 647:0.124437887876121 739:0.0703645975521093 1226:0.109024276616535 1230:0.0962417889250102 1469:0.233960990179911 1913:0.328994996779569 2392:0.105578490708352 2455:0.103120551863857 2564:0.105060663848949 2744:0.0947043971702912 3061:0.114045933080762 3710:0.327072829849605 4777:0.127986182872524 5614:0.142887631221918 8373:0.152541979105206 9495:0.693220799676474
++1 6:0.0255451643039103 20:0.0360247205401699 27:0.0185953479750857 29:0.0695812924723389 31:0.0243411220609038 59:0.0396554719534774 81:0.0388834167282207 83:0.0165472838858218 100:0.0394635825209523 141:0.058336779185799 142:0.00331211657401443 159:0.0384196477573225 179:0.139251678469007 206:0.060911048085603 215:0.0406849288782795 228:0.0482994053350386 229:0.0668883056413067 276:0.099222498113615 296:0.0575888924606984 309:0.0469987730220744 351:0.0453213976066265 377:0.0491529103118256 396:0.0648654576487431 408:0.112815686869163 432:0.0599916073445136 461:0.0698818305272271 475:0.0517488222971321 480:0.046972122341688 493:0.05701274788311 499:0.0951360195438655 506:0.0357278363118473 509:0.0592785304052744 550:0.0520308858357662 644:0.0608521477982923 653:0.0652390926782178 730:0.0613895165551138 742:0.0655438450374396 781:0.0692059355386452 800:0.0563182255759793 882:0.0479580409229615 913:0.066654259310976 969:0.0714244229741324 993:0.140359351961937 1009:0.227674155808039 1201:0.0814468029686075 1449:0.0818319353723367 1489:0.0748573254638963 1639:0.0862356726052257 1651:0.0875342531859732 1880:0.0892313351546769 1990:0.340106892030029 2306:0.0898356301751555 3090:0.117138716256021 4379:0.126583454367198 4431:0.113228612200622 4737:0.117138716256021 9639:0.742676965421533
++1 6:0.0271106629965428 11:0.0761414406162058 31:0.012916416377284 37:0.0962050841840645 60:0.0514431886993265 63:0.00732495610162681 86:0.0263258015884199 98:0.0219822822579043 100:0.0209410257384413 142:0.00527264231940901 150:0.0295535299511894 151:0.0535261109016228 159:0.0407741406711255 181:0.0286041208847197 186:0.0576912203597622 242:0.0712373427872987 254:0.0327054381232642 276:0.0789774047652598 294:0.032384773936967 295:0.0287735714034349 304:0.0256602189460943 325:0.0304304627032977 341:0.0566296317262884 346:0.0282337840659532 351:0.0240494271719656 369:0.0303036075313782 373:0.0241919829101067 408:0.0199549056920413 411:0.0507778706638795 430:0.0263752171513896 467:0.0425372175343343 473:0.0895102500446417 485:0.0234517377749596 496:0.0284171088626983 498:0.0348211745950419 500:0.0350702521633651 505:0.048753273725115 507:0.0181199141761427 528:0.070913687822408 533:0.0424437660956528 534:0.0258299858837554 580:0.0306632566673228 625:0.037675357718239 641:0.0268148569211722 644:0.0322906921237297 676:0.0338866642705281 774:0.0380155788365134 882:0.0254485402788698 912:0.0322284956384453 916:0.0821274128859201 950:0.0369268114278857 952:0.0315704607642817 966:0.0338496926914779 996:0.0377312037712828 1005:0.107171400701134 1009:0.0604067098346016 1018:0.0367739585631404 1036:0.0383089261894123 1043:0.0758015661178513 1218:0.0412254207778136 1273:0.0454983085625682 1527:0.396584668338168 1551:0.0362818680871122 1576:0.037564661888488 1578:0.568198495964977 1697:0.0463073699193101 1700:0.0487047526087527 1808:0.306663839247185 1892:0.179982292651157 1943:0.0406713132038203 2142:0.0881299262973707 2404:0.0530386133325198 2645:0.0574088668224338 2791:0.0530386133325198 3658:0.0629677584487493 3708:0.0530386133325198 3743:0.0723739675492149 3969:0.102881382470042 5801:0.0686038151642391 5953:0.324168313896317 6099:0.0702991029668972 6355:0.0638539848946655 6799:0.28949587019686 6800:0.0723739675492149 8003:0.0702991029668972 8376:0.0750489332364708
++1 6:0.00640587435719798 15:0.0219471040631251 26:0.0277263902215526 29:0.0697946604510224 63:0.0276925715700841 67:0.0362355854986143 75:0.0129825922882556 83:0.0331960508108332 88:0.0489146917253019 102:0.244154992952201 141:0.0585156663581338 142:0.0116279556192928 158:0.0459784569308699 173:0.0478804786209802 204:0.0384556703269917 215:0.0408096874265788 232:0.0568590317249848 252:0.0462306356028984 306:0.0502674014615244 308:0.0473311666670924 322:0.0555166580972233 327:0.107745584963317 342:0.0598418269491112 355:0.0385538636099263 373:0.0914596905245062 426:0.0576678385093415 453:0.0621338356790351 458:0.0674431989562659 506:0.0358373941534126 557:0.0602882395652539 574:0.0479643764028592 609:0.0453633993571229 671:0.0391208983300562 687:0.0720801498160277 717:0.0649166617407062 723:0.0657448323608116 824:0.0716434428315844 852:0.0635721252443107 858:0.0642669410846079 1005:0.0675283155968488 1009:0.114186154305859 1057:0.08727000958133 1225:0.0571402625555804 1227:0.0699976517570779 1242:0.0813185510814076 1274:0.0892095479386859 1347:0.0967812262345381 1351:0.0850546483050435 1436:0.0860049636274862 1599:0.0776222829070636 1776:0.0741918725523801 1828:0.08727000958133 1924:0.0883519850844211 2024:0.062386740070089 2223:0.162637102162815 2433:0.08727000958133 2470:0.0954786636134486 2561:0.0954786636134486 2913:0.0942660068248629 3335:0.0938796934295253 3735:0.103907904763566 3837:0.120702501298122 3867:0.714163661839212 4387:0.136807732931154 4856:0.23218208435754 5474:0.12462459551595 5833:0.12462459551595 7035:0.132885638713327
++1 6:0.0267609959008424 15:0.0916855887453835 29:0.0647938133060553 37:0.0422063347271353 63:0.0385625626806167 75:0.0361571353245926 80:0.116162330735713 83:0.0231131440231537 96:0.0552683227344263 142:0.00693951598868712 154:0.128967191968835 158:0.0640260917216551 179:0.145879413902384 243:0.0841107121288789 256:0.0607055658309729 325:0.160202547170961 327:0.0750191412016813 331:0.0697329862521132 345:0.0654620322090397 351:0.0633046485115372 414:0.0659097721108073 478:0.0699540877142683 480:0.131220741270641 496:0.0748015774098862 507:0.0476965538421256 782:0.101636863961029 837:0.0967990840102478 987:0.072825815027016 1007:0.102969207307135 1124:0.0991718123199114 1175:0.0945147133459116 1308:0.208395279440954 1312:0.115990995704592 1471:0.103313942096451 2206:0.115132108792693 2223:0.113238010967581 3219:0.136729259374375 4512:0.293306656491012 6782:0.762032050797322
++1 102:0.293714522522 111:0.192770270215731 204:0.185046207112661 252:0.222458838917166 1776:0.35700650899245 3837:0.580812656867182 3867:0.572751585385306
++1 6:0.0536875001814069 15:0.122625482764519 28:0.132151690641614 29:0.129988356057907 63:0.0386818113679759 75:0.0362689456044704 80:0.116521544556006 96:0.110878462738271 142:0.0139219507107278 159:0.107660550879035 180:0.137906903003484 229:0.0937180876591441 327:0.150502252300239 365:0.189613970597578 413:0.154734923658359 507:0.0956880959340901 527:0.170686546449807 723:0.183668692332453 737:0.210878984378138 1614:0.226142580005509 2246:0.22665675125629 3719:0.298486172849392 3868:0.337201720327098 3957:0.311146331310857 7131:0.396320283499889 7356:0.348158717102748
++1 6:0.0200085269233632 15:0.0342755101060844 26:0.0216506051438648 27:0.00728250396400576 28:0.0184691081576455 29:0.0454169181569293 30:0.0300670233135117 40:0.0156271401610473 41:0.0115164949419504 57:0.018672376191155 63:0.0756846905392027 75:0.0354818431089562 79:0.0169610228727952 80:0.0162846876846774 81:0.0456837866390156 83:0.0129608395232486 96:0.0464880845048016 134:0.0179125235258832 142:0.0181597585356062 145:0.0209879245743884 158:0.0179515149318042 171:0.021625270376309 173:0.0186941272996348 174:0.0183334199398589 180:0.0192734386892151 186:0.014192648552554 200:0.024161769135904 205:0.0395804253641327 226:0.0193929969219397 227:0.0355555445197303 229:0.117879728969842 274:0.0270293590000155 275:0.0168186602657021 276:0.0194292743754806 288:0.0259767492728058 295:0.0212358059329039 312:0.0226692245511937 317:0.0149068942460392 320:0.0474801026896054 325:0.0224586441271088 327:0.0210337254272483 345:0.0183541212194491 346:0.0208374258019469 348:0.0248473171138717 355:0.0301054147733983 398:0.0194535663264398 402:0.0190633467005628 405:0.0237856493130972 408:0.0883641099835805 409:0.0127730313766458 413:0.021625270376309 423:0.037898699155729 457:0.0172461003333784 478:0.0196135952761691 507:0.0267461397523636 510:0.0226111497139368 515:0.216838035523484 535:0.0237173654762745 546:0.0216085936512605 557:0.0235385288026317 565:0.0266025394528218 574:0.0374537675540175 582:0.0210952726467987 586:0.0551558721019523 613:0.0231315861606921 631:0.0167855880620287 643:0.0203490944337436 647:0.0225919001389582 764:0.0231315861606921 804:0.0235606301711079 851:0.0284064554228611 856:0.0563124111851877 1031:0.0307334502981163 1080:0.0252884307964596 1098:0.0280566997846793 1145:0.0328561577643832 1149:0.0239946746796227 1225:0.0223094541431864 1359:0.0555292715018416 1380:0.0772795758343776 1411:0.0633536814139669 1433:0.0241136112612176 1509:0.0632099634729234 1528:0.6018057406351 1581:0.0356816745161555 1598:0.0261682724655344 1608:0.0271031497000307 1685:0.0358123921632708 1734:0.034605347920756 1783:0.0362201835429495 1986:0.0387281399020687 2007:0.0337725128041529 2024:0.0243578530179612 2042:0.0321245517645579 2164:0.0645610473651039 2188:0.0393620489460665 2223:0.0634989202080188 2340:0.0347169352408406 2388:0.0403101013584962 2401:0.135485020274329 2421:0.560847413398865 2424:0.0350630154095005 2427:0.0806202027169924 2529:0.0381478674496788 2666:0.0337725128041529 2913:0.0368045763611072 3018:0.0942525216806296 3046:0.0383358920601342 3348:0.0847391196300085 3520:0.0478492941107552 3553:0.0801210590569807 3609:0.0400605295284904 4047:0.0400605295284904 4602:0.0458750848123932 5121:0.0471262608403148 5122:0.0471262608403148 5192:0.259414809328127 5201:0.0518829618656253 5583:0.0929443953758193 5833:0.0486575765393418 6409:0.0553884868630143 7215:0.0553884868630143 9591:0.0534142775646523
++1 15:0.120004142471016 63:0.0757098361252308 75:0.07098726329095 81:0.213261835188879 111:0.219047988463987 142:0.00908289597942109 515:0.253061757773579 1528:0.526754974729242 2401:0.47435511901551 2421:0.561033750117451
++1 6:0.0203007907251941 27:0.0591110338087107 53:0.156343600429416 64:0.176073963068033 81:0.247205802644782 142:0.00526429069913804 185:0.118216413157813 719:0.218506889213321 733:0.22913355736153 7006:0.776771631264039 8400:0.402384449097053
++1 6:0.0416145054795591 15:0.0475250179948306 26:0.180119052211304 27:0.0403904864861936 29:0.0503785903345528 63:0.0599664519932104 67:0.0784657897425423 75:0.0562259084701349 88:0.10592156476637 134:0.0993470848737925 142:0.0107912473514343 144:0.0824689821907882 178:0.223898402332154 180:0.106895041700881 192:0.112024346053843 204:0.333092952771705 208:0.103924470714805 220:0.111279491102329 252:0.200218833666691 255:0.12910927627122 274:0.299822414053337 314:0.110693927655804 322:0.12021769102177 351:0.0984414650383771 355:0.0834858693229841 394:0.129227294577532 404:0.116488471114282 457:0.191301888992506 541:0.143039794589039 731:0.159856334988844 795:0.328678520369315 895:0.144248177772708 1036:0.156809839634304 1230:0.193817133271118 1340:0.186238121999364 1949:0.17260993650442 2399:0.201670478102531 2968:0.211577080125038 4397:0.25774578111795
++1 6:0.0219544374912403 15:0.0752178855531579 31:0.0836785602778 85:0.0672715176397002 88:0.167642148753628 179:0.0598389627509687 205:0.0868595652105598 229:0.114972454874542 255:0.102170679530053 275:0.0738173733436842 430:0.0854354696293359 477:0.117370562381031 480:0.0807390793429838 499:0.163526667465709 507:0.0586946211057244 586:0.080693339792927 655:0.0831194239602932 895:0.114150855536124 952:0.102264073365888 1007:0.126712269998661 1064:0.101708005487134 1124:0.122039256080263 1863:0.132245856570393 2382:0.763422695224544 4402:0.21758079167293 8145:0.255313370774214 9390:0.255313370774214
++1 6:0.0135089847033038 28:0.0498785144035698 29:0.0245309994085274 31:0.0514890163429745 54:0.050574674977949 60:0.0512673001997033 83:0.0175013166668554 94:0.040548489810676 97:0.0421470060409041 111:0.0422410351425626 226:0.0523736104658053 333:0.0681419206551371 405:0.0642366075142864 448:0.0611691125065444 478:0.0529693684252541 861:0.09017770437174 882:0.0507230592468364 1010:0.0752043953552148 1027:0.141168026702499 1038:0.179366918367145 1080:0.0682950876110787 1337:0.0869664428958236 1535:0.100238673213545 2024:0.0657819268925271 2186:0.106302941568819 2240:0.275234443730777 2398:0.0982000160424802 2913:0.198792229324277 3734:0.109562740207829 9162:0.849726783578967
++1 144:0.277794493900919 178:0.377097799128849 204:0.280503608081131 220:0.374841899234402 274:0.504971769746189 795:0.553572269213088
++1 4:0.0392412252361487 6:0.0181440928814854 15:0.0310816504037045 29:0.0329479040445674 31:0.034577783431599 37:0.0429241680866647 63:0.0196092118997854 75:0.0183860428089634 142:0.00470502753775797 144:0.107870430428126 174:0.133000605391158 179:0.0989069930412486 180:0.139820012962334 245:0.104895160069553 337:0.0693572996584167 351:0.0643813160025347 404:0.152368335163176 414:0.0670307468044403 507:0.0485077632898026 527:0.0865271955839118 561:0.080392822738906 641:0.0717844863688554 727:0.0971280686968537 850:0.0831614559515561 960:0.104547013942871 1007:0.104720478354177 1273:0.121800862873031 1565:0.136432073391974 1955:0.136432073391974 1980:0.112647442095884 2578:0.137062285338953 2709:0.135817423835179 3382:0.160846916635044 3456:0.176494269967857 5075:0.166401415350605 5423:0.188193620182456 5516:0.15496271717511 6106:0.200909113210926 6940:0.200909113210926 7234:0.539454417119441 9189:0.456511633516678
++1 6:0.0330947312150275 29:0.0400645372785448 31:0.0420464649718188 60:0.0837308185375993 80:0.0718276914516571 142:0.0114425944016409 199:0.10313149899401 265:0.104214405991033 325:0.0990594718191861 351:0.0782874574217607 436:0.0974404422166046 496:0.0925054548796642 499:0.328672877388371 560:0.262823612037839 1135:0.299679069940598 1448:0.138470267202094 1783:0.159758186231184 2134:0.150287967427984 2404:0.172655180237272 2448:0.163016019764251 6710:0.732914358826938
++1 6:0.0451424909711088 15:0.0773311254456898 26:0.0488472865078703 29:0.0819743632577283 31:0.0430147510420518 41:0.0519661713155673 47:0.0534157434874645 63:0.121969265275299 75:0.114361155572703 94:0.0677497189971232 96:0.0699231197132492 134:0.0808271328153363 142:0.035118316114683 158:0.0810030747221523 179:0.0615201331572241 198:0.0982658695944685 209:0.0708943034732077 229:0.0591012979513944 276:0.0876712060242863 306:0.0885591720226365 325:0.101340707750707 382:0.0991249981309691 429:0.12879236911152 475:0.0914486481872505 640:0.105330106817497 649:0.151093112971182 731:0.130056450432645 867:0.0992042957217907 880:0.132750817958548 882:0.0847497163690375 890:0.118521081248056 968:0.313308209376321 1045:0.0586265533003518 1138:0.111287035651155 1433:0.10880845779499 1465:0.178629728273603 1625:0.15239256344783 1700:0.162198457128923 1709:0.143929846130339 2195:0.175678382573335 2264:0.45987054778499 2657:0.181892289581358 3767:0.18076614030252 6749:0.24993086974308 7012:0.24993086974308 9351:0.28395015982394
++1 6:0.027551003557983 26:0.158997785063887 27:0.0267406382477953 28:0.0678167485310019 29:0.0333532912516575 63:0.0397009627577115 64:0.0796523059720893 81:0.0559154570250966 94:0.0551312878838609 97:0.0573046920941585 134:0.197319073526722 142:0.0285775059199468 172:0.0720191926583193 174:0.1346370294832 176:0.142808931011794 178:0.0741162920019546 192:0.074166041891959 198:0.0799637847354114 204:0.220525151535443 215:0.0585060826357749 226:0.0712091771996715 387:0.0648273201913204 409:0.0469013148580216 442:0.0781501741007601 506:0.051377642809997 531:0.103336424938873 717:0.0930666176523274 834:0.0925448948516946 867:0.080727428360049 987:0.0749756958357134 994:0.105142940455612 1614:0.116050384266187 2528:0.105658964859318 2997:0.316463526433423 4556:0.162825958525403 4887:0.449862046616652 7393:0.610143227226723
++1 6:0.0359656783953411 12:0.121226208311892 15:0.0616108311238178 26:0.155669371293801 27:0.0523617148799481 28:0.132794184557589 29:0.0653101661465072 64:0.155969775148684 86:0.558791388347478 94:0.215908741623029 108:0.166467475906444 134:0.128792301971745 142:0.0139896363270579 158:0.1290726529183 185:0.104718420928503 192:0.145226942727937 259:0.218762665538136 308:0.132870036430869 408:0.105890692620957 565:0.191274126700925 592:0.177141449162753 631:0.120689556853019 906:0.210420163168153 2862:0.304640110268041 8361:0.398247109934647
++1 27:0.0799828930653209 64:0.238244944340366 142:0.014246179534484 204:0.16490107163885 387:0.193902500401283 834:0.276807470340568 2997:0.473280932176062 4887:0.44852167993974 7393:0.60832530180699
++1 6:0.0457248255614875 15:0.104438254525821 29:0.055354550739827 31:0.0580928506057973 80:0.099239623394193 96:0.0944334966258893 159:0.0916928501450773 162:0.0825486180986745 174:0.111724690432418 179:0.0830849840618049 199:0.0712450234261846 228:0.115272012993351 245:0.176230465299954 256:0.103723770913371 265:0.143986228622709 277:0.138028976543723 322:0.13209175233562 346:0.126984215425598 351:0.108164659534595 381:0.146513049196136 499:0.22705290893179 507:0.0814960927611307 550:0.124177614745186 697:0.163397388883477 796:0.133978697800326 847:0.162539508618968 850:0.139716475647176 950:0.332163918685886 1548:0.167731420323356 2709:0.228181812987786 3653:0.231359558540601 3691:0.467241320704951 4315:0.252357142236872 5297:0.264998587664041
++1 6:0.0642599071783165 15:0.0550400613284181 29:0.0583448637926795 31:0.122462179192977 37:0.0760110487466189 63:0.034724418155012 75:0.0325584037735542 81:0.195625655016733 83:0.0416253704186743 96:0.099534896850672 142:0.00416588245583043 179:0.350293301165945 185:0.0935502444129789 229:0.168260272695419 473:0.141443002460202 513:0.120217251190377 586:0.118093358736036 684:0.15035160009036 764:0.148580011438788 1122:0.196211903436031 1305:0.146112480645342 1311:0.196211903436031 1446:0.167671519564551 1573:0.207345944401944 1951:0.200334473048683 2340:0.445991260553437 2605:0.233560258390687 2825:0.216929366793043 3167:0.248760609396973 4301:0.302703858095989
++1 6:0.0341837829297981 28:0.0841433237054174 29:0.0827658902327449 31:0.173720369230177 37:0.0539132470974062 42:0.0681725187214947 63:0.0246293948994895 75:0.0230930805019162 80:0.0741913326619511 83:0.0295241141637698 98:0.0739131133361638 142:0.00295478425733371 174:0.0835251423869271 179:0.124228316894297 180:0.0878077694223589 204:0.0684038958397955 229:0.0596719674842573 245:0.13174952331595 478:0.0893574872301866 586:0.167522920288131 1001:0.133562476974497 1047:0.128411455617856 1064:0.105575144984762 1191:0.190051436661293 1305:0.103634911015456 2709:0.17058824102485 2889:0.172151801341722 3025:0.243349858003458 8555:0.795062670050463
++1 6:0.0245979810783082 15:0.0842749046212252 28:0.0908218330584884 60:0.186701237427537 159:0.0739901890883688 162:0.0666113863015564 180:0.189554256345647 245:0.142206567142846 351:0.0872818720214403 413:0.106342259691017 427:0.130648824492077 467:0.154379060691635 531:0.138390644464015 608:0.13420434035257 2837:0.184961220254479 5268:0.248981789567434 6464:0.787994075053658 7592:0.262664691684553
++1 6:0.0107547058526741 15:0.0736931870203533 60:0.163258674317309 172:0.0843394213743106 179:0.0586260015245264 180:0.165753462743945 768:0.13440473294307 1010:0.119742699934472 2734:0.356133912103747 3179:0.185300263168013 4930:0.572041144305871 6307:0.639511009444345
++1 6:0.0253480721415074 27:0.0738075067924701 28:0.187182709756669 29:0.0460296281598834 31:0.0483066392264764 142:0.00657312427983474 159:0.0762464466008419 185:0.221411929929087 204:0.228253877147146 245:0.146543015520561 411:0.0949531281432909 643:0.103118098737911 644:0.120765293501805 689:0.1583911691064 965:0.126595864132257 1155:0.147536661561013 1296:0.129024691540129 1509:0.160156789183997 1576:0.140489630909012 2866:0.347435551905435 3478:0.256574242568325 5137:0.238810156112982 7247:0.502427229678033 7696:0.262914519459064 9794:0.318883117921705
++1 6:0.0197935604705947 26:0.0856719865048465 27:0.0288170504787295 29:0.107829529204677 31:0.150884908220654 41:0.0455710587622765 47:0.0468422422447876 60:0.225352777196969 63:0.042783744996717 75:0.0802300236294575 84:0.058083739109265 88:0.151141882368852 134:0.0708803039721074 142:0.0256637925336728 172:0.0776114874686374 176:0.102598702285888 199:0.0462612813312583 205:0.0783103669647995 215:0.0630490836084231 275:0.0665518596703584 319:0.0897797244009139 345:0.0726277170994705 387:0.0698611656551638 477:0.105818303242048 480:0.072792293127671 505:0.0711897655723567 571:0.0781088449895772 867:0.0869959182167744 952:0.0921986783284549 966:0.098854969247378 997:0.0941204097261974 1159:0.100636260929993 1277:0.116828692655968 1469:0.336157165122051 1863:0.119229488801801 1936:0.266506990660988 2968:0.150952066402803 5736:0.709371612604158
++1 6:0.0401357084751063 15:0.0275017123793764 26:0.06948736443754 27:0.0934924457957881 29:0.0583060274321204 63:0.0694026087610674 67:0.181625903338301 84:0.141332754569156 94:0.144565330575799 97:0.0500881445855089 103:0.0764133031193232 107:0.307138914739729 134:0.172470105380648 142:0.0333048760023485 153:0.139242916148777 154:0.058026872081595 176:0.124824584570971 192:0.0648260952788198 198:0.0698937114058777 199:0.0375218860488412 204:0.144565330575799 226:0.0622415972069389 306:0.0629896141685604 345:0.117814675537423 355:0.144934465849923 363:0.149974475746531 405:0.076339763771964 417:0.0939269070180562 453:0.0778593327373573 477:0.257483290683111 561:0.0711332976085489 571:0.190059014586257 799:0.242942692356107 882:0.0602800569727104 987:0.0655337871329591 1045:0.0416993958737303 1058:0.0900476503958191 1731:0.299018634392485 1894:0.251265542023445 5440:0.162502125517955 6161:0.499553281116114
++1 6:0.0291902127928943 11:0.16396388787895 15:0.0250020763001134 26:0.126343288272042 37:0.0690563925456014 48:0.0446437964157415 63:0.0473209439398135 75:0.0147897308925419 88:0.111446945455307 94:0.131425759078105 96:0.045213959169401 97:0.0455356232143971 134:0.104529508920063 142:0.0208159800978672 176:0.113479253383281 198:0.0635410581480121 226:0.0565844461225545 252:0.0526658038993152 255:0.0679221200239541 275:0.147219315223248 276:0.453522365222858 304:0.0552570220392078 306:0.057264475674542 317:0.0434949975867503 351:0.051788323788792 373:0.0520953050184076 413:0.0630977229264438 430:0.05679670771652 457:0.0503202799993335 475:0.118265759942968 506:0.0408258538549654 587:0.092425966627636 671:0.044566412140927 683:0.0882552023986633 723:0.074896319363837 737:0.0859921174400168 761:0.0742057972741139 799:0.0736205276608802 867:0.128295733788443 1017:0.0859921174400168 1043:0.652927992294956 1135:0.0991210930711224 1159:0.0742057972741139 1725:0.105277907238911 1863:0.175831637490534 2024:0.0710707905180274 2376:0.101296285436582 2532:0.106947470217719 3929:0.126879081583283 4176:0.121716529058488
++1 6:0.0129054641690775 26:0.0558584067669137 29:0.023435064947626 60:0.0489769083542451 88:0.0985449863987777 94:0.0387369660899758 134:0.0462141828684279 142:0.00334657481637007 144:0.0767256860889253 145:0.0541486956267226 159:0.0388193539584951 192:0.0521113792198853 255:0.0600589308804422 306:0.0506350977447283 513:0.0482870111666118 553:0.0824876509778416 703:0.185479031548936 947:0.0784979977466522 952:0.0601138305244192 1140:0.0655402979239031 1197:0.106085136739367 1268:0.0873875963630001 1482:0.0764471814375241 1670:0.108449326202628 1863:0.0777380046361527 3759:0.106085136739367 7816:0.75040354819559 8184:0.535430685452893
++1 6:0.0306922121870444 12:0.02586285504781 18:0.0205368192533698 20:0.021641637408232 29:0.0557340655528797 31:0.0146227848503141 51:0.0260564852098438 52:0.0312786204464196 60:0.0582392715124393 65:0.0274472553104647 68:0.0471046507047802 72:0.023875608430558 78:0.0294741045888512 83:0.00994068274724626 84:0.0450327885174296 98:0.0248863287298116 102:0.109669701672853 132:0.023268623455233 135:0.0349540695505287 139:0.0313861467099584 142:0.0139281408465284 179:0.0209136551840393 199:0.0358667422360136 204:0.0230313913381868 206:0.0731839024457724 215:0.0488824599086968 236:0.0529146710142428 243:0.217049979201589 253:0.12576636657194 279:0.0434375574463928 283:0.0287598589602089 318:0.0463086228812008 325:0.0344505856739342 337:0.0879926447029251 351:0.0272265610705636 411:0.0287430296525915 449:0.0438531402173063 472:0.0349540695505287 485:0.0265499118201489 499:0.0285762000170827 533:0.0480509486319527 550:0.0312572463686752 554:0.0487022942802708 576:0.0375563398550639 586:0.112808952996129 597:0.0343069718547489 607:0.037634315986961 630:0.10616620456453 643:0.0312146279717068 644:0.0731131344485689 654:0.0801829139039558 658:0.248379946894795 688:0.170358986451567 763:0.0444340726955783 767:0.0733976449856457 772:0.0710936840622242 819:0.0385324885951834 829:0.113843890961452 837:0.0832642225917836 856:0.0287935985072734 876:0.0370261046982689 916:0.046488571360079 951:0.150037169194706 966:0.0383215250281991 987:0.0313214992416435 1007:0.0885716128926711 1046:0.0862066949635619 1075:0.0536051958742227 1112:0.0462197891922239 1114:0.0469523789620147 1133:0.0447370210756516 1135:0.0521107133122927 1155:0.0446604627042211 1162:0.044508996354734 1199:0.055560190063559 1245:0.0750351346524981 1273:0.103018044282579 1292:0.0460443396362745 1296:0.0781134988887978 1331:0.173479444809329 1351:0.0509398711188334 1375:0.0481567458006005 1380:0.197572527312838 1493:0.102441201093414 1527:0.0997726392118269 1561:0.051079300040282 1598:0.040140994594797 1677:0.0603796752752866 1700:0.330834388323732 1707:0.0438531402173063 1711:0.0557772437259822 1782:0.0472408005565972 1836:0.0818269456370511 1849:0.0948751351756377 1936:0.0516562515296922 2010:0.0562252572819354 2020:0.0639897619630073 2023:0.0562252572819354 2066:0.0513638235679167 2075:0.0626440946179963 2142:0.0498863196059135 2184:0.0622312287730684 2195:0.358329242269889 2251:0.0553475216249745 2277:0.14679748224071 2365:0.0530831022822648 2382:0.200111577895009 2433:0.052266667715428 2461:0.065533017104877 2490:0.126147633438008 2683:0.0543442171271354 3613:0.063073816719004 4008:0.0733987411203552 4053:0.0760442601696714 4513:0.0746386112967184 4900:0.134684076607393 4909:0.0712863349560291 5365:0.0760442601696714 5627:0.0819351842897402 6060:0.142572669912058 7710:0.0795862124468901 7805:0.089231757282762 8420:0.0819351842897402 8759:0.089231757282762 8844:0.089231757282762 8878:0.0819351842897402 9455:0.0965283302757838
++1 6:0.0170284398967631 28:0.0628732138880355 29:0.0309219869746006 31:0.0324516475292686 60:0.129247631749328 63:0.0184034709499928 142:0.0132471674107912 159:0.0512211747716362 180:0.065611345318985 365:0.0902117836832813 408:0.100270778996687 850:0.0780479830900455 1305:0.0774376342602539 1340:0.114311510988997 1627:0.113671430729113 2026:0.512866845507519 2933:0.181834838441133 3952:0.142009420364323 6619:0.529865632494856 7661:0.529865632494856 8681:0.188555513983026
++1 6:0.0164195861915008 31:0.125165341485997 80:0.106909552737943 159:0.0987795122855239 174:0.120359552720893 180:0.126530809180021 245:0.18985078318143 346:0.273596880189766 586:0.120700086106845 1191:0.273863716443021 2024:0.15991016973921 3025:0.35066662835852 8555:0.763789078894404
++1 6:0.013577571274379 12:0.0915293444814119 15:0.0232589926891446 27:0.0988365780309179 29:0.024655545936 60:0.0515275898074129 64:0.117761756942387 102:0.129374681501482 110:0.131036387338824 142:0.0158438788985453 172:0.0532382996167607 180:0.104629986408297 205:0.0537177023086331 268:0.195969428309469 308:0.0501603881911804 411:0.0508611802070603 437:0.0610634072878164 441:0.0957422823364593 539:0.0630717729121919 643:0.16570412070902 644:0.0646873407507411 723:0.0696747311550048 768:0.0848414575975902 780:0.137750316321821 882:0.0509805856845806 1067:0.0722087891594675 1128:0.816757812116837 1129:0.0791627646200691 1155:0.0790272935450728 1296:0.0691114470465875 1395:0.14498347853802 1576:0.075252585929593 1614:0.0857872033850103 1872:0.101185902821945 2301:0.120364820062452 3300:0.111609972827033 3793:0.114097287542957 4107:0.116968681653869
++1 6:0.0141614258863954 15:0.0485183240070452 26:0.0919418329939454 27:0.0206173379077151 28:0.0522874887020128 29:0.0771473069974187 31:0.0269878863926062 47:0.0335135734112928 63:0.0306098963252994 64:0.0614128388461586 67:0.040052889728642 94:0.042506853466102 97:0.0441825729683264 103:0.0674039010380332 134:0.101423508215955 142:0.0110167919451184 178:0.0571445087626944 198:0.0616529925348993 204:0.042506853466102 226:0.0549030900029858 252:0.204403546889974 292:0.0698226027668305 308:0.0523173552506148 322:0.0613651622920744 323:0.0605720649880312 345:0.0519619516928347 355:0.0852307822011341 373:0.0505473397046925 387:0.0499826052635931 389:0.0603448321515865 423:0.0536470896973398 475:0.0573757994233693 506:0.0396127501856816 527:0.0675342920378006 553:0.181030723197779 609:0.0501422898834262 714:0.0732766700529644 723:0.072670842337468 853:0.0749272250625341 867:0.124483541005774 987:0.0578071189470736 1518:0.0907300398720285 1713:0.116409358230008 1880:0.197868046492641 3609:0.340243470432622 4740:0.116409358230008 5190:0.587538880431069 7101:0.146884720107767 8121:0.440654160323302 9289:0.17815317928957
++1 6:0.0170741250568089 26:0.0492676802175835 29:0.0206699645146669 31:0.0433849482844318 60:0.0863962579137544 63:0.012301896763475 96:0.105787347101454 100:0.035169403499683 102:0.325383597184198 134:0.0407613771115877 142:0.00295171286508659 150:0.0496336728045447 176:0.0295008920720791 179:0.0620495930074832 199:0.0266036321564128 275:0.0382722039477773 345:0.0417662679128774 355:0.0685072744164754 373:0.0812584463674227 530:0.0935730437611788 561:0.100869347622195 755:0.0594013617348506 757:0.0540741765605778 772:0.15819810511281 952:0.10604201409788 1863:0.0685657070232726 2484:0.182321865374374 2907:0.0848291506561327 9054:0.859181748182693
++1 6:0.0559347858724997 15:0.127758418584755 26:0.322801564851648 41:0.085853087342483 63:0.0806019586949394 68:0.114460677504067 75:0.0755742286138319 83:0.048310188700214 94:0.223858036689583 96:0.115519684287423 140:0.131753939844255 142:0.0338443107806323 176:0.0966448398151694 289:0.162217517639283 298:0.184835030998425 317:0.111127812773008 325:0.167424545884607 351:0.132316897784631 413:0.16121191697477 423:0.141263480997641 427:0.198059995227346 467:0.234034375300803 475:0.302163833948648 480:0.137136227893016 1245:0.182329604835861 2466:0.59022680621628
++1 6:0.0201362116471954 15:0.0459923197381614 17:0.0365748286160261 28:0.049565250818212 68:0.0412052069486231 80:0.0437029564555964 83:0.0173913990946683 94:0.0805876474790126 96:0.0415864434974513 186:0.0380885844231122 245:0.0776080368681052 427:0.0713004961140135 478:0.210546770534296 518:0.0585350134835399 571:0.0529740042328303 644:0.0639563565495258 781:0.290945161266916 814:0.0745115098749912 884:0.069295757359925 1109:0.0928698199557472 1411:0.0850106318815526 2237:0.0968314613749607 3559:0.123114233000566 3781:0.123114233000566 4977:0.135879715631039 6115:0.417712430309783 6989:0.135879715631039 7552:0.743225991307565
++1 6:0.0322141722639885 27:0.0312666478791069 31:0.0409277252289298 67:0.0607410910803149 81:0.130758951196475 96:0.133061062144737 142:0.00556906936041277 185:0.18759091453371 196:0.49926802073478 339:0.0835217957076234 388:0.111663843988702 389:0.0915142695265923 455:0.0784035866420823 502:0.0741201163574053 608:0.117171723021478 687:0.120826720054668 795:0.127216536068785 867:0.0943910183941697 1134:0.130629320452129 1613:0.123138750669922 1916:0.131150807921205 2458:0.17910100038368 2470:0.160049247803461 6784:0.687985375601044
++1 6:0.0537249618467648 15:0.061355523731821 27:0.0782171019613187 28:0.0661219512336786 29:0.130079058368102 30:0.161466127571642 47:0.169522990816923 63:0.174189611138309 75:0.163324138860506 81:0.109036165923883 83:0.0464015907854769 84:0.0525515469572134 142:0.0464388835538434 154:0.194184406300214 158:0.0642688961892316 159:0.0538678367295355 174:0.196908506170843 176:0.0464133387726924 185:0.0521422406031606 192:0.0723125704402247 205:0.0708516874067914 221:0.0852379329746805 229:0.046891740785344 255:0.0833410233018607 256:0.0609357779553455 280:0.093802183713324 310:0.0918984256546144 314:0.0714537752094373 325:0.241215118630268 345:0.131420564312094 346:0.149201709248897 373:0.0639213856682546 462:0.110029985449703 498:0.0920064196052911 499:0.0666946714381329 524:0.101221948386344 626:0.0845093218918774 658:0.082814264718124 693:0.106469161656871 795:0.106082246822362 804:0.0843503013741266 952:0.0834172050193984 1027:0.0935704028978582 1311:0.109362924088162 1410:0.123498806539782 1472:0.0910511491333608 1720:0.116430865313972 1816:0.196796563641269 1842:0.137247774156893 1969:0.122355875617709 2218:0.398647197568518 2528:0.206036917816401 3217:0.311363440688301 3614:0.142560069807786 6126:0.164239122696904 6812:0.174200826354005
++1 6:0.0204520929740414 15:0.0350353587801506 29:0.0371390072361734 67:0.0578448407088842 88:0.156170378496159 96:0.0633582292269006 142:0.00265176278792763 176:0.0530060824904213 199:0.0478003959060707 255:0.190358257896916 275:0.275064170207398 289:0.0889702454660138 514:0.10862850479292 586:0.0751714858779385 631:0.0686308210461433 737:0.120500579656345 761:0.103984433127016 799:0.103164296005738 1018:0.110968060006914 1036:0.115599935016191 1373:0.118636235939036 1709:0.130416666491936 1948:0.153786770596903 2650:0.355590799068647 7838:0.713526748112795 9103:0.257290855855955
++1 6:0.0175362439543038 15:0.0600807554879676 29:0.0636882192879545 31:0.0668387722236974 80:0.114180222083095 159:0.105497276540546 174:0.128544925196531 179:0.191186979705978 204:0.105273375448373 245:0.202762092171879 264:0.144359363855321 322:0.303956526661078 346:0.146101782961731 369:0.156812529279271 499:0.391853838412916 530:0.144158460607772 697:0.187996986610943 761:0.178318804738449 847:0.374019903676435 1034:0.221099971717539 1309:0.207010402026562 1486:0.239627436891755 2340:0.243418077926873 6171:0.330426166769903
++1 6:0.044952495840821 15:0.0770056552082641 26:0.048641698682196 29:0.122444025931866 31:0.128501133347912 40:0.140435916303892 63:0.0242911845228252 81:0.0684241685806927 142:0.00874262765036751 144:0.0668129995095539 171:0.0971695597952852 174:0.08237817673946 179:0.183783624056996 180:0.173203989645757 204:0.0674645748588421 229:0.117705106350799 286:0.0629700423110801 320:0.106671976745276 345:0.082471194500162 386:0.0895036620849268 387:0.0793296830859227 402:0.0856579813747859 502:0.0775718570767546 521:0.110818652219425 582:0.0947881030470988 586:0.165222498771412 658:0.103937939525767 782:0.128045422564181 994:0.128664213181258 1001:0.131728399611651 1134:0.136712669571164 1141:0.299247510556708 1389:0.143324076061396 1504:0.157022721587957 1897:0.300075318000326 2240:0.305290033726778 3079:0.165375249475662 4492:0.174018462682293 6147:0.240008182437639 6231:0.199251359609822 6233:0.211754023925076 6493:0.233127469743981 9267:0.282755074075449
++1 6:0.0114800536886176 17:0.0104260176521945 26:0.0331258914954446 27:0.0222847753699079 28:0.0141290663420824 29:0.00694888615319028 31:0.0145852725667063 40:0.0119549302645161 41:0.00881024246943486 60:0.0290449342512584 63:0.0248141151912564 64:0.0165949081865083 67:0.0541152338940224 75:0.00775542614876806 88:0.0146101129436418 94:0.011486154097751 96:0.0237092563603393 97:0.0358168954063394 102:0.054694181292477 111:0.0119656007205537 140:0.0270411744588904 142:0.00992315039623778 143:0.0168594408464405 153:0.0663796327460332 173:0.0143012084053736 176:0.0198353838760555 179:0.0104300023678038 180:0.0147443878478372 192:0.0154518898195497 193:0.0185584805888252 198:0.08329901122981 199:0.00894368304237236 204:0.011486154097751 205:0.0151397255093276 218:0.0217064122100665 220:0.0460474485125486 226:0.0148358511815016 229:0.0300597534142822 232:0.0169829727238869 242:0.0268138372938578 265:0.0361503759656223 274:0.103388751431696 276:0.0148636038235581 278:0.0330361591166864 286:0.0107209392639072 296:0.0345074352469204 307:0.018374255982656 317:0.0114039343946072 322:0.0165820250817286 327:0.0160910261310973 331:0.0299143734787798 333:0.0579076018477674 336:0.0349861380987806 337:0.0146278190736235 341:0.0159866055327219 346:0.0159408548068983 355:0.0115154830151658 363:0.017873890637813 365:0.101363378589847 372:0.0188873087280957 373:0.0273176904774884 382:0.0168054572081684 414:0.0141371368472278 436:0.0169002960142086 441:0.0134919385222624 442:0.0162819512647404 543:0.0211781156311821 570:0.0221974080228086 580:0.0173125402283531 631:0.0128411553657556 640:0.0535723773890361 644:0.018231393764159 655:0.0144878144416417 678:0.0414117995018057 687:0.0430586023406155 713:0.0382649660962731 772:0.0177278263072538 774:0.0643910311013351 792:0.0209960212188191 808:0.0199697149817096 814:0.0212402449073385 844:0.0419325537508757 858:0.0191956084086452 880:0.0225063125610768 886:0.0164800827997391 913:0.0199697149817096 952:0.0178247495997949 987:0.0156205746139882 1010:0.0213031182643639 1031:0.0235114199601144 1038:0.254045967435921 1056:0.0187884383376878 1150:0.020878041814194 1164:0.0202987296799455 1192:0.0238086613720901 1201:0.0244015830086153 1227:0.0209072890350369 1260:0.0255446013755739 1322:0.0214963865636621 1392:0.091387533782586 1590:0.0884257886723265 1613:0.0219412663664849 1636:0.0558552116418671 1749:0.0299457144078847 1782:0.0235598061327074 1820:0.0244015830086153 1838:0.0293273696584166 1853:0.0281558966821609 1921:0.0289071564439471 1946:0.0266456053399033 1981:0.0549976147673578 2010:0.0280405104425988 2021:0.0279276058209336 2055:0.0294752628907755 2067:0.0477197598993909 2160:0.0296274434754047 2240:0.41581625666274 2296:0.0279276058209336 2369:0.0748261370950421 2446:0.0308376610006743 2526:0.0572892172184083 2564:0.0291835288095573 2838:0.0575484828632581 2852:0.0329662970924 2860:0.0297841674290437 2913:0.0281558966821609 3708:0.0299457144078847 3734:0.0620715850713458 3759:0.0629120115002847 4211:0.0396910237335794 4234:0.091387533782586 4335:0.104024159908969 5833:0.0744471385517032 6364:0.127118364156278 7199:0.0387338606181093 9162:0.673964922089228 9274:0.336982461044614
++1 6:0.0145890578317981 15:0.0999668593429853 28:0.107732823329038 29:0.0529846138555899 48:0.0892505898961891 63:0.0315342219983757 75:0.0295672033416006 88:0.222801518298012 96:0.0903904428250722 102:0.278025380571154 142:0.0189157758662594 176:0.0756214832263215 255:0.135787942913389 275:0.0981055359885334 457:0.100598852119538 475:0.118216747755228 506:0.081617869269883 561:0.129282356286459 574:0.327709390875501 723:0.149730561039805 737:0.171912960458661 867:0.128242564937259 895:0.45512988441545 1626:0.209675861511207 1863:0.175758768612581 1955:0.219400928095855 2455:0.218412489821321 2975:0.207387826426046 3509:0.267595617780402 6248:0.283826270991979
++1 4:0.0167145122991272 6:0.0115925150832723 15:0.0397170035968693 26:0.0836260019385903 27:0.0112515412214113 29:0.0982374278194694 31:0.0294563068796137 41:0.0177930994896782 60:0.0586589309654892 63:0.00835240009716177 64:0.0335149518766374 67:0.0218581439483426 72:0.0240476508430916 81:0.0235273019215911 86:0.0300184225945253 88:0.0295064743182179 94:0.0231973505069909 97:0.024111844276225 132:0.070308876200363 134:0.110700109647515 142:0.00801628799043139 159:0.0232466878830551 174:0.0566506331345137 176:0.0801187844595728 185:0.0450040122795659 198:0.0336460114314856 199:0.0361251901361772 204:0.208776154562918 205:0.0305760758762823 215:0.0246173481118758 226:0.0299623735671659 228:0.0292246615027023 240:0.0347865750748023 277:0.104982554194332 284:0.0469330839348668 308:0.0856537660437582 322:0.03348893325503 341:0.0322864284079354 342:0.0360979752248105 346:0.0321940305858404 351:0.0548454994298734 365:0.0409425435478338 387:0.0818313226461312 409:0.0197344608073044 436:0.0682634216774543 473:0.0340218385292347 475:0.093935430735007 477:0.0413164769165578 478:0.0606064004470539 502:0.0533453760541067 504:0.0410480427564252 506:0.0648538371349408 538:0.0338591358533186 553:0.0987942601280016 628:0.0419898830713406 719:0.124775652500113 757:0.0367137821298813 876:0.0372929067107723 909:0.0680436770584694 965:0.0385976615562795 987:0.0315471951148764 1038:0.102613865378187 1126:0.0412082863555 1277:0.0456154543724899 1306:0.055330502894879 1446:0.0806613726427596 1495:0.0581122417809957 1614:0.0488300118430899 1675:0.0571017076903771 1785:0.0586560831912749 1787:0.111072769523148 1884:0.0581122417809957 2055:0.0595280194522988 2161:0.0513069326890935 2185:0.0482916940500151 2229:0.0549303579355883 2237:0.0557463437607879 2662:0.0608147580097255 2837:0.0581122417809957 3090:0.141754926699268 3117:0.134369025439375 3708:0.0604781398012034 3793:0.0649440905187558 8130:0.0765922184768693 8682:0.0855757643539967 9374:0.80887267628936
++1 274:0.257381960179964 640:0.222276977475001 1010:0.265166096935119 1038:0.316218390148908 1260:0.317961068443923 2240:0.323486603149887 3734:0.386311518804227 9162:0.599216930336621
++1 6:0.018522144023831 15:0.0211528460543114 29:0.0224229387118997 31:0.047064330260967 37:0.0292123586667195 80:0.0401998383767742 142:0.00480306170496797 171:0.0533834231773225 174:0.0452572706794565 245:0.0713871735887344 265:0.0583257263696231 337:0.0472016210002276 347:0.152157383726334 404:0.103695392470995 555:0.213450720535861 561:0.0547119274935588 842:0.357647761528442 847:0.0658412613112069 986:0.0552095469554459 1057:0.0841117385019269 1388:0.0798824727673021 1707:0.0705720112582883 2034:0.0831294075281695 2099:0.179522481294641 2217:0.109465553524346 2561:0.0920233242198006 2709:0.0924315478928455 2771:0.0890696971728969 3691:0.0946347080574906 3699:0.093718784313708 3921:0.0956029980336159 3963:0.367129675883806 4703:0.11324570852619 5029:0.11324570852619 7000:0.128076553993046 7386:0.244753117255871 8644:0.128076553993046 9055:0.621364707495042
++1 6:0.0290587081320315 15:0.0398231033424538 26:0.125774099845962 27:0.0169223977733857 29:0.0422142251341864 63:0.0251241379336844 64:0.050406725252276 75:0.0353354442249725 80:0.037840825625021 134:0.0416234374506803 142:0.0165777617158953 171:0.0502507693883385 172:0.136728683981505 174:0.12780443085327 255:0.0540928995753085 265:0.0549030476271955 289:0.0505642214459623 317:0.0346392388173193 423:0.0440327163141256 457:0.0801497318294952 478:0.0455762279938348 574:0.0870315424191522 631:0.0390047708109451 856:0.0436178282618255 987:0.0474472051306751 1433:0.0560329419018487 1917:0.0723183665085367 2924:0.0899928090235665 5677:0.215975444315625 5678:0.43195088863125 6640:0.113065899992286 7860:0.540688995670652 8220:0.588266909401865
++1 6:0.0160824701370093 11:0.0542019549306555 28:0.029690229724578 29:0.014602099050499 60:0.061033811391109 63:0.0260716724871701 86:0.031233756100512 122:0.129827351360612 142:0.0093834421521717 172:0.031530063309164 174:0.0589442051024256 205:0.0318139866751267 252:0.0870493364808743 276:0.031233756100512 304:0.0608881759862986 308:0.0297071887469194 327:0.0338130100581051 328:0.0407908988993801 346:0.200984677867907 373:0.0287021267430048 408:0.0236751255341868 496:0.0674298971917831 506:0.0224931753700753 515:0.0290483755936594 580:0.109139546248328 685:0.0424914648219274 687:0.0904815480485389 693:0.0478070263989074 727:0.0430459454348501 767:0.038459770394352 909:0.0353992553528419 916:0.0487192683312864 952:0.0749123682468308 996:0.0447654827152292 1027:0.0420151962491348 1080:0.0406527111819511 1229:0.0453804194567683 1236:0.0443098256576412 1363:0.0455218552640608 1485:0.100276309807871 1527:0.104560106703037 1578:0.337064251966677 1808:0.404261766951453 1892:0.213536632956696 1955:0.120929977617986 2223:0.204156856102257 2251:0.0580033044386982 2484:0.064399770386138 2616:0.053384158239174 2652:0.064399770386138 2791:0.0629266731792882 3969:0.0610308483211822 4189:0.125174410214181 4300:0.0728640078975506 4521:0.0769206895200905 5932:0.0769206895200905 5953:0.153841379040181 6799:0.60106720397719 6800:0.0858667434253129 9853:0.0935134335073211
++1 6:0.0415779773836386 27:0.0403550328012911 31:0.158472986981059 42:0.0829187175512153 48:0.169572705377954 67:0.0783969145784338 88:0.211657179319791 102:0.264118791831082 142:0.0143757001122144 153:0.120205486137458 199:0.0647837129247724 252:0.100021543474321 275:0.0931983820469972 289:0.241162138173201 308:0.307207738942666 507:0.0741050984901115 513:0.103711948773835 535:0.131426644803198 561:0.122815764795676 631:0.0930151168032502 671:0.169278772919526 723:0.142241168057326 895:0.28824312118815 1159:0.140929746221835 1359:0.15385405788753 1471:0.160516625159139 1734:0.191760959876505 2024:0.134975821828207 2975:0.197014466965556 6634:0.522287886532649
++1 6:0.0248525200846283 27:0.0361822890260861 28:0.09176165405702 29:0.0451297539294223 31:0.0473622496770085 37:0.0587945485320104 64:0.215552278862603 80:0.0809086104750214 174:0.0910875026473323 176:0.0644107540178246 190:0.106542154576457 308:0.0918140681998432 323:0.106300627758722 886:0.107030402440436 1792:0.146688486642246 3734:0.201562905084648 5676:0.216049464643527 8560:0.289015861944628 8906:0.825574108974244
++1 6:0.0205067458192392 15:0.0351289815718274 63:0.0221626469160569 75:0.0207802015216645 80:0.0667607270389182 83:0.0531342747470054 142:0.00797654678188231 159:0.0616838429106144 174:0.0751597124853933 204:0.0615529288221183 255:0.0954334701646401 405:0.0975116791910752 473:0.0902751288237198 480:0.0754150853751807 507:0.0548242548437821 565:0.436239222843179 593:0.0987579955122662 597:0.0916876694798946 852:0.101754837894148 884:0.1058563428486 974:0.131697854642874 987:0.0837087948840651 1055:0.111882934078511 1059:0.0939904160707102 1471:0.118753021636733 1573:0.39701183196874 1936:0.138054776063516 2237:0.147919941484999 2843:0.57959664267042 3957:0.17827051102829 4429:0.19319888089014 7561:0.218977242519061
++1 122:0.266791694884607 174:0.181693120341278 346:0.206509037934836 1578:0.346328959671299 1863:0.298613804988765 1955:0.372761748810294 5953:0.474209808188006 6799:0.529361504472879
++1 6:0.0165178002282051 15:0.0565914753065651 26:0.214480779293269 27:0.048095872764366 31:0.0629570100624987 88:0.252256932025182 96:0.204680973142666 102:0.157390824945376 134:0.236599514850305 142:0.00856661233433099 150:0.144049388636279 158:0.118557268537724 172:0.259068306043329 176:0.171238001424659 179:0.360167016978822 192:0.266790977927866 205:0.1307005881275 275:0.111075551514203 312:0.149714458800148 405:0.157087667735549 507:0.0883198238425713 561:0.146374094803911 587:0.209203497553903 768:0.206427824144245 1033:0.197866505798389 1395:0.176379713756341 1471:0.191306675879405 1665:0.356055924168463
++1 4:0.0195307153604234 6:0.0180609607069524 15:0.0773481030872266 26:0.156345634152004 27:0.0262945929894621 28:0.0666855362226974 29:0.0491954161786114 31:0.017209677881689 41:0.0207910320859762 47:0.0213709882531112 63:0.0390387337553504 64:0.0783236715144925 68:0.0277189288380088 72:0.056198806797108 84:0.0264997328632151 92:0.0298072550039833 94:0.0271058372365235 96:0.0279753883864487 97:0.0281744126867761 102:0.0430237299413408 103:0.0429822257274506 132:0.0547700754013719 134:0.194027707168533 140:0.0319068361493878 142:0.0304425560019798 174:0.0330978065927694 176:0.0702134085472868 178:0.0364400003100189 180:0.0347948472355863 198:0.0786299546791096 204:0.243952535128711 208:0.0338279121746299 218:0.0256121618841137 240:0.0406477128372713 252:0.0977582816789677 308:0.13344725383632 312:0.0818506980437656 317:0.0269118093772346 322:0.0782628665943619 323:0.0386256897597708 337:0.138079040054874 345:0.0331351791588453 387:0.0637459728235489 389:0.0384807875668956 405:0.0429408600921618 409:0.0230594904548318 423:0.102629281843379 457:0.0311348398272738 469:0.0522072769562065 475:0.0365874901026374 478:0.0354089408942268 506:0.0252603209004972 530:0.0371179868875615 553:0.115439956564235 561:0.0400122404049748 644:0.0430237299413408 714:0.0467271823183536 719:0.0971992764642041 723:0.0463408571469852 742:0.0463408571469852 772:0.04183537591019 814:0.050124229260945 834:0.0910012065092916 853:0.0477797108353138 856:0.0338874270829617 867:0.119071290603271 994:0.103389111335946 997:0.0429408600921618 1031:0.0554839084705642 1038:0.119903121363513 1216:0.0483415248073961 1377:0.043065373665456 1416:0.0545010058677679 1638:0.0679034860765871 1664:0.0535903841410855 1816:0.0496184857235349 2055:0.0695578060003164 2114:0.0646530561855156 2248:0.0593160882494598 2423:0.0582768808581953 2775:0.0667226886155146 3842:0.0692087971109537 3851:0.0878428063533685 4281:0.0727728892304372 5190:0.749325436463751 7101:0.0936656795579688 9289:0.11360499983475
++1 6:0.0115200982778365 15:0.0394688970814748 31:0.0439084462324641 42:0.137846788425749 57:0.0860063750327033 80:0.150017002866754 158:0.082686033626576 159:0.069304407315394 199:0.053849281758728 205:0.091155214338335 252:0.0831395428469183 255:0.107223541461189 337:0.0880730619678029 346:0.095978757062923 351:0.0817543310046074 365:0.122060343772053 608:0.502820840540351 641:0.091155214338335 665:0.142442763615159 1169:0.129825823410687 1174:0.204250749753766 1703:0.353156028561481 2040:0.156943304071361 3366:0.369043649438481 8419:0.492060393524261
++1 27:0.105184582996073 31:0.137685553239608 64:0.313313186869825 142:0.018734986897737 322:0.31306995282659 337:0.276174387914858 389:0.307864479606626 506:0.202094500670204 5190:0.749369685950048
++1 6:0.0426950334404532 15:0.146277040361139 27:0.0414392325784398 29:0.103373358603199 47:0.134719309480347 63:0.0922852372142104 80:0.092663864485068 83:0.0368751768670722 96:0.0881761985274177 134:0.101926649422317 142:0.0332143319660495 150:0.124112439911963 174:0.104321653184261 176:0.221307077700886 179:0.0775796545827845 180:0.109670590277217 265:0.134445495866235 308:0.210307563646014 593:0.137076061314174 689:0.355714955305371 997:0.406038524161329 1043:0.318334809262131 1138:0.140337956735141 1624:0.180248987971006 3679:0.295226770110175 4447:0.239187967109842 4488:0.276873537025571 6126:0.261040477079363
++1 4:0.0467202975332014 6:0.0432044317062834 29:0.0392275182743156 31:0.0411680399947027 41:0.0497351575276907 63:0.0700397254802548 75:0.0656708386644596 80:0.140654168020588 88:0.0824763076919025 96:0.0669211774838653 142:0.0140044229724676 158:0.0775254474121069 179:0.0588789482896245 255:0.100531524615513 276:0.167814604458047 304:0.0817859140638639 312:0.097899357379761 345:0.0792641437115095 346:0.0899885477269945 351:0.0766518940506122 405:0.102720751534924 475:0.087522571090874 480:0.0794437580305563 505:0.0776947979982298 506:0.0604263431459784 731:0.124472861594524 737:0.127276926399122 1033:0.129386325942634 1135:0.146709122219415 1236:0.119035248953298 1273:0.14501515992387 1282:0.151938633179953 1675:0.159610326954476 1746:0.12616682389007 1785:0.163955107381247 1808:0.217204195038704 2062:0.173005480989231 5953:0.206642054911907 6879:0.71760248232764
++1 6:0.0123601454540526 29:0.0448896386341339 31:0.0471102562674167 63:0.0267164319433141 75:0.0250499338740842 80:0.0804781318394418 108:0.228836191321688 142:0.0160258286572579 158:0.0887155107530123 165:0.120008679677192 174:0.0906028666657259 179:0.067377566263468 325:0.110989523286788 345:0.0907051713792312 490:0.127912303112549 498:0.127003838432299 531:0.278157543029209 641:0.195604530611479 731:0.142439339079812 1018:0.268252518542792 1080:0.124974190912179 1140:0.125541802267355 1627:0.16501751496908 2223:0.156904282449687 4656:0.229663333114779 6239:0.709406629301139
++1 6:0.0263025044012356 27:0.0382932923146108 31:0.100251063179098 42:0.078682396447953 48:0.241363842061216 67:0.0743916125975615 88:0.200843604268349 102:0.250624950577314 142:0.0170515561632314 153:0.114064182307747 199:0.122947820088243 252:0.094911438205997 275:0.0884368724106267 284:0.0798656053858631 289:0.343261730120096 308:0.291512481394038 331:0.102807394646499 506:0.0735741262541138 507:0.070319065591097 513:0.0984133005285858 561:0.11654110170895 633:0.136758383417551 671:0.160630312605238 723:0.134974060222213 876:0.126922005602179 895:0.136758383417551 1014:0.161274900533581 1159:0.133729638988771 1359:0.145993646975495 1471:0.152315823377971 1734:0.18196388359388 2024:0.128079900866961 2975:0.1869489887635 6634:0.495604174325813
++1 6:0.0219377780834523 26:0.0474763757309847 27:0.0319387741968494 29:0.0398368665750254 31:0.0418075317677714 63:0.0237092337356723 67:0.0620468174262067 83:0.0284210849029832 88:0.167514938984775 102:0.20903540073861 142:0.00568878536249075 153:0.0951359870743051 174:0.0804046194288767 176:0.0568565611462821 180:0.0845272463062372 204:0.0658483069322143 205:0.0867936546666112 209:0.0689046378930008 255:0.102093150647113 320:0.104116405987673 331:0.0857471887348819 423:0.0831058932938329 437:0.0986623786411208 457:0.0756359772746354 561:0.0972018781136255 574:0.0821302281908448 609:0.0776765303778834 952:0.204372947228172 979:0.672516709195134 1387:0.177923295768221 1550:0.523910294349273
++1 6:0.024905374104949 11:0.0223832939967946 15:0.0682624487129613 26:0.12935679019773 27:0.0145036952566502 28:0.0367827216716349 29:0.108541756027881 37:0.212110514246689 41:0.0229360305038441 60:0.0378068765008542 63:0.0538329208803514 64:0.0864042781330312 67:0.056352077011364 68:0.0305786742444249 75:0.0201899881116285 81:0.0303276511694773 88:0.114105144314423 94:0.0299023303469614 97:0.0310811500910368 102:0.189849850309133 132:0.0604206715139954 134:0.0713484767824511 142:0.0245416396794236 153:0.0864042781330312 174:0.073024975237678 176:0.0774572841578982 198:0.0867421603496245 206:0.0950168053193078 208:0.0373179177594559 214:0.0853502941367589 226:0.0386227208195372 229:0.026085223104052 232:0.04421240184846 252:0.0718959636481784 256:0.0338977256199661 265:0.0470558062816932 275:0.0334957212964837 278:0.0430021282535014 284:0.0302493291119414 292:0.0491181624460496 308:0.110411195749701 309:0.0366573339881529 317:0.0296882847487995 323:0.0426106792052755 325:0.0447282050112297 337:0.0761622862574549 351:0.0353490421568169 365:0.1055532149711 373:0.0355585776588982 375:0.0353112875426509 387:0.0703226069361089 389:0.0424508275393208 404:0.0418294859244184 411:0.0746358355189119 442:0.0423874067218657 448:0.0451089305111323 498:0.05118189135685 502:0.0343821820679922 505:0.0358299912066278 506:0.195064892315298 507:0.0266335495440419 528:0.0521162296799266 530:0.0409474275242273 546:0.043035260782787 594:0.0476937229449539 686:0.0589057184624263 696:0.0549739210782011 800:0.0878523362126564 806:0.0534705210631076 856:0.0373835727854925 867:0.218926341424132 884:0.0514248695188427 909:0.0438555366228383 998:0.0551337727441557 1001:0.116771983800559 1026:0.0689193473802 1027:0.0520519135064729 1038:0.198410182649467 1043:0.0557084527854405 1080:0.050363953882284 1216:0.0533288911776845 1228:0.061334115831558 1269:0.0508841200655654 1272:0.0629438756179538 1309:0.0588001800102935 1338:0.0629438756179538 1339:0.0601238422365994 1446:0.0519878985808372 1448:0.062523314385121 1509:0.0629438756179538 1591:0.059119272207835 1604:0.0668756730021789 1613:0.0571205113162962 1625:0.0672606889311349 1643:0.0666871574390871 1786:0.0666871574390871 1816:0.0547375953922546 1880:0.139194393582891 1903:0.0837155798542403 2055:0.076734043485981 2160:0.0771302208378822 2163:0.0629438756179538 2165:0.0745715704318778 2270:0.073299288572991 2280:0.067656866283036 2561:0.0742422252993942 3170:0.617041766703057 3469:0.0824722538571101 4234:0.0793041837301038 8142:0.0969054964531131
++1 6:0.0354826612838334 15:0.0405222673340903 28:0.174681021141911 31:0.0450803019092105 60:0.17954472897116 63:0.0255652359669814 75:0.0239705463591484 142:0.00306705694876102 159:0.0711540460547408 161:0.115424436621237 176:0.0613073968640678 199:0.110572889162394 229:0.0619393182648065 276:0.367524566858997 346:0.0985402972895068 365:0.125317965460546 455:0.0863585097099821 510:0.10692824708994 515:0.170904703610753 592:0.466033197604195 626:0.111628395477269 655:0.0895581547820626 686:0.419614587413041 856:0.0887672305274049 982:0.132479336439751 987:0.0965604470363291 1001:0.138637439292442 1331:0.133704110179785 1501:0.193124273325252 1980:0.146862528334943 2017:0.355742817973069 2024:0.115188416291793
++1 6:0.0168641446147227 15:0.0385187216354547 23:0.0404358613999393 26:0.0729926670845637 27:0.0491043445533733 28:0.0415110633672621 31:0.0214256964716078 32:0.210698582710272 37:0.0265974306461964 41:0.0258844091021341 48:0.034389583213936 63:0.0121506059821144 64:0.048755683399425 80:0.0366013722278669 81:0.0342262070956871 88:0.085848747471729 118:0.147238295973257 132:0.0340938110330773 134:0.0805201737738163 140:0.0397233574855855 142:0.0145770610360227 158:0.0403477237510246 162:0.0304454268828111 174:0.0824121825879359 176:0.174828511040501 185:0.0327346639565949 192:0.0453975062409358 198:0.0489463415327313 199:0.0262764562441645 204:0.033746212173819 221:0.0535119906625532 229:0.0294384238036551 232:0.0498958133423167 274:0.0607510348983283 299:0.0465358621834126 355:0.101497140767914 420:0.0571615016014811 475:0.136652027362664 499:0.0418706145337846 574:0.0420904383960176 667:0.054143780551031 723:0.115386835975805 744:0.0693619682720257 757:0.480682469740009 799:0.113421324596624 858:0.0563965160706422 867:0.0988275453105272 880:0.0661233335782164 966:0.056149726060264 997:0.160381473881627 1007:0.259555004503585 1015:0.140504128103237 1122:0.274630205984634 1135:0.0763540144902132 1140:0.114192567096662 1154:0.0763540144902132 1201:0.071691620239278 1228:0.0692184877342068 1229:0.0634481270498024 1277:0.0663588197796682 1294:0.127692378108637 1312:0.0730947731846686 1568:0.0834229721027929 1579:0.0705605552667265 1591:0.0667189306097039 1816:0.0617739984328475 1877:0.0911828651242384 1880:0.0785437704143958 2054:0.0875056023911311 2264:0.0763540144902132 2306:0.158151373601634 2528:0.0646745248128408 2792:0.0861635348586114 2975:0.159819244281328 3090:0.206217163966032 3144:0.100730954715531 3356:0.218724989401927 3589:0.0889756710449031 4004:0.0924174475765587 5149:0.098671360294506 5886:0.120053629107421 7223:0.105920718169308
++1 37:0.168186995242956 88:0.271429279668152 102:0.338706079538262 206:0.339033921465302 214:0.304542389340071 506:0.198862912902972 2280:0.482819278398328 3170:0.550423920195478
++1 2:0.0489235519680435 6:0.0359531292007992 26:0.155615054920199 27:0.0348956298383637 28:0.088498566550645 29:0.0435249186883164 31:0.0456780258388155 63:0.0259042078162436 64:0.103943569305167 80:0.0780314622946372 96:0.0742524364692925 134:0.0858315757217083 142:0.027969510087376 158:0.0860184111391169 176:0.0621202773598826 185:0.0697879216209244 204:0.143888937629684 404:0.100640990541929 561:0.106200718203562 582:0.101082378981244 755:0.125081948624057 823:0.136548105873739 834:0.120767962389278 965:0.239414260462608 987:0.0978407510139556 1122:0.146372903929969 2163:0.151441832256439 9625:0.836214966545996
++1 6:0.0452009386746181 15:0.0774312490010112 27:0.0658071463902364 29:0.0410402492950029 31:0.0430704438795836 63:0.0244254367062971 64:0.0980098326534399 75:0.0229018446638602 80:0.0735769476873296 142:0.0117212617123231 165:0.109717660497517 172:0.0886175099908734 174:0.0828334633100803 179:0.123199571236497 180:0.0870806255330054 185:0.197411996673415 200:0.109166921599514 204:0.0678374371403537 205:0.178830994050884 208:0.169321378691359 237:0.0971088747926831 408:0.133081285184176 515:0.163285096458502 565:0.120194730876668 582:0.0953119766272147 626:0.106651560418884 719:0.121629701928993 723:0.115976678982741 761:0.114907408030436 768:0.141222367551493 884:0.116664196835411 1031:0.138858878267793 1047:0.127348069019042 1055:0.12330609855403 1094:0.116387357632391 1135:0.153488653236525 1378:0.138575718448147 1509:0.142796603343561 1627:0.150866885063834 4031:0.223983329682371 6618:0.23441591542727 7387:0.223983329682371 8116:0.23441591542727 8117:0.468831830854539 8434:0.241334656348909
++1 6:0.0191292491869581 26:0.0413983320642988 27:0.0278498929113688 29:0.0347368518654165 31:0.0364552276003108 37:0.0452547896902886 134:0.0685014199008854 172:0.0750066914824966 174:0.140222040261925 176:0.0991552856395374 190:0.0820066301875371 215:0.0609330308787361 255:0.0890229316561186 286:0.053593003376159 323:0.0818207244256246 502:0.0660204224998261 506:0.0535088892433203 667:0.0921241391496759 742:0.0981637486826128 796:0.168152324114622 886:0.0823824397643227 1096:0.125323144319985 1154:0.129914235466124 1792:0.112907689211481 3734:0.155145113054199 5676:0.166295572111062 8560:0.222458584614196 8906:0.847270903129979
++1 6:0.0465890942312331 15:0.0399046110758746 26:0.151237832811111 28:0.0860092323257096 29:0.0423006268839248 63:0.0755266819041326 67:0.0658841796288869 75:0.0236051779100063 96:0.0721638248839051 134:0.0834172600174883 142:0.0181218459982229 153:0.101019789919597 158:0.0835988400300117 174:0.0853773426130144 176:0.120745851053442 192:0.0940617836440171 232:0.103382092717578 242:0.0816132328037213 255:0.108407227882608 351:0.0826568519452855 373:0.08314680991631 404:0.0978101078287716 437:0.104764275536546 475:0.0943791447051831 541:0.120104054922598 697:0.249728771657957 848:0.128732154490842 852:0.115587957565814 952:0.108506322523955 1036:0.131666139803625 1083:0.124864385828978 1126:0.124208814200358 1198:0.138746186831062 2066:0.155934932399054 2694:0.170693711728549 2833:0.703877319071782 9093:0.293049419037993
++1 6:0.0280720650046555 13:0.093286236727735 15:0.0961774298978721 27:0.0408695603543946 28:0.103649010597385 37:0.0664111479515841 42:0.251927799054593 60:0.106534948068102 142:0.00363974765096725 199:0.196829120055334 204:0.0842609468295218 406:0.131606525492327 414:0.1037082147835 515:0.304224866328833 936:0.328475855998967 1154:0.190648405872697 1312:0.547531210178985 1463:0.20654803105398 1536:0.230757206060892 1787:0.201727708605713 2825:0.189532028707564 6262:0.326456714902902
++1 6:0.0197349044234892 15:0.0676135648167161 28:0.0728661506515248 57:0.0736681037846117 60:0.0748949896467078 80:0.0642479591335072 204:0.0592361741837498 336:0.0902149210605611 513:0.073840005890866 515:0.0712909038368763 586:0.145070931474417 1665:0.106350868998936 1746:0.115260870820509 1845:0.312365626161796 1858:0.127046885927717 2223:0.125261107536784 2340:0.547874734789752 2387:0.13402747777067 4425:0.171560691670991 6237:0.655572395863035
++1 6:0.0397250186094985 26:0.171940832134456 63:0.0858655555529547 142:0.0103012758872262 232:0.35260230960588 437:0.357316480517441 541:0.409635421817485 697:0.425871344576984 2833:0.60017349683062
++1 6:0.0291958472858106 15:0.0333425364940123 19:0.11815672005259 29:0.0353445418354061 81:0.118507417763227 96:0.0602969155660762 142:0.00252363613813008 180:0.0749952757372603 185:0.170014478349774 255:0.0905803077498446 351:0.0690644270965483 357:0.0900888332332691 361:0.174389252346725 387:0.0686976260690772 506:0.054444979117683 582:0.0820842515136969 623:0.135087784443798 697:0.104331184518728 733:0.109843805911125 739:0.0994166287462625 767:0.0930922985101132 1017:0.114678288295926 1171:0.161133049623637 1262:0.149921820473964 1613:0.111601196208399 1951:0.121359957046153 2285:0.131412922775678 2401:0.131797140842169 3167:0.150695865827621 4538:0.197014388620401 4764:0.757330008021186 8932:0.215523286318687
++1 6:0.0130273361927833 15:0.0446328302969389 60:0.0988788380572436 63:0.0281585635129441 75:0.0264021092144743 80:0.084822276852397 142:0.00337817800708142 179:0.0710145532533307 180:0.200779650681608 345:0.0956013637844235 457:0.0898300001466083 574:0.097542977247928 600:0.453000178750149 608:0.142151915211074 620:0.185187485599932 781:0.141172548835008 5803:0.263726479685451 6464:0.556439365272294 7373:0.498466553469509
++1 4:0.0247324434212957 6:0.0114356202672461 18:0.0306072778393913 26:0.173237810010448 27:0.0332977835883925 29:0.10382985848794 33:0.0632810014277314 40:0.0357259765157621 67:0.0323434688863252 74:0.0468736375656206 75:0.0695286797154304 80:0.111687685103027 81:0.0348133198993714 142:0.0281715174129525 150:0.249321048416694 154:0.0413330983575859 158:0.0410398444159734 172:0.0448396083355486 180:0.0440619595711579 204:0.0686501823888785 221:0.0544299297955919 252:0.082529872424695 262:0.107025601542504 286:0.032038331959669 303:0.255436596951287 322:0.0495535336088046 337:0.0874272135659747 345:0.0419602625237826 377:0.0440078607965736 386:0.045538289831804 418:0.0590309623168144 432:0.0537120241351178 437:0.102860507797201 441:0.0403191543683976 455:0.0417484098496267 480:0.0420553454153315 491:0.0682384650693821 561:0.0506689311534705 657:0.0593867287879953 683:0.0691500941360551 698:0.064239555108624 757:0.0543253385476572 781:0.12392369681307 930:0.050061553531708 944:0.0625669945185742 1013:0.0708478169273027 1057:0.0778962117146138 1126:0.0609758509573249 1241:0.285210366565439 1433:0.0551273170106863 1450:0.0815736374454973 1591:0.0678634202196559 1858:0.0736187980660425 2248:0.0751140841249016 2975:0.0812803835038848 2976:0.154418017229658 3251:0.0815736374454973 3355:0.55619243791371 4292:0.0976678636275885 4573:0.107737671173734 4729:0.109390633223966 5445:0.0968631421574567 5476:0.204917766112784 7015:0.333715462748226 9806:0.143862074631575
++1 6:0.0091124004573355 17:0.0248272483558791 26:0.138043434660774 27:0.0265331246848228 29:0.0330944619656713 33:0.0252125294857125 41:0.0209796381668443 67:0.0773180554575748 75:0.0277017406153081 82:0.0341747869198181 102:0.0868280403805625 139:0.0372737078566855 142:0.0165408470717288 158:0.0327023360592187 172:0.0357301534988793 199:0.0212973972917172 203:0.0345407071847161 232:0.040441182405663 252:0.0328816990093943 296:0.0410859013277895 303:0.0407086018682512 317:0.0271559401579827 331:0.0356172224402413 369:0.0407424351316026 406:0.0427204540487397 408:0.0268288668229814 437:0.081963734051017 472:0.0415109184592988 475:0.0369193939296588 500:0.0471510684770892 513:0.0340949056053558 527:0.043456041685907 530:0.0374547031221201 538:0.0399229161426726 586:0.033492546858756 657:0.0473219328659737 695:0.0449759361828717 764:0.042138889507845 772:0.0422148859922021 871:0.0523335928795244 882:0.0342149198055786 890:0.0478490013171799 912:0.0433303985863356 930:0.0398912269414764 944:0.049856107158275 1027:0.0476120011732045 1086:0.0574453539950128 1213:0.0579718058095662 1241:0.284085057695957 1366:0.0493739003711281 1382:0.0596988761270747 1548:0.0501402417339596 1602:0.062840654093155 1662:0.062840654093155 1665:0.0491064809085399 1710:0.126901197261502 1728:0.0739048556130638 1776:0.0527692252203809 2166:0.515100421909456 2185:0.056940178872208 2229:0.0647677508088128 2906:0.0816437019595082 3653:0.0691607104400857 3698:0.0691607104400857 4825:0.0871672224963048 6152:0.0825701541159407 7185:0.0973049718597811 8499:0.583829831158686 9580:0.343906706596605
++1 75:0.0479187321888 111:0.14786458033577 142:0.0122625056878927 158:0.169706428054259 232:0.209866616254196 303:0.211254370379952 1377:0.225512012308164 2166:0.445512784026597 8499:0.504957174201277 9580:0.594893064670032
++1 6:0.028357351192096 15:0.0485774230701384 26:0.184107650484479 27:0.0825698056658055 63:0.0306471815413745 64:0.245950577693894 94:0.0851172601882696 97:0.0884727815040765 134:0.203094099752855 142:0.0477975820744068 176:0.0734942921688209 192:0.114505039282784 198:0.123456181275883 226:0.109939932407626 265:0.133944788254762 317:0.0845079774113253 387:0.200173951737057 441:0.0999809711649615 719:0.152611705602795 867:0.124635171565867 1031:0.34845913316322 1916:0.173173292590209 2376:0.393624309758947 2683:0.200840270612256 5209:0.267161282614701 5370:0.508142533886304
++1 6:0.0326816027766745 15:0.0559850612963891 29:0.0296733024721043 81:0.0994922064304035 85:0.0500705385542657 96:0.050621921258993 159:0.0491527731779892 174:0.0598910204941481 179:0.044538449504244 180:0.125923686395128 185:0.0475782188586393 278:0.0705359046309848 279:0.0925061373484981 339:0.127100556618794 355:0.0983473906719615 367:0.0697361257370543 414:0.0603687452218119 473:0.0719357407273745 530:0.134331204525808 731:0.0941563737434043 804:0.0769671010134366 1126:0.087130758690228 1573:0.527264828868703 1910:0.0999914238377496 2293:0.121778682497738 2825:0.220653894704598 4315:0.13527830526141 4813:0.607255460959266 8412:0.348984052380718
++1 6:0.00711903505215745 15:0.0243904570096934 26:0.0616262926341151 29:0.0258549474278478 63:0.0307755626630869 67:0.161078653071129 142:0.0110764168310154 204:0.128210724912726 289:0.0619381397175848 437:0.128067834254405 543:0.0787981057962373 723:0.073064150180985 827:0.0608081860772366 867:0.125157268617723 975:0.0882100105263049 1005:0.225138561392608 1999:0.117870718095844 2153:0.113342859532706 2730:0.114028310035479 9299:0.895586883827954
++1 6:0.0166728827056072 26:0.0360824164069342 28:0.0615604087535366 29:0.0302763297740405 31:0.0953221521418504 83:0.0216002465313922 88:0.0636563310674754 132:0.0505607125645768 151:0.065836425237102 176:0.043211430593839 204:0.100090455256429 218:0.0472874702358961 274:0.0900930556139622 309:0.0613505570433581 404:0.0700067894498208 422:0.0760181929597507 427:0.0885557444510267 493:0.148844900251268 515:0.0602295735587254 561:0.0738741866376909 609:0.0590347698405186 1134:0.202826940884607 1227:0.0910931570256544 1389:0.106317812364544 1639:0.112569035554489 1651:0.114264157296436 1697:0.113914934086013 2581:0.129769758094679 3482:0.127152772794057 3787:0.458726368682565 3880:0.453233755804955 5833:0.162183267061458 6466:0.534114273210371 7130:0.184618437578187
++1 6:0.0258849335767529 15:0.0443420600528739 29:0.094009032389503 31:0.0493297533916181 42:0.0774332578619139 96:0.0801885438893998 159:0.0778613140560858 204:0.0776960658731292 206:0.123442418692519 346:0.215658208066923 365:0.137130943447498 404:0.108686729633197 414:0.191256343314203 507:0.0692027007861415 561:0.114690929452181 587:0.491762089690402 903:0.144101190519041 963:0.109809091191123 1418:0.164296486000761 2117:0.480966841756912 2887:0.442149372487393 2941:0.186010838069215 5679:0.22717739311735
++1 102:0.258187878456577 142:0.00702644345668972 204:0.325327377213878 252:0.195551024071799 867:0.238184554956534 1005:0.28563810764435 2153:0.431401529506944 9299:0.681750139501733
++1 6:0.0176712848925931 15:0.0605434179381118 28:0.130493513376949 29:0.0320893308245513 67:0.0999597118036542 142:0.00229121077009198 185:0.0514520824378438 278:0.0762790046992757 325:0.0793407930911872 423:0.0669433299517474 499:0.0658118963302032 502:0.06098857740424 506:0.0494306293395766 1227:0.0965479790141327 2340:0.122646280875829 3136:0.144271339724472 4811:0.150924619975133 6079:0.16012473593975 9682:0.411007142737273 9871:0.822014285474546
++1 6:0.0210839531103002 15:0.0361177637252484 26:0.136885742387118 27:0.0920871222698869 29:0.0382864036519119 31:0.0401803699579754 63:0.0227864631715427 64:0.182866531236341 94:0.0632854708653785 97:0.0657803320251474 134:0.0755011715861767 142:0.043739008893627 198:0.09179081359062 204:0.189856412596136 226:0.0817413574395498 265:0.0995891899705936 317:0.0628324634806977 337:0.0805951591742175 351:0.0748129243298791 441:0.0743367775672885 457:0.0726922021110712 506:0.0589766436081339 510:0.0953058507834394 561:0.0934187515519933 679:0.132618376681004 856:0.0791188171259184 867:0.0926674037849275 987:0.0860649623208156 1665:0.113620856077944 1980:0.130899538635433 2215:0.178587422425489 2683:0.149326600343021 2889:0.318540564816653 6165:0.225140836785677 6296:0.205091372522467 9911:0.700386348886082
++1 6:0.0139131474782082 15:0.0476676997585398 26:0.12043987586405 27:0.0405117486359429 63:0.0300732429970691 64:0.241344590799402 94:0.083523244884064 97:0.0868159263913626 132:0.0843835661697155 142:0.0360788177449512 176:0.0721179435148612 178:0.224570600266722 192:0.112360670624516 204:0.250569734652192 226:0.107881055812991 256:0.0946831904108417 317:0.0829253723201469 387:0.196425236824636 409:0.071054933716103 496:0.233337813427249 499:0.103631470493293 515:0.100520462390145 582:0.234701247564776 631:0.093376334243881 663:0.130212698865997 694:0.204739709523399 719:0.149753702492807 801:0.168262925029533 867:0.122301093019649 1031:0.170966719598966 2423:0.179572914443677 3024:0.233834513753462 7990:0.563317834355888
++1 6:0.0417084454207659 15:0.0952646004711965 28:0.102665267664978 60:0.105523814419915 63:0.0300509096673554 75:0.0281764159832621 80:0.181045214064209 106:0.0973159682455968 142:0.00360520244878204 158:0.0997880931626144 159:0.0836387277324368 179:0.0757869599385796 186:0.157786943482676 204:0.166922435826427 229:0.0728071847424865 245:0.160750722461591 346:0.347490503463281 414:0.102723909938351 535:0.131839050058401 560:0.165614946481137 614:0.336275935450013 655:0.105272019503623 731:0.160217192207675 784:0.136521409429617 982:0.155724147325842 998:0.153885391806768 1001:0.162962750278207 1047:0.156677866783718 2969:0.270475600483869 3010:0.235522049149625 5134:0.258327612458861 5326:0.288404730846805 7173:0.307891089315838
++1 6:0.0123507211897523 26:0.0534573262180652 27:0.0359623380040743 28:0.0912038377846228 31:0.0470743360180987 64:0.107120971594924 94:0.0741437055879845 97:0.077066623736232 132:0.0749074140406789 142:0.0128108875298479 176:0.064019203025444 187:0.115165066508204 192:0.0997427302305647 226:0.0957661696671637 265:0.116676252541957 317:0.0736129732461109 337:0.188846623780088 387:0.1743669675357 499:0.0919938066171883 993:0.271446948131917 994:0.141402233124287 1195:0.33258832251668 2162:0.212799114929472 2165:0.184902397210545 3653:0.18747741737866 3803:0.203050107935533 4704:0.433581123117431 8630:0.527538965585917
++1 6:0.0266631287638332 15:0.0456751435477979 26:0.230810743830108 27:0.0776366362837759 31:0.0508127850770343 63:0.0576323043820823 64:0.231256152176135 94:0.080031892014551 97:0.0831869362324356 134:0.190960153372664 142:0.0587701697250125 166:0.198945053451262 176:0.0691033433351928 179:0.0726729605146971 192:0.107663885312237 198:0.116080237387175 204:0.160063784029102 205:0.105488823045627 226:0.103371522756635 240:0.120015232735464 252:0.0962127354659132 274:0.144076029621105 291:0.107304203128774 317:0.0794590111052868 513:0.199525221175839 582:0.112445253574963 592:0.262647361549577 719:0.143493852080575 834:0.134343733215001 867:0.117188788383359 1031:0.163820144440259 3962:0.225844717772856 4282:0.463579119987159 6265:0.29524019692584 8692:0.29524019692584
++1 11:0.0496966603956398 17:0.165723750201994 23:0.0198879452821995 29:0.0301238213019298 30:0.0166188737980781 33:0.0305991874042275 37:0.0784899681161896 38:0.0225257256858346 41:0.0381929080323301 48:0.0338282962478169 51:0.0187777653620236 59:0.0343360782280705 63:0.0119522907909769 67:0.015639510175668 72:0.0344122063566115 74:0.0226654949799786 75:0.0112067395299291 79:0.0187496511157878 83:0.0573105103509777 85:0.0169435803706946 87:0.0257571050409448 94:0.0663908518783691 97:0.155268302433639 111:0.017290522535074 118:0.0362087893317989 137:0.0226342118342318 142:0.00716957132166194 144:0.0164374116462952 148:0.0243036347620977 158:0.0198445957237078 159:0.0332660277612623 162:0.0149742570820925 175:0.0267633661996505 176:0.0573250202660801 178:0.066939898643963 182:0.0281142722509263 186:0.0313786745958821 199:0.0775427611879447 203:0.0209601653181727 208:0.0207138400387995 209:0.0173680912282077 216:0.0240548861790485 218:0.0156830909805084 226:0.0428761790020499 240:0.0248898074852444 244:0.040685810720884 246:0.057156398012297 256:0.0188154138367802 269:0.0295231507652706 271:0.0610281106710948 274:0.119518983008163 276:0.0214781926010775 284:0.0335806391205729 330:0.0274971718578979 333:0.0557850635380713 336:0.32861166369399 337:0.0845499164607827 341:0.0231009516093963 365:0.0292944052316312 369:0.0494470580035598 372:0.0545850467213196 375:0.0196000314496966 380:0.0339744527789272 387:0.136617464618827 403:0.0320216861344543 411:0.103569200193998 430:0.0215185088275517 433:0.0223583213542748 439:0.0297990412452276 442:0.0235277318567375 459:0.0252557354007436 467:0.0347044532660402 478:0.0216819511012091 479:0.0350173286222591 485:0.0382667125305779 500:0.0286124480579708 501:0.0287510117657645 504:0.0293698899548625 505:0.0596638358465985 506:0.0154676482474156 507:0.0147833297794579 509:0.0256634476526773 526:0.0331821348495862 527:0.0263702133525816 532:0.0319680735290308 576:0.0541304118322437 593:0.0266300384779719 609:0.0391582658917293 613:0.0511418649123353 633:0.0287510117657645 639:0.0318094722382238 640:0.0774131128169349 643:0.134970074865078 655:0.0209351697367674 658:0.102283729824671 667:0.0266300384779719 695:0.0272925233606598 715:0.0341149410919135 742:0.0283758896277202 749:0.0321848354782113 763:0.0320216861344543 772:0.0256170490242856 774:0.0930462749272458 824:0.0309217675874811 829:0.0205105740006554 848:0.0305582895838693 868:0.0394444930251282 880:0.0325220533098911 883:0.03224000773662 886:0.0714421071746048 936:0.0970547124222764 963:0.0469156258186392 976:0.0405190753916698 982:0.0309684517476904 996:0.0307834144745127 1003:0.0292196642123457 1007:0.0319148371555162 1011:0.0331821348495862 1033:0.0662393940626647 1034:0.0348592780702881 1036:0.0312547556158211 1038:0.330391165870609 1039:0.0403559260479128 1064:0.0512340980485712 1105:0.0347044532660402 1114:0.0338365189409523 1146:0.0316541189848033 1213:0.035178742203031 1227:0.060422867292681 1236:0.0304700775190911 1242:0.035097606113109 1247:0.0428122240606081 1260:0.0369124389196071 1263:0.0375539041258043 1294:0.0314020641684948 1305:0.0251462652170033 1318:0.0366109627422322 1319:0.0291825680401698 1322:0.0310626908737821 1337:0.0355979732885458 1359:0.0306925612677333 1365:0.0334371555719702 1370:0.0454545316184584 1374:0.0369124389196071 1411:0.0350173286222591 1426:0.0328149913298162 1436:0.0371202917049998 1446:0.0288566211571097 1457:0.0366109627422322 1462:0.0679489055578544 1489:0.0972239210551277 1507:0.03789619461036 1533:0.0472267694107864 1544:0.0362267716824942 1545:0.0353436650481622 1559:0.0401962116836546 1576:0.0306475394614462 1627:0.0738248778392141 1639:0.112002000786817 1651:0.11368858383108 1664:0.0984449739894485 1677:0.0435129821164896 1680:0.0457773953264736 1687:0.0847572232796073 1758:0.0464675210721447 1760:0.0421707588544108 1788:0.0340443717263451 1800:0.0437617306995387 1802:0.0412092011373409 1838:0.0423786116398036 1853:0.040685810720884 1854:0.0461146131581534 1866:0.088037826053502 1922:0.0405190753916698 1943:0.0331821348495862 1951:0.0344779841471495 2001:0.0724535433649883 2042:0.0355122531438023 2045:0.0464675210721447 2058:0.041392008828697 2088:0.0448473154640834 2120:0.0408562932233496 2140:0.044018913026751 2142:0.0359508812025371 2171:0.0382546621816858 2185:0.034552725166435 2206:0.0356846731132925 2218:0.041030695205155 2246:0.0350173286222591 2256:0.0419684494759826 2311:0.041030695205155 2339:0.0432721316623093 2402:0.114399843476058 2446:0.0445610115959527 2515:0.0485304515971131 2541:0.0548017609856032 2564:0.0421707588544108 2571:0.0368106098458153 2575:0.0385034107647349 2596:0.0382546621816858 2616:0.0367101295411788 2646:0.0412092011373409 2656:0.0520959706129973 2659:0.0430386931794987 2666:0.0746680005245444 2723:0.0360417344093165 2740:0.0800795812697564 2779:0.0415793307433897 2783:0.0464675210721447 2787:0.0520959706129973 2838:0.0415793307433897 2933:0.0590470914667207 3004:0.055971171488066 3030:0.0476369315746074 3055:0.0480705439954119 3214:0.0548017609856032 3271:0.0495434410507994 3274:0.0501056353988872 3307:0.0537887715319169 3471:0.0480705439954119 3492:0.0507128515532622 3574:0.0513729330929572 3734:0.0448473154640834 3845:0.0548017609856032 3852:0.0537887715319169 3981:0.0495434410507994 4008:0.0528952515094112 4080:0.101425703106524 4202:0.0573542905478011 4238:0.0501056353988872 4305:0.188907077643145 4394:0.0528952515094112 4398:0.0990868821015989 4704:0.0485304515971131 4893:0.101425703106524 4923:0.0468376506781935 5369:0.0495434410507994 5411:0.055971171488066 5493:0.100211270797774 5504:0.0513729330929572 5618:0.0507128515532622 5709:0.0590470914667207 5919:0.0573542905478011 6089:0.0612294914228698 6099:0.0573542905478011 6108:0.105790503018822 6189:0.0590470914667207 6383:0.0573542905478011 6737:0.0612294914228698 6988:0.0548017609856032 7001:0.0513729330929572 7694:0.0573542905478011 7696:0.0573542905478011 7880:0.257221645606098 8200:0.0590470914667207 8340:0.0612294914228698 8666:0.0643054114015245
++1 6:0.0293098548583634 26:0.126861132114917 27:0.170686535801876 29:0.0532238393917711 31:0.0558567364223679 63:0.0158382995067249 64:0.381317829319049 75:0.0148503496336339 83:0.0379718433769738 94:0.0439881448228334 96:0.0453992778411573 97:0.0457222602921206 111:0.0458242657123131 142:0.0437027153706759 162:0.0793711507541038 166:0.164020060054484 178:0.177407692335143 198:0.191404482565309 204:0.395893303405501 218:0.0415641648089799 226:0.0568163690638347 232:0.0650391294895514 262:0.068577496760813 274:0.158377794075385 317:0.043673270742406 322:0.0635036335524832 377:0.0563967665256016 389:0.124895493293119 422:0.133635091278849 455:0.053501244561468 475:0.0593752481908291 496:0.0614445568052845 506:0.0409931869783791 527:0.0698877469496854 575:0.0764773576264442 582:0.061803588224509 609:0.051889663178659 625:0.0814630956534942 653:0.0748536323642743 834:0.221519126086402 867:0.0644107900645702 1038:0.194582289461295 1192:0.182358487542556 1213:0.0932325802685612 1232:0.0829623160687653 1312:0.0952789442583384 1435:0.110195761652676 1446:0.0764773576264442 1527:0.0952789442583384 2292:0.128617993158594 3090:0.134401906009015 3138:0.14523855203409 3292:0.127399121484778 3408:0.126249938702893 3563:0.252499877405786 3962:0.124131641809219 4128:0.152003402122305 6604:0.152003402122305 7021:0.142553873315137
++1 28:0.0696432850333258 31:0.0359459807909065 100:0.0582782164145571 132:0.0571993296977676 144:0.168208081978996 185:0.109838165899513 218:0.1069926218758 274:0.101922265928522 299:0.0780734110720692 360:0.348384441145219 389:0.0803751040669001 398:0.0733554784033315 683:0.11405688289255 781:0.102200515788239 998:0.104388606271755 1025:0.229914085575956 1430:0.141830510886066 1560:0.431543762189468 1838:0.144556923645798 2531:0.28631565366025 2664:0.190922261256119 3190:0.572766783768357 4650:0.157300731555763
++1 6:0.0307198951801655 29:0.0557843351699377 63:0.0332004988103735 75:0.0311295423562201 81:0.0935202038183632 142:0.00398305811494183 144:0.182636207686791 199:0.0717981848443915 204:0.0922086584636767 262:0.143753254486634 346:0.255940295419883 351:0.109004472809834 408:0.090445978583079 411:0.230151636566808 423:0.116374790606816 424:0.15820058306759 436:0.135672359072244 437:0.138158838080655 582:0.129553678187067 781:0.166450218154756 953:0.503519208682015 1017:0.18099688774594 1410:0.211849590657611 1449:0.196817561799237 1620:0.185760246835282 2067:0.191542574001909 6758:0.318631982504912 9013:0.340160675923215
++1 6:0.00977096464386782 15:0.100428621861021 26:0.0845828573744847 31:0.0372416853882214 60:0.0741626389606243 63:0.0422398446521247 96:0.060538646920867 102:0.186206415450463 142:0.00506750687622077 186:0.0554467073927046 204:0.0586569411401368 232:0.0867278310017306 274:0.105596143942882 276:0.0759047394967016 372:0.192905605641565 440:0.110284171587694 505:0.0702847457329474 648:0.142619358654103 824:0.218557376507328 880:0.1149341581126 933:0.113548844609928 1031:0.120066992396654 1149:0.0937404812792865 1201:0.12461283438142 1215:0.229061992865797 1259:0.154655600234568 1322:0.109776716441341 1838:0.149767605519554 1918:0.141502124228573 2852:0.336701411403804 2979:0.151300008103654 3555:0.165526016988386 4839:0.197804222638068 5880:0.208674639391887 6480:0.544661626240389 8995:0.208674639391887
++1 6:0.020474530269184 11:0.184011462156815 15:0.0350737948798874 29:0.0371797511770365 31:0.0390189731796393 60:0.0777019082345584 83:0.0265254011101567 111:0.0640214917421992 198:0.178275277075629 252:0.0738814481235933 276:0.39763573583676 304:0.155033000732647 372:0.202111654568429 373:0.146162264324624 382:0.08991695987553 389:0.0872463057313621 827:0.0874429636412061 880:0.120419169703806 1015:0.127938123583373 1043:0.343481410276705 1665:0.110336692782814 1725:0.147687563207086 1808:0.102932817081052 2215:0.173425427718292 2264:0.417151701112639 2521:0.192895370607582 2792:0.156914976377372 2921:0.174866214812776 3551:0.192895370607582 4205:0.192895370607582 4398:0.183444138005648 6165:0.218633235118788
++1 6:0.0260673823514468 28:0.0274992074774399 29:0.0811471292315519 30:0.0223838451015029 31:0.028387115377346 60:0.0282648780112613 68:0.022860986605049 80:0.0484935170148836 94:0.02235534372934 97:0.0232366436236278 98:0.0241558325655234 100:0.0230116193374877 132:0.0225856122981091 151:0.0588186320989631 176:0.0772106696077588 185:0.0433704773054119 198:0.0324247439570948 199:0.0174069672857386 204:0.0670660311880199 216:0.0323993582662846 219:0.0622737864691264 226:0.0288748130886337 252:0.0268751458742159 274:0.0804896419230663 341:0.0311145104538815 398:0.0289649966863969 422:0.0339575402858278 423:0.0282142532902176 427:0.118674299242922 436:0.0328928136702609 463:0.0915199065414137 507:0.0398231273536824 564:0.138425907530272 609:0.0263709974819501 643:0.030298375267237 662:0.0388191463712425 686:0.0440386273769155 771:0.0790142767374135 774:0.0835489187594317 851:0.0422952210092796 873:0.043057575065648 882:0.027964825071442 936:0.0435741048727055 1058:0.0417744593797159 1083:0.0399221288181153 1134:0.0906033641155742 1156:0.052206372246046 1193:0.0453917067396638 1242:0.0472727206557309 1288:0.0489205158994237 1294:0.0845904420185592 1356:0.0795301152860426 1389:0.047492465367884 1393:0.0426347118817591 1411:0.047164595463726 1431:0.0434986968898878 1432:0.0442790557708185 1436:0.0499970617589867 1500:0.0424975590131425 1639:0.100569808645735 1651:0.102084239931204 1697:0.0508861209767421 1822:0.0529365210244885 1831:0.0504319246333859 1904:0.0520317058509584 2194:0.056799500704983 2520:0.0691938449460761 2561:0.0555043853285405 2589:0.0604045361173852 2977:0.0660247639881495 3482:0.056799500704983 3787:0.136609571456641 3880:0.539895444231977 4004:0.122444782633417 4109:0.0641618505822106 4187:0.0660247639881495 5516:0.063609406027121 5637:0.0772500935458715 5833:0.0724477208744307 6376:0.0712442449938225 6466:0.636240922288341 7130:0.0824695745515445 8343:0.0824695745515445 8348:0.0824695745515445
++1 6:0.0302806947853542 27:0.0587800806197809 28:0.0745358788575729 31:0.115413794813049 37:0.0477574580787797 60:0.0766112087084619 63:0.0872688890203884 75:0.081825294031174 80:0.131440402875767 83:0.0784591943762099 96:0.0625374039972456 142:0.0235566755127643 179:0.0550219932548099 180:0.0777819198981471 228:0.152674902523192 339:0.15701772393975 351:0.0716306951794586 414:0.0745784536589978 473:0.0888681102539099 507:0.107939539661239 780:0.102403569357997 784:0.297347198312003 867:0.177451439388231 1046:0.567005641417538 1210:0.323344987794628 1875:0.157974354948113 1939:0.138348324165741 2187:0.141030570689776 2457:0.165941682002901 2771:0.145614476987452 5357:0.17099105980992 6604:0.209384347494195 7392:0.204334969687176 9854:0.234760930316663
++1 6:0.0303502293006986 28:0.224121113847485 132:0.18407485340559 176:0.157318545339875 185:0.17673672395396 1134:0.369212947328948 3880:0.5500247980861 6466:0.64817788065164
++1 6:0.0162552400819579 15:0.0556919205336804 29:0.0295179314799622 80:0.0529197394666849 98:0.0527212891395781 128:0.262092915035582 174:0.0595774279210488 179:0.0443052438105248 180:0.062632171633238 199:0.113974679137048 411:0.121783296645637 453:0.0788339233535501 513:0.0608205136266373 530:0.0668139195922197 1018:0.0881969615105387 1043:0.0908994852683025 1133:0.0947746631887669 1145:0.320314274814765 1192:0.10113598345374 1331:0.0918783568768217 1576:0.090093347797922 1958:0.118163198188554 2825:0.329247808739869 4979:0.16109854817629 5231:0.151018959755824 5935:0.16109854817629 6684:0.719975562565463
++1 6:0.0251240825102013 28:0.123685772975973 31:0.0319198499710005 40:0.0523266985531968 63:0.0362037724673066 68:0.0514120052652168 75:0.0339454800035668 97:0.0522568192249443 142:0.00434336033747653 144:0.0497893099825834 172:0.065675144459172 205:0.0662665390241653 229:0.0438571540692084 337:0.128051851783375 346:0.0697730798678657 365:0.0887334486851424 404:0.14065604894428 413:0.072411138087384 427:0.0889620937032745 467:0.105120612577005 498:0.0860522482724009 655:0.0634131259830585 658:0.0774549612797943 667:0.0806630185554006 994:0.095881077646137 1080:0.0846770478496202 1082:0.114788472857939 1230:0.117013949633166 2017:0.251889559232106 2280:0.113751666856704 2837:0.125944779616053 4516:0.194782617283281 4928:0.829979173125662
++1 6:0.0282894924552385 15:0.0323074519931572 26:0.204074537225938 29:0.0684946143058182 41:0.04342092722354 63:0.0611476865463157 67:0.160022857991643 75:0.0382223072249677 98:0.0611683167530266 134:0.0675360328231603 142:0.00978116987536035 153:0.408936702450328 159:0.0567294497141454 174:0.0691229490378598 176:0.0488789475840856 283:0.0706890992942271 345:0.138401999174023 351:0.0669203935116735 457:0.065023400890642 548:0.106765537886506 574:0.0706064355260748 667:0.0908258382734265 723:0.0967803318918898 844:0.103331456031468 943:0.253208917730223 967:0.120830901210732 975:0.116842446997278 989:0.228085114245351 1005:0.0994057260606669 1126:0.100561569044614 2211:0.145267652884152 2415:0.137640086988009 2733:0.122616004651657 7462:0.626497767564764 8971:0.208832589188255
++1 6:0.0191254452856298 15:0.0655255027700738 28:0.0470772511334953 75:0.0129203209756823 100:0.0393947274090737 142:0.00826584418122063 159:0.0383526140777709 185:0.111372092462745 277:0.0577337498022499 318:0.230852837265636 365:0.067547410622611 457:0.0439598376671922 473:0.0561295634841421 485:0.0882358704347188 499:0.0474850142498473 538:0.0558611350107948 561:0.0564939984487267 733:0.0719558394504811 890:0.0669515100840464 909:0.112259126968284 1018:0.207539987502348 1035:0.0778637917655618 1043:0.0712998033547114 1626:0.0916244732475554 2134:0.173702833811037 2206:0.658257369940259 2683:0.090303676595775 2946:0.0987169684935807 3170:0.0987169684935807 3570:0.350803006303703 4650:0.425326636409502 7211:0.121966540895479
++1 6:0.0249155261801294 15:0.0426814214088025 28:0.091994288152845 80:0.0811137299406167 81:0.0758500337628729 158:0.0894161658116047 176:0.0645740481266365 245:0.144042368166486 325:0.111866093463543 345:0.0914215403278842 347:0.2046783176319 404:0.104616341764176 555:0.143564292795591 561:0.11039568044152 571:0.0983210158237392 842:0.180412068268694 847:0.531408135415032 1007:0.143802494678123 1113:0.453753429504576 1124:0.276998422855017 1294:0.141492032168854 2548:0.173489417934516 3751:0.200783873709072 4528:0.228502953972928 8857:0.258428079111854
++1 6:0.0226239330058816 15:0.0193779094121369 26:0.0734419643466575 29:0.0205414285149836 31:0.0215575796750534 37:0.0535222956291658 41:0.0520874747105999 63:0.0122253975223964 80:0.0368266674114475 100:0.069901405722369 144:0.0336260044420826 176:0.058634882047994 215:0.0360323814848337 232:0.351420585605125 274:0.061124980319689 286:0.0316919003489392 307:0.0543156784358102 309:0.0416242025128523 325:0.0507886324746229 341:0.0472576046733595 349:0.0560701443639254 377:0.0435320022493896 422:0.0515756793566115 437:0.0508741367536518 480:0.0416005994856629 526:0.0678806759762235 532:0.0653970713652046 597:0.0505769103997092 643:0.0460180353069177 653:0.057778640393813 749:0.131681002343451 764:0.104620886409824 780:0.0573823894020844 812:0.0633521456078496 882:0.0424737728059288 953:0.494428112578173 965:0.0564953486987266 996:0.0629736149545015 1009:0.100819176320257 1025:0.137884434063754 1241:0.211594782627606 1247:0.0875809444586071 1412:0.212984645903226 1614:0.0714724269504224 1620:0.0684023717351565 1781:0.0717991545421855 1855:0.0731795294556482 1865:0.0671296106690862 2080:0.112107933900358 2831:0.185972623306487 2880:0.0850588152418248 2882:0.0905940491975369 3563:0.0974508461066599 3729:0.117329642296057 4213:0.410004288935867 4259:0.0983378868100177 4419:0.105093582466552 4705:0.181188098395074 5452:0.106572699944646 6732:0.125257138707476 7782:0.125257138707476 8046:0.13154954660547
++1 1:0.601459153433861 2:0.287456848710408 3:0.358970005066722 4:0.228438173065556 5:0.0988335897765039 15:0.0603127229196356 23:0.126629171534422 44:0.304893595754764 83:0.0456129475857336 142:0.168903544141731 229:0.18437906791033 409:0.0899039926617108 2455:0.263548381280729 6525:0.331701918192118
++1 6:0.0269938250055263 15:0.046241641142429 26:0.292091791042755 27:0.0392997722139916 31:0.0514430035785377 33:0.074687521918127 60:0.204885942280788 81:0.0821769736370712 85:0.0827129174111967 96:0.0836237618605457 134:0.28999287792674 140:0.0953756076956671 142:0.0454992977822077 158:0.0968747083699375 176:0.419762490848541 185:0.0785957850795117 204:0.0810245079276805 206:0.12873060070115 229:0.141363053759745 262:0.126317169144918 289:0.117427944409238 322:0.23394260798827 387:0.0952744243856049 409:0.0689292070509542 423:0.102259487354092 480:0.19854360465955 586:0.297646691383121 658:0.124828777513426 834:0.136009965563902 997:0.25671681185119 1213:0.171730905440844 1931:0.175943746028448 3867:0.250785552942404 4530:0.221893887682964
++1 6:0.0125956853994923 15:0.0215769778483417 17:0.0343176543974182 27:0.0183378075162673 29:0.0686176106949121 42:0.0376792527821034 64:0.0546228044973246 67:0.0356244916585119 85:0.0385949707376532 88:0.0480897715151681 96:0.0390199831295437 161:0.0614602951903077 176:0.0652889599276013 178:0.101652794069967 252:0.0454509805689807 274:0.136123285364539 291:0.0506905996150971 309:0.0463478529325863 373:0.0899172715811354 387:0.0444563405124362 493:0.112446273987958 506:0.0352330155981576 571:0.0497047734220432 749:0.0733122962385327 796:0.0553600863536565 858:0.0631831133699839 912:0.0598937756723296 933:0.0731875293950679 1377:0.0600674468100533 1652:0.0754417726241064 2504:0.0926762608525251 2540:0.10150339544295 2652:0.201749915447796 2684:0.108509886336272 3200:0.115516377229594 4297:0.456532914461526 5119:0.240975123262315 5228:0.249660616627337 6193:0.124830308313668 7414:0.672502717089008
++1 6:0.0478346863230256 26:0.276055612950008 27:0.0928554228501164 29:0.0579087517268046 41:0.0734204205635491 63:0.0344648625274302 67:0.18038837161079 81:0.0970817030956792 134:0.114196638582649 142:0.016538974447859 158:0.114445218157902 174:0.116879954286215 176:0.082649384013653 192:0.257537576971077 240:0.143541319118632 255:0.148407428146905 284:0.0968309867216001 373:0.227652795100736 411:0.119458212963049 553:0.203829471421501 643:0.259460726365725 952:0.148543086821632 1008:0.414662661762145 1057:0.217224238303479 1527:0.207331330881072 1576:0.176746575667341 1863:0.192092952175419 2246:0.201947465661579 2866:0.218550093935933 4187:0.282702175799756
++1 6:0.0173122046968975 15:0.0593131767590784 27:0.100817976106873 63:0.0374202989999389 64:0.150153190173266 75:0.0350861229331005 96:0.107262433727565 142:0.0224465340786817 165:0.672359345834318 176:0.0897367473753935 185:0.100813154069963 286:0.0970046482955687 413:0.149688623780999 441:0.122077060503794 549:0.55458747534358 1949:0.215424298742477 4281:0.279023729730391
++1 27:0.0813991815118389 111:0.174826102356098 308:0.206553819669928 4297:0.506622800155048 5228:0.554105768401663 7414:0.5970307048645
++1 67:0.241997277668499 68:0.262632943249648 319:0.388094917264234 553:0.546888657535415 772:0.396384289286913 1863:0.515398759583635
++1 6:0.0275770217313123 15:0.0188962733871949 26:0.0716165715749429 27:0.0321190693696501 28:0.0407284753323148 29:0.100154366688168 60:0.0418624932299217 63:0.0119215364741899 64:0.0956730320818376 68:0.0338589077441587 75:0.0111779035834414 80:0.0718226884588656 81:0.0335809569386931 86:0.0428458545681839 94:0.0331100111293319 96:0.0341721752676435 97:0.0344152851462038 111:0.0344920649379279 132:0.0334510568751271 142:0.0128720220682752 176:0.0285887589223341 178:0.0445117708517727 198:0.048023579788493 204:0.198660066775991 220:0.0884909790664888 226:0.0427658547458292 265:0.0521035735880319 284:0.033494233122636 317:0.0328730044460703 355:0.0331945547262357 373:0.039373015024863 377:0.0424500186321048 448:0.0998957053798731 455:0.0402705503948372 475:0.0446919308900866 483:0.0535508579523866 506:0.0925670916025792 513:0.041272810922134 546:0.0476517364010919 586:0.0405436392698212 631:0.0370159405363452 641:0.130925410501071 713:0.0551513344905925 757:0.0524022661361217 800:0.0972764261509953 834:0.0555793745460363 856:0.0413937809066985 867:0.0484821986577612 876:0.0532288614540995 1038:0.0732313421671071 1064:0.0511022681166158 1184:0.0726454652148115 1229:0.0622519701450831 1283:0.0683398623375509 1306:0.0789742589822433 1313:0.14416285467913 1379:0.058214957347599 1432:0.0655807419970004 2185:0.0689276358077369 2578:0.083327827872676 3090:0.10116472567063 6404:0.114413425622655 6842:0.122143884893579 7658:0.343240276867966 7934:0.769679373687727
++1 6:0.00929312375849293 11:0.0835204162597219 15:0.0318390812598389 28:0.0686250251107005 60:0.141071553779503 63:0.0200870701204545 75:0.0188340935387295 97:0.057987680316535 142:0.00481968467435696 159:0.0559070260216491 179:0.0506586321463692 199:0.0434395634152348 204:0.055788372302834 304:0.140734936872028 312:0.0842312520337798 328:0.0942827484740114 365:0.098464601023431 496:0.155855257130848 505:0.133695057599131 685:0.19642676176273 867:0.0816895813841341 1033:0.111322203964251 1725:0.134066939209775 1754:0.131636659421782 1808:0.373758966039579 1892:0.123390395886504 1986:0.14390080726069 2215:0.314862210066202 2382:0.646300465643413 7705:0.180795270856427 9373:0.216143889156753
++1 6:0.011263015816492 15:0.0385881093517572 26:0.0974988749970337 27:0.0655904016477991 63:0.024344988224966 64:0.29306107201724 81:0.0685757245322803 83:0.0291831859695598 94:0.0676140053605679 97:0.0702795074659298 132:0.0683104554098996 142:0.0233653123012276 176:0.0583811491779976 178:0.0908975566702222 186:0.0639135607484122 192:0.0909585708322082 226:0.0873322186676087 317:0.0671300136430797 327:0.0947208889786777 404:0.0945832332365635 518:0.0982231604784767 582:0.189996107466899 852:0.223549140113911 867:0.0990055734845091 995:0.176277427350309 1207:0.128329036472332 1223:0.138401527760193 1955:0.169381474238221 2423:0.290736884484338 3138:0.22324561027399 5445:0.190802261120773 6168:0.261960574880517 6711:0.249430217818284 9197:0.566762723526138
++1 6:0.0103061189832604 12:0.208427331138074 26:0.133823172606505 27:0.0300089467401904 28:0.152210966387649 29:0.0374298149320939 31:0.0392814071831733 37:0.0487631524428596 63:0.0222766574584037 67:0.058297780248718 88:0.0786966157686201 134:0.147623940097374 142:0.00534505350478352 172:0.0808215606795849 205:0.163098692781625 252:0.148756720668383 345:0.0756316575809295 355:0.0620275521298389 373:0.0735726616038441 475:0.0835116209851437 593:0.0992660328722478 647:0.0930942339860785 755:0.10756583422638 784:0.303608846514133 880:0.121229085553259 952:0.0960120894231274 1235:0.241607685531769 1511:0.124399551118978 2248:0.135390065465386 2642:0.143057754005254 2884:0.171896661337339 4001:0.179187581887369 4430:0.660311158851075 7381:0.208637931688625
++1 6:0.0102861521279502 11:0.0924450948640491 15:0.0352412861341237 26:0.222606510739114 27:0.0299508080462217 29:0.0373572992062178 31:0.0392053042219246 42:0.0615408394051874 63:0.044466998273852 67:0.116369670743005 68:0.0631463903781888 75:0.0416932683489483 80:0.0669741557776181 92:0.135807597153813 100:0.127124933234365 142:0.0373428867841292 153:0.0892144347678634 158:0.0738293285549558 176:0.0533176363803137 199:0.0480813523281119 203:0.233938995793121 240:0.0925994059078954 313:0.233287147707467 317:0.0613076944873866 345:0.0754851304191297 412:0.104835822483752 436:0.0908562035638736 465:0.0874667181505164 571:0.0811819039121196 574:0.0770181937533167 609:0.0728417075967176 679:0.129400097824747 764:0.0951334459037418 863:0.108708094608424 1057:0.140132719548669 1102:0.123217677387381 3937:0.722205824853999 6511:0.208233721005534 8232:0.208233721005534
++1 6:0.0203350264347414 15:0.104504455536547 31:0.0387531162196502 60:0.0771724839205589 63:0.0219770613472487 75:0.0206061922738543 142:0.00527316851723822 145:0.0853216236588011 172:0.0797346011425766 180:0.156703544137843 274:0.109881698314859 345:0.0746144964321458 409:0.0519258477529569 430:0.0791335480159889 457:0.070110090066841 560:0.12111879071638 574:0.076129877647543 641:0.0804525989505136 685:0.107454272017129 768:0.127066413288845 1064:0.0942057832741511 1143:0.120675959140693 1610:0.562720618022358 1892:0.135000190858976 1907:0.611626017810653 2138:0.158273257713126 2236:0.145055714956131 2823:0.146681289505272 9881:0.236480854766061
++1 6:0.0346240605834175 12:0.233408280792093 27:0.10081696045471 28:0.255681199209249 142:0.00897852317986169 205:0.273970202998794 252:0.249878820387108 423:0.262329527931105 784:0.339997727319117 4430:0.739452410265545
++1 6:0.0268295736368881 17:0.0730986847081717 29:0.0974397809269236 31:0.0511299844438686 88:0.102434129237567 102:0.127823580298301 142:0.00347864959721066 172:0.10520002812034 176:0.0695347217120882 229:0.140502891294805 325:0.361379435098352 408:0.0789920352372129 426:0.120764429139016 475:0.108701499972785 496:0.112489895931568 499:0.0999194529150807 505:0.0964955779660672 553:0.171486160981851 593:0.129207965816885 641:0.212294676355485 658:0.124069222409701 727:0.143622758565686 800:0.118299805177477 856:0.100679607805914 965:0.133994926316313 1008:0.174432351396965 1228:0.165182037641949 1327:0.174432351396965 1380:0.138166298026661 1448:0.168384728959419 1509:0.169517363879653 1591:0.159217129240407 1709:0.171083886698734 2018:0.212330305455283 2021:0.195805466733391 2134:0.18275546926106 3090:0.246056887803253 3096:0.225458700679365 4004:0.220543713162053 5620:0.243110697388139
++1 6:0.0372192344863808 15:0.0637582293121775 29:0.0675865018151923 34:0.148309344446536 60:0.0706244662172788 63:0.0201123269308213 75:0.0188577748982352 80:0.121169061929444 83:0.0241093473399518 134:0.0666406293582952 142:0.00241287239236119 158:0.0667856905400087 176:0.0482309027227543 204:0.111717037473814 229:0.0487280391396704 240:0.0837650211399388 327:0.078252553203683 345:0.0682835217279758 458:0.0979641535446413 478:0.0729691900359052 527:0.0887472303774632 1064:0.0862125050317985 1098:0.417521546568483 1140:0.0945087942897051 1294:0.105681595587715 2136:0.17289225033594 2569:0.139932521405372 2889:0.140578902747882 6483:0.149967173533379 7011:0.737726986468067 8700:0.206063853505696
++1 6:0.00911162166968955 11:0.0818891961874599 31:0.0347286230139049 60:0.069158157138464 63:0.0196947536852547 80:0.0593266715776362 96:0.112907019366617 142:0.00472555240425026 179:0.0496692288209174 208:0.136527460576143 276:0.0707827010370299 304:0.275972543530081 413:0.0787829240716744 427:0.0967902736872377 467:0.114370654263546 473:0.160445314390645 496:0.22921692023804 505:0.131083886926325 513:0.0681839833958784 574:0.068223825044955 609:0.0645242334684098 687:0.102525747212043 737:0.107368541126864 916:0.110408795981466 1374:0.121647206407074 1645:0.104149735510197 1808:0.27484436740886 2352:0.330252389163502 5508:0.697278182277092
++1 6:0.0116531793353832 15:0.0798496896063958 28:0.0860528435101629 31:0.0444156799659725 60:0.0884488444378742 63:0.0503766519244193 75:0.0236171469712344 142:0.0181310347230503 158:0.0836412290193567 345:0.0855170865632724 404:0.0978597026750291 416:0.113374546483584 513:0.0872029387431794 530:0.0957961350533597 561:0.103265783169586 693:0.138561762558066 717:0.118092466217174 731:0.134292203023086 761:0.118496356226747 850:0.106822133939134 1118:0.450116234854073 1331:0.131732901430883 2935:0.185531418070416 3095:0.184447443056282 4556:0.206610270057012 6125:0.211185805138472 6644:0.471815867462812 8856:0.483475039526281
++1 6:0.0197686040793244 15:0.033864511440514 29:0.0358978580276813 31:0.0376736668548153 37:0.0935346715740777 67:0.0559117228469923 75:0.0200322167247499 111:0.0618141420672367 141:0.0902900194547197 142:0.0076894304265137 144:0.0587642447855836 176:0.0512346711839776 215:0.062969589188907 232:0.175467644825403 284:0.0600259012732842 303:0.176627933928974 317:0.0589125809273268 325:0.0887573674179571 437:0.0889067932705506 493:0.176481533172683 506:0.0552973112450646 609:0.0699959936441451 780:0.100280507100205 953:0.540033954347403 1009:0.0880949558929749 1056:0.0970608349510101 1430:0.148647367505455 1614:0.124904021825385 1822:0.140508313790914 2831:0.162501328075164 2937:0.186244673755235 4213:0.358258330091898 4259:0.171853651603307 4419:0.18365979270881 4705:0.158320650088856 5452:0.186244673755235 6732:0.218897287449833 7782:0.218897287449833 8046:0.229893794591958
++1 6:0.0328259896324698 29:0.0397391982666423 58:0.0733997660606516 80:0.142488847520581 96:0.135588181830495 108:0.101290264905374 142:0.0113496762598351 159:0.0658265725735006 174:0.0802074908934027 199:0.306882098068337 256:0.074463606735129 330:0.108822405359602 365:0.115935109885469 436:0.193298378838813 446:0.135012792133997 485:0.227165673126443 537:0.24475107070866 902:0.3018314320751 963:0.0928362974366935 1078:0.138901772856155 1135:0.445868345886645 1237:0.134182614505313 1620:0.264660796137832 1967:0.350524295835883 2062:0.175262147917941 4737:0.200700439928527 4915:0.200700439928527
++1 6:0.0356623197189233 15:0.0305455820064665 26:0.115767263483116 29:0.0323796481802836 31:0.0339814168711537 63:0.038542019640996 68:0.0547324872982329 75:0.0361378737036859 84:0.0523251205275172 92:0.0588559974822569 102:0.169905248958112 142:0.0115596986188465 180:0.0687042614631744 192:0.144002001197796 252:0.386057768794758 256:0.06067322677575 275:0.0599536829409531 284:0.0541429954799707 289:0.077568719820197 345:0.0654271592901297 373:0.0636459705382323 381:0.0857028179867093 404:0.0748702114666481 426:0.0802610533606746 475:0.0722439293747498 505:0.128263542293374 561:0.0790062795188604 613:0.0824574467104009 644:0.084952624479056 659:0.130660057297107 671:0.0544477578759526 688:0.0989729349713018 723:0.0915024671411074 755:0.0930526606874158 764:0.0824574467104009 772:0.0826061567531249 814:0.0989729349713018 975:0.110470505298514 1189:0.121460819008486 1198:0.106205346040698 1250:0.120389287421933 1294:0.101260837367145 1411:0.112918819591739 1416:0.107615111277612 1713:0.146575203117837 2067:0.111179619490564 2335:0.131747468615924 2402:0.122966692920761 3851:0.173450255277695 5076:0.165660008688802 6786:0.571219575942401 6814:0.173450255277695 8402:0.207362795350573
++1 102:0.351150532621994 229:0.192991250119743 325:0.330921156637086 641:0.291602646792836 727:0.394553243222301 800:0.324987294990526 3096:0.619368841359815
++1 6:0.0148493396993718 28:0.0548274367279043 29:0.0269649534278638 32:0.0556577561504586 48:0.0454214502066472 63:0.0320968207822622 67:0.0419985226271216 75:0.0451420631244815 81:0.0904113290171637 142:0.0192532502615108 159:0.044666489038112 179:0.0809466501249892 180:0.0572151741839601 295:0.126081324145624 345:0.0544860862401228 346:0.185574089714079 365:0.0786675367162631 413:0.064196827110468 427:0.0788702442704653 467:0.093195742666117 499:0.165906985961725 531:0.167087671489703 598:0.0784668263132916 799:0.0749029294058128 867:0.0652652636183769 963:0.0629938837718596 1035:0.0906822725123733 1045:0.038569675116839 1134:0.0903216977699675 1389:0.094689643043206 1448:0.279587227998351 1471:0.0859914085908399 1627:0.0991250930351561 2134:0.303448509659994 2448:0.109715965278169 6710:0.164426388811804 9711:0.747229014653205
++1 6:0.0333645265707916 15:0.0285774702965906 31:0.0317919275876254 40:0.0521169934324286 63:0.0360586817834408 75:0.0169047198401784 83:0.021612399369004 142:0.00865190766632479 154:0.0602966531843804 158:0.119737709671925 179:0.0454691372409312 196:0.310258000868274 198:0.0726276761994567 204:0.0500733843218768 209:0.0523975266110909 232:0.0740365237044529 237:0.0716797422417141 240:0.075089676402374 243:0.0786493737035356 317:0.049714951137078 331:0.0652051986767439 409:0.0425984527884495 480:0.0613502659568265 519:0.29919441987263 530:0.0685691132303734 553:0.319883274257595 608:0.0910169063337788 631:0.111960905677265 781:0.180779676941218 936:0.0976009551089628 1008:0.325378977416248 1020:0.106627758085865 1394:0.324566427864116 1599:0.101072491284041 2112:0.13443542875477 2264:0.113295794277403 2934:0.145023282933846 2935:0.265599959880969 3666:0.119435430151518 3787:0.152994819860845 6094:0.337717128378133 6763:0.173031274752739 7130:0.184722308517288
++1 6:0.0130896923114662 15:0.089692935981872 26:0.0566557969561112 28:0.193321532545992 31:0.0498908982541641 33:0.072434097888241 108:0.242343048895642 142:0.00678869571364159 158:0.187903733548824 231:0.140327810027765 284:0.0794917613032177 408:0.0770777389387947 499:0.0974980006980196 592:0.386823299645813 667:0.126076734548484 674:0.173330227631288 731:0.150846697438501 977:0.359943696987834 1056:0.128536790954452 1595:0.327886242429576 2152:0.210968783798118 2619:0.225531359325826 2862:0.221747259445902 5003:0.234557500588928 5167:0.250426246621601 6259:0.271537034037452
++1 6:0.0170518746123896 15:0.03894750825274 26:0.0738052142688144 27:0.033100646188589 31:0.0433284104309708 49:0.10268535340642 63:0.0368575959952368 64:0.0492984268672932 68:0.0348936550020496 75:0.057597533008735 94:0.0341218716856053 96:0.0352164961571873 97:0.0709340712206508 134:0.0814165164214893 142:0.0250568634555524 166:0.0424104529798922 176:0.0589248949381596 198:0.0494912073881702 209:0.0714112578520325 226:0.0440728033120376 317:0.0677552438896916 547:0.0713460284216493 582:0.143824258713362 867:0.0499638419079424 883:0.0662795777434687 2057:0.0899661394557997 2277:0.326228978912078 2436:0.110579907225826 3989:0.0955287511283448 4069:0.0979328459085073 4317:0.098824273987248 4635:0.858062090474296 5391:0.11266242884919
++1 6:0.00921789546244037 15:0.0315813423236853 29:0.03347759925758 100:0.0569612587218073 111:0.0576465892472563 218:0.104574827284345 292:0.0908972667559488 331:0.0720591318728392 448:0.0834778478174873 531:0.103721560691336 679:0.115961397395332 749:0.214608435001241 882:0.0692220574590123 1011:0.110629212861609 1133:0.322464485307125 1229:0.104041719718554 1614:0.232965810110779 1618:0.141290259627095 1639:0.124471529053587 1651:0.126345884591171 1911:0.124835452244822 2216:0.125579394860118 2257:0.132981660711841 2280:0.125204688370733 2322:0.291803155083138 2949:0.274782891766629 3081:0.169076609287995 3393:0.176352729115499 3797:0.326865624571542 4385:0.152621801905722 5531:0.342554641298908 5886:0.196862958948895 6548:0.214394193693096 6809:0.186607844032197
++1 6:0.0548943898836143 15:0.0626910457536369 17:0.299125714978392 26:0.158398701984834 28:0.270244895193385 29:0.0664552407325909 31:0.0697426737323884 63:0.0395513746675334 75:0.111252803759836 83:0.04741161144168 94:0.10984712065073 134:0.131050400527799 142:0.0237248579797544 158:0.131335666830768 176:0.0948472302932635 186:0.103835301300506 192:0.147773187687096 414:0.270399258741857 731:0.21086916393981 850:0.167734935960051 1007:0.633657114204782 6763:0.379582637992568
++1 6:0.011289070628054 15:0.0386773754891823 26:0.0488622099058788 63:0.0244013056528217 67:0.127715924831744 102:0.10756856932935 142:0.00585484085951622 153:0.195826008133719 337:0.0863068172687701 345:0.0828450676277561 829:0.167494179670608 844:0.123704881635961 867:0.198469207510309 886:0.0972355132103057 975:0.139879777475047 1001:0.132325574286449 1074:0.295076216763227 1557:0.166124958051158 1689:0.180821366401062 1709:0.143973818324757 1751:0.15379591402188 1959:0.179734407412779 2163:0.142655527770877 3719:0.18829139792737 5563:0.234184324767963 5564:0.234184324767963 7077:0.629285212988404
++1 6:0.027593689829252 29:0.0334049673234596 31:0.0175287284448778 98:0.0596638332246894 100:0.0284188386936717 111:0.0862822815622365 140:0.0324983576242823 216:0.0400124877282341 218:0.0260869862666377 219:0.115360114376688 242:0.0322251415144661 252:0.066380416281614 274:0.198805839500102 277:0.0832967369350568 306:0.0721766203491653 398:0.0715422549383538 399:0.0433639486064256 405:0.0437369415580906 419:0.111893141988051 426:0.124203844800838 431:0.051280853036785 448:0.0832967369350568 463:0.169537577285356 479:0.0582472276669532 506:0.0257286224959739 564:0.398890148436664 657:0.0477659259942205 685:0.0972069829819374 712:0.0422319950789891 713:0.0459872242075963 715:0.0567462116274129 729:0.148501883698165 800:0.0405563424787352 836:0.0521514517359298 876:0.0443841950265465 914:0.058929484420293 966:0.0459370504790311 1003:0.0486034914909687 1116:0.0536274794367249 1156:0.128947419986666 1159:0.0935296026807405 1227:0.0502531838657975 1237:0.0563972859096268 1294:0.104467316771383 1356:0.0982179256685858 1430:0.0691623501659767 1614:0.0581150937254844 1880:0.0642580008755 1979:0.0679596618771062 2194:0.280584486427061 2292:0.161449452266912 2977:0.0815391168282646 3441:0.182312630589949 3557:0.0772932826545676 3707:0.0866555497011064 3880:0.333379440100539 4004:0.151216586521228 5222:0.080724726133456 5637:0.0954021494686713 6441:0.273468945884923 6466:0.392871702674343 7524:0.101848092563309
++1 6:0.020812213544704 15:0.035652261578964 26:0.0600539985579896 28:0.0256146141712093 29:0.0251953007260626 31:0.0264416713980157 33:0.0191946695829706 37:0.0164120807486978 54:0.0259721204988769 59:0.0430775933789529 63:0.0224927808828696 75:0.0210897426331346 84:0.0203576508904292 85:0.0212571936941735 94:0.0208232729892882 97:0.0216441750745512 100:0.0428691445939345 107:0.132721395408958 134:0.0248426927294957 136:0.0439322811879444 142:0.00719588011291202 144:0.0206221610516572 150:0.121000237959978 155:0.0360268836137451 172:0.0544037829245539 180:0.0267301318267682 185:0.0403981839662362 198:0.0302025906289339 199:0.0162140218506605 226:0.026895945897274 262:0.0324634726407281 274:0.0374867371055975 286:0.0194360134030964 296:0.0312793010694287 306:0.0272191802715964 309:0.0255272971650648 325:0.0311476601476423 342:0.0324036140351572 355:0.0208764434455272 372:0.0342408418284333 382:0.0304666488171191 389:0.0295617485398524 415:0.0301789446865515 436:0.030638582288614 437:0.0312000982247197 459:0.0316855143692628 475:0.0281072776963895 493:0.0928991076038627 505:0.0249511552926584 538:0.0303939033400633 571:0.0547524185645555 574:0.0259721204988769 591:0.0364737960857689 678:0.0375377693292752 696:0.0382825335892021 713:0.0346853188703332 714:0.0717936040820198 780:0.0703829607717379 799:0.034993604507627 801:0.041949816805245 840:0.0876652414569852 867:0.0304910213961573 880:0.122405224530284 882:0.0260483217619272 886:0.0298767768658296 953:0.189514341936162 987:0.028318572663091 1134:0.0421970381571535 1138:0.0342047222901553 1154:0.0471146355439348 1213:0.0441347885492145 1215:0.0406586187090744 1227:0.0379028683872324 1322:0.0389708445393442 1339:0.0418688164277079 1430:0.260824414896114 1545:0.0443416985875209 1599:0.0420315124734946 1614:0.0438326207284926 1620:0.041949816805245 1639:0.0468387470410961 1651:0.0475440686962371 1688:0.0467037449631909 2021:0.101260030989903 2171:0.0479937974094157 2215:0.058761902199162 2934:0.0603086739838134 2952:0.0542886488086331 4213:0.691480602620786 4224:0.0687535705303244 4259:0.0603086739838134 4311:0.0608856680285724 4419:0.0644518080301136 4705:0.0555595320904458 4740:0.285133295841856 5452:0.0653589214191013 5977:0.0719559406390406 6395:0.0702206976082498 6634:0.0653589214191013 7634:0.074079706468451 7846:0.0806767256883903 8046:0.322706902753561
++1 6:0.0425843190006064 102:0.405767172664904 252:0.307327309956132 505:0.306318581865583 764:0.393849221516343 1713:0.700100863470929
++1 6:0.0323177514422314 28:0.178987703318085 29:0.0293429431939628 31:0.0307944910132714 83:0.0209343342365651 98:0.104817493284398 112:0.0899563146243971 142:0.00419023181504095 158:0.115981071430127 226:0.0626470960749625 408:0.0475752055411405 411:0.0605306702787128 489:0.0920558483426158 513:0.0604599572834412 576:0.0790908422709431 628:0.0877949216222771 643:0.0657356714467889 709:0.0704596295062851 795:0.0957191843621102 1305:0.0734832501236071 2074:0.138007631717657 2265:0.140473337790305 2547:0.383645942061614 2992:0.123840184303521 3366:0.129411449518973 5041:0.148194776560693 6412:0.187915405709015 7667:0.178926850342994 7907:0.751661622836062
++1 28:0.227653803142089 31:0.11750220040319 158:0.221273848823906 423:0.23357335187211 1305:0.280389228663681 2547:0.487957866106276 7907:0.717026745171776
++1 6:0.0345418324353952 15:0.0394478124670477 26:0.149506573446153 27:0.0335258439362085 29:0.041816400450134 31:0.0438849899738058 41:0.106035015984691 47:0.0544964067117136 63:0.0746621080543207 67:0.260519944184286 75:0.0233349632120132 88:0.0879194621993516 142:0.0238858672626535 153:0.199726779475771 158:0.0826418620568988 174:0.0844000056517093 229:0.060296986619782 232:0.102198650632622 252:0.0830951290088283 255:0.107166261749913 286:0.129031064713957 291:0.0926743903392493 317:0.0686256008285614 351:0.0817106571582515 355:0.0692968683790873 373:0.082195006451143 409:0.0588021178762497 441:0.0811906097837698 475:0.0932987617408781 477:0.123109334964933 480:0.0846867746217946 499:0.0857611093971749 509:0.106874190351142 531:0.129557149059897 541:0.118729192125444 772:0.106680965500378 912:0.109499970165983 1001:0.134961443816326 1243:0.30659201965741 1500:0.131397989997344 1706:0.173155118076215 1751:0.156859463647687 1822:0.163674164389508 2022:0.496439767226188 2291:0.195053137907576 2484:0.184423251619527 4960:0.208662502706526 7224:0.228219291282249
++1 6:0.0342596931025261 11:0.205268892227137 28:0.0843301764668424 29:0.0414748420991677 80:0.223068256642555 118:0.0747790496972331 158:0.0819668393906461 229:0.0598044779605861 245:0.132042092722101 294:0.109132205426985 341:0.095417010086849 409:0.058321819376165 413:0.0987412522256733 427:0.1213104608614 467:0.143344535036272 486:0.340423964092742 952:0.106388082753275 1225:0.101865243774374 1725:0.164748772385759 2709:0.17096705757854 5419:0.413916274887911 6703:0.252904516640442 7272:0.215179090347199 8727:0.252904516640442 8730:0.505809033280883
++1 6:0.0461617440397586 15:0.052718101317818 28:0.227254109325516 29:0.0558834849845756 31:0.0586479503699502 42:0.0920600966320808 63:0.033259508625457 75:0.0311848713001786 138:0.129029998844574 142:0.0079802750245555 174:0.112792263269046 200:0.14864987734764 205:0.12175485459388 256:0.104714891854599 345:0.112919623258901 346:0.256395197907686 408:0.271820205654432 444:0.202140157631614 501:0.16001025084429 502:0.106211446671641 565:0.163666170492518 586:0.113111386516449 1124:0.171067767180018 1202:0.190659169294097 1734:0.425803317220573 3122:0.319198311778296 3135:0.258609323506307 3691:0.2358529965541 7320:0.328619388917165
++1 6:0.0354491826221944 15:0.0404840336946777 18:0.0632528279382443 26:0.0511446117324914 27:0.0344065059802681 28:0.0436290514510556 31:0.0450377676651714 33:0.032694040254673 42:0.0353480489701247 63:0.0255411146115449 64:0.102486616675905 75:0.0119739648139975 80:0.076937713591227 81:0.0359725053810566 83:0.0153085121810445 103:0.0562422931257934 107:0.113031345119026 118:0.116063044454238 134:0.0423142473290184 142:0.0153208155695521 150:0.103049094791355 158:0.0424063556236125 159:0.0355434553333767 174:0.0433085190146984 176:0.0306247760017353 180:0.0455290987000063 185:0.0688097206934784 208:0.0442638630308077 239:0.050090380706722 252:0.0426389423427103 255:0.0549906608286614 286:0.03310511816025 312:0.0535508675274145 355:0.0711171692153548 387:0.0417058403613705 405:0.0561881661431658 499:0.0440069477290842 507:0.0315908244570527 530:0.0485689296782122 561:0.0523560638238215 586:0.0434310518447668 617:0.0828283688780602 723:0.0606370663047525 781:0.0640250034086677 782:0.0673170715516649 847:0.441043225154041 1007:0.340997607844849 1033:0.070774213292694 1359:0.0655876131839799 1497:0.0717321046753701 1613:0.0677522927579091 1720:0.0768242333823761 1861:0.229884831709086 1877:0.0958352205715237 1951:0.0736767670798443 3105:0.647284228204255 3167:0.091486388729148 6389:0.119606034602031 7223:0.1113250321211
++1 6:0.0281130096027786 26:0.0608404279482189 29:0.0510504850722811 63:0.0303831095906767 73:0.152744505078219 80:0.0915232956451212 117:0.290240139439941 142:0.0145802256651035 174:0.103037592481474 185:0.0818544263447615 259:0.170998496105102 263:0.201273012979063 268:0.135254686045145 317:0.335119252060211 345:0.103153937932418 565:0.448535236977714 592:0.138464766509386 1229:0.158654753541919 1401:0.264859282968968 1482:0.333062076296029 1495:0.211392005896829 1720:0.182776604512114 1776:0.162800322735765 3087:0.242189240189423 4720:0.240103949228675
++1 6:0.0311701909207761 26:0.269826358919647 29:0.0566020283414964 31:0.118804077803195 63:0.0336871555229952 67:0.176317869370757 142:0.0363729801312275 153:0.13517352893543 237:0.267861885716934 291:0.125442611321087 592:0.153522275589864 723:0.159953104172129 764:0.144141737108543 858:0.156357486254049 1005:0.16429220839674 1557:0.229343354726318 6930:0.690293580110435 6956:0.345146790055218
++1 6:0.0194819125842237 15:0.0333733959638328 26:0.0421615442679893 27:0.0425449927916556 29:0.0353772542183494 63:0.0421101186565204 67:0.192853047386988 84:0.0285846078468962 88:0.0371905416473628 107:0.0465892290455956 117:0.150849191483655 134:0.0348821498784727 142:0.0151558310127205 178:0.0393069290237476 211:0.0484387967923667 215:0.0310281906380484 256:0.0331450816874575 286:0.0272905171733602 345:0.0357421000083745 373:0.0347690572048226 394:0.0907470181650418 402:0.037123218056543 423:0.0369012245047171 456:0.0527796169338759 457:0.0335843833382165 475:0.0394660226231126 477:0.0520761016350512 485:0.0337051665123912 502:0.0336187815670264 507:0.0260421948410679 535:0.0461862727532764 561:0.0431602162540886 571:0.076879028025416 594:0.0466347613026388 658:0.0900910979090292 714:0.0504034583765426 800:0.0859017177980623 856:0.0365535312792292 997:0.0463192460346169 1011:0.0584533818758657 1018:0.105704098227967 1080:0.0492457040996402 1190:0.0527075752256385 1309:0.0574946175306357 1389:0.0621150632198522 1880:0.0680519040932877 1931:0.0634908294612811 2202:0.0682803490495395 2227:0.0644935775143918 2322:0.0770903128362411 2433:0.0663526399006489 2526:0.218747489542844 2786:0.166388594323163 3277:0.279539548909235 3851:0.0947538673217117 7838:0.792959268734148 9103:0.122542909639319
++1 6:0.045663369960795 15:0.0260744715584492 26:0.0329406089828963 27:0.0443202605933043 28:0.0562001538563202 29:0.0552801524862524 31:0.0580147719912574 63:0.0658008608067503 67:0.0430500416259857 68:0.0467210178898813 75:0.0462722870955663 80:0.0495531211127882 83:0.0197194463613588 96:0.0471532875212481 102:0.0725176816184359 142:0.0217088242795508 153:0.198025057862914 158:0.0546251552868722 176:0.0394488778891667 192:0.0614618520576366 219:0.0636344953513975 228:0.0575585418949568 229:0.119566482728873 237:0.130803138346471 317:0.0453605958120123 325:0.068340021866479 330:0.0756899915523619 339:0.0591957885171335 351:0.0540096414186405 355:0.0458042946018735 390:0.0695201095228966 408:0.0896285215663082 409:0.0388674061818161 414:0.0562322553143985 490:0.0787599525868391 499:0.226747742695812 507:0.0406932797272952 508:0.0590482119709863 531:0.085635526714642 587:0.0963903241141432 716:0.0728710232868416 801:0.092040666431319 851:0.0864387793742291 867:0.0668993131126865 993:0.0836333240979821 1001:0.178415385198641 1159:0.0773886507372651 1294:0.0864387793742291 1581:0.108576742338744 1679:0.32938054004998 1751:0.103681988119665 2022:0.656279969989988 2042:0.097752676324336 2282:0.110215386170407 2291:0.128927491252039 2629:0.126008983158561 4295:0.145601924466914 4960:0.137923097679524 7544:0.157876082292728
++1 28:0.380354984569009 63:0.111332815301379 75:0.10438817830287 142:0.0133565786459486 158:0.369695608829396 499:0.383649457591405 2022:0.74026890417614
++1 6:0.0189184443926817 11:0.0425065992804398 15:0.0324081495082777 28:0.0698515781798709 29:0.0343540509075883 31:0.0721069801996453 64:0.0820422594467637 80:0.0615899330509977 128:0.203355562629511 159:0.0569062669580922 199:0.0884319402464043 205:0.074848096429896 245:0.109371863658297 255:0.0880418967702096 256:0.064372877363472 304:0.0716251646516541 346:0.157617472922689 505:0.0680423122110584 685:0.0999687743921044 856:0.0709926138794247 1472:0.0961869143815676 2227:0.125256506989891 3188:0.161576198213122 3360:0.132611003259779 8239:0.196225325880705 9179:0.713991876836433 9185:0.475994584557622
++1 6:0.049648966738278 15:0.024300263407161 26:0.030699202217093 30:0.0852663122008954 31:0.0270336109733567 33:0.0392487466058663 38:0.0577862730717111 41:0.0326593372061243 75:0.0431237412560208 81:0.043184498993741 85:0.0869322814074006 111:0.0443561672862192 137:0.0580645775438163 142:0.00735697152631496 144:0.0421676429533305 179:0.0386637445646407 185:0.0413025626456913 204:0.170315485042045 205:0.056122564428015 229:0.0371435718708795 242:0.049699094945932 255:0.0660155335878005 265:0.0670042466416456 278:0.0612320866497245 284:0.0430729737458427 289:0.0617090983366438 303:0.190115188598373 309:0.0521975339889765 325:0.0636899017832042 355:0.042687592786288 377:0.0545899507941109 408:0.125294774122657 426:0.0638509601024366 437:0.127594251519348 441:0.10002852277711 478:0.0556216995863472 495:0.0781662817256832 507:0.0379243511822631 582:0.1196471020566 609:0.100454488232409 631:0.0476018253369758 643:0.0577074830754315 710:0.081736971629444 732:0.0776117968535816 757:0.0673883598182286 780:0.0719585971709405 781:0.0768611378603582 827:0.0605833231579569 873:0.0820091593180862 953:0.15500554156825 974:0.0911012051811489 989:0.08577786259016 1009:0.0632145730731095 1111:0.176140100639356 1126:0.0756380483654086 1149:0.0680458920412057 1150:0.0773943521053926 1169:0.319725347218988 1227:0.0775027707841249 1237:0.173956974920168 1431:0.0828493373798469 1614:0.0896277696579866 1620:0.17155572518032 1797:0.123317562362549 1822:0.201649980512072 1827:0.0954985676456535 1858:0.0913211069841355 2067:0.0884479476788716 2081:0.124497384341664 2254:0.114314398583603 2838:0.106665356490045 3744:0.400932519435539 4213:0.25707655060476 4259:0.123317562362549 4419:0.131789331966838 4705:0.113606644132758 5452:0.13364417314518 7779:0.143585402968256 8046:0.164965609324366
++1 4:0.026225924473733 6:0.0181892489349142 15:0.0415453396830037 26:0.209941557050036 27:0.0706169740414704 29:0.0220199353572842 30:0.07288846718549 51:0.0411785585183565 57:0.0452655676983 63:0.104842742738717 64:0.105173346482073 67:0.102889636634235 75:0.12287867343003 83:0.0157098312732238 92:0.0400253039419043 97:0.0378327165994372 134:0.0434235331383447 142:0.0597453373609165 153:0.105173346482073 158:0.0870361121813239 174:0.0444438700748837 176:0.0314276173985908 192:0.0489646264845126 199:0.0850234058124535 205:0.0479754265206038 218:0.0343921157410809 221:0.0577167085198166 229:0.0635031104214699 265:0.114554897627595 286:0.0679459655421822 291:0.0488010460627645 303:0.0541722529016574 308:0.0447983795748499 317:0.0361372877108764 322:0.157637546079911 327:0.0509899496736557 346:0.0505140801920608 363:0.0566395689540997 373:0.0432827481385938 377:0.0466652976352398 387:0.0427991765258819 391:0.0627454515483208 408:0.0357020406474074 437:0.0545358956830052 480:0.0445948786293212 508:0.0470417591878999 527:0.0578283599110756 541:0.0625211426015145 579:0.142386871079462 732:0.0663451339943114 743:0.153934059705083 1045:0.0314965036040684 1057:0.165200027382523 1193:0.0739044590458954 1241:0.0756082345490212 1376:0.0868163883005148 1591:0.0719613870288865 1607:0.0784467597720597 1767:0.0920343938350925 2410:0.0847153665361098 2581:0.28314413000865 2976:0.081871313486188 3050:0.0943813766695501 3277:0.231992483411109 3552:0.106424486752594 5179:0.101126692120929 5229:0.115996241705555 7170:0.647434363041557 7341:0.114243464709408 7664:0.125774657637267
++1 26:0.149686330296799 63:0.0747518768524216 111:0.216276366406951 142:0.00896796977071743 322:0.299717516579412 2581:0.538344179991304 7170:0.738583253537661
++1 6:0.0185684472431948 27:0.0540668650608559 29:0.0337184902007242 31:0.0353864892353714 37:0.0878561585615086 53:0.0715011039639436 56:0.0857129951890861 63:0.0200678324907244 64:0.161048903877005 75:0.0188160558998091 80:0.0604504999899329 83:0.0481120206073627 132:0.0563090342810332 142:0.012037672010292 160:0.0841505827460929 299:0.0768582150127175 325:0.0833688857206104 330:0.0923352097874877 337:0.070979429396105 351:0.0658870673474337 369:0.083021346662991 398:0.0722137159638078 434:0.160674739877467 501:0.0965455908234389 506:0.0519401978219796 507:0.0496422637061778 539:0.0862558453340445 733:0.104790360856065 890:0.0975024814545307 1007:0.107169682733815 1014:0.227706414303925 1149:0.0890707951890151 1194:0.142306925835349 1411:0.117587815984974 1433:0.0895123004830511 1455:0.12327222341366 1485:0.115776702990723 1486:0.126866090353816 1527:0.120722675591376 2340:0.128872971595372 2692:0.606383695732675 2771:0.133938541682405 4111:0.157280331361855 5357:0.157280331361855 5978:0.162964738790541 8373:0.411215958130471
++1 6:0.0540068839774506 10:0.0828221394479051 27:0.0142959175957448 28:0.0362557781765169 29:0.0891556698950303 31:0.0374264225264162 37:0.0696906174415876 38:0.0400008247943686 42:0.088122774606127 53:0.075622944968072 63:0.0318370313451347 75:0.0298511242681997 80:0.095902956330641 81:0.0298931820008109 83:0.0127213864016984 96:0.0304194742426251 132:0.0595550944610197 142:0.00509264421112751 172:0.0385024633299577 185:0.0857714030059601 190:0.042095674521864 199:0.0229498666518072 229:0.0257115302937133 242:0.103208150501618 243:0.0925884309327716 299:0.081288878660978 314:0.0391793069553059 327:0.0825804989398357 337:0.0375355986516907 369:0.0878072978151025 387:0.0346575881555291 411:0.0367833071292193 414:0.181382437159896 422:0.179082549783755 432:0.0461209478942001 462:0.060331291965836 473:0.0864545381825776 478:0.0770049266599154 493:0.0876616610494119 495:0.0541082782109195 509:0.0455727414730862 574:0.036761804542012 586:0.0721824806768093 609:0.0695366247033444 641:0.0388491720846883 644:0.0467825227908628 658:0.045408454461071 667:0.0472891980609762 719:0.21138229403363 727:0.105129819712539 730:0.0471956465181704 731:0.0565799818464544 733:0.221662471007408 796:0.129474022219362 799:0.0495311135332783 856:0.0368480215916619 882:0.0368696623481635 890:0.206246459998847 908:0.0522221084581327 965:0.196164766457766 966:0.0490411916144414 1018:0.0532778470030405 1031:0.120662583931672 1055:0.107147865888483 1068:0.0578545884852674 1098:0.110153395072017 1149:0.0471027401635506 1156:0.137660887362382 1169:0.0553300849691166 1184:0.0646677257340974 1227:0.053648982542388 1296:0.0499820800954697 1308:0.114699967750063 1377:0.0468278047428267 1395:0.0524267407678664 1412:0.0616276152005264 1437:0.0670897848932453 1558:0.0591488344079991 1583:0.145723309693384 1614:0.0620421515391733 1654:0.0693031717648601 1781:0.0623257697626633 1862:0.0690647342478629 1949:0.0610940259240855 1951:0.0612254549472931 2056:0.064002337749272 2102:0.13720031655645 2108:0.0738359130946602 2154:0.0670897848932453 2248:0.128996544659359 2537:0.221507739283981 2741:0.076841961996873 2771:0.0708298641924474 2868:0.0781680844461718 2924:0.152050530809986 2985:0.0879784532948215 3353:0.108730355364077 3388:0.0853629061699735 3999:0.0853629061699735 4803:0.0825162836021026 4822:0.177953578122617 5376:0.182454472231851 5677:0.0912272361159257 5678:0.182454472231851 6109:0.277533583873865 6640:0.0955172435268345 8876:0.104854884291815 9644:0.114192525056796
++1 6:0.0214410822296005 26:0.139204372312339 27:0.0624312891909359 29:0.0389349153207557 64:0.185964003655687 94:0.0643574275499919 97:0.0668945477474329 134:0.0767800430944587 142:0.0333599093617554 192:0.0865776195503807 198:0.0933456061025359 204:0.193072282649976 226:0.0831259279154982 240:0.0965099218729419 265:0.101276074755433 317:0.0638967469302455 409:0.0547501806838455 441:0.151191852131857 856:0.0804589658794489 867:0.0942370443607924 1057:0.146050589449104 4911:0.181612413448533 5710:0.194283983940313 9470:0.809197533621675 9591:0.228954369681486
++1 6:0.0215307136324505 15:0.073766169346386 26:0.186381728592925 27:0.0626922743395395 41:0.0495705367205553 63:0.0232692992000247 64:0.186741399794034 94:0.0646264646467835 97:0.0671741909153201 134:0.154202022346779 142:0.039082593352541 176:0.0558015643840385 192:0.0869395450079025 198:0.0937358241678023 204:0.129252929293567 226:0.0834734240657618 265:0.101699445019968 317:0.0641638582170536 337:0.164605876636493 387:0.151984859316756 441:0.151823888223177 599:0.100939578619071 1685:0.154147551814032 2270:0.158418217798806 4716:0.715227255109804 6333:0.426762901058237
++1 6:0.0143294661969935 12:0.0321993435908601 27:0.0139079896328054 29:0.017347275882102 31:0.0364108349816823 60:0.0362540467872517 63:0.0103243717171218 65:0.0341719273736002 67:0.0540375462247626 110:0.0921952556905874 132:0.0289695163251064 142:0.00371583928161125 172:0.0374576767978791 174:0.0350128219246684 179:0.026037572718356 215:0.0304294154542666 218:0.027094063186355 232:0.0847929600930999 274:0.0516201634234077 275:0.0321199622779741 285:0.0509374145408039 394:0.0444979011053545 422:0.0435557603967684 426:0.0859991206503302 442:0.0406464423595022 448:0.043256185874983 478:0.0374576767978791 591:0.0502253186057717 643:0.038862319309444 647:0.0862911752526325 655:0.0361675394455089 663:0.0894060082255325 674:0.0632489946710218 719:0.05141157841546 856:0.0358481292896347 890:0.0501624608608646 966:0.0477104306167163 1064:0.04425594073098 1113:0.0579919023882579 1319:0.0504157211995483 1377:0.0455571052734751 1446:0.0498526162952918 1468:0.0669626899237543 1476:0.0614989569839741 1816:0.0524893756914199 2082:0.0830465345149662 2220:0.266255197464368 2815:0.0721641435397539 4720:0.571121823666962 4911:0.485499549248011 5658:0.0966956360067491 6365:0.408038346307662 6483:0.0769834763650335 6598:0.0887517324881226 8737:0.105779894508132 8745:0.211559789016264
++1 6:0.0300896153862648 15:0.103089739710509 29:0.0728530780024998 42:0.120015088584862 68:0.0615730928299119 81:0.0610676337974944 142:0.00260089183327512 144:0.0596296874568513 159:0.0603392699842162 179:0.164024368650581 186:0.170747736860178 200:0.0968944681282738 204:0.0602112095366538 229:0.0525250980744396 255:0.0933532291452609 256:0.0682563210437938 319:0.0909870790459553 365:0.106270760006806 582:0.0845970844119651 856:0.0752754085751302 1627:0.133906556787022 2252:0.66426316615891 2419:0.456744452074158 3084:0.177829110893119 3374:0.168569347659499 3545:0.186364618103679 3778:0.167289110292134 7615:0.21420401734541
++1 6:0.0146324807730944 15:0.0250661002949527 26:0.0633334107417059 29:0.132855793782297 48:0.0895162357775341 52:0.0596482012442684 63:0.0158140403035489 67:0.0413851785521296 80:0.0476367661356723 88:0.111732332899735 134:0.0523985912794085 142:0.00379441537434895 199:0.0341988653645197 238:0.0721451286550571 252:0.105601335409776 275:0.0983975377736511 289:0.190961689027813 308:0.0540575999157825 345:0.0536903744846978 386:0.058268649608102 543:0.0809809025782418 561:0.0648335764540867 574:0.0547807977781893 655:0.0553985212991654 671:0.134041606357181 686:0.0865211649897971 719:0.0787481113047143 726:0.0674237854260676 867:0.0643121333595217 895:0.152161511724548 1010:0.244376663366474 1190:0.0791752429594752 1380:0.150708000561372 1471:0.0847355948702556 2017:0.11002697703221 7001:0.54377099664065 7546:0.60708232633637 8132:0.145016093080003
++1 31:0.120399444013185 110:0.304861383469633 111:0.197548817473181 232:0.280384266292641 274:0.341384040172368 426:0.284372668661173 4720:0.539578398007015 4911:0.53513261302137
+-1 6:0.0183062608107803 29:0.0332423851965553 31:0.0348868320886654 41:0.126440468610733 142:0.00474708004366487 199:0.0427851817134672 205:0.0724260803898945 286:0.0512872976795075 291:0.0736724765486929 406:0.0858228056847119 441:0.0645433250045949 452:0.387603402093712 578:0.139609440231897 598:0.386935504626131 1191:0.457997591535886 1391:0.115664494603457 2205:0.534215211321496 3177:0.189875653552262 5286:0.212887857215063 5287:0.212887857215063
+-1 6:0.0100433974534919 11:0.135395065928861 12:0.13540942878629 13:0.0667503977524845 17:0.109455208463285 37:0.0475200918856379 41:0.0462461775086819 48:0.061441880457304 74:0.247002205998832 83:0.0260230776931242 84:0.0589442286874982 101:0.390454269569589 142:0.0546923839014565 179:0.0547485205533018 181:0.169546605268697 215:0.0639831329687809 264:0.165355645269341 283:0.075288595682438 284:0.121984128281912 309:0.147825193581516 357:0.0929719164604766 366:0.379886633426438 458:0.105740265088339 475:0.0813827593977408 759:0.148413474079092 986:0.0898100278111452 1299:0.148413474079092 1363:0.113712403963416 1375:0.126066465380782 1715:0.166289737484338 2226:0.166289737484338 3218:0.552654429881721
+-1 6:0.0121488291364996 17:0.132400677348287 50:0.23063273260199 51:0.0825110382485217 82:0.0911249783213659 83:0.0314783842781907 84:0.0713009085046412 92:0.0802002183487549 101:0.354229897944179 142:0.0724584716512735 181:0.102544619369155 190:0.104163475363972 258:0.115206170586291 264:0.200019713491913 284:0.1475560773856 286:0.136145906107533 293:0.114986866023304 345:0.0891544224119052 400:0.428198275170244 404:0.102022012442365 408:0.0715375318467092 433:0.0982442944018393 455:0.0887042917009718 513:0.0909119796839278 517:0.135466258852574 521:0.11979907640442 538:0.106452013192131 622:0.134081257187332 725:0.353250889627506 759:0.17952589713696 944:0.132938259268295 1223:0.149286526840091 1371:0.181879875363386 1975:0.172699244686559 2423:0.156801374997028 5825:0.252019447994447
+-1 6:0.0126611809277721 10:0.0355969651971967 17:0.0229974004357598 33:0.0233542851092489 34:0.0336344270953768 53:0.162513752849334 59:0.026206400512487 70:0.0485560269305441 83:0.0328059201575819 98:0.027376352781258 111:0.0527867341884019 132:0.0255967865473717 142:0.0032832286141178 149:0.469897862826662 160:0.0765058229781865 179:0.023006189803239 199:0.0394554214576184 214:0.108474130096417 224:0.0401368090835999 244:0.310527208100039 256:0.0287210593789797 278:0.0728701797187154 299:0.0349379695320968 309:0.0310592361845273 359:0.0939795725653324 371:0.294843560312535 372:0.166644261102862 377:0.0324828022598556 409:0.0215536988305369 423:0.0319758530134532 426:0.0379934050303838 448:0.0764403067189496 470:0.328485164643501 502:0.0291315324167959 506:0.0236108143897842 507:0.0451324532213965 541:0.043519746258976 576:0.0413140732893001 608:0.0921043305186607 609:0.0298868494100231 643:0.0343378357075828 645:0.0536990975832809 656:0.0416610652757155 663:0.0394985280893037 670:0.0602106143492788 731:0.048636165597077 936:0.0493835210973142 969:0.0472009773841377 1012:0.0563455239002288 1045:0.0219241009978083 1068:0.0497318177612059 1083:0.0452446538259016 1113:0.05124028755778 1245:0.0412714213401684 1319:0.0445461511919772 1320:0.118736123348815 1322:0.0474160917637013 1332:0.155582377952983 1336:0.0748273621427012 1373:0.0489623841015681 1453:0.0593680616744077 1457:0.0558853312482444 1575:0.136915660915614 1593:0.128126688033525 1607:0.054605257326762 1636:0.0616018844108594 1720:0.0548777402772985 1824:0.0597816767529697 2017:0.0634693681243787 2049:0.392094767256968 2063:0.0709310166379759 2446:0.0680207977957381 2555:0.0569890222819068 2740:0.0611193149575201 3378:0.0689120059669708 3707:0.159045288970112 5404:0.0934646388411251 7790:0.0875492826653947
+-1 6:0.0297675233651316 9:0.0227715737124443 10:0.0502149127769451 17:0.0486619765441031 29:0.0108109841575997 34:0.189785821745262 37:0.0422532948258594 41:0.0137068574246166 42:0.0178095594165472 51:0.0202171685135068 53:0.320950379641811 57:0.0222237407753876 58:0.0199682867965487 59:0.129388344771748 67:0.0168383514541962 72:0.0185250311051445 79:0.0201868991793864 80:0.0581457883036626 83:0.00771295347863966 85:0.036484769403846 91:0.023785576616155 100:0.0183946065218211 101:0.0289315857662963 104:0.258654162166066 109:0.0982760244792018 111:0.0186159215986981 142:0.00463149140864624 144:0.0176974157878825 145:0.0499593828208687 148:0.0523332430673318 149:0.265144852267035 160:0.215846109717273 161:0.0290499598089219 162:0.0322442072266488 174:0.0218203172482539 175:0.028814902839361 186:0.0506759941722171 214:0.0255031992716781 220:0.0716400046557817 224:0.0283095252097023 244:0.350436540491147 252:0.021482961556182 278:0.0256986072994207 280:0.0311839256770534 284:0.0180773757367559 291:0.0239595315471401 299:0.0246426497727953 323:0.152788034843666 340:0.0681611091974363 344:0.0454033438838436 355:0.0179156344915666 359:0.132572426133517 371:0.0415921514149297 377:0.022910957060433 382:0.026145705604245 384:0.0322579926070324 404:0.0249978216420194 409:0.0304047578438285 412:0.0303388746002315 414:0.0219943684671002 429:0.033970919852265 433:0.0240721907950073 448:0.0269576585621214 454:0.0297012382033087 459:0.0271917051196101 470:0.417040284747464 475:0.0241209531247701 506:0.0333066310177763 507:0.015916540843912 508:0.0230957859355281 509:0.0276306704141193 543:0.0658972582163858 554:0.0377880010496066 557:0.0280154039843883 562:0.0522505366884449 563:0.0456271295530791 570:0.03453443058125 576:0.0291398799755814 580:0.0269346185864051 608:0.0324817782762679 609:0.0210799646541244 645:0.0378753565986219 656:0.0293846223607205 658:0.0275310634970109 664:0.0673011563358287 676:0.0297660612894034 712:0.0273354214253123 714:0.0308057254321565 716:0.0285023627059654 718:0.195755332483048 722:0.114703298117875 740:0.04262367637816 800:0.0262508250214558 824:0.033292065056682 827:0.0254263265538614 828:0.0451855265495287 839:0.047393167679209 856:0.0223408885904491 912:0.0566190504194045 928:0.047976820627959 936:0.0348314693511478 947:0.0362124283392831 1003:0.0629189750643915 1021:0.0318700094099938 1054:0.038903504399937 1055:0.0324817782762679 1068:0.0350771319589141 1080:0.0300981259633717 1084:0.0486054127050734 1123:0.0338091786070757 1304:0.0383267236989422 1319:0.0314195477656885 1336:0.158332997314917 1354:0.0852473527563199 1372:0.0415921514149297 1377:0.0283916129958937 1407:0.0362843906195593 1446:0.031068615536308 1525:0.0417317730366462 1527:0.0387066836478157 1607:0.0385144944047356 1621:0.0486054127050734 1664:0.0353304132144436 1811:0.047976820627959 1834:0.0465891420458821 1859:0.0468484548088675 2049:0.0553109076266305 2186:0.0468484548088675 2197:0.0512885241956419 2243:0.0447665800541964 2254:0.047976820627959 2261:0.0451855265495287 2410:0.0415921514149297 2456:0.0420183872154985 2463:0.048938833120762 2616:0.158096527627864 2621:0.0504279746967591 2723:0.0388045011759421 2789:0.0471162711290763 3147:0.0454033438838436 3235:0.0504279746967591 3367:0.0539464656632855 3429:0.053341176500624 3980:0.0553109076266305 4248:0.0553109076266305 5098:0.0692347206161331 5789:0.0602616224058875 6315:0.0692347206161331 6461:0.0635733259735703 7097:0.0659230170484502
+-1 6:0.0187948011801885 9:0.107832417372028 10:0.11889374667822 17:0.025603747271899 22:0.050107863358238 35:0.305927998835374 42:0.0562235433957604 48:0.0574899048195309 52:0.038307792797626 58:0.0315192479776237 59:0.0583528610115896 61:0.220690772514867 75:0.0190454282472022 83:0.048698517967027 84:0.0275764516945388 85:0.0287949713954679 87:0.043773221872684 91:0.037544707530189 99:0.133586863860851 123:0.0476703409515912 127:0.0934607986956393 141:0.0858423264180624 142:0.0341163597364497 151:0.0371076359317738 162:0.0254481812529427 167:0.262607072449826 173:0.0702405343840696 190:0.0402864298218988 199:0.0219634963162249 200:0.0453922119114801 215:0.0299338512839521 218:0.0266528175448285 223:0.0638214339255588 234:0.101120354034161 262:0.0439749846351328 296:0.0423709071160839 302:0.238588194930596 351:0.0333451234484496 378:0.19503703688923 390:0.0429211632090312 391:0.0972515377928717 414:0.034717347606685 434:0.0406583511147149 450:0.140066944768318 457:0.0647997782427344 459:0.0429211632090312 466:0.0434178198989495 478:0.0368476525089753 511:0.2437783321967 520:0.0697301083312988 529:0.16052020228688 533:0.0588493276765638 537:0.0525503697387853 567:0.0509879998058957 594:0.0449899907403558 607:0.0921835783249139 609:0.066547985819968 612:0.0546969056531789 613:0.0434568286348918 745:0.0638214339255588 749:0.0546969056531789 813:0.0656517681124565 942:0.060793793290543 966:0.0469334331091745 1018:0.0509879998058957 1025:0.057273651831389 1167:0.0600652165485086 1237:0.0576205528691203 1279:0.0720208411238979 1331:0.106232540494983 1351:0.0623874710619283 1544:0.0615660227369526 1580:0.329902638043373 1598:0.0491617878819886 1616:0.0873063488677718 1617:0.0873063488677718 1969:0.128412619185575 2516:0.274235923654797 2685:0.0873063488677718 2786:0.0802601011434401 3056:0.0931335116591433 7300:0.327853813899333 8915:0.104057195439638
+-1 6:0.0162377772800262 58:0.108924276194857 59:0.100827963187745 61:0.381331792499162 75:0.0329086133038505 142:0.00421069213840188 151:0.128236637753546 167:0.453759006410218 186:0.0921435414382097 219:0.135769580352479 254:0.156709887960752 256:0.11050300160058 400:0.28615877899774 414:0.119976274882828 471:0.169267343814977 484:0.358937916762309 530:0.133484284461379 599:0.152250819395587 684:0.151968834264774 1940:0.290968829770454 7765:0.377665941375044
+-1 6:0.0245255274199051 10:0.0344768134579874 12:0.0551106282176985 13:0.0543338286985395 19:0.09925575542054 33:0.0226193813628707 34:0.0325760317574742 42:0.0244555580729854 47:0.0193468762781221 57:0.0305169808202271 63:0.0265059414803627 75:0.0331367643085585 83:0.010591198653452 98:0.0265148841416913 137:0.0334631023081194 142:0.00741979752948586 145:0.034301370384578 146:0.256935166441194 161:0.0398905420683741 179:0.0445644795746681 181:0.0345021022992532 186:0.0231955900648402 228:0.0309143542998801 231:0.0438209122964693 252:0.0294997647964714 264:0.0336492575584181 287:0.0379416160222464 314:0.032618757890478 317:0.0243629092054723 328:0.0414703421765681 334:0.0558556447374997 347:0.0335790867579898 348:0.0406089236868155 368:0.0498246476055475 393:0.255899304912627 398:0.0635874196611565 429:0.0466478582545906 479:0.207082704505132 480:0.0300648180286152 496:0.0685530592589257 499:0.030446219725254 508:0.0317144473356687 557:0.0384699207349165 628:0.0444176272891281 641:0.032343903885833 643:0.0332573057754536 701:0.0587473519546159 709:0.035647273264905 776:0.0509732929665736 870:0.1344027044596 883:0.0476646010564164 886:0.0352073895776333 887:0.0516532342537155 895:0.085012728097265 903:0.0455111295899393 926:0.3623636160914 956:0.324760517613219 1023:0.0576984014397947 1084:0.0667435092170742 1215:0.0479129269869815 1228:0.0503322272689598 1276:0.149950822435685 1362:0.21741816965484 1419:0.068177236711941 1487:0.0614721382285943 1503:0.0553570917114757 1531:0.0558556447374997 1573:0.105514596750034 1682:0.0573048313614158 1849:0.0505418706877376 2058:0.061195195852963 2163:0.0516532342537155 2500:0.0650788903494581 2649:0.135357367371834 2855:0.067678683685917 3428:0.254382945578164 3744:0.231060768614037 3849:0.095071062180326 4519:0.0782019372194857 4833:0.380284248721304 5767:0.0872970031922837 6306:0.0872970031922837 6315:0.095071062180326 6324:0.0827494702058847 7072:0.0827494702058847 7345:0.090523529193927 7638:0.0872970031922837
+-1 6:0.03246751140424 17:0.123843389243732 26:0.0140528340164079 34:0.103499932733657 37:0.0153619244122521 41:0.0149501033153238 57:0.121197445319714 58:0.065338379481999 59:0.0201605982654488 61:0.495608553459283 69:0.0329396905804198 72:0.0202052972728899 80:0.0634197552043927 81:0.0197680901330679 84:0.0190550301925978 87:0.0302468234002876 96:0.0603483672577015 118:0.0425203397166006 142:0.00168385971387195 146:0.0291546214117039 149:0.180746341599399 151:0.076922926584776 159:0.0195323128380397 175:0.0314284858391975 176:0.0504880040376162 186:0.0184241440862238 190:0.0278374877635283 214:0.0278164025619856 215:0.0206839678401917 218:0.0184168089738349 240:0.116913389183543 242:0.0227502046177606 314:0.103635681370101 322:0.0281380437609039 324:0.0688014200547057 369:0.0290330848268845 377:0.024989037566793 389:0.0276701871942257 390:0.0296580600691087 398:0.025253588691502 403:0.0376033829868929 405:0.0308772692077994 414:0.0239893121196338 463:0.0398965361865033 485:0.0449369792988003 486:0.145177118385781 490:0.134399523872517 496:0.0272256803514645 499:0.120916419356192 500:0.0335998809681292 506:0.0181638124398543 521:0.0320160719660809 528:0.0339702642961458 534:0.0494940525126446 544:0.0526646464601816 546:0.0280511309398867 558:0.072085156999739 560:0.0386763767578237 572:0.0703677447397937 576:0.0317829392059399 580:0.0293776551510938 591:0.0682799100341905 594:0.0310875975422157 628:0.0705614095485803 631:0.0217901607217043 681:0.0355274932288395 685:0.0343129409085994 689:0.0405756071750483 726:0.0299208665459253 803:0.0405756071750483 814:0.0360425784998695 836:0.0368177187855968 856:0.0243672624757527 862:0.0312409316803535 872:0.0370521663554949 886:0.0279650578693998 900:0.0473903634118003 912:0.0926318076233982 925:0.239889747693418 951:0.0423241654675753 969:0.0363117377498947 971:0.0404878380562948 996:0.0361492683198798 1003:0.0343129409085994 1009:0.11574814179632 1020:0.0415044157070948 1088:0.041702390376535 1102:0.077785576103004 1149:0.0311486148594782 1164:0.0344449210039142 1168:0.0422174756475649 1215:0.0380570042811261 1216:0.0347606981366901 1284:0.045516948130578 1288:0.0426521225075897 1309:0.0383269792899077 1454:0.0621154174188308 1624:0.0822423912239834 1635:0.0508148925301682 1678:0.0550019168029806 1739:0.0523284369939235 1766:0.0569897896778637 1781:0.0412154662641048 1853:0.191111000994228 1863:0.0391145877281153 1924:0.0895605790360971 1995:0.0420078543644997 2076:0.0404878380562948 2101:0.0595526035483472 2118:0.0483923727952604 2248:0.0426521225075897 2275:0.255488628012571 2314:0.0537568484487653 2577:0.0933254704079805 2604:0.0483923727952604 2675:0.0537568484487653 2694:0.14274585390321 2722:0.0447802895180485 2730:0.0520044560724723 2810:0.131455001392085 2848:0.0595526035483472 2869:0.0693395839732546 2957:0.0513898335257688 3112:0.279702601355677 3275:0.0526646464601816 3318:0.0523284369939235 3582:0.0581793532201677 3742:0.0581793532201677 3744:0.0611768139506761 3778:0.0541528466863791 4248:0.0603277438340745 4677:0.0657275006960427 4785:0.0500165831975893 5052:0.0603277438340745 5252:0.0603277438340745 5308:0.143804795687476 5397:0.0631646868255591 5735:0.122353627901352 6199:0.0631646868255591 6901:0.0719023978437381 7124:0.0693395839732546 7410:0.0693395839732546 9905:0.07551448112095
+-1 6:0.0259661255150759 13:0.0575253282649434 41:0.0398548417951076 57:0.19385705532499 61:0.406529745057413 75:0.017541587719357 83:0.0224266242174621 142:0.00224446484034442 144:0.0514580172944363 149:0.0963687902023373 204:0.0519598474148982 273:0.501385080155136 275:0.0582039107796194 279:0.195994138942727 284:0.0525628105509585 297:0.169108311649252 355:0.0520925224652892 399:0.0816124077143235 402:0.0659720401620339 426:0.0779186024899226 450:0.129007159426657 464:0.121341687644452 665:0.32106381295908 682:0.134025490967162 739:0.0884188985865045 882:0.0649977947683898 883:0.302786152354652 990:0.116538810360891 1000:0.105085911475717 1243:0.115237182034779 1256:0.1478454132192 1416:0.104474321310833 1676:0.117564096438188 1703:0.13266804881453 1706:0.130165865923707 1897:0.115555962287595 2398:0.125835952794582 5721:0.165590837872478
+-1 21:0.0671368474305779 48:0.0339468972599474 61:0.0651572393822736 98:0.107984176307523 142:0.00143894152558765 243:0.0523222642442057 299:0.0459368211186463 331:0.0433783954608548 451:0.0630243177645674 491:0.794688634865848 529:0.189569380303704 576:0.0543201914647534 927:0.0712735161186072 2551:0.298302833391608 2552:0.0994342777972026 2617:0.0994342777972026 2839:0.109987788697015 3513:0.0906062525506427 4653:0.107954706767155 4664:0.122888320439438 4665:0.122888320439438 4667:0.122888320439438 4668:0.122888320439438 4670:0.122888320439438 4675:0.122888320439438 4676:0.122888320439438 5731:0.118508217666968 7095:0.122888320439438 7764:0.129061728566781
+-1 2:0.0908702377639976 6:0.0111298453315163 31:0.0424210109608808 41:0.102497746450634 142:0.0202029169396751 156:0.463475342601433 166:0.0830445554231523 205:0.0880672553548234 283:0.0834329646967483 351:0.0789848347920304 406:0.104357144592316 452:0.157103479873658 592:0.109635464639949 598:0.235249151329964 720:0.110810158212194 930:0.0974459338177224 1016:0.204146002546921 1482:0.131858148499409 2634:0.209713787012656 5276:0.713087155370856
+-1 6:0.0278818814140887 15:0.0238814609352713 29:0.0253153894056289 42:0.041703504990861 57:0.0520399108515208 63:0.0150666590053521 75:0.014126841959594 85:0.0427170242490674 117:0.3598174503466 138:0.0584509836253022 142:0.0108452668905526 156:0.193512191107971 180:0.0537150719823283 202:0.0865522085516554 316:0.0949617461439475 348:0.207748412028758 360:0.0858303983433068 408:0.0820902556615114 415:0.060645573942342 429:0.159095055915509 502:0.0481141097869953 707:0.103443850926937 844:0.0763819483852475 871:0.0800644702497391 911:0.118083959589216 923:0.234301627047612 930:0.0610290594806656 1095:0.0983917670260482 1136:0.124905617729394 1226:0.110329155383628 1286:0.518072043963778 1394:0.0904106205283697 1536:0.114596932106156 1563:0.120099053252241 1726:0.0941239903035202 1750:0.135608661663417 1901:0.133355978603914 1922:0.306461967574944 2115:0.124905617729394 2211:0.107380915655193 2307:0.0977206209545113 2402:0.0961390839665446 2749:0.259036021981889 5632:0.154367708161175
+-1 6:0.0207321012248914 9:0.105731015524449 16:0.304204531524121 19:0.0839036132964705 27:0.0804892087222511 55:0.0694082220061913 58:0.0927150344523084 63:0.0298749327546737 67:0.0390911937288908 75:0.0280114160298479 84:0.0405585766314393 92:0.0456208310661904 140:0.048834298281855 142:0.0465931768760246 153:0.0599382765398718 210:0.108761361099649 281:0.159543242474856 389:0.117791826764907 423:0.0523589880919435 475:0.111996338132128 552:0.403337559445669 675:0.236088057936616 728:0.095314716672627 743:0.263181002073023 808:0.0721275638011215 1050:0.0815788645239289 1125:0.245052725363283 1359:0.153433048103959 1392:0.110025943110486 1484:0.130214671486046 1505:0.232292552379114 1551:0.0739880454079234 1602:0.095314716672627 1654:0.195096167137819 1896:0.125239798324017 2161:0.0917575275432565 2203:0.247669169987923 2291:0.23414284154704 3275:0.112096547611491 3689:0.139900795056678 4387:0.295178207722164
+-1 6:0.00575169523117348 9:0.0439993446285826 10:0.0485127484087675 27:0.0167475570715261 34:0.0916762701826922 35:0.1248291727139 42:0.0344117166581091 59:0.0357149691755689 63:0.0124322787926373 72:0.07158830901573 74:0.0471514218474237 75:0.0116567871907641 77:0.0433711381632928 78:0.0441873829813709 83:0.0298060118721996 84:0.0675128591927243 90:0.241093667094638 92:0.0379696848340494 100:0.0355421474985053 104:0.333181880311965 109:0.0632964696012554 111:0.0359697735581697 123:0.0583534287148935 138:0.0482309265694204 142:0.00745749171045002 160:0.0521323618654821 199:0.0268855915656268 218:0.03262580584923 223:0.0781240373094723 224:0.0546998012391449 239:0.0487635396690029 242:0.120907551347874 243:0.0542333159387819 247:0.084639396854092 254:0.0555092916793682 283:0.0431165906510917 284:0.0349291926445661 293:0.0544389423476887 302:0.0730141580025395 330:0.0572028429570206 331:0.0449627755971301 336:0.0525858874317244 348:0.0571413161593363 355:0.0346166754300069 378:0.159163672865092 402:0.0438399331356286 428:0.169988109114573 466:0.0531479030326689 478:0.0451053384782196 484:0.0635709391909392 520:0.170713732042499 528:0.0601791140445488 529:0.196493333055028 541:0.0593101824658178 607:0.0564211180273413 608:0.125522897501432 609:0.0407308094419621 717:0.0582872583721801 729:0.0619081812959675 745:0.0781240373094723 792:0.0631161064539102 828:0.261923077427477 856:0.0431671727572678 861:0.0767895861287428 876:0.0555092916793682 916:0.0696953592178546 922:0.0817620703139749 941:0.0820570621479249 962:0.0778936448437267 966:0.0574513772843073 1119:0.500009927064242 1176:0.0649189682814942 1193:0.0701088746727965 1319:0.0607090018315801 1331:0.0650198095422803 1483:0.0806343332695427 1591:0.0682655949264946 1607:0.223253675908684 1611:0.11643779765055 1629:0.084639396854092 2186:0.0905208104842342 2200:0.0829766389591203 2366:0.0873076924758258 2400:0.100001985412848 2611:0.0696953592178546 3543:0.106872002660662 3667:0.104235621313944 3739:0.0886055415443998
+-1 6:0.0104333340384939 9:0.23943890011597 13:0.0693419931033267 34:0.166296911045494 69:0.105850673515209 83:0.108133712138474 90:0.58311174062923 96:0.0646425351626102 114:0.0732607798497349 132:0.0632784159434049 142:0.0243496392209554 149:0.116164551983248 254:0.30207458447666 287:0.193687604173155 299:0.0863709733320816 398:0.0811516236057331 409:0.053283404039545 410:0.398252393092981 413:0.0902110066864846 837:0.113217443234318 838:0.274842734053229 849:0.130388454538805 890:0.10957038521032 925:0.154175652019243 1782:0.256940255436341
+-1 8:0.145267201197432 9:0.1103990981471 13:0.0959154109706729 14:0.219622563414175 19:0.175216008155552 35:0.234907386798509 83:0.018696624107868 85:0.132661636251616 89:0.229767298307525 90:0.2016433323489 137:0.177217064605088 142:0.102914077794259 181:0.0609064997010605 234:0.155290906414142 235:0.219064410890659 331:0.056408225145347 373:0.0515117736294279 409:0.110554211834247 417:0.25330020129902 421:0.209813789703029 435:0.271927442033433 457:0.0497566310702893 491:0.516697021175133 609:0.0510989955322302 831:0.12665817920511 877:0.271927442033433 1418:0.0916001961335339 1428:0.121274198312283 1931:0.0940642484346827
+-1 8:0.297159256927896 9:0.0752776348239261 10:0.0829995307850075 14:0.0998357619779223 16:0.324878147470752 22:0.104940653236262 52:0.0802278231558505 57:0.073466623942507 75:0.0398867472583455 133:0.141963140115131 142:0.132692347151396 162:0.0532960015729656 171:0.08508481138806 176:0.102014889737834 304:0.298047731678221 331:0.0769259503895462 395:0.656519914661488 539:0.0914236522444874 603:0.21070998082926 684:0.0920965953122549 842:0.142508622161272 959:0.10940139415486 1150:0.107377358912019 1159:0.100063615169265 1856:0.153182241150117 4099:0.19144365135825
+-1 6:0.0240752791214353 9:0.147336944746599 10:0.0406126511209723 14:0.244254089888072 20:0.0543229359237143 27:0.056081151019804 35:0.313503798945743 42:0.0864237394674363 48:0.058913547078281 51:0.0327023494052522 75:0.0390341134566075 83:0.0124761140234062 90:0.0672775253952342 98:0.0312337374355005 118:0.063059286205824 132:0.0292034266434677 142:0.00998891282009704 173:0.0359899624310533 179:0.0262478094670665 184:0.0567391336075663 218:0.0273128304199704 223:0.130803732028426 256:0.0327679159704068 266:0.0489623092364116 293:0.0911475785429565 295:0.0817664120360712 297:0.141114500201886 299:0.039860801605468 330:0.0478876002770726 398:0.0749040712108827 466:0.222464951427794 478:0.0377601235838917 555:0.277445508951909 612:0.0560513839142784 631:0.0323156397756719 664:0.108863213382298 682:0.0745594740936241 714:0.0498299055128121 842:0.557849221442747 858:0.0483070525151406 912:0.0457921683882672 987:0.0393102371193795 1010:0.107221488459767 1074:0.0629284953095949 1140:0.0978128919997019 1160:0.0609843021129458 1331:0.054431606691149 1424:0.0447753871448684 1448:0.0604394151670231 1486:0.0657962724897798 1726:0.0650188932353893 1849:0.0595368062000185 2056:0.0627683523092947 2076:0.0600450086914561 2124:0.134555050790468 2193:0.0803107378919478 2253:0.0714568589536782 2311:0.0714568589536782 2410:0.0672775253952342 2503:0.0954398087963531 2551:0.0862822007169418 2552:0.0862822007169418 2715:0.0822476095944984 2839:0.0954398087963531 3377:0.0998851574308103 3454:0.0862822007169418 3462:0.0862822007169418 3594:0.0853706920286423 3720:0.106633999510195 3755:0.106633999510195 3825:0.079161175271961 3836:0.0815699412719877 4604:0.0803107378919478 4916:0.0883187833513723 5325:0.0954398087963531 5447:0.106633999510195 6339:0.0954398087963531
+-1 6:0.0290174015669093 10:0.034963950256961 15:0.0142023197619463 27:0.0362107345954013 35:0.224916188452725 37:0.0196135904227816 57:0.0618963350943826 85:0.0508076821018974 98:0.0268895236309723 99:0.353563760429701 142:0.0107494783436657 199:0.0193768961141699 200:0.0400464553519825 219:0.0346606238536704 243:0.0390868590824042 281:0.0478505388192878 295:0.281574995397732 302:0.157867579483086 319:0.037604933171184 369:0.0370684700186534 378:0.0573559623326203 386:0.0330147084745253 423:0.0314072317118292 429:0.14192089395919 431:0.0924458007487486 433:0.0335222679872557 436:0.036615260023702 442:0.0352755879986067 452:0.0585136454186945 461:0.0907206261713987 482:0.0656128177447262 483:0.080496973406592 513:0.0310203840820655 529:0.0708080179757332 531:0.373153681955234 534:0.0315961740305275 540:0.0468608656718059 598:0.131428840122195 612:0.0482553525790545 673:0.0419138188563869 676:0.0829027895271925 681:0.0453603130856993 723:0.0425445256557849 771:0.0439781211380662 782:0.0472313891854238 908:0.0440918627462469 944:0.0453603130856993 990:0.0558142589562115 1184:0.0545998729535348 1193:0.0505286401416944 1239:0.0554982923596962 1275:0.0626286692760348 1293:0.0610010308311213 1331:0.0937217313436118 1342:0.0593565543875253 1430:0.0623407028562166 1471:0.0480107395807571 1735:0.13630173446432 1934:0.0708080179757332 1956:0.061785760307204 2063:0.0696696621093185 2078:0.115081821141486 2131:0.228104307102823 2154:0.113289703327845 2227:0.0548915316525715 2321:0.0708080179757332 2379:0.0623407028562166 2383:0.0659984162320986 2585:0.0859924082625601 2649:0.0686349430968884 2702:0.0839186708363889 2785:0.152069538068549 2874:0.079306883922784 2915:0.0663975472208089 3095:0.0656128177447262 3251:0.0591398989601236 3478:0.0839186708363889 3514:0.0885304577499938 5299:0.4299620413128 5566:0.0918025726385034 7176:0.0918025726385034 8137:0.0918025726385034
+-1 94:0.0551549694140096 99:0.522418663446056 137:0.0752145349009453 140:0.0649240440928364 142:0.0166773724414682 176:0.0952468495275707 199:0.0429463648539445 218:0.0521156381564008 381:0.0883177878825512 409:0.0469214612203588 436:0.0811529517903556 442:0.0781837433456504 457:0.0633531856403792 558:0.203985607060541 742:0.0942943963050512 935:0.714970322500499 1986:0.284534009346297 2680:0.17577337218042
+-1 6:0.0162498600324139 27:0.283894171049434 41:0.149649342272912 51:0.441455816886713 82:0.121885667050018 83:0.0842088291505138 125:0.174206331008168 142:0.0674212059531399 161:0.317162953096178 207:0.384338607438544 234:0.11657064693793 331:0.12703016776032 351:0.11531988736801 409:0.165977213898953 506:0.363636628785916 647:0.4403505163939
+-1 6:0.0136311265382113 18:0.0364835196927543 27:0.297679284722781 41:0.251065438940784 51:0.0925783374288901 53:0.0524890736952448 58:0.0914386597555781 65:0.0487598623368652 78:0.0523605462913741 82:0.204486555261274 83:0.0882977763728122 106:0.238535552685181 113:0.218908435401016 114:0.0957150376605723 118:0.0446292390497954 142:0.0547886193789869 161:0.399076207880839 162:0.0738262406716705 165:0.264698098326524 186:0.03867586835817 207:0.0806002048796794 211:0.0677834237866503 239:0.0577831363592303 283:0.0510916937910649 286:0.114567958748941 288:0.0707882909611987 295:0.057868919370433 296:0.0614598889236394 331:0.0532793601747075 342:0.0636690223641758 367:0.058172297160704 400:0.0600554259870343 414:0.0503582404262542 438:0.151994706265954 439:0.073457774188547 457:0.0469967183162234 608:0.0743701826381303 609:0.0482646241840147 622:0.0752203592044912 647:0.0615643621766451 686:0.0806002048796794 754:0.0830766325149591 767:0.0651952084984194 896:0.0863214020025565 985:0.0873324949220469 1018:0.0739591624961776 1206:0.104994553799753 1269:0.0696243184780577 1271:0.0869214747800943 1305:0.0619881913916198 1323:0.439390341520192 1405:0.0965421320256219 1545:0.0871258556521289 1718:0.0968852730961315 2532:0.0998837870640109 3109:0.125012518597505
+-1 6:0.0221749903413664 18:0.118702103533115 27:0.193704760792829 78:0.170359303029734 83:0.0574568017615417 91:0.177188046602793 113:0.474824285633172 142:0.0632532775134334 234:0.159075399097542 334:0.303014494577497 394:0.206582823182069 419:0.269760516792484 457:0.15290765173616 572:0.240302381128121 677:0.331981332040866 716:0.212325227718221 1045:0.115194640367979 1309:0.261769491657578 1383:0.322390535645727
+-1 12:0.144778656443875 69:0.217889747105556 151:0.169610144325794 318:0.259232795068929 859:0.336130785915027 916:0.260240135478677 2145:0.399056476118474 2509:0.399056476118474 3815:0.425691045991683 5844:0.393929071523823
+-1 6:0.021546046007138 12:0.0363116390138391 21:0.032585343486597 30:0.0323774693705297 32:0.0807581076970432 59:0.133789489545558 79:0.0730574480660345 83:0.0139567918082451 91:0.0430406253311523 98:0.104821766608459 111:0.0336859988577898 124:0.186843946364295 138:0.0451686729331278 179:0.0880887778358842 199:0.0251785851614016 242:0.0377436500493583 260:0.0679140609473821 271:0.0594485465141197 286:0.0301819821864907 318:0.130035295343973 333:0.163023608697765 336:0.0492471308193319 384:0.058371684493508 419:0.0655273397670624 457:0.0371426914784817 458:0.0567110040937443 493:0.0480873512602466 500:0.111487537828219 542:0.382854371150402 550:0.0438854041677844 581:0.0806413547824649 582:0.0454326014825526 609:0.0381447494552591 619:0.157881350849139 641:0.0426219116051921 651:0.0696929887487821 676:0.0538624693534306 715:0.0664639176939045 749:0.0627036186418258 763:0.0623857654019194 771:0.0571457297282761 846:0.156013832301092 859:0.0843042756396626 876:0.0519849237606116 1026:0.0745290666573763 1056:0.0528939020416953 1114:0.0659214859518773 1145:0.0707618596332118 1168:0.0700407602296916 1185:0.0847735088920387 1215:0.126276688552715 1216:0.0576696187127197 1438:0.0745290666573763 1564:0.0862778170124355 1627:0.0719141004999589 1679:0.155416656192171 1688:0.0725257576894275 1704:0.0817643965498063 1724:0.082979843240647 1729:0.0976175458776278 1787:0.0774156530667126 1995:0.0696929887487821 2145:0.10008653943108 2174:0.109044987795568 2187:0.225786269719947 2363:0.0920088387844687 2404:0.0843042756396626 2556:0.0912507441025365 2880:0.0810063018678742 2940:0.087952770330748 3083:0.101495186337199 3113:0.0988005455609058 3198:0.101495186337199 3659:0.101495186337199 3875:0.119289430030231 3877:0.111739628571861 4001:0.0936527098494565 4818:0.11503760234365 4823:0.11503760234365 4893:0.0988005455609058 5054:0.223479257143722 6219:0.10676670148176 9163:0.406579460438923
+-1 6:0.0104176268278834 12:0.140454951086494 37:0.0985814982198455 41:0.047969367112321 55:0.104630343225305 91:0.0832414769726467 132:0.0631831513422089 165:0.101148133380103 199:0.0486959146339272 318:0.377236504804177 330:0.103607344872944 353:0.35059160066896 448:0.0943426913985845 502:0.0719083240435067 534:0.0794040791819144 789:0.321131802068564 819:0.104630343225305 845:0.141083087964671 846:0.301734041477925 859:0.16304624678107 1185:0.163953753785719 1679:0.300579090290834 1870:0.18879439215344 1871:0.18879439215344 2145:0.193569477748596 2168:0.193569477748596 2247:0.17126937118368 6381:0.199305462888998 7461:0.230708273091806
+-1 6:0.0184929972674389 12:0.15583161774478 52:0.0376926523848978 58:0.0310131169323749 69:0.0938097164746718 74:0.0379006136597036 98:0.0299895495568909 132:0.0280401156718397 142:0.00359662764490295 179:0.0252022347436951 218:0.0262248308615051 224:0.0439680491658531 271:0.102049518308335 301:0.0419043250196168 318:0.16741417617901 325:0.0415150646585624 335:0.0612198390473649 373:0.0330041558856441 379:0.0564667201278792 398:0.0359601434223246 411:0.0346371102600197 443:0.0719681120600104 485:0.0319942690183804 495:0.0509512206661451 502:0.0319122690324102 542:0.0657208736783152 629:0.0564667201278792 650:0.0783206236903477 657:0.0480183229039226 676:0.0462302223916403 724:0.0540974016909794 727:0.0494979032772534 732:0.0505897901304873 786:0.0731771553980321 846:0.133906860380366 859:0.361792307164201 883:0.053910849010395 977:0.127131288620837 993:0.0508054103980508 1056:0.0453988999001113 1060:0.140356960295028 1215:0.0541917170225329 1225:0.123717855718681 1426:0.0548723206678923 1506:0.0648143914481702 1563:0.318628636372209 1679:0.0666971517030119 1751:0.125969068289909 1766:0.162302557110524 1819:0.0641746582346402 1922:0.0677548769009736 1925:0.339202509541472 2028:0.088449976215474 2109:0.0771115803523259 2140:0.0736072085705918 2145:0.429521987373738 2217:0.0819699725204538 2314:0.0765476940233952 2619:0.0796571590930524 2622:0.0837852573307883 2623:0.0837852573307883 2992:0.0708643419706308 3063:0.0819699725204538 3271:0.082845171495144 3815:0.183275977235131 4310:0.183275977235131 4509:0.0959062579351909 5041:0.0848006273853679 5730:0.155403406405657 7315:0.107529729922527
+-1 6:0.0185101132036872 12:0.0311951691059657 33:0.0256072358275341 69:0.0938965407521773 72:0.028798198850136 97:0.057750147042718 98:0.180103835802659 118:0.060603374540644 132:0.0280660678106571 142:0.00119998548452145 144:0.0275116244663925 179:0.201804482570521 218:0.0262491028887302 224:0.132026229545527 233:0.109449421688005 240:0.0416585683506434 253:0.101130960878113 261:0.127248953215696 318:0.2792818733997 331:0.0361748159805166 374:0.0597261507483236 379:0.0565189821148294 394:0.0431101816074317 411:0.0346691681553659 414:0.0341914781737028 427:0.0491569719396525 448:0.125721572190578 480:0.0340361600973927 493:0.0413116316189873 515:0.100299652237721 542:0.131563401436583 619:0.0678175864843245 641:0.0732325929786179 651:0.059872939601813 653:0.0472724691222599 657:0.0961255311888021 676:0.0925460202611504 700:0.057218081303943 739:0.0472724691222599 745:0.0628547200610445 757:0.0879329798337144 774:0.0519111367993687 786:0.0732448834957826 820:0.06867389479375 846:0.268061592022739 858:0.0928513648877693 859:0.289701727199141 882:0.034750560064912 896:0.0586092029330535 1003:0.0489055361112971 1122:0.0565189821148294 1123:0.0525582625454238 1129:0.0539607454464033 1133:0.0539607454464033 1215:0.0542418734120209 1416:0.05585637467994 1432:0.0550234797911458 1463:0.0680966547379723 1563:0.159461769336077 1599:0.0560734243141969 1622:0.0871940674455299 1679:0.0667588823235266 1738:0.0624866625686371 1751:0.31521414301979 1904:0.064657329871877 2016:0.0745826559102283 2109:0.154365899804673 2145:0.171967810188547 2165:0.0692786326283542 2254:0.223747967730685 2280:0.0628547200610445 2376:0.0642340541964315 2597:0.0871940674455299 2678:0.0885318398599756 2765:0.0702434328631198 2789:0.0732448834957826 2950:0.0838628036096465 3672:0.0900273421836593 3759:0.0760781582339119 3793:0.311094475731321 4006:0.0790443880550569 4385:0.0766185416762616 4503:0.093680068617786 5157:0.0820458386877196 5894:0.0900273421836593
+-1 2:0.078320693262962 6:0.0191855380534563 12:0.194000792122856 15:0.0328656930098167 29:0.0348390669601183 39:0.289037435971845 41:0.0883423963383256 55:0.289037435971845 63:0.041469505646713 142:0.0248754471931544 179:0.0522920570110769 209:0.060260093220332 286:0.0537507037324456 295:0.162898693894676 311:0.368756221270486 363:0.0896128759402264 381:0.0922124353509157 406:0.0899450041348035 430:0.0746603257014685 441:0.202930313968274 500:0.0992733608190034 531:0.215879422555382 808:0.100120540484441 853:0.203018981168856 1063:0.140584433155103 1079:0.500354717899738 1269:0.0979948361466846 1300:0.173845831434667 1339:0.115789092174394 1737:0.15770842498606 1755:0.148540710603362 1774:0.163857357138191 2004:0.168380595129373
+-1 6:0.0175983248569218 12:0.296585284947927 42:0.0526443547766175 55:0.088375154936523 59:0.0546381201145786 79:0.0596716772932647 85:0.0539237692386309 91:0.0703092257736519 94:0.105646058799866 96:0.0545175841763244 124:0.508699750073064 132:0.0533671267542495 158:0.0631563918031143 186:0.0499320796107828 196:0.0818237459050129 218:0.0499122004015212 220:0.211765026471873 257:0.106622615006448 289:0.0765558461081841 293:0.0832827674099835 308:0.130028970351043 327:0.0740001169377024 398:0.0684408564707707 473:0.0774716309230201 542:0.500330916896043 581:0.131732082804794 671:0.0537367921315336 688:0.0976805701589707 722:0.113019474147408 735:0.114415429294037 772:0.0815275053995948 800:0.155192805536158 859:0.137715665235539 1296:0.0895775593351417 1309:0.103871624765215 1496:0.130582184611355 1538:0.111958059345149 1690:0.114997223669728 5425:0.19486583672694 5426:0.19486583672694
+-1 6:0.00661903835752021 12:0.0892407382319349 58:0.0444010254461208 69:0.0671529987999553 118:0.0433423670904163 132:0.0401446230694035 199:0.0309398802761666 318:0.159789616605866 335:0.262942641716082 384:0.0717281339745769 408:0.0389757450677361 542:0.188183225239509 629:0.0808425764725273 641:0.0523745410535446 650:0.112130490237857 796:0.0581835006875061 819:0.0664788887729345 846:0.19171249146364 859:0.207189099652723 913:0.0690834623449911 977:0.0910060022886527 1215:0.0775854878351374 1225:0.0590416808892266 1441:0.0862848005786266 1563:0.114043988405569 1766:0.348549292092212 2145:0.49195227252095 2314:0.109592212791311 2556:0.112130490237857 2747:0.141360192439489 2949:0.19731168659968 3979:0.232366194728141 4307:0.124719037775566 4521:0.126632535943278 5299:0.137307585313275 5730:0.111244390837549 6427:0.131196766623363 8173:0.333074575029813
+-1 6:0.0149781013513141 11:0.0673066071297497 12:0.201941241265866 13:0.0331824706200268 18:0.10690314388497 25:0.112412473648422 29:0.018132514691011 34:0.0397893261933335 36:0.114440706635164 40:0.0311953518697134 63:0.0107917129530014 72:0.093212253510521 74:0.122787934148797 76:0.0415369722784812 78:0.0383564076411881 79:0.0677161746979105 83:0.0258728049590574 91:0.0398938996801154 94:0.149860605951262 98:0.0323860616893627 110:0.0481842751453529 111:0.0312231954976842 117:0.0515448931079143 132:0.0302808454725991 142:0.0194201991197847 145:0.0418967056905935 173:0.037317760831438 174:0.073195412609749 186:0.11332711193407 190:0.0428071729815057 199:0.0700132915905271 208:0.037405016287232 215:0.0318068281448527 218:0.02832049839437 228:0.151038817306161 229:0.0261461049716771 258:0.0946905900670432 265:0.04716563265188 275:0.0335738989705577 283:0.0374269172675092 312:0.0452529656226391 313:0.0566165478087564 345:0.0366390308015076 346:0.0415962756622013 355:0.0300486524521225 367:0.0426137712716698 381:0.0479933443857275 385:0.0522378668759679 387:0.0352433685443134 406:0.0468132258169932 415:0.0434382715918168 455:0.0364540444313823 457:0.0688543345405134 465:0.0424546630923143 466:0.0461344957870628 505:0.035913616973329 509:0.0463430091010085 513:0.0373613190883133 530:0.041042997182657 580:0.0451755695961731 582:0.0421109970360901 660:0.0642827582020701 661:0.0666564179506611 671:0.0304905959472247 739:0.0510028815670365 796:0.0438874613501113 845:0.33807392435342 852:0.0495477370682316 952:0.0465121354497204 1020:0.0638235288242381 1054:0.0652501525097314 1240:0.0839109686699889 1245:0.0488238447323572 1251:0.065588418097228 1383:0.145172498184384 1386:0.0714897392175518 1424:0.0464273112762552 1600:0.0744155036844337 1649:0.0567057928165466 2132:0.457885895316513 3974:0.573108918632383 4029:0.0904806691886622
+-1 6:0.00959708687039617 12:0.301914845052971 13:0.0212613765687215 17:0.0174318691940618 27:0.0465740254604209 29:0.0232364990176942 37:0.015136128055854 39:0.0963891786299124 41:0.0883821605248274 42:0.0956970715744827 50:0.0303650986317174 51:0.0217268016239959 57:0.0477664126751843 59:0.0397285377586004 63:0.0207440858346004 65:0.0228864739987397 75:0.0453836282824406 79:0.0216942720530381 82:0.0239950238053721 83:0.0248666587588994 91:0.0511233315690373 96:0.0198204467587353 106:0.0447846852937228 111:0.0200059882447216 124:0.0369886394081408 127:0.254524683490065 132:0.0194021857439281 135:0.029145916226214 140:0.0226058612092396 142:0.0282048631893959 158:0.0229611770242577 166:0.143215972687887 168:0.0237590911939979 169:0.0466369046343725 191:0.330311428991503 194:0.0253457453743988 196:0.0297478918740294 219:0.0267481695006529 222:0.367185914691236 228:0.0241941988588886 232:0.0283948261862767 239:0.0271217387513275 275:0.0430243616918881 277:0.0579412195565689 284:0.0194272287067565 290:0.0997990203435933 293:0.0908350039153004 299:0.0264827373202847 314:0.0255280995771996 317:0.0190669054375343 326:0.0373032807123196 331:0.0250077960204988 351:0.0227024514826069 353:0.107659133992832 355:0.0577602303170545 366:0.0403339058075887 374:0.0825778572478758 386:0.127389948608459 388:0.0332663401145311 394:0.0298022422180658 398:0.0248824002805 402:0.0243832835239398 423:0.0242374736508191 438:0.0356709671252679 439:0.0344789619658216 457:0.022058905013707 458:0.0336804524050337 461:0.0350052944269347 462:0.039310119259687 473:0.0563312684969981 495:0.0352553840652383 501:0.0332663401145311 502:0.0441629969379084 504:0.0339824127347132 507:0.0171050424407785 576:0.0313157795145018 633:0.0332663401145311 636:0.0327175643977306 665:0.0395550901130773 671:0.0586097445541706 690:0.0399792089626304 701:0.0459768656927312 706:0.0325668730998295 709:0.0557965539103367 713:0.031988718317825 723:0.0656646105603954 727:0.0684995400560877 735:0.0415969445264808 756:0.0424754323400721 762:0.0425916930134732 769:0.046509001494563 771:0.0339386343271681 796:0.028120505344372 818:0.0490341459937783 856:0.0240091016793076 882:0.0240232021683114 909:0.028165634248499 952:0.0298022422180658 971:0.0398927299131864 990:0.0430727751876856 996:0.035617930392805 1005:0.0674459175913824 1019:0.0459768656927312 1020:0.0817887309125077 1059:0.0293247953938814 1105:0.0803095317300561 1129:0.0373032807123196 1153:0.134093617853111 1277:0.0377636324042464 1377:0.0305116388051536 1449:0.0409913559736885 1476:0.0411886126461425 1509:0.0404248657150182 1642:0.0495358569730608 1649:0.0363337386328568 1659:0.0450005768392873 1691:0.0448479199042675 1782:0.0787820378678077 1899:0.0459768656927312 1910:0.039150522999049 2279:0.111239985505211 2320:0.525931372741079 2927:0.0509320556838123 3070:0.0500679927748926 3182:0.0579746939834258 4044:0.0647614088331975 4450:0.0612024175528679 5018:0.120555220186875 6903:0.0708455446127423
+-1 6:0.0314372117552572 12:0.181650037369987 20:0.0253336573287947 29:0.0163105463281646 31:0.0513522078208794 39:0.0451060538388262 41:0.0620386626542042 52:0.0732293806757537 55:0.0451060538388262 57:0.033528987575777 63:0.0291220611834017 72:0.0279487393253416 75:0.027305506531302 76:0.074726613735018 77:0.0338649886115594 83:0.0116365432791701 84:0.0263576459428779 96:0.0278253892599826 132:0.0272382039310668 140:0.0317357572894774 142:0.00931671641705479 173:0.0335680448783136 181:0.0379074380307991 200:0.0867719939736714 227:0.0638451902557924 234:0.032217034528518 256:0.0305628236197976 277:0.0813421114056926 304:0.0680120996185154 310:0.0460923855977894 332:0.115368680018506 347:0.0368933214378905 375:0.0318373174959658 381:0.0431709379744792 387:0.0317020890482209 508:0.0696892865617599 530:0.036918966751276 633:0.0467017153654141 684:0.168125629532805 688:0.0997109438679332 707:0.0666482231765474 790:0.0678513799190734 884:0.0927312489572901 1047:0.0506116949876884 1124:0.0998580794528292 1129:0.0523690671118315 1138:0.0442858542250682 1216:0.0480823260290635 1253:0.0549623606087652 2059:0.174743617261504 2197:0.0773790653839924 2244:0.0621389730269082 2781:0.0767128183390364 3093:0.0647896977662056 3575:0.174743617261504 3698:0.0681714646330807 3784:0.0760807531984787 4039:0.712138067049355 4046:0.0873718086307519 4447:0.0754795330518338 4570:0.0909167907133279 6873:0.372653842441561 7387:0.178034516762339 7706:0.0994581444192836
+-1 2:0.0718415891869084 6:0.00879920418055094 12:0.118634676898909 15:0.0301468681798668 39:0.353502297109116 41:0.0810342437115068 55:0.265126722831837 63:0.0570583915502231 142:0.0228176179709118 179:0.0479661800862117 205:0.0696255642738779 209:0.0552750579845439 286:0.0493041597970598 291:0.0708237657421607 295:0.149422848015054 311:0.22550049763293 381:0.0845841325250075 406:0.0825042752720771 430:0.068484026687519 441:0.186142839680065 500:0.0910609407046106 506:0.0492267769973394 531:0.198020729171266 853:0.27933625778773 972:0.150302205539099 1063:0.128954541539783 1179:0.109728383383241 1339:0.106210402969603 1755:0.136252633424335 2004:0.154451257239472 2331:0.505027533976995 3421:0.157675160779275 3853:0.342372391563135
+-1 2:0.100147651188122 6:0.0122661489115203 12:0.0826887627024581 31:0.046751991777455 39:0.369588407763832 41:0.112962272485366 55:0.246392271842554 63:0.0530265171748023 142:0.0222655374129416 199:0.114673207276669 291:0.0987287985643238 295:0.208296439874334 373:0.0875647976231826 406:0.11501150621794 441:0.086494783826612 487:0.187091203500169 531:0.27604220810688 853:0.25959772907528 867:0.107823439762309 1063:0.17976348507062 2004:0.215306075640157 2726:0.409176344418629 4885:0.486257667409878
+-1 2:0.10893802446029 12:0.179893394343328 55:0.268019139923614 63:0.0576808737549076 142:0.0138399289479732 291:0.21478926655468 441:0.188173577001644 487:0.407025943422701 853:0.282383694718071 1661:0.478185984362466 4430:0.569913816196236
+-1 2:0.106549054881118 12:0.351896800802091 55:0.262141581788285 142:0.0203046368290703 441:0.184047001792593 487:0.398100018782633 784:0.256297917360848 853:0.276191127341549 1339:0.315043644859019 1774:0.445829724202619 3477:0.404155572857843
+-1 6:0.00675007543847272 12:0.182014873676072 25:0.0506601377273764 29:0.0245149580409537 31:0.0257276732634713 39:0.135589942237852 55:0.0677949711189259 63:0.0437708273906431 72:0.126021929260919 75:0.0410405227043784 79:0.137327271729949 98:0.0437855949357127 110:0.195433811065547 118:0.044200415791501 140:0.0476992457944832 142:0.0140031429633457 162:0.0365584379600376 172:0.0529347305739826 173:0.0504531972842451 204:0.0810439484978518 214:0.173492954279035 227:0.191920261743137 239:0.0572279229310923 275:0.0453915377188399 317:0.0402319115643066 337:0.258027231210219 348:0.0670599152470126 416:0.0656719269086627 429:0.0770323647366979 432:0.063408928661886 518:0.0588664487236275 574:0.0505416030701263 605:0.0981358008620532 613:0.124858728236617 628:0.0733494525600885 640:0.125998570600019 674:0.268148116343566 714:0.0698549785460174 732:0.0738625318240985 846:0.0977539115184961 871:0.0775329621557044 1021:0.0722683459767707 1069:0.107468617116321 1535:0.10017312490973 1555:0.101055242908504 1569:0.110973563834645 1642:0.209045167138569 1662:0.186198645556803 1709:0.086086283528248 1763:0.355449521300272 1859:0.106233427704689 2402:0.0930993227784015 2408:0.228700674380751 2465:0.119678490230854 3109:0.123811326807236 3116:0.122328857661265 3574:0.125422862517169 4785:0.207971412132489 5433:0.149486852752419 5458:0.273298179559655
+-1 6:0.0354018626207116 12:0.318202150061917 17:0.0321514563098311 34:0.0940450479421741 39:0.118520564488702 40:0.0368662734813002 41:0.163012648904597 51:0.0400730584534349 55:0.118520564488702 57:0.0440503457519835 58:0.0395797425083761 59:0.0732755811656869 63:0.0255070205791332 65:0.0422119659495394 72:0.0367190219457388 83:0.045864231985551 91:0.0471461075991447 113:0.0631705052636312 118:0.0772720770255124 127:0.117361757794053 142:0.00306007285872346 146:0.0529826000071983 159:0.0354960094902101 165:0.114576073208264 186:0.066964275941756 203:0.0894609037652045 215:0.0375889084328392 220:0.0946665402149835 222:0.225746720223635 242:0.0413438739033272 284:0.0358317107610669 314:0.0470841978615204 322:0.0511351767020556 332:0.0757856203125657 347:0.0484704037545184 353:0.198567227896817 364:0.0546685658896782 396:0.0599293599678506 411:0.0442047765890531 423:0.0447037587575778 433:0.0477142141930557 495:0.0650252665299917 500:0.0610609559453656 504:0.0626773896809051 506:0.0330090381046842 534:0.0449726914642768 550:0.0480714666900711 597:0.0527617319613132 700:0.0729556731664358 721:0.0781303430797525 782:0.0672272121052684 806:0.190014816978582 811:0.0670141909179228 909:0.0519488844769315 1095:0.08328591048152 1160:0.0747294169305622 1177:0.0796733554801093 1206:0.090894976266809 1351:0.0783419719319728 1621:0.0963422520410043 1680:0.0976921483146111 1865:0.0700294758378519 1891:0.0841772939531356 1900:0.0984117946420583 2016:0.0950963007579282 2118:0.175886607821375 2163:0.0745598931128938 2333:0.181789952533618 2504:0.0868263523273502 3435:0.597231881298464 3436:0.119446376259693 3589:0.0933905796848826 4119:0.105729152054919
+-1 6:0.0196521025016007 11:0.0220775035387373 12:0.0662395366337452 29:0.0178431512593683 55:0.0493444011724867 68:0.0301609222010784 100:0.0303596547493499 110:0.0948306756555692 142:0.0114661718891032 191:0.253643923970881 242:0.0344259025209917 317:0.146413484023961 408:0.0578600164990105 429:0.112135630301104 480:0.108408106363436 528:0.051404241276954 531:0.165846972660761 555:0.169854341657783 654:0.20536321504811 657:0.0510280183366693 674:0.520455839447352 745:0.133465137436653 837:0.0533137535710291 908:0.104514607023724 922:0.419040784144301 929:0.157387624901666 1074:0.0642088734391133 1196:0.0616691490889932 1210:0.0786938124508328 1305:0.0446844319030439 1445:0.228229507739449 1547:0.0659620477474173 1549:0.0777637577003142 2045:0.0825718953941324 2217:0.174215383123608 2219:0.0706106516616263 2815:0.0742269701268263 2862:0.0832296086185043 4380:0.101917476341484 4535:0.0901157663885869 4537:0.0813455551554983 4661:0.104925551168267 5040:0.114269485029756 5454:0.0912887186483529 5643:0.0994597002500766 7218:0.217607268223133 8228:0.108803634111566
+-1
+-1 6:0.0301988622214887 12:0.135718041042838 15:0.0344880097446941 27:0.087931844129778 28:0.148668896280815 29:0.0365587934037394 31:0.0383672976321996 60:0.0764041694818562 63:0.0217582619423892 64:0.0873074916713155 72:0.0626448781256187 75:0.0204010409783876 96:0.0623683987566836 142:0.0208826794541014 159:0.0605583447115226 171:0.0870373666984341 185:0.117236851233939 245:0.116391029937677 312:0.0912390724230177 318:0.486018698957238 340:0.230495935706936 355:0.06058412171603 357:0.0931838091860547 367:0.171835852513882 405:0.0957324576941427 408:0.0592746303266826 425:0.144674009017631 453:0.0976380448286195 647:0.272783571616716 724:0.117787286836615 769:0.14634846460813 1201:0.128379198085811 2331:0.385167582676009 4646:0.429963462414761 5318:0.208818493305241
+-1 6:0.0171501968525278 12:0.115613186181624 27:0.12484315016332 31:0.0326836836897548 39:0.172249497194374 75:0.0347577865228512 86:0.133229550188298 111:0.0536266850440894 142:0.0266837749330926 165:0.0832584247542566 172:0.0672467336072273 173:0.0640942662901562 177:0.268497079441613 185:0.0499348716092159 205:0.0678522800905486 259:0.104316752675205 317:0.102218887680678 400:0.0755595933214197 408:0.0504938681633538 437:0.0771308383737457 462:0.316116058671736 506:0.0479730267986008 561:0.0759890695284925 724:0.100338638977051 977:0.117900121566657 1045:0.0445459215145989 1069:0.136524988188197 1098:0.096194572680445 1210:0.274701269138559 1273:0.115128862529788 8199:0.732539984360121
+-1 6:0.0277745852223352 12:0.0748937943987255 27:0.161745861855799 34:0.0442699113342191 39:0.0557912935981766 42:0.0332344158914172 52:0.0452883984474924 55:0.111582587196353 75:0.202643689981607 83:0.10075198850538 85:0.0340421110851083 110:0.0536101963130449 120:0.138841011766712 127:0.0552458074641578 138:0.0465808401354134 140:0.0392536877383327 142:0.0821068408649052 145:0.0466145980232558 165:0.107868999228362 173:0.0415200286421575 188:0.0613960370727916 191:0.645261167724383 195:0.154717876355779 214:0.380732127654605 218:0.03150960503246 239:0.0941904627309759 258:0.0526767405671126 289:0.048329756139566 332:0.142698537139733 333:0.0560401428831833 336:0.050786808176085 339:0.043206757829325 409:0.0283691568001611 446:0.0685418659400639 483:0.053934499614181 518:0.145330926598997 583:0.174847787592269 609:0.0393373185661529 829:0.0824174375514262 961:0.18977086250949 983:0.309647026813129 1309:0.0655742252215364 2023:0.0814087008395711
+-1 6:0.0244751267499673 12:0.0824960614182613 17:0.0333419307683026 27:0.0534492743795313 47:0.0289606768296447 51:0.0415568466869111 53:0.0942458224621594 56:0.0564892797414997 59:0.0759887617745769 75:0.0248015004728561 83:0.031708300299418 108:0.113283351081878 138:0.256545677754489 141:0.0558931642705749 142:0.0111068244456512 144:0.0363774380255183 145:0.0513463201108624 151:0.0483226230548875 159:0.0736206459557299 160:0.110919138892945 165:0.475273961316121 173:0.0457346147361133 186:0.0694437673641811 211:0.182560981010016 214:0.262112011741607 231:0.196788865730231 275:0.0822926831833967 283:0.0458683909177077 287:0.0567954673518696 293:0.115826722430667 309:0.0450300852687072 331:0.14349721093605 336:0.0559420400604387 339:0.0475925592525807 355:0.0368259915015976 367:0.0522251166238468 430:0.047622353088192 475:0.0495811641614678 507:0.0327168093392756 530:0.0503000614705389 538:0.0536147658015646 550:0.0997028252073934 592:0.0602735665552311 638:0.149465239441543 663:0.0572654806216974 684:0.0572654806216974 716:0.0585872505536672 728:0.0843923059122527 742:0.0627983400649332 856:0.0459222012905711 891:0.0860725892791987 927:0.0785917403350029 934:0.0992510544854103 1045:0.0317858472599165 1047:0.13791130104804 1094:0.126041423637343 1205:0.084660932794432 1350:0.0866722538087903 1391:0.0773206280395455 1426:0.0726224626538059 1471:0.0708668084668462 1512:0.418067981590894 2563:0.117061844956684 3611:0.180837142327063 4161:0.110888179092543 7119:0.135506251075209 7212:0.130676407979469
+-1 25:0.280400042952952 56:0.34492241270564 142:0.0387531702887241 323:0.319606591589619 359:0.415978462894568 433:0.302129582069412 480:0.274796888221225 944:0.408823545003883 1215:0.437931246717069
+-1 25:0.31643104413315 111:0.263671495658198 2003:0.659877551564736 2204:0.628418931626907
+-1 6:0.0430251065800291 11:0.0138100373403925 17:0.0502389970804166 18:0.131606967441766 21:0.0371825034226228 25:0.276778852741977 36:0.0234810592791559 37:0.130867875052533 46:0.180133234863423 50:0.116683765389511 51:0.0208723595311387 53:0.118339867408518 56:0.028372329722289 58:0.0206154121414187 59:0.0381661478801416 63:0.00664276355040962 65:0.0879457035542992 76:0.0511355864722347 78:0.0472200377666038 85:0.0753343104301674 86:0.0238740100009655 91:0.0982256454866377 92:0.0405756084854752 94:0.0184491299053404 96:0.0761639007849571 98:0.0398700282463652 100:0.0189907325796278 106:0.0215117270621898 111:0.0192192199591118 113:0.0329028416724999 118:0.0201238766847367 132:0.0372783259630758 139:0.0502832928655957 142:0.00239079359164614 145:0.0257892246259487 148:0.135073101854256 151:0.121352706268614 157:0.124575222877829 158:0.0441163821902919 166:0.0229306282955293 168:0.0684741779461736 176:0.0159298565358484 177:0.128301906011281 179:0.0335054652687094 183:0.027036269576259 185:0.107376685353402 186:0.0348788561976834 199:0.0143653975801374 203:0.0232981985831917 204:0.0184491299053404 214:0.0263296981492295 220:0.0246538963981519 224:0.0584539410588558 242:0.0430685469901457 246:0.0952979919988439 249:0.0701436753901779 271:0.033917791677421 275:0.0413323581340676 276:0.0238740100009655 283:0.046075755148706 284:0.0373264421775951 288:0.127677268835975 290:0.0319580867525744 295:0.104375250135026 309:0.0226168298217468 333:0.0310038463093397 342:0.0574183016324718 347:0.0504923623416145 353:0.103425262051808 357:0.0284488721014763 373:0.021938919504473 375:0.0217863465301926 377:0.0236534474473197 382:0.0269930266052104 384:0.0666067969900901 388:0.0319580867525744 400:0.0270797354502049 403:0.0355935934284986 413:0.0265723727639114 422:0.0840721233702404 424:0.0316528095814809 430:0.0478376467235013 433:0.0994092561754897 438:0.0342681478639602 448:0.0278312930542358 449:0.0351282416570621 458:0.0647118267967118 471:0.0320361647259101 473:0.0270579745068389 478:0.0241004970504241 481:0.177080317422514 485:0.0212676153582228 499:0.0228907589026993 501:0.0319580867525744 505:0.0221063761455452 506:0.017193010408692 510:0.0277837866701341 541:0.0950711108132656 564:0.0380794495372916 567:0.033349102459911 586:0.0225911995257999 591:0.0323152754359701 599:0.057631108516045 607:0.030146697363909 609:0.0217631168712192 615:0.0408050163289285 625:0.0341665519256531 631:0.020625541104648 641:0.0243175183160281 643:0.0250042525846911 645:0.0391028080795967 647:0.027760133468441 653:0.0313944675988755 655:0.0232704148319454 661:0.0820597852244341 699:0.0458059436544636 721:0.040694787819771 747:0.0338689082890745 756:0.0408050163289285 759:0.0454136700947403 778:0.0293686942163329 803:0.0768139220562437 805:0.0400620640536111 811:0.0349048547954633 836:0.0348499206541099 860:0.0422541197117189 862:0.0295711963188417 863:0.259832125947282 872:0.0350718376950889 882:0.0923138014372882 885:0.0430842019301976 896:0.0389233893774176 912:0.146134852647139 955:0.0456075260087431 968:0.0426589507732039 971:0.0383238829090713 973:0.0419946419811323 974:0.0394735210014561 984:0.0352421942138333 996:0.03421719688795 1020:0.0392861274923229 1021:0.0329028416724999 1027:0.0321149724105046 1041:0.0438443885132904 1068:0.0362138995417938 1099:0.0435320431432293 1103:0.0402677415886088 1113:0.037312342674061 1167:0.0392861274923229 1172:0.0466498834945896 1183:0.131533165539871 1261:0.0908273401894806 1277:0.108835546950361 1284:0.0430842019301976 1291:0.0466498834945896 1313:0.0401642757399104 1324:0.0366769690275437 1333:0.0873735394044336 1360:0.0908273401894806 1382:0.0402677415886088 1385:0.0489290690958587 1386:0.0440050097672922 1394:0.0398612840711684 1400:0.0468747597778781 1448:0.0385756138675242 1459:0.0937495195557562 1469:0.0347953420760328 1489:0.0360229700067461 1507:0.0421233828157812 1558:0.0370240287477101 1559:0.0893599175275438 1562:0.0495316368678779 1694:0.0483667033588658 1707:0.0351282416570621 1910:0.037610864498609 1911:0.041619808677625 1995:0.0397626588430821 1996:0.0524947506602506 1998:0.158851994944458 2050:0.0395688029290793 2057:0.048643198977922 2099:0.0893599175275438 2173:0.0432308553809815 2251:0.044335732974358 2311:0.0456075260087431 2373:0.0492249717680717 2403:0.046217359925869 2459:0.044335732974358 2466:0.048643198977922 2479:0.05206222709153 2554:0.0466498834945896 2586:0.0516508108201247 2640:0.0425218361932048 2760:0.0483667033588658 2802:0.059788721208702 2891:0.0579070942571911 2985:0.110139677867465 3158:0.0556947440986143 3185:0.0483667033588658 3222:0.110139677867465 3239:0.059788721208702 3367:0.0556947440986143 3458:0.0529506649814859 3472:0.0978581381917173 3571:0.0489290690958587 3595:0.0508837039568941 3731:0.114206808852125 3842:0.0471057978158249 3871:0.0680594274264161 4390:0.0609147060993938 5181:0.0571034044260624 5683:0.0579070942571911 5720:0.0656335883743631 5942:0.0609147060993938 6311:0.056369693095094 6337:0.0656335883743631 6379:0.0680594274264161 6539:0.062214560260755 6568:0.0656335883743631 6818:0.062214560260755 8650:0.231969968117056 8792:0.0680594274264161
+-1 4:0.0383586827252584 6:0.0354720576633464 15:0.0101275394200723 17:0.0161076032128838 18:0.0632936444235633 25:0.155296230903262 26:0.0127944037234905 27:0.0344287081914893 37:0.0279725303338265 46:0.0247518135419966 47:0.0139910041320088 51:0.0401525155734396 53:0.0227652430094953 54:0.0221332669395461 56:0.0272901683522989 57:0.0220688445315098 58:0.019829110739164 59:0.0183552181157256 63:0.0575045911458945 67:0.0167209905913374 68:0.0181468279947691 75:0.0239633830132419 85:0.144921903450779 86:0.160743947001747 87:0.0275382225026323 96:0.0366294501567913 98:0.0383493281554334 100:0.0730655951491202 122:0.540886618415891 123:0.0299899436171151 132:0.0179282385581648 135:0.0269317563493267 138:0.0247876226002974 140:0.0626656106565999 142:0.0168637721506061 144:0.0175740673714484 148:0.181889707886894 157:0.0299559362778585 158:0.0212168600332038 162:0.0160097348938387 169:0.021546993800971 173:0.0220945521236509 179:0.0322275187429133 181:0.0249507490972955 185:0.0172135307480239 197:0.164805557647647 199:0.0138174807020405 208:0.0664386391598307 214:0.0253254456786185 215:0.018831719982042 219:0.0494323237733157 239:0.100245407164642 275:0.0198779413413854 276:0.0459268420004991 277:0.0267697675991546 291:0.0237925370938106 296:0.0266560106357906 313:0.100562084011851 317:0.017618428859597 324:0.0313201288758399 337:0.135594881977696 339:0.0229921316090975 347:0.0242832555926036 348:0.0293669950089646 351:0.0209777893793597 369:0.0264331741326907 384:0.0320331590859629 390:0.0270021828861469 398:0.0229921316090975 412:0.180764502316817 414:0.0218410709148812 433:0.0239044111230906 434:0.0255786225387689 446:0.0364740073451534 448:0.0267697675991546 455:0.021583175594194 457:0.0407662638258579 458:0.0933654372915166 484:0.0653428230014779 485:0.0204564379893655 490:0.0305910140022673 499:0.0660530175295188 505:0.0212632072366351 506:0.0330744886393613 509:0.0274380886563392 510:0.0267240731767143 515:0.0213567038169847 516:0.0414409086426152 526:0.0354766970568963 540:0.0334160385278418 560:0.0704258199056011 575:0.0308520718005934 585:0.03662704468781 609:0.02093304036361 657:0.0307018686463225 662:0.0308142594312671 672:0.0413022601633137 673:0.0298883463989587 681:0.0323460087212743 684:0.0276651537086838 687:0.0332615435989597 730:0.0284151949498928 738:0.0716379461961103 741:0.0716379461961103 771:0.0627207615251501 789:0.0607474981731133 791:0.0393560830217614 812:0.0331099365955239 819:0.0296888919580179 829:0.131573346365334 844:0.0323917031437146 847:0.0630468323443995 856:0.0221851758433231 882:0.110991025724845 904:0.0360314936894175 912:0.0281122119326413 913:0.0308520718005934 966:0.0295263466676507 996:0.0658242077937179 1003:0.0624804389509346 1009:0.0263457259698797 1078:0.300196993386053 1123:0.0335735335449883 1129:0.0344694213548567 1164:0.031360380762575 1170:0.0393560830217614 1207:0.0336802553285566 1215:0.034649002237614 1216:0.0316478800754299 1239:0.0791506110326437 1263:0.0401507764950663 1307:0.0485977365652009 1318:0.0391426302151769 1322:0.03321069240712 1359:0.0328149681426897 1372:0.0413022601633137 1378:0.0362497330045683 1436:0.0396871795456019 1480:0.0429758010206409 1513:0.0493034630931281 1531:0.0403929060735291 1538:0.0752227417335777 1540:0.0384369036872497 1607:0.0382460539752669 1764:0.0518863580402399 1767:0.044870589995377 1778:0.0457727120396264 1793:0.0467878775657612 1855:0.0382460539752669 1931:0.038534039441419 1942:0.0383409174956266 1963:0.0423265955474409 1985:0.041581968520338 1995:0.0382460539752669 2161:0.0392486544508169 2298:0.0413022601633137 2414:0.0470628441871752 2492:0.056552986179282 2495:0.087735979039654 2631:0.0428085633734576 2651:0.0518863580402399 2666:0.039915666162849 2685:0.0549253986376882 2705:0.0433209909251436 2783:0.0496807747763698 2934:0.0513946475841864 3109:0.054219672109761 3223:0.154183942752559 3388:0.0513946475841864 3504:0.065463543198881 3553:0.0473474607068488 3586:0.146828779409111 4116:0.175773995387907 4189:0.0460148416180891 4445:0.0513946475841864 4625:0.0556984345853602 5131:0.056552986179282 5319:0.0575082935847999 6128:0.06313022912936 6979:0.059841607654321 7199:0.179524822962963 7457:0.06313022912936
+-1 6:0.0483562159028512 11:0.125803384719242 17:0.0970783830779919 18:0.0136236564331624 25:0.26741421063167 26:0.0110157386058886 31:0.00970042120149855 33:0.0140835559882482 37:0.120419086720306 46:0.149175889494411 47:0.0120459888309723 50:0.024157680431286 53:0.0196004418581625 56:0.11748158318925 57:0.0190008559950916 59:0.0158034941828257 65:0.0364157634899286 74:0.0625920087357193 78:0.039104894447344 83:0.00659442169640395 84:0.0149368612397963 85:0.0311937516038864 87:0.331938411701029 91:0.0203361945503028 92:0.016801181892356 100:0.0157270224279512 106:0.0178147637302813 111:0.0318324848267232 112:0.0283366963660841 118:0.0166654266038 132:0.0154358728932526 139:0.0416417045173285 142:0.015179359694026 148:0.0447438811192286 151:0.0401989070232376 157:0.0257914921916752 158:0.0182673135235204 159:0.0459329809932433 162:0.0413522330273914 175:0.0739085050842938 177:0.106252191426933 183:0.0447797383498616 185:0.0148205230429392 197:0.113515564028108 234:0.0182573730352512 242:0.0356668707546283 249:0.0580889205518938 262:0.0714575157231596 275:0.0342290599190426 277:0.092193045892794 283:0.0190786330008627 284:0.0463673892637823 288:0.0264337257936667 290:0.0793974974379846 291:0.0204849225536885 292:0.0752902965097037 294:0.145928687274147 295:0.0216093809561288 296:0.0229503188882919 299:0.0210689750390231 301:0.0230680159187058 307:0.0244408215863967 308:0.0188047472372061 310:0.0261205256864525 319:0.0692634792158047 323:0.0435435761719689 341:0.0425296974164479 351:0.0180614782311535 353:0.0571005325566154 366:0.0320886033950685 377:0.0195884122396322 382:0.0447081157125902 384:0.0275799415774216 396:0.0517003496425842 400:0.0224258650888077 408:0.0449592947288566 422:0.0232078842362589 423:0.0192827018288228 424:0.078639058937037 430:0.0990409058426722 442:0.0216577077360606 459:0.0232483666211093 466:0.0235173820892087 483:0.0247108556170102 485:0.0176126045862295 493:0.0227207138166118 506:0.0142382532726285 507:0.0816499535982976 509:0.0236236732102254 510:0.023008919443337 516:0.0356798352673069 526:0.0305447623683748 528:0.053257236429659 530:0.0209219550439203 550:0.0207353427188424 557:0.0239526127546092 573:0.0323079887199333 599:0.190906955775225 626:0.0240203017352847 639:0.0292812013146309 661:0.0339785755300976 662:0.0265304921249016 681:0.0278492991715712 687:0.0286375573127958 697:0.0272843125938221 702:0.0303176466817729 705:0.116364683053408 706:0.0518187095345145 712:0.0233712412017838 716:0.0243689527685499 756:0.0337923460449546 763:0.0294765480896654 778:0.0243214478790245 791:0.0338848400041811 796:0.0671158216788429 807:0.033093444054847 811:0.0289061747308008 812:0.0285070265622612 827:0.0217390030875964 829:0.0188803587149788 847:0.0271410626100564 851:0.0289061747308008 873:0.0294271967052523 876:0.0245622714620107 882:0.019112233026375 885:0.0356798352673069 887:0.0321609687248306 891:0.0358012851429209 912:0.0242040805477127 915:0.0315351898304052 917:0.0619218108293734 939:0.0370013484530648 953:0.0278101775463945 966:0.025421623696345 969:0.0284640529384596 981:0.0302068000396309 985:0.0326116535983551 990:0.0342675764334865 996:0.0283366963660841 1012:0.0679571510601953 1035:0.0310845049568807 1042:0.0289980601595202 1064:0.0235809624236872 1083:0.0272843125938221 1088:0.0980690366994161 1095:0.0359248846851149 1144:0.0695550499194059 1162:0.0295262507324389 1243:0.0338848400041811 1277:0.0300437609181164 1296:0.0259093547672573 1301:0.0334341551306566 1305:0.0231475973136513 1306:0.0364423948707924 1333:0.0361788469207632 1354:0.0728847897415848 1363:0.0288154826531041 1382:0.100042218871486 1403:0.0363093776712979 1409:0.0334341551306566 1431:0.0297286762631023 1442:0.0382745348588908 1455:0.0337923460449546 1459:0.116456865774995 1472:0.0258797021034664 1502:0.0728847897415848 1538:0.0323826759755123 1594:0.0446731688115668 1608:0.0275799415774216 1649:0.0289061747308008 1666:0.0367162806344489 1672:0.0410192266489974 1690:0.0332617218801556 1722:0.0363093776712979 1739:0.0410192266489974 1771:0.0363093776712979 1781:0.0323079887199333 1784:0.074296736896335 1806:0.0349924093550984 1831:0.0344671097744917 1893:0.0438506672792653 1952:0.0356798352673069 1954:0.036050711365529 1966:0.0461231543272608 1979:0.0376089655899708 2050:0.0327685858617366 2124:0.0711209231198695 2140:0.0405202149955411 2185:0.0318064158370957 2233:0.0386327257731888 2234:0.0392070101889072 2321:0.043473105501423 2380:0.0394094357195707 2412:0.0374520333265892 2424:0.0356798352673069 2492:0.0486910470074995 2531:0.0386327257731888 2570:0.0386327257731888 2599:0.0815305288266982 2705:0.149194201619038 2750:0.0418417281812989 2754:0.0356798352673069 2910:0.0418417281812989 3035:0.0398327890833326 3099:0.0472897250464392 3109:0.466821079095331 3240:0.0973820940149989 3329:0.0466821079095331 3432:0.0466821079095331 3472:0.0405202149955411 3491:0.0415566603626831 3576:0.0407652644133491 3660:0.0563628673660015 3801:0.0486910470074995 3924:0.0438506672792653 4060:0.118388615992539 4426:0.0893463376231336 4754:0.049513548539801 5325:0.0504460238698175 5328:0.0504460238698175 5466:0.0504460238698175 5496:0.0527956740435934 5557:0.0472897250464392 5806:0.0945794500928784 6224:0.0912112882831666 6626:0.0466821079095331 6862:0.0543539282680352 8993:0.0543539282680352 9093:0.0640346877245036
+-1 1:0.49317570152766 2:0.141422803738849 3:0.235474389993648 4:0.199798826994387 5:0.0648320999944801 21:0.0698570690752999 31:0.0440136650176209 44:0.200001761874167 47:0.0546561954578334 63:0.19968273224315 66:0.216751749901648 75:0.374454137371375 95:0.228467049743282 142:0.134751954039862 169:0.0841738515408118 170:0.114722875075638 189:0.172827296006044 229:0.181421349685105 256:0.0785856307572891 267:0.247266415320601 269:0.123308232545809 408:0.0679978493208346 586:0.0848869678208647 1056:0.113394936901883 1164:0.122510084652893 1380:0.118936182441954 2375:0.179758089820422 4924:0.195625052611932
+-1 1:0.408885886531622 2:0.14656487612687 3:0.244036137652875 4:0.155297569882017 5:0.134378734596188 7:0.148624538983429 21:0.0723970420959413 23:0.0860854486427076 29:0.0434638945822526 31:0.0456139829691771 44:0.207273740014183 47:0.056643471244113 63:0.0517357776507095 66:0.112316375205233 75:0.0727629616760401 142:0.127238012558776 162:0.0648164312960446 165:0.116197072668759 199:0.0559409505870642 227:0.0850664521908101 228:0.0905105461803031 256:0.0814429705308552 264:0.0985177516771207 268:0.115154545695273 269:0.127791666907359 346:0.0997068620213226 684:0.112004136642107 766:0.159335608501746 847:0.127624557938704 2024:0.116552069007036 2227:0.158471431220568 2422:0.190536921884225 2531:0.181661441175244 2744:0.164543696734257 2967:0.201135780597222 3611:0.176847446134018 5843:0.484545119190433
+-1 1:0.464385118812949 3:0.369546466015668 4:0.235168728216612 5:0.101745558988308 15:0.0620897381289303 63:0.313376108657928 75:0.146914281372881 142:0.112787033087785 162:0.0981521972752731 269:0.193516252740568 1317:0.470119626926987 6175:0.421504545510849
+-1 1:0.394222493890857 2:0.376823447237086 3:0.15685637151083 4:0.19963775488688 5:0.17274622455267 7:0.191059456411913 21:0.093067669735367 26:0.133176942116006 47:0.0728161775922529 66:0.288769347775887 75:0.0311793552617739 110:0.148475209959375 142:0.123672383607872 264:0.126646300880726 269:0.328556866588693 430:0.119737454349865 631:0.103251307520768 766:0.204828724486736 1015:0.192264965264796 2325:0.272766859548486 9016:0.340704994610235
+-1 1:0.336589047170998 2:0.193040194848451 3:0.0803548312656365 4:0.136361334501295 5:0.0884949306936325 11:0.0708312468221696 21:0.0953539448329655 24:0.126870184744921 26:0.0682242653526269 29:0.057246175896657 32:0.118160548918657 45:0.138446383802226 47:0.0746049600341561 48:0.0964290309259018 54:0.118022372080671 75:0.191671793009048 88:0.120360742283532 137:0.129039612102097 142:0.0980984406148964 150:0.137462159731815 176:0.081703732750397 187:0.146978021773065 221:0.150048617059564 276:0.244898091631847 304:0.238706450386608 328:0.159916938332019 346:0.131323633471792 415:0.13713900021957 496:0.132176331018738 524:0.356372165335286 930:0.138006183426944 1064:0.146045026595307 1154:0.214098076699279 1808:0.316974157470949 2512:0.244076216413851
+-1 1:0.333711224377586 2:0.106327616088531 3:0.132779667825846 4:0.112662875487326 5:0.0731152521677733 7:0.161732742591262 20:0.514237203205721 21:0.0787822270384112 23:0.093677906767043 30:0.156559291383714 31:0.04963698872727 47:0.0616392421928465 63:0.112597411797172 75:0.211147785445058 83:0.101230831715854 142:0.104689263537822 227:0.0925690381240625 256:0.177251954203918 267:0.13942897353569 408:0.0766854675443549 475:0.105527415810381 640:0.243091925355143 1081:0.144784067943567 1202:0.161365349979064 2037:0.214103836000831 3535:0.228592298277586 4155:0.23336376814297 9680:0.30289686784688
+-1 1:0.334058045738276 2:0.159657181316539 3:0.132917663858653 4:0.225559928844147 5:0.1463824796327 6:0.0130366096963742 7:0.161900829145613 21:0.0788641042939054 26:0.112852081527822 29:0.0473464248830995 47:0.0617033029863936 48:0.0797532725596418 63:0.14089304087054 66:0.244698680268196 75:0.132104517722057 142:0.108178648371949 169:0.0950268239793855 227:0.0926652438175325 229:0.0682709826034683 256:0.088718084827818 264:0.107318117123753 269:0.27841400850378 286:0.0730474113900704 325:0.11706392136365 363:0.121784240207104 387:0.0920251564576391 430:0.10146366740013 457:0.0898939455930606 485:0.0902172409764676 571:0.102889475339867 574:0.0976124131737682 636:0.133329870729281 640:0.121672283679332 766:0.173568694007721 1314:0.152017477055739 2375:0.202935235201322 2611:0.15796928718464 2744:0.179242008851114 2833:0.196959696991005 7639:0.288708144351285 8584:0.303211664282185
+-1 1:0.560177360422437 2:0.356969253471021 3:0.222887809599988 4:0.283678765941132 5:0.122733387354157 7:0.271489282410664 15:0.074897459469183 66:0.205165932328547 68:0.134203507669264 75:0.177219404786674 142:0.136052470084517 269:0.233434318343687 998:0.241970781145124 2686:0.333436712953939
+-1 1:0.455165123790609 2:0.290050912309362 3:0.181104708286481 4:0.307332855006233 7:0.220595228523848 15:0.121713992101304 142:0.0829108025822451 513:0.265844935646379 1395:0.37934828471381 3691:0.544530418244636
+-1 1:0.384332473778587 2:0.367369924087843 3:0.152921251894319 4:0.259505815063985 5:0.0842062348636809 11:0.0673985793179916 21:0.0907328432357415 26:0.259671755959633 47:0.0709894085162971 63:0.194516270307299 66:0.140762436824397 95:0.593482242621573 142:0.116680416966149 162:0.0812323118407336 169:0.109327988956546 170:0.149006146086251 189:0.112237116178397 213:0.154845982350919 269:0.160157113393856 408:0.0883180225632501
+-1 1:0.342970775395654 2:0.163916864066549 3:0.204695897100606 4:0.0868417158493712 5:0.112715993188425 7:0.124665279622034 15:0.0687843928482012 20:0.566256261521067 21:0.121452319494899 37:0.0949921513821372 44:0.173859841274623 47:0.095024337565109 75:0.0813774542258446 107:0.192045894079221 142:0.104123319809355 169:0.146343235491762 187:0.187205906272471 189:0.150237307761508 256:0.136627649295655 313:0.227666418774784 324:0.21272057893769 475:0.162683258677425 631:0.134741858530847 1590:0.309283050431708
+-1 1:0.297234916893718 2:0.213087319519106 3:0.177399278095911 4:0.225783583137237 20:0.0981489648146243 21:0.105256402823158 47:0.0823526466546973 63:0.112826194864894 66:0.326588415492784 86:0.135165316068353 97:0.10856949735864 142:0.094750173941949 229:0.0911182357345149 256:0.118408071174372 269:0.185793380227033 276:0.135165316068353 304:0.131747996070806 640:0.162390570691551 1514:0.254992295386983 1808:0.174945880119261 2807:0.236332051539118 3700:0.282230524798249 4300:0.315321878860351 8365:0.385325884472305
+-1 1:0.579760155291678 2:0.277086193295965 3:0.34601935093074 4:0.146797833163908 5:0.0952679446804043 7:0.210735045252101 15:0.058136805145151 44:0.293893870287 75:0.137561007770387 142:0.149609158954257 187:0.158227075130295 270:0.19242443929997 709:0.147982910730973 1590:0.261407096771609 4613:0.330124457648942
+-1 1:0.38289694453002 2:0.0609996253428297 3:0.152350072135129 4:0.129268264399921 5:0.0838917141783219 21:0.0903939448621796 47:0.0707242543094154 54:0.111883234752921 63:0.193789728018007 66:0.140236671740915 75:0.181701653971899 83:0.0387170836387332 137:0.244654788049448 142:0.0929956809604702 162:0.080928899125098 169:0.217839270835019 189:0.447271586759821 229:0.156504242136473 256:0.203377131839782 269:0.159558906798451 284:0.181487745338308 387:0.105479127585909 565:0.476808347090516
+-1 1:0.474378936687216 2:0.453442177930695 3:0.283124478751293 4:0.360344528864253 5:0.155902767326706 31:0.105840350336052 66:0.260613165665234 142:0.11521427078683 269:0.296521240090841 1754:0.393345798242454
+-1 1:0.617732166132236 3:0.210675576022423 4:0.268135738456201 5:0.116008709154731 15:0.0707937569336095 63:0.17865329065378 66:0.193924697142775 75:0.0837546931184553 142:0.171464035685455 269:0.2206442315922 304:0.156461093077339 328:0.20963638755874 346:0.172153196586071 8264:0.480592948859658
+-1 1:0.569375386116652 2:0.310997685814918 3:0.291275476702561 4:0.247145766378129 5:0.106927414807358 7:0.236526080978354 23:0.136999273040593 44:0.164931194238211 66:0.178744050199882 75:0.385991400059243 142:0.118531226245016 204:0.114334315521562 3535:0.33430485124509
+-1 1:0.412110029671557 2:0.262614343301625 3:0.163973606070783 4:0.208696161089105 5:0.0902922243520686 7:0.19972862906383 21:0.0972905420935302 47:0.0761201544131592 66:0.150936014971668 142:0.100090777394389 269:0.171732438073596 387:0.113526647365949 510:0.290792648985943 852:0.15960416686201 930:0.140809029153293 1064:0.149011137739623 1980:0.399394405253548 3621:0.490603952881673
+-1 1:0.372763245930077 2:0.356311305192916 3:0.222476993684862 4:0.28315590310695 5:0.122507171174219 21:0.132002386466976 26:0.188891311361656 31:0.0831685167498427 47:0.103278713681254 66:0.204787780511301 67:0.123430911995716 114:0.15322001349688 134:0.156278313521384 142:0.124484896087175 176:0.113105836630094 228:0.165028953536476 238:0.215172178482332 269:0.233004063619194 867:0.191810342510831 963:0.18513490565241 986:0.195124252496731 1045:0.113353753352638 1059:0.200024821022151 1754:0.309088041618704
+-1 1:0.379918982928287 2:0.302626019224312 3:0.151165177161896 4:0.192394330526732 5:0.0832392506183601 20:0.41817266151551 21:0.0896909105322527 26:0.128344904672589 30:0.356474954424512 31:0.0565100389058232 47:0.0701742000019747 63:0.0961412691095244 66:0.139145988126002 75:0.0600961595189565 142:0.12687456616966 162:0.0802994787092186 169:0.108072518467161 170:0.147295030561912 228:0.112131284161097 229:0.155287038316363 267:0.317470375263603 269:0.158317945478575 408:0.174607641017593 766:0.19739695701647 847:0.158110918297314 986:0.1325799657246
+-1 1:0.274950491162895 2:0.131407762754675 3:0.164099222104025 4:0.0928249057514916 5:0.12048185992259 7:0.133254424077371 20:0.54474298709448 21:0.0649100492784406 30:0.0644959637518237 32:0.0804351310951323 47:0.0507856454257463 63:0.0927709690767674 66:0.100701095490699 75:0.152222296377091 142:0.0667783029386501 144:0.127583459456303 154:0.0775649395836975 228:0.0811503321502607 256:0.0730204864383094 269:0.114575998634559 458:0.112968398564493 546:0.0927040271547796 631:0.0720126277824878 930:0.0939445995932776 997:0.102043914351955 1064:0.0994168609361531 2116:0.16211004679528 2744:0.147527290539349 3382:0.190241255047664 9295:0.539937898226085
+-1 1:0.462321483324639 2:0.294611254266964 3:0.183952137357958 4:0.234123684967748 5:0.101293421876673 7:0.224063549544714 20:0.203548876307826 30:0.650688845924548 31:0.0687667797178871 66:0.16932604718314 75:0.0731307117027171 142:0.0982501011206851 269:0.192656304842709
+-1 1:0.449944385765398 2:0.358405040166716 3:0.179027439647746 4:0.227855813379916 5:0.197163264664349 7:0.218065004133755 20:0.0990497710218357 21:0.106222440734927 26:0.0760005052313048 31:0.0669257812523119 40:0.109712457427229 47:0.0831084750572378 63:0.0759078052953484 66:0.329585827359887 75:0.177932209212091 142:0.127493048292525 256:0.119494814429375 269:0.187498582421304 313:0.19911750369373 641:0.138939872809812 1826:0.355467321015656 2164:0.226629795583358
+-1 1:0.650578316915219 2:0.155466245506508 3:0.291214416289995 4:0.2470939569274 5:0.106904999490639 11:0.0855666459772731 44:0.164896619522622 63:0.0823167936506794 66:0.17870657987944 75:0.154364193695572 142:0.158008504543979 269:0.203329315857788 304:0.14418290831448 328:0.193185305383364 346:0.158643583981257 384:0.206347024169927 1808:0.191457984527332 2171:0.263464233598093
+-1 1:0.558297271215671 2:0.266828384456409 3:0.222139744799882 4:0.1884844481009 5:0.122321464750393 7:0.270578099443133 15:0.074646085680967 23:0.156722686864317 25:0.163518152648789 63:0.0470937319156373 75:0.264936921114375 83:0.0564528979761522 142:0.135595845453405 1010:0.242582094773843 1057:0.296821147512215 3535:0.382433814107772
+-1 1:0.384084599590284 2:0.183566494925017 3:0.152822625746976 4:0.194503835618419 5:0.0841519262805115 7:0.186146138160811 21:0.0906743253341747 31:0.0571296424797795 47:0.0709436240894931 63:0.0323984695942429 66:0.140671652471911 67:0.0847864570493465 75:0.121510166129862 134:0.107349806485956 142:0.112718325438925 176:0.0776940152544663 234:0.107524938603979 246:0.30986190940331 269:0.160053820497232 363:0.140021926527702 506:0.083854742191623 538:0.131337600051493 553:0.191608567334462 766:0.19956131334012 986:0.134033637004757 1008:0.194900467516393 1059:0.13739990754493 1844:0.194900467516393 4002:0.237245416172571 4114:0.240082871985861 4565:0.271637618823092 5923:0.268589795303549
+-1 1:0.508468405081339 2:0.27772977397007 3:0.346823040802387 4:0.147138796556204 5:0.0954892209819359 7:0.211224513893131 15:0.0582718379441532 44:0.294576489701936 66:0.159623517874185 75:0.275761034071854 142:0.141135672600105 186:0.0965157587902313 270:0.192871378387355 1590:0.262014260028482 8818:0.376664145387056
+-1 1:0.626129564581692 2:0.29924763883216 3:0.249129395501036 4:0.317077544986551 5:0.137183341943243 63:0.0528155507453199 66:0.229321041783974 75:0.198084243659595 142:0.152070540283959 229:0.25592247309358 269:0.260917592229603 383:0.292702891825305
+-1 1:0.252652548938401 2:0.161001136700845 3:0.100527399358424 4:0.213242472707448 5:0.1107110188512 7:0.122447753259406 15:0.0337804334499159 20:0.333710270586374 21:0.0596459723805303 26:0.0853515322105043 30:0.1777964051188 32:0.0739120007002998 47:0.0466670298060856 63:0.0426237132830662 66:0.277603306133477 75:0.159859849769488 110:0.0951560117236386 134:0.0706151776604763 142:0.0613627143558547 176:0.102214933961109 186:0.0559505977794317 189:0.073782455094606 228:0.074569200361291 256:0.13419733818501 269:0.105284111258539 346:0.0821457972052501 408:0.116117034287658 472:0.179661883368168 508:0.0764991225364285 513:0.073782455094606 624:0.126339898853894 966:0.0984852042786318 997:0.187536708558916 998:0.218268494745411 1380:0.101551129282732 1433:0.0950612536969487 1446:0.102907163825636 1545:0.126040963337578 2306:0.13869676157802 2807:0.133923016943868 3592:0.167030289697006 3673:0.168417947141186 6780:0.421142079102775
+-1 1:0.456885233141983 2:0.43672056062825 3:0.363578238066608 4:0.308494293109131 5:0.200204707499504 7:0.221428877447325 20:0.100577713952335 21:0.107861029352619 31:0.0679581791395326 47:0.0843905073690573 66:0.334670022201654 75:0.144541594848073 142:0.138706883091524 256:0.121338142839478 267:0.190892707308288 269:0.190390937754727 408:0.104990348415616
+-1 1:0.573372141881587 2:0.31318074785794 3:0.293320097824375 4:0.248880617041921 5:0.107677996536006 7:0.23818638628968 31:0.0731011839768849 44:0.166088936068053 66:0.17999875198451 75:0.272090618662867 142:0.134283669122792 144:0.114024893989967 269:0.204799527364671 5904:0.380155046385014
+-1 1:0.349143254888566 2:0.22248918977737 3:0.138919886480307 4:0.176809229863855 5:0.0764963694927166 21:0.0824254060583776 47:0.0644896667416995 66:0.127874324216561 75:0.11045601659084 142:0.0847977901233203 229:0.142707852031743 270:0.154509169453584 930:0.119294652438964 1064:0.126243551234422 1590:0.209899499036557 2239:0.442024712694182 4979:0.270068926134457 5144:0.581980735544964
+-1 1:0.2934303775573 2:0.18698653359243 3:0.116752405121342 4:0.0990638242768004 5:0.257159297998463 7:0.142210678740116 15:0.0784651125263314 20:0.258380481031765 30:0.275323385160383 118:0.149966937779847 142:0.0772054674563494 187:0.42710655406032 339:0.1781360821319 363:0.213946025491013 6821:0.576228035323314
+-1 1:0.283511909094238 3:0.263213921248743 4:0.0638101939244681 5:0.124233428256148 11:0.033145433873644 15:0.0252709507388913 20:0.416077935646469 21:0.0446208137629864 29:0.0267883091549329 31:0.0281134833707493 40:0.0460868635334443 44:0.191625017059551 47:0.0349113404097809 63:0.159432791216549 66:0.276897945853916 67:0.0417233951913007 75:0.179385370882268 95:0.364830138614364 97:0.0920506342995622 142:0.118588171645054 170:0.219835792319881 176:0.0764664125680913 180:0.0568403642340235 189:0.165588708995227 192:0.0595678202792286 204:0.0442797075946464 205:0.0583644110039842 229:0.038627292193831 238:0.0727347282121919 269:0.0787624467029782 276:0.0572999478771305 304:0.0558512607180675 328:0.149666045497324 345:0.0541291542278172 346:0.0614528051470577 387:0.104134508457819 434:0.0638255832275307 441:0.0520121084539254 510:0.0666837924573045 667:0.0710441444070679 723:0.0757017607037384 757:0.0700802247616499 766:0.0982040744613113 1409:0.0968979124468906 1590:0.113628635918651 1665:0.07949847279302 2163:0.0932080000086014 2449:0.0925852281978628 2548:0.102720162300825 4088:0.125992511376751 4740:0.24252900054415
+-1 1:0.175304546723683 2:0.0837837320757271 3:0.0697515629740817 4:0.118367695643017 5:0.192043827170714 7:0.084961137232409 12:0.0461183932440065 20:0.463093904795275 21:0.0827714598249429 26:0.177665078732084 27:0.0199200997159878 29:0.0248461118030412 30:0.0411217148338245 31:0.0260752086651931 32:0.0512843026308261 42:0.0409304368571642 47:0.0647604193305883 63:0.147873646400257 66:0.19261678520643 75:0.180244599783283 103:0.0651244324526375 107:0.0654409856988822 108:0.126659286355614 142:0.0904759168314786 165:0.0664239936725078 176:0.0354612346911492 189:0.0511944166044171 205:0.0541328932982173 213:0.0706294851463672 227:0.145884573998848 229:0.0358267487113846 231:0.0733415724319643 256:0.232784150020426 259:0.0832244345252294 267:0.219733690870701 269:0.365260185953713 346:0.056997373685048 355:0.0411742216167225 363:0.0639090460474078 408:0.120852792589434 719:0.0736356436574156 829:0.0507513316113238 997:0.0650617573939213 1363:0.0774574327609472 2305:0.109579033094526 3592:0.115895008174242 4114:0.109579033094526 5923:0.122590211558918 7334:0.141917365103027 7425:0.292212057996617 7428:0.146106028998309
+-1 1:0.453493960011576 2:0.123851131901361 3:0.15466266205033 4:0.196845727841054 5:0.0851651440458552 11:0.136332178380736 21:0.0917660749987384 31:0.0578175027730221 47:0.071797809411713 63:0.0655771163374536 66:0.142365386931294 75:0.0307432974469002 98:0.196797722879074 137:0.124184256274999 142:0.125876405351244 176:0.0786294775783388 185:0.0883348892108312 238:0.149584464317177 255:0.14118917742942 269:0.161980922840657 304:0.114862337720962 328:0.153899765576046 346:0.126382337085157 505:0.109116664268935 766:0.201964099311739 808:0.158323959466764 986:0.135647447504045 3897:0.242973551282256 4497:0.335940076470684 6393:0.30067386398959 6830:0.29021366051018
+-1 1:0.592088199963311 2:0.282978165929246 3:0.353377121168292 4:0.149919348549927 5:0.0972937263197166 7:0.215216124243187 15:0.0593730286495671 42:0.103681403885672 44:0.300143242080746 66:0.16263999959932 75:0.0702430554536217 142:0.157284291388616 231:0.185782458649662 269:0.185049033292171 3765:0.370103017848777
+-1 1:0.369227561283116 2:0.0588219447197781 3:0.146911189549464 4:0.249306800158818 5:0.0808967882361712 7:0.178945692456045 21:0.0871668899243626 26:0.0623665548245571 29:0.0523310401233603 31:0.0549197718218507 47:0.0681994053890525 63:0.0311452422990878 66:0.135230236357499 75:0.146012435668777 83:0.0373348875621626 142:0.0672568082249447 199:0.0673535622577625 218:0.163467799480019 269:0.153862669524575 386:0.114758225959353 415:0.125364295702884 472:0.131279338621938 505:0.103647892354278 518:0.125659708857329 862:0.554589707994304 994:0.164968410288363 1303:0.220860109731775 2252:0.238573189725351 2864:0.212926404508904 4740:0.236890555225978
+-1 1:0.392170923250875 2:0.0937156057148145 3:0.234060114477696 4:0.29789823207575 5:0.128885427811889 11:0.103159757034328 21:0.138875005347987 29:0.0833742431708142 47:0.108655853115244 63:0.0496208559764306 66:0.215449923860463 142:0.0833420774412398 269:0.245135269499948 808:0.239600971469725 851:0.260736176975184 862:0.441788440143265 963:0.194773834782221 1808:0.230823108005981 2640:0.317634354073355
+-1 1:0.415821412807706 2:0.0662448493077687 3:0.248175480928727 4:0.140383758872646 5:0.0455526893212844 7:0.151145509819899 20:0.0915380145359888 21:0.0490833609393121 26:0.105355145410765 27:0.0236251830371192 31:0.0309251251865892 44:0.210789519153455 47:0.0384028388928642 63:0.140302187735271 66:0.152295315498883 75:0.295988670881787 95:0.48158035315803 98:0.0526310712550422 108:0.0751087812351817 142:0.119928208473264 162:0.175775595245223 170:0.0806072221447403 194:0.0642845306759293 199:0.0379265476801438 200:0.0783832348266054 269:0.0866395135803742 408:0.0477770256538229 436:0.071667329841041 508:0.0629520132397379 631:0.0544541537239316 640:0.151452544084865 667:0.0781493004829354 684:0.0759359679117163 977:0.111556458983412 986:0.0725544012471818 1047:0.0914375293575994 1094:0.0835675995116496 1269:0.0828855425434101 1388:0.104978673098932 2992:0.124365530219875 3611:0.239796178918149 7009:0.179685880949113
+-1 1:0.449914018956174 2:0.143352340544267 3:0.179015357060925 4:0.227840435359355 5:0.0985749790440866 11:0.157798613241115 21:0.106215271767617 26:0.0759953759466281 47:0.0831028660546882 63:0.0379513411335016 66:0.329563583566523 75:0.213504240651029 137:0.143737917631213 142:0.136590475466732 150:0.153119838715163 176:0.0910102271459663 269:0.187485928115878 304:0.132948199179963 328:0.178132337313729 346:0.146282101313705 415:0.152759869597183 867:0.15433954038948 1149:0.168446499382184 1808:0.176539609022283 9793:0.441762494677134
+-1 1:0.417244811963443 2:0.265886448764953 3:0.166016673960831 4:0.281728613627822 5:0.18283448331294 75:0.26400166251177 142:0.0928930585785723 187:0.303663164190375 229:0.170543494834795 339:0.253301504471925 363:0.304221634854053 499:0.242566007646971 829:0.241587913272308 1007:0.375915316196432
+-1 1:0.29263852631514 2:0.0932409658583831 3:0.174656005606232 4:0.148194735948107 5:0.192348995921045 11:0.0513186427715546 20:0.128841607721695 21:0.0690858237188319 26:0.0988596660107745 47:0.0540527728191936 63:0.197478168237704 66:0.321538107367038 75:0.0462900048407074 142:0.121418536607077 189:0.170919224979303 227:0.162351547806405 256:0.155436038333619 269:0.121946868506005 328:0.115862992670248 346:0.0951465763481677 940:0.31210748776843 1269:0.116663078310261 1808:0.114827031041156 3297:0.375504486926153 5627:0.487793999766762
+-1 1:0.395769657737732 2:0.252201551241878 3:0.157471969329103 4:0.267228336442869 5:0.173424183617548 15:0.105831274142142 75:0.125206886483264 142:0.0881119499769207 187:0.288033938621413 229:0.161765799465655 1590:0.475861135679297 3087:0.532221871325194
+-1 1:0.313041886373037 2:0.0498709589046377 3:0.124555587741207 4:0.211369570397536 5:0.274346618144827 7:0.15171537284514 21:0.0739026294688505 26:0.0528761826474182 29:0.0443677808318285 31:0.0465625830058399 47:0.0578214433351532 63:0.184840908324368 66:0.343956405666831 75:0.272345915621886 142:0.114044563981086 176:0.0633232395183203 189:0.182836064952431 208:0.0915249535391584 227:0.086835515850993 269:0.521797020168079 313:0.138532940821436 387:0.172471394949387 510:0.220888289116674 1269:0.249594136248492
+-1 1:0.514516018511894 2:0.245903902946784 3:0.307079569273583 4:0.390833188291465 5:0.169093661029922 63:0.130202030484616 66:0.282663579682227 75:0.122080383369731 142:0.124962521091187 269:0.321609827200956 2216:0.410316984074388
+-1 1:0.586477350672998 3:0.350028387365384 4:0.222747985074599 5:0.0963717345703341 7:0.213176655734866 15:0.0588103876179052 44:0.297298972431519 63:0.148412370350909 66:0.161098762117497 75:0.347887029906771 142:0.146891303367066 269:0.183295439423581 592:0.169089705469524 3555:0.290793073912921
+-1 1:0.489462622586172 2:0.187144057576471 3:0.350552284270556 4:0.198294558201848 5:0.0643439844922843 15:0.0392656071382632 20:0.064649537442415 21:0.0693311209977808 26:0.0496053393955906 27:0.0333709915620172 32:0.0859136276804711 44:0.198495965201754 47:0.0542446934966709 60:0.0869883801590319 63:0.19817933751836 66:0.215119843959004 75:0.23227181452308 142:0.11887770467317 169:0.0835401135958724 176:0.0594061566221617 256:0.0779939660630137 269:0.122379855092987 298:0.11361536551516 304:0.0867808134403638 631:0.0769174614047644 723:0.11762420916334 766:0.15258795155816 1164:0.12158771638934 1317:0.297304081723946 3897:0.183571419867769 4619:0.194152207820449 6004:0.253809505202363
+-1 1:0.558433517565288 2:0.177929000672349 3:0.222193955577713 4:0.188530445671258 5:0.122351315967498 31:0.0830627086877805 63:0.0942104492528203 75:0.265001576075525 142:0.129977730465677 162:0.118030217939155 196:0.202652622062192 229:0.228252577354553 269:0.2327076328376 1590:0.335721552517426 6149:0.423974317509473
+-1 1:0.552909925111277 2:0.151002055380804 3:0.282852237622666 4:0.239998690691038 5:0.103835238324416 7:0.229686110269987 15:0.0633649548955637 21:0.111883240195775 26:0.0800507192544523 32:0.13864329472146 44:0.160161637609111 47:0.0875374865499217 63:0.0799530791594876 66:0.173575047007485 75:0.262380385441601 142:0.124695442485239 269:0.197490744783012 499:0.137757925950518 997:0.175889618123414 9404:0.430161526194701
+-1 1:0.398662048387008 2:0.190533530790079 3:0.237934224979968 4:0.201885984518735 5:0.065509355248469 7:0.144908310859798 21:0.0705868166396012 26:0.303022620653183 44:0.202091039316173 47:0.0552271502092608 63:0.126105423129661 66:0.109508001331465 75:0.0472957244779379 142:0.142211151071971 162:0.126391504919887 169:0.170106312881687 189:0.0873163504780516 199:0.109084390947941 228:0.0882474082119632 256:0.158813118906918 269:0.124596346741691 314:0.0931127596910335 472:0.1063086065353 537:0.260997839074001 640:0.217804012486788 1394:0.30268872622909 3700:0.189268811869841 3707:0.21986026051046 8276:0.258406394520587
+-1 1:0.307780144658115 2:0.196130826117209 3:0.122462004229308 4:0.207816780390066 7:0.149165276066261 20:0.271016186159051 21:0.145320885023245 30:0.288787657289768 31:0.091559878450996 47:0.113699111644296 63:0.0519240066852703 66:0.225450026339437 73:0.26103670130109 75:0.0486851289387479 142:0.0560638271227105 189:0.1797628782901 213:0.248006723861434 256:0.163478565060456 263:0.343970759158117 491:0.286690196110352 829:0.178207039998182 2040:0.327265277582223
+-1 1:0.379007966722376 2:0.181140207324376 3:0.113102021108089 4:0.0959664919344311 5:0.062279737021552 7:0.13776431562111 20:0.375452924364179 21:0.0671068790225288 23:0.0797950526764706 29:0.0402879210412201 30:0.333393895479031 31:0.0422808991670098 47:0.0525044457915482 63:0.0959107298152241 75:0.134892120593658 83:0.0862286512158847 95:0.438945145300334 142:0.0805447559742119 169:0.0808600267228619 170:0.220412742782524 267:0.118765914737762 408:0.195962563641773 631:0.074449838729346 636:0.113452775318095 686:0.131185767826401 713:0.11092539859959 716:0.106216133651342 850:0.203375739258997 1045:0.0576263567393012 1620:0.134157629275297 1835:0.149360931219999 2340:0.153981512015335
+-1 1:0.3447582741746 2:0.219694890324123 3:0.137175155586975 4:0.116392424585066 5:0.151071263486667 7:0.167086681957688 15:0.0921905121163241 75:0.109068770823635 142:0.0627995945089928 187:0.250908784039822 506:0.150537752516913 608:0.293619243378433 2734:0.445525143725517 8695:0.59591153607288
+-1 1:0.420059042968997 2:0.401519697804236 3:0.250704633759447 4:0.212721611673125 5:0.138050748409714 21:0.148750706337991 26:0.106428818213773 31:0.0937208481054034 47:0.116382605049411 75:0.0996683624192979 142:0.095645048807911 176:0.127456582717807 187:0.229283482641461 229:0.128770331896605 238:0.242472991513216 506:0.137563219630518 631:0.16502728571272 723:0.252364074656379 986:0.2198814063852 1317:0.318934639431407 1433:0.237072648301931
+-1 1:0.460436836549341 2:0.220057706843457 3:0.274803388734523 4:0.233169283184984 7:0.167362618317817 44:0.233406112305371 66:0.252953688036806 75:0.327746679409888 142:0.104838842162415 204:0.161802794263651 339:0.209641929752371 506:0.150786359042609 829:0.199947317521237 3534:0.460390131381941
+-1 1:0.340608767488306 2:0.217050645110496 3:0.135524116966758 4:0.114991526679988 5:0.149252971469033 7:0.165075628544586 15:0.0910809081558233 20:0.749808676251315 51:0.180553608901361 142:0.0620437393001933 187:0.247888848754685 1124:0.295553276796007
+-1 1:0.317838094512766 2:0.227857710354409 3:0.189695911594753 4:0.0804780099935391 5:0.104456236700618 15:0.0637439161685696 20:0.629713634207422 21:0.112552370556595 26:0.0805294716267014 30:0.111834356810619 44:0.161119502381131 47:0.0880610143799875 63:0.0402156237920577 75:0.0754141659959349 95:0.368101730906573 142:0.110967213323137 170:0.184839297121281 186:0.105579172621372 187:0.173487576201024 229:0.0974342002745886 267:0.199195454173482 408:0.21911366265769
+-1 1:0.371831745627376 2:0.177710458371616 3:0.147947363063954 4:0.188298882085785 5:0.0814673581814198 20:0.572979579248955 21:0.0877816832764353 23:0.104378927214316 30:0.174443382052754 31:0.0553071242975753 37:0.0686571568254338 47:0.0686804199243293 63:0.0313649115786822 75:0.0588169080870928 83:0.0375982127845436 97:0.0905447362345272 142:0.090308232753806 228:0.109744374465569 229:0.15198148322422 256:0.0987499052068645 339:0.112866041562775 409:0.0741067969773627 491:0.173176401928688 801:0.175489945199328 829:0.215293403150541 1164:0.153944927714868 4512:0.238561358654299 7471:0.321353892416304
+-1 1:0.24329893981665 2:0.116280459171643 3:0.145208566799731 4:0.061604366650881 5:0.0799592373766785 7:0.0884359034060473 15:0.0487947401249961 21:0.0861566719126251 28:0.105170756625184 29:0.0517245511302179 31:0.0542832808016583 44:0.123333875925753 47:0.0674090104607305 68:0.0874318745521543 75:0.115456183199782 83:0.073804392043336 106:0.0996909105180573 140:0.100641497074885 142:0.0553977812480851 169:0.103813959085609 187:0.132801398226901 256:0.0969218505131422 284:0.086490196633828 386:0.226856478000633 408:0.167727288655192 430:0.2216920354707 506:0.0796768598464387 518:0.124203379494798 575:0.29729211872412 631:0.19116819088543 716:0.136367965730518 766:0.189618599714214 829:0.105653949707143 986:0.127355699048387 2466:0.225425173097489 3557:0.478726449509907 9683:0.331249661852307
+-1 1:0.286594740019666 2:0.27394585435332 3:0.228065174921349 4:0.145134109155515 5:0.188376462843688 7:0.138897795248159 20:0.252361351963276 21:0.0676590124241571 30:0.268909560926308 31:0.0426287725448366 47:0.0529364351595198 63:0.0725248888940247 66:0.209931643764578 75:0.0226669947902639 95:0.55319580257615 142:0.0783071856856884 165:0.108592546818802 189:0.0836946376543653 213:0.115467849017925 256:0.0761129294164396 270:0.253658145361208 339:0.0869931473552773 506:0.0625704026234335 847:0.119272159486284 1113:0.135790547928665 9924:0.247688198585532
+-1 1:0.320177660807887 2:0.204031059860217 3:0.12739482625021 4:0.108093864690051 7:0.155173717322505 20:0.70483208575612 31:0.0952479496000567 42:0.149511370625521 63:0.10803105586119 75:0.101292373600343 83:0.0647502961297775 95:0.49441504202183 142:0.0712825692451824
+-1 1:0.411684916615251 2:0.262343442867098 3:0.163804458717379 4:0.138987253386942 5:0.180398166397513 7:0.199522598533584 15:0.0550435567996042 20:0.181254830658763 30:0.57942101533019 66:0.150780316575581 142:0.0916552344775609 269:0.171555287079056 339:0.124963098110587 409:0.0820496122050391 2189:0.287890656384563 7199:0.325241383249706
+-1 1:0.549523165770601 3:0.218648634158823 4:0.0927611292039787 24:0.172609363824385 31:0.0817373621028288 56:0.395967742269577 75:0.0869244057640195 142:0.127903808919969 162:0.116146930616384 229:0.112305292356049 284:0.130233110751627 339:0.166802606815952 409:0.109521045900502 1235:0.251370512098101 1311:0.261923207731972 7598:0.457995237966496
+-1 1:0.471198444061157 2:0.300268037762849 3:0.187484172877879 4:0.318158741780994 7:0.228365757864107 66:0.345154498977485 75:0.149069765564878 142:0.10490499440923 409:0.187821550153939 3400:0.558255762775434
+-1 1:0.417313484916184 2:0.265930210141983 3:0.16604399809975 4:0.281774982414718 5:0.36572915087969 7:0.202250477375148 142:0.101354560954781 187:0.303713143112882 339:0.253343194534322 409:0.166342793837679 3089:0.528330049888428
+-1 1:0.58811388069853 2:0.187385806515441 3:0.234003413785578 4:0.297826066700726 5:0.12885420552108 7:0.285028683283787 15:0.0786326593235841 63:0.0992176708052813 66:0.215397731457555 75:0.279086230311709 142:0.13093439535777 270:0.260262760281181 318:0.277030648208655 409:0.117212251156659 1018:0.24905449700336
+-1 1:0.491588623991266 4:0.0331926431536798 26:0.0332138681768358 29:0.0278693648078441 30:0.230626844415896 32:0.0575245314141841 42:0.0918216327415154 74:0.0629076512388137 75:0.326592975631259 83:0.0198830292514151 142:0.0577071265655844 161:0.149774325031998 162:0.0415607663945888 172:0.0601778438660492 181:0.0647713570198949 185:0.0446857824310391 186:0.0435454579650182 190:0.131587784766058 227:0.0545452268325434 229:0.0401861159456879 303:0.205688107719125 339:0.0596868478494975 375:0.0543995153777338 408:0.0903720359794726 433:0.0620550966692971 437:0.0690229443116609 472:0.0699139893104108 491:0.183161443600236 521:0.151339949305587 582:0.0647238818674523 586:0.0564091966637024 608:0.167467922474471 709:0.0669212050732599 852:0.152308048088028 930:0.0671860541148977 944:0.0839692175527261 1045:0.0398633118068163 1055:0.167467922474471 1064:0.0710996334830044 1081:0.085312324593199 1241:0.382771963120531 1314:0.0894815297183449 1317:0.0995318114857219 2263:0.128969723013809 3546:0.11112967915146 4591:0.28516920199461
+-1 1:0.256852033038754 2:0.163677229685281 3:0.102198323388398 4:0.0867147596574976 5:0.112551210708962 7:0.124483028165981 21:0.121274765149888 31:0.0764095453624624 47:0.094885418983013 63:0.129996560000101 75:0.203146215954927 84:0.117656620549498 142:0.0883754343076261 185:0.116740232637521 187:0.186932225026952 256:0.136427909736279 264:0.165030460524955 309:0.147534483834593 430:0.156027669943981 640:0.187103851119271 1096:0.262675207678656 1314:0.233767745080924 2508:0.345408666391894 2744:0.275632782785473 4321:0.33192543154984 4340:0.383536001971809
+-1 1:0.353836805271375 2:0.33822018476356 3:0.211181090280015 4:0.179186085257429 5:0.116287071068294 15:0.0709636259528577 21:0.125300182423117 26:0.0896503328660603 27:0.0603104532305904 47:0.0980349068758963 75:0.0839556617941369 138:0.173686766894416 142:0.0913088392855816 187:0.193136980044344 229:0.108469710662537 239:0.175604786178971 409:0.105780555048312 538:0.181491565388731 1317:0.268654646997127 1391:0.261738377664002 2998:0.327842460541226 8900:0.4587027707744
+-1 1:0.0879598975418082 4:0.044543669469526 6:0.010297900629677 26:0.0891443058043641 30:0.123798106476767 32:0.0771964348195849 47:0.0487407767414757 83:0.0266825115109812 88:0.0786338611453464 142:0.0213631649089128 179:0.0561358670599766 205:0.0814843169297486 218:0.0584136142641126 286:0.0577017339070368 433:0.083276336329673 455:0.0751897957489657 457:0.0710091765027216 505:0.0740751147630287 513:0.077061132584341 574:0.0771061613792126 882:0.0773323880704955 944:0.112684520330786 952:0.0959355270138977 2091:0.136362063965609 2976:0.139055106736743 3416:0.325991969285887 3609:0.164945417056136 4112:0.491861676196206 5005:0.177429650136152 5538:0.612347833316596 7127:0.228056822345066
+-1 1:0.34154822224521 2:0.217649306332701 3:0.135897914674018 4:0.23061738428187 5:0.14966463560517 7:0.165530934159966 15:0.0913321242154129 75:0.108053229081941 142:0.0898659176900566 187:0.24857256679243 216:0.231932590197463 409:0.136142462614098 4955:0.477688338438928 6285:0.569320709545953
+-1 1:0.506483039705914 2:0.161376454452935 3:0.201523487551271 4:0.256487487401378 5:0.110969102809973 7:0.24546639460623 31:0.075335472995629 63:0.0854461510792993 66:0.185500293998848 75:0.200290633763607 142:0.128137000060903 269:0.211059088566574 1045:0.102677779505632 6120:0.41002210044062 9875:0.459715212248618
+-1 1:0.449953416742196 2:0.215047340296926 3:0.402819824169896 4:0.227860386746379 5:0.147875416493182 7:0.16355203573933 21:0.159336859138953 44:0.228091823641613 47:0.12466521473079 68:0.161695199808777 75:0.106761468327614 142:0.143432558151779 176:0.136527295007893 187:0.245600917642165 238:0.259729085292244 499:0.196185909561107 641:0.208413992274249 867:0.231529583244987 986:0.235529723111811
+-1 1:0.592151757108507 3:0.353415054099569 4:0.224903162249905 5:0.0973041702223155 7:0.215239226413536 15:0.0593794019909085 44:0.300175460671857 63:0.149848320278834 66:0.162657458035529 75:0.351252978138306 142:0.103369343519788 187:0.161608968304153 592:0.170725717008236 3555:0.293606614944164
+-1 1:0.112776682936241 2:0.215598546965531 15:0.0904715645728661 24:0.212544031353632 45:0.231937492633273 48:0.161546347660187 54:0.197721401623073 129:0.272299402686378 142:0.047933400900432 186:0.149848228780052 209:0.16588193997071 723:0.271016979240426 867:0.232123036993766 5134:0.490660815369557 7389:0.523409412505783
+-1 1:0.565869820398075 2:0.360596735285682 3:0.225152770708464 4:0.382081970640636 5:0.247961180746648 7:0.27424812627535 15:0.151317118228904 75:0.0895101443247047 142:0.125982101794689 187:0.411829734618663
+-1 1:0.385170909564587 2:0.245447570287986 3:0.153254855372494 4:0.130035968393186 5:0.0843899339407323 7:0.186672616980263 20:0.678325439385064 110:0.145066130304778 117:0.155183784701173 142:0.0701609758176997 187:0.140160181503605 270:0.17045277690815 356:0.143365142173691 709:0.131085729862636 2624:0.190812763745404 4184:0.275707104669857
+-1 1:0.458261348054808 2:0.175214376232256 3:0.218803990254619 4:0.185654077268205 5:0.12048462829237 7:0.133257485928516 15:0.0735251650648895 20:0.484227114592638 21:0.129823081495873 44:0.185842645381531 47:0.101573624704011 63:0.0927731007200492 68:0.131744589517483 75:0.173972336071065 142:0.105734742448525 187:0.200108550644357 227:0.152541991158937 256:0.14604432853046 375:0.152134492341129 1395:0.229157262605035 3710:0.339676428633823
+-1 1:0.287269376316698 2:0.366120954019012 3:0.114301017099475 4:0.193967667917997 5:0.125879930641524 21:0.135636559833287 24:0.180466948004709 32:0.168077895376161 47:0.106122092203514 48:0.137165819890916 54:0.167881345238818 88:0.171207568296379 142:0.0581418656971602 178:0.180950409358488 187:0.209069412695219 221:0.213437191941591 409:0.114506701479164 472:0.204277999172849 506:0.125435383331076 1165:0.335669806503286 3588:0.352869906552993 3621:0.34198510450024
+-1 1:0.140615740552726 2:0.268819303373104 3:0.167847917220944 5:0.184851235048142 32:0.246817792051807 45:0.289191537110633 48:0.201424254716445 54:0.246529163551208 142:0.0170759478931234 209:0.206830093118552 409:0.168149959106587 506:0.184198429482116 5986:0.70316969585044
+-1 1:0.220063580657063 2:0.105175526967126 3:0.262681926819004 4:0.33432642623564 5:0.289292112772548 11:0.231549094201095 21:0.155857199648106 47:0.121942727919134 63:0.0556886938527887 66:0.241796007230729 142:0.10689540791673 270:0.292159512734882 276:0.200144476601188 339:0.200394712390564 524:0.29124735121859 963:0.218591562807237 1045:0.133838478530569 1808:0.259049086174569 2640:0.356475960622713
+-1 1:0.316862301685881 2:0.302877554353376 3:0.189113527314772 4:0.320923739751755 5:0.208271092470155 118:0.24291385307794 142:0.0673378899853339 187:0.345909906068563 1133:0.432576987360759 2216:0.5053836200111
+-1 1:0.171592279032501 5:0.225572504039758 11:0.180547988282503 15:0.137654535924512 63:0.173690710039559 142:0.0416752890409533 187:0.374645193236428 1754:0.56912393656959 2531:0.60988557894239
+-1 1:0.224317618859815 2:0.107208669881446 3:0.133879909082666 4:0.113596424619907 7:0.0815364476668532 20:0.370355917650225 21:0.0794350337362374 31:0.0500482916304653 44:0.113711804059919 47:0.0621499983832345 63:0.0851478138625151 75:0.0532243504997085 83:0.0340232174810004 88:0.100267059119148 142:0.0885314606838143 189:0.0982616524748883 256:0.0893603512575075 267:0.140584312388332 283:0.0984341781148932 286:0.0735762314181697 313:0.148903616918925 448:0.118915054081121 455:0.0958754865360494 475:0.106401838969449 508:0.101879643116646 535:0.124519878859421 684:0.122892484488157 693:0.156133588558145 764:0.121444445819118 993:0.144297903820489 1164:0.278614400410704 1202:0.162702458426278 1731:0.163047236518018 2264:0.17835536825731 2422:0.209059740283516 2706:0.204404366204588 4897:0.280433312813239 8008:0.305406737287161 8247:0.280433312813239
+-1 1:0.429791427325868 2:0.273881694977929 3:0.171008820758616 4:0.217650177122361 5:0.0941661721061029 7:0.208297897121301 15:0.0574644537295588 20:0.189226685832998 30:0.604904807416353 66:0.157411857608155 142:0.100035747390268 269:0.179100541999976 356:0.159973423624492 513:0.125512553979611 1395:0.179100541999976 3691:0.25708747600286
+-1 1:0.256824338159538 2:0.0613723429911978 3:0.153280955895411 4:0.195087171831983 5:0.084404306218853 7:0.0933522044071176 21:0.0909462665914754 44:0.130190214068144 47:0.0711563910250205 63:0.097486907413359 75:0.213280527458723 137:0.12307483433072 142:0.0974623955428943 187:0.140184051899231 227:0.106861772455896 256:0.10230989962387 264:0.247518999357641 268:0.144658893634684 373:0.107322672672371 375:0.106576303218122 387:0.106123622239192 505:0.108141851313914 533:0.188292891599365 766:0.200159817428882 882:0.112897126642635 1070:0.232793941409528 2142:0.195484993268192 2744:0.206702297164424 2967:0.252669830060709 9752:0.378256807541975 9753:0.378256807541975
+-1 1:0.311013944114539 2:0.148643657295327 3:0.278434561492364 4:0.157500209916307 5:0.102213506576117 11:0.0818115801222197 20:0.102698892097763 21:0.110135812196803 28:0.134441900355828 44:0.157660182257714 47:0.0861702982678403 63:0.0787043465621581 75:0.0368974921720124 83:0.0471728217962477 137:0.149043466521707 142:0.108584689119579 187:0.169762707053307 189:0.136238714759743 227:0.129409469385775 238:0.179528289401312 256:0.247794314448626 356:0.173644571314015 408:0.107204588765576 409:0.0929785345845202 518:0.158771686215085 940:0.248779053413167 986:0.162801359908732 1598:0.190486310939664 2216:0.248027853288707 2910:0.299312430720012 7379:0.368563194731867
+-1 1:0.386048784162987 2:0.184505242476419 3:0.230406226617063 4:0.195498516044713 5:0.126873410936885 7:0.140323558384546 15:0.0774238889532331 21:0.136707042227408 26:0.0978117637485619 32:0.16940441403796 44:0.195697083115638 47:0.106959638005846 75:0.0915986711285387 142:0.105481328174798 154:0.163359504251013 179:0.123187860787005 187:0.210719448096548 631:0.151665781440671 886:0.194644840346288 986:0.20207861493728 997:0.21491466827458 1990:0.300872786085814 8762:0.482623433685813
+-1 1:0.549730313278198 2:0.350311942976996 3:0.21873105565154 4:0.27838828894047 5:0.120444466782832 7:0.266426133606576 15:0.0735006566968106 66:0.201339683145946 75:0.0434785863350878 106:0.150166746887266 142:0.144641417718521 270:0.24327657183348 339:0.166865484500488 829:0.159149012090111 1573:0.276890372378538 2825:0.289688102289224
+-1 4:0.0175054707235397 6:0.0404703070343274 18:0.0216636422458513 25:0.0607469159986787 26:0.0175166645901969 29:0.029396053063239 31:0.0154251140708307 47:0.0191549158489113 63:0.01749529902584 78:0.0310913023799879 83:0.0629166743084172 85:0.0248013548480128 105:0.128971512516472 106:0.028328126890205 114:0.0284174382144198 142:0.00629672401817343 144:0.0240604447291274 166:0.030196633963882 169:0.117998922496309 171:0.0349923344254854 173:0.0302493861523255 186:0.0459308851073071 194:0.0641288410432066 199:0.0189173470034234 215:0.051564563650012 220:0.0324659523378 227:0.0287666115351246 228:0.0306076209215884 229:0.0423875177956127 256:0.0275412719725581 283:0.0303378672163594 299:0.033502807412343 306:0.0317573692134596 341:0.0338142757113102 351:0.0287204396815603 384:0.0438562136696552 413:0.0349923344254854 423:0.0613247340759714 432:0.0380170389954178 433:0.0327272423880584 434:0.0350193851447913 465:0.034413305333272 472:0.0368719444056561 485:0.0280066637503385 496:0.0339364366219436 502:0.0279348838314637 507:0.0216392639379619 508:0.0313997754043853 518:0.0352935796878253 549:0.043214841393693 550:0.0329722823465131 572:0.0438562136696552 586:0.0594993014664675 599:0.0379463106366576 631:0.0271611360586002 638:0.0494289912608242 643:0.032927325545091 690:0.0505769370504946 714:0.0418817901429755 723:0.041535525100843 747:0.0446009159967443 776:0.0504675340494497 778:0.0773494470206633 787:0.0929703026973044 814:0.0449265790666074 904:0.0986605711812158 930:0.0708665168900904 950:0.0440989405969399 953:0.0442223231416919 981:0.0480333097550545 982:0.0453304168354203 987:0.0330400606736279 1007:0.0934313980744617 1009:0.180348086230986 1045:0.0210235151972281 1144:0.055301442943705 1146:0.0463340699053881 1175:0.0428800125661625 1207:0.0461112333683313 1305:0.0736162526578878 1312:0.0526235035509395 1423:0.0590714371010723 1439:0.0476889623247499 1462:0.0497304843900998 1467:0.0497304843900998 1489:0.0948750662708784 1551:0.0433287328001279 1595:0.0506874286564896 1598:0.0423434678742497 1610:0.111991377336023 1639:0.0546480595094234 1649:0.0459651218552328 1651:0.0554709777601958 1697:0.055301442943705 1782:0.0498328290296371 1820:0.0516133242893154 1828:0.0551344576197714 1919:0.0590714371010723 2042:0.0519814568351349 2151:0.0617279188740524 2154:0.055301442943705 2164:0.0522338384895817 2213:0.0561762506103177 2308:0.0603204280352717 2326:0.0608622093765547 2403:0.0608622093765547 2555:0.0546480595094234 2625:0.12811344333334 3082:0.0762560583452189 3316:0.0623449839937556 3337:0.067500779622254 3398:0.0703637952123307 3730:0.086430839065284 4097:0.0839529828295511 5029:0.74231502386735 5258:0.0941277635496161 6940:0.268876054066198 6996:0.0896253513553993 8197:0.0802166891981528
+-1 1:0.49630457907351 2:0.316266753359181 3:0.197473600933673 4:0.251333024983969 5:0.108739028837466 7:0.240533415931311 15:0.0663574694762678 21:0.117167110880669 47:0.0916715888354924 66:0.181772415093242 75:0.157012418406164 106:0.135572738676695 142:0.100449531207829 269:0.206817571169795 339:0.150648603590834 709:0.16890799997218 829:0.143682059270716 1001:0.227026527668572 9644:0.450476614263764
+-1 1:0.0634255436603232 2:0.121252502712777 21:0.0898406505205557 24:0.119534644834183 47:0.0702913566215821 48:0.0908535759335965 54:0.111198406130764 129:0.153141032384583 142:0.0231066153983792 208:0.111263447916795 209:0.0932919106338634 227:0.105562674676271 283:0.111328593686541 409:0.151690024614242 472:0.13530620619753 603:0.159000197820663 671:0.0906960929538234 2262:0.249598172089233 2887:0.507352879888324 5153:0.470128284790899 5218:0.499196344178467
+-1 1:0.313353539758667 2:0.099841217320707 3:0.124679590861264 4:0.317370003653806 5:0.137309873947759 11:0.109902674610654 21:0.147952408604781 29:0.0888239036377572 47:0.115758016621676 63:0.105728531067887 97:0.152609420466411 142:0.0824475186160486 187:0.228052991109949 189:0.183018090045998 256:0.166438894533838 386:0.19478446406234 851:0.277778894029327 862:0.23533271393639 963:0.207505000032296 2640:0.338396154318907 4332:0.467905051873271
+-1 4:0.0204125019164205 6:0.0330336820448839 15:0.0161680539945699 29:0.0685553675151024 30:0.0283657488909292 31:0.0359733451907049 48:0.0577394694991008 54:0.035334530937057 63:0.0612019231930308 68:0.0289704026496402 75:0.0478202619585419 83:0.0122274797707323 84:0.0276961615523377 142:0.0220271525030113 144:0.0280560221372861 169:0.0343985784448591 179:0.0771741646515428 199:0.0220588402368245 205:0.112022569893437 218:0.0535370357813468 227:0.100631143663 228:0.0356904496077819 264:0.0388478801652556 309:0.0347293580228629 319:0.042809808549936 322:0.0817963338700434 339:0.0367056606631792 351:0.0669797504219007 386:0.0375842537119413 398:0.0734113213263584 408:0.0555761512899373 411:0.0707103973766754 457:0.0325405376051672 478:0.0370076088112195 493:0.0842582053012222 502:0.0651477333857647 506:0.0264007917413845 508:0.0732283051098194 531:0.0531002063329298 539:0.0438431639584077 571:0.0744895291753956 574:0.035334530937057 595:0.0670833833834571 631:0.0633432543008163 640:0.0440439174902511 720:0.0469839353390214 811:0.0535982809474958 829:0.105024768605925 850:0.0432589290667638 876:0.0455437476175885 886:0.0406467348906246 950:0.0514221938766084 951:0.123034906007465 988:0.557881054164683 993:0.0518586962244062 1017:0.0556083895268842 1027:0.0493142665673838 1064:0.0437241890622901 1067:0.0501945900072306 1080:0.0477150844191256 1155:0.0549343458746517 1236:0.0520075293967053 1269:0.0482078926963561 1324:0.0563194576158614 1472:0.0479865481025085 1482:0.0559083645666842 1548:0.0519328989686138 1795:0.0603259607012129 2042:0.0606137135083544 2402:0.13017477488271 2703:0.0730735916236299 2707:0.0746942469831581 2753:0.0670833833834571 2907:0.0703374889093137 2951:0.539385063804301 3051:0.0709692407109004 3095:0.149388493966316 3955:0.156269325646087 4424:0.0935378058577055 4871:0.239833045353351 5632:0.104508909540024 7989:0.0955338017998077 8349:0.104508909540024
+-1 1:0.36792805431263 2:0.175844757604958 3:0.219591197119119 4:0.0931610091523686 5:0.120918104511649 7:0.133736915977058 15:0.073789691843333 20:0.607461566669771 44:0.186511264843137 106:0.150757264981116 142:0.111700159938797 187:0.200828495580138 339:0.167521668974609 399:0.203080013346997 829:0.159774852185909 7342:0.405821212215081
+-1 1:0.208548356664519 3:0.248936620952934 5:0.274154380904759 31:0.186119824674547 63:0.211098729796476 142:0.050650956395092 187:0.455333071058048 199:0.22825719741307 436:0.431322776688122 998:0.540499623875457
+-1 1:0.480469650991276 2:0.204117367995138 3:0.254897432265519 4:0.216279179964775 5:0.0701797584757311 7:0.155239358083965 15:0.042826860150333 21:0.0756192107913274 23:0.0899168460273854 44:0.216498853874004 47:0.0591644971666764 54:0.0935961133867559 63:0.108076754584469 75:0.177336638083595 83:0.09716652968404 95:0.494624186846068 142:0.126418008633502 169:0.0911169092410885 170:0.124185760836611 189:0.0935414547172659 355:0.0752327468958208 795:0.148093252987365 2375:0.194585387928666 2744:0.171867028368961 8272:0.266962129895346
+-1 6:0.030662505929388 15:0.0525262572245351 26:0.132715778855949 29:0.0556801218846468 63:0.0331384754297275 75:0.0621427756493793 88:0.117068095737466 142:0.0198780859033262 150:0.133701678557732 176:0.15893721202217 180:0.118144015369307 218:0.0869647056298369 238:0.302361639077601 275:0.103096499226895 312:0.138959801464239 314:0.244685345216505 355:0.184542812678155 404:0.128746998014965 406:0.143750944848033 457:0.105716658853794 505:0.110281149882911 513:0.114726657391859 655:0.116088140770935 867:0.134766701630929 895:0.318855929341632 997:0.145803359915632 1230:0.214213250752016 1731:0.190367900107038 2557:0.519441289817753 5991:0.310367162842218
+-1 1:0.242909317420696 2:0.232188491968234 3:0.144976027727625 4:0.369034275231373 5:0.159662379024631 11:0.127793595500517 21:0.172037398776223 47:0.134602121417876 63:0.0614699741385711 95:0.562647094477223 142:0.0811199641270269 170:0.282528672751329 187:0.265177456343384 227:0.202143771821989 375:0.201603767411277 1808:0.285942074164374
+-1 1:0.495969917201314 3:0.0370013330652293 4:0.0313954436567852 24:0.0584204569638807 29:0.0263603916242525 30:0.174511733002468 32:0.054409893678406 51:0.0492954639263733 75:0.397169688901666 83:0.0188064723167372 92:0.047914885746443 142:0.116693839409124 213:0.0749340944545568 227:0.0515919020922513 256:0.0493942988512682 299:0.0600861021717018 303:0.12970081687214 375:0.0514540801131928 386:0.0578064523705622 387:0.051235529810243 408:0.0854788861075667 437:0.0652857306099148 440:0.163845708047349 472:0.0661285304111958 579:0.170453437891903 640:0.0677417366891668 710:0.0836441743593904 930:0.0635482979381878 997:0.0690270340188982 998:0.080338547731907 1001:0.0850775407466114 1064:0.0672499784575389 1159:0.0738056987528799 1164:0.0770026234481537 1241:0.543070442412873 1377:0.0692271884322272 1690:0.0948583030544244 2263:0.121986720176647 2476:0.133131578553176 2723:0.0946169037776774 6806:0.160739903150062
+-1 6:0.0398745053746518 20:0.0374883192688241 26:0.0862939260326507 29:0.048272143280646 30:0.159786233446899 31:0.0253300439669775 60:0.201767764911502 63:0.0861886709242496 75:0.0404062284950435 83:0.0172195606806123 88:0.10149273564341 132:0.0806132704823914 142:0.0241267599593548 168:0.0493577906663673 189:0.0497314073342256 199:0.0310647447490467 218:0.0376972300744931 228:0.100523390635342 242:0.0465672255674668 243:0.062663457206075 267:0.0711514159195815 274:0.0718215338788735 275:0.0893799944031004 286:0.0372378180359764 317:0.0396101146949165 341:0.111054879276217 369:0.0594276065982043 382:0.116743233428429 408:0.156532159934156 411:0.0497895723897381 441:0.046862531283615 473:0.0585120646186196 485:0.0459905852823446 502:0.137618139952973 504:0.0705960005120816 507:0.0710689729028485 534:0.0506545050105847 535:0.0630210123766123 580:0.0601329050463237 586:0.048852796654518 631:0.0892042376345748 643:0.0540709520812783 655:0.100643159080864 658:0.0614644986257821 662:0.0692772528151142 713:0.0664542447993743 800:0.0586063011562229 827:0.0567655664191171 914:0.0851565723099284 936:0.0777630257654245 969:0.0743262274320805 994:0.07608657041259 997:0.0632024539675777 1080:0.0671955960624307 1149:0.0637578693750776 1159:0.0675778895077066 1271:0.0847557928924816 1284:0.0931683044769006 1294:0.075480709717554 1316:0.0922487115054876 1455:0.0882396334433175 1472:0.135155779015413 1707:0.0759637771577098 1721:0.0870777928068133 1731:0.082520172720173 1788:0.0818319880503553 1795:0.0849550815366881 1838:0.101864885895821 1849:0.0821728340385248 1992:0.173708101976348 2024:0.0647228950470159 2151:0.101365273014514 2280:0.0902678028065616 2394:0.102378574215451 2706:0.206903029627197 2733:0.0864146386549162 3117:0.577732527042427 4492:0.102907154107524 7285:0.309140065775429
+-1 1:0.381120557231785 2:0.242866510518907 3:0.151643269072602 4:0.257337091164074 5:0.167005024780317 7:0.184709618605046 15:0.101914013328257 142:0.0848505559166357 187:0.277372590452108 325:0.267112063373604 9682:0.691856998654306
+-1 1:0.166661713634933 2:0.318612166619507 3:0.198938052056894 5:0.219090860522158 45:0.342757908567898 48:0.238733667559036 54:0.292193268669128 142:0.0303583374800952 209:0.245140818623257 409:0.199296040558416 592:0.384407412006466 867:0.343032106569381 1140:0.396364360995221
+-1 1:0.465840296379225 2:0.296853594207751 3:0.185352230595459 4:0.235905642996451 5:0.204128769136871 7:0.225768938049538 20:0.102549061948213 21:0.109975132126403 31:0.0692901762091189 47:0.0860445821241458 63:0.0392947613471489 75:0.147374645750977 142:0.117854643504303 162:0.196919525698249 189:0.136039952469421 256:0.123716400361054 267:0.194634251445573 269:0.38824529417005 356:0.173391236623084 1308:0.212352141617932 3199:0.322320001175976
+-1 32:0.258047058084365 142:0.0178528382463509 238:0.339444996150931 2674:0.508678107474957 3118:0.508678107474957 4234:0.548054059851801
+-1 1:0.618524036271834 2:0.236490168023215 3:0.147661948557446 4:0.25058083058866 5:0.162620388816199 31:0.110400855733516 118:0.18966984216514 142:0.150223355827819 187:0.270090307555791 304:0.21932632451679 328:0.293867168277473 346:0.241323431393743 1133:0.337760929965003
+-1 1:0.557698103235646 2:0.266542022633826 3:0.332852014640118 4:0.282423248191059 5:0.183285282931145 7:0.202715785052953 15:0.111848962581153 44:0.28271010436925 75:0.132326294610798 142:0.135450323178788 187:0.304411880931328 1124:0.362944639732164
+-1 1:0.227986756087281 2:0.217924539275517 3:0.136069767199571 4:0.230909016276522 5:0.1498538971231 11:0.119942897194156 15:0.0914476201466658 21:0.161468686706471 26:0.115528335479981 47:0.12633315737074 142:0.0553720366150456 176:0.138353944866497 187:0.248886904385388 238:0.263204098086549 298:0.26460446038361 325:0.239680115719756 499:0.198810754387478 506:0.149324685305245 7925:0.620804479605448
+-1 1:0.429193252831593 2:0.273500512306595 3:0.170770814348134 4:0.289796341696044 5:0.188070227293179 7:0.208007992573776 15:0.114768951869671 75:0.135780876163779 142:0.112926500622805 186:0.1900920387285 187:0.312359021531513 356:0.319501552086307 3167:0.51871298319594
+-1 1:0.406868004828023 2:0.259273898243899 3:0.161887867663999 4:0.137361035587615 5:0.178287420972933 37:0.15025290736054 75:0.128717993151292 142:0.0823480219036749 187:0.296111113215537 304:0.240456470644447 346:0.264572803673207 496:0.266290701470555 4454:0.598362152583742
+-1 1:0.420264755383159 3:0.286659896558847 4:0.182422102506567 5:0.0789247742763526 7:0.174583548899214 15:0.0481634639922397 21:0.0850420302418869 23:0.101121276711248 26:0.060846250750423 44:0.243476517221183 47:0.0665369144248141 83:0.0364247782603458 142:0.109362158116108 238:0.138623849155069 298:0.139361389388072 491:0.671086370655376 499:0.104709281606826 1409:0.184676040299375 2134:0.191516199676428
+-1 1:0.487116867306163 2:0.399101073248516 3:0.166129646854096 4:0.211440245612286 5:0.09147945028912 24:0.131148921950391 31:0.0621042027230992 45:0.143115531991206 48:0.0996811305672763 54:0.122002713998787 66:0.152920628299066 75:0.132090656665975 142:0.0887309864239124 209:0.102356379803494 229:0.170659548190034 269:0.173990497459962 356:0.155409108459327 409:0.166428596716733 499:0.121365535845835 1432:0.387487833043137 5555:0.347985650296646
+-1 2:0.0665990295424186 6:0.0163141841878151 26:0.0706122867410565 29:0.0592499364610316 31:0.0621809347421405 32:0.244592932400218 33:0.0902773866878335 63:0.0352630794827376 94:0.0979371204924571 129:0.168228183530312 142:0.0211525278119724 150:0.142273682081563 165:0.158399730138151 176:0.0845635695007677 193:0.158239575589586 221:0.155300697166114 373:0.116462652385679 506:0.0912690159733073 531:0.367140775735837 641:0.258178866278674 713:0.163133828926441 997:0.310302474865387 1433:0.157290498018433 1471:0.188948425549182 1931:0.212669281127415 4515:0.567293899833269
+-1 1:0.282192889952522 2:0.269738280350753 3:0.168421716683025 4:0.28580994675945 5:0.185483161502708 21:0.199859483596904 26:0.142996353911099 31:0.125922093183539 47:0.156370130384362 114:0.231984235996054 142:0.0771044542938116 176:0.171248980459469 187:0.30806225776098 238:0.325783507608466 298:0.327516820062094 1076:0.452834358204862
+-1 1:0.335667539394535 2:0.0802132052840559 3:0.200337092933511 4:0.254977512667051 5:0.22063162693861 11:0.0882966577970887 21:0.118866108027956 47:0.0930008848021516 63:0.127414677943403 66:0.184408229976597 75:0.119466898268529 142:0.0764295846643425 270:0.222818479226804 276:0.305284517245137 304:0.148783077450693 339:0.152833103539837 384:0.425861090439817 496:0.164768076130822 930:0.172035440552448 1045:0.102073302248667 1064:0.182056483752541 1808:0.39513293875794
+-1 1:0.382372730729609 2:0.243664449654465 3:0.152141493791928 4:0.387273860197123 5:0.167553720624887 7:0.185316482981217 15:0.102248852329001 20:0.336698779866624 21:0.180540377937978 30:0.358777286434625 47:0.141254855309958 63:0.0645081385893935 75:0.0604842970585734 142:0.116085453876371 187:0.278283899485946 227:0.212134763848767 256:0.203098693735949 375:0.211568069623606 1045:0.155034541561818
+-1 4:0.0203215315088844 6:0.0140941988803489 11:0.105557738883571 26:0.142341682731847 27:0.0820778537940449 29:0.0170624608728218 30:0.0564786680457251 37:0.0222287869202989 41:0.021632879586866 59:0.0291724936929767 67:0.0797255019511105 72:0.0292371733962022 75:0.0380857168467676 83:0.0121729867535394 85:0.028791086053412 88:0.0358740199440377 132:0.0284938823917412 142:0.0255838172795306 151:0.111307886854008 153:0.0407475335439728 159:0.0565267226274227 162:0.0508894949950613 177:0.0490341146775577 178:0.0758309770859057 180:0.0362037217478274 204:0.0282033768508499 218:0.0532984424926237 229:0.0984125810805693 237:0.0403729608132682 238:0.138982282947186 265:0.0443822478778161 284:0.0285306602706354 286:0.0263244500884985 289:0.0408748495202272 299:0.0388923192765392 317:0.0280014926298484 328:0.047663908731952 342:0.0438879775736095 346:0.0391415552688489 355:0.0565507835490165 369:0.0420110292784058 375:0.0333050146292464 396:0.0477181851818579 400:0.331176586794968 404:0.236717220627638 409:0.0479863797315129 434:0.0406528650317685 455:0.0686055649054478 457:0.0323955173631847 471:0.0489740183551532 475:0.0380689503293045 480:0.0345549775417176 483:0.0456150564739472 509:0.0436081697982453 515:0.0339428441261608 539:0.0436477724033058 667:0.0905012650987332 706:0.0478274285289587 732:0.051408473027401 739:0.239965246400748 772:0.0435293277310104 804:0.0885137844546199 827:0.0401291589776203 851:0.0533594147134108 856:0.0352595593409181 888:0.140669310976538 909:0.0413638071688231 963:0.0797205661756333 1042:0.05352903081595 1103:0.0615577155553245 1123:0.0533594147134108 1170:0.0625497924619575 1235:0.05506868907097 1279:0.0720111232603487 1403:0.13405074584872 1967:0.0752507265313095 2056:0.0612432941674837 2091:0.0622105455723497 2200:0.0677764963144696 2211:0.0723742638320676 2257:0.135552992628939 2353:0.0720111232603487 2392:0.0720111232603487 2575:0.0654262551611994 2661:0.0861729363652804 2769:0.0723742638320676 2777:0.0767116055668891 2781:0.0802492715460737 2823:0.271105985257878 2931:0.0713141622936542 2946:0.0727479316708545 2976:0.0634391545796481 3061:0.155572895375186 3074:0.0802492715460737 3139:0.0772378271128608 3406:0.0951080456176999 3653:0.0713141622936542 4126:0.0772378271128608 4448:0.166592947332077 4492:0.0727479316708545 5136:0.0951080456176999 5444:0.0885231775185506 5511:0.0931209450361487 5725:0.0872945685112523 5989:0.100334749470212 6320:0.10404315487012 6843:0.0974582867709702 6895:0.10404315487012 7369:0.269644025295564 7420:0.100334749470212 8160:0.301004248410636 8804:0.10404315487012
+-1 1:0.221465315822414 12:0.349573061824975 30:0.311698711746027 75:0.210190312339704 142:0.0672351860867889 227:0.368597094120989 303:0.46332217136233 1081:0.576510113970196
+-1 1:0.528019812740841 2:0.336477072600481 3:0.210092709563362 4:0.356525199466189 7:0.255904165694095 15:0.141195790182808 66:0.386776349144939 75:0.167045945696442 142:0.138929093873078 356:0.393070367695681
+-1 5:0.045925957826113 6:0.0327207894613328 15:0.0560521898566863 20:0.092288096656933 23:0.0588419990065772 29:0.0594177641437553 40:0.0511114451404518 50:0.0776462180179278 60:0.0620885496922349 67:0.0462722533254191 86:0.0635470265913717 114:0.057439705859889 142:0.00212124431458693 169:0.0596273259119163 218:0.0464011948343955 256:0.0556687252796845 264:0.0673398528754305 286:0.0458357085250207 339:0.0636264778989054 367:0.0698197424307406 402:0.0623501926160448 415:0.0711706296737337 426:0.0736408918336825 455:0.0597274523423834 480:0.12033314073921 496:0.137190335229308 504:0.0868960071553541 507:0.0437390923925833 530:0.0672461367854532 539:0.0759987983383731 636:0.0836616791222357 644:0.0779454887308375 720:0.0814430872361507 758:0.085694286197481 764:0.0756561203700509 795:0.0969129082053137 853:0.086561832680576 865:0.121396559184111 965:0.0817087112941434 987:0.133566674966716 1020:0.104570475941231 1031:0.100519419593131 1080:0.0827104786941859 1314:0.190775515146674 1380:0.0842523703426717 1472:0.0831810403933639 1916:0.0999100164325187 2340:0.227096284121115 2369:0.106635837449055 2422:0.13023772943045 2807:0.111109858656011 2825:0.110459234233232 7929:0.761035672637886
+-1 1:0.122013692244667 2:0.233257213042185 24:0.229952516378625 31:0.108891613300999 32:0.214166280400347 45:0.250934405139006 48:0.174777851533403 142:0.0444509151570332 193:0.277110061877821 209:0.179468551881219 409:0.291810821188849 484:0.315765958822057 671:0.17447489662409 8695:0.632698666404918
+-1 1:0.126881162203525 2:0.24256250047577 24:0.239125970151273 31:0.113235606559159 32:0.22270997674189 45:0.26094488557106 48:0.181750232470016 142:0.0616322498715974 209:0.186628058070817 409:0.303451977026982 484:0.328362752594301 671:0.18143519183579 8695:0.657938798844805
+-1 4:0.191169368963832 63:0.0955291442150688 75:0.0895702970633467 97:0.275775085288059 142:0.022921229903955 166:0.329763852162205 297:0.431747740074573 304:0.334650299917466 448:0.400239988627323 507:0.236312664606 1046:0.496539504950764
+-1 4:0.0277295296793654 6:0.0416695265466943 20:0.0180811947995252 26:0.0138736306583345 27:0.0746656416063111 29:0.0582059987665144 30:0.115601048656711 34:0.0766350672522351 37:0.136494246443953 38:0.026114861358586 41:0.0147594578757974 42:0.019177221579832 46:0.107358662936404 47:0.0151711660864932 51:0.0217697199145812 57:0.0239303843073386 64:0.0556016135041073 65:0.0458633661233083 67:0.0181314309536587 70:0.0368778333260711 75:0.0259847299205926 79:0.0869485043438263 82:0.0240424226550556 83:0.0498315588056761 84:0.0376240765054008 85:0.0196432851251937 89:0.0510326649130846 124:0.0370617053477091 130:0.0477752676832294 139:0.0524451105029021 142:0.0224422237013782 159:0.0385664690697424 162:0.0173601797829131 171:0.0277147924590506 175:0.0310277061676402 183:0.0281986334765938 185:0.055996552809766 190:0.0274825009130663 194:0.0253958123876621 199:0.0299660113955628 203:0.0242998524873869 214:0.0274616845924424 215:0.061260610499342 218:0.0181819557044337 225:0.0305423476382984 228:0.0242419911513334 229:0.100715880593333 239:0.0271753139937885 240:0.028855624044459 242:0.0224600913879596 251:0.0362347309510626 264:0.0527732195903101 286:0.0718414967595191 295:0.0272156576028697 317:0.038209138942429 330:0.0318784327234256 347:0.0263315842265611 355:0.019291442553533 357:0.0296719676858255 368:0.0390708036356001 372:0.0316411765654152 373:0.0228821342468923 381:0.0308120587984568 387:0.0226264861876557 389:0.0273173337798942 408:0.0377489379540365 414:0.0236833976482404 422:0.0292288720506786 424:0.132054605148097 433:0.025920783664021 465:0.0272561871278567 471:0.0668269758557956 480:0.0235758135378219 502:0.0221251174140824 508:0.024869397051702 534:0.0244314493269795 541:0.0330528268144166 550:0.026114861358586 570:0.0371864576714137 580:0.0290030279086991 581:0.0479872030313567 582:0.0270355511445356 594:0.0306911649174873 621:0.044638350301232 626:0.0605041216934738 631:0.0215122900822498 643:0.078237763387042 653:0.065488404938148 656:0.0316411765654152 662:0.0334134879278978 663:0.0299987504658499 667:0.0308731346783371 678:0.0346877916486603 710:0.0369386978690371 714:0.0331714114157725 732:0.0350744425428994 733:0.0723570667419711 789:0.0658716397642092 800:0.0848001698945098 838:0.0422188467513492 849:0.120174547075775 856:0.0240565283378833 858:0.0321576590758545 880:0.0377039534765552 890:0.0336624165642661 906:0.0750126143016727 969:0.0358486862874878 971:0.0799430649635009 982:0.035902808866645 984:0.0367573534782134 989:0.0387648635238684 1000:0.0778330066765448 1005:0.0337895738350346 1017:0.0377708351019679 1018:0.0347828724812754 1021:0.0343174257100895 1098:0.107871799716799 1140:0.0325566710281479 1196:0.0402340860493609 1218:0.0389933151047516 1229:0.0361785333709856 1262:0.148136297902262 1292:0.0769384181681464 1331:0.0362347309510626 1363:0.0362912899328516 1380:0.0330136512870242 1382:0.0839979260292972 1393:0.0366977268677369 1400:0.048890035163744 1424:0.0298066547186415 1426:0.038043566765099 1482:0.0379745868714292 1483:0.0898730215301622 1491:0.0368173870994198 1576:0.0355307640330882 1660:0.18035787701102 1827:0.0431578594957126 1836:0.034182463091977 1865:0.038043566765099 1920:0.0482043718764298 1947:0.0444929768863505 1949:0.0398857279830381 1954:0.04540360590875 2056:0.0417844428343623 2142:0.0416791135352259 2149:0.0491310061650442 2198:0.048890035163744 2291:0.0543005260244333 2387:0.0435375540569483 2473:0.0664928343204404 2549:0.0519930608222675 2594:0.0547516449759565 2601:0.0684553576114469 2602:0.048890035163744 2642:0.0444929768863505 2708:0.0498962617725622 2851:0.0574374434064308 2889:0.0484270392470697 2979:0.0992674164099036 3246:0.05346228334776 3264:0.0547516449759565 3492:0.0587931818882455 3556:0.0557298623529553 3604:0.05346228334776 3621:0.048890035163744 4119:0.0574374434064308 4321:0.159214004775858 4349:0.0552271603130477 4451:0.0664928343204404 4806:0.0684553576114469 5147:0.0684553576114469 5596:0.0648893360362491 5792:0.0648893360362491 6162:0.120793360344874 6355:0.241586720689747 6993:0.0648893360362491 7013:0.0664928343204404 8487:0.638869411658273
+-1 1:0.154379416120931 2:0.29513173229148 3:0.184277118307161 15:0.123846055325128 142:0.018747366796133 169:0.263490476381299 2973:0.612367586385694 5219:0.628486753209908
+-1 1:0.288807804362253 2:0.138030622447039 3:0.172369708571784 4:0.219382236745167 5:0.0949155462931383 7:0.104977765660387 15:0.0579217557238301 21:0.10227220580984 40:0.10563243461804 44:0.146403374944611 47:0.0800178098600306 54:0.12658530644688 75:0.137052166339498 83:0.0438047211270012 92:0.111605099170412 142:0.0789118682433566 185:0.0984481898096189 186:0.0959359169262106 187:0.157641789426013 228:0.127860378531016 355:0.101749527582367 766:0.225086601244447 986:0.302354953481532 1314:0.197138645513515 1392:0.269163362551372 3666:0.242075653940305 4740:0.555883538795549
+-1 2:0.0705438322527946 6:0.0345610162968939 11:0.0388264288533445 26:0.224384409731134 29:0.0941391550465518 57:0.0645061278439951 63:0.0747035739360974 75:0.0350218844946716 82:0.0648081355296403 88:0.197928654654628 100:0.0533917692763352 134:0.0618811189716994 142:0.0403297869518039 169:0.188942352844258 174:0.0633351598292231 176:0.0447862251338073 204:0.0518690726187024 218:0.0490108116970099 228:0.0653460872302564 275:0.0581022274914327 284:0.0524709823672238 286:0.145240566813181 341:0.072192171221668 411:0.0647322721602089 472:0.0787201756599687 473:0.0760725330577224 502:0.0596398968836672 505:0.124302580719291 513:0.0646566507796079 530:0.0710280793222199 643:0.0702985669105348 655:0.065423943729515 750:0.199805157541298 856:0.0648461584451157 952:0.160985691735231 1045:0.0897687841524272 1836:0.0921413674730465 1851:0.117012611963415 1863:0.104091740131116 1917:0.107514941481139 2385:0.679906332092673 3360:0.121129701514507 6452:0.174914023624042 7055:0.321088381527759
+-1 1:0.148032958394408 2:0.282999019849581 11:0.155759064383984 24:0.278989600786005 31:0.13211261264812 32:0.259836969873971 45:0.304445850890078 48:0.212049008175466 142:0.0359533445412531 209:0.217739994462779 409:0.354039111163565 457:0.239011157689269 959:0.385353785076389 1242:0.440011078955726
+-1 6:0.0202875294405021 11:0.182330823067279 18:0.0361995260276811 26:0.0878100203864509 27:0.0196908067093901 32:0.152081963151868 63:0.0584686107036541 72:0.042084691798945 75:0.0137053746075048 83:0.0175220904173277 88:0.258189643108616 129:0.209200422577213 134:0.145298391941373 142:0.0175361728495928 162:0.03662578258932 176:0.0701061066897488 180:0.0521125093416175 215:0.043081692883663 229:0.0354143600664593 280:0.0708428446760095 312:0.0612942088456876 317:0.0403060231325465 346:0.0563412976931228 377:0.0520485261932662 405:0.0643128552207355 434:0.0585167133779191 437:0.0608270629090897 455:0.0493762515208349 469:0.0781912387676236 506:0.0378325761853926 580:0.0611893775237011 599:0.0634075491072706 647:0.122170270289665 673:0.0683761526609559 730:0.0650059953752536 784:0.132811572578211 799:0.0682228038985718 856:0.0507534592253675 952:0.12599945682622 964:0.081008013702688 966:0.0675479988192965 997:0.128625710441471 1059:0.371942647549784 1111:0.0839699661608879 1140:0.34343352713507 1149:0.0648780286981488 1190:0.0731828547465809 1424:0.0628848358191773 1603:0.195867969766418 1731:0.0839699661608879 1931:0.0881550731619449 2401:0.457914159646433 2642:0.0938694252345848 2949:0.100794265335592 2975:0.096131102335473 8188:0.280567612089494
+-1 1:0.461829362383355 3:0.367512656751996 4:0.311832627431885 5:0.202371198943759 15:0.123496051053193 44:0.312149354600465 63:0.155825717259862 142:0.149555075348349 187:0.336110986826698 2216:0.491067137043224
+-1 1:0.420458442119473 2:0.100475367358959 3:0.250943007910462 4:0.106461935466328 5:0.0690910046829531 21:0.0744460704964031 31:0.046904979726174 44:0.213140136867747 47:0.0582466317865855 58:0.165103076374216 63:0.05320003744168 75:0.0997631287621393 83:0.0318863696277318 142:0.121265586974874 229:0.12889276887785 356:0.117374682580641 535:0.233398671688187 4656:0.457325212686004 9680:0.572450981002968
+-1 2:0.0750988570860287 4:0.0397867153255793 6:0.0367926258149312 26:0.119436470777102 29:0.0334059110261451 31:0.0350584472758828 42:0.0550314891420685 63:0.0795271938549995 75:0.0745665046697135 84:0.0539835488959673 142:0.0357782389790182 162:0.0498172553959774 169:0.268189848318253 173:0.137502582435297 199:0.0859913008712529 214:0.315219259720342 215:0.0585983846773102 218:0.052175446467302 228:0.208696478883529 229:0.192678063963647 286:0.0515395899819662 347:0.0755618474462116 411:0.068912043768658 433:0.148766005421832 502:0.0634908531286175 507:0.147546201027951 644:0.0876451714047007 778:0.175801066866703 829:0.0682358061376329 915:0.113971833494552 1007:0.318528575697834 1009:0.245938818088555 1045:0.0955651667418823 1059:0.0843174787253405 1155:0.10707443849171 1218:0.111896303010709 1296:0.0936394130926716 1312:0.23920708997564 1382:0.120521393961962 1467:0.113028244523092 1649:0.104470268011731 2733:0.23920708997564 2782:0.351950182133585 3378:0.150190590287134 4657:0.203701939619208
+-1 1:0.431213273747015 2:0.274787757042138 3:0.171574556285946 4:0.291160283620985 5:0.188955389839873 15:0.115309118057486 75:0.272839872185945 142:0.0872753809351116 187:0.313829155911426 229:0.176252925417829 652:0.603093615580695
+-1 6:0.019174392216709 21:0.0579971059489249 26:0.165984111213233 29:0.0174094136035229 32:0.0359343805157879 33:0.18568348262266 37:0.022680793133216 59:0.029765695132299 65:0.0342943307825267 88:0.109810476135057 94:0.0287768720041183 97:0.0299113235501206 100:0.0296216614828104 111:0.0299780550963686 142:0.00248609958041624 157:0.048577971725947 176:0.0248473204388562 199:0.022407084213344 206:0.0457202902447332 209:0.0301125425620768 215:0.0305384132331311 224:0.0455881005938402 252:0.0345949783764363 256:0.0326218893336388 287:0.0444949102107304 308:0.0354185199062439 317:0.0285708826143323 337:0.0732957043060193 414:0.0354185199062439 442:0.0407920373987033 455:0.0350003045822296 457:0.0330542566444296 474:0.193627729647989 502:0.0330881119000627 507:0.0256311209645277 515:0.0346330471716131 574:0.0358923588840326 598:0.0506606264720003 609:0.0339460143555309 643:0.0780030472851749 656:0.0473193778478992 697:0.0513896813683546 713:0.0479336260955259 729:0.0515957340349996 731:0.0552418206718925 757:0.0455443309709133 774:0.0537740902204778 827:0.0409451562356829 862:0.0461250224721783 882:0.0719953315360814 890:0.0503421421572218 895:0.0996961674283765 912:0.0455881005938402 1000:0.0581996286445165 1026:0.0663253738138477 1106:0.0614236653957002 1168:0.124662224090273 1179:0.0597774246717145 1190:0.0518755905406585 1253:0.0586652616786774 1317:0.0621754562692829 1379:0.0505963096712153 1407:0.116860769461704 1591:0.113788304092786 1598:0.100309377458863 1676:0.130220819490379 1682:0.0672025494267886 1855:0.0620216210705727 1866:0.0763193476265028 1943:0.0575307001114738 1956:0.0714479102448508 2185:0.0599070095578597 2246:0.0607125322347138 2736:0.125296122693672 2804:0.125296122693672 2976:0.12945828728541 2979:0.0742272079449037 3187:0.0812064337423644 3199:0.0849902468686037 3944:0.0833440061446179 4218:0.0932581854179851 4781:0.0868724178566281 5302:0.51538616110824 5570:0.0793681785198515 7548:0.0970419985442244 7549:0.485209992721122 9366:0.106158796743939 9899:0.222983563634827
+-1 6:0.0410050672796897 18:0.073166326368678 26:0.236641647559049 27:0.0397989738611526 32:0.204924940034666 33:0.226908699347285 64:0.11854915406236 75:0.0554024884619145 86:0.106181223770399 88:0.208740718629874 142:0.024810826017247 186:0.077562999149117 199:0.0638910469982059 252:0.197286658835737 275:0.0919141855057912 286:0.0765872438826403 308:0.100991556884009 382:0.120053254484365 420:0.138987851001381 437:0.122943398028233 455:0.199598134565231 458:0.143905044888041 474:0.368070450616039 506:0.152934080652416 507:0.073083991588076 515:0.0987518779089904 598:0.144452550633676 655:0.103496694706959 808:0.142657783420146 882:0.102642920136924 1021:0.146337544223549 1365:0.165302461150986 1863:0.164666793772111 2143:0.215114082308609 2228:0.216343814691119 3523:0.215114082308609 6152:0.247706023652119 6325:0.27092214667692
+-1 2:0.178013647054636 6:0.0174425810462858 27:0.152365838143231 31:0.0332408896849303 39:0.0875930416668076 41:0.160633431667219 63:0.0942552681056929 100:0.10778505525496 110:0.0841686911444504 142:0.0588004989254228 199:0.0407665993252833 283:0.130755298506621 332:0.224038521126559 338:0.114273125955568 406:0.0817737308152892 423:0.0660769415064455 436:0.0770339906754086 456:0.0945094832944231 500:0.090254630180189 540:0.09858948118535 667:0.0840013503788257 853:0.0922876132820834 1096:0.114273125955568 1507:0.239078251736079 1908:0.166851901438054 2313:0.799838876605217
+-1 6:0.00722967283560655 12:0.0487367881991402 17:0.0393953017894126 29:0.0262567622880996 41:0.166450015959943 59:0.0448924242497556 65:0.155167447627997 100:0.044675193653583 110:0.139546343138286 142:0.0262466324460388 186:0.0410257910934555 199:0.0337942160004831 211:0.215705712780681 283:0.0541959946877378 293:0.136855562359113 311:0.277916295957086 331:0.0565165823783962 341:0.0604062999468748 457:0.0997044218820785 580:0.0654164197481249 582:0.0609787697808745 598:0.22921806390521 671:0.0441518643967047 867:0.0635511764217289 1266:0.295478922525689 1305:0.0657545569951377 1474:0.111373960378819 1642:0.335846950167974 1664:0.0858073832861803 1886:0.498260128136719 2544:0.292716198921507 2587:0.11804852811804 3401:0.109227337797894 4139:0.246985011421736 4140:0.131020405224468 6402:0.160107994121768
+-1 6:0.0130284845483648 27:0.0948395558872121 34:0.0519152537435141 41:0.0299957067258807 42:0.0389739460057772 51:0.0442426909956584 58:0.0436980451472306 78:0.0500456485668152 83:0.0843940676438849 84:0.0382317824335106 113:0.0697434449049119 135:0.118700744610064 139:0.373045445490839 141:0.119011147030628 142:0.0185816168582471 145:0.327989184291678 183:0.114616396747406 188:0.0719990338226955 214:0.334862964818362 215:0.0415000632554827 218:0.0369512630885626 227:0.0463037448142273 286:0.036500942068484 302:0.0826942137156557 309:0.0958808142042716 317:0.0388262948277024 325:0.058495480273583 331:0.0509238410220224 368:0.158807508684951 387:0.0919678012069861 396:0.066165055949153 404:0.109409079489401 414:0.0481318660961084 423:0.0493552192267581 434:0.0563684280755709 439:0.0702101527184814 449:0.0744605773264687 475:0.0527856249952607 501:0.135481736494356 507:0.104493949952464 532:0.075320655658623 608:0.07108222292881 623:0.0904232592602765 630:0.0901326204379216 655:0.0493257971727922 676:0.0651392231758407 692:0.0910191108940895 695:0.0643044928008054 754:0.0794037543424757 773:0.10195438663489 778:0.249008754610756 809:0.0984184703179242 814:0.0723153941831608 815:0.0993594188167586 834:0.0656447811456938 891:0.0916355131409722 916:0.157870831844701 944:0.0712819333165192 986:0.0582516307377094 1098:0.0730761002092527 1099:0.184547868708593 1139:0.108651617538406 1188:0.0802126658519339 1262:0.100352668431911 1323:0.209982287933033 1385:0.103713894036933 1546:0.0979659425080721 1559:0.0947071463739046 1865:0.077316096640895 2099:0.0947071463739046 2137:0.0919518735014375 2150:0.0975245893742628 2173:0.0916355131409722 3115:0.104991143966517 3318:0.104991143966517 4659:0.121040856595697 6331:0.121040856595697
+-1 4:0.017399674532944 6:0.0764288687437319 11:0.0542283036159347 12:0.0271170281069968 13:0.0267348061096114 17:0.0219194482316332 18:0.150729009896519 21:0.024334282318279 25:0.241519141975605 27:0.0702765902144027 34:0.0320578878285463 37:0.0570981066323081 38:0.196638064922023 41:0.0370449504612656 47:0.0190391510597204 51:0.081960144055872 74:0.0989290896888965 77:0.0606650807003586 78:0.0309033987580625 79:0.027279144186759 82:0.0301721907308613 83:0.0833819075153161 84:0.0472165733329192 113:0.172267483817693 114:0.0282456943774756 116:0.0861337419088467 123:0.040810728194444 132:0.024396993877136 135:0.109947314560215 138:0.134925352503814 139:0.197448971723561 142:0.0156466727273808 145:0.0675115675439458 148:0.0353597169805116 157:0.0815289010778984 159:0.0725988522839301 162:0.0217862676755645 166:0.0600282747330484 168:0.0597510414585825 169:0.117285783347316 173:0.0300665707414567 176:0.0208507545512477 181:0.0339533229090961 185:0.0936976385942112 186:0.0228266484374659 190:0.0344893387495516 208:0.0301368716457917 214:0.034463215176017 215:0.0768793915153338 242:0.0281864340758352 249:0.0459058923597864 253:0.0439550607868788 275:0.0270501762692683 283:0.0301545170606865 286:0.0225394854515936 288:0.0417795255764178 294:0.192204943345647 295:0.102463386137203 298:0.0398774509967734 299:0.0333003296010082 301:0.10937967298999 302:0.0510640252374289 307:0.154518653715047 330:0.0400060412435131 341:0.033609915507891 353:0.0451247996403853 357:0.03723702395642 358:0.213063320547967 364:0.0372706227789134 381:0.0773355770519292 382:0.0353314526765489 394:0.0374743923450283 407:0.0580315010381708 411:0.0301368716457917 413:0.104342563493476 424:0.0828613819535179 430:0.0313075961448984 433:0.0325294517871634 449:0.0919594401820276 454:0.0401361473237397 455:0.0293706825192204 456:0.0435911639367186 461:0.0440168940279596 465:0.0342053248300587 466:0.0371701316021782 485:0.0278374024729427 506:0.0450082195306589 510:0.0363664867326025 517:0.134561803195658 527:0.0383664126782044 534:0.122641608876299 540:0.0454730053215753 550:0.0327730108203372 567:0.0873019726613603 576:0.0393775676182329 613:0.0744070542063911 636:0.0411402214586074 641:0.0318294521084944 656:0.0397082951239033 662:0.0419324685040369 673:0.0406724733011228 678:0.0435316640370132 681:0.0440168940279596 706:0.0819014737927304 712:0.0369391502796213 716:0.0385160719836203 725:0.0584820617465567 744:0.0496343313921974 748:0.0594424241226437 771:0.0853512758620406 782:0.0458325551818898 800:0.0354735036034118 805:0.0524376514326041 806:0.0863624943116854 814:0.0893101209310956 827:0.034359334835866 829:0.0596822737726508 872:0.0459058923597864 876:0.0388216196525675 885:0.0563933590651825 887:0.0508316544511997 904:0.0490321527166676 915:0.0498425867151982 944:0.0440168940279596 950:0.0438324239177746 969:0.0449885361236443 971:0.0501625280924255 976:0.117903601842788 991:0.12819205934237 1003:0.0425121207970684 1032:0.106246825233865 1045:0.0208964573273813 1055:0.0438935720224656 1058:0.0451247996403853 1068:0.0474007489640753 1074:0.0525714373696274 1080:0.0406724733011228 1127:0.0463564530681723 1168:0.0523054677609048 1209:0.191008763988621 1216:0.0430668709544233 1218:0.0489349079936312 1225:0.0358812567416562 1229:0.0454024798121861 1251:0.0528439747885205 1292:0.0482771778203462 1319:0.0424581490285637 1322:0.0903871349863269 1335:0.043238882820316 1337:0.0517920168272867 1363:0.0910879687486679 1376:0.0575986139999597 1382:0.105413729785663 1409:0.0528439747885205 1441:0.0524376514326041 1559:0.0584820617465567 1576:0.0445895575749783 1613:0.0461288737752529 1642:0.0622881367708099 1698:0.0582544824536374 1779:0.0548012466094047 1784:0.0587144325327859 1787:0.0578129353877825 1890:0.0666022082167512 1903:0.0676062823516189 1929:0.0556572727153976 1932:0.0519181576821551 1995:0.0520457568451006 1999:0.0666022082167512 2118:0.0599558750562618 2120:0.0594424241226437 2142:0.0523054677609048 2228:0.127339175992414 2242:0.137421847934745 2251:0.0580315010381708 2394:0.0619681953935826 2444:0.056979543076937 2456:0.0567806691439323 2668:0.0633076800107547 2699:0.122709719146279 3372:0.0769580822496004 3714:0.0728994285906737 4034:0.0747432387133577 4085:0.0797318910300033 5376:0.0747432387133577 6563:0.0890836909279848
+-1 6:0.027076456709609 27:0.0131400246887549 42:0.0269992097676602 58:0.0302718304990693 69:0.0457837218116333 73:0.245187787778527 98:0.0292727287911503 110:0.0435522303346738 117:0.279538714708074 127:0.0448809796862947 132:0.0273698909607544 137:0.0369436393967066 142:0.00702131957082403 156:0.0626407329727875 158:0.0323904182641476 172:0.0353893561112939 199:0.0421885216375533 202:0.0560346482880161 203:0.0342112548420534 204:0.0812725347694177 229:0.0236326308250143 243:0.0425511080419149 248:0.0548978740046912 286:0.0252860357398281 295:0.0383163559708493 299:0.0373581431682422 309:0.0332107276873049 322:0.0391097895934264 323:0.15441730313665 327:0.0379517364874195 328:0.0915674436232667 329:0.181763608261725 336:0.041258546317047 360:0.0555673421171819 370:0.0533672682174033 394:0.0420408365665564 398:0.0351006114211775 408:0.0265729707008045 414:0.0333433609479813 442:0.0384020458898041 464:0.0632651750579488 485:0.0312295307426834 515:0.032603908792021 533:0.0565202848010156 534:0.0343965272842646 546:0.0389889872316192 588:0.432980105917636 593:0.0434656415631274 618:0.25846918560682 644:0.0429999333975701 655:0.0341704569670176 709:0.0393549885736377 722:0.05796322327977 733:0.0509350015852553 754:0.0550069684890125 827:0.0385461935465345 858:0.0452740966365528 923:0.0758444497524709 1000:0.054789732322792 1028:0.0548978740046912 1108:0.0784609093515753 1124:0.0501704288779668 1296:0.0459407912819311 1504:0.0630535093246954 1605:0.0736855810283934 1690:0.0589775328756914 1891:0.128762877822178 1943:0.0541599960835396 2135:0.0630535093246954 2333:0.0695193333858467 2404:0.0706289240273615 2708:0.0702479049225907 4627:0.0850312246984108 4682:0.579415850659423 5046:0.089447625169553 5080:0.0999389891787239 5883:0.0963768683684282 6675:0.0999389891787239
+-1 6:0.0315635908021765 42:0.0629470848588636 57:0.157097619738976 63:0.0227415480583058 67:0.0595143941003876 73:0.228656417968777 83:0.0545221727025211 100:0.0650149074770859 117:0.21724274336779 131:0.279392524759386 142:0.0163697975847892 162:0.0569828483970478 169:0.0766914061547249 179:0.0573530988151209 199:0.0491800403501071 209:0.0660923145620759 259:0.127991195419493 367:0.0898006768286772 379:0.385506453558079 381:0.202274273339208 441:0.0741902500102489 449:0.12026178408813 519:0.377392846425961 541:0.108492207051541 546:0.0909005526068984 662:0.109676036816509 755:0.109810620963163 895:0.109408736321853 927:0.135137878696556 990:0.141660846577512 1138:0.103749065955867 1175:0.111476558940075 1226:0.333060672375711 1268:0.142485709755744 1366:0.114014420599582 1395:0.112347024298952 1433:0.101438373286488 1469:0.11912210001491 1598:0.110081686308456 2335:0.155474021185038 4605:0.224697054611044
+-1 6:0.0241947571263451 17:0.0878933049380918 25:0.0605281990042665 53:0.0621108062875204 63:0.0522969235721312 73:0.350548613610409 80:0.105022974099864 87:0.225399026399616 98:0.0523145676794487 131:0.214165565693609 142:0.0439183702953192 175:0.078068254370825 179:0.0439634484229671 189:0.060351310226801 190:0.0691482270856785 216:0.0701676672163805 226:0.0625345187113415 262:0.0754793174049511 277:0.146072839988532 303:0.0720581980395403 323:0.0689914708110716 337:0.061657643661605 341:0.134770114715541 347:0.0662524262760324 351:0.0572340656297128 377:0.0620726862639181 431:0.359713482940297 433:0.0652188183567493 480:0.118637362254601 501:0.251598541439559 502:0.0556686106583148 506:0.045118849732492 515:0.0582678644442061 622:0.0890089466343757 651:0.104347370626751 657:0.251293317891832 671:0.0985054842770047 803:0.10078967336828 808:0.252522723483698 899:0.147928469288802 904:0.0983053474922269 912:0.0766990340904212 939:0.117251621304051 1012:0.107672915638731 1293:0.118679772826286 1370:0.132590045296427 1405:0.342717592749452 1878:0.149853915182341 2293:0.120206493189576 2927:0.128402371871461
+-1 6:0.0293018600611095 9:0.448307007679966 13:0.259661244849194 51:0.0663363486607196 69:0.198186671762728 72:0.0607841262004886 75:0.0395901304801015 82:0.0732616927618765 83:0.0759229717288736 85:0.299283549815907 104:0.424346581286378 142:0.0557215931874282 212:0.221172497558908 229:0.0511499749570026 289:0.084978871862702 293:0.18489183987603 339:0.0759710337990954 404:0.164045149160785 446:0.120518101232105 457:0.134700655843134 489:0.11128693326179 507:0.0522251769425047 518:0.0851791192812944 797:0.144333325078711 808:0.203883992087761 863:0.103224520893174 866:0.109237553901772 1269:0.0997776195618766 1477:0.323436276746543 2433:0.133063990211341
+-1 6:0.0293088172333077 8:0.295019469859197 9:0.373677874746429 13:0.0649307241245662 17:0.0532356823631205 22:0.208369991259951 63:0.021116985067409 80:0.0636108710890851 105:0.20755971836846 142:0.0405344168911431 151:0.0771547343727436 153:0.084734295541515 212:0.110612505391625 232:0.34686307722492 241:0.129020634563176 289:0.0849990484877873 423:0.0740195118604405 432:0.0917738237669017 474:0.131541176271036 524:0.110440118830286 541:0.201483936833481 543:0.216272689036497 596:0.1641951264005 760:0.46390227440104 971:0.121829545335252 1549:0.154634091467013 2512:0.302557932031885
+-1 6:0.0432035827896399 8:0.173953087074869 13:0.114855808461038 14:0.0876637960537033 17:0.047084238003114 37:0.0817666823785272 41:0.0795746884638546 67:0.0488772345733373 71:0.123725142237375 85:0.105905535785779 91:0.138086345434983 96:0.0535358900486845 109:0.380358715794033 112:0.0962055814625127 119:0.180813011213766 142:0.00448132729660985 147:0.11125223688058 151:0.0682394160272836 153:0.299772600722162 158:0.0620191393020585 175:0.334567851043729 183:0.0760155790574776 220:0.069317263072944 232:0.230086987114464 254:0.0833910762749007 323:0.0739171392893106 325:0.0775904308881933 376:0.110198349970044 423:0.0654664720842514 429:0.0986085023113957 459:0.0789302535462278 468:0.115682828745497 473:0.0760766049642424 485:0.0597963447607665 550:0.0703983159264231 572:0.0936363322625616 631:0.0579910792064446 747:0.0952263280396999 861:0.230720516880965 914:0.110719438016033 950:0.0941545726055038 966:0.172617305689544 1083:0.0926326458095988 1093:0.109688468991949 1134:0.105115002452822 1159:0.0878638694071824 1169:0.0973766121552592 1291:0.262323017367676 1373:0.100244223371151 1556:0.156592173752841 1948:0.129945418962601 2596:0.119555029280076 2695:0.144119268396045
+-1 6:0.0122827677859998 8:0.556366715621007 9:0.140941160237413 10:0.051799582507082 13:0.0816336940774791 14:0.062306988254287 22:0.0654929247701329 34:0.0489437588781476 37:0.0871734275931294 47:0.0290676548528506 52:0.150209321870374 59:0.0381347285657687 106:0.042988036155692 123:0.062306988254287 142:0.0143329525883292 171:0.0531009954623918 218:0.0348362683496572 265:0.0580171511483316 281:0.212673732403954 282:0.0869924129830324 377:0.0472679506918508 423:0.0465302541165823 452:0.0866887860605043 471:0.128039167059508 507:0.0328376621635832 627:0.208077472727912 631:0.0412171233008878 653:0.0627372457974921 723:0.0630303112415835 734:0.0847040431728627 811:0.0697522405160068 814:0.0681762480361758 837:0.133286594624597 867:0.0539847625379934 877:0.115718847417628 966:0.0613438210655191 1061:0.0796569385577388 1267:0.0824539272685523 1359:0.0681762480361758 1373:0.0712485191072511 1457:0.0813225737332524 1553:0.0855261983396276 1698:0.0889389019648147 1912:0.0932229603195838 1952:0.0860974679048357 2030:0.0946087412145947 2047:0.0844386701561938 2314:0.101683630473314 3110:0.209806142746511 3917:0.382196875413899 4407:0.107798892263537 5358:0.12172911922152 6668:0.228225581979915 7247:0.243458238443039
+-1 6:0.0227397136420904 10:0.115079046695012 13:0.0302265231942881 14:0.0922816808386481 17:0.148693513840282 27:0.0132425184820987 34:0.0362448295318319 37:0.0645554427211996 42:0.13604903446501 50:0.0431689526368067 51:0.0308882010110081 53:0.315227901858379 57:0.0339538829004714 58:0.0305079544648 59:0.028240306175709 78:0.034939557650545 83:0.011784007106515 91:0.0363400874455634 96:0.0281780058660656 98:0.0295010596418447 101:0.044202264828507 104:0.131725695547355 109:0.300296215728559 127:0.0904621135908641 132:0.0275833794445602 140:0.0321379279445698 142:0.00589673893236857 145:0.076328960602269 164:0.0531241325592992 166:0.0339341536851333 168:0.0337774329300525 171:0.0393234310690485 179:0.0247917238260313 199:0.0212587986229521 203:0.0689562135951525 214:0.0389643062529307 215:0.057946850291303 218:0.0257976632118098 219:0.0760537929614262 220:0.0729687035636395 224:0.0432518680654657 244:0.066925508739399 275:0.0611661649656531 284:0.0276189821109416 293:0.0860912068675201 308:0.0336034432253999 323:0.116716332684647 347:0.0373608512061538 371:0.127090668757728 382:0.0399459404881063 384:0.0492844168159331 394:0.042368760213362 402:0.0346648243874073 409:0.0232265035369262 433:0.0367779824140443 454:0.0453781554665637 470:0.353979235694368 490:0.0470656135058016 509:0.0422146999096358 515:0.0657164465050802 532:0.0525853988513668 539:0.0422530370399489 546:0.0392931060818235 559:0.0651213191855813 569:0.0637586511306229 570:0.0527624050262876 575:0.0949345247014267 608:0.0496263211103011 620:0.0646503679696854 645:0.0578667397069103 690:0.0568369824546549 704:0.0627267638576911 722:0.0584153434826688 729:0.0979032621299512 759:0.0672059413523055 772:0.0421383771879079 804:0.085685385695052 806:0.0488209625820002 886:0.0391725377419344 906:0.0532162268968692 925:0.0672059413523055 1021:0.0486916482009307 1026:0.0629264277348911 1064:0.0421383771879079 1192:0.0565922937109214 1229:0.0513323008027302 1332:0.055885762040506 1351:0.0603857721377918 1543:0.0637586511306229 1636:0.0663828699379902 1760:0.0693681517032982 1791:0.0637586511306229 1873:0.0602226492123304 1920:0.0683952909808116 2049:0.0845051289814034 2254:0.0732999617842344 2410:0.063545334378864 4564:0.572139036559118
+-1 6:0.0194170415030539 9:0.594146293517056 13:0.258098964918434 69:0.098497130121011 72:0.0604184119387129 75:0.0393519321831583 77:0.07320791139863 83:0.0503107819783543 85:0.237986302405544 104:0.421793454238038 142:0.0528687773750463 212:0.219841789334148 229:0.0508422256069577 293:0.0918897090738039 339:0.0755139458671157 404:0.163058153799113 409:0.0991635141597734 446:0.119792991056509 457:0.133890214795584 483:0.0942631914276838 489:0.110617363405528 518:0.0846666299082644 797:0.286929856072181 863:0.102603459411907 866:0.108580314357823 1269:0.0991772967348371 1477:0.160745143723388 2433:0.132263396339373
+-1 8:0.347301970084959 9:0.263939994479418 142:0.0357883570767157 212:0.390644804462016 218:0.195713256377422 281:0.398273319604164 582:0.291014665224661 3143:0.611733602091382
+-1 1:0.159643637783678 9:0.285953841367158 14:0.379241719139804 22:0.398633445095304 35:0.405635376544175 75:0.0757580164735706 83:0.0968553470811681 124:0.432210962800161 142:0.0387732757306865 173:0.279399522652501 518:0.325990394245349 1045:0.194184440008266
+-1 6:0.02294941389861 8:0.0462012770290364 9:0.351117063948784 10:0.0774268522822822 14:0.0931326806554667 35:0.0996143305961602 42:0.0549214585827431 48:0.0280792461286761 57:0.0342669975714005 58:0.0307892915993766 68:0.0281771576186292 75:0.111626123381067 83:0.0475707057226978 84:0.0269378067998972 89:0.0730759766403956 104:0.0664702193655383 109:0.0505109127245475 118:0.0300551792564656 127:0.136944500683846 142:0.0547502788195406 173:0.102920743704727 190:0.0393534336912114 215:0.0292406112140833 218:0.104142252621672 223:0.0623433890560901 225:0.0874699326935162 242:0.0321616187671764 286:0.0514365411638891 293:0.0434425597993579 302:0.0582656787298837 307:0.308543731878347 317:0.0273566954573312 330:0.0456481668946155 331:0.0358805293304227 347:0.037705384132339 355:0.0552485749197104 414:0.0339133262245977 423:0.0347752910136787 428:0.135651397270453 433:0.0371171402621987 447:0.193696939447739 456:0.0497389060417601 485:0.031763362594731 501:0.0477296716278735 521:0.0452606347193782 557:0.0863944364720115 631:0.0308044192912379 653:0.0468879016765775 655:0.0695091209415831 745:0.0623433890560901 781:0.0497389060417601 789:0.0471622873004199 800:0.0404763971263428 817:0.0841886112276764 831:0.0805656001797064 856:0.0688952578064346 861:0.122556980113979 1017:0.0540857638592954 1021:0.0491406710549036 1041:0.0654819633811678 1045:0.0238435231764199 1071:0.0878116222756464 1101:0.0590963403139536 1124:0.0510280329574718 1127:0.0528941889905555 1150:0.050083963296599 1162:0.0532489674361204 1166:0.151990480523797 1171:0.0759952402618983 1229:0.0518056751299315 1232:0.0519671363410011 1269:0.0468879016765775 1282:0.0645656464825797 1292:0.0550857970907463 1344:0.0726490272124472 1366:0.0497389060417601 1494:0.168377222455353 1551:0.0491406710549036 1706:0.0690260161644772 1951:0.0572370417827874 2136:0.0852844152777718 2200:0.0662157904705207 2280:0.0623433890560901 3536:0.0864847328070226 3598:0.0831805692188742 3698:0.0696719937558824 4025:0.196048633644504 4240:0.101647327870222 5098:0.533768375717623 5126:0.0952140911282953 5444:0.0864847328070226 8622:0.101647327870222
+-1 6:0.025190144556832 8:0.338081792186759 9:0.192699683667651 10:0.0708222008845178 13:0.167418662499164 22:0.0895442173486787 29:0.0304952313735929 52:0.136914292269651 63:0.0181494838982441 114:0.0589600482438391 116:0.179795529559287 142:0.0239512949758309 171:0.0726015381936952 176:0.0435238545681626 229:0.0439724734388225 232:0.149059769064882 281:0.0969249883890716 282:0.118939069573986 375:0.0595250670222807 415:0.0730544089021534 453:0.0814440108849281 474:0.226112245954264 506:0.0469750674108603 522:0.233868819265873 541:0.173170055083188 574:0.0628709164845804 619:0.369167878821031 627:0.568981596369592 649:0.112416108058716 658:0.0776586237722165 867:0.073809855449048 987:0.0685509917043818 1059:0.076970839698245 1149:0.0805562316624895 1433:0.0809555320467637 2994:0.174184311777014
+-1 6:0.0050860607870831 12:0.342862357653595 17:0.027714518233746 29:0.0738863249310847 31:0.0193853404041118 37:0.0240645734730032 39:0.0510822949035689 63:0.0109935111510449 75:0.0206155318915331 94:0.0610651617515211 106:0.0356010581351846 116:0.0544529026334813 142:0.00263777927265306 179:0.0277251104346317 182:0.0517180465065992 199:0.023774165268414 281:0.0587094347500011 283:0.0381267769186877 372:0.0502063855628538 381:0.048890789532508 389:0.0433455623708265 429:0.116085010662414 436:0.0449244934802984 571:0.0401409674844522 582:0.0857968920252125 640:0.0474688316448115 645:0.0647136020118777 663:0.0952005579930642 676:0.050858109777208 707:0.226435959346064 713:0.050858109777208 856:0.0381715052390195 880:0.239305794659597 894:0.161005143816479 930:0.0445303531260745 1056:0.0499435675503445 1225:0.0453675536768866 1244:0.14358471743306 1322:0.0571418558123071 1457:0.0673482655661396 1466:0.0621193345490342 1599:0.061629627320723 1709:0.0648644707677232 1795:0.0650169883950772 1822:0.0722998773371719 1904:0.0710640948415904 2098:0.0861609283147938 2210:0.0783513646419841 2264:0.0690828680446715 2280:0.138165736089343 2456:0.0717923587165298 2548:0.0708295477407438 2657:0.0819729015046675 2726:0.0848308534064449 3503:0.543104974459131 3518:0.0787558922121671 4124:0.0958339524822894 4163:0.102962638485272 4885:0.100811431219017 4976:0.0932896143177763 5357:0.0861609283147938 5504:0.0945038775739405 6261:0.189007755147881 7012:0.112635662652767 7198:0.354882057177965 7685:0.118294019059322
+-1 6:0.011131584454907 18:0.0397247069818435 27:0.172866689175653 33:0.0205328553916594 51:0.050401487551094 52:0.0907541243388825 59:0.0230404069121219 77:0.0279795473604299 82:0.139158182891376 120:0.0618279239381381 123:0.263514358640367 142:0.0731267432756246 162:0.0200962366223921 168:0.110231920902434 179:0.242721761492531 189:0.0277665819601227 216:0.19369749641482 218:0.0210475288080707 286:0.0623730745983025 298:0.22070417101168 363:0.415952179812241 386:0.0295517169072533 442:0.0315754473820691 456:0.0402096567509049 457:0.0255859478463503 465:0.347070982025891 489:0.0845543520955787 655:0.0280960933456357 723:0.114245786459383 804:0.0349540500827544 856:0.0278479653918803 881:0.0422771760477893 967:0.142636639775492 1057:0.252750685767962 1086:0.280697852352504 1324:0.0885656360554629 1352:0.107890839176858 1376:0.0531305037330138 1471:0.429747785201 1659:0.052195809871353
+-1 6:0.0160439952662489 51:0.108965785278464 63:0.0693581332392901 75:0.0325158811431205 86:0.124636136303617 106:0.112303653476767 120:0.133669235004754 122:0.172689012149194 123:0.16277325144019 137:0.131344418205596 142:0.0166417665598237 161:0.46971736137613 276:0.124636136303617 298:0.159050883065972 373:0.114533845030768 375:0.341211977659192 409:0.16387449669032 485:0.111029249235179 501:0.16683969120963 657:0.166637291775351 671:0.0979812391907998 867:0.141031938354542 1045:0.0833453470017258 1067:0.51195495043014 3217:0.278949303830184
+-1 27:0.143462378528378 33:0.272644062220547 59:0.305940407016504 63:0.106496982127145 75:0.099853991196685 142:0.0383292737227615 146:0.442426193095425 225:0.469471927785377 239:0.417716647060848 647:0.445051282557457
+-1 6:0.0318444744798563 15:0.0218204090893423 17:0.104114477458559 18:0.0681850327504158 38:0.207556617316601 41:0.0293264351288637 50:0.241813530671804 72:0.0792702668650394 111:0.0398295977127303 135:0.0580261321789654 138:0.160219390828158 142:0.00165154720417072 171:0.0550681515540663 185:0.0741752299772674 242:0.0446272768702056 246:0.131662668662589 271:0.0702906778053392 276:0.0494761086116474 296:0.0574320210109491 306:0.0499772207118465 309:0.0468707489301812 331:0.0497876157375672 367:0.0543598866073396 375:0.0451496689134001 382:0.0559399077081088 402:0.0485442839310977 411:0.0477153836246221 485:0.0440746589002692 495:0.140378745338584 504:0.0676550346813635 532:0.0736400826365672 575:0.199418081733194 591:0.334848246528484 613:0.0589039429434569 643:0.0518184048923165 670:0.0908623950483013 712:0.116970715943957 714:0.0659102287633952 738:0.0771741894789018 741:0.0771741894789018 747:0.0701893726692921 757:0.0605113432087416 906:0.074523488114418 953:0.0695935733589114 1068:0.0750490942622801 1093:0.16169824009995 1183:0.272587185144904 1215:0.0746534150105411 1296:0.0648368597672241 1448:0.0799434724787923 1473:0.0902150956020473 1480:0.0925940171957248 1639:0.0860007676712417 1651:0.0872958109341208 1707:0.0727991945840146 1820:0.0812249428578603 1851:0.0862522121104448 1956:0.0949274899028521 2154:0.0870290105299327 2206:0.0822014587314863 2347:0.118340163188523 2406:0.103308071216872 2575:0.0886945642166989 2640:0.0881215592092236 2643:0.277782051587174 2651:0.11179236255059 3119:0.206616142433743 3391:0.123905169854315 3795:0.109734093752034 4814:0.27203595431608 5281:0.1289324391069 5376:0.118340163188523 5559:0.13601797715804 7746:0.13601797715804
+-1 11:0.190094612767668 18:0.226445581723701 27:0.246351080757641 142:0.0438789044817533 166:0.315639183219913 280:0.443156331973896 406:0.39664495419886 720:0.421171835436369 998:0.468234620950866
+-1 6:0.0320452336441934 17:0.0349236176803932 18:0.17153724007176 21:0.0387711024123261 65:0.0458515641143359 119:0.0670568829727327 125:0.068708069710372 135:0.175175850145056 139:0.104863229630464 145:0.0537821059406553 162:0.104134274952153 166:0.0956412996639739 181:0.0540968392874485 183:0.0563827542580486 185:0.186607144101004 199:0.0299583002490585 215:0.0816597950949041 241:0.0846399842051721 256:0.0436155077583324 283:0.0960886254102431 288:0.13313219955905 294:0.0612469062793091 295:0.0544173084084907 325:0.0575508632807654 358:0.0848668938868844 382:0.112585146517328 409:0.032731227151463 411:0.048016198780123 414:0.047354606410441 424:0.0660103117841594 433:0.0518282269499917 459:0.0585446449846475 483:0.0622275230317112 502:0.0884776958517613 507:0.0342688415085251 569:0.0898498945271502 576:0.0627391302075915 634:0.072005593209528 651:0.0829229866891396 676:0.128174638781488 699:0.0955259473701771 706:0.0652456149436784 800:0.056518898858126 803:0.0800957483923224 809:0.0968291550574182 906:0.0749933113236783 912:0.0609513487953606 915:0.0794127399672109 991:0.0680815566588079 1034:0.0808063604826188 1067:0.0681697034916953 1080:0.0648022656717477 1093:0.0813588223466445 1098:0.0718960273950172 1099:0.0907838444195262 1160:0.0811727332414377 1190:0.0693577308951585 1237:0.0785946735672801 1406:0.108573105766266 1911:0.0867959774671779 1923:0.0951121575413856 1944:0.11484532608587 1992:0.0837605381396413 2039:0.119086222674738 2083:0.623431565846162 2146:0.197464237365808 2193:0.213794103644985 2213:0.0889630550386216 2398:0.093177763601293 2444:0.0907838444195262 2616:0.0850967697921578 3717:0.124686313169232 4049:0.132951447470758
+-1 6:0.0246023278104308 17:0.0670304279911903 27:0.0358180390769348 37:0.0582026591880908 72:0.0765530411040256 86:0.28668100103635 87:0.114597983081159 96:0.0762151789015953 97:0.0767573938101313 122:0.529612682583053 140:0.26077763694113 142:0.00956961287046301 197:0.137164876964594 199:0.0575002769174848 208:0.0921595919471043 264:0.101263885280354 276:0.0955603336787832 313:0.41848060458857 369:0.109999417781952 390:0.112367299568635 436:0.108654532612628 485:0.0851277359815797 499:0.183249362701453 507:0.0657736874255246 560:0.146535545590267 585:0.152420347647539 671:0.0751236374058054 829:0.0912552248622481 882:0.0923759526379046 903:0.136960935847513 982:0.137784199885428 1013:0.152420347647539 1058:0.137993192207575 1822:0.174864729047327 4088:0.21012037312857
+-1 6:0.00747700711963932 11:0.134396735314855 18:0.120072630414311 27:0.195941263548723 33:0.0413753243947997 41:0.103286661736651 51:0.0507814879525737 63:0.193938447660604 75:0.0303068494815506 76:0.0622052615688606 82:0.056082944622114 85:0.412391030184675 140:0.369852637293237 142:0.0911281515974398 146:0.469985261285107 153:0.129699999695968 169:0.054501611691895 194:0.0592399509901869 225:0.284980397492157 234:0.0536373578207609 239:0.380345604517952 446:0.0922584469803531 457:0.0515577045616947 541:0.0771012090766761 647:0.202617372681759 671:0.0456623435037934 764:0.0691525308482722 793:0.0897358204567184 1491:0.0858826712870182
+-1 11:0.210536963463782 59:0.29092553060274 142:0.0485975440082377 303:0.418611164095472 343:0.496416062958329 409:0.239274419458627 506:0.262111109117705 614:0.566618130469492
+-1 6:0.0300608656202143 17:0.0819025217383826 18:0.0804574867500455 27:0.0875300311228936 37:0.14223225786387 38:0.122457107623321 68:0.0922713922537811 72:0.0935379245077443 86:0.350287140079828 97:0.0937876171093836 100:0.0928793752853641 112:0.167348566341162 122:0.323559132383002 136:0.190365488756431 142:0.0194880506669303 197:0.335195512068392 208:0.112607113053794 239:0.127429753684707 276:0.233524760053219 291:0.12097819649409 377:0.231367316983756 390:0.137298320649437 431:0.167597756034196 448:0.272233111747813 485:0.104015093677859 507:0.160733894311121 560:0.179047502273594 746:0.221181185089299 1364:0.218519566865298 2972:0.256739945478217
+-1 6:0.0150745462367808 11:0.158059996211395 13:0.0667922690439439 18:0.0268978748967042 27:0.043893463280101 37:0.04754990036146 40:0.0313962205958357 46:0.042075073425307 52:0.0409668317829325 72:0.0625416351699613 75:0.0101837093481068 83:0.0130197007445241 92:0.066342848687423 100:0.0310506569099159 126:0.0477414609572168 128:0.108024837833249 142:0.0117271481621935 144:0.0298737776842245 151:0.039683369050004 159:0.030229270251353 185:0.029260909262387 194:0.0398116236428603 199:0.0469760742262136 242:0.035209454679863 252:0.0725277888275135 255:0.0467688785994058 275:0.0337900833029333 292:0.148649445645459 303:0.0448958686550885 304:0.0380481197377967 310:0.103142153591033 319:0.0455834650068004 351:0.0356596912359411 355:0.18145282507495 370:0.0594233847435754 375:0.178108024162069 391:0.0520010042139386 394:0.0468116298563241 402:0.0765996890202148 414:0.0371271648791208 426:0.0904707616280848 433:0.0406345923496171 455:0.0733775483833701 485:0.0347734572645526 493:0.0448586560297735 507:0.026867606455767 508:0.0779727823259735 518:0.0438209918870769 526:0.0603060713520499 546:0.0434134567201121 580:0.0454664577757497 597:0.08986636398257 633:0.0522528334855298 671:0.0306869267080448 728:0.069304412897719 755:0.0524447707288319 758:0.0526394177637805 780:0.0509792576438886 806:0.053940422568638 854:0.060420489181401 961:0.0858311539846331 987:0.0410229918170363 1027:0.0525093482207065 1059:0.0460616841359231 1138:0.0495498152151529 1190:0.0543781504225211 1227:0.0549070420388173 1467:0.0617460504792803 1491:0.173149801590246 1652:0.0601925952439048 1808:0.0505234386322998 1846:0.0660107458224158 2012:0.159067405760271 2298:0.0702088202973096 2535:0.0844512763881011 3360:0.0704445058537243 4763:0.0910632795991659 5975:0.097757106607122 7648:0.778960445653892
+-1 6:0.0105096119597397 18:0.140644147723789 27:0.214210286384727 36:0.0401495286660103 41:0.0967858501046391 57:0.0392311595725082 63:0.113582535786812 75:0.0212995134735609 76:0.131152709329178 79:0.0712711213638452 85:0.032202945150297 86:0.0408214228119284 122:0.0565599302817277 142:0.0872094542367497 144:0.0624818431615581 146:0.519048302564275 157:0.0532518190783663 162:0.313060572691364 225:0.200282903697398 232:0.373136484742112 234:0.0376960866976613 239:0.311855984518173 276:0.0408214228119284 314:0.083866205729642 347:0.0431676553674222 446:0.0648388093161602 541:0.216745490824601 582:0.0443217295409971 599:0.197083258971447 628:0.114202321276618 695:0.103744263439935 764:0.0972001569104204 856:0.157751833796442 867:0.0923829084613477 943:0.14110154897446 963:0.0445838864004976 1319:0.0554643479938751 1405:0.148868157376579 1511:0.0634279020235344
+-1 6:0.0088755788795825 11:0.0398839002811764 27:0.0516871140956863 33:0.0982291308429498 41:0.0408687994533932 51:0.0602801488260958 67:0.100411522114675 75:0.017987867930378 82:0.0665732412485441 85:0.163176212936072 97:0.0553822637111727 100:0.0548459403695454 140:0.188157194273366 142:0.0483329042465617 157:0.0899444665553572 225:0.169142944269286 264:0.146128546596753 283:0.0665342452896895 289:0.0772206964413563 292:0.175043395603293 317:0.0529003724210502 328:0.270139726795363 336:0.0811465442959313 518:0.0774026622027901 573:0.112669898635367 588:0.121653892623196 729:0.0955319995756709 1215:0.104035674065747 1605:0.144923435230714 3683:0.139684834019386 4052:0.321696975187416 6815:0.718711834390064
+-1 6:0.0330265084581927 11:0.0404754947516868 15:0.0102865273278307 17:0.06544187833297 18:0.128574528527746 20:0.0677457227431967 25:0.383068674238597 34:0.0239277053500381 36:0.0688200522700767 37:0.198881613826191 40:0.0187596337822459 41:0.0138250009496043 46:0.0502807633428693 47:0.0142106429190945 50:0.14249397670033 53:0.0231226248182017 56:0.13859292513868 63:0.0194691103719825 65:0.0214798228208138 67:0.0169834862676806 70:0.0345430086282716 72:0.0186847039176257 73:0.0326255790157197 74:0.049226493466725 75:0.00608489347729506 77:0.0679197667574604 78:0.0461320111763073 79:0.0407217922648507 83:0.0388971687175149 85:0.0183996213000797 86:0.023323913920432 91:0.0239905916519319 92:0.019820340184705 94:0.0180240318991918 96:0.0186022401104885 100:0.0556594654968229 106:0.0420321236573203 111:0.0187763778236686 112:0.033428776932771 113:0.0321447066025336 120:0.0500286646156311 122:0.129265356703948 131:0.0398648022824511 132:0.018209686303755 140:0.0212164570878465 141:0.0274260786009805 142:0.0163499406892993 144:0.017849955135129 145:0.0251949988806231 159:0.0180623663822499 160:0.0272133190286426 162:0.0162610648713348 164:0.0350708944496181 166:0.0448045385324642 176:0.0311256133839211 177:0.0313364052741186 178:0.0484615710087233 181:0.0253424402308912 185:0.122386310210695 186:0.0170375952670915 194:0.0237879421676545 197:0.167392769576481 204:0.0180240318991918 239:0.0254547792291201 242:0.0420761775100041 246:0.0931021710253602 276:0.023323913920432 286:0.0336465190415297 294:0.0286919916607866 296:0.135372359702969 299:0.0248550521797807 301:0.0544266380572853 306:0.047120294080328 309:0.0662871036613641 322:0.0260204544082161 324:0.0318118101771067 342:0.028047645215006 347:0.0246644680312911 348:0.0298280148974058 353:0.0336807251790676 355:0.0180700547314257 368:0.0365971366908889 372:0.0296378972550731 375:0.042568707233545 377:0.0231084334873125 384:0.0976081018301736 399:0.0283100261682263 402:0.0228846352615409 407:0.0433141654649288 430:0.0233676947083849 441:0.0635145049172221 458:0.0316103804467571 459:0.0274260786009805 465:0.02553053208974 478:0.0235451823393298 485:0.0623327245680115 505:0.0431940184569358 506:0.0167968554419306 507:0.0481611908838366 509:0.027868827469334 516:0.0420914717347357 517:0.0334785539152962 526:0.0360336305434325 550:0.0733843992345953 567:0.0325806848144561 572:0.0325360339433912 574:0.0224807276263543 577:0.0438238990963148 591:0.0631413576984457 597:0.026848137222584 607:0.0294520683484966 629:0.110011093266986 641:0.0475144061629052 643:0.0244281138738942 651:0.0388464624110504 654:0.0313749911317522 661:0.0400844970498553 671:0.0183358218288827 673:0.030357550759784 676:0.060045247841117 687:0.0675674046784579 689:0.0750440041642834 700:0.0371239504755959 706:0.0305652440848157 712:0.0275710336407286 726:0.0276691070078696 744:0.0370465971791536 751:0.0378548985075686 758:0.0314527093076341 800:0.0264770887743929 803:0.0375220020821417 822:0.0401965813032586 861:0.0400844970498553 862:0.0288898277849832 904:0.109791410072667 912:0.114214134073967 944:0.0328537948712583 953:0.0656152862457091 971:0.0748816764365721 981:0.0356349366677136 984:0.0688603133011463 986:0.026848137222584 1001:0.0351929420973548 1019:0.0863020602466421 1041:0.0428341423806309 1042:0.0342089872451011 1045:0.0155969188133471 1095:0.0423805563273636 1116:0.0350105420511622 1138:0.0296066332116903 1162:0.0348320932208995 1170:0.0399739173285618 1172:0.136724982562458 1183:0.0856682847612618 1189:0.0409031340023898 1216:0.0321447066025336 1225:0.0267814318739648 1246:0.0422347460511191 1250:0.0405422851259344 1251:0.0394422447613229 1261:0.0443672651581273 1277:0.0354425995528287 1288:0.0394422447613229 1296:0.0611304881696313 1313:0.0392388254003529 1321:0.139328372883598 1328:0.0447505000960316 1333:0.0426801553637211 1342:0.0859821253185856 1351:0.0797296045649021 1406:0.0508626285713929 1424:0.0279195234172842 1439:0.035379472304896 1441:0.039138968837806 1455:0.0398648022824511 1465:0.0475223804350259 1472:0.0305302628622157 1480:0.0873009194628402 1507:0.0411527914578637 1565:0.0451524366663579 1567:0.044001068624526 1594:0.052700899772822 1614:0.0379402678263851 1639:0.0810845702518689 1651:0.0411527914578637 1698:0.0434805966919751 1714:0.0462524770309694 1730:0.0423805563273636 1736:0.0429910626592928 1793:0.0475223804350259 1798:0.046491278259688 1820:0.0382908767194911 1824:0.0425289939566981 1855:0.0388464624110504 1865:0.0356349366677136 1878:0.0557876489681972 1890:0.049711260529561 1934:0.051285186092521 1951:0.0374408382182861 1979:0.0443672651581273 1989:0.0487012545643278 1995:0.0388464624110504 2056:0.0782779376756119 2060:0.0565728204764279 2086:0.0447505000960316 2099:0.0436504597314201 2154:0.0410270170217603 2204:0.0447505000960316 2207:0.0434805966919751 2222:0.0557876489681972 2246:0.0380265310810219 2308:0.0447505000960316 2314:0.049711260529561 2425:0.0475223804350259 2480:0.0500774570631622 2492:0.0574407873101581 2569:0.0451524366663579 2607:0.105401799545644 2643:0.0436504597314201 2672:0.0472522557254367 2825:0.0405422851259344 2891:0.0565728204764279 2919:0.0622830123814628 2973:0.0508626285713929 3152:0.0550708435414901 3169:0.0504606920010666 3239:0.058411091677857 3243:0.058411091677857 3273:0.0504606920010666 3306:0.0595111320424685 3398:0.052201470164723 3625:0.0595111320424685 3739:0.0462524770309694 3742:0.0538009401374335 4003:0.0550708435414901 4059:0.060781035446525 4200:0.060781035446525 4476:0.060781035446525 4831:0.060781035446525 4992:0.060781035446525 5006:0.060781035446525 5048:0.0544114464693628 5219:0.156604410494169 5259:0.0622830123814628 5319:0.058411091677857 5647:0.0622830123814628 5914:0.06649122735156 6142:0.0508626285713929 6314:0.113145640952856 6481:0.064121283582892 6827:0.069831475487927 6870:0.209494426463781 6955:0.06649122735156 7727:0.139662950975854 7952:0.128242567165784
+-1 6:0.0117195701411632 18:0.250938125671218 21:0.0708967609998704 27:0.272996620167357 37:0.055450862374726 47:0.110939301571881 126:0.222697011853482 140:0.662528485039286 142:0.0972497671479641 159:0.141008842639325 199:0.0547816884372268 298:0.116181035282829 301:0.212448277229865 304:0.0887405035619249 324:0.24834766610337 331:0.0916154944191015 496:0.0982746310757306 1544:0.153558915544948 3338:0.214962861084141 4454:0.22082565958973 5528:0.237251954737138
+-1 6:0.023962574990057 11:0.179466407083636 18:0.0855139961311486 25:0.0599473472735757 27:0.162804299873273 38:0.0650765829913672 51:0.108497530602764 82:0.119824393608036 87:0.14882400746525 100:0.049358281370948 138:0.0669795105795196 140:0.112887306691403 142:0.0745661362782304 162:0.129781410463016 175:0.0773190815652686 185:0.0930265789050958 237:0.0686410138860356 289:0.0694943114646539 291:0.192871964651751 301:0.289590130770434 343:0.0846312265286008 347:0.0656166426727207 351:0.0566848256618567 412:0.162816715564936 453:0.0774750702171656 501:0.0830613685594666 588:0.218963409926363 601:0.323572594333154 729:0.17194692198599 796:0.0702129434871936 829:0.11850966222088 1747:0.120122246252394 2619:0.412867772737529 2927:0.127170173637361 3180:0.165695938093223 3273:0.134244176353269 4052:0.289509300241668 5353:0.146508891161278 5698:0.155395191410047 5835:0.165695938093223 8137:0.176891352388497
+-1 6:0.00923800935213565 11:0.207562711568445 27:0.0806966029842742 37:0.0874188351674243 38:0.0752646260924044 75:0.149779158673765 76:0.0768559904959538 100:0.0570855509183834 128:0.0992999503757796 142:0.0383288059026344 146:0.331815594864622 173:0.0690491702804523 184:0.108857854618203 219:0.154484278408542 257:0.111940280974108 265:0.261812155483453 303:0.660315922737636 317:0.11012107306743 352:0.392567899371071 385:0.0966558894382441 483:0.0896948429382649 500:0.0956020345229438 530:0.0759419868219409 611:0.119525314598556 862:0.0888900955294183 987:0.0754193412071742
+-1 27:0.238120580632369 42:0.244636812288194 51:0.092569455593275 59:0.084633927613367 77:0.102776786668275 82:0.102233468554239 83:0.0353157220832842 106:0.19081013433553 120:0.227111442042811 123:0.13828038987155 125:0.146118226155043 137:0.223161449393242 142:0.0459473367397241 162:0.0738191578858705 181:0.11504520838086 186:0.232032947098209 207:0.322369888837085 234:0.195550828190252 298:0.135118134737625 351:0.0967263203644585 409:0.278431856485561 457:0.0939844190342025 704:0.187987069216657 805:0.17767629260377 829:0.101111747459903 989:0.329672804853001 1045:0.212412548906042 1051:0.219674093514098 5514:0.239242391063535
+-1 6:0.0346806016872953 29:0.0503812736878947 31:0.0264367768012148 37:0.0328180854429195 41:0.223568107986536 42:0.0829959857627895 63:0.0299848230160761 114:0.0487040463938994 142:0.00899318511157127 162:0.0375660579428615 168:0.10302871143445 202:0.172251370005121 255:0.193674229675845 264:0.0570985395817218 283:0.0519954290477798 286:0.194324156180852 314:0.0553499118155169 324:0.0734911467260142 337:0.0530277903507518 381:0.200024585108435 383:0.415438459119597 406:0.0650353793251954 415:0.0603467165721183 430:0.0539836831321998 448:0.062813947102509 454:0.0692067525479793 601:0.0936601535156317 607:0.0680397080308752 613:0.0641500359607259 653:0.07085586800528 667:0.0668070250830986 671:0.0423591290425281 695:0.0684690070667714 720:0.0690568978345313 758:0.0726615575092758 793:0.083244330158996 858:0.0695866344275625 1080:0.070131539346832 1196:0.0870633845218589 1229:0.0782874888334901 1232:0.0785314851278526 1292:0.083244330158996 1322:0.0779272613544996 1406:0.117502049660192 1565:0.104310453558295 1612:0.101241286825955 1730:0.0979068989172391 2285:0.280980460546895 3084:0.12297705671782 3313:0.125700473308253 3370:0.117502049660192 4179:0.13069364576209 5708:0.296263974531189 5736:0.124290091121034 5967:0.431655725591961
+-1 6:0.03028900455211 15:0.0345909549998522 31:0.0384818223981607 42:0.0604051849417812 63:0.0218232094370124 75:0.0204619372256503 142:0.00261812667148868 180:0.0778032651683517 186:0.0572930662027361 199:0.0943881496483368 245:0.116738452255281 283:0.0756854317444965 289:0.0878417080456528 347:0.0829402845659486 355:0.121529925530549 383:0.120943858787439 430:0.0785795682398181 502:0.0696905859742369 508:0.0783346285094032 599:0.0946666053735485 610:0.519975318669843 781:0.109410343271489 884:0.104235073949921 1027:0.10550605386746 1061:0.13095470644288 1182:0.151152024910446 1190:0.109261003270822 1407:0.123066790963841 2017:0.151836072085665 2380:0.156338253223269 2589:0.163769837126003 2708:0.471495765076552 2936:0.196421530738993 2979:0.312676506446539 3103:0.145654437178215 3751:0.162724335575528 4556:0.179007497443721
+-1 6:0.00527749409239344 18:0.141251391884956 27:0.169034767925047 48:0.193714823678253 51:0.0716861702508541 53:0.0812877132540239 56:0.0974448363564774 59:0.0327704322392658 68:0.0323983835774039 72:0.0656861782013909 75:0.0534786902495474 82:0.118755032939508 83:0.0957202456630117 114:0.0370575054373438 120:0.0439690106089936 123:0.107084907296425 125:0.0565772801069824 142:0.057478305379321 168:0.0391957888191289 186:0.0598957587859683 234:0.037858843050602 236:0.65510084650552 294:0.0504334263334351 298:0.104636043808417 317:0.0943650234171445 336:0.0965008398776272 409:0.107809392090318 434:0.0456667151213172 456:0.0571903021047086 457:0.0727819238066568 465:0.0448763621788256 502:0.0364282347221132 506:0.206673028176434 518:0.0460242760560047 535:0.0500459655696175 607:0.0517694531973274 609:0.149490957061368 659:0.0773429979801764 671:0.064459681321725 723:0.0541640289900018 778:0.0504334263334351 851:0.0599404049100434 944:0.057748847239417 1051:0.255174793344539 1306:0.0755676572493503 1380:0.0543558262589037 1581:0.0752918302029855 1606:0.0835325933868493 1988:0.0830577809443053 2513:0.193601849861525 3456:0.102672255172054 3726:0.218956268627245 4285:0.218956268627245 4423:0.116875135616244
+-1 6:0.0213805310701846 18:0.114449385258657 27:0.155637446842084 51:0.0726049315981247 82:0.240554098882227 83:0.0553983075683445 106:0.224486954085532 123:0.108457354357772 125:0.114604798604832 142:0.0693035387014024 173:0.159808014289397 236:0.442331270536246 286:0.0599002534093022 298:0.105977105163014 367:0.0912437136712001 532:0.123605751118459 609:0.151406898624906 637:0.18109952692159 667:0.205932078165047 704:0.29488751369083 865:0.475940149643996 910:0.171230075967625 960:0.123195504702332 986:0.095594448936337 1037:0.119560170089389 1045:0.166601374989904 1051:0.172296816819886 1312:0.139005425846967
+-1 6:0.0288078038952702 9:0.22037407071063 17:0.117732726723986 20:0.0406258136513246 37:0.0340758566626954 41:0.0331623541422421 47:0.034087402582453 57:0.0537680913376395 65:0.257620774816956 69:0.0730668986912016 83:0.0186607102428834 84:0.0422679125428076 94:0.0432346681993665 117:0.0743533077537821 138:0.181176203508904 142:0.0149405662233891 150:0.0628071910565542 151:0.0568768718908524 175:0.0697147407995244 176:0.0373308695491138 199:0.100993900706847 205:0.0569869604268525 214:0.0617024092253746 218:0.0408522087425527 220:0.0577752466411498 242:0.0504645570956919 248:0.175224609950513 254:0.139011258837018 261:0.198041084340099 262:0.0674028270648469 284:0.087472761636527 329:0.0966930503178107 338:0.0943655584655719 348:0.071549159164156 357:0.0666685937095334 364:0.0667287485234238 379:0.0879620635059085 398:0.0560175695034636 416:0.280273014583868 431:0.0803057927559113 433:0.058240229061548 434:0.0623192442627371 503:0.0978225486514033 526:0.0864347150114463 561:0.0638207896965977 657:0.0748014185905701 661:0.0961516235424932 674:0.0953663212226678 727:0.0771062619118447 728:0.0993317429497307 796:0.0633074922372088 806:0.0773110392998387 856:0.0540515186185773 902:0.0993317429497307 1011:0.0864347150114463 1027:0.0752599273528914 1041:0.102747262310052 1046:0.161827733226604 1061:0.0934130443907166 1108:0.125216891243525 1200:0.102747262310052 1204:0.110946901837344 1218:0.0876123049752564 1286:0.13381914247893 1395:0.0769035848417677 1603:0.104297927433889 1652:0.0862720734258109 1668:0.116820841960228 1726:0.291749191623848 1849:0.0890500910139908 2088:0.116820841960228 2399:0.10470538189196 2547:0.113993048927335 3242:0.127690220223396 3943:0.142750748690152 4785:0.110946901837344 4932:0.135702551797545 4972:0.159494067076204 5257:0.167506398650354 5375:0.149399723093606 7568:0.145796895780143
+-1 2:0.115103063441024 6:0.014097897450312 15:0.0483006698477617 41:0.129831338649182 65:0.201718188732084 142:0.0219347407979458 229:0.0738288047270003 286:0.0789940742856159 351:0.100048119974743 370:0.166720398300545 406:0.132186591893044 452:0.198999059050198 598:0.297984231760292 601:0.190367406446636 709:0.12294576037472 720:0.140360463276584 948:0.225811421005068 1244:0.198999059050198 1624:0.178554614659001 2683:0.199696051990476 5665:0.62442274593314 6648:0.327895599265931
+-1 6:0.0264610133839141 10:0.0743952541143799 14:0.0894861309672837 17:0.0480630143584049 22:0.0940618156584921 52:0.14382175981653 63:0.114390864711171 75:0.107255474941191 98:0.0572147291378364 116:0.0944331999227426 142:0.0274469046122092 229:0.138572790509006 279:0.0998647936659073 286:0.0988451535315211 310:0.36209990851451 375:0.125056336346253 402:0.0672293999610436 448:0.0798775402823559 457:0.060820641584762 522:0.24566774290289 563:0.270393133027169 619:0.387792779845128 658:0.0815765816022536 824:0.098646856199319 954:0.120527231701168 1115:0.124075240967271 1223:0.108385555523361 1305:0.240665414917867 1319:0.0930984486847692 1726:0.238206418491338 1840:0.156384135290089 1845:0.139609003370767 1896:0.319694751988929 3091:0.32356904310072
+-1 6:0.0107105639936379 9:0.327734886764099 12:0.0722022283332651 19:0.0650190983847564 27:0.0467798904172169 34:0.128036759471533 35:0.116225807252336 48:0.0655233645362311 51:0.072742792364016 75:0.0542669422443586 82:0.120505429053767 83:0.111006993493705 84:0.0314298989130206 98:0.0347380129920866 119:0.168094507657807 124:0.185760676803128 142:0.0374949706588258 145:0.0449393421332083 162:0.0580084612161044 168:0.0397735172298417 173:0.0800557272466296 176:0.0555175491609868 179:0.0291926878159772 196:0.0497989708588718 203:0.0811971458935609 214:0.18352460464465 217:0.266004140987969 218:0.030377199012411 242:0.0375248227979464 286:0.0600139907909143 317:0.0319186405636219 331:0.0418638910798469 351:0.0380046668380659 363:0.100054993478676 369:0.0478879808648433 396:0.0543935147065879 423:0.0405743455415593 459:0.048918832481855 485:0.0741203085244361 494:0.0907216975080728 518:0.0934053066339171 552:0.625113589976194 609:0.0379235967403475 720:0.0533178698951046 723:0.109924765143143 771:0.0568144145812247 778:0.102353584998084 808:0.11178706095689 829:0.0397277417475323 944:0.0586000394399385 963:0.045436365320327 1263:0.0727396417415654 1269:0.0547068297313686 1471:0.248096279905084 1835:0.072105273390983 2267:0.0940005505394251 2640:0.0740969677272094 3027:0.0914753969665611 4984:0.114370646119306 6323:0.106147697654706
+-1 6:0.00663654465890766 11:0.0894672749727951 17:0.144653118126691 18:0.0355252380757186 25:0.0996161508174838 27:0.0193240263897138 37:0.0314006503730253 46:0.111140899139993 48:0.0405999847631632 72:0.0413007809648532 74:0.0544052673593378 83:0.034391413477836 85:0.040670632646953 132:0.0402507991984087 140:0.140690949810892 142:0.0189304795437541 144:0.0394556472780383 151:0.05241161759291 234:0.0476081826414606 237:0.0570313275108867 252:0.0478953630184101 292:0.0654426786088538 295:0.0563489256281236 299:0.0549397555600957 342:0.0619966822440327 364:0.0614900491851001 367:0.113288669703427 461:0.0726202241054551 475:0.0537766547335495 480:0.0976255494576151 496:0.166952534124352 502:0.0458091666889641 646:0.604064510282657 651:0.0858664521723965 657:0.137857910122047 688:0.147346175602071 698:0.074561530793014 724:0.0776553020715983 853:0.0702270914362143 1005:0.139919910135524 1019:0.095381294313682 1078:0.0842467656648649 1215:0.155581378166822 1327:0.172589860080759 1436:0.0891019320977139 1662:0.183066935759378 1849:0.0820590015181507 2311:0.0984882944117406 2626:0.103868540897783 2787:0.125048899750391 3000:0.111538614519068 3475:0.10764954351658 6076:0.129112225376472 6170:0.146972605455125 7205:0.29394521091025 7227:0.268701526431562
+-1 18:0.0587459620033744 51:0.0745350714340929 72:0.0682966319352915 76:0.091302437198012 91:0.0876907985904049 92:0.144895255969256 111:0.0686317198792421 144:0.0652454446856595 157:0.111214344529002 162:0.0594377072973481 185:0.0639069171937815 224:0.104369337494551 293:0.103871608635139 295:0.186361697946975 384:0.118926237454037 398:0.0853605383090743 424:0.226063988570697 439:0.236564215715727 481:0.12647055153461 502:0.151503759664062 625:0.12200855320818 729:0.11812320558724 863:0.115982371563338 882:0.0824130086277021 974:0.140959708135029 990:0.147763689798366 1145:0.144169930925405 1736:0.157141627498793 2478:0.183043930927472 3458:0.189086508930141 4189:0.341669203839518 5181:0.611747750177948
+-1 6:0.0115697225831872 11:0.0519904862600261 13:0.0768946552090436 21:0.0699902681527543 25:0.260496528464465 59:0.0718418255523786 77:0.0872424592225834 91:0.184894470093811 92:0.152754519300694 118:0.0757601234875827 132:0.140341278304247 157:0.117246721600562 186:0.0656540112533666 220:0.0928142357874171 242:0.0810698278845791 258:0.109714559203915 275:0.233405168794711 283:0.0867304285982127 292:0.114088531836948 295:0.196470142486871 299:0.0957784153181673 306:0.0907885258839086 308:0.085485358803757 309:0.0851453150422442 327:0.0973002636391134 348:0.114941621457719 377:0.0890478573084851 411:0.0866796768520139 424:0.357488887482711 429:0.264069075391589 496:0.0970180821323553 508:0.0897662304106014 517:0.129008895976463 626:0.109194986059297 951:0.150821184576779 963:0.0981621775019107 1042:0.131823605288608 1055:0.126246701499265 1067:0.123061133948068 1068:0.136334044589635 1083:0.124033002006108 1159:0.235295438129788 1237:0.141880471178021 1321:0.134224730923171 1497:0.140469340618743 1538:0.147209884816498 1808:0.116330301372153 3222:0.207320779361825 3714:0.209673352536524
+-1 111:0.180955952112723 142:0.00750339732139192 277:0.262041755277887 290:0.300897020186888 401:0.441342926700814 1929:0.400358566595968 4060:0.672995678560815
+-1 6:0.00883456763388141 46:0.221926131927274 47:0.0418147061362728 76:0.0734995408884795 91:0.0705921291297054 92:0.0583211966596379 106:0.0618395982863218 158:0.0634105142884743 168:0.0656140663018503 199:0.0412960992397682 224:0.0840185500420719 275:0.118817815782427 284:0.053651019814611 290:0.183739338181938 295:0.0750116845654061 307:0.169680677394711 309:0.130032857579828 353:0.0991052715797195 382:0.07759664842216 424:0.0909920911274782 430:0.0687592597235928 439:0.0952184945952774 481:0.101810288519976 493:0.157738809952274 502:0.0609811584439806 625:0.0982183271386329 631:0.0592920862496112 668:0.3823547838262 819:0.0887307502036902 882:0.0663434458407458 913:0.0922071285137827 1054:0.115459938201925 1067:0.0939687104119698 1215:0.207109916173382 1449:0.113203385041083 2479:0.149662888522338 2565:0.142388220040094 3458:0.152216874172044 4060:0.410957145741309 5181:0.49246416807172
+-1 6:0.0335903442462883 11:0.0754719189872361 18:0.0899040869703985 53:0.194018379513565 78:0.0645144320948313 79:0.0569483799830474 94:0.100824581663388 96:0.0520295094802293 106:0.0587808447615313 118:0.0549885403429479 135:0.0765092605157064 148:0.0738175136621993 203:0.0636623823918354 290:0.261976641510168 295:0.071301404082946 306:0.0658965203384645 351:0.0595948935468956 353:0.18840651444094 424:0.0864913765824778 442:0.0714608610924245 499:0.0625490525071879 502:0.0579648656719496 515:0.0606713351664239 564:0.104052185367782 678:0.0908774017213302 791:0.111804992208204 798:0.394291784102581 863:0.0887489868619775 876:0.0810446373389113 882:0.0630619198535853 890:0.0881910553432341 1011:0.100784212591123 1142:0.139039840666212 1206:0.129365800993508 1215:0.0984328502167362 1360:0.124092960280363 1465:0.132917655544782 1595:0.105176381296446 1682:0.2354553660905 3178:0.15403031888136 4060:0.585945143327484 5368:0.170001432150102
+-1 6:0.0178550731911507 11:0.0802347619609524 17:0.0648628702692341 25:0.0893363316445878 33:0.0329347216765517 37:0.0844808465061065 51:0.0404220195612384 63:0.0128645694213322 74:0.0487909537574023 75:0.0120621127105105 79:0.16144599733929 80:0.038752050279181 81:0.036237321649594 83:0.0154212077809117 91:0.0475566616863886 92:0.0392899527593454 94:0.214374734818726 132:0.0360971460615564 142:0.00463008052272331 175:0.0576122499770268 176:0.0308502242661712 208:0.0445897172051193 216:0.155345494140535 218:0.033760258378608 317:0.0354733677743473 337:0.0455016652832236 408:0.105138351415262 411:0.0445897172051193 448:0.0538988929629415 475:0.0482272103728954 478:0.046673724729322 551:0.0879494365827967 571:0.0469728238547419 603:0.063720601771062 628:0.0646738373977609 657:0.123631759282265 696:0.0656861835200441 749:0.0692827939956375 804:0.0560663331516666 845:0.241806402097296 867:0.0523173008514383 871:0.0683625304949205 888:0.35641058630679 1114:0.0728382959391709 1193:0.0725466746944097 1225:0.0530889572706576 1410:0.164175471065158 1535:0.176649727187267 1576:0.0659735285711814 1690:0.0777833065399029 1877:0.0965407239896862 1921:0.179838669070499 1988:0.093668366835478 2067:0.0742191481658793 2247:0.0978478498801653 2402:0.082087735532579 2438:0.104469239334602 2566:0.100825225761174 2917:0.227730280998636 3045:0.213299708956493 3274:0.323580192079442 4029:0.107860064026481 4364:0.113865140499318 5497:0.115788579371396 5529:0.240973059907509 5824:0.115788579371396 6108:0.227730280998636 6988:0.235938389030082
+-1 6:0.0516232155397211 10:0.0256127461441753 11:0.0955201740243617 18:0.0812757735228096 34:0.0242006597508065 37:0.0143678820265601 40:0.0569209008016908 46:0.0762815088954819 47:0.0143727502948654 48:0.0185771881928402 50:0.0576477885566833 51:0.0206240407980239 53:0.0701591858790538 56:0.0280347837461551 57:0.0453419910043375 58:0.0407403006294899 74:0.0497880428434652 78:0.163303911268597 83:0.0236045320259042 85:0.0186095142895184 86:0.0235899805931275 91:0.0485285268516579 92:0.0200464399715002 94:0.0729185614665434 96:0.0376288889328053 98:0.0196978470005911 100:0.0187647995868552 106:0.021255801765233 109:0.0334179460223381 111:0.0189905686490104 112:0.033810114451042 114:0.0213228158608087 118:0.0198844626617913 128:0.0326412487540015 132:0.0184174126168514 136:0.0384603173071843 138:0.0254639557444176 139:0.0745276078134744 142:0.00708705086746951 158:0.0217957645084737 160:0.0825712618324195 161:0.0296345927907704 166:0.0226578223121244 176:0.0157403388252234 177:0.0633877482824414 185:0.0353664078432106 186:0.0172319509956761 190:0.0260361742037467 194:0.0481186044503303 199:0.0141944922580789 203:0.0920840784451539 204:0.0364592807332717 215:0.0386910912713532 218:0.017225090525163 219:0.025390545216957 227:0.021584815495143 240:0.0273370337276023 242:0.0212780799629105 246:0.0313880768490621 249:0.0346545875853703 252:0.0219153080363885 258:0.086389050948526 275:0.0408406265311701 280:0.0318115049086336 286:0.0510455106671016 288:0.0630791453530924 290:0.0947336429350865 292:0.029944369768909 295:0.0257833741062825 303:0.0271318568246288 306:0.023828908533307 331:0.0237385057552972 341:0.0761168796094736 353:0.0681298735750051 355:0.0731047528104047 357:0.0281104154996606 359:0.067620228902084 367:0.0518370868726677 376:0.0387276784586034 384:0.0329071875295157 389:0.0258796993521455 390:0.0554778811266285 394:0.0282896060826157 396:0.0308433050203202 404:0.0255009049888612 414:0.0224370070561163 423:0.0230072817005629 424:0.031276235693748 432:0.0285258057378705 454:0.0302989782198046 459:0.0277389405633142 478:0.071441319369629 484:0.0335628547351085 500:0.0314256933507309 506:0.0509653948199838 507:0.0324737252408957 510:0.0549064851967098 526:0.0728893656630127 540:0.0343277989966052 556:0.037547440547376 574:0.0454743513660903 591:0.0319308201833406 597:0.0271544063403339 599:0.0284727352338159 609:0.0215042007864311 613:0.0280851285577403 614:0.0367247778098698 615:0.0806391170367061 616:0.0418826378547584 656:0.0599519809113866 661:0.0405417594455713 681:0.0332285733032418 706:0.0309139159595927 716:0.0290759752482243 719:0.0326849866022975 758:0.0636230098172672 761:0.0308785356900088 763:0.0351701359840259 768:0.0379500329126845 780:0.0308082226907326 800:0.0267791251708957 803:0.0379500329126845 839:0.0966939186474683 858:0.0304652919445761 863:0.0641852249404223 867:0.0266932270805496 885:0.0425716286188473 906:0.0355324557181813 909:0.0267360654318171 928:0.0489423583391238 930:0.0265870849958869 944:0.0332285733032418 973:0.0829900623573655 984:0.034822917370393 1000:0.0368684372474346 1015:0.0379500329126845 1020:0.0776374798440271 1021:0.0325113961367039 1027:0.0317329001655771 1028:0.0738824132534615 1042:0.0345992249832285 1044:0.0443238185805351 1059:0.0278363924457779 1095:0.0428640109331161 1104:0.493607213773356 1106:0.0389108076098036 1116:0.0354099234956572 1145:0.0797843613763227 1162:0.0352294390170605 1164:0.096648157115727 1167:0.0388187399220135 1169:0.102664970735827 1184:0.119990962850488 1225:0.0270869400529538 1236:0.0334659694461623 1239:0.0406551222958887 1249:0.0458784604063789 1268:0.0411246572718679 1269:0.0620419344181471 1283:0.0376264178303251 1318:0.0402106413992042 1360:0.0448733830703051 1366:0.0329071875295157 1377:0.0289629966905513 1393:0.0347664287406844 1439:0.0357830623074145 1468:0.0425716286188473 1474:0.0467801004268342 1482:0.0359760911944432 1500:0.0346545875853703 1502:0.0434814815931144 1510:0.0465453795258592 1578:0.084858394199565 1591:0.0360414408703633 1593:0.0460948892232399 1652:0.0363761059755185 1682:0.0425716286188473 1728:0.0492568122980012 1739:0.0489423583391238 1748:0.0483469593237341 1771:0.0433227712522629 1792:0.0358469096770588 1918:0.0439765999669021 1956:0.0452609897463807 1985:0.0427165373316176 2050:0.0781961047308364 2093:0.0514428420979351 2200:0.0438082701818795 2207:0.0439765999669021 2253:0.0450649326779748 2285:0.0410047697219474 2307:0.0851432572376945 2308:0.0452609897463807 2335:0.0897467661406101 2479:0.10288568419587 2520:0.0564240444800788 2605:0.0441484007125946 2710:0.177232242041972 2803:0.313924261384476 2845:0.0499237314174815 2932:0.0518702199281268 3083:0.0572181728028219 3536:0.0572181728028219 3543:0.0564240444800788 3728:0.0523207102307461 3875:0.0672497235321421 3934:0.0580960409356329 4060:0.282512301695058 4193:0.0590774140139906 4212:0.0499237314174815 4386:0.0648527447188775 4393:0.0564240444800788 4418:0.0556990621223684 4499:0.0672497235321421 4821:0.0590774140139906 4867:0.0518702199281268 6078:0.129705489437755 6328:0.0601900030477767 6553:0.0706280754237644 7748:0.0648527447188775
+-1 6:0.0355731922562082 18:0.0476055759799224 25:0.0667452843871365 86:0.138173352871979 111:0.0556166320870929 148:0.234524950336363 157:0.270372094420476 185:0.0517878250412586 216:0.309499438620941 246:0.183849062584722 276:0.138173352871979 284:0.108015362024474 309:0.0654486449423316 333:0.26915704963153 380:0.437128406439525 398:0.0691730538334924 441:0.0627111165129719 475:0.0720633769549272 625:0.0988712628387765 721:0.235525379994569 876:0.0858287263819971 1283:0.220388833625945 1288:0.116830031658947 1296:0.181071764840024 1911:0.240879035848824 1932:0.114783190135767 2013:0.139963700488285 2728:0.163122774410303 2729:0.163122774410303 3110:0.151909455232113 4978:0.153228781360922 5373:0.19695056007924
+-1 6:0.0116251705410977 11:0.208958603783878 27:0.101549125576774 37:0.110008425905141 38:0.18942698165463 74:0.0953011761229402 75:0.141362294357451 100:0.0718368253984613 128:0.124959697900079 142:0.0422040644511557 146:0.104389721082206 173:0.0868919211524699 184:0.136987426233993 219:0.0972020060795097 234:0.0833947891265755 257:0.140866371437647 265:0.109822034928766 303:0.623209361472395 352:0.494009976087991 419:0.141421121934704 431:0.129627171806566 499:0.0865895743429878 530:0.0955658859374026 669:0.175635392987195 698:0.130608706160167 714:0.120306216744433 862:0.111859869432267
+-1 6:0.0248611853379225 18:0.066540615136886 94:0.0746231891216471 132:0.0753918364376568 148:0.327806861677523 157:0.377912148067996 185:0.0723863468493715 204:0.0746231891216471 275:0.083590727413908 291:0.100052387142994 353:0.139445110774825 382:0.109181611255455 430:0.0967470492348001 534:0.0947470840405276 591:0.130709086160127 616:0.17144693711398 720:0.247521128872916 780:0.252227447400448 1044:0.181439931342937 1104:0.367379156586341 1249:0.187803870984813 1382:0.162875285256599 2366:0.377379648404111 2426:0.189599405602529 2459:0.179329529553298 4611:0.210581715142067
+-1 6:0.0138437937363633 11:0.0622094058748608 27:0.0806196143459003 33:0.153214099580625 37:0.131003149769619 38:0.225578459503698 41:0.0637456145184063 72:0.0861531899827913 75:0.0561135981694553 118:0.0906510519558708 142:0.0323090760523977 154:0.100074482148756 162:0.149956094285343 199:0.129422220460284 225:0.131911397791292 239:0.117369289904973 276:0.107544095747415 289:0.120445934650152 317:0.0825120089979158 349:0.274478717079123 400:0.243969543612802 409:0.141401483432472 441:0.097619550781937 480:0.10182316548389 558:0.153681634624364 655:0.104825109844035 705:0.474721462886122 732:0.302970734101826 827:0.118248608044225 966:0.414840313174072 1045:0.0719157400404347 1475:0.207255156117182
+-1 6:0.0366404545115266 11:0.109766679546311 18:0.0653784429812389 27:0.142250954636262 38:0.29851995203147 41:0.0562386374128045 51:0.0829501594948178 53:0.282181155268647 59:0.151678493714976 74:0.10012407692667 83:0.0632918225716756 100:0.0754722672371299 138:0.204832720324216 139:0.399668006571391 142:0.0285042104775515 168:0.0907091820554663 190:0.104717830224744 286:0.0684352352479864 319:0.110795963594862 328:0.123911071112359 347:0.200664879466962 348:0.121337200675342 363:0.114094845655316 385:0.127787837734197 386:0.0972717175586281 423:0.0925355853052211 465:0.103855496457811 495:0.134600563022249 498:0.125496860916583 506:0.068327826256031 507:0.0653048719817624 549:0.130417545301825 558:0.135583377647902 574:0.0914492154006505 609:0.0864901743800836 808:0.127473172729315 829:0.0906047845355163 1319:0.128913032340691 1379:0.128913032340691 1442:0.183675322934181 1471:0.141454742933253 1495:0.183675322934181 1718:0.173618344835715 1806:0.167924760215597 2554:0.185394242108465 3160:0.203709783499948
+-1 6:0.028811238850013 11:0.258936254831668 17:0.0523318954735654 27:0.16778283533758 38:0.234733159130639 47:0.0454552894139378 51:0.130451267033276 63:0.0207584801435748 83:0.0248839137188041 86:0.22381716229625 106:0.201670926122426 118:0.125773284387368 138:0.241597075209685 139:0.0785670548547266 142:0.0647501733275508 162:0.0520139316787816 179:0.0523518961802313 211:0.191025973513813 234:0.13778763817575 308:0.0709593243043178 328:0.194868295908068 404:0.0806492141591103 408:0.0565509892247884 465:0.0816639846372909 498:0.0986810912418428 521:0.0947021249405542 561:0.0851045326574174 607:0.0942077215113993 631:0.0644543317283843 847:0.102416237741301 960:0.221348733859811 1037:0.107408514349992 1045:0.299337248566187 1055:0.10479432688119 1120:0.154785202363133 1223:0.118012189585045 1511:0.115921592662401 1808:0.289688890483648 1948:0.144428164728284 2040:0.261672016474 2171:0.265759479646254 4156:0.156813197352933
+-1 6:0.0245642787087436 11:0.220767401380954 17:0.133853522140606 27:0.17881322073789 51:0.250249318347292 63:0.0265478219005738 82:0.276374703232414 83:0.0954713984396199 86:0.0954125434013177 106:0.343886693835762 114:0.258728160338175 123:0.124607600798678 125:0.131670453135484 139:0.200957311432214 142:0.0541439394330792 199:0.057411348995691 234:0.264322940775802 298:0.121758020856665 317:0.146408421307179 328:0.498430403194711 446:0.151548752635838 518:0.107110792036446 532:0.14201172601889 622:0.13555254313657 829:0.0911140927158503 1067:0.130638741369096 1281:0.158911570048933
+-1 6:0.0139377091336643 11:0.125262860885364 63:0.120505331882858 77:0.105098459535835 85:0.0854142444976247 86:0.108273667906018 118:0.182532045605806 120:0.232241768549371 142:0.0578280155115988 186:0.0790914825941894 192:0.112559027184957 199:0.195450318593334 237:0.239548167068109 242:0.0976624696441275 276:0.108273667906018 296:0.125684411013825 304:0.422144946315669 339:0.108409039849412 349:0.138170381431698 409:0.0711803709547382 436:0.36932975203273 586:0.204911703979024 657:0.144760832014968 761:0.141726793946501 847:0.148634469309031 856:0.104604203427289 1067:0.148248177801561 1271:0.177752914193557 1710:0.388198912992405 1746:0.162805196064393
+-1 4:0.0110019593273792 6:0.0381525877529946 18:0.0136153157281997 27:0.00740607902120849 29:0.0369500695291031 30:0.0152886116981871 37:0.0120345363481678 51:0.017274694222231 57:0.0569676697474916 59:0.0157938189327924 63:0.0109955665484502 68:0.0156145088414047 75:0.0103096931330945 86:0.0197589650566288 98:0.0164989144030449 108:0.541541458842034 123:0.0516099276300693 138:0.149300245008616 142:0.00197870433299801 151:0.0200871481798986 162:0.0551025550295511 165:0.0740871812475941 166:0.0189781893866839 173:0.0190113434469689 174:0.0186445153308106 179:0.0277302940487898 186:0.028866960380654 196:0.212869418286152 199:0.0118893050978464 209:0.0798892891158077 214:0.0217913783927028 226:0.0197220720197091 228:0.0192364893127001 229:0.0133200001913914 231:0.13633804265921 237:0.0218576868873912 241:0.0335903768680541 243:0.0239829738575828 254:0.0245472338940506 276:0.0197589650566288 278:0.0219583460828403 281:0.029360205667967 291:0.020472381229262 314:0.0202970562304827 323:0.021758458913906 332:0.0326696655525542 337:0.0194455240708391 345:0.0186655678854323 347:0.0626838656196165 351:0.0180504205931504 364:0.023566525634909 369:0.022744527656308 377:0.0978820988936284 381:0.0733498955690607 396:0.0258343487702994 433:0.0205686436735757 436:0.0224664463851064 462:0.0312549588201025 480:0.0374157289578564 485:0.0176018217586385 490:0.13161078584743 499:0.0378903841675411 502:0.0175567090187153 506:0.0284590725956688 508:0.118406088248749 523:0.0298138689550059 530:0.0209091461584996 531:0.0286200247643519 534:0.0193868280430572 549:0.0271599624403824 571:0.0200742362121732 572:0.0275630565248137 574:0.0190446557611245 601:0.377801494910861 631:0.0170704186663372 636:0.0260133051540699 640:0.0712165599538362 645:0.0647257011645358 663:0.0238045892818064 664:0.0862588815832903 674:0.235763000576645 678:0.0275254342419772 707:0.0377463824757383 714:0.0263221571694859 727:0.0272315416992966 764:0.023524100479548 767:0.0243302552809366 780:0.0258049638150347 803:0.0317869432431031 804:0.0239604248345256 822:0.0340527258022189 824:0.0284466266132461 884:0.0262592836220312 908:0.0541079030855873 914:0.0325916880199258 942:0.0329089661354476 944:0.0278322492122635 950:0.0277156072230395 988:0.037585940546182 1009:0.0906771301758068 1033:0.0304686222198882 1076:0.0697255676017863 1157:0.0697255676017863 1167:0.0325145721351244 1168:0.0330731835136029 1202:0.0945476498609883 1213:0.0323628505822679 1228:0.0313192810870868 1244:0.0718057813460974 1245:0.0248730593671196 1319:0.0268466417485929 1335:0.0273403062367478 1340:0.0341489882465326 1374:0.0339577730917112 1388:0.0987268984063429 1433:0.0245227893276763 1441:0.0331567643516826 1476:0.0327485242058913 1493:0.0339577730917112 1539:0.0418161117462691 1587:0.0409941137676681 1613:0.0291676716212273 1691:0.0713159825598705 1775:0.0825150007355812 1778:0.0393853083879916 1783:0.0368347951209638 1865:0.0301883067659467 2000:0.040495407620226 2008:0.045096227859953 2019:0.0514909444268505 2034:0.0342465970623302 2099:0.0369786954059784 2112:0.0819882275353363 2223:0.0322882090518851 2270:0.0374291043602165 2273:0.0430885186791082 2303:0.0353060385601789 2423:0.0328282841204894 2723:0.0331567643516826 2809:0.0427480161941842 2837:0.076502204677635 2868:0.040495407620226 3038:0.0418161117462691 3069:0.0434464903009753 3071:0.0427480161941842 3101:0.0387951894320019 3223:0.0442227247282823 3282:0.0543206515862963 3463:0.0412575003677906 3482:0.0387951894320019 3553:0.0407403070133394 3586:0.0421131317443302 3989:0.0427480161941842 4069:0.043823820927114 4317:0.0442227247282823 4783:0.0563283607671412 4800:0.0514909444268505 5178:0.043823820927114 5205:0.0504151396939207 5298:0.0527633513596895 6271:0.369343459517827 6806:0.0563283607671412
+-1 6:0.0163480083768758 12:0.110205460172074 18:0.0437552159671556 27:0.0238007398074232 29:0.0296863896607761 43:0.0746669814657181 53:0.125901819495091 56:0.150926649386027 59:0.0507562198443309 72:0.0508687538385424 78:0.12559352992427 83:0.0635380847102749 92:0.053960502146402 108:0.227000725025817 118:0.0535244957043285 132:0.0991510546965622 138:0.0685432346369731 142:0.00635891500085855 160:0.0740877475447653 208:0.0612391556103868 215:0.0520738524287274 218:0.0463660647764116 299:0.0676674105488341 304:0.309467514193003 382:0.0717947222203577 389:0.069662322807693 416:0.0795254231611453 439:0.088098977323308 546:0.0706213848478424 674:0.324713974842624 684:0.0765002417738718 701:0.352433595774367 829:0.0606382124478974 881:0.0931333222570007 916:0.0990473478277808 952:0.0761492490393351 1076:0.224075396395678 1143:0.0970154426526397 1225:0.0729119429157922 1296:0.0832133002599391 1583:0.121304650599033 1650:0.135337968748675 1690:0.106826961722481 1812:0.137378281788205 1863:0.0984746874923352 2569:0.245853313610676 3395:0.138472546516443 3494:0.140835569842887 4656:0.151880821612443 5071:0.18102111178644 5470:0.174568984596678 6531:0.174568984596678 8298:0.18102111178644 8440:0.205660764018888
+-1 6:0.0170559148826536 9:0.130474416100892 13:0.113356969862207 17:0.0929396017462108 80:0.111052751900945 105:0.181180335326029 142:0.0176913885370216 151:0.134697818589531 160:0.309183672246816 217:0.282396830507346 265:0.161125832379227 506:0.0954185970896995 586:0.125377726999777 672:0.23831078777297 709:0.297484420144926 765:0.625686474404921 784:0.334967776727367 867:0.149927041013962
+-1 17:0.15080103878021 34:0.220551299218723 372:0.273184438294121 451:0.314318875824856 670:0.394819545575559 718:0.454977010517459 1320:0.389294668146368 1336:0.490666063402373
+-1 33:0.0636535558144631 41:0.158900585890507 63:0.0248635951969441 100:0.0710815436632797 131:0.152731525111203 142:0.0357945747194162 204:0.138108693534315 331:0.0899220706054427 351:0.0816326014280606 457:0.0793185617995036 899:0.632968441458059 1434:0.245663865690717 1861:0.223786764378276 3284:0.360065123506785 6688:0.509487366221806
+-1 6:0.0403793936945034 15:0.0461144831552605 42:0.080528389097672 59:0.0417890941471505 63:0.0145466643517233 72:0.167526986826581 75:0.0136392831524929 78:0.0517024303856281 108:0.0622987993633705 118:0.0440682973835918 138:0.0564336685076169 142:0.00349032162573189 165:0.0653427817854423 172:0.0527765046342193 186:0.038189754176064 196:0.062581586151328 200:0.325073935404727 204:0.040400850982838 214:0.0576581235433877 231:0.0721477601429821 276:0.0522805316760544 320:0.0638800236353352 341:0.0562305243645804 373:0.048042971249724 385:0.0704139110448973 414:0.0497252913575895 416:0.0654756285193345 422:0.122736965393281 442:0.0572693593659352 508:0.104430794318512 530:0.165971437510887 535:0.0638189802198549 613:0.0622427579960268 621:0.0937219822686975 647:0.243162256708384 663:0.0629849073783058 674:0.178231067472604 684:0.125969814756612 688:0.149418850215215 757:0.0639412695169091 784:0.0660855575348578 881:0.0766794135570247 909:0.0592529404669536 1017:0.158606109491588 1055:0.0734354292107113 1076:0.092243944335868 1192:0.0837434507676512 1226:0.426085488761548 1305:0.0612090663134314 1626:0.0967229944730856 1881:0.117009547531072 2822:0.119320762112077 2990:0.114008535326684 3448:0.32338610426185 3686:0.149040025168666 4535:0.123441245325287 4855:0.120594758008973 5666:0.130928408461583 5768:0.133394147930662 7285:0.313054376609925
+-1 6:0.0181440780934009 9:0.069399326017191 17:0.123586407095043 37:0.150234465856765 41:0.0626601401660452 68:0.0278464926458012 70:0.0521873324588901 87:0.0422576833052606 109:0.0499181563575058 111:0.0567344369103702 116:0.0485639947670024 138:0.0380368597004967 142:0.00705753555448845 144:0.0269675856274671 146:0.0407317734558809 162:0.0245671014852301 188:0.0501346141786059 194:0.0359386543244004 209:0.0284944793901246 216:0.0394649849228955 224:0.0431384759399909 234:0.0325397713768166 239:0.0769137998715318 240:0.0408347755141112 262:0.0849049210711525 281:0.0523601965016212 287:0.0842080537936255 301:0.0411136893934381 303:0.162113167617897 311:0.0581231347062636 369:0.0811239506213792 372:0.0447767249829829 373:0.0323814454269282 377:0.0698241148583396 381:0.0436034064702262 382:0.0398412154138234 391:0.0469422229982721 409:0.0694968339273522 431:0.0505791618275682 442:0.386001237372224 448:0.0410784814180497 496:0.0760737194009935 572:0.0491552093383027 577:0.0662088359585563 580:0.0410433727600722 631:0.0304429228406099 643:0.0369058211981326 645:0.0577150322107225 720:0.0451611883242192 778:0.043347657519434 792:0.04977591468357 794:0.0529848586140494 796:0.0398730874184366 803:0.056687974642175 812:0.0508075354092721 858:0.0455076205386728 871:0.104203585055347 882:0.0340633722046381 890:0.0476370644955178 975:0.0562045736494849 1030:0.067908656569561 1061:0.11766905790731 1198:0.0540345694752037 1204:0.0698779142789205 1213:0.0577150322107225 1244:0.0640282439393151 1291:0.0688543780036488 1326:0.529482378356148 1446:0.0473428188524518 1472:0.0461249046136569 1535:0.0673158773479349 1636:0.0662088359585563 1662:0.062562314981929 1688:0.061074454721952 1730:0.0640282439393151 1746:0.0529848586140494 1819:0.125927668055929 1910:0.0555129506707469 1932:0.0585450737913342 1954:0.0642525024570039 2141:0.0751034198591319 2156:0.365538967362681 2204:0.0676087381775363 2236:0.194140555595368 2275:0.0713883728401581 2402:0.062562314981929 2558:0.0756566669850553 2741:0.070993228191701 2794:0.0854698159651349 2937:0.0854698159651349 2988:0.0762356556113647 3495:0.0788656109155347 3552:0.0796201456255295 3634:0.0788656109155347 4649:0.0822044274435806 5052:0.0842835844188838 5405:0.0918275572975791
+-1 4:0.115342318503359 6:0.0133328006930002 11:0.0599131730474164 46:0.223281772855313 59:0.165579206350735 73:0.144880400350845 77:0.100537096928514 86:0.207148997105166 120:0.111081139051026 142:0.0484034516115291 150:0.116273460273272 179:0.0726796998878113 183:0.117293578413523 218:0.0756287232464429 308:0.197024473647514 317:0.158932759574218 409:0.204273246792281 456:0.144482757571168 457:0.0919363306882639 506:0.298359166577812 896:0.337728813598546 2754:0.186915587715594 4112:0.63681850632256
+-1 11:0.0745286753593838 46:0.208312637059358 51:0.0563209667410055 63:0.125471586048039 74:0.0679816029396926 75:0.0840321508139545 77:0.0625312955185172 79:0.449893139695273 82:0.124401461483354 83:0.0214867376732389 86:0.322102376885766 106:0.232184820811216 114:0.0582292100118546 120:0.0690893982891922 137:0.0678877740427399 142:0.021504006476257 162:0.0449129392572682 170:0.0823847535110479 181:0.0699956299127374 199:0.0387628949245155 234:0.0594883680588447 264:0.136530867508813 317:0.0494258918356049 399:0.234576240066531 457:0.0571818566359009 499:0.123534636217045 505:0.178952332696257 561:0.0734859792827399 623:0.57554426084877 796:0.14578989339061 1467:0.101901050956556 1659:0.116652051938118
+-1 6:0.0284234193970693 37:0.0448282402346876 42:0.113369318717883 58:0.0635555045787572 80:0.0616892334066368 86:0.0736014755136126 94:0.0568770467516959 123:0.0961226160843255 127:0.188454630124803 137:0.0775629224967262 142:0.00245686887102375 161:0.0924608541764212 162:0.0513137877302992 168:0.140733250124752 186:0.0537642247840391 241:0.25024603196185 289:0.0824312896794284 296:0.0854368220692995 308:0.070004162102643 315:0.402616394229668 373:0.0676357615096202 423:0.0717834367872309 442:0.0806248371223579 458:0.0997504385569644 485:0.0655661898004509 488:0.418266437564359 506:0.0530045406929734 507:0.0506595180042218 528:0.0991299740733592 612:0.220582003742752 723:0.0972385053250173 742:0.194477010650035 867:0.0832837013829821 947:0.115257717328209 971:0.118149164275482 1074:0.123822933695406 1138:0.0934273680139864 1150:0.103383721848402 1157:0.129862688703778 1412:0.118925228705958 1516:0.151756263572792 1910:0.115950991154323 1992:0.247645867390811 2102:0.132380418842382 2157:0.152701685135125 2596:0.131091085462452 3341:0.202342587081552 3758:0.161836704649005
+-1 6:0.0282669063909724 12:0.047638332368126 37:0.066872091602564 52:0.0576139530646742 69:0.0716949890762748 98:0.0916792208177801 111:0.0441936760036666 176:0.0366299423196107 179:0.0770442130111236 224:0.0672060192294058 242:0.049517030755684 262:0.132274532974153 271:0.0779923378441357 379:0.172620962300186 398:0.0549657793825851 411:0.0529434974339 429:0.0806460114014727 542:0.401822540139302 657:0.220190824496561 663:0.132274532974153 732:0.154654958444762 745:0.0959858250808754 769:0.102739425724049 786:0.223705413641722 846:0.409358486646771 858:0.0708969418683452 859:0.110601317154694 872:0.0806460114014727 1110:0.115387887176251 1211:0.122865809425009 1309:0.250262128735654 1430:0.318823818238317 1622:0.133154590423573 1751:0.192546173560432 1882:0.106765513567294 1956:0.105328574063582 1967:0.113190465494227 2109:0.117866551968675 2622:0.128067397170006 2623:0.128067397170006 2737:0.121757518637537 4310:0.14007044983836 4767:0.131306544140742
+-1 6:0.00874124987800479 12:0.0294633279808946 52:0.0356330440432489 67:0.0247229565908738 69:0.133025624915932 85:0.0267844323315434 98:0.141754277370256 118:0.0286194489726058 132:0.0265079428879031 142:0.00113336670119243 179:0.0953005197342065 189:0.0327062107134992 216:0.0380259931495985 218:0.0495836983596928 219:0.0365442821152845 233:0.0516865960488774 244:0.0643161787689404 286:0.02448971361318 291:0.0351786491681762 318:0.316532604409716 337:0.0334141525364725 341:0.0730360244575355 355:0.0526093608436452 365:0.0463086312014981 380:0.0537068560215464 382:0.0767770106770674 398:0.101985609392878 422:0.0398547768654363 443:0.0680356182037035 493:0.0390181616801476 502:0.0301685133839902 542:0.124259484974769 641:0.0691669885965691 650:0.0740410148098536 651:0.226196056277336 673:0.0441916575790235 676:0.043704102693249 712:0.0401353089184288 722:0.0561378126972476 729:0.0470430769060816 796:0.0384192152103721 812:0.0489549659576866 830:0.0759899740560447 846:0.126589898872135 858:0.0438482992008993 859:0.342023190197565 876:0.042180658885625 882:0.0656426734046124 912:0.041565539522772 936:0.0511414022392424 953:0.0955165416559651 966:0.043656419933015 1011:0.0524543588810831 1179:0.0545028390171054 1211:0.0759899740560447 1236:0.0481671353746777 1242:0.0554823381698987 1327:0.056831196462713 1365:0.0528574959472991 1379:0.046131838834046 1464:0.167613925295607 1473:0.0619096959760179 1498:0.0718545785282978 1504:0.0610677925775274 1517:0.0812103947334015 1518:0.056003820259699 1543:0.061272792413897 1574:0.0669921605078412 1584:0.0586798019985998 1599:0.0529604339046556 1679:0.0630526745617114 1682:0.061272792413897 1704:0.0663437756634652 1729:0.0792070490066951 1759:0.0663437756634652 1815:0.056831196462713 1836:0.046609203286383 1838:0.0669921605078412 1914:0.0812103947334015 1956:0.0651435549719544 1985:0.0614813576430086 2023:0.0640526033589675 2024:0.0425654683200281 2076:0.0545028390171054 2109:0.0728980362241601 2174:0.0884792955467806 2187:0.122135585155055 2238:0.0673299912535102 2296:0.06379469667914 2358:0.0746561341727066 2379:0.0657286563006122 2385:0.0687853747286234 2398:0.0635422200190564 2404:0.068404638039513 2525:0.0728980362241601 2577:0.0628151975263468 2721:0.0774909552986384 2728:0.0801669370375392 2729:0.0801669370375392 2968:0.066663586573438 3003:0.0850293550579958 3063:0.0774909552986384 3102:0.0836168775263239 3365:0.0713650330709528 3496:0.0740410148098536 3552:0.0767169965487544 3632:0.173261380021787 3722:0.0740410148098536 4182:0.0906657318283363 4438:0.0812103947334015 4470:0.0884792955467806 4526:0.186683427134474 4774:0.101654072076479 5543:0.0933417135672372 6848:0.21993286117144 7350:0.290374962168066 8148:0.101654072076479 8980:0.0967916540560219
+-1 6:0.0265059971490128 20:0.0498396293232721 59:0.0548627163005163 63:0.0190975548940404 85:0.0541454290043217 100:0.054597240315007 118:0.0578549630362743 142:0.0137467821969869 201:0.318113566448609 214:0.151392670214016 277:0.0800133322286654 286:0.0990131904507084 297:0.0863121535757609 348:0.0877762991220008 367:0.0754114605945344 379:0.323734806441347 391:0.0914348231641901 398:0.206166571107104 454:0.088156582089192 537:0.0988145560127242 609:0.062567682254458 682:0.547248264575792 692:0.246900273003965 726:0.0814231795684346 739:0.180514499361256 761:0.0898428371611224 827:0.07546816832109 829:0.0655442240715058 1138:0.0871248288470821 1256:0.301838647356725 1327:0.114885746885089 1432:0.105056241952632 1479:0.139051430241371 1598:0.0924427414402187 1868:0.139051430241371 2460:0.162059555495903 2640:0.122247780570941 2824:0.128962644312782
+-1 6:0.0289976174553986 9:0.110913053677879 17:0.0395028211097995 18:0.038805858947584 37:0.0686007624574306 47:0.0343120032241135 62:0.331990966396303 63:0.0313391487238286 69:0.0735483337988044 105:0.308033787127323 140:0.0512277416403368 142:0.0150390090646243 151:0.0572516315074417 175:0.140348177324186 194:0.057436665814385 199:0.0338864486011318 201:0.0870042301690284 218:0.0411213824431488 243:0.0683553667972128 338:0.189974659317851 341:0.0605711633702365 381:0.0696863678643304 415:0.0630723991478752 426:0.0652615797363629 436:0.0640330174399249 442:0.061690189829492 461:0.158652852227014 483:0.140773658268953 486:0.216102721364217 501:0.0753857356255129 527:0.0691432339279705 538:0.0635216513710859 586:0.0532902425636595 621:0.302870170438364 631:0.0486534629211772 681:0.0793264261135069 703:0.312568184242903 723:0.148804315551861 724:0.0848264744151617 729:0.0780287239860269 797:0.10712602897827 806:0.0778204388937849 816:0.110042125215797 867:0.0637246229747005 1076:0.099364590414567 1200:0.103424260241703 1232:0.164157039753438 1477:0.120029258442146 1480:0.105395281801505 1544:0.0949873296589256 1986:0.112254519279781 2090:0.116839875644932 2376:0.100627938397828 2475:0.116839875644932 4604:0.36274035129639 5023:0.146757546163085
+-1 6:0.0312446265114183 17:0.068102195975043 29:0.0226948784473436 31:0.0238175572836811 42:0.0373865857416095 96:0.0387169021993383 142:0.00162043734127039 162:0.0338442066407684 196:0.0581089939264707 199:0.0292098323448602 248:0.152037344142338 252:0.0901958959700774 253:0.20484795959528 278:0.107895222197026 295:0.0530577650285923 409:0.0638269627840997 480:0.045961776610379 502:0.043133599713667 507:0.0668253610381692 511:0.243155419460073 514:0.0663806303845084 519:0.0747158243722201 546:0.0539891769669291 586:0.045935738773447 631:0.0419388739036228 767:0.0597749550385865 781:0.270869408556956 975:0.077428719293282 1046:0.140413260302284 1352:0.0908498422953192 1447:0.0812547190599156 1500:0.0713132019761263 1700:0.0898103778449425 1710:0.0870238425286855 2093:0.105860552508919 2195:0.0972743033280441 2364:0.202724155666501 2523:0.194548606656088 2792:0.0957824138869371 2826:0.213480045674655 2854:0.110793124100537 5502:0.25925966816154 8538:0.581361898533316 9196:0.314450230838509
+-1 6:0.0101256312490566 15:0.138765308425488 57:0.0755956084441298 96:0.0627360795356314 138:0.0849086326054585 144:0.0601989974548016 179:0.110393586059145 367:0.0864244387004458 388:0.210590587052716 444:0.133019022962456 478:0.0794061587823654 557:0.0952963558841275 671:0.123675167052528 1036:0.114464794960059 1485:0.126269276731823 1626:0.145526906532871 1679:0.146077080689607 1731:0.125729786246442 1734:0.140100665534445 1792:0.119530214172545 2468:0.150267375994114 2635:0.471013488083186 2771:0.146077080689607 3735:0.164245045848538 4041:0.196991484439497 4604:0.337772581215672 5357:0.171534282564552 7462:0.44848350551042 8971:0.22424175275521
+-1 6:0.00635944767018585 9:0.0729727980469305 27:0.0185171864153329 35:0.0690096188758487 42:0.0190239140403706 62:0.436852271953532 70:0.0365830226380706 75:0.0193327510836399 83:0.0329554618490311 84:0.0559849502422036 85:0.0584587552690909 114:0.0223273832704128 137:0.0260308589128867 138:0.0799908656339463 140:0.0449388840617139 142:0.00989458440560156 162:0.0172213981332332 173:0.0237667320052438 184:0.0749377710657024 215:0.0202569592497823 223:0.215947519420232 243:0.0899458127120654 299:0.0263229224283362 302:0.080729193452953 367:0.0271396262525301 378:0.0439954225622983 380:0.0390728951998782 398:0.0741967287399018 408:0.0187235817181178 415:0.0276647295199979 423:0.048182416421181 437:0.0286008105104111 466:0.0293818860815589 475:0.0257656536068537 480:0.070162027639135 485:0.0220046406351324 502:0.0219482436528377 507:0.017001818953101 527:0.0303275107748884 567:0.0345048094379243 611:0.0411406264314019 612:0.074029430987361 639:0.0365830226380706 654:0.0332279108399014 655:0.02407684675421 676:0.0317956765827617 697:0.136352687795668 744:0.0392344661651514 780:0.129038678641035 782:0.0362292748810751 789:0.0326725226424471 808:0.0663740924176815 812:0.0356157927697519 844:0.034843201324095 906:0.0372064722847875 927:0.0408414685713489 1021:0.0340430835654591 1055:0.0346965662290313 1116:0.0370781672844944 1152:0.563763399985179 1201:0.040552229394235 1279:0.194952962108686 1394:0.0824853389970548 1445:0.049236923840357 1499:0.048499195908749 1518:0.040743986185342 1607:0.0822812528628039 1634:0.110568687593335 1855:0.0411406264314019 1967:0.0509308540608038 2107:0.040743986185342 2112:0.0512481465829277 2119:0.452960280379865 2225:0.098473847680714 2295:0.0473933401602493 4598:0.0512481465829277 5278:0.067908108240902
+-1 6:0.0338626788333725 9:0.129521438128475 11:0.0304335238110634 17:0.0184521551994509 26:0.0146567009424124 27:0.00985999994024296 31:0.02581328000826 33:0.0187385045806308 35:0.257222871720966 41:0.0311850539321861 42:0.0202596428090091 48:0.041431929274506 57:0.0252810886254173 62:0.310152473400974 63:0.0365970593887094 70:0.116877994183804 75:0.00686284695215467 83:0.00877403414789469 85:0.0207520124109362 98:0.0219656439746643 127:0.0336777492818274 141:0.0927975061380847 142:0.0289775831505088 151:0.0267427986234386 154:0.220308905323133 162:0.0550201247930332 173:0.0253105381017747 180:0.0260948851196241 186:0.0384317027691935 196:0.0314890337694286 214:0.0870351190020657 215:0.0215727824424741 223:0.321964630387088 243:0.063858924574107 250:0.236570178861861 275:0.0227712871883661 281:0.0781767586607353 289:0.0589234725612849 304:0.0512815937006877 306:0.0265723112344083 308:0.025020161281428 319:0.0307188994890871 320:0.0321423655926669 322:0.0293471688363044 330:0.0336777492818274 331:0.0264715004586913 341:0.0282933845158122 342:0.0316335359356999 345:0.0248501937000575 357:0.0626934891744159 386:0.0539384291243788 414:0.025020161281428 418:0.0349600016692506 426:0.0304843240058614 432:0.0636199167258936 457:0.0233500110809415 458:0.0356517667753672 461:0.0370541517021196 465:0.0287946099619885 494:0.17209624298547 506:0.0378886659579385 507:0.0181061993006439 515:0.0489305836717533 520:0.0502532214265298 538:0.029671586400545 543:0.074962826554631 546:0.029256521268403 556:0.0418702465908476 564:0.0839166329272515 571:0.0267256084205476 576:0.0331486897567023 610:0.174397516304353 628:0.0367967584553093 671:0.0206800561789846 726:0.0624132032569981 755:0.0353427638839404 761:0.0688671123707423 764:0.0313185463803983 800:0.0298621838944741 808:0.0353427638839404 824:0.07574419227867 848:0.112280756043437 858:0.067945472052726 866:0.037872096139335 867:0.119065585709672 882:0.02542927840168 906:0.0396232782104397 908:0.0360179738605806 913:0.0353427638839404 930:0.0592960685831569 957:0.471003414281252 987:0.0552911527099215 1042:0.0385826053861675 1058:0.0379868050285532 1083:0.0363024236879746 1086:0.0426946463099429 1198:0.0403383464868103 1225:0.0604108745030261 1322:0.114134084843966 1359:0.0375913707974646 1373:0.0392853754449752 1424:0.0314890337694286 1433:0.0979444186106013 1709:0.0431863643250671 1873:0.0448400595730748 2200:0.0488518804076502 2237:0.0488518804076502 2404:0.052998468662329 2561:0.0504718503844657 2709:0.0506957480139418 2843:0.0638056541219907 3070:0.052998468662329 3116:0.0613679485036096 3546:0.0980791797256035 3924:0.0583443506996302 4107:0.0583443506996302 4152:0.0658789482493301 4787:0.242717555811265 5816:0.0638056541219907
+-1 6:0.0235966120745917 9:0.180509471557155 17:0.0642902988160078 58:0.0791439569145139 62:0.270155369087535 63:0.025502017064731 142:0.0122378903518551 153:0.204659466677628 175:0.11420736551162 216:0.102649463363352 265:0.334372895386143 380:0.434937748596535 408:0.069473501059005 415:0.102649463363352 471:0.122988995969654 571:0.0931163505197351 705:0.134859687748054 720:0.117465438169798 727:0.252632454382181 867:0.103710948683729 990:0.158856262447997 1216:0.126316227191091 1688:0.158856262447997 2071:0.211416823974329 2165:0.176632201132491 3652:0.47769178156181
+-1 6:0.0125327923518137 9:0.191746825129818 17:0.136585194984779 18:0.0670876871828372 62:0.28697349711041 83:0.0324732572412184 142:0.0129997423459968 159:0.150793461132256 175:0.121317178286458 216:0.109039755816747 218:0.0710907712569401 220:0.100540141395122 229:0.0656325585064899 278:0.10819687787386 381:0.240948010170582 389:0.106809760108611 453:0.121561931621724 506:0.0701141786913352 514:0.266264874853764 539:0.116436941069257 550:0.204216275237897 621:0.349068582295382 655:0.0948982164824181 760:0.19837002736484 797:0.370399610581544 974:0.321951006750171 2415:0.182931662584869 2953:0.219986432379577 6664:0.259984511663251
+-1 6:0.00570898519508272 9:0.131017863594281 35:0.18585335374055 48:0.104776532297893 57:0.0852439119706275 58:0.0382963178677456 62:0.52289303146313 70:0.131364826295374 75:0.0115702280492224 83:0.0739617076634164 111:0.0357026748568131 127:0.11355615012016 132:0.0346251292689689 142:0.0236867681231295 149:0.25425495053411 166:0.0425971901065414 190:0.097897127705036 200:0.16545647700569 215:0.0363700391770096 223:0.0775439160897388 239:0.0968028780528305 243:0.0538305986896981 247:0.0840108948996167 289:0.0496702039065667 299:0.0472610774483472 314:0.0455574314934216 330:0.05677807506008 341:0.0477004533853849 362:0.25203268469885 363:0.0533316897973963 380:0.140305631428274 398:0.0888102338164826 402:0.0435143934379945 409:0.0874679647990887 434:0.0494004533157938 459:0.0521498009937726 465:0.0485454806396372 483:0.0554303974904988 499:0.0425231265403832 507:0.122102594724103 515:0.0412465858273292 527:0.0544510526690095 545:0.0908933166222378 571:0.0450573044008902 613:0.0528006418207518 706:0.0581188225826874 709:0.0995744972966775 744:0.0704429057648894 804:0.0537799866422411 868:0.16289547137876 913:0.0595851606305493 962:0.0773152344362202 989:0.138086734059204 1089:0.0932182291856992 1152:0.404880055119734 1420:0.102300746755124 1437:0.0780115452953027 1467:0.0701528157141372 1472:0.0580523069198525 1496:0.084723036396793 1721:0.0748035606135343 2254:0.0920126794938509 2835:0.0932182291856992 5229:0.109221798374168 5297:0.0992594063584191
+-1 6:0.0258440997732776 20:0.0291570321762098 35:0.336537051902404 48:0.0316209747976125 57:0.0385892079021493 62:0.177531985292996 74:0.084746218406854 111:0.0323246062003143 123:0.052439907651813 139:0.0422854737027155 140:0.0365253419360788 141:0.0472155598231537 142:0.0026807005875927 173:0.0386341597625142 190:0.0443172131205639 218:0.0586390305926592 243:0.0487373260168935 331:0.0404062597864263 378:0.0715170341347786 386:0.0823319472605045 398:0.120610956161783 428:0.305523118013435 434:0.0447263463019025 457:0.0356415993579496 483:0.0501857571622633 494:0.0875629183819808 496:0.0433432172018411 506:0.0289167454267773 509:0.0479777772726301 511:0.0670422791861802 529:0.0882903752746638 576:0.0505983622643194 610:0.133100716389266 612:0.0601695021272317 613:0.0478048202501543 638:0.0631301255388878 654:0.0540138381532678 662:0.0538812923280212 675:0.176580750549328 681:0.0565596832026164 706:0.10523962478138 727:0.0553389472724471 771:0.0548362308416144 844:0.0566395836960474 861:0.0690077497397243 867:0.0454356090932166 916:0.0626324499114037 957:0.44933905303745 1037:0.0578081985813559 1059:0.0473814365687287 1112:0.0622703289605387 1157:0.070846879542563 1318:0.0684441404738591 1331:0.175292157617402 1394:0.0670422791861802 1551:0.0553389472724471 1554:0.0960416221208104 1634:0.08986781060749 1694:0.0813474554435044 1722:0.0737414211295178 1730:0.0729605468476136 1934:0.0882903752746638 2217:0.0916429118588118 2669:0.37048555786026 2912:0.0843982295781226 3456:0.100558028494565 3536:0.0973933396907066 3565:0.0890571728307753 3819:0.104638021971396 5355:0.100558028494565 5938:0.240437742224033 6375:0.104638021971396
+-1 6:0.0340664960236179 17:0.0464080437066436 42:0.0509539605969423 100:0.10525561402022 140:0.120365037546528 142:0.00441696928452129 151:0.067259404331882 196:0.0791964103735213 199:0.0398099108763181 214:0.0729658146162603 240:0.0766695177630849 287:0.0790526064468521 314:0.0679622562409887 379:0.20803802313756 398:0.0662432414383311 403:0.0986382572603238 519:0.305489289447986 590:0.286273201137404 607:0.0835436213009477 628:0.0925455891844882 633:0.088563409282645 671:0.0520113201214956 726:0.0784860801709654 732:0.18638589076638 752:0.129901034670026 757:0.0809170769213174 785:0.239605829246726 860:0.11709614930579 871:0.097823956600633 882:0.0639558388024338 895:0.088563409282645 943:0.114343787750652 949:0.293477607145289 980:0.149491165127783 1003:0.0900070265986558 1245:0.0832844534207265 1279:0.261082591323297 1383:0.123818722483719 1428:0.143136600568702 1664:0.101081921270317 2468:0.25277846096064 2640:0.117838054930651 3751:0.137263868839577 3764:0.168809043212765 4245:0.172411246216708 4927:0.188608754127704 5037:0.176671748086065 9496:0.214281196771768
+-1 6:0.00966563285122052 52:0.0394012213242013 57:0.0360806836834821 79:0.0327738309766656 83:0.0250442657283341 84:0.0283635729756793 85:0.0592337463539369 94:0.0290123072746984 96:0.0299430176944711 100:0.0597280166380422 112:0.0538084904429396 125:0.0518101212110259 136:0.061209246104527 140:0.0341509810765844 142:0.0100257574808287 144:0.0574642106845322 161:0.047163185598546 166:0.0360597186710261 176:0.025050606453051 183:0.0425160733613217 193:0.0937518923762211 233:0.171457286215398 240:0.0435066411916471 248:0.0587915952370826 253:0.369660795094968 262:0.0452301731788784 275:0.0649974866417053 300:0.0689477974487366 325:0.0433968995919197 327:0.0406435252833675 331:0.0755592331349952 333:0.0487553136890056 339:0.0375901795226468 347:0.0397010574156207 367:0.0412491267608206 377:0.0371963929447385 381:0.0464564268114592 386:0.0384899445679726 402:0.0368361570702164 408:0.0569154039573573 416:0.047018788154088 419:0.176374785711248 442:0.0411257736144082 448:0.0875325860985931 457:0.0333246869349696 502:0.0667176383483822 507:0.0516816391379454 514:0.102675383476701 557:0.0454835637097215 589:0.230831241563824 594:0.0925483016940813 643:0.0786412218769453 688:0.0536496817470184 712:0.0443795985459686 723:0.0496002088107305 742:0.0496002088107305 744:0.0596318996135249 761:0.0982858188767 774:0.054214037879815 808:0.100881026374346 857:0.0778913193198168 867:0.042482028753106 880:0.22739031710195 932:0.0656431044360421 960:0.0556937764298138 1019:0.0694578744733408 1027:0.0505026227509144 1042:0.055064352696558 1168:0.0628410681733705 1225:0.0431086193771498 1227:0.0528086850135668 1232:0.0547176566709463 1272:0.0610703928188672 1308:0.11290343601938 1322:0.108593314519919 1330:0.0638237671274194 1338:0.0610703928188672 1393:0.0553304559597728 1439:0.0569484190589093 1576:0.107141969944641 1599:0.058560974335237 1724:0.074450105467167 1970:0.0664470092079207 2021:0.0705409551907568 2023:0.070826135378016 2067:0.120532976093977 2078:0.0670836291032982 2113:0.470105842434886 2139:0.0723519969923112 2204:0.144064909199445 2366:0.0733595980524882 2387:0.131286208872084 2411:0.0812238410260749 2575:0.0673028137236103 2694:0.141652270756032 2752:0.0866004574151283 3139:0.0794531656715716 3623:0.0866004574151283 3767:0.0774090709887762 3865:0.0924593221352224 4244:0.0760593950452598 4394:0.0924593221352224 4862:0.103212554913329 5369:0.0866004574151283 5524:0.107027324950628 6483:0.0778913193198168 8470:0.0957918438414805
+-1 6:0.0130394560645724 33:0.0360780534223595 57:0.048674773489983 58:0.0437348440403628 72:0.0405738035756977 83:0.0168930274748048 96:0.0807894671104679 98:0.042291404490923 100:0.0805762913576273 119:0.204644773944851 142:0.00676264173270432 144:0.0775222959572347 151:0.0514890669769414 183:0.0573564586164769 193:0.0632381604198779 220:0.0523023409167815 233:0.231305056272045 240:0.176078362917735 253:0.284966970569462 275:0.0438425442191881 325:0.117089480694694 391:0.0674711662073315 394:0.121475933252286 419:0.237939026298704 420:0.0662964151825514 431:0.0726986243157038 438:0.0726986243157038 465:0.110879016200518 502:0.0450028325804814 514:0.069257293979902 589:0.311403699999023 597:0.0583006854614864 609:0.046169657713642 611:0.0843550287136135 657:0.0677156658539713 663:0.122035849082455 667:0.0627964356148246 713:0.130388156124935 719:0.0701748769363819 761:0.0662964151825514 771:0.0691680721207894 796:0.114621061235546 800:0.114989908742963 844:0.0714427441465697 867:0.0573105306177729 930:0.0570826428777652 975:0.0807841616375131 1005:0.068728518172564 1074:0.0852070442942999 1168:0.0847759645033476 1232:0.0738170475849457 1319:0.0688155691748486 1360:0.0963434427247535 1373:0.0756378326734947 1424:0.0606271988067943 1602:0.179844586934732 1690:0.0852070442942999 1851:0.0882949042696367 2078:0.361997625115284 2113:0.126839588726038 2202:0.0914015610793907 2591:0.0947869009292062 2723:0.0849902059343032 3139:0.107186573182823 3663:0.126839588726038 3827:0.139239260979655 4807:0.139239260979655 5813:0.288771179887346
+-1 6:0.0308170815794644 13:0.102408197152688 17:0.251888624153092 34:0.122798365680471 50:0.292514926979135 58:0.103361693155198 63:0.166527664615664 75:0.0936840741835363 82:0.231150332209345 83:0.0399245032336604 114:0.10819568418277 118:0.10089722935016 125:0.165186983261061 142:0.0559392265506253 162:0.166905447991138 317:0.0918382403334707 609:0.109116062910245 685:0.162843509323224 725:0.448033360308079 829:0.228614115769968 956:0.408071606115714 1041:0.219827292367493 1471:0.356918800071504
+-1 6:0.0294449472617021 10:0.0496707583070232 13:0.0782787677425308 17:0.128359067960593 33:0.0325877513621911 58:0.0790076009238493 63:0.0127290400022568 67:0.0666235298733082 75:0.0119350372465026 83:0.0305174878843338 91:0.0941112957851558 98:0.0382000037023593 109:0.0648073701527 114:0.0413513032568064 119:0.431309218466821 122:0.063385943102404 132:0.0357168593161725 139:0.0481770908654344 142:0.00305420146642896 151:0.0465078559775034 162:0.0318947925105583 166:0.0439402791677983 168:0.0437373463410794 179:0.0321020313656451 183:0.103615236139717 220:0.0472424512903546 226:0.0456625936571951 229:0.0308398506833077 242:0.0412645470003847 251:0.0665718465944432 262:0.0551148624984884 275:0.118803244180739 288:0.061164643677999 295:0.0500016568455299 320:0.0558981328322848 325:0.0528809417644744 340:0.0674224805671453 347:0.0483774031077187 355:0.0708859660635428 376:0.0751045259138237 377:0.0906507288610759 384:0.063816857011023 398:0.0916104197740129 400:0.0518909085323281 438:0.0656655353834929 445:0.0921685565629441 534:0.0448864019129109 535:0.0558447168697839 538:0.0516012511020868 546:0.0508794197912071 559:0.168647137709131 585:0.0729688529097522 597:0.0526604975003104 620:0.083713748786769 623:0.0817442148475886 626:0.0555802541096463 666:0.0769638522695067 684:0.0551148624984884 717:0.0596785879577243 739:0.120317825821453 810:0.086659757739721 828:0.268175238481866 942:0.0761942633015245 950:0.0641700582638246 1014:0.0722171678925672 1027:0.123079126746722 1084:0.0961573992017473 1245:0.0575886956379153 1304:0.151645582897379 1438:0.0814814722464925 1455:0.0781916564095741 1599:0.0713590026617743 1866:0.18751836432774 2024:0.114705607307403 2166:0.110963112508917 2167:0.221926225017835 2248:0.0773628432557741 2414:0.0937591821638698 3046:0.0902653812958433 3134:0.106723748356661 4501:0.10059183591167 4539:0.122163202259965 4557:0.125768825816087 4850:0.136968915567135 5453:0.27393783113427 6015:0.229137472130079 7097:0.130417283058061 7968:0.130417283058061 8665:0.136968915567135
+-1 6:0.0273634158370211 13:0.227328314378411 17:0.149106335708509 34:0.10903637112933 52:0.0557724476077364 58:0.0458889817994475 61:0.080326114144842 63:0.25137038787868 75:0.0970490662679042 79:0.0463913734046655 83:0.0886254252574275 101:0.398924863064826 142:0.0567658580150599 143:0.120556550476297 162:0.0370500948237843 173:0.0511317180889327 190:0.117306304146233 199:0.0319767300102782 229:0.0358246378868793 234:0.0981476480471359 239:0.0579975537653691 264:0.112628602608243 297:0.13365628182962 317:0.0407729712092472 363:0.319526403412758 423:0.0518297957991831 473:0.0602298363552774 483:0.0664200801330819 507:0.0365776924449363 535:0.0648711558398744 571:0.0539904078696309 622:0.0754994813727512 717:0.0693247131816671 772:0.126766101350075 819:0.0687067131062222 829:0.202993365867426 1393:0.156640573688671 1405:0.0969003734579205 1471:0.316918963310118 1545:0.0874491558596568 1590:0.316152479568515 1844:0.088951562020763 1910:0.0837200956545798 2845:0.112465993965641 3482:0.104341110599426 3657:0.271186801441401 3715:0.123973999682081 4327:0.117865802775886
+-1 6:0.0243058151918437 13:0.107694156900387 17:0.132445125318045 26:0.0350674229664816 37:0.0383341253667825 98:0.0525547004757209 119:0.423846757517106 142:0.00210095062439442 151:0.0639844555961312 166:0.120904083071624 179:0.0441652481562319 183:0.0712757483281029 199:0.037871514029218 203:0.0614210675045174 220:0.129990190401478 226:0.0628215628274986 286:0.0453972037935455 325:0.0727524027735721 371:0.113202917300428 372:0.0799772279587082 376:0.309981320514498 377:0.062357610490302 384:0.0877977874465253 398:0.0630177710085006 523:0.189934793850868 530:0.0666028010521843 580:0.0733089608646909 598:0.0856244662578971 646:0.105349431536851 651:0.104826342871075 687:0.0911645937638565 896:0.102613775821266 968:0.224923681181353 969:0.0906122611877975 1083:0.0868566842686148 1438:0.112100365266999 1609:0.113202917300428 1625:0.109402483974425 1799:0.139593898499228 1822:0.115171480805816 1853:0.11922453324339 1945:0.123575982679287 3099:0.1505417702346 4104:0.538275438508692 5231:0.1505417702346
+-1 6:0.0346102918169039 17:0.0942976896846103 18:0.0308779874633331 72:0.0358980000117229 83:0.0298924846598215 114:0.0405044216926605 118:0.037772152892128 140:0.040762132498646 142:0.0059833018254494 144:0.0342942383499936 164:0.404279877780424 199:0.188745141692951 209:0.0362359642187847 211:0.0573687990504288 212:0.130620456626695 268:0.111009202258291 275:0.0387900446641158 278:0.0497990313700295 284:0.035030528733081 306:0.0452649484012521 327:0.0485115422920784 333:0.0581936592728498 339:0.0448671115747421 341:0.048196733016835 351:0.0409363008474932 382:0.101330846330082 390:0.0526923720215213 403:0.133617063354518 430:0.0448951992289387 483:0.0560071001271689 499:0.386689867350883 500:0.119391317147919 507:0.0308432401629095 518:0.0503052394777022 546:0.0498374008166656 559:0.330386432592373 560:0.0687148797938559 586:0.0424032732794619 594:0.0552321780700672 620:0.0819992772966501 634:0.064807729315324 639:0.0663657786395477 641:0.0456435424535675 663:0.0539861009532831 709:0.0503052394777022 714:0.0596956585739594 737:0.0679728350427772 761:0.293281440641899 847:0.0615151589535736 869:0.0772277089568651 925:0.0852406381277541 1061:0.0748189098949658 1192:0.0717788209191826 1196:0.0724057301552123 1305:0.0524639786069015 1332:0.141765383319793 1335:0.0620047048540691 1341:0.0662569989056066 1377:0.055017566117683 1407:0.0703122735661467 1463:0.0848849514965577 1575:0.280701954598055 1640:0.0897938941927417 1707:0.0659350748113336 1789:0.0875609883404852 1899:0.0829039457463167 2042:0.074091085620123 2655:0.10453802825061 3689:0.116775605371709 3811:0.10453802825061 3951:0.101251639255463 3973:0.110358151385438 4076:0.116775605371709 5345:0.107182058230271 7378:0.116775605371709
+-1 6:0.0277010408845783 17:0.251576821050175 21:0.0558585355203897 37:0.0436889347540226 111:0.0577453039435236 139:0.0755395909923084 146:0.248745076160824 164:0.107857834912737 203:0.0700008408970387 216:0.160672612515706 258:0.0875620963334543 271:0.203816095936529 275:0.0620927797338296 335:0.122269941057404 341:0.0771504429298328 347:0.0758536719087999 376:0.117760642398438 380:0.113464766495887 411:0.0691781862839395 449:0.105544917837672 463:0.113464766495887 473:0.0812973141114793 479:0.116947667745771 594:0.265237085712635 714:0.0955572341046505 740:0.132215702273873 810:0.135878745220123 882:0.0693405941229553 886:0.0795319359646268 914:0.118317489783707 951:0.120368884392933 1058:0.103582476384337 1149:0.265757680956018 1563:0.159093462163014 1854:0.15400936250792 1989:0.149776957710289 2274:0.4692722910357 2558:0.15400936250792 3673:0.157723640125077 3961:0.1564240970119 3994:0.169366138058902 4520:0.179638813954791
+-1 6:0.0305804146025196 13:0.101621729479817 17:0.361044936231822 37:0.0241150818824326 42:0.0304931711519859 47:0.0241232527936769 58:0.102567902887036 63:0.0110165851009284 72:0.0634363749122495 78:0.0391556586785907 79:0.0345636047084344 83:0.0264119291230689 91:0.0407251881835551 96:0.0631564023202669 98:0.0330609057374485 118:0.133496487343326 135:0.0464356639782679 142:0.00396497344234086 148:0.044801965631669 158:0.0365820546716934 164:0.119069074823028 179:0.0277833018349854 186:0.0578442819180474 188:0.0563319624040028 199:0.0476481282975958 204:0.0305966647913778 215:0.0324696024231185 219:0.0426155417906865 220:0.0817737213370977 271:0.112500839632273 280:0.0533924933582413 283:0.0382068000639553 286:0.0285582956762453 308:0.0376583174440571 317:0.0303776490377212 323:0.0436001025020188 342:0.0476122325809637 372:0.0503117622353647 376:0.0650006128543732 384:0.055231489256933 387:0.0719555033575697 388:0.318002270923112 389:0.0434365390679049 396:0.0517674647324439 399:0.0961152738464909 411:0.0763688854446961 423:0.115846402637975 454:0.0508538655435746 461:0.0557709037812816 473:0.0897477312119475 478:0.0399690843601229 509:0.0946173616399547 513:0.0381398349837382 515:0.0368231729585541 523:0.0597417191890022 597:0.0455760098221502 603:0.163701576578825 643:0.0414679032896441 647:0.23019174959897 671:0.031125943257896 680:0.140591806009084 688:0.0565794823912256 725:0.0740987639092939 740:0.0729794055274882 756:0.0676724275252421 771:0.0540714866283825 774:0.0571746579232728 784:0.200193570408137 789:0.0523703388687025 808:0.0531950616433364 867:0.044801965631669 900:0.0743931856091107 906:0.059637744626791 917:0.0620021949646224 963:0.0432427551699575 1006:0.0714523064787302 1020:0.0651534505963878 1028:0.0620021949646224 1034:0.0642605187799096 1292:0.0611688284352843 1308:0.059534537411514 1372:0.0712132491327319 1423:0.0743931856091107 1486:0.0696453431854633 1598:0.0533263726005624 1620:0.0616389404062489 1697:0.0696453431854633 1776:0.0590296264615231 1818:0.0826727321144561 1858:0.065622249159115 1873:0.0674896208149825 1884:0.1532968846173 1972:0.0740987639092939 2024:0.0496370537067856 2042:0.0654642303682495 2045:0.171318924304259 2219:0.14650191604966 2321:0.0870590806991779 2339:0.0797689964699135 2399:0.0740987639092939 2470:0.0759661355651614 2577:0.219752874074491 2666:0.0688224873775495 2826:0.0870590806991779 3094:0.0837920904962619 3779:0.0886145171724178 3810:0.091329694712749 4085:0.101023021299717 4894:0.105728422069554 6124:0.118542302817785 7392:0.103178743670198 9433:0.256471258809507
+-1 6:0.0217928489460115 13:0.144839566694666 17:0.0296879222822804 27:0.0317277747520716 29:0.0197868446943311 31:0.0415313356327487 37:0.0515561685754174 53:0.0419586176956816 83:0.0423499869368956 96:0.0337558684282612 105:0.057874873715563 119:0.342022905256598 132:0.0330435351516017 142:0.0141280078159506 160:0.049381644961631 162:0.0295075411907358 164:0.127280208369663 168:0.0809274146120029 179:0.0593985373953752 183:0.143789813683616 299:0.0451023030653812 322:0.0472170572054961 325:0.048922925797482 384:0.118080626252244 398:0.0423767960567141 409:0.0278242115913966 444:0.0715724136862313 485:0.037703259334996 502:0.075213254886736 517:0.303753111028816 570:0.0632067723490282 713:0.0544794463953903 789:0.0559818546797776 803:0.0680879161825019 861:0.0727378530967905 913:0.0568634512384023 929:0.0872661013032611 938:0.0808530882175456 962:0.147567314305287 966:0.0544200073445903 1007:0.377338935801315 1014:0.0668118802015341 1021:0.0583302054104971 1312:0.283372217295703 1327:0.0708430543239257 1489:0.25544629377661 1535:0.0808530882175456 1770:0.0930627700629419 2016:0.0878097576367162 3112:0.0938710156324871 3115:0.0878097576367162 3256:0.0965965226411541 3963:0.21597935854078 4124:0.102657780636925 5663:0.431958717081561 6418:0.110294062611822
+-1 6:0.0356807104089066 18:0.0238747306982602 21:0.0269810109041547 27:0.0129867089159868 34:0.0710893553179874 37:0.0422056043541961 41:0.0205370801420447 50:0.0846700909438161 53:0.103046184383683 56:0.041176040726058 59:0.0276947799995938 63:0.00964047384062238 78:0.102793860278394 81:0.0271555883431156 83:0.034669116081606 85:0.0546653846318653 91:0.0356380954480077 96:0.0829010494892439 98:0.0578623582515228 118:0.0292052705592919 135:0.0812705207200182 142:0.00462626393441748 145:0.0374272459782287 148:0.0392056316656755 160:0.161701866310038 162:0.048311720726088 179:0.0243128149142804 183:0.0392370506070275 190:0.0382405863755323 199:0.0416962725018009 203:0.0338120832196466 214:0.0764232429207805 215:0.0284137370979963 218:0.0252993222775053 220:0.0357795729882847 224:0.0424163591992095 227:0.0634053217560024 229:0.0467137778981631 242:0.0625042871782653 246:0.0922023684828226 276:0.0346477436895782 280:0.0467230934804244 284:0.0270854582317942 288:0.0463236934791781 295:0.0378692866643239 341:0.0372655122902453 342:0.0416648606156301 359:0.14897564349285 363:0.0416648606156301 367:0.0380678163868823 377:0.0343276468635347 382:0.117522879547944 384:0.0483323754577275 402:0.0679903878633991 409:0.0227778304389722 430:0.0694255603613065 448:0.040390847966207 455:0.0325651973191045 466:0.0824259136102734 473:0.0392685504209046 475:0.0361405924115216 507:0.0238478642309721 538:0.0390807563889232 571:0.0352005780186391 572:0.0483323754577275 574:0.0333951879350239 615:0.236877130730295 633:0.0463799587320154 641:0.0352913960305073 662:0.046493271309493 680:0.0615150527871928 702:0.0531300575204179 713:0.0445986973728655 716:0.0427052889657098 726:0.0411025409799842 758:0.0934461869608489 771:0.0473172718758878 796:0.0392056316656755 819:0.0895905813840024 839:0.0710095138996094 841:0.0687081925719717 847:0.0475632634938153 869:0.0597121414074744 873:0.0515695914668295 876:0.0430440696570725 912:0.0424163591992095 928:0.0718840051861455 938:0.198567128614271 962:0.120803540202364 991:0.0473783077676722 1001:0.0522792204443505 1007:0.154451138165621 1027:0.0466076428983668 1034:0.0562335646306889 1059:0.0408846538426065 1094:0.045936917735639 1160:0.112977050660855 1162:0.0517431783621875 1169:0.100526000234447 1188:0.109837981952723 1194:0.136726893299432 1232:0.0504975952423922 1236:0.0491530854430499 1260:0.0595456399147661 1312:0.0579944942507634 1448:0.111967615151042 1468:0.0625270067947173 1507:0.0611325944439224 1535:0.0661890428714237 1607:0.173119607299595 1624:0.0564885253304273 1645:0.0509807239399761 1652:0.0534273434981916 1682:0.0625270067947173 1736:0.0638633517960689 1744:0.0613223295768572 1791:0.0625270067947173 1995:0.0577065357665316 2010:0.0653637186696445 2024:0.0434367558913976 2094:0.0790771449709244 2181:0.559450199203072 2207:0.0645905560615949 2240:0.0605804254045371 2268:0.0718840051861455 2275:0.0701933668043229 2363:0.076184296892358 2415:0.0651005328070998 2459:0.0643433219774564 2604:0.0664770013556555 2640:0.0617108596994308 2710:0.0867698508915335 2803:0.0768459537546082 2915:0.0714389499241182 3808:0.0867698508915335 4001:0.0775454396143214 4768:0.0884039641339024 5030:0.0925216006442792 5325:0.0884039641339024
+-1 6:0.0281763155294627 17:0.204714556953857 27:0.0273475577447988 34:0.0748503821166708 58:0.0630029739078445 59:0.116639958617389 63:0.0203010182756229 72:0.0584492832685653 83:0.0243355382321102 92:0.0620017680260014 98:0.121847204997858 100:0.116075547847166 101:0.27385062550207 142:0.0292261159253561 148:0.082559660252222 164:0.329125147479697 166:0.210235589705891 179:0.102396398365161 190:0.161054914045614 219:0.15706117363817 227:0.0667598199538941 254:0.181285372319209 258:0.0890644241489909 283:0.0704062955303689 293:0.177789765165259 377:0.0722875449751499 382:0.082493667322083 384:0.203557720023489 402:0.143174923701929 468:0.251484998358017 500:0.0971967367751263 574:0.0703239624726798 626:0.0886426434549383 667:0.0904624740606165 723:0.0963931457146753 767:0.0898414747311916 856:0.0704888924765145 881:0.10701217394906 944:0.102772876217004 993:0.103210907586792 1305:0.0854220832912513 1319:0.0991334393504445 1332:0.115411513797835 1393:0.107529319566815 1461:0.16042974952229 1591:0.111472813095196 1799:0.161823073986917 2916:0.353940937347066 3425:0.155506213057454 6303:0.200583487124194
+-1 6:0.0194255225528899 10:0.0546149410704501 17:0.0705679072704478 27:0.0377083085389609 42:0.116220618645222 53:0.249338082216712 63:0.0139960772354135 64:0.0561608459304987 72:0.0402965344828893 75:0.0131230401569931 98:0.0420023978333412 100:0.0800256573712199 109:0.071258237692741 111:0.0809884876710816 132:0.0392720834805234 142:0.0050373209145082 160:0.117379697689201 164:0.226907878299586 179:0.0352974387956655 190:0.111035662621517 199:0.0302674049020799 215:0.0412511734946647 271:0.142927270666612 307:0.0621825530898951 335:0.514455216491177 359:0.0720944719451242 388:0.0673346036014628 411:0.0485116217627337 444:0.0850634713353902 461:0.0708544317191224 483:0.0628695760439045 498:0.0665341665258291 510:0.0585394950725696 546:0.0559439116354815 559:0.463585306607947 591:0.0680871880284839 597:0.0579022762234208 599:0.060713394344988 609:0.045854148247401 620:0.0920465403108087 641:0.102472370705932 680:0.0893077917313769 713:0.0647485614658503 771:0.0686953984516212 776:0.080747119942758 962:0.0876915236188488 966:0.0646779184382713 1001:0.0758991745886113 1260:0.0864485905005457 1468:0.0907769504762839 1535:0.0960935086264116 1963:0.278151183964768 2134:0.0882141112351641 2154:0.0884812846612947 2191:0.11603028065191 2206:0.0835731743392938 2741:0.101342932075226 3099:0.12031493409139 3170:0.100265832726301 3625:0.128345217298463
+-1 6:0.0265296592432598 13:0.0503775259866236 17:0.330429947649275 21:0.0229270587343855 27:0.0110354292928791 37:0.0537961887373105 42:0.0453496667490441 48:0.0231855541961145 50:0.0359741181494373 51:0.0257401610352289 53:0.204314329446747 58:0.0254232889930858 59:0.0706007476823781 63:0.00819197289369248 75:0.00768097999465985 83:0.0196400069045056 85:0.0232258992934835 96:0.0469633312982951 98:0.0245842101849942 100:0.0234197055702939 105:0.0402596199521178 111:0.0474029604540865 142:0.00589673744927175 146:0.0340323576208969 160:0.274811659171682 164:0.265620595989882 179:0.0206597646588593 181:0.0959695237832833 186:0.0215066095884748 190:0.0649897198428667 198:0.0329997617955656 199:0.0354313221268713 203:0.028731748438284 204:0.0227517916225454 206:0.0722954542398911 215:0.0241445148820883 216:0.0329739259169274 271:0.334624140000537 278:0.0327190372789476 291:0.0610097501972157 306:0.0297400470134753 323:0.0324211953692121 331:0.0296272183933812 335:0.250927641940209 341:0.031666292715291 355:0.0228098863870643 371:0.105908863994151 377:0.029169847588339 380:0.046571456653835 388:0.0788225498091736 390:0.0346200244675022 398:0.0294786596410825 403:0.0877892914124245 411:0.0567881819777104 413:0.0327695176489658 422:0.0345597406128614 423:0.0287146026210396 444:0.199152273798471 448:0.102966120907308 461:0.0414714476262238 463:0.09314291330767 485:0.0262275974759474 515:0.0273818458236031 523:0.0444241604576403 530:0.0311556767549781 546:0.0327442468326342 574:0.0851324775730588 591:0.0398517662738951 599:0.0355358485375999 603:0.0405763632953568 631:0.0254357802087653 634:0.0425800754170528 641:0.0599775829366947 651:0.0980720210652639 656:0.0374120100457695 663:0.0709400645370205 670:0.0540696713823645 671:0.023145365022216 676:0.0378976517142773 678:0.0410142779280751 685:0.0400536937021372 694:0.111542486511456 724:0.0443468445936531 744:0.0467640350426963 756:0.0503214641250702 774:0.0425152843301795 810:0.167313729767183 861:0.0505987855144519 863:0.0400536937021372 886:0.0326437732413302 909:0.0333683702627919 930:0.0331824328682 938:0.112488007130394 962:0.102652560772465 995:0.0593165169471175 1018:0.0411266999506128 1034:0.143353068983765 1043:0.0847738015520619 1045:0.0590641176368996 1048:0.0514780923642119 1080:0.0766408618138789 1094:0.039034801725663 1098:0.0425152843301795 1159:0.0385384459319458 1184:0.0499188743982647 1190:0.0410142779280751 1260:0.0505987855144519 1288:0.0497880684496177 1294:0.0430452811051922 1319:0.040002843058986 1320:0.10662610305625 1322:0.0851601508341056 1329:0.0510291477205162 1370:0.0623081043501726 1404:0.0513262803862327 1423:0.110638088736574 1437:0.0517885314115301 1445:0.0586860853967767 1448:0.0475721257820202 1500:0.0865024147103457 1507:0.0519472968740898 1591:0.0449820915808953 1607:0.049036010532632 1636:0.055319044368287 1658:0.055319044368287 1664:0.0449820915808953 1738:0.0511766528291844 1744:0.0521085239145527 1863:0.0456586837112137 2127:0.0671956419178025 2141:0.0627506790483074 2144:0.0529544319970756 2185:0.0473641401329235 2213:0.0526077687028163 2275:0.0596466696227147 2383:0.12068037788946 2604:0.0564886956971744 2728:0.0695160973827375 2729:0.0695160973827375 2783:0.0636966887297393 3096:0.0636966887297393 3414:0.145015369571585 3985:0.0704209231061696 4398:0.0679130943592491 5211:0.0647374501901999 6388:0.075121087391814 7986:0.0809404960448121
+-1 6:0.0241313734063752 17:0.0657472861880478 53:0.0619480927735027 58:0.0269791890904357 59:0.149842998061112 63:0.00869331996276173 67:0.0227503276812155 72:0.125146018329995 79:0.0545491133675383 83:0.0104209856592164 85:0.0246473195897165 91:0.0321367364006013 118:0.052671842850944 135:0.0366429416146708 137:0.0329253109752733 142:0.00417174438507472 145:0.06750021419958 157:0.0407575952271606 160:0.0364537595778106 162:0.0217826039034382 166:0.0600181798456162 174:0.0589629416936947 186:0.0228228097056774 190:0.0689670774325067 208:0.0301318035619899 214:0.0689148390717814 215:0.0256221542648497 220:0.0322643141053391 227:0.0571758980398002 242:0.0281816939949254 252:0.0290256689495752 253:0.0439476689137541 256:0.0273702197470608 257:0.0487347547224604 258:0.0381392463133746 271:0.044387883633753 280:0.0421326594512219 286:0.0450713900233627 287:0.0373318497171662 306:0.0315601318206001 319:0.0364850655521438 355:0.19364677422668 367:0.0686554859451736 369:0.0359645781682868 384:0.0435838332597179 409:0.0205399621779104 411:0.0301318035619899 414:0.0594332635387804 466:0.111491642228885 506:0.0225003252745065 507:0.0215048676668529 538:0.0352411640021338 539:0.0747315050087176 570:0.046659532801938 571:0.0317422040295097 594:0.038509594779124 615:0.106802254917298 628:0.0437037838814927 643:0.03272282183445 644:0.076645733996486 678:0.0435243433660436 722:0.103317224982754 730:0.038661285807468 771:0.042668461216998 787:0.0461964432381957 819:0.040394258752052 839:0.0640329961923975 848:0.0444522298717586 860:0.0552975549424997 928:0.0648215707670696 1003:0.0425049715815386 1007:0.0464255590504524 1035:0.0491219996677099 1039:0.0587045585927184 1149:0.0385851796537383 1169:0.0453247785877653 1280:0.0529738993227339 1335:0.0432316113860342 1446:0.0419768637075554 1489:0.0471429100104432 1645:0.0459719877332116 1652:0.0481782326749379 1682:0.0563838754574289 1792:0.0949546802101985 1859:0.0632970336294261 1942:0.0521660742441806 2135:0.168585697281056 2624:0.0510554378577498 2672:0.0632970336294261 2695:0.0670815484920181 2734:0.0665910077983204 3215:0.0814195890889287 3235:0.068133329546665 3320:0.0599457923442018 3810:0.0720693618726156 3944:0.0699267825798896 4941:0.0890687098238973 5377:0.801618388415076
+-1 6:0.0174970284066267 17:0.190686558069997 19:0.0531083616178894 27:0.0127367875923733 34:0.139442567723888 37:0.0206966915692317 42:0.104682664794963 48:0.0267601260603361 50:0.0830406664810018 51:0.0297085826929041 52:0.0356626565159818 53:0.033687707722055 59:0.0814854323495548 63:0.00945494877818381 72:0.0272220325070805 79:0.0593282054490915 82:0.0328100822788749 83:0.0226679533361561 92:0.0288765584505978 98:0.0851232484778596 100:0.0810911313211631 101:0.0850283666182661 114:0.0307151563774592 132:0.0530599440793865 137:0.0358099241843717 142:0.0215518629034939 164:0.306571953069901 166:0.261105685114964 169:0.0318849585375954 174:0.0320643664280715 179:0.0715347886841456 181:0.0369217909374144 190:0.0375046695220356 199:0.0408938530681465 200:0.0422578995989581 206:0.0417207079176257 215:0.0278669319889978 218:0.0496249043794168 219:0.0731493037259861 220:0.175455084211753 233:0.103459099319955 240:0.0393785357112462 242:0.0306507150715549 252:0.0315686313567561 293:0.0828033894704366 306:0.0343251405762944 312:0.0396475030318487 323:0.0374196479311371 330:0.04350368578007 333:0.0441291905931852 341:0.0730967202903176 342:0.0408630456846422 355:0.0263265406544424 357:0.0404925791013552 377:0.0336670321538209 382:0.0384204077088788 384:0.331815737779007 402:0.0333409770766925 403:0.0506619873105677 409:0.0446789698595841 410:0.389597689680011 453:0.0424281459199697 465:0.0743916497188227 478:0.0343033382734929 485:0.0302711683654181 490:0.0452681808931202 504:0.046466541017184 507:0.0233889265715145 540:0.049448615096502 565:0.0465267023681711 569:0.0613237125343453 574:0.0655050356618339 609:0.0309764383015434 641:0.0346122345535564 647:0.039512265945921 653:0.0446851797167183 671:0.0267137408262077 690:0.109332763838689 714:0.0452681808931202 715:0.0539737572044858 719:0.0941643431372437 725:0.0635950261238455 758:0.0458239359308491 772:0.0405291153986468 787:0.0502437511126251 804:0.0824130665812368 827:0.074726599276008 856:0.0328293319452175 883:0.051007397174124 909:0.0385128510238468 913:0.0456544907956723 936:0.0511839027726656 939:0.0635950261238455 946:0.0621813747673289 966:0.0436927001493028 993:0.0480692067429334 1003:0.0462288666289851 1020:0.0559177397049165 1073:0.0585630175214387 1094:0.0450528896606674 1103:0.0573149158846638 1117:0.0522040052852817 1193:0.0533189313064608 1218:0.0532131846806201 1263:0.0594145919204637 1332:0.0537514885488032 1383:0.127190052247691 1423:0.0638477126020463 1436:0.0587285672411804 1448:0.0549064332091043 1467:0.0537514885488032 1591:0.051917087294125 1738:0.0590666787375967 1954:0.0619611453885847 1969:0.0597728920917694 2047:0.060142218597697 2202:0.0613237125343453 2213:0.0607184331386951 2238:0.0673859451464102 2241:0.0611185423349818 2649:0.0724251000213662 3122:0.0907410786471013 3932:0.086702683549887 3993:0.0934192842329511 4375:0.088552825350286 5028:0.0824218122382878 5511:0.086702683549887 5627:0.0934192842329511 5672:0.193744183518199 6273:0.203477101283529 7536:0.0968720917590995 9021:0.0968720917590995
+-1 6:0.0219370916814556 13:0.437394696978988 27:0.0958133246335584 41:0.0505061479754592 42:0.131247041594586 51:0.0744949241796413 77:0.0827092357971751 82:0.0822720025710406 83:0.0284201956475011 84:0.0643738811890172 116:0.117432563962446 132:0.066524488092022 142:0.0369759478949648 188:0.121230477733723 199:0.0512711177644398 242:0.0768573418297952 253:0.119854435043375 309:0.0807210617583185 315:0.155368934139993 317:0.0653749088103597 535:0.208027316708898 608:0.119686770592722 643:0.0892419420854784 648:0.160099542899736 697:0.117588097595708 701:0.315282772224957 819:0.11016354635838 834:0.11053131905375 904:0.133698392349192 998:0.121406992556753 1001:0.128568522182391 1047:0.123610099588298 1054:0.143349134606038 1175:0.116216410981018 1366:0.118862179530376 2367:0.377969320351409 2653:0.196548141566516 3697:0.203806080322287 4810:0.222048156202962 5087:0.222048156202962
+-1 6:0.0339439179369338 13:0.0451195929277947 17:0.184964233022361 27:0.0197673096376496 37:0.0642419303543874 53:0.313697003123416 59:0.0421547364417044 72:0.0422481996838699 85:0.0416035960869607 91:0.054245403679578 96:0.0841234796355371 98:0.264220094403082 140:0.0479727759981275 142:0.00528129137155065 144:0.0403607395772359 160:0.0615323497472388 162:0.0367680814630651 164:0.317196816889709 179:0.222041909316296 186:0.0385239033034946 190:0.0582067032148455 220:0.108921498516326 258:0.128754755088644 271:0.0749248036944415 291:0.0546421254242563 293:0.0642548298320183 306:0.10654424079958 319:0.0615851928609302 323:0.0580747509387329 335:0.179790536941887 339:0.0528039079734014 355:0.122575227944325 377:0.0522507456718352 384:0.147135203749724 388:0.0705957922956568 409:0.0346705566494042 411:0.0508611648500596 426:0.0611149163661607 448:0.0614796561192173 502:0.0468600054627058 506:0.0759591274124886 515:0.0490479718079308 523:0.0795751675673783 539:0.0630717538683306 554:0.0861793432322341 574:0.0508314327047467 629:0.165831568477076 641:0.0537176860891355 653:0.0693507509070269 670:0.290558321164047 694:0.0999007292832764 723:0.0696747101174494 789:0.0697565879859139 841:0.104582009653076 861:0.181271037855972 862:0.065323123046184 882:0.0509805702915266 938:0.2014951306791 942:0.0878361845169957 1007:0.0783643105618763 1043:0.0759259082708091 1110:0.110849540280155 1350:0.0961627990980225 1395:0.0724917173808886 1576:0.0752525632078628 1698:0.0983144790259969 1952:0.0951735125521352 2076:0.0846579114312569 3381:0.127917457333279 5109:0.126142096973701 5894:0.264147987127699 6479:0.137432700772679
+-1 6:0.0278885289917176 17:0.0379919341121652 27:0.0609035308927183 34:0.0555644078850323 37:0.065976949850816 41:0.0642082456748028 42:0.041713447909802 53:0.107389734032234 63:0.0301405023741881 65:0.0498799871970181 67:0.0394386901912325 75:0.0282604201416963 81:0.042450355058238 83:0.0361304707923357 100:0.0430837418839444 119:0.291793445110071 142:0.0126558280462787 160:0.315970950054055 164:0.0814408843465798 183:0.122672851617935 203:0.0528559690844103 226:0.162183500754056 290:0.0725024142686129 294:0.0666279321126525 324:0.0738727082427553 325:0.0626071624615394 337:0.159909322136857 341:0.0582544634334573 347:0.0572753024959753 359:0.0776275940136185 364:0.0645993927389266 384:0.0755544852523422 409:0.0356069247100604 444:0.0915919409637805 496:0.116929838931526 535:0.0661160551424605 555:0.0803474290059015 644:0.0664343696478469 670:0.0994685333936182 676:0.0697178980139097 694:0.307796420637874 714:0.0721529934055525 717:0.0706550777477752 732:0.15258476582627 823:0.0794393817883433 827:0.0595533962090423 841:0.107406517334007 862:0.0670873429478513 869:0.0933436452198106 912:0.066306407562725 1014:0.0854998381628606 1047:0.0785724902848336 1056:0.0684642147374138 1129:0.0813007352919344 1156:0.0977439194329781 1194:0.320602803366006 1340:0.0936075150639517 1438:0.0964680960725373 1599:0.0844838333749279 1636:0.101766925364461 1734:0.0964680960725373 1842:0.106867601122002 1994:0.099832930323514 2034:0.0938750755149138 2057:0.110355459979586 2141:0.115438430728554 2200:0.10058323277912 2339:0.109120821264541 2402:0.192324010752255 2410:0.0974168984714634 2425:0.110355459979586 2470:0.103918658476422 3542:0.12122114252073 3870:0.133387773238102 4522:0.138195483692818 4976:0.127884340280347 5985:0.141144426338397 6108:0.133387773238102
+-1 6:0.0232730160220958 11:0.0116201328369162 17:0.0986356671105873 18:0.0138422004792853 25:0.155259393634612 34:0.020608255663517 37:0.0122350790926984 50:0.515449329112423 53:0.0199148625785098 59:0.0321140122440848 63:0.0726621737831799 72:0.0482778205889603 77:0.0389982490302315 78:0.0198660980375213 79:0.0350725275906715 83:0.0603018557117598 86:0.0401764543749163 92:0.0170706982507886 94:0.0310471774900336 96:0.0160215831189374 98:0.0335477025162915 106:0.0181005394737786 111:0.0323431260093093 113:0.0276853263696972 118:0.0169327652421623 122:0.0834994459483271 132:0.0313669752623921 135:0.117798484837399 137:0.0211694344109891 138:0.0216840249641522 142:0.0140817413487534 145:0.0216997397275739 148:0.0454616406184504 157:0.026205226719316 158:0.055681046549667 159:0.0155566051507286 166:0.173649966494866 168:0.0576159950926361 171:0.0223587014066632 173:0.0193281472590783 177:0.0269891593037186 179:0.028192389896465 186:0.0146739987817173 190:0.0221713019403447 197:0.0288341313234268 199:0.024174855436208 203:0.0392074482819388 213:0.0266968666459731 216:0.0674945086173962 219:0.0864860466871696 227:0.0183807136150049 242:0.0181195106422586 246:0.37420257415009 249:0.0590207546593232 275:0.0173890728946867 276:0.200882271874582 283:0.0387693662364835 284:0.0314074615254298 287:0.0960105305759402 288:0.0268577627192448 295:0.0219560280968235 296:0.0466369534014329 299:0.0214069532517943 301:0.0468761235388771 306:0.0202916880900566 309:0.0380608046742843 327:0.0434941878750144 333:0.0260874611479958 341:0.0216059690307809 342:0.0483132866185633 355:0.0466896807250727 357:0.0239376378739175 368:0.0315200784381656 373:0.0369199811205062 375:0.0183316116004601 377:0.0199026399867113 390:0.023621305569772 393:0.0404717672414606 396:0.0262648507070313 402:0.0591296667194314 403:0.119797585940658 432:0.02429136658699 448:0.0468359808655191 454:0.0516026501695895 455:0.0377615978697826 459:0.023621305569772 466:0.0238946364526909 475:0.10476878921128 478:0.0202787994166043 479:0.131004701545796 485:0.0178951373914217 495:0.0284982005232719 502:0.0178492728956838 505:0.037201786066535 507:0.0138266237160927 510:0.0233780172972598 513:0.0193507075731078 514:0.0274692118113478 516:0.0362521937675796 532:0.0298992534299334 546:0.0223414590827842 548:0.0878331796787052 550:0.0210679689647957 567:0.0841824662072378 571:0.0204087520013883 576:0.0253136758486427 577:0.0377442844408641 594:0.0247598676131765 615:0.0343344263644987 629:0.0315831474115206 643:0.0210392433677271 662:0.026956081328729 671:0.047376373771216 681:0.056592088068533 712:0.0712384537334656 716:0.0247598676131765 721:0.0342416771642428 726:0.0238306190609489 758:0.135446643386757 763:0.0299493964851645 767:0.0247356930998944 774:0.0580165114263054 792:0.0283762167831627 796:0.0227308203092252 808:0.0269891593037186 812:0.0289643223666888 827:0.0220877295632492 829:0.0191832282130512 833:0.0336243129298344 861:0.0345236432521347 872:0.0295103773296616 891:0.0363755918828125 895:0.0268903844446848 900:0.0377442844408641 908:0.0275047768621768 912:0.0245923505926549 942:0.0334573590437854 950:0.0281774583303891 952:0.024090228976146 953:0.0282562948390759 987:0.021111276603531 991:0.0274692118113478 997:0.0245923505926549 1009:0.0691411260581394 1023:0.0365011741485273 1050:0.0305257082649249 1068:0.030471338552255 1102:0.0309763493931892 1106:0.06626958765205 1116:0.0301535893623629 1153:0.0722618102509319 1172:0.235514718609033 1176:0.0291867610471212 1183:0.0368918349835047 1199:0.0374486077926008 1207:0.0294632328852173 1218:0.0314575651458058 1227:0.0282562948390759 1228:0.0318411835853817 1239:0.0346201782485415 1313:0.0337952901858718 1318:0.0342416771642428 1320:0.0363755918828125 1328:0.0770846793336822 1333:0.0367592103223884 1335:0.0277959033524489 1341:0.0297021515115348 1372:0.0722618102509319 1406:0.0438065430004176 1441:0.0337092865536579 1462:0.0317757894562515 1480:0.112784718068303 1502:0.0370269859799813 1549:0.0818593635634493 1551:0.0276853263696972 1568:0.0383753857807921 1639:0.0349179231704777 1651:0.0354437350019316 1652:0.0309763493931892 1714:0.0398359499074844 1751:0.0352287120987554 1771:0.0368918349835047 1776:0.0299493964851645 1849:0.031973808246498 1863:0.0311530028197569 1910:0.0316467820334417 1920:0.0388885162634109 1942:0.0335403449346405 1943:0.0310347465358849 2066:0.0346201782485415 2099:0.0751898120455353 2180:0.0416772370593951 2273:0.0438065430004176 2307:0.0362521937675796 2347:0.0480483237311895 2368:0.0416772370593951 2394:0.0398359499074844 2399:0.0375949060227676 2403:0.0388885162634109 2500:0.0411702205045863 2545:0.0523489862337878 2606:0.0512552543595474 2611:0.0313341670305729 2713:0.041419200885534 2986:0.0458477085187314 3011:0.0441704798385122 3273:0.0869207328076956 3912:0.047430959496781 3942:0.050307820715474 4585:0.0402534357754899 4622:0.0487245697374243 4817:0.041419200885534 4831:0.0523489862337878 5176:0.0441704798385122 5557:0.0480483237311895 5916:0.102510508719095 5982:0.0494721250150948 6346:0.0487245697374243 7563:0.0552258474524807 7876:0.120287748378975 9575:0.0650619009264941
+-1 6:0.0366404203299183 13:0.0487038901360997 17:0.159726222683708 21:0.0443307577287504 33:0.0811024653503507 34:0.116802331791411 37:0.0346726523344099 53:0.225744713619152 59:0.0455035056645702 72:0.0456043936199531 97:0.0457261311905596 98:0.0475349532746275 100:0.0452833180977669 135:0.133530347596195 137:0.0599914748312785 145:0.122988584809453 160:0.132840950347291 164:0.0855987272870549 192:0.059180601753586 224:0.0696915823530638 243:0.13819449132925 296:0.0660815863539843 323:0.0626882049651428 341:0.0612285582198941 377:0.112803082279702 382:0.0643647529161923 384:0.0794118068623435 402:0.167565927549734 403:0.0848727665827031 434:0.0634106872632366 439:0.157963391520054 448:0.132727191135228 463:0.0900485311227381 466:0.135428699087967 502:0.0505825609172712 516:0.102734089525671 567:0.159041575530075 569:0.102734089525671 572:0.0794118068623435 631:0.0491815118170996 653:0.0748599695577294 656:0.144676451759352 670:0.104546751081064 706:0.074601632890686 740:0.104929751752983 763:0.169745533165406 771:0.077743955679303 776:0.0913831298101014 789:0.0752980463048955 792:0.0804145761244485 806:0.078665044691005 819:0.0736002511585013 862:0.0705123872300807 938:0.217501889329071 942:0.0948138846805645 968:0.101720080016936 969:0.0819574569483114 1000:0.0889711165800379 1003:0.0774460698261305 1026:0.101393130905526 1086:0.0923937408691838 1093:0.0930254240436275 1114:0.0896829405543606 1190:0.0793034134606303 1473:0.10380196492342 1489:0.0858966131402273 1607:0.0948138846805645 1791:0.102734089525671 1865:0.0869754043511231 1873:0.0970365421153193 1969:0.100136038631466 2075:0.239310839531801 2731:0.106962484027598 2765:0.111236441493331 2866:0.100443020584012 2880:0.1102050909509 3198:0.138079210918842 3999:0.127409907238967 6219:0.145250848094713 6542:0.340880124111509
+-1 4:0.0245097640933748 6:0.0169989889537328 10:0.047792731311994 12:0.114593861033006 17:0.0308764686487139 34:0.045157814102894 35:0.0614882407933799 37:0.0268101015546112 41:0.0782741362435201 42:0.0339009844251217 57:0.0846069992269831 70:0.0651916570925038 79:0.0384263158153162 83:0.0146818183221371 91:0.2263824846946 109:0.187071105876814 115:0.152586642073785 119:0.533573522469129 127:0.0563538491097526 132:0.0343664223939332 144:0.0336875159546326 145:0.047549527174865 158:0.0406703408931367 183:0.0498487974558877 199:0.0264865606671708 203:0.042956635677298 204:0.0340160441622556 219:0.0947562200935668 226:0.131808340201554 227:0.241660292474246 235:0.0860118881084304 246:0.0585693511661418 247:0.0833831948289656 252:0.122680218205445 275:0.07620756788165 278:0.0489180032716321 284:0.0344107801302168 325:0.0508815393083575 353:0.0635643035651378 389:0.0482908591921354 393:0.266051126016588 411:0.0424518063916737 454:0.05653712089035 466:0.0523590918418714 501:0.0589235208323885 530:0.0465806339115779 544:0.0919119559531909 570:0.262948940146749 655:0.0429054086918391 715:0.0699165809712025 796:0.0498088811925727 819:0.0569102758269818 876:0.0546854332019601 906:0.0663026564756142 913:0.0591399611170547 925:0.0837325887691661 1021:0.0606654363180284 1041:0.08083918664931 1048:0.0769645350265296 1080:0.0572926076184448 1160:0.0717659715553115 1201:0.0722648606475278 1280:0.074633359175935 1393:0.129746539330691 1394:0.0734952383275585 1538:0.0720967792697227 1705:0.0848305066403384 1754:0.16052658414039 1865:0.0672524097930874 1896:0.205377151614677 2280:0.0769645350265296 2374:0.091325192882881 2460:0.103933029881288 2703:0.0877411548806775 2723:0.0738654314361067 3263:0.0945092086233139 4130:0.0994603285263439 4326:0.0945092086233139 4349:0.0976291113820845
+-1 6:0.0137194146345072 9:0.0524754205798685 12:0.138728311874309 17:0.0373793179989141 34:0.0546684374010572 41:0.0631728941765654 57:0.0512129797779029 83:0.03554787058774 100:0.04238902088292 109:0.150979924432285 115:0.0923613493717986 119:0.215316228884927 142:0.00355764402656607 144:0.0407823959983245 145:0.057563865777161 162:0.0371522046927781 183:0.0603473821169863 220:0.0550297111964856 227:0.195037349702051 252:0.148517725282956 258:0.130099880817198 275:0.0461287679329656 277:0.0621219459295757 284:0.0416579858180014 288:0.0712467830331115 295:0.0582437333457562 296:0.18557388426492 306:0.0538286645034627 325:0.123195256537898 345:0.0503400975446328 349:0.068003168056181 391:0.0709895336498833 393:0.322083777017598 394:0.127810446091372 405:0.065237223415248 411:0.154177563710039 438:0.0764895840291419 460:0.0934527731767284 623:0.095218609792263 688:0.076150443558774 715:0.0846416131084427 719:0.0738342327201451 744:0.0846416131084427 799:0.0692033697566394 811:0.0779107710898629 834:0.0691260727819867 848:0.151634611781682 867:0.0602990591459641 868:0.0978646133052521 873:0.0793150808666604 913:0.0715953446033045 1080:0.0693589225996561 1145:0.0901150301354796 1169:0.0773055167881793 1301:0.0901150301354796 1371:0.205393079098136 1381:0.105144371811313 1421:0.0961678085711259 1438:0.189825115467893 1440:0.0849967516986641 1449:0.0878981429409272 1553:0.0955297207907725 1561:0.0913297604255243 1682:0.0961678085711259 1705:0.102696539549068 1749:0.107361259005866 1754:0.0971674303841253 1776:0.0794480975819397 1952:0.0961678085711259 2005:0.120407527511004 2218:0.101800094561745 2257:0.0989613382753696 2307:0.0961678085711259 2435:0.100944411446065 2694:0.201061458296141 2786:0.117172998600808 2803:0.236381280632903 2904:0.122920826924034 3495:0.11926646379983 4189:0.106782081404666 5299:0.142300104156032 5369:0.122920826924034
+-1 6:0.0237102773144323 12:0.10655740491466 47:0.0374075381840708 58:0.0530167963737813 72:0.147554641806702 79:0.0535972231426764 92:0.0521742849005365 98:0.0512670121376723 119:0.165384688071287 183:0.0695293593452528 203:0.0599161366111789 216:0.0687626182614424 224:0.0751631999666904 227:0.337069020166226 240:0.142298601454148 252:0.114076666659929 277:0.0715739266599944 283:0.0592466672926543 291:0.0636137500521811 296:0.071269776370952 325:0.0709698329982992 335:0.104655064110038 393:0.123696493456946 429:0.0901944848242497 505:0.0568511186985143 538:0.0692524007898558 597:0.0706739817503613 762:0.210451539363618 767:0.0756013069908554 796:0.0694736839356663 800:0.0696972483912255 909:0.0695851780636449 953:0.0863615509751865 989:0.191165017138717 1023:0.111560911642345 1025:0.0963368649811462 1026:0.109353696905489 1030:0.11832202742414 1116:0.0921603755776675 1179:0.0985577917387711 1229:0.0892053953402895 1257:0.120548140253802 1289:0.107033946575542 1375:0.099205169965979 1446:0.0824887222567553 1553:0.330194287739137 1564:0.126592196499905 1989:0.128199269385578 2219:0.11358907659633 2478:0.131821930782198 2783:0.132830743378134 2931:0.119969824378349 3311:0.163951355131721 3993:0.337580696059248 4321:0.261715938824862 6539:0.159997610050294 6843:0.163951355131721
+-1 27:0.19597017277336 41:0.154952851016104 51:0.114275205599453 57:0.251234246239741 74:0.137934629010152 82:0.252410486014126 83:0.130789731108247 113:0.360283080724226 125:0.180380128938642 137:0.137744250238073 142:0.0654474231395896 181:0.142021088454038 207:0.198979701726834 254:0.162384362006855 286:0.0942789094781562 351:0.119406774898761 409:0.257789063153215 609:0.119152060946116 685:0.177821112951266 838:0.443236514903507 964:0.201555409532459 1045:0.174812793576266 1179:0.209821491061894 1332:0.206757167404631
+-1 27:0.248558134285592 41:0.19653394700702 51:0.289881174231057 53:0.328707443655817 59:0.265031074873594 106:0.298760889549768 142:0.0442720145531248 296:0.384886254475666 1045:0.221723240866967 1109:0.590555168799087
+-1 6:0.0373149878957926 18:0.0998730436486494 51:0.0633579244328723 53:0.287375976462243 56:0.344496159113689 78:0.143336146546851 111:0.0583398289978441 118:0.0610859091606702 142:0.00725723986730539 168:0.138568642593073 177:0.0973649200217268 181:0.0787411524918604 186:0.0529372812877491 204:0.112004450349848 242:0.0653671603721745 276:0.0724694167563664 279:0.105621055951069 284:0.0566520977014576 287:0.0865908560319809 290:0.388034336504804 291:0.0750859937778403 384:0.101092269997506 414:0.0689274333523161 473:0.0821343222625752 586:0.137150906227752 594:0.178645248099545 643:0.151800522925822 715:0.230213959761654 744:0.115106979880827 876:0.0900312196608271 882:0.070054500149459 952:0.0869068647590061 1283:0.115589944808577 1333:0.132610932145933 1465:0.147656144022362 1489:0.109347513304861 1497:0.113261396442974 1625:0.1259683845117 1659:0.131227006908846 1706:0.140292523866386 2237:0.134580856336568 2241:0.130344285580207 2485:0.149422111900619 4194:0.184906231618819 4361:0.199230370973505 4491:0.184906231618819 5470:0.199230370973505
+-1 6:0.00966443418646333 25:0.0725327548419481 56:0.267669425476542 85:0.059226400595487 91:0.077223132396421 92:0.0637995417717147 96:0.119757217476259 111:0.120878278588484 132:0.0586150202852096 158:0.138733839043917 160:0.0875967449567125 177:0.403474063236169 204:0.0580174187390882 215:0.0615688844819661 275:0.0649894261041552 284:0.0586906763887828 331:0.0755498628028883 394:0.27010240833871 401:0.442224524454148 432:0.0907858620948393 497:0.151258030969964 576:0.0946066116321001 599:0.271850881775624 819:0.0970655872699829 1003:0.102137535281456 1245:0.0945089413695095 1337:0.248865916205222 2050:0.124432958102611 2076:0.120518028430152 2154:0.132061552014558 2648:0.171349920888156 3472:0.153868410316006 4060:0.224780003564746 6820:0.20639951041605
+-1 105:0.275681049861293 272:0.40843546267641 398:0.201857539838248 676:0.25950727861553 1607:0.335778104232558 1991:0.496502318912414 3177:0.538357176569866
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/example1/train.dat	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2001 @@
+# Reuters category"corporate aquisitions" (training examples: 1000 positive/ 1000 negative) 
+1 6:0.0198403253586671 15:0.0339873732306071 29:0.0360280968798065 31:0.0378103484117687 41:0.0456787263779904 63:0.021442413608662 74:0.0813238108919922 75:0.0201048944012214 81:0.0603996615380116 142:0.0102897706466067 172:0.0777948548082322 174:0.072717200608936 179:0.054076743737027 180:0.0764456665578607 186:0.112586705083256 187:0.0925011727805475 205:0.156990770998115 229:0.0519505660963924 255:0.0923321093879611 308:0.0732972342194965 318:0.119740882706743 408:0.058414185072804 409:0.0506626198519805 465:0.0843545829662396 480:0.0729642744872502 519:0.118611296605205 664:0.112142083701314 679:0.374387819227881 720:0.0987664035972632 768:0.123975200617516 922:0.141018083523918 977:0.136393581474495 1018:0.107648758381437 1305:0.180449632267364 1581:0.141526866911118 1677:0.156124608446181 1817:0.141018083523918 2162:0.170921341813635 2314:0.164249324532582 2358:0.508349039100422 2419:0.150582824316425 3266:0.338899359400281 3374:0.166725496161846 8311:0.219691455487068
+1 6:0.0292418053787394 11:0.0438009834096617 15:0.0500925330294462 26:0.0210944325344804 27:0.0141908540227881 31:0.0371513682217675 63:0.0316030546001617 67:0.0275682881016999 75:0.0197544949024337 81:0.0593469819910562 92:0.0321731851678454 94:0.0292573442413133 97:0.0304107371257703 142:0.00631902168102332 153:0.0422702792713471 173:0.0364278046265029 174:0.142899688014398 176:0.101048732113733 185:0.0283803505729403 198:0.0424355763603897 199:0.0227812034671483 205:0.0771273234149142 208:0.0365129792089388 209:0.0306153157853223 215:0.0310482969941045 219:0.040750113932403 226:0.0377896379794415 229:0.0255225710876498 284:0.0295968583260194 292:0.0480586954431413 308:0.0360098842315623 327:0.040986799124144 346:0.121812855534701 355:0.0586641007620941 408:0.0286980547677093 412:0.0496717768325293 427:0.0517712881475387 432:0.0457819957743755 436:0.0430481581615391 440:0.0550083572343217 483:0.0473197027754143 505:0.0350571468755799 508:0.0378131601741308 515:0.0352112968734238 571:0.0384644229274552 696:0.107576293527448 732:0.05332962078396 764:0.0450747385987509 840:0.0615861912924126 852:0.0967322393087606 863:0.0515064802025663 881:0.0555294243582368 947:0.177864441189829 998:0.0539445504675195 1235:0.0571266200351702 1526:0.0785491867700354 1552:0.0695301282155265 1717:0.491459129051904 1936:0.065620209870441 1960:0.0948152680980665 1984:0.0839712138793791 2055:0.0750789085415005 2387:0.0661975238773467 2393:0.076277234967193 2657:0.0785491867700354 2771:0.0703093212784121 3253:0.642819178775732 4326:0.0812877722487952 4687:0.0986622575541595 6813:0.0986622575541595 7903:0.11335330122894 7909:0.22670660245788 8317:0.11335330122894
+1 6:0.028662086648757 26:0.124057412723749 29:0.0520475554655016 31:0.0546222636376468 63:0.0309765241093428 67:0.243195721633858 88:0.109430583121918 142:0.0185812412685586 192:0.115735540157124 255:0.133386467807302 345:0.105168644302219 375:0.203188110919707 377:0.110300717398829 386:0.114136564392033 404:0.120347554807498 586:0.210694489261706 643:0.116599789703191 644:0.136554183970595 726:0.132069633990058 764:0.132543396003188 772:0.132782434863458 827:0.122410515296684 833:0.186346426437887 1155:0.166825648669573 1242:0.18192359288375 1296:0.145893418170318 1744:0.197039341839648 1880:0.200237996480307 2383:0.22816595487613 3568:0.481715952854602 3997:0.254088660805048 8877:0.306062441818476
+1 6:0.00499945516847248 12:0.0674048171189473 26:0.0432780404880932 27:0.0145572144203208 28:0.0369184512541006 31:0.0190552461586912 41:0.0230206652916529 63:0.0108063132637611 64:0.043361556532941 67:0.141400045569201 83:0.012953904380954 85:0.0306380827738335 110:0.0482494645544778 142:0.0025928630761643 153:0.043361556532941 162:0.0270770709566981 185:0.0291130363226015 232:0.044375547221341 268:0.240529117573271 275:0.0336193217278641 287:0.27843424456071 306:0.0392311191305391 394:0.0465750625897046 427:0.0531078496875315 437:0.0449688329378449 485:0.0345977261105373 505:0.0359622051789825 575:0.052179735819817 643:0.0813528238077116 681:0.0547064132616575 683:0.0604624475891439 772:0.0926436150159728 780:0.0507216288522374 801:0.0604624475891439 858:0.0501570391255536 876:0.0482494645544778 1045:0.0519423396630472 1047:0.0563413929463151 1128:0.451112792854542 1159:0.152512169477435 1215:0.0586014383366039 1242:0.190394828790148 1373:0.116001143489098 1410:0.0689541760960052 1431:0.0583982110053058 1509:0.0631761408111786 1688:0.0673143042593838 1782:0.0615604409525493 1872:0.0745161818143898 1880:0.0698540129820912 1969:0.0683160334104659 2021:0.0729732545081893 2024:0.0486896390243884 2026:0.120459880860754 2160:0.0774148341615854 2275:0.078681973859973 2301:0.088640082913652 2395:0.0861390698272134 2410:0.0698540129820912 2694:0.219804803697158 2949:0.0745161818143898 3793:0.168048986785059 4055:0.0861390698272134 4107:0.0861390698272134 4130:0.0877547696858428 4474:0.0942020886320366 4923:0.0846937770538968 5076:0.27868398685539 5644:0.414841600840706 5686:0.0990948106890539 5975:0.0972630812639826 7600:0.106771392842122
+1 6:0.0118820031866799 11:0.0266968857281144 27:0.0172987717963958 28:0.0438712960378978 29:0.0215765595672989 31:0.0905756679281178 63:0.0128414641505328 75:0.0120404486834093 83:0.0153935106874325 96:0.0368090778059702 142:0.00308117647777827 174:0.087097967774442 180:0.0457818930500336 185:0.0345958888220983 308:0.0438963552677035 455:0.0433780352337234 457:0.0409661780507644 480:0.0436969518542984 496:0.049818357906757 574:0.088967226249997 609:0.0420713883588981 886:0.0511712928322098 987:0.048502486758891 1010:0.132294008008531 1154:0.0806953448468842 1331:0.0671598157697475 1497:0.0721303877799178 1649:0.067476350487871 2240:0.242086034540653 2369:0.154892028125575 3708:0.185965196856882 4234:0.189174545185991 9162:0.747388243605257 9274:0.448432946163154
+1 2:0.0218536049648761 6:0.0267664363140353 11:0.0962235717863764 15:0.0366816912369227 26:0.0231705030945346 27:0.0311749772373954 28:0.0395313225543984 29:0.077768382783337 40:0.0334483675679501 63:0.0694267241569889 72:0.033314767856851 75:0.0650960746897972 80:0.0348557838345936 86:0.0415864645861139 88:0.0817544589780968 96:0.0331677351501258 98:0.034725073786259 103:0.101919806037908 107:0.153622818307328 114:0.0375897098842923 142:0.0194345949477767 150:0.0933705150501788 173:0.040012954055333 192:0.0432324136459265 204:0.0321367917422345 205:0.0423590177867389 209:0.0672568240918016 218:0.0303658841214132 227:0.038051585572227 229:0.028034449914698 252:0.0772684129985729 255:0.049825826562744 320:0.0508132617535666 322:0.278366326368734 346:0.0892009504247896 357:0.049555479457162 385:0.0560106319534543 415:0.0465755052479515 473:0.0471326559113915 477:0.0572383908149385 499:0.0398737260484466 513:0.0400596582115377 530:0.0440072374111824 546:0.046251084691455 557:0.0503819224301654 571:0.0845000242612158 582:0.0451523712057728 609:0.0379094709691339 717:0.054249821189513 737:0.0630814869709357 764:0.0495109014419107 799:0.0540060239785662 1001:0.0627489042021682 1013:0.0663311140263929 1036:0.0605160225399869 1080:0.108254833549783 1140:0.0543732542247166 1232:0.0606104823173039 1314:0.062423685497993 1466:0.0653831435243445 1509:0.0676473772683354 1805:0.0775257660735027 2024:0.0521356059083474 2161:0.213236448308871 2223:0.0679566191061606 2275:0.0842506221744569 2298:0.14959574007631 2629:0.0886350199454596 2647:0.0868341825110468 2830:0.162520140338019 3502:0.0906879055143469 4189:0.083332295365116 5392:0.106108159788554 7546:0.222100827292903 8947:0.71132188559158
+1 6:0.0262782955619474 15:0.0300106045971991 28:0.129367959914589 29:0.0636250976215934 31:0.0667725280308552 57:0.065395881435875 60:0.0664849997686554 63:0.018933496038454 73:0.0951840519537047 75:0.0355049525157269 83:0.0453924833183933 117:0.452164097447478 142:0.00908579301424474 144:0.0520766560536685 158:0.0628712237830073 159:0.0526963588694181 172:0.0686922937970356 297:0.342282732394621 337:0.0669673092948151 340:0.100285902824916 360:0.215717300887297 365:0.0928099081760411 425:0.125891708807224 451:0.0994873481462341 457:0.0604006646549388 533:0.109708354026946 565:0.0931695301197929 574:0.0655867822395732 850:0.080295786738277 876:0.0845367910130138 963:0.0743185411995981 998:0.0969550835033273 1076:0.120061913331191 1331:0.099020648339937 1479:0.137856899389667 1482:0.207550497202734 2239:0.142084305765977 2718:0.511237306984705 4160:0.150922307869689 5731:0.187071732426619 7095:0.193985965295729
+1 6:0.00836739727541643 15:0.086002376179011 28:0.0617890026065659 63:0.0180861140091227 75:0.0169579516055493 80:0.0544809528000467 159:0.0503378959935475 245:0.0967476833703794 337:0.0639701399218772 496:0.0701649352664746 513:0.125229623787299 527:0.0798064058983121 530:0.0687850325110049 850:0.0767020919143078 1530:0.113652554708543 2156:0.134858756397503 2340:0.2322932741287 6684:0.370607971964882 9154:0.842106403099639
+1 6:0.0236661056583824 15:0.0270274050915888 17:0.0429864253331219 28:0.116508157879977 29:0.0573004546389972 31:0.0601350152155156 57:0.0588952139622627 60:0.0598760686557226 63:0.0170514147948571 73:0.0857222959997184 75:0.0319755882055684 83:0.040880250538968 117:0.407216795316619 142:0.00818262116576081 144:0.0468999841179208 158:0.0566215195126679 159:0.0474580854711746 172:0.0618639469628076 199:0.0368747661983025 297:0.308258170351847 337:0.0603104342780755 340:0.0903169981746278 351:0.0559835106993772 360:0.194273955976524 365:0.0835841536168562 425:0.113377462975962 436:0.06967984679841 451:0.0895978237001979 457:0.0543965459323868 533:0.0988028120731175 565:0.0839080273969436 574:0.0590671383011126 850:0.0723139964839555 876:0.0761334243850905 963:0.0669309181130238 998:0.0873172784322317 1076:0.108127177417018 1331:0.0891775161159204 1479:0.124153255640264 1482:0.186918972148349 2239:0.127960437339961 2679:0.113377462975962 2718:0.613890455469115 4160:0.135919899212302 5731:0.168475895815555 7095:0.174702820436343
+1 6:0.0182213786943214 28:0.134555678256906 31:0.138900277998537 42:0.109016367444275 60:0.138302161426801 159:0.109619017166619 245:0.210683934139155 355:0.10966567712592 404:0.153017356897714 515:0.13164680490938 561:0.161470521232378 1109:0.252115371302647 2340:0.505856669251095 2837:0.274026427395922 3117:0.633612864783083
+1 6:0.0210806353536847 11:0.0947293657931811 29:0.076560757858605 31:0.0401740472021078 41:0.0485343136661064 60:0.160004217165709 63:0.0911315100363774 75:0.0854469752959652 94:0.0632755123064438 106:0.0737793900005246 134:0.150978581545661 142:0.0273325788454631 174:0.0772630872864225 176:0.109270175715136 180:0.162449273582265 276:0.245644139540094 289:0.0917045167151049 328:0.106936068666223 346:0.175631590160649 351:0.149602303637312 457:0.0726807633152636 475:0.170818717758098 480:0.0775256068893023 485:0.0729421530572235 505:0.0758188750919584 507:0.0563585336789496 513:0.0788751850678619 574:0.0789212738600944 727:0.112847823927056 1045:0.054754842525595 1073:0.141114889784752 1424:0.0980148147462848 1544:0.41432229999722 1746:0.123120555143064 1808:0.211959850046384 3956:0.560637870324378 5178:0.181606421054065 5491:0.193332760268364
+1 6:0.01501398237563 28:0.110870676460927 31:0.0858378924349753 42:0.0449134460932324 81:0.0457068842084074 159:0.0451617306073116 172:0.0588705355325868 179:0.0409220747503775 180:0.0578495498256344 205:0.0594006556417837 229:0.0393131095218914 255:0.0698714682342651 355:0.0451809539552907 365:0.079539766326591 586:0.0551837587260035 768:0.0938170843188041 2340:0.208406928041559 9152:0.944392434587281
+1 6:0.0277096230214831 29:0.0335453162409892 31:0.105614245921966 37:0.0437024701450156 59:0.0573540085315561 142:0.0143710176340651 176:0.0478770417456197 274:0.0998205550092363 307:0.0887005793508509 327:0.0776784290762723 415:0.0803611954734464 422:0.0842260056597031 493:0.0824579677763389 515:0.0667326623526115 643:0.0751500581390212 720:0.0919601791265408 824:0.103301682285505 912:0.0878413992609688 1009:0.246965138063703 1047:0.104091259709848 1239:0.123659789598329 1430:0.277811726121149 1449:0.118354146055931 1639:0.124723304469231 1651:0.12660145136897 1751:0.125833411216932 2092:0.129929950286515 2261:0.140205808788836 2412:0.13592084219398 2480:0.154057076578997 2957:0.146196700696301 3369:0.150817346177436 3899:0.312945118397246 4212:0.151851913717489 4248:0.171623772717045 4812:0.176709447491264 5376:0.171623772717045 6299:0.54923581771369 7238:0.19160595147472
+1 6:0.0177035469591877 11:0.0397769267291206 15:0.0303269753459283 26:0.0383129159210302 29:0.032147915592684 31:0.0337382208482072 33:0.0489828340841741 37:0.0418819519041244 47:0.0418961427625015 60:0.067185882321286 63:0.057399276883347 75:0.0717584889778128 92:0.0584347806575286 97:0.0552337216320805 134:0.0633960116329693 142:0.00688618134588309 174:0.0648856484179883 180:0.136425126429924 242:0.0620249748690407 345:0.0649589143963873 346:0.0737478271351621 457:0.06103740635865 547:0.111108994749159 574:0.066278195814287 873:0.102348263107592 1080:0.179001652183214 1248:0.113969668298107 1416:0.106844938357192 1936:0.119183181599082 2024:0.086207324783105 2223:0.112367704035997 2385:0.139310182023015 3219:0.135678407092821 4321:0.293119752555588 8187:0.734496811514759 8422:0.378087672232478
+1 6:0.0276690353868891 28:0.0185747137302737 29:0.0548119321891789 31:0.00958723159922025 42:0.120393154323849 48:0.0307762129748793 64:0.0654492649722675 81:0.0153150015274441 82:0.0188670650814805 94:0.0151002209956422 97:0.0156955069965332 100:0.0466305338451511 142:0.0052181700743689 162:0.0136232378279712 175:0.0730461018832675 176:0.0521529969932201 178:0.0406002628113713 198:0.0438034686835656 199:0.0823044097387396 226:0.0195038852511127 242:0.035250691000021 284:0.0305509001646517 289:0.0218845872316332 319:0.0456368510752306 367:0.0858767865744831 377:0.0193598443718447 398:0.0391296019777684 409:0.0128460670252118 433:0.0203410912189927 436:0.0222178983961471 493:0.0224555966111873 506:0.0281442277314633 514:0.0801601696116707 518:0.0219361568983519 640:0.0234762285952262 644:0.047935640172419 656:0.0248301157532798 671:0.0153614331855052 706:0.0512140616536699 712:0.0230985333016391 749:0.146405149106912 808:0.0262530962824924 876:0.0485513319922307 880:0.0591756458388104 1001:0.0589680717532158 1009:0.0224184905632856 1048:0.0683313722303433 1218:0.0611992746637226 1267:0.0337711954168087 1288:0.0330440278729695 1330:0.0996562919942866 1430:0.0756558550236824 1439:0.0889209229379614 1449:0.0644622474398688 1591:0.059708662507673 1639:0.0339656225917686 1651:0.0344770941971747 1687:0.0771101901113607 1709:0.0320794317173357 1738:0.0339656225917686 1787:0.0361511838580899 2023:0.0737266627124148 2213:0.069830890391328 2264:0.102497058345515 2449:0.0315733206623235 2866:0.0344770941971747 2958:0.118103997626146 2979:0.0389495857540433 3576:0.161158375710058 3645:0.0852236543014257 4222:0.0521796264284562 4496:0.0934758474639473 4839:0.203685184917508 5211:0.128897515516674 5371:0.0521796264284562 5414:0.0901469871327724 5677:0.0467379237319736 5678:0.186951694927895 5844:0.0922747931810108 5880:0.0537196981253305 6640:0.0489357984864588 6668:0.0467379237319736 6823:0.305527777376263 7209:0.107439396250661 7386:0.0997147864105157 7388:0.0997147864105157 7426:0.107439396250661 7695:0.0521796264284562 8472:0.0557051958682487 8738:0.111410391736497 9142:0.253149989612295 9600:0.643539575406224
+1 6:0.0260536503918571 15:0.00743851326259441 26:0.0469864089571186 27:0.0189654953592782 29:0.0473108894850047 30:0.0130503645892984 31:0.0248256412358731 37:0.0102726846692939 40:0.0135656845350625 60:0.0164791599229856 63:0.0703936474854274 67:0.171938145254919 68:0.0133285505110525 75:0.0396016103888492 81:0.0132191352464424 83:0.00562555459508266 85:0.0133053481223989 88:0.0165786147497113 98:0.0140834794249431 100:0.0670818665833694 106:0.0151973790238265 111:0.0135777926810113 142:0.0168902274907737 151:0.0171463971014466 153:0.0188308324988468 158:0.0155834391949934 159:0.0261229368486088 173:0.0162280897842891 176:0.0112539577538608 179:0.0118352946182834 185:0.01264305883732 186:0.0123204240185208 194:0.0172018133685591 198:0.0189044700959946 199:0.010148715220408 204:0.0130337475471265 205:0.0171795849630822 216:0.0188896695771865 220:0.0174172258179779 228:0.0164202743783888 232:0.0385423662609956 240:0.0195453113241314 242:0.0152133073909525 274:0.0234637786313033 276:0.0168662598662761 281:0.125309411981857 301:0.0196788117177403 304:0.032879676580161 306:0.0340741750139098 309:0.0319562008317411 327:0.0182590596105622 337:0.0331974130502013 345:0.0159329356373199 346:0.0180886548683159 355:0.0130670281127677 373:0.0154991774541768 387:0.015326014645447 389:0.0185033528455529 398:0.0168873473422991 409:0.0110880757724272 422:0.019798130271018 433:0.0175574018325914 436:0.0191773669277197 457:0.0149710794279437 458:0.0228584659035213 459:0.0396653297877104 475:0.0175929673457276 493:0.0387650720257393 495:0.0239273506448017 506:0.0242926748732083 508:0.0168452467730391 513:0.0162470316309506 527:0.0414156702469902 530:0.0178480548794175 549:0.0231837539650948 550:0.0176888600521571 553:0.0832633523314737 561:0.019239746615562 580:0.0196451550985206 586:0.0319199867871066 591:0.0228297564226252 599:0.0407146203161456 609:0.0153749782560733 617:0.0304376745195483 625:0.0241376267953887 643:0.0176647417772863 703:0.0312038747030311 706:0.0221026947436579 712:0.0398749729357394 714:0.0224686030765853 726:0.0200084064216049 730:0.0208704993115172 733:0.0245054723785181 749:0.101095619917594 772:0.0201163949814408 800:0.0191464203347181 804:0.0204526274836397 829:0.0161064144235388 850:0.0398046812185097 880:0.0255387132752497 912:0.0412959264097979 915:0.0269019696077339 947:0.0264120603355545 969:0.0242820509780178 984:0.0248975352630013 1005:0.0228873144139226 1008:0.0282312816560362 1009:0.0967525397389312 1021:0.0232448540469272 1045:0.0112786253077653 1094:0.0223617445028054 1134:0.0264120603355545 1138:0.0214094929014659 1169:0.0734029461685339 1197:0.0356942484228548 1215:0.0254491295456557 1225:0.0193665004560647 1227:0.0474484888254864 1305:0.0197467008371552 1319:0.0229163033069223 1330:0.0286727580943155 1339:0.026206619088961 1373:0.0251881883098274 1382:0.0284479311952229 1407:0.0264645470694109 1431:0.0253608730313409 1489:0.0508982590913114 1526:0.139970362579536 1551:0.0464897080938544 1639:0.0586348173672223 1651:0.059517770243781 1676:0.0294900934051246 1689:0.0695518822113944 1717:0.547345836054055 1749:0.0339804671249483 1784:0.0316904475395277 1787:0.0312038747030311 1795:0.0277544507771579 1802:0.291244518268379 1815:0.0564625633120723 1828:0.0295783499194394 1843:0.0377485341526922 1849:0.0536910055593765 1910:0.0265709285705746 1928:0.0313218430283437 1984:0.0374080297207612 1989:0.0352174175439765 1995:0.0280911056414227 2041:0.0341696006532933 2076:0.0270746543292473 2078:0.0301372475480424 2121:0.031565028049071 2153:0.034566894893332 2178:0.0322203260152065 2253:0.0322203260152065 2264:0.0294900934051246 2322:0.068729872749105 2351:0.0769883134966725 2412:0.0319494972986752 2540:0.104977771934652 2577:0.0312038747030311 2616:0.0288274994114318 2703:0.0336193137789084 2864:0.0320833727249107 2882:0.0347759411056972 2952:0.0339804671249483 3051:0.032651155076646 3093:0.0313218430283437 3253:0.531824745714776 3447:0.0367803754504298 3613:0.0356942484228548 4248:0.0403418134724782 4323:0.041537250094545 4473:0.0393466379177603 4793:0.0409095958242135 4870:0.0463681282462996 4923:0.0367803754504298 5794:0.0439526891704223 5882:0.139104384738899 6253:0.0450388161979973 6499:0.0900776323959946 6523:0.0403418134724782 6682:0.048081909544206 6706:0.048081909544206 6805:0.0463681282462996 8231:0.135116448593992 8766:0.0450388161979973 8875:0.0463681282462996 8997:0.0463681282462996 9593:0.0927362564925992
+1 6:0.0085231799094322 15:0.0584023681984508 31:0.032485798103209 67:0.0482123746278712 80:0.0554952689668929 142:0.00663055405057997 159:0.051275077505381 174:0.0624769777809602 268:0.164023708460243 316:0.116114983042675 346:0.0710101766670527 355:0.0512969030343031 408:0.0501881496031902 502:0.0588317851017783 659:0.124909336700163 757:0.0809793650474193 856:0.0639675025890879 884:0.263981227233047 1067:0.0906566408102394 1080:0.0861783962931424 1277:0.100613729153971 1411:0.107948941305735 1681:0.126486522036387 2282:0.123431831587259 2834:0.151115541274245 4234:0.135698388358685 4315:0.141119313084487 4604:0.142158864339579 5269:0.163061736151738 5536:0.149606240027901 5793:0.172543964474143 5796:0.172543964474143 8129:0.168938988576227 8421:0.364052385593096 9139:0.643338436695584
+1 6:0.0190150556548118 11:0.0427236687244229 15:0.0651472979255894 26:0.0823024030400225 29:0.0345294875422596 31:0.0362376053003351 37:0.0449846377240111 47:0.0449998798651737 60:0.0721631260956933 63:0.0616515123776571 75:0.0770744791856624 80:0.0619044558015507 83:0.0246346056170567 92:0.0627637280224781 97:0.0593255291313997 134:0.136184990756148 142:0.00986176173945667 179:0.0518273905897098 180:0.0732658652461012 204:0.0570754803120036 205:0.0752303249532376 229:0.0497896525265575 327:0.0799574023933048 345:0.0697711806210915 346:0.158422381755401 405:0.0904185394970307 457:0.0655591606366065 574:0.0711881966373482 873:0.109930395510611 895:0.0988677059901818 906:0.111249148967959 1416:0.114760192066628 1936:0.128012473231978 2024:0.0925937091805467 2223:0.120692093565974 2385:0.14963051588229 2461:0.32480264632159 3219:0.145729692923897 4321:0.157417279746773 8187:0.591682183015309 8420:0.406097046341763 8422:0.203048523170881 8963:0.210553263490123
+1 6:0.0250507521948103 29:0.0682345861777201 65:0.0896089714250545 78:0.0481130839132475 85:0.0383795330404918 91:0.0500416660728924 132:0.0379833500784567 151:0.0989182256678475 162:0.033918745735287 183:0.110190365645469 186:0.0355385004843026 204:0.0375960959476331 216:0.0544876158814016 226:0.048560212560073 271:0.0691185197772949 275:0.0421140538909786 280:0.0656068011617226 288:0.130091957564339 295:0.0531746204125696 306:0.0491438072023202 322:0.271378653234677 325:0.112473233199932 333:0.0631804094053344 335:0.0829288511323132 337:0.0478792888129761 351:0.0444442277629932 377:0.0482015837215343 382:0.055007061220418 400:0.220735034648484 411:0.0469196882106199 424:0.0645028829079384 471:0.13056818711877 479:0.0793190513129228 505:0.045048923330623 506:0.0350363443842807 534:0.0477347658854319 546:0.0541080837094519 574:0.0468922601524536 629:0.076490240750093 641:0.04955484386031 644:0.0596743891282645 649:0.167691062232519 663:0.175836886855686 712:0.0575100638930145 715:0.077275019810813 739:0.0639764271880661 763:0.145067020561389 804:0.0589959980792817 860:0.0861064964589315 868:0.0893471857897115 881:0.0713560858043003 963:0.0531351630478323 991:0.0665268282887748 1056:0.0614976888206826 1225:0.0558630437396045 1519:0.100936801989183 1608:0.0678664940637412 1690:0.0818477604164825 1721:0.164117211394517 1827:0.0843228861117634 2026:0.0754484869643586 2050:0.0806342911068143 2353:0.0959933668124325 2380:0.0969755584075345 2464:0.106975108999507 2644:0.204518550983574 2673:0.459486252417427 2815:0.0946179389542296 3749:0.113496135246154 4244:0.0985628715002036 4265:0.113496135246154 4534:0.112222687953105 4689:0.253564757677388 4757:0.121838943661944 4805:0.248267007374885 5247:0.104455922575489 5450:0.126782378838694
+1 6:0.0197968176622819 15:0.0226085617214042 27:0.0192145283728242 28:0.0487298330999654 60:0.15025990722201 75:0.0133738710222828 85:0.0404401758295861 86:0.102526368841332 108:0.0610865027299115 117:0.136255567557588 142:0.00513360314397732 174:0.0483718264138853 176:0.0342051952461661 180:0.101704039260724 200:0.0637496389832499 202:0.0819389129696777 215:0.0420396392326416 256:0.0898155675741192 284:0.0400743798180531 295:0.112059258088787 308:0.146273002560319 332:0.0847590491395806 408:0.116572178114198 496:0.0553355037428919 507:0.0352841868453052 528:0.0690436992883189 565:0.210568474098402 574:0.0494099613877849 685:0.0697401807986516 848:0.072935151649558 897:0.110064285329832 1027:0.0689584930758475 1076:0.361795733790909 1205:0.456522538649655 1472:0.0671018809645901 2121:0.575631064724114 2575:0.0918982096639842 4396:0.130798379182115 4778:0.109259428970807 4960:0.11958987777393 5364:0.130798379182115 6309:0.146139797193023
+1 2:0.0218536049648761 6:0.0267664363140353 11:0.0962235717863764 15:0.0366816912369227 26:0.0231705030945346 27:0.0311749772373954 28:0.0395313225543984 29:0.077768382783337 40:0.0334483675679501 63:0.0694267241569889 72:0.033314767856851 75:0.0650960746897972 80:0.0348557838345936 86:0.0415864645861139 88:0.0817544589780968 96:0.0331677351501258 98:0.034725073786259 103:0.101919806037908 107:0.153622818307328 114:0.0375897098842923 142:0.0194345949477767 150:0.0933705150501788 173:0.040012954055333 192:0.0432324136459265 204:0.0321367917422345 205:0.0423590177867389 209:0.0672568240918016 218:0.0303658841214132 227:0.038051585572227 229:0.028034449914698 252:0.0772684129985729 255:0.049825826562744 320:0.0508132617535666 322:0.278366326368734 346:0.0892009504247896 357:0.049555479457162 385:0.0560106319534543 415:0.0465755052479515 473:0.0471326559113915 477:0.0572383908149385 499:0.0398737260484466 513:0.0400596582115377 530:0.0440072374111824 546:0.046251084691455 557:0.0503819224301654 571:0.0845000242612158 582:0.0451523712057728 609:0.0379094709691339 717:0.054249821189513 737:0.0630814869709357 764:0.0495109014419107 799:0.0540060239785662 1001:0.0627489042021682 1013:0.0663311140263929 1036:0.0605160225399869 1080:0.108254833549783 1140:0.0543732542247166 1232:0.0606104823173039 1314:0.062423685497993 1466:0.0653831435243445 1509:0.0676473772683354 1805:0.0775257660735027 2024:0.0521356059083474 2161:0.213236448308871 2223:0.0679566191061606 2275:0.0842506221744569 2298:0.14959574007631 2629:0.0886350199454596 2647:0.0868341825110468 2830:0.162520140338019 3502:0.0906879055143469 4189:0.083332295365116 5392:0.106108159788554 7546:0.222100827292903 8947:0.71132188559158
+1 6:0.0190387036306713 26:0.0824047579989351 31:0.0725653440224077 60:0.289011485580585 134:0.136354356517274 142:0.0148110394028453 180:0.293427927845637 185:0.110866974831645 204:0.114292923877241 337:0.145554046867529 513:0.14247020994639 538:0.166823346289752 1308:0.444778958676463 3467:0.551433170518939 3897:0.30495020524079 4425:0.331016871762431
+1 6:0.0125052959336995 63:0.0540603488827297 68:0.0767696500111478 75:0.050688211943706 81:0.0761394410800996 142:0.00324280536481976 169:0.0911539566788052 179:0.204506429608607 189:0.0935794879566112 204:0.0750716468903972 229:0.0654885634397928 346:0.104186850795331 387:0.08827462366752 579:0.146838659993076 582:0.105476081576904 631:0.167855432389069 781:0.135515386627881 856:0.187707536040858 946:0.17776652696871 993:0.137422113435194 1199:0.18110043411486 1827:0.1683754063129 5728:0.235630674987357 8937:0.553883389572702 8940:0.553883389572702
+1 6:0.0161432213809334 15:0.0414811007606601 26:0.104808468871481 27:0.0352538917478815 29:0.0293145164381268 31:0.0461469870478786 41:0.0185834097724827 60:0.0306321827621944 63:0.017446771843132 67:0.205461089836676 75:0.00817924492900073 88:0.0308170537412421 97:0.02518281218038 100:0.0498778822904615 102:0.0384554071262223 106:0.0564991048014361 132:0.0244772541893193 134:0.0578085201128649 140:0.02851892143957 142:0.011511974145758 153:0.140014298147412 172:0.0316491675606078 176:0.0418386971575459 179:0.0219999629523585 185:0.0235014703897478 192:0.0325926103932036 204:0.02422769964038 205:0.0319341634420183 209:0.0253522216208123 211:0.0401376516122164 232:0.0358221175385121 240:0.0363316790068696 252:0.0291260545986301 255:0.0375633376840588 275:0.0271391649210226 276:0.0313517410567633 284:0.0245088476899122 287:0.037460962399144 289:0.0702258869396308 291:0.064967450802777 357:0.0373595249162747 373:0.0864316455436177 389:0.0343948410433084 394:0.0375976741904735 409:0.0412219998021008 426:0.0726633580137393 437:0.0363010468588541 475:0.0327025766836548 485:0.0279289809118316 541:0.0416163134174752 543:0.0446709159649863 643:0.0328359941342673 681:0.0441616991491894 757:0.0383444861876381 768:0.0504366504362769 772:0.0747864685418194 800:0.0355902030003859 829:0.0299393071352693 856:0.030289210319798 880:0.0474724765227593 909:0.0355329754081785 947:0.0490958922120971 1005:0.12763182128329 1025:0.0491934568471632 1059:0.0369953406476612 1123:0.0458376271571902 1169:0.0454815349169547 1189:0.0549815296878469 1201:0.0514701630198649 1215:0.0473059543705218 1228:0.0496946063679034 1250:0.0544964807130544 1269:0.0412277291806062 1322:0.0453422435904705 1330:0.106596352040515 1377:0.0384926290585672 1431:0.0942837986081145 1489:0.0473059543705218 1526:0.0650457570025536 1576:0.0447362466231907 1665:0.0434976928558372 1676:0.0548174746213823 1689:0.129286078738901 1709:0.0514701630198649 1717:0.339143454773397 1802:0.601531156373544 1918:0.0584461258573842 1924:0.0556631919052583 1928:0.0582224108860498 1984:0.0695356807346497 2153:0.128508910265163 2164:0.0520889560831604 2198:0.0615567024808394 2264:0.0548174746213823 2306:0.0567714675294222 2351:0.214663863383024 2407:0.146278500774008 2650:0.0701686252560325 2845:0.0663500291494206 2852:0.0695356807346497 2864:0.0596379755721805 2882:0.0646430393694504 3136:0.0658979862033749 3253:0.152089089719542 3300:0.0663500291494206 3963:0.0799941900041006 4048:0.0642544551325815 4055:0.0695356807346497 4144:0.0740256044667457 4323:0.0772112560519747 4687:0.0817011797840708 4704:0.0708399528815167 4947:0.0760445448597708 5107:0.0723186146867755 5197:0.0837201201770959 6261:0.0749891262068306 6680:0.0893767551013959 7885:0.093866678833492 8682:0.0893767551013959 8875:0.0861911035161669
+1 6:0.0474419710774406 15:0.0116100341001448 26:0.0146672807045646 27:0.00986711726184199 29:0.0984571371255454 31:0.0129159565059788 60:0.0257206785675437 63:0.0219740859198074 67:0.0958432561461414 83:0.0175607351564648 88:0.0517518153917168 94:0.0203430777270724 96:0.0629870417310402 97:0.0211450493928816 134:0.0242698076044951 142:0.00702993945893936 153:0.0587823398917953 154:0.0244964369599494 159:0.0203863444818606 176:0.0526955435870292 186:0.0192297221143059 198:0.0590122070665271 206:0.0323207962984931 226:0.0262757117102982 240:0.0305063287461244 242:0.0474898709862186 255:0.0315405056830682 256:0.0230612149306288 274:0.073244547777459 275:0.0911508974654829 291:0.0272753484859926 294:0.161918104607345 306:0.0265914921356082 322:0.0587367054697477 341:0.0283138077529262 345:0.0497362630231238 348:0.0336658095644741 355:0.0407900440911145 373:0.145146729526238 394:0.0315693367412883 411:0.101552125574755 426:0.0305063287461244 430:0.0527485561958517 442:0.0288368932985039 448:0.03068839347721 485:0.0234509028079729 495:0.0373458172494241 502:0.0233907991156479 505:0.0243757689658062 509:0.031454545050847 543:0.0375084687817676 553:0.129957469420928 580:0.0613243298881762 593:0.032639252385241 644:0.0322895424578858 655:0.0256593053491618 663:0.0317148484563758 709:0.0295524777382537 726:0.0936873832083619 767:0.0324151931379714 772:0.125590705272226 792:0.0371859621574579 799:0.0683732683920808 856:0.0508653953097819 862:0.0326069114523704 895:0.0704776698035991 903:0.037729860403477 909:0.0298356877182827 933:0.0393803857961225 1008:0.0881267885521125 1015:0.0423497366794278 1038:0.044993971157066 1045:0.0176036823224322 1129:0.0395151419059386 1155:0.0394475197255067 1159:0.10337523489323 1164:0.0719019842717965 1228:0.25036002302264 1313:0.0442874535233258 1319:0.0357677742110836 1380:0.104706655907371 1394:0.0879067147688046 1424:0.0315117637472722 1493:0.0452419327538126 1576:0.0751266489003554 1598:0.0354555815188643 1665:0.0365233579683233 1731:0.0420775804064579 1751:0.0923317977847989 1809:0.159110174896118 1873:0.0448724268272772 1917:0.0421674169393923 2018:0.0536368047045336 2054:0.0527506098114955 2055:0.05220351032295 2067:0.0422581299401433 2090:0.0546164477090428 2139:0.0507323421259605 2201:0.350318795177456 2336:0.0614122462143621 2449:0.0425357030549943 2645:0.0574068228584001 2768:0.109934715223455 3058:0.0621564840167758 3428:0.0702966000636695 4162:0.242892758540769 4322:0.583482190189896 4326:0.056520627965362 5226:0.0671680782378269 5618:0.124312968033552 6996:0.0750462612220452 9375:0.157632558751823
+1 111:0.187434768660534 553:0.383136580660274 1228:0.36905182742607 1380:0.308692915424387 3473:0.507735043961903 4322:0.573401365389377
+1 3:0.140807019192996 63:0.0597023105404996 67:0.156240324058032 100:0.17068056167536 142:0.0143249517928817 409:0.141060401053748 1005:0.291168081507837 1717:0.464215341077664 1802:0.411684181125306 2153:0.439753493474622 2351:0.48971537538091
+1 6:0.0142358536040376 26:0.102694498349765 27:0.0690856524650694 29:0.017233948319601 31:0.0180864837975874 41:0.0218503023440218 63:0.0102569239005881 67:0.134211314399579 75:0.00961712499657145 87:0.132621605811599 88:0.0362345742703897 96:0.0294006902547011 97:0.0296098545288929 134:0.135942075000353 142:0.0159967780824297 146:0.0852217913328079 153:0.082314138913761 204:0.0284868368466121 215:0.0302306239261213 218:0.0538341221866897 226:0.0367944281864376 232:0.0421195091967779 242:0.0332505293643628 291:0.0381942404526603 308:0.0701230903604297 312:0.0430104309379583 314:0.0378671458618676 317:0.0282829235742409 322:0.082250236078954 372:0.0468424572428646 377:0.0365226924927589 388:0.0493456768921627 457:0.0981633322740382 501:0.0493456768921627 506:0.0530945887342621 507:0.025372791073602 663:0.0444109650325671 784:0.372777988505756 799:0.0957445165125038 880:0.0558179568626706 895:0.0493456768921627 965:0.0473987443989832 1005:0.15006900875035 1033:0.0568436993379315 1201:0.121036842802169 1271:0.0605184214010845 1416:0.057277746065684 1557:0.0698295032635714 1731:0.0589221151302887 1795:0.0606607200421442 1904:0.0663026582535542 2025:0.148536868534557 2246:0.0601006252544565 2421:0.608056313433074 4124:0.0894128858558523 4379:0.470284317774373 4416:0.0907847004264785 5241:0.0984377980437224
+1 6:0.0201930401036759 15:0.0691831790313298 31:0.0384825282857204 60:0.0766336384026414 63:0.0218236097489283 75:0.0204623125672021 80:0.0657394425390817 98:0.0654929180095361 142:0.0104726987873607 144:0.120051850586515 174:0.0740099429610329 176:0.0523346901867875 179:0.0550381022093958 180:0.155609384689931 256:0.0687098826525314 317:0.0601774462426896 408:0.0594526531432809 827:0.0862407707711245 916:0.122343163811819 1946:0.140606252847632 2741:0.158020605575527 3064:0.200124355442677 3236:0.302309595105775 4115:0.215627397879543 4295:0.386324378046177 4606:0.172462100085734 6347:0.380486770957073 7087:0.589275401334613
+1 6:0.0125371877782967 15:0.0286356917090263 16:0.32192932416124 29:0.0151775406135828 31:0.047785046810645 42:0.0250028403903124 96:0.0776775284687215 138:0.0350435920088841 174:0.0306335432934503 180:0.0322042325128934 186:0.023714676002056 199:0.0195345138225207 267:0.0447423060772335 284:0.025378827721132 346:0.0348175183638385 355:0.025151759187688 367:0.0356691973063354 414:0.0308778937988598 439:0.0450417117614786 506:0.0233795895731917 513:0.0312727135481661 586:0.0307202148038174 684:0.0391117121259766 731:0.0481598631585295 733:0.0943375547562784 781:0.0905739913718626 795:0.0990208649862942 890:0.0438883195360111 998:0.323796061869129 1017:0.0492447854102328 1294:0.0474647057048964 1378:0.0512481924679549 1426:0.04960036696381 1485:0.0521140063296985 2024:0.0406998447321311 2375:0.0650536504456215 2737:0.0720039589034891 2837:0.0628478015506246 2973:0.424775000793667 4033:0.0726593707844736 4924:0.0707958334656112 4955:0.599085419726864 5134:0.0776509829854101 5870:0.0892505920680798 5874:0.0892505920680798 6334:0.0846012914432777 7990:0.0846012914432777 8110:0.185098646716529 8851:0.277647970074793 8910:0.0925493233582643
+1 6:0.0251558999304601 20:0.0709515315031726 27:0.0122079912338304 29:0.106588211699561 30:0.0504027129752254 37:0.019837421909883 63:0.0362496213313628 75:0.0339884689406841 83:0.0108634211574029 84:0.0246064661752038 86:0.0325701726257742 96:0.0259766938641442 142:0.0163082280667053 159:0.0252227989310365 166:0.0312831619812779 169:0.0611223656663773 171:0.0362514201829527 172:0.0657583161997109 179:0.0457099074543663 204:0.0251692675754081 205:0.0331752298567116 227:0.02980168482958 229:0.0439126952616801 242:0.0293781817581878 255:0.0780463445749287 256:0.0285322553937135 333:0.042297068080198 345:0.0307678446945116 365:0.0444229108605602 398:0.065221788646795 408:0.049376253250098 426:0.0377436473111815 457:0.0289104190987401 478:0.0328791580998554 508:0.0325295945675943 515:0.0302912849975255 527:0.039988578975169 574:0.0627854469058006 631:0.0281384415207676 640:0.0391305186424238 684:0.0392388761239285 716:0.0401445660100839 781:0.0454342373972659 796:0.0368547574899564 808:0.0437590420171797 850:0.038433101021792 856:0.0314663484566318 909:0.0369139034689145 953:0.0458135201322325 987:0.0342289001867106 1027:0.0438129243993702 1081:0.046611796434742 1271:0.0534704625047323 1277:0.0494930477654772 1314:0.0488897104584736 1319:0.0442533176038306 1335:0.0450670615196855 1380:0.129547253115572 1545:0.0535961890847572 1725:0.0604851248871334 1835:0.112902429349782 1936:0.056451214674891 2280:0.0569478616225769 2611:0.050803847434968 3236:0.313840391023078 3251:0.0598148070848437 3666:0.0600339349971632 3937:0.0735930259814065 4131:0.145791216721549 4479:0.0802119389067605 4606:0.0716160833844918 5157:0.0743354685814964 5256:0.0789998854879183 5798:0.0848763558131824 5903:0.0928502291822813 6165:0.0895407727196043 7277:0.0869737588570172 7422:0.0895407727196043 7592:0.0895407727196043 7634:0.0895407727196043 8002:0.0895407727196043 8909:0.278550687546844 9656:0.29254393826611 9667:0.682602522620923
+1 6:0.0233065867421599 26:0.100877332696898 27:0.0678631909234799 31:0.0444161146089882 33:0.0644855335538935 63:0.0251885724501609 64:0.202144002607156 75:0.0472347561678807 142:0.0211530808413777 159:0.0701057031699889 196:0.433457672138278 375:0.0826112451294805 409:0.0595137792762779 441:0.082173231245627 647:0.10526313751644 799:0.117562912343659 824:0.13033069505844 895:0.242362558121194 966:0.116400074614183 997:0.11082520988329 1190:0.126110172053645 1305:0.105987803400435 1433:0.112353293109261 1731:0.144698740115533 1916:0.284658347519011 2674:0.172203257082443 5215:0.439153682953418 8188:0.483479770716919
+1 6:0.0130511876742886 15:0.0447145476266066 28:0.0963764289756715 60:0.0990598732851897 159:0.0785153741499518 180:0.100573627004245 355:0.235646383999094 365:0.138282887501237 513:0.195328997612015 908:0.13881870917985 921:0.176748686540272 1159:0.132712124247402 1294:0.148231994211298 1598:0.273105190696128 1652:0.15634000084472 2216:0.177802000144303 2744:0.179442443328116 3636:0.226914783723385 3803:0.214566018067836 5823:0.239387674566424 7912:0.60710145164211 8227:0.270738280733928
+1 6:0.0113376579751474 11:0.458528985674137 31:0.0432130814857352 60:0.086054004462865 63:0.0245063271152916 75:0.0229776893500316 80:0.0738206145442444 98:0.0735437854205341 118:0.371202663711805 142:0.00294001983649362 172:0.0889109871030098 179:0.123607574738138 180:0.0873690129014509 346:0.0944587705951015 527:0.108136103081805 535:0.107513912991799 641:0.179423233707583 679:0.42788421739392 727:0.121384389935001 1819:0.15737639825804 4292:0.387324799912965 5100:0.21690709488324 6511:0.229520493016806 8679:0.251083239548448
+1 6:0.0243740791128498 15:0.0556718641779655 26:0.105497733968899 28:0.0599967543974245 29:0.05901460234876 80:0.0529006814577509 94:0.0487740626088793 96:0.0503387271443442 102:0.0774166124999432 158:0.0583153568235131 192:0.0656139065409013 286:0.0455247037810669 306:0.0637551072500536 312:0.0736407998788516 373:0.0580000378864797 405:0.077267497046435 414:0.0600310244690163 499:0.121032841506724 731:0.0936296349267486 1034:0.102437523423586 1124:0.0903262945895866 3331:0.147240490450718 3611:0.120060360562515 7096:0.153089292302124 8857:0.674165594546975 9105:0.613260235380853
+1 4:0.0209817291288876 6:0.0291041709200769 15:0.0332378393245762 26:0.0419902917753442 27:0.0141240609337128 28:0.0358199336792988 29:0.0528503374092562 37:0.0229509466755282 63:0.0314543062839877 68:0.0297782772360983 75:0.0294922725512479 80:0.0315833568071757 96:0.0601075803489841 106:0.0339535619764729 138:0.122026730736887 142:0.0125785589959427 151:0.0383080040146684 162:0.0262713860671732 185:0.0282467707841014 199:0.0226739775771504 218:0.0275149902674145 229:0.0254024422101805 242:0.0339891486917576 243:0.0457376950969755 277:0.0439282039452477 279:0.0549200815097592 284:0.029457552714719 306:0.0380637875556738 339:0.0377292422401272 351:0.0688475614712521 355:0.0291939911598954 367:0.0828034510883405 413:0.0419411562304178 427:0.0515276125903644 434:0.0419735787156043 467:0.0608867662017529 472:0.0441940215257716 477:0.0518645780211258 502:0.0334822282162656 950:0.0528561637152481 965:0.0969032976002082 1010:0.108015103746665 1036:0.109668980132621 1242:0.0615765279823962 1707:0.110891043455454 1739:0.156358947594275 2017:0.0729483035041914 2076:0.0604894404698618 4234:0.231685188529198 4997:0.0961462202846422 5149:0.255430814951092 5730:0.0815243239766942 6865:0.503122359035773 7229:0.10359438385234 7766:0.10359438385234 8470:0.0961462202846422 8700:0.214846532826067 9104:0.610225813604908
+1 6:0.0163210492742448 11:0.0244471228513554 17:0.0592901575031234 29:0.0197582897055236 46:0.0455542300116724 60:0.0825856421824923 63:0.0117593061181943 75:0.0110257927140454 79:0.0368938291304527 80:0.0354226563684988 92:0.0359143447973008 116:0.174738082026817 128:0.0584786657397676 142:0.00282152385285997 144:0.0970320545508208 174:0.079758168798049 179:0.0296564087926166 199:0.0508604909304615 248:0.198546859278793 262:0.050916058058346 314:0.0434137334280588 331:0.0425288920067862 337:0.0831847523891138 408:0.0320351195743407 411:0.0407587784064689 436:0.0961077609839767 475:0.044083755268251 574:0.0407349518597131 626:0.102691989668739 644:0.0518386906601355 1109:0.0752739857002401 1155:0.0633303421696743 1296:0.0553840501548418 1374:0.0726328829202341 1379:0.0574227580136279 1708:0.194974001102745 3284:0.255440694090901 5598:0.112856467691132 5868:0.116187404755977 6685:0.120481729518568 6687:0.120481729518568 6688:0.361445188555705 6689:0.722890377111411 6694:0.120481729518568
+1 6:0.0163665251176051 15:0.0280365965579871 17:0.0445915196242737 26:0.0708388327147979 31:0.0623804303407035 41:0.0376809356243246 63:0.0353762143073869 67:0.231447959772976 96:0.0507016104104942 100:0.0505678262136667 106:0.0572806378624687 142:0.0233424308028507 175:0.0792138172358275 176:0.0848348754884331 274:0.0884376315519706 473:0.0720489821452939 493:0.0730549672064373 553:0.104609659438355 703:0.117610927776948 720:0.0814736046928783 749:0.0952602021852356 771:0.0868165806990163 947:0.0995500382605867 1009:0.0729342498120364 1489:0.0959206433645105 1526:0.263782052083679 1557:0.120421263547097 1639:0.110500624301011 1651:0.112164598855192 1717:0.687669423597937 1802:0.243940773591508 1883:0.117610927776948 1984:0.140995088707334 2351:0.145088824136425 3253:0.308385773603837 4687:0.165662649296661
+1 6:0.016400290518762 11:0.0245658174528516 17:0.0595780204823488 29:0.0198542192894302 46:0.0457754029165814 60:0.0829866083799365 63:0.0118163993868811 75:0.0110793246605378 79:0.0370729544358284 80:0.0355946389002331 92:0.0360887145531871 116:0.117057641812826 128:0.05876258879968 142:0.00283522279205063 144:0.13000421378357 174:0.080145407170397 179:0.0298003952913491 199:0.0511074265612757 248:0.199510835305081 262:0.0511632634762489 314:0.0436245138875851 331:0.0427353764229489 337:0.0835886273602268 408:0.0321906550856105 411:0.0409566686445081 436:0.0965743791811382 475:0.0442977887885076 574:0.0409327264161447 626:0.103190575325002 644:0.0520903756034886 1109:0.0756394526629599 1155:0.0636378208767661 1296:0.0556529483725317 1374:0.0729855269162641 1379:0.0577015544765361 1708:0.195920630344301 3284:0.256680898575305 5598:0.113404403476473 5868:0.116751512761252 6685:0.121066687141587 6687:0.121066687141587 6688:0.363200061424762 6689:0.726400122849524 6694:0.121066687141587
+1 6:0.0272724163507125 7:0.0423368011586321 15:0.0467188806965436 26:0.0590212682812641 27:0.0595580517074951 29:0.0247620248324369 31:0.0259869620485027 60:0.0517501198991412 63:0.0147373195985456 64:0.0591351649095117 67:0.115702235088285 75:0.0138180458456467 92:0.0450095585683638 134:0.0976619221116962 142:0.0176803368993775 153:0.0591351649095117 172:0.106936435361757 176:0.070682445685818 204:0.122791089130361 205:0.0539496907495218 256:0.046399267210075 345:0.0500347914232281 398:0.0530319660605667 405:0.0648415681697557 561:0.0604192931458633 643:0.0554732467695063 768:0.170415717851471 844:0.0747123290248448 895:0.0709006928602321 966:0.0681033077312331 997:0.0648415681697557 1045:0.0354186872815175 1094:0.0702234194329297 2211:0.10503369540871 3944:0.118543128263102 5119:0.652204870490715 6759:0.424311217790428 7590:0.436834682251817 8226:0.15099341201378
+1 67:0.137541055027996 80:0.158317815740948 172:0.190681063283259 179:0.132546182136219 204:0.145967931683773 2211:0.374576479070954 5119:0.465185201892994 6759:0.504400044740523 7590:0.51928731561572
+1 6:0.00938183826269336 15:0.0642860503260964 33:0.051916040111676 60:0.0712091292132313 80:0.0610860785909118 140:0.0662965345165907 180:0.144594580293277 327:0.0789003651397937 331:0.0733407233067157 431:0.104612758672247 448:0.0849625242478131 609:0.0664377807123672 672:0.131086094327014 824:0.104926690058038 880:0.220713864305705 933:0.109026788436352 947:0.342392420368249 1018:0.30542137451588 1305:0.170657409481982 1806:0.12899209043507 1904:0.131086094327014 2198:0.14309783977616 3254:0.161646178230394 3925:0.51006965828712 4704:0.164678155564706 4842:0.194620047213737 5357:0.158933982084101 5864:0.200364220694342 6305:0.207769748309595 6307:0.185958560528702 7842:0.21820725325916
+1 60:0.215731189067051 180:0.219027820477293 947:0.691528598366507 1018:0.308429162659297 1305:0.258507064174363 3925:0.515092821688649
+1 6:0.0288665116876522 15:0.0329664253268015 28:0.0710548695610583 29:0.0698916952125808 31:0.0366745620215927 60:0.0730332763915844 98:0.18724789070632 117:0.0993397777487901 142:0.00998067586305238 172:0.0754579724194572 205:0.0761374598441407 256:0.065481790440772 308:0.0710954560142967 317:0.0573502205505432 360:0.355445769263041 425:0.276582206414071 560:0.229244976168179 565:0.307038101896221 574:0.0720465911349176 592:0.189567978538363 768:0.120251105191384 916:0.116595300491194 1273:0.129186803097342 1277:0.113587003106952 1504:0.134444095354831 1599:0.116595300491194 1936:0.129556060621927 2161:0.127759348294006 2305:0.154121989859888 2396:0.357578277927102 2834:0.170600589010661 2928:0.167296096465775 3087:0.331574059190997 3098:0.187196789614821 3648:0.213092136103317
+1 6:0.0301341348138835 15:0.0344140890966953 28:0.0741751217363661 29:0.0729608685904251 31:0.0382850622256357 60:0.0762404068942289 98:0.19547055921458 117:0.103702112934683 142:0.010418960047727 172:0.0787715792706217 205:0.0794809052148615 308:0.0742174904737714 317:0.0598686566764929 360:0.247369705211702 425:0.288727837481247 500:0.103950410634369 560:0.119655937163554 565:0.320521151140591 574:0.0752103930544898 592:0.197892529706453 689:0.125531725293489 768:0.125531725293489 796:0.0882962830831244 916:0.121715382228529 1273:0.134859818977543 1277:0.118574980647698 1504:0.140347976166655 1599:0.121715382228529 1936:0.135245291810121 2161:0.133369679955901 2305:0.160889991505571 2396:0.373280711925466 2834:0.178092219946833 2928:0.174642616305197 3087:0.34613456272661 3098:0.19541721410669 3648:0.222449710120759
+1 6:0.00670247659498845 11:0.0301187011887626 31:0.0766387558763089 67:0.0379133511161151 80:0.0436404892699217 146:0.0601857546809626 154:0.0484510884177496 179:0.0730730172370441 186:0.0760682843739502 205:0.0530347637562504 245:0.077497107172678 265:0.0633177479953386 513:0.250779482199203 530:0.110196768556704 586:0.0492697862606898 664:0.0757678795819694 697:0.0718537792911441 703:0.0963288767866714 804:0.0631389098817219 856:0.0503029026137014 1081:0.0745147998325282 1309:0.158241682553881 1393:0.0767360175518331 1502:0.479858854585829 1710:0.0933400928222519 1817:0.0952777121546841 1918:0.194129179738334 2103:0.429424534971081 2122:0.447164777057787 2196:0.207571063881136 2369:0.0873724890450938 2510:0.213421582464831 2709:0.100342641585109 3578:0.12010336992407 4346:0.124538430445747 4871:0.113543984157448
+1 6:0.0199602513496069 27:0.0290597324096521 29:0.0362458707893506 31:0.0760777904869817 63:0.0431440470288617 64:0.0865601888747545 75:0.0202264195949982 142:0.0103519677587522 205:0.157939710768002 286:0.0559211607059718 317:0.0594837105465307 387:0.211348498132791 414:0.0737402835792228 561:0.0884398552771073 593:0.0961261445664768 764:0.09230310170278 1949:0.124187624424382 2280:0.135557897147567 6109:0.376100455627827 6494:0.414062249986318 6497:0.207031124993159 7854:0.696367518721716
+1 6:0.0344148684394321 11:0.206198634049761 29:0.0416626976230512 31:0.0874473674342021 60:0.0870708115311415 80:0.149385745758494 96:0.0710755333180064 118:0.225353258389196 142:0.00297475887007236 159:0.0690127810402682 208:0.085944719180777 292:0.113121174265728 308:0.0847605277647751 365:0.121546725594311 399:0.108167091500925 411:0.085944719180777 473:0.101001127765685 500:0.118717186615842 505:0.082517962345931 643:0.0933350613274298 644:0.109308028495216 667:0.110491882455187 1064:0.106288842653437 1135:0.155816581483127 1149:0.22011244186283 1155:0.133539538872228 1235:0.134465371575806 1248:0.295402282914046 1296:0.116783839549433 1469:0.129882921937998 1497:0.139278299959494 1665:0.123640533425009 1892:0.456946915964898 2542:0.173315563317076 4749:0.23797124945014 6072:0.216153719271627 6286:0.213153731992561 9380:0.266812455554169
+1 6:0.0314056360941698 11:0.235210809954085 63:0.0452554835736864 75:0.0212162850444602 88:0.0799368892948069 98:0.135812256050761 102:0.399000585590913 142:0.00271464627870993 151:0.413372790065889 180:0.161343105786897 187:0.488073005879537 275:0.0703967498016197 325:0.282010967554381 341:0.0874681476863656 346:0.174435659858218 560:0.124704785528937 727:0.112079407880294 772:0.0969949578368749 952:0.195050516168192 1215:0.1227077341414 1882:0.158160869351328 6813:0.211926104892828 7272:0.197253261618398
+1 6:0.0262056187475087 15:0.0897828164618776 29:0.0317245661369854 33:0.0966755779235654 41:0.0402224347532508 49:0.0789043223542897 63:0.0566433973129903 67:0.0988234533617255 75:0.0531101368664978 94:0.0524390884093577 97:0.109012719649391 102:0.166467846641852 103:0.166307258121929 107:0.167115635261658 142:0.00679549860422238 198:0.152117903943057 226:0.0677318539446696 252:0.189123661113217 319:0.0792423789343665 324:0.0925532275835468 408:0.051436651895953 417:0.102212086982117 434:0.0755866644894458 453:0.0847272112195765 477:0.0933985277817662 507:0.0467066962002493 527:0.0833144874780675 571:0.0689412975378522 867:0.0767853049569689 882:0.131194577191757 1010:0.0972576279712908 1604:0.117278462524675 1643:0.116947866742847 1786:0.116947866742847 1805:0.126502375649055 2240:0.59324212383279 2417:0.149209035061498 2581:0.407931473594774 3989:0.146810253324061 4069:0.150504908174269 4317:0.151874870416153 7959:0.186554355736329
+1 6:0.0316783874010622 26:0.0822676763571952 27:0.018447973322987 29:0.0460198908898612 31:0.0482964202694956 63:0.0547782214518795 75:0.0256806527911546 80:0.0825044477737181 83:0.0164161408596672 92:0.0836496606530975 96:0.0785087974337896 134:0.0453758429499167 142:0.0328586688896097 150:0.0552525430149493 174:0.139326161842664 176:0.0328405942193881 180:0.0488233009605247 204:0.0380342652527091 322:0.109816590482454 387:0.0894468308802479 405:0.0602535921939383 409:0.0323565278171749 413:0.0547809397669165 480:0.0465998518040398 485:0.043844784441194 506:0.0354446806831519 507:0.067753079858687 546:0.0547386944375176 593:0.1220474108712 631:0.0425211002025499 644:0.0603698731926628 737:0.0746576704741422 755:0.0661260009374296 806:0.0680118224137492 823:0.144375431888251 834:0.0638453628362241 895:0.0658839931613608 997:0.120507184387877 1122:0.154763415328275 1495:0.0952805544608146 2248:0.083230922348828 8671:0.140309615085669 9097:0.637631320522612 9374:0.589432792074666
+1 6:0.0218216597437361 28:0.0537139784492982 29:0.0264173379926304 63:0.0157224926303364 68:0.044654179319193 75:0.014741766473957 81:0.044287609162738 96:0.0450673262604431 142:0.00188622472861184 179:0.0396513760248768 186:0.0412766881856591 204:0.174666044799951 256:0.0495010053819694 262:0.0680760700964767 299:0.0602159062109373 308:0.053744659807072 337:0.0556100693037756 387:0.154038641859562 404:0.0610837916113771 413:0.0628930913739036 437:0.130853534818593 561:0.0644582540850721 643:0.118363140282371 678:0.0787168965072184 737:0.0857132373207059 1140:0.0738807511847256 1482:0.0861756105704156 1576:0.0806298510883446 1614:0.367668929845973 2604:0.108416264716889 2737:0.125326821228115 3315:0.137057996388678 3502:0.123224012950906 3944:0.126467601386453 4293:0.116508626263583 6279:0.405467324755457 6695:0.322174299300705 7132:0.144176593139126 8855:0.150891979826449 9094:0.549040483904454
+1 6:0.0138111791461345 31:0.105281639499844 60:0.104828287683765 63:0.0298528386325453 75:0.0279907000787248 97:0.0861796594916239 142:0.00358143990090463 144:0.0821103512280701 174:0.101239295874418 180:0.212860379391924 308:0.102046837884079 345:0.101353610769091 455:0.100841887720061 717:0.13996147830506 1469:0.156371625194452 1665:0.148856145697177 4226:0.821259199308092 4508:0.237962354851663 4692:0.279594661764615
+1 6:0.0202773188507795 26:0.0877658261392247 27:0.0295213446698631 31:0.0386431410142966 59:0.0629556842471134 60:0.0769534806352823 63:0.0219146939283027 67:0.0573505254653074 142:0.0131455102506351 153:0.0879351927415313 204:0.0608642821697456 240:0.0912716269228131 256:0.0689966538763719 319:0.0919739579302549 331:0.0792570277591917 373:0.21713163613744 408:0.0597007879012557 411:0.151916472739369 423:0.0768156506227504 437:0.0911946735294675 625:0.112716570799811 643:0.0824898460017729 644:0.193213617885691 979:0.621614262527022 1064:0.0939384421833766 1155:0.118022700580586 1296:0.206427912574742 1387:0.164456372270223 1550:0.484255791416691 1576:0.112385392674717 2666:0.136904833253308 7263:0.216527351865728
+1 6:0.0200696224163887 15:0.017190084722204 29:0.0364444779854842 63:0.0216902261955039 75:0.0203372491156056 81:0.0305488538930645 142:0.0039032590424183 158:0.0360126587892672 161:0.0489645810826217 180:0.0386645792206022 204:0.0301204308809391 215:0.0319642164329203 227:0.035664112408338 229:0.0525509651189653 255:0.0466996014134308 291:0.0403845111269748 292:0.0494764187201655 384:0.0543718168616726 387:0.0354177617096948 442:0.0426965704536785 480:0.110711297247337 485:0.0694438969953069 528:0.0524963531482384 631:0.0336736847977144 640:0.0468280643675152 656:0.0495286648803496 671:0.0306414711830841 696:0.0553748878725238 717:0.0508460210511484 761:0.0510199203741702 840:0.253611893512059 848:0.055455161258477 969:0.0561147770805236 1242:0.0636928124346456 1337:0.0646008456649133 1359:0.0556988286228002 1448:0.0629793446708954 1449:0.0642914653038158 1645:0.0573510935328275 1685:0.215530465975054 1783:0.217984685332478 1822:0.0713239233491562 2098:0.594985077597065 2146:0.154587446945875 2270:0.073833916268975 2639:0.0909283905886698 2935:0.0798826097128785 3188:0.0857040151479726 3348:0.0849978682281521 3593:0.086448350293904 4556:0.0889583432137228 4716:0.555576141019055 6634:0.0945403191933113
+1 6:0.0299022469987481 15:0.0341492662312043 26:0.0862834457414274 29:0.0361997105161443 31:0.0379904514964193 41:0.0458963091263426 63:0.0215445508540325 67:0.112763729800217 68:0.061189676459518 88:0.0761103071065845 142:0.00258469604935931 153:0.172899903423456 186:0.0565614962341342 294:0.190503642424936 355:0.0599890604642006 373:0.142309496148632 414:0.0736463729747263 448:0.0902655504731146 475:0.0807670705794497 505:0.143395724219839 543:0.220651666533421 772:0.092351805203838 1155:0.116029276197407 1189:0.135790434246851 1228:0.122733074484021 1236:0.109847416887138 1250:0.134592486294293 1911:0.134986000598335 2018:0.157765042535352 2055:0.307098421390444 2067:0.124296286928286 2090:0.160646523285879 2201:0.515206488590783 2336:0.180635399322761 3090:0.182824469107977 4322:0.381384441195712 5226:0.197565361668775
+1 6:0.0196908142172428 20:0.0370249372677288 29:0.0238377328138989 31:0.0250169468025759 63:0.0283744394378425 75:0.0266045193886767 117:0.0677629887947403 142:0.00851019151137811 173:0.049059428715301 189:0.0491166921510089 229:0.171863603879491 252:0.0473689619892321 255:0.0610908802948052 295:0.0557296144761794 297:0.0641196998247521 317:0.0782410116191281 320:0.124603126744589 345:0.0481671429302371 355:0.0395031665920281 360:0.161640974210203 400:0.0578352900636705 408:0.0772986561545308 438:0.0731878742058351 478:0.0514724096973911 480:0.0482762907513419 494:0.111191411405629 499:0.0977774456733211 507:0.0350952551985724 535:0.062242028325161 574:0.04914539229311 586:0.192995766869799 623:0.0911084525296356 647:0.0592884437259649 659:0.0961912716887922 697:0.140730012135773 856:0.0492606524328171 960:0.075639524186123 993:0.216384587725047 1017:0.0773434950347869 1027:0.0685892500007511 1045:0.034096614059197 1226:0.10388925429815 1277:0.0774814982798598 1380:0.0676021900893874 1891:0.187280480047026 2024:0.0639228745283977 2135:0.0917088193018363 2142:0.0853464929240633 2240:0.445760146279491 2611:0.079533558658484 2733:0.0853464929240633 2781:0.224230339091638 2864:0.0969918183881397 4487:0.487832233764221 4682:0.120391041372975 5842:0.127693198480454 6420:0.24391611688211 8739:0.145357281425891
+1 6:0.0104428209300317 15:0.107334142796505 27:0.0304069900236612 28:0.15422991604842 29:0.0379262897522288 94:0.0626902209716092 142:0.00270797555813945 161:0.101910906254477 176:0.0541297194719897 179:0.0569258559137783 186:0.0592592499887168 190:0.0895362432423788 205:0.0826310294596428 499:0.0777828949755867 535:0.0990282599211829 832:0.185150677803407 1001:0.122406203510056 1169:0.117685439244909 1294:0.118606843321978 1305:0.0949784422680828 1804:0.20698842738845 1817:0.296895654182044 1946:0.14542891140629 2190:0.321745769400882 2924:0.161703470325255 3316:0.160872884700441 3735:0.169390091368469 4033:0.363128707047627 5038:0.196768549705766 6500:0.216629432904325 8924:0.462532440982831 8926:0.231266220491416
+1 31:0.100692349474063 67:0.149438140924864 153:0.229132542702042 186:0.149914247429255 294:0.252461586840333 543:0.292414723219487 1228:0.325299677713387 2018:0.418150671340595 2201:0.455178865189124 4322:0.505422993465454
+1 6:0.0284395772372692 15:0.0243591399992214 29:0.0258217500318732 31:0.0270991101351776 63:0.0307360472650023 75:0.0288188165684945 83:0.0184221856058218 142:0.00553109743227043 228:0.0537720036637126 229:0.186167831211094 255:0.0661754812219299 426:0.0640056632374448 483:0.0690322805566818 507:0.0380162372872118 586:0.104529413267354 647:0.0642230276521103 697:0.0762214935397216 724:0.083194044290218 738:0.0861531458070234 741:0.0861531458070234 751:0.0896427669916706 950:0.0774737899890796 1017:0.0837808029384084 1098:0.0797580635101687 1395:0.0759205890487691 1509:0.0898449268773556 3473:0.120445885245146 3759:0.116889109934321 3795:0.122501284987323 3895:0.276642235876572 4020:0.115327616430915 5503:0.386549123878192 6661:0.140926082314735 7411:0.143933292991287 8360:0.47236615355931 8378:0.15745538451977 9082:0.536662177571204
+1 6:0.0206209223353234 15:0.0235497140663518 27:0.0200143934265142 31:0.026198638176734 60:0.05217164916429 75:0.0139306003812199 80:0.0447549562293359 86:0.0533971753760177 110:0.0663371259314521 142:0.017824351626982 165:0.73412259848295 179:0.187347790016842 180:0.105937789121524 192:0.0555105800975182 255:0.0639765468333239 286:0.038514742512388 291:0.0553251310344746 312:0.0623014805187996 317:0.0409683877526597 331:0.0537333699778241 345:0.0504423485245761 414:0.304724150821241 441:0.0484694974373472 506:0.269180055800532 515:0.0993221052870829 719:0.369921025342879 799:0.0693439358802295 1140:0.0698154608836706 1254:0.0945065634350767 1785:0.104338232669361 5572:0.127718824805 7708:0.131503477683913
+1 6:0.0406054878518351 15:0.0347795171168483 16:0.0558570978675935 26:0.0439379364368673 27:0.0295583605303884 29:0.0737356078456972 40:0.0317138614151245 42:0.0303672327583618 53:0.0390896606804961 63:0.0329132580827436 64:0.0440227259196766 72:0.031587189681017 75:0.020573479280535 81:0.061807396766437 96:0.0628955630715169 142:0.0131619929813309 144:0.0603520313874591 150:0.0442643361973441 158:0.0364309688702902 159:0.0305351048386669 160:0.0460051319944593 171:0.0438865218274781 173:0.0379380332132108 183:0.0446526866619727 185:0.0591138935589564 228:0.15354928966204 229:0.0531613782130217 255:0.094484094345997 284:0.0308238886666889 286:0.0568806968393105 312:0.0460051319944593 314:0.0405037337603425 320:0.0963565554001605 341:0.0424090296760528 345:0.0372480217590238 346:0.0422876628302153 351:0.0360204663013727 387:0.0716583233607732 402:0.0773746608963162 405:0.0482708146346954 408:0.0298878223954178 410:0.0645815959134657 430:0.0395039604810416 439:0.0547054704003082 448:0.0459657352003769 457:0.0349993940213973 478:0.0796080198974913 485:0.035125266152546 502:0.0350352415506382 507:0.0271394305277405 550:0.0413530223879011 586:0.0373112773897422 600:0.0882485345762214 608:0.0553849591812173 610:0.0653512258337971 701:0.0729484277324218 719:0.054631978106169 731:0.0584926252903879 733:0.114577801498449 737:0.0598103190414934 758:0.0531719795647888 767:0.04855217283875 796:0.0446169311675679 797:0.0750045184743726 827:0.0433546478378252 856:0.114280923180692 883:0.0591866286712776 890:0.0533046163523006 930:0.0444395178457882 956:0.0672108851469415 965:0.101397983925914 1037:0.0567665861314605 1058:0.0569385235921148 1124:0.0564289512335638 1154:0.0689419492950705 1190:0.0549283032728902 1236:0.0559373675850289 1266:0.0691482754009686 1314:0.0591866286712776 1319:0.0535737408122874 1332:0.0623707456078617 1335:0.0545588716001272 1380:0.0522772930720466 1472:0.103225098807202 1482:0.0601329610562608 1547:0.0681459179309634 1634:0.0882485345762214 1658:0.296343751427867 1776:0.0587858310131672 2248:0.133357175175331 2307:0.0711572047113931 2736:0.0663346995620335 2804:0.0663346995620335 3014:0.0909524982911315 3297:0.083446024774763 3676:0.61773974203355 5051:0.0971057958526897 5114:0.0943111037555234 6718:0.337217708089468 7703:0.197492263237125
+1 6:0.0165312011883687 15:0.0377582588042187 26:0.0477010640985256 28:0.0813830473759389 31:0.0630080873471377 60:0.0836490254547423 63:0.0238214408901085 67:0.0623404623791744 80:0.035878763014224 142:0.00571570830841298 144:0.0327604838910213 153:0.047793115498349 158:0.0395511515145932 159:0.033150327741434 178:0.0444713867442834 203:0.0835490614988527 220:0.0884106940285748 232:0.0978214724391096 255:0.0512881601434044 278:0.0475718500681214 284:0.0334638448751048 322:0.0477560123274368 327:0.0463419418611619 339:0.0857210048510244 377:0.0424115050865289 394:0.0513350424586708 423:0.041749601585396 448:0.0499025365990848 506:0.030827702812666 574:0.041259460300391 693:0.06552124268517 733:0.0621954909215956 761:0.0560329803136523 795:0.0652831348577405 800:0.0485940851788235 890:0.0578699667660062 975:0.0682778597639927 1045:0.0286254281126254 1059:0.0505126294062596 1179:0.0687161378295322 1404:0.0746258544917296 1440:0.0682778597639927 1584:0.0739823729307009 1788:0.0678519292161334 2034:0.0741938383995905 2280:0.0748465815440997 2316:0.0912363609573448 2594:0.0941250272122836 2691:0.0919084509177493 2798:0.470625136061418 2799:0.470625136061418 2833:0.0832522271968713 2873:0.0794956070883463 3119:0.0893826709114388 3185:0.086723285901211 3563:0.0949424984327963 4066:0.0987422556164004 4226:0.327666955102344 4407:0.0967233231108836 4685:0.415318236904746 4692:0.111553004898411 5186:0.114309621977234 6716:0.122033067649459
+1 63:0.0626064137502398 64:0.251215329677651 75:0.0587011966217867 81:0.176351705066244 142:0.00751088065753349 144:0.172199189679664 179:0.157890387456118 1658:0.422770805632851 3676:0.503589549351965 6718:0.641443375295192
+1 6:0.0145223682240982 15:0.0165849816842551 28:0.0357467847534327 29:0.0175808034006011 40:0.0302461824837726 63:0.0209267150216615 68:0.0297174661521508 75:0.00981068184192187 92:0.0319563608264248 142:0.00376586158669673 150:0.0422158365587559 179:0.0263880882567025 204:0.0581203411798189 242:0.033919738465034 322:0.0419528132306306 373:0.0345571171447889 411:0.0725338154964367 423:0.0366762874956181 430:0.0376757652403532 546:0.0418232293342352 643:0.0393854804704895 644:0.0461257448201927 685:0.0511593632295172 719:0.104207353221303 733:0.054637640105516 801:0.0585435744516712 834:0.0487812009267928 965:0.0967054085645722 1064:0.0897034207085821 1124:0.107634976014893 1154:0.0657513997387668 1155:0.0563509449234659 1296:0.0492803836674741 1614:0.0611711442494197 2666:0.065366380200272 3930:0.08416449973654 5921:0.103382830755329 7421:0.620296984531975 7424:0.413531323021317 7582:0.107203894243853 9674:0.562946903771079
+1 6:0.0332969727337842 12:0.224462094578702 26:0.144118477468409 27:0.0323175996383201 29:0.0403093712013482 63:0.0479808973806135 67:0.188348262089209 88:0.0847509158958517 110:0.107115745719748 142:0.0143906499542057 174:0.0813582977154537 185:0.0646321078307626 206:0.10585974880483 232:0.0985154939277912 268:0.427187427410037 373:0.0792327649025495 382:0.0974857549654095 409:0.0566829371104223 437:0.0998326120043333 457:0.0765330947502633 465:0.188757136335276 496:0.0930707546419313 557:0.104457032042601 574:0.0831043739035363 613:0.102651140903651 667:0.106902782554283 757:0.105452336594043 780:0.112604049574338 796:0.0975637412015148 975:0.137524551844569 1005:0.117001383303755 1050:0.131020449796235 1128:0.500744243034797 1237:0.136107849498371 1319:0.117149576338555 1676:0.150755202631272 2114:0.158924809068896 2301:0.196784537810482 2946:0.171864035540251 5188:0.230241246405201
+1 232:0.212383232447626 327:0.201228854257944 339:0.186111532007981 733:0.270069118287251 800:0.211008250658627 2798:0.408715531163344 2799:0.408715531163344 4226:0.474271925210319 4685:0.450855151987128
+1 6:0.0160524558696618 15:0.018332387836295 28:0.0790261857958657 29:0.0194331300781265 31:0.0407889110233308 63:0.0115657847328504 75:0.0108443426642643 83:0.0138643093035687 97:0.0333882952405012 102:0.101971176016976 158:0.0384057460221963 159:0.0321902907762451 252:0.0772327810861151 308:0.0395356627275182 389:0.045601940691866 405:0.0508873824834364 502:0.0369343619054123 505:0.0384896415147921 523:0.0627199678829844 546:0.0462297562528752 840:0.0676161820446821 895:0.0556425573557018 968:0.148547886080248 1018:0.290322346383469 1433:0.0515890292988895 1599:0.0648377932185501 2142:0.347883230266384 2163:0.0676161820446821 2280:0.0726790166994677 3767:0.171412221022091 5801:0.108322418187001 6634:0.100822644310778 9069:0.807770650082099
+1 6:0.00534369047815922 15:0.00915398308378549 23:0.0192191835822835 27:0.00777977254171055 29:0.00970362102246058 33:0.0147851221392113 59:0.0331814765978655 63:0.0057751886301252 68:0.0164023806374179 75:0.00541494813386573 100:0.04953137141161 102:0.203670668246512 132:0.0162048041164118 140:0.0188805301430104 142:0.00207854515107641 146:0.0239921795810494 162:0.0144707254462647 174:0.0195852742063334 196:0.149073542658679 198:0.0232642187165109 199:0.0124892117779688 205:0.0211415405991573 218:0.0151557237520069 240:0.0240528507394255 274:0.0288749949203861 276:0.0207559564730509 351:0.0189612028301048 355:0.0482416378422529 363:0.0249596060609822 367:0.0228047732928679 372:0.10549908689899 381:0.0513673071226471 386:0.021279346469981 398:0.0623457214274694 408:0.0157329740777973 423:0.0202432611444889 431:0.0297925729882692 434:0.0231197597278523 448:0.0241964004873535 493:0.0238525361882313 496:0.0224047982988509 502:0.0184425797180213 510:0.0241550986515677 523:0.0313182074339336 530:0.0219641730379437 539:0.0248229985717322 546:0.0230840854167676 567:0.028993559064658 574:0.0200056047920144 580:0.0483514409672446 664:0.0604075360703565 676:0.026717140074677 712:0.0245354693091488 717:0.027076284038252 730:0.0256836535613235 735:0.0347419794238296 848:0.0295307217080201 860:0.0734710816916013 880:0.34571296058148 927:0.0343181008850692 933:0.0310496405351779 947:0.0650064186173839 968:0.037087499142324 1018:0.376916267840554 1021:0.0286055819515229 1064:0.0247556377015359 1094:0.0275188096970897 1101:0.0344009385626246 1117:0.0637735824579406 1118:0.137603754250499 1129:0.0623117791800171 1144:0.0365099520787035 1184:0.0351918786346913 1193:0.0977034015970572 1201:0.0681501203628175 1207:0.0304425857799308 1245:0.0522561921736227 1320:0.0375847104254427 1331:0.0302037680351782 1411:0.169199094678401 1424:0.0248455904431132 1531:0.0365099520787035 1544:0.0350085926766147 1572:0.0413725994370636 1579:0.0335374644780316 1607:0.0345694760187505 1675:0.0789648793587508 1688:0.0359746006908074 1689:0.0855919362825045 1700:0.0768002236727835 1785:0.0811143960522292 1806:0.0367355408458007 1846:0.0350996628721171 1851:0.0361840736974876 1904:0.149327561286108 2026:0.0321885233822629 2195:0.0831829063909086 2198:0.0815054089024014 2210:0.0411600901675687 2243:0.0401811639888679 2395:0.0460350689947092 2521:0.0503441662223694 2608:0.0473716786216975 2771:0.0385452860151843 2814:0.0464541005538144 2852:0.0460350689947092 2965:0.0407527044512007 3030:0.0460350689947092 3074:0.0456386991428654 3141:0.0464541005538144 3153:0.0540890577121319 3254:0.0460350689947092 3414:0.05111657011146 3491:0.043626787131935 3925:0.532628348847127 4108:0.0496454419128769 4649:0.0484207589861024 4704:0.234492715396511 4737:0.0980151131907622 4842:0.0554256673391202 5357:0.0905253302112372 5416:0.05111657011146 5820:0.0496454419128769 5864:0.0570615453128037 6307:0.0529589703747538 7266:0.0554256673391202 7603:0.0570615453128037 7842:0.186429139288664 8287:0.0591705588288826
+1 6:0.0163796791901358 27:0.0238468487136896 31:0.0312152833109406 57:0.0611434380751984 65:0.0585917018812917 75:0.0165981008118754 111:0.051217365293575 117:0.253656960209802 118:0.0536281881094955 132:0.0496715694613458 142:0.00424748937037635 144:0.0486903108371305 187:0.0763666677570292 199:0.0382823973613204 203:0.0620874494415604 204:0.0983302993275182 229:0.0428890953662274 248:0.0996300484285549 264:0.0674192282624447 274:0.088508710477492 297:0.0800063497611155 327:0.0688757700137213 360:0.100845016069435 408:0.0482252984438976 411:0.0613577935396578 574:0.061321925331783 715:0.101054054111375 781:0.177500682115826 819:0.0822553679402866 876:0.0790396877125758 946:0.116421022658306 993:0.0899990749372467 1014:0.100432684730851 1671:0.12817915536586 1781:0.103964869169144 2135:0.114431101413379 2240:0.222481653970786 2333:0.126165442242097 2365:0.113316587348198 3167:0.126816833574264 3825:0.134643782189256 4487:0.304350117249144 4682:0.600879155112509 5842:0.159331168543602 5883:0.174907175132473 6675:0.181371801955869 6991:0.165795795366998 7947:0.174907175132473
+1 6:0.0203522075833168 41:0.0468572417326953 75:0.0206236025315772 81:0.12391595675589 83:0.0263669282043152 142:0.00527762383929293 179:0.0554719287143655 187:0.0948877115721066 204:0.122178135506373 205:0.161041147373262 245:0.117660777321044 351:0.072216446219131 710:0.1172702622214 739:0.103953886609458 882:0.0764177511282563 1993:0.447400050796093 2135:0.142183830520637 2333:0.627056303251279 2365:0.140799015754377 3364:0.383485879563752 6678:0.225359515306567 7613:0.21732703643252
+1 6:0.0216673405197683 27:0.0210300330226278 29:0.02623051888051 31:0.137640500579625 33:0.0399666706403264 36:0.496650216571565 63:0.0156113057229221 88:0.0551499671985034 114:0.0507145736888891 142:0.00561865696352978 172:0.0566391118204639 174:0.105884577243913 180:0.111313650935753 185:0.0420580543485449 199:0.0337604389728762 206:0.0688861189583198 218:0.0409684691008269 229:0.0378229888020641 308:0.160093758976313 457:0.099604768171799 496:0.0605639362287258 506:0.0404056744983676 507:0.038618049849343 561:0.0640024158094531 586:0.0530920782846541 757:0.068621003592619 772:0.066918650329209 882:0.0542371772586186 1001:0.0846583795366746 1003:0.152659308284038 1111:0.0896809961793133 1448:0.0906574044018438 1482:0.256698572059458 1685:0.10341714793913 2564:0.110161410989235 3341:0.308493898971136 4784:0.589652698158462 6674:0.159947967561677 6763:0.149824896318447
+1 6:0.0216624962352005 20:0.0305492407013458 27:0.0157689984182594 29:0.0393369815721953 31:0.0206414591322152 57:0.0404317899555949 59:0.0336281458861398 60:0.0411051504593591 65:0.0387444255374011 75:0.0109756818853101 80:0.035261664890365 81:0.0329734371040189 109:0.0595980610641174 117:0.223644711710282 132:0.0328458870885854 142:0.0028087003849942 179:0.0295216241779905 186:0.0307317172338388 199:0.0506293364532725 203:0.0410560281483099 204:0.0650220225397113 225:0.0516030903893067 229:0.0283608993838405 248:0.131762992665702 274:0.0585273858310904 275:0.0364178898409027 312:0.0490862714057918 327:0.0455448819021224 345:0.0397426640491431 360:0.0666849074265893 377:0.0416820468215224 405:0.0515036954664685 408:0.12755809608426 411:0.0405735349308153 439:0.0583693047065802 530:0.0445196833245148 571:0.042741995888922 655:0.0410070676903087 681:0.059260330945425 697:0.0580580999172449 767:0.0518038973041274 781:0.0586871667852201 796:0.0476050974671376 819:0.0543922923534596 993:0.178538718558089 1017:0.0638160445597966 1235:0.0634795890034895 1316:0.0751734979624373 1351:0.0719064992518931 1378:0.0664122486655096 1781:0.0687479455741108 1969:0.07400285464557 2135:0.151337720036056 2185:0.0676806521084084 2240:0.367796274853611 2333:0.0834283256056605 2365:0.074931874987344 4487:0.503137393028342 4682:0.49667267152865 5883:0.1156593477453 6499:0.112343549366726 6675:0.239868310693573 7609:0.1156593477453
+1 6:0.0204390341779256 42:0.0407614465316912 60:0.051711465813585 75:0.0138077246342683 83:0.0176529432013285 96:0.0422118497200623 138:0.0571306091487905 142:0.00353342615988798 179:0.111417166149363 186:0.0773227747555211 248:0.0828808241130852 274:0.147258281638224 327:0.0572967761252683 347:0.0559681421043005 383:0.0816129714370055 473:0.0599846983592282 475:0.0552065841772163 505:0.0490075228864972 507:0.0364288196807274 539:0.0632968442914013 574:0.0510128398797665 710:0.0785137071014769 796:0.0598885867759612 808:0.0711079752944508 876:0.06575199509169 989:0.0823952471560435 1059:0.0624533781355129 1244:0.096169152968552 1363:0.077137632686048 1446:0.0711079752944508 1499:0.103916437840779 1660:0.0958382830608465 1827:0.0917326201260977 1844:0.0885895253794779 1943:0.0817668296040326 2050:0.0877198959418289 2433:0.0928166143073778 2681:0.104428624996999 3627:0.119587880175148 3955:0.112803847622929 4244:0.321671761965613 5125:0.126592272785113 5198:0.141331427997036 8300:0.150880629429357 9092:0.514253147898578 9585:0.58201119228268
+1 6:0.0204512676680957 15:0.0233559633291993 28:0.100681521358636 29:0.0495166780813656 57:0.0508948029937228 60:0.0517424169682827 75:0.0138159890494121 142:0.00353554104133578 154:0.0492796040388449 258:0.0646457971437457 274:0.0736732104831969 309:0.0501691553418267 322:0.11816092245692 345:0.0500273438165442 367:0.0581853215025459 398:0.0530240723287523 478:0.0534602590136382 493:0.0608586399408496 521:0.0672230207100533 571:0.0538028482714794 647:0.1231562919529 676:0.0681675439132655 710:0.0785607003525123 784:0.0669417394607731 800:0.0601172674480307 993:0.0749137656098938 1660:0.0958956456878444 1664:0.0809105198989421 1827:0.0917875253675501 1943:0.0818157699647901 2099:0.0991100790673481 3167:0.105560268840492 6022:0.282832039784273 6872:0.15097093686174 9063:0.686081262306301 9086:0.514560946729726
+1 6:0.021389694836814 20:0.0301645262394257 27:0.0155704153568731 29:0.0388416008245343 31:0.0203815159172289 57:0.0399226220037855 59:0.0332046579776698 60:0.0405875027051738 65:0.0382565070006118 75:0.0108374622944537 80:0.0348176056560513 81:0.0325581941119869 109:0.0588475273203194 117:0.220828296213477 132:0.0324322503667725 142:0.00277332969713091 179:0.0291498507558071 186:0.0303447047979134 187:0.0498623843625375 199:0.0499917481701 203:0.0405389990040484 204:0.0642031834510781 225:0.0509532393718422 229:0.0280037432681553 248:0.13010366733844 274:0.057790335376458 275:0.0359592699677812 312:0.0484681153384721 327:0.0449713234655809 345:0.0392421744374891 360:0.0658451271999833 377:0.041157134062759 405:0.0508550961548853 408:0.125951724103419 411:0.0400625819479996 439:0.0576342450082926 530:0.0439590354778961 571:0.0422037349183612 655:0.0404906551177139 681:0.0585140503240583 697:0.0573269593010794 767:0.0511515174734284 781:0.0579481041678504 796:0.0470055942049855 819:0.0537073161967709 993:0.176290334458678 1017:0.0630123926626935 1235:0.0626801741779251 1316:0.0742268187273622 1351:0.0710009621736169 1378:0.0655759021009571 1781:0.0678821849763852 1969:0.0730709176235061 2135:0.149431885121824 2185:0.0668283322123808 2240:0.363164521568486 2333:0.0823776911984732 2365:0.0739882385726702 4487:0.496801254159192 4682:0.490417944563564 5842:0.10403271741711 5883:0.114202819769078 6499:0.110928778094099 6675:0.236847587233296 6991:0.108253691264681 7609:0.114202819769078
+1 31:0.0865145522071345 75:0.0460023779032939 117:0.234340532362262 142:0.0058860532711212 179:0.123733989919349 377:0.174701972023517 1891:0.32383022189457 2135:0.317150909659625 2240:0.308308921560212 2365:0.314061984138199 3825:0.373171257410812 4487:0.421759973243138 4682:0.416340855514035
+1 6:0.0131578261257618 27:0.0510832453439884 29:0.0477866593230547 56:0.0404915095177415 64:0.0760807997640471 81:0.0534082803720989 83:0.0113642530869628 142:0.0113733864905995 160:0.0795068265825992 162:0.0237542811924713 172:0.068789945362359 186:0.0497772848236339 229:0.0229685922810945 334:0.059932563244439 439:0.0472714473328829 507:0.0234514053429891 527:0.0418321563232537 540:0.099161414076168 586:0.0322409819556518 631:0.0294356967553261 667:0.042244327628685 671:0.0535702023286473 677:0.065661849629519 713:0.0438572661992105 733:0.0990076215306781 890:0.0460609578175404 913:0.0457764475040527 946:0.0623474796927596 1149:0.0420777612915345 1380:0.0451732393136869 1393:0.0502142336105721 2528:0.050460676879556 3256:0.155525053490618 3298:0.0668972128924867 3843:0.28457257984045 3982:0.0794846346010699 4177:0.0785928025351395 4711:0.0936688348950162 5819:0.0971308658958595 6132:0.582785195375157 6342:0.0909834750263801 6453:0.266368128764707 8198:0.0869342921760968 9075:0.331055442530792 9928:0.485654329479297
+1 31:0.096104543812791 59:0.156569242462784 75:0.0511016635919789 142:0.00653851230859448 377:0.194067389776428 1891:0.359726253607148 2135:0.35230655092192 2240:0.342484443414993 2365:0.348875223237329 4487:0.468511352055338 4682:0.462491534302871
+1 6:0.0107683474523474 11:0.241946864429583 17:0.0293389692248008 29:0.0391085386187087 31:0.0410431746084622 40:0.0336413521265668 59:0.0334328560428555 61:0.126443206032532 63:0.0232757634545694 64:0.0466983192254505 75:0.0218238848901266 80:0.0350568886581666 83:0.0139507344838555 85:0.0329957474829423 142:0.00418858398959756 144:0.0320100399141376 150:0.0469546139831911 158:0.0772903076061839 176:0.0279085330811429 177:0.0561950758977567 178:0.0434526812685972 179:0.0587003645479509 186:0.0305532479164172 199:0.0251676575169911 209:0.0338224353937511 268:0.0518076674988342 278:0.0464821223195451 285:0.114835773480811 304:0.122306777971496 322:0.0466620659763901 337:0.082325802227404 355:0.0324047410105384 377:0.0414399852930902 386:0.0428811132089693 418:0.111172966191359 455:0.0393123741727781 478:0.0422232000451549 502:0.0371645976002863 575:0.0561950758977567 580:0.0487177464979512 634:0.060491152506629 731:0.0620476635892352 739:0.0550019729039211 793:0.0646185350727618 829:0.0399420727880128 874:0.0735730954213995 1005:0.0567579322252514 1143:0.127807127405761 1266:0.220052813934485 1403:0.153627569023236 1422:0.073132071877608 1429:0.0867776381400224 1443:0.0776746022543942 1502:0.0770951871451415 1827:0.0724942811117901 1918:0.0779730607199971 2376:0.0747369404226337 2435:0.0792311133370004 2777:0.0879145983447952 2842:0.086240371965433 3376:0.0785886994475089 3878:0.108997661671255 4088:0.0919689064425037 4091:0.0945076832108689 4393:0.100043101322617 4537:0.0891464108277624 4748:0.103007647950839 5631:0.446764531834536 6401:0.476950631046624 6402:0.119237657761656 8136:0.375683014446216
+1 6:0.0160325037678554 15:0.0549288058062192 17:0.0873629192823036 29:0.0582269280903528 60:0.243376745676083 98:0.103997758570745 102:0.305533298514388 144:0.0953165911118032 186:0.0909786881427934 208:0.120114569362784 224:0.152472398870238 226:0.124314317555465 252:0.231410358107001 387:0.113173110341328 437:0.432624931647704 515:0.115832502641171 713:0.160317163078328 812:0.179578592792954 852:0.159107138335415 953:0.350377654308931 1449:0.205435486196824 1620:0.193894011671453 1690:0.209530558933017 2896:0.269453962784402 3052:0.287290481891359
+1 6:0.0308862314911692 15:0.0705460122856117 27:0.0599555323932078 28:0.0760264064319359 42:0.0615962311395529 56:0.0950483859900858 60:0.0781432375895253 63:0.0222535110849286 75:0.0208653978318076 80:0.134068875872592 142:0.00800924965787663 144:0.0612083706254047 179:0.0561222928608483 205:0.0814646132286789 229:0.0539156887649701 317:0.0613628763724638 398:0.0800788390787725 409:0.0525790236604767 410:0.13099589748268 413:0.089018461573586 508:0.079879200577677 608:0.224683281122583 701:0.147966996256383 719:0.221628620415666 733:0.116203554020195 797:0.152137525773934 890:0.108121918640657 956:0.13632909029108 1266:0.140258850333562 2736:0.13455185460291 2804:0.13455185460291 3676:0.358002797076529 6342:0.213571500692945 6718:0.684005027955984
+1 6:0.0260223687792121 26:0.0375439953512283 29:0.0945081702513461 31:0.0330611120619123 41:0.0399411683590335 59:0.107723382582081 79:0.0588237196749901 100:0.10720211835964 111:0.0542459613971628 117:0.0895520857869971 132:0.0526087592380443 142:0.00674797921856004 187:0.0808823977460127 199:0.0810922403973614 204:0.0520723937176161 218:0.0492029287253236 242:0.121560330878658 248:0.105521393575683 274:0.281227278932892 299:0.0718075772510959 309:0.0638356645091113 337:0.0663151083948041 398:0.0674682854240344 408:0.0510769670161556 462:0.106588846589044 507:0.0463800868314571 539:0.0805876545032708 574:0.194844079265723 643:0.070574129613986 655:0.0656803984425604 658:0.160448570839075 710:0.09996131043336 819:0.174238619594044 851:0.0985184315407447 862:0.0834642601204687 1009:0.077309098158429 1011:0.104103088988478 1027:0.181288060322682 1042:0.0988315967520944 1064:0.0803689680090209 1476:0.111682355516471 1581:0.123750131994643 1591:0.102951241023198 1602:0.119636436289598 2135:0.121197665563709 2240:0.117818743151848 2365:0.120017247816527 4487:0.161173506455145 4682:0.636410468710343 5842:0.168752772983137 6991:0.175599667490477
+1 6:0.00758604140898189 15:0.0259904629635801 29:0.0275510234712587 59:0.0471052836071601 63:0.0163972147233733 68:0.0465704887773358 75:0.015374401245315 102:0.289136155888522 142:0.00196717102171878 180:0.0584587179455521 196:0.211628662291445 274:0.0819833813524494 372:0.149769236279046 381:0.0729223596488179 473:0.0667907888940049 493:0.0677233563480995 523:0.177840553767063 664:0.0857561028127042 673:0.0767029312752101 712:0.0696623754421208 767:0.0725653231887784 860:0.208602901067419 880:0.178466572038176 927:0.0974377297696455 947:0.0922847955914844 1018:0.329280059250773 1117:0.09053462944802 1118:0.488364633974476 1129:0.0884594156527156 1193:0.0924681863396378 1201:0.193495352027771 1245:0.0741842438900715 1327:0.0986412276745326 1411:0.0960797668831113 1531:0.10366094722028 1846:0.0996567810495294 1904:0.105994636857122 2210:0.116863860167352 2965:0.115707189538158 3030:0.130705152585672 3925:0.274957454384176 4108:0.140955910398472 4649:0.137478727192088 5109:0.140955910398472 5864:0.162012095338478
+1 59:0.204253287789485 100:0.203264923622964 242:0.230489394703372 274:0.355488257431734 574:0.246294678353698 658:0.304225019020677 1891:0.469282911814043 4682:0.603345938003239
+1 6:0.0379991731378713 11:0.0106722280650647 15:0.0162735748600906 18:0.0127130319859996 26:0.0616765864288162 27:0.0207458397661221 29:0.0690027943803709 31:0.0181040626820466 33:0.0394265736148607 37:0.0112370104803411 47:0.0337224537470805 59:0.0147471663002137 63:0.0154003394440327 67:0.1612101108688 68:0.0437392171380884 80:0.0154635238565129 83:0.018460923695525 92:0.0156781671534372 102:0.0905193355771325 103:0.0452160066058874 107:0.0454357900747678 134:0.0170092752305879 141:0.021694412944602 142:0.0110854563985492 153:0.102992678620609 158:0.034092600949258 172:0.0186245695550187 174:0.0174089477244459 176:0.0369311952902013 179:0.0258926140429689 180:0.0183015655405013 185:0.027659796680647 192:0.0575392706381994 204:0.0285145241969639 215:0.0151300030619794 221:0.0226080033029437 229:0.012437286939733 232:0.0210802233084471 256:0.0161622439822786 275:0.0159705705930106 278:0.0205031716989578 292:0.0234192622335304 323:0.0203165310052726 331:0.0185657035230944 345:0.0174286051312689 355:0.0428810004133539 394:0.0221250842293546 405:0.0451724912037225 408:0.0279694346257215 409:0.0121289446403444 416:0.0231060280700408 423:0.017993818790791 427:0.0504568574787605 440:0.0268058700143129 442:0.0202100759471412 457:0.0327529135468704 473:0.0209100719859085 480:0.0524042962186543 490:0.0245777940604856 493:0.021202029199167 502:0.0163932300785013 505:0.0170835372926413 514:0.0252284287393803 527:0.0226517378658995 530:0.0390470040092261 538:0.0208100737255916 541:0.024489930813597 553:0.0910795174676976 574:0.0177825709434019 575:0.0247875362025626 593:0.0228749249350606 613:0.0219651639233714 624:0.0304318445893156 643:0.057968942357557 644:0.0226298338942831 655:0.0179830921621626 656:0.0234439925304617 676:0.0237483167203421 703:0.0341330702102932 720:0.0236452880853198 757:0.0225645603059079 761:0.024149866245059 768:0.0296804300578755 784:0.0233212690272048 792:0.0260614453710494 834:0.0239326319486056 840:0.0300112841295864 852:0.0471381434289803 909:0.0209100719859085 912:0.0225862456018612 927:0.0305046545693618 947:0.0577828694937303 975:0.0294273331807333 987:0.0193891379573367 997:0.0225862456018612 998:0.0262874712228388 1005:0.02503581100906 1008:0.0617628629817847 1045:0.0123373815966562 1067:0.0252610925943395 1190:0.0257013302469376 1317:0.030804313130246 1433:0.0228976698985372 1462:0.0291837001163397 1526:0.0382774435767699 1551:0.0254269138933157 1552:0.0338824075600827 1558:0.0286117168943037 1627:0.0317073995275851 1713:0.0390449679444008 1717:0.638641844891308 1802:0.0707965467965991 1824:0.0336410308757048 1858:0.0305782872784566 1928:0.0342621125541946 1984:0.0409196267142889 2001:0.0311184185318437 2054:0.0369697879557519 2114:0.0340065337020005 2153:0.0378117865673687 2265:0.0412920952552194 2351:0.042107711541649 2740:0.0343937619897173 2902:0.0340065337020005 2912:0.0387789544616018 3103:0.0342621125541946 3167:0.0367752533478122 3253:0.626498525508352 3712:0.0430402175168148 4190:0.0405673016991986 4687:0.0480786517592152 5149:0.0833743021638396 5975:0.046203992989327 6523:0.0441288130006781 6968:0.105190987333245
+1 3:0.137596774590493 31:0.205751065990469 63:0.0583411637648061 67:0.152678217141238 142:0.00699917935256909 703:0.38791931427965 947:0.328348592333175 1526:0.435019749855402 1717:0.453631743742572 3253:0.50857858232731
+1 6:0.0142567917661482 15:0.0244225280617918 26:0.123414650295623 27:0.062268537578194 29:0.0258889441408093 41:0.0328236598110718 63:0.0154080147505633 64:0.185479215628736 94:0.0427931031353682 97:0.044480107268521 134:0.102106514444722 142:0.0295759499460046 166:0.0531880227763659 176:0.0369496012640062 178:0.115058662671988 192:0.0575679473788193 198:0.0620681761413843 199:0.0333208093488161 204:0.171172412541473 218:0.0404349762548488 226:0.0552728184131956 283:0.0534367894918394 317:0.0424867833518753 327:0.0599491296148273 356:0.0679890814937023 436:0.0629641657424643 499:0.106191089942567 550:0.0580770196616197 582:0.0601245480044521 599:0.0668382190159229 834:0.071833678879098 886:0.0613986088752482 1045:0.0370305911078339 1613:0.0817449310318256 2246:0.0902835323157312 9067:0.896764492496723
+1 6:0.0176830192676275 27:0.0257443555750662 42:0.10579542625963 57:0.0660086550549684 64:0.153369360021802 65:0.126507751618715 68:0.0542777718941413 81:0.0538322008045229 137:0.0723811569151595 142:0.00229273221726588 148:0.0777197462941311 229:0.0463018042617612 245:0.102229587817175 248:0.537788330756124 314:0.0705548281659295 319:0.0802067217154864 351:0.0627452724577783 415:0.0769242818726629 457:0.0609666320073713 478:0.069335955516239 574:0.0662013446406785 582:0.074573828267912 586:0.0649937800910118 647:0.399322755722752 720:0.0880271964411982 1378:0.108424168665325 2393:0.138378441221713 2574:0.164283711693888 2682:0.130107735651522 2709:0.132366061959907 4492:0.136907718736256 5375:0.550233858501695
+1 6:0.0195175533482491 26:0.253432054764917 27:0.0568304344125805 31:0.0743904627471451 63:0.0421871561032102 64:0.169280744476278 94:0.0585837744621367 97:0.060893283761817 134:0.0698919285477169 142:0.0632648230012084 150:0.170209809335898 166:0.0728144234027818 176:0.202336072714237 198:0.0849713567357013 226:0.0756685094222351 229:0.0511054091567679 283:0.0731549851308454 317:0.058164422562073 387:0.0688870013897282 496:0.0818323680688216 582:0.0823105290772793 643:0.0793990557566523 696:0.215406609209098 834:0.0983403336964482 883:0.113795276816748 966:0.0974765070130535 997:0.278423902670644 1031:0.23983444980903 1045:0.101389786611103 1511:0.117792880103873 3408:0.168140710744174 3796:0.162767491016101 9392:0.680922797943956
+1 6:0.0203739229292206 15:0.0349014499635989 26:0.088183955223015 27:0.0593239772473791 31:0.0388272425246208 63:0.0220190986983239 64:0.265062386136899 81:0.062024086141757 94:0.0611542484089833 97:0.0635650917988505 132:0.0617841604973762 142:0.0184913923066309 176:0.0528034876826766 204:0.0611542484089833 205:0.0806064873204625 226:0.0789886084403052 265:0.0962353914576454 387:0.143819097824097 582:0.171844118549244 586:0.0748841725732422 979:0.312287861369379 984:0.116819053824676 1045:0.0529192276656448 1059:0.0933816369496047 1387:0.165239866202721 1836:0.108635759050729 1911:0.137959249659198 2163:0.12872860946624 2229:0.144810708161476 2423:0.131480124277463 2540:0.164184980032307 2976:0.13755706767088 4517:0.730170935382994
+1 6:0.0523462286799451 27:0.127016386337875 29:0.0950556487396366 31:0.0665052650313933 63:0.0188577130317181 64:0.302674841918186 81:0.0531189960833795 98:0.056592225926067 100:0.053911565951589 118:0.0571283756717558 134:0.0624835638866824 142:0.0316729921104271 158:0.0626195761017884 166:0.065096281803892 169:0.0635939350107935 176:0.0904444847117716 179:0.237791261211065 180:0.0672307916812213 189:0.0652861169419736 208:0.196087423608274 229:0.182753468925777 248:0.106132670811116 256:0.0593719950279118 283:0.0654007448647202 308:0.0644618760815023 312:0.0790761803304441 320:0.0828115040704718 351:0.0619139814483541 355:0.0525077777179348 402:0.0664979359126819 511:0.339478885731317 519:0.104313713676215 582:0.0735858247012819 631:0.0585525184396145 633:0.0907237514100043 730:0.0838647877125708 755:0.0910570016011634 772:0.0808345391971419 987:0.0712259883999227 1225:0.155642414226955 1509:0.110246436947541 1665:0.0940308060187185 1718:0.49607821207266 1949:0.10856165542 2285:0.117807351843131 2528:0.100374716386865 2744:0.119952495355991 2835:0.142454469441641 3927:0.162107172057091 4429:0.164388715286339 7379:0.176616902722588 8736:0.19320951916635
+1 6:0.00717113590553762 15:0.0245689592386089 26:0.0931159595217352 27:0.0626418836631359 29:0.0260441675700751 63:0.0155003972314691 64:0.186591301148749 94:0.0430496795403952 97:0.0447467985150536 132:0.043493107662716 134:0.102718718760057 142:0.0204553798011516 166:0.107013848874977 176:0.0743422830790775 192:0.0579131099377606 218:0.0406774139395384 226:0.0556042199710426 317:0.0427415231425164 327:0.0603085691280688 550:0.0584252344866191 582:0.0604850392810969 886:0.0617667390921441 1045:0.0372526169775732 6603:0.148760484825411 7389:0.56855983785277 8294:0.158811638025373 9053:0.721713008810188
+1 6:0.019599146871228 15:0.0268593788729546 26:0.050898306509922 27:0.0114136030365483 29:0.0142360561023702 54:0.0293499624028747 94:0.047062948084415 134:0.028073645262365 142:0.00406587538315739 172:0.0307396730174354 174:0.0574666017430605 176:0.0203181942721808 179:0.0213677552894919 180:0.0604131159928553 185:0.0228261142675031 228:0.029645599541029 265:0.0370303073775427 286:0.0219637923929744 314:0.0312800527731107 341:0.0327514666715045 348:0.0389422944996205 411:0.0293671296810854 502:0.0270568686607271 709:0.0341842749710966 716:0.0375323123794418 910:0.062785407839395 1317:0.101684445415308 1378:0.048069193928953 1472:0.0398591220911129 1558:0.0472233636970864 3519:0.066955941491651 4293:0.062785407839395 9056:0.394497034915315 9062:0.887618328559459
+1 6:0.0111118277608631 15:0.0380701254193591 26:0.0480950539134728 29:0.121067976409534 31:0.0423523376290056 33:0.0614892390589335 37:0.052575344016681 60:0.0843399296239105 63:0.0240181955173991 75:0.0450400121365188 80:0.217050634923403 88:0.0848489369474641 134:0.0795824208126422 142:0.00864437631870262 158:0.0797556532703466 172:0.0871400051847233 199:0.0519408714681161 226:0.086159922672536 256:0.0756193596985982 276:0.0863210974824132 308:0.0821021054111786 312:0.100715667735064 325:0.299340279758291 337:0.0849517661529741 351:0.0788569700464736 355:0.0668767240912133 404:0.0933136039151528 405:0.105675760883251 408:0.0654312216746613 507:0.059414368550882 515:0.0802813357848087 527:0.105982183869886 561:0.0984685434889803 799:0.448401594786973 850:0.101859683028766 1057:0.151381257433963 1411:0.140735037333825 1783:0.160920368615902 1875:0.173911183537232 2117:0.206468395541447 2213:0.154241681562598 2238:0.171179013617259 4212:0.182682273491557 4960:0.201375111864329 5006:0.224948767336401 5904:0.220248893382623 5991:0.224948767336401 7170:0.237310924304499
+1 6:0.0126156013288419 15:0.0432221894692456 28:0.0931598438240063 29:0.0458174045693238 31:0.048083917279019 80:0.0821414303537581 134:0.0903523808470595 142:0.00327140916028634 159:0.0758949057496138 176:0.0653921929214394 199:0.0589700759601658 264:0.103852352147337 337:0.0964483644843401 365:0.133667664802146 436:0.111431916245861 499:0.187933509497076 521:0.12440189671785 539:0.117206284700554 685:0.133326628435856 884:0.130244109063296 963:0.107035833230323 1007:0.145624453590624 1159:0.128282827033994 1411:0.159780835539636 1892:0.167504929748676 2271:0.215491385927609 3593:0.434725835979214 3691:0.386739379800281 5100:0.482712292158148 7977:0.293419651575716
+1 6:0.0147749683676675 13:0.0196394700078167 25:0.0221775871765078 26:0.0255800545330854 27:0.0172084657494635 28:0.065463407241146 29:0.0429278437423497 30:0.0177619999740544 31:0.0225257072817237 42:0.0176793798929074 63:0.0447104941974592 64:0.0256294177888498 67:0.117006897035703 68:0.0181406206862321 81:0.0179917027066717 83:0.0153131508147807 85:0.0181090414285154 88:0.0225640711214844 100:0.0182601505783278 111:0.018479847945827 116:0.0316370545936308 132:0.0179221060203853 142:0.0091952747588035 174:0.021660820966588 185:0.0172076426833773 186:0.0335370509536195 189:0.0221127749675321 190:0.0506719466140235 196:0.0274785984984275 218:0.016761849507582 227:0.0210043267087612 228:0.0223485643705367 242:0.0207058403337609 252:0.0213259311863483 274:0.0638700371301785 275:0.0198711418877828 286:0.0496727240178921 299:0.0244625235645263 309:0.0217467502329289 314:0.0235807095736471 317:0.0352248045908015 331:0.023100096944274 346:0.0246192882277919 347:0.0242749492561028 351:0.0209706137114612 355:0.0177846796088955 357:0.0273544312299892 373:0.0210949194296612 382:0.0259545927630355 399:0.0278629341529188 426:0.0798055449385966 430:0.0689959664921812 475:0.0239446402742342 493:0.0263803054544553 508:0.0229269665761688 534:0.0225232248679983 541:0.0609424550218568 543:0.032707790087891 574:0.0221256960287034 576:0.0289268811244915 586:0.0434442118919289 591:0.0310720922937938 594:0.028294023807013 597:0.0264241323945147 609:0.020925880002571 641:0.0233820124779315 643:0.0240423277712202 653:0.030186708347253 655:0.0223751915345966 679:0.0371739077616522 772:0.0273791130273418 803:0.0369294280085754 872:0.0337226083662512 987:0.0241246428352816 998:0.261662320703128 1059:0.0270877775840139 1081:0.0328521493464634 1146:0.033831441734145 1159:0.0300481072940851 1176:0.0333527999752863 1227:0.0322895215501607 1269:0.030186708347253 1319:0.0311898856126026 1378:0.0362373334118016 1431:0.0345170300065073 1476:0.0380465733304179 1491:0.0339417558735102 1530:0.0802740850207689 1566:0.04599910176982 1666:0.0426301174384805 1744:0.040628584771836 1851:0.0400186759677662 1865:0.0350721644697846 2103:0.331318855157918 2122:0.345006188367205 2142:0.0384237559503305 2157:0.0476261325784109 2285:0.0399020126000663 2316:0.0489261850399954 2422:0.0470467458588843 2570:0.044855241550105 2756:0.0489261850399954 3496:0.0500593698609739 3563:0.0509136291467631 3578:0.0529512775264368 4492:0.0457570550142616 4817:0.0473312650225597 4855:0.0529512775264368 5164:0.0542011257151152 5768:0.0585712900303139 5956:0.565336416506402 7828:0.48110053103855 8182:0.0612993948687281
+1 6:0.0268025383555778 15:0.0459139584735059 29:0.0486707970279153 41:0.0617079505324343 63:0.0289668189806812 75:0.0271599479132624 142:0.00695028855223125 174:0.0982345562987375 179:0.0730529349672817 180:0.206542773164726 204:0.0804503430332265 229:0.210541966709877 288:0.278378441913034 295:0.227572376600563 351:0.0951043793047014 365:0.141992150012278 457:0.0924084551431476 574:0.100342823364501 1141:0.356847499987928 1608:0.14522472587301 2240:0.364053104749174 4024:0.223520942566891 6233:0.252513024784973 6493:0.556000981273902
+1 6:0.0148400137188753 31:0.0565621862547721 60:0.112637249208999 179:0.0404479061921743 180:0.114358481522748 186:0.042105868169864 200:0.0716816358990295 245:0.0857935210453111 478:0.0581883961952143 513:0.0555253107341143 571:0.0585612847639434 1817:0.105477619760417 3365:0.363469098104307 4047:0.11884909070323 4181:0.144354275781874 5060:0.141956313678039 6239:0.141956313678039 6422:0.164323122449379 6661:0.147072860995794 6701:0.492969367348136 7411:0.150211237303097 7621:0.158466160928156 7805:0.517734138223312 7806:0.345156092148875
+1 6:0.0106338949714564 15:0.0364326845206781 63:0.0229851446613935 75:0.0215513941036673 142:0.00551504767983004 159:0.0639730469894342 174:0.155898063144605 180:0.0819457518466701 229:0.0556882867180815 255:0.0989751867446755 312:0.0963837683343994 365:0.112670642606327 373:0.0759125678188388 405:0.101130522038792 413:0.0919451411058151 427:0.112960968086779 467:0.13347849256089 506:0.0594908773147978 507:0.0568588866352629 535:0.10084019655834 1294:0.120777012574712 5849:0.227103902161031 6227:0.421551458538517 7808:0.741984549785366 7809:0.247328183261789
+1 6:0.0170559918812743 26:0.184557587359041 27:0.0248314788912109 31:0.0108347180784775 41:0.026178871302619 43:0.0519337238852871 63:0.0491553272859344 67:0.0321597447184359 73:0.0308897206350789 75:0.0172834320749337 83:0.0147310510516996 117:0.029347821120619 134:0.0814361748870467 142:0.0162171793707702 144:0.0338004807336698 150:0.12395240130541 153:0.0246551651217634 174:0.0833497072784109 185:0.0165535274819839 189:0.0212722006647412 192:0.0229569751554289 209:0.0178571251232236 232:0.0252317151779276 286:0.0159281705473325 345:0.0208609555120097 453:0.0275724576589417 475:0.0691032934816773 538:0.0498167258850051 592:0.0280019104653623 823:0.161944414641807 954:0.0776883128224135 966:0.113576975731524 997:0.135171650609726 1059:0.0260580881944973 1277:0.0671137206938363 1377:0.0271127202854834 1471:0.0329233217655407 1557:0.0418314023824709 2091:0.112925456340521 4114:0.0455320586744209 5667:0.0589692171240108 7810:0.727276669986426 7811:0.528928487262855 8188:0.117938434248022
+1 6:0.0138237703556665 11:0.046589570594962 15:0.011840371416263 27:0.0402515038906121 28:0.0510407809276831 29:0.0376539292033773 30:0.0207731247360908 31:0.0263444053493659 63:0.0298800545090733 75:0.0350202728789928 83:0.0089545657145218 92:0.0228143261476253 94:0.0207466742957663 97:0.0862582267260775 103:0.065796767677256 107:0.0661165889734459 118:0.0452599680622928 134:0.0742539256370185 142:0.00896176246229188 174:0.0506657962484338 176:0.0537409970264016 179:0.018839017845953 180:0.0532636093449988 199:0.0323087567005564 229:0.0180983094425334 274:0.037348841632193 308:0.0255349676791764 314:0.0275782581947098 319:0.0313509612016753 324:0.0732343648962107 337:0.0528425085359576 345:0.0253615029021917 396:0.0351019543222972 441:0.0243695889640457 455:0.025233455509557 475:0.0560077693845363 504:0.0367115362286566 547:0.0433795902991125 553:0.0441785870448688 574:0.0258765816996098 597:0.030903715745752 633:0.0359379559021687 678:0.0373996861331404 693:0.0410927767125129 717:0.0350222691751535 743:0.0438710202980247 755:0.0360699646704145 757:0.0985055012793153 764:0.0319629462251258 804:0.032555794053972 823:0.0393764680584015 829:0.0256376405104964 834:0.0348259375922562 913:0.0360699646704145 965:0.0345200247176946 1008:0.0449375901560218 1009:0.0308014778097238 1046:0.155309959026062 1223:0.0424671102261272 1227:0.0377634421692363 1306:0.0989702614386987 1317:0.0448253701870332 1558:0.0416347800404117 1591:0.0820356320639296 1838:0.0529720723818117 2216:0.0470818074207756 2229:0.0982545178766056 2379:0.259864968730761 2528:0.0397609454540929 3366:0.055355155594349 4140:0.062630634708986 4624:0.220089611886354 5149:0.0606616992688295 9944:0.841886559907531
+1 6:0.0142429448516142 31:0.0542864794315366 42:0.0852138652886903 60:0.216210868684141 180:0.219514830174467 346:0.118663930706537 457:0.0982122299735693 535:0.270128934367248 574:0.106644921497775 608:0.155416415062986 946:0.202467726753692 993:0.156517334209995 1378:0.174662418392482 1711:0.207070693118574 2190:0.219414240678885 2682:0.209592861445957 8419:0.304180957471216 9664:0.662538361325403
+1 6:0.00914517873079279 15:0.0939966247020092 29:0.0332135062646254 67:0.0517307844833695 92:0.120743377457574 96:0.113322843013079 106:0.0640137924577048 142:0.00237147803679983 159:0.0550169952065697 174:0.067036380134878 180:0.0704735704912041 200:0.0883478121288312 255:0.0851189310335727 365:0.0968970604951365 409:0.046704749558371 499:0.0681174638075565 507:0.0488987978637285 530:0.0751788633443637 541:0.0943030180504147 574:0.0684750855942539 726:0.0842786097572454 738:0.11081541895676 741:0.11081541895676 781:0.297309021247088 795:0.108345291351342 936:0.10700924251075 951:0.119215191153233 1235:0.107195806224925 2062:0.14648182906877 2415:0.133485236402054 3593:0.157568607523847 3614:0.145601292968997 5176:0.156211914746289 5686:0.181267703081007 6456:0.18513576045595 7255:0.711668157503263 8753:0.195309976381934
+1 3:0.140100779526849 63:0.118805728495871 67:0.155456676233273 142:0.0142531027527574 144:0.163387814049745 823:0.313128610381365 7810:0.639195563544381 7811:0.639195563544381
+1 6:0.00833213675065616 15:0.0285466529841256 94:0.100038772581484 187:0.0776935264185983 205:0.0659297944413909 243:0.078564559956922 318:0.201145372632919 325:0.149638997268021 345:0.0611455500044833 346:0.13883703241401 349:0.165199962481432 365:0.0882825347156545 505:0.0599349331695256 511:0.216144281733702 539:0.0774104037299191 586:0.061249389085017 902:0.114919647321547 963:0.0706931977674777 987:0.0680237744549693 1237:0.102177686595588 1620:0.201534513108176 1740:0.119306633622918 2215:0.141151407215891 3707:0.31399608886557 4241:0.14232406758387 4556:0.14772835589837 4623:0.14772835589837 5100:0.159406782310454 5798:0.16867647084487 8276:0.184523108061763 9066:0.628918301439217 9373:0.193792796596179
+1 6:0.0142756101838133 15:0.048909529721998 26:0.0617887764474219 29:0.0518462331058598 33:0.0263321938327233 75:0.00964398281681704 88:0.0726715336990833 102:0.0906839907004229 134:0.0681608607485731 142:0.00863770514372663 150:0.0414985226236267 180:0.0366697123591629 192:0.0384292899058188 206:0.0453858829803116 242:0.0333433883779513 373:0.0679398739685951 455:0.0694886108352002 499:0.0354437527011712 507:0.0254436498658114 587:0.241073874963909 733:0.161127780154108 906:0.0556804219694086 997:0.0452546601907246 1064:0.0440896087480198 1083:0.051013807053605 1374:0.0635301508912204 5679:0.083525960435683 5978:0.501155762614098 6967:0.394850824210939 7817:0.664057852967958
+1 6:0.0112583734578828 15:0.0771444084238204 31:0.0429108913585836 41:0.0518406983098393 42:0.134715050743325 48:0.0688746651067181 57:0.0840523983844651 81:0.137094918360822 174:0.082526610473104 205:0.178168522681573 345:0.0826197958385535 346:0.187596436241641 365:0.119287257924454 499:0.0838575023107073 582:0.0949588976992409 614:0.272313199017736 1635:0.352409539618797 1677:0.177185516474909 2537:0.338623318104262 2542:0.170093749565341 3199:0.199610382161803 6296:0.219028685253495 6702:0.498654816726334 8159:0.240440642975544 8679:0.249327408363167
+1 6:0.0216409711445472 28:0.159807641306537 29:0.0785957882115318 31:0.0412418972044183 80:0.0704532537816289 128:0.116310087965023 144:0.12866010373145 245:0.125111414888327 337:0.0827244068014622 345:0.0794063469469751 408:0.063715673545674 478:0.0848552721623459 571:0.0853990500124791 780:0.109778492796354 781:0.117257703744263 1248:0.139317522566455 1378:0.132692515341733 3540:0.181856979977531 7818:0.251667996137289 9061:0.816741444663153 9933:0.239629963871651
+1 4:0.0515412144930698 6:0.00595781972504103 15:0.0612360852884459 27:0.01734774216238 29:0.0216376397428817 31:0.04541603738971 47:0.0281988311527623 60:0.1356614160521 63:0.0772668990698994 68:0.0365748829572564 75:0.0482981339340337 83:0.0154370875298245 103:0.0567146690411869 142:0.0185393931045756 159:0.0358419828527259 169:0.0868558159672213 172:0.0934435725431724 179:0.0324772386216646 180:0.137734485260355 186:0.0338084824818349 189:0.0445834886405765 205:0.0471425087640197 218:0.0337950224797018 229:0.156001528110488 304:0.0451125695023858 345:0.043721577647715 346:0.0992741760049973 375:0.0422355200431212 408:0.0350822053325772 472:0.0542808823996077 507:0.0318561540478565 518:0.0519572992251028 532:0.0688870430509568 631:0.039985155543098 658:0.0551020355781363 693:0.0708412681505985 696:0.131507645692209 709:0.103914598450206 856:0.0894283243429199 1149:0.0571580093426165 1155:0.0693541368754079 1248:0.0767090051963232 1296:0.0606520170830952 1472:0.0605826022371076 2223:0.0756307789740175 3079:0.0876726335150415 3572:0.403716195878283 5901:0.112260044920753 6126:0.109279603133228 6707:0.131941595035592 7848:0.138569802762857 7850:0.277139605525714 7859:0.692849013814285
+1 6:0.0101364208380146 15:0.0347282932125516 42:0.121290029386326 159:0.0609802643636774 174:0.14860485081965 180:0.156224342789724 346:0.0844507615851752 365:0.107399692456325 608:0.221213548830872 781:0.10984474067381 993:0.111390276696669 1080:0.102489974546447 1305:0.0921917045038755 3586:0.167829936830607 6830:0.387851106693684 7592:0.649438629713372 7819:0.471515386859185
+1 6:0.0137131115602933 15:0.0313215724256618 27:0.0133097640060088 28:0.0337548008479901 31:0.0522670386226947 60:0.0346946481656088 67:0.0258566121597799 85:0.0280126155692979 88:0.034904036886742 94:0.0274407971972029 96:0.0566421876237889 102:0.130666185038192 142:0.00118533651587445 159:0.0274991597645319 179:0.0249176162278103 180:0.0352248240173466 199:0.0213667508265327 205:0.0361692985996178 255:0.042545018583619 317:0.0272443716416705 355:0.0275108649385847 365:0.0484320842544139 388:0.0475336984393049 413:0.0395231154967315 507:0.0244410995129674 644:0.0435553950127305 693:0.0543517739741119 757:0.0868595272951323 796:0.0401809040729541 965:0.0456582575123373 997:0.0434715011006834 1124:0.0508185170319689 1308:0.0533938969648423 2024:0.0445172810017649 3263:0.0762407296606864 3576:0.073216052694967 3914:0.0925364577943785 4519:0.437255383324191 5112:0.0802348060003695 6109:0.172259270539466 7821:0.425261421542773 8687:0.708609819793072
+1 6:0.0151800451185006 26:0.0328517100919556 31:0.0289291019406667 41:0.139797128290666 63:0.0164058199724456 77:0.0572331988829302 134:0.0543594071368856 142:0.00196820339196551 153:0.0658302117328087 162:0.0411075952227313 176:0.0786848294480993 289:0.0660358987264707 386:0.0604491298339177 409:0.0387625122709264 480:0.0558257467421657 502:0.0523906078328 513:0.113595140561164 541:0.0782665987705617 633:0.0789277856945856 795:0.179841910093307 852:0.301294616683591 885:0.10640626527791 1005:0.160022320198128 2153:0.241682996215185 2730:0.12157229725961 2733:0.0986929945353839 4623:0.269141418933453 6653:0.141029883981038 7374:0.442985659096155 8423:0.486291357585203 8874:0.162097119195068 9658:0.353064704049501
+1 6:0.0233514547686934 11:0.0419734692711684 12:0.0629668827943932 26:0.0606429203311068 28:0.0344877397852033 29:0.0169615862538945 33:0.025843870433329 40:0.0583617507527557 60:0.0354479945908478 63:0.0403793016465271 75:0.0378605510748353 80:0.0304087271869686 88:0.0356619298992182 94:0.028036636255018 108:0.0864659399187966 110:0.0450727189739682 142:0.0133218190951919 150:0.0407289437664246 205:0.0369546650248186 255:0.0434688249732589 256:0.0317827470987045 259:0.0568144599775361 304:0.0353634106049507 322:0.0404751844378474 345:0.0342730223462578 346:0.116730441889833 354:0.0696100351153308 406:0.0437902067666104 469:0.0540000451236338 565:0.0496754607988328 592:0.0460050884325392 631:0.06268813721633 720:0.0464980117931484 997:0.0888308495602823 1037:0.052232639026876 1045:0.0242612275607694 1235:0.0547431186232914 1731:0.0579909211464684 2970:0.0757554895053374 3412:0.090859278311864 4882:0.0945457593255805 8188:0.19376421133433 9045:0.705036785101005 9047:0.587530654250837
+1 6:0.016835607870479 26:0.109303728282486 31:0.0641683226256821 41:0.03876091301027 60:0.127784016592934 63:0.0181950679127526 88:0.0642776085724511 94:0.0505336625354014 134:0.0602879408779203 142:0.0109142957935263 159:0.0506411402541028 176:0.0436331685315362 180:0.129736709685893 227:0.0598344103439794 255:0.0783488758076654 351:0.0597383731159194 457:0.0580449692513178 475:0.0682103954853214 480:0.0619142020916871 553:0.107607888242205 561:0.0745951890829579 574:0.0630288222842861 603:0.0901235508701447 755:0.0878573305934887 1045:0.043728808088776 4867:0.57514951184278 5514:0.147756589609188 8427:0.7191028786539
+1 6:0.0193668935899526 15:0.0331763632329562 27:0.0140979373323701 28:0.0357536817938141 31:0.0553621713141316 60:0.0367491846877651 67:0.0273877807068112 85:0.0296714576331668 88:0.0369709729228763 94:0.0290657775045294 96:0.0899946097235109 102:0.0922692887866215 142:0.00125552939263415 179:0.0263931796155911 180:0.0373107563226611 185:0.0281945260803548 205:0.0766223209942704 243:0.0456530995037779 388:0.0503485337133377 413:0.0837271652902935 507:0.0258884446871094 644:0.0461346443933108 693:0.0575703598534317 757:0.092003146860699 965:0.0483620335284348 997:0.0460457824785486 1124:0.0538278716374869 1308:0.0565557595913455 3263:0.0807555286814469 3576:0.0775517373674818 3914:0.0980162520053478 4519:0.0926297264108212 5112:0.0849861249498807 6109:0.0912300323239701 7821:0.563055519624357 8687:0.750572048312413
+1 6:0.0190872721715937 15:0.0217982394113224 26:0.0826149760336662 27:0.0370517058809573 28:0.0469832880780378 31:0.0242501537648406 63:0.0275047360810628 64:0.110365870338237 75:0.0257890657523668 134:0.0455674007557758 142:0.0164986922143441 176:0.0329792334547785 179:0.0346828158377036 192:0.0513820639782632 242:0.0445819352656984 265:0.120210598987949 284:0.0386380582851129 317:0.0379214253732428 387:0.0898244379405372 404:0.0534296185281665 441:0.0448646512780972 499:0.0473902373263879 500:0.0658432635408865 513:0.047611219166028 626:0.0600485276318244 647:0.114942393904336 697:0.0682082522010435 719:0.0684817408057399 733:0.143624440781914 823:0.0724924622491473 847:0.0678501405210483 884:0.0656859892138564 987:0.0519429903763423 1007:0.146885511469525 1031:0.0781823646633805 1122:0.077708380826995 1124:0.141468529834555 1573:0.0821179415130246 2206:0.246353824539074 2683:0.0901234364762335 2825:0.0859133903301055 2948:0.112805451185624 4281:0.102544264098487 6560:0.730338622855182 6597:0.386404328722326 9934:0.140901943519906
+1 6:0.0367797884599112 26:0.0636772256364839 27:0.0214187846036253 28:0.0543200321489527 29:0.133577021333837 31:0.0280369719959838 33:0.0407054762514215 40:0.0459614372658746 63:0.0476996675612679 74:0.180908680112224 75:0.0596323900716881 88:0.0561694442919207 118:0.24083907764731 134:0.0526830448709057 142:0.017167562666309 159:0.0885062394060905 176:0.114387461678025 179:0.0400987616743862 192:0.0594057053338394 196:0.205209990599773 208:0.0551103996741174 229:0.0385221672902306 255:0.0684657209991386 301:0.13334623371112 317:0.0876862020379349 322:0.0637505772657784 351:0.0522028011829727 390:0.067194381601462 411:0.110220799348235 415:0.0639994510414109 418:0.0759432809365321 507:0.0393319254727345 586:0.0540735141839413 643:0.0598493145639762 644:0.140183345652459 799:0.0742097346911663 827:0.0628318923608586 895:0.0764937716270191 952:0.0685283052585048 994:0.0842176605263423 1064:0.0681556779214009 1129:0.0857764522914961 1155:0.0856296632264974 1248:0.0947105187568116 1296:0.149770786021412 1469:0.083284927882413 1665:0.237846348603721 1840:0.130420751412767 1918:0.639169423136283 1949:0.0915338083807773 2171:0.101778797088424 2379:0.110624274936871 2467:0.145803334635439 3251:0.104944412599786 5910:0.162904692603432 6389:0.148914620618778 8126:0.152594490890833
+1 4:0.0062073623557893 6:0.0215258873394056 11:0.0064486786778019 15:0.00983328453740677 17:0.00781979901722281 26:0.0745359798157016 27:0.00417854808877953 29:0.0469066957603565 30:0.00862591379441263 31:0.0328180626259683 32:0.0107576732946993 36:0.0109646196149526 37:0.0135798953030288 40:0.00896652538409552 41:0.0132158466832214 47:0.00679224828892811 63:0.0403244108595475 64:0.0124466360077998 65:0.0205333834129509 67:0.0568230722134892 68:0.00880978664819004 75:0.0174503465655025 77:0.010821183394475 80:0.0186876247338838 81:0.0174749326414986 82:0.0430559136217944 83:0.011154986970112 85:0.00879445053991655 92:0.0284205308243958 94:0.008614930409825 96:0.00889129607154656 97:0.0179091021993753 100:0.00886783498433344 102:0.0410221351417618 140:0.0101408110225899 142:0.0156295330623994 148:0.012614636881892 153:0.0248932720155995 162:0.00777228663595967 168:0.0106581408970314 176:0.037192703991722 178:0.0115815668804288 185:0.0083566964648512 189:0.0214776366291862 192:0.0115893409023451 194:0.011369901446772 196:0.053378678568843 204:0.008614930409825 220:0.0115122828496987 227:0.0102005129920117 228:0.0434133070534236 229:0.0150304260008286 239:0.0121665980665603 252:0.0207133931165102 255:0.0400705240174236 256:0.00976601301232781 264:0.0118134891022858 265:0.0135568864296286 274:0.0620355179749609 284:0.017429803110295 301:0.0130071257620574 308:0.010603240135607 313:0.0325467534527115 315:0.0203275452121925 322:0.0124369733260879 327:0.0241374213095786 331:0.0112183000323695 342:0.0134059079033017 346:0.0239121560908612 351:0.0101841406573148 357:0.0132843692168532 364:0.013296355651746 367:0.0122485382891428 373:0.020489016638457 377:0.0110451172904434 387:0.0101300527076415 389:0.012230181422228 396:0.0145758731941512 408:0.00845024560951279 416:0.0279235694056658 418:0.0148156236353057 422:0.039257975631208 423:0.0108727394936627 427:0.0152442422982553 441:0.0101193237069391 457:0.00989545078768479 466:0.0132605052600404 475:0.0232568858400486 478:0.0112538697487027 496:0.0120337100614731 499:0.0106889753601742 505:0.0206454063779083 506:0.0160567559517702 507:0.00767318711372149 508:0.0111342212330985 513:0.0214776366291862 518:0.012514946979441 526:0.0172229621696872 530:0.0117970484069118 538:0.0125744575452806 540:0.016222569043077 541:0.0147980059736035 560:0.0170949007746986 575:0.014977833607957 582:0.0121040251589617 586:0.0738436603522592 591:0.0452694274174888 597:0.01283258014076 599:0.0134555936202467 613:0.013272419159664 625:0.0159542736537386 643:0.0116758837447639 645:0.0182592876825566 658:0.013272419159664 685:0.0151662686449021 707:0.0212967042210415 709:0.012514946979441 717:0.0145427844211 749:0.0668212827645418 792:0.015747591416935 794:0.0167628040598022 827:0.0122577489151475 850:0.0131548718986172 856:0.0107702936286493 872:0.0163770022021694 880:0.0168803513208491 909:0.0126348813523049 912:0.0545908275334206 936:0.0167918635335542 951:0.0187072179374653 952:0.0133690507778279 969:0.0160497338641154 971:0.0178955639637163 993:0.0315400552153521 998:0.0635366688697255 1009:0.140691391051123 1012:0.0191591512114902 1017:0.0169102947413601 1055:0.0156591036296401 1129:0.0167339574778792 1159:0.0145925224401898 1176:0.032394817904443 1177:0.0193779597688611 1227:0.0470431195408235 1242:0.0182171745450609 1245:0.014033508740988 1279:0.0219963311096394 1283:0.017781424353961 1309:0.0169404676156063 1312:0.0186600611963319 1315:0.0218884465303044 1319:0.0151470141281893 1380:0.0443414003618078 1411:0.0181755070575935 1423:0.0209464698638751 1437:0.0196096466396633 1472:0.0145925224401898 1500:0.0163770022021694 1547:0.0192670357908252 1598:0.0150148060938885 1604:0.0192670357908252 1630:0.0306479925770681 1639:0.0193779597688611 1643:0.019212724021864 1651:0.0196697629344205 1690:0.0187549462893744 1723:0.0241186518339603 1750:0.0279186972582538 1786:0.019212724021864 1795:0.0183448897673979 1816:0.015770027607676 1855:0.0185674089022273 2026:0.017288589369223 2103:0.459717838600924 2122:0.526580502214308 2175:0.08935576783391 2257:0.0207028329358837 2271:0.0245127345375928 2379:0.0215814697782546 2383:0.0228477184258064 2421:0.0229858919300462 2540:0.046258182027107 2638:0.0260069904144198 2646:0.0213893565151461 2756:0.023760446743664 2838:0.0431629395565091 2973:0.0486215301941375 3073:0.0254435250009829 3084:0.0254435250009829 3103:0.0207028329358837 3271:0.0257151872488604 3337:0.0239354773733776 3563:0.0247256264284536 3578:0.0257151872488604 3604:0.0239354773733776 3694:0.0279186972582538 3769:0.0257151872488604 3969:0.0217834392187786 4030:0.027040060415883 4047:0.0229858919300462 4107:0.0247256264284536 4109:0.0247256264284536 4227:0.0284444825676746 4297:0.0780209712432594 4337:0.027040060415883 4368:0.0260069904144198 4517:0.0257151872488604 4609:0.0279186972582538 4855:0.102860748995442 5035:0.0251894019394396 5228:0.0284444825676746 5361:0.0284444825676746 5454:0.0266647726921918 5709:0.0306479925770681 5956:0.494188591450821 6197:0.0558373945165077 6373:0.0274549217472678 6457:0.029051457162168 6494:0.0297693557346972 6497:0.0297693557346972 6626:0.0263221618433537 7006:0.0274549217472678 7236:0.0297693557346972 7324:0.0306479925770681 7782:0.0317807524809822 7828:0.300395591062941 8712:0.0317807524809822
+1 6:0.0158403377984513 15:0.032562256704304 26:0.0137122697871078 29:0.092046430004683 37:0.0149896349550568 38:0.025811125668588 41:0.0145877941606298 63:0.0205433168238004 67:0.0358410972564741 68:0.0194486751100134 75:0.0128412538790719 81:0.0192890191945624 84:0.0185932399469964 85:0.0388296375729052 88:0.14514650716468 111:0.0198123628180822 132:0.0384288082868335 140:0.0223870732409749 142:0.00492915635094572 146:0.0284480720309868 153:0.109909848941927 162:0.0171582676949089 172:0.02484428570332 176:0.0164214831819227 179:0.0172697548522932 180:0.0244134137845739 186:0.0179776430869298 189:0.0237072470431383 199:0.0296174839030082 200:0.0306053982993832 204:0.0380370125468326 209:0.0199012449839376 218:0.0179704857377519 219:0.0264892907255565 226:0.0245648566409278 227:0.0225188725969731 229:0.0995444783382822 240:0.028520011200909 252:0.068591000424243 274:0.0342377370348772 275:0.0426079558494685 276:0.0246108088188773 278:0.0273502511834357 296:0.0285683035478152 309:0.023314829591241 322:0.054912261381649 323:0.0271012814177678 325:0.0284480720309868 337:0.024220401924834 355:0.0762682736454776 365:0.0335670240047212 369:0.0283294808316529 373:0.0452319952614152 381:0.0304536911314451 382:0.0556521687975197 387:0.0223633229527423 394:0.0295138049864881 414:0.0468158834591625 415:0.0275633157737266 426:0.028520011200909 430:0.0246570052079536 436:0.055966232567218 457:0.0218454106917955 475:0.025671201519205 493:0.028282493689756 505:0.0227886223124729 507:0.0508184803534728 530:0.0260434186303781 539:0.0294331929705751 543:0.0350662303119925 553:0.0404985745129745 570:0.0735079017994416 574:0.0237210997952103 594:0.0303342033382143 631:0.0212620857950491 643:0.0515518658152415 644:0.0603742338342251 657:0.0329044100018337 672:0.0442652699114736 673:0.0320325259519982 678:0.0342843462622864 772:0.029353321657469 789:0.0325527512592167 799:0.0319606858729705 814:0.0351691025195466 822:0.0848288482800776 851:0.0359820871394072 858:0.0317836410546976 872:0.036154223459135 882:0.0237906966448559 917:0.0385397932075442 932:0.0430311792062173 952:0.0295138049864881 953:0.138471207782536 969:0.0354317388139576 1057:0.0431599608221798 1133:0.0369422456284927 1155:0.036879026440127 1193:0.0386163804878726 1201:0.040403572473532 1227:0.034617801945634 1228:0.195048889698903 1284:0.044413864984354 1294:0.0359820871394072 1296:0.0645033574759299 1394:0.0410914815529864 1464:0.0404985745129745 1518:0.0405946263199547 1528:0.238218591933824 1543:0.044413864984354 1551:0.0339182879611317 1627:0.0422961556478156 1746:0.0370059279652234 1783:0.137638904366668 1795:0.121495723538924 1838:0.0485595752141794 1880:0.0885305398229471 1969:0.0432906790762444 1985:0.0445650444485381 2007:0.128337606422144 2067:0.0790132663456245 2076:0.0395066331728123 2139:0.0474290753804507 2185:0.0395922752457151 2188:0.0498593947776792 2348:0.102120560843537 2388:0.153180841265305 2398:0.0460588700065906 2421:0.0507441510349394 2427:0.204241121687073 2566:0.0536689696277586 2666:0.0427792021407147 2723:0.041298457999857 2740:0.0917592695777786 2855:0.0524540749555198 2873:0.0457040207335339 2949:0.0472196050015344 3320:0.0472196050015344 3348:0.107337939255517 3518:0.0490564304472111 3520:0.121220155392334 3553:0.558185661384333 3563:0.0545848264551733 3570:0.116218744977157 3694:0.18490175556595 3735:0.0513883420000185 3852:0.0616339185219833 4269:0.0588657275916371 4344:0.0676591697629772 5086:0.0588657275916371 5107:0.0567694022759333 5190:0.131438944219493 6171:0.0596942208687525 6302:0.0627946535169271 6636:0.0616339185219833 6990:0.0641346237295722 7039:0.0701598749705661 8348:0.0701598749705661 8740:0.0701598749705661 9049:0.239129016734895
+1 85:0.213920216023297 111:0.218300514704443 153:0.302757636928747 574:0.261368537523639 1228:0.429825290448847 1528:0.524957489511139 1838:0.535048765279506
+1 6:0.0253161693624238 15:0.0289118275140949 28:0.1246314158979 29:0.0306477972152324 31:0.0321638940471117 37:0.039927614132091 57:0.0630015446067581 142:0.00437656761638732 245:0.09757238549446 684:0.0789777377307584 761:0.0858098817707127 1043:0.0943788691075148 1067:0.0897583177862442 1140:0.0857119775296881 2354:0.739041838681404 2709:0.126335953217703 5414:0.604862438712892
+1 6:0.0219961810647074 15:0.0376804514028619 28:0.0812153435773169 63:0.0237723527046112 75:0.0222894982588026 80:0.071609657275892 142:0.00570393010612094 159:0.0661640315527731 229:0.0575955301948267 351:0.0780498145168208 365:0.116529449561898 413:0.0950941295363667 467:0.138049938357226 531:0.123752663423928 535:0.208587655609895 3407:0.207231201040752 5849:0.23488188315967 6227:0.435988987807108 7808:0.511597633419767 7809:0.511597633419767 8743:0.243563194952933
+1 85:0.162118106122809 111:0.165437688253197 180:0.203857499278301 229:0.138536466059679 507:0.141448582507381 917:0.321815946566112 1528:0.39783577062797 2740:0.383105275583152 3348:0.448147974457842 3520:0.506107788907892
+1 6:0.018129884276718 31:0.0230338037565935 52:0.0492700680831206 102:0.230335549371308 162:0.0327305107226586 179:0.0329431797207819 180:0.0931403467833518 215:0.0384998138248708 291:0.0486417729982472 312:0.0547753690987521 355:0.0363716721399074 373:0.0431414852663205 408:0.0711710381991352 411:0.0452760066680129 502:0.0417142219618296 574:0.0452495394643339 641:0.239094240245176 643:0.0491692671673222 644:0.057583887342827 645:0.0768931769084498 664:0.0683161847836228 671:0.0369066120655442 761:0.0614517624696808 764:0.0558925677819348 829:0.0448317107537278 1118:0.155619052088939 1155:0.140698279313819 1296:0.12304434637885 1359:0.0670873486525595 1360:0.0893030843602998 1424:0.0561968276869636 1836:0.0644468829671932 2139:0.0904740436452239 2246:0.076540361479459 2659:0.0940733420615176 2666:0.0816041082509102 2771:0.0871833897970598 6249:0.117570705092904 7831:0.702789108622825 8113:0.250728328153285 8856:0.376092492229928
+1 6:0.00886428174068087 28:0.0654582434121375 31:0.101357686925878 37:0.041941134438614 60:0.0672808213252463 63:0.0191601288780638 75:0.0179649723598118 81:0.0539708505012812 110:0.0855486914544257 142:0.00229863735623329 159:0.0533271312013435 179:0.0483209305732686 180:0.0683089530008138 186:0.0503016082685843 205:0.0701405042335198 229:0.0464210587418737 245:0.10249288935675 288:0.0920668373611474 295:0.0752639782031656 363:0.0828075582465873 655:0.067120279661104 697:0.190058744627515 781:0.0960590276020337 998:0.392462520716566 1463:0.130442839879556 2017:0.133307555788119 2239:0.143785046591356 2408:0.450498790081681 2465:0.314326518385 2974:0.152728839063057 4308:0.162590550803559 6498:0.367767357010887 6756:0.367767357010887 7614:0.189310970116503
+1 6:0.0117882305702905 15:0.0201937712652426 31:0.0224652114803268 60:0.0447369486859068 63:0.0127401194805519 75:0.0119454256171967 80:0.038377168679618 97:0.0367783838659686 142:0.0137558694268283 144:0.105125247697073 179:0.0642599465622284 180:0.0908411658773471 209:0.0370257988641867 275:0.0396355505539944 317:0.0351302036641305 345:0.043254081358141 408:0.0347070861876277 430:0.0458737790605431 560:0.0702126567644958 643:0.0959110355301509 644:0.112324844015015 655:0.0446301999267624 853:0.0623707959999796 987:0.0481197057569577 1064:0.0546111655106207 1214:0.0856914458443257 1296:0.120006981568043 1411:0.074650953250589 2139:0.0882406807598356 2236:0.0840889102814165 2873:0.425156285531446 3050:0.0917511300524192 3400:0.0894695535923824 6391:0.451054503923201 6419:0.657109821489387 6992:0.119320961093541 7003:0.130530799509946 8974:0.130530799509946
+1 6:0.00840241385316328 15:0.0287874286840495 26:0.109103890728363 63:0.0181618022783052 67:0.190116988622435 80:0.0547089492076095 94:0.0504412729739415 97:0.0524297858359171 142:0.0174309462902335 153:0.218628869164413 178:0.135622448166366 192:0.135713483506858 198:0.073161271007586 226:0.0651514173393706 291:0.0676300467854198 308:0.0620830238487406 317:0.0500802063841313 345:0.0616612799083619 409:0.0429114231935583 613:0.0777113320722439 727:0.0899587800040658 909:0.0739784849054771 1005:0.177150166491849 1050:0.0991881200027444 1207:0.0957357861683323 1557:0.123646196828324 1916:0.102624089450459 2246:0.106419398569523 2322:0.132994070211456 3206:0.143524494723527 6699:0.372158922928097 7323:0.179447039748592 7325:0.71778815899437
+1 6:0.0280671612864662 15:0.0641070862110002 31:0.0356589967817574 68:0.0574344970907329 81:0.0569630121613163 174:0.0685797018914895 179:0.0509998588187132 186:0.0530903459353325 204:0.112328303810085 205:0.0740291168018559 240:0.0842233463760683 256:0.0636685164288103 345:0.0686571390302081 347:0.0768562182376415 387:0.0660418357447441 437:0.0841523355644823 478:0.0733684452476661 852:0.185693005415733 998:0.103555192908753 1017:0.110244925661806 1175:0.0991278393843451 1199:0.1354885993982 1463:0.137674633721761 2215:0.158491530271956 3909:0.165876441848586 4212:0.15381126443557 4349:0.1611961760122 4591:0.34767648088944 6165:0.199806432414122 6173:0.388156499950821 7620:0.599419297242366 8746:0.207191343990752
+1 6:0.0251629229745982 11:0.0376912696556796 52:0.0683831683206532 68:0.0514914854276969 81:0.102137574426343 92:0.0553708206275516 96:0.0519678921163702 118:0.0549234186661872 142:0.00652511240431189 204:0.0503525887030718 215:0.053434861195207 256:0.114160884205814 319:0.0760894026834971 327:0.14107852179141 387:0.059208183149871 409:0.0428359776694165 413:0.0725230817665086 480:0.0616923491468206 506:0.234621520396446 507:0.0448482827369441 530:0.0689514480193607 781:0.272681530582659 1010:0.280163528086858 1411:0.10623229530642 1817:0.119232828749544 1946:0.116808045147786 1960:0.163179342524601 2017:0.126139483391869 2227:0.111066913397068 2423:0.108256822585679 2589:0.272107179361035 4858:0.150300256109747 5153:0.132760244190594 5474:0.163179342524601 6239:0.160468665079244 7375:0.158043881477486 9068:0.633107818959079
+1 6:0.0330882463258624 11:0.0743437884359028 15:0.113363320116329 29:0.0600850299912198 31:0.0630573389951369 53:0.127412169124542 60:0.251143234628855 63:0.0357600921597033 75:0.0335294752619801 92:0.327646954734786 142:0.00858026417502318 180:0.127490502291902 205:0.130908873916311 375:0.117282777541416 457:0.11408000562501 480:0.121684490731767 530:0.13600263166322 574:0.123875134976765 586:0.121615555169209 1169:0.186444104940286 1214:0.240526315735821 2161:0.219666277962084 2227:0.219072883117275 2873:0.238673239699052 7456:0.64372310238324
+1 6:0.0347616844724709 11:0.0390518628676466 15:0.0297741675837578 26:0.15045815367253 27:0.0253044220532487 63:0.0375686589165189 67:0.196633577173225 75:0.0176126142816076 92:0.0573696167247677 142:0.0202819748820085 153:0.226122751725841 159:0.052281193301195 174:0.0637028964392703 178:0.0701355710533166 185:0.0506064235290995 219:0.072663567675887 296:0.15673314017647 301:0.0787684604771223 304:0.0658038082368106 409:0.0443822864294398 506:0.0486181947385797 613:0.160750044727549 713:0.0868999427529209 1005:0.091611147395415 1045:0.0451449998370631 1416:0.104897341849504 1720:0.11300146702137 1916:0.106141707582294 2153:0.138361052144612 2246:0.110067107484571 6699:0.577372970368393 7257:0.175929609441946 7323:0.185597897350388 7325:0.556793692051164
+1 6:0.0160743327380601 26:0.104361215314598 29:0.0583788427554275 31:0.0919001241651386 41:0.0370082160235273 60:0.0610029295384799 63:0.0173723205049243 94:0.0482486235315109 102:0.153165219044707 134:0.115123662800851 142:0.0104207714705914 159:0.0483512413060293 176:0.124980471412906 180:0.123870254990254 205:0.0635957789050548 227:0.0571288086806327 308:0.0593843150414376 351:0.0570371140788724 457:0.0554202828133228 480:0.0591145560819574 561:0.0712221322332246 574:0.0601787752055101 603:0.0860483301444924 755:0.0838845841684066 1045:0.0417514720505165 1469:0.0909976442840637 1665:0.08662414666858 2306:0.113058408549576 2528:0.0924683571507628 4867:0.549142311855868 5514:0.141075309183446 5784:0.153763538468087 8427:0.686586372960631
+1 12:0.173750230734607 31:0.0982378873882194 108:0.357889965602204 158:0.0924981633030363 174:0.0944659923099747 205:0.101972358958098 220:0.206765833631228 231:0.276313076760296 531:0.290017626238076 539:0.11972919896263 800:0.113646846028592 862:0.124002976235358 1482:0.45803243428531 2171:0.178309804787644 2280:0.175043483115421 2418:0.452413110299546 8112:0.28539838127457
+1 6:0.0507067226884023 11:0.151906100903594 15:0.0289543018768889 29:0.0920784656728013 31:0.0322111460205111 40:0.105608449250206 63:0.073068325978803 75:0.0513828925006516 81:0.10291057338074 96:0.0523611962113013 142:0.0197234875413782 154:0.0610917439628976 158:0.060658304529877 176:0.0438058626249449 179:0.0460687076949803 180:0.0651250948897397 185:0.0492129178640939 189:0.126482656369381 199:0.0790074451118966 229:0.0442573882725254 240:0.0760798326733499 278:0.0729593869704918 320:0.0802178127861898 324:0.089543217624687 375:0.119821506371178 377:0.0650451350363308 405:0.0803718886654267 409:0.0431601694875112 434:0.0731284399757211 469:0.097715729075842 477:0.0903610270256507 499:0.125895602087288 505:0.0607908096590735 547:0.212159856926631 580:0.229405419225862 594:0.0809193621276403 628:0.0918337971235094 631:0.0567186288314707 742:0.0867356220458609 837:0.0917074298652033 884:0.0872497968708512 903:0.0940946218135164 930:0.0739927015459923 966:0.0844148533297661 997:0.0803718886654267 1380:0.0870427567944221 1448:0.106079928463316 1466:0.103218974448935 1731:0.10493741489721 2134:0.115133285692227 2163:0.106793471977956 2164:0.109076133315694 2448:0.124884049582485 2722:0.116560710706926 5058:0.310024516087391 5153:0.133765002043141 5620:0.153156200962949 6710:0.187158115420855 9405:0.589680527941319
+1 2:0.0402602120766606 4:0.0426590139715866 6:0.0295865804549358 15:0.0337887655355415 26:0.0426862922619947 27:0.0574326843136345 29:0.0716351281344261 31:0.0375894008823218 33:0.0545741696050377 63:0.0426342266007618 75:0.0199874099840094 81:0.180140135127837 142:0.0127870520264122 176:0.153360218555072 183:0.0867613633095846 189:0.0738006538466861 204:0.0592046050564807 205:0.156073383974323 227:0.0701012445064915 355:0.0593557789792315 413:0.0852726845641414 427:0.104763393517863 467:0.123791961764927 507:0.0527326386843775 510:0.0891602002489368 1235:0.115600341216824 1381:0.151165944945136 1665:0.212588381449618 1891:0.140699844339047 2135:0.137797773660621 2161:0.130946277058744 2320:0.162137855825582 8312:0.436815344878111 9621:0.688138749958506
+1 6:0.0279357525615503 11:0.0251067966283885 15:0.0191420822314798 26:0.0241827277109782 29:0.101457207127721 63:0.02415323136351 68:0.0342993553822087 75:0.0226466187470365 88:0.0426629886403285 94:0.0335407168776661 96:0.0346166979910991 142:0.00289765900006409 150:0.0487247456923986 172:0.0438149632165206 174:0.040955169564141 176:0.0579213015152622 179:0.0304566483676543 199:0.0261164475258547 204:0.0335407168776661 215:0.0355938710781018 276:0.0434032073211844 279:0.0632583066638786 304:0.169223459211091 306:0.0438428108588599 308:0.165127404845293 312:0.0506409572478748 341:0.046682484445594 346:0.0465488877579004 373:0.0398851919563118 405:0.0531349472169779 413:0.048308859887434 423:0.0423310995786637 455:0.0407944027570695 496:0.281106806178825 502:0.0385656576259474 527:0.106578040201441 561:0.0495110781989074 586:0.0410710440605864 587:0.0707631411196911 594:0.053496889358695 737:0.065837259415467 768:0.0698242688183848 804:0.0526322752034868 1043:0.0624868169433209 1064:0.0517670229711149 1149:0.0536018906109187 1154:0.0758890618389552 1242:0.0709253661561874 1808:0.280886122478471 1866:0.0889535746158364 2171:0.0773051561885276 2224:0.495375248211298 2564:0.0852188181494302 3237:0.089491528860994 3289:0.577589275507483 5620:0.202507289283594 5773:0.108696539122872 6420:0.103814604289333
+1 6:0.0160259447503647 15:0.0274531670099751 26:0.0693647069924759 29:0.0291015535087653 31:0.0610823203435361 41:0.0368968115173026 63:0.034640050462355 67:0.0453263254020424 96:0.049646531646419 142:0.00831152175659287 153:0.208495691791266 154:0.0579244444253988 204:0.0481033824294504 232:0.0711237568966635 245:0.0926496601861367 286:0.0448987047383959 437:0.0720746569241135 457:0.0552534531223772 571:0.12648235128565 574:0.0599976211954731 693:0.0952779961313316 719:0.0862473630093849 726:0.0738446116454453 755:0.0836320694113265 795:0.0949317506126122 979:0.245642826366904 1314:0.186875556231669 1387:0.129976194350107 1446:0.0836320694113265 1550:0.510301295445654 1578:0.111959855116002 1983:0.414183124174461 2034:0.107889288394172 2163:0.202513535588029 2354:0.233918558241588 2791:0.125411007028683 2888:0.14697565241812 2987:0.27374462421859 3252:0.150984198968948 3767:0.128346846392633 7124:0.171129891652788
+1 6:0.0112425412026973 26:0.0486608177254693 31:0.0857010945583018 60:0.085332058256792 63:0.0243007323844467 142:0.00291535467210082 252:0.162272875367421 373:0.0802575325218737 493:0.100366262597378 764:0.103978793238062 772:0.104166316517059 776:0.140197436720262 882:0.0844261942749778 2073:0.325626694987036 2103:0.360152173561587 2122:0.375030659131739 3578:0.201457933618712 5956:0.645262087653646 6484:0.240102519743907
+1 6:0.00625018645473918 63:0.0135097666667275 102:0.178665800878386 142:0.0129661150117579 144:0.0371586668748119 180:0.096328998845722 199:0.0292157274468186 264:0.051451892602227 317:0.0372524649538418 337:0.0955674241074177 351:0.044355508081414 363:0.0583874355580998 391:0.19404522720558 478:0.0490145538423246 514:0.066394027263325 527:0.0596129119639802 574:0.0467986537023328 685:0.0660544246274405 719:0.0672736750856405 804:0.0588782301164329 850:0.0572940856222351 963:0.0530290944989221 1149:0.0599629113099116 1374:0.0834448300538648 1561:0.0832146336754678 1707:0.0714423062928472 2575:0.0870414056019157 3523:0.0983661200430368 7029:0.619428540343232 8888:0.667413838915737
+1 4:0.0310172280780728 6:0.0286830731603324 11:0.0322230483556414 26:0.108629717115075 27:0.0104397787398372 28:0.0529525019528816 29:0.0130214162312061 41:0.04952815390695 54:0.0268457832752185 60:0.027213438956689 63:0.0619984105253281 75:0.0435983392333137 83:0.00928995696906056 88:0.0547553543489122 94:0.0645712090133709 96:0.0666426436110073 97:0.134233513951412 102:0.0683270847858513 134:0.0513567265343412 142:0.0223138158465781 158:0.0514685182072553 176:0.0371692360274592 185:0.0208785588284346 192:0.0579101411257742 199:0.0167594369755566 227:0.0254851916040867 237:0.184866578562461 239:0.0911919086243086 240:0.0322768356575527 252:0.025875404146754 255:0.100113100494057 278:0.0309529879361479 289:0.0311941186536927 304:0.0271485037984807 312:0.0324972962167771 328:0.0363752684581144 339:0.0278875135739808 346:0.029871334908336 351:0.0763328597820211 386:0.0285550339272635 405:0.0340977385305134 406:0.0336177584232541 408:0.0211122841202867 413:0.0310007435675518 432:0.0336804187672659 472:0.0326659456170568 475:0.0581055278506263 480:0.0527420691287739 507:0.0191708636575773 530:0.0294740116745384 537:0.0400990168868863 571:0.0282971034775861 603:0.0383862053417462 645:0.0456194159556993 683:0.0433609450732923 737:0.0422490615817696 743:0.0455141995436455 774:0.0402204707844714 795:0.0424769707882281 800:0.0316181130259681 814:0.0398017845873373 827:0.0306250362096459 829:0.0531957851946981 895:0.037284003996499 1050:0.0423244461709577 1057:0.0488452459794092 1080:0.0362520396140652 1083:0.0384370459755745 1133:0.04180849658761 1232:0.0405940969829131 1294:0.040721860346863 1457:0.0474767042049786 1664:0.0425541291504325 1835:0.0482747881705354 1958:0.0521260166169893 2106:0.0486995004877664 2216:0.0488452459794092 2657:0.0577862423752989 2928:0.124674732773959 3366:0.0574284705570019 3897:0.0574284705570019 4684:0.0577862423752989 4979:0.0710663364562149 8366:0.873419232569568
+1 6:0.012748854272968 15:0.0218393630449563 28:0.0941438495119073 31:0.0242959030760658 64:0.0552870409533477 83:0.0165165436686177 94:0.0382668867378915 159:0.0383482748162939 185:0.0742396611256886 245:0.0737040489376567 355:0.0383645979779903 404:0.107060833159219 499:0.0949592834749799 535:0.0604480754338153 561:0.0564876066489225 847:0.203934431152379 965:0.063671596576363 1007:0.147162619443513 1124:0.0708677091804092 1259:0.100894936260275 1294:0.0723990850470352 1309:0.0752483101655714 1329:0.0858273778411855 1544:0.0835226980604613 1548:0.070149532833915 1652:0.0763591765572272 1740:0.0912744792467062 1955:0.0958633001492198 2190:0.0981987997907614 2478:0.318958885826802 2723:0.0830960850452857 2771:0.0919604599716138 3320:0.095009947175894 3509:0.11692110534141 6248:0.124012798133883 9072:0.80191392422235
+1 6:0.00526129771989398 15:0.0180256811368533 16:0.0578997248299054 26:0.0455446939853356 27:0.0306392742635764 37:0.0248937027778516 60:0.0399337974792217 62:0.180708292729174 63:0.0341168563888479 67:0.0595223049133528 75:0.0319887400512755 80:0.0685136616105686 85:0.0322427283789694 92:0.0347323368525768 132:0.0319098942191635 137:0.0430716960805655 142:0.00682165562592124 144:0.0625590326683802 158:0.0755264112674363 172:0.0412595947720418 177:0.109825217285568 179:0.114721444685834 183:0.185142327069889 204:0.0315845611896917 218:0.0298440844003544 219:0.0439915002663657 299:0.0435549560073994 355:0.0316652096799375 398:0.0409229543180783 400:0.0463599945209383 408:0.061961568306389 441:0.0371000557886815 471:0.0548453076248139 504:0.0558893317478939 505:0.0378456975279469 506:0.0294341083874718 507:0.0281318868968337 539:0.0488805204269148 574:0.0393942887626169 586:0.116027117934372 610:0.0677410416495897 631:0.0353105359674271 643:0.0428068071402694 684:0.0492403158033038 688:0.116812609207676 731:0.0606316303242293 757:0.0499879802151018 768:0.0657519903066906 771:0.055817331388126 800:0.0463973452331278 862:0.0506253283692518 913:0.054912608642784 963:0.0446389649325852 1003:0.0556034601844153 1009:0.0468919088787486 1011:0.0631438301458408 1111:0.0653294418323594 1150:0.0574103205989957 1223:0.0646515688425401 1634:0.0914756774639023 1776:0.0609355582280333 2084:0.0798637175458527 2886:0.684319632601654 2921:0.0898700195008302 3402:0.104284823838303 3416:0.0832762359235053 3676:0.365902709855609 5103:0.0991358492930373 5762:0.116516451513671 5763:0.116516451513671 5764:0.116516451513671 6715:0.233032903027342 7369:0.100656838144139
+1 6:0.0317010193030607 20:0.0298039542212296 25:0.039653334707882 27:0.0153842942142827 29:0.0575659609402704 37:0.0249987675506172 40:0.0330123434403385 60:0.160409358062182 83:0.0273797816623616 98:0.0342724068519716 132:0.0320445710816226 139:0.0432236832213342 142:0.00685044667017119 168:0.0392404184069355 179:0.0288014076729053 186:0.0299819790132051 199:0.0246970856110032 203:0.0400544156039805 204:0.0317178649723353 215:0.0336594355098502 218:0.0299700424377706 283:0.0396068700205208 299:0.0437387812742376 317:0.0314908234908973 337:0.0403932583759944 345:0.0387730926450877 355:0.0953965615273519 385:0.0552804920778724 386:0.0420793442259003 387:0.111888417662844 422:0.0481791150526998 455:0.0385773316353109 472:0.0481372767262687 546:0.0456481677086542 549:0.0564180927364087 576:0.05172101411012 641:0.0418068367650664 643:0.0859749496355196 656:0.0521554127543741 662:0.0550767842289286 789:0.0542894249461151 800:0.0465931669064781 804:0.0497718460872429 819:0.0530653251626915 908:0.0561978813622449 909:0.0465182469978913 965:0.0527747949974298 985:0.067701156847343 989:0.0638976699641512 998:0.0584812467464514 1000:0.0641476239155755 1098:0.0592697959798828 1207:0.0601994073439866 1227:0.0577333862063307 1267:0.070936062226759 1292:0.0634103309643418 1335:0.0567927122908397 1377:0.0503928985843526 1453:0.0743227697266966 1482:0.0625950254524056 1486:0.0721974635526607 1660:0.148645539453393 1827:0.0711388203577265 1836:0.0563443166481956 1943:0.0634103309643418 2058:0.0790992198363443 2106:0.071764686040088 2144:0.0738228246651831 2393:0.0826920932808466 3751:0.0851551145281563 4264:0.0957507688466798 4492:0.0818132199543085 8625:0.748717756475251 9059:0.398804288555848 9920:0.117008213410685
+1 6:0.0111967351499524 11:0.0503144047564875 15:0.00959025645059424 26:0.0605781956264336 27:0.0163011037095869 29:0.0304982694155113 31:0.0320069693496024 41:0.0257784382058069 59:0.0173814429778981 60:0.0424921927736579 63:0.0181512920134935 64:0.0242780386976333 67:0.0633356558696087 68:0.0171841083027268 75:0.00567302132799702 85:0.0171541941452066 92:0.018478747905045 94:0.0168040275088049 96:0.0346861963283654 97:0.0174664815442436 98:0.0181574159558282 100:0.0172973356639463 102:0.0800165589969149 106:0.0195935339590353 134:0.0400952618960505 142:0.00798456036261701 153:0.0485560773952665 159:0.0168397672207321 176:0.0145093968557415 192:0.0452116486303414 198:0.0243729774866255 199:0.0130844401524688 204:0.0168040275088049 208:0.0209713192692669 220:0.0224555171652756 226:0.0217045713690454 231:0.0300085992410491 252:0.0808058594027803 255:0.0260534581959822 275:0.018823383179919 278:0.0241656398589826 279:0.0316926537145083 286:0.0156845325926977 291:0.0225303030554178 292:0.0276026297398336 304:0.0211954001616152 308:0.0206823654336198 319:0.0253931018991287 331:0.0218820830091643 345:0.0205418654747972 351:0.0198648824329311 373:0.119895802812871 387:0.0197593800839895 389:0.0238558288088329 394:0.0260772735646269 412:0.0285291069968821 422:0.0255251472758835 427:0.0594699329523597 430:0.021785990331867 547:0.035135840005727 582:0.0472195042937301 613:0.0258887867989074 643:0.0227746322144239 687:0.031496962867844 772:0.0259354766097677 782:0.0318934612372058 814:0.0310740789892898 834:0.0282077023515821 903:0.0311660615286181 952:0.0260772735646269 1031:0.0343967653941006 1050:0.0330435732249229 1064:0.0259354766097677 1126:0.0298510460192359 1154:0.0380207103923993 1244:0.0395119159989617 1248:0.0360404667495055 1359:0.0310740789892898 1464:0.0357829973815901 1500:0.0319444943168848 1502:0.080162197182075 1518:0.035867865098516 1918:0.0810749944294055 2103:0.538027181089802 2122:0.560253979198588 2171:0.0387301790806229 2194:0.0426949540069138 2280:0.0380207103923993 2423:0.0361282442790194 3074:0.0478138122875573 3496:0.0474198566926713 3578:0.0501592808493386 4297:0.101456926882829 4346:0.0520115140250708 4585:0.0435736770153989 4649:0.0507284634414144 5228:0.055482963274527 5361:0.110965926549054 5956:0.481974797835067 6713:0.0619905923246794 7619:0.0597810644839744 8130:0.055482963274527
+1 26:0.103369979366872 31:0.0910272452282811 63:0.0516219480599758 67:0.135094099715391 142:0.00619307620357643 345:0.175262087978094 571:0.188488910420818 1932:0.616488462071975 2103:0.382534906832334 2122:0.398338060357967 5956:0.456909219126353
+1 6:0.014212536899662 15:0.00811557249238982 16:0.0260677757794038 21:0.0143296329649222 26:0.0307578889426277 27:0.0206917494139982 29:0.00860286053903113 37:0.0112077123723563 57:0.0176845826207082 60:0.0539373174103998 62:0.162717984245407 63:0.0256003105730149 67:0.066995745787775 75:0.0240034331070368 80:0.0308464120328215 85:0.0290328223965954 92:0.031274579353443 132:0.0287331233470737 137:0.0193918592733429 142:0.00552827671775319 144:0.0281655023640705 158:0.0510055676462992 170:0.0235328609441443 172:0.0185760099625055 174:0.017363557606565 177:0.0494458159781408 179:0.0516502091494395 180:0.0182538481120595 183:0.187549414749461 204:0.0142200893286195 215:0.0150905548062094 218:0.0268729740175973 219:0.0198059760821333 229:0.0124048593668982 232:0.0841010444902409 262:0.022169112468814 283:0.017756971669123 289:0.0412180438211598 291:0.0381316826434658 299:0.0392188678139021 309:0.0174324394725156 331:0.0185172974112033 345:0.0173831637608927 355:0.0142563991170831 363:0.0221282353829331 381:0.02277014829922 382:0.020805493350924 398:0.0184244467573611 400:0.0208723261786904 408:0.0418447654361797 432:0.0222516460887386 441:0.0334065814144665 455:0.0172953981105718 471:0.0246926075368433 485:0.0163925015300101 493:0.0422934988608024 504:0.0251626509926402 505:0.0170389956130516 506:0.0132519064635516 507:0.0253312333359981 539:0.0220071243898425 543:0.0262189322487158 574:0.0354724133653421 586:0.174126843350238 610:0.0304985609166952 631:0.0158976080966457 643:0.0385452004700502 684:0.022169112468814 688:0.078887548619058 719:0.0254960284372946 721:0.0627328791087161 731:0.0272977418990316 754:0.0288733706102391 757:0.0675171840837232 768:0.0296030446673047 771:0.0251302347896275 800:0.0208891423206224 827:0.0202330461476969 862:0.0227926766934603 876:0.0228607342287317 887:0.0299330361075945 913:0.0247229079890704 963:0.0200974794319968 969:0.0264922220367565 1003:0.0500678901982517 1009:0.0211118061460647 1011:0.0284287915172329 1111:0.0294128037133597 1144:0.0323683319137036 1150:0.0258474348400587 1223:0.0291076098431395 1322:0.0266129580516131 1377:0.0225926782910065 1418:0.0300698713770667 1433:0.0228379691083262 1473:0.0335533190632936 1579:0.0297330377051407 1584:0.0636056142092059 1634:0.0411844349244028 1776:0.0274345771685038 1795:0.0302806823510226 1827:0.0318937097784423 1975:0.0336725781016114 2041:0.0372797441300916 2084:0.0359564659074102 2241:0.0330970310311093 2659:0.0737467942385499 2705:0.0347147147705354 2723:0.0308787532232791 2886:0.528165078400911 2921:0.0404615311129816 2945:0.0460835259328714 3402:0.0469514045705343 3416:0.0374928594597643 3676:0.494213219092833 3955:0.0392197799761067 3961:0.0401281536683271 5103:0.0446332188738985 5762:0.0524583621354512 5763:0.0524583621354512 5764:0.0524583621354512 6455:0.0479532969298799 6715:0.367208534948159 7369:0.090636005442634 7843:0.275468281720071 7888:0.165280969032042 7942:0.0524583621354512
+1 26:0.135217891215514 31:0.119072405918176 63:0.0675264810911218 67:0.176716096791908 142:0.00810114028767005 345:0.229259695044698 2103:0.500392509846708 2122:0.521064557063696 5956:0.597681275217442
+1 6:0.0269056624159678 26:0.0582275622121938 27:0.0587571270835616 29:0.0488580602693795 37:0.0954776177213479 53:0.103605031720029 64:0.058339927181639 67:0.0380487649502194 72:0.0418600690294711 78:0.0516756695964263 100:0.0831307104860468 102:0.0640930442438693 111:0.0420654496473324 142:0.00348851506150317 153:0.058339927181639 160:0.12193411445877 234:0.0482528844535686 252:0.242719768888679 276:0.0522534716659716 287:0.062435618288619 308:0.0496995539206819 323:0.0575412230901012 337:0.0514245628834025 373:0.0480181045690544 381:0.0646590324752198 398:0.104637605830874 437:0.0605024046367927 438:0.075003306666218 480:0.0494737889195546 523:0.157688234401806 528:0.0703774653340034 537:0.0752283833423274 541:0.069361278854181 587:0.0851923168288115 609:0.0476333222088576 633:0.139894469387989 678:0.0727922486898772 729:0.0723995517751031 733:0.0759205666665008 742:0.0690346144202296 749:0.0783012528088746 754:0.0819899889725556 811:0.076396878487771 827:0.0574545747680249 836:0.0762766431524175 912:0.0639695918858996 917:0.081827379473938 1088:0.0863963997301797 1193:0.0819899889725556 1241:0.167760332649453 1322:0.075571230204937 1485:0.0838801663247266 1500:0.076762356939608 1602:0.0927729983413953 1744:0.0924823457407274 1990:0.268665365979949 2041:0.10586106663425 2134:0.549821293527668 2449:0.084431134365053 2815:0.101624027262724 3005:0.111370070753247 3318:0.108410777390986 3813:0.116948984269099 3822:0.123377353064897 3852:0.130860640901853 3904:0.11489619741831 4585:0.209414374511434 4684:0.108410777390986 4693:0.136170118118606 5227:0.133325104122723 5394:0.12868683028165 7578:0.148962883172314
+1 6:0.0252624443981103 15:0.0173102831925275 17:0.0275315811277182 25:0.0379195439874379 26:0.0437371295330032 29:0.0183496546098372 30:0.0303697121765563 31:0.0192573822688491 37:0.0478114576113539 41:0.0232648661640294 63:0.0109209455340605 67:0.0571600011394619 75:0.0307191803214373 83:0.0130913180790567 97:0.0315267629667169 111:0.0315970985250026 132:0.0306434636995772 142:0.0131018395177503 162:0.0273643017671571 189:0.0378087271799278 215:0.0321877202714653 218:0.05731928226952 227:0.0359134870813663 232:0.179385114023512 252:0.0364633708463297 274:0.0546029345564377 299:0.0418263596921573 303:0.0902856537999175 355:0.06081698025711 386:0.0402394793802651 389:0.0430594483683246 398:0.15719526445467 414:0.0373313898947006 437:0.0454458577368266 465:0.0429630648366256 478:0.0396220960800625 507:0.0270153968234099 514:0.0536712123470997 553:0.0645878263364287 586:0.0371407559064993 710:0.116450599937803 780:0.0512596787242611 808:0.0527332531420204 826:0.065863494341079 836:0.0572945405088814 853:0.0534648098922121 975:0.0626040037716115 996:0.0562543195622979 1003:0.0533966863703594 1025:0.0615860707860994 1081:0.0561710573972934 1098:0.0566783008879932 1169:0.0569390567033825 1243:0.0672685549961995 1322:0.0567646756770724 1377:0.0481895343380547 1379:0.0533288959721937 1412:0.0634197160252984 1431:0.0590176932788219 1489:0.0592230764249483 1526:0.162863634793565 1717:0.424579083295733 1802:0.150613283760731 1816:0.0555223725713201 1984:0.0870528243052448 2246:0.0639914716467056 2351:0.0895803678837346 2401:0.0684244833128726 3728:0.0870528243052448 5461:0.104810549570978 6260:0.107904012900951 6282:0.0938800793997856 6763:0.104810549570978 7885:0.705079126078392
+1 6:0.0335161140252083 15:0.0382764111650256 31:0.0425818268532275 63:0.0241483398580676 75:0.0226420323603462 81:0.0680217992597134 106:0.0782012624850566 142:0.00289707216699999 159:0.0672104919596936 186:0.190191883302181 245:0.129176225325695 347:0.0917770681440868 355:0.0672391004885833 582:0.0942307002250975 781:0.363202052512051 850:0.102411617135509 1001:0.130953768837104 1726:0.150858800603335 1734:0.154579000741231 1751:0.152201527796241 2227:0.147937158874665 3285:0.180061625215931 3718:0.178946810124813 5294:0.204919909646845 6525:0.210508801299961 7225:0.664326984129259 8949:0.247415427565119
+1 6:0.0274935969752975 15:0.0941955461877669 28:0.101513163487626 29:0.0499256921191395 42:0.0822454798976852 60:0.104339631782802 63:0.0297136799561937 75:0.027860221740599 83:0.0356188238822938 96:0.0851719978803081 142:0.00356474505850865 158:0.0986682764846133 159:0.0827001383749977 229:0.071990146384813 244:0.202291791533597 339:0.106924115775226 365:0.145653180094456 409:0.0702053835681972 413:0.11886061787264 492:0.222982991611989 507:0.0735034207978428 530:0.113006942275021 608:0.45000766943955 731:0.158419243391835 737:0.161988035971001 1359:0.152604878595118 1727:0.239009037611115 2271:0.234813750130048 2581:0.213990435345476 2837:0.20673441570456 3118:0.203139438667521 3880:0.498255218277725
+1 6:0.0194999263431964 15:0.100212763039097 27:0.028389554400695 31:0.0371616390211059 63:0.0421490553638129 67:0.0551518191604563 75:0.0395199123879585 81:0.118726777898398 142:0.0101132298019277 153:0.0845639304709517 171:0.0843022939379586 172:0.0764601341568975 179:0.0531489529878744 180:0.0751340938309581 186:0.0553275315968448 205:0.0771486458937412 229:0.0510592540219845 331:0.0762184692590903 345:0.0715502971796374 346:0.0812310211293625 355:0.117360637864282 478:0.0764601341568975 535:0.0924579568727756 582:0.0822361914753241 586:0.0716718058923811 697:0.104524304098671 781:0.105656838175749 946:0.138598646547591 993:0.107143449628061 2393:0.152596644864244 2419:0.147999285779759 3940:0.181163647957023 4062:0.536507726884186 4063:0.178835908961395 4315:0.161431310848235 5632:0.215922225204639 5800:0.197379067083017 5866:0.208226119229109 7616:0.208226119229109 7617:0.416452238458217 8735:0.215922225204639
+1 6:0.0066348278630199 15:0.0227315194508925 26:0.0574347282276033 28:0.0489948525961258 29:0.02409640131484 30:0.0398809017380723 33:0.0734299568647051 63:0.0286823367438376 75:0.040339816352263 80:0.0432000216726451 114:0.0465884310442105 142:0.0154845674605658 172:0.0520309481775476 204:0.0398301213463445 205:0.0524994788555848 208:0.0497077376748022 213:0.0684982999448261 317:0.039545011053952 333:0.0669346991993891 404:0.0557171792597126 437:0.0596785961048351 441:0.0467855074871712 561:0.0587951730382949 579:0.0779069314197628 644:0.0632203451006831 743:0.084224972019484 768:0.0829174018581552 784:0.260607953725762 1027:0.0693335270935804 1271:0.0846164872945899 1332:0.0815297010702291 1411:0.0840323272733199 1561:0.0883357279209405 1598:0.069419196704058 2976:0.0895917264935863 4944:0.131509732337754 8898:0.587738341497003 9060:0.667738227671864
+1 6:0.0317052572740229 15:0.0181041791211336 17:0.028794253143091 26:0.0228715156910757 27:0.0153863508734561 28:0.0390212185036743 29:0.0191912188941446 60:0.160430802489411 63:0.0114218093327395 67:0.149453779537202 68:0.0324396095508217 88:0.121049274396679 111:0.0330462260520203 134:0.0378452759326307 142:0.00685136247649869 153:0.0916626085144014 176:0.0273903749049048 180:0.040720594410386 186:0.029985987173171 255:0.0491828843508978 274:0.0571071713128308 289:0.0459745045134376 306:0.0829312183872508 355:0.0636062097849711 367:0.0451018640445413 373:0.0377225764013472 382:0.0464127920343134 394:0.0492278422414403 405:0.0502539164953626 409:0.080959932236261 469:0.0610984533373696 475:0.0856370677460401 485:0.0365683116281754 502:0.0364745885604991 505:0.0760210148851886 509:0.0490488411026459 515:0.15271057472198 530:0.0434393770762865 543:0.0584890648491809 570:0.122608230112616 575:0.0551517413034201 609:0.0748405899149803 613:0.0488720229590124 687:0.118917916422519 688:0.0586606515628161 693:0.0628317274884005 719:0.0568764145892526 744:0.0652016185622988 757:0.100411334345379 827:0.0451357796344692 858:0.159041513123998 882:0.0793638544256228 1031:0.194799337772815 1154:0.0717742799478623 1218:0.0642828283546396 1227:0.0577411043308475 1228:0.0650667440261366 1312:0.0687105288216949 1321:0.0613041150563078 1497:0.0641561995315469 1528:0.635742481489737 1551:0.0565743430782566 1920:0.0794678101862171 2007:0.0713539923151866 2078:0.146698704046514 2188:0.0831634694846354 2248:0.0694179329273384 2335:0.078085916649867 2388:0.0851664985438941 2427:0.0851664985438941 2705:0.0774414146302283 3023:0.196371342335249 3134:0.191527138698431 3589:0.0836388861118015 3882:0.0927530252848985 4422:0.0902613842056915 5107:0.189378169345493 8884:0.225705559605312
+1 27:0.0203631580670512 29:0.02539873340046 31:0.0533103351138862 51:0.0474971071737047 63:0.0151162618587843 64:0.181967141010388 65:0.0500322747525698 75:0.0283467014449621 83:0.0181203899920999 96:0.0433296119798243 98:0.045364085498122 132:0.042415248761957 138:0.0586434175001711 142:0.0108809719651689 172:0.054843051627 179:0.0762449819053068 215:0.0445527364588789 242:0.0490033575062485 337:0.0534658459918151 377:0.107651492564304 381:0.0672256540155376 442:0.0595118311475812 471:0.0729014439958716 485:0.0483965506866451 499:0.0520901734788019 507:0.0373934483354021 534:0.0533044601237721 643:0.0568996362410141 671:0.0427090522677817 710:0.0805927360768485 731:0.0805927360768485 819:0.0702390105854938 1003:0.0739091950461931 1007:0.0807264555489966 1047:0.157624756654285 1319:0.0738153627487068 1486:0.095562938532344 2353:0.10719387638102 4126:0.114974211158202 5322:0.138617405461096 5906:0.149355686239555 6377:0.154875921614459 8729:0.464627764843378 9065:0.52787047963118 9609:0.487968769174923
+1 6:0.00566926920967868 31:0.0216082186338162 63:0.012254115096926 75:0.0114897368598741 80:0.0369131736018702 142:0.00735062037125053 144:0.0674099844897729 172:0.0444589458149252 180:0.0436878988418926 205:0.0897185835548336 256:0.0385810972614988 265:0.0535571223634815 308:0.0837772053841187 326:0.132216584231226 327:0.0476780134334808 367:0.0483884310258534 387:0.0400192533313519 772:0.0525278831777038 852:0.0562620295286365 1028:0.0689671097166486 1073:0.0759007768277779 1076:0.0777063307130098 1102:0.0679120992778476 1133:0.132216584231226 1179:0.0706972735917892 1214:0.082422526868867 2149:0.0868975485559842 2172:0.0952818771639595 2442:0.0985688834371931 2736:0.148184608398769 2804:0.444553825196307 2873:0.408937613578657 3167:0.0877866729263527 3807:0.117605250736682 4147:0.10274184822312 5137:0.106823040225841 5324:0.108461969577665 7025:0.125551368912228 9395:0.395575673207855 9588:0.121076347225111 9592:0.484305388900445
+1 6:0.012751221515455 26:0.0413931015297351 27:0.0464106236245641 28:0.0235403326005021 29:0.0115774876618644 31:0.0121502072032398 41:0.0146786796098374 42:0.0190722649670495 63:0.0275617421395378 64:0.0552973068038725 67:0.054096593806417 68:0.0195698450109871 75:0.00646062898214559 81:0.0194091944009691 83:0.016519610506082 88:0.048683601548372 100:0.0393975843358405 142:0.00991973234961028 185:0.0185633615377735 186:0.0180896481063083 232:0.0282952048483785 265:0.0301149365874703 274:0.0344510463314031 284:0.0193590695814734 286:0.0535862320874971 308:0.0471075576184896 312:0.028893711660336 339:0.0247951020526538 341:0.026635164863826 345:0.0233937726937241 349:0.0316020574761288 355:0.019185860811273 365:0.0337761545985341 389:0.0271678264692627 475:0.0258311392490689 539:0.0296165688076133 560:0.0379741952897107 561:0.0282490477119015 587:0.0403746277086384 609:0.0225745433660731 633:0.0331496273976634 713:0.0318764880511009 730:0.0306434249162816 732:0.0348824807058204 772:0.0295361998771094 882:0.023938918379254 890:0.0334781827217384 960:0.0367365329937558 1027:0.0333123624557627 1031:0.0391722023501805 1150:0.0347847505598789 1190:0.06899589189091 1433:0.0307346962529587 1551:0.0341296070134681 2219:0.0458155589517557 2705:0.0934361727980025 2740:0.0923309517898193 2998:0.0504568353554087 4486:0.111910245176157 4595:0.06006613015257 4938:0.0592324751640385 6485:0.0680807025848154 8431:0.0680807025848154 9070:0.32082513032621 9071:0.641650260652419 9073:0.481237695489314 9096:0.240618847744657 9601:0.296573970332736
+1 4:0.0278296817733494 6:0.0225184757575355 26:0.0974661710850512 27:0.0281007431788437 31:0.0122611960194701 33:0.0178014167669768 37:0.0304416065260167 41:0.0592510613169544 62:0.257811888856548 63:0.0347668888849126 67:0.109181502759767 68:0.0394972203743785 75:0.0195589351771798 81:0.0195864920778329 83:0.00833525631259853 88:0.0245641564597846 100:0.0198787352410969 110:0.0310463658044689 135:0.0293089656193647 142:0.0133471285183042 168:0.0238920053686948 176:0.0166747332772454 179:0.0350721737781164 215:0.0204939561441179 218:0.0364952487202159 228:0.02432954713242 232:0.0285536737978034 234:0.0230770628342634 274:0.0695314944147695 291:0.0258926541082193 308:0.047537872259888 320:0.03053496842982 322:0.0278795557637984 345:0.0236074684023656 346:0.0268015485636454 455:0.0234882769338123 457:0.0221823079305389 475:0.0260670996338737 478:0.0252274312239095 480:0.0236609634527498 485:0.0222620845795662 505:0.0231400656449034 508:0.0249592190652611 515:0.0464836299419891 539:0.0298871080550332 574:0.0481738473615439 586:0.0236475592644553 609:0.022780755639101 610:0.124257095496901 621:0.0447995728068551 749:0.0374477702532104 794:0.0751532576760596 827:0.0549555885436622 856:0.0241434144738864 873:0.0371955629154396 882:0.0483151876889578 912:0.0305936175246393 986:0.028766374603158 1017:0.0379072538681975 1024:0.0498129726882083 1055:0.0351024997326237 1083:0.068973975051242 1111:0.0399445028441971 1117:0.0383919763857127 1178:0.0509177447319444 1228:0.0396113819406081 1292:0.0386081502016553 1335:0.0345789326934306 1511:0.0388297515384646 1591:0.0381809705695703 1808:0.0323452757523002 1842:0.0493084550148395 2423:0.0415199090022428 2615:0.125168858476426 2771:0.04640886252396 2970:0.0521808466943756 3289:0.554266269399288 4021:0.688428721620344 4338:0.0651237000141602 6311:0.059005528089071
+1 6:0.0223023682004801 12:0.0214778696480025 15:0.0109157039406688 26:0.0137901140000713 27:0.0185540421068681 31:0.0121435265489928 33:0.0176305783527315 37:0.0150747307381622 41:0.0293412174071715 42:0.0190617782974956 55:0.0319993970399093 57:0.0237863278755709 62:0.0729536268497324 63:0.0137732938134061 68:0.019559084752664 75:0.0129141533564889 81:0.0387970449491403 83:0.00825526369238117 84:0.0186987933056006 88:0.024328416709865 108:0.0294933479974222 110:0.0307484169405362 142:0.00495713904838902 158:0.0228680386288151 168:0.0236627161854935 172:0.0249853260924928 174:0.0467090779776151 179:0.0347355896381674 185:0.0556594640490729 208:0.0477394350334347 218:0.0180725037362705 229:0.0667397265697119 232:0.0282796470494638 239:0.0270117236930296 243:0.0300416121356005 252:0.0229934632732737 259:0.0387585826506195 274:0.0344321038125524 286:0.0178522561009357 296:0.028730485093242 308:0.0470816560598079 320:0.0302419273952853 385:0.0666703693659861 406:0.0298734925742929 439:0.0343391034912045 455:0.023262862291975 457:0.0219694265424584 475:0.0258169362888031 478:0.0249853260924928 514:0.0338445684337857 550:0.0259576547840859 574:0.0477115277720939 586:0.0468412320120797 609:0.0225621310082845 610:0.0410215375311204 644:0.0303584884255889 653:0.032547088502654 684:0.0298181636063118 732:0.0348633009676501 778:0.030446940590915 834:0.0321062246148068 882:0.0957030233410762 890:0.0334597751209592 960:0.110149001477605 987:0.0260110137356623 1017:0.0375434617485024 1024:0.0986698451542498 1037:0.035632883909899 1055:0.0347656245575259 1080:0.0322143738014558 1083:0.0341560193595421 1111:0.118683478350211 1138:0.0314175262962081 1146:0.0364768134248662 1178:0.0504290922341788 1210:0.0510322243124599 1296:0.0324347707123126 1379:0.0672574138089759 1479:0.050142445316034 1497:0.038682233276589 1645:0.0364179448673296 1697:0.0435364391796895 1858:0.0410215375311204 2423:0.0411214465929638 2424:0.0446660013861354 2528:0.0366558356760521 2615:0.619838127374336 2620:0.0577395287752926 2913:0.0468845374410073 2970:0.0516800723335519 3289:0.0548947031510905 3589:0.0504290922341788 3739:0.0490815150441174 3864:0.182862478778494 3881:0.0559243562956929 4008:0.0609541595928312 4021:0.619838127374336 4338:0.0644987143860028 5541:0.0705581708277435 7915:0.14820545124183
+1 4:0.0103751592416762 6:0.0359789708033431 9:0.0183488064200396 12:0.129355745931185 15:0.00821781354919265 20:0.0405910834032871 25:0.0360035406576932 26:0.0311453809000303 27:0.00698414227093672 29:0.01742248103033 31:0.00914217145790226 37:0.0113489086167823 39:0.0481810573078715 40:0.0449607047433404 41:0.0552233404435132 42:0.0430515908501091 46:0.0200844232992437 51:0.0325810518060886 57:0.017907375334094 58:0.0160899827827655 62:0.302074532751993 63:0.0725839146906357 64:0.0208036559173422 75:0.0486116630709955 79:0.0162661355750304 81:0.0730202292460092 83:0.037289515101626 92:0.0316685806450535 108:0.0666115999760487 109:0.0263961810701808 123:0.0243348117221639 127:0.0238549892266454 132:0.014547553519707 141:0.0219104458818261 142:0.0118178367685001 172:0.0188100329955727 173:0.0179282353071093 179:0.0130752263307646 185:0.0279352329017239 186:0.0272223612049825 189:0.0358983232153086 190:0.0411309281664095 208:0.0179701546588723 215:0.0152806676137254 225:0.0228551817521653 227:0.0170494230194575 232:0.0425802802920708 242:0.0168071386299844 259:0.0583582712365591 265:0.022659359558337 296:0.0216295505042486 299:0.0198564761517011 308:0.0177225524432376 327:0.0403439618015442 340:0.0274613211592721 341:0.0601232324489896 345:0.017602159159573 346:0.0199837236038846 355:0.014436003120781 369:0.0214487337472386 370:0.0283655931149473 387:0.0846582686367031 429:0.0273729800211065 433:0.0193968135264393 439:0.0258519607595604 441:0.0169137209751649 478:0.0188100329955727 483:0.0232887700677652 507:0.0128251797837755 510:0.0216847786547199 518:0.0209178327879853 546:0.0207232969705452 561:0.0212554101658284 565:0.0255126425230968 582:0.0202310065518181 586:0.0176320516378058 597:0.0428974674944771 610:0.0617655716505813 631:0.0160978882683726 641:0.0189794144468437 669:0.0362384973420689 681:0.0262465992682449 726:0.0221045990757392 730:0.0230570096423788 757:0.0227892581694779 781:0.025992742939942 804:0.067786077668304 827:0.0204879447420253 862:0.0230798218523125 960:0.165849854795025 976:0.0351520553436221 1009:0.149644428326435 1019:0.0689459345623165 1024:0.0371414612750872 1031:0.0294743113659412 1034:0.0302419356838878 1037:0.0268259745576825 1055:0.0261730642465076 1111:0.0893500503268432 1138:0.0236524712178367 1175:0.0508283342601888 1178:0.0379651994674866 1210:0.0768385267097444 1213:0.0610381693504383 1223:0.0294743113659412 1340:0.0322034630793626 1424:0.0223046544779797 1488:0.0334033788539615 1498:0.0788675553736331 1500:0.0273729800211065 1591:0.0284684282693016 1598:0.0250961673055375 1710:0.0334033788539615 1781:0.0304486955980812 1910:0.0587092955577363 1943:0.0287869411968858 1947:0.0332945942949487 2003:0.0375404510672205 2037:0.0394337776868166 2200:0.0346032946285604 2225:0.0371414612750872 2259:0.0406336934614155 2423:0.0619160033674117 2459:0.0346032946285604 2471:0.0371414612750872 2495:0.0355959077224012 2528:0.0275960968447797 2578:0.0362384973420689 2615:0.373312738354164 2616:0.0318476296122085 2668:0.0377493992826731 2753:0.0340967896989587 2780:0.090391028149881 2877:0.0391651152420855 2908:0.0384192633548722 2970:0.0389069913359978 2997:0.0826542086128253 3083:0.0451955140749405 3162:0.0466640922942705 3289:0.123981312919238 3391:0.0466640922942705 3482:0.0365849623863221 3489:0.0475429045819223 3738:0.0445682476658657 3864:0.275333549519626 3895:0.0466640922942705 3897:0.0384192633548722 4021:0.559969107531246 4033:0.0417032818886122 4034:0.0445682476658657 4244:0.0377493992826731 4338:0.0485574189138666 4388:0.0466640922942705 4719:0.0475429045819223 4768:0.0950858091638445 4771:0.0819425416785171 4954:0.0451955140749405 5482:0.0417032818886122 5544:0.0458889249199377 5811:0.0439955983003416 6192:0.181048662404537 6272:0.0512259129077955 6483:0.0386586103124838 6488:0.135586542224821 6626:0.0439955983003416 7122:0.0497573346884655 7638:0.0512259129077955
+1 6:0.0145531766892218 26:0.0209967202679191 27:0.0282502401325389 28:0.0358226197380829 29:0.0352362003606073 68:0.0297805102442289 75:0.0098314947041701 88:0.0370422579694239 97:0.0302698704754112 142:0.0037738506704029 186:0.0275280131468572 206:0.0462683391955988 312:0.0439691512943173 373:0.0346304283101513 377:0.0373367984665483 405:0.0461345649878471 414:0.0358430815739832 437:0.04363404605763 485:0.033570779492611 506:0.0271390445765799 507:0.0259383611171804 565:0.154794586736657 643:0.0394690347629251 656:0.0478865950559777 772:0.044946860975241 780:0.0492160846717007 827:0.0414359656727594 882:0.072858339310187 1192:0.0603641176391747 1241:0.0604939764412115 1245:0.0474387255347814 1462:0.0596104962877127 1475:0.0726251046537658 1548:0.0533851133672978 2448:0.0716851550595332 3852:0.0943760709433038 5248:0.0869273488540482 6572:0.10063201741706 8905:0.107431321849734 8950:0.107431321849734 9078:0.488217258487314 9599:0.789797633769576
+1 6:0.0318881487712384 17:0.034752423046353 26:0.0828124193801093 27:0.037140256566944 29:0.0231623079254793 33:0.0705834555804606 37:0.0603512015406815 53:0.196465568554906 64:0.0553148180783612 78:0.048996123253706 85:0.0390839284935933 87:0.178242525416307 88:0.0486990184277661 91:0.0509601014798624 100:0.0394100605657578 142:0.00330762456027545 160:0.115611446305604 166:0.0475862342934115 179:0.0347657050613267 234:0.0457508203086232 276:0.0495439644647978 280:0.0668109099345441 323:0.054557529311368 337:0.146274111645612 341:0.0532871991091804 351:0.0452599310681852 398:0.0496059080830641 431:0.071114148816132 437:0.0573651642616527 510:0.0576576343658639 523:0.074755801218921 587:0.161549653375053 633:0.0663202501116671 729:0.0686454068227756 733:0.143967691988662 749:0.296964344226594 754:0.0777385496238862 762:0.0849114066533287 780:0.0647038044049054 811:0.0724354595464032 882:0.0478929984723393 890:0.0669775688503299 917:0.0775843719402932 1012:0.0851462968094571 1088:0.0819164740953658 1193:0.0777385496238862 1227:0.0696890200588758 1241:0.15906143064557 1322:0.0716526237293566 1602:0.0879624259704846 1625:0.0861187166293486 1816:0.140168991470899 1990:0.254734219959986 2134:0.608196547585704 2989:0.0982481364940995 3005:0.211190363125064 3161:0.108938467446177 3813:0.110884810828668 3961:0.10804088332361 4166:0.10804088332361 5550:0.124075104217509
+1 6:0.0204127388748778 26:0.0441759806683972 57:0.0761983809849536 75:0.0413698820054729 81:0.12428450610744 142:0.010586640969565 144:0.0606790028863036 158:0.0732566846354911 179:0.111273825318132 204:0.0612707581254086 262:0.191042165283438 303:0.182383130282436 315:0.144572741360642 346:0.0850335326231576 437:0.0918037079377086 475:0.0827033393926628 478:0.0800393152986156 745:0.277261834877177 1241:0.127276103111426 1463:0.150192407374585 1726:0.137819138342396 1746:0.119219734135104 1835:0.137421905896468 1836:0.108842729487124 1951:0.127276103111426 2175:0.158878115597363 2785:0.374414820531266 2927:0.162496614921984 3018:0.384626438664792 3400:0.154927291576397 4492:0.158042100742073 4997:0.20230169351325 8300:0.452059553745204
+1 4:0.0254854523816649 6:0.011783791468204 15:0.0201861668829204 20:0.0332358633121577 26:0.0510034980891723 29:0.0213982166599112 30:0.0354152541217156 60:0.0894402041247953 63:0.0636766096250215 75:0.0716455639203802 80:0.0767254339256722 83:0.0305325486038621 92:0.038895215255223 142:0.0320849418624593 154:0.0425915342061151 158:0.0422893517958538 173:0.0440387637975953 180:0.045403478878544 185:0.0343099335298771 186:0.0334343875619387 213:0.060828230900698 221:0.056087114415412 228:0.0445603021953733 234:0.042266339282005 303:0.157928202658647 304:0.0446133935017068 317:0.0351169746591957 327:0.049550281274278 346:0.0981756953222188 351:0.0418128372235441 357:0.109082776126582 363:0.110080774383643 408:0.0693880330326637 437:0.0529961097810954 441:0.0415467194737428 442:0.050138211092878 456:0.0638483513393984 472:0.10736051583076 571:0.0465008982364147 579:0.0691833347248514 586:0.0433112207667433 603:0.063080414915701 631:0.0395427149938077 963:0.049989211989761 1175:0.0624271426709256 1241:0.0734734847265635 1245:0.0576171162994158 1314:0.0687042985434136 1429:0.0949606795722752 1561:0.0784443710148177 1675:0.174131655918054 1785:0.178871723962208 2024:0.114762215799771 2050:0.0758602108391777 2285:0.0795597296623955 2611:0.071394219122873 2733:0.076612266821275 2807:0.0800283505391143 3170:0.0912339676589636 4655:0.125830894129777 5222:0.310258979670235 6311:0.108070411197377 6632:0.130481645437075 9292:0.741210641847378
+1 4:0.00814979202611354 6:0.032030089582376 12:0.0889089605175707 15:0.00645517526769815 18:0.0100856573136535 20:0.0212564697495653 26:0.0244650102226602 27:0.0109722281196962 30:0.0113251650911086 31:0.00718126771005949 32:0.0141240022752832 33:0.0104261231301583 37:0.00891468196252962 39:0.0378467055310442 41:0.0347027918603155 42:0.0450899439901078 55:0.0189233527655221 57:0.0281328471798652 62:0.0431422884212466 63:0.0162901130448929 67:0.0106577639878339 68:0.0115665760852866 75:0.0152739802770723 81:0.0229432500530166 83:0.00976376316269353 84:0.0110578290450334 86:0.0146366161763597 88:0.0287739929007552 100:0.0116427891110316 108:0.087206803880625 110:0.0363671315444744 127:0.0187383341743225 140:0.0399423278712646 142:0.00977161025913672 158:0.0135233786276956 168:0.0139933238495106 172:0.0147754702696481 174:0.0414332350772255 179:0.0205414438097587 180:0.0145192207923444 185:0.0329151099824438 188:0.0208243758659053 191:0.0243178219619802 204:0.0113107447471684 208:0.028231474763031 213:0.0194517807152504 218:0.0106874627397239 219:0.015753792733402 221:0.0179356564280293 229:0.0690682992748751 232:0.0167236194023916 239:0.0319476254887245 243:0.0532967565024378 252:0.0135975504875472 259:0.0229205047605921 274:0.0203619726362773 284:0.0114419992150554 286:0.0211144315898902 289:0.0163925402247808 296:0.0169902296554502 308:0.0278424866972822 309:0.0138658674103582 316:0.0256682251034521 320:0.0178840451179924 342:0.0176009317759972 346:0.0156974160574603 347:0.0154778633208665 350:0.0275011129183758 355:0.0113396257717278 357:0.017441360776125 385:0.0591398761489189 387:0.0132999844457041 402:0.014360952617208 406:0.0176661653223186 427:0.0200145242383979 433:0.0152363922834833 439:0.0609209262479601 442:0.0160333035038573 455:0.0137568638852094 457:0.0129919700674568 475:0.0305345123915132 478:0.0295509405392962 496:0.0157993409571279 514:0.0200145242383979 530:0.0154886223048759 550:0.0153504723177213 574:0.0282149713598446 586:0.0554006162197838 598:0.0398243015901405 609:0.0133424752872438 610:0.0242587391480329 631:0.0126450532845657 643:0.0153295423703045 644:0.0179529753385337 653:0.0192472388294769 655:0.0285331312289874 656:0.0185988735799989 663:0.0176334456564464 684:0.0176334456564464 719:0.020279694666924 723:0.019337148746997 732:0.0206169679371959 747:0.0207642625147373 764:0.0174256712649913 778:0.0180052829343691 787:0.0216414812133268 804:0.0177488821261827 827:0.0160934868372234 834:0.0189865269522841 882:0.0707443826656911 890:0.0197869705882041 893:0.0593050662834553 918:0.0217850929467219 960:0.130276730472834 984:0.0216061930902995 987:0.0153820269830363 996:0.0209777903862653 1017:0.0222019236743659 1021:0.0201719888972334 1024:0.0583499834338942 1037:0.0210720730593437 1055:0.0205592054373792 1067:0.0200404375254898 1080:0.0190504826951911 1083:0.0201987057006262 1111:0.0935804853014035 1138:0.0371585084795022 1146:0.0215711442106233 1178:0.0298220463592561 1210:0.060357436227284 1296:0.0191808179164259 1379:0.039773742174473 1424:0.0175205306227656 1479:0.0296525331417277 1497:0.0457507086860525 1498:0.0929268880020478 1645:0.0215363313521287 1697:0.0257459662669412 1698:0.0272856779985813 1858:0.0242587391480329 1932:0.0243178219619802 2001:0.0246872426499557 2185:0.0235464401265766 2228:0.0596440927185122 2248:0.0247514632267527 2254:0.0303667275582375 2410:0.052651155872638 2423:0.0243178219619802 2424:0.026413950856667 2528:0.0433540237366242 2535:0.0316659452325503 2578:0.0284657044578542 2615:0.403206256665275 2620:0.034145189366136 2780:0.0710030625350758 2908:0.030178718113642 2913:0.0277259174645693 2970:0.061123666705082 2997:0.0973885693587727 3289:0.0324628564529242 3589:0.0298220463592561 3739:0.0290251351388822 3864:0.324415912198673 3881:0.0330717582287027 4008:0.0360462124665193 4020:0.030561833352541 4021:0.696447170603657 4338:0.038142341361206 4492:0.0291749917169471 5541:0.125177092124403 5544:0.0360462124665193 5729:0.0402384702558928 7122:0.039084887281133 7853:0.0876436525389757 7915:0.175287305077951
+1 6:0.033142592328056 15:0.0189249190713065 17:0.0300996199167956 26:0.0239083794186754 27:0.016083880033145 29:0.0401224780224857 54:0.0413595314953158 60:0.0838519088145972 63:0.0119396088507356 67:0.156229159229912 68:0.0339102359375928 88:0.126536956261294 111:0.0345443529619378 134:0.0395609643201239 142:0.00286478562829873 153:0.0958180669995092 176:0.0286320978675563 180:0.0425666332947658 186:0.0313453803527084 255:0.0514125550684391 256:0.0375908996031901 274:0.059696083885127 289:0.0480587256366994 306:0.0866908455756204 355:0.033244875797985 367:0.047146524639255 373:0.0394327022937658 394:0.051459551092641 405:0.0525321416854928 409:0.0846301925836093 469:0.0638683078119762 475:0.0895193626705743 485:0.0382261097565965 502:0.0381281378209996 505:0.0794673729637013 515:0.0798167994419736 530:0.0454086700190145 543:0.0611406245718715 570:0.128166586114294 609:0.0782334342757625 613:0.0510876009987482 687:0.124308974705042 688:0.0613199900458613 719:0.0594548659713151 744:0.0681574870837024 757:0.1049634100289 827:0.0471819777680793 858:0.166251545828791 882:0.082961757732422 969:0.0617779162880794 1005:0.0582294549666448 1031:0.271507234348351 1154:0.0750281153498407 1218:0.0671970441822531 1227:0.120717511601899 1228:0.0680164981073688 1312:0.071825471268085 1321:0.064083293057147 1497:0.0670646747324653 1528:0.581492983769017 1551:0.059139100265447 1920:0.0830704262527167 2007:0.0745887742793707 2078:0.153349184371746 2188:0.0869336256096014 2248:0.072564945030493 2335:0.0816258855659722 2388:0.0890274605518162 2427:0.0890274605518162 2705:0.0809521655104345 3023:0.205273696020839 3134:0.200209883893357 3589:0.0874305949079093 3882:0.0969579170306859 4422:0.0943533191937316 5107:0.197963492559127 5876:0.117968879475133 8884:0.235937758950267
+1 6:0.036281192058975 11:0.0181150681461609 15:0.0414342135177755 17:0.0219667003372167 26:0.0174483334902666 29:0.0585627628483578 30:0.0242311679672581 37:0.0190737313117257 41:0.0556872132813509 58:0.0270418961656752 60:0.152987791766605 63:0.017427051271258 67:0.228032057163872 68:0.0742430628623748 83:0.0104452069035841 88:0.246257762940439 92:0.0532243247913938 97:0.0251543473467674 100:0.0249107519658377 138:0.0338040533117447 142:0.0094082415062124 153:0.0699280180443435 176:0.0417914057134996 185:0.0234749060235641 186:0.0228758562090616 228:0.0304882230537434 232:0.0357816268018906 274:0.043566197501325 304:0.0305245482021371 325:0.0361990724845911 346:0.0335859761937493 370:0.0476731040703049 373:0.0863339494486924 387:0.0284564643846819 389:0.03435596359704 398:0.0313554573263212 412:0.0410861835610605 414:0.0893571042488819 427:0.128468405017636 448:0.0365071981955211 473:0.0354928114969557 475:0.0979968361526973 480:0.0296503970044162 490:0.0417184126476317 493:0.0719767608859613 505:0.0869929241617462 506:0.0225526222351442 515:0.145625735479737 530:0.0662784878863305 543:0.133861269555547 547:0.0506008678156354 553:0.0515328712863543 570:0.0467679824230234 613:0.0372837273423705 631:0.0270551826510501 643:0.0327988786960532 663:0.0377282785818571 688:0.0447513240945251 693:0.0479333748490895 696:0.0444910533157405 712:0.0370187805974437 749:0.0469271362155294 856:0.0302549735822235 858:0.0404434551877544 884:0.0416187633453178 913:0.0420744295143705 930:0.0352950361532841 969:0.0450855186314382 1008:0.0524182234954067 1025:0.0491378521135079 1031:0.0495364897696657 1045:0.0209415041550898 1190:0.0436255059423188 1192:0.0501627512284987 1228:0.198553740683978 1267:0.0541232838173117 1272:0.101882466125495 1273:0.0541232838173117 1319:0.0425496767403737 1338:0.0509412330627473 1366:0.0436851341069109 1411:0.051057056086963 1466:0.0492361727408423 1528:0.606247907921273 1551:0.0431597108978373 1598:0.0421782894112029 1713:0.132550063729021 1838:0.0617901832181933 1858:0.0519036657073882 1917:0.0501627512284987 2007:0.10886976364781 2018:0.0638068415466917 2021:0.0588410041752833 2067:0.0502706642575657 2188:0.0634441533903992 2388:0.129944467945515 2427:0.129944467945515 2666:0.0544348818239051 2703:0.0624224123047646 2775:0.0595705651082698 2825:0.0544348818239051 2826:0.0688590452065451 3103:0.0581566004743084 3553:0.258279886170422 3778:0.0672374645091515 4257:0.0836254889947722 5083:0.0816088306662738 5104:0.0700893117056462 5107:0.144473741886974 6427:0.0799037703443688 6677:0.0892757300671554
+1 6:0.00985708221684371 15:0.033771253869312 26:0.12799250785322 27:0.05740291873971 29:0.0357990009378073 31:0.037569919465005 63:0.0213060653035933 64:0.256479004246842 81:0.0600155913662607 85:0.060407002501517 94:0.0591739211511481 97:0.0615066954124831 132:0.0597834351133087 142:0.0332291047271781 172:0.0773001718499721 204:0.236695684604592 226:0.0764307600745351 240:0.0887367740541961 317:0.05875034488798 322:0.085426630738368 337:0.150718056733253 387:0.208742814507934 414:0.0728311507909027 423:0.0746822781947512 510:0.0891139912903387 531:0.110913814933108 582:0.249419065376685 719:0.106096378268136 1031:0.242250434572135 1045:0.0512055709412745 1688:0.132718988188689 1910:0.120633457604034 1980:0.122395217607083 2206:0.254444939128542 2270:0.145052451502134 3477:0.152633508936378 4225:0.58613528673146 4640:0.180800709390526 4695:0.199547593963096
+1 186:0.144200774867416 232:0.22555388806848 274:0.274624887492928 543:0.281270328831083 1528:0.382155829644391 1713:0.417772819600056 2007:0.343136976692219 2388:0.409560472758499 2427:0.409560472758499
+1 6:0.0152304936289367 15:0.0521810466406414 63:0.0493810264628178 75:0.0463007728783765 81:0.0927320135748436 142:0.00394948881742761 186:0.086427569279978 209:0.0478376453823798 229:0.0398800297700316 255:0.0708790596100435 267:0.0815311319855441 345:0.0558846390577886 346:0.126891612615187 367:0.0649977680717045 408:0.134525546961691 413:0.0658446359298586 423:0.0576969907127269 427:0.080894691426907 455:0.0556024837633141 467:0.0955878977555052 507:0.122154993015913 510:0.0688464419155073 515:0.0550190481488387 527:0.0726325592399988 608:0.0830961835529652 631:0.0511087683797785 640:0.0710740362930267 755:0.0794809741444424 1335:0.0818567725958408 1341:0.0874705251006963 1354:0.21808318534146 1472:0.15487258426409 2024:0.0741648051604341 2647:0.123524798743468 3091:0.419041455458415 6311:0.139680485152805 6963:0.354238059482099 6966:0.154163691225543 7110:0.603770943833248 8942:0.168646897298281
+1 6:0.0159827871100004 15:0.0547584720464899 17:0.0870920076124817 31:0.0609178265270986 41:0.0735948978615363 60:0.121311018228623 63:0.0690935306022307 80:0.10406551063512 108:0.147952956644158 142:0.0207228473679745 144:0.190042030346541 174:0.117157709418319 186:0.0906965640044811 229:0.0836997199544335 242:0.11199246920635 346:0.133159284254581 499:0.11904709077402 584:0.22482904942795 697:0.171343180566718 1064:0.148086454023903 1126:0.170443582757532 1294:0.181528337918037 3484:0.537236776674107 3576:0.256002420336147 3667:0.289649516843312 5150:0.30115520135432 8941:0.353954050597466
+1 6:0.020000265894453 15:0.137045434362136 81:0.24354626627481 96:0.123917041913321 159:0.120320724748684 216:0.174009434464585 365:0.211911328508899 408:0.117770168819687 423:0.151532206857945 633:0.20798050177443 903:0.222682597777761 1010:0.445365195555522 1527:0.260063276125816 1700:0.287446456804935 7133:0.442924946546938 7272:0.376854428525502
+1 6:0.00805746687643248 28:0.0595003231522107 31:0.0307107493860842 37:0.0381237094426081 63:0.0174162000147931 75:0.016329825016831 96:0.049922209330177 142:0.0041788370226954 174:0.0590631881948895 180:0.0620915650324945 242:0.0564592148308999 255:0.149990063081227 312:0.0730314736853005 405:0.0766281624664471 903:0.0897116900855741 1685:0.230747352647477 1783:0.350062267280471 2213:0.335533613434812 2238:0.124126224941982 5991:0.489348093053935 6852:0.159708033745076 9080:0.608185935189987
+1 6:0.0131197450605173 15:0.0898988628465054 63:0.0567166102253297 75:0.0531787829572903 80:0.085423960147167 83:0.0339940888135538 142:0.0170107048617149 179:0.143036584069482 186:0.0744498308970877 229:0.0687063513942302 265:0.123941158127439 345:0.0962795080842565 490:0.135773224771398 535:0.12441327230042 557:0.123475155636599 716:0.125621378620528 1392:0.208880755692931 3825:0.215693125097429 4062:0.481290337603355 4063:0.240645168801677 7616:0.280193222389267 7617:0.560386444778535 8735:0.290549256210175
+1 6:0.0235221152429951 15:0.034538096189081 17:0.0183106651433851 23:0.0483428182875785 26:0.0290886284189977 27:0.0293531820973886 31:0.0128076726370086 37:0.0317983767905455 52:0.0273960353869516 60:0.0510100867779066 63:0.0145265741038029 65:0.0240402539187517 75:0.00681022303968833 102:0.192113014258584 118:0.0220037175565727 142:0.0095851282410876 144:0.0199776998845175 159:0.0404308618208947 176:0.0174179194905019 179:0.0366353265786713 185:0.0195678521066574 186:0.0190685053504685 192:0.0271373394671649 198:0.029258732380586 199:0.0157073190167659 209:0.0211088291508632 243:0.0316846290217621 252:0.0242510072512334 284:0.0204066170732026 286:0.0188286204217825 295:0.0285313257461181 308:0.0496566162711824 312:0.0304571925419532 322:0.0291221364474513 355:0.0202240357238084 356:0.032049827526666 388:0.0349434020874043 402:0.0256125223711048 406:0.0315073147715384 416:0.163463002012297 441:0.0236951803322801 442:0.0571902652451054 493:0.0299986421824 496:0.0281778642754009 506:0.0187990689322305 511:0.0435848643819979 513:0.075437324831911 527:0.032049827526666 528:0.0351583315597403 530:0.0828711080362202 537:0.0375816951022657 550:0.0273773144529113 574:0.0251604682647647 587:0.0425593577034187 626:0.0317145157800127 641:0.239301915717687 664:0.0379864020621242 689:0.0419946879971723 695:0.0995123537433588 718:0.165733573619459 795:0.119431099984381 800:0.0296332024000197 804:0.0633096776566536 827:0.0287024686059861 847:0.0358349228048423 850:0.0308031515655567 862:0.0323335439688553 876:0.0648601798977911 882:0.0252342881694889 908:0.071483580251256 909:0.0591711068427486 947:0.0408783425853133 963:0.0285101545385445 967:0.0430578605570993 977:0.046201223069681 981:0.0398826812035135 1048:0.0456422606101951 1055:0.0366670041488787 1118:0.0865301231311473 1133:0.0391838576958609 1135:0.136926781830585 1150:0.0366670041488787 1167:0.0429559804393071 1245:0.0328605477937538 1305:0.0305622655520099 1424:0.0312475776844708 1472:0.0683390433465497 1627:0.0897252733714557 1675:0.0993118359475886 1681:0.0498678826387151 1785:0.102015220679673 1863:0.0404825712328548 1917:0.0418138967762853 1943:0.0403289000614663 1995:0.0434770262304945 2034:0.0452442107313819 2185:0.0419946879971723 2204:0.0500848351624794 2512:0.0520331170184157 2547:0.0531871283116225 2548:0.0467962719034019 2608:0.0595779847198431 2695:0.0560467743820149 2707:0.106374256623245 2783:0.0564756915707 2926:0.0573984667480571 3052:0.0602141029170026 3095:0.159561384934868 3279:0.616353809480403 3318:0.0541585582554352 3456:0.0653737922943429 3523:0.0528848042811858 3614:0.0534997025452797 3621:0.0512534930939485 3733:0.0548681434297279 4006:0.0573984667480571 5105:0.0697072524743663 5788:0.0608973826330886 5977:0.0697072524743663 7831:0.312622020443136 8356:0.0744170937644815 8698:0.223251281293445 8856:0.139414504948733
+1 6:0.0179615343259456 15:0.0205126129030808 26:0.181399102006829 27:0.0174332267343597 31:0.0684597513999208 63:0.0776476476268796 67:0.0677343613546186 88:0.0457175640917692 96:0.074190353723016 102:0.0570491765608118 134:0.0428799058063963 142:0.0170781873001422 153:0.0519283308445532 158:0.0859464908163937 174:0.0438874689540146 178:0.144957586038914 192:0.0967032583374591 204:0.143768631538306 205:0.0473748131841581 209:0.0376104032056475 232:0.0531426517350067 256:0.0407445637856343 284:0.0363592452570973 286:0.0670953372930558 308:0.0442375402832543 437:0.0538531506062489 455:0.0437151915997935 478:0.0939040349900049 571:0.047252900003328 574:0.0448293626101949 657:0.062184457726727 693:0.0711903530879736 795:0.0709316433991302 979:0.458851997644948 987:0.0488794729938111 1126:0.0638484439805255 1190:0.0647923327212618 1387:0.0971163494670975 1433:0.0577243836156853 1550:0.571934720698015 1578:0.0836547990199123 1983:0.103157231296148 2041:0.0942268658413873 2280:0.0813225505070935 2354:0.262170890938358 2987:0.306807089443722 3252:0.112813229410161 3518:0.0927093822742522 3767:0.191797848053497 4335:0.108503181234256
+1 6:0.0246000710580265 15:0.0421410325402433 26:0.0532379447051092 27:0.0358147535160551 28:0.0908295497807865 31:0.046881149418849 60:0.0933585502956 63:0.0265865044495479 75:0.0249281109025821 96:0.0762081877424842 106:0.08609694187009 142:0.0159478917621897 179:0.0670498953252511 205:0.0973266328094997 255:0.114482822777354 409:0.0628167142329683 413:0.106351295114097 480:0.0904685938680742 507:0.0657676540563095 513:0.184086971272926 527:0.117315049791662 586:0.0904173424442102 592:0.242325040491381 647:0.111105100516974 737:0.144939827226578 4282:0.427709718304719 4422:0.21010109895009 4705:0.197014378279355 5621:0.22560988132717 5876:0.262687009120955 6265:0.544792015062621 8692:0.272396007531311
+1 6:0.0169717790141811 15:0.0581468476262035 26:0.0367292692193057 42:0.101540159404602 63:0.0183422347526124 88:0.12959500799072 96:0.0525766172945529 102:0.0808582941713799 140:0.0599653341763425 142:0.00440102947819169 161:0.0828133217870215 345:0.0622738676423504 587:0.107476645813159 755:0.0885679454570309 952:0.0790547812918617 8689:0.187928109364473 8691:0.939640546822365
+1 6:0.0294501283953795 28:0.108737161645958 31:0.0561240602293948 60:0.111764770375118 63:0.0318281995111573 75:0.0298428433399085 84:0.0864207112708604 142:0.00763684720949385 158:0.105689823475389 174:0.107938295152515 179:0.0802692000997744 205:0.116515185089049 405:0.140038380420749 409:0.0752014209704152 480:0.108305041025274 505:0.105920697777315 507:0.0787341569726586 513:0.220380865043694 592:0.290100932597031 671:0.0899264811109014 742:0.151126422904548 784:0.144595644689935 4282:0.512035355113972 4705:0.235856990915876 5621:0.270090275620713 6265:0.326100578216355 7223:0.27745659395262 8692:0.326100578216355
+1 6:0.0305245029177576 15:0.0261449259170385 26:0.13211846377625 27:0.0666600238036444 29:0.0554295218676186 31:0.0290857652168564 41:0.0351385471608539 63:0.0164946644001341 64:0.198560130200049 75:0.0154657722773484 85:0.0467657082376699 94:0.0458110850933876 97:0.0476170651283546 134:0.0546537862306875 142:0.0316617926820635 176:0.0395554704765761 178:0.061586585222905 198:0.066445531884185 209:0.143812181827004 226:0.0591709318127363 265:0.0720906203863024 317:0.0454831621189076 322:0.198405982256975 337:0.0583412218406208 373:0.0544765912231702 387:0.0538679576634785 389:0.130071365684458 426:0.06869796403598 441:0.107621809433871 505:0.0548924032681268 506:0.0426920113243982 599:0.0715519818495766 1010:0.0849648154863569 1045:0.0396421721260347 1313:0.0997320233027742 2215:0.12927585895262 2683:0.108094535783296 3904:0.130349859412979 5798:0.154485145303689 5857:0.651899773578367 5994:0.463455435911066 7856:0.177488349092285 8708:0.168998551001382
+1 6:0.0297959787470182 26:0.0286589356271309 27:0.0192797209058989 28:0.0733427511512956 29:0.0841658113143004 31:0.0126184796460762 41:0.0152444000986763 63:0.0214679846430163 67:0.0187271639747923 68:0.0406481448122398 80:0.0215560633507442 81:0.0201572302758803 88:0.0252799407022462 111:0.0207041299303572 138:0.0277616251528497 142:0.0137360555425704 173:0.0247454418629698 176:0.0343212492694107 178:0.026718536243158 185:0.0385575975469272 204:0.218619955347992 220:0.106234795252427 234:0.0237495140933207 240:0.029803715131844 252:0.0238927750629959 274:0.0357787994597261 278:0.0285813034684053 308:0.0733846444396566 322:0.0573838973601758 327:0.0278423711029191 342:0.0309272691583804 382:0.0290785542408502 411:0.0248033010367377 415:0.028803958232072 422:0.0301892267130096 475:0.0804800361171838 480:0.0243504292126943 485:0.0229107878791275 493:0.0295555068057196 505:0.047628705533361 506:0.0370427438941691 523:0.0388061665917631 531:0.0372522415840076 534:0.0504683561774643 591:0.0348120091650444 597:0.0296046088689021 641:0.0261963315821353 643:0.0538722482417376 657:0.0343854585248127 696:0.0365383385659823 712:0.0304017243460198 717:0.0335500296845161 720:0.0329613956458623 749:0.0770779499782425 772:0.0306745334246121 800:0.0291954652441865 834:0.0333619513392418 847:0.0353055747790589 851:0.0376016638772534 876:0.0319510375958622 912:0.0314850965127286 953:0.0361759713350108 991:0.0351682846155904 1009:0.206546681133795 1057:0.0451026182417767 1189:0.0451026182417767 1192:0.0411962282569646 1229:0.037367228683582 1250:0.0447047213687207 1251:0.0434917409498433 1301:0.0434917409498433 1389:0.0844443261839661 1468:0.0464129614316449 1576:0.0366981759960335 1610:0.0458071463511239 1613:0.0379650667189619 1685:0.0948098249301433 1816:0.0727625300689356 1828:0.0902052364835534 1907:0.049788192599857 1917:0.0411962282569646 1946:0.0461050044969951 2018:0.0524014561470088 2021:0.0483232553938714 2098:0.673015730998447 2123:0.0540576395656313 2138:0.0515356718580108 2236:0.0472318813368831 2306:0.0931418911602575 2322:0.157204368441026 2471:0.0512644917329906 2638:0.119995631530198 2639:0.0599978157650989 2997:0.399292070648799 3708:0.0518151972840962 4227:0.131242162006002 4517:0.0593246293529873 4556:0.0586979077970224 4690:0.134042728262551 4784:0.0540576395656313 5401:0.0615153116108863 5601:0.0586979077970224 6415:0.0670213641312753 6721:0.0733178157812889 7159:0.0733178157812889 9369:0.0770010038841508
+1 27:0.0736543182120756 64:0.21939402627675 142:0.0131189633248487 209:0.158901656474955 1038:0.335863067325992 1543:0.354622875210318 2683:0.358309023067026 5857:0.540225204992682 5994:0.512083437807648
+1 6:0.0493075960093899 26:0.16006265167067 27:0.0358929735076787 28:0.0910279229629402 31:0.0469835385952314 33:0.0682130479272117 42:0.147500776273003 60:0.0935624468551237 63:0.0266445697983549 73:0.267899611442051 75:0.0499651085869827 83:0.0319397745572494 88:0.188254227606332 94:0.0740006965100311 102:0.11745757765522 117:0.127263531576847 131:0.327343310490738 134:0.264854122516626 142:0.0319654444231759 176:0.0638957221834308 185:0.143565027110756 275:0.0828934292841009 286:0.0690707234135239 306:0.0967301489812089 314:0.0983680702674577 355:0.148379301987347 423:0.0933948688181579 431:0.274903675463605 441:0.086923163264319 500:0.12756824322881 508:0.0956409497407423 561:0.10923601558801 587:0.15612432343632 593:0.11872969481212 658:0.114007683807648 782:0.140450754703433 952:0.229675463915288 1126:0.131456473504283 1154:0.167433613719656 1159:0.125347132599094 1917:0.153389682004277 2941:0.177163816737046 3557:0.20717486383413 4530:0.202658462974118 8428:0.263260721729193
+1 6:0.0133728598815014 26:0.0578814242642808 27:0.0389385607326889 29:0.024283810001147 31:0.0764552721148472 37:0.0316366813762689 74:0.0548142184378669 75:0.0271023716496127 80:0.0435360079140892 96:0.0828551603854717 108:0.123792811894379 134:0.0478879166173957 142:0.00520166599774583 162:0.0362137336673056 165:0.129841454038948 174:0.0980263092604504 185:0.0778733966697742 351:0.0474513839579772 373:0.0477326574792788 404:0.0561505171359107 499:0.0498035809794791 515:0.0483084816312265 533:0.0837448404582014 593:0.0644020678758516 674:0.17707985735551 724:0.156478035940781 903:0.148893179413012 916:0.08102187579062 1031:0.0821637946833346 1049:0.105833341292681 1319:0.0705751037224113 1865:0.0793597538627835 2152:0.107766321696945 2862:0.113272144184756 3525:0.116253772587767 6830:0.127921842127161 9081:0.504698648962776 9083:0.672931531950368 9370:0.155516165449452
+1 6:0.0265926184200778 28:0.0981865277092288 29:0.096579205774744 31:0.0506784112391144 180:0.102462555623043 220:0.213330400837147 278:0.229576793963793 339:0.103420160456617 530:0.109303649771235 539:0.123530457416688 586:0.0977409325568541 795:0.157524804890753 808:0.138774702158278 873:0.153738022840978 903:0.148040865625142 2175:0.206977864620678 2399:0.193308054810703 3184:0.21045503251038 3742:0.476519841896107 6494:0.551646330659153 6497:0.275823165329576
+1 6:0.0213134229745659 11:0.0957754359576045 15:0.0365108559644626 26:0.0461251852126792 60:0.161771099445111 198:0.0927898304934413 199:0.0996269729059891 252:0.0769085558070952 274:0.230337061116096 415:0.0927171843084675 448:0.0965078572864138 593:0.102642854650222 643:0.086704805101736 663:0.0997358193729212 880:0.25070608843282 882:0.0800268887733212 895:0.110817936825787 1048:0.144747816490082 1083:0.114245083041271 1201:0.271818202606799 1518:0.136551766171336 1808:0.107150231998926 2185:0.133180068438923 2666:0.143900218754907 4704:0.187055835218285 5773:0.207323510355851 6153:0.211227978212439 6692:0.236003030698709 7257:0.431470711122286 7266:0.221066451448585 7664:0.221066451448585 7866:0.247858860630984 8301:0.236003030698709
+1 6:0.0121736908322925 26:0.0263455450131808 27:0.0177234340303647 29:0.0442124717979032 31:0.0231997955429224 64:0.158378312871325 75:0.0123360259588405 83:0.0157714012518084 94:0.0365404795040452 97:0.0379809906012589 132:0.036916860382792 134:0.0435937186711424 142:0.0173624843286018 147:0.470221535600255 174:0.0446180545127135 176:0.0946523655972616 198:0.0529992160412699 204:0.0730809590080904 218:0.0345269053382974 226:0.0471967476153634 308:0.0449739534064893 387:0.0859338301598634 394:0.0567052202045221 609:0.0431041859457411 643:0.0495236026724708 657:0.0632196294482557 730:0.0585110344952029 876:0.0587438075266644 882:0.0457093449212381 916:0.147512989034127 994:0.139375429386188 995:0.571591198016169 1011:0.0730516981823402 1046:0.136771327627292 1462:0.0747960154332057 1615:0.09033059433715 2160:0.0942526960597072 2161:0.0808187090924997 3147:0.092840486662994 4694:0.123222605929142 5477:0.465803416936289 6275:0.120648105419623 7028:0.120648105419623
+1 6:0.0286132015477338 26:0.0707690425883601 27:0.0238042230115063 28:0.0301848630348289 29:0.103917569774414 31:0.0311594866987361 63:0.0176706809033249 64:0.106358414326368 67:0.0231219938195583 68:0.0250936595202089 80:0.026614770086961 81:0.0248876634222715 88:0.0312125548461548 94:0.0245386340359169 97:0.0255060043364432 111:0.0255629077063368 134:0.0878256380256961 142:0.0137796655076923 176:0.0423756482591293 198:0.0355914422656452 204:0.220847706323252 220:0.131165630981554 226:0.0316948144397154 240:0.0735959078487235 242:0.028642090940667 256:0.0278173598507782 274:0.044175251580675 278:0.0352886706733029 286:0.0229038547523772 308:0.0604042091822055 317:0.0243629826221525 322:0.141701126971509 337:0.0625007632557421 341:0.0341532474060085 355:0.0246012913505399 377:0.0629214812379371 387:0.0577085697346715 389:0.0348362588942861 394:0.0761603933725504 404:0.0343263697210189 442:0.0347842141134368 455:0.0298454837331189 475:0.0331222762863643 478:0.0641106957605478 502:0.0282149174774419 505:0.0294030275074833 506:0.0457358143781597 530:0.0336025295376803 531:0.045994476303488 553:0.0522532992162103 643:0.0332574059950522 653:0.0417568392175644 657:0.0424549259334509 713:0.0408739945260296 717:0.0414234413740152 732:0.0447284632842355 772:0.0378731330177068 834:0.0823824508305359 851:0.0464258998823982 876:0.0394492030301238 1008:0.0531510286214724 1027:0.0427151610454444 1057:0.0556871537855921 1058:0.0458542791011422 1073:0.0547252248338436 1389:0.0521307228032665 1576:0.0453103844079926 1685:0.0585297429183346 1816:0.0449191018141874 1880:0.0571132792051612 1946:0.0569247767822812 2024:0.0398090936981866 2098:0.761710464760972 2123:0.0667437103460457 2306:0.0575000634011732 2467:0.0810208225562862 2638:0.148155815496137 2639:0.0740779077480685 2997:0.281712361852471 3850:0.0795231838435436 4556:0.0724729416120152 4690:0.165499439136395 4691:0.0827497195681976 5491:0.0749756371533306 6415:0.0827497195681976
+1 111:0.190638960765026 204:0.183000296560194 220:0.244546511156611 322:0.264188995002171 389:0.259796274697727 1685:0.436493746798198 2098:0.516414760274212 2997:0.52522733832919
+1 6:0.0203553635763268 15:0.0464928759387241 29:0.0246422373858642 80:0.0883571928623373 96:0.0420390484599865 142:0.00879740372374136 159:0.0408189922899287 174:0.0497365854604789 179:0.036987020454285 243:0.0639775938231504 245:0.0784526818933831 263:0.0971551466783461 329:0.0910967135469495 346:0.0565296825455742 381:0.130446703664431 431:0.0756579069002483 485:0.0469550694467196 693:0.080678270237723 737:0.159907553271036 844:0.0743509046590286 903:0.151090832618861 930:0.0594062586619425 987:0.0553939004404006 1043:0.379424739798408 1627:0.0905866231144352 1685:0.291465440035038 1700:0.0975166558262961 1783:0.294784321761192 1829:0.111549728088471 2195:0.105621031622436 2206:0.175147138953129 2935:0.108026584018086 2984:0.315195764830026 3348:0.344832099996842 3937:0.119098327205517 4234:0.432106336072343 7352:0.137358558937422 7612:0.144907158054468
+1 6:0.0263577719838668 27:0.0255825035249661 29:0.0638175262017241 63:0.0189907587523167 64:0.0762025715100746 73:0.286415783548295 75:0.0356123341600089 81:0.106987526863729 86:0.0682525519594587 88:0.0670885408852859 117:0.0907063256954125 131:0.233311998871084 142:0.0205048624631853 158:0.0630613723372082 173:0.0656700744555466 180:0.0677051211564126 185:0.05116255987174 204:0.0527435565881109 255:0.0817751605057623 312:0.079634081883859 322:0.0761434132609167 329:0.117959396556424 360:0.108184859561364 405:0.167111878113201 432:0.0825333039433123 465:0.0747097581457433 507:0.0469778813630549 565:0.280353939807753 592:0.432732365432816 688:0.0975336086980494 731:0.101249715195636 784:0.0862750971502378 873:0.101586881173349 960:0.101249715195636 1033:0.105246464844492 1036:0.0993201276881181 1046:0.0987097919383148 1064:0.0814048463971003 1069:0.13988156286514 1132:0.136046994338343 1133:0.409804091822254 1134:0.106881462440481 1229:0.0991660889887123 1264:0.14546959844899 1418:0.111531786187978 1752:0.118296562534138 2335:0.129831514592045 2397:0.161153296273062 2491:0.135348192528034 2840:0.170927833268123
+1 6:0.018205112637881 29:0.033058709974171 31:0.0346940707508648 60:0.138178700364862 63:0.0196751589460804 75:0.0184478762585941 94:0.0546443600693982 142:0.00944170169858651 176:0.047182540361797 180:0.140290236697735 199:0.0425487793699076 205:0.0720259022335022 351:0.0645978345270246 408:0.0535997671245784 475:0.0737590197180896 804:0.0857482267889774 909:0.0801428419273208 1135:0.123638061630639 1305:0.0827886090954776 1340:0.122210487042718 1627:0.121526176953295 1916:0.333526140307091 2026:0.54830617175176 2823:0.131317724414213 3139:0.149649159320647 3208:0.177087831598576 3952:0.151822334227114 7661:0.566479582451036 8681:0.201584783536573
+1 6:0.0187344385507106 11:0.252559012471595 28:0.138344366155937 63:0.0607416823366126 70:0.215541482580407 75:0.0569527820616613 80:0.0609908929157329 94:0.0562331816466147 118:0.061337831044233 142:0.00728716915152099 176:0.0485544045047663 237:0.0804974542952913 276:0.0727682848950387 317:0.0558306556607656 346:0.156084443292319 413:0.0809929287766603 427:0.0995054173908538 467:0.117578959705533 475:0.0759036129001418 1135:0.254465843109201 1805:0.135655124533633 1819:0.130025022317675 2687:0.358419053495075 5350:0.189630767746645 5419:0.509274856493778 7278:0.189630767746645 8727:0.207445996904515 8730:0.414891993809031
+1 4:0.0293920478809612 6:0.00679504836456993 15:0.0232804493587377 31:0.0258990859771333 63:0.0440624540848032 75:0.041313958521711 80:0.0884864664695259 83:0.0176063998600653 138:0.0569799799076572 142:0.0158584950463357 158:0.048771771213792 186:0.0385594536590651 200:0.0656441688009857 229:0.0355847601095478 245:0.0785674644125355 277:0.246145561359996 339:0.0528526361017319 346:0.0566123899714119 367:0.0579971980418558 386:0.054117725950239 472:0.0619087582705144 513:0.152545885351651 571:0.053628894123759 586:0.0499502796926943 731:0.0783066996794405 850:0.0622887150049262 1094:0.0699859558076557 1175:0.0719964291383546 1427:0.103145241381504 3611:0.502059556535147 3759:0.111712934221031 5730:0.114202543511391 7010:0.538741929765724 9085:0.512897279957162
+1 6:0.0214360902273041 15:0.0244806603383007 28:0.0527648997385333 29:0.0519011337749197 31:0.0272342993517296 60:0.108468104443344 63:0.015444690027245 75:0.0144812924386423 142:0.00370579359648405 144:0.0849613625260554 158:0.0512861735091048 159:0.0429861937092671 180:0.0550628136113991 245:0.0826179675609617 312:0.0647643270256599 405:0.0679538714327116 436:0.126228075252964 506:0.0399744344928655 656:0.0705345227518983 742:0.0733343636314983 850:0.0654999760291349 993:0.15704241565289 1033:0.0855942117525046 3768:0.278022319833085 5555:0.305201418092119 7298:0.49857077452673 8672:0.158240881533101 9613:0.664761032702307
+1 6:0.010616585163653 15:0.0181866897779463 27:0.0154564748988551 28:0.0195995297808163 29:0.0289180256795826 60:0.0805809867484122 63:0.0172107971574559 75:0.0161372346288345 88:0.0202668270363428 96:0.0328889584679372 142:0.00550607030929736 172:0.0416281329280127 176:0.0137576039201814 180:0.0204530902274042 185:0.0154557356289814 205:0.0210014939281344 229:0.0138994093920289 255:0.0247035188419628 312:0.0240567188142871 317:0.0158192867365812 345:0.0194775049434312 405:0.0504829511082936 429:0.0302893155802187 441:0.0187157200954193 469:0.0306884562211924 644:0.0252901880687014 737:0.0312756417598649 755:0.0277015489928505 774:0.0297739402621674 903:0.0295512166719089 1027:0.0277356590963011 1033:0.0317939825645795 1260:0.0354349086682717 1324:0.031675565422588 1535:0.0393883194864719 1946:0.14784878851672 2223:0.0336927199473774 2449:0.133261216853511 3767:0.0850249546244484 3950:0.0486829187042132 5153:0.336080297242015 5489:0.0507779616053937 5831:0.0486829187042132 8661:0.0550585143322869 8662:0.275292571661434 8846:0.850253337827646
+1 6:0.0274357440003366 15:0.0939973366708412 28:0.101299555988006 60:0.104120076731116 63:0.0296511554060577 75:0.0278015973011627 83:0.0355438735246505 88:0.104748460959339 98:0.177966955259755 138:0.460125685062654 142:0.0071144879980296 159:0.0825261178916478 229:0.0718386622359776 312:0.124336397947711 346:0.114289329168092 365:0.145346691649581 373:0.0979282653569696 405:0.13045977606156 409:0.0700576549788338 413:0.118610507261221 427:0.145721215546038 467:0.172189106685801 507:0.0733487523647972 514:0.145721215546038 575:0.286349177203462 1109:0.189803771208731 2837:0.206299398017131 2998:0.43425512330729 5925:0.292967183609216 8900:0.30379534724573
+1 6:0.036368002855525 27:0.026473725524399 29:0.0660407481488981 63:0.019652343024922 64:0.0788572533740626 73:0.197595799074511 75:0.0368529670645869 81:0.110714669420861 86:0.070630277648594 88:0.069425715723881 117:0.0938662772954811 131:0.241439928411782 142:0.0212191938226905 158:0.0652582520243938 173:0.0679578339393698 180:0.0700637759061316 185:0.0529449186178455 204:0.0545809927840557 255:0.0846239755945111 312:0.0824083078547565 322:0.0787960342189794 329:0.122068767992583 360:0.111953713800065 405:0.172933582857449 432:0.0854085306031417 465:0.0773124346182324 507:0.0486144577566297 565:0.290120677396219 592:0.44780753599085 688:0.100931403510076 731:0.104776968637841 784:0.089280677292481 873:0.10512588052371 960:0.104776968637841 1033:0.108912953729773 1036:0.102780159764172 1046:0.102148561644689 1064:0.0842407607906525 1069:0.144754640514433 1132:0.140786486475722 1133:0.42408050623702 1134:0.110604910013373 1229:0.102620754792558 1418:0.115417237875291 1752:0.122417679878452 2335:0.134354477010919 2397:0.166767420894584 2491:0.140063340388631 2840:0.176882475087102
+1 6:0.0217531120079784 15:0.0372640631328856 28:0.080317872470983 60:0.0825541924936856 63:0.0235096560423524 75:0.0220431878969815 83:0.0281818441653944 138:0.091205523393068 158:0.0780669794473391 229:0.0569590701131842 243:0.102556146385012 245:0.125759726925572 345:0.0798178209168387 355:0.0654607370268416 478:0.0852949817956804 571:0.0858415774360701 1047:0.245146839034698 1943:0.130535742596497 2837:0.163569608762573 4737:0.199500115550087 4983:0.440371812561765 8256:0.232286318156163 8920:0.722615091035034
+1 6:0.0262892985190239 15:0.0900695109162199 60:0.0997692564478804 159:0.0790776349583619 174:0.0963534700019904 229:0.068836771355855 245:0.151984460963778 312:0.119140807057663 364:0.243580107128011 373:0.0938361795979716 404:0.110384593876249 405:0.125008310238107 408:0.0774013490889455 413:0.113654181670627 427:0.139632026599965 467:0.164993915504225 561:0.116482589103515 608:0.286864027974124 872:0.150007718480224 1027:0.137360744601921 1727:0.457079511578548 2215:0.222678263195011 2645:0.445356526390022 2837:0.197678854952894 3509:0.241101966943966 5798:0.266101375186083
+1 6:0.0169460081566744 15:0.174175663023048 28:0.125137711010803 60:0.128621966259592 63:0.036628765843544 68:0.208062107793572 92:0.11186868619478 118:0.110964775632293 142:0.0131830401585274 158:0.121630750579166 165:0.329068629854131 304:0.128315055848842 345:0.124358615338222 408:0.0997853854525423 414:0.125209189515903 459:0.154796504599556 513:0.12681017503446 515:0.244864877375028 750:0.195937515283354 1884:0.254846471921623 2369:0.2209056445097 8262:0.659360235425943
+1 6:0.0142386545973374 15:0.0487829165452674 26:0.0616288224810524 27:0.0414595472997624 28:0.105145272427033 29:0.0517120176204042 64:0.246991004207407 94:0.0854773254301885 97:0.088847041359305 132:0.0863577744909288 134:0.10197661684086 142:0.0147691620449007 176:0.0738051896299339 178:0.344736862912169 192:0.114989421470123 199:0.0665568387339509 204:0.256431976290566 226:0.110405003161447 265:0.134511404972453 317:0.084865465249437 322:0.246799257983138 387:0.20102073278004 389:0.121347840059832 436:0.125768128302917 478:0.111660877232594 653:0.14545483377402 719:0.153257287598456 994:0.163017003283941 1431:0.332641028906769 2246:0.180337351285948 4679:0.529135662043911
+1 6:0.00881329548977049 15:0.0603902925556821 28:0.0650817357017105 29:0.0640163420701372 31:0.10077469006178 68:0.0541045660799768 81:0.0536604168523961 138:0.0739040214262186 159:0.05302040014616 199:0.0823933304396614 245:0.101903362948842 292:0.0869075240001238 386:0.070191628439434 404:0.0740112591932194 436:0.0778466582184143 455:0.0643499982745426 561:0.0780998759963046 582:0.0743358557021682 620:0.25056726984661 852:0.0874634582960948 1149:0.0845528144845089 3060:0.149302525608765 3719:0.146997727518153 3796:0.146997727518153 4147:0.159719751182327 5854:0.376444153717455 7010:0.34937880976032 7366:0.178417088462983 9140:0.665236660820752
+1 6:0.0351387121819696 26:0.202786711386842 27:0.0682103349864497 28:0.0864938804400611 29:0.0425389840753662 64:0.304767060295243 81:0.0713149031683402 94:0.0703147692277426 97:0.0730867417564384 134:0.167774605574137 142:0.030373266116126 144:0.0696356665962424 150:0.204293143854822 176:0.0607131171982803 178:0.18905671056014 192:0.0945918065827521 198:0.101986281947411 199:0.0547505286642134 204:0.140629538455485 208:0.087752384007177 226:0.090820603941634 256:0.0797098663099834 265:0.11065084630967 284:0.0711307303183589 317:0.0698114450164074 322:0.203020307237334 337:0.089547094154727 389:0.0998223251271572 436:0.10345851222319 478:0.0918537024276644 506:0.0655273481958306 586:0.0861013494611848 653:0.119653054402516 997:0.111392119766465 1511:0.141380087869349 1608:0.126928521382507 1931:0.152687677043311 2252:0.38786391765241 2566:0.1984236385242 3400:0.177795690596424 5190:0.485952939598111
+1 6:0.0207761981428427 15:0.0533858483539466 27:0.0453714796431767 29:0.0188637753149901 41:0.0239167012885514 63:0.0336807859050361 67:0.0587615103077383 68:0.03188611985763 75:0.0105266234844842 80:0.0338189712143284 81:0.0632487276891446 88:0.0396613042464304 96:0.0321811348615638 106:0.0363569503430796 134:0.0371995539139396 142:0.0121220342245059 144:0.0308797118016216 158:0.0745610574163491 171:0.0449099430409464 172:0.0407322281457308 174:0.038073643978427 179:0.0849413345665779 209:0.0326281085618615 229:0.0272005432204265 240:0.0467585833147534 252:0.0749700034684659 292:0.0512182968568961 308:0.038377340944194 343:0.0550331652220059 345:0.0381166350380111 388:0.054012333354926 413:0.0449099430409464 427:0.0551749726153452 467:0.0651966099133197 469:0.0600559819679405 480:0.0382030081838768 541:0.0535598659730525 571:0.0409932523919302 574:0.0388907638667606 626:0.0490214145209854 647:0.0469173763274138 713:0.0519379442232203 718:0.512351774108687 737:0.122410157358722 742:0.053307619999656 747:0.0572418110958894 755:0.0542107336650514 757:0.0493490502249312 764:0.0480381608574706 866:0.0580903667831032 903:0.0578304533400835 965:0.0518812780434151 997:0.0493964763101124 1080:0.105034708644208 1277:0.0613142863052759 1314:0.0605668440270075 1395:0.0554628920127372 1819:0.0720978539038497 2102:0.072572948745536 2767:0.081744521357726 2888:0.0952703670322762 8420:0.110927268018337 9093:0.522736309519975 9095:0.522736309519975
+1 6:0.032307610183187 15:0.0737925267947794 26:0.0932241623979932 27:0.0627146749657374 28:0.0795251276716551 29:0.039111647233359 63:0.0232776135717516 64:0.186808124511497 75:0.0218256196020512 80:0.0701193504398263 81:0.0655691102133419 94:0.0646495563800519 97:0.0671981929786794 132:0.0653154714739745 134:0.0771285601967577 142:0.0223408902771006 176:0.0558215028852045 192:0.0869706094455872 204:0.193948669140156 226:0.0835032500210274 265:0.101735783329216 284:0.0653997760438734 317:0.0641867846560523 322:0.0933315499943144 355:0.0648146335228307 387:0.0760195825736067 389:0.0917797086895624 506:0.120495709170306 586:0.0791642226451793 643:0.0876200582634048 644:0.102614984007024 994:0.123295586188172 1014:0.132063637725347 1527:0.280063708231854 1675:0.159138866725911 1785:0.16347081345193 3909:0.190937422104112 6161:0.670200065611635 7536:0.238494271175601 9597:0.250475250871109
+1 6:0.019457808129957 12:0.0655846464433867 15:0.0333321039452359 26:0.126328136719014 27:0.0566564706657404 31:0.0370813729827083 41:0.0447980503049298 63:0.0210290084612078 64:0.168762558879399 94:0.0584044435628604 97:0.0607068832193947 98:0.126216619781643 134:0.0696779822372633 142:0.0454112373136881 166:0.0725915310379762 179:0.0530341556857722 192:0.0785692947548156 198:0.0847112507600102 204:0.116808887125721 205:0.0769820112582206 226:0.0754368804094893 256:0.066208144312131 283:0.0729310502719104 317:0.0579863753416658 356:0.0927921599989733 370:0.115053096850631 373:0.208356230229301 582:0.0820585681660055 599:0.0912214516906869 1045:0.0505397110748285 1469:0.110151676689198 1665:0.104857604527969 2318:0.14912290845876 7373:0.558387364063557 8208:0.605459095151932 8907:0.215455851221259
+1 6:0.0157662037294025 13:0.0523926477498121 27:0.0229537020084428 29:0.0286298891334229 64:0.0683721636943122 68:0.0483941343222822 81:0.0959937250806477 132:0.0478111979237276 142:0.00204420312432474 144:0.0468666908182448 186:0.0447337656383077 187:0.0735064727469141 199:0.0368485895872734 205:0.0623767109270463 308:0.058245976646824 355:0.0474445824516279 478:0.0618200310646657 643:0.0641382486137212 772:0.0730398643126766 774:0.0884318263856644 819:0.0791746208048149 1231:0.124774359035343 1266:0.214789843478604 1267:0.105838149695143 1891:0.112464960960429 2135:0.11014526212148 2187:0.220290524242959 2206:0.101744884032746 2240:0.107074474470484 2333:0.121440111427638 2341:0.109781727597327 2387:0.107074474470484 2398:0.114608276873516 2950:0.142862232389284 2961:0.134653949657502 3955:0.130521464047775 4598:0.127053285392803 5791:0.159586171187565 5972:0.159586171187565 6142:0.133544486213716 6438:0.146475577998721 6479:0.159586171187565 7023:0.174578802625582 7192:0.654118996358996 7931:0.183348929803954 8341:0.174578802625582
+1 6:0.0114722934301538 31:0.0437262397500623 41:0.0528257216603645 80:0.149394478666101 96:0.142159376613144 174:0.0840946958000002 200:0.221658221121762 314:0.0915483582733461 365:0.121553831066919 473:0.101007032167824 539:0.10658428836593 731:0.132207658881958 1046:0.25778226586957 1755:0.35528899186819 2854:0.203403172263924 3248:0.187323463227543 6708:0.2540648699941 8267:0.464492128779027 9368:0.533656106166617
+1 6:0.0220962787007459 15:0.0504692308977482 17:0.0401350373492072 29:0.0267497921639311 52:0.0600492060154747 60:0.0559043519715389 68:0.0452161385970286 88:0.0562417452406455 94:0.0442160409746622 97:0.0459591406428482 142:0.00381992458732289 178:0.0594422718901839 180:0.0567586375455238 198:0.128264080817349 204:0.0442160409746622 226:0.171332179113906 240:0.0663060476847165 252:0.0531556376659406 255:0.068553849636439 275:0.14858857167348 276:0.114435120772457 308:0.0544210200195577 312:0.0667589380642947 319:0.0668162696982813 322:0.0638326366002827 325:0.330693983136433 389:0.0627712792985602 426:0.0663060476847165 430:0.0573249621665213 506:0.0412055666911676 507:0.0393825532751403 681:0.0805959925240612 856:0.0552784203399241 886:0.0634402089801118 1017:0.08679191236703 1033:0.0882303413541779 1045:0.0382619163784524 1113:0.0894244921577228 1159:0.224687910213386 1269:0.0752414380977266 1416:0.0889040499867847 1418:0.0934994594046114 1685:0.10546444872708 2102:0.102912129902441 2198:0.112342224790566 2202:0.103257597929039 3719:0.122848589360905 3929:0.12805915772067 4332:0.563648404425359 4576:0.429877272318635 5563:0.15279090954159 5564:0.15279090954159
+1 6:0.028061554445031 15:0.0480707098856943 81:0.0854274494026856 229:0.0734773050648213 355:0.0844444709987628 457:0.0967492280312691 574:0.10505630338647 582:0.118342773394216 686:0.663706563407362 781:0.152046477754674 1010:0.312436838313967 1277:0.165629358324775 1380:0.144510723391176 1739:0.226136408400028 1916:0.17136691454454 2082:0.24394644061324 8901:0.310724931562947 8904:0.310724931562947
+1 4:0.0220051150353031 6:0.0203491531503206 15:0.0174295091069312 26:0.0220191861978198 27:0.0148129633979532 28:0.0375670544752518 29:0.0554281178258125 42:0.0304366479923187 58:0.0341259265331141 63:0.0219923287822784 72:0.0316593935653549 75:0.0206205073679781 81:0.0309743399023346 100:0.0314364971399401 142:0.00659603972541469 144:0.0604899876646039 154:0.0367751608133072 161:0.0992931245759681 171:0.0439868402596661 185:0.0296245098133599 204:0.0916198493773405 255:0.0473500358653897 312:0.0461102932722755 423:0.0385438886266708 478:0.0398949963315023 571:0.0401506553469459 582:0.0429087993815509 586:0.0373965657355671 628:0.0552808356455619 641:0.0402542446315277 727:0.0544660446244733 886:0.0438180523259692 1080:0.0514378847757716 1223:0.0625133163825149 1374:0.067919238836509 1380:0.0523967916301834 1608:0.0551291103252579 1726:0.0686949157181985 1951:0.0634398188911801 1993:0.298221937050009 2252:0.421154214879111 2333:0.235110823294556 2449:0.0638565242248083 2548:0.0708466421697524 3537:0.0861817229113904 6486:0.325941630407885 8368:0.112662846820964 8680:0.675977080925782
+1 6:0.0191849102315206 15:0.0328646175224915 26:0.0830375804743803 27:0.0837927861527902 28:0.141670871990856 29:0.0348379268966812 31:0.0365613026494759 64:0.0831978227177154 94:0.0575853148202393 97:0.0598554625074341 132:0.0581784655311529 142:0.019899706541037 192:0.0774673517570731 204:0.115170629640479 205:0.0759023300860419 226:0.0743788698673535 265:0.0906191386226473 317:0.114346220103628 322:0.0831332338537414 355:0.0577323540231173 387:0.135425881943254 389:0.0817509618771193 437:0.0862817041114095 586:0.0705139669748574 657:0.0996298437789698 827:0.0819352329835658 979:0.441094329814049 984:0.110001547995613 1387:0.155596544209022 1550:0.152722424428843 1836:0.10229582651126 1911:0.129908011800893 2163:0.121216067490679 2229:0.136359622361011 2540:0.154603220706515 2976:0.129529300966979 4517:0.687558498068987
+1 6:0.014057065422103 15:0.0481607756315718 26:0.0608428544692224 31:0.0535780065748323 60:0.106694590119059 63:0.0303843213713308 80:0.0915269459021408 102:0.133943569514663 142:0.00364520179339191 180:0.216650022943436 457:0.0969304983184447 480:0.103391810507331 574:0.105253137890186 657:0.146000498839329 1378:0.17238296347455 7387:0.557253616606605 8116:0.291604551212 9603:0.653891817094876
+1 6:0.0429686944511492 26:0.0929901777049796 27:0.0312786332414368 29:0.039013480336111 31:0.0409434139467643 64:0.0931696260294424 75:0.0217708391591805 94:0.0644872915099373 97:0.0670295312481716 142:0.0139280103430014 147:0.276618457594379 198:0.18706792800971 204:0.0644872915099373 226:0.0832936639886167 299:0.0889276608239964 308:0.0793708370290418 386:0.0855537704069757 387:0.0758287799079247 398:0.250661435697172 480:0.0790102873721991 493:0.0958992987660982 858:0.107770867831321 916:0.260333560327056 953:0.117380842291584 969:0.120140711197358 995:0.336251455110237 1046:0.120688242116881 2463:0.176605032048533 4694:0.217465457952926 5477:0.61654364848243 6275:0.212921933426068
+1 63:0.0590920256369987 75:0.0554060264422003 81:0.166452266671528 142:0.00708926012184665 144:0.162532851215777 204:0.164117908017284 2252:0.452646118728827 6486:0.583856652044603 8680:0.605436186280217
+1 6:0.0198798532692409 15:0.0454067817684072 26:0.114727314036025 27:0.0192951216304419 29:0.072199751424708 33:0.0366695463739481 67:0.149936986515729 81:0.0806933278348313 88:0.151800806570065 98:0.0859695283470131 134:0.1898381775545 142:0.0137470279632165 172:0.103933127488688 176:0.0343486652319421 179:0.072245974555104 186:0.112811011748085 192:0.0535156560547611 198:0.0576991071866974 264:0.054550696621295 301:0.0600625069543371 308:0.146886528822798 320:0.0628996812737666 357:0.0613427234476911 477:0.0708530886354725 582:0.0558922938537508 647:0.119715269143285 671:0.0404689859752725 696:0.146270102196176 840:0.083737951911459 852:0.131525581198308 1080:0.0670021397135371 1140:0.134612903896574 1149:0.0635743102529726 1232:0.0750272643015303 1307:0.108943877042883 1314:0.0772717551728907 1418:0.0841207498733385 1514:0.291344229729263 2379:0.199311854494777 2631:0.0959660098219464 3089:0.429954087978188 3448:0.106141073681882 3584:0.474976144990375 3703:0.118744036247594 3997:0.117489591879879 4282:0.115213846627648 5239:0.116316137541817 6001:0.131346998813306 6003:0.131346998813306 7381:0.134149802174307 8206:0.141522062673241
+1 6:0.0253491400192059 29:0.0920631346433809 81:0.154340158214276 171:0.219179356410151 183:0.223005759331502 220:0.203355010617955 229:0.132750058302767 402:0.193213402105267 408:0.298533281032402 478:0.198790355667852 506:0.141814695646902 539:0.235508276185991 1150:0.276605189991181 1314:0.295591599426659 1811:0.408556374965016 1827:0.341309135988892 1970:0.348528558077053
+1 6:0.0109826369790403 15:0.0376275061335976 31:0.0418599315435203 63:0.0474778997543997 75:0.0445163580171021 80:0.0715090376589489 142:0.00569591544323634 174:0.0805053951467701 179:0.0598684985992846 180:0.084633189148683 199:0.0513369850564532 205:0.0869024381285534 499:0.081803691207515 655:0.0831604507860491 781:0.119014880119516 850:0.100675419524155 1601:0.189227446140603 1754:0.31113706889823 4615:0.427328609613911 4717:0.222333418381424 6248:0.213664304806955 7125:0.486441922578137 7587:0.2345518477146 7588:0.4691036954292
+1 6:0.0286023269574101 26:0.123798756304748 27:0.0832831163413264 75:0.0579674730844806 142:0.0148339998982142 147:0.368264927181528 204:0.171705156037452 387:0.201903230564636 480:0.210374376162423 916:0.346584680105958 995:0.44765493491556 1046:0.321346934556424 5477:0.547207162258019
+1 6:0.00959295615707572 15:0.0657326682705745 28:0.0708391359324724 29:0.034839746581059 33:0.0530842978417875 49:0.0866522991395231 63:0.0207351573052628 67:0.0542636904240227 75:0.0194417548147014 84:0.0563006098414655 94:0.057588322665628 97:0.119717177858235 103:0.0913188647330915 107:0.183525484859542 142:0.00497518648987992 150:0.0836588075016055 174:0.0703186973697559 176:0.0497244977356929 185:0.0558621032954275 192:0.0774713980980107 198:0.16705505761478 226:0.0743827548880649 320:0.0910560872730708 417:0.112248759923199 453:0.0930469641306938 455:0.0700426659780201 478:0.0752288702861855 499:0.0714527143834656 515:0.0693077098555861 580:0.0868001721330971 593:0.0923970218835041 626:0.181076548086215 658:0.0887222903447365 738:0.116241299035609 741:0.116241299035609 882:0.0720385867915973 994:0.109828843355267 1031:0.235759197981728 1064:0.088882298883857 1115:0.134943623984696 1122:0.117164949020863 1782:0.11812219355264 2206:0.123813471966326 2227:0.127027376564564 2383:0.152730401557066 2625:0.15183806784395 5053:0.171898602803049 6516:0.198999548695418 7313:0.669352600756763
+1 6:0.012770119493925 15:0.0875031653147521 28:0.188601764855731 29:0.0463785844210311 31:0.0486728577880196 57:0.0953387427709699 63:0.0276025900856671 68:0.313581576748543 75:0.0258808158913769 142:0.00993443391276194 245:0.147653976109157 264:0.105124354525588 351:0.0906253185429247 381:0.122755360311084 408:0.0751959567229666 490:0.396465090535363 513:0.191122425206408 571:0.100786241619459 608:0.278690427063873 655:0.096695255951118 850:0.117060878901675 2753:0.181531073190596 3733:0.208514803425798 4031:0.253118096089205 7213:0.50623619217841 9925:0.282806464878722
+1 6:0.0123199708731818 9:0.0471226849195061 12:0.0415257940932443 27:0.0538092006857051 29:0.0223718661942955 31:0.0234785661382491 64:0.160281399322423 94:0.0369795528228605 108:0.0570230994103856 142:0.01277899151009 159:0.037058202930068 179:0.0335792833894054 229:0.0322590204335167 286:0.0690319033588383 317:0.0734296946993575 377:0.14223335959075 398:0.0479130465604439 400:0.0542787932356674 455:0.0449769388392713 471:0.0642134914655637 490:0.0637482728065924 504:0.0654358464312036 586:0.0452819434023431 728:0.169921203903223 854:0.148139517136912 908:0.13104113559854 1036:0.0696353098995208 1140:0.0625668748418109 1223:0.151389540651513 1542:0.467526609579866 1836:0.0656912952866549 1864:0.108125402676897 2528:0.0708712134651168 2892:0.383354505674802 2931:0.0935053219159733 3487:0.127784835224934 3513:0.100582312720533 9108:0.619949430917342
+1 3:0.0286457798289711 6:0.0168575269939603 12:0.113640235367166 20:0.0316974642365917 26:0.0486426827983501 27:0.0163616918762772 28:0.0414947741049791 29:0.0204077505354363 31:0.0214172888626209 33:0.0310946896580748 39:0.0564366806519047 42:0.0336188676646458 60:0.0426501283407628 75:0.04555285513417 80:0.0365870095663551 86:0.0436519914417463 110:0.162691058077785 134:0.0402442885174702 142:0.013114206796089 165:0.218233629983105 171:0.0485857628622189 172:0.044066107492809 179:0.0306312237261835 185:0.0327218186213112 205:0.0444629160066884 227:0.039941541178722 255:0.0523005880961828 259:0.0683577177671617 286:0.0314856581587445 308:0.0415184758684086 312:0.0509312276401086 346:0.0468157026966741 351:0.0398774330028881 354:0.0837530293530452 367:0.0479608718540016 405:0.0534395129836656 455:0.0410282333940237 505:0.0404199940552231 768:0.0702244965984037 784:0.331071559464181 940:0.0767843253934068 1033:0.0673120293786926 1069:0.0894634502263615 1086:0.0708475306210509 1277:0.0663327800656137 1317:0.0728836266325302 1548:0.0618381133468513 1558:0.0676958996820663 1718:0.0798782649869706 2042:0.36087314214526 2050:0.0723488449050017 2359:0.100691427109917 2555:0.0758771229127119 2657:0.0905652041096091 3645:0.0951922149377424 8199:0.720039114809685
+1 15:0.124987832004244 26:0.157900622930845 28:0.269395119784517 31:0.139046740777727 63:0.0788540135685293 142:0.00946010240489908 199:0.17052680666793 1421:0.511438081125673 1620:0.441196414189594 3484:0.613129416142548
+1 6:0.0138295183511826 26:0.0299289840074801 27:0.0402682406750006 29:0.100452229073917 64:0.0599734792692789 81:0.0421010347635379 132:0.0419381767752452 142:0.00358619552386884 154:0.0499856438819233 176:0.0358422285414012 187:0.0644771012243335 204:0.041510601741398 240:0.0622489910406873 299:0.0572429175706689 308:0.0510911705027378 337:0.15859344217643 373:0.0493626395856832 377:0.0532203329823461 510:0.062513609544158 755:0.0721699254981516 784:0.271603314578996 827:0.0590633364701874 881:0.0787856819966918 1055:0.0754525902676996 1379:0.0729851131855364 1822:0.0982953726154836 1980:0.0858604438289926 2041:0.108825238424553 2135:0.0966152632522493 2333:0.213045356812958 2401:0.0936447036491392 2779:0.103989208773811 4166:0.117140178732285 7882:0.643307021249449 8688:0.153133931038544 9110:0.521933175812511
+1 2:0.0505873925907649 6:0.0371758588365647 15:0.0424559499102748 26:0.0536357886240119 29:0.0450051572421641 37:0.117264450668324 60:0.188112426113942 80:0.0806852335682557 83:0.064216666872768 102:0.118077447955179 134:0.0887506209801404 142:0.0128536555089564 158:0.0889438104815176 180:0.19098700968837 182:0.126008639214796 255:0.230676691881273 278:0.106980996878257 389:0.105609467087102 465:0.105373072664869 499:0.18460183909349 513:0.0927313209997161 586:0.09109302573841 653:0.126589871501159 757:0.117736864866048 823:0.282383938266468 933:0.144007474257688 1045:0.0643737174646416 1122:0.151350898654953 1395:0.132323256318414 1509:0.156592216117615 1776:0.143521733699969 2824:0.180875936611977 4020:0.201006419217543 5651:0.257062891066665 6114:0.529300106288036 7261:0.264650053144018
+1 6:0.0125020038374525 11:0.056179848225437 31:0.0476509444672841 60:0.189783021569568 80:0.0814017858307502 252:0.0902258694889729 255:0.116362646783321 312:0.113315981098106 391:0.25876072580459 409:0.063848173490579 480:0.0919541008674084 505:0.0899297247400384 507:0.0668475681596822 704:0.172431864095308 764:0.115627174376203 812:0.140033789402449 886:0.107682802184882 1033:0.149761335082062 1829:0.205537246740818 2216:0.17032023012664 2726:0.417044034359636 3052:0.224026562480564 6714:0.276868788177913 7593:0.534000733303988 7594:0.267000366651994
+1 6:0.035555393284846 11:0.159774114958631 15:0.0609079942030884 26:0.153893544226119 28:0.13127931040214 29:0.0645651283791302 31:0.0677590605856781 52:0.144938871737544 60:0.269869136916991 86:0.138104218127673 140:0.125625665896048 142:0.0138300469701399 169:0.129585688990006 179:0.29072908680309 180:0.136996530563425 276:0.138104218127673 312:0.16113394003814 373:0.126910281289514 405:0.169069541021552 505:0.127878969351747 507:0.0950564248321879 742:0.182456230070162 764:0.164420428629428 812:0.199126336869928 1225:0.15857667464865 2198:0.271156879333826 4447:0.597569896610181
+1 6:0.0299411728801793 15:0.0102581162278798 26:0.0259187301116516 28:0.022110043879146 29:0.02174810055221 41:0.0137868166847612 59:0.0185918763689051 60:0.227256619515449 63:0.0194153372352274 67:0.101619470129892 68:0.0183807994238697 88:0.160039709142531 97:0.0186828369706282 142:0.00388209109802803 153:0.0259687469285405 154:0.0216439758347443 158:0.0214904141256561 178:0.0724915822633559 186:0.0169905379068542 194:0.0237222405386194 204:0.0359485000572907 211:0.0297776593052283 232:0.0531520290205017 252:0.129649697364882 255:0.0836034167666179 256:0.0203758766833904 274:0.0323578327883765 275:0.0402684648645785 277:0.0271149166678333 278:0.0516970414027181 306:0.0234950745748816 337:0.0228905232478622 342:0.0279701784056352 345:0.0439447776320692 355:0.036040291494215 373:0.170993700648213 377:0.0691338259265787 382:0.0262982271641702 389:0.051034269186461 394:0.0278932794456799 398:0.023288574706051 414:0.0221226731087476 415:0.0260498864744162 416:0.0291299635814391 426:0.0269540522675771 427:0.0318056919245221 448:0.0542298333356665 454:0.0298745010423785 455:0.0218614526815042 475:0.0485233264914076 493:0.0267295762193391 506:0.0670018519933511 509:0.0277918545495612 515:0.21632060949062 530:0.07384032867777 538:0.0524708693260473 541:0.0926239841676239 553:0.0382749041189117 580:0.054183484575804 594:0.0286686318779383 609:0.042405870201249 655:0.0226714352712433 657:0.0310977152419541 663:0.0840655416191343 695:0.0591120764283459 698:0.0336388858724549 713:0.0299397022753995 742:0.0307292538368566 749:0.0348540959273136 757:0.0284473306251429 761:0.0304459391325388 772:0.0277416078348947 792:0.0328558829859066 824:0.100458825194162 856:0.0224712146650063 862:0.0576200697819534 869:0.0400855594731796 881:0.0341145029818637 882:0.0674532358697402 912:0.0284746694598166 965:0.0299070369749564 987:0.0244440490100954 1009:0.0266854077675825 1014:0.0367171095531332 1031:0.183960678785567 1074:0.0391304488652135 1159:0.0304459391325388 1162:0.0694717759128692 1198:0.0356669184917488 1227:0.0327170293327763 1228:0.07373570691318 1301:0.0393333063876143 1304:0.038550303501066 1309:0.0353447080869992 1322:0.0336388858724549 1377:0.0285572361069495 1407:0.0364960564258679 1424:0.0278424104767251 1426:0.0355365139721677 1466:0.0365690819043674 1476:0.038550303501066 1528:0.72044363044438 1538:0.0380963033406446 1546:0.0450277269027737 1558:0.0721420634136746 1579:0.0375826790868144 1685:0.0428723225500914 1707:0.0342240421011908 1738:0.040430308471594 1744:0.0823330006710942 1751:0.0407901606935741 1776:0.0346774157363698 1824:0.0424115300682926 1838:0.0458932964364549 1858:0.038550303501066 1873:0.0396473055850456 2007:0.040430308471594 2021:0.0437028587162347 2034:0.0403137772661536 2067:0.0373374276733115 2160:0.0463628706531764 2175:0.0466081220666793 2185:0.0374183673648518 2188:0.0471217463205095 2234:0.0461247289867534 2388:0.0482566944869088 2421:0.0479579229346862 2427:0.0482566944869088 2949:0.0892538009399613 3023:0.0556335650465442 3046:0.0458932964364549 3134:0.0542611635804102 3147:0.0456682053084998 3401:0.0452357206005453 3610:0.0431945329548409 3882:0.0525553413658659 4071:0.0456682053084998 4162:0.0536523434498456 4622:0.0564165679330925 4683:0.0549187394163198 4924:0.0507221474179331 5792:0.0606131599314792 5832:0.0606131599314792 6484:0.0639441823961847 7057:0.0606131599314792
+1 6:0.0146948367806294 15:0.0125864594757749 16:0.0404285715861352 26:0.0159008261832336 27:0.0106969601025844 47:0.0347759113499792 62:0.0420599474365507 63:0.0317628630040978 64:0.0318630217860463 65:0.0262824285460788 67:0.124684621847374 75:0.0372269779321786 81:0.0223676565747097 92:0.0242519074300142 132:0.0445622650724284 140:0.0259601777009046 142:0.00857381668934859 144:0.021840970212061 153:0.0318630217860463 158:0.0263682162008509 179:0.0200261061368229 183:0.129275913582626 208:0.0275232118657066 232:0.0978243730808306 245:0.0424771099433958 274:0.0794045499324545 283:0.0275393269588163 299:0.0304123147743635 303:0.0328237473112817 308:0.0271439826176173 327:0.0617910880147959 345:0.0539191748807372 400:0.0323709372147918 414:0.0271439826176173 433:0.0297082923515191 437:0.033044083703571 438:0.0409639180194821 441:0.0259051708053648 480:0.0270206784673216 485:0.0254231671773648 506:0.0205524112854218 535:0.0696748572996509 543:0.0406630004914626 574:0.0275071224950231 586:0.0810161128938542 610:0.0473002861359933 643:0.0597798373629021 673:0.037145099628329 688:0.0407822916895502 731:0.0423361287838299 754:0.0447797748656161 887:0.0464232124484666 896:0.046528763031684 963:0.0311692256674745 1045:0.038168369233807 1059:0.0673521696361364 1144:0.0502001181447511 1424:0.0341619614545566 1584:0.0986460889144487 1634:0.0638730319635205 1827:0.0494640256167903 1975:0.0522228764659821 1986:0.056886116290126 2659:0.0571870338181455 2705:0.10767825709946 2886:0.40956619893706 2945:0.142942086266573 3402:0.0728170380477645 3626:0.0762086743548064 3676:0.510984255708164 5304:0.0762086743548064 6455:0.0743708751420443 7843:0.427224372400377 7888:0.427224372400377
+1 6:0.0158058686495582 11:0.0142052636257119 26:0.0136824313913003 27:0.0644320582520363 29:0.0229615334096128 60:0.0239936377387652 64:0.19192369197567 72:0.0196727288854587 80:0.102913577008026 85:0.0193725714374378 96:0.0391718089801391 98:0.0205055297116272 111:0.0197692503988529 125:0.0338893058813323 142:0.0122960758203971 162:0.0171209306828168 172:0.0495804472752044 174:0.0463443416621725 199:0.0147765175925453 204:0.0379542426295739 215:0.0201387827211828 220:0.0507189211882007 242:0.0886022316799898 243:0.0298070267531713 265:0.0298633495788246 274:0.0683264689575359 276:0.0491145096146365 294:0.0302091901276549 295:0.0268405853587202 308:0.0700710156011533 312:0.0286523270416376 337:0.048335394905639 347:0.0259686958285668 355:0.0190255777797687 365:0.0334939809444633 372:0.0312051140871501 383:0.0757353148140414 389:0.0538817205735708 398:0.0491759162959097 422:0.0288260547168489 423:0.0239506631603197 457:0.0435957485734846 473:0.0278323404617612 478:0.0495804472752044 593:0.0304476569597126 609:0.0223859505121411 628:0.0687015618269343 633:0.0328726878938902 653:0.0322929386531423 655:0.0239363854868525 685:0.0668170504636273 710:0.036429627667322 713:0.0316101846421061 771:0.0335370266143145 827:0.0810047593455878 882:0.0237389272270975 966:0.0315756967848489 987:0.025807902012596 1124:0.0351443566242873 1156:0.0443172188051789 1201:0.0403156528361402 1250:0.426861130471057 1321:0.0366739729710874 1377:0.0301505839271692 1441:0.0412085910591411 1581:0.0450991609934145 1608:0.171282504019938 1637:0.102553038212389 1691:0.0443172188051789 1844:0.0411047133544207 1865:0.0375192698265406 2479:0.0535521840055972 2723:0.0412085910591411 2753:0.0449370313258051 2775:0.0467133534838482 2996:0.113291740000022 4024:0.0527254935598664 4535:0.0579829243889305 5231:0.0587376336358847 5234:0.272330239476885 6622:0.061499800882484 7596:0.337559704792511 7597:0.0675119409585023 7611:0.607607468626521 7701:0.0604781879713952 7891:0.147048162069041
+1 6:0.0102992746473332 27:0.074972544188656 29:0.0374049576383342 64:0.0893282497430766 142:0.0133537595820189 162:0.0278904581630211 178:0.0415598679861279 186:0.0292223382512277 187:0.144054338794062 204:0.185485456797923 232:0.045708575540436 274:0.0556528310052591 286:0.0288547164372158 308:0.0380491918589797 322:0.0892589016521865 337:0.0393698314181549 341:0.0860538350391143 387:0.0363511826654073 399:0.0485564510495759 441:0.0726253643762084 459:0.0470403324658518 561:0.0456340124838793 609:0.0364673175638143 730:0.0495019318682827 757:0.0978541730026192 814:0.0571667489920009 876:0.0496988642049537 895:0.107100991575273 998:0.0569995320530918 1009:0.0458967230132043 1014:0.0631504311900682 1149:0.0494044855066835 1169:0.0580338717333389 1482:0.0610090816823256 1838:0.0789327235713313 1891:0.0734677504498393 1990:0.0685619839589754 1993:0.226407675015903 2135:0.359762034400217 2187:0.0719524068800434 2333:0.158661537331713 4166:0.174475906154511 4492:0.0797403528924463 5035:0.0903908970228962 5067:0.10997877391661 5448:0.106825829970969 5653:0.098520600465045 5972:0.104249687190827 6491:0.320477489912908 7192:0.106825829970969 7244:0.106825829970969 7613:0.10997877391661 7893:0.598863561817334 7895:0.119772712363467 8248:0.10997877391661
+1 6:0.00715768727805894 11:0.0321642666371499 26:0.0929413314197965 27:0.0416829374198156 64:0.0620804569885751 75:0.0145062688520354 80:0.0466044111350045 142:0.0167048330125464 232:0.0635321808276446 265:0.135236172145815 286:0.0401063266738179 303:0.063952290741434 437:0.128763168218073 729:0.0770415301680554 1048:0.0972213244070868 1135:0.0972213244070868 1241:0.267774711554092 1377:0.0682684564152629 1602:0.0987212430914167 1789:0.1086499083477 2165:0.107157591517379 2927:0.113958245435273 4997:0.283746785155157 6760:0.593926007672222 7256:0.144900817833928 7258:0.579603271335711
+1 6:0.00762283330150372 26:0.148471758134364 27:0.0221958623731905 28:0.0281453868647936 29:0.0138423222260928 30:0.0458196462876438 31:0.0290541589217216 33:0.021091139516824 67:0.107798644039884 75:0.0926937975830505 82:0.0285883730663388 83:0.029626864439851 85:0.0233574449407417 88:0.0291036414566456 106:0.0266788918656726 114:0.0267630035745174 142:0.0256972520388083 158:0.0273566177777562 162:0.0206426491728059 179:0.0207767763654852 199:0.0356319962167527 218:0.0432396135956537 220:0.0305758172820009 232:0.135321705158781 240:0.034311656403376 242:0.0267068540020043 278:0.0329043496701769 303:0.102162395331021 308:0.0281614634748123 337:0.0291389124268675 345:0.05594031264264 377:0.02933505826255 387:0.0269047107936539 433:0.030821895288621 437:0.102848182160946 455:0.0278289381292301 457:0.0525632490371274 475:0.0308843302965011 484:0.0421258996518224 518:0.0332388230147883 532:0.0440693466776001 538:0.0333968789113655 541:0.0786049357358695 579:0.0895082078247361 609:0.0269906660673365 657:0.0395864083707912 686:0.0450734518634633 710:0.0439230808981203 764:0.0352506160953677 799:0.0384510393198809 800:0.0336114060802074 930:0.0333703698154026 944:0.0417063314665347 1010:0.0424362438720493 1027:0.0398290603879432 1057:0.0519245850109133 1225:0.0339977551835617 1227:0.0416477440149411 1228:0.0938632237983892 1241:0.285176190190951 1710:0.106157173075833 1769:0.0584207154795826 2908:0.0610489197401283 2976:0.0514665045088055 3050:0.0593306659081528 4841:0.540609768955032 6152:0.0690727458096515 7662:0.0790653246997671 7899:0.620534179517629 8280:0.084407453641433 8694:0.084407453641433 8695:0.168814907282866
+1 75:0.0576520785807403 111:0.177899122440023 142:0.00737664488628108 232:0.252495132886444 303:0.25416477033832 308:0.210184536294636 1010:0.316725096631087 4841:0.504358614502549 7899:0.661626982832354
+1 6:0.023756858819257 15:0.0271310479332843 26:0.0514131171899205 28:0.0292387338457811 29:0.014380046624356 59:0.0245862436011176 60:0.120211354604708 63:0.0256752035884618 67:0.111986233380253 88:0.211639492257553 97:0.0247065315950615 142:0.00513374957556628 154:0.0286223967829163 174:0.0290239237070344 178:0.0639094790718458 186:0.0224686037924929 204:0.0475389660497936 211:0.039378531301655 215:0.0504490060523822 232:0.070289233182368 252:0.114300783093825 255:0.0737058103487119 274:0.0855812015477712 275:0.0532517679742875 277:0.0358572708419217 278:0.034182565228061 306:0.0310703242352984 309:0.0291390626703418 341:0.0330827312259513 342:0.0739765697880624 345:0.0581133924527397 373:0.169593940989661 377:0.0609492393911332 389:0.0337443340662993 394:0.036886592277072 398:0.0307972449625059 416:0.0385220064125848 426:0.0356445407627747 448:0.0717145416838433 454:0.0395065966186293 455:0.0289099922157788 475:0.0641681507440322 493:0.035347689455511 506:0.0443022485237075 509:0.0367524661053122 515:0.114426561264657 530:0.0976478259878381 538:0.0346942274575964 541:0.0408292272901872 553:0.0506154461123066 575:0.0413253903116898 580:0.0358266246102563 594:0.0379119327751461 609:0.028039156301325 655:0.029981128279124 657:0.0411241978596428 663:0.111169838035538 695:0.0390854554429458 742:0.0406369376346077 749:0.0460917056440236 757:0.0376192798765092 772:0.0366860189139458 776:0.0493757097992799 824:0.132848621575209 862:0.0380989267533498 869:0.0530098904779197 873:0.0457812821850248 882:0.118935220657325 965:0.039549622741882 987:0.032325265703951 997:0.0376554332606927 1009:0.0352892802722299 1031:0.0486546056127338 1074:0.0517468344201276 1159:0.0402622769926197 1162:0.0918707704432011 1228:0.0975094722176672 1304:0.0509796393848354 1322:0.0444846892330683 1377:0.0755292418654826 1407:0.0482630647903434 1424:0.0368193222050447 1426:0.0469941479772055 1466:0.0483596350432781 1476:0.0509796393848354 1528:0.714546056871002 1538:0.0503792611165216 1546:0.0595455047392502 1579:0.0497000348365303 1685:0.0566951578768653 1738:0.0534657929746915 1744:0.0544393468078368 1751:0.0539416682556181 1824:0.0560857973162488 1858:0.0509796393848354 1873:0.0524303353733676 1920:0.0595455047392502 2007:0.0534657929746915 2034:0.0533116899381157 2067:0.0493757097992799 2160:0.0613111237030688 2175:0.0616354487403192 2188:0.0623146750203106 2388:0.0638155516150155 2421:0.06342045054946 2427:0.127631103230031 2908:0.06342045054946 2949:0.118030888797524 3023:0.0735708626441082 3046:0.0606901500126226 3134:0.0717559733830471 3147:0.0603924853124845 3610:0.0571212549175726 4071:0.0603924853124845 4162:0.0709508583025509 4622:0.074606320245432 5035:0.0695001623140187 5792:0.0801559716695025 5832:0.0801559716695025
+1 6:0.0150594835067577 26:0.0651815962912578 27:0.0438496042228012 31:0.0286993437858645 33:0.0208335703490775 42:0.022524780026735 63:0.0244132846801069 67:0.106482185675584 75:0.0228904506478798 88:0.057496444060568 114:0.026436168480966 142:0.0117154302063802 162:0.0203905570578549 172:0.0590489476213856 179:0.020523046262726 185:0.0219237534670108 199:0.0175984256153544 205:0.0297903371519876 206:0.0718170306607935 218:0.0427115628813417 232:0.10025184729589 274:0.040687471658263 286:0.0210955208574294 315:0.053329218273762 437:0.0338640599387817 438:0.0419804218989184 441:0.0265479976611501 457:0.0259606681212636 475:0.0305071647457952 478:0.0295244738106928 518:0.0328329039332724 535:0.0714038121010588 541:0.0388224983560431 613:0.0348201285988057 663:0.0352353052034821 730:0.0361905839027252 800:0.0332009369405972 882:0.0565448174616123 960:0.0867733670918324 997:0.107414082475963 1083:0.0403612302407099 1235:0.0441301784076205 1431:0.0439771367990516 1432:0.0447660788068068 1440:0.0466494823005976 1446:0.0392942753002823 1710:0.0524303803398197 1738:0.0508379853753285 1816:0.0413725924942758 1828:0.0512904717077333 1884:0.0566188834145506 1981:0.0541092203245461 2103:0.241213513025525 2122:0.251178444619259 2146:0.115996557350882 2175:0.0586061080800839 2459:0.0543137838336106 2694:0.0551751258293417 2753:0.0535187670714107 2976:0.152513956125986 3578:0.067463671556494 5942:0.0746239648566067 8696:0.500259918727263 9113:0.473627247480271 9115:0.473627247480271
+1 6:0.0154997154642518 15:0.0265517124809455 16:0.255857767826555 27:0.0225657270506153 29:0.0281459724203341 41:0.0356852646732921 64:0.0672165031687848 80:0.050460091640625 83:0.0200803712894638 142:0.00200965098015823 174:0.0568083384934544 185:0.045129295502676 265:0.0732122719010138 355:0.0466426503768347 365:0.082113040718386 367:0.132293402363373 404:0.0650808463177811 414:0.057261474002115 561:0.0686761187765189 1027:0.0809855179569313 1124:0.172318124339807 1305:0.070485687739773 1308:0.0905254296419802 1467:0.0952313454518835 3343:0.251416569935087 3689:0.470666297586348 4528:0.14214954738327 4924:0.393861751438388 6334:0.156888765862116 7378:0.470666297586348 8408:0.331021311924354
+1 6:0.0311769476619087 15:0.106815038283987 28:0.230226011379455 185:0.181550904873163 2103:0.499373107156518 2122:0.520003041152125 5361:0.617962082328929
+1 6:0.0310923103067078 15:0.106525063061458 26:0.134576090691617 75:0.0630138472132759 142:0.00806268889611196 582:0.26224849661391 2103:0.498017438233872 2122:0.5185913672905 5361:0.616284474988083
+1 6:0.0290665646171935 15:0.0398338701535279 29:0.0527820480289621 31:0.0332358542143315 63:0.0188481979837845 69:0.1474464169436 75:0.0176724988629182 79:0.0197115427515113 83:0.00753133063595383 96:0.0540269223162276 98:0.0565636711516123 140:0.020539818002248 142:0.00376869176776175 154:0.0420234721392653 158:0.0417253200690172 172:0.0227942751269536 173:0.021725699695859 174:0.0213064974698888 179:0.0792237595757504 180:0.0223989563330201 186:0.0164942291982616 198:0.0253087606535521 199:0.0135868079427833 201:0.0697688789657833 205:0.114997670326166 209:0.0182591062971136 215:0.0185173381563322 229:0.0152217714079061 252:0.0209770857515438 254:0.0561039606100204 255:0.054107524453364 261:0.279747931986094 295:0.0246795549801796 297:0.0283950583906151 306:0.0228087625708431 312:0.0263454269377342 346:0.0968662827960282 351:0.0206275804908075 355:0.0524812838360399 374:0.112546087706254 376:0.0370696971557701 390:0.0265514011433219 408:0.0684625742485676 423:0.0220223106306 427:0.0308766194035995 429:0.033170980497087 436:0.0256741070802 446:0.0358651004035116 457:0.020042850396924 467:0.0364848556379463 489:0.0331179880385448 501:0.0302259916235385 507:0.0155417418253775 511:0.0377008438510972 513:0.0870042339807323 574:0.0217637681961487 582:0.0490324636374517 641:0.114997670326166 664:0.0985745464336461 671:0.0177510524838115 689:0.108976030822127 731:0.0669930992120519 757:0.0276163588217267 761:0.0295565861988295 770:0.0391361760128477 772:0.0269312508212263 824:0.0650162224341016 829:0.0215628042236757 850:0.0532893619728408 880:0.102571483633376 883:0.0338939795138017 884:0.0300084689854782 933:0.033778392915724 936:0.0340112659756186 952:0.0270784919694981 987:0.0237300166196271 993:0.0319415770820042 1005:0.0306408780337772 1021:0.0311195418074733 1027:0.0303743742416584 1033:0.0348187984895622 1050:0.0343122577595047 1067:0.0309165961071925 1080:0.0293893822619967 1086:0.0366476232398116 1138:0.0859872393363612 1223:0.14286961912526 1232:0.0329094706535773 1305:0.290799464312845 1330:0.0383862635768871 1359:0.0322671461909432 1472:0.0295565861988295 1548:0.0319872811364129 1731:0.108275707450199 1816:0.0638831541640084 1835:0.0391361760128477 1863:0.0350173648210584 1936:0.117408528038543 1941:0.053314514241892 2298:0.0406127490635063 2376:0.0403468799219006 2642:0.0403468799219006 3335:0.085195557176217 3614:0.0462771643399405 3727:0.0515348695179971 3824:0.0488513904879583 3926:0.120593342578373 4050:0.0452466574091356 4055:0.0500807939030411 4251:0.0520851108268092 4424:0.23045276903659 4759:0.0643706771065687 4760:0.643706771065687 5603:0.124152632026162 6854:0.128741354213137 8263:0.135208794890839
+1 111:0.130672959692508 176:0.108308323930154 582:0.176239764399402 1430:0.314235396833781 2103:0.3346843818531 2122:0.34851075057028 2480:0.34851075057028 4224:0.414163787694895 4297:0.378672863215367 5228:0.414163787694895
+1 6:0.00606564052705194 27:0.017661690478937 37:0.0286994312955863 41:0.0279300595059464 72:0.0377479100488029 75:0.0122930506498852 80:0.0394939865264042 91:0.145401505908865 92:0.0400421875416043 100:0.0374821477182836 142:0.00314581785932567 144:0.0360615027022402 162:0.0328515355002153 186:0.0344203267242248 187:0.0565594416698836 204:0.145652730243295 229:0.0952948462551033 232:0.107678180347845 275:0.0815779773966195 288:0.0629993897116791 295:0.0515015485486148 322:0.0525680137486026 337:0.0463728278291902 394:0.0565076748713819 398:0.04717922144186 400:0.106894943632186 471:0.379380075059967 496:0.0508635195535309 561:0.053751264047684 574:0.0454168547712846 631:0.0407087812548777 663:0.0567681342137343 739:0.123926980398877 757:0.0576301009372079 862:0.0583648863455753 881:0.069110957234414 909:0.0534045220830951 927:0.0779091769595307 989:0.0733566878995575 1001:0.0710987992370866 1115:0.0853250552912299 1432:0.0721233080074549 1553:0.0844713803618164 1574:0.0929730575014475 1608:0.0657311610638565 1891:0.0865359901195121 1990:0.323030397970271 1996:0.103609273124762 1998:0.104509114553405 2026:0.146149192384114 2135:0.0847511014386881 2240:0.0823882886340923 2265:0.105460402738007 2341:0.0844713803618164 2353:0.0929730575014475 2731:0.0885355533793072 2769:0.0934419057533136 2823:0.175011520548286 2838:0.0912195411433914 2993:0.109925123566622 3627:0.106469379064597 3688:0.103609273124762 3749:0.109925123566622 4030:0.114291655247306 4126:0.0997212182830224 4244:0.0954617159892071 4431:0.107543494465731 4689:0.245586664773874 4693:0.122793332386937 4812:0.116045171605362 5147:0.129541493168512 5194:0.125827712299264 5196:0.125827712299264 5198:0.125827712299264 5210:0.122793332386937 5448:0.125827712299264 5799:0.122793332386937 6113:0.107543494465731 6491:0.125827712299264 6697:0.134329389438895 7316:0.129541493168512 7321:0.129541493168512 7656:0.125827712299264 7962:0.129541493168512
+1 6:0.0298065753065013 26:0.0430036917176148 29:0.0902097255114452 31:0.0189344508709231 60:0.113117504958737 63:0.0429512389154133 75:0.0201360289600788 83:0.0128717868058575 100:0.0306978972688264 102:0.236678079176875 111:0.0310672396348049 132:0.0301295965274119 139:0.081281296140321 142:0.0128821318081665 165:0.0482336253178855 179:0.0541604873034989 185:0.057856965096436 228:0.0751421988783314 243:0.0468415354279465 275:0.0334062016448767 299:0.0411249640083113 307:0.0477065403614777 323:0.0849935983857149 386:0.0395646944512094 394:0.0462798132897749 408:0.087756968440028 475:0.0402543289073336 499:0.0370021620942813 502:0.0342902932881396 507:0.0265623695251035 515:0.0358913602735469 534:0.0378647284530667 599:0.0931587994984453 609:0.0351793656806494 643:0.040418555414342 757:0.0471990807853185 800:0.0438087723580622 871:0.0570608950051726 1009:0.0885514872104078 1047:0.111968465571861 1114:0.0607967307068825 1176:0.0560707767921823 1828:0.0676779876183006 1846:0.0652608123484825 1873:0.0657817917571089 2238:0.382644832011502 2624:0.063062625060179 2686:0.151543028066843 2789:0.0786301380839411 2806:0.0790922377673446 2972:0.0848560452401787 3167:0.0769240849425939 3472:0.0790922377673446 3899:0.168313770112962 4512:0.0816717264278106 4736:0.0984666274541682 4923:0.0841568850564808 5644:0.412211831057916 5686:0.492333137270841 5946:0.0984666274541682 6159:0.0966465097543494 7600:0.106094546108349 8240:0.318283638325046
+1 4:0.0339014013965626 6:0.0156751011735769 30:0.0471102779562713 36:0.17964923719031 60:0.0594878249680711 63:0.0677634054170651 75:0.0476523819230951 81:0.0477195201360214 83:0.0203075890193786 88:0.0598468451700803 94:0.0470502923926364 142:0.01829151913091 174:0.0574511484060125 180:0.0603968703090104 186:0.0444752785318806 204:0.0470502923926364 227:0.0557099240501915 229:0.0820884098284012 262:0.0733513833590106 281:0.180940882949526 308:0.0579094113309015 312:0.0710381908128527 345:0.0575160196787937 346:0.0652979120139077 381:0.0753400425654011 405:0.0745367134502367 409:0.0400266466170295 437:0.281987129479056 505:0.056377263682686 513:0.117299738388314 852:0.155560262262114 1081:0.0871339876947174 2187:0.109508804857349 3477:0.121361760124483 4349:0.135038578108894 4591:0.728145958277275 6311:0.143758028471555 9607:0.364578953065824
+1 6:0.00781925377122995 15:0.0803684087342442 29:0.0283980053053516 63:0.0169013028206778 75:0.0158470457036387 102:0.149012433194303 142:0.00202764638379337 144:0.0929742010734544 172:0.0613193282715825 180:0.180767620204056 185:0.0455334054184566 204:0.0938809063251856 205:0.061871499382396 229:0.0409483869365373 255:0.145555716750793 322:0.0677657434390702 430:0.060857092636742 586:0.057479195423771 587:0.0990334799188092 655:0.0592073351479219 768:0.0977195219779021 963:0.0663416923876249 1064:0.072448288031689 1109:0.108189072896972 1138:0.0771053217919421 1534:0.264925722228541 3621:0.119264294693072 3759:0.128551223675984 7986:0.166992719807771 9118:0.590205363580581 9119:0.590205363580581
+1 4:0.0279091166342095 6:0.0064522144938638 11:0.0289941065205349 15:0.0221058695563261 28:0.0952926902014775 60:0.0979459595742657 63:0.0278928998125112 72:0.0401536509200831 75:0.0261530168902183 88:0.0492685409226359 96:0.0399764352178742 142:0.00501945956815424 172:0.0505988768498126 180:0.0994426913553083 186:0.0366139948424393 205:0.102109023892029 209:0.0405316802473273 255:0.060054113395048 276:0.250616841931231 284:0.0391833422985886 304:0.097712246503641 312:0.116963492434278 314:0.0514883661002037 346:0.0537560976034248 373:0.0460606552596079 388:0.067095848378807 405:0.0613618830938427 475:0.0522830070370427 496:0.0541051413463372 505:0.0464122296666239 768:0.0806352286914055 903:0.0718388391682033 1043:0.0721617119619015 1080:0.0652387375990043 1223:0.0792857222201211 1416:0.0778811682713653 1482:0.0764410494072897 1579:0.080989314511023 1808:0.0648751991408754 2451:0.51063080348824 2862:0.109304393665397 4353:0.11561886016363 8298:0.142890438301453 8413:0.688987004794419
+1 6:0.0115888612139355 11:0.104152977805711 26:0.0501597862093475 31:0.0441705337259623 41:0.053362473735101 60:0.351842652798165 63:0.0751479073786562 75:0.0469735907500736 88:0.0884915223305939 118:0.0758854458553797 142:0.018030962969263 169:0.0844738548093885 174:0.0849491659525366 180:0.17860961534259 192:0.0935900535670829 196:0.323295782868068 205:0.091699315614858 237:0.199178389761323 255:0.107863553842333 312:0.105039415708136 346:0.193103299687672 405:0.11021244685473 507:0.0619650417616181 527:0.110532024654287 799:0.116912895923298 952:0.107962151513274 1033:0.138822811930392 1133:0.270271103411427 1225:0.103372394705242 1579:0.145465394334399 1725:0.167186318858534 1863:0.139614497390224 2216:0.157880091425839 6458:0.23460587232005 6704:0.513292749287487
+1 6:0.0144426042979989 15:0.0247408333192293 27:0.0420533999143859 67:0.0408481491894036 81:0.0879348897315837 88:0.0551412264395514 142:0.00936294409741026 158:0.0518312272967843 159:0.0434430378467031 185:0.0841027770730209 229:0.0378169942086898 242:0.101200304175428 252:0.0521155067385447 322:0.0625835818918728 365:0.0765127693818842 537:0.0807632055880256 631:0.048464858451128 902:0.0995986409008462 1057:0.0983789366746999 1237:0.0885554294022371 1620:0.26199911070069 2318:0.442747331919826 4947:0.136067175753195 6767:0.319845234580803 8304:0.479767851871205 9120:0.545071356560544
+1 6:0.0220913579596553 15:0.0232883038286933 26:0.0147103826932073 27:0.0296883397660635 29:0.0432015797874063 31:0.00647695598382591 32:0.0127387732564712 37:0.00804036348627265 38:0.013844955730246 40:0.0106177730664741 41:0.00782481814040579 42:0.010166922969882 48:0.0103959195480037 53:0.0130871842100264 63:0.00367311000728748 64:0.0147387701378993 65:0.0121573740120298 68:0.0208643396159796 72:0.0105753634806755 75:0.00344399143530895 81:0.0103465311919188 96:0.0105286897555621 100:0.0105009081468284 138:0.0142498010218209 142:0.00616927323508792 159:0.0204462527911118 172:0.0399790431609099 174:0.0249130794819399 179:0.00926340813152462 180:0.0261904604558144 185:0.00989563993278616 186:0.0192862315164826 199:0.047660000428899 204:0.0102014294452606 215:0.0216517950890156 229:0.0266975744002751 240:0.0305959761362324 242:0.0119073567611089 255:0.0158165960780589 264:0.0279780496988998 267:0.0181935960987205 276:0.0264022238284306 284:0.0103198109686222 301:0.0154024779580263 322:0.0147273280065011 341:0.0283970120935793 345:0.01247060510972 347:0.0139598527029562 373:0.024262210801101 386:0.0135339961122153 400:0.0149737148585865 402:0.0259049688001939 404:0.0142704780677014 408:0.020012833599272 411:0.0254626379047954 414:0.0125559001627208 442:0.0144608174019661 475:0.0137699011325244 485:0.011759908389124 490:0.0175860295122782 499:0.0759445447321919 502:0.0117297682311361 505:0.0122237003965098 507:0.00908625760593957 508:0.0131846651027891 538:0.0148901308958119 557:0.0159931218744671 561:0.0150588245578393 580:0.0153761351410357 586:0.0499671321582578 592:0.0167394426171051 643:0.0553043140533939 644:0.0809610752176173 673:0.017182083006674 697:0.0364353852370519 709:0.0148196610475625 739:0.0173595420393642 764:0.0157166269701751 768:0.0212370938437505 781:0.0184150836260444 792:0.0186476193225473 804:0.0160081385257879 844:0.0186212018796141 847:0.0181220448296041 856:0.012753717712229 1007:0.0784630894859914 1055:0.0370856717940784 1064:0.0472349145986197 1155:0.0791268842737093 1236:0.0187277817475274 1296:0.0691985417585501 1305:0.015455614330302 1309:0.0401203438517016 1380:0.0175023920014936 1576:0.0188368549365548 1626:0.0244230698078776 1627:0.0226874414553822 1690:0.0222087994004576 1707:0.0194241289773156 1746:0.0198497903971199 1751:0.0231507821307246 1852:0.0290269241885536 2042:0.043653694403854 2190:0.0523569181123262 2206:0.021932821450122 2387:0.023081704330912 2644:0.0277473167827311 2771:0.0490308056978779 3046:0.0520942153203383 3316:0.0261784590561631 3571:0.0270552838407407 3666:0.0243325297551886 4265:0.0307963576227729 4328:0.160098373060345 4798:0.0330601185076146 5475:0.33495898574051 5901:0.0320196746120689 6005:0.0352515885458611 6653:0.031575275057716 6758:0.0352515885458611 7125:0.0376333979183723 7432:0.0362920324414067 7433:0.871008778593762 7976:0.0790478927503978
+1 6:0.0112286275623438 15:0.0384702920874377 31:0.0855950318642819 42:0.0671795591742392 81:0.0683663490433319 142:0.00582349332503315 144:0.0667565414363108 159:0.0675509322408039 179:0.18362832390008 199:0.05248683776698 204:0.067407566193812 205:0.088848890650524 317:0.0669250522004483 365:0.118972087502489 387:0.0792626482111096 582:0.189416011111075 727:0.120217077411415 856:0.084272216508214 908:0.11943308325392 960:0.258799266513357 993:0.123392660099765 1140:0.114048992902697 1143:0.266540179874949 1232:0.127131704110749 1281:0.145280784067283 1581:0.160194195395705 1608:0.121680591445336 2252:0.371827469399282 3084:0.19908298896433 3400:0.170444629406882 4233:0.479610743225525 4771:0.191800014315808 8124:0.218449986703836 8930:0.248668657161501
+1 4:0.0270611279031576 6:0.018768512522145 15:0.0214342062959099 26:0.108313728524789 27:0.0364329381140436 28:0.138595985224625 29:0.0454423856607648 31:0.0238451733965792 37:0.0296009208616614 64:0.108522747558625 67:0.0353887698621405 94:0.075113943841106 97:0.03903755552437 134:0.044806419901067 142:0.0162231621491087 143:0.0551263321976476 153:0.0542613737793124 174:0.0458592509794014 176:0.0648569528953359 178:0.0504900865627661 185:0.0364311955580122 198:0.0544735618056938 199:0.0292437007226356 209:0.11790050516594 226:0.0485096788271592 306:0.0490926661570775 308:0.0462250503597466 317:0.0372881331903735 322:0.216876996453434 337:0.0956589273540353 365:0.0662867924472067 373:0.0446611513943678 387:0.0441621797270376 389:0.159953206261784 426:0.0563201570327106 436:0.0552599188077187 448:0.0566562811966569 505:0.045002043588142 506:0.104999652416471 549:0.0668043932515817 613:0.0578613929520338 686:0.073984883070431 747:0.0689470801126698 772:0.0579657445971701 796:0.0549937771547028 806:0.0671583396625987 882:0.0469808991839793 987:0.051075536438722 1010:0.0696560926891615 1017:0.0737207887419763 1045:0.0324995564364424 1055:0.0682661945415958 1313:0.0817625863069302 1911:0.0847256208755883 2215:0.105983296287163 5798:0.126650443936999 5857:0.668052869774513 5994:0.379951331810997 7856:0.291017989619565 8708:0.138548864791879
+1 6:0.0196803991089869 11:0.044218584849843 15:0.0337134123434245 28:0.145329807085433 63:0.0425391469191906 75:0.0199428355486734 96:0.0609676104840085 142:0.0102068282351375 158:0.141256967020922 186:0.111679181180179 276:0.152885167637597 304:0.0745099225566741 346:0.0819828181768586 475:0.0797362243680465 478:0.0771677764136502 496:0.0825151408525495 1223:0.120917760748671 1273:0.132114049945494 1808:0.0989404345269108 2451:0.31150291173824 2763:0.191438486129065 8413:0.840613048320392
+1 27:0.0776999008423263 64:0.231444598238198 142:0.0138395436172504 178:0.215358679399792 209:0.167629587123938 322:0.231264921136264 389:0.227419635624759 506:0.149287302526459 1313:0.348747324674964 5857:0.569897948679605 5994:0.540210449387181
+1 6:0.0115483515488157 15:0.118697086018218 20:0.0651436228471688 63:0.0748852226759774 75:0.0468093913179089 81:0.140626025483142 142:0.0209625902410546 179:0.125904638356668 186:0.0655327383255989 205:0.0913787743210498 229:0.0604771735942366 345:0.0847478057824545 408:0.0680016615114259 437:0.103874497121426 716:0.110575307345152 719:0.124300299758369 852:0.229212504051599 998:0.383473976647976 1159:0.117430405864012 4591:0.643738276027963 7620:0.493267181461401
+1 6:0.0174336544702773 15:0.0298646373254114 28:0.128738732732434 29:0.0633156342821605 42:0.0521517529905839 57:0.0650778052582215 75:0.0176661307622756 128:0.0936977306353782 172:0.0683581843429619 262:0.0815805051742472 303:0.0778828479127984 308:0.0644061340683342 404:0.0732011493987886 437:0.0784056531113511 561:0.0772450131662686 582:0.0735221929508765 608:0.380465712315136 784:0.085596588021219 2400:0.151555323253246 2497:0.176464177075807 2723:0.113631264699916 2984:0.269954109831383 4785:0.268567497642205 5260:0.18616184238017 7908:0.608220332153173 8931:0.386084890826724
+1 6:0.0147831446740908 28:0.0545830283142124 29:0.0268447497144331 31:0.0563454319064158 63:0.0159768701776895 75:0.0149802766445429 80:0.0481272599301388 142:0.00191674235908572 158:0.0530533493789766 179:0.0402929040586011 182:0.0751618389727202 186:0.0419445124900106 188:0.0816957743200648 205:0.0584873795718365 284:0.0448879232521903 490:0.0764936824383802 655:0.055968934304164 697:0.0792412177489301 731:0.0851810913037568 850:0.0677569191620695 2523:0.115061392928185 3365:0.241384155191311 3784:0.125217680426315 6153:0.146509256859234 6422:0.327386825711319 6701:0.327386825711319 7621:0.157858896044621 7805:0.687666809753777 7806:0.343833404876889
+1 6:0.0243975132058586 29:0.0443035057901935 42:0.0364918636097131 52:0.0497273087226136 63:0.0131837951174093 68:0.112331720889673 75:0.0123614259793859 81:0.074273053156323 142:0.00632663050372245 159:0.0366935930562885 171:0.052737797400787 179:0.166244510309606 204:0.109847150325625 229:0.0638832579343201 240:0.0549086577854925 242:0.0427387558817732 365:0.0646255087688711 387:0.0861107689129827 404:0.102441287464186 413:0.052737797400787 427:0.0647920333528156 467:0.0765604534766815 478:0.0478319020283245 505:0.0438741995977382 510:0.0551420727631149 586:0.0448364214297969 592:0.0600824318916924 612:0.0710020002446044 647:0.0550951286016035 678:0.132013092354972 1010:0.067910367400473 1109:0.421962314429122 1154:0.0828465415562345 1190:0.0660065461774858 1313:0.0797134473289296 1461:0.104185559547962 1726:0.0823614182383645 1816:0.0670267590045005 1892:0.0809851157520067 1980:0.0757358737659726 2241:0.0852224965912387 2490:0.501379394540798 2837:0.0917269144846569 3880:0.552682697299524 4492:0.094446763454212 4890:0.126527580178589 7953:0.130262017514476
+1 2:0.0443584225519826 4:0.0470014058495126 5:0.06100536003652 6:0.0325982892288116 15:0.0372282276179142 26:0.0470314608807706 29:0.0394635437749521 48:0.0664748557177031 63:0.140922285888547 75:0.110109948763085 106:0.0760597535450785 142:0.0394483187650589 154:0.0785492034826592 169:0.158410914326237 186:0.061661185981503 187:0.101321590575204 189:0.162626097533237 192:0.0877531041459905 218:0.0616366371217519 229:0.22761717846136 339:0.0845176970891917 357:0.100587655952412 434:0.0940254826496836 472:0.0989995213976445 480:0.0799217580057391 496:0.273353442922734 507:0.0581004557201196 510:0.0982360905086862 565:0.231154055102074 579:0.12759098581922 671:0.066359630111547 761:0.110492835808079 764:0.100497171547655 795:0.128733446989532 987:0.0887110849824491 1045:0.0564471978945167 1433:0.104763664312398 1446:0.113410365917738 1590:0.167393493248455 1711:0.157976467540344 1918:0.157361711977578 1936:0.292609372493425 1980:0.134924129203304 2163:0.137310569593671 3236:0.488028328934436 3781:0.19930826343369 5918:0.225410003567788
+1 6:0.0177945885492716 15:0.0304829337007311 26:0.0770198849427462 31:0.0678234434898633 63:0.0192314854102311 67:0.100657193512587 102:0.0847783885456806 142:0.00692159396126353 153:0.0771685145038934 174:0.065219326896048 186:0.0504889425162463 220:0.142751144245431 339:0.138408273600893 409:0.0454387949187703 455:0.0649633127455508 465:0.0756567782530796 671:0.0543360867419307 761:0.090472901984802 800:0.0784617894821068 975:0.110243932762125 7598:0.190016005787959 8722:0.197039059970619 9126:0.895435967997552
+1 6:0.025806325829132 11:0.0289912618646307 15:0.0221037007158306 26:0.139621115757417 27:0.0187854579067121 28:0.0952833408906574 60:0.0489681749735753 63:0.0278901631976725 67:0.182470665564935 72:0.040149711384299 75:0.0130752254889702 142:0.0167298903377969 172:0.0505939125170205 176:0.033441375349942 192:0.0521020869119948 276:0.0501184507063129 308:0.0476688833083129 312:0.0584760084840398 322:0.0559127797359788 328:0.0654540763261343 375:0.0457358413856721 387:0.0455415792014389 409:0.0329484535062456 415:0.056131055792382 457:0.044486881636987 574:0.0483066111128325 612:0.0751019473735699 647:0.116553095251486 697:0.0691640624984904 742:0.0662139339174807 768:0.0806273174464349 784:0.126705129099787 884:0.0666064547420382 960:0.0743485586161654 1005:0.204030427910274 1013:0.0799397761197679 1045:0.0670293510243434 1416:0.0778735272314528 1485:0.0804529124506156 1689:0.103337450264031 2123:0.421374362233917 2468:0.095743385548286 2528:0.074226053186862 5473:0.666952546128724 5535:0.251027630177807 6884:0.243127472004701
+1 6:0.0248649022870571 15:0.113585867717451 20:0.0467538537101389 28:0.0612049148082913 29:0.0301014925347036 31:0.0315905645598872 63:0.0537454411195062 75:0.0335952981778826 81:0.050463946706664 142:0.0171942167989589 174:0.0607552566147698 179:0.090362291593235 186:0.0940662470703538 205:0.0655829329118105 229:0.0434047233397076 345:0.0608238587390806 408:0.0488050801505242 437:0.0745511660293002 478:0.0649976391775743 582:0.0699077808297155 719:0.0892108509940168 852:0.164506783850583 853:0.0877057694032557 998:0.275220895342389 2017:0.124645532327262 2187:0.115806832853296 4349:0.28560972908388 4591:0.616018245421372 7620:0.531029914382353 8746:0.183552318329329
+1 6:0.0230884881258115 28:0.170496823089643 29:0.0838528876888219 31:0.0880009540727176 57:0.0861866418495345 59:0.0716836174885095 63:0.0998114502746426 75:0.0467927422823755 96:0.0715254778586447 142:0.0209551343246248 173:0.0862870390875283 174:0.0846221114044505 176:0.0598388784819829 187:0.107645020470107 304:0.262238807151934 413:0.0998164033191 480:0.0849096350313333 505:0.24912102997414 513:0.172775511108322 527:0.110106476022149 539:0.107252751654116 561:0.102300442647191 633:0.240094575290174 653:0.117930109880654 750:0.133479842367447 931:0.204678853280737 1179:0.143959750496995 1313:0.150872998128313 3360:0.323682805051326 3502:0.391132873471988 3972:0.1989037628956 4900:0.405269152257237 5402:0.217522083058499
+1 6:0.028281195730596 26:0.163211749098704 27:0.0823480592264486 29:0.0684745262482016 31:0.035930925014061 63:0.0611297531910744 102:0.179652684376195 134:0.067516225897721 142:0.0293349037799424 174:0.0691026767026262 176:0.0977292247938576 192:0.152263371669619 204:0.0565924482657013 255:0.0877425952990238 265:0.0890567140319278 308:0.0696538788216789 320:0.089481455089403 423:0.0714242504617115 437:0.0847940641020047 507:0.0504060304736867 538:0.165206056055653 571:0.0744016902777622 706:0.191939517669853 967:0.120795463999647 979:0.577985507085618 1126:0.100532076410581 1149:0.0904411862276594 1154:0.128045796448479 1201:0.120226954319433 1317:0.24454786411895 1387:0.152913801130703 1433:0.0908894842633249 1550:0.450267707859995 1558:0.227141381977706 2146:0.145225048877829
+1 26:0.159374807668447 27:0.107216187344031 80:0.239750247204674 142:0.0381936935604093 172:0.288759871057185 204:0.22104807056208 437:0.331202569234407 979:0.564397658475018 1550:0.58624316558731
+1 6:0.0126536401949286 12:0.0426504626247462 27:0.0184221827487099 28:0.0467203708185396 64:0.0548741328975185 73:0.0687501635833823 108:0.0585674909596853 117:0.130636824249366 142:0.00328127319226698 172:0.0496155221229804 185:0.0736852065263424 196:0.235333362351487 204:0.0379810927157641 205:0.0500623022612575 231:0.0678265605937198 377:0.0486951842798857 400:0.0557488590589236 408:0.0372550382531068 462:0.0777448581818367 647:0.0571495896270772 713:0.0632650934638203 739:0.0646315674914178 768:0.0790681379135164 882:0.0475114418582873 960:0.0729107983809531 1205:0.0875394021932247 1273:0.0849435849063511 1511:0.0763676007829371 1975:0.0899376425352085 2241:0.088400387308335 2341:0.0881086217605841 2353:0.0969763714317491 2709:0.0947186957561349 2769:0.0974654077551742 6268:0.116047886853688 9128:0.63673990130569 9372:0.588608755204098 9916:0.140113459904484
+1 6:0.0127645340664174 17:0.0139110768407423 25:0.0191598763517465 26:0.0883974758884522 27:0.0223003571131652 29:0.00927165984744456 31:0.0194606276516246 33:0.0141269555932151 63:0.0165543103165541 64:0.0442840307102279 67:0.0288816383039994 75:0.010347798429586 85:0.0469348164691076 88:0.0389875426247997 94:0.0306511608916735 100:0.0157754865062883 102:0.170278652520375 111:0.0159652895882281 142:0.011916106517595 176:0.01323283531979 185:0.0148661936708689 199:0.023866497485835 204:0.0153255804458367 226:0.0395899321617292 232:0.113298982616097 252:0.0368482108864494 274:0.0275896111749243 284:0.0155034246949504 308:0.0188626955708712 317:0.0152158775231667 331:0.0199568599434693 339:0.0198567909402427 351:0.0181171361218883 365:0.0270491341073801 373:0.0182245275243691 387:0.0180209160499394 390:0.0233200083235547 405:0.0242786673591142 433:0.0206446667186356 441:0.0180018296318784 448:0.023119286535615 480:0.0187770099630362 489:0.0290874200027857 534:0.0194584830206666 538:0.0223694042209763 574:0.0191150460477207 609:0.0180784893419537 613:0.0236110470852227 643:0.020770881144036 644:0.0243255217886249 673:0.0258125978088456 717:0.0258709707391074 732:0.0279351190159103 744:0.03150019976047 764:0.0236110470852227 882:0.0191711289021093 913:0.0266449040146995 930:0.0447032965796195 952:0.0475659009262362 963:0.0216598876895746 1009:0.0227530696869284 1023:0.0360355900925502 1027:0.0533554260518861 1046:0.0286818894098516 1050:0.030136343171963 1215:0.0299240629541312 1281:0.0330305998150958 1296:0.0259891965176494 1313:0.0333642205382589 1337:0.0328695648817307 1347:0.0771396496637362 1439:0.421157337471173 1710:0.035552314960206 1916:0.0311802943467796 2054:0.0397399904320851 2428:0.0496661285024846 2581:0.0397399904320851 4373:0.0516812583070684 4500:0.0948709042380849 5191:0.0529583681387045 5640:0.488410923658817 5797:0.671856357991889 6395:0.0516812583070684 6693:0.056536554052839 7720:0.0529583681387045
+1 6:0.014191582282618 12:0.143502788226917 29:0.0515410601502612 37:0.0335735639854683 41:0.0326735268822222 60:0.0538577935478625 75:0.0143808258191512 81:0.086406523185823 83:0.0183856434059837 115:0.0955400594167252 138:0.0595018629696404 142:0.00184004198722471 174:0.0520138716048095 186:0.0402660606676972 199:0.0331684024957117 204:0.0425973707293764 205:0.112293896594701 215:0.0452049169830694 294:0.067809656162088 309:0.0522202125294422 370:0.0839141531214881 393:0.333168618721159 398:0.0551918466100917 478:0.0556458658422686 504:0.0753766553850098 586:0.0521610344964426 608:0.0774279780415607 697:0.0760703007817892 710:0.0817724843266347 827:0.0606096451168847 882:0.106572105119275 998:0.0785408270874327 1113:0.0861508213028751 1340:0.095267753469249 1608:0.0768945321280947 1726:0.0958162279885306 1951:0.0884863761295523 2393:0.111056206240386 3027:0.363616880583661 4492:0.109875871657735 5125:0.131846591179478 5234:0.122258291754478 5480:0.131846591179478 6498:0.441592522149466 6756:0.147197507383155 9130:0.535597655860374
+1 6:0.0135486785363913 17:0.0184570689409381 26:0.0879636238098202 27:0.00986262562218888 32:0.0253913325914188 33:0.0374869891518232 37:0.0160263111153297 58:0.0227213980325458 63:0.0292854440414903 67:0.0383198508215351 75:0.0137293490064288 78:0.0260219215082114 88:0.0258641286473296 94:0.0203338172944495 100:0.0209307478750053 142:0.0114184514265108 172:0.0265625049117838 176:0.0175571852975555 199:0.126663261088356 206:0.0323060834531482 221:0.0322437088817576 226:0.0262637506658007 232:0.0601295545132469 312:0.0307007144793611 317:0.020188264622293 339:0.026345779232307 345:0.0248568112158127 373:0.0241801094756484 377:0.0260697865560824 387:0.0239099599348371 399:0.0319379649861588 405:0.0322126778804684 506:0.0189493777856003 541:0.0349277284290378 561:0.0600314669373185 578:0.0516632928455168 593:0.0326243945745582 598:0.0715938773718411 612:0.039429562703297 643:0.0275585844020862 647:0.0305959947657703 755:0.0353521755327853 858:0.0339817828417969 882:0.0254360501255747 960:0.273238162186626 1103:0.0443813287956665 1113:0.0411240184580537 1143:0.0402015650856154 1228:0.0417076759825923 1274:0.0471704337300932 1281:0.350597190959219 1303:0.10383586556231 1424:0.0314974191840294 1459:0.0516632928455168 2024:0.0329876078974785 2205:0.790757898869547 2441:0.0545915855942294 2548:0.0471704337300932 2771:0.0488648894848498 3129:0.0638226453344746 3251:0.0483233512902981 3277:0.194405527178377 3945:0.062128189579718 4649:0.061384290563997 6485:0.144676892756562 8473:0.0750120991913551
+1 6:0.0152518295284519 26:0.0880188305334225 27:0.0592128929429431 28:0.0375423525169205 29:0.0184638904827003 31:0.0581318076153171 33:0.0843986616913001 59:0.0315685839615529 63:0.0439557357554463 64:0.0440943426861991 75:0.0618208454854804 118:0.0332903542033695 142:0.02636681017941 174:0.0372665376339788 178:0.0820593738820255 186:0.0288495476100275 199:0.0712928002700975 204:0.0915596053754283 218:0.0576761237676937 242:0.0356235333476745 254:0.0490648536307619 274:0.0549428654174032 284:0.0308740333860774 286:0.0284866155635006 308:0.150255186648192 346:0.042356456972614 387:0.035887449045677 437:0.0457287811671016 438:0.0566888178732448 441:0.035849439720639 446:0.0627305410390789 455:0.111360750922134 457:0.0701126630188527 485:0.0351824084110621 496:0.170525926814101 533:0.509394716113627 574:0.0380663357590889 631:0.0341202433192546 667:0.048967304885971 676:0.0508369347079789 712:0.0466856874580314 757:0.0483029215288809 882:0.0381780210126925 1013:0.0629937453317464 1113:0.0617247423663212 1230:0.284138027572749 1237:0.18703445517079 1331:0.0574712330454351 1380:0.0523623384801661 1448:0.063814535806429 1724:0.0783187425964981 1783:0.0736251521833266 1816:0.0558680273985622 1828:0.0692607667515465 2238:0.0783187425964981 2560:0.0819387716112862 2902:0.0727962303101868 3557:0.598111223707776 4784:0.0830123330096695 4932:0.0957940514598724 5048:0.0921342238056529 6152:0.0921342238056529 6676:0.11258876614079
+1 6:0.034522087851597 15:0.0473103162695659 26:0.119536890755351 27:0.050260020157996 29:0.0501509971485301 37:0.0163340422838846 53:0.106346744461751 59:0.107181904981127 64:0.0598837838751757 65:0.0246977716259382 67:0.019527827056608 68:0.0423860197483095 79:0.117056077923234 91:0.0275846853455612 97:0.021541258313366 102:0.131578292768589 111:0.0215893164166114 132:0.0418754546964254 134:0.0247245672076851 142:0.00358083206614112 144:0.143668727343241 151:0.0272635619886654 160:0.0312902179948126 183:0.0303703573739438 185:0.0201030465058188 186:0.0391800845353389 199:0.0322738502881823 224:0.0328312135456695 252:0.0498285784180299 277:0.0312634224130657 279:0.0390862715293269 284:0.0209647522790433 291:0.0833592747513235 293:0.261397153324691 308:0.0765221390252807 317:0.0411518240979815 319:0.0313170895924961 325:0.0309995548819136 337:0.158356252313986 341:0.0288443424892681 355:0.04155435440487 369:0.0308703273410012 389:0.0294211841892031 402:0.0526260854335125 411:0.0258637439032609 416:0.0671735316379657 422:0.0629598799922848 427:0.0366718730489695 437:0.031051743619063 489:0.0393339256837561 495:0.0380455907832699 506:0.0193132365755232 515:0.024941705239242 523:0.0404652894028111 527:0.0329264126568513 534:0.0263130427167562 543:0.0382112900260654 561:0.0305920842376462 570:0.0400503808061938 571:0.0272460370404086 575:0.0720619892905341 586:0.0253771253896318 587:0.0437233858119012 591:0.0363003653614124 594:0.0330548516664974 626:0.0651638598002496 631:0.0231690637871574 634:0.0387855404985651 653:0.035266004352161 658:0.031928413426728 726:0.0636285775422537 738:0.0418316551392885 741:0.0418316551392885 763:0.0399829625014389 771:0.0366246298995112 772:0.0319859955604736 811:0.0392092892561887 853:0.0730616893195795 856:0.0259092471060472 872:0.039396864332797 965:0.0344827292491897 967:0.0884710461324405 991:0.0366718730489695 1008:0.0448890395396171 1009:0.0923045995888177 1013:0.0427753720900214 1018:0.037461682979265 1046:0.0387855404985651 1047:0.0389046896397776 1080:0.0349054953591822 1190:0.0373592794756226 1216:0.036960389723647 1225:0.0307936286884951 1229:0.0389648309962964 1269:0.035266004352161 1311:0.0421640482557895 1317:0.0447769408131929 1347:0.10431331643899 1431:0.0403249574756611 1436:0.0463491905158159 1438:0.0955311795321 1443:0.0498031746232244 1464:0.0441308564561686 1470:0.053456259049916 1478:0.0552953498300445 1523:0.0556398325867709 1531:0.0471733824505786 1553:0.0480761825695202 1579:0.0433327229472787 1667:0.0552953498300445 1688:0.0464816714422423 1738:0.0466160315933213 1815:0.0448890395396171 1816:0.113810140069795 1951:0.0860998975189773 1990:0.183850060479698 2034:0.0464816714422423 2041:0.21732496221271 2067:0.0430499487594886 2134:0.32921658132957 2456:0.048729699042917 2791:0.0540305095224157 2896:0.058020341113872 2984:0.053456259049916 3005:0.400110447384532 3069:0.0589683548357518 3100:0.0584824928599475 3212:0.0549629567135435 3466:0.0546418333566476 3527:0.0594804920900709 3728:0.0594804920900709 3795:0.0594804920900709 3813:0.0600219098370435 3835:0.11199463544559 3899:0.0584824928599475 3969:0.157208112145873 4276:0.0589683548357518 4481:0.065048143647075 4482:0.065048143647075 4483:0.065048143647075 4491:0.0684266514042994 4512:0.0567555008062433 4537:0.0571586353406475 4762:0.0737274618837982 5176:0.0589683548357518 5227:0.0684266514042994 5365:0.0684266514042994 5394:0.0660461428771983 5885:0.147454923767596 6111:0.0716137944342025 6453:0.0698868023804983 6492:0.214841383302608 6670:0.0737274618837982 6679:0.0764524531676257 6764:0.0716137944342025 7595:0.0737274618837982 7788:0.0737274618837982
+1 6:0.0310070369632213 17:0.0844804188611041 27:0.0225712637878467 29:0.0563057566583035 31:0.0295455555693254 37:0.110031783498822 42:0.139133593771126 56:0.0715651119139872 57:0.0578728320148616 59:0.0481343032296426 64:0.0672329954411068 75:0.015710256575203 80:0.0504724725520604 83:0.0401705964373111 109:0.085306848402289 142:0.00603043220715807 160:0.140521186048069 203:0.0587663475407369 216:0.0674430654430581 229:0.0405949271015213 242:0.0543171007719759 276:0.0602187488400902 314:0.0618586716375904 337:0.0592634850423476 409:0.0791770143889174 439:0.0835480439975114 485:0.0536444940599702 507:0.0414482558911749 563:0.118817584790679 655:0.0586962670331862 671:0.0473402642994183 717:0.0785557606145226 1089:0.506293321709189 1319:0.0818196283066975 1379:0.0818196283066975 1626:0.111409305232906 2374:0.49974565647994 3843:0.502956515242059 7376:0.165551265733314 8716:0.17167009506262
+1 6:0.0116436671179381 26:0.0251985006355186 27:0.0169517830606381 31:0.0221897122431801 67:0.0329318896877335 87:0.162709087245604 88:0.0889100153808047 97:0.0363273568766418 134:0.0416957154270226 142:0.00301937246398734 146:0.104555813484078 153:0.0504942551709569 204:0.0349495634098355 215:0.0370889584376764 218:0.0330236571562403 226:0.0451418740506275 232:0.103350081680901 277:0.0527228951374649 308:0.043015856871749 312:0.0527680834290065 322:0.100910110055171 372:0.0574694704960444 389:0.099232258601293 457:0.0401444548383904 597:0.0520599763440686 663:0.108972705313351 784:0.228674528120209 880:0.136962431686154 883:0.067887316571198 909:0.051257940109942 1005:0.122743154798419 1045:0.0302432611145996 1192:0.0724439454011933 1201:0.0742480612224201 1322:0.0654082575329675 1904:0.569411858517448 2025:0.182234999747412 2246:0.0737354808682872 2421:0.37300214828182 3369:0.0950608552021489 3727:0.103220809465558 4124:0.109697729540903 4379:0.461581092297691 4416:0.111380763728967 5241:0.120770097542887
+1 15:0.0511416351222439 27:0.0869283425631326 31:0.0568941597574896 64:0.258933346142406 88:0.113982113956233 94:0.0896102672401633 97:0.0931429133941212 132:0.0905332871782254 142:0.0154832705760984 178:0.120468448825941 204:0.179220534480327 208:0.111833042591314 226:0.115743231180397 256:0.101583529323411 286:0.0836403746918555 295:0.126741668927584 387:0.105370175625961 1891:0.212958952092381 2135:0.208566467271385 2683:0.211441842492849 3811:0.270517955489308 7918:0.347181874468866 8728:0.661150255994267
+1 4:0.0139362253606717 6:0.0161093445629983 26:0.0139451368747267 27:0.00938130956561996 29:0.0351035993267529 63:0.0208921914035063 72:0.0200504493069517 75:0.0195889935547143 117:0.0665254766859053 142:0.00250643259861666 172:0.0252662010058575 179:0.0175630365320431 180:0.0744840355588638 185:0.0375234434626737 229:0.0506174906526327 308:0.0476109289625475 317:0.0192030365208521 322:0.027922401358666 345:0.0709312458251741 346:0.053685474931393 351:0.0228645391021434 375:0.0456802371721563 386:0.0256598937203736 402:0.0245573717005364 408:0.0379435001268657 411:0.0241380512104514 423:0.0244105207955581 427:0.0684500707206272 457:0.0222163979349447 477:0.0344488503830412 485:0.0222962971855663 502:0.0444783053992324 530:0.0264856980736982 565:0.0342693473387778 571:0.0254281143450513 574:0.0241239407187182 644:0.0306997662530168 768:0.0402646466307461 922:0.32059882067925 975:0.0399212939130933 1080:0.0651530294807697 1205:0.178314207901659 1296:0.0327993892640218 1335:0.0346320739613077 1337:0.0414826850365598 1466:0.0787015182214107 1509:0.0407134852175794 1776:0.0373152007696617 1836:0.0343586432616 2024:0.0313777459847303 2091:0.0426631320836996 2223:0.0408996020117755 2657:0.0519274059217349 2767:0.0507061263715424 2775:0.0476102594326875 2866:0.0441608260212827 2884:0.10747566765763 3320:0.0480215066608469 4870:0.0688081840442038 7781:0.0713513571982177 8109:0.0668355456925778 8319:0.0749357584403315 8659:0.0668355456925778 9132:0.648506662691673 9133:0.567443329855214
+1 6:0.0145577981581211 15:0.024938165603205 20:0.0821197474539221 26:0.0630101637952234 27:0.0211944084039331 28:0.0537509932139107 29:0.0264355424074907 40:0.136439880731582 51:0.0494360002574325 60:0.0552476018598612 63:0.0786666356762868 75:0.0147519251520472 82:0.0545969914738563 83:0.0188600876478254 84:0.042719517364136 142:0.0302003926767707 179:0.0396787001291882 204:0.0436966021684877 218:0.0412886877007073 234:0.0522162020441693 317:0.0867676299927506 553:0.0930488479717195 655:0.0551157731787044 805:0.0948866469031899 930:0.0637294676427802 1282:0.102391901335106 1363:0.0824124621493793 3046:0.111569668463958 3972:0.125413185018721 7125:0.483594468572684 7432:0.155452577698781 7433:0.777262888493903
+1 6:0.0167042984759204 26:0.0361504044643208 27:0.0486389109334303 28:0.0616764035515532 64:0.144880663652006 80:0.0543816713172149 94:0.10027905004285 97:0.0521161422739269 132:0.101311962513822 142:0.00649750181848441 176:0.043292851449633 199:0.0390410938135096 204:0.050139525021425 226:0.0647616708951074 274:0.0902628128654204 292:0.0823601808419049 308:0.0617116330366556 322:0.0723840943117783 337:0.127707132293207 355:0.0502675520334306 373:0.0596237876301765 377:0.064283390393633 387:0.117915295200501 414:0.0617116330366556 436:0.0737734151625057 441:0.117790408063036 506:0.0934514939190381 510:0.0755084859874002 575:0.0871720869731503 631:0.0560543960394348 679:0.10507028430021 1038:0.110896510985688 1155:0.0972261881336695 1432:0.0993109679558291 1543:0.117090693804588 1980:0.103708491111106 3393:0.159789652431605 3904:0.142665907700135 3929:0.145214840614916 4623:0.444249528805868 6653:0.310381854290085 7443:0.162488859822867 7845:0.582774769611944 7991:0.169081605305848
+1 6:0.021578707017297 12:0.218200096483012 20:0.0304310780963478 39:0.433455250198632 41:0.0496810327257733 42:0.0645514341322355 47:0.0255334310099277 63:0.128266424039055 75:0.0546661430766473 82:0.0809279308755206 83:0.111823587949922 84:0.0316611048974729 86:0.0838159892355934 108:0.0998772454952342 110:0.0520637261600171 114:0.0378803385955889 140:0.114364060742047 142:0.0895307680874546 173:0.0403223183283766 176:0.0279629748810364 181:0.0455348468709471 211:0.0536521555434606 215:0.0343676850083745 218:0.122402644320936 227:0.0383457853229485 229:0.0847536034498847 239:0.0457366955893572 268:0.311452379249664 276:0.0419079946177967 283:0.0404402632549957 286:0.0302277341553897 296:0.145940792129078 309:0.039701163834775 316:0.367470126469971 317:0.0643068837011698 345:0.118766825525366 346:0.0449453083774842 350:0.393710020909135 355:0.0324679536638358 365:0.0571588959825774 370:0.0637969357029 389:0.0459757182452231 408:0.0635323545634075 437:0.0485237509976519 455:0.0787781234012662 457:0.0743979899590383 477:0.0576809353254027 507:0.0288450576981768 509:0.0500742146268188 534:0.0411187065190958 537:0.120668372213396 548:0.122158197000655 560:0.0642631792868706 609:0.0764051438923456 612:0.0627986691919265 631:0.0362056925320789 655:0.0408484548465727 684:0.0504886058880966 706:0.0549190881499521 780:0.054731322292111 789:0.0554317631169977 848:0.0596249721378147 891:0.075886642191892 893:0.169804029064405 987:0.0880845540046425 1069:0.0858891809226905 1128:0.0811290969109823 1335:0.173963171148099 1782:0.0664269742605047 2116:0.0815038513572776 2301:0.095647341296543
+1 6:0.0215432060468235 15:0.0738089694862195 28:0.0795428477199152 31:0.0410555831021736 48:0.131793558576713 88:0.0822510108531047 102:0.205275698024725 142:0.00279323354339004 144:0.0640394348797675 172:0.0844719305867803 205:0.0852325873170379 252:0.0777377179861285 275:0.144869380908784 289:0.281150344741278 308:0.0795882824957352 409:0.0550109556477773 561:0.0954536088556569 671:0.131565111406569 768:0.13461590187243 895:0.336038042726044 1159:0.219063943368608 1236:0.118710085690718 2975:0.153121563016949 3704:0.600440082815093 5998:0.427010514727252
+1 6:0.0221564162653725 12:0.149361193975363 15:0.0108442690105806 17:0.0172475440589258 26:0.123298814299617 27:0.0092163100489967 41:0.0291492015898155 63:0.0684157907204977 64:0.0549052226168798 67:0.125330387572255 68:0.0194310855086858 80:0.0206089459744709 88:0.0966768233500172 100:0.0195591183689902 110:0.0305471920789599 114:0.0222254161282856 132:0.019197026419396 142:0.0147740950988885 153:0.0549052226168798 158:0.0227183848135795 162:0.0171427495639041 173:0.0236581914874892 180:0.0243913340175416 192:0.0511234796154896 199:0.0147953487581057 204:0.0380026114432814 209:0.0198832460733069 232:0.168567470387 268:0.0304562515789061 269:0.0337985368577426 286:0.0177354267444949 339:0.0246192929944623 351:0.0224623950439734 355:0.019049823939448 373:0.022595543467136 387:0.022343097311002 409:0.0161647996368517 423:0.0239811858393223 431:0.0352937811928472 433:0.05119226971253 436:0.0279578080373378 437:0.0284701931928801 441:0.133916598954189 459:0.0289131370360227 493:0.028256914683179 506:0.0531227730619981 507:0.0169241731820487 567:0.06869445818143 591:0.0665649199922596 611:0.0409527409075264 633:0.0329145807840296 673:0.0320035553739087 676:0.031650468600533 696:0.0349329389717746 712:0.0871978548749598 717:0.0320759286127359 721:0.0419127681689171 749:0.0368456726322834 772:0.0293267741819893 780:0.0321123426635668 789:0.0325233101834864 794:0.0369724593862079 800:0.05582538482345 819:0.031789985470776 844:0.0346840755717151 880:0.037231724561623 953:0.0345864932147504 989:0.267955429554866 991:0.0336230816297213 1003:0.0334511009920244 1009:0.197471557001417 1025:0.038581455397415 1033:0.0379159158766873 1059:0.0290147140816802 1060:0.624599270274497 1128:0.285603773220005 1189:0.0431209264663749 1201:0.0403670310264668 1250:0.0427405121473597 1272:0.0399974119088414 1338:0.0399974119088414 1470:0.0490120632577115 1548:0.0348325362535342 1624:0.0400883524088952 1723:0.0531967009934557 2040:0.301846485264624 2055:0.0487603140831115 2146:0.0487603140831115 2246:0.0400883524088952 2301:0.056118874347321 2456:0.0893569110322711 2564:0.0482777044629138 2663:0.0513418658033853 2723:0.123783321624658 2965:0.0965554089258276 3389:0.0640766196518487 3490:0.0675979780460321 3502:0.0536204308057526 3653:0.0480460977134228 3737:0.056118874347321 3742:0.0567180593876392 3766:0.0588124887630619 3939:0.0640766196518487 4471:0.062737861323391 4781:0.114723335478274 5459:0.0605552612576653 5933:0.0640766196518487 6019:0.0656600346772563 6020:0.0656600346772563 6217:0.0605552612576653 6526:0.073617779981784
+1 6:0.0172167327910997 15:0.0884791220816024 29:0.0312639085165262 60:0.0653383972108223 63:0.0186069683245041 75:0.0174463164510504 80:0.0560499266192808 88:0.0657327267156946 134:0.0616527408220777 142:0.00446454956009427 174:0.0631014154036511 176:0.0446209373142823 240:0.077495413654188 255:0.0801225396576819 285:0.0918013110009466 345:0.0631726667057591 346:0.0717199009123625 355:0.0518095993477267 475:0.0697545441590641 641:0.27246207973727 997:0.0818673298748902 1027:0.0899568786168424 2223:0.109277804001481 2280:0.116925586358361 2284:0.127750714798715 2642:0.119491494732586 3219:0.131947506667688 4050:0.134002697009939 9163:0.866357867722916
+1 2:0.034554191368255 6:0.0084644392916217 15:0.0144999667188668 26:0.0732728535465068 29:0.0307411933341676 31:0.016130955160303 80:0.0275564014918099 88:0.0646337120415071 96:0.0524437166989643 102:0.161307809079025 110:0.0408449170771756 134:0.0909329118682156 142:0.00768233335037092 159:0.025460848259063 172:0.0331894670989934 205:0.0334883331406139 285:0.0451332220396946 312:0.0383601003185628 351:0.03003466441545 373:0.0302126983338859 386:0.033706618505828 388:0.044010373172062 405:0.0402492767995682 755:0.0441720338733077 768:0.0528912979158967 823:0.0482212471450957 903:0.0471214567880629 1080:0.0427922331467726 1626:0.0608260184153835 1820:0.0539751094197444 1946:0.0589387771796947 6424:0.0838873418129401 9141:0.425936422731169 9143:0.851872845462339
+1 6:0.00622955020256449 15:0.0213430015854929 16:0.137110371526298 26:0.0269632106703707 28:0.0460020817745663 29:0.0226245118624092 62:0.142643056461084 63:0.0134651614451434 67:0.035238187075788 75:0.0126252414439317 81:0.0379290880534455 85:0.0381764548972317 132:0.0377823682634723 142:0.00161541309573104 144:0.0740719600713642 151:0.0983948183199254 158:0.0447128822258996 172:0.0977054447985434 174:0.0456641152394642 177:0.130036683155384 179:0.0339584945116702 183:0.164410970805801 186:0.035350455135106 204:0.0373971632156788 205:0.0492926336434718 206:0.0594160879023199 299:0.0515705058834895 322:0.0539885407378702 327:0.0523899231554125 355:0.037492653690747 377:0.0479465340284065 389:0.0530908630768282 396:0.063273443071699 400:0.0548917640921143 471:0.0649386549504664 480:0.0458192698652959 574:0.0466441385008696 586:0.0915866255199115 609:0.0441147543483493 610:0.0802076297896015 717:0.063129805666922 731:0.0717898520625305 781:0.0675073911640395 896:0.0788993493418544 1538:0.0792630386065388 1634:0.216620444389701 2084:0.0945612782819949 2754:0.0873334915992147 2886:0.578755027052581 3402:0.123476674397242 3416:0.0986018127057319 3676:0.541551110974252 4288:0.0997810906499655 5005:0.107333227683445 5762:0.137959325393149 5763:0.137959325393149 5764:0.137959325393149
+1 6:0.0195161211888304 15:0.0668639936964319 28:0.0720583488099458 60:0.0740646958817609 63:0.0210920302466142 68:0.0599044517292932 75:0.0197763669964953 142:0.00506081446030118 158:0.0700389273581363 159:0.0587040656888088 179:0.106386187241442 229:0.0511016591430358 337:0.0746019916402055 351:0.0692497317782134 365:0.10339080465957 404:0.0819450967818633 499:0.0726824875640673 513:0.146042815574508 530:0.0802171204662682 553:0.124740882774507 561:0.0864720039482186 731:0.112452697821087 1378:0.358991728184873 1829:0.160425875258318 3143:0.173009912284037 3710:0.154451353920484 3733:0.477998679878318 7387:0.580247127763325 7538:0.21610155034898 8116:0.202424531357715
+1 6:0.0188484093428972 11:0.0846984843343839 28:0.0695929914454753 31:0.071840044089928 47:0.0446055047893251 60:0.0715306946667044 63:0.0407408025513271 68:0.057854919875255 80:0.0613619304764777 142:0.00977533410796851 179:0.0513731797972346 209:0.0592012014931918 310:0.0967225895653355 325:0.0846258636461476 345:0.0691597119964656 351:0.0668804666056611 399:0.088861778810582 490:0.0975289270672616 505:0.271161693122582 513:0.0705231009508439 530:0.07747262420783 561:0.0835135071844843 697:0.101032015980953 727:0.201796762113298 847:0.10050157070771 1379:0.0994722487309939 1899:0.135445911334796 6761:0.195498910421708 7715:0.438385262659299 9145:0.711348717832342
+1 4:0.0130539493688478 6:0.033196883536709 12:0.122065839084106 17:0.0822243447333051 25:0.0226496955804241 26:0.0261245934237046 27:0.0175747933050342 29:0.0438416760556429 31:0.0230052263397358 42:0.0180557320973668 50:0.0572916262727732 63:0.0195695463963496 67:0.0170710996104595 77:0.0227567156621278 78:0.0231849970497583 80:0.01964983620399 81:0.0183747035255155 88:0.0230444068549542 98:0.019576148833992 100:0.0186488660177574 101:0.0293314926849277 108:0.0279367424059186 110:0.0873767132370959 111:0.0188732402228535 114:0.0211910782350208 132:0.0183036252903023 138:0.0253066331330498 140:0.0213259072147576 142:0.00469551021054879 165:0.0586035198585017 175:0.0292131969079347 176:0.0469292733663922 178:0.0243557857594762 179:0.0164511540046928 183:0.0265495692087465 185:0.0527218581534502 215:0.0192260240739723 220:0.0968403317390757 229:0.031608662224147 265:0.0285098402361736 268:0.0290388628149325 274:0.0326148396170282 295:0.0256240780493388 299:0.0249832728626306 308:0.0222983856817794 317:0.0179873287051421 339:0.046947095246742 346:0.0754301240249722 353:0.0338544751897335 355:0.0908163669769169 386:0.0240354145234366 394:0.0562296518103395 422:0.027519559132084 434:0.0261141952608886 437:0.0271452326397011 462:0.0741687253737978 466:0.0278865570186125 475:0.0244543650613468 485:0.0208847609048092 496:0.0253066331330498 502:0.0208312341278667 506:0.0168835060053217 507:0.0161365472706449 531:0.0679159671640082 561:0.053486802786458 582:0.0254545042689479 586:0.0221845182312248 591:0.0317335436853456 609:0.0213713425197479 629:0.0368595371962409 643:0.0491082641884275 654:0.0315368464663628 662:0.0314594574585923 671:0.0184304115154586 709:0.0263186640088879 719:0.0649661013555855 720:0.0600931640399674 757:0.0286732777173165 764:0.0279116116929746 780:0.0612357637549375 795:0.0715076440249083 800:0.0532273542355998 807:0.0392417068820439 836:0.0342225608350234 858:0.0605541396844175 880:0.0709980306740791 937:0.0408705789763134 964:0.0361513654033583 969:0.067504489423029 987:0.024638199451399 993:0.0331640284772385 1012:0.0402912824368362 1021:0.0323105326969942 1037:0.0337522447115145 1042:0.0343854624209503 1116:0.0351911522376255 1128:0.136156098666241 1134:0.0367129747230969 1143:0.0358187679419269 1176:0.0340628022418607 1177:0.0407514321213035 1223:0.0370843626868989 1229:0.0340628022418607 1268:0.0408705789763134 1380:0.0621660067609877 1386:0.0432128422544731 1440:0.0373939525225427 1530:0.0819829305256189 1584:0.04051816138406 1606:0.0477675359078834 1614:0.0381359916982571 1795:0.0385789081536961 1838:0.0462578106686238 1855:0.0390468611026573 1865:0.0358187679419269 2047:0.0414934712970179 2066:0.0404039449034496 2123:0.049277261147143 2240:0.0409914652628095 2246:0.0382226999623565 2301:0.0535071851924471 2418:0.582700468527599 2557:0.0511250155066442 2564:0.0460309317214 3350:0.0483388357653685 3482:0.0460309317214 4141:0.0644520684352729 4354:0.0540784850499322 5156:0.601508143089683 5300:0.0587124191507092 5711:0.115474218475503 5760:0.059818134334496 6302:0.059818134334496 7033:0.0626043140757717 8314:0.140383435439673
+1 6:0.00833491116149093 11:0.037454319332578 15:0.028556158366203 60:0.0632628435132521 63:0.0180158953328927 75:0.0168921129785942 88:0.0636446466615433 98:0.0540659207839559 102:0.0794196881805992 108:0.0771564271751693 142:0.0021613638552081 176:0.0432034989413624 245:0.0963720640277634 312:0.0755461802691585 336:0.0762033943864167 346:0.0694416309840735 373:0.0595007295547908 405:0.0792667145172199 571:0.0657820289464304 952:0.0776482628495448 1033:0.0998437882090438 4619:0.141198407403867 5514:0.438904751426389 9146:0.838836955785495
+1 6:0.0189905528536157 15:0.0975950236737604 26:0.0821963481613904 31:0.0361909095212316 88:0.145010187014343 102:0.271428889304723 134:0.0680047513868135 142:0.00492452693651531 150:0.0828069564540783 159:0.0571231676314603 172:0.0744628565947239 176:0.049218180866628 179:0.0517606058128895 457:0.0654746811005576 533:0.118924510765197 574:0.0710964635253668 755:0.0991030019853846 757:0.0902153262236904 952:0.0884582577465623 1046:0.106679361335323 1305:0.0863604355533389 1744:0.652758831082834 1863:0.114392451634152 3588:0.149437701995752 4573:0.536743409872682 8696:0.210281944549482
+1 6:0.0239228555569802 11:0.0537506791624878 15:0.0409809318072399 27:0.0348288089555693 28:0.0883291025699017 41:0.0550780067066852 86:0.0929211283253091 88:0.0913364077648304 102:0.11397516373678 118:0.156650125198867 142:0.00310177243118763 153:0.103744530024491 176:0.0620013245915317 245:0.138303511746838 276:0.0929211283253091 312:0.108416294033864 373:0.0853894739304926 764:0.22125510654357 952:0.111432991930523 2216:0.325911455213687 3089:0.388045980654317 5100:0.686522354733738 7928:0.278204572229838
+1 6:0.0273388071295083 29:0.0496446088476061 31:0.0521004471470169 81:0.166454397054929 142:0.0070893508556191 159:0.0822345339043528 355:0.082269537502308 365:0.144833147950034 409:0.0698101249737742 425:0.196458469205406 434:0.118282796255456 881:0.155747041218551 1046:0.307151298514221 1424:0.127112303363987 1755:0.423331972942383 2796:0.23551960533341 6708:0.302721967557763 6762:0.567125523307057 7147:0.302721967557763
+1 6:0.043709353947038 12:0.181325666645676 26:0.0582111181221212 27:0.0685306223451167 29:0.0488442622274674 37:0.0159084423024675 39:0.033769131294295 40:0.042016068178281 41:0.0928918212166447 42:0.0201159944741477 51:0.0228354020775357 59:0.0626335032673354 60:0.0255198882539018 63:0.0436050872983384 67:0.133133068493631 68:0.0206408045809486 83:0.00871182301183249 84:0.019732934511053 86:0.0522387147233479 92:0.0221958694445683 108:0.0622489692284593 110:0.03244896544337 111:0.0210267849558728 132:0.020392173699248 142:0.0200532967370604 148:0.0295553417053809 151:0.0265531823242764 162:0.0182100039429356 172:0.0263671454870187 176:0.034856114709108 180:0.0518197255320267 190:0.0288278379744228 194:0.0532780016677658 199:0.0314329224979768 203:0.0509787819183305 204:0.0403685360766829 215:0.0428396469272227 218:0.019072007848323 222:0.0428801570842732 231:0.0720900522471926 232:0.149218298235218 240:0.0302681789126778 268:0.226466542890351 269:0.0359027288563375 284:0.0612554834045707 286:0.0188395793651987 309:0.0247439395593149 317:0.0200397858633538 322:0.0291390865924082 345:0.0740219900021481 346:0.0280123776369777 353:0.0754349291592741 355:0.0607074205493861 373:0.0240022718698348 375:0.0238353494282843 384:0.0364355785481843 385:0.0351787949902807 390:0.0307131792053493 396:0.0341504013901374 399:0.0317030706308039 408:0.0197984213752562 426:0.0605363578253555 430:0.0261683854128844 433:0.027189670765414 434:0.029093974408352 437:0.0302426590533715 441:0.0711269153728724 459:0.0307131792053493 466:0.031068572786989 475:0.0272447480827755 478:0.0263671454870187 485:0.0698034949825666 504:0.0357163503304093 505:0.0241854777849942 507:0.0179778196739779 534:0.0512548595854774 561:0.119179906246962 571:0.0265361140062599 576:0.0329136533283072 588:0.0460850811825702 591:0.106063567953464 597:0.030065969759802 613:0.0310964863430996 618:0.0481436748903672 654:0.0351353811536623 656:0.0331900911868694 709:0.0293217742108031 712:0.0617510151126118 729:0.0361895526813467 749:0.0782791396925931 772:0.031152568116149 776:0.0419282388316207 780:0.034111557445355 793:0.0403523729513495 794:0.0392742499499911 819:0.033769131294295 856:0.025234155484805 872:0.0383703392120389 909:0.0296027732919023 965:0.0335842468850202 989:0.0406625004144139 1009:0.0299665033164067 1013:0.0416608165348061 1021:0.0359973494115085 1033:0.0402764431132042 1045:0.0174662579195149 1060:0.102074597256713 1074:0.0439417203553616 1121:0.0441695201578127 1126:0.0358557800361501 1128:0.657333251606446 1141:0.0447649153316452 1154:0.0456688260695974 1162:0.0390068276531765 1190:0.0363858456878167 1242:0.042681753238472 1243:0.0447649153316452 1305:0.0305800539046004 1335:0.0722822503029476 1373:0.0390068276531765 1389:0.0428801570842732 1433:0.0324166521940246 1439:0.0396198118185265 1457:0.0445221270234497 1502:0.144431024671102 1744:0.0462281138656097 1782:0.041400928271286 1880:0.0939571236392606 1942:0.0436102323618003 2040:0.0458055015065443 2106:0.0913376521391948 2160:0.104126804378407 2246:0.0425841288009529 2301:0.0596126612786548 2444:0.0476262258202888 2564:0.153849973485582 2674:0.0496848195280859 2768:0.0545382510099735 2825:0.0454014037727828 3924:0.0579306677484752 3994:0.0616712549864519 4440:0.0643252438680815 4471:0.0666437258393987 4781:0.304664135647899 5151:0.0579306677484752 6288:0.0744604072256644
+1 6:0.0304095328325391 17:0.0236721386283158 29:0.0315547127998734 49:0.0392409342937484 63:0.0187800428486319 65:0.0310793856459217 67:0.0245735881403077 75:0.017608595058983 94:0.0521583295134604 97:0.027107266378494 106:0.0304083649004101 142:0.00563259625212518 169:0.0316660037833603 176:0.0225179916495255 178:0.0701195660202502 179:0.0473623717474417 185:0.0758923126112401 189:0.0650172198255874 198:0.0756517323186632 199:0.0203065170124848 206:0.0414342108429049 225:0.0413941444345956 226:0.0336846087886344 227:0.0617580981544442 229:0.0455001883233336 398:0.0337898146370837 417:0.0508324217180747 426:0.0391081223877154 436:0.0383719041587954 506:0.0243035500000824 507:0.0464566285340491 515:0.031386348838986 565:0.0924144048348444 582:0.0732827431734486 586:0.0319342764405903 626:0.16400287115634 631:0.0291556776620194 636:0.0444298148053886 716:0.0415958369836446 719:0.046758857197913 726:0.0400347272111844 738:0.0526404633572589 741:0.0526404633572589 882:0.0326230403460143 913:0.0453409803421427 963:0.0368581001982303 1031:0.213529503291117 1034:0.054772658001812 1083:0.0465721210772801 1225:0.0775006811093794 1337:0.0559333332308176 2067:0.054173549735481 3236:0.0650372144543802 3937:0.305013984815457 4935:0.736702377574828 5343:0.163711639461073 5734:0.0845156340161388 6413:0.0901179575428109 7277:0.360471830171244 8108:0.0927777718284132
+1 6:0.0214465682241563 15:0.0367389397891935 20:0.060489462320871 26:0.0464133298858682 29:0.0389448773521117 31:0.0408714172843885 63:0.0231783591264474 75:0.0217325563780079 81:0.130579054372719 83:0.055569414008809 96:0.0664389990501766 142:0.00278070374595657 154:0.0775168371391894 169:0.1563289314526 179:0.0584547154812526 189:0.0802443574099951 205:0.0848502537107628 228:0.0811000061992573 229:0.168469217101287 245:0.123987527043088 312:0.0971939759059833 345:0.0786930321127676 349:0.212608864449272 373:0.0765506932863117 402:0.0817338262152568 405:0.101980631098544 409:0.0547641892674582 413:0.0927180373183373 427:0.113910524565208 457:0.0739424084175955 467:0.134600520545324 473:0.0944124302475132 480:0.0788713522801829 506:0.0599909610952264 507:0.0573368457487091 535:0.203375730250379 571:0.0846319021515933 574:0.0802912462447195 625:0.238432274349542 631:0.0719679686433151 640:0.100081731128434 918:0.123987527043088 922:0.304869390442159 1112:0.129186629647449 1182:0.1605380696261 2335:0.158460307478653 2775:0.158460307478653 3679:0.222447456643729 3710:0.1697289880053 3930:0.186440633283534 4396:0.212547522328517 7262:0.474954689824112
+1 6:0.0271570953582214 15:0.0310142204193862 29:0.0328764253224214 31:0.0345027687729734 83:0.023455250267623 97:0.169456148963799 102:0.172511980308053 134:0.0648326401188195 142:0.00234741011561464 158:0.0649737657276232 174:0.0663560338324498 181:0.0764082962341901 196:0.252534862059364 220:0.0726195761899585 277:0.0819787944987327 278:0.0781499936965243 375:0.192519092260251 413:0.0782705669446025 427:0.0961608075035533 467:0.113626855775101 502:0.0624845192788232 505:0.0651156977728534 587:0.114651250042435 697:0.097045716778643 764:0.0837225307068883 778:0.086507304679128 796:0.0795732346149911 847:0.0965362006489889 863:0.0956689490481614 876:0.087363873711158 987:0.0739037370117684 1046:0.101703256030131 1154:0.122956325379438 1359:0.100491403964858 1676:0.122956325379438 1775:0.734179473607267 2171:0.125250697630126 4140:0.164052312345757 6142:0.153352508903043 6537:0.179428033169047
+1 29:0.12954965333945 63:0.0771025252605067 67:0.201776504516057 68:0.218982452076469 111:0.223077395595885 142:0.00924997665473067 268:0.343232736474009 355:0.214685749595443 772:0.330503868092918 1128:0.536444679103249 2674:0.527116255016501
+1 6:0.0111089558646045 15:0.0380602860434161 28:0.164068056118469 60:0.0843181316322979 118:0.145485920179894 159:0.0668309925420078 179:0.0605570875090245 205:0.0879019630293733 365:0.117704114937191 408:0.0654143107141278 505:0.0799092174376336 533:0.139135195430472 876:0.107211916931793 1135:0.150890554445907 1527:0.288899304812483 1586:0.175833430970193 1665:0.239463457135433 1700:0.159659377477006 4300:0.603969196987502 5152:0.412830065920225 6673:0.23724959034844 7133:0.24601841337954
+1 6:0.0119702218392989 15:0.0820221221075272 63:0.025873612758428 75:0.0242596874484387 81:0.0728816019453764 142:0.00620810571846704 159:0.0720123309713808 178:0.0966050244198001 179:0.261008066017972 204:0.0718594963193106 229:0.125372903842894 365:0.126829594461321 471:0.249562193232753 582:0.100962992152239 856:0.0898379718172954 1411:0.151606887156884 3331:0.433862873652467 3513:0.195453805657182 4004:0.196794567632099 4126:0.196794567632099 5177:0.219560368118772 6456:0.242326168605444 6696:0.265091969092116 7255:0.465755015404749 7604:0.255643308189047
+1 4:0.0182091289770879 6:0.0336776566443067 11:0.283755357860756 29:0.107021847932439 42:0.0251861827594723 86:0.0327026789014349 97:0.052535865174381 98:0.0273070324482416 118:0.0275657368597233 122:0.0453110428613085 144:0.0250275898453639 151:0.0332458484080565 179:0.0229479352668754 199:0.019677757709563 203:0.0319139309741921 205:0.066620395412138 237:0.0361762325991184 243:0.0396937537425784 255:0.0391819315081688 258:0.0399202447075122 276:0.0327026789014349 277:0.0381233751735717 281:0.048593505565085 286:0.0235880502757785 308:0.248834536974283 309:0.0309805903322932 328:0.0427092938971068 373:0.0300519870759119 375:0.0298429922322837 387:0.0297162346461225 399:0.0396937537425784 436:0.0371837786079768 448:0.0381233751735717 455:0.061474086210634 484:0.0465280273158647 490:0.0435652905625243 496:0.105901685461239 499:0.0627116381516856 504:0.0447185709898215 505:0.211969587226028 510:0.0761166016184642 513:0.126008128118742 538:0.0368868298860275 550:0.0342976519397025 564:0.0521613256805655 570:0.0488384052502465 580:0.0380907921643241 626:0.0397311951663473 641:0.033310197706069 658:0.0778685626724827 687:0.0473684465424831 695:0.04155557427252 717:0.0426608633476695 767:0.0402685324743503 778:0.0402293111493345 791:0.0560478051534607 796:0.0740093897586855 814:0.0467324692744837 827:0.035957773716321 848:0.0465280273158647 863:0.0444898373942391 886:0.036259231776262 912:0.0400351776868204 1009:0.0375194887908385 1021:0.0450703952171001 1027:0.0439911699218815 1082:0.0577007156489841 1086:0.159230126851261 1093:0.0534395870380853 1159:0.0428067684765727 1164:0.0446609615481109 1198:0.100294854791807 1232:0.047662747026246 1245:0.0411669169639201 1251:0.0553023420503799 1253:0.0515194567168919 1280:0.0554476354015696 1289:0.057010918528914 1305:0.0765753666740769 1316:0.0584343379830948 1335:0.0452504092883805 1340:0.0565193265049362 1377:0.0401512657907976 1395:0.0449519257773514 1530:0.0571795444305604 1614:0.0531964060746171 1627:0.056202850019893 1664:0.0499640795919909 1665:0.0907439928036033 1873:0.0557438226329876 1916:0.10283172515497 1980:0.104543718485805 2050:0.108402891399602 2078:0.0584343379830948 2187:0.058819395943213 2261:0.063901127655187 2305:0.0674284900441251 3197:0.0762908004428627 3491:0.0687375121897819 3519:0.0719074413885072 3552:0.0738924268442585 3740:0.655189924620629 4015:0.0834411175107654 4493:0.0873275969836605 4686:0.0805382677048966 5003:0.0754348037774452 5482:0.146384343794401 5953:0.0805382677048966 6853:0.0873275969836605
+1 15:0.0311958062696504 28:0.0672385289993803 29:0.0330689142376703 31:0.0347047798027329 165:0.176813931088473 404:0.0764639747832224 414:0.06727693556363 427:0.193447643116567 467:0.228584264370151 561:0.0806880873782154 574:0.0681769854375552 713:0.0910491879021554 795:0.107873619822214 1626:0.130863520132878 7606:0.583379135639273 9244:0.687282446108325
+1 6:0.028372405641407 11:0.159370196115055 15:0.0243016060107965 28:0.0523789712746786 29:0.0257607614966666 31:0.0270351045960292 41:0.0326611416534312 60:0.0538373782098529 63:0.0459951774356882 75:0.0287507492451438 80:0.0461838861504382 142:0.0110360670048828 174:0.051994155223947 187:0.066140064464444 228:0.0536449992687926 243:0.0668815704435268 308:0.0524088900780125 317:0.0845528413005405 345:0.0520528647035683 346:0.118191189114522 351:0.0503373970052668 355:0.0426899513005273 485:0.0490863847359184 685:0.0749626808540425 1313:0.0927005241726124 2292:0.124504262894296 3972:0.122211948520078 4004:0.233226057789179 4619:0.120161403437999 5620:0.514181508466317 7450:0.157083489770174 9290:0.713859509580299
+1 6:0.0176708809247021 15:0.0605420339076347 159:0.0531536233325162 178:0.0713059417848771 179:0.0963274222673159 180:0.136173399027785 204:0.0530408132704239 229:0.0925400416439427 327:0.0743052117432552 341:0.073823017841547 346:0.0736117499371862 355:0.0531762484751742 365:0.0936152517280968 457:0.0609247820339525 471:0.184206435733933 478:0.0692883604990997 574:0.0661559013478103 586:0.129898331439033 856:0.0663110560444362 1001:0.103565189002264 1007:0.101989287392967 1411:0.111903826273238 2393:0.138283452637037 3331:0.320242150934558 3513:0.144268041662719 4004:0.145257682687138 4265:0.160121075467279 4849:0.158324487859502 5177:0.162061537910387 6456:0.178865393133637 6696:0.195669248356886 7255:0.687564652334142 7604:0.188695018306785
+1 6:0.0111572895427724 11:0.025068574656906 17:0.030398663859628 29:0.0202605502327336 37:0.0791856680056315 53:0.0859262499556565 58:0.07484396828363 64:0.0483850164628172 67:0.0631125271299836 72:0.0347172207263753 91:0.133727567117203 111:0.0348875559505764 132:0.0676692230770814 160:0.252819313482252 185:0.0324857974293785 199:0.0521533769732121 218:0.0316441977361053 232:0.0990329570489465 252:0.0402605919509137 280:0.116881771987362 323:0.0477226003014522 330:0.110963577847813 377:0.042936756694496 389:0.047543571539082 415:0.0485361958121244 437:0.050178496714212 448:0.0505205620036733 505:0.0802568924527609 510:0.0504343263688823 513:0.0834921019008156 534:0.0425209271241405 629:0.0681355798507283 636:0.0570547100463067 740:0.0798797892749139 762:0.148547530355504 839:0.0888181538752875 853:0.0590325261993761 903:0.0621125297197241 930:0.0488431090453455 1045:0.0289799439949131 1048:0.0757735301922712 1083:0.0598057605224011 1088:0.143308071340498 1094:0.172372630254952 1216:0.119453311031812 1322:0.125352066559727 1340:0.149797237316906 1431:0.065163675541588 1464:0.071313870900369 1525:0.0782082992246043 1579:0.0700241159627832 1625:0.0753298242066852 1645:0.0637662974284811 1791:0.0782082992246043 1990:0.222821295533256 2041:0.0877973233652167 2134:0.304001206082139 2202:0.0782082992246043 2841:0.384473311839278 2861:0.0952907326450979 3005:0.369465165088989 3270:0.217062124354646 3813:0.0969932394936378 4450:0.213456365221006 4481:0.105115451882597 4482:0.105115451882597 4483:0.105115451882597 4505:0.108531062177323 5811:0.102324695068571
+1 6:0.0309322820048382 15:0.105976791647076 16:0.1134682424876 25:0.0773835137533271 27:0.0300224622137402 28:0.0761397596932298 29:0.112340017881508 42:0.0616880694101061 64:0.178855741895501 80:0.0671343844222039 88:0.0787320592661239 96:0.0638830987863897 142:0.00534746081783891 158:0.0740059574815573 159:0.0620290851563968 176:0.0534451932343052 185:0.0600420525304928 186:0.0585098555370464 199:0.0481963819216012 245:0.119217741862605 256:0.0701678550568371 286:0.057773791946064 367:0.088004558077671 473:0.0907803954663731 546:0.0890824350516649 593:0.0993107404540663 608:0.112509138828464 863:0.108968167325316 933:0.119821839869965 965:0.102990053789874 1063:0.151106780524912 1308:0.120439119232138 2024:0.100416385003563 2401:0.139635828618089 2924:0.159658562846665 4727:0.200593128446583 4764:0.200593128446583 4924:0.174670486256636 5677:0.191583802215645 5678:0.38316760443129 6109:0.388560416127799 6334:0.208731898347023 6617:0.213889929871163 6640:0.200593128446583 7080:0.228341620154286 8932:0.228341620154286
+1 6:0.0285408457438195 10:0.0555526466529925 11:0.187446795645116 20:0.0371532365067012 29:0.0159468904000958 30:0.0659825051015351 31:0.0167357572098088 37:0.0103877169708189 47:0.0103912366401202 60:0.0666547663858556 63:0.00474546047868699 67:0.0124188205830272 68:0.0673890101746859 78:0.016866536142906 79:0.0148884811983173 80:0.0428843711075954 83:0.0227541955462847 97:0.0273985447895301 98:0.0996882918713216 111:0.0274596703781616 118:0.0143761042765853 134:0.0157237138190108 135:0.0400048846700942 142:0.00512380867500032 151:0.0173384004175162 162:0.0237811299686295 165:0.0213163362426487 166:0.0163811927825108 172:0.0344338483227956 174:0.0321863581132545 186:0.0249167733236127 190:0.0376473593159378 215:0.0139864770839562 232:0.0584609386436636 242:0.0153836641982844 243:0.0414022339280311 265:0.0207402334250852 276:0.017055126238894 295:0.037281819585336 304:0.0498717889337664 306:0.0344557335743641 307:0.0210833966681261 308:0.0162215473749267 309:0.0323140425691264 324:0.0232617235816072 325:0.019714324031865 341:0.0733748231528697 342:0.0410185127142485 355:0.0132133511399309 369:0.0196321411223009 377:0.0168975606604323 382:0.0385665815087679 384:0.0237912971257956 389:0.0187105511907056 408:0.0517110082319685 426:0.039528354792881 430:0.0170871400281715 449:0.0250949294227212 455:0.0160300063475383 459:0.0200547487172723 466:0.0405736192975312 478:0.0172169241613978 485:0.0303863376718081 493:0.0195995793465969 495:0.0241952862724079 499:0.0163527108673337 502:0.060616917494525 505:0.0473770894581389 506:0.0122823506790439 508:0.0170338778435374 510:0.0793927771722427 511:0.0569522448763906 513:0.0328579279188285 515:0.0317236077012554 518:0.0191462046247505 521:0.043298467714861 527:0.0209397189990877 531:0.0247036286524804 550:0.0357738756077019 560:0.0261529248833305 580:0.019865139209544 591:0.0923416052825331 592:0.0216264591087985 599:0.0205852688967793 613:0.0203050363308639 636:0.0449072309224711 643:0.0178625494554058 658:0.0203050363308639 662:0.183088080666232 663:0.0616414281976821 667:0.0211460375844488 687:0.0247036286524804 695:0.0216720950379532 712:0.040321488141619 724:0.0513786364053256 726:0.0202324581777544 796:0.0192987169186086 800:0.0193608196731551 804:0.0620449607232747 851:0.0249353462138458 862:0.0211250848195409 872:0.025054635534439 882:0.0164867939763939 921:0.0297323780549143 922:0.0312089746218028 966:0.021929466423346 987:0.0179237064663539 1006:0.0307785119798394 1009:0.0195671926350487 1012:0.0293109535449356 1018:0.0238239471452257 1021:0.0235051471587779 1033:0.0262992619702534 1046:0.0246658610438904 1064:0.0203416559806437 1068:0.025870502201471 1083:0.0235362785657284 1093:0.0278698545105709 1116:0.0512014592758041 1196:0.0275576647671191 1225:0.0195833642255334 1227:0.0239899056809117 1229:0.0247798817445609 1242:0.0278698545105709 1265:0.0281991120782073 1267:0.0294760026046875 1315:0.0334864124375089 1331:0.124091866688743 1341:0.0504349078561053 1342:0.0314363191057799 1423:0.0320453134031443 1455:0.0583006126446175 1468:0.0307785119798394 1473:0.0310984409914686 1488:0.030574291953579 1527:0.142737060956887 1579:0.0551153295342381 1613:0.0251763349026091 1624:0.0556122175914843 1645:0.0250949294227212 1676:0.0298203199647619 1730:0.0309898990668354 1744:0.0301855174630304 1791:0.0307785119798394 1792:0.02591666268664 1820:0.027999406037799 1862:0.030883278339424 1892:0.0291503063223088 1943:0.0526976835757869 1951:0.0547556661786077 1980:0.109043440852826 2003:0.0343609763556037 2024:0.0213814602697676 2030:0.0676423208656842 2076:0.0273778330893038 2154:0.0300001516425771 2216:0.0299095647650305 2271:0.0750024482149108 2275:0.0691044555574229 2444:0.0310984409914686 2546:0.036898329976524 2554:0.0333257652148821 2591:0.0319184894801456 2722:0.0605607684169852 2726:0.0366180974106085 2760:0.0691044555574229 2796:0.0378269203898342 2826:0.0375012241074554 3087:0.0378269203898342 3207:0.0435162757445554 3237:0.0351653579594087 3366:0.421984295512905 3376:0.0320453134031443 3549:0.039340816851982 3751:0.0353844335143761 3927:0.0407935563031819 3962:0.0371922377216104 3969:0.0333257652148821 4109:0.0378269203898342 4370:0.0363503238229457 4606:0.262508568752188 4624:0.104861912617238 4768:0.0435162757445554 4787:0.039340816851982 5297:0.0381712377499085 5454:0.0407935563031819 5618:0.0402694072652922 6164:0.0444448661578656 6799:0.0468873530333236 6800:0.0468873530333236 6845:0.0468873530333236 7541:0.045543155506757 8130:0.0435162757445554 9633:0.612753743110763
+1 6:0.00814699151363456 15:0.083736986044796 27:0.0474441707538095 28:0.0601614173801235 41:0.0375139207072079 63:0.0352194147109184 64:0.211982838841892 75:0.0330225237960056 94:0.0489079245603829 138:0.0683167194475343 142:0.0105631677681296 144:0.0484355700232785 172:0.0638894786723073 174:0.0597194255181371 205:0.0644647935917979 215:0.0519017636936368 218:0.0462128385973148 309:0.0599563346560219 317:0.0485578339204255 325:0.146313926107291 398:0.12673639823939 441:0.114897067513544 493:0.0727311623674442 498:0.334850167501129 499:0.121365019953495 710:0.0938866044096965 804:0.0767465810132251 1237:0.0999072351412758 1242:0.103420939690593 1309:0.0961729314977152 1558:0.098149257672596 1608:0.0882860118367182 2026:0.098149257672596 3749:0.59057838646285 3835:0.528600325953695 4030:0.153509450688072
+1 6:0.00936389230846941 15:0.0641630814063508 26:0.0405295073958931 27:0.0272654086394838 29:0.0680156626794904 37:0.0443050297437921 53:0.216343982462105 64:0.162430877773478 67:0.0529679636882197 68:0.0574846640235096 79:0.12700280613813 132:0.0567922267377256 142:0.00485638730574465 144:0.167010899976366 199:0.0437703622934589 204:0.0562132092377572 299:0.0775177416802083 309:0.0689118995631649 325:0.0840842809891921 337:0.286354038881877 355:0.056356744885749 377:0.0720704010092958 389:0.0798030529090945 411:0.0701537269834516 437:0.0842258395520701 587:0.118596846709942 656:0.0924344413661006 671:0.0571856172236044 903:0.104257407154746 1046:0.105203261724954 1192:0.1165195288162 1816:0.102900873184593 1990:0.124670339656024 2034:0.126078517491137 2041:0.147369964329073 2134:0.127568373326029 2864:0.138372278388649 3005:0.155039089214338 3320:0.139567508505425 3835:0.303778181072637 4481:0.176438868528307 4482:0.176438868528307 4483:0.176438868528307 4512:0.153945612950036 5365:0.18560285158112 5885:0.399961912051464 6495:0.194247770229145 6670:0.199980956025732 6679:0.207372318052551
+1 6:0.0166979523409689 15:0.0381391284763035 26:0.216820023321111 27:0.0486204325104589 29:0.0404291383841993 33:0.061600689846592 52:0.136135879765887 63:0.0120308645495195 67:0.031484647058008 80:0.0362406741069704 81:0.0338889156819125 85:0.034109933231814 142:0.0216501111688526 153:0.0965504146642844 172:0.0436489743145934 174:0.0408000147237592 176:0.0288509360331293 192:0.0899002484772571 199:0.0260175078000438 204:0.0334136509998091 284:0.0676027931065568 308:0.0411254587679877 322:0.0482377298994663 389:0.0474356720561108 561:0.0986470201931873 580:0.0503628257280314 657:0.0578098225144368 664:0.0629204456146843 742:0.057124862598045 812:0.0623440735839628 852:0.110474049115124 886:0.0479411759960855 895:0.115760077884545 999:0.489425349065596 1056:0.163968805251322 1317:0.072193704591604 1416:0.0671839638566985 1485:0.069409281361859 1558:0.0670550850652736 1681:0.0826008578637488 1709:0.0709851157797362 2000:0.708932658354287 2107:0.0713207786575018 2153:0.0886165822942858 2486:0.0935459924373581 3074:0.095074471635428
+1 6:0.0168885529162111 26:0.0146196625884817 27:0.0688455819427757 29:0.0490687453658466 31:0.0128740241581488 37:0.015981555845224 41:0.0155531237242098 60:0.0256371750004933 64:0.146478749655355 65:0.0241647970314088 67:0.0764256766860376 68:0.0207356675675042 72:0.0630608662177442 75:0.0136910082604683 79:0.0229060046966912 83:0.00875186164240065 100:0.0208722964155324 111:0.0211234218680026 132:0.020485894004185 142:0.00875889547773863 172:0.0264883261395478 199:0.0315773849336651 232:0.0299808179963107 240:0.030407288308244 278:0.0291601208421375 286:0.0189261641083963 323:0.0288946758045682 337:0.0516463152192941 355:0.0203288085089897 372:0.03334262938671 373:0.0241125838096995 377:0.0259969837550812 382:0.0296674417426474 400:0.0595254830534774 409:0.0172500867959867 465:0.0574436885442674 471:0.211261463465605 507:0.018060443859452 518:0.029456534028999 571:0.0266580712204926 625:0.0375517056173979 626:0.09563644868688 631:0.0226690785024681 641:0.0267268494384868 643:0.0274816239662275 671:0.0206277964485668 699:0.0503443050203743 713:0.0675508936402977 729:0.0363558760935955 733:0.0381239751767638 881:0.0384851048504413 890:0.106417674839897 913:0.0352534506201461 1045:0.0175465310204833 1059:0.0309627305944883 1113:0.0410091750271061 1124:0.0375517056173979 1145:0.0887450373377342 1149:0.0324050108905038 1157:0.0462968834124441 1201:0.0430772298170262 1227:0.0369085929505186 1237:0.0414211460653171 1308:0.0394547503093825 1467:0.0415057843005054 1599:0.0409289336397934 1608:0.036603032669675 1816:0.0371180441776438 1827:0.0454786032154733 1924:0.093173052866633 1949:0.0420305181511861 1990:0.0899413004337264 2026:0.0406922955330533 2124:0.0471944703933887 2296:0.0493018790528025 2341:0.0470387050067833 2353:0.0517729461346197 2426:0.0515190173095431 2708:0.0525793521181274 3318:0.0544391324725359 3749:0.489702944418498 4030:0.0636444134437891 4085:0.0669500134573801 4244:0.106317559358541 4265:0.0612128680523122 4349:0.0581969110595937 4689:0.615407891144629 5162:0.0563371307051852 5194:0.140136756737526 5196:0.0700683783687631 5198:0.0700683783687631 5247:0.0563371307051852 5799:0.136757309143251 7110:0.0669500134573801 7415:0.0721364331586832 8307:0.0748026194965995 8489:0.0748026194965995 9157:0.254953089025894
+1 6:0.0286686226541719 12:0.386522771369703 26:0.0248171404714127 27:0.016695230702091 29:0.0624713090570714 31:0.0218538878056501 41:0.0528034151126139 51:0.0389416592129697 63:0.0123934351565031 65:0.0410201780487145 82:0.0430070682287585 102:0.0546341293301636 110:0.221343429788298 142:0.0713682373326627 153:0.0994601259577049 175:0.055502338315851 176:0.0594408163202681 178:0.0925474240584511 179:0.0312556519620973 181:0.0483966473621348 186:0.0650736458310834 189:0.12871962611468 204:0.0688412566368223 205:0.04536930813956 232:0.101785956708536 252:0.0413797890267007 268:0.165513359596484 269:0.0612256279610044 327:0.0482200765379589 431:0.127868488848821 432:0.0538615209646968 433:0.0463670790408898 437:0.051573399870589 441:0.0404313747854539 448:0.0519249741725397 475:0.0464610034708506 507:0.0306579286302551 553:0.0732963125860764 586:0.0421485070642565 660:0.0738237014761356 696:0.0632805832415904 706:0.05837067488502 780:0.116342216419077 885:0.0803823979040567 944:0.0627411374124127 987:0.046810271595901 989:0.069342559789787 1009:0.204409864295723 1024:0.0887847412817941 1060:0.174069813492901 1123:0.0651221515370746 1126:0.0611455652167628 1128:0.172455890985523 1146:0.0656448672367564 1178:0.0907538448061395 1272:0.0724548127997672 1321:0.0665191085443312 1338:0.0724548127997672 1431:0.0669751490341437 1482:0.0679289134863891 1542:0.0870349067464503 1591:0.0680523046702159 1621:0.0936221813753085 1639:0.0774239046681565 1651:0.0785897931694032 1723:0.192730320693276 1795:0.0732963125860764 1836:0.0611455652167628 1864:0.100643301857865 1923:0.0850901754892408 2040:0.0781130204622837 2220:0.106538089847611 2301:0.101658640929965 2408:0.0971327416165866 2412:0.0843749479956923 2418:0.100643301857865 2465:0.101658640929965 2557:0.0971327416165866 2806:0.0912871940278819 3389:0.232147994590136 3467:0.0830352202086549 3502:0.0971327416165866 3547:0.106538089847611 3766:0.106538089847611 3939:0.116073997295068 4118:0.106538089847611 4208:0.106538089847611 4244:0.0902379856309897 4248:0.106538089847611 4471:0.11364885328091 4830:0.116073997295068 5050:0.122452894105515 5132:0.126978793418893 5493:0.103909945658332 5540:0.122452894105515 6471:0.122452894105515 6481:0.122452894105515
+1 26:0.155748041001792 80:0.234294440119447 142:0.0279934123733889 153:0.312097193339984 312:0.326151374653715 726:0.331613989332177 999:0.527352396928021 2000:0.572902492725577
+1 6:0.0127027342235077 15:0.0217603573176769 26:0.0274904678364393 29:0.0461338542558773 31:0.0242080106092167 42:0.0379994830492286 96:0.0393516080609895 102:0.0605193727638692 142:0.00329400398889115 158:0.0455872286773439 159:0.0382095467162328 172:0.0996160442654888 176:0.0329219204586911 180:0.0489442066734651 205:0.0502565357039735 229:0.0332612606876914 312:0.0575676831442473 325:0.0570329217057727 327:0.0534143917452688 404:0.0533367658085345 405:0.0604028038076168 587:0.160884402967758 613:0.0587418338777034 731:0.0731936802050211 737:0.0748425522559464 755:0.0662897549468871 768:0.0793749091953472 799:0.064075037952324 847:0.135464454163734 909:0.0559201824876948 1411:0.0804422014838788 1446:0.0662897549468871 2114:0.0909442861636895 2767:0.0999585123222129 3691:0.19470524738824 7935:0.590892459703732 8877:0.678218215906918
+1 6:0.0228643708506297 15:0.0195838498546571 20:0.0644883360640322 27:0.0166438910762372 29:0.0415194687189167 31:0.0217866847556646 40:0.0357152457395294 42:0.0683974219473092 63:0.0617766200677334 75:0.0579231632032516 81:0.0696057265035893 96:0.035415594172238 142:0.0148226609051778 158:0.0410275175482428 169:0.041665904610661 179:0.0934786124354854 205:0.0452297926487774 229:0.0598688271313643 264:0.0470552023504866 267:0.0611982146805594 308:0.0422345681137716 320:0.054257001531357 327:0.0480717946284559 345:0.0838953183922558 346:0.0476231591593961 351:0.0811304425384438 363:0.0533980861725087 383:0.0684729973875016 402:0.0871371351394876 404:0.0480019329682066 405:0.0543612139864882 408:0.134635250813411 480:0.08408542705651 499:0.0425760665741878 515:0.165191746422933 530:0.0469897161727022 531:0.0643185919854465 561:0.0506537120603851 579:0.067119034909116 580:0.0517210569154371 582:0.0482124585022149 644:0.0544661235200788 686:0.135195940690574 737:0.0673566745583322 842:0.0827798779966023 850:0.0523981656667706 1010:0.190928617815943 1014:0.140193841561528 1080:0.0577957649931329 1109:0.0790892314367573 1202:0.0708265368352192 1223:0.0702401538930894 1273:0.076743988163152 1316:0.0793442600931311 1426:0.0678430365311527 1472:0.0581245803235461 1711:0.0831032691814337 1726:0.0771858178535008 1887:0.196973027148822 2223:0.0725622063938849 2239:0.185438297439952 2575:0.0796035042895903 2789:0.180949533990439 2935:0.0910064761108755 3671:0.115717057298322 4237:0.102428108156603 4926:0.122076338316603 5153:0.361899067980879 5733:0.122076338316603 7937:0.132947601022233 8237:0.11857657342476 8915:0.126588320003951 9158:0.575275454911449
+1 6:0.00795701346838158 15:0.0817843402248583 27:0.0463378297439566 28:0.0587585254715709 41:0.0366391411872092 63:0.034398140311585 64:0.276052871935659 75:0.032252478251023 94:0.0477674505719404 138:0.0667236557016082 142:0.0103168473980997 144:0.0473061107746299 172:0.0623996528574548 174:0.058326840328306 205:0.0629615521248452 215:0.0506914769767306 218:0.0451352107726612 309:0.0585582250299812 317:0.0474255236247191 325:0.14290206129454 398:0.12378105783433 423:0.0602863890522906 441:0.112217806064088 493:0.0710351591210409 498:0.327041864255933 499:0.118534933630922 710:0.0916972816945146 804:0.0749569430325863 1237:0.0975775185573067 1242:0.101009287741801 1292:0.0954966500024976 1309:0.0939302943841736 1558:0.0958605350092098 1608:0.0862272882055653 2026:0.0958605350092098 3749:0.576806808667402 3835:0.516274002000036 4030:0.149929794894793
+1 6:0.0144808427831329 15:0.0496126751418503 26:0.0313385398584152 31:0.0275966094823702 33:0.0400661359602344 134:0.0518555789781019 142:0.00563264015260652 174:0.0530740464489178 176:0.0375302785914283 180:0.111590677961599 205:0.0572913657444994 229:0.0379171191266771 499:0.1078599241436 513:0.0541814388084171 697:0.31048322707072 1001:0.169738138821454 2163:0.0914943460740408 6457:0.879454164740843 7235:0.150197766537651 8722:0.160346031135832
+1 6:0.0184021921478108 28:0.0679454471421052 29:0.0334165871535224 31:0.0350696515339697 80:0.0599092482896584 88:0.0702587582730601 96:0.0570078724880778 108:0.0851747169709517 134:0.0658978446615351 142:0.00477195643651683 158:0.0660412889733765 176:0.0476933151159391 245:0.106387291091582 312:0.0833971291601341 336:0.0841226426199486 373:0.0656841948874667 405:0.087504310676457 490:0.0952200274946753 571:0.0726182626959472 731:0.106034192594976 1033:0.110219805573758 1135:0.249953011790287 2026:0.221696744845427 2062:0.147377478562007 4379:0.182376047559205 4508:0.158532046090773 7015:0.716019586132144 9639:0.428006931060468
+1 4:0.0310425692223146 6:0.021529880471116 26:0.0310624193815055 28:0.0529957642646065 29:0.0260641095143859 31:0.0273534587482968 33:0.0397131175803338 37:0.0339560360595747 60:0.0544713447935378 80:0.0467277283934604 134:0.0513986850940042 142:0.00372200771394882 158:0.0515105681009634 176:0.0371996033758619 180:0.0553037322984741 323:0.0613925617162516 346:0.0597914797106254 916:0.173923535356927 987:0.058590162285175 1126:0.0765329588342442 1700:0.206286852702042 2354:0.314255332672514 3170:0.111127584241641 4160:0.247302131235987 5489:0.274600147367882 8881:0.766341947325907 8883:0.153268389465181 9408:0.166917397531129
+1 6:0.0303734942022124 12:0.409508587030507 27:0.0294801101917585 29:0.0735404063467142 110:0.195421938660708 142:0.00262542980375298 153:0.0878123676527599 175:0.0980049379758866 176:0.104959425016517 178:0.0817092110881951 181:0.0854578485680176 186:0.114905764640889 205:0.0801122324778992 268:0.097420078947085 327:0.0851460632775813 431:0.112893832034461 433:0.0818740767220551 437:0.0910672957012906 441:0.0713929268273114 586:0.0744250052511565 660:0.130356440897063 696:0.111739609967006 706:0.103069790306173 780:0.205434798787072 944:0.110787067125855 987:0.0826566574237558 1009:0.180471460120811 1126:0.107969637107306 1272:0.127939284180892 1321:0.117458134286148 1338:0.127939284180892 1482:0.119947540139974 1591:0.120165421866846 1639:0.136713608923511 1651:0.138772311920874 1795:0.129425187962002 1923:0.150250559241731 2301:0.179506829826821 3389:0.204961182730342 3502:0.171515085785903 3766:0.188122864809151 3939:0.204961182730342 5050:0.216224913326786 5132:0.224216657367704 6471:0.216224913326786 6481:0.216224913326786
+1 6:0.0172341774525826 28:0.0636328478551083 31:0.0328437282298768 42:0.0515550292129131 63:0.0186258216265552 75:0.0174639937356028 80:0.0561067185790489 142:0.00670360982232558 158:0.0618495494570662 179:0.0469734331858944 186:0.0488988768865828 229:0.045126541963498 245:0.099634730397596 345:0.0632366757020664 499:0.128368017010591 535:0.0817150181802917 571:0.0680090728076165 667:0.0829977040005507 781:0.186760571927491 854:0.103614803653269 856:0.0646722996893959 908:0.0916555001525709 1001:0.101005764952002 1088:0.110680856779836 1581:0.122936448599555 1652:0.103223989445913 1734:0.119228108927555 2190:0.530989061444693 2219:0.247691869239913 3084:0.152780539765522 3135:0.144825084003369 4047:0.138023209281291 5757:0.308823575970751 7933:0.400840690151631 8308:0.381667282187617
+1 6:0.0303073884928658 27:0.0220619616509837 29:0.0275176316178178 31:0.0577577684665081 41:0.0348886140012896 84:0.0444681604635495 85:0.0464330735056305 88:0.0578561365109238 96:0.0938888000282876 102:0.0721964306828053 117:0.0782237546470338 142:0.0019647868095127 159:0.0455819808589759 172:0.0594183523908091 252:0.109362887512364 255:0.0705216537279283 272:0.119245251172455 275:0.0509512441924914 278:0.06541169596103 327:0.0637205617802401 345:0.111205684331206 360:0.186593952427729 405:0.0720573700451037 413:0.0655126160030066 427:0.0804867819723101 432:0.0711754650888394 437:0.0681518207480223 467:0.095105898176154 502:0.0522996635573533 507:0.121539029524385 561:0.0671429684223115 587:0.191926636320671 682:0.351974571475576 723:0.0777627715066918 737:0.0892832309606577 856:0.0568651598489793 867:0.0666029513640639 895:0.157581551652446 1067:0.0805909901495073 1297:0.111964722030567 1457:0.100330596422359 1976:0.485445045025151 2235:0.271542872250599 2402:0.104502437401875 3851:0.147405561733507 7322:0.485447209807558
+1 6:0.0172121699796151 12:0.116030960434702 26:0.0372495084045989 27:0.0250588554741277 29:0.0625112457912767 31:0.0328017878783191 47:0.0407332797422356 63:0.0186020370701369 67:0.0973626740293793 84:0.0505087092383156 110:0.0830568489316834 142:0.00669504953493414 176:0.0446091117880514 204:0.103327898338261 232:0.0763882699187727 252:0.0621093635226088 268:0.414047922944262 287:0.239648990941393 314:0.0686761506558857 373:0.0614365678988817 409:0.0439515788547277 426:0.0774748756713013 437:0.0774095546642924 561:0.0762636599780148 772:0.0797385712765655 780:0.0873124438591977 801:0.104080333778239 994:0.0985302491506244 1128:0.647123020487355 1149:0.0825648826169181 1159:0.0875117153284901 1242:0.109248842988659 1449:0.220551359878932 1509:0.108751697700526 1911:0.116549869342473 2021:0.125616494021331 2275:0.135443509619796 2301:0.152585444083811 2741:0.1346938108122 3117:0.14962990058096 7123:0.164647839752209
+1 6:0.0169266402304461 15:0.0579921980766377 20:0.0477411283584875 63:0.0731738042123773 72:0.0526692350129978 75:0.0686094221235988 81:0.103059130574995 138:0.0709692976773979 142:0.00877864866832086 158:0.0607458682002871 169:0.0616910722650669 189:0.126665241189724 215:0.0539169876326462 227:0.0601579429198599 229:0.0443212762989043 255:0.0787725185487181 280:0.088660229545119 346:0.0705114596849857 507:0.0905058701973434 586:0.0622137156651353 781:0.0917139509253245 940:0.115648693761904 1094:0.0871684079039709 1225:0.0754926348082952 1232:0.0958226018904931 1679:0.122095804692531 1734:0.117100529498769 1751:0.115299487058383 1792:0.0999071012069166 1897:0.1129918785336 4960:0.15337729054345 6731:0.187428288675124 7616:0.180747790773211 7617:0.542243372319634 9161:0.638820157504407
+1 6:0.0145432612538333 15:0.0498265264594901 29:0.0264091448063149 88:0.166576590776973 102:0.277152629831227 142:0.0018856397267983 198:0.0633153458351289 204:0.0436529682812385 252:0.157436168900559 308:0.0537279912081623 312:0.0659087910534506 405:0.069154698569741 448:0.0658523496314443 613:0.0672530670626606 761:0.0739422013784794 799:0.0733590107762335 880:0.171069853319954 952:0.0677427119886212 1045:0.0377746669586522 1330:0.0960315515626759 1863:0.0876035217302911 2024:0.0708183308805297 2449:0.273824303459573 2663:0.117951096216627 4530:0.11954811067129 6734:0.161037189392037 8251:0.621189392928625 9653:0.507381123417216
+1 6:0.0158273313796508 12:0.106695463923152 26:0.0685050535692954 27:0.0460853930740307 29:0.0574817819754918 60:0.120131093049842 63:0.0684214960447864 67:0.0895291707958354 68:0.0971635295212721 100:0.0978037472073256 110:0.152748697340107 142:0.0246255452317929 199:0.147965825706764 252:0.114224467852195 268:0.152293956921323 308:0.11694360795319 319:0.143579367782566 394:0.147447856775254 436:0.27960139492687 437:0.142362836885062 717:0.160393017430377 761:0.160941580259325 780:0.160575102867719 819:0.317926364987672 1003:0.334538905436318 1128:0.476045983779344 1602:0.218295905914829 1928:0.228332467001681 2301:0.280617771040588
+1 6:0.0214934392953762 29:0.0260199937657365 31:0.0546143213301935 63:0.0154860099960608 67:0.0405267266584121 75:0.0145200349806371 102:0.0682671642082255 142:0.0037157078955457 143:0.0631299083115334 153:0.0621393699704914 172:0.0561845285325393 179:0.039054978107862 180:0.165630377914965 199:0.0334894790150521 205:0.113380923124437 215:0.0456425092790468 331:0.0560069480391766 351:0.0508439456042449 408:0.042187538700576 414:0.105872568501169 475:0.058054571237989 768:0.0895366179883276 952:0.0667444915973395 1294:0.0813722972632773 1308:0.0836876793506424 1955:0.107744689747298 2161:0.0951271087648822 2537:0.107744689747298 5081:0.418149190738194 5212:0.153008969524446 5858:0.153008969524446 7930:0.333269750938988 9164:0.721043125658168
+1 6:0.0397094669560531 27:0.0192707406946147 29:0.0721085212402115 31:0.050450408573167 41:0.0304745989613021 60:0.0502331647644916 81:0.0402956826671984 84:0.0388421665768497 85:0.040558484024973 88:0.0505363313531337 96:0.082010237715783 102:0.0630623294870531 117:0.0683270923868611 142:0.00171620718616516 159:0.0398150693658307 172:0.0519008998174677 220:0.0530926563213017 229:0.0346588618627293 252:0.0955265846349209 255:0.0615994408768142 256:0.0450391620204545 272:0.10415865781845 275:0.0445050277230318 278:0.0571359814327199 327:0.0556588050694681 345:0.0971362356809417 346:0.0551393629659925 360:0.162986579765798 405:0.0629408624329276 408:0.116913211350134 413:0.11444826667655 427:0.140607614977267 432:0.0621705337559803 437:0.0595294328889579 467:0.166146703658999 485:0.0458002327401847 502:0.0456828486411772 507:0.106162233408429 561:0.0586482178875229 587:0.167644586616365 682:0.307443680906839 723:0.0679244316125086 737:0.077987353048613 856:0.0496707304338294 867:0.0581765223572347 895:0.137644751096461 1067:0.07039483152325 1297:0.0977992419409114 1457:0.087637035091352 1976:0.530034779553937 2235:0.237187987242234 2402:0.0912810657993753 3851:0.128756200470677 5456:0.137291117110644 5607:0.141343238181006 6623:0.131181031331447 7322:0.424029714543019
+1 272:0.372761596628149 360:0.291647084241222 427:0.251602315903298 467:0.297301788577109 587:0.299982090217147 682:0.366758429778745 1976:0.379376260856498 7322:0.505837270184295
+1 6:0.00946861425588046 11:0.0425488040730731 26:0.0819655457091206 32:0.0709798326398103 41:0.0435995107896919 64:0.0821237191872684 75:0.0191897548350654 81:0.0576503747746596 142:0.00245534957902388 205:0.0749224130875986 229:0.0495858673533776 308:0.0699608725462916 387:0.0668387509197869 437:0.0851677869442081 578:0.144421403114368 1013:0.2346460038647 1047:0.213413221429342 1245:0.0925940093640374 2240:0.128610147732825 2345:0.15566727781465 2976:0.127857047115613 3634:0.164626286101613 4244:0.298036179649944 4697:0.332402645995825 5179:0.157927846623994 9165:0.714700799206463
+1 6:0.0255063483376773 15:0.0436935264432958 27:0.0742683691159905 31:0.048608271282115 83:0.0330442804605175 142:0.00661416760266246 159:0.0767225379371803 179:0.0695200425290093 180:0.196554216211877 189:0.0954344075397139 204:0.0765597066243566 205:0.100912188144365 218:0.0723408608541754 229:0.133573337255305 245:0.147458046491846 255:0.118700419586268 265:0.12047819290663 457:0.0879395158383287 574:0.0954901723100551 1509:0.161156826079952 8919:0.8472935835223 8925:0.282431194507433
+1 6:0.0185354402664306 26:0.0802264954163304 27:0.053970756660654 28:0.0912499095587901 29:0.0673171054966701 31:0.070647173548806 63:0.0133547734870464 64:0.107175083936376 85:0.0378634827193151 94:0.0370905797036419 102:0.235488034641786 142:0.00801084935720453 172:0.0484522257327369 174:0.045289758908118 199:0.0577610897266605 226:0.143721819166591 232:0.0548406627718359 245:0.0714384193396211 252:0.0445895510336685 345:0.0453408980826313 387:0.0436137623266655 404:0.0518849154443798 489:0.0703966335108507 538:0.0541378627134801 609:0.0437530997425504 732:0.0676078639926367 772:0.0572459109485797 882:0.0927949563888318 930:0.0540948902608234 952:0.115117782697709 1027:0.0645647220212417 1046:0.1388303573841 1145:0.0811658418711518 1215:0.0724214554861125 1439:0.291221219477841 1558:0.0744340083387542 1607:0.0799398169244363 1863:0.0744340083387542 1916:0.0754617547269742 2305:0.0989630810851779 2709:0.0924979004858852 3718:0.0989630810851779 4183:0.122464407443382 4500:0.114802073814932 4573:0.116417831408457 5191:0.256336989175118 5640:0.70922381137027 5643:0.125077665880091 7419:0.131951363198471
+1 6:0.0154751675046572 11:0.0231800857147502 15:0.0530193214353901 17:0.0281086437312038 26:0.0223269304106726 27:0.0450599763302817 29:0.0374685276247558 31:0.0393220349299673 37:0.048813586914341 53:0.158906349194485 59:0.0320308539889281 64:0.134220095589925 67:0.0291790380699705 68:0.0633344037862078 79:0.174908541751331 91:0.082435652621567 98:0.0334608317639057 102:0.0491520126989399 132:0.0312857514367132 142:0.00401293631687299 144:0.122670813807259 151:0.040737994600432 160:0.0467547392468 199:0.0482245107708865 204:0.0309667817709317 224:0.098114677803668 280:0.108076726748107 293:0.146470165359401 299:0.0427030411986177 309:0.0379622473815201 325:0.0463204221047939 331:0.0403247191117217 337:0.276057185048898 355:0.0620917056279668 377:0.0397022054150816 389:0.0879239508862683 394:0.0480556961260365 411:0.0386463463547441 437:0.0463984040094724 489:0.0587738774847114 513:0.0386011990121744 515:0.0372686097944294 543:0.0570964031554117 546:0.0445672131119078 559:0.0738622114583843 570:0.0598444252334411 587:0.195998203300621 620:0.0733280469369939 626:0.0486848521442196 656:0.0509203657417127 671:0.0315024627309473 696:0.0569308611525677 774:0.0578662794396006 796:0.0453439190867509 839:0.0821272229487473 853:0.109170867190314 903:0.0574334114551079 928:0.083138630250558 967:0.066097984576196 1007:0.0595443359732934 1046:0.115908929292678 1047:0.0581325007031603 1137:0.0725627967943381 1145:0.0677650479599033 1154:0.0700652888648453 1192:0.128376759478072 1271:0.0657869021660628 1272:0.065184527007137 1311:0.0630027276293106 1338:0.065184527007137 1431:0.0602547055512811 1443:0.074417328877598 1478:0.0826238942564388 1523:0.083138630250558 1553:0.0718368079248317 1608:0.05589960495253 1791:0.0723166396351832 1816:0.0566861228375717 1939:0.0707039090625149 1990:0.206035516586887 2010:0.075597485479627 2034:0.0694542437639058 2041:0.16236658916471 2134:0.0702749768466608 2181:0.0924344775700029 2353:0.0790668702856296 2769:0.0794655918605694 2841:0.0888774535991937 2861:0.0881122034565379 2864:0.0762266414978101 3005:0.0854080687931911 3212:0.0821272229487473 3320:0.0768850709078031 3342:0.0811832945823551 3619:0.0888774535991937 3712:0.0934833780855126 3813:0.0896864554919735 3835:0.167345589543897 3899:0.0873862145870316 3969:0.0783016201429738 3985:0.0958478081249383 4481:0.0971967979005957 4482:0.0971967979005957 4483:0.0971967979005957 4512:0.0848056936342653 4537:0.0854080687931911 4624:0.0821272229487473 4643:0.0881122034565379 5365:0.102245060883567 5885:0.220331367220058 6463:0.0971967979005957 6492:0.21401476242832 6495:0.10700738121416 6670:0.110165683610029 6679:0.114237443574958 6764:0.10700738121416 7077:0.0958478081249383 7224:0.102245060883567 7587:0.110165683610029 7588:0.110165683610029 8186:0.10700738121416
+1 6:0.0239422104651679 11:0.0860706662773627 12:0.032279923780596 26:0.0207256974804031 27:0.0278855899047404 33:0.0264976803920089 36:0.0365862590962003 41:0.0220490271394648 63:0.0414008355382539 65:0.0685148880717547 67:0.0812591661303728 68:0.0881883224986788 75:0.029113773353948 83:0.0248143123266947 87:0.0446092589441813 92:0.0316107912208495 100:0.029589800627167 110:0.0924259781329668 126:0.0454953438013286 140:0.0338374109223196 142:0.00869198942073901 144:0.0284682906458647 153:0.166125544104222 159:0.0288070581706965 162:0.0259342232215125 171:0.124208670041255 179:0.0261027328215111 180:0.0369001657944848 199:0.0223829833074604 237:0.0411496077116225 268:0.0921508214296062 277:0.0867288725401279 310:0.0491447857265891 345:0.0702801536280833 349:0.0474698434379009 355:0.0288193200591588 375:0.203674180820487 377:0.0368548601891312 389:0.0816182598248944 412:0.0488035038753629 413:0.0414028900137518 431:0.0533938150571723 436:0.0422956674319744 437:0.086141647542751 440:0.216187198981331 478:0.0375514161840539 507:0.0256035523068579 514:0.0508663152973076 547:0.120210710000213 574:0.0717075066186657 580:0.0433273738688057 609:0.0678190045112763 631:0.032137025075519 695:0.047268481450085 698:0.0537981119574133 713:0.0478820690165152 727:0.051266507022532 771:0.0508007859218984 780:0.0971616203921226 789:0.0492025379625819 804:0.0451082535688305 852:0.0475206698553816 863:0.101212272500229 866:0.0535540440250943 884:0.395488955588671 930:0.0419245908086824 994:0.0548224184433119 1009:0.0426775298133517 1013:0.177996817407053 1095:0.0675913180804813 1098:0.0537162511783679 1100:0.0720120964257865 1128:0.504084674980505 1149:0.045939258071174 1159:0.0486916852214219 1320:0.0673587701949623 1353:0.206460362155463 1395:0.0511317508408837 1455:0.0635790269121337 1552:0.273258908636318 1558:0.0576878024302479 1567:0.0701758184179654 1652:0.114721366292906 2023:0.0701758184179654 2144:0.0669056696897951 2163:0.0605096519003476 2296:0.0698932567204975 2741:0.0749438930858922 2778:0.079282810652152 2877:0.0781872919998674 3307:0.0931578775542654 3605:0.0867789784806386 4220:0.0766983103146679 4496:0.0889738373711958 4785:0.0737665136545622
+1 12:0.226569616466668 63:0.0726471001996321 153:0.291504721857767 179:0.183212519468733 268:0.323398785113376 277:0.304370721590974 375:0.238261513804027 389:0.286435277091936 1128:0.505445836212254 1353:0.483041672042313
+1 4:0.0115070554634952 6:0.0239424958929106 11:0.0119544017182302 12:0.143468038251667 15:0.00911435035323318 20:0.0300129592979318 26:0.0690864818746492 27:0.030984358159548 29:0.0193232172015617 30:0.0319810131151955 37:0.0377611132113149 38:0.0433480353326517 39:0.0534374543866706 41:0.0612480277710242 42:0.0159161265918675 47:0.0503652104083346 55:0.0267187271933353 57:0.0198610119011295 60:0.0201917818470977 63:0.0632520305686679 64:0.0692198019060913 67:0.0902890387375909 68:0.0326627310512121 72:0.0331110650512574 75:0.00539150378418975 80:0.0173213292513226 83:0.0413576802520409 84:0.0156130428505825 101:0.0258557087679556 110:0.0256741888866368 142:0.0213853082792601 153:0.0922930692081218 162:0.0144080735539399 166:0.0198494714778507 179:0.0145016911144347 180:0.020500336500478 185:0.0154914381022001 190:0.022809089511355 199:0.0373054169113871 204:0.0319402916594845 213:0.0274648382237152 215:0.0169477388880987 218:0.0150901061175531 221:0.0253241546078997 227:0.018909459771703 229:0.0278630335588814 237:0.0228611657099115 242:0.0372814858823578 264:0.0218995551613988 265:0.0251314221913512 268:0.332770822251991 283:0.0398846196387468 284:0.0161554698769041 296:0.0479785286192191 301:0.0241122894050254 314:0.0212288870409305 317:0.0158558290063644 322:0.0230553548606405 327:0.0223726785899672 331:0.0207962083215925 341:0.0444549880677855 345:0.0585674928957773 346:0.0664916490977847 347:0.0218538867150139 349:0.0263724496394383 351:0.0188791091408512 357:0.0246262364937193 360:0.0327571384170671 370:0.0314601873210287 375:0.0188589452711133 377:0.0204751664196637 387:0.0563365266953896 408:0.0313297144053888 409:0.0135861298844885 412:0.0271133809376232 423:0.0403112334104435 430:0.0207048841394103 436:0.0234978731449867 437:0.0239285206896808 459:0.0729024133854209 475:0.0215565211059429 480:0.0391334720947125 485:0.0184099152894667 505:0.0574079188486766 508:0.041280690228305 518:0.0231999004989322 521:0.0262328791117811 526:0.0638550062241594 541:0.0274321790363302 546:0.0229841414547791 548:0.0301199400731173 549:0.0284068668941694 557:0.0250369313416896 576:0.0260418580670928 580:0.0240710502207361 592:0.0524105648405907 597:0.0237887210308822 599:0.0249436480759052 613:0.0246040837720016 626:0.0251076845567615 643:0.0216444657384973 663:0.0497948994357391 667:0.025623144509367 681:0.0291100181185298 720:0.0264860599672241 727:0.0284817323320294 742:0.0273029842264162 747:0.0293179899131241 764:0.0246040837720016 767:0.0508944977213302 771:0.0564459906054577 778:0.0254224633828492 780:0.026989660751984 781:0.0288284668881827 800:0.0469199090679646 804:0.0250604396267543 806:0.0285573735913497 812:0.0297975203835628 850:0.0243861775543654 863:0.0281148553070035 882:0.0199774308953265 884:0.0823945146711455 893:0.0418677363056228 909:0.0234222318856664 912:0.0252997829117909 930:0.0232917170077131 963:0.0451417244887862 967:0.034087961110792 971:0.0331743557533665 1009:0.118550107207602 1013:0.0329627665557725 1050:0.0314038216648524 1054:0.0347674575442539 1059:0.0243861775543654 1112:0.0640983223966939 1126:0.0851091604999608 1128:0.720129549200412 1129:0.0620419965147147 1138:0.0262328791117811 1140:0.0270203947603512 1144:0.0363518800045071 1154:0.0361339737868708 1167:0.034007304862471 1193:0.0648535924895597 1213:0.0338486178257554 1241:0.066348711506733 1309:0.0314038216648524 1313:0.0347674575442539 1321:0.0308628841429138 1332:0.0326898631371191 1335:0.0285954902116643 1353:0.0382338561997295 1377:0.0253731434911354 1395:0.0284068668941694 1432:0.0316319438620476 1558:0.032049161198347 1559:0.0386763744840758 1566:0.0414113804508701 1591:0.063148482914362 1595:0.0333189013916583 1598:0.0556681555201496 1736:0.0380921174509948 1776:0.0308109314951018 1835:0.0358188464532415 1836:0.0283697201666536 1858:0.0342519975916484 1867:0.0443709984843744 1872:0.039651062341915 1911:0.0360274125337066 2021:0.0388300499749691 2090:0.0428761393097932 2200:0.0383784018380213 2234:0.0409818850356399 2278:0.0431516178973579 2285:0.0359223845892769 2301:0.0471665800370224 2308:0.039651062341915 2410:0.0371702596153546 2425:0.0421070795906594 2490:0.0437358749304388 2642:0.0369269265427339 2723:0.0346789799009136 2807:0.0361339737868708 2953:0.0466954929639431 2972:0.0454411035990096 3246:0.0443709984843744 3251:0.0759061573056016 3401:0.0401919998638535 3662:0.044710562788278 3793:0.0894211255765559 3818:0.0517549934103061 3825:0.0437358749304388 4107:0.0458357573432975 4188:0.0443709984843744 4309:0.0471665800370224 4513:0.0517549934103061 4732:0.0462529746795968 4787:0.0476701808217823 5183:0.0568144938566691 5494:0.0476701808217823 9167:0.200800484248185
+1 12:0.270311145665744 26:0.173556389684447 27:0.116756560609455 63:0.0866723490576488 111:0.250765352141602 142:0.0207961335296128 153:0.347782622229664 268:0.385834153202829 345:0.294261984227351 423:0.303804967828773 1128:0.603027207218733
+1 6:0.0161719009912483 15:0.0554063932825452 26:0.0699964458409696 27:0.0235443485720594 29:0.029366595814862 42:0.0967545831909962 63:0.0174777673059276 88:0.061743604970191 96:0.150296061826838 102:0.154094903848108 134:0.0579112211655605 142:0.00838721891457711 180:0.0623110623659027 192:0.0653010270859265 209:0.0507945233835672 255:0.0752601433868588 312:0.0732896442390689 355:0.048665430381821 413:0.139829076982689 457:0.0557566737710943 574:0.060544049339839 737:0.19056469634319 886:0.0696462598330533 1045:0.0420048958325414 8689:0.179071078852448 8691:0.895355394262239
+1 6:0.0202453842266922 15:0.0231208382413295 27:0.0392998022488899 29:0.0490181924003942 60:0.0512215247162791 64:0.0585311361001129 128:0.0725396411145066 142:0.00349994865808468 144:0.12036304735546 158:0.0484373912032751 159:0.0405984486377384 166:0.050353168512166 172:0.0529220732012634 199:0.126179409613115 203:0.0511603129303736 205:0.0533986283229481 245:0.0780288046730442 262:0.0631586328414832 327:0.113507833834891 437:0.121401402135954 502:0.0465816790909844 505:0.048543200339041 508:0.0523594180752826 533:0.0845217595988139 537:0.150949888240074 555:0.0777698277469537 733:0.076169396072767 890:0.141744051023714 1027:0.0705209903849418 1149:0.0647432514006436 1967:0.108092690112969 2001:0.0884235857685105 2248:0.0886536079609862 2318:0.103439214344715 2636:0.119649873569526 3822:0.123781721931698 4292:0.115272769325517 4705:0.432370760451876 5247:0.675349074023412 7926:0.313917845635125
+1 6:0.0201481460972754 27:0.0195555230871021 29:0.0243913795571579 31:0.0511959631049369 80:0.0437288585846218 102:0.191982787753737 142:0.00174156924132565 158:0.0482047474924075 180:0.0517544758118439 185:0.0391091755265723 286:0.037631714353982 289:0.0584320149608459 306:0.105402727986088 308:0.0496229558364406 327:0.0564813291188474 342:0.0627393860107883 355:0.0808413063086263 389:0.0572370091429729 448:0.0608209643428949 504:0.0713427549175293 895:0.0698394304230734 1319:0.0708877289888949 1373:0.0779154230381015 1472:0.0682927187662296 2280:0.0912226427256354 2693:0.112874817459992 7657:0.139320000868546 7665:0.557280003474184 8435:0.717160020275418 8436:0.143432004055084
+1 6:0.0219978454632159 11:0.0988510030454376 15:0.0376833025926629 29:0.0399459430814998 88:0.167973608199943 102:0.314411634416468 276:0.085444006310166 308:0.0812678825620804 312:0.0996923162525905 405:0.104602010899823 457:0.0758430745911213 574:0.0823551072824303 952:0.102466268299488 1033:0.131755946819937 1808:0.110591069659382 1863:0.132507331018927 8264:0.255818172395662 9169:0.830210066040901
+1 2:0.0252233881366534 6:0.0123575073910055 15:0.0423379363297201 17:0.0336687249965105 26:0.160460096303829 27:0.035982097794574 60:0.0468973838559303 64:0.10717983005837 67:0.0699017012585311 75:0.0250445873912996 83:0.0160095414135824 142:0.0208291306813348 153:0.053589915029185 218:0.0350482441015144 232:0.109686182651615 274:0.066774631615047 345:0.045342905950745 441:0.043569499201861 457:0.0426055977338131 561:0.0547536274019832 592:0.182592977384158 625:0.0686923092247925 739:0.126237993283161 856:0.0463722985099746 888:0.185003993292295 895:0.0642521604819104 1045:0.0320973898485992 1226:0.0977978015793192 1557:0.0909237998673734 1958:0.269488962500274 2306:0.0869162124508384 2683:0.0875217544717035 2769:0.0951844274175467 4586:0.453328085013756 8154:0.684171941700601 8155:0.13683438834012 8323:0.131957206508725
+1 6:0.0322705305241933 11:0.0483376779854659 15:0.036853917310596 29:0.0781335170716169 31:0.0409993277326085 33:0.0595248717152125 63:0.0465017953998037 86:0.083563438621062 88:0.164276616990796 94:0.0645753576543934 97:0.134242138331706 102:0.512486060538385 122:0.115780929152906 142:0.0111576247444018 169:0.0784090878243391 180:0.082893204336829 199:0.100563082524169 226:0.0834074127858346 252:0.0776311998532944 276:0.083563438621062 312:0.0974981524148603 346:0.0896197623427124 373:0.0767902649513136 406:0.100859755000302 417:0.125867597505649 420:0.1093818882832 436:0.190027514918388 453:0.10433609991182 478:0.0843561850702397 507:0.057516286104012 531:0.24207620954589 882:0.0807788331324501 886:0.0926513114755741 952:0.100211051559211 998:0.357191200733794 1045:0.0558796509189261 1225:0.0959508145253334 1707:0.122955325287081 1863:0.129590929786768 4619:0.36445479564287 6595:0.205795207490158 9941:0.238220549715022
+1 6:0.0560111849710771 15:0.0213221531209412 26:0.0404053083332443 28:0.0689357184051893 29:0.0339036173720338 30:0.0187041322797936 42:0.0186171298628924 47:0.0147280755988547 48:0.0190364562456809 59:0.0193222042886396 60:0.0236183736439172 63:0.0403560248517281 67:0.123213178865039 75:0.0189193631114666 81:0.0378920378173486 83:0.00806269561081156 96:0.0192795780046792 100:0.01922870579692 102:0.0296503249927401 111:0.0194600563559353 126:0.0295648014702163 132:0.0188727306737663 139:0.0509133937281663 142:0.00968301067948088 153:0.0809665614137458 159:0.0374400931874151 171:0.0269053516530196 178:0.0502261358278663 179:0.0339253228668002 185:0.0181203707602441 186:0.0353159237826242 189:0.023285681154723 199:0.0145454106399545 204:0.0934015814480764 220:0.0249628348248322 226:0.0241280406076371 229:0.0325914544060536 232:0.0276199761312827 252:0.0449142031845398 274:0.0336289163648022 275:0.0627754420047098 276:0.0241731756569387 299:0.0257600651568983 320:0.0590729658938653 322:0.0269679015807105 325:0.0279422040684341 330:0.0309473882526154 336:0.028449562833453 341:0.0259995508685568 355:0.0936400744410652 382:0.0273312767152976 409:0.0158917273580173 422:0.0283752108952853 426:0.0280128640050474 436:0.0274855162351823 441:0.043884781069628 475:0.0252147122922847 483:0.0302128247623766 485:0.0430682404705146 493:0.0277795700665607 495:0.0342933201983008 505:0.0447667830986928 506:0.0174084563365802 515:0.0449636273981628 527:0.0296790242699903 530:0.0511606211638547 534:0.0237179021458143 550:0.0507042965781373 575:0.0324774148855314 584:0.0437725820204447 585:0.0385566238159093 586:0.0914971610409858 587:0.0394111390816074 593:0.0299714510357243 643:0.0253175813311529 676:0.0311157966107101 683:0.0376326933146633 706:0.0316781744599138 717:0.0315340693185421 719:0.234451208450143 726:0.0573531686194354 732:0.0340500551120731 755:0.0324774148855314 761:0.0632838390279211 764:0.028779453348586 792:0.034146531019274 800:0.0274411627487222 824:0.104405058665557 847:0.0331841268959483 852:0.0308809441278477 903:0.034645973207979 912:0.0295932142316879 913:0.0324774148855314 953:0.306020006129318 975:0.0385566238159093 987:0.025404262552247 1036:0.0351764560290809 1082:0.0426512316962745 1126:0.0331841268959483 1144:0.0425208776078718 1145:0.0408784012053913 1146:0.0356259296439542 1155:0.0362232379583672 1159:0.0316419195139606 1160:0.0394111390816074 1216:0.0333151477832847 1223:0.0382374080597533 1227:0.0340022229032576 1229:0.0351218997607539 1273:0.0417779721267956 1296:0.0316781744599138 1304:0.0400646403222894 1322:0.0349602919023759 1440:0.0385566238159093 1448:0.0390590055904388 1455:0.0413163447348623 1485:0.0388041201867414 1506:0.0436240908525868 1527:0.0404618294691642 1528:0.561558126100881 1645:0.0355684342957556 1675:0.0459827496253049 1685:0.0891128746990588 1688:0.0418973870376058 1707:0.0355684342957556 1711:0.0452398441442287 1744:0.0427836068586463 1783:0.180255184458193 1785:0.0472344540378777 1865:0.036932462816111 1917:0.0387208217021982 1946:0.0866692769819474 2007:0.0420184958333423 2026:0.03748797752911 2102:0.0434781381199915 2153:0.0495422001556022 2188:0.0489727874032736 2190:0.0479366051363578 2248:0.0408784012053913 2296:0.0454195987191996 2388:0.100304637430787 2398:0.0452398441442287 2411:0.0522980480751951 2421:0.199367243158451 2427:0.15045695614618 2444:0.0440775439720499 2478:0.0519008589283203 2577:0.0447222294897569 2596:0.0430546781002581 2616:0.0413163447348623 2666:0.0420184958333423 2740:0.0450637961145483 3011:0.0531525633408932 3018:0.0586327291144377 3035:0.0487017161616617 3046:0.0953921628596221 3057:0.0557599200926282 3110:0.0531525633408932 3170:0.0481841015071899 3265:0.0536141907328265 3348:0.105429239622844 3395:0.0527146198114222 3520:0.0595323000358419 3537:0.105429239622844 3553:0.0996836215792255 3570:0.114152125500519 3609:0.0498418107896127 3613:0.0511579534472441 3667:0.0563926559555603 3699:0.0472344540378777 4245:0.12598834410655 4268:0.0536141907328265 4431:0.0551708570970046 4490:0.0616780293956436 4594:0.0541022108102054 5086:0.0578189682313358 5121:0.0586327291144377 5122:0.0586327291144377 5192:0.129101676834906 5201:0.0645508384174531 5643:0.062994172053275 6852:0.0616780293956436 7224:0.0616780293956436 8200:0.066456044070708 8740:0.0689122813562904
+1 6:0.0266424661984889 15:0.0248944078038238 28:0.017885559644046 29:0.0175927714887143 31:0.00923152868351689 37:0.0114598348876818 48:0.0148171810552032 63:0.0209409608307745 67:0.0685028451299908 68:0.0297376962431941 75:0.0147260406587143 80:0.0157701579514757 96:0.0300128337203579 100:0.0299336401243106 102:0.138471434418176 142:0.00439649605218762 147:0.280661757479931 173:0.01810346909862 174:0.0177541586206992 180:0.0186644766103187 186:0.0137442187260464 196:0.0225226641764002 198:0.0421782840442447 226:0.0375605145807291 252:0.0174796682729881 278:0.0209097395392583 280:0.0253728832898067 289:0.0210726310994907 345:0.0177742058242598 369:0.0216583775227273 411:0.0181457981776553 423:0.0183506273934767 440:0.0273374172714452 456:0.0262468006773103 475:0.0785043082531512 480:0.0178144825714274 489:0.0275963711851609 493:0.021622455040986 505:0.017422295459609 543:0.0536174777723046 560:0.0288521724104393 565:0.0257620076727726 587:0.0306759816967753 599:0.0227098777660503 613:0.0672021670576198 644:0.0461571448060587 664:0.0273798815880735 682:0.0375044885875914 696:0.0267310111820646 717:0.0245448001702616 730:0.0232823729952868 826:0.0315733846229901 833:0.0314937951335027 840:0.0306063931767311 886:0.0208616405866566 895:0.02518654464492 903:0.0269669759555598 916:0.586975168354572 995:0.30325902542084 1018:0.0262828205104267 1035:0.0295819627995161 1046:0.299327913237826 1049:0.306690225160106 1133:0.169457910036653 1155:0.0281946528444133 1157:0.033197934222369 1190:0.05242195004427 1227:0.0264659076529148 1292:0.02906830992981 1296:0.0493139311658757 1302:0.0345542790865053 1304:0.0311846397199924 1330:0.0319862902555038 1432:0.0287992188000591 1462:0.0297623985783382 1531:0.0661929441079581 1598:0.0253414617516447 1744:0.0333009695101747 1746:0.0282916712527308 1910:0.0296415653778755 1952:0.0679103341703179 2038:0.0480075974692373 2067:0.0302035035867175 2073:0.0701515468474361 2074:0.0413717313982144 2387:0.0328980799201611 2419:0.0367653227307841 2425:0.0383362781450133 2438:0.0425137868450354 2547:0.0383362781450133 2678:0.0463374515130087 2807:0.0328980799201611 2879:0.0456372631458872 2917:0.0463374515130087 2944:0.0398192105115917 3035:0.0379073781776051 3071:0.0407066124683634 3366:0.0387947801343767 3374:0.12211983740509 3836:0.0410308544784569 3969:0.0367653227307841 4055:0.0417310428455784 4335:0.0438936839238081 4694:0.0490320278464523 4696:0.196128111385809 5601:0.0429426868124436 5777:0.0471201955124657 6289:0.0536384365138826 6683:0.0536384365138826 6753:0.107276873027765 7028:0.0480075974692373 7660:0.0502436718133175 7898:0.0563330128473263 7914:0.0563330128473263 8108:0.051726604179896 8135:0.107276873027765 8298:0.0536384365138826 9173:0.18281826454427
+1 11:0.141767856160861 60:0.239455364810563 122:0.339569768230392 489:0.359457109512177 531:0.354988351583489 998:0.349197788543473 1863:0.380072627801581 4619:0.534448252369196
+1 111:0.146513739576959 174:0.171733441282911 186:0.13294586524743 916:0.567772699133274 1046:0.263214196795319 1049:0.370821344591699 1133:0.273190361245613 3374:0.393749250049596 5601:0.415378477898536
+1 6:0.0176493112599806 28:0.0651656245993625 80:0.0574582072571951 172:0.0692037848227971 186:0.0500767443534384 237:0.0758349188126467 245:0.102034714098172 345:0.0647599095218189 404:0.0741066580463786 535:0.0836833550337397 565:0.0938632815713239 571:0.0696472632817434 582:0.0744316729529474 757:0.0838437082488329 1043:0.296085440900924 1294:0.100228142825532 1426:0.104737880292697 3463:0.143142282480448 7589:0.188464690894312 7832:0.615744104319706 8734:0.195430407967357 8744:0.586291223902072
+1 6:0.00963774511679069 15:0.0330197851561677 37:0.0456007576759813 60:0.219454466639478 159:0.0579802530383841 180:0.14853866279889 183:0.0847868080094624 365:0.102116010972419 457:0.0664570739898372 478:0.0755801095481481 484:0.106521726922633 535:0.0913938039227459 567:0.209168201965207 574:0.0721632065632287 652:0.172701187477673 784:0.0946397210776345 1014:0.118188470676991 1943:0.115668067659893 2345:0.158447847389125 4181:0.187499788458424 5489:0.368770216757404 7284:0.187499788458424 9174:0.727466971551898
+1 6:0.0121483125486476 28:0.0224272880510626 31:0.104181440978964 37:0.0143698616738121 42:0.0363409631852939 52:0.024760838675162 63:0.0131292777515671 68:0.0372890696681742 75:0.00615515462897632 81:0.0184914801781655 142:0.0126009374956415 144:0.0180560653012203 162:0.0164488284122557 165:0.0294879812435997 179:0.0496671178008337 186:0.0172343252624172 204:0.182321520978284 205:0.0961260926351252 256:0.020668238297905 308:0.0448801969802824 322:0.0526418156690543 336:0.0277670221774881 337:0.0232189660647195 351:0.150871980192268 355:0.0731148253891426 386:0.0241881666616794 408:0.0178836224888058 414:0.0224400984901412 440:0.0342792813823355 478:0.0238170542519408 499:0.0904861747063581 505:0.0218463859426084 507:0.03247819956222 513:0.0227270284899009 535:0.0576006359168506 553:0.0388240884773309 567:0.0659137760419971 586:0.0223255073784019 664:0.0343325287774334 698:0.0341215506989535 716:0.029079981417985 833:0.0394910994868058 850:0.0278402278223288 851:0.310449090208508 993:0.0333747956457309 995:0.142599902922142 1001:0.071198617121601 1008:0.0394910994868058 1094:0.0312805450215898 1216:0.0325158756484303 1232:0.0343861186018622 1294:0.0344943433565009 1363:0.0343861186018622 1380:0.0312805450215898 1449:0.0389161688504663 1509:0.0767567143147383 1559:0.0441544836035865 1581:0.389958663471321 1584:0.0407756662331256 1610:0.0420217424307387 1639:0.0410104194746074 1642:0.0470281045436399 1651:0.0416279752114523 1679:0.0438143062087288 1705:0.0454680353842748 1720:0.0394910994868058 1734:0.126065227292216 1751:0.165501740028071 1897:0.0405473454033714 1946:0.0422949862209272 1955:0.137021410774164 1974:0.0544221697497013 2025:0.0475333009740473 2099:0.0441544836035865 2243:0.0456738035913881 2282:0.0879653183734067 2393:0.0950666019480947 2608:0.0538472391133618 2646:0.0452672259330231 2753:0.043172975308882 2930:0.0590855538664819 3046:0.186207170717372 3298:0.0463234718495887 3343:0.0492635990403289 3537:0.102899860075211 3611:0.044879565851408 3710:0.0480711126671445 3759:0.0499306100498038 3836:0.0514499300376054 4032:0.0648616803126992 4315:0.0502852673596505 4429:0.0572260564838227 4657:0.0672589893884556 4886:0.290520227858887 5035:0.0533094274202646 5148:0.451454549950741 5269:0.0581040455717775 6286:0.0564318187438426 6438:0.0564318187438426 6711:0.0672589893884556 6803:0.0590855538664819 7128:0.0672589893884556 7417:0.0648616803126992 7591:0.0648616803126992 7812:0.0706378067589165 7861:0.141275613517833 8371:0.201776968165367 9584:0.0648616803126992
+1 31:0.103386361732177 205:0.214633100735625 308:0.200419585888457 355:0.163252882259371 2393:0.424534878994198 3046:0.415768719342217 4886:0.518945527670295 5148:0.504010343294276
+1 6:0.0431969548878636 11:0.0176466138109013 17:0.149790501529505 26:0.0169971208643674 27:0.0457378809502762 28:0.0289988812346459 29:0.0570483340910524 33:0.0217307174667685 37:0.0557414580516913 54:0.0294036221949184 60:0.0596126154713915 67:0.0444270329739722 72:0.0244386206687419 80:0.0255690594305049 88:0.0599723888075376 94:0.0471489920790378 97:0.171527004369245 98:0.0254731748275394 102:0.0748372199137101 134:0.0281249715961438 140:0.0832500663093844 142:0.00407330892002333 153:0.0681196846202196 154:0.0283876001381115 174:0.0575716664738654 176:0.0814213660462671 178:0.0633852137082181 186:0.0445685764864837 198:0.0341930326481951 204:0.117872480197595 215:0.0250175801495942 218:0.0445508326219106 226:0.0304495057218224 240:0.035352139723121 243:0.0370280414234871 244:0.0577879305095404 246:0.0405909320471627 274:0.212197894126682 276:0.0915193980046093 284:0.0953922561985246 291:0.0316079308886398 306:0.0924463398969686 307:0.0377118242717156 312:0.0355936055401492 317:0.0234057460776399 323:0.100780635807676 327:0.033025661032497 337:0.18013520968805 342:0.0366848607868164 355:0.0236346915097829 373:0.028033786613417 377:0.0302246288051988 382:0.0344919788664375 387:0.0277205823002421 390:0.07174376798427 403:0.0454818753847841 411:0.0294208208596286 423:0.0297529221872472 433:0.0317565533987897 463:0.0482554797729652 496:0.197579297816298 502:0.0271063360476273 506:0.0219694130762118 538:0.034409622074514 550:0.0319943254797135 580:0.0355327298914818 586:0.028867277019649 597:0.140463866944365 606:0.0505614407143432 626:0.111188905183795 658:0.145278291537907 730:0.0377490435182333 737:0.0462745091884485 772:0.0363850743697984 774:0.220263181618552 792:0.0430928067703377 803:0.0490768266738328 828:0.0596097213976948 876:0.0378992196238229 882:0.0294898913599489 886:0.0676483431071962 895:0.0408363859675076 906:0.0919008515533575 936:0.0919008515533575 963:0.0333182118849544 1015:0.0490768266738328 1093:0.0498507461736404 1216:0.0420436039356381 1260:0.0524284367800245 1289:0.0531822378545988 1309:0.0927141526892083 1379:0.0414493452167991 1380:0.0404462995245249 1395:0.0419330905447685 1411:0.149210173070054 1431:0.0458709054072402 1463:0.115575861019081 1497:0.047678111602445 1639:0.0530271997675084 1640:0.122259675626995 1651:0.0538257102886095 1664:0.0466086432847021 1668:0.191096121988859 1744:0.053992767296247 1751:0.0534991713250623 1795:0.050200235009875 1816:0.0431542027264983 1836:0.0418782560185194 1838:0.12038458721309 2016:0.126584113523389 2223:0.0498507461736404 2229:0.0558234228176889 2233:0.0596097213976948 2237:0.0566526750462429 2316:0.0650197425874605 2446:0.0632920567616943 2540:0.0632920567616943 2592:0.0531822378545988 3023:0.0729673425463593 3058:0.0720297983394069 3065:0.0665256720872531 3093:0.113305350092486 3114:0.0665256720872531 3134:0.0711673412736251 3147:0.0598970707240299 3197:0.0711673412736251 3271:0.0703688307525239 3519:0.0670783553417002 3694:0.0763986691282632 3708:0.0614614012402524 3734:0.127397414659239 3735:0.0636987073296197 3839:0.0739943060312584 3997:0.0696254352424022 4238:0.14233468254725 4305:0.402470132050201 4398:0.0703688307525239 5133:0.0696254352424022 5493:0.0711673412736251 5872:0.0838673030722686 6103:0.0778374646965293 6340:0.0869670662274177 6376:0.075129561494556 8185:0.0814629399752639 8482:0.0869670662274177 8485:0.0869670662274177
+1 6:0.0288716399187636 29:0.0524280837772503 31:0.0550216160679392 57:0.107774475129247 81:0.0878935827722644 178:0.116503499970022 179:0.157384946560129 245:0.166913568538858 322:0.125108367156397 404:0.121227435744161 571:0.113932531257315 582:0.121759111638617 705:0.165007600748383 947:0.17561289509568 1608:0.156435779965375 1970:0.198479929153072 2240:0.39215726556133 2685:0.268231352166608 4487:0.536462704333216 5182:0.261614463591005 5842:0.28084506861386 6224:0.258679101697317
+1 17:0.186999575166634 97:0.214135586830492 186:0.194739097224355 274:0.370873198946988 597:0.30687323668149 2016:0.55309991778548 4305:0.586187820761956
+1 6:0.0336151126028018 29:0.0915626516893501 30:0.0505137823581902 31:0.0320307025322431 78:0.064562002802731 81:0.102334079057047 84:0.0493213798864111 117:0.17352206517516 144:0.0499622203358303 159:0.0505567617478462 172:0.0659032237884888 179:0.091621271176328 185:0.0489372322190817 205:0.132993344345458 229:0.0440094629886363 254:0.324417587390671 301:0.0761703786415963 309:0.0618461102279432 322:0.0728315374767087 365:0.0890416058369955 408:0.0494850606864021 411:0.0629606085367401 424:0.0865551523281156 582:0.0708817763671475 641:0.0664966721727292 768:0.105024495651534 849:0.525122478257672 2151:0.128179837005428 2764:0.170126785318513 2970:0.272630692094646 3084:0.148998554235185 3365:0.274439428693041 3799:0.163493286698638 3930:0.146112487929528 4456:0.152298235861862 6746:0.186109675133052 8964:0.372219350266104
+1 4:0.0249632549767904 6:0.00577117067825199 15:0.039545103877765 26:0.0749376531623338 27:0.0336085298051592 49:0.0521304590377258 63:0.02494874987223 67:0.0652906182288498 75:0.0233925149835297 81:0.035138209615322 106:0.0403966431833299 142:0.0194551319190945 289:0.0502112397515548 317:0.0343974271793454 320:0.0547798001306504 402:0.0439883767271945 582:0.146031042963123 592:0.0568493954749688 593:0.0555865131374098 764:0.0533757761591801 963:0.0489649320836468 987:0.0471159828872984 1059:0.0529030532728484 1122:0.070487022690013 1154:0.0783885681117883 2280:0.0783885681117883 5441:0.123252616711603 6017:0.11227660290004 6428:0.359157388487367 9180:0.871227866008373
+1 6:0.0150798687104073 11:0.0169409789507558 12:0.101656656410553 26:0.0326349145362743 27:0.0658634415702013 28:0.0278393034412143 29:0.0410753574610091 31:0.0143690962632111 60:0.0286144433918669 63:0.0244463316155969 64:0.0326978919482661 88:0.172722821607974 96:0.023357848501819 102:0.035922352607616 134:0.0540006776264961 142:0.0117312887469797 159:0.0680398728919313 172:0.0295644394848813 180:0.0290517064194344 185:0.0878137218380711 199:0.0176222476468285 208:0.0282443709732586 255:0.0350890437065635 275:0.050703020699757 287:0.0349934118732834 306:0.0295832298678075 308:0.139276026083808 312:0.0341703246129108 322:0.0653450152675876 327:0.0317050644606219 331:0.0294709961849758 345:0.0829979356334353 351:0.0267542113861245 373:0.0538256000858922 377:0.0290160370635509 387:0.0266121198255604 409:0.038506710050468 457:0.0519916193310933 489:0.0429544149911925 574:0.0564557200625503 593:0.0363114074645321 671:0.0230233211640951 755:0.0786949316466212 757:0.0358187380221739 767:0.0360621399100007 772:0.0349301449913102 784:0.111059787689908 886:0.0324716449544714 895:0.039203462064383 906:0.0441130068466785 909:0.0331924212275457 952:0.0351211184701123 1047:0.0424856699360848 1159:0.0766704709132602 1236:0.0415474953664377 1307:0.061979558162208 1433:0.0363475125725886 1500:0.0430231468251727 1744:0.0518337593863884 1863:0.0908358574603688 1910:0.0461378089056313 2076:0.0470124792331194 2352:0.0683215739527853 2736:0.0492701165906358 2804:0.0492701165906358 2884:0.0628796128041685 3187:0.0638655111168591 3262:0.0683215739527853 3477:0.0583766378562881 4911:0.191596533350577 5526:0.128792188469956 8234:0.0763195297615336 8235:0.152639059523067 8737:0.0834895155611964 8745:0.834895155611964
+1 6:0.0219077008996889 15:0.0187644404424287 27:0.0478424781360425 29:0.0596733740117084 64:0.0950055535110309 67:0.0619617498536129 80:0.142643211429697 94:0.0328790137162981 96:0.0339337674926135 97:0.0683503625506138 140:0.0387025604206699 142:0.00994172534371064 158:0.0393108819383451 159:0.0329489425757965 166:0.0408656910174286 178:0.0442012271954704 198:0.0476885354222307 199:0.0256012129840711 204:0.230153096014087 226:0.0424674917590614 229:0.0286819253977633 240:0.0493051255436594 278:0.0472828554922495 289:0.0476511995401951 312:0.0496418944780527 327:0.0460604188635473 355:0.0329629674809576 436:0.0483769466900554 485:0.0379019618087001 530:0.0450236157381292 561:0.0485343060837959 574:0.0410088129067508 609:0.0387850170598607 737:0.0645383986054875 827:0.0467818862764628 834:0.0551916159407003 1045:0.028451531292453 1309:0.0646535538416888 2316:0.0906821085286246 3058:0.100458933400464 4268:0.18873146312547 4839:0.443501322970185 5880:0.116968532580276 9681:0.764309579534145
+1 6:0.0216132147081406 11:0.0485613001625243 26:0.0467739758481798 29:0.0392474911228603 60:0.0820232749580282 63:0.0233584621626337 88:0.0825183008353518 96:0.133910501340538 142:0.0112092427045548 159:0.0650120771282756 204:0.0648740993950981 209:0.0678852127823942 220:0.0866923986993655 229:0.0565927583823761 252:0.0779903411824263 276:0.335800095876364 278:0.0932945462828079 312:0.0979492032309284 405:0.102773052218298 409:0.0551897239961049 413:0.0934384852128223 427:0.114795644655713 467:0.135646408318925 505:0.0777343566168066 867:0.0949935946058969 1005:0.227838371858448 1045:0.0561381641473751 1424:0.100491052577303 1808:0.108657392713665 1855:0.139820506182938 3184:0.17104783486162 4530:0.355328689871414 8433:0.692377357257839
+1 6:0.0151874892136111 26:0.115037370489606 27:0.0552779076765867 29:0.0275789999839879 31:0.0144716441964939 54:0.0284293138077814 63:0.00820693258573708 64:0.0329312470027929 67:0.128864741928019 75:0.0076950065419656 85:0.0232683130447737 94:0.0227933395866993 96:0.0235245464656937 97:0.0236919063012813 100:0.0703874197171245 111:0.0237447624558542 134:0.0271930321387375 142:0.0137841800117358 153:0.197587482016757 174:0.0278319956938045 176:0.0393617077284377 192:0.0613260398416943 204:0.0227933395866993 226:0.0294405412951853 240:0.0341807232898956 256:0.0258388681519986 291:0.0611211625622849 296:0.0342386008038626 308:0.0280539994675499 331:0.0296813218516146 339:0.0295324918101877 341:0.0317241198093698 351:0.0269451481739366 373:0.0813146058914078 432:0.0356670984227149 437:0.0341519046664872 473:0.033429305589317 480:0.0279265614782366 527:0.0362137379421057 609:0.0537753396345409 613:0.0351160999162825 644:0.0361787196714237 657:0.0394353468295308 667:0.036570551096245 673:0.0383904093910999 764:0.0702321998325649 772:0.105538292900243 827:0.0324314904822462 883:0.0442746206037472 979:0.698373387771112 1003:0.0401268373673822 1005:0.0800503965230026 1045:0.0394479846692615 1059:0.0348050939637014 1064:0.0703588619334954 1248:0.0488860540756783 1302:0.0541684101896494 1387:0.0615880087092381 1407:0.092562082575285 1472:0.0386088225421349 1550:0.544053407372959 1557:0.0558730893720269 1591:0.0450642351922457 2076:0.0473479932066881 2779:0.0571001442884361 2835:0.0619966071855094 3051:0.114200288576872 3136:0.0619966071855094 7263:0.081088304748586
+1 6:0.0204672702364613 16:0.337858465097743 31:0.0780102750019031 41:0.0471221524816018 57:0.0764019402177954 81:0.0623082622155312 179:0.0557855432088516 185:0.119185863606945 205:0.161951604954159 245:0.118325980894376 322:0.0886900351568963 471:0.106678408267451 582:0.172631457629079 2341:0.142515745979469 4033:0.533782018351964 5326:0.212290011201539 5870:0.218555710290606 5874:0.437111420581212 6362:0.414341124567196
+1 6:0.0254879395211213 17:0.138886653968572 26:0.0367729429635091 27:0.0494765113714707 29:0.0925672273748736 58:0.0569916952745219 64:0.294751246075202 72:0.0528724841771561 75:0.0172185460104869 78:0.0652703420330579 79:0.0576156391527756 80:0.0553181666219517 83:0.0220136208378763 91:0.0678866618978548 92:0.0560860170662437 142:0.00440626261894694 146:0.152581497659976 151:0.067096368570815 185:0.0494741449525716 189:0.0635770194777523 199:0.158853649059903 242:0.119063809597449 256:0.0578177208437364 284:0.0515948263288316 286:0.0476051173591654 293:0.0804131891777703 312:0.0770060786669742 327:0.0714503802832958 355:0.153399596870206 369:0.075972716332321 372:0.167733913319848 390:0.077608128727364 398:0.0660826688404806 400:0.0748624388542806 420:0.0863921016476046 459:0.077608128727364 592:0.0836903541447611 676:0.084955625478177 729:0.0914461978781571 866:0.0950192295464185 886:0.0731779423852851 895:0.0883487329414178 952:0.0791487831157363 1009:0.0757213778273926 1026:0.117552417298871 1055:0.0927065816089743 1116:0.0990700381870943 1164:0.0901342116458932 1190:0.0919422042607121 1371:0.12719314240864 1383:0.123518587805825 1497:0.103150674314498 1564:0.136083361887609 1858:0.109388701202872 1975:0.362318693798225 2160:0.131557309390508 2953:0.149128800843984 3008:0.162541356371979 4288:0.136083361887609 4305:0.435368181720252 4785:0.130881568728918 7739:0.17199332400906 7905:0.19760353704722
+1 31:0.0915820994705121 176:0.124547970623419 204:0.14424497071314 242:0.168366240877647 373:0.17152997554018 687:0.270368427095495 726:0.221433780872739 979:0.7365956509847 1253:0.294061458504194 1550:0.38255311632395
+1 6:0.0196041910352953 15:0.0335828644720101 26:0.0424261716912769 28:0.144767048953008 29:0.0355992999661826 80:0.0638224152219344 142:0.00508365225415343 176:0.050808558737424 190:0.0840426944437195 245:0.113336322191107 345:0.07193287143011 381:0.0942246286454028 513:0.0733509294227394 571:0.0773615601395602 1273:0.131602466963961 5146:0.364264633690744 5676:0.34084873192113 6702:0.43415349136995 9682:0.683945388696918
+1 6:0.0289121109392686 15:0.0424523584862214 17:0.0450129570855669 26:0.0715083353034482 27:0.0120264475714755 28:0.0305001908749606 29:0.0150004500587147 37:0.019542421843433 63:0.00892763932405545 75:0.0418537878100202 80:0.0268928027537795 81:0.0251476537738532 82:0.0309802398352754 94:0.0247949782327218 97:0.0515449084411261 102:0.0393558198581904 111:0.0258299520346554 142:0.0182078049435606 151:0.065237498480428 162:0.0223697312444117 176:0.149864147338291 198:0.07192650046911 203:0.0313119550729951 204:0.0743849346981654 218:0.0234286434640672 226:0.0320259160706593 229:0.0216298372587 232:0.0366608732071717 252:0.0596160510900881 265:0.0390186209215068 274:0.0446367307880559 278:0.0356573157220379 307:0.0396642142578968 308:0.0305176125461051 322:0.0357953539067016 342:0.0771681670865619 389:0.035200177798365 398:0.0321259413876735 399:0.0778900621719861 475:0.0334682899763908 485:0.0571658460398601 493:0.110618121947591 550:0.0336507131482375 561:0.0366010694016485 582:0.0348370823753257 609:0.0292488595324953 622:0.0455843126835054 643:0.0336048313250498 712:0.0379284270466787 720:0.0411218086145983 774:0.0463332983623221 796:0.0363066945431722 912:0.039280014927739 982:0.0462631260337997 999:0.605306040770235 1009:0.0368117781645425 1038:0.109680998166615 1045:0.021456090659261 1118:0.053179071986337 1126:0.0440463475725155 1134:0.100490892390468 1201:0.0526753092805049 1238:0.591830448624669 1260:0.0551427248564363 1316:0.0573321214214099 1433:0.0398216167166297 1516:0.0661566214644291 1535:0.0612949022765426 1551:0.0442202557654588 1639:0.0557724865792887 1651:0.0566123370242827 1681:0.0612949022765426 1690:0.0539793663882134 1720:0.107412547559674 1795:0.0527991661947218 2000:0.0657589387360744 2123:0.0674409522053682 2154:0.0564393138947822 2162:0.0711638214029836 2196:0.0639562911843307 2219:0.0593612382962573 2582:0.0778250870905086 2951:0.134881904410736 3209:0.075758874291057 3388:0.0718115859808493 3962:0.06996979229399 4036:0.0724986323826119 5053:0.0740119162609477 6108:0.0790191161995022
+1 15:0.0699317085902346 26:0.0441733414043113 27:0.0891501734226866 63:0.0220597309738821 64:0.265551510967175 87:0.09507713923731 94:0.0612670975454059 97:0.0636823897119595 132:0.12379634404591 142:0.0211720169557215 178:0.247095085173052 199:0.0477055676520578 226:0.0791343676717832 265:0.0964129765167675 286:0.114370889693842 308:0.0754074283577171 337:0.078024725285178 404:0.085704731526583 411:0.0764609473920936 586:0.0750223578085523 742:0.104743852417754 1038:0.135508011954682 2189:0.365759167079868 2219:0.293357045364395 3118:0.150812735877801 3432:0.187196225685528 3957:0.177442682219126 4156:0.166643074195907 4640:0.187196225685528 5509:0.217960385222456 6616:0.202289607135401 7199:0.413212498561989 7338:0.217960385222456 8986:0.226016272876462
+1 26:0.126313419685569 75:0.0591449379168852 151:0.230473034781935 399:0.27517239971298 582:0.246147025407431 912:0.277539282086106 999:0.427688747844945 1238:0.464630389808379 1639:0.394069501089768 1651:0.400003599892739
+1 6:0.0146236741604062 26:0.084393724392187 27:0.0141935439757782 28:0.0359961491438384 29:0.0354068890750108 33:0.0539484361901428 60:0.0369984031452705 68:0.0299247708896971 75:0.0296373592103823 88:0.0372216954606033 134:0.139645479982376 142:0.00379213169141793 176:0.126334858058028 179:0.0265721677365072 180:0.0375637831372177 183:0.0428832898984217 192:0.0787325244332732 205:0.0385709716577218 387:0.0344094038235315 411:0.0365199004412652 413:0.0421474849298129 427:0.0517811016746972 467:0.0611862974595887 507:0.0260640098950712 527:0.0464924690181693 561:0.0431963707508246 587:0.0617379178659566 643:0.0396602278749373 772:0.0451645893863018 823:0.166619850781208 867:0.0428489512427517 906:0.0570380066077884 952:0.0908230352255852 963:0.0413577101306912 987:0.0397960148182517 1155:0.0567440409494876 1277:0.0575427796841711 1731:0.181581906461071 2091:0.0645476025643131 3360:0.068337546206345 4091:0.0855624672864339 8199:0.520520072007829 9183:0.735873369100187
+1 6:0.0288017705881353 15:0.0197354934253364 26:0.0249324006644295 29:0.0627614494601621 63:0.0124509949599755 67:0.0325841239606941 68:0.035362647305195 72:0.0358480407982765 75:0.0116743358946925 81:0.105217056501075 83:0.0149254416582706 88:0.0439855560975363 96:0.0356898276451182 98:0.037365587152275 138:0.0483035357915592 142:0.00298748743491376 158:0.0413452058119549 179:0.251206520314341 204:0.0345804907436696 245:0.0666038551690146 288:0.179485806477576 295:0.146728357503096 312:0.0522108445012628 351:0.040879329835429 355:0.0693375781703636 386:0.0458771223968767 405:0.0547821490251325 408:0.03391944289512 423:0.0436433783597531 499:0.0429057457133104 507:0.030800315654074 571:0.0454627258726116 574:0.0431310040917628 586:0.0423442606832197 850:0.0528039002387636 963:0.0488731600349748 1001:0.0675203647689199 1141:0.306772133094267 1489:0.0675203647689199 1608:0.062422882233448 1897:0.0769051889693631 1994:0.082481658524853 2240:0.312966596395583 3683:0.0906570849890829 3699:0.0874391297939184 3951:0.101110727442668 4024:0.192154901869303 5978:0.101110727442668 6233:0.108539304955187 6493:0.716968482476425
+1 15:0.0937657205432419 81:0.16663299473757 204:0.164296101518111 288:0.28425293807702 295:0.232374735016617 1141:0.364377893704485 2240:0.37173555513089 4024:0.456475610753167 6493:0.567734022127281
+1 6:0.0218914703512663 29:0.026501850831537 31:0.0278128544185962 33:0.040380091159009 41:0.0336007421286416 63:0.0157727911307852 75:0.0147889274912995 80:0.0950250218137361 96:0.045211503076641 142:0.00567677709310141 158:0.0523756774159496 174:0.053489930646465 176:0.0378243630044331 204:0.0438062066086505 243:0.137611258386336 256:0.0496593661711878 285:0.0778183140153633 323:0.0624236370658283 345:0.0535503290889381 414:0.0539165966531552 856:0.0547660498098008 884:0.0753362173725778 1497:0.0885956248678995 2879:0.137496464502796 3236:0.327736760001615 4447:0.245282688332716 4606:0.124645222028974 5167:0.139605999964146 5481:0.433913503984192 5666:0.141964259971808 5912:0.151374704830268 6681:0.64640996183674 6686:0.161602490459185 7955:0.15584250029928
+1 6:0.00980393497978283 15:0.0335891666354073 28:0.144794215950564 29:0.0356059805340479 41:0.0451435402669418 63:0.0211911876472429 64:0.170064083603342 68:0.0601860732541114 75:0.019869339229245 142:0.00508460625279721 172:0.0768833861858395 215:0.0624575974747103 218:0.0556116529741111 351:0.0695752871333439 372:0.0967782651906562 408:0.0577297863818141 448:0.0887850589746419 457:0.0676030362338467 480:0.0721094024405742 506:0.0548477011151669 507:0.0524211334690863 631:0.0657978729120301 647:0.0885580516268662 732:0.107279313549338 757:0.0931479140491225 806:0.105242649564065 880:0.115321982441026 1122:0.1197417692004 1424:0.0911671640541966 1626:0.140903445362 2025:0.306882714950159 2067:0.122257639901546 2686:0.149535930766525 8969:0.434234964653576 9648:0.684073737950686
+1 6:0.0575856348229931 15:0.0986467927349553 29:0.104569899574839 31:0.109742802943456 42:0.172264042987365 81:0.175307248741307 96:0.178393666404834 179:0.156955269682443 220:0.230980762503167 229:0.150784136549845 339:0.447907422978218 355:0.173290060580257 389:0.245384574661681 473:0.25350441497959 781:0.312017388817655 998:0.318697612238231 1126:0.307052263383293 1134:0.350266908136941
+1 6:0.0171130402756053 15:0.0146577053662915 17:0.0233127211120641 27:0.0124572672561682 37:0.040484967865961 85:0.0524367882906867 100:0.0264371710068569 111:0.0535105007189137 132:0.0259477477817894 142:0.00110941514515788 151:0.0675744810647235 176:0.0887043908574013 185:0.0498266857432449 220:0.0686418254093544 319:0.0388107041653285 387:0.0604002975277561 411:0.0320524712321223 480:0.0314672402142633 493:0.0381935868228981 510:0.0386780613299943 518:0.0373100981267413 643:0.0696172934570467 644:0.0407656511322521 645:0.0544353736599699 796:0.0376072979509834 844:0.0468808879728417 912:0.081374261330786 1576:0.047423817847551 1584:0.0574397156574474 1652:0.051249219571308 1788:0.0526800556212847 1937:0.147426201614153 1980:0.0531230805012547 3119:0.0693964656508836 3388:0.148768140107227 3482:0.0652547780848899 3954:0.0693964656508836 4066:0.459979332479134 5272:0.0947461459928678 5376:0.0794941670394006 6419:0.794941670394006 6737:0.0947461459928678
+1 6:0.0219431956321829 176:0.113741203822926 185:0.127780534067451 387:0.15489656116604 3119:0.355934468086334 4066:0.393205661366856 6419:0.815451155783033
+1 6:0.0132709421693381 15:0.022733723186352 27:0.0193209003990087 63:0.0143425586943449 64:0.0575511420474411 75:0.0134479090486641 83:0.0171929250402001 88:0.0506678720905657 142:0.00344134858472009 172:0.10407198476522 179:0.0361712484985385 183:0.116749386104437 205:0.0525045684829372 229:0.138996300890485 389:0.0565502926136458 424:0.0683423812722219 586:0.0487772299458803 705:0.0758462745169481 998:0.0734457055916828 1608:0.143812419036619 1711:0.0964696283658619 1782:0.0817054083165075 1970:0.0912319379493546 2107:0.0850248500272955 2424:0.0930241894497003 3315:0.125028670959019 4162:0.237805362542666 6173:0.825890828401218 7014:0.293897660261199 7173:0.146948830130599
+1 15:0.101880477133253 183:0.261604380941771 205:0.235297599291987 229:0.155726905557876 800:0.262236063879054 998:0.329144657376721 4162:0.532858687556244 6173:0.616867366069391
+1 6:0.0321521904793152 12:0.10837243490544 26:0.0695817721358744 28:0.237427687002508 29:0.116770487635247 33:0.0889598799224649 41:0.0740245477232603 42:0.0961813886378341 108:0.148816711730597 142:0.00416876563057016 158:0.115386910728683 159:0.0967130857445721 174:0.117841680659725 192:0.129828340063289 255:0.149628572855124 308:0.118781652701211 351:0.114086736049216 404:0.135001947112539 480:0.118242075625755 506:0.0899370373856997 507:0.0859580501051529 539:0.149356288806053 561:0.142459883045943 592:0.475076728929479 689:0.200907706547483 1067:0.170993080899301 1482:0.380915294015612 1792:0.189773759264 2024:0.156564915128497 2884:0.268134600767436 6528:0.318646244582649
+1 4:0.0322460463265347 6:0.0298194185369298 11:0.0334996379251805 17:0.0406223427795193 20:0.0420524294415606 26:0.0645333320974126 27:0.0217067487807879 29:0.108298314722816 30:0.0896199061309531 58:0.0500077462061566 60:0.113166245686806 63:0.0322273094961789 67:0.042169266428858 72:0.0463933167329779 75:0.0755426448348165 78:0.0572719004664768 79:0.0505552299572593 80:0.0970785944757509 88:0.113849225244537 92:0.049213052772914 94:0.044752896507806 97:0.0465171602757408 134:0.0533913404136929 142:0.0309304380864037 158:0.0535075609687546 162:0.0403755251524049 165:0.0723816127541042 176:0.0386417801051235 180:0.0574477808507211 181:0.0629241898400761 186:0.0423036167487155 218:0.0422867746212411 234:0.0534784438639631 264:0.0613687900006414 299:0.308570131288916 303:0.0666074127693449 308:0.0550817807994197 312:0.0675695014819276 317:0.0444325482141666 345:0.0547075978773053 346:0.0621095119696129 405:0.0708971964559458 408:0.0877947816727054 437:0.0670545292088586 453:0.0723084292675859 485:0.0515898253184753 496:0.0625127952713188 499:0.0555271587014574 517:0.581880672919029 579:0.0875357824986735 593:0.0718033477375435 626:0.0703588821604095 647:0.0673390228444542 667:0.0718033477375435 685:0.078785830968619 731:0.0859103617334846 742:0.0765107370005017 784:0.146408803036079 850:0.0683370140727832 862:0.0717322006652499 882:0.0559824504348203 1115:0.104867059136971 1159:0.0758053304538437 1169:0.0840125333963699 1507:0.204361224771654 1681:0.110632257560045 1707:0.0852121791892545 1709:0.0950746010995121 2206:0.192435245226836 2387:0.101257684590956 2449:0.0935746273128399 2682:0.109702335488251 3167:0.11543584565919 3262:0.135101282903999 5125:0.138518334557513 5279:0.147763582990462 6252:0.147763582990462 6758:0.154646042732924 8748:0.16509485962876
+1 6:0.0191881257037764 12:0.0431171017752319 26:0.0553676652831741 27:0.0558712201192287 28:0.0944630777529125 29:0.0232291772539092 31:0.0487565739716506 72:0.0398040756421872 80:0.0416452626139064 88:0.0488396119587706 96:0.0396284027692585 108:0.0592082784809828 134:0.0916163405473332 142:0.00829293409007642 165:0.0621012549232095 172:0.0501583660611124 176:0.0331534894800865 177:0.0667560294979374 185:0.0372456985646142 192:0.0516535570756771 231:0.0685686516911667 259:0.0778083571694418 312:0.0579726076402662 322:0.0554314448906893 400:0.0563588078995889 405:0.0608276702179714 413:0.0553028760118932 414:0.0472585174727977 471:0.0666742131564468 480:0.0470438411143832 737:0.0753689862046094 906:0.0748411396943127 1027:0.0668382290555401 1210:0.102447851931229 5152:0.118844580530665 8261:0.141646442711181 9186:0.804633098898065 9935:0.424939328133544 9936:0.141646442711181
+1 6:0.0144195348113891 31:0.0549595458036257 84:0.0846275736299126 102:0.137397380276933 158:0.103496872295609 159:0.086747290671091 220:0.23135180542254 505:0.103722956201865 795:0.170831948317247 852:0.143099976971028 861:0.19251195792404 1418:0.183046936724963 2490:0.711186348112711 3588:0.453872441244168 4331:0.23706211603757
+1 6:0.0257780508293611 15:0.0220794825401471 26:0.0836808829589481 29:0.0234052137720384 41:0.0296746275352265 67:0.0364541478933846 134:0.0923106321021913 192:0.0520450006570488 252:0.186037940801335 259:0.0783980083709348 274:0.0696467254042437 275:0.0433367514631756 306:0.0505705996433981 312:0.0584119385681038 327:0.0541977373218128 360:0.0793540557159128 405:0.0612886375244773 530:0.0529777661441231 538:0.0564689275016265 553:0.0823825796516622 592:0.0634822069850854 683:0.0779386950526822 764:0.0596033087391159 772:0.119421603775836 799:0.0650147266000242 823:0.146855534919113 1027:0.067344745881007 1122:0.0787109823558291 1274:0.0897476336951475 1433:0.0621336992125392 1538:0.0819981608482676 5483:0.534748663216464 6698:0.713599374499169 7066:0.142719874899834
+1 111:0.173911731173149 232:0.246835763272977 252:0.20069589438017 274:0.300536799868826 764:0.257197844781314 5483:0.576881580018319 6698:0.615859169704218
+1 6:0.0130840817428548 15:0.0448272456761823 27:0.114293124153729 29:0.0475188341010704 60:0.0993095426904061 64:0.226963191410222 94:0.0785462071183558 97:0.0816426821655843 132:0.0793552630163267 142:0.0101786788639998 144:0.0777876049564733 166:0.0976259524810065 176:0.0678205323096705 178:0.211188740400685 198:0.113925363235237 204:0.157092414236712 226:0.101452568872248 322:0.113393496676685 337:0.10002997494798 389:0.11150808159632 402:0.0997280359430354 426:0.117787310664647 574:0.0979678630279249 834:0.131849821721571 1045:0.0679691881579656 2935:0.416625912986735 6072:0.246536429765768 7327:0.271420646491913 7960:0.55886314995065 7961:0.279431574975325
+1 6:0.0284010781772847 15:0.0324348862468411 28:0.0699092057646719 29:0.0687647860314399 31:0.0721664684921718 60:0.0718557134573309 68:0.0581177991353721 80:0.123281489549375 171:0.0818559003255508 179:0.0516066075424304 205:0.0749098461445997 355:0.0569774571154117 404:0.0795010810952489 413:0.0818559003255508 427:0.100565637652867 467:0.118831751751784 513:0.141687082941333 561:0.0838929730799653 658:0.0875576017405928 750:0.218924190994352 781:0.102590750624079 827:0.0808638639902512 1140:0.0961564342417275 1469:0.107186666319742 2206:0.122188129120934 2940:0.154580783576705 2968:0.144397178914079 3588:0.297986189219485 3621:0.433191536742238 3781:0.347292431908117 4156:0.154580783576705 5736:0.508926088771331 9945:0.209656313236617
+1 6:0.0119524454740305 15:0.0819003152419363 28:0.0882627727883221 60:0.0907203055885975 63:0.025835189177196 83:0.0309695417943839 142:0.0123977727552859 158:0.0857892254519123 159:0.0719053891355182 245:0.138199654224697 264:0.0983932151972022 328:0.121262714192036 339:0.0929674400050731 404:0.100372844754616 499:0.178054534734825 530:0.0982562825040817 561:0.105917759192105 697:0.256271951690985 731:0.137740970770711 750:0.138199654224697 850:0.10956544086216 867:0.105065884482375 1485:0.149050129128789 1877:0.193877290866897 2306:0.336268879234995 3021:0.219234310226567 3670:0.390327094380073 3674:0.214178887448578 3691:0.549614865264716
+1 6:0.0139313724771058 15:0.0477301402506651 31:0.05309893237042 60:0.211481135159771 159:0.0838105274217451 252:0.100541498088178 404:0.116991245841822 499:0.103767218600503 561:0.123454213487245 697:0.298702054085847 781:0.150969264342193 795:0.330097126450639 1036:0.157486645018077 1197:0.229036559218384 2171:0.192757815077715 2335:0.205866928755095 2531:0.211470868172058 5916:0.276135433109464 6457:0.564055731149278 7387:0.276135433109464
+1 4:0.0369878551789772 6:0.0171021948426847 11:0.0384257885006241 15:0.0292968320162638 26:0.0370115070490326 27:0.0497974897250918 28:0.12629107079896 29:0.0310559187669978 75:0.0173302511488848 82:0.0641393963474759 111:0.0534765883026073 142:0.00665227230288076 204:0.102667696877205 294:0.0817170297719294 309:0.0629302801914328 325:0.076785684270608 455:0.062435567370629 535:0.0810892290240086 671:0.0522218504730503 710:0.098543554332019 804:0.0805533539467571 1098:0.095925331874385 1111:0.212357654453997 1124:0.0950668463618667 1138:0.0843220002364928 1141:0.113848833885698 1433:0.0824439859525213 1608:0.0926651619673487 1994:0.122441899077284 2240:0.116147714218437 4024:0.427873508898904 4705:0.136966201284388 5480:0.158887574816587 6233:0.161123804503 6493:0.709547505413142 6622:0.166359344240779
+1 6:0.0200778444140974 20:0.0188763380148143 28:0.0494215799729331 29:0.0243062722212461 31:0.0127543320473266 60:0.0253988215879448 63:0.0216991121120588 75:0.0135637205019672 96:0.0207329500927692 98:0.0217064330295554 102:0.0318854856760698 142:0.00433873122803622 150:0.0291826713507776 176:0.0173453784346061 179:0.0182413750370403 199:0.0156419021621646 205:0.0794350953819513 257:0.0810968200109365 276:0.0259954468068448 304:0.0506764327327152 345:0.024556942921589 346:0.0557589731410325 351:0.0474952758938151 384:0.0362627277122733 408:0.0394089948380712 411:0.0501406740218068 496:0.0280605108780253 527:0.063832696840403 555:0.0385631234292856 625:0.0372025806775107 631:0.044916640030442 643:0.0272261223809475 644:0.0318854856760698 683:0.0404695970088162 685:0.035365090576001 1018:0.254187450416709 1064:0.0310047799471611 1080:0.0338347199639915 1133:0.078041334458238 1155:0.0389538912421765 1235:0.0392239594687723 1296:0.0340662025874232 1337:0.0430848739575718 1527:0.0435120048189188 1627:0.0446757955973174 1649:0.0380064889015047 1665:0.0360663211273386 1711:0.0486502054463696 1725:0.0482753918646592 1808:0.235523247908654 1892:0.0444309368802391 1958:0.0973004108927392 2163:0.0422859652750757 2171:0.0463003128022951 2215:0.0566884597497033 2796:0.0576558439431672 2928:0.0581806529356726 3112:0.0576558439431672 3360:0.0469126501767621 4422:0.0571594172228268 4979:0.132655134357181 5195:0.0694169400922909 5953:0.064020084114461 6222:0.126105399841994 6240:0.0599633270072965 7021:0.0651015276347473 7660:0.0694169400922909 8365:0.0741071661315449 9188:0.841942481486289
+1 6:0.0204227501518255 15:0.0699701864014353 31:0.0778405882774192 81:0.248690921050198 85:0.125156419756861 96:0.126534657084281 159:0.122862371560293 179:0.445313594974146 204:0.12260161583198 245:0.236137200159753 473:0.179810723470418 480:0.150212370102224 507:0.109199389196516 737:0.24065539254053 1140:0.207433550911445 2340:0.566970509864292 4811:0.348847955793333
+1 6:0.0207406146552742 15:0.0710592188966363 26:0.179542196209582 31:0.0790521175649549 60:0.0787117123315908 63:0.067246201344474 67:0.117321738411951 68:0.127326033429618 75:0.0210171889786351 80:0.067522098621863 85:0.0635521919064062 88:0.0791867523061897 102:0.0988140795193069 142:0.0107566868997535 153:0.179888668784163 158:0.074433356359523 172:0.0813249317524774 205:0.082057250242721 252:0.0748416020079056 255:0.0965218395618579 339:0.161322789785741 475:0.0840317462326744 541:0.106936267501656 609:0.0734376552720079 768:0.129600791132941 1034:0.130750613575949 1083:0.111174692420191 1138:0.102261150101158 2250:0.518901793068281 2686:0.474523819804285 3479:0.178677195198838 4061:0.380428788192644 7191:0.215125186047098
+1 4:0.0322460463265347 6:0.0298194185369298 11:0.0334996379251805 17:0.0406223427795193 20:0.0420524294415606 26:0.0645333320974126 27:0.0217067487807879 29:0.108298314722816 30:0.0896199061309531 58:0.0500077462061566 60:0.113166245686806 63:0.0322273094961789 67:0.042169266428858 72:0.0463933167329779 75:0.0755426448348165 78:0.0572719004664768 79:0.0505552299572593 80:0.0970785944757509 88:0.113849225244537 92:0.049213052772914 94:0.044752896507806 97:0.0465171602757408 134:0.0533913404136929 142:0.0309304380864037 158:0.0535075609687546 162:0.0403755251524049 165:0.0723816127541042 176:0.0386417801051235 180:0.0574477808507211 181:0.0629241898400761 186:0.0423036167487155 218:0.0422867746212411 234:0.0534784438639631 264:0.0613687900006414 299:0.308570131288916 303:0.0666074127693449 308:0.0550817807994197 312:0.0675695014819276 317:0.0444325482141666 345:0.0547075978773053 346:0.0621095119696129 405:0.0708971964559458 408:0.0877947816727054 437:0.0670545292088586 453:0.0723084292675859 485:0.0515898253184753 496:0.0625127952713188 499:0.0555271587014574 517:0.581880672919029 579:0.0875357824986735 593:0.0718033477375435 626:0.0703588821604095 647:0.0673390228444542 667:0.0718033477375435 685:0.078785830968619 731:0.0859103617334846 742:0.0765107370005017 784:0.146408803036079 850:0.0683370140727832 862:0.0717322006652499 882:0.0559824504348203 1115:0.104867059136971 1159:0.0758053304538437 1169:0.0840125333963699 1507:0.204361224771654 1681:0.110632257560045 1707:0.0852121791892545 1709:0.0950746010995121 2206:0.192435245226836 2387:0.101257684590956 2449:0.0935746273128399 2682:0.109702335488251 3167:0.11543584565919 3262:0.135101282903999 5125:0.138518334557513 5279:0.147763582990462 6252:0.147763582990462 6758:0.154646042732924 8748:0.16509485962876
+1 6:0.0269656965159776 21:0.0326254379309266 26:0.140057962271678 27:0.0471105846075206 29:0.039173661074452 31:0.0411115185664929 33:0.0298438779856107 63:0.0349717824171867 64:0.0467760799737283 67:0.0610138599135308 75:0.0109301127095132 88:0.041181536155325 100:0.03332647939259 102:0.15416652924386 142:0.0181807543826623 174:0.0790660406082679 199:0.050419132006986 204:0.0323760310469072 232:0.0478699177721289 252:0.0389218151931973 277:0.04884061268053 286:0.0302191194290376 345:0.0395776592263343 357:0.0499243905340095 387:0.0380700580698098 537:0.0603169912187083 538:0.0945128999346824 571:0.0425645383473383 574:0.0403814606886348 609:0.0381916844379801 644:0.0513888430812867 742:0.0553509200486705 882:0.0404999384351255 1046:0.0605918806990163 1149:0.0517405898306127 1179:0.0672538612535309 1184:0.0710350663436705 1296:0.0549034365330136 1313:0.0704835320149961 1439:0.444857637914249 1446:0.0562886503823167 1472:0.0548406008059527 1916:0.131739764296794 2087:0.0966410244935513 2108:0.0811059755957858 2398:0.0784080192145909 2495:0.0800357895254601 2581:0.0839526547513247 3275:0.0874806113646919 4373:0.21835832311949 4500:0.200419380650264 5191:0.11187711794094 5640:0.619075040605935 5797:0.327537484679235 6323:0.106898071941936
+1 67:0.21136176790642 68:0.229385072966621 153:0.32407964265794 339:0.290632158321622 2250:0.623220679800586 2686:0.569921055410733
+1 6:0.0163596898198115 15:0.0186832582561455 28:0.0805386974903043 29:0.03961013602997 37:0.025801825430022 63:0.0117871466078747 75:0.0110518965900044 98:0.0353733701819804 142:0.00141410194517424 159:0.0656127855556599 179:0.029726621178845 186:0.0309451170734296 200:0.0526814126230992 229:0.0285578363572323 245:0.0630527446240631 341:0.0455635339138393 351:0.0386997710263966 408:0.032110963625593 462:0.0670100590474002 550:0.0444289778003299 641:0.0431498353592651 655:0.0412918191606095 727:0.0583839264586696 781:0.0590946881704624 784:0.0535490567797577 792:0.0598409038680065 814:0.0605369674752331 998:0.0603598923997646 1372:0.0761943016152871 1379:0.0575587080166152 1943:0.0654473180203427 2017:0.0820096625660473 2218:0.323710209708948 2404:0.0853484857185619 2624:0.0692253286128159 3163:0.104328801115267 3315:0.61651395940785 5164:0.100024309417397 9663:0.634169068612087
+1 6:0.0164892301019045 15:0.0188311971578958 26:0.0475799558098478 27:0.0160042278028716 28:0.0405882119298217 29:0.0399237793967809 31:0.0209493720129436 80:0.0357876703799056 88:0.0419701023491523 94:0.0659919693900163 96:0.0340544908825904 102:0.0523728642756626 134:0.039365046479816 142:0.00427589751731569 165:0.0533664359851624 176:0.0284903030737716 185:0.032006924668897 312:0.0498185013870137 373:0.0392374196457397 405:0.0522719866583683 527:0.05242355725635 737:0.0647680015891537 799:0.0554499016245331 952:0.0512047078579892 9189:0.691457858894861 9190:0.691457858894861
+1 6:0.0166398518202077 27:0.0726768865925659 31:0.0317111026895238 63:0.0179835047392444 67:0.047062644355325 142:0.0345196473804118 144:0.0494637012120251 153:0.072160850641466 154:0.0601433604708114 172:0.130491293159975 179:0.226767703260065 192:0.0671905804398143 308:0.122947088235192 541:0.0857931973091814 561:0.073727833434355 626:0.0785234206988134 858:0.0834696652600021 1031:0.102236423669397 1527:0.108183921190056 5292:0.177685377272113 5851:0.710741509088452 6741:0.552758062085955
+1 6:0.0120395268388835 15:0.0206242531206422 26:0.156331173827653 27:0.0701124293775329 29:0.0218626071647984 31:0.0458882297806843 60:0.0456906311071974 63:0.0390351230836778 67:0.136206013358043 85:0.0737816436826267 92:0.0397393308624786 94:0.0361377736427843 97:0.0375624091338228 134:0.0431132803665196 142:0.0187321479299722 153:0.156632854799741 176:0.0624061462636113 178:0.0485821733250896 180:0.0463888387716206 204:0.0722755472855686 218:0.0341463907052206 226:0.0466766009956384 232:0.106863762901731 252:0.0868882133934333 255:0.0560290665083008 291:0.145357115993782 296:0.0542836998935274 320:0.0571394358849046 337:0.0460220897326908 437:0.0541462472233621 441:0.0424483788194472 475:0.048778808193578 507:0.0321873637793006 538:0.105494270721888 541:0.0620744410922662 613:0.0556749336868798 657:0.0625228976135589 693:0.0715778077016087 713:0.0601946774990025 726:0.0554759296666139 824:0.0673251694229429 834:0.0606618599041443 858:0.0603932827039969 979:0.738158890946195 1005:0.063458079465711 1080:0.0608661981870772 1154:0.0817651497641531 1317:0.156158915706657 1387:0.0976449067227966 1550:0.287523742194443 1557:0.1771683389149 1558:0.145043801750389 1578:0.0841100915760952 1928:0.0868439157149898 2354:0.087865920041889 2987:0.102825630613908 3136:0.098292720492697 5197:0.124876021958936
+1 6:0.033156448051446 26:0.143510247902699 27:0.0965436247423332 142:0.00859794987576827 153:0.287574375240087 541:0.341901805434927 979:0.508216129439687 1550:0.527887081123389 2643:0.482044180532289
+1 6:0.0134165114219682 15:0.0919323595571866 26:0.058070360165497 60:0.101832718566122 63:0.028999765063783 88:0.102447298158003 142:0.0069581936240438 174:0.0983462856487034 180:0.206777689376041 291:0.107987931923067 312:0.121604918256373 331:0.104881007792761 9676:0.936142797520592
+1 27:0.0219564961150111 64:0.0654017877367623 80:0.0981955337477398 97:0.0470523641836049 116:0.161464450437043 142:0.00391078859009503 179:0.0411054278388605 206:0.0719208477542156 216:0.0656061361164134 308:0.0557155250813409 337:0.115298681662207 351:0.0535133352605187 414:0.0557155250813409 535:0.0715070318549721 561:0.0668219965493895 574:0.0564609031355732 584:0.106073608709723 837:0.0818271952747269 1046:0.0847188845724993 1266:0.102729232133169 1472:0.076677509857215 1626:0.10837487880672 1916:0.0920985267028488 2187:0.105360086097119 2229:0.107192265208413 2736:0.0985492799390439 2801:0.624255298172916 2804:0.0985492799390439 3667:0.136655692806475 4177:0.135122391062705 7040:0.322084377469893 8146:0.526150430564696
+1 6:0.0240247680830031 25:0.03005146809215 26:0.0346619398439682 28:0.0295684629449472 29:0.0290844246540611 31:0.0305231839803966 40:0.0250185613102353 60:0.0303917485187554 63:0.0346196617091863 67:0.0226498234124183 88:0.0305751684319641 94:0.0480750693069853 97:0.0249851504452937 134:0.0286773884047194 142:0.00622997226464399 154:0.0289451753668654 159:0.0240886589785097 176:0.0622654532441851 185:0.023317005629377 199:0.0748672146416614 204:0.0480750693069853 227:0.0284616558538009 232:0.142163788469348 252:0.0577948841306594 255:0.0372685002985801 278:0.0691360931454972 312:0.0362927175698618 345:0.0587687449260716 355:0.0240989124534689 373:0.142922062057871 389:0.0341248734197586 405:0.0380800786011252 414:0.0295853524142553 423:0.0303373143977173 427:0.127604281780145 432:0.0376140192649012 441:0.0564702400841333 457:0.0552209315468483 515:0.289292412123373 527:0.0381904975971064 633:0.041638474102346 644:0.0381535678224316 717:0.040577540136806 852:0.0397371090027189 873:0.0462975638069704 903:0.0445818886939159 997:0.0761601572022504 1027:0.041842881814714 1304:0.103109087147751 1321:0.0464534046840319 1394:0.0519356198427585 1518:0.0513076433492279 1535:0.0594224493252601 1731:0.0497191875646889 2066:0.0536076900791736 2581:0.685635719030944 2849:0.070992983671769 3787:0.514112004572904 4003:0.0734445720818435 4540:0.0766052192547294 4642:0.0855145832392423
+1 6:0.0183936567932531 17:0.0501145540647615 26:0.0796128174568386 27:0.0401684378932513 29:0.0334010877816447 31:0.035053385433298 33:0.0254461278573775 41:0.0211740180808737 63:0.0198789278707275 64:0.0797664507442565 75:0.00931946731707995 88:0.0351130853328401 94:0.0276051465540519 100:0.0284155382242543 102:0.131448775402407 140:0.0324945833731029 142:0.0202714081527712 176:0.0238355969367328 185:0.0267776777809898 199:0.0429894425961113 204:0.0276051465540519 232:0.0816317536708234 252:0.0331863535404094 265:0.0434408426886104 274:0.0496956877127607 284:0.0279254878669261 387:0.032460110098602 405:0.0437318620951477 431:0.0512748974490506 448:0.0416435315645186 534:0.0350495224245129 538:0.0402928087473925 587:0.0582404630276363 599:0.0431162663177241 644:0.0438162584674691 717:0.0465999928206736 732:0.0503180324663378 882:0.0345319268539099 930:0.0402608259403603 994:0.0526468071363663 1027:0.0480531344578309 1046:0.0516631499475213 1215:0.0539006105681217 1281:0.0594962488948768 1296:0.0468129465782591 1439:0.325117772797151 1504:0.0642505381649719 1607:0.118992497789754 1759:0.0698014961792221 1916:0.0561633928374406 2054:0.0715815145671916 2561:0.068538722103208 2581:0.0715815145671916 2931:0.0698014961792221 3610:0.0663388686956011 4001:0.0799504374101091 4183:0.0911457287036614 4500:0.0854429372010897 5191:0.0953910697802972 5640:0.703798733045135 5797:0.465453401489924
+1 6:0.0220657573372482 29:0.0801385288498198 75:0.0111800011624949 85:0.0338063087368624 100:0.0681768044398531 142:0.00286098612345559 208:0.0826576740166202 274:0.119233820452676 275:0.0370958319502534 303:0.0492881175804985 314:0.0440209246429647 341:0.046091669242075 346:0.0919195267177396 347:0.0453169447075896 355:0.0664015676387787 373:0.0393804035312115 377:0.0424579845506903 389:0.0940268609598892 398:0.042907473953223 422:0.0503032087697064 437:0.0992379491272559 448:0.0499572256075671 473:0.0485691172985661 475:0.0447003175126224 478:0.0432604394648957 506:0.0308614873978896 513:0.0412805559329066 546:0.0476606784431655 583:0.173636654745755 643:0.0448826824211063 644:0.0525637146347084 655:0.0417704402549934 663:0.0516281779501286 772:0.0511118576649946 824:0.0616959815388203 880:0.194666750042832 913:0.057575543220322 1175:0.0584490223350995 1227:0.0602787032543554 1382:0.0722806751137698 1433:0.106371667769998 1873:0.0730472239361137 1992:0.216284861137401 2067:0.0687914449722296 2494:0.169109998901143 2706:0.0858720127284162 2709:0.0825865017362031 2838:0.0829602516959362 2907:0.16444351736401 2934:0.287735109564308 2989:0.0849813967827052 3254:0.190093094948615 4080:0.101183709642708 4293:0.0883589208504059 5954:0.527690477490219 6627:0.114434895767145 6659:0.117812419834845 8189:0.457739583068579
+1 6:0.037827392841141 9:0.0723430409263257 12:0.0318753295436931 15:0.0162000080088282 16:0.0520355374552661 26:0.0204659230827508 27:0.0137680369658771 29:0.0343454290530516 41:0.0217726662232936 42:0.113158423042762 47:0.0223800046179896 57:0.0706026297853678 58:0.0317186376135678 60:0.0358892312625944 62:0.0541352782038862 63:0.0306614403383294 68:0.0290276588079661 72:0.0294260972105884 75:0.0479147723636265 83:0.0122516457626982 96:0.0878886807475029 98:0.0306717849954695 119:0.197891134378701 127:0.0470260141835574 142:0.0134876415962112 144:0.0281114711438089 149:0.0526461882399359 159:0.0284459925809136 175:0.0457710503832419 183:0.12479308653585 186:0.0804963145428 199:0.0221024366087617 204:0.0567712410248092 209:0.0297031312405469 237:0.0406338414959369 242:0.0331323871953729 247:0.139162785316067 284:0.0287150187615278 286:0.0264945525623232 291:0.0380585328264583 308:0.0698739366131112 325:0.04245949526067 327:0.119296787469171 332:0.0607335084735582 346:0.0393944788952949 381:0.04545293448558 382:0.0415311623706953 390:0.0431926809531291 405:0.0899365659445462 408:0.0278429950907886 411:0.0354250735491818 423:0.0358249506978448 436:0.0417655365863984 442:0.040237427242325 473:0.0416310904701864 477:0.0505572321420712 498:0.048585836899842 555:0.0544907506897289 557:0.0445010859285184 574:0.035404364950832 586:0.0695171230241863 594:0.0452745958134596 610:0.121760216317827 685:0.0499718425876545 717:0.0479175036980293 731:0.0544907506897289 743:0.0600243738306458 851:0.0537042108407402 853:0.0500355966919247 882:0.0355082400782736 884:0.0488164906923425 909:0.0416310904701864 1005:0.0498452666167318 1027:0.0494117296744194 1067:0.0502937929567826 1203:0.093722670924526 1511:0.057074233000346 1539:0.0777369199873777 1581:0.0674584752951649 1634:0.082210857735548 2107:0.0605885468077887 2119:0.149683740510385 2143:0.0744164572543552 2404:0.0740045517342919 2475:0.0762088106433043 2503:0.093722670924526 2886:0.527151874257887 2945:0.367960973739126 2999:0.0788657998594031 3194:0.093722670924526 3416:0.0748418702551926 3676:0.41105428867774 4382:0.0957226116878673 4686:0.0904621340907083 5103:0.0890951937025966 6381:0.0904621340907083 6715:0.104715457538112 7126:0.104715457538112
+1 63:0.0601422478301033 75:0.0563907386427736 111:0.174006959770666 142:0.00721525509718209 144:0.165421491529175 183:0.244780957942811 209:0.17478758929983 610:0.358247999351785 2886:0.517002761707978 2999:0.464084507589247 3676:0.483768445875243
+1 6:0.0209861661107001 20:0.0394606071219947 25:0.052501243639346 27:0.0407377883708172 28:0.103314824577183 29:0.0254058879950683 31:0.0533253521554904 51:0.0475104866813177 56:0.0645822141659527 83:0.0181254943428757 94:0.041994635984586 96:0.043341817541549 138:0.0586599368230854 142:0.00362801234568062 160:0.0634049824662981 172:0.0548585004210514 199:0.06539816731163 229:0.0366339156888718 242:0.0490171613110238 337:0.106961813678868 348:0.0694970267898566 398:0.054410905368615 413:0.0604850812581776 515:0.0505406636552001 693:0.0831784494727429 856:0.052501243639346 1014:0.257355102043087 1093:0.0888020654020625 1124:0.0777712509114551 1149:0.0671122174430925 1311:0.256317556574041 1424:0.0650503854703314 1844:0.0909609759002073 2022:0.100538648207232 3212:0.111374273816049 3255:0.122789124786172 3407:0.131810408226999 4139:0.119490618603141 5343:0.131810408226999 6793:0.149397758392155 7354:0.283230463929382 7418:0.149397758392155 8731:0.154919548767682 9194:0.528019175994416 9412:0.488106225585441
+1 4:0.0162075245787417 6:0.0112408887426157 15:0.012837433332786 20:0.042272827922414 26:0.0324357769484517 27:0.0109102573638521 28:0.0276694285752089 29:0.0272164776408882 60:0.028439838637575 63:0.0647924282532864 75:0.0683447101982452 81:0.022813667389241 83:0.0194172355482589 84:0.021990749636389 88:0.085834435223605 94:0.0224937241228016 96:0.0464306387662581 97:0.0467609585911898 103:0.0356687129514123 107:0.0716841789246601 108:0.0346857051762771 134:0.0268355832924181 142:0.0262343354862145 150:0.0326767311371415 153:0.0324983700735505 165:0.0363804838547219 176:0.0582664548526151 180:0.0288744334950005 185:0.0654584132138704 192:0.0302599585395545 221:0.0356687129514123 231:0.0401692482523124 234:0.08063808982171 242:0.0525104446300109 264:0.0308452131536066 278:0.0323479139720589 285:0.0399583488887958 304:0.0567439542285853 317:0.0223327104968103 319:0.0339909839139398 320:0.035566073329041 322:0.0649462813073022 345:0.0549943226069681 346:0.0624350304299357 355:0.112755799669562 357:0.0346857051762771 373:0.0267485786819203 375:0.0265625572050448 386:0.0298418938699491 389:0.0319332036123781 472:0.0341380677308535 477:0.040063257793474 506:0.0209622261297877 507:0.020034816982601 525:0.0603904347128221 530:0.0308022862292396 571:0.0295723395376129 631:0.0251472689428655 674:0.0496162873344452 719:0.0403303113392809 732:0.0410010480648525 733:0.0422916995429182 750:0.043324103026534 825:0.0484798081532541 856:0.0281214127194936 866:0.041906117473923 886:0.0322735036343316 890:0.0393504289581353 936:0.0438438301719461 952:0.0698136202324346 965:0.037426910050377 987:0.0305902996787659 997:0.0356343857627617 1031:0.0460432090512957 1036:0.0847147859028357 1080:0.037885772487184 1096:0.0490956199555102 1228:0.04613796532989 1232:0.0424235088284697 1380:0.154368161553528 1446:0.0391073683834267 1472:0.0381013146259516 1579:0.0470325278566463 1805:0.054263138911108 2227:0.0992325746688905 2449:0.0470325278566463 3412:0.0728961749103597 3767:0.0600165395650008 4050:0.0583273426139582 4740:0.0616013601530477 4857:0.135809354183324 5343:0.0706020397524158 8161:0.0800224096018257 8838:0.565649273908547 8842:0.659924152893305
+1 6:0.00234001962377424 17:0.0127510305608455 26:0.0303847501201544 37:0.0332152385836188 38:0.0190647893197403 59:0.0145302776615082 63:0.0202317926619824 67:0.0529463904020722 75:0.0094848943416576 80:0.0152360996469697 81:0.0569895465777843 83:0.0424419713831183 87:0.414194062862795 100:0.0144599668923369 102:0.0668910412801773 111:0.248777018652677 118:0.0153227680599812 142:0.00970881870207934 144:0.0417357195549352 159:0.0140774556970639 172:0.0367013108079717 186:0.0265575381964 189:0.0175108081697699 194:0.018539857674383 214:0.0200480187863582 220:0.0375440519937403 229:0.0367631100601787 234:0.016786458520055 239:0.0396779158713803 242:0.0163966756144689 286:0.0262234400046839 288:0.0243040792730228 317:0.0139470237659637 323:0.0200177329403938 337:0.0178898381211769 342:0.043719574120612 348:0.0232473724296853 351:0.0166063460801694 369:0.0836996558039122 396:0.0237675423806018 399:0.0220642816523514 408:0.0275580842362405 411:0.0175312885298454 413:0.020232796644674 426:0.0210656447891259 430:0.0364246500196201 477:0.0250199459070281 485:0.0161936361680306 496:0.0392445392563791 499:0.0174295338258081 507:0.0125119639482623 513:0.0175108081697699 518:0.0204069786257612 519:0.0279786502126327 534:0.0178358379085032 535:0.0221901795574581 553:0.0299133327524457 572:0.0253579496010203 582:0.0394738520443398 591:0.0492111413776788 593:0.0225385002125983 639:0.0269221464849512 641:0.018515900230767 662:0.0487860991514411 664:0.0264526585898324 686:0.0830185504785536 702:0.0278750901056046 712:0.0644649759149557 717:0.0474271750935849 726:0.0431295235449748 800:0.0206357260350466 804:0.0440870732043779 844:0.0512835573666203 851:0.0265773341079883 906:0.0273809550115445 953:0.0255696364924217 963:0.119122003150194 966:0.0233735176943143 971:0.0291806582883192 1009:0.125134131707775 1010:0.0260537360564544 1012:0.0312410743651484 1094:0.0241011544277472 1098:0.0262500996004183 1143:0.0277731738793867 1162:0.0271474533721717 1218:0.0284665243725647 1245:0.0228831583060023 1305:0.0212826994000891 1308:0.0546671407746524 1316:0.0324814755437122 1352:0.0340203160550105 1379:0.0246988496288354 1410:0.032274341856962 1411:0.0296371358700913 1430:0.035190927552537 1437:0.0319756560288849 1486:0.0319756560288849 1527:0.030427253955969 1543:0.0328052712490793 1570:0.0387439858621075 1576:0.0259387373863091 1581:0.0333840942501105 1624:0.0296371358700913 1651:0.0320736821686828 1652:0.0560621269247768 1795:0.0299133327524457 1820:0.0596863233989196 1844:0.334699793515659 1884:0.105572782657611 2034:0.0315067917642304 2042:0.030056018345355 2150:0.0350323864742874 2154:0.0319756560288849 2206:0.0302019470687485 2218:0.0347265864211725 2246:0.0296371358700913 2257:0.0337582148697327 2261:0.0355202606342194 2549:0.037956806932811 2564:0.0356914864464723 2646:0.0697553320745858 2658:0.0384707281363343 2825:0.0315978654534956 2983:0.0387439858621075 3119:0.037956806932811 3212:0.0372556833304032 3370:0.0792826792677217 3388:0.0406848066312977 3447:0.0396413396338609 3739:0.0360482775348194 3783:0.0414884275348539 4084:0.0387439858621075 4109:0.0403178160373273 4148:0.0396413396338609 4395:0.045524464397989 4606:0.0799413454310865 5153:0.03703801545353 5831:0.0429211402176582 5861:0.0499748764793129 6230:0.0518219643803059 6414:0.0447682281186512 6770:0.0970843275930171 7423:0.149924629437939 7712:0.207287857521223 8506:0.0463818143802714 8894:0.0518219643803059 9195:0.412129904493724 9371:0.435402308485094
+1 6:0.0314111468712795 15:0.0358724753086177 29:0.0760527744799923 52:0.0853634431028481 60:0.158942583437132 88:0.0799509158974976 96:0.129744155200569 142:0.0081453678608942 158:0.0751516489937361 180:0.0806857084082662 196:0.0973644829295482 204:0.251422708037213 255:0.0974532892477098 289:0.0910960539524842 341:0.262450487418585 363:0.0978112854197175 377:0.0805866434099359 381:0.100648670614832 388:0.108880320592986 409:0.106945221531472 423:0.0793289520993173 506:0.0585761125110572 613:0.0968373338083497 633:0.108880320592986 664:0.118362019369288 795:0.124045319748261 917:0.127373031248242 952:0.0975423709347403 999:0.460338226152064 1046:0.117634668594359 1080:0.105866679332501 1118:0.134809820805427 1182:0.156751881567615 1241:0.391705237846093 1245:0.102390344526148 1446:0.109280264236047 2470:0.312119174641172 2491:0.161297470699061 7603:0.223611826302244
+1 6:0.00977939453560533 15:0.0670101777148089 28:0.144431778380233 31:0.0372738156217641 57:0.0730106856501576 63:0.0211381435217377 75:0.0198196038514396 83:0.0253390294439947 106:0.0684531325841002 142:0.00507187886362453 158:0.0701920526992655 159:0.0588324097457974 179:0.10661877819946 186:0.166483631982179 245:0.113073843029364 294:0.186910061958353 317:0.0582873094819749 339:0.0760652099815226 346:0.162952452265297 351:0.0694011317096747 408:0.0575852816902792 490:0.1012047052962 499:0.072841392491972 557:0.0920377840229138 683:0.118270113369825 731:0.112698551924858 781:0.105975775263968 784:0.0960306752193944 850:0.0896455604827188 1094:0.100723385187829 1294:0.111071818930906 1363:0.110723335116419 1378:0.239851058583502 1675:0.144512245397064 1751:0.133228940692991 1785:0.14844603832394 2201:0.505487850405762 2385:0.307818367917063 3046:0.299793634796911 7388:0.38767714380984
+1 2:0.134612112562126 4:0.142632631432697 6:0.00824368918488026 15:0.028243623636066 20:0.0930044044570498 26:0.0356809594537789 28:0.0608754808414347 63:0.160368472765609 75:0.0334144723017068 83:0.0640797594029858 96:0.102151999741815 102:0.0785504742445096 110:0.0795593871172847 120:0.137363245086215 142:0.0384787560258163 169:0.0600901322780459 176:0.0427306554408658 218:0.0935226892306764 234:0.118274517998289 255:0.0767282993417454 345:0.060496475797258 472:0.150214254151613 473:0.072581004290751 475:0.0667995244228447 518:0.0718920419658415 592:0.0812051441157392 636:0.084311031698537 737:0.0971410922633334 850:0.151136174071573 2712:0.143329097332276 5059:0.855049476154674
+1 6:0.0118973043807618 11:0.0534625299346589 15:0.0407612392556301 29:0.0864173801769604 59:0.0738759343381579 81:0.0724376384784235 88:0.0908467671541408 144:0.282927860405032 159:0.0715736627304525 172:0.0932997871939017 179:0.0648545292004309 204:0.0714217590815463 205:0.0941399374138347 229:0.0623045929366942 254:0.229640449476733 308:0.263717299997722 365:0.126057002957206 493:0.106211572112717 582:0.100347968897626 641:0.376559749655339 834:0.119890527466885 838:0.313407742128042 849:0.148684123949435 1665:0.256457012912182 1819:0.165144769451343 1962:0.192982862542451 2393:0.186204675800363 2423:0.153555018734844 2806:0.189418157006807 2815:0.179746845262716 3799:0.23145891778482 3954:0.192982862542451 8922:0.263477142489544
+1 6:0.0254381738918445 15:0.0581023207188836 17:0.0462051584826519 26:0.073402286351586 27:0.0246899538267173 28:0.0626160218911972 54:0.0634899614278166 60:0.12871892557319 67:0.143894037501814 88:0.0647478842382662 134:0.121458053702391 140:0.119838829465926 142:0.0153918076105594 153:0.147087869662542 174:0.124311993247979 176:0.0879048056632123 289:0.29509489364401 373:0.0605321350873937 405:0.0806407502394043 409:0.129913649127544 501:0.176352461117975 502:0.0585295314538055 515:0.0612623660695555 558:0.0941307520179905 599:0.0795056029358744 613:0.0784232726915092 631:0.0569083650697836 671:0.0517839386701323 713:0.0847897481949617 757:0.322253304770714 883:0.0988766022764055 997:0.161281500478809 1045:0.044048742118619 1140:0.172250087112336 1154:0.115173745382069 1312:0.110257448173994 1497:0.2058985417867 1528:0.510077166534114 1880:0.118476811932591 2078:0.235402419919867 2153:0.270002451087628 2188:0.133449590389073 3589:0.134212475277746
+1 6:0.0282746686281577 15:0.0387486272836604 26:0.0244761121450501 28:0.0835176586486663 29:0.0410752336834914 67:0.0319878010523063 88:0.0863611505603343 100:0.0349442173989566 142:0.00146640667445231 158:0.0405885461145079 178:0.0456378351204378 186:0.0320897134559799 192:0.0456684691040864 204:0.135790529097418 252:0.122433488006733 274:0.18334091385358 275:0.0760543018649942 278:0.0488196210805636 286:0.0316860195910198 351:0.0401311961464641 355:0.0340343146655996 373:0.0403690784148539 382:0.0993379466530068 389:0.0481937382914821 502:0.03903353551683 575:0.0590210208789977 609:0.0400455898179831 655:0.0428191188223947 667:0.0544669470642321 712:0.0519290753974575 772:0.052395059597896 880:0.133036004248754 895:0.117610031783046 952:0.0526815189528726 1031:0.13897724725984 1045:0.0293762498562938 1116:0.0659411287067224 1164:0.0599934325229225 1201:0.144239048133754 1330:0.149361838497775 1415:0.0835641886915668 1528:0.680344253633652 1579:0.0709817081375274 1824:0.0801018693217563 1863:0.0681266877999794 1931:0.0737168758430145 1946:0.0787517914271868 2007:0.0763599728803724 2188:0.0889979672956976 2388:0.0911415228232982 2389:0.090577238540353 2424:0.079277811553433 2427:0.182283045646596 2616:0.0750839576929054 2824:0.165081555522193 2880:0.0850430317042065 3023:0.210148162543814 3134:0.204964104212496 3962:0.191595955988753 4490:0.112087131120693 6512:0.117307870574717
+1 6:0.0168863368119968 11:0.037940791392962 15:0.0289270574626117 27:0.0491689629094323 40:0.052754538738101 63:0.0182498931702164 75:0.0171115146698109 83:0.0218767830729467 96:0.0523119271898034 97:0.105368176107256 107:0.080764289447872 142:0.0153260557476979 178:0.0681401314856278 180:0.130127631475531 186:0.143735825009415 192:0.06818586993199 204:0.0506859302308217 229:0.0884314889820453 242:0.0591618515096882 304:0.0639316124210737 320:0.0801423322122408 367:0.0720642567750762 399:0.0796114886625226 409:0.0431195581288678 455:0.0616475270786385 480:0.0621007615531092 530:0.0694079167256446 565:0.0898055999775264 718:0.13880859504612 737:0.0994916939161462 781:0.182991148225422 1010:0.188012167842657 1135:0.114681737652814 1190:0.0913706869339447 1277:0.0996692159768192 1675:0.124766540522936 1785:0.128162832188541 2164:0.217946997281331 2227:0.111802192665679 3644:0.149696941434978 3889:0.350295920223464 3930:0.146797347536547 5858:0.18031741866474 6168:0.196375223606607 9197:0.63729908564542
+1 6:0.0139900148055943 15:0.0119827635410157 26:0.0151381602290306 29:0.063511257962523 31:0.013330611381689 48:0.0427929304431927 59:0.0217176383424966 63:0.0151196957927816 67:0.0197840431043333 92:0.0230886908833886 96:0.043339455089785 106:0.0244815856148908 142:0.00272086094399615 159:0.0210408292761845 178:0.0282264134297565 185:0.0203668097554638 204:0.0209961734821237 215:0.022281428711913 220:0.0280575554750723 252:0.0252411786624351 255:0.0325530845391364 314:0.0279099139040848 322:0.0303111966231648 373:0.024967755243185 377:0.0269189868900247 389:0.029807206633508 394:0.0977485235756994 416:0.0340274430315098 426:0.0314857063050953 473:0.0615870699307094 530:0.0287515816315878 613:0.0323473321253943 678:0.03784945418402 730:0.0336204627731775 800:0.0308431294572704 827:0.0298743936955354 862:0.0336537262824853 863:0.036962992432498 933:0.0812893135504274 963:0.0296742274226336 1080:0.035363475043194 1309:0.0825740847586938 1340:0.187829271604607 1543:0.0490323057351029 1645:0.0399779642583655 2103:0.448166846761007 2122:0.466681364934292 2146:0.0538794558926475 2204:0.0521298047342118 2335:0.0516833748074533 2410:0.0488682587860978 2968:0.0533461791032386 3571:0.0556841015444361 3578:0.0626726516544592 4297:0.443686808318775 5228:0.0693244474637924 5361:0.485271132246547 6441:0.138648894927585 7619:0.0746948075509798
+1 31:0.109458653013899 67:0.162448266427137 111:0.179597402980822 613:0.265606377806677 633:0.29863799869136 766:0.382353391404918 979:0.440188466080328 1983:0.494806861933742 2526:0.429940580148083
+1 111:0.15750449315032 274:0.272183457763584 394:0.234629101940914 800:0.222101434401792 2103:0.403406290430283 2122:0.420071675541582 4297:0.456427079717674 5228:0.499205479202452
+1 6:0.0238631004746541 11:0.250209957326147 15:0.0272523791019804 29:0.0577774191508958 31:0.0303177871942025 63:0.0171933494406823 88:0.0607388436633957 97:0.0992680809055893 118:0.2083451210125 142:0.00618804949924514 162:0.0430808853515161 199:0.148726835495691 252:0.0574059704620684 275:0.0534899120835509 308:0.0587725329793215 314:0.0634754705635525 346:0.0662711569521749 355:0.0478734918247866 409:0.0406232312552571 430:0.0619086747778606 505:0.0572175491500198 527:0.0758670117595466 534:0.0606288921306528 587:0.201489464408353 609:0.056329097136418 641:0.125881219996724 655:0.0602304102500536 693:0.0945811486778414 895:0.0827165604831397 1045:0.041321344976564 1064:0.368500803081309 1235:0.279712881476421 1331:0.0899198227994282 3636:0.691493936326206 6747:0.176157033077442
+1 6:0.0112470794820102 26:0.0486804606494713 31:0.0428678447698835 41:0.0517886936754115 47:0.053233315191107 60:0.170733008538569 63:0.0729316256008097 75:0.0683823499524961 83:0.0291418939195058 117:0.116115419987909 134:0.0805510876800211 142:0.0204157205981604 174:0.0824438228882886 176:0.0582985441691894 180:0.173342013760055 229:0.0588994520461639 248:0.136821614204422 345:0.0825369147736921 535:0.106654965910187 781:0.243761096501814 1305:0.102293249728587 2340:0.15611909123389 4004:0.184905858345872 9198:0.848941194276571
+1 4:0.0103616699396019 6:0.0359321926099504 15:0.0246213873845563 26:0.145156139877561 27:0.0139501236245077 28:0.0176894062335559 29:0.0608994019427035 31:0.00913028522950445 32:0.0179572987057513 40:0.0299348326099924 54:0.0179362994570457 60:0.0363638777367158 63:0.046600421427389 67:0.108402503899254 75:0.0194193841742101 80:0.0155972044444168 81:0.0145850583443957 88:0.0182916702859873 94:0.0143805146764138 102:0.0684763995065072 134:0.0514689560447953 142:0.0111812890394331 144:0.0142416271359107 150:0.0208906363894874 158:0.0343873280102022 162:0.0129739274399993 176:0.0869177439898867 180:0.036919561419096 192:0.0773822556923112 199:0.0783816192175658 209:0.0300959645785065 232:0.0212624596907341 240:0.0431298266803879 252:0.0345759326587937 274:0.0517765457327691 306:0.0375950333626226 308:0.0353990208008502 322:0.0415209569753464 345:0.0527378209396149 351:0.0169999265486989 373:0.0171006955632856 382:0.042080425174381 387:0.0169096399744502 398:0.0558969119411484 408:0.014105613768895 415:0.0208415246348104 416:0.0233057773280488 423:0.0181493735205479 427:0.025446525934888 432:0.0225026802405141 436:0.0211589495317367 455:0.0174905178593307 493:0.0641559557428994 510:0.0216565851086862 609:0.0169636629573779 625:0.0266317492440163 658:0.022155050527093 720:0.0476993983824114 755:0.0750054657810584 764:0.022155050527093 799:0.0483330400039816 847:0.0255458642376654 863:0.0253163680330738 873:0.0276976322824189 895:0.0249103203204434 912:0.0227815013934011 963:0.0203242111390317 965:0.047854968464442 975:0.0296817294772404 997:0.113907506967006 1045:0.0124440370032983 1057:0.0652693162243083 1073:0.032070933440763 1094:0.0246723663973148 1149:0.0919268097250614 1159:0.0730759181331481 1190:0.0259235156277864 1248:0.0308426334558486 1309:0.0282779583330943 1316:0.0332513062037086 1335:0.0257491616577632 1416:0.0289145289231166 1449:0.0306949247845834 1720:0.0622967966382169 1731:0.267701644574661 1816:0.0263241956314587 1928:0.0345583050256892 1980:0.11897850869985 2024:0.0233295486351676 2041:0.0377003192600745 2055:0.0369026435641279 2873:0.0345583050256892 2879:0.0451367529583584 2944:0.039382507713339 2951:0.0391141945710898 3118:0.0353985230012492 3119:0.0777128125315271 3185:0.678605746681341 3277:0.183317049050613 3400:0.0363621123429105 3621:0.0365373963107074 3954:0.0388564062657636 4066:0.171700807805586 4530:0.039382507713339 4601:0.0416490612107624 4685:0.0451367529583584 5186:0.049692642503759 5549:0.0439383972587396 5662:0.0466034218002265 6005:0.049692642503759 6534:0.0949621829935942 7559:0.0530501763495407 7599:0.051159311345627 7601:0.051159311345627 7707:0.049692642503759 7869:0.390006406237193 8196:0.0474810914967971 8643:0.0484942868041402 9947:0.106100352699081
+1 4:0.0325656896557536 6:0.0225862556905834 15:0.0257941839212309 28:0.11119206015139 37:0.0356221073177407 41:0.0346671530478973 42:0.0450436378582474 54:0.0563719907211455 60:0.0571440107606413 142:0.00585694505055565 171:0.130193528780502 172:0.118082370145741 174:0.0551875790464091 185:0.04384174276017 204:0.135589547082241 205:0.0595728418549056 229:0.0788541348935822 320:0.0714627147828915 442:0.0640673509692145 498:0.077359962555482 536:0.0962428085701993 719:0.081035471913929 768:0.09408903432172 793:0.0903568389958278 909:0.0662863872563646 1031:0.0925143657462765 1080:0.0761236734944939 1154:0.102261415190481 1308:0.0879427111682306 1805:0.10903062543209 9199:0.568277981582372 9693:0.700429159354162
+1 15:0.101643612259278 144:0.176379633357099 252:0.214107919942668 553:0.379250870929915 726:0.273404998075426 3185:0.466910727621174 7869:0.690021344597446
+1 6:0.0265633900357722 15:0.0455042866029205 26:0.0574868376017665 29:0.0482365269905624 32:0.0995639344962306 67:0.0751294778122446 85:0.0406970017354047 88:0.101417851984464 134:0.0475614572492477 142:0.00172206847747743 153:0.0575977731536807 159:0.0399510481229717 165:0.128956304672697 176:0.0688448485565019 185:0.0386712608125632 186:0.0376844193064422 192:0.107261147168703 238:0.130970217652298 252:0.335484914178456 274:0.0717685423104236 275:0.0893140478013549 286:0.148841372492545 312:0.0601914829480753 353:0.0744963447185875 373:0.0948145130735973 420:0.0675280289970193 432:0.06238286220462 510:0.0600372822356263 530:0.109183512331925 550:0.0541048277442721 655:0.0502844511294568 667:0.0639630289726947 836:0.075306312528273 895:0.0690574217566033 913:0.138622172600544 987:0.0542160464544239 1031:0.0816036713288094 1045:0.0344978748019669 1102:0.0795506225999009 1162:0.077042985566914 1518:0.170187483690974 1528:0.599219548076425 1776:0.076913296226248 1910:0.0812723662846203 1931:0.0865691014361932 2007:0.0896730112657416 2188:0.104514386567921 2388:0.107031661937785 2424:0.0930995627734392 2427:0.214063323875571 2616:0.0881745282259396 2880:0.0998699246794041 2967:0.11161093135804 3136:0.10843399026663 3594:0.117741884660101 3882:0.116565910489834 3962:0.112499950378232 6512:0.137760001775887 6667:0.12034936454806 9044:0.147067896169358 9366:0.147067896169358
+1 6:0.032359056987958 28:0.0597388229207583 29:0.0293804466163163 31:0.0616676993382314 63:0.0349720214451501 75:0.0163952811232957 142:0.0104889684495871 159:0.0486676678390426 169:0.058968138268894 174:0.118599871522843 176:0.0419327950003205 229:0.0423650141436686 277:0.0732614197504421 304:0.0612556385881106 347:0.0664565269118431 404:0.13587054676447 408:0.0476360117464066 413:0.0699475137942196 427:0.171870721572228 467:0.101544122803505 480:0.0595014213107783 535:0.0767144511927909 555:0.0932271126530202 671:0.0494044726720229 842:0.11715514968891 847:0.172541671540872 987:0.0660450392257127 1007:0.093381795083481 1014:0.0992054524064304 1225:0.0721605244358747 1731:0.100450461264118 5674:0.163769861679447 5741:0.537466614031705 6831:0.309539635955015 9201:0.610623774130889
+1 6:0.0123305067605321 15:0.0211227148656439 26:0.0800547488933772 27:0.0179517392171279 37:0.0291707470987939 64:0.053472823333666 94:0.0370111772809714 97:0.038470244384573 132:0.0373924065263873 134:0.0441552730553474 142:0.011191179952956 174:0.0451928039236395 192:0.0497897406364564 226:0.0478047145737126 308:0.0455532873445038 317:0.0367462454349292 337:0.0471343846130239 351:0.0437527661154819 387:0.0435203952663989 402:0.140976330503482 506:0.0344912502375241 582:0.104001820017202 592:0.121462679639304 613:0.0570205254247276 806:0.0661823647658849 987:0.050333283999921 3448:0.098751223830428 8914:0.546141643978849 9203:0.775599505043723
+1 6:0.022744971076605 17:0.0826266065910333 27:0.0441519338659319 81:0.0923229856287729 142:0.0196603408723611 284:0.0460422793917594 308:0.224074749068475 355:0.0456303315676602 387:0.0535187591124298 399:0.0714882107412069 478:0.0594560721001131 796:0.0666452319703607 965:0.0757301318493821 991:0.0805378762537342 994:0.086801670746369 1021:0.0811715095620544 1292:0.0909917835735114 1308:0.0885606914807738 1613:0.086942706441276 1707:0.0866615847939836 2256:0.115085544945945 2924:0.117399336832365 3156:0.137399270803267 5677:0.281748888714985 5678:0.563497777429971 6099:0.157276474711298 6640:0.147499137114087 7860:0.352675564931357 8220:0.460451090216232 8289:0.16790301941454
+1 6:0.0240061488426988 15:0.0548314892890531 28:0.118182189322928 68:0.0491243511159971 72:0.0497986400112194 77:0.0603401232957214 81:0.0487210849189941 83:0.0207338163982566 142:0.00415009601630626 172:0.0627528305764985 176:0.0414781316007934 179:0.0436207348959444 205:0.0633179101548763 245:0.0925233662164495 346:0.133336844427365 507:0.0427865455777684 571:0.063154969399828 586:0.117645848830114 768:0.100003975574168 1681:0.237505587262529 1936:0.21548444151595 2825:0.108053660958154 3470:0.150778387163384 4006:0.13668573670684 4250:0.177213013884634 4811:0.13668573670684 4900:0.14045890947078 6283:0.170896618553831 9206:0.805337310547526
+1 15:0.0769090835015826 81:0.136676717590843 308:0.16586227681596 2924:0.347600457162612 5677:0.417106455474404 5678:0.417106455474404 7860:0.522107666482261 8220:0.454440413318307
+1 6:0.0133542909757634 15:0.0228765034553793 17:0.0363845180229162 26:0.0578010529210775 27:0.0194422462663005 29:0.0242500906783643 31:0.0254497033419453 63:0.0288652756823519 67:0.0377700627145389 88:0.101972188317345 96:0.0413700558607403 100:0.0412608944425679 102:0.063623571062658 134:0.0478214217750405 138:0.111982607136037 142:0.00519444321619807 153:0.0579125948317917 180:0.102909368328871 186:0.0757807945436471 187:0.0622614576414276 205:0.0528343260132682 327:0.0561541568223697 331:0.0521973056871725 345:0.0980007279127596 351:0.0947709905274731 355:0.0401865135169509 386:0.0531787134183152 404:0.112145098493076 423:0.0505894569917144 480:0.0491113998749297 535:0.0633187242542803 561:0.118340349581635 586:0.0490835777428071 587:0.0845682942305994 712:0.0613160132909034 755:0.0696899313719823 768:0.0834462577047259 952:0.0622044719952297 1014:0.0818823909677424 1884:0.100415800249914 2162:0.115045156331072 2837:0.100415800249914 3241:0.11222098169127 3370:0.113114859969805 4587:0.138512979409587 5350:0.135172689781518 6286:0.1240677542299 6962:0.277025958819174 7927:0.310600446463927 8709:0.739358747507043
+1 6:0.0225500452810876 15:0.0772584916305933 29:0.0409486841240807 31:0.0429743491281316 42:0.0674571354749961 80:0.0734127896739974 159:0.0678300430017936 174:0.165297306047364 179:0.0614623499302156 204:0.135372169173726 346:0.093936929425132 365:0.11946366310001 1305:0.102547395393571 1331:0.127458044143185 1336:0.199905571313777 7857:0.524479670601696 8707:0.749088361134755
+1 6:0.020795078521049 15:0.0712458170194197 31:0.0792597046587722 174:0.152432973669267 179:0.340074100150645 220:0.166821573049231 252:0.15007626497701 365:0.220332706529895 394:0.193727526507974 499:0.154891232881356 795:0.246364659167441 991:0.220900451573349 1124:0.462378671984112 1655:0.391830662329661 9930:0.460526829542279
+1 6:0.0345411963894702 15:0.118341258250363 27:0.0335252265984787 33:0.0637132470577681 63:0.0497738221614729 75:0.046669067053969 142:0.00895703528752324 144:0.0684515477731904 180:0.177451712372954 185:0.0670472462315664 229:0.120591752647897 325:0.10338904546806 357:0.106582831823515 480:0.0846852152176142 498:0.236613425077359 499:0.0857595302104234 505:0.0828208641292932 523:0.134958958665124 764:0.106486954411883 882:0.086462710529298 1168:0.299425909027279 1232:0.130359688057335 1309:0.135916352625554 1433:0.111007736574616 3749:0.417317320879535 3835:0.5602831315016 4576:0.223996620843166 5816:0.216947162846655 8426:0.245894237449067
+1 6:0.0171042113754137 15:0.0293002864278852 26:0.148063484415288 27:0.0498033613847691 31:0.0651920953635386 41:0.0393793235345068 42:0.0511662433295389 60:0.0649113725806543 63:0.0184853609067146 67:0.0967519934236231 75:0.0173322945719053 134:0.0612498041114718 142:0.0288299122684706 153:0.222523816150045 179:0.0466191979542379 180:0.0659032962364627 186:0.0970602430652252 192:0.0690656324765864 291:0.137669797722645 345:0.0627597963907787 404:0.0718178701071964 541:0.17637476549722 594:0.0818862944091259 730:0.0822088482110406 876:0.0825358976808736 933:0.298153280218004 1055:0.0933190166128136 1557:0.12584899549559 1928:0.123376666785648 6733:0.189394529781821 7855:0.795635754718634
+1 6:0.0243181796845356 7:0.0215718522460709 15:0.0238046513649311 16:0.114693260679353 20:0.0195967898102495 26:0.0601461633328688 27:0.0101155295655899 28:0.051307849756659 29:0.0126169839567569 40:0.0434127599809064 41:0.0159966195216717 63:0.0525637012074287 75:0.0704070300906396 81:0.0634556049264235 83:0.00900142011870409 96:0.0215242630639228 100:0.0214674679005543 114:0.0243939117453722 134:0.0497616375400446 142:0.0234225017602337 144:0.0206538098490143 159:0.0208995864615948 166:0.0259211973424285 171:0.0300378912166227 174:0.0254654514925948 176:0.0540221946272803 180:0.053542309034076 183:0.152811442856527 189:0.0259967892800996 192:0.0280557547867335 204:0.0417104608656245 215:0.022131858005215 218:0.0591179899718371 219:0.0290475105742362 228:0.0525479881658135 229:0.054579024351686 238:0.102771648667118 240:0.0312743491518433 255:0.0970036868775915 262:0.0650265885598249 265:0.0656376725037556 298:0.10331843932519 313:0.0393949812015959 317:0.062117836209452 320:0.0659507203714263 322:0.0301077237149233 327:0.0292162245960244 346:0.028943560870297 363:0.032453343809436 386:0.0553362857845702 388:0.0361259998079268 402:0.0794379988483645 408:0.0409131150262719 422:0.0316788834100093 455:0.0253654885484617 457:0.0239551449165927 472:0.0316513737418962 473:0.030586824217761 478:0.0544872763225993 496:0.029131494319148 507:0.0371508712892778 508:0.0539079803224776 550:0.0283038513019868 557:0.0326954417341011 574:0.0260119798703824 580:0.0314341086465427 586:0.178762506414717 597:0.062130836385599 608:0.0758158682732911 610:0.134187873455909 643:0.0282652597780791 655:0.0526105963888163 658:0.0321301910529638 731:0.0400349593060543 737:0.0409368476285813 767:0.0664625413603822 796:0.0305378159175929 856:0.02607298547628 930:0.0304163863342473 1000:0.0421785476306038 1017:0.0409368476285813 1314:0.04050996614622 1358:0.0465106237261108 1359:0.115696741891695 1380:0.10734272690171 1544:0.0910387681314207 1634:0.181203688825976 1711:0.0505070342356516 1880:0.0485402160875689 1917:0.0432290142536881 1979:0.0513364348066824 2017:0.0522449403411274 2107:0.0445150777913582 2886:0.0645507221161077 3416:0.0549871527209555 3666:0.0994881193426232 3676:0.724814755303902 3944:0.0604012296086585 5119:0.0664635339249049 6231:0.184782889127004 6524:0.148386792949348 7126:0.0769356088545022 7127:0.0769356088545022 7247:0.0688590865243002 7703:0.202758758459885 8226:0.0769356088545022
+1 4:0.0842369841434317 6:0.048686160254837 11:0.0437558831265467 29:0.141454914002268 30:0.0585289630179928 31:0.185565574030512 63:0.0210470093877926 83:0.0252297837810057 98:0.0631623308902107 102:0.0927817847420988 114:0.0683728912541059 142:0.0101000243419368 194:0.0771475993334632 220:0.0781136924413897 276:0.151285382597606 277:0.0881809930071633 286:0.0545601664844979 289:0.0847173858278153 304:0.147460506672884 308:0.143891224642154 323:0.0832972975074987 357:0.0901377376521194 373:0.0695115280356769 390:0.08894658093097 394:0.0907123230315612 408:0.0573370108442879 427:0.103435962261742 455:0.142192183708319 500:0.100768375437864 502:0.0672118563254434 505:0.280168398429099 553:0.248949247663633 653:0.0994705967274028 717:0.197352793419416 796:0.0855934377670114 886:0.0838691498103293 987:0.0794950079040102 996:0.108414165077459 1021:0.104249746707221 1033:0.116642171200442 1043:0.108901422176269 1045:0.0505829732966473 1207:0.110944495450185 1380:0.10028913047347 1395:0.103975721839525 1455:0.129287088909108 1625:0.131484259836967 1665:0.104947363112852 1808:0.0979051252849995 1822:0.415253009564759 2050:0.125370255977378 2185:0.121689062568789 2244:0.134726680959369 2285:0.131484259836967 2564:0.148518534734642 7461:0.215640282406746 7705:0.189435280514549 8505:0.201992456960812
+1 6:0.0271546273186489 15:0.0465171027658471 26:0.117532713159085 29:0.0493101562643449 31:0.0517494497367871 63:0.0293473388076867 67:0.15360335920143 88:0.207350339726015 142:0.00704159034823782 153:0.117759522580967 186:0.0770463679980661 232:0.120513276572174 294:0.129749164329795 373:0.0969248564827562 377:0.104499540129424 382:0.119253604500067 409:0.0693398185864898 431:0.15139466248404 448:0.245914032772794 505:0.097664670077482 570:0.157515554887253 688:0.150723406943855 732:0.148569415466344 1500:0.154945316905417 2055:0.209160113870841 2067:0.169312661458389 2201:0.467865849359686 4322:0.519510408343274 5226:0.269117590096871
+1 6:0.0410786023411735 15:0.0703695007174494 26:0.0888997578439516 29:0.149189475281293 63:0.0221978310824528 75:0.0208131909958391 81:0.0625275451135074 96:0.063628390178848 134:0.147101569978643 142:0.00532613993133417 176:0.0532321016497216 178:0.331522626362016 199:0.0480042178976103 204:0.0616506467751244 215:0.06542451615447 240:0.184901706926113 256:0.0698880884676259 279:0.116274065755707 294:0.0981400750424373 373:0.293249293367843 387:0.072493249693573 411:0.0769396143871157 457:0.070814378314238 574:0.0768946374424857 582:0.0866195017409924 643:0.0835556122095798 644:0.0978549658664644 645:0.130668135635647 693:0.122110957447728 872:0.117198019017067 1155:0.119547550148497 1192:0.127790325634468 1294:0.233280039196776 1296:0.104547477346227 1380:0.105772802997245 2163:0.129773519232562 2866:0.14076185751163 3051:0.154442520936652 3930:0.178553523222062 5222:0.180261806836414 6455:0.207899662400623 6638:0.392948892761601 7443:0.199793342628429 7963:0.219324878420444 8280:0.227431198192638
+1 6:0.041394514971465 15:0.0118184455530324 17:0.0187969479717866 26:0.0597222908813949 29:0.0125280673638504 31:0.0262956210833768 37:0.0326428575608067 41:0.0158838853761133 42:0.0412764197668637 47:0.0326539179375946 63:0.0596494459374958 67:0.0975637362145551 68:0.0423532883399809 80:0.0224603157360839 81:0.0210028032018003 88:0.0263404055148281 92:0.0227720788415887 100:0.0213161786454844 111:0.0215726446758967 142:0.0125232340434916 153:0.0598375403119933 176:0.0178804933559723 186:0.0195749144100304 190:0.0295762146567657 215:0.0219758865452164 232:0.0612368145434667 274:0.0372796794780124 294:0.164824692748169 306:0.027068835394261 314:0.0275271890942521 331:0.0269661408913335 339:0.0268309254893361 342:0.0322246329883832 345:0.0253145387636183 347:0.0283376170822652 364:0.0319612952775099 373:0.0246253758503198 377:0.0530997010520302 380:0.0423884701211947 409:0.0176169370381177 414:0.0254876823205296 422:0.0314556305003159 433:0.0278955202855712 434:0.02984926004799 448:0.0312392801168362 457:0.0237863240735239 475:0.0279520274215711 540:0.0389952204142111 570:0.0400194530291657 574:0.0258286637440598 575:0.0360031707258421 582:0.0290952146802107 586:0.0507150572405324 591:0.036272333428049 594:0.033029325989551 634:0.038755589458792 660:0.04441406715026 662:0.0359590451579645 684:0.0322841609655288 686:0.0407939673736466 688:0.0382937945963682 706:0.0351171645706132 717:0.0349574153410159 749:0.0401556412372863 819:0.0346457849811254 844:0.0377998607653158 851:0.0391790109883886 872:0.0393664412154342 883:0.040224477301911 891:0.04852454387603 908:0.0366909975224276 909:0.0303712674566051 951:0.0449677289010801 953:0.037693512262563 971:0.0430167046507061 984:0.0791153163334839 993:0.0379074177996458 1007:0.0398187758899971 1009:0.0307444399883572 1027:0.0720950059432131 1028:0.0419639632275504 1061:0.0447423630835036 1069:0.0549205131203535 1134:0.0839279264551009 1160:0.0436896216603479 1184:0.0454352272389202 1225:0.0307698491772198 1236:0.0380162111487955 1283:0.0427423400153279 1304:0.04441406715026 1322:0.077511178917584 1426:0.040941859713306 1449:0.0442013634311163 1500:0.0393664412154342 1529:0.0511922416844436 1543:0.0483599324718739 1627:0.0460540696394873 1645:0.039429751934212 1744:0.0474282053367915 1782:0.0424757049983188 1838:0.0528739793091158 1865:0.040941859713306 1897:0.0460540696394873 2021:0.0503503610970923 2024:0.0335950605888067 2026:0.0831153624698353 2090:0.0555968662952779 2201:0.416041919703168 2218:0.0511922416844436 2250:0.115070456894438 2282:0.049955932477539 2322:0.0545996377419133 2354:0.0503503610970923 2394:0.10628122865225 3157:0.0534149789615031 3316:0.10628122865225 3376:0.0503503610970923 3479:0.0594345599575954 3653:0.0523622375383475 3691:0.0528739793091158 4224:0.273495243410416 4322:0.65995140606075 5226:0.068373810852604 5772:0.0698328342683924 5833:0.0671099472822303 5848:0.0736705279307098 7074:0.068373810852604 7625:0.0736705279307098 7726:0.0802311085791894 7964:0.0736705279307098 8182:0.0715584927011899
+1 6:0.0165445869026168 15:0.018894416290736 26:0.0358047666046477 28:0.0610867089013334 31:0.0315295532612552 54:0.020646434542675 63:0.0715221890643825 67:0.155977352406076 75:0.0558840251820158 80:0.0179539074590926 92:0.0364062376484052 102:0.0525486877793995 111:0.0172443375556245 142:0.0135857990828925 153:0.119579536855674 158:0.0395831770405261 166:0.0205743779160607 173:0.0206103204473453 178:0.0445073963039274 179:0.0601251824247899 180:0.0212490126519438 182:0.0841175273637198 185:0.0160571883404342 186:0.031294858537783 192:0.0445372714907546 199:0.0257785451771363 204:0.132427028515037 209:0.0173216990538344 232:0.0489503404280598 252:0.0199001397167045 256:0.0187651556968297 286:0.0463517461173341 304:0.0208792494843804 312:0.0249928747570933 314:0.0220041699953999 317:0.0164348868690735 343:0.0292161564973397 357:0.0255255912902991 375:0.0195476775056282 389:0.0234999951667972 390:0.0251882744192667 405:0.0262237357504616 409:0.0140822979076327 423:0.0208917036248162 432:0.0259027853394818 436:0.0243560198994759 437:0.0248023947736405 455:0.0201332963337822 457:0.0380277344473782 485:0.0190822488644501 505:0.0198348222870854 506:0.0154263323753828 530:0.0453354812940128 535:0.0522969053112603 538:0.024161513336354 574:0.020646434542675 580:0.0249501295100239 586:0.0202698273518985 609:0.0195268348241098 613:0.127513147735053 684:0.0258067092724946 693:0.0327871484116641 764:0.0255026295470105 767:0.0263765871835727 824:0.0308391719806871 834:0.0277869561456274 852:0.0273648449334818 856:0.020694856395036 863:0.17484969071961 884:0.0569357185805907 886:0.023750425689467 909:0.0242776162071136 963:0.0233951543861345 965:0.0275428740557394 975:0.0683331460018083 979:0.464919548296115 987:0.0450234748337762 1005:0.0290678009870743 1013:0.0341665730009041 1198:0.0328474346956263 1228:0.0679068705676616 1301:0.0362239932005652 1309:0.0651013902976936 1314:0.0643077819167646 1387:0.0447275231131656 1416:0.0332834501438313 1433:0.0265853145894711 1466:0.0336782817391585 1550:0.351210667474126 1572:0.0426978676734939 1578:0.231166346998536 1620:0.0333478410738219 1625:0.0372342768426137 1649:0.0313181856341502 1689:0.0441668304510078 1706:0.0414682675564899 1983:0.570116254048676 2024:0.026854591715513 2047:0.0379122724530347 2114:0.039483248757241 2354:0.0804962614320493 2526:0.0825628920004626 2529:0.0841162317896587 2616:0.0732241451043087 2791:0.0431565468089594 2987:0.0942012425280074 3057:0.0494111048069325 3469:0.091310237249993 4051:0.0546553791628571 4324:0.0527539621933143 4450:0.0527539621933143 5362:0.0546553791628571 7429:0.0588893698767334
+1 6:0.0135426134072129 31:0.103234381911771 47:0.0640982585008479 179:0.0738234299601905 180:0.208721195874453 229:0.141841712816864 245:0.156585904888002 345:0.0993827357930617 346:0.11282917652783 404:0.113726570520433 455:0.0988809634714336 457:0.0933830943143475 475:0.109737292946884 561:0.120009187141955 571:0.106883033292492 574:0.101401146935091 1010:0.15078321208992 1746:0.158190116456098 2107:0.173530810282077 4155:0.485347016057119 6115:0.280932583456464 9680:0.629961078158735
+1 67:0.159180852772182 92:0.185769788552781 111:0.175985059064816 613:0.260264086843678 979:0.431334707056255 1379:0.297023756788984 1578:0.393190161689394 1983:0.484854532291784 2526:0.421292942636821
+1 6:0.0195186892141463 15:0.100309187974625 26:0.042241133964525 29:0.0354440369934206 75:0.0197789692662093 134:0.0698959960584704 142:0.00253074019333338 159:0.0587117902527926 174:0.0715383650998708 240:0.175713814344584 322:0.0845795854854784 365:0.103404409320109 373:0.139338767467701 411:0.219349296600553 430:0.0759567800461752 582:0.082315319315138 643:0.158807353110148 644:0.0929924855254388 1064:0.271271848866927 1155:0.113607150422559 1195:0.131403016951829 1245:0.190874149376818 1296:0.0993524415215397 1313:0.382637851195747 1407:0.118959131255348 1786:0.261318279168056 2768:0.158303612191068 2866:0.133767304308775 3540:0.328045340469764 4235:0.386882319651899 6186:0.193441159825949 8702:0.21612998603283 8897:0.21612998603283
+1 6:0.0143167843460958 15:0.0245252980602109 27:0.0208435211950592 28:0.105722221159211 42:0.042827819153466 96:0.0443517495027698 142:0.00185627534648645 159:0.0430645741832518 172:0.0561367890591951 179:0.0390217934548083 186:0.0406212989901986 245:0.0827686121028088 312:0.0648824174684636 327:0.0602013955530691 351:0.0508007439747344 405:0.068077777649857 413:0.123788956014395 427:0.076041649083691 467:0.0898533791224053 478:0.0561367890591951 530:0.0588462842318095 586:0.157863640702593 608:0.0781110690759966 647:0.0646611044374934 705:0.0818234863703039 886:0.0616569742222377 1027:0.0748047406689748 1424:0.0665661609292917 1502:0.102499958639269 1916:0.0874300518310902 2202:0.100355139998937 2605:0.104072103369804 2873:0.103270305361712 2889:0.108150415344446 3236:0.107168144486007 4090:0.128273036248122 6540:0.289830175573672 6541:0.579660351147344 8119:0.593984497998828
+1 6:0.0195412927228248 27:0.0142248894444697 29:0.0177425413809315 64:0.0847433210793659 100:0.0301884696750703 111:0.0305516828527488 119:0.0511143948036021 170:0.145602532048094 185:0.0284484181605337 205:0.0386561530040128 218:0.0277114136264735 252:0.0352569506012622 278:0.042175494552155 284:0.0296678435924424 290:0.101603845850402 299:0.0404425006045609 312:0.0442797167878527 341:0.0408184857187111 387:0.0344853946325983 394:0.045511805835804 398:0.0759971657171752 400:0.0430470898908029 426:0.0439793246856842 444:0.128355635390915 462:0.0600315406484637 471:0.0509260389655094 505:0.0351412281278392 509:0.0453463168624453 613:0.0451828460976324 628:0.0530861890582053 663:0.0457215822076729 719:0.0525830143991909 733:0.165420868734943 800:0.0861635430109041 896:0.061874261824509 1003:0.0516300136255875 1027:0.102102629971238 1269:0.0499059701409479 1309:0.0576698589676883 1412:0.0613214232022954 1436:0.065590116046069 1518:0.0625990024633092 1816:0.0536853697718118 1835:0.0657775937396704 1880:0.068259323743677 1949:0.121580970045093 2433:0.0665548802575349 2754:0.136976929983168 2823:0.0704779515380156 3416:0.154650562434721 3475:0.0792434674010844 5393:0.339755148921101 6059:0.0849387872302751 7127:0.108190137076075 7343:0.096832586638604 7560:0.108190137076075 8277:0.757330959532523 8279:0.108190137076075
+1 6:0.0113867234353904 28:0.0420426006362035 31:0.0217000463741128 58:0.0381915143631319 63:0.0123061910092329 68:0.0349513828998228 75:0.0115385644189766 102:0.0542495299059469 142:0.0088582296747965 144:0.0338482272485215 179:0.0310356263865913 199:0.0798387562058458 406:0.0533828597157089 409:0.0581523972352412 457:0.0785171544461364 486:0.0848587621239704 513:0.042604499495125 574:0.0426293943961476 631:0.038210278986512 647:0.0514276177846747 671:0.0347695587666213 761:0.0578934382464431 784:0.223628310741705 804:0.0536328098014375 947:0.138520393976177 1018:0.308907897852873 1046:0.511719018673273 1064:0.105502218411129 1118:0.65973614571864 1225:0.050784665017266 1305:0.0517816623342009 2771:0.0821350924771594 2779:0.085620939970856 2846:0.18853134705124 4006:0.0972502519026536 4438:0.105788110146005
+1 6:0.0211997510283951 15:0.0242107538585384 27:0.0617285906120156 42:0.0422785397052844 64:0.0612902920901609 65:0.151667133134252 73:0.153577555936648 80:0.0460112265552434 110:0.0681992071361935 117:0.0729557688950444 131:0.187654566972946 142:0.0219896167934622 158:0.0507207283633846 174:0.0517997737948006 179:0.0385213274119517 185:0.041150425457817 202:0.17549129199731 263:0.20237073270492 272:0.333644007205642 301:0.128100562547242 329:0.284626846303994 360:0.0870138830075097 437:0.0635621302851607 500:0.0731304495170957 507:0.0377846575707474 631:0.0474264849372389 733:0.159520038211664 780:0.0716935390748877 821:0.24807760128556 873:0.0817070801714332 890:0.0742129306564865 893:0.111214669068547 987:0.0576917672545996 1073:0.0946081709475374 1128:0.21254491343931 1229:0.0797600191058318 1548:0.0777666028646201 1609:0.0987366045333214 1635:0.110599080288975 1867:0.117864168166598 1932:0.182412646436851 2059:0.137478520996585 2097:0.15091824135039 2128:0.156496229277041 2129:0.156496229277041 2130:0.469488687831122 2287:0.137478520996585
+1 6:0.0190195431281356 27:0.0138450870226226 28:0.0351124298643264 29:0.0345376363563909 31:0.018123078611544 37:0.0224976269548512 42:0.056895845727778 57:0.0354988716193555 59:0.0295253125058303 64:0.0412403435369409 65:0.0340173756746467 83:0.0123202096402925 88:0.0363078885485578 132:0.0288384939242639 142:0.00246602226845874 185:0.0553776992961691 200:0.0459349968033663 204:0.0285444749428988 220:0.0762889666442386 229:0.0249007013377872 243:0.0448342988467513 290:0.0494455191769118 299:0.039362691883718 308:0.0351324860406529 309:0.0349927359960635 322:0.0824166549429453 337:0.0363518904119578 394:0.0885932948460816 398:0.110952079128744 414:0.0351324860406529 480:0.0349728933456514 493:0.0424485982675924 502:0.032820898008095 506:0.0266010081408688 599:0.0445833961115841 667:0.0457979040519323 719:0.0511790557747814 722:0.122146782738832 733:0.161004156266642 761:0.0483504649872322 800:0.0419314946460705 890:0.149806763067197 913:0.0496271444785729 1014:0.0583095601732913 1028:0.0578435627752188 1435:0.0715074520641227 1626:0.0683378449951943 1844:0.185483210164134 1970:0.0653755308534238 2022:0.410027069971166 2548:0.0662175352594445 2754:0.19997949964166 3200:0.0872151315724673 3416:0.150521415534703 4112:0.0757030057217937 5676:0.16534186861556 5831:0.0872151315724673 9207:0.717807395405203
+1 6:0.0319694820514376 15:0.0182550554460666 18:0.0570439146376345 26:0.0230621219709863 27:0.0465437322114808 29:0.0193511543741439 31:0.040616849205066 42:0.0637565514075476 57:0.0397794532159379 63:0.011516996228797 64:0.0462132524641282 65:0.0381193131626409 73:0.115798409883307 75:0.0107985974538655 80:0.0346927442579933 110:0.0514226163680534 117:0.275045464108868 131:0.141492683161149 140:0.0376519293794952 142:0.0221070728127886 145:0.0447124755392406 158:0.0382437372230739 173:0.0398257915712338 174:0.0390573440316193 179:0.0580906296326052 185:0.0930830121297627 202:0.198482249939292 208:0.0399189112418272 242:0.0373353868086038 263:0.228883142245893 272:0.251569607719539 301:0.0965886021408421 317:0.0317575061783591 329:0.286147160944958 345:0.0391014458414017 360:0.0656089962402984 375:0.0377724224147674 387:0.0376119847129616 437:0.0479262322604837 500:0.0551408030716704 507:0.0569797225641839 508:0.082680746269786 515:0.0384958079305598 592:0.052486339127026 684:0.0997337840769167 730:0.0512188536430677 733:0.120279077608547 761:0.0541807379274488 780:0.0540573638716024 799:0.0537534082484161 804:0.0501933431521995 813:0.0744479994651823 821:0.0935260089969886 856:0.039989142308143 873:0.0616076346726265 890:0.0559570004248946 893:0.083856535906513 897:0.0888702986101754 987:0.0434999428835572 1059:0.0488428693345814 1073:0.071335135468702 1128:0.160260155560817 1190:0.0576614803728384 1229:0.0601395388042736 1305:0.0484609095841592 1509:0.0673309534633139 1548:0.0586364908519862 1609:0.0744479994651823 1635:0.166784756456244 1867:0.0888702986101754 2059:0.207319279531711 2097:0.227586541069444 2128:0.117999107307648 2129:0.117999107307648 2130:0.471996429230591 2387:0.0723724313200281 3926:0.221061940174018
+1 6:0.0363121595738785 15:0.0355453537303046 17:0.0282670069303594 26:0.134716317732155 27:0.0453138427947678 29:0.0188398120551008 31:0.0197717870081243 32:0.0388868339078879 37:0.0245443005503611 41:0.0238863191344437 60:0.0787465919549199 63:0.0560633335341885 84:0.091334726462456 94:0.0311412476283275 96:0.0321402541319462 97:0.0647378167739722 102:0.0988578671307201 106:0.0363107649408839 107:0.148863840069725 134:0.0743045962507087 142:0.0322843605731757 150:0.135717078746576 159:0.0312074805131943 176:0.0268888348454303 180:0.0799499343627132 192:0.0418931457040481 199:0.0242481030605645 208:0.0777281572664365 308:0.0383285889749011 409:0.0529849933186623 436:0.0458200628941201 457:0.0357700722714811 485:0.0358987160767253 498:0.053302466207012 574:0.0388413596798325 624:0.0664703785058115 631:0.0348149254899098 755:0.0541418680282469 757:0.0492863605408101 867:0.0455993852756393 876:0.050063805446673 997:0.148001179137334 1066:0.0690654380310353 1149:0.0497672651109207 1278:0.150835260744012 1359:0.0575865272846429 1374:0.0692564935341953 1433:0.0500139510304698 1614:0.0655517745460439 1817:0.221223524419649 2611:0.062858213442409 2679:0.074554734590101 2786:0.0886086247907533 3079:0.0763362343317734 4033:0.360766984447088 4251:0.0929552504582378 5038:0.0977444015491535 7847:0.723913256229376 7991:0.105015197849892 8192:0.107610257375115 8193:0.107610257375115
+1 6:0.00734408965622807 15:0.0503230288159011 17:0.040018771935388 26:0.127148978750633 27:0.0213842277298461 31:0.0279917373983936 40:0.0458872834977827 41:0.033816850866886 49:0.0663384928877799 63:0.0158742364493682 64:0.0636971726078743 65:0.0525410426824879 67:0.124628133713886 75:0.0297680898558585 81:0.0447150458999113 118:0.192360408042367 134:0.10519609304353 142:0.0095221470420206 159:0.044181722119092 176:0.0380676366598926 179:0.0400340666941841 180:0.0565942159598497 192:0.0593098607049786 286:0.0411507862012052 320:0.0697099056567158 367:0.0626833834546757 408:0.0432451589996498 418:0.0758207547324422 455:0.0536226383484924 550:0.0598343366947681 844:0.0804760437400314 884:0.151641509464884 963:0.0623102090167847 1059:0.0673216558623228 1080:0.0742565422215702 1509:0.0928043609987096 1604:0.098601397489347 1643:0.0983234504103135 1786:0.0983234504103135 1936:0.0988832320659803 2825:0.099169064429304 4226:0.58227238740474 4332:0.562015596302649 4692:0.148674363113797 5639:0.131600596322413 5679:0.128909826094388 6283:0.156844827151931 7561:0.156844827151931
+1 6:0.019160475382466 15:0.0656455190454076 26:0.0276439399037834 27:0.0185969030050033 28:0.0471634776574461 29:0.0231957037284194 31:0.0243431575793079 60:0.0484766676882669 63:0.0138051109096336 67:0.072255662558154 134:0.0457421601460355 142:0.00662478709736824 176:0.0662114298011943 192:0.103158247349873 205:0.0505371047535049 345:0.0468698422612897 373:0.0455938578422075 415:0.0555676526663948 426:0.057496350927577 505:0.045941869251166 543:0.14138706114262 1228:0.0786437237430322 1232:0.0723123068965255 1504:0.0892387970960151 1509:0.0807077871475105 1713:0.105001603677846 2090:0.102937540273368 4517:0.114447131602172 4887:0.20857245487903 5829:0.248507995555674 5869:0.81840543625803 6556:0.122189934373359 8291:0.2828846569467
+1 6:0.0211015158531013 15:0.0361478494967135 29:0.114954887642636 57:0.0787695053657652 63:0.0228054440898712 65:0.0754821698127538 68:0.0647707977218592 75:0.0213829027630826 142:0.00547193038669841 174:0.0773396168512075 179:0.0575142415571572 229:0.0552529091253903 245:0.121992700190591 471:0.329952567767791 553:0.134874224746187 571:0.0832702652594302 1008:0.137191409677717 1192:0.262576565760701 3156:0.191207072629028 3331:0.191207072629028 3513:0.172276321775569 4265:0.191207072629028 5177:0.193524257560559 6696:0.700969764398465 7604:0.22532837707235
+1 6:0.0271168301930519 15:0.0154841181943226 26:0.0978075973161668 27:0.0131596176722424 28:0.0333740157647946 31:0.034451612356386 41:0.0416210333998964 63:0.0390753194647096 67:0.153389555292736 75:0.00915947693517369 85:0.0553932151952571 102:0.0430640502470416 134:0.0647365143392276 142:0.012891613172326 153:0.15679414733365 186:0.0256463751521779 204:0.0271312398607297 209:0.0283905288577306 252:0.0652332648366735 284:0.0274460817681935 286:0.0253237395411868 289:0.0393210129577479 291:0.10913009800975 355:0.054401034347571 437:0.0406515032026257 441:0.0318690674980057 541:0.0932075432838011 580:0.0408936426881084 586:0.0332225560891443 633:0.0469974747656322 693:0.0537386361609827 761:0.0919132732741164 795:0.0535433469787124 836:0.0512501977733031 975:0.111999068190392 979:0.484915599895887 1005:0.142927707066638 1045:0.0469555033834825 1387:0.0733090923547735 1410:0.062334081791172 1550:0.647594593865331 1572:0.139964912284924 1578:0.252590111589747 1689:0.0723901085324686 1983:0.155738205516346 2034:0.0608516493849218 2153:0.0719549548739256 2163:0.0571107792382535 2354:0.0659672999173868 2791:0.0707342382390911 2987:0.0771986364072481 3136:0.0737954529964109 3252:0.085158014063035 5197:0.0937534596932243 5362:0.0895809997928472
+1 15:0.207198445865563 60:0.229512014341814 67:0.171046644212078 543:0.33469739930748 5829:0.588278581840661 5869:0.645787926375056
+1 6:0.0143236160339961 15:0.0490740021001389 29:0.0260102904974049 69:0.0726596310813888 179:0.0780808277742895 180:0.110379074480183 229:0.0750108627818844 411:0.0536558417996694 457:0.0493842490664598 574:0.0536244759571848 592:0.0705479839313023 625:0.0796214180329451 643:0.058269680006903 644:0.0682417063000294 664:0.0809603733382417 728:0.197556155432333 1155:0.0833695943162926 1296:0.072908903296805 1313:0.0935984583880936 1670:0.120366573981436 1958:0.10412176453059 2142:0.0931249247241862 3117:0.498075779094671 4326:0.119452423289556 6572:0.148566983929622 6880:0.333145469363471 6881:0.666290938726941
+1 6:0.0206558725118803 15:0.0235896282200982 26:0.0596028738306952 27:0.020048315603833 29:0.0500120680174808 31:0.0262430419630894 63:0.0148825436357759 80:0.134492432750843 142:0.00892728096316003 144:0.0409344953805636 172:0.0539951025314919 176:0.107068443671367 322:0.0596715320968557 455:0.0502727332827797 643:0.0560198895155136 644:0.0656068961906928 733:0.0777137799396092 772:0.127589549682494 997:0.130961055875284 1155:0.080150696931897 1296:0.070093892859896 1931:0.179511256690854 3930:0.119711272277158 5919:0.142830817406317 8996:0.588185766686684 9209:0.692945166870845
+1 2:0.0286877792353997 6:0.0421643724481838 12:0.0947463846236593 15:0.0722294739387795 26:0.0608330093471992 27:0.0409241800651393 28:0.103787531269708 29:0.0255221301058587 31:0.0535693369945325 47:0.0665224346154207 60:0.05333866281119 63:0.0151897024072521 75:0.0284844205001637 84:0.0412434541126732 96:0.0435401237120518 97:0.0438498796496014 102:0.0669609478990217 108:0.130105459200562 134:0.0503298962703941 142:0.0145784478196702 155:0.0729884370816416 176:0.0728521430376177 185:0.0818444453937519 221:0.0668963518840392 229:0.036801530522371 231:0.150674131116784 284:0.0426763307392004 314:0.0560782825561177 320:0.0667038521909679 373:0.0501667199021489 408:0.0413803270383518 411:0.105297660976694 440:0.158635407913427 475:0.0569437615441281 513:0.105174650394315 530:0.0577694121240368 546:0.0607149671259631 571:0.0554626581126502 592:0.207671824132111 640:0.0655875467262435 645:0.0894145958244052 733:0.0793177039567135 772:0.0651114264262443 823:0.240207124712237 850:0.0644185892892392 930:0.0615274594969259 1045:0.0365059138376064 1064:0.0651114264262443 1122:0.171660208021289 1457:0.0930549028002767 1576:0.0778975364764921 1873:0.0930549028002767 2017:0.105683114865577 2737:0.12107985437556 2801:0.232706859010894 2935:0.111883855716065 3051:0.211366229731154 3930:0.122181976763191 3970:0.155628367737323 4212:0.115532799597989 4623:0.373786077068778 5326:0.145778683004911 7802:0.150081312959751 8892:0.155628367737323 9921:0.466885103211968
+1 6:0.0189081144131805 15:0.0107968179289804 26:0.0818395318641436 28:0.0465422915595582 29:0.0114450975572492 31:0.024022535949648 41:0.0145108269646076 47:0.0149155997317099 63:0.0272465699681824 67:0.0713039894563356 75:0.00638675083415641 80:0.0205187677636413 96:0.0781002152206317 98:0.0204418218788814 102:0.030027845561929 111:0.0197078300836681 134:0.0451396940985473 142:0.00653753259768437 153:0.0546649747775714 174:0.0231001781147593 176:0.0163348411919741 182:0.0640895958260719 186:0.0178827905846082 204:0.0189181620346454 209:0.019796243295067 252:0.0454860699534553 256:0.0214459093469829 284:0.0191376960570959 286:0.0176578221423915 291:0.0507297341269794 437:0.0283456166576567 441:0.0222217703988153 530:0.0518120199875292 541:0.0324960343822405 580:0.0285144564911793 586:0.0231655354685521 587:0.0399129384939954 613:0.0291458856090001 693:0.0374710566724164 757:0.0598824662349648 761:0.0320447979130359 795:0.0373348847756374 979:0.627943787349549 1086:0.0397327916293442 1164:0.100298495192015 1309:0.0744016483126098 1314:0.0367473332908578 1377:0.0300569102506033 1387:0.0511172100832656 1410:0.0434645178642608 1550:0.602075910642402 1578:0.132095160890174 1983:0.27148414724751 1992:0.0411853719037371 2034:0.08486168483628 2354:0.0459979003993668 2631:0.045637567564377 2791:0.0493218071593262 2987:0.0538293244209561 3206:0.107658648841912 3248:0.102912682529254 3252:0.0593792659997433 4227:0.124926680682925 4324:0.0602902906413465 4353:0.0564698791496183 5362:0.0624633403414627
+1 4:0.0176471796890196 6:0.0163191676838304 11:0.0183332283280971 15:0.0139777355677515 26:0.0176584641714214 27:0.0237587512168123 28:0.0301272026821207 29:0.0296340177735042 37:0.0193034366961931 42:0.122044578133351 64:0.0707701627724727 68:0.0250457245914665 88:0.0311529313547619 94:0.0244917593394223 97:0.0254572817298666 134:0.0292192899736278 142:0.00740564624711048 143:0.0359491405299097 158:0.0292828935856168 174:0.0299058651706426 176:0.0211473502863996 185:0.0237576148562173 192:0.032947839945294 198:0.0355234540454548 199:0.0190704852832112 204:0.0244917593394223 215:0.0259909926070714 226:0.0316342697164378 240:0.0367276609765432 276:0.031693446271488 284:0.0247759716447629 317:0.0243164434621306 337:0.0623813717564433 365:0.0432271316077742 373:0.0291245570619011 377:0.031400643033021 382:0.0358340320031065 386:0.03249264012065 387:0.0575983324782908 422:0.0372027339193942 427:0.0866770353141586 436:0.0360362554099845 457:0.0281322062649135 509:0.0378692525217633 546:0.0704967966022357 643:0.0331938763458496 673:0.0412510270455229 693:0.0485106375838205 697:0.0437373356083738 706:0.0830664977140408 715:0.0503403648823456 772:0.0378007862190666 912:0.0387996578754606 963:0.0346145947611458 1045:0.0423874063416559 1097:0.065347589193596 1126:0.043507702826008 1175:0.0432271316077742 1216:0.0436794842879132 1243:0.0543181219685369 1462:0.100266117708444 1464:0.0521534828393894 1548:0.0448974458703462 1788:0.100472463972723 1816:0.0448332955194578 1921:0.0616383092884685 2171:0.0564489807409752 2456:0.0575883571470579 3011:0.0696883162702256 3398:0.0709333988970447 5113:0.566062373006705 7564:0.0871305074708318 7841:0.66422817662159 7894:0.0948897395173699 8250:0.261391522412495
+1 27:0.0678512953155278 42:0.13941612733796 64:0.202108569174507 142:0.00604267798817225 373:0.166350403193129 389:0.198593777984843 1038:0.309401332059016 1543:0.326683105833052 3904:0.398037967917018 5113:0.461881722021867 7841:0.541980652068161
+1 6:0.0301589775414169 26:0.0652681845887881 29:0.0547657634144297 31:0.0862124053892244 36:0.230430721510038 37:0.107022354032704 83:0.01953595432571 92:0.0497734505280428 142:0.00391033105842914 176:0.0390818009045853 215:0.096066389843212 232:0.200770046975751 262:0.211692674151792 303:0.134731766369941 308:0.055709006800841 333:0.076063845648026 346:0.0628167639915616 355:0.0453780796309288 437:0.067818091018634 466:0.0696701732929195 475:0.0610953819238141 485:0.104354575607745 493:0.201930137836456 600:0.131089944396613 608:0.0822723148247132 644:0.0718428950764177 749:0.175538196266536 772:0.0698585298414646 800:0.0664900832154137 960:0.173777276500974 965:0.0753114832932214 996:0.0839473772584503 1003:0.159365958381903 1009:0.0671988215664425 1159:0.076668539188509 1197:0.123955993154696 1237:0.0924605130558978 1241:0.188045178984808 1267:0.10122824855194 1412:0.18928035636103 1430:0.113388193728775 1437:0.10302831248182 2240:0.409642895174833 2831:0.123955993154696 3350:0.120766972498735 4385:0.124836453037477 4551:0.133679280030375 4915:0.138295603456149 5256:0.14206741433168 5473:0.129907469154844 5833:0.146683737757453 6162:0.14206741433168 6249:0.146683737757453 6674:0.166974824059054 6884:0.14206741433168 8125:0.152635213757601 8505:0.156407024633132
+1 6:0.00715834221014503 17:0.0390066131750338 26:0.0309832785332224 75:0.0435227885494031 81:0.0871682170226401 96:0.0443514399441287 142:0.0111375743422684 158:0.0513793294487198 176:0.0371048262070006 179:0.0390215210972691 180:0.055162829420512 204:0.0429728765772324 205:0.113283793720459 213:0.0739030886620537 215:0.0456034089648124 221:0.0681428824752058 226:0.0555050190268375 229:0.0749745628473339 303:0.191874427227291 337:0.0547267134234244 345:0.0525316356005747 346:0.119278285894937 375:0.0507461319484653 432:0.0672441092959332 437:0.0643874750572646 500:0.0740800374859029 501:0.0744387905938769 602:0.0908706578079837 608:0.0781105238899179 685:0.0756521712434549 686:0.0846538761296331 806:0.0768429107532323 867:0.0629241570162793 1241:0.0892664043595416 1449:0.0917247570060046 1591:0.0849607759142844 1744:0.0984209597183058 1776:0.0829068419589968 1835:0.0963822675249066 2010:0.104907298313918 2896:0.120308325101267 3667:0.129727709460027 3683:0.112658774942362 7107:0.134880854936152 8872:0.305755784365305 8873:0.764389460913262 8891:0.158528309449752
+1 6:0.0111327574424836 11:0.100053820424483 28:0.0822097906899787 31:0.0424321103686067 63:0.0240634349861972 75:0.0225624236225308 142:0.00866065843250531 276:0.605385813014286 304:0.252891485672026 328:0.112946625596437 346:0.0927516585573129 351:0.0790055010813447 373:0.0794738152512966 377:0.0856846989251804 480:0.0818830896317437 496:0.0933539043955992 685:0.117655351997142 1043:0.124509009530019 1045:0.0578324486346457 1665:0.119988260693402 1808:0.223873479951744 1892:0.147816319230773 2457:0.54907909398651 3636:0.193559951044361 5218:0.187105249001043
+1 6:0.0228786656143438 11:0.0257022789811483 26:0.0742688790631991 31:0.0436006115039237 33:0.0633015454156267 47:0.0270716326791403 48:0.0349908545442062 60:0.0434128635119535 67:0.0647079381935762 88:0.0436748683009373 103:0.0544476003095477 140:0.0404178851234918 142:0.00889915680374028 153:0.0992162664734657 154:0.0413465170243765 180:0.0440762641545818 252:0.0412783327505014 291:0.0460369262013777 331:0.0447123963733402 375:0.162188918884724 405:0.0543952005201316 409:0.058421075148031 414:0.0422609730901297 427:0.364550744097112 507:0.0305827605506692 530:0.0470190940591119 613:0.0528994290211246 631:0.038386819567697 720:0.0569457274763389 726:0.0527103457416692 764:0.0528994290211246 856:0.0429267925079476 863:0.0604476804149258 886:0.0492648789673035 960:0.0659139089675247 1005:0.0602945697141322 1140:0.0580945613741779 1283:0.0708708174592242 2284:0.0848815487042973 2409:0.081899057166123 2775:0.0845207575883116 3750:0.103655175965336 5795:0.463157613581352 5817:0.101409391057144 6375:0.115789403395338 6468:0.680221232556106 6470:0.113370205426018
+1 6:0.0204117837793768 15:0.0349663073095258 29:0.037065809667874 31:0.0777987903375566 37:0.0482889303762701 63:0.0441200335554758 68:0.0626536750970918 75:0.0620519195133556 81:0.124278690936171 92:0.0673739624452922 142:0.00793960922191337 158:0.0732532570146145 179:0.0556343094530339 189:0.152745227660523 204:0.12253578263263 227:0.145088559427592 229:0.0534468917825762 375:0.0723504858082785 408:0.0600966815714899 427:0.108414407998456 455:0.0745179968439613 505:0.0734132752076718 515:0.0737360811751721 693:0.121352836681955 863:0.107859872895802 1013:0.126458406852052 1018:0.33224805649274 1047:0.115015365864403 1081:0.113464027885033 1149:0.097913077418019 1244:0.14406140277117 1248:0.131404414723849 1462:0.250822879538171 1469:0.115552183087577 1665:0.219997107274695 2142:0.398121359179687 2161:0.271019535168168 5801:0.206608926052653 9651:0.474746968334435
+1 6:0.0265968225443028 15:0.0390527639997261 26:0.0986728974148243 27:0.0221267338499626 28:0.0280577286789151 29:0.0827952637151311 31:0.0144818351926697 40:0.0237402940587867 41:0.0174955221256626 63:0.0739144074973254 67:0.0214925815086905 68:0.0233253034663998 75:0.0154008507995601 84:0.0222993577574847 88:0.0290129988080011 92:0.0501652334786411 96:0.0706233376676745 97:0.0711257707410578 103:0.036169271352915 107:0.0363450809504788 134:0.0544243631857085 142:0.0177349974333128 172:0.0297964000199433 176:0.0590841396269995 178:0.0306640300032586 179:0.0414241351085834 194:0.0301036122916212 199:0.0710420423027365 232:0.0337250621740661 252:0.0548419842109001 255:0.0353643499019389 292:0.0374671588312862 312:0.0688768452044064 313:0.0430863386054053 345:0.167298263322598 355:0.0228676325967733 373:0.0271239559994515 387:0.0268209166660021 405:0.108403387296604 409:0.0194044155090857 477:0.040625487227079 505:0.0819929678519729 506:0.0212564004224726 541:0.0391800611996448 571:0.0299873442233106 574:0.0284493338569453 587:0.0481225294895376 633:0.0395110496999066 693:0.0451783831950576 731:0.0437862834325811 737:0.0447726797821517 755:0.0793123666046136 795:0.0450142024465172 799:0.0383312844070024 903:0.0423040771275951 996:0.0423040771275951 1013:0.0470791332053635 1045:0.0197378820577143 1127:0.0437862834325811 1149:0.0364520076526269 1228:0.0467854444302875 1277:0.0448525672387215 1416:0.0458622520559508 1436:0.05101252444193 1604:0.05101252444193 1643:0.0508687254439058 1744:0.0522404434558662 1786:0.0508687254439058 2007:0.0513062132170061 2201:0.065465006460628 2206:0.0490396270013397 3796:0.0633729618709757 3905:0.376556331231948 4225:0.677801396217507 4695:0.0769183274816195 4740:0.0624658454629216 4857:0.0688576202681051 4998:0.0680850252370407 5803:0.0769183274816195 5863:0.40572703746631 6255:0.0811454074932621 6761:0.0788190774919254 8191:0.0788190774919254
+1 67:0.127536787909338 158:0.161828341650923 433:0.182327224864456 2206:0.291000711361451 3905:0.446896385460524 4225:0.446896385460524 5803:0.456432672566471 5863:0.481516127836963
+1 6:0.0173765244149148 15:0.0119067083843456 26:0.0300841552460922 27:0.0101192543292728 28:0.0256633712258581 29:0.0378648894352767 30:0.0208895084257698 31:0.0132460013721806 41:0.0160025098338949 42:0.0207923407147136 57:0.0259458181614534 63:0.0375593259535788 75:0.0211298866590105 80:0.0452561089340994 83:0.00900473464243078 88:0.0530742432722035 142:0.0099131688818389 154:0.100489603672736 158:0.0498883203053542 176:0.0180140289348937 179:0.018944565491514 180:0.0267810122534471 188:0.03841100519177 255:0.0646929371996256 312:0.0629991139901133 322:0.0301188100505563 327:0.0292269826617907 405:0.033050862172649 475:0.0281607795006919 498:0.0714193957509831 593:0.0669465837364381 599:0.0325856185214771 639:0.0399837104736007 655:0.0263149843921251 731:0.0400497010713276 755:0.0725441011376353 799:0.0701204286746196 823:0.0395970790015015 827:0.0296847795313935 895:0.0361393022070965 993:0.0381905189915711 1001:0.040736011812913 1080:0.0351390214248276 1122:0.0424461357666395 1457:0.0460190638650764 1690:0.0454191425829598 1734:0.144255458765512 2307:0.0487210954135593 2733:0.0451893578902498 2753:0.0494024997473623 2775:0.154066014082178 2975:0.0988049994947246 3897:0.0556652888714882 4603:0.0622748654239126 6071:0.551075535810696 6525:0.523866649589558 9212:0.524639215461012
+1 6:0.0261690873347124 15:0.0256164732978517 26:0.129448027897141 27:0.0217708874654895 28:0.0552129977924356 29:0.0271545781261746 31:0.0142489355370409 41:0.0516424673334821 63:0.0404031676647147 67:0.126881602103969 68:0.0459003629102033 75:0.015153171358392 80:0.0243413601108939 96:0.0231625198613577 102:0.071243908074479 142:0.0184192120085514 153:0.19454674644814 192:0.0301911371155051 232:0.0663653784907319 331:0.0292245467049475 373:0.0266877433283695 409:0.0190923499711467 429:0.0426633682789134 433:0.0604635226619683 441:0.0263616276479157 457:0.02577842122931 465:0.0635785209832025 504:0.0397124403645316 543:0.0413794946984468 574:0.0279918062045448 593:0.108023266337083 613:0.069151374539822 633:0.0388756254082879 657:0.0388284639412963 755:0.0390184249442131 757:0.0355192059227014 772:0.0346380436990299 795:0.0442902753952339 933:0.0868892022627989 952:0.0348274201732972 975:0.046321997540929 1005:0.0394092379650672 1080:0.0377996073719751 1122:0.0456599871418983 1155:0.0435186635542405 1237:0.0458448137819811 1446:0.0780368498884262 1676:0.0507784394270238 1805:0.0541397261017888 1838:0.0573021584372235 1917:0.0465192651782932 2090:0.0602530863516053 2114:0.0535301843644783 2250:0.748245428685409 2398:0.0543512305228416 2686:0.114042221384324 2946:0.0578884666402498 2975:0.0531430591383793 3479:0.0644121856504494 4061:0.0685712849492935 4835:0.0704414667327865 7191:0.465308963676075 8357:0.0827913393757454
+1 6:0.017711524514073 15:0.0303406412576738 26:0.153320721797792 27:0.0257858557956531 29:0.0321624020547291 31:0.0337534239320394 63:0.0191417140296445 67:0.150280997968532 75:0.0179477061793509 92:0.0584611124808055 142:0.0137785687802707 153:0.0768082966664744 172:0.0694477259367544 186:0.0502532632654056 192:0.0715179212791639 232:0.07860442447735 291:0.0712789950876387 294:0.253885513994452 409:0.0452266894435543 465:0.150607234213353 574:0.0663080620295727 611:0.114579638256981 613:0.16380842304032 667:0.085296549432781 757:0.0841392546216346 975:0.109729320924597 1005:0.0933541114292793 1050:0.104539769739623 1237:0.108598949770388 1676:0.120285911051546 2114:0.126804349792833 2201:0.610328203955184 2248:0.116336928932559 2946:0.137128415677417 4322:0.508273666844001 5226:0.175531143853906
+1 6:0.0160061294003479 15:0.0274192224206329 27:0.0932120200575599 28:0.0590985905584305 29:0.0581311415293437 31:0.0610067948393428 51:0.0543543060950241 63:0.0172986098096469 67:0.0452702814672349 75:0.0162195697675745 79:0.0542729263186733 83:0.0207364465500981 97:0.149813723387288 132:0.0485387753378872 142:0.0186778011124936 172:0.125521581953079 174:0.0586644070365123 179:0.0436262683276104 186:0.0454145115501894 220:0.192605741951837 232:0.0710358156139891 262:0.0749004246121199 278:0.0690912758844211 284:0.0486014257404019 299:0.0662523106461785 308:0.0591323475999531 337:0.122369513917572 351:0.0567951058028809 377:0.0615966163689419 398:0.124497440960799 430:0.0622876893480993 475:0.0648497176333851 580:0.0724143196521363 631:0.0537115591989028 647:0.072290954433365 738:0.290928037754474 741:0.290928037754474 764:0.0740178750272734 767:0.0765544168769264 774:0.0897775571425833 784:0.314350629452187 793:0.0960493370605419 867:0.140699085073493 1046:0.089914373480419 1213:0.305486209601157 2025:0.125255942036325 2076:0.0998003153060807 2229:0.227531923178555 2315:0.128188151368755 2682:0.117769551755056 3784:0.135576728788137 3795:0.13789033520839 4140:0.145036269814339 4662:0.311395024482941 4663:0.311395024482941 5057:0.150797513890709
+1 6:0.0128334618205434 26:0.0555467607524895 29:0.0233043157012471 33:0.0355081008642182 42:0.0383905469745395 67:0.0725939937487182 75:0.0260091898736348 88:0.0489975914072484 142:0.0116476624555935 186:0.0364126382775162 204:0.0385208442599494 232:0.113910790644174 291:0.0516475169225031 303:0.114664031786124 308:0.0948227652422462 337:0.0490569720380209 373:0.0916146946549215 431:0.0715501486366803 433:0.0518903668463111 437:0.115433738512462 480:0.0471960118580779 539:0.0596151677840942 543:0.142049094414936 729:0.069066270821775 996:0.0714437655919594 1055:0.0700181967204106 1169:0.0723133912523601 1241:0.320073267964695 1440:0.0795079525515188 1602:0.0885017223352246 1713:0.105493265041478 1738:0.0866467092387142 2001:0.0840769949798922 2289:0.108703280420744 2484:0.102779235709615 2666:0.433233546193571 2694:0.0940387989344777 3566:0.124835806891645 5887:0.68519796027308 6732:0.142104620530392
+1 6:0.0360530299490711 11:0.0486030985978006 15:0.0370562809678336 18:0.03859817233574 25:0.0270582377835235 27:0.0419911106138575 28:0.0266233416219249 29:0.0261875152213322 37:0.0511752114919992 42:0.0215701041416381 53:0.111062876021514 56:0.0665691243237208 59:0.0223870146376693 63:0.023378567620387 64:0.062539434543949 68:0.0885314031976793 75:0.0219202764128111 79:0.0977977068184057 80:0.0234744850555247 83:0.0186831359364557 92:0.0476006509197282 96:0.0223376271439488 97:0.0224965429220565 142:0.0130887060473727 144:0.0428685620631155 160:0.261422697567871 174:0.052855492316235 176:0.018687866145882 178:0.0290964017659492 179:0.0393064211650661 185:0.0209945511076128 186:0.0204587968032525 189:0.0269791622669769 199:0.016852545188078 203:0.0273319232714405 204:0.021643312945293 208:0.0810321499859312 209:0.0226478813317936 215:0.0229681820304426 216:0.0313674197397174 226:0.0279551333891565 239:0.0305661771955638 262:0.0337419145403162 283:0.0270265316844421 286:0.0808056871191224 293:0.0341236581559371 306:0.0282910970353006 323:0.0308416185009802 327:0.0303202543864894 330:0.107568415610264 331:0.0281837654820588 337:0.137815696717647 341:0.0301234950822575 346:0.120149148710701 347:0.0592343381565304 359:0.0401413781656033 364:0.033404470229319 373:0.0257373059300458 377:0.0277486780115952 387:0.076349276363424 396:0.0366190056082335 399:0.0679895330051908 409:0.018412409250375 455:0.0263240057899746 465:0.030657141463607 466:0.0333144031933729 478:0.0282731273765085 505:0.0778012653375971 507:0.019277368717995 521:0.0355517362286655 535:0.0341887392751834 586:0.0265025182030351 625:0.0400819648071566 626:0.0680536646298692 655:0.0272993291910636 667:0.0347254020827967 671:0.0220177112519113 686:0.0426359713158333 695:0.106767834564377 696:0.0397901355486246 702:0.0858951308100121 712:0.0331073820024835 719:0.0388055594854712 733:0.0406927942744627 754:0.0439459543088187 792:0.0395627164651998 793:0.043269294393645 796:0.0316917863218781 804:0.0339628042956462 827:0.0307951757187501 890:0.0378627231232516 986:0.0644786515199866 1009:0.128530677044347 1033:0.0431878758727582 1101:0.0464195324689427 1143:0.0427905415613255 1162:0.0418264846808971 1175:0.0381997195117177 1189:0.0491166091254352 1194:0.0552614420786577 1195:0.0485429820987063 1250:0.04868330068464 1272:0.136676370923118 1308:0.0421132379308794 1338:0.0911175806154123 1373:0.0418264846808971 1377:0.0343865917593398 1411:0.0456623754892141 1469:0.367376582694502 1489:0.0845195862433845 1499:0.0549904033585009 1547:0.0484046260749147 1561:0.0480008028852928 1639:0.09736660136928 1651:0.0988327971317964 1665:0.233146570128692 1688:0.0485429820987063 1802:0.107473076329854 1806:0.0495697705442404 1808:0.108750917989583 1809:0.0564265865479833 1816:0.039619082967819 1863:0.0434341697843571 1890:0.119386869104967 1897:0.0962671747095161 1949:0.134587688228618 1954:0.0510689467596075 1969:0.0492653682361513 2056:0.0469981941693462 2058:0.0539749182405477 2154:0.0492653682361513 2229:0.15375138552637 2575:0.0502082045983709 2593:0.112853173095967 2779:0.0542191848349052 2858:0.325315109009431 3101:0.0549904033585009 3349:0.0549904033585009 3401:0.10893927209237 3624:0.0626836859421081 3739:0.0555401166883829 3779:0.0626836859421081 3904:0.0615834092097781 4781:0.0653374322864621 5056:0.0626836859421081 5217:0.0639218366058567 5406:0.130674864572924 5482:0.0626836859421081 5494:0.064604334405204 5589:0.0747896328461339 5740:0.064604334405204 5774:0.0729860543226778 5893:0.0701402185554691 6539:0.0729860543226778 6978:0.0701402185554691 7075:0.0798428703264207 7163:0.0798428703264207 7835:0.251561551688865 8275:0.0798428703264207
+1 6:0.0360530299490711 11:0.0486030985978006 15:0.0370562809678336 18:0.03859817233574 25:0.0270582377835235 27:0.0419911106138575 28:0.0266233416219249 29:0.0261875152213322 37:0.0511752114919992 42:0.0215701041416381 53:0.111062876021514 56:0.0665691243237208 59:0.0223870146376693 63:0.023378567620387 64:0.062539434543949 68:0.0885314031976793 75:0.0219202764128111 79:0.0977977068184057 80:0.0234744850555247 83:0.0186831359364557 92:0.0476006509197282 96:0.0223376271439488 97:0.0224965429220565 142:0.0130887060473727 144:0.0428685620631155 160:0.261422697567871 174:0.052855492316235 176:0.018687866145882 178:0.0290964017659492 179:0.0393064211650661 185:0.0209945511076128 186:0.0204587968032525 189:0.0269791622669769 199:0.016852545188078 203:0.0273319232714405 204:0.021643312945293 208:0.0810321499859312 209:0.0226478813317936 215:0.0229681820304426 216:0.0313674197397174 226:0.0279551333891565 239:0.0305661771955638 262:0.0337419145403162 283:0.0270265316844421 286:0.0808056871191224 293:0.0341236581559371 306:0.0282910970353006 323:0.0308416185009802 327:0.0303202543864894 330:0.107568415610264 331:0.0281837654820588 337:0.137815696717647 341:0.0301234950822575 346:0.120149148710701 347:0.0592343381565304 359:0.0401413781656033 364:0.033404470229319 373:0.0257373059300458 377:0.0277486780115952 387:0.076349276363424 396:0.0366190056082335 399:0.0679895330051908 409:0.018412409250375 455:0.0263240057899746 465:0.030657141463607 466:0.0333144031933729 478:0.0282731273765085 505:0.0778012653375971 507:0.019277368717995 521:0.0355517362286655 535:0.0341887392751834 586:0.0265025182030351 625:0.0400819648071566 626:0.0680536646298692 655:0.0272993291910636 667:0.0347254020827967 671:0.0220177112519113 686:0.0426359713158333 695:0.106767834564377 696:0.0397901355486246 702:0.0858951308100121 712:0.0331073820024835 719:0.0388055594854712 733:0.0406927942744627 754:0.0439459543088187 792:0.0395627164651998 793:0.043269294393645 796:0.0316917863218781 804:0.0339628042956462 827:0.0307951757187501 890:0.0378627231232516 986:0.0644786515199866 1009:0.128530677044347 1033:0.0431878758727582 1101:0.0464195324689427 1143:0.0427905415613255 1162:0.0418264846808971 1175:0.0381997195117177 1189:0.0491166091254352 1194:0.0552614420786577 1195:0.0485429820987063 1250:0.04868330068464 1272:0.136676370923118 1308:0.0421132379308794 1338:0.0911175806154123 1373:0.0418264846808971 1377:0.0343865917593398 1411:0.0456623754892141 1469:0.367376582694502 1489:0.0845195862433845 1499:0.0549904033585009 1547:0.0484046260749147 1561:0.0480008028852928 1639:0.09736660136928 1651:0.0988327971317964 1665:0.233146570128692 1688:0.0485429820987063 1802:0.107473076329854 1806:0.0495697705442404 1808:0.108750917989583 1809:0.0564265865479833 1816:0.039619082967819 1863:0.0434341697843571 1890:0.119386869104967 1897:0.0962671747095161 1949:0.134587688228618 1954:0.0510689467596075 1969:0.0492653682361513 2056:0.0469981941693462 2058:0.0539749182405477 2154:0.0492653682361513 2229:0.15375138552637 2575:0.0502082045983709 2593:0.112853173095967 2779:0.0542191848349052 2858:0.325315109009431 3101:0.0549904033585009 3349:0.0549904033585009 3401:0.10893927209237 3624:0.0626836859421081 3739:0.0555401166883829 3779:0.0626836859421081 3904:0.0615834092097781 4781:0.0653374322864621 5056:0.0626836859421081 5217:0.0639218366058567 5406:0.130674864572924 5482:0.0626836859421081 5494:0.064604334405204 5589:0.0747896328461339 5740:0.064604334405204 5774:0.0729860543226778 5893:0.0701402185554691 6539:0.0729860543226778 6978:0.0701402185554691 7075:0.0798428703264207 7163:0.0798428703264207 7835:0.251561551688865 8275:0.0798428703264207
+1 6:0.0104082071279479 17:0.01417887331197 26:0.157673564427918 27:0.022729652200123 29:0.00945014479278661 30:0.0312810440835058 37:0.0246230900138715 41:0.0119814982085284 42:0.0155677700317225 51:0.0176723198339443 60:0.0197498439404813 64:0.0225682622694148 67:0.0883128808594868 75:0.068555497921466 82:0.019517264549574 83:0.0134841613105009 85:0.0159461131647023 87:0.0242407863504703 88:0.0198690379598452 102:0.0495876049909122 142:0.0256404971038106 150:0.0907684953726784 159:0.0156538296987897 162:0.028185447557635 186:0.0147657072801961 199:0.0243259417028744 204:0.0156206069495284 218:0.029519657365931 220:0.0208740914821381 232:0.0923840441271263 252:0.0375575607778643 256:0.0177077519460371 303:0.139492407774785 308:0.0961290681819601 317:0.0465263765418003 337:0.0198931174293255 345:0.0381904167228677 363:0.0243076157551117 437:0.0702143901305621 475:0.0210847131256648 480:0.0382769570596783 496:0.0218195442183119 526:0.0624574105096563 538:0.045600057011337 561:0.0691750055623423 579:0.0611071979304261 609:0.0184265109729408 612:0.0302901168167826 631:0.0174633423023266 710:0.0299862600691443 717:0.0263690022538839 720:0.0259063590777696 749:0.0302901168167826 755:0.0271578342035716 757:0.0247222871469164 800:0.0229464860706948 836:0.0295069152612192 844:0.0570262191294 856:0.019528715323373 858:0.0261050871820726 882:0.0195401844919972 902:0.03588837798117 930:0.022781930762307 966:0.0259908518500794 1055:0.0283931142034044 1059:0.0238524368305222 1115:0.0366029294315253 1169:0.0293238396935922 1193:0.063434140698805 1225:0.0232102463637747 1228:0.0961205469491752 1241:0.259586144072439 1292:0.0312287052548281 1319:0.0274645926199892 1321:0.0301873876209352 1379:0.0274645926199892 1446:0.0271578342035716 1511:0.0314079503829979 1591:0.0308831754443717 1597:0.0364787601116582 1598:0.0272248727799975 1602:0.03588837798117 1607:0.0336664584315266 1791:0.0364787601116582 2124:0.0363567134485432 2666:0.456769958924247 2825:0.0351361506864805 2976:0.070272301372961 3482:0.0396881696915066 3837:0.0490290850366359 4510:0.0966972253538399 4846:0.0913469356736612 5887:0.722422921582975 6193:0.0515755857488563 7190:0.0539778481021812
+1 26:0.130727948776434 75:0.0612119950012508 111:0.188884086430207 142:0.0156642799711955 232:0.268086271866847 303:0.269859006551772 308:0.223163068908075 2666:0.407841840408219 2976:0.407841840408219 5887:0.645038685524296
+1 6:0.0178571402617587 12:0.06018942229954 17:0.0162175948507457 26:0.128817709998267 27:0.0433297581043529 30:0.017889408004878 31:0.0113436428541223 37:0.0140817711334402 41:0.013704268271218 57:0.0222195428274424 63:0.0514642349778138 64:0.0774397780242008 75:0.0120635091337224 82:0.0223235712807026 84:0.0174671198029686 85:0.0182389388112358 88:0.0681777742032918 96:0.018439788167034 100:0.0551733956316939 108:0.0826519392629441 132:0.0180506625027411 142:0.0223813132971461 172:0.0233395640585583 185:0.0173310742717461 209:0.0186959040680169 232:0.211335127321056 242:0.0417087294624012 274:0.0321640906197923 284:0.0180739610153958 291:0.0239550057174321 308:0.0219902138463798 408:0.0175250872026941 439:0.0320772161499723 475:0.0723491904101208 480:0.021890321186141 513:0.0222713914025491 541:0.0613795993861868 592:0.146586034473365 593:0.0286659390585859 598:0.0629070900003624 609:0.0210759827594831 631:0.0199743240501295 658:0.0550517260473402 674:0.0394099177781178 710:0.0342978603581944 789:0.0305811578714567 794:0.0347646230044485 858:0.0597172593544285 882:0.0446995735736643 885:0.0417238901238352 982:0.0333360295845002 1037:0.0332857763603951 1067:0.0316561887271047 1210:0.0476707753976144 1339:0.0359239696410697 1479:0.327877237672146 1543:0.0417238901238352 1709:0.0379564854148571 1713:0.0489295888321423 1795:0.0380457335506956 1919:0.0434411883294572 2055:0.0458485576783194 2578:0.0899297444401277 2756:0.0985542717690754 3451:0.0545899140669826 3881:0.0522406668364096 4553:0.802608294628338 5164:0.0545899140669826 5473:0.205115344250861 5542:0.0659105645366633 8678:0.0659105645366633
+1 6:0.0150801807734876 14:0.0764974688683114 15:0.051666061223099 28:0.0556797590965429 29:0.0273841383168077 41:0.0347193626530855 63:0.0162978916722885 75:0.0152812736949323 81:0.0459084111870569 83:0.0195368508371829 142:0.00586576575724235 174:0.0552706929297246 179:0.0822050098931156 229:0.0394864456028883 245:0.0871819818408738 339:0.0586476551752932 404:0.0633192867073756 561:0.0668172450236268 582:0.0635969906626709 600:0.524383840631886 719:0.0811575133745883 1471:0.174656383754432 2645:0.12773366550184 4785:0.116155979265065 7373:0.43276109700894 7833:0.175371005825123 7889:0.52611301747537 8295:0.333964973179065
+1 6:0.0148102969917487 15:0.0169138050045404 27:0.014374677618014 31:0.0188163073342331 64:0.12845350315914 81:0.0300578715119467 142:0.00128017523653033 159:0.0296993662850033 176:0.0255894209311053 229:0.0258531819704906 309:0.0363312486294798 373:0.0704845325769527 477:0.0527848606960121 546:0.0426524405686253 582:0.0416392143499834 592:0.0486300196687696 643:0.0401663595034543 772:0.0914819319665324 799:0.0498039936459938 827:0.0421680414426608 987:0.0403038793179707 1013:0.061170109149551 1064:0.0457409659832662 1134:0.0600561459680605 1272:0.0623839582965309 1338:0.0623839582965309 1576:0.0547232453920759 1822:0.0701776024482409 2341:0.0687504325872907 3051:0.148485389658843 3712:0.0894669859193259 4553:0.102409947783379 6096:0.109329379886459 7327:0.102409947783379 8678:0.765305659205216 8886:0.105432557810604 9213:0.496842905786304 9939:0.109329379886459
+1 6:0.0148462211384234 15:0.0508644943844431 26:0.0321292689839332 27:0.021614317676696 42:0.0444115982093528 63:0.0160450400092189 64:0.128765082494175 65:0.0531063736297157 73:0.0806629646598259 75:0.0150441942281351 80:0.0966652169699023 110:0.0716400284078515 117:0.076636570652797 142:0.0057747620460435 158:0.05327971648649 173:0.0554837742814829 179:0.0809296502403414 263:0.106290422196156 272:0.116825728421294 317:0.0442433467114207 329:0.0996623284986056 360:0.0914039519269899 387:0.0523995829777777 437:0.0667689993843911 508:0.0575938315658096 684:0.138945305181548 727:0.0794740633240971 733:0.251352337123585 780:0.0753106581683207 856:0.0557113482996708 890:0.0779571593822689 977:0.102061293644428 1073:0.0993813907654578 1128:0.223268338095615 1378:0.09103022285917 1395:0.0792651623878792 1424:0.0690277873579648 1609:0.10371811419356 1635:0.348537244925511 1867:0.123810711448018 2059:0.433243972909968 2097:0.158532445634065 2128:0.164391857059859 2129:0.164391857059859 2130:0.493175571179577 2491:0.114353891416943 3759:0.122038493067631
+1 2:0.0201071259532788 6:0.0246273375560567 15:0.0084375482565179 18:0.0131829449633208 26:0.138572078229855 27:0.0358544502674951 32:0.0553843757128685 37:0.0116523651382088 48:0.0150661161933287 49:0.0222456496826935 63:0.0106463890770102 67:0.0557229783698769 68:0.0151186512890908 72:0.0153261723747312 75:0.0598937783928782 81:0.0149945409269046 83:0.00638109884193858 88:0.0188052177953798 92:0.032515361392486 94:0.0295685091926004 96:0.0305170624855921 97:0.0153670844633151 114:0.0172928226808678 134:0.0705519625775361 142:0.0140497000708436 150:0.0644314533959236 158:0.0176763844559456 160:0.0223217889970465 172:0.0193129912423519 174:0.0361048725392086 176:0.063827144130073 179:0.0268496851310428 185:0.0143410941520155 186:0.0139751276266159 192:0.0795548000286477 193:0.0238873081111988 198:0.0214434488543509 221:0.0234436650203902 226:0.0190957738467994 238:0.0485698211797477 242:0.0172565418277726 252:0.017773334363705 255:0.0458438858043572 262:0.0230486458515644 284:0.0299116341615603 293:0.0233094097567077 299:0.020387415062591 308:0.0181964327340059 312:0.0669653669911394 331:0.0385038986796884 346:0.0205180649625784 355:0.0444660147983519 357:0.0227975720418153 373:0.0527424176401908 387:0.0173843863129655 405:0.0234211030873899 409:0.0251545358861539 417:0.0288168532787299 420:0.0250425199850654 423:0.0186589259792783 441:0.0173659740600045 442:0.0209571028539142 455:0.01798157262602 457:0.0169817812600605 473:0.0216829729110158 505:0.0354299953238134 506:0.0137776602182937 507:0.0263362201335792 513:0.0184291011620117 530:0.0202451510152367 538:0.0215792784057524 546:0.0212774136546702 561:0.0436475098668739 574:0.0184398697581647 592:0.0242593631391937 593:0.0237204529014867 625:0.0273794485126559 641:0.389738035104069 643:0.0200372179121176 667:0.0474409058029734 683:0.0297838275585175 684:0.0230486458515644 696:0.0271801038897836 733:0.0555933957346731 755:0.0257037601961961 768:0.0307775105397014 772:0.0456362844055431 814:0.0273391063471234 823:0.0280600023203376 882:0.018493971669717 890:0.0258635145080742 895:0.0256096896376638 933:0.0286195460451691 952:0.0458857915288229 963:0.0626844696541849 987:0.0201058204572515 997:0.11710551543695 1005:0.0259612120073327 1020:0.0314820326990643 1021:0.0527335425273564 1027:0.0257354103367563 1050:0.02907187571984 1080:0.0249008524764583 1081:0.0273794485126559 1094:0.0253650550428053 1126:0.0262630767584149 1141:0.0327886997927148 1149:0.0236269248664312 1154:0.0334507820865502 1195:0.0331590550866658 1251:0.0323525941178086 1272:0.404567722013919 1308:0.0287669837338878 1331:0.0278398756031021 1338:0.0933617820032121 1411:0.0311913516387618 1431:0.575339674677756 1469:0.195183317077714 1561:0.0327886997927148 1627:0.0328794030694253 1665:0.0265432119052917 1803:0.0373829962719334 1806:0.0338604403983178 1858:0.0317085553397833 1863:0.0296692944326029 1931:0.0642076626551832 1939:0.0337556740725024 2021:0.0359466564010875 2042:0.0316322009380509 2076:0.0307109356893032 2091:0.0326108660384985 2202:0.034525628779386 2229:0.0350084979119015 2285:0.0332549048165237 2369:0.0321038313275916 2415:0.0359466564010875 2424:0.034525628779386 2528:0.0283339841462144 2611:0.0298418304267236 2741:0.0385442387509802 2858:0.333327532234239 2975:0.0350084979119015 3079:0.0362404980286393 3103:0.0355285461899618 3501:0.0428183787918751 3719:0.0410761520451082 5563:0.0510877875284583 5564:0.0510877875284583 5730:0.0413905014051107 6017:0.047911835456305 6253:0.0510877875284583 7253:0.0510877875284583
+1 6:0.0192758706290124 26:0.166862564302288 28:0.142342568583323 29:0.0700062042239946 67:0.218072481378898 111:0.120546842938459 132:0.116908608009064 134:0.138052936109313 185:0.112248055610361 256:0.131178148723007 314:0.153820534762232 322:0.1670547780936 439:0.415508592920581 647:0.174117183542836 799:0.194462407917246 895:0.400895194765673 1431:0.225159806893113 1731:0.4786962974038 3170:0.298480189896593
+1 6:0.0160559118490598 15:0.0550090040064123 29:0.0583119416777971 31:0.0611965388779672 60:0.243732085223076 96:0.0994787325356678 142:0.00416353178343388 186:0.182223041156246 220:0.128803191038147 278:0.277224657477834 339:0.124884654341022 413:0.138826185937225 553:0.205248635056403 574:0.120219622876944 731:0.185029656860061 795:0.38043705834649 862:0.154493406931321 991:0.170557575644118 1045:0.0834072512664032 4185:0.281827278959465 4705:0.257173687278315 5978:0.56365455791893
+1 6:0.01320916299358 14:0.0670063277128834 15:0.0452557853372709 28:0.048771498458596 41:0.0304116858548609 60:0.0501294612031841 63:0.0142757909062637 75:0.0133853060528785 81:0.0402124944823111 142:0.0034253283446838 174:0.0484131856668714 205:0.0522601480851219 229:0.0345873105793713 351:0.0468705325955673 365:0.0699783516187266 457:0.0455418934496827 600:0.344492138032777 655:0.0500098451377795 719:0.0710881943937502 1471:0.0764932687324805 1637:0.107131077961361 2645:0.111885582323229 3093:0.0952807741559384 4528:0.121142645823394 4785:0.203488709563564 7373:0.50542381452275 7833:0.307224990878723 7889:0.614449981757446 8295:0.146264750772235
+1 6:0.00979653538587836 15:0.0335638149584323 27:0.0570503230383257 64:0.169935726452973 142:0.00762115291179078 286:0.0548924580237045 337:0.0748961378020707 351:0.0695227746603792 455:0.0715290932783856 499:0.29187626146227 733:0.110572786704246 965:0.0978536636438464 993:0.107655236965816 2255:0.675165126784625 2270:0.144161471182704 2392:0.300319098596142 2683:0.138767461363652 3421:0.175546590390805 4512:0.161058414074422 6633:0.381178022497718 8854:0.203222665531577
+1 174:0.239279106329713 185:0.190086487011305 373:0.233027800608876 641:0.258292474626872 952:0.304100538738225 1272:0.412493239683336 1431:0.381296909560947 1469:0.369584383303756 2858:0.490905203024161
+1 6:0.0261574913842224 15:0.0358471711075481 26:0.045286733575779 60:0.0397076166038774 63:0.0226157480418735 79:0.0354774990772317 100:0.0323276314061318 142:0.00542641478238985 145:0.0439005996457429 185:0.0609285589021233 220:0.0419679478999876 232:0.185740718537862 255:0.097384546357658 278:0.0451640595541455 286:0.0293134039996141 287:0.0971191340888251 337:0.0399956719820197 355:0.0314858612258594 394:0.048736782603535 442:0.0445184329074748 459:0.0477881067675025 502:0.0361107457139364 505:0.03763134343354 528:0.0547363722819945 609:0.0740940369215742 653:0.0534423183767505 764:0.0483845127045461 772:0.0484717730216979 858:0.0524850118492265 1045:0.0543531747531456 1155:0.0608991316119814 1159:0.106393880257262 1236:0.0576545206303329 1242:0.0664105844317492 1269:0.0534423183767505 1380:0.0538820899524587 1421:0.0733415729797024 1432:0.0622049658034561 1446:0.0546015893389794 1470:0.0810079414398021 1591:0.0620914926594357 1620:0.0632687322352867 1713:0.0860076325469322 2055:0.0805918462779583 2219:0.0751877825722873 2705:0.153337835561944 2779:0.0786750995509677 2806:0.0832912002811783 2915:0.0837949108399617 3432:0.0959572598484081 3484:0.527546275643537 3521:0.100086728282369 4213:0.663658132012878 4259:0.090957568741278 4419:0.097206245339968 5300:0.101777418715923 5452:0.0985743541539195
+1 6:0.0194238317184661 15:0.0332739008181447 29:0.0352717850276708 67:0.0549366000407352 96:0.0601727942487508 174:0.142381401729271 178:0.1567589776263 204:0.116604920328007 427:0.206334070513403 467:0.2438113019262 530:0.079837783020556 586:0.0713921207757742 693:0.230958460440909 737:0.114442222817646 757:0.0922736335536352 903:0.10813229505778 1043:0.108618285318738 1080:0.0981977785962746 2215:0.164525695066769 2246:0.12300468207815 2444:0.137568829762597 3542:0.168856455192895 3557:0.163225548073523 3583:0.188942760683692 4147:0.176005080771527 4556:0.172191768503417 5875:0.207413557780264 6132:0.645238893650737 6863:0.19660883412034
+1 6:0.0203957692553585 15:0.0174694368533728 26:0.17655702429049 27:0.0148468971274101 29:0.0185183644266507 31:0.0388688757734643 42:0.0610127453238142 60:0.0387015030434751 63:0.0110213545477263 67:0.144213849556719 68:0.0313022593736171 75:0.0103338725473958 87:0.0475018875868694 88:0.0389350738867223 92:0.033660551343919 94:0.0306099111071443 97:0.0318166253384035 142:0.0198334500573479 153:0.176897736212577 159:0.0306750139168435 172:0.0799727766172789 179:0.0277953301521778 180:0.0392929084453015 186:0.0578693246352453 192:0.123535076176564 198:0.044397372825718 205:0.0403464595793489 226:0.0395366527385789 294:0.243635641330335 309:0.0375247588325931 322:0.0883802027046689 355:0.0306880709113133 398:0.0396601360517535 430:0.039684964041515 480:0.037503480397223 493:0.0455201163164899 507:0.0272637809345079 613:0.141475630560198 667:0.0491117729342548 768:0.0637229868833033 800:0.0449655958385468 993:0.0560328546215129 1014:0.125057508128743 1050:0.0601915724398403 1083:0.0546631189896068 1102:0.0610801610970103 1216:0.0545908161487945 1720:0.0663015006856211 1820:0.0650287537857052 1897:0.0680748291133281 1969:0.0696754949753328 1990:0.0678870334271033 2201:0.527119215853629 2248:0.0669841028224355 2694:0.0747262769367651 2951:0.0832572439714085 4032:0.108896100579822 4176:0.085045705519638 4322:0.585304354759988 4429:0.0960766722756153 5226:0.202133515064092
+1 6:0.0161029428969808 15:0.0183900455413233 26:0.0929306349310213 31:0.0409171973666708 41:0.024716057126898 63:0.0696129636327546 67:0.121450933229164 75:0.0326353485278173 80:0.0698985712470624 94:0.03222299974527 97:0.0334933057004351 142:0.0139190920637594 153:0.0931099683524773 158:0.0385265370067267 178:0.043319308326887 179:0.146300476547983 185:0.0312571100691768 186:0.0609189365644788 192:0.0866967720408318 198:0.0467370365188636 204:0.16111499872635 209:0.0674372427391254 226:0.0416201650068402 286:0.0300762831692793 345:0.118171764289531 346:0.134160352371377 383:0.192896935431868 389:0.0457453646292499 422:0.0489464096471994 433:0.0434067142035388 437:0.0482806308914412 455:0.0391917094212378 485:0.0371457281609871 613:0.0496437160668436 657:0.0557498459586904 979:0.493646080484485 1005:0.0565837203661609 1045:0.0278838560517648 1117:0.12811899202788 1207:0.061158135618605 1304:0.0691103338339703 1387:0.0870671180675745 1550:0.512753085625713 1578:0.374992588948865 1689:0.0859756671930827 1928:0.077436189114022 2153:0.0854588476042855 2694:0.078664220692113 2791:0.0840090372743767 3734:0.174134236135149 5362:0.212785596848747
+1 6:0.0179755964111034 15:0.0123172033365884 26:0.0466820021219461 27:0.0104681251245036 29:0.0130567723515406 31:0.0274053394156161 63:0.0388542189849607 67:0.162689737406098 75:0.00728611978102132 81:0.0218891559396782 85:0.0220319131662773 88:0.0274520138235172 100:0.0222157563409941 111:0.0224830456584718 142:0.0111872014775455 153:0.0935441739622451 158:0.0258041334971214 178:0.116056858665993 180:0.0277043127989148 186:0.0204010078992828 204:0.0863287127996457 232:0.0319105542701129 252:0.0259456617812902 276:0.0279283164480378 296:0.0324192767388853 306:0.0282111846384235 327:0.0302346103339126 391:0.0372050627610055 427:0.0381899723099743 433:0.029072756987838 437:0.0323371873425964 441:0.050701987622947 455:0.0262496497338818 457:0.0247901459569196 478:0.0563865314751921 530:0.0591080807015186 586:0.0264276579121725 613:0.0665002970009146 657:0.0746797703261433 693:0.0854953056181735 726:0.0331312994459933 744:0.044360011483151 764:0.0332501485004573 811:0.0408324295022531 824:0.0402078948799689 834:0.0362284374054326 880:0.0845775259816812 886:0.0309656374715455 965:0.0359102048984624 969:0.0402078948799689 979:0.495948131501996 994:0.0411601789922991 1045:0.0560277772057708 1078:0.0456377809949576 1080:0.0363504721848552 1251:0.0472285868003576 1267:0.0482679000340419 1302:0.0512900830995869 1309:0.0424393667130354 1377:0.0342894617341416 1387:0.0583154291140431 1476:0.0925768272383801 1550:0.572382488388748 1557:0.0529041813649074 1578:0.200928701668218 1676:0.048831730758952 1815:0.0467473034374363 1952:0.0504008009282504 1983:0.371656775131744 2041:0.11316076326517 2047:0.0494297533801165 2322:0.0569038319932569 2354:0.104950457811164 2631:0.0520641547514551 2815:0.0543157784856936 2987:0.122818915485168 3058:0.0659424464836401 3169:0.0604221992586851 3252:0.0677409305322307 3992:0.0609034826216063 5076:0.0668007573510633 6680:0.0796173423048889 7598:0.076779545022614
+1 6:0.0128489680975896 15:0.0220108625471794 26:0.0556138761943935 28:0.0474415697702205 29:0.046664947177721 31:0.0734600796689052 60:0.0975250056437524 63:0.0138865105996189 67:0.0363408534188634 100:0.0396995929872091 142:0.00166596228110753 153:0.0557211973883762 162:0.0347950335761369 199:0.0300304601015066 203:0.146112688998648 218:0.0364421202502917 220:0.154614833596056 229:0.033644164314708 232:0.0570242127737992 256:0.043720563404952 274:0.069430272967065 309:0.0472798474108111 426:0.0578353692209777 493:0.114707420941327 543:0.0711103639825109 561:0.113862381701257 609:0.0909903689389319 667:0.0618790687174021 720:0.0639629817552622 733:0.14502537405953 764:0.0594180698586716 800:0.0566550345990801 858:0.0644536428347149 890:0.0674696304562693 1149:0.123270168024419 1228:0.0791074342321313 1380:0.0661693092679551 1418:0.0815547894264547 1446:0.0670528825938376 2280:0.0872623828887666 2691:0.428618128937395 2798:0.219477603240287 2799:0.658432809720862 2833:0.0970623851633831 2873:0.092682604343539 3900:0.115121951318805 4226:0.127340481939891 4685:0.121053153870881 4692:0.130057790549888 5186:0.133271684491967 6263:0.121053153870881
+1 6:0.0221432389464812 15:0.0151729472778995 26:0.0575052256317842 27:0.0128951602301421 29:0.0321679707796938 31:0.0168796340663991 63:0.00957251415070101 64:0.0384107977787359 67:0.100204678808272 75:0.00897540685794327 84:0.0259915262019129 142:0.00803889009929647 150:0.0772432161328848 159:0.0266425513779078 176:0.0459112464114858 192:0.0715303041737304 209:0.0278199889812244 215:0.028213436905847 252:0.0639223283954922 256:0.0301382920401911 274:0.095721998078121 278:0.0382329692022291 308:0.0327220071666717 345:0.0649994384288837 365:0.0469234079926931 373:0.0316149469740961 427:0.0470443184681709 457:0.0305377419968742 530:0.0364061454404136 535:0.0419964382532479 571:0.0349524345760295 648:0.0646416122087529 688:0.0491629566573858 709:0.0772432161328848 726:0.0408127921578662 764:0.0819183927379256 946:0.0629545546818537 997:0.0842346974574514 1014:0.0543088765101365 1017:0.0521858204322973 1169:0.0499086754274876 1433:0.0426980723220537 1518:0.056747306906154 1682:0.0620862280463144 1713:0.0728084941607441 1911:0.0599759730257849 2227:0.0586429773253802 9214:0.779984138549723 9649:0.515017975526874
+1 6:0.0315694281771738 15:0.036053237324751 26:0.182188251158992 28:0.0777080939158231 29:0.0382180028551615 31:0.0401085854847238 94:0.18951722351983 96:0.130397938215925 134:0.150732569059379 142:0.0136440208479132 174:0.0771371907254235 176:0.0545460625556715 180:0.162184570143675 238:0.103768253322964 356:0.100367434705465 457:0.07256233343531 574:0.078792675362188 986:0.0941000040309456 2512:0.162947225551293 8265:0.852125513678016 9000:0.224738610116461
+1 6:0.0387651768684839 15:0.0189732852628146 26:0.01597965452051 27:0.0107499902765566 29:0.040225018564324 31:0.00703581416776333 37:0.0349364753887168 40:0.0115339178400695 41:0.0339999014783598 42:0.0110441665579763 59:0.0114624350800884 63:0.00798008184510185 67:0.0104418954827766 75:0.00374115306553141 81:0.011239272110092 83:0.00956600226649894 85:0.0226251453335252 98:0.0119741612868675 140:0.0130444376339677 142:0.0071802678174902 144:0.0219492468101748 151:0.0291566761574233 162:0.00999773174652886 169:0.0269112593549731 172:0.0144761993642059 173:0.0137975679582909 176:0.0191368483872894 185:0.0214989522275725 194:0.0292509090242169 199:0.00862871661447711 219:0.0154347063199456 220:0.0148086040971444 229:0.0290011500277967 255:0.0171813165088182 274:0.119697296919245 284:0.0224204927138572 308:0.0272785488968879 309:0.0135850201263863 322:0.0159980619445604 325:0.0165760435685548 347:0.0454930972231176 351:0.0131001738780031 369:0.0165069431780305 377:0.0142076746459527 381:0.017744672133433 398:0.0143580868535873 408:0.0108698112606035 411:0.0138298290868856 422:0.0168329145014916 423:0.013985939775381 426:0.0166179608842034 485:0.0383238037725197 490:0.0191034238778481 493:0.0494386945222289 500:0.0191034238778481 502:0.0127418604837358 506:0.0103271499266739 509:0.0171344904736135 510:0.016688603313364 538:0.016174912131288 572:0.0200040121625369 582:0.0311395609196015 586:0.0135696250383466 591:0.0388209727576634 608:0.0604283622618511 609:0.0130722290895133 610:0.0237673886395736 625:0.0205224737161404 636:0.0188792731394406 651:0.023883830091099 673:0.0186646232199085 712:0.067805595880856 713:0.0184587013617901 717:0.0374136632627689 738:0.0447363415878056 749:0.0429771373168325 757:0.0701544425150916 789:0.0189677466564818 804:0.0173893860203024 872:0.0631987274139119 909:0.0162526371357851 912:0.0877773290962737 937:0.0249993453104655 953:0.020171004652737 965:0.0184385622495094 982:0.0206764363321232 996:0.0205528941082788 1009:0.164523336995283 1010:0.0616586823248364 1025:0.0450017705754988 1064:0.0342070238113872 1083:0.0197895894536663 1105:0.0231708199119105 1129:0.0215254050394398 1134:0.0224562596240441 1176:0.0208352261410314 1188:0.0227301090219794 1228:0.0227301090219794 1229:0.0208352261410314 1245:0.0180517346344166 1288:0.0242501328003294 1301:0.0242501328003294 1351:0.0245099323139003 1366:0.0200040121625369 1375:0.0231708199119105 1430:0.249848185071408 1437:0.0252244926017667 1467:0.0226834268476016 1548:0.0203144981040466 1569:0.0303482310537409 1576:0.0204621756222632 1579:0.0231708199119105 1610:0.0255411569635701 1629:0.0271643407247155 1792:0.0217910453917117 1795:0.0235975968726533 1802:0.0275137882434641 1849:0.0456495686061382 1862:0.0259670362760933 1865:0.0219092993249403 1907:0.0277609094523786 2095:0.0821838202294447 2106:0.0250732879385151 2121:0.0268374544016917 2154:0.0504489852035334 2178:0.0273946067431483 2268:0.0297516623260778 2433:0.0251483260526866 2668:0.0290519336156193 2845:0.0303482310537409 2957:0.0584360268291434 3027:0.0315314856179987 3050:0.114941077015264 3064:0.0365890142374187 3094:0.0303482310537409 3121:0.196372740399726 3136:0.0301414684652586 3144:0.0992347127561084 3147:0.0281557831058046 3236:0.110543367447365 3408:0.031805335015934 3669:0.0641896824852271 3767:0.0295674609333202 3829:0.0382932394085264 3884:0.0648038074871942 3912:0.0338590077057902 3937:0.0324019037435971 3969:0.0280207089659495 4109:0.031805335015934 4190:0.0315314856179987 4248:0.0685994371914427 4385:0.0305637946523709 4412:0.0327287900666209 4578:0.0408805610098887 4737:0.0338590077057902 4796:0.0365890142374187 4903:0.0373697843578394 4935:0.0347824627564771 5401:0.0342997185957213 5618:0.0338590077057902 5704:0.0394234570476956 5734:0.0359126803956464 5829:0.0359126803956464 5886:0.0394234570476956 5974:0.0359126803956464 6347:0.765214180642496 6507:0.0408805610098887 6556:0.0353161116679832 6664:0.0382932394085264 7277:0.0765864788170527 7318:0.0394234570476956 7829:0.128802701099235 7963:0.0394234570476956 8129:0.0365890142374187 8195:0.0365890142374187 8333:0.171736934798979 8354:0.0408805610098887 8362:0.0408805610098887 9216:0.139335031055382
+1 6:0.0278643772567317 15:0.0238664682292943 26:0.0603023532792669 27:0.0304253939238909 28:0.0514410880192385 31:0.0398265323265131 60:0.0264366905632309 63:0.00752860010213533 67:0.0394045359052904 92:0.0229932563359955 142:0.00541922913307422 144:0.020707444482954 153:0.0604187220885777 158:0.0249997306801017 172:0.0819431565695937 180:0.0268406749146383 185:0.0202826258023471 199:0.0162810753187758 203:0.105620390611176 220:0.139707913380204 232:0.0618315869970665 240:0.0313555636241718 255:0.0648370599369246 278:0.030069502255033 284:0.0211520291410389 289:0.0606075008419825 312:0.0315697316164968 322:0.0301859086479701 351:0.0247180348047335 405:0.033124492787251 408:0.0205096799143735 409:0.0177880443849839 414:0.0257352355524109 423:0.0263893402762582 432:0.0327190845084791 436:0.0307652888651507 442:0.0296396544490646 502:0.0240419519501867 506:0.0584572816433804 543:0.0385526291649037 546:0.030092670379601 561:0.0308653614727728 570:0.0404081484315529 628:0.0378484069611282 631:0.0233760316303106 633:0.0362198132394228 667:0.0670957271409359 692:0.0486662672490854 733:0.0786258029419395 742:0.03574724365152 764:0.0322136280095415 858:0.0349436741899542 890:0.0731575960858074 903:0.0775603677687791 908:0.0370473647630186 1005:0.0367169717274414 1033:0.0834467496861829 1133:0.0406151640356673 1149:0.0668311735278083 1198:0.0414912133041845 1228:0.0428882571447453 1279:0.0533875263745489 1418:0.0884301915302585 1584:0.0467632250267085 1721:0.0456375906106225 1787:0.0500588126914912 1788:0.0428882571447453 2090:0.056136859840426 2153:0.0554539374760303 2248:0.0457563107299246 2280:0.0473094792256141 2316:0.0576692299672889 2402:0.0480393640761772 2575:0.0485056441958017 2691:0.0580940486478958 2765:0.0528708142291639 2798:0.475960924616034 2799:0.535456040193038 2833:0.0526225704875492 2873:0.20099225345958 2948:0.0617542468914824 2968:0.106251357156779 3119:0.0564975383695124 3185:0.0548165782334753 3251:0.0496911963423514 3467:0.0504411375417319 3563:0.0600118277223892 3900:0.062413601187944 4066:0.062413601187944 4226:0.276151610143137 4685:0.328146073867228 4692:0.0705110969521928 5151:0.0600118277223892 5186:0.072253516121286 5476:0.124827202375888 6263:0.0656292147734456 7693:0.074386064834156
+1 60:0.180964578310098 174:0.174768918687228 203:0.180748318347409 220:0.191265874001609 2691:0.397665698387928 2799:0.407256289366171 2873:0.343958317172056 4226:0.472578626659802 4685:0.449245458613408
+1 6:0.0302068951595294 15:0.0517457754026327 28:0.223062663611312 29:0.0548527771380658 60:0.114636739640827 142:0.00783308785311504 159:0.0908616799692178 180:0.116388526567428 220:0.121162364507189 240:0.135966322065854 278:0.260779214621803 279:0.171002824530593 329:0.202778166931688 365:0.160027454563998 455:0.11027734481677 499:0.112497368741394 513:0.113021946732594 539:0.140319825496285 1573:0.58480730638994 2825:0.203945599285013 4315:0.250069594953081 7612:0.32255837495632 8412:0.32255837495632
+1 6:0.0280844560742485 15:0.0577319296928022 20:0.0316845777795247 26:0.0243114536706359 29:0.0407989077182218 30:0.0337622454173068 37:0.0531523695795767 63:0.0485636006250489 75:0.0341507518741481 81:0.0683977348435065 84:0.0329652711459496 142:0.0160219586708403 144:0.0667871882018494 145:0.0471346599822531 159:0.0337909718486629 169:0.0409428022481436 203:0.0425818412280923 204:0.0337192559167393 205:0.0888896796288257 218:0.0318611461293549 219:0.0469647384598466 365:0.0595133527579193 369:0.0502273417490254 387:0.0396495181562308 408:0.0661493432242947 413:0.0485660105456767 427:0.059666704530245 448:0.0508669242291961 467:0.0705041919493365 480:0.0826261434641818 485:0.0388705683510367 502:0.0387709446947622 505:0.0404035614941151 507:0.0300332269300196 582:0.0473757421757247 631:0.0753941137058756 640:0.0524231373958537 653:0.0573792960843012 686:0.13284964567959 695:0.0554464088816135 709:0.0489841101331389 723:0.0576473328569527 781:0.0608682264428369 908:0.0597439564511952 1014:0.0688804045549576 1196:0.0705041919493365 1202:0.0695973582876023 1225:0.100205099527751 1273:0.0754121135844447 1319:0.0592861487517526 1341:0.0645169402865497 1380:0.231405858647636 1457:0.0743773810479299 1482:0.0665447590556745 1726:0.0758462754203233 1880:0.0784810301561292 1921:0.0848611117057471 2119:0.088904597851557 2187:0.0784810301561292 2868:0.0894270792756194 4810:0.454835255633935 6158:0.11651870377849 7356:0.109275136644099 7826:0.261280650876622 9662:0.653201627191554
+1 26:0.127545780775681 60:0.223665456198486 203:0.223398166966174 667:0.283828953250654 2691:0.491499942557887 2799:0.503353554609446 6263:0.555250598676188
+1 6:0.0404259639118012 11:0.181660839850996 29:0.0489397399133439 68:0.082724607700245 83:0.0349154093379187 98:0.174820256638827 102:0.12840038668155 118:0.0882382441480844 179:0.0734566075660243 180:0.103842038932144 312:0.122137960763785 331:0.105340742778609 355:0.0811014501194564 388:0.140128341350757 423:0.102095901428555 478:0.105674745285954 499:0.100370341382746 507:0.0720518463320103 587:0.341338956579922 782:0.15353569836569 837:0.146227602716778 1033:0.161420691864712 1046:0.302790272947365 1133:0.157133211383109 1892:0.178919949158179 2216:0.550740470573417 2575:0.187660146737299 2796:0.232175627869134 6830:0.257803931205334
+1 6:0.0340184510912214 15:0.046620114259746 29:0.0494193529373783 31:0.0259320240960848 41:0.0313285088043202 102:0.0648293599224996 134:0.0487277295580686 144:0.0404493626182078 198:0.059240907744771 205:0.0538356379588252 252:0.0982032758357877 255:0.0633254806175149 276:0.0528537716034207 308:0.0502705138618806 373:0.0485697476321889 389:0.0579839272577438 448:0.184843954550194 553:0.0869740780697557 609:0.0481805448034683 772:0.0630387148225542 801:0.16456503733748 810:0.100120088653722 873:0.0786673854866161 880:0.160061249998198 1064:0.126077429645108 1126:0.0725558895822586 1135:0.0924130586007706 1347:0.102791507532726 1393:0.0778948027054362 1433:0.0655966495456186 1731:0.168962605053697 1831:0.184281053910616 2252:0.563247579096472 2264:0.277239175802312 2823:0.0981532094693016 3073:0.120629077517709 3254:0.117225482986206 4064:0.130165214276161 4103:0.134856773677177 4474:0.12819833509174 4688:0.413203415550578 4917:0.123300496396712 4976:0.124794740560238 5459:0.130165214276161 7615:0.145303729424224
+1 6:0.0147805820757636 17:0.0402705284691515 28:0.054573566567058 29:0.0268400962856648 60:0.0560930784249985 98:0.0479384701387775 100:0.0456677211792542 111:0.04621717328151 140:0.0522233139350587 142:0.0153312807964123 144:0.0439368272887816 176:0.03830711867772 185:0.0860709033965339 186:0.041937241578448 296:0.0666425427169698 347:0.121420862277442 398:0.0574824993075348 411:0.0553676230696157 461:0.0808680750238255 485:0.051143025907744 490:0.0764804225679683 513:0.110605883274083 540:0.0835432505430331 597:0.0660854304251254 608:0.161283014340891 1430:0.444562419672004 1576:0.0819201755799052 1692:0.109674114608784 1932:0.0953843192087205 3064:0.146483860072229 3121:0.131029479869106 3669:0.385474410689269 3778:0.123263311609978 3861:0.146483860072229 3884:0.389162378351009 3969:0.112180710435625 4438:0.137318681139931 5974:0.143776162313623 6347:0.417754031933721 7187:0.163665037264727 7618:0.157831531843576
+1 6:0.0228012640557332 274:0.246416362054891 389:0.194322021429926 398:0.177350748242016 1430:0.342902095067639 1932:0.294289228652319 3121:0.404265238576744 3669:0.396434717739857 3884:0.40022754646849 6347:0.429632154928778
+1 4:0.0259848254496522 6:0.018022032325587 11:0.0269950069319369 20:0.0338871013118152 26:0.0520028828729873 28:0.0443612020037572 63:0.0908940436360908 75:0.0608745152866226 83:0.0311308166762292 102:0.0572413294693821 142:0.0264824609281185 158:0.0431179877970215 159:0.0361399193774426 218:0.0681518872878092 255:0.111826947055083 276:0.140002314892556 304:0.13646270336867 312:0.0544495186773674 317:0.0358050719749261 339:0.0934515709296385 345:0.0440850133134541 346:0.100099392710071 351:0.0426321361903774 363:0.0561188725411719 373:0.0428848430677468 386:0.0478442219556933 398:0.0467257854648193 399:0.0566438550542537 405:0.0571310744927355 408:0.035373826205762 472:0.0547320922985451 475:0.0486781731448725 496:0.151124022186719 587:0.076085034396294 631:0.0806350643913754 709:0.104778388672326 726:0.0553614778566839 867:0.0528065092222295 1043:0.0671862715704761 1064:0.0556602725801696 1808:0.120804305473484 2306:0.0845050025512813 2376:0.500322472755486 4396:0.238144600608777 5953:0.114929870119674 7374:0.233742589349825 8201:0.641482397716482
+1 6:0.0114857982998493 15:0.07870276451851 28:0.0848168191049058 57:0.0857502993726496 63:0.0248265321579969 75:0.0232779208765668 80:0.0747851708778585 142:0.00893530434068752 159:0.0690980601482081 182:0.116794327772417 199:0.0536889507325157 204:0.0689514105697398 245:0.132804065660257 317:0.0684578454947687 337:0.263432498842091 436:0.101452517466573 496:0.192628667593078 1294:0.260905417895341 4947:0.21642082046766 7015:0.223453175550983 9689:0.801426467283606
+1 158:0.22450053192202 276:0.242981299835952 587:0.396148604468345 1808:0.314493233832457 2376:0.434167838083831 8201:0.667995641094881
+1 6:0.00724802775012416 15:0.0993295905691002 26:0.031371462275212 41:0.0333745208702812 47:0.0343054876026614 81:0.04413016571166 159:0.0436038178940103 165:0.140746926286512 179:0.0395104144873414 180:0.0558539542645218 205:0.0573515526654734 229:0.0379569526098344 308:0.160660788981926 365:0.0767959384992059 477:0.232491976218881 478:0.0568397197398407 764:0.0670347713409389 997:0.068930230370831 2834:0.514028636386595 2879:0.136570752115229 4457:0.141008467584543 5364:0.143664042093413 9217:0.729451510107684
+1 6:0.0340647943827424 15:0.0389030206504616 26:0.0491472737473423 63:0.0245436637233944 67:0.19269153600579 88:0.0867052553643117 97:0.0708530471220621 142:0.00588899820585374 153:0.0984842319569265 186:0.0644351489463888 198:0.0988693525934517 276:0.0882096237124863 373:0.0810598568933258 389:0.0967715311436116 515:0.0820377245800949 541:0.117089489231555 543:0.125683759668381 663:0.106270437604422 688:0.126052472406983 719:0.122218429042551 774:0.127378453914059 1045:0.0589865982310257 1260:0.15159712960416 1491:0.130425426984394 1528:0.683055075855389 1664:0.134769162894385 1713:0.1866789820057 2007:0.153328456261803 2264:0.154231587983143 2388:0.183009349908219 2427:0.183009349908219 3254:0.195641965181128 3924:0.195641965181128 5351:0.220907195726946
+1 6:0.0105096848554579 15:0.0120023764819451 27:0.0102005605794603 37:0.0165754398128433 40:0.0218888435467185 64:0.091153191427171 81:0.0213296706468752 85:0.0214687790087604 108:0.0324294491955955 111:0.065725141758149 132:0.0212471618137312 142:0.000908438115939937 144:0.0208274255139541 176:0.0181587681711858 218:0.039743290032981 220:0.0562069580731009 242:0.0245473573005479 256:0.0238405315041244 274:0.0378598645831675 299:0.0290010111510615 304:0.0530528403981152 309:0.0257813853235928 377:0.0269630468848618 389:0.0597119879176332 394:0.0652723431448869 398:0.0817454886863862 416:0.0340831378825238 426:0.0315372409361316 439:0.0377576059587283 485:0.0242433882549306 493:0.0312745956333996 530:0.028798641149222 539:0.0325470313350752 591:0.0368368411673547 827:0.029923290990124 947:0.340936400186622 953:0.0382801378634783 989:0.127102103796981 1003:0.0370234920814036 1025:0.0427017397345394 1058:0.0392988547933355 1118:0.135315855026729 1331:0.0792042090996817 1627:0.0467708109208164 1639:0.0473049605578062 1651:0.048017302692999 2040:0.0477260010052064 2124:0.0489482445314237 2206:0.0904302802959143 2241:0.0489482445314237 2243:0.052684110650304 2547:0.0554493740327901 2723:0.0456675634191437 3022:0.0588778120773241 3580:0.0726721603129801 4737:0.642569621698219 5531:0.0650933346715858 5802:0.567357163125712 7094:0.077582328611606
+1 6:0.0216092431754619 15:0.111052827979135 40:0.0675093520218699 63:0.023354169932299 68:0.0663292593946328 75:0.0218974005858825 81:0.131569513130018 96:0.0669429473193037 102:0.102952468332424 103:0.102853151948837 107:0.103353094872095 142:0.00280179573800588 179:0.0588981019426719 240:0.0972668426091889 255:0.100564228085917 319:0.0980153065279725 345:0.0792899287832856 408:0.1272445191614 411:0.0809475854757116 498:0.111020409877167 582:0.0911317216351515 608:0.11789805905813 613:0.0999286098961901 643:0.0879082266682508 658:0.0999286098961901 737:0.127318330299158 856:0.0810900000623522 903:0.120298460823408 1149:0.10365715818142 1190:0.116925974830839 1472:0.109867723795128 1709:0.137795455161208 2223:0.137157884077124 2240:0.587027390088196 2246:0.136844167786944 2417:0.184557423754389 2581:0.168190846718169 3118:0.159662249091574 3219:0.165611315025575 5153:0.342032807990274 5549:0.198180679108048 7959:0.230750043190521
+1 6:0.0228038930763273 15:0.0390640985510563 31:0.130374345194495 63:0.0246452867274533 75:0.023107981041048 142:0.00591338159438615 179:0.0621542368788028 180:0.175728852709816 205:0.180440627413768 220:0.0914683084939725 229:0.119420940241717 320:0.108226976342025 457:0.0786221253553167 574:0.0853727727062345 1245:0.111500153664757 1709:0.1454133678068 2223:0.144740549110099 2298:0.159311703907397 2889:0.172262880270853 3157:0.176555198641954 3219:0.174767005461885 6317:0.221821861650543 7857:0.265191891635341 8707:0.757520913111634
+1 6:0.0226393487281598 15:0.0775644533052688 26:0.0489946713123902 27:0.0329601769259322 29:0.041110850478949 31:0.0431445375896175 60:0.0859175069824814 80:0.073703521470557 134:0.0810710090267198 142:0.0146767821211376 172:0.0887699579226279 179:0.0617057551937309 180:0.0872304295757929 255:0.105358091939127 325:0.101646478684357 331:0.0884893857911992 485:0.313342138382303 641:0.358277270909409 1448:0.710432571721462 1471:0.131102764575859 1731:0.140556198736518 1918:0.16393038215508 2134:0.154212842014419 6989:0.229156431295463 7211:0.216563040331523
+1 6:0.0320994915590376 15:0.0366585856635376 26:0.138935448816484 27:0.0623106806190853 28:0.158025688062568 63:0.023127664229087 64:0.0928023735261765 80:0.0696676567782697 94:0.0642330979465932 97:0.0667653167805097 134:0.0766317147247541 142:0.0249715969907895 176:0.055461912859432 178:0.17270480071602 198:0.0931652753679564 226:0.0829653401784906 265:0.202160846915736 322:0.0927303283730181 387:0.07552988089515 496:0.179447178391127 506:0.0598597509608641 698:0.120212517774936 733:0.120768213579824 876:0.103263470918556 890:0.112369118768829 994:0.122501342738543 2935:0.170353057504363 3024:0.179829163079917 9218:0.807634276477063
+1 6:0.0438290813466864 29:0.159178678813503 31:0.0556843299804064 37:0.069125412408245 42:0.174816162084173 64:0.253427240176904 68:0.0896884875318538 81:0.17790445341364 83:0.037854640138284 264:0.120267835348286 265:0.138016581793647 337:0.11169353201512 414:0.107946833297605 499:0.217639330350011 507:0.0781172773258907 513:0.218654187888444 671:0.0892219099560717 726:0.134637574309997 733:0.329797115156725 1305:0.132876544254367 1309:0.172463304640667 1467:0.179525978877551 1561:0.194512647743029 2771:0.210766258911109 3208:0.568455475926183 3691:0.223934783809859
+1 6:0.0236276187982167 15:0.0404751779080426 31:0.0900558315199976 72:0.0735201191930815 81:0.143858545922286 158:0.0847941586672026 159:0.0710713605731496 180:0.0910382786346635 186:0.0670391160771051 205:0.0934792657107613 245:0.136596680368098 252:0.0852592303498088 255:0.109957263503291 312:0.107078306803557 346:0.098425787259659 351:0.083838701784186 405:0.112351750229389 586:0.0868431028097608 896:0.14962587097454 1017:0.139210288389456 1080:0.119450153457553 1799:0.20354829045624 1861:0.229834544945775 2754:0.165620500736477 3266:0.403591409420699 5153:0.186989908393798 6813:0.239159742129607 8310:0.261628066558207 8311:0.261628066558207 8685:0.523256133116413
+1 6:0.00596915122475871 15:0.020450851170864 26:0.0775083963189898 40:0.0372964039538046 63:0.0645115476385144 75:0.0483899947684154 80:0.0777314702357634 96:0.0739669728801481 110:0.11521589482612 142:0.0154788784829194 143:0.052597255051372 176:0.0309407279361529 209:0.0374971614815273 255:0.0555579925101318 345:0.0438047340820544 413:0.0516117991681859 457:0.0411602838416226 475:0.0967373839744576 506:0.0333941649921112 574:0.0446943852135042 592:0.0587996192704848 593:0.0574934136369598 631:0.0400612054740557 737:0.0703386380604423 755:0.0623005354544686 806:0.064077259981594 856:0.0895984129120294 862:0.0574364457073949 953:0.0652255329120689 987:0.0974646021186856 997:0.0567678523352642 1548:0.0656895374072437 1880:0.0834029215375002 2306:0.083967745207247 2712:0.311348367592637 5059:0.866782737521288 8322:0.132192541894661
+1 6:0.0202417056269672 15:0.0693499115091159 31:0.0771505434884166 47:0.0479027954487861 80:0.0658978755613321 134:0.0724851019039651 174:0.0741883080107961 176:0.0524608175589491 179:0.110341489688492 205:0.240250165905642 245:0.117021940181321 265:0.0956108684394704 325:0.181763011317313 345:0.074272078137237 499:0.0753847295409078 571:0.0798773040095667 586:0.14879641810882 993:0.111219197911776 1990:0.134748469578659 4501:0.345755472560915 5577:0.556916538198725 6234:0.190701874832269 7820:0.23539560491597 8299:0.224135929746061 8501:0.448271859492122
+1 80:0.159808826071692 290:0.255230933316698 592:0.241773328114802 737:0.289219672336756 2712:0.426735932249866 5059:0.509150398792691 8332:0.570857481574577
+1 6:0.0120770096329221 15:0.12413077703621 28:0.0891826161858684 80:0.0786346064516451 96:0.0748263706476749 110:0.116554550160273 159:0.0726547616665958 165:0.234519243464163 179:0.131668275236996 200:0.116671025196573 245:0.139639922136818 332:0.155121273085168 408:0.071114627716059 413:0.104422919148244 414:0.089233557185463 499:0.0899550780570438 549:0.257920482468366 684:0.113028343945647 908:0.12845688299293 1094:0.373163375936536 1141:0.160792632312062 2240:0.492118260735852 3121:0.214124759426189 5801:0.244487989600071 6233:0.227560702819161 7387:0.239379880994103 7957:0.257923932993043
+1 6:0.0203932608483791 11:0.0305468444413559 15:0.0465794355897634 31:0.0259093969475474 47:0.0321743045754723 63:0.0587733283650352 75:0.0551072086357854 80:0.044260847395715 83:0.0176134093378599 92:0.134625646184235 103:0.0647103075210091 142:0.0070510260651069 150:0.0592822433359496 174:0.0498291841951114 176:0.0352357374263152 208:0.0509283677744956 319:0.0616665654577712 404:0.0570853780403401 408:0.0400280973858389 507:0.0363472371385329 515:0.0491127789580003 535:0.0644624394584809 587:0.086095836755247 631:0.0456222659007357 726:0.0626456016994381 781:0.147329613689186 993:0.074701284439213 997:0.0646480310117071 1013:0.0842291003823635 1230:0.0949804235358376 1277:0.0802455595747159 1341:0.0780806049750134 1424:0.0632125692795169 1497:0.0825323132236161 1604:0.0912663158693752 1643:0.0910090456221378 1786:0.0910090456221378 3343:0.110264469136358 8676:0.45162819428772 8686:0.15054273142924 8704:0.752713657146199 8714:0.15054273142924
+1 6:0.0295692505060299 15:0.0506534613183014 31:0.0563510750805031 60:0.112216844986294 63:0.0319569406240336 75:0.029963553933721 83:0.0383078986373449 102:0.140876165889623 142:0.00383386865384988 180:0.227863306038211 229:0.0774251064468174 268:0.284521632531868 409:0.075505601375663 457:0.101947387324019 499:0.110122634584445 507:0.0790526268561493 574:0.110700786663729 586:0.108681517322285 3925:0.53587143866363 7819:0.687735681770375
+1 6:0.00553454434878461 15:0.00948092438218599 26:0.059887584331272 27:0.0161152657817809 29:0.030150579143072 31:0.0105473598010587 37:0.0130932812933706 47:0.0130977176888125 64:0.0240012610951383 65:0.0197976021855216 67:0.0626136086234385 68:0.016988203833001 75:0.0392584291717817 84:0.0324819812505217 88:0.0211306463072145 97:0.0345347158539352 103:0.0263426778185143 114:0.0194312304009886 142:0.00861112773398984 144:0.0164520123719207 150:0.0241329874077739 176:0.0143439849736123 178:0.0669993588019569 186:0.0157032735376643 204:0.0332249121695345 232:0.0491250397937135 234:0.019851414533958 240:0.0498238323032154 303:0.173074586032748 304:0.0628612969479023 308:0.0204465796854407 345:0.0406153629444439 373:0.0197548252240233 387:0.0195341166714648 406:0.0259468675284822 430:0.0215376228979432 437:0.0746727368745355 455:0.0202051502589495 480:0.0203536991317621 541:0.0570709716002467 553:0.0353750594773504 593:0.0266536929251306 643:0.0225149939388399 644:0.0263681146616772 657:0.0287416402893164 663:0.0258988110985512 729:0.0297854424794709 754:0.0337309836947679 772:0.0256398036715614 799:0.0279173076408166 863:0.0292456189252418 882:0.041561823789613 884:0.0285694585215988 1064:0.0256398036715614 1117:0.0330256516387837 1126:0.029510734305754 1149:0.0265485993362091 1241:0.17254304812511 1242:0.0351287819775332 1248:0.0356295936100414 1296:0.028171486708363 1377:0.0263936370069946 1433:0.026680195187928 1500:0.0315803166063186 1558:0.0666763207596532 1767:0.0420057284484213 1776:0.0320501297765177 1819:0.0384121066943629 1858:0.0356295936100414 1911:0.0374764147393922 2373:0.0443244578994638 2448:0.0408925843098215 2535:0.0465087963982283 3874:0.0454949071446591 4326:0.0461555750096016 4488:0.0538365500454548 4846:0.0485735593456747 6763:0.0574052361758448 7366:0.728271551074852 8409:0.0590995407452349 9221:0.557004177158362
+1 6:0.0310273911342056 15:0.0354342147045355 29:0.0751236237983351 31:0.0788398676523417 41:0.0476232684098642 63:0.0447104330445022 67:0.0585033684995261 75:0.0419215183233603 81:0.125941746689139 92:0.0682755382102193 96:0.0640795235411463 142:0.00804585440918851 158:0.0742335075272658 179:0.0563787891196712 180:0.159399912647746 205:0.081836931739817 229:0.0541621001597141 252:0.149281314124045 255:0.192525369111452 312:0.0937422862499991 320:0.0981703932451884 345:0.0758983740857679 355:0.0622462934934015 405:0.0983589509872775 457:0.0713164612444862 480:0.0760703614957095 506:0.0578604774110807 507:0.0553006187548775 515:0.0747227926787771 574:0.0774398301816802 586:0.0760272668241355 613:0.0956542543568359 684:0.0967947845657932 737:0.121872404343209 963:0.0877496198673785 1033:0.123892233084847 1059:0.0948070918710929 1080:0.10457328671219 2063:0.521468986817625 2393:0.161869869066533 3331:0.18743224172101 4849:0.185329217857404 5582:0.576518625304786
+1 6:0.0271992359984277 15:0.0698902791729243 26:0.0882943438673348 27:0.0197994129937861 29:0.0493911612785118 60:0.154833774827609 63:0.0293955495978357 67:0.0769278467357518 79:0.0461130262771333 85:0.0416711629479155 88:0.0519227419178098 134:0.0486999324412026 142:0.00528986852144454 145:0.0570612235275975 176:0.0352463913800654 185:0.118790796029556 252:0.147220882506183 255:0.126578712197314 287:0.252467468042275 337:0.0519856675653358 355:0.0409247659454669 373:0.0970840812747121 394:0.0633472086622377 434:0.0588394671842427 442:0.0578642722817136 448:0.0615795029538002 459:0.124228273154605 485:0.0470567134706895 528:0.0711453692905435 574:0.0509139861536964 626:0.0641765646133079 643:0.0553243948420216 653:0.069463380895402 667:0.065494107410979 726:0.0626645433590119 764:0.0628893344734919 772:0.126005507783003 895:0.141420888619362 930:0.0595348558773347 1126:0.0725144995039536 1159:0.345722212926353 1223:0.0835570125583143 1236:0.0749383269388422 1242:0.0863193039146994 1269:0.069463380895402 1319:0.0717718169026333 1380:0.140069976434115 1410:0.0937852648694429 1421:0.28598424099655 1446:0.0709701808033438 1620:0.0822355799583137 1707:0.0777247272222457 1709:0.0867205545795413 1731:0.0844331095028637 1776:0.0787543642832291 2121:0.0988588509814356 2178:0.100911185732474 2219:0.0977277509310221 2305:0.108915144132384 2435:0.100062974361097 2806:0.108260430050574 3432:0.124723550418217 3484:0.342847662657912 3521:0.130090960505137 3997:0.120560263710958 4213:0.123230158658036 4259:0.118225040280883 4419:0.126346959685783 5300:0.264576980099374 5452:0.128125203342429 6744:0.150588249854998 7622:0.145220839768078
+1 6:0.0308874522690247 15:0.0352744003078665 28:0.076029411374557 31:0.039242143151432 48:0.0629860947198459 60:0.0781463261998674 84:0.0604256696518095 96:0.127581027759502 118:0.202255255585697 142:0.00266985540778473 144:0.0612107898853736 159:0.0619391872465085 278:0.0888848445787564 388:0.107065040290743 641:0.325871332465382 683:0.124515632273632 781:0.111572064038014 795:0.243954409472619 800:0.0907948230388666 1463:0.606034737084271 1645:0.117685599813115 2210:0.158608278384352 3170:0.159427171861944 4355:0.193998640399415 5418:0.196975058832107 6831:0.196975058832107 7260:0.208429386044269 7589:0.21988371325643 7948:0.228010687748293
+1 6:0.00945820722416591 15:0.129618688487777 31:0.144198486277423 60:0.143577555164076 88:0.0722220363445384 159:0.0569001609298859 180:0.0728857962380019 204:0.0567793994411082 205:0.0748400652478765 256:0.0643659701698373 365:0.100213730595519 506:0.0529135417550327 513:0.0707775484656706 530:0.0777521456189847 550:0.0770586392691577 641:0.0748400652478765 916:0.114608497764695 1725:0.136448510308158 1802:0.14097325916605 2026:0.113945867798176 2062:0.151495726293714 4323:0.180950268238343 4574:0.173484458998391 4978:0.162961991870728 5955:0.180950268238343 6560:0.180950268238343 8133:0.187472279028943 8916:0.20946101173362 9223:0.713915265686694 9411:0.219983478861283
+1 6:0.020483895427372 15:0.0350898378187479 26:0.17731989302557 27:0.0745552384838142 28:0.0378158053900794 29:0.0185983786957101 52:0.0835010505508457 60:0.0388687247487067 63:0.0110689756879017 67:0.115869575754196 80:0.0333431682280261 81:0.0311794370411577 85:0.0313827838477309 96:0.031728374782829 142:0.0225750327645155 153:0.0888310385489691 166:0.0382097850067046 174:0.0375379815128381 189:0.0383212131806619 192:0.0413562824448399 199:0.0239373621166718 204:0.0307421706094839 284:0.0310989152213759 308:0.0378374057311484 317:0.0305221133022255 322:0.0443810382287187 342:0.0478386578106672 348:0.0508752940544558 402:0.0390325186662394 405:0.0487015116173009 409:0.0261529936723373 457:0.0353116765778885 538:0.0448716473365663 541:0.105612652146757 571:0.0404165136205845 613:0.0473623064606115 626:0.0483317266155186 657:0.0531878251392807 664:0.115779689799383 667:0.0493239754011148 742:0.0525576289775234 743:0.0650075463463186 757:0.0486547527751538 827:0.0437414802571036 829:0.0379895450886377 852:0.0508207269214168 886:0.0441081943334888 895:0.0532524276397414 952:0.0477071340506844 975:0.0634525823384109 999:0.67544239246708 1005:0.0539833783001903 1050:0.0604516485762285 1056:0.0502864032597352 1086:0.0645661167730486 1237:0.0627989287102735 1317:0.0664216904491655 1485:0.0638598867726286 1558:0.0616939126263655 1676:0.0695570847503357 1681:0.0759967734430338 1688:0.137900943477888 1709:0.0653097304466095 1863:0.0616939126263655 2000:0.48918918050635 2107:0.0656185564846739 2114:0.0733264671493537 2251:0.0738775581389179 2486:0.086066825183491 2526:0.0766659960689948 2733:0.0665879766395811 2946:0.0792965090222906 3206:0.0874730997710954 3469:0.0847885789905194 4324:0.097972223601709 5440:0.103669421579416
+1 6:0.00718226656649233 15:0.0492141877765023 26:0.0932604892292406 63:0.0155244561349008 88:0.0548431541736617 142:0.00372493264883446 153:0.0622936394592701 174:0.0526477574637479 186:0.0407567775796459 192:0.0580029996288836 198:0.0625372375013457 204:0.0431164989945911 252:0.207335161399342 275:0.0482978489249986 286:0.0402440506247289 289:0.0624882764061577 373:0.0512723042013603 382:0.0630839942293231 389:0.0612103151052466 404:0.060314395797173 465:0.0610733029843345 515:0.207563315893511 561:0.0636463544047202 655:0.0543840724659248 667:0.0691778457288026 719:0.309224354103098 757:0.0682392478319285 880:0.0844837527559923 895:0.373437886341071 997:0.0683048280278111 1031:0.176513410223214 1045:0.0373104385353731 1201:0.0915981816283835 1237:0.0880767328043714 1415:0.106133919107685 1528:0.432048722731268 1707:0.0820963809057491 1751:0.0978471379740926 1917:0.089372484068735 1931:0.093626959826911 1946:0.100021748452179 2007:0.0969839271061855 2188:0.113035299086954 2264:0.0975551795870698 2388:0.11575780441527 2403:0.108012180682817 2427:0.231515608830541 2616:0.0953632748290879 2792:0.110088502524854 2946:0.111214913708124 3393:0.137407970766963 3734:0.116501546668497 3929:0.249749295658357 5199:0.14899138304598 6424:0.142360581651608 6512:0.14899138304598
+1 6:0.0117841310893428 8:0.0395392744676427 16:0.129682444095984 17:0.0214043526425453 26:0.0510049680630896 27:0.0114375211727417 28:0.0290066186903294 29:0.0285317778383922 33:0.0652095469123911 41:0.018087206733476 42:0.070503071496322 60:0.0596285212563993 62:0.0449717989705997 63:0.0169809186269888 75:0.0557259335267649 80:0.0255758817441869 83:0.0101778095279006 90:0.109767807138756 92:0.10372356334886 111:0.171955546367314 132:0.0238236772589293 142:0.0203719787834216 172:0.0308040905097396 173:0.0293600220270793 177:0.0409973238007767 183:0.0691129061222535 199:0.0550834706447469 200:0.151788861319502 204:0.0707423584967161 205:0.0621629532048179 208:0.0294286708968672 215:0.0250242553180653 220:0.0315114188092254 232:0.0697312337706026 242:0.0275240675914624 256:0.0534630585689372 284:0.0238544271688573 286:0.0880392772462564 288:0.0407977285388656 290:0.0408472818956691 295:0.0333518500200339 308:0.0290231872348971 355:0.0472819953942756 387:0.055455957362683 400:0.346120090404209 411:0.0294286708968672 414:0.0290231872348971 426:0.0353615723495802 438:0.0437998903588587 441:0.055397222524606 442:0.0334264374188821 455:0.172082920888413 471:0.122841232162616 500:0.0406504209685174 508:0.0304765886116079 509:0.03646070229542 521:0.0387342682676176 528:0.0410985248834651 533:0.049197164344313 558:0.0872113797188911 623:0.0545246090949471 687:0.0441991151146606 781:0.0425667943435732 800:0.0692797895795805 868:0.0560397783200003 896:0.0994999901304285 991:0.0417265376260454 998:0.0434781400143715 1009:0.0350091321365625 1098:0.0440643904089297 1381:0.0602083540607571 1467:0.0482683552571332 1558:0.0473223241078173 1855:0.0508227087328328 1943:0.188570757390194 2119:0.0621733859208027 2737:0.135357961558049 2886:0.14597362325552 2945:0.152838107506338 3402:0.0778582332195881 3703:0.0703876065013205 4288:0.0629169797830529 4588:0.587227763300056 4589:0.335558721885746 4613:0.0764190537531689 5069:0.0778582332195881 5162:0.0655161849094926 6639:0.0838896804714365
+1 6:0.0184216754254792 11:0.0165561768004156 17:0.0200763569626308 26:0.0797340898214306 27:0.0429116005826195 29:0.0133807867546403 31:0.0280854251560593 58:0.0494296141008205 63:0.0159273671856433 64:0.0319551828539536 67:0.104204384551754 72:0.114642426271048 75:0.0149338615139612 78:0.0283048942778591 111:0.0230409806842772 118:0.024125529286425 140:0.0260352652966776 142:0.0152864279493567 172:0.0288929045092195 174:0.0270070705646386 179:0.0602520898129416 199:0.017221970968129 204:0.0442355149371332 206:0.0351403825572413 218:0.0208989517591875 232:0.0327024405737131 240:0.0331676253473296 275:0.0247756690289394 308:0.027222494267959 327:0.0309849067284988 337:0.0845020583420068 345:0.0270375657434162 351:0.0261465087201828 355:0.0221742332808077 398:0.0286571649062484 411:0.0552056408084887 507:0.0196999492182398 546:0.0636634970950966 561:0.0979472821291891 657:0.0382665047193586 671:0.0225003629857236 693:0.0438084705085862 729:0.0396562187730297 742:0.0378131038830797 837:0.0399806041687189 882:0.0553352456638167 887:0.0465574876237361 926:0.0653230714986799 956:0.341508903832019 960:0.0424585824188297 990:0.0496070960843199 1011:0.0884356070305568 1037:0.0412056864251275 1067:0.0391883599763587 1188:0.04536680194389 1237:0.0451813078570041 1268:0.049895948423746 1281:0.0476695025244562 1321:0.042743365873476 1440:0.0913031707970726 1500:0.0420459069938235 1519:0.0593810514038235 1535:0.0546766272544229 1647:0.0559262585479195 1700:0.264758746579122 1731:0.0457483243578051 1876:0.0660205303783324 1892:0.0489191338179528 2241:0.0514787276196926 2433:0.0501932976278023 2736:0.144452944004502 2804:0.144452944004502 2852:0.0634799566087299 3029:0.116631893537426 3086:0.330102651891662 3292:0.0640577792506975 3684:0.0704870813386966 3737:0.0653230714986799 4217:0.0694219767035863 4630:0.0660205303783324 4631:0.0660205303783324 4853:0.0684584723618606 5150:0.0694219767035863 5291:0.0675788618136363 5350:0.149171973087206 5531:0.0684584723618606 5847:0.0786848917485094 5860:0.0786848917485094 6162:0.138843953407173 6738:0.571151778914988 6752:0.244779333820709
+1 6:0.0241413243494712 26:0.104490307185995 27:0.0351468733195119 28:0.0891357434131864 49:0.109033191901521 63:0.0260907143609968 64:0.10469194795075 75:0.0489264936917707 96:0.0747870432584147 142:0.0219106895072942 308:0.0891866576391114 592:0.237806117986493 644:0.115016010066192 706:0.122882202250806 882:0.0906449931041707 2578:0.182365969357657 2908:0.193340417445642 2970:0.195794851061397 2976:0.162993145637265 4887:0.591281487643453 5544:0.230930609423758 6810:0.478508134502349 7836:0.280745197734004
+1 26:0.142311431583932 27:0.0957371452434437 75:0.066635839698166 80:0.214081518914068 111:0.205620641912432 142:0.0341045067760476 308:0.242937000926132 592:0.323881994430686 4887:0.536867117099098 6810:0.651708081634512
+1 6:0.0349076932848355 26:0.0412063963813326 27:0.00462012867531762 28:0.0234341530408848 29:0.0288131674158354 31:0.0120954032345792 33:0.03512142104269 41:0.0146124708708537 48:0.00970693943585155 59:0.00985264612154537 63:0.0240077458777223 67:0.0538525890761254 68:0.0584447234569768 75:0.0160787201775503 80:0.0103312477291375 81:0.00966082424814368 88:0.0363480092431343 96:0.0491545520933439 97:0.00990085011139542 132:0.0192469072263334 142:0.00534895238694419 148:0.0139477264227851 151:0.0125309504591487 154:0.0573504336871766 158:0.0227774153812339 159:0.019091195984827 172:0.0124431561464827 173:0.0118598320061295 174:0.0116309938998222 185:0.0184796307941792 198:0.0138157874699741 204:0.0190506779755279 208:0.0118875623689455 209:0.0299023648900621 220:0.0127288778260287 227:0.0112784827590935 229:0.00830940564680093 232:0.0281675782578342 255:0.0295367311188027 256:0.0107980656924686 264:0.0130619149516512 274:0.0171478267926319 275:0.032010023595478 278:0.0410947752958183 287:0.0147281157912741 289:0.013804970937098 294:0.0151631415396765 310:0.0162847717802202 312:0.0143816927411015 327:0.013344107806257 337:0.0121306865763908 345:0.0116441270990519 355:0.00954966113059285 373:0.0113271274243064 377:0.0122123431468582 389:0.0135226424807465 394:0.0147818652670959 411:0.0118875623689455 413:0.013719392707632 416:0.0154372381252192 423:0.0120217488100279 426:0.028568255647207 427:0.0168552232687671 432:0.0149052841464509 442:0.0270048797637622 448:0.0143693768849586 473:0.0279402205765064 480:0.0116705129509877 493:0.0141651681757355 505:0.0114135857711308 506:0.00887680086829132 507:0.00848407414775902 508:0.0123108634155731 509:0.0147281157912741 515:0.0229275450397544 538:0.0139033010144161 546:0.0411264382367302 553:0.0405670818950184 561:0.0281216293148651 575:0.0331213220841357 594:0.030385516671636 613:0.0293500436264257 625:0.0176402893147107 626:0.0149753927829261 643:0.0129097677357626 644:0.0151190907195842 656:0.0156630336551806 673:0.0160433560838383 720:0.0157975200932856 757:0.0150754811505149 764:0.0146750218132129 772:0.0147014878657998 789:0.01630390874397 794:0.0185342635934683 814:0.0176142972838176 824:0.035491675137559 862:0.0305353879186628 869:0.0212430861864998 883:0.0185023685625877 906:0.0185663940141595 1000:0.0192644701523383 1008:0.0412640381226462 1009:0.0141417613868638 1025:0.0386817039508105 1043:0.0177458375687795 1045:0.0164853169027543 1067:0.0168770461327212 1080:0.0160433560838383 1082:0.0217484240552462 1106:0.0609949442748295 1126:0.0169210227919215 1134:0.0193024935577256 1140:0.0161162222574207 1155:0.0554121164928615 1169:0.017881476334871 1229:0.0358182373283934 1309:0.0561921068332224 1340:0.0213031375143422 1377:0.0151337248585502 1394:0.0411609918964826 1411:0.0200962582124434 1433:0.0305960662442629 1466:0.0387591027225358 1476:0.020429487090901 1489:0.0557962899747894 1500:0.0181076909688222 1551:0.0169878320657586 1574:0.0243208592918477 1576:0.0175884595092091 1688:0.0213640287480894 1713:0.026086113369298 1718:0.0451112104287948 1746:0.0185342635934683 1809:0.0248336456692428 1920:0.0238621562465104 1995:0.0205295754584898 2107:0.0203316480916098 2124:0.0221700745174198 2144:0.0221700745174198 2146:0.0244435054935464 2164:0.0204792436581103 2185:0.0198296247660331 2234:0.0244435054935464 2237:0.0228906668237779 2264:0.0215519853709737 2315:0.0254149949162788 2316:0.0525428062601633 2322:0.0251146239465655 2366:0.0240854694126813 2571:0.0211254127463277 2576:0.0278513674467482 2581:0.0987987062738465 2949:0.0236497408388285 2965:0.0242015736864125 3023:0.0589653048468347 3050:0.0246996765684616 3058:0.0582076702936068 3113:0.0291038351468034 3134:0.0575107140659791 3144:0.0284327166937842 3206:0.0271031911901868 3624:0.0275874289259846 3694:0.0617381784485073 3787:0.552972867789265 4203:0.0275874289259846 4207:0.0262714031300816 4330:0.0284327166937842 4540:0.728551268324605 4625:0.0298975998015212 4683:0.0291038351468034 5206:0.0308690892242537 7055:0.0294826524234173 7086:0.0329153215790267 7129:0.0351392787018143 7148:0.0658306431580534 7443:0.0308690892242537 9224:0.11976676367031 9692:0.110713598337794
+1 6:0.0175876097570148 12:0.197603135288774 26:0.025374674556302 27:0.0768163523062499 29:0.042583179912968 42:0.0350748674565584 57:0.0218841674814647 60:0.022248631534527 63:0.012671862179011 64:0.0254236414788877 73:0.031852521730468 75:0.0118814260197336 108:0.244213244468403 117:0.0302625627803454 127:0.0291526016384164 142:0.0136821700766097 145:0.0245980078685344 155:0.030444948510591 172:0.137923700618459 185:0.102416904328428 232:0.0780544860372641 243:0.0276392251392401 248:0.0356591113393956 254:0.02828950772211 259:0.106977334018187 308:0.0866331997025689 351:0.062406727571984 374:0.0378330202555038 408:0.0690422744427233 414:0.0216582999256422 437:0.0263660158386437 438:0.0326852855416853 439:0.0947791558111828 462:0.108059515305692 475:0.0237523908926994 496:0.0245801942044466 530:0.024096786394208 533:0.0367129541024036 561:0.0259757193490328 568:0.0412340012640352 592:0.057749402924653 598:0.0309787942990267 667:0.0282332636743888 674:0.232890455339677 727:0.031383043503485 728:0.0404290434132629 777:0.0404290434132629 856:0.0219995253067204 882:0.0220124455762424 960:0.0337801783845708 1000:0.0355888675213027 1190:0.0317217405392291 1201:0.0373835812139487 1210:0.281707479098326 1231:0.0463963460927664 1331:0.033136405608651 1410:0.0404290434132629 1459:0.0447095919546085 1479:0.369060975520565 1568:0.0435008923261175 2076:0.0731073684473326 2669:0.105052272882054 2753:0.0416688566822877 2829:0.0581010263656668 2970:0.0950945740189851 3444:0.0593408396346916 3814:0.0496574476443288 3881:0.0514521613369747 4553:0.60807227493608 5067:0.0626019411862539 5350:0.0593408396346916 5395:0.0626019411862539 5541:0.0649157295593312 5542:0.259662918237325 6375:0.0593408396346916
+1 6:0.00771753887684975 11:0.0115600178556037 26:0.0779418170273508 27:0.0299621630602038 28:0.0189967088562877 29:0.0280285966386486 31:0.0294151258651196 37:0.0121717827809146 47:0.0243518138901801 58:0.0172566175298013 59:0.0159739376548821 63:0.00556048208708941 64:0.0223120644834809 67:0.0873103417948684 72:0.0800467711041702 75:0.0208545375947146 78:0.039526647630969 80:0.0334997735809272 111:0.01608790189497 118:0.0168451661690374 140:0.0181786009737113 142:0.0106734412282023 172:0.0201738901470565 176:0.0533378502759005 179:0.0280465408760134 190:0.0220566020982238 199:0.0120248952581409 205:0.0203555529220071 206:0.0490721323783225 209:0.0161600753948005 215:0.0491658642840557 218:0.0291845464580377 226:0.0199469900350585 246:0.0531809563317951 274:0.0556029949158989 291:0.0414117121127956 317:0.0153327343976948 322:0.0445894859714885 327:0.0216345886706567 337:0.0786691529125123 341:0.0214941938520671 345:0.0566353113766163 351:0.0182562744594164 355:0.0464481387974831 372:0.0253942260797378 398:0.0400185794100598 411:0.0578193445113625 415:0.0223817786974444 427:0.0273271040421953 433:0.020803216314263 475:0.0208453567784477 480:0.0189212160854846 485:0.0356051192661263 493:0.0229657607224228 506:0.0143918153454037 507:0.0137550937914375 561:0.022796574031368 580:0.0232769298634576 582:0.0216978940885867 598:0.0271873270630552 643:0.0627912001728531 657:0.0267188181885218 671:0.0157104264473667 729:0.0553783162173578 912:0.0244651258253431 926:0.0912210448113431 956:0.374709863886945 960:0.0592917044559431 1013:0.0318753024146522 1037:0.0863131283089927 1188:0.0316764580884301 1201:0.0656164755439717 1213:0.0327319288473071 1235:0.0301538776634492 1237:0.0946408217058995 1281:0.0332842725101018 1365:0.0622229521863784 1412:0.0322906284833244 1446:0.0536990700256946 1511:0.0310514033324192 1543:0.0360646485835905 1620:0.0311114760931892 1647:0.0390493865343856 1654:0.0363123409025894 1700:0.332752456959092 1731:0.0638856968991658 1738:0.0347372806315045 1866:0.0409572326609014 1876:0.0460975090572112 1892:0.102470407371224 1967:0.0412049249799003 2165:0.038513039494382 2210:0.0396298647088153 2433:0.0350464617407601 2736:0.168102277085355 2804:0.168102277085355 2831:0.0422929985994456 2852:0.0886472089198084 2877:0.042004856274128 3029:0.122153814985082 3086:0.414877581514901 3256:0.0456105224056716 3285:0.0829232524861038 3684:0.0492161885372151 3737:0.0456105224056716 4217:0.0484725006225239 4469:0.0509900931345221 4630:0.0460975090572112 4631:0.0460975090572112 4853:0.0477997530716508 5150:0.0484725006225239 5291:0.0471855826767565 5350:0.20831266701627 5497:0.0500475608936088 5531:0.0955995061433016 5693:0.0533650846998347 5847:0.219760579883679 5852:0.0549401449709197 5860:0.0549401449709197 5992:0.0520781667540674 6162:0.0969450012450477 6709:0.0569707508313783 6720:0.0569707508313783 6738:0.284853754156891 6752:0.284853754156891 7839:0.0598327290482306 8150:0.0549401449709197 8285:0.0569707508313783
+1 6:0.00375343537777034 10:0.0316583996251117 11:0.0168666905392737 26:0.146213127728072 27:0.0327873108763459 29:0.0272634910925649 41:0.0172831991914631 42:0.0224563627805438 58:0.0251783372020204 59:0.023306837972395 63:0.00811304374989777 67:0.106158754418821 68:0.0230422312129678 72:0.0700755379661106 75:0.0380348711766039 79:0.0254539891068485 80:0.0488779793580804 85:0.023002119214022 97:0.0234208664848574 111:0.0234731179551871 117:0.0387506575359758 118:0.0245780074395015 142:0.00973320459113453 176:0.0194557012340088 179:0.0204607091252674 185:0.0218571617916823 199:0.0350899435657751 206:0.035799446041782 218:0.0638727448069854 242:0.0263005753045383 246:0.0775938881959605 291:0.0604219250897984 337:0.0573912719572032 345:0.0275446596051102 346:0.0625428800321061 387:0.0529908443894 411:0.0562410314146746 415:0.0653124484276309 427:0.0398717210450343 438:0.0418529096720794 475:0.0608290032687788 480:0.0276070764186489 485:0.0259748962232171 493:0.0335082855357653 496:0.0314744886180924 499:0.0279572992530359 510:0.0678666567256408 535:0.0355934643213381 546:0.0324287580730593 582:0.0316583996251117 608:0.0409568018876054 609:0.0265800698715901 643:0.0610771687457051 658:0.0347143651992109 685:0.0396677788815255 710:0.0432548999100247 729:0.121199932460067 804:0.0353582462699098 836:0.0425634495043596 926:0.0665482161325693 956:0.198807975908912 960:0.0865097998200493 965:0.0374915608935272 1037:0.0839570113039059 1140:0.038123583882651 1201:0.0478689912551264 1237:0.0460286904984378 1277:0.0443082434618084 1281:0.0971271033081681 1305:0.0682756982472664 1410:0.0517686498392642 1511:0.0453056749012036 1543:0.0526202705450157 1555:0.0561926051492804 1558:0.0452187651642549 1568:0.0557020961269526 1647:0.11395032890969 1654:0.0529816670191124 1700:0.323669206963575 1731:0.186425365936911 1738:0.0506835689966931 1803:0.0569751644548452 1876:0.0672587559648494 1967:0.0601202114919809 1980:0.0466063414842277 2423:0.0484444897186574 2736:0.0490540606764119 2753:0.0533562080294034 2804:0.0490540606764119 2852:0.194011599985891 3029:0.178229014979102 3086:0.403552535789097 3183:0.0608834304299647 3285:0.120989505004544 3494:0.0646705333286302 3684:0.0718090778014987 3737:0.0665482161325693 4217:0.0707239969589277 4630:0.0672587559648494 4631:0.0672587559648494 4853:0.0697424219394626 5051:0.0718090778014987 5150:0.0707239969589277 5291:0.0688463141549886 5497:0.0730220949813469 5693:0.0778625414317962 5860:0.0801606394542154 5893:0.0730220949813469 6709:0.0831234031007256 6719:0.166246806201451 6738:0.0831234031007256 6752:0.415617015503628 6993:0.0759848586278571 7796:0.0801606394542154 7804:0.0831234031007256 7839:0.174598367854168
+1 6:0.0240137172268732 15:0.0164546327802526 27:0.0139844370604628 29:0.0348852557628496 53:0.0369876332578898 59:0.0298224831489768 63:0.0103811212316664 64:0.0416554253217664 75:0.00973357523728657 81:0.0584837341748151 92:0.0317052012720198 94:0.0288317735100311 97:0.0899051682051042 111:0.0300352482606879 142:0.00249084264668121 208:0.0359818696476923 226:0.0372399584276285 229:0.0251513255244029 255:0.0894032582922191 275:0.0645930292903393 293:0.0454572544310814 327:0.040390614387337 337:0.0367177701854971 355:0.0578107859822076 373:0.171427585326035 394:0.134227472214115 398:0.149425074253717 478:0.0376635687429281 493:0.0857516821393832 582:0.0405088022005264 609:0.0340107777289646 641:0.342024510429473 696:0.0530057565110834 749:0.0559080572525527 772:0.044499200390842 895:0.0499431856023429 952:0.0447424907380383 959:0.0533945119251395 963:0.0407484061256664 964:0.0575319988529529 1215:0.112591338206416 1272:0.364142234655933 1338:0.0606903724426555 1431:0.504903942746484 1469:0.163131501662282 1665:0.0517637104324249 2024:0.0467738657117486 2237:0.0692866177470998 2248:0.063092979087363 2694:0.140770816638263 2858:0.216681511884501 3501:0.083503012705355 4991:0.0996297452505794 5993:0.097227138605872 7874:0.446817958689804
+1 6:0.0191907136821801 26:0.124594049113138 27:0.0558787556916596 28:0.0708568637713613 31:0.0365723624727126 32:0.0719299365561173 48:0.0587009297108371 63:0.0207403463793983 67:0.054277270176919 80:0.0624763192127763 88:0.219807896176793 134:0.0687215229041475 142:0.00995286310907533 176:0.0497369415335045 204:0.0576027344239401 274:0.207396653064538 289:0.0834830209865882 355:0.230999272425178 373:0.0684987183812147 506:0.05368081950755 561:0.0850301887981904 574:0.0718458217540043 757:0.273498593008104 799:0.0968016559176912 858:0.0962654273884105 936:0.112276850722235 952:0.0893906096533442 1015:0.239832012402181 1045:0.0498459599529045 1122:0.117194270120173 1140:0.0974598879687033 1227:0.209698913589465 1294:0.108981566675795 1312:0.124768338024057 1792:0.113270474705895 1838:0.147075920400308 2398:0.139501852496423 5222:0.673704074758695
+1 6:0.0222585404928488 18:0.198582241931458 31:0.0565584253925841 33:0.0410571733988501 36:0.170067156238433 47:0.14046857274016 60:0.0563148799369085 63:0.0160372649455005 75:0.0150369041516598 84:0.0435447767927793 107:0.141944755065682 121:0.0800751164098777 142:0.0115439274537688 159:0.0892709372992313 180:0.057175438870769 205:0.0587084699149283 252:0.107091961450559 255:0.0690572679109917 284:0.0450576057790048 301:0.134498351173814 310:0.152296047002998 347:0.121900980887202 351:0.0526538357354352 375:0.210390394809486 392:0.0923246646061647 409:0.0378917164936678 415:0.0645524091797517 498:0.152475016900155 505:0.0533702289025687 513:0.166564856443672 539:0.0689316021229284 607:0.0727815417766932 641:0.0587084699149283 647:0.268079158306571 784:0.21857208696757 876:0.0716053132693825 1245:0.145111519744977 1311:0.0906192946651405 1424:0.0689943380524635 1995:0.0959968377565893 2022:0.533171128164272 2611:0.0899049128395117 3049:0.398856405523505 3760:0.121148310257119 6226:0.150201249645264
+1 6:0.0384702693477751 17:0.0524072079517703 26:0.0416274828535354 27:0.0560080989659281 28:0.0710208770649851 31:0.0366570169903625 63:0.0207883543258346 64:0.250246882352386 75:0.0194916335503966 80:0.0626209339521562 81:0.0585572868860921 94:0.0577360682139465 97:0.180036476856697 132:0.0583307717423264 142:0.0249397528232106 174:0.0704991032926764 176:0.0498520682715718 192:0.0776701546108102 199:0.0449561349973038 226:0.0745735873415501 265:0.181712743442965 284:0.0584060609580763 317:0.0573227843289457 327:0.0808828241751814 337:0.147055794771439 356:0.0917302546278686 387:0.135780415236377 436:0.0849506836847408 478:0.0754218734884901 586:0.0706985664662105 728:0.132648740596554 979:0.294832717848615 984:0.220579045145109 994:0.1101106144146 1031:0.118182024642148 1045:0.049961339037309 1387:0.156003882558424 1792:0.113532663330088 2540:0.310015917241107 2976:0.129868397519047 6749:0.638970579857468
+1 2:0.0215782425191107 6:0.026429170614408 15:0.0362194901387494 26:0.0915141892364679 29:0.0575913571255746 31:0.0201467693921322 32:0.0396243432528604 33:0.029250086034675 59:0.0328222193941542 63:0.0799772459740092 67:0.0597998910409319 68:0.0648991655666571 75:0.0428505621522919 80:0.0344165897564911 85:0.0323930944329441 96:0.0654996220558894 102:0.151099138195926 134:0.0378569110830345 142:0.0164483252619743 159:0.0317993468648249 162:0.0286281006204784 176:0.0273987958008761 187:0.04928808844119 192:0.0426876713401597 228:0.0399766690552476 229:0.0276812068361942 237:0.0454239596844512 278:0.0456331464689224 291:0.0425450608929325 317:0.0315047161937324 339:0.0411138011684277 345:0.0387901980426099 351:0.0750236364474259 355:0.0318128824380209 386:0.0420979082315381 388:0.0549667908904261 398:0.0411138011684277 413:0.045703551294688 457:0.0728969411715098 473:0.0465387692996385 493:0.0471885676074761 539:0.049108477902673 543:0.0585070467253788 574:0.0395780065820505 720:0.0526264380135934 737:0.0622866399622726 757:0.0502211024013748 800:0.0466137222603945 848:0.058421982753516 931:0.0937175670410484 1014:0.0648206238767661 1313:0.0690811487857052 1389:0.0674122562234105 1677:0.0831890372589931 1835:0.0711702044366963 2250:0.705303122994903 2686:0.241868839523883 2825:0.0713759293842668 3144:0.0947181958818635 3479:0.0910732908412261 4061:0.0969538995530115 4324:0.101126257834043 5370:0.0947181958818635 7191:0.438604570982603 7356:0.102834508264797 8124:0.102834508264797 8928:0.117059833538645
+1 15:0.13466704521544 31:0.149814693375415 96:0.243532985450779 102:0.374532687557547 413:0.33985913027104 737:0.463173707193816 2250:0.655593764511129
+1 6:0.0102386192593414 26:0.0886311335767682 27:0.0298124037327447 29:0.0743693381882699 31:0.0390241343781221 41:0.141435307893751 63:0.0221307569277847 64:0.266406510033076 94:0.0614643598806154 97:0.0638874285894253 132:0.0620974662354707 142:0.0185851616363165 179:0.0558127127352302 205:0.162030481095713 226:0.0793891574494561 325:0.183878009354112 356:0.0976537120867865 582:0.172715535235427 597:0.091555739448455 694:0.150666981454882 1462:0.251627196611565 1469:0.115922725814366 1665:0.110351287466502 2171:0.141663994777725 2423:0.264293712570619 6632:0.226743979909587 7883:0.714404018655244
+1 6:0.0205097778848837 15:0.0234227837581263 26:0.0295906576414337 27:0.0796260723945051 28:0.050484783478707 29:0.0248291716075481 63:0.0147772825454985 64:0.118591041525454 75:0.0138555160130967 94:0.0410413532351321 97:0.042659299293375 132:0.0414640948303508 134:0.0979267503381975 140:0.0483106174362338 142:0.0177282803778977 160:0.12393136510205 176:0.106311171165338 192:0.0552113843186776 199:0.0319568109430933 226:0.053010207220107 265:0.0645847311885899 317:0.0407475727537898 331:0.0534437531614982 337:0.0522668845072987 373:0.0488046292481019 387:0.0482593650426559 550:0.111399235116757 757:0.0649549740836155 994:0.0782714992711508 2284:0.101457065710372 2532:0.100191977590954 2593:0.427997964308358 2975:0.0971842117351857 4649:0.123896773323162 8933:0.605611433454069 8934:0.151402858363517 9227:0.51603308396016
+1 6:0.0236246481746911 15:0.080940178191609 26:0.0511269951308327 27:0.0343946547668208 41:0.0543914386603839 63:0.0255323170544457 64:0.307353946443338 68:0.072515515891154 81:0.0719202295280205 88:0.090197865127127 94:0.0709116063739407 97:0.0737071076177491 142:0.0306310767250287 144:0.0702267394672958 198:0.102851949319108 226:0.0915914961833044 322:0.102371779576646 337:0.0903071767477955 346:0.0984134125061275 387:0.0833829498300194 582:0.199262403009939 599:0.110756293195179 1045:0.0613626614580045 1608:0.128005900392708 2055:0.181970241918341 2252:0.391156136289651 2423:0.457374609025071 3163:0.225988198552279 3400:0.179304834034529 3559:0.216664173795105 5167:0.451976397104559
+1 6:0.0134608647660661 11:0.0604886504094068 28:0.198803374750888 37:0.0636897557331267 159:0.0809799736135655 308:0.0994584654958095 337:0.102910543650727 351:0.0955273095031181 365:0.142623590631704 496:0.225752566503971 3559:0.246902059369651 9691:0.626158380661115 9696:0.626158380661115
+1 6:0.0127223912220428 15:0.0435880612875614 26:0.0550660165816788 31:0.0969818863431349 37:0.120391372078243 60:0.0965642739796759 63:0.0274994255127055 67:0.07196570977936 142:0.0197946080093947 176:0.065945731759282 693:0.151275192884651 764:0.11766546926714 834:0.128205024048743 979:0.585019639080618 1377:0.121343386054649 1387:0.206366366517856 1723:0.213821794805759 1983:0.219202874896368 2354:0.185699093463927 2987:0.217315500489339 3252:0.239721286645021 5993:0.515106296562629
+1 6:0.0240921139393389 15:0.0117916797311697 26:0.0744837935459784 27:0.0200429879219883 28:0.0254154418290194 29:0.0374990832784616 31:0.0262360680815434 60:0.0261230933105574 63:0.0371964717927836 64:0.0298510116281298 67:0.214154113283618 75:0.0209257544735493 80:0.0224094487411584 88:0.0262807510874638 94:0.0206613568258975 96:0.021324170021085 97:0.0214758757976013 100:0.0212679028347731 134:0.0246495226405704 142:0.0116023811911951 153:0.179106069768779 176:0.0178399985127346 182:0.0349975332108112 192:0.027794943936777 198:0.0299677434172773 199:0.0160879459829262 204:0.0826454273035899 215:0.0219261166611901 232:0.0610981284817373 265:0.0325137470235715 314:0.0274648468990477 317:0.0205134595741007 322:0.0298278374287751 337:0.0263126009709362 351:0.0488496491732393 377:0.0264897217581096 387:0.0242951043944627 405:0.03273156350174 409:0.0175770390839905 433:0.0278323439123856 437:0.0309574946626111 441:0.0242693728213273 457:0.0237324540015195 493:0.0307255830531257 530:0.0282930929250003 609:0.0243727224875688 613:0.031831503582194 656:0.0339745942628858 676:0.0344156151709984 693:0.0409237890622989 706:0.035037632980185 720:0.0342663080055148 755:0.0359216325531765 834:0.0346827213428071 856:0.0258306067716377 963:0.0292010256932707 979:0.580296562742275 1005:0.0725628554922895 1038:0.0456979275979037 1045:0.035758204023326 1056:0.0675934913275017 1078:0.0436906075533586 1117:0.0410748879897645 1201:0.0438937010044534 1301:0.0452135403213872 1309:0.0406286562459548 1314:0.0401333789261428 1387:0.0558273533940851 1489:0.0403424682387075 1550:0.493165187107445 1676:0.046748284825162 1723:0.173532709376057 1822:0.0489252307300968 1983:0.41509968886069 2034:0.0463405892189277 2078:0.0477741664927205 2114:0.0492816308191285 2163:0.0434917900731307 2264:0.046748284825162 2354:0.100472660256631 2722:0.0474695116372556 2987:0.117578745495634 3252:0.0648507080462572 4324:0.0658456781264838 4989:0.0639506481267112
+1 26:0.169566510109031 63:0.169359685107281 67:0.221606264849481 142:0.0304770783097291 441:0.276252903882178 979:0.600489767871039 1983:0.674998280416936
+1 6:0.0101491070874287 15:0.0347717574487411 26:0.0219640667155905 29:0.0184297891682345 31:0.0193414809539097 63:0.0109686382654095 75:0.0102844445628159 81:0.0308968034501482 83:0.0131484890185327 97:0.0316644431182921 134:0.0363437288845084 142:0.00263181128105521 178:0.0409539084230391 229:0.0265747586812886 255:0.0472315069862117 276:0.157684600788906 322:0.0439787355126447 357:0.0469752362509953 365:0.0537670543338275 382:0.0891426413944447 431:0.0565841182051657 432:0.0476693937093404 478:0.119385387793775 640:0.0473614331254006 679:0.0638380335819911 687:0.0570998679156705 774:0.113851640043348 823:0.0578186675222971 880:0.0596910909620534 1097:0.0812810669613067 1126:0.0541160362665675 1216:0.0543297026111124 1232:0.0574546297872745 1260:0.0677492201426098 1330:0.0670162272113924 1436:0.0681307138755354 1599:0.0614901899152351 1831:0.137446598120226 2264:0.068926567636855 2522:0.0890729614489555 2643:0.073776268216412 2740:0.073489172473658 2792:0.0777818527672022 2852:0.0874329916588691 2965:0.0774003590342766 3785:0.0866801785816459 4124:0.0956171275837347 4311:0.178145922897911 4521:0.0970841305505359 5113:0.502916723723202 6488:0.0956171275837347 7377:0.102729684891413 7846:0.236052756247912 8114:0.105268266475402 9234:0.510710068062491 9235:0.383032551046869
+1 6:0.0128940806510995 15:0.0441762847768047 31:0.0491453313445331 42:0.154287538577358 81:0.157013172534496 96:0.159777509049936 159:0.0775702251707845 161:0.125832612976529 179:0.0702881512766593 190:0.110553225924195 196:0.239805092235092 365:0.136618271731738 499:0.0960409958009478 586:0.189568315145714 903:0.14356246014405 1140:0.130964973635397 1169:0.145309926814893 2190:0.198634829018009 2424:0.18076507092901 4623:0.228611386539943 6149:0.5017018742766 9931:0.571103405654633
+1 6:0.00699316310958563 15:0.0239592083669305 17:0.0762130672934108 26:0.0302683378485977 37:0.0661759638762922 60:0.0530788361018628 75:0.0141728326836452 98:0.0453624274316209 142:0.00906714521953549 144:0.0415758186211039 148:0.0614721789808234 175:0.0676936784665634 176:0.0362486305070243 218:0.0396678844610459 274:0.0755760649281751 284:0.0424684430645247 307:0.0671569171656717 309:0.102929879575979 398:0.054393594453007 493:0.187291547094684 658:0.0646776069521714 688:0.0776319525082898 710:0.0805897903960428 800:0.0616699948075846 912:0.0665064153702056 996:0.0778617512459187 1430:0.315504913530048 1545:0.0893961798285094 1620:0.0845739673118909 1639:0.0944304162178916 1651:0.0958523974123077 1788:0.0861098240052278 1954:0.0990578253836558 3064:0.138612338966887 3669:0.121586796095205 3884:0.122750059231899 4425:0.121586796095205 5974:0.136050143245455 6347:0.790610835222774 6664:0.145068556550685
+1 6:0.0243903539260731 15:0.0626726664351239 20:0.0343961649104806 27:0.0177547152601951 41:0.0280771681691384 47:0.0288603677124819 63:0.0527197056993875 68:0.0374329193103455 75:0.0494311944212046 81:0.0742512582478181 84:0.0357864608625944 96:0.0377792541070189 107:0.116654643701168 142:0.0158119349955128 150:0.0531762026894164 178:0.0492102562564928 179:0.0332391454039202 199:0.028502426999409 205:0.0964969172266726 229:0.0638645118386298 404:0.0512056133920672 473:0.0536858056890387 478:0.0478178660908745 502:0.0420889877951268 561:0.0540343739564635 631:0.0409231959212448 731:0.0702691142686645 814:0.135380139714879 876:0.0588474882547448 997:0.0579893169876978 1134:0.0741776476399994 1149:0.05849891998732 2564:0.0930043468153716 3118:0.180210789075591 3251:0.0869917784010146 4189:0.094918508836077 5960:0.493760357759771 9236:0.767087144116985
+1 6:0.0318978391711714 26:0.207093962533885 27:0.0232197143844738 29:0.0289616833176937 63:0.0172367803543114 75:0.0323231941296464 80:0.103844995827665 83:0.0206623294268209 96:0.049407916554433 97:0.0497594175197473 134:0.114225459328798 142:0.0248147227875715 158:0.0572370508200631 174:0.233818904485695 176:0.165340485838717 178:0.128714888221752 192:0.0644006434625841 204:0.143616552430306 240:0.0717887729117386 313:0.0904292954463254 355:0.0479944216933812 402:0.0607820425209613 485:0.0551856485343454 574:0.0597092558771773 597:0.0713091818865119 667:0.076808058321035 834:0.0803595638325751 895:0.0829255049826643 903:0.0887874907216068 993:0.262896725684774 1045:0.041425723926745 2148:0.127729975615512 2315:0.127729975615512 4473:0.144517874771893 6279:0.740865478731932 7824:0.185473775915573 8309:0.176602010998418
+1 2:0.0186725884967802 6:0.0228703068267477 11:0.0616629325875016 15:0.0156711473217775 26:0.0197977985894314 27:0.0266371393775066 29:0.0498362974475125 31:0.0174338727570439 36:0.0349482756569329 41:0.0421237643570529 63:0.098868253311563 69:0.185623301021822 75:0.0556206729915666 81:0.0556990378588767 83:0.0118516821458882 85:0.0280311485955361 92:0.0301955617384981 96:0.028339830926014 97:0.0285414479668048 142:0.0308391389650817 144:0.0271937523417554 158:0.0656610703734976 172:0.0717404444470698 180:0.0352481286097412 185:0.053271730692173 218:0.0259458180676084 226:0.0354667820649644 228:0.03459354440379 261:0.0628893528937625 276:0.0355331278981426 304:0.0346347608312516 310:0.140833654035877 317:0.0272623964010233 374:0.177108206070526 402:0.0348639029634875 408:0.0808021226365133 409:0.0700796770042191 530:0.0376015323961347 633:0.0475651465301907 658:0.0423040816476423 730:0.043969091382082 758:0.0479170497020322 761:0.046511736355565 764:0.0846081632952845 823:0.0521161381058463 844:0.0501222588146501 850:0.0419294152911204 867:0.0402074875866434 975:0.0566759396785345 987:0.037342752282027 1005:0.0482180327329719 1122:0.0558659560112957 1138:0.0451046204394886 1359:0.10155442083085 1941:0.0838984114627586 2078:0.0634918873605029 2341:0.0636993365610013 2376:0.126983774721006 2679:0.0657390126519629 3206:0.0781311011060292 3557:0.153750029160584 3887:0.0795270263027888 5682:0.379543545286953 6283:0.0976864251135846 7348:0.575424806117478 7693:0.488432125567923
+1 6:0.0317594627560433 15:0.0120900875115009 26:0.0152737456018086 28:0.0260586212364695 29:0.102528157429343 37:0.0667862795939944 42:0.0422251407685998 58:0.0236716614142808 60:0.107136723993915 63:0.0228826736824484 75:0.0143035433230454 80:0.0229765565671637 100:0.0654183659124021 134:0.025273319207734 139:0.0288689131059883 142:0.00366030721899733 162:0.0382243085657734 174:0.0258671746412483 178:0.0284792241233388 180:0.027193475420667 215:0.0224809929768055 216:0.0307020704527005 256:0.0240147534647945 275:0.0237299545721358 277:0.0319573017207776 284:0.0214300566723222 306:0.0276910010950685 312:0.0319846920198739 313:0.0400164457726856 333:0.0356001882155233 345:0.0258963827004218 351:0.0250429348012828 373:0.0251913796698565 375:0.0250161876453963 377:0.0271600875797434 379:0.0430998626470453 389:0.0601483514948763 394:0.0657493407151073 415:0.0614041409054009 477:0.0377309295528626 484:0.0780051714013214 502:0.0243579653455622 538:0.0309207552275686 557:0.0332112195833122 608:0.0385059402102764 643:0.0287111505237767 655:0.0267202701111637 667:0.0679776500643711 688:0.039173961223584 742:0.0362171143119821 800:0.0933581305323851 847:0.075264256079417 862:0.0339551468616275 870:0.116030333443017 915:0.0437247545722329 920:0.092715486114398 952:0.0328746703575536 1126:0.075264256079417 1140:0.0358422624309215 1149:0.0338548095463806 1156:0.049471465008798 1198:0.042036584130217 1207:0.0402069266227585 1236:0.0388899976382005 1245:0.0345085811615703 1289:0.0477899744320168 1374:0.0471126028971967 1485:0.0440054253623887 1497:0.0428439235798472 1625:0.0476506559956942 1736:0.0505287832519549 1924:0.0486708054244024 1954:0.0499856989949791 1969:0.0482203770350088 1994:0.0505287832519549 2024:0.034367228807737 2042:0.0453254981062761 2066:0.0944886782742925 2251:0.0509085364058479 2316:0.058427248667618 2402:0.146012416273207 2410:0.0493059487685186 2424:0.049471465008798 2537:0.265345579346694 2760:0.0555371009699951 2868:0.0561828378209379 2880:0.0530691158693389 2924:0.16392809879397 3442:0.13989070779121 3745:0.0753638137692496 4002:0.167563761774052 4003:0.323632697668242 5806:0.0655690240827499 6668:0.0655690240827499 7116:0.0820751865813894 7585:0.0820751865813894 7586:0.0820751865813894 7635:0.0753638137692496 7771:0.0675120109223269 8220:0.642941211112094 9237:0.266359678180588
+1 6:0.037712320242922 15:0.0430686049856351 27:0.0732061546127441 29:0.0456545983230979 31:0.0479130572717877 63:0.0271717038967408 81:0.153076211356285 142:0.0130391385166652 179:0.0685257404012045 205:0.19893780718597 229:0.0658314602545024 278:0.10852477227 394:0.117109672722847 414:0.0928818360195081 485:0.0869935144790413 506:0.0703266621449673 515:0.181644010916592 539:0.116789807263093 1067:0.133708792051497 2537:0.189048490024512 2771:0.54405552716833 2837:0.378096980049025 2924:0.194654078566086 4437:0.467154004439953 6000:0.268469051390335
+1 6:0.0217865372745568 33:0.0301399019938899 102:0.103797146925487 111:0.0340619930683701 142:0.00282478320902392 196:0.101296919144112 286:0.0305188654896656 348:0.0541106301875728 355:0.032780661147062 381:0.0523568756412455 394:0.0507409959176335 409:0.0556323062186934 411:0.0408058619622218 466:0.0503290214426718 692:0.076102145450216 800:0.0480317568581916 827:0.046523152466022 856:0.0408776534792845 880:0.320339062097041 886:0.0938263743209548 947:0.132517477208088 1018:0.236416857550414 1056:0.267421448939259 1118:0.0701273149462559 1182:0.081541452257964 1288:0.071551684796607 1305:0.0990753066923776 1373:0.189565398979911 1548:0.0599393239249506 1904:0.076102145450216 2209:0.0930358171101294 3248:0.0889344758930047 3925:0.690949889760002 3944:0.0946980366292029 4108:0.101203678915113 5357:0.0922692607758447 5580:0.101203678915113 5730:0.183080225302972 5864:0.116321621637923 6223:0.116321621637923 6305:0.120620907100694 6307:0.107958403167953
+1 6:0.037660490362387 29:0.0455918529825376 81:0.0764329156275669 118:0.164404022651531 142:0.00976591364461719 171:0.108542828059975 179:0.0684315621349061 205:0.099332198628746 229:0.0657409848687808 237:0.431515267952989 375:0.35597147255037 478:0.0984457101646894 522:0.174822625454852 582:0.105882632306333 586:0.184561063295616 641:0.297996595886238 730:0.12067303066679 781:0.136037721914315 1380:0.129295396332987 1469:0.284264026084729 1471:0.145392710160727 1573:0.162024301698429 1665:0.405902738723046 1921:0.189660730897222 2976:0.169512981186603 4189:0.195414826591859
+1 6:0.0371073383896812 11:0.0104217525140705 15:0.0158916365614639 26:0.0401526976219658 27:0.0202589380981126 29:0.016845827352715 30:0.027880793342216 31:0.0176791631158198 38:0.0188952365353069 40:0.0579634453090948 57:0.0173146725023411 60:0.0704121404612482 63:0.0501296528209746 67:0.118069900774064 75:0.037602161574887 80:0.0453017919909936 81:0.0423620323532294 83:0.0180276486562073 84:0.0136113268079498 85:0.0142127700267871 94:0.0139226463502038 97:0.0289430192131552 103:0.0220773969431788 118:0.0303729899148902 134:0.0166100701574373 139:0.0189731577446578 142:0.0150351145029644 146:0.0208256337558001 150:0.020225489075059 159:0.0418567733558802 161:0.0226330276878817 173:0.0346696840934016 174:0.0170003623993455 176:0.0240429505452071 179:0.164351969433615 185:0.0135053127537086 186:0.0921247201635172 198:0.0201937509248876 226:0.0179828955407053 229:0.0242907714569334 252:0.0167375262106021 268:0.022315920079272 274:0.0250640033299653 279:0.0262583246388623 284:0.0140842103832647 286:0.0129951108650563 301:0.0210209024800967 314:0.0185071751899006 319:0.0210389549345245 320:0.0440277348759428 345:0.0170195584498542 347:0.0190520449440045 355:0.0139581966433242 382:0.020370302842152 396:0.0471123312838705 398:0.0180390608295709 402:0.0176772148086424 408:0.0409694944463279 418:0.0239436279249379 422:0.0211483585332614 423:0.0351430132634665 426:0.0208782973881146 472:0.0422599869635797 478:0.018187453772552 485:0.016049617996293 496:0.0194477588902755 505:0.0166825893003179 534:0.0176772148086424 535:0.0439856622034586 550:0.0377904730706138 582:0.0195613955871312 586:0.0170484615392924 599:0.0217456743693602 654:0.0242355821500601 663:0.0217053990075853 673:0.0234496612994668 709:0.020225489075059 715:0.0286166088635774 747:0.0255591908559208 778:0.0221631017527238 792:0.0508995745143678 804:0.0436949846324059 850:0.0637790279830251 909:0.0204193158129642 942:0.0300069130553299 963:0.0393541970371506 969:0.0259380816762172 971:0.0289211399804372 987:0.0189340778720801 1009:0.165361667704378 1059:0.0212596759943417 1074:0.0303099934743793 1096:0.030388074035801 1138:0.0228696157514594 1155:0.0269975799089648 1215:0.0271847547532715 1225:0.0206872916569797 1235:0.0271847547532715 1271:0.0295777514146893 1296:0.0236100938114534 1313:0.0303099934743793 1335:0.0249293213519856 1337:0.0298606195798433 1342:0.0332084055871886 1377:0.0221201050626697 1446:0.024205776540918 1497:0.028157780568188 1499:0.0353740640608338 1573:0.269400113323012 1600:0.0345674813669047 1613:0.0265955418581756 1652:0.0277817690809521 1720:0.0603132980884908 1726:0.0313168497034686 1806:0.0318870954133804 1838:0.03554841704725 1862:0.0326241895403417 1948:0.0348779568895384 2056:0.0302328593673236 2109:0.038682284225162 2142:0.0301566490442454 2156:0.0373790778641849 2185:0.0579676698602264 2369:0.0302328593673236 2423:0.0299333459247791 2605:0.337177562303152 2651:0.0407087600586991 2768:0.0376192379098479 2873:0.0334579860430371 2936:0.0451195923813584 2951:0.0757376367313928 3050:0.108306338158312 3119:0.0376192379098479 3167:0.251385006661748 3284:0.0362979277360397 3582:0.0415584851952886 3826:0.0430931165478213 4066:0.0415584851952886 4248:0.0430931165478213 4292:0.0396151933687256 4577:0.045969317517948 5020:0.0443700816925687 5130:0.0495304247040178 5151:0.0799184987398188 5401:0.0430931165478213 5476:0.0415584851952886 5508:0.0443700816925687 5720:0.0495304247040178 5832:0.0469502531982933 6219:0.045969317517948 6281:0.0495304247040178 6313:0.0513610855209526 6324:0.0469502531982933 6410:0.0420300702325073 6441:0.045969317517948 6768:0.67354635400523 7431:0.0495304247040178 8153:0.107882514053354 8225:0.102722171041905 8338:0.0469502531982933 8406:0.107882514053354 8844:0.0539412570266772
+1 6:0.00841506673873957 11:0.0378145118443385 28:0.124282035031862 31:0.0320737285854071 63:0.0363783029349818 67:0.0476008196984872 68:0.0516598512964877 75:0.0341091237372642 142:0.0152750455465149 345:0.0617541333589062 346:0.0701094406234051 381:0.0808915335559088 399:0.158693030400669 498:0.0864670873378339 505:0.242125868884106 513:0.0629715314781038 697:0.360854283992726 847:0.538439552835093 1080:0.170170514749266 1627:0.112347658584428 1817:0.119622693959958 2024:0.0819542426261127 2223:0.106823986280457 2369:0.219395119408253 2469:0.149198700320318 3219:0.128984643961354 5816:0.47568195096514 5953:0.16099336243426 6761:0.174565009558167
+1 2:0.0367236228723922 6:0.0134937990470824 17:0.0245097437478949 20:0.0253725954503227 26:0.214151235151449 27:0.0130969021925854 29:0.016335615824719 30:0.135181822593421 32:0.033717978581794 40:0.0562078997143397 54:0.0336785488084361 63:0.204167754875371 64:0.0390117263119681 75:0.136737377038215 83:0.0582721438974721 84:0.0791944738399087 94:0.0270019390889342 100:0.0277946226732846 103:0.0428174725197419 110:0.0434093020731013 134:0.0644279961398978 142:0.0629844951391891 150:0.0784516693610697 154:0.0325148095859762 176:0.0233147589118514 185:0.0261925515580813 205:0.0355908463831329 218:0.0255139890753457 227:0.031971660522302 231:0.0482200096629496 234:0.0322665524796555 264:0.0370272420081207 286:0.0504061057367961 308:0.0332339358145574 309:0.0331017378253064 314:0.0358932924543195 317:0.0268086549489772 387:0.0317508155222562 402:0.034283645904572 408:0.132428822045025 430:0.0350073209309461 457:0.0310154982937393 473:0.0396017472505361 508:0.0697963997935418 510:0.0406640377717617 518:0.0392258346805349 565:0.0478421788728222 592:0.0443072622670318 676:0.0449771209309305 683:0.0543971352990408 686:0.0531921292908186 716:0.0430676468001435 757:0.085470390982513 799:0.0453768808536133 827:0.0384196939300623 867:0.0395382946245748 871:0.0516643218973582 918:0.0520071636256681 965:0.0449280492616546 966:0.0449280492616546 997:0.0855525308823636 1045:0.0233658625399977 1129:0.0524495589679044 1363:0.101852142852948 1366:0.0487424795766333 1446:0.0469453067554683 1931:0.0586343864942625 1980:0.0558507556421955 2106:0.0610944552188837 2422:0.14322407074842 2490:0.369737835666342 2682:0.0661895879800964 2744:0.0618426545081729 3880:0.407571006177706 4720:0.614645814556953 6598:0.0835759006519317
+1 6:0.0295234625914792 37:0.0349223871111837 52:0.300875406124276 102:0.281316038959129 142:0.00191396595864848 146:0.0662774368429705 161:0.0720294556573103 252:0.0532670625700306 322:0.0639664426408705 422:0.0673045062376727 479:0.186962293668278 580:0.066784461248039 598:0.0780038863085126 628:0.160407823475616 643:0.0600519699012525 656:0.0728592523796981 664:0.250310104791701 695:0.0728592523796981 804:0.069529494715192 882:0.0554268279626194 906:0.0863647245507351 920:0.0969614153377618 947:0.0897888161795953 1039:0.107732896738289 1086:0.0930592201070776 1118:0.285093652107059 1223:0.181394237298705 1467:0.0906971186493527 1488:0.205574961707695 1506:0.103474046615406 1664:0.0876018572391498 1946:0.102787480853848 2198:0.225155433362804 3717:0.143592793837701 3950:0.406144247058433 4241:0.126075081666436 4398:0.132259594599524 5861:0.157630237505343 7870:0.34333536234597
+1 2:0.112408881824366 6:0.0137679123481898 15:0.0471701110868928 26:0.0595913202501554 29:0.100004747088803 41:0.0633962084371147 51:0.18701468752257 60:0.1044998881826 82:0.103269269833582 92:0.0908885592286376 94:0.165302742086405 117:0.284281253142001 142:0.00714044038010547 176:0.285460504634048 206:0.131315337979735 215:0.0877107742231661 242:0.0964726920954611 252:0.0993618206180714 264:0.113338242406962 287:0.127795867905127 291:0.110816316896256 592:0.135621962610889 1485:0.171689477085692 1743:0.408639819205781 1795:0.176000294695666 1836:0.146823723019426 1942:0.17857697338187 2682:0.202602493743925 3124:0.535702204513025
+1 6:0.0228762556041827 16:0.251749468503267 28:0.168929593113525 29:0.0415410502728812 31:0.0871920373395462 41:0.0526684014201383 60:0.0868165809098854 98:0.296782005078511 108:0.317648883479333 176:0.0592888313761495 179:0.0623514680130841 185:0.0666069839499303 194:0.0906237107405713 199:0.213864483427942 200:0.110499050473683 231:0.245244485063894 339:0.0889670203910753 348:0.113634267940314 386:0.0910965503946882 436:0.404125801387891 653:0.116846080278562 795:0.135510450447374 977:0.15726427748411 991:0.121504114258483 1033:0.137017178426135 1047:0.386706169783317 1123:0.129911279836079 1373:0.132698050057966 2184:0.185534687079481 2989:0.176205704131438 3611:0.169023708553803
+1 6:0.0217298229312039 15:0.0496322238570014 26:0.0313508880776392 28:0.106975844582014 29:0.0263061601928974 42:0.0866713180126673 96:0.0448776596795453 174:0.0530949590365374 176:0.0375450665205941 186:0.0411029745672005 192:0.0584956898005098 327:0.0609152462338742 405:0.0688850241842037 413:0.0626284047684892 427:0.0769433288947527 455:0.0528865382894928 467:0.0909188344207402 644:0.0690179626384541 737:0.0853525117572156 1014:0.0888248758466159 1378:0.0888248758466159 2017:0.108929659781809 2175:0.451011608092493 2376:0.301628544025061 2681:0.111023618355933 4047:0.11601829780121 5700:0.14663344885015 9241:0.546729838033101 9640:0.505402549357599
+1 6:0.0157610503433432 15:0.0269993909294229 28:0.116387396067385 31:0.0300363423504497 60:0.0598140065416759 88:0.0601749953107745 159:0.0474088947146825 199:0.0368365451527892 255:0.0733481431409597 275:0.0529933567164895 325:0.141528388206239 387:0.0556284631343334 527:0.0751627262147644 561:0.0698340410131123 594:0.0754559201991178 772:0.219047970886524 895:0.0819486894874162 996:0.350966497413931 1083:0.0844830277821468 2139:0.117979183007478 3051:0.11851310458027 3087:0.543116067781553 3118:0.116452238767956 5793:0.159534008399112 5796:0.159534008399112 9243:0.594830192270477
+1 6:0.0237600977033592 11:0.0533849893245702 15:0.0203510601273227 20:0.167536773220054 30:0.0357045480816502 54:0.0444762965235212 63:0.0641967600237826 64:0.0515193548633819 75:0.0601923414375941 80:0.038676087643896 81:0.0361662884415871 83:0.0307819575693364 114:0.0417096606087689 142:0.0184840181414966 151:0.046910900883006 176:0.0307897509668875 178:0.0479386441133887 179:0.0323802329710785 213:0.0613251139594106 218:0.0673881615308027 220:0.0476518623224445 229:0.0622142280371367 278:0.0512808382465004 284:0.036072887930339 314:0.0474011136134198 317:0.0354038320858054 322:0.0514793589056201 339:0.0462021655432587 345:0.043590986493283 367:0.0506993849808596 375:0.0421093675660787 404:0.0997648808905036 408:0.0349774189561267 412:0.0605403593598788 455:0.0433709004761266 507:0.0317610035030524 508:0.0460869824164486 530:0.0488305693872076 631:0.0398657246372741 662:0.0619205534980934 796:0.0522147473087215 808:0.0619965365942628 844:0.0650903907614133 853:0.0628566008256861 884:0.0613251139594106 886:0.0511628762506772 912:0.0564908505040542 987:0.048494509138789 991:0.0630992605628565 1010:0.132272248478078 1056:0.058329230337958 1359:0.0659409321502584 1366:0.0643699046319653 1389:0.0757553943727868 1418:0.0754048788288674 1445:0.0919792238046319 1730:0.0838464938224639 2298:0.0829959524336188 2461:0.811708653501383 2611:0.0719774117859981 2642:0.0824526239680729 3085:0.107648634317693 3565:0.102344787891978 3700:0.0963514827042899 4020:0.0963514827042899 4050:0.09246577768564 4190:0.101463581687673 4237:0.10644079704927 5323:0.117737948662673 7766:0.126858759622985 8160:0.126858759622985
+1 6:0.0081704134977083 15:0.0279925745142778 17:0.0445215036427723 26:0.106091406236068 31:0.0311412414294523 63:0.0529810017944462 67:0.184867638886844 68:0.200631728506361 82:0.0612839924317006 88:0.0623885570062072 111:0.0510958789673599 132:0.049553749724688 142:0.0148309505065254 153:0.141728182307765 199:0.0381915924597508 232:0.0725212163661054 441:0.0576136939438741 493:0.145880517910562 543:0.0904354456010599 609:0.115718076797089 1723:0.137317934018434 2250:0.681375212280575 2289:0.138411718056166 2526:0.122319095275274 2679:0.117426259377823 2686:0.498481636055997 3479:0.140773703349627 4061:0.149863471147205
+1 6:0.0297793797404114 15:0.0340089481234642 29:0.0360509672065232 31:0.0378343500964632 60:0.0753428642464525 63:0.0214560250688083 68:0.0609382502778866 75:0.020117656815653 80:0.193896492379857 142:0.0102963025047094 158:0.142495242384724 172:0.0778442383144518 174:0.0727633608638448 243:0.0935975942750122 254:0.0957997140902003 325:0.178271858986946 477:0.106135644145895 499:0.295747210108104 500:0.102726651074328 641:0.157090427392296 667:0.0956092489981988 724:0.116151142303778 1135:0.134828966671923 1448:0.124598645112881 1627:0.132525928068591 1675:0.293370925105186 1785:0.301356826002088 2134:0.405697428697078 2291:0.168160200364949 2448:0.146685462552593 2687:0.189908673116224 2883:0.187039032266552 4147:0.179893174958342 4332:0.189908673116224 4656:0.184443126355799 5561:0.211995490555936 8303:0.219830913737683
+1 15:0.134846754690293 64:0.341368840915443 81:0.23963894730936 178:0.317642940588856 179:0.214552426504968 220:0.315742715560226 404:0.330522595284521 2461:0.672300834661045
+1 63:0.0585295096742039 64:0.234856290081303 75:0.0548785986890848 110:0.26133033843159 142:0.0210653255364853 825:0.350349505558531 1363:0.306582387767033 2490:0.445175154223555 3880:0.490727396630149 4720:0.462532196622383
+1 6:0.0278085635893855 15:0.0476373251261546 42:0.0831876840170913 80:0.09053215656448 83:0.0360268730861168 142:0.00721116554727652 159:0.0836475510613765 174:0.101921760889487 179:0.0757949549582912 186:0.0789017944773628 199:0.064993854215259 200:0.268647100717156 203:0.210817655932866 245:0.160767680592591 408:0.0818743922165362 507:0.0743454758986498 555:0.160234094054786 693:0.165328425584836 1055:0.151720985587597 1976:0.222710204921017 2624:0.176506123336859 3644:0.493044401681438 5187:0.576870311251632 5536:0.24406000362498
+1 6:0.0454704809325506 17:0.0495547546778381 26:0.0393617554013041 27:0.0529596540762651 29:0.0330279844225172 31:0.0693236505119863 63:0.0196568723852023 84:0.0533728240673563 88:0.138883433136195 100:0.0561962508504804 102:0.259960881198336 107:0.086990828721631 142:0.0165076211236486 159:0.0547096848546707 172:0.0713167631732004 176:0.0471386877861164 179:0.0495736939901494 185:0.0529571210616523 284:0.055227098248392 345:0.06673720436406 386:0.0724280062159376 406:0.0852692811448773 408:0.0535499502256521 409:0.0464438692073404 469:0.105150109338924 498:0.0934442986171032 571:0.0717737822265668 592:0.179164297650233 714:0.0941127102644381 755:0.0949158499359218 768:0.11365160387 799:0.0917447453500786 952:0.0847208515348913 1064:0.0842601761222201 1066:0.121078289143854 1129:0.106044561475211 1497:0.110412474081172 1613:0.10428661339197 1863:0.109559312589851 2218:0.674795446018379 7858:0.423029622589824 7951:0.194219026624573
+1 6:0.0208901433869579 15:0.0238571726117814 17:0.0379442482791254 31:0.0265406803418049 37:0.0658941384360096 54:0.104277484971886 60:0.105705575536662 142:0.00361141228517577 179:0.0379587501765366 205:0.0550992260676653 226:0.0539933116787466 276:0.0540943141109045 312:0.126229742791675 339:0.0541619469210733 347:0.114406826025391 402:0.0530755109272992 453:0.0675413776033161 532:0.161027610015298 586:0.051187690850482 640:0.0649900935769315 695:0.0687381084140507 726:0.0641719640519154 886:0.11995459326356 906:0.162959338873816 968:0.096657691048717 1056:0.136756562830527 1080:0.0704071748866698 1113:0.0845432160220566 1141:0.185420135539113 1377:0.06641520684541 1613:0.0798526231531067 2240:0.472910529205826 2311:0.103338644728658 3156:0.252389018977126 4501:0.118943886312956 4507:0.288901498010143 5782:0.563869071828482 6233:0.131207306433715 8424:0.148714185241818
+1 6:0.012366587294334 15:0.0211845224492654 17:0.0336934637046083 28:0.0456605004765893 29:0.0449130341421761 33:0.0342163350102815 60:0.0938636851234873 102:0.0589178749326035 108:0.11447772789578 142:0.00320683619445659 186:0.140351863331244 226:0.0479445968716233 231:0.0662878878753678 276:0.0480342842929409 286:0.0346465534605856 312:0.112088589182386 382:0.108619432917148 439:0.266572824895615 478:0.0484899741130391 561:0.0547938586256406 586:0.0454532816438018 626:0.0583578956840417 640:0.0577094410458542 726:0.113965928418518 886:0.106516426537043 947:0.0752202577796782 1056:0.182154179951127 1080:0.0625196623777389 1102:0.0740695910706787 1377:0.0589749029897359 1726:0.0834945479677254 2034:0.0832538938473342 2449:0.0776137734386655 2604:0.184322258365139 2695:0.103131696397331 2879:0.116508530741821 5782:0.751050671739994 5882:0.132054164466402 7986:0.132054164466402 8672:0.273869859791718
+1 6:0.00855097777573401 27:0.0248983964832293 29:0.0310554842374736 31:0.032591748685266 64:0.074164822713612 80:0.0556762636289225 142:0.00886957230044589 179:0.0466130494858423 255:0.0795883939492148 400:0.0753470538899064 505:0.0615091058703947 539:0.0794435643237622 549:0.365234835531048 679:0.107571553182708 710:0.0985421755261272 739:0.262057284093538 882:0.0642138194487499 1143:0.101489658544481 1150:0.0933067090431958 1319:0.0902553603040828 1403:0.365979812855509 1975:0.121554710055484 2341:0.35724812224103 2353:0.393203592378057 3740:0.33271403313407 6268:0.1568438624965 7004:0.378739102192783
+1 6:0.0152714050542671 15:0.0174404042928466 31:0.0194021396793558 94:0.0305590403146638 96:0.0630787393918189 97:0.0317637491003983 132:0.0308738100878962 142:0.00264006516390441 158:0.0365370700083802 186:0.028886575631023 198:0.0886471771379707 206:0.0485517742368588 226:0.0394709465413346 232:0.0451833872082314 258:0.0482724185737505 274:0.0550133838741127 291:0.0409725846384949 294:0.243230741815678 308:0.0376120093089246 322:0.0441166615612904 377:0.0391794441164507 389:0.0433831254993398 426:0.0458261106068814 473:0.0448186845683322 506:0.0284784106841573 530:0.041846708065072 792:0.0558601472183853 827:0.0434809134195466 856:0.0382045845458369 862:0.0489815717650046 882:0.0382270220085741 927:0.130767459043806 1038:0.0675892112763154 1156:0.0713644421425485 1751:0.0693496620493206 1932:0.131402364444129 2201:0.526243193308242 2532:0.149204177789485 2968:0.0776431019317455 5082:0.721363059095816 5879:0.108715125505601
+1 6:0.0151087070432236 7:0.0469085186752271 15:0.0258818973997128 42:0.0451968093705577 63:0.0163287214123927 75:0.0153101803600365 80:0.0491871443531186 142:0.00391790778203211 154:0.054609165019424 159:0.0454466603356608 179:0.0411802560796869 204:0.0907004141391635 229:0.0791222794677745 254:0.0729066468625559 256:0.0514096680163773 262:0.0707009511526865 265:0.0713653596204672 345:0.0554377724262486 365:0.0800415904087868 437:0.0679494964989504 483:0.0733476798726615 582:0.063717293259655 586:0.111063836799014 724:0.0883947347342893 727:0.0808791900041643 757:0.215323420844444 882:0.056729640260019 1140:0.0767294494707534 1305:0.0687075584875436 1395:0.0806665956330484 2042:0.0970307196256089 2417:0.129038487165691 2767:0.11889124440295 5028:0.284685373113584 5119:0.433579725112273 6469:0.149735762573311 6695:0.501895071907706 6757:0.156710081529722 7580:0.322670699243704 7840:0.351405489189565
+1 80:0.131359897403024 159:0.121370506816666 204:0.121112917332605 245:0.233269888068155 5028:0.380142432500974 5119:0.385974756587447 6695:0.446789406865954 7580:0.430864512516956 7840:0.469234284830709
+1 6:0.0122491597506606 26:0.106035480621417 27:0.0713332309022825 28:0.0904538578543995 31:0.0933744763861079 63:0.0264765365470684 64:0.1062401031934 75:0.0248250024975665 94:0.073534013139793 97:0.0764328957868804 132:0.0742914415276789 142:0.0254110841771822 192:0.0989225339792266 199:0.057257189896549 204:0.147068026279586 226:0.0949786731430115 256:0.0833592490025105 265:0.115716809936627 317:0.0730076450726516 322:0.106157625944001 337:0.0936468578439985 387:0.259399691050657 389:0.104392523052596 436:0.108195186883183 641:0.290772202356333 693:0.145648248950683 994:0.140239465860234 1243:0.163084629373035 2055:0.188699746691848 2171:0.169482315827487 5215:0.692413309220008 7365:0.247973010931888
+1 6:0.0183742971455468 29:0.133463730194107 31:0.035016491127803 88:0.140304512768598 118:0.120317406984938 159:0.0552694839400367 172:0.0720464887949376 185:0.106997975214171 205:0.145390512669578 229:0.048111869189559 255:0.0855095661638636 275:0.0617798726504284 295:0.0780053443875926 345:0.0674200711373219 505:0.0660852254596413 510:0.0830573855312053 582:0.154978248808914 685:0.0970933935068793 693:0.109239501297389 768:0.114814507002522 952:0.0855877301383167 1055:0.100248488687341 1159:0.0934203103424229 1223:0.225785956256918 1469:0.104017863936661 1665:0.297055778949864 1863:0.110680342680667 1922:0.134639963791099 1980:0.114076663257585 2024:0.0894735391353523 2171:0.127115593857845 4778:0.152112721961922 6213:0.15973257633345 8757:0.196206309749196 9245:0.693455478272527
+1 6:0.0236169689528963 15:0.0404569342421143 29:0.0428861135117742 67:0.200388264737631 80:0.0768862125492228 186:0.134017798115322 232:0.104813013186235 433:0.0954920192151112 543:0.261407958312103 880:0.138901149615565 1457:0.156364813899436 2236:0.16846677468323 2796:0.203456543681962 3335:0.173056298125892 5445:0.200042828246477 5777:0.22973094998033 6225:0.252189147100637 6762:0.489918444974184 8858:0.489918444974184 9589:0.252189147100637
+1 6:0.023180710619782 15:0.0397096040182155 17:0.0631571518742687 26:0.0501662530685427 27:0.0337483349221308 28:0.0855889198135676 63:0.0501050638904909 64:0.201052246723224 75:0.0234898234142315 94:0.0695790859945666 97:0.0723220561709176 142:0.0240443834857496 144:0.0689070886188339 150:0.101077841685973 176:0.0600778932923047 192:0.0936021196810805 198:0.100919228773993 199:0.0541776896093724 226:0.0898703740499541 265:0.109493138288143 317:0.0690810279198795 337:0.0886101886301438 436:0.10237605552728 478:0.090892663523273 612:0.134921687075931 997:0.220453312027368 1031:0.142423921648368 1608:0.125600504722302 1836:0.123601826818712 2229:0.164760371981309 2252:0.383805808892263 3400:0.175935465355848 3534:0.395957618510304 6423:0.256679462822407 7890:0.539147984788
+1 6:0.0146097442482437 15:0.0333695354682854 27:0.0141800237879862 28:0.0359618606886756 29:0.0530597428872284 37:0.0230418837289908 60:0.073926319968114 63:0.0105263118833134 68:0.0298962657804197 75:0.00986970929256048 80:0.0634169950033599 88:0.0371862396002894 96:0.0301728703659321 142:0.00378851946231661 158:0.0349540364168034 172:0.0381903324678769 176:0.0252429033308642 185:0.028358691139338 192:0.0393287635299979 204:0.0292350155000476 240:0.0438406127975231 330:0.0484331935939525 331:0.0380696256067807 345:0.0357379655110015 355:0.02930966462524 408:0.0286761528673026 513:0.0364424905303096 530:0.0400336249538996 626:0.0459622319678641 655:0.0368749605967886 693:0.347433409423735 733:0.0549663757282081 778:0.046538467398515 796:0.0428081350894018 801:0.176687432156757 827:0.0415970254526188 834:0.0490747003976955 856:0.0365493029188639 963:0.123954943417368 965:0.04864362563834 1031:0.0598421996703545 1080:0.049240007561547 1140:0.0494636472364024 1159:0.0495201469343509 1235:0.0570830219044708 1237:0.0597201699760541 1497:0.0591261984720215 1620:0.235583242875676 1746:0.1137701207554 2017:0.146474683709929 2026:0.0586693280315726 2605:0.070801132286583 5549:0.0893250174844814 5788:0.264766422375755 7093:0.0931690709792135 7319:0.312014547562943 7825:0.679600750719582 8959:0.10784890268238
+1 6:0.0326649545495419 27:0.0190225027081501 28:0.0482428381340254 29:0.0474530987092415 31:0.0498005265557094 33:0.0361514458714032 54:0.0489161693730702 63:0.0141210479827833 80:0.042536951179737 85:0.12010807748855 88:0.0498853425127351 100:0.040370102586083 102:0.0622499857405562 142:0.0101645981430377 158:0.046890841816694 172:0.051232333151009 185:0.038043185756479 199:0.0610753241422752 232:0.0579873279887432 252:0.0942960493171871 255:0.0608059414772359 275:0.219658658637925 289:0.0568393470164174 357:0.0604760179934808 373:0.139911890282763 377:0.0502820044439557 409:0.0667284288905165 426:0.0588121845306354 434:0.0565306620054667 436:0.115410066778752 448:0.118326362713161 475:0.0529375472623409 502:0.0450943804269885 505:0.0939865451804165 507:0.0698631292734708 641:0.310162034542087 655:0.0494677617120527 739:0.0667377033659912 742:0.134098912415918 761:0.199293839682717 772:0.181591755810861 882:0.0981193752928847 895:0.0679358331884665 1129:0.0761799899577082 1242:0.0829322158691439 1311:0.478749741610315 1432:0.0776803230431843 1509:0.0825548264229412 2021:0.190714224771853 2022:0.281679018564373 2067:0.162936219342684 2435:0.096136597654027 2842:0.104641416635284 3226:0.219596429228816 3760:0.106672871464524 4865:0.117066313152066 5153:0.103404696191686 6125:0.2367894469936 8859:0.135522587762909 8882:0.13952251102773
+1 63:0.0676287175582909 75:0.0634102228328533 80:0.20371855266214 142:0.00811340557899976 693:0.372027673394313 963:0.530918074709907 7825:0.727708617736524
+1 6:0.0393175323937882 26:0.0850885597275082 27:0.076322149813931 28:0.0967800393041022 29:0.0237989354265558 52:0.106849964861051 72:0.0407803778656318 80:0.128000174728986 81:0.0398979621245175 85:0.0401581696188379 102:0.124879801845691 111:0.0409804611286757 142:0.00679707251786367 162:0.0709813088689124 176:0.135866672620752 192:0.0529204997645398 204:0.0393384254174815 242:0.0459167676823804 252:0.141875598204634 312:0.178183626220456 322:0.170373151377825 336:0.359467469929052 337:0.100196352016699 377:0.0504354071464019 382:0.115112546699971 398:0.203877404107186 448:0.0593436791709731 506:0.0366600463617816 550:0.0533884747549419 557:0.0616721642224075 561:0.0580693568408411 575:0.0683934010227291 580:0.0592929597465149 609:0.046404722297639 664:0.0740772463644304 713:0.0655260020921813 726:0.0603893240139127 827:0.0559726566026366 852:0.130062863878818 895:0.272572380085554 999:0.384138857733161 1118:0.168742310436443 1242:0.0831852293711884 1424:0.0609358713846767 1485:0.163433312818768 1681:0.0972473102838008 1709:0.167143822916472 1863:0.0789450234791227 2000:0.417318875253206 2107:0.0839670927295813 2486:0.110133192168145 2652:0.104960661587373 3735:0.106293124708822 5445:0.111010440493202
+1 2:0.0338814809112329 6:0.0248989538108691 15:0.0284353547946221 26:0.179615893936698 29:0.0301427153667096 31:0.0632676532370968 32:0.0622169033623994 41:0.0764337262730802 48:0.0507742707134579 60:0.0629952172679164 63:0.0538190434263619 67:0.234739792293409 68:0.203805276296641 80:0.0540398518475982 142:0.0129133227113322 153:0.0719850034919547 172:0.0650866509352973 192:0.0670268452296648 205:0.0656727462067083 221:0.0790074216199124 232:0.147336681480008 286:0.0465050388755285 402:0.0632606809148162 409:0.0847732221340835 530:0.0682281196488867 631:0.0557020625517029 633:0.0863071343579679 757:0.0788556028530251 768:0.103723191297374 799:0.0837300790172744 848:0.0917323684589494 975:0.102838702233254 1005:0.174983597576854 1436:0.111430722149586 1676:0.112732375314579 1689:0.132938692013905 2250:0.415291831758669 2526:0.248507822711021 2674:0.122645756515428 2686:0.506366507040149 3479:0.143000430291175 4061:0.304467956003892 4387:0.177252379783511
+1 6:0.0302286887072789 252:0.218157805547554 275:0.203275752420032 448:0.273752928302397 641:0.239190893325982 655:0.228891420554641 772:0.280080019188419 1129:0.352491107658297 1311:0.369202434928623 2022:0.434450697236807 2435:0.444831980318989
+1 26:0.144916143002367 63:0.144739384740899 67:0.189390730200783 68:0.205540514240695 142:0.0173643590187203 441:0.236093231488148 2250:0.558436943411257 2526:0.501247333739423 2686:0.510677810420419
+1 27:0.0787362489111254 80:0.176065159637129 102:0.257659596488452 142:0.00701206654867835 336:0.247225043291606 580:0.244673675920318 947:0.328953162167501 1424:0.251453186193373 1709:0.344861293273116 2000:0.430518832571586 6454:0.547415684527746
+1 6:0.0226415636766098 15:0.0310288167674764 17:0.0246752862627819 26:0.0195997859064601 27:0.039556081950321 29:0.0164459490437713 37:0.0214256020700035 53:0.209244869274572 63:0.00978793975046672 64:0.117825652228917 72:0.0281807570104819 75:0.00917739479706499 78:0.034788750281935 79:0.0614176675159699 88:0.0345777967429446 91:0.0361832350601516 96:0.0280563829491461 98:0.0587474522257781 100:0.0279823517570726 102:0.258889755479416 111:0.0283190219828243 132:0.054928646150945 142:0.00352277233010821 144:0.0538435343186315 160:0.123131509234911 170:0.0449873888092971 179:0.024684716900789 199:0.0423340812717067 204:0.0271843142679481 218:0.0256863144150056 224:0.0861303656105798 240:0.0407653964125777 279:0.0512700338123713 280:0.0474377952269092 287:0.0420324913117565 293:0.128579425381099 306:0.0355340272876239 308:0.133833611366672 319:0.0821581685583704 325:0.0406625693569074 337:0.20771821135323 348:0.0449873888092971 351:0.032135939236572 355:0.136268635509939 389:0.0385921974432547 390:0.0413647259390353 402:0.0345152028323356 422:0.0412926975345463 423:0.0343088049802671 430:0.03524376566925 437:0.0407310260864337 438:0.0504932268185046 454:0.0451822926486445 465:0.0385058133295107 478:0.0355114571361351 479:0.0573526044121542 489:0.0515948853874783 499:0.0337289393611284 509:0.0420324913117565 534:0.0345152028323356 546:0.0391235077717367 559:0.0648402402181538 575:0.047262382454928 586:0.03328754639109 587:0.114705208824308 597:0.0404930597021659 613:0.0418809666901965 620:0.0643713217387431 643:0.0368431174686802 644:0.0431482925799027 656:0.0447006484303431 658:0.0418809666901965 663:0.0847606659095769 676:0.0452809032057624 684:0.0847606659095769 757:0.0430238354627134 763:0.0524462364702518 772:0.0419564980168903 780:0.0459416856733285 785:0.0636995438147267 796:0.0796106844884812 814:0.0502693493205293 836:0.0513504539311715 853:0.0958360860537244 1012:0.0604564822771294 1013:0.0561090809530568 1028:0.110174567372837 1046:0.0508755605225868 1048:0.0615070964062667 1094:0.0466395937120818 1114:0.0554186330556132 1143:0.0537455394393188 1149:0.0868872686912459 1155:0.0527134481663105 1170:0.0602897030619062 1227:0.0989626833807761 1248:0.0583036045358015 1268:0.0613257082946186 1431:0.0528948362779586 1432:0.0538437602273212 1441:0.0590304120055431 1478:0.0725317187986619 1485:0.0564692471847505 1507:0.0620677117223732 1523:0.0729835818670513 1553:0.0630622315576869 1665:0.048805911005805 1754:0.064143336168329 1776:0.0524462364702518 1867:0.0755281247924178 1922:0.0663635575161349 1951:0.0564692471847505 1990:0.120579406123812 2010:0.0663635575161349 2067:0.0564692471847505 2134:0.185073515540352 2206:0.0584456045382841 2256:0.0687373930362429 2468:0.0672015063239598 2841:0.0780214310885676 2861:0.0773496531645511 2896:0.0761061297054538 2904:0.08114397892697 2949:0.0674938695771456 3005:0.149951635288886 3070:0.0708726092749837 3380:0.0767123409075113 3813:0.078731616662883 3835:0.073452500346462 3969:0.0687373930362429 3985:0.084140384920726 4264:0.0820647604747701 4481:0.0853246010358194 4482:0.0853246010358194 4483:0.0853246010358194 4491:0.179512478110556 4512:0.0744470201817756 4607:0.084140384920726 4693:0.091671540438392 4762:0.290128168979725 4945:0.0939368611641276 5227:0.0897562390552782 5299:0.0939368611641276 5365:0.0897562390552782 5394:0.259901073650627 5419:0.0820647604747701 6495:0.0939368611641276 6764:0.0939368611641276 7232:0.0939368611641276 7378:0.091671540438392 7595:0.0967093896599082
+1 6:0.0207743011586167 26:0.0299723008593739 27:0.0201632608759313 31:0.0263935041594525 67:0.156683053466629 80:0.0450878444683475 94:0.0415706809137216 97:0.0432094943060942 111:0.0433058937971701 142:0.00179569295026976 148:0.0608709553894409 153:0.180180840464848 198:0.0602951446897438 204:0.0415706809137216 226:0.053693902267115 284:0.0420530839495071 327:0.0582366305708174 341:0.0578587116138765 394:0.0645113213416794 437:0.0622865256794066 448:0.188133393104736 613:0.128090065872224 876:0.0668305427704554 979:0.318424787548561 1011:0.0831080729251889 1025:0.0844077451838627 1038:0.367777195389159 1168:0.0900426832164031 1179:0.0863536609022776 1283:0.0858028890363384 1387:0.112324718737453 1550:0.661499397280714 1848:0.119311599485109 1917:0.0861682906618676 2067:0.0863536609022776 2078:0.0961216946168116 2402:0.0955087285908112 4353:0.248173297497523 4787:0.124086648748762
+1 6:0.0200444574157027 15:0.0137348242647623 26:0.0347031750607212 27:0.01167293053769 29:0.0291190246377939 31:0.0305594955692197 63:0.0346608466301954 67:0.068030305618832 75:0.00812469941671471 80:0.0261022896946911 88:0.0306115418635501 106:0.0280611626017912 140:0.0566574705603577 142:0.011435203425153 153:0.139080574840907 158:0.0287740024421481 180:0.0308928786243854 198:0.0698122233357098 204:0.0240661306569508 232:0.0711664560719279 322:0.0347431506470781 345:0.0294193292765644 383:0.0480224569213196 389:0.0341654697210178 437:0.0360589634862906 441:0.0565374193187764 457:0.0276433122772824 530:0.0329554964255225 585:0.0496730746984416 586:0.0884078700092684 593:0.0386126682986159 693:0.0476675981567828 720:0.0399130343927071 824:0.0448355324777296 862:0.0385744085462582 880:0.0943117868855864 881:0.0456766810715355 886:0.0345295581550265 916:0.0485771795537007 933:0.0465875184967406 979:0.614475745334416 1056:0.118098279378838 1080:0.0405341483579342 1086:0.0505447914531049 1122:0.0979263448224738 1154:0.0544519094302914 1227:0.0438055719362456 1229:0.0452480683655513 1309:0.0473238305630501 1387:0.0650271128046045 1418:0.0508903591724799 1550:0.446781698149428 1578:0.0560135351294 1676:0.0544519094302914 1946:0.055828662412706 2034:0.0539770298853235 2163:0.050658778667077 2223:0.0508903591724799 2264:0.163355728290874 2315:0.128423899472052 2322:0.0634530510751005 2354:0.234058991339498 2444:0.0567857586468465 2765:0.0608528530653008 2791:0.0627431487878958 2792:0.122895149066883 2987:0.273908966910781 3115:0.0646119817374118 3219:0.0614475745334416 3252:0.0755374211959193 3254:0.138143926391672 5351:0.0779919261126848 5362:0.15892145412163
+1 6:0.025481561858367 15:0.0436510660850022 26:0.110291224607901 27:0.0370980984164172 28:0.0940842319458084 29:0.0462720324735493 33:0.141006671667707 41:0.117333286704768 80:0.0829564871358443 103:0.12128416217225 142:0.00330387005379145 158:0.0914475393292525 159:0.0766479807495329 174:0.186786034199226 226:0.0987906511215496 255:0.237170138528504 312:0.115480214989332 355:0.0766806063993039 365:0.134993995939471 405:0.121167439589048 453:0.123579318690032 784:0.125110587470142 895:0.132489939115489 1133:0.148567872912006 1226:0.201662086997381 1448:0.159924490230605 1783:0.369021408125106 1990:0.169630046309656 2227:0.168710035813545 2238:0.39254645754189 5991:0.51585086209082
+1 6:0.00424387095807223 11:0.438622534154707 27:0.0617856720652476 29:0.138716207655766 64:0.257657266614167 72:0.026410608816922 76:0.0353070551876255 79:0.0575597735223622 86:0.0329680774898982 88:0.064811648827551 91:0.0339104186075965 142:0.00330149264361347 159:0.0255309420439637 172:0.0665616755854012 181:0.0358212406444887 185:0.0247130867639203 204:0.0509535134077487 205:0.0671610532267024 256:0.0288808296348154 287:0.118176777709261 308:0.219497209437321 314:0.0338658892662439 317:0.0252943900600499 322:0.18389802847389 346:0.0353574639614711 351:0.0301173499287401 372:0.167571274131129 375:0.210596281236408 390:0.0387664389281204 426:0.038204755731682 455:0.0929594687298206 475:0.103165666009495 505:0.030527118056736 527:0.0404771133856693 561:0.0752149513095222 613:0.15700100997541 626:0.120160901034282 663:0.0397182515282859 671:0.0777524042865757 678:0.0459265273475527 731:0.0489067201235579 824:0.0474635482083141 862:0.122506293454992 876:0.163829452982451 896:0.268750267992743 967:0.0543796344134446 986:0.0379495255999117 1094:0.0437099707595436 1122:0.207332512027338 1235:0.0497448089596451 1271:0.054123703043616 1307:0.0697706994483876 1309:0.0500976968311264 1322:0.0953597184634823 1482:0.0502782339137483 1497:0.0515253283616088 1597:0.118991598626937 1625:0.114612084593442 1640:0.0660624940915411 1645:0.0485092614515558 1808:0.0426709269809538 1836:0.0452574739234236 1892:0.0563484282805558 2030:0.13075466253723 2067:0.0529221836385657 2409:0.0607673604850273 2591:0.0616994104764938 2592:0.229894362537871 2631:0.0614593110718143 2733:0.110366031195372 2754:0.0594957993134683 3074:0.144982012448687 3237:0.135951411901244 3352:0.0769099384288149 3495:0.0737861629633953 4002:0.0671723247663805 4112:0.0675670882853621 5577:0.0778419884202814 5637:0.0880363040912101 6240:0.0760469949225158 6462:0.0825633898013235 8346:0.093984566364069 8351:0.093984566364069
+1 6:0.0212296729468936 15:0.145469553541288 28:0.156770411858671 60:0.161135428015362 63:0.0917757990102836 75:0.0860510752830592 83:0.0550074246344349 140:0.15001897345602 142:0.0275258169381001 180:0.163597770690964 339:0.16512673915191 363:0.198321469300553 413:0.183560706586996 427:0.225517029713372 467:0.266478533981983 507:0.113513963663477 664:0.239989991849812 850:0.194607746242369 2686:0.323808645256129 2948:0.37640100907582 3298:0.323808645256129 4736:0.420795936911207
+1 6:0.0241124111367876 11:0.0866825264574609 28:0.0356115954708845 29:0.0175143152894398 180:0.0743249642673297 199:0.0225420997264446 229:0.0505093897750163 243:0.0454716725649737 276:0.0374629599570576 304:0.109547405609451 323:0.123761989458878 341:0.0402934288367132 355:0.029024191185692 384:0.104519004909803 457:0.0332534274681975 496:0.0808779939971058 498:0.0495523095519183 506:0.0269791736057769 574:0.0361086308989445 587:0.0610783600065587 685:0.254829428778579 686:0.114060434979906 778:0.0460851870034843 792:0.0529194071313628 867:0.0423911877882006 1055:0.0526220460227317 1135:0.131005474494684 1157:0.0660997714091433 1808:0.193954801193102 1892:0.128061996515534 2076:0.0601376178850323 2376:0.0669401815849954 2404:0.0754766551278755 3449:0.300117639793851 3636:0.083846201505975 4185:0.0846483872571921 4396:0.191174016874855 4488:0.0938201193865086 4778:0.159692834486272 5018:0.0908674811353005 6564:0.102991851515825 6990:0.0976267321535156 8929:0.106798464282832 9248:0.72801189464675
+1 6:0.0336743818494194 11:0.151321475019743 29:0.122298789934762 31:0.0427829042538452 37:0.0531098408045877 63:0.0242623717295659 75:0.0227489512350909 83:0.0290841506967909 96:0.0695462385193757 142:0.00291075255095228 178:0.0905890891736215 185:0.0653646893435947 308:0.165873560303312 346:0.0935184531943221 351:0.079658653763094 394:0.104570490813803 398:0.0873076861438338 423:0.0850447592905066 455:0.0819574780104136 473:0.0988279397199923 502:0.0774798458420372 679:0.141208239689629 693:0.266936119195174 738:0.136014864320019 741:0.136014864320019 996:0.12497665228322 1228:0.138215713886023 1242:0.142491708280223 1331:0.380670707730903 1509:0.141843288769025 1754:0.158998676510683 1817:0.478691423291935 1846:0.147458571957897 1880:0.156836470348958 2216:0.152920244907293 2944:0.184539476524936 3473:0.190154759713808 5100:0.214747829900367 5848:0.239723498661324
+1 6:0.0595945951344476 29:0.14429063423121 67:0.224735914447351 274:0.429364597075843 394:0.185061632042001 439:0.428204893163447 502:0.137118479700177 539:0.184556167184661 647:0.358875032897965 667:0.191333551431368 737:0.234081446405861 764:0.367448009832752 1150:0.216761782281662 2248:0.260961995805313
+1 6:0.0190234315463327 11:0.028494991973429 15:0.0434506629909118 26:0.054892437471755 27:0.0184638900772376 28:0.0468261444872326 29:0.0460595964597417 40:0.0792413707102055 63:0.0137063709086922 64:0.0549983664652583 80:0.0412878159542584 88:0.048420415270902 94:0.0380670808928082 96:0.117864801233263 97:0.0395677741844371 98:0.0411329856269699 107:0.0606570842374078 138:0.053173756787201 142:0.00822175476731261 176:0.0657378576087146 179:0.0345668132665145 180:0.0488654252887358 185:0.0369260139305754 186:0.0359837089103456 199:0.08892268977663 208:0.0475074744214619 252:0.0915269623572907 285:0.135246408392724 312:0.114950042545318 363:0.0592371332465459 405:0.0603055784800669 408:0.0373393826622861 436:0.056010474002891 457:0.0437253590784666 499:0.047231732624669 561:0.0561926635546352 574:0.047479702758404 580:0.0573767218969973 755:0.132366107775606 799:0.0639719017374468 862:0.0610158380445147 880:0.149179544966942 916:0.0768379200617822 1007:0.585576911665165 1013:0.0785713740066455 1418:0.0804968379378152 1440:0.0785713740066455 1577:0.0967192101443722 1626:0.0911357549464902 1820:0.0808710231811548 2453:0.102201287381955 2642:0.176041009870694 2792:0.0971959233403311 2913:0.0933134613629496 3335:0.0929310516130936 4050:0.0987098293473488 9638:0.589941349667112
+1 6:0.0128005980056304 15:0.0877120095819945 81:0.0779374101026497 159:0.0770078376648567 180:0.0986425604610523 186:0.072638786234403 187:0.119359970807726 215:0.0815483374094092 229:0.0670350209226129 260:0.161392135304884 351:0.090841614469782 365:0.135627783320312 367:0.218511709631876 610:0.164812160193918 781:0.416146406370068 1149:0.122806116022898 1248:0.164812160193918 1273:0.171860218370856 1411:0.162123880696091 1509:0.161756102379068 1817:0.363928668725288 2162:0.220550353644631 2604:0.381582254936753 4214:0.241194895690582 5831:0.23479130528973 6225:0.273377324571716
+1 6:0.0225755511046184 11:0.0338156733686593 26:0.130284278562725 31:0.0286819709328481 54:0.0563452736402374 63:0.0162656708993014 88:0.0574616391786487 96:0.0466243053502469 134:0.161685102284694 142:0.0097569486591859 150:0.0656260577441456 176:0.0780126529926593 228:0.0569128299191474 252:0.0543085933553831 276:0.409210339556452 312:0.136413903750197 327:0.063286077330546 341:0.0628753906527761 405:0.143132080619049 427:0.079937975524346 467:0.0944574099538712 480:0.0553488472835198 587:0.190617967083714 644:0.0717041527496119 737:0.0886744451247035 856:0.0564774195812622 903:0.0837852588689047 1033:0.0901440739047127 1080:0.07608759525213 1324:0.0898083310144479 4450:0.143968510846034 6222:0.141793055070312 9249:0.757344867344313
+1 6:0.0203699883488246 15:0.0232631398998096 29:0.0246599421600508 31:0.0258798295118439 63:0.0146765642694234 80:0.0442103375454777 118:0.0444618218414951 140:0.0479813443043626 142:0.00528223465075113 158:0.0487355084699906 172:0.0532477923083364 186:0.0385307839684969 198:0.0591216708298917 209:0.0426535651793934 223:0.184454109127337 276:0.0527473903728549 329:0.0911621640463193 381:0.0652702130282103 386:0.0540774883869435 432:0.0637839359390585 480:0.0499414330601003 610:0.262270698714079 880:0.0798695436587881 1046:0.228856670388806 1476:0.0874235662380262 1755:0.315422224374 1829:0.111629873519889 1887:0.233979075669964 2074:0.115982237818026 2236:0.096870072370587 2796:0.116989537834982 3335:0.298527282103475 3697:0.12616462692102 4486:0.119183896099127 5444:0.127940304373594 5445:0.345079852437789 5522:0.150370934202883 5777:0.132097582993458 6225:0.14501126988779 6706:0.150370934202883 6708:0.150370934202883 6762:0.422561973803777 7150:0.150370934202883 8858:0.140853991267926
+1 6:0.0264249322903524 31:0.100717692738759 88:0.100889226417013 94:0.0793169228669797 102:0.251791511874715 140:0.0933655743486983 176:0.136972009912533 252:0.0953532138960738 275:0.0888485115246885 308:0.0976231193947727 431:0.294652816134511 457:0.0911065637820667 592:0.26030098742956 641:0.104546433055927 882:0.0992194036484017 895:0.412184820899838 1067:0.140534144564418 1159:0.134352098248315 1373:0.15328282077782 2218:0.588230768792319 7858:0.307301817148451
+1 6:0.0267710812241361 23:0.0481426017137255 26:0.0289681549810304 29:0.0243068369717789 31:0.0510185135649584 63:0.0289328217144508 65:0.0478813776483806 67:0.151433785381306 85:0.0820303987985061 100:0.0413574467752433 142:0.00347106562995075 176:0.0346915629008097 199:0.0312845311961834 215:0.0426374057587055 232:0.118811084307711 252:0.0483011386017098 274:0.144659358082143 275:0.315043286539962 373:0.191111678690254 396:0.0679783623505389 398:0.260285530373617 423:0.050707838576683 426:0.0602505724694404 431:0.0746281427231639 432:0.0628706151144471 433:0.108245245516614 434:0.0579132500363358 436:0.0591163433874325 441:0.047194088788364 493:0.0597487996644554 507:0.0357858968071531 561:0.0593086356380204 609:0.0947901239608194 611:0.0865939236335217 631:0.0449176836580357 641:0.26478980345919 663:0.0626374216045562 683:0.0809410746208171 712:0.0614594954958719 749:0.0779095926534019 755:0.0698530089186244 761:0.0680560104245169 764:0.0618993666373216 771:0.0710038849662433 772:0.0620110006718989 872:0.0763783942879912 882:0.100519111454884 1009:0.0596500696302102 1045:0.0347676033495658 1311:0.408715561123687 1424:0.0622363254882353 1795:0.0855561479767312 1824:0.0948027754993003 1846:0.0879220016138482 1995:0.0865939236335217 2022:0.480946883614262 2949:0.099754807706128 3700:0.108561564087247 3760:0.10928180314997 3783:0.118662473181081 4625:0.126108329871375 6125:0.12129034017309
+1 6:0.017916752042209 15:0.03683064633652 26:0.0620389137750591 27:0.0104338569866142 28:0.0264612328588676 29:0.0260280601927202 80:0.0466630991794589 94:0.0215115274339231 96:0.133209683840099 97:0.0223595621178454 102:0.0682883276297245 134:0.0256637977352538 140:0.0253216595070677 142:0.00371685979768302 158:0.0514393237318576 172:0.0281009731153397 176:0.0371481525305071 198:0.0312008519133412 203:0.0271654999750553 204:0.0215115274339231 226:0.0277849153842504 276:0.0278368911557647 284:0.0217611559199237 289:0.0311764244211539 291:0.0288419685112554 308:0.02647634748221 322:0.0621103781857581 336:0.0327614127023727 389:0.0305388285999466 409:0.0366005932377556 457:0.0494179873693585 473:0.0315493664956942 493:0.031989875028059 585:0.0444003119709739 594:0.0343105309068515 631:0.0240492042491235 643:0.0291547443267028 744:0.0884295917816916 827:0.0306076647776071 852:0.0355612970622417 856:0.0268934809502196 880:0.168601311099891 882:0.026909275428392 895:0.111788566199217 987:0.058509126115284 999:0.630178774737432 1011:0.0430058289018925 1033:0.0429249061360427 1056:0.0351874094063286 1118:0.0461368852679603 1126:0.0382135529733945 1164:0.038015916961225 1238:0.627559629819685 1497:0.0435058719395035 1591:0.042529991181829 1681:0.0531779846509968 1806:0.049267941634028 1873:0.0474497740052924 2000:0.114101750876306 2123:0.0585101499149983 2196:0.055486941729518 2449:0.0449788353298692 2486:0.0602244029741403 2532:0.052514897894786 2900:0.0597670153637279 3057:0.0642109604671278 3101:0.0546555683706524 3115:0.0577534642987171 3209:0.131453158569384 3767:0.0573958954192439 4530:0.0589115142368082 4989:0.0665820804116118
+1 6:0.0346826300926604 11:0.0259753678956593 18:0.0618850498494518 26:0.025019330753767 27:0.0504937504093858 29:0.0419868503308592 40:0.0361172896394084 63:0.0249888139782338 75:0.0234300800000054 81:0.035194636528976 83:0.0299549623415992 92:0.0763188637381698 142:0.0134905666599367 154:0.125357481922135 159:0.0347748642523197 171:0.0499801080468026 178:0.0933014267133135 179:0.0315102981048575 180:0.0445445782345318 185:0.168304451122734 198:0.0503312766983365 200:0.111684877090586 204:0.0347010601661709 226:0.0448209000231373 227:0.0410878089807803 229:0.0605427661241581 278:0.0499031153252504 304:0.0437694389555654 320:0.0548677686152657 347:0.0474856676856419 355:0.0347896663714471 377:0.0444898869062225 387:0.0408039939699862 390:0.0528025032899232 399:0.0545043377011301 402:0.0881180314741024 418:0.0596775391919307 453:0.0560674135158636 490:0.0598204272709191 508:0.0448487988333102 515:0.0417628244469374 539:0.0537036392590983 550:0.0470948355199812 571:0.0912424752741502 582:0.048755182608899 597:0.0516898122640514 655:0.0437694389555654 681:0.0632523021980276 684:0.0540989362185399 764:0.0534614899831205 829:0.0428817309796463 850:0.105976015943571 881:0.0658614083272485 963:0.0490435627260444 1094:0.0595359269163893 1388:0.299159130855555 1485:0.072083581906159 1598:0.060479848920567 1782:0.0711770226271366 1808:0.0581206792420003 1862:0.0813131308255478 1936:0.233489153907776 1946:0.402497975473389 1992:0.075545185931932 2164:0.0746064226428734 2722:0.0797257601842711 3611:0.170837595746784 3666:0.0827692416597773 4795:0.0987376375154796 6082:0.343724320692404 6363:0.119911381208575 6618:0.119911381208575 7535:0.23982276241715 8142:0.449827611939796
+1 27:0.0981944815678793 63:0.0728930891554277 75:0.0683462173053444 81:0.205327534194629 142:0.0174899426627282 185:0.196379570020904 1946:0.469639268780287 3611:0.498338180784255 8142:0.656080041458978
+1 60:0.219630113715886 999:0.424069852862047 1238:0.460698912548217 2067:0.360844207892946 2280:0.393036574578384 3352:0.524402129756737
+1 6:0.0393969875356272 26:0.0568403410711625 27:0.0573572895190155 28:0.0969756180009815 29:0.0476940593814758 41:0.0302347900252698 63:0.0141927528304568 67:0.0371422861432118 75:0.0266148953309716 83:0.0170133475294296 88:0.0501386538031139 94:0.0788358455623004 96:0.0813648875382352 134:0.0470265814692455 142:0.0170270210871204 158:0.0471289474214516 159:0.0395017589450835 171:0.0567738285270898 172:0.0514924842849074 185:0.0382363641128596 186:0.0372606206186763 192:0.0530274445690323 252:0.142162308613261 255:0.0611147061508344 306:0.051525211558429 312:0.0595145699968463 336:0.0600323170946495 355:0.0395185730938722 373:0.0468741148968148 405:0.124891143741414 416:0.127765292375587 430:0.0511043250888781 475:0.106412714504061 502:0.0453233638341261 550:0.0534963652703419 561:0.0581867067532943 633:0.068280802526174 693:0.0780747736348001 719:0.212024085842685 755:0.0685316143603486 761:0.0667686093057236 823:0.299255399722014 863:0.0693938056239128 903:0.0731075574640626 952:0.0611705708750353 1033:0.0786559969140266 1064:0.0608379517208288 1081:0.0729993507777137 1122:0.0801967951033643 1446:0.0685316143603486 1448:0.0824196358563979 1782:0.0808520076410751 2134:0.447268565277433 2206:0.0847475608131873 9251:0.660827861093305
+1 6:0.00981941548218209 11:0.0882503762795046 29:0.0356622027007822 31:0.0187131770205085 60:0.0745303858679366 63:0.0318369730875814 81:0.0298931273002447 98:0.0318477143498097 128:0.105549521864732 142:0.00636579361532836 180:0.0378346497939899 199:0.0458996493131779 204:0.0294739003241804 205:0.0388491009958456 252:0.0354329318432642 308:0.036276421050809 317:0.0292629214957128 346:0.0818096573774417 351:0.104527720715701 389:0.0418426070829645 408:0.0289104711194855 430:0.0382121552210356 505:0.035316631753676 507:0.0262519534575331 580:0.133273874102583 587:0.062183100486337 631:0.0329508841755573 712:0.0450856890348656 714:0.050809436434792 723:0.0503893605118727 767:0.0469644851361988 774:0.165229790258826 1043:0.0549102817593356 1073:0.0657316874121922 1331:0.0555015955128882 1509:0.0620420380102482 2076:0.122450685825629 2216:0.0668870817182191 2385:0.540886633020582 2526:0.073503135321696 3366:0.0786406686275631 3537:0.0831734016630465 4475:0.277533076024142 5209:0.647577177389665 5491:0.0900549090452505 5904:0.0973159159842313 6452:0.0993925327235846 7379:0.0993925327235846
+1 6:0.0301668442566185 11:0.0451865891210222 18:0.107654849452525 26:0.174093891319606 27:0.0292795384983382 29:0.0730400648032182 33:0.111288999917853 36:0.0768302758074533 37:0.0713668466080583 47:0.0475940185539492 80:0.0654731040798027 81:0.0306121858694504 83:0.0130273667432034 142:0.00130378367844704 174:0.0368550485923823 199:0.04700373373468 231:0.0539005181742854 239:0.0426263344246575 242:0.070460372007504 274:0.108672396381511 292:0.148736970426277 306:0.0394536011406158 308:0.0371490253506103 309:0.037001253913565 336:0.0459676151259162 373:0.0358921890279128 377:0.0773943317279509 396:0.0510673601532845 400:0.0886051825302024 412:0.102486199894202 415:0.0437437143450785 416:0.0489158679075422 420:0.102251383374696 422:0.0458474803703291 430:0.0391313222718273 448:0.0455321435037037 493:0.0448850688025879 499:0.0374494033473502 502:0.0694095129346479 505:0.0361661489836032 557:0.0473187013475927 558:0.111628599912806 626:0.0474524218186713 643:0.0409070902552167 705:0.287349951194362 731:0.057940868279824 744:0.0620378839839877 757:0.0477695711253246 762:0.0669399468356649 774:0.0564014263186184 790:0.0759611156880631 792:0.0551725383257369 819:0.0504972216920223 851:0.114209056289685 895:0.0522835999493945 912:0.0956309585566948 1023:0.0709700819187062 1061:0.0652132728089004 1117:0.0600037164564601 1162:0.0583294964368163 1227:0.05493937130045 1245:0.0491671569548141 1309:0.0593518446111589 1333:0.071471787653497 1365:0.182416001177279 1465:0.0795805323175548 1489:0.0589337705790548 1492:0.0725334950193094 1525:0.0704859835727157 1608:0.108969074234704 1609:0.140500318489331 1620:0.0608053337257598 1664:0.0596739305388176 1816:0.11050228946717 1899:0.0722603101071458 1994:0.0719924300930488 2253:0.0746141551897077 2254:0.0810340214321557 2256:0.0763194575820627 2380:0.0778538582907903 2459:0.0725334950193094 2724:0.0911168976503663 3337:0.0838592396617131 3734:0.0815546638717076 4297:0.0911168976503663 4349:0.0866275696158002 4397:0.0934214734403718 4425:0.0874160920694491 4603:0.0900945494760236 5021:0.0934214734403718 5125:0.0934214734403718 5240:0.101783351578103 5637:0.104298548058517 5738:0.0978146659830893 6359:0.111345585356762 6501:0.104298548058517 6838:0.0922211177994448 7336:0.107376899761748 7905:0.233878267080813 8948:0.111345585356762 9252:0.506005469276262
+1 6:0.011089200867778 28:0.0409440736928417 42:0.0995180784680532 75:0.0112370744133597 80:0.0361014428490598 96:0.0343530675034375 142:0.00287559128998208 158:0.0397966238538526 161:0.0541094459842357 179:0.0604493991640401 204:0.0665705614850044 205:0.0438728237192171 229:0.0290363314221564 245:0.0641092121643601 264:0.0456434680969246 337:0.0423893899013093 351:0.0786963944626314 377:0.042674730074081 400:0.0488563201363684 471:0.173395614148659 655:0.0419836759050398 781:0.0600848372944744 989:0.0670553293988605 998:0.0613712403979585 1192:0.068994196937368 1446:0.0578694629949381 1581:0.0791025261427517 1812:0.279559808112371 1836:0.177386126037999 2709:0.0830081009885757 2771:0.0799889927897871 2823:0.0799889927897871 6249:0.107868738573453 8315:0.386876856290356 8316:0.386876856290356 8625:0.673472119880662
+1 6:0.0144026103734058 26:0.0311692341400139 29:0.026153736517657 102:0.137236114780369 179:0.039255720671268 186:0.0408648148965795 204:0.0432307914176818 394:0.134175116486034 408:0.0848087652469962 433:0.0582350067558673 437:0.129547832298783 456:0.0780379498234481 480:0.0529666725530299 532:0.0832647920403575 539:0.0669043198122176 800:0.0635055191066627 882:0.0540784133911039 960:0.0829884369175982 1047:0.243465468682859 1150:0.0785793280499159 1193:0.0877785387651887 1241:0.179604327885202 1311:0.351816704368605 1591:0.0854706939535157 2202:0.100956747369561 4997:0.142737948464984 5179:0.120111200043013 6516:0.597545306663299 7356:0.140099492440299 7602:0.461386306600521 7608:0.153795435533507
+1 6:0.0262324389474779 26:0.081100876896527 29:0.0136101577355071 31:0.0285668603387754 37:0.0531934927515899 41:0.0172558287837283 75:0.0075949275080834 88:0.0858465388464796 100:0.0231573270846562 102:0.285665517492383 106:0.0262314314440599 111:0.0234359449293993 118:0.024539084663835 159:0.0225447436030733 185:0.0218225478626558 199:0.0175171868209674 252:0.0270453171647594 351:0.0265947073546398 355:0.0225543399016552 373:0.026752350533019 387:0.0264534629196525 415:0.0326045084312274 420:0.0381066873407841 446:0.046240122534062 448:0.0339375194581616 510:0.033879590103902 538:0.0328367438955084 550:0.0305318515155975 574:0.0561191407173256 575:0.078225765926358 586:0.0275477417450914 591:0.0394052941330073 643:0.0304902221745888 644:0.0357081896865478 712:0.034413092456854 717:0.0379768022472252 720:0.0373105006465367 742:0.0384612891420124 882:0.056283792248345 903:0.0417244999334234 952:0.0349117323699061 994:0.0429046714933954 1027:0.0391610443307786 1046:0.0421030371523004 1068:0.0441592820700252 1179:0.0934643977485597 1237:0.0459557975107169 1242:0.0475720477707962 1269:0.0382824597096218 1291:0.0568849361664009 1294:0.0425630309916574 1296:0.038150349543053 1313:0.0489763765840811 1439:0.309114974490177 1441:0.0488517395043064 1446:0.039112882963179 1504:0.0523611664825501 1518:0.0480191805288215 1561:0.0498938897545838 1598:0.0784188646818853 1620:0.0453214375095283 1625:0.0506033043458303 1707:0.0428354292574308 1744:0.0515247353800436 1916:0.091541046863615 1919:0.0546992873416792 1923:0.0556138839235411 2054:0.0583355674267206 2108:0.0563575162940665 2161:0.0497576965955179 2305:0.0600250025735735 2322:0.059315587982327 2428:0.0729064540926927 2466:0.059315587982327 2558:0.0625047353093431 2631:0.0542707906253374 3461:0.0716953578983307 3610:0.108126115274413 4161:0.0679142524165394 4373:0.151729051561906 4500:0.139263949760452 5191:0.0777392350067155 5640:0.573562863186645 5797:0.379322628904766 6693:0.331967061407345 7720:0.0777392350067155
+1 6:0.0158451071008356 27:0.0184548606843722 33:0.0175363333450735 37:0.0299882962456172 64:0.137428676559832 67:0.0358518885055481 69:0.0321510890450925 75:0.00642256009978545 80:0.0206338124904998 85:0.0388413286293341 102:0.0301962058324197 111:0.0198183280411998 139:0.0259253704136323 142:0.00246532022521435 144:0.0188404957394263 150:0.0276365854922287 158:0.0454915931082645 170:0.0314832493043156 172:0.0497035319349502 183:0.0278790533961595 203:0.0240244579786811 204:0.0190242324775205 220:0.076267248205464 278:0.0820754578753989 281:0.109741977579878 304:0.0239958081428612 309:0.023321849357724 322:0.027464397344682 330:0.0315171488299231 338:0.0415229813686046 351:0.0449789958204575 377:0.0487815615632223 389:0.0270077416241652 416:0.0308316173610483 437:0.0285045449989479 439:0.0341555423506254 442:0.0539347850310892 465:0.0269472879579064 499:0.047208634898903 505:0.0227954836453631 513:0.0948575398439343 527:0.0302254334811318 534:0.0241545634081095 574:0.0237282418839239 655:0.0239958081428612 686:0.0374765467868776 710:0.0365200650992639 778:0.0302841851729279 780:0.192906534270555 796:0.0278567293343339 909:0.027901434920241 916:0.0384001720137319 930:0.0277459607369474 947:0.0771027939918423 989:0.191627672485232 1027:0.0331160712879876 1105:0.039778106064851 1118:0.0408022551547051 1154:0.0430441352875961 1196:0.039778106064851 1331:0.035824076362376 1363:0.0358799943512613 1379:0.0334489432191264 1446:0.033075344200393 1472:0.0322244668417751 1526:0.204302615809295 1626:0.0455455934222664 1660:0.044578462355116 1822:0.045048588593129 1836:0.0675901344328966 1947:0.0439887301417731 2040:0.0431729556778875 2050:0.0408022551547051 2095:0.0470292193705969 2109:0.0528563858730947 2150:0.0474433556063633 2206:0.0409016301484022 2241:0.0442785975601647 2723:0.123932677149929 2789:0.200638085493323 3095:0.0501595213733307 4207:0.0524698681379589 4331:0.312598818253068 5242:0.0641539337605676 5599:0.0561865867325255 5794:0.0641539337605676 5802:0.577385403845108 6750:0.280723996479049 7871:0.147413212688574 7872:0.368533031721434
+1 6:0.0365617329061732 11:0.0821481353002977 26:0.118686944654986 27:0.0266147493855955 37:0.0432477385079347 41:0.042088356998558 64:0.0792773209744426 67:0.0517039409776467 72:0.0568830694308124 75:0.0185246402444495 85:0.112030347446478 87:0.0851525286811084 100:0.169447760815254 142:0.0165917322090353 151:0.144371782463668 276:0.0710065206697056 288:0.0949350216855754 291:0.0735702784405704 294:0.174697823518544 296:0.0824245904023441 306:0.0717257006476608 345:0.0670772496469444 367:0.0780155618600578 377:0.0703505194565127 424:0.188284739573351 434:0.316372545707707 459:0.0834950096160116 491:0.109085317433105 500:0.094592241636629 507:0.0488734238978511 539:0.169839897617466 749:0.106402490567108 771:0.0969712450424275 776:0.113983599060916 1011:0.109699544455332 1081:0.101618788608338 1230:0.255426209357919 1245:0.0893847121551376 1388:0.118262832968135 1591:0.216971549088344 1608:0.0990515817625203 4288:0.146405818510334 6473:0.568836776853527 7610:0.19520862851874 8766:0.189612258951176
+1 6:0.0140222670611707 26:0.0202307458565735 29:0.0169753800915261 37:0.0221153390333438 38:0.038081100487407 60:0.0354768223121725 72:0.0290879571769711 75:0.00947283519580012 83:0.0121108601233245 114:0.0328205159978087 132:0.0283484596675915 142:0.00242411871439537 154:0.0675764240844021 162:0.0253148864822601 252:0.0337324921201995 274:0.0505135158081581 275:0.0314313654720076 303:0.0417619111273051 314:0.0372990090294841 327:0.0393086429416677 373:0.0333670871025226 398:0.0363555802472085 415:0.0406662387073966 437:0.0840844936944451 448:0.0423288475682307 465:0.0794907992554381 493:0.0417272961304742 506:0.026148994062558 513:0.0349770896675085 583:0.147122651460398 609:0.0661994147994658 643:0.0380291779527593 644:0.133611991298544 655:0.0353921695392085 720:0.0465358258286557 772:0.0866143387955856 796:0.0821735264375248 869:0.0625771990160814 880:0.164941489223088 882:0.0351002091590582 1296:0.0475833342054778 1382:0.0612435466903937 1433:0.0450644531982648 1509:0.0590646172763619 1561:0.0622305603864629 1595:0.0585410813795296 1873:0.061893044893306 2143:0.0735613257301988 2684:0.0805331114968315 2706:0.0727595116212321 2838:0.140584742469263 2907:0.139333289537811 2913:0.0687818216417298 2934:0.406330797485643 3051:0.0702923712346313 3191:0.0805331114968315 3439:0.0847066044940034 4080:0.0857331400966663 4293:0.0748666733687402 4683:0.0857331400966663 5954:0.625958333725197 6627:0.0969608940549357 6659:0.0998226763032693 8189:0.387843576219743 8363:0.103512155310203
+1 6:0.0268973392157489 12:0.0604402603126648 26:0.0776127328795058 27:0.0261062003161832 29:0.130247856397603 30:0.0538918850860556 31:0.0341727516631585 41:0.0412841414684921 63:0.0387590332322601 64:0.155525012984664 75:0.0363413505797328 88:0.0684619034865954 108:0.08299638929143 111:0.0560699157391653 142:0.0139497435919382 199:0.0419094340764879 229:0.0469525901914183 242:0.0628238244289638 265:0.0846989876091151 303:0.0801071813130414 308:0.0662455726485608 317:0.0534379890766579 327:0.0754013526272493 387:0.0632892525299201 415:0.078005476031074 437:0.0806449178231232 539:0.083297316173139 582:0.0756219860866237 733:0.202392215537881 808:0.0935766003320053 882:0.0673287870054378 890:0.282474596148144 994:0.102648360144995 1149:0.0860157147601908 1245:0.175353535509099 1281:0.11600309146989 5035:0.157375135789794 5640:0.343058723542729 7836:0.417060732727057 8118:0.557967562594725 8417:0.191478622838951
+1 6:0.0110085350556687 11:0.19787478444348 20:0.0413990315838547 23:0.0263956226596146 40:0.0229278141853093 68:0.0225270260919799 75:0.00743688861969453 83:0.00950793674377406 85:0.0224878109639612 91:0.0586420645494363 92:0.0484483953279102 98:0.071408869601043 132:0.044511349079788 142:0.00761246258685817 162:0.0198740912617426 172:0.0863299740125443 180:0.028277587352788 218:0.0208148677897067 237:0.0315340487378591 274:0.0396569119054246 284:0.0222844005833192 293:0.0347313838871922 304:0.0277855169473585 346:0.0305722366321434 377:0.028242868451521 399:0.0346001967362833 404:0.0308153948500654 408:0.0216076632648354 411:0.0274917643697026 448:0.0332313313024306 457:0.0253031187914041 465:0.031203130220997 502:0.0253290350769891 540:0.0414818486197305 575:0.0382990033654335 587:0.0464756001560484 663:0.0343428416037117 695:0.0362231058982991 697:0.0393389337507614 797:0.108450348579683 804:0.0345676652979961 819:0.0368550605082622 837:0.0398197478760454 852:0.0364163646413588 853:0.0388303169629873 909:0.032307967634031 953:0.0400971337772402 1003:0.0387808403455353 1005:0.0386826105772148 1064:0.0679987751477872 1093:0.0465821458210966 1129:0.0427894921613924 1190:0.0794217969530848 1239:0.0491278112197483 1471:0.0424997319801651 1477:0.303782727735856 1892:0.0487223146184843 1939:0.050296480555268 2067:0.0457597729025772 2311:0.0544566435963741 2523:0.0571216930059521 3523:0.0577511774315577 3716:0.0673069678440363 6176:0.297143601604313 7370:0.0812648329581201 9260:0.461630896780468 9262:0.646283255492655 9389:0.170694493598103
+1 6:0.0162076768473762 27:0.0235964339284806 31:0.0308874928947143 63:0.0175164320299394 64:0.0702866684671031 80:0.0527648949999428 142:0.0105072166445701 144:0.0963580317399324 165:0.0786828078325922 172:0.0635510680559263 174:0.0594031028931996 176:0.0420057476288869 186:0.0459863661586357 192:0.0654454875393568 373:0.0578511623052903 414:0.0598769357135105 658:0.0749499000892401 683:0.0980062605727571 755:0.0845804460336274 868:0.115614118349877 909:0.0713496977154411 960:0.0933893046300072 1124:0.0900944433685575 1196:0.101720784308514 2024:0.0789231934810805 3904:0.138424426052647 5059:0.672435133699647 6751:0.179467224064884 9263:0.611686107547672
+1 6:0.0171621010778119 15:0.117597816408427 28:0.126733448087451 29:0.0623294053010407 63:0.0370958502999902 75:0.0347819124570724 80:0.111744140739794 142:0.00890076552234674 176:0.0889586945056498 186:0.0973887462895142 199:0.080222129553258 242:0.120256001862811 337:0.13120710911224 345:0.125944417505234 351:0.121793760644329 413:0.148390764579422 427:0.182308322336879 467:0.215421666961436 1829:0.282150849550521 1852:0.293151697670752 2577:0.493311956168881 2796:0.295697705711204 3374:0.288438799833288 3576:0.274891943672605 5060:0.328337783256538
+1 6:0.0100544362787184 26:0.130555116215277 27:0.0585522141323555 31:0.038322127476221 64:0.174409407591391 81:0.0612171965138474 94:0.06035867475666 97:0.0627381547738956 132:0.06098039213293 134:0.0720094296084299 142:0.0338944029002178 165:0.292865393985758 166:0.150040933351017 176:0.0521165515393334 178:0.0811437812325297 192:0.0811982482610577 198:0.0875457160609736 204:0.24143469902664 226:0.0779610223388699 251:0.11365997425491 252:0.0725619882431341 317:0.0599266178402712 355:0.0605127954982189 356:0.0958970150844408 834:0.101319730105161 1038:0.133498800305214 2532:0.147350282384505 6639:0.429457262659736 7425:0.644185893989605 7428:0.214728631329868
+1 6:0.0421623287866881 26:0.0456225456278093 27:0.061383294771639 28:0.0778368756003014 31:0.0803501108201242 63:0.0227834492682256 64:0.0914211719895776 75:0.0213622799183493 80:0.0686307751669794 81:0.0641771327418746 94:0.0632771002688041 97:0.131543262880188 134:0.0754911852521951 142:0.0218666118271252 176:0.109272917959645 192:0.0851242960118051 198:0.0917786726701323 199:0.0492706543746796 204:0.253108401075216 226:0.08173054573321 265:0.0995760175801378 317:0.0628241528021742 322:0.0913501991029191 355:0.0634386729616513 387:0.0744057502981876 389:0.0898313020935598 436:0.0931035502712728 506:0.0589688429283853 834:0.106218679368288 984:0.120874202111606 994:0.120678123822939 1031:0.129524161491915 1308:0.369370934930153 1688:0.141921856111895 1792:0.124428592794045 2540:0.169884345150578 3467:0.457942943956215 6749:0.466862473796351 7657:0.218657425904895 7665:0.218657425904895
+1 6:0.0126853616339453 26:0.027452871157945 27:0.0369367307200145 31:0.0483498062091234 63:0.0274193861253072 75:0.0385635595406752 81:0.0772357847289908 134:0.0454260005392116 142:0.00986849707020104 158:0.0455248823982545 176:0.0328768955843869 179:0.0345751915802483 180:0.0488772693039954 215:0.0404071024740537 229:0.033215771722868 252:0.045774573343836 255:0.0590346265415262 264:0.0522133114857133 308:0.0468642477395729 317:0.0756075027709038 345:0.0465458883672471 387:0.0447728518485227 586:0.0466249338946866 850:0.0581419611132713 994:0.0726167498832912 1126:0.067639594727247 5004:0.23570616101957 7993:0.263149460797996 9264:0.638336145993989 9265:0.638336145993989
+1 6:0.0121919244591021 15:0.0626559513768039 26:0.105540020379863 27:0.0887499000224707 28:0.0450156020675511 29:0.0221393463878821 34:0.0485817709317145 64:0.105743686834625 94:0.0365952094520864 97:0.0380378781317558 132:0.0369721540701769 134:0.0436590128870414 142:0.0411000665070106 176:0.0631960899470185 192:0.0492301548076656 205:0.0482355905506633 226:0.0472674384103327 242:0.0854296384701145 308:0.225206574617699 355:0.0366886522064377 389:0.0519523698384163 895:0.0633912213962932 997:0.0579738509979685 5390:0.120828810890118 7243:0.740443004757444 8374:0.540003569737521 8975:0.13500089243438
+1 6:0.0184754818179834 26:0.026655659573935 27:0.071728229384989 28:0.045477367160233 29:0.0223664493670087 37:0.0291387649676507 47:0.0291486380530285 64:0.0534141969692926 103:0.0586249604185072 142:0.00798493585899259 150:0.0537073505324019 158:0.0442028726383363 168:0.0914778960104166 176:0.0319221742419318 284:0.0373996209050328 286:0.103522783332491 288:0.0639637904670383 295:0.0522899392385843 308:0.0910066875517379 323:0.0526829286985464 442:0.0524068793948693 485:0.0426186213069629 829:0.0456863068874222 987:0.0502780997537204 1005:0.0649205243729004 1126:0.131350779333449 1816:0.0676763874447466 2570:0.0934826817761289 6498:0.511015580391556 6756:0.127753895097889 7614:0.131524526884137 9268:0.774749155719418
+1 6:0.0151214799463273 15:0.0518075559189816 26:0.0327249669866024 28:0.055832245862394 31:0.0288174924017788 41:0.0348144464574928 63:0.0326850514316386 75:0.0306462471774224 80:0.0492287271720172 134:0.054149686545586 142:0.0137242699364176 158:0.054267557844152 174:0.0554220594109731 179:0.0824301397481789 199:0.035341748594512 255:0.0703717361117888 279:0.0856034944421935 308:0.0558641371718832 312:0.0685292277162894 345:0.0554846395270177 373:0.0539741258978021 405:0.0719041877447549 408:0.044520889259187 436:0.0667830031629294 613:0.0699269501638759 731:0.0871305931418988 1033:0.0905700020021774 1080:0.0764471069014555 1273:0.101510134312602 1277:0.0892523978077291 1918:0.109493873525986 2057:0.239343979102609 2210:0.116474088572644 2657:0.121857724291572 3050:0.117694751970425 3121:0.134051530722008 3170:0.117075443510811 3669:0.131454984681515 3793:0.254142631350699 3884:0.132712660208181 5079:0.142463023084445 5753:0.294184402757768 5974:0.147092201378884 8115:0.313685128510297 8415:0.645886970198351
+1 4:0.044023791897691 6:0.0203554237763979 15:0.0348697600794833 26:0.176207771579319 27:0.0889051682265778 41:0.0468646464300011 42:0.0608920541941015 63:0.0219991057557153 64:0.176547809528999 94:0.0610987214596078 97:0.063507375847364 134:0.0728923240917451 142:0.0527845784500003 143:0.0896810430606272 178:0.0821386703351806 192:0.0821938051740116 198:0.0886190981189681 199:0.0475744617718408 203:0.231472728478053 204:0.0610987214596078 208:0.0762508151097743 226:0.0789168882151987 265:0.0961480114660891 317:0.0606613671721658 322:0.0882053751919573 387:0.0718442563447134 436:0.089898365455434 441:0.0717681642355181 599:0.0954296236379961 1045:0.0528711779658769 1607:0.131683587768746 2010:0.149156917323008 3937:0.535944057450555 5867:0.652084139748883
+1 6:0.00677941109012672 15:0.023226874644291 31:0.0516789701197764 60:0.102912872038333 68:0.0416186085823205 159:0.040784640566181 179:0.036955893573448 180:0.104485504201289 205:0.0536435242221081 229:0.0710057395865013 256:0.0461359496206896 346:0.0564821092976959 365:0.0718307455609959 411:0.0507909466552883 644:0.0645980148311083 1472:0.0689370246885332 1576:0.0751486705983257 2306:0.0953656293226105 2731:0.0989539208222587 7591:0.43435562897346 9269:0.85286160384268
+1 6:0.00933657310832617 15:0.0639758853125682 28:0.0689458766134715 31:0.0355860174484033 63:0.0201809858111813 75:0.0189221510251273 80:0.0607913526854249 142:0.0024211093863938 158:0.0670136816000348 462:0.114729127907729 575:0.194893204094365 647:0.084336414414233 1133:0.108872039689042 1273:0.125352385296891 1379:0.0985472997355619 2103:0.149547466091277 2466:0.147780016695518 3557:0.313834527568777 3568:0.313834527568777 4147:0.169202897541371 5192:0.193681051439837 5193:0.387362102879674 8115:0.193681051439837 8415:0.398795021279437 8980:0.20676730833283 9683:0.434308909571057
+1 6:0.0272969428408072 15:0.0311739304543808 29:0.0660914498401627 102:0.26010051537403 252:0.196999651753785 278:0.0785524329021311 292:0.0897246558838661 373:0.0649552219643544 387:0.0642295170867717 426:0.0819120910883717 462:0.111809561900183 502:0.062806287958664 506:0.0509038654845489 730:0.0874657974137317 755:0.0949668325930239 764:0.0841536661063346 1232:0.103019620789143 1418:0.115505847549248 1471:0.105383027691301 1551:0.0974164376536181 1640:0.141639880426297 2455:0.136220659782802 4207:0.150652919995202 4977:0.184200528669067 6079:0.16489711193096 6717:0.201505603516544 7663:0.755009434997931 7983:0.194323348527014
+1 4:0.0335931055339629 6:0.0232988301200244 15:0.0532159307410994 27:0.0452270703334061 30:0.0466818619267996 31:0.0296008883758855 60:0.058946848797258 63:0.0335735859837787 80:0.101133994421795 83:0.0201229138904417 142:0.0120834519563246 154:0.112282244946044 158:0.111485614347034 174:0.0569286935626864 176:0.0402560172477152 179:0.0846709814815072 204:0.0466224218657199 227:0.0552033037223322 345:0.0569929749027753 455:0.0567052237445358 505:0.11172914927349 510:0.0702118435833223 829:0.0576135179297604 881:0.0884877392505973 965:0.0775742238133974 1059:0.0711917517693902 1061:0.10073264222273 1190:0.0840454677066293 1649:0.0882073503620743 1758:0.65262858034982 1980:0.0964337221298595 2161:0.103117528863744 2528:0.0893517460347312 2902:0.111204167356529 3057:0.139165872646521 4332:0.59432398549924 4488:0.151090864301255
+1 6:0.0553771892827256 11:0.0248846675261361 17:0.0301756543297214 26:0.0239687741877167 27:0.0483735281876504 29:0.0603357466475576 31:0.0105534096996532 37:0.0393023745490908 38:0.0676759995558313 41:0.0127495866680572 51:0.0188052253088116 53:0.0213239702613599 59:0.0171931450535034 63:0.0179546541039961 64:0.096060112264271 67:0.0313247616958395 75:0.0168346918103229 81:0.0674336419214394 82:0.062305327322356 83:0.0143485798088194 85:0.0169683580695532 94:0.0166219848840699 100:0.0342198977941625 106:0.019381271848189 137:0.0226673113133538 139:0.0679550855423745 142:0.03302825691831 144:0.0164614491417287 160:0.100385835992612 176:0.0574088503691718 178:0.0446918594724302 179:0.0301871871512491 185:0.0322474763489909 186:0.0157122808356323 194:0.0219375341402726 204:0.0332439697681398 220:0.0222122504078029 242:0.0194015853517795 275:0.0186194643230455 283:0.0207562771126188 317:0.0165030020939038 323:0.0236862497815998 331:0.0432900568413983 337:0.0846735592991175 345:0.0203193298293381 347:0.0227458771202091 355:0.0333288554170326 359:0.0308284310623296 387:0.078181285266897 390:0.0505853370083363 398:0.0215364944917641 431:0.0308743360105529 440:0.0312519166095497 442:0.0235621379882645 455:0.14151717863369 457:0.0190926711638168 475:0.0897454968279146 478:0.021713658027567 480:0.0407307477686309 485:0.0383226724315344 493:0.0247186175316008 502:0.0382244530098022 505:0.0597510861517297 509:0.0257009769802279 513:0.0414397951478207 515:0.0200046060076803 534:0.0211044933521141 546:0.0239222644494054 550:0.0676759995558313 555:0.0319085656024494 557:0.0260588412117072 572:0.0300051324486883 582:0.0700619437387016 591:0.0582297401099405 593:0.0800069439423358 599:0.0259617504869051 609:0.019607764784557 612:0.0322319014550501 625:0.0307828018211636 634:0.0311081158656298 641:0.284819420277995 667:0.0266689813141119 673:0.0279961083440571 688:0.0614748899900015 695:0.0273324349915033 696:0.0305586780219879 712:0.0254263478325803 719:0.0298025272201065 738:0.0335512657087297 741:0.0335512657087297 749:0.0966957043651504 771:0.0293749478750193 778:0.0264601091668529 792:0.0303840210008289 800:0.0732524950871626 801:0.0334860528978792 833:0.0360034545128204 858:0.0277785854249945 863:0.0292623940265151 872:0.0315984308753538 876:0.0267221091237413 882:0.0831713267755499 912:0.0526648427150683 953:0.0302556137894153 963:0.164444817556777 981:0.0328629788245151 986:0.0247596838251954 987:0.0452100769160039 1000:0.0336170431396849 1009:0.222099948230377 1189:0.0754427509784085 1213:0.0704603727285373 1232:0.0313493185310837 1236:0.0305146358939121 1250:0.0373885961974552 1259:0.0438257263227236 1265:0.0355641850197658 1272:0.45485678808459 1338:0.0349889836988147 1340:0.0371745751202691 1379:0.0876757308185863 1411:0.0350685367379262 1418:0.0351489316237687 1430:0.0416401349012691 1431:0.388113745474564 1446:0.0288988200698227 1464:0.0353953503867957 1469:0.0626986370621675 1472:0.0281553855785833 1492:0.0399448584895387 1500:0.0315984308753538 1507:0.0379516126788792 1598:0.0289701562354147 1610:0.0383106044606338 1665:0.02984261832009 1746:0.0646856242457607 1802:0.0412694640306401 1907:0.0416401349012691 1951:0.0345284035443348 1979:0.0409160400364682 1993:0.040578329069235 2042:0.0355641850197658 2185:0.0346032538622707 2229:0.236160999250342 2237:0.0399448584895387 2246:0.0350685367379262 2387:0.0376088216407 2412:0.0814906164527168 2593:0.0433354113129996 2625:0.0876514526454472 2646:0.0412694640306401 2789:0.0438257263227236 2858:0.249840809407615 3130:0.0591334398664586 3350:0.0443498821270053 3501:0.0481408406763394 3820:0.0443498821270053 4075:0.0481408406763394 4305:0.047295832185296 4323:0.0529726036737282 4358:0.0613190312879131 4440:0.0529726036737282 4474:0.0521721539369085 4479:0.0529726036737282 4549:0.050178908126249 4803:0.0465354735484598 4893:0.0507870122522737 5034:0.0514480590721076 5545:0.0529726036737282 5812:0.0613190312879131 5893:0.107734860697278 5935:0.0548819011626447 7338:0.0591334398664586 7695:0.0574381634547282 8120:0.0574381634547282 8180:0.0591334398664586
+1 6:0.0212569892227174 11:0.286565524324465 29:0.0257337469100361 37:0.0335256432813428 63:0.0153156478619025 75:0.0143602995711943 142:0.00183741563192664 179:0.193126664682018 199:0.0662421201850678 240:0.063787525498012 254:0.0683833413491595 279:0.0802246237468583 284:0.0430301816398732 351:0.0502846095916521 355:0.042645183548308 373:0.0505826773828812 490:0.0733278978208391 513:0.0530233531326122 587:0.358969227654946 643:0.115300303776003 916:0.17171905443781 1056:0.0695790528666094 1341:0.081387601070627 2907:0.73927573722755 3090:0.129966746968547 3698:0.107556619015568 4300:0.256821150384179 5530:0.131658401999187
+1 6:0.0253656652082011 28:0.187312625668155 29:0.0921231509081663 80:0.165158359698059 102:0.241698223567922 142:0.00657768641825676 143:0.223509894835575 176:0.131481364196501 179:0.138273193850009 220:0.203487578428186 296:0.228736922337284 345:0.186146434798121 394:0.236307238467031 427:0.269452548268971 467:0.318394225623163 795:0.300513578597376 2280:0.344536366315914 6671:0.465262454235046
+1 6:0.0303093729297213 15:0.0519213244503619 27:0.0441268124040632 28:0.111909705091941 29:0.165116600338586 80:0.0986736652766961 88:0.347159548542807 102:0.144402315776895 134:0.108537196713758 142:0.00392983091571455 172:0.118844485852456 176:0.0785533844279354 179:0.0826111549644785 199:0.070838716973578 242:0.106189912032668 413:0.131033811145039 427:0.160984104010556 467:0.190224250849967 496:0.127079850494818 645:0.385647906919426 733:0.342099701178901 952:0.141181478149726 963:0.128578452253576 1313:0.396116535684637 1462:0.372445851739328 2946:0.234665078476234
+1 6:0.0123664636150331 27:0.0720163523419034 28:0.182640175288021 60:0.0938627463847167 88:0.0944292256968493 134:0.0885680675182959 142:0.00641360824522517 159:0.0743961041613798 172:0.193957956642586 205:0.195704518181814 242:0.0866526461290024 365:0.131027944700747 2024:0.120436853443805 2617:0.221597783022387 3416:0.195737362980039 7160:0.256534131716503 7904:0.575250176438458 7906:0.575250176438458
+1 6:0.0122040824324573 15:0.0418122885659055 60:0.0926302563024881 81:0.148610959745255 142:0.00632939263404818 159:0.0734192260700493 365:0.129307446968063 413:0.10552164417001 427:0.129640641541188 467:0.153187757688577 499:0.181803148493584 546:0.105440269213034 1448:0.153187757688577 1916:0.14905631513708 2134:0.498784552158039 2448:0.180342387139011 4184:0.447699778232196 9677:0.567696698998594
+1 6:0.0102994336298747 15:0.0176433948795856 26:0.0445787881496632 31:0.0196279630978599 42:0.0308101505352135 63:0.0111311035396031 67:0.0291299818785296 75:0.0104367756968543 106:0.0360466332164047 134:0.0737640898423093 142:0.00400618971433838 174:0.0377486743731675 176:0.0266932401139912 185:0.0299880462234828 192:0.041588406631856 232:0.0457092811110473 252:0.0371650563614278 255:0.0479310906124941 267:0.0551344232900148 278:0.0444580318311992 296:0.0464379847912088 405:0.0489748630435492 448:0.0466361631385531 613:0.0476281412076548 653:0.0526068806697554 912:0.0489748630435492 1014:0.063151405998139 1080:0.0520691034556252 1676:0.0699474941583964 1734:0.0712527185062037 1838:0.0789339419993694 2316:0.0852644795986719 2467:0.102073165111384 2902:0.0737380333145792 2932:0.175928136068871 4268:0.266184094884762 5219:0.447678367080828 6730:0.570226930238114 8183:0.534137394824774
+1 6:0.0094654502108415 27:0.0275611208943374 31:0.0721544559126545 83:0.0245255798526112 96:0.0586457498462863 142:0.0024545290960636 171:0.0818422748768879 286:0.0530373043028105 317:0.0564161333114057 365:0.100290473121688 381:0.0909885574439015 413:0.0818422748768879 475:0.0766995890252638 484:0.209234855319516 490:0.097955767670107 530:0.0778116873208495 631:0.0635261750830067 667:0.0911689156030651 726:0.0872301141376372 1010:0.210776301996148 2238:0.437449121442089 3471:0.164571274357576 6831:0.181088837879579 8695:0.41924282915083 9938:0.628864243726246
+1 6:0.0256554102201631 15:0.0292992507859288 26:0.185072813741905 27:0.0249008005226505 28:0.0631507487449168 29:0.0310584827682587 31:0.0162974477742534 37:0.0404626507670472 41:0.0393779316409575 63:0.0646964763441951 67:0.0725614302355268 68:0.0262496368730034 75:0.034663363896303 88:0.0326504083603444 94:0.0256690433009022 96:0.0264925023191577 97:0.0266809769764227 142:0.0188496609726337 154:0.0309097821617209 158:0.0306904805411435 172:0.0335320259293924 176:0.0443277465434823 185:0.0248996095388215 192:0.0345315956484038 204:0.0256690433009022 229:0.0223923257352298 232:0.0379532312136446 239:0.036251590870547 252:0.0308588090398232 286:0.0239589554388323 312:0.0387560268653772 313:0.0484881469691646 317:0.0509706004785603 345:0.156893945239494 351:0.0303446615444457 365:0.0453049982092436 373:0.0305245330064218 389:0.0364410438123826 457:0.0294844813210961 475:0.0346481040050835 480:0.0314498940843434 500:0.0442503234927861 505:0.184545134459194 530:0.0351504808482846 543:0.0473284584676407 709:0.0372895311559799 772:0.0396178161322834 829:0.031720443239001 834:0.0430887614711611 847:0.0455990560860185 886:0.0368293821751692 903:0.0476078120246767 1019:0.0614538227023295 1031:0.10508576706977 1154:0.0580786517328767 1910:0.104659126403538 2202:0.0599448456705229 2206:0.0551878093687836 2280:0.0580786517328767 3905:0.0847531692036304 4225:0.847531692036304 4640:0.156859006396577 4695:0.0865617104694806 5803:0.0865617104694806 5863:0.0913187467712199 6255:0.0913187467712199 6727:0.0946939177406726 6761:0.0887007607771759
+1 6:0.0226212078458163 12:0.152494454543016 15:0.0775023010040545 27:0.0329337659766238 28:0.0835230971197821 31:0.0431099659246118 63:0.0244478498305277 68:0.0694354703143359 75:0.0229228597186055 80:0.147288925858564 117:0.116771249543142 142:0.00586600865345655 158:0.162364756576036 172:0.0886988266643198 176:0.0586278191982699 179:0.12331262089569 186:0.0641836061234599 204:0.0678996857267104 205:0.357990183772056 268:0.326499127099376 295:0.0960349718140853 346:0.282700115911412 387:0.0798413176337941 424:0.116494156308577 451:0.128462896792893 641:0.178995091886028 1080:0.343086635812227 1703:0.17336692212648 2142:0.441215040841353 2223:0.143581011986769 2301:0.20053642561943 3219:0.17336692212648 3683:0.178007525262933
+1 6:0.0209156076781884 15:0.0119431267994639 26:0.0150880860251531 27:0.0406008222152901 28:0.0257418664133162 29:0.0126602349189906 31:0.0132865162114676 59:0.0216458004550885 64:0.0302344046899976 67:0.0394372023769541 80:0.0453945313854268 94:0.0209267220655921 97:0.0217517023552036 102:0.0332159317143087 111:0.0218002299547682 132:0.0211422752862186 134:0.0748983303026126 142:0.00994348976380082 153:0.0604688093799952 158:0.075061366582532 176:0.0542073824588268 185:0.020299440156477 186:0.0197814242015661 192:0.0563038595669169 198:0.0303526357301124 215:0.0222077259113665 218:0.0197735487220295 226:0.0270295637373139 232:0.0309414227787437 258:0.0330567804657813 274:0.0376729695162859 275:0.0468830115796828 278:0.03009442995741 294:0.266501674365318 308:0.0515131402708767 317:0.0415538505750884 322:0.0604218657031521 355:0.0629404700107423 365:0.0369349607070733 377:0.0268299439140414 389:0.0594172199331628 506:0.0195019142983746 527:0.0332480822298132 586:0.0256250433505757 594:0.0667555520095993 626:0.0329002341012679 644:0.0332159317143087 713:0.0348576339622155 827:0.0297755747863686 927:0.0895490906277016 1011:0.0418366864647222 1045:0.0362174664261612 1126:0.0371746917865035 1446:0.0363829939590618 1489:0.0408606088837893 1709:0.0444574520971952 1751:0.0949808035923483 1865:0.0413737847137108 1979:0.103024831732148 2201:0.540554199275042 2532:0.10217449001916 2650:0.0606082847424075 3473:0.0590538286656443 3482:0.0531697199161192 3767:0.0558355493273895 5082:0.705695508509038 5879:0.0744477310921958
+1 6:0.0144107949053031 31:0.0549262339613827 42:0.0862180924350257 80:0.140745170428381 96:0.178571933564142 114:0.0505948563096851 179:0.0392780284119939 245:0.0833121086953741 256:0.0490349160794678 284:0.0437573107733984 413:0.0623009054806184 478:0.113010817823058 515:0.10411589250811 586:0.10593349708402 671:0.0440036137855389 737:0.0849061825409151 757:0.0684590160984747 784:0.0707548079876504 884:0.074388889376365 993:0.0791809287308093 1182:0.107871859576545 1202:0.0892801033409698 1273:0.0967393225782755 1294:0.0818370297130653 1311:0.176008315141164 2008:0.3832539783474 2335:0.106475729256025 2604:0.107395443810085 2709:0.107871859576545 2775:0.106475729256025 3614:0.11471784383274 3781:0.132162940535686 4084:0.357901892189427 4139:0.24615569924223 4933:0.142819061767495 5114:0.133883181354482 5153:0.114047600066572 6259:0.149471218023983 7206:0.149471218023983 7667:0.159570392634143 7907:0.502759675479292
+1 6:0.0150854153492762 15:0.0258419976762429 26:0.0652938364546982 27:0.0219625557644622 28:0.0556990864456812 29:0.02739364379619 63:0.0163035489353169 64:0.0654198376070642 75:0.0152865780733415 80:0.0491113170894657 94:0.0452802948566773 97:0.0470653499000555 132:0.0457466991677149 134:0.0540205400180871 142:0.00782373581313487 176:0.0781943218643597 192:0.0609138725780372 199:0.035257458834074 204:0.135840884570032 226:0.0584853476830606 265:0.0712553422569712 317:0.0449561713624517 337:0.057665251147335 387:0.159731449365825 436:0.0666237262860969 496:0.126498976516825 625:0.0838560709023856 852:0.0748540995710473 994:0.0863557433295853 1614:0.0953142184683471 2578:0.113956730521865 2718:0.146741387768647 3117:0.393424397087871 4166:0.127778003932716 6880:0.526295639852693 7373:0.144303771805923 7709:0.167040448923973 9272:0.569331378126068
+1 6:0.0133482772064687 15:0.0457324031940508 31:0.0508764854153943 102:0.25437967914617 111:0.0834770427170911 118:0.17481268409635 220:0.321246288946637 280:0.419502501989271 513:0.0998876758060627 795:0.316280966298394 991:0.141795110783089 1150:0.145653964984722 2340:0.370571028744873 8412:0.570147786648869
+1 6:0.029519651556853 15:0.00919427201431226 26:0.0116153809148897 27:0.0234420397011651 28:0.0198170651567345 29:0.0682243033129845 31:0.0102284641385777 37:0.0253948212048495 42:0.0481670744359572 57:0.0200351685881485 58:0.018001829504258 60:0.0203688389803902 63:0.0116012133108239 64:0.0232755915245842 75:0.00543878065214488 80:0.0349464320799628 81:0.0163393303149645 83:0.0139067787749065 84:0.0157499500651132 96:0.0332539933449923 140:0.018963627998914 142:0.00417538667880591 154:0.0581979956773132 158:0.0192616956936488 183:0.0236086628782518 185:0.0312545579848119 198:0.0233666102637806 208:0.020105407488731 219:0.0224385318200111 220:0.0215283224284174 229:0.0140536790750748 284:0.0651885340416358 295:0.0227856887423076 306:0.0210584576972241 312:0.0486474491512124 333:0.0270732377993848 346:0.0223582330717394 351:0.0190446557463418 355:0.0161513203843571 381:0.0257966936362871 388:0.0279065014589876 414:0.0198283846397379 423:0.0203323567146272 424:0.0276399267454738 430:0.0208864405497676 483:0.0260559923390867 484:0.0593213873517915 499:0.0799548485691562 506:0.0150133133365971 507:0.0143490955177579 561:0.0237810241946416 567:0.0291211668476513 582:0.0452697974338986 592:0.0264350705696322 608:0.0292830046203838 623:0.111752191037725 654:0.0280434974523904 671:0.0327777350174531 688:0.0297910213656542 693:0.0319093171688263 697:0.0287695355814592 744:0.0331128748132751 829:0.0199081120322704 873:0.031029067701931 952:0.025000535468471 963:0.022768780991495 974:0.0344691432859252 1064:0.0497291867010006 1083:0.0287695355814592 1088:0.0344691432859252 1123:0.0304796838689625 1140:0.0817719913320994 1198:0.0319679893696449 1317:0.0348077464931336 1416:0.0323923310980744 1485:0.0334652541185031 1600:0.0399987534710794 1788:0.0330443782984659 1795:0.0343055071685155 2170:0.0415546904207562 2202:0.0376220689721835 2341:0.037372440922637 2398:0.0390155187975471 2537:0.0403580111721776 2564:0.0409320671246276 2845:0.0441193848502597 2889:0.0405444343508678 3184:0.0424763069753496 3442:0.10638411165209 3525:0.0466585564734688 4159:0.0513415467061443 4385:0.0888655300115781 4451:0.278348046651577 4849:0.0480881897733326 7286:0.499332426063504 7618:0.0573126872052254 9273:0.540163354485205 9275:0.270081677242603 9276:0.337602096553253 9924:0.23772393203359
+1 6:0.0113155930150191 15:0.0193841217910825 26:0.0979540122169768 27:0.0494224395244591 29:0.020548013907417 63:0.0122293168720307 67:0.160019973581952 68:0.0347330491032458 75:0.0114664854805305 88:0.0432024352301493 142:0.0161386393903604 153:0.147214559293994 172:0.0443689757984693 174:0.0414730218586243 192:0.0456915885378572 373:0.0403895150586283 455:0.0413102222566504 541:0.0583419200301397 543:0.0626241680938502 742:0.0580671524566878 844:0.061997756090084 1045:0.0293911214356638 1146:0.0647755745136925 1767:0.343529437993302 2211:0.0871590206620908 2649:0.0936768160704878 2944:0.0930161222067177 3222:0.10138348374161 3924:0.0974820879486826 5871:0.120831329248355 5873:0.845819304738488 5884:0.120831329248355
+1 6:0.0220482811004366 15:0.075539402233293 26:0.0477155194917518 27:0.0320996533384883 67:0.0623593541149171 102:0.105044167597441 134:0.0789544088736885 142:0.00285872020208955 153:0.0956151975739051 162:0.0597067932116443 172:0.0864523537780724 180:0.0849530194040723 186:0.062558029593078 205:0.0872308439142763 434:0.0953930553308988 506:0.123348179521149 507:0.0589455095690323 534:0.0840269807725429 561:0.0976914947351098 587:0.139624449307321 730:0.105971784054633 768:0.137771937873182 3940:0.61451724971217 4062:0.606621428548422 4063:0.202207142849474 5800:0.22317362013558
+1 6:0.0316262802525785 15:0.0180590820531513 17:0.0287225273618332 26:0.0456290866082869 29:0.114860484219837 33:0.0875047718902269 36:0.0805472330449783 58:0.0707171847032965 60:0.0800155866395275 67:0.0298162987645796 94:0.0316430862061166 124:0.121892517164965 142:0.0013668591799839 150:0.0459680493395275 162:0.028548011921238 176:0.0273221461500475 194:0.0417622377105846 196:0.0490156637132023 199:0.0246388591952972 204:0.0316430862061166 215:0.0335800792523833 218:0.0298993843780628 220:0.126855635964312 307:0.0506190462955987 308:0.116838752856037 323:0.0450912480649096 337:0.0805960526064643 355:0.063447768270027 394:0.0491052168888446 426:0.0474517377997882 436:0.0465584493412988 440:0.0594939231553563 505:0.075831648393981 506:0.0294886486948861 507:0.0281840142362896 513:0.0788884732703014 534:0.0401763873048263 591:0.110851303193308 609:0.0373270819167704 639:0.0606438895557015 641:0.0417082720074598 653:0.053846324987868 662:0.164840801816115 667:0.0507694406316371 686:0.0623348985083097 764:0.0975005678871161 800:0.139449953361326 823:0.0600574798399694 833:0.0685393725727072 858:0.105763563066344 896:0.133519160179727 953:0.05759727265033 1010:0.058687738468558 1025:0.0642501277008258 1259:0.0834305436894408 1268:0.0713843525751828 1305:0.0958813349141866 1507:0.0722480594245903 1639:0.0711762512632053 1651:0.0722480594245903 1822:0.299718030464701 1943:0.18978249993937 2018:0.0834305436894408 2076:0.0657313345868865 2114:0.0754753381168596 2154:0.072027249156033 2753:0.0749295076161753 3013:0.201686703038297 3096:0.0885890590929129 3416:0.0834305436894408 3561:0.0866578223817101 5482:0.0916451784898595 7637:0.106707508901916 8998:0.112571666284683 9277:0.663106764024443
+1 6:0.0266124776766537 15:0.0911767518966125 31:0.0507162576653578 60:0.403982952700579 159:0.0800497507960938 180:0.307617222697298 322:0.115318826276591 336:0.243309267813599 351:0.0944299803854831 365:0.140985263124357 984:0.152589389530783 1497:0.16155258540524 1665:0.143413926229013 1743:0.394937075112752 1955:0.200108957292014 2291:0.225415687834537 2883:0.25072241837706 7028:0.263744583006274 8673:0.294679338630258 8675:0.294679338630258
+1 6:0.0475776379516608 11:0.0534495212487822 15:0.0407513210912996 26:0.102964566748427 29:0.0431981764020312 63:0.0514194889972925 75:0.0241060408432219 94:0.0714043804945287 102:0.340009728113386 118:0.155772435360865 134:0.170374473319163 142:0.0154219680618801 180:0.183318780348248 185:0.0692640225361541 264:0.0979154596380214 346:0.1981946006214 351:0.0844106939825504 527:0.113446277291292 852:0.118040543337103 909:0.209447048940592 1242:0.60396822765615 2216:0.324085416632701 3897:0.190517310680456 4031:0.235760541247772 9401:0.276645828975584
+1 6:0.0140529364899527 26:0.0304124916562957 31:0.0535622692963002 63:0.0303753966919894 75:0.0142403311966932 86:0.0545843999191521 88:0.0536534919287708 122:0.0756291584475357 142:0.00546619665172635 159:0.0422709256027265 176:0.0364212656261895 276:0.0545843999191521 312:0.0636866820060443 317:0.0418792725530278 373:0.0501601011299656 475:0.113872497278889 561:0.0622657324109436 693:0.334191999131433 697:0.0753271259236131 755:0.073335842489657 792:0.0771048012664722 844:0.0769955695381695 952:0.0654587724594668 1033:0.0841699681875794 1424:0.0653393953073271 1471:0.0813794975449159 1776:0.0813794975449159 1863:0.0846499767614012 9278:0.883941819885742
+1 6:0.0292541059109448 11:0.0657291123653435 27:0.0425904701682236 31:0.0557504938538929 37:0.0692075469161559 60:0.11102085484215 73:0.158944346123349 96:0.181251703724034 102:0.139374729042335 142:0.00379300786218792 172:0.114706733924221 341:0.122213849541776 413:0.126471669276695 455:0.106798964534753 502:0.100964152498573 505:0.315647042621202 586:0.107523206165132 1031:0.359478581696099 1155:0.170271454924005 1175:0.309959701568153 1395:0.15619001185035 1559:0.212655039061568 1858:0.188328404173139 1943:0.35109518469644 2055:0.225331471197201 2280:0.198676109371638 4111:0.247791073271056 8197:0.289924600724876
+1 6:0.0127857202937308 80:0.166498183583061 158:0.0917700936789199 159:0.076918334000865 245:0.147834359708771 337:0.0977489521855213 351:0.0907360322643272 444:0.335928492656055 896:0.161935449469051 1001:0.449605951528748 2754:0.17924594225162 2837:0.1922810184976 2889:0.193169209903197 3350:0.204793777105876 5270:0.258835187286899 7544:0.530462670012635 8303:0.283151959456471
+1 6:0.0112760264849037 15:0.038632685076731 81:0.137309881943911 159:0.0678360820855517 180:0.0868940750899526 186:0.0639873916085886 205:0.0892239446510328 245:0.130378587764997 248:0.411521270373541 413:0.0974972810104206 427:0.119782156145598 434:0.0975726509914464 467:0.141538638600592 478:0.0884276671222691 506:0.0630832550079198 507:0.0602923306391801 641:0.267671833953098 898:0.15972438295226 1124:0.125361251847883 1191:0.188073833521099 1232:0.127668359705086 1395:0.12040721501887 3446:0.684818459974408 3693:0.228272819991469
+1 6:0.0248774015103681 15:0.0213080560639897 29:0.022587468086602 31:0.0237048335065628 41:0.0286378372341332 57:0.0464322237653187 58:0.0417198873096214 81:0.0378669856468623 142:0.00161276813256373 180:0.0958537476733892 186:0.0705851495994252 199:0.0290715879988223 200:0.120165174437273 229:0.0977097200857871 237:0.0534461570771363 341:0.0519647227372791 365:0.0658966639710215 535:0.0589774975420577 586:0.0457183340279651 613:0.0575208518543437 713:0.0621904490504328 781:0.202190578006812 804:0.0585877469989604 851:0.0706377635642658 947:0.0756588907659195 1052:0.190658189419131 1149:0.0596670767820124 1411:0.0787701651266929 1581:0.0887289051213633 2589:0.100882351212513 3255:0.218334855134986 3768:0.120995820704546 4047:0.0996177161482605 6516:0.645081608867048 8966:0.550933762198758 8978:0.13773344054969
+1 6:0.0146556067494357 29:0.0354842043669984 31:0.0186197752091454 60:0.037079193703746 81:0.089231771283773 142:0.00126680409227493 158:0.0350637631518914 159:0.0293891630412919 179:0.106520765316471 204:0.0293267892443677 254:0.282880895838622 295:0.041478798441221 327:0.0821681701388115 365:0.0517607967941775 480:0.0359313903816901 499:0.0363872153010735 685:0.0516287355804121 731:0.056297475003117 814:0.0542312231400619 838:0.193034509072677 849:0.183155442674128 1377:0.0465939910358125 1411:0.0618727301940434 1509:0.0617323717935248 2970:0.0792415058147108 3523:0.384419244465214 4171:0.10433133830606 4330:0.0875391722220655 7555:0.0988964415156527 9279:0.368740119501373 9669:0.227244711473185 9918:0.649124753677108
+1 6:0.003487254294016 15:0.0358429444370931 17:0.0570073245856605 26:0.0905627878096243 28:0.0257516115908323 29:0.0379950832291502 33:0.0385946610330445 63:0.0150753876419085 75:0.0141350261276376 80:0.0227058582663735 88:0.0798850988551737 94:0.0209346443591074 102:0.0332285063717062 134:0.0749266847938036 142:0.0153730290656358 150:0.091235547493995 159:0.0209791692897111 176:0.108455807828549 180:0.0268730954904788 192:0.0563251746921495 206:0.0332606690585301 242:0.0244354264653212 255:0.0324576879781928 284:0.0211775784600158 327:0.0586549521381722 373:0.0248945874307211 430:0.0271412290517622 455:0.178234538538166 499:0.0259746610922483 507:0.0186461684175007 561:0.0309026434262131 580:0.0315538055252347 587:0.0441672489731575 631:0.0234042672990757 658:0.0322525385202982 733:0.196801935606505 772:0.0323107052059361 799:0.035180764598691 823:0.0794664574349254 847:0.0371887651238734 886:0.0300365700725479 906:0.0408049368339312 952:0.0324873574293168 963:0.0887618019902078 987:0.0284700319572391 997:0.033164503522227 1007:0.0805081720419667 1010:0.0388270260706137 1064:0.0646214104118722 1083:0.0747700933597223 1121:0.0458115793081895 1269:0.0356240113977263 1378:0.0427644897096805 1432:0.0414650875576824 1485:0.043486975444259 1731:0.0433011756194923 1775:0.0565657811664367 2443:0.0657084876286061 2592:0.0472269368490901 2679:0.0501192782177312 2694:0.0511065852650003 2975:0.0495723642039835 5679:0.0612113094517139 5772:0.0705962665827482 5978:0.550901785065426 6833:0.0744759149986583 6967:0.217022371206235 7123:0.066716618166838 7817:0.648865742177044
+1 6:0.0228607992967926 15:0.0261077209842117 20:0.0429855083957216 29:0.110701288334113 31:0.0580887507812062 37:0.0360551061262975 42:0.0455911585692406 81:0.0927931382208239 179:0.041539560225549 199:0.0356199977023665 208:0.0570905851134896 229:0.0798126336750874 306:0.059796831881972 308:0.0563039610896945 387:0.0537913021107816 391:0.0788603850420365 408:0.0448714066560309 411:0.0570905851134896 414:0.0563039610896945 442:0.0648461113718381 507:0.0407451706421423 586:0.0560164430335938 643:0.0619997751296187 886:0.0656352096424254 987:0.0622120472319772 1006:0.106830261063144 1149:0.0731071566495887 1245:0.0745189319490257 1305:0.0693070426327822 2246:0.0965132383185084 2461:0.260328736113761 3170:0.235994380284071 4187:0.135106931779207 4703:0.139772556055573 5803:0.308530617573152 7565:0.151042230414898 8881:0.488229076999311 8883:0.162743025666437 9282:0.57518559338533
+1 6:0.0188086029382119 27:0.0273830704238401 29:0.102463768599796 31:0.0358441616947448 60:0.0713796272886821 92:0.062082281573443 96:0.0582668863235423 102:0.0896094362329288 142:0.00243867233675113 159:0.0565758662654466 176:0.0487466177734395 204:0.0564557930402141 224:0.089436835659344 256:0.0639991251494295 319:0.0853121494067484 331:0.0735163251194906 373:0.201404473613455 411:0.140912940046739 437:0.084589309716836 505:0.0676472550708617 625:0.104552344436257 643:0.153029971200749 644:0.179218872465858 658:0.0869774813696009 772:0.174268686374519 780:0.0954106942969718 979:0.576589830768024 1380:0.193720189086654 1387:0.152544556282424 1550:0.449180434963472 1576:0.208490308055942 2417:0.160638078553226 2666:0.126988615602136 6186:0.186403806482894 7123:0.179918966998424
+1 6:0.0109166234035765 15:0.0561020064935459 28:0.0403068749896853 29:0.0198235239833204 80:0.0355396083638527 144:0.0324508056990599 159:0.0328369644348345 179:0.0297543228549401 205:0.0431900458747989 245:0.0631115022843427 346:0.0454754777402846 408:0.0321408872253223 413:0.0471948651898063 427:0.0579821575827498 467:0.0685136744191842 513:0.040845575895925 515:0.0394355063793193 626:0.0515155195726287 641:0.0863800917495979 719:0.117500714771101 1031:0.0670725044541513 1472:0.0555033119457656 2340:0.151532077979444 2369:0.0711537403540942 4281:0.0879725324260367 4822:0.494593757747651 6994:0.331495551086482 7065:0.108189862003666 7388:0.108189862003666 8854:0.226458152733994 9283:0.686665023019482
+1 6:0.0254826176927912 15:0.0873057495540941 27:0.0370996355847273 29:0.0462739497659442 85:0.0780823633632296 111:0.0796812027792457 142:0.00660801390082643 144:0.0757497483316384 185:0.0741957222822609 220:0.102212895340131 229:0.133449063039698 255:0.118589982864094 284:0.0773760801559137 325:0.114412229222393 351:0.0904208588970288 480:0.37485689944661 498:0.261840790815789 502:0.0879476852456197 761:0.129561094736885 912:0.121172460190003 1045:0.0661885515070511 1373:0.29563349323547 1608:0.138072973532082 2444:0.18048003844433 3749:0.461811062852831 3835:0.413346448072876 4576:0.24787880198456 5816:0.240077741431779
+1 6:0.021461191201672 26:0.04644497602488 29:0.038971431253879 31:0.122697854293855 88:0.24581364537098 102:0.204494214778904 134:0.0768520528804244 142:0.00556519944295443 176:0.111242763527663 205:0.0849081074120748 208:0.241178961489121 218:0.0608680249297647 355:0.0645822718616147 430:0.0835160067230776 593:0.103354488472478 671:0.0655321219420349 952:0.199933050659376 1082:0.147079840393289 1863:0.129274713352072 1917:0.13352609172958 2499:0.160647529776461 3131:0.184884850968753 3921:0.166159561572299 4177:0.192284251155229 4530:0.176414685546472 4650:0.178976544026013 6644:0.651693215141947 8952:0.237639264797738
+1 6:0.019155656512629 15:0.0328145045810765 26:0.0829109623142052 31:0.0365055528931772 63:0.0621073751257542 67:0.054178117665195 68:0.176394031857179 96:0.118684036676281 102:0.0912628963675435 111:0.0598975258096878 142:0.00745101107984192 153:0.0830709602154253 232:0.170027075248616 278:0.0826863706870001 286:0.0536669868284107 345:0.0702870817062274 373:0.068373586443753 427:0.101742659195553 441:0.0675380831044926 613:0.0885823770602735 644:0.0912628963675435 792:0.10510209660387 848:0.105859492409024 873:0.110743241299209 1738:0.12933179085549 2250:0.638997746017496 2526:0.143389473169619 2602:0.146087205390833 2686:0.4382616161725 3479:0.165023025342141 4061:0.175678573544127 4221:0.168118341779278 4335:0.173575065960423 6297:0.173575065960423
+1 6:0.0390153279710453 31:0.0495685131944413 40:0.0812584222674024 63:0.0843315605272873 75:0.0263570626894727 81:0.0791825927463508 84:0.0763263767694954 96:0.0805766626131184 97:0.0811499062684973 118:0.170318463774302 142:0.0236068997934531 180:0.100218543086784 229:0.068106019361784 237:0.111759761634131 255:0.121045310998594 264:0.107058804252939 328:0.131942442940258 409:0.066417550910909 434:0.112534587857173 455:0.189912788811068 507:0.0695376471837721 510:0.117574062334602 565:0.138328597681033 737:0.153248199486169 852:0.258126336122112 903:0.144798651371152 1125:0.23057991919237 1134:0.15820818670458 1190:0.140739319105804 1527:0.169105318646244 1955:0.195580351281132 1980:0.16148421517231 2369:0.169532672857561 5858:0.555489984312764 6317:0.253010970669973 7058:0.248808042033221
+1 26:0.147441117648411 63:0.0736306398024717 68:0.209121789428127 111:0.213032339831902 142:0.00883345515525687 232:0.302360282710787 441:0.240206847895952 848:0.376501283758608 2250:0.568166978273591 2686:0.51957570472601
+1 6:0.0264823197428623 15:0.0453654095304313 28:0.0977792776988822 29:0.0480893112411112 31:0.0504682114898922 60:0.100501782040645 63:0.0286207430058716 88:0.101108329180499 142:0.0103008768033554 158:0.0950390321313858 169:0.0965178368986029 180:0.102037569855533 312:0.120015562402341 345:0.0971705130706346 405:0.125926145950409 475:0.107294581634727 507:0.0707997972586693 622:0.146136828679729 628:0.143884588651329 727:0.283527712081046 909:0.116580897203831 1033:0.158615675227998 1677:0.208390826554404 1746:0.154668863319977 2054:0.206119378843913 2216:0.180390073924768 4920:0.50664811496209 5620:0.479928254416321 7450:0.293238102894406
+1 6:0.0271107367410774 15:0.0619225549661137 28:0.0667330325078888 31:0.0688877413953015 60:0.137182209684001 63:0.0195332694038974 142:0.00703020888224388 176:0.0468422783558171 180:0.0696392592218249 245:0.104488922414365 325:0.162296242549973 333:0.0911678517414665 381:0.173738298926809 413:0.0781369548922543 427:0.0959966558518206 430:0.0703341037211087 467:0.113432888642951 499:0.336555228191523 513:0.202874756087918 530:0.148577695608419 571:0.0713224666108939 704:0.124640149265696 764:0.0835796118602234 1064:0.0837303457010885 1273:0.121329152863717 2478:0.301454902002463 2935:0.1438775715978 7314:0.420369600104673 8971:0.400262066023172 9668:0.420369600104673
+1 6:0.0353257121913369 15:0.0172898686053264 27:0.0146942859511901 29:0.0733120570307392 53:0.0388651225215065 63:0.0109080661032364 64:0.0437698513318795 75:0.0102276507267128 81:0.0307261818885716 92:0.0333145547165614 96:0.0312671397279908 142:0.00392591642604257 144:0.0300026791415171 160:0.0457408701036605 174:0.0369922922652767 205:0.0399317385369737 220:0.0404841041793214 275:0.0678717662171261 293:0.0477646609783669 308:0.0372873637568338 312:0.0457408701036605 373:0.0720516942601746 387:0.142493409695509 394:0.0470136159382487 405:0.0479935382485022 419:0.0613914416331112 448:0.0914033992239351 455:0.0368470814707168 502:0.069667985433065 505:0.0363008272789936 506:0.028232601179983 513:0.0377641381024762 515:0.0364604458716488 555:0.0581566329546006 586:0.0370969545895746 593:0.0486069532827527 599:0.0473179525754038 613:0.0466738011032729 641:0.239590431221842 667:0.0486069532827527 688:0.0560221455520163 695:0.049816165645325 696:0.0556963244115913 737:0.0594667576318427 761:0.0513160774818167 800:0.0890067894385026 834:0.0508544760851302 856:0.0378748242200747 959:0.0561048130189279 964:0.060452318447551 965:0.100815535364334 986:0.0451270628154879 987:0.0412000006802478 1045:0.0262157157937171 1168:0.0656199879144371 1232:0.0571373478176387 1272:0.510168086595598 1338:0.382626064946698 1340:0.0677544753170214 1379:0.0532660034484228 1431:0.353688550613927 1464:0.0645116557851896 1469:0.228549391270555 1504:0.0705117622066583 1665:0.0543912321747389 1880:0.0705117622066583 1911:0.136687576131349 1951:0.0629315562615596 2018:0.079876880442528 2042:0.0648193742173498 2161:0.0670058195029604 2171:0.0698250052868229 2185:0.0630679786417119 2237:0.072803600843193 2722:0.0696034524070088 2858:0.303573663799825 2960:0.0794228476492437 3501:0.0877416188562503 4440:0.0965480024042839 4803:0.0848156726392788
+1 64:0.277937584955525 111:0.20040425228243 220:0.257073163428661 229:0.167817243988864 308:0.236773932663197 641:0.253565653853578 1272:0.404944504022356 1431:0.37431907501308 1469:0.362820891092033 2858:0.481921507642695
+1 6:0.0227259250688178 11:0.229776189076122 26:0.0245910172237371 27:0.0330862216960336 28:0.041954869510003 31:0.0216547644581942 56:0.052452073148039 59:0.0705579555849936 60:0.0431230343511346 64:0.197107775033016 72:0.0353571964678604 75:0.0115144866684118 79:0.0385290667697848 80:0.0369926875185342 88:0.0867665799333422 92:0.0375061689529567 94:0.0341070021667053 98:0.036853964028725 142:0.00147329083862497 144:0.0337775954833245 158:0.0815581846228928 160:0.154487864246641 162:0.0307709272765113 172:0.0445547139260778 174:0.0416466368967825 180:0.0437820060564391 203:0.0430715005875281 219:0.0475047978628004 265:0.0536724886717353 286:0.0318347721605786 351:0.0403195952771629 355:0.0341940914954136 387:0.0401054579912023 485:0.0393175508452346 490:0.0587963431887162 507:0.0303785866006258 739:0.0580391151187816 754:0.0692530188246797 804:0.0535208931565588 827:0.0485291289562906 908:0.0604309673131574 1083:0.0609082173186136 1139:0.18952384750639 1153:0.0793835033664412 1223:0.0698148435670871 1309:0.0670682800886632 1718:0.0807639577874376 1819:0.15772764720247 2652:0.0910024606777601 3364:0.214106291129309 3982:0.102963162349227 4295:0.108695605300869 4327:0.195780338099224 6678:0.125821816563043 6736:0.37746544968913 7456:0.552658595357241 7920:0.264285183147923 7922:0.264285183147923
+1 6:0.0227068121298413 11:0.0680245756719661 27:0.0220389303658886 29:0.109955619840762 37:0.0358122439422401 38:0.0616662334765836 53:0.0582910753035832 64:0.0656473345375763 68:0.0464654876173759 83:0.0196115952114919 97:0.0944580385104286 111:0.0473343862235931 142:0.00392547139403951 144:0.0449989171700063 159:0.0455343961694105 162:0.0819867955635625 172:0.059356323409187 179:0.0825195110417776 199:0.0353800663481828 205:0.0598908179634243 215:0.0482191737251101 216:0.131704900260121 309:0.1114044961464 330:0.0752760218864422 337:0.173597344707579 341:0.0632409670322908 346:0.0630599830117874 355:0.0455537781446097 366:0.0954304607224863 375:0.0536568780239316 377:0.0582552996101219 387:0.267144856877428 389:0.0645056873822872 398:0.117744060492286 422:0.0690194913687232 436:0.0668554097292813 455:0.0552643568674787 465:0.0643612989565137 493:0.0675706624176809 509:0.0702560342266481 518:0.066007627327139 550:0.0616662334765836 641:0.119781635926849 647:0.0683695218645286 667:0.0729021649813356 671:0.0924475295848884 696:0.0835350162246967 747:0.0834146229314812 768:0.094591244121628 800:0.0667475248896864 804:0.0713011747448313 1036:0.085562750960375 1043:0.084651165789406 1073:0.101333735513038 1132:0.117202377468065 1143:0.179668077743577 1167:0.0967565143594345 1188:0.0931995801032332 1266:0.103114922420442 1272:0.0956456728547972 1305:0.068840200025652 1338:0.0956456728547972 1379:0.0798899480225434 1395:0.0808223243702393 1431:0.0884121143425489 1469:0.342785225230357 1486:0.10342722582318 1665:0.0815775997823738 1816:0.0831759101317955 1951:0.0943866337481459 2185:0.094591244121628 2257:0.109193022015413 2471:0.117202377468065 2831:0.124435935980313 2858:0.341481657885193 2907:0.112813955659454 3072:0.126242969543099 3360:0.106110667271509 3501:0.131597509030823 3675:0.125319804898778 5406:0.13716875780581 5461:0.157012613983338 5740:0.135629699379373 7563:0.16164681126299 7956:0.16164681126299
+1 6:0.0227259250688178 11:0.229776189076122 26:0.0245910172237371 27:0.0330862216960336 28:0.041954869510003 31:0.0216547644581942 56:0.052452073148039 59:0.0705579555849936 60:0.0431230343511346 64:0.197107775033016 72:0.0353571964678604 75:0.0115144866684118 79:0.0385290667697848 80:0.0369926875185342 88:0.0867665799333422 92:0.0375061689529567 94:0.0341070021667053 98:0.036853964028725 142:0.00147329083862497 144:0.0337775954833245 158:0.0815581846228928 160:0.154487864246641 162:0.0307709272765113 172:0.0445547139260778 174:0.0416466368967825 180:0.0437820060564391 203:0.0430715005875281 219:0.0475047978628004 265:0.0536724886717353 286:0.0318347721605786 351:0.0403195952771629 355:0.0341940914954136 387:0.0401054579912023 485:0.0393175508452346 490:0.0587963431887162 507:0.0303785866006258 739:0.0580391151187816 754:0.0692530188246797 804:0.0535208931565588 827:0.0485291289562906 908:0.0604309673131574 1083:0.0609082173186136 1139:0.18952384750639 1153:0.0793835033664412 1223:0.0698148435670871 1309:0.0670682800886632 1718:0.0807639577874376 1819:0.15772764720247 2652:0.0910024606777601 3364:0.214106291129309 3982:0.102963162349227 4295:0.108695605300869 4327:0.195780338099224 6678:0.125821816563043 6736:0.37746544968913 7456:0.552658595357241 7920:0.264285183147923 7922:0.264285183147923
+1 6:0.0192248156528328 15:0.0439106364148417 26:0.0554735347594309 27:0.01865935081715 33:0.0354612913669193 34:0.0510707227221532 53:0.0493523780664941 63:0.0277029360709378 64:0.0555805851287311 75:0.0259749025681044 80:0.0417248932452318 88:0.0489329990306693 142:0.00664703292292626 192:0.0517523247410001 205:0.050706806752985 265:0.0605384201651214 337:0.0489923013813477 351:0.0454773881402287 398:0.0996884919043899 535:0.0607690219006682 804:0.060367432137176 993:0.140842451146094 1126:0.0683390707592683 1248:0.0825087337242514 1527:0.0833267012211273 2340:0.0889522995328109 2692:0.523182086465549 3237:0.102643744251631 4650:0.213768256244364 4822:0.116134491581897 6342:0.132935373831367 6763:0.132935373831367 8364:0.14191728733912 8705:0.709586436695602
+1 6:0.0227068121298413 11:0.0680245756719661 27:0.0220389303658886 29:0.109955619840762 37:0.0358122439422401 38:0.0616662334765836 53:0.0582910753035832 64:0.0656473345375763 68:0.0464654876173759 83:0.0196115952114919 97:0.0944580385104286 111:0.0473343862235931 142:0.00392547139403951 144:0.0449989171700063 159:0.0455343961694105 162:0.0819867955635625 172:0.059356323409187 179:0.0825195110417776 199:0.0353800663481828 205:0.0598908179634243 215:0.0482191737251101 216:0.131704900260121 309:0.1114044961464 330:0.0752760218864422 337:0.173597344707579 341:0.0632409670322908 346:0.0630599830117874 355:0.0455537781446097 366:0.0954304607224863 375:0.0536568780239316 377:0.0582552996101219 387:0.267144856877428 389:0.0645056873822872 398:0.117744060492286 422:0.0690194913687232 436:0.0668554097292813 455:0.0552643568674787 465:0.0643612989565137 493:0.0675706624176809 509:0.0702560342266481 518:0.066007627327139 550:0.0616662334765836 641:0.119781635926849 647:0.0683695218645286 667:0.0729021649813356 671:0.0924475295848884 696:0.0835350162246967 747:0.0834146229314812 768:0.094591244121628 800:0.0667475248896864 804:0.0713011747448313 1036:0.085562750960375 1043:0.084651165789406 1073:0.101333735513038 1132:0.117202377468065 1143:0.179668077743577 1167:0.0967565143594345 1188:0.0931995801032332 1266:0.103114922420442 1272:0.0956456728547972 1305:0.068840200025652 1338:0.0956456728547972 1379:0.0798899480225434 1395:0.0808223243702393 1431:0.0884121143425489 1469:0.342785225230357 1486:0.10342722582318 1665:0.0815775997823738 1816:0.0831759101317955 1951:0.0943866337481459 2185:0.094591244121628 2257:0.109193022015413 2471:0.117202377468065 2831:0.124435935980313 2858:0.341481657885193 2907:0.112813955659454 3072:0.126242969543099 3360:0.106110667271509 3501:0.131597509030823 3675:0.125319804898778 5406:0.13716875780581 5461:0.157012613983338 5740:0.135629699379373 7563:0.16164681126299 7956:0.16164681126299
+1 6:0.00644015982626265 15:0.0441291383529318 26:0.111499148734619 27:0.0562566025693668 33:0.035637748861583 63:0.0139203937641363 67:0.0728590506140859 75:0.013052077613983 88:0.049176492543807 96:0.0798034945466211 102:0.12273087866806 103:0.0613062412049264 107:0.0616042351979273 134:0.0461241409086149 142:0.0133602179080767 150:0.0561637187080732 284:0.0391101360889437 286:0.0360858394324448 327:0.0541611300070396 345:0.0472612400009633 402:0.0490874715746217 457:0.0444081237772796 477:0.0688594441040691 571:0.0508279898732678 574:0.0482210909513609 667:0.0620300539955607 726:0.0593501486137523 764:0.0595630502856755 1776:0.0745889616942217 2194:0.0982294656065435 2526:0.289246507633023 3236:0.192831005088682 4577:0.638255967185457 7783:0.13359686815699 8260:0.137539954175854 8764:0.570493904801985
+1 6:0.0541434113853191 27:0.157652628621239 29:0.098319157348967 30:0.0813618722972836 37:0.0640445600193216 40:0.253723829372263 60:0.102738532402377 63:0.0292577213357238 111:0.0846500974461148 116:0.144918928018758 126:0.12860514274233 139:0.1107351299907 142:0.0386104815961394 166:0.100996810684657 229:0.141770904509307 243:0.127630925216128 264:0.111427915306564 283:0.101469184793636 347:0.11119554803981 364:0.125414699977336 433:0.109460779888617 455:0.0988316014499663 475:0.109682511374981 586:0.0995018135674619 822:0.181219432005267 909:0.119175501584938 998:0.449470844073519 1433:0.130503677707255 1441:0.176451366561466 1951:0.168795634248847 2106:0.183854573352706 3158:0.245304727518297 6494:0.280792340079695 6497:0.280792340079695 7854:0.314823298741228
+1 6:0.0409176863842854 11:0.0334309958437336 15:0.0509773413942759 26:0.0322005503753405 27:0.0108311353975265 28:0.0274687679012243 29:0.0135095508997293 40:0.0232419607043132 42:0.0445101289451926 47:0.0176060582068078 59:0.023097916024825 63:0.0562822303154019 67:0.105207149840326 68:0.0228356811941676 75:0.0226163564914153 81:0.045296442084985 87:0.0346536634339309 94:0.0223305980274926 97:0.0464218447767657 100:0.0229861471873815 102:0.0354442333059144 103:0.0354100408953003 134:0.026640969724032 142:0.0144689345610552 148:0.0653963229119188 153:0.0967880687118647 173:0.0278034347693739 176:0.0192813007856098 179:0.0202772998097619 180:0.0286650340391974 186:0.0422169349668751 192:0.0300405111570837 198:0.0647777043570988 199:0.0173876990683613 208:0.0278684440657354 219:0.0311024270109271 226:0.0576857016387551 229:0.0584401240473795 243:0.0350742729510373 255:0.0346220155790459 274:0.0402002729397057 276:0.0288968056147503 308:0.0274844580273314 317:0.0443415041676542 319:0.0337444788687405 320:0.0353081456228077 322:0.0322376431162789 323:0.0318209964899319 325:0.0334023320258899 345:0.0272977499240686 355:0.089550469239982 389:0.0634032434740534 404:0.0312376134246595 408:0.0219037216742239 418:0.038403297552969 423:0.0281830222115001 427:0.0395143118750919 430:0.0289510471508601 436:0.0328564037733763 495:0.0409945065438782 502:0.0513521640728189 508:0.0288608040782242 515:0.268749381359378 561:0.0329632783103617 575:0.0776475179046169 584:0.0523260911951149 640:0.0347172550728109 643:0.0302648372205892 693:0.0442300421512806 696:0.0410536743908708 719:0.400378330384243 732:0.0407037055333142 781:0.120930061508264 856:0.0279174742241844 884:0.038403297552969 965:0.037155487423218 968:0.0516338649507403 991:0.0395143118750919 1017:0.0438328548731022 1021:0.0398251914925346 1038:0.0493898856922685 1045:0.0193235634754901 1114:0.0455237239313825 1144:0.0508297938277121 1272:0.0940110264590028 1315:0.0567366278846613 1321:0.0431546879478688 1338:0.0470055132295014 1416:0.0448995558966632 1448:0.0933828892049918 1491:0.042726383496128 1528:0.615350111826985 1675:0.0549681430529282 1711:0.054080067957564 1779:0.0506763108598907 1783:0.161608856246125 1785:0.056464440420331 1946:0.0518025700317824 1969:0.0508297938277121 2007:0.0502292426759314 2024:0.036226990789782 2102:0.0519741106247258 2175:0.0579043485557746 2188:0.0585424578916954 2238:0.057303797403994 2322:0.058877124759845 2388:0.0599524789632568 2421:0.0595812953297755 2427:0.0599524789632568 2571:0.0495250721060009 2659:0.0579043485557746 2666:0.0502292426759314 2983:0.0615890041991859 3018:0.0700900287131238 3046:0.171048820381231 3057:0.0666558500578381 3520:0.0711653829165356 3553:0.0595812953297755 3570:0.136458354827378 3609:0.0595812953297755 3666:0.0532631180630823 3667:0.0674122275192074 4335:0.0674122275192074 4490:0.0737304047859007 5121:0.0700900287131238 5122:0.0700900287131238 5201:0.0771645834411863 5454:0.0691172525090534 6126:0.0682291774136892 7565:0.0737304047859007
+1 6:0.0233250983792435 11:0.123872552023352 26:0.045889752802535 27:0.0123485622492693 29:0.0231033300003446 31:0.0323282856969228 38:0.0172760045546989 47:0.0200726422255486 60:0.0160945386558357 63:0.0412504018120199 75:0.00429747937674945 83:0.0109885098893644 85:0.0129948031748031 96:0.0131379034874581 97:0.0396941100064207 98:0.0687738650127581 100:0.0262064741134219 102:0.303074404454167 118:0.0277701690121205 128:0.0683789909299689 132:0.012860660854535 142:0.0192453472920326 143:0.018684492109467 146:0.0190409759066744 159:0.0127566155944471 161:0.0206934847675417 172:0.016628875411317 173:0.0158493284587467 174:0.015543512127717 179:0.0115590605120274 180:0.0163404825172478 192:0.0171245722820449 194:0.0168003254719666 199:0.0792947651143774 204:0.0127295417186306 228:0.0160370274915402 238:0.0209097983583411 243:0.019994064656539 252:0.0459095992540414 256:0.0144303974787002 289:0.018448787354866 290:0.0220504598673109 295:0.018004224424179 299:0.0175539760144037 313:0.0240457691573328 325:0.0190409759066744 327:0.0891644786793719 331:0.0165763171007512 346:0.0176664682162655 351:0.0451446862128482 355:0.0127620455205662 389:0.0180714872012338 391:0.0219441890514292 399:0.019994064656539 408:0.0499448046132986 430:0.0330070481812616 432:0.019919231915423 436:0.0749190795593448 442:0.0180444887053889 457:0.0146216565467357 459:0.0193697732939143 475:0.085911749852528 480:0.0155963248844219 485:0.0146742420020535 489:0.0241602285617428 502:0.0146366325277567 504:0.0225251057261293 505:0.0305059413464265 511:0.0275035126938559 518:0.0184922607731757 527:0.0606735515216814 531:0.0238598694644065 538:0.0371603888359328 571:0.0167354381962905 574:0.0635084007363928 587:0.026856383550474 593:0.0612713666747565 599:0.0198821734117002 609:0.0150161284332128 643:0.0172524491969602 644:0.0202049602969445 656:0.0209318787089951 658:0.0196115122656606 663:0.0198453494570403 667:0.0204237888915855 678:0.0229473340212727 713:0.0212035933933652 717:0.0644658652549249 723:0.043525523243001 730:0.0203833848027218 738:0.0256944185385134 740:0.0303626030352438 741:0.0256944185385134 750:0.0245177709963764 755:0.0221314565176006 771:0.0224960873846074 772:0.0196468811612941 774:0.118935707248692 782:0.0241602285617428 799:0.0213920524738953 800:0.0186995455859482 804:0.0399505320886782 827:0.018112221314512 853:0.0224384813158512 876:0.02046447552882 880:0.0249426433112946 882:0.015923683022325 890:0.0222690082057522 913:0.0221314565176006 933:0.0246420070066583 936:0.0248118925186156 998:0.0234706677409023 1009:0.0566966094687813 1031:0.0260565545873291 1036:0.0239706950135898 1046:0.0476467836376194 1067:0.0225542695236047 1073:0.113555959400871 1086:0.0802055021598521 1133:0.0247263297204953 1164:0.0224960873846074 1190:0.0229473340212727 1271:0.0270430786724007 1294:0.0240836726491355 1315:0.0323426748689415 1317:0.0550070253877118 1331:0.0479413900271796 1374:0.0283098299159879 1377:0.0202245171738938 1393:0.0242769849630343 1462:0.0260565545873291 1489:0.0497103009066155 1527:0.0275723675260347 1551:0.0227023224336638 1558:0.0255458615638741 1559:0.0308283047486969 1579:0.0266164251955478 1614:0.0267954597957433 1639:0.0286331445020546 1651:0.0290643169425633 1652:0.0254010034901278 1675:0.0313345513329486 1711:0.0308283047486969 1746:0.0495379076671655 1785:0.032187514596108 1872:0.0316052124789882 1875:0.0663747356347946 1910:0.0259507668472875 1917:0.0263859726781929 1979:0.0313345513329486 1999:0.0351087685783079 2076:0.0264427357178359 2081:0.0372202127703509 2107:0.027170955587316 2120:0.0313345513329486 2164:0.0273682004227666 2216:0.0577759908125227 2369:0.0276420469865777 2385:0.600697565925845 2526:0.0634908320403097 2528:0.024396132445833 2665:0.0412530577233044 2753:0.0301430235642496 2854:0.0375957085619236 3057:0.0759942410012844 3350:0.0339642755476886 3356:0.0412530577233044 3366:0.101892826643066 3523:0.0333720869958802 3751:0.0341758685172032 3785:0.0362203595490616 3973:0.0405677765388572 3999:0.0368674886924435 4140:0.0384282929411509 4152:0.0412530577233044 4162:0.0379971205006422 4189:0.0330083332172018 4475:0.39954771630624 4505:0.123759173169913 4619:0.0359219266776704 4704:0.0372202127703509 4835:0.039954771630624 5209:0.119864314891872 5454:0.0394002412388557 5491:0.155575978618416 5886:0.045285902676258 5904:0.0420299654535958 6373:0.0405677765388572 6452:0.0429268396075576 6595:0.0405677765388572 6745:0.0469596845605112 6995:0.0420299654535958 7055:0.0788004824777114 7074:0.0420299654535958 8350:0.0939193691210223 8660:0.0439876165835775 8832:0.0469596845605112 9285:0.213406370328661 9914:0.0469596845605112
+1 6:0.0160107463582248 15:0.0274271314779551 26:0.173247310403314 27:0.0116548633757056 28:0.0295578187547029 33:0.0442991302385148 37:0.0189386146875019 40:0.0250095550143478 41:0.0368618199945632 63:0.0432589989566959 64:0.0694326541544789 80:0.0781856670531296 83:0.0207424279649576 142:0.0166072788554506 154:0.0289347555505283 158:0.0287294665339301 159:0.0240799874331077 176:0.0414953590947605 192:0.032325147865119 199:0.0187100659000084 209:0.0251441754040332 256:0.0272394968217988 265:0.0378130527111938 309:0.0294570598588409 317:0.0238568789872809 320:0.0379933957226051 322:0.0346893757934916 345:0.0293737945425235 373:0.0285741224643322 387:0.0282548813099199 389:0.0341125889920757 441:0.0282249558346861 478:0.0627788942869033 485:0.0553995784201013 550:0.0326109985435751 557:0.0376708805948776 593:0.0385529042718748 599:0.0375305254243934 626:0.0377773367687715 755:0.0835527559601582 823:0.0456059834867975 836:0.0453899245329639 895:0.0416234848943966 906:0.0468360950141008 936:0.0468360950141008 987:0.0326780342101873 1242:0.0508115919460628 1248:0.10307196946796 1312:0.0520468974401764 1379:0.0422482585968017 2307:0.0561145803912761 2522:0.0702586237808863 2571:0.053291545889014 5113:0.793377391082548 7377:0.486184325602619 8114:0.0830330934331817
+1 6:0.0178881895887931 31:0.0681802005341186 60:0.135773221425527 108:0.16559130272199 142:0.0185546723477789 159:0.107614566082464 165:0.347364522908992 174:0.131124772133912 180:0.137847999154036 186:0.101509037241017 237:0.153722645058372 365:0.189532981230592 490:0.555362282099902 530:0.294103330325479 727:0.383032718933129 1424:0.166342954970331 1627:0.238821185738601 3463:0.290159343836702
+1 6:0.0235138102560889 15:0.0537069583151272 28:0.0578792040655384 29:0.0284658582493014 40:0.0979458701115032 41:0.0360908363942282 49:0.0707993687193678 50:0.0743974892877211 60:0.118981512004916 63:0.0508250581492006 67:0.133008647129538 75:0.0635396397485668 92:0.0517419606328932 97:0.0978150689756062 98:0.0508422056737422 142:0.0162599292225342 174:0.057453979090974 208:0.0587213582665953 229:0.0410462272099568 252:0.0565657047978921 279:0.0887419455730712 296:0.0706792238807087 331:0.061271569017767 345:0.0575188535600383 346:0.0653011293180467 355:0.094345510907947 367:0.133796949089346 402:0.0597414517493757 408:0.0923062862619809 418:0.0809192572397401 441:0.0552692332290818 455:0.114456894598507 553:0.100195232456181 663:0.0733549974670579 758:0.0821088251577684 795:0.0928580584360462 865:0.116317309999321 913:0.0818052078299363 927:0.10067316035101 963:0.0665002063074131 965:0.0782900072713903 1080:0.079249860581905 1096:0.102698738371312 1314:0.0913967203219548 1416:0.094607467198381 1527:0.101916620536785 1573:0.10116195116825 1676:0.106461006474419 1916:0.0957297672316523 2163:0.0990449117411786 2218:0.116317309999321 2227:0.103787875915073 2340:0.108797271756887 2571:0.104353852531404 2775:0.11582290040473 2825:0.211675208538794 2907:0.116823353822048 3666:0.112230256945839 7929:0.729193832590506
+1 6:0.014819566767916 15:0.0253865870519627 31:0.0847263801389624 63:0.0160162333225057 75:0.0150171844238757 97:0.0462359225218595 142:0.00192146474877888 179:0.0403921760311392 180:0.114200915478149 229:0.077608090490331 308:0.0547487622699139 345:0.0543768416175496 351:0.0525847843338288 380:0.0910524638711997 502:0.102292991190605 557:0.0697364279829713 654:0.154863525509878 1305:0.134785358873356 1549:0.117282636732633 1776:0.0858189957855846 1917:0.0922035880045296 2008:0.131375078162151 2767:0.116615983717838 2935:0.117971892412752 4856:0.134284475060933 5639:0.132777778811814 5662:0.144155380763744 6978:0.144155380763744 7907:0.861701318113891
+1 6:0.0152262180605199 14:0.0772382744983081 15:0.0260831990785593 29:0.0552986555896203 30:0.0457611952299897 37:0.0360212410520059 42:0.0455483366741508 57:0.0568377017825554 58:0.0510693290351782 63:0.0329114426751802 75:0.0308585167534056 81:0.0463529907264155 142:0.00789676020053414 147:0.0980214318516269 161:0.074295905855927 179:0.0415005438296978 186:0.0432016534840807 190:0.0652744298242066 227:0.05411457586973 229:0.0398688344798528 351:0.0540277192627326 389:0.12976427381486 408:0.044829260794231 563:0.116692379061765 586:0.111927658197479 610:0.0980214318516269 627:0.257941290467798 784:0.299033645910464 795:0.0901944664236809 1046:0.171066448751581 1134:0.185228150703574 1140:0.0773262282446155 1399:0.126979712423699 1509:0.0962038525997049 1558:0.0917174147843442 1727:0.264731001067021 2206:0.098260165694536 2326:0.114491504947863 2682:0.112031137013875 2753:0.108222624951753 2771:0.109830262899972 3573:0.436951978901512 4174:0.13236550053351 5705:0.487770503561584 5792:0.154120413743849 7247:0.150900362676768
+1 6:0.0222190591885845 26:0.0480851068149843 29:0.0403476456435619 31:0.0423435782485842 60:0.0843224863003622 63:0.048026456069063 75:0.0225153484434083 80:0.0723352480508624 88:0.169662776700361 96:0.0688320871151522 102:0.105857802094918 142:0.00288086282483818 158:0.0797391580744056 174:0.0814355488203882 276:0.0863032444104561 295:0.282983128591762 304:0.168242561571589 312:0.100694837554312 345:0.0815275022077126 346:0.0925581376389247 405:0.105653904847841 408:0.0654176890813224 483:0.323598128372002 496:0.186318253852888 505:0.159826688808567 685:0.1174098709769 718:0.182644490842019 731:0.128027138416867 764:0.102748609929924 1135:0.150898347292664 1439:0.523645089046162 1675:0.164167941188082 1785:0.168636785223347 1808:0.335109571516845 8670:0.246031119170183
+1 6:0.0286834288881879 12:0.0966805988553029 26:0.0620748939098707 27:0.041759632856449 28:0.105906317341033 31:0.0546629362321826 64:0.124389366579095 75:0.0290659199603318 80:0.0933803238906861 142:0.0111570462914097 387:0.101237863702831 442:0.122043555874527 448:0.129879478530014 502:0.0989945854870749 719:0.154366568848749 742:0.147192023963771 1236:0.158055040360274 1911:0.194225939737506 2231:0.266482781618969 4281:0.231147836164187 5995:0.580669725110825 6077:0.568537742574931
+1 6:0.0336708111576201 11:0.0302610859036162 26:0.145736553228424 27:0.0588247960480099 29:0.0489143287513064 37:0.0318625255543932 41:0.0620167156330238 64:0.0584071156684545 67:0.0380925846645335 72:0.293357946823818 75:0.0272958468367737 76:0.168075400901571 81:0.164005826385676 83:0.0348972800808801 88:0.0514214689854224 110:0.0649910262108213 142:0.0261939951614073 148:0.118390953991826 153:0.116814231336909 166:0.0502464762093963 185:0.0392146550058075 224:0.0640432639024523 229:0.176329537841873 284:0.0408955691201797 308:0.0995135830553261 355:0.0405296697568791 363:0.125817194791929 379:0.0822486584568373 398:0.0523790570393228 404:0.113102715538133 405:0.0640432639024523 409:0.103174810389355 423:0.153064334694461 426:0.0606231965238078 434:0.0582714187498543 437:0.12114416717863 465:0.0572629164490044 478:0.0528099376986917 505:0.193761372563815 506:0.0376739868325663 574:0.0504224519589268 582:0.0567993791310628 613:0.062282187779326 628:0.0731765322677447 660:0.0867046855143477 723:0.0691141196836891 762:0.0896582601599886 780:0.273283920609675 867:0.0591954769959132 1050:0.0794948812580671 1068:0.0793532919519249 1086:0.0849054725066061 1128:0.50636629883121 1565:0.101273259766242 1589:0.105982983908121 1591:0.0799262778345655 1645:0.0769743565658696 1769:0.103220039101107 1819:0.0934759365298986 2021:0.0982934575590129 2213:0.0934759365298986 2444:0.095389090170248 2723:0.0877855382951518 2779:0.101273259766242 2976:0.0909330631127376 3095:0.106588851761624 3292:0.117083671192228 5006:0.136326941492029 5086:0.125127179900652 5179:0.112319681771884 7299:0.136326941492029
+1 6:0.0178464662561337 12:0.0601534444093083 26:0.154488851919903 27:0.0519646295808137 31:0.0680211735306562 63:0.0192875521947971 64:0.154786977660809 94:0.107135698357321 97:0.05567961898144 134:0.0639078024866692 142:0.0416506375720851 166:0.133160148409088 179:0.0486422860965257 185:0.0519621441573649 192:0.0720628067789017 198:0.077696134534077 204:0.0535678491786604 226:0.0691897942308939 240:0.0803299500297491 317:0.0531844020631128 582:0.0752631261455704 626:0.0842174313184522 643:0.0726009323016445 719:0.0960449245023432 1031:0.109649947900852 1045:0.0463544116720439 1057:0.121565081854565 1150:0.0973686915159439 1296:0.0908406284676939 2231:0.165802212439184 5995:0.541928025527117 6077:0.530605476654517 7607:0.190569971653484 8690:0.395227001194122
+1 6:0.0152445067650863 15:0.0522290569106184 29:0.221460306396626 68:0.0935855860711356 138:0.127833039968618 179:0.0831007829589676 180:0.234951082693562 199:0.142517141827741 229:0.159666888922375 411:0.228421884909537 644:0.145258173757622 781:0.330398455050536 1064:0.14124601264147 1155:0.177459147402551 1296:0.155192692530322 1313:0.199232139246457 1707:0.174251237060116 7366:0.617222131094526 8409:0.325570920360256
+1 6:0.0160681406298653 28:0.118655102725716 31:0.1837294453276 63:0.0694625135584702 75:0.0651296316461453 80:0.104621255860788 142:0.00833340576879751 158:0.115329816152151 172:0.126007879885151 176:0.0832882178636047 179:0.0875905719753892 180:0.12382253804713 205:0.127142561444272 255:0.149554535167918 312:0.14563882266945 405:0.152811312736565 409:0.0820605595667223 507:0.0859155172178503 768:0.200808295441364 850:0.147293113846159 1033:0.192480039544228 7591:0.343160944067031 9655:0.747440903083367
+1 4:0.0274843928738996 6:0.0317701202048533 15:0.0217694601971214 26:0.110007871034261 27:0.0370027882156384 29:0.0923063063075049 31:0.0484362748014926 33:0.0351611014542139 41:0.0292579602722977 63:0.0137342114207172 64:0.110220159349243 81:0.0773739128852269 86:0.0493605858955129 88:0.0485187672827208 94:0.0762888062251128 97:0.0396481446267899 134:0.0455072402096788 142:0.0230676736484244 158:0.0912125978172546 176:0.0658713849754729 178:0.0512798054942248 192:0.0513142265994079 198:0.0553255865485799 204:0.228866418675338 226:0.0492684220644314 232:0.0563988043444702 256:0.0432410616712422 274:0.0686688020786117 283:0.0476318446215434 284:0.0385870462315833 317:0.0378713594572285 322:0.165201888401573 346:0.0529380318719666 355:0.152967206404548 357:0.0588193183691634 365:0.0673235887465387 389:0.162455045409463 404:0.0533590778570926 427:0.0674970656416415 430:0.0494532395278191 467:0.0797568109296705 483:0.0616932898264568 485:0.0879434962655901 524:0.0718288115705138 561:0.0563068026316987 574:0.0475761439859465 582:0.10718619721441 599:0.0595774501653644 757:0.0603700541114262 834:0.0640302432743563 876:0.0613223336167618 953:0.0694310779880036 965:0.0634677982367446 1007:0.293383170551721 1045:0.0660157684870502 1126:0.0677605610971883 1198:0.0756912424475989 1248:0.0818102738368817 1264:0.105204338933616 1274:0.0884874695754226 1339:0.0766959647739173 1880:0.0887804896512549 1955:0.095556463467697 2099:0.0923778176468028 2157:0.102408879616929 2227:0.0841382980737732 2318:0.194786697263732 2423:0.0820095249669008 2578:0.0959978613251891 2786:0.108535250212429 2864:0.0938947987142194 3542:0.331423168606448 3734:0.103066855217464 5211:0.108535250212429 5580:0.354191545406684 6842:0.140715917156153 7386:0.125943885530644 7934:0.147784911048428 7939:0.147784911048428 8305:0.281431834312307 8715:0.140715917156153
+1 6:0.0320170747438599 15:0.0168759060828832 26:0.010659902009178 27:0.0215137022143929 28:0.0727476693973889 29:0.107335175654191 31:0.0563224363732361 37:0.0349587724545399 38:0.020065537992289 40:0.030776743965082 58:0.0165210026177726 59:0.0305860016143595 60:0.130853116582119 63:0.0266172495734567 64:0.0427218920629046 68:0.030238753189644 75:0.0249569382296181 79:0.0167018742061035 80:0.0641434911644194 81:0.0749763013926808 83:0.0191442149108237 98:0.0159757378729645 132:0.0149372546276869 137:0.0201621756306347 140:0.0174036837610543 142:0.0076638404151588 158:0.0176772324669691 159:0.0148164093180783 162:0.0266776332605329 171:0.0638845690275102 172:0.0386278355366683 179:0.0671274330603737 186:0.0559031922906964 190:0.0422327469881775 199:0.011512298148528 205:0.0194878366244095 209:0.0309424077389256 215:0.0156900074447612 219:0.0205927426903857 228:0.0186265049535055 229:0.0128976262514723 231:0.0264029593514907 256:0.0167604545331018 281:0.0284292007455474 284:0.0149565345746648 299:0.0203883931332342 308:0.0181973056939478 309:0.0181249204298025 317:0.0146791307557504 320:0.0233773254231799 330:0.073482056155303 338:0.0322701995785284 341:0.0411558791615637 342:0.0230072507178323 345:0.0180736873047028 351:0.0174780461822211 365:0.0521899280258438 369:0.0220233042614313 377:0.0379113126156132 387:0.0521556609468045 389:0.0209894661618906 391:0.0254874880200041 398:0.0191563339122331 408:0.0870139885046231 411:0.0184515406989131 422:0.0224582100801319 426:0.0221714223409014 455:0.0359648705564251 457:0.016982595948027 478:0.0386278355366683 485:0.0170436723067522 493:0.0219867765139403 495:0.0271422331344376 502:0.01699999008075 505:0.0531475425761076 509:0.0228605680043305 513:0.0184299852840434 515:0.0533812379650276 527:0.023490143015625 534:0.018772076479587 546:0.0425568688446302 574:0.0368815087936231 586:0.144835044361594 597:0.0220233042614313 609:0.017440762684435 625:0.0273807620207555 647:0.222467169007212 654:0.025736644973382 655:0.0186486974753622 664:0.0278412111998393 667:0.0237215908720707 672:0.034411767489418 673:0.0249020470758091 702:0.0293383089722024 713:0.0246273093677725 757:0.0467994775331049 784:0.241844554266897 796:0.0216492695272524 804:0.0232006456382734 850:0.0903056885413662 851:0.0279724311836697 872:0.0281062497512013 908:0.026196077373175 944:0.0269496954143895 947:0.239686310391977 952:0.0229439964322866 953:0.0807355125539923 1000:0.0299017699362362 1009:0.109752225765686 1014:0.0302021579151906 1015:0.0307789870672276 1080:0.0249020470758091 1118:0.0634201530669434 1133:0.0287188572360914 1149:0.0472561167001585 1169:0.0277551257448243 1188:0.0303261543635049 1225:0.0219685864172723 1235:0.115473913923982 1242:0.0312643578601268 1245:0.0240843407536227 1316:0.0341864927347038 1322:0.027670123154459 1380:0.0760988157357573 1431:0.0863050914237852 1509:0.0311220869877636 1526:0.357247804249047 1576:0.0273003132511972 1579:0.030914143909213 1717:0.28974740957929 1740:0.0352652120934273 1779:0.0335525015353012 1802:0.03670846402845 1846:0.0323541462087647 1853:0.0362422366388117 1862:0.0346448118533029 1903:0.0413924870827558 1951:0.0307124090229519 1952:0.0345272851200178 1984:0.0424341783113986 2030:0.0758810464989022 2095:0.0365494539430889 2206:0.0317873072807356 2297:0.0375650034879436 2351:0.0436662375323997 2510:0.0784226163486471 2783:0.0827849741655115 2789:0.0779644289561878 2907:0.03670846402845 2912:0.040214273699095 3167:0.0762728198330797 3285:0.0396942004721163 3523:0.0387606334194717 3537:0.0417221923173761 3728:0.0424341783113986 4001:0.0428204329708456 4004:0.0404901330963751 4030:0.0464062153716819 4282:0.0428204329708456 5215:0.0464062153716819 5256:0.0464062153716819 5393:0.0428204329708456 5740:0.044132464922038 5855:0.0525981570442687 6001:0.0488164879763437 6003:0.0488164879763437 6072:0.0464062153716819 6477:0.102180476851975 6631:0.163626606777877 6797:0.0510902384259876 6832:0.424063812291339 7381:0.0498581792049865 8347:0.0545422022592922 8623:0.0545422022592922 8723:0.0545422022592922 9287:0.185898609458641 9417:0.171846540295723 9654:0.114564360197149
+1 6:0.0180628878310467 14:0.0916278936096422 15:0.0309425424854837 29:0.0656008871771594 30:0.0542865820762919 37:0.0427320582216369 42:0.0540340676171718 57:0.0674266602377638 58:0.0605836300454073 63:0.0390428992305791 75:0.0366075097922384 81:0.0549886300588158 142:0.00936793977099072 147:0.116282987773923 161:0.0881373567912627 179:0.0492321642277643 186:0.0512501934424582 190:0.0774351647575124 227:0.064196211434412 229:0.0472964647098688 351:0.0640931732969478 389:0.153939574034644 408:0.0531810267038355 563:0.138432363529323 586:0.132779967236576 610:0.116282987773923 627:0.305996182255921 784:0.177372055960336 795:0.106997845657835 1046:0.202936412914461 1134:0.219736463513949 1140:0.0917322332852961 1399:0.150636244221076 1509:0.114126790481791 1558:0.108804521833219 1727:0.314050827242061 2206:0.116566198129167 2326:0.135821462904384 2682:0.132902724328719 2753:0.128384680129702 2771:0.13029182370378 2846:0.149534701257365 3573:0.345571239952953 4174:0.15702541362103 5705:0.385761973551437 5792:0.182833303376098 7247:0.17901335143506
+1 6:0.0440008896219406 15:0.0502503405236533 26:0.0634826602232968 29:0.0266337754957638 63:0.0158513071630078 67:0.207413527673415 84:0.0430398596414418 88:0.167993456590187 92:0.0484118114808973 100:0.0453166717565398 142:0.00760671434349975 153:0.127210332496052 174:0.0537562003943746 176:0.0380126504723791 186:0.04161486848721 232:0.0650925447340968 322:0.0635557877270909 373:0.157055365248607 382:0.0644121611030468 409:0.0749046971682353 465:0.0623591368774423 485:0.0507498876197548 505:0.0527513821446222 515:0.211933342296212 541:0.0756212063645558 543:0.0811717395722867 609:0.0519322790480567 613:0.135650215308762 643:0.0596664453120464 663:0.137267635981282 688:0.162819738837532 719:0.31573474629823 757:0.139351906251294 796:0.0644636892673988 882:0.0550709960870553 975:0.181734317843255 1045:0.0380959704141354 1074:0.0958420794149451 1496:0.108831045727177 1528:0.330858789217205 1713:0.120564962020296 1880:0.102465789147637 2007:0.198051642527924 2055:0.112973146660507 2067:0.091450438520181 2114:0.105007038296507 2154:0.100209794341155 2188:0.115415137929482 2388:0.236389925464343 2410:0.102465789147637 2427:0.236389925464343 2435:0.107916263784277 2666:0.099025821263962 2944:0.120564962020296 3451:0.134512287416841 3553:0.352389547662573
+1 6:0.0380464061115015 15:0.0325876058284995 26:0.0411688336187012 29:0.069088564856364 31:0.0362531320652737 33:0.0526341077964494 37:0.135011737017456 75:0.0192768758422495 88:0.0726297505393852 96:0.117863385558233 102:0.181263702229274 134:0.0681216710413404 142:0.00246649680472595 159:0.057221378725373 176:0.0493028010231026 180:0.0732972575486077 204:0.0570999355032123 351:0.0675006932180348 369:0.08505460445061 413:0.082241318629745 414:0.0702784931585455 427:0.101039150708984 467:0.119391270760951 499:0.0708467479859503 507:0.050858041615507 561:0.0842879829361845 587:0.120467633672719 658:0.0879698664917953 733:0.214713517693938 867:0.0836100720594336 906:0.111296816008078 1007:0.109794352180574 1124:0.317235759301129 1917:0.118357547460586 2369:0.123991824293274 2564:0.145077072673798 2946:0.294567719912781 3825:0.156374003364058 4835:0.179222075199705 7919:0.663676046861674
+1 6:0.0281492732900475 15:0.0321473174854385 26:0.121837815132293 27:0.0273213109062729 28:0.0692893884618028 31:0.0357633191120979 33:0.0519229728873018 37:0.0443958683453911 41:0.0432057078739268 54:0.0702564689983174 75:0.0570492828859078 83:0.0243121821815122 88:0.0716484562187712 96:0.116270943480466 118:0.368650571386861 134:0.201603854986736 142:0.00973268871308129 172:0.0735830886160295 192:0.0757765566566063 199:0.0877202093327903 242:0.0657479533121031 284:0.0569821215041444 325:0.0842566789888252 388:0.292721107526543 455:0.0685103428771021 457:0.0647011071271468 475:0.0760322240222503 593:0.180751305270088 847:0.200126254933121 903:0.104471166114553 933:0.109041347679695 1466:0.114601731937452 1613:0.107600664601819 2528:0.107953348091622 3622:0.707202484547709
+1 6:0.0202495801673374 15:0.041626134237345 26:0.0701166123761184 27:0.0353771525677032 29:0.0147085054878002 63:0.0175077722970962 67:0.114544143788914 68:0.024862317382349 88:0.0309248017123257 94:0.0243124087596291 97:0.0252708607310753 100:0.0500522740627532 142:0.0147028309558108 153:0.0702519203077563 172:0.0317598249135064 176:0.0629774713879089 178:0.0980538813474945 181:0.0341841253558547 186:0.022981815763055 198:0.105789958573964 204:0.0486248175192582 218:0.0229726661276237 226:0.0314026152837632 252:0.0584557804057426 275:0.0817021608426058 308:0.0598473338935815 313:0.0459255000387906 346:0.0337415443624508 355:0.0243744884272531 364:0.037523975034085 389:0.0345150982998676 426:0.0364587081749375 493:0.0361550763998809 509:0.0375919399652422 515:0.0292600529796037 550:0.0329957899310956 561:0.0717774504159949 565:0.0861537095448102 571:0.0319633513282121 609:0.0573592137918114 643:0.0329508010777275 655:0.061331872050684 693:0.0963107985655954 712:0.0743804986085201 719:0.0435911372136797 732:0.0443161050026134 764:0.037456423266156 794:0.0473067250542957 803:0.0506129958714503 812:0.0453627351504437 895:0.0421146185370709 966:0.0404529872771154 1009:0.0360953330753097 1027:0.0423213636932756 1045:0.0210385039097633 1144:0.0553408701005475 1156:0.11355340157328 1164:0.0429657315303371 1528:0.426339207567918 1685:0.115980297219783 1738:0.054687020836628 1820:0.0516501220024237 1946:0.0563999788927026 2007:0.054687020836628 2102:0.0565867434840213 2188:0.0637380227929387 2388:0.0652731813502369 2427:0.0652731813502369 2566:0.0686080130868134 2740:0.0586504754208339 3694:0.393950239577613 3785:0.0691779960537535 4165:0.0733949726212559 4490:0.0802738796767017 5190:0.504077022589068 5206:0.0787900479155226 8887:0.0864924599212049 9289:0.407589135730278
+1 6:0.034169180090908 13:0.0648843146528039 15:0.0167238138306639 20:0.0275352122945247 29:0.0531839145793477 34:0.0389016114881024 37:0.0461916138038761 63:0.0105509458126768 75:0.00989280662467886 81:0.0594404685612576 84:0.0859445638505752 92:0.0322238661061659 117:0.100789814642089 142:0.00379738544708519 168:0.0725067045359574 179:0.0266089817736233 181:0.04120168439056 186:0.0276996854514874 189:0.0365277741270245 199:0.0228170896488168 214:0.125461285650997 228:0.0738345424840492 229:0.0511255512392033 252:0.0352279982303071 266:0.0496360351785118 283:0.0731838175727606 286:0.027351218859742 326:0.0569200633716435 347:0.0400994386581445 355:0.0293782558104573 367:0.0416630421434757 379:0.0596185989845569 383:0.116946327635758 408:0.0287432614929997 413:0.0422058775716908 447:0.068665158574292 490:0.0505155696606014 502:0.033693559070225 515:0.0352667636093319 521:0.0481344000949131 535:0.138867011537297 576:0.0477838978358056 607:0.0478831088753953 613:0.0451457427605962 626:0.0460697938934686 631:0.0327603059932579 647:0.0881848832208201 664:0.0551805906763804 671:0.0298103393813785 703:0.0701548512325761 780:0.049523009789594 781:0.105794026908435 784:0.0958659827011432 787:0.0560678971247433 813:0.0682032704200494 886:0.0420439236140267 918:0.0564399607471235 946:0.0693893040691712 993:0.268206421579616 1005:0.0514569473535913 1021:0.0522607943117626 1023:0.0689022166053257 1047:0.0550099714377892 1094:0.0502753223381838 1127:0.0562526370068175 1164:0.0517860407921565 1265:0.0626972461026769 1363:0.0552667223500883 1366:0.0528970134542174 1375:0.0612710671572668 1378:0.119719857121098 1427:0.0740957267534759 1734:0.0675389973051739 1836:0.05205526451228 1844:0.0634716484261418 1887:0.0841034898691239 2282:0.0706906598454661 2419:0.222287180260428 2457:0.080250440427539 2499:0.0730780148955405 3001:0.0874694518468633 3042:0.0772617830932222 3115:0.07867292168994 3255:0.257043025820169 3499:0.0988176756690766 3612:0.086545400713991 3718:0.0781858342260945 3776:0.0833793443742447 3972:0.0841034898691239 4315:0.0808204596059079 4911:0.0826923512724061 5688:0.108101293289845 5710:0.0884620117178708 6199:0.0949646262274917 6762:0.101259586513944 7355:0.0967530694676322 7602:0.416992975393042 7608:0.416992975393042 7813:0.227063722938059
+1 6:0.0284203604489955 11:0.0851410999013166 15:0.0324569071815963 26:0.0410037183636295 28:0.0699566690437848 63:0.040953704984709 75:0.0191995623506613 80:0.0616825943686285 88:0.0723384554325777 96:0.176086008832843 142:0.0147396267665694 192:0.0765063108938556 204:0.056870925604547 205:0.0749607044957564 209:0.0595105738930397 242:0.0663811286586342 304:0.071732923855202 312:0.0858657291879368 345:0.0695211253720978 405:0.0900944854935538 496:0.0794397861731103 505:0.068144681055962 644:0.0902683552392619 737:0.111632255681377 772:0.0877750622593136 895:0.0985133707385961 952:0.0882549545986068 1725:0.136668459951486 1754:0.536764085832772 1808:0.285758718272232 1820:0.120818561209088 2382:0.658841693754227
+1 6:0.0247326296807757 15:0.0423681114467061 26:0.0535248198369517 37:0.0585109192604585 42:0.0739862084635481 60:0.0938616171696694 80:0.0805183013252061 97:0.0771639257470005 142:0.00320676554318029 174:0.181296179530426 179:0.134822393585984 204:0.148474634419697 333:0.249512295159849 496:0.103697918444714 505:0.177907366547625 513:0.0925394662236828 586:0.0909045604834905 653:0.126327965694328 1305:0.224945601960668 1366:0.134009298591745 1372:0.17278617135095 1379:0.130526149269184 1649:0.140453386740175 1665:0.133283475953836 1846:0.162454574658521 2118:0.184318197477082 7226:0.735342704395461
+1 67:0.204195467600574 88:0.275645010614438 153:0.31309160037715 382:0.317063971263962 448:0.326910369490905 1528:0.542875754310683 2435:0.531209612803906
+1 6:0.00589638890723486 15:0.0202015608998527 26:0.0255211967366058 57:0.0440210685242134 60:0.0447542057142874 63:0.0127450339105679 88:0.0450243057555131 142:0.0015290195196355 159:0.0354724177399744 179:0.0321423672390631 180:0.0908762073503065 205:0.0466564244243684 284:0.0358078958933415 312:0.0534438400952735 322:0.15330357202685 327:0.0495880684318577 331:0.0460938906902614 345:0.0432707663787224 437:0.0530365247353583 444:0.0774600488754834 454:0.0588325905803333 482:0.0933285094053799 485:0.040804776036436 755:0.0615411090013673 799:0.0594850425687972 1094:0.0607301657539575 1159:0.0599579376832929 1223:0.0724556589749812 1305:0.0536282137909141 1335:0.0633806595735216 1664:0.069982932073445 2190:0.090834564642839 2818:0.119366988488624 3735:0.0956436831036911 4325:0.116873043726083 7910:0.822846093635039 7911:0.41142304681752
+1 17:0.0495476432428784 27:0.026476027007864 29:0.0660464893767332 31:0.0346568510548798 36:0.0694737882366291 40:0.0568135063165804 72:0.113173162799383 73:0.296419465487525 78:0.0698553430942274 79:0.184988776613361 81:0.0553621471796985 83:0.0235599965999449 118:0.0595408380292498 126:0.086391283478731 142:0.00471578633453328 146:0.0816498928676546 165:0.0882848718388705 178:0.146765752603401 185:0.0529495213646195 209:0.0571193196889234 216:0.237331560910426 229:0.0952354636784547 252:0.065621879170165 271:0.200706232920507 274:0.294801091393857 276:0.0706364178654662 306:0.0713518493070323 308:0.067184023310641 355:0.0547251178003486 387:0.0641858232525305 389:0.0774926138855474 402:0.0693060634912104 411:0.0681226529510525 444:0.119450744502714 489:0.207203673109304 543:0.100644920510888 597:0.0813095197587102 628:0.0988064884958418 757:0.086391283478731 827:0.155334572888858 842:0.131680883725251 886:0.0783184232383009 895:0.0945549059393196 920:0.358352233508141 952:0.0847086935325091 1094:0.0936516774569122 1120:0.146550051676214 1164:0.0964658079447877 1201:0.231927658249815 1393:0.10410250142098 2194:0.277378213285463 2472:0.154037349724466 2745:0.150550434346659 2979:0.14079872569647 3136:0.148470149760636
+1 6:0.0113266032455393 15:0.0388059656262624 31:0.0863418935513828 81:0.137925762816598 88:0.0864889436096746 158:0.0812972141598285 178:0.0914107355584979 179:0.123487051758944 196:0.421306056554751 205:0.0896241439674866 255:0.105422582639685 322:0.0981622686806107 345:0.0831205014819905 365:0.120010181560692 409:0.057845361310296 480:0.0833088543938299 507:0.0605627619634572 571:0.0893935073963664 731:0.130528713137828 993:0.124469325979674 1679:0.163402863045398 1754:0.160440800379538 2017:0.170337748530163 2270:0.166677271408981 5112:0.198814355892886 6707:0.501676844054382 7128:0.501676844054382
+1 6:0.0223596845917462 15:0.0383031493587052 28:0.0825574885502635 29:0.0406030076679885 31:0.0426115726182817 60:0.0848561670260373 159:0.0672574422117318 185:0.0651029249933558 242:0.0783379103678986 245:0.129266462075338 557:0.105217956683462 582:0.0942965255895058 1064:0.103585387876837 2275:0.351899168865344 2573:0.231918455055556 2649:0.555317973556047 3735:0.181345109781297 7901:0.260026085607737 8475:0.247588260947878 9393:0.520052171215474
+1 6:0.0192379031289195 15:0.0219702644990891 27:0.0186720533476722 29:0.0465788757770389 31:0.0488830572326305 37:0.0303412242920981 42:0.076732075786459 53:0.148157925501635 63:0.0138608975540637 75:0.0129962926150265 80:0.0417532978631188 92:0.12699857856064 97:0.360124777929729 142:0.00332577897690144 144:0.0381244537750489 161:0.125161081502147 172:0.100576971642275 204:0.0384962519949648 205:0.0507413258939119 237:0.110214296782236 245:0.0741458185607704 277:0.0580732249303228 304:0.0485564228770825 343:0.067944590191765 346:0.0534263390895705 351:0.0455083473047023 388:0.0666842592152778 413:0.0554463415495583 427:0.0681196672600699 467:0.0804924980161156 490:0.066362878587576 505:0.092255041962499 513:0.0479869524535273 530:0.0527157071113822 633:0.0666842592152778 671:0.0391621820027458 697:0.0687465310202586 733:0.217136821899024 768:0.0801405842815054 847:0.068385593231603 890:0.202035557253069 987:0.0523529086871629 1046:0.648413103623738 1149:0.0615214008660167 1232:0.0726045219304475 1467:0.0787993561501349 1936:0.0863418126505108 2024:0.062452575822006 2692:0.314122948587873 2709:0.0960034195895889 4140:0.116213551241498 5893:0.124756109904167 6651:0.142013898882132
+1 6:0.0331145504734095 27:0.0120527036304349 28:0.030566778685295 29:0.060132795759121 31:0.0157768669145306 33:0.0229056433627447 37:0.0195850867265651 40:0.0258632593793696 59:0.0257029689049463 67:0.023414546126305 68:0.152466950618261 72:0.0257599561621306 81:0.0252025559614072 92:0.0546512373465958 94:0.0248491104614208 96:0.0256462661584687 102:0.0394417412177981 112:0.0460871005576654 132:0.0502101315577586 139:0.0338632527710554 142:0.00107338565294751 172:0.0324609299437899 174:0.0606844234234732 178:0.0668122947110269 194:0.0327956145373023 199:0.0193487363969253 208:0.0310115315373462 215:0.0263702185434884 232:0.0367409109774866 252:0.0597462044494276 255:0.0770535825741472 265:0.0391038061106776 346:0.0344863962798172 377:0.0637175987623915 384:0.0448563066220559 387:0.029219365303882 389:0.0352770265883474 411:0.0620230630746923 415:0.0360135474625433 423:0.0313615887585291 441:0.0291884183187166 442:0.070448646616055 444:0.108755322050274 455:0.0302231053681834 502:0.0285719082826946 504:0.0439708555669811 506:0.0231572446506691 535:0.0392527595443981 553:0.317486621862511 557:0.0389567809309537 644:0.0394417412177981 656:0.0408607456341982 667:0.0398689125991836 673:0.041852907073577 819:0.0831472186283065 963:0.0702392896220021 1003:0.0437459465041008 1008:0.0538235249533422 1014:0.0507608111412623 1058:0.092868905811572 1124:0.0460188869200094 1126:0.04414250926049 1146:0.0947813353144949 1149:0.0397117123521779 1188:0.0509692121539563 1190:0.0447950798617647 1201:0.0527903096592912 1227:0.135692294459694 1235:0.0485192941585267 1304:0.0532951721764539 1337:0.0532951721764539 1431:0.0483510312805464 1472:0.0420910192859473 1553:0.0576450206716559 1787:0.0594908353500296 1949:0.051507584813743 1963:0.0592702937305904 2213:0.172371865562854 2472:0.210367649613198 2745:0.3426759925261 2957:0.131034930189241 3011:0.070705115335749 3119:0.0671427381535548 3147:0.126271113006353 3323:0.0750151825765192 3645:0.0701225498710658 3756:0.0779949942940302 3842:0.0634467413533663 3962:0.0701225498710658 4301:0.0779949942940302 7356:0.644234842633775 9926:0.091669159398705
+1 6:0.0213370105313666 29:0.0387459312613395 31:0.040662629653103 63:0.0230599547494859 75:0.0216215377427507 81:0.129912004065452 83:0.0276427715505629 142:0.00276649879327815 179:0.0581561052936519 205:0.084416804501919 229:0.055869536203193 243:0.100594414935702 389:0.0909215166227644 586:0.0784239924917135 781:0.231221495834359 2103:0.170881533401329 2219:0.306658326865141 2424:0.149564219678842 3316:0.164349578435902 7933:0.496266331868595 8756:0.683529181705947
+1 6:0.0367005729400318 15:0.0419131591087234 26:0.0264750329137732 27:0.0178105444037782 29:0.0444297753363287 33:0.0338481713911148 41:0.0281654559411555 53:0.0471073581068773 59:0.075963681349387 63:0.0132213702888573 75:0.0123966573142466 81:0.0372423694967393 82:0.0458801266081748 85:0.0374852576828341 96:0.037898049783046 97:0.0381676665167853 142:0.0317233102553446 144:0.0363654314920297 148:0.0537683294649116 175:0.118420269683865 179:0.0333436648509594 189:0.0457728848328345 194:0.0484627986280902 204:0.0367200753323058 275:0.0411327610606036 309:0.0450152228909226 327:0.0514413864448927 359:0.068103918929107 455:0.0893226908559895 458:0.0643993285065044 493:0.109213129984341 518:0.0533434135858821 555:0.0704900732878586 574:0.0457996311026167 593:0.0589151662524113 609:0.0866320845565317 633:0.0636075174846706 641:0.242000871867893 688:0.135805838305235 695:0.0603808196736615 696:0.0675080002087164 717:0.061986819867431 738:0.0741190064189918 741:0.0741190064189918 749:0.14240872648936 827:0.0522471386484306 856:0.0459070444659679 882:0.0918680111306366 944:0.066932517062335 1009:0.0545163320826899 1045:0.0317753562011641 1067:0.0650608242054598 1123:0.069472593240378 1168:0.0795362028755682 1272:0.231885324078103 1338:0.0772951080260344 1340:0.082123357010809 1430:0.551930073725682 1431:0.357246894968896 1504:0.0854653894678442 1591:0.0725984932904532 1665:0.0659261333992166 1738:0.0825961567475304 1862:0.0860441806423699 1943:0.0734107460224061 2229:0.0869516059955836 2412:0.0900115598675458 2625:0.0968165946057216 2858:0.091988345620947 2960:0.096266273803988 3408:0.10538992445671 3466:0.0968165946057216 3501:0.10634923016263 3507:0.130633277656012 3778:0.102022011839209 3795:0.10538992445671 4048:0.0973855738648926 4803:0.102802770321469 5545:0.11702320817966 5935:0.121241088782595 6742:0.135461526640786 8180:0.130633277656012
+1 6:0.0273252176215255 29:0.0496199316257712 31:0.0520745491830327 60:0.103700623369746 63:0.0295317041225585 96:0.084650378029132 98:0.177250005753569 142:0.010628740347419 174:0.100150239249947 199:0.0638641835916885 408:0.0804513177300874 480:0.100490523361799 507:0.0730532629481774 568:0.192191219872268 631:0.091694875581199 641:0.324324846332769 658:0.126361251519007 730:0.131334594649051 903:0.15211923873701 1060:0.207391177822232 1469:0.154689496206627 1665:0.147254862616683 1788:0.168233576381828 2102:0.381796824283897 2935:0.217523743027405 3621:0.625172727918762
+1 6:0.0113416917444195 15:0.116572980558212 26:0.0490899686043622 28:0.0837526649795565 29:0.0411908133119748 60:0.0860846211916206 75:0.0229858644685127 88:0.0866041580566295 134:0.0812286965345799 142:0.00294106585161439 144:0.0674287316673783 255:0.105563019139988 322:0.0982930335047125 427:0.12047970030082 467:0.14236288031798 496:0.0951059261160636 527:0.108174576291244 827:0.0968765706268457 903:0.126278190208581 6281:0.242220038770279 8855:0.235275915122086 9255:0.856082625718523
+1 6:0.0139418167046155 26:0.0603440262475919 28:0.102953274518555 31:0.106277480346712 60:0.105819840354095 75:0.0282554592770358 134:0.0998506769324925 158:0.10006802867917 325:0.125192344665306 404:0.117078953150648 480:0.102544139019587 498:0.143255938434379 506:0.0779969060580339 507:0.0745461731214355 561:0.123546766026114 731:0.160666649462948 1014:0.170969658857935 3024:0.234316349702311 3691:0.427395365871724 4402:0.27634244941684 5075:0.255723782650391 7935:0.648530798202753
+1 2:0.0276003879985738 6:0.0135220532958998 15:0.0231638878850918 26:0.117054348984373 27:0.0393729761740341 31:0.0515388268204111 41:0.0311320586434932 63:0.0146139468162701 64:0.117280235280267 75:0.0274047374412631 134:0.096844349894935 142:0.0122726287497162 158:0.0485275787827352 174:0.0495599666027215 178:0.0545644979012666 204:0.0405877164221022 286:0.0757674742858007 373:0.0482651836711888 404:0.113553913229049 592:0.133200107622714 952:0.0629859112018279 1230:0.283401787188617 5631:0.280506077507158 7368:0.144392580374889 9240:0.850548809319346
+1 4:0.0303871955648013 6:0.0175627829985453 11:0.0789213070242996 26:0.136829819904992 27:0.0102277223942185 29:0.102055366276411 32:0.0526625486787298 33:0.0194373452429008 58:0.0235625035753761 63:0.0531466929611883 75:0.0284751699334866 80:0.0228706040859901 83:0.00910125619532705 88:0.0536431449203752 102:0.0669392017408614 118:0.0230007003052769 134:0.0754703267893053 142:0.0245931412616157 158:0.0252115360576021 159:0.0211313868539609 173:0.0262544785925083 174:0.0257478925666615 176:0.109242725492849 180:0.0270680773357046 192:0.0851007758887145 193:0.034070074186578 204:0.0210865388659286 218:0.0398491175385724 228:0.0265654028219569 238:0.103911504162772 252:0.0253498141144835 255:0.130772758745738 284:0.0426624712245568 286:0.0196817403409122 289:0.0305604930787314 308:0.129766361762633 309:0.0258500353950192 312:0.0318372000547845 327:0.029540266047144 331:0.0274587383053525 339:0.0273210528889163 345:0.0515539318756798 346:0.0877937345035975 351:0.0498549071369491 373:0.0501504278175891 377:0.0270348434571285 386:0.0279750143411656 405:0.0334051336385102 409:0.0179387501467446 457:0.0242208349579271 472:0.0640048475818762 505:0.0252666094373882 507:0.018781458537901 527:0.067003993837074 538:0.0307781694259692 574:0.0263004825712016 587:0.0444877111881035 593:0.0338320913487109 631:0.0235740805320078 655:0.0531941082639414 667:0.0676641826974217 723:0.0360501052516346 755:0.0366608498823629 767:0.0671996871978511 774:0.0394034988671382 799:0.0354360240049004 804:0.0330891113844852 827:0.0300029700313393 930:0.030753738956013 933:0.0408195872220513 987:0.0286766006186956 1033:0.0420768680575711 1073:0.0940529598115754 1081:0.0390508565331585 1243:0.046765982555209 1317:0.0911193666178486 1511:0.0423981583167762 1558:0.0423168260599573 1707:0.0401500253287801 1917:0.0437084736192606 2216:0.0478530846873586 2385:0.663372012941385 3074:0.0599991764237177 3366:0.0562619638805416 3527:0.0605202663127037 3887:0.0610711485445385 4475:0.529481964702864 4835:0.066185245587858 5297:0.0610711485445385 5491:0.128856128219477 5784:0.0672006907710531 5904:0.0696228127972404 6452:0.071108488568088
+1 6:0.00940688906784113 31:0.0358540242356011 159:0.0565914331462479 178:0.0759177866804155 179:0.0512787890609935 180:0.144980667812048 204:0.0564713268828012 229:0.0985252415866919 255:0.175109610293341 322:0.163050042825466 346:0.0783727272793501 351:0.066757583488284 365:0.0996699928901906 408:0.0553918092606445 411:0.0704758561599489 478:0.0737697145586538 499:0.140133603614069 535:0.089204618359484 563:0.432561359833437 582:0.158685056949464 781:0.407756270864023 847:0.100316913707891 856:0.0705998473804922 1080:0.0951136339474557 1446:0.0981804956551389 1497:0.114210128646775 2292:0.165117869005892 4849:0.168564419664574 5849:0.200899220862822 6227:0.559365286779116
+1 3:0.114031425356367 26:0.0968169567344739 88:0.170803756082442 102:0.213139388144947 142:0.0116009463197614 505:0.160901520661396 726:0.206139718042105 2385:0.352037623379914 4475:0.842954943109699
+1 27:0.0950722506044566 111:0.204192606199386 142:0.00846691272940331 160:0.295944115951337 175:0.316062252247705 337:0.249623280051925 582:0.275396355094136 641:0.258358947543913 1272:0.412599396972437 1430:0.491031540041462 1431:0.381395038311597
+1 6:0.0422826092755961 15:0.0362160094815643 17:0.0144001688486864 25:0.0198335080557559 26:0.0800672204617075 27:0.00769480109249034 29:0.0767810968708087 31:0.0100724166537583 33:0.0146236375651662 37:0.0250073927578445 42:0.0316214853073085 63:0.0628332259026686 67:0.104639752578442 68:0.0324464644105122 75:0.0160674165958664 79:0.0179212669126445 80:0.0172066411781249 81:0.0482701627182684 82:0.118931271389982 83:0.0205419212847695 88:0.0201791422482903 96:0.032746663803491 142:0.0171320256189399 151:0.0834809400856098 153:0.0458409889348053 154:0.0382067436475061 162:0.0143126747441594 172:0.0207240140348257 173:0.0790099624411378 176:0.0410942442055411 178:0.0213274686783138 179:0.0144056724435873 186:0.029992323554453 194:0.0209376865397479 204:0.0475932126572306 209:0.0166007461547793 219:0.0220962051122948 220:0.0211998820563516 226:0.0204909265603093 229:0.0138392733497955 255:0.0737899158834353 276:0.0205292578527493 289:0.0229921097254453 301:0.023952636991973 308:0.0585776365708192 309:0.0194482087928929 312:0.023952636991973 314:0.0210883262262534 315:0.0374331977957712 325:0.0237301346101941 327:0.0222245444968774 346:0.0440342628354196 351:0.0187541066875384 355:0.0159049126257391 377:0.0203395961437916 416:0.0514212850501632 426:0.0237901431121461 439:0.0284824804791674 473:0.0232671484849653 475:0.0428275819178615 480:0.0194371806752783 481:0.0609085360501476 485:0.0182880194648653 493:0.0235920164163967 495:0.0291238694894326 500:0.027348312536829 507:0.014130182860428 515:0.21002141078753 523:0.0309761468584639 540:0.0298738794776272 550:0.0215305095504915 553:0.0337821355228243 565:0.0281086355265084 572:0.0572751753936597 575:0.0275816977478675 580:0.0239116708607802 585:0.0327445133184663 586:0.0971308465250072 591:0.0277879008168638 597:0.0236312110303918 609:0.0187141011464227 628:0.0574328070746499 631:0.0177358999042337 643:0.0430023065840751 656:0.0260867038456047 671:0.0161388356838967 717:0.0803416625156155 719:0.227553732898857 726:0.0243538127544825 749:0.0307628671905738 763:0.0306069259990265 764:0.0244411750875893 792:0.0289992076349456 794:0.0308687228798274 800:0.0233046213638907 801:0.0319598581383905 829:0.0196043899125024 852:0.0262258825126667 856:0.0198335080557559 876:0.0765125844504162 912:0.0251322678607014 915:0.0327445133184663 917:0.032148206024925 951:0.0344493632630915 952:0.0246191223231407 1008:0.0343625240702709 1009:0.211977292744356 1012:0.0352815989049494 1014:0.0324071973394561 1105:0.0331711649564722 1113:0.032084878234321 1126:0.0281818784314228 1134:0.032148206024925 1144:0.0722223735040479 1149:0.0253531271457287 1159:0.0268721467910062 1176:0.029827547141493 1201:0.0337028889861255 1239:0.0353802532966265 1341:0.0303542528403114 1374:0.0352815989049494 1380:0.0272182465214647 1437:0.036111186752024 1448:0.0663423299129444 1504:0.0369241477036364 1509:0.0333942898206255 1528:0.596134519810317 1535:0.0392179052208486 1649:0.030014679745039 1675:0.0390512085475757 1685:0.18919950864747 1709:0.067405777972251 1723:0.044414524982901 1740:0.037839901729494 1783:0.19135390057734 1785:0.0401142282767918 1802:0.0393885245265859 1946:0.0368022795251361 2007:0.0356845351140181 2021:0.0385729482508933 2024:0.0257368667342587 2067:0.0329547015405907 2076:0.0329547015405907 2102:0.147696590814546 2121:0.0384202902769406 2175:0.0822743744166781 2178:0.0392179052208486 2188:0.0415905214373888 2238:0.0407105355703331 2322:0.0418282799814511 2379:0.0397423013206878 2388:0.0425922475984673 2421:0.126985638966413 2427:0.0425922475984673 2528:0.0304040879913519 2540:0.0425922475984673 2596:0.0365645209810737 2666:0.0356845351140181 2706:0.041137187208339 2740:0.153083120461872 3018:0.049794302233318 3046:0.0405062689377039 3348:0.0895366035540058 3496:0.0447683017770029 3520:0.0505582698503341 3553:0.0846570926442753 3570:0.0484722911895707 3613:0.0434462907332557 3694:0.154236938955367 3699:0.0401142282767918 4111:0.0447683017770029 4227:0.104761094469536 4517:0.0473545467784527 4546:0.112876626882875 4785:0.0407105355703331 4924:0.0447683017770029 5035:0.0927726250576148 5121:0.049794302233318 5122:0.0995886044666359 5131:0.0505582698503341 5206:0.0514123129851225 5510:0.054820302689633 6376:0.0505582698503341 6483:0.0425922475984673 6677:0.0585242921022009 7946:0.0564383134414376 7989:0.0534982916458858 8190:0.054820302689633
+1 6:0.0242426794212439 33:0.0670755496954432 96:0.0751010296009779 102:0.115498893929004 204:0.0727666853642512 373:0.173062085963362 398:0.0942811180169606 505:0.0871915220815393 539:0.112614306368994 587:0.307041691686167 737:0.142834130785079 873:0.140152486818512 952:0.112922735911997 1003:0.128103077579674 1067:0.128928399020261 2202:0.16993183863468 2216:0.165134277336536 2385:0.381533948048346 4475:0.685187973057418 6452:0.245385411387837
+1 6:0.0145168864841403 11:0.19570218262333 26:0.0628330867914987 31:0.0553305982534871 60:0.110184679854648 63:0.062756447523065 75:0.058841871697565 88:0.110849665102318 118:0.285175665566578 142:0.0150577603667547 159:0.0873329540759043 179:0.0791343827352541 192:0.117236384024015 196:0.539972316986984 209:0.0911925357908509 327:0.122085631005409 346:0.120946253023894 489:0.496209386217888 553:0.185574706945905 952:0.270479431786985 1725:0.209427377528013 6458:0.293881059934301
+1 158:0.217597977219979 204:0.181995583026484 505:0.218073309465215 587:0.38396851122282 2216:0.413014677404623 2385:0.477124201630656 4475:0.571237529074822
+1 17:0.0652254529397599 27:0.0174267708876492 29:0.0652086340952905 31:0.0228114664953841 34:0.0476971462012289 36:0.04572830319055 40:0.0373951861285299 42:0.0358073180160195 48:0.0366138307949275 53:0.0460923101641325 67:0.0338546390331088 72:0.0744916440125129 73:0.195106090130375 78:0.045979446199373 79:0.162348478537208 81:0.036439887845044 83:0.0155074121483213 118:0.03919034160549 126:0.0568635582456018 142:0.00310397507838351 146:0.21497092076286 165:0.174329807934305 178:0.0966026037068628 185:0.0348518747604328 209:0.037596475376823 216:0.260356455997325 229:0.0626848811345643 232:0.0531229720269058 271:0.132106737003628 274:0.258721148034472 276:0.0464935569864809 287:0.111106645523745 306:0.0939289214287624 308:0.0442211583028402 337:0.0457560190489956 355:0.0720411781890858 367:0.0510829278348298 387:0.042247714724145 389:0.0510063699235306 402:0.0456179051799371 411:0.0448389731920208 444:0.0786236075446524 478:0.0469346302934066 489:0.272766826932355 543:0.0662454366823227 557:0.0563268555023434 597:0.0535186933975766 628:0.0650353633767916 757:0.0568635582456018 827:0.102242682101093 842:0.0866736006229909 856:0.0449178603360289 862:0.0575885702130845 864:0.0892050079367568 881:0.136383413466178 886:0.0515499254344477 895:0.062236931606782 920:0.235870822633957 930:0.0524005582149907 936:0.0700310137297934 952:0.0557560616607871 993:0.0657694137226366 1034:0.0754594141867978 1094:0.0616424180939563 1120:0.0964606273205559 1156:0.0839045387673744 1164:0.19048411603219 1194:0.0917364152505227 1201:0.152656973858957 1294:0.135951258751427 1378:0.0733940743051437 1393:0.0685212490739543 1527:0.0778223929242774 1706:0.0900062225571317 1738:0.0808164123009197 1776:0.0693169167791504 1854:0.0998236878959063 2185:0.0747958232054992 2194:0.182572958197826 2402:0.0825466049943107 2472:0.101388837569611 2666:0.0808164123009197 2745:0.0990937169544373 2979:0.185350100546171 2987:0.102231157698885 3070:0.0936706061229355 3095:0.094730434627165 3136:0.0977244540038074 3323:0.108463000496845 3475:0.0970803854843653 3541:0.112771452582091 3756:0.112771452582091 3810:0.107246025891682 4330:0.107246025891682 4512:0.0983948181929688
+1 2:0.0652572213861064 6:0.0159854931309455 12:0.10776166649543 15:0.109535486237258 26:0.0691896212317241 29:0.174168583865968 33:0.0884585173346226 63:0.0691052287209439 75:0.0323973166305675 140:0.112961102871987 142:0.0331621694738953 162:0.0865775003872409 174:0.117177545208747 179:0.0871400443213515 186:0.272135759098018 228:0.120897999014839 229:0.0837138910244564 363:0.149331857026412 383:0.191490006271134 389:0.272470274557296 539:0.148514542442056 829:0.118587133822343 998:0.176937825099699 1134:0.194464792173652 1509:0.202002364446705 1881:0.277932155068628 5034:0.29702576297212 5270:0.323611655297238 7016:0.331608512187923 7081:0.354013978009871
+1 6:0.0275266146721988 15:0.0628724451994556 26:0.0397142589921968 29:0.0666475320510036 31:0.0349722386952583 63:0.0198329092014179 67:0.103805033091342 100:0.0566995155046489 142:0.00237935069556635 153:0.159163591237712 178:0.0740506822764655 186:0.0520678767781303 299:0.0759584773509966 355:0.0552231326299464 398:0.142736697893922 493:0.0819133736995307 505:0.132003419221493 515:0.132583852274434 535:0.0870107407047942 557:0.0863546513320343 576:0.0898207349267895 698:0.103087104961756 719:0.296281806162918 732:0.100403097751404 801:0.221934382959692 858:0.0920535966808394 969:0.102619425787872 1064:0.0850147668245278 1528:0.551953834263746 2007:0.123899568756532 2021:0.401785112683979 2121:0.133398330161901 2178:0.2723354264738 2188:0.14440562708711 2388:0.147883700683227 2427:0.147883700683227 4924:0.155439135368027
+1 6:0.0150769519608487 15:0.0516549990194036 30:0.0906251755243829 81:0.183594327007811 97:0.188155779084391 158:0.108215514030765 159:0.0907022834848179 204:0.0905097823985264 304:0.114162575339293 312:0.136654861542637 365:0.159746722206049 405:0.143384905215553 496:0.126428006646314 505:0.32535571674425 1033:0.180606603867825 1472:0.153311282607798 1808:0.151594504774707 1892:0.400371526207376 2215:0.510825265951761 2382:0.262135782488495 7908:0.350666914391319
+1 6:0.0361978834770773 27:0.0526997776338297 28:0.133651543179894 29:0.0328659139701654 31:0.0689834748823316 37:0.0428173523168266 60:0.0686864260923824 63:0.0195604148430605 75:0.0183402895793854 80:0.0589220015574703 83:0.0234477510825565 98:0.0587010425996086 142:0.00938663837760627 158:0.0649529921145474 172:0.0709668072110113 179:0.0493304326725057 330:0.0900005024906947 338:0.118573199887234 351:0.0642211046312133 391:0.0936508931178182 408:0.0532871771618931 413:0.0782455420371692 427:0.0961300626731473 467:0.113590526645791 507:0.0483870528763017 513:0.067718897234763 586:0.0665224994347044 609:0.0640841106338651 647:0.408715230205621 784:0.0888630471743599 947:0.440350124317971 1018:0.0982004362806749 1118:0.116515091085603 1431:0.105706100265207 1526:0.291703703628524 1903:0.152092013957019 5164:0.165987329392155 5855:0.193265981319183 6832:0.34626100748258 7381:0.366396485060473 8221:0.183198242530237
+1 6:0.00663662394959446 12:0.0894778347910096 15:0.0227376730057018 26:0.0287251380716505 27:0.0193242572651773 29:0.0241029243511253 31:0.0252952569351325 52:0.0541073912300417 63:0.0286901012195733 65:0.0474796957179788 75:0.0134502455252253 96:0.041118993740625 102:0.0632374592165907 142:0.01204681272918 144:0.0789122373555398 172:0.0520450332584891 174:0.0486480646243949 205:0.0525136907705118 220:0.0532400993767297 229:0.0347551126221521 252:0.0478959352523697 255:0.0617705080338344 260:0.0836756931175763 278:0.0572946531636338 373:0.0473771056620395 405:0.0631156548375913 413:0.114766099749831 427:0.140998094900578 437:0.0596947514486459 453:0.0643719934163715 467:0.166608107915899 481:0.305924014443225 513:0.0993262173492451 527:0.0632986683053644 535:0.0629344624295492 586:0.0487857046354456 737:0.078203930903536 876:0.0640496896615223 952:0.0618269722240825 953:0.21755722926929 1241:0.0827604408499932 1245:0.0648998473829159 1472:0.0674850813705637 1591:0.0787686176011198 1707:0.0758594522564781 1950:0.112428400742964 2198:0.101226062952939 2604:0.395671816385394 2699:0.101226062952939 2998:0.210090016260532 3948:0.117667001170153 8113:0.275344773645477 8245:0.141735760995751 8246:0.566943043983003
+1 6:0.0226322347596835 15:0.0516933868045371 80:0.0491202410624766 92:0.0498020604579261 96:0.0467413716415582 102:0.143768381179535 220:0.121039696977925 237:0.0648302422029376 343:0.079932719567493 399:0.0711338766972056 426:0.13582866667378 473:0.0664213271251862 499:0.056191736925307 505:0.0542662511986826 527:0.0719537690620489 586:0.0554563850843398 593:0.0726627279475491 795:0.17875328200446 856:0.0566192254913674 1943:0.0905407793266543 2387:0.102469589787445 2399:0.109679390681599 3733:0.246364490911612 9641:0.877318787595694
+1 6:0.0184638434860715 28:0.0681730791389559 31:0.0351871424791811 142:0.00239397176321409 158:0.0662625416270262 174:0.0676722274719217 186:0.052387832953597 245:0.106743711610238 255:0.0859262933273124 337:0.0705795728601192 345:0.0677486399310255 480:0.0679021598614477 507:0.0493626082655392 535:0.0875454201567538 571:0.0728615496392317 784:0.181309318348604 867:0.0811515957559976 1513:0.153980031468004 2326:0.138836395186234 2789:0.14612358661883 7937:0.644161270780538 9409:0.644161270780538
+1 6:0.0160784003904977 29:0.0389290771173848 68:0.0329016116388286 102:0.102135985272476 142:0.0013897877965852 264:0.0441194374012219 337:0.0409740125411902 355:0.0322560419367003 477:0.0573044635971826 478:0.0420294459664183 587:0.135758900511078 719:0.115372887043716 876:0.0517239168130559 1124:0.119167770275742 1309:0.126533980611969 1374:0.0715530327422346 1561:0.0713556418554661 2187:0.0748842124965818 5930:0.343380057729626 7029:0.424922580344818 8888:0.457840076972835 9418:0.623265129884451
+1 4:0.0403273954802298 6:0.0279694634223975 15:0.031941969203698 26:0.121059548454217 27:0.0542935796722774 29:0.101579638402264 63:0.0604559443732512 64:0.0808621092043829 75:0.0377899117681205 81:0.0567647318805897 83:0.024156882603605 134:0.133544043091621 142:0.0338468163476263 174:0.0683409855380656 176:0.14497799196025 178:0.0752420111953325 204:0.111937304690341 255:0.0867754437676512 286:0.0522399854092852 294:0.0890950546101235 317:0.0555680199017948 320:0.0884951368020965 582:0.0786362679524984 823:0.212453120912119 834:0.0939505178472559 987:0.0761144681293529 1122:0.113869687381992 4607:0.173233133835912 7892:0.867369431255688
+1 6:0.0167204546743247 11:0.187840409041034 26:0.0723707374093572 58:0.0560810568971789 59:0.0519125665819716 69:0.0848181119394733 72:0.104055328733478 75:0.0338868410160276 79:0.113390062251355 83:0.0216618775204914 98:0.108460277545665 132:0.0507049751182653 142:0.00433585741653741 169:0.0609396054725125 172:0.0655616941860526 178:0.0674707600998776 185:0.0486836253011902 299:0.0692090342093968 317:0.0498287656118872 337:0.0639153245547747 345:0.122703386656023 404:0.210619609798562 415:0.0727369545291124 455:0.0610419354877651 466:0.0772517551761725 518:0.0729083546320022 532:0.0966647812571945 663:0.0782430982213231 762:0.111307600236164 772:0.0774606088833802 804:0.0787553127490946 933:0.0971545993063125 1225:0.074573049428143 1335:0.0898646156402233 1431:0.0976551051336066 1503:0.113220285992253 1849:0.103371851318968 2365:0.34702233919436 3335:0.122521225932575 4044:0.338490278038775 5935:0.165709085765576 7390:0.169245139019387 9225:0.631038607968094
+1 6:0.0198911775114353 28:0.0489620997086207 29:0.0240802929548854 31:0.0252715060004182 40:0.0414279665371416 41:0.0305305361162326 63:0.0143315813510485 75:0.0134376164420663 98:0.0430092497606776 142:0.00515807202713535 158:0.0475899462231445 172:0.0519961656707711 179:0.108430692487985 218:0.18805055713063 229:0.0694449587468738 309:0.0487951940534143 365:0.0702518302223114 398:0.154715773934507 418:0.0684525090710199 478:0.0519961656707711 493:0.118383860581556 513:0.0496164775905871 647:0.239566926084186 729:0.0713660103137377 784:0.130216869110342 804:0.0624598607463451 876:0.0639895503238779 882:0.0497911277845143 947:0.241977752526281 1118:0.0853686141074129 1225:0.0591429596318335 1235:0.0777185761980385 1431:0.154898102868238 1526:0.106863156852665 1620:0.0801866894987396 1928:0.0956531357858124 1951:0.0826827330871269 2682:0.0975699163243085 4176:0.110588897393148 6059:0.115279476362722 6832:0.761098550912352 7319:0.141602678465112 8723:0.146836360118119
+1 6:0.0163830930666595 15:0.0561299564056882 26:0.0709105433658405 63:0.0354120258991676 88:0.125099854005427 102:0.31221451976582 142:0.0042483746382792 275:0.110169700126314 437:0.147361772491876 799:0.165278953578356 952:0.152625348018824 1159:0.166592890768294 1863:0.19737205079723 7910:0.762091530010804 7911:0.381045765005402
+1 6:0.021553257626003 15:0.0738434071042477 28:0.079579960637569 29:0.0391386149061232 159:0.064831727536558 162:0.0583662685653792 220:0.0864519058647866 252:0.0777739886705321 267:0.115377842310077 278:0.093035738472401 327:0.0906304206610506 339:0.0838218082489035 413:0.0931792781023405 427:0.114477190784385 430:0.0838742822745671 467:0.135270112476077 505:0.0775187142300759 639:0.123986130958004 1123:0.122398146413385 1426:0.127905417038492 1548:0.118595045573545 1955:0.162066830536763 2491:0.49804570319914 3035:0.168664985792127 3479:0.185677989009495 7941:0.690456637612941
+1 6:0.0167234780060642 29:0.0303682059078023 31:0.0318704718110691 63:0.0180738836636438 75:0.0169464841556236 81:0.152733242985364 96:0.0518074093602105 142:0.00216832070524488 179:0.136744415957475 255:0.0778270503476671 355:0.0503252681973791 413:0.0722991222489467 427:0.0888244744947036 467:0.104957997075221 478:0.0655735488129027 506:0.0467793964961095 507:0.0447097861435756 574:0.0626090326722132 586:0.0614669947158205 644:0.0796753188368206 647:0.075530826739255 737:0.0985321549319491 761:0.0850270621485974 784:0.164219459506614 806:0.0897610571119651 947:0.101721218364365 1380:0.0861221679293219 1431:0.195345525548361 1526:0.269535122129907 3057:0.149836111839704 3537:0.141652887172914 6832:0.799865598034147 8221:0.169275741309249
+1 6:0.017319608795372 11:0.0389142815063403 15:0.0593385438691173 28:0.127896563026366 31:0.0330065374972532 47:0.0409875379410904 63:0.0561544544180101 75:0.0526516928941349 83:0.0224381006220052 92:0.0571675011434094 96:0.0536541539083658 103:0.0824358512077663 127:0.0861251180894511 134:0.0620211375269094 138:0.0726169195729662 142:0.0179649072252213 150:0.0755209236073914 174:0.0634784684461429 176:0.0897751260640693 199:0.0404791899981988 229:0.0907004764510656 319:0.0785583627912812 339:0.0673569143274294 375:0.0613901324792868 404:0.0727222897023745 515:0.0625658244208958 527:0.0825953211032786 535:0.0821200867568695 997:0.0823565158244057 1007:0.0999618845541361 1230:0.120997602425377 1305:0.0787617385713437 1590:0.13340530530318 3343:0.140468276530397 4402:0.171647039222301 8432:0.184944028123724 8676:0.575338861022214 8686:0.191779620340738 8704:0.575338861022214 8714:0.191779620340738
+1 4:0.0383216774195365 6:0.0177189185681663 15:0.0303533076062146 27:0.0515932413034937 28:0.130845264011857 31:0.0337675150195789 63:0.0191497051468892 64:0.0768403619299651 73:0.288812989301757 75:0.0359103976650468 86:0.0688238033347101 131:0.117632371720471 142:0.0114869341150122 158:0.0635891752491677 173:0.0662197113448438 185:0.0515907736432262 202:0.220015502174368 209:0.0556535699810002 221:0.0843364392294005 239:0.0751115239736307 260:0.111701582291385 316:0.120696263069626 383:0.106127343083572 432:0.0832240805081162 528:0.0926951775435257 565:0.282700409926078 592:0.0872708385550255 923:0.148898540539223 933:0.102956197493529 1132:0.137185662862573 1138:0.0873627431706168 2025:0.138659371145179 2767:0.139431142057167 5408:0.189207978812349 6075:0.588603504155255 9637:0.41211502940281
+1 6:0.0236440633876912 15:0.0231447704184965 26:0.0292394356160038 29:0.0858706287285655 41:0.01555318246948 42:0.0202085218169074 60:0.0256372718339527 63:0.00730094286521688 88:0.103167990347829 94:0.0202771094183457 96:0.0418551920298841 97:0.0632294413777707 102:0.0321848342847134 106:0.0236431552954347 142:0.00350357142428747 144:0.0200812723486027 148:0.0296912871211479 153:0.0292958605832318 161:0.032963013449588 162:0.0365875286394337 172:0.0264884261878664 186:0.019167364182916 192:0.0272780303942275 198:0.0294104214652246 204:0.0202771094183457 226:0.078571515364008 256:0.0459728645529434 264:0.0278056118557027 276:0.0524789966278168 284:0.0205124132172098 307:0.032437036441463 309:0.0248577540157552 322:0.029273117363609 331:0.0264047051366499 337:0.0258232551455761 341:0.0282219920485313 351:0.0239705864837497 355:0.0203288852923659 365:0.0357884162303197 377:0.0259970819475642 382:0.0890026613961449 389:0.0575727754276248 399:0.0318488949342735 404:0.0283650489162886 439:0.0364049204247759 448:0.0917666324770299 493:0.0301541672582597 499:0.0251588245798327 502:0.0233149476895203 510:0.0305366640734209 548:0.0382429394851977 553:0.12953604476832 557:0.0317891020988405 609:0.0239194533479986 628:0.0734078189873039 640:0.0945741236686953 643:0.0274817277663036 644:0.0643696685694269 655:0.0255760976359684 658:0.0312395205467622 673:0.0341523684529612 687:0.0380068029573385 772:0.0312958602785938 774:0.0757819064640922 781:0.0366031709219697 801:0.0816990706386149 810:0.0497050790836596 834:0.102113139256073 844:0.0740257333621925 880:0.0794631446732547 882:0.0253651129100876 912:0.0321228416967472 963:0.0286579626933409 966:0.0337387240164815 967:0.0432810898949067 1008:0.043920505985693 1017:0.039802050678898 1027:0.0352969930222267 1038:0.269088391213363 1045:0.0175465972949967 1080:0.0341523684529612 1126:0.0720414110327968 1155:0.0786391994847441 1157:0.0462970582791124 1168:0.0878410119713861 1196:0.0423977687449217 1227:0.0369087323569366 1260:0.0901904454236698 1296:0.034386024290938 1309:0.0797461381807189 1319:0.0356517868662345 1379:0.0356517868662345 1482:0.0400167596794303 1581:0.04818858492655 1591:0.0400894491292732 1598:0.0353406065490442 1599:0.0409290882313282 1608:0.0366031709219697 1614:0.0426829560877246 1636:0.0493020652695561 1731:0.0419411316914717 1831:0.045743588931125 1980:0.0419411316914717 2144:0.0471946486503077 2160:0.0523028777103263 2163:0.0426829560877246 2252:0.727029821704374 2264:0.0917577770431468 2282:0.04891584866412 2387:0.0458788885215734 2402:0.0931734047879748 2446:0.0544393380930662 2494:0.0517731416847719 2575:0.0940777653507306 2694:0.0495013817115835 2713:0.0541022879549045 2913:0.0497050790836596 2965:0.0515192119005878 3051:0.0507966754558239 3073:0.0598868610528712 3170:0.0523028777103263 3400:0.0512720543909801 3526:0.0581971308735248 3528:0.0636446538333297 3537:0.0572206646445768 3621:0.0515192119005878 3734:0.0547891100689775 3929:0.0587268668990793 3952:0.0563373434945918 4080:0.0619549236539834 4398:0.181578831430972 4755:0.0627613326833447 4917:0.0612130992577305 4976:0.0619549236539834 4989:0.0627613326833447 6108:0.129242240124555 6483:0.0544393380930662
+1 6:0.035013868419526 11:0.0143036983886724 15:0.0545275796874582 26:0.0964407024755498 27:0.0185367249790894 28:0.0235054302901482 29:0.0346809665508125 33:0.0176141231255424 42:0.0380879745640176 59:0.0197652278005896 63:0.0688021936149416 64:0.0276076598485198 67:0.162049160846276 68:0.0390816591678021 75:0.0258042002630151 77:0.0240022725920405 81:0.0193804171641222 85:0.0195068128375007 87:0.0296536514878856 92:0.0840520921714753 94:0.0191086224602435 96:0.0197216241723397 100:0.0393391711120761 103:0.0303008948500629 111:0.0199062405687076 134:0.045594142333721 142:0.0247625618972478 153:0.0552153196970395 158:0.0456933901984221 159:0.0191492637089975 172:0.0249620064254336 176:0.0329985875703826 179:0.0173515848568349 185:0.018535838383509 186:0.0361256546160331 192:0.051412217935831 199:0.0446367325058536 204:0.0191086224602435 205:0.0251867854503279 232:0.028253252678972 242:0.0223040492578386 243:0.0300135732622902 255:0.029626569951156 256:0.0216618181130714 264:0.0262032880656044 275:0.0642147703735488 278:0.0274798460270046 284:0.0193303666626931 291:0.0256202303153375 304:0.0723067549198912 308:0.070556569688204 309:0.0234253032272397 319:0.0288756488306564 323:0.0544593931148845 341:0.0265956739693608 343:0.03372607604398 345:0.0233590876818867 347:0.026148644788729 351:0.0225892595349006 355:0.0191574147022139 373:0.022723159961885 375:0.0451302660634395 398:0.0247583393457803 404:0.0534609741087956 405:0.0302717335922621 415:0.0276939201901898 427:0.135251920520505 432:0.0299012400275786 433:0.025740698274898 436:0.0562314197169097 480:0.0468240397920276 515:0.229972813916484 516:0.0446243130656654 523:0.0373106665348121 530:0.0261668212543893 531:0.0358166262088405 547:0.0399545585807425 561:0.0282071639778364 586:0.0233987567369008 613:0.0294393146306649 641:0.0251867854503279 643:0.0258980680928006 644:0.0303301538007021 658:0.0294393146306649 693:0.0378483001587744 696:0.10539070609418 717:0.0322570890075426 719:0.274087719358197 720:0.0316911395655817 761:0.0323674120146354 764:0.0294393146306649 800:0.0280703394260477 824:0.0355996265096929 844:0.0348799664187093 848:0.0351811613900498 863:0.0336400281696472 876:0.0307197183819104 882:0.0478068502033911 927:0.0408845627876997 965:0.0635889984336724 974:0.0408845627876997 1003:0.0336400281696472 1021:0.0340790044091441 1027:0.0332629715472831 1031:0.156456493165115 1056:0.0312568655928739 1083:0.0341241403679859 1149:0.0305377578712798 1207:0.0362675025027686 1216:0.0340790044091441 1242:0.040407187767521 1244:0.044930793234503 1272:0.120669935226994 1296:0.0324044982215173 1304:0.0409832507145329 1305:0.086851210621099 1315:0.145651110719991 1321:0.0369281036884993 1338:0.120669935226994 1373:0.0369281036884993 1377:0.0303595111009401 1416:0.0384212129565736 1431:0.0371812747075114 1440:0.0394406580925732 1448:0.0399545585807425 1509:0.0402233117423313 1528:0.574433647416819 1649:0.0361525825737211 1675:0.0470370516564711 1685:0.0911560731933605 1711:0.0462771126842695 1782:0.0391946196085409 1783:0.0921940563776208 1785:0.0483174554077166 1828:0.0433644674767503 1946:0.044328224080204 1963:0.0455780365966803 1969:0.0434958051186068 2007:0.085963809260875 2024:0.0309999709376521 2102:0.0444750138985118 2114:0.0455780365966803 2175:0.0990992121210901 2188:0.100191291282916 2388:0.102604442984835 2421:0.101969188352882 2427:0.153906664477252 2456:0.044930793234503 2528:0.0366216235196617 2532:0.0466488193593928 2640:0.0440418446995197 2666:0.0429819046304375 2703:0.0492888765913879 2845:0.0523309136262077 3046:0.0487896670883434 3147:0.0485503702399971 3248:0.051974382955941 3501:0.0553426775333261 3520:0.0608972689722199 3553:0.0509845941764412 3699:0.0483174554077166 3962:0.0539232715600065 4335:0.0576856384805567 4490:0.126184392120635 4886:0.12179453794444 5148:0.118289307080695 5192:0.0660308734438829 5201:0.0660308734438829 5454:0.177433960621043 7224:0.0630921960603176 8660:0.0660308734438829
+1 27:0.0851384180046506 111:0.182857093942062 134:0.20941202682517 142:0.015164457569516 153:0.253601700080782 204:0.175530239386783 308:0.216042288299396 1528:0.879450065475944
+1 6:0.0369031478136283 26:0.159726997382423 27:0.107453115870607 142:0.00956952369166113 153:0.320070462928671 204:0.221536547115465 541:0.38053692736129 979:0.565644875979559 1550:0.587538657740863
+1 6:0.0155898470474589 15:0.0267061119528768 26:0.0337385779543479 27:0.0226969478275374 28:0.0575615731000092 60:0.0295821405606473 63:0.0168487130349081 67:0.0881858125992993 85:0.023884753846957 88:0.0297606743376957 96:0.0241477755870489 102:0.0742743844117318 132:0.0236381971075464 142:0.00505334299066679 199:0.0182182053917284 203:0.0295467887107238 204:0.0467943941041909 252:0.0281276410434957 278:0.0336471859126823 291:0.0313702140724791 292:0.0768654022781765 319:0.035356250671843 345:0.028601600067581 387:0.0550242028835183 394:0.108926584627396 454:0.0388878304578831 480:0.0286664119318015 509:0.0361768361018101 546:0.0336731105917135 550:0.0317537026684626 561:0.0345377368380849 580:0.0352654954606973 586:0.0286501721035279 671:0.0238019350410558 799:0.039319095545125 987:0.0318189760645822 1045:0.0202465344559105 1126:0.0415632981770157 1149:0.0373913891454009 1155:0.0453698011980672 1421:0.437115275382741 1432:0.0463426465588571 1439:0.0459264880214688 1446:0.0406781375667534 1620:0.0471351516448218 1676:0.0529383835301091 1744:0.0535866986806648 2171:0.0539262168749405 2219:0.0560148339973544 2261:0.0591614088133371 2280:0.0529383835301091 2335:0.115187284551335 2466:0.0616893326444236 2470:0.0580911238274948 2765:0.0591614088133371 3432:0.0714880768837929 3484:0.589532289258926 3521:0.0745645273510381 4213:0.423792637092583 4259:0.33881655632996 4419:0.0724185700115503 5452:0.0734378099130614 5495:0.0789005407517344 5982:0.0745645273510381 7121:0.0832365541524306 8880:0.0832365541524306
+1 6:0.0234999561828571 15:0.0402564860833176 26:0.101714288945294 27:0.0684262363585741 29:0.0426736297274139 31:0.0447846249934087 63:0.0253975562975399 67:0.132930279926702 75:0.0238133260895985 111:0.0734816491964771 134:0.0841528253618973 142:0.0396102258206737 153:0.203821145346111 176:0.0609052881546561 186:0.0666768963814644 192:0.0948912113699738 858:0.117881667301008 933:0.273094107921271 1005:0.123863845053794 1045:0.122077572953778 1928:0.169510666105151 6733:0.260214461424589 7855:0.819859724734755
+1 142:0.00675194605159454 232:0.231112320278569 671:0.159012936206375 1045:0.135260468793174 1421:0.365028007593583 2470:0.388087781577624 3484:0.437608026134714 4213:0.471869979271968 4259:0.45270449956635
+1 6:0.0361080932970963 15:0.0494838354250232 28:0.0533280062465152 29:0.0524550221807562 40:0.0902441223485409 41:0.033252916651964 49:0.0652322235295524 50:0.0685474141795066 60:0.109625675021952 63:0.078047578061342 67:0.122549818704018 81:0.0439693719634461 92:0.0476733508068535 97:0.0901236064585112 111:0.0451623351833556 142:0.0280900634286542 158:0.0518334990648355 174:0.052936217857821 229:0.0378186517314558 252:0.15635337289978 256:0.049145306313704 289:0.0628306536261082 345:0.0529959910725249 346:0.0601663255119074 355:0.0434634345466518 367:0.184914201533991 402:0.055043820375607 408:0.0850479941776261 418:0.0745563579391646 441:0.0509232644516526 455:0.158185260716296 538:0.0632781839437854 795:0.171112758036877 796:0.0634803775925912 808:0.0753726438465276 865:0.107170966400951 927:0.0927569584055779 965:0.0721338529825132 987:0.0589574767660227 1096:0.0946232597665498 1314:0.168419899718083 1341:0.0829492190609309 1916:0.0882022776112534 2163:0.0912567433725989 2218:0.214341932801902 2227:0.0956267554896628 2340:0.100242249034478 2825:0.292545924536398 2907:0.107637218633944 3136:0.117917016822061 3666:0.103405289345007 4114:0.115671430948314 5923:0.129406007616845 7929:0.671855356118487
+1 6:0.0173279884988716 15:0.019789084496693 28:0.0426528143014076 29:0.0839091680986371 60:0.0876808245514209 62:0.0661288311737187 67:0.0326726050579048 72:0.0359453849523349 78:0.0443740748493619 132:0.0700631047658483 142:0.00299559985697744 144:0.0343395063439492 162:0.0625656407628313 172:0.0452959087118182 180:0.0445103463764358 183:0.152440723036389 186:0.0327766992315019 200:0.111599048892957 204:0.0346743929080113 218:0.0655273000161535 220:0.0926720007728356 232:0.102536369260342 247:0.0849969986408054 274:0.0624219762141842 278:0.0997295310192519 284:0.03507676862174 299:0.095631637787934 309:0.0425074162086023 329:0.077548249074871 387:0.0407726366962912 394:0.0538093399975562 398:0.224631678189147 426:0.0519974628871611 437:0.0519536225246143 521:0.0569568473029367 536:0.0738366864720657 537:0.0645988709831791 631:0.0387648696644433 656:0.0570169926538887 662:0.0602106749029085 663:0.0540573619758111 688:0.0641200345312839 697:0.0619214625873454 717:0.058533522269505 780:0.0585999721821782 800:0.152808813980977 866:0.129197741966358 896:0.0731549348673302 1027:0.0603587907562751 1058:0.0647945312579094 1201:0.0736634794916997 1237:0.0708315218194274 1389:0.0736634794916997 1414:0.0963383460345526 1446:0.120569119592846 1473:0.0818167130797806 1518:0.0740118073804522 1855:0.0747323078576805 1880:0.0807040962641226 2118:0.0860904170519902 2185:0.0721843286878415 2433:0.07868890531821 2754:0.161950027293518 2880:0.086863657281565 2886:0.643941223769434 2915:0.0925163420025466 3402:0.114486724523253 3676:0.301273482591084 3861:0.114486724523253 4112:0.0919602049071124 4215:0.107323537294906 4382:0.116929747806487 8483:0.12791493906684
+1 6:0.0193475889088811 15:0.0331432934425765 17:0.0527135958496603 26:0.0209354246595177 27:0.0563355387280841 29:0.052700003276055 31:0.018435662327808 37:0.0915426484885272 53:0.111751990990998 59:0.0300345599744724 64:0.0839032996574381 72:0.0301011510052599 78:0.0371594498022641 79:0.065603010011456 85:0.0296418814895341 88:0.0738682414245593 96:0.0299683014015386 102:0.138265973843466 132:0.0293358952651466 142:0.00501711158557815 144:0.0862690996863131 158:0.0694341032745666 160:0.175363169584455 173:0.0361532152155885 178:0.0390359160443969 186:0.054895301543145 199:0.0452189617388421 204:0.0580736101907827 215:0.0616285156250511 216:0.0841654561507956 220:0.0388023927539199 252:0.0349074647255651 276:0.0375749414091769 287:0.04489681975654 293:0.045780514911013 308:0.0714768901316072 319:0.0438784422499943 325:0.0434335436772993 337:0.184894407560935 355:0.0582218962143525 359:0.0538539260140629 377:0.0372278013589732 389:0.0412220850714595 404:0.0812374564747711 422:0.0441066123042606 437:0.0435066654302753 478:0.0379314059332765 485:0.0334727765032273 502:0.0333869871638281 506:0.0270598177150735 571:0.0381744816767786 580:0.0437658116057525 587:0.12252186165993 671:0.0295391002239051 678:0.104688335238233 738:0.0586104228756543 741:0.0586104228756543 754:0.0589581693533502 780:0.0490724084301453 804:0.0455647123579605 819:0.0485797989687069 824:0.0540959673352355 853:0.0511834457992601 856:0.0363015023961845 903:0.107707852028126 1027:0.0505452668669085 1046:0.108685010072512 1311:0.0590761395931547 1439:0.0569965059671873 1465:0.0765587914002061 1579:0.0607135722418075 1626:0.0695165242917938 1638:0.0727408001936473 1652:0.0579411265443057 1816:0.0531532114839604 1949:0.0601878970071381 1990:0.19319453930074 2034:0.0651255708177408 2041:0.152247238297289 2047:0.0665031166695489 2134:0.197685457359514 2723:0.0630530735927585 2815:0.365384035588217 2896:0.0812924259571047 3005:0.240255264379743 3141:0.0840968282426261 3349:0.0737754718269693 3795:0.0833382466613621 3813:0.0840968282426261 3835:0.15691592697956 3969:0.0734215424632579 4481:0.0911390953510384 4482:0.0911390953510384 4483:0.0911390953510384 4491:0.095872729907937 4512:0.0795202554548033 4909:0.0898741801434721 5092:0.0911390953510384 5227:0.095872729907937 5365:0.191745459815874 5394:0.277612182720173 5885:0.206599413968662 6453:0.0979185506121944 6492:0.100338242929734 6495:0.200676485859468 6764:0.100338242929734 7193:0.100338242929734
+1 6:0.0231607055245768 28:0.0855150560516896 31:0.0441381040641088 63:0.0500618229135496 75:0.0469391031055837 80:0.0754008243523642 96:0.0717491990450753 142:0.00600590825889314 176:0.0600260457025239 179:0.0631267640414051 192:0.0935213404786503 255:0.107784361261163 295:0.393301315722348 304:0.175372701075571 346:0.0964807623744826 473:0.101958433254574 483:0.449749673372233 496:0.194214443317075 505:0.166600162637184 507:0.0619195475105517 508:0.0898487069868241 731:0.133452943567958 916:0.140323298296961 1439:0.409377922030334 1527:0.150579221993675 1808:0.349311554485454 1892:0.153759311613414 2733:0.150579221993675 8670:0.256457946874289
+1 6:0.0249517340672742 15:0.0427434471544511 17:0.0169956012550837 26:0.121497731845274 27:0.00908168317186631 28:0.0230319941580104 29:0.0339824376381339 60:0.0473465648612831 63:0.0741580508002009 67:0.176428041419018 68:0.0191472467112299 75:0.031605579134994 77:0.023518829278805 79:0.0211513288235517 80:0.0203079016277918 81:0.018990065248495 83:0.00808144003582541 84:0.0183050696467719 88:0.0476323102770898 92:0.020589787891198 134:0.0446758049908957 140:0.0220401036092491 142:0.0177934571233441 153:0.0270515983965607 154:0.0225464918887897 158:0.0223865269241814 174:0.0228627834840191 176:0.0161669722009342 178:0.0251714516159979 180:0.024035038590156 186:0.0176990137130037 192:0.0251883477250087 199:0.0145792262981657 204:0.018723744915081 205:0.0246794841953669 206:0.0297480230604403 219:0.0260787422206764 226:0.0241841342852025 227:0.0221698602518689 228:0.0235886898825484 229:0.0163336120558536 232:0.0830525639328045 243:0.0294090529509606 252:0.0225093106148033 276:0.0242293742659796 286:0.0174763572140111 291:0.025104198802821 312:0.0282697704173432 322:0.0540611949245139 325:0.0280071650410621 339:0.0242596676655203 373:0.022265479977749 382:0.0273948173835371 398:0.0242596676655203 404:0.0523841864690901 409:0.0159286729784625 430:0.0242748546729383 433:0.0252222403492457 436:0.0275494154846277 465:0.0265216558130933 469:0.0360629235654765 475:0.0252733323006073 480:0.022940465195322 493:0.0278441529422098 496:0.0261541425008031 515:0.180272641385192 530:0.0256397805454084 538:0.0273294065445773 550:0.0254110878132034 561:0.0276390275749967 580:0.0282214207043619 585:0.0386462615473567 613:0.0865390823592143 671:0.0190476388775015 687:0.0350952233343035 714:0.0322774697824293 719:0.268567163975136 742:0.0320106101425718 755:0.0325529194682852 757:0.118534138846691 763:0.0361234035093111 772:0.0577967690231276 796:0.0274167325720412 827:0.0266410699799251 852:0.0309527371818711 895:0.0973013471203358 975:0.0386462615473567 997:0.0296620135280846 1005:0.0328789732445002 1027:0.032593003271937 1031:0.0383263036677109 1094:0.0321239611564404 1112:0.0375751308358494 1117:0.0372229051371831 1144:0.0426197315694148 1149:0.0299226796620201 1159:0.0317154817090691 1216:0.0333925999555597 1237:0.0382481490018397 1253:0.038170701627711 1317:0.080909237320736 1359:0.0346240285646806 1377:0.0297480230604403 1416:0.0376473496309645 1448:0.0782996225517505 1485:0.0388943333060477 1528:0.609768959860244 1558:0.0751502616716988 1649:0.0354244130125082 1664:0.037018324643625 1675:0.0921793037259086 1676:0.0847285071991745 1685:0.0893200472971815 1709:0.0397773712496986 1751:0.0849820785461949 1783:0.135505685814819 1785:0.0946885325598041 1828:0.0424910392730975 1917:0.0776216823327911 1931:0.0406583872497053 2007:0.126348545522689 2047:0.042883071621958 2102:0.0871584351057198 2114:0.0893200472971815 2139:0.04669398827725 2160:0.0482961215214826 2188:0.0490866409809739 2238:0.0480480497627916 2248:0.0409734366827387 2388:0.150806743521077 2410:0.0435792175528599 2421:0.0499576847020109 2427:0.201075658028102 2456:0.0440258167801155 2526:0.04669398827725 2616:0.0414123983580067 2640:0.0431547730590785 2723:0.0406583872497053 2740:0.0903371238765461 2946:0.0482961215214826 3046:0.0478069668786697 3429:0.0558895526239063 3520:0.0596707027224604 3570:0.114417510188209 3609:0.0499576847020109 3824:0.0524196323303667 3921:0.0482961215214826 3951:0.0547468074657487 3962:0.0528371725265295 4355:0.0587690404484249 4385:0.0516411070934893 4590:0.0547468074657487 4886:0.119341405444921 5121:0.0587690404484249 5122:0.11753808089685 5148:0.11590677541349 5188:0.0647009083703203 5199:0.0647009083703203 5201:0.0647009083703203 6014:0.0618214205458017 6667:0.0565237594923815 6852:0.123642841091603 7989:0.063140623016
+1 6:0.0178767951773524 15:0.0153118786833396 26:0.19343924473054 27:0.0520529401255512 29:0.0324625174691883 31:0.0511025783541081 41:0.0205790283339516 63:0.0483008253721347 67:0.101122205021442 75:0.0271727710691948 80:0.029099396210543 83:0.0115799765955336 106:0.0312831900277342 134:0.0640164096853754 142:0.0220196384130133 153:0.0775250140854265 158:0.0320778792749931 172:0.0350478800150097 176:0.0463316336884354 178:0.0360684258370656 182:0.0454454322842208 192:0.108277909324104 204:0.0536588842919586 286:0.0250420477806297 291:0.0359720586055921 308:0.0660432538035957 317:0.0532747855327078 377:0.0343977630976042 437:0.080398622320285 480:0.0328716229873441 530:0.0367394990638103 538:0.0391605811282498 541:0.0460853688024993 546:0.0386127778675364 613:0.0413342400973179 657:0.046418312342739 673:0.0451883438932316 686:0.0528523211140166 693:0.0531408677703583 729:0.0481040733361586 732:0.0489040961369924 757:0.0424621895210355 761:0.0454454322842208 856:0.0335418809042853 862:0.0430035836320988 975:0.0553766163257255 979:0.411018498018393 1010:0.0497599783303114 1045:0.0232165940061943 1149:0.0428765082244963 1193:0.0544761997231444 1241:0.111464161680664 1254:0.0614475840352065 1309:0.0527576282334679 1314:0.0521144945656221 1317:0.173903488187097 1550:0.640390995005988 1557:0.0657667479187065 1558:0.161525347113019 1578:0.0624450985315319 1689:0.071584868173466 1983:0.077002916126721 1992:0.0584084516629242 2047:0.0614475840352065 2143:0.0703367408770213 2161:0.0593402415441731 2354:0.130467008934725 2448:0.0660423250687141 2791:0.0699474171588621 2838:0.0672110820745031 2975:0.0635309993633394 2987:0.152679815582969 3050:0.0695700745526436 3058:0.0819749997664471 3136:0.0729745801137998 3206:0.0763399077914843 3252:0.0842107483218142 3563:0.077002916126721 4324:0.0855027492503766 4835:0.0842107483218142 4841:0.0792386646820882 5048:0.0809934626887936 5197:0.0927105814454698 5199:0.0927105814454698 7662:0.0927105814454698 8684:0.0989746660137582
+1 6:0.0219116113530153 20:0.0247204415265824 26:0.0189678989277725 27:0.0127602714300581 37:0.0207348517208319 64:0.0760180093545597 65:0.0313519840097419 69:0.0444605494458983 80:0.0285337345557597 85:0.053712233811019 111:0.0274060313345838 142:0.00454559995855346 144:0.0260538232852134 172:0.0687331721836947 204:0.0263079060106107 205:0.034676051908778 215:0.0279183124884257 218:0.0497164017990855 220:0.0703114339338212 274:0.0947207057147878 278:0.0756660725249662 281:0.0505860378336143 309:0.0322509211145106 330:0.0435838970176478 337:0.0335035805765879 349:0.0434438065738755 416:0.0426359009567405 422:0.0399614422845405 434:0.0379206985735674 437:0.0394178788339366 465:0.0372644057874685 493:0.0391225880223735 499:0.0326415357696323 507:0.023432050612898 513:0.0983812321559118 555:0.0505022445067406 641:0.034676051908778 774:0.049160440756868 780:0.0889210988917967 796:0.0385220385609056 851:0.0497732762457947 886:0.0377460084248311 947:0.213245192402867 989:0.10599792244403 1003:0.0463141025012484 1011:0.0525947452190316 1025:0.0534172397000999 1118:0.112847852852862 1133:0.051101443606733 1237:0.053740782817959 1312:0.0569832967594818 1331:0.0495397874774688 1377:0.0417976317357963 1431:0.0511895340647933 1526:0.141261257734939 1581:0.0625207832574509 1591:0.0520128109954305 1626:0.0629833131174309 1822:0.186888070678135 1827:0.11801004899347 2040:0.0597022803162335 2042:0.0562880572548613 2050:0.056423926426431 2095:0.0650349644547293 2385:0.0689694686165013 2509:0.0814277423507047 2707:0.069363743077996 2723:0.0571273019985827 2789:0.138727486155992 3561:0.0720468866864679 4331:0.0720468866864679 4385:0.0725586359919454 4438:0.0814277423507047 4737:0.241144475983678 4915:0.0803814919945592 5242:0.0887160973026504 5794:0.0887160973026504 5802:0.621012681118553 6750:0.0970507026107417 7077:0.0814277423507047 7871:0.30577840252286 7872:0.203852268348573 9381:0.203852268348573
+1 6:0.0274296579242153 11:0.0246519524244856 20:0.0309458416309675 26:0.071233872865077 27:0.0159737170720886 33:0.0303573602777991 37:0.025956552471139 41:0.0252607115319258 46:0.091871809849359 64:0.0951617824486663 72:0.102420734170604 75:0.0111181720270947 83:0.0142143955282682 85:0.0336193485738094 91:0.0438350360632001 92:0.0724305043732821 140:0.0387662036465114 142:0.00426774587391164 151:0.0433247364620292 162:0.0594236586911017 176:0.0284359886777435 180:0.0422750826020046 199:0.0256433121052157 215:0.0698980781505586 229:0.0861872715028367 255:0.0510604162008187 276:0.0426168984354656 289:0.0477295580782605 292:0.108193066129728 293:0.0519235288497206 295:0.0465794124447551 327:0.0461361614916376 355:0.0330171724110964 367:0.0468236049987781 377:0.0422231777347115 398:0.0426701813109257 404:0.0460691128435842 424:0.0565026391074038 430:0.0426968936455311 454:0.0547371572602302 480:0.0403498441420374 485:0.0379642885149698 506:0.0306908130790553 507:0.0586659851180908 509:0.0509212559190463 515:0.0396350560081995 633:0.0570475817540155 671:0.0335027757038565 709:0.0956840596180244 713:0.0548566213523792 761:0.0557841671018746 991:0.0582755560728317 1013:0.0679746734354038 1026:0.0759046668013471 1027:0.0573276344200619 1042:0.0625058444298019 1045:0.0569966350623803 1188:0.067550634222737 1225:0.0978687853181684 1230:0.229953658888541 1245:0.0536471744238559 1373:0.063644368786208 1400:0.0836749618752732 1594:0.0962938253304278 1608:0.118898128229131 2261:0.0832735408435711 2435:0.0807285368681116 2815:0.0828825475203566 3458:0.0945209083649999 4220:0.0878702665469158 4893:0.201248259959247 5181:0.101933859734766 6323:0.108737319074555 6473:0.682812195749989 7610:0.117160877858067 8506:0.108737319074555 9594:0.117160877858067 9595:0.351482633574201
+1 6:0.0116273534459166 11:0.078374190291588 13:0.0386388406372294 29:0.0211141404605161 31:0.0443172455037222 57:0.0434035585890467 59:0.0721996825672616 72:0.0723597598678371 75:0.0353472096303671 81:0.0353970108866893 83:0.030127207798921 85:0.0356278639683708 96:0.0360202022288679 98:0.0754229479059662 100:0.0359251572433983 118:0.0380687491235314 132:0.0352600858439449 142:0.00753785522809288 151:0.0459130793015181 172:0.0911828064083573 174:0.0852313233571413 208:0.0435557219323822 218:0.0329773884759063 228:0.0439687332112497 229:0.0304454479852738 252:0.0419567970124383 292:0.0573284136355014 312:0.0526941512908288 336:0.0531525641450841 346:0.0968723447279443 355:0.0699794241818944 404:0.0488214125247331 413:0.100535002098631 427:0.0617571033503449 467:0.0729742777505103 478:0.0455914032041787 505:0.0418190839021327 515:0.0420029668551929 518:0.0507002485864375 521:0.0573284136355014 535:0.110261067095996 640:0.0542597607760284 719:0.18772595109544 733:0.0656185488985984 837:0.189261537664491 884:0.06002069385568 886:0.0500746127312611 890:0.0610549605401849 952:0.0541603731053804 956:0.230949487380016 1311:0.213018529131952 1319:0.0613632149543297 1332:0.0714392799824654 1351:0.0771916839853117 1375:0.0729742777505103 1394:0.0754064063708995 1485:0.0724980731476846 1844:0.151190371456838 1949:0.0723424458690235 2160:0.0900227733243978 2577:0.083554927911592 2636:0.103076189182759 3029:0.276058003256556 3925:0.210717773101596 5092:0.547720172977827 5777:0.113103546785156 5912:0.120600889359473 5959:0.361802668078418 7193:0.120600889359473
+1 6:0.0128269500230844 11:0.0960667472272705 26:0.0370123839319212 27:0.0124496673839115 29:0.0155283272745405 52:0.0697174555877044 63:0.0277254291711969 72:0.0798251319893514 75:0.0173306617401279 84:0.0250935893962497 88:0.0652969728688709 97:0.0533588128674194 118:0.0279975401522039 142:0.00665242990964196 151:0.101299883304624 176:0.0221625686227513 185:0.0248981438540997 218:0.024253115198847 237:0.0367429149419607 242:0.02995976850147 304:0.064750384214984 309:0.0314658855731406 310:0.043881892980548 317:0.0254838000785996 328:0.0867566266660304 337:0.0326880534348239 341:0.0357244653673185 357:0.0395797714040909 377:0.0329080899778451 480:0.0314480428252227 493:0.0381702858552853 501:0.0444620005906443 558:0.0474645097129874 561:0.037889088796824 628:0.0464611973986933 643:0.0347874108295797 655:0.032375192107492 717:0.0433291241435745 913:0.0446253202281798 936:0.0500300849259442 1005:0.0450722925554815 1026:0.0591589202624982 1066:0.056925765605769 1266:0.116498075463708 1319:0.0451293807678647 1359:0.0949290194259747 1535:0.0634519163815464 2024:0.0416405085062279 2402:0.0589712105860433 2723:0.0557367382285672 2873:0.0616825218904494 3141:0.0743386901626055 4292:0.073033835001833 5631:0.0886955395165901 5817:0.0758070546530415 7361:0.0805638109377219 9208:0.753037799947039 9387:0.298335299954983 9388:0.298335299954983 9632:0.298335299954983
+1 6:0.0312503868244837 11:0.0702144236880763 13:0.0519240565782855 15:0.00892222062393913 17:0.0851434392662341 18:0.0139402039384052 25:0.0195448297207023 27:0.0075828026320211 29:0.104037369856546 30:0.0156534280410696 31:0.0198516236079113 37:0.0369651121604492 47:0.0123258790154712 48:0.0159315488973874 53:0.100279303917464 56:0.0480845134843056 58:0.0174691693068797 59:0.016170690513872 60:0.118596844831413 63:0.00562897119551301 67:0.01473095891496 68:0.0159871017310588 75:0.00527785134354414 77:0.0196371792741949 78:0.040013501974319 79:0.0529812642123954 80:0.0678247884229593 81:0.0158558621814318 83:0.0269905759161534 97:0.0487494164513336 98:0.0168926109487399 102:0.0496285229087682 111:0.0162860584648385 138:0.0218375489257009 139:0.0426092551703921 142:0.00202592010985599 145:0.0218533749504193 151:0.0205664670404069 159:0.0156667466791089 160:0.519288096749429 162:0.0141043525903734 179:0.0141959967006651 183:0.0916404032893826 185:0.0303297598124249 186:0.0147778914136643 190:0.0223282758468128 194:0.0206329367963753 199:0.012173007299906 203:0.0197425194705359 204:0.0156334965156234 206:0.0248382797870469 215:0.0165904819955588 216:0.045314915368501 232:0.0693452071017747 237:0.0223792542835383 242:0.0182477976673714 243:0.024555254780592 265:0.0246016539516778 274:0.140719658774084 275:0.0175121883846782 286:0.014591983112896 292:0.102719569016088 299:0.0215585155320138 307:0.025008707391299 317:0.0155215894811474 327:0.0876042577219371 331:0.0203578260211192 337:0.119457195109426 341:0.0435178807049768 342:0.0486553470602655 345:0.0382219300886501 347:0.0213932086440761 355:0.0156734153191071 364:0.024128869284306 367:0.0222273972690957 369:0.023287256817331 373:0.0185906881999047 375:0.0184614003107723 383:0.0311956634679986 385:0.0272473377711632 387:0.018382985836703 389:0.0221940851004189 408:0.0153346433468362 426:0.0234438756296112 441:0.0183635159411708 444:0.0342110022603853 448:0.023583790954973 454:0.0259839997333792 458:0.0274178816002909 473:0.0229284932320871 478:0.0204223743122722 483:0.0252850156992434 485:0.0360436716858014 502:0.0179756466242807 507:0.0278490337819288 508:0.0202052483968192 509:0.0241725724617631 534:0.0396988717755935 535:0.0246953660783423 549:0.0278080525590882 550:0.0424342624392346 553:0.0332904337719353 560:0.0310220813149444 567:0.0282594940672659 576:0.025492897916689 580:0.0235636345319051 586:0.134003938731917 597:0.023287256817331 609:0.0184417158706668 631:0.0174777524277188 633:0.027080769687016 634:0.0292581556525789 638:0.0318067576460969 654:0.0272137120750411 658:0.0722562953439046 662:0.0271469317082252 667:0.0250830108051036 671:0.0159039336079838 673:0.0263312152730502 676:0.0260407099297782 695:0.0257070097333974 702:0.0310220813149444 707:0.0386470853965583 712:0.047828550322727 726:0.0239993410141122 730:0.0250333894443013 740:0.0372891388589441 763:0.0301614396829562 769:0.0378610798035213 804:0.049064335386996 811:0.0295778136217285 837:0.0282594940672659 841:0.0401179903889892 851:0.0295778136217285 854:0.0313137727229946 872:0.0297193122502741 876:0.0502659583424947 887:0.032908233195715 908:0.0276995120329938 913:0.0271802438769021 942:0.033694238788752 966:0.0260122985713156 984:0.0298636696295038 997:0.0247664656424678 998:0.115299862463932 1002:0.0388152213243189 1005:0.0274524843179827 1007:0.030060797917251 1009:0.023210216208611 1014:0.127742031705994 1030:0.038987409107725 1034:0.0328341864476997 1055:0.0284165431856039 1061:0.0337778122237894 1074:0.0340345624999187 1093:0.0330586692203469 1114:0.031870842804266 1124:0.057904375243837 1143:0.247269273088289 1167:0.0332904337719353 1184:0.0343008832849798 1216:0.0278813398398934 1227:0.0284563507940729 1229:0.0587868094971242 1251:0.0342110022603853 1263:0.0353722726965098 1308:0.0304194260887035 1321:0.0302122971733765 1379:0.0274872554193919 1382:0.0341222377991556 1428:0.0437680679321252 1439:0.0306870771255119 1442:0.0391638488681916 1446:0.0271802438769021 1476:0.033529968399219 1558:0.0313735676095011 1624:0.0329830553164443 1652:0.0311956634679986 1658:0.0380115158281532 1669:0.038987409107725 1694:0.0409851679896374 1697:0.0355855854696346 1702:0.0405384320774409 1713:0.0428139264113277 1734:0.0360323213818311 1739:0.0419723139443526 1741:0.0395303623969711 1771:0.0371530309867758 1781:0.0661173384406938 1794:0.0428139264113277 1797:0.36222372729698 1799:0.0448695434817433 1819:0.14459404030322 1836:0.0555433777628502 1838:0.0798333937478739 1844:0.0338623747165126 1865:0.0309086591360361 1884:0.0391638488681916 1947:0.036148510075805 2024:0.0253622645298753 2056:0.0339479499577655 2099:0.0378610798035213 2107:0.0333693897934102 2185:0.0325454422235393 2211:0.0401179903889892 2229:0.0740389346730926 2318:0.119750090621811 2383:0.0414617076874384 2395:0.0448695434817433 2403:0.0391638488681916 2411:0.0437680679321252 2412:0.0383222364012165 2423:0.0336116315422414 2472:0.0441166954759979 2621:0.0441166954759979 2658:0.0428139264113277 2659:0.0405384320774409 2745:0.0431180338906849 2956:0.0431180338906849 3182:0.0471948320745567 3350:0.0417124508617096 3624:0.0452779659121225 3681:0.0576724662347466 3739:0.0401179903889892 3820:0.0417124508617096 3958:0.0498223900895496 4234:0.0414617076874384 4354:0.0466652974695159 5080:0.0576724662347466 5280:0.0506640025565247 5297:0.0452779659121225 5582:0.048388508222638 5601:0.0461723125464136 5629:0.0527196196269403 5709:0.055616849164331 5975:0.0506640025565247 5978:0.0914223118974367 6016:0.0540223886916106 6198:0.0576724662347466 6220:0.055616849164331 6713:0.0576724662347466 7020:0.0981390841676085 7324:0.055616849164331 7876:0.121139391544275 7877:0.181709087316412 8182:0.0540223886916106
+1 3:0.0195921365612006 6:0.0153728273610374 11:0.0172700936419428 26:0.149710128472771 29:0.0139577779967719 31:0.0439447399239005 41:0.053089691977316 72:0.0717515448490797 75:0.0467334680991282 79:0.0521255517687578 80:0.0500470011338302 81:0.0233996558197401 85:0.0235522642609886 97:0.0479620535429997 132:0.0233091397339729 142:0.00597959704070027 162:0.0208148249775715 172:0.0301387918525614 174:0.0563432781938108 176:0.0398420521676877 179:0.0419001417914362 185:0.022379922724645 190:0.0329514701808827 218:0.021800132859813 226:0.0595996286655165 229:0.0201263605679513 238:0.0378976957138173 252:0.0554721760282274 275:0.0258440175729958 323:0.0328767705114035 355:0.0231304056373824 373:0.0274356386522649 411:0.0863792345738412 478:0.0301387918525614 480:0.0282673589000861 496:0.0322272685623201 499:0.0286259580651877 505:0.0276450509660045 510:0.0347449167365785 523:0.045048398490407 575:0.0401118743678861 582:0.0324155781957726 609:0.0272157892873458 643:0.0312689801584659 717:0.0389467767453708 754:0.0468458247309472 771:0.0407727449037406 848:0.0424772625322992 917:0.0467529161189656 926:0.0681398595437329 956:0.101781447662105 968:0.0533470009067564 1027:0.0401612658363789 1036:0.0434453785782857 1057:0.0523576765747206 1059:0.0352298324800885 1154:0.0522014506174007 1155:0.0447382273282893 1201:0.245069404574779 1296:0.039124756653773 1320:0.0540621942032792 1410:0.0530068082033796 1421:0.0538787972460136 1431:0.0448921725330871 1555:0.1150731437982 1700:0.220940300460191 1731:0.0954420643299042 1835:0.0517461975073589 1949:0.0478229175879336 2736:0.0502272938147862 2753:0.0546323362547715 2801:0.0636324370835828 2804:0.0502272938147862 2938:0.184674346130137 3029:0.182491744378258 3079:0.0565549278727529 3086:0.275469573844104 3183:0.0623395883335793 3684:0.073526546010065 3904:0.0656471258742592 3939:0.233406598790194 4108:0.071410461637738 4469:0.0761766715453395 4630:0.0688673934610259 4631:0.0688673934610259 4853:0.071410461637738 5291:0.0704929215124179 5693:0.0797247912147128 5844:0.0704929215124179 5847:0.0820778531833978 5852:0.246233559550193 5860:0.0820778531833978 5992:0.0778021995967314 6712:0.51066886608627 6719:0.255334433043135 6993:0.0778021995967314 7796:0.0820778531833978 7917:0.178774262535423 8896:0.085111477681045
+1 6:0.0256156438592757 29:0.0186062049269257 31:0.0195266237141197 33:0.0283497275661366 53:0.0789100689227173 59:0.127247622702669 74:0.0419985406374063 76:0.0426220759462881 78:0.0393584228659933 79:0.104227768026139 85:0.031395989779635 97:0.0959026354850639 111:0.128155456383858 118:0.0670938936708046 132:0.0310718963047666 137:0.0419405738262216 148:0.0900679374612629 151:0.0404595282440097 160:0.0464351451673361 168:0.0380493222577475 185:0.0298332176195819 186:0.145359558805932 199:0.0478948700034326 204:0.0307551069701847 224:0.146166015903026 229:0.0268291406588576 232:0.045473283603007 243:0.0483064992340348 253:0.111961916104718 271:0.113083415487206 274:0.276831747400832 299:0.0424111426796218 317:0.0305349570624156 319:0.046475023014768 322:0.0443997138494515 323:0.0438258818568514 327:0.0430850244311833 333:0.155052289396297 341:0.0428054298301013 349:0.101575466921059 355:0.0308336375196389 387:0.0361640593500108 389:0.0436614714236593 411:0.0383821775520332 422:0.0467166954165113 426:0.0461201307118882 436:0.0905038200465277 444:0.201905510969455 459:0.0467981851043923 471:0.0534049940628701 481:0.0590393599328196 485:0.106360753384941 489:0.0583721260564316 500:0.0530180816064181 506:0.0286611280299869 507:0.0273931046750662 535:0.048582134178894 591:0.0538702777802305 597:0.0458120212419172 625:0.0569563965708574 626:0.0483520646930323 695:0.0505722973388651 729:0.220570508041947 756:0.136045726660861 778:0.0489582618168085 804:0.0482610809981017 806:0.0549954326624747 939:0.0744824779408964 1000:0.0622004992179475 1007:0.236549272168318 1009:0.045660462557661 1014:0.0628253546124567 1114:0.062698141691821 1124:0.0569563965708574 1194:0.0785264052112412 1215:0.0600510865079082 1237:0.125650709224913 1478:0.328236459952106 1489:0.0600510865079082 1523:0.0825703324815861 1553:0.0713457642601633 1570:0.0848242581771022 1574:0.0785264052112412 1668:0.166201691395726 1679:0.0739086459482963 1906:0.0806283625964672 2099:0.0744824779408964 2472:0.17357776453648 2591:0.0744824779408964 2622:0.185688736674148 2623:0.0928443683370738 2745:0.254472774531306 2992:0.0785264052112412 3181:0.0928443683370738 3323:0.0928443683370738 3731:0.0951926362108222 3756:0.096532404907451 4437:0.0951926362108222 5254:0.103713045858529 5280:0.099669118588184 5653:0.0980134504896629 7707:0.106275927546662 8137:0.11345656849774
+1 6:0.0139602730843037 15:0.0239145781704714 26:0.0906358658205446 27:0.0203244835493278 28:0.0515447827802275 29:0.0253504951182735 31:0.0266045430051567 63:0.0452626573635417 67:0.118451902282914 75:0.0424392963973543 134:0.0999828607105921 142:0.0162904595872538 153:0.0605405139321695 158:0.0501002500953363 172:0.054738891527414 186:0.0396097624461995 215:0.0444681201341356 232:0.123912453777361 314:0.0557011590444674 345:0.0512238697885817 355:0.0840201406455618 527:0.0665750163130492 535:0.066191959089685 541:0.0719775918771839 757:0.0663187954653187 850:0.0639853776518464 895:0.0725856500184536 1322:0.0784217830928847 1916:0.0852529010587277 1993:0.204591299214953 2034:0.187965695915627 4264:0.126498160991558 5060:0.133540907881094 5739:0.447216071983376 6488:0.13152301981906 8399:0.144798329000603 9400:0.324694666352005 9406:0.649389332704009
+1 6:0.0319667290567791 17:0.11612687204045 27:0.0620529655751818 31:0.121840054673642 60:0.161753867859087 84:0.125074155874678 94:0.0639674318442027 103:0.202868671477751 107:0.305782146475866 134:0.076314768327628 142:0.0110525845509142 176:0.11046504821345 180:0.164225661037525 414:0.157461989461604 457:0.073475529541944 502:0.0735507855932957 574:0.0797842802481607 641:0.0843145017397492 871:0.122392468883858 1395:0.113781949227789 2186:0.167698629502383 2679:0.153143347385246 6748:0.235977892051945 8701:0.707933676155836 8713:0.235977892051945
+1 6:0.035216393582664 27:0.0512708460439982 29:0.127899075929151 40:0.0550096986740481 48:0.0538602961463779 63:0.0570901280614616 68:0.0540481053853027 75:0.0535290017707811 80:0.0573243570674579 92:0.0581200546787655 142:0.0159812165684547 154:0.0636433628318721 169:0.0641750829416048 171:0.0761239481367686 179:0.047992859408429 180:0.203535524180404 186:0.0499600894480195 189:0.131765457475634 199:0.123461023605647 229:0.138317659823069 320:0.0835682701713548 337:0.0673087924140304 345:0.129218099703943 408:0.05184231848889 510:0.0795943800093297 530:0.072374978077736 553:0.112546032614057 579:0.206757523807649 586:0.0647187707446658 686:0.312349298122496 693:0.104684855208057 764:0.162852776827872 823:0.100312516872175 834:0.0887199290482612 987:0.143753762442504 998:0.0974494818103093 1395:0.094011571362791 1558:0.106065621961794 1583:0.522621743324489 1665:0.0948900987852539 2303:0.122208422449901 2383:0.140170919297507 2393:0.137792918043719 2753:0.125152895476128 3552:0.154537164744539 4048:0.140170919297507 6506:0.204769904846999 7146:0.174507108156125 7427:0.188025658146179 7537:0.194975148424195
+1 6:0.0195570796155653 15:0.0670043209653866 28:0.0722095774568585 29:0.0355137502202237 80:0.0636690416608275 144:0.0581354661770079 171:0.0845493795875124 245:0.113063960274424 284:0.0593836229147545 414:0.0722508234778127 499:0.2185050782675 505:0.140678471180599 557:0.0920297398383319 1133:0.114025731036625 1527:0.127150264479432 1558:0.117805010800561 1700:0.140538462603774 2190:0.150639555880168 2195:0.152218277760496 2218:0.145116435887036 2608:0.173373007683381 2709:0.14639432174843 2862:0.165654344820545 4292:0.167030571163492 5579:0.682301779010536 8433:0.417672838361742
+1 4:0.0290325735022137 6:0.0134238853920254 15:0.0459914436659534 26:0.0581022767407976 28:0.0495643066879969 29:0.0243764673544548 30:0.0403444268122156 60:0.0509443438833022 63:0.0435235558299971 67:0.0379668972354857 68:0.0412044220624326 75:0.0680144587807557 80:0.043702123991703 114:0.0471299159408113 142:0.019145549444194 180:0.0517228345825198 229:0.0351495468306001 279:0.151986644511999 363:0.125402057833314 475:0.0543876133599701 507:0.035888410585148 535:0.0636487028103063 631:0.0450463567349011 733:0.454543272002355 890:0.352442538501272 963:0.0569468200789956 993:0.073758298518659 1007:0.0774773205145466 1036:0.0758748887437848 1936:0.271115394129432 2375:0.104481893789607 2679:0.0964649248379094 4944:0.133038234848373 9200:0.675499170830138
+1 6:0.0223827841749097 15:0.0383427199877275 28:0.0826427779274331 29:0.0406449542593399 63:0.0241901736647766 75:0.0226812566884296 80:0.0728682628557396 96:0.0693392882718714 142:0.00290209096157422 144:0.133070337486594 345:0.082128251729589 408:0.0658997306547014 502:0.0772492873874756 1765:0.326704521024159 1936:0.150684573953519 2340:0.310692205052918 3163:0.214108800134056 4811:0.382327964957387 6079:0.405634047256641 7987:0.232158047864557 8724:0.495688084176576 8750:0.247844042088288
+1 6:0.00727685697492867 11:0.0980993268899064 18:0.0389528120074226 26:0.0944887293238539 29:0.0264281258833991 63:0.0471867393926589 75:0.0294955729624306 80:0.142141010520162 83:0.0188547964269285 94:0.043684343032749 96:0.0901714602713927 118:0.0476498532318486 134:0.052116529020713 142:0.0113219699697313 159:0.0437772532493564 176:0.0754382803899112 179:0.158670272883328 199:0.0340147724533553 346:0.0606265390219814 436:0.0642755026753685 473:0.0640685954401555 475:0.058965176187117 478:0.0570658012498317 505:0.0523440684578538 513:0.0544540931504264 731:0.0838591019774215 1133:0.0848540735657504 1892:0.0966192085976832 2216:0.099135784205698 3089:0.118035871352887 3880:0.131875504091972 4475:0.822683795671672 7849:0.338497196050168 8749:0.161152931848966
+1 6:0.0220555842180906 12:0.0297362926673901 20:0.0248828701465122 26:0.0572775893340423 27:0.025688228641625 29:0.112142214890056 30:0.0795435786854397 33:0.0244096852427324 50:0.125610614822192 57:0.0329323726599791 63:0.00953462104346759 67:0.0249520038356198 68:0.0541594374156745 72:0.10980567746146 75:0.0178797548385264 79:0.119656270894095 80:0.0287212188739646 81:0.0537148377443858 83:0.0228589651791611 94:0.0794422957678264 98:0.171681081572443 111:0.027586105943795 113:0.0472267489607026 117:0.0455405944033491 118:0.0288845954937845 130:0.0657470811612448 132:0.0535070544804909 142:0.0171580026268519 156:0.0612300779107751 166:0.0329132370025432 172:0.103777187577676 174:0.0970036718536106 176:0.091459010511825 178:0.0355996786122453 197:0.0491864268937025 206:0.0420722680780266 209:0.0277098626540024 218:0.0250215346839215 224:0.0419506258399799 227:0.062709128729256 228:0.0333611978964668 229:0.0231004293529074 246:0.0455949913524748 253:0.0482007300584056 299:0.0365168462793543 307:0.042360946517736 308:0.0325924760417301 314:0.035200503512551 337:0.202342319177589 355:0.0265483816374274 404:0.0370431596697887 411:0.0330478263253193 414:0.0325924760417301 415:0.0383782871370765 478:0.0345923958592253 493:0.0393796476696991 505:0.0317301553175301 515:0.0637393523603405 521:0.0434978315885419 526:0.0529403252877492 535:0.0418301939925345 580:0.0798264257765511 582:0.14882249009043 629:0.0538758096717016 684:0.0825670007624681 685:0.0466184148552358 723:0.045272217536043 800:0.0388999296282248 856:0.0662119375897837 913:0.046039199035495 916:0.0534510888723098 963:0.0374256885998409 1047:0.0497111103197136 1068:0.0519792411722854 1081:0.0490406022284163 1083:0.047289298458092 1118:0.0567946665886004 1170:0.0587293634997144 1242:0.0559963574637953 1290:0.266576128961683 1359:0.0489683435015103 1365:0.0533471972403624 1446:0.046039199035495 1487:0.132675206389224 1620:0.0533471972403624 2002:0.0683046186851615 2191:0.0790439161613033 2238:0.0679537738067295 2306:0.0620509551957774 2341:0.0614301370244209 2385:0.069422640765252 2509:0.081962773078202 3084:0.0782088746841554 3399:0.183011419368428 4160:0.0760021820386707 4296:0.0915057096842138 4448:0.0782088746841554 4817:0.070654547331436 5512:0.0892990170387292 6073:0.0915057096842138 8370:0.195376771737193 8719:0.0976883858685964 9175:0.332955662605965 9176:0.554926104343274
+1 6:0.0285867954495494 15:0.0326469809624846 26:0.123731531656923 27:0.0277459641051306 37:0.0450859101802653 64:0.0826468688560445 88:0.072762083095274 94:0.0572039724901234 97:0.0594590867714674 134:0.0682457898049788 142:0.0197679264077743 174:0.0698493834112256 176:0.0493926315074897 178:0.0769027260469804 192:0.0769543463056109 198:0.0829700577981543 199:0.0445418191643822 204:0.17161191747037 226:0.0738863170066954 265:0.0900190392121756 308:0.070406541686244 317:0.0567944974302597 323:0.0815153900301867 356:0.090884868411893 387:0.0672645313246582 436:0.0841677780085697 457:0.0657067518491526 706:0.19401356939011 834:0.0960241601892171 1045:0.0495008952336243 2189:0.512254003451224 2219:0.410853190989796 3432:0.174781704591665 7199:0.578713469724851
+1 4:0.0154243784052239 6:0.0249613699518264 15:0.012217129674228 20:0.0201151042827802 26:0.0308684830363648 27:0.0103830746799645 28:0.0526648884012945 29:0.0388520697239287 31:0.0271826790755531 47:0.0168777335405514 59:0.022142405042049 60:0.0541312562320381 63:0.0693693717449721 68:0.0437820366018228 75:0.0433615331764186 83:0.00923949821037262 84:0.0209281585326793 142:0.023117309893055 158:0.0255944824852377 179:0.0777538865522328 185:0.0207651561329017 204:0.107034146678968 205:0.0564320341536068 213:0.0368146359374691 218:0.0202271995360162 228:0.0539378271666109 229:0.0186741940409097 242:0.0249865722635456 252:0.0257348608936321 256:0.0242670995470394 267:0.0763554183812168 286:0.019980692857569 309:0.0262426802019901 317:0.0212535958741615 319:0.0323485425369744 339:0.0277360414710935 355:0.0214614898535229 356:0.034010869920535 398:0.0277360414710935 408:0.146983283557873 457:0.0245887332962235 472:0.064977038553376 502:0.0246139178847137 506:0.0398986663843539 513:0.266843770051136 530:0.029313922446181 541:0.0367708586508965 582:0.030076714323605 608:0.0389105591112977 685:0.0376859369835365 686:0.0421701134124351 716:0.0682870783396985 742:0.0731953646414749 850:0.0653758264481778 856:0.0267625885105163 991:0.0378796899926281 1045:0.0185241893195118 1055:0.0389105591112977 1086:0.0449596048435558 1120:0.05747237417664 1150:0.0389105591112977 1155:0.0415102539455223 1159:0.0362602624276133 1175:0.0377823338935902 1229:0.0402481683110084 1245:0.0348711959713671 1271:0.0454774085863003 1317:0.0925034090599673 1332:0.043818405207265 1341:0.0409588851364936 1389:0.0454774085863003 1395:0.304618859740446 1412:0.0447599202142604 1418:0.0452669874177663 1558:0.0859191808819475 1740:0.0510597377134666 2018:0.0564415050579704 2252:0.649453198814145 2298:0.0498240537335081 2824:0.104097766141427 2968:0.0543895559232252 3018:0.0671905553516958 3316:0.0549332628624603 3644:0.0632234007109178 3675:0.059041199892195 3785:0.121821047840715 3851:0.0693738380989741 3884:0.0625919424460267 4090:0.383390647576116 4315:0.059041199892195 5829:0.0693738380989741 6556:0.0682214244703654 7592:0.152311467503843 7829:0.0829376294048688 7953:0.0761557337519214
+1 28:0.236725011908273 31:0.122184252605402 111:0.200477293013066 179:0.174749157158941 185:0.186675866295673 204:0.192444419166738 513:0.239888838885116 1395:0.342310149079178 2252:0.530772177510778 4090:0.574438102045142
+1 6:0.020859431919591 15:0.0357331487872943 29:0.0378786950551924 31:0.0795049853561768 63:0.0225438120986362 75:0.0211375906610141 80:0.06790891411275 83:0.027024053363995 142:0.010818308993977 174:0.0764523498513456 179:0.113708836324392 229:0.0546190285230641 245:0.120593157478718 339:0.0811234817903148 345:0.0765386764327904 404:0.0875854454338945 506:0.0583486064379857 561:0.092423943357188 571:0.0823149597970748 1707:0.476864469591701 1776:0.1207954002996 2175:0.162354853806258 3266:0.712614131795477 3748:0.196521619685173 5413:0.222743331512926 5700:0.211140039183128
+1 6:0.010990832015926 15:0.0753111661401257 28:0.0811617430996879 102:0.104726785281542 186:0.124738031300087 252:0.0793198744727174 339:0.085487904401364 411:0.0823426629830904 513:0.164492937667444 553:0.140499853923595 594:0.105237065480968 643:0.0894232661721188 795:0.130211221892208 1243:0.146331324132001 1446:0.114712241975405 2171:0.152071791114454 3677:0.19486688616099 4254:0.222499319391175 7131:0.243402448189978 9384:0.255629994685022 9620:0.766889984055065
+1 2:0.0223010231950804 6:0.0163886622289091 15:0.0187163456195024 26:0.0945795309805222 27:0.0477198538818651 28:0.121021992843025 29:0.059520426186522 32:0.0819031853209782 37:0.0258475195140822 41:0.0251546015206388 48:0.0334199733435711 54:0.0409037039054342 60:0.124391652639231 63:0.0118080212110841 67:0.0309014683653223 80:0.0355694012510667 83:0.0141546866135753 88:0.0417141265457601 134:0.195624794607147 140:0.0772067250729249 142:0.0127494564094822 153:0.0473810231842553 174:0.120132872568148 176:0.0566330812281362 192:0.0441175293983166 204:0.0327947420670832 221:0.0520032269765699 274:0.0590381672922903 307:0.0524613356653252 322:0.0473442399324654 355:0.0657569613025102 409:0.0557983164338937 420:0.0555498404245229 469:0.0631644087162371 475:0.0442663803492922 485:0.075609631850764 574:0.0409037039054342 631:0.0366634797408607 653:0.0558060717508688 667:0.0526172036304978 671:0.0333620441213914 726:0.0503439648034743 755:0.0570166172597812 757:0.467129689403247 799:0.275558562387261 858:0.0548064235622186 966:0.0545665917644039 975:0.0676891393816087 997:0.103906359251921 1118:0.140673158313745 1122:0.200165282018304 1126:0.0582573049300547 1312:0.142067750934305 1374:0.0729337780243115 1579:0.0685711094970749 1744:0.0751099354997962 1816:0.0600322885016808 2054:0.0850383931998233 2398:0.0794220502941805 2845:0.0898117495427468 2975:0.155313161268765 3718:0.0875011591699007 4002:0.0864670134572032 4787:0.097890858418467 5149:0.0958893339969289 5176:0.0933134416968052 7599:0.116668732494062 9170:0.549792523964777
+1 6:0.0403740744544776 15:0.0106404019437747 26:0.0806539037383841 27:0.0271291434943454 29:0.135351477551141 31:0.0118372579724131 41:0.0429018158282225 51:0.0210929272666322 60:0.0235725714381738 63:0.0469907246214472 67:0.0351354960785994 80:0.0202215076545917 82:0.0465899491924147 83:0.00804705993458846 85:0.0190326006052982 88:0.0474296726726263 94:0.0186440902690202 97:0.0193790838786964 98:0.0201456765025662 100:0.0191914163055957 132:0.0188361315113391 142:0.0161070546473641 158:0.0222912900532048 168:0.0691977757908174 173:0.023213428811482 176:0.0804909729485205 178:0.0250643671049451 180:0.023932788612887 185:0.0723409224821132 186:0.0176237184833727 194:0.0246062891792745 204:0.0745763610760806 215:0.0197853655848925 226:0.0240812500243075 229:0.0162641255245478 232:0.16539848262829 252:0.0672406541905708 255:0.0578126911743648 274:0.100691103293029 278:0.0268118086990412 284:0.0377208877031648 308:0.045894222432 312:0.0281495050234796 347:0.0255129690728839 351:0.0440802255374765 369:0.0277717603215816 373:0.0443415161305533 377:0.0239034042062709 387:0.0876922311041799 426:0.0559170794655368 427:0.0329909837887199 455:0.0226761559762611 485:0.0214923599421742 493:0.0277256982122648 505:0.0446799685939827 506:0.0347493935703784 510:0.0561547812120109 518:0.0270843512479911 534:0.0236719069282662 541:0.0320252568562499 543:0.0687517677710451 550:0.0253029838406829 553:0.0397012819057164 599:0.0291200613522108 609:0.0219930976454772 641:0.0245744926144914 643:0.0758054517514268 651:0.0401828489804325 654:0.0324543459599805 663:0.0290661278210659 712:0.0855585769404322 749:0.18076495811461 771:0.0329484826059789 772:0.0287754448645841 804:0.0292564077725819 834:0.0312964822658727 848:0.0343259044491425 863:0.0328222363046934 915:0.0384818524348053 1008:0.0403833633958418 1009:0.0276798837498933 1027:0.0324543459599805 1033:0.0372031148066015 1057:0.0423102736885734 1177:0.041937010976671 1189:0.0423102736885734 1198:0.0369961053684122 1228:0.0382417951666535 1250:0.041937010976671 1301:0.0407991272904852 1319:0.0327805664442764 1377:0.0296214688770419 1380:0.0319872992457173 1405:0.0879841321646625 1441:0.0404854181422716 1518:0.0397954427474826 1540:0.0403833633958418 1576:0.0688523163750791 1614:0.039245479709656 1639:0.041937010976671 1651:0.0425685197992229 1685:0.177880123041038 1723:0.0521966284772994 1738:0.041937010976671 1820:0.0792163003295755 1924:0.042834837394705 2021:0.045331518234206 2047:0.0427006382515217 2090:0.0500550602481111 2098:0.631348708463314 2107:0.0397954427474826 2123:0.0507108814109063 2280:0.0421840273872879 2440:0.0545139033329793 2540:0.350385421736778 2555:0.041937010976671 2596:0.042971183815076 2638:0.056283295841717 2639:0.056283295841717 2643:0.0451521122503848 2953:0.0545139033329793 2997:0.107020437579954 3128:0.0594168513307056 3451:0.0569653773318425 3773:0.0550638663708059 3850:0.0604205358737081 3954:0.0503766633009882 4111:0.0526123923719428 4517:0.0556517870191651 4690:0.314360049362856 4767:0.0577068421248254 5220:0.0604205358737081 5401:0.0577068421248254 5583:0.0577068421248254 6721:0.0687786424133
+1 6:0.0362113217937976 11:0.0542405465253946 30:0.0725535108611367 80:0.157183669627782 96:0.149571340839133 97:0.075317715427277 158:0.0866361408642146 159:0.0726152426394481 229:0.0632112841659164 255:0.112345863437399 304:0.0913972922191601 312:0.109404367205813 328:0.122459825613032 365:0.12789145485836 405:0.114792365561606 496:0.101216860549939 505:0.260476179957144 515:0.0872071737942367 952:0.112448558370769 1033:0.144591644865744 1808:0.364094639873039 1892:0.320533005393862 2382:0.629589004329858 4189:0.187895300908356 8129:0.239249675350335
+1 6:0.02727292884457 11:0.040851824584074 26:0.0786965031848205 28:0.0671322680955553 37:0.0430137341699989 41:0.0418606258280033 60:0.138002912985535 63:0.0393002574324831 75:0.0368488146922836 94:0.109149685847314 98:0.0589702750230325 118:0.0595289541956472 134:0.0651091715606062 142:0.00942969020916306 158:0.0652508991141711 176:0.0942450319013331 179:0.198226747115544 192:0.0734174774775747 227:0.0646193721593939 252:0.0656087816136212 276:0.070622319450597 312:0.0823990225786349 346:0.075740725725214 351:0.0645156548277533 405:0.0864570488669045 475:0.073665185395262 603:0.0973307372885298 671:0.0555189095194792 731:0.104765162994571 799:0.0917132705467933 1664:0.107898781033679 2216:0.123850319714859 4475:0.856482281133708 7849:0.211442247061919
+1 6:0.0292819474041626 12:0.157916752378221 27:0.0341048032349644 29:0.127615589220653 30:0.140807326578421 31:0.0223214209144573 33:0.0324073537278412 39:0.235276633177336 41:0.0539330697096716 42:0.0350380900506828 57:0.0437224421075559 63:0.0632928761153465 75:0.0356069036034613 83:0.06069710142076 84:0.0343708752381627 86:0.090989525422712 88:0.0447188736626309 108:0.271063530091936 142:0.04252211840271 165:0.0568615937314615 168:0.0434952273398331 186:0.0332329023547561 195:0.0815573064668209 218:0.0332196715054619 228:0.0885835380722254 229:0.0306691289895909 231:0.25113327065602 239:0.248255748338254 286:0.0656296539714362 296:0.052810462286673 316:0.159568276742728 317:0.0349053496996619 350:0.170962549190914 351:0.0415608610760741 385:0.0612745140851998 408:0.0344849404238556 427:0.0622108293361738 457:0.0403827352066965 502:0.0404240965308459 507:0.0939414353281875 508:0.0454380823507883 534:0.0446379220276444 537:0.0654979916204669 546:0.0505977640591065 567:0.0635506772003945 576:0.0573290846095764 582:0.0987915868447068 643:0.0476485742474486 655:0.0443445403990096 674:0.0775487534509112 686:0.069257106620953 709:0.0510727404784414 758:0.0613504899504263 811:0.0665153481266749 829:0.0434451685281335 1248:0.075403055454784 1254:0.0805202456472181 1407:0.071385019484595 1511:0.070689288933766 2001:0.0767349661167885 2151:0.0893254243070241 2241:0.0818273777914984 2270:0.0861800310130797 2726:0.586075399021493 3711:0.118557236766674 3972:0.100903783597468 4741:0.103833484182286 4885:0.116080210216542 6331:0.108817322027981 7863:0.13621068993588 8288:0.129695325624406
+1 6:0.0130057088727177 31:0.0495707983543395 48:0.0795642324741603 142:0.00337256972800453 176:0.0674142913616391 221:0.123806108342282 238:0.256497460525693 373:0.0928443208704213 409:0.0664206128289311 420:0.132249669142524 671:0.07942631811818 799:0.131206600870871 1001:0.152447260920484 1045:0.0675620567702594 9619:0.907478874717657
+1 6:0.0262992106930903 15:0.0450517354598706 26:0.227660468356237 27:0.0765769941410397 31:0.100238509327254 64:0.228099797440245 94:0.0789395576528257 97:0.0820515394973838 114:0.0923338923923884 132:0.0797526652113612 134:0.0941768940925021 142:0.0340988417940018 174:0.192779598646118 176:0.0681601698760248 178:0.106123174880787 192:0.106194409101153 199:0.0614662120274175 204:0.315758230611303 208:0.0985160650114792 226:0.101960631879403 265:0.124223245806372 317:0.0783744958452548 351:0.0933184042491782 387:0.0928227903999138 436:0.116148702186109 441:0.0927244793829686 472:0.119804259671881 706:0.133866099499867 856:0.19737877716737 994:0.150548581911744 1045:0.0683095701760195 2171:0.36388219465091 2941:0.188987860721189 6832:0.503144953011012 8221:0.266201706625061
+1 6:0.0205578951163829 27:0.0299298300669719 29:0.0746622672268216 68:0.0631021617328377 80:0.0669272461100055 142:0.00266548080614222 172:0.080608479792053 179:0.168097650499821 183:0.0904277030150308 185:0.0598567970979878 186:0.058329327588109 205:0.0813343467426926 265:0.0971043765573926 284:0.0624225250144573 423:0.0778785450098357 437:0.0924565297507026 502:0.0709510816669192 535:0.0974742646004279 561:0.091087894488396 641:0.162668693485385 768:0.128459041132309 856:0.0771447524900967 866:0.114959980588234 1017:0.121123949572432 1191:0.171443466758398 1245:0.100518295574723 1273:0.138004659719518 1377:0.0980383545844806 1426:0.121998548614861 3315:0.193680770462166 3951:0.180424995361555 4604:0.171443466758398 7131:0.22763708851658 8698:0.22763708851658 9616:0.717217942880204
+1 4:0.0493463354378297 6:0.0228164255360745 15:0.0781711344410146 26:0.0987557798668586 27:0.0332179795238969 28:0.084243889139999 29:0.0828648094024812 68:0.140069376382337 75:0.0231206806200746 80:0.0742800037921463 94:0.0684856500088641 97:0.0711855143832969 132:0.0691910783305977 134:0.0817051171746727 142:0.020708210053032 143:0.100523617855741 174:0.0836249689907827 176:0.118267537277163 192:0.0921311614968163 198:0.0993332821520516 226:0.088458060283107 242:0.079938117696912 265:0.107772452598178 317:0.0679954189214685 337:0.174435357377858 387:0.0805303364395923 430:0.0887898873161777 455:0.0832967047106155 506:0.0638227655986961 586:0.0838615691874171 658:0.105511038406421 1038:0.30294741066353 1126:0.121659422956829 1227:0.124658721039452 1426:0.135401546910406 1453:0.160478745956941 1527:0.148340887208853 2021:0.166517027506402 5650:0.211975512661218 8123:0.709967549654505
+1 6:0.0086510879356864 31:0.0659466300226291 64:0.0750331037990534 67:0.0489359014975615 88:0.132117889258033 100:0.0534587162696332 142:0.00224335309760816 153:0.0750331037990534 158:0.0620935803414841 180:0.0666660623491552 204:0.0519341103296463 274:0.0934934840330828 322:0.0749748534413335 365:0.0916619582546181 437:0.0778143447637614 744:0.106745376173374 799:0.174551014940445 880:0.101761243120474 975:0.107193257552458 979:0.663011674123697 1064:0.0801555402713948 1387:0.140326889226677 1550:0.41320447399782 1676:0.235011727670139 1928:0.124804630876903 1983:0.149055575590078 2792:0.132602334824739 2838:0.130101391331212 3727:0.306766687997657
+1 6:0.00822557157004582 15:0.028181551051439 26:0.106807624266061 27:0.0239508916551475 29:0.0298736723375288 67:0.0465289178777683 81:0.0500820152700192 86:0.0638995114599709 88:0.0628097391827699 94:0.0493796554397487 97:0.0513263168575244 132:0.0498882847286601 134:0.0589111811485682 142:0.017064084053651 176:0.0426367438996203 178:0.0663840280538721 192:0.0664285877317044 198:0.0716214746553882 199:0.0384494220812468 204:0.197518621758995 226:0.0637802012112463 252:0.0593632314147801 256:0.0559775105111552 274:0.0888948707913048 276:0.0638995114599709 285:0.0877191117530362 308:0.0607763869855594 317:0.0490261880757342 322:0.0712871060287579 363:0.0768409124195688 389:0.0701018018562846 436:0.072655371581231 442:0.0699970709514587 582:0.138757381278886 757:0.0781517661216176 774:0.0922736163365201 834:0.082890046575934 883:0.0959168577216477 936:0.0962487676664856 1045:0.0854603987867275 1614:0.103943299869697 2229:0.116928963384158 3335:0.120547811933092 3708:0.128738396400933 3962:0.139346128971727 7767:0.175670288833632 8244:0.175670288833632 8255:0.702681155334528 9615:0.38262850595573
+1 6:0.0102995316776833 11:0.0231413353398568 20:0.0290495489454631 27:0.0449846491292967 29:0.0374058911224568 37:0.0121829961915025 42:0.0154052219197359 57:0.0192234771520196 59:0.0159886538492846 64:0.0893304790332056 67:0.0145651295940196 68:0.0158071317617465 72:0.0640964121728041 75:0.0208737501042442 79:0.0523848436319276 84:0.0151118671095811 92:0.0169980308422981 96:0.0159533816366041 111:0.0161027230803865 118:0.0168606849938533 132:0.0312334507415427 142:0.00868016034638026 153:0.0446652395166028 172:0.020192475601418 178:0.0207804525804298 187:0.0240096556395412 199:0.0361079200401583 200:0.0248748853483597 204:0.0154575071502279 205:0.020374305735524 208:0.0385817408814109 215:0.0164037196551517 229:0.0134843177092767 232:0.114274290627447 256:0.0350457191842465 265:0.0243247082625092 268:0.0247760724155873 286:0.0288554365401476 288:0.0267434332415641 293:0.0243708849597374 295:0.0218625645700773 308:0.0951253535517871 309:0.0189493927615493 322:0.0446305646058267 331:0.0201286539431578 337:0.0590562209069742 377:0.0396358348518809 394:0.0239876804755563 398:0.0200277235191287 400:0.113443074685776 404:0.0432460995691434 405:0.0244876646354666 409:0.0131500176687364 411:0.0192908704407055 436:0.0227435958335043 440:0.0290625173720023 455:0.0188004261985995 471:0.161047999940623 480:0.0189386474978428 533:0.0322493709193393 539:0.0239221621433353 582:0.0217178835510744 599:0.0241429616608765 607:0.0252582529609428 641:0.020374305735524 647:0.0232586828637104 671:0.0157248998786985 706:0.0262129184874936 719:0.0554293341995703 732:0.0281755920082103 739:0.0789110722094399 772:0.0238572458257399 774:0.0577695438170683 819:0.0258610610722668 827:0.0219937054030644 852:0.0255532297880501 853:0.027247091297277 863:0.0272123737358912 881:0.0293378123108469 882:0.0193361591183841 890:0.0811238993148752 896:0.032611758532763 906:0.0301291291151403 963:0.0218463418085862 1058:0.0866543157256024 1083:0.0276039858357641 1115:0.0724414928607075 1124:0.0286262671139055 1134:0.0313236549973759 1137:0.0362207464303538 1164:0.0273170424580789 1302:0.0367347919614019 1308:0.0300769885867861 1403:0.0367347919614019 1410:0.03551365584234 1552:0.0367347919614019 1576:0.0285421588643025 1608:0.0279030785194393 1637:0.0835329181465689 1827:0.0693381364286308 1891:0.0367347919614019 1949:0.0320405376999512 1990:0.0685636950028446 2026:0.0620407782951663 2067:0.0321094651688691 2135:0.0359771012679254 2137:0.0363457941111519 2171:0.0712533968127162 2240:0.0699481600395279 2272:0.0429466977726427 2296:0.0375836126689571 2341:0.10757507645079 2353:0.0394673467145208 2392:0.0394673467145208 2426:0.0392737727009028 2659:0.0400820829217479 2769:0.039666374228622 2822:0.0456525416828858 2823:0.148585849409269 2992:0.0394673467145208 3035:0.0402994849833327 3323:0.0466635505062623 3604:0.0429466977726427 3627:0.0451965764163106 3688:0.0439824527142265 3749:0.0466635505062623 3835:0.0417664590732844 4030:0.0485171565337807 4091:0.0451965764163106 4126:0.0846639231308314 4244:0.121571369518008 4448:0.0913050833657716 4449:0.0570232358643493 4613:0.0500936678492884 4689:0.521261444313714 4748:0.0492615295804765 4812:0.0492615295804765 5194:0.0534142479667585 5196:0.0534142479667585 5198:0.0534142479667585 5247:0.0429466977726427 5448:0.0534142479667585 5478:0.0451965764163106 5799:0.104252288862743 6059:0.0447682628857196 6113:0.136957625048657 6381:0.0492615295804765 6491:0.0534142479667585 6514:0.0570232358643493 6663:0.0521261444313714 6697:0.0570232358643493 7316:0.329944555693598 7321:0.0549907592822663 7656:0.0534142479667585 7962:0.0549907592822663 8307:0.0570232358643493 8401:0.0549907592822663 9416:0.479102805721953
+1 6:0.0222309026664695 26:0.0721661066004931 29:0.060553728367405 31:0.0211830743733277 41:0.025591297059899 63:0.0360390417937458 67:0.0628758643523089 85:0.0340593231202247 88:0.0424383031132849 96:0.0344343884230046 142:0.00432359762698674 176:0.0288081288812604 199:0.0259789047056288 204:0.0333640739867375 229:0.0291050665117337 232:0.0493307989473564 252:0.0802192411986836 255:0.0517286410299945 278:0.0479804139673946 309:0.0409010932976185 373:0.079350271507865 387:0.039231869782935 394:0.0517759259871911 405:0.0528551108998241 439:0.0599008681895552 475:0.0450348652255829 493:0.0496158425077489 502:0.0767251015577478 505:0.0399779704020145 530:0.0456878439115939 543:0.0615165190023695 643:0.0452185949960287 663:0.0520145754036289 678:0.0601448635785202 742:0.0570401044236164 755:0.058006452157409 800:0.0490114283953233 824:0.0621577288075469 848:0.122854159058206 856:0.0417114075669524 858:0.0557578884730338 882:0.0417359045786102 1149:0.0533195951265591 1228:0.136869331237468 1269:0.0567748910174846 1283:0.0688642542090113 1309:0.0656073802119663 1380:0.0572420860053105 1426:0.065963413188789 1576:0.0616064861451973 1685:0.0795802517081336 1776:0.0643687420867759 1924:0.0766540315684663 2018:0.087968120880389 2098:0.75320972013681 2107:0.0712149575014778 2638:0.100720390192531 2639:0.100720390192531 3058:0.101940992376556 4207:0.0920199311429662 4691:0.45004424647502
+1 6:0.0105236477723681 15:0.0180274838300812 26:0.136647746312564 27:0.0459635076054996 29:0.0191099185430549 33:0.0291172211976805 63:0.0227468455408586 67:0.148820643892454 80:0.068520513452275 142:0.0150091432454307 150:0.0458876184143645 153:0.18254859077123 172:0.0412637210178971 176:0.0272743402169296 192:0.0849875359239519 199:0.0245957482460941 208:0.0394212731400684 265:0.0497080197296575 308:0.038878106163606 356:0.0501861258649677 387:0.0371431052747788 457:0.0362829079922864 622:0.0580724244148161 744:0.0649254029394159 827:0.0449445695424355 844:0.0576587145634565 880:0.247575677750456 1056:0.0516695076403841 1201:0.067106044528035 1418:0.0667955489931259 2170:0.0814775230119452 2792:0.1613045984347 2907:0.0784267509489411 3254:0.0906596018719754 4205:0.198291527132114 5202:0.545765331103413 5460:0.639124807877545 9378:0.122382000753873
+1 6:0.0131130977200481 26:0.0567571020169741 27:0.0381821956178643 31:0.0249900535696606 63:0.0141719684491587 64:0.0568666293574919 75:0.026575919514273 94:0.0393601977473354 97:0.0409118687273861 132:0.0397656227996845 134:0.0469577140400667 142:0.020402503320878 176:0.0679709348413425 178:0.0529142710332036 199:0.0306477808099574 204:0.196800988736677 226:0.050838777826277 240:0.0590242611320682 256:0.0446193045192668 265:0.123878361245913 301:0.05942741470496 317:0.0390784512422021 337:0.0501259034529931 356:0.0625349296073852 387:0.0925650838244669 399:0.0618223621909808 436:0.0579131176063536 485:0.0453732804966377 515:0.0473701097559319 561:0.0581014960324363 719:0.211713590091989 796:0.0576341976733605 834:0.0660711095583783 987:0.0535278301597892 1433:0.063213877176011 2866:0.0898679062873274 3758:0.335983937012623 7281:0.129958154671507 9160:0.824825151048403
+1 150:0.218651630662453 153:0.217458153345606 208:0.187839900014678 387:0.176984572676259 880:0.294920653561058 4205:0.472423360071488 5202:0.520107531087032 5460:0.507564953496282
+1 111:0.19143802696393 232:0.271711121419796 458:0.322289470372621 502:0.211298659561042 593:0.294843722267799 742:0.314173519779849 858:0.307111150200007 1685:0.438323317195035 2098:0.518579320854559
+1 6:0.0297867729309537 26:0.096694023759192 27:0.021682984737004 28:0.0549900682879995 63:0.0160960138935876 64:0.129174159468866 75:0.0150919885007928 80:0.0484861575440205 86:0.0578488747574785 134:0.0533328888158013 142:0.0154482880810306 176:0.0385994759828629 178:0.12019626557524 199:0.0348086511407655 204:0.178815608309677 208:0.0557901849753801 265:0.0703483016802593 337:0.0569312048148048 355:0.0448180496886205 387:0.157698157526045 436:0.0657756435852195 442:0.0633690571077038 524:0.0841808469072265 561:0.0659895970507776 757:0.0707515852179453 834:0.075041198492051 868:0.106238899113345 987:0.0607949912559049 994:0.0852564831092137 1045:0.0386840821876591 1433:0.071796056344806 1625:0.100554545975135 2010:0.109133154784353 2146:0.114717185122339 5867:0.477108273842418 6150:0.144873452133602 6597:0.150751478468446 6751:0.16491411761565 7285:0.692794921712042
+1 6:0.0318842028693782 15:0.0364127194990298 26:0.0460012066719238 28:0.156965822573642 29:0.154396278508144 60:0.0806681398113204 63:0.0229725488585645 75:0.021539583992623 80:0.0692004014477032 96:0.131698119221284 134:0.152235504043331 142:0.00551202544724499 186:0.0603104582943284 192:0.08583081631583 278:0.0917531945295564 341:0.177602017490009 365:0.112608899370868 405:0.101075102761065 475:0.0861204063904752 513:0.159063668930888 731:0.122478730817627 903:0.118332712183182 947:0.258582571661521 1064:0.0984729907620567 1274:0.148008695652217 1424:0.0988308048324175 2024:0.31051990186457 6690:0.235368685032129 6691:0.706106055096387
+1 6:0.0179084580296904 15:0.0204519981749816 26:0.0516751622974057 28:0.0440816390670318 29:0.0433600188301871 41:0.0274873030692714 63:0.0258060663303413 88:0.0455824687857799 98:0.03872215929825 142:0.00309594932590823 174:0.0875155631506366 232:0.105971230621214 255:0.0555611085293939 278:0.0515351831141647 373:0.0426145840998312 394:0.111223793461581 427:0.0634122229407418 441:0.0841876950469884 455:0.0435860133003176 755:0.062304029635229 772:0.0553095032466395 848:0.131956168358694 856:0.0448017190592233 863:0.063087872107608 1149:0.0572699331082815 1332:0.0733538864877618 1426:0.0708505053714138 1685:0.341904748619882 1738:0.0806074504037755 1776:0.0691376884018695 1952:0.0836875920965106 2098:0.809013462805833 2107:0.0764911256872469 2638:0.216365109122633 2639:0.108182554561316 3850:0.116134775354371 4207:0.0988374965840901 4691:0.120846772327389
+1 6:0.0277908583443385 30:0.0278410762552119 31:0.0176539785792461 58:0.0310705408113796 80:0.030158172087336 81:0.0846033725508237 85:0.0283850469573559 132:0.0280920347425067 142:0.00480438287958247 185:0.0269721480024859 220:0.148628586989887 231:0.04965523249716 299:0.038343823046377 309:0.0340869796431949 339:0.108080181642759 408:0.0545481761114065 411:0.0347012443240992 423:0.0350929509105686 430:0.0360492806218674 502:0.063942715562405 510:0.125623092816275 518:0.0403933544304889 565:0.0492661559320681 663:0.0433489579369302 781:0.0501932532320806 827:0.0395632196654827 844:0.0507550614707652 885:0.0649344017580143 953:0.0506122639925402 991:0.0492024523307391 1010:0.309422912837745 1064:0.0429154360267851 1273:0.0621864564669914 1334:0.0717219716094389 1463:0.136319316525076 1576:0.0513428583397398 1614:0.0585303505035691 1980:0.172539301170205 3050:0.144202736394046 3819:0.0937667421045699 4370:0.0766894297131446 4841:0.164243496199232 4930:0.574852236697311 5100:0.0886137501677421 6990:0.0937667421045699 7188:0.10257584000482 7875:0.430915327766592 8706:0.10257584000482 9153:0.349613789525695
+1 6:0.0247850818373235 37:0.0390900048765595 42:0.0494287440052703 63:0.0357152729082821 75:0.0334874517130732 79:0.0560268251707004 81:0.0503019490895026 142:0.00428475512965024 172:0.129577972006555 178:0.0666755517228751 179:0.0450361068443093 186:0.0468821394279559 205:0.196117202543406 351:0.0586305121025806 475:0.0669454189899627 502:0.0570268618003218 582:0.0696833652884324 768:0.206497654822072 840:0.104399764068008 1641:0.145016411787903 1746:0.0965041449614617 2924:0.127929473343257 7148:0.171383392121117 9148:0.623601205654479 9151:0.623601205654479
+1 6:0.0411438132142654 26:0.0593605887747687 31:0.209090914185777 60:0.104095275341721 63:0.0592881850090172 75:0.0277949749641254 94:0.082331353418094 100:0.0847483173300903 102:0.261360819387808 142:0.00711279332786873 176:0.213266423145435 180:0.10568597604584 373:0.0979049388562781 406:0.128592708367714 414:0.303999824532296 530:0.112742287572297 539:0.127416663424855 546:0.118490807366374 587:0.173700079272282 641:0.108519708246422 755:0.143140484432441 757:0.130303474568754 952:0.127765633857993 1190:0.148417367181675 1359:0.152247488173205 1395:0.439340220690214 1613:0.157272324599347 6748:0.303722983231604 8701:0.303722983231604 8713:0.303722983231604
+1 26:0.107964827779812 63:0.053916570034064 142:0.00646836160596805 204:0.149743972830027 232:0.221405510016338 441:0.175893206577965 643:0.202949198086208 1685:0.357170501849577 2098:0.845135218740921
+1 6:0.0291456929592206 15:0.0499278881148477 29:0.0529257373849053 96:0.0902900010199916 109:0.320743605885467 232:0.129349702180224 252:0.210341919847 322:0.252591821318747 473:0.128305641945477 493:0.130097111515405 726:0.134298003096639 737:0.171721930881577 764:0.13477975874617 1880:0.203616548777603 3614:0.232015726770384 9422:0.677884379040719 9943:0.322729571800757
+1 6:0.0258808885348235 11:0.0581500537325908 15:0.0443351307133948 31:0.197288178498615 80:0.0842565149160325 159:0.0778491466584335 179:0.141081776803909 237:0.222408121419199 265:0.122247318205386 318:0.312394114750827 327:0.108827902291808 346:0.10781225356538 365:0.137109513977169 457:0.0892308368523359 496:0.217024578720551 549:0.138180134414544 574:0.0968923686373789 727:0.138544303976257 781:0.140230932345163 852:0.128421429739806 1018:0.280846756917224 1223:0.159014005279383 1395:0.138180134414544 3887:0.674968022567566
+1 6:0.0268636199273938 15:0.0230092969820845 26:0.0872048647075162 27:0.0195551046169575 29:0.0243908576041483 31:0.0255974337792898 57:0.0501393849793907 60:0.0509744180453328 63:0.0290328328339355 73:0.145956281038427 83:0.0348026687048054 117:0.208006032716373 131:0.089171111456371 134:0.048099015563005 142:0.0243814476269186 162:0.0727467412364109 166:0.0501102510294953 174:0.0492292138366863 185:0.0391083386263133 229:0.0351702967919522 262:0.0628539382899363 313:0.0761574541189487 323:0.0574513098154567 331:0.0525003006059645 345:0.0492848012678902 346:0.0559530133480391 387:0.0474074334588028 391:0.069501356347843 408:0.0395461374195345 480:0.0987929634554746 506:0.0375718474186008 512:0.229433323798527 592:0.132311158193317 733:0.075801934034185 757:0.0638083117953471 886:0.115691448675833 890:0.0705301194404455 1122:0.0820256709134281 1135:0.0912206906452784 1365:0.0812208609328822 2040:0.457468457412568 2756:0.111196045120473 2808:0.595363248964927 3846:0.135957340207896 4232:0.143428934742583 5118:0.139317019549118 5424:0.278634039098236 8430:0.143428934742583
+1 6:0.0286253408725821 16:0.315017215889115 29:0.0519808287178289 31:0.109104472051933 42:0.0856310252680158 159:0.0861043992650731 180:0.220589453438028 200:0.276537650272408 229:0.224860626448831 245:0.165489657294414 457:0.0986930227610633 478:0.112241316448264 574:0.107166996081488 1380:0.147414097280999 4033:0.497695167307002 5870:0.305670059291677 5874:0.305670059291677 6362:0.289746893240699 7803:0.305670059291677
+1 6:0.0320849025989749 11:0.0720894418916463 15:0.0549628869479536 26:0.0694361518876876 60:0.121763875638826 63:0.0346757293382952 83:0.0415670054369476 134:0.114895329342557 142:0.0208002063344405 158:0.115145429805417 174:0.117595062411042 391:0.166019639567878 685:0.169542924499138 764:0.148371680087851 851:0.364411976520027 993:0.176292314387841 1829:0.263743421769914 1936:0.216000826380045 2062:0.256958084502288 4332:0.6138342705002 8742:0.355275370927846
+1 6:0.0158267314907677 15:0.054223811401595 60:0.120126539830761 63:0.0342094513636621 142:0.0123123059361236 174:0.116013783846056 180:0.243924434982209 325:0.284236361113754 345:0.116144781433173 1783:0.229201128769244 2238:0.243812660138317 5118:0.328315106669518 5991:0.320397671421058 8983:0.700996100407367
+1 6:0.019773380884404 15:0.045163592431083 26:0.0570564291284023 31:0.0251218467776226 67:0.186417443760921 75:0.0267160763041559 85:0.0403923000833713 88:0.0503292642760413 96:0.0408371048790294 100:0.0407293497360909 142:0.0170917521537882 153:0.0571665340971163 215:0.0419898699362037 229:0.0345168509761234 291:0.0530512103500957 414:0.0486999449788876 539:0.0612354086821983 574:0.0493514666180823 580:0.0596386500093126 858:0.0661254880276984 1005:0.208443536404731 1045:0.102718759502181 1140:0.0669459725042595 1395:0.0703811083034121 1919:0.0962056802285415 3136:0.107622136455245 4203:0.114596785080436 5599:0.116860341911504 5795:0.533725294253405 6468:0.653217657188984 6470:0.130643531437797 6700:0.291933574533324
+1 6:0.0310370243954208 11:0.0697350337823617 12:0.104613647027104 40:0.096962646429057 63:0.0670864718433687 75:0.0629018009249006 86:0.241107949660396 108:0.143655155172097 142:0.00804835245412205 144:0.184521607258672 145:0.13022502446473 180:0.23917410374967 229:0.162536748580616 231:0.166365929754229 317:0.092493693742949 319:0.140777880795369 320:0.147301309198695 457:0.107007904944352 478:0.121697641690465 480:0.114140969279301 515:0.112118988472179 531:0.349234662361408 574:0.116195810089058 658:0.143525929064947 739:0.158529206302973 994:0.177669971316609 1782:0.191086112711449 1886:0.267379176483638 2164:0.200292886101965 3513:0.253391483290802 4265:0.281235652408922 8961:0.343672240255827
+1 4:0.0409495796361344 6:0.0378679805181702 27:0.0275656193270736 29:0.0687645613712312 30:0.056904611590669 37:0.0447928582454273 63:0.0409257855461858 83:0.0245295828346273 120:0.0788734960188971 142:0.0294591565917988 185:0.0551286017745156 199:0.0442523037429315 218:0.0537004018220633 220:0.0759458069831817 228:0.0715987150643019 229:0.148732164615439 278:0.0817295369706906 283:0.141935390277306 345:0.0694737306177863 367:0.0808028378800383 414:0.0699489092865895 455:0.0691229655193407 457:0.06527966740782 502:0.196039586963711 507:0.0506195335097921 518:0.0825603192793561 574:0.0708847055807749 592:0.0932554207947944 609:0.134081643449912 631:0.063536543609987 709:0.0825603192793561 712:0.0869351132518313 778:0.0904696420509377 784:0.185926016437666 796:0.0832179673052565 850:0.0867818637836027 876:0.0913654449430416 1858:0.121890861439357 1947:0.13140999658657 2241:0.1322759337559 2433:0.128972987853444 7439:0.808731529295568
+1 6:0.018853335905876 15:0.0645932314608034 60:0.143098782459352 180:0.0726427517749521 199:0.044063799318478 304:0.0713786641471266 309:0.0693738857505457 319:0.0855150494112466 322:0.0816964355773327 346:0.0785375134436611 409:0.0481423249202835 427:0.100136924490487 457:0.0650015913509279 480:0.13866909450008 507:0.0504039061814207 530:0.0774928738615461 534:0.0718509024102551 539:0.0875792361434007 574:0.0705827533772087 764:0.0871843420744811 781:0.102153404367868 863:0.0996247283652017 936:0.330908982778342 1198:0.112293596136574 1216:0.100924753692116 2223:0.119665628252154 2907:0.140503170728428 3542:0.491690957134985 3733:0.153921802854094 3735:0.305814713581142 4353:0.16891884249915 4886:0.180346872747689 5148:0.175156513350592 7868:0.438499847002528 8659:0.195550009571613
+1 6:0.0270151814466652 15:0.0462782256904514 28:0.0997467349691347 29:0.0490569361535607 63:0.0583932656164226 83:0.0349990214434852 142:0.0140108600054391 162:0.073157170160496 174:0.0990139190376629 229:0.0707374472938228 437:0.121497357244212 507:0.0722243892491925 1001:0.316660203232229 1014:0.165644709501613 1169:0.152223882614354 2771:0.194866805977976 5357:0.228826709852616 6814:0.525573227454513 7687:0.576952578579559 8732:0.299138467992534
+1 6:0.0137478472518099 15:0.0235506831273069 27:0.020015217010493 28:0.0507604540406191 31:0.078599148719449 42:0.0411258772652081 63:0.0297159468580227 75:0.0278623472392823 80:0.0447567978772009 96:0.0425892478907732 142:0.00713003403666006 158:0.049337902018735 172:0.0539059597837239 174:0.0503875288574417 179:0.0374710998601215 186:0.039007042376778 205:0.0543913746526118 215:0.0437914730956512 312:0.0623040441988531 345:0.0504444242062724 405:0.0653724234260845 647:0.248366103854153 693:0.0817341727851819 781:0.0744902337980469 784:0.134999671973321 804:0.0647539813379387 1002:0.102454872666188 1014:0.0842954976554384 1033:0.0823426382564144 2837:0.103375093893756 4601:0.239027271974053 5489:0.131508888997415 5911:0.304459177756842 7657:0.14259501210301 7665:0.570380048412041 8435:0.146803676619925 8436:0.146803676619925 9138:0.518850866278282
+1 6:0.0203990869119768 12:0.0458382189112091 15:0.0465927426697888 29:0.0246951689295504 31:0.0259167988925093 42:0.0813635598648676 52:0.110873780068996 81:0.082800923398476 88:0.0519218762934257 96:0.0421293483664131 102:0.129582594649462 144:0.0404256139984287 179:0.0370664686009099 186:0.038585825259214 205:0.0538040299923779 245:0.0786211983107 255:0.126576601953984 312:0.184893763990973 345:0.0498997006469698 346:0.0566511083444728 373:0.0485412313739682 405:0.129333000063185 413:0.0587930364676972 481:0.548521786646841 571:0.0536655720229004 574:0.050913137346675 586:0.0499844417120794 737:0.0801255174054241 886:0.0585674336491595 1047:0.0766292147660077 1305:0.123687747565026 1642:0.210581870373547 1776:0.0787530513383504 2198:0.207426674728739 2401:0.0920864294319043 2604:0.20269702970385 2998:0.32287835905627 3537:0.11519093319882 3947:0.120558253803542 3948:0.120558253803542 5200:0.141055201435058 6794:0.290436837469063 6795:0.145218418734532 7834:0.316301105705301
+1 81:0.153515339151324 144:0.149900546724664 179:0.13744463865521 481:0.290564420411938 1047:0.284145620866829 1642:0.390424960527799 5200:0.523040956515705 7834:0.586431521815395
+1 6:0.0202074243783698 11:0.151342410033359 27:0.0196130577996712 28:0.0497405408352199 29:0.0244631419439646 31:0.0256732939081856 60:0.102250969965229 63:0.0291188740543165 75:0.0273025182066259 83:0.0349058093147832 96:0.0417335160587242 98:0.043693047413089 134:0.0482415610053267 142:0.00873346574267247 150:0.0587420255199911 172:0.0528228449599452 176:0.034914646792004 205:0.0532985065465933 237:0.0578843508234086 245:0.0778825016166537 308:0.0995379051407278 312:0.0610521894109244 345:0.0494308608849994 346:0.112237669535066 405:0.0640589166976409 480:0.0495428723191994 505:0.0969043648617874 571:0.0531613494787367 644:0.0641825414399937 737:0.0793726866665408 1033:0.080688154550301 1113:0.0817802258617563 1135:0.0914910307664787 1365:0.0814615657251093 1808:0.0677266532246501 2163:0.0851177474970866 2215:0.114108640339306 2376:0.0934987829558988 8312:0.447512668575226 9630:0.783323133765117
+1 6:0.00501085448980047 18:0.0268229640365661 26:0.0650650789481286 27:0.0291808130202074 28:0.0370026294844467 60:0.0380329072876668 64:0.0434604257695966 72:0.0311837280341701 75:0.0101553476121112 77:0.0377847666919849 80:0.0326261701172943 96:0.0310461005424118 136:0.0634641580910951 142:0.0142932630293652 158:0.0359656378660107 204:0.0300811033078989 215:0.0319224814703162 234:0.035946066515202 291:0.0403317819738855 317:0.0298657780246785 327:0.0421408084255474 337:0.0383088136358088 377:0.0385666857950206 400:0.220766053414907 409:0.0255906101902157 455:0.0365865955756172 457:0.0345523484534593 471:0.156703842238654 475:0.0406035076485734 496:0.0420185954286574 593:0.0482633324251826 744:0.0618287030995659 862:0.0482155102148069 1122:0.0612007916261971 1359:0.0556261039078195 1410:0.0691113993900916 1583:0.0743625693203864 1863:0.0603672714837409 2143:0.0788613776294889 2373:0.0802607748268469 2433:0.0682650478219522 3292:0.0871213403100805 3534:0.08559211333193 4288:0.0802607748268469 5067:0.107014843653186 7414:0.642089061919119 9134:0.630374134269181
+1 6:0.00644959147284923 10:0.0543991633572404 11:0.0579646390725434 27:0.0187796635493033 64:0.0559389605147262 72:0.0401373272423326 85:0.0395249303661503 98:0.0836729018231237 142:0.00334494600366711 177:0.0673149308991287 204:0.0387181124064625 216:0.0561137422192656 232:0.114494136387756 322:0.0558955334899135 373:0.0460419302053175 375:0.13716520262096 382:0.0566486898652409 404:0.0541616228278592 471:0.0672324295668104 739:0.0658857372499964 834:0.0649932874606599 882:0.0484333971175813 1192:0.0802554466366147 1216:0.0690512739031194 1403:0.0920136598072738 1407:0.157231418594643 1448:0.0809563898966724 1620:0.078000116664249 1685:0.0923507462606304 1783:0.0934023330426662 1873:0.0854037766142534 1913:0.102684582249521 2021:0.0941397940699755 2265:0.112135974954137 2392:0.0988581892038855 2815:0.194883426257896 2842:0.206611151842933 3136:0.105311097423765 3348:0.109259958112016 5013:0.391698202005278 5961:0.261132134670186 6240:0.115571857587975 9391:0.300015327599584 9421:0.600030655199167
+1 6:0.0230555193204336 15:0.0394951456694101 26:0.0748429827601045 27:0.0167830357013655 28:0.042563341278519 29:0.0837331514150767 134:0.0825613067489734 142:0.00448397395815706 174:0.0845012767310685 176:0.119506865190719 178:0.0465170787321873 179:0.0314200343864451 185:0.0335644659664636 204:0.0346016562597709 205:0.0456079183234719 242:0.0403878954239852 245:0.066644621073103 308:0.170350613624763 322:0.0999055953952796 404:0.0484032340184058 411:0.0863652931166489 527:0.0549746256965947 561:0.0510771822539662 571:0.0454905520264853 593:0.0555162894603239 644:0.0549214658618832 757:0.0547630501540005 772:0.0534044856873919 895:0.119875868206926 933:0.0669823215039495 997:0.109631358547807 1086:0.0726719855597979 1122:0.0703979748681449 1527:0.0749476771820935 1576:0.0638916715571311 2139:0.0862909283957305 2161:0.0765305006757646 2227:0.0763237652360195 2974:0.595859225172015 3691:0.176695446585113 4437:0.107098404171426 5530:0.107098404171426 5876:0.123096908942444 9129:0.435063612244009 9131:0.435063612244009
+1 6:0.0228630201842593 15:0.0261102573045549 26:0.164929090582748 27:0.0665716314884114 29:0.0553560213872623 31:0.0290471970018882 41:0.0350919528549979 63:0.0329455843941873 67:0.0862182507750226 75:0.0154452644026064 134:0.163743943166586 142:0.0237148564584398 150:0.132923433484715 153:0.132197890746887 174:0.0558638293546151 176:0.0790060385118974 205:0.0603028277205876 265:0.0719950270084588 306:0.0598026410416934 308:0.112618861846011 345:0.0559269082975643 587:0.0965226144141807 755:0.079541090849325 757:0.0724077506776063 764:0.0704843387770251 997:0.217432010831768 1045:0.0395896059375586 1149:0.0731142588845465 1193:0.0928943874988557 1557:0.112147356033433 1614:0.0963036526885455 1817:0.325004679275026 1931:0.0993463113858834 4033:0.530011256175567 5038:0.143598597661572 7847:0.354505993099034 8192:0.316185516677322 8193:0.316185516677322
+1 6:0.0145906443564064 15:0.0999777304961599 26:0.0631523311966069 27:0.0424844570596974 29:0.0529903758036685 31:0.0556117237691303 60:0.110744509784522 88:0.111412873711016 134:0.104497551985899 142:0.0113506997465676 144:0.173488870149614 180:0.112436818768894 185:0.0849648501294603 457:0.100609792000392 527:0.139162376005069 574:0.109248342825295 733:0.164683548086198 827:0.124627932087828 906:0.17072753264686 1007:0.336845554413512 1312:0.379444032608195 3287:0.247174289708001 7878:0.678712281995511
+1 6:0.020433500622978 28:0.150891081383681 31:0.389407816585722 81:0.124410915582639 144:0.24296287742257 159:0.122927045924488 179:0.111387001660883 186:0.115952761200702 245:0.236261502035821 404:0.171594054980609 485:0.28281188017905 561:0.181073455063124 705:0.467127315549115 1442:0.307293935812443 2837:0.307293935812443 3184:0.323423061992488
+1 6:0.0323198170364452 28:0.159110349640494 29:0.0391264248704469 31:0.0821238913281414 37:0.0509734772657333 41:0.0496069848420964 60:0.0817702587721336 83:0.0279142296771481 144:0.192148078046778 172:0.0844850215684767 174:0.157941403116935 180:0.0830198064367877 221:0.102554727024803 227:0.0765772644773127 228:0.0814780663155936 237:0.277741229093278 245:0.124565513915037 250:0.451582991098699 346:0.179513275717277 351:0.076454354129061 408:0.0634376617572736 457:0.0742871022941885 571:0.0850264267425604 574:0.0806655362024968 593:0.103765540503196 643:0.0876531639368865 772:0.0998183664023118 793:0.129296176592662 809:0.16276474529707 829:0.0799206805115698 842:0.156017443245518 884:0.11122381103829 1081:0.119771881481112 1135:0.146331037517752 1140:0.109423957152979 1955:0.162016353521903 2024:0.104920781152479 2261:0.163532577978012 2423:0.139047466880065 3930:0.374619509775973 5999:0.238584381974718 6524:0.230080529784219
+1 6:0.00905671241940368 28:0.0668792467800689 29:0.032892213868487 75:0.0367099316211161 81:0.110284958515587 83:0.0234665143967276 142:0.00939414973527418 173:0.0676940728452413 179:0.0493699077762447 204:0.0543691505056779 303:0.161839287833299 345:0.0664628628512683 437:0.244388502764815 586:0.0665757319409667 852:0.0898791365742425 1010:0.100837271840384 1129:0.105608636331272 1149:0.0868881028584834 1159:0.0920939590995811 1461:0.154700791530501 3050:0.140981904635343 3477:0.140240059440622 4591:0.504847156297894 9127:0.68361002248148 9611:0.210645321872011
+1 6:0.0533597897850715 17:0.0138458812452653 25:0.0190700817540803 26:0.0109978990802142 27:0.0147972295675239 28:0.0562907280243588 29:0.00922820732455692 31:0.00968471177707701 37:0.0120224073070646 42:0.0608086384214636 52:0.0414318376299784 53:0.019568699766391 59:0.031555802176453 60:0.0578580514394413 63:0.00549224231798216 64:0.0440764893541326 72:0.0632515320492694 75:0.00514965124002384 78:0.0195207828571939 80:0.0496329826862989 91:0.0203032609379705 96:0.031486187625024 97:0.031710188678217 118:0.0166384376458726 132:0.0308217502917611 136:0.0321818900636268 142:0.00329451681717363 144:0.0302128686193038 160:0.230306582364874 173:0.0189921828113263 174:0.0186257244039103 180:0.0195807306284693 186:0.0288378667339316 194:0.0201317584832615 201:0.0304952964095332 218:0.0144131928290999 229:0.0665328779598005 243:0.0239588025503317 252:0.0183377591064707 283:0.0190477359566037 286:0.0142375408173721 291:0.0204517480826059 293:0.0240496426998755 299:0.042069709438977 322:0.0440422715070502 327:0.106845415170931 330:0.0252706587454824 337:0.233111110140491 341:0.0212304111795148 347:0.0626206895104079 377:0.0195566896293223 387:0.0179364592989368 396:0.0258083115496667 398:0.019763730185534 404:0.0213380278254029 408:0.0149621616802361 423:0.0192514743036741 442:0.021622633988668 444:0.100140029765038 449:0.058088117670039 471:0.0264875271079972 480:0.0186890097054119 485:0.01758408171337 489:0.028951099019897 493:0.0226839185755504 499:0.0189260981189642 502:0.0175390144404479 506:0.0568607800795817 508:0.0197144587236136 510:0.0229716574653766 521:0.0250561223463336 548:0.0287688171900787 555:0.0292820301565505 557:0.0239138225049952 575:0.0265200301171894 576:0.0248736701402285 591:0.0267182960705774 592:0.025029763589627 603:0.0272040963138644 625:0.0282489329812191 634:0.028547468984971 641:0.0402114879297067 653:0.025956971400319 663:0.0237805977599488 671:0.0155176237628956 673:0.025691624594175 702:0.0302685485272399 706:0.0517347913123936 712:0.0700001773768927 727:0.0544081926277288 731:0.0292820301565505 733:0.0286794328523682 739:0.051913942800638 744:0.0313525710538977 763:0.176572872353703 787:0.0291858647306104 792:0.0278829775775078 796:0.0223357101421835 814:0.0282073096764284 819:0.025520176212525 841:0.0391435160837995 861:0.101770645965497 862:0.0733484676595267 884:0.0524656362592405 887:0.0321088853877247 890:0.0266848577194554 904:0.0309721922076006 953:0.0555302802654717 965:0.0253804544452542 984:0.0291382749018404 987:0.0207443175623784 991:0.0269917382877513 996:0.0282908062773269 1003:0.0268536766902334 1007:0.0293306149026028 1009:0.249110787685801 1014:0.0623195756339927 1019:0.0365187585636499 1048:0.0345130728581159 1093:0.0322556672901247 1112:0.0306114971468196 1124:0.141244664906096 1140:0.0516166230993335 1145:0.0667600198433585 1168:0.0660797012262734 1201:0.0648112120667007 1227:0.0555302802654717 1294:0.0288593623957674 1305:0.0462202215054173 1319:0.026819584285652 1327:0.0330398506131367 1335:0.0546255024653449 1340:0.0682291421865175 1377:0.0242349528206934 1379:0.053639168571304 1395:0.0271325891963064 1547:0.102343713279776 1553:0.0353856956272133 1574:0.077894224059934 1598:0.0265854942868467 1669:0.0380403968562882 1721:0.0332934015676186 1741:0.0385701616975548 1749:0.0397682815556072 1757:0.0412159188807022 1820:0.0648112120667007 1943:0.0304952964095332 1953:0.0446008224923155 2042:0.0326367393387931 2108:0.0382125508583875 2120:0.0375480594509243 2142:0.0330398506131367 2307:0.0356220532737355 2389:0.0406992467810192 2414:0.0404545942104438 2423:0.0327951980425613 2450:0.0417739672611412 2472:0.430450917950958 2499:0.0380403968562882 2542:0.038389063649528 2547:0.0402182365639216 2577:0.0365187585636499 2602:0.038756089591874 2683:0.0359923287537046 2700:0.0819055954710021 2708:0.0395537451564584 2734:0.0420706879067669 2745:0.420706879067669 2826:0.043402702634263 2834:0.0450507775006298 2900:0.0423806003876326 2957:0.0402182365639216 2960:0.0399896297607149 2984:0.0393456137948241 3318:0.0409527977355011 3319:0.0455317877177274 3323:0.092096919634821 3329:0.0466065081978495 3404:0.0494333634290237 3429:0.0455317877177274 3579:0.0972243878067671 3613:0.0417739672611412 3708:0.0397682815556072 3728:0.0437796529666753 3756:0.047877632731804 3811:0.0460484598174105 3897:0.0406992467810192 4234:0.0404545942104438 4418:0.0466065081978495 4585:0.0395537451564584 4939:0.0450507775006298 5056:0.17671261892613 5280:0.0494333634290237 5302:0.0455317877177274 5306:0.0455317877177274 5583:0.0472131413243408 5621:0.0466065081978495 5622:0.0910635754354549 5623:0.0455317877177274 5639:0.0455317877177274 5740:0.0455317877177274 5943:0.054265904365732 6226:0.0514390491345578 6571:0.0503643286544357 6837:0.056271590071266 7539:0.168814770213798 7989:0.0514390491345578 9942:0.056271590071266
+1 6:0.0221395664577283 15:0.0303408616445468 17:0.0241281983824594 27:0.0128930215488486 29:0.0160813178372098 31:0.0337536691085171 42:0.0264916848774438 60:0.0336083228994122 67:0.0250470149287217 80:0.0288305822108097 110:0.0427335455987316 135:0.0403421136836084 142:0.00688933443218397 159:0.0266381326715694 172:0.0347241151938828 174:0.0324576793252679 186:0.0251268141463066 199:0.0827909431635294 204:0.0265815974964996 205:0.105110401516004 243:0.0835024843417974 245:0.0511975634741967 254:0.0854670911974631 265:0.0836602691455669 295:0.037596093988186 325:0.159044078311473 333:0.0446704949050005 346:0.03689079761781 369:0.0395952682048635 387:0.0312565477471247 431:0.0493737167088106 496:0.0371303332733656 527:0.0844649378525025 531:0.0996474909216291 537:0.0495218818036302 550:0.0360754385013398 572:0.047983701052729 613:0.0409524032259924 643:0.0360262506317262 673:0.0447709036351803 767:0.0423558140181601 806:0.0475324783164286 854:0.0532427343932739 882:0.0332515452729761 902:0.0610712772800737 963:0.0375681964163429 1003:0.0467959263121615 1037:0.0495218818036302 1043:0.0495218818036302 1045:0.0230021240752778 1073:0.0592813722764466 1116:0.0516330720087105 1129:0.0516330720087105 1133:0.0516330720087105 1140:0.0449742454059841 1162:0.0513698980969966 1190:0.0479182055453304 1218:0.0538659164875227 1223:0.0544108233819794 1237:0.380099085121537 1242:0.0562095778194594 1254:0.0608799443935129 1281:0.11458047053498 1341:0.0508600587936284 1620:0.0535503302455159 1858:0.0570109267090497 2124:0.0618682440642245 2270:0.260636835058577 2307:0.0620759309540615 2382:0.0769860193548823 2471:0.0685647058720641 2709:0.0662902003590322 2946:0.0685647058720641 3197:0.240735787199054 3540:0.0744187433571581 4330:0.0793448959514242 4777:0.0822748671575043 4915:0.0812177322477015 5491:0.0812177322477015 6676:0.0980603592133379 7337:0.0980603592133379 7691:0.0980603592133379 9123:0.668446951742534
+1 6:0.027966962474997 11:0.188511345173125 31:0.0532975430635548 63:0.0302252692899943 75:0.0283398995287701 111:0.0874494620197594 142:0.00725224068526333 229:0.146459244625035 237:0.1201674273566 309:0.102908942439494 327:0.235199487493051 398:0.217530120649165 480:0.205701175732876 539:0.129914685816848 565:0.148735031912412 582:0.117943854792021 586:0.102792321910839 1055:0.152585195454594 1134:0.170110158656924 1150:0.152585195454594 1389:0.178336663270774 1534:0.236888581346735 2736:0.182751657629229 2792:0.21433630947402 2804:0.182751657629229 5110:0.233231708512537 5526:0.477713217692158 5570:0.231526177756942 8847:0.290078095832903
+1 6:0.00752151155126253 15:0.0257693778433336 27:0.0219008377367052 31:0.0573359493244691 96:0.0466015535527369 134:0.0538687343164175 142:0.00195043748978857 144:0.0447169607102669 176:0.0389872921314123 224:0.0715311174072852 322:0.065185353611651 373:0.0536940845539682 388:0.078215347475336 411:0.0563507193897234 413:0.06503416130836 513:0.112569778973421 625:0.0836204229492491 643:0.0611962887332466 644:0.0716691624510599 987:0.0614058098942312 1155:0.08755685229006 1296:0.0765707705421939 1576:0.0833747336535635 2091:0.0995978574813166 2415:0.10978579829615 2782:0.143898256879096 3398:0.130772938794684 3852:0.292658045561373 8296:0.166571040573971 8421:0.642535826440291 9122:0.567731472806536
+1 6:0.0300313057395644 26:0.173311693895941 27:0.058295973226568 29:0.03635594924487 41:0.046094398583105 63:0.0216375375986336 64:0.173646143123235 94:0.060094528272689 97:0.0624635950182157 134:0.0716942961546139 142:0.041533626449091 143:0.0882070827176634 176:0.0518884748974703 192:0.0808429019604765 198:0.0871625914616105 226:0.0776198430465707 265:0.0945677627187587 317:0.0596643621585055 327:0.0841868058309565 387:0.0706634540133863 441:0.070588612522466 496:0.0839426547996023 599:0.0938611820143714 679:0.125931571306277 1045:0.0520022092635972 2055:0.15421193238923 2165:0.149866023673057 2216:0.136376508679971 2236:0.428444245115539 2683:0.141797342794007 3653:0.151953114155902 7697:0.207659877068565 7912:0.698482381994839
+1 6:0.00984610167767765 15:0.0168668167752376 27:0.0143347433366451 29:0.0357591217602519 30:0.0295916805693738 31:0.0187640337646007 37:0.0232932958495982 60:0.0373664684351038 67:0.167086913952024 74:0.0403583356816774 80:0.032054471845268 81:0.0299743677611006 88:0.0375919820936238 97:0.0307190892581991 142:0.00382985634792831 153:0.128096646576036 172:0.038607030711188 176:0.102073323918188 198:0.128597565972836 203:0.223930883998298 232:0.0436973765360723 276:0.114732650788661 308:0.072750018739229 365:0.0521618187018467 373:0.0351443597742963 389:0.083912645217133 408:0.0289890410186372 507:0.0263232983113464 543:0.0544915256066219 597:0.0440228851640311 640:0.137842319172346 774:0.0552262782518914 880:0.0579089909881701 882:0.0369697952670771 886:0.084806870405316 1017:0.174035140709761 1045:0.025574264618073 1227:0.0537946857812185 1260:0.0657265416909207 1294:0.055914730648026 1309:0.058115223305565 1380:0.0507052194421905 1472:0.0500604658292808 1491:0.0565473257088017 1527:0.0640143854306186 1625:0.0664771767065128 1636:0.0718580384688407 1664:0.0584305984338714 1713:0.0809366504870787 1820:0.0627855427986371 1858:0.0633859951805861 1932:0.0635403734826597 2264:0.200606217098574 2316:0.0815115438180658 2403:0.0740364412532586 2691:0.16422399240003 2792:0.0754596462946628 2798:0.504553855468501 2799:0.504553855468501 2833:0.0743784330490995 2965:0.0750895422006351 3144:0.0882173906424633 3900:0.0882173906424633 4205:0.0927624422726873 4770:0.182949993419458 5504:0.0914749967097292 5735:0.185524884545375
+1 6:0.0116644626441898 26:0.0168290033472233 28:0.028712055015545 29:0.0847261085891761 31:0.0296391239316858 37:0.0183967075290102 41:0.0179035302374709 63:0.0168084765424639 96:0.0481802163366012 98:0.025221221161977 100:0.0240265426178834 108:0.14397086265331 142:0.00201651003120928 161:0.0379442798392494 198:0.0677096627693605 231:0.0416828870397 274:0.0420198114613401 285:0.08292808133041 322:0.0673935566425497 346:0.032393838993258 348:0.0386276115702344 377:0.0299256787893766 389:0.0662729912509064 404:0.0326514854407859 429:0.0887438122289708 441:0.0274173304688761 457:0.0268107684111746 461:0.0425460303429545 473:0.0684659820168884 493:0.0347109696908259 531:0.0875005417459178 561:0.0344552571030186 576:0.0380617311537903 640:0.0362886220897744 643:0.094904038772923 653:0.0397194005322003 658:0.0719206762745256 693:0.0462319754622428 782:0.0443010195636517 792:0.0426665783673739 796:0.0341781405706528 880:0.0457356819484964 1064:0.0360251917512674 1080:0.0393133664109374 1129:0.0453390419666604 1135:0.0528119611223854 1227:0.127458789943951 1232:0.0440220916064323 1282:0.0546944666227859 1378:0.0476807588109622 1535:0.173104091074527 1548:0.0427885041133229 1707:0.0444432668263738 1775:0.063068667182997 1838:0.0595969351906643 1846:0.0510781463445965 2236:0.0554706915466584 2264:0.158435883367156 2726:0.64850864749607 2792:0.0595969351906643 2900:0.129701729499214 2913:0.0572163535068416 2965:0.118609264680437 3115:0.0626660387717869 3254:0.0669916973180753 3335:0.113963748063653 3930:0.0676014853772074 4010:0.0743864594454863 4205:0.0732624327268295 4337:0.0732624327268295 4885:0.0770675789370528 4917:0.070463429310408 6216:0.0861068801191858 6219:0.0770675789370528 6345:0.236136353975324 7012:0.0861068801191858 7100:0.0861068801191858 7863:0.271297615996423 8157:0.308270315748211 8288:0.0861068801191858 8349:0.0861068801191858
+1 60:0.180345188654229 67:0.134404464217541 153:0.206081502661056 198:0.206887380291452 203:0.180129668887136 2264:0.322734683286846 2691:0.396304603181476 2798:0.405862368327719 2833:0.358979403240693 6735:0.526200430612387
+1 6:0.0178648077447245 12:0.0401435109200185 26:0.0515492086526976 29:0.0432543326133768 31:0.0453940543095123 33:0.0329526776271752 76:0.0495423289406381 88:0.0454713655434655 94:0.0714972038453278 96:0.0737908233073517 102:0.0567419549331897 134:0.085297977270974 142:0.00308840322282711 159:0.0358246339771132 172:0.0466991711595328 176:0.030867043752581 179:0.032461518409549 289:0.0518100627408862 347:0.293514876432647 373:0.0425107148143474 406:0.0558354666933527 473:0.0524298308072825 561:0.0527702443495831 587:0.150842533981114 592:0.058659590181666 731:0.0686251742857964 952:0.055476347643551 1248:0.0766718751358857 2325:0.633484244329231 7353:0.120552218991722 8243:0.635886092078497
+1 6:0.0310521466238209 11:0.0348845054577217 15:0.026596864664175 26:0.0168002813999446 27:0.011302050458038 28:0.0573261046871724 52:0.0632908636480135 60:0.0294611282374776 63:0.00838989481407271 75:0.00786655608611832 80:0.0252729504597999 86:0.0301531781431343 94:0.0233014856154897 96:0.0721469812261935 97:0.0242200846340648 102:0.0739705485283469 118:0.0254167120890371 134:0.0277992632370595 142:0.00704573963466523 174:0.0284524716021866 176:0.0804784452885099 189:0.0290461336982444 192:0.0313466096047649 198:0.0337970515707426 203:0.0294259210021563 204:0.0466029712309794 226:0.0300968775063704 274:0.0419480965306012 312:0.0351814047734837 317:0.0231346899052973 322:0.100917804766325 365:0.0411263385124046 372:0.0383159018151435 389:0.0330799417903439 414:0.0286794246434834 416:0.0377635465341193 480:0.0285491456001886 485:0.0268612685740777 502:0.0535848485111715 506:0.02171499072209 509:0.0360288467102841 527:0.0740421464376812 534:0.0295852782743041 571:0.030634297841928 664:0.0877569385290548 757:0.03687859378302 852:0.0770406522279076 886:0.0668649243310065 895:0.161453879415338 912:0.073828070686268 999:0.625730857940391 1048:0.0527218273021144 1080:0.0392462705518361 1118:0.0999518022806264 1126:0.0413932742647609 1227:0.0424137522936582 1238:0.617980363066568 1264:0.0642667649855506 1318:0.0513980343719794 1442:0.0583731131508165 1457:0.0513980343719794 1473:0.0549815239157275 1598:0.0812234740322685 1681:0.0576028851606264 1707:0.0443674158005977 1951:0.0484035513282902 2000:0.0617980363066568 2018:0.0614369787134165 2058:0.0581101324071035 2123:0.0633787359262308 2171:0.0537056196950167 2196:0.0601039688385386 2385:0.0610877612314409 2486:0.0652356307060926 2693:0.0652356307060926 3209:0.0711956390108505 3589:0.0614369787134165 5445:0.0657552546872407 6499:0.080519537760089
+1 6:0.00832693896927294 28:0.0614902384507032 31:0.0634756654319091 72:0.051820503010711 158:0.119533972543341 159:0.0500945005935574 165:0.080848963725371 179:0.136175310620658 204:0.049988183030085 205:0.0658886658967688 240:0.0749619091760051 245:0.0962798858864507 312:0.0754739217100964 327:0.0700287626770278 347:0.0684048912687036 408:0.0490325985333267 409:0.042525970305888 480:0.0612458767292542 507:0.0445237121622426 535:0.0789635561235739 540:0.0941315497590884 586:0.183633540859501 730:0.0800443875210237 869:0.111481941144427 896:0.105463483770386 1017:0.294366246183397 1064:0.0771521798010768 1416:0.100509946727296 1799:0.430411766772758 2017:0.125226601958767 2754:0.116737265271705 3525:0.144776521681073 3614:0.13257401698643 5806:0.154722496222691 8310:0.368815996480101 8685:0.553223994720151
+1 6:0.0373355180104222 11:0.0335546807138238 12:0.0503373603468592 29:0.13559532271981 31:0.0284606006925436 63:0.0322802617396958 67:0.0422385541633844 75:0.0302667071610912 83:0.0193477374642871 108:0.0691231165060931 142:0.0096816435808013 179:0.0407046397322668 180:0.0575421724995639 199:0.0349040569006129 204:0.044826429368942 228:0.0564735711644018 229:0.156416894265995 255:0.0695002137450045 256:0.0508159058387766 320:0.0708775507919894 337:0.05708724547356 387:0.105420257762007 394:0.0695637436303186 408:0.131908554084094 414:0.220689139626085 426:0.201664144804996 440:0.0842806585562861 475:0.0605067656299073 507:0.0399262169077578 510:0.067507137581052 586:0.109781091585225 626:0.0704744878600468 686:0.0883052590699191 689:0.373274389553613 833:0.0970946804496006 851:0.0848094200729268 963:0.0633539087858622 965:0.0745859036374635 1031:0.0917568228004154 1046:0.419464272280724 1059:0.136898595338234 1134:0.0908379077344482 1228:0.0919456570550938 1229:0.0842806585562861 1305:0.135828024464309 1339:0.450656710720575 1509:0.0943588396575382 1581:0.106530085429479 1746:0.0872226026753712 1949:0.0929168517401335 1980:0.0927188949190291 2017:0.112295768470698 2944:0.122761753672091 4131:0.129826973697201 5343:0.140698682485251 8912:0.165366124693921
+1 6:0.0243828094190272 27:0.0354984466228391 28:0.0900273660469102 63:0.0263516991305572 64:0.10573917891318 74:0.299829203356622 75:0.0247079520981999 80:0.0793794441309374 142:0.00948422639647298 159:0.0733429574433822 304:0.0923132316303609 337:0.0932053109756286 365:0.129173121098315 387:0.172117744100818 427:0.129505969545584 467:0.153028624713108 480:0.0896695980060141 496:0.204462413841308 515:0.0880811218672938 655:0.0923132316303609 750:0.281925220914641 772:0.112957889045056 952:0.113575463379043 1691:0.170914095907377 1808:0.245162280047845 2823:0.175878892452971 3921:0.188779685381623 3952:0.610024521349369 7207:0.269990274518851
+1 6:0.033782414850207 17:0.0368168369015106 31:0.0257520953429173 52:0.220338334777268 53:0.0520340753262066 59:0.0839083335648341 79:0.0458192100331837 81:0.0411373581028064 85:0.0414056487197929 96:0.0418616126307335 97:0.0421594271972131 98:0.043827158557388 118:0.0442423731832539 132:0.0409782278718768 151:0.0533588214800178 179:0.0736618158280165 180:0.0520660659434214 224:0.128511077406836 229:0.106148394878298 299:0.0559326489759691 309:0.0497231344075371 327:0.113642754963466 333:0.0681620027802311 336:0.123544672871852 341:0.0564526426236314 347:0.0555037673063292 355:0.0406640075007197 398:0.157658010620686 439:0.0728210099041738 444:0.0887589861048039 478:0.0529849790431033 485:0.046756884378548 489:0.307929230896593 493:0.120635171671543 676:0.067561511154347 720:0.0672684053163103 731:0.0778622688814037 733:0.0762599348535169 795:0.0800457965282498 806:0.0725290580739234 993:0.074247756634841 1048:0.0917718527176963 1083:0.0724327536595546 1114:0.0826875422146835 1124:0.0751152158384208 1185:0.106334270139396 1192:0.0840742488475486 1296:0.0687825982377758 1478:0.10822117452896 1523:0.108895378212498 1553:0.0940921969122842 1591:0.160382395458218 1679:0.0974721756813579 1721:0.0885286904963643 1736:0.0967450802127961 1749:0.105745695051863 1751:0.276139509137761 1787:0.0971050635251766 1906:0.106334270139396 2311:0.100268214581845 2403:0.101608935366611 2472:0.114458884628417 2622:0.12244497873641 2623:0.12244497873641 2745:0.111867899742925 3323:0.489779914945638 3613:0.111078905859344 3756:0.127308833890224 5550:0.131445593575477 5756:0.129262065928631 6438:0.125541920586718 6483:0.108895378212498
+1 6:0.0219325864039772 11:0.0328525835107992 26:0.0949302804419327 28:0.0539870242353481 29:0.0531032519882225 31:0.055730183755502 75:0.0444501111374162 81:0.0445127376191513 134:0.104720144952725 174:0.0535903941956314 176:0.0757908076943893 198:0.0636569413599551 204:0.131665447234675 205:0.0578487430237462 274:0.0790094815052396 322:0.0633597555764953 387:0.103214447229995 389:0.0623062609568453 432:0.0686768525446834 467:0.0917672085039536 582:0.0616635619821495 626:0.0689998816424188 628:0.0794432210732231 719:0.0786902226684836 987:0.0596860627473811 994:0.0837013657763018 1031:0.179673811200615 1033:0.0875767187502747 1064:0.0677378508471702 1439:0.0861489458445347 1485:0.0911683678106966 1838:0.112059592486462 2146:0.11262469108012 2652:0.117100877859129 4416:0.139868204720664 7823:0.340079012383735 7938:0.170039506191868 8131:0.75829506647879 8411:0.156135200074767
+1 6:0.0120487615711764 12:0.0203058269063118 15:0.0206400726340548 17:0.0164137648092256 26:0.0130375904357813 27:0.0438538800180215 28:0.0222435046294087 29:0.076577817884645 33:0.0166684814721384 37:0.0142521059139051 60:0.0228628386984953 64:0.052250999200391 72:0.0187455704784937 81:0.0183399492623075 83:0.00780477572267239 88:0.0690024606785552 94:0.0180827462807263 96:0.0373256760809658 97:0.0939780519926104 111:0.0188375430178683 140:0.0212855709888445 142:0.00390552419446886 176:0.109294524377496 178:0.0486194375274845 198:0.131138314242098 203:0.0228355166850379 204:0.0723309851229052 218:0.0170862910822495 226:0.0233562017791696 229:0.0157744385000631 240:0.0271167524439274 276:0.0233998929904015 284:0.0182925858000564 307:0.0867802241386982 322:0.0522104352460757 336:0.0275394815879483 365:0.191492634516157 372:0.0297344445102625 404:0.0252954191946893 432:0.0282959453525627 478:0.0236218822046486 485:0.0208452590714047 571:0.0475465165187188 575:0.0314384855226154 634:0.0338419370726732 640:0.0281131438697698 647:0.027208841436127 658:0.0278588191405402 662:0.0313999544432985 678:0.0325974672221264 687:0.0338937548069502 725:0.0437926537622097 730:0.028955290290661 732:0.0329608181087734 774:0.168952210962093 800:0.053126679006941 856:0.0226068555160557 886:0.0778341871657616 999:0.0441444047851362 1038:0.399946643035627 1056:0.0591575840930086 1057:0.0410363784523111 1064:0.0279090618578436 1080:0.0304564423300904 1097:0.0964948135467673 1118:0.0387830010233428 1149:0.0288982907437467 1155:0.035064482384148 1216:0.0967482598254945 1229:0.0339983752108029 1238:0.143872141410272 1260:0.160860298960203 1312:0.0391674843723955 1355:0.125435343681527 1377:0.0861888402872655 1437:0.0411606650281614 1440:0.0373232248905811 1620:0.0364288502677947 1639:0.0406743540886659 1651:0.0412868491821498 1792:0.0355580559792464 2024:0.0293356891812446 2067:0.0375628040288447 2073:0.0436222373835694 2123:0.0491840571995691 2163:0.0380638605593063 2196:0.0466427264298329 2210:0.0464031472915693 2402:0.290816038640499 2512:0.0466427264298329 2592:0.0815865511741029 2657:0.0485479817718471 2760:0.189624731304072 2902:0.0431311086639642 3065:0.0510283166813835 3147:0.0918877358859082 3179:0.0518991109699318 3209:0.497252161512149 3482:0.0459438679429541 3734:0.0977198037337352 3786:0.055969380632053 4109:0.0518991109699318 4305:0.0514522507093695 4337:0.0567571098842869 4893:0.0552502401680166 5743:0.055969380632053 6108:0.288139520864176 6415:0.06097903337092 7874:0.0700589557719082 8230:0.133415653147647 8281:0.0667078265738234 8500:0.0643301625690047
+1 6:0.0295153080153524 15:0.033707370263996 27:0.0859414982198098 28:0.145303761242645 29:0.0714625630639277 58:0.0659969959105827 60:0.0746747536173567 64:0.170662556080873 67:0.0556522762010616 97:0.12278069176859 111:0.123054612960923 118:0.0644234225421722 142:0.0102049989789862 144:0.0584915616087122 174:0.0721181242473705 176:0.101993854834494 226:0.0762861793453298 307:0.0944807123016733 373:0.0702339963366685 415:0.0855978962630348 539:0.0914048011954604 720:0.097952722415693 774:0.220733127553969 1201:0.250946644709706 1223:0.120896090005071 1260:0.39405222214788 1584:0.132090372615675 1664:0.116770214700434 2061:0.182807557886051 3734:0.159586531742303 3921:0.152344778796816 4848:0.408183732486472 5199:0.204091866243236 7960:0.420231197302818 7961:0.210115598651409
+1 6:0.0264132921988637 15:0.0301647748204123 31:0.0335577756475522 57:0.0657318326029213 74:0.144354459313472 81:0.0536064431093632 142:0.00228311711824982 151:0.0695323365419547 159:0.0529670701569267 179:0.0959893420877598 186:0.0499619753425106 203:0.0667466855301094 265:0.0831747367545403 327:0.07404442287611 351:0.0624821357499987 365:0.0932866904485726 400:0.0775803579782934 408:0.0518442754338019 465:0.0748671273587844 507:0.047076835936111 535:0.0834915642931006 560:0.104881299932782 788:0.157768816691066 804:0.0829398134748487 951:0.114773250881406 1339:0.10627348983809 1378:0.107969467017395 1485:0.109793559862176 2353:0.13495274590569 2557:0.149152351297344 2634:0.165897230060335 3118:0.130104992699676 3331:0.159559098818569 3374:0.147973690535594 3963:0.174513695454057 4031:0.349027390908115 4126:0.144747872061162 4801:0.664567539805796 4868:0.168442503431672 5322:0.174513695454057
+1 6:0.0303824743906845 15:0.0208186202215573 17:0.0165557525900091 27:0.0088466478730368 29:0.0882745790511056 31:0.0231603448341958 47:0.014380265011126 51:0.0206348239683681 59:0.0377318022853385 63:0.00656716631973022 65:0.0217362118177139 68:0.0373034262893369 72:0.0945386480821529 75:0.00615752441787136 79:0.0206039293165875 80:0.0395646602818947 96:0.0564728444967081 118:0.0198948591476296 142:0.00157572362098374 160:0.0826144337787221 172:0.0238262240281822 173:0.0227092717465031 179:0.0331241600532343 180:0.046826016498936 185:0.0176924494909865 186:0.0344819212597166 199:0.0142019137730704 215:0.0387113207032122 224:0.0577887124935437 229:0.0318217915376211 232:0.0269677171130018 252:0.0219267663389596 255:0.0282785478383513 265:0.0287020749670743 271:0.0335317940271786 309:0.0223594415091422 312:0.0275381445929074 322:0.0526620832330242 323:0.025990733250353 327:0.102205484944579 333:0.0613020209795763 339:0.023631823891259 367:0.0259320948093012 389:0.0258932304156895 390:0.0277534437212643 398:0.023631823891259 413:0.0262699688354427 415:0.0264338345012905 422:0.027705116644874 426:0.027351326750695 444:0.239478228619509 454:0.0303148198798653 466:0.0280745891064746 485:0.0210255816305377 489:0.0346173150045015 493:0.0271235421607524 499:0.0226302531707005 506:0.016997347268784 510:0.0549351927612786 531:0.0341869537825293 553:0.0776780721885852 574:0.0227490636947562 591:0.0638950300866337 654:0.0317494915441218 662:0.0316715807216038 663:0.0284348598678663 667:0.0292636608067938 720:0.0302491786168516 742:0.0311821708347702 744:0.0374887954211299 795:0.071989802205824 800:0.0803793794833756 803:0.0379698748861112 805:0.0396061421959729 812:0.0340311287347787 814:0.0337279536029828 829:0.0225390016242115 856:0.0456048336395725 866:0.0339798276662299 882:0.0228158086256073 969:0.0339798276662299 991:0.0322744744917624 1008:0.0395063039088972 1009:0.243708504410741 1067:0.032316261032041 1124:0.0337777232871139 1134:0.110881563422054 1141:0.0404510568586006 1146:0.0347846061835552 1157:0.0416440023495708 1228:0.0374112469797692 1260:0.0405629564894696 1288:0.0399130381032516 1304:0.0391184945747268 1305:0.0276331473000599 1313:0.0397071906735612 1468:0.0425938869690766 1478:0.0486647724598021 1489:0.0356130146090127 1523:0.0489679475915979 1531:0.0415167266356507 1548:0.0668708368363435 1553:0.0423112701641754 1584:0.0407913652247597 1624:0.0384804260801002 1636:0.0443469930539926 1639:0.0410262088483129 1651:0.0416440023495708 1679:0.0438311751035911 1751:0.0413913649149271 1897:0.0405629564894696 1954:0.0430366315750664 1955:0.137074165227498 1981:0.0436660925342552 2086:0.0452846542148116 2121:0.0441714834697502 2178:0.0450884946390074 2186:0.0478162714786288 2241:0.0424513809804476 2472:0.360288171005562 2622:0.0550609162669743 2623:0.0550609162669743 2660:0.114496178041989 2745:0.50304627631708 2824:0.0443469930539926 3284:0.142654805144222 3323:0.38542641386882 3388:0.0528245610851601 3502:0.154409216145241 3735:0.04928256596106 3756:0.0572480890209947 3950:0.055728184081579 3958:0.0581264161425028 5075:0.055728184081579 5654:0.0648866526324838 5894:0.0591083023265695 6438:0.0564535454924699 6814:0.0591083023265695 7057:0.123013068774987 7538:0.0672848846934077 7769:0.0572480890209947 8373:0.0672848846934077 8889:0.0672848846934077 8990:0.0648866526324838
+1 6:0.0113975072073073 31:0.0651617920689509 60:0.0432541331831104 63:0.0123178455609363 68:0.034984483531757 75:0.0115494919915702 83:0.0147658308325028 96:0.0353081650456204 138:0.0477869837583452 142:0.00295553961404687 159:0.034283452398798 179:0.0310650186097492 180:0.0878302164717283 200:0.165159947409944 229:0.0596872219384918 245:0.0658916017854133 265:0.053835659020946 346:0.0474786997901593 408:0.0335567125710177 507:0.0304709408906322 513:0.0852896959893116 535:0.0540407287332159 553:0.0728492663430488 850:0.0522392218651624 987:0.0465247680649086 1008:0.074100841449863 1149:0.0546725860720234 2102:0.0796248380667025 2187:0.0796248380667025 2369:0.148576210524395 2421:0.547674709821487 3298:0.173842120758396 5187:0.118216885044032 5881:0.486824135208374 6728:0.378612986737718 6799:0.365118101406281 6800:0.121706033802094
+1 6:0.0257037111836816 12:0.173274276219148 27:0.0374215211947959 28:0.0949044622270475 29:0.093350867987828 31:0.0489843920279222 63:0.0277792625128159 75:0.0260464679749651 80:0.0836797052709855 108:0.356909596572214 110:0.248065091071614 142:0.0133306933261134 144:0.229220915624826 158:0.0922447828136428 185:0.149678925422751 317:0.0765998428197073 346:0.321222552770282 367:0.109693349329457 408:0.0756772540267629 425:0.184708562013063 565:0.136698517280529 641:0.406772103107298 674:0.170180856983695 856:0.0964547404350669 946:0.182692976302006 977:0.176701801112191 993:0.141230496771794 1018:0.13946205743595 1198:0.15309556766407 1232:0.145510062855352 1315:0.196024779026579 1389:0.16390461031553 1755:0.199006538869511 1936:0.173041599225133
+1 6:0.0405649447738956 11:0.607617912109857 15:0.0463263880736405 29:0.0491079903787792 63:0.0292270181437803 67:0.0764868016780781 75:0.0274039165631014 80:0.0880407916910307 81:0.164655158310773 96:0.0837770189037423 142:0.0245445222737841 158:0.0970522503871224 301:0.122557860190758 308:0.199815154536217 317:0.0805919521754564 322:0.117185676988009 346:0.225309014201443 355:0.0813802696790666 413:0.116913874022543 499:0.100715405673718 574:0.10124416909666 658:0.125057550877861 685:0.428706264443017 730:0.129979582782753 1057:0.184211289080631 1134:0.164491923820614 1229:0.152617866401324 1380:0.13926692300865 1614:0.170867729694122 4004:0.22230055201345
+1 6:0.0278540357581335 26:0.0401866485672015 27:0.0405521359166743 28:0.0685626617777246 52:0.0378482900730724 64:0.0805283979618052 80:0.0302267311542657 86:0.0360635379960467 88:0.0354484934827487 94:0.0557376743419591 97:0.0579349837235612 132:0.0281558968255444 142:0.00963060952386284 172:0.036405664195769 176:0.0481265599226028 198:0.0808433026654838 203:0.0703874606578783 204:0.0278688371709796 218:0.0263331164765999 226:0.071992403610728 276:0.0360635379960467 308:0.0343009123424863 322:0.120698822173632 389:0.158255920089102 442:0.0395048721061233 485:0.0321263773670848 571:0.0366389625319192 585:0.0575219527511768 664:0.0524791395460235 757:0.0441072102523144 852:0.0460707404651138 880:0.0546070298853672 895:0.14482548292086 987:0.0379001750045832 999:0.680346452838334 1021:0.0497022863266842 1045:0.0241160242729957 1056:0.0911727153012052 1106:0.0594854829639762 1118:0.119543472406456 1126:0.099013637112603 1238:0.517377993753388 1330:0.0613082633129206 1379:0.0489997771640282 1418:0.0589315812153993 1485:0.115782376516676 1709:0.0592055215169363 2194:0.0708079489049683 2196:0.143770036686192 2526:0.0695003676916243 2730:0.0743581258297364 2979:0.0718850183430958 3101:0.0708079489049683 3115:0.0748213671737115 3254:0.0799860734915722 4989:0.0862591075039191 5580:0.0862591075039191
+1 6:0.0149587909408489 11:0.0672198325659912 15:0.0256250843468735 31:0.0285074507130111 37:0.0707771571620958 81:0.136616596781331 96:0.0463406120141605 142:0.00193951617664164 159:0.0449957159786105 161:0.29196401077205 199:0.0699230274531096 243:0.0705239761975124 245:0.0864801993925241 276:0.0581029187462751 343:0.237742133871431 391:0.0774025438509611 408:0.0440418978362377 505:0.053800973397735 582:0.0630850585997318 592:0.0736764054846213 665:0.0924806139048013 685:0.31618075264642 713:0.0747902810890617 804:0.0704576688757095 1064:0.0692993747482615 1133:0.174431674460926 1418:0.0949462272759595 1725:0.10790124869938 1726:0.100996132402844 1808:0.150406429004681 1817:0.106321846652175 2076:0.0932700226990555 2171:0.10348671183334 2796:0.128867675972997 2907:0.111479346039652 3636:0.130040686557328 3927:0.138974326783352 4447:0.125704180577103 4778:0.123837248807275 6222:0.140930291657011 8683:0.33127667966254 9116:0.564552507456276
+1 6:0.0284424084403473 15:0.0139208942791882 26:0.035173309964503 27:0.0236621348494993 28:0.0300046886301873 29:0.0295135092871769 31:0.0464602421018078 33:0.0449688666279971 63:0.0175652040486612 88:0.0310262461165024 96:0.0251746590157357 118:0.0266063963842052 134:0.0291004680024326 142:0.00948282524813937 172:0.0318640084922753 176:0.0631840600063561 192:0.0656277112101405 229:0.0212784416572854 244:0.059792267415134 252:0.0293237681307091 255:0.0756366503903123 265:0.0383847293391941 275:0.0273233910453004 284:0.0493504373808084 317:0.0242175592063108 344:0.0619745617905996 345:0.0298178822480018 373:0.0870183609830865 388:0.04225276954041 413:0.0351321514090631 414:0.030021827271065 423:0.030784883004382 445:0.063593150096616 475:0.0329245683688765 502:0.028046501740301 506:0.0227314079259082 530:0.0334019549733062 550:0.0331040279169374 586:0.0298685198083127 593:0.0391357663455111 643:0.0661177829680965 655:0.0307665312575297 952:0.0378528947847006 987:0.0331720770622586 1379:0.0428869888838794 1407:0.049527391952431 1924:0.0560410448767657 2340:0.169202133076131 2528:0.0467475131182745 2722:0.0560410448767657 3119:0.0659080556972391 3793:0.0682891257869885 4332:0.155470763256442 4649:0.0736357343676493 5946:0.0805372066972112 6404:0.0842884292355795 9102:0.511157717243333 9627:0.756030918226052
+1 6:0.0304641444551246 15:0.069581940082795 26:0.0879048104733666 27:0.0887042823709071 28:0.074987439908579 63:0.021949397631071 64:0.176148890562965 75:0.0205802541447496 80:0.0661183544306233 94:0.0609606657179043 97:0.0633638776256861 132:0.0615885838307291 134:0.145455240181929 142:0.0263326544736147 176:0.0526363391768915 192:0.164016167985052 226:0.0787385713981654 265:0.0959307600290842 317:0.121048599310484 355:0.0611163235921742 387:0.0716819205075656 439:0.328340909749265 706:0.103377403993839 987:0.0829033477403342 994:0.116260364880546 5650:0.188684320964309 6638:0.194275545747608 8123:0.631958584892545 9623:0.472366367038934
+1 27:0.0922637251225136 64:0.274825843552523 142:0.00821679200539889 198:0.275900544565054 389:0.270046454645086 441:0.223438017485032 757:0.301056560695276 999:0.464374785893407 1238:0.504485186655084 1485:0.395139976704908
+1 6:0.0130901981751371 11:0.117645995998982 25:0.0491217652658665 29:0.0237705238953495 67:0.0370231266428136 98:0.0849119569328017 114:0.0459583735726223 142:0.00339447903463814 153:0.0567673225452719 179:0.0356786130966625 372:0.0646090918087527 409:0.0334260513346043 429:0.0746931593205254 508:0.0507815868989527 571:0.0516562071621017 671:0.0399711486187988 772:0.121285544059666 869:0.087626480025525 880:0.0769888624932592 1048:0.0889006709778457 1135:0.0889006709778457 1236:0.0721312577014563 1330:0.0864367365119008 1422:0.0889006709778457 1457:0.0866684630718044 1599:0.15861863805029 2216:0.356666914293154 2296:0.0955338462699699 2461:0.111799068205268 3191:0.112770037600388 4311:0.114885251221502 4683:0.120051606756567 5100:0.626089811458165 5357:0.110877914540348 6263:0.123325839231593 9147:0.494030849959443
+1 6:0.024031727764674 15:0.0548899130868681 29:0.0581857001127979 80:0.0521576536070317 179:0.0436672134619864 265:0.075675255304582 327:0.0673681796140363 365:0.0848754608872252 400:0.0705852957966559 424:0.0825053454164061 471:0.250513765268521 633:0.0833010725187343 641:0.0633853763650581 780:0.0812707475302905 1421:0.22460419844189 1482:0.094903359208378 1620:0.290635085521154 1746:0.0935708566587859 2340:0.111193651217106 2341:0.111556958011161 2578:0.363076131673786 2709:0.119926170154509 3061:0.132632067312152 3484:0.269263174049806 3521:0.15325482170088 3710:0.126792028477008 4718:0.15325482170088 4795:0.136831377468182 5152:0.148844167987586 6079:0.145172392608806 6535:0.166174114327065 9383:0.558941346010367
+1 6:0.0340994691741071 28:0.251807356616345 176:0.176752499435283 322:0.295523837321057 389:0.290610106676687 485:0.235978532708981 999:0.499736262947092 1126:0.363643440669261 1238:0.542901013469425
+1 6:0.0241746575270954 20:0.0272735855978697 27:0.0140781609715793 29:0.0877976432016385 41:0.022263093905956 48:0.0295783657821814 51:0.0328373387995118 52:0.118255395749891 53:0.03723552494183 59:0.0600447077745456 63:0.0418027826598956 64:0.0838692012390555 65:0.0345900383143744 68:0.0296815046574503 72:0.0300889178553722 75:0.0195976196148669 80:0.0314807181334756 81:0.0294378465279765 83:0.012527613169656 86:0.0375596709004114 96:0.0599122444838317 97:0.0301692380059353 118:0.0316597917772761 142:0.00877637709271674 160:0.0438229754367397 169:0.070485838852049 173:0.0361385224983375 180:0.0372584173910133 185:0.0281549752505458 186:0.0274364960078928 199:0.0452005846895187 224:0.0459811901920515 229:0.17723923064987 252:0.0348932782830562 255:0.0450012201485032 322:0.0419020455823075 323:0.041360494022042 327:0.0406613129028663 339:0.0752132616936531 347:0.0397184325645057 351:0.0343119113349154 377:0.0372126719284098 388:0.0502779055962928 402:0.0368522783968286 408:0.0284701564784072 436:0.0427063021827269 444:0.190547487595255 471:0.0504007413906541 475:0.0391779842659988 478:0.0379159905568297 485:0.0334591731200196 489:0.110176903168623 502:0.0333734186455279 509:0.0448785736261689 513:0.0723614086353823 553:0.0618067102888697 574:0.108605536891643 586:0.0355414955175213 636:0.0988969996979732 640:0.0902500222678458 695:0.0477273956197201 731:0.0557181507845648 733:0.0545715223821865 742:0.0496219163185128 763:0.0559974489113219 795:0.114561361355264 800:0.0852747737073417 808:0.0504625884537655 814:0.0536731615047042 856:0.0362867494148158 866:0.0540739826584166 876:0.139984967421154 987:0.0394725026811344 991:0.051360159654709 1007:0.111621196686845 1008:0.0628685705369518 1009:0.0430918719406115 1014:0.118582335085401 1048:0.0656718331094603 1094:0.0497976297616417 1102:0.0579175791894039 1124:0.107504725521808 1159:0.0491644168092796 1190:0.0523228948761534 1194:0.0741089688490601 1431:0.0564764240772127 1523:0.0779254084186503 1711:0.0702925292794699 1721:0.0633510299237451 1749:0.0756714987421274 1751:0.0658683725710104 1950:0.163813294525827 1990:0.0643720082565469 2150:0.072383661809364 2198:0.0737454893719883 2472:0.163813294525827 2478:0.0806422461186575 2745:0.480315248608243 3323:0.525728922575299 3546:0.0700189902893389 3756:0.0911020562951612 3950:0.0886833473439653 3958:0.0924997869135554 6483:0.0779254084186503
+1 6:0.0372805290084708 15:0.0319316147981379 28:0.0688244691944519 29:0.0676978066925136 31:0.106570061123234 41:0.0429158053867488 60:0.0707407741683796 63:0.0201454489303561 75:0.0188888308378862 80:0.0606843046414987 142:0.00241684603293158 172:0.0730893593970505 179:0.0508058607186901 306:0.073135813078393 325:0.167382663816986 408:0.0548809478107054 515:0.0673365969122051 658:0.0861990262630157 693:0.110820739556158 719:0.100316935090592 738:0.451741574726468 768:0.116476443289103 1031:0.114527100346549 1073:0.124778918042146 1149:0.0894152946759892 1448:0.350963745688686 1677:0.146681263761922 1685:0.133453595061673 1750:0.181320713974071 1783:0.404919645040443 2134:0.126972211065556 2206:0.120292213831174 2280:0.126593348661331 2508:0.160583002709338 2864:0.137725626494295 3170:0.288638048886509 3348:0.157888645157082 3675:0.154314548707331 4784:0.152182252122016 5514:0.163595038192147
+1 81:0.160401317242753 111:0.164753275511675 388:0.273954899458689 444:0.346085868051174 586:0.193658958455739 795:0.312111710498996 2472:0.446293994345785 2745:0.436191318633106 3323:0.477433087219597
+1 6:0.0165035174381498 15:0.11308508235591 20:0.0930954440638555 26:0.142863546489692 28:0.121870140551274 60:0.125263415635631 63:0.0356723229593599 75:0.03344718086468 83:0.0427616569484149 134:0.118197464712107 142:0.0213980121584362 144:0.196233731965505 228:0.124815807597223 229:0.0864267150860036 295:0.140126455033577 351:0.117120010162987 408:0.0971798097618595 442:0.140439830986769 498:0.169578106509433 608:0.360166741202545 1140:0.167625966105176 1336:0.292606515067814 1354:0.236311424956837 2775:0.243876075686828 2837:0.248191972677232 2988:0.277370162388916 4785:0.50847725452114
+1 6:0.0141617178671209 11:0.15909512801518 28:0.104577133534207 59:0.0439683690432719 60:0.0537444565363692 98:0.0459312823816307 118:0.0927328625812071 172:0.0555287660555698 205:0.0560287940451004 308:0.0523184339314949 355:0.0426162697460444 365:0.0750247137469838 405:0.0673404206413692 413:0.0612240929164848 427:0.0752180346117672 467:0.0888801684636646 475:0.0573769823994109 587:0.0896814608556149 882:0.053173918705769 1416:0.0854691930398279 1527:0.0920723445260397 1558:0.0853052377494474 1609:0.0989360630711313 1675:0.104635396404461 1700:0.407068150459343 1785:0.107483694700192 1917:0.0881106188936195 2754:0.0992681837502092 3089:0.22971328336651 3609:0.226833657055482 5036:0.135467884454035 7280:0.140350568590348 8202:0.151223112394831 8474:0.313624736911473 8476:0.627249473822945
+1 6:0.034821385542896 11:0.234713592344963 28:0.128569172184259 29:0.0632322418684786 42:0.104166128835414 60:0.132148970866823 63:0.0752663615882981 75:0.0705714514846214 108:0.16117110582966 142:0.018059384831456 159:0.104741966116476 196:0.161902693914742 245:0.201310411836179 304:0.26366728903709 413:0.150540193214033 427:0.184949044146417 467:0.218542032981484 513:0.130287497645806 750:0.201310411836179 2369:0.45392640821104 3374:0.585233626639708
+1 6:0.0278103537489608 11:0.0312426206435778 15:0.0476403917503419 26:0.0902781584425719 28:0.0513413539396734 29:0.0252504457718369 33:0.0384733620513422 80:0.0452689922588362 83:0.0180145961472145 96:0.0430766369472374 97:0.043383095517551 130:0.103627360704648 134:0.0995882640834929 142:0.00721162976172658 158:0.0998050446183088 228:0.0525823021630068 276:0.162031416566745 325:0.0624316662879979 337:0.106307383409698 351:0.0493402228634189 404:0.0583856317412278 405:0.0661205419149137 480:0.102274647610064 513:0.208110122104889 530:0.114308907764249 561:0.0616110393021601 579:0.0816381135656727 658:0.0643023443322313 671:0.0424597003027968 737:0.0819271590308926 916:0.0842470139935588 936:0.244060147119806 987:0.0567611072508874 1725:0.10030128464761 1776:0.080523832732571 2215:0.117781029173832 2402:0.0958924505309619 3089:0.338328005006184 3153:0.140748779805873 3271:0.373755561473517 3298:0.10604535682287 3463:0.112776001668728 3509:0.127525863526367 3880:0.3779967538447 8148:0.485119818777191
+1 6:0.0316198387100549 15:0.108332423012485 20:0.0594552633395072 29:0.0382790299310644 41:0.0485326033198283 60:0.159998578626774 63:0.0227820746418689 75:0.021360991037431 83:0.0273096669795979 92:0.0695792145949817 134:0.0754866305347894 142:0.00819948469411134 174:0.0772603645398998 176:0.0546331625203767 205:0.083399553992345 218:0.0597865891286537 220:0.169106397869894 229:0.0551962897505738 337:0.0805796370528186 408:0.0620637372620668 507:0.0563565476076316 530:0.0866446901815759 987:0.0860483867496892 1140:0.107054067549069 1418:0.13379799675279 1422:0.143161819244482 1433:0.1016191415746 1734:0.145833227197012 3691:0.323108836784875 4402:0.208913559938216 9089:0.795566045398205
+1 6:0.00739705382133159 12:0.1994605584985 27:0.021538446676116 31:0.0281936084362623 41:0.0340607315051181 63:0.0319774367920308 64:0.128313088783583 65:0.0529199585984976 75:0.0449741574100921 80:0.0963259008349917 87:0.0689111579358746 134:0.0529773735385232 142:0.0095908189389719 158:0.0530926929837862 172:0.0580083962975725 176:0.0766843462988836 200:0.0714598960338967 256:0.0503391958247666 327:0.0622085172564272 345:0.108566850941919 370:0.174953714011543 480:0.0544064329248339 506:0.0413825058980741 507:0.0395516643516773 586:0.0543756110999824 727:0.0791950919128896 993:0.0812870622743068 1208:0.125310540066498 1395:0.0789869242648231 1844:0.0961838237854633 1884:0.111242308604593 1916:0.0903449801802381 2523:0.115146720810876 2682:0.108851764353138 3365:0.483126324454131 3614:0.117769223790093 6148:0.149746574086595 6412:0.17204419340518 6701:0.655259222194 7621:0.157975961943275
+1 6:0.0166533678307724 28:0.0614883550065743 31:0.0634737211742123 180:0.128332351535807 200:0.0804406702009779 229:0.0872114615642772 315:0.117947084658246 322:0.0721633985054223 346:0.208119259067126 411:0.124766046177006 457:0.0574166511304332 574:0.0623465555574702 781:0.0902332736549566 1064:0.0771498166321618 1149:0.0798843702887269 1576:0.0922999385072012 2187:0.116343134746195 2421:0.266743368480353 5187:0.518194698534835 5401:0.154717757077349 5881:0.355659410652749 6728:0.55320704948606 7830:0.193665971961878
+1 6:0.0258688523746939 11:0.0774973473091217 31:0.0328660712838733 60:0.19634728288513 63:0.0559154774099804 75:0.0349517484128561 97:0.0538059028246012 142:0.0178884538107467 158:0.0618916246993622 162:0.0467019390256178 172:0.0676219963857859 176:0.0446965346332671 179:0.14101616534491 180:0.132898469967647 205:0.0682309220526554 218:0.0489126608879195 286:0.0483165676151939 346:0.143682819231044 351:0.0611942325705933 408:0.0507756434742236 587:0.109212573097365 685:0.0911307298193722 717:0.0873843520071177 768:0.107763560826102 1046:0.0968787891917414 1808:0.0867013411157894 2216:0.117474205118245 2665:0.838786163004565 4140:0.156270212031892 4528:0.158164006940149 6745:0.190963462115267
+1 2:0.039866959897041 6:0.0292975857713202 26:0.12680802812379 29:0.0354677066171014 31:0.0744444731029158 32:0.0732080984820386 48:0.0597440182629038 52:0.0796195951166502 60:0.0741239087838329 75:0.0197921777153319 88:0.0745712605019293 94:0.0586263085503012 97:0.182812483929418 100:0.120694748589443 118:0.191844592639474 140:0.0690102284845648 142:0.0202594418277843 180:0.225769833138979 192:0.0788677613530848 193:0.0947240651627924 221:0.0929648180828303 553:0.124840610041165 641:0.309097792532837 742:0.10022908961926 755:0.101927125669376 799:0.0985217768698847 959:0.108571993669653 1045:0.0507316997606005 2198:0.148955215994422 2975:0.138824652071355 3636:0.679177558888723 3673:0.166814015905873 6747:0.216274318221528 8292:0.216274318221528
+1 6:0.0317621946277084 11:0.0317174981030001 15:0.0120911274713942 26:0.0763752970611001 27:0.0308279643864195 28:0.0260608627356262 29:0.0256342441629579 31:0.0269023286549737 37:0.016698006096792 63:0.0305128559924382 64:0.122436292360185 68:0.0216652437858051 75:0.0286095473580376 80:0.0689355988638636 86:0.0274157067157904 94:0.021186048536709 97:0.0220212520818584 122:0.037985703428649 134:0.0505509863142444 142:0.0146424882788519 148:0.0310222249674738 172:0.0276757929988501 176:0.0365860845994264 198:0.0614575385270225 204:0.105930242683545 226:0.0273645173606218 265:0.0666788564135591 276:0.0274157067157904 286:0.0197746206146338 308:0.052151497336103 312:0.0639748865304239 322:0.0611706207715276 346:0.0294026808957495 373:0.0503870931420102 387:0.0249120745187624 389:0.0300767626548177 405:0.0335627760980849 467:0.0442982857145008 506:0.0197435843792965 515:0.0254974695737229 546:0.0304908384448606 549:0.0376846440359285 582:0.0297665160724749 613:0.0326398593069888 643:0.028713620187045 678:0.0381917388000873 719:0.037985703428649 772:0.0326987245164476 774:0.0395894482647513 1031:0.0433664810869518 1033:0.0845508667504256 1045:0.0733325553019017 1126:0.0376353650637438 1155:0.0410821351011788 1162:0.0409428046810235 1216:0.0377839607746191 1243:0.0469866763142644 1416:0.0425982398381023 1453:0.049644129836161 1579:0.0442982857145008 1627:0.0471166554085982 1720:0.0458892809804458 1863:0.0425165237655158 2216:0.0961578171992691 2532:0.0517203243292124 2951:0.057624865542298 2979:0.0546473998299769 3482:0.0538286055166879 4416:0.0675178181411426 5736:0.189718260949707 6803:0.205975038818821 7823:0.4104112324456 7938:0.57457572542384 8131:0.512466717488277 8411:0.0753702963810302
+1 6:0.0246416202177291 15:0.0281414720846459 29:0.0298311868859858 63:0.07101708977641 83:0.0212826652328848 88:0.0627204130329639 96:0.0508912681702458 114:0.0576761722651419 142:0.0255597240284625 174:0.0602096860244299 198:0.0715196167165138 220:0.131786112854935 228:0.124242755703708 229:0.0860299144428505 312:0.0744491151744806 339:0.0638884138590992 405:0.0781156206385247 473:0.14463698655972 499:0.0611806768262475 553:0.105000969171849 709:0.0716320227942154 800:0.0724349657450824 1027:0.085834452089714 1033:0.0983938785700085 1389:0.104754656645181 1472:0.083523478108052 1734:0.113649124926493 2968:0.125283287525263 6071:0.651232746572399 6525:0.619078683193591
+1 6:0.0144152642487238 15:0.0493879971605583 80:0.0938592139568076 84:0.0846025098978899 96:0.178627315609452 98:0.0935072395914869 174:0.105667386321097 204:0.086537546432283 327:0.121230997696223 339:0.112123516238773 473:0.126918219843598 554:0.182992724614502 731:0.166122698141536 737:0.169865030447038 795:0.170781353859792 861:0.192454942604829 1916:0.176062902109505 2133:0.492464083240866 2164:0.186053588354001 2369:0.187915242941019 7320:0.61572222978599
+1 6:0.0138854547316774 31:0.105847837022736 97:0.17328625572093 102:0.132308367020241 118:0.0909238538425983 142:0.0036007006419979 199:0.0649058494260158 641:0.329614792788645 808:0.144923663723607 952:0.129357280227793 1067:0.295384749699687 1309:0.163913867406065 1327:0.180552442006196 1591:0.164803382304642 1625:0.18749873971761 1709:0.354172987797094 2202:0.194663371307452 2306:0.195325982052562 3636:0.241419787683129 4144:0.254689979292998 5679:0.243729534699247 6747:0.307506626525094 8292:0.307506626525094
+1 6:0.0256442867572567 15:0.0175719284738616 26:0.08879643426489 27:0.0149340025423466 29:0.0745080400448476 31:0.0195484579921894 41:0.0472330301753538 63:0.0110860158471751 81:0.0624548725898949 134:0.0734653007255599 142:0.010639899270108 172:0.0402209848654515 174:0.0375957694420752 176:0.0531702327380753 186:0.0582088387768997 373:0.0366135581149037 408:0.0302009182937933 411:0.115275287193985 582:0.0432594141926836 593:0.0493999073048906 643:0.0834584998538934 644:0.0977412341134486 772:0.0475207667563582 987:0.0418721206969344 1064:0.0475207667563582 1155:0.119408606229538 1192:0.0638209007824758 1296:0.104425967234127 1482:0.121525791982919 1576:0.0568525505425301 2139:0.0767840197073786 3281:0.0849191069572707 3540:0.0861993209491908 4640:0.0940745980509985 4900:0.360104595769919 5410:0.10639476315225 7001:0.19059815740572 7226:0.101659707141352 7261:0.10953498424316 8699:0.795084033461751 8721:0.113583433351679
+1 6:0.027682873237423 26:0.0239638214250053 27:0.0322423550493285 28:0.0408848073139741 29:0.0201077597444457 60:0.0420231780203646 63:0.0119672960418198 67:0.0626365778726086 68:0.0679777432219864 92:0.036549571209163 142:0.00861428665012494 172:0.0434183424968732 176:0.0286984938755589 232:0.0491430608805718 240:0.0996842194718647 252:0.0399569755420659 275:0.0372312338188227 287:0.0513913325711903 319:0.0502256424976905 345:0.0406302623315279 373:0.0790482884285392 382:0.0486293901623747 405:0.0526539603700991 426:0.0498421097359323 553:0.0707760730108048 643:0.0900930134618401 644:0.0527555751431889 655:0.0419229047062307 726:0.0510230393350402 761:0.0562991354395679 764:0.051206069885675 1013:0.0686021777328212 1045:0.0287613981142397 1126:0.0590431201158491 1149:0.0531166769106696 1155:0.0644504824992696 1198:0.0659535140675935 1242:0.0702833373217202 1296:0.0563636423387677 1816:0.0608420459046237 2303:0.0768523956727119 4244:0.0871352191403434 9048:0.417906381914967 9054:0.835812763829934
+1 6:0.0315187067974943 15:0.0359953119822722 26:0.136421652254866 27:0.061183276662596 28:0.0775832433257663 31:0.0800882891422975 63:0.0227092091601138 67:0.118859527082153 68:0.0644974764418817 94:0.0630709111747098 97:0.0655573138900461 132:0.0637205656207788 142:0.0190709393379922 153:0.0911232751429538 176:0.108916851011769 192:0.0848469176015188 199:0.0491101054312579 204:0.252283644698839 208:0.078712095309018 220:0.0842827666028973 226:0.0814642258937581 265:0.0992515480837299 317:0.0626194396421448 337:0.160643827275986 351:0.0745592825747851 387:0.222489895144178 436:0.0928001713773942 506:0.0587766923359665 553:0.13430507943626 561:0.0931020295909875 688:0.116630996631164 693:0.12492406411788 713:0.10505719569938 834:0.105872564688858 994:0.12028489289228 1008:0.136612486258308 1526:0.169330775232257 1717:0.529726396537785 1802:0.313187951770903 1984:0.181019197372685 2171:0.145366798720999 2351:0.372550033248869
+1 6:0.0382696360802389 15:0.0437050764489402 26:0.0552138451068863 27:0.0371440006583688 29:0.0463292858132313 31:0.0486211204580312 40:0.0797053468558746 63:0.0275732496200216 68:0.0783120629721021 75:0.0258533056038574 81:0.155338384469893 85:0.0781757370513027 142:0.00330795800031861 158:0.0915606892548646 179:0.0695384195507094 192:0.103020110564888 204:0.0765799445203476 229:0.0668043231056132 256:0.086812162036286 320:0.12108479269485 387:0.0900481881379633 402:0.0972315244723779 480:0.0938262916898494 507:0.0682085885212593 731:0.147007484401053 1134:0.155184386367124 3979:0.447827878173704 6525:0.480729669995612 7123:0.244052625406984 8703:0.565011705499767
+1 6:0.00663497216762341 26:0.114871954815633 27:0.115916686033369 28:0.0979918364254724 29:0.0240969254010273 57:0.148605478221841 64:0.115093629623964 94:0.0398309876340595 117:0.0684997897528843 142:0.0103232694954228 156:0.276297280594939 276:0.051543102683049 308:0.0490239046203631 312:0.0601382298796411 317:0.0395458711406429 341:0.0554373798109773 355:0.0399326926727459 373:0.0473653140267792 377:0.102133832610106 398:0.0516075457753882 402:0.0505723485849616 405:0.0630999460522897 423:0.0502699304252683 424:0.0683372426500318 455:0.0484450394331807 561:0.0587964518075877 685:0.0701209911296535 804:0.062503002259276 1027:0.0693350350674637 1098:0.0744304357436113 1126:0.0707566471331306 1391:0.0838435233069807 1608:0.287603211736141 2542:0.100242481604885 2996:0.118893741050857 5208:0.293875562274408 5327:0.146937781137204 6110:0.141700484539462 6240:0.118893741050857 6366:0.154319336105506 6367:0.617277344422025 6368:0.154319336105506 7151:0.293875562274408
+1 6:0.0249515239753986 15:0.0142476957525271 26:0.0719980496846061 29:0.0151031784481594 31:0.0634012327828614 41:0.0191487759698491 47:0.0196829221666745 63:0.0359551158276561 67:0.141141244725687 75:0.0252842504145624 81:0.0253198738046115 96:0.0515312989433512 142:0.00754867582579743 144:0.0494473444450978 174:0.030483454641284 304:0.031488794320724 313:0.0471578178341859 327:0.0349733228771325 356:0.0396636967788574 373:0.0296870566719295 389:0.035441241070416 455:0.0303637938579605 498:0.0854612197294746 541:0.0428824135117694 599:0.0389923027939712 772:0.0385308549188858 858:0.0417210316625573 863:0.0439495837899639 882:0.0312290340268497 886:0.0358189249151289 912:0.0395490183679755 952:0.0387415145484667 1045:0.0216030295596658 1126:0.0443479925451219 1805:0.0602242421628062 3038:0.0683686072324862 3414:0.0795602670656925 5205:0.659422933479629 5457:0.247283600054861 7623:0.355253239751309 7624:0.0888133099378273 9046:0.523157456035505 9394:0.0967224005724642
+1 6:0.0208464248011075 29:0.0757101507918374 63:0.0450595093343012 75:0.0211244100937176 80:0.067866568794078 118:0.136505236478319 137:0.0853297913559012 142:0.0108115631234558 150:0.0908993542228476 179:0.0568189659909098 229:0.0545849702525324 355:0.0627322808504192 480:0.0766642801349712 507:0.111464755642059 515:0.0753061901870447 574:0.156088881869919 633:0.108389806246019 655:0.0789244917703301 657:0.108258314540978 1045:0.0541465040334652 1675:0.154026082368433 1785:0.158218853103608 1932:0.134529345826639 1955:0.156751895892639 3236:0.312091404200132 5481:0.619799293001915 7557:0.2308319709211 7837:0.484856055791501
+1 6:0.00599467431225916 9:0.137574261361231 27:0.0349101077628858 34:0.0477745568757987 62:0.137264912968737 64:0.103986694680979 83:0.0155325800950611 99:0.170432181445161 140:0.0847224437962789 142:0.0108815444962231 151:0.0473424942942947 186:0.0340176189988568 205:0.0474341284808135 242:0.0420050879547606 337:0.0458302793471959 355:0.036079049156041 361:0.214840164317149 377:0.046138781542145 408:0.0352992209953371 423:0.045418707567443 471:0.0624902399123401 555:0.0690831228654315 610:0.154367041700372 621:0.0834830899915143 671:0.0366096853005202 697:0.0642657977019169 781:0.0649621257618413 896:0.151849134327184 965:0.0598783978927688 1129:0.0699027803964965 1171:0.198509084661006 1262:0.277045988602384 1319:0.0632736400618391 1509:0.0757523321454551 2119:0.0948841785601005 2341:0.166966179983029 2754:0.0840407126784517 2886:0.445547146223778 2938:0.0960189935899884 3416:0.0948841785601005 7126:0.132757774988386 9074:0.603312291347984
+1 6:0.0242778950311096 15:0.0831782609165094 29:0.0440862908448469 31:0.0462671681656471 37:0.0574351362679114 42:0.217877689434375 52:0.197934006004726 80:0.0790378901429982 159:0.0730273772591633 174:0.0889814320796245 180:0.187087644453794 365:0.128617314804523 408:0.0714793446119485 502:0.0837898482943631 515:0.175404252575408 594:0.116230255608801 866:0.135762261929012 947:0.147671259590327 993:0.133396269173531 998:0.13436175880266 1273:0.162976930444812 2823:0.175122120498099 7117:0.564666821290072 9602:0.564666821290072
+1 6:0.0229501936640999 15:0.0196573590320617 26:0.0745010739021161 28:0.0423688970851956 29:0.0208376572912224 31:0.0437369248170171 41:0.0264193151511587 63:0.0248034009547908 88:0.0438114137710962 106:0.0401612963869997 140:0.0405442479344564 142:0.00743914933442711 154:0.0414757831178109 159:0.034516840293021 185:0.0334111317752761 296:0.0517388034443661 312:0.0520041376016913 377:0.0441597790247077 389:0.048897815644291 405:0.0545652621257724 448:0.051959603520129 502:0.0396037886105253 506:0.0320984728381896 507:0.0306783747466726 531:0.32280007875825 539:0.0533051668012378 541:0.0591643037024193 593:0.0552626716804183 697:0.0615092841749822 726:0.0528751398033694 755:0.119766554759632 757:0.0545128734340515 774:0.0643632283476134 799:0.115765197017112 827:0.0490080339754849 880:0.134979568724562 947:0.418786390073374 987:0.046841489890983 1118:0.0738729353305474 1411:0.0726679811738896 1688:0.0772522338463641 1731:0.0712430384024347 2024:0.0558779210628588 2171:0.158772195401861 2401:0.388510291860817 2449:0.288074808194668 2723:0.149587657344352 2740:0.0830905973282121 3767:0.0919005096663761 4468:0.341173940927042 4530:0.282981813108821 5557:0.106609141294504 6734:0.254126954000461 7985:0.111622490659192
+1 26:0.130479647038689 63:0.0651602486869977 142:0.0156345275886808 531:0.33920724736754 799:0.304123174103563 827:0.257494985250127 947:0.733453861794984 2401:0.408257356017449
+1 6:0.0281509724870234 15:0.0482238870293049 29:0.051119421969569 31:0.0536482168826679 49:0.127142585094313 64:0.122080301134723 67:0.0796196517089408 103:0.133989711125247 107:0.134641000916539 150:0.122750315424812 179:0.0767282238375112 185:0.0819649598719846 205:0.111375262128802 220:0.112915887968332 229:0.147422880464606 355:0.084713553000923 426:0.126712267891926 499:0.104840643686693 539:0.130769465913934 800:0.124126257310053 903:0.156716208585988 963:0.119422083729918 1001:0.329973451650687 1150:0.153589137290456 1169:0.158623784919037 2564:0.214688381833961 2723:0.183485947348946 6457:0.569890633346625 7235:0.291986679003153 7957:0.300604610003745
+1 6:0.0231611124582526 15:0.0132253438275198 26:0.0334158932970222 27:0.0112399341163596 28:0.0285055195171729 29:0.0280388817019573 31:0.0147129598569164 47:0.0182705623215184 54:0.0289033745671348 59:0.0239696989111159 60:0.0878976275001575 63:0.00834378374999175 67:0.0873423802306291 68:0.0236975665712065 75:0.00782332130429781 96:0.047833639785833 142:0.00400400918848128 159:0.0464454131371595 162:0.0209067809836227 172:0.0302719394014337 174:0.0282960961326027 176:0.0400180669069023 185:0.0449575860799905 192:0.0311743278829748 194:0.0305840546658745 204:0.0231734200890191 215:0.0245919528224656 252:0.0557172417330807 275:0.0519163832237573 278:0.0999761260588368 345:0.0283280468215235 389:0.0328981336330914 415:0.0335849875004992 426:0.0347506891971846 427:0.0820113950806572 434:0.0334025930364781 473:0.0339867415548656 485:0.0267136383946817 490:0.0399481711629385 502:0.0266451724462232 515:0.251003491922323 538:0.0338242067232488 561:0.0342074088144354 570:0.0447834720501116 576:0.0377879402806363 580:0.0349282069616516 593:0.0371803675462611 597:0.0345185342517323 622:0.042603160098363 653:0.0394336854839561 657:0.0400929339450613 726:0.0355740515644635 836:0.0437739804278197 848:0.0426649191383321 862:0.0371435270035696 912:0.0367111549153199 966:0.0385578441567235 987:0.0315146509859808 1013:0.0478304985337454 1056:0.0379058447858645 1067:0.0410587886056025 1215:0.0452474138945069 1216:0.041328310663508 1377:0.0368176045082822 1411:0.0488905470317202 1713:0.0634627769545054 1738:0.052125041158754 1880:0.0539357655257189 1910:0.047241922378418 2160:0.0597736359773941 2306:0.0543010308719831 2316:0.0639135532964655 2581:0.600898279755843 3369:0.0630304048662558 3787:0.637239114568331 3882:0.0677573195795141 4335:0.0699565620909856 4422:0.0659371426056341 4540:0.0738513725467816 5957:0.0800770004401697 6177:0.0765132058413104 6713:0.0854874842804326
+1 6:0.0204016834542122 15:0.034949004996438 27:0.0594048092382873 28:0.150656127662817 41:0.046971150891345 142:0.00529045365319092 180:0.0786086045649659 186:0.173658315330343 245:0.117946808671911 405:0.097012096871975 480:0.0750287107013014 1440:0.126395831672792 1817:0.145008020249921 2067:0.127207171114147 5053:0.182791457773024 7928:0.474512050171333 9076:0.769970086215475
+1 4:0.0444502105526495 6:0.0102762941780664 15:0.0352075119075488 26:0.133435902669109 27:0.0299221040604136 28:0.151770484143238 75:0.0208266553648685 83:0.0266265278290111 96:0.127339104699628 134:0.0735983661080311 142:0.00266479274603152 158:0.0737585726676424 176:0.0532665383039071 180:0.0791900479438229 192:0.0829899422248517 209:0.064553878385316 227:0.0730447046992638 255:0.095646810321848 312:0.0931425371468792 351:0.0729274642865406 370:0.24305296083465 405:0.0977296651548292 413:0.0888531738166843 475:0.0832699472929064 531:0.115630869824396 592:0.101227488202266 667:0.0989787675983255 737:0.121092682958934 743:0.130451099483036 850:0.0942005303011366 1033:0.123099589138891 1080:0.103904242490795 1081:0.114246725497161 1188:0.12653642839909 1746:0.120036519088674 2565:0.165624770476786 3546:0.148820255562659 9077:0.77566531526865
+1 6:0.0273336790946277 26:0.295769246518535 27:0.0397945590137483 29:0.0992705936722547 31:0.05209067448543 41:0.0629308051000214 63:0.0295408488519273 67:0.0773080933684052 75:0.055396342737323 85:0.0837542786557756 134:0.0978813026479734 142:0.0248080737852115 153:0.118536003561874 174:0.200362503151798 176:0.0708412215168139 209:0.0858526899640519 507:0.073075884477785 541:0.140929363379509 546:0.118078130751363 549:0.145936699439729 671:0.0834638662281729 858:0.137112581830937 1138:0.134768111127402 1877:0.221685999898753 2202:0.191598554948926 2239:0.443371999797507 2974:0.47095085620823 4176:0.227950414024149 4308:0.250680092843139 5440:0.276672638895713
+1 6:0.00758537395464753 15:0.00866272540158423 26:0.0437754528662456 41:0.0349278769461023 47:0.0119673912745093 60:0.0383825187163344 63:0.021861029362723 120:0.021065641006009 142:0.00524532784290392 144:0.0300644240448114 172:0.0396568137400474 174:0.018534210825091 176:0.052424425290988 198:0.0440314421774505 204:0.0303576190479087 229:0.0264823930638231 243:0.0476821720277735 252:0.018247660384565 256:0.0172069238253539 275:0.0170028612328019 279:0.0286274676585184 287:0.0234695336858528 296:0.0228005728599685 331:0.0395314718223863 349:0.0501313380635015 382:0.0222082023064361 389:0.0646457668559999 396:0.0256815078398094 429:0.0288549512502864 448:0.0686936291700102 485:0.0349953720535889 493:0.0225724659133356 561:0.0224061765897211 567:0.0274375906414588 630:0.0349843518635864 742:0.0259500947221464 755:0.0263897295278651 772:0.0234271015782594 824:0.0565566618984484 880:0.0892254348698114 882:0.0189875297051697 908:0.026893895209886 1045:0.0131348336017421 1135:0.0343435001346712 1201:0.0322463879048302 1236:0.0278652549113077 1327:0.0328775162572911 1493:0.0337568724348821 1591:0.0900291209707061 1614:0.0319511251336798 1636:0.110717949352351 1731:0.031395818606569 1829:0.0831374393208451 1831:0.0684844381911176 2002:0.0391522973980426 2144:0.0353284369893889 2165:0.0378534933683735 2180:0.0407515847785084 2264:0.103030500404014 2306:0.177838446244446 2592:0.0342422190955588 2723:0.0329606026152051 2913:0.037207666646083 3692:0.0453080768566766 4175:0.053999280259808 4205:0.04764239605474 4354:0.0453080768566766 5357:0.0428335987913686 6668:0.0939623389720547 6770:0.0524511933181113 8282:0.0559951114505366 9084:0.82701937222516 9099:0.381701248719305
+1 6:0.0184751778876827 26:0.0799656632276744 27:0.0268976435332991 28:0.0682149285544697 64:0.080119977421226 134:0.0661592049880633 142:0.0119772067546052 176:0.0478824736608951 178:0.0745514592361253 192:0.0746015012281959 204:0.110909972700748 278:0.0797490499123352 313:0.209506018343539 795:0.109440098981823 993:0.20302582240974 1201:0.117810490887916 1216:0.0989004167241968 1412:0.115951817319126 2160:0.143040869863199 2165:0.138295757301938 3482:0.140897656257862 3563:0.159160806978846 4473:0.167409047994302 6279:0.686572977534413 7824:0.429704468086646 8309:0.204575209688001
+1 6:0.00836316995500145 15:0.0286529755448254 26:0.0361981051659218 28:0.0926366789707054 31:0.0159379629168886 60:0.0317386653490947 63:0.0451924416593146 67:0.0473072594068882 75:0.0169493842228066 81:0.0254598967272626 88:0.0319302141584729 107:0.039999526627209 142:0.00650607531579347 158:0.0300135179165281 185:0.0243503804381986 205:0.0330876756174363 229:0.0218984016475753 252:0.0301781334690351 312:0.0379011565210933 327:0.035166730906014 345:0.0306866438935524 387:0.0295177213062107 389:0.0356372367612065 405:0.0795354614389807 457:0.0288341203131023 626:0.0394657788932197 644:0.0398444768731501 726:0.0385359519873476 764:0.0386741886859724 1018:0.181506068174544 1031:0.0513839062977921 1149:0.0401172046556486 1189:0.056967548956308 1250:0.0564649792501799 1309:0.0493624284399974 1446:0.0436435555638294 2114:0.0598754967427161 3825:0.137493392973298 4429:0.0787913933416211 5300:0.0813516324826186 6983:0.0893044616443398 7838:0.875315617254549 9103:0.315630359903346
+1 26:0.123734689082876 27:0.0832400164100182 142:0.00741316156982494 153:0.247946933606162 549:0.305262165412867 671:0.174585012792237 2239:0.46371028418906 2974:0.492554233174711 5440:0.578728237544376
+1 26:0.143344667957762 28:0.244561125080968 63:0.0715849132341181 67:0.187336971385348 142:0.0171760593835098 199:0.154806916058955 204:0.198814748334272 726:0.30520510489389 1018:0.359382444958655 7838:0.77027866476233
+1 6:0.0158514654368886 31:0.0302086493124996 63:0.0171314568716332 67:0.134498531914998 75:0.0160628433733844 80:0.0516052311042993 142:0.0184973213302484 144:0.0471201401680038 153:0.0687419120193465 179:0.172818866382653 192:0.128014260587677 194:0.0627951813191011 209:0.0497880633967258 308:0.117121927573866 626:0.0748030272530377 667:0.0763387309853126 882:0.0595185232764266 991:0.084192898564044 1005:0.167100180398008 1031:0.0973925221027788 1045:0.12351778955918 1050:0.0935610339748702 1150:0.0864841490773888 1527:0.103058230692216 1688:0.106714665040375 2153:0.126186372678157 2733:0.103058230692216 5292:0.169266748700786 5851:0.677066994803144 6741:0.526568710514375
+1 6:0.0104208013214303 15:0.0357026064311728 59:0.0647076354050277 60:0.0790949670017131 63:0.0225245431240056 68:0.0639729978821255 75:0.0211195236324027 142:0.00270226555293187 185:0.0606828458618036 232:0.0924958311536637 252:0.0752060127498309 278:0.0899638433536631 351:0.0739529837349148 404:0.0875105831293878 533:0.652581685475504 543:0.115344200301245 561:0.0923449454214346 575:0.108762783475298 655:0.0789062350959839 703:0.449307389119874 726:0.0960342792393381 850:0.0955251955259058 947:0.380309624480443 1432:0.12390821052419 2316:0.172538458638276 2608:0.18476027127582 2854:0.18476027127582
+1 6:0.011486840869839 15:0.118064862594583 26:0.0497182140346171 28:0.0848245179576902 63:0.0248287856711356 67:0.0649766731656746 88:0.0877125039791673 102:0.21890606927587 142:0.00595741026762335 153:0.0996283160820112 275:0.0772443768023401 322:0.0995509717532154 349:0.227747783973678 373:0.164003046653457 952:0.214023454333401 1159:0.116804929235017 9124:0.867038631860286
+1 6:0.0169861232403666 26:0.171548123142737 28:0.0418113135474068 29:0.0205634293676513 41:0.0260716314439732 75:0.0459003513111265 81:0.0344737657948038 83:0.0146707063632588 100:0.0349881367360352 142:0.00880949828990656 151:0.0447155480960112 186:0.032130045134493 204:0.0339902990620479 215:0.0360709738892392 232:0.0502567105521026 234:0.0406174447276722 239:0.0480034413717939 308:0.0418351961177726 398:0.0880799608023674 399:0.0533879578828065 437:0.101857250775998 480:0.0416451557179379 483:0.0549746017819474 582:0.0477565593029575 663:0.0529908599968211 696:0.0624894446814027 724:0.066252475198601 747:0.0623993829279439 840:0.143097954678037 882:0.0425192642486036 965:0.0565558579199927 986:0.0506310806904114 1098:0.0635161948151283 1241:0.211821410762765 1245:0.055369357186222 1433:0.0545896289413241 1509:0.143097954678037 1550:0.631021403150346 2163:0.0715489773390187 3563:0.0975552206250134 4659:0.105206142721185 4841:0.602326182221827 8684:0.125391295095493
+1 6:0.0375881254859551 15:0.0214633854172486 26:0.135576474655281 27:0.0364825355242429 31:0.0238776346502536 63:0.0135411108247788 67:0.141747783240917 80:0.0407900016185267 86:0.048666584743185 88:0.0478366019519645 134:0.0448674164196689 142:0.0292414451346729 153:0.0543352416514255 185:0.0364807905960101 206:0.059751220535889 219:0.0523811842743398 232:0.055605847079177 284:0.0380445191512457 322:0.0542930596397168 337:0.0957891511379188 382:0.0550246237102353 409:0.031993979904024 441:0.0441754622390321 455:0.0457414182351345 465:0.106541621421052 475:0.050763455739638 530:0.0514994955714485 586:0.0460516070039378 594:0.0599842974784262 613:0.115880323307829 658:0.0579401616539146 667:0.0603399479822841 755:0.065385073363855 757:0.119042523546361 799:0.0632005814572895 827:0.053510663362347 829:0.046474096134336 975:0.0776240253650516 1005:0.0660399777603455 1050:0.0739528657386061 1164:0.0664623371205807 1216:0.0670716370011389 1237:0.0768243853198303 1243:0.0834077008611896 1676:0.085091901889557 1740:0.0897031347845629 1744:0.0861339882833211 1767:0.380378580432418 2114:0.179406269569126 2928:0.108921139057406 2946:0.0970065204734815 4459:0.119853252455037 5188:0.129956812156987 5440:0.126822857537028 5871:0.267584925238038 5873:0.668962313095096 5884:0.133792462619019
+1 6:0.00806236291177193 15:0.0414335751731955 26:0.0348961293548288 27:0.0234756671849435 28:0.0595364779002635 29:0.0146404651543976 63:0.0435669569657109 67:0.0912114176207968 75:0.00816987383196763 88:0.0307817461299173 142:0.0146348168723253 162:0.0218328963141197 172:0.0316129065826322 176:0.0417907618659382 178:0.0325334307262361 204:0.0483998831234155 228:0.030487753345493 229:0.0211107585066966 232:0.0715621510846023 252:0.0290926843931644 275:0.0271080711281261 312:0.0365379252476129 339:0.0313549742572694 373:0.0575550795792894 382:0.0354070717573855 384:0.0436844610841546 386:0.0321054923498148 405:0.0766747247666322 408:0.0237373304488992 411:0.0302013728864854 442:0.0343041078644803 528:0.0421776396032265 531:0.0453596413344191 543:0.0446197357531576 643:0.0327983733893352 726:0.0371498883490717 742:0.0413728609483941 761:0.0409914153093751 764:0.0372831529410907 804:0.0379746798146769 834:0.0406226869207786 888:0.0603507360689564 997:0.0383373623833161 1225:0.035958052555259 1228:0.0496376704303765 1359:0.0447506346458121 1527:0.0524174159287602 1614:0.0509404482509393 1880:0.0563249778752713 2074:0.0688579843489938 2090:0.0649712329962727 2775:0.0595696473510799 2796:0.0694560125480281 2854:0.071472639807446 2944:0.0662740108168355 3236:0.0603507360689564 4020:0.0653886722477134 4517:0.0722357580464118 4887:0.0658224857839158 5829:0.313702286606156 5869:0.860923529344871 6556:0.0771227938309762 7955:0.0860923529344871 8291:0.0892743546656797 8419:0.0860923529344871
+1 6:0.0180153102244849 11:0.0809548139086127 23:0.0647940886380523 28:0.0665169833449431 60:0.0683690401428595 63:0.0389400603204337 75:0.0365110856924824 83:0.0233394038127262 98:0.0584297970682369 142:0.00934326463837143 276:0.139950094937657 304:0.136411803665899 346:0.225139626643935 373:0.0643032709493807 384:0.292838139525348 399:0.08493409089587 448:0.0815738978290733 496:0.0755338269535873 574:0.0674453690814693 687:0.101355895195164 886:0.077585126049593 1043:0.402967269163146 1808:0.45284717344317 2355:0.163242051163889 2854:0.159705261693687 3376:0.131477908467473 3551:0.339452959034951 5370:0.161410445640797 7900:0.41900864741277
+1 6:0.00951506447657786 15:0.0488992053052404 26:0.061775733323053 29:0.103670577548265 63:0.0205667945793785 67:0.0538230869262129 83:0.0123270667757444 85:0.0291555102714148 142:0.00493478959551893 176:0.0493207510045366 178:0.0383954052170522 185:0.0277042606027752 215:0.0303086499578753 229:0.0498291209509783 232:0.126684662257956 252:0.034334694533969 256:0.0323764505126657 274:0.0514152980138505 275:0.0639849749862203 284:0.0288917881398288 287:0.132480425376625 320:0.0451583707462852 337:0.0727442460178964 355:0.0286332885734353 373:0.101888298593932 377:0.0732339170364042 394:0.0443213018826901 404:0.0399522462416914 409:0.0242968845384062 415:0.041392224413441 426:0.0856578151622193 442:0.0404851284560044 448:0.0430845146587865 478:0.0373090181771127 502:0.0328391653387547 527:0.0453763023776465 586:0.0699450697624527 593:0.0916467881505795 639:0.0547358571376021 643:0.038708086071235 644:0.0453324240118797 657:0.0494130217920306 663:0.0445255908959408 688:0.0528139428455843 713:0.095145971301798 742:0.0488275514030342 747:0.0524311059789454 757:0.0452016669767717 761:0.0483773757052526 764:0.0440009471177011 772:0.176321207114569 778:0.0454645040748631 800:0.0419548327179772 862:0.0457779895024705 1036:0.0537813336054826 1056:0.04671751728162 1126:0.0507352587629135 1159:0.0483773757052526 1190:0.0514852917554052 1216:0.0509355767837311 1228:0.234326159603923 1242:0.18118164988954 1248:0.0612548855170451 1288:0.0624990456875015 1296:0.0484328059436356 1380:0.0490004519641796 1421:0.400181606942879 1431:0.0555723298146965 1504:0.066473787150229 1509:0.0601190562714249 1544:0.0623368845770028 1548:0.0523558677215255 1620:0.115073356563009 1707:0.0543806297343679 1709:0.0606746210310189 1731:0.0590741946519488 1776:0.0551010222500471 1779:0.0648139287265964 1868:0.0748745642468478 1995:0.0615549861251005 2041:0.0748745642468478 2121:0.0691672619939131 2160:0.0736687412596729 2178:0.0706031918475887 2219:0.0683758802132067 2306:0.0669239628480106 2406:0.0771706060969252 2435:0.0700097350395456 2484:0.0762032153370268 2561:0.0709103542905607 2722:0.0656174932440945 2779:0.0715472514099897 2806:0.075745140212968 2825:0.0642421379841491 2944:0.0782154677164013 3432:0.0872636734388895 3473:0.0805954571324779 3484:0.479751360078293 3521:0.0910190181149115 3924:0.163941624784847 4161:0.0862188118194134 4213:0.0862188118194134 4259:0.0827169469821611 4419:0.0883995026845096 4740:0.0782154677164013 5452:0.0896436628549661 6744:0.210720169767732 7622:0.101604740207844 7992:0.0963118791613777
+1 15:0.11077682758501 26:0.139947463696962 28:0.238765136238216 63:0.0698883829361118 67:0.182897169288326 142:0.0167689944891349 5829:0.629035944360315 5869:0.690529675333057
+1 6:0.0155323080972137 11:0.104695541951217 27:0.045226356031653 29:0.0282051574647671 63:0.0167865278666983 64:0.202073535899964 75:0.0157394300978689 92:0.0512680887540901 142:0.008055507409456 172:0.121805830440338 177:0.0810560056919406 204:0.046621685526235 205:0.0614513365955621 228:0.0587352843497813 251:0.0877921789700606 262:0.0726831854590835 308:0.114763765612696 326:0.181119351179744 327:0.0653126149705183 351:0.0551138291887746 377:0.0597732030810327 398:0.120812006572668 415:0.0675683053962661 483:0.0754041202029227 539:0.0721520947533727 574:0.0581495538655717 662:0.0809566632671225 720:0.0773208192201495 724:0.090873047583529 768:0.0970559190736223 1036:0.0877921789700606 1299:0.114762151744419 1319:0.0819715651493263 1379:0.0819715651493263 1819:0.107800866384043 1836:0.0828197930174042 2341:0.108153087816955 2736:0.202993446579078 2804:0.202993446579078 3598:0.140742834927847 9136:0.781596455447914
+1 6:0.037583290217954 11:0.0211108511854314 26:0.0406677103033543 27:0.0273583818579907 28:0.0346917019235965 29:0.0511856936525547 31:0.0716236892244658 33:0.129983561580015 36:0.35894555235465 60:0.0356576357219724 63:0.0609271601442547 64:0.0407461890486775 74:0.0385126797460579 75:0.0285633451350764 80:0.0305885658502588 81:0.0572071769896062 83:0.0121725850967519 88:0.0358728362539627 92:0.0620263082120564 96:0.0291071764605289 114:0.0659755822186751 142:0.0182735522302687 144:0.139650329972297 154:0.0679208383488272 159:0.0282624287430007 168:0.0348912448010642 174:0.0344368301038087 180:0.0362025271789952 185:0.0547141466603287 205:0.0371732166767683 237:0.0807432573545598 265:0.0443807834524074 275:0.0315915605513654 289:0.0408735008240463 304:0.0711451030046949 308:0.0694230355612917 317:0.0280005686996906 327:0.0395089858501264 331:0.0367250214144021 351:0.03333952404981 355:0.0565489176136872 377:0.0361580781264271 387:0.0331624579074996 412:0.0478808194336649 422:0.0856784593971237 473:0.0413624423391195 550:0.0382751870255832 565:0.0999384876877198 574:0.0351758982840157 582:0.0396245939117958 592:0.0462771647202899 654:0.0981857451463092 671:0.0286903081753679 684:0.0879352004858872 689:0.176133551003049 719:0.101131625155552 723:0.0482156489724677 757:0.13390561139957 782:0.0535272645856084 834:0.0473414012952552 881:0.0535272645856084 882:0.0352791030985124 1009:0.0418706637147731 1037:0.0525415453459389 1055:0.102525501095446 1235:0.0550668720384547 1248:0.0604872448663279 1373:0.0545022469255551 1591:0.0557584669150725 1612:0.0685718470790852 1691:0.0658610945772885 1765:0.205715541237256 2076:0.0585841854731949 2114:0.0672686966525144 2124:0.0656407436991979 2303:0.130422060317782 2387:0.0638107168667106 2504:0.0691323794113592 2694:0.206547199901553 2736:0.12279504062395 2792:0.0720087471995665 2804:0.12279504062395 2815:0.0709769796908166 3463:0.0762035110843324 3473:0.0795854421983906 3825:0.0772352785930822 5211:0.0802466236614374 5526:0.160493247322875 5570:0.466703286394013 6674:0.104039721888536 6737:0.104039721888536 7170:0.100331438850234 8254:0.100331438850234 9150:0.35460320314161
+1 6:0.022580449839851 11:0.0202938066786486 15:0.0154725320789513 27:0.039449312648975 29:0.0656062333424891 31:0.0172129168308476 36:0.0345053431700233 68:0.0277241456818018 72:0.0843140755487998 79:0.0612518896854148 80:0.0294047092885886 88:0.0344844647692429 132:0.0547803834089276 142:0.00468435160712268 153:0.0391692062144882 176:0.0936354974252163 178:0.0364468585039464 185:0.0525965677631322 190:0.0387207376805436 192:0.0364713231277504 199:0.0211099068139776 215:0.0287705018404057 226:0.0700345561138009 240:0.0406553629441586 286:0.025304790850388 299:0.0373858523794702 309:0.0332353606853738 322:0.0782775960650496 337:0.0345262568086277 355:0.0271801641691016 373:0.0644783471888217 377:0.0347586670439689 387:0.0637579701407827 398:0.0351266461802318 411:0.0338342787602469 422:0.0823624815625429 436:0.039890017602183 493:0.0403167810076547 495:0.0497702548004714 535:0.0428256439684294 580:0.0408630436926609 586:0.0331976970456426 608:0.0492787496010208 643:0.0367436709684813 654:0.0471928515126225 757:0.0429077060427333 774:0.0506610330354669 876:0.0435845338125087 956:0.0598008634218209 1034:0.11387927389628 1037:0.0505080517352028 1057:0.0615246557766239 1306:0.0646652242204649 1624:0.057197798951109 1647:0.0685518578904709 1700:0.259623360360499 1820:0.0575954157794898 1853:0.0664567776394207 1873:0.0598008634218209 1932:0.11657569772885 1956:0.06731169093496 2056:0.0588710778263917 2209:0.0771408719096708 2902:0.0646652242204649 3086:0.323699824294241 3183:0.0732542382396649 3540:0.07590070495416 3582:0.0809249560735603 3852:0.0878593388175831 3909:0.080070042778021 4469:0.0895139700927603 5035:0.0792703247983832 5150:0.170188587794843 5473:0.0778108365787826 5852:0.0964483528367831 5992:0.0914241017173829 6411:0.0878593388175831 6712:0.400052462946331 6720:0.400052462946331 6884:0.0850942938974213 6993:0.0914241017173829 7916:0.420149467423932 8125:0.0914241017173829 8285:0.100013115736583 8622:0.100013115736583
+1 6:0.0213314752946713 26:0.138492758765293 27:0.0621121400836928 30:0.0641100634197683 33:0.0590207215276301 64:0.185013354605905 74:0.262307724024278 75:0.0864637147765888 80:0.0694456747081194 83:0.0276356004764697 142:0.0331893733143905 174:0.0781824461164673 181:0.0900262893690205 204:0.0640284320124462 303:0.285887743553072 325:0.0957743694344308 339:0.0829592845240698 345:0.0782707262454019 363:0.0996362387063212 437:0.191871217266445 579:0.125238349598109 882:0.0800946709880736 1241:0.133004545140426 1242:0.270789679388946 1432:0.12682061820755 1448:0.133878187346938 1776:0.123528967957214 2976:0.14402210123316 3348:0.180684009752766 7618:0.683351860904454
+1 6:0.0114823915070056 15:0.0196698551396523 27:0.0501509553319851 28:0.0211979154151214 29:0.0104254518549402 37:0.0271643287048281 64:0.0248974314043359 68:0.052867551993011 73:0.0623864976618715 74:0.0235326744552508 102:0.0273526596560275 110:0.0831119427040251 117:0.207453388256014 134:0.0205590955086729 142:0.0081882662103762 144:0.119464137117073 156:0.119539067684154 172:0.0225115002902046 179:0.0156481895278322 199:0.0268365130493006 201:0.0344516798700101 203:0.0217620990583485 204:0.0172327397376555 205:0.0227142128846131 229:0.0150329374177517 248:0.0349210509143405 254:0.0277039809013417 256:0.0390705792176959 284:0.0174327154364323 297:0.0280428029248823 328:0.0291234534928516 329:0.0770810203923932 346:0.0478323030920892 351:0.0203716846277748 360:0.176734529198969 369:0.0256694486441958 406:0.026915683800408 408:0.0507099453091084 411:0.0215063493994636 478:0.0225115002902046 500:0.0297071573380938 515:0.0414793024165339 586:0.0211017139446162 587:0.0727141759302482 643:0.023355669310012 644:0.10941063862411 647:0.0259298491364489 678:0.0310651745052908 684:0.0268658330170262 685:0.0303376055192387 747:0.0316358595087564 768:0.0358747088295106 781:0.0311076349719026 849:0.0358747088295106 867:0.0252334892946733 882:0.0215568392998023 888:0.0429756627717606 967:0.0367829428905775 1047:0.03235022167712 1052:0.0880000258071525 1073:0.0384318685084898 1112:0.0345829562002313 1155:0.0334162239286454 1205:0.158873126276293 1232:0.0325012115560744 1296:0.0584467337028139 1395:0.0306527034360428 1426:0.0681409789548899 1482:0.0340087134942427 1576:0.0318201111265273 1671:0.0449277189090021 2164:0.0370499649868201 2578:0.0433695647224315 2669:0.102877935881943 2774:0.0462659112545532 2908:0.045979465233592 2928:0.399277743982243 2970:0.0931263381576684 3044:0.0465631690788342 3121:0.0508955526617395 3530:0.0533384561579553 3572:0.0486296543107626 3602:0.0549190183183356 3899:0.0486296543107626 4177:0.0514389679409716 4796:0.0568984706483513 5544:0.0549190183183356 5607:0.0613062270311411 6140:0.0568984706483513 6810:0.739680118428567 7780:0.063572125382118
+1 6:0.00961113989227972 15:0.0493929498814076 26:0.0623994946516188 29:0.104717359087005 63:0.0207744614158705 67:0.0543665488715862 83:0.0124515355134791 85:0.0294498990037478 142:0.00498461710461861 176:0.0498187520078039 178:0.0387830909259983 185:0.0279839957911889 215:0.0306146821609395 229:0.0503322550622824 232:0.127963821387087 252:0.0346813784748364 256:0.0327033616912091 274:0.0519344480566353 275:0.0646310434480375 284:0.0291835140196414 287:0.133818105428268 320:0.0456143434044367 337:0.073478758505257 355:0.0289224043339618 373:0.102917084123096 377:0.0739733738251698 394:0.0447688224973227 404:0.0403556516705608 409:0.0245422148026449 415:0.0418101695757817 426:0.0865227184132777 442:0.0408939144979412 448:0.0435195471975932 478:0.0376857344294952 502:0.0331707486369015 527:0.0458344755329286 586:0.0706513184347833 593:0.0925721632009517 639:0.0552885354974007 643:0.0390989289782349 644:0.0457901541189573 657:0.0499119544709883 663:0.0449751742555942 688:0.0533472152712451 713:0.0961066782699619 742:0.0493205724761229 747:0.0529605128279515 757:0.045658076805197 761:0.0488658512687013 764:0.044445233049343 772:0.178101555877553 778:0.0459235678194571 800:0.042378458643372 862:0.0462402185690493 895:0.049972578063949 1036:0.0543243739596354 1126:0.0512475423200441 1159:0.0488658512687013 1190:0.0520051485383107 1216:0.0514498829900167 1228:0.236692195404225 1242:0.183011075467636 1248:0.0618733877462529 1288:0.0631301104385788 1296:0.0489218411967436 1380:0.0494952188471184 1421:0.404222316739215 1431:0.0561334541982054 1504:0.0671449856218165 1509:0.060726089816715 1544:0.0629663119565058 1548:0.0528845148755368 1620:0.11623527413017 1707:0.0549297212955148 1709:0.0612872642193501 1731:0.0596706780307435 1776:0.0556573877514373 1779:0.06546836729199 1868:0.075630586962534 1995:0.0621765185272244 2041:0.075630586962534 2121:0.0698656569932725 2160:0.0744125885513206 2178:0.071316085703782 2219:0.0690662844802125 2306:0.067599706829238 2406:0.0779498123838587 2435:0.0707166366494777 2484:0.0769726536954684 2561:0.0716263496243602 2722:0.0662800455532521 2779:0.0722696776151364 2806:0.0765099532997601 2825:0.0648908030696665 2944:0.0790052241698301 3432:0.0881447913463877 3473:0.081409244791694 3484:0.484595500805507 3521:0.0919380544518371 3924:0.0827984872752796 4161:0.0870893795604162 4213:0.0870893795604162 4259:0.0835521557278781 4419:0.0892920892759256 4740:0.0790052241698301 5452:0.0905488119682515 6744:0.212847851399006 7622:0.102630662594053 7992:0.0972843585229453
+1 6:0.00674659568834133 27:0.039288937187291 29:0.0490046405337328 37:0.0319213541542919 64:0.117029908454721 79:0.0457521592555999 80:0.0439277530585794 111:0.0421916512340399 119:0.0705886064930321 142:0.00349898104105898 168:0.050106761887126 183:0.178056891859994 204:0.0405010846534685 205:0.0533838654144136 215:0.0429803093039661 226:0.0523123805840206 232:0.0598833003722602 284:0.0409710756605917 288:0.140143949876807 295:0.0572833361672787 325:0.121163855561618 337:0.0515788429751651 341:0.0563700311254883 377:0.0519260410829974 400:0.178343151707898 404:0.0566557699944643 411:0.0505450956072554 424:0.138973829872441 439:0.0727144453140167 442:0.0574114434548654 471:0.140656976908267 729:0.217850278335704 739:0.0689197808458474 774:0.0756826169248395 804:0.0635545221438153 856:0.0506340217791148 862:0.0649171820871108 881:0.07686965358652 887:0.170508131322225 906:0.078943027292055 963:0.0572408299966473 1113:0.0819111989028779 1115:0.189808033485651 1198:0.0803676861543884 1225:0.0601794895578931 1237:0.082734064557474 1329:0.0908383772983831 1608:0.0731104268123547 1858:0.0868647706037973 1910:0.082566539168189 1989:0.10943465063044 2026:0.162556535751791 2353:0.10341061691238 2441:0.108736023221891 2644:0.110160682084225 2765:0.102409755375071 2823:0.0973295371424681 2960:0.106178663015408 3534:0.115240900316827 3749:0.122265795572196 3986:0.254245066144609 4001:0.11729984578377 4030:0.127122533072304 4126:0.110916355544626 4431:0.119616794440059 4448:0.119616794440059 4689:0.136578645428139 4757:0.393759717355883 5194:0.139953678014061 5196:0.139953678014061 5757:0.120893951094266 5799:0.273157290856277 8658:0.139953678014061
+1 6:0.0179519193446637 11:0.0806699563726901 23:0.0645660962118993 60:0.136256936907872 63:0.0388030410488673 75:0.0363826133089135 83:0.0232572789242977 142:0.0139655824224383 276:0.139457649371158 304:0.135931808364979 346:0.224347422744156 373:0.0640770055745374 384:0.194538482224063 399:0.0846352313879506 441:0.0632940050781194 448:0.0812868619085482 496:0.0752680443671546 574:0.0672080475348145 886:0.0773121255106049 1043:0.401549339112922 1808:0.451253729844841 2355:0.162667647663857 2854:0.159143303174811 3376:0.131015274175255 3551:0.338258518225273 3685:0.162667647663857 4909:0.166781922099119 5370:0.160842487052574 7900:0.41753427220184
+1 6:0.0108898708572805 15:0.0373096810227278 26:0.235671816222871 27:0.0317086921948477 31:0.0415063567587184 60:0.0826552536164559 63:0.0235384360735514 67:0.123199683451319 75:0.0220701727084249 85:0.0667362249442187 100:0.0672930989374015 134:0.077992775249075 142:0.0112956084607385 144:0.0647425619100662 153:0.283351926301203 176:0.0564469752512555 179:0.0593628123564237 199:0.0509033612359068 232:0.0966593283022088 414:0.0804621295686032 436:0.0961887702112506 609:0.0771169606364857 613:0.100717054075524 667:0.104888589026493 895:0.113242534729706 975:0.134933402618899 1094:0.112160794107453 1557:0.160250511220346 1731:0.270438672209163 2034:0.146624793208486 2047:0.149726222848494 2212:0.184480961115217 2873:0.157102357847228 3119:0.17664156379439 3185:0.342771964246984 4066:0.195138344679227 4685:0.410384149920242 5186:0.225903188805025 5691:0.241166567125578 8196:0.215849458524131
+1 6:0.0468508367586008 15:0.0401287994600656 26:0.0506958343912722 29:0.127614829025586 60:0.0889006822297704 63:0.0253169996340553 67:0.198762972045375 68:0.0719039829156441 80:0.0762626101663433 88:0.089437214552309 142:0.00303727607872252 178:0.189053565168421 203:0.0887944423324296 229:0.0613378925924654 278:0.101117016079918 858:0.235015534011084 882:0.0879569346203043 912:0.11139026650323 1380:0.120635660521404 1391:0.148008880990089 1446:0.122246535003338 1744:0.161039531990108 2090:0.188775714044631 2316:0.193928732323556 2411:0.196852341455255 2561:0.174576296437061 2705:0.343305374610725 2798:0.400137555151556 2799:0.400137555151556 2833:0.176957944332634 3900:0.209882992455274 4162:0.209882992455274
+1 6:0.0172208257249661 11:0.0193461661851168 12:0.0870669830146157 13:0.0286132499507934 29:0.0781783522136533 31:0.0164091417058057 39:0.0432397161079836 55:0.172958864431934 58:0.0288796604550836 63:0.0186113917590622 75:0.0261756959457599 80:0.0280316256841353 91:0.0344005163488366 92:0.0284207220253588 98:0.0558530127940669 105:0.0457330345646497 110:0.0415493084954225 138:0.0361013730571121 140:0.0304226377366596 142:0.0178624436698239 160:0.0390216398050168 165:0.0418006520612306 185:0.0501405161104093 191:0.222264147591502 195:0.0599552064398865 196:0.120102834774065 199:0.060372473017379 200:0.0415908294588562 204:0.0258449651019829 209:0.0270445520116805 240:0.0387569183193928 306:0.0337832945179112 317:0.0256599627643544 321:0.228651265055427 327:0.0724127510869342 345:0.0315938423718707 367:0.0367458620759338 370:0.10182592595987 373:0.0307337317194664 375:0.0305199957212911 381:0.082769337739097 408:0.0253509073772632 411:0.0322543517839844 413:0.111673891985775 455:0.0314343285940542 498:0.0442371608039467 499:0.0320671418128459 508:0.0334028884178802 531:0.048443023894798 535:0.0408258558050408 540:0.0486680345443848 546:0.0371959242032414 555:0.0496135551921952 583:0.0677558110773561 593:0.0414667018515475 641:0.0340658565183961 709:0.112635280571021 727:0.04609284010384 733:0.0485925537640198 739:0.0439797932830101 796:0.0378441652430373 814:0.0477926191583324 845:0.058304240272765 890:0.0452130762171183 987:0.0351478138231222 1045:0.0447293729487342 1046:0.145106888475063 1056:0.0422758156495025 1058:0.0482953631979263 1063:0.0630938787398518 1078:0.0546518913068495 1140:0.0437279137628482 1235:0.0504637566904785 1240:0.0723564422812606 1245:0.0421008094569825 1305:0.0391562589478026 1316:0.0597599507227448 1576:0.0477225138965744 1645:0.0492103521618105 1688:0.0579667115408083 1707:0.0492103521618105 1870:0.0780214961343997 1871:0.0780214961343997 2024:0.041928358190813 2132:0.55276911747547 2168:0.0799948562435344 2247:0.212337227223702 2689:0.502539931495781 2757:0.0823653193560994 2758:0.0823653193560994 2768:0.0698335550934236 3865:0.0823653193560994
+1 6:0.0205249664849195 11:0.110678849593755 31:0.0312920728830958 63:0.0266188066607272 75:0.0166389321266911 80:0.0267280181275195 83:0.0106362971287196 98:0.0532555748017598 118:0.0268800567048279 142:0.0053224227385679 174:0.0300905973746762 176:0.0212779800677347 199:0.0191882860142136 209:0.0257868482036681 232:0.0364362351006448 263:0.0587787917990214 269:0.0438337752418982 276:0.191335323501852 304:0.124331922725801 323:0.0351162266787289 328:0.0416469274019224 346:0.171002080405054 373:0.0293044630297388 448:0.0371750804870493 496:0.172112414094652 502:0.028334974277046 685:0.0433831810131313 687:0.0461901865914546 772:0.0380342863205553 794:0.0479500778893625 861:0.0548048399067112 931:0.218343959857418 953:0.0448556863973686 1013:0.0508638459123227 1043:0.0459103373243719 1064:0.0380342863205553 1215:0.0481169454388514 1223:0.151328210757555 1245:0.0401429161130076 1248:0.0528532192449045 1319:0.0433281033797708 1374:0.0548048399067112 1497:0.0498391986087572 1665:0.0884867937539994 1808:0.165098204882716 1892:0.054504466010515 1958:0.0596803411169021 2059:0.399307807729215 2171:0.056797673031542 2352:0.297572461406925 2376:0.056980821027486 2763:0.159723123091686 3551:0.232044650486111 5218:0.137983028364344 5478:0.216163199308465 5953:0.0785349295697356 6851:0.0909089882223216 7253:0.170310757210117 9228:0.516415234374538
+1 6:0.0138851126992556 15:0.095143300148047 47:0.0657193346918009 159:0.0835322306217413 180:0.213999856622698 229:0.218143438274844 337:0.106153989462417 345:0.101896173607972 346:0.115682681381034 365:0.147118678027731 404:0.116602770904988 457:0.0957447982727865 510:0.125529825654944 574:0.103965631351304 686:0.164204026013583 781:0.150467963796094 1010:0.154596592996534 1043:0.155291412601848 1127:0.160013187812624 1133:0.323823425006349 1271:0.177082131828774 1677:0.218525426797539 1916:0.169587819950295 1980:0.172411201706345 2369:0.181004266111532 4220:0.22240316618029 4486:0.487447062099544 7362:0.30749905189119
+1 6:0.018827610722998 15:0.0215016982203395 28:0.0926882637254193 37:0.029694128097155 142:0.00325484911261988 159:0.0377553608442359 179:0.0684219881708944 245:0.072564488928198 325:0.112709975598203 349:0.0622153451976037 513:0.0469635206354618 527:0.0598578783022351 676:0.125511239847886 781:0.0680093447323833 784:0.061627133933314 902:0.0865589243569047 1126:0.066927113615122 1140:0.0637439149709028 1237:0.230884557631238 1366:0.0680093447323833 1379:0.0662416561800083 1620:0.0758991655561994 2560:0.101149261610881 4705:0.10052301643974 6644:0.127049240238255 8304:0.555940507131176 8984:0.134031286279673 9230:0.631612237475003 9423:0.291934345648423
+1 6:0.025720215608019 15:0.0440598907345819 29:0.0467054044197121 31:0.0490158450420866 42:0.0769405137368559 63:0.0555941993088523 68:0.0789478298197597 75:0.0521263849687802 81:0.0782997400156241 142:0.00666962650066058 158:0.0923040134448768 179:0.0701029586537669 186:0.0729764829202463 199:0.0601129913898424 204:0.0772016493774759 229:0.20203999734926 291:0.103509504250767 319:0.116661874565241 337:0.098317657038935 351:0.182527871691278 373:0.0918049132937548 387:0.0907792332737574 404:0.107995105013786 436:0.113591609181001 550:0.104774867450532 620:0.182810283969479 655:0.0973766468089226 772:0.119153671381214 781:0.278720710069757 952:0.119805119897714 1527:0.167219865200364 2103:0.41197054067626 2122:0.428989729215826 3509:0.235882846734342 3578:0.230443517848798 5854:0.274648251872107 6140:0.254901765359466
+1 6:0.0325916377923923 15:0.0446647577727511 29:0.0710198847627017 31:0.0248443744336521 63:0.028178706350615 75:0.0264209955969361 80:0.12732442993668 96:0.0807721130840319 118:0.0426828990247754 142:0.010141783619526 172:0.051117341761012 186:0.073978325374779 187:0.0607805499987554 205:0.0515776455539205 243:0.0614619696738186 295:0.0553451794104113 312:0.0590809834976276 346:0.0543069131966862 351:0.0462584168954141 405:0.061990631897175 408:0.0383827165616299 411:0.0488349242881193 499:0.0971029554743243 626:0.0615199441266041 643:0.0530342142809803 644:0.0621102651393784 768:0.081461463171019 804:0.0614041825378467 903:0.0725749408307079 914:0.0835238095406543 1031:0.0800981288878077 1033:0.0780829577683802 1043:0.0729011219629452 1155:0.0758789292984768 1296:0.0663581196940837 1448:0.0818191771556168 1472:0.0662821743441991 1527:0.169515508310242 1675:0.0963227476179311 1700:0.0936822625692315 1785:0.098944765857531 1935:0.119560557646448 2134:0.444010042004233 2448:0.0963227476179311 2682:0.0959208182757732 3089:0.422927907353068 3348:0.110424388738087 3540:0.109551771625359 6710:0.577418300466742 7926:0.151606360347843
+1 6:0.0269306111045158 15:0.0922667057511403 26:0.174844663839605 29:0.0978067293117285 31:0.0513225348070602 60:0.10220307109527 63:0.145526167438781 67:0.22850427751001 134:0.0964379250553975 142:0.0314257485658667 144:0.0800540603079956 150:0.117429016322122 153:0.233576095099159 176:0.139593164918157 409:0.068767789242609 457:0.0928500179801553 574:0.100822299638502 757:0.127934867664195 801:0.162846811060405 844:0.147551918525046 975:0.166844907463214 997:0.25611563468831 1005:0.141946181307654 1608:0.145918664992118 1676:0.182896344654447 1689:0.215678954378797 1931:0.17553172251779 2252:0.445893361444708 2915:0.215678954378797 3400:0.204396218679638 4474:0.253719628308781 4688:0.272592767902403
+1 6:0.00665550696972498 15:0.045604735875994 29:0.0241715037989264 88:0.1016417286842 102:0.0634173871776232 159:0.0400392387977865 242:0.0466355870368316 365:0.0705179286764293 408:0.0391904879435879 413:0.0575463204314769 427:0.0706996366266981 430:0.0517996750139143 434:0.0575908064421028 467:0.0835410768990998 513:0.0498044138755756 527:0.0634787704230863 530:0.0547122657405996 587:0.168588470235076 592:0.131121246936647 952:0.0620028869617539 1064:0.0616657420320179 1410:0.0917950024820054 2369:0.260280599966576 3885:0.119261709353046 4606:0.113684982869426 5031:0.276128205243089 7771:0.25466047484281 8733:0.442177631692256 9247:0.669819401493729
+1 6:0.0149335040551058 15:0.0255817667697645 29:0.0271177876938042 31:0.0569185213573579 42:0.0446726999260859 81:0.0909237700692132 83:0.0193468265124512 96:0.0462622761536019 142:0.00193623754776384 179:0.0814054464616967 264:0.122933460046719 306:0.117184384473888 351:0.0529890719738309 499:0.1668473277458 513:0.111750227286414 693:0.0887831802588249 695:0.0737070685725204 1007:0.0861902382428001 1305:0.067910814628598 1312:0.097090108929154 1424:0.0694336109380235 1880:0.104327886837737 2026:0.0899542079432859 7017:0.726318453472378 9280:0.563598167308835
+1 6:0.0156462311847622 15:0.0536054010522135 28:0.0577697572875245 63:0.0169096501400799 75:0.0158548723400508 81:0.0476316315796851 96:0.048470222739524 142:0.00608594343078619 174:0.057345336392839 180:0.180856898828279 186:0.088786730268702 199:0.0731363822782148 229:0.12290583233329 317:0.0466274632837639 363:0.0730812849858856 386:0.0623055500109477 473:0.0688780925194354 478:0.061349613038623 485:0.0541383013699414 499:0.349620806052953 537:0.174987801338267 693:0.0930205100237705 808:0.0816505181349707 1003:0.165355514748481 1031:0.0961315483766553 1448:0.0981971026800172 1620:0.0946112527363008 2134:0.213155405377505 2560:0.126086476501132 3707:0.442220484179669 4396:0.155062928359542 6248:0.304393299652999 6710:0.3465006989279 7272:0.14740682805989 7862:0.363907481144812 8276:0.17325034946395
+1 6:0.0218267050017026 15:0.0747802625084635 29:0.0528468915808228 60:0.0552223211573152 80:0.142115839111885 159:0.0437695008413022 327:0.0611868358919568 346:0.0606158028146015 413:0.0629076325166956 427:0.0772863795048746 467:0.0913241946003377 505:0.0523347989731836 507:0.0389020877312391 531:0.163732232717006 767:0.0695954502576878 796:0.0639546127839804 987:0.059397923268364 1014:0.0892209001451599 1017:0.0857330545756034 1080:0.07356371891703 1236:0.080181504878044 1472:0.0739822422905851 1734:0.100666510625282 2223:0.0923587698128661 4189:0.113255609046431 4220:0.116535563539744 5256:0.411269054292555 6021:0.144209927363638 7537:0.161124393665456 9135:0.549167424334646 9291:0.549167424334646
+1 6:0.0216556883316105 12:0.0486618928925916 15:0.0494628959681265 26:0.0624878594987195 27:0.0420374471270253 28:0.0533054400998414 29:0.0262164127219257 31:0.0275132961485492 63:0.0156029103284109 80:0.0470007775421928 94:0.0433343919839626 97:0.04504273498852 108:0.0668223694815078 132:0.0437807527530673 134:0.0516990285451711 142:0.0149750276838295 176:0.112250927428224 192:0.0582961228479844 226:0.0559719628557663 259:0.263443166644115 265:0.0681931719324849 317:0.0430241975694951 355:0.0434450426676381 387:0.0509556843721569 426:0.0649839333856998 550:0.05881163437285 592:0.0711070514044175 678:0.0781181906972629 994:0.0826446392046599 1049:0.228511963727134 2058:0.108068957384221 2289:0.122286794440608 6523:0.134127805685917 7559:0.319723902583248 8293:0.159861951291624 8343:0.159861951291624 9051:0.544864585943536 9064:0.544864585943536
+1 6:0.0176461477352115 17:0.032051949018838 26:0.0254591307255284 28:0.0434359627220548 29:0.0213624561313575 31:0.0448384443925749 33:0.0650986930269819 41:0.0270846886984207 54:0.0440422038083999 60:0.0892907323709436 63:0.0127140387568517 75:0.0119209717378215 88:0.0449148093596892 94:0.0353110495152616 96:0.0364438226313669 134:0.0421269775176508 140:0.0831307191373714 142:0.00305060207278212 158:0.0422186781693339 176:0.0609784803721863 239:0.0498686961267426 306:0.0461569044803665 312:0.0533138678997842 405:0.0559394946450553 406:0.0551520569498622 453:0.0570529893141812 473:0.0517881050486345 480:0.0432633485496107 613:0.0544012577977077 667:0.113308937082081 717:0.0596082564053664 737:0.0693122551807082 829:0.0436355234875092 856:0.0441454954971444 1236:0.0648240162955965 1294:0.334033925266265 2248:0.077271670708849 9055:0.887966323860503
+1 6:0.0245817398529321 15:0.0280730869054465 29:0.059517391231272 31:0.0312308100330893 60:0.0621926549453206 84:0.0480896928268049 102:0.156152363333029 114:0.0575360162930583 158:0.0588121883181542 159:0.0492942238917719 165:0.0795573740046176 179:0.089333242448169 220:0.0657329330174969 278:0.0707388912258863 339:0.0637331618304428 394:0.0763347227269938 405:0.0779257957885819 427:0.0870417076244726 467:0.102851419569236 613:0.0757829746708463 903:0.0912308819165285 1094:0.168787276334221 1229:0.0924841068981593 1424:0.0761955111062112 1435:0.123226064358753 1472:0.0833205118950339 1645:0.0936599358809343 1955:0.123226064358753 2171:0.113372951890819 2335:0.121083243241017 2578:0.123795274633195 3118:0.121083243241017 3851:0.159410421093033 7320:0.174994175307453 9050:0.824646734945167
+1 6:0.0255561556091778 12:0.0574265240594976 29:0.0309383249692408 41:0.0392255878954128 81:0.0518668627690554 108:0.0788579354529519 148:0.0748823075267026 179:0.0464371980733799 200:0.082295837728954 245:0.0984973291637184 255:0.0792881404441135 351:0.0604545306960801 355:0.0512700521848967 399:0.0803238584815418 408:0.150485637358941 425:0.122432145288813 582:0.143702485097355 592:0.0839143435560311 896:0.107892436515092 998:0.094290712092449 1171:0.282090891190843 1205:0.117867035357466 1305:0.0774785493429272 1308:0.199012854728753 1955:0.256221446870711 3416:0.134834949925028 3467:0.24673444486597 3537:0.14431221487012 3571:0.135627358398297 4118:0.3165718882852 5303:0.497188264730436 5806:0.1582859441426 6496:0.176715197739649 6635:0.321027412609769 7342:0.160513706304884
+1 6:0.0330580799699161 15:0.0566299837282647 29:0.0600302508293412 80:0.215244434466216 96:0.20482025103187 159:0.0994379815191214 174:0.121161875597393 186:0.0937963524515932 275:0.111151134349869 365:0.175132212775263 390:0.15098763026678 473:0.14552881545687 490:0.17105523398369 580:0.149560103517304 599:0.154981795730618 641:0.392368575240677 731:0.190482024652004 1058:0.185421071471453 1309:0.390241287851099 2206:0.426670943825463 2940:0.269891720662463 4176:0.275689305852241
+1 6:0.0283615099358742 15:0.0323896981240125 26:0.0204594056409825 29:0.0515017374541641 31:0.0180164816314498 63:0.010217225366645 67:0.0267383722305968 68:0.116073659411094 96:0.0585737948684559 138:0.0792752888864935 142:0.00490303505874911 153:0.0409977745908302 174:0.103948376364622 220:0.037920123718735 229:0.0247542394908942 232:0.125869467873682 252:0.034113756579279 308:0.0349258425119564 382:0.0415179366329053 389:0.040284798305281 413:0.0817418590907519 505:0.034001786365696 543:0.0523206034735183 697:0.101349685021387 755:0.0493352457429607 827:0.0403756024277799 1045:0.0491107908363065 1126:0.0504087859500957 1229:0.160057156189641 1232:0.0535186671936277 1309:0.111599868805139 1446:0.0493352457429607 1610:0.0654027770358838 1816:0.0519446408447645 1907:0.0710868569429711 1924:0.130390511536773 1928:0.068192729149072 2055:0.0728187327353776 2090:0.0761845416922486 2138:0.0735818824007852 2160:0.0731946953641314 2236:0.0674369929177153 2250:0.788406847812304 2591:0.0687221823564251 2686:0.288392010959592 2722:0.0651952557683863 2915:0.0757128605292767 3058:0.260106439359417 3479:0.0814433440726938 4061:0.086702146453139
+1 6:0.0212292319451151 15:0.0363666329293617 26:0.0459429842198448 29:0.038550215854619 63:0.0229434731402993 94:0.0637215389698718 97:0.0662335909534117 111:0.0663813567294888 142:0.002752524514718 178:0.0856646809893861 198:0.0924232975643508 199:0.0496167161496032 203:0.241409282155402 226:0.0823045957043514 229:0.0555873251775362 232:0.0942161448505487 256:0.0722356826046564 274:0.229427197209243 275:0.0713790157874682 291:0.0854358030178523 373:0.0757749401372305 426:0.0955563480661017 436:0.0937574806943102 543:0.117489466797686 653:0.108433503412052 713:0.106140946200692 1159:0.107935635357056 1227:0.115987006761587 1228:0.261404660225112 1380:0.218651584069384 2018:0.168008980108794 2402:0.146400372500356 2798:0.362623746168385 2799:0.543935619252578 2833:0.160367733200778 3473:0.179817977839212 3900:0.190205982920888 5833:0.206504553223201
+1 6:0.0250637211617173 10:0.070466760959784 12:0.0563199883552519 29:0.0303421829988065 41:0.0384697609628731 81:0.0508674546303752 108:0.0773384438491873 148:0.0734394211906125 179:0.0455424126320726 200:0.0807101021433638 245:0.0965994115502551 255:0.0777603593401456 351:0.0592896491749676 355:0.0502821438232074 399:0.0787761204150603 408:0.147585971508692 582:0.140933521919568 592:0.0822974214322597 896:0.105813487193724 998:0.0924738506121869 1171:0.276655360344125 1205:0.115595888267987 1305:0.0759856367460881 1308:0.29276719715587 1955:0.251284387144404 3416:0.132236852813706 3467:0.24198018754006 3537:0.141531502979093 3571:0.133013992588715 4118:0.310471952705168 5303:0.487608082477263 5806:0.155235976352584 6496:0.173310121792876 6635:0.314841624771969 7342:0.157420812385985
+1 29:0.146318725861135 111:0.251952818480224 203:0.305425860728762 229:0.210983684882043 426:0.36268754368855 1380:0.414949961748631 2799:0.688175712250811
+1 6:0.0204595120489466 15:0.105144203971416 63:0.0221115990617197 75:0.0207323378930829 80:0.133213910318985 142:0.00530544945003083 158:0.0734245429362884 159:0.0615417647626483 174:0.074986594984153 179:0.111528795022727 205:0.0809451083272236 229:0.0535718650669416 245:0.118281129033964 781:0.110856180462679 1342:0.146478363304294 3339:0.161917386448738 3691:0.156799878075101 4213:0.370779372774061 4259:0.355719790990268 4419:0.190078658399705 5452:0.192753880418529 5514:0.179561542931947 6557:0.436945732029367 8989:0.218472866014683 9618:0.475857055112103
+1 6:0.0150403197145568 15:0.0171764978784481 26:0.0433991000769611 27:0.0145979346186687 28:0.0370217214687419 29:0.0182078363462119 31:0.057325645457055 63:0.0216730824920777 67:0.0567182308564358 75:0.0101605873947921 142:0.00650028991950727 159:0.0301606351645104 172:0.0393158703234068 174:0.0367497315403378 232:0.0444996768132037 291:0.0403525916773787 304:0.037961732075088 322:0.0434490927496748 389:0.0427266564804062 455:0.109816418705541 730:0.0481927065922037 997:0.0476788416801885 1126:0.0534643084113869 1146:0.057398397007676 2316:0.166016252872981 5205:0.695604026982108 5457:0.496860019272935 7623:0.428280237372268 7624:0.107070059343067
+1 6:0.0145242681132546 15:0.0248807271222973 26:0.12573007303462 27:0.0845823707175981 41:0.0334394752602232 63:0.0156970895697262 64:0.188959052037537 94:0.0435959585810915 97:0.0453146131521893 134:0.104022168257123 142:0.037663542556253 166:0.0541859007194116 176:0.0752856497084506 178:0.0586086579930449 192:0.0586479985241171 198:0.0632326575547464 199:0.0339459519835296 204:0.0871919171621831 218:0.0411935901086094 226:0.0563098098910778 283:0.0544393346288392 317:0.0432838918316557 327:0.0610738549011751 436:0.0641454571106518 550:0.0591666216790106 582:0.0612525643727518 599:0.0680921927684137 834:0.0731813740927868 886:0.0625505283174863 1010:0.32342587557071 1045:0.0377253341750808 4839:0.588060988498667 5880:0.155094533724806 6841:0.532814461822657 8885:0.310189067449612
+1 6:0.024299528055292 15:0.0138753962685066 26:0.0525875282195898 28:0.029906623547843 29:0.014708524769348 31:0.0308722632787128 63:0.0350155904964697 67:0.160362011524596 88:0.0309248422520015 92:0.0267354633371089 96:0.0752771401238387 98:0.0262705531282857 102:0.0385899122317261 142:0.0073514251149599 153:0.105378018602701 178:0.0980540098874473 192:0.0327066092512885 204:0.0729373218931302 286:0.0453854609897324 291:0.0325973434134909 314:0.0646363610386744 373:0.0578226377827545 383:0.0485139530529063 388:0.0421146737456053 405:0.038515582548762 416:0.0394019505141807 423:0.0306842679930419 432:0.038044193111125 437:0.036428016679291 438:0.0451588944710712 455:0.0295703725930363 505:0.0291319948617471 506:0.0226571142907524 530:0.0332927865194925 543:0.0448271609956291 613:0.112369417104627 633:0.0421146737456053 684:0.0379030833270646 686:0.047893985730521 693:0.0481554624102605 698:0.0455008367172548 824:0.0452944113478078 827:0.0345929425535331 847:0.0863783142150823 862:0.0389692066010473 863:0.0428011589743217 882:0.0304130035994317 952:0.0377291792117852 963:0.0687223215315027 975:0.050181464431568 979:0.558688256186703 1001:0.0474714159495054 1003:0.0428011589743217 1014:0.0496645225659713 1045:0.0210385314893783 1067:0.0430769112423459 1080:0.0409490037900027 1123:0.0459979529822837 1164:0.0429657878546052 1198:0.0482440066729315 1236:0.0446327727237707 1309:0.0478081764533845 1387:0.0656926467327015 1550:0.386875183912367 1578:0.0565868176642296 1591:0.0480676181095544 1689:0.064869140702923 1983:0.558231160099967 2017:0.0609056809229792 2047:0.111365769787419 2146:0.0623895146293303 2354:0.0591136295674091 2526:0.0606312905332789 2987:0.0691780867399785 3206:0.0691780867399785 3248:0.0661284769522486 4324:0.077481317115358
+1 6:0.0289010837138741 26:0.250183715818972 27:0.0841530243646631 31:0.110155456117246 64:0.250666509267911 94:0.0867493245590036 97:0.0901691856664421 106:0.101149908007446 134:0.103494144057912 142:0.0412195955996075 166:0.107821698180733 192:0.116700593914942 198:0.125823367841352 199:0.067547279654513 204:0.173498649118007 226:0.112047954284817 283:0.108325993101151 317:0.0861283592078111 337:0.220953578301133 387:0.20401214828916 436:0.127639700077407 582:0.121883283675467 693:0.171823713682722 834:0.145619800079415 979:0.6644859943481 1387:0.234398216906228 2171:0.199941167290569
+1 6:0.0156377950469338 15:0.0535764980821448 26:0.169211720172421 31:0.0298014507538358 63:0.084502663958926 67:0.132685554188929 85:0.0479164271808629 88:0.0597044120233733 96:0.145332265667548 102:0.149005644139037 134:0.111997199091779 142:0.0202755400355996 144:0.0464849825691996 150:0.0681874942488944 153:0.271261211923356 159:0.0470381454788633 176:0.243172644074564 192:0.0631443439133475 242:0.0547875432549918 345:0.0573791338054342 409:0.0399313847663239 457:0.0539152099312857 546:0.0675533506419847 574:0.117088947724848 609:0.055369767046851 613:0.0723145696586024 755:0.0816064937934785 801:0.0945602402235255 844:0.0856789566238112 895:0.0813078305476183 909:0.0688409548167525 975:0.0968818144307488 997:0.446155913955429 1005:0.0824238737980877 1094:0.0805311437362487 1149:0.0750127795604296 1608:0.084730575470911 1931:0.10192598639205 2211:0.120451035999278 2252:0.517833700245405 3275:0.12682816020448 4688:0.316572826304663 5157:0.138628650806606
+1 6:0.028193616871202 12:0.142544451726652 26:0.091522309782293 27:0.0410465252960613 29:0.051196860014399 31:0.0268647428310037 63:0.0152351129114013 64:0.122265233973708 88:0.107641986165909 94:0.0423128981021219 97:0.0439809714306241 108:0.0652472085418846 134:0.0504803604402732 142:0.0219330464136949 198:0.0613716748735696 226:0.0546525716056724 265:0.0665856979442004 317:0.0420100157020165 322:0.0610851579770632 325:0.0632920564708863 389:0.0600694835211918 426:0.063452108723293 437:0.0633986106621122 441:0.0497018423254797 457:0.0486022731392411 533:0.0882784224070319 539:0.0654837807491138 561:0.0624601201696896 706:0.0717544257389647 713:0.07048058025052 824:0.157659022476604 876:0.068023758192096 1045:0.036615050403113 1309:0.0832044190634393 1322:0.0791887699304118 2067:0.0878954487680088 2345:0.115878191662616 2740:0.102074278803817 4697:0.123719699035683 5995:0.713442412267811 7607:0.150529989826629 7865:0.491805405666304
+1 15:0.103244329462343 60:0.228725789185184 144:0.179157318123604 153:0.261366298066268 2211:0.464229163530732 2252:0.498944453899072 4688:0.610050121747625
+1 4:0.0575636024095794 6:0.0133079349896314 15:0.0455941871158553 29:0.0966636509047284 63:0.0575301546050922 75:0.0539415806602142 83:0.103445102448819 111:0.0832247518104716 142:0.0103528240853752 218:0.0754876755069837 228:0.100647674618896 234:0.0954663355902645 339:0.103510587053343 363:0.124318882683782 472:0.121246779441423 505:0.0957269687352573 506:0.0744506815147752 513:0.0995857873889726 518:0.11605661000757 592:0.393272752458196 716:0.127423294605082 850:0.121990915354684 912:0.126561191019119 2624:0.337871750489891 2887:0.681952119442914 7542:0.276064334459744
+1 6:0.0174637230045608 15:0.00997204869412857 26:0.0629898397088028 27:0.0169500576754616 28:0.0214934622784767 29:0.0528540311139241 30:0.0349905596902102 31:0.0332811805972028 40:0.0727444649097245 41:0.0134023444717666 60:0.0220919126429074 63:0.119534717564481 64:0.0252445578841362 67:0.0164642689082411 74:0.0238607731378528 75:0.112078468299991 80:0.056854015496546 81:0.0531645998541185 83:0.00754160171169434 94:0.034946006175861 97:0.0181618297040954 106:0.0407471219849298 114:0.0204377936089828 118:0.0190591405262833 132:0.0176529816855253 134:0.0208457357783419 142:0.0415121457634702 158:0.0208911121064891 159:0.0175101656131965 162:0.0157639333029926 168:0.021617090324147 169:0.0212161772453347 174:0.0213355548383482 176:0.0150870221993829 179:0.0475990819978922 180:0.0224295035746864 209:0.0365680153907839 226:0.0225686397118086 228:0.0220129708574499 229:0.0457275916516761 252:0.0210056938749929 265:0.0274963937233285 299:0.0240951861335452 317:0.0173479285752004 320:0.0276275331604136 322:0.0252249598073837 327:0.0734341225663217 345:0.0213596459946829 355:0.0175176189149683 377:0.0224019648844027 389:0.0248055396376534 390:0.0265876114048736 398:0.0226391274798016 408:0.0342779710583379 414:0.0215057393174338 418:0.0300493939259309 423:0.0220523442105079 426:0.0524047721326941 472:0.0265182661448455 473:0.0256263614889657 475:0.0235850795518539 485:0.020142365018503 498:0.0299074130794371 506:0.0162833437405054 510:0.026313771585571 526:0.0349320141728652 527:0.0277608620044936 535:0.0276011324346557 550:0.0237136330280889 557:0.0547860217820825 561:0.0257927469293995 579:0.0341768492601803 582:0.0245496665576921 597:0.0520546775792632 609:0.0206116499935171 631:0.019534262334368 640:0.0271651795596721 737:0.0342978547913311 747:0.0320769349100052 800:0.0256676339956501 804:0.027418731403672 850:0.106724073844509 853:0.0307998246901944 858:0.0292008031708921 886:0.0250698828518742 963:0.0246948744174305 965:0.0290730210485254 987:0.0237623791342749 993:0.0319851383560126 1009:0.0259412332410286 1083:0.0312032545131563 1117:0.0347364236883983 1133:0.0339402034345882 1134:0.0354079293106682 1314:0.0339402034345882 1365:0.0352004835624652 1395:0.0310800714190012 1412:0.0365346129429636 1573:0.150266101032754 1677:0.0458076647234107 1776:0.0337103685148139 1980:0.0361411238868865 2024:0.0283465011172998 2109:0.291278965814383 2142:0.0378467719869953 2605:0.253895894750682 2645:0.0986153232593935 2666:0.0393028306407389 2723:0.0379424163908667 2873:0.0419899693449704 3050:0.1359250916443 3087:0.0501490930724956 3119:0.0472123649218989 3467:0.0421513124540136 3826:0.16224634445971 4031:0.0576917639604776 4066:0.208624573771886 4246:0.0576917639604776 4292:0.248586503833222 4598:0.0469109626515318 5476:0.0521561434429714 5875:0.0621609744319293 6281:0.0621609744319293 6739:0.0644584645284717 6768:0.6641679293118 7303:0.120757805329418 7431:0.0621609744319293 8153:0.135393189898871 8720:0.128916929056943
+1 6:0.0251572117715454 15:0.024625965565844 27:0.0104645381670858 28:0.0265390431893989 29:0.0261045967614237 58:0.0241080768985282 60:0.027277979516295 63:0.0077681810770238 75:0.00728362315425344 80:0.0468003139188526 83:0.0186239788593134 142:0.00559168406244119 158:0.0515905831536399 159:0.0216206693664006 172:0.0281836051687295 185:0.0209280753144876 204:0.0215747829545102 205:0.0284373941943336 228:0.0271805061810751 245:0.0415541737061143 301:0.0325743681990007 327:0.0302242502877227 345:0.0263738135912524 404:0.0301803260631081 409:0.0183541093847579 502:0.0248070336663498 507:0.0384326602009659 530:0.0295439135054073 571:0.0283642141024718 647:0.0324632574784181 732:0.0393260230310168 782:0.0409481895634993 796:0.0315914394928127 804:0.0677105333233589 850:0.0329443759270966 851:0.040818438058308 902:0.148704330382605 908:0.038226314852884 950:0.0391612118610814 1058:0.0403158593789147 1228:0.0442530806602208 1424:0.0334196955093207 1433:0.0692997371883292 1469:0.0406903716852816 1581:0.0512725082863473 1620:0.0869275635026445 1921:0.0542971669022224 2752:0.0643997754057334 3822:0.0659198509620212 4330:0.0643997754057334 4610:0.0651305520531226 5231:0.0667778677247697 5248:0.0643997754057334 5444:0.0677177187507159 5516:0.0613884154730896 5552:0.0712348804293355 5788:0.52104441642498 9090:0.632964123120879 9091:0.361693784640502 9159:0.271270338480377
+1 6:0.0247687807217688 229:0.129710794228603 426:0.222976906365838 535:0.234879949745405 2109:0.413120663402408 4292:0.423083985165927 6768:0.513812020472142 7303:0.513812020472142
+1 6:0.00994364203245763 15:0.0340678156148337 26:0.0430388240296283 29:0.0361133693129684 63:0.064479492563349 65:0.0711387448822442 75:0.020152479297803 81:0.0605426173571515 142:0.0206282495989916 162:0.0538548085356918 192:0.0803034891254488 220:0.159539095177156 229:0.104147048661254 308:0.0734707164194248 309:0.0731784645166206 339:0.0773427451388908 386:0.0791940344774688 394:0.0926352441265781 411:0.0744971776037256 499:0.148129565577667 644:0.0947485743154606 1027:0.103910423676383 1155:0.11575253068846 1296:0.101228632999071 1389:0.126815054900073 1446:0.103782631678043 1849:0.122950327101647 2246:0.125939572029815 6736:0.880845712542189
+1 6:0.0298426309257253 15:0.0127804435804376 26:0.145313025539445 27:0.0325854690120922 28:0.137732972643863 29:0.0406434815975935 31:0.0142180162425182 37:0.0176499607113351 63:0.0322523962642838 64:0.129416394824169 67:0.0422020923341101 75:0.00756014496448556 80:0.12144270444694 81:0.0227123897256327 88:0.0284844622803827 94:0.0447877335933171 97:0.0232766853602885 102:0.0710893132718721 134:0.106865803880269 142:0.028052529516307 153:0.0323540987060421 172:0.0292535920907703 174:0.0273442161418036 176:0.0386718601022381 186:0.0211682736182761 198:0.0649612375351635 199:0.0174369632357306 204:0.0223938667966586 206:0.0355790611814446 226:0.0289245706044157 265:0.035240111578417 284:0.022653734306361 308:0.0275623291093527 317:0.0667007038954853 323:0.0638223083730363 327:0.0313717100375575 387:0.0263323138071248 404:0.031326118235441 409:0.0190509207717265 426:0.0335816768515145 436:0.0329494950655755 506:0.0834766705858279 593:0.143718483518334 772:0.0345628813213183 800:0.0328963243348257 987:0.0304544988876137 1038:0.0495298209180582 1045:0.0387566249658107 1114:0.0456527052500845 1122:0.0911218156793626 1482:0.0441941682814162 1740:0.0534140272289561 2058:0.0558466780245041 2666:0.0503715560325344 4900:0.523823719876816 5820:0.138626161657933 8699:0.660893498984072 8721:0.082611687373009 9101:0.281569081766549
+1 4:0.0437294613700877 6:0.0202193332135127 15:0.0346366308000826 28:0.0746547816190899 31:0.154130543655142 60:0.0767334221232389 63:0.0437040520070004 75:0.0204889562934109 80:0.0658250410608704 142:0.0104863351599966 179:0.110219533294402 205:0.159989750816788 237:0.0868776956848954 242:0.0708391170045184 343:0.107116219990554 375:0.0716683361203904 505:0.0727211051108121 586:0.0743159794476802 764:0.18700237159148 1027:0.105645369866095 2022:0.726487302950619 2227:0.133869519048247 3360:0.141729732478687 3589:0.480049804976171 5399:0.185433666270924
+1 6:0.0203570966921706 28:0.0501089589817938 29:0.0246443354988201 60:0.0515041611309575 63:0.0293345516772227 75:0.0275047424483728 80:0.044182357927501 96:0.0420426277888781 118:0.177734732261564 142:0.00175963055214151 150:0.0591771158468085 180:0.0522912065094062 229:0.0710715963990159 345:0.0497969852946863 408:0.0399571140165116 473:0.0597442273406596 500:0.0702236375308094 507:0.036282781180685 510:0.0613468264886321 515:0.0490256853723656 655:0.0513812648348756 667:0.0653582023362607 731:0.0781989556459437 1080:0.0686106189144365 1980:0.0842579046102513 2024:0.0660858470990285 2161:0.180195614537124 3236:0.406354243966725 5481:0.807000993072519 7557:0.150275768195849 7837:0.157825010022945
+1 4:0.0615680782468189 6:0.014233716245126 27:0.0207225840012494 29:0.0258470412439611 31:0.0813769573875511 40:0.0444674972079896 63:0.0307661518043602 75:0.0288470432688946 142:0.00553651488686068 159:0.0428147071523602 171:0.0615353570884013 185:0.0414431857158314 192:0.057474770007519 215:0.0453391276890649 229:0.0745400696029101 325:0.127813494308676 327:0.0598520981491666 345:0.0522272038050409 457:0.0490742970575506 480:0.10469110362944 502:0.0491245605649038 530:0.117009698768568 574:0.0532879108708702 709:0.0620651083923262 733:0.160654926296677 890:0.0747409105372601 1214:0.1034682616284 1433:0.0686160058963011 2354:0.103879379167459 2873:0.205342231541956 3079:0.104728528682314 3170:0.110202086576183 3758:0.60782739574018 6234:0.268198384444419 6276:0.276913194175347 7281:0.14106411290647 7820:0.496581806020324
+1 6:0.0124439693840313 15:0.0426341629262208 28:0.0918924286008247 31:0.0474297482052197 60:0.0944510232410031 80:0.0810239177537913 140:0.0879350104629699 142:0.00322690249732074 158:0.0893171608540598 159:0.0748623754773355 180:0.0958943482015353 337:0.0951362098007261 351:0.0883107389795949 365:0.131849151306809 404:0.104500506597449 499:0.185376723428043 507:0.0665372609376466 561:0.110273446172627 1014:0.152601432474872 1169:0.280474789852687 3744:0.703425393775679 3793:0.209142434135448 5994:0.251916753386785 6114:0.26576094771217 7982:0.26576094771217
+1 6:0.00626953328188212 27:0.0365107545619139 29:0.0227697226116452 33:0.0346935570865659 37:0.0296641449285191 64:0.217509078630701 69:0.063607119072844 75:0.0127062739444562 80:0.0408215524571878 142:0.00325156258103664 150:0.0546757088602991 158:0.044999862611068 162:0.0339558195479869 204:0.0376371891717248 255:0.0583538044189707 256:0.0426660764176706 278:0.0541255218935895 281:0.0723704986107168 303:0.0560168389145879 304:0.0474728623858253 327:0.0527261770396986 330:0.062352943492826 377:0.0482542689387495 389:0.106863231598004 437:0.056392863872276 513:0.187664399900978 609:0.0443978957734657 717:0.0635349912654341 780:0.254428476291376 909:0.0551996820632075 947:0.152538739555905 989:0.151645055187088 1118:0.161444851738983 1526:0.303141383308575 1788:0.0771994588196838 2040:0.0854125758750673 2095:0.0930417365400275 2723:0.0817287043417182 2789:0.198469336087221 4331:0.309219856079622 5242:0.126920954309715 5802:0.634604771548576 6750:0.138844788784636 8410:0.13389595034235
+1 6:0.0161032396446797 15:0.0183903844361286 26:0.0929323474721546 27:0.0156295905900373 28:0.0792761941480185 29:0.0779784360063522 31:0.0613769270933419 33:0.059406725484743 63:0.023204748823993 75:0.0108786499791419 88:0.0409876393175005 94:0.0322235935560466 102:0.1022937734627 142:0.0167032182805121 158:0.0770544939602641 174:0.0393468852459925 192:0.0433491848516536 252:0.0387385578989602 255:0.0999208132927518 275:0.036095932872141 308:0.0396607383058247 312:0.0486523180049037 322:0.0465196994592311 337:0.0410373126138125 339:0.0417509250528642 345:0.0787826279855845 346:0.0447209415668575 405:0.0510483705219192 408:0.0316076006440125 477:0.0573929923128811 527:0.051196393058284 561:0.0475668086112252 631:0.0720499077018611 644:0.0511468867313501 658:0.0496446309094661 671:0.0327810155593709 742:0.0550903088774981 827:0.0458493220680362 867:0.0471842385720977 1007:0.309804954089416 1034:0.0676774691942252 1080:0.0542736154991047 1083:0.0575448299297996 1155:0.062485178471163 1159:0.0545823923933144 1248:0.0691116074106494 1296:0.0546449322681581 1410:0.148067550664016 1462:0.0659596270668694 1511:0.0647911461340979 1805:0.077735163986223 2099:0.0780388472893754 2163:0.0678300935485919 2528:0.0617564303295727 2611:0.0650429149725174 3542:0.4666322626991 4177:0.0961860053077019 5211:0.275064924651911 7386:0.106394759048485 8305:0.594369311262546 8352:0.118873862252509 8353:0.118873862252509 8715:0.118873862252509
+1 6:0.0302879486056858 26:0.0873963943327484 27:0.0881912423147775 29:0.10999992459091 31:0.0384804808307055 63:0.0436448972565064 67:0.22843648190836 142:0.0157082123843585 176:0.15699571719103 240:0.181774876368939 252:0.072861826352422 275:0.0678914171203365 308:0.0745963191243475 373:0.144145110754762 377:0.0777050301253597 404:0.084782860822348 423:0.0764923112795965 426:0.0908874381844693 643:0.0821426223252584 726:0.0930408716267489 761:0.102661870037454 1010:0.112408490174857 1045:0.0524466120526665 1057:0.137541961103611 1080:0.102081103750122 1410:0.139247209370171 4525:0.223585161117124 5473:0.347901338839336 6125:0.182965370170488 8890:0.670755483351371 8902:0.223585161117124
+1 6:0.0171575343980613 15:0.0195944207823235 28:0.0422332418213561 31:0.0217984447247387 33:0.0316480707755417 47:0.0270693216544251 60:0.0868183149699891 63:0.0988959451466826 68:0.0351098691246974 75:0.0579544288416717 80:0.0372381355451392 81:0.069643298130491 96:0.0354347107242457 118:0.0748999188985738 142:0.0237290589578889 144:0.0340017112400045 158:0.0410496632919833 179:0.0623527134110479 204:0.0343333035504865 205:0.045254206687386 227:0.0406523665618945 228:0.043254042060972 312:0.0518376325592562 345:0.0839406032238316 346:0.0952977301682962 355:0.0344209707205279 387:0.0403715593798915 405:0.0543905569637462 408:0.0336769809836992 413:0.049450426380052 429:0.0652676877357955 441:0.0403288008176764 457:0.0394365943194408 513:0.0427976885974564 515:0.0826404566313629 574:0.042822696383823 586:0.0420415767501521 641:0.045254206687386 655:0.0433055770255949 731:0.0659082820932795 737:0.067393032196891 794:0.0668052337934333 834:0.0576328268203078 850:0.157279347102293 883:0.0666902707691902 1018:0.186185180076319 1033:0.068509957592357 1045:0.0297099867036382 1175:0.0605971261818525 1312:0.0743664214157396 1426:0.0678796566971141 1469:0.129506274579772 1482:0.135513157110816 1599:0.0693013378435219 1665:0.431486959270931 1754:0.0810118883154881 1885:0.0976912308858411 2449:0.143576230137193 2775:0.0845135423027746 2968:0.0872325884509148 3589:0.362094413068722 5399:0.104902388026516 6731:0.126656649570615 7965:0.244284464831309 8278:0.126656649570615 9419:0.532077452750815
+1 6:0.0209927833488196 15:0.023974390538037 26:0.0605750358197246 27:0.0101876583944339 29:0.0508277976693337 31:0.0133355416002945 37:0.0165544743580829 41:0.0161106834887709 60:0.0265562352169974 63:0.00756264384488004 67:0.158330880578968 80:0.0227810154325384 83:0.00906560478515035 88:0.0801495212601019 94:0.0210039387467602 97:0.0218319630983989 111:0.0218806697580271 132:0.0212202873286603 134:0.025058231559627 142:0.00907289077456647 153:0.0303459654198596 176:0.0544074001278704 178:0.028236852740053 185:0.0203743422550255 192:0.0282558064718162 194:0.0554415885408294 199:0.0163546970721217 203:0.0530489988917648 226:0.0271292990517447 232:0.0310555923065898 255:0.032565124033685 274:0.0378119775112637 279:0.0396137507507065 284:0.0212476769678377 308:0.0258516082813027 322:0.030322406973633 323:0.0299305132944731 373:0.0249769893651552 389:0.0298182305873622 398:0.0272140309523729 415:0.030440781617965 426:0.0314973510384527 436:0.0309044071029881 442:0.0297736826558251 485:0.0242127239910898 493:0.0624700758855717 505:0.0755029054794828 543:0.154907844593954 549:0.0373607165891568 553:0.0447264136400983 561:0.0310049322311405 576:0.0342502565427024 597:0.0312869302962703 613:0.129437182096319 663:0.032745130470303 720:0.0348344709638491 747:0.038559025752073 882:0.0262743208056132 1038:0.0464556360072717 1078:0.0444150329812438 1228:0.0430821945000566 1236:0.038559025752073 1463:0.0514867486749121 1500:0.0399285350834203 1604:0.046974684684696 1643:0.0468422679367687 1786:0.0468422679367687 1910:0.0428191626485762 1981:0.0502851747399803 2018:0.0553792388595515 2055:0.0538993827728398 2090:0.112781412688576 2160:0.0541776649246197 2241:0.0488863323156445 2484:0.0560415747047395 2691:0.0583567454069661 2798:0.717169774218038 2799:0.537877330663529 2833:0.0528605256489257 3900:0.0626958306268552 4755:0.0650110013290819
+1 6:0.0297388094393134 15:0.101887846854922 153:0.257932319276931 203:0.225450914646425 373:0.212297506649552 543:0.329168466693108 2798:0.507978739567778 2799:0.507978739567778 2833:0.449299858817549
+1 31:0.155628812736773 63:0.0882577789494321 75:0.0827524997068365 81:0.248607273133137 118:0.267371952436513 142:0.0105882705154249 1018:0.443086328563853 1469:0.462301508417684 3589:0.646288351257354
+1 6:0.0443084154839784 26:0.191779037381064 29:0.0402298817380567 31:0.0844399775072631 41:0.0510060180603543 63:0.0478862797850679 67:0.313294736996706 80:0.0721241209533507 102:0.105548831695182 142:0.0172347261752008 153:0.192149124069513 158:0.0795064209586022 232:0.098321222881014 322:0.383999906349977 331:0.086593137431591 373:0.0790765191023919 409:0.0565711592256673 465:0.0941924550751664 513:0.580244401771826 593:0.106691971902656 613:0.102448714424311 641:0.262949782177938 757:0.105244386199659 799:0.111750090720204 933:0.128727550658469 952:0.103194605955805 975:0.137253355532403 1005:0.116770658365956 1237:0.135839446901557 1676:0.150457915678179 2114:0.1586114117769 2946:0.171525122291618
+1 6:0.0218592340136665 15:0.0499278065607675 26:0.157687985124188 28:0.0538064674510053 29:0.0529256509340259 41:0.0335512632745727 63:0.0787478243453328 67:0.20608223506247 88:0.0556383944646203 102:0.138857992652486 134:0.104369913894496 142:0.0188947258042213 144:0.0433192407263573 150:0.0635437578899326 153:0.126393827528476 232:0.0646747454477909 242:0.0510563765735659 312:0.0660427608383681 331:0.0569601247503927 373:0.0520157662200126 409:0.037211959080637 423:0.0552055655625695 457:0.0502434512984624 465:0.123917764173074 538:0.0638459185777736 571:0.0575069022641945 574:0.0545574509502919 613:0.0673897692959351 801:0.264361364659253 827:0.0622378529145401 895:0.227311700882334 909:0.0641527161831209 952:0.0678804095007404 975:0.0902839241702257 997:0.415771596974398 1005:0.0768106049161788 1050:0.0860140258266127 1094:0.150093548869733 1237:0.0893538688057078 1257:0.111137038710053 1269:0.0744342622202485 1317:0.0945085391763559 1558:0.0877815894019422 1608:0.0789602145218224 1676:0.0989697555823468 1931:0.0949845755931114 2114:0.312999138371171 2252:0.482567949418019 2410:0.101808108091358 2946:0.112827559473467 4474:0.137293993751523 5176:0.12446167540588
+1 6:0.0217326655675683 26:0.0376259871787101 27:0.063280309940028 29:0.0473572826878714 64:0.263890172990701 80:0.0849021234226239 81:0.0264641959417566 85:0.0266367907748891 88:0.0331897435800373 96:0.0269301182717922 111:0.027182214212048 114:0.0305204840910733 142:0.0112711933996584 169:0.0316828720593905 180:0.0334947754204256 242:0.121825804853518 276:0.0337655979445282 308:0.0321152854002805 309:0.063975074359945 312:0.0393962176413447 337:0.0664599330698573 341:0.0363167170844601 377:0.0334536509147782 398:0.101423442760383 422:0.0396350887561762 426:0.0391289550323387 427:0.0461720366471233 467:0.0545584369053005 473:0.0382687570439263 477:0.0464739792257872 478:0.0340859241340269 493:0.0388030851738794 506:0.0243164963444559 656:0.0429062346075363 685:0.0459358686362971 800:0.0766607814921293 969:0.0486117240628827 1250:0.176076944545169 1373:0.0504257758485775 1485:0.108404815272218 1608:0.235509066915156 1707:0.0496827338282349 1844:0.0565179306742721 1969:0.0593940522309396 2067:0.0542024076361092 2631:0.0629460540498438 2996:0.0778866239995353 3256:0.0770638084722541 3613:0.0714585006239637 4024:0.0724962065563907 5210:0.0879915786235878 5231:0.0807627455562028 5234:0.0748894242981367 5581:0.0962581176233999 6383:0.0901659627977053 6622:0.0845606549494148 7596:0.556963163695361 7597:0.0928271939492269 7611:0.556963163695361 7795:0.0928271939492269 7891:0.101093732949039 8209:0.0962581176233999
+1 6:0.0351754518352198 17:0.0479187499952469 29:0.0106458652903479 31:0.0111724989836591 33:0.0648831681414831 37:0.0693465827951855 41:0.0269950183201217 47:0.0138740158984453 53:0.180599099516018 59:0.127412164193473 60:0.0222487784796956 64:0.0254238093939919 65:0.0209710007498204 72:0.0182420936678776 79:0.059635738845065 83:0.00759515160944879 96:0.036323166588449 97:0.0182907895936345 98:0.0190143317628621 111:0.0183315959681714 118:0.0191944718611226 132:0.0533349853463417 138:0.0245803565488485 144:0.0174271187265254 145:0.0245981703305899 160:0.132843398783013 174:0.0644611502425352 179:0.0159790213478561 180:0.0225887665096734 186:0.0499020070279764 216:0.0255032462784259 220:0.0235152763105669 224:0.0557542934894308 229:0.184209139971364 252:0.0211548469067053 256:0.0199483019515534 274:0.0316788243760124 284:0.0178012754519878 291:0.0235935916242549 293:0.0832326087156371 299:0.0727988292427531 319:0.0265914965638718 320:0.0278237052247184 323:0.0501514883138324 337:0.0672305408016579 341:0.0244918746975229 347:0.0240802068943011 355:0.0176420045213234 380:0.0360200763348615 382:0.0257463756977411 388:0.06096425718737 389:0.0249816738545109 391:0.0303352218763216 423:0.0444178581753633 426:0.0263884387310747 444:0.154031688504024 454:0.0292476037573959 459:0.0267763994006727 462:0.0360200763348615 466:0.0541724780877386 473:0.0258083240335303 478:0.0229874352601404 480:0.0431201148254162 485:0.0202853878972637 489:0.0333986319697413 510:0.026500615154326 521:0.0289053002187888 543:0.0324453964481008 604:0.0433162767989403 607:0.0287543967458426 625:0.0325885976048512 631:0.0196729673191581 640:0.0273580686359602 641:0.0231944335756817 653:0.0299445397306868 671:0.0179014760284463 676:0.0293114367842702 680:0.040429310434297 687:0.0329834213716683 696:0.0323513261456955 706:0.0298412031592739 726:0.0270136708598284 727:0.0313832507785532 774:0.0328828835729642 781:0.0635306164222063 789:0.0903593209778657 803:0.0732663337461871 806:0.031466597837039 811:0.0665856051181477 827:0.0250379839036694 840:0.0370415245820619 841:0.13547049320504 876:0.0282896945653536 883:0.0341811992459779 912:0.0278771467447154 913:0.0305940967941056 963:0.0248702228448158 987:0.0239311062855735 993:0.0322122520321393 1009:0.104501726255931 1014:0.0718932490155113 1035:0.0358017031244629 1094:0.0301909503996324 1098:0.0328828835729642 1124:0.0325885976048512 1168:0.0381155067793799 1185:0.0922658532628709 1188:0.0360942051468731 1194:0.0449302549820017 1201:0.112151484362007 1227:0.0320304834108103 1260:0.0391349605022878 1305:0.0266603379470747 1327:0.0762310135587599 1347:0.0442864779541665 1386:0.0419726742992495 1393:0.033560033757265 1404:0.039697631775586 1410:0.040429310434297 1431:0.0342401219942626 1464:0.0374717297515447 1478:0.0939031132290172 1497:0.0355891025745072 1512:0.100140646873379 1523:0.0472440586369187 1574:0.0898605099640035 1679:0.0422881233248669 1784:0.0427857821954814 1822:0.0416691318918959 1875:0.0458775744171905 1906:0.0922658532628709 1939:0.0803558975061754 1953:0.0514525011622134 2024:0.0285477782855403 2229:0.0416691318918959 2472:0.297946653696309 2622:0.0531225277892952 2623:0.0531225277892952 2663:0.0475476010442723 2745:0.291202089664288 2848:0.0537663048171304 2926:0.0500703234366897 2986:0.0519715792709686 3089:0.0475476010442723 3323:0.10624505557859 3518:0.0907799509686166 3756:0.0552327023610744 3812:0.0593412315621532 3950:0.0537663048171304 3958:0.504720976248427 3969:0.0444953966916669 3982:0.0531225277892952 4310:0.0581014101045543 4639:0.0560801084720474 4849:0.0525264833595314 5056:0.0509649022293312 5280:0.0570274279072362 5573:0.0593412315621532 6982:0.0608076291060972 7002:0.064916158307176 7539:0.064916158307176 7990:0.0593412315621532 9117:0.295008832569219
+1 6:0.0133228661011674 26:0.115330074800918 27:0.0387929908344739 33:0.0368622028830482 41:0.0306734664983695 64:0.0577763168344483 67:0.0376811834556968 75:0.0135005253816854 140:0.0470728564916866 142:0.0207288792988332 174:0.0976598427143601 286:0.0373256891037195 303:0.0595183732756001 345:0.0488850579251362 408:0.0392253832568228 415:0.057956839372683 437:0.119835806056387 455:0.048638242733219 457:0.0459339133538326 475:0.0539783281215585 480:0.0489958325576453 546:0.0575531424083245 794:0.0778116334233601 882:0.0500242276846986 1045:0.069209625148371 1097:0.106698723578042 1135:0.271442430411342 1216:0.0713193138045286 1228:0.0820250891648883 1241:0.249209450533675 2581:0.103695632099352 2976:0.269852948823116 3050:0.103695632099352 6760:0.690935176302834 7256:0.134854605891261 7258:0.404563817673784
+1 6:0.0141650539716531 17:0.0257289916508268 26:0.102183764470835 27:0.0137484133098563 33:0.0522565329299177 41:0.0217416335267893 57:0.0352509997415658 63:0.0408236512333231 67:0.106835069533862 75:0.0382771833478063 142:0.0171416223862495 147:0.0607933354182545 179:0.0514776500081683 186:0.0267938609064231 232:0.041910034875793 252:0.034075985673111 274:0.0510278883292623 284:0.028674091093175 308:0.0348871724605567 345:0.0693003521072959 351:0.0335082358722765 455:0.0344752311887826 475:0.0382603325408326 594:0.0452100656922137 882:0.0354576299955923 965:0.0471630146863665 1084:0.077097254149166 1171:0.0781774997722077 1440:0.0585050993938909 2975:0.067120161522377 4979:0.0935890875051804 7416:0.201678315105862 8431:0.100839157552931 9149:0.593996070758822 9156:0.712795284910587
+1 15:0.0171811677317555 30:0.0301431878997679 31:0.0382274872289158 60:0.038062876373294 63:0.0216789748524805 75:0.0203266996006356 80:0.0653037576284016 81:0.0305330073255356 142:0.00910288005642384 172:0.11797967792852 205:0.0396806889216612 227:0.0356456124093655 276:0.0389569836793968 308:0.0370529392446503 349:0.0994277075582753 351:0.0355883994145584 399:0.0472850839340802 411:0.0751412135384859 531:0.0564275423562602 537:0.0560856687346759 644:0.0477838428522497 645:0.0638069371720054 695:0.049502972939978 774:0.0562555437988378 827:0.0428346071597425 853:0.106132043743924 886:0.0431937183125791 902:0.138331715273496 1155:0.0583766117445955 1237:0.0614969458177033 1296:0.0510518825884473 1377:0.0478300940064759 1527:0.0652074370632521 1591:0.0595195836734912 1620:0.121296120962929 1626:0.0720734085196043 1675:0.074104836373561 1700:0.144146817039209 1785:0.0761220569929807 1853:0.0737956164969387 2056:0.0653722259241895 2073:0.145247740278775 2195:0.078063256947057 2270:0.368978082484693 2318:0.0768660060309031 2393:0.0784866659058043 2560:0.0808244266043991 2682:0.0737956164969387 2854:0.0889121979672293 3050:0.078063256947057 3284:0.0784866659058043 3300:0.0824450864793004 3930:0.0871899899898948 4160:0.0864035070527964 4555:0.107099168971484 8719:0.11105758954498 9166:0.504696684061083 9168:0.504696684061083 9410:0.233273339986755
+1 6:0.0557443917207867 15:0.0954926601594212 27:0.162314299391504 29:0.101226381579728 41:0.256682566489161 63:0.0602457007146926 75:0.0564877384189242 80:0.362957258301847 142:0.0216829989656996 158:0.200053963827105 159:0.167677911081668 174:0.204309961772516 176:0.144473811540008 255:0.259421011555166 409:0.142344284963875 480:0.20500415316342 507:0.149031190260562 2423:0.359738258394454 6439:0.578190320746693
+1 6:0.00682538994055169 15:0.023384402338203 26:0.0886265079614082 27:0.0397477971173684 31:0.0260147318184683 60:0.0518054202810254 67:0.0386086249840881 80:0.0444407902425792 114:0.0479265197470409 142:0.0106195381062014 153:0.0591983569795718 172:0.107050708057634 174:0.100063530324012 331:0.0533561782962069 455:0.0498353687797457 499:0.10167723692103 631:0.0458077436059676 1124:0.0758812892505204 1154:0.0927078012543732 1649:0.0775210032532814 2280:0.0927078012543732 4501:0.116586811793367 7867:0.793740815844611 9178:0.515187493500277
+1 6:0.00767878910279374 15:0.0263082249386361 28:0.0567039790595074 31:0.0292674324748704 36:0.0586700563986378 41:0.0353580195888858 60:0.0582828087749421 63:0.0331953773900917 75:0.0311247403961503 81:0.0467528888207377 142:0.00995610924758525 158:0.0551148608850437 159:0.0461952593488613 174:0.056287388188182 204:0.0921944346022729 306:0.0602560638946642 308:0.056736368301916 478:0.0602177910448346 506:0.0429586620581363 697:0.0823203198990559 720:0.076451002688168 1036:0.0868045654215102 2466:0.121540480500309 2733:0.0998472250964227 3170:0.35671018036323 3727:0.136144535716688 4468:0.152202215405605 5079:0.289374720753464 5211:0.131164013737801 7589:0.655971485066202 7722:0.456606646216816
+1 6:0.0206063411674759 15:0.0352995929005914 18:0.0551525841735656 28:0.228251132257657 29:0.0374191069198294 37:0.0487492021619042 41:0.0474423379064932 63:0.0445405689963849 75:0.0417622499307115 94:0.0618518736393539 134:0.0737908537412198 138:0.0863973913574507 142:0.0160305731367276 176:0.0534058504983004 179:0.0561645946085537 209:0.0647227112537699 228:0.077922695088531 284:0.0625696278583567 307:0.0989436629166334 345:0.0756100206928384 351:0.0731181972570845 386:0.0820574236051939 475:0.0834877297780043 527:0.0982693885064062 586:0.0757384237414217 987:0.0841153443507842 993:0.113222708539431 1080:0.104175991481608 1140:0.104649140979677 2542:0.155662354207327 2775:0.152252198266873 3683:0.162152428860004 8185:0.85492991429277
+1 6:0.0107188156122167 15:0.0183618151525587 26:0.0695909834798542 27:0.0156053101728879 29:0.0389286486317652 31:0.0817087715111236 63:0.0347530507081728 67:0.0606322475126182 75:0.0108617501020789 80:0.0697912705970472 81:0.0326311601933195 85:0.0328439748830565 111:0.0335164986049294 142:0.00972840749601885 158:0.0384673952762177 172:0.042028983355575 179:0.0292151784080031 199:0.0250518922712919 220:0.0429940593839231 252:0.0773567558511725 312:0.0485767371015114 373:0.153037587691839 398:0.0416860653963799 404:0.0900132125878327 405:0.0509690673742179 427:0.0569315284545195 455:0.0391315465907095 561:0.142478742108393 609:0.037952813787706 1031:0.0658571594269796 1149:0.0514169772819576 1235:0.0628206465478382 1720:0.0696883311205064 1738:0.0723694130798299 2951:0.0875102120775768 3118:0.0791971377409342 5205:0.637376854943192 5457:0.318688427471596 7189:0.111177380280593 7623:0.572293797007856 7624:0.114458759401571
+1 6:0.0180473776883538 15:0.123663891642757 28:0.26654153742733 60:0.13698147567522 159:0.10857223472605 205:0.142803693314996 365:0.191219646889875 404:0.151556151657575 413:0.156045239547666 427:0.191712374494609 467:0.22653381239749 658:0.166914625378143 1124:0.401283530614713 4447:0.303317404842515 5601:0.639958155743779
+1 6:0.0154843804164303 15:0.0176836285677147 27:0.0150289340399375 28:0.0381147761332692 31:0.0196727223605346 33:0.0285618408779044 94:0.030985217385814 97:0.0322067270676697 98:0.0334807521745122 142:0.0026768835727161 172:0.0404766590102115 174:0.0378347557879057 176:0.0535082218208259 186:0.0585788569433255 198:0.0449417263431003 226:0.0400214092593814 274:0.0557806017766422 294:0.197298274617745 506:0.0288755712471663 585:0.0639542367525729 880:0.182140074386061 1056:0.152051898645659 1135:0.0701070011968429 1156:0.0723596922755175 1227:0.056399808864266 1607:0.133562355993192 2201:0.444651827374207 2315:0.0826730831681525 3030:0.0889303654748414 3115:0.166376251205444 4205:0.0972546625746565 5082:0.731423204721981 5637:0.107071086473693 5879:0.110231269118117 7341:0.194509325149313
+1 6:0.0279782083637794 11:0.0838165102668356 15:0.0319519561900084 26:0.0403657996571224 31:0.0355459831445234 63:0.0403165643654404 75:0.0378017271740241 80:0.121445924710288 94:0.111972303043838 142:0.0120919281800193 158:0.0669382911437362 159:0.0561052258882432 176:0.0966822138837324 199:0.130780692052265 327:0.0784313547817688 346:0.0776993852783733 1808:0.281313003610046 7664:0.580389480211665 9184:0.703941370144337
+1 6:0.0153635624697651 15:0.0701826033423791 28:0.037817382962462 29:0.0185991545694034 31:0.0195192245868431 81:0.0311807377623317 96:0.0317296984041901 158:0.0367575580335406 159:0.0616176798461634 205:0.0405224792403666 229:0.053637948849659 252:0.036959162715182 365:0.054261160839539 408:0.0904672645496107 414:0.0378389842046384 502:0.0353493185729386 507:0.0273827247409333 557:0.0481975388580727 947:0.0622996521128296 1064:0.0474497026428864 1073:0.0685630006954257 1118:0.0659370736117807 1235:0.0600283316456917 1340:0.0687568190133706 1626:0.0736023814073402 2423:0.066097665134228 3095:0.0810585601355813 5599:0.272395172129354 6468:0.710553773163241 6470:0.101507681880463 6700:0.567067884797351 8410:0.109371182034553
+1 6:0.0235862911292293 26:0.0102087970394444 27:0.0343388115082555 28:0.0174172846835534 29:0.00856608111487424 30:0.028354693695466 31:0.00898983125745961 33:0.0130518860170502 59:0.0146458326943473 60:0.0358044810761854 63:0.00509817254248121 64:0.0409139900944433 67:0.0133418643755954 68:0.0144795558989727 75:0.00478016246102002 80:0.0153572678748632 81:0.0287213838561398 83:0.0244454285271835 92:0.0155704362728944 94:0.0141592948179339 132:0.0143051409561987 141:0.0215453420623676 142:0.00366976128268748 174:0.0172893239668138 176:0.0244516176378789 206:0.022496088825917 215:0.0300520776669485 218:0.0267580851959936 278:0.0203622863059503 284:0.042970815047284 306:0.0370166974582989 317:0.0140579403517873 318:0.14234863937644 322:0.061323341079816 345:0.0173088462998284 355:0.0425863481183582 365:0.0249906791948145 367:0.0201314063462352 373:0.0168376303297011 388:0.0245271172390534 412:0.0240390011650228 430:0.0550714868530053 437:0.0212152714580247 478:0.0184965927795285 505:0.0169661495586472 509:0.0437863122497171 534:0.0179776810916304 583:0.0742407274211344 584:0.0331787151866493 591:0.0496025031389899 592:0.0232338717211434 593:0.045435484577101 608:0.0257369304601449 631:0.0158296417651431 643:0.0191902049508712 647:0.127831691569716 656:0.0465657991913598 662:0.0245870403383496 676:0.0235851326538212 696:0.0260311469645435 719:0.0507740528188552 726:0.021736259992469 772:0.0218535740535364 781:0.0255596139303015 784:0.0231610193740987 800:0.0415996718130586 827:0.0402930894243427 858:0.0236629490040394 872:0.0538337029745502 876:0.0227629987561035 880:0.0277441441325651 890:0.0247702124285237 963:0.020011557578776 969:0.0263789610270345 1021:0.0252521955224497 1122:0.0288074557258251 1154:0.0320367511509479 1267:0.0316668419885148 1466:0.0288074557258251 1472:0.0239839229731121 1530:0.0320367511509479 1645:0.0539202805346384 1649:0.0267886958442998 1726:0.0318491540018071 1781:0.0299413150034393 1815:0.0306692329746769 1838:0.0361526468906907 1880:0.032955532777464 1954:0.0334098700618712 2007:0.22294407801265 2213:0.0327397911836851 2240:0.384441013811375 2394:0.036334958903983 2643:0.0342908696418388 2663:0.0382586662760228 2682:0.0347085402644968 2688:0.0812769035857333 2731:0.0344271199056152 2838:0.035470790668969 3667:0.0427444711781987 3677:0.0418183728199968 4164:0.0888848009466417 4450:0.0451242566950426 4534:0.0422648704323529 4857:0.0427444711781987 5237:0.0489282053754968 6162:0.0444424004733209 6249:0.550638085194177 7015:0.275319042597089 7711:0.352606184011835 8249:0.0503723120016907 8911:0.20893635700217 8923:0.0522340892505426 8977:0.313404535503255
+1 6:0.0298584684565858 12:0.0402564787151186 15:0.0613786856727112 26:0.0775414098075445 27:0.0173881398247524 29:0.0650640818508505 31:0.0682826964765758 60:0.0453257768659042 75:0.0121026514323692 81:0.036359109162156 108:0.0552800792329155 110:0.115264969233614 134:0.0427690070917451 142:0.0061941885875978 165:0.057981119882098 176:0.0309539066550544 215:0.038043667321712 286:0.0334609055517291 337:0.0913091773774152 346:0.0497526778183666 351:0.0423791369590431 373:0.0426303441544485 384:0.0647130930521465 387:0.0421540614515291 389:0.0508933007670381 411:0.0894791514145343 457:0.0411778154204456 496:0.0500757269543688 561:0.0529187450166759 582:0.0503683282888385 625:0.066390319125081 643:0.0485867087844875 644:0.170704897155601 719:0.06427612744193 772:0.0553299582343025 774:0.0669898459772015 987:0.0487530578204122 1064:0.110659916468605 1126:0.0636833151110292 1155:0.0695156417547978 1296:0.182379772045697 1379:0.0630310801724873 1482:0.0707481955129204 1573:0.0770748992630415 1788:0.0735320318880591 2240:0.0811122290020951 2246:0.0756335098671841 2379:0.0898066998763593 2450:0.0981766999635595 2803:0.514452197818453 3737:0.211755643803489 6227:0.118365669036471 9226:0.600999489958797 9932:0.264497694478644
+1 6:0.0198295917865275 15:0.0679379722737136 42:0.0593190586929561 63:0.0214308133103224 75:0.0200940176978149 142:0.00514210195172201 242:0.0694736447480316 327:0.083382487990201 337:0.0758002589947983 351:0.0703620304056326 387:0.139976675619417 399:0.0934876130490322 404:0.0832613100917735 496:0.0831406695693837 505:0.0713193562510184 796:0.0871542817117497 827:0.0846885496669512 965:0.198069840861363 1007:0.22889701359192 1154:0.134670536798089 1159:0.100819454697342 2823:0.143035471478009 3691:0.303944450578099 4501:0.338716015596365 5577:0.545577917946501 7090:0.461206070263927 8299:0.219572602895525
+1 6:0.0158989152924459 27:0.0154312760866545 29:0.0192472535970738 31:0.0201993840224995 52:0.129621451568645 58:0.0355503878527194 59:0.131631747226365 78:0.040714457841232 79:0.0359395927493873 80:0.0690129419466803 85:0.0324776911569583 98:0.0343770708568435 100:0.0327486981187553 132:0.0642848630624683 142:0.00137427342992665 148:0.0465855460608629 179:0.0288893638729473 185:0.0308610760440365 199:0.0247725076815883 216:0.0461087413077203 224:0.100801296714669 229:0.111013992607447 252:0.0764940551313929 253:0.0579096973548668 277:0.0479938628310486 291:0.0426561701536416 299:0.087744709004582 336:0.0484528784559463 337:0.0405166147603217 355:0.0637919277995177 377:0.0407893485241894 380:0.0651227049088816 382:0.046548308544656 444:0.0696206200662322 489:0.24153299775445 542:0.15067189501644 586:0.0389575478623 594:0.0507439651303028 639:0.0609728400147177 712:0.0486664100775712 803:0.0662311454860903 854:0.0637246537530526 859:0.0829446254619506 883:0.0617980964624757 908:0.0563695032548681 993:0.0582383269829236 1001:0.124240111869874 1007:0.122349609915296 1048:0.0719838471711334 1094:0.054583903029963 1168:0.0689111504753723 1192:0.0659460139557887 1347:0.160135986856396 1389:0.0675883078212815 1478:0.339545351097441 1523:0.0854151684940284 1679:0.0764550566421306 1751:0.288797107682981 1910:0.0648583114045671 2146:0.0816415533644503 2204:0.0789903714611807 2224:0.0783139126498376 2403:0.0796998410520406 2472:0.179558124075698 2504:0.0779871294114897 2622:0.480215903635929 2623:0.0960431807271859 2663:0.0859639597413775 2745:0.0877467497928982 3275:0.0859639597413775 4028:0.0984723546214543 4310:0.315134339237931 5075:0.0972071011203876 5280:0.103103067433567 5946:0.105044779745977
+1 6:0.0394818835476958 11:0.010436379800545 15:0.00795697050873869 26:0.0301567899808728 27:0.0135249148075739 29:0.0674778841926948 31:0.0177039764265539 38:0.0189217566467212 47:0.0109924042404014 59:0.0288425298920736 63:0.0351400080535371 67:0.065686453290161 68:0.042772613127138 75:0.0235343359350525 81:0.0141404963053443 82:0.0174201526261218 88:0.0177341283106328 92:0.0919901482570358 94:0.0139421872610413 96:0.0143894505150601 97:0.028983641731575 100:0.0287029633601188 102:0.0442594629545247 106:0.0162566217782793 138:0.0389501089714648 142:0.00963597875260357 144:0.0138075331028633 151:0.0917074227409175 153:0.0604299704358108 154:0.0167887040449833 158:0.0333391799468371 172:0.0364259609732513 175:0.0224814023459111 176:0.0481533912989647 181:0.0196032191535721 182:0.0708485167471736 184:0.0273671967976157 185:0.0135242679225547 189:0.0173794341662475 194:0.0184007632760088 198:0.0202220935457064 199:0.0542803547292521 203:0.0176066757163307 204:0.041826561783124 205:0.0367539711439428 209:0.0145893100280833 215:0.0147956413014745 220:0.0186311897667244 226:0.0180081351502969 240:0.0209076007933321 242:0.0162736603373299 255:0.194547392580849 265:0.0219401249095396 289:0.0202062614449205 299:0.0192262083096399 304:0.0175856792647539 306:0.0182245561797061 308:0.0171600178424918 327:0.0585950957037906 337:0.0887781023175651 345:0.068173783931424 357:0.0214990898887531 364:0.0215184884342918 369:0.0207679257815885 373:0.0331589105400286 377:0.0357502814898897 387:0.0163942231794564 390:0.0212149826314973 408:0.0136756655115004 427:0.0740126979549029 433:0.018781135915227 459:0.0212149826314973 461:0.0254135014236998 478:0.0182129804866257 480:0.0341641336238207 483:0.0225495571911837 485:0.0160721441846593 493:0.0207334801988614 495:0.0255950640553853 496:0.0194750544857324 502:0.0160309519449836 506:0.0519717020648499 507:0.0124180935352079 509:0.0431149271701555 513:0.0173794341662475 523:0.0272229094873221 526:0.0278732099200424 557:0.0218576329188914 572:0.025167702792997 574:0.0173895894150715 582:0.0391777013511656 585:0.0575540222189679 591:0.0244209685677375 631:0.015586922414052 634:0.0260928631425025 672:0.0324502184027433 673:0.0234825737019726 697:0.024897930561053 726:0.0214029731753197 730:0.0223251531135233 749:0.0811064158101389 772:0.086073953737167 781:0.075503108378991 796:0.020415211878763 800:0.0409618149684204 811:0.0263779389258317 823:0.0264617877314764 850:0.0212895146774907 906:0.027175530701869 912:0.0662613193605839 954:0.0317357601938643 963:0.0197047160000527 965:0.0463963179841394 969:0.0259744866619205 984:0.0798986088352633 1009:0.0206992198083339 1035:0.0850972341648471 1045:0.0120647346835141 1068:0.0273671967976157 1080:0.0234825737019726 1134:0.0282529556305092 1179:0.0289617317906047 1245:0.0227114785016922 1312:0.0301989749336854 1314:0.0270818169939963 1319:0.024513547686933 1394:0.0301235608311762 1407:0.0566182012788357 1411:0.0294147846710806 1463:0.0341763466434847 1472:0.0236161722490579 1486:0.0317357601938643 1526:0.262020784758292 1543:0.0325591512654185 1551:0.0497299961973382 1599:0.0281421281885757 1717:0.468396253048451 1765:0.0338992413643696 1802:0.38077597811581 1820:0.0296192648014859 1828:0.0632798651283297 1921:0.0350882449334928 1948:0.0349269092961879 1984:0.0400153335445289 1985:0.0326699787073519 1995:0.0300490287851828 2026:0.0279794193334467 2154:0.0317357601938643 2234:0.0357778270510997 2261:0.0352537715721249 2322:0.0735202790165154 2351:0.123531487755301 2540:0.224589244078536 2694:0.102108863634986 2703:0.0719250954644409 2760:0.0365511890744152 2775:0.0343195530586373 2845:0.0381821033324592 2864:0.0343195530586373 2876:0.0416168139521439 2979:0.0359625477322205 3051:0.0698538185923759 3144:0.0832336279042878 3350:0.0371997908753012 3393:0.0444323566213717 3728:0.0400153335445289 3955:0.0384533109551714 4300:0.084178121750217 5855:0.0495999423509177 5882:0.446399481158259 5915:0.0470161494861447 6024:0.0451829192740749 6621:0.0481779785267162 6682:0.0514331725629874
+1 6:0.0221992617185068 15:0.0380283377329407 41:0.0255548733073093 63:0.0119959159683644 67:0.0313931869855986 134:0.0397475335703676 142:0.00287829593867578 144:0.0659896290325296 176:0.0287671266547422 198:0.048323203044342 215:0.0353560217277409 229:0.116254566631349 252:0.080105066220076 256:0.0377681780410512 448:0.0502594816503668 693:0.0659899059019962 714:0.0574337637119278 792:0.0609007827044421 801:0.0671183985525669 810:0.081668623203337 824:0.124138521078401 880:0.0652815138866336 913:0.0579238923458824 987:0.090617666115935 994:0.0635393094152242 1018:0.0602238853895076 1048:0.0753819474534958 1149:0.0532437060562815 1190:0.0600592601944714 1201:0.0707789103927983 1503:0.0751596415749898 1608:0.0601413503244263 1636:0.0810064457370389 1688:0.0747245353392093 1731:0.0689119611914748 1831:0.15031928314998 2194:0.0846493594218058 2223:0.0704514207337482 2264:0.0753819474534958 2592:0.0751596415749898 2792:0.17013316458827 2965:0.169298718843612 3036:0.376068843382143 3254:0.0956216072974257 3952:0.0925658577143145 4103:0.110003568554067 4602:0.101795901118525 4917:0.100577036201347 6680:0.245811902250213 7615:0.118525219942915 9259:0.698176349747483
+1 6:0.00504987568654403 11:0.0680773866292088 15:0.0346026603140889 26:0.0655717624393253 28:0.0372907813132578 29:0.0550204920060878 63:0.0218305942439399 75:0.0102344306942438 88:0.0771208108947194 96:0.0312878668918143 118:0.0330672756290174 142:0.017023582065762 158:0.0724914285897962 159:0.0303798312333564 172:0.118804809517713 187:0.0470878793524661 192:0.0407821033737504 204:0.0606307098033601 205:0.0399582095123687 346:0.0841452529357754 382:0.0443545677008092 513:0.0377891721632797 524:0.114172236933456 561:0.0447499650242764 730:0.0485429529240347 731:0.0581951853156147 750:0.0583889778267071 755:0.0527059790251692 768:0.0631097867615685 847:0.0538528667478884 852:0.0501151461474497 1133:0.117771319260566 1157:0.0692165596031765 1627:0.0674197516359367 1677:0.15895099500859 1863:0.060837371579889 2162:0.0870077997948864 2216:0.068796650539052 5419:0.0915168326187029 7038:0.838050724832302 7079:0.111834309120437 8747:0.335502927361312
+1 15:0.188437715840106 28:0.203076572401634 158:0.197385390277138 176:0.142546636568 204:0.165090087892139 2216:0.37464991325394 7038:0.570477684779504 8747:0.609022588781449
+1 6:0.0116994617445259 15:0.0400834125166914 26:0.151915487389957 27:0.102198080077658 31:0.044592083727845 63:0.0252883653054868 64:0.202944862888027 75:0.0237109461334585 94:0.0702340724721205 97:0.146005727492242 106:0.0818930868414002 132:0.0709575102122326 134:0.0837910295112382 142:0.0546091348187485 178:0.0944198697987243 192:0.094483248281509 199:0.109375388423293 204:0.0702340724721205 226:0.0907163736616769 265:0.110523857849037 317:0.0697313259008932 337:0.178888650836942 387:0.247758770704689 436:0.206679556091734 441:0.0824987876618782 496:0.0981060118143374 1031:0.143764636913975 1045:0.0607763641567634 2024:0.11394092954626 2864:0.172885497203621 8122:0.728092853449364 8414:0.249860791600583
+1 6:0.0120259484621456 27:0.0233444518081582 28:0.029601851743357 29:0.0291172668749587 31:0.0305576508527073 42:0.023983278806884 80:0.0261007140363266 88:0.0306096940052758 142:0.00207900238943299 159:0.0241158599655916 172:0.031436208752669 179:0.0218519310688639 205:0.0317192869727996 245:0.0463498431570231 402:0.0305542832899958 414:0.0296187602843054 423:0.0303715713855292 527:0.0382336224233044 688:0.0445005045285221 800:0.0353507260160151 1485:0.0499889102213023 1805:0.0580528574635981 1891:0.0571897478733813 2135:0.224040615543939 2333:0.0617537168461347 2537:0.120570009123633 2823:0.0578306478106428 4519:0.153383444203235 4822:0.0726471158767952 8876:0.0856111465670755 9271:0.706013023821928 9284:0.605154020418796
+1 6:0.0104795842764911 15:0.0718080042878157 29:0.0380598070594226 63:0.0226516023745742 75:0.0212386572738854 81:0.0638057422866432 142:0.00271750882930389 159:0.0630447205985416 186:0.178403606241824 199:0.0489855271030802 200:0.101238955530772 229:0.0548801822325702 346:0.1746195994402 351:0.0743701469439058 365:0.111035655124371 404:0.0880042237350163 408:0.12341660015078 531:0.117918329729711 561:0.0928658563004898 582:0.0883901901961808 655:0.079351339222682 717:0.106199339813117 998:0.347984544732343 1080:0.105959721179581 1124:0.116506803660415 1159:0.106562553943093 1202:0.12984965414104 1711:0.1523571706789 2175:0.163131132210952 2907:0.156196741639115 4556:0.185802490044649 9686:0.731217455335197
+1 6:0.0288297267873363 15:0.0493866237949364 29:0.0523519736161364 67:0.0815393786743864 81:0.175531974270551 189:0.10786914140183 365:0.152731612076903 539:0.133922477319831 541:0.148642816376045 565:0.30664684000446 1448:0.180937863447269 1472:0.146578778073858 1725:0.207955544824201 1755:0.223209174095601 1916:0.17605800620866 2026:0.347320391624963 2134:0.196379946956881 3568:0.484533435408543 4214:0.271611644323218 5153:0.228159596488373 7987:0.299026834155833
+1 6:0.0176472501759912 15:0.0151152682071138 26:0.0572866228831546 27:0.0128461400334668 29:0.128182744488119 31:0.0336309342514079 41:0.0203147856081126 47:0.0208814571013184 60:0.0334861165491787 63:0.0381444991942974 67:0.0748678174411551 68:0.0270839895923444 75:0.0178825747484654 80:0.0287257486480748 81:0.0268616546966267 88:0.202129269329473 94:0.0529698833527162 96:0.0273345745908267 97:0.0275290399725949 102:0.0420382136973954 107:0.0422018001014937 111:0.0275904566932899 142:0.00915237797624696 153:0.0765295627594353 158:0.0316659868318122 159:0.0265412712786172 176:0.0228683587480497 185:0.0256910512273201 198:0.0768288300973357 199:0.0206224748277968 204:0.0264849416763581 226:0.0342087220767946 252:0.0318396657031959 265:0.0416780321280642 327:0.111308768357455 345:0.0647523468690502 355:0.0265525687219776 373:0.12597905841621 377:0.0679121648881364 406:0.0413666269255735 427:0.0937309644913923 432:0.0414437304326286 448:0.0799073102201635 478:0.0345978516074601 541:0.0454936147470574 553:0.225591299028786 582:0.0372114904165294 634:0.0495666817235645 640:0.0411759897623255 658:0.0408034923818983 673:0.0446081079864274 687:0.0496425767037197 720:0.0439245678121509 726:0.040657644717839 755:0.0460464601191127 772:0.24526248305592 781:0.0478092230523272 787:0.101350243602385 792:0.0968258640243878 800:0.0389060647402092 823:0.0502675004716567 827:0.0376840844507436 856:0.0331111901109161 869:0.0590658137624315 912:0.0839144841865378 1045:0.0458369678230444 1059:0.0808842320066784 1405:0.0624931164568035 1489:0.051713347162334 1526:0.213317785767321 1551:0.0472341973390493 1717:0.519036997077102 1731:0.0547813992503329 1802:0.0657574504783471 1984:0.0760141687415342 2165:0.066049156393037 2264:0.0599246994036855 2351:0.0782212094160931 2409:0.0631720912115718 2495:0.0654726088732724 2643:0.0641410249714836 2765:0.0669689817298897 2864:0.0651943159346718 2979:0.0683153913649244 3051:0.26539226258417 3191:0.0760141687415342 3393:0.168809721405546 4683:0.0809224088939615 4856:0.0799534751340498 5422:0.0799534751340498 5882:0.376885364030511 6288:0.0977037928164394 6682:0.0977037928164394
+1 6:0.0354004780447618 11:0.0198847471725369 12:0.0596605697051269 17:0.0241126491435809 28:0.0980304937507854 29:0.0642838174037799 31:0.0168659584031329 33:0.024486840780614 37:0.0209370630963343 39:0.0444434734196063 41:0.020375784179748 42:0.0264746125071854 55:0.0444434734196063 63:0.00956475862237494 75:0.00896813509829591 78:0.0339955095458082 79:0.0300086218303254 83:0.0114656095559113 92:0.0292119310114257 96:0.0822499537901331 110:0.0427060062815349 138:0.148425619619534 140:0.0312695783715818 142:0.0114748244193268 159:0.053241931848228 172:0.0694034749896679 191:0.114225897216176 196:0.370339189894564 199:0.0206843972882327 200:0.042748683153652 205:0.035014221298551 284:0.0268727320302344 306:0.0347237930097395 321:0.235016723871921 353:0.0496398654703693 370:0.156991011083051 375:0.0313696467205819 377:0.034058041311239 408:0.0521133106133541 409:0.0225989358709871 413:0.0382609330562294 434:0.0382905105559155 455:0.0323094338511412 475:0.0358567481848509 480:0.0325469737812228 490:0.0457939258767587 499:0.0329598640574521 507:0.0236605657356041 508:0.034332796723983 530:0.0363766496477973 531:0.0497916369167902 550:0.0360521899519864 576:0.0433175809022332 593:0.0426210999382052 695:0.043681400110732 709:0.03859031733439 733:0.14983598871524 739:0.090408307440869 764:0.0409260117528158 768:0.0553012776783685 791:0.0589149986517127 845:0.11985476252165 882:0.0664602331214292 884:0.04568454173498 886:0.0381141167858687 903:0.0492685350733792 1013:0.0548297016043334 1031:0.217503034918148 1046:0.447439626442357 1064:0.0409998208410072 1140:0.0449452620863797 1202:0.109659403208667 1223:0.054375758729537 1232:0.0501009926989947 1245:0.0432728605657945 1335:0.0475652488962768 1353:0.0635975418831173 1393:0.0506620885967974 1411:0.0560448706828884 1509:0.0559177327922272 1598:0.0462987284588056 1649:0.0502586774817637 1858:0.0569741864392612 1886:0.1524848282191 1926:0.0917949461974962 2024:0.0861912168029738 2132:0.405826960406172 2689:0.258265110158757 2757:0.084658300539219 2758:0.084658300539219 3390:0.0895812785109035 3395:0.074963173338158 3552:0.0776724836232498
+1 6:0.021155606005887 15:0.0483206778278397 26:0.0915672950771417 27:0.0205333502979564 29:0.0256110122172014 33:0.0390227465462309 60:0.107048834814379 75:0.0142918094689544 88:0.0538474473239877 134:0.0505051726844558 142:0.00914326125182287 162:0.0381929514083678 168:0.0523740150679087 169:0.10280536094993 180:0.108684669451016 185:0.0410647364110153 199:0.0329630923021834 480:0.0518675446984154 665:0.0871943656716192 716:0.0675215455725596 965:0.0704382883927826 1080:0.0713018778425374 1244:0.0995407460260458 1410:0.0972617570508415 1466:0.0861290116970163 1916:0.0861290116970163 2775:0.104207000938397 3132:0.142758617084888 4035:0.150603978737005 6978:0.548768977631902 7078:0.468511054241753 8988:0.150603978737005 9261:0.532282342185192
+1 6:0.00849877661180451 15:0.0291175761976879 17:0.0463107912454728 52:0.0692892402227694 59:0.0527728839100392 94:0.0510197567642055 97:0.0530310748091109 100:0.105035040888971 102:0.0809810897019024 111:0.106298772087654 198:0.0740003182174941 226:0.0658986038519517 262:0.159079552835272 291:0.136811318728078 337:0.0649745567381172 485:0.0588140778507455 502:0.0586633398058838 530:0.0698650495852843 640:0.158640257386298 678:0.0919724704966248 685:0.0898184083299195 738:0.308948196174418 741:0.411930928232558 858:0.0852639851089736 871:0.097618957213005 882:0.0638218132708019 1038:0.112843370855052 1558:0.10238731857985 1836:0.090632624009959 1922:0.249103400520401 1999:0.140715264755716 2335:0.125588275105203 2399:0.123559248596462 2402:0.117218000630663 2705:0.124551700260201 3778:0.141751839600719 3795:0.146431298479629 4305:0.145170499846084 4458:0.162594862975145 4461:0.487784588925434 5894:0.165341456695358 6417:0.172049942083009
+1 6:0.0150788713695264 15:0.0258307875434376 28:0.111349848906196 29:0.0273817605668505 31:0.0287362918617146 205:0.0596573795865003 365:0.0798835295789082 387:0.0532207195468626 455:0.0550489511975015 539:0.0700457490939903 571:0.0595038587509223 733:0.0850970655445606 796:0.0662740926481308 965:0.150616799613608 1036:0.085229250260459 1126:0.0804020238295594 1896:0.54653644282016 2741:0.117999685682508 6758:0.156400620842967 9256:0.758779206593966
+1 6:0.0210434060232993 15:0.0480644063124127 26:0.0607211084137654 29:0.0254751827295459 63:0.015161761296066 67:0.119034513576201 88:0.0535618642662177 142:0.00909476943584922 150:0.0611721845645677 153:0.182514855954538 198:0.06107619222674 208:0.0525519841652888 308:0.0518278953657024 317:0.0418077525136881 387:0.099029976698842 389:0.0597802704596109 427:0.0745127889832666 761:0.0713272279491315 1017:0.0826563366715853 1045:0.0364387620415977 1126:0.0748036724622825 1216:0.0750990198002661 1260:0.09364858963726 1636:0.102384878065728 2264:0.190552033931649 3073:0.124366168701326 3369:0.114534602239363 3727:0.124366168701326 3837:0.13216992202322 4205:0.13216992202322 4263:0.139034639166417 4770:0.130335541906695 5202:0.582042105767676 5351:0.136464637388378 5369:0.125694034747718 5460:0.568005953940731 5735:0.13216992202322
+1 6:0.0232948343287734 12:0.10469034423651 17:0.0211560294493696 29:0.0564015312466947 31:0.0443937176554712 33:0.0214843388460535 37:0.0183698241040129 39:0.0389939498932149 42:0.0464567520994904 55:0.0779878997864298 57:0.0289856360782922 59:0.0723242675909641 60:0.117873478613435 63:0.0083919570133564 75:0.00786848965104201 81:0.0472774541615511 96:0.0240549048790653 98:0.0251843649578774 100:0.0239914322180798 110:0.0749390513814726 138:0.0651130608050116 140:0.0274353977847625 142:0.00805425308172739 151:0.06132307355109 172:0.0608934319919336 174:0.0569189301893969 176:0.0201245566341935 185:0.0452171510087283 186:0.0220316333454282 190:0.033288131095462 191:0.0501099325710011 196:0.144413033286876 199:0.0181481394087636 200:0.0375069696546053 205:0.0614417679723167 229:0.0203319889942025 255:0.0722723763357757 256:0.0264214027031491 321:0.309299532066492 327:0.0326512225526893 331:0.0303504841152506 341:0.0324393367370264 346:0.0323465013194065 363:0.0362689350165055 369:0.0347178287794066 370:0.0459137502752507 388:0.0403733910173849 398:0.0603965974325441 408:0.022861667489857 413:0.0671389876473555 436:0.0342933584142169 457:0.0267715893743515 475:0.0314601027883857 478:0.0913401479879005 493:0.0346602459540487 499:0.0289184257811965 506:0.0217203281714032 507:0.0207593791337706 521:0.038284891575775 531:0.0436863378499562 539:0.0360704299544356 555:0.0447419330958908 609:0.0549876989821987 662:0.0809440574581535 709:0.101575470010629 720:0.0386543897752824 739:0.0396613578893273 778:0.037102151466264 827:0.0994879650208472 845:0.157737804157673 882:0.0291555407445396 884:0.040082842186732 987:0.0633932048791514 1045:0.0201686676568608 1046:0.174478195747211 1140:0.118302632279898 1229:0.0438211851790509 1240:0.0652516653375028 1242:0.0492855481721177 1245:0.0379668740268684 1331:0.0438892543994894 1433:0.0374322128793737 1464:0.0496310745723417 1632:0.0581244156223382 1697:0.0530528036445348 2024:0.0378113559837979 2132:0.498491970102814 2206:0.0501099325710011 2404:0.121529127808885 2689:0.302129903892809 2757:0.222833271700231 2758:0.222833271700231 3045:0.0695710027245887 3103:0.0560103581066826 3133:0.230864876276906 3167:0.060118742130008 3390:0.0785970946204962 3552:0.0681485199388224 3818:0.0755324759732022 4741:0.0688360356872363 5123:0.241617987326106 5124:0.0805393291087021 5306:0.0695710027245887 5768:0.0769549587589686
+1 6:0.0112844076408572 11:0.101416751557565 15:0.0128871332246437 26:0.0325613514745168 29:0.0409827686155792 31:0.0430101197241555 32:0.0281972047912574 60:0.0285499429604638 63:0.0813040887148912 75:0.0152465123360935 80:0.0244912987803379 86:0.0292205888764324 94:0.0451616163409535 97:0.23470996399945 134:0.0808184303089253 140:0.0265803317613577 142:0.0136556524965721 155:0.039067640724902 159:0.0226288342510502 169:0.0274182077389239 174:0.137862412257059 176:0.077989376510398 180:0.0579724406880995 242:0.0263568689351614 265:0.0355342918971532 276:0.0584411777528648 278:0.0324731483381939 284:0.0228428450236747 306:0.0295165456740023 308:0.0833772486013055 312:0.068186601100647 327:0.0316335973938903 329:0.0505013062798695 345:0.0828108482041741 346:0.125353493050724 351:0.0266939041436377 373:0.026852135322362 377:0.0289506313912273 406:0.0352687907974469 430:0.0292754381787331 442:0.03200894007004 457:0.0259372119526665 463:0.0462214645055838 475:0.0304796006940399 498:0.0773002275823398 505:0.0541141876769444 510:0.0340059591030437 513:0.112591134137486 574:0.0281642310057278 636:0.0384698334677831 641:0.0297634207734283 764:0.0347886676670927 767:0.0359808514659216 804:0.035433926897879 847:0.0401130469165948 876:0.0363017307645393 952:0.0350419512026711 997:0.0357723436452226 1046:0.38034071239107 1066:0.050079991206586 1078:0.0477494888804874 1331:0.0425213788350821 1527:0.0489103500874694 1709:0.0959428996484379 1822:0.0534704114120851 1829:0.0618398487090172 1980:0.0467060974835481 2076:0.0469065073939911 2611:0.0455790749498033 2665:0.073178391138165 2796:0.0648089538412329 3131:0.0648089538412329 3139:0.0618398487090172 3927:0.0698916982991604 4140:0.0681675688255932 6745:0.0833013200510623 7697:0.0780291980579719 9254:0.757118899841681
+1 6:0.0224033134947043 15:0.00959447190988464 26:0.0484838585315036 28:0.0206796443140544 29:0.0101705583757386 31:0.0320210382201272 41:0.0644744232128918 42:0.0502636469682132 63:0.0544778115941162 67:0.110886117067339 75:0.0227020597649487 80:0.0182337742683685 81:0.0170505337985674 96:0.0520521643056726 98:0.0363307943310505 102:0.0533678205288561 134:0.0401128860279109 142:0.0196070809773272 153:0.121443551333344 161:0.0273290856542241 178:0.0904023616394029 179:0.015265604530323 180:0.0215802437995206 182:0.0284762524900322 185:0.0163074889547723 192:0.0452315217031038 199:0.026180383005639 204:0.117679896794957 228:0.042358964947547 229:0.0293307896278125 232:0.0248566909392477 234:0.0200891634021893 248:0.0340672607584047 252:0.0202103445353128 256:0.0190576683023672 283:0.0209928216455188 284:0.0170065002899476 286:0.0156914268305081 306:0.0219750710580454 314:0.0446943451806347 345:0.0205508947847124 351:0.0397472283411375 355:0.0168543403429915 383:0.0670922474279245 398:0.0217819306074132 408:0.0164900433468953 414:0.0206914565012011 437:0.0251890162989835 441:0.0592413857346967 455:0.0204471356146174 478:0.0219611131500734 493:0.0500006360822012 505:0.0604320267986162 530:0.0690632610878444 539:0.0260174789854541 582:0.023620129966222 586:0.0205857948881285 613:0.0518003327653909 684:0.0786269583748643 693:0.0332982368547863 737:0.0329992175588233 757:0.0532138861621278 761:0.0284762524900322 851:0.0318063757791485 881:0.0638149604290102 963:0.0237598397464374 975:0.0346991640143892 979:0.643863747100356 987:0.0457253040190359 1001:0.0328252367021588 1005:0.0295209119732736 1010:0.0623595215453356 1014:0.0343417122982341 1017:0.0659984351176465 1045:0.0290951833726316 1080:0.0283151600861074 1102:0.0335461237139622 1273:0.0375982273224374 1309:0.0661161954827797 1314:0.032655108138477 1377:0.0267097382760598 1387:0.0454247389815785 1432:0.0332982368547863 1550:0.356685364785205 1578:0.0391282974585381 1581:0.0399523534772576 1676:0.0380374226417199 1689:0.0448553062016107 1726:0.037814687445675 1822:0.0796174527508093 1946:0.0389991544820403 1983:0.482502722909433 2017:0.126344033739978 2047:0.0385032517007559 2062:0.0448553062016107 2354:0.0408755214914577 2451:0.0443251769662933 2476:0.051365795722229 2491:0.0431407099299279 2604:0.041739782770325 2733:0.0364137602860721 2908:0.0448553062016107 2987:0.0478348291581963 3463:0.0454247389815785 3952:0.0467083535384228 4324:0.0535762947751963 4989:0.0520343760226758 5362:0.0555073511701166
+1 6:0.0279060938200725 15:0.0318695992102037 26:0.0402617557817681 31:0.0354543624688264 63:0.0402126473953027 68:0.228419603673353 75:0.0188521461303572 81:0.0566361216734136 142:0.00723645655654019 220:0.0746224395355811 232:0.247696627401534 274:0.10052831722394 339:0.0723522258445044 434:0.0804914614347487 543:0.102960926449688 586:0.0683790664739153 764:0.0860316158978698 795:0.220407127763997 829:0.207019180152378 1045:0.0483221922864696 1074:0.36470781609797 1446:0.0970860859984011 2250:0.310298788931664 2532:0.136323598547231 2686:0.567522288692963 3479:0.160271128430877 3719:0.155149394465832 4061:0.170619846319433 5563:0.192964503854575 5564:0.192964503854575
+1 68:0.198886860352125 111:0.20260601890649 232:0.287562034965263 339:0.251990753968374 829:0.24033777668258 1074:0.42340552984138 2250:0.540359504256376 2686:0.494146405837422
+1 3:0.177784378824684 63:0.150761492639695 67:0.197270626984526 142:0.0271302453967192 441:0.24591625869489 553:0.445811082678889 979:0.534547130633568 1983:0.600873509066943
+1 111:0.147621755758767 142:0.00612118404400153 196:0.219506078622476 229:0.123617517702769 321:0.313421052834445 388:0.245468280562 413:0.204100912026106 709:0.205857994935737 1045:0.12262453180671 1046:0.265204764984849 2757:0.45160520066882 2758:0.45160520066882 3045:0.422988359051271
+1 6:0.0161664810467732 17:0.0176185953138505 26:0.0699729868270837 27:0.0188291662262737 31:0.01232359389114 41:0.0148881482713775 48:0.0197801391509356 63:0.0069887638823438 75:0.00655282387579873 88:0.0740674942333784 94:0.0194100861433132 96:0.0200327587646674 97:0.0201752771004878 102:0.246469215344607 134:0.0231567249855208 140:0.0228480099255414 142:0.00838440797349835 153:0.056086414077201 172:0.0507116298975149 180:0.0249160716303621 198:0.056305738887484 215:0.0205982509652315 226:0.0250706326061485 239:0.0274122604952999 252:0.0233344162741729 275:0.108713071565545 289:0.0562616565015097 299:0.160598485379197 308:0.0238898974965195 312:0.0293060326094465 351:0.0229456348514038 373:0.0230816477339547 405:0.0307493100539153 406:0.0606329288465394 409:0.016512557507211 423:0.024497099819299 437:0.0290826804476497 475:0.0261997564754394 480:0.0237813753406901 485:0.0223753774993184 505:0.0232578266564924 506:0.0180885393949658 507:0.0345765353371254 631:0.0216998596490873 641:0.0255841401587765 671:0.0197458528256941 681:0.0353802629818059 742:0.0331839972818091 755:0.0337461856034382 761:0.0328780505631582 790:0.0488492834033202 799:0.0326187376166791 800:0.0285131859957573 882:0.0242805331106131 895:0.0672453627922462 903:0.0359994613613495 1017:0.0762003317552704 1045:0.0167963272274782 1083:0.0346624936196829 1159:0.0657561011263163 1324:0.0385873551735458 1359:0.0358932136769116 1418:0.0410446643659641 1424:0.0300665443581487 2577:0.046469359161749 3929:0.11243156230214 4871:0.0547739821793341 5003:0.0579382509140837 7708:0.0618580035846416 9253:0.894859323196116
+1 6:0.0266122935137017 12:0.0448498065528929 15:0.0227940302344268 26:0.0287963357344921 27:0.0387443081136612 29:0.0241626654697638 31:0.025357953350038 63:0.0143806060203199 64:0.0577038112544057 80:0.0433188200314301 134:0.0476490183877829 139:0.0544279665095036 142:0.0155271494114443 150:0.116041015083596 172:0.0521740312365414 174:0.0487686429309076 176:0.0689715926402733 186:0.0377537967151749 229:0.0348412560824314 277:0.0602506558319919 320:0.063150797341361 345:0.0488237103059996 414:0.0491576492705971 478:0.0521740312365414 510:0.0601478114979985 557:0.0626147281882022 565:0.0707652883033254 683:0.0804609876265141 715:0.328367865761492 794:0.0777139848032242 827:0.0568281123799494 997:0.0632720922793172 1159:0.0676523488022562 1341:0.0764187735634102 1426:0.0789638522232989 1509:0.0840722611601958 1665:0.0717064668899099 1846:0.0874005085439126 1980:0.0826110958592592 3070:0.104127231838244 3945:0.122032094283546 6213:0.115673817926575 8233:0.13468537199133 9239:0.836968101885807
+1 6:0.0228727734074645 29:0.0415347269430743 31:0.0435893825350942 80:0.148926894158521 142:0.00593124326743463 158:0.08208518996497 159:0.0688008021473813 203:0.086699632272373 204:0.0686547834514648 347:0.0939486637121296 365:0.121173384019937 455:0.167004831622033 586:0.0840686752876984 801:0.138309457407308 804:0.107733459300609 902:0.157734512281287 950:0.124617917394039 1124:0.254288113940803 1309:0.135003311737678 1437:0.156274743910923 1620:0.138309457407308 1828:0.155802864926478 5788:0.62177088270731 9644:0.531985834749313
+1 6:0.0122117884664382 26:0.158567961269673 27:0.0355577992343225 28:0.270533669388619 29:0.0443508349778489 31:0.0930895977358842 63:0.026395758584117 67:0.0690774249372211 73:0.132698961212722 106:0.0854792361570607 142:0.0221668622270711 150:0.106497271939529 153:0.105915972463368 176:0.063299053806295 192:0.0986207286139126 205:0.0966283592609798 423:0.0925227327360183 437:0.109841944154755 462:0.150060179971031 631:0.0819578778521328 641:0.289885077782939 755:0.127455467564663 757:0.116025108775563 1034:0.153968323637936 1083:0.130916257711915 1395:0.260798862367329 1482:0.144676207897635 1557:0.179703264649195 1805:0.530549665753463 4208:0.453813436568458
+-1 6:0.0131555009596025 9:0.100637011736296 27:0.0383056636817852 41:0.121152555280363 63:0.0568711828471545 142:0.0204684779863839 206:0.125474292043272 286:0.0737135891171019 406:0.12335036785624 578:0.401312347491243 720:0.130977843741125 960:0.303210163491276 1607:0.170211495892737 2205:0.511873600536024 3177:0.545804382081339 4507:0.272902191040669
+-1 6:0.0199371587356936 27:0.0193507415553135 31:0.0253299246025387 37:0.0314440612832433 42:0.119281677802051 83:0.0344389590714789 127:0.0660942623191568 142:0.00861665938043954 162:0.0359932461684799 190:0.056980079299817 202:0.165039567709828 286:0.0744752851154952 323:0.0568509077312274 386:0.052928428408273 408:0.0391328555743307 411:0.0497893377630484 480:0.0488802576298326 500:0.0687750237482548 506:0.0371791981374803 555:0.0765858223917685 594:0.0636326736178054 663:0.0621970753624849 673:0.0671952794121863 782:0.0757202870064092 834:0.0669696933163687 923:0.44677125966773 1146:0.07608621186482 1191:0.554222695078002 1225:0.0592796768115261 1302:0.094811738549765 1305:0.0604434469911613 1379:0.070145406849891 1544:0.0870773824643803 1936:0.0894801482679798 2451:0.315566923392324 2796:0.114503697610905 2833:0.200809711261864 6242:0.154569304497142 6574:0.283860025514859 7639:0.294351585587471
+-1 6:0.0309207391039684 11:0.0154386133478623 15:0.0117708049584728 18:0.183908724695778 27:0.0100037529424719 31:0.0392844336819212 33:0.0190117009606583 41:0.0158198568420865 63:0.00742612459968428 75:0.00696290322590606 83:0.00890195440733312 98:0.0222858901497542 111:0.0214856845410827 118:0.0899880988118695 142:0.00712728709728897 172:0.0269425959019325 200:0.033190283216224 207:0.0406295253705585 226:0.0799187000707749 256:0.0233805569141668 275:0.0462065583357145 285:0.0732766307781163 286:0.0770029769128911 295:0.0583419541237564 308:0.050769881046072 351:0.0243815853982231 355:0.0413548874277662 367:0.029323905899281 382:0.0301762327338182 398:0.133613845142797 408:0.0202305125093018 423:0.0260301419037222 426:0.0309287675274962 433:0.0555661448069757 439:0.0370291180340508 478:0.0269425959019325 480:0.0505392539810909 483:0.0333577256954575 485:0.0237756410249741 502:0.0237147050420529 504:0.0364958426962766 508:0.0266561485128856 513:0.0257095247035098 515:0.0248219814071878 535:0.0325798195021448 550:0.0559821873703404 575:0.0358580406026194 578:0.0524025586714323 585:0.0425700440494951 656:0.0339144491479508 663:0.128616089237108 671:0.0209815592398373 723:0.035260670224225 726:0.0316615755332299 761:0.0698711543806944 764:0.0317751523737971 800:0.0302975569790541 806:0.0368806619937291 824:0.0768484980705008 836:0.0389596665759047 922:0.14651585565455 923:0.519676514936594 953:0.0750831366191956 963:0.029149331211419 968:0.0476895920394571 977:0.0944740409463622 1025:0.125633581955748 1047:0.232307648645836 1106:0.044023186087509 1109:0.0475363079510232 1191:0.286516508983545 1232:0.0388986517109017 1273:0.0461267076242921 1303:0.0526608423276304 1322:0.0385993642330597 1330:0.0453721639305035 1388:0.177806996586689 1410:0.142156429540508 1503:0.0930558141079719 1538:0.0437140841749095 1664:0.0407768215506839 1781:0.130839786634049 1782:0.0423044838481784 1956:0.0512077002896165 1963:0.0491943877066172 2067:0.042843302710801 2205:0.133678849166392 2453:0.0553727532548551 2456:0.0484957893623919 2529:0.0524025586714323 2674:0.0507691670933706 2837:0.0516676336397363 3395:0.116403536686149 3448:0.0550299240657302 3887:0.0597337958935914 4453:0.0597337958935914 4511:0.0712700377497513 5176:0.0586852981103537 5549:0.0630172008070824 6197:0.133678849166392 6239:0.197187335202921 7292:0.345767314772844 7579:0.159815387979746 7699:0.0760854702137591
+-1 2:0.0388121013491587 6:0.028522387239428 29:0.0345292499704082 31:0.0362373559761895 41:0.175113569467451 42:0.113764060698306 84:0.0557988510673976 105:0.100995182021266 134:0.0680920268840031 142:0.002465423471993 199:0.0444414630802946 214:0.0814547806064333 286:0.213090837063756 390:0.0868477068793624 441:0.0670418981618652 452:0.134202712201503 490:0.0983905422910974 508:0.0737657325369675 599:0.0891451408533784 671:0.0580624048649117 981:0.112841962549892 998:0.10523477179081 1045:0.0493893659764527 1056:0.0933603846161413 1058:0.106653736044184 1191:0.475727395326201 1245:0.0929739072604037 1289:0.128756978735697 1391:0.120142048269073 1612:0.138773216484964 2285:0.128381623419938 2574:0.176657751754038 2634:0.179144084050716 2837:0.142980177426774 5555:0.203047126144253 6319:0.591678112088063
+-1 8:0.114796369082114 10:0.0961912968972383 14:0.347110326909765 16:0.125504526122891 22:0.121619693949677 47:0.0539783388731893 52:0.092979060045452 70:0.131209702196582 71:0.16329916682543 75:0.046226260696954 86:0.35437837305855 89:0.181571967808912 111:0.0713210296499102 133:0.164526454910339 142:0.0650616924444416 172:0.0894350690802076 308:0.0842644828114668 317:0.135946428780013 331:0.0891523947549796 409:0.0582431179724588 423:0.0864062077685701 491:0.272210755800432 506:0.0638019236856792 667:0.219690499233088 934:0.369978028072253 1107:0.221871291713606 1150:0.124443684361323 1993:0.167135618460004 2201:0.196495797184349 2462:0.206678861246822 2782:0.218185644395045 3024:0.191672139544744
+-1 6:0.00965958410257285 8:0.388929428071602 9:0.443363585324567 13:0.256797994485874 33:0.0534529952115495 71:0.553256623583221 75:0.0587303629848309 106:0.135228983527201 123:0.0980006467119436 137:0.158156672699778 142:0.0450876751485814 199:0.045152537197735 234:0.0692943795049411 247:0.142146156818593 286:0.0541250854502356 298:0.0957595259826723 351:0.0685508766542307 457:0.0666076647220469 500:0.0999648146749233 628:0.104965524065634 723:0.0991383380451754 735:0.125603484522907 829:0.0716588711562776 937:0.13081712141942 1043:0.108033005775697 1045:0.0501796077324272 1269:0.0986773848863953 1499:0.147334198214741 1895:0.200381701482038 1931:0.125920903149929
+-1 8:0.274066364016247 9:0.208282937720586 71:0.389862582384596 90:0.380427615245882 119:0.284874303661294 142:0.0282416621354932 175:0.263558974417106 471:0.283824545791258 543:0.301368598902328 551:0.402342614905117 933:0.31640885584163
+-1 6:0.0168880564119203 8:0.254990097857046 9:0.581356492198111 10:0.0712212659829517 14:0.171336615790234 71:0.241817581640326 75:0.0171132572004524 83:0.0437580217379995 106:0.0591059272863965 112:0.188031313837022 142:0.0656897848211332 147:0.108719805805208 162:0.0457328935230758 234:0.0605744190268379 241:0.111514620538584 284:0.0512793317531111 295:0.143391461019037 347:0.138733533037772 373:0.0602796873177456 424:0.173939419752262 465:0.0718024997062634 491:0.201548323680409 541:0.174145824322417 609:0.0597966495017758 723:0.0866628328772978 829:0.12528272911661 877:0.159106355925642 1061:0.219046862303676 1157:0.115738805841523 1335:0.0907653965114989 2105:0.392790442485516
+-1 6:0.0236460984619881 9:0.271332049126534 13:0.157156628017677 58:0.0396549680936414 71:0.338584986089396 75:0.0359421257452925 84:0.0346944607580457 90:0.165195487635926 106:0.041379083010249 112:0.197456423602521 114:0.04150954065444 119:0.185554153887551 132:0.0358535356098975 141:0.0539999354935253 142:0.0367906663014445 153:0.0512721687009477 162:0.0320168430523172 173:0.176741916676312 176:0.061284047908623 219:0.0494282685646052 226:0.0916746577987734 234:0.0424071498119618 247:0.0869913752091664 283:0.0443147240467111 306:0.0463882000375126 308:0.0436785583404881 314:0.0471736864765645 323:0.0505702259166182 369:0.0528620113445244 433:0.0478049002223391 456:0.0640610624551868 457:0.0407629195422891 471:0.431364241924307 509:0.164615026543068 539:0.0549215070322678 558:0.0656245522963418 571:0.1399674486649 638:0.0722012556785648 649:0.0791441178673865 663:0.0553257683642245 685:0.0624753133326967 772:0.0547724694171909 908:0.0628778190068387 982:0.0662144408062016 1159:0.0601118464344035 1333:0.168068185760409 1551:0.063290567647285 1652:0.0708140735115711 1846:0.0776588845900533 2011:0.245261358714344 2426:0.090166380892007 4099:0.115007151718653 4267:0.113096693645987 4558:0.412479147306637 4741:0.104811027283169
+-1 6:0.0173367283847702 11:0.155810985510061 50:0.493679308125092 51:0.117745623284991 74:0.14212355847612 75:0.0702716487028172 114:0.365205092684249 137:0.141927398101163 142:0.0224783308258441 154:0.125324325708661 181:0.292668238782214 234:0.124367449293016 264:0.285433880536737 284:0.210566763793779 357:0.160486416130672 386:0.138074707531549 941:0.24733594902603 1891:0.24733594902603 2333:0.267074339894627 2365:0.239875137179474
+-1 17:0.22805758599311 53:0.322318987913691 63:0.0904635467068251 101:0.813538792798633 106:0.292954447507752 114:0.293878057803022 142:0.0434115843710704
+-1 1:0.154152837554146 59:0.224129960648084 75:0.146304774421378 101:0.701624962203208 142:0.0187198517840518 143:0.318050438827384 264:0.297135048593728 303:0.322499381684321 356:0.34426499390742
+-1 11:0.022286148588098 13:0.0329615249807139 17:0.0540492747535355 34:0.0395243887745897 50:0.235375154063079 63:0.139358131649027 75:0.251279522973765 82:0.0743989998970377 83:0.0771015922905161 101:0.482018407139955 106:0.520722935656754 114:0.313418784973891 137:0.0406006684631416 142:0.0540144909670012 154:0.0717021726113419 159:0.0596717470929561 162:0.0268604381599189 181:0.0418612836262191 234:0.106732068168118 254:0.0478634399188646 264:0.244959179979324 284:0.0903541333159738 301:0.0449516485346263 357:0.0459097810664774 366:0.187589035857974 455:0.0724226300044017 468:0.132795458954184 518:0.129752147017067 550:0.0404060687935715 725:0.0721029332054807 735:0.0644877683107332 829:0.0367913414033665 1029:0.076401011179992 1114:0.0606950795340137 1147:0.0909674119785577 1223:0.0609425017136099 3120:0.094882145026146 3305:0.109831890751635 3780:0.105917157704046
+-1 6:0.0323448239501611 11:0.036336720977379 17:0.0220313237164471 18:0.151498321280615 25:0.0303439800602742 27:0.176588193774329 33:0.0223732163487488 36:0.0308914696698328 41:0.0186170127789544 42:0.024189410086804 46:0.0338545225820246 50:0.191885135836466 63:0.0262174793268601 72:0.100644729898662 77:0.182924134367374 78:0.0310611277611798 83:0.0419037417628444 84:0.0237287818763995 86:0.031408432093044 113:0.17314672621769 135:0.0736723191579374 137:0.0661978518005633 140:0.0285704900974985 141:0.33239237515214 142:0.0786326618032181 145:0.0339280711687567 146:0.0363055657836779 154:0.116907676054966 159:0.048646261505845 161:0.0394564163204563 169:0.11788440260703 181:0.0341266185332084 185:0.0941758654470442 188:0.0446866261561683 189:0.0302553022270559 190:0.0346653701647927 193:0.0392161136857222 199:0.0755959496317675 207:0.143440057753413 211:0.0402102295612257 215:0.0257572596977061 227:0.0574773861338054 234:0.0290037656127709 246:0.0417910594013894 258:0.0383403542814526 264:0.0665661104741825 284:0.0736594956835393 294:0.0772743781139208 296:0.0364590058213272 301:0.0366459799866057 305:0.173677781106799 306:0.0317265481658671 309:0.0595089943907654 351:0.0286925660238794 357:0.149708317536396 363:0.0755389994244149 386:0.0322004389175957 399:0.0762456539232989 423:0.0306326087079608 430:0.03146738814605 432:0.0379801428356532 434:0.0349853982572456 442:0.0344055564660787 455:0.0295205886350784 459:0.0738649722560312 473:0.0355972270615199 475:0.0327617103361652 478:0.0317063964112539 502:0.0558155451372344 507:0.151327838742222 510:0.0731041979861142 513:0.0302553022270559 517:0.0450828660579458 532:0.0467482103932538 550:0.0329402822058024 606:0.0520563600229189 609:0.0286313601424739 613:0.0373934115650431 617:0.0566811872221249 622:0.0446219406209182 630:0.0559413439339182 655:0.0612286954723201 709:0.0705186533799585 716:0.116137966775895 747:0.0445576300763848 758:0.0423548246576954 796:0.0355401907514877 814:0.0448829770848982 827:0.0345347027193102 837:0.0438737782188128 867:0.106620572254463 1045:0.0840124461239069 1127:0.139779160464994 1143:0.0479866926402667 1179:0.0504185544800667 1200:0.0576812818301169 1225:0.0721287848375259 1234:0.0690616202006734 1242:0.0513246528097847 1246:0.0568741231784208 1281:0.156934185341463 1308:0.0472271425165139 1341:0.0928800734939703 1363:0.0457764380053923 1366:0.043813650495116 1370:0.0664700050034865 1426:0.0479866926402667 1441:0.0527052899066447 1548:0.0889873803997447 1649:0.0459205119507168 1728:0.0655820481951689 2001:0.0529758774154369 2091:0.0535376955830386 2137:0.0570704741071508 2158:0.0741594594963891 2410:0.056491549478389 2920:0.0838715050830185 3771:0.0773508714599419 3946:0.508629327522235 4568:0.0895383684821945
+-1 6:0.0412075353048041 17:0.269453402870798 27:0.0119986459914242 33:0.0456058183031041 34:0.0985210356685215 37:0.038994491119818 53:0.285618480059592 58:0.0552846720267686 79:0.0279449637252483 83:0.0106771328899888 91:0.197559933246599 96:0.0255312399667961 98:0.0267300190286981 101:0.0400503369818504 119:0.517377823462312 142:0.00106857140579389 145:0.0345796827996891 146:0.0740056776241923 149:0.0458803950813352 160:0.112049372702405 164:0.0481341718376444 166:0.0307467116347168 179:0.022463032096789 181:0.0347820434010126 183:0.0362517927387875 186:0.023383793061353 190:0.0353311421232871 214:0.0353043809349668 218:0.0467489667774186 220:0.0330573690985148 226:0.0639037633015283 258:0.0390767068038108 275:0.0277104072411916 278:0.0711497731662563 291:0.0331674634132257 296:0.0371592257697954 306:0.0970076341606202 323:0.0705020956647327 325:0.0740056776241923 330:0.0409824943072595 333:0.0415717489182884 341:0.0688605084709782 359:0.0458803950813352 377:0.0317159093268918 391:0.042644730727671 403:0.0477259471081638 429:0.0470263468672915 439:0.0444132598256123 448:0.0373178061643746 465:0.0350401960942123 466:0.038077366803529 502:0.0853312808383866 507:0.0220334560826828 515:0.0297718435694362 516:0.115539575774988 546:0.0356022965281569 559:0.0590044602511663 593:0.0396900963475674 597:0.0368485854402435 607:0.0404224340755593 615:0.0547137241137035 620:0.0585777455800557 629:0.100658831213393 648:0.0601475132813608 651:0.0533160709563386 653:0.0420955165182404 666:0.0538545821020108 670:0.0587890899911128 673:0.0416651923988032 680:0.0568348259988093 687:0.0463675238179158 694:0.0606391819083003 697:0.0441764638035044 699:0.0614192564873796 706:0.0419502477517817 719:0.0443535942687511 723:0.0422921579405065 739:0.0841910330364809 767:0.0394176350483094 774:0.0462261895177689 848:0.091089726273126 869:0.0551690848522959 876:0.0795383275603617 882:0.123779680003369 883:0.0480513392562781 962:0.0558062447836421 969:0.0460866001301279 985:0.0528020462236736 1015:0.0514982729770079 1080:0.0416651923988032 1137:0.05796642930976 1156:0.0577697878874939 1162:0.0478064214463707 1185:0.0648528710914944 1198:0.0490877831955361 1236:0.0454133895995284 1283:0.0510591266424272 1308:0.0481341718376444 1386:0.0590044602511663 1412:0.051724412450931 1423:0.0601475132813608 1438:0.171047206220603 1497:0.05003054542726 1508:0.0614192564873796 1784:0.120295026562722 1799:0.0709993117532527 1858:0.0530561377434449 1866:0.0656069235721207 1874:0.0638084432068979 1904:0.0575765080221983 1945:0.062852386915104 1948:0.0619709072008141 2024:0.120395920243166 2047:0.056656765676513 2101:0.075583742241823 2166:0.0776451785700676 2167:0.155290357140135 2261:0.0625508597983303 2389:0.0660036869759498 2426:0.062852386915104 2877:0.0672850487251152 2967:0.0692563921720063 3035:0.0644939013611398 3070:0.0644939013611398 3083:0.0776451785700676 3270:0.0801681727303933 3332:0.157672894875759 3716:0.075583742241823 3960:0.0765675447973251 4083:0.170964628509389 4978:0.0709993117532527 6076:0.0801681727303933
+-1 11:0.0627037142231267 17:0.0760358001005813 50:0.264898106323813 63:0.0904833065364143 75:0.169678409920521 82:0.10466352249221 83:0.0361551644961694 101:0.406858246485871 114:0.489903748646466 137:0.114232959657298 142:0.025328955577601 154:0.201739323545567 181:0.117779792911975 234:0.100099501631417 264:0.114868437653377 284:0.0847393278374534 357:0.129170537504901 386:0.111132048541481 623:0.581071852105227
+-1 6:0.0426936777639266 11:0.0319751986447939 12:0.0479678859135231 15:0.0243787326151545 25:0.213614165285845 27:0.0414379167768029 34:0.05670787742376 41:0.0327647991215454 50:0.270164843511284 53:0.0547998629506729 63:0.0153803844869769 77:0.0536558736910155 83:0.0553110089788188 86:0.0552769115254957 111:0.0444994000264681 113:0.0761819010712745 116:0.0761819010712745 122:0.0765886646449198 141:0.064998907365613 142:0.00553554622100776 154:0.0514375824842022 159:0.0428072163127853 161:0.0694408694963801 168:0.0528474419945736 180:0.054833553977718 186:0.0403785423578163 199:0.0665221143020141 264:0.117152266256954 276:0.0552769115254957 284:0.129636188583046 286:0.0398705736641026 309:0.104732175365038 353:0.0798222147530277 364:0.0659287947901481 387:0.0502289637602904 402:0.0542358355017461 411:0.0533097511715463 423:0.0539115100151748 436:0.0628512559014414 473:0.0626489334139159 475:0.0576585981214004 507:0.0380468146202545 535:0.0674766688510179 549:0.0759816537227559 594:0.0681318962925232 631:0.0477555387955771 643:0.0578938292238808 655:0.0538793718263085 709:0.0620542495122569 744:0.0877992210732196 758:0.0745418901633051 854:0.0855605487200527 987:0.0580920435692916 1041:0.10151551350781 1056:0.0698731516275023 1123:0.08081728081127 1296:0.0724386266728361 1426:0.168907263859544 1548:0.0783061621584688 1767:0.108011242455743 1820:0.0907481228012425 1969:0.0972326856377306 2233:0.108011242455743 2241:0.0994216576365379 2273:0.120542762637797 2616:0.0944782747983841 3204:0.141039432400405 3387:0.15196534044862 3634:0.123715773332041 4156:0.116186120141691 4492:0.220365611349365 4650:0.118681931898116 4762:0.607861361794478 4806:0.15196534044862 5034:0.132214899555475
+-1 6:0.0413908670825799 13:0.0250083505007003 17:0.0205039543549024 18:0.0402843917578667 27:0.0876511113325552 37:0.0178036259515365 42:0.0225124267009695 46:0.0315074842829639 50:0.214298738498658 52:0.0613551779447264 57:0.0280922353846897 58:0.0252411967268303 63:0.0243998956366489 68:0.046199515591916 72:0.046833657715335 74:0.0308468461115402 75:0.00762596559213029 76:0.031304816732097 78:0.144538738122116 79:0.0510350736328214 83:0.0487483423297192 92:0.0248400786039838 94:0.0225888337417201 97:0.0234793383579625 98:0.0488162555066692 101:0.0365713821814932 113:0.0805714767020096 132:0.0228215073466911 135:0.0685648256398891 139:0.0923491472244207 142:0.0204907588925277 145:0.031575933954197 148:0.0992288695375603 150:0.0328148972953548 154:0.0272006993817085 159:0.0452737537830226 166:0.0842277364003424 173:0.0281249595143363 186:0.0213525702239966 194:0.0298125232849202 207:0.0444985880814314 214:0.0322376815066199 215:0.023971581732734 218:0.0213440692319478 246:0.0388938034517378 258:0.0356823259580549 264:0.12390254061104 283:0.0282072265174156 284:0.0914038549076028 296:0.0339314060656074 299:0.031149891681895 307:0.144540290853765 342:0.0351510471215339 347:0.0309110398163348 355:0.0679395372214572 357:0.0348323658262978 386:0.0299680735607056 387:0.0796847097499969 390:0.0343720613217887 402:0.0573608861828559 404:0.0315988517311101 407:0.162851989136654 412:0.0767005712665781 414:0.0278022940584178 426:0.0338740478388583 439:0.0405553216629486 455:0.027474009718791 459:0.0687441226435774 462:0.0462378923346305 483:0.0365343104926145 493:0.0335919413740787 500:0.0389404150625568 507:0.0201195296694782 521:0.148419469963532 534:0.0286804430914279 535:0.0356823259580549 548:0.0426028870290662 555:0.086725777740452 575:0.0785454500701329 603:0.0402857383510048 631:0.0252535984751804 633:0.0391289948122924 655:0.0284919415948995 656:0.0371440495275116 662:0.0392245922939957 697:0.040339094822523 754:0.091731599317749 772:0.0348637949350739 787:0.0432204803467765 792:0.0412910734535938 793:0.0451595788338935 808:0.0392727250350665 815:0.229570968547207 837:0.0408321332641524 854:0.0452452594439671 876:0.0363146329655726 886:0.032409964836357 914:0.0482154198424331 941:0.107364803404351 945:0.119115984332641 963:0.159625798061386 984:0.0431500059826264 1006:0.0527516408247641 1054:0.0491765276574272 1058:0.0422107720195856 1082:0.0515752285309174 1099:0.106599941573955 1109:0.0520630887792125 1113:0.0456846642363595 1127:0.043362888870226 1175:0.0398685319207655 1184:0.0495613344682196 1199:0.0544925783065138 1207:0.0428728227776196 1283:0.0932477963988006 1292:0.0451595788338935 1319:0.0397163259072809 1322:0.0422750990455011 1324:0.0449067224180358 1341:0.0432204803467765 1426:0.0446599109614205 1429:0.0606457819910453 1446:0.0392727250350665 1472:0.0382624174070912 1551:0.0805714767020096 1570:0.0623012323476824 1609:0.0525751501294445 1653:0.0579664705232876 1865:0.0446599109614205 1921:0.056849224318353 1963:0.161637191759661 1985:0.0529312010768955 1988:0.0592194551403891 2030:0.0579664705232876 2186:0.0592194551403891 2200:0.10856799275777 2342:0.0632404663107232 2733:0.0489277335883699 2760:0.118438910280778 2825:0.0508101041621109 2901:0.0660480335180006 3102:0.0719883543149326 3115:0.0606457819910453 3137:0.0745830386346105 3543:0.0699165388983004 3825:0.06186182755529 3890:0.152349120555287 4253:0.0761745602776433 4594:0.0654221173830238 5213:0.0833309266388199 5277:0.568040993776244
+-1 6:0.00844540399713867 9:0.129211380666948 17:0.046019957855102 26:0.0365540367709853 27:0.0245909909599499 31:0.0321893579704289 34:0.201916941229962 53:0.195123168235263 80:0.164966586885002 81:0.10284096329219 83:0.0437651512618272 142:0.0372302763643694 149:0.188061949905087 153:0.219747462788436 186:0.0479246278448472 216:0.0734780217984316 244:0.621394103631179 306:0.0662717514513706 336:0.154427189223084 363:0.0788945234219624 409:0.172523901485929 465:0.0718141985356943 499:0.125810444617831 518:0.0736511681801838 563:0.129449648053996 671:0.0515763770416549 709:0.0736511681801838 716:0.080864627188575 829:0.0626515707578423 1054:0.110373915737574 1775:0.136990547315132 2208:0.360730326606543 3598:0.306105208119453
+-1 6:0.0237557394349587 17:0.0431492335154117 37:0.187332843291327 41:0.0729243364672465 94:0.0950734521830662 142:0.00205340307267603 186:0.0449350902173252 199:0.0370144268844513 215:0.0504466289778004 218:0.0449172004344726 240:0.071285722500726 244:0.116526309594215 262:0.148219466526335 283:0.0593602669394877 331:0.0619019806872961 341:0.0661623448436226 344:0.120779279434874 345:0.116221308489634 381:0.228356857207316 390:0.144667518734044 406:0.0742472472668111 442:0.202153998001613 445:0.247867338590141 466:0.0731707601100264 485:0.0547989423398917 546:0.0684145810835417 554:0.100521396611931 577:0.115581502477141 593:0.0762698359258008 643:0.12885380636817 655:0.0599594312348752 789:0.0813655498433225 827:0.0676376041312669 982:0.0886952805429181 986:0.0708094921467098 1059:0.072587880860952 1134:0.0963301516424648 1229:0.0893764378962571 1292:0.0950353858008572 1346:0.1492056098355 1441:0.103225429890149 1467:0.0973046261747267 1686:0.13899377516028 1707:0.0905127564441708 1768:0.17536449556787 2137:0.111774818698085 2156:0.25525017892275 2449:0.0993953861044923 2477:0.350728991135739 2558:0.132074686345778 2633:0.338227973781397 2680:0.151494792514622 2880:0.119085398105082 2988:0.133085433240466 3147:0.120779279434874 3778:0.132074686345778 6216:0.17536449556787
+-1 6:0.00986378931576122 10:0.0831962595721511 34:0.0786094688602254 48:0.0603431027002044 53:0.0759645452425385 72:0.0613846847948081 80:0.0642241096547967 98:0.0639832676609096 100:0.0609525088977009 160:0.268210995179534 161:0.192520338136145 162:0.0534223258744392 224:0.0938066593154413 244:0.435453450588097 296:0.0889475120069448 382:0.173273220233215 470:0.460635959361508 591:0.103718858937312 645:0.125504071388668 662:0.102823027353825 721:0.130613677290971 722:0.126693908725031 906:0.230835646636669 1117:0.117718117066755 1214:0.143404451233186 1530:0.133977725443579 1795:0.126092451962638 1873:0.130613677290971 1989:0.159997780736728 2185:0.123270686056184 2218:0.146381563912503 2862:0.167098522751817 4148:0.167098522751817 4355:0.185858163351623 6823:0.199683373032603
+-1 6:0.0151837532833751 10:0.0640337825051005 17:0.0827379822705852 42:0.0454213057884445 72:0.0472460369673956 96:0.0470375194496628 109:0.0835473664290476 119:0.15886530557324 132:0.0460449101074763 142:0.00393736836508933 164:0.0886800659486626 183:0.0667885464338394 186:0.0430811673213186 198:0.198311349861526 200:0.0733419992095582 204:0.0911509308539198 268:0.0730506556340685 325:0.0681722373288682 335:0.100529613312581 382:0.0666817219634118 399:0.0715845725353039 406:0.0711839693028039 409:0.0387719811351708 411:0.0568778904827076 445:0.594102194723904 468:0.101640848824218 479:0.0961536720686807 515:0.0548502020572018 563:0.116366932791939 641:0.0600723297504016 697:0.0813885764293891 828:0.115240673315653 832:0.134603582252946 886:0.130781362931568 920:0.0997334376978087 1030:0.113657831701318 1058:0.0851648917699907 1126:0.161922529000315 1558:0.0914616218117466 1636:0.110812864142136 1853:0.11171869059759 2074:0.259358864736552 2213:0.31614524035929 2740:0.109944791618326 3859:0.353150950310548
+-1 6:0.0044914051194482 9:0.274866972291733 13:0.0895522893261015 21:0.0543409137829537 69:0.0911344839855 98:0.0291343181339084 105:0.0954219449645924 106:0.0628772566667826 118:0.0294103340884446 119:0.0939857798579492 137:0.147075833057755 142:0.0861868203173059 143:0.118728227035094 162:0.0243254696794757 179:0.0244835262802251 215:0.0286132429095896 234:0.128878894806489 244:0.396561158119552 297:0.043876430635081 317:0.0535394945470413 331:0.0351106990869454 356:0.128514120299828 373:0.0641259099600257 391:0.0929610375825712 421:0.19589453884357 433:0.0363207780663656 445:0.492064778014005 486:0.133887533423023 829:0.0666382770412359 831:0.315348139780133 856:0.0674170841540021 1073:0.0601314075952478 1266:0.0611883633601784 1290:0.0678570435100472 1511:0.108426611736259 1641:0.0788370349450332 1671:0.070294968287715 1970:0.0617529016303969 2009:0.0931712370142781 2461:0.0767192215990149 2829:0.0890246886993395 3768:0.0873791016023513 3857:0.208926469833975 3858:0.208926469833975 3954:0.0728538321832388 4035:0.191842336519339 4256:0.0994664462437959 5525:0.104463234916988
+-1 6:0.00730184678590241 18:0.019543290883565 22:0.0389341645599805 27:0.0106306133113289 42:0.0218430456220586 57:0.054513890242402 65:0.0261194144950109 83:0.00945977330344339 98:0.0710471405611057 118:0.071720234890237 142:0.00284021282534472 148:0.0320928044634254 168:0.02711529748772 171:0.284106811934123 208:0.0273525019841307 233:0.172701895267122 240:0.0328668420413386 253:0.0398940175847207 287:0.101665287777346 291:0.0293858555636745 322:0.0632816238482344 325:0.0327839383805454 327:0.030703917583692 355:0.043946288888407 382:0.0320671515210992 403:0.0422844451771016 466:0.0337359534310173 478:0.0286308868565549 492:0.177661836180527 502:0.0252007282211024 512:0.0623626667770425 557:0.171801483977989 580:0.0660694730099795 631:0.0245027118107512 641:0.0288887035848977 684:0.0683377487507813 764:0.0337662634950006 767:0.034923410203548 870:0.120044874726538 876:0.0352348591802924 932:0.0495897059738251 952:0.102036309841862 1035:0.0445910776834617 1036:0.123815154031403 1061:0.0473543724766678 1146:0.04179907495259 1500:0.0416646102691844 1551:0.0390878883208721 1596:0.0710277513630918 1609:0.0510118885946037 1625:0.0492993242361892 1626:0.0524715520737718 1788:0.0449553894135076 1863:0.0439837724438496 1910:0.0446809210525366 1960:0.0710277513630918 2230:0.454415987494916 2264:0.0495897059738251 2381:0.213083254089276 2456:0.0515346577333466 2537:0.329431546596989 2548:0.0508435238162266 2592:0.0494434629604277 2608:0.0647306839159963 2741:0.0571405912633221 2968:0.0556862350523597 3013:0.0698478635131004 3021:0.334830087065768 3210:0.254744734388585 3211:0.254744734388585 3295:0.0687924178659345 3442:0.144730795766002 3745:0.0779713314129767 5026:0.169829822925723
+-1 6:0.0398887324888581 9:0.152570504610737 10:0.0841105085457473 17:0.054339549317375 22:0.106345320598117 27:0.0580732112027858 41:0.0918365230400542 42:0.238649598959652 52:0.243905101920496 75:0.080841290653203 77:0.0751960795208862 83:0.0516771137179731 114:0.0700226705713011 127:0.0991772342155734 139:0.0815811908467159 142:0.0413749171220016 147:0.256790665795238 168:0.0740631020861525 173:0.149073451698652 203:0.0755994556713101 218:0.113132041028523 283:0.0747547497384569 347:0.0819203917194372 348:0.0990705601883917 396:0.101287306557743 402:0.0760088675986634 465:0.0847969308295549 492:0.48526801949382 512:0.340676517229034 518:0.0869659919770151 609:0.141236652550661 622:0.220117154485567 667:0.0960496438305877 678:0.21583490421925 684:0.186658680929432 874:0.272533695130881 1596:0.194006191616999
+-1 6:0.0103034375237259 9:0.394096418746611 23:0.222344828660762 35:0.111807869723797 85:0.252569578939448 123:0.418131269404155 142:0.034733808341456 167:0.431888936467303 174:0.302106793040918 234:0.073913152201278 339:0.16028254835619 373:0.0735535193723931 391:0.106627905677592 449:0.117772700825764 457:0.0710473561570935 483:0.100039432218281 1042:0.117395751840864 1045:0.107048595000778 1119:0.358281921255279 1179:0.128486567599784 1931:0.134314080684992
+-1 6:0.00935809907580187 59:0.0581088195046792 142:0.00242669138326803 144:0.05563585801117 167:0.261508805379883 233:0.110667992213202 253:0.102256916650288 279:0.105953383540275 397:0.439390743167434 406:0.0877446603500666 644:0.178338388055571 772:0.173412521733805 808:0.097671270387691 853:0.0990262423056852 1119:0.162704811304718 1761:0.179035043093662 1762:0.179035043093662 1996:0.159848879726571 2516:0.364118697023626 2659:0.145673459681263 4496:0.347764875964679 5503:0.169593003849864 5515:0.43531023193563
+-1 6:0.0308806076808614 27:0.0299723078009887 33:0.0189870260454607 41:0.0315986491180068 57:0.128081909130724 58:0.046033227633833 67:0.0194088675049345 68:0.0210639063673523 84:0.0201374264876069 85:0.021027238243411 96:0.0212587926830148 98:0.0222569657283842 100:0.0212026980051221 119:0.0717998022688995 132:0.0208101789706495 137:0.028089397534502 140:0.0484926826037794 142:0.00355901836531454 144:0.0203990752385175 158:0.0246274419572086 161:0.200908083842565 167:0.33559080339748 174:0.075454116907886 176:0.160067729025449 183:0.030185347332279 189:0.0513523136274972 194:0.0271850555575068 214:0.0293964772598086 233:0.365191137931149 234:0.02461404049029 240:0.123554502737821 243:0.032352930270033 252:0.0990500657007325 253:0.187464219208163 265:0.0324140637895236 275:0.11536646936626 278:0.0296217159674204 279:0.0388481659109067 299:0.0284045576380637 300:0.440560885406499 314:0.0821419289548352 317:0.0204505677766595 325:0.0308107118969702 340:0.0392832380592916 341:0.0286686286199834 366:0.0432608887224944 367:0.0292858469747891 372:0.10161129674122 377:0.0264085074602938 394:0.0319649550040353 397:0.107402733289756 398:0.026688086068787 422:0.0625763412055276 431:0.0382595662019827 457:0.0236596931546983 459:0.0313427477348587 466:0.0634108525746556 480:0.0252368300354305 506:0.019195584265426 539:0.0318776480823211 541:0.106144617809403 546:0.0296445390790114 550:0.0279547645916085 594:0.0328534882314628 599:0.0321718760569813 609:0.0242979986546512 626:0.0323834474083279 633:0.10704131492482 639:0.0789520675697516 643:0.027916649037843 673:0.0346928581790786 726:0.0316204825929969 748:0.152109824350214 761:0.0348902349873359 767:0.0328214114409071 793:0.0411795287443509 796:0.0301611765130443 800:0.0302582343718503 816:0.0520834774310375 886:0.029553576739305 930:0.0600824891728861 955:0.356437971873205 969:0.0383743789532185 981:0.0407238981107523 1025:0.0418235081948487 1028:0.0417405602668978 1034:0.0432608887224944 1063:0.050284782379112 1083:0.036783888549431 1119:0.0596562685670701 1169:0.038667690181306 1176:0.0387274651689099 1254:0.0471757124672971 1268:0.046467519392553 1324:0.040948957328189 1424:0.031906660521061 1446:0.0358115011523697 1548:0.0377595622155991 1567:0.050284782379112 1602:0.0473239758294249 1616:0.063754583138566 1617:0.063754583138566 1710:0.143349936723109 1753:0.0520834774310375 1846:0.0450749210500149 1969:0.0468860117968456 2037:0.0564097578358994 2047:0.0943514249345943 2733:0.0446155846384033 2877:0.0560254379878939 3569:0.0656438032045017 4312:0.0759867203686413 4761:0.0711775377603374 5344:0.0711775377603374 5790:0.0759867203686413 6985:0.0759867203686413
+-1 6:0.0254351527746995 9:0.0530656223616445 11:0.010390647197275 27:0.00673282406468971 37:0.0656431688349221 41:0.0212944708768523 57:0.034525988419949 58:0.0465329967851804 63:0.0049980033193207 67:0.0261594451264683 68:0.0709753032506568 75:0.00468624152046504 80:0.0602221091378812 81:0.0140785321262006 84:0.0135707017180913 85:0.0141703498375121 96:0.0286527908186763 105:0.0245627905226841 111:0.0289210128951443 114:0.0162364130287212 119:0.0241931038360047 140:0.0163397177770199 142:0.00599609596025299 144:0.0412410839424578 158:0.0663861728481674 161:0.0451309518995831 167:0.420004264451708 174:0.0338992444272554 176:0.203755120749192 183:0.0203420404864267 185:0.0134650040790343 199:0.0216169984808389 203:0.0175295226104811 204:0.0277621841589662 208:0.0173235144760624 211:0.0229965884567426 212:0.0261799526466944 215:0.0147308062526648 233:0.410173233572816 240:0.0624479487341875 242:0.0162023485542997 249:0.0263879874519879 252:0.0333751409995023 253:0.0757997851390151 256:0.0157358120640125 265:0.0218439824686398 268:0.0222493147974146 275:0.0466475876151011 278:0.0399244135807798 279:0.0261799526466944 284:0.0140421738999387 290:0.0480904137130266 300:0.560803460821888 309:0.017016861982786 314:0.0184519376905939 317:0.013781729032429 325:0.020763476461759 336:0.0211404879440794 341:0.0193199169669453 349:0.0229226711959513 351:0.0164095340867026 357:0.0214048800796681 367:0.0197358631750247 372:0.159778049771907 397:0.253327137073844 408:0.0272314764762627 409:0.0118089291069076 422:0.0210852380176867 426:0.0208159829113958 454:0.0230713770609056 473:0.0203583712370639 499:0.0172229657294374 501:0.0240452068565133 504:0.0245627905226841 507:0.0247273539777403 509:0.021462997980291 514:0.0491255810453682 538:0.0202610113758466 539:0.0429649790518862 550:0.0188388408074711 567:0.0250918045668994 580:0.0209223176873954 589:0.0736282867504124 594:0.0221401125641546 611:0.0299173528268195 626:0.0218233499525063 633:0.0721356205695398 639:0.0266030756133381 644:0.0220327581733522 655:0.0175086181661337 657:0.0960641468872776 676:0.0231217304452092 687:0.0260183007653084 695:0.0456508713634019 713:0.0231217304452092 726:0.021309184553237 730:0.0222273234647567 731:0.0266469823153501 742:0.023731482613373 748:0.0683383270091108 761:0.023512685306568 772:0.0214241936200609 776:0.0288348204079889 792:0.0253738284686843 796:0.0203257516633084 800:0.0203911593881765 816:0.0350992882378758 824:0.0258606654982265 827:0.0197507041013699 885:0.0324164758572707 895:0.0240452068565133 908:0.0245945925597953 963:0.0196183692038839 981:0.0274440169601154 997:0.0219903199340523 1002:0.0344643094236749 1019:0.0332324879259245 1023:0.0326391124943711 1063:0.0338871396027705 1102:0.0276988501354836 1117:0.0275956853726914 1169:0.0781749877375366 1190:0.0250232147840596 1204:0.0356210472863096 1215:0.0542072353770307 1225:0.0206255472661241 1232:0.0261799526466944 1236:0.0254829055356222 1245:0.0678358678822489 1268:0.0313146690141387 1280:0.0304559967637811 1288:0.0303761907666166 1297:0.0341691635045554 1393:0.0264731497121294 1412:0.0290242223272919 1497:0.0280737393588379 1500:0.0263879874519879 1626:0.0332324879259245 1698:0.0334863014961285 1705:0.069234392347735 1722:0.0329884388718757 1761:0.0442376523870922 1762:0.0442376523870922 1781:0.0293530261137818 1836:0.0246586788937821 1855:0.0299173528268195 1865:0.0274440169601154 2173:0.032526817649244 2311:0.034315020344755 2441:0.0745350285610499 2470:0.0344643094236749 2561:0.0344643094236749 2629:0.038284807120706 2650:0.0402026260324917 2699:0.070536969496001 2733:0.0300666419057393 2877:0.0377557930764907 2912:0.0377557930764907 2971:0.0479668608383587 3425:0.038284807120706 3654:0.0429644985404265 3688:0.0394969557558113 3786:0.0429644985404265 3862:0.0479668608383587 3987:0.0419046250496792 4312:0.0512077904936595 4632:0.046810122975724 5539:0.0409967227317915 5577:0.0424124554577885 6199:0.0449849260464202 7355:0.0458321150481777
+-1 176:0.149665781214759 233:0.341459314028765 278:0.249270828002609 300:0.411931183683791 351:0.204908114212031 397:0.451904411721564 541:0.297740536013862 731:0.33274454148606 955:0.428496389406273
+-1 6:0.0163084205911392 10:0.0687767930395787 37:0.0192907242939768 41:0.0375471605617801 57:0.0304387190049216 58:0.0546990785172378 59:0.101266620588295 83:0.0105640371712017 84:0.0239283389238418 85:0.0499713191882144 91:0.0325778855282094 118:0.0266974412953424 132:0.0247277384616132 142:0.00317175823337583 144:0.0727177307895714 158:0.029263609147971 161:0.0397882414425623 167:0.398766470400833 176:0.0422668471260912 199:0.0571737788779324 203:0.0927260137854686 212:0.0461614139750128 219:0.0340900632778467 220:0.163536072622213 233:0.14464637649996 253:0.0891018994123585 262:0.0763149913684204 275:0.0274168894534938 277:0.0738450472669105 279:0.0461614139750128 290:0.0423973550600932 293:0.038589195561469 295:0.0346174864418648 299:0.0337517747147917 300:0.116332753057622 319:0.0739718105927344 323:0.0348776570884582 364:0.0377758922685193 372:0.0402466115917925 388:0.169589420240373 397:0.191432281956625 408:0.0240077489011484 411:0.0305454304682486 455:0.0297688542872075 461:0.0446136212066673 465:0.0346690387615701 502:0.0281424745741181 511:0.211528684680152 561:0.0361296641915022 594:0.0780764514985759 597:0.0364582730502424 643:0.066344032610776 656:0.080493223183585 657:0.0423459212518857 663:0.0381574956842102 671:0.0248990234702645 706:0.0415058968692304 731:0.0469848971250542 759:0.0602482717596834 761:0.0829167886396261 838:0.0537010854682377 869:0.0545847156803016 913:0.042553090757293 932:0.0553784409427403 963:0.034591799097447 1011:0.097863321425439 1025:0.0496968706347016 1043:0.0455984356367313 1045:0.0423594918429684 1138:0.0402041567644481 1146:0.0933567787211717 1192:0.0507334295509045 1215:0.0477900526874335 1265:0.052367743361106 1373:0.0473000400374454 1580:0.286259531226589 1616:0.303026064274243 1617:0.303026064274243 1724:0.0628082843463228 1816:0.044803770264743 2210:0.0628082843463228 2404:0.0638107606522084 2516:0.396595024805429 2831:0.0670290121202894 3325:0.0845768573428222 3583:0.0793190049610859 3782:0.078001385742809 4142:0.0870731271155246 4143:0.0870731271155246 4295:0.078001385742809 4432:0.0808127984279026
+-1 6:0.0147412502050378 9:0.0451070734424358 13:0.0195946504977368 17:0.0160653466287035 35:0.159964844615737 41:0.013575614762613 46:0.0493737595824503 63:0.0892169195025746 67:0.0166771248505961 70:0.0678397896084711 75:0.0298756470326532 81:0.0179506435894707 82:0.022114001115188 83:0.0152782044584369 85:0.0542031435929126 105:0.062636913320668 106:0.0619108729727747 114:0.0207020206962919 123:0.0299112681891034 137:0.0482717901538374 142:0.0649845548271958 150:0.0257112696658503 167:0.288357356530397 168:0.021896563780124 173:0.0440731788312856 190:0.0252781537268213 199:0.124031088096665 201:0.106150883144055 212:0.0333803975398434 223:0.0400454452024809 226:0.0228604151377508 229:0.108077139964847 243:0.0555986955198487 283:0.0221010476122276 284:0.0179042855206521 317:0.0527166263549718 323:0.0504416983197815 339:0.0458636283935122 378:0.0407926955611385 409:0.0602272667835672 415:0.0256508250941905 434:0.0255115197425155 436:0.208331980745349 446:0.0363783216654529 450:0.219716277761048 451:0.0334854569498722 459:0.0538626910614011 464:0.0826643856510612 478:0.0231204559131239 485:0.142819408897166 486:0.0439432555522097 502:0.0203504812384538 504:0.031318456660334 506:0.0494815818532316 507:0.015764140543425 520:0.0437529065141517 524:0.199970250624933 544:0.0956454864388545 545:0.0469393798200143 558:0.0327288815632422 561:0.026126204763706 582:0.0497341068109262 601:0.039810951657219 609:0.0208781247581917 612:0.0343201617913267 626:0.0556511393963704 668:0.0425328306493014 712:0.0270736857579955 723:0.151292543293484 730:0.028340650707554 742:0.0605170173173935 747:0.0324916369685165 770:0.0396962056074923 816:0.0447528767739686 829:0.0437427258941262 855:0.0950348886259571 856:0.0221269753936232 867:0.0777482312485812 948:0.047223249678514 996:0.0328257624920896 1034:0.037172042221905 1045:0.0612622775406934 1061:0.0382403341756696 1064:0.0273166307693268 1102:0.0353170474139774 1134:0.0358656956531805 1179:0.0367654510761766 1203:0.0584376236674815 1239:0.0789429678213095 1244:0.0416160626840303 1339:0.0355867210812872 1361:0.0443379416761128 1365:0.0356555679723349 1366:0.0319491234994398 1377:0.0281197643326497 1392:0.140818139460043 1416:0.0355867210812872 1424:0.027415889203223 1522:0.108154865131174 1544:0.0386302631921905 1590:0.227090693258513 1610:0.203963477805692 1620:0.0356555679723349 1730:0.0416160626840303 1746:0.0344382582079972 1855:0.038145719519668 1931:0.0384329494865734 1999:0.0488145299065985 2020:0.0491741207005302 2071:0.105660873345995 2567:0.0584376236674815 2640:0.0407926955611385 2818:0.059684619560071 3167:0.0456526321969646 3280:0.053429930213911 3510:0.125929227372751 3526:0.0507974384392829 3535:0.207000958789631 3543:0.0547813076950139 3840:0.314823068431876 4334:0.059684619560071 4384:0.122319005319128 5042:0.122319005319128 5107:0.0528304366729977 7339:0.0629646136863753 7453:0.370894938376714 7804:0.0652918065545547
+-1 6:0.037269391834497 9:0.224009943958988 10:0.0224535122347851 12:0.197403667120622 14:0.0270081466947919 18:0.0142501437753956 19:0.258566856409012 35:0.0288878021625663 37:0.0125956589369736 41:0.11032196073946 42:0.159270279740154 48:0.0325715266943918 50:0.02526857757422 57:0.0198746152410708 65:0.0190451758662644 70:0.0306277048820832 75:0.0809279485468626 77:0.0200737829401159 83:0.0620790108553685 98:0.017268193193227 101:0.129367090183123 109:0.0292959706721881 115:0.179216898711159 116:0.0285012402346962 127:0.0264756126240794 130:0.119034661255169 132:0.0161456954751259 138:0.111615372798152 142:0.0255418825508226 171:0.0690529031463374 172:0.0208764356296869 173:0.0596933004472941 176:0.0689941422919605 179:0.0145116237117735 203:0.181633186980679 210:0.0418964126415706 214:0.0456148474789903 225:0.0253659698930977 234:0.0190969430262539 235:0.404092615961236 254:0.0513835476549376 264:0.0219145547543152 277:0.0241081417002344 283:0.0798238753697612 286:0.0745820714839198 304:0.0806295930409734 309:0.0391824941148233 317:0.0317333781781563 319:0.0241495260358732 330:0.0264756126240794 347:0.0656065650851582 348:0.0264471357236793 375:0.0188718622687333 390:0.0243174487347971 414:0.0196694883715559 423:0.020169421827898 433:0.043055355522349 455:0.0194372346953921 457:0.0183565072289601 466:0.0245988349483315 494:0.0901951300290997 502:0.0183753085667561 506:0.0148930030084702 507:0.0142341079496336 521:0.0262508467145384 522:0.0370729540252749 530:0.0218840565233647 550:0.0216888627825605 572:0.0288482122786503 599:0.0249607326497348 626:0.0502497629671562 631:0.0178663444284054 636:0.0272262021622432 638:0.0325139339057543 647:0.024046501539487 655:0.0201573982602434 658:0.0246209357691286 691:0.0509301173172899 694:0.0391742747039401 709:0.0232157907332599 728:0.0367165752630846 738:0.032257615827493 741:0.032257615827493 778:0.0508797518202591 784:0.026141005310797 787:0.0305775032019915 789:0.0547075834135519 804:0.0250776041942507 811:0.0302354326044173 819:0.053474055132959 822:0.0356404690359616 829:0.0197485768625654 885:0.0373205816614631 918:0.0307804139082618 926:0.09439777138643 944:0.0291299563509893 960:0.0306782539814097 966:0.0265906435951445 981:0.0315958675023227 986:0.0238050145641908 1009:0.0237262610713686 1098:0.0298631576102711 1102:0.0318892529515384 1171:0.0881533993289529 1200:0.0379790737346882 1229:0.0901407710172975 1263:0.0361587229150271 1265:0.0341929221849593 1362:0.09439777138643 1395:0.0568526470389783 1402:0.0482441394322257 1457:0.0352508131515182 1480:0.0387028649706847 1721:0.0348808953387401 1888:0.0482441394322257 1896:0.0482441394322257 1940:0.0477028314076645 2030:0.0410099546282846 2142:0.0346152545844195 2278:0.0431811735982557 2307:0.0373205816614631 2321:0.0454722274300936 2423:0.0343589365061582 2566:0.0450975650145498 2577:0.0382600435936923 2582:0.0501605308485199 2733:0.0346152545844195 2814:0.138853963748902 2851:0.0477028314076645 2859:0.10032106169704 2884:0.0444013893717534 3222:0.0954056628153289 3225:0.535834714366719 3307:0.0517904417939297 3420:0.0568534076278997 3762:0.0488287966386248
+-1 21:0.0406193103746582 61:0.0788432055097971 98:0.0871104903065864 142:0.0261177645402254 243:0.0633123053041151 299:0.055585630426656 331:0.0524898197104386 451:0.0762622739197634 491:0.240402294315411 529:0.229387520885607 576:0.0657298875702865 927:0.0862441768868739 1087:0.682492538059761 2551:0.360959915125684 2552:0.120319971708561 2617:0.120319971708561 2839:0.133090197037509 3513:0.109637662031863 4653:0.130630075983672 4664:0.148700423698374 4665:0.148700423698374 4667:0.148700423698374 4668:0.148700423698374 4670:0.148700423698374 4675:0.148700423698374 4676:0.148700423698374 4884:0.139289207001189
+-1 6:0.0278547827971398 11:0.0417233773146002 13:0.092564186552813 18:0.0497019579351753 25:0.0696845117130789 37:0.0658971151995163 40:0.0290070059692506 41:0.128261102447402 57:0.0346595552388409 61:0.381586502951864 62:0.0531511268342719 63:0.0301040312050528 73:0.100894332612706 77:0.070013771861876 80:0.0604550836568631 81:0.0282659923287181 83:0.036086751530631 85:0.0284503381611038 94:0.0836087538208691 96:0.0287636366567585 100:0.0286877392642141 106:0.0649919969643566 113:0.0994072386617636 116:0.0994072386617636 118:0.0607989739096456 138:0.07785889954754 142:0.013242443245151 144:0.0276004191321455 149:0.103378215512003 167:0.0648660135140031 180:0.0357752439246429 189:0.0694808643505604 194:0.0367820069657421 199:0.108503128691266 212:0.0525624641861989 214:0.0397741115169428 223:0.0630575857211815 229:0.0243119624408666 240:0.0417930227394405 241:0.0613099075868239 262:0.0434486690858732 263:0.132949504841905 279:0.157687392558597 280:0.0972672427645245 281:0.05358890444439 284:0.0563859891324212 286:0.0520257905890372 296:0.0418637900031057 322:0.0402340197630113 333:0.046834963073738 339:0.0361095957890504 342:0.0867371102889087 347:0.0381373314488231 364:0.0430141499898714 368:0.0565881708978117 373:0.0662826460057749 390:0.0424074603441716 394:0.0864986422507712 434:0.0803434615301329 436:0.123018782172568 441:0.0327363466446676 442:0.158023726471813 452:0.0655307595360115 454:0.0926425228384257 455:0.0338968026018983 473:0.040874258768861 480:0.10243803874443 485:0.032127238989337 495:0.051162976788102 506:0.0259720680970771 598:0.147190140975097 626:0.0438155509974283 644:0.0884719753346255 646:0.241463658807532 671:0.0283516884932409 673:0.0469402370175405 687:0.0522379096944224 696:0.0512368209061925 712:0.0852631929469655 714:0.0480437903357327 726:0.0855664840217387 789:0.0477025715040543 791:0.123619007921284 813:0.0648660135140031 829:0.0344397555552226 876:0.0896083213039331 913:0.0484537867525679 953:0.0507286821772782 966:0.0463717093057338 974:0.17888821406685 987:0.0379011914787961 1003:0.0490633803250322 1009:0.165505927282535 1023:0.0655307595360115 1036:0.0524805470248031 1141:0.123619007921284 1168:0.0603659147018831 1199:0.134463384779327 1212:0.0730636045350455 1251:0.121974814915109 1272:0.058664981848231 1293:0.136632877826679 1302:0.0662321150905718 1338:0.058664981848231 1370:0.0763237029722727 1432:0.0552010698677546 1435:0.0698167680195754 1436:0.0623294975761234 1471:0.0537683169130921 1472:0.0472072923899614 1779:0.126492602781112 1795:0.118692649425167 1912:0.140940291669883 2373:0.0743601200980324 2739:0.0743601200980324 2855:0.153731661039634 2957:0.146962567494935 3265:0.0799882187001651 3420:0.0991472689304428 3829:0.192609699411276 4672:0.102811784658335 4842:0.0963048497056379 6560:0.0888175792621859
+-1 6:0.0363370137324102 13:0.134168305928111 26:0.069900716890767 27:0.0117560743559195 33:0.0670257366644178 37:0.0191030778557627 41:0.0185909642516238 57:0.180855796843954 61:0.189632667379246 67:0.0456765807425759 75:0.0081825699342588 96:0.0250150855073984 100:0.0249490792583645 125:0.0432833666087635 132:0.0489744092373582 140:0.0285305148769306 142:0.00732877979487912 144:0.0240034614840132 149:0.449528502166534 158:0.0579579071656573 161:0.157604838976102 176:0.0418557053152972 194:0.0319884811632666 204:0.0242375486214772 218:0.0229019311800077 220:0.0647781240334914 233:0.334225172127037 240:0.0726928969320088 252:0.0291378948461747 253:0.132352769312716 273:0.292349426118093 275:0.108600789853486 278:0.104567051692393 279:0.0914247771787496 296:0.0364079931577565 297:0.197208572090583 299:0.0334234614688958 341:0.0337341921059193 373:0.115289042013503 377:0.0310747219793826 394:0.075225916597319 398:0.0314037003415021 402:0.0307737726463544 419:0.0491158505458029 422:0.0368165904183045 429:0.0460756347719798 434:0.0698728948679169 450:0.24071027569844 451:0.045856260949507 456:0.0437523473695326 457:0.0278402097507851 465:0.0343318030237731 507:0.021588014865264 541:0.0416332311723701 550:0.0328941928652888 572:0.0437523473695326 641:0.0319471452346261 644:0.0384710399177582 687:0.0908602617483484 714:0.0417825999434423 742:0.0414371549736731 751:0.0509048113246748 763:0.0467610914857617 796:0.0354904636743719 804:0.07606738603449 827:0.0344863824996101 838:0.0531787195237151 887:0.0510196104454914 914:0.103469138433432 941:0.115201150820907 959:0.0448863153858834 1021:0.043226115752545 1035:0.0493119267444999 1045:0.0419474488502968 1106:0.0517345692167159 1117:0.0481843764261306 1218:0.0491158505458029 1302:0.0576005754104535 1304:0.0519835238739142 1431:0.0471610633056762 1447:0.0524988733524802 1519:0.0650721992335817 1568:0.0599168976972847 1613:0.0925988813746786 1653:0.0621973300520038 1952:0.0566018801135131 1964:0.0772426437698611 1981:0.0580267054857863 2261:0.0612862950820823 2883:0.152150916578549 3251:0.0576005754104535 3275:0.0654902871916666 3481:0.0760754582892745 3830:0.17245228339632 3831:0.0862261416981601 3832:0.0862261416981601 3833:0.0862261416981601 4128:0.0837541538614043 4321:0.0668484776801899 4497:0.0894130883061404 4669:0.0894130883061404 4921:0.0894130883061404 5950:0.0862261416981601 6843:0.0837541538614043
+-1 6:0.0192228159149148 8:0.0483737105055729 10:0.0405337728576958 12:0.0647925797708426 13:0.0319396552358194 17:0.288055046394621 27:0.0279861148471172 31:0.036633540733782 34:0.0382990578137851 37:0.0227380720221287 42:0.0287519621628177 50:0.045615615638241 55:0.0965330137162839 57:0.0358782684593831 58:0.0322370370317657 59:0.0298408664869725 61:0.0564291430047874 63:0.0311625612573975 67:0.027184032606975 79:0.0651799348670088 80:0.0312904148109884 94:0.0576990922987569 98:0.0935192249530625 110:0.0463795825679598 116:0.0514513179833868 124:0.111131505198593 132:0.0291467074805522 137:0.078683941584335 142:0.0162004574258411 145:0.0403275075746324 150:0.0419098615153808 151:0.151810758244373 162:0.0260277136695838 166:0.0358574210621512 170:0.0477431851618972 173:0.0718401247922469 181:0.0405635044960025 190:0.0412038742475129 196:0.0446884239775292 215:0.0306155360378266 219:0.0401821259916419 248:0.0584617701697573 264:0.079121660379958 293:0.0454852754402103 299:0.0397833835912122 307:0.0461502554659196 314:0.0766985803281361 317:0.0572860730931905 323:0.0411104667069492 327:0.0808310243810576 329:0.0645211524373101 337:0.0734808079079994 339:0.0747585918371806 360:0.118349398503897 383:0.0575674630420077 386:0.0382740132174575 404:0.0403567772337152 447:0.338007961294075 459:0.0438986085200474 478:0.0376867855257449 489:0.0547554377272987 557:0.0452283976540589 590:0.0807681694504556 603:0.0514513179833868 648:0.070145215371125 658:0.0444464726753839 660:0.061875113462543 673:0.0485907685097782 716:0.092029099081633 719:0.0517260357533214 728:0.0662818941760363 752:0.219899076930691 792:0.0527352913734854 806:0.0515879614445564 844:0.0526605830943035 856:0.0360673932696789 908:0.0511157788606352 946:0.0683145213410062 998:0.0531926543087467 1001:0.0563303711871242 1027:0.0502192994139347 1045:0.0249646711463012 1052:0.0736609745263678 1054:0.0628062750091805 1076:0.0658697988873744 1094:0.0494965993227729 1138:0.0473888381881237 1269:0.0490926209786594 1271:0.0612889735880156 1274:0.066925240109932 1368:0.0934937029861488 1378:0.0589327479498033 1433:0.0463333969655661 1461:0.0820878675332343 1501:0.0784691498716116 1582:0.0814115153843513 1695:0.0828007966154255 1699:0.0820878675332343 1822:0.0683145213410062 1833:0.106426893978903 1837:0.615801150451239 1909:0.0996911595624667 2060:0.090551337473409 2187:0.0671468583687228
+-1 4:0.0305037503061691 6:0.00705205909675474 11:0.0633792174252322 13:0.234346869105903 20:0.0397802817270531 37:0.066733293750955 41:0.0649443135752525 61:0.496836658700219 63:0.0762150646281042 68:0.0432923868084451 74:0.0578115842372621 75:0.0714609770194574 77:0.0531766404734651 83:0.0182723309140322 85:0.0432170232658275 118:0.0461778460261658 137:0.0577317921031331 142:0.0256018228361141 143:0.062139312103682 144:0.0419259675939911 148:0.0619898938700342 149:0.0785174980990214 162:0.0381939827679259 173:0.0527103633302839 181:0.0595243136371792 203:0.0534618972137543 250:0.0985336623881942 276:0.054783199833852 283:0.0528645439476886 296:0.19077752710512 331:0.0551281210010134 356:0.0672609979148485 433:0.0570280940044864 450:0.105109957007606 452:0.0995434340167888 504:0.074912101794578 555:0.0812685126261336 557:0.0663697419815533 598:0.074528929568435 605:0.512630913161424 606:0.0907977184378491 829:0.0523151503040596 850:0.25857870361366 861:0.0941504508897195 944:0.0771669804593067 953:0.0770585792508256 1106:0.0903628784504154 1318:0.0933814928131705 1393:0.0807383543912352 1418:0.0895214604457833 1467:0.173313394697872 1545:0.0901490689257093 2115:0.126367627013757 2144:0.0985336623881942 2383:0.112276528737919 2553:0.126367627013757 2897:0.139779723512242 3127:0.13719594913692
+-1 6:0.0261459915702 9:0.240014071855167 10:0.0882114826994461 13:0.139017128020731 20:0.0294976232168657 27:0.0152261713604121 42:0.0938570370122476 47:0.0247502084868651 57:0.0390399786938421 58:0.0350778700565632 61:0.429813044121356 72:0.0976275992809306 83:0.0812951003656863 84:0.0920697590737745 98:0.0339201481974656 105:0.0555483485079795 127:0.0520064081851774 142:0.0393242111706113 151:0.247783227362232 173:0.0781709112976658 194:0.0414306749859883 200:0.151551405554593 215:0.0333134770974356 225:0.0996534435674257 243:0.0493066396729119 264:0.0430470597954281 266:0.10634710551812 283:0.0391997826863022 293:0.0494935865168528 307:0.100434333509965 309:0.0769667093858104 342:0.0488496594129647 347:0.0429572911984038 355:0.0629440377213205 362:0.153901127769066 364:0.0969009260255279 377:0.0402471971093822 396:0.0531128847308794 415:0.0454958872112608 464:0.0733093292741807 466:0.0966396562275747 473:0.0460401231483398 513:0.0391310772048777 544:0.0848213702153747 550:0.0426037299668099 664:0.0591132639634533 687:0.0588399610851239 713:0.0522894147426735 827:0.0446658938725904 870:0.085969820366694 913:0.0545775844329468 1056:0.0513491344607354 1158:0.0900974733314916 1169:0.0589304848383215 1175:0.0554055814863963 1409:0.0686952579549379 1463:0.0769505638845331 1474:0.0805564150804361 1608:0.056666938154686 1649:0.0593918740241208 2200:0.0754388546524588 2225:0.0809723273112447 2817:0.211720653022347 2871:0.0909175803834844 3035:0.0818421674018964 4873:0.529301632555867 5841:0.121623179690855 5984:0.115805579583413 6372:0.111677926618615 7094:0.115805579583413
+-1 6:0.00791195821167538 15:0.0271070833631978 42:0.0473363162073217 61:0.18580629325098 83:0.0410007677582441 85:0.145460188614804 106:0.0553815803720562 142:0.0328269759258203 218:0.0897592803952084 234:0.113515080799605 317:0.0471569845365513 339:0.12308016831614 433:0.0639818655040241 450:0.58963316675684 464:0.110919554950891 485:0.054753118886192 606:0.101869219208092 856:0.0593802093547285 1045:0.0411010407116264 1635:0.247660069306675 1793:0.12523109957474 1931:0.103139111696673 2010:0.11595172960342 2817:0.480511024442461 3228:0.164128354976279 4155:0.141776376307103 5840:0.36804016887311
+-1 6:0.0297065783352613 9:0.284061899443357 13:0.148076828254064 27:0.0216246078796513 35:0.161180636695295 41:0.034196986160057 42:0.133298225410281 51:0.0504394414003522 61:0.261613610276954 63:0.0160526787753642 70:0.0854442464267279 75:0.0150513565089076 77:0.168003700850788 83:0.115457433542064 111:0.046444519961525 127:0.147721729594814 132:0.0450427737964325 137:0.0607983420521804 142:0.0365909049659528 162:0.0402227393965382 168:0.110314928883203 176:0.0384955550452857 212:0.0840852523180696 215:0.0473126738355775 223:0.100874513553077 225:0.0707652170067333 284:0.0451009118085493 286:0.0416133622772091 299:0.0614804930934768 307:0.0713197371945358 334:0.304448514339173 355:0.0446973865545901 363:0.0693775674038709 364:0.0688106182071901 391:0.0768566370554071 396:0.0754323118054872 423:0.0562680440987167 429:0.084753422323192 433:0.0600572654954964 475:0.120357843468007 496:0.0622762394707239 506:0.124644150515582 507:0.0794197692576443 557:0.0698951154625676 567:0.0805903183476473 575:0.0775125167348105 607:0.0728514939977217 612:0.0864525193379173 622:0.0819645935664512 643:0.0604244350584127 677:0.222368291807533 706:0.0756050023256689 771:0.0787895884069081 966:0.0741817747276885 1150:0.0810381904296084 1166:0.122963846044224 1171:0.122963846044224 1176:0.083824000541884 1233:0.154060843842221 1551:0.0795118995516164 1940:0.133079918908109 2137:0.104830900443725 2699:0.113275966497444 3114:0.125811825377837 5837:0.345464858845504 5838:0.345464858845504
+-1 6:0.0263467770225489 13:0.116737246461004 27:0.0127859159807477 41:0.0202195477610821 57:0.0655663036562774 58:0.0589120782513859 61:0.257805803079927 67:0.0248389430851272 85:0.0538201802689113 91:0.0701741599137813 98:0.02848386207152 111:0.0274611097366079 118:0.0862611469884638 132:0.0266323035546436 135:0.0400069816132785 138:0.0368218822695453 142:0.00113868383346549 144:0.0522123682600175 149:0.293344537588362 161:0.0428527875951435 179:0.023936904319676 199:0.0615773835042345 203:0.0332893004668998 214:0.0752416312156267 229:0.0229957583254201 242:0.0307689411331162 262:0.0410964395116217 273:0.190775683422771 275:0.05905715345405 277:0.0397663481816659 278:0.0379090700068665 284:0.0800000359195215 306:0.0344575396467043 330:0.043671488371989 351:0.0311623951702747 399:0.0414044041163209 411:0.032898082358017 416:0.0427215871060732 430:0.034176071375684 438:0.0489635568438547 450:0.0654491726490565 480:0.032297411723776 483:0.0426349071697048 485:0.0303879304378966 499:0.130828544242398 510:0.0793969387176225 534:0.0334695800276899 555:0.0506037397904648 617:0.0615602506051971 629:0.0536316914231231 656:0.0866929241121171 749:0.0511165175678738 754:0.0535245933029364 800:0.0387236690253951 810:0.0646179148526391 819:0.0441026919773366 868:0.0626464324181438 887:0.0554889695979225 1168:0.057097817132361 1229:0.0495623612720955 1253:0.0537397500773867 1413:0.288766722525255 1545:0.0561334258356083 1547:0.117910190614321 1586:0.347515723300484 1588:0.0786857579732098 1627:0.0586249798848444 1753:0.066655024114938 1846:0.0576856634341633 1945:0.06697633540154 2047:0.0603741994053802 2296:0.0640939862561198 2387:0.0596437661235983 2555:0.0592945109686018 2825:0.0592945109686018 5839:0.612785861933148 8003:0.0910910855009456
+-1 6:0.00787455937098623 13:0.157007617961828 17:0.0429093611747956 26:0.0340832638556854 27:0.0229288283155096 37:0.0186291435045257 58:0.0264115791541612 61:0.323624017592772 75:0.0957547913642455 83:0.0408069622374742 96:0.0243944782727631 114:0.0276467885703181 132:0.0238796937493738 142:0.0214408732785464 144:0.0234079519524203 149:0.263025603710512 166:0.0587554689789816 173:0.0588581121933005 175:0.0381127882885168 176:0.0408172937727202 190:0.0337580462209955 199:0.0184043293758126 203:0.0298486497290561 215:0.0752492841646723 220:0.0631710228940852 223:0.160437665427833 240:0.0354447178337174 252:0.0852450105591892 264:0.0324119117069405 297:0.230779154073738 299:0.0325942481532742 314:0.0314193054304626 369:0.0352079263707175 388:0.0409433259005942 399:0.0371250082871882 402:0.0600205926116396 411:0.0294978663801745 433:0.0318397155987511 450:0.586846044241957 451:0.0447185983462682 458:0.0414530042845437 466:0.0363819970507011 496:0.0330161178160244 507:0.0210524309192153 520:0.0584304002724872 555:0.0453735369263093 582:0.0332090368352686 594:0.0376993988697783 673:0.0398100770673477 682:0.121934828347849 739:0.040221241287946 758:0.0412462385856422 856:0.0295497632517442 861:0.0525657332960666 883:0.0459118849295568 912:0.0374443372889659 944:0.0430835845793025 997:0.0748886745779317 1228:0.0484814175594512 1256:0.067254016205458 1394:0.0510685623071769 1435:0.0592116932518647 1467:0.048381848393883 1507:0.0539666659025853 1551:0.0421537052603531 1579:0.0494214169521989 1635:0.123244705507931 2617:0.0705531085203471 2961:0.067254016205458 3079:0.0579392621535018 3228:0.163352540691609 3856:0.0871948104810472 3914:0.159413236232801 7797:0.396253258308794
+-1 6:0.018771064607443 9:0.287189952705394 13:0.0623780963855398 42:0.056152536833093 51:0.0637435925877406 57:0.0700702018096865 58:0.0629588825647858 61:0.551030137194237 63:0.0202868110230804 75:0.0190213751492883 83:0.0486370150065413 111:0.0586949513350471 127:0.186685527956351 132:0.0569234738170891 142:0.0316394678445259 145:0.0787595587962982 199:0.0438715157882889 228:0.141965226335429 237:0.161309655607938 250:0.262275417338451 286:0.0525895041174256 333:0.0946848651608891 336:0.085808883359353 473:0.0826342848608122 496:0.15740504361298 644:0.089430593143499 671:0.0573177734300665 673:0.0948976943918676 1511:0.11328765052024 2603:0.340180330048852 3867:0.174392173614945 4542:0.207851556368226 7441:0.389393355317115
+-1 6:0.0259545814238298 13:0.0574997534968454 59:0.0537213834797103 61:0.304761756711893 96:0.0536028699337015 100:0.0534614303059724 142:0.00448693398002872 144:0.051435139948078 149:0.288977838904422 199:0.0404404989816962 204:0.0519367469635296 220:0.208211962103196 233:0.10231213952189 240:0.0778839612240783 253:0.189072264060727 273:0.375871629751552 275:0.116356068650894 279:0.0979535016656401 291:0.0696351305178322 331:0.067631656023321 419:0.105246514056933 431:0.0964693800548359 434:0.0748625803095581 480:0.0636332710939383 605:0.125780008301814 631:0.0580636330729018 653:0.0883795890702437 662:0.0901860515692892 663:0.0809693637002353 730:0.0831645570719807 927:0.111123195648308 930:0.0757473366537981 1005:0.0912011417355332 1159:0.087973797753656 1280:0.113952518172581 1319:0.0913166563866369 1447:0.224991457986148 1602:0.238649575162097 1787:0.124340888057963 1999:0.143244373611971 2073:0.125290543250517 2078:0.120090602830881 2749:0.160753655139802 2860:0.134674561573619 4273:0.350284473066101 4432:0.171482974713415 5243:0.17514223653305
+-1 2:0.11080571600069 6:0.0135715555640838 31:0.0517275029608849 41:0.12498411430832 117:0.140113429155848 142:0.0281544161292892 156:0.565154427338404 205:0.107387804037121 283:0.203473648111136 406:0.12725143469274 452:0.191569473151501 598:0.286859056310282 720:0.135120136394279 1016:0.248932373651743 2235:0.243192129843019 2583:0.549487403995003
+-1 2:0.124611110255731 6:0.0152624491567502 29:0.0554302398677456 41:0.140556009296416 142:0.0118733260535859 156:0.423711719325275 283:0.114412316052156 360:0.187933098396495 406:0.14310581738038 598:0.322599111164203 646:0.198457488033146 720:0.151954888445395 1016:0.279947105428615 1096:0.199980469662333 1813:0.567181827732428 3025:0.325954108944674
+-1 6:0.00996079836562027 23:0.0716502623785617 75:0.0201872495206004 83:0.025809058234966 92:0.0657559831383751 142:0.00774894026079214 156:0.138264408221885 183:0.0876288269105046 263:0.142627198372042 293:0.0942774792767178 294:0.0951885841651189 295:0.169148349072801 325:0.178888552123557 355:0.0599492341279826 424:0.20518352683407 882:0.0748009086902858 952:0.092795073000712 1120:0.481619613398951 1159:0.101287234793639 1383:0.144814814848462 1458:0.535470180562664 2574:0.185081167663973 3746:0.212728843339495 3822:0.182703093165109 4178:0.375372107105303
+-1 6:0.0175178099358957 9:0.0335019557508018 18:0.0234430867463008 25:0.0657366478436926 27:0.0255038305993226 29:0.0159053176317187 30:0.0263241967667907 36:0.0334613597001151 41:0.0201657793493256 63:0.0283985357628712 72:0.0272543645952593 75:0.0266271126507508 77:0.0330236271443153 83:0.0226948764641741 86:0.0340213287070739 98:0.028408116953856 117:0.271282139673917 127:0.0871107117500672 142:0.0181704929947101 156:0.30395274746374 159:0.0263465945730408 166:0.0326769756178532 168:0.0325260609865321 199:0.061413635128145 227:0.0311294916137294 242:0.0306871194664941 256:0.0298035030595923 284:0.0265957658294143 295:0.0371846276932863 311:0.112233867317085 323:0.112392275721093 329:0.0587983201964075 331:0.0342355308062871 337:0.0334816405818478 340:0.0501399352783898 355:0.0263578091511522 433:0.0354154473916958 455:0.0319764337998502 458:0.0461083481701886 480:0.0322115255035325 484:0.145212444170923 495:0.0482644206736005 511:0.0568037731414381 550:0.0356806148523274 761:0.0445328392092426 771:0.0464617977561343 837:0.0475236785453568 866:0.0489798950422234 873:0.050637237399971 882:0.0328876274112573 886:0.037721290254055 909:0.038558593416337 966:0.0874891894799336 1005:0.0461665391777299 1037:0.0489798950422234 1070:0.0678143070275742 1094:0.0451063997724064 1150:0.0477877863102714 1169:0.148062805830509 1358:0.0586325738503434 1366:0.0474585487405248 1377:0.0417702603383321 1469:0.0991692447306436 1482:0.0518845032233046 1806:0.120427301143151 1985:0.061605534266965 2233:0.0664777731286846 2276:0.0803288537546691 2290:0.0754566148929495 2303:0.0607905494927479 2425:0.0693183198685331 2691:0.073045271620033 2767:0.0689243035997289 2931:0.0664777731286846 4709:0.17731600220588 5214:0.181697706853589 6216:0.0969871484512111 6487:0.290961445353633 7397:0.661131207967211
+-1 6:0.0199470419557038 17:0.0362312262956455 37:0.0943789460659208 41:0.0306162812377756 57:0.0496399923524934 58:0.0446021042942887 59:0.041286841528655 72:0.0413783805203263 85:0.0407470482241039 100:0.0410870580384729 118:0.0435386515942954 125:0.0712806343488023 156:0.553764035883234 158:0.0954472055198357 161:0.0648873561534771 179:0.0362450734938547 199:0.0310799976591747 203:0.151219195999793 204:0.159661133239949 214:0.0569651450493999 231:0.0712806343488023 242:0.0465900902557888 249:0.0758790438890095 252:0.0479853530571605 256:0.0452485577540497 258:0.0630519559380585 275:0.134135820490396 278:0.0574016176082186 286:0.0372561019490249 339:0.0517167645824654 342:0.0621131670869473 363:0.0621131670869473 398:0.103433529164931 414:0.0982553111593103 419:0.0808857826409685 426:0.119713326664303 442:0.0565810533308769 473:0.0585407942692329 539:0.0617732128511159 546:0.0574458447396116 561:0.117841769482766 671:0.0812115210530799 688:0.221434533918345 742:0.0682402253695078 812:0.0744749910692721 819:0.066779951603075 913:0.208188961509068 1059:0.0609500499436487 1127:0.076623787406864 1265:0.0854022266686825 1275:0.100454628183353 1366:0.0720529690525043 1372:0.0929021850564154 1500:0.0758790438890095 1568:0.29602002875696 1609:0.185804370112831 1649:0.0755177710387081 1748:0.105859607747128 1836:0.0709063918357038 1957:0.254412032985414 2073:0.0962903497482878 2133:0.113574073988416 2373:0.106499802653563 2971:0.137929409940569 3519:0.227148147976833
+-1 6:0.00478198991847473 42:0.0286100837270742 55:0.0480283326266561 82:0.0358683723968773 94:0.0287071861790777 114:0.0335781744712164 120:0.0398407580902017 125:0.0512652365591963 127:0.0475587470014047 137:0.0391478352669657 142:0.0322410304204985 156:0.199134341023203 176:0.123935751909966 181:0.0403633412329327 202:0.771912508111564 211:0.190234988005619 248:0.116346573490747 262:0.0447544895365958 281:0.0551994828309684 283:0.07169472425974 286:0.0535893906427444 301:0.0866862442626849 321:0.126986715016384 370:0.169654077855344 386:0.152340590394723 433:0.116011976158047 527:0.0456095743842206 561:0.0423760692106535 641:0.0378385067097002 704:0.0659548218388315 826:0.0623373100740239 1096:0.125314696218879 1359:0.159256351565986 1418:0.242817432733013 1712:0.186064704401084 2076:0.178898004527155
+-1 6:0.0130868820479315 10:0.0551907386195934 14:0.0663860312473809 16:0.0720095031489617 22:0.279122164116046 37:0.0309601327784748 41:0.0602603126109879 52:0.0533476849318928 59:0.0406312895729368 116:0.0700560555372913 132:0.0396861234661872 299:0.0541690094552534 317:0.0390003257003613 318:0.552876198337977 319:0.0593595409616192 333:0.0660127535650545 355:0.0393818109301664 408:0.0385305954491254 430:0.152782404130581 431:0.072963037472967 531:0.368140384138052 572:0.0709089129070399 639:0.0752829061658504 725:0.0951316516583678 748:0.386775419093171 853:0.0692418803331241 902:0.0902493510664314 990:0.0881030362604776 1025:0.0797596653229578 1103:0.0857372493589407 1135:0.0888781498571047 1273:0.0878519271350395 1324:0.0780918500811634 1393:0.0749152344134796 1426:0.155325300251111 1430:0.0984050546752565 1540:0.170168608638404 1755:0.202645842255325 2024:0.0637265003281567 2442:0.11376769239822 2611:0.07928922767229 3232:0.13974568999337 3882:0.114856147452254 3959:0.132465965470041
+-1 6:0.0341958574764646 9:0.196193720829749 10:0.0721063514190814 14:0.0867329305272673 16:0.376319844194231 22:0.182335672234154 52:0.0696984134169181 75:0.0519777844688827 83:0.0221509071012531 96:0.0529674146150761 98:0.110908831878375 124:0.296541136044031 142:0.0221687096945187 151:0.0675148099437756 174:0.250663936519004 179:0.0466020740132385 185:0.0497826866751859 196:0.158994289280764 218:0.242464908612572 229:0.0895395676199352 230:0.368600527146334 281:0.197364871093708 283:0.0640858359803508 284:0.0519165935187192 289:0.148758067815526 317:0.0509536791995483 339:0.066494788352572 363:0.0798619544880587 421:0.248577804070941 462:0.105050880575044 770:0.230212120822414 802:0.151572698417824 867:0.0751481782369194 947:0.103998829796613 987:0.0697939605975059 1045:0.0888203206277763 1059:0.0783664775591112 1101:0.110070895474971 2517:0.173065947225061 2525:0.142588925601365 3260:0.182576861335692
+-1 6:0.024657329364479 9:0.0943118757795201 13:0.0819387338903305 16:0.271349895263568 27:0.0358981147440575 105:0.261928089653178 142:0.012788009235317 151:0.0973647119046297 153:0.213859339699985 318:0.148812599083908 404:0.103532214296298 409:0.0629629243258336 633:0.384613166697751 667:0.118746701411644 675:0.210590123273691 730:0.118511786514043 818:0.377943152188419 1022:0.441840908809136 1436:0.331048128154448 1511:0.148812599083908 1958:0.179239979342369 2142:0.160309515105451
+-1 8:0.272028382957864 13:0.179611873375532 16:0.297403076143305 19:0.328110729565908 133:0.38987178637188 142:0.0420474820597018 832:0.479147591754807 1173:0.56061080796868
+-1 6:0.00590349214375817 9:0.541926736182127 13:0.0392357716150642 14:0.119786947720261 15:0.0606776916890274 29:0.0214403325590205 31:0.0225009510445479 41:0.0543668508322207 59:0.036657547291413 63:0.0638019377170404 80:0.0384382223352158 90:0.247456534534195 105:0.250844752347703 138:0.0990076437101688 142:0.0673579056620235 179:0.0321810883683018 281:0.408871267553081 287:0.109594233766584 317:0.0703721835446616 338:0.0773521418110349 363:0.110297434998941 381:0.170245542074709 386:0.188068459763208 410:0.225343103669735 649:0.0790365782847213 679:0.0742661056736833 764:0.0545995765486796 808:0.0616152460808614 835:0.0963942040219024 890:0.0619981978810538 925:0.0872371906330513 1049:0.0934409399941868 1129:0.137679044232196 1359:0.196606148557767 1815:0.153526109661829 2664:0.11951078700084 2796:0.101715347944797 4004:0.194110886088379 4316:0.130738458979166 5473:0.101715347944797
+-1 6:0.0153430256036753 9:0.234742295635697 16:0.337694997624614 27:0.0446752108065037 100:0.0948110178236811 105:0.162984779351646 142:0.0278506899818823 153:0.13307399500162 174:0.224936204543261 201:0.184140387832164 212:0.173715352155019 318:0.185197308609022 338:0.20103624488781 409:0.078357371614235 506:0.171671820396217 667:0.14778029308685 675:0.262079449522545 743:0.194770072237503 1139:0.511815336184044 1484:0.289100513775111 2071:0.274935548631464
+-1 6:0.015207129355904 9:0.0232663136153459 10:0.0256529461597373 14:0.1542828858557 26:0.0131641296460224 27:0.00885590270505765 34:0.14543186071254 37:0.0143904328720575 72:0.037855019496592 80:0.0198030252273872 90:0.0424957910672584 91:0.0486046939101863 98:0.0591862901843293 114:0.0213562826950406 119:0.095465931522847 132:0.0184463193287535 142:0.00473211614537891 153:0.211032531201596 159:0.0182970849998233 162:0.0164723757586293 170:0.030215626923068 175:0.0588818827123855 183:0.0267565481645243 215:0.0193759090817215 218:0.0172521258498123 226:0.0235828905482274 247:0.0447562746228218 323:0.0260179231954918 325:0.0273108766243348 327:0.0255781015471151 331:0.0237757640912605 336:0.0834203163062331 372:0.12009215488509 377:0.0468174504693501 402:0.0231820187736779 404:0.102163717864763 408:0.0179092238169128 442:0.025881593842537 478:0.0715534487810659 499:0.0226539275832792 509:0.0282309800532514 534:0.0231820187736779 541:0.0313624968162977 561:0.0269518914538697 580:0.0275198056600964 609:0.0215379523100435 631:0.020412146077671 644:0.0289804041859013 655:0.0460593110675411 688:0.0337632377636595 695:0.0300230387212726 713:0.0304127648707213 739:0.0621393111974689 757:0.0288968129857796 790:0.0459504681017629 796:0.026735122945132 810:0.0895125492456436 828:0.0461672366105007 862:0.0292652481643576 880:0.143103054696009 913:0.0317436186796051 925:0.0449438132650055 963:0.0516093595294331 991:0.0646164762196642 996:0.0338631804955588 1045:0.0157995991900374 1048:0.0413110324320237 1056:0.0597317510763766 1139:0.152184625602564 1184:0.040059764154557 1260:0.0406053910199229 1271:0.0387884627754413 1418:0.0386089909471959 1531:0.0415601589431848 1539:0.0500020882937258 1568:0.0451356635158459 1771:0.0433907677126474 1816:0.0668451467746267 2030:0.0468535232747618 2067:0.037927378110203 2520:0.0565126038033705 2722:0.0419483739802039 2896:0.102232847142414 2901:0.106771485231093 2913:0.0447562746228218 2979:0.0470954277012062 3364:0.114615957071291 3380:0.051523583266463 3475:0.0493341224235836 3668:0.120568946324421 3945:0.0557864835629083 3949:0.714499864693026 4296:0.0630923738048281 4372:0.134710548202547 5931:0.35369464211547
+-1 6:0.0316023363951754 10:0.0592334040679995 14:0.142497480979569 16:0.0772841259863854 18:0.0375925385502689 22:0.337013525965831 33:0.0194307829183195 37:0.0166139655015893 41:0.242528696985273 52:0.0572553485729452 59:0.0218037450963126 83:0.00909818348161511 85:0.0430373562137903 111:0.0219593014340583 116:0.0751875903247543 123:0.0356243702448923 142:0.000910549565439608 164:0.0410160228992842 168:0.026078843941435 171:0.0607215843912801 175:0.0339899979642631 199:0.016413470284093 239:0.0297698083879119 242:0.0738132354769528 264:0.0289058046500554 275:0.0472251065952411 284:0.085296135533342 286:0.0393501910101301 296:0.0316640672708453 318:0.211919220473462 324:0.0372044669851898 333:0.0708481205970305 345:0.0257682632670229 347:0.0288455256544253 348:0.0348843837966473 355:0.0633997327658872 372:0.0346620378971814 382:0.0308414185956776 390:0.0320752773942335 394:0.0327120266328253 402:0.0267639801795631 408:0.041352922361659 426:0.0632210835844264 430:0.191302486410102 433:0.0567910098936705 499:0.0523085823324909 502:0.0242374570585583 549:0.03749497828204 557:0.0330469108192379 580:0.0317720186676991 607:0.0344447077490029 609:0.0248658813696113 612:0.081750739740566 667:0.0338206691528338 703:0.151397647602778 708:0.0622564220374915 712:0.0322448048420782 748:0.103776581251362 787:0.0403324340445094 794:0.0820320457985684 800:0.0309654172361352 807:0.0456583215194977 826:0.045773706867157 836:0.0398184689193796 842:0.0508513163858589 851:0.0398812350135065 853:0.0743137776152889 856:0.0263532645569745 876:0.0677760879649159 986:0.0313993648695384 1010:0.0390955378152475 1020:0.0448871451399233 1021:0.0375937951623772 1025:0.0428009898269954 1045:0.0182408686532227 1049:0.0555782529855821 1083:0.0376435862880446 1096:0.0460087078192683 1103:0.0920174156385365 1109:0.0485841683732613 1114:0.0429730401378186 1133:0.0409454397163931 1135:0.0953883839023872 1160:0.0444726915032109 1161:0.12584227618432 1164:0.0372522812836898 1216:0.0375937951623772 1280:0.0462495843997815 1283:0.0435084312792808 1287:0.314605690460801 1324:0.0838119986427038 1350:0.0497384003854639 1367:0.0695993071440696 1426:0.0416756801135251 1491:0.0403324340445094 1565:0.0528065624025162 1692:0.0521097845499618 1698:0.0508513163858589 1739:0.0565933553400213 1831:0.0475535389221924 2082:0.0610505300550125 2271:0.0599789198472468 2275:0.0552623374251708 2319:0.0573348412142087 2442:0.183151590165037 2478:0.0585664596775903 2655:0.063635135898134 2723:0.045773706867157 2760:0.0552623374251708 3232:0.0749909597984615 3821:0.0710844813296179 3943:0.0695993071440696 3959:0.0710844813296179 4370:0.0581381864429455 4604:0.0585664596775903 5664:0.530083787413682
+-1 6:0.0125571461425148 8:0.0210664852628894 10:0.0882611773659144 14:0.0424658877564946 16:0.069094674451835 17:0.0114042173402771 22:0.0446372914187784 27:0.10359629421765 34:0.0166790293443316 37:0.00990230549102715 42:0.0125213216197747 52:0.0170627521921336 53:0.128942723832109 57:0.0781239443757893 58:0.0842343155136721 59:0.0909687343097367 62:0.0479218575968091 70:0.120392625645468 72:0.0130243464792469 78:0.0321567470372347 83:0.0054227265754074 85:0.0256512539835442 90:0.0292420880575423 91:0.01672286482539 98:0.0407271088713271 104:0.0606171078693381 109:0.207284023355505 116:0.0448135328352941 119:0.197075270701613 132:0.0126932310377568 142:0.0293062579120858 145:0.0351248161503832 146:0.0187930860708882 148:0.0183969000166021 149:0.0233018395725904 151:0.0330563757449897 154:0.0151289201188832 162:0.0113349263621988 168:0.09326154416399 177:0.0436866649322944 179:0.0342257277409279 180:0.0161277497483119 181:0.0883259171919154 183:0.0184116430802418 186:0.0237524281797638 194:0.0165816061194075 199:0.0195656114616872 203:0.0475980736376806 215:0.0133328978078295 218:0.0118714858721315 220:0.0167892519247043 234:0.0300268155460462 239:0.0354869807618473 242:0.0293295904943742 244:0.0307975658477966 257:0.0253599091507933 258:0.0396927337418671 275:0.0140736247558617 277:0.0189530524072806 278:0.0542035633196009 283:0.0156887464829009 284:0.0127096145585233 286:0.0351804280990566 297:0.0204450773957465 299:0.017325445068672 304:0.0158471038693581 306:0.0164228194091765 325:0.0187930860708882 348:0.0207918949384839 351:0.0297046390128881 367:0.0357259802822144 376:0.427056182500881 377:0.0161079482799552 382:0.0183821947073281 384:0.0226795447767049 411:0.0156795659531543 414:0.0309270493400882 430:0.0162886687230923 433:0.0338487478535619 439:0.0225567075766793 465:0.0177962946162948 471:0.0218165612282263 473:0.0184264240926071 478:0.0164123881254119 484:0.0462628576882296 496:0.017549689531491 506:0.0234168083157217 507:0.0111904018689948 513:0.0156612488080112 525:0.0337309411943546 530:0.0344090950956364 538:0.0183383033843492 539:0.0194438669950841 571:0.016517563595397 572:0.0226795447767049 594:0.020039083618951 604:0.0309266144276959 613:0.0193561947557345 631:0.126413553495631 639:0.0240785251290937 647:0.0189045928780656 656:0.0413187433387432 688:0.278796807024032 690:0.0523101203923105 700:0.0258775946252193 706:0.021305787393712 722:0.0268813853090675 754:0.025510374181571 770:0.0281789224219622 771:0.0222032162925512 780:0.0212329438782473 793:0.0251175769855322 817:0.0383876431947179 826:0.0545643637952609 829:0.0155257015202366 847:0.0223186457093892 855:0.0674618823887092 856:0.0157071516913922 906:0.0244888725225749 944:0.0229010429840275 954:0.0285982634275142 960:0.0241182652194162 962:0.0283430027311634 1067:0.0445212819448542 1083:0.0224364430735336 1089:0.0683457676529205 1113:0.0254096273846054 1123:0.0237701331705192 1227:0.0228688724789725 1281:0.027078287574966 1308:0.0244464928458426 1322:0.0470264817460798 1323:0.539695059109674 1361:0.0314739255231199 1389:0.0266910114063051 1405:0.0296452304059962 1431:0.0244464928458426 1472:0.0425628068149244 1507:0.0286859356668638 1511:0.0252617457325022 1525:0.0293402514758333 1540:0.163280457462256 1598:0.0218972523001793 1620:0.0253106176882001 1649:0.0237701331705192 1749:0.0655106190896391 1811:0.0337309411943546 2013:0.0329376239092297 2066:0.0280194004937374 2075:0.0341728838264603 2433:0.0285119096177729 2604:0.0311937519020827 2656:0.0394346101731999 2663:0.0339476620136035 2724:0.113784013015931 2774:0.0337309411943546 2866:0.0286859356668638 2915:0.0335221029022643 2993:0.0379280043386435 3762:0.0383876431947179 4463:0.0407159941948996 4480:0.0434149524982399 5036:0.0400396345195763 5662:0.0407159941948996 5687:0.0446963365199396 6652:0.292060073069878
+-1 6:0.00981018963373588 9:0.225138101316833 10:0.0827441723553612 16:0.431838158996213 22:0.104617790201218 37:0.0928333494655396 52:0.0799809922311302 83:0.0254188214899562 123:0.0995286047788382 140:0.0693234691812474 142:0.0228953254433621 212:0.222144000922963 218:0.222588527013518 229:0.154123955864334 281:0.113241015453389 291:0.0789610694614408 363:0.0916439564164003 404:0.0823828599142961 486:0.292439015751573 654:0.102515854639551 844:0.107499402515194 911:0.664762047621229 1225:0.0875066821692859
+-1 8:0.272028382957864 13:0.179611873375532 16:0.297403076143305 19:0.328110729565908 133:0.38987178637188 142:0.0420474820597018 832:0.479147591754807 1173:0.56061080796868
+-1 10:0.0252895844976682 16:0.197977826722645 22:0.0959248380861327 52:0.0244450576235108 57:0.0223849505699622 63:0.0324045921265666 67:0.0169604959305173 70:0.0344962481809475 75:0.0182299692947651 83:0.00776890281941095 86:0.0698770218722435 98:0.0583479448091368 109:0.0989889133613223 115:0.0403707077625425 133:0.0432555316101188 142:0.0326556159500379 154:0.0650236233738584 171:0.155549760827457 181:0.0506162689604373 200:0.028965783586036 218:0.01700775777279 225:0.0285699106789625 232:0.0798406342479249 239:0.0508406428130456 289:0.0260866737235512 317:0.0357415775510466 331:0.0234389918116413 351:0.063834802631407 354:0.0446899218926393 377:0.0230771518841825 413:0.0259249601379095 425:0.81875972495364 453:0.0290824793550529 457:0.0206750924218287 458:0.0315675898622518 474:0.080741415525085 515:0.0216626094129188 531:0.0337379697555202 541:0.0927547863338751 558:0.0332849977161327 571:0.0236639898032179 574:0.0224502957409534 599:0.0562269769529635 632:0.0474580499711986 655:0.0227034515235364 660:0.231628461881515 689:0.0749424180157961 711:0.16301337108389 727:0.0321011927072615 903:0.0333835248072339 1049:0.0474580499711986 1072:0.116664042598206 1136:0.0537281104643047 1148:0.0543377903612965 1161:0.0537281104643047 1267:0.0402556441557719 1269:0.0306295688489331 1408:0.121397513807888 1433:0.0289080506208594 1451:0.0564962385428641 1781:0.0380621131330835 1817:0.042622379760613 1924:0.041354195409227 1948:0.0450913143663576 2056:0.0390859868954872 2161:0.0398108377882962 2358:0.0512157619648027 2584:0.0664012189921972 2589:0.0486353282730432 2722:0.041354195409227 3287:0.101587552909222 4004:0.0492938327274374 4559:0.0583320212991029 5556:0.0621987006311174
+-1 6:0.0241334887390762 9:0.0263737818762791 14:0.209866844197472 16:0.0379407306380104 17:0.0187865855803286 26:0.0149223417862922 27:0.0200774089202243 33:0.0190781248123187 34:0.192331838281625 37:0.0163124310944796 58:0.0231270463370461 59:0.0214080190217786 67:0.0195019902452508 72:0.0214554837442513 80:0.0224479338012997 83:0.00893305641657807 98:0.0670912604890741 100:0.021304427451203 111:0.021560752096886 114:0.0242086456324414 118:0.0225756257200338 119:0.144288587997524 132:0.0209100251307475 142:0.00536414152644812 151:0.0272274902073051 153:0.209315935643499 159:0.0207408589403175 175:0.200238588303498 183:0.0303301750642559 226:0.10693056435393 235:0.052333371256236 240:0.0310368277095146 247:0.050733960008112 299:0.0285408412333871 322:0.029879062522734 323:0.117971594912069 325:0.0309585400957155 327:0.0289943341332762 336:0.0945620033617903 364:0.0319436756376797 372:0.136131763301886 377:0.106140856441283 390:0.0314931286139785 402:0.0262782285452186 404:0.115808789272822 405:0.0327877753347233 406:0.0323262350508164 478:0.0811101871077091 495:0.0379952535517289 496:0.0289102473632391 523:0.0404117507246067 541:0.0355512980613726 561:0.0611032171326591 580:0.0623907477356665 631:0.0231384093406255 644:0.0328510511515344 655:0.0522110310877008 663:0.0322663633361307 695:0.0340329408254714 713:0.0344747191246456 720:0.0343251555452132 726:0.0317721960295709 739:0.0704386894528633 785:0.0484977932397183 810:0.050733960008112 842:0.049928392744559 880:0.16221601809289 883:0.0402023023307071 912:0.0327877753347233 917:0.0419408293116219 925:0.101893092935673 963:0.11700469730675 997:0.0327877753347233 1011:0.0413771059889084 1027:0.0360276306850292 1086:0.043468452224349 1139:0.172510531187799 1140:0.0350176377381103 1198:0.0410694463737201 1260:0.0460286809275244 1322:0.0774684485137163 1418:0.0875312799903942 1539:0.0566804089302469 1645:0.0394080150796307 1771:0.0491860748555738 1816:0.113659560534704 1904:0.0481715643826176 1952:0.0483332725826244 2067:0.0429929903789268 2206:0.0444976945661068 2387:0.0468285683954445 2520:0.0640604743240293 2896:0.115887151514481 2901:0.121031973893529 2913:0.101467920016224 2979:0.0533855323235409 2999:0.0575035103959329 3086:0.0617791537737582 3364:0.129924159938487 3475:0.0559232289811074 3668:0.136672235403709 3945:0.0632373728583433 3949:0.589039318423659 4296:0.0715190438973401 4372:0.0763513007145361 5306:0.0617791537737582 6855:0.26023152797745
+-1 6:0.0286904117705093 8:0.0320882961722926 13:0.0635607092862857 16:0.0350814789474209 17:0.0173708095613201 27:0.0185643551536662 35:0.0345927033701402 37:0.045249329551571 41:0.0293575263789035 42:0.0190723735635032 52:0.0259898430622462 57:0.0475990984541522 58:0.0213841688218912 67:0.0721292024393605 83:0.0412992614196453 98:0.0413567969975677 109:0.105244436842263 111:0.0598077362816805 116:0.0341298013456197 118:0.0208743038181975 124:0.0737181542539371 132:0.0193342245676065 138:0.026731541991501 142:0.00826649069336182 146:0.0572509466395285 148:0.0280220059975879 154:0.0230442460374188 166:0.0237857202805304 171:0.0551265336131768 179:0.0173774485042332 196:0.0592873843696045 200:0.030796252607399 218:0.0180825491256104 219:0.0266544771152843 242:0.044674589740579 250:0.0445413067522769 252:0.0920249756811376 271:0.0703651984564005 277:0.115476530882948 282:0.0903107396884287 284:0.0193591798109772 304:0.0482763551762314 306:0.100060410953138 307:0.0612267717460619 322:0.0276273462643822 323:0.0545405683246807 333:0.0643199834239417 373:0.0227570302856554 376:0.0813110557794194 382:0.0279996069920869 395:0.0531699879110053 403:0.0738417845475479 422:0.0290690684398539 426:0.0860935833003107 430:0.0496215310448286 463:0.0783448507891989 466:0.0294567304161805 472:0.0290438251124681 479:0.161499430398412 480:0.0234469170095898 496:0.026731541991501 515:0.0230315603109483 534:0.0242978747636723 581:0.0477248416133557 593:0.122817365427083 604:0.0471071633914358 663:0.0298347376829974 695:0.0314681841127087 712:0.0292736814395841 713:0.031876669554114 715:0.0786688158576035 730:0.0306435993982994 783:0.0513786907359117 787:0.0366160946448422 822:0.0426789191644117 886:0.0549150000352815 966:0.0318418909521581 967:0.0408477731419522 987:0.0260254716527231 996:0.0354931693746609 1000:0.0387037343424883 1023:0.089995530913059 1059:0.0292220777095617 1102:0.0381868950029508 1113:0.0387037343424883 1176:0.0359807337344823 1245:0.0311738712567831 1341:0.0366160946448422 1407:0.0388571910306401 1468:0.0446908284593914 1476:0.0410443388718662 1530:0.0432995202959222 1598:0.0333537136546145 1614:0.040283267162005 1824:0.0451553698442144 1849:0.039416538174184 1854:0.159509963733016 1899:0.0458158198230908 1943:0.0382588855893265 1985:0.0448429506739929 2024:0.0310461783777393 2246:0.0403748575996029 2415:0.0465302417857444 2675:0.0527811769288488 2952:0.0498926166739755 3302:0.0584717407207136 3388:0.0554251693350612 3500:0.0645345652402831 3508:0.816973082792209 3673:0.0544523001859633 3708:0.0498926166739755 5039:0.0705973897598526 5352:0.0661292966854626 5915:0.0645345652402831
+-1 8:0.130596493301297 13:0.215571998067519 16:0.14277847928593 19:0.236281101791178 22:0.0691794769869575 75:0.157765988429534 83:0.0504252892242662 85:0.11926397939289 133:0.655099319206272 141:0.0592574383234894 142:0.0302794894935476 175:0.188384360630186 181:0.0547554796585124 218:0.0367971782152812 234:0.0930719283825295 283:0.0972585245897301 309:0.0477404980615251 446:0.0800437597870943 507:0.0346860718455356 518:0.339437323999851 534:0.0494450877318578 577:0.0946869596480284 599:0.121650021071843 622:0.0715950148888757 684:0.0607123559793102 791:0.0863685973889403 832:0.230031126077869 1062:0.22557547826549 1417:0.22557547826549
+-1 6:0.02674363439173 13:0.0444358654843024 16:0.441464013634254 17:0.0364322691968511 34:0.0532833485090439 58:0.0448495962332596 65:0.0478322876569572 70:0.153844018084097 100:0.0413150453906716 105:0.0710225848373918 111:0.0418121281869775 147:0.0860834031659821 203:0.0506860979664384 250:0.0934176885798037 258:0.0634018239785449 317:0.0398494632972456 331:0.0522658096212148 351:0.0474476841602586 377:0.0514589550895056 432:0.0628061575297173 448:0.0605480136690637 471:0.0696958684581692 480:0.0491758538549478 506:0.0374040339128044 546:0.057764605114831 559:0.478672681090499 569:0.0937312845043424 574:0.0500611499234306 620:0.0950421931145049 631:0.0448716321696737 634:0.0751161342875789 647:0.241572813368997 663:0.187719609298704 784:0.19696075706231 792:0.0733676771538755 858:0.134152769786247 882:0.0502080275283641 908:0.0711145394903717 912:0.0635843619508649 991:0.0710225848373918 1098:0.0750018353828789 1283:0.082843259441855 1880:0.0934176885798037 1995:0.0865051439204629 2073:0.0968246538072654 2740:0.0968246538072654 3924:0.115196142013138 4102:0.155504039810405 4499:0.296131633847757 5507:0.296131633847757 5769:0.142788313798299
+-1 6:0.00758486788341013 8:0.381742409477499 9:0.348136543281006 10:0.0639746670420406 13:0.0504105259661553 16:0.166940472370563 19:0.184177517239899 22:0.0808865217244912 52:0.123676561189196 85:0.0464822270046504 106:0.0530920360115953 123:0.461710535301944 142:0.0511385344456118 174:0.111197845700503 192:0.0612543526411369 215:0.0483206616667486 218:0.0430242592853291 229:0.0397209393683021 255:0.0705963071112968 281:0.26266102081558 317:0.045207455337914 326:0.353782925558566 339:0.0589959394861439 363:0.0708556437421979 453:0.0735694939419854 560:0.0903534626552183 844:0.0831144754653193 863:0.32063944814569 867:0.0666734564557459 2211:0.11684578186789 2824:0.221421125228808
+-1 6:0.0226754465252043 9:0.173462735101474 13:0.075352742026869 16:0.374309395923431 89:0.361018021616388 105:0.120437544200056 142:0.0264603308983335 151:0.0895388257828057 153:0.196669961681593 318:0.136851484721817 404:0.0952106026654157 410:0.432773972816177 506:0.0634284150309053 556:0.140187748027808 672:0.158414355421682 867:0.0996622762421195 914:0.290556075899712 1045:0.0588972050820133 1046:0.127379238084766 1628:0.470387183168183 2451:0.179454379417041
+-1 6:0.0138496141955054 8:0.0697043794907734 10:0.0584073757405924 12:0.0933632446494407 16:0.152412749403634 17:0.0754681080742281 18:0.0370682988542687 19:0.252224652736319 27:0.100816887385096 36:0.0529092305487362 37:0.032764557123159 76:0.0576112112690334 82:0.0519410462993941 83:0.0717704517616446 94:0.0831418426213629 106:0.0969435759352847 142:0.0323226600208286 162:0.112514356162084 185:0.0403248261601031 207:0.081892112037332 242:0.0485225912300199 286:0.116404320904178 309:0.0509618858797646 373:0.0494343690483649 381:0.465962776261916 402:0.0527814962269246 430:0.0538956324182856 442:0.294639837255625 518:0.241561034780437 600:0.240796645351797 679:0.0871142779846544 791:0.0921964952702864 834:0.0697820908825768 981:0.0821889994652675 982:0.465384745383447 1062:0.240796645351797 1102:0.0829521706783046 1615:0.102766194645066 1788:0.0852681270425806 1836:0.14769500757565 2184:0.112325368294311 4258:0.130480476371901
+-1 8:0.0590600916797135 9:0.0224420268449445 12:0.0395530512486763 13:0.0389955400718871 14:0.0892901399851858 19:0.10685419785182 21:0.0532411836487146 35:0.0318347883215708 42:0.0175518220905552 89:0.0467073007230292 90:0.0409902359134166 105:0.0311636110026247 106:0.0410698475786234 115:0.0394999384308392 137:0.024016561656753 142:0.0928107912974879 162:0.0158887868996721 181:0.0495245096840025 235:0.133594824753808 299:0.0242860249675856 317:0.227309260626403 331:0.022933428338351 356:0.223845869967931 373:0.0418854366031862 417:0.171636967233437 421:0.0853022675000645 435:0.110555304461999 442:0.0249646520461694 491:0.280092346514511 506:0.0656492446990712 539:0.0272555329711493 831:0.0514943746019637 877:0.0552776522309995 1004:0.0593895250644787 1045:0.0304796913704725 1071:0.392880235888206 1077:0.129937977671922 1396:0.125306604289856 1428:0.0493054537546483 1644:0.590497837503138 2136:0.381573194112499
+-1 6:0.0155652238195968 10:0.131285083220968 22:0.0829953028835311 35:0.0844531018427473 52:0.0634504577317169 85:0.0476940586231676 99:0.442528636598493 139:0.0636685808631831 142:0.002018144615466 200:0.225553842670126 283:0.0583410070290921 302:0.395181478027326 320:0.0738723473418923 336:0.0711539011308076 339:0.0605340143470211 341:0.0650262881991062 364:0.0721087875871864 482:0.123183796090998 489:0.0886738599940628 502:0.053719967931347 507:0.041613223517184 511:0.100944518290765 531:0.0875714697382305 844:0.0852813412937417 848:0.0860177614736955 884:0.0803480807577279 890:0.0817326256163968 1045:0.0404291125394706 1135:0.105709541060329 1398:0.275970617486337 1439:0.0917078997793903 1488:0.108382283438827 1527:0.101197232114764 1554:0.144608378452135 1672:0.125433671801794 1735:0.127948818860562 2029:0.157551844164903 2214:0.151408661368202 2226:0.128857639799259 2554:0.118135933836805 2594:0.265874892977951 2726:0.129806865799965 2862:0.131842125946467 3089:0.126239581365884 3927:0.144608378452135 5354:0.181011686672543 7691:0.172353356817074
+-1 6:0.00566377552248348 10:0.0477711884796646 22:0.0603996152449832 33:0.0940244722757671 52:0.0461759051532329 94:0.0340007112462288 99:0.483073591940703 106:0.0396449059658625 116:0.121276182088481 140:0.0800458671119216 142:0.00587479792459766 162:0.122700131544095 171:0.0979427840888454 184:0.0667401849159319 192:0.0457398742426696 199:0.0529492434131695 284:0.0343952692848159 289:0.14783059097355 375:0.0401510142366624 415:0.0492768636578501 558:0.440119816801432 574:0.0424078659482991 594:0.0542305727778771 658:0.0523825115141954 975:0.0701782888827735 1005:0.179116167267102 1202:0.0701782888827735 1255:0.0891371204644602 1343:0.0984733673146106 2153:0.270520586891229 2284:0.0840521114239254 2468:0.0840521114239254 2718:0.550936292396616 3777:0.114657943739922
+-1 19:0.258304619070744 22:0.226882873600556 27:0.0412988459444993 35:0.076956011424132 41:0.163274181785203 59:0.0440358854606357 63:0.0306575319853148 99:0.403244381443685 100:0.0438227995823062 104:0.410806993752451 109:0.0780433568826982 133:0.102308635663386 142:0.0147119152944826 148:0.0623386322428588 166:0.105828916696908 168:0.105340158736771 242:0.0496922458134915 252:0.102360821645643 256:0.0965227773664092 271:0.0782683122265926 277:0.192669530654216 284:0.0430670377725193 286:0.0397367630313491 299:0.0587079642551256 333:0.0715441248723773 365:0.0751399192912457 403:0.0821353733823023 430:0.0551948060998459 452:0.100103438447143 457:0.0489010403792352 544:0.11503301185858 577:0.207025266578167 598:0.0749482091639211 655:0.0536985459145175 774:0.079554321415102 866:0.0793140909499398 1035:0.173231778244248 1050:0.08371589214964 1164:0.150472974666483 1169:0.159840642612249 1243:0.0944189250816233 1269:0.0724455181394425 1416:0.08560043679152 1738:0.0957614173882402 2197:0.244376710535405 2616:0.094161193889573 2652:0.113590987772161 2718:0.275935552862456 3035:0.110992677781191
+-1 6:0.0288541312365692 27:0.336065240045866 41:0.132862737057293 51:0.195968212190561 82:0.108213394635485 83:0.037381439020706 106:0.100985580648405 113:0.308921042152877 118:0.0944703958928984 125:0.154665096410808 142:0.0972698540581626 161:0.140792927658459 162:0.312548200777315 207:0.170613109838962 234:0.206989151806199 286:0.0808384865325438 331:0.112780821627028 351:0.102384117699032 399:0.136034260561183 829:0.321078182660614 1045:0.29978288330765 1290:0.435933964247927 3482:0.220050896900961
+-1 6:0.0218708855610389 12:0.0491454565812111 27:0.233503502508508 41:0.100707440944321 51:0.14854019714824 52:0.17831002187052 82:0.218729882002218 83:0.037779231367865 106:0.357210744323504 108:0.202459193187719 110:0.07035823452037 114:0.102381982358621 137:0.119364231164991 142:0.0529334321338212 161:0.14229116717582 162:0.0789685409397671 165:0.28313540584219 168:0.108289603200552 181:0.123070385901637 195:0.203052355293926 207:0.344857358082273 231:0.156310955782106 286:0.0408493622255869 296:0.0657408221042246 331:0.113980971993756 332:0.0936390633897757 351:0.051736816081424 368:0.0888632604912387 386:0.0580620145522813 456:0.0790023023955083 457:0.0502702323811203 508:0.226253417163069 509:0.0676696348107847 517:0.081290880283145 518:0.127155256772511 856:0.109429105382227 986:0.065191247934677 1047:0.082158029622181 1182:0.109142861841109 1205:0.201740549802906 1562:0.234997839908909 1575:0.11825384885035 2724:0.132119039315877 3018:0.137367175065706
+-1 27:0.237409204753649 59:0.25314326123984 83:0.105630653253417 142:0.0422862192706305 356:0.38882960152424 424:0.419884944638537 508:0.316302044674228 518:0.355525836582031 554:0.517515274410129 1045:0.211777974762019
+-1 6:0.0629815595530376 9:0.120449155972331 11:0.0353772733424865 13:0.0523234813058128 14:0.0798718855488882 27:0.114616997758265 34:0.0627414422840253 42:0.0471014086916157 51:0.053468875589207 59:0.0488852496450657 63:0.0850840790940498 72:0.14698090627064 75:0.175508886480206 79:0.106777642975411 83:0.122391901625355 86:0.0611582254824959 91:0.0629063380491228 92:0.0519714160449755 94:0.0472612705892741 113:0.168574898807551 120:0.0655907143541342 127:0.0782970088708439 132:0.0477480797060814 139:0.0644055389721315 141:0.0719146153986645 142:0.0816601783300965 145:0.0660644447509539 148:0.0692035499649085 151:0.0621740224837539 173:0.117688353202976 186:0.0446747101099314 188:0.0870134093422705 203:0.0596831651754014 218:0.0446569239909094 234:0.0564758798507536 304:0.059611991337265 305:0.112727954357004 307:0.0756032590615276 317:0.0938459339164523 330:0.0782970088708439 387:0.0555731897211204 457:0.0542861700596275 507:0.0841897856888409 608:0.0859054105627929 655:0.059611991337265 671:0.0480788228615153 684:0.0736802982667612 716:0.0753809458780322 863:0.166403462862308 867:0.138407099929817 933:0.091488962190993 1193:0.0959622791179319 1207:0.0897002519646142 1242:0.099938917041542 1592:0.264628517317633 1859:0.12390133663121 2254:0.12688555529466 2257:0.113575170407814 2410:0.10999985324387 3603:0.159375492620122 4179:0.148341025553487 4381:0.594239158595332 5098:0.183106880699161 5138:0.168134041866544
+-1 6:0.014377984750928 18:0.0769649505243956 27:0.125595729873488 41:0.132410738116783 48:0.0879593209742301 51:0.097650764233425 82:0.107845252741018 83:0.0372542673907491 106:0.20128405554435 113:0.307870092978962 114:0.100959326293423 125:0.154138925858703 142:0.0223705250956727 161:0.280627900429905 234:0.10314248742673 286:0.0805634740567026 355:0.0865341454051482 399:0.135571472099884 451:0.489904230685857 518:0.12538836192342 622:0.158683462378514 882:0.107971899944942 964:0.172233685102377 1105:0.18047495633244 1156:0.201568262495403 2137:0.202952635068959 2739:0.230297686533704 3280:0.26056633975191 4023:0.284987789463195
+-1 1:0.203733725972063 27:0.277806563221897 59:0.296217914047589 83:0.247209359735364 106:0.33391679652525 113:0.510735909585322 114:0.334969550609233 142:0.0247408040884751 471:0.497282875861394
+-1 6:0.015952648459518 8:0.0535258935210875 12:0.0358467511539264 27:0.0619337151407124 41:0.195882987686527 51:0.108345386408798 59:0.0660383098780344 62:0.0608801187063255 72:0.0330923632552033 85:0.032587455198904 91:0.0849791762452353 104:0.0770082152025168 113:0.0569312905525637 115:0.0715972304954901 138:0.0891807818407664 142:0.0179259343578488 161:0.155681005406614 166:0.0396765201935955 171:0.0919555514110906 190:0.0455924129569215 246:0.0549642259429994 266:0.0540719592543411 286:0.0297955706256891 293:0.050329817261166 402:0.0405308356170075 411:0.0796775320792451 413:0.0459777757055453 574:0.039815477308732 584:0.0748016968573134 608:0.0580241296110279 626:0.0501870064622316 627:0.0900824860923403 631:0.0356880626032367 777:0.220024321452483 814:0.0590307622928266 851:0.0603953436555737 856:0.0798177122060386 913:0.0554997130816282 936:0.062221522325032 962:0.072014127051779 1002:0.158514666494974 1015:0.0664549852349231 1035:0.0649466550561526 1053:0.0796089258460847 1056:0.0522167160597234 1208:0.0900824860923403 1260:0.0709934041836557 1309:0.0627721683084584 1326:0.103451522296439 1332:0.130685596977539 1363:0.0602058554493223 1383:0.154618117156906 1394:0.0689713784554568 1437:0.0726626954618621 1448:0.0667468026985361 1489:0.0623300015370536 1536:0.0874223440557832 1611:0.107648915010444 1809:0.0832249513417791 1886:0.36647894707915 2008:0.0942798788063445 2086:0.079257333247487 2445:0.183239473539575 2461:0.0908308750979696 2494:0.326025805169829 2544:0.215297830020887 2704:0.0933382368191092 3055:0.0924537001368861 3667:0.0963677754672179 4055:0.0916197367697874 4824:0.353286601463321 4979:0.105399796965473 5004:0.0988051591798485 5064:0.117762200487774 5065:0.117762200487774 5307:0.110309057047001 5945:0.110309057047001 6303:0.11356480777377
+-1 6:0.0249234111526116 27:0.290283983360719 41:0.114763206536728 51:0.338543987703048 82:0.0934717772164916 83:0.0645781338242858 106:0.436142943682801 113:0.266837565967378 114:0.0875035981220958 118:0.081600949939696 125:0.133595489574797 142:0.0775560420069689 161:0.243226177537058 162:0.202477954953364 207:0.14737094836364 234:0.268187371106394 351:0.0884366068757706 399:0.235005363981355 777:0.343752113703904 829:0.0924461907259666 3026:0.234809324945738 3482:0.190073959704347
+-1 6:0.0351846398299852 11:0.059290527079158 13:0.0584610116821789 18:0.0941711968208446 20:0.0248093299009967 25:0.0330081255373067 26:0.0190361026327885 27:0.153673849163652 34:0.0701009966994622 37:0.0624282268062086 41:0.0202515521601558 42:0.0263131956728357 47:0.0208164597857498 48:0.0269058658235171 51:0.149351901022416 65:0.031464717711941 72:0.027370287883828 77:0.0331640893240758 78:0.033788237483507 79:0.0894769739741237 83:0.12535273573438 94:0.0528050050012102 101:0.0854914441832473 111:0.0275045764019063 113:0.094174344697278 118:0.0287992283222436 135:0.0801406128846417 139:0.215880874453313 141:0.0803501805693818 142:0.0364955581714646 144:0.0784425184764679 145:0.0738137864678571 148:0.0386605539423207 154:0.0635859771828202 157:0.0445698205067281 159:0.0264586567667793 161:0.0429206168924067 168:0.0326644068261706 173:0.0328732913968552 186:0.0748725625031522 188:0.0486100295040916 200:0.0424880426209376 214:0.0376803635072232 215:0.0280186995875323 218:0.0748427538641059 234:0.0315502427334613 236:0.121319612285502 239:0.0372874324683885 242:0.0308176435810015 243:0.0414699408478247 286:0.0246435511238326 305:0.188926369923349 309:0.032366887164233 330:0.0437406135452379 331:0.0343811476781496 342:0.0410855921176263 348:0.0436935665849634 353:0.0986744182140954 357:0.0814262158326716 364:0.0407498431959231 368:0.160827943226095 369:0.0786569857532983 387:0.0620919100262818 400:0.0775074799308339 404:0.110801040645052 413:0.0380276545260327 414:0.0649923007794946 423:0.0333220952478582 439:0.0474022693629027 441:0.0310130734395938 442:0.0374263008595899 449:0.0502719365602152 456:0.0476604081902827 499:0.0327589063695801 502:0.0303580235216908 505:0.0949091346513511 507:0.0235163062636693 510:0.0397613058609421 513:0.0658233239078126 517:0.0490410585383443 521:0.0867385512606869 527:0.0419479253110695 528:0.0460164431494282 550:0.0358323782220944 555:0.0506838376394381 557:0.041392085545352 576:0.0430534717758379 613:0.0813529682497403 622:0.048539664698165 638:0.0537165820485507 655:0.0333022309964173 666:0.114957984045743 688:0.0488236196821767 695:0.0434150727632052 705:0.201087746240861 709:0.0383550305342913 714:0.0455147183701157 716:0.0421115553438888 747:0.0484697078064482 754:0.0536093144086983 796:0.0386605539423207 811:0.0499522481953857 813:0.0614514033187374 827:0.037566785915633 862:0.042319263225964 865:0.0652688135251132 876:0.0848912519030364 883:0.0512851913058808 886:0.0378817334006939 904:0.0536093144086983 908:0.0935601878934498 910:0.0704457308754989 946:0.125040048200025 951:0.0573327171406977 969:0.0491882253625727 976:0.128909927688315 981:0.104399671476436 986:0.0786569857532983 993:0.0483309990376041 1106:0.0563556205474389 1146:0.050353199695756 1150:0.0479910461339648 1199:0.0636925505518635 1200:0.0627455919763764 1218:0.0535029918704656 1225:0.0392307795490445 1269:0.0449285420796208 1306:0.0629754566411162 1323:0.354422992567432 1366:0.0476604081902827 1472:0.0447222544917892 1481:0.0771989111991343 1629:0.064720194960913 1649:0.0999044963907715 1707:0.0502719365602152 1718:0.0625200241000123 1728:0.0713400310545903 1836:0.0469019892258322 1970:0.181409287116558 2084:0.0667605286503137 2150:0.131687132872691 2158:0.0806705232462344 2186:0.0692174651558409 2253:0.0652688135251132 2335:0.0649913868236657 2406:0.0713400310545903 2459:0.0634487537747136 2708:0.0684629988707658 2822:0.0779777317407611 2912:0.143626656376375 3073:0.0779777317407611 3079:0.064720194960913 3349:0.0670823485227043 3751:0.0708845985134864 3792:0.0871748797024471 3820:0.0704457308754989 3923:0.0855634856126084 4192:0.0912352685206092 4262:0.0855634856126084 4548:0.0871748797024471 4659:0.163441071301228 4732:0.076467321755082
+-1 6:0.0192225317271122 12:0.25916648754049 27:0.0279857011037553 29:0.104718731596357 31:0.0366329991479141 39:0.193063173167598 42:0.230012296778089 57:0.0717554760787397 86:0.0746641358552679 137:0.0786827783303896 140:0.135835558283958 142:0.0124617060924797 165:0.186637824061149 243:0.0906255977063515 286:0.0538543461732838 317:0.0572852261827637 409:0.0490850729450308 414:0.0710148843238779 439:0.207179412645623 527:0.091670152552351 537:0.107492613504215 674:0.127269828832852 720:0.0956909875417843 782:0.109509256458963 884:0.0992271970823488 922:0.136627022774649 1088:0.246900820986445 1315:0.586388869251039 1335:0.10331210836877 1595:0.120377231718141 1948:0.144541249678514 2241:0.134291731355261 2305:0.1539473251211 2359:0.172226699055151 2629:0.159134882866478 2884:0.16030714528469 5990:0.186984641572938
+-1 6:0.0157617744695681 11:0.0354140867726825 12:0.265633826534527 29:0.0286218460293138 39:0.158304755952352 58:0.0528656061121167 83:0.0204198770138517 98:0.0511208118104172 108:0.145907038533466 140:0.0556901001651062 142:0.0224799172238627 225:0.075093494657123 284:0.0478594601017675 297:0.0769882014433781 350:0.230062665052339 411:0.0590431407414146 451:0.0895090669232968 537:0.088140020016625 572:0.0854023356388137 727:0.084375158541362 893:0.248060535600375 922:0.112029172327244 977:0.108355323384781 1059:0.0722423612925224 1210:0.126231188128547 1225:0.140594691889479 1258:0.134616120809099 1315:0.12020436797568 1331:0.178178351402427 1335:0.0847121583775248 1487:0.118518549550316 1745:0.128681775715851 2056:0.102734075058411 2397:0.289105837068273 2719:0.13578525518109 2780:0.148495388551917 3462:0.141219607629347 3701:0.523589272607213 5264:0.336618002775966
+-1 6:0.0121825528522481 9:0.0465970744152785 12:0.0410626117934861 27:0.0177363360687212 42:0.0364433910416415 47:0.0288304922559385 75:0.0123450061530745 83:0.0157828822787661 84:0.0357494157054781 92:0.0402114223444028 98:0.0395121750366792 110:0.235146283832841 141:0.111283824555732 142:0.00631822676663093 145:0.0511155071766782 172:0.047768366354952 180:0.0469399244382672 183:0.0535872113877111 186:0.0691316024481457 200:0.11769063484959 218:0.0345520397144145 239:0.0516425484490701 287:0.169620477928648 293:0.0576530279957041 296:0.0549285741722552 321:0.242632626834444 368:0.0742481161452919 370:0.216104572082764 372:0.0601292406092725 387:0.0429981934871225 415:0.0529962737331044 437:0.0547894886050746 442:0.0518348791392228 465:0.0517962355323289 480:0.0896044912770099 493:0.054379044587438 506:0.0340773892849006 555:0.210589120859837 582:0.0513769504244963 586:0.0447768646882425 599:0.0571138408323406 655:0.0461231027143697 695:0.120258481218545 720:0.0606455242088307 739:0.062225373470269 780:0.123597252784905 782:0.0694030486494156 791:0.0810989144222382 800:0.0537166057310639 884:0.125773294589615 1128:0.366420290217 1177:0.16450403321172 1474:0.093836829793786 1480:0.0885578681006683 1483:0.0853949998461211 1818:0.0988048992973229 1891:0.17380345382336 1943:0.0731048772564597 2112:0.0981741318909271 2135:0.0851092945549866 2313:0.223454988953041 2320:0.100142681288594 2333:0.281510489381358 2389:0.0975663066330011 2611:0.0738101866581951 2940:0.099460408902961 3103:0.0878755957150349 3494:0.104950813183724 4095:0.109151119820927 4239:0.120735933008853 4252:0.11172749447652 4562:0.130088988957243 5427:0.269794241704745 5432:0.134897120852373 6140:0.120735933008853
+-1 55:0.295944856405105 75:0.119435914867802 111:0.184273880195375 142:0.0458458577211925 176:0.152735463825354 195:0.410350403695518 487:0.449435194865988 583:0.463739949860524 972:0.503319667220258
+-1 6:0.0320339302210015 12:0.143965101221717 15:0.0182918563209413 29:0.019390164905386 31:0.0406987298429977 63:0.0115402136623677 72:0.0332257824791699 75:0.0108203666473306 92:0.0352452099077115 96:0.0330791425040103 98:0.0346323214123223 142:0.00276895488459916 158:0.0383208338384443 160:0.0967833177949367 169:0.0389171049756091 171:0.0461631453362071 179:0.0582077361513349 209:0.0335385889092193 259:0.0649492171006079 260:0.134629762304882 276:0.0414753851010784 318:0.0644440218240223 351:0.0378890363534597 359:0.059444199694553 387:0.0376878077608456 408:0.0314382601210961 414:0.0394482523838593 508:0.0414237123448728 530:0.0438896919232906 531:0.0600753402469157 565:0.0567880481354889 665:0.0660150842479265 684:0.0499674200954518 727:0.0571608217149761 733:0.18078232732826 769:0.155241494491524 779:0.0727353582412257 890:0.11213961140212 916:0.0646944417885671 1049:0.0845059296731511 1059:0.048941333035676 1148:0.0967563035913373 1149:0.0512210777139652 1225:0.0476236623201537 1273:0.0716810032447513 1315:0.0814336893227995 1527:0.138845634760118 1649:0.0606388409186607 1816:0.0586707479234526 1880:0.0745980812614874 1936:0.0718858906572682 2066:0.0714789419557496 2277:0.715002270900026 2359:0.0956706802560003 2401:0.0723044680247637 2415:0.0779291630834827 2436:0.103868610121703 2546:0.0897309362549894 2780:0.100599733111627 2858:0.321166456946787 2862:0.0904456736741619 2928:0.0928264477956126 4447:0.0897309362549894 4559:0.103868610121703 4826:0.118236984995623 6369:0.114022669559168 8129:0.105824739693465
+-1 6:0.0401466486695954 12:0.135318620745804 15:0.0137546043991212 27:0.035069223740183 29:0.0145804801233855 30:0.0723945481522847 31:0.0153017528323865 37:0.037990579234048 39:0.322573092628157 42:0.0240192681160004 55:0.241929819471118 57:0.0599451087743995 59:0.0249289342030116 74:0.0329115415733562 75:0.0569548011165844 82:0.0301128812380882 83:0.0520112522821751 85:0.0492060155989714 110:0.154981231889439 118:0.0262885738093755 132:0.024349036692159 140:0.113478131032507 142:0.0249854656859994 166:0.0299551385593408 168:0.208717560806383 169:0.0585276173075723 176:0.04161953642193 186:0.0455635561628562 191:0.0518161021295667 195:0.167727191294825 205:0.0317668849360726 214:0.0687909416280198 215:0.051152179767307 218:0.0227727080859991 228:0.0303628386784634 275:0.0269970037221284 283:0.0300952423090571 284:0.0243804646987165 286:0.0224951795720032 299:0.0332348711238485 317:0.0239282721148951 321:0.213220484375045 339:0.0312265064057789 370:0.474770459936837 396:0.0407768876807418 399:0.0378546809883254 400:0.0353752726312926 402:0.0306001330486968 408:0.14184044201155 411:0.0601552631595293 422:0.0366088544991235 433:0.0324655086249684 496:0.0336650324150872 502:0.0277114766106536 507:0.0214662054836679 518:0.0700226436541559 521:0.0395884358674585 528:0.0420048290406565 534:0.0306001330486968 555:0.277591980969365 583:0.126366472135073 641:0.0317668849360726 643:0.032663991631368 644:0.0765079376866447 654:0.0839059825127976 739:0.0410117688360246 776:0.0500639235819371 862:0.0386299612762497 876:0.0387453079723597 884:0.0414476040543096 908:0.0427019064110879 932:0.0545303280590172 944:0.0439303699939068 972:0.20572757659315 976:0.0588359193322217 1045:0.0208553811491251 1138:0.0395884358674585 1202:0.0994892222273203 1225:0.0358107249345232 1229:0.0453132321313557 1423:0.0585990175387922 1576:0.0890038157117197 1691:0.0562825066066467 1883:0.0576992924672482 1886:0.069171436817494 2331:0.0768068057028051 2365:0.0555478671822255 3041:0.0719397931203728 3169:0.0674733886432927 3513:0.0655527973683222 3528:0.0756462060126437 3818:0.0781042457716542 3874:0.066002472409263 4126:0.066002472409263 4187:0.0711798015355637 4585:0.124989085046783 5170:0.0889085790651963 5171:0.0889085790651963 5172:0.177817158130393 5173:0.0889085790651963 7220:0.0889085790651963 8332:0.0933749835422763
+-1 6:0.0169198033573622 12:0.0380200179339411 21:0.0682368175819263 47:0.0266942550592707 59:0.0350209941635816 69:0.171658702243584 72:0.0350986408513485 81:0.0343391679185327 98:0.0365844630404604 118:0.0369310610092509 142:0.00146251714446548 144:0.0670611819446149 179:0.0307443839317641 259:0.137220500135379 261:0.0775441778645592 331:0.0440891071198982 336:0.0515640948135815 339:0.0438680326114267 355:0.0339440412852479 367:0.0481380525689264 374:0.0727929800560777 423:0.0427310176086984 454:0.056273756660456 480:0.0829651163556532 502:0.0389300020908509 523:0.132217715691191 532:0.0652115077933317 534:0.0429880825299689 537:0.0630771537166115 597:0.100866797788995 650:0.0955438812867046 653:0.0576146940478129 676:0.0563965743877138 700:0.069736197612264 745:0.306424058909397 747:0.0621557534830868 757:0.107170871839363 773:0.353082389974885 815:0.172047825602489 830:0.196117707971346 917:0.0686102500676895 936:0.0659938019073654 945:0.267807984109937 991:0.0599114865630401 1002:0.0840624361891648 1035:0.0688841501808999 1075:0.157605995527006 1179:0.0703314614772902 1185:0.0887619070890754 1237:0.138325971391944 1284:0.0790675333061368 1310:0.104795380419636 1382:0.0738988041226468 1489:0.132217715691191 1607:0.0729718832325027 1646:0.0933810718803507 1716:0.0908997770018678 1729:0.102210226410332 1759:0.0856112229469105 1773:0.111789828697548 1806:0.0775441778645592 2063:0.0947888558183268 2173:0.0793366696968515 2363:0.0963376425760725 2549:0.0914838067811698 2687:0.107900749881089 2706:0.0877944075404153 2894:0.120449856381207 3169:0.189577711636654 3220:0.114175303131148 3552:0.0989970171228831 4648:0.103448883501986 4978:0.0971743302519269 5158:0.240899712762414 5549:0.103448883501986 6360:0.116996720545029 7452:0.240899712762414
+-1 6:0.0224599618444242 12:0.0275286291588687 27:0.00594527475174321 31:0.00778230440278299 33:0.0112987382194551 57:0.0152437138754762 58:0.013696652313689 69:0.0414301817195946 72:0.0635334700299111 79:0.0138466029744394 91:0.0326300174182589 96:0.0126506137829035 98:0.0397338101378734 100:0.0252344662858154 110:0.0197054405546459 111:0.0255380752724697 118:0.0133700815808878 132:0.0743019250912943 142:0.00158841687733145 144:0.0364170476967478 162:0.0110584773749914 172:0.0160121042656017 181:0.0172343449914162 185:0.0118899807887512 199:0.0190884232295064 215:0.0130077200362468 218:0.0231639013310767 224:0.0194180766689471 240:0.0183811037458831 243:0.0770099095831348 252:0.014735598406681 258:0.0387246625174235 260:0.0257435501297635 261:0.11229268326868 274:0.0220661693303361 275:0.0137303812988006 278:0.0352543903953776 280:0.0427793723243541 291:0.032868655838493 293:0.019325473444816 299:0.0169028925448087 322:0.0176954343788085 331:0.0319229907244681 341:0.0170600350530099 348:0.0202847987197528 351:0.0434702530867508 374:0.052706207472453 382:0.0358677379593036 394:0.0190216023258472 398:0.0317629203591473 408:0.0120230833296307 416:0.0198649493363307 431:0.0227673792552396 442:0.0173752119384769 448:0.0184908039572196 458:0.0214969117798397 478:0.0160121042656017 480:0.0150178514200428 511:0.0264833972250828 514:0.021689641215005 515:0.0442554409921069 523:0.0957330548822871 541:0.0421094645421237 550:0.0166352311494611 570:0.0236878653307586 576:0.0199876338192995 594:0.0195503478130001 641:0.0161562907994078 650:0.103768707352159 651:0.132089358559884 663:0.0191092780980951 667:0.0196662629998503 676:0.0816685770557705 700:0.0252464626181016 745:0.0832005882177168 757:0.0581982994976057 773:0.223695052403828 779:0.0278165289610914 784:0.0200499984800522 800:0.0180059725168066 812:0.0228701778734582 815:0.31143073083433 819:0.0410142881419799 827:0.0174404323200501 830:0.0355000598869447 834:0.0205756056256388 844:0.0223740691977392 846:0.0887080640610957 880:0.0240175114360624 883:0.0238092209964342 913:0.0213105926013662 936:0.0477832204773866 945:0.258544036570629 947:0.0248388379759883 971:0.0254619648598477 1011:0.0245049811470704 1021:0.0218602848892439 1056:0.0200499984800522 1058:0.0229048675663668 1073:0.0546720634117488 1179:0.0254619648598477 1184:0.0268935095970349 1237:0.0250389438012975 1260:0.0272598078429134 1308:0.11925132082693 1310:0.341449845333111 1319:0.0215513041246162 1322:0.0229397733958277 1350:0.028922209041817 1383:0.0296848715116318 1421:0.0286246682822844 1449:0.0261631747847512 1645:0.0233388160793237 1676:0.0277335294059056 1679:0.117824686784177 1696:0.075877743407358 1729:0.0370029733281922 1766:0.0716794025964186 1773:0.0404710584736597 1784:0.0298028204471903 1791:0.0286246682822844 1813:0.075877743407358 1831:0.0276517415664172 1836:0.0217743133683536 1898:0.0293452301003673 1911:0.0276517415664172 1952:0.0858740048468532 2018:0.0323180045713286 2094:0.0362012698118482 2102:0.0285288989843166 2170:0.0316167946464252 2179:0.461674012294873 2187:0.0855866969529499 2198:0.031143073083433 2385:0.0321343039334519 2398:0.0296848715116318 2401:0.0276517415664172 2404:0.0319564360576897 2500:0.032507933522804 2527:0.0413346672331906 2575:0.028434739330809 2657:0.0329082729005552 2687:0.117189308061398 2815:0.0308481435416148 2824:0.0298028204471903 2878:0.0794459330774577 2893:0.348849854233988 2894:0.0872124635584969 2961:0.0348769330030854 3116:0.0370029733281922 3128:0.0390631026871327 3137:0.0404710584736597 3182:0.0370029733281922 3483:0.0397229665387289 3491:0.0666788738731274 3562:0.0423560995984257 3599:0.0452179324737101 3786:0.113816615111037 4071:0.031143073083433 4109:0.0351798374466131 4775:0.0949789940395361 4776:0.142468491059304 5263:0.0452179324737101 5554:0.0404710584736597 5983:0.047489497019768 6833:0.0436062317792484
+-1 6:0.00837312958260043 12:0.0564450774343949 33:0.0463341745081151 54:0.0626943203340369 67:0.0947271944353304 98:0.0543138315400707 132:0.0507832275398232 179:0.0456435642591319 215:0.0533424138524051 218:0.0474955798477922 224:0.0796301795400246 271:0.0924105301353331 318:0.40426995388986 341:0.0699602580312581 394:0.156008613434761 443:0.130340867816941 448:0.0758275942595007 453:0.0812152453505395 531:0.0942160899650939 542:0.23805308945096 591:0.0880444034478595 603:0.0896452537603958 745:0.113730415402184 786:0.132530556463694 820:0.124259730607244 830:0.291159231748189 874:0.114416267580986 1211:0.145579615874095 1229:0.0945069083013246 1319:0.0883781769957302 1339:0.101067488472465 1498:0.137657132679498 1517:0.155580762029906 1530:0.113730415402184 1574:0.128341838702489 1759:0.127099679881468 1860:0.153581732915453 2218:0.124259730607244 2293:0.1248003282972 2622:0.455228413175041 2623:0.15174280439168 3174:0.173695050912614 4182:0.173695050912614 4859:0.157770450676659
+-1 6:0.0256220913046271 12:0.201511402122231 26:0.0369664915977258 27:0.0124342308128099 29:0.124072587332256 33:0.0236307193158783 41:0.0196633955807697 52:0.0348155058174325 63:0.0369214025368938 65:0.0305509022871059 72:0.106301540457355 75:0.0259637597018009 83:0.0331942291325338 91:0.10236595908852 92:0.0281906085227746 108:0.0790613914380892 120:0.0355780598605662 132:0.0776992927156454 142:0.00996627215953856 154:0.030869639345362 165:0.0829244110831126 171:0.258462643074729 178:0.0689272315194571 186:0.12116345478134 199:0.0598836563992333 203:0.0323736559997483 209:0.0268255809178542 218:0.0484460866322974 227:0.151769861512812 252:0.0308187324227231 256:0.0290610176875233 259:0.207796515661361 260:0.0538412870087736 276:0.0995212978822406 296:0.0385082108745594 306:0.0335097619798071 314:0.0340771792020686 317:0.0254522022471298 337:0.0326475229173844 345:0.0626760742560278 355:0.0257011652762565 367:0.0364483425751898 369:0.0381862934215255 376:0.108922763740047 387:0.030144301522095 409:0.0218088203043169 414:0.126209518147051 422:0.0389403783220694 426:0.0384431159390069 453:0.0414202840003691 475:0.0346031061960086 484:0.377586164960696 499:0.0636150088293771 508:0.0331324359063849 515:0.0308526457843515 530:0.0702096611956314 548:0.0483493361403367 568:0.0600707748146866 574:0.0639489923902243 580:0.115918487442015 607:0.0418898828809797 647:0.154294677883424 659:0.06258302776937 663:0.0399660544650552 667:0.0411309592199859 671:0.026079167678477 681:0.0467281823153514 709:0.0372411029013427 713:0.042701388063161 720:0.042516134271176 742:0.0438274830159941 755:0.0445699884745361 771:0.0453043094862158 784:0.0838670437642457 819:0.0428896179466675 851:0.0485015078669952 854:0.0513481223965082 906:0.0999361034106957 908:0.0908429620905608 909:0.0375979952100811 913:0.0445699884745361 930:0.0373884892253361 1000:0.0518467958782974 1031:0.0524746456122213 1082:0.234127612906112 1169:0.192498884465635 1184:0.056246367015755 1244:0.060278161790788 1253:0.0522616023201699 1294:0.0485015078669952 1335:0.0918044966215215 1363:0.0483493361403367 1429:0.0688259294957667 1511:0.0515450523810518 1546:0.0642206265911078 1598:0.178720034437152 1599:0.051745348852693 1652:0.0511544476025018 1789:0.0648216331099399 1816:0.0469273439079891 2076:0.0532523661622486 2257:0.0616060405993815 2592:0.0578321694741167 2864:0.0631038716612985 2866:0.058531903226528 2941:0.0613740120615948 3572:0.0723422724904541 3957:0.445479097537166 5687:0.0912001502808729
+-1 55:0.293341104236556 75:0.177577658782821 111:0.182652620339759 142:0.0454425013226034 176:0.151391682081754 195:0.40674010018673 487:0.445481019492003 583:0.459659919834797 972:0.498891410919686
+-1 6:0.0322925489390821 12:0.163268292408391 18:0.0432152779832838 27:0.0940281577179439 29:0.029320060549433 63:0.0174500714658713 83:0.041836017833715 142:0.0125608923809428 148:0.0709655029141698 165:0.156769439971264 186:0.0458121479621153 209:0.0507140327253073 216:0.210717505255821 224:0.076777190788009 227:0.401691446901516 240:0.0726771004797137 276:0.0627153409168214 283:0.0605188799877822 287:0.0749360944159664 319:0.073236347454034 342:0.0754169149129057 355:0.0971766271075309 387:0.11397621535611 406:0.0756964292519757 504:0.0857587365668896 508:0.0626372060299808 513:0.0604128085123839 625:0.0897531228261594 658:0.0746659542697793 688:0.0896208763590169 767:0.0772247053509174 826:0.105240217493925 864:0.12032898420459 882:0.0606254618331101 900:0.117837459935149 1039:0.117837459935149 1159:0.0820923902487362 1253:0.0988010890969404 1270:0.280727583621544 1301:0.212111383635673 1308:0.0943016300424128 1384:0.131820898335249 1488:0.112428199961742 1527:0.104974930281803 1544:0.105780517876047 1730:0.113956476060684 1805:0.116914358975371 2037:0.132725155212689 3257:0.140363791810772 3592:0.13676379966341 4200:0.163433263058262 4321:0.133667902486351 6080:0.160018637829043 6409:0.178787316981049 6827:0.375537725519859 7720:0.167471907508982
+-1 6:0.0133445858239853 12:0.134938108756256 18:0.035716597475362 39:0.0670137555333609 41:0.0307234721942273 51:0.0453161213711324 57:0.049813787406739 75:0.0540901389406013 91:0.0533145913138102 110:0.0643939288393789 111:0.0834539576636053 127:0.132717088881667 140:0.0471495974412303 142:0.0138417818277141 149:0.0742891882846789 161:0.0651145338996473 176:0.0345854195893036 191:0.344469311808864 214:0.0571645862661444 215:0.0425069511160538 219:0.0557893111247673 222:0.425471466682808 341:0.0557492069337075 409:0.0340756346713516 433:0.0539570276127846 506:0.0373278615315669 550:0.0543610221702179 729:0.0718170039706994 756:0.0885920477631731 820:0.198037618216183 863:0.0705154114103649 1021:0.0714355827601448 1068:0.0786242429615906 1121:0.0876529929089878 1153:0.279682337367807 1211:0.232015957604626 1237:0.163645766851309 1303:0.409086868769452 1642:0.103318148048771 1929:0.0923194470169972 2746:0.259615396417093 3047:0.132252331643139 3102:0.255302757398896 3199:0.118299410038295 3488:0.132252331643139
+-1 6:0.0188132048414538 12:0.101459106164717 69:0.0381736153774088 83:0.00974924060334974 100:0.0465018868016845 114:0.0264205105112626 142:0.00878136842526435 162:0.0203784798642602 202:0.0467206471408269 218:0.0640293976529597 254:0.0363130393038887 262:0.0352144355626427 291:0.0302850572667807 295:0.0319474646799777 307:0.0361334869317295 318:0.136250371717279 331:0.0294137249471943 339:0.0585324734156255 347:0.0309096832904459 396:0.0382170849202533 443:0.117142792131083 448:0.0340747160154563 461:0.123517814339827 485:0.052077203329732 495:0.041466755764986 533:0.0471255618294304 542:0.160461204767033 550:0.0306552802452942 576:0.0368330629533087 609:0.0266452595484102 611:0.0486826575199776 619:0.165427337889446 651:0.0486826575199776 676:0.0376245616064095 769:0.0547030604539631 795:0.0891539561905574 816:0.0571149004516099 846:0.381431308360858 859:0.23555633082286 861:0.0502341711605521 927:0.0483286570851604 947:0.04577282589464 977:0.0517330304004968 1011:0.0903151940264355 1018:0.0408303413527124 1045:0.0195461673941532 1073:0.100749271856673 1129:0.0438754553820237 1144:0.0514153437603236 1242:0.0477643635700008 1245:0.0367950371233101 1292:0.0451575970132177 1334:0.0582631940389645 1389:0.0479863936579305 1435:0.0565853484201817 1471:0.043578341318249 1603:0.054490186908694 1631:0.202271139795095 1665:0.04055354189934 1882:0.113693458999023 1950:0.0637414007253998 2149:0.0576730905074294 2364:0.122065503502526 2618:0.228513652108852 2727:0.39026752667918 2737:0.0648291428126476 2776:0.312214021343344 2905:0.0745797655702497 3063:0.0667114307788662 3109:0.207045495193198 3181:0.0681888040564812 3815:0.223739296710749 4040:0.0708974530306179 4049:0.078053505335836 4059:0.0761712173696175 4247:0.0833272696748356 4350:0.0833272696748356 4351:0.0833272696748356 4518:0.152342434739235 4599:0.0803572396213692 5260:0.0803572396213692 5301:0.0803572396213692 5349:0.0833272696748356
+-1 6:0.0322246769075843 11:0.0362017457625163 12:0.271541895626266 27:0.16420342862021 41:0.0741914344886315 57:0.0601454861881155 58:0.0540414113834625 77:0.0607482167540526 82:0.120854156051729 83:0.0417480874716519 98:0.10451562081571 108:0.0745761079179468 110:0.0777496424028862 111:0.0503814216836773 118:0.0527528962840851 142:0.0355143942027033 203:0.0610740898843473 286:0.0902814951817994 296:0.0726471527422336 369:0.0720398436554228 399:0.075962434269906 517:0.0898308053878257 531:0.181299180233046 576:0.078863062087895 586:0.059220756725343 598:0.0851407596937232 641:0.0637461430373774 667:0.0775950637286804 688:0.268297537332087 861:0.322668296485999 972:0.412830516767103 1049:0.127513682915514 1067:0.0856892905781541 1405:0.114115256863548 1687:0.123483526831689 1755:0.124746994154641 1867:0.134369552255445 1979:0.11904776927025 2491:0.124106234498245 2862:0.272952702812082 3335:0.354195534472612 4447:0.135397861399615 6318:0.167119917376432 7262:0.178411544277802
+-1 6:0.0229873420323602 11:0.154946207417021 12:0.154962644281031 13:0.0763892015146209 17:0.031315154132604 26:0.0124369441977376 27:0.00836670336171254 29:0.0104356930995253 34:0.0228997027641389 40:0.0359073326332854 41:0.0396931182278252 46:0.0240602790460198 50:0.0818232170042792 53:0.022129210792153 58:0.0192751103594581 59:0.017842396439582 63:0.0310544362750537 65:0.0205569882622372 68:0.035279656952284 72:0.0894097782654469 74:0.0235557913309692 75:0.0174704072049202 77:0.021667246507795 78:0.110375120429976 79:0.0194861338612774 83:0.0148904140863843 85:0.0176091209993052 91:0.0688796618724909 98:0.0372778962269398 100:0.0177560586113071 108:0.053198562861264 111:0.0179696909862063 113:0.0307636781659592 118:0.0188155318602199 132:0.0174273461530876 135:0.10471726798762 139:0.023507073556731 140:0.0203049374736227 142:0.0126670242334915 145:0.0241125497438543 148:0.101033107734161 154:0.041542917961538 158:0.0206240876860634 159:0.0172863555163194 162:0.0622497722593119 166:0.0428796075456606 173:0.021477258164938 203:0.196051289786641 208:0.0215274757532561 209:0.0180503065629182 214:0.0246178846232221 218:0.0325982396491048 219:0.0240256234530288 222:0.0366457912544144 231:0.0308044231388714 240:0.0258674744102575 242:0.0402684647079502 243:0.0270937465592096 254:0.0277311953807083 258:0.0544966847782286 264:0.0236541394009703 275:0.0193225766961546 277:0.0780655620251741 284:0.017449840133285 286:0.0161004842258671 287:0.0266715030169745 291:0.0231278035736077 304:0.0435149984797006 306:0.0450958716188223 314:0.0229297375993617 317:0.017126192147299 319:0.0260665234463604 322:0.0249025413435655 334:0.588965687277707 342:0.0268426382413906 347:0.047209624031188 357:0.053198562861264 359:0.0319925811660807 375:0.0203699169736783 377:0.022115629161385 387:0.0202833961085523 391:0.0297363395997802 394:0.0267688392497187 404:0.024130050605005 409:0.014674645573342 411:0.0430549515065123 414:0.0212308589018871 422:0.0262020706482279 430:0.134182510677975 441:0.0202619134393722 459:0.0262477759049872 461:0.031442301976717 465:0.0244336674876525 483:0.0557978985127369 505:0.0206691400070041 506:0.0160752145416989 507:0.0307280323477977 508:0.0445880838232619 514:0.0305235336709564 521:0.0283346476595388 530:0.0236212202103012 534:0.0438028918936168 539:0.0266957246480413 548:0.0650662770076906 564:0.0356037311902221 570:0.0333356069770437 575:0.0299901037720179 582:0.0242358795055334 602:0.0729524668706555 626:0.027119302933973 654:0.0300270318709636 662:0.0299533478326668 666:0.0375530133515537 684:0.0806766724732208 700:0.0355289994959924 706:0.0585041477413979 709:0.0250586679248023 712:0.0263865032620754 714:0.0594726791995605 722:0.0369071677228712 724:0.0336223343828122 764:0.0265753538410642 787:0.0330047555783034 804:0.0541365455153823 811:0.0326355313028981 827:0.02454368045465 850:0.0526799781161332 851:0.0326355313028981 857:0.0463113596935951 882:0.0215780152513893 909:0.0505976248396102 912:0.0273267921379807 919:0.044971852800214 936:0.0336223343828122 966:0.0287014177295668 1003:0.0607348141794393 1009:0.0256096595681669 1018:0.0623618510165205 1020:0.0367319575187573 1021:0.0615273563319185 1030:0.0430178790977079 1054:0.0375530133515537 1056:0.0282160870086278 1073:0.0384696213244576 1076:0.0393847499588243 1093:0.0364762334353277 1143:0.0341039579755715 1183:0.0409938652421466 1218:0.0349553549453371 1236:0.031666936394382 1253:0.0703312219956835 1296:0.029252073870699 1324:0.0685848646446398 1394:0.0372697205503749 1415:0.0424611206848229 1438:0.0795145961369482 1439:0.03385946909167 1467:0.0706179257017077 1518:0.0368190759157879 1538:0.0365605565354984 1564:0.0460246322878266 1568:0.0426423731434497 1613:0.0329509387501551 1658:0.0419410991814819 1792:0.0339198842126701 1851:0.0389139154675928 1934:0.0490818279706211 1939:0.0393847499588243 1989:0.046608909523453 2013:0.0452221638146282 2056:0.0374574469122349 2071:0.102978996067962 2076:0.0716645456717476 2094:0.050945548941072 2120:0.0424611206848229 2151:0.131481654830915 2275:0.0452221638146282 2290:0.0495081012265709 2350:0.100873437092736 2520:0.106781704354262 2587:0.0469181309094189 2626:0.044971852800214 2662:0.0452221638146282 2703:0.0444938801150037 2787:0.0541422904740477 2896:0.048292756501005 3095:0.0454806831949178 3139:0.0944799540267849 3160:0.0958519728619541 3376:0.0419410991814819 3418:0.213563408708525 3577:0.308936988203885 3698:0.043616962224467 3896:0.050945548941072 3966:0.0636345742518549 3967:0.0636345742518549 4008:0.0549729669727251 4371:0.0541422904740477 4492:0.0444938801150037 5905:0.0636345742518549 6169:0.0613664500386765 7259:0.0581697085057008 7719:0.0636345742518549
+-1 6:0.0424792499365425 12:0.286361811120865 30:0.0510672116173088 34:0.20312302918453 42:0.10165934416988 51:0.115402298506355 52:0.0692653798959238 55:0.0853288099918818 79:0.115229517103785 85:0.0520649843580376 86:0.0659991417013699 98:0.0551098798183267 108:0.0786462408700318 110:0.0819929770363454 111:0.0531310836101651 118:0.0556319859480297 145:0.0712937076924911 165:0.0824889758379091 179:0.0463125371470995 199:0.0397128052828018 218:0.0481916967206133 227:0.0603891678010491 231:0.0910796063555351 252:0.0613138071399751 258:0.0805653229555105 271:0.468824704987793 286:0.0476043897596976 309:0.0625236965294422 333:0.257128221749281 390:0.0776069425600717 403:0.0983976557039819 411:0.127300810574876 426:0.076482503050841 466:0.0785049612605168 485:0.0587938247332899 593:0.0818299619369474 609:0.0601636270651214 629:0.103765285106374 688:0.188626923867465 819:0.0853288099918818 836:0.0963417897303001 952:0.0791475734009899 1067:0.0903659466139809 1448:0.106641381391609 1500:0.0969552741944906 1504:0.118706778100517 1691:0.3573158026029 1792:0.100291107150027 2141:0.140666808282555 2580:0.157861024611865 2616:0.112804512300646 2695:0.283406052348756 3349:0.129584175958406
+-1 12:0.18843486903404 165:0.271401401219101 195:0.389274478645217 227:0.198689638138627 342:0.261125591655315 372:0.275930952378483 700:0.345626645595764 1296:0.284564617976073 1709:0.356490812748456 1770:0.47746876641172
+-1 6:0.0513155200431186 12:0.447672848110108 15:0.0206837183504896 17:0.0164484735303232 18:0.0323165346569361 27:0.0703145822362912 29:0.0328884643501217 33:0.0167037288197922 34:0.264620553033551 39:0.0606343410701205 41:0.138993664588441 42:0.090298448846698 51:0.0410022261448151 55:0.0303171705350603 57:0.0225358670885939 63:0.0195738358843015 72:0.0375704201211665 75:0.012235248968482 77:0.0455234075041506 82:0.0226413765229827 83:0.0234638393525043 85:0.0369971879330802 100:0.0186529536999386 108:0.0279428659162717 110:0.0873958655133475 111:0.0188773770860647 114:0.0211957231497743 118:0.0197659431246136 127:0.0900622547830322 139:0.0246944642543324 140:0.0213305816829444 141:0.0275736051226094 142:0.0148723748578921 144:0.0179459711143228 145:0.0253305242906309 148:0.0265341245202654 159:0.0181595249342809 161:0.0294579584868039 164:0.105778628682547 165:0.146540913202603 168:0.0672562612061365 180:0.0232612950914121 181:0.0509575174735292 182:0.245555895817234 185:0.0175778047876053 186:0.154163173624517 191:0.0389596687541457 199:0.0141098872736991 203:0.0228838049107408 215:0.0192302382645804 216:0.0262625467936629 219:0.0252392071738332 224:0.0287071246877394 227:0.107280805795192 231:0.0323604179925821 239:0.0511834040264047 240:0.0271740938161591 252:0.0435693676589014 259:0.110163065740009 260:0.152234089107706 271:0.033314512492361 277:0.109345085782943 283:0.0226281141044683 286:0.0338275056853491 309:0.0666436659674193 330:0.0300207515943441 333:0.0304523960465068 341:0.0504421278990155 342:0.0281985151807292 353:0.0338618958197523 367:0.0257640583076862 369:0.0269925549628774 377:0.0232327351369313 380:0.0370924912824077 396:0.0306594662966787 398:0.0234786928371474 399:0.0284623074968328 403:0.174802537883253 411:0.0452297457777403 436:0.0266625360629257 441:0.0425707688322337 442:0.0256870123698404 448:0.0273362714457358 454:0.0301183839067146 463:0.0370924912824077 485:0.0417786773545108 496:0.0759365404334985 502:0.0416716003353435 504:0.0320653402191578 506:0.0168872067347167 508:0.023420159882629 513:0.0225884537959988 517:0.0336586370646281 528:0.0315827350619009 546:0.0260796156584996 615:0.0400792374447548 641:0.0238849945016272 662:0.0314663531198921 671:0.0184344513141612 696:0.033314512492361 714:0.0312383833542392 720:0.0300531679902948 742:0.0309801145435848 771:0.0320240315121173 772:0.0279680786559627 781:0.0327110472212682 806:0.0324034434326773 840:0.0381443508024288 886:0.0519991841088023 908:0.0321068559882513 912:0.0574142493754787 936:0.0706413354737493 974:0.0775428495479501 987:0.0246435999475353 1009:0.107613024861725 1045:0.0156808155750438 1048:0.0410004502639338 1050:0.0356332474214354 1068:0.0355697806082501 1074:0.0394498933954658 1075:0.16870520686663 1082:0.124122464373561 1105:0.0378894882754303 1145:0.0396544069613783 1149:0.0289593993757565 1232:0.0341764543308885 1242:0.038318723108069 1245:0.0295186355244306 1270:0.052482265003437 1301:0.0396544069613783 1308:0.0705190857883643 1313:0.0394498933954658 1331:0.0341231912624859 1382:0.0395515189476768 1385:0.0480587916553158 1409:0.0396544069613783 1462:0.0741849825648155 1493:0.0806002279269775 1503:0.0408795374801312 1518:0.0386788832682931 1551:0.0323176149071749 1560:0.0460410213332403 1698:0.043714481429259 1722:0.043064549801404 1741:0.0458201448145064 1776:0.0349605075766506 1956:0.0449912157198863 1979:0.0446059193382671 2026:0.036365500441888 2066:0.0404128011248131 2154:0.0412477038068487 2207:0.043714481429259 2464:0.103122104368516 2542:0.0456050060019891 2626:0.0944869474071977 2713:0.0483494312513047 2715:0.051561052184258 2728:0.0553670729116836 2729:0.0553670729116836 2750:0.049626165541932 2783:0.0507321230896379 2794:0.0568771290706331 2819:0.058725288443102 2838:0.0453953143311299 2876:0.0540903386210563 2902:0.0432223141636559 3519:0.051561052184258 3724:0.058725288443102 3944:0.052482265003437 4020:0.0489632215334075 4137:0.0547041289031591 4166:0.0511362217008815 4829:0.0668488876511868 4960:0.0547041289031591 5612:0.280828412730421 5639:0.0540903386210563 5808:0.0702071031826052 6337:0.128932391625707 6443:0.22784403165707 6623:0.0598312459908079
+-1 6:0.00762956412542307 12:0.0514325418712127 13:0.0507075859945193 69:0.154810437071003 100:0.0942925807422401 111:0.0477135319082288 132:0.0462734855813256 142:0.00989228547982036 151:0.0602539149353177 199:0.0356634586248815 218:0.0432777933923174 254:0.0736325002286581 261:0.104899849911099 307:0.0732684191619803 318:0.276276944010933 336:0.0697546347863019 351:0.0541444956360093 379:0.0931847782028331 398:0.0593435917893332 406:0.0715373397291091 443:0.11876610762589 458:0.0803266162537684 461:0.25045894441688 511:0.0989594090436 542:0.216913078115424 576:0.0746869600650928 609:0.0540289966745048 619:0.223626347054651 720:0.075960912541543 786:0.120761343669988 795:0.0903894141805418 846:0.331471733867043 859:0.238820571283311 909:0.067173981709493 927:0.0979967505361834 1011:0.183133487922908 1045:0.0396340599054525 1073:0.102145412849389 1138:0.0752348004342195 1193:0.0929986957894182 1602:0.315688584362839 1631:0.273432170789007 1679:0.110067651780208 2618:0.154453532061826 2655:0.138267471589553 2776:0.158270275902602 3021:0.139943096331269 3438:0.162941592833326 4006:0.130323185122552 4054:0.148431157102769 4418:0.139943096331269
+-1 6:0.0254389307263584 12:0.128617000417742 17:0.0346548998811221 27:0.0370360326003716 34:0.0506838895467827 39:0.510996236889478 55:0.12774905922237 75:0.193336175196593 82:0.0954051614732832 85:0.194871250718236 108:0.0588721633612276 110:0.0613774273907665 111:0.0397722993401022 120:0.158956778833849 125:0.0681793993574406 140:0.0449408980879461 142:0.0610193384160371 176:0.164826414374917 186:0.036089193845689 191:0.164166409434599 195:0.0885669693002944 204:0.0381786731574271 211:0.379500069331086 215:0.040515734212089 296:0.057349400007232 321:0.168883995028371 332:0.163373195854748 339:0.0494667026767544 399:0.059966562542723 408:0.0374488417059803 446:0.0784724490729062 457:0.0438535383800154 555:0.0732900857241036 557:0.0598539818452452 561:0.0563573903063051 583:0.20018034115591 641:0.0503227300447726 654:0.0664588000307552 842:0.09210100709305 961:0.108632761448452 972:0.434531045793807 1045:0.0330375394899521 1391:0.0803654306067754 2226:0.105298857581744
+-1 6:0.0335037266956502 12:0.150570578501223 18:0.0597815042043624 27:0.032518272288553 29:0.0811193357907403 31:0.0425660888973887 39:0.11216586660953 42:0.0668162865441102 57:0.0833770110197488 75:0.022633664017987 108:0.10338153975906 110:0.107780869392787 142:0.0231680114294251 180:0.172121822474887 185:0.0650334339352285 215:0.0711470200545257 283:0.0837183016578619 284:0.0678210554759926 316:0.304290550277417 350:0.16300949421798 367:0.0953205024234741 404:0.0937845555157227 423:0.0846137691526955 537:0.124902144204963 561:0.0989655119503431 668:0.161113464354103 888:0.16719453831443 987:0.0911750897497919 1190:0.120857414966552 1335:0.120044563407037 1410:0.154031575614678 1954:0.158192902444499 2620:0.202391447396003 2948:0.19800645017926 3277:0.213659530073599 4535:0.204844172631155 6584:0.519497065962324 7674:0.247323984492789 8201:0.238508627050345
+-1 6:0.0358649158229957 12:0.40295525721824 37:0.0282823301456101 39:0.0600354014451541 40:0.0373484810468934 41:0.110096559865309 42:0.0357625961177148 47:0.0282919130452464 51:0.0405972104801513 63:0.0129203250654788 72:0.037199303474394 82:0.0896709095762226 83:0.0154880440150041 86:0.0464354884060181 100:0.110812210745589 142:0.0372011800620263 149:0.199659661193815 159:0.0359602941251415 168:0.0443946073017279 176:0.123935722310581 185:0.0348083461722804 222:0.22869946716875 268:0.0575166444078782 301:0.0541788897247141 308:0.0441659278568277 391:0.061859627797408 433:0.0966766237092376 441:0.0421502592683642 459:0.0546024719197208 534:0.0455609302533197 538:0.0523766865298683 549:0.0638285516166322 572:0.0647758618948021 667:0.057573691881953 696:0.0659708705044073 706:0.0608522241236811 757:0.0567925379511479 796:0.0525440464745095 812:0.0669532678466651 858:0.0599691341539491 944:0.065408490875178 987:0.0488003461336573 1009:0.0532750173769484 1024:0.0925593028671545 1088:0.0767768894598645 1178:0.0946121201289427 1272:0.151070259715716 1338:0.151070259715716 1500:0.204646548183844 1504:0.083519377314689 1515:0.0920838744409764 1584:0.0802534415772514 1949:0.0743808051015347 2016:0.0963401518813314 2277:0.114358637331311 2301:0.105980518713629 2436:0.116290412477211 2882:0.0957436813392647 2958:0.0935536153078376 3389:0.484034896786417 3467:0.173130697572011 3477:0.0925593028671545 3766:0.111067410714134 3936:0.121008724196604 4118:0.222134821428268 4208:0.111067410714134 4326:0.0996990121294476 4625:0.112630605578922 5126:0.123999004163609
+-1 6:0.0216273922681943 11:0.07288973217433 12:0.182243660993111 29:0.0196366180949672 39:0.108608299830473 55:0.0543041499152364 57:0.0403662704418142 59:0.0335736516436087 63:0.0116868922738915 65:0.0386816403892365 69:0.0548548055089503 75:0.0219157916952149 97:0.0337379104572404 98:0.0350725057076244 105:0.11487094683394 106:0.0378464828521055 138:0.0453392055059613 140:0.0382073618694148 142:0.00841244670012549 144:0.0642896872344787 174:0.0792670177420965 214:0.0463229412787319 229:0.0283149406879715 278:0.0466778722228101 291:0.0435190879819004 296:0.0975133729985623 297:0.264096855949418 310:0.166474847903812 375:0.114988897169611 381:0.0519744222388509 413:0.0467498888974261 427:0.0574354734169701 430:0.0420813882393544 478:0.0424010143727272 541:0.111508392754732 588:0.592875460273845 613:0.100012537574401 618:0.154839715356171 726:0.0498275267956409 761:0.0549799995501243 867:0.0475279536443448 882:0.0812057696020561 1045:0.028087494471016 1215:0.0633767206464102 1258:0.554137287520926 1476:0.0696150530919434 2146:0.083293130420505 2157:0.087143084325003 2824:0.0789196596005075 3715:0.0979860971360817 4327:0.0931583237568927
+-1 6:0.0104034875940353 11:0.140249442004783 12:0.0701321599098812 18:0.027844789162974 27:0.0605849215652799 29:0.037783438744066 41:0.0239521305519902 51:0.105985838611868 59:0.0323000631818576 67:0.0294242786524411 70:0.0598465530193377 72:0.0971150314980046 82:0.0390168291454882 83:0.013478047005145 85:0.0637555300130817 98:0.0337420594675761 110:0.0502017408893702 113:0.0556914398708483 118:0.0681234575123693 132:0.0315486982784484 142:0.0202333188844376 162:0.0563453340990536 172:0.0407925672712655 173:0.038880247843928 185:0.0302910119203473 196:0.0967424266049372 201:0.0624290896025711 204:0.0312270477735508 209:0.0980293276872988 214:0.0445657191524876 278:0.0449071860873513 291:0.0418682276909784 299:0.0430619467482696 321:0.138133364645574 347:0.0427317553491947 355:0.0313067833837006 367:0.0443980011579686 379:0.254128982481643 391:0.0538316504244527 398:0.0404597373333951 404:0.0436825939700588 411:0.0389711566678076 432:0.0488641948299663 448:0.0471073227986076 451:0.118160105524681 503:0.0706541654484729 519:0.373170640230145 534:0.0396481543413416 541:0.0536392074582521 546:0.0449417864366503 607:0.0510263824704852 640:0.0485485154222242 682:0.0805472036106316 688:0.0577451892773446 713:0.0520148830571404 732:0.0569199515250094 739:0.106276723570741 785:0.0731726641418794 824:0.0581764195745474 861:0.0694473085353736 875:0.342073834623938 895:0.162277035322687 903:0.0579161211059452 908:0.0553282488465665 909:0.0457984017086896 942:0.0673023851892823 1045:0.0270220188040403 1056:0.051079539467111 1078:0.0660328700007787 1117:0.062079538161885 1133:0.0606565653747302 1138:0.0512941696334273 1156:0.0729244381096881 1247:0.0805472036106316 1256:0.0888527586471042 1258:0.266558275941313 1293:0.0765465553847267 1334:0.0805472036106316 1349:0.0932113601068869 1382:0.068157289626786 1411:0.0658818353945951 1414:0.0867603404629696 1428:0.174848607527641 1432:0.0618511710964371 1460:0.182611029998102 1538:0.0661855199809775 1581:0.148422264001765 1676:0.0706541654484729 1711:0.0756254204938259 1738:0.0702404368543778 1754:0.0736824553726192 1868:0.0818656144862024 1873:0.0688801092464884 1893:0.0896244404750771 1905:0.0896244404750771 2451:0.0823336117277929 2551:0.0932113601068869 2552:0.0932113601068869 2878:0.202397106322419 2980:0.0954114968181433 3010:0.088120668070859 3572:0.088120668070859 4370:0.0861258965875243 4522:0.103104398269046 4611:0.088120668070859 5400:0.115197573142461
+-1 6:0.0235714374943293 12:0.06810006776433 39:0.0338202553380053 42:0.0402928972951409 55:0.135281021352021 58:0.0225884343973638 59:0.0627283259007892 63:0.0145570340914175 69:0.0341631998977079 72:0.0209558012708434 75:0.013649006056142 100:0.0208082629680224 140:0.0237952851896614 142:0.0130980365156116 145:0.0282574126884292 162:0.0364751451666873 165:0.0980840430919191 173:0.025169123706516 180:0.0259490884406402 191:0.173845503639668 201:0.0808269271018896 214:0.0288496128656748 275:0.0226440600312802 284:0.0204494066049164 293:0.0637429028799883 367:0.0287410406423494 370:0.0398219406366059 377:0.0518344568878947 391:0.0348479123460776 429:0.0384284291546543 473:0.029647589768303 508:0.0261263097217936 511:0.0873525102539433 519:0.0402619947507147 555:0.0388055994779404 580:0.0304688565001072 605:0.195824426984835 664:0.0761321073884689 674:0.490484833649368 777:0.325105235880445 844:0.0368991767258409 881:0.0383670376338641 977:0.0462980999156895 1045:0.0174927005817662 1046:0.113496397785646 1053:0.151237506056949 1055:0.0734877784137202 1188:0.0414636063084598 1193:0.0410454630138775 1214:0.0489561067462088 1294:0.0382454649603029 1334:0.0521422224474458 1427:0.102229130878747 1447:0.0437855982952586 1600:0.0501898553446525 1642:0.104284444894892 1670:0.113188224788093 1763:0.177319842043432 1847:0.117092958993679 1950:0.114089807486794 2077:0.125137105762997 2163:0.042551849696815 2211:0.0518743952924466 2286:0.0655108710638711 2481:0.0667446196623147 2597:0.0634491607927907 2704:0.41374629810134 2737:0.058018370626122 3324:0.0610250750612905 3372:0.0644226276755159 4082:0.131021742127742 4596:0.0655108710638711 5807:0.14383025622653 6614:0.0719151281132649 7411:0.136337755788781 8442:0.254170926636158
+-1 6:0.0215259247266935 37:0.0339497972232544 39:0.216197501562227 41:0.165198370464946 42:0.128787078022496 63:0.0620376629186079 75:0.0290839614569632 84:0.04211154760049 85:0.043972329072893 91:0.0573339077781768 98:0.0465439450413461 111:0.0448727205301639 132:0.0435184129827389 142:0.0148852954367529 165:0.139334811491997 168:0.0532907970432419 215:0.0457114938924423 218:0.0407010810222731 222:0.640566076278005 275:0.193004227991402 286:0.0402050613793093 287:0.133204616809361 307:0.0689060978144741 382:0.0630228771873039 390:0.0655442051634029 394:0.0668453699894756 572:0.0777562303023821 633:0.0746152184416374 677:0.10742139461572 713:0.143499116328094 748:0.106031094432852 819:0.0720658338540758 867:0.0630732939582681 1021:0.076821016782127 1153:0.100255739518205 1473:0.101637902590686 1831:0.291519746475121 2241:0.100255739518205 2258:0.266648190049648 2350:0.125947228448557 2435:0.105588654727927 2640:0.0992792879204482 4161:0.260070355847221 5018:0.135200536902377
+-1 6:0.0312467752483068 11:0.187216824204924 12:0.280855026557155 29:0.037827398676731 34:0.0830070583502616 42:0.124630522898895 58:0.069868601649312 63:0.0450265652872075 75:0.0422179311000378 83:0.0269874566420936 108:0.0964173259595812 110:0.201040596622392 142:0.0108036585401623 203:0.157921902777304 219:0.0870883062722567 243:0.0982096678167115 259:0.253412999940378 260:0.131321567333492 304:0.315467153012358 414:0.0769578173938096 447:0.439546790457465 462:0.127988261237951 592:0.102599650483536 706:0.106033192992083 726:0.0959862697364003 752:0.158865313769195 806:0.11180862324655 856:0.07817028377655 952:0.0970319407398529 963:0.0883700675400191 1315:0.158865313769195 1384:0.170069283003194 1429:0.167869852982817 1446:0.108708410732418 1547:0.139839238114684 1687:0.15964833496365 2359:0.186639617629685 2695:0.173722567194184 4020:0.168948414409728 4959:0.196255484662187
+-1 6:0.00826030218516575 12:0.222737934185119 27:0.120260094384287 33:0.045709824404553 34:0.263321912751429 83:0.0856118605396883 132:0.0500989267249214 141:0.150910573555473 142:0.0149941166272061 149:0.0919700547347313 216:0.143735140255902 218:0.0468555798799172 252:0.178841637689845 277:0.0748058221694316 301:0.0748699375275201 355:0.0994295379726926 368:0.100686922269534 377:0.0635764777435985 402:0.0629607586846825 411:0.123771390188841 448:0.0748058221694316 479:0.104619506478715 531:0.0929465340454861 557:0.0777409997842192 597:0.0738652405636172 655:0.0625469506693463 783:0.133132686723494 796:0.0726107437228478 886:0.142295986748601 942:0.213750642530543 1039:0.120569364732762 1056:0.0811136511027986 1329:0.111219418082429 1342:0.118278045105603 1489:0.193647336693132 1603:0.119624862904856 2013:0.130001541909469 2977:0.292909465496267 3044:0.13398806234937 3140:0.501666737741504 3554:0.296036879791977 4825:0.158032474940548
+-1 6:0.016634562580047 12:0.224274368061657 20:0.0312782208601117 29:0.0201378294408978 39:0.0556902264757214 55:0.0556902264757214 63:0.0119851922651636 68:0.0340396995035621 75:0.0112375887000011 79:0.0376025278262309 91:0.0886117078828253 97:0.10379714315282 98:0.0359677076057242 117:0.0572453564022791 132:0.0336296708892606 142:0.00287572289702962 165:0.0538367961137689 199:0.0259187385877744 218:0.031452524708543 234:0.0397767881819207 258:0.105162631048268 259:0.0674535911723256 275:0.0372869104289323 355:0.0333717991310735 386:0.0441608188154061 406:0.0519904036006757 422:0.050562317680305 429:0.0632782899283437 480:0.0407832287063337 502:0.0382737046255233 508:0.043020967489459 515:0.0400607632654198 539:0.0515149252317395 572:0.120175174388636 594:0.0530919026860155 605:0.16122744460786 607:0.05439211576993 638:0.0677228737684439 654:0.057943371912822 656:0.0547353048213849 674:0.146846971899193 676:0.0554458184967319 742:0.0569080017932682 789:0.0569748769317158 834:0.0558761440988715 845:0.0750924529008564 846:0.321200076141513 1059:0.0508284597934933 1150:0.0605044370918561 1160:0.0702274440088131 1294:0.0629770113803687 1296:0.112895860156614 1318:0.0734234859495967 1319:0.0585257997599413 1331:0.0626815832725737 1339:0.0669289160927752 1366:0.060087587194318 1679:0.079992653642153 1751:0.0755399577946623 1824:0.0785425979425127 1906:0.0872655235413875 1950:0.0939331645194748 2045:0.0931908675708643 2164:0.0715658070342794 2187:0.0774745054718326 2617:0.0993596419056162 2658:0.0911593116829872 2923:0.0964057388079874 3055:0.0964057388079874 3176:0.11502434327759 3361:0.101704901062045 3775:0.101704901062045 3815:0.109905231284674 3877:0.11502434327759 4042:0.112250490441102 5433:0.368388239460479 5458:0.112250490441102 6082:0.109905231284674 6149:0.107873675396797 6221:0.12279607982016 6426:0.118419264775854 7219:0.12279607982016 8456:0.418531330601907 8771:0.257929708309823
+-1 6:0.0454227218318528 12:0.17497393815622 17:0.0176795377620614 29:0.0353499579363559 37:0.0307023583708426 39:0.0651724380776533 41:0.224094692183605 42:0.0388226866960682 53:0.0249868939611668 55:0.29327597134944 58:0.0435284514359953 59:0.161171972027859 63:0.0420776274499803 67:0.0183527853692206 75:0.00657548999205672 80:0.0211251316330677 81:0.0197542629193158 83:0.00840665311811039 91:0.0259248409030362 96:0.0402041035337001 101:0.0315336798500968 127:0.0322676150148045 132:0.0196778481818322 138:0.0272066367666147 140:0.0229270408378704 142:0.0185095009236984 149:0.0361239829404286 151:0.0768691211973478 158:0.0465748098201684 159:0.0780746021750524 160:0.176444410333078 161:0.0633254008039801 168:0.0722899670621043 169:0.0709492689002554 174:0.0237828269729878 175:0.0628130050241883 176:0.0168175630408555 183:0.0285428915800391 186:0.0184112569242995 191:0.125626660796187 199:0.0151659231121912 204:0.0194772253305462 214:0.0277969457838422 215:0.0620084999885228 222:0.45515900213395 234:0.0232747326485045 240:0.0292079029027775 283:0.048643370712385 291:0.0522288825278262 308:0.0479450645636276 311:0.0415737530948087 317:0.0193378042788075 324:0.0687532954288495 337:0.049609177409036 338:0.0850234000733563 341:0.0542174022012032 351:0.0230250034468388 357:0.0300342127332492 369:0.0290127770142895 370:0.15347565737357 374:0.041875553598729 381:0.155941112247893 386:0.0516799519743422 402:0.0247297164191316 409:0.033139348375571 411:0.0243074531193378 423:0.0491636698160397 433:0.026237233034924 454:0.0647451089767552 466:0.0899407783905525 480:0.0238636347495288 485:0.0224527735834081 495:0.0357562856259664 501:0.0337389817301279 509:0.0301157607440028 542:0.0922425135298603 567:0.035207513119366 595:0.0461212567649302 599:0.0608426572079828 601:0.262866120265295 619:0.0475486690868068 626:0.0306213878604397 634:0.0729034211677439 662:0.0338214106732712 673:0.0328051381588112 709:0.0282946501854985 713:0.0324432077342908 727:0.0347363840223739 771:0.0344208277666723 806:0.0348286362702729 819:0.0325862190388267 842:0.0469862339354922 852:0.0321983363596722 859:0.203117395863863 872:0.0370262494246873 912:0.0308556714409669 974:0.166692882988017 1009:0.028916794820278 1032:0.042847674334029 1045:0.0168544254631184 1082:0.044470748647628 1083:0.0347823906480583 1111:0.0402866530785606 1126:0.0345997737366542 1134:0.0789387163959596 1138:0.0319936776392846 1153:0.0453329311980897 1218:0.0394693581979798 1225:0.0868220805757574 1232:0.0367343458225718 1236:0.0357562856259664 1426:0.0385080150212075 1449:0.0415737530948087 1473:0.0459579079203244 1501:0.0529769621203801 1551:0.0347363840223739 1600:0.0483585237143372 1607:0.209892355358223 1624:0.0410924325115788 1733:0.109926889070066 1737:0.0533403702214342 1742:0.0587983870297218 1776:0.0751541609916291 2269:0.0529769621203801 2376:0.0450361616421737 2495:0.048149049055365 2504:0.0477443310785291 2571:0.0431968274084077 2672:0.0510619842046657 2748:0.0581386584263096 2954:0.0602855463024182 3355:0.0631205049334065 3435:0.0656815261888749 3436:0.0656815261888749 3468:0.197044578566625 3662:0.0545291016980576 3700:0.0526278090460014 4082:0.0631205049334065 4119:0.0581386584263096 4124:0.0611340225187535 4929:0.0656815261888749 6841:0.0595109482051546
+-1 6:0.0161657900999524 12:0.130772504829182 20:0.018238068504345 27:0.0470709036942535 29:0.023484399225551 31:0.0246461343745538 37:0.0305952177840612 39:0.194835026588479 42:0.0193436044892987 48:0.0197792937582851 63:0.0419307911177054 72:0.0201207040819287 75:0.0720779819274207 77:0.0243798980218491 79:0.0657771567153858 83:0.0167546336263148 86:0.27628103142751 108:0.179576422458656 120:0.242431125669604 137:0.0794048961100869 142:0.0477890828816005 143:0.0284890147017012 145:0.0271313433199941 162:0.0350215958225095 169:0.047134453699051 172:0.0253547312546823 179:0.0176245756606972 189:0.0241943312335524 199:0.0151129992982712 200:0.187405262865659 215:0.0205973706069162 218:0.0733588144715165 227:0.0459630813840129 229:0.0338632328615967 231:0.1039830364893 243:0.0304857739032838 256:0.022002621399261 296:0.0874657859968474 316:0.132140149329721 317:0.0578109661377874 350:0.141575864833715 360:0.0398112647624156 369:0.0289115324806962 375:0.045840296168057 383:0.116189868736366 385:0.0676560830812165 387:0.0228227951569837 394:0.0301201895144648 408:0.0761529007353063 432:0.0303716733406712 433:0.0261456741875895 442:0.0275131751508535 455:0.0236068010257 457:0.0668827259337894 478:0.0253547312546823 480:0.0475607178746565 506:0.0542632989011737 507:0.017287528777177 510:0.0292297060423605 513:0.0241943312335524 531:0.0727602514395064 546:0.0279336897241389 548:0.0366061556907609 586:0.0237668871102176 613:0.0299024805162304 621:0.0450256357359858 622:0.0356829359549734 631:0.043397864417203 636:0.0661332280236269 640:0.0603509238905574 655:0.0244814500304493 673:0.0326906595995641 679:0.0406732234625238 709:0.0281959116655766 724:0.075663428965427 774:0.0362692343202459 849:0.0808114598748451 856:0.0242652444524604 867:0.0284205109138254 954:0.0441801204074946 986:0.0578230649613924 998:0.0357866938213705 1017:0.0380985374967644 1058:0.0362692343202459 1067:0.0343894237145756 1102:0.0387299562454554 1117:0.0771714119409261 1127:0.0372591805832707 1129:0.0377012533602336 1190:0.0349887453438269 1254:0.0889062036730859 1264:0.0535317855217081 1271:0.041233695910146 1302:0.0461261311521704 1366:0.0350365686210857 1380:0.0333000800238664 1445:0.10012866742527 1483:0.0453263830607759 1683:0.165680022178064 1752:0.087064600178344 1868:0.0508837955820252 1946:0.0450256357359858 1948:0.145867789087866 1950:0.0547716411684029 1980:0.0401460666259447 2418:0.567511914481051 2557:0.0547716411684029 2589:0.0524441562375068 2753:0.0459603095681967 2928:0.0562133785184158 3075:0.057935774663986 3529:0.0690492810596672 3643:0.0716013652388121 3952:0.107852251679824 4813:0.0600751706456929 4871:0.0547716411684029 4952:0.201209192339895 5007:0.150396651730897 5128:0.0640848194697671 5652:0.0690492810596672
+-1 4:0.0129038649710335 6:0.0387816129723656 12:0.482649675009803 13:0.0198269414414624 15:0.040882864127984 25:0.0447785731576808 28:0.0440588651802457 29:0.119178448823208 31:0.0341110945731609 37:0.0282298865874365 39:0.179772235735426 40:0.0186396131213127 41:0.0824193069311248 42:0.0178481409996568 53:0.0229746905490467 55:0.0299620392892377 58:0.0200115449198172 60:0.0905712246911769 63:0.0709300189080569 68:0.0183137846344404 75:0.0544136711067716 77:0.0224950762249064 79:0.141614416241734 80:0.097119586538427 81:0.0181634451365237 83:0.00772966236787701 86:0.231746918408981 98:0.0193510771391159 108:0.138077734772284 110:0.0575814147563588 138:0.0250156766809323 140:0.0421614362532662 142:0.0131509869319397 144:0.0354715088592482 145:0.0500676118924211 154:0.0215650637891074 160:0.0270392132559012 162:0.048471088773988 165:0.0868946116283428 169:0.0652356991708444 171:0.0257940140872948 172:0.0701836338763531 178:0.168530329999287 179:0.0487860333825478 183:0.0787329672642233 184:0.035153120996614 185:0.0173719007535917 186:0.0338571837789974 190:0.0511556430922672 197:0.0332643643306463 199:0.0557784238304675 204:0.0179087174828054 208:0.0223499653186252 209:0.0187399456534404 215:0.0380099556954657 216:0.0519098217267463 219:0.0249435585058002 229:0.0156226249133752 234:0.0214004101927286 242:0.0418069819226641 255:0.0277662020035046 259:0.108872630449069 260:0.0752254197622359 269:0.03185509758038 279:0.0337761159553039 280:0.0312514807014117 284:0.018116537501406 288:0.0309843356880721 295:0.0253294718566138 296:0.0538025089715888 306:0.0234094135849022 317:0.0177805240576963 327:0.0250884359149148 330:0.0296690925600057 337:0.136842398395339 345:0.0218922794053496 346:0.0497085904893196 351:0.0423415835440759 353:0.0334652421401327 355:0.0179544458694863 377:0.022960590011663 387:0.0421167074826701 390:0.0545012232638356 398:0.0232036665965588 399:0.0281289038664165 411:0.0223499653186252 415:0.0259549108633731 433:0.0482486787495419 441:0.021036050294492 442:0.025386118172151 459:0.0545012232638356 461:0.0326436023792094 471:0.031097760504297 472:0.0271795371483636 475:0.0241732073403799 485:0.0206446437819885 496:0.0250156766809323 502:0.0205917324152838 506:0.016689392273132 508:0.0462916385783468 510:0.0269699432239314 515:0.0215531923440577 526:0.0358030940519504 531:0.0671351209430085 534:0.0227382236054719 546:0.0257741225588494 548:0.0675522319106078 549:0.03185509758038 550:0.024304966481939 565:0.190384563650765 571:0.0470889276665267 597:0.0266763678153725 636:0.0305102179684543 674:0.0395027549714433 689:0.037281943265338 695:0.0588965589601865 702:0.0355368800218651 707:0.044271589097752 712:0.0273946392761806 719:0.0642191704517807 730:0.0286766238599925 733:0.0336711740059999 739:0.0304748599872236 763:0.0345509849071149 829:0.0221306438941831 856:0.0223892865788404 890:0.0313294370994835 903:0.033214905812032 908:0.0317307606084609 909:0.0262653915705618 912:0.028370853301775 953:0.0651954918022809 984:0.0342098788879471 987:0.048709856284406 989:0.0360782581108664 997:0.028370853301775 1000:0.0362193885023248 1009:0.0797643453042218 1031:0.0733159896867003 1060:0.135850241458036 1064:0.0276404643555163 1079:0.103734989662223 1134:0.108872630449069 1167:0.0381353571611974 1192:0.0371214408694056 1225:0.0266100892352138 1229:0.0336711740059999 1273:0.040052314330418 1288:0.0391899005876629 1300:0.0540633321168445 1308:0.0348465173652772 1380:0.0307256346093421 1393:0.0341543847097793 1433:0.0575240741728529 1457:0.0395027549714433 1462:0.0366579948433501 1472:0.0303349358974294 1497:0.0362193885023248 1501:0.0487107086153202 1511:0.0360085950527075 1525:0.0418221782977798 1547:0.040052314330418 1566:0.0464381929241013 1587:0.0480807547932632 1607:0.0385979299424739 1610:0.165105141573924 1665:0.0321527798376162 1666:0.0430370494600421 1691:0.0418221782977798 1722:0.0425600974744933 1755:0.0461938356758333 1788:0.0367334364827071 1797:0.0518674948311114 1840:0.0528920002057862 1865:0.0354069509457737 1880:0.0416822542079856 1886:0.0513996326409742 1951:0.0372012986728443 1975:0.0424070956379852 1989:0.0483896729615664 1995:0.0385979299424739 2003:0.0466900700258399 2018:0.0944366821010163 2020:0.0497570707718123 2034:0.0401667967550076 2040:0.0406414433300562 2056:0.0388885649673101 2058:0.0446614418213505 2104:0.0509570729746235 2120:0.0440834116165342 2229:0.0848141912759703 2255:0.0513996326409742 2270:0.131698389608392 2279:0.0518674948311114 2314:0.0493932170957798 2331:0.0570732917962523 2380:0.0461938356758333 2456:0.042109413380749 2565:0.0480807547932632 2590:0.0540633321168445 2625:0.0472183410505081 2658:0.0490448513334071 2666:0.0402829030978501 2678:0.0570732917962523 2858:0.044863559742941 2862:0.101074437796438 3118:0.0440834116165342 3221:0.0562108780534972 3421:0.0534567316913051 3513:0.0487107086153202 3722:0.0505372188982191 3773:0.0528920002057862 3853:0.0580373883363961 4137:0.0540633321168445 4209:0.0603921696439632 4221:0.052363729181118 4234:0.0474958374530579 4265:0.0540633321168445 4413:0.0591303908465832 4429:0.0562108780534972 4468:0.0591303908465832 4473:0.0540633321168445 4547:0.0637110474916741 4650:0.0497570707718123 4686:0.0570732917962523 5148:0.0554307299270903 5673:0.0637110474916741 5680:0.0660658287992413 6021:0.0591303908465832 6097:0.0660658287992413 6110:0.0637110474916741 6328:0.0591303908465832 6563:0.0660658287992413 6983:0.0637110474916741 7770:0.0618845372087752
+-1 6:0.0183387250678921 12:0.309063279832751 29:0.133205348491833 41:0.0422215658944069 63:0.0594586813753288 79:0.18654658777777 83:0.0950335918586349 98:0.0594787417399446 120:0.0763937943793961 137:0.0750651298103325 142:0.0309107402392672 166:0.068416551395285 203:0.0695132457881786 246:0.189556078546338 259:0.33463806807627 260:0.115608895622473 301:0.083109501891661 334:0.125296548546334 337:0.0701012973310455 373:0.0654576575264376 414:0.0677497874802262 548:0.41526595412574 606:0.118058738049278 677:0.137274341098876 678:0.0992294495604055 1282:0.128984954137157 1315:0.279714046222632 1358:0.122760397081491 1360:0.135497669494345 2559:0.151818236381602 2787:0.172773446908611 4960:0.166172608659528 6588:0.213265391775728 7363:0.380424756707357
+-1 6:0.0304434055154556 11:0.0195432202430523 12:0.146589700570041 13:0.0867140869628299 21:0.0263093370302107 33:0.0240662714129465 55:0.131040427399328 58:0.0291738197334655 63:0.047002404080569 75:0.044070522464954 91:0.0695018187114754 100:0.0268746608160891 110:0.0419725168853996 118:0.0284782252574747 132:0.0527542769531698 137:0.035603630777822 142:0.0169166109278205 162:0.0235545166859619 166:0.032450188804367 173:0.0975206335613353 201:0.0521955209333959 218:0.024669512895542 222:0.0554651925778416 264:0.0358016937887754 299:0.036003099792753 342:0.0406276423128596 347:0.0357270343849093 348:0.0432065476750288 411:0.0977486538696584 416:0.0846245400233054 429:0.198527094897551 461:0.0951789154788236 462:0.0534418375810224 480:0.0319879690363764 483:0.0422264205589368 508:0.10122935968682 554:0.0552085585479355 599:0.0407782187266809 628:0.0472588819610223 635:0.131412867638566 667:0.0418890688358304 674:0.172767208698248 676:0.0434884432039723 685:0.045962551896546 777:0.17995103244559 803:0.108702920888348 850:0.0797337165111924 851:0.246977342640592 871:0.0499543074790253 882:0.0326593786188677 909:0.0382909866269063 922:0.0618231610062873 977:0.0597957519844728 1003:0.045962551896546 1043:0.0972799233518939 1046:0.0488616341021928 1053:0.130219316694779 1114:0.106449735118098 1309:0.0513393993054306 1334:0.0673436578836812 1374:0.0580632918003791 1404:0.058898109209414 1427:0.198049199645737 1436:0.058390244374715 1441:0.0566936730070229 1573:0.0561320153428729 1670:0.0730934425960961 1795:0.111191218843913 1847:0.151229997513167 1849:0.0537748737764224 1979:0.0642669773318369 1992:0.056838317474487 2014:0.0756149987565837 2077:0.0808096590776419 2309:0.233795600512279 2553:0.0779318668374262 2792:0.0666615852476175 2814:0.0756149987565837 2982:0.233795600512279 3097:0.0902183384667054 3183:0.0705448580606131 3296:0.0700945018791898 3450:0.0779318668374262 3609:0.0696605259645238 3678:0.0902183384667054 4220:0.0696605259645238 4364:0.166408533986845 4365:0.166408533986845 4567:0.101152456348985 5130:0.0928811154760828 5250:0.185762230952166 5291:0.0797713503618502 5330:0.0928811154760828 5982:0.0832042669934225 6589:0.101152456348985 7557:0.0963140321076552 7679:0.0963140321076552 8441:0.328271391665664 8478:0.202304912697971
+-1 6:0.0211366425273988 12:0.0777200065384062 15:0.00658327692289682 27:0.0111899697804662 29:0.0628070440866005 31:0.00732377852377616 39:0.0771955315843936 42:0.0919694897240603 57:0.0430367068129117 63:0.00415334676567448 75:0.0272599063527369 86:0.0447812306438677 98:0.0124642441062184 142:0.0119586310798571 165:0.0186565954109328 172:0.0150686865061385 173:0.057449119310891 185:0.0223788691477107 187:0.017917266861879 190:0.0164749594642393 191:0.0496008084981106 215:0.0122413177015653 237:0.016512573997684 239:0.032581619692608 246:0.0198614930788991 252:0.0138673911428147 256:0.0130764787387558 259:0.0233753575687743 260:0.0726802948617742 312:0.0174162581255178 318:0.0231935367438373 341:0.0160548742209855 347:0.0157850184062232 350:0.0280468669743932 355:0.0115646583650271 367:0.0164005260198435 387:0.0135639199627049 398:0.0448372195314438 408:0.011314694841239 414:0.0425925228709493 422:0.0175218581359682 434:0.0166270550520121 462:0.377789157998581 465:0.0163392909364979 485:0.0132974447745075 499:0.0572492208887957 500:0.0198852957441958 507:0.0102742304381957 509:0.0178357771189386 515:0.0277653020256511 527:0.0549809114855741 537:0.0429804882241843 548:0.0217555721162341 555:0.0221436743322305 592:0.0567840683086074 631:0.0257919836487311 647:0.277709624148778 656:0.0189679644863838 685:0.0203073034237182 724:0.0899357583093253 743:0.0243923999812397 747:0.0211763251291218 769:0.027935867476502 784:0.0188686718830273 787:0.022070952056396 796:0.0168907240626199 806:0.020626933490195 873:0.0222174137357633 881:0.0218934173904381 886:0.0165504588175191 912:0.0182739822963256 987:0.0156872802155392 1018:0.0417026395080635 1031:0.0236118223749113 1033:0.0230177777550473 1055:0.0209671987352958 1076:0.026337384200045 1088:0.0493611490269202 1111:0.0238593928038261 1138:0.0189479558042739 1157:0.05267476840009 1201:0.196046293977482 1216:0.0205722979607712 1254:0.0264191266344665 1275:0.0290306006390152 1315:0.0879244596489723 1321:0.0222921991231123 1378:0.0235636733516107 1418:0.0243923999812397 1462:0.0236118223749113 1542:0.0291675507130458 1745:0.0313751094269042 1816:0.0211157235261776 1875:0.03007359362762 1880:0.0268480037369908 2082:0.0334084305542968 2227:0.0763324920818381 2394:0.0296011331094193 2397:0.0352448014628091 2624:0.0243923999812397 3108:0.477900049962979 3187:0.0325515850238389 3397:0.123110983821242 3696:0.0797210380202918 4897:0.0410369946070806 4911:0.325515850238389 6059:0.0334084305542968 6191:0.0388992684559626 7060:0.0425537354491161 7328:0.0398605190101459 7381:0.0388992684559626 8443:0.241729642966938 8767:0.446914616002341
+-1 6:0.00574083859711696 12:0.116100703789177 13:0.0381547441057547 27:0.0167159451569238 39:0.0576586129203351 42:0.0343467626923654 55:0.0576586129203351 58:0.0385099929724775 69:0.0582432834801343 72:0.0357265911163368 79:0.0778631991271926 91:0.091743713185527 117:0.118537418687805 132:0.0348183209003015 140:0.0405674979200374 142:0.00893209835256794 144:0.0341304872353978 145:0.0481747758569228 162:0.0310924068337192 165:0.167219017650148 166:0.0428348620176827 172:0.0450201997262219 194:0.045484375191044 222:0.073215101618648 229:0.120256017820982 240:0.0516809626081313 258:0.163319449956076 293:0.108672371832912 332:0.294949236219424 377:0.0441851023264803 391:0.0594106185468781 415:0.0499473398458089 420:0.0583762109777796 462:0.0705442348134022 511:0.074461658050994 528:0.0600655227305504 574:0.0859697608744936 609:0.0406539278487684 626:0.054182007051043 660:0.0739152975586997 674:0.0760186593508482 676:0.0574055662737868 724:0.0671744979226563 777:0.39589793509969 778:0.0548612950409826 828:0.174285789022301 851:0.0652029512511186 882:0.0431109965232063 977:0.0789315218145594 990:0.0772965339237989 1015:0.143489908340529 1046:0.0644982797278598 1053:0.0859459785624903 1068:0.0676482724329622 1103:0.0752209286410198 1188:0.0706894138594534 1210:0.0919532097566106 1305:0.0522134690348465 1334:0.0888949001376937 1365:0.0694285959367793 1427:0.0871428945111506 1436:0.0770762252277896 1448:0.14412000194386 1479:0.0903499475865271 1486:0.0784468123402661 1536:0.0943813627460285 1642:0.0888949001376937 1662:0.0791795870199381 1670:0.096484724538177 1681:0.0851957503464163 1810:0.106670276008408 1868:0.0903499475865271 1886:0.0989128775275949 1935:0.105299688895931 1954:0.0813187077718053 1991:0.109831203677497 2124:0.0802128632775849 2309:0.205743071813026 2445:0.296738632582785 2481:0.113789862056416 2547:0.0908664468092314 2597:0.10817158432747 2991:0.119089910477373 3109:0.105299688895931 3299:0.113789862056416 3701:0.127136341195736 3758:0.0980612206610533 4135:0.133523152564073 4850:0.133523152564073
+-1 4:0.0125440715828785 5:0.0325630942056307 6:0.0145001078930433 12:0.0781986906812656 13:0.0385482292738724 17:0.0158025443035849 37:0.0137213818853602 39:0.0291266195404951 41:0.0267070806117933 42:0.0867524415450667 48:0.0177412852554714 55:0.233012956323961 57:0.0216508867786838 58:0.0583607126674862 72:0.01804751752114 74:0.0237738849719459 75:0.129302497211503 84:0.0340401813071244 106:0.182694342482078 108:0.0268455535279291 111:0.01813606516058 114:0.101816850513011 127:0.144209204648067 135:0.02642170081165 137:0.0237410720151056 138:0.0486363488279165 140:0.0204929327602682 142:0.10979460343261 144:0.0172412353694786 149:0.0645775753326603 162:0.0314130589889594 165:0.0281572544577202 166:0.0216383063321774 169:0.0422778385646554 173:0.0216761074995061 176:0.0150320833388385 181:0.0244782114884895 189:0.0217014084135343 191:0.67373510540641 203:0.043970322263633 218:0.032900053698763 222:0.258895559747166 229:0.0151870254118246 231:0.0310896289596459 239:0.0245867194984522 277:0.0262627799363687 283:0.0217395112673053 314:0.046284069718977 317:0.0345695134072643 334:0.0396279123182603 336:0.0265139584336378 355:0.0174538291219979 368:0.0353490999142523 381:0.0278770448437369 385:0.030342485527547 386:0.0230966086804087 402:0.0221042226662181 413:0.025074809744765 414:0.0214274269243287 457:0.0199970995586877 458:0.0305324021979601 473:0.0255330439951955 478:0.0227422437455186 501:0.0904709886746531 507:0.015506265448411 542:0.0824493505626406 574:0.0217140891026846 580:0.0262403338544665 588:0.158997590361387 618:0.0415249800059238 619:0.0425005427140279 636:0.118638054277427 668:0.0418370643489004 671:0.0177105330210291 674:0.0768026304049283 758:0.0303801079652847 760:0.045901770631664 777:0.0399980781655241 819:0.0291266195404951 820:0.0430371818037945 829:0.0215135838608819 845:0.0392742038310675 846:0.0419978199326883 847:0.0309264000408876 859:0.0453882291800544 884:0.0299399701151535 886:0.0249785917554828 934:0.0470404427560708 945:0.045901770631664 947:0.0352789925818124 964:0.0347393193144083 982:0.0324828736482129 1005:0.0305709355941251 1012:0.0774350683877761 1134:0.0705579851636248 1150:0.0316445062484096 1205:0.0401253949737879 1218:0.0352789925818124 1282:0.0407944553319594 1323:0.0934802760629346 1418:0.0368139522768326 1467:0.0356358744013535 1582:0.0491281095146244 1584:0.0389355514141337 1607:0.075043438107295 1631:0.103932437363184 1733:0.0491281095146244 1806:0.0398727664299074 1835:0.0390468417703376 2161:0.0385053314647728 2269:0.0473525270990474 2279:0.0504212938872632 2343:0.0525559055062178 2387:0.0393903683869692 2556:0.0491281095146244 2733:0.0377089542983375 2948:0.051417233381811 2985:0.0519662186815919 3075:0.0519662186815919 3093:0.0418370643489004 3143:0.051417233381811 3161:0.0495362569650668 3218:0.0531928157973881 3298:0.044232996944035 3645:0.0491281095146244 4563:0.185803852291486 4680:0.0619346174304954 4726:0.0587082785475351 5157:0.051417233381811 6577:0.202350240541927 6579:0.0674500801806425
+-1 6:0.0357790757594048 12:0.241194487897018 34:0.285141343931829 84:0.0699952392788633 85:0.073088116454553 97:0.297674662266474 118:0.312381698963476 216:0.103763566134826 218:0.270603391933215 226:0.0924757074793992 243:0.112454841089898 380:0.146552777326847 390:0.108943569760944 398:0.0927645333145862 448:0.108005862200829 534:0.0909037669709116 671:0.0728346882396709 681:0.130503880833358 688:0.132395954287472 767:0.114083224521771 771:0.126527245732054 808:0.12447641180158 856:0.0895087727661403 1020:0.152459034658263 1074:0.155866894955519 1083:0.255712623677012 1159:0.121274202934387 1319:0.125882421819882 1320:0.167767476703409 2021:0.174080008952693 2073:0.172716321858361 2728:0.218755818957722 2729:0.218755818957722 3183:0.193454142725481 3300:0.196073440656206
+-1 6:0.013377609619256 12:0.0901813597170557 13:0.0444551142777057 124:0.232017083167342 142:0.00346900900800629 201:0.160552311335974 218:0.0758828965413716 242:0.0468689072509038 257:0.0810506529307232 261:0.0919652301337337 373:0.0477496110409974 383:0.0801251024569614 456:0.14496833576125 458:0.0704219858837028 473:0.0588911298934006 502:0.0461698956644447 539:0.0621428927871536 612:0.0778634308705325 613:0.123725381970262 681:0.0731920794989094 1150:0.0729870174601307 1159:0.0680156869332858 1901:0.127967277075898 1974:0.119858381751206 2355:0.24243695020573 2384:0.260257865641203 3000:0.112416936764377 3150:0.119858381751206 3266:0.571268773106636 4275:0.138754844349614 4752:0.148129956291684 5685:0.466714203835541 5843:0.135408722062728 7260:0.135408722062728
+-1 12:0.180410949543578 41:0.123230957724074 55:0.268790233826979 63:0.115693644478859 100:0.165375979950774 142:0.0138797465700947 441:0.188714954375072 487:0.408196961371547 853:0.283196115597673 1661:0.479561730502542 4430:0.571553464279719
+-1 12:0.197366455155406 55:0.294051861957578 63:0.126566843933642 142:0.0151842024329754 373:0.209004865213376 441:0.206450892665057 487:0.446560408195459 853:0.309811647190474 1661:0.524632230011166 2318:0.448761431539858
+-1 6:0.0281681459050005 12:0.0759550254707654 21:0.0340802654701821 37:0.106621520285512 39:0.113163691606699 41:0.207526440194429 42:0.0337053413544442 63:0.0121770792396872 75:0.0228350125780912 77:0.0424808512533205 91:0.0450152056212528 96:0.0349046691194099 111:0.0352314157490448 127:0.168085890698222 132:0.0341680932740162 140:0.079619810317349 142:0.00730441047873221 158:0.0808712635370535 165:0.0546987413955598 168:0.0418407933382676 169:0.0821296182084704 176:0.0584031401514853 214:0.0965317576900481 218:0.0319560902479122 222:0.574782552745299 240:0.101431654670647 275:0.0757677729069003 284:0.0342121950211633 302:0.0715153836593907 321:0.0748010844347233 348:0.0559683664063529 370:0.0666227644401772 382:0.0494818491424947 386:0.0448678484339131 390:0.0514614472839965 402:0.0429400231895773 411:0.0422068164039457 423:0.0426832456589004 507:0.060245447939331 534:0.0429400231895773 594:0.107883843945085 601:0.228216876987997 631:0.037809391601367 636:0.115234108857054 656:0.055611635530933 676:0.0563335247701011 677:0.0843409485614895 726:0.103834916569505 811:0.127970589188869 829:0.0417926386205392 904:0.137339475173535 909:0.0992018147672578 1025:0.0686697375867676 1032:0.148799128816478 1098:0.0631974730513387 1153:0.236144695382542 1176:0.127172730616476 1227:0.0615592488318251 1350:0.0798000914525849 1375:0.0707142898011856 1544:0.147632375112162 1551:0.0603153352089745 1653:0.0867867201546779 1791:0.0789791382609651 1992:0.0736265207361439 2241:0.0787148984608472 2258:0.209356444881796 2502:0.0962299400854146 2949:0.083968456997789 2996:0.100950423317645 3093:0.0812733630335343 3418:0.104678222440898 3894:0.12476208651565 4161:0.102095958553441 4949:0.102095958553441 5504:0.104678222440898 5698:0.109600769359469
+-1 6:0.0152852523562354 12:0.0772808939901797 15:0.0130921637464087 17:0.0832910621536729 37:0.0542413510836613 41:0.0527872537907249 59:0.0237283224685204 79:0.0259143030192628 94:0.137640373358816 106:0.0267481642731895 116:0.0409121318602852 140:0.0270032170683319 142:0.000990922138232852 165:0.148409495715365 171:0.0330406847280433 175:0.147960935855333 185:0.022252430117459 186:0.0216845763368853 199:0.0535867733742175 203:0.0289695030608652 224:0.0363414711737806 226:0.0296300525301958 252:0.0275780827243919 255:0.177834733940237 278:0.03298978663401 284:0.0232062680093894 286:0.0428235616111724 306:0.0299861452858594 308:0.0847037562493658 323:0.0653789601772941 342:0.0356976025196129 345:0.0280427815291719 372:0.113164780959509 381:0.0367331461018856 385:0.0399818187410257 386:0.0304340401169223 409:0.0585467412050723 411:0.0286290515030437 430:0.118964807363335 436:0.0337531465199137 442:0.292663736532282 480:0.0562126541962201 507:0.0204323635236061 510:0.0345469839699774 530:0.0314134893341204 557:0.0359639022123738 560:0.0455207493121087 574:0.0286123156865918 580:0.0345764776231269 592:0.0376421615552325 643:0.0310908488997703 671:0.0233368924378615 748:0.0564683767338063 767:0.0731065925858901 796:0.100771755987102 894:0.0604840454359342 899:0.0700913416471809 903:0.0850928612733886 918:0.0441837738343736 927:0.0981645240417685 952:0.0355994584010146 1009:0.0340578835696316 1059:0.0350291372744403 1164:0.0405404731656356 1319:0.0403338657558503 1379:0.0806677315117006 1446:0.0797667348751614 1507:0.0523771596786088 1627:0.051017489415431 1645:0.0436792441515734 1765:0.0557768083134081 1822:0.108642220048783 1942:0.0495644153253472 1943:0.0458617545472172 1973:0.120968090871868 2042:0.0490822620208842 2156:0.061588749049845 2248:0.0502000636836952 2416:0.0710036547847131 2468:0.0567094215284936 2902:0.0547168168644021 3300:0.0628237026217274 3503:0.652882215770418 3568:0.0642237775082431 4293:0.0612074347814576 6587:0.266633747990267 8450:0.288436665066627
+-1 6:0.0146764995819772 12:0.247343644690522 25:0.0550744578305763 27:0.0213672234428565 37:0.0694415024322872 39:0.0737023515038081 41:0.168949802100641 59:0.0455666294116756 77:0.055334685300561 81:0.0446794894382592 91:0.0586358833051248 127:0.0729817442513672 142:0.00570874513888429 158:0.052670624359626 166:0.0547538328992813 203:0.0556315184929784 222:0.28076248533798 249:0.0837446543495718 290:0.228928887505322 317:0.0437375580938166 336:0.134182484274666 382:0.064454041517724 386:0.116887877712186 388:0.0763096291684407 391:0.0759418596706545 501:0.0763096291684407 588:0.502911789882664 603:0.0785655182068784 618:0.315225939796772 706:0.0747051223809892 863:0.155107010399234 1003:0.0775535051996168 1138:0.0723621624362279 1153:0.102532411811219 1558:0.088406102841305 1605:0.119821409140714 2444:0.103945961938313 2474:0.140392173337739 2949:0.21875117875766 2954:0.136351704961101 3048:0.290904688339945 3416:0.116150397372361 3683:0.11549018018476 3998:0.142763713585695 4356:0.131495950303107
+-1 4:0.0924984584405451 6:0.0320766096988498 12:0.144156908948902 27:0.0622662629597119 38:0.0871123472337613 63:0.0462223557253576 75:0.0433391313960383 83:0.0277041744818124 86:0.332245149020041 110:0.103189860397351 142:0.0138632201066576 173:0.239755471193959 180:0.164790161116568 234:0.0767020174678792 317:0.0637278470169164 324:0.226576886901286 345:0.0784649444678104 351:0.0758790334242954 415:0.0930259751327627 442:0.0909873437913621 475:0.173280208648195 506:0.0598170804266645 594:0.204755397977387 655:0.0809612884815455 688:0.356086337719586 850:0.196026154405193 852:0.318329416950993 986:0.0956117762102289 1096:0.14009755592239 1140:0.108600539456699 1242:0.135730803679352 1254:0.147008465479437 1378:0.131119378335534 2270:0.314683444203846 3251:0.152541250869687 5572:0.198671370166988 6802:0.221802704304795
+-1 11:0.180436136771918 25:0.301356335359401 53:0.309235782279023 56:0.370700921375163 80:0.261442923496282 87:0.374070409642603 142:0.0208247353651944 323:0.343493068630938 2202:0.562920053043473
+-1 6:0.024633025441496 11:0.16603893847291 17:0.268456261665012 25:0.277310781090434 53:0.18970767883506 56:0.227414857419851 74:0.201937364079238 81:0.149980040390178 87:0.229481946142143 136:0.311985555370481 142:0.00958155338469392 178:0.0993997461474221 265:0.116353087934214 277:0.111539122865313 359:0.274263658562626 399:0.116133643873907 408:0.0725249249208533 431:0.137336024866557 434:0.106576088548759 611:0.478068922077091 622:0.135931906787643 749:0.143374782803885 844:0.134963523436701 1143:0.146181957580888 1666:0.177683758994374 1788:0.151658516485625
+-1 11:0.117833407576087 18:0.210549269149972 25:0.295200101199186 74:0.214964344616114 142:0.0577980702140331 294:0.25058681814341 409:0.0669585989242463 671:0.240208939020281 815:0.199978194765001 945:0.207522751376112 1369:0.730847632254895 1673:0.250834872215878
+-1 6:0.00929716131994347 11:0.041778351588497 17:0.0506612794676065 25:0.0697763272773942 26:0.040240677280819 46:0.155697719469299 58:0.06236608311455 79:0.0630488656775628 100:0.0574510758428018 142:0.0578613440559918 211:0.184927760444744 234:0.0666944889119219 294:0.0888466556912397 299:0.0769653180341205 424:0.0957565989768185 614:0.112438077768912 617:0.521356138809235 767:0.0889332762039921 793:0.111580527557909 1234:0.317615962300085 1269:0.094975058571581 1993:0.136252228159985 2333:0.143223863655788 2343:0.168488653812513 2365:0.385913269938565 2374:0.14984392067988 2966:0.484935946706028
+-1 6:0.0200111617606201 11:0.0899235070747978 17:0.0545215374638902 25:0.225279306902205 37:0.0473411636852234 74:0.0820240548141427 87:0.279636804437538 100:0.0618286986989138 136:0.380172145134385 142:0.0155675570712587 194:0.158547427197451 277:0.090611177079997 294:0.191233080479486 309:0.0736342924481747 323:0.0855928915897332 341:0.0835999267936468 358:0.397473730543284 359:0.111401956077038 396:0.101626527059523 423:0.0758073797463637 424:0.103053003267862 431:0.111567838700625 493:0.0893234669961961 538:0.0876721711943173 725:0.145465884304464 729:0.215389477437011 944:0.109485818777413 1101:0.38647602201558 1999:0.16566360394177 2202:0.1402705308316 2232:0.173962269039714 2504:0.147237691992852 2831:0.164495193964087 3304:0.179292529372145
+-1 6:0.047346483465399 11:0.127655612156793 17:0.051599264508913 18:0.101377761085283 25:0.213204672610898 37:0.0896074960751592 46:0.079290218237262 51:0.128624988112135 53:0.291705669709336 56:0.17484322114127 74:0.0776276880168988 77:0.214212067231343 78:0.0727478461086642 85:0.0580305425523416 94:0.113691943223449 111:0.0592187944797823 118:0.0620062479156402 132:0.0574315068055378 145:0.0794624753848528 214:0.0811277974200354 216:0.0823862528146277 242:0.0663520017508076 246:0.0978782734943053 249:0.108064320659855 283:0.0709849484124976 287:0.0878954600188455 423:0.0717442174452785 439:0.102059570242371 444:0.124396846307478 480:0.0696480879849343 495:0.104357821154672 502:0.130724831349797 507:0.101263679702068 564:0.117331457824489 744:0.116841216401286 762:0.126073687750782 798:0.444611803908343 807:0.123129179062199 876:0.0913876572050918 882:0.0711099624047234 885:0.132752239937823 1095:0.133663983472112 1142:0.156784282265566 1143:0.11238898208393 1185:0.149028830096476 1198:0.11280140383206 1379:0.099948193911288 1380:0.0975295162499417 1442:0.142406213398405 1559:0.1376691302262 1784:0.138216140421716 2373:0.151673350563039 2598:0.178424947580258 2825:0.127866262234403 3403:0.184222668817967
+-1 6:0.0339669166443419 18:0.0454559888657085 25:0.254925843579315 37:0.120535232784928 53:0.130795645242323 56:0.235189791972905 63:0.0183548571541131 81:0.0517025359141068 91:0.135705394155315 92:0.0560579563039085 94:0.050977449590136 106:0.0594398211479943 111:0.0531053129147166 112:0.0945467584878524 118:0.278025011075814 120:0.070748147328221 132:0.10300507353668 136:0.107550606995844 142:0.0110101452321321 162:0.0459912421036922 168:0.0630678153457099 177:0.177257788837922 186:0.0481875064759647 215:0.0540979721816845 216:0.0738810672190477 242:0.119004240003483 246:0.0877737614743557 249:0.193816494036101 258:0.0805262455593703 277:0.0769016395884299 280:0.088957837634265 283:0.0636567821212183 287:0.157643057380283 288:0.0881974050983309 290:0.0883045306085127 295:0.0721007451234319 308:0.0627429490188991 382:0.0745853956318015 400:0.0748249839374509 401:0.388563967388211 422:0.0774342286606796 430:0.132181909763242 438:0.0946875429489329 497:0.132904028073893 575:0.0886288944189609 591:0.089291491413461 647:0.0767050159960802 661:0.226742322598373 662:0.0885202706445056 749:0.0988510182796373 762:0.113058408181601 839:0.270395315781739 856:0.0637314608948288 863:0.0897439281034963 928:0.136862634417153 971:0.105894089267047 1116:0.0990204718077805 1319:0.0896299926323532 1472:0.0863488782497101 1668:0.137741974904113 1697:0.116036894727989 2154:0.116036894727989 2241:0.118649200576811
+-1 11:0.206619622757329 53:0.354109669053297 63:0.0993860671786398 87:0.428352592267777 112:0.511942447260651 174:0.337045852983772 431:0.512704753051929
+-1 6:0.0364516945799659 25:0.182382936274774 27:0.0353795307757329 33:0.067237272162225 53:0.0935758159953938 56:0.448701517686923 63:0.0262634238700059 72:0.226847483294521 77:0.183244697823497 79:0.164798545577694 80:0.0791135318237893 83:0.0314828816474742 87:0.113194998211603 92:0.160423353375529 94:0.145884258881043 100:0.0750834581956391 140:0.171723348896243 142:0.0315081843104414 146:0.218215134520633 151:0.191916363622992 208:0.273093938439909 246:0.251185774197019 264:0.100024145321056 293:0.115003294388708 409:0.0620533622670178 453:0.117854512642708 465:0.103320466075002 571:0.0958965001364546 580:0.10994224346407 671:0.0742039237791559 717:0.123132934708294 735:0.157993684731174 744:0.299850522001556 930:0.106382712780527 1015:0.151849194899939 2499:0.181905860844646 3921:0.188147294436686
+-1 6:0.0597614458142794 11:0.313306077364544 17:0.0271372375896689 18:0.0266584457652957 25:0.224258462244945 37:0.0942532779856534 53:0.115061030527698 56:0.229885158161222 63:0.0215290427590634 74:0.204130914781488 75:0.0201861198617816 76:0.0414323127458992 79:0.101318328255714 80:0.064852115926898 81:0.0303218406196472 83:0.0258076139852078 85:0.0305195943331375 87:0.185579760557637 91:0.0795867603020442 92:0.0657523034976116 94:0.119586405141606 96:0.0617113594459979 100:0.0615485242896436 106:0.0348595044990445 111:0.0311445232963356 112:0.277242855818096 136:0.126149803146677 142:0.0077485066376434 151:0.0786602618732061 158:0.0357450431338705 159:0.0599203739786078 160:0.0902778860137547 162:0.026972354224259 177:0.103955876181076 199:0.0232789603609069 204:0.0298966012854015 214:0.0426669708312167 220:0.079902707014252 224:0.0473619671595219 242:0.0697920814646792 249:0.113667013381794 264:0.0409966368477779 265:0.0470467907431779 275:0.0669786075364968 287:0.046226239933568 288:0.0517248837639388 291:0.080168815116989 294:0.0475916287523362 295:0.0422847209239886 301:0.0902778860137547 307:0.047825216373941 309:0.0366503107187085 341:0.0416105484439186 342:0.0465228463130401 358:0.0659454322281904 382:0.0437418869097242 384:0.053967771453926 396:0.0505830051482636 398:0.0387359267497942 400:0.175529590354194 408:0.0879752749238227 413:0.0430602222330151 424:0.0512930112409445 438:0.055531136629996 454:0.198761237846565 465:0.0423476912801807 471:0.103828467622935 473:0.0438471342319162 479:0.0630749015733387 480:0.0366295281396278 481:0.172173961784749 493:0.0889187010844711 505:0.0358231264498368 571:0.0786096992570754 582:0.0420048911495846 585:0.0617073068391389 599:0.0933905437156233 609:0.0705337575446411 625:0.0553665015889198 626:0.0940047063308811 647:0.089969949389892 671:0.0304137696562137 702:0.0593248474638633 729:0.0536033620419637 749:0.115945756561901 780:0.0505254701448983 805:0.0649201106949942 811:0.169688738509462 882:0.0373983614521496 886:0.0428949899523526 908:0.105941913406641 990:0.0670539757327228 1045:0.0258707300148711 1055:0.0543421659179303 1068:0.0586842046831269 1088:0.0639663834970261 1095:0.0702969569660772 1097:0.0797684964974521 1363:0.0563854487433137 1364:0.0724033555762435 1448:0.0625113353884044 1486:0.0680518308383568 1513:0.0830638658196841 1518:0.0638137054493053 1543:0.0698174501136767 1574:0.0763343996576661 1621:0.0813170812035991 1669:0.0745572830799333 1736:0.0713096085464774 1792:0.0587889143381166 1824:0.0705431716113233 2134:0.0678463451148036 2206:0.0642769546637243 2541:0.0987115755602019 2676:0.092535405351059 2679:0.0715749478178146 2762:0.0952774787204159 3058:0.0913464346389934 3604:0.0830638658196841 4375:0.100817974170368 4536:0.0987115755602019 4611:0.0843662358805849
+-1 6:0.0324484719018443 17:0.235753838796623 18:0.0578985877316475 25:0.162353153983147 46:0.0905680221722326 48:0.0661693462744235 51:0.0367299744981924 53:0.0416495346925176 56:0.0998559789657979 59:0.167906464556688 77:0.0407800686429244 79:0.110024946108711 81:0.0658549926262816 84:0.0317397599965401 94:0.162328573807396 114:0.0379744440222498 120:0.0450569651782966 132:0.0328001240088924 135:0.0985445329912674 142:0.00841436134909408 144:0.0321521596923208 160:0.0490178811399385 166:0.040351997159967 175:0.0523500927318549 181:0.0456479682513677 186:0.0306888997565369 199:0.0252793981431603 212:0.244923344713742 216:0.235261049139597 229:0.0283213850880273 255:0.100671596960631 291:0.0435289928026842 293:0.102373324740916 299:0.0447700624901037 364:0.100215711426863 382:0.190003085632804 457:0.0372914077567986 461:0.0591777655015271 567:0.0586858271132562 767:0.103463441321383 807:0.0703211976664315 824:0.0604840732126827 913:0.0564445736098183 921:0.146480277811256 1032:0.0714208697344431 1075:0.302253732469946 1196:0.0678831404514896 1465:0.256798488254878 1512:0.554263407593222 1649:0.0614235503459885 1776:0.0626355528696882 2026:0.065152750444671 2066:0.0724039299462577 2251:0.0780194658432081 2373:0.173246532575119 2487:0.0969087264253928 3935:0.11218702484392
+-1 6:0.0506421625002155 11:0.227569039336478 53:0.390013282043699 63:0.10946294223873 75:0.102634942815749 87:0.471783786161279 142:0.0262645005943799 265:0.478412365591134 431:0.564688515825561
+-1 6:0.0603498010915354 11:0.27119193929544 25:0.362346081964229 37:0.171326173623806 53:0.185910102036373 56:0.111431228316991 63:0.0260891970834519 74:0.0989474864472098 75:0.0244618242119704 80:0.235766121043644 87:0.22488816628179 136:0.152870107285509 142:0.0093897494205501 174:0.088475738443785 277:0.109306327715743 323:0.103252655574549 359:0.134386718190196 431:0.134586826179083 611:0.156166305671871 709:0.105260407941153 792:0.264898908378949 805:0.157342208063402 903:0.134386718190196 927:0.155030727974845 953:0.263779407766093 1056:0.118523332443046 1236:0.133018828180409 1301:0.158561404809652 1999:0.199843780497888 2112:0.194533589266827 3301:0.244345280663052 5471:0.267300770536258
+-1 6:0.0514029723343045 11:0.131993066145879 17:0.0400143696289574 18:0.0196541910181778 20:0.0207115264695988 25:0.46845389877923 27:0.0106909376678698 29:0.0133346838802241 34:0.0292611419671564 40:0.0458822356196632 46:0.092232364086075 50:0.0348511185731933 53:0.0848298318907897 56:0.101691002930708 57:0.027411617069804 58:0.0246296533396039 59:0.0227989376381989 63:0.00793624509377801 65:0.0525352628507019 68:0.0225400971634004 72:0.0228494862315354 74:0.0601989782473164 76:0.0610927280759088 77:0.0830589439477128 78:0.0846221132686816 79:0.0746978947952243 80:0.0239064176055526 81:0.0447101269750021 82:0.0275399540093745 83:0.0190269072493711 84:0.0215486881557264 85:0.0225008592812136 86:0.0285227666619695 87:0.307845971751116 92:0.0242382535014401 94:0.0220415517705281 97:0.0458209625049345 101:0.071370662415772 106:0.025700499055919 111:0.0229615940638646 112:0.122639948959835 113:0.0393096960042527 118:0.0240424059045708 128:0.0394667014705778 135:0.0669036379327376 136:0.0465025671372411 142:0.0114253194580545 144:0.0218286736515481 145:0.0308109126355105 154:0.0265416811895507 157:0.0372081398753652 158:0.0263533707813031 159:0.0220884309315087 160:0.0998373366579462 162:0.0198856229954583 166:0.0273956892980814 168:0.0272691656442843 174:0.0538280379343871 177:0.153284903847226 178:0.0296317780684187 181:0.0309912183614006 185:0.0427617053181394 186:0.0208352404292928 199:0.0343252669466177 214:0.0314566273768081 215:0.0233907985611331 227:0.0260983112461308 229:0.019227892569656 242:0.0257274357391221 246:0.0759029697713771 252:0.0264979114747217 258:0.0696356300542176 262:0.0343627686785751 271:0.040522277475181 275:0.024690305621035 276:0.0285227666619695 286:0.0205731296831868 290:0.114542934099022 294:0.0350873779589319 297:0.0358681731326144 299:0.0303951925098612 308:0.027128700438228 309:0.0810623635844672 319:0.0666153837025879 330:0.0365158945789297 333:0.0370409275136056 342:0.0342994080073549 349:0.0363985226084005 353:0.0823761799641107 359:0.122639948959835 364:0.0340191153631462 377:0.0282592560807243 382:0.0322491194118463 396:0.0372927984703319 399:0.0346202731387723 402:0.0839567210635359 403:0.0425243920054075 406:0.0344265303693707 408:0.0432404017711706 411:0.0275077161786136 423:0.0556364448780037 430:0.0285763060980744 436:0.0324311119600395 442:0.031244528731968 454:0.0366346501408888 480:0.0270054657087012 493:0.0327780762537464 506:0.102704200945736 507:0.0196320739653516 509:0.0340807321516551 515:0.0265270701449069 526:0.0881309062861527 528:0.0768316422998495 532:0.0424531951471319 534:0.0279855736878453 542:0.0521934747610953 549:0.0392063688059913 550:0.0299138772783124 569:0.0514735747544089 575:0.0383212259618064 582:0.0309685028759795 586:0.0269901668241878 607:0.0360168741868255 614:0.0444041174196115 615:0.0975011704645189 631:0.0246417546185557 634:0.0412508584936205 638:0.0448441137021696 679:0.0461893508157003 681:0.0401768385987833 700:0.0453988031596338 706:0.0373781745195703 716:0.0703118219364633 729:0.039519585127532 740:0.052573682657392 771:0.0389525943417457 776:0.0915726490649769 778:0.0350873779589319 792:0.120872021583009 800:0.0647575554923224 803:0.137656738967125 807:0.0477423130929884 827:0.0313618096084943 852:0.0364374948562907 860:0.0504818585983479 885:0.102947149508818 891:0.0516487846230783 904:0.0447545636590608 914:0.0470472572752581 939:0.1601401739675 971:0.0457863245324885 974:0.0471598206084924 988:0.0542566378804212 998:0.0406401070466513 1009:0.0327239131473878 1015:0.0458855796557082 1023:0.0518270957118787 1045:0.0381468802771626 1078:0.0932183492485955 1083:0.0393617597558703 1093:0.0466091746242977 1097:0.0588100777215878 1162:0.0425960956071512 1169:0.124132743267666 1212:0.0577846869486037 1239:0.0983126342373756 1247:0.0568540891610878 1319:0.038754079277837 1373:0.0425960956071512 1377:0.0350193080140413 1404:0.0497240342690525 1453:0.0516487846230783 1553:0.0511320398941483 1564:0.0588100777215878 1576:0.040699542697018 1584:0.0492952753702764 1594:0.128895645235532 1662:0.0506405124838072 1666:0.0529688044180203 1680:0.0607917988976519 1687:0.0562782573799855 1692:0.0544882414945992 1719:0.0673460220085849 1741:0.0557335672419685 1746:0.0428881251416697 1874:0.0568540891610878 1892:0.0975011704645189 1899:0.0527693065421976 1979:0.0542566378804212 1986:0.0568540891610878 2001:0.048108692142205 2026:0.0442333622552004 2187:0.0513013600733685 2191:0.0657930597312968 2487:0.0657930597312968 2488:0.122479239780261 2831:0.0603630399988758 3076:0.0702442213994037 3129:0.0691827865324568 3870:0.0702442213994037 3985:0.0682226018998394 4098:0.0657930597312968 4893:0.0673460220085849 5558:0.0813119860280031 5571:0.0813119860280031 5926:0.0813119860280031 6673:0.0784137866371842
+-1 6:0.0327480133301411 11:0.0905591894888185 17:0.0137267395451648 18:0.121360984676857 25:0.0756239464159132 26:0.0109032638330429 27:0.0146699016599517 37:0.0119189563225811 38:0.0410472543731653 41:0.0231988680130859 59:0.0156421346515245 65:0.0180219725257521 74:0.123905842268417 77:0.037990635232253 78:0.0193528094927181 82:0.0188949009707217 85:0.0154376259208695 87:0.0234677998231343 96:0.0156076268871182 98:0.0163404583650483 100:0.0155664437016026 111:0.0630149267233995 113:0.0539400184137342 114:0.0530653809203635 118:0.0164952664231074 132:0.0305565338230665 135:0.022950975388154 138:0.0211237658937346 139:0.0412165272846378 142:0.00457263520216605 144:0.0149764457423497 148:0.022143514756989 151:0.238730767725382 157:0.0765844544995034 158:0.0180807974838278 162:0.0136433371352904 166:0.131571456254064 168:0.0561273469332123 176:0.0261149709628264 177:0.052583658591333 179:0.0137319857623836 181:0.0212627806749912 185:0.0586768000447926 186:0.0285897212812088 194:0.0399170555330871 203:0.019097214658431 204:0.0151224993986336 218:0.0428675084975785 220:0.020208461611358 258:0.0716645169483783 275:0.0677591370686395 283:0.0188838330886868 284:0.0458939610388146 288:0.104655310635127 292:0.0745215546849032 294:0.0240731168843139 295:0.0427774823392151 296:0.0454319752572465 307:0.0483825434838041 309:0.0185387060058242 324:0.0266907028884206 330:0.0501064171487961 341:0.0631431801708417 358:0.233498726087733 363:0.0235324981818322 364:0.0233401920598488 382:0.0221258146426968 386:0.0200626636851536 387:0.0177821187974689 391:0.0260693584316592 394:0.0234677998231343 396:0.0255862349580592 398:0.0195936662962862 404:0.0211544173446485 411:0.0188727829011152 419:0.0306447830984079 424:0.155672250014062 434:0.021797848188421 439:0.0271504865842902 458:0.0265216995825501 459:0.0230109921836525 475:0.0204123669837845 480:0.037056387244542 485:0.0174327733673769 493:0.089954907639204 505:0.0181202941104668 536:0.0322023012697918 546:0.0217642136166779 576:0.0246596359956514 594:0.0241201367313152 613:0.0232981743568732 628:0.0273734701427941 638:0.0307671206434786 641:0.0398654741982113 706:0.0256448106548481 709:0.0439370416630849 720:0.0250802610193188 721:0.133427843478704 729:0.054228024283159 730:0.0242151470362939 737:0.0296840380469342 744:0.0310827869533616 754:0.0307056812091248 778:0.0240731168843139 800:0.0222147719948432 827:0.0215170398110838 834:0.0253850430573935 847:0.0268639423041855 848:0.0556845050522269 856:0.0189059866039783 858:0.0252726521119008 866:0.0281734244111259 876:0.024311481569285 932:0.0684321862414724 939:0.0366235509751889 969:0.0563468488222518 987:0.0205658158680459 1003:0.0266226048907466 1056:0.0247365780612835 1058:0.0565175149616588 1105:0.0316199029713968 1117:0.0300636097695959 1129:0.0293744986735336 1141:0.0335388632323333 1160:0.0319049697992746 1214:0.0366235509751889 1225:0.0449402430792125 1245:0.024634177805346 1318:0.0333569608696761 1337:0.0324340064582907 1389:0.0321267607271391 1393:0.0288406840261032 1481:0.0442170392051785 1497:0.0305844168557113 1524:0.0456522198314918 1548:0.0277220426987305 1558:0.0303480898744265 1571:0.0390070507784313 1593:0.0382382713283976 1608:0.0272983401546753 1638:0.0378837376760556 1764:0.0442170392051785 1784:0.0367690698416661 1788:0.0310184898305999 1791:0.0706310618574402 1816:0.027682432900623 1831:0.0341151878125397 1877:0.0408612621737967 1923:0.0373838651567379 1944:0.0451399936165639 1993:0.0369177183848342 1995:0.0325929074990428 2005:0.0442170392051785 2039:0.046806879431376 2075:0.0411323514623229 2076:0.0314135625484417 2083:0.686111956080231 2118:0.0375465053865743 2137:0.0355580783011737 2228:0.0398721647614562 2261:0.0382382713283976 2311:0.0373838651567379 2378:0.0998619025485181 2414:0.0401064885864152 2420:0.0474656529914459 2469:0.0446631224191514 2495:0.0373838651567379 2535:0.0423374630442694 2631:0.0364810327125591 2803:0.0434029357182847 2826:0.0860584579721854 2910:0.041414508632884 2923:0.0437980084361265 3342:0.0792910501699722 3606:0.0499309512742591 3633:0.0462054662905792 3736:0.0456522198314918 3961:0.0426746953337507 3991:0.0451399936165639 4551:0.0446631224191514 5112:0.0442170392051785 5376:0.046806879431376 5719:0.234359648713056
+-1 6:0.0229755678860003 11:0.0147492232160868 13:0.130885842628583 17:0.178852082686292 18:0.070278613002494 25:0.197067923856789 27:0.0573422943457026 30:0.0197289296541412 34:0.0784730520230596 37:0.0155297633114301 41:0.0151134428042904 46:0.219867020250807 51:0.0222918361611347 53:0.202220582232921 56:0.242414883563268 58:0.02201741442625 59:0.0815234630446535 63:0.00709452117773144 74:0.0269071154561628 78:0.0252156768343645 79:0.0222584606151739 82:0.0246190464942214 83:0.0425222491342992 84:0.0192632186464336 94:0.0591114263653498 96:0.0406718079754769 101:0.0319005190738367 106:0.022974685468501 112:0.0365442223137987 114:0.0230471187638814 118:0.0214924508804949 119:0.309072701433554 120:0.027345580806814 132:0.0199067655357919 137:0.0268699779828721 142:0.0161714411548375 144:0.0390270173546201 159:0.0987285795579225 160:0.237996043344111 166:0.0244900826029385 179:0.0178920438093831 181:0.02770426724359 183:0.115499752848375 185:0.0191131839043942 186:0.0186254397038004 190:0.0281416302118785 199:0.0920541126464144 203:0.024882650420585 204:0.0197038087884499 219:0.0274437914258063 229:0.0343771366500556 234:0.0470909869270958 242:0.0459975304550573 280:0.0343839920802687 288:0.034090069622299 293:0.0310657632298036 294:0.0313659851805571 295:0.0278683870385654 299:0.0271714563265561 317:0.0391255316331453 319:0.029775053873477 325:0.029473154391842 337:0.0752794401587788 341:0.0274240634343227 342:0.0919847636822382 348:0.0326078818193766 351:0.0232928590993094 359:0.0365442223137987 363:0.0613231757881588 382:0.028828754395439 388:0.0682629515698891 396:0.0333374971914698 400:0.0289213600907106 422:0.0299298856156658 430:0.0510909646560862 436:0.0289914446818514 438:0.0365986383374292 439:0.0353756334894326 448:0.0297240292355056 460:0.0447151633851454 465:0.0279098886074529 466:0.060658054714891 475:0.0265962236377737 480:0.0482824928214699 495:0.036172247484056 504:0.0348661708314048 505:0.0236097751391131 506:0.0367245275336952 507:0.0175498819484762 510:0.0296732920618082 516:0.138042750144522 517:0.0365986383374292 534:0.0250174034260913 549:0.0350481128681527 576:0.0321301882475191 582:0.0276839609790432 586:0.0241275701370194 591:0.0345129559715516 597:0.0293502899417073 614:0.0396945844904522 630:0.0454136392330443 657:0.034090069622299 661:0.0438202323247636 662:0.0684297272894041 671:0.0200446564517893 695:0.0648000917521535 702:0.0390989410359066 709:0.0286238089630146 721:0.0434623378989382 739:0.0670590526227874 772:0.0304110232911969 781:0.035568278792485 789:0.0337257393997411 807:0.128036186121937 811:0.0372786461045697 829:0.0243489225889532 872:0.0374569850908551 882:0.0246479576731793 885:0.0460142500481741 908:0.0349113129034215 909:0.0288981192403648 921:0.0444502670967919 986:0.0293502899417073 996:0.0365442223137987 1000:0.0398498611734533 1026:0.0454136392330443 1027:0.0342990308415443 1035:0.0400879144478622 1097:0.0525726381846426 1098:0.184098256288161 1112:0.03954193974274 1116:0.0382734024226299 1127:0.0378246208096919 1129:0.0382734024226299 1150:0.0358150291458035 1175:0.0347765598979151 1185:0.0516560011014345 1245:0.0320970175856691 1267:0.0440669826780821 1308:0.0383393794540593 1333:0.0466577969375324 1335:0.0352808344613419 1342:0.140993039124996 1442:0.0493604862320736 1534:0.278014240502319 1543:0.0460142500481741 1548:0.036120340570844 1568:0.0487091790453709 1570:0.0543441765741221 1621:0.0535932564365754 1707:0.075034449888594 1714:0.0505630465207543 1747:0.0493604862320736 1781:0.0416657717272249 1890:0.108688353148244 1942:0.0425721496585612 1995:0.0424668171769807 2099:0.047718530287022 2101:0.0602032540238025 2108:0.0493604862320736 2219:0.0471725555818999 2222:0.0609868632154281 2256:0.0996448492798338 2334:0.0547445013470379 2383:0.0522566119165643 2396:0.0609868632154281 2398:0.047718530287022 2466:0.103902600983048 2488:0.0547445013470379 2514:0.0602032540238025 2558:0.0547445013470379 2645:0.0556028481004638 2741:0.051370077895962 2912:0.0535932564365754 2960:0.0516560011014345 3009:0.0726879777605829 3066:0.0664456158921927 3081:0.0602032540238025 3090:0.0602032540238025 3091:0.0602032540238025 3092:0.136175143674488 3207:0.0650573619214231 3362:0.152679050739046 3363:0.152679050739046 3367:0.0594824034451125 3392:0.0700971635011326 3524:0.0680875718372442 3582:0.0588150000530329 3632:0.0650573619214231 4141:0.0700971635011326
+-1 1:0.461897825067712 2:0.294341280893552 3:0.183783568851665 4:0.155939427121545 7:0.223858224081233 12:0.243028329078088 75:0.292254787194647 83:0.0934107047923621 108:0.333725793116483 142:0.10283435645232 524:0.40753833561171 719:0.38803492879659
+-1 1:0.538721049744671 2:0.128736136452028 3:0.32152590388278 4:0.136406550295814 5:0.0885242745587166 7:0.195817880480397 15:0.0540215128803397 20:0.533667920736178 30:0.189554125633977 44:0.273090195780844 63:0.0681636450740925 66:0.147980640924861 75:0.0958676745464436 142:0.147196453334245 270:0.178803415498701 1045:0.0819099705582109 1124:0.175297276592222
+-1 1:0.121084261621122 2:0.231480392810161 3:0.144533898135824 5:0.159175460852223 31:0.108062139180616 32:0.212534883990051 45:0.249022930153316 48:0.173446493678853 54:0.212286345890827 142:0.0294082089813311 209:0.178101462950353 409:0.144793986505433 506:0.15861332975912 1046:0.31853302790177 1339:0.342219960306911 8912:0.627879129308588
+-1 1:0.542692415399938 2:0.3458270899124 3:0.215930761042899 4:0.366432313675727 5:0.237804963710831 15:0.145119335618983 75:0.171687814671575 142:0.131805832987635 187:0.394961641984182 346:0.352894924572002
+-1 1:0.0984035964340003 2:0.188121088996272 24:0.185455863226645 32:0.172724321660775 45:0.202377679754084 48:0.140957697873833 54:0.172522337996779 142:0.0238996669732414 209:0.14474073054441 506:0.128902979476457 671:0.140713365847768 867:0.202539576982262 959:0.256160511566214 4502:0.477974338381094 5845:0.422626475492485 7545:0.477974338381094
+-1 1:0.100721948727732 2:0.192553152192928 24:0.189825134691086 45:0.207145622949865 48:0.144278609039961 54:0.17658690039601 142:0.0244627342772295 193:0.228753551596717 209:0.148150768559423 506:0.131939885940933 671:0.144028520641837 867:0.20731133441679 4502:0.489235236802359 5845:0.432583398759072 7545:0.489235236802359
+-1 1:0.308357227930737 4:0.039038706340459 5:0.0506701936381415 9:0.0690412213291608 29:0.0327778641668051 30:0.108498423722316 41:0.04155787338769 42:0.0539968712298843 44:0.0781567156007314 47:0.0427171109312875 73:0.392289211950952 75:0.219493857797599 77:0.0680554761555313 142:0.0772323007212886 169:0.0657869382173992 187:0.0841562874327222 227:0.0641520195523604 254:0.0871019631090277 367:0.154064500173331 462:0.22180652059396 508:0.070024201606862 610:0.116202939995939 849:0.225581845161019 850:0.0827322704171619 930:0.0790192159335435 1045:0.0468842483010254 1064:0.0836220755185494 1962:0.439187073849118 3127:0.526750217500987
+-1 4:0.0497611102561871 6:0.0230082063172272 15:0.0394140963584958 27:0.0669943786873061 29:0.041780659905636 63:0.0745982942308805 75:0.0466300375630981 82:0.086289068613691 83:0.119231434053118 142:0.0298318149670177 168:0.0854406258092076 199:0.053774514542249 218:0.0652556543831104 228:0.174010653402271 283:0.0862385239067463 339:0.178960367990691 499:0.17137561847899 500:0.119053318242315 507:0.061511844821841 534:0.087685298505654 673:0.11631869461104 716:0.220303259234343 1045:0.0597615153698853 1056:0.11296678849524 2375:0.179079372217673 7473:0.25476932674243 8557:0.802703696598508
+-1 6:0.025762802352944 11:0.0385898224761504 18:0.137907560956075 29:0.0623769837297016 30:0.0258093555790582 63:0.0928104174677287 75:0.069616925653115 83:0.0222510164954248 86:0.0333559491919851 92:0.0283454253185924 98:0.362082747586074 106:0.0300554483678794 142:0.0244957895008203 154:0.0310391688057721 162:0.0232552416162309 173:0.0320938573589779 198:0.0747737256538101 199:0.0200708415463658 200:0.0414806404042945 209:0.026972901273862 218:0.0243560710919816 226:0.0998810054622859 228:0.0324739356695873 229:0.022486058776253 234:0.0308021785133965 252:0.0309879823131963 285:0.0457899312208869 286:0.0962369852217014 318:0.518281267901567 345:0.0630202778578378 353:0.0481674114239479 355:0.0516846211638447 375:0.0608782745680927 389:0.0365935840127611 408:0.0505674874255202 409:0.0219285896834472 426:0.0386542373139187 457:0.0592158034688124 505:0.0308862717029898 506:0.072064456070816 530:0.0352976188232451 531:0.144944042743697 534:0.0327277288736851 543:0.0475265727855354 613:0.0397120344174966 626:0.0405248674366973 655:0.0325126266923485 663:0.0401855394927998 676:0.0429358949583055 755:0.0448147573236969 824:0.0480219601216652 829:0.0318532232656294 850:0.0393603245430405 912:0.0408349223266564 921:0.0581497713863258 922:0.0610376585454294 933:0.199593833888698 936:0.0502424655638507 963:0.0728606573272932 987:0.070109389265069 1033:0.0514353768936609 1059:0.0393603245430405 1067:0.0456709261096197 1248:0.0552841763925148 1292:0.0515323437442714 1305:0.0390525199454848 1314:0.0500692064730788 1350:0.0608214798959261 1377:0.040953329412196 1388:0.444440201894678 1416:0.0518281267901567 1485:0.0535448167736745 1503:0.116299542772652 1664:0.101924328910047 1688:0.0578131368892845 1755:0.199464042028827 1863:0.0517287050537915 1904:0.0599943750326517 1936:0.0578131368892845 1972:0.0624253082898136 2001:0.0562607095519898 2090:0.0692039067879243 2163:0.0542590600473187 2298:0.0599943750326517 2444:0.0608214798959261 2569:0.0645733125441696 2674:0.0634504246350098 2775:0.0634504246350098 3335:0.125853440759531 3546:0.0621823840991031 3611:0.0634504246350098 3662:0.072164744061481 3824:0.072164744061481 4070:0.0787578047748036 5058:0.0787578047748036 7691:0.0950903012597935
+-1 2:0.0666584680361503 6:0.0326574886358277 15:0.0372958351228286 20:0.0307031861334679 26:0.117792178330222 29:0.0197676053383334 30:0.032716500517841 60:0.123936869456363 63:0.058824251962489 75:0.0330929734549732 83:0.0705146812427327 92:0.0359312776823694 97:0.0339629612203786 132:0.0330114059088637 142:0.0183485519368027 169:0.198373241233921 173:0.0406828716698563 228:0.0823293344071287 256:0.0370406866321832 408:0.0641004469668095 411:0.0407779953437175 472:0.0991793073036003 485:0.112999797898535 505:0.0391521098258245 534:0.041486380989399 586:0.0400107697031779 612:0.0633602011413852 767:0.0520649503834513 850:0.0498940035271412 909:0.0479217752643551 930:0.0953094848871042 950:0.118618707305173 985:0.0697438066340354 1009:0.048510591329638 1155:0.12672040228277 1175:0.0576699983148881 1246:0.0765652039301615 1296:0.110820325222108 1317:0.21179229397134 1405:0.077098630859482 1551:0.0582734891626745 1620:0.131651125205849 1649:0.0618192099604633 1746:0.0635782249595657 1782:0.0670209497194295 2251:0.0785220279973521 2972:0.0929722822771918 3666:0.077936291500346 3719:0.272348556875719 4973:0.0965025988793851 6523:0.101134566190226 7120:0.25318779731768 7211:0.104131455863099 8543:0.506375594635359 8544:0.506375594635359
+-1 6:0.00961185580584199 20:0.10843991141599 29:0.0698167728416466 31:0.036635247692025 54:0.0719693587626144 63:0.0831040354469387 75:0.0779202326505404 83:0.0498098520085089 92:0.0634524467917066 142:0.0274174361903495 208:0.0720114548303218 218:0.163566320242014 234:0.0689519938833995 275:0.0646358576783023 317:0.057288742366559 346:0.160160781802985 367:0.0820392548826931 408:0.0565987415816531 432:0.180583901515291 455:0.0701806611657351 502:0.0663464389121698 505:0.138280480169241 506:0.0537731222706029 510:0.0868969960605712 549:0.102636934233334 609:0.0680666571291003 613:0.0888970873622353 726:0.0885793343519756 806:0.103180730423097 882:0.0721805142606367 904:0.117161352780384 963:0.0815508486873257 987:0.0784714330785309 1207:0.109515978168881 1242:0.122016471718059 1416:0.116019478293352 1820:0.122583658757089 1897:0.256651439130294 2223:0.122016471718059 2399:0.139741722277744 2941:0.276285716328951 3719:0.641267939935021 4871:0.162830617589658 5565:0.174191733329648 5743:0.178597480911079
+-1 1:0.356922744244091 2:0.113723308510326 3:0.142015251385722 4:0.120499221350337 7:0.172982177712072 15:0.0954433672595836 20:0.785721907158003 63:0.0602146021434933 83:0.072181342467627 142:0.101135096043489 2340:0.386690227519681
+-1 1:0.291484288120685 2:0.18574640119427 3:0.115978079626492 4:0.0984068130171599 7:0.141267508840756 15:0.0779447160769201 21:0.137626664537184 32:0.170543990141616 47:0.107679150825034 75:0.0922148513936019 83:0.0589475665646655 142:0.0707939309788246 176:0.117924981901611 227:0.161711193442382 766:0.302896744193465 886:0.19595420769671 986:0.203437988965107 997:0.216360389873287 1080:0.230030077143737 1409:0.298868069988984 1598:0.238033343484798 4784:0.371475182466766 5978:0.399333666151559
+-1 2:0.0905793492889517 6:0.0221884342469464 15:0.15203915914097 26:0.0960376604397214 29:0.0805840674695374 32:0.332663535936019 48:0.135740831810021 129:0.228802123708613 142:0.0172613524688486 221:0.21121983593571 373:0.158397372184548 409:0.226634228832875 420:0.225625001810157 689:0.554590821959896 808:0.231582562148425 895:0.230735016855389 963:0.188255596050621 1059:0.203396500372233 2864:0.327883330935975
+-1 1:0.610367973921266 2:0.0729286657853056 3:0.364287073262033 4:0.231821802136113 5:0.100297514141804 7:0.221860577051935 44:0.309409683500426 63:0.115843550085933 66:0.167661248847965 75:0.362058485897227 142:0.15287503791907 269:0.190762125530673 276:0.138780095177324 356:0.170389603394003
+-1 2:0.122232085348046 4:0.129514971920907 5:0.0840518208907643 6:0.0299421293032303 26:0.129597790220894 27:0.0871842994446271 29:0.0543719881515565 31:0.0570616822395409 63:0.0647198580907785 75:0.060682810075611 82:0.224587559261579 142:0.0310577208419307 162:0.0810833513270515 169:0.109127507731455 187:0.139598621798089 228:0.113225894545488 351:0.106244699090309 472:0.272798653620105 631:0.100476411903599 1059:0.137236459458785 1251:0.196672814137011 1418:0.190048261600301 2120:0.221230686717111 2873:0.431959127353579 5151:0.25794682419509 6391:0.572839672533656
+-1 1:0.396836239569647 2:0.25288122333719 3:0.157896349364911 4:0.133974252531905 5:0.0869457770848491 7:0.192326205104155 15:0.0530582423871198 20:0.698869280845467 21:0.0936847203181612 23:0.111398075751048 26:0.067029961158599 30:0.0930870703829025 32:0.11609208195294 47:0.0732989581856415 83:0.0401265721698487 142:0.080317643462936 997:0.147280054205853 1573:0.199880071179797 5414:0.277506998376766
+-1 2:0.159970735110407 32:0.293755866021677 134:0.280652972066601 142:0.0101616658584171 176:0.203121523985295 209:0.246163587390942 515:0.283117744589947 963:0.332475186952341 1388:0.507013471448318 1447:0.509543493893507
+-1 2:0.328127692059513 3:0.20487944505333 11:0.180597312106702 32:0.301272086672952 111:0.251334546015386 142:0.0208433371472671 166:0.299869561031382 6314:0.757265553813553
+-1 4:0.0303060230545578 6:0.0350317360034793 13:0.0232827817779855 17:0.0190891876222544 18:0.018752390373188 25:0.0525834884940752 27:0.0612024081025451 29:0.101782748480971 30:0.126342137289417 32:0.0525218726080157 41:0.0483925052998151 46:0.0880004318053301 48:0.0428623032336384 51:0.0237924566788996 77:0.0528319461042414 79:0.0237568343898397 81:0.0213293376943015 82:0.0525526558651831 83:0.0181538885016763 84:0.0205599615854216 94:0.0210302109534549 120:0.0875592134271751 137:0.0286787854755132 142:0.0454211967686819 145:0.029397203932785 159:0.0210749391402453 162:0.0189732034699361 165:0.0680269079390015 169:0.102141728207781 179:0.0190964833114067 181:0.0295692366231809 185:0.020399826948037 190:0.0600720831473802 199:0.0163751539010569 203:0.106230707584357 204:0.105151054767274 213:0.0361669422311445 215:0.0223175497456644 219:0.0292912263432864 227:0.0996033304277476 229:0.0550369558105588 243:0.0330317781141035 264:0.0288383255695338 283:0.105043745216031 286:0.0588874950885323 294:0.334774505879656 309:0.0773429486415038 314:0.0279551594291884 347:0.0575563745840967 369:0.0313260647038448 408:0.0412563861395532 414:0.0776518321915793 432:0.0329081484998817 433:0.0566584342682586 441:0.0247026385750631 454:0.0699074573959043 457:0.0241561344833625 472:0.031916936564338 483:0.0340134539695007 507:0.0187312881254223 508:0.108720563113291 517:0.0390623504881203 527:0.0334125039219802 539:0.0325465232813866 555:0.0403708624765251 557:0.0329697645441849 586:0.0257517668397813 603:0.0375060344249895 609:0.0248078332774896 621:0.195143717039419 622:0.077325957127661 631:0.11755553857701 636:0.0716563115955717 695:0.03458112119292 710:0.282596037335676 724:0.0409912112591801 727:0.0750120688499789 789:0.0719921129719404 806:0.0376056422593356 827:0.0299228238925812 829:0.0259880200844819 837:0.0760294565043195 853:0.0741402960103215 918:0.0405052992133765 982:0.0784774473867547 986:0.0313260647038448 998:0.0775508034334359 1017:0.165121271456968 1018:0.0380147282521597 1028:0.0426163847783401 1081:0.155786164059838 1098:0.0392982413448176 1105:0.0439724421398444 1127:0.0403708624765251 1150:0.0382259910419906 1167:0.0447823584606404 1235:0.205313383964129 1284:0.0491117933475566 1314:0.0408498547410892 1321:0.0406416429177962 1322:0.0393581298251383 1331:0.0396014863676452 1363:0.0396633005356408 1395:0.0748148964549235 1433:0.0337752665962481 1439:0.0412803178642421 1491:0.0402382800987027 1608:0.0379626301842578 1808:0.0352234237041821 1865:0.0415783904304245 2050:0.0451045809229921 2175:0.0545323803577085 2307:0.0491117933475566 2466:0.0554485084773815 2558:0.0584297393580458 3093:0.0505384168256574 4795:0.059838902213731 5134:0.0650923185755726 6116:0.58136820730218 6117:0.0726710259127725 7056:0.0726710259127725
+-1 2:0.0482476263228075 4:0.102244675784691 6:0.011818800782282 7:0.0366942343662106 15:0.040492278837568 17:0.0322009884952064 20:0.166673030651236 26:0.0767325420780683 27:0.0172067566745779 30:0.0710409436975965 32:0.0442988001654329 63:0.127731582093921 67:0.0334272218246251 75:0.0958112278428142 82:0.0443247638504652 83:0.0612465198994885 94:0.0354752435967721 97:0.036873760605063 100:0.0730333482175156 132:0.0358406521392963 134:0.0846457304413164 142:0.0628281370634651 162:0.0320053382439576 173:0.0441696017301536 176:0.0612620263362419 198:0.0514541715111828 204:0.106425730790316 213:0.061008949869305 218:0.0335203695776131 226:0.0458208578911789 228:0.0446926896038895 229:0.0618934800836637 234:0.169567645564079 256:0.0402152628170345 322:0.0512139550014645 339:0.0459639684216104 345:0.0433662514101884 408:0.0347970914667098 524:0.133605162477523 609:0.125542810375253 631:0.0793203905828453 829:0.0876768516621414 844:0.064754814635402 895:0.0614511859503022 997:0.0561996096535158 1038:0.0784626647254504 1094:0.0608641782125583 1164:0.062693080205331 1332:0.0726155459253662 1788:0.0727649877006412 1849:0.0730680678863714 4131:0.102743929913163 5032:0.117130945935626 5119:0.791392377427341 6759:0.122586613723883 7590:0.252409468376806
+-1 1:0.248915632593274 3:0.118848630545309 4:0.151263691394312 5:0.130888226102691 20:0.789058682731585 21:0.0705165176878248 23:0.167698731498815 26:0.05045347230159 31:0.0444291526799607 32:0.0873825456557822 47:0.0551721482846219 63:0.151175798382686 75:0.141745864900043 83:0.0302032831667469 142:0.0816144050384788 256:0.158654953454514 267:0.249600602778873 375:0.0826354951406894 408:0.0686397469552883 886:0.100402116112575 4617:0.23104915240823
+-1 4:0.196871443908248 63:0.0983785250685112 75:0.0922419413200445 111:0.284634323982241 142:0.0118024546814251 169:0.331762261900039 297:0.444625629374156 402:0.346912101387196 440:0.513713733019338 448:0.412178085317577
+-1 1:0.362077900938176 2:0.11536585296734 3:0.144066426004458 4:0.122239632623067 7:0.175480618189095 15:0.0968218883024952 20:0.47824221367695 30:0.339734809353874 63:0.0610843021397183 75:0.114548060354104 83:0.0732238821679144 142:0.0952675514725358 186:0.160366282353652 1614:0.357112585868928 3737:0.5010513275184
+-1 1:0.462816175352147 2:0.221194870074517 3:0.276223454016134 4:0.234374201382368 5:0.152102711399552 21:0.163891800785159 26:0.117262035938559 31:0.103260542052189 44:0.234612254333412 47:0.128229002679662 75:0.109813444254111 142:0.140507472053681 176:0.1404301826714 187:0.252621878480482 229:0.141877656259889 238:0.267153926184188 356:0.258398434819432 506:0.151565557852358 631:0.181825146918558 766:0.360702579146038
+-1 1:0.46927959243234 2:0.299045262474423 3:0.186720684977954 4:0.23764733291287 5:0.102817925294169 7:0.227435788735459 23:0.131734046373615 83:0.0474517686539779 142:0.0949798108919876 295:0.15549556778346 3374:0.307792207235389 4778:0.303220942798875 4989:0.340284743063602 9847:0.425947071325909
+-1 6:0.0249837135986167 11:0.0374228338733279 31:0.0317415129273869 41:0.0383469590928778 60:0.0632096624725343 63:0.0540022515535888 75:0.0337558257115391 96:0.0515977787743452 142:0.00647864080308472 161:0.0812715552466343 169:0.0607039971736271 179:0.045397033682598 180:0.0641755819561235 189:0.124638560505809 227:0.0591953983436639 229:0.174448491971097 255:0.0775121353507193 286:0.0466633490300123 346:0.0693832558305112 386:0.0663258347945927 399:0.078524653947481 405:0.0792000800420967 490:0.0861835690252223 502:0.0574838845398378 513:0.186957840758714 530:0.0684603784411149 571:0.0657267301870698 574:0.0623556950056204 607:0.0816923821037978 631:0.0558916807595541 737:0.0981334599649544 781:0.180493002093778 852:0.247939263462854 853:0.0881248515847922 1081:0.0925854988819173 1225:0.0742847307036905 1312:0.108287667149588 1315:0.254045127436249 1324:0.0993882988918806 1411:0.10547571295825 1497:0.101110052558075 1591:0.0988420517043956 1598:0.0871336008764122 4624:0.530357559279085 4643:0.142251775629485 5454:0.464221311955682 5823:0.152752205384567 8660:0.172756887083
+-1 1:0.229478264877473 2:0.292466960247598 3:0.0913066314761 4:0.0774732142473144 5:0.100556169393663 7:0.11121636442688 20:0.404134738597729 21:0.0541750095390919 23:0.064418101435903 26:0.193806886162423 30:0.10765881370694 31:0.0341331343233107 47:0.0423865465513146 54:0.134107994053039 63:0.13549934614854 75:0.108897657384073 83:0.0464079397940242 137:0.146626806658029 142:0.0928904753301256 189:0.268059354154995 256:0.121888231277571 267:0.383516244984492 408:0.316398971587813 472:0.163182589818233 940:0.24474523450558 1835:0.241156495175244 9645:0.208288611807904
+-1 1:0.151360492462967 2:0.289360365931778 15:0.060712109148422 24:0.285260821813121 45:0.311289285972752 48:0.108407758150075 54:0.265366988467429 129:0.182730022797723 142:0.00919037894411962 186:0.10055758474327 209:0.111317213234911 409:0.180998660021688 959:0.197007947805203 1731:0.440070827062691 8809:0.392437848432933 8814:0.392437848432933
+-1 6:0.0122722921189196 17:0.022291034124972 20:0.0461515548134468 26:0.017705954525927 29:0.0594274299310077 30:0.0245889361512781 31:0.0155918021315663 37:0.116132106060522 42:0.0489491210467172 63:0.0884217903967798 67:0.0462797806661526 68:0.0251130821106795 75:0.0497437683407819 83:0.0317982846703257 88:0.0312367134855046 94:0.024557627034495 111:0.025582693496736 132:0.0248105799614579 142:0.0328846355154569 162:0.0221555958471131 169:0.0596370257896381 176:0.0424084471763776 178:0.0330142887283529 181:0.103586733337192 185:0.0238215081563807 199:0.0764870924071349 215:0.0260608923130073 218:0.0232043715753471 228:0.0928151260864605 238:0.0806776930074547 259:0.0995289381795834 275:0.0275087399980525 286:0.0229215824254053 299:0.0338648480410942 309:0.030105250183334 317:0.0243818396658503 370:0.241884937965416 399:0.0385722277825789 408:0.0481763566636888 411:0.0612955241552805 433:0.0330809020460578 436:0.0722663413284278 507:0.0437462076512567 534:0.0311801677181104 586:0.0300711337099893 609:0.0289688733275611 644:0.155916337032915 663:0.038285328812893 827:0.0349418058905474 850:0.149996539683882 913:0.042695649765139 1083:0.0438549620085526 1138:0.0403388465037273 1155:0.0476200056771985 1296:0.0832898952522231 1366:0.0443301360778937 1491:0.0939749655731481 1497:0.0496664395488713 1551:0.175187820415184 1576:0.0453454548224816 1698:0.0592420321252704 1743:0.0607081536872119 1849:0.0505811427168871 1985:0.057544568674809 2055:0.0630187011818939 2239:0.530841158023643 2379:0.0615199032909387 2679:0.0587929998043497 2974:0.563860816641513 3496:0.069300002875956 3699:0.0620956351839204 3722:0.069300002875956 3785:0.0698757347689378 4308:0.0750336685893005 5222:0.0718046355133946 5233:0.0698757347689378 5784:0.0782627016652065 5973:0.0795847350984119 6335:0.0873648346834292 6396:0.0795847350984119 9933:0.18118773551867
+-1 1:0.303091263925027 2:0.193142868421734 3:0.120596355186859 4:0.204650792867817 7:0.146892815671618 15:0.0810484937776465 21:0.1431069920554 47:0.111966961006215 66:0.222015404895772 75:0.0958868693806687 106:0.165587481767766 142:0.0797473762194168 299:0.1958352394093 339:0.184001025161298 829:0.175492142462227 5574:0.505217483787961 8519:0.550208610368869
+-1 2:0.0405858956948622 4:0.0430041026162446 5:0.055817070058526 6:0.0198839467284342 15:0.034062098606744 23:0.0715148499105743 26:0.0430316015734565 27:0.0289486420313768 29:0.0361073090352318 30:0.0597596306952879 41:0.0457791566167996 63:0.0429791147288254 75:0.0201490974582252 83:0.0257602814663121 142:0.0206247879191714 169:0.144938626666404 218:0.0563946592616983 228:0.150381933938072 229:0.0520647857380734 234:0.0713201384254815 283:0.223584862504032 286:0.0557073836894169 339:0.0773297660531567 366:0.125350105494253 406:0.0932192605556369 409:0.0507740077871066 518:0.0867025369702795 534:0.0757786061335787 636:0.101679965444827 829:0.0737537538656369 1045:0.0516465634757272 1491:0.114195856272574 1545:0.127091907451658 3426:0.326898929006908 5211:0.509466706326361 7222:0.636980415620613
+-1 1:0.100898451238292 2:0.192890577304413 24:0.190157779295998 31:0.0900472310343512 45:0.207508619525727 48:0.14453143910369 54:0.176896346665127 142:0.0245056021334381 193:0.229154413342011 209:0.148410384094294 409:0.120655556646414 506:0.132171093948778 671:0.144280912457193 4617:0.468281188188829 6803:0.459625190708755 7444:0.504557548039276
+-1 4:0.055036962602812 6:0.0254476193179707 11:0.0571765698351285 29:0.0462103961288 31:0.0969926989873887 63:0.137512457307898 75:0.0515739222922353 83:0.0659363903184332 142:0.0395936298750799 169:0.370987012412556 187:0.118643953102155 189:0.0952146673743681 218:0.144348588341986 228:0.288689835530777 229:0.0666328906141931 507:0.136067104839917 513:0.0952146673743681 523:0.149142960984993 534:0.0969820100441197 612:0.14811606886273 685:0.134470216557471 828:0.386281406151969 850:0.116636366822332 851:0.433541159652166 856:0.0954937401243274 1782:0.156673738799175 1849:0.157326315091081 2387:0.172824765667284 2449:0.159711463905916 4528:0.233382837018803 7392:0.257581863237002
+-1 1:0.195853162084172 4:0.198363544302499 26:0.0496225969490374 29:0.0416377354700842 30:0.206738394067451 32:0.085943516781918 47:0.0542635650679297 83:0.0594117819349332 142:0.0386486951113981 154:0.0828767678505516 204:0.137650102576859 252:0.0827400963085771 314:0.0914881589038003 317:0.0683323907131292 377:0.0882399192841455 400:0.404087171763686 631:0.0769442207661025 930:0.100378145243106 1064:0.106225159826823 1424:0.106611142384255 1482:0.271651691620476 1786:0.306982564754599 2341:0.159660504162066 2723:0.14945277242652 2766:0.237828669274841 2976:0.154811357899766 3592:0.194219752809438 6268:0.210288888326373 8871:0.475657338549683
+-1 1:0.365838744276926 2:0.233128278045417 3:0.145562820170389 4:0.247018630984228 5:0.160308614673888 7:0.177303306379361 75:0.115737852132705 110:0.275570193023176 142:0.0888526890375557 143:0.251601322002838 187:0.266250765702266 9878:0.664115568693824
+-1 1:0.537272306666426 2:0.146731355183194 3:0.183234998748009 4:0.233210952251481 5:0.201797057618704 7:0.223190036332155 15:0.0615728420351684 21:0.108718913890359 23:0.258549692287059 47:0.0850617165336509 63:0.0776918143700456 75:0.218536833435309 83:0.0465659429801741 85:0.440544000792791 142:0.144470440296951 356:0.171410632197296 608:0.196104467542324 3350:0.287860416824556
+-1 2:0.156005684169746 3:0.194816583734516 5:0.214551879507573 20:0.215570730924018 161:0.372941501932067 187:0.356341437532592 485:0.264461685087686 534:0.291280827807263 1094:0.393601032305748 2264:0.51907091620664
+-1 1:0.31486877934057 2:0.300972016303302 3:0.125282486399875 4:0.212603110056346 7:0.152600774319456 15:0.0841978748337396 20:0.277258092175594 21:0.148667841230589 26:0.106369529517476 30:0.295438866728906 40:0.153552432884795 47:0.116317771360183 63:0.0531198938177886 67:0.139014208141736 83:0.0636766682999682 107:0.235080306483198 142:0.12108290545695 159:0.147845119677968 189:0.183903084849171 256:0.167243719656159 524:0.277812735424193 550:0.200223401107925 592:0.242082979443963 2824:0.358709898223358
+-1 6:0.0140679694630079 15:0.0160660446201525 17:0.0255526501757181 26:0.081186733552453 31:0.0178731889800751 41:0.0215926206241688 63:0.0608157808718733 75:0.0475185487771964 83:0.0121503327274003 94:0.0281508901399609 100:0.0289773029551777 107:0.044856366039357 134:0.134338903239388 142:0.0243201958000455 144:0.0836370234178481 174:0.0343738770780809 176:0.1215340895714 179:0.051124832266192 180:0.036136346330815 185:0.081921187841541 199:0.0219196640259034 206:0.0447257390470521 229:0.0982294344765886 291:0.0377438138446727 317:0.0279493816271165 320:0.0445109319172589 345:0.137650762103995 357:0.0434091513932391 385:0.147191028846787 409:0.0478970766933377 423:0.0355287019680907 436:0.0414201631268345 475:0.151992414827671 480:0.0344906704509178 507:0.0250735684661352 546:0.0405145981729117 558:0.0520567455254171 561:0.0415548936587143 574:0.0351115941879942 593:0.0451664207586748 609:0.0332075883951296 755:0.048942861796231 852:0.325759069845733 1056:0.0460477248558977 1059:0.0429859947795856 1122:0.0572737224400713 1140:0.285776287535365 1149:0.0449883328190561 1225:0.0418286624597372 1466:0.114547444880143 1597:0.0657406957145336 1805:0.0679103048386539 2047:0.0644741019261314 2223:0.119056023643241 2280:0.0636940662432789 3241:0.078812188352381 3263:0.0782136316756574 3589:0.222668931951207 4189:0.0729966547610032 4422:0.0800999270070503 4621:0.273688634259286 6293:0.0929476462093566 6391:0.269142215598324 6419:0.435660563089894 6992:0.37972419512305 7721:0.100148025695417 8974:0.103849529723084
+-1 1:0.423456546695914 2:0.283337076670392 3:0.202185897872028 4:0.128665282551728 5:0.111333859692059 7:0.12313662291658 20:0.22372511082628 21:0.0599815301956139 23:0.0713224848374711 26:0.171663410024225 30:0.357593313233871 44:0.171727956495 47:0.0469295703588368 63:0.107158767109477 75:0.0803795966711808 83:0.0513819797311319 95:0.392338339534628 137:0.162342384539845 142:0.115702369239791 170:0.197009513469843 189:0.148395084581042 267:0.21231091073871 284:0.120427454446655 408:0.116770288426445 641:0.0784563611856099 8532:0.230613151060789
+-1 1:0.433900502933696 2:0.138250087879433 3:0.17264377234077 4:0.146487366216353 20:0.573107434894196 30:0.407125384511935 83:0.0877487391997468 142:0.0878192625018584 186:0.192176905540385 229:0.177351296071648 491:0.404168437884845
+-1 1:0.241146981819226 2:0.115251968606715 3:0.21588631445192 4:0.122118962753723 7:0.0876536955191676 13:0.0938186167030345 15:0.048363154885359 20:0.238885056450394 21:0.0853946236304027 29:0.0512670519666305 30:0.16969971865655 44:0.122242998502071 47:0.066812783616221 63:0.122048004526312 66:0.132480752120668 75:0.143043729105318 83:0.219454795812087 95:0.279282511892191 142:0.106155065853888 149:0.15716879612555 170:0.140239447038951 189:0.211267407734898 227:0.100338597518684 229:0.0739243146992982 256:0.192129170321843 267:0.151131608813857 284:0.085725198354406 339:0.219593718875379 408:0.0831218776752634 409:0.0720916004356841 430:0.109865594333062 457:0.0973378157185833 518:0.123104811387545 524:0.15957529069441 579:0.165753327622325 606:0.18175016325439 640:0.131747630485053 716:0.135161802914242 757:0.134118450847692 940:0.192892695024424 1598:0.147694982267617 7356:0.274625690848658
+-1 2:0.080092228726735 6:0.0294292434988487 24:0.0789575134585624 26:0.0424592930215324 27:0.0285636329962642 29:0.0356270916835128 31:0.0373895061386569 32:0.220611244878543 45:0.0861619476185961 48:0.12002499282926 88:0.14981273886913 134:0.140513963482649 142:0.0152628629033046 176:0.254241120213727 193:0.0951497369317546 238:0.290200491819467 286:0.0549664906962443 409:0.0500987273464654 420:0.0997512644620714 441:0.0691734646566742 506:0.164640662631779 671:0.0599084724765308 1149:0.0941125586475483 1433:0.189158109816158 2683:0.138954615052815 8834:0.217246213499251 9698:0.740449914502404
+-1 6:0.0301790840369637 15:0.0159071180596506 20:0.0130952747142952 25:0.0174228999106344 26:0.0301438605307759 27:0.0270382322461189 29:0.00843111920775781 30:0.139539772878652 31:0.00884819300364307 37:0.0329519089478023 38:0.0189136441152328 40:0.0290099564041043 48:0.0142019033077862 54:0.0173821337863826 63:0.0501784887055764 67:0.0262633163277099 68:0.0285028498382189 72:0.0144470423134514 75:0.0376387932832695 80:0.0302306164095533 83:0.0481205627715873 84:0.0136245868476243 85:0.0284532319747362 88:0.0177265249640184 92:0.0153251180525969 97:0.0144856076290731 102:0.0221202435556708 139:0.0379832824695363 142:0.0174577234381269 144:0.0276032264966377 145:0.0194808125684218 159:0.0139658499570479 162:0.0125730808095033 166:0.0173214696595371 172:0.0182051718364853 174:0.017016924008884 176:0.0120331864923332 178:0.0187352812767589 185:0.0135184695153863 186:0.0395204859806644 190:0.0199041547465616 199:0.032554249511783 209:0.0145830549937751 218:0.0263365012580871 274:0.0501768409408562 286:0.013007770592361 308:0.0171526606405317 317:0.0276729041745031 342:0.0216864831789828 345:0.0170361387600231 365:0.0245969414191576 386:0.0184888410559646 387:0.0163871943050102 390:0.021205886900174 396:0.023579113859651 399:0.021889356542678 404:0.0389899034400081 414:0.0171526606405317 433:0.0187730836736014 459:0.021205886900174 485:0.0321305067973199 499:0.0172913528886684 501:0.0241406830605464 507:0.0496510775610879 508:0.0360232374001606 518:0.060735577727339 534:0.0176944358020844 548:0.0262839052770622 550:0.0378272882304657 560:0.0276540970422134 561:0.0205719147124814 582:0.0195804521335819 629:0.0283535831659239 639:0.0267087083363305 643:0.0188878558809298 647:0.293574526083468 654:0.0242591922496027 667:0.0223598155092537 671:0.0141772861363829 673:0.0234725057615512 676:0.0232135398052517 678:0.0502451487203016 695:0.0458321370906877 712:0.0426359327275669 714:0.0240243385443675 716:0.0222280242181115 720:0.0231128312224778 732:0.0254026056155368 747:0.0255840904038912 763:0.0268868929668987 778:0.0221846928593585 780:0.0235522940929865 784:0.364737737497517 850:0.0212803869912289 876:0.0448087178874605 904:0.0282969633693624 908:0.0246922502073823 909:0.0204392081380567 912:0.0220776368070286 947:0.480094321345986 963:0.0590888033455355 966:0.0231882129918748 981:0.027552988805457 997:0.0220776368070286 1009:0.186213106850774 1018:0.0755743094764782 1042:0.0264504424800698 1046:0.130408380320831 1056:0.0227961085935948 1080:0.0234725057615512 1083:0.0248872557992196 1094:0.0239100810382775 1098:0.0260419894238039 1117:0.0277052594471753 1118:0.418455933607116 1134:0.0282408424321168 1138:0.0228918951380674 1149:0.0222716523693056 1194:0.0355830480150506 1196:0.0582789373751796 1198:0.0276540970422134 1229:0.0262022415280762 1305:0.0422279413125187 1404:0.0314390100416818 1407:0.0282969633693624 1410:0.0320184716284217 1493:0.0309933958571533 1500:0.026492766125302 1595:0.0290754512123265 1608:0.0251569123687668 1609:0.0324363056660185 1697:0.0317221537746143 1707:0.0265353728739442 1849:0.0287042966122398 1872:0.0346011567154462 1920:0.0349119347007131 1921:0.0350732011668272 1923:0.0344512748549943 1995:0.0300361455367209 2003:0.0363332888708262 2034:0.0312570066549006 2099:0.0337506037838017 2107:0.029746564526664 2257:0.0334905805306 2282:0.134477061663367 2326:0.0349119347007131 2385:0.0730710361674444 2403:0.0349119347007131 2510:0.0369603211429905 2547:0.036744378931962 2624:0.0294695780539232 2643:0.0337506037838017 2648:0.0411595082502354 2651:0.0407484181890996 2658:0.0381657331020751 2723:0.0302623119637043 2724:0.0420710155721252 2825:0.0313473583140842 2846:0.153747297787919 2880:0.0349119347007131 3042:0.036744378931962 3046:0.0355830480150506 3083:0.04374219333726 3360:0.032545191824717 3466:0.036744378931962 3482:0.0354085251754268 3587:0.0481573226555334 3778:0.0387199681799123 3848:0.046995991738622 3969:0.0352386568374148 4006:0.0396537861556882 4174:0.0403622584344358 4237:0.0415989711207442 4293:0.0371838418024707 4354:0.0415989711207442 4445:0.0403622584344358 4820:0.0425808624203486 5035:0.0407484181890996 5084:0.046995991738622 5143:0.0451635475073731 5248:0.0415989711207442 5299:0.0481573226555334 5601:0.0411595082502354 6015:0.0903270950147461 6088:0.0481573226555334 6290:0.0514111210568954 6302:0.0920282008780352 6321:0.0495786768256465 6324:0.093991983477244 6410:0.0420710155721252 6978:0.0451635475073731 7055:0.0431350974981857 7077:0.0431350974981857 7390:0.046995991738622 7392:0.046995991738622 7503:0.0514111210568954 7544:0.0481573226555334 7550:0.093991983477244 7999:0.05399380614392 8410:0.0495786768256465 8554:0.10798761228784 8783:0.0514111210568954 8784:0.0514111210568954 8832:0.0514111210568954 8987:0.0514111210568954
+-1 2:0.100968432569931 6:0.032977809985488 15:0.0282462388101715 17:0.0449249504878601 26:0.142737053105395 29:0.0898267325431223 33:0.04562211738423 34:0.131408328186326 48:0.151309753615862 75:0.0668351325248955 88:0.188861736813863 134:0.236185622043931 142:0.0342065056942034 176:0.170938448075987 238:0.325192751804576 275:0.0554406213488077 286:0.0923914924531148 289:0.286918688768376 312:0.074726278714172 331:0.0644494279715067 351:0.0585081552330943 430:0.0641664056430807 457:0.113699248717949 485:0.0570540788523493 506:0.0461232420769502 538:0.0722405884587627 574:0.123461685547155 655:0.0624269369360852 723:0.0846145455025354 829:0.061160827724893 867:0.217414259404814 886:0.0710114761467219 895:0.0857331285543791 987:0.067307917992795 997:0.313625736240626 1034:0.103947471221571 1140:0.251216321591778 1269:0.0842211221024946 1457:0.109170849389617 1917:0.20517957459975 2526:0.246855063254523 2561:0.122882414278646 7243:0.333802766985718 8975:0.182581256696048
+-1 2:0.117764343468732 4:0.0748686186325333 5:0.032391846956935 6:0.0288477054891969 15:0.0395339376984425 26:0.124860822237506 27:0.0335990399104878 28:0.0426051468812736 29:0.0209538484744835 31:0.021990401381198 57:0.0430740522745401 60:0.0875828352681804 63:0.0249417052020274 75:0.0233859097406173 83:0.0747462285237681 84:0.0338611661509745 123:0.0585344827287952 141:0.10540592059579 142:0.0299225207045328 169:0.168222008364245 174:0.0422921368323036 180:0.0444606030379063 185:0.0335974328973651 186:0.032740069041479 187:0.0537984441593414 193:0.0559617155328343 228:0.218174681334151 229:0.0302143156153658 234:0.0413886111614836 286:0.0969845807893613 351:0.040944526798432 364:0.0534569394339 412:0.05880280388837 433:0.0466567179282069 473:0.0507975346700345 478:0.045245287453965 481:0.0664886690714955 499:0.0429741745336249 508:0.0447642501216664 625:0.064142887175839 631:0.116164641860399 639:0.0663791145206068 643:0.0469419611304651 829:0.0856017811472441 850:0.15866434580202 930:0.0505144773563613 986:0.0515923669110938 987:0.047102678951734 1171:0.0955269846690409 1225:0.102928366924748 1308:0.0673935193098955 1337:0.0742848522580151 1407:0.0703264024762039 1562:0.185977338431126 1612:0.168427229264155 1856:0.0898119378398945 1890:0.0955269846690409 2455:0.086375683120465 2733:0.0750212905950808 4047:0.184825897399533 6151:0.112244899843055 8639:0.73930688643146 8806:0.127771985424934
+-1 2:0.0921948005930635 3:0.115130908115389 4:0.195375984563535 5:0.12679389121838 7:0.140235608594436 15:0.0773753624273857 21:0.136621359140342 27:0.0657596495981883 47:0.106892599528336 54:0.169100260202909 60:0.171416105144529 64:0.195878186671335 75:0.0457706301779719 84:0.132545360046378 142:0.0468512072217971 143:0.199000600917953 187:0.210587376679278 199:0.105566864053357 204:0.13557694994204 502:0.155888565307217 631:0.151570722750611 862:0.217309576311527 971:0.281630363134022 1359:0.250709471251369 5030:0.46849344803144 5134:0.419635258850407
+-1 6:0.0171743887487425 15:0.0588410068745229 27:0.0500077010651096 63:0.0371224100783827 75:0.0174034077545082 142:0.0133607073996161 169:0.0625940200171138 176:0.044511193445769 179:0.0468104732365246 185:0.10001061847973 189:0.128519190077228 215:0.0547061491918887 218:0.0487098368719853 227:0.0610384508658696 229:0.0449699892379499 411:0.128669504058391 455:0.0626991281315069 507:0.0459152843579827 534:0.065452360054598 561:0.0760962589502401 565:0.0913375294476148 582:0.144857605793575 631:0.0576318718229907 750:0.39715631278197 1614:0.108512984452663 2216:0.3509612397343 2866:0.117701125360672 3772:0.564705726180983 5223:0.347679757275658 6782:0.366786648969108
+-1 1:0.457948459300514 2:0.109434215300198 3:0.136659122915385 4:0.231909146954896 5:0.0752514778549563 15:0.0459218525141344 20:0.453652966029585 21:0.0810840260762748 23:0.0964149164172059 30:0.161133521382315 47:0.0634401705710828 63:0.173830795678667 75:0.190152322884309 83:0.0694590113120251 95:0.397777099673022 142:0.121650961660869 169:0.0977017052621938 170:0.133160361826107 186:0.0760604538456897 189:0.10030146670583 229:0.140385443624453 267:0.143502702969338 408:0.0789260050621081 1133:0.156296570968467 6655:0.296834902451578
+-1 6:0.0155096415840741 12:0.0522769241510347 20:0.131233566658002 30:0.0932260044687351 48:0.0474411945040069 75:0.0314329226574287 77:0.0584758737180855 81:0.0472158135171267 83:0.0602796926742968 132:0.0470331702056692 142:0.0140765658171321 166:0.0578620480230158 186:0.0440058167244308 204:0.0931072997048049 218:0.0439882969085888 227:0.055121874182921 234:0.0556302931109732 266:0.0788555621260927 303:0.138575082893133 309:0.0570702239994633 322:0.0672073335364442 331:0.121243651846686 346:0.0646086554918879 348:0.154083500194908 391:0.0802528571708122 438:0.086470601320194 505:0.0557821696668369 574:0.116129390826417 579:0.0910580205079799 586:0.0570055497395255 599:0.0727117880416992 607:0.0760707307329175 631:0.052045501523851 643:0.063094532133561 667:0.0746925488548175 676:0.0775443990259867 724:0.18148087056371 768:0.096914284021627 780:0.157352002878144 804:0.0730522403470139 808:0.0809377195359773 846:0.112304532365064 951:0.101090691641586 1058:0.0869927824989931 1081:0.0862142390005266 1098:0.0869927824989931 1118:0.199692040339079 1138:0.0764699509829065 1176:0.0875281016800699 1225:0.0691728359658768 1490:0.12578878938081 1752:0.208826901604829 1781:0.0984425787239864 2076:0.0967046486792277 2151:0.118281521394846 2243:0.116622670127579 2444:0.109846670506827 2510:0.246930534066352 2591:0.112743265746442 3075:0.138960591220461 3467:0.112304532365064 3512:0.160868642841754 4107:0.133613169273984 4404:0.156989238460617 5393:0.269658750874505 5458:0.156989238460617 6814:0.150867992504466 8219:0.171737896032009 8587:0.18036530764725 9612:0.3607306152945
+-1 4:0.0374748259926494 6:0.0173273571208926 30:0.208304010589441 75:0.052675247840472 114:0.0608346138793183 137:0.141850680102845 142:0.0247127983297839 159:0.0521203112440444 168:0.0643448783280518 204:0.0520096942215523 211:0.172327296285553 218:0.0491436843039384 317:0.0516374006250099 414:0.0640134337686209 456:0.093885163211107 507:0.0463242413466596 574:0.0648698235924183 622:0.0956171907761539 655:0.0656013137762024 710:0.199681897391474 735:0.112653733786387 796:0.0761565533013336 989:0.104776859325298 998:0.095895223831459 1021:0.0927559588548138 1116:0.101025541720962 1613:0.0993507961710137 1660:0.48748609410575 1827:0.116650609910673 8625:0.701552923502059
+-1 1:0.300058915811327 3:0.119389820477035 4:0.101301657844938 5:0.262968479237133 7:0.145423191813941 20:0.39632587285579 30:0.281542889786852 31:0.0892629311430743 68:0.143772175937097 142:0.072876484398133 187:0.218377406276256 339:0.182160143460054 491:0.558996094528224 2512:0.362644226879551
+-1 1:0.370693622822551 2:0.265749768821166 3:0.221241776607936 4:0.0938612633195742 7:0.134742163060299 12:0.146280811791971 20:0.367216567861295 21:0.131269494497975 26:0.0939212828690324 30:0.260864154409868 44:0.187913195668334 47:0.102705298746482 54:0.162476100486673 75:0.26386595144955 83:0.112449390397581 95:0.429315952218335 142:0.0618968710315122 170:0.215577521614891 189:0.162381216979707 213:0.224026417594291
+-1 1:0.111779551174562 2:0.213692300449372 3:0.133427202237769 5:0.146943635232623 15:0.0896716468220009 32:0.196202657746574 45:0.229886782906693 48:0.160118011677595 54:0.195973218537803 142:0.0271483375029104 209:0.164415270205939 409:0.133667304137317 506:0.146424701058626 8958:0.579629807592981 8967:0.579629807592981
+-1 1:0.41156427282968 2:0.327833204283201 3:0.163756456011436 4:0.208419785001198 5:0.0901726504624262 15:0.0550274263493603 20:0.181201714141637 21:0.0971617003396913 23:0.115532462687444 26:0.139035372636116 30:0.579251216676152 47:0.0760193485795598 63:0.0347164468285711 75:0.0651018593533781 83:0.0832316298236318 142:0.099958227292138 189:0.120189654156244 204:0.0964189425879317 229:0.168221646920476 256:0.109301944781206 267:0.171957009272413 346:0.133813315697186 408:0.0945757780409147 641:0.127088345869113 930:0.140622555916716 1835:0.216254462329902
+-1 1:0.551743679810825 2:0.234396631501253 3:0.219532149890766 4:0.248362556040817 5:0.0805903933989325 21:0.0868367472124788 23:0.103255328201851 44:0.124307408454231 47:0.0679411016149526 63:0.124109121467755 75:0.0581837666896228 83:0.0743869649646797 95:0.567997933710992 142:0.126559474088109 169:0.104633411691969 170:0.142607776625922 227:0.102033091287992 229:0.150345461001909 375:0.101760521330296 993:0.157743504446127 1395:0.153279917988773
+-1 1:0.235110348531953 3:0.0935475695752124 4:0.0793746388718002 7:0.113945946980303 20:0.724593476286524 21:0.111009252935206 31:0.0699417272614155 47:0.0868536786093129 63:0.158657035170478 75:0.223140663849388 83:0.047546929577181 142:0.0856532571293537 189:0.137319166624084 256:0.249759466787968 267:0.39292888184471 408:0.216109566411096
+-1 1:0.55079157206169 2:0.350988222995518 3:0.219153317710637 4:0.27892571976741 5:0.120676985792989 7:0.266940471396602 31:0.0819260278238868 75:0.174250088380365 142:0.139346778016089 162:0.116415020310615 269:0.229523119386169 1045:0.111660314672232 7480:0.476019107226781
+-1 1:0.440129629570613 2:0.280469644792174 3:0.175122266635463 4:0.222885534103991 5:0.096431245046025 7:0.213308294376066 20:0.581335032613897 23:0.123551200536419 30:0.206485062200323 83:0.0445042352084741 142:0.0801720055438892 592:0.169194119993676 7200:0.399488769046332
+-1 6:0.010728544778889 11:0.0964210258122277 12:0.0723234406954787 15:0.0367569633087789 29:0.0389639830683826 40:0.0670340095004209 108:0.0993143379562812 142:0.00556413582695569 144:0.127566889204708 145:0.0900295716820003 204:0.0644054750530244 231:0.115015170546638 278:0.0926206240892284 320:0.101835064572771 405:0.102030661118802 478:0.0841342637571903 505:0.0771728349607723 531:0.241439363886787 565:0.114113962250165 582:0.0904900507992056 764:0.198449997949174 882:0.0805663229922579 917:0.130513598402139 1045:0.055732644679913 2164:0.138470181294498 2571:0.142839246494664 2902:0.153620445696739 2941:0.154192059227574 3610:0.309549985141685 4201:0.175179285258773 4473:0.194429031072601 4871:0.363496000662646 7018:0.222556585707185 8961:0.237593847391487 9894:0.499059186935331
+-1 6:0.0268904066938155 29:0.04883035736503 31:0.051245915963932 32:0.30236893939756 88:0.102666387166804 134:0.0962939539464255 142:0.00697307409206538 173:0.100495691221758 227:0.0955695595200668 472:0.244994825420733 506:0.0752186235551894 848:0.148603875904896 1138:0.132582566182444 1236:0.148174903769802 1418:0.170678410814738 1433:0.129629695610139 1731:0.166948854966861 6229:0.523145767557955 7657:0.27891187599969 7665:0.55782375199938
+-1 1:0.226865355986152 4:0.0765910808110427 9:0.135453816425123 27:0.0515580525184028 30:0.106432977910621 32:0.265472443020718 42:0.105937904085346 75:0.0717718104927761 83:0.0458795249631885 142:0.0734662370390287 209:0.11123122375809 251:0.200166193839516 345:0.129941947225659 373:0.126404408116378 383:0.212109919442912 400:0.468071993814464 409:0.0904294217746053 710:0.204055014726586 713:0.177059638148348 1335:0.19033188017395 1433:0.170717495240518 2341:0.246589071991179 6268:0.324782525863886 7519:0.392134701019422
+-1 1:0.219958047583773 2:0.280333571430702 3:0.0875186519370689 4:0.0742591327983824 11:0.0771460177223853 24:0.276361915394396 31:0.0654341498326984 47:0.0812561662711187 48:0.10502590399741 63:0.0371079919593433 75:0.0695865935057412 83:0.0444826434212808 142:0.0534220727274172 188:0.189747184702962 204:0.103061046654601 209:0.107844596641176 506:0.0960440767101075 867:0.150909829606149 874:0.234591646254707 1143:0.20375984080508 7087:0.333993430450362 7705:0.667986860900724
+-1 1:0.111686241124743 2:0.213513916845293 24:0.210488935454922 32:0.196038873945542 45:0.229694880658559 48:0.159984350202937 54:0.195809626265399 142:0.0542513498511163 209:0.164278021515166 441:0.184406122983513 506:0.146302470328525 608:0.285358456095129 867:0.229878630983944 3586:0.432990582300549 7485:0.579145950879882
+-1 1:0.456524224386566 2:0.218187742514016 3:0.272468217011095 4:0.115593950903827 5:0.0750174432602097 15:0.045779034028046 20:0.678363135363503 23:0.0961150628258291 44:0.231422718446799 83:0.0346214957402788 142:0.131667419399217 229:0.139948840233483 8705:0.295911736048975
+-1 1:0.350264141916832 2:0.223203467493634 3:0.139365873898204 4:0.118251237973947 7:0.169755094121399 20:0.771063805919146 75:0.1108106238028 83:0.0708347573516868 142:0.0779808556514883 565:0.290781229672534 850:0.250602397320877
+-1 3:0.192601025536654 4:0.163420994449449 7:0.117299179143862 20:0.426238290968408 21:0.114276063271684 26:0.0817627469713825 47:0.0894096321675956 54:0.141442832627331 63:0.122494528002692 75:0.114853653845513 83:0.0489461534878328 142:0.0489854913108159 148:0.166052534530615 208:0.141525564878408 256:0.128554727983005 264:0.155506640853077 430:0.147023396504744 592:0.186081197163735 631:0.380341088952081 862:0.181767207180316 6146:0.403434271897516 7554:0.418345335515177
+-1 1:0.199975706748489 2:0.127433173480119 3:0.0795679197330785 4:0.0675129768017723 7:0.0969179851962793 15:0.0534747508529131 20:0.440222138335454 21:0.0944201476028288 29:0.0566855664684697 47:0.0738743567522846 142:0.0445214763818473 268:0.300368879360443 930:0.13665469459183 1064:0.144614813702187 1085:0.22432163074589 9635:0.726041089358716
+-1 6:0.0250334184266449 17:0.0682049586587953 29:0.0454582476851321 48:0.0765727090623512 88:0.0955764878368176 142:0.00324576499445091 176:0.194638775184157 238:0.370280177586916 312:0.113449268058803 405:0.119036471617295 409:0.127846548725134 457:0.0863089716753207 538:0.109675498710864 574:0.0937196264797706 799:0.126273383945583 952:0.11660600913154 1033:0.149937490580957 1917:0.155751584044447 5032:0.248095220008363 8642:0.534628847132794 9018:0.554388905478703
+-1 4:0.0110655760382959 6:0.0281403450121035 12:0.0344909366991258 17:0.0278799836934178 26:0.0885812153337885 27:0.0223467097403821 29:0.0185818630949261 30:0.0307540303017227 32:0.0383544072392095 33:0.084937915896551 37:0.0121041237368408 40:0.0319684151657369 41:0.0235592749386147 47:0.0121082249761078 53:0.0197017084259239 63:0.0331774388830621 64:0.044376077719016 75:0.010369306948068 82:0.0191884434471558 83:0.0198854762214504 88:0.0586028708490612 108:0.0236814268709137 109:0.0281527195823092 111:0.0159984743983609 142:0.0152577845411877 144:0.0304182258072453 148:0.0224875262005416 155:0.0265702968313832 159:0.0307801972088542 168:0.037999543691203 176:0.0132603405601541 179:0.0139453195667414 180:0.0394276421237982 185:0.0148970939443427 190:0.0219339965078724 199:0.0597902635739242 204:0.0614297423288895 208:0.0191659817614099 209:0.0160702467088099 215:0.0162975223277909 242:0.0179255726263172 283:0.0191772036196047 286:0.0143343135330747 291:0.020590758830895 308:0.0945095140639258 312:0.0231871978644016 317:0.0152475046354604 322:0.0221708136464323 337:0.0977898203435924 345:0.0187734979368832 346:0.0213135440060338 348:0.0254150580677245 353:0.0286977725179935 355:0.0461899484627875 357:0.0236814268709137 373:0.036524816591592 387:0.0180583736027279 402:0.0194989286424603 408:0.0451915789548507 423:0.0193823267783776 430:0.0199105210308217 434:0.022136489515416 442:0.0217696032608596 466:0.0236388857055119 474:0.068889242828417 475:0.0207294841130877 498:0.0262863325489614 502:0.0353164546146543 505:0.0368036053031764 507:0.0136786336283023 515:0.0184827173320992 516:0.0358641767470531 539:0.0237672905814139 550:0.0208424728031379 565:0.0272103858072042 574:0.0191547778152071 582:0.021577282441232 586:0.056416138846013 598:0.108144805660244 603:0.0273890028445847 609:0.0181160665642762 631:0.0171691250746423 643:0.0208140546638927 689:0.12788298048193 713:0.025580875325123 724:0.0299340737828742 729:0.0275352429425473 757:0.0243057733627588 772:0.0237027945306589 796:0.0224875262005416 799:0.0258082400058867 823:0.0582957598930197 827:0.0218513186284994 882:0.0384219544823316 904:0.0311827105260125 996:0.0284830991871764 1021:0.0273890028445847 1030:0.0382989578365452 1037:0.0286111137530329 1046:0.0287415064339623 1089:0.0417713647246056 1105:0.0321111352163931 1106:0.0327801431789894 1122:0.0312451044551127 1150:0.0279147554103606 1164:0.0271401925141982 1167:0.032702581386436 1175:0.0271053573518536 1179:0.0319015891836899 1207:0.0291478799465099 1223:0.031435684600012 1283:0.0316981178123833 1292:0.0307025732621555 1324:0.030530664160407 1331:0.0289192189844133 1335:0.0274983962920264 1376:0.0366306761491573 1380:0.0526969007902354 1426:0.0303628648357821 1504:0.0714883725800649 1613:0.029336328064905 1652:0.0306448011598494 1707:0.0292414716104802 1709:0.0326258672807148 1752:0.0344446214142085 1835:0.0344446214142085 1836:0.0272812881353689 1883:0.0367669769523186 1943:0.0307025732621555 1951:0.0319015891836899 1999:0.0423566428179724 2219:0.0367669769523186 2285:0.0345441872084985 2335:0.0378032740086235 2339:0.0400385869864627 2548:0.0356262125751046 2642:0.0710203778569563 2736:0.100300710203749 2804:0.100300710203749 2831:0.0420579053589763 2976:0.069088374416997 3298:0.0390195151432335 3519:0.0436977112636765 3598:0.0463614516864148 4781:0.0463614516864148 5069:0.0507066555296277 5302:0.641777748653985 5324:0.0978852230002372 5570:0.0847132856359447 5621:0.046923293127605 5730:0.0429951983648838 6625:0.0517886808962338 6989:0.0517886808962338 7548:0.0517886808962338 7549:0.517886808962338 7564:0.054634750292349 8254:0.054634750292349 9899:0.238000552243911
+-1 6:0.0271158426276932 29:0.0328264846974515 31:0.0689007153325332 63:0.039073896384224 75:0.0366365734280838 96:0.056001172270128 142:0.00703153291300634 162:0.0489531739052169 169:0.0658845222402463 179:0.197085003595234 180:0.0696523746957787 218:0.0512704620957984 286:0.101291269112931 357:0.0836706193367803 409:0.0461605207971999 506:0.0505661463142617 609:0.064007228856681 631:0.0606615191008774 634:0.101548764654691 636:0.0924410020822974 676:0.0903817026438924 767:0.0864601082318063 800:0.239124105622671 912:0.0859590748206906 1067:0.0961390479252686 1236:0.0996114194861322 1373:0.209720769262936 1433:0.0871442981150281 1922:0.132463155484294 2171:0.125060436734782 2223:0.229479059467534 2285:0.12205064981835 2408:0.153119560215337 2733:0.117529018628793 3972:0.311465067401768 6213:0.157150080102467 8410:0.193034119911323 8615:0.630673155294615 8904:0.200168724586427
+-1 1:0.257352644427708 2:0.163996240924256 3:0.102397510616994 4:0.0868837690118771 7:0.124725648872129 15:0.0688177017392339 20:0.339918282910448 26:0.0869393268052297 30:0.36220790345732 83:0.0520450424131057 142:0.0520868708004191 144:0.119417646927797 518:0.175170338097555 641:0.158937614581985 1045:0.104344651284208 1332:0.24682409212727 1463:0.295582046868843 1932:0.518497654773702 3425:0.332572362973164
+-1 2:0.0360664900060301 5:0.0496016107311524 6:0.0265046817502771 26:0.0382398565196384 29:0.0320866123111996 30:0.10621030219168 31:0.0336738849927929 37:0.0418020866612506 42:0.105716264144244 63:0.0190966071500479 83:0.0228917686341682 86:0.0686329697911103 142:0.011455083327406 169:0.128799117049259 181:0.0745726871027467 187:0.0823815168267822 214:0.0756925785660656 228:0.133636289765352 283:0.0662292574874486 286:0.0990082767768402 309:0.0650188300107043 433:0.0714453968538717 453:0.085694132643858 475:0.0715901216955402 499:0.0658063209406803 534:0.0673403480198071 631:0.118588552111971 800:0.0779115049133143 822:0.118282495798259 1080:0.089330155793585 1175:0.0936094608449604 1202:0.218941494089125 1229:0.0997188089598111 2001:0.115761645902613 2007:0.357899292520537 2685:0.164160785338743 2807:0.240004921761924 5262:0.156642214586377 6831:0.169025311690168 7260:0.178854328819119 9724:0.66686693243317
+-1 1:0.463880295386004 2:0.177362758058252 3:0.2214868438322 4:0.093965232468712 5:0.12196194420275 7:0.134891415558624 15:0.0372133449977614 20:0.367623329849783 21:0.0657074501786522 30:0.261153110931604 44:0.188121345168719 47:0.0514095321710267 66:0.203876357773418 75:0.0440263721717955 95:0.53723937631454 142:0.115481035260489 170:0.107908157301286 204:0.0652051461041257 227:0.154412376732052 269:0.115983531142537 356:0.103597020722204 375:0.076999940694499
+-1 2:0.112211762905626 6:0.0137437690958832 15:0.0941747882482203 26:0.0594868215982396 29:0.0499146899588382 32:0.206055586150875 48:0.0840794185167341 129:0.141722643513327 134:0.0984322686851488 142:0.0178197974655165 176:0.0712399810963441 213:0.283782740815146 221:0.130831974048383 345:0.100858920784782 373:0.098113137883927 409:0.0701899123578594 506:0.153777874113068 895:0.285839799122519 1433:0.13250826770464 2931:0.208623148037925 5177:0.504182302139902 8408:0.587040515343326
+-1 6:0.0337661866061639 11:0.0303468030141418 15:0.0231372009483038 20:0.0761892886949619 29:0.0735793241481535 31:0.0257397246675319 63:0.0291942204014449 83:0.017498064803703 92:0.0445813420897187 96:0.0418415033381083 97:0.0421391748417699 100:0.0417310979313999 142:0.0105072767560085 158:0.0484716705330548 169:0.0492258884144003 208:0.101189708655601 218:0.0383069340152368 234:0.0484452937989115 304:0.153406398018256 310:0.069309891330968 339:0.0525274251922622 345:0.0495587653773282 346:0.0562640446817954 367:0.0576403318018148 386:0.053784730736134 390:0.0616887188058131 408:0.0795319325851138 411:0.0505948543278004 415:0.0587555692146455 441:0.0476204721174743 455:0.049308548711808 502:0.0932292902521974 504:0.0717377995150297 506:0.0377807016181344 643:0.054945479798529 644:0.128697233088674 681:0.0738971306471958 764:0.062458607395947 772:0.0625712500079231 866:0.0755283580309708 909:0.0594584215872491 985:0.0865338697297917 987:0.165400799144677 1001:0.0791585097008863 1087:0.114403901385778 1155:0.0786134806261977 1216:0.144604396096799 1296:0.2062486702906 1312:0.0878122836707896 1335:0.0725909777001091 1407:0.0823169256993757 1472:0.0686708744686327 1754:0.286977863746997 2402:0.093142932534522 2531:0.30753171555206 2659:0.105124709266695 2968:0.103004725204751 3739:0.104034415242061 3874:0.111025546275657 4267:0.12919997160054 4353:0.121012964190508 6297:0.12238615916991 7443:0.131382450334226 8600:0.628280013026106
+-1 1:0.107414480729154 2:0.205347465143618 24:0.202438182836417 31:0.095862487916784 32:0.188540805344763 45:0.220909541619609 48:0.153865290198512 54:0.188320325899193 142:0.039132263614759 209:0.15799473774532 867:0.442172527774305 1544:0.329549126391012 2224:0.371663140655621 2674:0.371663140655621 3400:0.381780247547666
+-1 15:0.122985198194942 24:0.288928017820729 27:0.104522464067977 45:0.315291093229264 52:0.292660037487972 142:0.037234106730372 176:0.186068126247225 238:0.353975402716648 276:0.278859530020907 671:0.219222154360215 1010:0.399672758888042 2683:0.508474491351886
+-1 1:0.273102849393583 2:0.348065906109872 3:0.108664327046255 4:0.18440226200872 7:0.132358966721287 15:0.0730294047511993 20:0.120240525512189 21:0.12894771954939 26:0.18452017796567 47:0.100888741208659 63:0.0921475567790815 75:0.08639964381741 83:0.165690732396827 142:0.121604191396948 143:0.187823293801146 256:0.145059591099934 267:0.228211981971183 339:0.331591241609136 386:0.169764133489594 408:0.125515824242975 1269:0.217749996945024 4268:0.367262387923677 4656:0.396065520148235
+-1 1:0.327682348478205 2:0.208813371578754 3:0.130380850882316 4:0.221254982926335 5:0.143588682607832 75:0.207333158600392 142:0.0729533710655628 187:0.238481236758776 229:0.133935980275394 356:0.243934447336601 8177:0.530548880287729 8638:0.546207929044235
+-1 1:0.56390156602872 2:0.20213014411872 3:0.336554439081658 4:0.285564736573192 5:0.0926620132606215 7:0.204970660626043 21:0.0998440072364572 23:0.118721924382571 31:0.0629070292626427 44:0.28585478354873 47:0.0781179864406688 63:0.0713497017087493 75:0.0668991021530136 83:0.042764687224283 142:0.171196228112644 169:0.120306430739346 227:0.117316608831387 256:0.112319402887555 375:0.117003210671019 387:0.116506241585536 640:0.15404027574931 8263:0.383873853305251
+-1 15:0.0988209813338398 111:0.180381582947798 505:0.207478926348536 882:0.216602308348266 1126:0.307594450331902 2941:0.414544870824928 4201:0.47096896262097 6788:0.6160026572722
+-1 1:0.458482801506285 2:0.219123810081658 3:0.273637158300915 4:0.1160898712851 5:0.0753392825846108 7:0.16665235277186 15:0.0459754349281969 20:0.605576394905732 23:0.0965274150140705 44:0.232415566618092 75:0.0543926274037101 83:0.0347700286456213 142:0.11483331147803 6788:0.286588836730326 7515:0.297181254564582
+-1 6:0.0251055046824272 15:0.0215034315808653 20:0.0354046965384335 25:0.047104967067406 26:0.0543317727385516 27:0.0365506042635565 29:0.0455891492988948 30:0.150905221054051 46:0.0525546143960462 54:0.0469947508031677 63:0.081398254139967 65:0.0449024131931106 67:0.0710061273980306 75:0.0127201422205779 83:0.0325249748355199 84:0.0368357574259281 105:0.0666722334771597 134:0.0449511295834624 138:0.0526306464511395 142:0.0341786707757376 144:0.0373143702181471 162:0.0339928806631091 213:0.129595252921935 218:0.0356019959592283 228:0.237340604345153 229:0.0657370863032734 234:0.045024463544549 283:0.141149312286375 286:0.0351681183107494 355:0.0377744765746563 386:0.0499868709298005 457:0.0432787535365909 496:0.105261292902279 499:0.140247940219378 507:0.0671189177855727 508:0.0486966412049522 515:0.0453459029160762 534:0.0478390979692636 607:0.0615679632652494 647:0.056693934230737 716:0.360577293379924 784:0.0616321020079369 789:0.0644914631527028 850:0.172602482975578 867:0.0551713885783193 993:0.0689718086362724 1007:0.144898974935779 1271:0.0800450163080026 1314:0.073187653287938 1373:0.0728146156154615 1388:0.0812064382850222 1676:0.170501330968723 1943:0.0753263647007957 2050:0.0808105304464951 2076:0.0782680565849376 2251:0.090545930990473 2575:0.0874061290702379 2611:0.152106213634542 3691:0.0962031759066595 7457:0.134042091218821 9766:0.631663154928537 9882:0.145978939975478 9886:0.145978939975478
+-1 1:0.475072141078381 2:0.227052393840598 3:0.189025470160175 4:0.320774307652601 5:0.104087057477959 20:0.104581340008545 21:0.112154577203292 23:0.133360104451282 47:0.0877497807202055 54:0.138817007145583 63:0.12022046966386 75:0.150295260074686 83:0.192149956622301 142:0.153843509404026 143:0.163362657197895 169:0.135139977329373 189:0.277471880359774 229:0.194179678009404 256:0.126168164632521 267:0.396982877093841 408:0.109169625096795 1835:0.249624365425268
+-1 4:0.10535721950763 6:0.0243571800444257 12:0.0328394037170538 26:0.021084918028388 29:0.0176921058802317 30:0.058562863967123 41:0.0448623676265565 42:0.0291452291747496 47:0.046113782499551 48:0.0596033743161808 51:0.0330852659411227 53:0.0375166590898062 55:0.0489266922333521 63:0.0947664007460574 75:0.148091885748475 83:0.0504887945830425 105:0.0517479370459774 106:0.0340987423891201 110:0.0470139587454137 123:0.0494228192660423 142:0.039160263470773 162:0.0527674372621281 169:0.248563063593399 173:0.0364113741030231 186:0.0276436459256308 189:0.0364538744018359 204:0.0877324437215467 215:0.0310342928624254 218:0.0828979208971795 227:0.0346265490812691 228:0.257898084647795 234:0.0349459285150602 283:0.0730357586193716 299:0.0403275374928087 309:0.0358504666557352 339:0.113671700710599 360:0.119968172000119 383:0.175064598429878 387:0.034387365375809 396:0.0494790986448316 455:0.0355686359466959 461:0.0533055668066357 462:0.0598608931214053 466:0.0450139651396752 506:0.0272530434736637 507:0.0520946329681876 514:0.0517479370459774 517:0.0543192437681713 549:0.104035946307466 571:0.0384470738005856 607:0.0477862360526834 609:0.0689944525263489 612:0.0567076976700037 636:0.0996436878080759 667:0.0469204875063516 709:0.0424831012099553 781:0.105579993896515 804:0.0458900758250398 813:0.0680652876641477 814:0.0540784024285904 829:0.0361383680290928 909:0.0857804582228793 918:0.0563257764671188 930:0.0853024667961705 944:0.0533055668066357 960:0.056138831703448 986:0.0435613352417988 1009:0.173668889767295 1116:0.0568049077909543 1127:0.056138831703448 1144:0.0665666905543281 1176:0.10996709214776 1205:0.0674023584472187 1225:0.0434531052357641 1301:0.0639953838321342 1331:0.0550689542412517 1358:0.0652193014066003 1359:0.0540784024285904 1382:0.0638293402966713 1422:0.0661676659163325 1498:0.0800880849149027 1741:0.0739458229070031 2037:0.0800880849149027 2528:0.0560463307618504 2578:0.0735986259132959 2586:0.0818729099366567 2908:0.078027655640045 2970:0.0790182074527064 2997:0.0839333392115143 5544:0.0931981750475364 6810:0.675901291184624
+-1 1:0.150926362887401 2:0.288530427479522 15:0.121075951430802 24:0.568885283206372 45:0.310396451367113 48:0.216193649744778 54:0.264605867410025 186:0.200538334397355 193:0.34277475740064 209:0.221995870215829 506:0.197704744163283 867:0.310644760988874
+-1 1:0.340593692449437 2:0.217041038643418 3:0.135518118790769 4:0.172479655887071 5:0.0746231828331221 7:0.165068322445172 15:0.0455384384982177 20:0.299910196156448 21:0.0804070335256143 29:0.0482727294880031 30:0.319576347718606 47:0.0629104913609157 75:0.053875625573717 142:0.0620409932998821 162:0.0719877057590991 270:0.150725662903865 356:0.126772977732598 930:0.116373453001769 1064:0.123152192290196 1124:0.295540195872787 8574:0.618287639822444
+-1 1:0.129139484974965 2:0.246879803445011 24:0.486764214532336 45:0.531178743073679 48:0.184985154672599 54:0.226408857836043 142:0.0313646126345356 209:0.189949799344396 409:0.154426517488232 420:0.307477678612371 506:0.16916520314878 1620:0.365692516701418
+-1 1:0.42750783841494 2:0.222894403617936 3:0.231954829495937 4:0.118087498645321 5:0.0510904602423688 15:0.0311777076943451 20:0.461997680685563 21:0.0550503502207069 23:0.0654589463808137 30:0.218796653635522 44:0.15760991953532 47:0.0430714134090262 66:0.0854048122901839 75:0.110657187293746 83:0.0471577829042933 142:0.0991109351844505 229:0.142967762173259 242:0.0637648995377207 339:0.141562906614336 386:0.072475690428456 430:0.070825763825814 490:0.0941746709715098 524:0.205743061233443 586:0.0668945515403077 716:0.0871331738529041 1045:0.0472731136755282 2569:0.13685371430088 3371:0.164917091957607 8924:0.403060038541182 8926:0.201530019270591
+-1 1:0.101728100576383 2:0.194476642678268 24:0.191721373918013 36:0.181994674126914 48:0.145719865797204 54:0.178350897603425 129:0.245622590611479 142:0.0308838778980328 208:0.178455217991855 209:0.149630705867509 227:0.169311759377121 409:0.121647661098764 671:0.145467279166 1165:0.356603118726894 2803:0.410404782149816 3535:0.418102693792354 5133:0.422320719168321
+-1 1:0.163551628977663 3:0.0976128283152618 4:0.165647980636195 7:0.118897649723178 15:0.0656020880238846 20:0.216023383062266 21:0.115833336957596 27:0.0557537979277149 30:0.115094392697545 31:0.072981156498698 47:0.0906280436481403 63:0.0827758647575167 75:0.232837597057736 83:0.0496131571863414 110:0.184794344523471 142:0.069514243508449 165:0.185912217989375 172:0.150158851003497 227:0.136104055292028 256:0.130306581252675 346:0.159528320648722 825:0.24774240764533 862:0.184244202629753 1595:0.239818463987323 2303:0.265787839135305 4720:0.32707007769865 6598:0.355784429635016 8752:0.387629635392868
+-1 2:0.0670531508085607 4:0.0710483415172948 6:0.0383259947442739 20:0.0308849787696026 26:0.0236979244508345 29:0.0596539461943474 31:0.0208683100606164 32:0.246260747275512 48:0.0334949431545798 63:0.0118345097157122 69:0.111095355982606 75:0.0221926106330217 86:0.0425330814751059 88:0.0418077023290612 96:0.0339227197003923 134:0.0784254530382887 142:0.0113582727124081 154:0.07915778310711 158:0.0392980835228499 159:0.0658764308246272 176:0.056760124160004 180:0.0421919379093418 193:0.0531061898789034 215:0.0348803029088682 237:0.0470507830027703 267:0.0586185247288726 278:0.047267461647071 283:0.0410434578792521 286:0.0306786018124821 304:0.0414577379320281 308:0.0404542532541694 375:0.0776275499571372 381:0.105261825049645 388:0.056935383187859 402:0.0834640411920343 408:0.0322399918869322 409:0.0279617433841258 453:0.0531061898789034 457:0.0377538438354205 505:0.0393839282835093 506:0.0918913553884326 515:0.0395571035987034 548:0.0619901356920865 574:0.0409954616970943 580:0.0495408578440783 683:0.0662153137674651 717:0.166454067756985 744:0.0675575266471908 758:0.114713221130739 881:0.0623829108030679 886:0.0943174633498805 966:0.0546889990155979 987:0.0446991981642904 997:0.156209172914194 1005:0.0577168866382861 1067:0.0582362447575244 1080:0.0553594985925348 1096:0.0717395667396278 1260:0.0730973877165879 1351:0.0726967561813517 1353:0.0786894637937324 1433:0.0527876735184059 1679:0.0789869545493466 1766:0.0961044390532254 2298:0.153000931055799 2730:0.0876974473386124 3405:0.100426227057934 4515:0.285581063865719 5502:0.340734636027167 6297:0.0992237620904797 8538:0.636717286512745 8753:0.116930451219441
+-1 6:0.0258789291975978 15:0.0886635485605064 17:0.070508600382653 26:0.168016710000472 48:0.0791589739171882 75:0.0524480450122359 88:0.197609221363985 100:0.0799584019733203 142:0.0335539162298476 176:0.067070918245517 192:0.104497341246501 238:0.382786495065589 317:0.0771220114757918 345:0.094956516357559 402:0.0986257511955205 469:0.149612021848757 603:0.138533815348256 671:0.0790217620247541 808:0.135050284813634 952:0.120544409992271 963:0.109783619407847 1020:0.165409941972224 1102:0.155001671632671 1409:0.509951892258536 3564:0.221023404820321 6292:0.512949412136628
+-1 1:0.129536026262931 2:0.247637883247247 24:0.244129446891239 45:0.266404901748064 48:0.185553178089314 54:0.227104078667305 142:0.0314609221706394 193:0.294194328462317 209:0.190533067413766 409:0.309801412463839 671:0.185231545538349 5166:0.671705523865339
+-1 1:0.380084755377502 2:0.181654839567917 3:0.226846704027506 4:0.0962391395800224 5:0.124913356389425 15:0.0762277750905709 21:0.134595068900538 26:0.0963006796615592 27:0.0647843399028951 32:0.166787302307117 44:0.192673778588291 47:0.105307229330774 75:0.0901835724836687 142:0.115390841954908 176:0.115327368555485 186:0.126256212491676 187:0.207464064565594 229:0.116516096767885 298:0.22056571031301 356:0.212208023657654 1471:0.257686907493792 5134:0.41341146752937 7389:0.441004144950366
+-1 1:0.573747888818708 2:0.274212736031145 3:0.342431038550851 4:0.217913251088925 5:0.0942799908437655 15:0.0575339110669198 21:0.101587390094603 26:0.0726841985450711 44:0.29084611295699 47:0.0794820098031427 75:0.0680672318299676 106:0.117545619983495 142:0.156766947165239 187:0.156586218423881 229:0.175884098449499 238:0.165593824612094 270:0.190428946863272 298:0.166474857051553 356:0.160166783646772 709:0.146448288724545 3670:0.274199730107674
+-1 1:0.222295264870751 2:0.0708280808521197 3:0.0884486024821263 4:0.225144573374179 5:0.097408616548881 7:0.10773513213304 15:0.0594431398594648 20:0.195742369779599 21:0.104958507519638 30:0.208577875742902 40:0.108406996753252 47:0.0821195732642638 63:0.187511459390505 75:0.10548900395827 83:0.0449553044778629 86:0.134782772947218 142:0.107979443692442 179:0.0945789902412858 187:0.16178243942097 189:0.129834355259709 227:0.123326141558463 229:0.0908603540877718 256:0.118072954189984 284:0.105364816818515 356:0.165481823581952 375:0.122996689605542 418:0.179123706734703 640:0.323861950017117 987:0.141646964389975 1665:0.186998854363509 2017:0.260924073034078 3236:0.519497131942806
+-1 1:0.0956018467041753 2:0.182764900509572 24:0.18017555911664 32:0.167806510329846 48:0.136944346672796 54:0.167610277549929 72:0.139308142584323 142:0.0290239938002308 162:0.121238139692003 208:0.16770831557213 221:0.21309256802724 409:0.11432181454674 2262:0.376221389815923 5393:0.389200165059001 5780:0.43549743810973 9029:0.495740763211128
+-1 1:0.421782902502719 2:0.201583737318071 3:0.251733488108111 4:0.106797294687891 5:0.13861728804924 7:0.153312431415289 31:0.0941054644592689 44:0.213811536556948 75:0.200154772966081 142:0.102440065913476 187:0.230224427787369 356:0.235488834756851 1043:0.276134702455307 1289:0.334371395480856 8208:0.51217996869507
+-1 1:0.319432676660143 3:0.0544707454503461 4:0.0924363031307361 6:0.0106850184947858 17:0.0582238695718552 24:0.0860024646885712 29:0.038805904090126 30:0.0642259575467087 47:0.0505730361615684 75:0.194895041453571 83:0.0276855583710474 142:0.0692695228521458 185:0.0622214463504051 213:0.110312673799907 227:0.0759499491872912 229:0.055956013776967 303:0.0954681844582414 308:0.0789485342698612 357:0.098911414337235 414:0.0789485342698612 437:0.096109034972427 538:0.0936256257278162 579:0.12546474758326 664:0.120788365788458 710:0.123135037375619 1241:0.666224911818935 1377:0.101911370400828 1670:0.179580221376101 1718:0.151890738010914 1858:0.137573336734972 2263:0.179580221376101 2285:0.144282455299155 2723:0.278576627057629 5069:0.211789054860821
+-1 6:0.0161839907158136 9:0.0619021832999295 20:0.0456465056028348 29:0.117554198304819 30:0.097279410527685 31:0.0308423534692906 32:0.121320493306533 42:0.096826914592347 51:0.0549582952382754 55:0.162545321629146 56:0.522943469713761 75:0.0327996056969539 83:0.104834357530078 97:0.050492821588473 127:0.0804780366592618 141:0.0739178563505201 142:0.0524593062368135 173:0.120966659391303 189:0.0605539274044332 203:0.0613456889885781 214:0.0693278267012048 218:0.0459008794570767 229:0.127130094520046 234:0.0580490620847395 266:0.0822841506956158 284:0.0491414884438503 317:0.0482300449210603 355:0.048701811488129 383:0.484669515397024 396:0.0821902691151267 398:0.0629404329509021 402:0.123355818125319 409:0.0413261050159677 449:0.092494970360688 465:0.0688090423358692 506:0.0452703270402167 507:0.0432674808189573 518:0.0705691416562642 586:0.0594841139773123 609:0.114607435784075 631:0.0543084060902332 730:0.0777859444673185 747:0.0891790627874202 856:0.0607314100497818 1045:0.0420362976832751 1235:0.18970169788775 1545:0.103442957192766 2858:0.365080043990738 3954:0.131258004155483 4377:0.172817554337561
+-1 4:0.0297677443826977 6:0.0298215856076604 26:0.0297867793556253 27:0.0267179400348879 29:0.0249937350233612 30:0.0689433993006119 32:0.0171963361373353 33:0.0126940731430783 40:0.0286663073445131 47:0.0108575322474424 48:0.0140336689730585 57:0.0171262326065983 60:0.017411456897391 63:0.0595008951801277 64:0.0795846948334633 75:0.0743858557596556 77:0.017297858185267 81:0.0139669985994356 83:0.0237752656844065 109:0.126223728631273 132:0.01391297053796 137:0.018779605926396 142:0.0243892331122093 144:0.0136381207098415 154:0.0165827139881927 159:0.0138004118868462 162:0.0248482826883277 168:0.0170372317920029 173:0.0342923652815609 176:0.0237812851228046 179:0.0125048681533052 181:0.0193626962272103 185:0.0400749932082631 189:0.0171661961092003 190:0.0196683721081691 199:0.0107228717027959 204:0.013771122720384 209:0.0144103055740666 218:0.0260245216823791 225:0.021858209349554 227:0.032611410549216 228:0.0520477198325873 229:0.0120132044688952 286:0.0385610455052029 291:0.0184638812416267 299:0.0189903111414631 308:0.0847473596389223 317:0.0136725468513516 320:0.0217742850326822 337:0.087688833825539 345:0.0336686607077771 347:0.0188446967910176 355:0.0138062861108051 363:0.0214295872551667 396:0.0232997980209442 402:0.0174848292746329 405:0.0218161073162205 408:0.0135078710761578 414:0.0169494719277845 418:0.0236830434553634 423:0.017380271546156 442:0.0195209595035779 457:0.0158180578005965 472:0.0418000609940629 478:0.0179895151807442 483:0.0222728839855588 505:0.033002057047162 506:0.0128335080020441 507:0.0245314579161353 509:0.0212929629341489 513:0.0343323922184005 521:0.0226207200240179 557:0.0215894493215032 560:0.027326509357833 574:0.0171762267575622 586:0.0674516755352061 598:0.0484871117429031 622:0.0253175122073903 625:0.0255031961894498 631:0.0153956776923238 657:0.0238257758870612 686:0.16276949691867 689:0.11467358652663 693:0.0272763558612782 724:0.0268420988242451 767:0.0219432678131048 778:0.0438437903863946 806:0.0246251412160511 814:0.0254656185822235 836:0.0260132882464269 850:0.0420566032849633 882:0.017226621186212 883:0.0267495349425862 944:0.0502033777495376 966:0.022913527725987 986:0.020513112414237 987:0.0187280135841348 1009:0.143116746032599 1010:0.0255409994893636 1058:0.0514669972120129 1081:0.0255031961894498 1089:0.187283412891653 1102:0.0274794131646934 1175:0.0243055684963664 1190:0.0248249748417953 1248:0.0295356390155456 1335:0.024658009335205 1363:0.0259725487481166 1424:0.0213316967826326 1426:0.0272265988391977 1504:0.032052068413695 1545:0.0293246394643699 1649:0.0260542931505062 1665:0.0247242650050416 1707:0.0262210374848452 1746:0.0267956467276881 1781:0.0291204843619608 1844:0.0298284467175147 1858:0.0295356390155456 1865:0.0272265988391977 1939:0.0314424732835734 2571:0.0305417635868029 2642:0.0318422412999846 2736:0.119920489048005 2804:0.119920489048005 3264:0.0391840513469968 3333:0.041572646504071 3540:0.0385541029880971 3785:0.0783681026939935 4606:0.0391840513469968 4662:0.0892570892269049 4663:0.0892570892269049 4859:0.0432240276635371 4985:0.0432240276635371 5056:0.0398841311335617 5295:0.0489913727487436 5302:0.657699101509339 5324:0.087774382072541 5355:0.0446285446134524 5621:0.0841529075144317 5702:0.0489913727487436 6414:0.0438871910362705 6823:0.0464392818925071 7548:0.0464392818925071 7549:0.464392818925071 8254:0.0489913727487436 8273:0.0489913727487436 9042:0.0508021100277983 9754:0.173151087057978
+-1 1:0.316448241642194 2:0.201654512592306 3:0.125910935383406 4:0.106834790806971 5:0.0693329780227539 7:0.153366258819828 20:0.6966222241356 21:0.0747067985665147 23:0.0888319202701148 31:0.0470692522628046 47:0.0584506255205052 63:0.0800795351800063 75:0.200225046536432 79:0.167495182571815 83:0.0319980433743845 142:0.0896665281980175 256:0.168082656914192 640:0.11525835320572 693:0.293680004936142 1007:0.14255149184114 1380:0.127193160857975 4648:0.226515103593011
+-1 6:0.0235221212864655 24:0.0946634021422954 29:0.0427138793949833 32:0.176329522686991 45:0.103300911332056 63:0.0254215112131301 75:0.0238357867629687 134:0.0842321981095984 142:0.00914944294450528 176:0.060962733879735 193:0.114076513005078 221:0.11195784577884 331:0.0919398384705482 386:0.093668480726832 506:0.0657967581677771 513:0.0880102349161105 533:0.294605089985038 663:0.110071387533313 684:0.110071387533313 880:0.138343311311595 963:0.199571133045044 1025:0.143358556654146 1433:0.113392313369904 1949:0.146348676317939 2251:0.169670548168237 2589:0.57231867240529 4089:0.213140893977482 4515:0.408967919061395 4704:0.206440328641543 4973:0.208523000094661
+-1 1:0.471359343450024 2:0.300370569815706 3:0.187548192802432 4:0.159133691472155 5:0.103273593275934 20:0.518820064376478 30:0.442272716090188 31:0.0701110921904422 66:0.172636179169698 142:0.100170779054248 143:0.162085940603169 229:0.192662119336416 270:0.208594436956528
+-1 1:0.298337324519238 2:0.0285170178787294 3:0.249280122176169 4:0.151080657722358 5:0.117656862627682 7:0.0867532948018094 15:0.0239331782217764 20:0.0788103897701842 21:0.0422587143326883 23:0.150746229835159 26:0.0604709064768018 32:0.104732172138113 44:0.181480931699936 47:0.0661264659665152 63:0.211390019489535 75:0.198204087323098 83:0.0181000417647286 95:0.552827303941222 142:0.128613579728275 170:0.208198308464115 176:0.0724184973838582 209:0.0877641953432894 218:0.0792495756911083 267:0.224368720605166 408:0.123402043389007 434:0.0604468377259134 571:0.110265043524082 592:0.06881189225894 766:0.0930054290585142 997:0.132868320820112 1269:0.214082923273078 1317:0.181212824467624 1391:0.176547665258047 2771:0.100777026936482 7068:0.138461745539584
+-1 1:0.557047993948769 2:0.15213217960428 3:0.18997943353361 4:0.24179488037381 5:0.104612358329735 23:0.134033138910692 24:0.149976830580765 45:0.163661382615407 48:0.113991482422116 63:0.161102922313634 75:0.151053761948485 83:0.0482799221206533 142:0.159451790837515 143:0.164187106894656 209:0.117050793894103 229:0.195159653356268 409:0.190321301024658 457:0.128485562912329 4424:0.369331871066047 8133:0.369331871066047
+-1 1:0.115827228480146 2:0.221430365827324 24:0.218293227294214 31:0.103370478684434 45:0.238211270742325 48:0.165916085075389 54:0.203069653805635 142:0.0210985595605164 193:0.26305974240094 209:0.17036895270789 506:0.151726922558212 671:0.165628490897598 867:0.238401833972918 3242:0.480852764908153 6997:0.562605889475242
+-1 1:0.306466376830274 2:0.195293636409319 3:0.121939271869596 4:0.155197281653977 5:0.402875866066812 7:0.148528560072301 15:0.0409755100063366 20:0.269859346277143 21:0.0723502894579401 23:0.0860298562911274 30:0.287554959405223 47:0.0566068919636681 54:0.179100147298723 66:0.112243843418304 75:0.145431945468215 79:0.081105904512103 142:0.114750396401553 143:0.105384334992072 256:0.162780752407347 339:0.0930249964713398 408:0.0704247135758989 480:0.175932887726964 508:0.0927930828837604 515:0.0864081387055192 1010:0.266321400809853 1164:0.253765014864833 1202:0.148191162123087 4913:0.255421699990178 8884:0.255421699990178
+-1 1:0.397758654829227 2:0.253469026254384 3:0.158263367261875 4:0.268571330716326 5:0.174295751687677 7:0.192773252547699 15:0.106363144366002 142:0.104655636326891 187:0.289481494428103 356:0.296100897987707 847:0.33107051240777 4356:0.556304084020866
+-1 2:0.0897664911218183 4:0.0317049993978702 6:0.0439786309235169 18:0.039236063697321 20:0.124040532283165 26:0.0317252731477872 27:0.0426850752526695 29:0.0532406045737739 31:0.0279371654753695 41:0.0337509224625087 42:0.0877063268900436 54:0.0548821152189201 63:0.110903019315484 75:0.0742751370120842 77:0.0552707564568217 83:0.0759676085481087 105:0.0778621683711445 118:0.095992693735002 139:0.0599639523692709 142:0.0380143317018966 162:0.119094228267511 166:0.0546905751214782 169:0.427427039898339 199:0.0342621163877827 204:0.132006002453581 219:0.0612867159709437 229:0.115155106144615 234:0.0525811447808645 242:0.0513602064056115 286:0.0410705597577733 339:0.0570117741563253 351:0.0520169687060156 364:0.0679130561049502 402:0.111736346798177 408:0.0863216988489764 444:0.481451013833313 478:0.05748076447858 499:0.0545954848345695 502:0.151782632248527 507:0.0391919109722009 518:0.0639218984980783 586:0.0538810223089678 630:0.101416483083504 631:0.196771355876859 702:0.0873146737217588 778:0.0700456505839062 789:0.0753153884400383 909:0.193603441867726 1014:0.089885602014639 1045:0.0380766988329494 1056:0.143952252784617 1123:0.0832496414268664 1127:0.168937794075523 1175:0.0776620517129372 1199:0.106149016041584 1309:0.0865258840659613 1341:0.0841914918367251 1366:0.158860192901814 1697:0.100159101284481 1746:0.171236883610307 1992:0.0957935958510826 2137:0.103463491665349 3041:0.131344031411482 3713:0.134444241782636 3758:0.125202330588885 8889:0.162324781528769
+-1 1:0.436897568153727 4:0.126427879793609 29:0.0530759886691901 30:0.0878437514843101 47:0.0691702450236416 75:0.177709161434933 83:0.0378663612369183 101:0.142038180421734 142:0.0871626268354275 172:0.114606076643402 204:0.0877318999484419 205:0.115638086719669 215:0.0931023015277621 227:0.10387900338897 229:0.0765327035366 239:0.123901031524416 259:0.177783114673104 269:0.15605295222581 303:0.130574674018819 320:0.277435534447529 345:0.10724672318258 455:0.213410492935696 475:0.118420618888837 768:0.182638188333615 869:0.195656691515566 989:0.176741530147851 1060:0.443672187507239 1358:0.195656691515566 1581:0.208495009037535 2040:0.199095833825964
+-1 1:0.48082318692121 2:0.262629720330085 3:0.245974810985993 4:0.208708381011171 5:0.0902975112914113 15:0.055103622069855 21:0.0972962388099237 44:0.139280243526528 47:0.0761246115260727 54:0.120426406259227 63:0.0347645182150525 66:0.301889705652657 75:0.130384010005407 142:0.129291490846593 154:0.116265154146468 189:0.120356079117432 229:0.168454581121478 256:0.109453293680957 269:0.171742493634745 356:0.153401181156456 1665:0.173347407668977 8418:0.343489582497499 9888:0.374078356206395
+-1 2:0.0782023980560952 4:0.0276206293940554 6:0.0574696809209529 15:0.0656321056432363 20:0.0720407430395098 26:0.0829148741853378 29:0.115954820657278 42:0.076407632756697 63:0.0552091604004799 75:0.0129413409340186 83:0.0827264312217956 84:0.0374763180430922 114:0.044837841932093 142:0.0231820170723585 169:0.0930910273319797 186:0.0724710563529103 200:0.0616878846168218 205:0.10105355693177 218:0.0362211019067516 228:0.0482935744750989 243:0.0602097147404572 283:0.0478679494097996 339:0.0496672800812362 341:0.0533531255686024 348:0.0634381705468918 355:0.0384313611813152 367:0.0545017863163383 369:0.0571005718567201 381:0.0613821054147424 402:0.0486710027341212 409:0.0326110758420709 414:0.0471807749210308 433:0.0516379734864507 465:0.0542982915367486 466:0.0590046915859363 490:0.0660822792010483 502:0.0440764539074805 506:0.0357235231322535 507:0.102429137558731 508:0.0990869166785515 515:0.0461344519126916 534:0.0486710027341212 535:0.121106537910034 586:0.0469398447195303 609:0.0452192600654677 631:0.0428556126735456 636:0.0653069003070195 649:0.0854900196640273 655:0.0483511137831843 716:0.0611412672093435 742:0.0655359323731393 829:0.0473704827681632 850:0.0585346594273014 930:0.0559076025541163 982:0.0715236204420112 1020:0.0816284554529873 1047:0.0719616608466927 1067:0.0679194629768043 1182:0.0955974923420863 1375:0.080152154950171 1378:0.156612329175737 1439:0.150490001138643 1548:0.0702716091170139 1734:0.176703179113519 1745:0.104264918550045 2024:0.0621885102052681 2087:0.114423746526909 2307:0.0895200693596971 2509:0.237298150871075 3899:0.108174550565075 4598:0.10291650696224 4883:0.124228608857652 6286:0.118649075435537 7997:0.297034922825487 8868:0.132463403120167 9744:0.642647550761159
+-1 6:0.0201545241606431 23:0.0483253413772325 26:0.0581562245784385 29:0.0975964034055982 30:0.0403818865248029 33:0.0743523856382848 37:0.031786881031713 53:0.0517390498867946 57:0.0501563303182598 72:0.0418087840681926 75:0.0272310440231487 83:0.0174072153879898 114:0.047173675965303 139:0.0549605524963201 142:0.019163326045231 168:0.0498956802174476 176:0.0696464902358359 206:0.064076481726574 215:0.0855984976043195 218:0.0381080455888827 227:0.047753312629325 243:0.0633463487701151 291:0.0540738029072051 294:0.128402065038945 303:0.180076041157562 348:0.0667429914611639 355:0.0808668972970912 357:0.0621902679593241 374:0.0867095109960041 399:0.0633463487701151 426:0.0604792715622862 437:0.0604282799745311 465:0.0571269690968502 478:0.0526845621215682 493:0.059975594128339 505:0.0483253413772325 521:0.0662476290976213 538:0.0588668435375953 561:0.0595337593275126 603:0.143853614507958 720:0.0668870035000472 727:0.0719268072539791 729:0.0723108512952555 757:0.0638298767480581 778:0.0642010325194727 780:0.0681587799550785 823:0.306183318125327 827:0.0573841841616411 829:0.049838255101788 882:0.100900661847871 911:0.113809919839086 1000:0.081566136640249 1036:0.0759453384130332 1081:0.0746893237778754 1106:0.0860845885325535 1143:0.0797365256089899 1241:0.251332201029498 1379:0.0709101690896019 1490:0.108973642017914 1721:0.0880267460368823 1726:0.0907171797816038 1776:0.0778088883474117 1916:0.082053392689237 1937:0.231504154686831 1974:0.120384668592465 1975:0.0955008657062774 2066:0.0899436349324307 2091:0.177920569225524 2124:0.0938685213303345 2285:0.0907171797816038 2303:0.2797620485606 2402:0.0926593372859326 2448:0.099275932702502 2560:0.10827795767402 2681:0.102974985375672 3141:0.116805703948047 3320:0.100133456955328 3891:0.136003288980553 3892:0.136003288980553 4178:0.253174023613659 4585:0.10457890500085 4598:0.10827795767402 4637:0.119112892137434 5484:0.143477408649948 6531:0.143477408649948 6532:0.143477408649948 6625:0.136003288980553 8241:0.143477408649948
+-1 1:0.399617995513632 2:0.254653878593936 3:0.159003176475398 4:0.134913389727957 5:0.0875552525008859 7:0.19367437976888 20:0.703768238103425 31:0.0594401161528827 75:0.252848716533504 142:0.0849246896045495 162:0.0844630517676044 270:0.176846161914897 325:0.140038086790937 524:0.176294024277164 1395:0.166526819845501
+-1 1:0.361345819911487 2:0.172698894169971 3:0.143775139801164 4:0.121992477755231 5:0.158339838834463 7:0.175125816002066 20:0.715912892099796 63:0.0304803982557421 66:0.132343534874842 75:0.0285791142463232 142:0.0987316592572999 143:0.124255682882388 269:0.15057822953389 339:0.109683137086244 2225:0.218357076882119 3170:0.218357076882119 3937:0.24752200529253
+-1 176:0.250973090796094 238:0.477450397751367 420:0.492345280964369 641:0.383119754941293 1431:0.565569627074471
+-1 6:0.0292679344915689 15:0.0091158715235609 17:0.0144985702203366 26:0.011516335382783 27:0.0697264411472883 29:0.0289896633228741 31:0.0202824899732095 37:0.0125891384933386 42:0.127350263741158 51:0.0361415698456635 63:0.0230045771746304 65:0.0190353166761754 77:0.0200633912670119 78:0.0408819685793202 83:0.0413645827819618 85:0.0163056567593908 114:0.0186830516455698 120:0.0221675821488138 139:0.174136243529217 142:0.0282885153405518 144:0.0158185452220519 176:0.0275833703306448 178:0.0214732067035984 186:0.0150986357762381 194:0.0210807610478555 199:0.0373116431251127 228:0.10061493898769 229:0.0139338419270512 242:0.0186438540510167 243:0.0501764207012751 277:0.0240956615449771 283:0.0199456381586173 286:0.0149086924587169 296:0.0239932680790103 330:0.0264619068909628 337:0.0203416557581474 347:0.0218575340933489 351:0.018882260033622 364:0.0246525704390639 369:0.0237926913299342 382:0.023369910693198 387:0.0187819763901825 396:0.02702490442052 455:0.0194271725466878 459:0.0972194409070201 461:0.0582297530669125 490:0.0275351930862323 499:0.0198182663648524 524:0.180468108636002 548:0.0301249670423841 549:0.0284116079542942 586:0.0391178301782765 597:0.0475853826598684 599:0.174634677912887 644:0.0253528385930392 666:0.0347732601766673 667:0.0256274209707296 730:0.0255767226110989 778:0.0508534127017129 782:0.242526732483382 814:0.0295369903024645 819:0.0267231865056753 850:0.0487804951358889 853:0.028155422565207 858:0.0266936893566688 944:0.0291148765334562 986:0.0237926913299342 993:0.0292389679252575 996:0.0592488457954995 1007:0.245705981288236 1009:0.0711419358172145 1064:0.0246525704390639 1124:0.0295805757122062 1127:0.0306623726506348 1190:0.0287939222365047 1284:0.0746025235422893 1305:0.0967980463251419 1407:0.0324322082246094 1467:0.0326953190223874 1469:0.0301249670423841 1529:0.0394858948331601 1721:0.0348628384103067 1798:0.0412003493574359 2104:0.136346062937042 2137:0.0751148943204637 2151:0.0405830352333541 2237:0.0383848071311951 2348:0.0428832952680741 2459:0.0383848071311951 2488:0.044378403932233 2548:0.0370537623253158 2594:0.0454486876456805 2643:0.0386828295084021 2662:0.0418747239630738 2771:0.0383848071311951 2833:0.281390954905225 3081:0.0488035192460055 3316:0.0819774496918943 3371:0.0964383294027421 3762:0.0488035192460055 3766:0.0494387488010347 3824:0.0447180249088695 4207:0.0881077646166733 4512:0.0437431743772038 4556:0.0471744520629191 4568:0.0589242089836088 5029:0.683249269444077 5466:0.0527384817666369 5534:0.0538638641148072 5740:0.0476781368978352 7551:0.113647952207546 7793:0.0551949089206865 8197:0.0527384817666369 8758:0.0618843209725745 9929:0.0589242089836088 9942:0.0589242089836088
+-1 1:0.259000364816454 3:0.103053118669422 4:0.174880098246093 7:0.125524214572137 20:0.68418927248536 21:0.122289117377208 31:0.0770486411581224 47:0.0956790485230634 63:0.0436946206817711 75:0.122907208685718 142:0.0943566498996754 256:0.137569004125855 325:0.181522934273432 640:0.188668803299458 1380:0.208205138972597 8533:0.47016937725378
+-1 2:0.0814885084815931 3:0.101761118003441 4:0.172687586206494 7:0.123950488605199 15:0.0683900050422664 20:0.337805717056526 21:0.120755950568346 42:0.119427489144636 47:0.0944794982716167 63:0.0431468111661586 83:0.0517215864973885 142:0.0569394704169587 187:0.186132527216908 256:0.135844269860226 267:0.213714169667506 373:0.142500091997205 408:0.117542076128182 1085:0.286889741665156 1124:0.221922360015961 2577:0.286889741665156 2807:0.27113316404439 6121:0.414088777977715 7750:0.426310529082644
+-1 1:0.333212618444038 2:0.106168749450525 3:0.132581278543747 4:0.112494543186507 7:0.161491093826659 15:0.0891031317856631 20:0.586821564666473 63:0.168643765960831 75:0.105416152240658 83:0.0673863868703065 142:0.0741845995366226 1774:0.44423842463245 3181:0.471318466465457
+-1 6:0.0222833838432266 15:0.0254482951540839 17:0.0404748896828691 31:0.0283107758794058 82:0.111427630697354 100:0.0917989431509085 139:0.0607658646639182 142:0.0231136238778401 175:0.215702708115409 176:0.154006064632304 194:0.0588500427887758 206:0.0708446811373981 228:0.0561762779927525 229:0.0388983676517892 234:0.0532843250216656 274:0.0802731867189319 286:0.041619806188612 408:0.0437380497996032 419:0.0903597107807308 433:0.0600665654817694 480:0.0546325360379127 493:0.0663106295407921 502:0.0512708192456963 509:0.0689459255232851 608:0.081050739353579 645:0.0945091623213764 655:0.0562432091363187 657:0.154294183944623 764:0.0686973795783033 902:0.102446654802867 944:0.0812784569728863 1009:0.132402113232223 1010:0.0827009305388769 1189:0.101192073247462 1225:0.066255769440645 1250:0.100299353243772 1277:0.0876830154339945 1430:0.111704611147315 1500:0.423832732790825 1560:0.113293507504761 1604:0.0997252162660437 1639:0.100299353243772 1643:0.0994441012588237 1651:0.10180971187436 1786:0.0994441012588237 1788:0.0914616285893588 1883:0.106753242934573 2095:0.11023067882651 2424:0.104131954549644 2949:0.110710242479552 3236:0.11120136298853 3472:0.236517301980019 3571:0.118258650990009 3954:0.120484188786825 4412:0.263388832702722 4431:0.131694416351361 4601:0.129143527051624 4781:0.269221770454381 5662:0.144505784500145 6347:0.279916008056092 6664:0.154084700468412 8195:0.147227223036968
+-1 2:0.137528017411854 6:0.0336890405529556 15:0.0577108476980785 26:0.218723182615511 29:0.0611760137441191 32:0.252544078322707 48:0.103048695023829 67:0.0952830200260811 75:0.0341382810287311 129:0.173696889524384 142:0.0393122649067901 176:0.0873125339709548 193:0.163383575229635 198:0.146668152090154 199:0.0787376371783011 221:0.16034916072111 238:0.33220616553654 298:0.16698682468652 317:0.100396989083097 355:0.101379031354906 373:0.120248581662341 377:0.129646015902697 409:0.086025557739493 441:0.237558364974448 457:0.116151394000546 513:0.252101444172897 723:0.17287884526348 727:0.180342520650208 767:0.161128577069894 799:0.169934009011482 827:0.143879713451254 853:0.178246621766888 867:0.148068813647778 963:0.285831363271746 1083:0.180581375415206 5178:0.2902258865029
+-1 1:0.480901777485447 2:0.15322571084666 3:0.191345012114808 4:0.243532910135981 5:0.105364315492711 15:0.0642980668849459 20:0.211729326782903 23:0.134996573637613 30:0.676839458864906 63:0.0811304677787126 75:0.114104656116263 83:0.0486269598305967 142:0.116798498685469 143:0.165367289361326 186:0.106497013533246 229:0.196562467532415
+-1 1:0.392448635816784 2:0.250085252370057 3:0.156150574796066 4:0.264985943308696 5:0.171968929269075 75:0.124156237939256 142:0.103258499113388 187:0.285616959438101 229:0.16040837411588 356:0.29214799494254 930:0.268182317455058 4235:0.607132918387893
+-1 1:0.4644286242828 2:0.0739885039158768 3:0.184790543309117 4:0.195992299809191 5:0.0508775454612034 15:0.0310477774729399 20:0.204476599093217 21:0.0548209329632636 23:0.0651861522588216 30:0.326827258140521 44:0.156953094731469 47:0.0428919172659701 60:0.0687827354967161 63:0.137114891810311 75:0.146928044894966 83:0.0704418857898559 95:0.358582946123618 142:0.103397799479045 143:0.0798513400189921 169:0.132112301121724 170:0.180059516585077 189:0.135627700016396 204:0.0544018514447764 227:0.128829083011294 229:0.0949146381398793 256:0.06167074646343 267:0.0970222180646146 375:0.128484930567579 408:0.0533618943452298 491:0.324453515811095 631:0.0608195415664774 940:0.123831654189438 1003:0.0957724618240179 1359:0.100600134585165 1409:0.119048343464717 8199:0.193536971274517
+-1 1:0.626121417737728 3:0.114981301832385 4:0.146341578162817 20:0.0636152292670831 24:0.0907705160717858 30:0.135573400897988 47:0.0533768492371206 63:0.0243760908642593 75:0.388544806971874 83:0.0292204697874139 142:0.143295375380277 185:0.0656710574099366 213:0.116428504303165 227:0.240482041124775 339:0.0877169023008948 356:0.107561425342446 375:0.0799465401094199 472:0.102746899706796 491:0.1345887329658 598:0.238368092717754 710:0.129961750858855 1081:0.125376579783093 1085:0.162080353607656 1246:0.158638682667168 1377:0.107561425342446 1424:0.104869019698906 1433:0.108729229778665 2723:0.147010578680071 4841:0.199947814076846
+-1 1:0.180684114202625 2:0.172709603916368 3:0.107838041902748 4:0.274500096738188 20:0.119326214785029 21:0.127967199190512 47:0.100121581734398 63:0.0914468653999822 75:0.171485319306278 83:0.0548102725423419 142:0.0493688910004007 189:0.158296256243757 213:0.436781345336371 256:0.143956555832455 524:0.239129843800907 709:0.184477397409968 7464:0.468466267979653 7466:0.468466267979653
+-1 1:0.316778337773834 2:0.151398648098222 3:0.189063414974206 4:0.120314512356583 5:0.15616192773961 7:0.0575723398170309 15:0.0317656884994052 20:0.523011667894262 21:0.0560885455094351 29:0.0336730142381139 44:0.160582287109049 47:0.0438836977687231 54:0.0694224365774707 63:0.0601223013099561 66:0.261046388351273 83:0.0480471321607798 95:0.36687438183585 142:0.0961714948880127 143:0.0816977252402089 170:0.184222993745048 267:0.198531283551491 270:0.315419541022992 284:0.0563056722401738 408:0.109191539715595 930:0.0811771984188486 1064:0.0859057602175429 1990:0.24688584699028
+-1 2:0.0630692339198755 6:0.0154495208987677 48:0.0945145923558637 129:0.159311970938424 142:0.00400628577844443 162:0.0836746724445051 179:0.0842183550319189 221:0.147069650485686 345:0.22675322811679 409:0.0789012468333917 420:0.157099781893364 506:0.0864316936388849 750:0.357268887071853 959:0.17176008613606 964:0.370139204284413 1045:0.0802571715429871 1140:0.156920539892396 4281:0.249002540068992 6382:0.601132705876654 7708:0.295573451133857
+-1 2:0.0468898259084593 6:0.0114861922412542 48:0.0702683781922207 67:0.0649730041214147 106:0.0804002576554572 142:0.0119141477398916 179:0.0626134766558346 221:0.109341272742471 420:0.116798333599472 506:0.0642590184756219 515:0.0829860645839757 671:0.0701465770031336 719:0.123631250108296 963:0.0974534725011935 1043:0.256923664531204 1045:0.0596684717359486 1059:0.315874199838412 1140:0.233330146561273 5572:0.213424445912054 9903:0.801453954712887
+-1 1:0.226833481021303 2:0.144548109408322 3:0.090254303905913 4:0.076580319635111 5:0.248493097526155 7:0.109934573119389 20:0.549280879429772 21:0.0535506314930345 23:0.0636756696643636 30:0.106418023897855 31:0.0337397429811417 47:0.041898032948087 54:0.198843558060352 66:0.0830781568572679 75:0.071761726432446 83:0.0917461576252223 95:0.350273922197207 142:0.112479369704273 170:0.351774415292162 189:0.0662424788419132 227:0.125843877092467 267:0.189548070978532 408:0.104250802946624 1269:0.361717132641373
+-1 1:0.12876981790199 2:0.246173099880769 24:0.242685416000712 31:0.114921144978599 45:0.264829111066478 48:0.184455627079354 54:0.225760753193314 142:0.0156374150721546 193:0.292454162728411 209:0.189406060252131 409:0.153984465247426 671:0.184135896991794 1045:0.156630701520013 8615:0.701276522930386
+-1 1:0.317717029852035 2:0.0506157598353238 3:0.126415770896081 4:0.160894711772963 5:0.0696109661847735 7:0.153981175496148 20:0.139883061339008 21:0.0750063328749511 23:0.0891880887623504 30:0.447167036232725 47:0.0586849812689632 63:0.107200815051838 75:0.100513920945514 83:0.0321263384154968 84:0.0727685733711406 95:0.490615361074796 110:0.119661113827792 114:0.0870626027532213 142:0.0900260430216887 170:0.123179261171398 339:0.0964400267545125 387:0.0875235898503009 2422:0.197404139369085 2490:0.203842214120863 2548:0.172669703592358 3880:0.224700228909504 4720:0.211789867801891 6598:0.230383463533455
+-1 6:0.0278387081173131 15:0.0190755856254691 29:0.0404419042501667 54:0.0416888062503993 63:0.0120346634037729 83:0.0144263705099348 86:0.0432524313532445 94:0.0668484033244147 97:0.0694837236082982 98:0.0361161710937561 142:0.00721898246239808 154:0.0402482780599754 160:0.0504650384663446 218:0.0631647018573711 226:0.0863433447785802 264:0.137501903081691 276:0.0432524313532445 307:0.106936548496692 336:0.0509040591499833 339:0.043306508820112 373:0.0397466370246641 390:0.0508595849746485 404:0.0467561275907814 496:0.0466883808348001 502:0.0384316865506128 505:0.120150052295219 523:0.0652626449136011 530:0.0457701810941792 572:0.0603356100285804 704:0.0767921750318646 742:0.05714290028988 764:0.0514943236258789 772:0.0515871924130164 829:0.0413038569145936 882:0.125433359104583 950:0.0606695439458675 1036:0.0629403133142551 1198:0.0663247854256966 1242:0.0706789825040634 1275:0.0841185498854355 1339:0.067205177800701 1440:0.0689883591828284 1482:0.0659624711687574 1590:0.0857717145811895 1613:0.0638481170909239 1627:0.0743336629903876 1691:0.0780554454957435 1919:0.0812681007896536 1995:0.072037821545829 2047:0.0765515894543476 2161:0.0739262556882412 2163:0.0703573523415766 2227:0.0737265552179258 2402:0.307168700127458 2532:0.16319329651483 2837:0.0837317730637208 2866:0.0763147340363993 3051:0.0837317730637208 3778:0.0928648502716374 5093:0.199539535085993 5565:0.100901905283797 5817:0.0987157725221302 6766:0.104910009634901 6779:0.71344837558025 7029:0.110358885828587 7458:0.118908062596708 8888:0.118908062596708
+-1 1:0.105039826814278 2:0.200807768459307 11:0.110522044044117 24:0.395925605586677 31:0.0937432184228008 45:0.432051616054543 48:0.15046373008061 54:0.184157054838238 142:0.0255114342438891 209:0.154501886316258 409:0.125607862348533 420:0.250097033583189 1045:0.127766444260901 1875:0.384937289821122 8865:0.510208402381846
+-1 1:0.0900394757994816 2:0.172131150220841 15:0.072231351701532 24:0.339384927258571 45:0.370351915151692 48:0.128976558646147 54:0.15785826372057 142:0.0109341201136695 209:0.132438040654271 420:0.214381596826612 506:0.117946468641885 1010:0.234734781392182 1045:0.109520588665436 3421:0.377786837587643 3702:0.397250808008328 8223:0.466897240908793
+-1 4:0.0729578931598219 6:0.0168668891193267 11:0.025264730440528 26:0.0486696973714059 27:0.0982246717851196 29:0.0408381686803065 30:0.101384204908168 32:0.0421465744437568 33:0.0933358759295826 46:0.0470777419767785 75:0.056972692146072 82:0.0421712767016049 83:0.0291354506298692 86:0.0436762343462078 88:0.0429313593342471 118:0.036815564456964 120:0.0468417026240609 129:0.0579758506602864 142:0.0379065266737912 204:0.0337517040998429 218:0.0318918062455226 284:0.0682867451170912 312:0.0509595131969643 355:0.0338378862051611 373:0.0401360889746298 389:0.0958311779233095 400:0.346786572534752 411:0.0421219116779445 422:0.0512684960500759 442:0.0478440038831783 455:0.0821020382962213 456:0.0609268001955226 546:0.0485752572106074 558:0.249655177884494 571:0.0443731259512434 626:0.0530632061113552 643:0.0457439531732029 705:0.192795761757913 710:0.0647918086784231 996:0.0625985458617132 1192:0.0699610058166893 1235:0.0659021119534351 1245:0.0549806918890722 1608:0.0609268001955226 1638:0.0845522073126238 1816:0.0617840516568314 2007:0.0759192626131204 2050:0.0723890251138995 2091:0.0744489547174371 2143:0.176968634123041 2341:0.0782972768204199 4126:0.0924324877767089 4277:0.111440222175491 5234:0.096870431587546 5716:0.120073166874995 7468:0.124511110685832 7481:0.124511110685832 8119:0.69978498133048 9852:0.130766041178036
+-1 1:0.365524895670991 2:0.291160350166483 3:0.145437943598672 4:0.185105037530458 5:0.160171087864545 7:0.177151200030853 20:0.241397548437483 21:0.086292768164012 26:0.0617411342923166 29:0.0518062571357683 30:0.514453645568179 31:0.0543690286708145 47:0.0675154922157676 63:0.0308329134544009 142:0.0776794054724578 143:0.12569273814552 162:0.077257151910102 213:0.147268486025719 256:0.0970749518370385 269:0.152319713160596 357:0.132047694415685 375:0.101123053975268 909:0.125591733002344 1007:0.164659215398306 1359:0.158353089263245 5679:0.250384673560051 7991:0.288773811918261
+-1 1:0.129171866900601 4:0.130827549935404 24:0.243443135706076 142:0.0470587160395118 400:0.533018653483536 456:0.32776045125877 705:0.345719922222316 8119:0.627424604960198
+-1 2:0.113255207339719 6:0.0277431416863596 26:0.0600399827935662 29:0.0503788409896071 32:0.207971673635071 48:0.0848612634766683 83:0.0359421169429313 84:0.0814115987962759 129:0.143040506273253 135:0.126381988778837 142:0.0215826020850193 166:0.103501746823977 168:0.103023736614413 193:0.13454742558473 221:0.13204856571032 228:0.104910442511562 276:0.215519758721552 304:0.105035437903571 346:0.115569858514151 347:0.113953434600072 373:0.0990254808057874 409:0.0708426003781066 454:0.138406821694127 496:0.116320265217428 502:0.0957493897279958 641:0.219523476783555 799:0.139941749956516 904:0.169084101759838 1045:0.0720600365556045 1808:0.139474737193547 4447:0.699407239416981 6331:0.257747063513554
+-1 6:0.0193538146613513 31:0.0737663785460876 48:0.118399652340964 142:0.0100374520277331 176:0.100319306952691 221:0.184236053432357 238:0.381694251401785 373:0.138161771578213 409:0.197681224909025 420:0.196800928781254 671:0.118194421783299 799:0.195248737339305 847:0.41278576611234 2834:0.686284276373174
+-1 2:0.0412292684519382 4:0.087371618191208 6:0.0302987243541763 20:0.056971151935568 26:0.0437137439697673 31:0.0384941712918398 63:0.0218302125485149 84:0.0592739308101729 105:0.214570060736862 106:0.070694308248302 111:0.063160408095242 114:0.0709171892848272 140:0.0713684023930526 142:0.0104758673342702 169:0.441708636380363 185:0.0588122660654596 229:0.0528901233134399 283:0.0757097193507329 402:0.153959716384454 408:0.118941281449068 472:0.368063389948879 480:0.0742838772525777 507:0.0540019042214045 535:0.0957732899545355 631:0.0677820221697989 676:0.100990787292432 758:0.105801341144031 833:0.393974038123438 884:0.104268523193373 918:0.116775913857808 1225:0.0900879915402148 1314:0.117769260096567 1612:0.147415831596594 2442:0.351192992571696 4344:0.215692636605397 8819:0.223664707523312 8995:0.215692636605397
+-1 4:0.0532827599133354 6:0.0246365229177111 11:0.2490937698235 20:0.0347433213829898 27:0.0538017345788868 30:0.0370215614456725 31:0.0234753084521937 33:0.0340826252860846 40:0.0769668648152954 54:0.0461168683848353 67:0.0348398510021581 75:0.0499300976893988 78:0.0473175050893698 82:0.0923958429065991 83:0.0478760912040622 141:0.112523480394009 142:0.0271515891126779 172:0.0483004862247828 181:0.0519873733672424 186:0.034950849971842 204:0.0369744218547742 205:0.0487354246672498 214:0.0527680910521789 218:0.104810805493951 228:0.0931627913832874 254:0.237765716304417 262:0.0576431060048371 268:0.296322345024712 309:0.0906540537290964 348:0.0611890620298238 364:0.0570666319530669 375:0.0436626318647397 377:0.0474045415000179 387:0.0434771756015895 437:0.0553998208766033 442:0.104824596563486 448:0.0557774797744413 457:0.0424702875660777 472:0.112229998971839 485:0.042623028085047 502:0.0425137870299389 506:0.0344569973254124 541:0.0635115653230913 629:0.0752254285446687 639:0.0708613799785879 640:0.0574839255590704 643:0.0501117281938636 655:0.0932737900536853 663:0.0576431060048371 687:0.0693037423087775 714:0.0637394276386994 739:0.125837076855408 747:0.0678776348405681 763:0.285336499987823 796:0.0541407630041833 849:0.30788989757237 1116:0.0718204760402154 1138:0.0607349205877566 1176:0.0695176632965861 1239:0.0824590947541019 1363:0.0697343269358195 1488:0.171546689001206 1555:0.092208221617799 1779:0.0839085139354716 1905:0.106119921891252 1962:0.399622180251234 2086:0.0918009842646239 2204:0.0918009842646239 2213:0.0854940070270693 2376:0.0854940070270693 2399:0.179088732342593 2904:0.110367018209401 3071:0.103514847486201 3401:0.093053374339609 3874:0.101258229392874 4549:0.111619408284386 5037:0.127767104888535 5296:0.136399819057606 7041:0.127767104888535
+-1 4:0.0480244734131007 6:0.0333078478417017 20:0.0626292525670247 29:0.120967609875859 31:0.0423172271278897 83:0.0287675797686702 88:0.169557192701768 142:0.00287907001546444 205:0.0878517970921677 228:0.167937772185753 252:0.0801266093392465 382:0.0975175947399781 391:0.11489841941295 398:0.0863573721558901 408:0.0653769785534964 430:0.086411433492163 496:0.0931011524354118 507:0.0593651134596617 508:0.172284162237063 534:0.0846251272353996 587:0.140618366614757 631:0.0745138064046357 806:0.119183646340851 853:0.117486503200281 950:0.120980945539259 987:0.0906420364494508 1064:0.102869857096849 1751:0.15125576089456 1863:0.133756554382218 2067:0.138452532094634 2264:0.15080444071399 2965:0.169344249328106 3767:0.17783485039203 4286:0.220066304901093 4530:0.182530828104445 5003:0.198950577646562 6638:0.637231121982456 8428:0.237114191232865
+-1 1:0.351117636304351 2:0.167810513286659 3:0.139705469012145 4:0.118539382707734 5:0.0769289512716475 20:0.386471334879679 30:0.247088160285864 66:0.128597444843279 75:0.111080637869828 142:0.07817087288325 186:0.0777559606054843 229:0.143514855251748 269:0.146315991826845 356:0.130690113397628 491:0.163529041357937 4501:0.468109360146308 5177:0.502663230789831
+-1 1:0.289455773013691 2:0.0691701538471144 3:0.172756436928584 4:0.0732914807741768 7:0.105213293579711 12:0.228446473569813 20:0.573481435717104 21:0.102501663540127 44:0.146731845283694 47:0.0801973376690541 63:0.073248894156646 75:0.0343399140810973 83:0.0878060026353118 108:0.156851015817694 142:0.105451886351774 256:0.115309130337111 264:0.139484060989063 284:0.102898462046803 508:0.131463819037403 524:0.191542887136199 565:0.180224640935526 825:0.21922884706653 930:0.148351108125263 2244:0.234441392880094 6081:0.375241249977358
+-1 1:0.455963780756049 2:0.290559851086391 3:0.18142248425214 4:0.153936058800123 5:0.0999004659538476 7:0.220982296659333 15:0.0609637789767837 20:0.401499469773896 23:0.127996091897958 30:0.427827182288813 75:0.216375122074547 83:0.0461053243907013 142:0.0876705201968627 6652:0.413860820235283
+-1 1:0.373605856063875 2:0.238077817766413 3:0.148653260190682 4:0.189197307289706 5:0.0818560611151616 7:0.181067627743316 15:0.0499522676905254 20:0.164489548780985 21:0.0882005135733791 23:0.104876947478317 29:0.052951580797647 30:0.525827096687506 47:0.0690081128962281 66:0.136833794434224 142:0.0793967281675739 204:0.175052520174633 930:0.127652990926394 1064:0.135088761908156 1395:0.155687170709135 1665:0.314284099160023 2744:0.400923522206646
+-1 1:0.268486864370894 2:0.128318585745296 3:0.160241523490533 4:0.0679820604484115 5:0.264711448437844 15:0.0269231480906279 20:0.221640412234527 21:0.0475380918303319 23:0.0565263143956786 30:0.283408971178055 44:0.136102219117637 47:0.0371938197975407 54:0.17651786840595 63:0.152870757554738 75:0.207039584768494 83:0.122167670427058 97:0.0980688413621619 137:0.321659315752773 142:0.0978126848665223 189:0.294024641209441 213:0.0811291949645008 229:0.164610871798184 256:0.267389612886399 267:0.0841330284369455 284:0.0954442370794475 408:0.0925457666079453 940:0.107380889564652 1269:0.321104378952965 3118:0.116123392488019 6392:0.150341001769329 7366:0.159083504692696 8409:0.167826007616062
+-1 1:0.505100107732892 2:0.321871644811872 3:0.200973235613099 4:0.255787158428441 5:0.221332212098889 7:0.244796158292689 15:0.067533459078524 23:0.141789419545228 75:0.159794998467279 83:0.051073803007311 142:0.112452671789687 143:0.173688348811374 339:0.153318403883333 696:0.217547370158479 4930:0.349484294475715 7020:0.371413805149267
+-1 1:0.178533514466207 2:0.34130784220108 15:0.0716114624136528 24:0.336472326622983 45:0.367173555899926 48:0.127869682127725 142:0.0704618428862063 193:0.20273721879422 209:0.131301457705519 409:0.213492479850728 671:0.127648036492348 1462:0.256844296590029 1731:0.519074628333253 3796:0.348622991993375
+-1 1:0.114836636577536 2:0.21953662175472 15:0.0921240979159589 24:0.21642631304452 42:0.160873649548908 45:0.236174010945954 48:0.164497117078442 54:0.201332936477895 129:0.277273162611587 142:0.0209181178584087 209:0.168911902347427 409:0.137323002876839 506:0.150429304866188 947:0.327106660513795 998:0.297624780506558 9602:0.625396840006485
+-1 1:0.104756087250307 2:0.200265335075773 24:0.197428054393131 32:0.183874622126051 45:0.215442266808334 48:0.150057288881483 54:0.183659599310875 142:0.00636063032610134 221:0.233496992142084 286:0.137440084415435 723:0.251742448744263 867:0.215614615388825 7526:0.543209827370528 7531:0.543209827370528
+-1 1:0.265363151839069 3:0.15837719222718 4:0.201573367896879 5:0.0872105536707793 7:0.192911897448048 20:0.175249388094357 21:0.0939700190552748 23:0.111737317093934 30:0.186741098184937 31:0.0592061046240017 47:0.0735221760180809 83:0.0402487699020496 88:0.237227757398043 95:0.307328281905684 142:0.0886184588816681 228:0.117481011696516 237:0.133489179191395 385:0.162526628820637 475:0.125871197696919 624:0.199043828592477 862:0.298936932780931 965:0.155159789561023 997:0.295457134379745 1598:0.162526628820637 2528:0.178716555965907 2733:0.201984415973312 3673:0.265336234291547 5419:0.28151069360441
+-1 6:0.0274197509008195 15:0.0469712714337783 27:0.0798397384843375 29:0.0497915948461669 32:0.205547430423279 48:0.0838720694276347 83:0.035523153958726 114:0.0962679967337403 142:0.0177758518859966 176:0.142128590942782 221:0.13050932801773 286:0.0768198891780308 336:0.250689905553677 355:0.0825131182334613 373:0.0978711801001101 420:0.139410047544992 506:0.153398640970361 671:0.0837266879907736 685:0.144891347025979 799:0.138310504549636 1379:0.144707398493339 1652:0.164230412816808 1844:0.356538772406952 2206:0.176949341990799 2385:0.215767523752436 3287:0.464507069552727 4565:0.496916936059104
+-1 1:0.12106555547416 2:0.231444631711329 5:0.159150870046419 24:0.228165614988802 45:0.24898445893116 48:0.173419698160118 54:0.212253550054844 129:0.292312892906646 142:0.0294036657461349 209:0.178073948291589 409:0.144771617474524 506:0.158588825796203 895:0.294782317483023 1094:0.291966432018216 1339:0.342167091199191 5620:0.513729932086466
+-1 6:0.0221916226630615 26:0.0576308764701995 27:0.0516933463435359 29:0.0322382588701096 30:0.0800342020416285 32:0.0332711338758294 51:0.0602874171914218 68:0.027246745923568 75:0.0629651289516561 82:0.0332906342062535 83:0.0804998560218471 86:0.0344786701956992 106:0.0621341569922392 132:0.0269185425128975 142:0.0586970317819848 145:0.0372446091144692 162:0.096151939960382 168:0.032963301909095 199:0.0207464018560612 204:0.0266440981376031 215:0.0282750842076852 225:0.0422908347305432 227:0.0630959175022693 228:0.10070090748703 229:0.0464858247675844 234:0.0318389426773571 242:0.0310996398891756 284:0.0808598611650131 286:0.0497381030140901 294:0.636210792775699 317:0.052906750959261 363:0.0829230902183215 373:0.0316840266890282 385:0.0464375158070225 433:0.0717830594427973 456:0.144289571763625 457:0.0612089359659148 505:0.0638517326844967 507:0.0474629836250389 515:0.0320662477670484 534:0.0338293047394733 586:0.0652520894264341 609:0.0314301338150934 643:0.0361109582480137 684:0.0415381362657014 710:0.153442857625854 796:0.0390143166644784 819:0.0445766993639633 829:0.0658507286555947 856:0.0333101658122811 913:0.0463231679833388 997:0.0422093765422236 1056:0.174331979411517 1081:0.0493430837769266 1102:0.0531666296198265 1235:0.0520241091581152 1366:0.0480965239212083 1608:0.0480965239212083 1666:0.0640293404855597 1746:0.051843691728655 1923:0.0658660546608481 2161:0.0589303053939556 2244:0.0614097240539718 2976:0.0599317971505876 3342:0.139701676718416 3714:0.0804339410652977 3820:0.0710903433028348 6266:0.086346432790054 6278:0.0836290009430429 7571:0.368280460993116 8572:0.412914645602104
+-1 1:0.165416757767709 2:0.316232147372431 5:0.217454261171814 11:0.174050155470674 15:0.132700417250934 24:0.31175189439889 45:0.340197521661979 48:0.236950337280898 54:0.290010597458932 142:0.0200877079990322 221:0.368707121490381 409:0.197807307665922 1045:0.201206643252711 1439:0.456409688843712
+-1 1:0.441602812676827 2:0.131910197256326 3:0.131781321307558 4:0.0838618376431427 5:0.0362827558472357 15:0.0221413772900856 20:0.218730319656329 21:0.0390949387985024 23:0.0464867796900911 26:0.167830926127241 30:0.233073225208485 32:0.0484456037604361 40:0.0403794318683969 44:0.111929354374071 47:0.0305878938905913 63:0.279377030109467 75:0.261950253874809 83:0.100469695240355 142:0.135743097135655 143:0.0569450952816301 169:0.235536046529171 192:0.0521908968434907 227:0.137809542182604 229:0.135374637700791 256:0.175919228537129 339:0.050266648150622 351:0.0458627836530343 375:0.137441399449607 408:0.0380544416308437 434:0.0559213752423512 527:0.0616386600580282 538:0.0566272251492572 631:0.173491119305669 640:0.180948120561554 794:0.0754888293359076 829:0.0958842677166023 997:0.0614604461203875 1010:0.0719542308911245 1081:0.143695462492885 1164:0.068561769411504 1269:0.0660184052396453 1317:0.083822998332269 1391:0.0816650515434973 1462:0.079413075559846 1558:0.0778566263553438 2024:0.0629389802780956 2164:0.0834106044537086 2528:0.148705148472013 4340:0.123639213034782 4740:0.106247013820719 6557:0.138018739161099 7001:0.120080892663336 7546:0.13406192701885 8132:0.128095555041924
+-1 1:0.142620110009842 30:0.200728969202523 75:0.135359188672819 142:0.025979028636482 227:0.23737061452547 303:0.298372044418373 437:0.300374930292544 1081:0.371263263373246 6133:0.739552682536689
+-1 2:0.0653107751961633 6:0.0159986117413401 48:0.0978737319364448 63:0.0345809702130064 129:0.164974071719906 142:0.0248920381858432 179:0.174423112856202 221:0.15229664741531 409:0.0817054730865963 571:0.126266629635352 755:0.166978861899068 799:0.161400157867397 852:0.317541585314656 964:0.191647153927835 1045:0.083109588665419 1140:0.162497646912802 2767:0.503575813127089 7451:0.634220869423323
+-1 2:0.0620270645463114 6:0.0151942297446467 15:0.0520568032980678 27:0.0442419529510489 32:0.341702763008661 48:0.0929528132222641 142:0.0118202551922339 176:0.0787583545845783 409:0.0775974659266782 420:0.309007663676102 799:0.153285242439045 1045:0.078930985049312 1140:0.154327551669854 1542:0.461280747548235 6644:0.615186506710016 7514:0.336490696322995
+-1 1:0.480539377598077 2:0.229665363602773 3:0.286801226361433 4:0.146009632578163 5:0.126341897555861 7:0.139735698025125 20:0.0634709312846708 21:0.0680671663066265 23:0.0809369054274143 44:0.194877245314043 47:0.0532557749009721 63:0.121603993733845 75:0.182429869876074 83:0.0874625675966436 95:0.556532963532206 142:0.131299291355716 170:0.111783404604773 189:0.168399053313953 213:0.116164410336048 227:0.0799788524607578 256:0.0765720816643721 518:0.0981255647443203 829:0.083470784165866 940:0.153752760927755 2057:0.178094770913248
+-1 1:0.424446614724867 2:0.173877267287199 3:0.217134237013619 4:0.1228248667348 5:0.0797101180397116 7:0.176320748689396 15:0.0486427162475028 20:0.72079776707472 23:0.102127487558681 44:0.122949619467035 63:0.0306883745840192 83:0.0367872243072401 142:0.117813728155733 325:0.127490380180766 499:0.105751195024124 7486:0.314422331456753
+-1 1:0.342347084156494 2:0.261790050852107 3:0.245188389933278 4:0.138694071154639 5:0.0900088156172376 7:0.0995508609733242 31:0.0611058080726553 44:0.138834942175152 75:0.064983575672085 142:0.0831471775128477 143:0.141267124335617 187:0.149492378352809 1317:0.207944755716455 1391:0.202591407270704 8606:0.745764735010661
+-1 1:0.101252683483888 2:0.290351660473497 5:0.133105180973088 6:0.0237083057653544 15:0.0812267966523495 21:0.143421820707782 24:0.190825381388507 29:0.0861039445199547 32:0.177725222500557 47:0.112213283054765 48:0.14503885716219 54:0.355034781575373 83:0.0614297189532866 97:0.14793622589085 129:0.244474695612772 142:0.0368874538600069 209:0.148931420274556 256:0.161342214809081 409:0.121079151738806 671:0.1447874509718 987:0.1935552058678 1045:0.123159907370034 1165:0.354936566251037 8910:0.525043022890533
+-1 2:0.0114678782215347 6:0.039328607393978 15:0.00962452576453791 26:0.0364767975233677 27:0.049078059627989 28:0.0207444215139184 29:0.0306072503144814 30:0.0168855745486038 31:0.0214142275712857 33:0.015545122561209 57:0.0209727312802285 60:0.106610080306153 63:0.0364323057560561 68:0.0172455130842676 75:0.0284664650081892 80:0.0182908899915463 81:0.0342078862463227 83:0.0509514539534644 84:0.0164869823250717 85:0.0172154920330828 92:0.0185447788831013 106:0.0196635484544732 132:0.017037780526813 139:0.068944810627338 140:0.0198510470410867 142:0.016754646840699 162:0.0152145649182841 169:0.0409535995633385 173:0.0419943240603027 176:0.0145612439652056 179:0.0153134227181355 189:0.0210216704614448 190:0.0240858274215687 205:0.0666848410149569 228:0.106229126867527 239:0.0238166069766283 252:0.0202736516941499 256:0.0191173648024527 278:0.0242519920752391 284:0.0170597716833786 286:0.0472217366097023 315:0.0397919905358807 320:0.0266647218509459 339:0.0437003212477893 345:0.0206152686877948 351:0.0199358665506192 355:0.0169071351085297 408:0.0661667879342195 411:0.0210462570696849 412:0.0286310513952666 422:0.0256163574838651 457:0.0193707444741359 507:0.0300411472041502 513:0.0630650113843342 534:0.0214118676466105 546:0.0242706778908092 586:0.0413005562255416 631:0.0188534991048594 641:0.022228280338319 647:0.0253751234376141 655:0.0212711386808135 664:0.0952690018039075 713:0.0280904826510954 716:0.134489598291625 726:0.0258884290870938 727:0.030075996206471 739:0.22957771193292 757:0.026690287032418 784:0.0551707062630743 800:0.0247731245888638 823:0.0320074276406611 850:0.103004771629095 856:0.021083284659616 908:0.0298798559756949 987:0.0229342672924575 997:0.0267159372895261 998:0.0621877973939778 1009:0.0250371889819563 1017:0.0331025847579249 1018:0.0304839165278483 1112:0.0338431117666986 1117:0.0335258696594351 1122:0.0343103999950317 1175:0.0297645237219937 1225:0.0250578813303507 1229:0.0317070820408752 1288:0.0369038927150373 1471:0.0650711444066502 1472:0.0285654518916713 1551:0.030075996206471 1598:0.0293920891947018 1649:0.0957180195131772 1782:0.0345907179830715 1792:0.0331616493775783 1806:0.0772477196229279 2008:0.0498067275448137 2020:0.0468546634220227 2387:0.0381565715831308 2555:0.0379331386883202 2682:0.0413387392157293 2686:0.171390071567832 2781:0.0479846676293897 2866:0.0385043551672936 2912:0.045869337198041 3157:0.043499277372846 3298:0.0856950357839161 3302:0.0515266946412404 3699:0.0426419618396744 5004:0.104394738423476 5060:0.0537441178915864 6483:0.045276129562502 6786:0.479957463762599 7381:0.0568694004309556 7511:0.0622121062206708 7667:0.0622121062206708 8969:0.0622121062206708 9648:0.13067477752008 9807:0.565440756398042 9814:0.353400472748776
+-1 6:0.0414148663015042 15:0.028378214426207 27:0.0482360632207943 29:0.120328576343473 63:0.0358072633076599 83:0.0429234146474881 106:0.173935757897971 137:0.0678086901568303 142:0.00859158240398912 169:0.0603764828712698 172:0.129911720804333 229:0.130130471770495 234:0.0594190688163986 286:0.232057938900491 317:0.0493683145818796 411:0.0620555454475701 434:0.0716734445578698 465:0.140865987318694 478:0.0649558604021666 502:0.0571737436064821 508:0.128530529720652 706:0.0843226312422751 829:0.0614465910072358 950:0.0902563811690932 1010:0.184444948148322 1045:0.0430283896953052 1225:0.0738839447112521 1245:0.161999144309856 1739:0.133498080273995 2308:0.123456560890992 2653:0.148424688613897 4385:0.137142182754734 4606:0.141484289249287 4741:0.146856689743846 7495:0.183434335719805 7510:0.366868671439611 7601:0.176896194100004 9796:0.625207390328132
+-1 6:0.0222371030551019 15:0.0380931616512562 26:0.240620781146699 27:0.0161872777308449 28:0.0410524435917197 29:0.121141234638897 41:0.0255984346912296 42:0.0332604935968251 63:0.0841145512440779 75:0.0563340823083579 83:0.0432133047969539 97:0.0346890361259487 114:0.0390361198396667 137:0.0455110979977419 142:0.0446896363247011 144:0.0330510581831865 159:0.0334443598152751 168:0.0412885727599978 171:0.0480678430545445 174:0.0407508408906471 176:0.0288161637144616 192:0.044895948525148 198:0.04840557581038 199:0.051972300888085 218:0.0315343293483691 228:0.168178813204343 229:0.0291131841633763 234:0.0398802433372958 238:0.109639553654908 256:0.0378325584855885 265:0.105036046559424 286:0.0311500239099971 298:0.110222884607279 346:0.0463166515691747 386:0.0442756763637617 402:0.0423732948236747 405:0.0528698526417006 433:0.0449563590582141 436:0.0491043379660715 442:0.0473077179819067 448:0.0503451550383535 465:0.0472724494351849 472:0.0506498027612624 507:0.0297251600918702 534:0.0423732948236747 597:0.0497121330970439 608:0.0606618026365952 655:0.0420947974008266 658:0.0514160255028727 667:0.0535455928278295 696:0.061355269308928 772:0.103017506162417 774:0.0623633840599695 840:0.210751117846964 850:0.0509606591601531 869:0.0744281729204235 1025:0.0677634248910875 1201:0.0708995616381403 1207:0.0633415165061448 1260:0.074220637206602 1321:0.0644952623673808 1359:0.0617141950374839 1433:0.0535988342070542 1489:0.0651634117896498 1613:0.0637510347841046 1731:0.069029429995255 1831:0.150575520616907 2024:0.0541417256588705 2066:0.0744281729204235 2264:0.30204178053727 2306:0.0782020480455147 2555:0.0750682796921724 2686:0.0847936545313936 2907:0.082860229687067 2929:0.106357623260343 2965:0.0847936545313936 3191:0.0957846059355512 3222:0.0996180656663367 3676:0.579938878703404 3944:0.0966564797839006 4530:0.0913964072652378 4683:0.101969424590029 4917:0.10074848196963 4976:0.101969424590029 5051:0.106357623260343 6231:0.0985656732654481 7989:0.112542441914821 8226:0.246230918479225
+-1 1:0.400848753924506 2:0.255438171109438 3:0.159492880390136 4:0.270657802037537 7:0.194270865348977 83:0.081064604739672 142:0.0811297560303088 592:0.308187622982731 9629:0.727670052276566
+-1 1:0.537868924053448 2:0.257065014382001 3:0.32101732809347 4:0.136190788305424 5:0.0883842506842381 15:0.0539360639842443 20:0.266411893933098 23:0.113241100178034 30:0.56776289131246 44:0.272658233502859 75:0.0638106901326649 83:0.0407904458694761 142:0.138798978544469 229:0.0824426482735476
+-1 1:0.288791225109172 2:0.138022698683942 3:0.172359813544784 4:0.109684821462373 5:0.189820195173952 7:0.104971739324123 21:0.102266334788497 23:0.243204502737735 26:0.182924932300203 27:0.0246118117390213 40:0.0528131853499791 44:0.146394970536667 47:0.0800132163708637 52:0.068912398979653 63:0.146161450926662 75:0.0685221493727451 83:0.0219011032402103 107:0.0808540741763553 134:0.0605368234564381 142:0.133704100909532 143:0.0744797965875975 176:0.0438132963536992 189:0.0632520600559884 228:0.25570607719852 229:0.044264898623882 238:0.0833502735473256 255:0.0786723181072535 256:0.172566596286641 313:0.0958508256546643 339:0.0657449023639862 356:0.0806186176412451 408:0.0497722772769537 455:0.0617160599230213 475:0.0684919837907585 496:0.141758046221958 506:0.0945749208165277 508:0.13116199743422 527:0.0806186176412451 557:0.0795503637714797 579:0.297752678815552 631:0.0567282538194698 640:0.236666198303476 723:0.0867503408311785 766:0.11253683998011 781:0.183194577373014 829:0.0627046167906495 847:0.0901397031669968 856:0.0634374508873296 986:0.075584399135762 1010:0.0941105893999053 1202:0.104733285187382 2164:0.109094643221448 2244:0.116951574952593 2879:0.159267013859317 4989:0.157056554482709 5618:0.155038563177549 7375:0.159267013859317 8909:0.187189875614145
+-1 1:0.54302453251844 2:0.346038729311334 3:0.21606290643524 4:0.274992422300723 5:0.118975247843176 7:0.263176185045469 15:0.0726040729036269 66:0.198883679282225 75:0.171792884248139 142:0.131886495573313 269:0.226286477369863 356:0.202120117005497 1916:0.258825717083161 2645:0.358997149881317
+-1 1:0.170839202052152 2:0.136082664904006 3:0.0679748562321387 4:0.0865144817276717 5:0.0374304201528778 15:0.022841733914058 20:0.188040837714128 21:0.0806631112168109 23:0.0479572087269369 26:0.115426404507213 29:0.0968529337968776 30:0.160297062010604 32:0.09995598520398 47:0.0631108466367338 63:0.115285615702284 65:0.0476969906128279 75:0.175653422439304 83:0.0863730537566231 101:0.0647977307156635 142:0.0812559231404225 169:0.340180842596299 179:0.0363431025692657 180:0.0513764792162568 186:0.0378328084127483 189:0.049890396145912 229:0.0698283447447979 256:0.0907418756287298 264:0.109766202185866 267:0.142757766845962 298:0.066092749782463 314:0.106404641096228 322:0.0577796837526791 346:0.166636622176779 355:0.0401254348365916 372:0.0658123914220266 408:0.117774439041198 416:0.0648636515976537 430:0.0518891019002844 472:0.060742100015955 475:0.0540234136424275 508:0.0517273588045202 524:0.0753668022266183 636:0.409113967150838 640:0.186671712783045 671:0.0407155835942584 723:0.0684247891061475 767:0.0637740776679639 930:0.233488150739342 966:0.0665939599010607 986:0.11923518734397 997:0.126809018077643 998:0.147589310426952 1225:0.0594694712031238 1319:0.0703699898019671 1380:0.0686670843696363 1409:0.0875834216056352 2228:0.10552575560876 2422:0.106145917539618 2744:0.0916653921586436 2967:0.112050419259487 3700:0.108143502912734 3785:0.113881248464573 6780:0.284768853695768 7107:0.125622697622566
+-1 1:0.123110792596729 2:0.23535457249293 24:0.232020161263681 32:0.216091981502449 48:0.176349386980962 54:0.215839283736643 129:0.297251119784117 142:0.0224253003739074 209:0.18108226430833 506:0.161267967294978 671:0.176043708017228 959:0.320477347919409 1045:0.149747278696839 1165:0.431559149735324 6113:0.511090231433094
+-1 4:0.111167004872978 6:0.0257003247176107 11:0.0384962379031986 29:0.0622257126688417 31:0.0326519588868186 40:0.107053711805925 46:0.0717330414171476 58:0.0574665940943782 59:0.0531951171610965 63:0.129619478765868 72:0.0533130585488721 75:0.104172145402635 79:0.0580957371548989 83:0.066591165983616 86:0.0665501146772707 106:0.0599651211856317 111:0.0535746316699564 132:0.0519576909727155 142:0.0244363845113061 154:0.0619277908004382 159:0.10307468619395 166:0.063920386337596 168:0.0636251778198049 169:0.124890355700004 185:0.0498864017373224 218:0.0485940098700178 227:0.182679923048515 286:0.0480017999625533 297:0.167377243836756 304:0.259470239912105 308:0.0632974404834519 309:0.0630456558497167 314:0.0683624580476938 317:0.102119667712121 345:0.062867446737812 377:0.0659352844397846 402:0.130593442095404 420:0.0871119873593689 423:0.0649062524464647 448:0.0775812586281575 451:0.194598401302305 472:0.156101433970881 506:0.143779383643513 538:0.075064882800424 550:0.139591785530951 655:0.0648675599780262 767:0.0819466644347545 777:0.118155856093955 854:0.206019626351353 930:0.150010598645943 1003:0.0905370410015503 1067:0.0911203381597268 1081:0.0952411408342035 1123:0.0972992006511525 1155:0.0997246151818471 1175:0.0907686258232775 1245:0.0837748813519481 1393:0.0980801917355441 1466:0.104631536794751 1817:0.243558541983058 1981:0.246245635526355 2053:0.386500290863105 2401:0.232035007125321 6399:0.177712095430142 7573:0.177712095430142
+-1 1:0.180385330655366 2:0.344848014417846 15:0.144708486413022 24:0.339962343068956 45:0.370982016944786 48:0.258391988309536 54:0.316253674791839 142:0.0219054459681907 193:0.409680169660994 209:0.265326730777203 409:0.215706903465438 506:0.236294276001568 671:0.257944099056413
+-1 1:0.124534473409459 2:0.238076265546633 15:0.0999038840234511 24:0.2347032944382 45:0.256118665285845 48:0.178388730837709 54:0.218335297614937 142:0.0529308070111851 193:0.282835106433929 209:0.183176340219822 322:0.252713513179781 409:0.297839580815762 671:0.178079516933891 8949:0.645770108240021
+-1 1:0.632509222437892 2:0.226722513271544 3:0.377501676526144 4:0.240231195079344 5:0.103935831158909 7:0.229908624102946 44:0.320633595941017 63:0.0400152677946971 66:0.173743201925387 75:0.150076898642415 142:0.17762311665249 270:0.209932040635733 339:0.143994184926429 356:0.176570528204259
+-1 6:0.0192996552670452 17:0.035055331961555 20:0.0544341527222431 26:0.0556894857477455 27:0.00936599457651471 29:0.0233641951308096 30:0.0966726481297349 41:0.0148113107387086 63:0.00695269496609334 67:0.0181951302176517 68:0.0197466709043666 72:0.0200177169458092 75:0.0325950242002472 83:0.0250033134101555 84:0.0188781286232822 92:0.0849374892609993 97:0.0200711527671552 111:0.0402318621904636 114:0.0225863849861439 132:0.0390176207990846 141:0.0293827229368109 142:0.0125117042353414 162:0.0174211694906634 185:0.0187310932181318 199:0.0751782196396198 204:0.0965495547510136 227:0.0457278209229626 232:0.0571017397428421 246:0.0332481034547892 274:0.0695246665300996 277:0.0582596353609852 278:0.0277693162241681 283:0.0241127558169373 284:0.0195339909859005 291:0.0258901114898341 292:0.0317188437110284 299:0.0266282731265987 303:0.0862189920360866 309:0.0236720632395462 317:0.0191716875611949 319:0.0583596445750488 331:0.0251452262911677 342:0.0600972673033196 346:0.0267989166932375 347:0.0264240922331983 386:0.0256180039404852 389:0.0274133049175545 408:0.0189407786789479 436:0.0284118781873501 437:0.0867977553769047 440:0.290445085090611 442:0.0273723499042416 461:0.0351976659211677 475:0.0260645398852091 483:0.0312311069400842 506:0.0179951846868209 571:0.0253866029450237 583:0.050623348613542 640:0.0300210098747063 643:0.0261708759851596 644:0.122598595522212 656:0.0317523382086547 658:0.0892482770753161 662:0.033530876047671 678:0.0348096566466966 709:0.0561031837108999 712:0.0295380194279053 714:0.0332879490734012 730:0.061840615177561 732:0.0351976659211677 764:0.029749425691772 772:0.0894092342189872 774:0.0360835914840568 796:0.0282750415001234 805:0.0419312397563323 819:0.0646125900547763 876:0.0310433170996062 963:0.0272910056460993 984:0.0368864892518254 987:0.0262604786789487 991:0.0341691629855664 1026:0.0890115549668511 1081:0.071521321443876 1146:0.0368266531614016 1175:0.0340813434596855 1216:0.0688759790802579 1225:0.0286920855165802 1236:0.0354491299263549 1241:0.120335880884976 1246:0.0452478773790954 1265:0.0413152370512842 1296:0.0982375327701455 1297:0.0475325356778737 1309:0.0379711623368523 1363:0.0364187883340528 1407:0.0392080670121955 1412:0.0403754362646488 1433:0.031012403619554 1439:0.0379035314347917 1440:0.0398561223955061 1606:0.0509127446885596 1649:0.0365334105883795 1779:0.0438212648306383 1788:0.0396074921644745 1819:0.0446492894183158 1836:0.0343025527719363 1872:0.0479431115448789 1956:0.0479431115448789 2144:0.089887019294676 2241:0.044943509647338 2246:0.0407394379363351 2402:0.0443645618382664 2540:0.0518426344247074 2575:0.0447951735584432 2643:0.0467645915776995 2801:0.0532577849072267 2942:0.176999201513797 3051:0.193494893060222 3191:0.0554211841313199 3273:0.0540606826749954 3375:0.0625782835445448 3539:0.066726436655405 3546:0.0465826100885544 3571:0.0512119526484474 3653:0.0488264270857079 3824:0.0540606826749954 4107:0.0554211841313199 4305:0.0549439982158244 4976:0.0589997338379324 5099:0.0686958546746613 5150:0.0606088655252885 5222:0.0564607124144284 5697:0.28515157909338 5954:0.492310042091491 6142:0.0544912943951721 7021:0.0625782835445448 7132:0.0637568035117243 7532:0.0712348760981653 7627:0.0748134258047778 8250:0.137391709349323 8824:0.0712348760981653 9586:0.0686958546746613 9745:0.242792990804683 9826:0.323723987739577
+-1 1:0.391515084871582 2:0.267311092834428 3:0.13352496526647 4:0.169942884885019 5:0.147051301844736 7:0.162640554766817 15:0.0897373498543281 21:0.0792244347433997 23:0.0942037245017891 24:0.105409573665926 28:0.0967086304542468 29:0.0475627509127022 32:0.0981732083916268 42:0.0783528701962576 47:0.0619852256570362 48:0.0801176656229671 54:0.0980584047313981 66:0.12290835482298 75:0.106166483089196 107:0.125273255105318 129:0.135044789373084 142:0.08150468782952 143:0.115397110821644 150:0.114209872726681 174:0.0959981347660459 176:0.0678832119102659 192:0.10576290507801 256:0.0891234381589754 264:0.107808454086663 339:0.101863486900533 345:0.0961065315755036 406:0.122794098716905 408:0.0771159060567395 409:0.0668826215451659 506:0.0732659937220509 598:0.138405509389564 631:0.087893319969322 641:0.103626247057773 723:0.268817562704728 882:0.0983461045475744 1018:0.284226563397952 1165:0.196062556535903 1482:0.155153751731311 2306:0.184223210691516 4486:0.229875395740039 4947:0.246764278242088
+-1 1:0.391353354513806 2:0.124693645864966 3:0.155714775587165 4:0.132123198233358 5:0.0857444913797836 7:0.189668931471697 15:0.0523251635619878 20:0.775365028247915 23:0.10985894503696 63:0.0660232134813316 75:0.123809731432029 83:0.0395721636734604 142:0.106930712679956 374:0.197118429610921 524:0.172648025254541 1010:0.17004438572306
+-1 1:0.459284599131494 3:0.0322489054935669 17:0.0689418164472941 24:0.0509169708074545 29:0.0229746797707345 30:0.114073168158441 47:0.0299413024406626 75:0.28205423309302 85:0.0387673259595527 101:0.0614832015800288 114:0.0444196737212577 142:0.0918632646160205 179:0.0689681652931615 185:0.0736752738167091 204:0.0379759728934376 213:0.130619214505105 227:0.0449654711594662 232:0.0561497700904607 256:0.0861002533485709 303:0.0565210634218826 308:0.0467407559686372 375:0.0448453509473171 437:0.113800946187859 491:0.150992874867261 508:0.0981628088963926 579:0.0742802536322011 608:0.138055600378744 640:0.11808206264395 710:0.0729009700609471 930:0.0553861951641809 1064:0.058612434203339 1098:0.0709640503071316 1241:0.473318821861041 1377:0.0603356925924962 2112:0.101956683524551 2723:0.0824643691253269 3236:0.0947059277481976 3477:0.0979554149063809 3593:0.108994463605806 6998:0.393684055235077 8002:0.270202376566535 8419:0.135101188283268
+-1 1:0.305609541501243 2:0.194747623861577 3:0.121598347435357 4:0.103175581780659 5:0.133916494618464 7:0.148113295863039 15:0.0817218969032372 20:0.605485932459496 21:0.0721480085920444 27:0.0347268376926795 29:0.043314386181806 31:0.045457078630593 47:0.05644862734292 66:0.111930025989124 142:0.0587611310620165 143:0.105089695748832 172:0.0935280149646194 205:0.0943702203404914 270:0.135243845537038 339:0.0927649121375085 641:0.0943702203404914 2987:0.203719027663352 3343:0.193454932734993 5177:0.218756712291798 7474:0.264121654151081 7478:0.264121654151081 7527:0.264121654151081
+-1 1:0.472896527569691 2:0.226012597539138 3:0.188159819807718 4:0.239478980831449 5:0.103610386276371 7:0.229188731989405 15:0.0632277400144458 20:0.624614431311808 23:0.132749376059367 30:0.221857521850568 63:0.0398899716000935 75:0.149606976401878 83:0.0478174993870884 142:0.105283046253871 143:0.162614530812272 1707:0.210946024411033
+-1 1:0.333806507274975 2:0.0797684814608476 3:0.199226369610782 4:0.169042565332299 7:0.121334190999461 15:0.0669464560215085 21:0.118207082000697 29:0.0709661610780365 47:0.0924852626062238 63:0.042236085439947 75:0.0792030275311981 83:0.0506298678245472 137:0.159966072046736 142:0.136810508872976 162:0.105829754743994 178:0.157698041762404 238:0.192684965983496 254:0.188581291104025 298:0.193710135285704 339:0.151985755252502 356:0.186370061389417 387:0.137933795266039 408:0.23012208948746 506:0.109316770208784 524:0.220891300534797 631:0.131141521104923 844:0.21412009768874 986:0.174732208504247 3588:0.307525655551545 9024:0.432736130070251
+-1 1:0.3166153707617 2:0.345876024855587 3:0.107980657750782 4:0.137431561605939 5:0.0594596533487762 15:0.0362849675442516 20:0.537678106855678 21:0.0640682179280402 23:0.0761818594296313 26:0.183359256221622 30:0.127319005518096 47:0.0501269962805837 63:0.0686758529335298 75:0.06439204076283 83:0.0823241387203478 95:0.419069306115636 142:0.0521805247857462 169:0.15439722094685 170:0.21043225142339 189:0.158505603097858 204:0.0635784450510619 267:0.113388085076754 387:0.0747600930940345 408:0.0623630662807988 636:0.108315529488124 1665:0.114146853235441 7228:0.234542907391236
+-1 1:0.40157523633161 2:0.255901117134833 3:0.15978193897028 4:0.135574165759647 5:0.087984078819888 7:0.194622954171775 15:0.0536918610282517 20:0.265205677401817 30:0.565192266648379 66:0.14707762859231 75:0.0952826676707641 142:0.0772129527678571 143:0.138089338438351 269:0.16734243148649 499:0.116728236102528 829:0.116257555019866 2340:0.21753337663058 9682:0.364494426330974
+-1 1:0.494199685880423 2:0.314925424335806 3:0.196636089341103 4:0.250267088468787 5:0.108277852271152 15:0.0660760386942432 20:0.217584071605871 30:0.579629534246271 66:0.181001494301145 142:0.105024687069252 143:0.169940029925835 229:0.201997817970926 269:0.205940430566783
+-1 1:0.418688153075019 2:0.200104656131999 3:0.12494322147451 4:0.212027380915439 5:0.137600210850724 7:0.152187531480829 21:0.148265248773266 31:0.0467074920236534 47:0.116002782879724 63:0.105952090331199 66:0.23001789616 75:0.099343088263017 83:0.0317521159532549 95:0.606125557783007 142:0.108043958995683 143:0.107980457033886 170:0.12174441211339 227:0.0871057596497899 264:0.100879528625176 270:0.138964073956527 375:0.0868730663840742 406:0.114902035294532 430:0.0953763186890768 518:0.106869523569527 631:0.0822443542384847 731:0.141221568742054 766:0.163155378652379 986:0.109581904586865 1471:0.141929469471923
+-1 1:0.408865862106204 2:0.26054701935075 3:0.162682790958099 4:0.138035523975571 5:0.0895814357651467 7:0.198156347164266 20:0.360027339391058 21:0.0965246621140329 23:0.11477497702407 29:0.0579490213585269 30:0.383635580503646 31:0.0608156654789893 47:0.0755209296473518 63:0.0344888293248477 75:0.0970125309938573 83:0.0413429618761232 142:0.0951652348038791 162:0.259253028127742 189:0.119401633735045 218:0.0905084150933051 256:0.108585309350569 339:0.12410740053466 386:0.127078056761509 430:0.12418509409743 485:0.110420181400409 606:0.205438847921269 631:0.107086570445063 716:0.152778322596598 767:0.152629156145204 829:0.118368218851785 3710:0.252552567110523
+-1 1:0.475406170042229 2:0.302949382830314 3:0.283737564379051 4:0.240749885958757 5:0.208320484692019 7:0.230405027188237 15:0.0635632870369589 21:0.112233434441961 47:0.0878114786515245 66:0.174118336445985 75:0.300801868976858 142:0.120274748933402 176:0.0961668712224584 186:0.105279996238542 238:0.18294754537239 269:0.198108890292357 298:0.183920907287124 339:0.144305087390138 356:0.176951767295721 808:0.193636283622777 847:0.197849829798513 1433:0.178872949152385
+-1 1:0.295968786848721 2:0.282906176748481 3:0.088321805652227 4:0.149881209313821 5:0.097268974955496 7:0.107580686807281 15:0.0593579242485684 21:0.104808042666028 24:0.27889807304953 45:0.304345971756473 47:0.0820018495097851 48:0.105989720773793 54:0.129723986042163 75:0.0702251857356526 88:0.132294199622942 142:0.0584050177371684 187:0.161550513761589 221:0.164925550655567 356:0.165244594614537 409:0.17696148101847 6120:0.359401206363311 7467:0.383684513786303 7482:0.383684513786303
+-1 1:0.659109865633712 2:0.420013326695712 3:0.262251859171987 4:0.333779060905989 5:0.144409239221601 15:0.088125043842922 23:0.185022342767264 75:0.208517991495667 83:0.0666466843348077 142:0.160080595204555 229:0.269402750477131
+-1 1:0.62976598360395 2:0.300985601496392 3:0.375864424100111 4:0.239189294787478 5:0.103485053845063 15:0.0631512565009014 23:0.132588795613197 44:0.319242984546512 75:0.298852008277402 83:0.0477596568900896 142:0.157733535731043 143:0.16241782394489 229:0.193056609739164
+-1 1:0.374735687628641 4:0.189769463979103 5:0.123155406362197 15:0.0751549945395608 20:0.494960958210692 30:0.131854316154827 66:0.205871395814169 142:0.108078560372461 143:0.193290068132394 229:0.229752648715166 270:0.248752191469081 339:0.170621258912093 829:0.162731105708989 2455:0.328404625048272 7342:0.41332996826735
+-1 2:0.257822705942463 4:0.136592206643737 6:0.0631565826325926 26:0.410038651436402 27:0.0919484108223599 31:0.120359537994765 37:0.298823841611508 63:0.06825641930948 75:0.0639987702628879 83:0.327285396060623 114:0.221736430523405 120:0.263091952656346 142:0.106453241047486 218:0.179124094745491 228:0.238826053170502 229:0.165371291103524 239:0.267724418521976 339:0.245619434933973 507:0.168847491056486 534:0.240692547884075 609:0.223622656349337
+-1 1:0.414475327846356 2:0.264121613647319 3:0.164914729662129 4:0.279858625317842 7:0.200874967972777 75:0.131124668880407 83:0.0838203394603509 142:0.100665246628428 784:0.317665039747765 7439:0.690881616035372
+-1 1:0.464322657277988 2:0.277393583346326 3:0.138561285237802 4:0.176352822857473 5:0.0762989053726242 15:0.0465610401202343 20:0.0766612291517982 21:0.0822126370029504 26:0.235287455471455 47:0.0643231961577667 63:0.117500234399814 75:0.110170890639508 142:0.0951512592460123 143:0.119749680939938 169:0.0990616181507082 189:0.101697565749793 190:0.116521188091863 227:0.0965997664079148 229:0.142339472713632 256:0.0924850129073237 270:0.154110326771315 598:0.430877743950101 709:0.23703532474655 940:0.185705099951022 5676:0.236285256356526 8560:0.316085888680006
+-1 6:0.0170152936439652 63:0.0367785262984468 85:0.104274557430259 108:0.157510888774714 142:0.013236940366347 169:0.124028359498431 180:0.131121384430566 189:0.254657302806043 229:0.178213637351302 387:0.120110603617601 510:0.307657113176924 852:0.168860380064655 853:0.180053724334533 1262:0.262122599905719 1980:0.422557207576665 7109:0.36338891754458 8229:0.376819891670737 8915:0.376819891670737
+-1 1:0.36526429108837 2:0.232762211616531 3:0.145334252181104 4:0.123315376711133 5:0.240085338459502 7:0.177024898334056 15:0.0488369744480579 20:0.402042402787311 21:0.0862312448831167 30:0.25704343038159 37:0.067444504163226 47:0.0674673563791181 63:0.0924327924731661 75:0.115556116383733 114:0.100091769993487 142:0.0850167872852834 162:0.154404141322019 189:0.106668609788938 227:0.101321626655448 256:0.0970057412918579 269:0.456633345952454 307:0.136888523084806 339:0.110872552287914 940:0.194782487628338 1269:0.145616016905768 2681:0.218489408348958
+-1 4:0.0470320359559058 5:0.030522558154187 6:0.021746355361076 12:0.109947663549468 15:0.0186262443458225 20:0.122670007572442 26:0.0235310552867869 29:0.0987231539261637 37:0.0257230884698478 40:0.0339688518321321 41:0.0250335062127194 42:0.0325264721510297 55:0.054602853963793 63:0.0587558845058757 75:0.0330545117261554 83:0.0140865453578862 95:0.0537804483635312 106:0.0380546602689179 110:0.104936434753939 114:0.0381746368601812 142:0.0140978666566655 169:0.237771222490255 179:0.0296359072952781 185:0.0316585713931224 189:0.0813660392525384 190:0.0466130506376165 208:0.0407306018328027 209:0.0341516979510728 218:0.0925152071810237 227:0.0386436997158332 229:0.028470689142396 270:0.0616501821102921 339:0.0422863879980139 398:0.0422863879980139 408:0.160064868362395 433:0.0439642231003534 441:0.0383361216209919 472:0.148596056836024 507:0.116276637819399 508:0.042180967000235 518:0.0474117187451095 534:0.0414381641696739 586:0.0399642678868268 631:0.0364869802099508 658:0.0502813320183397 686:0.0642925840566309 882:0.0408262240134468 918:0.0628603326005107 965:0.0543039059004913 998:0.0601756978955081 1045:0.0282419918404693 1116:0.12679009934875 1205:0.075221948738237 1225:0.0484942564305291 1236:0.0599147523066736 1314:0.0633950496743748 1332:0.0668055708663298 1579:0.0682410052967713 1992:0.0710513788042569 2107:0.0696627481162468 2241:0.0759617867605513 2399:0.079039709209267 2410:0.0759617867605513 2744:0.0747483531165613 8477:0.120398440409818 8500:0.812749590219789
+-1 1:0.588324748924411 2:0.281179490541663 3:0.351130973560779 4:0.223449639175411 5:0.0966753046463594 7:0.213848160236437 23:0.123863898527712 31:0.0656316003113209 44:0.298235461455667 66:0.161606221733967 75:0.13959314833836 142:0.156284555656903 143:0.151730052084425 339:0.133935347799193 847:0.183632373919245 2834:0.305301251156901
+-1 2:0.046363461689323 5:0.0637628551732648 6:0.0227145067662755 15:0.0389109757656928 23:0.0816952773193653 26:0.0491573236668453 29:0.0824946603000035 37:0.0537365694063552 63:0.0736460476621871 75:0.0460348055443862 83:0.0882820843858374 87:0.105804486557361 132:0.0688820084645326 142:0.0235608096894105 169:0.0827856124609513 228:0.0858947044722576 275:0.076372953165063 355:0.0683538223669433 409:0.0580018926414604 433:0.0918430354425711 457:0.0783139436930708 459:0.103744971046103 484:0.125526689989142 499:0.0845940051094081 505:0.0816952773193653 507:0.0607266466645707 518:0.099044992906182 534:0.0865659964426813 535:0.107699734348762 636:0.116154518749963 643:0.0924045323222931 655:0.0859970435912243 716:0.217491090070948 850:0.104109445770777 853:0.12018104492544 866:0.127019777177547 1007:0.131099087161905 1009:0.10122280074386 1294:0.12899272922587 1378:0.13927494369047 2624:0.144173197581283 2733:0.295356525577891 3930:0.197463155035571 5921:0.242552382552723 5978:0.398704707339351 8535:0.528304793988493
+-1 1:0.232485716811273 2:0.0740749793156682 3:0.092503260296473 4:0.156977095478539 5:0.101874019022079 7:0.112673922380983 15:0.062168130246839 20:0.204715584810169 30:0.109069747799746 142:0.0564647168312735 143:0.159889335428661 179:0.0989146770819268 187:0.169198864483818 491:0.216555151143738 8592:0.844073441912085
+-1 1:0.490690587942658 2:0.11725847823294 3:0.292859792446966 4:0.12424502513055 5:0.0806317636019635 20:0.324058652019487 30:0.345308301572313 31:0.0547398500628389 44:0.248742440624121 63:0.062086415768557 75:0.17464090408268 142:0.130348690314056 186:0.0814985792805899 187:0.133918372650274 229:0.150422639211173 270:0.16286193591061 709:0.125248037156874 1045:0.0746071675324803 8966:0.318057829102305 8978:0.318057829102305
+-1 1:0.434004587546594 2:0.311137315850302 3:0.323784724409621 4:0.21978375869236 5:0.0713169483277599 7:0.157754850107347 21:0.076844541299697 23:0.0913738548152418 31:0.0484161437628004 44:0.220006992188366 47:0.0601231961881556 75:0.0772329400722325 83:0.0658273413604557 142:0.111996419092424 189:0.1901143930235 213:0.131144005428567 256:0.0864461797242289 264:0.104569899796089 430:0.0988653716384196 767:0.121510060082696 1931:0.165591375100675 8906:0.562629731759362
+-1 1:0.420736275021808 2:0.160866816062812 3:0.200887061957985 4:0.255677481563729 7:0.12234559708411 15:0.0675045019639434 21:0.11919242142563 44:0.170624781448233 47:0.0932561925194644 63:0.0851763060202671 75:0.0399316203221593 83:0.0510519034928196 95:0.389817970254641 142:0.0970765740270598 170:0.195743930488064 227:0.14005097618869 375:0.139676845716181 2206:0.254301764447162 6234:0.371254549688948 7572:0.40872722130914
+-1 1:0.350530162293685 2:0.0670118961566162 3:0.167366064233906 4:0.106506943218444 5:0.0460801423559813 7:0.101930412345805 12:0.0553296129644366 20:0.462989650408121 21:0.0496516955001536 23:0.0590395458054418 29:0.0298086219626059 44:0.142153495866914 47:0.0388475040535126 63:0.0709633709889009 75:0.116439521954882 83:0.042533133174248 95:0.324771037085574 108:0.0759784632492438 110:0.079211673991476 142:0.0553375119428102 169:0.05982750924283 170:0.0815405704184032 231:0.0879900736218979 267:0.087873689258844 408:0.0966604684059717 491:0.587719555294766 582:0.0692276174875796 719:0.0883428796488146 4281:0.132284247966571 5148:0.15250618369391
+-1 1:0.100760511173957 2:0.192626873171035 45:0.207224930807257 48:0.144333847606857 54:0.176654508528465 142:0.0244721000896172 179:0.128610396742858 209:0.148207489622886 345:0.17313816340732 409:0.12049060629245 565:0.250947172450385 671:0.144083663459787 1045:0.122561247719588 1140:0.47926875050019 4281:0.380253395546793 8603:0.548738687962912
+-1 1:0.67441484986053 2:0.322324743679754 3:0.268341527643604 4:0.341529640177772 5:0.1477625210396 7:0.326854343948594 23:0.189318688771643 31:0.100314043564065 63:0.0568885319286961 75:0.21335992261709 83:0.0681942661655443 142:0.156972869320963
+-1 1:0.486642406099643 2:0.465164397973159 3:0.290443708414656 4:0.18483001139969 5:0.0799665541004887 23:0.102456042718938 75:0.173200122143251 83:0.0369055727819416 142:0.0923380840988801 229:0.149181657191554 1317:0.369488820486784 1391:0.359976667145575 6181:0.288344756365704
+-1 6:0.0302159220507922 29:0.0548691690926865 48:0.0924250523365732 85:0.0925858808293628 108:0.279709350714365 118:0.197857984009551 142:0.0156708573149772 176:0.0783111859887045 238:0.446936842273652 289:0.39433392053122 332:0.388103714282374 457:0.104176949227587 506:0.084520851320341 574:0.226243566106656 671:0.0922648454047263 867:0.132803892835768 4176:0.503974010798514
+-1 1:0.310076871345827 2:0.237113279693013 3:0.148051012864433 4:0.125620534387806 5:0.0815244330440343 15:0.0497498932547541 20:0.0819115715033774 21:0.0878431818646418 26:0.12570086239118 44:0.125748126668638 47:0.0687285364414104 63:0.0627737707717029 75:0.058858114369258 95:0.43093575638804 142:0.0715441052800166 143:0.127951047241829 170:0.144260595422935 186:0.1648016903746 187:0.135400974960535 189:0.108662586300812 227:0.103215650999588 228:0.109821259800201 229:0.0760439796357101 339:0.112945113892599 829:0.107722117310363 930:0.127135823173904 940:0.198423593535914 1064:0.134541469197851 2753:0.412837706209493 3297:0.238728491320366 9921:0.32157902834399
+-1 2:0.0477561044291537 4:0.0506015299222139 6:0.0233967938903229 15:0.0400797644179064 26:0.0506338870514535 27:0.0340629262521764 29:0.0849725941202051 63:0.0505721274871899 75:0.0237087881367125 82:0.0877464121064853 138:0.0980970829233068 142:0.0242685176422454 143:0.103080579574648 162:0.0633585687819133 169:0.255816857274945 199:0.0546827169380492 218:0.0663577627360121 229:0.061262941280946 234:0.0839200889923974 339:0.090991422509965 408:0.0688851933480282 472:0.106582497985849 506:0.0654461887495105 507:0.0625507236534369 524:0.13224406209875 534:0.089166223045042 597:0.10460935752627 631:0.0785123154181979 636:0.119643510756635 778:0.111793633535933 909:0.102997745284838 963:0.0992539025168578 993:0.128555009056256 1001:0.274247038574186 1007:0.135036976725844 1056:0.344624082872882 1194:0.179310944492431 1225:0.104349451090126 1366:0.126771312998507 1645:0.1337176840633 1734:0.161861829390236 2640:0.161861829390236 3281:0.193691762773176 4258:0.220426704259766 8610:0.544173752193036
+-1 1:0.457774980669908 2:0.21878551953289 3:0.182143138834188 4:0.231821295843222 5:0.100297295094597 7:0.221860092514105 15:0.0612059420517723 20:0.403094324092945 21:0.108071080098987 23:0.128504523752426 26:0.0773231779611624 30:0.429526616736047 47:0.0845548511470244 75:0.0724115390341494 83:0.0462884660416158 142:0.0926513357841784 143:0.157414697210402 169:0.130219592269206 186:0.101375521143837 339:0.138953305096401 862:0.17189757718422 4537:0.295787337584852
+-1 5:0.163764721466995 20:0.164542397797835 53:0.224643090480496 534:0.222330952047653 540:0.329743116002702 1676:0.396200230029669 2837:0.438669182032958 6779:0.622957100367701
+-1 6:0.0122953682324664 15:0.0842500839215391 48:0.0752186248344755 142:0.0063767361089361 176:0.127464568757324 221:0.117044115503017 238:0.242488184129013 373:0.087773386638675 409:0.062792878185281 420:0.125026509253962 671:0.075088243029999 1045:0.0638719791948991 9839:0.928067113603665
+-1 6:0.0206162283749965 11:0.0308808250833775 12:0.185304605731492 15:0.0235443534223544 28:0.0507468111795779 29:0.0499160814998845 30:0.12392089064066 48:0.0840817625153068 53:0.05292429927244 68:0.0421874765509891 75:0.0835645760717735 80:0.044744768615729 83:0.0178059836566293 120:0.0572541404606009 142:0.0213843531032729 148:0.060407784990275 199:0.032122674181907 200:0.0663883023283233 204:0.0412543673492438 205:0.108753511821823 215:0.0437797032840228 218:0.0389810329692308 227:0.0488472558807044 229:0.107964432587866 262:0.0643155389857135 303:0.18420126219696 326:0.160267998964156 341:0.0574184615408823 387:0.0485098423072152 405:0.0653548533135711 408:0.0809314805766971 437:0.0618125841291711 438:0.0766275031728622 478:0.0538914715067272 483:0.0667232263138024 485:0.0475568236080645 493:0.0613495280573513 505:0.0494323887873374 513:0.0514250417091888 521:0.271060976660646 565:0.0730947068470534 585:0.0851500102025778 586:0.0505165093898348 631:0.0461210720437158 710:0.0791943739650771 724:0.0804112945476118 814:0.152575502389754 882:0.0516060580558415 912:0.0653548533135711 950:0.0748823764931956 1081:0.076400323019564 1177:0.0927953486277439 1237:0.0842728415980283 1309:0.0811229157794655 1378:0.0842728415980283 1379:0.0725345946353619 1548:0.0756260789316467 1620:0.0831095646494817 1726:0.185590697255488 1819:0.0953902994320418 2040:0.0936212788186197 2200:0.0991397764667861 3170:0.106411722004724 3347:0.126049089482317 3807:0.285113373830367 4705:0.110072674348092 4785:0.105865140991768 5048:0.124539826227863 8113:0.570226747660733 8245:0.146764220271507 8246:0.146764220271507
+-1 4:0.0488389168580999 5:0.0633903529664942 6:0.0112909043789005 15:0.0386836580851886 20:0.191074132101037 29:0.0410063635015899 42:0.0675521540492429 48:0.0690736775394721 63:0.122026346509724 75:0.137297611482718 83:0.0585108939954591 142:0.0322068554286562 169:0.493811876540384 234:0.0809968839939123 270:0.128037328479427 286:0.0632657843059367 339:0.0878219003574743 444:0.148327055558516 507:0.0603718819691871 518:0.19693274533664 534:0.0860602784252154 850:0.103501239030507 1045:0.0586539903438144 1124:0.251053313741094 1225:0.201429252191119 1734:0.156223664388047 2024:0.109961993845726 3542:0.19630957650138 5979:0.23422236471987 8215:0.500095673215835 9587:0.241135393029389
+-1 1:0.100572342365737 2:0.192267145250509 21:0.142458135020547 29:0.0855253914201621 32:0.176531044011264 47:0.111459295033528 48:0.144064306218335 118:0.308404187776858 142:0.012213199396996 209:0.147930714263504 304:0.178312894128395 409:0.120265591814818 441:0.166055868191694 930:0.206180284903211 1045:0.122332366348814 1055:0.513924867635276 1064:0.218190261076654 1165:0.352551662147292 1225:0.420113225510671
+-1 5:0.213792016136226 20:0.214807259157936 23:0.273918067179627 83:0.0986677105255594 142:0.00987470093601811 218:0.216004313559133 507:0.203611839343329 930:0.333404636433429 6119:0.789944671930178
+-1 1:0.205543686070227 2:0.130981330835719 3:0.0817833514920208 4:0.0693927594258391 5:0.18013632554971 7:0.0996164996621197 15:0.0549636632404494 20:0.452479365991142 21:0.0970491140805883 47:0.0759312610507692 63:0.0693524381924043 75:0.0650264224808283 142:0.0624015003458956 143:0.141360268570841 187:0.299181891790218 189:0.120050384222752 229:0.0840133599233673 284:0.0974248049934122 856:0.120402250083155 1936:0.216003877162672 3236:0.480349212406842 4577:0.317983875062524 8260:0.342617146202504
+-1 1:0.401166268347217 2:0.191730378779056 3:0.159619215546096 4:0.135436095758586 5:0.175788950018796 15:0.0536371807337603 20:0.44155931575724 21:0.0947069493752556 23:0.1126135818608 30:0.37641111303122 47:0.0740987505600827 63:0.0676786997507722 75:0.158642718181639 83:0.0811288164427749 142:0.105552225142123 203:0.11868492493222 229:0.16397159521725 256:0.106540475463272 270:0.177531331530106 631:0.105069960192442 640:0.146114774446006 1196:0.196510636637135 1380:0.161244712360815 9662:0.36412322179102
+-1 1:0.334129013669651 2:0.159691099194081 3:0.132945901141867 4:0.169205885420745 5:0.0732067887035891 7:0.161935223667999 20:0.661989859379824 21:0.078880858335345 23:0.0937951866889976 31:0.0496991316846108 47:0.061716411354319 63:0.0845537834748772 83:0.033785855837147 86:0.101295083839728 142:0.108201630051306 256:0.0887369322677649 264:0.107340915990203 286:0.0730629297221232 475:0.105659530708306 524:0.147403142773567 825:0.168709063162728 829:0.0967316175800143 1239:0.174572590478357 2455:0.195212282638124 4457:0.253677682436283 8400:0.25845512593657
+-1 1:0.313449524880371 2:0.199743600514332 3:0.124717782182517 4:0.264556015901354 5:0.0686759670617672 7:0.151912934356294 15:0.041909178670945 20:0.1380041829547 21:0.0739988643782224 30:0.441160787366632 47:0.057896737562153 54:0.0915905631433754 63:0.0793206880359139 83:0.0316948245335581 95:0.484025523905739 142:0.0888168330956323 143:0.107785624233071 169:0.178328965323383 170:0.121524744541617 187:0.114061423665446 213:0.126287532043133 227:0.0869485917734365 256:0.0832449386935683 270:0.13871333636488 284:0.0742853244986425 375:0.173432636728144 709:0.213353390527278 1469:0.138496096941747 5676:0.212678260631301
+-1 1:0.627417666881275 2:0.199908843149463 3:0.249641915856872 4:0.317729851374792 5:0.137465561771561 23:0.176125851959948 63:0.105848410610723 75:0.099245875800383 83:0.0634420896590796 142:0.158732694516402 229:0.256448968478488 679:0.308021571487 3316:0.377193751049544
+-1 1:0.46136374116313 2:0.126000402651099 3:0.236019938545491 4:0.133507814784582 5:0.0866430712168465 7:0.191656612252062 20:0.609381617360318 23:0.111010238039492 30:0.185525966619001 31:0.0588208482057628 44:0.133643418144975 63:0.0667151194855278 75:0.250214450052313 83:0.0399868695958319 142:0.104049417885569 2884:0.257401863850037 4911:0.261437703956806
+-1 1:0.186715633909135 2:0.356949843872569 15:0.0748933870467006 24:0.351892718552758 45:0.384000972867772 48:0.133729898431798 54:0.163676018305691 134:0.313116753800017 142:0.0340112681154821 193:0.212028584309882 209:0.137318950909466 409:0.11163837733589 506:0.122293302266983 671:0.133498094865748 1159:0.222282478848927 9649:0.50842383975491
+-1 6:0.0147516250807453 20:0.124819671870155 75:0.0149483367401147 83:0.0382223931048956 132:0.0447344762592933 142:0.011475933685681 179:0.0402069943297419 199:0.0344773280667427 204:0.0442783919306109 205:0.0583626768471733 218:0.125515253286508 294:0.0704856304700111 373:0.052653977793933 398:0.0573698839560179 424:0.0759675667928442 493:0.131693133242593 507:0.0394380883205735 548:0.0835097265674453 633:0.0767002399486246 643:0.0600108569649381 720:0.0734345294294247 739:0.150695078621945 915:0.0913916699467788 1162:0.0855695930868673 1237:0.180900406388231 1262:0.227250519439069 1608:0.0799290231436914 1949:0.0917808720486363 2426:0.112500643431283 2624:0.0936313070451068 3148:0.264338093381585 3904:0.629943839075424 6240:0.132169046690792 7028:0.292393760014252 8257:0.157522320280871 8506:0.146196880007126 9594:0.157522320280871 9595:0.315044640561743
+-1 4:0.0284005007631847 6:0.0295461716959785 11:0.0737614840301834 20:0.240743168179636 27:0.0286771219518964 29:0.0596144085927443 30:0.0394660819297749 31:0.0250253746876824 40:0.0205122398547119 68:0.0201536770438465 75:0.126414040005444 77:0.0247550416455646 83:0.0340248882750776 84:0.0192672329076843 86:0.0255029347715378 88:0.100271982980585 92:0.0216720420339666 98:0.0212951810287694 103:0.0312512038614179 132:0.0199109139057493 142:0.0527809626044497 150:0.0286297738772522 151:0.0259265213694128 166:0.048990372180259 168:0.0487641161141429 179:0.0178957723315724 181:0.0277100405345709 186:0.0186293210583265 188:0.0725690546185048 189:0.0245666194639705 196:0.030527885971131 199:0.0767277464989408 205:0.0259767036787813 213:0.101678725900976 218:0.0186219042598553 229:0.0343843004999862 242:0.0230035579391601 264:0.108100345053138 285:0.0350095757251027 304:0.049716312554257 345:0.0481833698163448 346:0.0547025587022897 357:0.0303899399178617 375:0.0930913197149788 385:0.0343485676755154 391:0.0339740596440985 400:0.318201257127755 409:0.0167659264951497 416:0.0319396270412996 423:0.0497459675444406 442:0.0279365318120159 453:0.0318425952100194 455:0.0239700486846186 457:0.0679118782357509 472:0.0299101264333551 498:0.0337327675050286 506:0.0183660902781522 507:0.0175535391675709 518:0.0286297738772522 534:0.0250226168016445 546:0.0283635170178161 576:0.0642737677119503 580:0.0297048138132909 633:0.0341385884416188 634:0.0368834470337491 640:0.0612795686397107 644:0.0312813804431896 676:0.0328274672136259 705:0.150100172628334 710:0.0756650061613771 713:0.0328274672136259 714:0.0339740596440985 750:0.0379584869697879 757:0.0623823045948839 766:0.131125360392465 772:0.0304173606429465 778:0.0313725215367711 789:0.0337327675050286 800:0.0289506928492837 805:0.0427955004765053 819:0.0329721723534283 908:0.0349185880703171 909:0.0289041413181086 933:0.0381508295354379 952:0.030583661389176 965:0.0655833025139176 987:0.0268017433862897 1013:0.0406776120830283 1015:0.0410274696975319 1021:0.0351478040320024 1037:0.0367161165024947 1114:0.0401770554661903 1129:0.0382813782152063 1138:0.0323726128547039 1145:0.043127109747643 1146:0.0375857013070752 1164:0.0348285103073209 1190:0.0355271317105697 1235:0.0384808188620996 1268:0.0444595300859146 1296:0.0334207812989883 1301:0.129381329242929 1305:0.0597167157859317 1325:0.049148348784628 1335:0.035288186632818 1366:0.0355756908644721 1393:0.0375857013070752 1472:0.0333825319793742 1608:0.0355756908644721 1613:0.0376467707019017 1645:0.0375250431570834 1746:0.0766947379911726 1818:0.0532511362665459 1951:0.0409387231547013 1970:0.0451371201902461 2067:0.0409387231547013 2161:0.0435891444188099 2207:0.0475427419705743 2285:0.0443299206378071 2307:0.0460238389556324 2570:0.0498328071327038 2616:0.0871782888376199 2629:0.0543555013545872 2815:0.0495988277117671 3093:0.0473607620189337 3149:0.0560764698465976 3175:0.121999144530116 3401:0.0495988277117671 3992:0.0556144351754306 4166:0.0556144351754306 4286:0.0650709192220916 4349:0.05656349122237 5104:0.0570783571372678 5252:0.060999572265058 5253:0.520567353776733 5420:0.0638681083319275 5683:0.0618580978893244 6160:0.0664594624910426 6166:0.0681017606032183 6178:0.0650709192220916 7034:0.0650709192220916 7057:0.0664594624910426 7169:0.290812500819746 9832:0.330396385894436
+-1 2:0.0753404437085579 6:0.0369109845563222 26:0.0798804584826375 29:0.0670267499894244 30:0.110933047438263 31:0.140684909250875 63:0.119674539089227 75:0.0748063787598921 88:0.140924511641501 142:0.0478577793658865 176:0.191325816353208 213:0.190535439923758 218:0.104686580863291 234:0.132393058779081 238:0.363977615401649 275:0.124105749854175 312:0.167277361400529 355:0.111074693706217 409:0.09425284843539 655:0.139744859113466 671:0.112708335628501 1332:0.226783693504527 1709:0.235369923698311 5076:0.685841422600223
+-1 1:0.480712727944246 2:0.306330951145312 3:0.382539583168905 4:0.324582898370097 5:0.210645790470226 31:0.143004672992512 44:0.324912575938531 142:0.145940729353468 143:0.330604562109501 187:0.349853955875972
+-1 1:0.624378633152227 2:0.298410811878661 3:0.248432721021405 4:0.210793905224426 5:0.136799717469021 7:0.302604351841742 15:0.0834813697838077 23:0.175272748145827 63:0.0526678554231444 75:0.296295470541626 82:0.182765312687098 83:0.0631347941197723 142:0.139008177649194 143:0.214704554928866 1010:0.271294675025531
+-1 1:0.146817464940166 2:0.280675324775762 24:0.276698826912168 31:0.131027840597097 48:0.210307881170972 54:0.257402099396093 129:0.354490901543339 142:0.0178290664420936 209:0.215952138968525 409:0.175566054189821 506:0.192322327189138 671:0.209943339528486 959:0.382189658598017 1165:0.514661785530224
+-1 1:0.114089542138753 2:0.218108379043071 15:0.0915247647825433 24:0.215018305115163 45:0.234637530120484 48:0.163426945702584 54:0.200023121756136 142:0.0346367175725458 193:0.259113215083154 209:0.167813009636451 409:0.136429618545637 441:0.188374234166169 1010:0.297433803287741 1045:0.138774173268547 4930:0.473638819683305 6307:0.529502541386672
+-1 1:0.126813882901962 2:0.242433880629185 15:0.10173246895537 24:0.238999172540203 45:0.260806518382877 48:0.181653858599483 54:0.222331585038867 142:0.0615995690965078 186:0.168499686662387 193:0.288011962357982 209:0.186529097711526 409:0.30329107026417 671:0.181338985016957 8818:0.657589923865349
+-1 1:0.484810382511184 2:0.154471076972397 3:0.192900198872304 4:0.245512262263701 5:0.106220680580862 15:0.064820659562157 20:0.21345019027209 23:0.13609377957629 30:0.682340578291766 63:0.0817898684483429 75:0.15337607960136 83:0.0490221831141828 142:0.122653955104663 186:0.107362584803326 229:0.198160059981513
+-1 2:0.0393747083683541 4:0.0417207497867728 6:0.0385811174172557 15:0.0330455981343403 20:0.054408496126657 26:0.0417474281045015 29:0.0350297742328319 30:0.0579762498903128 63:0.0416965076020673 68:0.0592120909586005 75:0.0195477966599021 83:0.0249915285312074 92:0.06367309158433 97:0.0601850777302394 114:0.0677272178537082 142:0.0200092912962206 144:0.0573432048846627 229:0.0505110388621285 278:0.0832686829130259 339:0.0750220473000807 386:0.076817788013389 396:0.0979669501474731 399:0.0909463143501075 408:0.113591107624787 411:0.216785586232014 505:0.0693806631842288 515:0.0696857373284029 534:0.0735171779749029 613:0.0892062114448771 640:0.0900205799741699 644:0.183811216194741 758:0.101042223375446 796:0.169570287292658 850:0.0884161560904186 987:0.157488607541482 1155:0.336837998838255 1296:0.294573690628938 1380:0.0993420588679256 1464:0.246598317282935 1576:0.106916354737919 1788:0.118766471576042 2575:0.134322180386482 3079:0.283871308971215 3759:0.158571712847571 4645:0.363481791514272 5992:0.195259839160757 7219:0.21360390231735 7440:0.21360390231735 8864:0.21360390231735
+-1 3:0.14051694296898 4:0.238455828498349 6:0.027563899154326 7:0.171157157861856 21:0.166745976774778 29:0.100106708046847 31:0.105058824567778 47:0.130462110979575 54:0.206386382318439 63:0.0595793179446342 75:0.1117258455727 83:0.142839610309174 85:0.168919411296144 142:0.0643294844633884 218:0.156352933546049 430:0.21452926498391 506:0.154205072300323 524:0.311594999600013 829:0.204480635717885 1856:0.429075234146529 5032:0.546347407168502
+-1 4:0.067278780655036 6:0.0155539542638126 25:0.0583671599223154 26:0.067321802045972 27:0.0226446922386708 28:0.0574290480609034 30:0.0934923609836119 32:0.0582987668890956 47:0.0368090467893453 54:0.0582305923643414 75:0.0630454596569959 77:0.0586429454489474 83:0.0604519181059247 120:0.129586498452568 137:0.0636663449369914 142:0.0403336687098548 144:0.046235757065842 154:0.0562184740671159 179:0.0423938208480135 204:0.0466866585338336 228:0.176451417406356 283:0.0582987668890956 337:0.0594562800022575 345:0.0570715001845418 437:0.0699519394856355 456:0.0842762992906396 461:0.0850993779457206 475:0.0630177050842106 593:0.0749059533347543 608:0.084860955263105 614:0.0940532630845701 671:0.0474942708407348 710:0.089622528054016 915:0.096362390358001 989:0.0940532630845701 1305:0.0707323412411252 1660:0.43759335939484 4456:0.14093897724188 5472:0.151299038250972 6757:0.322656522999415 7036:0.302598076501944 8928:0.172228569291257 9842:0.587014279109734
+-1 1:0.38407072339818 2:0.244746484056644 3:0.152817104577643 4:0.259329078122807 5:0.33659554417317 7:0.186139413081036 15:0.10270290615573 142:0.101054158001976 187:0.279519667581142 339:0.233162137121799 356:0.285911279888593 5028:0.564835234203457
+-1 1:0.447078797034768 2:0.427346932496178 3:0.133415442362573 4:0.226404653921799 15:0.0896637434308067 21:0.158318902927581 24:0.210646224424387 32:0.196185365030175 45:0.229866521372082 47:0.123868765432348 48:0.160103899354153 54:0.195955946043491 75:0.106079400785889 83:0.0678103629129727 142:0.108583778918028 143:0.230604914323069 209:0.164400779134962 229:0.137053316769926 409:0.267311046200514 1916:0.319641609096007
+-1 2:0.0473836833736333 6:0.0116071682029872 26:0.0502390239049258 27:0.0337972900345539 30:0.139537707418355 31:0.044240310165804 32:0.0870111332245364 51:0.0788322470250535 82:0.0870621307605624 83:0.0601498131169705 117:0.359498982713494 142:0.0180594465825859 168:0.172412173545822 196:0.107935498343118 215:0.0739453944705261 218:0.0658402785664904 228:0.087784805790775 284:0.0704886121264991 394:0.108132699929487 506:0.064935813395716 515:0.251580294817959 598:0.122669111194418 607:0.113860241341461 609:0.0821965241959138 631:0.0779000452230281 638:0.141765817388469 643:0.0944378815194577 814:0.257705166194365 1265:0.149086467866417 1618:0.355825213166663 1806:0.319176871016525 1962:0.37655328873426 4309:0.205794495046916 4939:0.205794495046916 6145:0.247889714823544
+-1 1:0.520096930591214 2:0.248571201948041 3:0.310410435594185 4:0.131690841029905 5:0.0854639028911601 7:0.189048262808742 15:0.0521539357860155 21:0.0920879898726219 44:0.263649197794458 47:0.0720496757224623 66:0.142864803906249 137:0.124619893946084 142:0.134212852763735 269:0.162549151005025 356:0.145189645453624 1045:0.0790782619174305 1332:0.187057218214369 1409:0.199976944111435 1932:0.392946766730666 2206:0.196473383365333 2354:0.222192460732424
+-1 1:0.669373002666098 2:0.426553441708498 3:0.266335437506978 4:0.338976404200685 5:0.146657865570789 15:0.0894972572599907 23:0.187903364212828 75:0.105882434291255 83:0.0676844537413158 142:0.169347128648563 229:0.273597676830403
+-1 6:0.0313659688588905 26:0.0339401400872569 29:0.0569575419933042 30:0.0942679409177234 32:0.0587823930731701 37:0.0371018305597951 75:0.0476763470583294 82:0.0588168456437475 83:0.0812712081061008 84:0.0460213500955441 87:0.0730515582978964 142:0.0406682627215083 154:0.0566848428693806 162:0.127408667914496 168:0.116477050469125 169:0.171475280255897 190:0.0672325762382384 218:0.0444799302263435 227:0.222951765802316 234:0.0562520427010209 291:0.0631152540944583 303:0.280247722752496 306:0.0615328080501562 339:0.0609919918569306 345:0.0575449453931886 379:0.0957731923863542 386:0.0624519067340222 437:0.0705322363146646 457:0.0540710116307874 458:0.0825578664304115 490:0.0811497997942598 505:0.112811233397422 507:0.0419280534634759 534:0.0597685518025708 574:0.058713652996398 609:0.111059544117512 612:0.0912817019423281 631:0.2105087433766 643:0.0637997054715846 658:0.0725235409835012 729:0.0844016419765903 730:0.0753779322623224 780:0.238665961205764 796:0.0689292678215144 829:0.116342996617856 867:0.0689292678215144 882:0.117771833465385 909:0.13807977649777 915:0.0971617790522044 930:0.0686551797107448 1021:0.083953383560399 1045:0.0407349839489319 1081:0.261533426258563 1241:0.097785464046353 1305:0.0713191120102254 1335:0.0842886988000296 1378:0.0961608718069321 1424:0.0729183341835217 1439:0.0924017271429485 1620:0.0948334960663737 1645:0.08963161221733 1990:0.104401189763291 2010:0.114919032765759 2242:0.13394320104488 2335:0.231750880504388 3835:0.254389324803442 4107:0.135106491141898 5048:0.142108157713235 6325:0.155427173632411 8201:0.334935314954491
+-1 6:0.0234480877682192 20:0.0992020406291346 29:0.085158883484798 30:0.0704713749577532 32:0.0439436357986109 48:0.0358617343453434 64:0.0508428193217329 75:0.0118803830070428 83:0.0607554776730869 111:0.0366597313268482 117:0.0605198123538444 141:0.0535477439953069 142:0.0167211843154193 187:0.0546607875327505 204:0.0703816436861422 215:0.0373449852125487 242:0.04107558383367 248:0.071311961998363 252:0.0423057002350999 264:0.0482565001186174 337:0.0448161299762951 346:0.0488389566047753 355:0.0352806786131275 373:0.0418474265004717 385:0.12266689134382 387:0.0827597817131464 430:0.0456239972257772 508:0.0909635660732558 631:0.157368883227497 655:0.0443871893561931 697:0.0628437003628173 856:0.0439951881504589 882:0.0880420528421747 993:0.0644184230866368 1058:0.0657595595675323 1109:0.0811083432981938 1138:0.115610287482066 1176:0.0661642178916418 1319:0.0618734975539309 1363:0.0663704299470481 1380:0.0603762013997264 1482:0.138897772020871 1714:0.090305137502035 1734:0.0811083432981938 2135:0.245718229112581 2207:0.254679631123988 2333:0.36122055000814 2365:0.243325029894581 2422:0.0933298297716067 2807:0.159245162514148 2824:0.0855634873591346 3360:0.0821810287073541 4188:0.0977731774843787 4682:0.537612298584291 5035:0.102895289203194 6991:0.118671260781111 7609:0.250385782663397 8766:0.121603779044806 8973:0.129820061845363
+-1 2:0.0479320104334226 6:0.0469659484275263 11:0.448479880789217 20:0.0993496350352312 26:0.101640786301381 30:0.0705762234131654 31:0.0223761309533942 51:0.0398722494524097 63:0.164964819824141 75:0.0951844706695939 81:0.0357444666046654 82:0.0440348096945687 83:0.06084587065883 88:0.0448284800953339 101:0.0570588014813682 114:0.041223184212835 120:0.0489116199970679 129:0.0605377818834043 137:0.0480609339297826 142:0.0517605564003789 169:0.0427931898917009 173:0.131641987740796 179:0.0320025694081207 211:0.116773649517552 213:0.0606098547129007 218:0.0666021865439137 228:0.0444003286308551 229:0.0614885986987633 304:0.0889064586738422 317:0.0349909030812541 339:0.0913265825433849 341:0.0490519977963253 346:0.146734859991204 408:0.0691389267557253 442:0.0499582125750958 457:0.0809634274362906 507:0.0313905622601869 546:0.0507217797144002 547:0.0736905904965429 582:0.0495168630348933 609:0.124721561564227 647:0.106059783498323 653:0.0599725221128206 716:0.11242457765894 780:0.178683675862586 796:0.0516057458995849 800:0.0517718118087491 808:0.0612734462779531 829:0.0435516530960695 853:0.124246958474898 886:0.0505661432329357 891:0.0825834495242379 930:0.102801084961973 984:0.0673227939010864 1026:0.162458035215482 1140:0.11925809920089 1324:0.0700636291763198 1359:0.195515510329375 1416:0.0708625491291992 1455:0.0779493946311841 1735:0.193034089892186 1795:0.0750478772204059 1836:0.0626067630014945 2444:0.0831588053468724 2457:0.289551134838279 2736:0.0767253946056239 2744:0.080717601621618 2804:0.0767253946056239 2913:0.0863912591813211 2979:0.0909064334571633 3360:0.0823032989756626 4658:0.109084034436119 4867:0.100280171494026 5110:0.0979186460046981 5526:0.401120685976104
+-1 1:0.306250852265473 2:0.292734442246011 3:0.12185351724694 4:0.206784184146189 7:0.148424106351795 20:0.269669565855665 21:0.144598817249169 26:0.103458206107407 30:0.287352734423406 31:0.0911049373899282 47:0.113134165563447 75:0.145329669462999 142:0.080578706284233 162:0.129458041825793 256:0.162666275735604 264:0.19676978448485 430:0.186035540898874 524:0.270209028573889 767:0.228646181949459 985:0.306283881652601 2395:0.411839054614131
+-1 1:0.113793352957634 2:0.217542145355277 15:0.0912871562811429 24:0.214460093604066 32:0.199737412161507 45:0.234028384912226 48:0.163002671116912 142:0.0207280780734475 209:0.167377348339425 457:0.183728551551904 513:0.199387332285533 867:0.468431203871511 1007:0.307565220932231 7513:0.590072321700321
+-1 1:0.232032780100018 2:0.29572265551984 3:0.0923230422466343 4:0.0783356336369673 5:0.0508377722680573 7:0.112454407149907 20:0.510791877075448 21:0.0547780770523616 23:0.065135193404562 26:0.195964313320939 30:0.217714508692396 47:0.0428583867861806 63:0.0587175870547056 75:0.0734065924215728 83:0.093849091066391 95:0.358302626217345 142:0.0751396137570395 169:0.132009023182078 170:0.269878134328303 189:0.135521673936329 213:0.0934850584416161 264:0.0745418988975144 267:0.0969463715711653 408:0.0533201790283607 419:0.110155710596479 430:0.0704754671421413 636:0.0926093562791455 826:0.236081234946666 930:0.15856110332312 7656:0.187841567060029 8569:0.210607247212569
+-1 1:0.139636664666288 2:0.266947574811942 15:0.112019144340661 32:0.24509925508296 48:0.20002178277439 142:0.0339141037900662 193:0.317134282835203 209:0.205389981535268 409:0.166979168627373 440:0.369036385444026 457:0.225454663878545 671:0.199675070759512 1045:0.169848719994637 4922:0.60752132406112
+-1 2:0.0711610015621228 6:0.0348633814771863 11:0.156664443994679 26:0.0754491631726396 27:0.0507569027502556 29:0.0633085023915204 32:0.522694644777974 48:0.106640791971939 88:0.133106853363582 142:0.0271217477193758 176:0.180712191834868 193:0.169078840383824 221:0.165938651502388 345:0.127922806552041 409:0.0890242579495645 420:0.35451129274617 959:0.193796864147206 987:0.142312762578874 1045:0.0905541474754183 1527:0.226664116657963 2593:0.545646680752417
+-1 1:0.223463769619454 2:0.213601175238645 3:0.177827072832347 4:0.22632805563722 7:0.108301446550815 20:0.196771298077926 21:0.105510226489112 27:0.0507849985288337 30:0.209674274437771 47:0.082551238380372 63:0.0376994243099245 64:0.151273212109822 66:0.163687988393722 73:0.189525693239779 75:0.0353478371684653 83:0.0451916139952622 84:0.102362405458202 102:0.166190825821231 117:0.360130556612796 142:0.0859330751894574 256:0.118693609819984 259:0.212175282512997 317:0.207908325514502 408:0.102702111290703 592:0.343614729034435 631:0.117055352012035 647:0.157546033753129 825:0.225663511284198 867:0.153315051514884 986:0.155963877816705 2196:0.2700731146419
+-1 1:0.430217148613844 2:0.274152983003995 3:0.17117821012006 4:0.217865766144946 5:0.18851889304275 7:0.208504222430294 20:0.0947070602678591 21:0.101565253434701 47:0.0794646900726354 63:0.0725797244833876 66:0.157567778770149 142:0.130610655385759 143:0.147938408701729 162:0.0909304728581542 169:0.12238043590266 170:0.16679568776719 189:0.125636877925461 258:0.159210520335513 267:0.179750428055151 269:0.179277946453787 339:0.130588383448919 408:0.0988621322180129 716:0.32151304576483 909:0.147819527210463 1378:0.205887566842582 8786:0.371813210994225
+-1 1:0.130473885654456 2:0.249430817006303 24:0.245896979068349 31:0.116441947138803 45:0.268333711410216 48:0.186896609686831 54:0.228748344738887 142:0.0316887037552302 193:0.296324337555862 209:0.191912554123566 506:0.170913190312207 671:0.186572648470109 867:0.268548371861689 7620:0.652453858518545
+-1 2:0.0327714935750089 6:0.016055494681104 13:0.0533539900735472 25:0.0602492208598133 26:0.243224125337162 29:0.0874656399076653 32:0.120357244958667 34:0.0639771323558709 41:0.0369648448371362 47:0.0379959619861951 51:0.0545219428492682 55:0.0806273802513084 63:0.104111767751887 82:0.0602138933849536 83:0.0208004008316253 100:0.0496068321757063 142:0.0437159478599262 145:0.0673655812168832 165:0.0779440147126961 169:0.117032165762205 173:0.0600031101893264 175:0.0777084330461637 176:0.0416113341833177 189:0.0600731473734637 190:0.0688295187083941 194:0.0636034380342873 214:0.0687773845400244 228:0.303568548720783 238:0.0791612678226589 283:0.0601786224793333 284:0.048751319757051 323:0.0686734849329751 364:0.0743800583265189 402:0.0611882049542664 408:0.047270829524362 415:0.0698442601776338 433:0.0649182208628884 441:0.113215366264398 484:0.0887271347863707 493:0.0716666261764681 502:0.0554120306516199 507:0.128771849975437 586:0.0590118279442496 655:0.0607860470040912 696:0.0885986989947582 767:0.0767905220706136 771:0.0851667131311412 800:0.0707935921199724 801:0.194172059346745 805:0.104648521576877 998:0.0888563238713898 1009:0.143096405805512 1272:0.202886946394295 1338:0.101443473197147 1500:0.183226503700047 1551:0.0859474871813254 1598:0.0839931017397349 2392:0.369143643662141 3421:0.143851230934578 3432:0.147246657991706 3482:0.122444372897558 3853:0.156177706497845 6633:0.468533119493535
+-1 6:0.0325499049951057 26:0.0845309774040144 29:0.118214909220717 32:0.0976018980838496 40:0.0406756123155347 47:0.0308122540578925 63:0.0562852484088173 75:0.0263871641564794 80:0.0423871313698584 82:0.0488295514524973 83:0.0506033168863756 142:0.0286982590533817 175:0.0630164853393912 176:0.202464514678179 188:0.0719519358362296 228:0.19693948005462 234:0.0934005210008934 238:0.128389279712557 256:0.0443023960945362 286:0.0364770650692486 298:0.0645361837531313 322:0.0564189007135262 339:0.0506353506715959 345:0.0477736240553824 351:0.0461991841208173 485:0.0450510169606644 507:0.0348085318328439 508:0.0505091155060164 598:0.0688000353813214 631:0.043690916281741 640:0.0607584543303664 681:0.0712353044195415 778:0.186634399621258 796:0.0572248510241453 800:0.114817998126429 944:0.0712353044195415 987:0.0531476489687566 1009:0.116041878662071 1035:0.0795105887474015 1202:0.0806633888220106 1366:0.0705463186716866 1491:0.0747751806675604 1500:0.0742923890727707 1548:0.0716412810219817 1610:0.540441962468916 1739:0.104922464274373 1771:0.0928752122545095 1883:0.0935623047169119 1907:0.195803716667504 1912:0.0988180694981026 2213:0.0903641091131879 2662:0.102454795079281 2666:0.0879058883190495 2674:0.0961994086889077 3081:0.119407463268451 3082:0.122664127669342 3160:0.108580543356703 3610:0.0939160232376048 4785:0.100287022986845 5957:0.135045262337138 6231:0.346264884516911 6865:0.270090524674275 7229:0.139031097433285
+-1 1:0.478921713372939 2:0.171669172028379 3:0.142917876379906 4:0.242530188170393 5:0.0786978664873979 7:0.174081623268995 23:0.100830554241336 31:0.0534269525971347 63:0.151493290006495 75:0.0568174209053371 83:0.072640114910652 95:0.554659478221354 142:0.119952517531004 169:0.102176275808633 170:0.139258878032976 227:0.0996370194612458 375:0.298112551021957 1409:0.18414509887621 7507:0.310429431923715
+-1 1:0.430687844599981 2:0.20583969814037 3:0.257048241556492 4:0.327156196128223 7:0.156549258504398 15:0.0863764612705994 20:0.142216017376064 21:0.152514562340139 44:0.218325658256687 47:0.119327447311642 63:0.0544943498884125 75:0.102190282303589 83:0.0653242767007344 95:0.498797796156893 142:0.130753555108456 170:0.250467265720857 186:0.143065501196936 267:0.269920636617223 408:0.14845544433104
+-1 2:0.0853525241240564 6:0.0104540322060391 26:0.135743800223443 29:0.0759340138420184 31:0.0398451731887067 32:0.23510054470801 48:0.063953995654821 88:0.0798260680948565 106:0.0731754149025294 134:0.299485272131432 142:0.0271088280529107 176:0.21675132972421 193:0.202797957953549 221:0.0995157631607147 373:0.0746285750377861 409:0.0533891103094794 420:0.106302725517265 457:0.0720857818286263 598:0.110482317192802 671:0.127686279270229 1045:0.0543066067597548 1433:0.100790815713405 1731:0.519230140758358 5978:0.366996465660734 9674:0.486289699159173
+-1 6:0.0295236576881163 15:0.0505753587624687 26:0.191679794556488 29:0.0536120844897857 88:0.112720023363777 134:0.105723567743709 142:0.0153118288519867 176:0.15303406226654 192:0.11921450492497 238:0.291131506038751 373:0.105380797559371 409:0.0753891793130112 420:0.150106926094626 480:0.108575450476789 561:0.130813383431631 586:0.108513941325428 755:0.154070454348259 772:0.136773822574196 987:0.241031885548925 1045:0.0766847488403532 1140:0.149935662548184 1916:0.360591437227213 8511:0.686675262342252
+-1 1:0.583363487896205 2:0.111523337154961 3:0.278535947799978 4:0.236336340642847 5:0.0766880441661302 7:0.169635846683367 21:0.082631936942026 23:0.0982554971575147 44:0.236576386530991 47:0.0646512565778348 63:0.17714926160166 75:0.249148761614945 83:0.106177497354256 142:0.159394247660667 169:0.0995668510682927 185:0.0795422817762513 245:0.157936826212724 274:0.147619536968186 571:0.107805150573923 653:0.139537977713485 986:0.122145480545563 1314:0.318560609814126 1620:0.165194759822556 1751:0.18608862570692
+-1 2:0.0260479552891957 6:0.0319037036443039 13:0.042407659716668 25:0.0478882357794664 26:0.0276176049491443 29:0.0463472127575567 30:0.0383536241297432 31:0.0243199671096116 41:0.0293809808633209 42:0.0763504438970823 68:0.0391711827663726 78:0.0490200233077159 83:0.0661316103423129 98:0.041389838008524 138:0.0535057970186306 142:0.00661847600465461 168:0.0473895681813292 173:0.0476926182154892 179:0.0347826635913793 183:0.0561337359081588 203:0.0967452201729143 214:0.109333450628723 215:0.0406495694693503 218:0.0723879829604994 228:0.0965148563178703 243:0.0601646495447496 254:0.0615801748898461 258:0.0605079466191122 283:0.0956642433228884 286:0.0357528992468114 317:0.0380305967034317 325:0.0572966858962531 326:0.0744046289594746 368:0.0777764700839406 383:0.229304420985059 457:0.0439983993755038 507:0.102352472370228 534:0.0486345739240371 549:0.0681345704489238 555:0.0735321841993834 572:0.0691457884266185 594:0.0610955047740874 655:0.0483149244005454 827:0.0545019467819003 838:0.0840431361985818 911:0.108093585104388 912:0.0606821529304138 918:0.0737770495872127 1245:0.0623975537318677 1306:0.0913648826420275 1319:0.0673485616024572 1393:0.0730524941973932 1439:0.0751886819056093 1464:0.0815673589615631 1706:0.0959582485717331 1792:0.0753228403385979 1962:0.103500219174683 2307:0.0894530662280124 2315:0.102202767194698 2335:0.0942895970366017 2570:0.0968562705311655 2740:0.0924052435142338 5534:0.129172247135238 6773:0.642166548023131 6774:0.481624911017348
+-1 4:0.0509772332500559 6:0.0235705090593888 12:0.158893899336037 27:0.102947504121276 29:0.085603493747853 30:0.212517907424498 32:0.0883461266378823 41:0.0542667932329761 56:0.544013967121599 77:0.177735391724732 81:0.0717554144767996 83:0.213754376420696 84:0.0691671061864783 132:0.0714778454689015 142:0.0366730577035006 173:0.0880884631959387 229:0.123435605684811 283:0.176692253275765 284:0.071570103993315 296:0.106274478826294 411:0.0882944294392262 507:0.0630151466673587 534:0.0898282592874368 609:0.166915296162542 819:0.118366231274387 918:0.136266515876821 944:0.12895985321782 1003:0.124551197421739 1045:0.0612220405192558 1176:0.133019315915052 1235:0.138141626103246 1306:0.168751316307471 1509:0.148925607805988 1775:0.191165333099276 2015:0.189944939553922 2858:0.354470564373948 3237:0.188768933923392
+-1 2:0.0403986956276239 6:0.0494805829713148 18:0.0529736355445737 26:0.214165604155352 29:0.107822298560104 32:0.148369060279036 48:0.0605408693215506 63:0.0641713141184049 68:0.0607519735189769 94:0.059408251871008 97:0.0617502639969512 108:0.27482560444675 118:0.194403368751046 129:0.102046519733452 142:0.0282282787773985 176:0.0512959112004933 192:0.0799196802054585 226:0.0767334284574864 238:0.58551105526112 275:0.133094793903566 284:0.0600976493122663 286:0.110900873288595 289:0.0860997379260287 308:0.0731195645999092 312:0.089696673870855 332:0.381327394287231 345:0.0726228469566406 373:0.141291525658587 405:0.0941140983638568 426:0.0890881746667911 433:0.080027217536605 441:0.0697824942219485 506:0.0553634072729235 655:0.0749333259927275 671:0.0604359295170263 799:0.0998358361595203 867:0.173980169192328 952:0.092192495830228 963:0.0839626314910346 1140:0.100514700034077 1216:0.105950812606396 1236:0.109061654644807 1388:0.128040187463095 1433:0.0954117649795003 1500:0.112935221230451 1822:0.140676261222961
+-1 1:0.189549926149152 2:0.362368244846188 4:0.191979515536559 5:0.249179343750756 23:0.319257591816731 95:0.439051561869424 142:0.0230183665736528 784:0.435828485646391 1046:0.498643763495634
+-1 6:0.0345464211787876 11:0.25226521093411 17:0.0235309176332927 18:0.0462315067598174 26:0.149526434792603 27:0.012573861641107 32:0.129485642107126 41:0.0198842066830736 47:0.0204388673774896 63:0.0746720266148267 75:0.0262553210639348 88:0.0989225346892375 134:0.0618549865735031 142:0.0212761766097839 154:0.0312162915328528 155:0.0448510639824389 159:0.0259787198307814 174:0.0316542066947669 176:0.0447673119097358 192:0.0348740198560865 205:0.0683389661968707 227:0.0306948337807286 229:0.0226143738118993 280:0.0452377670638445 283:0.0323714105267816 312:0.0391403416224313 317:0.0257380190487683 345:0.0633798984245293 346:0.0359775854960738 357:0.0399746076802674 377:0.066472743005046 405:0.041067943798587 416:0.0840260996817297 434:0.0747334599912954 437:0.0776840770763417 469:0.099860389908963 472:0.0393434660638413 478:0.0338645381459658 498:0.0443717279674725 502:0.0298073554768093 506:0.0241585621911018 507:0.0692692229915961 539:0.0401195469256908 580:0.0390734000004974 599:0.0404898469241645 633:0.0449055405637618 647:0.195034172285376 671:0.0263720250203637 730:0.0415105588996052 755:0.0901409788609044 757:0.0410285140265406 799:0.0435647005046238 827:0.0368853572139963 959:0.0480087401758396 965:0.0431337935424688 966:0.0431337935424688 997:0.164271775194348 1021:0.0462330521481689 1045:0.0224327186981198 1059:0.0791698626629953 1066:0.0574936404699466 1080:0.0436626236699623 1111:0.0536202884979791 1126:0.0460512280855495 1140:0.350887454584941 1190:0.140196047373608 1223:0.0530639123181187 1232:0.0488922774733812 1245:0.0844577558996037 1424:0.0803121209388536 1433:0.0832683959156305 1603:0.312686116434352 1731:0.0536202884979791 1858:0.111199302933748 1931:0.0562927517018063 2399:0.0627815337065551 2401:0.58481598767127 2611:0.0523264258834798 2765:0.0655495509408836 3024:0.072576546849991 3592:0.0731546437244135 5815:0.0855936034861536 8188:0.179160680791546
+-1 1:0.36710531782266 3:0.0876400646969697 4:0.0743621509100802 32:0.257746746244219 47:0.0813688912181737 75:0.139366259006597 142:0.0847022913807267 162:0.0931094269372875 204:0.103204021047324 209:0.107994207150807 227:0.122198776709847 386:0.136918343366907 409:0.0877977727629217 506:0.0961773166100306 598:0.545060668157961 710:0.198116668917268 1081:0.191126929136582 1365:0.207911108821701 2367:0.296204838453505 3546:0.248966071589677 7361:0.323930993232294
+-1 4:0.0322972756946859 6:0.0448001890738746 11:0.033552858877195 15:0.0255815822796876 20:0.042119238233178 29:0.0271175921262821 40:0.0466533651098107 63:0.0968355272912537 75:0.0907951915306202 83:0.0386933739747849 142:0.0212984594244884 173:0.0558095683107185 180:0.0575390482726205 208:0.0559400608486447 218:0.0423539557175858 229:0.078204200839764 242:0.0523196586507249 278:0.0644607688625006 284:0.0453441513553877 304:0.113075573313092 314:0.178751693592 324:0.0791128447507929 339:0.0580768024835131 345:0.0547945119641966 346:0.0622081854944898 373:0.0533027863652975 375:0.0529320951536574 386:0.0594669388830339 389:0.0636343616739765 402:0.0569118382935562 408:0.0439671307223921 472:0.136056136127462 502:0.154618060636996 505:0.10741927785064 507:0.0399240491313741 508:0.173796046790609 513:0.111749421368346 527:0.0712157348310127 534:0.0569118382935562 586:0.0548875655345748 631:0.0501118029511694 671:0.0455993864432938 684:0.0698805876258782 856:0.0560384786160876 881:0.0850743884719633 886:0.0643124888965849 909:0.0657400394910809 1045:0.0387880038828798 1067:0.0794193930015578 1080:0.150992489072594 1305:0.0679103248707355 1314:0.0870677764803201 1353:0.107312370090773 1395:0.079730597859182 1446:0.0779305594902411 1610:0.10331102905977 1907:0.112289671421347 1917:0.185823613721084 1936:0.100534073433116 2138:0.116230844247016 2236:0.106524301425352 2422:0.237756076960645 2694:0.109426332282915 2807:0.202837105815886 2830:0.113340530438208 2968:0.113886889728341 3700:0.242230465356494 4188:0.124537713009602 6079:0.54126367449465 6297:0.135315918623663 7724:0.14526264308468 9593:0.159463329030095
+-1 1:0.35726148729325 2:0.113831239374655 3:0.142150033155887 4:0.241227165999033 7:0.173146349122477 31:0.106279819928369 63:0.0602717497426948 75:0.113024325159385 83:0.0722498472867626 142:0.0940002884508431 7754:0.595512874001171 7757:0.595512874001171
+-1 4:0.0440638291548079 5:0.0571925395334667 6:0.0203739359331279 11:0.320437927532182 20:0.114928264240118 30:0.122464509063695 51:0.0691866923208541 60:0.0773201474924862 63:0.110095563761425 75:0.0206456206270755 79:0.0690831053568759 82:0.0764096049655247 83:0.0791852339048155 114:0.0715308466863269 142:0.0316995499011255 144:0.0605636570804873 169:0.148510269830591 179:0.0555311514530717 187:0.0949890152454979 239:0.0863662966445206 304:0.154271301119985 339:0.0792353611085564 437:0.0916291966213504 518:0.0888391000839918 609:0.0721393318597018 647:0.460089768528935 784:0.100032922151343 804:0.0959636401997728 944:0.111470642436501 1164:0.10807397663126 1282:0.143299557750006 1510:0.156144030345477 1529:0.151177631104657 1603:0.590106569517428 2401:0.137959337713389 3673:0.174007071743487
+-1 1:0.138959614906904 2:0.132826619301066 3:0.165871060012678 5:0.18267411839092 20:0.183541590559877 23:0.234048690581128 30:0.195577049121036 31:0.124015070542705 63:0.0703294877720935 142:0.0253122495469387 2103:0.521163672885928 8499:0.694887995934876
+-1 1:0.117390617683376 2:0.224419143576254 24:0.221239661212802 31:0.104765731704199 45:0.241426550376077 48:0.168155553458192 54:0.205810606070738 142:0.0213833394059243 193:0.266610416680818 209:0.17266852410163 409:0.140377083570919 671:0.16786407745021 1045:0.142789475819633 5514:0.482475669960185 8427:0.587029052420791
+-1 1:0.640719938505345 2:0.306220852034844 3:0.38240209373903 4:0.162233119642686 5:0.105285040891522 31:0.071476637677331 44:0.324795798363633 66:0.175998593703172 75:0.152025073877375 142:0.170202989204337 143:0.165242869382393 144:0.111490889620804 229:0.196414576748428 269:0.200248215111837
+-1 1:0.150003108836763 2:0.107537030694775 4:0.265870149938224 5:0.0985958606786963 15:0.0300838249404096 20:0.148596100402646 21:0.0531188859419697 23:0.0631622922060186 26:0.190028686075292 29:0.0637803311314538 30:0.263900103322556 33:0.0485901079439915 40:0.0548641461462289 47:0.0415602350768134 63:0.0948984513934033 67:0.14900895456888 75:0.124570523192702 83:0.068254848915396 84:0.103068245064207 95:0.608037291158835 106:0.0614632620748181 142:0.0910796067436928 143:0.0773721641261498 170:0.261703707158495 186:0.0498278978984471 213:0.181306917798221 229:0.137951679177573 256:0.0597560305940486 267:0.0940099311820316 408:0.103410293337078 472:0.0800007000461641 478:0.0688598903315022 485:0.0607657866190781 508:0.0681277880549691 640:0.0819523180657096 781:0.0951544013070371 867:0.154372234912162 963:0.148999729481225 1059:0.0804916936565896 1337:0.113055901898806 1378:0.107679721264243 2807:0.119267759047682 3079:0.12921440746779
+-1 6:0.0277325415683477 18:0.0494838399747655 33:0.0511542869726019 98:0.239856249058303 142:0.0047943012866827 151:0.073005227783648 208:0.0692568533700952 286:0.051797474446104 318:0.446325880523899 346:0.0770171343372062 385:0.0967204574598832 439:0.0996332802717615 505:0.132990938199945 506:0.0517161783930411 510:0.083572988889743 586:0.0679538066351895 726:0.0851909739261685 764:0.0854965721631618 882:0.0694194458937948 1021:0.0989709881588125 1086:0.116552213659039 1198:0.110119745324794 1388:0.239210319685593 1393:0.105835744264882 1911:0.125191423671106 2223:0.117349064956757 2399:0.134396284483884 2410:0.129162695631201 2941:0.398575741646914 2976:0.124826462743754 3395:0.156601977187393 3610:0.40008258376828 4201:0.15094208675632 4871:0.313203954374785
+-1 1:0.327874620340587 2:0.0895439552268217 3:0.167730883116907 4:0.237198007664405 5:0.0615741150545279 20:0.43306560227476 21:0.0663465661143298 23:0.0788909842792505 26:0.0474699367682035 27:0.0638688850290185 30:0.263693266034174 31:0.0418018616394838 32:0.0822152317313136 44:0.0949755714977362 47:0.0519095767042859 63:0.189648145449384 75:0.266727618021537 83:0.113668921222886 106:0.076768861178757 142:0.127980311027706 169:0.0799438922971487 176:0.0568488499999393 179:0.0597854464336389 186:0.0622360552867952 189:0.0820711330478661 205:0.0867818833149982 227:0.0779571489524357 229:0.114869630525717 242:0.0768493225927138 256:0.223909483278836 267:0.117420311137289 298:0.108724469636033 375:0.0777488951739421 408:0.064580777082618 442:0.0933291950324102 684:0.102643556168444 829:0.0813608116919132 1164:0.116353628039188 1751:0.149413674246206 1835:0.147668689744292 2375:0.170724769142557 4960:0.198757731805178 8136:0.255085034072828
+-1 1:0.513608995441007 2:0.184102805389043 3:0.153269114488625 4:0.195072100771479 5:0.0843977857367844 7:0.186689985346946 15:0.0515033429189838 20:0.254395707016005 21:0.0909392407236365 23:0.108133497036343 30:0.632513736620238 47:0.0711508939835479 63:0.129972501682252 75:0.0609325859736389 83:0.0779012840850816 142:0.124742228844594 169:0.109576686357317 579:0.176515582838447 862:0.144647718307686
+-1 6:0.0158607393765865 15:0.054340325489667 30:0.0953363978131778 63:0.102848878041224 75:0.0321444819605507 83:0.0821923567156653 100:0.0980101892921359 142:0.0370162864691747 204:0.0952150058833095 218:0.0899681542097585 228:0.119954488598986 507:0.084806553439306 631:0.106447351593369 684:0.148440148677379 829:0.117661657827213 850:0.290783824276175 930:0.277733340141651 1366:0.171877118319928 1471:0.18369669600091 5532:0.321086129896054 8514:0.737793229240932
+-1 2:0.125949088785765 6:0.0308526512601767 15:0.0704693130162682 26:0.178051707023762 27:0.0299451736702606 32:0.462563151008445 48:0.0629151280496086 63:0.0222293165488344 88:0.0785293748179764 142:0.0160010836298244 176:0.106615212426478 193:0.199503711413297 209:0.0646036487084676 409:0.0525218585200684 420:0.104575945872694 441:0.145038371889785 565:0.218775758426509 1045:0.0534244511737892 1433:0.0991535714368674 2931:0.156108977731645 3564:0.175668217109261 9691:0.717585626477555
+-1 1:0.229315834550198 4:0.232255130435491 5:0.150727489917123 7:0.166706464146875 75:0.10882057695932 114:0.188515233990749 142:0.0765803982737074 187:0.250337822982581 339:0.208820017260836 829:0.199163413279783 1242:0.340807577165456 2874:0.513627694503834 4733:0.513627694503834
+-1 1:0.336665632243395 2:0.214537908709208 3:0.13395519105188 4:0.227320601978811 7:0.16316459280176 12:0.177137197063303 20:0.444677006842577 21:0.158959401649727 30:0.315890680126708 47:0.124369891858227 63:0.0567971288684814 83:0.0680846981312622 108:0.24324428269178 142:0.122650951543466 256:0.178821198896562 565:0.2794920598965 592:0.2588412210971 825:0.339979714967384
+-1 4:0.0667138482516084 6:0.0308466988957173 9:0.117985609530451 12:0.051986067174404 20:0.0870022751926384 29:0.0840218975354381 30:0.32447560626345 42:0.046138043636435 75:0.125032147953915 83:0.0799257468059842 84:0.0452594573296358 110:0.0744249450608786 142:0.0499937392507291 169:0.0562121574277799 205:0.0610202574156612 229:0.0403850098440405 307:0.074056945695095 345:0.0565922771746631 369:0.0689593063138011 370:0.0911975339634271 391:0.0798063484333197 400:0.203854571808469 415:0.0670943158739678 423:0.0584275776959416 485:0.10673419441166 539:0.0716459500939144 582:0.0650442209915052 631:0.103511864260702 853:0.163207968543337 882:0.0579110484622185 985:0.0988149866821516 1019:0.110833205274558 1060:0.585295724312094 1138:0.228133468438316 1175:0.081708475497298 1225:0.0687879739591552 1235:0.0903928959411726 1305:0.0701384096753571 1335:0.0828932823307116 1366:0.167137281245064 1491:0.0885781188636311 1551:0.0825635183027435 1595:0.0965856182063724 1743:0.114443543990698 1827:0.103832517989072 1929:0.106700583364451 2124:0.107750026378097 2200:0.111252217584398 2769:0.118799256160972 2823:0.111252217584398 3513:0.251837633924847 7604:0.164695196510962
+-1 2:0.0585825881161998 6:0.028700932710074 11:0.0644862241503278 26:0.062112774593203 29:0.0521180961262633 31:0.0546962938305126 32:0.322727383117702 48:0.0877909733609307 142:0.00744256985688347 193:0.278384953779022 221:0.136607347565725 276:0.111480130164925 420:0.145923951248494 671:0.0876387990085182 799:0.144773032349351 1045:0.149095605944639 1059:0.26309514252685 1235:0.168209923055106 5209:0.270398244995423 6222:0.270398244995423 9604:0.667539933783008
+-1 2:0.0776270421401405 6:0.0253541605061562 26:0.164609694649332 31:0.0241591210097492 32:0.237578860646397 48:0.0387769005988338 54:0.047460207228749 75:0.0128461280345186 88:0.0968010669549668 94:0.0380514502577935 134:0.136189035290321 142:0.0164367577036503 176:0.0657108651408176 221:0.0603388860475246 286:0.0710328772617228 345:0.046515501828771 355:0.0381486113991666 409:0.0323711474526893 420:0.0644539903810897 422:0.0577997668346004 478:0.0497074317004432 505:0.0911890887644292 506:0.0354606956373966 667:0.122102555498352 698:0.0712134520474221 1045:0.0658548968089135 1059:0.058104004314069 1731:0.472233251807487 1828:0.0863526861018032 1917:0.0788735799811466 2528:0.0729255020144603 2624:0.0804637853195388 2683:0.0897851217257256 4740:0.104207781640747 9870:0.737123894037362
+-1 1:0.100563651889752 2:0.19225053140848 24:0.189526801319163 31:0.0897484380011765 45:0.206820068316259 48:0.144051857593156 54:0.176309372525329 142:0.0244242881040436 193:0.22839403746547 209:0.147917931541242 671:0.143802162239479 1045:0.24464359116971 1094:0.242523238901256 1635:0.368533543770981 3087:0.405707011260025 7670:0.547666598271529
+-1 1:0.241361238923473 2:0.0769029126867778 3:0.0960347234051437 4:0.32593990518622 7:0.116975433472834 20:0.212530936757874 21:0.113960661398828 30:0.226467327275745 31:0.0718012714015802 40:0.117704923042563 47:0.0891628616311454 63:0.122156443171622 75:0.190894429704976 83:0.0488110621306653 95:0.372707536133796 142:0.0879305244863007 165:0.182906578370857 170:0.187152064841174 189:0.140970078056021 256:0.128199917003265 260:0.237515719514432 825:0.243737160418122 1925:0.345534964924249 5416:0.360404874014387
+-1 1:0.567566242869961 2:0.271258326817942 3:0.225827756731873 4:0.287420561312543 5:0.124352272078206 7:0.275070295381239 21:0.133990496389556 26:0.0958681174273866 31:0.0844211316291808 47:0.104834211585168 63:0.0478755922053541 66:0.207872123373236 75:0.179556973995828 142:0.149334289987281 143:0.195168526111837 176:0.114809342469076 238:0.218412922491236 269:0.236513376619371 298:0.219574975909368 386:0.176403123645013
+-1 1:0.316337576794485 3:0.12586690317638 4:0.106797429702377 5:0.277234926581926 7:0.153312625234797 20:0.278551443586037 142:0.0576226099234681 187:0.230224718839992 339:0.192042613414368 491:0.589322498558344 524:0.279108674130186 1017:0.290940968220187 1378:0.302777210052845
+-1 1:0.152467709936449 2:0.291477066585161 5:0.200431647096767 24:0.287347533882247 31:0.13607042460445 32:0.267621131018395 45:0.313566398917671 48:0.218401543963402 54:0.267308175112209 118:0.233770433993428 142:0.0370304300219138 209:0.224263020055736 384:0.386871279406501 409:0.182322683720289 895:0.371243370588497 1045:0.185455914713433
+-1 1:0.417041738379193 2:0.113895874924234 3:0.142230748656888 4:0.241364139386422 5:0.156638997887827 7:0.173244664923084 20:0.0786914179996562 21:0.0843898415774544 23:0.100345776053321 47:0.066026641783971 63:0.180917919576491 75:0.113088502527677 83:0.0722908721285551 95:0.689990948257557 142:0.130228149611243 170:0.138589342225444 213:0.144020923994938 284:0.0847165266473353 325:0.125266188803687 457:0.0961925060240231 472:0.127096912581275 1269:0.142506496508015
+-1 1:0.505966450303831 2:0.120908893419579 3:0.301976914296192 4:0.192169411472065 5:0.0831419395722965 7:0.0919560113157306 15:0.0507369688358434 21:0.0895860571576553 23:0.106524461487362 29:0.0537833982109371 44:0.256486129579493 47:0.0700921626847459 63:0.064019249951816 75:0.0600259039591845 83:0.0383710532063357 106:0.103659013393955 114:0.103985823697682 142:0.165128135017599 143:0.130489692976413 204:0.088901211810458 229:0.0775527498154348 339:0.115186030538507 430:0.230516278312334 631:0.0993887304093863 716:0.141795964273049 766:0.197166189629278 808:0.154562775866907 829:0.109859405746256 986:0.132424972796914 2007:0.199969590456744 3972:0.255154487348536 9015:0.327959399948876
+-1 1:0.181028466892857 2:0.346077517136792 15:0.145224422332791 24:0.341174426675841 45:0.372304696442547 48:0.259313245323925 54:0.317381228777295 142:0.0329753197154553 193:0.411140821488574 209:0.266272712552538 409:0.216475973354833 671:0.258863759190346 1045:0.220196131566342
+-1 15:0.0241721363934337 26:0.0916120073343523 27:0.0205433767210275 29:0.02562351805965 30:0.0424083659866372 33:0.039041801330793 63:0.0457501328069306 80:0.0459378361541719 81:0.0429568018366087 139:0.0577186314378883 141:0.064448077718736 142:0.034761358423809 145:0.0592053012611075 228:0.16007759798774 457:0.0486499063877405 502:0.0486997352202266 584:0.0992467146154934 608:0.0769862780426357 638:0.0861710684435986 662:0.073546638619741 702:0.084045218377705 778:0.0674228253831954 953:0.0770941250665961 1009:0.0628812641564038 1123:0.0801323992331777 1366:0.0764558752547345 1500:0.161031496420341 1632:0.105624934677132 2121:0.205146952443179 2178:0.20940585506433 2256:0.214191814306332 2412:0.103822844584922 3042:0.111672037122595 3667:0.127860536749172 5829:0.549036941206194 5845:0.129410042763876 6556:0.134979133497346 6811:0.156246609306162 8635:0.150677518572691 9772:0.532542255344933
+-1 2:0.116948673317133 6:0.0286478978766669 15:0.0490751426604633 26:0.123995999806511 27:0.0417079039644146 29:0.0520217900384623 32:0.107377011134726 48:0.087628749376997 134:0.102587491152825 142:0.0148576343043458 176:0.148494615192209 221:0.136354918559549 238:0.56499135315713 286:0.0802606977732729 373:0.10225488855528 420:0.145654306616288 507:0.0765894144187183 641:0.226682551512116 671:0.0874768562189802 853:0.151574248878117 1045:0.148820100590758 1081:0.15924653713067 1731:0.355720447234223 3691:0.439109875487045 6629:0.283916739030889
+-1 1:0.125438116038422 3:0.149730936482702 83:0.0761029530194742 144:0.174618660154147 754:0.358014511860844 1241:0.732536183450528 5393:0.510665192670508
+-1 4:0.0320492658222565 6:0.022228084840484 25:0.0556081607136089 26:0.0160348798566044 27:0.0647228520452704 30:0.0668047525610853 37:0.0350572150826082 41:0.0511761065899897 42:0.0221646699115026 57:0.027658285472666 67:0.020955964889809 75:0.0300326592688057 80:0.024121543835935 81:0.0676686887302958 83:0.0287971864825562 87:0.0345129088339946 92:0.0244563658172564 94:0.0222398966678026 132:0.0224689760877959 139:0.0909225998612535 142:0.0220955868418825 159:0.0222871976794071 160:0.0335785803404007 162:0.0200645673770216 176:0.01920298491625 199:0.0692682981611349 204:0.0222398966678026 215:0.0236012849001203 218:0.0210143604409386 227:0.0526663232571661 229:0.0776036729792391 239:0.0314087138173974 242:0.0259589487311263 262:0.0346719882786547 264:0.0304971444251497 291:0.0298185427025883 295:0.031455342197562 299:0.030668709156909 303:0.099301414627421 317:0.0441613999575584 337:0.0283228991970774 347:0.0304335469139305 351:0.0262908955841059 355:0.044593368704198 377:0.0285135521168082 414:0.0273728229645197 424:0.0381565536125362 426:0.0333507843862257 434:0.0320569952434405 437:0.0333226655050818 438:0.0413092688599285 455:0.0270496097400372 465:0.0315021854558133 478:0.0290524575844067 480:0.0272484792849505 493:0.0330730357119138 506:0.0207256806613454 507:0.0198087367400274 508:0.0287435786385643 534:0.0282374069433288 538:0.0324616245468188 571:0.0292386343831343 622:0.0408869245311967 631:0.024863497912284 643:0.0301419089459713 671:0.0226246150181234 709:0.0646159897724468 710:0.0853860963977146 729:0.0398752092747814 772:0.034325242536601 778:0.0708062361738229 819:0.0372082846462382 829:0.0274828855763192 906:0.0433490802688531 913:0.0386660664569746 915:0.045903683654535 981:0.0439700347672584 1003:0.0391525214311753 1055:0.0808496018113935 1081:0.0823735957435782 1146:0.0424145384741911 1241:0.0923966821394642 1305:0.0336944216972472 1308:0.0432740617065757 1358:0.049598659144821 1462:0.13657092164434 1565:0.0557137010950544 1613:0.0849669075651532 1734:0.0512588532854527 1844:0.240859654738478 1846:0.0486678814564976 1855:0.0479327441697535 1973:0.0586379804582108 2034:0.0498810375542348 2114:0.106093552933023 2137:0.052293471223096 2233:0.0562350958450556 3114:0.0627595207336113 3378:0.181473820321352 3708:0.11596389677643 3969:0.0562350958450556 4107:0.0638305071145278 4234:0.0589825886817935 4407:0.0650277680267718 4614:0.0734309301387665 8273:0.0791194073038855 8945:0.656349493336335 9769:0.372844186323997 9770:0.279633139742998
+-1 1:0.410577523561598 2:0.196228323071516 3:0.245045760583633 4:0.207920086451346 5:0.134934684436894 7:0.149239426368856 21:0.145393124272767 44:0.208131270062294 47:0.113755631658575 75:0.292255982375616 114:0.168763134210458 142:0.087253750177734 187:0.224108124970083 204:0.144281658852457 339:0.186940438991525 829:0.178295627009106 7994:0.558998185304174
+-1 1:0.356810482263835 2:0.227375078829148 3:0.141970583698934 4:0.120461321044385 5:0.0781762388588609 7:0.172927770078677 15:0.0477066738530492 21:0.0842354777722079 23:0.100162226048457 26:0.180807524986096 47:0.0659058674883579 48:0.0851852066045428 75:0.0846612328826857 83:0.036079319729078 134:0.199453642577926 142:0.0830491280201402 176:0.144353817265946 298:0.138039663266657 561:0.123393517548665 723:0.142910302240305 986:0.124515814250973 1140:0.141431161877099 1731:0.172900560641016 6392:0.266397863801328 9880:0.647726354989869
+-1 1:0.233602625420282 2:0.0558231379225124 3:0.139421497124059 4:0.118298433999297 5:0.230317745632659 15:0.0468500989296929 21:0.0827230269537152 23:0.29509142979721 47:0.0647225254350749 63:0.295574239303831 68:0.0839474083043343 75:0.304850837928839 83:0.106294543012788 142:0.109925970551473 189:0.409315685730673 213:0.282352628108622 256:0.186118351009047 455:0.199687973527078 1269:0.419075395735599 2000:0.217713189218683
+-1 2:0.0838763560557351 4:0.0888739144755187 6:0.0205464603778419 26:0.177861489733276 29:0.037310369242842 31:0.039156052709359 63:0.133233410335143 75:0.0832817826820439 83:0.0266185888394459 142:0.0532799641804331 169:0.149767839890737 218:0.116547348257115 228:0.310785025669312 286:0.115126998413355 433:0.0830768331497841 457:0.0708390614719942 507:0.164791292068728 609:0.0727502004818464 636:0.210135684807981 643:0.0835847364694643 644:0.0978890743288587 826:0.2678406047133 850:0.0941724433860156 1155:0.119589219808105 1296:0.104583918559689 1548:0.113055225672495 6410:0.186177550896566 7502:0.682531415777956 7528:0.227510471925985
+-1 4:0.118165734492236 6:0.0218546699205613 9:0.0417959886142345 12:0.0736635283020489 20:0.246562008220197 25:0.0410054894294815 27:0.0159088893388432 29:0.0198429751261667 30:0.0985237252888427 34:0.043542697932166 41:0.0251581934604343 46:0.0914989572969559 75:0.0332191501134701 83:0.0566268313022518 84:0.0320660082320915 100:0.033762302705026 106:0.0382442034679943 114:0.076729555280777 120:0.0455200989698035 132:0.0662745431343788 139:0.0446975846670311 142:0.0524219164004309 162:0.0295912468575579 166:0.0407667692904383 176:0.141602920307536 185:0.0318162568607533 190:0.0468452215905071 204:0.0983982749317392 205:0.129697273811569 229:0.0286124963602722 264:0.0899544467795212 275:0.0367409624927246 294:0.052212558942927 317:0.130258566074644 331:0.0427111738319218 348:0.0542798493877231 370:0.0646128134837986 373:0.0390036792011809 400:0.433288605085389 411:0.0818669468001985 471:0.0569548692473586 507:0.0876418426267918 549:0.0583419155633955 572:0.059207796033209 586:0.0401633224869857 609:0.0386911319260629 730:0.0525206103563591 739:0.111628081106615 758:0.0572364044314159 856:0.0410054894294815 865:0.0810824486247761 876:0.0527295518285503 904:0.0665980312278889 951:0.0712235574849356 1032:0.0721549941492133 1138:0.0538769876954796 1140:0.110988768699556 1242:0.0693578266293 1246:0.307428524823871 1355:0.0758403817780442 1482:0.19418843384311 1664:0.0648470574363558 1808:0.0549356373925145 1865:0.0648470574363558 1886:0.0941373047112008 1972:0.079433391329452 2151:0.0833353754106266 2426:0.166670750821253 2456:0.0771224710169126 2723:0.0712235574849356 2823:0.157642832476641 2837:0.0821666299339208 3109:0.10021575701127 3513:0.0892125990792295 3556:0.0949941840952119 3672:0.106294209311338 4126:0.179649148340722 7218:0.120998122693087 9759:0.412403273502194
+-1 1:0.110499995434587 2:0.211246135594035 24:0.208253283238548 31:0.0986161679993832 45:0.227255237605948 48:0.158285118999438 54:0.193729886425385 129:0.266802338659814 142:0.00670939169688425 165:0.251214853284837 209:0.162533186224379 409:0.132137196309376 414:0.1911723289339 1045:0.134407985387157 6766:0.487521857291387 7102:0.552571482223775
+-1 1:0.403802129922117 2:0.275700203668412 3:0.275430845225606 4:0.233701676838968 5:0.0758331303022479 7:0.16774475611354 20:0.0761932422360105 21:0.0817107609065784 23:0.0971601505798834 47:0.063930528123135 63:0.0875872059592754 74:0.110729533593063 75:0.109498340304868 83:0.0349979455927934 95:0.534468929879722 142:0.108580827224572 170:0.134189618028725 189:0.10107674176008 213:0.13944876617992 518:0.117794158251385 1085:0.194126906189056 2419:0.205031782460723 9637:0.314156307563135
+-1 2:0.0693547794653597 6:0.045304629983435 18:0.121257209045797 26:0.122556830235079 27:0.0329790542508086 29:0.16453758379864 31:0.0215846239082924 32:0.127356877434664 75:0.022954381675638 88:0.0432427699522102 134:0.243352322792578 142:0.0190907443656748 154:0.0409374542744044 176:0.176125320558729 192:0.0457342471869444 193:0.0549290830167316 238:0.335060241271734 252:0.122609833749796 284:0.0343910378762221 286:0.0951949746143161 349:0.0561404850090618 382:0.0497405134921152 386:0.090204786565772 406:0.0530989164837588 408:0.0333466436747622 433:0.045795785707517 506:0.0316818554181154 524:0.0640180480387135 528:0.0592519332331473 533:0.212783337498485 574:0.0424026488061703 594:0.108447802342198 655:0.0428807928745593 781:0.0613687440983858 867:0.0497803046947434 916:0.0686215614271013 952:0.0527573982058178 1500:0.129254954739244 1863:0.0682248133339169 1917:0.0704684810141335 2142:0.294547846497073 2528:0.0651542551432372 4763:0.102629661015571 8111:0.12541427523788 9658:0.263429154068839 9752:0.427455042283577 9753:0.427455042283577
+-1 2:0.0558802518956255 6:0.0273769971769962 26:0.0592475956050257 32:0.513067336278093 48:0.0837412935024351 83:0.106403295474538 142:0.0212977622734167 169:0.19955718184507 193:0.265543429222822 196:0.254579737431283 221:0.130305833836232 227:0.0972989211721138 286:0.0767001092304327 373:0.0977185763284932 387:0.0966268265764726 409:0.0699076439319077 426:0.12322847468119 441:0.0965244866064718 456:0.296674655027817 510:0.123752315052094 576:0.133998788216954 626:0.129191983800531 852:0.135845147461683 883:0.159619031985231 1045:0.071109012802504 1106:0.175400137342915 1114:0.167523297240714 1216:0.146553199429123 1253:0.167523297240714 1283:0.169610431151733 1980:0.169969847729438 3718:0.219253922692296 5445:0.231891397880273
+-1 1:0.494363284479663 2:0.315029676442309 3:0.19670118324888 4:0.333799914993681 5:0.216627392588518 7:0.239592569846717 15:0.132195824673976 142:0.110062285323965 144:0.229396127991379 187:0.359788581955559 524:0.436183024059152
+-1 2:0.095283251812169 4:0.0252401152443872 5:0.0327603459942691 6:0.011670354138476 15:0.0199918436148262 18:0.0312355397654738 20:0.131663665636805 26:0.101025020106274 29:0.0635766765799009 30:0.0350743271908507 31:0.0444811411191643 63:0.0756763478036754 75:0.0709558638794456 83:0.0302386253116214 114:0.0409734434914512 142:0.0302629279708703 169:0.127601813008464 215:0.0371739654879064 218:0.132397386513121 227:0.0414768960974416 228:0.0441313399461214 229:0.0305580424251637 234:0.0418594599954472 286:0.0326959684947139 308:0.043114448238555 339:0.0453866512323381 348:0.0579706824436539 377:0.0898223810113359 408:0.0687200652394842 411:0.131150403762705 457:0.0402364650169625 461:0.0638512792789407 510:0.052753533661015 537:0.0652607515322835 586:0.0857885657398939 608:0.0636723873332929 609:0.0413219886858901 631:0.0391620548292761 636:0.238713414743205 643:0.0474759864828987 644:0.166802477316831 826:0.0760665012898947 873:0.0674689924384687 993:0.0641234217386522 1064:0.108130162134784 1155:0.135852942126202 1265:0.0749490248968663 1296:0.118806971549939 1576:0.129363979740863 1936:0.157133476112789 1980:0.072455291683053 2010:0.0855159817100557 2246:0.0739044809154693 2461:0.199345296511288 2666:0.0787938434609012 2753:0.0829487896444386 3287:0.0988514086272023 3784:0.0988514086272023 4321:0.386454909311926 5600:0.113521830349451 8187:0.242093799726107 8420:0.249239151934754 8422:0.498478303869508 8963:0.129225556556274
+-1 1:0.370362882717258 2:0.118005627411696 3:0.147362920243216 4:0.18755503692688 5:0.0811455341784261 7:0.179495924620423 15:0.0495186720439525 20:0.163061746689995 23:0.103966594656416 30:0.521262812611629 63:0.0624820188435111 75:0.146461402824127 83:0.0374496869502237 142:0.071211591709307 7533:0.640168868674195
+-1 1:0.470561871195563 2:0.224896789490832 3:0.280846332328455 4:0.119148345105416 5:0.0773241519007333 7:0.17104293269416 15:0.0471866918841133 20:0.621530754485233 23:0.0990705014047709 44:0.238538727218293 66:0.129258077677352 142:0.135716056100286 144:0.0818818933021011 9668:0.320333209901336
+-1 2:0.0170042308283903 4:0.0180173844862805 6:0.0208268915938028 26:0.090144528480002 27:0.0121285826724353 29:0.0151278419981952 31:0.0158761918115787 37:0.0788335466608964 41:0.0191800459966105 42:0.0249209689870467 47:0.0197150644562842 63:0.0270103730053197 68:0.0255711370119228 72:0.0518442612596519 75:0.0168836931302106 83:0.0215855170747372 84:0.024446410024887 132:0.0505262346328977 142:0.0108014326331777 144:0.0247640460769016 159:0.0501174675187419 169:0.0607247868154703 179:0.0908251621238594 186:0.0236370226725954 193:0.0404021242951901 215:0.026536234981109 218:0.0236276121829124 228:0.0945080454671265 229:0.0218135295418147 234:0.0597618495655456 242:0.029187087326259 286:0.0233396650457678 299:0.0344825324637676 309:0.0306543606962873 339:0.0323987722670799 341:0.0348031090530183 377:0.0320593697470202 381:0.120121628445531 386:0.0331742748895089 408:0.0490550786061646 411:0.031206767840849 414:0.0923303538798969 434:0.0360434595899436 466:0.0384897172193701 502:0.0287517856857315 507:0.0222720625184952 508:0.064636002673485 518:0.0363256724240858 528:0.043581721007189 534:0.0317488843966099 538:0.0364984067811719 550:0.0339364932145738 584:0.0585941639258126 586:0.0306196219489518 609:0.0294972566758378 626:0.0393128205260266 631:0.0279554111500649 678:0.0450770919190148 695:0.0822359773669874 702:0.049619368478674 789:0.0428003891193542 819:0.0836706805409173 829:0.0309005341318693 876:0.0401998351369222 904:0.0507728547458496 950:0.0453885291473069 966:0.0416062937455332 987:0.0340062535882736 1000:0.0505723401453175 1001:0.0488247523919799 1009:0.0371244037056262 1124:0.0463086035811409 1127:0.0960043289048994 1175:0.0882679118296646 1227:0.0455155197768536 1268:0.0564105861594994 1284:0.0583953930187883 1301:0.0547200012129762 1308:0.0486554301976522 1333:0.0592121003103501 1351:0.0553062342787818 1412:0.0522845505270048 1545:0.053247565286627 1548:0.0458393102440798 1612:0.0607988674635277 1675:0.0615527036546824 1679:0.0600916910566948 1751:0.113493517205699 1785:0.0632282404896515 1855:0.0538934455459025 2076:0.051943359844683 2086:0.0620843827311113 2190:0.064168142927799 2209:0.213450740101563 2424:0.0583953930187883 2569:0.0626420074238459 2705:0.0610446627233383 2722:0.0574503061672725 3103:0.0600916910566948 3119:0.0675654422044131 3265:0.0717681830850586 3699:0.0632282404896515 3982:0.0754874484152828 4960:0.0754874484152828 6373:0.0796901892959283 7550:0.252972797579301 8799:0.0922462720706368 8996:0.44479171211803 9733:0.628814129072071
+-1 1:0.380114724197607 2:0.121112775093086 3:0.151243060250092 4:0.192493455635398 5:0.166564274032003 20:0.669420978857279 21:0.0897371209441115 23:0.106704087525308 30:0.267493962673363 47:0.0702103550444947 54:0.111070264539832 63:0.128254403820171 66:0.139217678706258 75:0.12025424433817 83:0.0768715121878907 142:0.111553275585478 213:0.306293336577829 229:0.155367045063472 256:0.10094967259698
+-1 1:0.380535259019227 2:0.242493533171452 3:0.15141038597918 4:0.256941890914113 7:0.184425954531932 21:0.179672800806079 47:0.14057606265628 63:0.0641981481789339 75:0.120387286006836 83:0.153913115906615 142:0.107825770673007 189:0.222256421148126 227:0.211115361584864 256:0.202122713823774 8969:0.657751728439142
+-1 1:0.116214607095247 2:0.222170929074681 24:0.219023298532082 45:0.478015913844026 48:0.166470983471068 54:0.203748810531498 129:0.28060027366968 142:0.0070563742273012 204:0.163356592432398 209:0.170938743505981 409:0.138970796255392 626:0.256823315002021 1045:0.141359021335697 1573:0.351212640713274 4185:0.477642264126017
+-1 1:0.433119043060913 2:0.0920007319044712 3:0.229777118520915 4:0.0974823605060991 5:0.0632634959784516 7:0.139940414717137 12:0.0759621079341254 20:0.635639179679247 21:0.0681668866022837 31:0.0429487602603686 44:0.195162745909617 47:0.0533337960954296 63:0.0974257175789946 75:0.0456742836799314 108:0.104310945202485 142:0.140257758375292 256:0.0766842618980587 270:0.127781099746066 524:0.127382149868971 565:0.119855153929086 592:0.110999412324178 640:0.105168515365373 709:0.0982693214314101 829:0.167186142381965 2040:0.153513069110775 2807:0.153055013525579 8430:0.240652832068002
+-1 1:0.12567466067229 2:0.240255995529239 5:0.165209927055202 24:0.236852142861745 31:0.112158859386204 32:0.220592247653554 45:0.258463584182093 48:0.180021985896852 54:0.220334287280621 142:0.0305230971823003 186:0.166985983396262 221:0.280123628380085 409:0.150283239768993 959:0.327151512092508 1045:0.152865870163556 1081:0.327151512092508 3979:0.516523102965741
+-1 1:0.425839785180246 2:0.152641989906416 3:0.254154765075953 4:0.215649030616787 5:0.0699752832735749 15:0.0427020801414365 21:0.0753988872429242 23:0.0896548649994077 26:0.107893463654074 44:0.21586806448581 47:0.0589921159447773 63:0.134702328734005 75:0.101039972242743 83:0.0645889506891761 95:0.493183053636246 142:0.155138065354002 169:0.0908514317182018 170:0.123823934163173 189:0.0932689130574094 227:0.0885936172418578 229:0.1305424353797 408:0.0733921740715537 940:0.170313937152272 4983:0.252318062646353 8256:0.266184311095965 8920:0.276022570939649
+-1 1:0.529135965380259 3:0.210536813225088 4:0.267959129160353 5:0.115932299286527 7:0.256445107725218 15:0.0707471281789552 23:0.14853665687881 63:0.178535619536737 75:0.209248818903525 83:0.0535042175722641 142:0.144577490470218 4928:0.40929669970275 8614:0.480276403281748
+-1 1:0.430667901584595 2:0.228700185251224 3:0.22847674571455 4:0.193861361273697 5:0.125810940416736 7:0.13914845287611 15:0.0383877607136017 20:0.12640838405201 21:0.0677811111769376 23:0.161193529355394 24:0.180368040615372 30:0.404092260423974 44:0.194058265492985 45:0.196825621613914 47:0.0530319652667154 48:0.068545322139764 63:0.0726557687009009 75:0.27249480101085 83:0.0580633349847696 142:0.119125500510779 204:0.0672629548913484 221:0.10666010737863 256:0.076250284270128 409:0.0572219722544075 640:0.104573337401843 658:0.103627317780467 799:0.113035700136718 1045:0.0582053367666993 1269:0.114459850885965 1380:0.115401729728582 7491:0.248135181463972 7494:0.248135181463972
+-1 1:0.238834828370296 2:0.136976298523985 3:0.114035394171947 4:0.0967584542506391 5:0.251174799197995 7:0.0694506069863604 15:0.153278213436149 20:0.12618378169671 21:0.0676606777315667 26:0.0484101632038732 44:0.0968567314306228 47:0.0529377380966239 54:0.167491207552109 75:0.0906702107936513 95:0.221283767406551 142:0.0696081005147788 170:0.222231696281576 187:0.104291779246583 205:0.0885007526960212 229:0.0585724138213237 267:0.119746029015426 408:0.131719828221747 940:0.152834568734774 1001:0.131101369741415 8122:0.696053334692213 8414:0.238865738591564
+-1 1:0.422963233837085 2:0.101073927984157 3:0.126218973746345 4:0.321288479392201 15:0.0848272544593149 20:0.139665299048966 21:0.149779134246399 47:0.117187247407304 63:0.160550896039755 75:0.100357446377423 83:0.0641526517821125 95:0.489851597946258 142:0.109147158709283 170:0.245975004885548 189:0.185277761524955 229:0.129660620126877 267:0.265079469445028 408:0.145792818632478 3118:0.36587209378717
+-1 1:0.305722910592935 2:0.0974099337761959 3:0.12164345562842 4:0.206427711707908 5:0.0669830861792536 20:0.4038070292467 21:0.0721747726589032 23:0.0858211538089266 30:0.28685737095879 47:0.0564695675582604 63:0.206307765188703 83:0.0927406159970723 142:0.0928151512501099 169:0.173933108823498 227:0.0848052858241757 256:0.162385857558669 276:0.185366888796163 304:0.18068034646125 375:0.0845787380162268 496:0.100046166510222 579:0.140093231049019 1043:0.266869375846916 1164:0.126574699243601 1808:0.119961149978055 7541:0.494994462309817
+-1 1:0.600821600119667 2:0.382869521721198 3:0.239059661943576 4:0.304261368121325 5:0.131638433446547 7:0.291187464181535 15:0.0803317210271356 23:0.168659924294162 75:0.380155478885789 83:0.0607527964798551 142:0.121603246506857 143:0.206604017812204
+-1 6:0.01611924992673 12:0.0543316749921877 15:0.0276130029902904 20:0.136391717904601 27:0.0234676949358307 29:0.0292709866139542 30:0.0968902638759268 54:0.0603469353054581 63:0.0696834588631081 75:0.0490025962395166 83:0.0417659955349411 84:0.0473015609683836 108:0.074608097734519 142:0.0229897594819205 172:0.0632043419146737 199:0.0376737250893859 218:0.0914345245023372 234:0.0578168485256169 264:0.0663472939619029 294:0.0770203613208859 360:0.0992416273248664 369:0.0720707455280033 377:0.0620319397061917 408:0.0474585386798337 508:0.0625323681084457 518:0.0702868440452484 565:0.0857260474533026 592:0.158784008467775 609:0.114148971863909 784:0.0791430619174953 825:0.312836620717388 930:0.0705650130241954 1129:0.0939817852556373 1205:0.111514906434171 1363:0.0912519228549649 2244:0.111514906434171 2376:0.11187449390565 3038:0.132503008819358 4046:0.156797877239192 4856:0.292122576683299 5157:0.142896735930505 5565:0.14606128834165 7477:0.713952299419555
+-1 1:0.282176267326351 3:0.112274530513054 4:0.0952643703566187 7:0.136756387784004 31:0.0839431171456993 83:0.0570651831988349 142:0.0628221508779986 308:0.16272789267998 491:0.525681534832859 2512:0.341031673835233 5645:0.456870207898072 9922:0.487739107374108
+-1 1:0.198778991378883 3:0.237275283400545 5:0.261311727361225 23:0.334802040711135 63:0.201209893290164 142:0.0482782323755665 4841:0.825224162439267
+-1 1:0.176377819502735 4:0.17863857310546 30:0.248240853947802 63:0.0892673868468657 75:0.167398262041192 142:0.0535469650035748 7465:0.914602362487435
+-1 1:0.531825593676768 2:0.338902280892632 3:0.211606983856751 4:0.269321180699563 5:0.116521589777141 7:0.257748632836658 15:0.0711067398672481 66:0.194782048457999 75:0.168249954069263 142:0.134548505649703 143:0.182878419163186 269:0.221619711378629 9856:0.482717675636924
+-1 1:0.383875384624896 2:0.183466504303359 3:0.152739381637761 4:0.129598591540659 5:0.0841060878314748 7:0.186044742380053 20:0.760549373118664 23:0.107759763124914 63:0.0323808218033604 75:0.121443978250348 83:0.0388160197820741 142:0.0971180401452745 478:0.117480306869281 2224:0.221373521368784 4047:0.239952096292677
+-1 1:0.325552556235419 2:0.207456175803504 3:0.129533432258437 4:0.109908461053835 5:0.0713277094212556 7:0.157778653911789 12:0.0856450165763345 20:0.788330689034424 21:0.0768561364578319 23:0.0913876423176208 31:0.0484234493284752 47:0.0601322682439658 63:0.027461149459709 75:0.0257481979454298 83:0.0329186370605313 108:0.11760748712644 117:0.131163793893117 142:0.0889517528124492 185:0.0739824417604048 263:0.181916478138237 485:0.0879202096494531 856:0.095350193042843 1080:0.128457832338065 2807:0.172564973866404
+-1 1:0.0619633132630888 2:0.118457113269102 21:0.0877694387891749 24:0.116778859371228 47:0.0686708398331826 48:0.0887590119336563 54:0.108634806669335 129:0.14961047577137 142:0.0225739089608331 208:0.108698348963661 209:0.0911411325770685 227:0.206258005919061 472:0.132186818704439 603:0.310669124705288 671:0.0886051596109779 1045:0.150739628012659 1946:0.404102491064607 2262:0.243843865334251 2887:0.495656223300401 5218:0.487687730668502
+-1 1:0.0697449228848288 2:0.13333344837508 21:0.0987918885809845 24:0.131444432398942 47:0.0772948084339253 48:0.099905736421201 54:0.122277615814235 129:0.168399179222919 142:0.0254088339820963 208:0.122349138013167 209:0.102587013645221 227:0.116080370461507 472:0.148787387107395 603:0.174842120314561 671:0.0997325626863606 1045:0.16967013508126 2262:0.274466788298857 2887:0.557902785551412 4004:0.268483427114122 5218:0.548933576597714
+-1 2:0.0850650405811069 6:0.0104188210362753 15:0.0356958217953922 18:0.0557716578137075 27:0.0303371080889898 32:0.156205787557493 48:0.127477172855348 129:0.107436529910525 142:0.0243157683253499 176:0.0540053175000425 193:0.202114895840814 199:0.0487014968140983 221:0.0991805751335724 238:0.410958166698969 286:0.175137844308094 373:0.0743772117960155 409:0.0532092856265635 448:0.094353506225766 538:0.182586233115729 546:0.0900160500412235 772:0.0965342434803677 853:0.110250670368048 895:0.216688281891644 952:0.097062024865345 1010:0.116002964479729 1045:0.162371075322613 1081:0.115831268189655 1433:0.100451333066636 8962:0.69220415992383
+-1 1:0.154544675628249 2:0.295447663818479 24:0.291261877252038 45:0.317837904359216 48:0.221376682201113 54:0.27094953569326 142:0.0375348708162314 193:0.35099244878481 209:0.22731800526401 409:0.18480634376268 671:0.220992954216748 1045:0.187982256667161 3118:0.5347375803122
+-1 6:0.0275501976564504 29:0.0333523156259065 30:0.110399922779737 31:0.035002200598101 51:0.0623707680535839 53:0.0707246194242405 56:0.254346518936972 77:0.138496377266053 83:0.095179071609939 141:0.0838874905684047 142:0.0404836158218981 229:0.0480922343239992 293:0.086919511645783 317:0.109470096623025 355:0.110540888320712 387:0.0648254239106064 408:0.0540758048941035 414:0.0678535005151727 455:0.067052298946655 507:0.0982063216743534 586:0.0675070043506015 684:0.171894274666314 829:0.0681263307415663 853:0.0971775901137774 856:0.0689225288622854 1045:0.0477059224866385 1308:0.107270505936006 1924:0.126660547110714 1990:0.122267264732554 2026:0.110635173085611 2858:0.138106677957751 5247:0.153170720035985 9041:0.813500506359117
+-1 1:0.125022169937389 2:0.239008609538707 24:0.235622429346449 32:0.219446953948243 48:0.179087329083395 54:0.219190332880723 73:0.31810409537183 142:0.0227734681509809 166:0.218425352566994 208:0.219318540929988 209:0.183893687494663 1045:0.304144410575342 2173:0.411794858242267 2887:0.500037952432258
+-1 1:0.113474009526038 2:0.108465823498276 5:0.149171143460199 24:0.213858244546525 45:0.233371620474003 48:0.162545229350755 54:0.198943962768994 63:0.114861702383941 106:0.185982353039606 129:0.273983098366508 139:0.217365279381969 142:0.0551197544819347 176:0.137723586467764 178:0.214431159407493 189:0.198827782599599 208:0.199060328381676 221:0.252928880851786 455:0.193999489256422 472:0.242074988165934 856:0.199410543823142 1045:0.138025462844716 7341:0.500643096507488
+-1 1:0.104621737082782 2:0.200008493855153 5:0.137534085704884 24:0.197174851998138 31:0.0933700925503712 32:0.183638802070772 45:0.21516596110241 48:0.14986483971286 54:0.183424055023353 142:0.0190574183646649 221:0.233197531167221 409:0.125107905722216 959:0.272347339561378 1045:0.127257895836981 3044:0.397361764502737 3793:0.411717311821775 7267:0.508177621292157
+-1 2:0.113001096711734 6:0.013840447209566 31:0.0527523739362245 32:0.103752523869584 48:0.169341720640582 68:0.254898315220075 129:0.142719566391281 142:0.0179451476800869 176:0.0717411061474957 193:0.134245541621846 221:0.263504576875108 238:0.272960097487694 286:0.0775515156690552 373:0.0988032974050845 409:0.141367301772263 448:0.125339970559857 772:0.128236879792213 895:0.287850488650394 952:0.128937988907298 1045:0.143796711005892 2683:0.196049281481457 2686:0.633310245317412 4061:0.253864441700165
+-1 6:0.0267118985364108 12:0.0200078539124402 13:0.0197258376879618 17:0.0323458098969667 26:0.128462734373184 27:0.0345682854066492 29:0.0323374693010586 30:0.0535203335470349 32:0.0667470457791126 33:0.0328477676654574 37:0.0140429667989242 40:0.0185445639249488 42:0.0177571277663045 50:0.0281720708465033 63:0.051322417917249 64:0.0514842544262747 65:0.0212335673510928 72:0.0369409861878091 75:0.0360907992264738 80:0.0193248686998458 81:0.0180708240691126 83:0.0384512320525222 88:0.0226633001982679 94:0.0178173953510868 129:0.0306052295603853 135:0.027040940217908 139:0.0242807469278392 141:0.0271116522705201 142:0.0200107102780804 144:0.0176453142904178 145:0.0249061507678745 176:0.0307687737298816 181:0.025051901776501 185:0.0345666320353498 188:0.0328038644701404 189:0.0444200387959914 199:0.0138734980659854 206:0.0283080275973104 209:0.0372887696604529 213:0.0306416664007051 218:0.0168355623957778 227:0.0210966965624347 228:0.0224468457222478 229:0.0466288808403951 234:0.0212912828316918 238:0.0585344158174682 242:0.0415937950926432 252:0.0214197153466524 254:0.0286438945885988 258:0.0281451497633891 298:0.0294229224085979 308:0.0438592333336001 314:0.023684409479054 317:0.0353797112484079 326:0.0346091636250031 337:0.0226907660598033 346:0.0494551108946713 369:0.0530806734043183 387:0.0209509706327462 408:0.0349535886364828 414:0.0219296166668001 423:0.0449739902453604 431:0.0330947389700443 433:0.0480026436998381 437:0.0266963068365159 438:0.0330947389700443 454:0.0296137972455159 457:0.0204657670432632 474:0.0799239474806446 506:0.0166042878606617 507:0.0317393645460259 534:0.0226222743169123 565:0.0947068667135636 569:0.0416089139767062 574:0.0222229972815802 598:0.0627337405160772 599:0.0278288529112293 603:0.0317761835523445 607:0.0291144150547095 609:0.042035809748857 630:0.0410658047504545 631:0.0398385638864441 643:0.0241480577157688 647:0.0268095718087482 663:0.027777310839011 684:0.0555546216780221 755:0.0309771489960516 778:0.0283630522676362 780:0.0301115256639814 795:0.0351625280096756 827:0.0253514710097322 834:0.0299087694590225 837:0.0322071634912243 853:0.0314068881283734 873:0.0343172463412798 963:0.0251816095050499 1025:0.0361775687474548 1047:0.301029916474248 1059:0.027206900376497 1094:0.0305689550227874 1112:0.0357562530630238 1145:0.0389900590709858 1175:0.0314471036186222 1207:0.0338167982455458 1237:0.0363966928252775 1271:0.0378518908902668 1366:0.032163024520156 1377:0.0283080275973104 1433:0.0286153704955986 1497:0.0360346945525345 1551:0.0317761835523445 1792:0.0350362678026172 1836:0.031651215060766 2024:0.0289052096359912 2251:0.0428175901322961 2335:0.0877172331241043 2423:0.0383069601214731 2528:0.0341469902399315 2642:0.0411982242571075 2736:0.116366915435003 2752:0.0531841391565551 2804:0.116366915435003 2873:0.0428175901322961 3187:0.150838541607212 3565:0.0511375298953793 3773:0.0526222874128801 3785:0.253486134893458 5419:0.0537876463374769 5516:0.0506972269786915 5526:0.405577815829532 5570:0.0982826913767035 6391:0.0567822572944217 7543:0.0615689686671557 8113:0.0615689686671557 8224:0.063386165004888 8234:0.0600842111496548 8235:0.360505266897929 8245:0.063386165004888 8737:0.0657289385486973 8745:0.0657289385486973 8867:0.0615689686671557 9734:0.52272933862081
+-1 1:0.456377392510677 2:0.2492772191947 3:0.311292094931046 4:0.132064882770322 5:0.0857066461733064 7:0.189585216940788 15:0.0523020687067138 20:0.430568224408718 21:0.0923495475613269 23:0.109810456388985 30:0.367041660773532 44:0.132199020550365 47:0.072254318550262 75:0.123755085299379 83:0.0395546976335916 142:0.138552706536963 143:0.134514951211451 176:0.0791294242392182 238:0.301071122461862 298:0.151336477044352 506:0.0854039715622725 723:0.156676285370332
+-1 1:0.147796051764436 2:0.282546118382198 24:0.278543115848892 31:0.131901184367697 32:0.259421136119498 45:0.303958626684567 48:0.211709652558578 142:0.0358958060999231 193:0.335665385550452 209:0.21739153119583 385:0.362081832082575 947:0.420989976462316 1045:0.359546975322607
+-1 2:0.139377054585233 6:0.0170709915420795 21:0.103269829252414 26:0.0738879576107631 29:0.0619985132293933 32:0.127969741918665 47:0.080798350793002 88:0.130352586105248 142:0.008853513463247 176:0.176972867671048 209:0.107236975978778 238:0.673345224324399 275:0.114795540219269 286:0.0956530701657434 312:0.154728488333465 405:0.162348630582145 409:0.0871821544614878 420:0.173587845573778 506:0.0955029428255404 533:0.213807289663196 655:0.129261429173471 853:0.180643112575661 3835:0.276903801801994 8418:0.364578435593976
+-1 176:0.212292052604682 238:0.403863715564271 252:0.295574687315714 533:0.512955335829361 3835:0.664333208046924
+-1 1:0.0926191732150447 2:0.177062834678351 15:0.0371504166111523 21:0.0655963377852838 24:0.261831416874913 47:0.0513225977953062 48:0.066335916107125 54:0.16238101944887 142:0.0196829337643013 144:0.128932388672372 221:0.103222156000945 286:0.0607582209268043 409:0.0553775492252093 655:0.164212073014022 930:0.094937867965395 1045:0.0563292171691881 1064:0.100467987068476 1165:0.162336099048619 1731:0.269284246472571 9708:0.818469924507011
+-1 1:0.670743120720165 2:0.183182802950943 3:0.34313218835333 4:0.291145923507273 5:0.125964047001731 7:0.278635581297553 15:0.0768689539844832 23:0.161389695052281 44:0.194294426181564 63:0.0969922502581736 70:0.258132298307147 75:0.136413207820248 83:0.0581339956038182 142:0.18617829650515 204:0.134689622116234
+-1 1:0.460242849496608 2:0.377082847089347 3:0.156964349185506 4:0.1331834551012 5:0.0864325702870507 7:0.191190978999293 20:0.347372064885843 21:0.0931317361833458 23:0.110740536631221 24:0.123913495093404 30:0.370150455764361 32:0.115406835956798 45:0.135219912656928 47:0.0728663032037245 48:0.0941817675643979 54:0.115271879308235 75:0.124803274729586 83:0.0398897207631401 88:0.117555754162216 142:0.0918200939269853 221:0.14655175769756 409:0.0786234030595452 1007:0.177708966057101 1045:0.0799745530000021 1308:0.179829050883964 5516:0.262969236575202
+-1 1:0.486412061280222 2:0.185977687777558 3:0.232244985024043 4:0.19705869323787 5:0.127885925027358 15:0.0780417708082684 21:0.137798033677074 23:0.163852074722247 47:0.107813230100463 63:0.0984720953319407 75:0.27698902477787 83:0.118041933079976 142:0.135857323332552 189:0.170457062331713 213:0.235168116966341 227:0.161912552010679 256:0.155015741956685 304:0.172479909179052 328:0.231099402257679 346:0.189778603281083 415:0.198182514669946 416:0.221615147554801 1268:0.308485296571146
+-1 6:0.0468679887460093 12:0.10531574954006 15:0.0089207756721179 27:0.068234171388049 29:0.0567384660139579 31:0.0396968172829851 33:0.0288169109952572 34:0.269760425910045 37:0.0492788342240384 42:0.0934685563264836 51:0.0353680760197246 52:0.0212282012871626 55:0.104605051286715 57:0.0388783895559577 58:0.017466340178452 59:0.0161680716738216 63:0.00562805958476907 72:0.0324078373268139 74:0.0213453234189891 81:0.015853294327766 83:0.0067465511994639 85:0.0159566867261265 97:0.0324943476621482 110:0.0753867266710973 118:0.0511496651350443 123:0.0528328843425697 138:0.0218340123390795 142:0.0128287494125312 145:0.0218498358007764 149:0.0289904075988498 151:0.0205631363052391 162:0.0141020683933308 165:0.151685524776462 166:0.0194278994554115 168:0.0773526962736026 176:0.0134965185920323 182:0.132383659482318 186:0.0443264944114372 190:0.022324659787066 195:0.290085967673221 199:0.0121710358838417 203:0.0197393221735101 205:0.020602937466874 214:0.0223077502169575 215:0.033175590340726 220:0.020887932691352 222:0.0332069619432331 224:0.0495249094367559 227:0.0370157042831826 239:0.0441502497488925 252:0.0563736967127899 264:0.0214344425376087 268:0.0250540988870637 275:0.0175093522893196 276:0.0202271765046523 283:0.0195187660543899 308:0.0192385619042184 309:0.0191620347298865 311:0.166819928137491 321:0.0345719159674926 322:0.0225656948418586 330:0.0258955750550704 332:0.066887621855253 341:0.0217554164965095 367:0.0222237975466142 368:0.0317381013296841 370:0.246336173455653 373:0.0185876774417196 375:0.0184584104907346 382:0.0686092592132138 387:0.036760017431747 388:0.0270763839618553 402:0.0198462212756788 408:0.015332159904455 411:0.0390146886505629 426:0.0468801577974115 433:0.0421120827790663 441:0.0367210839469739 454:0.0259797916298902 459:0.0237846930230065 466:0.0240599145227128 472:0.0237226582769267 475:0.0421973879880918 485:0.0180189172102395 496:0.0218340123390795 504:0.0276592150500324 507:0.0278445236365537 508:0.121211856965625 531:0.0292982092339828 534:0.0198462212756788 571:0.0205499183735582 572:0.0282161949139171 607:0.0255416902559505 617:0.109508845430945 626:0.0245744362348014 643:0.0635543124565588 644:0.0248102427897722 662:0.0271425352681386 707:0.0386408265089133 712:0.0239104022493493 782:0.0296670286733439 787:0.089722799665493 789:0.0267545146637832 796:0.0228880483180364 800:0.0229617014449639 819:0.0261512628216787 823:0.0296670286733439 836:0.0295264807301037 876:0.0251289088903658 884:0.0268815276096841 886:0.0224269664045587 908:0.0276950261026356 909:0.0458495599345129 932:0.0353665441641177 969:0.0291207022138557 982:0.0291646672143594 996:0.0289904075988498 1048:0.0707330883282354 1054:0.0340290506094217 1067:0.0276950261026356 1075:0.0727616417741362 1103:0.0341167117096617 1109:0.0360264859546881 1138:0.0256757334006775 1157:0.0356888976402954 1177:0.0351594487932765 1232:0.0294802392092157 1239:0.0348596443838 1245:0.0254624551735131 1270:0.0452706331547223 1280:0.0685906565277714 1296:0.0265070686300963 1333:0.0370134720413161 1341:0.0299075998884977 1384:0.0850306970718786 1386:0.0372830998904655 1412:0.0326830620596276 1462:0.0639911621775717 1474:0.120334479865736 1482:0.0308476195503726 1491:0.089722799665493 1493:0.0347624416593896 1518:0.0333639856274982 1525:0.0365029484769817 1547:0.0349581878776683 1576:0.0288624467446516 1598:0.027242925070335 1632:0.0389810951047239 1655:0.147184785844235 1664:0.0309036534849552 1700:0.0374218283277655 1730:0.0367536510434467 1815:0.0338568907117922 1817:0.0370134720413161 1820:0.0332069619432331 1881:0.0452706331547223 1992:0.0340290506094217 2010:0.0381590064385354 2037:0.042806992704625 2099:0.0378549482093228 2102:0.0363808208870681 2151:0.0397144861546918 2220:0.0483806717135411 2239:0.0422351443857678 2304:0.206439138117414 2313:0.0477590371999273 2331:0.0498143213635752 2342:0.0437609797023968 2365:0.0720529719093763 2394:0.0401114932885788 2401:0.0352622461068809 2544:0.105422163390459 2548:0.0362607459591526 2576:0.0457037530362795 2651:0.091407506072559 2666:0.0351594487932765 2735:0.0516097845293535 2833:0.0786767681082267 2961:0.0444760049580972 2974:0.0448622768682729 3010:0.0441095507861094 3195:0.115326252381064 3421:0.0466577400340512 3497:0.0457037530362795 3592:0.0441095507861094 3733:0.0850306970718786 3785:0.0444760049580972 3853:0.0506557975315818 3874:0.042806992704625 4160:0.0448622768682729 4308:0.0477590371999273 4792:0.0490615952814117 5170:0.0576631261905319 5171:0.115326252381064 5172:0.403641883333723 5173:0.0576631261905319 5222:0.0457037530362795 6229:0.0506557975315818 6335:0.111215684053768 6399:0.054013639776714 7037:0.054013639776714 7309:0.196535793052466 7628:0.181679659566559
+-1 6:0.0246807567908165 12:0.0332756638830005 15:0.0169117003375528 29:0.0179271394123189 37:0.0233552806395989 42:0.0885972405133851 63:0.0106694821927867 75:0.0100039490290885 80:0.0642795412494854 96:0.061166514282159 108:0.0456940446529742 110:0.0476385229920976 142:0.00512006375240699 174:0.036183187730924 179:0.0269079248668638 180:0.0380384266874374 185:0.0287444029282043 195:0.137483755273431 204:0.0296326463381794 229:0.0258499649333661 255:0.0459433259201435 256:0.067184015647608 269:0.052709014008061 346:0.0411251415226596 363:0.0461120994416499 375:0.0349928210730059 388:0.0513304793907798 413:0.0426800466211325 502:0.0340720950418915 507:0.0263933461108717 535:0.0468090454659374 557:0.046456089991355 580:0.0446638951067826 582:0.0416340329801019 592:0.0486239683989947 686:0.0583744578512697 737:0.0581660860514459 795:0.116959716763931 989:0.0596968635036721 1046:0.0554576244728005 1060:0.674353509224882 1140:0.0501364114258941 1164:0.0523678398009571 1783:0.214454537955642 1792:0.0582698712324062 2040:0.0672473346027715 2889:0.149152716610973 3105:0.0772556903591186 5114:0.0917184168980091 5160:0.546578877500935 5603:0.210838876649697
+-1 6:0.0264393467242361 11:0.118809632876417 18:0.0353822710167506 27:0.153970073309211 38:0.215408695691245 74:0.0541863198873981 78:0.0507800523378355 83:0.0171265046799733 84:0.0387928215247417 106:0.0462670797297754 111:0.0413363919885007 135:0.0602213198994884 138:0.110853769119118 139:0.270371262307581 142:0.0239963768542433 173:0.0494049877110064 214:0.113258990318122 215:0.0842181266298654 226:0.0512519658848549 234:0.0474165892215782 258:0.188041324065823 283:0.0495494999288491 286:0.037036581634931 296:0.119209465800937 305:0.189290547386259 307:0.0634757473138362 330:0.0657373929670177 346:0.055069313970827 351:0.0469078269019056 385:0.0691577177610882 391:0.0684036798931729 403:0.0765541334856409 510:0.239027702303193 521:0.130358624798814 564:0.163801346373951 599:0.123952069720792 623:0.183500382921972 630:0.0914552876075393 666:0.172769368314768 906:0.0773427876240727 913:0.137974847341285 963:0.0560805116008251 985:0.0846963788012631 986:0.0591064546536137 1045:0.0343367797525161 1102:0.0791791443115964 1262:0.101825311513556 1289:0.0895152212027764 1321:0.0766832172147767 1333:0.0939608080330043 1465:0.104621017127843 1649:0.150145610820476 1734:0.0914552876075393 2095:0.196183880171406 2169:0.116021581564576 2387:0.269339963293857 2659:0.102892453847575 2713:0.105872284773098 4817:0.105872284773098 4987:0.423491027590064 5111:0.146381131835554
+-1 27:0.21495359776443 42:0.0883343435621049 50:0.280288728871255 51:0.100275939878996 78:0.113428327571299 83:0.038255785363655 113:0.158073329873295 118:0.0966800445134383 139:0.120786642372323 142:0.0459438376579012 154:0.10673020533188 181:0.124622817807775 188:0.163185616075181 236:0.203637149316535 357:0.136675366492081 404:0.123987691867252 456:0.159997703195618 507:0.0789450852961629 509:0.274092926851898 586:0.108533669231977 685:0.312074332099958 742:0.151531289664366 959:0.164144504202226 1075:0.206294569486087 1176:0.333291971734491 1305:0.134284635603188 2966:0.256703547344521 3150:0.264569027273922 6277:0.298894022738466
+-1 6:0.0101670125445152 17:0.0554011967893313 18:0.0544237339950592 26:0.0440056331857177 27:0.236831217222128 29:0.0369246074658738 41:0.0468153798596483 42:0.0608280412781743 65:0.0727367808754562 72:0.0632717143859397 83:0.0526867444165321 91:0.0812389572584475 132:0.0616631698285509 135:0.0926302637128497 137:0.0832324072269914 139:0.249525198415387 141:0.0928724918317076 142:0.0290009986954139 145:0.0853174222164192 169:0.296438701154814 173:0.0759929713934997 186:0.0576941366753879 188:0.112371485317561 199:0.0950488980128636 234:0.0729344885048919 293:0.0962292658969989 305:0.145579948695942 330:0.202229776979093 351:0.0721519286420876 381:0.097732467482627 432:0.191013975774331 507:0.0543624904364384 539:0.0944574686362532 586:0.0747375284163721 630:0.140673227075729 709:0.0886650716839396 762:0.135363037661734 827:0.0868428917861729 1056:0.0998369659858924 1202:0.125976663550908 1225:0.272068604754962 1266:0.415528887719922 1269:0.103861015065102 2158:0.186485517721423 3614:0.161870009946224 3921:0.157432672867209 4601:0.353538008988499
+-1 6:0.00294541301878071 27:0.197255735034344 37:0.0139361503855401 41:0.0135625513113151 42:0.0352441199227827 51:0.120025930163176 72:0.0366599982948693 74:0.0241459962987448 82:0.17674177122303 83:0.0915810159034431 123:0.0597649707501185 125:0.0315762470742498 127:0.146466382157823 135:0.0268352560280948 137:0.0482253395001643 139:0.0240960578704445 141:0.0269054302165966 142:0.0702685413794886 145:0.024716704639124 159:0.0177194758796779 169:0.407925969176028 173:0.0440307683890866 181:0.0497226940147497 186:0.0167141587095488 188:0.0325543451771014 207:0.208993050225314 211:0.0292932764315647 239:0.124857766980125 246:0.0304449158527888 258:0.139655332574092 286:0.0165038918482298 298:0.0583982398220454 301:0.026696709607656 305:0.59044906652671 342:0.0275151971979408 351:0.104513114851613 426:0.0265156000319456 430:0.0229240894568393 438:0.0328430071694014 457:0.0609302887390285 472:0.0805057680842845 518:0.0256865283981464 538:0.0258086719311504 606:0.0379232190617201 609:0.0625741028900213 636:0.240989978949879 671:0.0539632203923585 685:0.0311282813168254 805:0.038395966486346 827:0.0503172751947764 847:0.0314104632794331 909:0.103730759449909 937:0.039888927765073 1269:0.0300888372643508 1309:0.0347697679583446 1358:0.236601009339026 1364:0.0428218126008032 1390:0.110997718312538 1418:0.0373901680969482 1424:0.0547790152513835 1446:0.0307415244303882 1538:0.0374766039647147 1691:0.0412924199609161 1782:0.036268136849584 3235:0.0498970678079863 3913:0.244402602018207 5091:0.0629040245212608 6381:0.0563503487700416
+-1 6:0.0324477281969637 13:0.0308077132740545 17:0.075776282813908 18:0.0248131117376431 27:0.0404914296428203 42:0.0554659842029337 47:0.0219396656337974 48:0.0283576413007501 51:0.0314821137112561 65:0.0331624778164432 77:0.0349535434126848 78:0.106834107293924 79:0.0628699567912803 83:0.0360317635432386 101:0.090104355843202 118:0.0303531650628678 123:0.0470280280906095 135:0.126697209934343 139:0.151686189710312 141:0.169371364146585 142:0.015626312920376 145:0.116694899920825 159:0.0557726038488001 161:0.0904730192460824 162:0.0251052910243211 169:0.101365241896816 181:0.0782518663195963 186:0.052608336651918 188:0.0512329091855897 190:0.119230824587047 197:0.10337439100911 211:0.0461007513129882 214:0.317708038664421 218:0.0525873919578184 234:0.0332526175613754 238:0.0457093769018833 239:0.0392993721852392 283:0.034748399210916 288:0.0481444166607056 294:0.0442972712064652 295:0.118073144359511 298:0.0459525710181638 337:0.0354383233704534 348:0.0460511658124693 355:0.0278981718877193 381:0.0445586228291898 387:0.0327211196947384 399:0.262245351635865 407:0.133744590293043 414:0.0342495641081446 423:0.0351200749541489 424:0.238712194718158 430:0.0360771438318071 455:0.0676903031954384 461:0.0507226364338699 473:0.0408119757112145 500:0.0479705825454714 502:0.0319960690830246 510:0.08381345961136 513:0.0346874956718424 523:0.0543340218089697 535:0.0439569521802857 567:0.050300984622507 597:0.0414505632790426 609:0.0656513145079671 747:0.051085016068357 778:0.0442972712064652 904:0.22600777367324 914:0.0593964335973394 1055:0.0505805269691496 1127:0.0534186149946676 1157:0.0635353720182322 1176:0.0523193089282221 1308:0.162436781097837 1342:0.0663734600437503 1424:0.0431046654199673 1486:0.0633411901582631 1497:0.0562788032251788 1510:0.0710504282510473 1691:0.0649845908557517 1694:0.0729522722484137 1824:0.0656600769200952 1912:0.0703627653884798 1929:0.0641363656202238 1987:0.0729522722484137 1992:0.0605804194819328 2001:0.060736478676347 2064:0.0830627188452682 2091:0.0613805993369439 2656:0.0873421964284195 2926:0.0791786720166697 3027:0.0791786720166697 4411:0.0938392162947772 5396:0.539060488551586 5966:0.107812097710317
+-1 27:0.0987823470452543 139:0.277538690892948 141:0.309897076126504 142:0.026391975775903 246:0.350664915213913 305:0.485771400699256 1044:0.49518191761929 1530:0.460800087626003
+-1 6:0.0284987002525519 27:0.0497888281378792 29:0.0207003446785508 38:0.0464373640871442 40:0.0356130711639169 42:0.0341008749177106 50:0.0541017824928013 52:0.0464691185103757 72:0.39017907695904 76:0.0474192166789875 83:0.0147683867786666 84:0.0334515070773951 91:0.0455434609055803 92:0.112880111683039 108:0.0527625993371637 118:0.0373226762326425 135:0.0519295537073267 139:0.0466288650277108 142:0.0354726145694439 166:0.0850564162256303 171:0.0985647130458481 173:0.127807509053134 188:0.0629967015970056 229:0.0298487768595935 242:0.0399384636545389 246:0.0589146938354991 256:0.0387884605794658 280:0.0597094585039741 283:0.0427271176058731 307:0.109471769624052 308:0.0421137429875868 314:0.0454836556775614 331:0.0445566259255338 355:0.0686079645856596 369:0.0509681922699036 400:0.401786679378803 402:0.0868878522459051 407:0.164454218564549 408:0.0335625211944361 412:0.0580913959570137 418:0.0588444058606962 423:0.043184135297421 441:0.120575199378289 448:0.0516172085563854 457:0.0393025590186743 478:0.0446979010332026 505:0.0409995117979918 508:0.0442226833855252 513:0.0426522297625275 548:0.193599171827484 561:0.0505088013527643 574:0.0853543051071374 716:0.054574932639394 726:0.0525267117871915 762:0.0758860209664588 767:0.0545216479266251 886:0.24546624218979 908:0.0606251765141114 953:0.0622816491418058 966:0.0569324178182403 1011:0.0684058262401706 1027:0.0595619192203965 1190:0.0616817216851981 1294:0.129472329301894 1319:0.0601606161763491 1371:0.0853306930522214 1540:0.0741136682093992 1858:0.0733861394487363 1975:0.162047023721084 2091:0.075474443316649 2114:0.0816137346639881 2733:0.0741136682093992 6137:0.504904698872814 7175:0.126226174718203
+-1 6:0.0455453412787715 11:0.136443746335121 18:0.0812676463093134 29:0.0275686333826276 42:0.0454154041022963 46:0.0635615675717417 51:0.0515549462156849 58:0.0509202834772668 59:0.0471353921027736 65:0.0543067017636207 77:0.0572397414994496 78:0.058316993431625 79:0.0514777576671737 84:0.0445505786997185 96:0.0470314077654617 111:0.0474716741929066 114:0.0533017091867019 118:0.0497061857613601 123:0.0770128550159652 125:0.0813780014398375 135:0.276638258949219 137:0.124285882931332 141:0.0693404169835995 142:0.00393685677450563 148:0.0667263946933551 157:0.153851051331595 159:0.0456664634736 161:0.0740790736603992 162:0.0411122944399134 166:0.0566388915783198 168:0.0563773117570738 169:0.276658657783716 174:0.0556430679890386 185:0.0442035892009437 186:0.129226709082905 188:0.0838987464997236 190:0.0650839267572132 194:0.0601422410066287 197:0.0846426834207193 212:0.171889717270346 214:0.0650346296466218 215:0.0967180558385966 218:0.0430584202330597 234:0.0544543141426527 249:0.0866278057043843 276:0.05896905425169 293:0.0718466500868182 296:0.0684514618835965 298:0.0752516920891127 324:0.0804287122040421 330:0.150988702743552 341:0.0634243902185612 348:0.0754131504131689 355:0.0456859016639997 358:0.100516551287699 364:0.0703324149167707 369:0.0678792275531624 381:0.0729689697608368 387:0.0535839359914415 407:0.109509723877456 423:0.0575124526884802 424:0.156365541050982 434:0.065684776678343 455:0.0554246448089746 493:0.0677666433898366 495:0.0836565574975959 496:0.254614094628404 507:0.162352390068751 510:0.0686262434924949 594:0.0726826694521677 597:0.0678792275531624 606:0.0977353568380404 615:0.10078881685751 622:0.0837772999777781 636:0.0776346331146271 685:0.0802235083815915 709:0.0661990748949206 747:0.0836565574975959 800:0.066941118445659 867:0.0667263946933551 904:0.185054579290916 908:0.0807403592079525 909:0.0668334798624153 981:0.0900945922190672 1018:0.0823726316661562 1056:0.0745402294619571 1402:0.275133200174781 1453:0.106780664672796 1486:0.103727204653326 1538:0.096584344688886 1548:0.083536510943354 1728:0.123129717093212 1808:0.0763242627320558 2469:0.134586092925348 2555:0.102501673571364 2596:0.210058759735559 3980:0.141046005820576
+-1 6:0.0368975437066782 13:0.030653542911096 18:0.0740668200825115 25:0.0346150695466365 27:0.0268591995138034 42:0.0275942084981473 46:0.0772394821850783 47:0.0218298734468909 58:0.0928168501523092 59:0.0286392659723157 72:0.0287027634313668 78:0.141732639622686 83:0.0358514505802452 91:0.0737069508620207 92:0.0608945732251229 94:0.0830635892272114 96:0.0571521710527251 98:0.0598356610081425 106:0.0322841107670953 111:0.0865307686672518 118:0.0604025387710803 119:0.144770024408627 135:0.12606318186911 139:0.113195332381783 142:0.00598004404069364 158:0.0331042264797569 168:0.102763852437752 169:0.0672386546952728 177:0.0962756949575203 183:0.0405751671730324 186:0.0261725349540804 188:0.0509765254632959 190:0.0395447201300117 204:0.0276878630757371 209:0.0289729875853697 211:0.0458700503356272 218:0.026162115013567 219:0.0385641145544527 220:0.0369997778354764 224:0.0877258019526611 226:0.0715249007856965 242:0.0323179477312078 258:0.0437369793698438 275:0.062030278852453 284:0.0840274927939972 288:0.0958069772274534 290:0.0479616727026067 293:0.0873074447570029 294:0.0440755953449945 295:0.117482273516238 309:0.0339426135825791 325:0.0414157827033795 341:0.0385363927097666 347:0.0378886598462415 348:0.0458207129747396 353:0.103478213117385 368:0.0562191919837205 372:0.0455286611586626 377:0.0354983361031545 387:0.03255737411405 388:0.0479616727026067 390:0.0421309456871524 394:0.0429673171784328 424:0.0950070450098284 432:0.0433260660940285 439:0.049709967589973 448:0.0835366258745175 449:0.0527193396156096 458:0.0485587181867457 480:0.0678467328093315 485:0.0319177557428041 498:0.0473915304727987 507:0.0493223146450342 517:0.0514285384072122 572:0.049980673463663 615:0.0612388611666478 622:0.050902735067412 636:0.0471704765197472 647:0.0416615189107586 667:0.0444235215074822 702:0.0549419727643259 721:0.0610734337516827 856:0.0346150695466365 887:0.0582824612444705 891:0.0648794826952315 944:0.0504688062583013 953:0.0503979096188782 966:0.138208038184168 976:0.0675928432703572 988:0.0681553810830879 996:0.0513520728148193 1042:0.0525506035552715 1054:0.060277258219147 1160:0.0584149757227076 1176:0.0520574885595551 1198:0.109883945528652 1214:0.0670542506247301 1269:0.0471158111343622 1283:0.0571484178493847 1382:0.0604325364499619 1385:0.073431179275141 1481:0.0809572078566656 1510:0.0706948721533138 1595:0.0577658582082661 1680:0.0763646326506168 1699:0.078782439927167 1816:0.0506839108768609 1836:0.0491853321720082 1911:0.0624616754186812 1931:0.0601238621950789 2005:0.0809572078566656 2039:0.0856989598436071 2184:0.0748130981755636 2373:0.0738752605252604 2380:0.071418212854359 2426:0.0703481376681224 2459:0.0665376475885257 2479:0.234399967238176 2514:0.0845978293852493 2586:0.0775158820538441 2880:0.0693615330324659 3065:0.0781333224127255 3109:0.0845978293852493 3595:0.0763646326506168 4349:0.0794666615335734 5485:0.536362879987222 5486:0.321817727992333 5557:0.0856989598436071 6608:0.0985007866171849
+-1 6:0.0255094563820553 11:0.171946522312374 18:0.0341378517636553 27:0.037138709497905 40:0.0796939928344294 42:0.0381550199480311 58:0.0855597113022838 74:0.104561098130659 83:0.0165241535151231 100:0.0394084189485434 113:0.204833957372204 125:0.0683684166119951 132:0.0773577259904761 134:0.0456744006519047 135:0.116206587800265 139:0.208689692517226 142:0.00496123017287681 145:0.0535162382049296 148:0.0560591052949902 157:0.064627740836129 159:0.0383659434333458 169:0.13945818801158 188:0.0704861799556222 199:0.0298102036783851 216:0.0554853383195714 218:0.108524513789807 242:0.044686621123648 284:0.03872878692345 291:0.051330658032856 294:0.0609441368728703 297:0.0623003193721802 330:0.0634253628144671 331:0.0498538220825167 413:0.0551413798254649 414:0.0471205125280553 423:0.0966363207799005 457:0.043975115799371 459:0.0582552340006651 466:0.0589293269078932 499:0.0475015175483743 507:0.0340994361061434 528:0.0667253923899643 534:0.0972176738480778 564:0.158040338296936 586:0.0468798900584754 591:0.0670587038956264 594:0.0610631735562029 636:0.065223486032945 647:0.288030744786899 655:0.0482893565563376 671:0.0389467851666508 678:0.0690148662463009 784:0.0626237726663317 789:0.131058282804434 796:0.0560591052949902 819:0.0640516122539897 876:0.0615475871886873 882:0.0478910035002532 910:0.102148682365597 921:0.259100724532168 950:0.0694916893451227 954:0.0871447395642799 1202:0.0790201691484678 1218:0.0775811401807192 1379:0.0673129213204524 1397:0.120165297521393 1424:0.0593033511470646 1462:0.0783659499625054 1612:0.093085545834689 1760:0.0972716646760953 1888:0.115574362361598 2092:0.0897100547972122 2463:0.104846061055342 2471:0.0987512773303047 2949:0.0950537221404998 4585:0.0992736541807728 6472:0.564931219619282 7075:0.141232804904821
+-1 6:0.00504788410754585 15:0.0172945068275369 27:0.014698227876084 31:0.0384796626866125 73:0.164557954611112 86:0.196069857050028 131:0.201071383941286 142:0.0261797973462201 156:0.140137905273023 185:0.0293950497450238 202:0.376076932426915 228:0.0381770573395507 239:0.128389641851358 259:0.0614079106505816 260:0.0636445886770348 311:0.194046021927919 316:0.206308555179186 328:0.256064806627996 329:0.0677726512973862 379:0.0616530581855726 408:0.029724113002556 432:0.0474188660832604 565:0.161075169567782 631:0.0338782374289386 667:0.194479970809117 775:0.0835784232359849 800:0.0445153333081755 821:0.088604836393374 873:0.116731900554563 1132:0.0781647395334005 1226:0.0798983084087802 1273:0.135545302594772 1286:0.093794518327128 1497:0.0612869450419845 1640:0.157156434455308 1976:0.0808538923914931 2369:0.0658034672164661 5003:0.0904543094944533 5010:0.104715026611214 6104:0.111790203705741 7735:0.381019514415645 7736:0.381019514415645 7781:0.223580407411482
+-1 6:0.0281599486312015 12:0.0379664608162699 25:0.126806305119632 27:0.0163990033503938 37:0.0532952460617512 41:0.1037330237354 63:0.0121735355612024 73:0.122399628569851 83:0.0145928414056612 84:0.0330538836012835 101:0.0547383105409719 111:0.0352211629776272 113:0.0602977827112469 138:0.0472271342636153 142:0.00438137088374979 159:0.067763607665468 176:0.0291930720629135 178:0.0454526668210332 189:0.0421452413083796 208:0.0421945337059145 214:0.0482518328859688 215:0.0358795267439658 218:0.0319467906361383 248:0.205540805528973 263:0.645149022340447 301:0.0510473720581913 337:0.0430574955350422 341:0.0470571308601195 366:0.0710090925074975 423:0.0426708243141489 433:0.0455443772001481 454:0.0561944863083878 502:0.0777503262374913 550:0.0458853833920123 576:0.0551324013870055 638:0.0687871161252262 789:0.0578702181056671 796:0.0990140441583713 803:0.070384637707709 829:0.0417804764532914 904:0.0686497538561165 964:0.0674655288493394 974:0.0723392166513987 981:0.0668448368400873 1045:0.0585141207353895 1115:0.0792249116392415 1198:0.0670901301415471 1199:0.0815619070320407 1213:0.0716598477557567 1227:0.0615413343400712 1344:0.0891435782825451 1366:0.183095530713264 1454:0.107748754867088 1482:0.0667236350146624 1491:0.0646903653575619 1567:0.082538220298306 1587:0.0907717305064235 1598:0.0589266535188084 1708:0.201842091027956 2001:0.0737947061457591 2084:0.0854906262036552 2106:0.0764981032226203 2184:0.182709875177613 2308:0.0839440211533136 2756:0.0932495300945566 2808:0.399419552315183 4078:0.124725779227752
+-1 6:0.0325736286329725 15:0.027900048356324 29:0.0887258016363306 57:0.060796784298562 63:0.0528058793333778 65:0.116519030434027 73:0.353960166801448 75:0.0495119927792235 117:0.168145898466246 131:0.216249833583096 142:0.0337872652491164 162:0.0441047286199394 202:0.303349633066793 246:0.0841733719878585 263:0.233208485012984 272:0.256323670305767 323:0.0696628985767553 329:0.109332996152435 408:0.0479518842826848 455:0.0594588298089038 465:0.276984858802351 507:0.0435423770573428 508:0.0631824106445273 528:0.0852032328540336 538:0.071355196167321 610:0.314547615157899 633:0.0846823695176285 655:0.0616618223388657 761:0.0828069360086691 829:0.0604112307661594 1042:0.0927847044917606 1117:0.0971864388510954 2432:0.155796090605118 3499:0.164855813245879 4545:0.168929610726733 4559:0.316855675471493 4575:0.329711626491759
+-1 6:0.0247585230079533 9:0.265157008421519 27:0.0144181762216838 57:0.0369682751608912 63:0.0107031005001981 73:0.161422561159461 75:0.0301064109548585 78:0.0380414571438379 83:0.0128301796436218 111:0.0309668169274372 117:0.0511216498815916 142:0.0256809824128498 162:0.0536369073571846 173:0.0370113388264419 185:0.0288349732254819 225:0.0471826067250394 228:0.0374496534539796 263:0.0709027257221109 323:0.0423594312232672 329:0.132962699674348 360:0.0609724676926795 377:0.038111431075882 386:0.0394368043077763 414:0.0365867237968452 485:0.0342672778958961 593:0.0476936150798888 610:0.0637549223615455 631:0.0664654816143209 634:0.055632365049161 688:0.219877895276802 724:0.057940711073153 727:0.0530144447398189 747:0.109142023948031 787:0.0568764496013131 796:0.0435270945006148 823:0.0564189459351803 863:0.0523315585465633 881:0.0564189459351803 882:0.0371849715423675 897:0.0825899148190208 930:0.0867080295402049 960:0.0570638536084362 1018:0.05373347892201 1037:0.0553799755913616 1046:0.111264730098322 1264:0.163971935216446 1334:0.076675433148533 1379:0.0522651203940926 1482:0.0586641216686875 1663:0.184014822095517 1726:0.133728191145812 1781:0.251435117913004 1880:0.0691868265374761 2058:0.0741318694710943 2373:0.0793133484211701 2397:0.0908252244391435 2432:0.0947338385233867 3991:0.0887308446499077 4111:0.0838848537353739 4477:0.616319077157095 4709:0.100242720667881 4887:0.32341238846339 6359:0.109660216896619 7444:0.105751602812376
+-1 6:0.0307435760675501 29:0.0372182249020606 42:0.0919676013916432 63:0.022150727938602 73:0.278394971884499 83:0.0663821241994304 86:0.0398047210563622 117:0.211598827513325 131:0.612301437147281 142:0.030560318610687 166:0.03823183716995 199:0.0239511771804563 202:0.318118705585594 239:0.173765070514828 260:0.12920676013906 263:0.146737572682488 311:0.131312854359637 320:0.097272404865116 328:0.0519844730522654 329:0.137587262046825 351:0.0363628335087989 369:0.0458191801201819 408:0.0301719000695921 507:0.0273973852960985 508:0.0397551297230458 592:0.100947382060348 668:0.0739201953841149 688:0.113762723191721 775:0.0848375133560207 800:0.0451859467773979 856:0.0384557133721593 1081:0.0569652969402013 1157:0.0702315824976502 1204:0.0789347342244625 1248:0.0659723759461637 1264:0.0848375133560207 1294:0.058196256455872 1469:0.11602733561234 2106:0.0695972285037622 2432:0.0980287666957882 2554:0.0777785382404899 2881:0.183633966584363 2925:0.0965474896759593 3965:0.226948595887717 4233:0.218859477487357 5071:0.113474297943859
+-1 6:0.019984532872686 9:0.152877771468283 27:0.0581901667910198 42:0.179347667544764 73:0.325741814126809 75:0.0202510249101118 83:0.0517811879909113 84:0.0586441431455484 117:0.309481999058394 127:0.099376970574677 142:0.0259114021597534 218:0.0566799407206059 242:0.0700164860779255 296:0.180212129511532 309:0.147072614333004 311:0.128037775214752 433:0.161609510592977 455:0.0729582173528358 507:0.16028439609148 610:0.257307825131686 643:0.0812987679099334 655:0.0756613719279291 724:0.233842310532068 1204:0.30786407946287 1291:0.151677321223914 1358:0.13377752171193 1489:0.11712499976096 1962:0.486245317037654 2979:0.154726789820223 7993:0.207282977084176
+-1 6:0.0233712974799024 18:0.0417019674034526 29:0.0565866640854501 42:0.0932184842307433 57:0.0581615575254988 63:0.0168390056807958 68:0.0478252397317916 73:0.169308910336928 75:0.0157886344892258 83:0.0807420122423694 92:0.0514283623527839 110:0.0751850319250718 117:0.402144104295685 131:0.206876519555004 140:0.0550509039092104 142:0.022221898673353 173:0.0582293088568846 179:0.0424671686502158 202:0.0967336641102061 218:0.0441903000406557 237:0.0669472940833071 239:0.0660481907780529 254:0.0751850319250718 301:0.070611120635908 351:0.0552861252886789 405:0.0740886107179201 408:0.0458734176213561 437:0.0700729670532958 455:0.0568815964565942 465:0.132489497469245 500:0.080621394478349 508:0.0604437792837061 534:0.0593793700599561 592:0.0767403014784597 684:0.145820813281093 697:0.0835171908507288 719:0.083852062354643 733:0.263790145133541 742:0.0799548429660922 780:0.0790372975070289 782:0.0887629664964301 881:0.0887629664964301 884:0.0804288208591369 890:0.163629514035799 930:0.136416265732634 1086:0.0982231091460992 1128:0.351474674856567 1264:0.128987126139276 1424:0.0724435278930858 1469:0.0882040973515335 2114:0.111550050492045 2161:0.103438259777502 2248:0.10234183857035 2682:0.114640550474885 2913:0.114640550474885 4595:0.146790997715866 5178:0.134226747897744 5752:0.362387163041127 6146:0.166377195138725 7554:0.172526551090993
+-1 6:0.0180875303541471 33:0.200181014657031 53:0.0696492480692932 56:0.166986111646535 59:0.1123139462535 72:0.112562962768448 73:0.098273749807221 92:0.0597022094678291 142:0.0187614402025324 146:0.243628974137664 293:0.0855978961493574 377:0.0696065013857613 390:0.0826119771032201 409:0.0461868269712122 433:0.0731344822266154 463:0.111131062728212 475:0.0732826285989058 580:0.0818309143967347 594:0.0865939272618388 762:0.120408184892867 767:0.0865093805236475 774:0.101452028115077 952:0.168503932918549 1120:0.728799461042971 1159:0.18392460790501 1377:0.0862574550740011 1383:0.262965102108924 1789:0.137279573615799 1863:0.108952959777792 3746:0.193144127100605
+-1 6:0.00733574802379138 37:0.0347089141652214 41:0.0675568813916187 59:0.0455510947675849 73:0.239140928083728 76:0.0610300508374007 93:0.145444720192349 131:0.389604561954546 142:0.00190226630162436 144:0.0436125576520899 169:0.0534719418966595 199:0.102870154242736 299:0.0607280179658867 306:0.0575641934840885 387:0.0517828925883218 438:0.163595409813213 582:0.0618734623384586 709:0.0639740161170218 873:0.0848192817587155 1032:0.0968783070457238 1120:0.591157455043099 1458:0.262902241010422 1510:0.112441038962058 1547:0.196978806260119 1878:0.272610439463994 2042:0.0942228752869838 3687:0.152175254652971 4580:0.324914260486982
+-1 6:0.0319610136385053 18:0.0213858015918949 29:0.0290190426550103 31:0.0152272838199359 42:0.0478047471758085 63:0.0172709182284035 73:0.434129009930798 75:0.0161936055115508 83:0.0103516258432132 86:0.0310357331991244 117:0.164983564302643 127:0.0397330867341872 131:0.265228505793397 142:0.0217558853452159 172:0.031330161811652 173:0.0298614315722524 180:0.061573612007151 187:0.149011227959794 202:0.248037092339508 237:0.0343322302885237 254:0.0385567462530976 259:0.048601033324078 260:0.100742485533841 263:0.114411256634919 295:0.0339214318798092 301:0.036211131275688 311:0.10238460678447 320:0.0379216374956661 328:0.0405322834410193 329:0.0536383806136578 355:0.0240447379222585 379:0.0487950543124358 408:0.0470500491308346 414:0.118075377303764 432:0.0375294626748663 453:0.0387507672414554 465:0.0339719476358872 485:0.0276474725449436 502:0.0551532264364937 507:0.0427234718816059 509:0.0370833770378905 528:0.0418004042161883 530:0.0328423416781632 537:0.0446815868874483 565:0.169976356485837 610:0.0514386485833747 631:0.0268127889192282 655:0.0302510716100059 681:0.0437165741428122 684:0.0373902620783788 688:0.0443503864778343 709:0.0348409322913421 724:0.0467476355576337 768:0.0499282774619661 787:0.0458889697507749 808:0.0416974748245499 873:0.0923869730907633 881:0.0455198473452239 886:0.034410998768786 897:0.133270136564981 933:0.0464275573534603 1018:0.0433531629723789 1059:0.073244896981812 1086:0.100742485533841 1088:0.05131478399237 1132:0.0618631552610021 1148:0.0724020480165752 1198:0.0475912747690352 1225:0.0356364449451502 1264:0.0661477925210524 1401:0.0752780587605539 1416:0.048222999321998 1418:0.0507156239580309 1599:0.0484103867853911 1861:0.388620679909882 1958:0.0580830484482592 2025:0.0625277162828607 2058:0.0598109611196424 2117:0.296933112528193 2253:0.0592888672251639 2476:0.0732794681473749 2578:0.0603591703324159 2645:0.203039546732988 2792:0.0612365904632156 2933:0.0853223458315343 3373:0.0732794681473749 3679:0.0828762686101117 4019:0.0808776779969328 4154:0.265427663539472
+-1 6:0.0164032610399318 9:0.0418272472445376 15:0.0187330179011639 27:0.0159207873727661 29:0.0198578154073552 30:0.0328658032643978 31:0.0208401493354905 73:0.356490895085895 86:0.0424756852406865 98:0.035467581069569 117:0.169348100355254 131:0.0725986555990614 142:0.0113429452999425 172:0.04287864195485 173:0.0408685291937964 179:0.0298057929216521 204:0.065647910409025 215:0.0348332337106596 337:0.0418018837224503 340:0.125199584484803 389:0.0465985107306777 508:0.0424227662449314 571:0.0431534210598446 609:0.0387200684778466 633:0.113717103556714 689:0.34166065684312 726:0.0503888105644054 733:0.185142421558234 811:0.0621013238079403 862:0.0526118916335745 873:0.0632206747648827 933:0.254164101745163 987:0.0892777577307075 1017:0.064430323946956 1088:0.0702297122825898 1119:0.380260915621969 1248:0.0703992340833549 1393:0.0625997922424016 1472:0.0555993235129758 1663:0.101596096863282 1720:0.0710971515362828 2043:0.095974750991102 2066:0.0732028655659373 2840:0.106373705251078 2968:0.0833977007623529 3289:0.188415417346954 3696:0.226849887954637 4709:0.221379322444506 5536:0.191949501982204 5750:0.381514841313087 6105:0.121088615482229
+-1 6:0.0154880586323972 31:0.0295160932356898 68:0.0950807439396213 73:0.0841502167094244 83:0.020065269495354 117:0.319799008404753 142:0.00200813958702225 196:0.0720120229852873 331:0.0605374656283369 360:0.190711124868557 363:0.0723424838496996 367:0.0660969543992249 398:0.06023391467591 506:0.0433236456828642 515:0.111898965902051 528:0.0810246031218804 640:0.216827937721486 671:0.0945861147599827 685:0.0818419425538362 714:0.240423536006516 771:0.0821567365380587 782:0.0882342559713092 849:0.0967794197633198 880:0.0910916703004517 897:0.12916334334148 1216:0.082909916337753 1228:0.0953555624342783 1301:0.10173224642457 1322:0.0870041128325327 1331:0.0875420708141968 1411:0.0980807368854314 1490:0.25122748771045 1536:0.127314507740223 1664:0.0919121662659192 1796:0.125613743855225 1922:0.113490689572623 2294:0.156770774924298 3365:0.126447113620114 3369:0.126447113620114 3609:0.124039082448923 6261:0.143891476933518 6961:0.171498908516335 7730:0.584527343895978
+-1 6:0.012583463743698 15:0.0215560416000965 29:0.0228503435627097 73:0.273475514554785 117:0.129912319001499 131:0.167078219693285 142:0.0195784524984084 172:0.0493403569361328 180:0.0484846521467677 181:0.0531066198003534 202:0.156248649375062 218:0.0356890993447993 260:0.158654469286024 295:0.0534212228713112 301:0.0570271597365044 311:0.161240566642481 316:0.514289981465949 360:0.0774727996019964 409:0.0321320960490026 434:0.0544430220065173 457:0.0433846387785488 507:0.0336415650334319 631:0.0422261647954811 724:0.0736205908606599 730:0.0604805470518096 775:0.520864800052223 1045:0.0326842888818476 1132:0.0974252919637985 1225:0.0561221140222335 1226:0.0995860290791707 1548:0.0692394849099976 1626:0.0904255995032181 2044:0.237103549674202 3680:0.134370036875787 3885:0.112743131551218 5749:0.292672180346275 6245:0.139336397712557
+-1 6:0.0233838575664655 9:0.11925462742836 13:0.051804574457233 17:0.0424737581159743 27:0.0226960616772757 42:0.0466342906226748 50:0.0739863201182471 57:0.058192814420748 73:0.508199698470751 81:0.047458129069125 82:0.0584652641521424 83:0.0403927021066968 127:0.310082060642831 137:0.127621543823771 142:0.0181913245001351 151:0.0615574250161274 168:0.115780801381071 173:0.0582606021627176 186:0.0442316583011485 199:0.0728699764147641 326:0.545349613722577 336:0.0712636797956552 355:0.046912047964144 369:0.0697010119700069 509:0.0723508473204666 635:0.353287979623477 706:0.0793510710318426 804:0.0734271506286715 918:0.0901249605404075 1018:0.0845833989679252 1150:0.0850534621687143 1170:0.103777124912132 1225:0.0695278368158416 1438:0.107848222899016 1620:0.0942666227219055 2062:0.124849399807649 2624:0.0989477943715997 6093:0.166466608744233
+-1 6:0.0272502079982157 8:0.27429772594338 9:0.104229383227371 13:0.181110249907158 22:0.145300786719411 41:0.0627386281420055 105:0.144735766354054 142:0.00706637581050243 151:0.107603244936561 153:0.236348040902636 232:0.120937467290626 241:0.179937615697067 404:0.114419300338108 474:0.183452869413752 506:0.076225070173067 584:0.383327283207028 687:0.153312332205066 818:0.417686334006324 867:0.119769097122506 1125:0.241572392888775 1549:0.215659222404708 2824:0.397750614145913 4585:0.212096070151616
+-1 1:0.126378283495493 2:0.120800566128685 6:0.0073978656271578 10:0.062397394073843 14:0.22516361203059 18:0.118801703822278 22:0.157784585826414 27:0.0215408104599848 35:0.0802780231714655 37:0.0700056442031805 41:0.204386817446899 52:0.0603136794846369 63:0.0159904731128339 85:0.0453362240077472 104:0.32140543103613 109:0.0814123068005518 142:0.0383674860173678 199:0.0345804125071097 203:0.1682504044566 301:0.0670529630667718 304:0.168049761159315 331:0.0578313973050611 418:0.0763759405884461 423:0.0560500000568826 433:0.0598245378590574 452:0.417698682792342 457:0.0510119843794554 538:0.0648225175025156 550:0.0602724644548192 574:0.166175915292529 609:0.0523882165216061 691:0.566130869370319 767:0.0707653018485049 823:0.0842901211676215 854:0.0889544507151811 1010:0.0823677017375652 1107:0.143923523949534 1778:0.114553390594979 2908:0.118494446108777 3179:0.127462941931889
+-1 6:0.00652585475097636 14:0.39724566553971 17:0.0355601177528273 31:0.0248730640610411 69:0.13241522184657 86:0.050695435191964 142:0.0355372327918229 151:0.0515374522818844 187:0.121701475545031 199:0.0610086099487436 201:0.0783204992171367 595:0.37106791897891 835:0.213112699725712 922:0.0927669797447275 1074:0.34114846022473 1399:0.435381212224416 2209:0.111470349133112 2379:0.0981405794322282 2401:0.0883778767552309 2546:0.109678279117673 2664:0.132109947493869 2994:0.135374552852331 3440:0.135374552852331 3620:0.139370106895071 3943:0.258699525984488 4804:0.303562862736878 5606:0.139370106895071
+-1 6:0.0287833884193619 8:0.289730558713275 9:0.264224756508903 10:0.0485547729710096 37:0.136187905417656 41:0.0265073984437476 47:0.0272468099909274 51:0.0390975498314781 65:0.0411843893601116 68:0.0353400777847189 72:0.071650322969726 83:0.0149159157860073 85:0.105835672950729 98:0.0373417392944759 111:0.0360009326665962 112:0.256378979755364 119:0.0602312446907561 142:0.0223918554696015 147:0.148238462640856 151:0.181851734527419 153:0.0499291415603232 158:0.0413188180401032 162:0.0311781913965393 183:0.050643622511297 199:0.0269088814276369 226:0.267819974229676 247:0.169425432837811 275:0.0774226761180672 287:0.106868725229396 293:0.0544861005235524 312:0.0521775219472732 322:0.0498903801309104 331:0.0450017249665977 355:0.0692933248123846 409:0.0881986664541269 415:0.0500851455401577 422:0.0524938899537188 432:0.0540771385317623 446:0.071031381190679 485:0.0398379325549812 506:0.161027453605357 572:0.0623830420453935 580:0.0520882828705851 663:0.0538765609214412 713:0.0575639493617404 742:0.0590819907131248 744:0.071031381190679 780:0.233615911385436 806:0.0617964127043275 827:0.0491714291646172 862:0.110783959995275 867:0.20241227917756 883:0.0671275460497022 952:0.107258736962344 964:0.0689591642094323 987:0.0469976617158681 1010:0.064094744938841 1067:0.489846340537384 1094:0.0592912027062385 1113:0.0698924898668943 1247:0.0891401629179611 1319:0.0607615914973858 1344:0.0911171491255953 1485:0.0717872801844843 1776:0.0666729744031086 2272:0.0960161313740019 2295:0.0858024777666602 2968:0.0878045557580604 3219:0.0882373300779984 3569:0.110134230131572
+-1 6:0.0193344601377414 9:0.591619368284585 13:0.257001260878128 69:0.0980782183375924 72:0.0601614502925668 75:0.0391845670216398 77:0.072896555558245 83:0.0500968084404671 85:0.236974138231345 104:0.419999551736188 114:0.0678813513704494 142:0.0501370710401203 212:0.218906794416766 229:0.0506259918204929 293:0.0914988988861504 339:0.0751927823804507 404:0.162364661695079 446:0.119283507222179 457:0.133320774969333 489:0.110146903840621 518:0.0843065397321615 797:0.285709533230535 863:0.102167083264558 866:0.108118518434674 1045:0.150657980995015 1269:0.0987554921787167 1477:0.160061488933138 2433:0.131700875429642
+-1 6:0.0453808971849996 10:0.0382765768910683 13:0.0301610381495968 14:0.276245264305755 17:0.0494571242912231 18:0.0242922674289993 22:0.241975403029765 26:0.0392842067700444 34:0.072332611938762 37:0.150303031404364 41:0.062688737643985 42:0.10860342997015 48:0.0277623948748191 51:0.0308212824570402 52:0.0739967181207883 58:0.0304418597059445 75:0.0183944190277814 77:0.0684396889152709 83:0.0470339093398453 98:0.0294371462967117 104:0.591481417302579 127:0.0451330647850164 142:0.00941434206000854 145:0.152327191443517 161:0.0442869641235008 168:0.067408509847489 173:0.0339197891857765 176:0.070568726126872 179:0.0247380131451076 183:0.039923253523465 193:0.0440172418538244 199:0.0212127419405822 203:0.103210232393921 212:0.0513807298458428 214:0.0388798910087448 218:0.102967092748382 219:0.0758890242250748 225:0.0432414531355821 254:0.043796852184736 277:0.0410972292370466 283:0.0340190063739816 286:0.17799642699985 296:0.0409225883484634 304:0.103087151314812 309:0.0333972639355373 317:0.0270479975949556 325:0.0407503630407392 326:0.0529178187984581 330:0.0451330647850164 348:0.0450845201183119 354:0.202918782442293 364:0.0420470853944181 368:0.0553159287028683 369:0.0405804874013276 402:0.0691794477371609 414:0.0335306421636552 415:0.0394829963578003 433:0.0366983037885352 447:0.0638370761374093 468:0.0607564259534998 472:0.0413459160728582 473:0.0399553042264587 506:0.0507763033980486 507:0.0727947933106685 549:0.0484584481281497 550:0.147892305719618 557:0.0854195461420867 572:0.0491776432972909 580:0.0410621045558194 599:0.0425506438607339 607:0.0445162835190611 609:0.0321366240952647 631:0.0304568166942153 638:0.0554266111315404 684:0.0424718354252659 723:0.0465753667874947 724:0.106201870410116 748:0.0670603412763495 759:0.0670603412763495 778:0.0433674409683118 782:0.0517062828010379 789:0.04663009958436 793:0.0544641990678532 817:0.0832386118257791 849:0.113427692963824 851:0.0515424423945927 854:0.0545675331981485 981:0.10772316056809 1054:0.0593087947443327 1107:0.088287338159803 1177:0.061278951203739 1212:0.0714209537985161 1398:0.0804600972230204 1400:0.0692178672499642 1472:0.0461459555710705 1570:0.0751376963287812 1731:0.0563493807190872 1752:0.122204657016985 1771:0.0647430531516245 1865:0.0538615802840448 1992:0.0593087947443327 2034:0.0611023285084927 2150:0.06793964941929 2513:0.0832386118257791 2624:0.0576081983517499 3263:0.0756911959513068 3604:0.0756911959513068 3776:0.0775166571463906 4053:0.0899500298313697 4721:0.0941396782320016
+-1 6:0.0113981719630903 14:0.346918111128388 27:0.132754972431998 42:0.068193923399909 77:0.0859488674470849 83:0.0590667681785235 85:0.488958670525639 142:0.0384242559337393 218:0.0646547722988531 317:0.135871147098636 339:0.0886562394656779 457:0.15719219554381 496:0.191159083672545 518:0.0994018380274811 595:0.162028428148623 609:0.0807165107947882 610:0.146755436165746 641:0.0901904465832236 1045:0.0592112239927886 1793:0.180411166223477 1844:0.296420653426294 3374:0.191565999199112 6648:0.530208201548654
+-1 6:0.00682588684555678 8:0.0343543293211864 9:0.0261083502899793 14:0.207754697762486 16:0.0375588867156687 34:0.0271994525760919 37:0.0484447775173504 53:0.0788528688368072 63:0.125410207132267 69:0.0346257829604144 71:0.0488694320199562 90:0.0476867550819036 97:0.042592496835658 119:0.0357091089169322 124:0.1578480661355 142:0.0424812449377216 162:0.0184845164354183 218:0.0387190297853304 220:0.027379198878216 230:0.0981025451692061 261:0.0469249942616705 262:0.0319416275039845 264:0.0280955455837835 283:0.0255845413501245 291:0.0274703826057791 295:0.0289782868928645 318:0.164783127568272 326:0.0397976974495944 334:0.0466368332231284 338:0.0894380740087617 374:0.0880997198110087 396:0.0346652124705889 408:0.0200968789712005 415:0.0296938229717238 416:0.0332047505316202 447:0.0480097006994809 450:0.0508694455783437 453:0.066207750570217 486:0.0508694455783437 501:0.177454062196758 511:0.044267648671039 527:0.0325519082148124 537:0.305363487777441 586:0.0501769728180329 599:0.0320008966564637 627:0.0578173140083729 690:0.0426525611738866 703:0.0981025451692061 727:0.0365400028969602 764:0.0315652602104885 773:0.0534159674515061 802:0.0605113112889683 818:0.0523129888228612 836:0.0387023167887753 856:0.0768436673469907 896:0.0432260767859168 908:0.0363017077278968 914:0.0437323890000569 922:0.048516012913621 947:0.0415187275096454 949:0.0588039620126968 980:0.0599069406413416 1011:0.0409606776233956 1013:0.0422888457555394 1046:0.0383443944388662 1204:0.0525767948546152 1213:0.0868506577474092 1266:0.0464960110982711 1354:0.0488694320199562 1393:0.0781489297820331 1433:0.0329053273211476 1468:0.0478468358147445 1546:0.102652681637075 1548:0.0375588867156687 1549:0.0540203380991327 1567:0.0500175408315221 1607:0.0441581211671273 1746:0.0797326042283442 1788:0.0840500794475709 1828:0.0464960110982711 1834:0.0534159674515061 2163:0.0431280183524303 2196:0.0528482484938433 2310:0.226748652904825 2356:0.0676483678672551 2384:0.0663979138311772 2458:0.0569247823222042 2547:0.0540203380991327 2634:0.0643082871982085 3027:0.0582976497985567 3085:0.123702756799255 3467:0.0494259023338262 3616:0.0618513783996274 3789:0.151165768603216 3990:0.0690919111117726 5141:0.0755828843016082 5367:0.635038881686787 5925:0.145777774042026 6879:0.0755828843016082
+-1 8:0.551157379495859 9:0.251318716676167 17:0.0596731582514233 18:0.058620323739034 20:0.0617739181253778 37:0.207257306657273 67:0.0619455486015042 100:0.0676707571642387 112:0.243856166341824 119:0.114578507475919 142:0.0113590009858219 145:0.0918962104173224 162:0.0593105896176549 181:0.0924339878315087 199:0.0511890379761366 281:0.126409463846375 291:0.0881432086721754 296:0.0987513983302532 303:0.3913781836243 323:0.0936803766477394 331:0.0856072376884798 409:0.0559270724885151 431:0.122109639680668 434:0.0947600440882794 442:0.0931895079094088 506:0.0612648315387749 507:0.0585543577170479 532:0.126620324437652 672:0.153010741219123 724:0.128139294599154 780:0.111102479230675 829:0.0812390378171214 1010:0.121928083170912 1043:0.122476077282447 1067:0.232959915071819 1393:0.125376801701987 4352:0.233875897208078
+-1 6:0.0228422410207469 8:0.344891391352961 9:0.0873693402002403 10:0.09633158983511 22:0.121797073657796 52:0.186229336009913 63:0.02468673123355 69:0.115872193285581 75:0.0231468403520282 80:0.148728094763096 96:0.0707626326794766 142:0.0296166288744001 174:0.0837195858755267 363:0.106692807107392 409:0.0583280643074676 475:0.0925466015710812 506:0.0638949774192752 627:0.580441949141512 818:0.350121801384759 1125:0.404991758058161 1190:0.123597632595697 1471:0.132277698571916 1917:0.284237267277859
+-1 6:0.00652585475097636 14:0.39724566553971 17:0.0355601177528273 31:0.0248730640610411 69:0.13241522184657 86:0.050695435191964 142:0.0355372327918229 151:0.0515374522818844 187:0.121701475545031 199:0.0610086099487436 201:0.0783204992171367 595:0.37106791897891 835:0.213112699725712 922:0.0927669797447275 1074:0.34114846022473 1399:0.435381212224416 2209:0.111470349133112 2379:0.0981405794322282 2401:0.0883778767552309 2546:0.109678279117673 2664:0.132109947493869 2994:0.135374552852331 3440:0.135374552852331 3620:0.139370106895071 3943:0.258699525984488 4804:0.303562862736878 5606:0.139370106895071
+-1 6:0.00809406008863922 59:0.0502598094913268 85:0.0992054032351206 119:0.0846869219560981 142:0.023087984306448 157:0.0820246123455 194:0.192386491796899 226:0.0627604752658485 247:0.238217199092946 288:0.0840671061200794 295:0.0687242553777022 400:0.0713209176402624 409:0.0413366496684674 438:0.0902533097483178 456:0.175424826108335 465:0.0688265994572091 476:0.703526618583606 498:0.083168657163481 571:0.0638811481884793 623:0.112352482922527 773:0.12668011059302 868:0.115474614879238 896:0.102513994391539 1381:0.124064311210835 2345:0.133069134132712 2844:0.152512091851798 3570:0.445388941782847
+-1 4:0.0100011102170959 6:0.027745475061742 12:0.0155865206756989 14:0.328404779017972 20:0.0391276788617291 27:0.00673234742681714 30:0.0138978054826508 33:0.0255890717769522 35:0.0501800564776674 41:0.117111298557151 42:0.0138331597322612 51:0.0471096417671409 54:0.017312161920074 59:0.129213485776452 67:0.0130787966083783 70:0.186208346083365 72:0.0863333140350941 75:0.00937181953326458 77:0.0174347559566291 78:0.0177628780628665 80:0.0150544614561602 81:0.0140775354624623 83:0.0359451399044911 98:0.0899880411282652 109:0.0508890726482285 127:0.0459899209112808 137:0.0189282304653908 142:0.00719480577322674 147:0.0893081651052712 148:0.0406486254783503 149:0.0257431346826925 154:0.0167139520041254 159:0.0278192607166889 161:0.0225638784685048 162:0.0375674034298632 169:0.016853591771703 181:0.0195159354278487 185:0.0134640508488835 189:0.0173020518876986 199:0.0864618725810671 203:0.0175282816402309 209:0.0290487016662318 212:0.0261780992851905 214:0.0198090149765877 215:0.0147297634123817 216:0.0201162926613223 218:0.0131152417704157 224:0.0219887631698758 242:0.0324024030777822 258:0.0438512756667968 286:0.0129554077469217 289:0.0201162926613223 294:0.0220953882675328 326:0.296573581278395 330:0.0919798418225616 353:0.0518743145308139 362:0.034024175775869 364:0.0214226769337536 369:0.0413509123525745 372:0.0456476395940881 381:0.0666772497670559 387:0.0326424551450988 413:0.0199915899931879 430:0.017995205547358 441:0.0489118240154845 442:0.0393509024457142 466:0.0854596635663498 485:0.0640023305636979 506:0.0129350742552426 509:0.0214614785469005 517:0.0257814673912992 525:0.0372648759955272 537:0.051717669480136 550:0.0376750142929039 557:0.0870412454829847 567:0.0501800564776674 571:0.0182480813560494 572:0.0250556430924721 574:0.017312161920074 575:0.0241318222041276 580:0.0209208365304699 592:0.0455515172559871 594:0.0221385451956849 604:0.0341667445615912 607:0.0226807149930736 608:0.025229463389534 609:0.0163733706932689 622:0.0255178786897896 628:0.0251246007711141 631:0.0155175213299646 635:0.0349320138204853 653:0.0236194686062636 673:0.0233780170724605 681:0.025300347299851 683:0.0559247383040016 689:0.462324520030125 712:0.0212321507837914 714:0.0717828853489664 726:0.0426153520175693 730:0.022225749922352 754:0.0281830538020933 803:0.0288952825018828 829:0.0171523035352484 844:0.0253360884871909 851:0.078781471874092 866:0.025858834740068 876:0.0223141700849856 886:0.0199148775231321 918:0.026733825225445 952:0.0215398010722394 966:0.0230948687247473 987:0.0188762298138118 1003:0.0488708458136935 1043:0.103435338960272 1055:0.050458926779068 1057:0.062998110262029 1059:0.0211947226871886 1076:0.0316913136008271 1080:0.0233780170724605 1114:0.0282963433121302 1133:0.188728642631706 1135:0.0628101351506624 1166:0.0382820968183362 1168:0.0300645133932317 1177:0.0312211693667411 1184:0.0304538406876138 1207:0.0526879321837126 1214:0.033614740559826 1237:0.0283537558666162 1253:0.0565926866242605 1277:0.0272939574076596 1305:0.0210289762620061 1329:0.0311311814186125 1333:0.0328675198023596 1337:0.0297693883684237 1372:0.0323057331556754 1377:0.0220525229424729 1414:0.0385641007547587 1446:0.0241318222041276 1467:0.0284116927439234 1531:0.0315944560862743 1547:0.0310424520845091 1555:0.0346147455132561 1559:0.033614740559826 1563:0.0398371644708441 1582:0.0783375054530057 1587:0.0372648759955272 1608:0.0250556430924721 1655:0.0435661089196704 1747:0.0347713965333354 1752:0.0311311814186125 1759:0.0350968034484452 1776:0.0267786596450722 1849:0.0857662419689059 1851:0.0313124521498518 1860:0.042409452946161 1863:0.0278548404087369 1865:0.0274420741115079 1876:0.124294542764651 1942:0.0299894350735236 1995:0.0299152348829571 2002:0.0716048475369974 2090:0.0372648759955272 2119:0.146385857004744 2142:0.0300645133932317 2153:0.0368115371857662 2170:0.0358024237684987 2172:0.0777184515591335 2193:0.0385641007547587 2290:0.119511493412532 2293:0.0344618695863992 2311:0.0343125910761246 2406:0.0375043022958022 2409:0.0331069461026347 2419:0.0350968034484452 2523:0.0359918122794418 2592:0.0313124521498518 2621:0.0391687527265029 2631:0.0334839308951219 2651:0.0405843852283104 2686:0.0352659879806147 2709:0.0346147455132561 2825:0.0312211693667411 2871:0.0401997799616662 2983:0.0382820968183362 3012:0.0449817414214779 3381:0.0435661089196704 3430:0.0449817414214779 3542:0.0401997799616662 3585:0.0435661089196704 3865:0.0442345206640116 3984:0.204816661329984 4008:0.0442345206640116 4016:0.0959269302256758 4120:0.0435661089196704 4148:0.0391687527265029 4276:0.0394941596416127 4283:0.0479634651128379 4370:0.0382820968183362 4385:0.0382820968183362 4514:0.0442345206640116 4878:0.0493790976146455 5110:0.154256403019035 5444:0.0435661089196704 5552:0.0916577408961024 5562:0.0479634651128379 5683:0.0435661089196704 5900:0.051204165332496 6060:0.0429614569479263 6386:0.051204165332496 6408:0.051204165332496 7100:0.051204165332496 7167:0.0959269302256758 8491:0.174521430002941
+-1 8:0.38856296513107 22:0.411658567925756 142:0.0500502132895199 176:0.200090728051945 509:0.358309017689829 1045:0.200529306988169 2008:0.684410233091366
+-1 6:0.0293903967265524 8:0.0591681280905816 10:0.0495787368670507 14:0.0596356500598315 22:0.0626849933276591 71:0.252502045937559 74:0.0963749947532653 83:0.0152304751651724 140:0.0415373063674795 142:0.00609708633426002 200:0.170357124217572 215:0.0748945631383498 218:0.0333427046772334 234:0.0421672254818518 241:0.388139269374604 258:0.0557412573810148 288:0.0610513283436151 302:0.149237049885343 306:0.0461257523637511 331:0.0459507591975451 362:0.0864992094419562 414:0.0434314408403383 424:0.0605415854638777 429:0.335405401174049 432:0.0552175627180888 453:0.0570144832359166 462:0.216692005482772 485:0.040678068387839 540:0.0664485137242787 567:0.0637860450119909 568:0.0826866417335513 594:0.0562825289357902 626:0.0554772845720042 724:0.206341123561146 727:0.125864984970279 730:0.0565042283522873 745:0.0798406855064508 771:0.124721587794695 809:0.0888071940255631 822:0.0786963490466647 834:0.0592340929211692 916:0.0712268009720124 1065:0.107816988040324 1155:0.273703561566804 1159:0.0597717553282717 1179:0.146602381471037 1193:0.0716494027540898 1197:0.0966376478896823 1198:0.0700216313289479 1218:0.0715073015829091 1247:0.091020025657093 1298:0.102199365807735 1331:0.132897027448557 1337:0.0756823200186235 1394:0.0762417418296568 1427:0.0892261365044834 1485:0.0733011907355187 1493:0.0784769119392671 1536:0.0966376478896823 1721:0.154038327153772 2189:0.105330787515279 2518:0.106526028947137 2538:0.103177142660614 3106:0.106526028947137 3765:0.125535822961899 4651:0.136715163112541 4951:0.121936879285105 7701:0.224913666840069
+-1 4:0.014149238833132 6:0.0098133443354174 8:0.263413576907312 17:0.0534740188730486 94:0.0981855906846972 111:0.0204567963244519 116:0.0350215426027688 133:0.0471906279901717 139:0.0267605834904497 142:0.00508948621870814 162:0.0531491156412937 185:0.0380969846320931 226:0.076091621225135 252:0.165251447085009 264:0.0269280040668077 276:0.0254113205986872 323:0.0279828003951622 355:0.0393745196953273 369:0.029250949251831 373:0.0467032490222137 381:0.188665520369481 382:0.0574623578499092 398:0.0254430917570879 402:0.0249327280746656 411:0.0245069983230084 426:0.0294476769714515 427:0.034748160771858 430:0.0254590196102052 433:0.0264526202243595 441:0.0691988254040228 442:0.0835085262911986 456:0.0354478923377013 461:0.0357940917294206 485:0.0226370933167703 493:0.0292024337668039 509:0.0303629876164298 571:0.0258167799122746 593:0.0315065824153738 607:0.0320879228782643 626:0.246982124292396 679:0.041150720606216 695:0.0322903828057717 749:0.228471507247346 796:0.0862624895106976 867:0.0287541631702325 883:0.0381438600498585 963:0.0277534527906617 966:0.0326738538335163 967:0.041915041134651 1049:0.258877315566954 1062:0.341239887594479 1101:0.0421167427213294 1129:0.0381438600498585 1133:0.0762877200997171 1190:0.0353995076228099 1664:0.0388241357460993 1973:0.0517754631133908 2001:0.0428606878882872 2034:0.0440433623355681 2257:0.0471906279901717 2416:0.425463104841599 2526:0.0489717932093105 2571:0.0871028792411776 2866:0.0448358187581291 3320:0.0487555094214129 3469:0.054160240129121 3698:0.049653792778192 4220:0.0523946977909958 4698:0.0586159314001526 5154:0.132441440430699 5990:0.0636386749757756 6977:0.493814254819477
+-1 6:0.0181224315220539 8:0.273627732789572 10:0.0764269424620703 22:0.0966305856305947 52:0.0738747215339307 70:0.208500283990483 114:0.0636260403999651 142:0.00704911564766664 171:0.0783470933250864 173:0.135455465822066 199:0.0847110760384597 200:0.087536680395159 206:0.0864238949286308 218:0.0513986667052477 241:0.358996208644565 243:0.0854391196692431 354:0.270112313584122 408:0.053356336136697 514:0.192509650914598 527:0.0864238949286308 557:0.0852787170168915 633:0.0942265573172923 747:0.0998605033174432 761:0.0921397517161577 771:0.0961308235799178 800:0.0799073495321415 1045:0.0470712038571218 1067:0.0963794489005719 1075:0.253212504992899 1159:0.0921397517161577 1309:0.106965090268333 1389:0.115561136497593 1602:0.124975351548287 1620:0.109584597637748 1928:0.130721326237591 2029:0.366872014195776 2415:0.13225969262668 2468:0.134471133920949 2724:0.328425417811174 2771:0.130721326237591 2794:0.170735694484699 4370:0.150027637277885
+-1 6:0.0498501067818821 8:0.286734816413674 9:0.27238826863971 10:0.0600659107882885 22:0.0759444765016987 34:0.113508693009886 35:0.23183528653637 52:0.0580600543501913 57:0.0531670436918238 75:0.0721640767060686 77:0.0536998418179101 83:0.0553563334008095 84:0.0417954198674053 98:0.0461945436853492 123:0.144500237910499 140:0.0503235115760474 142:0.0369338820394136 166:0.0531361504930413 173:0.266144885028346 179:0.0388203808005692 200:0.137594682344594 218:0.201977707696901 223:0.0967290374050137 234:0.0510866747326479 242:0.0499004380711012 243:0.201446441839392 284:0.0432474728419279 286:0.039903245472828 289:0.0619590969075229 317:0.0424453475859163 326:0.166083659576189 362:0.10479600986065 378:0.0985340069222217 428:0.105235128209109 429:0.0812704484943004 462:0.0875093066930852 478:0.055847036623855 520:0.211368684222957 557:0.0670227493533248 572:0.077172521029764 576:0.0697128934095578 612:0.082899720476917 631:0.0477946719127038 684:0.0666493632627892 745:0.0967290374050137 758:0.0746029732667979 800:0.0628012527219473 874:0.0973123626379607 1045:0.0369944765614876 1155:0.082899720476917 1166:0.117910600453282 1309:0.168133261976496 1340:0.095612165190323 1366:0.077172521029764 1416:0.0859590711799695 1494:0.261246090333376 1740:0.101970900723138 1828:0.0970185233539768 2035:0.147729655408163 2144:0.0995031283825779 2172:0.119688183919532 2182:0.147729655408163 2685:0.132323242614326 3621:0.108620847967262 3819:0.144167102369296 4059:0.144167102369296 4868:0.136244336798148 6612:0.152089867940445
+-1 6:0.00366635309493801 8:0.405956368540049 10:0.0618478059506449 13:0.146203829045764 25:0.0275164262147531 27:0.0213510818059506 35:0.0397854723975685 41:0.219468822049629 42:0.109676798579127 46:0.122799378435336 51:0.0249007206414773 57:0.109488558753779 58:0.0737825473746587 59:0.0227661032981657 63:0.00792481555376472 65:0.0524596031549938 67:0.0207391596574877 72:0.0912663163717909 82:0.0275002918010386 84:0.0215176543871621 93:0.0363461025576509 98:0.0237824677619566 105:0.0389466696881842 109:0.0806952378016959 111:0.0917141018838779 112:0.0816422177444914 118:0.0240077807591708 119:0.0767209916937283 120:0.0305459210953917 127:0.0364633054926201 135:0.0334036426690298 142:0.0152118200783067 144:0.0217972366563458 145:0.0307665396915486 148:0.0644568731279827 154:0.0265034566635197 159:0.0220566198417327 166:0.109424939421667 179:0.0399720131964081 183:0.0322542640616046 203:0.0555894922664805 212:0.0830216719261986 214:0.0314113244940168 218:0.0623908531880431 225:0.0349350597646761 236:0.0505675815502375 237:0.0315069053061083 242:0.0513807677294953 243:0.0691408281381891 253:0.0400626195344568 255:0.0341246535928227 277:0.298824542170544 283:0.137420916115328 286:0.0205435008844118 309:0.0269818733405281 322:0.0317745337928237 323:0.0313638724966248 326:0.0427526604284999 330:0.0364633054926201 342:0.0342500110379292 347:0.0301186889608976 348:0.0364240859310744 354:0.109292962777632 357:0.0339394985845823 364:0.0339701220627044 376:0.0467583977279098 391:0.0379422451087402 402:0.0838358091346021 430:0.0285351513668229 447:0.0515744016064865 448:0.0332027269078382 453:0.0711236493379633 458:0.0386005980507531 460:0.0499483211630981 466:0.0677570597681111 472:0.0334036426690298 485:0.0253722607621547 502:0.0253072327089951 506:0.061533773678173 508:0.028446204679539 509:0.0680633002251581 550:0.0298707962175255 563:0.0561972071368287 582:0.0309239029753224 593:0.070626843612909 598:0.038747459123165 616:0.0505675815502375 626:0.103809068595644 631:0.0738187989278269 647:0.0331178335365738 653:0.037453593409085 656:0.0361919262863526 681:0.0401189771316857 702:0.043674814451137 742:0.0376285509458038 747:0.040405600645192 758:0.0384080600243366 759:0.162535497337465 763:0.0424631496629365 767:0.035071005141542 770:0.197459922682252 806:0.0393573309843831 829:0.108794217744263 850:0.0336086530640134 858:0.0367826912001466 877:0.0690831515769382 909:0.0322801580393365 918:0.0423920553402216 937:0.0496524232196728 951:0.047794034202587 960:0.126754069428438 964:0.0439191941963161 1010:0.0408211088722457 1032:0.0484190677920626 1065:0.0672490323057484 1075:0.102454954814198 1082:0.0502531870632524 1112:0.0441696587054935 1115:0.0515744016064865 1138:0.0361537486132274 1146:0.0419757281442421 1218:0.0446014762761451 1228:0.0902907639358181 1232:0.0415108359630993 1254:0.0504091561533028 1267:0.0492242818064874 1292:0.0440019914109913 1341:0.0421125983480261 1358:0.0490855236783675 1382:0.048039407459672 1432:0.0435946562198962 1446:0.0382660368918731 1501:0.0598654456792082 1525:0.102798888139535 1545:0.0468683420440498 1555:0.0548888980537284 1581:0.0523063465075468 1652:0.0439191941963161 1849:0.0453334211772055 1911:0.0496524232196728 1916:0.0447795305667116 1954:0.0519337185450998 2076:0.0457203844535063 2150:0.0548888980537284 2339:0.0573820814836441 2616:0.0486803761147235 2679:0.0526933097838477 2992:0.0561972071368287 3101:0.0559215788049248 3337:0.0611514244428297 3459:0.391504287373341 3527:0.0631701324671701 4207:0.0607042483885925 4534:0.0656983065577356 5784:0.0701430577975114
+-1 6:0.0153852488186477 9:0.117694147161908 27:0.0223990773410087 35:0.0834766014557011 75:0.0467712293891851 78:0.0590985661173992 104:0.111403810625295 115:0.103576018304531 118:0.050372355171322 127:0.0765061374651657 142:0.0159584763680002 184:0.0906475148121629 275:0.051729799794904 302:0.097653034714423 307:0.0738740012420786 330:0.153012274930331 349:0.0762602260280939 367:0.0656582024721774 532:0.0889456501398732 594:0.0736567729823775 608:0.335762054990374 671:0.0939582516382991 727:0.0823595598819197 778:0.0735131863089345 959:0.0855227705645688 970:0.126469393375728 1056:0.151078456554129 1237:0.0943352935165843 1372:0.107483849189 1595:0.0963470206929836 1629:0.11320125007691 1649:0.0873708267301232 2275:0.12106736680148 2785:0.141099761540386 2825:0.103875415659139 3111:0.492865039359342 3116:0.55764114933961 3429:0.137846078539204 3775:0.141099761540386
+-1 6:0.0201766473069597 9:0.0771737046755137 10:0.0850900973707599 22:0.107583866048043 52:0.164497153649176 63:0.0218058932487684 69:0.102350394362951 75:0.0204457011739431 80:0.131372149954354 96:0.125009860528917 104:0.584392341556026 142:0.0261604925137223 174:0.147899722742703 201:0.121075717274642 363:0.0942422040481976 453:0.0978517855970601 475:0.0817468013607525 506:0.0564387015662755 530:0.0829320812249372 1045:0.0524068239619708 1125:0.357730918658256 1190:0.109174307310458 1344:0.15967878370829 1471:0.11684144599638 1917:0.376601955658632 2423:0.130207034974933 3901:0.386010758256226
+-1 6:0.00632197147810136 10:0.0533227508478334 14:0.192417381567196 26:0.0273632354300555 27:0.01840806473198 34:0.201531806543737 80:0.0411629827489624 91:0.0505153670707001 98:0.04100862054927 111:0.039536149494854 119:0.0661458278430767 142:0.00327875855703317 151:0.0998545986121851 153:0.109664159157203 159:0.0380327038700337 162:0.0342398250469908 175:0.0611965569524283 183:0.166850163225805 226:0.0980397798478625 247:0.0930313292566617 291:0.0508848093312044 323:0.0540813997539487 325:0.0567689598148767 336:0.115599477069714 372:0.0624065167197805 377:0.0486578662576023 402:0.0481866294624182 404:0.053089910603926 423:0.0957969553830158 478:0.0991549975818986 541:0.065190742353257 561:0.056022765725372 576:0.0618867373752401 580:0.0572032440818541 609:0.044769238497974 655:0.0957398480854452 713:0.0632166096516619 790:0.0955136048185085 828:0.191928368756215 880:0.223092753662802 882:0.0474750310083808 996:0.0703887157925718 1025:0.077060116753226 1139:0.210889432175314 1168:0.0822045378219193 1184:0.0832690642912997 1319:0.0667282536047982 1409:0.0830508684870297 1418:0.0802534567353049 2198:0.0964267807984025 2740:0.0915541531536727 2896:0.106251667989612 2901:0.221937444111838 3364:0.357364691215706 3475:0.102546939517539 3668:0.125308567772488 3949:0.540063408894447 4372:0.140006082608428 5931:0.147039417307458
+-1 6:0.00784832101653323 9:0.360228733216527 14:0.318498406165679 27:0.0228524285201444 42:0.0469555823471061 82:0.117736133162339 85:0.144290228137177 111:0.0490815869809097 137:0.064250402764443 142:0.0407036788768142 173:0.0586619945519945 201:0.188384339979146 234:0.0563010300672681 235:0.357400090002635 317:0.046777693070775 357:0.217956159541541 453:0.0761248599653923 498:0.0806436217157776 609:0.055578130432085 698:0.0881758293244153 876:0.0757437108522133 1045:0.0407704582087448 1151:0.251419125084938 1399:0.13090283374731 2071:0.281272090688493 2329:0.167613497505047 2330:0.167613497505047 2370:0.162808243333301 2510:0.124953893333469 2588:0.173808547600125 3272:0.402179538407967 3412:0.152687014703269
+-1 6:0.0305514231209934 8:0.246021927963888 10:0.103074550637911 12:0.164763000670998 14:0.061991472759787 17:0.0332956293131236 19:0.0741856726453671 22:0.0651612760558545 27:0.0177916833827368 35:0.132611646484886 42:0.109671344570926 48:0.0747610316486259 51:0.0829982745945304 52:0.199264905288858 58:0.163953062924221 74:0.100182153728141 82:0.0458315404440621 83:0.0158321337215765 115:0.164541752828805 120:0.0509073368462112 130:0.091072939880682 134:0.0437615892464327 142:0.0174293437368275 189:0.0457244122356817 199:0.0285617735560058 203:0.092644546520043 218:0.0346598614530501 225:0.0582222041898482 309:0.0899351052861388 317:0.0364186197434744 347:0.100390637395446 368:0.223439435704764 390:0.223262184979377 402:0.0465731334151161 406:0.0572920680417788 414:0.0902942779720156 433:0.0494122186388549 484:0.135068537769174 506:0.0341837298480404 520:0.0906784391482818 526:0.0733330054663623 568:0.0859530615241222 608:0.333371553846823 724:0.0714974467321209 849:0.229086090602108 886:0.0526293687824517 909:0.0537975880192184 1218:0.0743320972229764 1366:0.066214953060269 1395:0.130493193778388 1398:0.108335032011192 1463:0.179832478743313 1507:0.0837511467876673 1752:0.0822708764144024 1818:0.0991132259870351 1875:0.0956320466455116 1939:0.167502293575335 2184:0.0991132259870351 2278:0.0991132259870351 2394:0.0941296533208497 2822:0.108335032011192 2875:0.11689928287217 3074:0.104371854163658 3475:0.0991132259870351 3536:0.230265720699163 4053:0.121112696821363 4386:0.260989879097898 5267:0.126753824650727
+-1 6:0.034958495534584 8:0.255918936056057 9:0.0486228472539979 10:0.0536105247853806 13:0.0211219133815631 14:0.0322426376472453 22:0.135565187853637 37:0.0150368432022565 41:0.043901210560071 52:0.181370844073828 59:0.118403819799864 63:0.00686933859874852 67:0.143815899788971 72:0.0395554461529712 75:0.00644084801527577 80:0.0206925662293838 81:0.0193497678911856 98:0.123689811576567 116:0.0340251099703041 118:0.0208102729862172 124:0.477698179937687 142:0.000824113366678679 151:0.0501967485615035 158:0.0228105640609643 168:0.0236032443431981 171:0.0274787179315174 196:0.118211046856057 203:0.0481857328186725 224:0.0604477203677991 230:0.0456752821990971 250:0.0444046786302721 271:0.0350746784506054 282:0.0450168581158864 291:0.0255797130537644 337:0.0242966814823263 376:0.445839011095869 382:0.0279137196663855 411:0.0476194508300439 422:0.115919602389044 423:0.0481569777371477 433:0.0256999904985728 459:0.0290304513272183 485:0.0439860458602558 490:0.03288885742266 496:0.0266495443886713 500:0.03288885742266 543:0.0351766676424475 581:0.0951568963303201 604:0.140887993916355 663:0.0594864423803304 692:0.0444046786302721 695:0.0627433142172747 712:0.0875516578720433 713:0.0635577790847573 715:0.039213751695805 721:0.0420828281206842 796:0.0279360499641121 800:0.0280259474252354 813:0.0444046786302721 856:0.0238516148942829 862:0.0305798270166735 863:0.0335868279523229 882:0.0238656228916679 1005:0.0335017543360995 1035:0.0388155100480063 1042:0.0362101470509471 1048:0.0863334025774663 1114:0.0388937166394646 1157:0.0871203008478191 1236:0.0350241277206483 1255:0.050016421592605 1279:0.0487125083868349 1288:0.0417495400432084 1343:0.0552551555355074 1347:0.0960290757143441 1389:0.0405308191905335 1424:0.0295527617140143 1431:0.037122474165346 1433:0.0306405936493246 1457:0.0420828281206842 1511:0.038360451506885 1531:0.0434270184257617 1560:0.0484735899758749 1721:0.0416412159607885 1776:0.0368076393734457 1815:0.0413240909583703 1842:0.0487125083868349 1910:0.116681149918394 2010:0.0465750463139207 2181:0.398637339927174 2212:0.0538379942899827 2475:0.0512210892971988 2478:0.053006891762172 2663:0.0515501840701952 2806:0.0505979688107805 2838:0.0477937671665956 2882:0.0509039642947806 2955:0.0542852706114916 2975:0.0451768621738117 2983:0.0526192734373078 3073:0.0563465752003467 5653:0.0608009626336092 7046:0.0703808359700195
+-1 6:0.0235192186443067 9:0.0359834853876536 14:0.190890093223599 18:0.125897720069196 37:0.111280613580346 41:0.0216594825670659 51:0.0319470317235012 53:0.0724519428215997 69:0.0954450466117997 83:0.0365638693617313 85:0.0288264918203206 87:0.131463414732956 94:0.0282380598838194 100:0.029067031701365 124:0.271939988460136 137:0.0385080902633414 142:0.00975820149165418 144:0.0279653356612104 162:0.0509520762257432 185:0.0547832388608148 194:0.074536634111614 207:0.0556272098575898 214:0.0805999629115964 218:0.0533639861205364 220:0.0377350154957158 223:0.063891296079072 261:0.194021241469855 275:0.0316314538983061 277:0.0425983081013564 284:0.0856972373387441 318:0.170332609982846 323:0.0402391016729255 381:0.0452166506396516 391:0.0486789971102567 396:0.0477768665021359 408:0.0553965105236993 416:0.0457640043236981 426:0.0423455855365556 442:0.0800565116794304 465:0.0399984142309567 475:0.0762315310537469 484:0.0519895007702132 485:0.0651040129429292 506:0.0526309110505248 509:0.0436617968372644 549:0.0502283959721481 586:0.0345778716031584 595:0.0668665473825262 601:0.127034337446368 609:0.033310416297202 612:0.109513559277671 613:0.0435043986665653 703:0.270417047525414 706:0.0478862441909727 723:0.0482765349679316 740:0.0673536425496771 746:0.0692196787390454 767:0.0449952645934927 789:0.0483332668836204 796:0.0413483167870114 811:0.106850066643522 836:0.0533409516560588 867:0.0413483167870114 874:0.0642765930505756 939:0.1367734259178 1032:0.0621205111710217 1099:0.0666297244070947 1114:0.0575668256141721 1204:0.072463265904121 1296:0.0478862441909727 1363:0.0532574142120696 1370:0.077332810139837 1393:0.0538538598118905 1410:0.0648770031689465 1490:0.0762997397306141 1529:0.0698064384171822 1540:0.0611640373666649 1652:0.0563472804848542 1659:0.0661687293298056 1746:0.054945198898135 1779:0.0640825068361737 1792:0.0555275453466038 1834:0.0736198443375554 1865:0.0558288778674503 1915:0.19515627171646 1992:0.0614750521760662 2156:0.0758126445634632 2256:0.071401860708461 2310:0.312513305047944 2321:0.080347957889398 2356:0.0932354602881312 2376:0.130586755331582 2384:0.183024077398859 2410:0.0657236338418858 2502:0.080347957889398 2525:0.0784558216101679 2547:0.0744528101177007 2611:0.0569981657948101 2877:0.0768059414742199 2902:0.0673536425496771 3251:0.0671077972110412 3304:0.0842893631071942 4404:0.095225004501711 4621:0.0915120386994294 4707:0.095225004501711 6078:0.100458135880366 6877:0.355050990726721
+-1 6:0.0240404908386342 8:0.322652067733785 9:0.0613016857891675 10:0.135179888920041 37:0.0379156667823444 42:0.0479438105237346 75:0.0162407124858676 83:0.0415269543181066 124:0.0926557255168667 138:0.0671972987515442 142:0.00415603293611199 147:0.103176565800406 196:0.0745178127200555 200:0.0774150996431618 203:0.182251769667489 214:0.0686552948914801 216:0.0697202766729548 218:0.0909112131405994 286:0.0898032880842912 357:0.0741810898243819 368:0.293035651496862 402:0.0610795871798645 414:0.0592094284711001 432:0.0752772707247743 483:0.0778056529906555 507:0.042847753870025 518:0.0698845681623719 534:0.0610795871798645 549:0.0855694025858592 557:0.0754182172033651 572:0.0868393793049505 612:0.0932839846969995 638:0.195747993800467 647:0.0723851879615427 770:0.107896351390572 920:0.105272205562195 960:0.0923482019673315 991:0.0851251940360768 1123:0.182030427051968 1160:0.101493635086003 1162:0.0929676112478205 1255:0.126117293985341 1283:0.0992930424978875 1343:0.557307418082679 1366:0.0868393793049505 1551:0.0857949181562976 1560:0.122227016704773 1571:0.24817245729393 2518:0.145225329144451 2548:0.111597636812262 3165:0.166234709057014
+-1 6:0.020423280900083 8:0.205578596228053 10:0.0430651072494834 13:0.0339342869234275 17:0.111288758548811 30:0.0306902784654361 37:0.0483161295503997 42:0.0305475223962466 47:0.0241662502503342 52:0.124880940021774 57:0.0381188665697015 58:0.0342502402145616 70:0.0587429432758881 79:0.0346252111222993 83:0.0132295029663139 98:0.198719002380138 109:0.0561887203116923 118:0.0334336081069985 124:0.118071668457215 148:0.134645462917702 162:0.0276531445660051 196:0.094958432720249 219:0.0426915000342429 224:0.19422958988351 233:0.0603809457805071 240:0.0459643133436385 250:0.214020540397283 275:0.171672919393389 279:0.0578086344467308 284:0.0620137789226658 308:0.0377254398958234 341:0.0426608112151934 373:0.0728982043067147 384:0.0553299342546188 394:0.0951319247952287 411:0.0382525029435372 422:0.0931177250957074 423:0.0386842960288796 459:0.046640076921929 463:0.0627410394449632 496:0.0856298640494535 546:0.0441130303780768 561:0.0452457229984387 568:0.0718233121570616 572:0.0553299342546188 576:0.0499816483585191 580:0.0461991139285629 644:0.0486511064510027 653:0.0521584554940537 655:0.0386612352166043 663:0.0477852069393982 671:0.0623628447192812 715:0.0630004809389582 761:0.103837944101097 772:0.0946146384611177 806:0.0548096299890879 876:0.0492759878160773 882:0.0766846147110035 900:0.0745257845501071 994:0.058456050513724 1033:0.0611625515021369 1080:0.0516252623350635 1143:0.0605998477387436 1255:0.0803559587877151 1275:0.0771397493544911 1302:0.072842629986704 1394:0.0662251399745456 1457:0.0676099147931882 1464:0.0652695805682475 1625:0.0689451570665578 1800:0.0808153258528014 1892:0.067793047339423 2010:0.0748270744480985 2209:0.0872142554213022 2594:0.0872142554213022 2960:0.0803559587877151 3044:0.0828200885777921 3110:0.174428510842604 3147:0.0778772585956031 3464:0.565366271173626 3702:0.0962062691170419 4945:0.317750619473945 5108:0.105916873157981 5897:0.113073254234725
+-1 6:0.0143434533577052 8:0.0962531280116245 10:0.161306725776863 13:0.0317764720953781 22:0.0509871351510226 33:0.0264573345154784 52:0.038980001896026 58:0.0320723345356829 59:0.0296884062844162 67:0.054090292910028 79:0.0648469235559341 85:0.0293002534894392 98:0.031013808385025 124:0.221127444725836 132:0.0289977938111628 171:0.0413398491790904 196:0.177840424015078 216:0.0415977170872791 220:0.0383551882186714 224:0.0909394553797022 256:0.0325371841644448 271:0.105534903103323 282:0.0677247799429808 299:0.0395801259973572 326:0.0557521125120807 333:0.144702282530881 351:0.0339302497042935 376:0.0609758416174083 403:0.0553745725739021 441:0.0337143006728219 470:0.0744261007664352 480:0.0351660788139744 506:0.0267479484630425 513:0.0357782555449558 570:0.166403831518376 581:0.143157033470395 596:0.482133097014565 609:0.0338578709969401 645:0.0608340174530766 864:0.142524780832007 882:0.0359041951435074 920:0.0628093236731051 1049:0.0756764375993864 1160:0.0605548876157115 1244:0.0674884022428129 1322:0.0537161979200146 1457:0.063310732759598 1489:0.0560425732505257 1556:0.0866468471431242 1614:0.302087593717345 1686:0.0839229078295499 1791:0.134056105988005 1824:0.0677247799429808 1851:0.064749829790599 1854:0.079745238346335 1953:0.0839229078295499 2010:0.0700689673704988 2181:0.085674653748994 2789:0.0756764375993864 2819:0.186032067165281 2959:0.0831275972153379 3973:0.0914708841759314 4511:0.0991818266854673 4928:0.473838897510423 5108:0.0991818266854673
+-1 4:0.0137902000400657 6:0.0127524392459959 8:0.192547067106983 10:0.0268901537665823 20:0.0179839540109036 22:0.237990407010696 25:0.0239271521648478 27:0.0185660223194677 35:0.207574859738851 52:0.0259921770715441 57:0.119008432688787 63:0.055128748523779 67:0.0541017599839754 70:0.366795040875975 75:0.0516899677326589 77:0.0961608329765837 80:0.0415161977959263 83:0.016521188114487 109:0.0350846294280857 114:0.0223862679154402 116:0.0341328663611908 142:0.0239749758822256 146:0.286280440209696 154:0.0921852620733833 171:0.11026296846675 173:0.0476588253715249 200:0.153995091273617 208:0.0238851300230001 211:0.0317069902953994 216:0.0554753810011889 241:0.210516146555327 242:0.0223393008636998 252:0.0460166199768877 256:0.0216960546709956 257:0.154525891659983 258:0.0604650734098985 271:0.0351857587899385 276:0.0495330100044075 277:0.0577434506073889 284:0.0193609183557452 301:0.028896470984616 333:0.128651519317746 355:0.0191876930442582 366:0.0803924707014396 369:0.0285087025741632 395:0.212699051297044 402:0.0243000568263143 403:0.0738484158846935 429:0.0363829471327511 441:0.0224809653747248 461:0.0348858119523245 472:0.0290464333836184 478:0.0250014589392727 479:0.121135450351183 484:0.0352367653039726 485:0.0220626741017981 508:0.074206947795583 525:0.0513833047823146 546:0.0275444842875813 557:0.0300045735146233 568:0.0448469777804116 593:0.0921212962501064 598:0.033693196318645 639:0.0366795040875975 653:0.0325681039254666 689:0.0796854983627766 744:0.0786758806847064 755:0.0665491427056483 764:0.0294858435413657 787:0.0366193829411643 790:0.144499794901783 886:0.0549199316587764 895:0.0331527931581869 914:0.0408514414627683 922:0.0453199357927855 929:0.102130350911136 930:0.0279130866998882 952:0.0891015574755824 961:0.0544571902568507 987:0.0260278088616348 1048:0.0433034087950841 1049:0.0504616539392074 1086:0.0401962353507198 1153:0.0445453067696626 1164:0.135291170600215 1228:0.0392565668032565 1283:0.0790059883034612 1289:0.0431757044486232 1294:0.036209721821264 1331:0.0360398603215363 1350:0.0451594250073338 1379:0.033650420720585 1486:0.043564550347822 1490:0.361994092512531 1503:0.0431757044486232 1558:0.0384081179971364 1599:0.0386314729149957 1665:0.0687225520106175 1738:0.0430498376386406 1808:0.0961666381832195 1858:0.041048024845203 1863:0.0384081179971364 2013:0.0501748219351928 2144:0.0445453067696626 2312:0.0680872042325737 2358:0.108914380513701 2364:0.0517134417875044 2546:0.0535817009581869 2608:0.113050045857473 2855:0.0527859169250623 2862:0.0540084974261174 3053:0.063191913434626 3283:0.0524136227666056 3923:0.0620238352430446 4020:0.0517134417875044 4115:0.0680872042325737 4587:0.0661352354051755 5074:0.0706037297351927 5153:0.0504616539392074 5402:0.0600718664156464 5833:0.0620238352430446
+-1 6:0.0193339921044748 8:0.291920894769607 9:0.0739506308540553 27:0.0281479740473021 59:0.0600269054860133 75:0.0391836184727393 112:0.21526431748256 119:0.202288624314715 142:0.0200543429446779 151:0.0763443819641877 168:0.0717964869586444 176:0.0501082789746597 183:0.170088278612252 199:0.135561550333025 226:0.149913704614837 229:0.0506247663066611 252:0.13953173195271 268:0.186035794035484 284:0.0587062342199186 286:0.0541666164731747 325:0.0868060402235236 372:0.0954264904316185 426:0.0870255543779842 433:0.0781743817010394 464:0.135523832550569 617:0.135523832550569 743:0.122716442509416 758:0.101269723623179 892:0.546450276018767 896:0.122435757608602 963:0.0820186807044934 1010:0.10763215874128 1050:0.228232310679245 1480:0.140543377353909 1690:0.126339036956267 2137:0.136454611406941 2672:0.15214024429766 2694:0.141672248808427 2818:0.195699473803557 3319:0.173225342373373 3473:0.163764726523039
+-1 6:0.0189534141478008 35:0.205673189649444 59:0.0588453121083042 75:0.0192061563051781 83:0.0245547470963969 85:0.0580759554730132 162:0.0513258867674264 199:0.0885954020633983 223:0.128720070736655 243:0.0893568292722755 326:0.442024463023169 336:0.173284929531942 362:0.13945501954807 428:0.420118100328228 520:0.421911445331139 540:0.107129057480897 607:0.092961533397865 613:0.0876471384581949 629:0.115745124132587 635:0.143175978818102 912:0.0901254278102961 942:0.12261368777511 1808:0.190571240061446 1875:0.296639828968996 1933:0.202390296490306 2524:0.184366835821703 3543:0.176086288113282
+-1 6:0.0200468061072892 10:0.056361682483412 14:0.0677944979190842 35:0.0725127149866479 67:0.113397128349636 85:0.0409508425864317 109:0.147074558296605 132:0.0405281165960813 142:0.0155952863659231 146:0.240017181193844 154:0.0483050089238159 204:0.0401149176409098 252:0.0964506988918873 258:0.126734614403733 271:0.0737492459905889 287:0.0620258399970535 306:0.0524362896942211 333:0.13482660132287 355:0.040217347670716 377:0.0514309401658099 382:0.0586923635262312 432:0.0627719650415924 479:0.423165907333167 484:0.295424621970457 597:0.0597541559801663 626:0.0630672198542277 645:0.0850233010277231 662:0.0696579251219051 667:0.064361987839843 713:0.133638809859321 1113:0.0811301975236293 1164:0.0708924730067431 1225:0.0596056942163926 1302:0.0953331698161863 1347:0.100957047077132 1467:0.0821126607996236 1480:0.097149994346841 1721:0.0875562774884518 1854:0.11145414505425 2589:0.108391220498483 3434:0.127842231142485 3523:0.10516627785474 3596:0.124162948459915 7349:0.621677525563414
+-1 6:0.0290612662753254 9:0.074104336130374 10:0.0817058764179001 17:0.0527860380099237 34:0.154402507540623 35:0.210239108144764 46:0.0811138785314332 58:0.0649817467780237 72:0.0602850355964226 83:0.0752995780208245 104:0.561149768470614 142:0.0301440383932447 162:0.104930629773525 173:0.144811596461281 176:0.0502124282804426 286:0.0542792009725374 293:0.275060575313287 300:0.138201697470981 365:0.102638827854502 400:0.0853579108566875 433:0.0783368659801001 475:0.0784955506683377 608:0.105703744760575 829:0.0718629123003042 837:0.105119554072382 1027:0.101229458360905 1036:0.109507308850324 1204:0.149230741708698 1611:0.19610623222264 1906:0.152456465511988 1930:0.19610623222264 4746:0.21452981141207 4873:0.39221246444528 4921:0.21452981141207
+-1 8:0.326731307280814 9:0.165537902398221 27:0.0630090173232707 63:0.0701605911656975 75:0.065784165078496 80:0.0704484455826847 83:0.0841039461922212 96:0.134073323148481 116:0.115839479821697 142:0.0280571800630429 174:0.0793113728667275 185:0.0630060036562745 304:0.0819270498335303 343:0.2292796502185 374:0.139647303041039 413:0.0935520970874811 418:0.223407237743361 627:0.183293022671731 664:0.122311400054002 755:0.112926614366723 829:0.240796349787629 856:0.0812035189503453 1583:0.321136523185045 1782:0.133228198005821 3245:0.643378581547531
+-1 6:0.0354625964618252 8:0.050994680565706 10:0.042729961737439 13:0.101010600537357 14:0.205590477391724 15:0.0173568654442877 17:0.0552113381147429 19:0.0615079267187568 27:0.0147512251178198 29:0.0367980676537498 30:0.0304514375627188 37:0.0958802380325892 47:0.0239781812814722 59:0.031457695479691 83:0.0131265470275291 116:0.0542390380606653 168:0.0376256614424827 171:0.219017547488699 203:0.0384061623697034 214:0.043403469957292 216:0.0440767451188126 218:0.0287367646921188 219:0.0847185240900083 234:0.0363422718139264 255:0.0471526877926208 264:0.0417043033781687 275:0.0340673819040447 284:0.0307655845973923 287:0.0470241776509536 319:0.0459575460934575 327:0.0426052935058182 342:0.14197771177126 345:0.0371775662994521 348:0.0503299922845451 390:0.0462771099293882 395:0.0844976789869378 411:0.0379548105539253 466:0.0468125995228222 478:0.0794574395616077 480:0.0372618114945935 508:0.117918999923979 509:0.0470241776509536 515:0.0732034542862854 523:0.0593824466804984 532:0.117152799509466 557:0.0953578986090701 558:0.449913814589475 612:0.0589735814796588 643:0.0412185251693037 644:0.0482724890267248 662:0.211241421051929 685:0.0535403777161333 688:0.0562392268236844 708:0.089821430101095 804:0.047723717184294 835:0.248162226350469 842:0.146733069804444 876:0.0488925073785982 907:0.0889243178963749 920:0.133104927119718 970:0.0832881847675009 1000:0.0615079267187568 1054:0.132418452012114 1101:0.0652276125401977 1145:0.0665524635598588 1157:0.0694387368279715 1198:0.0603488877803068 1217:0.095457563229969 1247:0.0784465772917475 1263:0.0688115440683774 1379:0.106944809785822 1437:0.0692265126346938 1525:0.0710226092799306 1565:0.0761874967832289 1576:0.05615673153912 1599:0.0613875760565605 1808:0.0509380596538129 1831:0.0686086147030289 2068:0.401661971384155 2407:0.0918105911644876 2580:0.0941327122103079 3284:0.237867854019014 3907:0.092923217990871 4071:0.0772711945364232 5403:0.105092596453339
+-1 6:0.0410788188102752 10:0.0433099790969288 13:0.0682544803062325 22:0.0547590746007148 26:0.0889002263129265 33:0.0284146020398655 34:0.0818444115316135 37:0.121477147888527 53:0.197726609554412 54:0.0384475213244493 58:0.0344449899814251 67:0.0290458992828442 83:0.0133047270407224 96:0.0318143627385124 104:0.520536896051488 111:0.0321121806540248 142:0.00532616799812956 149:0.171514058886545 160:0.139624216936316 162:0.0556207653764706 186:0.0291384388546621 212:0.0581373392385999 220:0.0411926382364819 224:0.0976669978914399 244:0.226686631582281 271:0.113342191415479 278:0.0443297053965649 299:0.0425081947784529 333:0.10360473690121 342:0.0479683066948579 355:0.0309041960815358 359:0.114342705924363 382:0.22550471574536 389:0.0437613847287954 409:0.0262238716317752 426:0.0462256703224987 470:0.319728056266586 504:0.0545461370589707 506:0.0287267151010826 515:0.0370985597230729 543:0.0568358823717191 570:0.0595713657113025 597:0.0459168557861503 598:0.0542671358794056 645:0.0653344121042933 680:0.0708216198217519 722:0.131907625818939 737:0.0605075173054281 740:0.0735251912583197 782:0.0585057026825038 824:0.0574283041415734 906:0.0600837530561694 1045:0.0266745311201083 1068:0.0605075173054281 1127:0.0591744634323505 1332:0.0630977903094281 1440:0.0636245469560586 1441:0.0669371723201884 1503:0.0695399094180306 1558:0.061861111024051 1565:0.0772216673959216 1781:0.130367450230808 1859:0.242438608726653 1873:0.0679943504952781 2049:0.286231414613712 2066:0.0687459473071165 2074:0.0877101630646958 2153:0.0817524909638469 2643:0.149305841807216 4795:0.0877101630646958 7188:0.113716198335635
+-1 6:0.0246332328289485 8:0.247955529295659 9:0.269199168243901 10:0.0296813319177989 13:0.070164564625355 14:0.0714042202529739 17:0.0191756087014428 27:0.0102465808793964 35:0.190934147717546 41:0.0162038630467076 48:0.0215281752978487 57:0.0262722840658703 59:0.0218513254619571 68:0.0216032434000949 70:0.0404868095904018 75:0.0641872668417026 78:0.0270349634656432 81:0.0214259004406263 83:0.0182360752697476 106:0.0246322867458823 109:0.0774527762323273 111:0.022007221256406 123:0.0714042202529739 124:0.040688675883989 137:0.0288086208377952 142:0.0310262435988117 147:0.13592633875318 168:0.0261357534734828 171:0.0304270458409447 173:0.0789086645028381 190:0.030172021541969 196:0.0327236240657162 223:0.0477982707267495 229:0.0368574137229221 256:0.0239480891625403 302:0.0446719167529236 307:0.0337940673665936 310:0.0361165765880031 326:0.0410347912926739 331:0.0275093683664136 339:0.0547428581547726 347:0.0289084726688846 351:0.024973416295612 363:0.03287379172727 373:0.0251214490852693 392:0.0437890659124541 398:0.0547428581547726 415:0.0306168423404282 429:0.0401594702421134 473:0.0309830905202729 499:0.0524227306800675 506:0.0196870832912441 509:0.0326642048873304 515:0.0254245023380973 539:0.0326938687693909 542:0.0500241117412535 550:0.0286705406458178 561:0.031184255838433 580:0.031841351906498 582:0.0593626638355978 610:0.0453087795843935 619:0.0515723139911257 704:0.0485356965927201 764:0.130185809515926 771:0.0373335736101567 818:0.0539391149691744 827:0.0300582912987554 847:0.0375276622761192 863:0.0371905252750203 866:0.0393569471111386 882:0.026426283917511 960:0.040553630521558 963:0.0298568928636813 1037:0.118070841333416 1050:0.0415411927468819 1061:0.0456436889730667 1086:0.0443685749678893 1157:0.0482339349706901 1244:0.0993459216495075 1424:0.0654472481314323 1467:0.0432423773112977 1509:0.0444686337494789 1591:0.0417666252282072 1865:0.0417666252282072 1956:0.052450699820641 2076:0.0438832674988286 2947:0.751546058726327 3069:0.0601098064873486 3569:0.0673245994167908 4837:0.245542044289323 4890:0.0730000241189499
+-1 6:0.0211000704226775 8:0.318586632507424 9:0.242117123622005 10:0.08898440952458 13:0.0701176120850156 52:0.0860128413190419 80:0.06869232468219 105:0.112070148710451 142:0.0164146666966141 171:0.0912200542493235 174:0.0773343191732615 212:0.238897220056329 241:0.278654486831469 265:0.0996653194362475 282:0.14944075082758 317:0.125760989633899 326:0.246043990428428 376:0.134548618117637 404:0.0885958483328143 506:0.0590217274205966 584:0.296813612253218 971:0.26312341085009 1011:0.126616980616493 1232:0.119448610028165 1277:0.124540182959625 1424:0.0981051784689596 1549:0.333973581437409 1590:0.162524533314405 1986:0.163363646389936 3535:0.370366721552754
+-1 1:0.210722318011783 8:0.372493039294141 9:0.566169035613973 10:0.104041004146126 13:0.16396370574642 22:0.131544489892746 35:0.267710094807517 52:0.100566632156194 75:0.19999425045572 127:0.122677881927341 141:0.225355548671866 142:0.0767684323563653 162:0.267228957473888 173:0.276595966563817 960:0.284302635267102 1037:0.137956622327766
+-1 1:0.152952679504631 9:0.273968990302102 14:0.363347001657376 22:0.381925984736753 35:0.388634452369292 75:0.072582858762526 83:0.0927959614681887 124:0.414096206960273 142:0.0371482164808618 173:0.26768937513139 356:0.341584716267645 518:0.312327537663357
+-1 6:0.0267946581161826 8:0.370854287061703 10:0.0847499599451198 27:0.00975245227660562 35:0.0363453172430222 67:0.0378917877145099 70:0.19267191808165 85:0.0205256604368901 96:0.0207516914422434 109:0.0737177125508506 142:0.0225817965470075 146:0.300757618711163 151:0.0529022046447463 154:0.0484235316271466 158:0.0240399859073877 171:0.115838957784867 185:0.0195039716504362 197:0.0373469333078343 200:0.0647130441894476 216:0.0582807664917341 241:0.221161930908915 242:0.0234689974855329 252:0.0725155150413761 256:0.0455864447707025 277:0.121327064385699 287:0.0621780285670713 355:0.0604740393474819 366:0.0844579113849396 390:0.0305951066762849 395:0.391046643689275 413:0.0289597394462166 415:0.029140383245867 422:0.0305418314116956 426:0.0301518171251044 430:0.0260677847089789 473:0.0294889695633294 480:0.0246348378143799 484:0.185093428250709 510:0.0302799915515678 517:0.0373469333078343 525:0.0539817543123768 568:0.0942297715746789 593:0.0322599542281843 597:0.089851156011249 673:0.0338653045314732 688:0.0371813440097674 689:0.041857593756399 755:0.0349572637109951 758:0.0350870064410462 763:0.0387914621250465 771:0.0355332085144917 793:0.0401972438878207 796:0.0294417203209197 864:0.149763990416724 900:0.0488876622622441 908:0.0356251088543805 931:0.0593834887259089 950:0.0364963884379042 1020:0.0428157480002568 1082:0.0459079135226876 1162:0.0777137427013441 1302:0.0477835411539923 1373:0.0388568713506721 1379:0.035352119750615 1431:0.0391232655798059 1467:0.0411570675154078 1486:0.0915352122082548 1490:0.217314345275922 1531:0.0457676061041274 1683:0.0572110859245371 1701:0.0582332447735166 1724:0.0515968574798125 1732:0.0663875233406757 1744:0.0460503963365484 1749:0.104840778802237 1880:0.0467979592981926 1989:0.0543285863189806 2046:0.148348309173544 2159:0.0663875233406757 2194:0.102172345829423 2279:0.0582332447735166 2379:0.0503697096693958 2528:0.0385343836163299 2752:0.360105181656633 2763:0.0651603755302591 2819:0.0651603755302591 2953:0.0587903824656889 3197:0.0606985793835508 3283:0.0550641753930615 3661:0.0741741545867721 3797:0.0593834887259089 3803:0.0550641753930615 3954:0.0543285863189806 4221:0.0587903824656889 4684:0.0539817543123768 4817:0.0536475372115353 4991:0.0694796888631065 5736:0.0600175302761055 6072:0.0631096957985363 7345:0.0741741545867721
+-1 8:0.107280704375104 10:0.089893697582969 13:0.141668219178759 63:0.0230369036327474 70:0.12261946423086 75:0.021599924491728 124:0.246461684071083 142:0.00276373335477953 174:0.0781245606695369 196:0.198215334387892 204:0.127962052092358 219:0.0891138334152779 230:0.153175893034424 242:0.0746802109607877 271:0.235251757007118 278:0.18402045967016 287:0.19785541727452 342:0.0995624691008092 376:0.407770513460526 411:0.079847912870093 479:0.269970280695052 530:0.0876138547247985 570:0.370936937319096 641:0.084332420051195 643:0.0867139937815319 726:0.0982187485045673 792:0.11695359204091 834:0.107400308522096 1039:0.155564417839948 1409:0.14001058717096 1553:0.148423323834943 1889:0.211250363433805 2712:0.185302802443871 7668:0.247885127868449
+-1 6:0.0227494676135711 8:0.30532499584266 14:0.384671933906651 15:0.0259805768505131 17:0.206607353371778 33:0.0419627170452617 37:0.0717590368101571 41:0.104752990445423 51:0.154507250970995 57:0.113228156923594 65:0.0542513687803758 116:0.0811875566562501 118:0.0993110804682251 123:0.0769343867813303 142:0.00393284551948799 148:0.0666584073113258 159:0.0456199340108233 162:0.0410704052103059 168:0.0563198690336983 169:0.0552753541728161 190:0.0650176128822805 200:0.0732577514308999 203:0.287440798622931 214:0.0649683660004104 277:0.0686735420650916 364:0.070260753368384 402:0.0577994891920253 425:0.108986115388484 449:0.0866787172413392 506:0.0424236459738318 510:0.0685563203585537 678:0.0820637618202179 781:0.0821759281181476 813:0.105954319184984 835:0.371460953810336 953:0.0828619286444147 1009:0.0675857313264478 1045:0.0393929783052288 1123:0.0861275115533067 1595:0.189951942734694 1771:0.108185755258231 1836:0.0808682644897267 1865:0.0900027950301419 1890:0.125555222220608 1920:0.114041047421747 1921:0.114567829935157 2073:0.109818498299781 2226:0.125555222220608 2246:0.096043220576099 2807:0.103000372654229 2915:0.121462310887964 3568:0.127448053622218 4129:0.157307567275894 5222:0.266212246952293 5405:0.153514039495117
+-1 6:0.0322124980845887 8:0.243185711797228 9:0.308024144970692 10:0.0679241837574173 13:0.107045303628796 29:0.0292473782751037 52:0.196967718405943 63:0.017406814021733 105:0.0855461469643962 114:0.0565474258247203 116:0.172438365879941 142:0.0334126796060709 171:0.0696307112706199 176:0.0417428752368136 229:0.042173136796426 232:0.142960300842819 239:0.0682753242762239 282:0.114072128750319 375:0.0570893242528113 409:0.0822551805698715 415:0.0700650506844687 453:0.0781113533919882 474:0.216859820115492 506:0.045052865781948 522:0.336448496161138 541:0.166084003262371 574:0.0602982628464095 619:0.354061671696189 627:0.409274316779021 649:0.215632168605569 658:0.0744808628589978 829:0.0597414760654797 987:0.0657459115803828 1045:0.041834371459525 1149:0.0772599017527026 1433:0.0776428629193581 2994:0.167056756963727 3585:0.303481529223401
+-1 6:0.0361025494886155 8:0.18170223189001 10:0.152253712154612 13:0.119972327561625 14:0.0915689837229094 17:0.0491817148857154 18:0.0483139845974675 22:0.288753512098833 33:0.099889880581178 41:0.0415597640115795 52:0.073584656310903 59:0.280222045484294 67:0.0510545846580149 78:0.0693394345814406 100:0.055773215001113 109:0.0993256698411567 124:0.104358557142077 146:0.081046877079131 148:0.0793382890206785 166:0.0673441562443521 168:0.0670331354623157 196:0.0839297450154109 252:0.0651372364128703 253:0.29587221966903 271:0.0996119701889268 275:0.0606937748991128 282:0.127847727384124 304:0.068342063379875 307:0.0866752243399403 333:0.182108212921416 376:0.115107391750601 394:0.16816617465478 403:0.104533573448316 463:0.221816611406422 581:0.135122634607688 657:0.0937427207676906 671:0.0551198825189626 749:0.105066168260378 758:0.0945509646700963 761:0.0917779698092169 856:0.0677385070016531 1105:0.113291364459596 1168:0.234720561867823 1169:0.101714479806174 1383:0.262438000843204 1776:0.104533573448316 1788:0.111136553441155 1800:0.285717002602407 2023:0.132272976686122 3473:0.152899724791427 3751:0.145467723312196 4180:0.17267453173794
+-1 6:0.0133707868231947 8:0.201883399564298 9:0.409135626102376 13:0.133297324363323 27:0.0194662622420429 34:0.0532792427315505 58:0.0896922806462993 75:0.0541963404897772 77:0.0504117672575635 83:0.0346445538901999 84:0.0392362604331742 112:0.074435049009709 114:0.0938869843769713 119:0.0699482563625173 120:0.0556988086947355 123:0.067826199441216 125:0.0716706393321186 137:0.0547300777362467 142:0.0710784150311945 162:0.0362081198208986 168:0.0496522144309828 174:0.0490055566199083 181:0.0564293986706632 183:0.0588138782244098 234:0.095917212021513 247:0.0983792852971579 265:0.126312729119182 288:0.0694363114719254 295:0.0567636858495654 296:0.0602860717836928 325:0.120064708056415 391:0.0691855991233904 438:0.0745458862126754 458:0.0703860695382873 471:0.348452490024978 518:0.0583023659584633 584:0.188086174887588 685:0.0706538626341782 695:0.0659939889264509 723:0.0686135950539932 780:0.135652398882432 829:0.198380278083848 868:0.095377748752318 896:0.0846727569595967 944:0.073154750361198 954:0.0913538664270764 1134:0.0813283412488936 1139:0.11150626235218 1262:0.102989271834399 1371:0.100086889591969 2011:0.554736308589464 2179:0.125969330952466
+-1 6:0.013104690727098 10:0.0552658423878889 35:0.284411401575845 57:0.0978365738016993 70:0.22615605429787 72:0.0407767889127036 83:0.0339550820840081 109:0.0721074939563841 142:0.00339823716443354 146:0.0588376318882441 171:0.113308683345597 200:0.0632995148834954 258:0.0621352567569996 276:0.0509012248063697 284:0.0397914222291707 287:0.121639743393482 306:0.0514167710039424 377:0.0504309684846818 403:0.0758882777001961 479:0.0829876586650365 507:0.0350350518997178 514:0.0696037790002773 631:0.0439752393702713 660:0.0843637299779363 662:0.0683035662036454 689:0.163773187440472 774:0.0735035367490125 783:0.10560525789917 1034:0.165226188497301 1267:0.0879714763736416 1404:0.0887366319194895 1421:0.275576492758861 1554:0.121748848466701 1598:0.0685561948336813 1664:0.0777683337570149 2338:0.123462376976039 2348:0.10560525789917 2575:0.091249333849881 2748:0.117413130492244 3500:0.132646225662721 3591:0.139935856463036 3708:0.102550737974271 4645:0.123462376976039 5039:0.145107931825642 5133:0.116172746175724 5413:0.279871712926071 6649:0.304795125251914 6650:0.304795125251914 7078:0.290215863651285 7080:0.290215863651285
+-1 6:0.0387401247190175 9:0.0185221490138673 10:0.0204221304359094 14:0.221082341140758 22:0.0516415379255999 27:0.0211503660099206 35:0.394114598376766 37:0.0114561226345071 47:0.0229200086232259 48:0.0148123812367108 52:0.019740148571705 59:0.0150347235096278 70:0.0278567993066778 75:0.00981418024258547 77:0.127803876062231 80:0.0472951482883534 83:0.0188208960178698 84:0.028420496915937 85:0.0445144686200578 111:0.0151419870332952 124:0.363944004605017 138:0.0406069870602286 141:0.0442348711183998 142:0.00313933704914561 147:0.0623490757845325 162:0.0131135427579085 190:0.0415194952269416 194:0.0191835036147042 196:0.0675461048233794 214:0.020744023369023 218:0.0137342963341408 223:0.0328874230474553 225:0.0230710964223968 230:0.0695972721402124 241:0.351735216187331 242:0.0169659169689265 243:0.0913211383318391 266:0.0246207681121555 283:0.0544516235696825 286:0.0135669179600802 302:0.153681733905482 317:0.0144312208609031 319:0.0219647049206827 330:0.0240803491554396 348:0.0481088971522631 354:0.0360885096449977 355:0.0145723811591218 362:0.0356301561809387 378:0.167505521462164 390:0.0221174355591999 396:0.0245926772027436 429:0.0552631493622192 441:0.0170735062057678 442:0.0206041552518089 465:0.0411775891480689 466:0.0671200938142729 482:0.076647719288159 485:0.0335116572543979 506:0.0135456247041024 510:0.0218896364363401 515:0.0174932346181321 526:0.0290588936575094 527:0.0230934275028437 528:0.0253332527396682 533:0.0303252781442504 563:0.037112608172325 567:0.026274306558451 568:0.204358257934418 572:0.0524765967869114 597:0.021651361594356 612:0.112742078324408 613:0.0223934659519473 628:0.026310510954197 709:0.0211154451726669 726:0.0223134229333568 728:0.0333948061818568 730:0.0232748309963038 747:0.0266838389505966 749:0.028185519581102 771:0.0513744539508378 809:0.146323380920378 811:0.0275000161211736 829:0.0179619120783289 872:0.0276315746811096 886:0.0208548827500683 903:0.0269582403809999 916:0.0293392512980641 950:0.0263835170754467 1009:0.194217596766331 1042:0.0275874317268224 1105:0.0303920474517764 1225:0.0215975678577083 1236:0.0266838389505966 1263:0.0328874230474553 1288:0.0318077301356368 1296:0.0246489783039183 1333:0.0344189047091842 1337:0.0623490757845325 1364:0.0352013951496741 1405:0.0342970023866717 1424:0.0225153682744598 1442:0.0364126466214286 1488:0.0337189431582877 1613:0.0277657911687377 1624:0.0306660446416991 1645:0.0276760129081886 1720:0.0314835931592059 1771:0.0345430857112518 1802:0.0360885096449977 1987:0.0381060207782245 2090:0.039023821194976 2423:0.0312504643207151 2528:0.0278567993066778 2585:0.0502273960788039 2667:0.0456224795930121 2685:0.0449892873496416 2702:0.0490161446070494 2773:0.047992046079722 2825:0.0326948446309604 2902:0.0346696322074437 2908:0.0387822131081385 2912:0.039535111115834 3044:0.0392745486932354 3157:0.037492339533247 3165:0.301364376472823 3266:0.041358329604669 3383:0.0502273960788039 3505:0.0502273960788039 3641:0.0517098480701902 3797:0.0429287761298713 3842:0.037112608172325 4127:0.0536210610928412 4411:0.0490161446070494 4618:0.107242122185682 5235:0.0471049315843985 5346:0.225259058223928 6385:0.0536210610928412 6647:0.056314764555982 7702:0.0536210610928412 8498:0.182759043125321 8623:0.0536210610928412
+-1 6:0.0398130276478035 8:0.200376873222921 10:0.111934500238065 14:0.067320056012315 22:0.0707623251815951 35:0.144010507765174 52:0.0540982654070625 59:0.0412029554788397 70:0.0763421063833342 77:0.100071153136046 84:0.0389434653841149 85:0.0406642589190712 106:0.0464467483173767 139:0.0542842385817143 142:0.0017206829854395 162:0.0359379218432559 218:0.150556436911238 219:0.0554817115984732 241:0.175261323243141 243:0.0625668439222414 289:0.0577312526899837 342:0.0619869663887219 348:0.0659216894222039 378:0.0918104352081462 429:0.0757248738672802 434:0.114835447776239 462:0.244614051022928 482:0.315081873307707 528:0.0694262773837062 567:0.0720052538825869 572:0.0719065727982139 576:0.0649559607233143 603:0.0710417160682184 613:0.122739467745336 654:0.0693405990350251 730:0.127570264222567 809:0.100250525819695 876:0.0640388869575583 936:0.0776431322642515 1054:0.086720141123408 1105:0.0832900037878601 1295:0.235294310601387 1298:0.115368358082743 1305:0.0603505408691811 1319:0.070037588086244 1373:0.0769810005503616 1441:0.0864994521729154 1787:0.0953663465645223 1828:0.0903983622569144 1834:0.10385226306358 2029:0.268659416675715 2035:0.137649166818914 2126:0.109864846476961 2204:0.197802540931108 2451:0.105027291102569 2555:0.0896008647484862 2995:0.116472127261705 3165:0.275298333637829 3247:0.129091991459829 3260:0.141711855657954 3621:0.101208990033503 4127:0.146949572535982 4138:0.275298333637829 4961:0.134329708337858
+-1 6:0.0408966657395819 8:0.470470323928468 9:0.0446930716625482 10:0.147832911568305 13:0.038829613719699 14:0.118546946247737 17:0.127343165204743 22:0.06230429723746 37:0.0276430833968363 41:0.0807060902618178 52:0.0476320471282265 59:0.145112313855009 67:0.0991443530945297 75:0.0118405769374451 79:0.0396202099627355 80:0.0760806409004221 81:0.0355717779543782 83:0.0151379780292638 85:0.071607541672297 100:0.0361025319490702 124:0.270209142026726 132:0.0708683537323642 185:0.0340215962119247 196:0.0543285213311752 199:0.027309490190724 218:0.033140209045768 224:0.0555622397866383 230:0.0839674669756618 271:0.128959549352993 279:0.0661480510934255 282:0.0827570485655031 299:0.0483653754526744 319:0.0529997966397869 333:0.235760752721617 342:0.0545778331735186 376:0.0745101082691267 382:0.0513153771888777 404:0.0490624604237969 426:0.0525950798981581 436:0.0516049669955583 442:0.049716854481946 465:0.0496797898912205 470:0.0909458021252275 474:0.0786637317187519 480:0.0429715813726762 484:0.0645732468267371 502:0.0403274008684366 513:0.0437196375420599 538:0.0511928510253895 546:0.0504767326760453 581:0.262398495381838 596:0.0981913172654173 604:0.0863341352759983 634:0.0656391058599749 645:0.0743368046531499 662:0.0609026879660011 695:0.17301690030675 749:0.204030986718856 782:0.0665671711327569 789:0.0600320435122689 872:0.0666736859987088 1025:0.0712142643573925 1112:0.0703849193359392 1309:0.0689676538191228 1389:0.0745101082691267 1430:0.263585994852348 1449:0.0748624395584331 1472:0.118817503606056 2050:0.0752226890639278 2163:0.0738278594196993 2265:0.101578692550574 2273:0.0989734444961864 2731:0.0852768007993811 2825:0.0788911174936225 3660:0.129385090480052 3722:0.0989734444961864 4074:0.129385090480052 5658:0.118273644267981 5895:0.129385090480052 7409:0.118273644267981
+-1 6:0.00942161789468439 8:0.379348056849856 9:0.0720735358960358 13:0.0626179283309607 33:0.0521361676508904 59:0.117006475193224 83:0.0488240151011961 85:0.0577383533192012 96:0.0583741749088798 142:0.00732948821430875 158:0.0676240944537263 174:0.0690627463132018 220:0.15116356653995 278:0.244013371986768 309:0.0693367207452575 413:0.0814632821837235 423:0.0713829785707896 502:0.0650333097718299 647:0.0851046162226332 687:0.106013885301252 784:0.462587087979505 818:0.288825761557253 857:0.303699616668761 917:0.114614729168571 1138:0.0929061648111838 1389:0.120157482204396 1447:0.122509212078865 2433:0.128354794067549 2731:0.137520209170668 3077:0.190732017930345 5318:0.195445249443776 6451:0.373494074932814
+-1 4:0.0157299162580599 6:0.0181827312913075 10:0.092017490468401 14:0.0737886603239163 22:0.0775616879403673 27:0.0105887505432121 52:0.0296482115931734 59:0.0451620373817481 68:0.0223246522894156 72:0.0678932523776924 84:0.0213427194604456 132:0.0220557384512651 142:0.00188601881606443 151:0.0574387069304527 154:0.0262879879992431 171:0.188658676666176 181:0.0613899903738698 186:0.0206360910770876 218:0.0412557506666002 234:0.0260872739272622 246:0.037588733437926 264:0.0299362569225799 286:0.0203764856625362 287:0.0337549784962696 299:0.0301046663256767 304:0.0826077088913594 332:0.0467090531812499 333:0.0366868794408491 345:0.106747465977744 348:0.0722559284244189 423:0.0275523276922133 449:0.0415672801943101 479:0.0460580819318659 508:0.169289650795405 558:0.52480663841111 643:0.0295875547482238 685:0.0768648975386635 688:0.0807394828324784 712:0.0333942878898219 761:0.0369785333643309 767:0.0347858837429025 782:0.0414342379530738 783:0.0586108308030267 787:0.0417702299758373 806:0.0390373624744503 824:0.0406712151113952 836:0.0824758853984732 848:0.0401931346772372 863:0.0384324487693317 950:0.0396260491142486 985:0.0465975657614408 1045:0.0188911305914075 1067:0.0386800550297189 1096:0.0476488551219379 1236:0.0801542197569302 1379:0.0383836563969646 1416:0.0438947699794565 1561:0.0484167739501064 1792:0.0429284004529457 1922:0.0532944963998964 1943:0.0436442625896076 2068:0.072080426942705 2087:0.0651641903275793 2115:0.0651641903275793 2202:0.0509815751970815 2361:0.0611184512616162 2389:0.0582479537124537 2424:0.0509815751970815 2504:0.0535138023765665 3096:0.0611184512616162 3314:0.0675705102179504 3318:0.0586108308030267 3964:0.678939783648697 5074:0.0805347821652043 5309:0.0805347821652043 6428:0.0754377537387441
+-1 2:0.0729359383699807 6:0.0267997223230061 10:0.075347535768486 35:0.0969391640807477 52:0.218494082473361 67:0.101063864761696 70:0.205555555405204 81:0.0543907127986401 116:0.095641973316899 142:0.0185321555039259 145:0.0749641127684122 176:0.0926098073174654 202:0.110923894562113 229:0.0467821879845698 243:0.0842324305790614 289:0.077722375456478 301:0.0809693354674001 317:0.0532440498023584 375:0.0633285475538404 452:0.252194558036349 494:0.151334470860253 522:0.373218545979014 582:0.150695071536972 658:0.0826207864106017 691:0.170906840592746 987:0.0729312028559144 1040:0.695175369399602 1474:0.137617624846754 2491:0.137617624846754
+-1 2:0.0697272185789274 6:0.0256207041142275 27:0.149202691422217 29:0.0310164674980328 31:0.0325508018509919 39:0.085774591770765 41:0.157298647972558 63:0.147677614388832 100:0.105547414926532 110:0.0824213314826651 142:0.0620090027295058 199:0.0399202761825495 286:0.0478530885233595 332:0.329081151736711 338:0.111900791920123 406:0.0800760910316895 436:0.0754347488901046 441:0.120442978467588 456:0.0925474466211733 500:0.0883809251489968 540:0.0965427429011112 667:0.0822574647463932 853:0.0903717030957791 1269:0.0872426822968043 1507:0.234114937142333 1908:0.16338802100816 2313:0.783234053957932
+-1 2:0.0350891758763263 6:0.025786469360507 12:0.231776222650461 31:0.0327614046377604 37:0.0406693518168476 41:0.197895457337427 100:0.0531151518894508 142:0.00891574275148188 166:0.0641346403952917 175:0.166408337049974 179:0.0468556931495978 199:0.0803571185284211 309:0.0632569779076678 331:0.0671935947402529 381:0.16525177330333 402:0.0655155884269572 406:0.0805941811236633 436:0.151845619253847 442:0.0731449606082905 490:0.0889527472877805 500:0.0889527472877805 517:0.0958445321228404 598:0.0908405111386657 601:0.116067030819709 640:0.0802227646653828 707:0.382678866299524 758:0.0900448154126679 1024:0.532392745978994 1096:0.11262478694574 1178:0.136050091341539 1208:0.145612766020209 1287:0.462074253411998 1908:0.164445136980493
+-1 83:0.0470741691306573 85:0.11133803739165 94:0.0545326532761795 100:0.05613354345376 142:0.0376896019579869 175:0.0879324381704147 216:0.0790335855309251 226:0.070435963304396 344:0.277108463703895 512:0.310332037474168 518:0.316879293010327 546:0.0784830790004353 562:0.478348004052776 577:0.13259150383199 678:0.196610221711793 679:0.114276339493136 826:0.236834003530028 894:0.143781452985454 1345:0.551688626103877
+-1 83:0.0470741691306573 85:0.11133803739165 94:0.0545326532761795 100:0.05613354345376 142:0.0376896019579869 175:0.0879324381704147 216:0.0790335855309251 226:0.070435963304396 344:0.277108463703895 512:0.310332037474168 518:0.316879293010327 546:0.0784830790004353 562:0.478348004052776 577:0.13259150383199 678:0.196610221711793 679:0.114276339493136 826:0.236834003530028 894:0.143781452985454 1345:0.551688626103877
+-1 6:0.00699586405751043 10:0.0590067065939965 17:0.0381212514162414 33:0.0774256705042102 57:0.104458988681657 98:0.0453799476227441 109:0.0769883449753612 118:0.137429619704847 140:0.0494361051614384 142:0.00725651775616421 148:0.0614959211918442 171:0.0604891913688707 181:0.0590499881820264 186:0.0793980208697943 215:0.0445683148850767 227:0.0497271502102128 233:0.165464849809756 240:0.0629791245044474 243:0.0659647096110695 253:0.0764445302439045 322:0.0606298174641917 369:0.062558387087385 403:0.324100177809684 426:0.0629791245044474 442:0.0595326402098997 458:0.0736548088820225 492:0.453911853834494 514:0.148630314416515 521:0.0689859115906624 641:0.110712508220717 667:0.0673824620723436 774:0.0784788838669812 796:0.0614959211918442 856:0.0525048112285497 876:0.0675166960190839 1023:0.0987502121925897 1045:0.0363421147771524 1058:0.0784788838669812 1113:0.0849375950158819 1124:0.0777765356600797 1232:0.0792079098198173 1236:0.0770989814554668 1546:0.10520892334149 1960:0.136102689474723 2013:0.11010167595305 2230:0.435373757802137 2381:0.136102689474723 2706:0.108901574183218 3210:0.162713131203094 3211:0.162713131203094 3670:0.114230819800813 3745:0.149407910338909 4763:0.126783184322809 5371:0.290249171868092
+-1 6:0.00838743294996706 18:0.0448976941625448 27:0.0732665795217278 51:0.0569648147295488 52:0.0683814721892359 75:0.0339971146053304 82:0.0629117948034518 83:0.0651971069491954 106:0.0587097757099342 114:0.0588948725867355 120:0.0698792119712392 123:0.170188249229261 139:0.137233093259391 142:0.0282747857586484 162:0.0454263733702396 168:0.0622932105438732 179:0.2743292082448 216:0.145947306094383 218:0.0475767139948458 224:0.0797662074970979 298:0.166296311512286 465:0.285285002483165 489:0.0955650961059209 538:0.0734934299434279 655:0.0635095839358221 882:0.0629856747629598 967:0.214947882248367 1057:0.457062572939107 1146:0.0960269227265545 1176:0.189336698749589 1352:0.243880963175732 1421:0.117585344247387 1478:0.26868944957106 1506:0.117585344247387 1523:0.135181674751269 1836:0.0894452333183164 2781:0.286537201620529 3237:0.26868944957106 4926:0.179127098505718
+-1 6:0.0256368606360179 18:0.068616699232644 27:0.0373241948138541 31:0.0488569927815395 72:0.0797721118574466 77:0.0966584441654222 83:0.0332133632681706 106:0.269176698071851 114:0.0900084477389532 120:0.106795704320262 123:0.130048503916671 139:0.104865985442974 142:0.019944034027275 216:0.446099631301213 296:0.115591224439418 298:0.127074499073672 336:0.117194758529773 465:0.326998672917959 647:0.231575426850244 750:0.148212568005537 1179:0.159849187204311 1226:0.608673382972729 1405:0.18157246044975
+-1 6:0.0114096679777687 27:0.0996666502368862 33:0.063137389902594 51:0.0774908874212596 63:0.123309883025658 75:0.0231236298497322 82:0.171161473331532 120:0.190117432090611 123:0.11575600240305 125:0.122317139499275 142:0.05917386157878 162:0.0617948114375834 179:0.124392655907496 298:0.11310884460127 314:0.182097220258198 475:0.0924538004338382 521:0.112510240325234 647:0.206124983061245 667:0.109895148540612 684:0.106782714901656 784:0.112039463787357 808:0.238167336563475 834:0.114976558411724 952:0.106292782370262 1055:0.249000429705771 1086:0.431565152794088 1359:0.253320218248986 3463:0.555219144574265
+-1 6:0.0235721722628762 27:0.160151861948982 41:0.036180414970208 51:0.10672986866087 52:0.256240473360419 63:0.0509512075208407 82:0.176808288462027 83:0.0203589961475723 106:0.329997737044165 113:0.168247196251881 114:0.165519067668985 120:0.0654632087475808 123:0.15943323588517 137:0.0643246523144737 142:0.0448257888965645 161:0.0766798375583202 162:0.0425556625310182 181:0.0663218763784304 207:0.0929207579197991 211:0.0781448027589622 218:0.0445701127976431 228:0.475402447401595 239:0.266463482741665 258:0.0745108758573701 286:0.0880538833713711 299:0.0650463681882336 430:0.0611539119981543 446:0.290855949463269 456:0.170295425490059 510:0.284142278958075 519:0.0939475828598958 609:0.0556423580633304 631:0.0527338868869694 918:0.0908507541582892 927:0.10092303425931 1112:0.0946603502024808 1182:0.117632838112647 1324:0.187546026185903 4605:0.167807196318335
+-1 2:0.0233237488311862 6:0.0228536624029907 15:0.058724033482452 17:0.0311330452923475 27:0.18299705565255 36:0.261921308975213 37:0.162197325507996 38:0.0465487825904152 41:0.0526163846998177 47:0.0270420471357804 48:0.0349526143886682 51:0.155214909310617 63:0.0123495374410175 76:0.0475329909694218 82:0.0428547366095475 83:0.0148038209938283 85:0.0350134353040918 97:0.0356508452896562 100:0.0353056015383841 106:0.119977119504312 113:0.183508658136124 114:0.0802369177430916 122:0.0614961597605601 123:0.0579650653549613 135:0.0520541497791179 138:0.0479099321547364 141:0.0521902713691291 142:0.0518550156743389 144:0.0339674517813078 162:0.030943883766002 189:0.0427545664841466 190:0.048986549937115 197:0.0637077884631622 208:0.0428045715386235 215:0.0363982638127546 218:0.0648173384137826 225:0.108881229005537 234:0.040985987047021 239:0.0484390005198028 242:0.0400342891590826 286:0.0960411248515796 291:0.0919732284402165 296:0.0515211838452524 298:0.0566394954337504 323:0.0488754993809747 366:0.0720357239000334 368:0.208926823592161 375:0.0405029172174891 386:0.045503290503901 389:0.0486921455798588 413:0.049400601098373 423:0.0432877482352885 430:0.0444673971020403 432:0.0536707427266156 449:0.0653067856907607 472:0.156162449337354 496:0.0479099321547364 506:0.0319634628200565 507:0.0916480134931867 510:0.0516527362643978 534:0.0870963247688394 548:0.129375786592458 550:0.0930975651808303 567:0.0619991945110861 599:0.0535708916165134 629:0.0697816227485677 638:0.0697816227485677 673:0.0577686965499543 684:0.0534716724796953 692:0.159659400513697 730:0.0549213647539008 747:0.0629655636284873 771:0.0606138692245396 778:0.0545992320915942 789:0.0587068909950426 791:0.0760680964791732 800:0.0503843975766439 811:0.0648914879927152 834:0.0575747571121073 836:0.0647893601312785 847:0.18278696038532 915:0.0707933654758975 951:0.0744792368778507 986:0.0510904817195477 1009:0.0509214604457091 1042:0.0650977616435866 1045:0.0296800515025782 1058:0.0640925089065322 1067:0.121541272487608 1090:0.100286821917098 1129:0.066623074957757 1138:0.0563397430644404 1167:0.0730366960523697 1212:0.0899183614614835 1213:0.0726958876020995 1312:0.148582982530335 1313:0.0746692582503238 1358:0.0764918133886382 1379:0.0603049612730615 1409:0.0750563537518434 1421:0.0800976823600057 1506:0.0800976823600057 1594:0.100286821917098 1610:0.0790521902734914 1614:0.0721981768697216 1615:0.0847887849331052 1650:0.0945977080750622 1736:0.0818095528449156 1809:0.0894206507291056 1844:0.0742914912651677 1846:0.0750563537518434 1872:0.0851576624531598 1907:0.0859225249398354 2027:0.0952945592998085 2138:0.0889382566284165 2221:0.106160730487801 2236:0.0815109424585809 2276:0.104796690433698 2395:0.0984403877623057 2425:0.0904323934564355 2501:0.11566286162169 2624:0.0725282221398324 2637:0.126529032809682 2667:0.107654867315819 2972:0.0975927991138065 3040:0.126529032809682 3073:0.101298564644428 3219:0.0875742165743137 3376:0.0833943933278245 3562:0.118521038503812 3771:0.109306558950298 4512:0.0939305192457057 4605:0.122019164293082 5729:0.122019164293082
+-1 6:0.0286726113862772 11:0.032211295422147 18:0.0383709218464641 27:0.0417438838708596 51:0.146051539711985 63:0.216915290969001 75:0.130747311935811 77:0.0540520550878925 82:0.268831574388274 86:0.0556850622556344 106:0.401401142291827 114:0.352333325070362 122:0.231462527905227 123:0.145448004227582 139:0.0586417676277625 142:0.0446113543508789 161:0.279814413235283 192:0.0578890191627064 196:0.0666569258033998 211:0.0712900640756945 234:0.0514217484340031 276:0.0556850622556344 286:0.0803299357862778 298:0.0710609185105589 304:0.0542772034768735 317:0.0427237434649856 356:0.0683682747196894 373:0.0511715500822244 375:0.457341123894471 453:0.069527562711324 457:0.0494279998404386 655:0.0542772034768735 1043:0.0801687825947123 1324:0.0855473924809512 1353:0.103021637235034 1449:0.0918504674310826 1542:0.108808770144155 1575:0.232545223892841 1884:0.10779992823405 3217:0.124629259303338
+-1 6:0.0271336361696395 11:0.0609647693935275 17:0.036963560103387 27:0.118509961509995 51:0.0460707872886354 52:0.165912323668799 75:0.0137477304441849 77:0.0511508623061141 82:0.050880458930601 92:0.0895610400373019 114:0.28579042978198 120:0.0565154179103204 142:0.0439759189848819 161:0.0661989100108707 162:0.220433837424439 168:0.0503801735530668 169:0.0494458169774413 186:0.0384934046952646 192:0.109563761948095 199:0.0317082108155446 216:0.118036147863321 239:0.0575105290937223 283:0.0508506551799386 303:0.303041003640992 309:0.0499212920468563 317:0.202152935316305 343:0.143746211133626 375:0.336617378933185 386:0.108050054059842 423:0.0513945638343535 457:0.0935499976751571 458:0.142836022106777 480:0.0498929841504312 530:0.0557636976181922 538:0.0594384479983143 571:0.107074065059012 586:0.0997294384849517 609:0.0480369230232854 636:0.0693762467230947 686:0.240659856132177 829:0.0503221908323056 866:0.379328996194769 1359:0.0753034471486637 1382:0.0888814968214242 1615:0.100667805495351 1797:0.235879804073018 3105:0.318501344793442 6135:0.1502250571753
+-1 18:0.195747172398276 51:0.248357997386938 111:0.22868746455153 122:0.393597835490284 148:0.321444109156112 280:0.383079229252204 858:0.366867917459139 1172:0.555082027298624
+-1 6:0.00841251839633203 11:0.18901530220452 17:0.0916815210227092 18:0.360255806846629 27:0.0489904719548531 100:0.10396898919671 118:0.110172638620365 142:0.0152704197904096 159:0.101218685366482 185:0.0489881287828004 199:0.0393232820154068 204:0.0505019324497968 242:0.117894169641986 280:0.264384119441409 283:0.126125984587477 301:0.0762495987027688 343:0.0891342124589804 351:0.179102590178226 372:0.0830430779029432 406:0.157757160593342 500:0.0870592184413741 657:0.0873747005849648 671:0.0513755435294844 702:0.100212710154364 758:0.0881280398138029 807:0.109387900449142 813:0.117542442019538 856:0.0631369744644951 960:0.387786232718615 1114:0.102954521326092 1281:0.108844759683565 1305:0.0765126490426935 1613:0.0964706151835613 1737:0.553218793345341 2577:0.120905822882217 4866:0.179662838493016
+-1 6:0.0296984060010364 11:0.200182142403134 18:0.15897473728894 27:0.086474635641331 142:0.0115518438128956 148:0.130529325609355 182:0.301990795437256 185:0.0864704996340338 192:0.119920126627786 255:0.138209249191465 283:0.111314487561553 357:0.137459347522769 375:0.210534672043452 402:0.113181947320821 502:0.102497557149109 640:0.277178880394577 655:0.11243806179639 723:0.15240048547998 799:0.149804479740934 3105:0.464809664797064 3448:0.475690739297515 5722:0.317128573721198
+-1 11:0.0546629779832055 18:0.260463769444856 21:0.0735880112360915 27:0.283359607250988 47:0.115150571837981 126:0.231150619286373 140:0.687678152199235 142:0.100941380913082 159:0.146361556581547 199:0.0568612084303552 276:0.0944982588306684 298:0.120591282439957 301:0.220512841368144 304:0.0921091045784629 324:0.257774975696073 331:0.0950932304611948 373:0.0868387712711458 430:0.094675639361479 1043:0.136047443621348 1544:0.159388031881235 3551:0.229208230248151
+-1 6:0.0103447558943749 11:0.139457679816294 27:0.120485792635923 37:0.0978919241046813 38:0.168563194672958 74:0.0848045540453256 75:0.167723237278034 80:0.0673557307079571 100:0.0639246039743469 128:0.111196439384801 142:0.0509683714570048 146:0.0928920723063505 173:0.0773215077007118 174:0.0758295719473289 211:0.102882615137087 219:0.172992047175788 234:0.0742095553202813 303:0.554568097967226 317:0.123313971255704 352:0.586131915966279 408:0.0609143725642603 483:0.100440605742203 500:0.10705549999436 597:0.0925048340340548 611:0.267689749076642 726:0.0953334725017896 941:0.147584363081186
+-1 6:0.0140188548949784 11:0.251984290049553 27:0.12245862984461 37:0.132659745036613 38:0.228431003194493 75:0.170469541518762 128:0.150689563339183 142:0.0545293987080607 146:0.12588411905057 173:0.104783429187213 174:0.102761609527778 211:0.139422956669959 219:0.117216415355984 234:0.100566219104464 265:0.132434975168309 303:0.501020985844894 352:0.595729253774491 408:0.082549047915318 431:0.156318094911243 755:0.146315972494223 941:0.20000121722814
+-1 6:0.0297800640222258 11:0.200732558396017 17:0.0405687309834258 18:0.159411850394124 21:0.0450381297290275 27:0.0867124042148128 31:0.0283764146013173 37:0.0704518259508055 38:0.0606566116736644 51:0.0505642143364871 52:0.0606980893879305 63:0.0321847771401617 68:0.0457047379049812 72:0.0926641772575441 75:0.0301771786301333 83:0.0192905071054206 85:0.091250349865802 86:0.115671690779312 142:0.0270284151297037 168:0.0552939084345771 194:0.058986487003853 199:0.104402433446099 204:0.0446938333667363 208:0.0557776192885976 256:0.0506655930421177 286:0.0417163019856916 289:0.0647742900791116 291:0.119848126877118 306:0.0584216279575111 307:0.214488486260353 341:0.0622055631239633 343:0.315532451585066 345:0.163906190719714 347:0.0611599907520774 357:0.0689186512154657 385:0.0778960722455496 390:0.0680079015478328 402:0.0567465748373263 404:0.0625208822198759 409:0.114065876097131 414:0.110018171993089 432:0.209811205705462 441:0.262492757356579 442:0.0633547844229355 490:0.0770467586745332 499:0.0554538761060613 502:0.051389690980649 508:0.057763789698516 537:0.0832652263894269 574:0.0557450131088771 586:0.0547281802633155 594:0.0712859259197391 612:0.0866663784603533 772:0.0689808362475291 793:0.0893518768782762 876:0.0718514365591101 882:0.0559085669630123 914:0.0953981053109843 960:0.0857969805624238 1045:0.0386753693278532 1106:0.0953981053109843 1281:0.288980400322836 1288:0.097804149750292 1335:0.0800269507984131 1391:0.0940797274220224 1669:0.111459184087198 1682:0.104373385177893 1746:0.0869645993371722 1816:0.163628248298438 2024:0.0725069291804637 2237:0.107405274498853 2485:0.119249671771656 3304:0.133409121051546 3750:0.134922981458651 3779:0.129442947176841 3960:0.138335523419618 4087:0.284869555363965 5325:0.147568570331436 5536:0.1306813728414
+-1 6:0.0114179133372418 11:0.102616611973164 18:0.122239541954713 27:0.0664924505098233 37:0.108047161021061 38:0.186049817731416 74:0.0936021167226851 87:0.106369596367105 140:0.161368820155417 142:0.0473732995317944 153:0.0990304899188246 199:0.213486523314397 215:0.0727397148888852 284:0.069339295377462 409:0.116623370322874 453:0.110748152638442 456:0.247463626384125 507:0.061050992303018 514:0.121289381507699 571:0.0901141585201872 574:0.0854923250917837 671:0.0697295953526961 829:0.0847028994228667 866:0.510792797872157 884:0.117879117388651 915:0.141476232142066 927:0.146655613159473 975:0.141476232142066 989:0.276172088144275 1159:0.232208067384288 1200:0.162894657428244 1305:0.103846999770387 1407:0.139175846948033 1597:0.160070343137786 1602:0.157479721364448 1660:0.321230406736328
+-1 11:0.191349168738738 18:0.227940040996048 27:0.123988454576767 59:0.264411329629949 112:0.474106768844761 142:0.0331263670844202 400:0.375211503078701 456:0.461445357541713 883:0.496540301212996
+-1 6:0.0315966685105193 11:0.141984922131661 17:0.0573912688174685 18:0.281893472413427 27:0.0920019208044945 31:0.040143194006376 37:0.0498329573517602 142:0.0245804289717513 162:0.0570425647345087 185:0.122663360575882 194:0.0834462713073104 199:0.0492315795758303 208:0.0789067901556531 286:0.11802940063911 328:0.106853943023249 343:0.334780149216739 347:0.0865210566127982 351:0.0747437054138562 385:0.110197048655422 409:0.0537884326121763 423:0.079797487593833 432:0.296813112356874 441:0.0742679991949693 454:0.105087700931724 507:0.0563152509879625 508:0.0817165610592462 509:0.0977617030356172 599:0.0987536366161555 638:0.128636817634625 720:0.104860152510071 793:0.12640320416632 882:0.0790920375864003 937:0.142635030559574 986:0.0941812001635846 1109:0.145726364382054 1200:0.150258876582031 1281:0.136270401989185 1707:0.120387814876064 2596:0.145726364382054 3750:0.572613506326681 3960:0.19569878128118
+-1 6:0.0448991450214169 11:0.0252202285484688 17:0.030582562455209 18:0.240343868422726 25:0.0421216935158631 27:0.0163419427552729 37:0.0796647065977097 46:0.0939896362634917 47:0.0132819498973008 58:0.0188241853737334 59:0.0174249885903001 63:0.00606558877450535 72:0.0349272446985978 74:0.0460094468327199 78:0.0431171949498592 79:0.0190302721583163 85:0.0171971704326337 87:0.0261426047830183 94:0.117922885682761 96:0.0173865477115804 106:0.0196426215081215 112:0.0312441416533321 118:0.0183753583267226 132:0.0170196480559692 142:0.00800456402808905 148:0.0493347616020003 157:0.0284377905270566 158:0.0402832090220525 159:0.0337639115529925 166:0.146567663244913 168:0.125049221439827 177:0.0585770210654025 183:0.0493742979113399 185:0.0163411611342347 190:0.0240601940614733 194:0.0667000623046 197:0.0938719968410931 204:0.0336922530522174 209:0.0176280348312695 215:0.0178773416776603 240:0.025262326615425 246:0.0290059213114419 249:0.0320245246440372 253:0.0306636001402001 256:0.0190970191324668 275:0.0377410825508573 284:0.0340832316168596 290:0.0291813205136784 291:0.0225867480724051 294:0.134084572338484 301:0.025434875954277 307:0.0808456090191775 319:0.0254567190668397 331:0.0438738080896432 341:0.0234466974093579 347:0.0230525973033217 351:0.0597439493685816 352:0.0397496418797824 358:0.0371589092863706 377:0.0215982526287523 389:0.0239155946565913 414:0.0207341808248894 422:0.0511781905119809 423:0.0212611752483538 430:0.0436811412543699 432:0.0790826351570061 434:0.0728469478951796 438:0.0625813312273954 457:0.0193501291446423 483:0.0272462768171164 485:0.0194197201207589 495:0.0309261150670181 499:0.0209018323754064 501:0.0291813205136784 506:0.0156991484257309 507:0.0150045879452304 546:0.0242448478034617 567:0.0304514739965705 580:0.0253913747537384 591:0.0295074738761975 594:0.053738587053869 598:0.0296569871568082 599:0.0263118355955682 614:0.271500804705109 616:0.0387040118377638 625:0.0311978971178368 638:0.0342738851258227 646:0.0729778969635865 647:0.0506962358865122 656:0.0554020066008826 663:0.0262631032049524 709:0.073417324431117 713:0.0280605873336357 721:0.222953455718223 726:0.0258608773068091 739:0.0286666729598661 771:0.0297710587545221 796:0.0246673808010002 812:0.0314319483301741 827:0.0479390034107175 834:0.0282783709189109 836:0.0636437789506858 872:0.0320245246440372 882:0.105366078718737 909:0.0247069679936769 912:0.106750019332038 936:0.0328357681650909 981:0.0333061245792121 1009:0.175073801942192 1032:0.0370595570431957 1042:0.0319733637115263 1044:0.122879767386071 1045:0.0291552599569991 1088:0.036043755593539 1095:0.0396109049368503 1098:0.031479624594046 1104:0.414677784999227 1113:0.0340703571874579 1126:0.0299258316444227 1141:0.0747230889101297 1192:0.034918887425517 1196:0.0352238655898085 1249:0.0423965768542234 1292:0.0336787630384153 1296:0.0285677462198283 1301:0.0368646177192345 1377:0.0267648893237238 1393:0.032127877766499 1415:0.0414677784999227 1476:0.036130758688895 1548:0.0308817363158366 1571:0.0434529832339206 1584:0.0376758612402883 1613:0.0321800792682411 1615:0.0416447907098145 1624:0.0355414236682873 1728:0.0455185333092804 1736:0.0803630269965056 1741:0.0425965800994552 1757:0.0455185333092804 1784:0.0409599224620238 1816:0.0308376118855422 1952:0.0393407125819214 1985:0.0394746236443981 1993:0.0411255136186258 2040:0.0382300350206069 2054:0.0436828418558932 2066:0.0375696569080125 2142:0.0364889484817932 2202:0.0393407125819214 2380:0.0434529832339206 2382:0.0487900030449483 2681:0.0860257621026318 2699:0.0428019173885543 2700:0.0452279444072865 2739:0.044947924747878 2845:0.046134837506373 2877:0.0458205207211496 2955:0.0958671998209657 2972:0.0479335999104828 3101:0.0428019173885543 3205:0.0514718573174006 3292:0.0487900030449483 3296:0.0452279444072865 3308:0.111243928739867 3320:0.0836519365856418 3337:0.0468047983109503 3367:0.0508555531203081 3724:0.0545938137724577 3956:0.0497537206972604 3992:0.0475386573412898 4018:0.0508555531203081 4443:0.0582126969633451 4626:0.0545938137724577 4661:0.0599308335834854 4785:0.0432297881277377 5056:0.146370009134845 5180:0.0568088771284283 5326:0.0582126969633451 5622:0.0502849445589056 5623:0.0502849445589056 5740:0.0502849445589056 6219:0.0556219643699333 6242:0.195803560183539 6258:0.130535706789026 7162:0.282419492822163 7262:0.124291793878912 7274:0.124291793878912
+-1 6:0.0315966685105193 11:0.141984922131661 17:0.0573912688174685 18:0.281893472413427 27:0.0920019208044945 31:0.040143194006376 37:0.0498329573517602 142:0.0245804289717513 162:0.0570425647345087 185:0.122663360575882 194:0.0834462713073104 199:0.0492315795758303 208:0.0789067901556531 286:0.11802940063911 328:0.106853943023249 343:0.334780149216739 347:0.0865210566127982 351:0.0747437054138562 385:0.110197048655422 409:0.0537884326121763 423:0.079797487593833 432:0.296813112356874 441:0.0742679991949693 454:0.105087700931724 507:0.0563152509879625 508:0.0817165610592462 509:0.0977617030356172 599:0.0987536366161555 638:0.128636817634625 720:0.104860152510071 793:0.12640320416632 882:0.0790920375864003 937:0.142635030559574 986:0.0941812001635846 1109:0.145726364382054 1200:0.150258876582031 1281:0.136270401989185 1707:0.120387814876064 2596:0.145726364382054 3750:0.572613506326681 3960:0.19569878128118
+-1 6:0.0395118022797952 11:0.177552901443093 18:0.105752786648277 27:0.0575244460183885 97:0.246547643061031 118:0.388093015853837 142:0.0153689786814241 169:0.144005273142244 194:0.15652501015018 280:0.413918581853817 286:0.110697295658781 341:0.165067066949418 343:0.209322179941982 406:0.18523792293589 530:0.3248107523673 720:0.196692268915679 1046:0.443914810159258 1607:0.255610295347703
+-1 6:0.0146049100487259 11:0.262518438020501 18:0.390898376506098 25:0.109611627500834 27:0.127577986003079 51:0.0991919697039922 142:0.045447190607707 194:0.231427934107504 280:0.152998428486328 283:0.109483187609448 291:0.117553213535219 331:0.114171086391717 341:0.12202883825606 343:0.309490474527826 351:0.310938662575445 406:0.136940511239343 430:0.113669717058792 441:0.102986564616481 514:0.155143978979741 647:0.26384964420265 804:0.137581696307102 1471:0.169151869760995 1591:0.17334243788171 2040:0.397938070219751 2683:0.206877861517006
+-1 6:0.0438323842248404 11:0.196968160074757 18:0.117316763846665 27:0.127629390446128 142:0.0340991268349227 169:0.159752127176484 194:0.173640886768866 199:0.204889086130568 280:0.459180226433133 341:0.183117010207712 343:0.232211382134039 406:0.20549353212595 436:0.387165577009176 441:0.309084181635186 720:0.218200401088167 8232:0.44367321978844
+-1 6:0.0233096852383332 11:0.418983899188792 15:0.0798610867273023 18:0.249552187206452 27:0.135744426002435 142:0.0362672452106132 179:0.25413129118338 441:0.164368311545805 499:0.347242342075047 1313:0.304636845701736 1449:0.298683012296118 2674:0.344452301318451 5136:0.471883210773896
+-1 6:0.0115810433683727 11:0.10408271620879 18:0.0619930014747132 27:0.0674424415634655 118:0.151668507069989 142:0.018018799281974 280:0.242641882720478 406:0.108587727980448 441:0.163327520293387 720:0.11530234335582 3324:0.209878514498371 4619:0.196189839100438 8328:0.874149133901012
+-1 6:0.0396159440620143 11:0.142416703987503 18:0.127237824807681 37:0.0374883760337232 40:0.0495056063119908 58:0.0531493683934048 68:0.0486402269346749 79:0.0537312465579756 83:0.0205294830755469 85:0.048555553852737 92:0.104609500328558 94:0.0475643947911507 138:0.0664400185419229 141:0.0723758611528345 142:0.00205459825369675 144:0.0942100322281027 154:0.0572754139846298 157:0.080293015342169 168:0.0588452833917213 185:0.138415932884618 203:0.120131921778358 204:0.0951287895823014 208:0.0593600616573627 218:0.0449433444420362 237:0.0680881391318953 257:0.09600812773222 275:0.0532802525112294 286:0.0887912495933303 287:0.220632750685041 291:0.0637728204581103 309:0.174927895475619 357:0.0733451057551434 399:0.0747085484948405 414:0.0585421675954816 427:0.08416587534349 430:0.123332033885109 432:0.0744289332407788 459:0.0723758611528345 466:0.0732133490712093 534:0.0603912505436825 574:0.0593253612728123 638:0.096771005526084 644:0.0754965677120052 661:0.105780707299432 673:0.0801118494078736 709:0.0690970037600739 721:0.104916761046894 772:0.0734112847599939 890:0.0832089576607094 909:0.0697591804218168 973:0.324803891655413 991:0.08416587534349 1160:0.200699704371561 1308:0.0925500952622708 1342:0.113450968587633 1459:0.120849578882848 1507:0.108599875466681 1836:0.0844944425997744 2030:0.122057655571965 2092:0.111455092085667 2699:0.120849578882848 3546:0.114742821050191 8324:0.598050488007917
+-1 11:0.0476339282527093 18:0.226971031654704 21:0.0641254131554359 27:0.30865339987643 47:0.1003434916933 126:0.201427225901217 140:0.749063007802058 142:0.109951805443632 159:0.127541091656262 199:0.0495494907644082 276:0.0823468359614249 298:0.105084587550499 301:0.19215734766149 304:0.0802649003180874 324:0.22462798681446 331:0.082865300871434 373:0.0756722731343702 430:0.0825014073329418 1043:0.118553258668323 1544:0.138892507417066 3551:0.1997346064447
+-1 11:0.0418725425881701 18:0.199518589750194 21:0.0563693609120359 27:0.325585642974744 47:0.0882068156773199 126:0.177064340572961 140:0.790155433640025 142:0.115983589637862 159:0.112114830500354 199:0.0435564153190918 276:0.0723868788965501 298:0.0923744698153941 301:0.168915666180186 304:0.0705567560809597 324:0.197458939235154 331:0.072842634800402 373:0.0665196131369312 430:0.0725227546593555 1043:0.104214087618805 1544:0.122093277739865 3551:0.175576445644317
+-1 6:0.0132573888013996 11:0.119148594163286 18:0.212899295177622 27:0.0386023366411141 31:0.0505300674811991 100:0.0819229895336857 142:0.0206270039941207 199:0.061970032523511 205:0.104901893075271 242:0.0928954191079951 280:0.277764073271143 286:0.0742844923863363 291:0.106707172552993 341:0.110769853997479 391:0.137197668194878 406:0.124305702267627 441:0.0934845147204625 535:0.377155603710192 852:0.131566798582005 909:0.11672378372093 1059:0.121527569555738 1443:0.191257276316078 1502:0.189830589182372 1918:0.191992167149992 1993:0.194290353970635 2529:0.60663069819591 4453:0.230499904505464
+-1 11:0.0486894280870629 18:0.174000289220892 21:0.0655463407473056 27:0.0946478155489274 37:0.0512661096034046 65:0.07751655377949 72:0.0674295066661825 79:0.0734785623333164 83:0.0280744817675075 87:0.100940280786516 91:0.0865774361130556 92:0.0715277997715469 94:0.0650452682823392 111:0.0677603401803707 142:0.0252873406021125 162:0.0586830589863704 166:0.161690971554551 185:0.189286577250958 199:0.0506474367288199 234:0.0777272534269766 246:0.223991898737682 283:0.162447219480601 331:0.0847014776167035 341:0.0905310025401306 373:0.0773490626557959 396:0.110052146362281 402:0.0825862519804545 407:0.312625002979301 412:0.1104308724498 459:0.0989754484740614 493:0.0967290681663663 505:0.0779394570104394 534:0.0825862519804545 548:0.122676374003751 574:0.0811286269252542 616:0.149441643435863 886:0.0933255289717977 963:0.0919295168436147 1377:0.103343009083458 1462:0.133143487888938 1682:0.151900034725701 2240:0.147171105644936 2345:0.178133108410015 2723:0.141245019016159 3199:0.192106126341995 4697:0.380374844387352 7576:0.449534851296636
+-1 6:0.0258110451004084 11:0.289965635736105 18:0.207248704552387 25:0.0484287587447345 27:0.131522252772701 33:0.0357074811789707 87:0.180342307393544 100:0.0398743298791807 106:0.045167594117397 111:0.0403540786779474 114:0.0453099959661975 120:0.0537606530666137 132:0.0391361486599493 142:0.0602386191980371 159:0.0388195295676474 162:0.0349481831569173 166:0.048146822833663 168:0.0479244625974466 169:0.0470356499236658 176:0.0334474908629824 194:0.153374708184121 242:0.0452149342554674 268:0.0620898447174396 275:0.0433922197580266 280:0.405587845948089 284:0.0391866628200069 286:0.1446257941113 291:0.10387504223349 299:0.0534183291701245 331:0.100886450179688 337:0.0493324301528648 385:0.0675142616340245 422:0.058841324610165 441:0.136504993278819 454:0.0643839251757805 480:0.0474610205594813 496:0.0541097263886063 506:0.0721994020797072 573:0.0819137510519397 672:0.0901600783869092 709:0.0562736141527557 713:0.0645244433823353 793:0.0774432627878198 837:0.210066637569463 854:0.0775901947604617 858:0.0647373341367597 990:0.0868820943779171 1083:0.0691767107141129 1296:0.0656906393870339 1443:0.0930905448034839 1502:0.0923961341902046 1613:0.0739970863080882 1730:0.091084037640837 1779:0.087908770435285 1918:0.0934482377991068 2264:0.0876464663622907 2376:0.0895698503624445 2736:0.337327393452865 2804:0.337327393452865 2859:0.121585966685299 3526:0.111179085585077 6508:0.300162777134228
+-1 6:0.0306338028195649 11:0.0688290619386743 17:0.0834635214120909 27:0.0445991434193103 37:0.0724715481754688 63:0.0331074545698598 72:0.0953206860947727 86:0.356963346132621 87:0.142692677062032 96:0.0948999940298109 97:0.0955751376471917 122:0.494588884454405 138:0.128440106346794 142:0.0198594780672911 208:0.114753318848235 276:0.237975564088414 313:0.347383180528235 398:0.119136549584894 490:0.317022181196217 499:0.114087270258776 560:0.182460011274478 585:0.189787523827099 844:0.167841582212994 903:0.170538102535036 1013:0.189787523827099 1637:0.248451194046953
+-1 6:0.00900401919155121 11:0.161844273342775 27:0.1048701777287 37:0.0852045976083119 38:0.146716486625827 48:0.0550833394142153 74:0.0738134219842019 75:0.109489044212853 76:0.0749092999403887 100:0.0556396271573995 128:0.0967847752499735 142:0.0420277196232623 146:0.161705507665802 173:0.0673002191995129 174:0.0660016464450485 184:0.106100586692608 219:0.150571335724171 234:0.0645915927956917 257:0.109104938063901 265:0.0850602325925488 303:0.643590736292342 317:0.0536659044983607 352:0.510166027504892 377:0.0693005912982955 419:0.109534607814067 483:0.0874229562251529 499:0.0670660431531954 530:0.0740184471269459 611:0.116497849861215 669:0.136034516102937 698:0.101160089883617 862:0.0866385923175833 5755:0.199402584954208
+-1 6:0.0269226996892131 11:0.0907362452866126 18:0.0360291147448481 33:0.0372453648699582 40:0.0841091007186244 58:0.0451498922279576 63:0.0290966832328544 74:0.0551769312913766 79:0.0456441922961298 85:0.0412474896652187 91:0.0537810895717323 92:0.0444323969279844 139:0.0550628150961682 140:0.0475621525134167 142:0.00872681017011567 144:0.0400152713989642 154:0.145964788306228 157:0.0682081668877653 159:0.0404914459124231 162:0.0364533646800071 185:0.0783886951219559 198:0.117210301863246 208:0.0504258181703512 218:0.0381789514957568 237:0.115680476992789 253:0.0735467811309933 275:0.0905221541281337 278:0.116213209655822 285:0.215331720351048 291:0.0541744155724315 297:0.394510827015312 301:0.0610056629472788 330:0.0669391762081801 375:0.0477143600686434 384:0.0729378992067309 389:0.114723320013551 411:0.0504258181703512 448:0.182860261052775 465:0.0572332626495156 506:0.037654477228083 663:0.0629921696866584 714:0.0696542070652909 827:0.0574909563026767 836:0.0763249432459641 863:0.0711324154193795 871:0.154620246481679 880:0.237515276306934 908:0.0715906956471113 932:0.0914213075647733 973:0.0919726244905093 1025:0.164083813771482 1068:0.0793121985750199 1186:0.102168086564509 1187:0.102168086564509 1305:0.0612161238631214 1448:0.0844845980666467 1645:0.0769344951288885 2078:0.0934275296926157 2195:0.104773490212041 2543:0.561307583179516 2831:0.110654612670442 2965:0.102660588964435 3924:0.115967451968111 4604:0.112261516635903 4784:0.109900722465022
+-1 11:0.163762390281206 27:0.106113059296784 111:0.227905640098361 142:0.0472509069052036 166:0.271916317658488 280:0.381769578504543 1037:0.407578499764955 1045:0.189313711041607 4087:0.697210054176337
+-1 6:0.0168669225017715 17:0.0919097609705565 27:0.0491124330942328 37:0.0798054354439039 63:0.0729156446883048 72:0.104966832531114 86:0.262057924733463 96:0.104503567784088 97:0.105247033761133 122:0.363093124435824 142:0.0131215159721285 199:0.078842353623662 208:0.126365985133134 276:0.262057924733463 313:0.382537239591194 436:0.148983266556297 485:0.116724152008397 490:0.349103804909528 585:0.208993409995466 671:0.103006884546728 903:0.187796009264674 1013:0.208993409995466 1637:0.273593654705262 1822:0.239768354918354 4088:0.288109651811102
+-1 6:0.0324151010199733 11:0.145662685693543 18:0.242923981715748 27:0.113261999982678 38:0.211275859551001 42:0.0387871480289029 48:0.0793215551252798 51:0.0440306404845749 58:0.0434886050657553 63:0.0140130363927363 74:0.0531466999202522 75:0.013138941448393 82:0.048627326049974 83:0.0839895758561215 106:0.0453793984846094 114:0.045522468098299 137:0.0530733463067074 138:0.163090389271099 139:0.0530367826225549 142:0.0285794064975799 148:0.0569878568640833 150:0.0565374979718806 159:0.117004697880743 162:0.0351120656475263 169:0.047256214163652 194:0.0513646426983155 208:0.14571121103386 214:0.111086000751047 234:0.0465068534611289 257:0.157114173743115 258:0.0614778529802403 283:0.0485988420950052 284:0.0393704208103083 286:0.07265199387277 288:0.0673344083808828 292:0.0639287806276226 295:0.0550453951711441 299:0.0536688237033958 301:0.117521927595919 306:0.0508727710076287 307:0.0622579001805726 346:0.0540127528590912 385:0.203492568640347 398:0.10085129326481 433:0.104852860860604 441:0.0457150353491491 455:0.0473355669766321 457:0.0447036675232131 459:0.11844073926418 465:0.0551273687082734 499:0.0482884924514735 507:0.0346643738557225 530:0.10658864180178 537:0.0725062437165974 550:0.0528189648877503 623:0.269969610595575 671:0.0395920307096239 672:0.271748597936544 746:0.0954012509016491 749:0.0754679213780313 793:0.0778064174253461 803:0.0810202167422158 805:0.0845116881387068 867:0.0569878568640833 943:0.0870407200875399 963:0.0550045496283359 986:0.057972436868815 996:0.0721818293861598 1102:0.0776600114459779 1170:0.0863145692200929 1254:0.0891358713538499 1354:0.0928294073170434 1489:0.0759911422178885 1538:0.0824881193676967 1791:0.0908869456241042 2056:0.0845116881387068 2107:0.0830713921491021 2679:0.0931748206182552 2684:0.111700437592634 2705:0.0950102851400067 3148:0.464683501837388 4881:0.1344859784256 5501:0.138455306364038
+-1 6:0.0100666588624147 11:0.135708653040123 18:0.215546174158158 27:0.0879350888955972 37:0.0952603053575261 47:0.190585164798175 63:0.0435181296844824 75:0.0408035875910785 76:0.167499946874787 80:0.0655450133757506 85:0.246765391099079 86:0.15640361958188 142:0.0417669000883106 151:0.0795006892671165 153:0.0873107133979555 166:0.225334993863353 185:0.0586205886907196 194:0.0797576313760614 225:0.0959207473700815 239:0.170692604194721 291:0.0810253602994886 431:0.112248892458236 532:0.116395324873594 597:0.0900180358872927 960:0.11600900979965 986:0.0900180358872927 1037:0.112585739041866 2640:0.27856941886244 5980:0.702405408735074
+-1 6:0.0516630325083651 11:0.132660851260199 18:0.0790145054565336 38:0.0601304377587258 41:0.033984199684881 46:0.0617993267407777 51:0.15037676482838 53:0.170518013400102 56:0.136273976688862 74:0.0605035395606088 78:0.0567001581191813 83:0.0191231690137478 87:0.0687563199121907 118:0.0483280845998165 132:0.0447625007623284 135:0.201726359263871 138:0.0618887333489221 139:0.0603784069450446 142:0.00191385382263198 157:0.0747927698598832 160:0.066894958729405 162:0.039972458424465 166:0.110137163087847 176:0.0382560212621127 181:0.0622960209875008 186:0.0418813019845468 203:0.0559513124529239 242:0.051715194222732 275:0.148891319394352 287:0.0685063097755848 288:0.0766551836214856 295:0.0626650619768313 324:0.15639766150284 342:0.0689458741559612 347:0.0606294502077957 353:0.0827929411498373 384:0.0799790957351017 388:0.0767482898261905 400:0.0650327849986661 409:0.0753842642354631 414:0.0545319023006975 423:0.0559179232221933 430:0.0574417612005893 438:0.0822959698567721 449:0.0843615105201339 465:0.0627583827127202 480:0.0542841858925374 507:0.118388384494456 510:0.0667235848108686 517:0.0822959698567721 532:0.0853359524311608 564:0.182897846929114 576:0.07224817981291 591:0.0776060890057262 631:0.049532846530433 638:0.0901419820214509 647:0.0666667809479555 673:0.07462401418453 709:0.0643637093240479 742:0.075746934367628 744:0.0910668260183911 798:0.577555692521849 819:0.074126024405127 872:0.0842260547384917 950:0.0804217486348942 973:0.10085137382811 1003:0.0779993161932278 1126:0.0787063902491785 1142:0.122198718870403 1162:0.0856231992877599 1225:0.0658333067729668 1232:0.0835620423377717 1243:0.0982626759761382 1442:0.110992355770679 1473:0.104543488155268 1593:0.112031073903771 1771:0.105293594792531 1980:0.0916427102433728 2586:0.124040948673541 3546:0.106882689251472 4333:0.153102219483618 5654:0.15762100221731
+-1 6:0.0146160641229744 47:0.0691789854918549 63:0.189555576286132 76:0.486395734190884 82:0.219262039392462 86:0.11354339926076 120:0.121772543414319 122:0.157319522539092 140:0.206568131424446 142:0.0606425327660478 227:0.103892129714124 234:0.104850383148088 246:0.151077230760366 264:0.120320276357887 276:0.11354339926076 304:0.110672735837852 317:0.0871149077626882 345:0.107260275058458 357:0.541204706441119 408:0.0860656727428539 457:0.100785074007452 458:0.153882837164244 586:0.107442427452852 882:0.109759764001195 1045:0.3037101210548 1269:0.149310257012289
+-1 6:0.0193585609720432 17:0.052743489853812 18:0.0518129179174653 27:0.0563674867445584 37:0.0457972812698645 47:0.045812798758974 63:0.0209217471854474 72:0.0602364428775435 86:0.3007700019744 96:0.0599705929914557 97:0.0603972396261857 100:0.0598123511219832 111:0.0605319846227624 122:0.520913076109641 136:0.245182688191526 142:0.0175698488047427 168:0.0718877230763814 197:0.215858812580826 208:0.145033193087545 239:0.082062063266037 276:0.1503850009872 283:0.0725590556764857 284:0.0587808357655383 313:0.109761731518086 323:0.0828015499766761 369:0.0865540225473442 390:0.0884172114413095 423:0.0733351616715601 434:0.0837558388121301 448:0.0876561799477139 490:0.10016864801809 506:0.108300653605302 507:0.0517546123356381 560:0.461211201759227 585:0.119933309402694 771:0.102687898547162 912:0.0920519425044875 1215:0.113456314624299 1307:0.159130703157295 1747:0.145564103344945 2308:0.144268325292181 2487:0.173445470243152
+-1 6:0.0207638332983434 11:0.0466528813478954 18:0.0555741096609749 48:0.0635128187080082 67:0.117453077410998 92:0.0685359858787222 171:0.0897664302514895 182:0.527847061377175 194:0.164510805898712 256:0.0706520930984628 268:0.299691046267447 276:0.161301715327854 304:0.235835401884626 324:0.110000825049271 367:0.0886118896659481 404:0.0871840419892986 412:0.105811848525573 501:0.107960376400491 640:0.193791413119398 750:0.360121439806411 863:0.109720171671215 954:0.283731463037077 1043:0.116111589216769 1075:0.145059514677438 1314:0.121061595979896 1467:0.127574456853767 1485:0.129465222872216 1665:0.111895739023672 4868:0.198622271427491 5152:0.192905948447947
+-1 6:0.0102347087782796 11:0.183965512495783 27:0.0894030520492561 37:0.09685055357388 38:0.166770025878743 74:0.0839024064548246 75:0.14519662842855 76:0.0851480714739121 100:0.126489152982345 128:0.110013535931177 141:0.0934908758348545 142:0.0424641447393621 146:0.183807780014096 174:0.0750228998718595 184:0.120602653426416 219:0.17115176441866 234:0.073420116919502 257:0.124017646297785 265:0.0966864564231884 303:0.640113394467777 317:0.0610010809815993 352:0.434922500358268 377:0.078772751924626 419:0.124506044275425 483:0.0993721224339797 499:0.0762327807151461 611:0.13242103790095 669:0.15462801960864 698:0.114986878405913 862:0.196961099808095
+-1 6:0.0212842041068037 11:0.239110340203493 18:0.227867499431803 27:0.0929617465826622 37:0.302117089227509 38:0.173408318037983 74:0.0872421474183199 80:0.0692917810139247 85:0.0652178272656318 100:0.131524062271632 111:0.0665532483308749 112:0.355466913826104 114:0.0747267069947306 120:0.0886638032930145 142:0.0220772164463423 151:0.168090418093992 153:0.276905039209845 166:0.238215880131778 169:0.0775727111689582 185:0.0619715335349595 194:0.0843168388084274 308:0.0786314370046584 349:0.105499640281775 372:0.105052122115661 385:0.222693396435309 400:0.281319069450179 430:0.0828272632481225 438:0.118665406789729 613:0.0984255168896819 806:0.114240151463754 883:0.124095569508213 896:0.134785803202511 1045:0.055283592007437 1175:0.112757600132163 1214:0.154719931263848 1371:0.15932269466709 1429:0.171520557843438 1575:0.172622574997352 4413:0.210938402841536
+-1 4:0.0113265334961795 6:0.0366596027978849 11:0.0470674472432562 15:0.00897136499422543 18:0.21025481698438 20:0.0295421178672447 25:0.0982624217473069 27:0.0152491387420995 36:0.0600212091174928 37:0.0123895730753427 38:0.021333997031058 46:0.0438522220143928 50:0.0248551417541786 51:0.0711372936118525 53:0.020166330215969 58:0.0175653910168325 65:0.0374671304309755 68:0.0160751600833896 72:0.0977748621931119 74:0.0429327435976372 77:0.0394906851447172 78:0.0201169499185892 79:0.0355153930946728 80:0.0170495933200159 83:0.0339240529564009 85:0.0320943527738337 91:0.0209233249742688 92:0.0518587567328812 94:0.0157196071795507 96:0.0324477795902784 97:0.016339310831318 106:0.0183290974103581 112:0.0291548109110675 113:0.0280349126943343 114:0.0183868843571522 120:0.0218161774200608 135:0.0238571884170096 137:0.0214367436950323 139:0.0642659260027757 142:0.0162966324377978 144:0.015567786634322 145:0.0439474904957724 151:0.0206797489367324 157:0.0265361236274021 159:0.0787652024392006 162:0.0283640811920707 166:0.136766519464514 169:0.0763486323375645 173:0.0195722063636061 176:0.013573056748744 177:0.081989865100677 178:0.0211328093464812 183:0.0230362916581886 185:0.0914904563336126 194:0.0207465848139209 197:0.291982237621019 208:0.0392359392148202 214:0.0673027694290703 218:0.0148533734753941 225:0.199607524586079 227:0.186128093479961 234:0.0187844853789189 239:0.0222003119258736 242:0.0183483081303237 249:0.0896490264517304 258:0.0248313903111048 264:0.0215559963079966 275:0.0352172940949359 276:0.0406837678461149 283:0.0196294561086363 286:0.0733617851502797 287:0.0243057171016351 288:0.027196899286812 294:0.175165461557308 295:0.311265777265873 301:0.0474680346300581 309:0.0578121053299691 317:0.0156070837513571 324:0.027744578041774 337:0.0200191959618516 341:0.0437575809918877 342:0.0244616724802328 348:0.0260144167384674 349:0.0519174405937338 355:0.0157597458592897 358:0.312066462677523 364:0.0485235464065209 366:0.0330150400137397 369:0.0234155250613276 375:0.0556892619472088 388:0.0816897987934468 396:0.0531930009903944 398:0.0203673168876205 399:0.024690507268092 404:0.0219896937671689 409:0.0267459830550541 411:0.0196179696074101 412:0.160128167466772 423:0.0198394166493838 424:0.37757749521204 433:0.0423508985276775 441:0.0369293275809594 449:0.0299310678926653 478:0.020534862533269 483:0.0508485755472123 495:0.0288580511187342 506:0.0878959727353855 507:0.0420036430376722 521:0.0258213393429292 526:0.0314266264376295 528:0.0547948369736967 534:0.0399175366278449 548:0.0296474203347118 549:0.0559224434815739 550:0.042667994062116 575:0.027329955033559 615:0.0347679717654453 626:0.0247137967698028 628:0.0569086083514425 631:0.0175740214142506 636:0.0535614727170781 653:0.0267497004356071 662:0.0272964593785483 676:0.0261841444339501 688:0.0290687643139133 690:0.0327247053611794 702:0.0623859072953598 709:0.0456718838182035 712:0.0240459970771504 725:0.0380696219371143 749:0.060964178833896 782:0.029835269073584 787:0.0300772045574001 792:0.0287345270735983 807:0.0340488916333188 811:0.0297407308018961 822:0.0701146637536111 840:0.0330894946177089 850:0.0720108261725724 853:0.027709097451217 856:0.0196524843494614 866:0.0292858444210405 886:0.022554148733656 904:0.0319180866908525 912:0.0498057629956761 941:0.0373576731256592 953:0.0286130908590595 963:0.0666503159022197 973:0.03578159398174 1005:0.0276036949987612 1044:0.0382208865765059 1068:0.0308561042259194 1093:0.0332407592571005 1101:0.0674293087860075 1129:0.0305343427744426 1169:0.0295096882258664 1207:0.029835269073584 1214:0.114208865811343 1225:0.0233573481848699 1237:0.032111411492771 1253:0.128185560757595 1284:0.036709955074418 1294:0.0297407308018961 1296:0.0266573890374624 1337:0.0337146543930037 1359:0.0290687643139133 1400:0.0399397052394733 1422:0.0355671062632344 1424:0.0243499314257014 1436:0.0351564342064451 1447:0.0340488916333188 1548:0.0288166400243434 1608:0.0283762077004297 1613:0.0600563226590465 1637:0.0424746580112778 1645:0.0299310678926653 1666:0.037776323867318 1707:0.0299310678926653 1759:0.0397480990848508 1805:0.0379214763795978 1808:0.0263287127919967 1828:0.0713470995309237 1855:0.0338798295981864 1872:0.0390290189527242 1944:0.0469223340027988 2039:0.04865503635122 2083:0.0509430643065943 2118:0.0390290189527242 2147:0.0440091462721296 2150:0.0392021551614767 2479:0.0443596940869562 2525:0.0436749090318146 2569:0.0393795667675507 2632:0.0530100038953306 3246:0.0436749090318146 3281:0.043355531786428 3458:0.045116688845256 3546:0.0379214763795978 3595:0.043355531786428 3712:0.0474547853306832 3714:0.0474547853306832 3736:0.0474547853306832 3994:0.0480298765759252 3998:0.0509430643065943 4024:0.0436749090318146 4196:0.0519024613222042 4319:0.054319948725767 4422:0.0447282264042562 4585:0.0407617213011455 4706:0.054319948725767 5020:0.0500968161646614 5070:0.0559231916259997 5181:0.04865503635122 6792:0.0609033189454052 8001:0.057990131214736 8203:0.057990131214736
+-1 6:0.0178034904519008 17:0.0970132252462726 27:0.103678988691737 37:0.0842367840242403 63:0.0384822122668222 72:0.110795315537715 86:0.276609189397006 96:0.110306327134554 97:0.111091075473929 122:0.191627280357904 136:0.225487196826928 142:0.0415503393045859 197:0.198518904080283 208:0.133382696785765 239:0.150940058192348 276:0.276609189397006 291:0.143298213257198 313:0.40377834734481 323:0.152300225883654 423:0.134888316594786 434:0.154055487774752 490:0.368488457617341 507:0.190388685995828 560:0.212081084918664 585:0.220598166557869 671:0.108726537713985 1307:0.292695511650537
+-1 6:0.0125168498112353 11:0.224986244380829 27:0.0364460647068419 37:0.177669515491044 38:0.305934747948577 74:0.102611011524334 75:0.126837609334315 100:0.0773468871918647 128:0.134544415115731 142:0.0324580145353739 146:0.112396670311499 173:0.0935567459445173 184:0.147494699895961 211:0.124484932753056 219:0.209315279659221 234:0.0897913752617017 257:0.151671169769542 265:0.11824565603644 303:0.671011057509118 317:0.0746031358107702 352:0.177300586805311 419:0.152268470998787 431:0.139569895789656 500:0.12953400047117 609:0.0886384629199253 669:0.189107061078041 862:0.12043979747551 1150:0.13658158097295
+-1 6:0.0115291851646909 11:0.0518083245803321 37:0.109100120936101 38:0.18786294265224 47:0.0545685436606278 51:0.0783026106804061 59:0.0715901097374995 67:0.130432397349501 75:0.116829258632587 76:0.0959175198538557 100:0.0712436913277514 126:0.109539644131834 128:0.123927944981168 141:0.10531551430136 142:0.0149484281308807 146:0.310583423974497 184:0.135856364145607 216:0.100308015950016 255:0.107308117839436 257:0.139703282118854 292:0.113688794113987 303:0.515053098173417 307:0.110717356503746 324:0.122156623205312 357:0.106725880853827 377:0.177471711710772 385:0.120628114143854 391:0.11931288615565 434:0.199526519700216 499:0.0858746314647883 549:0.123110483908123 607:0.113095268575867 616:0.159014420031782 690:0.144083629467764 746:0.169658377111107 902:0.159014420031782 987:0.0941245582930156 1102:0.138107953342641 1269:0.117776275856401 1638:0.17338432368188 1873:0.152666406623526 5784:0.220571308988667
+-1 6:0.0179847559024576 17:0.0980009611080547 18:0.0962718956936324 36:0.0687065778853742 46:0.150593572750961 56:0.083018643182951 76:0.0748124501731417 83:0.0232998197227975 94:0.215931754302734 144:0.0534615693662628 157:0.0911280997961764 160:0.0815053445189233 162:0.0487027581305952 169:0.0655474956011907 185:0.104729582363941 284:0.109218756963636 294:0.0859340480587873 351:0.0638159350565332 355:0.0541207794172585 381:0.259323163572982 442:0.306089424723583 465:0.0764653077243359 593:0.259837195773562 646:0.116927808985115 679:0.11312438043807 732:0.098398871042431 780:0.091231552553481 894:0.142332068559493 909:0.079172783935045 1003:0.0950349811005259 1067:0.0956472568474475 1188:0.110727015891766 1266:0.245014143644849 2357:0.149984659580431 3342:0.141523030621307 7717:0.627447000704066
+-1 6:0.0306388784943783 11:0.068840466136128 17:0.0834773503740374 27:0.0446065329931836 37:0.0724835558917138 63:0.0331129401008037 72:0.0953364796548624 86:0.357022490923621 87:0.142716319625487 96:0.0949157178859815 97:0.0955909733670271 122:0.494670832241254 138:0.128461387420406 142:0.00794510742331855 208:0.114772332175887 276:0.23801499394908 313:0.347440737994097 398:0.119156289164326 490:0.31707470818772 499:0.114106173229706 560:0.182490242835644 585:0.189818969474257 844:0.167869391665725 903:0.1705663587707 1013:0.189818969474257 1637:0.248492359601077
+-1 6:0.00875904334006666 11:0.11808068494688 18:0.187547656778744 27:0.0510084670114928 76:0.0728712134873714 83:0.022695234995081 97:0.0546550996502418 118:0.0573554119647472 142:0.00681404251873332 146:0.235958884555902 161:0.0854790147881745 185:0.102012054640951 194:0.069397459422441 216:0.228620387263728 225:0.0834610564348252 234:0.0628342242131463 239:0.0742601859467289 287:0.0813027797790722 375:0.248374585080555 448:0.079322453801758 463:0.107632360615875 626:0.248003426668475 640:0.0817492301183616 767:0.0837858346045804 793:0.10512226723341 895:0.0910843005060392 920:0.460265383371543 930:0.076688680947412 952:0.081599489952859 1026:0.12119222705278 1196:0.109945029967461 1600:0.130552319013583 1894:0.137087761501317 3105:0.548351046005267 3772:0.144001687698062
+-1 6:0.0243205626218598 11:0.262292451920744 18:0.260374583968881 27:0.0566525164008899 38:0.0396292747131288 65:0.0695976099743613 74:0.0398751693773605 77:0.0366782466485621 83:0.0126032230344345 84:0.0285472483117374 97:0.030351323130628 106:0.0340474799664278 114:0.0341548229451487 138:0.0407880884781369 139:0.119378100247692 142:0.00756801131588453 151:0.076827933407813 159:0.0292622881755739 162:0.0263440546070591 166:0.181466161515662 169:0.0354556265344029 181:0.0410565134941207 185:0.0283249033799273 194:0.0385381186541453 197:0.0542375828082862 208:0.145766572621916 225:0.046347980497475 237:0.0835997672538598 264:0.0400416526805162 283:0.0729259601438949 289:0.042319510850744 295:0.0825994637178479 301:0.0440874671002425 307:0.0467111658579789 309:0.0357965707743432 328:0.0493485193571792 331:0.038024267824063 341:0.121923791077572 343:0.154612026534454 358:0.128818571286822 398:0.0378336040327475 402:0.148298794885301 404:0.0816945473356987 415:0.042319510850744 424:0.150294543574911 433:0.0393347620152439 442:0.0413920937390186 456:0.0527106349850918 483:0.0944545068698656 490:0.302025492128986 496:0.0407880884781369 506:0.0544241450963198 515:0.0351425039397721 538:0.0426209443556011 599:0.0456075425039194 636:0.0497469441205687 655:0.0368310261891391 656:0.0480154522415334 658:0.0449866752844987 676:0.0486387361632529 735:0.0632480110618739 778:0.046483019474911 793:0.0583769844249356 814:0.107994207076173 829:0.0360840393305098 913:0.0507671532130449 981:0.115462145304913 982:0.0544824747875388 1059:0.0445882505211091 1112:0.0585994268809667 1121:0.0638991762248588 1207:0.0554209355394544 1331:0.10997233240481 1364:0.0707167767847035 1373:0.0564304105020292 1379:0.0513405881714045 1393:0.111377524040408 1472:0.0494611465100231 1587:0.0783957238341688 1608:0.210842539940367 1613:0.111558490678089 1669:0.0728205302540917 1736:0.0696485077252474 1759:0.0738346562842892 1805:0.140883173723774 1808:0.391258249659694 1920:0.0731500837486464 2012:0.076989557273379 2076:0.0606567586047414 2371:0.0805356950690893 2561:0.0724989185856615 3342:0.0765519364806177 3493:0.0903798664138159 3546:0.0704415868618868 4024:0.0811289588900283 4292:0.0830855638080768 4968:0.0984694993560662 6085:0.0881503227728225 6463:0.0916518987962214 6622:0.0946300258313335 6645:0.103880933355121 6646:0.103880933355121 7146:0.0964121676322915 8204:0.107720406879854 8645:0.100902806320009
+-1 6:0.0182771252918054 11:0.164262647530935 27:0.0532186054067911 37:0.172955551603693 38:0.148908812352928 50:0.173485992057198 100:0.338826166996408 128:0.196461982804619 140:0.129154866439189 141:0.166955844889363 142:0.033176673454821 159:0.109954386258557 173:0.136611718867689 184:0.215372010572177 211:0.363546219245566 216:0.159017497689743 257:0.221470498954484 303:0.163301913756721 324:0.193653920520341 412:0.186279323771467 483:0.177458564926922 499:0.136136368377221 530:0.150248950303603 557:0.172013318824835 609:0.129430033666006 671:0.111619042215991 884:0.188693970094564 1602:0.252084291873941 1638:0.274864785524816
+-1 6:0.0406618472530498 11:0.182720821153397 18:0.217661731896016 27:0.355192641543277 142:0.0316326275958822 166:0.303395503462365 343:0.430829575791266 351:0.288563694459118 2700:0.655353866068062
+-1 6:0.0304210404845048 11:0.307579591549871 18:0.183198351917459 27:0.0664340804596365 30:0.0457140166776026 37:0.0899602603211829 38:0.123924329914152 48:0.0232631181516406 59:0.0236123107954373 68:0.0233442359476364 79:0.0773628111826815 83:0.0492642743466446 85:0.0233035982177626 94:0.0684837134622575 96:0.0235602202031895 97:0.0237278338311658 101:0.0739168767150754 106:0.0266173880966035 120:0.0316813014942002 139:0.0311088439600741 142:0.0226797792073468 145:0.0319101204006018 151:0.0600619758699376 166:0.198611390714275 173:0.0284226222941296 176:0.0394213976880693 185:0.110718171624704 188:0.0420287853632283 189:0.0284557979149432 194:0.120512186128525 199:0.0533247788213993 207:0.0449695424811503 208:0.0569781587185756 214:0.0977366148350232 218:0.021569965911957 219:0.0317950836900222 237:0.0653560102532069 239:0.0322391389585118 242:0.053290571541717 275:0.0255711550779199 284:0.023092808746462 286:0.0213070950858839 289:0.0330842354700961 292:0.14999027940709 304:0.14396744179586 308:0.0561930837646135 328:0.154317287860127 330:0.037818632843948 341:0.0317722277686035 343:0.0805809674945665 347:0.0624763786038976 385:0.159145364200507 389:0.0324076225911266 402:0.0869519546295251 406:0.0356547286364856 409:0.0194201655177861 423:0.0288106632172976 434:0.03290456050681 455:0.0277647831188662 461:0.0416101844229412 466:0.0702755641962921 499:0.0566474473925298 501:0.0395431196881133 507:0.0406649326723204 514:0.0403943027526691 537:0.0425287000903314 550:0.0309810824785379 560:0.0452981908782076 570:0.0441157506594974 630:0.0526141026828145 671:0.0232227945306088 690:0.0475225900896393 709:0.033162196410313 743:0.0482719999770423 789:0.0390730526291026 793:0.0912750577652174 796:0.0334263554299744 797:0.168576880643971 800:0.0335339205471481 813:0.0531315834756899 837:0.0825285668865756 866:0.0425287000903314 944:0.0416101844229412 1005:0.0801717887392631 1009:0.033891368972579 1050:0.0897779455676727 1112:0.0458114283073879 1213:0.0483835916713086 1215:0.0445727751328332 1365:0.045988275319998 1472:0.0386673707909778 1477:0.629606024703559 1664:0.0451325727348648 1687:0.0582860361903603 1707:0.0434656891394249 1943:0.0456375288826087 2056:0.0495705204785824 2107:0.0487257116311868 2273:0.0644188399965547 2652:0.060908181561027 3042:0.0601883289850488 3096:0.0639097768918771 3724:0.0739791645557282 3912:0.0697486535442223 4388:0.0739791645557282 4644:0.0812112708980842 4950:0.0812112708980842 6176:0.153961519773157
+-1 6:0.0481998382681499 11:0.086637618532264 18:0.292414038738375 27:0.0467821230547289 36:0.0245515032100458 37:0.091222547110451 38:0.104719322577954 41:0.0147961768698341 46:0.0269064382086955 72:0.0399945265730469 74:0.0263422732002144 76:0.0267333662526696 77:0.0242303270132272 79:0.0435824086380711 85:0.0787686169675785 94:0.0385803610227757 100:0.0198564735239071 113:0.0344028015660735 118:0.0210412748909699 142:0.0124989200533987 161:0.0313586353223779 162:0.0174033689259894 166:0.383615670835301 185:0.0561358626073211 194:0.356425899246616 197:0.107491046159642 199:0.0150202808403713 219:0.0268676831065781 227:0.0228405486247752 246:0.265713050239601 258:0.0304716266748105 283:0.120440589688699 286:0.0180050565134668 291:0.0258636575480226 303:0.0574205969212772 307:0.154291293522382 324:0.0340465198986865 331:0.0251195334565346 341:0.026848369251022 342:0.0300179306241179 343:0.102139559696059 351:0.228038883992514 355:0.0193394363463976 368:0.0391680050787547 390:0.029352700322071 404:0.0269844632447712 412:0.130999934036098 434:0.0834156607113097 454:0.0641233449937225 465:0.0273239958360786 472:0.0292761432141245 507:0.0859073477555515 510:0.02905038139504 514:0.0341342496925232 517:0.071660697439761 530:0.0264154418486511 534:0.0734766917193797 573:0.0407911113223748 614:0.0388613038406162 616:0.0443192311127568 657:0.0333744406332953 660:0.0413726476553523 671:0.0392477459962388 686:0.0380004477613786 706:0.0327123852791872 709:0.0840687880827941 712:0.0295078381346545 726:0.0296128009402072 750:0.0371539084996884 780:0.0326005431257414 800:0.0283370460466718 814:0.0356714836734492 847:0.0342675031841673 887:0.0406054882234305 908:0.0341784441285944 930:0.112535334439385 944:0.0351617017266318 1006:0.0450483050792558 1009:0.114556397521183 1012:0.042900344835418 1020:0.0410770857383869 1044:0.0469024316539666 1055:0.0350631892879588 1056:0.0315538485707799 1061:0.0416784622957188 1067:0.0341784441285944 1099:0.0455165622753483 1104:0.189935871947776 1117:0.0383489821353093 1184:0.0423238799846256 1193:0.0391680050787547 1249:0.048547517396084 1292:0.077129827726796 1294:0.0364960815595625 1296:0.0654247705583745 1314:0.0374699556539697 1376:0.0460110902883682 1603:0.0930700260210548 1669:0.0481065869434744 1698:0.0465350130105274 1819:0.0446036677644786 1851:0.0435171537281231 1879:0.0535952883185359 1969:0.0439090747630681 1978:0.0540054446682246 2154:0.0439090747630681 2246:0.0813956225640839 2366:0.0487765373252295 2423:0.0829468237107596 2531:0.0487765373252295 3011:0.0548878576568213 3365:0.0524682106872986 3413:0.066658257062078 3662:0.0540054446682246 3924:0.05536455599433 3961:0.0544356163988944 4036:0.0564030221104901 4156:0.0524682106872986 4625:0.0605469367304862 4659:0.0597066086501277 4705:0.0514690175605088 5222:0.0564030221104901 5415:0.224210949315797 6138:0.149473966210531 6364:0.213486269644169 6562:0.0711620898813896 6659:0.0686256627736738
+-1 6:0.0122476706925949 11:0.110073919280659 18:0.0655614389098454 27:0.0713245593423562 33:0.338873121208985 38:0.0997851723291392 59:0.0760515228428229 63:0.0794199538522944 74:0.100404326770465 79:0.083057797728429 83:0.0952034669948418 86:0.190289554255269 94:0.0735250740437574 126:0.116366028470036 132:0.074282410355544 138:0.102703026165117 139:0.100196671877644 142:0.0254079951016357 162:0.0663334377891799 185:0.0713211479501517 199:0.0572502294778617 219:0.102406941636921 291:0.0985800695404657 299:0.101390718908003 317:0.0729987699640757 328:0.248515802718571 369:0.109521070993886 410:0.467507715668308 483:0.118916625569114 500:0.126748327669577 558:0.271925757956771 599:0.114838248269894 631:0.0821986968866665 717:0.124116998106489 756:0.162619693304493 913:0.127829973389476 1495:0.36837886969107 1720:0.159256350992302 3313:0.221959528970165
+-1 11:0.177590479747343 18:0.211550337537066 27:0.115073241637563 37:0.186988702824127 38:0.321981750834539 59:0.24539921019322 112:0.440016798011614 142:0.030744462918682 400:0.348232455242321 456:0.42826578742501 883:0.46083727923953
+-1 6:0.0183667513375274 11:0.165068146827075 27:0.0534795749567229 33:0.101635625392513 72:0.114300620731753 74:0.150567511920446 126:0.174503867934414 142:0.0142882983547335 162:0.0994744052004785 179:0.100120747760549 225:0.525025990987085 328:0.18633861354297 349:0.182077342383176 456:0.398067734150272 558:0.203891535950601 1113:0.22299285321154 1299:0.271409489286069 1715:0.304100507074491 3218:0.336886879704617
+-1 18:0.129387269333377 27:0.140760943066001 59:0.150089733125123 142:0.0250716820748634 166:0.180351021647544 280:0.253212216575107 1700:0.347390359226489 3609:0.38715790228365 8474:0.535292234949103 8476:0.535292234949103
+-1 18:0.239445044540755 27:0.13024662494111 77:0.337299603846564 142:0.0231989208136829 146:0.401669894416427 153:0.38796546011749 324:0.473946458416021 1489:0.524320061493539
+-1 4:0.0264931287973109 6:0.0428739993092425 11:0.0412846064860718 15:0.020984313370006 18:0.0983585657253581 27:0.0802535164865087 37:0.0289796128126461 38:0.0998018204415171 54:0.0229301210341827 63:0.0992915053012044 72:0.0190582141930655 75:0.0434457204248321 78:0.0470541975955845 85:0.131372029092842 86:0.142740976557909 96:0.0189741019209885 97:0.0191090886924678 100:0.037848071520125 106:0.128617057971408 120:0.0255143728860031 122:0.494435220916768 135:0.0837041049258464 138:0.0256800402727225 139:0.225480124449941 140:0.0216405775216341 142:0.0412948805098103 148:0.24227768771902 157:0.0620688528647588 158:0.0439614422810239 159:0.0184234360289657 162:0.0829306310368901 168:0.0227445639017342 181:0.0258490397399166 185:0.0356665235688796 197:0.170738978312074 208:0.06883059972314 215:0.0390194199211076 234:0.0219687599344832 239:0.0778908732390674 258:0.029040713204543 276:0.0237901627596514 283:0.0229569668902969 284:0.0185976745131587 292:0.0603969492662551 296:0.0552313900913602 307:0.0882275682809967 308:0.0226274052069361 309:0.0225373978877003 313:0.0694550504493116 324:0.0973432003360553 328:0.0310696581226371 339:0.0238199070236883 348:0.0304242817748081 364:0.0283745367698746 369:0.0273848358597827 391:0.0316923685756058 412:0.124848323811385 414:0.0226274052069361 430:0.14300891239613 432:0.0575357456251443 441:0.0215947234061165 457:0.0211169766802061 458:0.0322422771018754 459:0.027974330380492 466:0.0282980317271166 476:0.0380261214344637 490:0.0316923685756058 493:0.0273394155015343 495:0.0337499582456489 499:0.022810364910006 502:0.0211386053815077 505:0.0220287369615464 506:0.0171326273187714 507:0.0327492939573753 515:0.0221255996573948 521:0.0301984746331275 528:0.0320417247223402 532:0.0708184051138449 550:0.0249504551103793 561:0.0271380084895923 567:0.0332319780119674 576:0.0299785771469298 594:0.0293227110052127 603:0.0327872845245587 626:0.0289031856531303 630:0.0423724964442366 655:0.0927547498412205 657:0.0318072142697517 667:0.0884897013617825 671:0.0187023578945283 713:0.0306227810640395 726:0.0282222169648292 744:0.0377871646924251 747:0.0337499582456489 776:0.0381892866741599 778:0.0292655492486071 796:0.0269197430798912 811:0.0347822664333511 814:0.0339963907406863 822:0.0410001175123688 826:0.0399213632014247 829:0.0454367742046402 847:0.130633358412705 852:0.0607832994224175 862:0.029467340149158 873:0.0354092025569224 882:0.0229973971807252 904:0.074657438831547 915:0.0379457117699735 985:0.0392410007499707 991:0.032531343546299 1009:0.0545884786798798 1045:0.0318174075229759 1067:0.0651469253222715 1074:0.0400232159129256 1078:0.116626819222644 1114:0.0374787724356704 1138:0.0301984746331275 1199:0.0886995618074801 1215:0.0358964547435422 1269:0.0312842079692372 1282:0.0430790255055984 1305:0.0278530765330719 1307:0.0503473791045433 1318:0.0405518647961813 1331:0.0346191011936549 1337:0.0394298344454618 1338:0.0386986999614923 1393:0.0350614531049536 1424:0.028477639239066 1462:0.0376315538412772 1481:0.053754399345352 1513:0.153235540765538 1531:0.0418471537761785 1538:0.0389654762034279 1567:0.0448806571550183 1593:0.0464860457464071 1659:0.0430790255055984 1672:0.0493576781944513 1805:0.0886995618074801 1923:0.0454473490950685 2204:0.0456450698837373 2273:0.0518793808031137 2297:0.0467101322480046 2317:0.190584179838494 2369:0.0399213632014247 2420:0.0577037203746392 2515:0.053754399345352 2631:0.04434978090374 2666:0.165410928043129 2770:0.0577037203746392 2940:0.0500043622608754 2972:0.0523103853179326 2982:0.0548764296960715 3398:0.0532449860580196 3517:0.0619960582475943 3561:0.0503473791045433 3571:0.0487572266838137 3688:0.0523103853179326 5162:0.0510785135885128 5259:0.0635280599461647 6624:0.308207030525816
+-1 6:0.0161939103282415 11:0.0727700484054822 18:0.260056648160478 27:0.117881957637238 33:0.0448059151429301 77:0.0610557665193639 83:0.020979722677449 85:0.0496204434632714 91:0.0646982770623632 92:0.0534518647703744 98:0.0525223758253336 100:0.050034496468487 120:0.0674591200442842 134:0.0579900361164438 142:0.0188969255951333 166:0.0604148594932895 168:0.0601358408242006 185:0.0471505277779189 186:0.0459473061381516 204:0.0486075469297932 216:0.0704463928844324 280:0.0848222557688948 292:0.0798437231646789 347:0.133031199016367 375:0.1722001308726 382:0.0711179776077203 389:0.0690056784164908 406:0.0759197541071783 423:0.0613466586556401 489:0.0922554377531649 496:0.135794277777447 514:0.0860117479389638 654:0.0846126639360239 656:0.0799280366226467 784:0.238528899350786 858:0.0812327110213373 969:0.0905565285960943 1000:0.0983060695488385 1083:0.0868032616075137 1419:0.135049824475261 1518:0.103751849676161 1953:0.142124773928337 2820:0.140777902803742 3105:0.380176264232546 3477:0.125378550286254 5894:0.315048252891652 6509:0.564968494442409
+-1 6:0.0323436747136652 11:0.072670859811417 17:0.0881221637062178 27:0.0470885118559617 37:0.0765166569096683 63:0.0349553970661812 72:0.100641153913927 86:0.37688779352726 87:0.150657283984633 96:0.100196980287039 97:0.100909808063407 122:0.348130072521742 138:0.135609184544861 142:0.0125807788678733 208:0.121158448365097 276:0.251258529018173 313:0.366772896534667 490:0.33471725224654 499:0.120455223269348 560:0.192644291917435 585:0.200380800631622 844:0.177209913196179 903:0.180056943865816 1013:0.200380800631622 1637:0.26231887205803 1822:0.229887511408657
+-1 6:0.0427348174573151 11:0.192036059971562 18:0.114379141731217 27:0.124433539250934 37:0.303298131188892 38:0.174086209184688 100:0.132038218676592 128:0.229679636113832 142:0.0609496831002207 146:0.191871407782672 173:0.159709931817293 184:0.251786958021881 185:0.12442758770199 257:0.258916574513055 265:0.201856161975433 303:0.381825772018567 385:0.223563953762554 434:0.184894449943347 609:0.151313972353487 717:0.21653575567792 862:0.205601762317701 1045:0.110999415386517 1852:0.364983990901271
+-1 6:0.0376687715402082 11:0.0604539050437186 18:0.288056973225757 25:0.0201934796522151 27:0.0783445918151389 33:0.134001465653509 36:0.0616734781955778 37:0.101845074586073 38:0.0657638434845866 41:0.0247787052318178 47:0.0254698956861149 51:0.0365477836165779 52:0.109681355974763 59:0.0334147203654849 67:0.0152198470571363 72:0.0669776114166403 75:0.00545301162692582 76:0.0671543272349937 77:0.0608666822531069 78:0.0206707310700286 81:0.0163820833900601 83:0.0348579172441639 84:0.0157911609828745 85:0.0164889244577159 87:0.0250659512321351 100:0.0166265146977053 106:0.0188336624020606 111:0.0168265569423792 113:0.0864199806463934 118:0.211423080223359 128:0.0578434317561302 132:0.0163187131389503 135:0.0245139311799605 137:0.0440537124892557 142:0.0265133086311513 148:0.0236514826779624 161:0.0262576741262617 162:0.0582897801846163 166:0.120455520117921 176:0.0139466970384147 179:0.014667130622998 181:0.0454215416422223 185:0.0470045067964987 194:0.149223890267616 199:0.0251540053026449 208:0.0604740443560056 209:0.0169020441943874 214:0.023051828644774 215:0.0171410836208462 225:0.0512755844818735 227:0.019125184386656 229:0.0281809031468274 234:0.0193015863303271 246:0.0278113453142984 270:0.0305113410206726 283:0.0403396349759375 286:0.0150762589537231 291:0.0433130769006762 296:0.0485258816233425 299:0.0222739952687622 303:0.144240778330528 307:0.0516773828220646 309:0.0198011873354568 317:0.0320734338274219 319:0.0244083129418711 331:0.02103345751257 341:0.112405358742094 342:0.0502701110663671 343:0.028508333205273 347:0.0663096066258624 351:0.0572834625209491 387:0.0189930767238775 390:0.0491560702090088 396:0.0273286512798884 398:0.0418559803256278 402:0.0410163900567121 404:0.0225950279745643 406:0.0504564249309149 423:0.0203855578407893 432:0.0252752354838272 434:0.0232822763009009 438:0.060003990023479 454:0.0536927031237705 457:0.0185532160050932 472:0.0490278623599209 493:0.048040407387333 495:0.0296524580661841 502:0.0185722188184804 506:0.0150525967894767 507:0.0143866409952285 510:0.0243248929703977 526:0.0968752240512681 528:0.0281516170118491 534:0.0205081950283561 573:0.0341558137763299 576:0.0263389511555263 603:0.0288066602154645 612:0.0313212030322778 614:0.0325399189689983 616:0.0371100309730252 625:0.0299130470812472 646:0.0349861924910651 656:0.0265601688727326 662:0.0560957573848254 663:0.0251814870631213 671:0.0328635004031605 673:0.0544101808440141 678:0.0291175520008193 695:0.0265601688727326 709:0.0703937151274085 712:0.0247079373813606 716:0.0515254242473618 720:0.0267882206400848 730:0.0517283852142266 732:0.0294421136688898 734:0.0371100309730252 750:0.155551287846634 758:0.0281865229346774 763:0.031162431559798 778:0.0257124902366374 780:0.0272975666490179 791:0.0358228515880803 808:0.0280822964187352 812:0.0602749183193037 827:0.0229823449419769 829:0.0199602030906136 851:0.0305594362326286 871:0.0618103449340254 872:0.0307056308895883 885:0.0377205099186001 886:0.0231750213065861 891:0.0378489060057285 912:0.0511768203821925 937:0.0364384237307698 942:0.0348124765014885 944:0.0294421136688898 950:0.0293187249093573 986:0.0481202193538255 1009:0.0719415367792611 1018:0.0291973645503177 1044:0.0785460689496439 1045:0.027954533616982 1055:0.23487700626912 1104:0.0397599750373472 1123:0.0305594362326286 1144:0.0367665928208153 1145:0.0353463902167039 1215:0.0630767073108771 1225:0.0240003313023272 1249:0.0406505218840222 1265:0.0345593343673818 1293:0.0395940671806241 1305:0.04894300478239 1308:0.0314289799672005 1333:0.0382480620746758 1337:0.0346427543388552 1404:0.0364384237307698 1455:0.071450135047537 1468:0.0377205099186001 1476:0.0346427543388552 1506:0.0377205099186001 1531:0.0367665928208153 1548:0.0296099070035761 1571:0.0416634213641845 1646:0.0445490266457938 1649:0.0305594362326286 1659:0.0378489060057285 1662:0.148440123892101 1728:0.0436439041005542 1736:0.0770533668041243 1776:0.031162431559798 1782:0.0662616827523676 1788:0.0331308413761838 1803:0.0408422882222605 1808:0.351695394614781 1879:0.0897543914716785 1920:0.040463610915196 2034:0.0362274782678187 2054:0.0418838135193073 2141:0.0445490266457938 2147:0.0904412677760984 2204:0.0802068263791143 2378:0.0533312368030732 2423:0.0347271277020681 2508:0.0927173299793996 2649:0.0445490266457938 2715:0.0459595089207525 2733:0.0349861924910651 2774:0.0433652827731679 2814:0.0467806420626765 2860:0.0418838135193073 2877:0.0439334545031043 2921:0.0459595089207525 2959:0.0467806420626765 3054:0.0514758856881918 3292:0.0935612841253531 3398:0.0467806420626765 3633:0.0493520472062318 3649:0.0523454294227637 3992:0.045580831613688 4146:0.0523454294227637 4156:0.351467636024834 4165:0.0487611247990462 4422:0.0459595089207525 4854:0.055815273010672 4947:0.20279220924872 5056:0.0467806420626765 5604:0.0574626501212558 7056:0.055815273010672 7632:0.0595864886032158 7650:0.0595864886032158 8472:0.0595864886032158
+-1 6:0.0290923120541765 11:0.237693048974856 17:0.0144115714524005 18:0.0566292121203614 25:0.0198492129849826 27:0.0154017882598023 33:0.0146352171199455 36:0.0606220436156686 38:0.086190232921277 40:0.247874122406566 47:0.025035674528908 58:0.0532236812289582 59:0.26276042080559 63:0.0171499035411481 67:0.0149603729044697 78:0.0812733121048382 83:0.0137054581084327 85:0.0162078145565462 86:0.0205455137032396 93:0.0262185766861696 98:0.017155689631761 113:0.0283155525372793 118:0.0346364422375497 126:0.025128019684312 139:0.0216364172288678 142:0.00891570753381827 144:0.015723625935257 146:0.0237489250371597 154:0.0573554958096702 157:0.0268017600375582 159:0.0159107342483528 160:0.023971603604823 166:0.0197336575569265 168:0.0196425200633699 179:0.014417079405258 183:0.0232668934561494 185:0.09240630963326 194:0.0419085315993453 199:0.0741755087201344 203:0.160399851799477 208:0.0198143527376004 209:0.0166138912596563 215:0.0168488554445964 219:0.0442274034629508 220:0.0212166689327011 237:0.136366678369733 242:0.0185319814796273 252:0.0763478816431943 256:0.0179983646666944 271:0.0291889989852521 277:0.0479021507322444 278:0.0228324458822868 284:0.0160612090139433 292:0.0260798204980816 297:0.0258365554555013 299:0.021894259123769 304:0.0400521426262675 306:0.06226081851211 310:0.0271436819669217 333:0.106725254647361 340:0.0605591119742193 342:0.024706542867306 343:0.0560446230549713 345:0.0582257744274276 349:0.0262185766861696 355:0.143257560687451 364:0.049009285049303 366:0.0333455327727256 367:0.022573557754191 382:0.0464593587744022 384:0.0573205280651827 387:0.0186692750147697 389:0.0225397267952874 390:0.0241590187498057 399:0.0748130051280338 404:0.022209818733225 406:0.0247981116222496 408:0.0155734588732534 414:0.0586240205808503 416:0.0257310011938604 418:0.0273045916093009 421:0.038450712930259 422:0.0241169506462449 426:0.047617962112271 434:0.0228853505701332 455:0.0193105996674067 483:0.0256787942957262 485:0.0366050012343904 493:0.0472213949522019 510:0.0239101922859226 530:0.0217414802694017 541:0.0272721229755309 543:0.0292738739591275 547:0.0331974311518696 556:0.0327016570124873 570:0.0920484337693768 571:0.0208733349139108 591:0.0834297130142991 602:0.235014580844259 603:0.0283155525372793 622:0.0291889989852521 634:0.0297138103219527 639:0.0304281631095187 641:0.0209271884266837 697:0.0283530550886615 700:0.0654033140249746 712:0.0242867063997284 726:0.0243730970336243 736:0.149328333785694 737:0.0311649852393283 763:0.0306311617320753 770:0.0356098574604937 778:0.0252741332287085 792:0.0290221703151863 804:0.0249142217399709 808:0.0276035379896373 814:0.0293597533938726 836:0.209938198747848 851:0.0600768930297656 872:0.060364297571552 908:0.0281308930177379 909:0.162999006112831 912:0.0251521685503297 913:0.0276035379896373 917:0.0321736622023681 933:0.0614696620629779 956:0.245148060395972 966:0.0528348071535358 973:0.0361397809689742 987:0.0215918517200726 1025:0.03223759854144 1054:0.0345646029955441 1059:0.0484877874473623 1064:0.0245046425246515 1068:0.0311649852393283 1094:0.0272397989686713 1101:0.13620860220253 1102:0.0316814920995841 1117:0.0315634939299355 1138:0.0260798204980816 1141:0.0352121290212223 1149:0.0253732027201746 1169:0.0298050911172311 1175:0.0560446230549713 1190:0.0286211441128309 1225:0.0235911638773845 1228:0.0325660132960496 1253:0.0647343728109026 1274:0.110494262927222 1277:0.0312205926190277 1280:0.104505214058032 1289:0.0358172066392606 1322:0.0297138103219527 1331:0.0298975347564414 1341:0.0303782884971022 1355:0.0367114723350304 1361:0.0795475415856906 1395:0.0282411239100372 1412:0.0331974311518696 1422:0.0359231461490921 1431:0.0617863318272916 1440:0.0327704416748006 1464:0.135235542032209 1468:0.0370774352994834 1469:0.0299442019754172 1491:0.0303782884971022 1508:0.0788394277295305 1531:0.0361397809689742 1558:0.0318621668481521 1707:0.0604613779006286 1721:0.0346536437143913 1776:0.0306311617320753 1788:0.0325660132960496 1789:0.040145992254919 1820:0.0337295762209189 1923:0.0392489594561447 1951:0.164903981659937 1969:0.0361397809689742 1985:0.0372036424378144 2073:0.0383010843809298 2109:0.0441121110215252 2192:0.0468913814466333 2410:0.0369533856541195 2468:0.0392489594561447 2485:0.0423620636818699 2495:0.0392489594561447 2576:0.0464230429828099 2591:0.038450712930259 2807:0.0359231461490921 2815:0.039957495227334 2961:0.0903519449807307 2962:0.0485106734011516 2981:0.0473920439173162 3035:0.0413930627473636 3096:0.0444496941002115 3167:0.0409531263845384 3264:0.0451759724903654 3426:0.0434806931657053 3480:0.0911366471680938 3619:0.0455683235840469 3633:0.0485106734011516 3731:0.0491420912569715 3897:0.0423620636818699 4064:0.0505983038194932 4189:0.0411697612044206 4266:0.0464230429828099 4390:0.0524220241527625 4392:0.0996674625274759 4630:0.0473920439173162 4631:0.0473920439173162 4677:0.0535406536365979 4684:0.0426259737669423 4785:0.0407427717273516 4846:0.0928460859656199 4916:0.0485106734011516 4939:0.0468913814466333 5580:0.0491420912569715 5927:0.0548637114991843 6260:0.0564830034537026 6373:0.0505983038194932 6604:0.0548637114991843 7158:0.102906046436513 8330:0.266171855698381
+-1 6:0.0299195947652174 11:0.134448710361219 18:0.128127003649314 25:0.0898200801083878 27:0.0522712105646646 29:0.0217324270508479 37:0.0566255352935318 38:0.243763242382923 58:0.0401405949551179 63:0.0129342299455607 72:0.0744786748807204 74:0.0981103050545957 78:0.0919428821869859 80:0.0389618892601035 83:0.0930282736766142 85:0.036671156759522 94:0.0359225925596101 135:0.0545186689039504 142:0.01862060802379 148:0.052600594484064 150:0.0521849068838522 154:0.0432567547487358 159:0.0359989946667292 162:0.0972267932988748 181:0.0505084633655912 185:0.0696916139702821 199:0.0279710927765059 204:0.0718451851192203 208:0.0448311666445822 215:0.0381215503837172 219:0.0500335822512678 227:0.0425341650691858 239:0.0507323593331806 264:0.0492599632894107 275:0.0402394440387188 283:0.0448574157040385 292:0.23602865948613 301:0.0542371971558954 304:0.0453101926752171 308:0.0884269186362129 322:0.0518597718396277 328:0.0607094385268534 334:0.408842157141036 336:0.0547090337401459 343:0.0634021678372143 347:0.0491572385547836 386:0.0476576572578588 390:0.0546612352109209 409:0.0611201692840523 441:0.0421956214630133 459:0.0546612352109209 466:0.0552937406258951 485:0.0414105101513105 495:0.0659466868708559 507:0.0319957052706439 515:0.0432329421510986 518:0.0521849068838522 526:0.0718164190839725 564:0.0741450983130861 572:0.0648455738089597 575:0.0624546674817778 584:0.0841754820862797 597:0.107018751389874 609:0.0423753089822237 612:0.0696579542976801 654:0.0625315705881464 662:0.0623781228993513 677:0.089585129656185 730:0.0575216330201628 747:0.131893373741712 749:0.0696579542976801 803:0.0747828011155517 834:0.0603006510247439 851:0.0679637946940157 867:0.052600594484064 908:0.0636478399996353 933:0.0695394066116049 1045:0.062170524647408 1082:0.0820191047430252 1083:0.0641504950676849 1092:0.0936542978986778 1150:0.0652954316258604 1169:0.0674358140499806 1200:0.25611030644848 1206:0.09218297529371 1224:0.228963420658233 1252:0.181665451577133 1254:0.0822736646203405 1268:0.0810385875760174 1364:0.0869970541963912 1415:0.176851350260988 1450:0.0853701021494934 1551:0.0640656432861064 1624:0.0757883469203221 1740:0.0856828503329321 1781:0.0759620922791431 1820:0.0763151979999667 2118:0.0891894771813303 2257:0.0863268067188641 2321:0.102213359066904 2675:0.0990764645566413 2816:0.109758320753066 3304:0.107227354161954 3396:0.107227354161954 3870:0.114481710329117 3966:0.13251958730974 3967:0.13251958730974 4603:0.107227354161954
+-1 27:0.318027911089074 81:0.166251416949149 142:0.0708070586208307 146:0.245192989696246 3803:0.897822628576493
+-1 6:0.0119359685455283 18:0.191678718084891 27:0.173773388875641 57:0.0891111657511011 76:0.0993017705576425 87:0.111195813012277 142:0.0495227277006104 146:0.643083431546479 162:0.258581030414907 192:0.0963932447657345 194:0.0945680778877766 199:0.0557932161488626 232:0.211889143106914 239:0.101194526529023 396:0.121233444103264 433:0.0965229483913749 446:0.147277366945975 456:0.129345790839433 485:0.0826004747890062 507:0.063821006718041 538:0.104586859095093 943:0.480755233419539 2202:0.167333077799143
+-1 6:0.0104780486130473 11:0.235424332144382 17:0.0285480336843282 18:0.308487857572558 27:0.0915286937636118 37:0.148729899970574 38:0.170735140218651 72:0.0326036825598474 74:0.0858972651426124 75:0.0212355449911163 77:0.118515900742221 83:0.0135746431619542 85:0.0963186917064247 87:0.0976137906082581 100:0.0647482758271002 112:0.0583312016227287 118:0.0343058466236225 128:0.112629211299734 140:0.0370214393006379 142:0.0407566591411088 162:0.0851237353539165 166:0.195453050526387 168:0.0389100748843578 173:0.0391588996779865 184:0.0617350475152896 194:0.373576732467854 216:0.0455813768444568 246:0.162457678918853 303:0.0936189561338594 309:0.038555667336498 324:0.0555096920583319 327:0.04405969482598 331:0.0819101377157197 337:0.0400532097271257 341:0.0875475504590479 343:0.111019384116664 347:0.0430380106500454 351:0.223077746543578 372:0.0517163449903125 402:0.0399323097039463 408:0.0616992574284582 432:0.0492144008668162 448:0.094889874929503 454:0.0522735825121592 485:0.0725112324985343 502:0.036162694606892 506:0.0293095007149537 510:0.0473639517405707 514:0.0556527273481268 526:0.0628765142276967 532:0.0605760008869721 534:0.0399323097039463 573:0.133012245302024 574:0.039227515216478 614:0.253439002352908 656:0.0517163449903125 661:0.0699450322117115 662:0.0546131230435213 672:0.146402701730081 709:0.137066359559795 763:0.0606775909071132 812:0.11736365401141 834:0.105588521133682 836:0.0594098270196666 883:0.061091286451026 891:0.0736970871637678 991:0.0556527273481268 1042:0.0596926216091131 1045:0.0272156835957344 1109:0.0724883984061229 1129:0.122182572902052 1144:0.0715896727746972 1251:0.0688243406647134 1294:0.059503475090423 1333:0.074474299577799 1373:0.0607799039939792 1424:0.0487178861775098 1474:0.0807077856503697 1495:0.0787882814929087 1618:0.0803028313216978 1736:0.0750168140760244 1776:0.0606775909071132 1781:0.066506122651012 1863:0.0631161019074863 1978:0.0880508672230576 2013:0.0824523392343182 2186:0.0824523392343182 2295:0.0780869263948623 2398:0.0761674222374012 2765:0.0795256189076665 2774:0.0844382404059943 3100:0.0887522223211039 3273:0.0880508672230576 3498:0.10192383563769 3526:0.090266772149893 4622:0.0987161631492992 4817:0.0839154581387611
+-1 6:0.0104835348961834 11:0.282657119766331 18:0.224472277188484 27:0.0915766179857264 37:0.0496025915393519 74:0.0859422407611257 85:0.064246082640596 118:0.0686476181784511 128:0.112688183706277 142:0.0163111996951654 166:0.156444311449931 194:0.0830605192046114 246:0.108361827600736 283:0.0785880100609837 327:0.0881655287699638 331:0.163906051366218 341:0.0875933901633118 342:0.0979341532615991 343:0.111077513621245 351:0.223194549559491 406:0.0982971222341819 431:0.11689729405031 437:0.188593482072798 500:0.108491691972114 514:0.111363733986759 653:0.107094445986045 676:0.104830199819351 709:0.0914254181355002 744:0.129355854944387 758:0.21964727735349 780:0.106359982867125 793:0.125818872463643 812:0.117425105361711 834:0.105643807050387 1045:0.0544598673352382 1141:0.279154397177512 1144:0.143254313938827 1393:0.120024994701256 1603:0.303642989469892 1978:0.176193940925737 1993:0.153638830116226 2337:0.187857108026258 3511:0.200566387116529 5321:0.232167870068308 5815:0.207795423877517
+-1 6:0.0171498302893876 11:0.192664087148873 18:0.367210248888128 27:0.0499361927213772 37:0.121716010187088 38:0.0698622135503981 63:0.0370693270131044 72:0.05336371717289 74:0.0702956997968108 85:0.0525495181231912 118:0.0561497153960788 128:0.0921723085447806 142:0.0177888030680846 151:0.067719754262803 166:0.319905620775296 194:0.0679386210001598 234:0.0615133548141907 246:0.088633603627201 283:0.0642803714907852 296:0.0773249857002166 308:0.0633575863712705 327:0.072114218665379 331:0.134065512833731 337:0.0655566484497997 341:0.0716462429251704 343:0.181709750235582 351:0.243413357826796 377:0.0659979368344297 423:0.0649679270441822 430:0.0667383896955614 431:0.0956151133231459 437:0.231387569407336 454:0.0855582085757384 480:0.063069778444838 485:0.0593409792867207 507:0.0458496279517391 514:0.0910889865478832 614:0.103703371676761 653:0.0875969599846185 655:0.0649291978097569 657:0.0890613973142425 709:0.0747806164946781 758:0.0898292791372733 767:0.0820245310095884 793:0.102912439903221 1012:0.114481758609415 1045:0.0445449694034939 1117:0.102336215071789 1141:0.114165941725285 1393:0.0981733885562099 1584:0.115126401800169 1978:0.144116284002396 2406:0.139091311587984 2531:0.260325356045155 2700:0.27640671395514 3511:0.164051511959784 4489:0.183131081817802 4533:0.159330130913717 4838:0.159330130913717
+-1 6:0.0242297843440755 11:0.18146765706302 18:0.302636502934744 27:0.164619748831434 37:0.152856850646602 38:0.329011296236825 46:0.06762856668076 76:0.134387110489828 79:0.0547715718785735 85:0.0494956692486111 87:0.0752417803095105 94:0.0484853197171481 100:0.0499086810874252 106:0.0565339920977187 112:0.359698639328596 114:0.113424458572791 126:0.153472653185678 140:0.0570730628375948 142:0.0439819517692172 146:0.145049652998967 153:0.0700503773719279 166:0.301314709671482 169:0.0588721430276798 174:0.0592034003813924 194:0.0639904538486459 204:0.0484853197171481 249:0.0921707024905323 290:0.0839875951710004 306:0.0633776764385661 349:0.160133372121273 400:0.284668087415638 404:0.0678246803883451 406:0.0757288483627961 441:0.0569521309995383 454:0.0805861013461802 471:0.168385576687532 501:0.0839875951710004 507:0.0431851347323703 514:0.0857954651419631 532:0.0933852916143321 574:0.0604739978565389 609:0.0571946582281519 613:0.0746979320508966 647:0.072955144958812 757:0.0767363265928389 791:0.107531332215911 793:0.0969318134388263 805:0.105285289557527 867:0.0709958958736017 986:0.0722224929653624 1042:0.0920234547439376 1045:0.125868884303536 1117:0.0963890751856888 1429:0.130171843440572 1575:0.131008195690307 1903:0.135741148179501 3465:0.146368825415685
+-1 6:0.0211592833901353 11:0.142624175876797 18:0.226530105221918 27:0.0308053792774226 37:0.0500573185313846 38:0.0861952771445069 85:0.0648350524303269 100:0.0653760622728116 118:0.207830815866954 128:0.113721241803125 142:0.0109738207007747 166:0.236817749465556 189:0.0791694541127073 194:0.167643937067637 331:0.165408644343736 341:0.26518918245452 343:0.112095806054845 351:0.225240664147653 437:0.0951611973496534 502:0.0730266418486874 515:0.07643636903698 532:0.122326667564082 609:0.0749200631338249 611:0.136883927450304 646:0.137566985057916 709:0.0922635518719423 778:0.101102449518868 793:0.126972304888055 1141:0.281713518291991 1144:0.144567584097735 1518:0.135564217971498 1929:0.146382463091676 1978:0.53342754585045 2013:0.166503561537792 3797:0.187576502928028
+-1 4:0.0430892778293454 6:0.0431672138486575 11:0.0149214696599127 18:0.0710993505416405 25:0.0747635062798726 27:0.0870179357353501 33:0.110249222262079 36:0.202966526436099 37:0.0628445006715711 40:0.0622423956092768 41:0.0458698281849336 43:0.0606644690441278 46:0.0278043377592045 47:0.062865794268652 51:0.0225521678036117 68:0.0815391622062205 72:0.330633528445872 77:0.0751167647385623 79:0.180147219893413 80:0.021620462067861 83:0.0602263737856594 85:0.0406986092697355 87:0.0928031441153404 92:0.0438411349676557 97:0.0207197581439538 111:0.0207659834972556 125:0.0355979489594622 126:0.0630976774373933 142:0.0275541839887867 151:0.236014517860174 158:0.0238334351360574 159:0.0599289392881263 166:0.0743282583444667 171:0.0287109183136593 176:0.0688475679326927 178:0.133991789213688 181:0.0280278070966112 189:0.049696677310377 190:0.0284702777383578 197:0.0740520993607901 199:0.0465645759373112 208:0.0248774008731056 214:0.0568974264738983 215:0.0634624410949589 216:0.0288900100277013 225:0.189840609366904 227:0.141616587890896 234:0.0238204657422777 249:0.037894420499067 262:0.0310769664037517 276:0.154772347290293 284:0.0201652378171499 286:0.0930295323355378 293:0.0628571195518906 294:0.349055166027951 301:0.0601938605157372 304:0.100572874737379 317:0.0197912264476131 330:0.06604841650841 341:0.0554886619439659 346:0.0276649317976641 355:0.0199848161275429 357:0.030738438387803 358:0.0879398117184291 369:0.0593861052149727 375:0.0235397125103916 387:0.0234397279943108 390:0.121328938088256 396:0.0337268238192628 402:0.0506191303397004 412:0.304586001471987 416:0.0323058966418475 422:0.0302794169968026 423:0.0251582162146312 424:0.102600686626594 432:0.0311926631659556 433:0.0537048584075333 441:0.0936596094897352 442:0.0282568956764483 453:0.0322077520921866 455:0.0242449266644234 459:0.0303322345220639 465:0.0282358297766778 466:0.030683220051561 472:0.0605062452264154 483:0.0644806992277421 495:0.0365946792896525 501:0.0345300747647249 502:0.0229203390100942 504:0.0352733498297526 506:0.0557301135802508 507:0.0355096708745472 526:0.0797037409705173 549:0.0354574166474705 550:0.0270534824443201 571:0.0262069787031982 582:0.0560145273772048 597:0.0890791578224591 609:0.0235146133275988 613:0.0307107873875451 622:0.0366474968149139 628:0.0721653816078218 653:0.0339210955205439 656:0.0327784246286515 657:0.0689763700936657 673:0.033574334944417 676:0.0332039181749282 702:0.0395555517639514 758:0.0347855400312078 767:0.031763225023935 771:0.0352279083510565 792:0.0728760787394636 806:0.0356452789235194 807:0.0431771454130022 850:0.03043879711218 854:0.0399274808577182 856:0.0249211687599575 887:0.0419605412163694 909:0.0292356013029442 910:0.0531865993293877 939:0.0482758035092194 963:0.0563458455079657 982:0.0371932286386127 1083:0.0355979489594622 1112:0.0400037239603139 1116:0.0387203722300448 1149:0.0637133439445172 1170:0.044209682791917 1245:0.0324718574708312 1253:0.121913364822907 1306:0.047546534592364 1340:0.0445816118856838 1358:0.0444559409609531 1376:0.047546534592364 1377:0.0316707267919752 1441:0.0432862604607878 1473:0.0470355035967806 1489:0.038922099974592 1540:0.0431771454130022 1567:0.0486635640536973 1579:0.0416801807083607 1652:0.0795537648548929 1849:0.0410577242410078 1921:0.0501676052616784 1929:0.0918879903075842 1994:0.047546534592364 2054:0.0516896346247462 2137:0.0468713370365377 2200:0.0479038744154525 2242:0.0567195301485946 2257:0.0479038744154525 2459:0.0479038744154525 2502:0.0567195301485946 2599:0.0531865993293877 2611:0.0402363578133939 2927:0.0528668823990938 2929:0.0635273987642338 3360:0.139654860318732 3376:0.0484676210697202 3405:0.0609063280949193 4585:0.0516896346247462 6776:0.0672215903877693 6862:0.0709157820113048 6979:0.0672215903877693
+-1 6:0.0295078634670673 11:0.0947132334367193 18:0.248214636104345 27:0.0859198214806458 33:0.186613616706995 36:0.225455861678279 37:0.239341271254728 38:0.103032322811026 47:0.0399037278730523 74:0.0345572084708669 76:0.0701405306747803 81:0.0256658372553517 83:0.0327671741040726 85:0.103332901333979 87:0.235625204556672 94:0.050611789218499 100:0.0260487881910025 106:0.029506730165152 112:0.093868576210714 114:0.0591995146468857 140:0.14894043409643 142:0.0295141580528619 148:0.0370548171930729 153:0.036561323663608 154:0.0304724909537972 159:0.0253597165506216 162:0.0228306738564205 166:0.0943589317135062 169:0.0307270789502955 176:0.0218503134134231 177:0.0439965804396481 178:0.0340202296413047 181:0.0711620047291298 182:0.0428647496134624 185:0.0490946925769324 190:0.0361427141280278 194:0.0667969476344057 199:0.0394088218846241 204:0.0253058946092495 205:0.0333553158778383 214:0.0361153382233426 239:0.0357387272768148 242:0.0295376561577208 256:0.0286871378276806 275:0.0283469275857206 289:0.0366755597954799 292:0.0831359314031548 306:0.0330786475141306 313:0.0956043373035529 323:0.036060780035721 331:0.0329531528183117 336:0.0385401203909385 349:0.0417891256772662 351:0.0299153652902248 369:0.0376950137909955 375:0.0597668282506974 385:0.0882103702560212 386:0.0335727342031295 387:0.0297564848479056 390:0.0385064484185986 400:0.334297195249187 408:0.0992885674724552 412:0.0429631869253258 413:0.0364482047734179 459:0.0385064484185986 471:0.131827974391968 473:0.0371142842357904 484:0.0465910488429973 501:0.0876711237248974 502:0.0581942521370781 507:0.0676187230237296 515:0.0609114320414381 534:0.0642604464238254 573:0.0535119701709787 574:0.0315631334450354 575:0.0439965804396481 577:0.0615291283382301 613:0.0389870172463835 626:0.0795700209690501 634:0.0473600900902274 656:0.041611860685304 671:0.0772309509943479 695:0.041611860685304 702:0.050215351347091 729:0.0453724160009368 739:0.172249876811951 750:0.048740492203262 789:0.0433144685899077 805:0.0549514462726084 823:0.0960594200848596 827:0.0360064779907685 837:0.0457435595333567 929:0.0675198209399307 939:0.0612856179897316 964:0.0504963282652646 969:0.0471452297755771 974:0.0541441665511659 985:0.0540149326443453 1045:0.0218982071229735 1074:0.0550916457386317 1099:0.0597110704710786 1111:0.104685321411421 1134:0.0512807857331897 1141:0.0561237210793439 1153:0.0588990659479651 1245:0.0412226769461088 1375:0.0529125451458877 1376:0.0603598188729619 1391:0.159805379467441 1449:0.0540149326443453 1459:0.0642961341190136 1473:0.119422140942157 1567:0.0617778758678594 1664:0.0500317552012808 1672:0.0679404605438496 1803:0.0639876807906335 1912:0.0639876807906335 1913:0.134227887409484 1954:0.0597110704710786 2012:0.0667218277017891 2064:0.0755369791071821 2084:0.0639876807906335 2142:0.0548129258824869 2210:0.0649388724847368 2265:0.146582619230228 2392:0.0646130392667906 2555:0.0569217143174854 2565:0.0679404605438496 2822:0.0747389858690405 2865:0.0853370924914857 3337:0.0703091770935239 4407:0.0739925130471754 5175:0.0835541372744334 5322:0.0835541372744334 5774:0.0853370924914857 6515:0.0900268293816781 6609:0.0900268293816781 6610:0.180053658763356 6611:0.0900268293816781 7245:0.0933542506587371 7246:0.0933542506587371
+-1 6:0.0102703679144941 11:0.0923032368502691 27:0.0897145446065994 37:0.0971879942531559 38:0.334702151275533 74:0.0841947340046656 87:0.0956790314779452 100:0.0634649293137859 140:0.217725923814595 142:0.0532651195915225 153:0.0890775342374968 173:0.0767654974073879 184:0.12102284969575 199:0.144022712894058 232:0.0911605727048506 284:0.0623704221099251 291:0.082664990644232 306:0.0805923872882912 347:0.0843699471165802 385:0.107457300354858 430:0.079934064026096 453:0.0996175255365982 456:0.11129627688319 457:0.0708193246579302 484:0.113513826431945 541:0.105905714840083 571:0.081057329388606 574:0.153800016977579 631:0.0689282787157613 671:0.125442990789766 829:0.0761899232200145 866:0.344592076980689 884:0.212063600284734 981:0.12189671872685 989:0.248415701641766 1045:0.106705014987084 1159:0.208870238747703 1200:0.146523100472024 1215:0.24076956858455 1407:0.125188124200014 1557:0.151134180587493 1602:0.141652386886622 1660:0.288945481110267 2334:0.171300366129593 4985:0.193519108775286
+-1 6:0.0325096336898377 11:0.0486958280263386 17:0.0590495521902807 18:0.0580077201788909 27:0.0946602564482334 37:0.102545696464656 38:0.0882883361121881 72:0.0674383698786911 86:0.420912940584802 97:0.067618391641136 122:0.349916366470158 136:0.137248483013231 142:0.0140503691524854 168:0.0804826883356568 173:0.0809973645056545 197:0.241667099665804 208:0.324747002076773 239:0.0918734824165175 276:0.168365176233921 284:0.0658087289814519 291:0.087222080299098 323:0.0927013828689703 377:0.083404858418144 390:0.0989884582152909 423:0.0821031840803474 432:0.101796444709038 448:0.0981364370649257 457:0.0747233958886667 506:0.0606245919167746 507:0.173827330576996 560:0.387265542219168 746:0.159465785121461 829:0.0803900605236674 1547:0.145490930518364 2910:0.178156522960599 4315:0.179421969409217 5127:0.22479697000593
+-1 6:0.0143417735543173 11:0.0644471615943219 27:0.0417598049712429 33:0.0793627080610916 37:0.135715508673256 38:0.233692819074292 67:0.0811259373586196 75:0.0290660397572381 84:0.0841711964586322 92:0.0946768908872856 106:0.100388559131187 118:0.0939118918101764 142:0.0223141845516703 153:0.124389879257218 154:0.103674295418971 162:0.155350216009156 199:0.134077711217468 225:0.136656427593753 232:0.127298681186462 293:0.135742759709435 349:0.284352084464269 400:0.126372727565793 441:0.101131056880113 558:0.159209769028164 705:0.655730440344408 966:0.286508450214626 1045:0.149005291221856 1638:0.215682086165943 2066:0.192009183829614
+-1 6:0.0163455003212435 11:0.220353730287307 18:0.0874970063826087 27:0.0475941767583576 37:0.232015017063422 38:0.266342655236058 67:0.0924602546633655 74:0.133997638952944 75:0.066253864682753 100:0.101005731354784 128:0.175698823079405 142:0.0339090103350867 146:0.293553064611232 173:0.122173857156771 174:0.119816485307189 184:0.192610337336405 185:0.0951838007398016 219:0.136670289350277 257:0.198064304643659 303:0.438129865800109 409:0.083477045269707 434:0.282878689627144 499:0.12174874426453 530:0.13436983257729 609:0.11575117109991 673:0.165270359098598 690:0.204274541358224 858:0.163986248803558 862:0.157279888950922 1852:0.279203061835205
+-1 6:0.0150625657929402 11:0.219980027297191 17:0.0205194044955002 18:0.100786867136341 33:0.0208378344412684 37:0.053451124021667 38:0.0306797259881482 46:0.0945936774117679 51:0.0255750560053613 53:0.0290005423883645 59:0.0467652623598836 79:0.051073529583776 86:0.0292530004543255 94:0.090423419522905 100:0.0698084538907405 122:0.283719499855641 125:0.0403694911390485 128:0.0809542390983345 140:0.0266098147569589 142:0.00390594268382478 143:0.0331809994800129 168:0.0279673050105949 185:0.0657847220743394 199:0.0528060826716583 203:0.0285474544792229 252:0.163057832137071 258:0.0357092133058984 264:0.0929969277442155 268:0.0362338048495013 276:0.0292530004543255 277:0.0341018885527443 279:0.0852699783167918 284:0.0457363647722098 286:0.0421996771282078 294:0.0359856775304438 304:0.0570268216879956 346:0.156865669471572 351:0.0267235131141168 355:0.0453271540163781 357:0.0697172254242901 372:0.0371720383133642 373:0.0806457594102297 375:0.0800849130397503 377:0.0869482305940424 381:0.144791964711169 390:0.103193884076896 442:0.0961333334900622 455:0.137473559679083 457:0.0259659815975594 459:0.0343979613589652 475:0.0305134087721804 477:0.0402629723199253 478:0.0295305167056986 493:0.0336172535752376 496:0.0315768428049231 505:0.0812613169806377 508:0.0876496654406887 549:0.0402101219031928 564:0.046659030241246 571:0.02971975704962 653:0.0769357451803089 671:0.0459938075676798 683:0.0455409421689013 804:0.0709464606634407 829:0.0279351173398803 856:0.0282615973907794 862:0.0362338048495013 876:0.0363419967694205 886:0.0973031591835077 895:0.0391584792942043 950:0.0410327498613336 963:0.0319492158599687 966:0.0376134824368709 981:0.0446935630995152 984:0.388642683393489 986:0.0336731036244322 987:0.0307427917014028 1015:0.0470603324853879 1021:0.0403160944623595 1027:0.0787014248948667 1036:0.0425685436950397 1050:0.0889046653454785 1137:0.105942171595772 1227:0.041147553641822 1229:0.127507568418699 1236:0.0414998230095295 1268:0.0509970583955635 1271:0.0480246599217019 1274:0.157323334441656 1289:0.0509970583955635 1393:0.0431124710650592 1407:0.0918007209165484 1469:0.0426349891583959 1525:0.0527913902435055 1540:0.195858406465441 1547:0.0505573225028524 1548:0.0414402710640161 1575:0.0610814217012047 1598:0.0393993348145435 1618:0.0577190813295279 1664:0.0446935630995152 1721:0.0493403606239001 1753:0.0571604461507 1759:0.0571604461507 1816:0.0827621207845399 1836:0.0803150808929758 1842:0.0577190813295279 1851:0.0509970583955635 1897:0.0502742298917347 1994:0.0539196628745292 2034:0.0507018316269228 2086:0.0561263604430359 2092:0.211884343191544 2140:0.0599531490701811 2285:0.0508483905940599 2369:0.0490883424240045 2433:0.051300969538696 2484:0.0603157207958498 2565:0.0606914798033895 2571:0.0501355401054375 2575:0.157323334441656 2678:0.072042598982879 2681:0.0577190813295279 3038:0.185725325047026 3074:0.0643222049773755 3413:0.0781157483133925 3493:0.209907667235406 3773:0.066764629133903 3886:0.076231959335693 4648:0.0690702005090174 4792:0.070953989486717 5133:0.066764629133903 5241:0.0781157483133925 5306:0.0674774796225254 5942:0.0746392384492009 6483:0.0606914798033895
+-1 6:0.0137315832242204 11:0.0617051691442171 27:0.199915385366412 33:0.151972226658442 37:0.129941307126776 38:0.223750039133431 41:0.0632289260883272 72:0.0854548775292238 75:0.0556587708505361 114:0.0964204243692688 118:0.0899162821983909 142:0.0534119927865607 154:0.0992633310215287 162:0.148740629040832 199:0.064186595999538 225:0.392526580102787 239:0.232835912321408 276:0.106672399860321 289:0.11946966324146 349:0.272253936935592 400:0.241992054785864 441:0.193656596074842 558:0.152435972108974 655:0.10397545262687 705:0.470873620344536 827:0.234580294019034 966:0.274318557162006 1045:0.0713328288692084
+-1 6:0.0229799964550203 17:0.0626102948259626 18:0.0615056393802778 27:0.0669122383341926 37:0.0543646484235535 47:0.0543830687929829 63:0.0496712205880112 72:0.0715049659831653 76:0.095591502553296 83:0.0297713117451504 86:0.446294380373218 96:0.0711893831540135 97:0.0716958432244599 122:0.247344431430842 138:0.0963495523528893 142:0.0268157149437608 197:0.128119924695227 208:0.0860823866976795 239:0.097413538416856 276:0.178517752149287 291:0.0924816524478091 313:0.260590051587526 323:0.0982913620326487 434:0.0994241711338761 454:0.114644127469005 490:0.118907349553727 499:0.0855827492770568 506:0.0642803109053498 507:0.184309279453387 560:0.410618012752166 585:0.284738832487906 903:0.127929431901876 937:0.155605922291909 1009:0.102405904129722 1013:0.142369416243953 1112:0.138423465251219 1307:0.188899526143526 1806:0.157977450576545 2449:0.144224448995598 2631:0.166396995162152
+-1 6:0.0220796205779783 11:0.0992184732202754 37:0.208938380368638 38:0.359777593574208 75:0.0894962017233998 100:0.136439275683498 128:0.23733524660293 141:0.40338090915049 142:0.0114511343742781 173:0.165033333795462 184:0.520358885834423 211:0.439180804166151 303:0.197276335191658 1059:0.202399029382868
+-1 11:0.138668135275131 18:0.165185041815444 27:0.0898527435741343 142:0.0400103780810248 194:0.244490865595943 242:0.216228057641267 328:0.313073461675511 375:0.218759151285088 441:0.217599266267828 485:0.213550513353621 490:0.319348204589093 705:0.352726618039727 1325:0.461982968986042 1932:0.39828246317791
+-1 6:0.0111769401535132 11:0.0502254526244901 17:0.0609044061110565 27:0.0976337074110596 37:0.0528834217260373 47:0.0529013402115446 63:0.0241589358358176 72:0.0695567318330229 76:0.0929870033108014 83:0.0289601584855279 86:0.434134582226269 96:0.0692497474170932 97:0.0697424084067155 122:0.240605250990219 138:0.0937243991811638 142:0.0231867469169821 197:0.124629151583557 208:0.167473948270579 227:0.0794465669051461 239:0.0947593957343099 276:0.173653832890508 304:0.08463171307116 306:0.0877063311703532 313:0.253489979156058 323:0.0956133020469814 369:0.0999463887274042 454:0.111520517784316 490:0.115667583533028 499:0.0832509499046344 506:0.0625289207023665 507:0.179287563444127 560:0.399430257830421 582:0.0942720474319375 585:0.276980799046492 657:0.116086735667061 690:0.139681519609399 903:0.124443848983086 937:0.151366261904617 1013:0.138490399523246 1307:0.183752743640823 1567:0.163800857866176 2449:0.140294889797082 2631:0.161863319717396
+-1 6:0.0230325191469328 11:0.155250723813706 18:0.308231078156043 27:0.0335325859082048 37:0.0272444516730596 38:0.0469130814735342 53:0.0886908056719671 56:0.106319401777502 59:0.0715098486886077 74:0.0472041712424111 75:0.0466793116415206 83:0.0745983913815702 93:0.171248297981301 106:0.0403053604487085 126:0.109416837130064 142:0.0253838375730298 148:0.0506158342509827 166:0.0429638790086333 185:0.167654910367599 194:0.182485489663498 199:0.0538313382075335 214:0.049332532499246 275:0.0387211028657204 283:0.17265930474538 324:0.0610098355328224 328:0.350512260336875 369:0.102980649462776 373:0.0411057678412629 406:0.0539901467483889 409:0.0294069714251125 423:0.0872530513906963 441:0.0406034685166182 485:0.0398479815413946 558:0.1278433953664 603:0.123296552579252 671:0.0351650996253056 709:0.0502158316487519 712:0.0528767215234198 713:0.0575784696771268 767:0.0550801829848308 793:0.138213189432859 1045:0.02991233275703 1050:0.203919282574799 1054:0.150507265751225 1153:0.241363384201276 1269:0.0588221173041962 1305:0.0523707340368718 1495:0.0865949695909828 1525:0.0807245407782144 1664:0.136683930478393 1778:0.0891626482285334 1900:0.0960403511248215 2587:0.188041357193577 3038:0.189331271711175 6304:0.477794419208041
+-1 6:0.0370960859743737 11:0.0238139250874652 18:0.283677587757125 27:0.0925842047330711 31:0.0201986309634969 36:0.0404905629771641 37:0.0501483521818425 43:0.0484087410360412 48:0.032420066309034 53:0.163251505719501 59:0.0329067099564041 72:0.0659593379310969 83:0.0137311862543416 92:0.104952413635975 96:0.0328341151974495 98:0.103127367706351 106:0.037094661233293 114:0.0372116111936234 118:0.0347014624238582 135:0.0482824823554979 142:0.0274844439049311 145:0.0444707460355571 151:0.167407759154389 159:0.0637624087218339 166:0.197707019531754 177:0.0553107117494008 185:0.0308599255034498 186:0.0300724193626438 194:0.0419872030897316 199:0.024771584130657 208:0.119109291698238 211:0.0527049975212089 215:0.0337609688712096 242:0.037133540133504 280:0.11103199125964 292:0.0522575560635393 293:0.351108952146585 328:0.107530226009336 331:0.0414273636394949 341:0.0885571507937525 343:0.112299662168707 351:0.15043352277938 364:0.0491012862087437 367:0.0452318665299076 388:0.0551082857421799 399:0.0999379273602914 406:0.0496893262154522 414:0.0391560471361273 426:0.0477073514539054 466:0.0489688965231836 473:0.0466585688396185 476:0.0658030644554657 478:0.0415587168363996 499:0.039472653423587 505:0.0762401393290338 507:0.056671672520223 550:0.0863520308612641 557:0.0498751523869046 575:0.0553107117494008 580:0.0479510560414802 615:0.0703638649265435 658:0.0490128926233632 671:0.0647277405939937 704:0.438550080567688 762:0.0705564597953601 774:0.0594485827456669 793:0.0636016076138221 836:0.0600949424903941 837:0.0575069428227883 851:0.0601896705128235 852:0.105183679503116 853:0.0560780250124231 917:0.0644681184225673 952:0.0493697375261737 963:0.0899251732234826 1045:0.0275295354753518 1050:0.125116802030579 1236:0.0584032921063288 1364:0.0770457866757122 1467:0.0651202770507277 1538:0.0674285897543114 1573:0.0683983290245547 1609:0.148091021002218 1808:0.0532843849242607 1916:0.0647254826635806 1989:0.0859607548944521 1990:0.0705564597953601 2024:0.0516111963188121 2067:0.0660854170167997 2268:0.0854119841067462 2984:0.0820600087402692 3031:0.173062103037659 5352:0.219866810795984 5773:0.103099223618675 7710:0.109933405397992 7788:0.113178068838168 7965:0.113178068838168
+-1 6:0.0174978186838661 27:0.203797805869123 42:0.261718482327044 51:0.118839698086837 57:0.0326586614038301 78:0.0336067361206842 82:0.0656231283823088 83:0.0226689771652985 84:0.0256734693317247 106:0.336820072994325 114:0.307165436695426 117:0.0903241845404942 120:0.255117880433934 123:0.0443807292544425 127:0.435056506835899 137:0.0716230831772345 142:0.0476431118716384 161:0.0426900588331718 162:0.0236920655413758 165:0.0849460115695152 173:0.0326967048793752 186:0.17376419001492 190:0.0750127269435486 194:0.0346585841327047 207:0.1034637721918 211:0.0870113013671799 234:0.0941422898372133 241:0.0577704906707614 286:0.0245111725670655 293:0.248421388196612 295:0.0371421927504159 298:0.0433658117447177 302:0.111061908423035 309:0.0643860418293378 351:0.0310440593916542 386:0.174197096447078 424:0.0901098490722025 426:0.0393803142967164 455:0.0319399424262458 456:0.0474043892415747 457:0.0301640533351662 484:0.048348909444007 509:0.0406043572293158 517:0.0487776231057229 521:0.1725452299861 535:0.0829650603170102 608:0.0477332510867725 633:0.0454894591031137 673:0.0442303802344653 702:0.0521099553513143 735:0.113761988865453 793:0.0525003216753445 805:0.114049482277362 809:0.0660901328306305 881:0.0996837014461149 882:0.0328500961872835 891:0.0615352302868181 937:0.0592420503573394 964:0.0524015334099755 1035:0.0534280309557998 1045:0.0227244172317851 1067:0.0465288038103734 1265:0.0561870030942008 1269:0.0446871979840292 1359:0.145684056818573 1365:0.0529038119878193 1394:0.0567389489111685 1461:0.0747215511296293 1551:0.0468342326693521 1629:0.0643725354065105 1856:0.0680952339761322 3123:0.076784219323066 3154:0.0867065995952758 5091:0.0934235036428041
+-1 6:0.0158191185916519 13:0.0525684890484623 17:0.0862001594168057 27:0.115153698512672 34:0.0630352327345257 42:0.094643927551406 46:0.198689734746065 50:0.0750773285877086 59:0.0491141576681078 63:0.0170964980480271 72:0.0492230509692969 75:0.0320601303714634 82:0.0593273978311434 83:0.0614825044095277 101:0.0768744145536957 106:0.0553647886060526 111:0.0494645570359489 114:0.0555393395957613 120:0.131795693373448 135:0.144125830516463 142:0.0369191505878245 145:0.0663737953536637 186:0.044883902036852 188:0.0874208546893908 199:0.0369722615932655 330:0.0786636391660939 336:0.0723145399830221 386:0.0629940126093224 398:0.0615214251258413 409:0.0403943976277664 483:0.0767964884757332 502:0.0545962302434614 630:0.109438561821281 687:0.0889999065281806 692:0.110514933950705 702:0.188442588965264 729:0.0851342797516923 829:0.0586764486404299 971:0.295902835187031 975:0.0980051795828423 1212:0.124481511842066 1402:0.143341709597448 1409:0.103906790965986 2272:0.131924232372103 2494:0.121236315924469 2677:0.28346677905694 3062:0.138835439249233 3601:0.470329018647764 3935:0.32815718209825 6127:0.35032945529841
+-1 6:0.0259120090894516 18:0.0396303601275576 27:0.021557015981329 42:0.022146929333504 58:0.0248313967937587 59:0.022985685554086 68:0.0227247248963218 72:0.0230366481949805 74:0.0303460364388142 78:0.113753679660185 83:0.0575482744908308 85:0.0226851656135136 111:0.0231496743115023 116:0.0396316848582704 124:0.256805595919506 127:0.110444997548193 132:0.0224509919434604 135:0.101177476447614 139:0.0605665503399662 142:0.00575945258032136 148:0.130157137399864 159:0.0222693590303146 171:0.032006594257055 186:0.0420118070895636 189:0.0554012717120332 196:0.0688447878618806 199:0.0173032139724153 215:0.0235823944570272 218:0.188977865124645 239:0.0313835743165819 252:0.026714957980212 264:0.030472734543497 268:0.0356186965568357 275:0.0248925458828626 286:0.0207416458286571 287:0.0343598901458662 307:0.106645220323291 336:0.101530761553759 341:0.030929054050188 347:0.0304091879356575 355:0.0222788381098838 382:0.0325132745200766 399:0.06980770111245 402:0.0282148057531303 416:0.0360142338405818 430:0.0576207537992578 441:0.0261026579371548 457:0.0255251807853288 485:0.0256169797719468 493:0.0330465640896409 499:0.027572066632672 502:0.0255513245141038 506:0.0207090918487975 519:0.0442598875945075 535:0.0351030105259183 550:0.0301589042320449 580:0.0334943206907051 591:0.0389239575394178 609:0.0262138145379324 630:0.0512178257543203 634:0.0415887475643518 653:0.0378148385648929 667:0.0356540247073097 688:0.0410931940138045 720:0.0368547520045978 792:0.0406206979828559 811:0.0840862451363086 848:0.0409134223646596 863:0.0391211837950603 866:0.124200210953849 872:0.0422442545469832 886:0.0318837773673345 890:0.0388752436185965 900:0.108062268523483 930:0.0324098961922914 993:0.0813571436637375 1007:0.0427296563395427 1012:0.0494207700952207 1015:0.046261432096991 1061:0.0480131735756704 1067:0.0393732273242029 1082:0.0507378860931219 1094:0.0381260131479939 1105:0.0464645755290439 1117:0.044177645582237 1124:0.0411538320029953 1176:0.0417809962001832 1189:0.0504300797186479 1197:0.060857478472075 1218:0.0450316637636489 1253:0.0453025286962313 1329:0.0498411128253343 1330:0.0488860764845951 1341:0.0425187802592128 1372:0.15516472081151 1393:0.0423805899231373 1446:0.0386351181788987 1483:0.0518951989090596 1499:0.056460950267304 1545:0.0473203937694807 1548:0.0407367773379869 1584:0.0496990569010023 1626:0.053201544139227 1714:0.057025363966498 1751:0.0504300797186479 1759:0.0561900853347216 1792:0.0873954118420772 1872:0.0551735543579712 1873:0.0490171342129188 1916:0.0452114354127939 2054:0.0576229971001165 2088:0.180133494167003 2095:0.0549345590248694 2141:0.0612897493691746 2218:0.0549345590248694 2383:0.0589353790811429 2533:0.0589353790811429 2555:0.0499851837944147 2629:0.0612897493691746 2708:0.0576229971001165 2761:0.0708195974172523 2855:0.0612897493691746 2937:0.0697494682526851 3036:0.0627092880806018 3154:0.0733721561011272 3489:0.146744312202254 3598:0.0670846782277511 3982:0.0670846782277511 4008:0.0708195974172523 4101:0.0767896484247684 4308:0.0678976586441583 4818:0.632448641721848 5054:0.0767896484247684 5097:0.0819780189883249 5597:0.079056080215231 6321:0.079056080215231 6351:0.0767896484247684 6373:0.0708195974172523 6837:0.0819780189883249 6962:0.0767896484247684 7088:0.079056080215231 7248:0.0767896484247684 7269:0.0733721561011272
+-1 27:0.138905141787973 42:0.190275089520927 51:0.2159976818513 74:0.13035881211906 83:0.164808446890085 125:0.170473067619543 142:0.0453587482599587 181:0.134220829965488 186:0.180471979535546 207:0.564153274758998 218:0.0902000645642267 351:0.11284856780689 386:0.126645118166835 538:0.1393352245105 704:0.219320568045815 805:0.414582402763268 1359:0.176525852679921 2345:0.261428164372526 4697:0.279119076260614
+-1 6:0.0123633287504592 10:0.0521393287595611 11:0.111113376990214 13:0.0821691181155986 18:0.0330902766305449 27:0.0179995240985769 41:0.0284643069558667 42:0.0739683430384149 48:0.0378171913766071 51:0.0419839261852566 69:0.0627156511186982 77:0.0932267127938515 82:0.185467760177936 106:0.0865399774039911 114:0.0434064078872354 119:0.0646778159256133 127:0.0614790530890355 139:0.0505714280379117 142:0.00320599120657187 145:0.0518740059769255 159:0.0371886224766158 161:0.0603265174095782 162:0.100439763501105 168:0.0459110341310388 176:0.0320422767701482 183:0.0543823876031341 186:0.175393601505032 190:0.106002584713789 214:0.0529611471059701 219:0.0516869990043019 236:0.0852596052033843 242:0.043315339960558 301:0.0560295271546714 309:0.0909857184439677 325:0.055509054054109 353:0.0693452755256851 400:0.217879269962087 423:0.0468354395775047 502:0.0853386538731537 507:0.0330530398195465 521:0.365742743341265 534:0.0471171962325395 572:0.0669884697055079 576:0.0605132498710046 608:0.134906387173419 622:0.0682242973070359 638:0.0755006464669018 686:0.146207553350554 742:0.0634437182808003 778:0.0590739675740256 789:0.0635182738320402 811:0.0702097357538129 881:0.211298744313307 944:0.135285415934433 946:0.0878742104702576 964:0.0740500740441499 987:0.0504672637764643 1005:0.0651647783842727 1017:0.0728428275190801 1056:0.121404122059225 1096:0.0809969705620006 1127:0.071238011825518 1366:0.133976939411016 1378:0.0758062648361576 1472:0.0628587858128342 1496:0.0917377358600326 1595:0.077422855164415 1746:0.0722074962938287 1809:0.0967492109185306 1812:0.10389356438814 1836:0.263689934995001 1844:0.080380125835143 1851:0.0837166000690568 2005:0.217011860390058 2020:0.103104521627963 2144:0.0863722243658309 2173:0.086957156833797 2387:0.0839642155703271 2586:0.20778712877628 2591:0.0898719710102735 2693:0.10389356438814 2770:0.116477831232719 2924:0.0957209348468254 3475:0.100271057058735 4239:0.122527523572895 4382:0.250284257679537 4621:0.120262649471527
+-1 6:0.00550608274092741 17:0.0300032651806868 27:0.192388708868525 42:0.0658844919841976 51:0.0747911751053051 53:0.0848085980129354 57:0.0822142668849234 82:0.165198362662041 83:0.128399476027802 105:0.0584896163118566 114:0.231975654587057 123:0.055861584073442 142:0.0471176457255242 144:0.0327348145270349 162:0.0596419361892563 186:0.0937351130856326 190:0.0472088879918049 207:0.586029711019477 211:0.383320919441972 293:0.0521142565535059 296:0.0496515431374131 298:0.218336469849523 351:0.117224549674174 386:0.26311219068273 456:0.0596674349329967 609:0.19495748460114 937:0.149134763322454 1051:0.266227399018629 1202:0.0682243608828308 1418:0.209688785164878 1496:0.0817119036961502
+-1 6:0.0314825372359844 18:0.0421312854813256 27:0.332302292407083 42:0.21190086069195 51:0.0801823206022327 75:0.0159511770893284 77:0.0593491752132661 82:0.295177161817141 83:0.0407866220699974 86:0.0305711088246074 106:0.247915458734069 109:0.0433075245870014 114:0.276330080711366 117:0.0406284142395419 122:0.338861247775939 127:0.430520832797641 137:0.0322165354411062 138:0.0329996609829501 142:0.0632700732720759 161:0.115213621003593 162:0.0639410845214229 168:0.0292274813431475 179:0.0429043644074622 186:0.13398905024176 189:0.0883461613904848 190:0.101223658724552 211:0.0782765150541165 218:0.0223226176418256 239:0.0333640755395729 276:0.0305711088246074 283:0.0295004258767189 286:0.11025287165534 309:0.0289612664868737 314:0.0314036445260625 349:0.0390124565721042 356:0.037534194664473 373:0.0280931898595344 379:0.0480645617719832 386:0.0313420013910201 433:0.0318238451415501 457:0.0271359804747607 502:0.0271637740374994 517:0.0438809934956256 518:0.137277366807554 535:0.0746364632045339 557:0.0370368399606591 586:0.086785339264797 633:0.0409229177628596 636:0.040247835879744 648:0.0574408391731555 655:0.0297981941111858 706:0.0400624614871792 778:0.0376071530039497 805:0.0513002097206045 856:0.0295350342177637 881:0.0448383867054773 964:0.0471411110324103 986:0.0351903770340449 993:0.172982583787254 998:0.0435586473742545 1017:0.0927451285989079 1043:0.0440126755320501 1090:0.207228291221523 1251:0.0516977193878649 1311:0.0480645617719832 1332:0.0483577325360684 1388:0.0509168158427697 1595:0.04928826147528 1726:0.0531395637460941 1751:0.0536125354055243 1884:0.118364358549121 2015:0.0634261718449307 2030:0.0606240236327898 2646:0.0586553531735059 3084:0.0697729706760833 3135:0.0661398130602017 3298:0.0600239918739621 3644:0.0697729706760833 4604:0.0656374995534706
+-1 6:0.0412782482187412 27:0.300480897400984 42:0.37044436242407 77:0.15563103873538 82:0.15480831246428 83:0.10695455053 125:0.221261357275922 142:0.0535202547319872 186:0.234239200947715 234:0.148057647565114 276:0.160332924748127 309:0.151889962084487 336:0.188696829974998 386:0.328751880038923 647:0.372862656102892 784:0.202669911408484 1359:0.458234843821996
+-1 6:0.0325803679214825 9:0.0996933793385889 13:0.086614217061583 25:0.097807850662146 27:0.0284598652699313 34:0.0259649241847256 42:0.0584773537784752 48:0.0199314931063564 51:0.0442551286797488 53:0.050182597250639 57:0.0243237451155211 59:0.0404613523240187 65:0.0233086275045961 69:0.0661083767688903 75:0.00660296486849902 77:0.0245674984807085 79:0.0220944347432235 82:0.0244376251175316 83:0.0675342342761937 84:0.0191212651533471 100:0.0201327816526997 132:0.0395201393019396 137:0.0266719691607829 142:0.0245008353330313 151:0.0257301031229422 158:0.0233847084681977 162:0.0352910828991331 174:0.0238822005912765 179:0.0177601947054605 186:0.0554645582928036 197:0.0363289375854643 202:0.0404549859050031 214:0.0279130919040259 215:0.0207558649604895 254:0.125772529543831 261:0.0895903264938446 292:0.0321273592875171 299:0.0539424517323703 309:0.119884710757804 317:0.0194186049163064 326:0.151965440350615 353:0.0365483218289328 363:0.0304356381405605 383:0.390279787210515 398:0.0253413697361319 408:0.0191847220960431 410:0.455997746874866 411:0.0244090188234735 423:0.024684547082723 468:0.174475767025041 496:0.0819609490594544 504:0.0346092368874512 507:0.0696822171426438 517:0.0363289375854643 534:0.0248330464985461 609:0.0230718893130256 626:0.0307493355645611 695:0.0321612851698475 709:0.0568257518046587 756:0.0432589148754822 789:0.0334772094628396 827:0.0278289551957458 829:0.0241694917950742 925:0.0481447200749886 944:0.0356509861908421 1052:0.0998772151654205 1056:0.0319929287953878 1115:0.0458306370433762 1176:0.036773225747961 1306:0.046651346890125 1339:0.0393259882920676 1615:0.0483502339366755 1815:0.0423642228746325 1849:0.0402847053419948 1856:0.0507164422428826 1875:0.101983048464088 1920:0.0489967415448695 1939:0.0893131284059006 2050:0.0419483590898668 2197:0.168404905703496 2517:0.0659559683701818 2956:0.0539437063393602 3189:0.122778927030226 3238:0.0623313295529539 3353:0.0721523293553036 3910:0.0613894635151132 4117:0.067585824500235 4445:0.0566459338799945 4597:0.0721523293553036 5159:0.151553936345063 5397:0.0633842462022878 5741:0.144304658710607 6129:0.327893316630613 6131:0.327893316630613 6136:0.227330904517594 6378:0.0721523293553036
+-1 6:0.0298438718514238 15:0.0817982401336097 27:0.0173796394620532 29:0.0867096995150373 77:0.0450080415380988 96:0.0369811515365337 142:0.00309558024887654 145:0.050087519891853 160:0.0540999293006029 199:0.0558006025761267 205:0.0944583794232436 306:0.0468374433799543 383:0.643498807957193 408:0.0702934219919559 411:0.0894354086537384 413:0.0516085407254537 414:0.0441015603437141 478:0.0468076936365921 507:0.0319147279696146 513:0.044665464316969 528:0.0624503801224985 535:0.0566013095227576 658:0.0552033517105175 697:0.0639881378417282 733:0.13473824966378 881:0.068007279430241 884:0.0616219298465211 890:0.125367577530373 1036:0.134947544040013 1059:0.054714442890195 1124:0.331789317832045 1273:0.0801364800482219 1627:0.0796877607676201 2369:0.155616111713178 2692:0.389840616637906 2834:0.21165212498008 3084:0.10582606249004 3370:0.101114627247745 3559:0.109480535578309 4650:0.0995537105863336 5005:0.205680281126285 6651:0.132184196093229
+-1 6:0.037167064952275 29:0.089989022702101 31:0.0472203168675847 42:0.0741220606416056 56:0.343130517885855 77:0.186840904507883 83:0.0963022147990538 142:0.0160632687490756 160:0.112291930274069 186:0.0703032385633072 199:0.057910957137421 203:0.0939215898483634 214:0.106142417044518 248:0.150713431285125 284:0.0752366922314743 286:0.0694188122771777 296:0.111718997310121 355:0.074563537208165 369:0.110785058956383 383:0.296815845987807 409:0.0632711694877661 449:0.141611820039556 455:0.271374149241306 459:0.113169852700104 465:0.105348146849104 548:0.420809424655219 684:0.115948454365286 881:0.141158570420251 1188:0.152551350115294 1235:0.145218721611137 1306:0.1773965684033 1674:0.237021323151762 2593:0.193900541343923 3741:0.25700208329006 4279:0.245564309256441
+-1 6:0.0273289594705305 13:0.0605445492346878 17:0.0496395263618614 26:0.0197145451288653 27:0.0132625626023405 29:0.0330844843058804 34:0.18149845187186 37:0.0862042067067625 42:0.0272509921586188 51:0.0309349539618124 57:0.0340052761239322 58:0.122216527469672 59:0.16969830734429 63:0.0196904987483143 69:0.0462106800464822 72:0.0850372767080505 75:0.0092311296029268 79:0.0308886378588999 80:0.0296569271977161 83:0.023603687194071 105:0.241923406779447 142:0.0070867972142232 145:0.0382222467624883 162:0.0493379211547413 168:0.0676571181511668 175:0.0440906298107079 186:0.0258470013681569 252:0.0328717854955744 254:0.0879167573831852 271:0.0502696076340593 284:0.0276607867117158 286:0.0255218418464225 309:0.0335204358785646 319:0.0826392150138261 330:0.0452995193573155 333:0.0459508450296517 382:0.0800128068009188 383:0.600184266580554 410:0.0579543278715224 426:0.0410040829582203 454:0.0454468406797091 459:0.041606921634765 466:0.0420883707482519 468:0.060980500807372 485:0.0630415263787153 499:0.0339264265618615 506:0.0509635707131603 518:0.039721995356595 551:0.067307665504796 570:0.0528422671757741 598:0.0481371957611426 621:0.0634314688897289 626:0.0859768626528752 634:0.0511734433562496 641:0.0720820574645227 647:0.164573334325491 656:0.0449623763736664 673:0.0460541316847454 709:0.039721995356595 714:0.0471368528865615 717:0.092316558143772 784:0.313089066167026 789:0.0468020753480169 876:0.0439583786915926 886:0.0784636600352499 952:0.0424328903503418 1036:0.0514898555511043 1086:0.0574280347770928 1236:0.050197157494163 1335:0.0489601207323956 1383:0.0662202308900891 1389:0.0580894385294059 1416:0.0549788317698229 1417:0.079192600224135 1437:0.0622403190396867 1440:0.0564376067099591 1474:0.0701676391743628 1533:0.0778025451549452 1599:0.0551924714017519 1646:0.0754148105279946 1659:0.0640725126905415 1667:0.072956401174723 1740:0.065219888015508 1744:0.0626248913559041 1781:0.0578206622751116 2025:0.0712875773551985 2045:0.076551740708908 2196:0.141059828449681 2275:0.215053081007778 2402:0.0628217082445043 2446:0.0734109099584591 2476:0.0835456028886778 2624:0.0578206622751116 2820:0.15838520044827 2952:0.0712875773551985 3198:0.0858241873534269 3842:0.0698155704242741 6096:0.100870974887266
+-1 6:0.0169944992972803 17:0.0308683137674399 38:0.0461529674659377 42:0.0338920307294707 48:0.034655404179396 58:0.0380001421649274 78:0.0870401297754847 91:0.0452645388208709 96:0.0350980014104223 98:0.0367459726511509 100:0.0350053897972817 111:0.0708531156918215 135:0.0516115212370209 164:0.0661704340738745 186:0.0321458888371955 199:0.0264795652183047 215:0.0360887609102066 275:0.0761874404611432 293:0.0536168051497939 295:0.0480984119602218 349:0.0561578766311124 371:0.079150889749124 376:0.144491549095665 383:0.135717918338147 398:0.0440616970328778 402:0.0431778622314249 424:0.116690489209194 478:0.0444241574157783 493:0.0505720295921642 502:0.0782037331288737 514:0.0601759781003352 515:0.0409275933699225 537:0.0633556207404125 603:0.0606494137787853 657:0.0588364949208193 660:0.0729367002845443 729:0.121946487223219 767:0.054187740678491 800:0.0499559673258681 827:0.0967738528220256 865:0.0840678061750163 876:0.0546709900601535 882:0.0425402309972983 932:0.0769442076810487 1025:0.207150270219875 1039:0.0826852714058568 1068:0.267010588290837 1184:0.074613647524642 1205:0.15675998222797 1237:0.138936639744878 1245:0.0553966604667003 1281:0.0732940325678421 1319:0.059792174161894 1331:0.0640378800315388 1377:0.0540299396301756 1446:0.0591243414758662 1620:0.0685094000872568 1787:0.0814157277367668 1899:0.0814157277367668 2993:0.102661454404518 3204:0.112283347809531 3382:0.100437199389681 3775:0.103905579801787 4231:0.604908034802086 4355:0.106739452941138 4359:0.112283347809531 5297:0.0984917548953972 5359:0.263510761135183 5360:0.263510761135183 5619:0.117513226548312
+-1 6:0.0348886633806545 9:0.0533782915129471 27:0.0101587420339996 29:0.0380126471182916 30:0.0209710241890626 40:0.021799107341359 42:0.0626204319203965 57:0.0260470648317234 58:0.0468071749058708 72:0.0217120371895166 75:0.0141415602897137 91:0.2787759551565 98:0.090524670223799 100:0.0646775239331272 111:0.0218185642860168 118:0.0228455732367868 119:0.292027830830379 132:0.0211600562673941 142:0.00723771083112354 149:0.038844974539827 151:0.0826591868547269 158:0.0751244943551176 172:0.0273600200912596 183:0.0306928474234992 186:0.118788364115334 200:0.134818013666656 204:0.0209443217631684 208:0.026138380120094 214:0.0298907142393166 219:0.0291715984556398 220:0.0559765302242512 226:0.0541045920386342 238:0.0344035594132273 240:0.0942238495537283 264:0.0287205473676 275:0.0703836613785106 284:0.0211873681645971 320:0.0331162274236649 325:0.0626574522302639 355:0.104989006535772 357:0.0322965003850977 367:0.0297782239498678 383:0.208965413666844 390:0.063739413926208 394:0.0975071258287688 402:0.0265924498486908 414:0.0257782318100937 420:0.0709536747911579 424:0.0718675224234758 459:0.031869706963104 480:0.0513222634282519 483:0.0338745400980824 499:0.0259866683318472 500:0.0361054754746011 508:0.0541382694913848 530:0.0286805773158941 538:0.030570587607452 540:0.0394397504913011 546:0.0301429466713167 555:0.120617953205941 557:0.0328351131901445 572:0.0378075875375203 575:0.0364135926208395 594:0.0334058472317034 611:0.0451404443050474 644:0.0332438668276559 655:0.0528353432712931 658:0.0322674478181061 676:0.034886949772596 687:0.0392574056737906 690:0.0436013922524121 695:0.0344398889197377 712:0.0320381479096501 780:0.0707921073601659 804:0.0328659435339464 812:0.0781569387419903 851:0.0396256362052736 876:0.0336708555314903 882:0.0261997445191728 886:0.0300504550003361 890:0.0366399108088302 930:0.0305463219075738 936:0.0408237996268524 951:0.0454803432107987 991:0.037061276242723 1059:0.0319816709701659 1116:0.0406830204209391 1196:0.0875857098083845 1207:0.0397515960946366 1305:0.0317315687294853 1319:0.0368248984681583 1351:0.0463237776485617 1355:0.0484284514043405 1379:0.0368248984681583 1389:0.0444948415034038 1419:0.0581911072771208 1423:0.0509243352832169 1428:0.058636434709698 1438:0.144818377413033 1540:0.0453656973677546 1555:0.0522317474052229 1558:0.0420314223510546 1565:0.104936250359575 1581:0.0497742161957407 1598:0.0365034788537973 1609:0.0487475747375224 1674:0.0667474590858671 1699:0.0595945149905051 1714:0.107492792589167 1720:0.0453656973677546 1728:0.169775789052669 1736:0.0499565610132512 1743:0.0517758129760191 1781:0.0442889666122452 1843:0.0606592572491739 1851:0.0472487683233971 1866:0.0555465852305219 1944:0.0625178765606764 1945:0.0532144364745849 2107:0.0447052414778308 2112:0.393614539947419 2360:0.0552220519997809 2361:0.058636434709698 2672:0.0549081611419827 2740:0.0505254103335289 2785:0.127987064531748 2807:0.0473885199072305 2833:0.0527104878332445 2881:0.125035753121353 3112:0.0601120904148954 3482:0.0532144364745849 3623:0.0625178765606764 3624:0.0606592572491739 4172:0.154528539215634 4173:0.386321348039086 4188:0.0581911072771208 4231:0.074510342787824 4443:0.0723742311927027 5669:0.0772642696078172 5712:0.0691532452316481 6437:0.0691532452316481 7170:0.074510342787824
+-1 6:0.0190985761488165 9:0.0730501878239782 27:0.055610473292051 37:0.045182225321625 38:0.0778007002344978 42:0.114264536730731 75:0.0193532540290678 83:0.0247428090569044 84:0.0560443239120261 111:0.0597190421037166 119:0.299738254363393 127:0.0949713787182491 142:0.0148576168506903 149:0.425286401002735 180:0.073587673468497 186:0.108377545302582 190:0.0818751356123437 226:0.222132471752301 264:0.0786102859474907 323:0.163379055886784 383:0.3431723785324 390:0.0872297712632937 423:0.0723502729150548 442:0.0812614891485953 453:0.0926234051719029 457:0.0658471184308038 465:0.0812009076039979 499:0.142254909159123 540:0.107949546508867 555:0.110046786023498 882:0.0717106600387012 996:0.106321600250684 1015:0.119340271228168 1190:0.103340946091864 1265:0.122654346413799 1404:0.25864682459075 1531:0.130488115435338 1674:0.182692787078553 1868:0.15028774323053 2533:0.304070315407981 2949:0.142330806532265 3827:0.203940380300832 4315:0.158108709170278
+-1 6:0.0357848952005985 9:0.136873727931131 13:0.0594583655389549 17:0.0974979627699713 31:0.0340982148970201 34:0.142593860984184 41:0.123582280541014 53:0.27559218911151 63:0.0193372464907351 75:0.0181310418594652 83:0.0463604627994539 85:0.0548250031384858 98:0.058031311662824 142:0.0115994306283566 151:0.21195641021628 172:0.07015713392125 199:0.0418180222487971 239:0.075847123610089 248:0.108831522292373 278:0.0772336648342325 284:0.0543290911631063 309:0.0658381424814012 329:0.480446296403337 360:0.110158699986037 381:0.0859973883982371 382:0.0785773579075742 394:0.0833432682947292 402:0.204566742908721 409:0.0456886797271927 447:0.377538218919058 506:0.0500492720639063 539:0.0831156301141189 676:0.0894578439319872 687:0.100664658069342 752:0.136453567425704 827:0.0764153621301862 1052:0.411378374344441 1134:0.108831522292373 1704:0.135798947087817 2056:0.116621644237891 2615:0.174046423691721 2731:0.130581242206639
+-1 6:0.0229008374518542 15:0.0784603372877274 37:0.0541773789700918 52:0.0933535319248265 63:0.0495001185464819 75:0.0464124363230701 142:0.0178155620486229 171:0.0990051498817698 180:0.0882379573969763 332:0.147073123572089 336:0.104687471426553 367:0.0977317845112647 370:0.135411565974495 381:0.44027787745687 478:0.0897952675849472 507:0.0612247969357756 649:0.306598838106847 1045:0.0594826354776518 1079:0.398165952950727 1300:0.207511257504219 1352:0.166471622742183 1751:0.467982087784344 2509:0.212759739756467 3486:0.244542078045336 3810:0.205182943429271
+-1 6:0.0285978516886278 27:0.0832700854319459 47:0.0270711779918383 51:0.1165365851142 75:0.0927334451076205 77:0.0431288977217862 82:0.0858018031493922 83:0.0444593049192249 106:0.240212728033584 114:0.080323352401295 120:0.0476521327083642 123:0.232110031264082 125:0.061316550511254 137:0.0468233520346947 142:0.0578435476845199 162:0.0309772178482678 173:0.0427507237897887 186:0.0324565029643097 190:0.0490393203552651 215:0.0728749471755205 234:0.123090416744338 236:0.236658743985607 276:0.133295691574501 286:0.0320481948271017 295:0.0485631695633564 298:0.113401019867775 301:0.0518411874372822 302:0.0726063526596367 309:0.0841843207234037 317:0.136359511896223 367:0.0976355239268083 383:0.0685146558112144 411:0.0428506824638005 424:0.117818027310001 430:0.0445152992944203 449:0.0653771369686802 455:0.0417612619242101 485:0.0395811386133588 502:0.039479693794941 503:0.233063075406096 519:0.0683865452323284 521:0.056400434658435 546:0.0988313606582609 549:0.122148974444512 574:0.0428256330430583 637:0.290678883220438 659:0.0838217360992938 667:0.220358044801141 685:0.302233325765962 805:0.14911893822926 851:0.129922783788191 865:0.169760246116777 882:0.0429512819029176 986:0.102291037166978 1045:0.118848096521526 1051:0.368733128108981 1205:0.079137348692318 1426:0.0678843116917212 1488:0.0796519344246398 1497:0.0694419652836229 1836:0.0609946221197982 2502:0.0976979302737736 3300:0.0940317052403107 3566:0.11127273188915 4504:0.126665335324925 5410:0.118648714463222
+-1 6:0.0216260355990572 27:0.188909487135067 77:0.163072927231514 106:0.151376435089199 120:0.18017554771988 142:0.0729032979482296 234:0.155137395365634 236:0.596547190325735 503:0.293741782916411 772:0.200373245568369 865:0.320936793242238 1045:0.337028790777593 2343:0.391919802184178
+-1 6:0.015049627262499 52:0.122697334720629 54:0.112685005432573 82:0.225766111718482 85:0.461141974721082 98:0.0976221509308547 123:0.152684959190506 137:0.1232040089891 142:0.0468310504133094 171:0.130125424969368 199:0.0703476306605206 236:0.207569547774275 298:0.149193294200829 317:0.0896990379766231 339:0.234115323540277 415:0.130937115669875 457:0.103774708750174 458:0.158447535665738 485:0.10414792503334 637:0.254949736153705 667:0.144954351582858 764:0.139189357034498 829:0.11164448588073 851:0.170929751140717 959:0.167314267663057 1045:0.156359608143025 1182:0.225307665456015 1485:0.187672798147407 1598:0.314923930756706 1599:0.182361744841735 1665:0.162204072858019
+-1 6:0.0240867274198883 18:0.0429785262278997 27:0.0701347734741796 29:0.029159432731518 37:0.0379885892039269 72:0.0499657931678698 78:0.123364145293137 83:0.0624102333820245 91:0.0641545590307417 92:0.0530026604944795 132:0.0486955224720965 139:0.32841753947494 142:0.00624603922308444 183:0.0706332829438973 215:0.0511495003035939 219:0.0671324409629524 234:0.0575965042643072 236:0.110737429587747 242:0.0562591088418646 276:0.0623717594857981 291:0.0646237510149711 307:0.0771034190957307 325:0.072096627120616 411:0.060152112094501 466:0.074190246054082 471:0.418478496291797 534:0.0611970602928124 586:0.0590203683110581 633:0.0834917175823095 656:0.0792563291720457 673:0.0811807941422933 715:0.0990683406270529 740:0.229929524639116 951:0.104663666621377 1068:0.0946101904192999 1070:0.248649762273421 1086:0.101229863612429 1098:0.090067477411491 1138:0.0791727242761833 1292:0.0963595109003667 1296:0.0817361982721436 1328:0.119669770621721 1363:0.0909041550667282 1382:0.105201007007177 1386:0.114964762319558 1449:0.102879929216384 1551:0.0859599257566478 1579:0.100780258953772 1707:0.0917738678883297 1795:0.102636502832179 1835:0.108103866222593 1996:0.137144533420053 1998:0.138335626930907 2131:0.147267967964882 2185:0.10033964699393 2213:0.111448131982653 2363:0.137144533420053 2470:0.119669770621721 3031:0.131098727137155 3454:0.143872049511478 3534:0.137144533420053 3672:0.156200308998856 4199:0.162537905820663 4301:0.151284486995896 5583:0.149184816733284 6359:0.177807843676445
+-1 6:0.0124489172177408 17:0.0678355524373 27:0.108744783861025 51:0.0845491424041581 77:0.0938720997781156 106:0.174278147329444 114:0.174827601664354 120:0.103717136132138 123:0.126299634150615 142:0.0419664120546147 162:0.0674233898454612 186:0.0706431243471206 234:0.0893040512874625 236:0.515099026459894 276:0.0967081401754581 298:0.123411360065788 367:0.212508367430782 457:0.0858415119519416 503:0.16909096085449 659:0.182442000383262 667:0.239809889206073 685:0.263130090600415 705:0.284592904011613 796:0.109430032638229 805:0.162282235202973 910:0.199399073288782 1365:0.150554806364874 1747:0.187215927364937 2290:0.214491002190506 7556:0.258244577324557
+-1 6:0.0144964905053069 18:0.077599308515493 27:0.126630910879259 51:0.0984556181598705 82:0.108734131346306 114:0.508957249707865 118:0.0949249995340927 123:0.147073148231634 125:0.155409364658331 142:0.0526281156425746 236:0.599821495778557 298:0.14370981653659 317:0.0864022231037878 386:0.23090846696456 456:0.157093244813193 685:0.153204603795322 865:0.215132225910263 1381:0.222199624146561 2374:0.23364238810767
+-1 6:0.0244940598798393 17:0.0444902972769747 18:0.043705339319122 20:0.0460565530951431 25:0.0612769668687843 27:0.0950944372081624 48:0.0499486057389171 51:0.110903983086188 53:0.125758303788474 56:0.075377303915788 59:0.050698362739601 72:0.0508107684561136 75:0.0330942480991952 77:0.0615665012679364 83:0.0634656575351879 84:0.0479181629433091 97:0.0509464040609644 114:0.0573307925623286 137:0.0668403347799187 141:0.0745818684415454 142:0.0423444430827165 173:0.122053315964052 219:0.0682677227238683 236:0.225220237185242 239:0.0692211607534351 258:0.0774249328656061 280:0.0855317984696606 284:0.0991658634893617 286:0.0457487979448437 314:0.0651538126211225 377:0.0628405603045027 383:0.0978046708052676 396:0.0829285931839183 399:0.153971311609956 404:0.0685644477545379 409:0.0416973418829496 433:0.0660256118207993 502:0.0563572626818181 507:0.043656157274559 516:0.114462612504832 521:0.161023240348508 535:0.154849865731212 540:0.0922973746170618 570:0.0947216199567041 637:0.138314701415871 659:0.358966583504704 706:0.166236890543729 716:0.234530286672953 782:0.0930271594183144 827:0.0697397582700417 946:0.116063465678537 951:0.106433641763669 1047:0.0920119897092871 1176:0.0921542277255352 1308:0.190742021418638 1601:0.140675031127847 1642:0.1264273485572 1702:0.508384507784303 2187:0.114079655960671 2492:0.156203200051787 2733:0.106165346194049
+-1 6:0.0353998825374275 11:0.0795376506841732 13:0.0392124320265576 18:0.126329721225903 27:0.0687173119451402 38:0.0480687779753938 48:0.0721879012601459 51:0.0400708171026327 52:0.0481016479788933 53:0.181751379887918 56:0.0544692818931815 58:0.0395775287495304 59:0.0366357413721147 68:0.072439618308979 72:0.110150904574827 78:0.0453265835638314 83:0.0458616667250712 91:0.0942869412825881 92:0.0389485861438877 100:0.0364584641572507 111:0.036897114899152 114:0.0828569592970788 125:0.0632506335712445 132:0.0357835198107388 137:0.048300282018968 141:0.0538944828910474 142:0.016829459371517 159:0.0354940241411397 168:0.0438189759466475 186:0.133921061043561 197:0.263152363479398 219:0.0493317436427053 227:0.0419375234160136 236:0.406872624450642 246:0.0609844549348767 252:0.0425796432752461 280:0.0618071408720009 284:0.035829706635683 286:0.0330590780258719 293:0.0558424396957251 319:0.107044635476488 330:0.0586775967808102 336:0.0539416109335366 347:0.0484676927266475 348:0.0586144837528713 375:0.0418254920265976 383:0.0706757857844543 386:0.0469891465825841 390:0.0538944828910474 396:0.059926008022074 401:0.0899903014312785 409:0.0301314076151645 449:0.067439301458814 457:0.0406833165592292 465:0.0501695792872349 478:0.0462682049889639 485:0.0408296303998167 497:0.092340576210852 499:0.043945746141547 502:0.0407249857486753 503:0.080138163125537 507:0.0630937805793013 513:0.0883013324685244 515:0.0852529970133754 519:0.141087268531176 521:0.174538352015652 535:0.0559489431796198 550:0.0480687779753938 561:0.0522832509070307 572:0.0639359621992021 594:0.0564922314527183 634:0.0662862369787755 648:0.0861175385088004 667:0.0568271772872919 671:0.0360313864124448 681:0.0645603883572225 702:0.0702825242313589 716:0.0564922314527183 803:0.0737337965326744 806:0.0633347297144501 819:0.0592569677211706 839:0.0939341704907505 844:0.0646515912528851 851:0.0670104427061223 856:0.0442800711692192 914:0.0756005028460553 928:0.0950909818684244 951:0.076911268179876 1003:0.0623533097724824 1099:0.083572944222904 1103:0.0773061285153698 1116:0.0687985725934293 1176:0.0665926525209567 1253:0.0722054480782239 1360:0.0871852971682859 1366:0.0639359621992021 1411:0.0747252371937252 1524:0.106922933222957 1553:0.0821643630557627 1601:0.101654842078132 1606:0.0933853561991099 1613:0.0676580679118326 1620:0.071353226516848 1645:0.067439301458814 1844:0.0767173919564886 2084:0.0895585832824544 2142:0.0767173919564886 2412:0.0868214959894026 2499:0.0883284876186424 2570:0.0895585832824544 2593:0.092340576210852 3056:0.116944231596238 3149:0.100779576425802 3241:0.0991593782431831 3380:0.0999492164088173 3456:0.114782562497546 4055:0.203309684156264 4219:0.111170209552165 5001:0.130660688574534 5002:0.130660688574534 5451:0.137224548784241 5470:0.126003555640894 5523:0.126003555640894
+-1 6:0.0155716448464955 8:0.0348316751757258 10:0.0145932490506724 14:0.035106900603603 17:0.00942796078873363 21:0.0104666256693276 22:0.0553530269532674 27:0.0100757544914095 37:0.0736768605785598 41:0.0398342988243379 47:0.024567274834424 51:0.0117508588146936 70:0.0199059158549951 82:0.012977618237225 83:0.00896602581229348 94:0.010386612996397 98:0.0112231459064782 106:0.036332442509564 125:0.0185483930395515 138:0.0580338938904598 142:0.00358929270819887 147:0.245043765939167 151:0.013663989603246 162:0.00937067736411598 175:0.0167481343788687 186:0.00981816440507189 189:0.0129472839090019 197:0.0192925081991663 204:0.010386612996397 218:0.0588855332901303 219:0.014466646715572 234:0.0124117083676951 239:0.02933738047517 241:0.0456987279810591 243:0.032628136409415 244:0.0763818071519881 254:0.0166978978654823 266:0.0175935121953666 277:0.0156686451679211 286:0.00969465028454432 291:0.0139260387669294 295:0.0146904669097815 302:0.0219635833240823 309:0.0127329722197823 317:0.0103122639819258 344:0.712526269448406 345:0.0126969803399198 347:0.0284265236142324 364:0.0160307853746142 369:0.0154716332374914 378:0.0239392241640166 381:0.0166317322478822 402:0.0395628211303793 408:0.0203761206870376 415:0.0150532060574785 423:0.0262174926456801 433:0.0279830397816111 434:0.0149714546067563 442:0.0147233203711039 452:0.0976896711249314 458:0.0182159458108851 459:0.0316093608833352 485:0.0119733825505856 507:0.0185023955407168 509:0.0321196419542855 515:0.0125003182349363 518:0.0150886779999564 540:0.0391175641455227 546:0.0149483533143848 549:0.0184751683557208 554:0.0439271666481646 563:0.0530398663037079 612:0.100704064191653 613:0.0320038525627963 617:0.169790799784348 632:0.0273854694114415 679:0.021765750273489 702:0.0206105110676348 712:0.015888212911437 747:0.0190677416666274 771:0.0183555825309146 787:0.0198732881924415 793:0.0207649086177309 795:0.0204979214534404 807:0.0224975507537874 894:0.0273854694114415 903:0.0192638234822002 904:0.0210896373081513 908:0.0184030559886734 912:0.0164543928902791 944:0.0189324816278246 950:0.0188531376157336 981:0.0205351554185418 1009:0.0616817953886704 1045:0.00898795344773686 1056:0.0169898676405919 1067:0.0184030559886734 1101:0.0222767059944697 1116:0.0201753388538893 1133:0.0201753388538893 1157:0.0474298005002342 1230:0.120873380154515 1245:0.0845976794588861 1282:0.0243383924688766 1322:0.0194385906855825 1363:0.0195893114783905 1373:0.0401450101912136 1416:0.0208840941131347 1510:0.0265199331518539 1579:0.0217175538573469 1598:0.0181026395680811 1613:0.039681766492087 1883:0.0248664146176363 1942:0.0224413689594557 2159:0.0342941635345374 2180:0.0278856480421766 2218:0.0256764261949721 2303:0.0240164178358006 2358:0.0295538414140902 2491:0.0266536689311431 2538:0.0303696672067449 2760:0.0272298060817848 2821:0.369508310422813 3096:0.0581574291786474 3375:0.0336602491245131 3590:0.281689890720346 3737:0.0306760513292097 3996:0.114949637797812 4146:0.0336602491245131 4250:0.0383165459326039 4618:0.19158272966302 5643:0.0350259640148358 6111:0.0358915002744234 6428:0.0358915002744234
+-1 2:0.0967618367287864 6:0.0118514521727323 41:0.109143218408681 65:0.169575177756423 142:0.00921976246473481 248:0.432521567807908 283:0.177684731688551 582:0.0999612278512536 646:0.308208650340393 647:0.107053087921378 781:0.128429917356985 784:0.232755300000255 5375:0.73755167702486
+-1 6:0.0084386387215668 42:0.0504873838051844 51:0.0573125882747638 65:0.181114977351592 82:0.0632958750118841 105:0.0896413592462077 106:0.236272809378368 114:0.177763287746147 125:0.0904662740143755 142:0.0262591430668947 176:0.0437411643639566 200:0.0815222195587897 202:0.628694577104452 211:0.167851079085195 218:0.0478671726327651 248:0.102656709541307 283:0.0632587988039161 286:0.0472838206115744 301:0.458918092635136 370:0.0997945412592629 433:0.0682409882958681 561:0.0747798185703568 641:0.0667725138133681 704:0.116388558514721 1096:0.110569602395911 1202:0.104560857616722 5976:0.360441359960607
+-1 6:0.0132849361170528 26:0.0287504329862412 27:0.0386825478175633 41:0.0305861396358019 51:0.180454241271705 65:0.190086022429822 74:0.0544538263846282 82:0.0498232999273199 83:0.034422109283553 84:0.038984333548908 106:0.232477452995924 111:0.0415404610866043 114:0.326494552756974 125:0.0712104588597451 135:0.181555859778321 137:0.0543786686618976 142:0.0568421274163492 162:0.107926907765395 181:0.224268314610478 194:0.105255880045214 207:0.157106394669037 234:0.0953013499565428 284:0.040338723998126 351:0.0471394010057251 386:0.211610129457731 414:0.0490792896063718 415:0.0577918371892154 432:0.37438851204062 438:0.0740672444501555 442:0.0565253495184018 458:0.0699341369891921 509:0.184969213001216 586:0.0488286645762794 609:0.0470388450434218 685:0.140400421296047 702:0.158254566563316 778:0.0634775553770362 847:0.0708365847868495 1042:0.151366479393693 1141:0.176874898115127 1277:0.0784124574696437 1294:0.0754434241061427 1363:0.0752067230917587 1613:0.228517650632156 1865:0.157675960067525 2154:0.0907673045406844 2466:0.105137509148092 2701:0.115489428280876 2774:0.107057780609374 2809:0.111638167497413 3162:0.25845492710649 3371:0.120378733105659 3913:0.137793619008202
+-1 4:0.0494416689590657 6:0.0228605052062075 13:0.227903130748831 27:0.0998464627132461 51:0.155261383484516 52:0.0931891205757002 65:0.0817742454140654 77:0.0861907741918737 111:0.0714821598366295 114:0.240782826417697 120:0.0952302151685437 135:0.104139471481342 142:0.020748216804604 161:0.111547196806751 186:0.0648625693172211 190:0.0980024348066867 199:0.0534293092084248 200:0.110422971413764 207:0.270346166636802 218:0.0648367459067253 224:0.217408092874709 283:0.0856849159627761 296:0.103073220454174 309:0.168237821072387 386:0.182067660074977 391:0.118289055825135 432:0.107373625451145 489:0.260469012401429 681:0.250150507012781 723:0.11731108031933 882:0.0858358185647727 944:0.12507525350639 991:0.121420458165969 993:0.125608340509856 1055:0.124724830528107 1056:0.112241598537404 1067:0.121577664160666 1086:0.144114585418409 1478:0.183082732148589 1523:0.184223313489938 1910:0.139886313461373 2770:0.430748404583908
+-1 6:0.020685270427233 10:0.0249243118685831 22:0.126052450861608 42:0.0353592977537847 52:0.0481839660046645 57:0.0441232626198345 59:0.0183492186962517 62:0.0676639129292861 67:0.016715525320593 83:0.00765669189881578 109:0.227638033339254 111:0.0184801291085812 115:0.0397876094295585 116:0.0949126078124823 118:0.0193499965186042 140:0.0208817094485515 142:0.00689656099564683 146:0.0530703025025402 151:0.0933487908163094 162:0.0160045020976557 173:0.0220873304995088 186:0.0335375612050913 199:0.0276259288922055 216:0.0257098882569507 218:0.0167621045317459 219:0.0247080833870177 240:0.0532045060965622 256:0.0201099345742586 275:0.019871444218462 276:0.0229559153855373 291:0.0237847604817609 306:0.0231884212816888 309:0.0217470811001637 367:0.0504437795268208 372:0.0875108350914509 382:0.0259549876507427 398:0.022984616610297 403:0.136899250520342 405:0.0281030234310032 426:0.0266022530482811 430:0.0229990054118163 436:0.02610146031192 453:0.0573248473436804 462:0.0363119317229634 485:0.0408995035685896 493:0.0263807068191938 504:0.0313905700171689 506:0.0330636782131392 519:0.211993074132724 534:0.022523567548953 563:0.0905886115306622 580:0.0267381459643646 585:0.0366150731054629 641:0.0233823682249618 704:0.0407568919745969 737:0.0696425287271092 771:0.031350130594047 774:0.0994479588595427 790:0.0446453124855212 803:0.0369299898735712 812:0.0330991145831055 856:0.0221779245987371 864:0.0440444385607626 886:0.0254524670321101 900:0.0862649144522906 953:0.0645800256420433 957:0.102755698395224 969:0.0330492185023918 971:0.0368501065916577 987:0.024125009881106 1005:0.0623018093227324 1023:0.0417118871370341 1027:0.0308799648334986 1067:0.0314312121450129 1089:0.0482508640468515 1113:0.0717549319303526 1137:0.166273509666801 1159:0.0901456933884435 1164:0.156750652970235 1192:0.0367710026712604 1262:0.0910454354030455 1271:0.0376867334105818 1294:0.033562560005492 1302:0.0421583166297164 1377:0.0281845124337911 1389:0.0376867334105818 1419:0.0492873482120765 1423:0.0431324572261453 1461:0.10095204402552 1491:0.0339422722823893 1509:0.0373416563317084 1533:0.10095204402552 1610:0.0408866241427146 1664:0.070145396154666 1721:0.0387192125929997 1724:0.0455227177015228 1727:0.0513778491976118 1749:0.0462493009277683 1776:0.0684496252601708 1887:0.0509144037752253 1940:0.105904166313645 1948:0.0444400334823628 1955:0.0444400334823628 1987:0.0465067221526088 2002:0.0457577511877176 2023:0.043306831420476 2024:0.0575581776290438 2063:0.0496645365706568 2399:0.0429617543416026 2446:0.0952537143781192 2530:0.0631095949574509 2575:0.0823049737923942 2578:0.0446453124855212 2595:0.0518693989376625 2663:0.0958657181433738 2667:0.0556802295021512 3034:0.117144362333433 3132:0.0598220483712852 4241:0.0504760220127602 4246:0.0585721811667166 4276:0.0504760220127602 4727:0.0574894969475567 4893:0.054201950361391 5055:0.113069003570239 5223:0.0598220483712852 5562:0.183900982536136 5585:0.41237815780407 5846:0.206189078902035 6167:0.371748954886196 6505:0.0687296929673451 6506:0.13745938593469 6538:0.27491877186938
+-1 6:0.0253071711180021 10:0.0711512215697829 13:0.11213096271717 15:0.0289015512480878 22:0.0899602154309979 52:0.137550358837797 63:0.0182338014646968 116:0.18063081069436 142:0.0218750601625017 171:0.0729388251962092 229:0.0441767575921381 232:0.149752260215265 281:0.0973752755264493 282:0.119491628145836 344:0.514668364760615 363:0.078804092939753 375:0.0598016042958689 409:0.0430815377840321 415:0.0733937998188211 453:0.0818223776108618 474:0.340744052936868 522:0.234955310199732 541:0.173974556065638 574:0.0631629976648691 658:0.0780194046190577 678:0.273870364561716 818:0.387903810827469 829:0.0625797582731593 867:0.0741527559649294 987:0.0688694609694496 1059:0.0773284252873209 1089:0.275482664222189 1149:0.0809304740075867 1202:0.104524738458454 1433:0.0813316294328567 3131:0.145344916369415
+-1 6:0.0310353589888612 10:0.0654420349952732 13:0.154700331722213 17:0.0422787919076828 52:0.189769940657597 63:0.0167707180175289 116:0.166136962569101 142:0.0221317816223512 171:0.0670862009912643 176:0.0402174682261467 212:0.0878464009522997 229:0.0406320067672624 232:0.068868056214727 281:0.0895618662348105 282:0.10990359881724 344:0.473371284350909 363:0.0724808386160475 375:0.0550031130142363 415:0.0675046683698704 453:0.0752569355925228 474:0.417870253332766 506:0.0434065020150887 522:0.324153681971627 541:0.160014806986389 574:0.0580947875861372 649:0.103876168570457 658:0.0717591138246754 678:0.251894958180557 818:0.356778340594954 867:0.0682027257408853 987:0.0633433632681631 1059:0.0711235787964513 1089:0.253377886631758 1149:0.0744365984917649 1433:0.0748055651349211 3366:0.124276306792863
+-1 6:0.0292050030351912 10:0.0615824947071499 13:0.0970511013822193 15:0.0250147444765679 52:0.119051986153005 63:0.0157816402504014 67:0.0413003879509378 116:0.156338790791158 142:0.0170398859254886 144:0.0434074641901154 171:0.0631296935947321 176:0.0378455838720562 212:0.0826655302219424 229:0.0382356743928661 281:0.0842798234157307 344:0.445453516461739 375:0.0517592235070415 415:0.0635234812440615 474:0.294919305298183 522:0.305036241702489 541:0.0752888491702365 574:0.054668562022784 649:0.097749918712815 658:0.0675270145192922 678:0.237039082449566 723:0.0749342682036895 867:0.064180369654682 987:0.0596075952325823 1045:0.0379285376204733 1059:0.0669289611043175 1073:0.293249756138445 1089:0.357651829520647 1149:0.0700465905891902 1202:0.0904677953641436 1433:0.0703937968817653 2009:0.454378894927343
+-1 6:0.0100984970726091 10:0.127763857810545 17:0.027513924131918 37:0.0238903971997236 52:0.0411657595859773 59:0.125412594781807 72:0.0314226632311013 98:0.032752871157599 109:0.111132316175305 111:0.0315768341662879 128:0.0542746938196275 139:0.0413072747887209 140:0.0356803933831469 142:0.0013093436835599 147:0.130021669028008 199:0.0236020909321939 219:0.0422184848977266 253:0.0551736610759531 291:0.0406408111655831 293:0.143371165675073 344:0.0770143907629768 367:0.0430964213366771 402:0.0384858218872627 405:0.0480193891091394 557:0.0475204926614247 688:0.224209283513292 767:0.0482992818182598 800:0.0890547313530501 876:0.0487300175858183 906:0.0590820887184148 963:0.0428398544138169 1012:0.2022341360835 1054:0.0659891856769624 1084:0.164891654537203 1101:0.195032503542012 1188:0.1865207042964 1500:0.0576224011776162 1544:0.066159178213245 1573:0.195507510468388 1620:0.0610646389862821 1629:0.0743025027409231 2253:0.0749323483771241 2339:0.237077321882684 2402:0.0696409430612449 2455:0.0755921977454392 2537:0.227802883741529 3457:0.187639741438869 5352:0.10474333078594 5531:0.0938198707194344 5633:0.587189111174009 5635:0.117437822234802 6088:0.10474333078594 6134:0.11182042028077 6175:0.234875644469603
+-1 6:0.0209166779787834 10:0.117614662060238 13:0.139016361864579 17:0.0379924449392229 22:0.148706376409937 42:0.166856035100444 52:0.0568435039274241 57:0.0520530180470932 72:0.0867796099842003 132:0.0422867143718511 159:0.041944606587123 171:0.0602848066923854 258:0.0661169441172049 284:0.0423412950582813 301:0.0631950396991173 310:0.286229672033241 317:0.0415559769828732 375:0.148280212020402 403:0.0807512719465758 426:0.188298980056799 479:0.0883055881113067 485:0.0482498906691441 535:0.0661169441172049 571:0.055027241826749 790:0.316013338798154 856:0.0523274046768333 920:0.0915931724789114 1063:0.102179718526939 1255:0.109729657499656 1283:0.0863909397442217 1343:0.363668317261098 1377:0.0664995672239866 1466:0.0851562844286306 1508:0.103920055732545 1560:0.106344881470247 1759:0.10583470409963 2326:0.5242671841386 2561:0.103920055732545 3454:0.124937077475056 4442:0.282292648239916 5409:0.141146324119958
+-1 6:0.0213192932238208 13:0.0472307406957895 17:0.038723743549083 27:0.0413844458766859 29:0.0516183444771504 37:0.0336239065722588 52:0.0579376576589937 59:0.0882543168846271 69:0.0720978081178292 96:0.0880596210043816 111:0.0888839572635702 142:0.00368560215378123 158:0.10201346978617 186:0.040326438459425 209:0.133924062330646 212:0.241379283704316 215:0.0452727004467959 220:0.114017940296006 309:0.0522985152256534 331:0.0555531635216411 337:0.0543298441826591 376:0.0906310227106117 386:0.0565976677053689 388:0.0738989725697631 416:0.0691389342781374 489:0.242908684695088 523:0.0832984932114399 534:0.0541658503488124 640:0.265300785340741 647:0.320958722842196 784:0.279131953214463 882:0.0533659534521037 1000:0.0862800019641951 1126:0.0757843775706424 1255:0.111841791796837 1430:0.106871711058658 1535:0.105461548420866 1558:0.0856133130256535 1573:0.091720621905218 1698:0.102914617890048 1853:0.209150177735405 1887:0.36732484356583 1921:0.214730753430676 2395:0.122441614521943 2735:0.140857437117122 2911:0.294836451564262 3737:0.125996657324917 4159:0.135957119429768 4485:0.151769246528548 5232:0.151769246528548
+-1 6:0.0252697172327393 9:0.289962598634582 10:0.106568879712918 12:0.170348629132794 27:0.11036903413525 42:0.151185748634694 75:0.0768200602553644 82:0.0947705498673218 83:0.032737717384779 84:0.074153392730521 142:0.042593237120312 210:0.198848790893628 215:0.0804924670796389 286:0.0707962987848001 293:0.11958706296881 295:0.214557648622184 296:0.11393585188299 368:0.154009502179905 424:0.260266773485192 433:0.1021746833119 557:0.356735087512705 882:0.0948818428992347 889:0.241724568049654 944:0.138256624707552 1203:0.500874147474217 2231:0.234767766613784 2640:0.174818937955294 3184:0.199985540262894
+-1 9:0.0325638347917046 12:0.0286961386168173 13:0.0565833172416994 14:0.129561798811446 19:0.103365067979756 21:0.0257513447192955 41:0.0392021953620838 42:0.0254680487996557 63:0.00920110688250712 105:0.226095148894946 142:0.0375310769847365 210:0.334971434540974 235:0.129232528249107 298:0.0843992827660554 331:0.0332768682961312 373:0.0303883077751471 421:0.123775315189753 435:0.160417982507589 457:0.0293528976442505 506:0.0476291908335883 723:0.043688628049107 831:0.0747193789057534 867:0.112256476180261 948:0.0681831022720196 1004:0.172350803777168 1050:0.0502505467042975 1203:0.42187465900579 2036:0.430877009442921 2038:0.253124795403474 2697:0.495035615997306
+-1 6:0.0229335188263236 9:0.175436937777321 10:0.0644776878370969 13:0.152420683400213 29:0.027763356468302 52:0.124649006768292 63:0.0165235864260075 116:0.163688785220504 142:0.0158586545046698 147:0.393702729299756 171:0.066097625570536 176:0.0396248277131227 229:0.0400332576565442 232:0.0678532235570232 281:0.088242091701657 282:0.108284070585876 375:0.0541925927464915 409:0.0780815250531304 415:0.0665099264564989 453:0.0741479570594294 474:0.308784419900124 522:0.212917990900108 541:0.07882842254926 574:0.114477417433977 609:0.0541348099765975 658:0.0707016788366731 727:0.245533177830755 987:0.0624099419226717 1149:0.0733397083625837 1433:0.0737032379508896 1727:0.398734168442264 1912:0.23207912665761 3652:0.46426806657656 4935:0.144041387199257
+-1 6:0.0158883157306177 10:0.134010206156431 13:0.105596875912449 42:0.0475289629510712 52:0.129535034944309 63:0.0515138483793197 75:0.0644007402505205 83:0.0411676304343606 115:0.320888241784173 116:0.0850525530177074 142:0.0288405016831687 171:0.0686885396040974 210:0.375078083771702 229:0.124807478950425 286:0.0890262393751462 310:0.3261302348309 363:0.14842405383679 375:0.281584249130382 386:0.0632695656004253 522:0.221264012498601 574:0.0594823683401246 658:0.0734730638949579 716:0.152130404732097 790:0.120021919996203 829:0.0589331154292317 987:0.194568915166407 1305:0.072252865794998 1365:0.0960751146645203 1896:0.431906175983655 1917:0.0988530731467373 1931:0.103558861597247 2078:0.11027171173942 2677:0.284706740056597
+-1 6:0.0403583535212443 9:0.257277931962143 10:0.0567338431504702 19:0.489995439979307 26:0.0291136800389066 27:0.0391712820738802 34:0.214423932008148 42:0.0402432144014902 51:0.182734188544649 75:0.0136321762384359 77:0.101441844897368 83:0.0348570150726158 84:0.0394768807139731 127:0.0668965834040041 138:0.11280852611916 141:0.307217487383167 142:0.0802355678794171 145:0.11289028028163 173:0.050276178166076 199:0.0314416928523516 200:0.194942731010723 209:0.0422540168647355 210:0.105860699142287 218:0.114463975702522 225:0.12818564349546 243:0.126847665445592 275:0.0452322778421256 284:0.0816967663910474 286:0.113069015693251 307:0.0645950566740915 326:0.0784352069967176 334:0.183828206250397 355:0.0404829060124289 363:0.062836012507166 391:0.0696098867110585 423:0.0509625755852527 434:0.0582041843077404 459:0.0614434974766334 466:0.0621544829623979 494:0.113949129795376 502:0.0928586907176847 507:0.0359656716222017 530:0.0552949853595357 544:0.10910693633851 545:0.107091554792092 606:0.0866046443400586 655:0.050932195340314 677:0.100700682425741 794:0.078570416353337 808:0.0702039240242764 857:0.108410401047816 870:0.110584204121733 874:0.0919141031251986 997:0.0639693698183195 1061:0.0872448008121208 1171:0.111369684137022 1233:0.139534571083769 1292:0.0807272639877208 1304:0.0866046443400586 1370:0.110584204121733 1372:0.0939833393775651 1562:0.108410401047816 1782:0.0828249597594241 2212:0.113949129795376 2254:0.108410401047816 2410:0.0939833393775651 2594:0.114895798561295 3014:0.120531920646385
+-1 6:0.0360076329331002 11:0.0231151899377781 17:0.0280299497911979 18:0.0275354075315714 25:0.115817857587872 37:0.0486769266927791 38:0.0419091684285519 46:0.258434013423545 53:0.237692204149967 56:0.0949790032196016 59:0.287470613629766 65:0.0736015983071694 76:0.0427952787074719 78:0.118555089491135 83:0.0133282933063051 85:0.031523573244288 91:0.041102431445706 92:0.0339576524619312 94:0.0308800860879183 98:0.0333671536514874 100:0.0635732373223506 101:0.0499949418828505 106:0.0360062499959922 112:0.114545237743845 118:0.0336832711155359 142:0.00800340312061064 144:0.0305818450789016 145:0.0431659097570468 157:0.0521283879866799 160:0.279743058282143 177:0.161063445398263 179:0.0280406625467472 186:0.0583801018020265 199:0.0240447498737276 203:0.0389964394870524 204:0.0308800860879183 208:0.0385381506946984 214:0.0440705523614831 224:0.0489199962637008 246:0.0531698100313157 249:0.117406227051645 258:0.048779556749174 275:0.138363899429991 290:0.213965314394365 306:0.0403649623410232 307:0.0493984846204494 309:0.075711933897671 353:0.0577042749840983 365:0.054502313487673 372:0.0507778073086173 377:0.0395910537351602 382:0.0451808291024652 388:0.0534913285985912 389:0.0876777959247451 390:0.046988358264627 394:0.191684630887907 401:0.313835205176232 402:0.039207626291356 405:0.0489199962637008 409:0.0262703211922653 413:0.0444767402430353 419:0.0625765301938066 422:0.046906537428189 430:0.0400352389691162 434:0.0445111228538473 448:0.0465839164157063 465:0.0437407697240528 481:0.177837832175497 497:0.080507908130952 514:0.1092855060044 517:0.0573579004290219 530:0.0422863393038337 539:0.143370807313734 548:0.0582403161709773 561:0.0455835921058078 570:0.0596768826919353 599:0.0482313692149373 611:0.0665545927888703 625:0.0571878495194557 641:0.0407025731238474 668:0.074208987526443 687:0.0578807029658428 706:0.0523666055362266 716:0.0492532272001723 761:0.0523066731542053 762:0.0684862307879441 789:0.0528554528327125 792:0.0564470002076537 890:0.0540214962711289 987:0.0419953175551731 1039:0.0750823003627243 1162:0.0596768826919353 1169:0.115939501850634 1242:0.0652991831006027 1306:0.0736554242333303 1351:0.0682992869323056 1389:0.0656027228587388 1432:0.0611639467793135 1446:0.0536878151327544 1449:0.0659129343516996 1598:0.10764068488444 1652:0.0616192783552178 1859:0.080956010997475 1917:0.0640086757108886 1942:0.0667196713345455 2050:0.198690352409326 3472:0.0818972967090688 3527:0.0886286291781973 3621:0.0784588012940579 3955:0.0851689573829821 4763:0.0932216587575735 5021:0.0955794692561402 5516:0.0878655214565488 6600:0.113917620440939
+-1 6:0.0252175826385429 17:0.0687067244282502 27:0.0367137763277103 37:0.0596581908495809 72:0.0784674789779065 86:0.293850317345551 87:0.117463848576728 96:0.156242335040138 97:0.0786769421349434 122:0.407142924412506 140:0.178199441411089 142:0.00980892967686782 197:0.140595095171999 199:0.0589382434084553 208:0.0944643183266245 264:0.103796291758806 276:0.0979501057818504 313:0.428945964388192 436:0.111371764343759 485:0.0872566097602113 490:0.130485481996066 499:0.187832061380183 507:0.0674185553040079 585:0.156232074550589 671:0.0770023287627946 903:0.140386053897002 1013:0.156232074550589 1058:0.141444124916321 1697:0.17229529618847 1822:0.179237744870946 4088:0.430750123666318
+-1 6:0.0286851183590554 11:0.0644506919327904 17:0.0781542208282511 27:0.0835241850468745 37:0.0678614715032899 63:0.031001415609326 72:0.0892571248434298 86:0.334256112242095 96:0.0888631939381739 97:0.0894953901655896 122:0.308751322261275 123:0.145511448544007 136:0.181653337779656 138:0.120269744971211 142:0.0334731103440367 197:0.159927579241769 208:0.107453604524532 239:0.12159788121514 276:0.222837408161396 291:0.115441582060248 313:0.325285362319867 323:0.122693637446725 423:0.108666537531748 434:0.124107683058548 454:0.143106217272745 490:0.445283540715916 507:0.230066767248678 585:0.17771471652143 644:0.13666391346949 671:0.0875905096116413 918:0.165835244646348 1307:0.235796610151902
+-1 6:0.00911167043586856 11:0.163779268930893 27:0.106123996149575 37:0.0862232961204942 38:0.1484706157554 74:0.0746959286242785 75:0.166197128079514 100:0.0563048495396961 128:0.0979419253253988 142:0.0496185658060174 146:0.0818194220919782 173:0.068104854572398 174:0.0667907561987761 184:0.107369115772485 211:0.18123820267604 219:0.152371553083153 234:0.0653638440747006 257:0.110409386898791 303:0.651285449299839 317:0.0543075292299123 352:0.5162655266842 377:0.0701291429402322 419:0.110844193741879 483:0.0884681772336077 499:0.0678678787383147 530:0.0749034050292048 609:0.0645245788076298 611:0.117890687685197 669:0.137660932552863 698:0.102369550827619 862:0.0876744355416452
+-1 27:0.116699503675416 97:0.250084873206502 140:0.283215027817971 142:0.0311789562223147 153:0.347612666811032 313:0.45448680899194 358:0.530711230087997 501:0.416773656784559 671:0.244761897230575
+-1 6:0.0263388505401749 11:0.0355074109323186 18:0.0845946784814821 25:0.0395352558088729 33:0.0291501256545133 37:0.0498486534512694 46:0.110272878500856 57:0.0196639733694532 58:0.0883415316461481 59:0.0327100514666992 65:0.0188433248396611 72:0.0163912872275438 74:0.107960714439893 78:0.0404696295380847 79:0.0178617385744038 86:0.0409221333156547 91:0.147321400532446 92:0.0695501283504226 94:0.0790585403869772 96:0.0326378905516529 106:0.0184364872648815 112:0.0586512568554704 113:0.0281991687473421 114:0.0369892255687305 118:0.0344940780575734 119:0.220463515781399 132:0.0479237241078391 136:0.0333590404195902 140:0.0186122854079424 142:0.000683004754847075 144:0.0156589980183025 148:0.0231527065675825 151:0.020800911216586 157:0.133457991510113 158:0.0945241537409555 159:0.0158453372708413 162:0.0142651329187153 168:0.0195617845408728 183:0.0695137826393371 185:0.0460132486420098 199:0.0123117715642029 208:0.0197329109411276 220:0.0211294632764816 226:0.0204228626888714 240:0.0711333611046759 242:0.0184558105401125 249:0.0300580928324439 251:0.0297746486358138 252:0.0380170366642862 256:0.0179243870217298 275:0.0708472631847057 284:0.0159951935486419 287:0.048896247728475 288:0.0547124908684501 291:0.0423996657492799 292:0.0519452522183739 294:0.0755107512298229 295:0.0894541365423656 306:0.0206683038147691 308:0.058383061634788 325:0.070953933582169 341:0.044013955877776 342:0.0246049929826143 347:0.0216370771299242 353:0.0590933035787934 355:0.0158520819289425 358:0.0348772060568292 367:0.0449615499115009 390:0.0962388772882387 394:0.0736120379787904 400:0.0232085130273701 411:0.0394658218822553 414:0.0194610205449293 416:0.0256252405369254 419:0.0320414206457768 424:0.0542556735737318 432:0.0247422167375942 439:0.0283878713904148 441:0.0371456958520084 455:0.0384624568365137 459:0.0240597193220597 466:0.0243381232530217 473:0.0231898629508756 499:0.117710265783781 501:0.0273894726220945 509:0.0244481238642375 515:0.0380588711399796 538:0.0230789620437129 550:0.0214589925388169 561:0.0466808576533142 564:0.0326357472098062 580:0.0238322444431146 594:0.0252194131888593 599:0.0246961853677616 612:0.0306606834346876 616:0.0363274332324594 626:0.0248585944638961 628:0.0286210174359317 639:0.030303095977636 644:0.0250971276886642 653:0.0269064264529342 671:0.0160852279744594 676:0.0263375568687595 681:0.0576424427835439 706:0.0268135742039556 712:0.0241868821447657 748:0.0389214937476981 780:0.0267218998165651 807:0.0342483834815709 808:0.027490080752217 812:0.0295019030357057 819:0.0264536541547288 863:0.027835931461856 867:0.0231527065675825 912:0.0500975740719548 969:0.029457429660704 986:0.0235527162046571 1000:0.0319783032085009 1018:0.0285816336837991 1023:0.037178639527149 1028:0.0320414206457768 1042:0.0300100733824786 1044:0.0384448220686534 1104:0.0389214937476981 1162:0.0611133949178355 1206:0.0405753090518508 1225:0.0234941984709188 1249:0.0397932602287469 1268:0.0713399784623083 1280:0.0346918907588529 1288:0.0346009851497867 1297:0.0389214937476981 1318:0.0348772060568292 1335:0.0283117980497585 1360:0.155685974990793 1372:0.0368014982746388 1375:0.033060981656542 1394:0.0341628570321359 1400:0.0401737112594834 1424:0.0244925972392392 1464:0.0336699227869894 1491:0.0302534263619755 1529:0.0390876367114593 1539:0.0433019769689064 1551:0.0563983374946843 1625:0.0355660032553843 1690:0.0688450681845596 1704:0.0399809824878215 1707:0.0301064334851307 1816:0.0289440611871531 1851:0.0356699892311541 1903:0.575470935968553 1975:0.112324394633251 1988:0.0414523719058965 2026:0.0317312056130317 2030:0.0405753090518508 2045:0.044266995074504 2050:0.0678243759024632 2066:0.035262732158442 2151:0.0401737112594834 2152:0.0424507706742169 2210:0.0405753090518508 2339:0.0824458544360359 2387:0.0357754933039006 2426:0.0401737112594834 2441:0.0424507706742169 2479:0.0446195967427198 2569:0.0396102909462533 2587:0.0860139209419102 2644:0.0430069604709551 2726:0.0439307995441647 2771:0.0379976546744886 2960:0.0414523719058965 2986:0.0466986464936083 3000:0.0885339901490081 3001:0.0471972511200821 3152:0.048311282765373 3160:0.0439307995441647 3185:0.0414523719058965 3458:0.0453810267197949 3465:0.190931288283166 3471:0.0457941048968337 3519:0.044990288284288 3523:0.0414523719058965 3751:0.0424507706742169 4427:0.151170997548784 4757:0.0512415388109511 4782:0.337505067644506 5104:0.0457941048968337 5181:0.0489401053406312 5577:0.048311282765373 5934:0.0512415388109511 6278:0.0496289025391864 6338:0.0546382083356529 6601:0.0583298943583061
+-1 6:0.0142787710287321 11:0.0641640491932048 17:0.0155613264016152 18:0.0764338622423845 25:0.0642983486765512 33:0.0316056290341667 37:0.0270238637648825 40:0.0178433010724402 46:0.191299000586678 48:0.0174704734466034 53:0.043986355064854 56:0.0263646435582344 58:0.0383132438001817 65:0.0204306198097097 68:0.0175313924640693 74:0.0936439542331114 77:0.0215340530469245 79:0.0193663481927552 83:0.0147988793459064 85:0.0350017475060646 91:0.114093738374711 92:0.0377043924608571 94:0.102861782308644 96:0.0176935954489369 98:0.0555731108615858 106:0.0199895116780316 114:0.0200525334854844 118:0.0373997370674955 119:0.239034581803808 132:0.0173202163178737 134:0.0204527857909788 142:0.00148107731445928 144:0.0339561131419407 157:0.173640024251237 162:0.0154667772103476 168:0.0212096000124581 177:0.0298057478266593 179:0.0467018213366015 183:0.0753693775766081 203:0.0649487060675456 208:0.0427902829896011 218:0.0161989254515482 220:0.0458186689088339 226:0.0221432123350128 227:0.0202989247911622 240:0.0257084611992598 242:0.0200104626775544 249:0.0325900801525251 252:0.0618291858514017 275:0.0576113893514664 287:0.0795226417812861 288:0.0889819160859635 290:0.0296966648238565 292:0.0281604681770206 294:0.0818715095689996 295:0.0969894362939721 299:0.0236409827805254 306:0.0224093285523763 308:0.0211003480142495 322:0.0247494597941942 325:0.0512872278240241 330:0.0284015847136314 347:0.023459707901676 352:0.0404516235383835 353:0.0320355571267591 355:0.0515622155598976 364:0.0264596225290536 366:0.0360058388653868 377:0.0439593587820254 382:0.0250829428520717 384:0.0309467794570965 390:0.052172849789514 391:0.0295535436001366 394:0.133021425726766 399:0.0538543903523734 400:0.025163515995483 406:0.0267765045867525 411:0.0213951414948006 414:0.0211003480142495 424:0.0294129897121851 434:0.0247111434872645 438:0.063686522233275 441:0.0201373588784649 442:0.0243015853740174 455:0.0417023980248018 459:0.026086424894757 462:0.0350919106767272 466:0.0263882805871793 483:0.0277274481103982 499:0.0638128809111898 502:0.0394240458423376 514:0.0303358986114591 526:0.0685470650421797 538:0.0500461041912707 561:0.0506130878293129 564:0.0353848670084986 568:0.0401717484603236 572:0.0309467794570965 594:0.0546876145340421 599:0.0267765045867525 647:0.0257957676083786 651:0.036948968857569 656:0.0281902050975435 671:0.0174401906295745 676:0.028556139411749 796:0.0251030085971046 803:0.0356892030923339 807:0.0742666921005754 812:0.0319870388964894 829:0.0211851898084384 841:0.0439932294302446 856:0.0214327828921837 858:0.0286503570096722 890:0.0599819937203496 909:0.0251432949025748 990:0.0769016226839627 1007:0.032964551982963 1023:0.0403104364906277 1032:0.0377140316017058 1042:0.0325380157141067 1068:0.0673026545665051 1090:0.0501266726392554 1098:0.0640711142535182 1099:0.080903247076767 1111:0.106379550181919 1192:0.0355355575979327 1196:0.0358459216994926 1206:0.0439932294302446 1239:0.0382331398684156 1245:0.0279265502345343 1254:0.0392641286764434 1296:0.0290722547619314 1297:0.0422001025801726 1304:0.0367688305987666 1333:0.0405954013182354 1339:0.0344702542128617 1360:0.0422001025801726 1361:0.0429469216160603 1371:0.0427534384732717 1372:0.0399015261942677 1432:0.0339562556099477 1437:0.0390230121398326 1464:0.0365061578748241 1476:0.0367688305987666 1544:0.0374183108778954 1546:0.0429469216160603 1558:0.0344041300301246 1572:0.0442203661787523 1680:0.0472830652567928 1699:0.0487801108820696 1705:0.0427534384732717 1707:0.032642492850645 1738:0.0385619574488386 1757:0.0463223940234518 1800:0.0452011031571263 1824:0.0404516235383835 1842:0.0437724917585754 1851:0.0386747028350468 1893:0.0492037637399814 1903:0.527954790144097 1975:0.0811908026364708 1987:0.0449441729538902 2030:0.0879864588604891 2050:0.147075322395067 2152:0.0460266732996414 2211:0.0439932294302446 2308:0.0425646180316937 2373:0.0457417084720337 2475:0.0460266732996414 2480:0.0476313745615786 2587:0.0932594291113543 2644:0.0466297145556771 2672:0.0449441729538902 2771:0.0411984425742711 2919:0.0592407375602783 2986:0.0506323751385323 3000:0.0479958900130997 3069:0.0487801108820696 3152:0.104761708360643 3185:0.0449441729538902 3465:0.0517536660048578 3471:0.0496516381601583 3595:0.0472830652567928 4111:0.0483781935974663 4240:0.0632433981431334 4307:0.0538094655788723 4427:0.0546350357213874 4492:0.0884407323575045 4532:0.0555579446206614 4757:0.0555579446206614 4782:0.365935299612405 4986:0.0592407375602783 5833:0.0555579446206614 5919:0.0592407375602783 6601:0.0632433981431334 7942:0.0632433981431334 8212:0.0632433981431334
+-1 6:0.0278556558010816 11:0.125174054933234 37:0.131798360996046 38:0.226947758820188 50:0.264405151461163 75:0.112908434359493 100:0.172131830244358 128:0.299422216767158 142:0.0144467544872563 173:0.208206102350166 211:0.554070631426343 303:0.248883882374249 937:0.377241573597052 941:0.397405145330381
+-1 6:0.0141610605912077 11:0.0636350976266678 18:0.0379018807800905 20:0.119822658632713 25:0.318841449901761 27:0.0412336121634529 36:0.0540990390821128 46:0.0592881193367042 51:0.144266225035258 52:0.0577264925254368 53:0.109059357770772 63:0.0612182134808294 65:0.0506554878671019 68:0.0434671706746271 72:0.0881276163677242 74:0.058044986295869 76:0.0589067566790714 79:0.144050228291453 83:0.0183461015900507 86:0.330026252581075 94:0.0850115139963876 100:0.0437535790787445 106:0.148685425460454 125:0.0759066971610147 132:0.0429435825108285 142:0.0348856079257653 146:0.0635805367378639 179:0.0385973531578564 185:0.041231639995319 203:0.0536777383298792 228:0.0535499241525006 286:0.0396739966455144 288:0.0735403104533953 291:0.0569903605708487 292:0.0698208016868408 295:0.0601186755368458 317:0.0844029881673679 323:0.060570502526452 328:0.143670067088678 345:0.0519606113298619 348:0.0703428822174069 363:0.0661442677503281 410:0.540544014825511 438:0.0789518840919449 502:0.0488738054557089 507:0.0757184588480369 558:0.0786018262448899 631:0.0475200859145477 647:0.0639577851910197 678:0.0766244241328061 723:0.145337935573792 762:0.094269785236561 804:0.0667002648816713 867:0.0622401649711115 909:0.0623400504604879 1149:0.0679290471119476 1266:0.0964611405535794 1351:0.0940124611449943 1659:0.099601457796454 1782:0.0871856137292723 2050:0.0911642950449392 2287:0.137749848798788 3883:0.151216093803567 5706:0.329364677616693
+-1 6:0.0262881252570087 11:0.177195140827636 17:0.0716234780969069 25:0.0986477898101763 27:0.0382723580049073 53:0.101227095211605 63:0.0852326024750681 74:0.107752795806449 76:0.109352557888569 79:0.0891366956647669 80:0.171164588484001 86:0.102108306201998 94:0.0789062836724435 100:0.0812226993773763 112:0.146345754947223 122:0.42442704948658 142:0.0102253406156614 146:0.236057617705634 173:0.098244825699674 174:0.192698339708594 197:0.146563670490508 208:0.0984745392959573 232:0.116667707219319 255:0.122338621618129 264:0.108202675810729 265:0.124170884202546 276:0.102108306201998 281:0.151724589921913 320:0.124763096403918 387:0.0927836644686492 398:0.102235969743047 485:0.0909608474276381 490:0.408074645072157 586:0.0966217706433701 612:0.153008174249506 927:0.168826869433526 1045:0.0682807768642055 1117:0.156866114401149 1956:0.195910419755721 2024:0.128009881703043 3215:0.266089499379071
+-1 6:0.0108830248999526 11:0.195618780817003 27:0.0950662752269693 37:0.10298553763988 38:0.17733404863027 67:0.0615611167588176 74:0.0892171920466978 75:0.110281491066288 100:0.0672507948834943 128:0.11698232717786 142:0.0451540297399013 146:0.195451056794472 173:0.0813447801186198 174:0.0797752144257238 184:0.128242210762802 216:0.0946861915785815 219:0.0909966738766451 234:0.0780709034230752 257:0.131873525855142 303:0.583423957077469 324:0.115310280219025 352:0.462472602151 434:0.282515900006782 499:0.0810617349930122 530:0.089465002906063 669:0.164422908759506 690:0.13600837394611 698:0.122270705299904 714:0.112625922159171 858:0.109183958514839 862:0.104718785847752
+-1 6:0.0254148623102669 25:0.0953708174594671 46:0.425617666098414 76:0.211439969556026 98:0.0824290688754172 118:0.0832099945872395 132:0.077070868357129 179:0.0692706884297012 186:0.0721100978923114 216:0.110559175586545 224:0.120850276398268 254:0.122638713307116 287:0.117952319294686 394:0.118382780015114 396:0.129069177651201 481:0.292882976477587 483:0.123380589709515 502:0.0877138423520921 625:0.14127489674763 631:0.0852843212351011 1003:0.134297122097645 1126:0.135514543165656 1248:0.16361260452612 1283:0.157454293699104 1658:0.370961465431911 2050:0.327225209052239 2228:0.201134224139272 2280:0.17260229997768 2577:0.182632874978368 2705:0.186230586895643 3820:0.203539789999058
+-1 18:0.185850130204466 76:0.288846573663412 94:0.208425025617815 111:0.217124950221786 353:0.389474788301308 423:0.263049252831808 481:0.400105261164806 848:0.383734331411988 988:0.513051043678507
+-1 6:0.0175079729524097 17:0.0477014585490015 46:0.219901916892597 58:0.0587224239066941 59:0.108715202942774 76:0.0728291427050106 85:0.0536469181582701 91:0.0699482497997983 92:0.11557848397166 96:0.0542376843790553 98:0.0567843292143324 101:0.170163105224928 118:0.0573222989295924 142:0.00227003618779607 144:0.0520442821428565 157:0.0887122580417082 162:0.0474116288640701 166:0.0653172522567014 177:0.0913660961656716 179:0.04771968955079 186:0.0993514446847262 208:0.0655843485847273 220:0.0702259331665425 224:0.0832522067065215 254:0.337936951896361 275:0.176601096215944 286:0.0490507935976866 287:0.162511682390749 293:0.0828551837217799 308:0.0646806930331307 342:0.0817772117611519 402:0.0667236643045705 409:0.0447069169497874 410:0.111383253278688 454:0.0873449344001729 468:0.351597895236379 475:0.0709345197641623 481:0.201763329180791 507:0.046807113103261 580:0.0792089029224768 625:0.0973224659223431 742:0.0898439996282797 883:0.102078605502997 932:0.11890351254479 1012:0.233744999158183 1029:0.134856191300357 1215:0.102610420815419 1248:0.112710626551749 2228:0.277117578922449 3546:0.126774349002337 4446:0.193865372215928 4597:0.387730744431856
+-1 6:0.0132094603988333 11:0.0395726151847348 17:0.119966396525437 25:0.0330462026787181 27:0.0128209268758716 34:0.0350909315085512 40:0.0550234980369522 46:0.110608108687248 50:0.0417946167726813 51:0.0299048377410003 58:0.0295366968038873 59:0.0820237255293475 63:0.0190348164356282 74:0.036096305211403 76:0.0366322124233655 79:0.0298600639377451 82:0.0330268258489819 83:0.0342265469264658 85:0.0269837763955644 91:0.105549470313862 92:0.0581346342846504 100:0.0272089399154535 101:0.128385096659737 118:0.0288324502114456 132:0.0267052291696769 142:0.0148434236868556 144:0.0523553382085197 157:0.0446212348579066 162:0.0476949966834333 166:0.0328538188245544 177:0.0459560845936507 189:0.0329496278179445 190:0.0377524255593048 208:0.0329881651735891 220:0.0706456565555279 224:0.041874892488298 242:0.0308531938509275 254:0.297462129287989 275:0.0888282990915476 286:0.0246719791537721 287:0.0817414876724462 289:0.0383090029188198 293:0.0416751945408305 306:0.0345518926292059 317:0.0262437483068247 342:0.0411329871718916 347:0.0361714232819032 369:0.0393738609961769 372:0.0434651550334973 384:0.0954307754935323 390:0.0402214350125143 394:0.0410198994436869 402:0.0335612277405292 409:0.0224870596806531 410:0.0560244819994253 418:0.0454583800911025 468:0.530548966012523 473:0.0387672671132353 481:0.101484609859175 489:0.0501688402976273 501:0.0457878946279538 507:0.0470868678783772 580:0.0796823153454004 609:0.031181068810227 625:0.048952069361483 631:0.0295512090587863 653:0.0449803702407881 654:0.0460126722884426 671:0.026890211933728 676:0.0440293719891378 722:0.113111240619772 742:0.045190487723831 761:0.044773844686046 824:0.0492449673611691 883:0.0513443522988145 932:0.0598070850163308 973:0.120335504240774 1021:0.0471414906381813 1056:0.0432376256957199 1206:0.135662194084315 1215:0.0516118492206659 1248:0.0566921353301916 1306:0.126096206317141 1318:0.0583053882738618 1489:0.0516118492206659 1815:0.28627082304004 1977:0.0818148059050297 2228:0.139386921777366 2371:0.0729035405998007 2706:0.0685419756453333 2751:0.0752117650334195 2916:0.165932582296759 3037:0.0829662911483793 3192:0.0891378057641218 3193:0.0891378057641218 3527:0.0758649755044254 3546:0.0637660242864286 3692:0.0789012183926504 4446:0.0975120292890678 4597:0.390048117156271
+-1 6:0.0141262354011658 47:0.0668605874775615 63:0.183202992932453 76:0.470095135153599 86:0.109738214933313 120:0.353074726382486 122:0.152047267300437 140:0.199645405652946 142:0.0586102172218559 227:0.100410388755978 234:0.101336528205577 246:0.146014173687333 264:0.116287978286384 276:0.109738214933313 304:0.106963756164637 317:0.0841954224921772 345:0.103665657315222 357:0.523067292198653 408:0.0831813505261115 457:0.0974074599272805 458:0.148725755695372 586:0.103841705229383 882:0.106081380788425 1045:0.293531872030649 1269:0.144306416598762
+-1 63:0.07738531828281 111:0.223895588394305 122:0.770700913936318 313:0.405986481602626 490:0.37050360278851 671:0.218642256542999
+-1 6:0.0486570114377339 13:0.0404230102656485 17:0.0662843842780754 25:0.273882594717622 37:0.08633230183469 46:0.0509280834247482 48:0.0372082541541695 51:0.123923687007906 53:0.0468406160706202 56:0.33690524570973 59:0.302134169810563 72:0.0757010114102425 77:0.137588346621787 81:0.0740629745017378 83:0.0157591740596598 87:0.0566612579964597 91:0.0485988983391966 92:0.0401510188518925 111:0.0380362139571216 118:0.0796531889281475 140:0.0429792001835497 142:0.012617471714618 148:0.106927740312266 158:0.087309482672763 160:0.165381997759771 162:0.0329408232208164 164:0.0710448020103094 166:0.0453813570933442 177:0.0634796672098797 178:0.0981709412164933 190:0.052147858810442 242:0.0852357417015189 249:0.0694096807923466 258:0.0576762161288597 275:0.0408998497515616 277:0.0550801239366839 280:0.0637152698987696 293:0.0575664246367154 306:0.0477269259330356 319:0.220698700647697 364:0.0563531585388045 369:0.0543875661929366 430:0.0473370659644707 431:0.135638242014075 448:0.0550801239366839 458:0.0640346719282169 507:0.0325208155710455 517:0.135638242014075 526:0.0729950629388261 534:0.0927170182996015 549:0.0649459191830828 585:0.0753619602174934 597:0.108775132385873 631:0.0408194243110195 661:0.081201098554269 663:0.0569224252454788 671:0.0371437584348085 676:0.0608182769712418 716:0.0582362769643058 721:0.0805379021492821 730:0.116931344564572 839:0.0968341350383752 872:0.0694096807923466 927:0.078120927573884 928:0.0980266598520226 991:0.19382631426335 1001:0.0712920398154854 1042:0.0692987950248264 1045:0.0315954305259295 1117:0.0725863507571224 1153:0.084981447830437 1159:0.0618466256537817 1236:0.06702899727034 1254:0.0836239317383329 1273:0.081658339392465 1289:0.0823685847336423 1306:0.0870890686643302 1382:0.0796927470465971 1472:0.0618466256537817 1545:0.15550012477341 1593:0.0923234633585517 1602:0.0838867442031676 1747:0.0914674682122163 1851:0.0823685847336423 2232:0.105747035275292 2699:0.0927685096425967 2783:0.102220657008593 3625:0.120554569814019 4003:0.111559663286218 4889:0.123127074374546 4901:0.241109139628037 5126:0.126169701477199 6089:0.134694485462873
+-1 6:0.0198764063904085 17:0.151632288827194 25:0.0596699396587028 37:0.094044735598918 46:0.1997197449673 63:0.00859256326037638 65:0.0284399337540031 67:0.0224866484418496 76:0.0330725125382514 79:0.0269584410452961 83:0.0206004101760555 94:0.190914898123404 97:0.0248051511969847 132:0.0241101743007929 140:0.0561824591484356 142:0.00824678665651845 168:0.0295242936788703 169:0.0289767326842561 175:0.0384806429416397 176:0.020605625802315 185:0.0231490241119035 199:0.0557458894318964 216:0.0345863625357351 218:0.0225493093708846 239:0.033702896017255 286:0.0222745033927066 323:0.170033016345473 355:0.0239252978844397 367:0.0339298799930732 381:0.114639589518557 385:0.0415927645290117 400:0.035028243616438 411:0.0297825720627659 419:0.0483596121334197 465:0.0338031950912129 471:0.0414394957668253 483:0.0385973012454823 504:0.0422283295814662 505:0.0285950920948495 537:0.0889192703774137 541:0.0409922029036075 593:0.382889429733374 644:0.0378787000147159 658:0.0367661494518363 671:0.0242771815432913 685:0.0420123334651591 812:0.0445267581539812 827:0.0339553945016312 837:0.0431378100980109 856:0.0298349698293514 885:0.0557303790506325 909:0.0700001906987425 927:0.153179647479952 984:0.0455865666328225 1005:0.0838118369995526 1037:0.0889192703774137 1046:0.0893245122757502 1054:0.0519533892006587 1076:0.054487538031266 1132:0.0615558556918468 1162:0.0461187427838434 1175:0.0421197968707249 1190:0.0430198905988804 1331:0.044938408797632 1340:0.0533719368607774 1489:0.046596517588003 1499:0.0606335504266936 1579:0.0498984195281367 1598:0.0415927645290117 1627:0.106146167980098 1658:0.0580241651683274 1928:0.0573492624547558 1939:0.108975076062532 1973:0.188763198283234 2137:0.0561131357768971 2185:0.0993605266147393 2319:0.0649097288914006 2540:0.0640702803806688 2549:0.128963862048639 2679:0.114266532676897 2722:0.0548284235067457 2736:0.0519533892006587 2804:0.0519533892006587 3082:0.0749041218844543 3289:0.0684928697340669 3339:0.0629210660944114 3593:0.205478609202201 3653:0.0603426679234626 4771:0.0679031343601073 6125:0.0720423974609645 6243:0.0880363919607546 6523:0.0738645311082225 6869:0.462294906570764 6870:0.369835925256611
+-1 6:0.041439363194118 11:0.046553679815513 17:0.0564519396698395 25:0.311007464417877 37:0.0490173359111202 46:0.0867471011251555 53:0.0797848139140486 59:0.0643291029708806 79:0.0702554455569447 81:0.0630766750551818 87:0.193025126679278 92:0.0683902526544051 94:0.0621920756127088 97:0.129287665152702 111:0.06478805163426 151:0.0818160717907874 178:0.167217063603861 216:0.0901343036141948 229:0.0542531016425091 242:0.0725921044700678 255:0.096424422136185 293:0.294163070170522 309:0.0762414052917848 337:0.158405402214471 382:0.09099357857311 399:0.0976839864631531 419:0.126028285229322 505:0.0745206643251375 582:0.174760424540577 852:0.102811429015182 913:0.108126533349392 921:0.140300507479004 984:0.118801548829142 1011:0.124334349156253 1075:0.289502127430412 1102:0.124100392976806 1469:0.234590417701628 1516:0.165937536455158 1665:0.223315613386577 1697:0.141564071737779 1781:0.131511671349572 1973:0.163976378528467 2066:0.277397292433415 2399:0.150616283156251 2487:0.185640602267915 2631:0.150030169291604 3369:0.16915896273763
+-1 6:0.0444413761154731 11:0.142646262240286 17:0.0345951521857286 18:0.101954333255699 25:0.23824138340862 37:0.0300390421569549 38:0.155175525168265 41:0.0292337581990487 53:0.293364705865851 74:0.104092246520568 77:0.143620246071681 78:0.048774393031871 83:0.0164500592666936 94:0.0381128502076519 96:0.0393355046652805 113:0.067971827533562 132:0.0385054271044907 138:0.0532376893598789 139:0.0519384821605922 142:0.0016463280111916 148:0.223230945826403 157:0.128675900529954 161:0.0619572725124378 166:0.0947417689483421 190:0.0544340309216344 216:0.0552365422503577 246:0.0656232952046623 283:0.0475924437411749 287:0.058930235628869 290:0.0660201201668292 307:0.0609686462487161 324:0.134535797860932 363:0.0593083560179907 375:0.0450069876540287 382:0.111526254618409 388:0.0660201201668292 426:0.228614991986024 442:0.0540260529643118 483:0.0616422573721962 502:0.0876455406494939 505:0.0456681158944676 516:0.0890048334478109 517:0.0707923242523608 532:0.0734073664288149 564:0.0786658429774799 591:0.0667580128943441 613:0.117435591295907 671:0.0387721479137937 762:0.0845271430874937 798:0.397458198062067 861:0.0847609702565332 1142:0.105117314305334 1167:0.0811586400028654 1339:0.0766325221641083 1376:0.0909070701031591 1379:0.0670110904090977 1442:0.095477419525237 1468:0.0890048334478109 1534:0.215103896259289 1718:0.0902496387775343 1932:0.0819416870003476 2065:0.119626476734052 2076:0.079170801885146 2311:0.0942176035418156 2784:0.105117314305334 2825:0.0857289894249432 2882:0.101690648019631 2952:0.0993645495155168 3924:0.328161941488215 4506:0.116450460276868 5902:0.125839705228446
+-1 6:0.0198050682547876 11:0.0177994782774777 21:0.0479237778769398 37:0.018741440187486 46:0.165835777991157 58:0.0265707884452398 72:0.0739509634629283 79:0.107446739507681 83:0.0205264735284483 84:0.0232470033728643 94:0.0237787110124597 98:0.0256938371780474 111:0.0247712645332032 132:0.0480472816144928 142:0.00102714852855541 155:0.0411401634397939 162:0.0214528671771641 197:0.0441675238436842 199:0.0185152708767201 215:0.025234295893792 284:0.0240546488159151 299:0.0327907266414188 326:0.184754569117575 355:0.0953577117131418 382:0.0347907669516239 411:0.0296756798447654 426:0.0713167579692062 441:0.0279310989900063 442:0.0337070015384021 485:0.0274114000021725 557:0.0372786799419251 558:0.131915079979041 572:0.0429240778621885 574:0.0296583321959649 609:0.0280500418971687 628:0.0430422127173307 634:0.0445019594512953 713:0.079216381998828 819:0.0795655718268821 837:0.0429829847796554 851:0.0449881625513913 856:0.0297278895512506 874:0.2165041843956 902:0.109263279138577 969:0.0443000657261769 985:0.0507551893951974 1003:0.0418615475794403 1018:0.0429829847796554 1184:0.104344001393488 1196:0.0497193297998606 1228:0.0487736640803832 1252:0.120252185775077 1393:0.0453492688464139 1438:0.0548055360738005 1453:0.0557193765884988 1467:0.0486734947107844 1468:0.0555303579169917 1576:0.087814385684558 1579:0.0497193297998606 1743:0.0587826193711834 1781:0.0502825801676253 2002:0.061334926420461 2197:0.204741128764212 2435:0.174865561998564 2663:0.128500999632753 2917:0.151560748384789 2961:0.0676594241585289 2976:0.0534865499121517 3031:0.194030286840125 3376:0.0578159114386159 3932:0.0785117347093488 3979:0.139054288496985 4590:0.0695271442484924 4916:0.0726537592204435 5089:0.350881687049698 5090:0.0877204217624246 6136:0.0921271380614641 6170:0.0877204217624246 6278:0.0746352845352576 6339:0.0785117347093488 8651:0.597962815994728
+-1 6:0.00836554578039347 11:0.187959905618305 27:0.0487169259707175 37:0.0791627546353041 38:0.13631284646289 74:0.0685793252635174 75:0.169541992364477 76:0.13919498941463 100:0.0516942310191879 128:0.0899217839249473 141:0.0764166542291222 142:0.0303703100128011 146:0.450716996001975 174:0.0613214813486282 184:0.0985770128229483 211:0.0831986018542888 219:0.0699471744461345 234:0.0600114143545935 257:0.20273665233788 265:0.0790286265173202 303:0.672698059663239 317:0.0498604646854286 352:0.236995122283741 377:0.0643864986047805 419:0.101767528112983 483:0.0812238098342898 609:0.0592408737536148 611:0.108237007895971 628:0.0909039030676456 698:0.0939868457704077 837:0.0907788153835924 862:0.0804950650329217 1150:0.0912833089490406
+-1 6:0.0114364661762405 11:0.205566705104277 27:0.0999007400175238 37:0.108222725638123 38:0.186352127988305 74:0.0937542097496859 75:0.16224558665033 128:0.122931302674252 142:0.0444846336314423 146:0.10269522585353 173:0.0854814571309459 174:0.0838320733315694 184:0.134763792166044 211:0.113740097896197 234:0.0820410919348743 257:0.277159545594805 303:0.613093180697759 352:0.485991010822815 431:0.127523012298754 499:0.0851840181344243 530:0.0940146226897728 609:0.0809876924613854 669:0.172784409841363 698:0.128488613998624 862:0.110044115801849
+-1 46:0.215383874933827 186:0.145965297430228 653:0.262766804895275 1248:0.33118471865971 2050:0.33118471865971 2705:0.376968050264244 2795:0.447222920807749 4409:0.549342913894829
+-1 11:0.177590479747343 18:0.211550337537066 27:0.115073241637563 37:0.186988702824127 38:0.321981750834539 59:0.24539921019322 112:0.440016798011614 142:0.030744462918682 400:0.348232455242321 456:0.42826578742501 883:0.46083727923953
+-1 4:0.0302610456931852 6:0.0209878471088959 11:0.125749875031949 13:0.046496455307231 20:0.078927535856906 25:0.105010898009396 27:0.122223154439629 40:0.218560170008568 46:0.117159773073805 56:0.0645873872206651 74:0.0573516034795697 82:0.104949324269413 84:0.0410588968315991 94:0.0839959995350314 132:0.0424305951869697 139:0.0572329896562742 142:0.0399113324561265 192:0.0564983248114523 215:0.0445688562565728 218:0.0793673745967303 294:0.0668555329816804 296:0.063086532060435 309:0.051485442320004 400:0.123289795126098 412:0.071302277290053 471:0.0729278207489558 477:0.0748020506657959 526:0.167924736890161 564:0.0866848854672202 614:0.0846076597728082 626:0.0660277333356541 655:0.0529732774237303 666:0.274292487262326 698:0.0785994363491851 701:0.402186805532354 705:0.0799666917906776 784:0.0686980883438346 1234:0.239000379675013 1266:0.0953088533093452 1306:0.100173959393136 1342:0.100173959393136 1439:0.0824381069644287 1627:0.0934013381243679 1660:0.0984116575445874 2106:0.0950244687104972 2367:0.361614129282898 2671:0.11423220736303 4383:0.141626575387219 5216:0.435379046288884 5997:0.145126348762961
+-1 6:0.0144771051621318 11:0.0650552968409568 37:0.136996145124846 38:0.235897987411404 47:0.0685212817588107 51:0.0983239589872691 75:0.117361248974836 76:0.120442858881984 100:0.0894601306820075 126:0.137548050869695 128:0.155615324621022 141:0.132243844986911 142:0.0150164968620403 146:0.129999036539726 255:0.134745941237 257:0.175424288693331 292:0.142758105159486 303:0.388048821828679 307:0.139026894830944 357:0.134014830933061 377:0.111424901111355 385:0.15147175355623 391:0.149820232340688 507:0.0774083328291226 549:0.154588845320762 616:0.199673129385221 746:0.2130386607543 796:0.254516929093478 902:0.199673129385221 918:0.167390926980445 1092:0.226581130226568 1612:0.422622643443302
+-1 51:0.228308843862661 56:0.31034602422032 111:0.21022625076292 135:0.306270133638799 160:0.30468890666416 607:0.329754650458347 798:0.526122792612744 2251:0.484959063783773
+-1 6:0.0310586845150552 18:0.0997537620938044 25:0.0932396829935185 26:0.0268861097990436 37:0.0293906827612267 46:0.0520133638892255 53:0.0956775847289298 65:0.0444399713280615 76:0.0516787950935354 78:0.0477216518749487 79:0.0842500096846087 94:0.149160906493139 96:0.115459474323053 98:0.0805871277622343 106:0.0434804883115438 111:0.0388467679221327 113:0.0665047310530574 118:0.122025904630166 132:0.0376743301833813 135:0.169782861461451 139:0.0508174476504794 142:0.00161079384772097 144:0.0369300762408368 145:0.104252724727365 157:0.0629492869934176 158:0.0445850264515517 160:0.0563020992986222 162:0.0336427941084148 166:0.0463484364922313 168:0.092268763768522 177:0.0648324226658396 179:0.067722781475299 186:0.0352493710718597 189:0.0464835987718201 199:0.0290359997487929 203:0.0470913863981209 218:0.0352353374159547 224:0.0590748918863078 227:0.0441535129189283 246:0.0642068891887091 249:0.141777610375691 252:0.0448295625563586 258:0.0589052996996585 277:0.0562538846295991 286:0.0348059281952216 287:0.0576582918777063 288:0.129033572693241 294:0.059361350295441 353:0.0696826260510735 416:0.0604343959691633 422:0.0566434758578963 426:0.0559201477598208 439:0.200849298314823 479:0.0786737379094559 480:0.0456882503931204 481:0.572676560994656 485:0.0429870785513528 493:0.0554544391657514 502:0.0428769044499821 516:0.0870837628714062 595:0.0883017004592368 597:0.0555465684394453 599:0.0582433184692453 613:0.0574504371780701 615:0.329907874047138 625:0.0690590001144188 666:0.0811818742773237 796:0.0546031883855639 882:0.046647221220131 885:0.0870837628714062 969:0.0694722051792439 988:0.0917921906516442 1123:0.0705512917006943 1126:0.0662431830950137 1168:0.0807711586412818 1184:0.0818171232390322 1190:0.0672224739089447 1269:0.063455936268331 1277:0.146655595910544 1304:0.159956554700213 1424:0.0577631775879912 1449:0.0795952528235411 1459:0.0947454120599547 1476:0.0799782773501066 1600:0.0925850719428194 1932:0.0801730666032359 2057:0.0983198623932491 2394:0.0956925376086613 3882:0.109033789263748 4071:0.0947454120599547 5554:0.123123594814065
+-1 6:0.03581727507186 11:0.0689789676992583 17:0.0836453001884666 18:0.164339033494331 25:0.268813008787692 33:0.0283144493382623 37:0.0726293870627636 46:0.128533888410739 48:0.0313024515211869 51:0.0347513859766968 53:0.157623747429581 56:0.236192218653197 74:0.0419462779098885 76:0.0425690372952394 77:0.0771666152741925 78:0.0786188909698184 81:0.0311537415763937 94:0.122867342011471 96:0.0317022269298329 106:0.0358158994457838 111:0.031998995129119 114:0.0359288177979164 118:0.0670104024392092 132:0.0310332306267361 136:0.0648054057212812 142:0.00530739489993671 158:0.0734514669078558 162:0.0277123596733454 168:0.152007895653867 177:0.267019946324957 215:0.0977913877157789 218:0.0290241749997332 224:0.0486613759351183 242:0.0717068761525115 284:0.0932198583477322 288:0.0531439922155195 290:0.0532085414760429 291:0.0411841513839706 295:0.0434448318893379 306:0.0401515690331499 308:0.0378062233296046 341:0.0427521630145991 353:0.0573992157098383 364:0.0474086208376702 382:0.044941976245545 388:0.0532085414760429 400:0.0450863419333582 414:0.0378062233296046 423:0.0387671327108441 426:0.046062739102849 438:0.0570546722976092 439:0.165444284357084 480:0.0752689698519024 481:0.0589658917138252 495:0.0563899593051309 500:0.052952106229406 501:0.0532085414760429 507:0.0273590168628763 517:0.0570546722976092 546:0.0442074918894144 559:0.0732660376537723 564:0.0634002900666963 591:0.0538032419355033 603:0.0547815089609472 620:0.0727361846049023 625:0.0568855203787516 634:0.0574866891356922 647:0.0462191690157121 661:0.204937870003016 782:0.0582994881391987 798:0.48049377136406 814:0.0568017025809439 876:0.049381505034955 882:0.0384244117194489 885:0.0717329408081808 986:0.0915100260848421 990:0.0688936485700494 991:0.0543538787623101 1080:0.0517358101768594 1142:0.0847187033881803 1170:0.0681241716533872 1185:0.0805280291543849 1198:0.0609524662480625 1305:0.139612070698645 1442:0.0769494848539612 1784:0.149370740926855 1792:0.0604018294212557 1824:0.0724785729839355 2024:0.049832006983585 2339:0.0800822952273433 2496:0.0938525881184204 2816:0.0938525881184204 3352:0.0927288333720413 3403:0.0995450909456122 3613:0.084121190259286 3960:0.190148358151173 3961:0.0866808827130956 4799:0.109276488804747
+-1 6:0.0531351368903988 12:0.0298496208086299 21:0.0267864567232335 25:0.0996964173795833 27:0.0257861291847849 29:0.0160813715249281 30:0.0532311517574299 34:0.0352883727461562 37:0.0209506344763661 41:0.0203889917394366 47:0.0209577331781517 51:0.150365495549837 53:0.102303140838316 56:0.327033034265683 65:0.0633565135589621 72:0.0551120792279141 77:0.0333891613801772 78:0.068035090791386 83:0.0229460831014722 84:0.0259873022277623 85:0.0271356022371069 111:0.0276912394971139 116:0.0474067350718287 118:0.0289946777274506 132:0.0268554877484923 135:0.363080235297183 139:0.0362243293017881 142:0.0126304886259369 145:0.111472098828357 160:0.160535869444126 166:0.0330386728130326 168:0.0657721754545519 169:0.0322761785080826 176:0.0229518926068439 186:0.0502537960650971 190:0.0759296837066645 212:0.0501334681043922 214:0.0758721715957431 216:0.0385245508288507 218:0.0251168943862359 227:0.0314740599096366 276:0.0343979063718349 286:0.0248107975290295 306:0.0347463009321215 308:0.0327166893984362 336:0.0404831128749049 347:0.0363749439714857 355:0.0266495603141894 364:0.0410263968773552 367:0.0377933176713627 368:0.0539731404285309 369:0.0395954003942541 404:0.0371843350502566 411:0.0331737750698839 429:0.0505318456880546 441:0.0312235473692972 454:0.0441806813639659 478:0.0347242311208568 483:0.0429921964806712 495:0.0487986532717685 496:0.0371304572335343 500:0.0916472188928684 502:0.0305640518768322 504:0.094073346261712 506:0.0247718570221028 508:0.103065153609077 509:0.0822014110713387 513:0.132540083525956 521:0.174654425612307 530:0.0364002289499363 535:0.167958453058657 543:0.0490111851244774 550:0.0721511178794534 572:0.0479838612470272 586:0.0325496205323061 607:0.0434356554806607 613:0.0409525399461984 615:0.0587922653599841 630:0.0612658761587688 638:0.0540811360530422 641:0.0350369174762132 681:0.0484524923130947 689:0.0553371239024622 692:0.185605351836827 700:0.054750080838428 706:0.0901547148431852 778:0.0423147009604007 792:0.0485897754433764 800:0.117144544063314 806:0.0475326370043129 856:0.0332321391265278 913:0.046214659268861 942:0.0572904265317907 950:0.0482494330833804 976:0.0648923951601987 985:0.0567380847021315 987:0.0361497164095969 1045:0.0230022008682104 1056:0.0434809047983673 1070:0.0685649347763523 1175:0.0469157823049639 1183:0.0631714224359263 1232:0.0501334681043922 1239:0.0592815701881879 1253:0.108380200522208 1265:0.056873833910593 1488:0.0616642537424312 1493:0.0591162693014038 1558:0.0533445815897853 1559:0.0643753201993095 1581:0.0631714224359263 1587:0.0713656653137067 1606:0.0700855953399295 1916:0.0540811360530422 2020:0.0738538002358712 2251:0.0638793563258526 2668:0.0696872177562671 3387:0.094565514032104 3427:0.0861441724346057 3497:0.0777228308371075 3753:0.0834331059777274 3909:0.0785069369374277 3931:0.189131028064208 3976:0.205973711259205 3977:0.411947422518409
+-1 6:0.0296974759308926 11:0.1112088184801 17:0.0269708153532505 18:0.0794848793247277 25:0.0371471952308252 37:0.0702564441735242 40:0.216481459399954 46:0.0414448123582601 53:0.0381184685000102 58:0.132808656209604 72:0.0308023982275308 74:0.0405758116851038 76:0.123534672941787 80:0.0322272014266818 86:0.0384503007363194 87:0.0461104178231277 94:0.0891397707995104 111:0.0309535259185799 122:0.0532746332477712 132:0.0300193148149146 144:0.0882788556093431 146:0.0444453871065345 148:0.0435084125999242 174:0.0362816179641999 177:0.0516591773960178 187:0.0461526596728183 215:0.0315321178270346 216:0.0430631024193323 224:0.0470715144386133 237:0.0850686897630342 242:0.0346820367416374 252:0.250044770906507 276:0.0384503007363194 278:0.128190673165972 287:0.0918855043814745 323:0.0423412504855795 331:0.0386923881399012 335:0.0655410142664605 337:0.113521064441824 348:0.0491725422707882 373:0.035333739608167 375:0.0350880131154211 404:0.0831299934308274 412:0.100891608970301 414:0.0365710207146981 415:0.0430631024193323 427:0.0525780321618129 429:0.0564849686624499 441:0.0349019726208456 463:0.0608211291780713 465:0.0420879891838743 466:0.0914720795436441 481:0.0570393617084285 493:0.0441866984521877 504:0.0525780321618129 513:0.0370386355502341 532:0.0572293052763824 534:0.0377261342606999 546:0.0427631474198756 557:0.0465824659151387 592:0.048756241668777 625:0.055026960138297 639:0.0569453769476834 643:0.16108245435591 653:0.0505623781084359 654:0.0517227875531828 666:0.0646865977267143 671:0.0302272537093574 681:0.0541606480558402 695:0.0488591265830134 747:0.0545475900057456 761:0.0503302229898359 767:0.0473458822292713 876:0.0477681155245716 884:0.102199416770432 912:0.0470715144386133 915:0.0613288796696972 933:0.0575192965875743 963:0.0839884414607962 984:0.0567593364531079 1005:0.0521766016437122 1009:0.0441136835250952 1025:0.0603316800367785 1036:0.0559523222083499 1055:0.0540089063238394 1056:0.0486033611380898 1058:0.111047744093928 1078:0.0628318003865101 1106:0.063422360547676 1116:0.0577161224055748 1168:0.0643593350542863 1170:0.0658984228862865 1172:0.525923979560234 1218:0.0602120251329973 1229:0.0558655439979073 1253:0.0605741997622515 1292:0.118805440265554 1313:0.0646865977267143 1333:0.0703597524329021 1340:0.0664528159322651 1361:0.0744353959940752 1391:0.0625458794316281 1422:0.0672290697024309 1426:0.0587454591140897 1440:0.122657759339394 1500:0.0564849686624499 1503:0.0670308071487797 1525:0.0693892865561091 1757:0.0802857483792227 1776:0.114650565326621 2013:0.0778970223141202 2023:0.0725373248719792 2081:0.0868793056025009 2240:0.0672290697024309 2298:0.069157131437509 2387:0.0672290697024309 2468:0.146906455246082 2528:0.0569453769476834 2678:0.0946931786037749 2919:0.102675758665585 2937:0.0932623044417483 3070:0.0774658513786643 3129:0.0932623044417483 3302:0.0907862421031379 4207:0.0819507790958158 5163:0.105706214050174 6571:0.0981062154489956 7580:0.105706214050174
+-1 6:0.0370733737448647 13:0.0307996180445373 18:0.0248065916875257 41:0.234725352413003 42:0.0277257048051245 46:0.038803778019361 51:0.0314738412720162 58:0.0310863852516634 77:0.0349443587986291 86:0.0360000890256762 94:0.0278198056803888 116:0.595378101639309 122:0.0498797539421691 144:0.0275511209722845 145:0.0388880788103786 148:0.28515114001138 157:0.281774141450092 190:0.0397331649139195 207:0.109606550531264 240:0.0417183746297064 249:0.105771027093162 258:0.0439454017736193 268:0.0445909882768332 276:0.0360000890256762 277:0.0419673539389342 351:0.0657743709189173 373:0.0330821280235801 390:0.042331714764029 413:0.0400690032837206 414:0.0342405644761417 426:0.0417183746297064 430:0.0360676639734014 432:0.0435325303485692 434:0.0400999785066799 448:0.0419673539389342 466:0.0428215507274878 485:0.0641397106082217 499:0.0345174253646177 506:0.0259256783970207 515:0.0334812151333241 532:0.053582417962242 537:0.0518286806835293 538:0.0406061278274576 557:0.0436140391067602 564:0.114841501141685 629:0.0566001224456316 660:0.0596665758298955 671:0.0283010484625597 686:0.0548032752656321 702:0.0552037909830667 717:0.0469623569083487 767:0.0443288073854505 827:0.0395833949522674 848:0.0512194469024594 908:0.0492912792368221 1032:0.0612003996257018 1093:0.0588278989823684 1109:0.0641195127433006 1149:0.044459222095225 1160:0.058693344046996 1234:0.079157866528215 1277:0.0547050869573606 1289:0.12551865543874 1337:0.0596665758298955 1459:0.0706833717918588 1480:0.067373788194538 1614:0.058560198089711 1649:0.0526337167494761 1784:0.0676414890871954 1994:0.0663560193337527 2042:0.059522898338061 3123:0.244028994022247 3153:0.0938145585090188 3589:0.0733500360277999 3740:0.360626352448971 4162:0.0830408927601124 4166:0.0785056557358507 4332:0.088658938800968 6327:0.0938145585090188
+-1 6:0.0347226746039808 11:0.124825723274158 18:0.22304340803791 25:0.104239159620328 33:0.0384287965119413 37:0.0657157976804987 48:0.0424841580163474 53:0.106964660394005 56:0.128225452664017 58:0.0465844817743683 74:0.0569301192820361 78:0.0533513706549638 79:0.0470944876986477 94:0.208446755740955 96:0.0430267392138766 106:0.0486098774251721 111:0.0434295174775588 112:0.0773203258737755 118:0.136421289114025 136:0.175909742731359 139:0.0568123771667504 142:0.00900409523162476 158:0.0996894356511901 168:0.0515768505728721 177:0.217442092396652 186:0.0788154721189087 242:0.0973216508381143 249:0.0792515508636366 258:0.0658543523609237 284:0.0421731312814911 288:0.0721278255594614 295:0.058963979282294 364:0.064343693261259 377:0.0534495058333971 400:0.0611918614035516 429:0.0792515508636366 438:0.0774354593863656 439:0.149695647421747 461:0.0759903998505427 480:0.0510780889917126 499:0.103452129270006 504:0.0737699017783452 564:0.0860478272653086 647:0.0627293513582711 661:0.0927149198612423 747:0.0765333009152039 798:0.54344447789456 822:0.092974169280265 856:0.0521195798101642 882:0.156450568550775 885:0.0973570261808201 1032:0.0917118178220805 1111:0.172460337473578 1142:0.114981498469774 1198:0.248176811884788 1277:0.0819782713782728 1305:0.0631612007399923 1324:0.0828786532853233 1459:0.105922519403009 1472:0.0706161005610824 1548:0.0764234761825774 1615:0.103058961400037 1706:0.104436998220396 1778:0.107533721396892 1995:0.0898513618582699 2005:0.121896495120679 2368:0.111926243293019 2715:0.11862196780773
+-1 6:0.0347226746039808 11:0.124825723274158 18:0.22304340803791 25:0.104239159620328 33:0.0384287965119413 37:0.0657157976804987 48:0.0424841580163474 53:0.106964660394005 56:0.128225452664017 58:0.0465844817743683 74:0.0569301192820361 78:0.0533513706549638 79:0.0470944876986477 94:0.208446755740955 96:0.0430267392138766 106:0.0486098774251721 111:0.0434295174775588 112:0.0773203258737755 118:0.136421289114025 136:0.175909742731359 139:0.0568123771667504 142:0.00900409523162476 158:0.0996894356511901 168:0.0515768505728721 177:0.217442092396652 186:0.0788154721189087 242:0.0973216508381143 249:0.0792515508636366 258:0.0658543523609237 284:0.0421731312814911 288:0.0721278255594614 295:0.058963979282294 364:0.064343693261259 377:0.0534495058333971 400:0.0611918614035516 429:0.0792515508636366 438:0.0774354593863656 439:0.149695647421747 461:0.0759903998505427 480:0.0510780889917126 499:0.103452129270006 504:0.0737699017783452 564:0.0860478272653086 647:0.0627293513582711 661:0.0927149198612423 747:0.0765333009152039 798:0.54344447789456 822:0.092974169280265 856:0.0521195798101642 882:0.156450568550775 885:0.0973570261808201 1032:0.0917118178220805 1111:0.172460337473578 1142:0.114981498469774 1198:0.248176811884788 1277:0.0819782713782728 1305:0.0631612007399923 1324:0.0828786532853233 1459:0.105922519403009 1472:0.0706161005610824 1548:0.0764234761825774 1615:0.103058961400037 1706:0.104436998220396 1778:0.107533721396892 1995:0.0898513618582699 2005:0.121896495120679 2368:0.111926243293019 2715:0.11862196780773
+-1 11:0.174141551605674 53:0.298447971129719 111:0.24235016183058 136:0.490815430318211 798:0.606517708752976 1198:0.461634498195493
+-1 6:0.042055320061538 11:0.188982624613465 25:0.315630295676883 53:0.323882958286563 80:0.273826356254786 87:0.391788524567299 359:0.468243170920833 571:0.331915269165824 908:0.447320611026794
+-1 46:0.301367386321722 76:0.29942888213813 111:0.225079634162342 481:0.414763691217495 599:0.337463977434002 661:0.480508222421363 986:0.321838906350833 1551:0.385330912612646
+-1 6:0.0200681971804676 10:0.0282109117893036 11:0.165329643025876 18:0.107424498625151 25:0.0502047541230969 27:0.00973896286498095 34:0.0533111657477005 37:0.0316507296928477 41:0.0154011198797485 46:0.0840195309980384 59:0.0207688056854677 63:0.00722956195769228 67:0.0756787529890471 72:0.0416297063561788 74:0.0822578381626498 75:0.00677860162476178 77:0.0252209860924975 78:0.0256956450495051 79:0.113410698247932 81:0.020364456319241 83:0.00866632791686564 85:0.0204972697229805 94:0.140552028824755 113:0.107428089521932 132:0.0202856811915642 134:0.0239545906598749 135:0.0304731009384365 138:0.0280470280409922 142:0.00607130510636924 168:0.0248409821307671 171:0.115678731480814 190:0.0286772925346734 199:0.0156343863610925 203:0.050712559277958 209:0.084043264219087 214:0.0573111424643294 215:0.021307964338222 223:0.0454303332103831 232:0.207814665509769 240:0.0301101116892923 255:0.031130856707056 268:0.0321834119681959 275:0.0224917567605836 283:0.0501459255725711 291:0.0269210954917655 292:0.0329819367818587 342:0.0312452163927934 347:0.109905360673704 355:0.0402602618497858 363:0.0624904327855868 372:0.0660335301636437 376:0.0426562272803627 377:0.0257429099403773 402:0.0509871952055667 409:0.0341629963719143 419:0.122065605422104 426:0.0301101116892923 430:0.0520634564625474 446:0.0825401873566203 475:0.054204939787468 478:0.0524589006713861 483:0.0324747775836223 493:0.0298593516619347 499:0.0249128481677563 501:0.0347811519217472 502:0.0230869987580343 504:0.0355298315331445 534:0.0254935976027834 546:0.0288973809247793 554:0.0424588595439722 574:0.0250436424865032 575:0.0349089114703386 580:0.0302639238823284 586:0.0245868267673456 594:0.032025452026829 612:0.0778703484568895 634:0.0375776748025882 671:0.0204261967944685 702:0.0398431704716724 706:0.034049834066557 720:0.0333002546810499 761:0.0340108648104415 787:0.0768360189308964 803:0.0835993942136802 806:0.0359044650201139 812:0.0374636702803031 813:0.0934664584527693 844:0.0366509939664951 849:0.0417996971068401 882:0.0251171196286154 909:0.0294481809660058 943:0.314340434688973 963:0.0283777754048466 986:0.0299089585179948 1009:0.0894300345320707 1018:0.0362950450723912 1027:0.0349518963078257 1113:0.0406083840109191 1146:0.11487944114758 1216:0.0358093631739774 1225:0.0298346484275687 1245:0.03270796879444 1246:0.0940994346973461 1277:0.039483232337764 1294:0.0379882271065472 1324:0.0798337673749166 1333:0.0475459055401926 1351:0.0444095881926194 1370:0.0549880116440286 1374:0.0446543292571648 1421:0.0468901090469917 1426:0.0396974968412144 1436:0.044905776384139 1438:0.0925561317908598 1491:0.0768360189308964 1568:0.0496363347144786 1595:0.0418910137411161 1597:0.0468901090469917 1598:0.0349950834276458 1666:0.0482521959490876 1743:0.0992726694289573 1757:0.0542534400231508 1795:0.0427565260494681 1816:0.036755281975405 1831:0.0905927128728327 1873:0.0442896224840087 1923:0.0496363347144786 1966:0.0606146222311224 1985:0.047049717348673 2047:0.0459867002800034 2269:0.273066890785296 2297:0.0510155114651363 2409:0.0478922578151793 2624:0.0849177190879445 2750:0.0549880116440286 2801:0.0553785916963059 2855:0.0553785916963059 2871:0.0581526976263263 2901:0.0587090646959466 3004:0.0677103760599718 3489:0.0662956973461786 3778:0.0557865364576914 3861:0.0662956973461786 3923:0.0650702469039181 4082:0.0650702469039181 4119:0.059934515138207 4152:0.0650702469039181 4158:0.0639893230080538 4405:0.0677103760599718 4705:0.0535733329302355 4933:0.0662956973461786 4940:0.138767171684892 4984:0.0714314291118897 5052:0.062147718665663 5615:0.518500907875603 6978:0.0650702469039181 7769:0.0630224036344745 7787:0.0740715582679433
+-1 6:0.0253108742896956 11:0.341215958946137 17:0.0459739351913465 18:0.0903256017762331 27:0.0245663985230788 33:0.0933747614694142 37:0.179636683331792 38:0.27495295676377 41:0.0194245554641178 52:0.0343926216092307 58:0.0282978864073082 74:0.103747126976776 75:0.00854946421152684 76:0.0350958061724883 85:0.0517040781067565 86:0.0327708230356908 111:0.0263813936635948 126:0.0801601652025961 132:0.0511703489758674 142:0.00656347833510423 145:0.0707995109669858 146:0.0378803777273249 148:0.037081803329802 157:0.0854995156531304 162:0.0913892035596282 173:0.0315308706698858 185:0.0245652235334092 199:0.0591562835799666 237:0.0725032294862964 258:0.0400034284284262 264:0.0347267609548519 286:0.0236372018229552 292:0.0831964773127529 299:0.0349221198168171 306:0.165513689508114 317:0.0251430487782498 324:0.0446965807417817 327:0.0354770065230813 328:0.0855965785861039 345:0.0309573917602007 349:0.125458679092751 372:0.0416421656077694 375:0.179431065004908 385:0.0441373058790084 386:0.0671943688442698 408:0.0248402192401022 414:0.0311691306732462 434:0.0365029458243882 455:0.0308010913503648 465:0.0358711900572989 485:0.0583862752229116 499:0.0314211566939397 507:0.0225559893739182 510:0.038137604708699 534:0.032153622884679 558:0.0936596959063049 564:0.0522700167266678 571:0.0332937094934072 573:0.107101883316883 580:0.0381701637675797 591:0.0443577837413553 603:0.0451643105526571 615:0.0560112846157688 626:0.119441954867104 672:0.0589419607283821 673:0.0426533011200317 681:0.0461606015804122 720:0.0419997148955291 743:0.107101883316883 767:0.040352441939122 772:0.0390857739225861 819:0.0423686620765858 822:0.0564774444384696 848:0.046624979989058 913:0.04402862209645 965:0.042136695639797 987:0.0344397692825662 1045:0.0219141550632497 1096:0.0552737907705433 1153:0.0589419607283821 1215:0.0494471760405283 1236:0.0464903884981373 1376:0.0604037774847819 1441:0.0549914660960728 1453:0.0593411291741267 1464:0.0539263714707514 1467:0.155511797537862 1495:0.317202875270268 1659:0.0593411291741267 1664:0.0500681921314544 1682:0.0591398243123537 1718:0.0599669430838987 1788:0.0519439462121854 1894:0.0660234031522516 1897:0.112639925166655 1910:0.051626810269972 1947:0.0585561004045978 2137:0.0595459971382211 2280:0.0572986921787957 2733:0.0548528448248657 2966:0.440068115533333 3093:0.0608577469558558 3519:0.0720572783591954 3574:0.15676675691317 6277:0.256197724362108
+-1 6:0.0205439968280959 18:0.109971440840879 25:0.0770925983175088 94:0.123329482466714 100:0.0634750048573101 168:0.22886946354014 215:0.0654394733878253 284:0.0623803238920493 294:0.0981625116470954 295:0.0872164815328254 347:0.16876668298353 422:0.0936681162230863 424:0.105796984582223 485:0.0710853034503133 534:0.0782940864461045 535:0.097408366539254 591:0.324033671159786 594:0.196708487247038 614:0.248455139536696 616:0.141674875287772 646:0.267133404527125 690:0.128372195627133 712:0.0943274326466288 757:0.0975950194852938 780:0.104213854024277 812:0.115055704777978 872:0.117224812614058 1044:0.149932568513273 1068:0.121042062999897 1104:0.303583120636878 1249:0.155191398856227 1448:0.128935904254769 1468:0.144005499278439 1474:0.158241343749752 1625:0.138705342693708 1824:0.145502372716749 2047:0.282462031698546 3561:0.168875189929527 4309:0.182122003383882 7803:0.219375020073451
+-1 63:0.099567420209814 96:0.285402417861418 111:0.288074102781474 122:0.495809175802221 142:0.0238901724528675 313:0.522360410349466 490:0.476706547529807 671:0.28131493047919
+-1 6:0.0113038808594559 11:0.203183527792632 18:0.0605093583108392 27:0.0987425700847737 37:0.106968077205565 38:0.184191709241635 74:0.0926672978130797 75:0.137455405732489 128:0.121506134667227 141:0.103257429671684 142:0.0410376531384301 146:0.101504658868744 174:0.0828601907737856 184:0.133201447662062 199:0.0528386000438054 211:0.112421485426376 234:0.0810899725946943 257:0.273946377682072 291:0.0909836155111555 303:0.605985464701524 327:0.0950645600931254 352:0.480356816559358 431:0.12604461165275 530:0.0929246917321138 669:0.170781284456194 698:0.126999018932483 862:0.108768351616564 1036:0.12778427072891
+-1 6:0.0241368066396729 11:0.0650776700100511 18:0.0258407302695104 26:0.0208941506585046 33:0.0534260935473976 34:0.0384716560580799 42:0.0288815355380549 46:0.0808428641763386 58:0.0323823162190502 74:0.0791477786061148 78:0.0741723805638374 80:0.031431427957732 83:0.0250159967224932 84:0.0283315572632276 88:0.0368613054262041 91:0.270009365299647 92:0.095603146986123 93:0.0957113324137781 94:0.0289795592958714 98:0.0939406779849673 114:0.0338967634119755 118:0.0316102212212903 124:0.0558161647997268 132:0.0292780598120528 134:0.034573349126906 135:0.0439814302270159 140:0.0341124327600156 151:0.0381237268648401 157:0.0489201262702833 158:0.138594429131621 168:0.035852666407731 179:0.0263148891701733 183:0.0424680828496723 186:0.027393537975478 190:0.0413895633155794 196:0.0448898164910559 199:0.0225649064816794 215:0.030753507780995 218:0.05476526384627 220:0.0774517883727083 240:0.0434575325650534 252:0.0348386449734999 253:0.0527490765969618 275:0.0649241199736842 292:0.0476024003679092 312:0.0437543606690674 318:0.116536900701333 337:0.0369059779805979 339:0.0375477491708843 341:0.040334195330527 348:0.0479583442390748 351:0.0342581882866473 367:0.0412025663298627 382:0.0424001575735176 394:0.134915494838031 439:0.0520290406460382 499:0.107869169172512 561:0.0427781323726914 564:0.239258040131346 580:0.0436795277026584 586:0.0354858472774519 588:0.198499941674637 597:0.043167210809278 618:0.207366818339358 633:0.0501991841772847 671:0.0294808641540668 706:0.0491436826289913 723:0.0495442219989072 730:0.0464039885800841 731:0.111261822865522 761:0.0490874388085051 800:0.0425706283927503 819:0.0484840243329181 820:0.071639476283691 873:0.0558161647997268 913:0.0503835778720241 952:0.0449718316126769 963:0.0409572741378588 1015:0.0603289591541387 1083:0.0517516399349117 1138:0.0476024003679092 1299:0.142669941846169 1303:0.0739929345170839 1393:0.0552680010649208 1424:0.0448898164910559 1449:0.0618562974200156 1465:0.0764078564330296 1490:0.0783032843219474 1500:0.165270623381399 1715:0.079927201097193 1733:0.0817784039038821 1903:0.0811321586720662 1924:0.0665805996590522 2013:0.0759735421196393 2619:0.0831739460592454 2706:0.150290869988787 2771:0.139283533613628 2803:0.0831739460592454 3059:0.0896969940074075 3218:0.177088987060196 3611:0.0713349709230847 3658:0.0896969940074075 3790:0.469575205004752 4404:0.0977255050722594 5478:0.169468058917578 5656:0.0956837176850802 6868:0.224554128170547 9044:0.106906516614421
+-1 6:0.0227632074456939 17:0.0177198974166083 25:0.0244058060604984 26:0.0140750624714659 27:0.0189374287805762 29:0.0118102188104683 31:0.0123944511843843 33:0.0179948832708336 37:0.0153862235568947 41:0.0299475021013362 42:0.0194556564472996 53:0.150263611088864 56:0.180130703728006 61:0.0381840381431933 63:0.0773184209886147 67:0.0183946819440883 68:0.0199632388664095 78:0.0249826113335796 79:0.132316369872296 80:0.0211733570463361 83:0.0337033768359241 85:0.0199284867884114 100:0.020094778124567 104:0.0470934962517145 111:0.0203365488501429 140:0.0919175189263735 142:0.0252978480763313 144:0.0193331476383492 160:0.147372671395356 162:0.105673397675579 166:0.0242637236833025 173:0.0243061113390132 199:0.0304010891453152 203:0.0246526630433187 209:0.0408555652357757 216:0.084877718450529 219:0.0271901317269568 228:0.0245939616161514 239:0.0551397469867764 246:0.100838237645862 277:0.0294492935698867 280:0.0340661849325243 296:0.0293241500774258 337:0.0248612137500801 341:0.0271705860789512 348:0.0323064910474496 359:0.253445138905231 367:0.0277555524776253 368:0.0396380742376967 374:0.0419711490209596 377:0.025028564661317 378:0.0449938863689891 390:0.0297049725178422 398:0.0252935342470126 436:0.0287234802080981 459:0.0594099450356844 485:0.0450080595964556 492:0.0527479502070003 500:0.0336530285000209 507:0.017387670477735 508:0.0252304768485466 510:0.0293990253538491 526:0.0390277451101768 534:0.0247861705428282 537:0.0727383496710363 548:0.147272818645523 550:0.0529880482056734 554:0.0825613199131994 567:0.0352878864348948 575:0.0339402169379906 586:0.0956182475078946 590:0.0546535832165739 597:0.058158017407826 608:0.0354839950927291 612:0.0378547541064035 613:0.0300756970174662 634:0.0365349242100769 644:0.0309857932376214 656:0.0321005761070452 659:0.0476572153556253 662:0.0338986197309645 667:0.0313213829882754 681:0.0355836898142144 704:0.0897022439347041 722:0.0835367085491593 726:0.0299681946960007 778:0.0310760731115003 784:0.0319325375295161 789:0.0334140164032031 826:0.0423911128753983 827:0.027776424030409 837:0.0352878864348948 848:0.0359416638588308 851:0.0738681680281771 854:0.0391017918815857 872:0.0371107746343427 927:0.0835367085491593 963:0.027590314704497 991:0.0345439069628339 1018:0.0705757728697895 1043:0.0727383496710363 1075:0.0454364192794738 1098:0.0364793316019094 1099:0.0460628227270533 1117:0.0388092219086238 1133:0.0379196459178583 1159:0.0330670903587433 1167:0.0415700664532843 1170:0.043295439094708 1193:0.0396380742376967 1214:0.0945549471783879 1252:0.0987238437938184 1281:0.0420743014385728 1288:0.0427195886704422 1314:0.0379196459178583 1492:0.0469132358835645 1531:0.0444360431854397 1544:0.0852174953659792 1566:0.050620707645805 1587:0.104822417864423 1612:0.047465324416965 1652:0.038954307784125 1704:0.0493619218969092 1808:0.0326968054927695 1875:0.0508952703780505 1910:0.0397974103423194 1920:0.097808506261615 1939:0.044572268499392 1989:0.0527479502070003 2002:0.151063026156501 2058:0.0486839312023566 2151:0.0495998715915412 2232:0.0565390065125322 2264:0.0441696775918016 2395:0.056029005721068 2752:0.174814140016291 2792:0.0996886825214054 2860:0.050620707645805 2873:0.140739707650694 2880:0.0489042531308075 2923:0.0565390065125322 2931:0.0493619218969092 3081:0.0596468025099245 3095:0.0514711208023163 3114:0.0550889175911728 3161:0.0555465863572745 3170:0.0503543420521669 3301:0.0658314669702898 3316:0.0500956982978221 3391:0.0632645992987811 3430:0.189793797896343 3451:0.0596468025099245 3621:0.0991997431830824 3679:0.134916493023807 3719:0.0542385044346616 3748:0.0612735820515381 3792:0.0644560444657957 3955:0.0538418798159906 4084:0.0538418798159906 4181:0.0632645992987811 4234:0.0517736102701814 4243:0.0694492637591463 4347:0.0674582465119034 4388:0.0632645992987811 4532:0.0632645992987811 4565:0.117865229334731 4577:0.0644560444657957 4771:0.0555465863572745 4779:0.0658314669702898 4796:0.0644560444657957 4820:0.178940407529774 4901:0.0644560444657957 5000:0.14403226286131 5029:0.0596468025099245 5134:0.0604231688950269 5248:0.116542760010861 5481:0.0644560444657957 5516:0.0555465863572745 5647:0.0674582465119034 5819:0.0720161314306551 5914:0.0720161314306551 6082:0.128912088931591 6290:0.0720161314306551 6397:0.327274370719508 6507:0.0720161314306551 6812:0.0632645992987811 6845:0.0694492637591463 6963:0.151267856439023 7062:0.0694492637591463
+-1 6:0.0172445694056008 11:0.154982721892537 37:0.16318452525196 38:0.280992585948618 75:0.139796194115409 100:0.106561457922906 128:0.185362973878347 141:0.157523768584996 142:0.0178870719986059 184:0.20320469029125 219:0.288375423702552 234:0.12370633394793 257:0.208958648011564 303:0.616305056924415 317:0.102781368536476 499:0.12844542101815 500:0.178460083423321 530:0.141760720587215 730:0.331533832835482 862:0.165930923362095
+-1 6:0.0247433914482967 11:0.194580004124723 17:0.0674147638188001 36:0.0472631866929701 46:0.207186338273593 59:0.0384108261719674 63:0.0267413978311419 72:0.192479943075891 74:0.202842125881649 76:0.0514634101758169 79:0.293646064938978 82:0.0463983192122818 83:0.0160279228476251 86:0.0961082529004228 94:0.185674049171411 98:0.0401256298972575 100:0.0382249594737824 101:0.0601213563398067 111:0.0773697276789475 142:0.00962448265412242 144:0.0367761604729077 146:0.0555466202148215 158:0.0443992066731229 176:0.0320639616166882 179:0.0337202645205103 197:0.137951346305266 218:0.0701769698321553 228:0.0467834568886243 234:0.0443750460436725 237:0.0531582522963897 252:0.0892854472192957 307:0.0594040873869133 308:0.0457054540584493 322:0.0536097933944536 326:0.144264039093644 328:0.0627580943969934 335:0.0819113537975695 337:0.0945836656841745 384:0.0670338046452169 402:0.0471490831417322 410:0.393534911801431 415:0.0538190788984473 426:0.16706125768106 429:0.0705933575202882 430:0.0962886555144572 480:0.0454978326398849 485:0.0856158372788789 493:0.0552233182621927 505:0.0444961945903099 506:0.0346064651981662 510:0.0559238099447192 532:0.143047217823778 558:0.0686698479538973 564:0.0766471440342637 580:0.0559715535467292 699:0.0921991993994236 712:0.0568044429187324 729:0.133162337544936 731:0.0712862226741207 759:0.0914096226487539 837:0.20137739573848 872:0.0705933575202882 906:0.144763249247052 1058:0.069392205451072 1102:0.0741001879765474 1237:0.075857567283594 1263:0.084021038970941 1296:0.0629733975714358 1363:0.0700368211260873 1771:0.0882509385589035 1949:0.153947109700452 2120:0.0914096226487539 2577:0.0889038205627432 2587:0.202009206193551 2592:0.167546511788117 2738:0.132108713827095 3238:0.118344925565173 3492:0.113462143973371 4349:0.10658024984241 5459:0.118344925565173
+-1 6:0.0311646521936395 11:0.233405974087692 18:0.0741437831902815 27:0.0705786611453459 30:0.0416279553724559 33:0.0574850147717545 36:0.0264571793137356 37:0.0163838663679689 38:0.0282118967559204 46:0.173969419540094 58:0.0464566482429733 63:0.00748470434414967 65:0.0247731077753615 72:0.0861977657382791 74:0.113547792104936 75:0.0210534867776317 79:0.258308900566455 83:0.0358887039556655 86:0.080699804385848 94:0.103937376139008 138:0.0290368508973828 139:0.0283282385179935 140:0.0489387256527324 142:0.0161628964019853 150:0.0603961118515094 159:0.0416633743023203 162:0.0187542102167331 180:0.0266841794501109 183:0.0609259934698563 185:0.0604931017961223 186:0.0196497981992506 199:0.032372295914962 208:0.103770546573024 219:0.0579062800036216 237:0.0297571431682488 258:0.164184099853161 264:0.0285054667171314 286:0.0194026005110686 289:0.0301270633773853 292:0.102437760525859 296:0.0312255281126159 301:0.0627713264532709 304:0.0524396732357233 307:0.0332534621961526 322:0.120039634739258 323:0.0296220538045614 325:0.0621882269954553 328:0.245916873389241 341:0.0289323270138924 343:0.0733783894421295 346:0.0576990560266404 347:0.0568920451400618 349:0.0343275915837467 372:0.0683639552392919 377:0.0533028338340156 387:0.0244434034517871 398:0.0808007013958277 402:0.0263933059626845 405:0.0329313593097039 408:0.0611702925921211 412:0.105876065364374 442:0.0294668394395244 455:0.0505661605169932 457:0.0477546372010927 458:0.07291376359668 459:0.0316310430819413 466:0.0319970576067395 485:0.0239631912009842 499:0.0257920609848218 500:0.0358350910334147 501:0.0360086323911012 505:0.0249082611949609 507:0.0185150871169964 509:0.0321416741762776 510:0.0313052583023306 521:0.0341459201752864 558:0.0384402874178912 561:0.0306853999369005 571:0.0273291462191944 574:0.0259274712367075 580:0.0626639688209779 603:0.0741462616069914 609:0.0245214953312927 612:0.0403092565487726 623:0.288394700560471 626:0.0653626305376774 643:0.0281734306095109 657:0.035964948979964 671:0.0211470687680248 687:0.0389634172535853 697:0.0371222323349253 712:0.0317982226183936 749:0.0403092565487726 756:0.045976871021007 767:0.0331233077610109 792:0.037998294925719 844:0.0379444640441251 856:0.0259882786454504 862:0.0333192141899571 867:0.0304386035888324 882:0.026003541500436 886:0.119301660080905 903:0.0385540747082699 906:0.121554242678835 918:0.0400377773602136 942:0.0448023993507049 950:0.0377321395616977 962:0.0468949346831544 965:0.0345879126674586 984:0.0397089858953927 985:0.0443704556433778 1045:0.0179882373309061 1068:0.0408038505604117 1126:0.036927330624976 1153:0.096765033857879 1164:0.0734726936077458 1169:0.0390233614599062 1216:0.0370731308034957 1245:0.0677245668704944 1253:0.0423778746245762 1262:0.160031710865233 1294:0.0393288902031456 1305:0.0314939393293427 1335:0.0372212032838655 1379:0.0365491264567617 1433:0.0333854243895047 1466:0.0422926621683238 1511:0.0417968387945577 1579:0.0434649016936174 1581:0.0494014701383998 1607:0.134407198052115 1682:0.0485449332802591 1690:0.0452549194064864 1781:0.0439572981511388 1798:0.0536193178383926 1892:0.045976871021007 1912:0.0525625491553888 1949:0.043088570314092 1976:0.0554640184370874 1979:0.0511696511944826 2002:0.0536193178383926 2026:0.0417166600471305 2143:0.054496968316745 2470:0.0516116436866548 2528:0.0398391403305344 2744:0.0476096418252041 2940:0.0565407684632819 3052:0.0620496965714692 3148:0.372298179428815 3318:0.0558095519770516 3349:0.264079637546953 3556:0.180614987918323 3762:0.0635143014779168 3969:0.105125098310778 4698:0.0620496965714692 5548:0.0718322395473883
+-1 4:0.0324228873250755 6:0.00749573790792573 11:0.134733415052521 13:0.0498181505929011 17:0.0816902406877171 33:0.0829579489644208 34:0.0597372831875035 58:0.0502819943941149 59:0.0465445468805015 63:0.064808095479607 72:0.046647742977163 74:0.245795151480738 75:0.0303827717285385 79:0.406659844868777 83:0.0388438615216663 84:0.043992134282479 86:0.174689619901674 94:0.269989959001456 100:0.0463193218044133 101:0.07285241083202 120:0.0624501276222843 135:0.0682926450708605 140:0.0529684517069741 142:0.0272125561217959 144:0.0891274620104546 146:0.0673089471459747 173:0.0560266247254179 190:0.0642680954793623 234:0.0537717257540138 240:0.0674791572670946 253:0.163813407033733 293:0.0709460476298047 296:0.135186836665455 317:0.0893524427599943 355:0.0451132258991623 399:0.0706780706932383 406:0.070282540447212 415:0.0652155886894814 499:0.167495027932537 509:0.069576585564091 518:0.0653692651622421 594:0.0717715874377408 671:0.0915534661635099 713:0.0749536974372456 767:0.0717015126206658 886:0.129125230301219 925:0.110766153470788 944:0.0820219247645232 1113:0.0910066212743358 1153:0.104732886981879 1261:0.110766153470788 1290:0.339741305781285 1294:0.0851346410691793 1418:0.0951536842544513 1516:0.120062103901374 2102:0.209465773963757 2211:0.115472724112182 2851:0.268636039246335 3038:0.123232511517112 3062:0.131571687627802 3810:0.134318019623168 4550:0.1517443429607 5157:0.132899047449714
+-1 6:0.0306215355067845 11:0.302726597035933 18:0.0655664894931419 27:0.0267487702097702 37:0.0434655161572581 46:0.230765755959538 53:0.0235827322029699 57:0.0228613263824374 65:0.0219072407796777 68:0.0187984720723385 79:0.14536234327854 83:0.0158684668463212 86:0.0237880266723736 88:0.0233823344940678 94:0.0183826845281783 97:0.0191073729126449 121:0.0330482992064474 142:0.00476436608042959 145:0.0256963435651192 150:0.0267046059881773 151:0.193465038398879 154:0.022135798660391 158:0.0219787475206061 171:0.0264766711595838 185:0.106989963356575 199:0.0143136599499515 205:0.0242299376721471 211:0.0609086127235586 215:0.0195079582094766 220:0.0491302085467382 237:0.0263147000454468 242:0.021456716833505 252:0.132595767947712 255:0.0570021088853697 256:0.0625166522873933 276:0.0237880266723736 288:0.0954130750260375 289:0.0266418261841739 292:0.0301957631519946 294:0.0292629215336117 295:0.0519996689715565 306:0.0240289604955842 309:0.0225353742845249 314:0.0244358403184386 330:0.0609086127235586 343:0.162224100031211 349:0.0303564179767349 351:0.0217310919517707 355:0.0184296231493914 357:0.085039236599318 358:0.0810964473956531 372:0.0906829479162763 375:0.0651236460485067 381:0.0294355712662064 391:0.0316895229597097 412:0.0624185569226823 423:0.0232004358202503 424:0.189232863322763 426:0.0275665376191633 430:0.0714980359074292 442:0.0260579799866609 449:0.035001725703306 455:0.0447164346029828 467:0.0384366820465745 475:0.0496259372005949 483:0.0297314466040736 485:0.0211910190780152 496:0.0513554689916802 498:0.0314644561628314 504:0.0325284225999489 505:0.0220267590303634 506:0.0513932670084106 507:0.0163731767207729 509:0.0284233775441759 538:0.0268315906422465 546:0.0264562531875797 549:0.0326981655719732 550:0.049896429683969 551:0.0452501107045013 557:0.0288191488865928 580:0.027707356412842 586:0.02250983629725 593:0.0589878373256184 594:0.0293200781577386 601:0.0413490190036186 607:0.0300381226676056 617:0.0858580644501719 626:0.0289005904742832 628:0.232923471820651 634:0.0344032727867499 639:0.0704607308530265 661:0.0408821215951813 685:0.0323620410968011 695:0.0302276493054254 697:0.0328277618381481 737:0.0721669470839638 748:0.0452501107045013 761:0.0311377717204127 763:0.0354654014892557 767:0.0292914512430099 772:0.0283719890577122 774:0.137403695046686 780:0.0932006052572694 781:0.0331834547966086 789:0.0314644561628314 807:0.0398171548614562 886:0.0527501477914491 887:0.0386952252563593 908:0.032570537932966 930:0.0536205856148161 952:0.0285271071498998 954:0.0418433963755379 963:0.0259805417302408 965:0.0917598717621636 966:0.0305866239207212 982:0.0342988988812408 984:0.140461071419126 1005:0.0645601395987027 1015:0.0382686366180139 1027:0.0639986177649026 1056:0.0601388300730656 1093:0.038872115818219 1105:0.0384366820465745 1106:0.0392374773523665 1113:0.0371779605815451 1162:0.0355252023918469 1167:0.0391446367243648 1200:0.0436864809617608 1218:0.0372513408850513 1227:0.0334604686128822 1232:0.0346700250751993 1245:0.0299449388139928 1268:0.0829398261023089 1274:0.383797725131969 1394:0.0397177218507351 1440:0.0379423046746552 1482:0.036278122973551 1511:0.0369615883321843 1564:0.0490476858021913 1567:0.0448766273801178 1608:0.0331834547966086 1626:0.0440096743203445 1664:0.109032063848084 1753:0.0464818718257863 1765:0.0446959324299907 1797:0.0532402052610795 1836:0.0326554072540181 1855:0.0396194518258758 1880:0.042785404943956 1897:0.0817642431903625 1919:0.0446959324299907 1973:0.0484680082931016 1994:0.0876930474620791 1995:0.0792389036517516 2023:0.0448766273801178 2106:0.124777716112608 2219:0.0440096743203445 2241:0.042785404943956 2256:0.0464818718257863 2285:0.124047057010856 2423:0.0395223178961226 2444:0.0433752605177002 2565:0.0493532464337475 2594:0.052305688437558 2733:0.0398171548614562 2806:0.0487528488368576 2989:0.0471728356153902 3014:0.0548715024139629 3096:0.102929576169999 3151:0.052305688437558 3167:0.0474163886493078 3283:0.0503428584799026 3360:0.042929032225086 3380:0.0518747226220649 3497:0.053749572808866 3842:0.0469361441509392 3890:0.0619904917034459 3918:0.0635223558456083 4042:0.0619904917034459 4136:0.0635223558456083 4148:0.0518747226220649 4257:0.0635223558456083 4551:0.108583649809746 4590:0.107499145617732 4636:0.0619904917034459 4639:0.0585837773744826 4698:0.0548715024139629 4812:0.0585837773744826 4880:0.0595733894206376 5146:0.0568977439280446 5590:0.0653972060324093 5950:0.0653972060324093 6085:0.0554941569545829 6103:0.0606953190257346 6240:0.0548715024139629 6395:0.0619904917034459 8987:0.0678143083152176
+-1 4:0.0273806331232317 6:0.00633003617435657 11:0.1137803111119 13:0.0420706672600127 17:0.0689861605350927 27:0.0184315471933015 33:0.0700567208119642 34:0.151341669697995 40:0.0791025649414811 42:0.0378718625574841 58:0.0424623762654503 59:0.0393061589254715 63:0.0820941701436684 72:0.0393933064528989 74:0.207570251183593 75:0.0256577866624058 78:0.0486304857055437 79:0.386345281189757 82:0.0474798355200099 83:0.0820076193979038 84:0.0743013709432924 86:0.196696954428457 94:0.228002396586623 101:0.061522748209774 120:0.0527381789222187 135:0.0576720956697202 139:0.0517852392879162 140:0.0447310484335744 142:0.0410367642927785 144:0.0752667803470322 145:0.0531190815953239 146:0.0568413777970231 154:0.0457587785686005 168:0.047012986990385 173:0.0946272576750584 188:0.0699630854109714 190:0.054273425010126 234:0.0454094010972003 240:0.0569851176445425 253:0.138337920176171 293:0.0599128536030368 296:0.114163218738523 317:0.0754567731536929 355:0.0380974302185335 377:0.0487199372291582 399:0.05968655117315 406:0.0593525319216562 415:0.0550735685541884 499:0.141446992792631 509:0.0587563638055199 518:0.0552033459882012 580:0.0572762160637637 594:0.0606100093616555 630:0.0875839006054163 671:0.0773155037998282 713:0.0632972526531198 767:0.060550832248949 871:0.0727082918737978 886:0.109044284748081 925:0.0935403247788375 944:0.138532525343715 971:0.0789372109019627 1113:0.0768537016433555 1153:0.0884453233802499 1215:0.0741979299823119 1261:0.0935403247788375 1290:0.382541791426072 1294:0.0718949040479321 1305:0.0575722766261375 1365:0.0765542379183605 1405:0.0896646636444309 1418:0.160711665976768 1516:0.101390612932378 1593:0.0960866022031596 2102:0.1768906467605 2211:0.0975149517979715 2851:0.22685903203301 3038:0.104067973739492 3062:0.111110280593523 3810:0.113429516016505 3886:0.128145779907746 4550:0.128145779907746 5157:0.112231215689212
+-1 6:0.00964162599106527 11:0.0288841741887702 17:0.0175127687561901 18:0.0516113544583617 23:0.0231181279069682 25:0.144723153118933 27:0.0187160683424841 37:0.0152063733128833 38:0.0261843342896008 46:0.269110668501323 51:0.0436552670762666 52:0.0262022394495817 58:0.0215589263297785 72:0.0600021100841301 74:0.0526936095797564 78:0.0740717654720761 82:0.0241063823118812 83:0.0166547082907224 84:0.0565862508148659 91:0.0513605898396469 92:0.042432649326801 94:0.019293498948713 96:0.0199124314705364 98:0.0208473882509153 111:0.100494170180045 118:0.0420897891286039 119:0.100878869058718 134:0.0460352670117023 142:0.00166680936115268 144:0.0191071616251206 148:0.0282510097982467 157:0.130276709197725 159:0.0193345334027529 162:0.0696254511209826 166:0.0239801039497836 168:0.0238693547608456 178:0.0778122182544276 179:0.0350389239088649 183:0.141368249159459 185:0.0187151731690652 186:0.0182375856974026 197:0.25085558762172 199:0.0150228647384611 203:0.0730934909415323 208:0.0240781637653664 240:0.0578647763616592 242:0.0450396831905035 249:0.0366769851571029 251:0.0363311256027186 252:0.0231942574870891 258:0.0304768686259295 275:0.0216120167265078 277:0.0291050594818453 287:0.0596633646110636 288:0.0667603638952203 294:0.184276941155 295:0.109152235855246 308:0.0474928043936321 325:0.0577188176539339 341:0.0268529879030139 343:0.0340523768289707 352:0.0455243923658485 353:0.0360529230900535 366:0.0405210914319433 369:0.0287391028919591 377:0.02473600466796 382:0.0282284277417039 389:0.0273900056282774 399:0.0303039554728708 400:0.0566382100533337 411:0.0240781637653664 412:0.0327556173996773 414:0.0474928043936321 423:0.0243499573428213 424:0.0662029539081233 430:0.0500270523056816 434:0.0278100034935697 438:0.0358365125173886 449:0.0367359705827905 454:0.0320671879792415 459:0.0293577497873306 460:0.131352059953283 465:0.0273286963088192 466:0.0296974591927308 471:0.0670047545473922 480:0.0236385318821792 483:0.0312045628003962 495:0.0354190007779264 499:0.239384098377795 505:0.0231181279069682 507:0.0171844252326202 510:0.0290553788531963 515:0.0232197807704958 517:0.0358365125173886 518:0.0280277500693067 532:0.0371602999855882 539:0.0298587738422347 549:0.0343182750115022 550:0.0261843342896008 564:0.0398222476282006 572:0.0348276090606707 576:0.0314611129163433 631:0.0431390377390074 633:0.0334207258731044 646:0.0417899917872538 661:0.0429077248651425 663:0.0601571112848261 666:0.0420024909434602 671:0.0392544976793123 719:0.0345924407704868 739:0.0328313113259059 763:0.0372226203033495 776:0.0400778680843229 778:0.0307128235258334 780:0.0326061513085713 782:0.0366183916640477 789:0.033023438495551 792:0.0705347864681286 806:0.0345001018297905 827:0.0274517441880058 836:0.0364449115461089 848:0.0355215401688763 861:0.0429077248651425 887:0.0406124734752092 904:0.117524229132645 909:0.0282963481411059 936:0.0376060845554923 989:0.038867989045096 1027:0.033584791782547 1032:0.0424434972481372 1035:0.0392531283448763 1044:0.0469105001518094 1073:0.0430277034269481 1078:0.0407981285063907 1080:0.0324956911386546 1098:0.072105846180107 1120:0.0517985720053829 1129:0.0374764015086025 1146:0.0735907064394477 1168:0.0417899917872538 1176:0.0362747785211545 1201:0.0409877764234276 1223:0.0394925535930288 1225:0.0286676993580187 1228:0.0395738287145455 1261:0.0474921365249017 1267:0.0431493369175867 1268:0.0435246398658051 1280:0.0423311608466686 1297:0.0474921365249017 1308:0.0375410046419454 1319:0.0339223751389884 1369:0.0597168798157391 1371:0.0962297251777579 1377:0.0306532402703594 1394:0.0416856321283109 1415:0.0474921365249017 1442:0.048332609164616 1447:0.0417899917872538 1458:0.0575902432811324 1476:0.041379764879483 1529:0.0476948647235867 1660:0.0452094200173362 1690:0.0840049818869205 1707:0.0367359705827905 1779:0.0437840199844277 1815:0.0417899917872538 1855:0.041582493078168 1903:0.432117880624729 1966:0.0582437487420158 1975:0.0456862003599642 2054:0.0500289999672792 2076:0.0400778680843229 2140:0.0511684262621619 2228:0.0508694726069934 2266:0.065061960056884 2272:0.0536045081703204 2339:0.100600706647338 2365:0.0444679508518973 2368:0.0517985720053829 2374:0.0517985720053829 2382:0.0558781195782015 2533:0.0511684262621619 2534:0.0558781195782015 2569:0.048332609164616 2621:0.0544449808100346 2626:0.0503003533236691 2754:0.0450560546167432 3000:0.0540147350780912 3065:0.0544449808100346 3094:0.105674433532093 3152:0.0589495884114653 3235:0.0544449808100346 3265:0.0553740802084241 3271:0.0575902432811324 3465:0.116487497484032 3569:0.0614864518538428 3634:0.0558781195782015 3714:0.0582437487420158 4111:0.0544449808100346 4178:0.0605573524554533 4307:0.0605573524554533 4610:0.116487497484032 4678:0.065061960056884 4697:0.0564127249690878 4992:0.065061960056884 5617:0.065061960056884 5702:0.0686374682599252 5786:0.0637026149265511 5821:0.0711743317023027 5919:0.066669724100872 6091:0.0711743317023027 6139:0.0686374682599252 6348:0.066669724100872 6500:0.066669724100872 6597:0.065061960056884 7028:0.0637026149265511 7576:0.066669724100872
+-1 6:0.0188179210038737 18:0.15109770779333 25:0.0706153937454977 46:0.0787849991150407 53:0.0724617469872915 56:0.260593740232872 91:0.0751817839032392 92:0.0621130380723723 94:0.112967524183674 96:0.0582957526181018 111:0.0588414658756844 118:0.123222316592514 132:0.0570655663894159 135:0.0857237550108434 160:0.0852811760620571 162:0.0509589710387489 168:0.0698800647400037 177:0.196404230775475 186:0.0533924641870256 242:0.065929221982667 284:0.171417667703968 288:0.0977240188896276 290:0.195685431053329 295:0.0798886834657205 353:0.105548751729645 400:0.0829071800419433 401:0.430534576913451 419:0.114460750981601 438:0.104915186852012 442:0.0800673448921042 497:0.147259613086354 504:0.0999488230645451 594:0.0900906674777108 647:0.084990283146913 661:0.12561691011191 913:0.0982021153877377 986:0.0841367682864245 1032:0.124257834583666 1559:0.136791934038876 1564:0.150706922689092 1621:0.460898008926802 1806:0.129364997560447 1898:0.135226820121898 2335:0.139038260910395 2440:0.165154228612262 3352:0.170514744682959
+-1 63:0.0995958459498035 96:0.285483898077591 111:0.28815634574334 122:0.495950725544958 313:0.522509540267406 490:0.476842643617692 671:0.281395243748853
+-1 6:0.0107334540497836 11:0.144697720611423 37:0.152355233891094 38:0.174896858174366 47:0.0508022854675578 51:0.0728982544482161 59:0.0666490426088165 67:0.121430103130061 75:0.108765837419593 76:0.0892974028271816 80:0.0698865829145933 96:0.0665020096423135 126:0.1019793437371 128:0.230749161183264 142:0.0194833867124419 146:0.385529750482195 173:0.0802268181520712 184:0.252959427938312 216:0.0933848719267511 219:0.179492122220978 229:0.0562096643049543 255:0.0999018348257425 292:0.105842124154184 303:0.287702835029865 307:0.103075771754103 313:0.121715917146471 324:0.113725513409785 357:0.0993597831679851 369:0.0959806490965428 377:0.165222818054643 385:0.11230250028774 434:0.185755428534045 549:0.114613539742719 560:0.127860465674006 597:0.0959806490965428 616:0.148039427442909 690:0.134139142890569 717:0.108772037509022 746:0.157948750832795 902:0.148039427442909 918:0.124105116525294 1102:0.128575901066521 1269:0.109647492602589 1579:0.134728175365878 1638:0.161417536851761 2251:0.154845816003275 7437:0.237702567873508
+-1 6:0.0216279015900646 17:0.0589264362016478 27:0.0944628935449667 37:0.0511659463648962 72:0.067297763535858 86:0.420035353695718 96:0.067000748939456 97:0.0674774099600246 122:0.349186804639478 136:0.136962325336368 142:0.0224337194986499 197:0.241163233289315 208:0.162034958689348 215:0.0688920711184083 239:0.0916819298272547 276:0.168014141478287 291:0.0870402256998956 313:0.367886218049455 323:0.0925081041398992 434:0.0935742611260255 490:0.223822180261614 499:0.161094479087005 507:0.115643271629914 532:0.125035856797964 560:0.257638739219549 585:0.133992697953026 672:0.151096036221619 1058:0.121309788413555 1307:0.177785073633007 1429:0.174290273063348 4088:0.184716779123869 4388:0.210382559602649
+-1 6:0.0174188441928689 11:0.313097975569752 37:0.041208419781244 38:0.0709580790170476 46:0.0729274835428268 47:0.0412223824267864 72:0.0542007856230563 74:0.071398364970821 75:0.0176511229910841 77:0.0656741245641117 79:0.118126203255045 82:0.130653891138334 86:0.0676582547877263 94:0.104568602567973 106:0.06096361316925 118:0.228121941139782 120:0.14512367644647 140:0.0615449218445664 142:0.0474280798966498 162:0.0471702679892304 199:0.0407111218251404 208:0.0652504748889809 237:0.0748446562995124 242:0.0610275091088301 286:0.0488010881406507 306:0.0683435223058049 308:0.0643514196242699 328:0.353443373492873 375:0.061741876809713 385:0.182250722452312 400:0.383715940598185 432:0.0818146596186814 478:0.0683001125442478 597:0.0778813588053143 705:0.298657266732595 746:0.12816399401599 767:0.083311175769086 886:0.0750163724910596 902:0.120123294377989 918:0.100702331153852 1035:0.106373778762374 1045:0.0452437061196879 1274:0.121289236208182 1319:0.0919277362157051 1433:0.0839704470189866 1970:0.119746954833769 3072:0.43579564227419
+-1 6:0.00684590615169123 18:0.036645944295188 27:0.0199336368450747 46:0.114647034598906 59:0.0425094371936334 100:0.0423037376677365 111:0.0856254318699619 142:0.00177524317005023 179:0.0373183711376005 199:0.0640006917242139 239:0.058040386839161 292:0.0675071831951244 336:0.0625899036356862 363:0.0639524768042061 406:0.0641895010090077 475:0.0554731340447842 507:0.0366047062566906 571:0.0540302815362633 574:0.0512591414018924 919:0.428581028017291 1018:0.222865285897179 1393:0.0783781289153888 2240:0.0929864685307315 2677:0.490694081418694 2750:0.11254905374844 3601:0.271387081686401 4700:0.584821273879615 5981:0.146205318469904
+-1 6:0.00684590615169123 18:0.036645944295188 27:0.0199336368450747 46:0.114647034598906 59:0.0425094371936334 100:0.0423037376677365 111:0.0856254318699619 142:0.00177524317005023 179:0.0373183711376005 199:0.0640006917242139 239:0.058040386839161 292:0.0675071831951244 336:0.0625899036356862 363:0.0639524768042061 406:0.0641895010090077 475:0.0554731340447842 507:0.0366047062566906 571:0.0540302815362633 574:0.0512591414018924 919:0.428581028017291 1018:0.222865285897179 1393:0.0783781289153888 2240:0.0929864685307315 2677:0.490694081418694 2750:0.11254905374844 3601:0.271387081686401 4700:0.584821273879615 5981:0.146205318469904
+-1 6:0.0268140918128518 11:0.150617015873504 18:0.0717675420263447 25:0.0503107556595302 27:0.01951905111918 46:0.0561312856853657 63:0.0144896526845675 72:0.0417176026702252 75:0.0135858277174507 79:0.227300303662018 83:0.017369251733481 85:0.0410810946784794 94:0.241455065469882 114:0.0470707941949371 142:0.00521496339897665 144:0.039853847258784 157:0.067933010820889 162:0.0363063094972126 184:0.0789922481407687 203:0.0508196329862914 208:0.0502223972248857 209:0.0421103559295253 220:0.053776774292757 337:0.0512495447714004 355:0.0403452667400163 398:0.104281482702352 404:0.112588117662411 406:0.062854468617404 411:0.0502223972248857 446:0.0827144614234914 499:0.0499308975352331 501:0.0697091766091128 521:0.0661031486596516 571:0.0529065436220481 574:0.0501930384869045 654:0.0700513863953482 717:0.067933010820889 812:0.0750855409812439 871:0.153996498610674 943:0.540007076897416 952:0.0624502051916206 1114:0.0820394041750244 1236:0.0738771919533246 1433:0.193892710475167 1467:0.0823738360325917 1509:0.084709772515581 1597:0.0939782241868057 2066:0.0897474755234883 2228:0.106103890844186 2322:0.106103890844186 2377:0.240244239762427 2813:0.391245811262592 3166:0.235332088405425 3320:0.0999150744122331 3376:0.0978462392564587 3469:0.110991034385724 4056:0.132871346099365 4187:0.118853117062337
+-1 6:0.020245654974747 11:0.0909772416081436 25:0.151946104714008 37:0.0478959131678298 51:0.137502140594681 63:0.131282839338263 82:0.0759285051237144 142:0.0892498843326947 157:0.102583992631537 286:0.170162264834824 304:0.0766499792978639 314:0.16155936791462 317:0.0603342442562228 328:0.205400901277274 343:0.107255665121466 346:0.168675019391062 386:0.483726714876354 490:0.209517627884618 502:0.0698734530642106 573:0.385508808736765 628:0.109999341685441 1117:0.12080957460244 1266:0.137907677009085 1269:0.103409643055345 1359:0.337124209932502 1363:0.114611719174369 1379:0.106846195386181 1658:0.295510467315302 1836:0.107951821713549 2223:0.128502936245588 2733:0.13162703405623
+-1 6:0.0524514078850434 11:0.0157132791004522 13:0.0232401592204715 17:0.381084841116465 18:0.0187180613636724 25:0.104974453364127 27:0.0101817280150225 34:0.0557348659536071 37:0.0165448377654432 41:0.0161013052330456 46:0.0292797780226281 50:0.331911588445596 53:0.0538595897887035 56:0.0322824858954155 63:0.0151164830468055 76:0.0290914398852992 78:0.0537277064697242 86:0.0271642265075509 92:0.0230837848257703 97:0.0218192544052473 98:0.0226823746430306 100:0.0216079561546834 101:0.0339856379086985 111:0.0218679327120431 118:0.045794530910568 139:0.0572131266130542 142:0.00453380465854226 144:0.0415779466597592 145:0.0293433880259348 148:0.061475325405294 157:0.0354359151577923 166:0.0521816637385194 168:0.051940669081091 174:0.0256321035093755 178:0.028220415670449 179:0.0190615243891432 183:0.0307622955112697 185:0.0203624820634927 186:0.0198428573591083 199:0.0163451767726535 215:0.0445533883747898 219:0.0292376044440058 242:0.0245020372728358 243:0.0329713085844792 246:0.180719273124951 275:0.0235143056905736 276:0.0543284530151019 284:0.0212353083958704 309:0.0257337869983223 335:0.0926063475694513 342:0.0326657262680268 369:0.0312687177335704 377:0.0269132669424809 384:0.0378931340044697 402:0.0533052400988856 403:0.0404989540538146 404:0.0293646854235551 436:0.0308864172124257 455:0.0510629727675645 462:0.0429686867930671 463:0.171874747172268 466:0.16155714261379 475:0.0283346369443083 478:0.0274219270577422 489:0.0796830824611992 493:0.0624337111747113 501:0.0363624170074398 510:0.0316128322939663 540:0.0395289900204973 546:0.0604223010194583 550:0.0284890784872778 559:0.5507655638961 567:0.0379451366991934 569:0.0980437739685642 572:0.0378931340044697 609:0.0247624188888332 615:0.0464285935273757 620:0.0497074981340059 643:0.0284502344111901 654:0.0365409239925515 673:0.0353559607476881 681:0.0382632146800063 695:0.0345178153628436 712:0.0321106399817389 716:0.0669628679390106 719:0.112911798628576 726:0.0966745837667946 758:0.0366314385665896 792:0.0383716279655802 810:0.0514567775134855 814:0.0388179630315711 882:0.0262590261534841 886:0.0301184495597072 906:0.0409161708161556 912:0.033254909734845 951:0.0455832506674955 981:0.0415022750695385 988:0.0516723927376603 996:0.0389328682814555 1009:0.0311652722712309 1026:0.0483820183464143 1028:0.0850767384321715 1036:0.0395289900204973 1106:0.0448063951274455 1143:0.083004550139077 1160:0.0442876485955653 1172:0.0530789759134157 1184:0.0460571481589005 1198:0.0416545715003646 1209:0.0553470018247754 1236:0.0385365800002045 1239:0.0468150003929821 1255:0.0550324007324543 1263:0.0474957449569113 1313:0.0456995487421902 1328:0.0521187278036511 1329:0.0470815306898814 1335:0.0375869014025949 1341:0.0401646180069421 1386:0.0500695967178272 1412:0.0438919441150805 1439:0.0824094963380847 1450:0.0498868393123702 1551:0.0374373741109151 1567:0.0512459014712734 1614:0.0441871819845057 1716:0.0563578805200459 1740:0.0500695967178272 1923:0.0518929650653751 1927:0.138619433774042 1929:0.0483820183464143 1985:0.0491887516021258 2024:0.0340549123879035 2056:0.0455832506674955 2086:0.0521187278036511 2157:0.0563578805200459 2234:0.0538680071831307 2241:0.0488578748931989 2289:0.0592372261360652 2307:0.0490218869842821 2348:0.0563578805200459 2380:0.0541461273429513 2424:0.0490218869842821 2528:0.0402305596664318 2602:0.05333484370836 2616:0.0464285935273757 2675:0.0578962838573134 2751:0.0597293582994557 3099:0.0649731575097403 3185:0.0550324007324543 3213:0.062659334500981 3495:0.0607965097289913 3702:0.0658876085221052 4238:0.0633703614899072 7186:0.0774390939147057
+-1 11:0.265647713045237 18:0.316446373930754 25:0.443672884667842 74:0.323082039908279 100:0.121767584800472 142:0.020439524748227 237:0.169338361203108 456:0.427079301273464 457:0.135878164744501 671:0.120341188304922 818:0.302039913735902 1045:0.102365291362998 5318:0.408774244816718
+-1 6:0.04095599398931 11:0.0460106546949796 17:0.0557934563562747 18:0.219236291154171 27:0.0298135079828067 46:0.0857352400814941 50:0.0971883041572973 57:0.0764419819590131 58:0.0686840003436621 59:0.12715747306595 63:0.0221315766500026 76:0.170367519928255 77:0.0772080231362913 78:0.0786610781278798 83:0.0265298923625786 94:0.245866546070704 112:0.114000823592042 142:0.0106204857313417 144:0.0608729894778426 148:0.18000825616361 157:0.103761261141149 199:0.0478609384844006 216:0.0890829325673034 242:0.0717453543004606 307:0.0983274039471394 308:0.0756530205492663 341:0.0855502079345855 367:0.0873920525269656 399:0.096544552185701 430:0.079689916492032 434:0.0885991380225293 499:0.152529464999722 501:0.106474186712309 516:0.143542865885021 570:0.118786497113048 594:0.0980382698745125 599:0.0960042673405721 668:0.147712569506639 681:0.224079970438631 758:0.107261919049042 772:0.0948681209222002 882:0.076890060772842 920:0.134508312887205 997:0.0973749755821901 1058:0.114860032639329 1106:0.131199322633834 1198:0.121970347087863 1236:0.112840436689236 1253:0.125307445343662 1337:0.131830673834501 1407:0.124805754403233 1472:0.104116136757673 1652:0.122652824683139 1682:0.143542865885021 1899:0.147156235563054 1932:0.132151750998783 5041:0.187805899457954 6274:0.476286986764807
+-1 6:0.0305262692935379 11:0.0623522290759878 12:0.018707653040697 17:0.0151219164114488 26:0.0240229289341073 27:0.00808047045462098 29:0.0403147123155308 33:0.0307131711045093 36:0.148423562619479 37:0.210086260474308 38:0.0904385411420038 40:0.0346789085143472 41:0.0255567858470578 46:0.0232371539369964 49:0.0250673645340778 58:0.0186156904381129 59:0.0344639820576036 67:0.0156977682338598 72:0.0345403937677206 76:0.0230876841464148 77:0.0209259893257875 79:0.0188194946245366 93:0.0275108877879779 94:0.0832977019363909 97:0.0173162984027196 98:0.0360025838194122 111:0.0173549307074977 118:0.0363436691159004 142:0.00143925567590572 144:0.0164986419325035 145:0.0232876364043713 146:0.0249195072487305 159:0.0166949727962033 176:0.129461758205261 178:0.0671892535448999 179:0.0151276958507684 197:0.0309440930963152 215:0.0176793338952173 218:0.0157415113796582 237:0.0238480297866307 248:0.0337594988916603 253:0.0303239729419871 264:0.0456898174336381 268:0.0267027519401483 301:0.0251531616213954 304:0.021013154425743 306:0.0217765494058754 308:0.0205045309563612 313:0.0314694331716167 318:0.334969069753706 337:0.0212162174180255 341:0.0231870039580971 342:0.0259243259688413 355:0.0167020791065073 369:0.0496312510857107 387:0.0391789635388682 399:0.0261668436314527 414:0.0410090619127223 415:0.0241444919878671 423:0.0420513768766957 430:0.0215986664875677 434:0.0240133672799861 439:0.0299100443559022 441:0.0195687340428695 455:0.141836920763963 505:0.079848116003881 510:0.025088723344543 517:0.0309440930963152 547:0.034833729313383 557:0.0522354364583934 576:0.0271660253358815 580:0.0251101422361293 588:0.190186800371857 618:0.158945867089063 628:0.0301556918180493 656:0.0273941895507315 658:0.0256661856229432 671:0.0169477265686544 681:0.0303666308179149 688:0.0308068927909273 712:0.0254837958024985 742:0.0569631828365768 759:0.0410084852217801 764:0.0256661856229432 774:0.0622619183689586 811:0.0315190386300427 820:0.082367073721624 837:0.0301141962878988 884:0.0573008645626662 886:0.02390274435215 890:0.0291441317989778 950:0.0302393675055747 963:0.0235451945865061 976:0.0406700112346427 985:0.0355594601889978 987:0.022656111997068 991:0.0294792944527565 1015:0.0346814360180424 1036:0.0627423626893907 1057:0.0378066026896911 1058:0.0311309591844793 1111:0.0344585592988939 1132:0.0859434040236235 1160:0.0351477701479645 1162:0.0965854921416944 1177:0.0374730715206034 1183:0.0395914259881299 1232:0.0314201487863681 1261:0.0410084852217801 1299:0.0410084852217801 1319:0.029291274753358 1331:0.0941135440340861 1361:0.0834684321947898 1377:0.0264684438858125 1440:0.0343856935664049 1483:0.0778099569781887 1499:0.0423278473115133 1575:0.0450143742456378 1584:0.0372585668868922 1595:0.0347572019261285 1640:0.0431990147409535 1664:0.0329372290247941 1708:0.0497279931652417 1715:0.0459479187080147 1733:0.141036370712301 1779:0.0378066026896911 1788:0.0341711889326937 1897:0.148199759352566 1923:0.082367073721624 1943:0.033305740174899 1947:0.0385209772456198 1980:0.0344585592988939 2118:0.0413627077376712 2137:0.0391721782184978 2265:0.0482496094851837 2280:0.0376937945384398 2307:0.0778099569781887 2311:0.041183536860812 2361:0.0466406152110432 2456:0.0391721782184978 2594:0.0474026917926028 2619:0.191257527334545 2646:0.0413627077376712 2753:0.0394490964060656 2809:0.13992184563313 3042:0.0439247456165683 3059:0.154692900505572 3071:0.0466406152110432 3147:0.0423278473115133 3213:0.0497279931652417 3218:0.152705279363504 3618:0.051564300168524 3734:0.0450143742456378 3790:0.107978275484066 3874:0.0456238523144627 3921:0.0859434040236235 4052:0.0502922817190098 4639:0.0530922893070081 5478:0.0487112302686612 6013:0.0539891377420332 6373:0.0530922893070081 7189:0.0575679385175108 7369:0.0530922893070081 8646:0.488760021135044 8647:0.209468580486447 8844:0.129089905377554 8864:0.0614575747345786
+-1 6:0.0342888665388341 11:0.0770413824463556 63:0.185288306821216 75:0.10423831692856 85:0.105065961773461 86:0.133184776382381 120:0.428512332810385 122:0.184533540182577 142:0.0355664099291174 242:0.120132202335608 276:0.133184776382381 304:0.38945258826555 339:0.13335129408108 373:0.122389581312738 586:0.378085272260302 856:0.128671058361238 1045:0.0890619023675126 1271:0.218649488707951 1710:0.47751393684801 1746:0.200262668209845
+-1 4:0.0265946518208919 6:0.00614832780940435 11:0.138142704027099 25:0.0461439485316267 36:0.0469765134197821 38:0.100184266118192 46:0.102964828244988 47:0.0291005209574434 63:0.345529584137157 72:0.0765249849755764 75:0.124606304702728 76:0.0511512605880127 77:0.046361979238682 79:0.0833899898811513 82:0.230584458818906 85:0.188393504889401 97:0.0383646313939565 120:0.358570033736727 138:0.103113789998086 142:0.081311898258656 146:0.055209704053519 159:0.110964213464561 185:0.0358031995100657 192:0.0993061040955771 242:0.043081748391332 301:0.0557273703394885 304:0.046555095391594 314:0.0981267294990696 317:0.073290730733608 328:0.249509749123947 339:0.143467116748847 345:0.0451196249850656 346:0.153672871601454 357:0.0569151845393537 385:0.0643290204981752 409:0.0627994529126287 476:0.0763436789505334 498:0.189527194798111 501:0.12787153027083 515:0.0444207721721858 537:0.0687630364507456 647:0.16661185514396 784:0.241498824434424 902:0.0847998160157852 1045:0.0319393334547507 1312:0.239839952315727 1640:0.0957083458932823 1746:0.0718180947011248 1808:0.061819704133802 2002:0.0952047296548772 2376:0.341376212997367 2496:0.112773943145799 2532:0.0901052842540581 3357:0.127543005437432
+-1 6:0.0124206174274631 11:0.111628249521203 18:0.0664872179479422 27:0.0723317181698409 33:0.274926620783947 38:0.101194217377437 48:0.0759848542007826 63:0.0536942840079537 74:0.10182211476603 79:0.0842306391023531 83:0.0965478147633397 86:0.192976592298174 94:0.0745633058680746 126:0.118009208236915 132:0.0753313363637275 138:0.10415327360254 139:0.101611527622939 142:0.0289876229539273 162:0.134540236116238 185:0.0723282586060977 199:0.0580586477075122 219:0.103853008128131 286:0.0695958513811237 299:0.102822435535694 328:0.252025041146193 398:0.0966089331277459 410:0.158036430666338 416:0.120841002043879 461:0.135912295851099 483:0.120595821771389 558:0.275765563348796 599:0.116459854579759 631:0.0833594070815906 706:0.126444829679349 717:0.125869627655643 756:0.164916011166736 1126:0.132455905207725 1495:0.560371003225999 1499:0.18944725679441 3313:0.225093771943523
+-1 6:0.0175810495370257 11:0.15800678154891 29:0.0638509444293903 51:0.0597024879722956 63:0.0950035165836129 82:0.263741096352258 83:0.0683304160988297 92:0.116060897377638 114:0.370351815126563 120:0.219712615517153 142:0.0843419106682281 157:0.0890825344208686 162:0.0476095204142731 234:0.0630600606494714 286:0.0492555268628433 296:0.0792692627918626 304:0.26624716952425 309:0.0646923031576693 314:0.0701479713553448 317:0.104786862995616 328:0.178367329918927 346:0.146475077011435 375:0.0623168209487106 386:0.2100308275339 457:0.0606150658552679 489:0.100157861092375 490:0.0909711194652423 510:0.079471666201603 518:0.153321834772419 521:0.173365965813795 535:0.0833596953785214 628:0.0955219219938384 866:0.0983134266448607 1005:0.18533280477568 1245:0.0859629414330592 1266:0.479028552853851 1269:0.089799517942485 1726:0.118700636558374 1980:0.109151792412167 2223:0.223180380245038
+-1 6:0.0101926305931898 11:0.091604585502996 38:0.166084380574281 46:0.0853469830274124 63:0.176250820075593 75:0.0826283876064446 77:0.0768583820833721 79:0.0691215065605584 85:0.124926676717323 120:0.339676274261648 138:0.170940913219794 142:0.0502188536396703 159:0.122636839584052 185:0.0593541525391973 314:0.162673418872045 328:0.413634533007477 339:0.079279405643397 498:0.209464073682588 501:0.211984024248494 537:0.113994609711026 647:0.184138207392574 784:0.200177054839579 1045:0.0529486776549285 1312:0.39760404962521 1640:0.158664248982191 1746:0.119059251862858 2002:0.157829359490622 2376:0.141482437999729 2496:0.186955409447156 2532:0.149375554681908 3357:0.211439399373028
+-1 11:0.18552134310048 63:0.0892375875166085 75:0.0836711904911862 85:0.253006601431752 111:0.258187245426857 122:0.444370403731995 140:0.291739901309565 142:0.0214116359604092 239:0.350019550833218 324:0.43743280619949 412:0.420774787906951 1045:0.214467643513663
+-1 63:0.108511936377582 75:0.101743258103277 77:0.378553784346092 85:0.307653277074089 111:0.313952883856793 122:0.540349580482238 142:0.0260363165761674 304:0.380130611990288 586:0.369035385202848 1045:0.260790323177138
+-1 6:0.0226541451726912 11:0.152700293572076 27:0.131926875099352 33:0.0626803338828571 38:0.276854412169134 46:0.0948461207279528 51:0.153859850840742 63:0.0244834468166279 74:0.185714839312237 82:0.0849612116754718 83:0.146745805547925 106:0.237859388550024 114:0.397682163740068 120:0.188741158587257 123:0.114918036535272 138:0.284950010840753 142:0.0440591233651494 151:0.0894547128596277 154:0.0818815235857223 162:0.122694948876143 199:0.0529470069172222 298:0.112290041695571 398:0.0881032206666152 410:0.288244949479973 474:0.152511420695139 519:0.135433138511594 630:0.156724096391703 1051:0.182560343717252 1259:0.358571599343819 2150:0.16957737466626 3313:0.205275905841935
+-1 63:0.108511936377582 75:0.101743258103277 77:0.378553784346092 85:0.307653277074089 111:0.313952883856793 122:0.540349580482238 142:0.0260363165761674 304:0.380130611990288 586:0.369035385202848 1045:0.260790323177138
+-1 11:0.0435000268676516 27:0.253680276053818 38:0.157736099729248 51:0.131491056543373 83:0.10032902493726 86:0.0752003814966562 106:0.0677594623468447 114:0.271892362265514 120:0.0806505862973543 137:0.158495772565609 138:0.0811742586575949 139:0.15838658048011 142:0.0903686930671202 181:0.245125391036934 254:0.0934239899827631 386:0.231289987713133 449:0.221299829715323 838:0.255005612711598 1418:0.122885264060476 1459:0.147650093876898 1640:0.15068894326115 1962:0.628085480866908 6322:0.18832758484686
+-1 4:0.0686476011734347 6:0.010580271506869 11:0.166404777433126 38:0.0431002041980247 47:0.0250386301987785 54:0.0396102153041517 63:0.160084663480769 75:0.150099019321022 82:0.0396798325527935 84:0.0310475586655131 85:0.324194560480605 86:0.123287635633389 98:0.0343154300075829 122:0.227760804521685 132:0.0320847975697737 140:0.0747652342227303 142:0.0219489479565316 173:0.0395409303586776 190:0.0453573689310864 218:0.0300076647093853 231:0.0567128048058673 238:0.0521657988761586 239:0.179401539406241 254:0.0510548067584135 276:0.0410958785444629 302:0.0671549503636245 317:0.0315303548434874 324:0.168153718768356 339:0.0411472597256093 345:0.0388217656433281 347:0.0434578855862523 364:0.0490150710035432 369:0.141916291177594 375:0.0750044965966059 398:0.123441779176828 412:0.377417141127551 427:0.0561956703185871 458:0.0556963278125552 493:0.047226969831127 528:0.0553498872978582 537:0.0591649972023941 599:0.0496020784916813 603:0.0566377908481259 664:0.119604257637602 667:0.0509533016698157 673:0.0534888879794128 684:0.0495102100298389 709:0.0461345221855834 782:0.0602749774223022 827:0.045186399127393 829:0.117733378268411 856:0.039703112699752 882:0.119179290733659 908:0.056268428207855 930:0.0463171053290563 954:0.072288095142166 967:0.0677861440914162 985:0.0677861440914162 991:0.0561956703185871 1003:0.055908231846301 1005:0.111533238645773 1035:0.0646118334865344 1045:0.0824435920241929 1078:0.134309900727249 1111:0.262750092763235 1207:0.0602749774223022 1331:0.0598021288188009 1342:0.151497342647625 1436:0.0710251103422536 1513:0.176469275294355 1538:0.201930582862481 1851:0.0716428703175667 1932:0.068278230826981 1981:0.0760305281123084 2024:0.0515205740515593 2369:0.0689614236787667 2792:0.0810862584752573 2835:0.0863791147175982 3120:0.101208554741265 3257:0.0919770706173199 3467:0.0766112122858106 4722:0.102918195352277 4797:0.209712852037098 4849:0.0947952778855455 6101:0.107093949113273
+-1 51:0.322670899913612 63:0.102692102899354 85:0.291152872589812 111:0.297114611819161 122:0.511368947720381 142:0.0369598616089989 237:0.408275793901353 349:0.470983542584488 1045:0.246803325024761
+-1 6:0.020140026686911 11:0.135753874807337 29:0.0182861626389847 40:0.031459689270387 51:0.136784746383285 75:0.0816343688842265 82:0.11329854144479 106:0.140974772213861 114:0.0707096147709732 120:0.0838974929729003 123:0.153246942556308 142:0.0313356134557021 146:0.0452124930340228 162:0.0272696180530958 173:0.0376339771683571 174:0.0369078211769764 186:0.0571437011232686 209:0.0316290291737373 227:0.0715784443540287 234:0.0361193255750714 239:0.0426873708884603 264:0.0414484630820575 286:0.0564248239791576 298:0.149742425890516 303:0.674799410856732 328:0.153246942556308 343:0.373436268768328 368:0.0613729757118642 375:0.0356936152846656 390:0.0459932171761596 404:0.0845647769902551 513:0.15071161808452 521:0.148949946250591 535:0.0477464808343921 614:0.0608924006199946 631:0.0337918121428529 771:0.0534166000290354 812:0.112793288672086 885:0.0705869121475746 963:0.0427190207094223 964:0.0603142769038445 1043:0.0563116278166217 1051:0.162300107393561 1143:0.059759377381725 1309:0.237747321042481 1312:0.0654701461108085 1319:0.0531443716974507 1659:0.0708271815220286 1936:0.0677929813604597 2002:0.0779653368935745 2360:0.079694483337406 2423:0.0649853545864913 3105:0.0788028745803761
+-1 6:0.0159530170024323 11:0.119479256497211 27:0.108386505416262 38:0.043324552363519 47:0.0251689630094022 51:0.0361159631455719 82:0.0797727535262097 83:0.0551137006929448 114:0.261377402969354 120:0.0443037523456696 123:0.10790015847774 138:0.0445914210610939 142:0.0427474463949656 162:0.0864016095338343 211:0.211545266709048 234:0.0762941345905276 258:0.0504269719465264 264:0.0437753829924156 286:0.0297962589719822 298:0.105432651476823 313:0.0603016850151619 317:0.0316944788284694 320:0.050475205788392 328:0.10790015847774 386:0.169405907732986 408:0.0313127421317743 498:0.0546405218670068 558:0.0590321260393685 685:0.056199249243646 735:0.691456451568816 853:0.0562709482767546 856:0.0399097780894953 891:0.299213699795041 896:0.134700218646422 902:0.073343134840323 1120:0.0857058239626122 1271:0.0678183010605029 1393:0.0608815251772591 2754:0.0745496668331155 4112:0.169326371901257 6322:0.310361736794482
+-1 11:0.0994976942553813 27:0.193414459430242 38:0.180395040578332 51:0.150379871960478 54:0.0552625873439704 74:0.181514369111422 82:0.110719429086922 86:0.0573353252463272 106:0.413296925877468 114:0.310949958874449 137:0.0604212803802142 139:0.0603796545027136 142:0.0555029076511984 145:0.0619348648056844 159:0.0444012807960768 162:0.199866421739979 176:0.114770435160235 181:0.186891924502546 218:0.0418654930112731 225:0.0703263423575084 258:0.069989379803309 286:0.0827105656123566 294:0.211593733296411 295:0.0626663567820871 330:0.0734027914316979 345:0.0541625739279105 358:0.293195264898836 424:0.152033456653564 456:0.0799807482883785 599:0.0692028350272993 622:0.0814562621605443 630:0.204239112583923 655:0.22354297463268 671:0.045073494603183 698:0.0829208265962316 735:0.0959696891132321 791:0.098264706310511 829:0.109504598748913 847:0.236124049516241 886:0.0635707812604528 902:0.101795533662978 1050:0.0871257276917239 1150:0.0805356044289856 1385:0.117507033401495 1734:0.102119556291961 2076:0.0920378391064132 2223:0.0936918994646519 3561:0.121339369781656
+-1 51:0.345664846864016 63:0.110010075381302 75:0.10314794728696 85:0.311900804022675 111:0.318287384524071 122:0.547809762368104 142:0.0263957795318393 304:0.385378776527221 586:0.374130366665546 1045:0.264390850160501
+-1 6:0.030716972292795 38:0.250259698402827 63:0.265578719220024 75:0.0933797414771892 77:0.231623894473463 82:0.230399440376477 85:0.282363510008955 86:0.119310828817463 106:0.107505273935176 120:0.255915943622695 122:0.16531055742131 123:0.155818465772505 138:0.257577631557931 139:0.125645866513896 142:0.107532336815357 157:0.155641774162289 168:0.114067011546895 197:0.171255734730912 211:0.152746109760532 239:0.130211027941215 276:0.119310828817463 296:0.138496381784262 298:0.152255142413298 299:0.127143192432774 341:0.128325214983448 430:0.119534784458646 457:0.105904445265399 493:0.137110803142771 684:0.143739576882282 1045:0.0797842642091464 1741:0.233133699104277 1805:0.222420046931014 2940:0.250778524136551
+-1 6:0.0138583957426213 11:0.124550044871392 63:0.119819588880279 75:0.112345570121016 77:0.104500390287924 85:0.084928189486036 86:0.107657529939589 118:0.181493335773926 120:0.230920182481759 142:0.0431242062245285 186:0.0786414076480841 192:0.111918503117987 199:0.1943380965345 237:0.238185003490357 242:0.0971067153540338 276:0.107657529939589 296:0.12496919614292 304:0.419742704535268 339:0.107792131540614 349:0.137384114378199 436:0.367228058363715 586:0.203745641324745 657:0.143937061597089 761:0.140920288908854 847:0.147788655719888 856:0.104008946774161 1045:0.0719915945429009 1067:0.147404562428 1271:0.176741400302912 1710:0.38598984320243 1746:0.1618787430831
+-1 6:0.0141262354011658 47:0.0668605874775615 63:0.183202992932453 76:0.470095135153599 86:0.109738214933313 120:0.353074726382486 122:0.152047267300437 140:0.199645405652946 142:0.0586102172218559 227:0.100410388755978 234:0.101336528205577 246:0.146014173687333 264:0.116287978286384 276:0.109738214933313 304:0.106963756164637 317:0.0841954224921772 345:0.103665657315222 357:0.523067292198653 408:0.0831813505261115 457:0.0974074599272805 458:0.148725755695372 586:0.103841705229383 882:0.106081380788425 1045:0.293531872030649 1269:0.144306416598762
+-1 27:0.163034418346749 38:0.22808998303408 59:0.173839360598768 77:0.211105066049033 82:0.209989082468816 138:0.234759643630033 142:0.0145194647571144 143:0.246685828008166 298:0.277534681545101 471:0.291836965547509 524:0.316478002865409 6007:0.651140851137905
+-1 6:0.0141262354011658 47:0.0668605874775615 63:0.183202992932453 76:0.470095135153599 86:0.109738214933313 120:0.353074726382486 122:0.152047267300437 140:0.199645405652946 142:0.0586102172218559 227:0.100410388755978 234:0.101336528205577 246:0.146014173687333 264:0.116287978286384 276:0.109738214933313 304:0.106963756164637 317:0.0841954224921772 345:0.103665657315222 357:0.523067292198653 408:0.0831813505261115 457:0.0974074599272805 458:0.148725755695372 586:0.103841705229383 882:0.106081380788425 1045:0.293531872030649 1269:0.144306416598762
+-1 6:0.0152355477492034 11:0.0342317428193998 15:0.0391487718848351 17:0.0415101080750715 18:0.0815554612863127 25:0.0285861600496905 27:0.0665433916063958 36:0.0582038674160675 37:0.0720866253001319 38:0.217224412928899 42:0.0227881229448293 47:0.0360555252027767 50:0.0361538545258868 51:0.0517375316150798 63:0.0329316087803195 74:0.0312246090120412 75:0.00771935623799363 77:0.0861636899904026 78:0.117047054175654 82:0.0285693983914304 85:0.116709710687186 86:0.0295889486131397 97:0.0237668757913804 100:0.0235367167225682 106:0.0533223691032449 111:0.0476397984026807 113:0.0407790937272164 114:0.026745240433844 118:0.0249411118240193 122:0.327974628102337 135:0.10410674716191 138:0.0638789570033255 139:0.280440276219926 140:0.0269154079656948 141:0.0347929954274722 142:0.0286432958270582 144:0.0226446301869391 148:0.133925421648775 157:0.115796944084387 162:0.041257896467485 169:0.0832915390530412 176:0.0197431309794561 185:0.0221800696311079 188:0.0420979398497986 190:0.0326572129873584 197:0.212356128311329 208:0.0285359555095007 215:0.0242651473767616 218:0.0216054572997068 239:0.0322921854856212 242:0.0266891281289252 264:0.0627099505114545 276:0.0295889486131397 296:0.0343469437295576 306:0.0298886362926741 324:0.0403567780190099 328:0.0772856013560118 331:0.029775243950427 339:0.0296259429586184 342:0.0355815210010438 357:0.0352589370063229 369:0.0340598132606575 381:0.109841091603327 390:0.0347929954274722 391:0.039417295067973 412:0.0388199386760503 413:0.0329332429788197 430:0.0296444893551182 432:0.0715599232304714 441:0.0537167540746921 449:0.0870744158370319 457:0.0262641808787963 458:0.0401012422645561 459:0.0347929954274722 466:0.0351955980749632 480:0.0280149309005879 485:0.0263586376119063 506:0.0426173149351441 507:0.0203659215325936 518:0.0332167617432504 532:0.0880801939418413 534:0.0290316753480643 550:0.0310320589898427 576:0.0745715435120921 586:0.0279990601432708 662:0.0397049524482355 671:0.0232610054952753 681:0.0416786501403059 696:0.0420370015332072 712:0.034976886829102 713:0.0380869985821219 738:0.0461536525573551 741:0.0461536525573551 771:0.0404086435928795 787:0.0437497757553835 800:0.0671781950356763 822:0.0509937818611185 827:0.0325341150779072 829:0.0282559306270931 836:0.043192262689207 847:0.12185615652211 848:0.0420979398497986 876:0.036759356585942 904:0.0928549814262655 908:0.0405131533806494 912:0.0362232959221353 915:0.0471948732336965 921:0.0515827202971411 944:0.0416786501403059 950:0.0415039793609715 953:0.0416201015743756 964:0.0456266051685227 986:0.0340598132606575 1041:0.0543398180130536 1042:0.0433978606316218 1045:0.0197864059550985 1112:0.0458868067837409 1141:0.0507113081336053 1167:0.0973808093012098 1188:0.0469004624498486 1246:0.0535794178823837 1254:0.104737744249328 1272:0.0481314001978137 1277:0.0449628334447787 1305:0.0346421862927594 1321:0.0441883390548116 1338:0.0481314001978137 1385:0.060641664768825 1386:0.0545388886354854 1395:0.0406719041549028 1400:0.116191193541832 1404:0.0515827202971411 1418:0.0483514270969384 1439:0.0448827495917195 1468:0.05339765866309 1481:0.133713768672268 1499:0.0580955967709159 1506:0.05339765866309 1513:0.0635287588855575 1531:0.0520472808529724 1559:0.0553754063035487 1614:0.0481314001978137 1618:0.0583819404824336 1624:0.0482408346185271 1704:0.0578168898092337 1714:0.0586763512662816 1734:0.0527006743318864 1789:0.0578168898092337 1805:0.275799581831864 1808:0.0382972851875075 1855:0.0492810076389422 1942:0.0494032416836497 1943:0.0457126212235112 1947:0.0528706112742577 1956:0.113541856848806 2027:0.0635287588855575 2285:0.0514323451605466 2317:0.158025694925264 2380:0.0589792968743564 2425:0.060287363324312 2501:0.154214849241507 2554:0.0578168898092337 2555:0.0514323451605466 2646:0.0567709284244032 2662:0.0599446804376214 2774:0.0613884746613186 2931:0.0578168898092337 2934:0.0662233029800914 2940:0.0621927861661904 2956:0.0630641983297262 3082:0.0717688413568971 3237:0.0610084003512533 3349:0.0580955967709159 3398:0.0662233029800914 3441:0.0754964125627233 3556:0.0662233029800914 3659:0.0717688413568971 3808:0.0741008904418688 3879:0.0790128474626321 4116:0.22648923768817 4680:0.0813448965476037
+-1 51:0.320150913946421 63:0.101890101050668 75:0.0955344747816048 85:0.288879035211138 111:0.294794214619934 122:0.507375273135353 142:0.0244474756924618 304:0.356933511290144 356:0.449598114739746 586:0.346515359920891
+-1 6:0.0112334253872874 11:0.100958556966525 27:0.228963284135553 38:0.274565503004926 51:0.152587806014604 82:0.168517580318228 83:0.0873195458908153 106:0.393154788167049 114:0.236636582674377 120:0.280771095930289 137:0.275887837935182 138:0.282594170866795 142:0.0757377610184202 181:0.0948179711483779 211:0.111720778391679 254:0.216826330783919 294:0.107350216186592 386:0.178932482588784 457:0.0774600877150887 468:0.300788578491344 609:0.0795498527721456 735:0.146068128481388 1029:0.173052239354507 1815:0.292136256962775
+-1 6:0.00687630658903324 11:0.0617996707641673 27:0.180199400648501 38:0.280115891093289 63:0.0594524967979352 75:0.0836160185947012 82:0.206309030052673 83:0.0356338901127405 86:0.053417884452953 114:0.531124508688962 138:0.0576613719668208 139:0.112508419327116 142:0.0677588049559818 168:0.0510701208188558 211:0.205162619085717 234:0.147984445286588 286:0.0385296797213362 309:0.0506049550143153 314:0.0548726009357091 317:0.0409842765611577 339:0.0534846715395111 386:0.328589339386115 404:0.0577450409831015 412:0.140165777823353 449:0.0785991274107896 457:0.189662295579096 491:0.0820643910896676 505:0.0494628194663776 521:0.0678069605872454 655:0.0520673456455313 805:0.0896385110199775 829:0.0510113440353349 960:0.0792431261827028 1037:0.0769047674889676 1289:0.46561975361606 4880:0.133776730469121
+-1 4:0.192214235993085 11:0.199686722664505 63:0.0960512741654058 75:0.0900598579731782 85:0.272324780578092 86:0.345207090788136 111:0.277900989780685 122:0.478300060183833 142:0.0230465095840961 356:0.423833830154334 603:0.47575980122179
+-1 6:0.0140375655086168 11:0.126160303577289 63:0.12136868937503 75:0.113798041957081 77:0.105851434869277 85:0.0860261927556233 86:0.109049391941885 106:0.0982591845968363 118:0.183839791965846 120:0.116952829499596 142:0.0436817421818996 186:0.0796581315797387 192:0.113365453572183 199:0.196850617603083 237:0.241264404030764 242:0.0983621700105251 276:0.109049391941885 296:0.126584873891298 304:0.425169393420952 309:0.10330696601094 339:0.109185733754244 349:0.139160299737731 436:0.371975805975053 586:0.206379788852115 657:0.145797967442425 761:0.142742192082695 847:0.149699357315794 856:0.105353637674974 1067:0.149310298232301 1271:0.17902642058391 1710:0.390980154575233 1746:0.163971609895139
+-1 6:0.0142098133046016 29:0.0516072716679019 37:0.0672333876100516 38:0.231542585517401 63:0.245715885134742 75:0.115194399602035 82:0.426335382540596 85:0.174163552449705 87:0.132379013662012 142:0.0663266077914489 208:0.532295401430018 286:0.0796211670374713 291:0.114373126032169 339:0.110525496121202 346:0.355163693793065 387:0.100306776305 399:0.26797153305438 515:0.102663829740424 994:0.162686802064403 1213:0.180801654040877 2171:0.19661038923182
+-1 6:0.0149090236229191 12:0.150757429088814 15:0.0255398306840132 27:0.0434115011261864 28:0.110095609085569 42:0.0445994681516075 63:0.0161129137372887 74:0.061110823324521 75:0.0151078341783928 86:0.0579096125866176 108:0.414039324400743 142:0.00773225392584919 158:0.0535051003425826 172:0.116917974590656 173:0.0557184817428356 174:0.0546433811982612 185:0.130228274374501 198:0.0649077239467469 231:0.0799159592477124 256:0.0507302148827068 260:0.093987763569933 316:0.101556053230925 345:0.0547050820656199 350:0.10880785392024 367:0.0636258602792061 404:0.0626006249849699 462:0.0916020931002967 499:0.0555246052010271 565:0.0792897729354863 827:0.0636737054987275 884:0.076960758673126 916:0.0903289999924797 1069:0.11868401812056 1273:0.10008392007952 1315:0.113701015402017 1755:0.115430537167122 2152:0.120145627051502 2528:0.085764861509245 3277:0.14261644727164 4882:0.150909758427738 6460:0.693522314591502 6529:0.165087267491778 6530:0.165087267491778
+-1 6:0.0215625925919213 15:0.0369376947702629 42:0.0322516143877833 75:0.0327751918811975 96:0.066798429182735 108:0.249506649319946 140:0.114278656592437 142:0.0111829886005456 154:0.0389680987833755 159:0.0324299034549352 165:0.261697796861812 172:0.0845479461477072 205:0.0426546436931941 306:0.0423008413032437 316:0.220317425518286 327:0.0453348368738236 350:0.157366403342249 388:0.168170220229516 398:0.0419290562232387 405:0.0512661694323689 406:0.0505445162505632 416:0.104891939176484 473:0.0474615972999194 513:0.0403392367615101 524:0.0609383671776392 530:0.0443143663327209 555:0.0621222753619272 592:0.0531010267268274 671:0.0329208764285674 674:0.071381530469676 723:0.055325352800099 781:0.0584165118379821 806:0.0578671824253197 974:0.0692393422614654 975:0.0667940425062024 1018:0.0584966798185871 1045:0.0280033391310438 1232:0.0610334861949186 1782:0.0663773682985348 1994:0.0771878934332784 2152:0.0868819874907815 3285:0.0868819874907815 3366:0.0863440752583171 3525:0.0937246317465506 3988:0.573455485880027 4214:0.203146261945707 5634:0.501513026646303
+-1 6:0.0158231628445097 9:0.0403480346302311 12:0.0355557876420687 29:0.0191555475561767 41:0.0242866288041324 72:0.0328237567589811 83:0.0136662717292766 91:0.0842894110989068 98:0.0684265536710588 108:0.0976502079057454 114:0.0370356923747541 140:0.037271333268594 142:0.00273545105117255 165:0.0512107479734179 178:0.0425666584271611 179:0.0287517167446722 186:0.0299302512509946 194:0.041788707541212 196:0.147140192777333 199:0.0493089516992247 200:0.203814761770029 220:0.0423120132914042 231:0.113087954340873 278:0.0455343275945436 280:0.0552535423775615 293:0.0499212965470131 295:0.0447832555520302 308:0.0389709359479033 321:0.21009365400696 509:0.0489576724386046 511:0.0684115465642237 518:0.045997184906657 528:0.0551851169144175 557:0.0496393663615917 634:0.0592577063472454 656:0.0520654292750394 689:0.0659155785868457 712:0.0484345326426751 881:0.180286636800018 896:0.0668018937893828 946:0.0749769995965942 965:0.0526837429009309 1055:0.0575531551438686 1056:0.0517928796284336 1073:0.0706140601990564 1424:0.0490467309257778 1881:0.0917032652324633 2248:0.0692889035748966 2293:0.0786140115717474 2295:0.0786140115717474 3391:0.102611819470787 3754:0.313632840727691 4855:0.283539249044738 4934:0.218827384971003 5569:0.368022641778269 5624:0.398116233461223 5625:0.398116233461223 5737:0.116806339710576 6253:0.109413692485501
+-1 6:0.0297906523353615 29:0.0270484603716989 31:0.0283865038463654 39:0.149602506897817 75:0.0301879081375196 108:0.206829465804674 142:0.0289693125996695 194:0.0590074596718334 231:0.239527612760873 243:0.0702247683156729 260:0.0939014136373677 316:0.507313750194727 317:0.044389685016263 350:0.217415776477253 457:0.0513553627551186 511:0.0966000580658087 537:0.166589662744935 634:0.0836744403755975 668:0.214886924970435 724:0.174292664700703 745:0.101160003311166 893:0.117212138589825 977:0.102398869298443 1132:0.230648973977308 1225:0.0664329957639522 1335:0.160110808822662 2217:0.132046683292144 2220:0.276769417335596 2347:0.138384708667798 2359:0.133456554715483 2620:0.269941906752468 2948:0.132046683292144 3754:0.295242076785944
+-1 6:0.0386725717806994 29:0.0280902482699993 31:0.0294798273027033 37:0.0365956674120035 41:0.0356146140301488 63:0.0668725549156528 75:0.0470259206632395 78:0.0594203855199635 81:0.0470921762447473 83:0.0601218468970676 84:0.0453935020600561 108:0.214795628444848 114:0.0543102091238683 142:0.0220623944123173 165:0.300387680476786 166:0.0577105329847488 174:0.0566958678227949 229:0.0405046179453515 231:0.0829177214711659 239:0.196722330965274 283:0.231921808075798 302:0.0981848012758647 306:0.0606933443540206 308:0.0571481062016343 316:0.105370649552127 350:0.112894838655046 355:0.0465503060078857 377:0.059529684120243 381:0.148699171855186 402:0.0589531570400247 414:0.0571481062016343 434:0.0669275715936217 455:0.112946623893349 478:0.0606547937567201 483:0.0750969201191965 490:0.0800427105351377 507:0.041356048384437 510:0.0699246927037149 548:0.0875709863120502 584:0.108801018152191 601:0.208882132004733 613:0.0715341357913764 716:0.222173605942061 850:0.0709005932824731 930:0.0677185487857941 987:0.126289540324539 1344:0.122422504212254 1911:0.104746425198358 2001:0.101343617768372 2058:0.115793258040369 2087:0.138596715069932 2525:0.129004642489151 2538:0.135762898772484 6766:0.582949447369854 7102:0.165182973530847
+-1 6:0.0186850385435808 15:0.0213388764995409 28:0.0459931906848791 29:0.0226201390915185 31:0.0237391206931155 80:0.040553379163304 108:0.115311832181555 110:0.060109423562315 142:0.00646040350181598 158:0.0894084806146026 159:0.0374694581792913 179:0.033951931156085 199:0.0291136377757516 205:0.0492831065697017 245:0.0720149939610989 252:0.0449494302659746 332:0.0799990244446073 355:0.0374854072676784 408:0.0366751814749652 462:0.0765347968023227 499:0.0463915641309297 513:0.0466078891329513 674:0.412370526237307 881:0.0709647999497927 916:0.0754711101657028 922:0.177075612645989 977:0.171268651488094 1005:0.0656568804065713 1135:0.253794853453981 1190:0.0674022169963784 1245:0.0609072805205623 1305:0.0566473965377415 2217:0.110428257342411 2408:0.105511929822079 2465:0.110428257342411 2546:0.418712531596106 4535:0.114241657228477 5049:0.266032667344485 5212:0.133016333672243 5457:0.123452809342792 7301:0.258405867572354 7654:0.470122012909022
+-1 6:0.0248952249851797 9:0.190443606572238 29:0.0301382012440576 42:0.0496484018419903 53:0.0639089902190025 57:0.123907973986544 59:0.0515287034070441 77:0.0625748409261128 114:0.0582697595425002 117:0.171346378377388 127:0.247592681456521 142:0.0301265739453355 145:0.0696368578260205 162:0.0449442156322427 166:0.0619179880604246 169:0.0604889926060003 214:0.142192522126088 248:0.100950795682938 286:0.046498074358667 383:0.0994065212644751 409:0.0423802633190425 441:0.11703249971068 606:0.106844899134565 631:0.055693720703954 758:0.086932643127972 788:0.594805093980467 964:0.0994065212644751 1014:0.101764072145601 1363:0.0939554532678127 2593:0.519513457164674 3741:0.172145007774532 4452:0.167993669853392 7081:0.183776160010834
+-1 6:0.015575205482339 9:0.119147278521328 13:0.103515883528172 17:0.0848710494044616 80:0.101411706269451 105:0.16545116292366 142:0.00807775524291129 151:0.123004026285828 160:0.282341889025603 217:0.51576109437395 265:0.147137691826294 434:0.134773902019733 506:0.087134830745436 586:0.114493058529284 672:0.217621834639726 730:0.149719817564217 765:0.571367497634973 784:0.305887546249251 867:0.136911123631746
+-1 9:0.293793593171541 15:0.0438600912299536 19:0.466284068268414 41:0.0589475712822233 63:0.0276710474412122 80:0.0833537281038991 132:0.077643161496365 138:0.10734960818498 142:0.0265575263044478 281:0.147773675934246 287:0.237656358909339 299:0.105977928351096 338:0.335478021878457 381:0.123059806644555 398:0.0995737412729729 409:0.0653791957848408 410:0.488659117208115 506:0.0716190788767175 649:0.17139173084421 679:0.161046906011266 890:0.134443806585055 925:0.189174853227107 4316:0.283507854953225
+-1 6:0.0160571597589064 9:0.122834134562479 13:0.106719046582144 17:0.0874972725553297 80:0.104549758321861 105:0.170570831850309 142:0.0166554215385275 151:0.126810224320948 160:0.29107858794263 217:0.531720644018575 265:0.151690674443464 506:0.0898311036365617 586:0.118035895845815 672:0.224355856479631 765:0.589047714392888 784:0.315352834603277
+-1 6:0.0121435906493415 9:0.185792191183188 41:0.0559168002026007 63:0.0262483491263626 80:0.0790681220471791 100:0.0750403616104508 105:0.128998053815769 130:0.361997048963369 142:0.0125960396665991 175:0.117549713622338 265:0.114719507274143 326:0.283208296620858 370:0.143608951405174 488:0.357399391620251 506:0.0679368061674731 652:0.217604066093251 948:0.194508540744916 1511:0.146578671195661 1520:0.240699591441587 1521:0.240699591441587 5468:0.564882805714814
+-1 6:0.0270965343427192 29:0.0492046650827743 68:0.0831724202703537 100:0.08372044950222 162:0.073377473980088 196:0.125985851437051 200:0.130884239440416 220:0.217372898046979 235:0.205655532192733 278:0.116963575825134 379:0.330947417346953 398:0.105379917286612 697:0.145243953531478 835:0.442441320512334 1329:0.182418313161705 1447:0.176167995215944 1538:0.344768655500392 1544:0.177519925158339 2299:0.259199499515982 2650:0.471114536353224
+-1 6:0.0129761290575911 10:0.0729648864655602 13:0.028747303220606 18:0.208382568534414 19:0.577663842654142 22:0.184506653871076 27:0.0125944585740946 35:0.0469368707886556 42:0.0258782184209355 63:0.0654450518942691 79:0.0293326170506045 83:0.0112073235571062 109:0.0476000625568734 132:0.026233509148404 133:0.062399897341745 142:0.023554294757958 146:0.0388402758841232 166:0.0322734903796515 171:0.0747980566173853 218:0.0245351819647292 219:0.0361659432890459 224:0.0411352161855832 242:0.0303082043596476 246:0.0894174896659775 277:0.0391708834604529 284:0.0788021084943472 286:0.024236174373468 304:0.294765476801236 331:0.0338128010082825 342:0.0808128317056535 348:0.0429712785073331 382:0.0379910734775105 403:0.150287573496079 406:0.0811123446898252 423:0.0327712555247518 426:0.0389384947442137 430:0.067328631881277 432:0.0406317652407547 466:0.159872645350287 472:0.0394079136263441 479:0.0547823468430837 495:0.0476684664610719 496:0.0362705082343936 508:0.0335593811763505 530:0.0355571921874986 549:0.0461870607712668 558:0.0480165279027811 572:0.0468725451866092 580:0.0782748103488702 628:0.0470015469406724 641:0.0342254552869075 663:0.0404810578883245 688:0.0480165279027811 695:0.170789553605893 774:0.0485216273016055 824:0.0483751063723869 827:0.0369457782089495 836:0.0980983655978864 883:0.0504374078646458 917:0.0526185464894632 970:0.0711106761904572 1056:0.0424738781321479 1149:0.0414967074161616 1160:0.0547823468430837 1255:0.068073247511153 1283:0.0535945519008658 1318:0.0572754843991518 1330:0.11424469243211 1343:0.451219550611592 1394:0.0561023776327239 1806:0.0594701509457844 2008:0.0766887001885419 2545:0.0875632793908746 2606:0.0857338122593603 2706:0.0673312531308748 3012:0.0841490557464104 4113:0.100601658946828 4614:0.0857338122593603
+-1 6:0.0309968731270596 10:0.08714784349267 12:0.0696522085567921 13:0.0343352207241245 17:0.0281509089723145 19:0.313613852744705 33:0.0571755365186103 42:0.0618168831080496 57:0.077138482407336 59:0.0641580336333925 72:0.0321501407085825 78:0.0396888989257434 96:0.0320082480131181 100:0.0319237892016993 111:0.0646157618220542 115:0.0695586778442873 118:0.0338286263845182 119:0.216210385282318 132:0.0313327938995387 142:0.00133965677424437 158:0.0370802463643581 164:0.0603453068510994 183:0.0454484926863062 186:0.029316016330136 194:0.04093111088243 199:0.0241485115028615 224:0.0491311034091777 227:0.257049571803074 233:0.122188694024027 252:0.111850862697312 258:0.0489900578483041 275:0.0347402471902687 277:0.0467849425475695 278:0.0445998625320274 288:0.0536569903119588 295:0.0877284082963617 325:0.0463900712784547 333:0.104236132005039 335:0.136817452672667 388:0.0537221626654489 393:0.0808553283266165 411:0.0387044564920509 424:0.0532089858294728 427:0.0548785558739971 438:0.0576054201255658 453:0.0501090747348309 461:0.0565304182810983 470:0.08041914123699 496:0.0866415813996364 514:0.0548785558739971 515:0.0373246483138928 545:0.246752137828617 575:0.0539194971087397 597:0.0461966854425322 603:0.0553103139800182 641:0.081756438344261 643:0.042032632775632 645:0.0657325775661055 656:0.101993863136172 792:0.056690589046466 819:0.0518866329119992 848:0.0570991176650464 868:0.0737032660908084 869:0.20749471074326 887:0.0652825409766827 896:0.0654309712534899 905:0.0973429467556502 953:0.112902013044129 954:0.141187612703751 962:0.139927408620863 996:0.115039541096562 1110:0.0843545605293405 1139:0.0861665937018094 1260:0.137944087962767 1276:0.0947585456320261 1319:0.0545285390309757 1347:0.0780511559493402 1371:0.0773422601423999 1381:0.0791857582820923 1386:0.0739732735290451 1419:0.0861665937018094 1467:0.126964650394146 1489:0.0605553101278539 1576:0.0572658838463592 1828:0.0703806450129684 1920:0.0776922769854213 1932:0.066677925259605 2489:0.240313335734149 2573:0.321504844922294 2722:0.0712532258017308 2936:0.100505998096845 3248:0.168709121058681 3428:0.107168281640765 3566:0.100505998096845 4212:0.0849332107469116 4470:0.104583880517141 5404:0.114409215402255
+-1 6:0.0217994510168445 9:0.0238230772333373 10:0.0262668219697244 12:0.104967724308247 13:0.0413952701022431 17:0.0169696663652703 25:0.0233725047321082 34:0.0248186749537152 35:0.0337938558817193 41:0.0573591491174872 42:0.0186319362390071 47:0.0147397889740296 57:0.0232499474823911 58:0.0626710359914623 63:0.00673135339545446 70:0.071658497171112 75:0.0126229399043254 79:0.0422381047814279 81:0.0189610868532987 83:0.0161382158948774 84:0.0182771365388348 91:0.124419514417763 92:0.0205583683566828 94:0.0186951729184814 98:0.0404017466490263 100:0.0192439985650494 109:0.274170753521402 118:0.0203922546126388 119:0.456168693271875 132:0.0377754806631548 142:0.00242267791692897 145:0.026133157297359 147:0.0400965041024683 148:0.0273748952796955 157:0.0315591486564528 158:0.0447047312158923 161:0.0303913750051931 162:0.0168665602296165 168:0.046258246458334 171:0.0538534994576488 183:0.0273968332052631 190:0.0267010631633529 204:0.0373903458369629 209:0.0391258084014547 212:0.0352593829739823 215:0.039679150393255 219:0.0260389466702975 220:0.0249826879989803 226:0.144883379173193 227:0.177088236511244 235:0.0472720200374281 242:0.0218214608889346 246:0.0643792759999567 252:0.134849771601176 284:0.018912119284819 288:0.0970350077847188 295:0.105767229115733 323:0.0266405329174459 325:0.11185770705034 341:0.0260202285525935 345:0.0228536716521259 355:0.0187429094522172 368:0.0379598639518691 369:0.027847851730546 376:0.0794333438239464 393:0.0974808981767855 411:0.0233314566916887 413:0.0269267497288244 414:0.0230099836448223 424:0.0641498814868509 427:0.0330813752659089 429:0.0355395660197941 430:0.0242378118127459 438:0.104175473835335 455:0.0227382860190871 461:0.0681542708736587 473:0.0274188275991698 478:0.0244219083550714 484:0.0344199534544367 499:0.0463920735684511 530:0.0256006548402742 533:0.0390041912961628 571:0.0245784112155662 597:0.027847851730546 612:0.0362520466356045 622:0.034370129305603 623:0.0432278630655194 629:0.114107455151015 644:0.0593478123426211 655:0.0235807559164123 656:0.0614829819679384 662:0.032463408424615 670:0.0444291101513561 673:0.0314879414334142 676:0.0311405432924553 695:0.0307414909839692 756:0.0413492040071741 759:0.0920386402654445 764:0.0288023419148577 775:0.103124607944962 778:0.0595207274902887 785:0.0438073947610594 789:0.0319993223975761 812:0.034881947982918 814:0.0345711931073029 834:0.0313822310050115 836:0.0353146894280011 846:0.0901992715394246 861:0.041577079306601 868:0.0444291101513561 883:0.0363141910354471 895:0.032384289180503 908:0.0331242065200746 941:0.0444291101513561 966:0.0311065678309342 969:0.0348293643258042 990:0.0419307084182521 991:0.0330813752659089 1023:0.0439586344139256 1032:0.0411272482211914 1042:0.0354827896161218 1043:0.0348293643258042 1044:0.0454557213474763 1048:0.0422996067399297 1084:0.0508498233566708 1096:0.0408047640131719 1139:0.0519421361629762 1145:0.0818218243543017 1169:0.035095579542899 1192:0.0387516167309603 1201:0.0397166719119732 1253:0.0381124540302323 1262:0.0479747295631915 1288:0.0409109121771508 1294:0.0353703561871923 1355:0.129683589196558 1362:0.055214734991544 1363:0.0352593829739823 1377:0.0297026282733622 1381:0.0477340145659093 1438:0.172355679540897 1522:0.114242911745064 1551:0.0333416436294237 1553:0.0867382058620722 1667:0.0498814504441795 1682:0.0436587854967979 1714:0.0479747295631915 1724:0.0479747295631915 1749:0.0487404490883928 1808:0.0313124770069147 1824:0.0441125992517343 1831:0.126524587997575 1835:0.0419307084182521 1842:0.0477340145659093 1865:0.036961835546458 1866:0.0495816015270519 1969:0.0425546948563536 2006:0.057121455872532 2024:0.0303292306053506 2045:0.0523396411980648 2076:0.038834981463561 2157:0.0501922053197946 2219:0.044757797493815 2293:0.0464168251678108 2297:0.047499895336855 2389:0.0498814504441795 2426:0.0949997906737099 2520:0.11572990438646 2644:0.0508498233566708 2793:0.126088543805572 2844:0.0586793602679127 2877:0.0508498233566708 2888:0.057121455872532 2931:0.0472720200374281 2960:0.0490117359154782 2985:0.0558042664744335 3087:0.0536568305961633 3197:0.0564375055580681 3307:0.0605860811489007 3364:0.0586793602679127 3489:0.0617270825046874 3570:0.057121455872532 3690:0.0595796466264172 3714:0.0564375055580681 4207:0.0515623039724811 4270:0.0665088971791546 4405:0.0630442719027859 4514:0.0595796466264172 4539:0.0646021762981666 4557:0.266035588716618 4677:0.126088543805572 4706:0.129204352596333 4757:0.0605860811489007 5104:0.0541452388004377 5206:0.0605860811489007 5225:0.0665088971791546
+-1 6:0.0337692495522547 10:0.0712067938945356 13:0.0561092710373669 19:0.409996366264494 22:0.0900304784313577 37:0.27961217664247 41:0.155495061940974 42:0.0505093629201246 72:0.0525384989775198 101:0.0820523366775059 176:0.0437602065881067 203:0.192004362532114 224:0.160576244416774 283:0.126572675621589 284:0.0512689118453377 296:0.0761292296971289 304:0.319625653296141 369:0.0754928114588117 382:0.0741513533423266 426:0.152001079101159 470:0.394253419412693 485:0.0584233285226289 502:0.116547183904213 591:0.17754373692535 594:0.0808350250741767 613:0.156160682611329 645:0.107417600145205 681:0.0923797923617611 717:0.0855537756511707 872:0.19268859823161 994:0.0966552321977379 1068:0.0994816068646682 1283:0.104606377010571 1328:0.125831488360968 1627:0.112711409105156 2273:0.143017848769404 3482:0.128767586012574 4857:0.152996576092347 5466:0.167336103571588 5689:0.167336103571588
+-1 6:0.0088935399735988 10:0.0750126788471178 12:0.119906552866166 41:0.0409515037320972 91:0.0710633443824413 111:0.0556181449335265 119:0.093051758624172 132:0.053939528781724 183:0.156479520287853 212:0.10069359644739 215:0.056657774754906 226:0.0689595566905065 227:0.18964793820982 235:0.53999693782663 252:0.0641839010278531 276:0.069088555685562 277:0.241621391618041 286:0.0498327470328572 325:0.0798606914191357 355:0.0535259213703244 393:0.278385535832697 400:0.235096635696237 471:0.185417728360536 484:0.196592714366921 515:0.064254529884888 731:0.102489890643152 964:0.106535595202892 967:0.113959038147886 1061:0.115353832227495 1232:0.10069359644739 1525:0.124680574570509 2383:0.14159492748538 2868:0.14159492748538 2961:0.151913587371528 3135:0.149471325487687 3302:0.163127211566927 3672:0.17302147374609 4276:0.151913587371528 4321:0.147251409133671 4629:0.196955917396669
+-1 6:0.0190557479911507 9:0.0728863743052496 12:0.0642294592672937 13:0.0633241273070485 17:0.0519184588296374 19:0.1156790206536 80:0.0620369317186386 105:0.101212008698411 142:0.0098828659703819 147:0.122674698055163 150:0.0830912352192352 151:0.0752456758743066 160:0.259076961651553 174:0.0698416293269357 176:0.0493871483577566 210:0.299901452217653 217:0.473262461087968 235:0.28925617902894 265:0.0900090460642957 369:0.085200116045014 409:0.0486591877410454 433:0.0770493392678199 502:0.0657667491876107 560:0.113499196093551 586:0.0700392323088135 765:0.524286905441425 784:0.187121640275202 793:0.114349441764665 990:0.128286420713957 1726:0.128657246080896 2183:0.185362274783189 2561:0.142011632674729
+-1 6:0.0193586263460638 9:0.296179417685397 17:0.105487335938027 41:0.0891394047153879 53:0.298175315758043 80:0.126045934418854 105:0.20564141161365 142:0.0200798950151628 151:0.152883311018196 217:0.641046201357905 245:0.223833312865051 265:0.182879359165909 409:0.0988651858976419 672:0.270485020972107 784:0.380191626907788
+-1 6:0.00954106334948648 9:0.109480905428175 14:0.0967982025561794 19:0.11583915412558 38:0.0388668455589424 51:0.0971998660260861 56:0.352336673610882 94:0.0859152005513154 106:0.0333924391779981 142:0.0581422120776797 162:0.103348881272329 192:0.077052318901844 199:0.0891970530447349 286:0.0267304918924781 359:0.106230026312555 381:0.137573106082633 406:0.0894601944473882 409:0.0730898193533209 423:0.0722879582076019 441:0.100918252889638 456:0.155089599098868 544:0.309525865348141 601:0.322088362996392 671:0.11653521391236 816:0.217242445399715 874:0.195563590608426 886:0.246538503104203 1045:0.247819580606969 1471:0.110503159532607 1491:0.219181818142254 1549:0.302033408772373 1624:0.181261166334449 1806:0.0655906482270975 2772:0.316943909374047
+-1 6:0.0225611477933384 9:0.0575294573789481 13:0.0999638881120072 25:0.056441386713194 41:0.17314307741012 42:0.0449935653253591 59:0.0466975773007672 63:0.04876587996674 142:0.0117008684142488 186:0.042675464355708 199:0.0703062060191581 218:0.0426584741864046 242:0.0526958290006132 286:0.0421386000060667 297:0.146932880301512 382:0.0660537684042428 398:0.0584943658177172 409:0.0384068585373587 415:0.0654300062660592 436:0.132853063746826 441:0.159089997630168 451:0.0854145490449823 490:0.0778267102070476 493:0.134274392423022 496:0.0630622809917982 545:0.119732753409326 571:0.0593534851362312 718:0.123637678701922 948:0.120456847334266 1002:0.112090253454783 1011:0.180512788542782 1336:0.266671993065688 1487:0.113097016998072 1726:0.101549591750933 1738:0.101549591750933 1795:0.0961358207373659 1850:0.298124841497041 2049:0.139735906840653 2160:0.116450523511075 2344:0.124515877595955 2617:0.134759634041393 3147:0.114705719060597 3379:0.146307059288532 3634:0.130753310218202 3657:0.14906242074852 4795:0.128458218237793 4962:0.349825265405574 4963:0.349825265405574 4964:0.349825265405574
+-1 6:0.0309458180516755 10:0.0435021509631847 22:0.220008190219008 35:0.223872598198462 37:0.0244032314778862 47:0.0244115000228346 52:0.0840988579420722 75:0.0522641298165136 100:0.0956136221972733 111:0.0322546664694074 123:0.0523264450775987 142:0.00936215154098528 151:0.0407320492109607 166:0.0384833395517492 173:0.346955114246132 175:0.0499258162162097 180:0.0397452099091575 186:0.029267729800796 199:0.0241087363916708 211:0.0512946965789704 218:0.0292560775858301 223:0.210165190163248 283:0.0773266614258717 296:0.0930187995235554 324:0.0546473519379894 351:0.0366020409315491 364:0.0477874147836014 391:0.0533751925143389 434:0.0446295733170927 456:0.0558914468454362 459:0.0471134010055586 465:0.0438571701674552 485:0.0356923871748448 502:0.0356009090652527 506:0.028854179176741 507:0.0275776148682849 571:0.0407058667533967 607:0.050593711435518 609:0.0365239628616201 684:0.0482701523078096 712:0.0473624094407341 718:0.254379950733553 723:0.0529339037532398 730:0.0495788240517489 761:0.0524458686916058 771:0.10943516683699 800:0.0454831957217228 808:0.0538306860864707 891:0.0725522068256294 941:0.0735818691424486 950:0.0562007840640223 969:0.057683120805375 1009:0.183872060660444 1067:0.05485910074058 1096:0.0675793594734885 1114:0.0631204540355743 1213:0.0656243091711267 1272:0.0651750138387947 1277:0.0608844388476358 1338:0.0651750138387947 1505:0.0866830016734234 1571:0.0798642149239441 1602:0.0711358643246633 1725:0.0744064682545375 1820:0.0657773010858102 1846:0.0677551581848514 1850:0.204460278044367 1928:0.0744064682545375 2082:0.0896733664601389 2192:0.0914446269808705 2204:0.0768738501372286 2466:0.0816354754446757 2611:0.0624969340549784 2902:0.0738514318503393 2955:0.0880993441743895 3188:0.0880993441743895 3223:0.0896733664601389 3495:0.0896733664601389 3545:0.0958338198922119 3553:0.0826118359497938 3586:0.0853956041581998 3674:0.462104937429943 3712:0.0934697349227289 3743:0.110149605796139 4965:0.119958757332334 5304:0.213983528659261 5467:0.114220771519769
+-1 6:0.0103494610799644 9:0.0791713549614749 17:0.0563953794139804 37:0.048968224524038 41:0.142966466210143 51:0.140580589195211 52:0.0843775907640426 63:0.0223703413216865 79:0.0701850553099587 142:0.0107350639572345 144:0.0615297126556327 297:0.202207282179577 398:0.0804992504778172 441:0.0729792541481962 599:0.0970400013840309 718:0.170148702822715 1002:0.154257273548312 1025:0.126152210891427 1336:0.183495412465105 1518:0.13261475560046 1726:0.139751340287245 1850:0.615413791238871 2831:0.34029740564543 3657:0.410275860825914 3715:0.187559052170863 4327:0.178318020784146
+-1 9:0.151627370183523 12:0.200427255913895 17:0.162010926967301 37:0.0468914742633191 55:0.0995373601559641 63:0.0107108057780673 74:0.0406224578768748 98:0.0321432582743775 130:0.664718390195328 142:0.0282694174729831 218:0.0562163502979012 239:0.0420113489375002 254:0.0956460600622799 281:0.0571996830046066 283:0.0371463217628108 331:0.0387368691368867 370:0.117201091702019 409:0.151840410696139 417:0.0579824232180354 506:0.110888183106523 622:0.0546891179131917 628:0.0538462570026684 652:0.355178891780538 727:0.0530526104122604 728:0.0683447508622297 753:0.186739038670965 867:0.0435584301269558 948:0.0793704469589543 1244:0.0699461709727741 1266:0.0675077878202885 1339:0.0598123588963962 1541:0.205587590643325 1789:0.0752183692657862 2102:0.0692366348825763 2367:0.256133287358045 3774:0.230504021043533 5468:0.115252010521766
+-1 6:0.0126402303563604 9:0.0966952923061441 11:0.0189336640799814 12:0.255631579882382 13:0.0280031535768385 17:0.0229593464277759 33:0.0466312811218897 34:0.20147263141492 55:0.0423177518412999 57:0.0314563402241237 58:0.0282638836329821 74:0.0345408214347594 75:0.00853919116505229 91:0.0336670229385217 127:0.0419040000645705 130:0.502402320076867 132:0.0255544313115111 137:0.0689862956863129 140:0.0297739613017492 142:0.0109259860860772 162:0.0456396950913824 175:0.0815714506752924 184:0.198598104277401 203:0.0638840076634165 210:0.0663111106422865 262:0.0394331695150829 281:0.0486362504892074 299:0.0697603147113253 334:0.345449802125117 369:0.0376771388068924 409:0.0215180337287498 459:0.0384881886520108 506:0.0471434907202859 551:0.186787440110239 571:0.0665074074641098 606:0.0542491236077193 609:0.0298373953680656 677:0.0630788776967341 701:0.0605556854145239 744:0.0519890736802358 800:0.037156430656056 803:0.0526562297056562 804:0.0793826335727098 851:0.0478548159696031 862:0.0405423304618103 908:0.0448158564976872 933:0.0489642392838134 969:0.0471228734969073 1025:0.0513583265612022 1150:0.0459759623219873 1225:0.0375835283393113 1379:0.0444724402698297 1770:0.0719706942468932 1791:0.0590687618283633 1942:0.0546501174325403 2095:0.125056515878184 2461:0.0719706942468932 2652:0.0674878030255021 3968:0.373239928207468 4608:0.279929946155601 4815:0.293992485203282
+-1 6:0.00807179909863325 9:0.246990743451466 12:0.217654973884082 42:0.0482926254503017 55:0.162139635847812 77:0.0608660751069976 83:0.0209145417215359 106:0.452003388863591 114:0.226714219855122 120:0.20174860302336 127:0.0802771770168243 130:0.481236157888586 137:0.066079909579175 142:0.0418627013060246 173:0.241329493914089 176:0.083679347519359 211:0.0802771770168243 405:0.0767644648389108 417:0.094449450652652 488:0.237562033375101 628:0.0877119152899016 697:0.0865335764617689 1541:0.334888297514695 2102:0.112781801221159 3774:0.187737739753667
+-1 6:0.0120702402441762 9:0.184669958649718 12:0.0813681000052885 17:0.0657720989459046 31:0.0460052928362574 34:0.0961937795137082 63:0.0260898023588591 80:0.0785905302907298 98:0.0782958138654247 100:0.0745870985610927 105:0.128218872452847 115:0.16251767380656 130:0.359810493851554 142:0.0156499454415145 153:0.209376576877651 175:0.116839683173334 265:0.114026571998087 338:0.158153667748663 370:0.142741516469733 447:0.169791452628881 488:0.177620303769576 652:0.216289681668211 752:0.184103078326253 753:0.454866301617128 958:0.202861269371658 1071:0.230922537233532 1520:0.239245704114092 1521:0.239245704114092 1954:0.170974383367017 2136:0.224276616830973
+-1 6:0.00608690511222246 9:0.186254538872371 12:0.123099431463178 13:0.121364310992557 41:0.0560559503100163 55:0.0611343621339043 72:0.0378802445721993 82:0.0456561772466658 130:0.362897886065365 142:0.0268331934870746 406:0.0570728539342033 423:0.0461174951101921 441:0.0858436573129013 456:0.131923195424297 691:0.116451996313194 697:0.130509112654506 701:0.0874818023245105 869:0.325968522155146 1045:0.0316202548259272 1114:0.0744930795586069 1269:0.0621807183567832 1541:0.252537664188251 2367:0.629252980764564 2612:0.259991265059547 2853:0.283144264097747
+-1 6:0.0271809398636172 13:0.0258071257486678 27:0.0565316985846985 29:0.0282045355892255 42:0.0232314812911518 57:0.0579790219361777 58:0.0520948183254174 59:0.0241113120411786 63:0.0419653943810846 65:0.0277796741203481 75:0.039347707675804 79:0.0263325756490389 83:0.0100610762033821 94:0.0233103287988545 98:0.0503754633639045 117:0.0400882005854847 122:0.0417944495427428 139:0.0317662701655876 142:0.0120829946989172 168:0.0288388596164373 169:0.0283040107619017 172:0.0609015724149234 173:0.029023280317602 178:0.03133747101205 186:0.0220345786025556 195:0.0540753516130586 199:0.018150565508368 200:0.112535951108169 203:0.0294370884796036 205:0.122899963397125 215:0.0247372422325019 219:0.0324670122660613 286:0.021757379985278 290:0.0403787882576071 317:0.0231434697877605 328:0.0393946225041102 351:0.0275563070114936 404:0.0326081298370891 411:0.0290911418263402 413:0.0335739814978051 414:0.0286903088169264 423:0.0294195217470965 427:0.0412479594561175 442:0.033043056382322 467:0.0487399810984772 477:0.0415177009738675 500:0.0401841852063206 508:0.030127040558182 514:0.0412479594561175 580:0.0351345630253493 582:0.032751141660207 588:0.0532225589279226 592:0.0382497289627935 618:0.0555999796052962 655:0.0294019839310346 671:0.0237135640914858 684:0.181703957297507 688:0.0431055589490306 733:0.131481129993294 737:0.0457559738447906 739:0.0396666599427509 819:0.0389991627254661 845:0.15775889103692 881:0.0442421953655598 890:0.122336981513026 896:0.0983587853745674 903:0.0432331559334066 909:0.0341875354350919 1018:0.042136325532739 1031:0.0477147463924004 1055:0.0423704936590036 1076:0.106445117855845 1149:0.0372525637701185 1160:0.0491793926872837 1184:0.0511443404017115 1192:0.0483179765934601 1205:0.161178004797026 1240:0.0652603883826533 1264:0.0642911549663616 1471:0.0449722220076557 1487:0.0583952664225728 1765:0.0566770799617108 1881:0.135023444269187 1897:0.051840942758803 1949:0.14495392978038 2132:0.213667975738542 2247:0.063837715434973 2456:0.0548104169030857 2476:0.213667975738542 2544:0.0786076017240548 2691:0.0647647538620464 2734:0.0642911549663616 2753:0.0551978858159447 2815:0.0586650079403228 2984:0.0601267789900526 3045:0.0695803031921675 3378:0.0634027888897402 3467:0.056233089850766 3487:0.0805500958561955 3986:0.0731651527116546 4118:0.0721496970065873 4169:0.0805500958561955 4819:0.248782549600707 5086:0.0721496970065873 5303:0.0755425733890281 5421:0.0731651527116546 5575:0.0859925448685957 5818:0.0903124596781099 5889:0.0805500958561955 6503:0.541874758068659 6504:0.18062491935622 7117:0.0903124596781099 7139:0.293092208467952
+-1 2:0.0663094978712464 6:0.0243648902042341 37:0.0768545920607859 41:0.0747942810244154 286:0.227537705951979 349:0.0805131398274821 406:0.152302228484652 441:0.0572696974515253 453:0.07877582355777 457:0.0560027022723421 506:0.0454361171774891 574:0.0608112023228112 577:0.118545273036282 607:0.0796689376310965 646:0.21121096430744 793:0.0974723075614902 987:0.0663051925923 998:0.0898954789031934 1045:0.0421902440763979 1067:0.0863855635688958 2017:0.122139016455451 2175:0.126425884219111 2498:0.321959640385622 2781:0.277456662388385 2973:0.550341189686227 3763:0.359722473967224 4150:0.336955718707536 5739:0.173450451158281
+-1 6:0.0226436625135204 13:0.0902965447509 17:0.0246775736225388 21:0.0547925328334081 58:0.0303790907727225 59:0.0562420417764291 79:0.0307116804179901 83:0.0117342321973199 84:0.0265789186916111 91:0.0361865891884429 118:0.0296547588915979 119:0.18953376269339 132:0.0274668689745022 142:0.00117436629516515 149:0.0504228255596552 164:0.0528997395450803 177:0.0472667636025464 179:0.0246870051347511 183:0.0796818692712731 204:0.027186834210607 215:0.0288510432094679 240:0.0407691752999323 253:0.0494859285319953 278:0.156388043067687 318:0.273319321943285 325:0.0813326774247152 342:0.0423061102378811 367:0.0386537051314339 400:0.0798099728203128 423:0.0343119853518739 439:0.0488104352360629 466:0.125541753991113 471:0.0472088333496367 473:0.119618757757133 485:0.062680368750788 490:0.0468668112972414 502:0.06251972156253 507:0.0242148985544678 514:0.0481074911013016 537:0.0506494461279036 539:0.0420745628534628 540:0.0511948761119733 542:0.193131866573394 550:0.0368968405958306 588:0.0620734653004466 612:0.052718334619043 618:0.0648462508052053 619:0.066369709312275 631:0.0303940169207552 634:0.101760553212121 651:0.058594677325508 653:0.046263221632682 663:0.0423842615441897 670:0.129219115231145 671:0.0276571274931785 719:0.0487448624361732 722:0.058168600724355 789:0.0465339516605728 820:0.0672077357966205 869:0.0606311505570448 942:0.058594677325508 1027:0.047324965192525 1028:0.0550923901899249 1068:0.106730375688594 1083:0.048550195007207 1129:0.0528087060482351 1146:0.0518490280256856 1150:0.0494167026329338 1176:0.0511154763738125 1283:0.0561142821755432 1299:0.0669220676582432 1303:0.0694156050799176 1321:0.1050790798531 1329:0.304881699428785 1375:0.0568454352140041 1377:0.0431940605207721 1386:0.129692501610411 1439:0.0533651878442969 1449:0.0580297611040463 1620:0.0547696183609663 1715:0.0749827677833875 1733:0.0767194520193979 1778:0.0701258564873053 1781:0.0574894143750049 1787:0.0650875402651858 1881:0.157477829916836 1987:0.0712736889098746 2024:0.0882105522958609 2066:0.0606311505570448 2173:0.0637054486610374 2192:0.0802941942683909 2213:0.0628626839433674 2339:0.0708791790530441 2444:0.0641492821534845 2619:0.0780286635510301 2765:0.0687437648831569 3059:0.168296369200936 3218:0.166133959546299 3703:0.0811515008446465 3790:0.264315887985807 4195:0.0866417220221426 4267:0.0866417220221426 4756:0.100293096715375 7140:0.455777885634427
+-1 6:0.0133094838655535 27:0.0193770124869286 29:0.0241687253338771 31:0.0507286259716055 36:0.0508457882210024 53:0.0512505314587434 142:0.0017256715039382 158:0.0477647153660484 172:0.156561348593146 179:0.0362762976543235 205:0.0526570531447319 351:0.047226504635744 539:0.0618264288202066 671:0.0812814826042878 684:0.0622815152847914 688:0.147750195894075 733:0.150223182241637 768:0.0831662738648976 781:0.0721150407563547 890:0.0698877879649364 998:0.147318015720876 1024:0.515231886029158 1124:0.0739841096093892 1178:0.105331780999294 1196:0.0835314740227428 1485:0.0829863768510183 1654:0.093935098301851 1718:0.0945991496350614 1881:0.115702828286337 2340:0.0923735147958137 2528:0.0765634336197548 2850:0.464337452098504 2969:0.38839874561547 3315:0.125391781354108 4355:0.125391781354108 5129:0.284245399237991 6793:0.142122699618996 7171:0.142122699618996
+-1 6:0.00659736854627891 10:0.055645591009565 17:0.0359498044803062 33:0.0365076907627053 34:0.052577728568214 37:0.0312152895446342 52:0.107574695728872 59:0.0409661508129224 100:0.0407679191176484 140:0.0466201462123143 142:0.0051323812476713 306:0.0517700714708518 400:0.0581328002978444 462:0.0810693956999557 509:0.0612377837641125 1140:0.0670093681826582 1326:0.128350064441367 1563:0.113670624244724 1743:0.097906909261366 2256:0.100144566260457 2345:0.108463009959606 3091:0.121010344343046 3674:0.236439824536389 3726:0.136858059370831 3786:0.367756266888 4384:0.136858059370831 4447:0.221760384339746 4697:0.115802730057927 5030:0.136858059370831 5419:0.119561413082409 5534:0.133557678726485 6371:0.306889466416492 6384:0.663968270366742
+-1 6:0.0181188863454861 10:0.0764119915430812 12:0.244286663118459 16:0.09969769717281 17:0.0493659265017491 22:0.0966116824007769 27:0.0263789257729509 42:0.108403167765573 52:0.147720539779534 55:0.090989307282265 115:0.121979314465369 132:0.0549457355803424 142:0.00234924555793058 164:0.423290343578834 203:0.068679943413679 209:0.0569098337083589 215:0.0577146886627689 217:0.149998288320844 218:0.0513886119094218 227:0.0643952323499259 256:0.0616522597984775 286:0.0507623444911739 307:0.0869998690413877 347:0.0744223330413811 361:0.487015346907268 370:0.107136115826083 489:0.103221875230933 501:0.0942081243723165 665:0.11201745776967 905:0.170702294541504 913:0.0945541735046318 925:0.133873367126522 1020:0.115810198950827 1093:0.11500394034173 1234:0.154747436458982 1575:0.293901411708635 1703:0.138861531156365 1736:0.129720826695863 1792:0.106944165364788 2781:0.154747436458982 3642:0.187932173699959 4325:0.179568328127544
+-1 51:0.38918319551128 59:0.355820418151335 63:0.123860071580188 79:0.388600506784561 86:0.445151564583896 142:0.0297189428413407 647:0.517611697659276 1045:0.29767700378826
+-1 6:0.0129220525422577 34:0.102982297615347 63:0.0837929792808296 73:0.140417020308407 79:0.262893390889393 86:0.401534574213542 94:0.155147030617219 132:0.0783725521098671 137:0.211573170525099 142:0.0335087642313153 154:0.0934113683786481 162:0.0699858928227565 199:0.0604025444459839 326:0.452044942267939 363:0.241428160760665 453:0.125337564323958 819:0.129783761216426 867:0.113589046076795 1150:0.141003079229478 1576:0.143238853204612 1620:0.156276813823122 1776:0.149661267435426 2733:0.168025332070285 3979:0.226819064578321 5089:0.286171167011514 5090:0.286171167011514
+-1 4:0.200644774875167 6:0.0154621294723069 46:0.3884118303637 51:0.10501393524913 75:0.0313366312939969 77:0.116593478390079 82:0.115977119863593 85:0.189512651546393 86:0.480463885578095 142:0.0360859982867686 157:0.156692088038987 294:0.443283206412442 295:0.131284339738151 314:0.123387060941018 331:0.120872235015009 358:0.204745410153893 424:0.318506021409198 456:0.16755752639835 457:0.10661911784649 500:0.160014022422264 909:0.136135273953801 1045:0.0803226705611172
+-1 6:0.0342823700521049 11:0.0616214287365945 12:0.04622097420412 13:0.091138953624911 34:0.0273213347811423 38:0.0558615966964056 40:0.064260850855331 41:0.0157857794455475 47:0.0162261164189416 58:0.045993762320698 59:0.0212875289886764 63:0.0889215367010688 72:0.0640041797011464 75:0.0277916180208233 77:0.025850907399202 78:0.0790122644255114 83:0.00888277879573694 84:0.0201201622225768 85:0.0210092111229092 86:0.106527634188817 91:0.0273931401499419 92:0.0678942851068155 96:0.0424811340914512 100:0.0211845204590518 132:0.0207923379399053 139:0.0280459809012956 140:0.0242255543725119 142:0.0133348767729819 144:0.0203815866561753 148:0.0301353186634694 157:0.0347415028182925 160:0.0310729419645913 162:0.0371346930888969 168:0.0254614124290214 169:0.0499784042080142 177:0.071561598306825 178:0.0276674003248565 186:0.0194540110448607 190:0.0293935388194117 199:0.0320497440172789 203:0.0519791600956082 208:0.0513682974932493 209:0.021535583827753 218:0.0388925318333751 237:0.0294606481953942 277:0.0931389973457593 279:0.0388148605114985 285:0.0365593931576816 286:0.0192092763912326 290:0.0356498486724168 291:0.027593478862816 304:0.129792933745695 307:0.0329221305116753 317:0.040866070097231 351:0.0243290652672157 363:0.0640511986863514 375:0.0972123222443698 383:0.0410668047741274 387:0.0483997073052066 388:0.0356498486724168 394:0.0319375507349144 409:0.0175081270107901 413:0.0592839662295604 414:0.0506605181494342 415:0.0596537651684611 423:0.0259740706335158 439:0.0369493539785772 455:0.0500623281327796 459:0.0313158768979123 473:0.0301836810200539 483:0.0665717402995302 495:0.0377814061446655 502:0.0473272428627977 507:0.0366612120509557 513:0.0256541440716308 530:0.028182167775355 535:0.0325096396364592 557:0.0322645063471093 580:0.0310197979947856 597:0.0306559669879543 631:0.0230081802099177 636:0.035061753583156 656:0.0338413943697974 665:0.551059378179318 676:0.0342806862230357 680:0.0472834039290629 681:0.0375133977695523 687:0.03857519257504 706:0.0349002653656987 734:0.0945668078581259 742:0.0351847155646186 772:0.0317638881229604 789:0.035226062697719 856:0.0257293359798876 867:0.0301353186634694 884:0.106179879047221 909:0.0301836810200539 963:0.0290865409264971 973:0.0468458153728206 987:0.0279882133238216 1054:0.0448040073002706 1080:0.0346631152177014 1121:0.225181386572479 1146:0.0392495596628234 1169:0.0386345395077676 1200:0.0489092425255257 1209:0.108524812259951 1225:0.0611596018458813 1236:0.0377814061446655 1321:0.0397722751134862 1366:0.0371505693008956 1380:0.0706186124578134 1424:0.0637586124582021 1650:0.0567617317018892 1782:0.0422133561795868 1795:0.0438244163635284 1855:0.0443559960752225 2114:0.049088418564538 2193:0.0571798653233063 2433:0.0467043622164729 2605:0.0996826738064961 2672:0.0539539700507365 2688:0.0590674657187276 2775:0.101319611469302 2941:0.0492710739665027 3482:0.0522896788401335 3897:0.0549113846527242 4287:0.0666954464423888 4614:0.0679515038300343 4708:0.271806015320137 5106:0.0679515038300343 5804:0.0711165156691161 6461:0.0732155060310439 6565:0.0759215752578683 7294:0.0759215752578683 7540:0.478413393718194
+-1 4:0.179629353872121 46:0.347729793451774 77:0.313144628888691 86:0.322605276086723 142:0.0430751614646041 294:0.396853972398582 358:0.549901472746174 424:0.427718819483662
+-1 4:0.180738767505976 46:0.349877416685042 51:0.283786446564912 75:0.0846831539180118 86:0.324597727119524 142:0.0325058993369307 294:0.39930499278104 358:0.553297733869373 424:0.430360465069768
+-1 6:0.0143116874273684 11:0.0964679468155509 17:0.0779859971726671 27:0.0208361006925947 34:0.17108548922897 37:0.0338577012776996 42:0.0428125720205749 48:0.0437768689393519 51:0.0972004935992313 53:0.0551096942701425 59:0.044433984657994 63:0.0618693727462417 72:0.0445325013282195 74:0.0586623929219073 78:0.0549747498820252 79:0.145582446164261 83:0.0556237302516534 86:0.222357760063002 94:0.0859157552647614 101:0.208646755989623 106:0.100177964331123 114:0.0502468998896353 125:0.0767140932993996 132:0.0868007203200547 141:0.0653664027597401 142:0.0334010608894306 148:0.062902194419495 162:0.077512161410048 164:0.167173604735174 166:0.106785645654521 174:0.0524540715383838 181:0.0604003284300312 197:0.079791670944992 199:0.0668982217106521 218:0.0405906708034079 234:0.102666894290409 253:0.0781926444960184 277:0.0648037759780049 286:0.0400959967177602 299:0.0592387039735173 309:0.105324317504398 330:0.0711676449684464 347:0.176353416174903 355:0.0861351338373755 402:0.0545424778831543 410:0.546293614880845 413:0.0618724429526451 414:0.0528724749456689 430:0.167081357065059 449:0.0817943563890217 454:0.0713990935956535 461:0.2349079231105 507:0.0382619263767569 564:0.0886660965543896 573:0.0908389409648571 609:0.050674330781443 631:0.0480255424196798 643:0.0582211534274783 690:0.0894286907048168 709:0.0624050961927017 782:0.0815325614280907 837:0.155303439237846 1045:0.0743463541979178 1117:0.0854004907275203 1176:0.0807674906970367 1225:0.0638299732100066 1363:0.081019216339648 1576:0.0793213650778482 2287:0.139215051477115 2485:0.114617888459776 2738:0.152824532778849 2901:0.125605570175381 3238:0.136902460347289 3932:0.141836851063243
+-1 4:0.151295019026722 6:0.0233182565971307 11:0.157176737450379 34:0.0929174228669861 51:0.0791851437022125 59:0.0723969875073348 74:0.0955795560584193 82:0.174903737885461 83:0.030209538450774 86:0.362290982934476 106:0.408053817816097 114:0.163736122771415 137:0.0954476361870367 142:0.045350726599548 181:0.0984112016161753 211:0.231909118363532 218:0.0661350160172947 234:0.0836383898559768 237:0.100193036988675 242:0.0816962997732083 317:0.0694909298274326 357:0.107928766853623 404:0.0979096601803133 455:0.0851287565208922 561:0.103318500485982 735:0.151603539577794 856:0.0875031769304363 963:0.0989207315328768 964:0.13966454038795 1365:0.141003251340785 1381:0.17870904167249 1808:0.117229250654606 2285:0.157436101620767 2365:0.483955496897838 2374:0.187912141765159
+-1 6:0.0199069854876718 11:0.0447276867718219 17:0.0542377033398975 29:0.0722982903525251 40:0.186574006327192 48:0.0608918758947232 59:0.0618058976088724 63:0.0645433694475917 72:0.0619429303616086 79:0.337498944802929 82:0.0746583724499771 84:0.0584165821624467 86:0.15464538074597 94:0.11950538340764 98:0.0645651453009188 101:0.0967397675178489 142:0.0361351988592243 145:0.167051302284865 148:0.0874944396184207 160:0.0902167212780564 166:0.22280185084301 172:0.0780562323291987 215:0.0634103800712602 337:0.0760961028353806 355:0.0599052651192018 410:0.633227162452104 412:0.202890757477846 606:0.128154687762597 706:0.101328915575981 709:0.086802995843049 805:0.129752252528787 829:0.0738392094847545 1073:0.133258415408644 1094:0.205033037567205 1207:0.113408535880814 1263:0.135196147783433 1305:0.0905279562170308 1363:0.112694493369918 1511:0.120143191768922 4817:0.159428904088069
+-1 6:0.0292286591061598 17:0.0530900854745905 27:0.0851068453438761 51:0.0661706293493956 83:0.050488868951478 142:0.0227382509918508 190:0.167070076110157 228:0.0736852755782032 286:0.163775547157909 295:0.165447897244957 411:0.0729931280525046 413:0.0842411049154072 424:0.401389469658853 496:0.0816991196746817 507:0.104189419403947 510:0.0880815916825009 515:0.0703909337791688 517:0.10863864755748 521:0.0960741792786591 686:0.576092251243462 710:0.336833486365283 1105:0.122294398165442 1127:0.112277828788428 1645:0.111365361204979 2047:0.133956186877574 2784:0.161314139373313 3264:0.166421562619512 3566:0.18954528377461 4309:0.172740874043179 7448:0.215765502661393
+-1 6:0.0162346938940805 27:0.0472715350174067 48:0.0496589986665422 75:0.0658047285971664 82:0.121771910077118 83:0.0630976772281663 105:0.431141821456387 106:0.113638492602751 142:0.0252593554291153 168:0.0602872899784707 189:0.0607436381272001 218:0.0460446833256396 242:0.170636395594893 289:0.0706238086564163 317:0.0483811458830167 496:0.0680681344900345 518:0.0707902292626755 535:0.0769760152671204 609:0.0574832459623792 631:0.0544785500827588 671:0.0495729211841516 778:0.077571971111544 964:0.0972375894231655 1043:0.272353772264179 1575:0.131669225225769 1835:0.109294621865565 2190:0.125048684472723 3084:0.719600718656276 3307:0.157920843202429 3768:0.157920843202429
+-1 17:0.0904388440644301 27:0.120816103516388 47:0.0392774214846396 51:0.0563607609205998 52:0.13531271272465 77:0.0625754776721291 82:0.0622446793312209 83:0.064505758070557 85:0.0508555232212558 106:0.464697746944235 114:0.174811057443238 123:0.168383576280294 137:0.203807222620106 142:0.0344307205781237 162:0.0898893459468029 168:0.0616326545273332 169:0.060489608126943 181:0.0700450860714068 186:0.0470909595153558 207:0.196274377075057 229:0.260748585158713 239:0.0703555847735219 298:0.164532908596643 302:0.105344152985686 314:0.0662215793160629 351:0.0588916612056496 386:0.0660915910354632 409:0.0423806945700603 430:0.0645869999978932 433:0.134215331818208 457:0.0572222590864299 458:0.0873693219346761 475:0.0672436039366201 509:0.0770278789656257 518:0.0723699762522956 538:0.0727141070139876 567:0.0900511888871762 609:0.0587660357726185 636:0.0848715267362799 686:0.392548754150115 698:0.0932335056986281 735:0.215810452551392 767:0.0793803747484758 829:0.123123442572469 982:0.0929506504838237 1067:0.0882667603400253 1207:0.0945517256494483 1265:0.106588700550999 1393:0.0950086550694047 1394:0.107635760977171 1418:0.105344152985686 1424:0.231503999183061 1620:0.100360372745313
+-1 21:0.0726391915289513 27:0.0349632576640723 51:0.163103737734997 52:0.0978961641395514 106:0.168099973735303 114:0.168629949872199 132:0.0728263890339079 135:0.109399624447169 137:0.294901268575474 139:0.0982327010006555 142:0.00622749223869673 168:0.0891800976046051 181:0.202705129625749 190:0.102952602027375 199:0.0561280586383675 216:0.208940828205658 218:0.0681116924416418 229:0.251528830542302 331:0.187734259006299 351:0.0852139849353398 380:0.295102219508562 398:0.0933964547521253 449:0.1372520319463 489:0.136812736474982 507:0.0642040279211056 686:0.284001528720039 1056:0.117910995251612 1175:0.127225654807303 1265:0.154229779515185 1289:0.162615691556309 1682:0.336674651548664 1846:0.157742215513421 2119:0.19005727543285 2728:0.2202460058497 2729:0.2202460058497
+-1 6:0.0104877460151486 27:0.152689005485202 48:0.128320489139915 51:0.0712294825183492 52:0.0855050069241353 63:0.0226692439578543 77:0.158167449130204 83:0.0543488258115437 120:0.0873777985785231 123:0.106402706485201 125:0.112433691748738 142:0.0516728804531271 169:0.53513302339599 190:0.089921428756491 215:0.0668139293438744 227:0.074547720935482 229:0.219691696668328 234:0.1504706299584 286:0.0587654854725155 298:0.103969443857297 317:0.0625092377168805 339:0.0815748459652238 363:0.19594698463592 386:0.334109742407666 457:0.0723182554082155 475:0.0849833648949839 513:0.0784817814084513 518:0.182924285411205 686:0.3720812693701 804:0.0987970403369976 808:0.109461490897417 829:0.155605051405707 1010:0.116770373944597 1096:0.137418598566212 1282:0.147530587187279 1405:0.148558427303475 2137:0.148039918429528
+-1 6:0.00651919340751662 27:0.0379646553805409 31:0.0248476745865692 42:0.0780071361093674 57:0.048670782105767 142:0.00338104359437394 158:0.0467918096106127 172:0.102248263662267 186:0.0369940760690273 200:0.314896237325295 315:0.0923440669242914 349:0.19388253071689 365:0.0690736284749321 373:0.0465388000352287 414:0.0481684485989745 508:0.050580591998015 555:0.0751277243259036 647:0.0588872802133956 684:0.0610129210052388 724:0.0762821557516953 733:0.220744994145222 768:0.0814722839419761 890:0.205392791111657 916:0.0789954105852095 1055:0.142272497584467 1149:0.0625437047259084 1377:0.0621786414681713 2498:0.387653183073088 2966:0.453384442561297 3575:0.1268291877422 3763:0.144373750168706 4150:0.135236367675574 5134:0.12113285339205 7306:0.492075462429996
+-1 6:0.0304109575318009 9:0.0775459609238198 11:0.00911044875013636 13:0.0134744809259464 27:0.0118065886408166 34:0.0161573417177909 37:0.0479629030890991 40:0.0126675671187952 41:0.149366777180703 51:0.0550777835326129 57:0.181632910102214 58:0.0271998766039536 59:0.0503562337568992 68:0.0124461325750733 72:0.0126169702308017 80:0.0132005838642484 81:0.0123439611583131 82:0.0152069406013327 83:0.00525311422578559 91:0.0161998061101847 92:0.0401514484538693 96:0.0376838579944836 98:0.013151081349454 120:0.0168910937771603 132:0.0245924228737695 142:0.00788600419824338 144:0.0241066011593174 151:0.0160112182740722 159:0.0243934653658284 160:0.01837597414331 161:0.0989262787292617 168:0.0301148347640216 174:0.0297226268161476 175:0.1177509832823 176:0.147124437961763 186:0.0345142475744392 199:0.15162909724669 203:0.0922185967775096 215:0.0129158706734154 219:0.0169517575014758 231:0.0217346747335778 240:0.0912565607788706 242:0.0142061089490657 249:0.0462736156345725 250:0.0849823571024561 253:0.0221535785875285 264:0.0166896495241959 284:0.0123120825129588 299:0.0503506164432439 300:0.404936541850122 312:0.01837597414331 315:0.373333807686864 323:0.0173433994640716 334:0.0554075306415582 345:0.0148780941399256 353:0.0454862660719227 385:0.0424246975996742 386:0.016146776076646 388:0.210826737347161 389:0.0172783366359412 408:0.0358145598802446 412:0.0206631057996359 414:0.0149798556676984 416:0.0197246801012814 422:0.0184873932005832 423:0.0153605941433512 436:0.0179077275526173 442:0.0172525230936092 454:0.0202288263972215 488:0.149171389175633 495:0.0670297144573642 499:0.0151009791425258 500:0.0209810671037326 501:0.0210826737347161 502:0.0279884728041509 505:0.043750571116016 506:0.0340265640841122 507:0.0108403878441645 517:0.0678198466481116 534:0.015453001723257 550:0.0330355348285626 555:0.0233638927509206 567:0.0220003234846742 580:0.0183445457637206 589:0.0645567807533578 603:0.0868237052232741 612:0.023600643731106 626:0.0191345647218914 656:0.0200131866696625 657:0.0210570975591307 676:0.0405459518038085 701:0.0874140577599613 714:0.0209810671037326 728:0.0279625472540792 735:0.0263622270076475 744:0.0500319208506119 776:0.0252821743014489 797:0.0299592900262189 800:0.0178788297817062 803:0.0506739614775356 804:0.0190985593638919 808:0.0211601154734344 843:0.533799480983149 863:0.0214263293495774 876:0.0195662976338103 903:0.0225730033118169 949:0.0698628552130703 950:0.0220917689695051 969:0.0226744555168613 975:0.0251209221881104 980:0.0711732641310865 996:0.0451460066236337 997:0.0192809628654147 1015:0.0506739614775356 1019:0.0582760385066409 1021:0.0217059263058185 1032:0.0267744754569473 1058:0.0227431330359613 1080:0.020499137471209 1138:0.0199920754170361 1146:0.0232114775074158 1158:0.0349314276065351 1164:0.021508742833089 1184:0.0267036106974657 1190:0.0219401844298607 1192:0.0252279025696036 1229:0.0228830852825983 1265:0.0520811756271438 1266:0.0276201124904003 1321:0.0235206019416787 1331:0.0229186305050757 1383:0.0294752624082319 1391:0.0256194174563604 1407:0.0247124592499404 1431:0.0236818540550172 1440:0.0502418443762208 1477:0.0335678583402888 1480:0.0294752624082319 1598:0.0212123487998371 1649:0.0230266495960091 1658:0.0591847569791325 1682:0.0284225454248074 1687:0.0310755826546636 1705:0.0303521220216335 1707:0.0231740173766955 1711:0.0294752624082319 1736:0.0290300001623871 1741:0.0307748170625302 1793:0.0320898025405664 1811:0.0326759029010953 1912:0.0307748170625302 1920:0.0304894822941347 2005:0.0355866320655432 2032:0.0382011721978777 2307:0.0284225454248074 2350:0.0355866320655432 2409:0.0290300001623871 2429:0.0432983219692863 2430:0.0865966439385726 2431:0.0432983219692863 2463:0.0333311073601034 2555:0.0273764468935502 2571:0.0539853055383156 2582:0.0382011721978777 2598:0.0382011721978777 2748:0.0363294416168303 2775:0.0299592900262189 2806:0.0645567807533578 2856:0.0355866320655432 2967:0.0340739169113905 3076:0.0387872725584067 3395:0.0686906544920124 3552:0.0355866320655432 3622:0.0382011721978777 3842:0.0310755826546636 4585:0.0315596102726506 5701:0.044898642215718 6012:0.0420570171497492
+-1 2:0.0650648800773719 6:0.0127507015646739 9:0.121925469329377 13:0.0635577556055962 17:0.0173700023358291 27:0.0835357160872743 34:0.0508083580005432 37:0.0452472268048835 41:0.249527378087507 42:0.0381429745318882 47:0.015087519306361 57:0.0475968865131666 58:0.021383175094678 72:0.0198376549671816 80:0.083021081376575 81:0.0582252088831346 82:0.0239098638767647 83:0.00825946844670535 92:0.0210433663626555 96:0.118500616083221 112:0.106474559996901 118:0.041746667569055 142:0.029757983571539 144:0.0568541925060416 149:0.0354915199989669 158:0.0228796862863453 161:0.0622166922397066 162:0.0690578551822162 168:0.0710243058175603 173:0.0238261656265497 174:0.0233664344415104 176:0.115661834185865 179:0.017376640970229 199:0.193705152509012 203:0.0966634974411302 211:0.126810679265957 229:0.0166934299825279 231:0.102520249386664 233:0.150788587515705 239:0.0810764457129107 252:0.0230051748148706 253:0.174160293742647 264:0.0524822525103393 278:0.0275195275975232 283:0.0716875752863185 284:0.0774331207418647 290:0.132593102681319 291:0.025657226555235 298:0.0316007688533524 300:0.318340744801613 315:0.22576635731928 322:0.0276260624152861 323:0.0272690169060018 367:0.0272074944924176 372:0.0314667217789999 377:0.0245343534676476 382:0.0279983058439497 386:0.0253875666488349 388:0.265186205362637 391:0.065977039246875 400:0.0280882439156243 408:0.0187704039006997 412:0.0324885892496473 414:0.0235528183674804 419:0.0775566480661929 423:0.0724543597549605 426:0.0573930550078768 430:0.0496192251209382 432:0.0598888363006457 433:0.0515557369469576 436:0.0281563096319154 441:0.0224779020585325 464:0.0446887516663773 476:0.0395813096187951 488:0.0469084177153254 498:0.0327542270323233 501:0.0331482756703297 506:0.089166578250223 536:0.0407492286449323 537:0.0356510332420447 557:0.0300004850115561 561:0.0847436874398542 571:0.0503164942711061 577:0.139584238544318 594:0.122087792220416 598:0.0336886051940144 657:0.033108062264309 671:0.0194672448963971 676:0.0318751882379933 702:0.0379726468331584 713:0.127500752951973 737:0.0375625842186033 742:0.0654315625087365 743:0.0404655367360443 749:0.0371072784334617 776:0.0397511479727426 787:0.0366143930865542 793:0.0765142153803357 808:0.0332700372711459 811:0.0362047877881688 819:0.0320156956837914 843:0.279764204657011 858:0.0319803566441925 873:0.0368573642772291 886:0.0274562240613386 891:0.0448408668118247 903:0.0354915199989669 975:0.03949761136858 981:0.037833812165716 987:0.0520485244862127 994:0.0364953926059434 1015:0.0398373201023129 1021:0.0682564306518993 1105:0.0400122539416373 1126:0.0339939968291775 1146:0.0364953926059434 1153:0.0445392369075707 1160:0.0403729813707412 1164:0.0676363677325638 1207:0.0363198736644077 1245:0.03117242259986 1266:0.043427086829584 1269:0.0325636661089208 1271:0.0406536386180355 1319:0.0336458354246713 1449:0.245075249619583 1465:0.0504547778998993 1467:0.0391706050430372 1469:0.0360911965759916 1546:0.0958771906114898 1627:0.0425579353846717 1652:0.0381851204492112 1672:0.102752606312818 1707:0.0364364940641651 1711:0.0463439379681002 1752:0.0429199070559573 1831:0.0431698212121899 1897:0.0425579353846717 1957:0.060985206119711 2032:0.0600636808632014 2072:0.0571207599575395 2154:0.0435586141262112 2190:0.0491065143318821 2225:0.0493600509360447 2444:0.0451532714638559 2519:0.0645315663042849 2616:0.0423246842176703 2628:0.0620153837101305 2775:0.0942099486215701 2992:0.0488601205622545 3431:0.0620153837101305 3532:0.0565173206786275 3622:0.0600636808632014 3658:0.0592300598682415 3728:0.0549226633409828 3918:0.0661262236419296 4622:0.0600636808632014 5147:0.0680779264888587 5314:0.074140469267587
+-1 6:0.0299390702633816 13:0.0663269860514342 27:0.0871753922542438 34:0.0795331400618617 57:0.0745060456690953 58:0.0669445393119829 72:0.0621059626050844 96:0.0618318617071031 137:0.0816988890049641 142:0.0103515159425301 144:0.0593313467000673 158:0.0716296832093609 161:0.0973912382296121 199:0.139946499702081 203:0.151312732459739 231:0.106987087354923 233:0.236037737147275 264:0.0821533799541836 278:0.0861556849692596 290:0.103777667905322 315:0.424085517215225 351:0.07082256306186 388:0.311333003715965 394:0.0929710688068572 408:0.0587647080598865 442:0.0849240772146105 509:0.185266019123298 594:0.0955553954174819 599:0.0935729051444527 613:0.0922990730929853 676:0.0997919992062497 808:0.104158868276007 843:0.35034433780432 886:0.0859574998986171 952:0.0929710688068572 975:0.123655602373636 990:0.134369820779764 1111:0.123917637397764 1424:0.185603034969148 2032:0.188042020278352 3273:0.335451914492327 3318:0.160844352212904 3571:0.158887630628811
+-1 6:0.0168224261647548 9:0.160860341291267 17:0.0229168238542784 21:0.0508830747576471 27:0.0489828704324941 37:0.019898725525658 41:0.232383387238587 53:0.0323888698494358 54:0.031489736435002 57:0.0627961610566046 58:0.0282115366259413 82:0.0315450814714838 83:0.0326909772140942 85:0.0257731526698506 96:0.0521139393631719 98:0.0272804335521823 112:0.0936502939276206 118:0.027538885968074 132:0.0255071024301317 142:0.028354950709382 144:0.0500064225610635 158:0.0603718675827452 161:0.205211396821777 162:0.0683327500063451 173:0.0314346555763109 174:0.0308281168790689 176:0.108997513128581 179:0.0458511648524507 194:0.033320808900881 199:0.117951541457866 211:0.0418263904545502 214:0.0360313555019643 215:0.0267925155591343 220:0.101214222122376 229:0.0220241993660654 231:0.0901722579447474 233:0.0497351041255334 239:0.035655620327719 242:0.0884069075968732 252:0.0910544849867646 253:0.0919101954494728 275:0.0282810095509332 278:0.0726148626018929 283:0.0945798108494308 284:0.102160100742651 286:0.0235650739198264 288:0.0436805716198792 290:0.0874672530173555 295:0.0357085535305655 299:0.0348155564725572 300:0.239998611504757 315:0.238288872638131 322:0.0364479862419199 327:0.0353687499659404 342:0.0392875608887137 377:0.0323689914328299 388:0.174934506034711 396:0.0427162792518027 400:0.0370577577219218 408:0.0247644203811481 414:0.0310740194136881 432:0.0395066703447886 433:0.0680192045716584 438:0.0468948717559211 439:0.0453278010093296 441:0.0296558464489421 457:0.0579995220236724 458:0.0442780396356746 465:0.0357617306660838 473:0.0740559571244101 478:0.032980764613258 488:0.0618878411920327 507:0.0224871607440015 537:0.0470355981096054 561:0.0372683917993358 575:0.04389427065277 577:0.184158144927563 597:0.0376073576870714 598:0.133339503852872 636:0.0430121779768297 639:0.0967717998683543 643:0.0342175253523095 656:0.0415150963332618 671:0.0256837859657974 684:0.0393601360838301 687:0.0473223064725775 690:0.0525587060934402 712:0.03861995025327 713:0.0841079995326546 742:0.129489066569951 754:0.0512632067709777 776:0.0524450163266613 793:0.100947758228138 808:0.08778854130554 812:0.0471066101366984 819:0.253436255576396 843:0.0738204506240329 844:0.046084755470686 891:0.0591600522747252 896:0.0532654218840771 917:0.102323074464709 937:0.0569553860392862 955:0.062412450529145 959:0.0467558409417449 975:0.0521105170222932 987:0.034334677810183 1012:0.0561481046436332 1035:0.0513657800506818 1043:0.0470355981096054 1045:0.0218472849630834 1059:0.0385518708936425 1105:0.0527895021465692 1137:0.11832010454945 1164:0.0446174587516653 1193:0.0512632067709777 1196:0.0527895021465692 1215:0.0492962901129062 1227:0.0459550977247364 1245:0.0411268176031608 1266:0.0572948051552769 1301:0.0552484738297732 1407:0.0512632067709777 1440:0.0521105170222932 1449:0.107778652299324 1656:0.0804598179862924 1657:0.321839271945169 1672:0.0677824715826807 1682:0.0589593616860662 1764:0.0738204506240329 1778:0.0651223627302729 1842:0.064462787901551 1855:0.0544139354867743 1957:0.160919635972585 2032:0.0792440189568853 2067:0.0524450163266613 2072:0.0753613251777938 2190:0.0647878634259048 2316:0.0696327324428978 2453:0.0677824715826807 2511:0.0781441949537924 2628:0.0818189656664036 2775:0.0621471648690511 2967:0.0706824938165529 3136:0.0686705572049963 3191:0.0724613029439217 3610:0.0606720421626256 3654:0.0781441949537924 3908:0.0804598179862924
+-1 6:0.0258304784971266 9:0.0658660377295634 27:0.0250707194678205 33:0.0476458209365758 37:0.0407387612049773 41:0.257703160877112 51:0.0292387518076511 57:0.0964221731151444 58:0.0288788106642245 80:0.0560616016938011 81:0.0524236079932292 83:0.011154733775664 85:0.0791482583215654 111:0.0269229744477512 118:0.0281902501207391 140:0.030421742543328 142:0.0122800686684377 144:0.051189200655176 151:0.0679980939286016 161:0.252078197095062 162:0.0466326613296316 168:0.0319736969397933 176:0.0223151158779292 179:0.023467830307593 192:0.0347672335469636 199:0.0201235655143468 211:0.0856313802910109 220:0.0345360646361854 231:0.0923050594116686 239:0.0364989657320843 252:0.0621387688997961 253:0.0940841035243905 275:0.0868497803976612 283:0.0645445747105536 284:0.0784323337089767 290:0.0895360742911588 300:0.0614187960870368 308:0.0318089983939113 315:0.243925005842481 367:0.0367447808202262 388:0.179072148582318 389:0.036689711469467 396:0.0437266270586136 402:0.0328137011397329 422:0.0392570845587668 430:0.0670126957866867 432:0.0404411028009013 464:0.120707798769797 473:0.0379037837022181 478:0.0337608429294785 488:0.190054934465237 504:0.0457316888592599 506:0.048169174492816 514:0.0457316888592599 530:0.0353903419171095 541:0.0443930102711474 571:0.0339771924634445 577:0.125675966541707 594:0.206105397136747 598:0.136493319626124 636:0.0440295245352431 643:0.0700537123624104 653:0.0439784991671609 671:0.0262912723217175 702:0.0512835382705715 713:0.0430486829919207 742:0.0441839365947219 754:0.0524757109833843 797:0.0636171021581774 800:0.075929659193931 808:0.044932480929095 814:0.0477912128491774 819:0.172953775076323 843:0.0755664905809805 844:0.047174776241052 876:0.0415480858971647 891:0.0605593368124594 910:0.206868331793261 917:0.0523716367035906 968:0.0597581922720199 975:0.053343062260489 990:0.0579650058565717 1012:0.0574761490186799 1015:0.0538018521342574 1080:0.043528926136739 1123:0.0488959757867381 1137:0.0605593368124594 1184:0.0567038246983211 1207:0.0490514037442474 1215:0.0504622717824681 1266:0.17594991567401 1267:0.0577997954104342 1324:0.256892085644031 1407:0.0524757109833843 1431:0.0502872707395468 1439:0.152189198223142 1449:0.220655778851508 1464:0.0550334201324051 1518:0.0551639447128771 1656:0.0823628957370405 1657:0.247088687211122 1666:0.0621070890769974 1690:0.0562635617761052 1705:0.064451261884974 2072:0.0771438107066225 2124:0.0601519738807595 2190:0.132640519800393 2225:0.0666626709572844 2444:0.12196250292124 2468:0.0638886624936305 2519:0.174304786535759 4007:0.0871523932678793 4345:0.095340093376748
+-1 6:0.0227279611122714 9:0.0579548204770363 37:0.0358455992416801 57:0.056560557615828 58:0.101640623625018 91:0.0605355097605194 96:0.140817213361888 100:0.0468152149772276 111:0.0473784731741021 140:0.0535355302511494 142:0.00589369133022071 144:0.0450408288792838 161:0.221800903202988 176:0.0392696624606335 186:0.0429909995364264 199:0.0354130191201218 220:0.0607758260544365 231:0.0812182322138429 275:0.0509454604620645 284:0.0460078463943442 290:0.0787818318913942 300:0.10808348046545 315:0.429253995253335 323:0.0648088946495374 388:0.157563663782788 422:0.0690837756901836 473:0.0667022658591316 502:0.0522937267611037 514:0.0804776455153455 541:0.0781218676387696 575:0.079071216535764 580:0.0685499827330554 594:0.072539971749642 687:0.0852464863049007 701:0.32664925189493 806:0.162652435073402 808:0.079071216535764 843:0.398940869679917 848:0.0837340283012791 882:0.0568920977841558 975:0.0938719772303663 1067:0.0805818418633515 1106:0.0970763271282976 1146:0.0867367555913436 1225:0.135155285382595 1359:0.0841019516742766 1391:0.0957347566347289 1407:0.0923456310499106 1811:0.122103463803771 1835:0.10200557447105 2050:0.0975434732572441 2084:0.114999477524349 2429:0.161797368089362 2430:0.161797368089362 2431:0.161797368089362 2868:0.120618037179645 3482:0.1155538337874 4093:0.14494045796432 4607:0.140769090551328 5269:0.14494045796432
+-1 6:0.00829129280483804 13:0.110211130280984 41:0.11453512636673 72:0.05159866853129 82:0.0621906743940475 106:0.0580368205410625 142:0.025800635760756 315:0.234891542495446 341:0.0692764847739325 406:0.0777419286898419 423:0.0628190596591502 456:0.0898497529406487 464:0.464950134101086 488:0.122010988749657 598:0.43812818994059 670:0.118288452643627 701:0.119163552707764 869:0.44401882607331 953:0.181199628343282 962:0.112286724361721 1045:0.0430716080654706 1308:0.0968498867190853 2612:0.35414774266489 3317:0.171997400931237 5420:0.161304913972622
+-1 6:0.00646253341986626 15:0.0442824462574282 26:0.0279716262648357 27:0.0188173473951214 28:0.0477225451573007 40:0.0403791507228965 69:0.262260754839643 83:0.0167448326184801 92:0.0426622669177431 134:0.0462843796001761 142:0.00670331614873497 159:0.0777566367261706 172:0.101359597688698 174:0.0473719387801349 199:0.0302083172042982 202:0.0802451645240368 261:0.355416783787416 337:0.0494071398203186 365:0.0684732917934276 436:0.0570826918200277 437:0.0581288512288025 593:0.0622455510106576 696:0.0713241248037242 784:0.0634601094861385 867:0.0568077713661552 1005:0.0681255941027856 1013:0.0800754788839312 1305:0.0587773515831476 1446:0.0674500070931511 1936:0.174027339480765 1941:0.118537169627661 2707:0.102289489473552 3448:0.103512872041813 3557:0.434456218398265 4177:0.115803767603339 5455:0.143118960750714 5682:0.134060993600379 6666:0.143118960750714 7050:0.392484195567562 8170:0.487798707948041
+-1 6:0.00797388290934611 21:0.241187374645788 69:0.161796962192833 72:0.049623351970707 84:0.046798344874066 100:0.0492739811671085 140:0.112694503727024 142:0.0330839035416223 218:0.0904618013328713 226:0.0618286342854323 239:0.0676035046951804 254:0.0769555017159204 261:0.109633932771054 336:0.145805259914328 408:0.0469536525833167 434:0.0689988530269872 443:0.124125968435337 485:0.0551816563282318 507:0.0426359396629697 514:0.0847043849189903 537:0.0891800857317112 727:0.0853707983152954 761:0.0810831141049437 903:0.0887810677117722 959:0.0886496626220546 1074:0.31263466400268 1505:0.536059589896366 2061:0.296324753399558 2362:0.444487130099337 2375:0.248251936870674 2734:0.132024536703463 4084:0.132024536703463
+-1 6:0.00383943043370905 17:0.0627644669716511 18:0.0205523638041974 27:0.111795006039598 41:0.0176791750193866 67:0.195463728743426 85:0.0705873641036936 87:0.0357682400847395 94:0.0230488240588468 105:0.0407852230869097 142:0.0318598473460694 164:0.0448480606490647 181:0.0324074796011564 187:0.0358010074438893 194:0.152098070179535 232:0.34079078774131 254:0.148216520703178 283:0.0575632552456372 286:0.021513296856061 291:0.0927093800896344 306:0.0602566270373333 317:0.0228838369399379 318:0.139031023205259 386:0.0305783318776458 409:0.0392162126365843 419:0.0467069758336736 430:0.0298822087647636 431:0.042811802778316 433:0.124193740689443 502:0.0265019099197035 506:0.0429590635423032 679:0.0966002966966166 703:0.110361600205004 708:0.0680729040498931 723:0.0394048799820066 729:0.0413255824256913 787:0.0441006055753916 793:0.0460791911178487 816:0.116561047870475 826:0.0500502446751509 853:0.0406283760584909 856:0.028815392707728 867:0.0674996853660884 922:0.382050574532513 1030:0.0574800353929909 1133:0.089541766066035 1287:0.34399861539411 1392:0.0611279507890047 1565:0.0577401645964558 1672:0.0618807493563117 1817:0.109157307009289 1819:0.0532945811510583 1836:0.0409444406889595 1856:0.0597667442878621 2162:0.0661522016062084 2512:0.118904504704797 2546:0.258113083315701 2910:0.0631215580044381 2927:0.0611279507890047 3033:0.245991605873006 3163:0.0734542974578754 3219:0.0588501057545414 3535:0.0673930102543348 3634:0.133508696408131 4749:0.0796464521514568 5230:0.0850278455594391 6451:0.0761018189304891 7038:0.159292904302914 8169:0.289804180983008 8339:0.178598595618672
+-1 142:0.089473638797587 201:0.0985954660348967 248:0.0999387345499198 262:0.0768859265128377 383:0.295229825797015 409:0.0419553888341796 703:0.118070143383599 1052:0.125921342417498 1151:0.131586233816354 1266:0.111919434662364 1346:0.154794937830614 1647:0.124702610413812 2197:0.283091217027556 2691:0.685111400450448 3111:0.175449094145282 3412:0.159824828049003 3695:0.16630948437767 4780:0.18193375047395 5110:0.13702228009009 5555:0.175449094145282 5929:0.18193375047395 6025:0.170419203926894
+-1 6:0.0306066471077787 29:0.0555786877095437 67:0.0432825292949137 69:0.0776294087404766 72:0.0476180939493214 75:0.0155073920652347 142:0.011905124033025 179:0.0417107023795339 186:0.0434204264448398 199:0.107300254132875 209:0.04806639779238 261:0.315611020017796 278:0.0660575785165993 294:0.0731217342549194 295:0.129935965946345 317:0.045605561409796 326:0.178449205077985 337:0.0584982233297474 376:0.0975845575647901 398:0.0595154697616319 416:0.0744435195614665 424:0.157617380847081 475:0.0620022609151521 493:0.0683091732878773 513:0.057258828171676 789:0.0786228948251621 862:0.0736259209517007 873:0.26541606421439 874:0.104557629578475 882:0.0574603794693467 960:0.0881783835329307 1055:0.0834935369782357 1056:0.300547950822579 1407:0.0932680496788063 1431:0.0893784110334918 1601:0.263671542553241 1603:0.110810593915695 1608:0.0829183019375124 2069:0.146388233857851 2479:0.12962375194703 2925:0.14417621452826 3382:0.135663569625093 4159:0.146388233857851 4771:0.13070064263948 5110:0.127622737062872 5502:0.15872867710949 8143:0.533897958736246
+-1 6:0.00779183600844023 14:0.0790515367734273 37:0.110600650266061 94:0.327431014178585 102:0.0742449648418321 142:0.00202053655858513 144:0.0463240961973633 158:0.0559262602339233 199:0.0728439571463621 210:0.122628769831455 262:0.218770626280515 278:0.0672677169901687 387:0.0550024081773659 389:0.0664053238500115 394:0.0725889597071231 442:0.530448923365828 445:0.12195000240452 496:0.0653385576355326 505:0.0560484284414789 513:0.0583077783826595 544:0.126389202902268 587:0.197372449455913 662:0.0812243795345643 703:0.11198529381814 886:0.0671129801640567 913:0.0813240504756786 996:0.0867541608183816 1020:0.0996059096705455 1192:0.0969576571801645 1216:0.0834217492211653 1326:0.151588113773626 1915:0.323272998187241 2021:0.113731519329477 2023:0.114191308623398 2067:0.0971662381335874 2280:0.105834830005149 2336:0.14120825858682 2384:0.303176227547251 2503:0.154442931911009 3262:0.14120825858682 3690:0.149069985715054
+-1 6:0.0351843761227383 15:0.0241089700204373 29:0.0511131179026482 40:0.0439677486907459 63:0.0152101930134309 68:0.0431991734561717 69:0.214176402062665 81:0.0428445475731303 98:0.0912919480689273 100:0.0434838160067851 132:0.0426788134797461 142:0.00547429269584182 179:0.0767187616832232 198:0.0612712899348419 218:0.0399158362246027 254:0.203737477552879 265:0.0664767844882447 276:0.0546652454755632 285:0.0750426203161503 291:0.056638986007593 299:0.0582538391005381 306:0.0552189150493606 309:0.0517866313214591 312:0.06378100905279 326:0.0820556910811934 337:0.0537980781729647 346:0.117254301373166 355:0.0423515530463746 359:0.0783484411412169 373:0.0502343938086705 405:0.0669221265482261 408:0.12430844482741 410:0.0895352143342718 423:0.0533149528004747 427:0.0747508076583822 431:0.0784651055646089 468:0.0942104310501748 483:0.204969943409742 493:0.0628207496791286 513:0.0526582644520374 515:0.0508403977217366 644:0.0670512768848026 685:0.148736920889822 698:0.0790592417753832 713:0.0703652959806264 724:0.247018907859955 729:0.0757411736277824 774:0.0789389429231187 837:0.0763607317030954 853:0.0744633397676675 861:0.0939477344355698 871:0.0808272122959731 873:0.0813635774342414 936:0.0823396359533183 1003:0.0743684604449108 1266:0.0958664085534014 1296:0.0716370578547399 1305:0.384006267122907 1359:0.0781172060022514 1380:0.0724766641922717 1395:0.0751408795782291 1411:0.0891243923819841 1591:0.0835191112045846 1647:0.106816045253187 2041:0.11074711419863 2256:0.106816045253187 2379:0.105825679283787 2385:0.11074711419863 2423:0.0908228849458915 2575:0.195993996347261 2736:0.183931395905557 2752:0.126095543375013 2804:0.183931395905557 2824:0.102711929480144 2916:0.13259211679219 3149:0.120199264007388 4050:0.109539977190013 4117:0.145975335546392 4495:0.13259211679219 4985:0.13259211679219 5516:0.120199264007388 5657:0.155838307307438 6854:0.155838307307438
+-1 6:0.00752228857149241 69:0.0763168617750082 142:0.00975319491225414 261:0.206849809285474 295:0.063869513587825 329:0.403975550509952 416:0.146369678311237 424:0.0774762043316554 429:0.0858449186495324 504:0.0799072213469041 528:0.078704563372265 595:0.106931584930116 728:0.103749947409196 730:0.0723095225848737 922:0.213863169860233 1073:0.100709196367718 1193:0.0916910868039462 1311:0.183749105607879 1319:0.0793975710307647 1603:0.108937024206153 1834:0.117731316263242 2069:0.287826244978008 2088:0.12201694896067 2433:0.102479405480382 2913:0.11069466341033 3027:0.25698154964875 3584:0.134793787665456 3725:0.166588248427386 3912:0.137975425186376 4467:0.156044915287094 6009:0.166588248427386 6208:0.524870888235789
+-1 6:0.010122695619244 27:0.0294748618950012 29:0.0735273140660665 33:0.0560157036491149 69:0.102699112779591 106:0.070856147873955 111:0.0633050004543089 118:0.0662847933152324 142:0.0157497744161634 154:0.073175282826154 173:0.0756617261216325 196:0.0941313313576012 209:0.0635889991677141 286:0.0567200160545603 290:0.105264766244138 297:0.197776749309296 367:0.086399382469131 379:0.494539992370395 394:0.0943033122921006 398:0.157470887395622 480:0.0744539344351784 496:0.0848840158376648 528:0.105912227547643 662:0.105521942453578 682:0.15674644060693 709:0.0882785900760157 739:0.103408295957785 844:0.110923822223557 875:0.499261801762184 968:0.140511680693768 1138:0.0998194618002426 1160:0.128207345951752 1256:0.172909213873713 1349:0.181391137940844 1711:0.147168553971313 2458:0.168837326981031 2592:0.137088914786896 3855:0.216186419152101 3995:0.19693437253602
+-1 6:0.0223687071324534 58:0.0500170105755856 132:0.0452222446765738 142:0.0116010630820382 186:0.0423114538612326 196:0.0693358193089467 199:0.0348532562802687 201:0.447432654752636 209:0.0936775310141911 224:0.0709103307775115 240:0.0671235451840969 275:0.0501401810384395 276:0.0579230045224677 299:0.0617254593172905 308:0.055091985177838 348:0.0740753995102496 379:0.18213561338986 398:0.0579954242514848 426:0.0671235451840969 431:0.0831412101955427 448:0.135048290034346 480:0.0548417245393697 485:0.0515993827818043 519:0.267453412018102 523:0.0873987509651328 538:0.0653339752607889 837:0.0809114267995842 927:0.0957704606554409 1045:0.116200960359058 1281:0.0964719654511345 1291:0.226363431406825 1302:0.212750075419877 1337:0.0960016331951357 1460:0.130878310831236 1505:0.125314940749468 1599:0.18069977820171 1602:0.102838924021023 2024:0.0726161977668849 2355:0.27025262318071 2640:0.10316626783783 3572:0.378939350593027 5916:0.147790957477914 6207:0.346841347836948
+-1 6:0.0298477219913717 12:0.0335349915548947 59:0.123558988905293 69:0.151409006173134 83:0.0257791114989076 111:0.0311101266121212 124:0.0575188409150926 141:0.0454416067765184 142:0.00257998300651798 201:0.0597032515551262 218:0.0282179410762928 254:0.0480097849240444 261:0.205190067585248 284:0.0302101319563301 296:0.0448590381988608 302:0.126299360559667 318:0.060045933612862 341:0.041564592855477 347:0.0817319219372376 373:0.0355125007658652 482:0.0787386835803554 495:0.164470674771775 500:0.0514812019105009 506:0.027830303820647 511:0.0645234092233724 532:0.115037681830185 613:0.0920174557695018 778:0.0475390675296175 804:0.0468620964773185 829:0.0369038328803136 916:0.0602792632552522 990:0.0669799198736346 1301:0.0653509020703803 1375:0.0624422965194283 1404:0.0673699307405715 1579:0.0624422965194283 1606:0.157477367160711 1651:0.0681850655498906 1735:0.245353412115173 1891:0.212912565772394 1901:0.0951722522150329 1974:0.0891414774055544 2148:0.0796803984470123 2221:0.184866414501461 2328:0.193559852141418 2333:0.15326922264462 2384:0.387119704282836 2403:0.0748119810289224 2626:0.0778577681536248 2726:0.0829721282921886 2838:0.0748119810289224 2874:0.0951722522150329 2966:0.172982708530318 3150:0.178282954811109 3182:0.0901530105916771 3266:0.339892741325928 3426:0.0817844707050578 4020:0.080691931633135 4191:0.103195217904549 4275:0.103195217904549 4752:0.110167707580684 5685:0.115702083987793 5698:0.0967799260707089 6559:0.295807669092289
+-1 6:0.0425159503140514 12:0.0573218432606225 13:0.0565138760549817 27:0.0495185002484542 29:0.0617638571610436 33:0.0470538868841393 59:0.158400867282382 67:0.0961985993951668 85:0.0521099664277254 98:0.0551574925562357 118:0.0556800497648088 140:0.0600875881373801 142:0.015435007176135 154:0.0614681465466364 172:0.0666828214139295 196:0.158142975252047 204:0.0510462515418765 209:0.0534155491941326 220:0.0682140026919717 290:0.17684742245723 297:0.249202389260519 367:0.0725765545145699 379:0.415419736694629 404:0.142814184419056 478:0.0666828214139295 483:0.0825602430226662 496:0.0713036277204755 541:0.0876829758700397 682:0.131668957191194 739:0.173728506254553 875:0.419386115237358 912:0.0808670813803704 917:0.103441981728822 966:0.0849349558319725 1138:0.0838495878549674 1160:0.107695763172383 1256:0.145245887506899 1258:0.145245887506899 1349:0.15237080908451 1373:0.0986487264463758 1544:0.111415404233259 1711:0.123623413442168 2202:0.119208169734511 2904:0.15237080908451 3072:0.283650903873325 3855:0.181599277523863 3995:0.165427319220246 5512:0.172139288353021
+-1 6:0.0281563499556318 12:0.0474520111577556 13:0.0467831619603763 34:0.0560980076773881 42:0.0421140332483369 55:0.0706976888427312 69:0.428487470381581 79:0.0954713952588419 110:0.0679338429582722 118:0.0460929061665244 140:0.0497415425001917 142:0.00182533790431568 144:0.0418488486698917 186:0.0399442878502351 196:0.0654567421363425 201:0.168960195162753 382:0.061826409590759 398:0.109501598687459 411:0.052736426866297 413:0.0608629193875872 447:0.198036967905445 448:0.1274928483551 496:0.0590263736425371 506:0.0393798783357176 519:0.0841634679758034 523:0.165018241999051 561:0.124755118139166 590:0.11830404319475 607:0.0690497618621959 658:0.065102347360594 744:0.0868549767967596 752:0.107364696070655 837:0.152769476230031 875:0.11572502143246 946:0.100062736824964 1093:0.0893567940323509 1192:0.0875908362125992 1349:0.126135185498497 1351:0.0934622000640332 1814:0.123556163736207 1909:0.146021227511505 3379:0.273887179857288 3919:0.150331016121081 4678:0.142499873817333 7723:0.146021227511505 8145:0.163718442313518 8167:0.531317605517864
+-1 6:0.0142284550818552 17:0.0387662273724286 59:0.0441755703527383 85:0.0871960183363031 94:0.256248287452943 102:0.135576665905395 116:0.0761670683493215 144:0.0422955720088151 162:0.0385306873322056 199:0.0332545811769811 210:0.111964493439031 240:0.128089344895731 262:0.199745478850546 275:0.0478403138909942 284:0.0432036494123559 373:0.0507865915667732 442:0.302699384296013 445:0.111344754276483 459:0.0649862519880674 496:0.119312923349947 544:0.115397904574636 587:0.0901040854952928 663:0.0665818262835155 703:0.102246615636789 1020:0.0909437910461356 1114:0.0870657104774307 1326:0.138405419816 1424:0.0661554723363739 1623:0.15755134806293 1915:0.590319833335993 2021:0.103840982562886 2067:0.0887162828670307 2336:0.128928237344395 2384:0.415216259448 2503:0.141011971827017 4614:0.141011971827017
+-1 6:0.00811983683355434 9:0.0621151651483672 63:0.0351020251275995 69:0.0823792466046065 75:0.0164562283271674 83:0.0210390105294111 91:0.0648811117895734 125:0.0870485641314383 132:0.0492470010689317 139:0.0664273760563759 142:0.012633551697575 188:0.0897449591537062 201:0.487253929663791 325:0.0729131240949283 338:0.31917723693203 414:0.059995143371289 415:0.0706454715556241 458:0.0854883721599189 507:0.0434163477498281 539:0.0754380138392484 548:0.183867295984216 628:0.176467831225664 681:0.0888511116641083 762:0.108107054485784 884:0.0838296080035293 993:0.0892298066620696 1127:0.0935736716292588 1150:0.0886021777599163 1204:0.125087041467331 1266:0.221240130152376 1316:0.338130858624126 1365:0.0981997422593513 2736:0.106119042590883 3497:0.142526412819678 6984:0.336881319772509 8146:0.377710048447113
+-1 6:0.00830689801850079 69:0.0842770630017506 132:0.0503815315482814 142:0.00646229891772806 196:0.077246160444336 199:0.116488717670022 201:0.299087441223306 215:0.0529204746637848 218:0.0471198891923322 254:0.0801694120649102 278:0.0717142999890423 373:0.0593007511251782 379:0.304372479219955 398:0.0646119695623105 406:0.0778882483816337 480:0.122196945100946 519:0.297966467866769 530:0.0682876922728331 595:0.118085043205794 654:0.0868065533454831 692:0.116066679762338 727:0.0889361586350799 807:0.108014519633637 927:0.106696660446955 1027:0.0868065533454831 1045:0.0431526740297878 1073:0.111213630772188 1188:0.102286406765202 1215:0.194739688864283 1281:0.322434594235358 1411:0.105209658385776 1498:0.136568262966341 1505:0.139611792514822 1602:0.114571546193957 1689:0.133054765954503 1906:0.130734872245857 1937:0.14312528952666 1967:0.133054765954503 2355:0.451627550495233 2461:0.141892956198099 2904:0.148853402395096 3848:0.168165535847526
+-1 6:0.0272251124063282 13:0.0603144865534413 27:0.026424332622985 29:0.065917533750546 40:0.0567025780696428 67:0.0513340221438254 69:0.184140338016891 72:0.0564760962231585 79:0.0615425288104167 85:0.0556144099255827 91:0.0725135901836208 94:0.0544791592286244 142:0.00941315754403951 196:0.168778236783495 209:0.114015588684089 228:0.0686343462771126 297:0.177307653805424 327:0.0763201997193868 337:0.0693801665638007 372:0.0895830484983294 379:0.44335709868008 398:0.0705866429807466 451:0.103071914611193 459:0.0828976397443338 473:0.0799005540708689 503:0.123264279016897 541:0.0935797371947034 657:0.0942558035863998 676:0.0907459173495223 681:0.0993033707478124 682:0.140523816492213 700:0.112210276838571 714:0.0939154759771236 715:0.111976469964654 739:0.0927059545893241 875:0.447590219852808 908:0.0965264632318556 968:0.125969288721128 1256:0.155013807944346 1373:0.105282944651954 1411:0.114938402975647 1965:0.168622882389888 2193:0.151363344914572 2446:0.146263913020549 2449:0.113911443033552 2698:0.176552459629104 3419:0.183715814901569 4013:0.193811997104421 5221:0.188255667086355
+-1 6:0.0281237607050793 59:0.0582112001367902 69:0.0951092271952514 96:0.0580827817063853 100:0.057929521124775 140:0.0662452929484262 142:0.0072929007499592 180:0.0722414105060487 201:0.562548780284441 209:0.0588895113625818 338:0.122833122799416 339:0.0729165715291575 367:0.0800141137968919 379:0.228995729458926 431:0.104531901929984 465:0.0797153629567514 473:0.082537916808382 496:0.0786107389737273 519:0.336264215665875 523:0.109884828993987 539:0.0870953728410815 595:0.133262560447647 628:0.101868612207947 800:0.0826708481542797 827:0.0800742826153979 1138:0.0924423942321894 1193:0.114269221817921 1316:0.130127291278275 1447:0.121897668503329 1455:0.124472031055781 1592:0.315112302695046 1965:0.174188797568808 1979:0.138530314724614 3848:0.189779918588303 4191:0.194469622512232 4702:0.2076091600104 4729:0.179350480940072
+-1 6:0.00928799956499401 72:0.0578014095212325 83:0.0240657940117174 85:0.0569195022029893 100:0.114788922999913 142:0.012042567795873 196:0.431847305099055 201:0.222941144238628 215:0.118341490304035 219:0.0776601243819504 275:0.0624580549402548 287:0.172425264701357 338:0.24339717644983 355:0.111799966240508 377:0.0714862827520813 379:0.113440317845678 398:0.144486171336543 514:0.0986638879984736 515:0.134208885863531 521:0.183177120532215 523:0.108869889905364 594:0.0889324681691192 664:0.104995820966244 762:0.123659907904481 778:0.0887591030222571 865:0.137836672947789 869:0.124348722222536 880:0.109253123868659 989:0.224654554539399 1026:0.128510992404601 1151:0.148769445050782 1179:0.115823789994975 1291:0.140986922488703 1322:0.20870121461212 1386:0.132993491867893 1543:0.130210593960538 1555:0.139050453691954 1843:0.322972048998351 1857:0.177693930028213 3022:0.156100901354238 3311:0.19267342531882
+-1 6:0.0175259331522219 27:0.0255156570281892 41:0.040350260920977 63:0.037882272667826 69:0.177808150424465 96:0.0542933230101776 142:0.0113618242924469 144:0.0520976707166741 158:0.125793188826329 166:0.130768513276713 196:0.244461477894291 199:0.163845635625232 201:0.210338704446773 202:0.217619205637535 208:0.0656516269617464 283:0.065690066591774 338:0.459276791956013 398:0.068159321136509 402:0.066792111425569 406:0.0821644993979675 409:0.0447527786359796 436:0.232206329002023 496:0.220445962699138 508:0.0679893982846805 519:0.209550359464554 640:0.0817858461634869 726:0.0807562828594186 728:0.120861797946111 1182:0.131190195431113 1316:0.121637477583725 1335:0.0941936853475115 1598:0.0916855889884764 1740:0.125475622164221 2907:0.130610794299495 3151:0.299366437334432 3470:0.165115942890752 5042:0.363563924472411
+-1 8:0.144601687227081 14:0.291488539381663 53:0.110633876445826 63:0.0310510184770562 111:0.0898385663641735 119:0.150304124714191 124:0.166100584262089 142:0.0521525946221764 199:0.0671497972652662 218:0.162973259713778 262:0.13444632222835 318:0.173398220426273 374:0.185411393274508 436:0.126888603464649 593:0.138365076835055 595:0.204209992261848 598:0.15182032452488 665:0.177625446176204 703:0.412925934897809 1013:0.177999063523141 1045:0.0746259389882546 1213:0.18278266371674 1449:0.18407511835719 1743:0.21318839998497 2376:0.398811084759717 2401:0.194548163343972 2691:0.239603558895522
+-1 6:0.00917492128529702 27:0.0267151703413397 53:0.141318655693507 63:0.019831575689389 75:0.0185945361525873 80:0.0597388216473245 142:0.0142751442861497 144:0.109093655401101 179:0.100028574770456 201:0.110113455288732 202:0.113924837242696 281:0.105907983621341 408:0.108051766349411 506:0.0513287105074518 561:0.0813044581892502 795:0.217395318132828 873:0.318253938557218 1056:0.0900949320434928 1245:0.0897219724499276 1378:0.11251282350286 1471:0.106262557259182 1601:0.158081062560035 2692:0.149811198647043 2736:0.239816115175862 2804:0.239816115175862 5015:0.557213613624921 5570:0.151910273295123 8224:0.195945176391552 8234:0.185737871208307 8235:0.371475742416614
+-1 6:0.0344828244609524 59:0.0535300012957311 69:0.0874607814824984 142:0.0134128478944801 317:0.0513812755444714 319:0.0782036784455377 322:0.0747115486925751 500:0.0892137052719713 511:0.111815035391056 603:0.0922958828799477 640:0.0804581117636075 780:0.0874607814824984 851:0.0979117372964244 1011:0.103462003417813 1080:0.0871644897585175 1214:0.125331917595088 1490:0.279668148348968 1501:0.140761787065937 1814:0.151318104509215 1916:0.105290233373027 1937:0.297064212397874 1975:0.245091838569619 2213:0.119662780605233 2219:0.123897924210552 2560:0.138941377790802 2644:0.140761787065937 2909:0.148532106198937 2982:0.617906435564013 2984:0.133488652618687 3257:0.149884111124679 3439:0.156229532680476 5846:0.200504480027192 6323:0.170872067396996
+-1 6:0.0143861162364938 29:0.0261237847728206 142:0.00373052946191428 172:0.0564086426830437 201:0.25898396036229 215:0.0458245724281224 322:0.0623388043468969 342:0.0671954701489514 398:0.111896799782785 416:0.0699817344705341 423:0.0544982739963327 575:0.0750745550662453 603:0.0770110523147135 673:0.0727294530516582 745:0.0977017589098633 780:0.072976676836121 851:0.245090648289285 909:0.0633307940699224 912:0.0684074578981903 1278:0.209152186672796 1493:0.0960328970329465 1738:0.0971296481065183 1787:0.10337957908127 1844:0.0935312695074468 1916:0.0878534493360399 1937:0.495736687010384 1975:0.102251475434421 2026:0.0866569350809121 2161:0.095506560755094 2193:0.119973646465793 2219:0.10337957908127 2221:0.133653904710584 2560:0.115931733679212 2707:0.113852292106876 2752:0.128894224070413 2909:0.371802515257788 2984:0.111382017154654 3516:0.149215246669843 3891:0.291233736141543 3892:0.145616868070771 4970:0.159297126315562 5484:0.153619306144156 7243:0.145616868070771
+-1 6:0.0229165092029789 12:0.0386212862146592 13:0.0761538170465149 17:0.0312186601157403 27:0.0500455340119009 29:0.0416141468845028 40:0.0357966883507768 58:0.0384314326831811 59:0.071149668654214 67:0.0324074857798783 69:0.174373401982749 72:0.0356537089598617 78:0.0440140049171877 79:0.077704358395818 85:0.0351097210690013 91:0.045778278120104 98:0.0371630287116169 100:0.10620807225172 111:0.0358286389335812 118:0.150060431841723 132:0.0694945832255886 142:0.00891387689428038 154:0.0414149082762151 185:0.0333620935847595 196:0.159826117653202 201:0.0687585193657153 209:0.071978746543797 220:0.137880031692419 242:0.0401443821025716 254:0.0552914898344477 286:0.0642034898014901 297:0.167903128258595 299:0.0474278212010696 319:0.0519724049528879 331:0.0447863551244214 339:0.0445617844290241 357:0.0530346376575072 379:0.349867599275266 389:0.0488260473361853 400:0.0504822810668914 441:0.0403989574044425 451:0.13013987478746 461:0.0626908323370256 478:0.044928358631439 502:0.0790913226658848 523:0.0671543376074967 543:0.063413703663024 554:0.072727672301909 623:0.0795251913339969 628:0.0622553562529908 664:0.0647646912720547 678:0.0619997460466574 682:0.0887135547638634 687:0.0644652597172397 700:0.0708390420063669 729:0.0616652721235749 739:0.0585258426983584 845:0.0775880134973111 849:0.0715985946432916 868:0.0817350947982458 871:0.0658061105009454 875:0.282566475006619 876:0.0552914898344477 894:0.0906810794851248 913:0.0597953854884349 917:0.0696952881434082 927:0.0735868851289045 1009:0.0510614927426472 1019:0.0823397724747362 1170:0.0762772811761643 1182:0.0857706489812941 1232:0.0648657828187029 1237:0.070256765019564 1256:0.0978611760162931 1258:0.0978611760162931 1473:0.0811528178114428 1544:0.0750674781348249 1588:0.10266167823069 1683:0.195722352032586 1754:0.162305635622886 1819:0.159050382667994 1917:0.071290355721735 1941:0.105084877794085 1965:0.106452668912282 1972:0.0832927722103276 1974:0.10266167823069 2488:0.0955566161204033 2553:0.10266167823069 2698:0.111458660083213 3855:0.122354712875091 3986:0.215901829132262 4222:0.11884696735801 4366:0.253753966755686 5584:0.122354712875091 6206:0.13325076566697 6209:0.13325076566697 6642:0.122354712875091
+-1 6:0.038735627793683 20:0.0198641426485967 29:0.0127891134996505 31:0.0134217702065322 37:0.0166615168235245 40:0.0440050266079288 42:0.0632047388387521 51:0.0239163853162289 53:0.0271197117220138 63:0.0380577223191233 69:0.250084322658653 72:0.0219146307065584 75:0.0356837855262658 83:0.0364968946463605 84:0.0206670530075984 96:0.0218179118134983 98:0.0228423374148581 132:0.021357499288636 142:0.0173499578492384 154:0.0254557645500779 160:0.159587713950846 172:0.0276153145460471 173:0.0263207330565501 179:0.0191959518608929 180:0.0271363849560673 185:0.0205060842710845 186:0.0399655900411573 189:0.0263514552978121 202:0.0437254193911952 220:0.0282494216777426 234:0.050522809342799 254:0.0339850359552059 277:0.0318902099947525 283:0.0263977226012393 299:0.0291516147172294 317:0.0419768602046362 326:0.0410626308701575 337:0.0538436907040233 339:0.0273899989054915 342:0.0328960945693984 355:0.0211937303385866 389:0.0300110374894805 408:0.0207356398917759 410:0.179222252967231 439:0.075907365837727 442:0.0299662015076968 457:0.0242819574225431 468:0.0471451535336395 472:0.0641663669530445 505:0.0506607419303594 507:0.0188288544694167 508:0.0273217149694429 535:0.0333932916738968 540:0.0796155201496236 561:0.0312054124345637 575:0.0367533653346014 617:0.0493676037377362 638:0.043009378030988 643:0.0286508738251482 655:0.0266641731021835 656:0.0347612451407996 662:0.0367083203265062 684:0.0329568629252835 733:0.0794920419437269 747:0.0388083512874087 804:0.0331726133794943 856:0.0264286910147262 867:0.0309544337331407 873:0.0407162806434942 890:0.0739635905638966 930:0.0308313475241905 946:0.0500580500187737 1055:0.0768502003129206 1056:0.0345792786188556 1068:0.0414953361622883 1098:0.0395029355285678 1124:0.0391494032843674 1146:0.0806328220521259 1179:0.0439130395919058 1207:0.0401225154878995 1244:0.0497066608680137 1393:0.0403164110260629 1427:0.213813217801144 1511:0.0425051521481616 1598:0.0368440902897809 1601:0.364037953033096 1675:0.312220809819671 1921:0.0532023257488631 1976:0.0564039437050393 2069:0.134740550018417 2162:0.0606729921721827 2624:0.0447022238959262 2675:0.0583045854655037 2740:0.0509968594421548 2753:0.100116100037547 2786:0.0601505872873117 2982:0.063101226542065 3843:0.0571199850652465 3969:0.0534533044502861 4036:0.0618110279679239 4262:0.0685083108049495 4535:0.0645906514885661 4711:0.0752055936419752 4817:0.0564039437050393 5482:0.0612252645823405 6016:0.0730495501373297 6202:0.163805752958002 7052:0.0752055936419752 8171:0.265800477948079 8172:0.531600955896159
+-1 6:0.021279209207033 59:0.044044191631865 114:0.0498061136015647 142:0.00919668143554749 144:0.0421697844274721 168:0.052680014145291 196:0.197876175303248 219:0.0593075693068179 220:0.0569017832683785 275:0.0476980361751665 284:0.0430751611970023 295:0.0602251441907094 310:0.0727976626909143 341:0.0592649360130413 379:0.259896680556322 381:0.136367139168741 382:0.124601103601814 508:0.0550331373663677 511:0.0920007981856741 519:0.0848089114518826 523:0.0831418774097233 546:0.0612823771566486 568:0.099777849459107 575:0.074030967872902 647:0.0640710528109827 692:0.0991066763681559 712:0.065135432345371 724:0.0829971771831071 758:0.0743057313658219 784:0.139303568051254 942:0.0917731687974941 951:0.0924642031931859 968:0.0984578799290821 975:0.0878882814122861 1045:0.0368470788364744 1068:0.083582547348761 1070:0.21966746326553 1080:0.0717184643655901 1435:0.106670773465876 1476:0.0913257447057507 1598:0.0742137118524265 1814:0.124503706912967 1958:0.103122414767948 2142:0.0922311214752808 2779:0.106670773465876 3919:0.605935574724639 4408:0.147141053618165 4903:0.143592694920237 5224:0.15148389368116 5715:0.329947974130512 6157:0.15148389368116
+-1 6:0.00396423796414289 17:0.0432031585698589 18:0.0424409100527798 27:0.1154291019972 67:0.224241806311958 69:0.0402189038452043 85:0.0971759096043198 87:0.0369309504893211 94:0.023798067171818 100:0.0244966961526566 138:0.0332421768657021 142:0.0452313241566477 164:0.0463059268068191 168:0.0294422753206436 187:0.0739295660197826 194:0.125633831265145 214:0.0339634404648902 232:0.351868799792046 254:0.0765172814600388 261:0.0545048131995887 281:0.0457600055981245 283:0.0594344514699167 286:0.022212624920068 291:0.0638153758357399 306:0.0622153761129187 318:0.143550474451879 337:0.0303072567134942 419:0.0482252693432143 506:0.0221777622408837 524:0.0448135700952743 595:0.0563528299289687 638:0.0484177902379739 679:0.199480923081735 703:0.113949100750757 729:0.0853378882992184 791:0.0527796430358331 793:0.0475770773661097 826:0.0516772170981101 856:0.0297520884141426 922:0.507175469360718 1030:0.0593485264076121 1045:0.0617802704194175 1287:0.284144722880792 1590:0.122139104214006 1783:0.0574096942645084 1817:0.225411319715875 1819:0.0550270165145358 1856:0.246838275405635 1946:0.110413616309907 2162:0.136605193685266 2512:0.0613848537949684 2546:0.199877631901824 3163:0.151684120673416 3634:0.206772951867129 6451:0.157151288428545
+-1 6:0.0195142505158334 18:0.0261148094028762 27:0.0142052043391779 34:0.0388797048261129 37:0.0230828009616744 42:0.0875636007154903 47:0.0230906221052577 50:0.0463071880279488 57:0.036422214200548 58:0.0327257785389277 79:0.0330840596723822 83:0.0632033208443901 87:0.0454488243487846 117:0.0503665284401075 131:0.518204891950688 138:0.122727780140188 142:0.0379524702566121 168:0.0724658738400689 173:0.0729292835394069 176:0.0758631872464508 186:0.0830522607881715 203:0.110953642152656 214:0.0835937564301543 216:0.0848904638113384 263:0.488987916447281 286:0.0273358165696147 288:0.0506700762967831 317:0.0290772898819029 326:0.0568880099799971 348:0.0484670133552187 368:0.178398118566818 369:0.0436250628747974 430:0.0379697534484759 507:0.0260854221531759 534:0.0371848387050013 641:0.0386026587083255 655:0.0369404422805208 706:0.0496649240105187 724:0.0570848648051332 726:0.0449590421451085 742:0.100139423384784 856:0.0366142063073864 1120:0.15725723722516 1129:0.0568880099799971 1263:0.0662644652615886 1582:0.0826457847339223 1781:0.0619302880801938 2410:0.0681648631167394 2703:0.0755428549993604 2733:0.0634359056408227 3346:0.0966985849178103 3524:0.101202564209466 3736:0.0884121961108693 3962:0.0826457847339223 4184:0.0894836387399249 4725:0.104189538541369 7335:0.340403784837422 7362:0.324121254646405
+-1 6:0.0234671583241186 10:0.197934052812184 12:0.15819718967716 19:0.142458742302727 42:0.0702006252559906 70:0.134995934984607 119:0.122766657509467 183:0.103224635184026 199:0.109694343762966 224:0.223177488441949 227:0.333612802477917 291:0.094442206913166 325:0.105363190302729 335:0.155372937628789 377:0.0903090005337917 394:0.109310347919599 448:0.106260039467351 470:0.365303050787521 591:0.123379910395571 629:0.286619511617579 645:0.149294749680695 714:0.121428112634413 761:0.119313908778561 819:0.117847225214631 950:0.127856309569939 952:0.109310347919599 966:0.23440403437274 1020:0.149994664269408 1110:0.191589824482202 1160:0.148609728027637 1530:0.159374678140473 1776:0.135896547642491 1855:0.151814063750432 2231:0.21802113168831 2576:0.20595794986831
+-1 6:0.0189197742569248 27:0.0183632816884371 37:0.0895184538208237 41:0.232316402960029 42:0.0754631906822886 47:0.0298495951170978 57:0.094167090189139 63:0.0408950576833435 81:0.0767963186648475 85:0.0772971707532435 94:0.0378596561486758 96:0.0390741881792708 142:0.00654156402074944 158:0.0905316981785975 162:0.0341565265798076 179:0.0343784612250887 199:0.0294793855110528 215:0.0401771889650499 229:0.0330267763689948 248:0.0767201849557555 262:0.0590231858460556 264:0.0519162214959498 275:0.127227859102186 314:0.0503263008589371 327:0.0530378324387956 336:0.0576591236334392 337:0.192859749440716 377:0.0485394916552176 390:0.0576087476513085 394:0.058752380043083 478:0.0494568869113503 480:0.0463859194901768 483:0.0612327510439241 508:0.0978621456738979 510:0.057015404804264 572:0.0683422590698847 623:0.0875408876311983 631:0.0423258927715781 713:0.06306281661454 729:0.203642364155221 739:0.0644249216284241 760:0.0998212271649004 882:0.0947190680028002 945:0.0998212271649004 948:0.101015089309334 963:0.107015313781345 986:0.0563947761058428 1018:0.0684360486633958 1050:0.148895057397837 1113:0.0765690561554669 1129:0.0735399876703052 1188:0.0776557715944636 1192:0.0784760264607703 1262:0.194307565167541 1441:0.0822117887107996 1888:0.114291778077386 1968:0.361964814859651 2842:0.101015089309334 3061:0.1044189913163 4218:0.122693072147281 4538:0.127671162325733 4773:0.130826079639352 4966:0.293363401165101 5125:0.117182504951829 5293:0.134687386364916 5658:0.127671162325733 7082:0.476028044400556
+-1 6:0.0220352797000775 13:0.0488169364128213 34:0.234146881819785 52:0.059883434140152 58:0.0492714581700494 76:0.183323396053212 77:0.110772577698381 98:0.0476452863397444 142:0.00190468965057047 146:0.0659562138243489 186:0.0416807603062808 190:0.062976475301679 254:0.212661262279453 271:0.0810645473585713 279:0.0831619193373948 322:0.0636564201841441 329:0.197229742936098 403:0.170139528397837 411:0.0550290037931142 448:0.0665176316696136 513:0.0549647179415433 574:0.0549968352350006 580:0.0664607808635676 585:0.0910110354401121 657:0.0762881329701733 663:0.0687424908588147 697:0.0787429393572652 723:0.0753842327174456 730:0.0706061965049305 774:0.082396500863122 838:0.290234957303789 909:0.0646693769658602 914:0.188235452354175 938:0.218006731523398 953:0.0802605935744321 987:0.0599655263000091 1086:0.185216390737975 1113:0.0891776268492799 1126:0.0783295177346457 1129:0.0856497638634519 1156:0.102972544940235 1427:0.111494631660717 1493:0.0980626835736573 1709:0.0936747721402413 2260:0.428690552854392 2274:0.124430296458939 2308:0.109477589932637 2450:0.120755861209757 2562:0.142896850951464 2730:0.235298340945562 2759:0.291175977751817 3506:0.148694679612884
+-1 6:0.0151916711918649 9:0.154951088189838 27:0.0147448343529905 42:0.0605933223286073 55:0.254298123304562 58:0.0339689716604996 59:0.0943322006009931 62:0.231903999603623 74:0.0415129144912888 75:0.0205256677713434 83:0.0262417202641487 84:0.0297197352796596 100:0.0312919117204276 114:0.0355576231155038 127:0.100724713499309 132:0.0614252283439165 137:0.0414556179462299 142:0.0131314053135949 166:0.0377838608020516 173:0.0378498675413304 196:0.0470893092981609 223:0.481472126911843 299:0.0419207456453591 349:0.0502004785012819 403:0.0586492163326118 408:0.0596367298435201 409:0.0258614664358656 411:0.037938367155736 428:0.074830212554817 457:0.0349180575675025 462:0.0622257998047598 473:0.0445846807673903 478:0.0397115078609083 483:0.0491669618992491 506:0.0283297214397258 594:0.0969733618993855 610:0.0651993535767019 715:0.0624831107229275 744:0.0624831107229275 761:0.20597041996541 862:0.0487258330239078 867:0.0445132441447978 941:0.0722444344388164 957:0.176086900744416 966:0.050581170602399 1003:0.0535171820859315 1005:0.0533816259620666 1018:0.0549508643626786 1073:0.0677959011487285 1167:0.0647335761362886 1218:0.061602628435184 1279:0.0776184099582531 1372:0.0707543229475826 1439:0.0596713235133373 1444:0.0880434503722078 1530:0.0687817324159776 1582:0.0857853485791616 1620:0.0612417148320504 1705:0.0758114007501809 1967:0.0811102712624912 2327:0.387520511657933 2511:0.0940919305110472 3094:0.0832521013101841 3629:0.11777836959646 4282:0.0880434503722078 4300:0.0917708154921426 4374:0.112144678244529 4546:0.108147510618345 6841:0.0928829602882992 7973:0.382227685723726
+-1 6:0.0157829071233947 9:0.120736155490192 17:0.043001419523311 18:0.0422427303591626 25:0.0592263194609924 37:0.0373382214633677 41:0.109011785276572 62:0.271045505540149 63:0.102344175219614 80:0.0513820361179394 82:0.0591915917702118 85:0.0967221424261793 87:0.0735169995877972 97:0.0492414712491356 142:0.0286491637738787 153:0.0684446001037288 189:0.0590532353214412 203:0.059825374886142 262:0.147711719128077 265:0.0745499161175859 277:0.142931011132934 291:0.0635173871353216 303:0.0705083238404705 337:0.0603314712941789 347:0.129654852721243 380:0.290913884961865 382:0.0693129956035892 419:0.192000317319299 442:0.0671538300000708 447:0.111008673935918 478:0.0618855258631098 480:0.0580428166746312 502:0.0544712542754916 506:0.0441484044119787 530:0.0648724892500607 534:0.0601493616373596 537:0.0882581940543821 572:0.0855168391167392 614:0.0954377189709 621:0.3296941052366 671:0.0481933823938691 747:0.0869689614904408 773:0.123509116436962 791:0.10506637234889 818:0.120958794456995 826:0.102871816126119 948:0.126400433032158 958:0.132629529680309 978:0.131622245246511 982:0.0883914419244904 987:0.0644260257923027 1005:0.0831887322350284 1030:0.118142791713591 1035:0.0963834024796206 1193:0.192381865348021 1293:0.116127131727018 1483:0.110632095564841 1546:0.118677453706984 1624:0.0999479145577904 1985:0.111008673935918 2910:0.129738213085112 3233:0.16370299953579 3267:0.15975524363765 4097:0.16370299953579 6811:0.349527517827837
+-1 6:0.0273303004675212 9:0.139380972129828 10:0.0768392585274011 13:0.0605475200780681 57:0.068013889438437 62:0.52150335443188 67:0.206129433510956 81:0.0554675345331245 112:0.507158449648604 119:0.190635189870354 142:0.00944952660569788 148:0.0800807443695149 162:0.0493403421032546 175:0.0881855865627295 176:0.0472216433759988 293:0.172451493770918 373:0.0650345990601724 785:0.128151313293128 868:0.259940078399842 942:0.117870370730839 989:0.220351592180653 1011:0.109335499999718 1169:0.102666333703181 1476:0.234591428557726 1822:0.129502802142945 1975:0.129502802142945 2102:0.127289281153543 3994:0.167099404728522
+-1 6:0.0108254932702443 9:0.0828129081997104 62:0.49576017450854 63:0.0233992840361324 105:0.114996264596003 142:0.0056144161385205 173:0.0809147620113833 229:0.113383322802456 262:0.101315442640283 317:0.0645222845075356 338:0.283688051147729 351:0.0768249487772525 380:0.266050377939745 408:0.0637451610254166 409:0.110572350069043 447:0.304563321126241 506:0.0605627659235825 582:0.182615528226804 867:0.0951596079536587 958:0.181941143005476 1011:0.259845819299131 1213:0.137740521083042 1816:0.118962571702639 5937:0.503568935113444
+-1 6:0.028297895582848 9:0.0721577905858171 13:0.0626911293202099 27:0.0137327808651741 41:0.0217169125007517 57:0.176054590380325 58:0.0316374150337157 59:0.0292858142354634 62:0.431973222902713 65:0.0337414394712657 67:0.240105586914369 81:0.0574312932388604 85:0.0578058500360879 111:0.147473752719467 112:0.210045504171026 119:0.296076585607528 137:0.0386101941369377 142:0.00611504704991164 148:0.0829159029941249 176:0.0733401999234788 183:0.124473526264705 209:0.0296270698100897 215:0.0300460746176507 237:0.040529789566727 309:0.0347088880352737 312:0.0427478645646668 325:0.0847015366832336 355:0.0283852275248776 373:0.0336685338616048 411:0.0353343598211785 434:0.0408107810730753 459:0.0430820765501127 471:0.0491642579139023 506:0.0263852307316205 509:0.043777565719979 543:0.0522032493076989 566:0.0730305209883291 571:0.0372228119829773 639:0.054261659628628 687:0.0530689083007605 726:0.0434638361367375 785:0.0663441751524708 800:0.0415913620754279 812:0.0528270188003785 827:0.040285040682926 1026:0.0652560797917435 1061:0.183519200967516 1179:0.117627392649777 1243:0.0627927671109135 1421:0.0661191136277849 1424:0.0438572011189052 1511:0.0569280818161797 1664:0.0559769076619642 1676:0.128121406613712 1721:0.0617968364818518 1792:0.0556747761605032 2102:0.0658978994976529 2449:0.0592000149080327 2527:0.0954774927907007 3703:0.084512855636098 4220:0.0755430379546248 4588:0.402897999090672 4589:0.201448999545336 4613:0.0917546820911948 5210:0.0954774927907007 7971:0.355992405406844
+-1 6:0.0243697591978558 9:0.279635843964023 17:0.0663967817054266 31:0.0464422366732666 34:0.194214795700672 62:0.279007057024096 142:0.0347568841687833 153:0.105682584956037 201:0.292475358249724 215:0.0776258009500288 232:0.108153925139364 338:0.319311523327155 357:0.112795656390022 370:0.144097230607425 380:0.149729520009756 409:0.0622286088461714 473:0.107280948931715 506:0.0681677954560542 593:0.11736179843995 867:0.214218112126792 978:0.406465348450796 1134:0.148230027028659 1277:0.143839058751248 1638:0.183245136427808 5144:0.260227669325934 5929:0.269845769727133 6025:0.252767291061384
+-1 6:0.0501439023438854 9:0.133422975560635 10:0.0183886694789467 12:0.0146969952473608 16:0.04798482447848 27:0.00634813119580817 34:0.0347497242837612 35:0.0709744079749381 37:0.0515770999743028 41:0.0803110810992532 42:0.117393290243538 51:0.0148070287902893 52:0.0177745935317361 57:0.0976598387462352 62:0.424329440471194 72:0.027135418961525 75:0.022092420432589 81:0.0132741280809987 83:0.0225958297058423 86:0.0169364250791374 96:0.0405234876543712 109:0.02399241223924 122:0.0234661840698458 123:0.066356284613687 132:0.0132227802267772 138:0.0182818454208242 141:0.0199151706280794 142:0.0305288863401358 144:0.0129615650633682 145:0.0548852837092002 146:0.0195771152482054 149:0.12136984768948 162:0.0236156168162753 166:0.0650687284003106 168:0.0323841082022945 173:0.0162956001501363 181:0.0184021576205962 183:0.0191797588289171 186:0.0494867125224612 195:0.0303614993970894 197:0.0243101145921985 199:0.0203818696430286 202:0.0541422573045407 203:0.115695577046753 215:0.0277782665382203 232:0.0193513530482603 234:0.0156397524670564 242:0.0305531923349455 271:0.0240615689434326 277:0.0197437552237567 284:0.0397195417560368 286:0.0122160403880895 299:0.018048245698255 301:0.0395213548168278 306:0.0171079633787213 307:0.041873318682232 308:0.048325943402857 312:0.0197606774084139 322:0.0188944907837193 325:0.0195771152482054 331:0.0340861174199008 333:0.0439887827945105 339:0.0169576002810259 341:0.0182160363051074 347:0.0358197098783501 367:0.0372164332511339 368:0.0797239261545917 377:0.016779956133831 384:0.0236257132115291 386:0.0173635003373499 390:0.0199151706280794 402:0.0166174473072011 403:0.0252503969117322 411:0.0326674042303508 422:0.0198804923379928 441:0.0153734725889595 451:0.0247617998868906 459:0.0199151706280794 465:0.0185387386286661 485:0.0150874266246804 499:0.0162388984148237 506:0.0121968673322942 507:0.0466290179775012 508:0.0169153245694743 510:0.0197100537921544 518:0.019012949868259 535:0.0413486757869214 550:0.0355248947169045 563:0.0334172522952134 570:0.0252929735205595 582:0.0183886694789467 591:0.0229247303369172 598:0.138245334594435 599:0.0204419984654895 610:0.112281776920157 622:0.0481231378868653 631:0.0146319337062108 643:0.0177382287493104 646:0.113394905674734 659:0.0319509326223524 671:0.053257489069576 673:0.022043829598376 684:0.0816165506149719 694:0.0320824101849076 709:0.019012949868259 723:0.0223755386526167 735:0.0283487264186835 749:0.0253790467794642 757:0.0207139538547209 789:0.0448036662979261 791:0.0580533145735672 800:0.0192260712276232 837:0.023658135991646 851:0.0247617998868906 872:0.0248802589714304 876:0.0210406965423108 901:0.123239350665992 944:0.0238564521075076 952:0.0406210418058685 956:0.202084592196765 959:0.0242380415723156 974:0.0280028504228608 991:0.0231593481836122 1033:0.02611622299107 1074:0.0284928776899774 1075:0.0304620393819981 1179:0.0271872874144256 1214:0.0316963415073952 1218:0.0265219369679698 1265:0.0560057008457215 1320:0.030668335283323 1331:0.0246456411247354 1346:0.0410797835553308 1373:0.0252929735205595 1415:0.0322168425453925 1419:0.0363632408607457 1432:0.0259232388911485 1442:0.0327869869246244 1445:0.0337591732573138 1471:0.0505007938234644 1500:0.0248802589714304 1504:0.0304620393819981 1557:0.0320824101849076 1571:0.0337591732573138 1613:0.0250011113299717 1647:0.033093822810858 1723:0.0366415230493898 1730:0.0307742139462185 1825:0.0441355364534548 1826:0.0441355364534548 1840:0.0386542960277958 1924:0.0300696372065017 1952:0.0305642980821282 1956:0.0324951247340367 2264:0.0296127749419606 2395:0.0375636506105666 2463:0.0358427398227484 2499:0.0326392760053306 2515:0.0382682273502834 2559:0.0360973309377056 2653:0.0390670105769248 2693:0.0366415230493898 2753:0.0619835295353569 2807:0.0296127749419606 3029:0.103523693137328 3194:0.21606704446139 3222:0.0390670105769248 3264:0.0372402211262112 3485:0.0452261818706839 3562:0.0452261818706839 3781:0.0399891381381016 3923:0.0424146256656366 4046:0.0424146256656366 4432:0.043213408892278 4514:0.0417100489259198 4626:0.0424146256656366 4630:0.0390670105769248 4631:0.0390670105769248 5482:0.037905571572667 5712:0.043213408892278 5940:0.608489067556115 5941:0.152122266889029 6476:0.0452261818706839 7803:0.0465610239809898
+-1 6:0.0245588483611514 9:0.0469675977817299 13:0.0408057359086155 17:0.0334559828911957 37:0.0290498991036545 38:0.0500219384042624 41:0.0565422640086661 46:0.0514102712515755 57:0.183350651320759 59:0.0762486951196682 62:0.421757881326261 67:0.138920028698044 80:0.0399762738145119 85:0.150503605605664 112:0.27343777229522 119:0.192716626611009 142:0.0191054011776058 151:0.0969758387069147 153:0.159753891530749 154:0.0443829574233038 168:0.091198911562224 179:0.0334687694202135 183:0.0540133178377678 226:0.14282001043807 229:0.0321528516285124 291:0.0494178248264756 301:0.055649278964918 317:0.0365940138148521 340:0.140585960442087 341:0.0512993185925079 396:0.0623609587834329 408:0.0361532658212315 409:0.0313557256756356 424:0.0632362855962998 432:0.0576752911113638 433:0.0496501905956155 457:0.0423363863347766 460:0.334575861509966 464:0.0860740305195733 471:0.0640021561688798 546:0.0530456016888867 566:0.380285272896836 612:0.0714715201763658 671:0.0374954360742458 681:0.0671836461374861 712:0.0563807796031477 720:0.0611277558525989 743:0.155879576588385 829:0.0455469752054222 862:0.0590776187190849 903:0.0683594430738049 933:0.0713498860654791 1010:0.0683594430738049 1027:0.0641595989145979 1126:0.0654750963374606 1198:0.0731382873888904 1227:0.0670892691333826 1236:0.0676636287811832 1373:0.0712291238911973 1404:0.083148451679357 1416:0.0741091218985655 1440:0.0760754883414492 1468:0.0860740305195733 1511:0.0741091218985655 1584:0.0824314817250674 1599:0.0743970990165821 1636:0.0896167197971839 1645:0.0701795370235152 1676:0.166788773442436 1699:0.10487451474135 2075:0.100251282707761 2076:0.0765638196684784 2099:0.0892620487778068 6344:0.119446478836529
+-1 9:0.437570930518582 13:0.190082148921123 46:0.119740210763532 62:0.32744025899714 119:0.149619449747162 142:0.0482068096582891 153:0.124028163870075 175:0.138424379529502 179:0.0779524676063561 183:0.251605988627565 226:0.221762405770622 284:0.0868421987688929 288:0.148524398679208 295:0.121417629031619 325:0.128409316311998 380:0.175721264309375 400:0.126005246221259 460:0.194816051337046 464:0.200475941961978 539:0.132855969364598 551:0.211315235801371 566:0.221431620658581 743:0.181530391690468 764:0.132256922871012 933:0.166181780166597 966:0.14283765377688 1011:0.171623270172876 1381:0.219188908368267
+-1 6:0.0393439019610281 9:0.133765849841901 17:0.0476420787426107 34:0.209034150875009 36:0.0334009397126339 41:0.0201293667185553 52:0.249483796859343 59:0.162869807863358 62:0.55054339317999 72:0.136025761790736 80:0.056927120960728 83:0.0226538971326663 96:0.054170168137509 98:0.0283568214271321 118:0.0286254714465988 132:0.0265135210315215 142:0.0113360519884795 162:0.0236763049219671 176:0.11329816331095 256:0.0297496879337906 293:0.0827520437986513 299:0.036189253220265 300:0.24946809427285 308:0.0969002656631205 319:0.0793138911160354 368:0.0532858686943587 376:0.0557519744317767 382:0.0383965835435072 402:0.0333203026227006 404:0.11013253514118 409:0.0446512648134889 439:0.14134881945122 465:0.0371727600473641 496:0.109972959864778 518:0.0381236198104924 521:0.129322836083479 539:0.0406141962574233 561:0.0387388686147042 576:0.0427937135400363 580:0.0395551509842401 608:0.190805990414564 654:0.04568236230758 663:0.0409131456119217 799:0.0441018264604989 837:0.047437866728727 925:0.129198537334334 949:0.0753203655663214 1036:0.0494179524342943 1109:0.0604857417322947 1121:0.057428380070123 1319:0.0461415464912372 1355:0.0606807821589563 1364:0.0635555913934629 1609:0.0610806432509613 1613:0.150392159520943 1621:0.0713800506226913 1652:0.0523666744559065 1705:0.0654463067508678 1979:0.0645992686671669 2034:0.0588599112438707 2165:0.0654463067508678 2173:0.0614942953441436 2248:0.057428380070123 2801:0.217140569513629 2901:0.0767331403297536 3052:0.0783348122562291 3241:0.0734713710229881 3764:0.0866489199592788 4393:0.0812274840732664 6390:0.0884979145026121 8213:0.305026390316709 8230:0.0968120222056618
+-1 9:0.467572136800222 13:0.16249181166271 34:0.340978813815615 62:0.209934341011544 75:0.0495497279881789 83:0.0316742460103005 114:0.0858374291597572 124:0.282688705923659 137:0.100075408785744 142:0.0713243305620493 144:0.0363383691451249 162:0.0993112711232226 234:0.0876935918938462 279:0.0692030877368428 286:0.0342482549710548 317:0.1457203863227 380:0.225323104357953 433:0.0988555804672672 609:0.0432838074410981 764:0.0565299454057725 797:0.180642925662346 808:0.255174616162737 829:0.136028863689534 1277:0.0721529133414383 1359:0.407114323844643 1392:0.0973131016825115 1444:0.212540174852402 2001:0.0800869279581093 2327:0.116936122105723 2423:0.0788885046087047 2512:0.0946454609347705
+-1 6:0.0202038662465167 9:0.463666886760049 10:0.0568032577473501 34:0.107343141242479 53:0.0518657168635085 57:0.100558244996433 62:0.462624289077512 75:0.0409465661514644 83:0.0348996630850779 138:0.112946548821842 142:0.0506451821118632 145:0.113028403011596 173:0.453039225530781 211:0.401870593476612 293:0.127484398435362 363:0.0629128931878235 368:0.246270059461059 370:0.0796430020789059 386:0.0536364736006543 402:0.0513318891056614 409:0.034393951936559 538:0.0590109607008581 609:0.190765746561729 622:0.0743270471017092 829:0.0499602685734743 867:0.0591995192327249
+-1 9:0.0801416424367649 13:0.116045914311498 27:0.0101681569869237 37:0.049568356414745 41:0.128638752920859 42:0.0417856449958413 46:0.0292407515735138 47:0.0330567677712939 57:0.182498433723183 62:0.319845746301907 67:0.0790139003131679 81:0.0425238275734606 83:0.00904825123378488 111:0.174710282944085 112:0.272166827906893 119:0.255761167690255 142:0.00905552327622288 148:0.0306966930672752 149:0.0388809754152705 153:0.121151506406016 162:0.0189132275093404 166:0.0521121118094367 171:0.0301941674399074 175:0.0676069111241737 176:0.018101084152724 179:0.0190361176524173 183:0.0614425860866086 203:0.0529474514992883 214:0.0598368329108922 226:0.162464205820283 229:0.0182876597217053 252:0.050404357797413 286:0.0195671155168809 288:0.0362698964423984 294:0.0333716254298424 295:0.0593007596114893 325:0.0313577610567179 341:0.0583552894912258 348:0.034692932865738 355:0.0420345234393782 363:0.0326221867540662 372:0.0344718072351948 377:0.0806321843104717 381:0.0335685163041898 396:0.0709384043024911 400:0.0307706832835927 402:0.0532341905766306 418:0.0360526153540011 424:0.0359670640231549 430:0.0271789412246662 433:0.0282396659935832 446:0.0430888583521593 458:0.0367660003681694 460:0.0951487845787963 466:0.032268361245401 471:0.0364026701891035 485:0.0241663755389528 499:0.0260107523432512 504:0.0370956240162921 506:0.058609214881385 507:0.0186720768804526 508:0.0812826659068211 571:0.0275608705515348 594:0.0334368072145459 597:0.0312270402652319 626:0.0329584207407748 639:0.0401769371325299 649:0.0467526015855455 676:0.0349192824166058 687:0.03929378878354 700:0.0431788278901808 713:0.0349192824166058 714:0.0361389374279371 720:0.0347677901636723 723:0.0358401524273822 742:0.0358401524273822 758:0.0365826132315035 771:0.037047834962613 785:0.049123188867671 792:0.0766409663314872 794:0.0407909205780839 800:0.0307954742040205 811:0.0396623605849467 836:0.0395999389609192 837:0.0378945603613066 842:0.0505722364423292 858:0.0350344944508047 917:0.0424816706475266 987:0.0285095904741252 1032:0.0461178208153348 1041:0.0498203461103252 1102:0.0418318158663855 1138:0.0344354440591028 1149:0.0335024354533084 1159:0.0355097167376132 1204:0.0537962075595272 1213:0.0444324917844527 1227:0.0381585353319398 1294:0.0396623605849467 1391:0.0441282857453373 1433:0.0336685000155967 1492:0.0503786604565809 1518:0.0447466735510701 1562:0.0562827621924889 1569:0.114822644371252 1635:0.0546548430721225 1873:0.0924829143621271 1911:0.0472925576949546 1948:0.0525167517643517 1992:0.0456386366986579 1993:0.0511775968015954 2075:0.0570201786767253 2091:0.0462414571810636 2186:0.0549590491112379 2212:0.0591582699844961 2228:0.0552732308778553 2409:0.0500028599219756 2616:0.0463667097541674 2703:0.0540739570183727 2814:0.0607154752385171 2867:0.565554869007319 2931:0.0530082279743118 2963:0.14138871725183 3613:0.0574113221856261 4165:0.0632858963622644 4496:0.0648865560463212 5094:0.0668093195192741 6321:0.0745793977325557 6522:0.0724413064247849 7346:0.0773358768460593 7721:0.0745793977325557
+-1 6:0.0261785165570865 9:0.0924279398493337 10:0.0339696983345413 13:0.0803019588439847 17:0.0438922110889909 25:0.0151133040759077 30:0.0242084501318974 34:0.0160484374967876 35:0.0218520362148518 37:0.0762233952425317 40:0.0125821847859105 41:0.157632511207382 42:0.108431299519465 46:0.0168617858669328 48:0.0123192857818234 51:0.0410299098974674 57:0.135306496701994 58:0.0945579010013649 59:0.0750252316380156 62:0.484155562365148 63:0.00435267815212549 69:0.0204301800583293 72:0.0125319289326472 74:0.0165082336987551 75:0.0326493597999192 77:0.0151847146178849 78:0.015470490946239 79:0.0409684795319447 80:0.0131116088751917 83:0.062612484247835 86:0.0156434714176181 91:0.016090615669353 96:0.0249532400492332 98:0.026124880037598 105:0.0213913266623947 111:0.0125934151023276 118:0.0527447696832862 119:0.0842774906467196 120:0.0335544877950626 127:0.220300820006174 132:0.0244266642544106 135:0.055040513432955 137:0.0164854488673946 142:0.0167100815052925 144:0.0359161756360552 145:0.0337968358312863 148:0.0354027196614327 149:0.0672625681424288 151:0.079516494794418 159:0.0121145238830498 162:0.01090638151052 166:0.0150253195133381 168:0.0448677807164586 179:0.0109772465589956 183:0.0354310909929351 184:0.0237291976664009 186:0.102844840683874 190:0.0172656414604722 194:0.0159546975972017 199:0.018825885256688 203:0.122129362801946 204:0.0362664382325102 208:0.0150867612845513 209:0.0126499116454249 212:0.0227996863204233 214:0.0517576913658817 215:0.0256576294342606 223:0.027352088545035 224:0.0191510047152607 228:0.0152298194706095 229:0.0210912911358982 239:0.0170726539581202 250:0.0281365187852803 254:0.0194344162613081 258:0.0190960260151313 262:0.0188464532920031 266:0.0409536149110083 275:0.0406246099670871 278:0.0173847546336865 279:0.0227996863204233 281:0.0232449187933627 284:0.012229096228555 286:0.0564172420550979 297:0.0983605040583893 299:0.0166704138801162 301:0.0182521158265023 302:0.0255630633477834 307:0.01933832142573 308:0.0148788879750713 309:0.014819702716859 314:0.0160694863366247 321:0.0267375320112212 325:0.0361651341878476 327:0.016935294451471 330:0.0200273472732886 332:0.0258650682275015 341:0.0168253950848377 342:0.0376234055527085 348:0.0400116121233919 351:0.0142907909303783 355:0.0242393609983462 364:0.11194784821746 370:0.0238142041703928 388:0.0209405716364967 390:0.0367896295755012 391:0.0416792997154232 399:0.056963049174184 402:0.0153488449167582 411:0.0150867612845513 415:0.0175201857709909 418:0.0207898719194586 426:0.0181282940896015 430:0.0313456708435214 439:0.0217038956047332 441:0.0141998372095165 442:0.0171362370967746 451:0.0228714446507669 452:0.0852745843384058 453:0.0195322119784681 458:0.0212012479854719 459:0.0183948147877506 466:0.0186076680084253 475:0.0163174932679809 480:0.0148112991961896 483:0.0195519805640462 489:0.0229441471967364 496:0.0168861802278607 502:0.055599648045244 507:0.0107673211222889 508:0.0624959270178592 520:0.0298843817824149 534:0.0306976898335165 550:0.0328128676814062 557:0.0379040714975378 567:0.0218520362148518 572:0.0218220886414018 576:0.0394254566037887 582:0.0339696983345413 597:0.01800718647353 598:0.106409554665064 603:0.0431192466821744 605:0.0292765923208188 609:0.0142603063632557 615:0.0534750640224425 621:0.0280436541829278 634:0.0226242648002857 639:0.0231681770906181 640:0.0187944091353976 641:0.0478022421925104 644:0.0191879634736314 654:0.0631301134113209 656:0.0198782931616757 664:0.0227641536334955 665:0.024899228326568 681:0.0220352125626134 694:0.0296331879006819 695:0.0198782931616757 697:0.0215881779977927 706:0.0615008086350129 709:0.0351229419950132 712:0.0369840737866122 715:0.0248473470648688 730:0.0193574071572289 740:0.0288343312455176 751:0.101557916023901 755:0.0420349827999615 758:0.0210954971253603 763:0.0233227414006494 772:0.0186579747029099 776:0.0251117665979009 777:0.0277740732167553 791:0.0268107160450369 804:0.0379396613110704 808:0.0420349827999615 810:0.0296331879006819 816:0.0305673876761093 822:0.0269600579409033 827:0.017200560451571 834:0.0405852265467772 837:0.0218520362148518 846:0.0291626642892058 862:0.0193765590439086 863:0.0425638218660257 884:0.0207898719194586 886:0.0173447642508533 909:0.0177297676761991 930:0.0176309727161076 944:0.0220352125626134 957:0.245082599123678 971:0.0251117665979009 991:0.0213913266623947 1021:0.0215596233410872 1076:0.0276013931076266 1095:0.0284248614461353 1116:0.0234817542099095 1134:0.0489944201281744 1138:0.0198573242037759 1158:0.069391963406922 1159:0.0204768074555041 1170:0.0268107160450369 1177:0.0271919233082443 1183:0.0574581679829122 1206:0.0310217789731324 1228:0.0247959484265508 1245:0.0196923772152588 1290:0.0608477299265433 1318:0.0266653046588685 1322:0.0226242648002857 1331:0.159349075434468 1351:0.0534750640224425 1373:0.0233620676433562 1375:0.0252767135864181 1384:0.032880893657059 1395:0.0215029529594296 1402:0.0364940425752938 1407:0.0245458915576369 1413:0.0662128959714139 1439:0.0237291976664009 1444:0.0700235997496223 1487:0.0302839761300619 1488:0.0280436541829278 1525:0.0282309708933972 1529:0.0298843817824149 1561:0.0268107160450369 1562:0.032455659756327 1576:0.0223218925581942 1586:0.0637470196956319 1595:0.0252211823272828 1600:0.0300143951638893 1653:0.0310217789731324 1659:0.0283270657289753 1664:0.0239005389546423 1699:0.0343972433409974 1823:0.0364940425752938 1972:0.0292765923208188 1986:0.031181944209923 1992:0.0526353720653722 2061:0.0374170688104623 2107:0.0516066644715876 2115:0.0360845727759115 2118:0.0300143951638893 2144:0.0281365187852803 2151:0.0614294762181379 2154:0.0275170355335521 2193:0.0335872131455742 2224:0.0297573574806861 2249:0.0374170688104623 2281:0.0360845727759115 2297:0.030714738109069 2334:0.0335872131455742 2368:0.032455659756327 2387:0.0547041770900699 2414:0.0320608265582853 2459:0.0290510379921709 2475:0.032455659756327 2518:0.0364940425752938 2522:0.035346769932841 2535:0.0338442508287774 2721:0.035703365512704 2989:0.0310217789731324 3042:0.0318735098478159 3086:0.0360845727759115 3154:0.199572142203998 3169:0.0338442508287774 3239:0.0391766255977291 3329:0.0738726073011901 3361:0.110808910951785 3376:0.0293929190126715 3403:0.0391766255977291 3469:0.0333416032095161 3489:0.0399144284407996 3786:0.0374170688104623 3992:0.03411383179495 4029:0.0364940425752938 4200:0.0407661593154831 4493:0.0417735431247262 5547:0.0407661593154831 5693:0.0417735431247262 6661:0.0798288568815991 7133:0.0445960149803712 7252:0.0445960149803712 7698:0.0445960149803712 7974:0.354663348146753
+-1 6:0.0348527316167363 9:0.186631610614317 10:0.0440948728763588 13:0.0231638119366558 17:0.00949582305761099 25:0.0130786996380491 27:0.010148279566106 29:0.00632891632830576 35:0.0189102407189312 37:0.0412262139520566 41:0.0962904607016012 42:0.0312779696320477 48:0.0213216431941711 51:0.0591772062801966 57:0.078060717036855 59:0.0216416931938543 62:0.478830734371402 70:0.0601475946902352 74:0.0142858390869616 75:0.0423809877760392 76:0.0144979351491708 77:0.0131404966497958 83:0.0857903492852778 84:0.020454904750251 85:0.0320381173603171 91:0.0139244422181796 98:0.0113039298811067 109:0.0383548637164034 112:0.0388049681790403 118:0.0342330669406095 119:0.164096477976088 123:0.0353595993559207 124:0.0402983261348853 127:0.0866559880680863 138:0.0146129051678523 142:0.0343437194549762 145:0.0438704861293512 148:0.0306366850356729 149:0.135817388626641 151:0.0275246854417367 162:0.00943812730807486 166:0.0390076795703323 168:0.0258850182359907 173:0.0390758242670524 176:0.00903284944693946 180:0.0134289143531597 181:0.0294181443944753 183:0.0766530923048927 186:0.0296665060547903 190:0.014941282037707 194:0.0138068218995436 199:0.0244372207549009 200:0.235688538516901 203:0.0924769057394165 212:0.0197303149416482 214:0.0298599298531201 215:0.0111017560127701 218:0.00988489835900923 225:0.132838516145536 226:0.0135122174571549 229:0.00912595486597768 239:0.0590971006792753 243:0.180746461872758 246:0.0180125584178789 250:0.0486973697088017 275:0.0234370577959591 277:0.0157814277552861 283:0.0391901231322175 286:0.019528864357913 288:0.0361989935250334 293:0.0329875935856197 295:0.0443886257701688 296:0.0157143652642749 299:0.0144261860202737 302:0.0221216767475117 306:0.0136746067321837 307:0.0334698615419716 310:0.0178850448017605 314:0.0139061573881439 317:0.0103864914470964 323:0.0149074107468758 325:0.0156482303617051 330:0.0519935928408518 336:0.0159323620934612 337:0.0133227456806232 342:0.0162792073167108 347:0.0286311371496496 353:0.0195487180319101 355:0.0524404392850431 357:0.0161316191423054 362:0.102575469116303 364:0.0322923492795565 373:0.0124402223250703 376:0.0222245081780238 380:0.149896349551265 381:0.0167514471163457 386:0.0138788605838801 396:0.0353998644867963 398:0.067772098241985 400:0.0460657959161505 402:0.0132825311691627 404:0.014634109092745 406:0.0163395422147767 413:0.0301351417803691 424:0.0358967531036753 430:0.0542516198782891 432:0.0163699975867049 433:0.056368922258948 437:0.0313491493109923 442:0.0296585970598424 456:0.0755372991590222 457:0.0240327020037719 459:0.01591844220815 465:0.0148182430863199 471:0.0181657538581898 483:0.0169198263888419 496:0.0146129051678523 499:0.025959904714642 506:0.00974910691831325 507:0.037271150810583 508:0.0135206281492575 509:0.0323508384799596 510:0.0157544897841629 518:0.0151972859955116 527:0.016620886725686 545:0.0554893779146329 567:0.0567307221567937 581:0.026088977017056 621:0.0242683220009126 622:0.0384654193344852 631:0.0233909711792673 639:0.0200491982300784 654:0.0182104408865131 663:0.0163092795996581 671:0.0106423424350417 673:0.0352398113037805 676:0.0174255098867597 681:0.0190687572432555 694:0.0256438672790757 702:0.0207588651046439 706:0.0177404534793663 727:0.0186571934615573 730:0.0335028942326914 739:0.0178018865800387 755:0.0181880451676891 772:0.0161461746397782 780:0.0353595993559207 787:0.0200163357142772 789:0.0358121246358388 791:0.0464027323837196 804:0.0492481424476667 813:0.0243486848544008 827:0.0297699249114979 836:0.0197612631223609 844:0.0190956952143787 862:0.0167680207108508 868:0.0497229538310567 870:0.0286495452690581 876:0.0168180889927076 896:0.0220710786327298 913:0.0181880451676891 917:0.0211993122608531 918:0.0201491630674426 930:0.0152574311561822 942:0.0225469771263352 950:0.0189888421145887 962:0.0236000534561869 966:0.0174064980238296 986:0.0155829977370117 989:0.0421502221282899 1009:0.0621257796899741 1012:0.046531096115802 1018:0.0189102407189312 1035:0.0638518271570661 1041:0.0248614769155284 1055:0.0190153323608905 1075:0.0730460545632025 1076:0.0238855996169512 1103:0.0228333787262694 1115:0.0245135797199457 1152:0.43255599686737 1167:0.0222767652798903 1171:0.057706086192418 1184:0.0229529218834203 1207:0.0198553280030713 1218:0.0211993122608531 1225:0.0310885622213577 1243:0.0696040985755793 1262:0.026845521494821 1269:0.0178018865800387 1277:0.0205713321578586 1288:0.0228927767227496 1301:0.0228927767227496 1319:0.018393486289818 1322:0.019578509263657 1366:0.0377686495795111 1377:0.016620886725686 1379:0.018393486289818 1381:0.0267108230881285 1393:0.0199512805988084 1405:0.0493687298370287 1420:0.0936802342888994 1421:0.0244304214982239 1435:0.0262070441818422 1438:0.0241115382097936 1446:0.0181880451676891 1463:0.0256438672790757 1499:0.0265798155169936 1510:0.0267108230881285 1511:0.0210344173953083 1551:0.0186571934615573 1698:0.0252366871577601 1777:0.271220279272642 1891:0.0248614769155284 1916:0.0212839423856887 1994:0.024952555426004 2001:0.0228333787262694 2107:0.0223295998199831 2135:0.0243486848544008 2144:0.0243486848544008 2254:0.0280863683662916 2307:0.0244304214982239 2366:0.0264523019008752 2383:0.0554893779146329 2387:0.0236698572831667 2503:0.0345410122220591 2677:0.0312267447629665 2705:0.0255387756371164 2754:0.0244304214982239 2783:0.0585760451640739 2896:0.0292880225820369 2931:0.0264523019008752 3262:0.0315810903441892 3275:0.0282668228850966 3296:0.0280863683662916 3426:0.0286495452690581 3601:0.0345410122220591 3791:0.111650407104518 3825:0.0286495452690581 3907:0.0319638127281507 4125:0.0328355791000274 4153:0.0705561603744865 4210:0.0372168023681728 4452:0.0352780801872433 4697:0.0611765348999753 4739:0.0771846952926717 4817:0.0279124773038739 4834:0.0345410122220591 5162:0.0290655881866598 6070:0.03614984655912 7108:0.03614984655912
+-1 6:0.0476934714951872 9:0.182422868781078 10:0.0446968007864021 14:0.0268817131993468 27:0.0540057585528107 30:0.0159265511020556 34:0.168930275838819 35:0.0575051388360035 37:0.0501467790332768 38:0.0215873305017707 41:0.0854042851584706 42:0.0317049372512493 51:0.125968540514872 57:0.0791263040585985 58:0.0355479473181863 59:0.0329056776763527 62:0.455031685414493 70:0.0609686542285525 75:0.0429595198758852 77:0.0599394340441205 78:0.040711662793235 79:0.0359371254959335 81:0.0161325173397909 82:0.0198741902854217 83:0.0343268887711605 85:0.0162377307815443 91:0.021171781863377 94:0.015906271808745 98:0.0515620663058033 114:0.0558156658039053 120:0.0441504732157323 123:0.0537634263986936 124:0.03063632126223 127:0.105406688341892 135:0.0241404838695368 137:0.0216912972450836 140:0.0187235983128166 141:0.0242036112294476 142:0.0412253725811984 144:0.0157526484496512 145:0.0889387019858055 160:0.0240158501554301 161:0.0517153249752737 162:0.014350447180172 166:0.0395401634966437 168:0.0196787760340744 172:0.0207787065718984 173:0.0198046192096554 174:0.0388449693211089 175:0.102593743624445 176:0.0686711593537462 181:0.0223647930087998 186:0.015035737996996 203:0.0200869895339126 214:0.249707206414589 215:0.0337599097931453 228:0.0200391596118039 243:0.0499673961589786 264:0.0218119659395394 268:0.0254953750540345 275:0.0356354866787818 286:0.0148465859438665 293:0.02507842413539 296:0.119466585549218 298:0.026266970677632 301:0.0240158501554301 322:0.0459262858298317 326:0.278072343101007 330:0.0527033441709461 337:0.0405138332942545 349:0.078800912032896 354:0.118477423156913 362:0.0389908877970813 363:0.074256437884767 367:0.0226152238054915 370:0.0313343594991076 409:0.013531790947652 414:0.0195774094075109 415:0.0230527879710508 423:0.0200750025205821 430:0.0206220731107344 442:0.0225475942765222 453:0.0257001807646801 473:0.0233285525825958 485:0.0366725663863214 490:0.0274204871934752 494:0.089772898704212 502:0.0365785761180193 506:0.0148232842510407 508:0.0411155844301156 509:0.0491886773389615 539:0.024616673931097 554:0.0336354812072098 571:0.0209118627105836 582:0.0446968007864021 593:0.0255206624601827 603:0.0283678171061819 606:0.102345011027498 608:0.0289123587499091 610:0.238805025730829 621:0.0368994040510075 622:0.0292428757530338 631:0.0355654130786957 635:0.0400312483797662 655:0.0401260704779395 713:0.0264950716445163 714:0.0274204871934752 729:0.0285192834584305 789:0.0272257401400303 901:0.0998514277513843 908:0.0281828167439121 957:0.322475872507409 966:0.0264661645609531 993:0.0291171644605547 996:0.0295010137077267 1003:0.028002407438502 1018:0.0287525694180017 1067:0.0281828167439121 1084:0.0432641685243945 1121:0.0348079203049338 1133:0.0617938540224459 1145:0.0348079203049338 1150:0.0289123587499091 1152:0.187911732392719 1176:0.0299062647212572 1177:0.0357787098118524 1203:0.0525187842103223 1207:0.0301895520639235 1237:0.0324927228481211 1309:0.0312782192823947 1339:0.0319823293270063 1351:0.0351808288097281 1366:0.028713164866588 1376:0.0379397646336924 1404:0.0358833176876616 1455:0.0703616576194563 1471:0.0306877004296975 1476:0.0341150036758326 1544:0.0347176070697682 1547:0.0355739041012068 1659:0.0372723125558019 1668:0.0429790291572785 1772:0.0480182936808646 1774:0.0452593578569004 1877:0.0429790291572785 1988:0.0417002825643482 2383:0.0421851369891601 2524:0.0515479947034037 2554:0.0402200933333143 2736:0.0692568040008726 2748:0.0474795196867362 2804:0.0692568040008726 2871:0.0460679817867727 3012:0.0515479947034037 3337:0.0441935327230049 3409:0.0536394784494775 3460:0.0565872592269898 3538:0.0452593578569004 3667:0.0480182936808646 3910:0.199702855502769 4158:0.0506916976719651 4399:0.109929956798557 4529:0.0586787429730636 7086:0.109929956798557 7739:0.0536394784494775 8002:0.0565872592269898
+-1 6:0.0324479989926834 9:0.148932511143748 37:0.0614107686478663 41:0.0896467113742734 58:0.0435327414990113 59:0.040296964190717 62:0.445792868042749 68:0.039839465446276 81:0.118537259121368 98:0.0420959722100383 100:0.040101970632196 112:0.289020345889897 119:0.339498487561502 132:0.0393595751696377 142:0.0134627819469778 148:0.0570456936407994 151:0.256255657464312 153:0.05628596298152 175:0.376915174367938 176:0.100915323244714 183:0.0570914094022025 226:0.25159830985996 229:0.0339851667932187 240:0.0584215631316202 275:0.0436399439858858 287:0.120474915533578 295:0.110202521100557 325:0.0582741999792132 341:0.054222745742366 355:0.0390577666005347 394:0.12091458233491 424:0.133679944672036 466:0.0599664284964357 471:0.135298976131633 485:0.044909972953187 526:0.0778853828863994 543:0.0718311074118621 582:0.0547366141018159 597:0.0580312728923361 673:0.0656167427139818 785:0.0912888686954914 796:0.0570456936407994 812:0.0726894074989853 848:0.0717266714568492 942:0.0839652167443958 989:0.156967939293844 996:0.0722550864724743 1126:0.0692063676198916 1141:0.0864021695746603 1263:0.0881468360904416 1284:0.181958372935 1304:0.0835558589622449 1377:0.0618963840955965 2160:0.100489208373534
+-1 9:0.369277157638531 10:0.0678595328818647 13:0.106943416904208 27:0.0702793453512564 42:0.192540154468786 51:0.0546422381580001 59:0.0499580255631589 62:0.27633510296396 75:0.0815274499605137 83:0.0416925882177651 114:0.338961620724817 120:0.0670300879754317 123:0.0816246562920401 127:0.160030438591954 137:0.131728559785501 141:0.0734927656202297 142:0.0688480590271069 144:0.0478319408386278 145:0.0675142142803232 162:0.0871484871542397 176:0.0417031439764163 181:0.0679093080432935 234:0.0577152304584913 279:0.0910915397787772 286:0.18032295275106 293:0.0761490807976834 309:0.0592091277296728 317:0.143858043059105 368:0.0980681499650792 386:0.128152721809012 457:0.0554774679735856 609:0.0569741726307197 621:0.112042753775001 631:0.0539960864269527 744:0.0992725545319942 764:0.0744099712747435 829:0.119369227135802 1359:0.17862724452424 1477:0.532838554419455 1548:0.0885389717362638 2410:0.112413775529439 2412:0.118393414562417 3093:0.116067552232424
+-1 6:0.0190291786547547 29:0.0691102670669819 42:0.0569246698395002 62:0.217863257939619 142:0.00246727158465162 225:0.0906603205368298 333:0.0959868421279361 336:0.173977619890848 347:0.0781613088323672 485:0.0658438058768353 515:0.0687415209346631 541:0.0981122967078597 608:0.207642924895542 742:0.195300452500292 1054:0.124347216669962 1064:0.0881562011236069 1440:0.117892666431959 1723:0.159909134321754 2074:0.162521943048497 2537:0.143087357178583 2761:0.182028945883921 3284:0.595651238088088 4070:0.17451863158956 4169:0.197373880498116 4731:0.210709647135916 4806:0.203199332841555 5492:0.210709647135916 5936:0.221294840614733 6251:0.210709647135916
+-1 6:0.0307173528370801 9:0.313308995982323 13:0.0680511924798788 62:0.351680053342446 69:0.103880264110301 81:0.0623416427961226 85:0.06274822402985 91:0.0818151088564821 100:0.063271820533995 105:0.21753471158991 124:0.355168116014923 142:0.0238963708898835 180:0.0789035619820882 186:0.0581033069819073 196:0.190427887794278 230:0.147157947499997 338:0.134160876017858 357:0.0947837016003341 582:0.0863619709827459 595:0.145552123422234 621:0.142592096340963 795:0.121305467454285 882:0.076890955270687 960:0.353989316117676 1045:0.0531901684232515 1391:0.129387686110268 2669:0.18347733302237 3484:0.344172171235988 5938:0.238146263816442 7239:0.226755016412066
+-1 6:0.0279326687377151 9:0.142452971838706 17:0.0507360862991552 27:0.0271110774037235 62:0.213198979824814 63:0.0201254709097193 80:0.060624124682509 81:0.0566900561394399 100:0.0575359085394495 105:0.0989070423812752 142:0.016901144912695 153:0.0807557326262556 175:0.180258448298079 216:0.0810080545226559 229:0.048759884302112 338:0.36599553293975 380:0.228827050155811 476:0.115613153172148 498:0.0956719093782872 508:0.072240579088054 582:0.0785328195366235 586:0.0684441837229196 698:0.104607776448987 703:0.133817331898389 1071:0.178131851731484 1184:0.12263722885628 2136:0.17300524034937 3143:0.330163186384052 5937:0.649671285177858
+-1 6:0.0183211435193951 9:0.210229751916581 10:0.0772649619281024 17:0.0499169875653963 22:0.0976901375263507 27:0.186713715749905 30:0.05506274914068 35:0.0994060488594469 42:0.109613248668836 52:0.149369511925748 62:0.419514061929038 75:0.037130908803988 123:0.278813853837375 127:0.182210887992264 141:0.251036906525282 142:0.0285056360805776 173:0.0684703657672125 203:0.0694466026329165 211:0.0911054439961322 218:0.0519622517688328 223:0.124426072864903 243:0.0863759574274592 266:0.0931500617330975 283:0.0686706452303186 309:0.134831196312344 326:0.213639441500589 348:0.0910074519046395 396:0.0930437827602428 457:0.31583362490196 475:0.074229125245462 609:0.0648708750598274 621:0.127572040907148 684:0.085733495878926 957:0.318540995886433 981:0.108724794327291 1152:0.324832931970922 1545:0.117102962926659
+-1 6:0.0105703620336246 37:0.0500134120379414 41:0.0486726569571413 62:0.484076281384075 81:0.0643584495338203 98:0.0685665804103733 142:0.0164462929429858 199:0.0494098565578655 202:0.393756001876612 203:0.080134270118903 229:0.110711146427995 253:0.231006878786033 281:0.12201584017105 436:0.0933665915810465 550:0.0861196731672701 574:0.0791462328207503 582:0.0891558563721391 593:0.101811157702101 613:0.0977620155914596 720:0.210479742425413 812:0.118397648102615 1778:0.163678400202755 1823:0.191562349847141 1910:0.129362755853208 2224:0.312401089163016 2867:0.427974580048508 3109:0.193883840283719
+-1 6:0.0260615189738002 13:0.138567990809146 35:0.0565613740369089 37:0.0493237784145921 41:0.0240007554851711 51:0.035400333064218 62:0.298375853918877 80:0.0678756530076896 85:0.0319424796752437 87:0.0485579662776888 105:0.221475530536615 124:0.120534092159638 132:0.0632254898254606 138:0.0437078515947885 144:0.0309882371929797 153:0.0904152944859414 162:0.0564597200865413 175:0.25227498030819 184:0.0614201812411809 196:0.0484694111228925 203:0.0395146503877936 214:0.0446561914848443 229:0.0272961383353393 265:0.0492402074777156 266:0.0530017593868603 275:0.0350506429829523 281:0.0601666834798387 286:0.0292058524764884 297:0.0509188727842604 306:0.081802718186698 317:0.0310664595127152 332:0.0669486259368163 338:0.068295654923631 377:0.0401171662697212 380:0.0640495245766006 381:0.150312978045582 408:0.0613845736939561 413:0.0450677770640001 415:0.0906977977563145 420:0.0530017593868603 486:0.0776886608947919 506:0.0291600139378711 549:0.0556578139116268 601:0.0703830311234442 612:0.0606756913604845 621:0.0725876343058707 631:0.0349817194191664 720:0.0518943606980649 755:0.0544012549084039 764:0.0482069888646967 771:0.0552975527515996 812:0.0583825330232618 886:0.0448948413195357 912:0.0495700780573601 986:0.0466094417686101 1009:0.046455244999359 1045:0.0541537517611418 1058:0.058471088178058 1225:0.0464936386111565 1245:0.0509713558222614 1268:0.0705888132608538 1333:0.0740944595004247 1373:0.0604699092230749 1444:0.634366903966169 1543:0.0730724811375367 1947:0.0723512386459504 2327:0.0997195078779569 2344:0.25890221921405 2959:0.0906238434237384 3267:0.211036624909501 5109:0.0968495934907394 5175:0.103313709272324 5516:0.089033137567584
+-1 6:0.00212974282382333 10:0.0179633436117302 22:0.0227119960208607 34:0.118810897902573 52:0.0173634711056702 58:0.0142864809367414 62:0.0487664463705835 83:0.0110365965754863 114:0.0149546271189067 142:0.0519136932217589 149:0.213412661811236 187:0.0198589191823463 199:0.00995522074792833 202:0.0264449794203348 297:0.0208054073936501 301:0.01930361730055 331:0.0166488565228845 339:0.0165653747285629 386:0.0169618864061542 410:0.0270982466113226 447:0.0299589834558076 475:0.0172575414458 491:0.915017043969824 511:0.0276238704853559 539:0.0197865513693206 605:0.0309632121227674 621:0.029659244615913 647:0.0192377729282199 665:0.0263336688887971 770:0.0286755559568074 777:0.0293741331333883 797:0.0314716740866149 844:0.0233375795595954 855:0.0343254251248667 864:0.0317435196696442 956:0.0282014885961861 960:0.0245433325492058 1290:0.0321765789586902 1413:0.035013705160073 1580:0.0373830916963289 1586:0.0337097376532187 1597:0.179144115672711 1693:0.0373830916963289 1931:0.0555260220326638 1961:0.0366948116611227 2061:0.0395726601612261 2203:0.0381633992432058 2281:0.0381633992432058 2291:0.0360791241894746 2592:0.0288425280651603 2603:0.0385964585322517 3530:0.0395726601612261 3602:0.0407453046984283 3616:0.0385964585322517 3754:0.0422138922805114 4494:0.0441801102640859 4726:0.0431146912346843 4873:0.0431146912346843 4934:0.0441801102640859 4958:0.0471651842719899 6250:0.0471651842719899 7021:0.0414335847336346 7251:0.0471651842719899 7945:0.0495345708082458 7980:0.0495345708082458 7981:0.0495345708082458
+-1 6:0.0115745125183245 13:0.11538973509218 17:0.0315354113590725 27:0.00842555112817512 34:0.0922430774071439 37:0.0410733943082439 58:0.0194106831345327 59:0.0179678921256863 63:0.0125091438900286 75:0.0117288576532781 77:0.0218196445321128 80:0.0188406994862989 98:0.0187700463989319 132:0.0350998451106054 137:0.0236887319446361 142:0.00375179958641056 151:0.0914088513094741 159:0.034815880502963 179:0.0157737319328037 181:0.0244242463047161 186:0.0164202981027954 199:0.027051817214889 212:0.0982858875140201 215:0.0368686780015508 216:0.0755267850492243 239:0.0245325150956206 242:0.0202758478209333 291:0.0232904745235209 299:0.0479090340807473 301:0.0524546808175316 341:0.0483544339293819 369:0.0258753896772689 377:0.0222711809150205 389:0.0246607234595538 415:0.0251755950164081 438:0.0322655766099505 448:0.0262048804551776 455:0.021127734269416 458:0.0304650898170522 459:0.0264323913885105 461:0.0316634535060325 464:0.0405664357343156 480:0.0212830660076403 485:0.0400495454482023 502:0.0199734500612364 516:0.0405664357343156 530:0.0237873616390577 550:0.0235751914640614 551:0.0855195476217675 571:0.0228375234831252 590:0.534956695094409 607:0.0283849765442149 634:0.0325098909110343 663:0.0812441172331734 702:0.0344698582972089 717:0.0293238156131393 804:0.0272586592605854 818:0.0443530165164779 858:0.0290303271895421 871:0.066473793458598 908:0.0307780205004868 943:0.0388497132723898 949:0.0498563197605659 978:0.579156924659661 1056:0.0284145467396575 1061:0.0375318596171321 1129:0.0337420585598096 1144:0.0395405477829952 1188:0.0356304872445013 1213:0.0368177076498295 1215:0.0339178499837456 1225:0.0258111011616535 1363:0.0655239250093468 1364:0.0420689393002784 1407:0.0352711685394867 1435:0.130549492197631 1486:0.0395405477829952 1493:0.115896530092584 1606:0.0458005746154098 1613:0.0331827013768983 1691:0.0405664357343156 1956:0.0431291235826764 1997:0.259258264273265 2141:0.0479101483610054 2307:0.0405664357343156 2372:0.168884315449029 2705:0.0424068451169174 3278:0.0585788490325425 3495:0.0503101340342649 3764:0.057354956098741 4094:0.0617980750604311 4741:0.0513038778594978 4927:0.0640821522766305 5630:0.269205513218076 6860:0.134602756609038
+-1 6:0.0135147920874973 17:0.0245478748953399 29:0.0163610300347583 40:0.0281476727074295 58:0.0302194263961939 83:0.023345120422179 96:0.0279115132167767 98:0.0292220542509681 100:0.0278378642863441 114:0.0632654403142898 132:0.0273225104569015 142:0.0046727765599594 144:0.0535655120796032 176:0.0233510309560987 192:0.0363812023766374 193:0.04369561561659 194:0.0356923391090973 232:0.0399861101030455 233:0.159824649577568 246:0.0465646872213661 248:0.0548028393209752 253:0.196903374904518 285:0.048041466271651 291:0.0362596605033352 300:0.0642699870599013 331:0.0352164326891866 341:0.0376401811036455 372:0.133409507033406 388:0.093692529041638 409:0.0230068395730995 419:0.10960567864195 496:0.037776163871376 502:0.0621911346262486 504:0.0478546509939229 523:0.0528048376245682 541:0.0464538281022884 589:0.286893784520737 649:0.0603124894448896 663:0.0843230024014895 681:0.0492950915762754 723:0.0462350487817137 834:0.045396713410011 867:0.0791996130194152 880:0.211962865797926 887:0.0569270303250798 1000:0.0546948848450603 1159:0.0458087751974524 1213:0.0573194667436104 1216:0.0482311483916474 1269:0.0920401490247991 1297:0.0665703431682446 1319:0.0475494327971605 1330:0.0594936000739291 1440:0.0558193605156116 1492:0.064990232072446 1735:0.222187834210809 1836:0.048041466271651 1904:0.125888712551951 2067:0.168533001063835 2074:0.153900513158 2078:0.125064588977068 2113:0.613495666856562 2165:0.067443226361382 2394:0.0693989872343746 2404:0.0705066570438429 2521:0.0848840256366675 2852:0.077618565763363 2913:0.066292562738403 3030:0.077618565763363 3139:0.0740626114036029 3262:0.0816410173319537 3827:0.0962100286616275 4108:0.167411848493535 4195:0.0861863563026245 4617:0.178585561597192 4644:0.0962100286616275 5813:0.0997659830213875
+-1 4:0.0315997302433174 6:0.0316568849999196 11:0.0984845873163762 13:0.0323689066547987 17:0.0265387589057305 18:0.0391057893768088 27:0.0425433492829735 29:0.00884397189966722 37:0.0460873184359839 40:0.121722031405935 41:0.022425906860818 46:0.0203904455364666 58:0.0653405701974067 59:0.0151209556691125 63:0.0789534224005899 67:0.0275493710705235 72:0.0757724052436016 74:0.0399258112745751 75:0.0542875839086639 78:0.0561239845324403 79:0.0495419380367164 80:0.0317109407953455 83:0.0630961463213123 86:0.0189171748745636 91:0.0194578928378859 92:0.0160755541555549 96:0.0754379883301799 98:0.0473880359788602 108:0.0225421824195414 113:0.0782141931452138 132:0.0295384232161237 135:0.0221862737496219 137:0.0199353526327257 138:0.0204199448962511 142:0.0214699311880873 144:0.0579097871731637 151:0.0192313764289458 154:0.017603258143857 157:0.0246775811449598 158:0.0349567297949982 159:0.0146497257993281 162:0.0527550236837723 171:0.0421105815392282 177:0.0762474420716419 185:0.0567217526283226 199:0.0682967138294161 203:0.0369218323057354 208:0.0364879244371847 227:0.0173092015800881 237:0.083705939864197 242:0.0170632255530805 249:0.0555801130035112 252:0.070296914898704 264:0.020046253006665 275:0.0163753690052201 278:0.0420457115658417 285:0.0519377296933823 287:0.0226033882900161 290:0.0253227972900437 292:0.0720385772074874 297:0.0237888740465522 299:0.0403180504100066 304:0.0553167029872753 308:0.0179925873387969 323:0.0208314843968652 327:0.0204793372352058 330:0.0484369256066442 331:0.0190362795281238 336:0.0222637423755631 339:0.0189408265599256 349:0.0241406181076028 355:0.0293119230771869 369:0.021775543702851 375:0.0172629619897465 377:0.0187424065638387 381:0.0234083245678463 387:0.0171896378614292 390:0.0222442908505069 394:0.0453717563085463 398:0.0378816531198511 402:0.0185608919952298 404:0.0204495750740235 406:0.0228327322885616 408:0.0143391812520466 411:0.0364879244371847 414:0.0359851746775938 423:0.0184498995071108 426:0.0219219954647846 430:0.0189526838729537 436:0.0215093095138849 449:0.0278347496057721 455:0.0355602683989763 485:0.0337038644852863 502:0.0168087414384815 505:0.0175165455393228 507:0.039061783250652 509:0.0226033882900161 513:0.0182226493005599 519:0.0291160251305832 521:0.0240128590691625 530:0.0200183548695254 538:0.0213375367083962 548:0.0275709682138005 550:0.0198398021607276 556:0.0602197611925058 571:0.0192190145491238 576:0.0476760072731319 589:0.0387701838316451 597:0.0435510874057021 598:0.0257355685344418 602:0.0309126361259526 641:0.0192685998908899 654:0.0508942192079782 656:0.0240382161930987 658:0.022521904424803 671:0.0148715155264726 680:0.0335863432095109 685:0.0257355685344418 692:0.0340246376276268 722:0.0312778414547496 739:0.0248761994167604 749:0.0283471785712471 751:0.0307027258533662 770:0.0327875910317212 826:0.0317441884085447 848:0.0269145788317686 850:0.0223224390412247 856:0.0182760596100436 884:0.050281121398317 888:0.0364565065583153 908:0.0259013734229619 963:0.0413214982491713 965:0.0486473738658423 973:0.0998265460372567 974:0.0312778414547496 1019:0.0349982248110316 1045:0.0126500913055588 1056:0.0478247641518358 1092:0.0381124472182067 1095:0.0343733216500905 1121:0.0319901644355524 1129:0.0283957721973462 1138:0.0240128590691625 1146:0.0278797436757191 1167:0.0311293554742843 1179:0.0607337933454734 1209:0.0385436674227049 1225:0.0217214414304279 1253:0.0298019185245767 1254:0.0334811190799119 1274:0.06782467856882 1324:0.02906192285816 1329:0.0327875910317212 1331:0.0275279996146684 1335:0.0261755285624724 1355:0.0676037943947802 1393:0.0278797436757191 1395:0.0260028679436793 1404:0.032978506709542 1414:0.0406159967734843 1426:0.0289021958701627 1428:0.040926824637243 1433:0.0234780461827935 1438:0.0336932509964548 1450:0.0347412087345478 1467:0.0299234054011754 1471:0.0282034828365153 1514:0.0356876599989792 1583:0.0361382752653915 1627:0.0325110718140139 1645:0.0278347496057721 1650:0.0806379762745481 1671:0.0381124472182067 1709:0.0310563318606843 1743:0.0361382752653915 1841:0.186352500216868 1846:0.0319901644355524 1862:0.0342550602595007 1916:0.0297419935117956 1961:0.713265547570675 1994:0.0348684810424006 2024:0.0237158504329522 2070:0.0446659502053593 2100:0.14212531048439 2180:0.0392476436264848 2202:0.0341388556933502 2257:0.0351305379294877 2298:0.0340246376276268 2441:0.0392476436264848 2535:0.081853649274486 2597:0.045884148850437 2605:0.106209881786309 2621:0.0412528207121421 2731:0.0355439642642474 2789:0.0385436674227049 2844:0.045884148850437 2865:0.0492972783436542 2953:0.0427437753565016 3029:0.0385436674227049 3070:0.0381124472182067 3101:0.0371423999523088 3149:0.0415955416872329 3206:0.0415955416872329 3395:0.0412528207121421 3452:0.0452473249117792 3480:0.041956796915922 4393:0.0452473249117792 4478:0.303092861932391 4548:0.0482673060649751 6383:0.0505154769887319 6817:0.053928606481949 7090:0.0566377597713863
+-1 6:0.00552991755616049 41:0.0254632508665341 50:0.0524898318476346 59:0.0343378477342261 72:0.103241939358066 98:0.0717416367710149 117:0.114182299602158 132:0.0670781596679278 140:0.039077029455275 142:0.0071699408047608 144:0.0328765174931276 196:0.205691654254456 199:0.0258489191153104 218:0.0313677984138827 224:0.0525906500663322 242:0.0387485059620457 243:0.0521421518152103 295:0.0469528842367545 331:0.0432290711094485 355:0.0332819027264851 360:0.476645766792118 379:0.270161772011946 387:0.0390355729101141 398:0.0430123090502575 411:0.0828596300974099 424:0.0569556749181316 433:0.0447189471759964 448:0.0500792852422091 465:0.0470228064162091 478:0.0433661369565262 514:0.0587428070580625 589:0.264127089220635 640:0.0516114015290043 644:0.0526921426593978 645:0.0703611102715706 657:0.0574352254539774 658:0.102289001005856 692:0.0772658059209986 722:0.0710281665280151 819:0.0555402090579845 844:0.0605964670857388 865:0.0820656194353751 888:0.0827882839229777 909:0.048687785391925 1003:0.116884680178587 1019:0.0794767037763528 1101:0.0711996156526594 1114:0.0676765254047458 1296:0.0562958715710459 1581:0.0788930515857987 1678:0.0936801289031228 1714:0.0851890303755743 1841:0.211591909842386 1965:0.102751161183248 2070:0.101430930069394 2095:0.0820656194353751 2100:0.107583087061124 2177:0.223896223825847 2256:0.0839412246311643 2319:0.0902943525886514 2352:0.200432870350007 2417:0.094458406474694 2568:0.104197310746652 2609:0.223896223825847 2640:0.0765132672633008 2774:0.0891266160859332 2792:0.0847615912341338 2919:0.114714492590182 3078:0.107583087061124 3841:0.122465293756453 3981:0.0990919885335754 4219:0.104197310746652 4417:0.111948111912923 4781:0.100216435175003 5012:0.128617450748183 6475:0.122465293756453
+-1 6:0.0134434979866668 9:0.102840132718285 13:0.0446740678117212 37:0.0318037926184372 41:0.0309511993878546 52:0.0548014028359483 57:0.100366030020518 58:0.0901800328007906 59:0.0417384872553189 72:0.0836620552238033 83:0.034832953111176 96:0.0832928178188601 98:0.130805550855394 101:0.0653298748151603 111:0.042036265742079 116:0.0719650745013211 142:0.00871523705321261 144:0.0399622048827022 166:0.0501538557087336 179:0.073283132449906 203:0.0509578052094908 204:0.0403519252634052 240:0.0605114483727453 290:0.139797414275675 331:0.05254598504619 337:0.05138888587095 369:0.0601071964767181 465:0.0571573623805199 473:0.0591811847323508 496:0.0563653269315165 567:0.0729411358133717 589:0.749123402917118 591:0.0706799500003066 607:0.0659368374123066 626:0.0634398346497722 643:0.0546892854428166 706:0.0684289981213096 767:0.0642978151315608 772:0.0622794989641487 872:0.0767091012304515 906:0.0786522920215955 913:0.0701554619253481 990:0.0905038332468327 1045:0.0349181418350576 1067:0.142991510347177 1453:0.0945544995540135 1504:0.093918462236382 1835:0.181007666493665 1855:0.0869688622792926 1904:0.093918462236382 2115:0.120448716894692 2258:0.124896530053673 2324:0.287107485983365 4293:0.107664827125722 5151:0.115813660966311 5830:0.126654359944138
+-1 6:0.0381500898861224 17:0.0566956739586902 29:0.0125957899062386 37:0.0656386278639596 41:0.0798487417419227 42:0.165998185151949 51:0.0706645768922378 53:0.240387867431014 57:0.0258927000222006 58:0.0232648888954334 63:0.00749648636169733 65:0.0496242085286948 75:0.00702887601334379 81:0.0211163373319097 83:0.00898629950403219 85:0.0425081087428438 111:0.0216892591784422 138:0.0290825591406308 142:0.00179870435122377 144:0.0206191155123302 159:0.0208644792685608 160:0.220045481904228 164:0.121534897701947 166:0.232898893480542 184:0.0817361635586725 186:0.0984036492543125 190:0.0594721875639631 200:0.0335047577146595 215:0.0220946808384505 229:0.0181624474432644 252:0.0500592483312916 271:0.0382768799158897 275:0.023322180346892 281:0.0400340228758044 290:0.0721306304728674 293:0.0328259038959424 335:0.0459248503379694 341:0.0289778707212853 342:0.0323988285773852 347:0.0284908007632194 377:0.0800801104165551 378:0.0959734190981497 384:0.0375835253989858 396:0.0352263509781909 402:0.0264348528801971 409:0.0177121683080866 444:0.227805670838578 454:0.0692093431847351 483:0.0336737866940543 485:0.0480018255260374 502:0.0239393994179659 506:0.0194026427505961 507:0.0185442325676753 508:0.0269087127612592 517:0.0386722636073603 518:0.0302455920752755 534:0.0264348528801971 535:0.0986655297602088 549:0.0370338876348733 550:0.0565126128017814 554:0.0440264933570348 555:0.0399677084517347 557:0.0326405198251723 591:0.0364684095319492 597:0.155066172013476 641:0.0274427868797451 654:0.0362423637172496 662:0.0361534277302501 671:0.0211803573421421 676:0.0346801964439093 687:0.0390247513617465 694:0.0510363461728957 738:0.0420253051403305 741:0.0420253051403305 767:0.0331754486840631 800:0.030584623195776 814:0.077001596086608 824:0.0775766296362607 909:0.0305354443713662 910:0.0555513269009147 953:0.0378972707839555 969:0.0387883148181304 993:0.0381123326228351 996:0.0386147644514929 1000:0.0421076959696733 1001:0.0813052282575231 1007:0.160136091503218 1009:0.340016975639267 1014:0.085061405116341 1102:0.0415454010349822 1146:0.0397069775846253 1149:0.0332730503739563 1194:0.372118588509747 1213:0.0441282705982647 1227:0.075794541567911 1327:0.0450968429967043 1512:0.118482670472594 1531:0.0473917607464001 1535:0.0514689698226902 1548:0.0381668661895204 1598:0.0362871453591564 1645:0.0396428959866162 1707:0.0396428959866162 1722:0.0494792352659569 1734:0.143960128647225 1747:0.0521571791211158 2057:0.0548947851237059 2147:0.0582889329035048 2170:0.053703722474116 2204:0.0516928879501045 2217:0.0614908300771062 2502:0.059241335236297 2555:0.0468318297618749 2624:0.0440264933570348 2807:0.0471076775207157 3056:0.0687434168077152 3316:0.0534278747152751 3426:0.0570182373093454 3542:0.180899302282549 3989:0.0582889329035048 4065:0.127228564525491 4069:0.0597558433119355 4188:0.0578462446506105 4293:0.0555513269009147 4317:0.0602997674275163 4390:0.0687434168077152 6486:0.0740687661669561 6846:0.0719453139813166 7148:0.0719453139813166 7158:0.0674727212135559 7643:0.0768063721695462 7646:0.0768063721695462 7647:0.0768063721695462 8402:0.241994433361069
+-1 17:0.174771825232383 37:0.151754737132483 118:0.210021309938558 139:0.262388882646711 186:0.182005266245545 323:0.274372781581273 495:0.353470287882226 570:0.372096196744653 988:0.473956317256158 1172:0.486857964471918
+-1 6:0.0234825433073835 11:0.015074677354681 13:0.0222956583206074 17:0.164518745230674 29:0.0121834313265444 33:0.0371270724239344 37:0.0317448814604738 53:0.155012063363047 58:0.0450064947553324 59:0.0416611737523242 63:0.00725106781376843 79:0.0909984498219954 83:0.00869210773616584 88:0.0256158042883169 91:0.134025697864646 132:0.0610380756798182 144:0.0199440908215004 146:0.0301235045786769 160:0.0912178605749404 194:0.0265787154901368 199:0.0156808941391416 203:0.0254317072380139 215:0.0641140481099604 218:0.0380576939493527 242:0.0235062525179571 258:0.0636236242468732 262:0.0313960522908412 275:0.0451173264649178 286:0.0187969444884199 293:0.0635025113668937 335:0.0444213713025931 337:0.0769405449499795 342:0.0626763237512481 357:0.0310540484043435 359:0.0373506016206602 372:0.0331149804096806 413:0.0290057105633353 422:0.12236125585965 426:0.0301996805638958 437:0.0301742184572621 438:0.187031091900371 448:0.0303799151888648 473:0.0295357807881342 485:0.046430350871094 493:0.0299481745979752 502:0.0926227036108456 505:0.0723922346467397 507:0.0179371350009449 509:0.0311383654429059 513:0.025103471478627 515:0.0242368503301534 516:0.18811837424422 523:0.0786434731238192 534:0.025569433683049 539:0.0311666436392753 541:0.034592383446333 550:0.0273312568040326 567:0.036403012335162 575:0.0350127553865052 580:0.0303539503037246 629:0.0409724883317558 658:0.0310261134946515 714:0.0347164915604125 726:0.0309152140124287 764:0.0310261134946515 780:0.102103084036736 796:0.0294884565415809 800:0.0295833496055229 810:0.0493655279568651 828:0.0509217987599163 848:0.0370774496572132 853:0.070996959186285 856:0.0251770493738426 858:0.0673110399745424 876:0.0323755318694849 887:0.0423913753056055 917:0.0408095717658533 1026:0.0464157297581167 1034:0.0422959905589797 1043:0.0375184703283287 1094:0.0691027663501478 1110:0.0547758371631998 1143:0.0398155854140279 1150:0.0366053181860196 1207:0.038222345286747 1239:0.044912396818762 1247:0.0519455801989142 1294:0.0381012310962111 1316:0.0465654004652381 1340:0.0450393580823881 1351:0.0445416938744935 1421:0.0940591871221102 1431:0.0391853704280686 1445:0.0519455801989142 1464:0.0428837143495225 1579:0.0421081361678026 1744:0.0922469948284913 1776:0.038853040263616 1788:0.0413072359737479 1796:0.0544148283174351 1911:0.0454310999973674 1963:0.0480347234320123 1972:0.0975429603820565 1990:0.312645271183958 2024:0.130683560906087 2026:0.0404144662310016 2047:0.0461234974142457 2108:0.0504496672887227 2134:0.18280736578933 2325:0.0594777549509281 2399:0.0487714801910283 2409:0.0480347234320123 2485:0.0537326981026014 2495:0.04978398845571 2528:0.0385955536646866 2534:0.0583256850843369 2643:0.0487714801910283 2760:0.0527958346435395 2866:0.0459807884210666 2959:0.0583256850843369 3005:0.222173307965721 3216:0.0664929078734469 3344:0.069589981944991 3345:0.139179963889982 3381:0.0632098770595683 3813:0.0583256850843369 3924:0.0577995678532336 4241:0.515717132808052 4476:0.135823589694593 4823:0.0716439169559367 5388:0.0742918997327193 5588:0.148583799465439 5683:0.126419754119137 7297:0.156048043682719
+-1 6:0.00579043246131075 13:0.0384843546958313 17:0.220869031896914 36:0.0442420015095875 53:0.0445941772071556 59:0.0719110135558188 63:0.0125160092452022 75:0.0117352947663433 85:0.0354854165239241 91:0.0462681336501469 100:0.0357815211599887 142:0.0090092608202404 144:0.0688506662798182 148:0.050899785270296 160:0.31490081615722 164:0.202912648654222 166:0.043204903135148 168:0.0430053665530555 186:0.0657172400190825 190:0.0496468887868705 220:0.139355432226922 256:0.0394056499547728 271:0.191719330813121 275:0.155753301350037 290:0.0602140519105982 293:0.0548055844859444 301:0.0524834693595367 319:0.0525285414224381 323:0.0495343412688784 377:0.0445668078782213 409:0.0591438846415495 411:0.0433815772998045 444:0.228204340921089 465:0.0492380549852897 473:0.0509814712678064 484:0.0639990846337184 490:0.0599238540434069 513:0.0433308981770333 514:0.123020371787853 515:0.0836700609062786 523:0.0678729300271831 546:0.150083734920552 561:0.102624961960767 567:0.0628349438512983 575:0.0604352326267591 598:0.12239112779937 656:0.114318997313817 657:0.120282008009655 671:0.035362373186645 678:0.0626631811890306 685:0.183586691699055 704:0.159727204727086 761:0.0588805104508277 767:0.0553891786644229 772:0.160951517008673 810:0.0852094367576054 938:0.171863476050123 946:0.0823127316419754 962:0.0784182526202634 963:0.0491283567944834 968:0.0803761594427246 1028:0.070441070285441 1034:0.0730067656884941 1045:0.060160277383432 1056:0.170580848450518 1083:0.0620762266273929 1103:0.151741491980506 1309:0.0683544181323624 1330:0.0764703602270763 1436:0.155484140166708 1512:0.197816700715702 1569:0.0951967029454206 1576:0.0641860031604545 1607:0.0749190908147176 1610:0.080117814051097 1690:0.151351600180491 2127:0.102664069619672 2866:0.0793670653427063 3044:0.0939249930891427 3574:0.215183554948314 5290:0.123663983017831 5294:0.106209350155764 5385:0.128234644576452 5387:0.128234644576452 6550:0.134676630228175
+-1 6:0.0183169869690364 17:0.332704418732011 37:0.0866663803625545 79:0.165622632727852 92:0.0403063905144712 118:0.0399807107075383 144:0.0362994406573052 146:0.109653167610423 159:0.0367313974550359 160:0.0553406578162464 199:0.0285401671779207 220:0.0489806370387738 278:0.263554035747816 286:0.0342115655761301 287:0.0566736914044605 306:0.0479116139445488 323:0.156692939535031 335:0.161699116389532 372:0.0602712491137058 376:0.0778678375756773 403:0.141429723924504 422:0.0556762048666872 444:0.0802092449121553 479:0.0773302676633729 484:0.0674831806374104 543:0.0675814379561181 546:0.0527514200780968 550:0.0497445255001557 559:0.524556453833644 570:0.0708340996529133 620:0.0867938185357664 628:0.0663469605624181 690:0.0763042639386521 695:0.120542498227412 806:0.0655426705238625 810:0.0898482196368156 882:0.0458506510375394 906:0.142886720849317 936:0.0714433604246586 938:0.0906098428254179 988:0.090224703454008 1008:0.0793918718391077 1034:0.0769812378552998 1036:0.0690212164267837 1093:0.0775075478871654 1164:0.0647752313918532 1284:0.08559667903068 1318:0.161699116389532 1455:0.0810685524872372 1507:0.0836877908150764 1508:0.0910040451263513 1645:0.0697903336100605 1709:0.0778678375756773 1859:0.0960915834042458 1863:0.0735567508079839 2078:0.0847518197745751 2713:0.0977967310512647 2778:0.101092184150164 2845:0.100379190385593 2960:0.288274750212737 2986:0.108253078848973 3030:0.105198677747923 3099:0.113449050028495 3496:0.103433591486642
+-1 6:0.0264821772214473 17:0.180380459012862 33:0.0366359378721179 34:0.0527624277800097 37:0.0313249450876154 41:0.0304851887588502 53:0.356910143678645 58:0.0444111274616741 59:0.164440239816562 63:0.0286205889759818 72:0.0824024139901926 75:0.0134176573953976 77:0.0499227671570257 79:0.0897946790975224 81:0.04030968525086 83:0.017154248811422 85:0.0405725779310233 96:0.0410193679677056 98:0.17178147050404 101:0.0643462484401727 118:0.0433522282425421 132:0.0401537566784262 135:0.0603188756031491 142:0.00515041068326873 144:0.0787210436534534 160:0.180022374761586 162:0.0358568967792179 164:0.154668030929708 166:0.0493987240722195 179:0.144359518839962 190:0.0567642277209885 197:0.0738227823058747 203:0.100381138131767 215:0.042177278015458 218:0.0375542486938917 264:0.109001399249289 284:0.0402055842946128 293:0.125324939957355 306:0.0519519334807876 309:0.0487227179889632 319:0.0600589918122563 335:0.0876674885998793 355:0.0398458583386957 359:0.0737130202368768 372:0.0653538394340706 377:0.101911740816513 384:0.0717444533887738 415:0.0576010927306348 423:0.0501606175881151 441:0.0466847869398485 444:0.0869731785917973 466:0.061176406715324 485:0.0458161481323115 516:0.0928149275105805 523:0.0776031399005334 534:0.0504623781342656 550:0.107878823819562 572:0.0717444533887738 574:0.0495717307813514 575:0.069099180049798 592:0.0652162208429201 640:0.0617903552836756 641:0.0523864571843773 651:0.0856594327574603 666:0.0865246232796507 774:0.074268585467853 841:0.10199026372536 858:0.0664206175606036 887:0.0836612041087627 942:0.0856594327574603 950:0.072141530775617 966:0.0661299622854343 1001:0.0776031399005334 1007:0.0764222902904091 1025:0.0806994968117615 1035:0.0808609695829722 1042:0.0754334438903497 1083:0.0709754256598831 1386:0.0947985945816237 1389:0.0844343236424125 1395:0.0706952314084127 1466:0.0808609695829722 1476:0.085241815120378 1593:0.100496362029457 1740:0.0947985945816237 1752:0.0891411801318384 1796:0.107390006235685 1799:0.114069935422176 1977:0.123016050082561 2001:0.0867475164705776 2094:0.117381909905211 2640:0.0916034408687254 3491:0.108102472734185 3625:0.131226616199216 5157:0.117381909905211 5225:0.141392354373775 5244:0.146618262379067 5388:0.293236524758134 5412:0.262453232398431 5733:0.141392354373775
+-1 6:0.00656911907010784 17:0.250571089314086 20:0.0370560433090675 33:0.0363513673539057 42:0.0393022674269568 48:0.0401874993481445 50:0.0623539052572167 52:0.0535570341581238 53:0.151773358137562 59:0.163162946345247 63:0.0425974168062528 75:0.0133134354226579 79:0.133645795189987 83:0.0340420055520883 85:0.0805148589351691 91:0.0524901863773188 94:0.0394356590860957 97:0.0409903049284735 98:0.127835365386652 101:0.0638464374259836 132:0.0398418614190218 142:0.0136277459889803 160:0.357248093373436 164:0.0767333216615977 168:0.0975772968351676 171:0.0567993742145495 179:0.0358095507115316 190:0.0563233102329508 215:0.0418496650059716 218:0.0372625451745443 220:0.158095692071637 256:0.0447048486132063 271:0.0725004635127431 275:0.0441746790488933 319:0.0595924821658272 330:0.130664881023844 335:0.0869865292984329 347:0.107929186794828 355:0.0395363546869636 359:0.146280905200241 363:0.0613668118794405 388:0.0683115258380605 394:0.122396189800408 403:0.0760825482446765 409:0.0670974444611885 411:0.0492154512872073 413:0.0567993742145495 444:0.0862976123598416 459:0.0600068559479873 484:0.0726055627357473 485:0.0454602701127011 507:0.0351247400414799 554:0.0833908401687848 561:0.0582128881728601 574:0.0491866811842491 670:0.0937189107085183 671:0.0401178394907098 680:0.090603511361067 695:0.0648462019328872 717:0.0665709717096523 722:0.253128086548514 763:0.0760825482446765 841:0.101198051927691 858:0.0659046938349664 861:0.0877028274881484 876:0.126796407627015 951:0.0856340601648761 969:0.0734691753709333 996:0.0731404526001203 1001:0.154000711333652 1103:0.172147406149024 1255:0.103385516529234 1421:0.184187970710094 1437:0.0897650129359863 1535:0.0974876786422547 1822:0.0933819949986204 1834:0.10281326320619 1922:0.0962720855913773 1945:0.100196435052904 2024:0.191929735613272 2171:0.090891908964478 2424:0.092093985355047 2631:0.095133319647622 2760:0.103385516529234 2866:0.0900402009633744 6125:0.119049459374478 6542:0.305575386930425
+-1 111:0.219437233733265 160:0.318038734862835 712:0.322219301832635 938:0.520728175548652 1042:0.399796254654553 1478:0.562030699391762
+-1 6:0.0185892298700332 10:0.0261318502792573 13:0.0205912805482913 14:0.0628652514019729 17:0.0675298719056793 21:0.0187423851926448 26:0.0134098852749517 28:0.0228786788987174 33:0.0342889163990892 38:0.0252419358287824 41:0.0142661024867362 51:0.021042036775499 57:0.0231304779584956 58:0.0831320023545289 59:0.0577146167452917 65:0.0221651596897312 72:0.0192808595091489 81:0.0188636555786423 91:0.0495120746062147 96:0.0575872938164321 97:0.0193323283438276 98:0.0602912142742131 101:0.0301120056085595 110:0.0299006044153689 111:0.0193754583698459 112:0.0344953580450065 118:0.020287469302841 124:0.0358228663459682 140:0.0218933909895552 142:0.00160681934731254 158:0.066712524887174 166:0.0231170377819523 176:0.0160593547919524 177:0.0323362270162646 179:0.0506667608407609 183:0.0272560549681615 185:0.0180415967399909 196:0.028810325865707 199:0.0579287116485243 208:0.0232115683338825 216:0.0269554864410892 220:0.0497086296252537 222:0.0395125883591984 242:0.021709331623048 252:0.0223594746618354 266:0.031504363762943 271:0.273548151086709 277:0.0280575414141963 279:0.0350782031369122 280:0.0324562418551641 290:0.0322178829719292 291:0.0249370896622754 301:0.0280815892658566 319:0.028105705338464 322:0.0805519950469913 323:0.0530072818371964 327:0.0260556084238747 333:0.0312558852414254 341:0.0258865239788871 342:0.028942535527301 380:0.0380711799843578 384:0.033574131129563 394:0.0288629632468442 399:0.0876398640818163 400:0.136499370941726 403:0.0358829436977298 404:0.0260177423929231 411:0.0232115683338825 413:0.0535767740179384 414:0.0457834943433749 423:0.0234735798085648 439:0.0333922865510297 441:0.0218470011887977 459:0.0283011371613736 471:0.161482978314662 478:0.0242964167269287 484:0.136972348055974 499:0.0230768442796846 507:0.0496978255217947 523:0.0363158107981908 525:0.049934293387849 550:0.0504838716575649 580:0.028033561398597 581:0.0463831640876015 594:0.0296652700820518 598:0.0654860934802577 599:0.116199215809621 641:0.0245152022190573 651:0.0801718012206074 653:0.0316496820006008 656:0.0305835262705232 671:0.0189208459618126 676:0.061961056108815 699:0.0461783129729882 714:0.0320626108946115 715:0.0382286087407296 722:0.0795888245727009 724:0.0362526067160127 757:0.0294362754979495 764:0.0286543414912762 786:0.147115899413914 796:0.027234229770312 827:0.0793911914106207 849:0.0387191819488942 854:0.0372538696890411 870:0.152806669082632 876:0.0299006044153689 882:0.0232660615326172 890:0.032537203513722 913:0.0323362270162646 998:0.0342929458659694 1021:0.0331703180686535 1063:0.0454049700836635 1088:0.0795888245727009 1098:0.0347553449713093 1160:0.0392398084885807 1192:0.0385524921004839 1193:0.037764807731768 1214:0.0450431746364123 1218:0.0376899093627402 1239:0.0414790964990947 1280:0.122422869395673 1292:0.0371833223140943 1308:0.0361898690888756 1318:0.04102560712397 1328:0.0461783129729882 1333:0.0440419116633839 1395:0.0330831284849156 1431:0.0361898690888756 1438:0.0428675080842834 1446:0.0323362270162646 1449:0.0396994290647594 1543:0.0434344454495309 1682:0.0434344454495309 1747:0.0465930737622528 1791:0.0434344454495309 1811:0.049934293387849 1873:0.0820512142479401 1969:0.0846720563262249 2187:0.0865782544237463 2240:0.0420822508133406 2363:0.052921495160417 2403:0.0465930737622528 2424:0.0434344454495309 2440:0.0543823787096241 2528:0.0356451405021597 2537:0.0465930737622528 2561:0.0461783129729882 2577:0.044527810189059 2609:0.0627203198098075 2640:0.0428675080842834 2644:0.0505885322638118 2673:0.568279380853424 2695:0.103350464472648 2701:0.107734028524542 2767:0.0975197796174969 2845:0.0509355563608773 2923:0.0538670142622708 3085:0.0561475022398251 3518:0.0479746325378057 3576:0.0992502706434698 3611:0.0915657010237184 3636:0.0538670142622708 3645:0.0524854554867179 3672:0.0602747604340891 3732:0.128540437871296 3782:0.118546994922122 3845:0.0614098987706651 3944:0.0538670142622708 3986:0.058377837211183 4101:0.064270218935648 4148:0.0524854554867179 4165:0.0561475022398251 4166:0.157456366460154 4519:0.0592734974610608 4629:0.0686127015342725 4798:0.0602747604340891 4831:0.0627203198098075 5031:0.064270218935648 5079:0.058377837211183 5107:0.0555175170462 5176:0.052921495160417 5398:0.064270218935648 5629:0.0627203198098075 5775:0.0686127015342725 5789:0.0627203198098075 5942:0.0614098987706651 6438:0.0575676139607893 6808:0.0686127015342725 8486:0.0686127015342725
+-1 17:0.243374728299222 50:0.423941778532318 63:0.0965393937889998 76:0.371577166762928 83:0.115725136372987 142:0.0231636288381725 481:0.514702243010863 534:0.340426774467953 758:0.467883549617696
+-1 6:0.0074929266333557 17:0.122489404176009 33:0.0414634178035237 37:0.106357802852542 47:0.035464613352761 53:0.115411379139872 132:0.0454447759833579 190:0.0642439917467205 203:0.0568041288376339 271:0.165392238498836 290:0.0779180961487377 323:0.0640983531781479 335:0.0992193435934635 411:0.0561365628765321 479:0.379601747679725 505:0.0538983060952481 534:0.0571117539079804 538:0.0656554731208832 550:0.0610469528553747 570:0.0869282780082157 651:0.290840064881088 663:0.0701260588851176 694:0.11026258614711 715:0.369819508511833 745:0.101774808353673 789:0.0769918482808601 803:0.0936413154310293 809:0.113204628630711 876:0.0723138193708133 1039:0.218737131867958 1260:0.100036373963268 1280:0.0986921550855 1382:0.0981781476809149 1497:0.0909724892644875 1530:0.101774808353673 1614:0.09468515510688 1854:0.249950359395521 1995:0.0969466882936958 2082:0.130275946442229 2981:0.134267643684534 3508:0.160023479788831 3888:0.310871642490691 5093:0.134267643684534 5150:0.141185252201068 5380:0.165938000328268 6164:0.151687431283991 7274:0.165938000328268
+-1 6:0.021783922278134 17:0.197838411183604 20:0.0409606401692985 29:0.131858264766466 34:0.405082926250327 42:0.0868870980361356 53:0.167765723342555 59:0.135266574708238 63:0.0156953028092236 65:0.0519488025420466 72:0.0903776537144238 79:0.0492426861052856 83:0.0188145065628087 85:0.0444993565235592 91:0.0580210795493825 118:0.0475480326622404 132:0.0440400000520367 142:0.00376592554092676 144:0.086339985430483 145:0.0609339300801079 160:0.197445670086647 162:0.0393272726302859 166:0.0541797328736606 173:0.0542743824787056 186:0.082410612015273 190:0.062258099828784 199:0.0678841760011889 209:0.0456142601970042 218:0.0411889011451273 219:0.182142785624443 275:0.0976587337198631 286:0.0406869364914392 293:0.137454395772858 319:0.0658717445473326 327:0.0610669030168021 337:0.0555138995759855 355:0.0437023020626221 382:0.0637782337262448 444:0.0953907954462079 463:0.0892279703478239 466:0.0670973073952464 478:0.0569438602155092 507:0.0388258353942272 535:0.0688582753617882 546:0.0627359094039313 569:0.101797932510557 576:0.0710820393975371 651:0.0939498999634783 671:0.0443450579448815 678:0.0785807667989775 706:0.295687323467669 774:0.162913200578628 787:0.0834050936165297 804:0.0684032280753233 811:0.0824720406453414 814:0.0806086551126065 841:0.111861294965344 884:0.0749661067822203 938:0.107759959488942 1014:0.0890460174449466 1081:0.0807276029548151 1143:0.0861828472232833 1227:0.0793450573906798 1312:0.0944187146380703 1386:0.103973586923458 1433:0.0700086898712688 1512:0.124032866931793 1665:0.0782619807278236 1904:0.202914696147123 1910:0.0888657111972536 2412:0.106854180586889 2934:0.126248893606516 3235:0.123010914497136 3256:0.128742607067476 3335:0.10641627934657 3404:0.141266820175913 3542:0.126248893606516 3579:0.13892014579113 4611:0.123010914497136 5235:0.141266820175913 5957:0.150631033548063
+-1 6:0.0432898439829799 17:0.345973814232089 33:0.047910382032175 34:0.0459997881626348 37:0.0409649697388189 50:0.0273937372881273 51:0.0196007364579187 53:0.311164434486722 57:0.0215461272807047 58:0.0193594432748486 59:0.089602304556963 63:0.0124761225494992 65:0.0206469296799242 72:0.0898009660264986 75:0.00584894804689923 79:0.0391427801032949 83:0.00747778148784793 85:0.0353723296778653 91:0.046120683857526 96:0.0536427809467057 98:0.0561614930305973 101:0.0560988931299641 119:0.271761039483063 132:0.0350071893742803 140:0.0203937761127816 142:0.00374189567509336 148:0.0761063626193996 160:0.156948636595999 164:0.0674219985475534 179:0.0471962784312071 183:0.177723824556222 190:0.0742330070917526 194:0.0228655503009897 197:0.0321804027082045 215:0.0367713529422293 220:0.092607551195175 226:0.0223776543358395 227:0.0205138403359654 232:0.0256162648546915 243:0.0272122877552691 262:0.0540197672965149 271:0.0318513915454506 275:0.0582213518621275 277:0.0261357054349964 278:0.0249150433046531 295:0.0490081575965067 299:0.0477825649520265 306:0.0226465880675505 307:0.027714806789838 323:0.0246882412745158 325:0.103660466126204 330:0.0287022874412291 331:0.0225606708099098 359:0.0321325558583282 371:0.0403239849367254 377:0.0666371699439842 384:0.0312744295191245 388:0.0300110792554147 389:0.0245956246682841 391:0.0298664427309543 411:0.0216216632705992 413:0.0249534833294715 426:0.0519613007832403 430:0.0224615981915106 438:0.064360805416409 441:0.0203505638387663 448:0.0261357054349964 458:0.0607693375950405 466:0.0533353347800701 473:0.0254095003778759 485:0.0199719118053237 502:0.0398414492456075 504:0.0306570809521126 505:0.0415191442272758 506:0.0161455471977796 507:0.015431237178183 513:0.0215964044626993 515:0.0834034166274647 516:0.0809186988441535 523:0.0676566289000887 526:0.0346364046923936 572:0.0312744295191245 575:0.0903639515344687 593:0.0277971503002481 599:0.0270600017241818 603:0.0308982761329481 629:0.0352484488294455 639:0.0332035825449102 640:0.0269352963191348 651:0.0373401673005228 653:0.0294817979119324 663:0.0270098836482575 666:0.0377173161772483 670:0.0823464451276362 687:0.0324737188171612 688:0.0320377208378608 695:0.0284886698363896 712:0.0265019501106564 714:0.0298664427309543 720:0.0287332801600977 739:0.0294817979119324 772:0.0267397646671039 778:0.0275794423044867 780:0.0585592183036975 796:0.0253687875397999 809:0.0436021059271108 810:0.0849378867125084 836:0.0327267316999556 841:0.177836036869982 848:0.0318975644433996 851:0.0327783190456795 856:0.0216597031975354 858:0.0289536936222705 869:0.0386379345148756 882:0.0216724238903311 883:0.0336529870761283 918:0.0333691348373721 938:0.042828943055595 942:0.0746803346010457 953:0.0315355068881318 1001:0.0676566289000887 1003:0.030500271282192 1007:0.0333135652790611 1018:0.0313173490256174 1025:0.0351780605476487 1027:0.0301584068457874 1028:0.0351082924349843 1034:0.0727741037760407 1035:0.105745346488337 1045:0.0149921388388093 1093:0.036635825108252 1098:0.19424840795257 1110:0.0471234082173292 1162:0.0334814577073512 1193:0.0351780605476487 1216:0.0308982761329481 1243:0.0384239044706724 1260:0.0385301963962911 1263:0.0783995500576978 1288:0.0379128478292792 1289:0.0390841725441771 1293:0.0424689433562542 1294:0.0327783190456795 1305:0.0262483478687101 1308:0.0337109992737767 1340:0.0387471587232763 1341:0.0331491587598034 1375:0.0362254415937864 1382:0.0378144784951792 1383:0.041957886714861 1412:0.108676324781359 1421:0.161837397688307 1423:0.0421246008633242 1424:0.0268369269850348 1436:0.0387471587232763 1438:0.119793735397245 1493:0.0385301963962911 1535:0.0856578861111901 1574:0.0442359344783485 1599:0.0349705736670046 1667:0.0462260003395899 1738:0.0389702334624234 1744:0.0396798389513735 1782:0.0355364307316917 1793:0.0456796713478389 1806:0.0396798389513735 1820:0.0368061247806896 1822:0.0410252064867638 1844:0.037526496592933 1859:0.0454200208874871 1866:0.045948125177149 1904:0.0403239849367254 1938:0.0584242139800776 1942:0.0374327839067546 1990:0.0384239044706724 2048:0.0488903993394236 2124:0.0403239849367254 2134:0.0393170902051165 2166:0.0543791750944958 2167:0.0543791750944958 2412:0.0424689433562542 2415:0.0421246008633242 2449:0.0362254415937864 2492:0.0552134859884929 2525:0.0481356733320279 2533:0.045948125177149 2598:0.0543791750944958 2658:0.0474466624699332 2688:0.0497247102334207 2722:0.0796090887128411 2740:0.0417946102176619 2833:0.0436021059271108 2848:0.0529354382250054 2956:0.047783676290834 2999:0.0962713466640559 3005:0.047783676290834 3099:0.0536244490871001 3270:0.0561461662165901 3311:0.059867950849568 3350:0.0462260003395899 3425:0.047783676290834 3461:0.0552134859884929 3801:0.110426971976986 3987:0.0523016096737677 4083:0.059867950849568 4164:0.0543791750944958 4476:0.0584242139800776 5028:0.0543791750944958 5767:0.0616349419716623 7176:0.0639129897351498 8216:0.319564948675749
+-1 6:0.0142731679289662 13:0.047431142741207 17:0.311104400344784 21:0.0215861452933481 25:0.0267804656288035 29:0.0129593408280953 33:0.0394915334272756 34:0.113750011677155 37:0.0168832871203308 42:0.0213486716022063 46:0.0298787395913966 48:0.0436590447455437 50:0.0677402670940239 53:0.357248892651813 58:0.0478727617351512 63:0.0462771398209586 68:0.043811282526479 72:0.0222063216856974 75:0.00723174970155941 78:0.0274133934555662 79:0.0483968717212792 80:0.0464670053691485 82:0.0267647627497832 83:0.0369826803790739 85:0.0218675078441649 92:0.0235559981042205 96:0.0221083154321978 98:0.0231463764769614 101:0.138723459465675 106:0.0249770845495439 111:0.0223152739204637 114:0.0250558308960563 142:0.0129543411227105 146:0.128167755801678 149:0.0397292982217542 159:0.0214666884772416 160:0.129369503343425 162:0.0193258849097534 164:0.0833618308737234 166:0.0266245587839518 179:0.0194514563258682 186:0.0607463178843605 190:0.12237745376367 194:0.0282713977349888 203:0.0270513415395299 216:0.155227053757964 244:0.0525094027130151 254:0.0344373880183817 258:0.0676755348501447 271:0.0787633227226828 277:0.0646293584637942 287:0.0993642956049372 288:0.037061249540212 295:0.0605946105574324 309:0.0262602100271772 312:0.0323423758358563 330:0.0354880496412036 333:0.107994912039008 335:0.0945007486532047 342:0.0666679049255041 347:0.0293131276644306 369:0.0319083660332469 377:0.0274638179943399 390:0.0325952354757989 402:0.0271978391800069 403:0.165309682465858 409:0.0182233927064307 410:0.0454019401001667 411:0.053466864691085 433:0.0288558118709429 441:0.0251618210296098 444:0.0937523205117232 448:0.0323146792318971 449:0.0407871046061856 454:0.0356034624861187 459:0.0651904709515978 463:0.0876953508515089 466:0.0329724070282025 468:0.0477726711121935 478:0.0279828835115947 479:0.0903872371217797 504:0.0379049932138922 505:0.0256675265763202 513:0.0267022018789652 516:0.0500247028631938 531:0.0401511185398593 574:0.0267178046599094 585:0.0442137271425665 586:0.0262304509070915 598:0.037711110779896 599:0.0334574966000584 634:0.0400897343703191 641:0.028234865069578 645:0.0454019401001667 653:0.0364518510921089 657:0.037061249540212 671:0.0217916837054992 676:0.0713623344065653 680:0.0492150895275702 695:0.105671786414494 700:0.044120923196825 712:0.0327675110578366 715:0.0440289906625007 728:0.0492150895275702 740:0.153281535190129 759:0.0527294286684742 771:0.0378561614769032 782:0.0406565594325544 803:0.0445939979675805 810:0.10501880542603 814:0.039612042413451 856:0.0267804656288035 858:0.071597785972095 861:0.0476394616699703 864:0.0531848941845359 869:0.0477726711121935 873:0.0412582277986541 895:0.0742125290594362 906:0.0835063443410139 914:0.0457229768274726 938:0.0529545131324263 950:0.0777646169197254 953:0.0389910956120861 967:0.0457229768274726 991:0.0379049932138922 1001:0.0418259661338689 1003:0.075422221559792 1007:0.041189520548477 1039:0.260418255794863 1099:0.0505446875120472 1114:0.0436696570130046 1124:0.0793409895678129 1126:0.0380529669570386 1146:0.0408530357844278 1164:0.0757123229538064 1169:0.0402128899937875 1196:0.0447898193545428 1218:0.0434085550603511 1284:0.0500247028631938 1319:0.0376632341907514 1322:0.0400897343703191 1330:0.0471240404064105 1375:0.0447898193545428 1377:0.0340335888120346 1395:0.0381027927285449 1423:0.0520836511589726 1441:0.0465157241072967 1483:0.0500247028631938 1503:0.0483244082295947 1525:0.0500247028631938 1559:0.0518775226408653 1579:0.0447898193545428 1614:0.0450910967553229 1667:0.114309397683003 1749:0.055847327297831 1760:0.0544258875555127 1789:0.0541647856028593 1865:0.0423512660613385 1883:0.0512839625509809 1920:0.053662586141404 1952:0.0500247028631938 1972:0.0518775226408653 1990:0.0475080403280114 2034:0.0960893073683931 2042:0.0458323717417603 2049:0.0663022804395591 2194:0.108851775111025 2296:0.0520836511589726 2358:0.0609512114884017 2421:0.0571546988415016 2424:0.100049405726388 2454:0.136533991281054 2595:0.0626337531833735 2621:0.0604490120269465 2740:0.0516756444996298 2848:0.0654503744119502 2926:0.0609512114884017 2977:0.0632656332555232 3044:0.0578802709489187 3070:0.055847327297831 3183:0.0578802709489187 3370:0.0604490120269465 3454:0.0639411247270441 3471:0.0620401930934891 3554:0.127882249454088 3888:0.148043727596063 4639:0.068266995640527 4778:0.0590806387721029 5493:0.0646666968344611 5639:0.127882249454088 5949:0.0762066049544584
+-1 6:0.0129118885536321 17:0.0351791677028856 29:0.0234467310037487 33:0.0357250948747124 34:0.10290129570809 37:0.0305461440377621 41:0.029727265737949 47:0.061112987970553 53:0.198878080380675 59:0.0801759625913396 63:0.0139545118253307 72:0.0401768622381221 75:0.0130840674836873 85:0.0791277243103196 91:0.0515858693859991 98:0.0418776595326703 111:0.040373984435517 140:0.0456207750124066 142:0.00334824075285089 160:0.175546656956837 164:0.2262340095538 166:0.048170572576303 168:0.0479481026547932 179:0.0351926128152327 190:0.110705910022052 194:0.0511501214903764 199:0.0301775170659572 219:0.0539803465786229 220:0.0517906570387071 252:0.0465919858385503 275:0.0434136241621218 280:0.0676313188819899 335:0.0854878987564295 347:0.0530348748708279 355:0.0388552102714865 359:0.21564109951187 377:0.0496890051269561 384:0.20988222654447 388:0.0671346339696593 390:0.0589730394734303 409:0.0329707345791101 422:0.058870349709514 507:0.034519600272936 509:0.059925062067331 513:0.0483110486072388 523:0.151347539959231 534:0.0492077820620574 554:0.0819541572592792 574:0.0483392779911684 641:0.0510840246425428 657:0.0670531904484118 663:0.0604209744293581 670:0.0921042926396766 671:0.0394266770771169 673:0.0652764496638395 680:0.0890425663454013 694:0.095002813562125 729:0.0694883425949967 767:0.0617552235321603 771:0.0684913875448923 824:0.0722034259382947 839:0.30835717760501 841:0.0994545809255346 861:0.0861918563417669 890:0.0678000242968553 917:0.0785370743205503 928:0.104051545287679 968:0.0896140331510318 1001:0.0756737699796155 1007:0.074522278662491 1028:0.0785370743205503 1047:0.0727553065448814 1080:0.0652764496638395 1194:0.296866691554314 1304:0.0831225323915026 1350:0.0914481459731531 1395:0.0689376059668836 1421:0.090507361997373 1431:0.0754113365179335 1440:0.0799938346198477 1492:0.0931364642712946 1561:0.0859540818365713 1593:0.0979978206262373 1599:0.0782289981264093 1658:0.0942325211302429 1704:0.0979978206262373 1932:0.1666499591253 1942:0.083736950099584 2402:0.0890425663454013 2470:0.0962249487801246 2471:0.199936128519722 4211:0.133924306173499 4218:0.125598692591848 4800:0.261389348056178 5378:0.142973037899052 6484:0.137877056462812
+-1 6:0.021172948627918 11:0.0951441909526551 13:0.0469065290256956 17:0.153831709942299 26:0.0610949058175954 34:0.0562459379644277 37:0.0333930979348274 58:0.0473432634782211 63:0.0457652899927313 75:0.0429105761756896 92:0.0931818248473204 96:0.043727571363305 142:0.00732060526075626 151:0.111474524152294 215:0.0449619295885522 242:0.0494534272172524 404:0.0592679015700162 413:0.0610234147332838 414:0.0521469464047851 469:0.0816037796240994 505:0.0507672601075239 521:0.0695951755757326 626:0.0666100624175557 792:0.0774469685795106 1036:0.239348754046351 3360:0.296828417943508 4028:0.655689418843811 5490:0.559562129687997
+-1 6:0.0493440598601973 11:0.0862305879952774 13:0.0364389268078625 17:0.164316375281935 27:0.00798211488994783 29:0.019912000623289 33:0.0455089951323234 34:0.0218470824776078 37:0.0778234081785322 52:0.0223497031356452 53:0.274456095703969 58:0.0183891000737148 59:0.18724467373724 63:0.00592539420781628 64:0.0237763157194243 67:0.0310133896936128 72:0.153539854920381 78:0.0210603114315161 79:0.0185904235536064 82:0.0205620015564553 83:0.0213089297285823 85:0.0335993809869404 91:0.0438090010587271 94:0.0164567603002538 96:0.033969381352438 97:0.0513165727523019 98:0.0711287200405969 100:0.0508196216720263 101:0.0266435388958676 106:0.0191886196109696 111:0.0171436863227573 114:0.0192491164109858 119:0.028682189302436 132:0.0166262712094483 137:0.022441995437777 142:0.00853042225123354 144:0.0325956406060594 145:0.0230041790684009 146:0.0492323735300594 148:0.0240972411342153 151:0.108247511351286 160:0.323010962227284 164:0.0320213205736029 168:0.0203598243566474 176:0.0142095498255451 179:0.0597742455611439 181:0.0462775994445489 183:0.0723496571565819 185:0.0159634662245436 186:0.0466682964674242 194:0.0434389446799573 199:0.0512561634737551 203:0.0207821654180187 212:0.0310377024308802 215:0.0349282817434651 216:0.0477012099948628 224:0.0260706738352007 232:0.0243323142737115 240:0.0246784359058712 252:0.0197839871773416 253:0.0299548692494989 262:0.102624325779551 271:0.0907647629584452 280:0.0287177530956603 286:0.0153604005447085 299:0.0226937922802552 303:0.0244932129917888 306:0.021511485035493 312:0.0496939941888129 323:0.0234508055317329 325:0.0738485602950891 327:0.0230543798882551 331:0.0214298741634043 335:0.0726001033171546 337:0.0628739202420865 341:0.0458095430424757 351:0.0194543604752001 359:0.0305219926479343 367:0.046795794989364 369:0.0245135695082851 373:0.0195696784284209 377:0.0632971500952757 379:0.0334817093531818 380:0.0336859317147736 384:0.0297068777242521 387:0.0193510384075151 399:0.103393362228859 400:0.0241553242665015 408:0.0161421694498457 411:0.0410758640110039 413:0.0237027529985629 426:0.0493568718117425 432:0.0257515967379653 434:0.0237210763407653 437:0.024657628898815 438:0.152837206476498 444:0.0720251241643817 448:0.17378003444757 454:0.0273523235718091 459:0.0751237687610553 485:0.0189708701659126 493:0.0244729114187236 505:0.19719050990539 506:0.0306725848413817 509:0.0254455060930359 510:0.0247833431608843 513:0.061541817694668 538:0.0240204881391032 551:0.162037318169159 557:0.0515996262196621 558:0.0304319109933583 570:0.0954098525954353 572:0.0297068777242521 586:0.0403030340616421 593:0.0264038883442196 613:0.0253537765628363 628:0.0297886364450323 660:0.0352956648098264 667:0.0264038883442196 670:0.0391095187673627 672:0.0383028470315458 695:0.0270607472100712 712:0.0251736067930533 713:0.0274120201411457 714:0.0283694627179142 719:0.0295062864166794 720:0.0272930970590761 737:0.032303066180062 740:0.0785055882273375 756:0.036398376303846 762:0.0729960066002548 763:0.0317497485400617 780:0.111248170759562 792:0.0300820000773631 796:0.0240972411342153 804:0.0258240376984168 827:0.02341549218868 856:0.0205740652771719 871:0.0314876408964427 873:0.0316965912286813 890:0.0287893891443149 906:0.0320768317351838 962:0.0371251771039801 969:0.0306591708254993 974:0.0352106726258109 984:0.0314362978421093 986:0.0245135695082851 993:0.0301248590437751 1012:0.0365989676114188 1025:0.0334148491062418 1030:0.0820809913857173 1034:0.0345632428090313 1055:0.029912965362544 1068:0.064606132360124 1080:0.0277178235674869 1094:0.0564690804156812 1095:0.0386953740856451 1110:0.134284399177242 1117:0.065432255171167 1133:0.0319662160908497 1157:0.0375743689589654 1184:0.0361071762637219 1196:0.0344097328226428 1216:0.14674789038284 1228:0.0337552568898872 1245:0.0268076558411396 1251:0.0360125620821908 1288:0.0360125620821908 1301:0.0360125620821908 1313:0.0358268309603953 1340:0.110415165749132 1360:0.0405093295422897 1393:0.0313853028789555 1436:0.0368050552497106 1439:0.032303066180062 1440:0.0339671505711183 1463:0.0403402948274706 1464:0.0350435162299563 1476:0.0352956648098264 1485:0.0683703738924856 1492:0.0395478016599508 1497:0.0332828855766369 1499:0.0418126323438821 1500:0.0312843385676641 1507:0.0375743689589654 1547:0.0368050552497106 1564:0.0439090388181084 1570:0.0907772803925338 1613:0.0314362978421093 1625:0.0370169489309418 1665:0.0295459790061748 1744:0.0753819744737884 1757:0.0444664588461321 1782:0.0337552568898872 1818:0.0444664588461321 1846:0.0360125620821908 1898:0.0393988516787061 1923:0.0406822504510751 1952:0.0384314267139371 1990:0.0729960066002548 2030:0.0422306136634051 2067:0.0341851869462428 2102:0.0383028470315458 2124:0.0383028470315458 2134:0.0373464203554075 2143:0.0862869141010203 2157:0.0441825863548138 2219:0.0787977033574123 2233:0.0416120410363094 2238:0.0422306136634051 2295:0.040859240458285 2415:0.0400132116323485 2424:0.0384314267139371 2468:0.0406822504510751 2523:0.0426731959149296 2648:0.0486037579197574 2841:0.0472323847146373 2861:0.0468257057687727 2952:0.0429046519693575 3005:0.0453886401962669 3096:0.0460729051907483 3248:0.0447614663924141 3270:0.0533319814342842 3311:0.0568672210120441 3319:0.0491227035505718 3540:0.0460729051907483 3566:0.0533319814342842 3675:0.0453886401962669 3727:0.0972075158395148 3753:0.0516535562795808 3759:0.0450685183419974 3813:0.0476623147709929 3945:0.0502821830744607 4207:0.0453886401962669 4505:0.106663962868568 4524:0.0524460494471006 5297:0.0476623147709929 5379:0.0607095125393874 6279:0.152809977021649 6981:0.170601663036132 8319:0.255037243596843
+-1 6:0.0215404672444726 11:0.19359139482492 17:0.0586882164018255 27:0.0470405058888882 30:0.0323690861053466 47:0.0254881830439367 51:0.0365740248860682 53:0.207363487063171 58:0.0722475669865641 83:0.0139531780765635 88:0.0411202771132409 101:0.052338908740015 118:0.0352624802947506 132:0.0653217198300202 135:0.147189192937744 142:0.00558575687544211 144:0.0640312935031116 158:0.0386519228385245 160:0.0976195180730482 203:0.408247516774988 219:0.0450267938145664 237:0.0462771481733404 242:0.0377338773576226 254:0.0519714636783421 264:0.0443305897868066 277:0.0487679604818279 284:0.0327030162324266 299:0.0445799759470148 304:0.163104268092543 306:0.0422574364665008 317:0.0641929250371122 323:0.0460670624650232 326:0.0627948439312643 343:0.0570576043159581 346:0.0448656604921636 387:0.11404028239573 411:0.0403449764367195 414:0.278523575342491 442:0.0458256791397209 447:0.0757521629594012 496:0.0451569777336411 504:0.0572046282079257 528:0.0563436596854207 570:0.0624747784370001 603:0.0576546867332886 622:0.0594331539297126 693:0.128063124312171 695:0.0531584780910692 706:0.0548217656619597 787:0.0618547246954828 804:0.0507290701013362 909:0.142238691055031 987:0.0879284587700308 1225:0.048035127028991 1252:0.0817432258829156 1263:0.0731448815972515 1294:0.0611627557502226 1296:0.0548217656619597 1324:0.128535959334901 1379:0.170519326846918 1395:0.0575031389511296 1426:0.0639147569689023 1530:0.0731448815972515 1649:0.122325511500445 2150:0.0806204748966986 2225:0.0833866713121964 2475:0.0867928379995006 2703:0.0833866713121964 2722:0.0742733518710304 2856:0.094524237055099 3011:0.0919850155978606 3373:0.0987749638465295 3577:0.482486337165021 3896:0.0954778439953603 4020:0.0873504807539026 6461:0.115007816484989 6607:0.115007816484989 7073:0.109016753561474 8236:0.115007816484989
+-1 6:0.0146753072263917 13:0.0650233216424171 17:0.079967402423618 37:0.115726434717838 42:0.0292668795226515 53:0.113019753774146 58:0.0656287368238162 59:0.12150113990553 78:0.0375810026272635 85:0.0299781517773533 98:0.0951940557744807 105:0.0519639296706059 111:0.0305919939898127 118:0.0320319719479213 140:0.0345675685593817 148:0.0430002417257491 158:0.0702217936882419 160:0.266028847518503 179:0.106663953511837 186:0.0277590287597807 196:0.0454887465836642 216:0.0851202653849617 253:0.160358600150631 271:0.161964879118539 306:0.115158293588967 308:0.0361438774002096 323:0.0418467118667892 335:0.194326519033711 341:0.0408723432944289 365:0.0518303751065532 380:0.120221497425748 388:0.0508689530553587 411:0.0366488443994375 423:0.0741250708721907 444:0.642624965269983 461:0.0535280608796196 479:0.0619559012504338 480:0.0719593807254718 502:0.0675314870912748 508:0.0379538633520615 570:0.0567512646194799 609:0.0346412155092842 641:0.077414315019419 670:0.0697888505745361 694:0.359925524089608 713:0.0489152880902501 756:0.0649509614305117 810:0.0719851048179217 869:0.0654915226562074 909:0.0861385004439041 962:0.132495797397794 963:0.0415037353602445 971:0.0610016430487212 1034:0.0616762635745813 1138:0.0482375223686064 1156:0.0685788314670704 1157:0.134098915218463 1216:0.0523727568982667 1296:0.0497993687664911 1500:0.111650467632135 1535:0.0725953063921422 1898:0.0703051497250358 2127:0.0867308140250893 2484:0.078353338152187
+-1 1:0.139730676284121 17:0.178283653674753 50:0.621115345461744 59:0.20316091142915 75:0.132616858682956 142:0.0169684683799952 143:0.288294420102398 303:0.292327130781051 356:0.31205640572614 2295:0.487656092039363
+-1 6:0.0274438732929307 10:0.231475707058701 17:0.256362441343277 33:0.0216950663734014 83:0.0203168030172297 91:0.0626539335547601 96:0.121454228053437 111:0.0245182350154435 119:0.28714108003641 132:0.0237782479957433 140:0.0554089916553729 142:0.00101665657742795 158:0.0281399512798617 162:0.0212337338895144 164:0.0457956502789174 171:0.0677975153757134 183:0.0344905575159586 199:0.0366522881479494 218:0.0222388715927283 220:0.0943539894785959 240:0.0352941415260562 256:0.0266805550513127 278:0.135386151041988 284:0.0238089392688061 306:0.0307648912667801 325:0.035205115220049 326:0.0457168419857001 342:0.0366246761473046 371:0.32867547420069 394:0.0365239832070029 422:0.107252015608555 426:0.0352941415260562 430:0.0305135865932087 434:0.0678499260418829 449:0.0448136025530426 454:0.0391182319208585 465:0.0333378243516439 473:0.138072987230896 485:0.0271314024544345 513:0.0293382399620878 515:0.0283254262868244 546:0.0338726160372967 550:0.0319418360629862 559:0.0561378231596668 561:0.0347423649955742 594:0.037539244222491 620:0.055731839736643 666:0.0512381435828943 673:0.0792819116670515 690:0.146988935875625 739:0.160201493382467 761:0.0398664836726649 800:0.0345738401299644 812:0.0439137554387996 819:0.0393764191281959 848:0.0433321389892904 855:0.063188220750368 856:0.029424229899678 906:0.0458750401884151 932:0.0532520312926425 953:0.0428402917720891 971:0.0488903280085241 1000:0.0475998915983929 1034:0.049431008835174 1188:0.0482754587229179 1253:0.287884321072158 1281:0.0507257951377671 1319:0.0413813440346665 1382:0.0513701364525246 1507:0.053737404625164 1653:0.120793170284655 1739:0.063188220750368 1760:0.179396413429609 1820:0.0500003101328957 1866:0.0624195163867919 1928:0.113119463012535 2024:0.0381822258350523 2095:0.0581821761514921 2166:0.0738729120682203 2167:0.295491648272881 2314:0.324565360801729 2373:0.0627970036768302 2386:0.072847633404411 2415:0.0572253427912003 2587:0.0640161125199924 2938:0.12559400735366 3584:0.0702533846905553 3619:0.0675499240344864 3659:0.221618736204661 4159:0.0750063050482114 7576:0.0813292930819453 8320:0.0911860926301731
+-1 6:0.0403405372343153 17:0.256456820933421 25:0.0504601069749715 34:0.0535823185189512 50:0.255274211543296 63:0.0290653326474122 76:0.0559357871034097 106:0.188248610126829 132:0.0407777176032649 137:0.165124219535535 142:0.0122043703030164 168:0.0499346580847089 169:0.0980171281818591 215:0.042832683027957 224:0.127882260789119 287:0.124815678592362 296:0.181887016497926 309:0.14843950350117 396:0.0682896999831126 465:0.114343191909004 479:0.0851544128760709 481:0.0774812815801238 489:0.0766056261544037 502:0.0464088490187623 534:0.102493055463169 591:0.0706975510276367 625:0.0747476701223959 636:0.0687627476247006 950:0.073262559042599 964:0.0805397917630904 982:0.0753084381365174 986:0.0601221646311652 1026:0.093026893427364 1041:0.0959202993746919 1045:0.069853674604001 1083:0.144156666959395 1176:0.151773575842418 1377:0.0641265374546136 1478:0.64614982972422 1523:0.10836254302977 1579:0.0843935690792861 1865:0.0797988147630314 1954:0.0952369676549331 2456:0.0949045650187903 2555:0.0907880468822514 4190:0.114845077549769 4603:0.120478711555949 5405:0.136109533010535 5442:0.143589491366628
+-1 17:0.23214075089325 18:0.228045010003475 50:0.404372974512436 76:0.354425470178977 83:0.11038335920326 94:0.255745244836244 111:0.266420375336069 402:0.324712954386934 430:0.331567145346789 481:0.490944010555115
+-1 6:0.0287843520470085 13:0.191306473440154 17:0.0313698354404016 20:0.0324741928010107 34:0.229396893370939 42:0.0688853582825757 48:0.0352184552230053 50:0.0546440623552307 58:0.0386175356194231 63:0.0124434649309755 79:0.156161278340693 94:0.0691191547740573 118:0.0376967736246393 132:0.0349155542182743 142:0.0074642017058837 145:0.0483093082863461 166:0.0429544822535582 186:0.0326681674452832 190:0.296154776230266 208:0.0431301323932348 215:0.0366750998946799 228:0.0435391080765012 283:0.0431553854815276 286:0.0645143930682911 322:0.0997841007823247 326:0.537038347089571 337:0.0440122290695482 367:0.0491361260909145 381:0.0553390829041586 387:0.0406376283765625 403:0.066675206521179 503:0.0781943306405225 508:0.0893318836123672 530:0.0473249333380828 535:0.0545918447758991 557:0.0541802044553283 626:0.0543333152182311 648:0.0840286702049354 681:0.0629944106102989 762:0.0766466513766579 851:0.065385036404217 881:0.0655928789208344 887:0.0727472981275262 906:0.0673620887985884 946:0.0818356370224281 1001:0.0674795302567839 1167:0.0735921948771467 1170:0.0766466513766579 1252:0.0873862489450226 1318:0.0762309483494385 1339:0.0694880484053111 1377:0.0549077713743225 1379:0.060763625710612 1480:0.16739222938626 2976:0.0777364492081007 3101:0.175614990663926 3203:0.122947211508094 3263:0.192038691719976 3401:0.0869759452695436 3666:0.0824317758220927 3979:0.101049578376886 4820:0.105593747824337 8394:0.434534533917903
+-1 6:0.0118162763900948 9:0.0225980513665139 13:0.0588999752806176 17:0.14487349790921 27:0.0172030814622686 41:0.0272048187855983 42:0.0176738482632922 52:0.0240840785306298 57:0.04410878597502 58:0.0198161258605984 63:0.00638521498741447 72:0.0735354718592068 75:0.00598692271280529 83:0.0229625393175063 91:0.047208654873096 96:0.0183027318788905 100:0.0182544372337236 105:0.0627605418235221 116:0.063254311607348 117:0.030497959446354 132:0.0179164984451746 134:0.0423138254278509 142:0.0038301657027097 144:0.0351251183672537 158:0.021202966402032 164:0.0690124602254015 172:0.0231660895051754 185:0.0344045173074164 186:0.0167632788407461 199:0.0276168649486869 203:0.0447897943812801 216:0.0257014529577816 226:0.0229055354789086 240:0.0265935249682213 278:0.0255027805778225 317:0.017606891622135 342:0.0551921195679072 348:0.0586955287002187 364:0.0273705464874872 372:0.0583214154523094 376:0.0753487371243366 389:0.0503516539321113 390:0.0269845007989169 434:0.0511237453092517 441:0.0416612532331502 448:0.0535044754131201 458:0.0311014326484535 459:0.0269845007989169 466:0.0545934969210673 475:0.0239371483326578 489:0.0336582001778617 499:0.0220032544752844 509:0.0274201211209333 510:0.0267065732066177 515:0.0213427186106246 523:0.10387893814047 537:0.0330383752018458 550:0.0240676208045674 570:0.0342712737399399 594:0.0282851710044277 603:0.031627155803674 609:0.0209193325886772 628:0.0321002858565184 629:0.0360799475728012 634:0.0331889447446224 647:0.186786859491739 660:0.0380346690920869 665:0.0365262305939668 666:0.0386070546493122 670:0.0421444846748793 673:0.0298687743387882 680:0.0814870396418228 712:0.0271271219677249 764:0.0273212732214557 781:0.0320121825184167 784:0.11603223453031 800:0.0260507903291745 804:0.0278280274297997 810:0.043470771073645 829:0.0219145311639048 869:0.0790987801116222 909:0.0260089017227615 936:0.0691320980717502 962:0.0400061546862234 968:0.0410050078942883 969:0.0330383752018458 1021:0.031627155803674 1026:0.0408732094244859 1126:0.0315027734042838 1145:0.0388071988255348 1166:0.195643506895973 1207:0.0336582001778617 1215:0.0346263127134901 1236:0.0325557667638839 1245:0.0288879760317882 1321:0.0342712737399399 1322:0.132755778978489 1431:0.0345062301127007 1437:0.040366455216142 1439:0.0348098396626995 1446:0.0308318686552735 1525:0.0414137715120878 1551:0.031627155803674 1553:0.0411389849495899 1599:0.0715910348623506 1600:0.0440299877777688 1603:0.0427805306490313 1859:0.0464914635053984 1885:0.0504594610560462 1887:0.101795397974838 1956:0.0440299877777688 2014:0.0513609923554382 2024:0.0287696465243984 2042:0.0379430813684427 2082:0.0513609923554382 2117:0.0548894313348244 2296:0.0431183056601422 2311:0.0438392630416544 2403:0.0888509058128947 2484:0.0473164557346262 2668:0.0464914635053984 2825:0.0398895278208524 2889:0.0446306645584843 2905:0.117105927792902 2911:0.12256043029837 2968:0.0901147290262059 3261:0.0574706349011336 3474:0.113031906136663 3823:0.0612802151491848 3868:0.0556619610682723 3961:0.0500437069873598 4211:0.0612802151491848 4777:0.0548894313348244 4951:0.0612802151491848 5235:0.0574706349011336 5735:0.0556619610682723 6279:0.274447156674122 6528:0.117105927792902 8389:0.66892857429484 8396:0.222976191431613
+-1 111:0.183386806587875 122:0.315630112354491 160:0.265789478683634 190:0.25142432179036 214:0.251233883179566 422:0.267401040221384 534:0.223511702840366 641:0.232033976280308 1506:0.411102751473544 3740:0.570494675421954
+-1 6:0.0300055176070732 17:0.109002297278367 42:0.059839828582378 63:0.0432379145295817 78:0.0768391024888329 83:0.0518307952746801 91:0.0799191487084908 92:0.0660269132856822 101:0.194419310706024 142:0.0129681128681116 162:0.162510013983666 164:0.350491901515873 166:0.298512069209679 168:0.0742833568953755 252:0.0721823997380494 287:0.0928386010302346 347:0.082164013168464 355:0.0601962391008846 366:0.126104904250145 384:0.108386327975242 410:0.38178173755138 459:0.091363684814585 506:0.0559548679488517 575:0.104390040455303 690:0.124995936229922 725:0.145411486014287 767:0.0956739694752984 824:0.111860794506474 829:0.0741978639159692 856:0.0750650205522978 1336:0.177332094460381 1500:0.114141735525277 1576:0.110868762729264 1954:0.141675580234144 2063:0.168098211435392 3944:0.173897214267344 4133:0.194583142831829 5627:0.213605336308069 6802:0.414963115603368
+-1 6:0.0489711457390496 10:0.330438213715005 17:0.186794503217782 42:0.117195444046594 58:0.0657004528645713 63:0.0105851042545334 80:0.0318855982542144 83:0.0507549337239668 91:0.0391301259654494 96:0.0303413942150249 109:0.0538919485999606 118:0.0320669750017185 132:0.0297011148868383 134:0.0350729188010702 142:0.00507957252562135 159:0.0294608270619546 164:0.0572027792163277 183:0.043081727950519 203:0.0742503806057343 219:0.0409464410781727 233:0.0579128125426086 243:0.0461753885072967 275:0.0658622449248307 278:0.169109163421324 314:0.0390787423845963 325:0.0439742731231601 327:0.0411842665790726 363:0.0457474290847278 367:0.0417979252741346 371:0.205272230768816 382:0.0430128211840276 390:0.0894672316518932 394:0.045621654780888 408:0.0288363171340682 422:0.0446557211729101 434:0.0423752508762251 453:0.0474996066531523 458:0.103116937393062 459:0.0447336158259466 466:0.0452512450769525 473:0.0862326286034176 478:0.0384036360663601 499:0.0364759437260895 505:0.105678138811412 506:0.0273967011235948 515:0.0707618778737816 534:0.0373262432810968 539:0.0454970468706962 546:0.0423098649076924 548:0.0554456470792563 550:0.0398981515700038 557:0.0460886992387438 559:0.350605295953839 571:0.038649738001164 572:0.0530682663059088 592:0.144718299952868 620:0.0696139503284352 631:0.0328663667225368 690:0.122401372108872 697:0.0524994283486071 712:0.134910139151046 726:0.090260020117699 731:0.0564347536117732 732:0.0535865538627451 747:0.0539693942899679 763:0.0567176438503368 771:0.0519536968956743 776:0.061068302815932 851:0.0556201532984784 855:0.157855246890986 863:0.0517546296988742 971:0.061068302815932 981:0.0581227666582437 1000:0.0594564346884598 1027:0.0511745342908814 1042:0.0557969557179913 1115:0.068887460429346 1150:0.0534364205687952 1168:0.0636771364127923 1169:0.0551880649418457 1184:0.129003476117807 1196:0.0614694308132025 1253:0.239728491793964 1297:0.0723657298481095 1332:0.0601764349520602 1341:0.0562494156386243 1404:0.0663202913310421 1423:0.0714794664848481 1439:0.0577060886187118 1455:0.0650219368297417 1507:0.0671227261477897 1748:0.233902333054589 1760:0.0746939455830024 1846:0.0643327196037022 1928:0.0706480596777819 2118:0.0729908095298501 2225:0.0758301254504432 2237:0.211944179033346 2386:0.090993076082225 2394:0.0754406260043255 2423:0.0632056217170184 2426:0.0746939455830024 2592:0.0663202913310421 2681:0.0750620998458887 2750:0.0805102493633422 2806:0.0779674443515296 2851:0.0877526321643613 2938:0.0784389590473036 3699:0.148671219893599 3842:0.0750620998458887 3895:0.0952720719978535 4051:0.0970663052814191 4158:0.0936894460800042 4795:0.0836492830638572 6866:0.101587412071933
+-1 6:0.0359511616496771 17:0.26120257353714 33:0.0994710150615068 53:0.0922908886984862 58:0.120581597885085 63:0.0129513950984258 72:0.0372887581575153 80:0.0390135959939312 91:0.0478776315701055 96:0.0371241864857006 98:0.0388672940475378 111:0.0374717102731527 140:0.0846826731422499 148:0.0526704012873228 160:0.217236703647228 164:0.0699904107266009 168:0.044501364825594 179:0.0326628003058216 199:0.0280082135084964 215:0.0381721418949664 220:0.0961353962232882 233:0.141718342770061 242:0.0419853698051694 275:0.080585692457913 289:0.0521313178202981 291:0.048227782850014 309:0.044096029713001 323:0.0512574585193303 337:0.0458087655652239 341:0.050063967933038 347:0.0492224756441016 371:0.167440439539275 390:0.0547337767122038 394:0.111640672005325 409:0.0612012825048097 423:0.0453973869866834 444:0.078714243082391 483:0.0581769238136872 515:0.0432903170442275 528:0.0626919244383225 546:0.0517681983855626 559:0.428982804732787 580:0.054216291073026 609:0.0424315457013362 620:0.0851760883393868 653:0.0612097887712249 684:0.0560776272120115 690:0.074882046158993 730:0.115195941171044 740:0.0857965609465574 742:0.0614957189822336 757:0.0569291092847906 800:0.052839893229031 855:0.09657182497608 882:0.0449960512059106 917:0.0728914556189267 963:0.0508373513406997 969:0.0670131000275692 1007:0.069165262581304 1058:0.0672160726393558 1074:0.0783082823891304 1227:0.0654736770526062 1281:0.07752524998559 1297:0.0885430257758126 1375:0.0752108685746932 1377:0.0571490533374404 1473:0.0848744179905238 1579:0.0752108685746932 1698:0.0867735160128533 1963:0.0857965609465574 2024:0.0583546614662093 2095:0.0889209866222831 2213:0.166344299855139 2244:0.0829048176514997 2339:0.375114350017491 2520:0.111334499049199 2734:0.0992079499768483 2741:0.0937785875043728 2864:0.0885430257758126 2979:0.0927818839999871 3095:0.0948396377552175 3405:0.109903982177199 3541:0.11290145299247 3565:0.206475807153279 4371:0.11290145299247 4495:0.11290145299247 5790:0.132695455450586 6282:0.111334499049199
+-1 6:0.0247498696344802 10:0.278337464108499 17:0.0899098853359721 85:0.0505580794273146 96:0.102229661979835 98:0.10702969434983 109:0.0907894286229007 111:0.0515933228126926 142:0.0064180016574417 220:0.0661825213596917 224:0.0784587786897629 277:0.0747121313922565 287:0.0765773582924021 290:0.0857903645314129 331:0.0644924548158715 347:0.0677724890866681 473:0.145272369675659 479:0.104488475462874 493:0.0736503687259231 570:0.0957108685532692 591:0.086749225041188 597:0.0737727278207058 606:0.212442131072436 678:0.0892797774992237 690:0.103102141647479 800:0.145506337921642 855:0.132965944289218 882:0.061953291649628 896:0.104488475462874 1018:0.089524497476393 1160:0.104488475462874 1245:0.080676700192974 1255:0.129838721086942 1283:0.10222294852168 1330:0.108951646194975 1332:0.101376630234979 1343:0.573752259737916 1405:0.116860245075653 1486:0.112733145504628 1507:0.226157491531999 1560:0.125833650800219 1760:0.251667301600439 1848:0.142144205506184 2010:0.120905179847146 2181:0.147833053755339 2710:0.160500727940116 2803:0.142144205506184
+-1 13:0.17869607240078 17:0.0976734047774253 34:0.214275675721715 75:0.0726546705290307 83:0.0232219429003007 101:0.348425611299592 106:0.313669223150026 114:0.125863256729664 137:0.0733701893895454 142:0.0395090306771034 181:0.0756482694498846 234:0.0642924722823371 331:0.0700612354334766 373:0.0639796499632465 490:0.0927490096976507 1418:0.113771048291767 2966:0.311647248230461 6277:0.725735975700873
+-1 6:0.0388798719932849 10:0.163966393590581 17:0.211860802769049 40:0.0303661139777955 58:0.097803454924522 65:0.0347692687165877 67:0.0274910739586395 78:0.0746736277298998 83:0.0125925257646281 91:0.155333744560998 96:0.0301113417241659 97:0.0303255617605703 111:0.0303932174637267 164:0.0567690601278273 181:0.0410216658522947 185:0.0283008619793374 204:0.0291753993357942 242:0.0340542362620092 243:0.0458252805634361 275:0.0326814343071654 278:0.0839134776137896 308:0.035909026596065 347:0.0399242360556472 363:0.0454005659861915 371:0.339526382305621 414:0.0718180531921301 416:0.0472831032600074 420:0.0494191652463649 439:0.0523806460411802 454:0.0484916197604871 465:0.0413261290891786 466:0.0898162882232588 480:0.0357459063909445 485:0.0336325438749612 499:0.0723987565280593 507:0.0259860831801707 513:0.0363681768532311 515:0.0351126759469412 521:0.0479240911118331 530:0.0399519882206847 534:0.0740864614691889 597:0.0434589291270735 599:0.0455688320735764 607:0.0476738978347583 662:0.0506618959192843 667:0.0468101845323984 690:0.121473308607945 697:0.104202741385263 700:0.0600923304011865 754:0.0592395798828567 761:0.0494191652463649 776:0.0606052748128094 778:0.0464435659637432 819:0.0488116729753297 827:0.0830244012533104 855:0.156658367390819 863:0.102724438410859 867:0.0427208405636689 882:0.0364961929770802 936:0.113734946396057 960:0.0560068577956682 966:0.0485444313561981 991:0.0516262854678402 1015:0.0607366543039726 1021:0.0520324562731668 1027:0.0507865221580593 1034:0.0612755118805464 1036:0.0549394954536703 1037:0.108708340623334 1059:0.0445504052378259 1196:0.0610033614041949 1253:0.118955419224809 1297:0.07181704324899 1321:0.0563825139183714 1323:0.0783291836954097 1462:0.0597201692098327 1507:0.0666137927008258 1508:0.072437383493355 1730:0.0686011688083728 1735:0.0798998099328251 1760:0.148255212284363 1811:0.0783291836954097 1816:0.0534069146357498 1906:0.0764869612979602 1928:0.140224793365199 2148:0.155688448831505 2185:0.0607366543039726 2386:0.180606308927499 2571:0.064705555760202 2587:0.0793554522899792 2710:0.189099412925205 2803:0.167472049235614 2880:0.0730879959652212 2938:0.155688448831505 3265:0.0837360246178072 3985:0.0903031544637493 4008:0.0929790802251869 4610:0.0880755031982068 5382:0.430515907019856 6157:0.207585524139964 6515:0.103792762069982
+-1 6:0.0290198667042483 17:0.197665653878526 91:0.347822484802197 96:0.0449501028847157 118:0.0475065125654334 132:0.0440015432544962 142:0.00376263704329032 144:0.0431322956292352 159:0.0436455621689231 164:0.0847446492683689 199:0.0678248978901625 203:0.0550001463974306 220:0.116401094816291 256:0.0493722496861191 275:0.195146911483945 284:0.0440583373202091 323:0.0620627211572812 341:0.0606176383224979 371:0.304106259160108 377:0.0558387837480734 390:0.0662718601370636 426:0.0653116535443268 454:0.144776231975813 466:0.0670387163969955 495:0.0799544611815673 506:0.0405876053512915 515:0.0524160766674175 550:0.0591082270403235 613:0.0670989473250321 629:0.0886095784063287 662:0.0756278964506908 690:0.0906674596185766 714:0.0750799818650701 719:0.078088593749467 726:0.0668591094053609 763:0.0840259319787228 855:0.116929524371169 867:0.0637735175087633 917:0.0882572451991499 966:0.0724669529484928 1021:0.077673864029322 1058:0.0813854704077981 1059:0.066504685089768 1122:0.0886095784063287 1143:0.0861075902681694 1146:0.0830614239829693 1198:0.0864235700221204 1281:0.187735721258583 1297:0.107208224478665 1323:0.116929524371169 1551:0.077673864029322 1787:0.104269337031679 1858:0.0934102242325509 2152:0.233859048742338 2185:0.0906674596185766 2321:0.123924558420296 2554:0.110126558174182 2587:0.118461534446835 2659:0.112934911995861 2678:0.138798837346201 2710:0.141143462557923 2993:0.131478795154624 3117:0.378415950020133 3273:0.121932266415753 3295:0.136701498625436 4037:0.154941462804037 4450:0.138798837346201
+-1 6:0.0316804008267904 17:0.0690520293108813 34:0.0504953908188955 37:0.0299790098964868 42:0.0379080230453871 51:0.0430326698149771 52:0.0516571032162951 53:0.195185615983344 59:0.0393436888959654 63:0.0410862772985417 69:0.0642822659060882 75:0.0385234275162377 83:0.0492515527270056 96:0.0785137873226574 100:0.0391533081549533 105:0.201919358224467 142:0.00492911359981057 149:0.0705458016606369 158:0.0454775059186276 160:0.0574291249297921 164:0.0740112140171801 173:0.0473588044319596 194:0.0502004441696739 278:0.0547000279431764 284:0.038478075734561 290:0.0658881806386219 296:0.0571361115433212 323:0.108404185461054 337:0.048440383717052 339:0.0492827307951423 342:0.0591898297794441 359:0.0705458016606369 371:0.0885297719874793 384:0.0686618179902391 388:0.0658881806386219 473:0.111571179202598 475:0.0513419577398934 485:0.0438475711429261 489:0.0721923040755447 515:0.0457772555750153 534:0.0482941671328104 546:0.054742173538089 554:0.0804325576575839 559:0.272176183918592 574:0.0474417881188133 609:0.0448691496074875 620:0.0900692771736611 641:0.100271149014287 655:0.0959535098489192 680:0.0873893599917999 697:0.0679258329843403 720:0.0630828214279256 740:0.0907253946395306 742:0.0650285199284399 756:0.0841279488242761 871:0.0727777145831972 1043:0.0708628630208925 1056:0.0622183770486243 1207:0.0721923040755447 1231:0.100287977372099 1607:0.0819789140948445 1636:0.184965911248379 1645:0.0724241081682156 2400:0.220324815833993 2730:0.101487421850261 3151:0.216457489514974 4522:0.125588217783472 5353:0.116217736998728 6549:0.442102691583509 8390:0.478253885483325
+-1 6:0.0519277195493442 10:0.238900924085336 13:0.0627494277228425 37:0.0223358861636872 46:0.0395283289013219 53:0.290846409834504 57:0.0352436617879956 58:0.0633336712712793 59:0.117252192046915 70:0.0543121192090319 78:0.0362667785733833 79:0.0640270469690314 83:0.0122316367228676 84:0.027705577361651 98:0.0306216927074996 109:0.155851663480959 111:0.0295221786164357 116:0.0505412587456925 118:0.0309117999172626 142:0.00244829344783561 148:0.0829930090336846 151:0.0745627819999295 160:0.0855752342282878 162:0.0255673413761333 179:0.0257334671332659 180:0.0363781528232133 181:0.0398460264327241 183:0.0415297593372937 203:0.0715755979147409 218:0.0267776183308041 242:0.0661565526435755 264:0.0388610872023092 275:0.0317448174813652 286:0.0264512824117017 291:0.037996376711764 293:0.134042226627803 296:0.0425693072477657 299:0.0390797041294808 323:0.0403833141001945 325:0.0423901516191451 342:0.0440994317212797 351:0.0335012606976474 376:0.421434356911713 377:0.0363334881394696 384:0.0511565443861278 391:0.0488534571761735 414:0.0348799102423619 430:0.0367411256587341 439:0.0508794697474062 454:0.0471018990232912 483:0.0916696635228303 493:0.042143425198389 506:0.0264097671663829 507:0.0252413483403704 539:0.0438580692322213 541:0.0486788107714282 549:0.0504084089098089 567:0.0512267491403853 613:0.0436603135520312 631:0.031682394490905 639:0.0543121192090319 688:0.524050834267073 713:0.0472046991299638 754:0.0575418334880649 772:0.0437390538884434 782:0.0537869359693104 810:0.0694677543041233 827:0.0403225029769901 925:0.0697588394855317 944:0.0516561612428993 950:0.0514396757782466 994:0.0540468660053291 1067:0.150634963688421 1089:0.0770812053540827 1112:0.0568717144668372 1200:0.0673483040295867 1232:0.0534482828113744 1267:0.0633799169334652 1323:0.228253045735811 1405:0.133737035732661 1424:0.0877959705488903 1598:0.0493919860498678 1863:0.0568717144668372 2663:0.153146378880404 2955:0.0806359159588282 2961:0.0806359159588282 3136:0.0770812053540827 3608:0.0865881212477644 4023:0.0935696057207254 6098:0.0979278449530028 6483:0.0760843485786037
+-1 6:0.00555496424032105 17:0.0908088779338862 27:0.0161747236085877 37:0.02628317880915 42:0.0332346982586655 53:0.299465269575651 58:0.0372631332928535 83:0.028786527004991 92:0.0366709696866835 101:0.0539896861341884 132:0.0673819771231089 142:0.00432144939281721 160:0.0503492264952895 216:0.0483301667603002 258:0.105354376241654 271:0.183923054790987 287:0.0515620275841683 306:0.0435902426432808 323:0.0475200248435661 335:0.147114721010682 347:0.0456334225893667 388:0.115530889052971 389:0.0473417560321055 411:0.0416174633240756 422:0.101309017993205 426:0.0500076590443968 444:0.145949600111644 448:0.0503061096076196 463:0.0682601844869941 479:0.633199420398531 502:0.0383434898602771 534:0.0423404320080424 546:0.0479935241514337 554:0.0705167816512607 570:0.0644452427518386 574:0.0415931348119239 629:0.0678463542804657 643:0.0451961275651414 645:0.070679797211884 670:0.0792503822919918 676:0.111093828001508 694:0.0817443908186521 715:0.137084896575072 720:0.0553059317536082 759:0.0820869178093245 810:0.0817443908186521 814:0.0616663322922843 841:0.0855748774910316 873:0.0642290432456625 895:0.0577654445264856 913:0.0579776309179394 1034:0.0700379419690666 1039:0.0810815990208572 1124:0.0617573284409341 1168:0.0722311496618808 1260:0.148326150058264 1263:0.0754518826400133 1288:0.072974800055822 1533:0.0948862374232125 1603:0.0804464317156753 1614:0.0701958895962677 1704:0.084321420053616 1795:0.07101115394949 1899:0.0798366780214283 1932:0.0716962944457567 2454:0.106275137086472 2484:0.0889759890196587 2559:0.0919742098762311 2660:0.104669252164612 2959:0.0965815173792063 2967:0.0933607844010738 3030:0.0957103197168757 3140:0.112455159074654 3248:0.0907033232663879 3574:0.103216552548517 3888:0.115234069534208 5380:0.12301997644425 6123:0.12301997644425
+-1 6:0.0128999362613819 13:0.0285785057767664 17:0.0468621373458217 27:0.0375615205732073 34:0.0342686806383709 37:0.061035736094125 41:0.0593994955349627 42:0.0771788027168768 53:0.132462655122851 59:0.0534011634743796 81:0.0261807461979286 83:0.0222830335465532 85:0.0263514924216666 96:0.0266416781792915 98:0.0557851922284272 101:0.0417922588260617 127:0.171059835047356 142:0.0044601884658603 144:0.025564273840158 145:0.0360836677689535 158:0.0308632946746477 160:0.194871285244486 162:0.0465774072995025 166:0.0641679759783634 168:0.0319358119989884 169:0.156717633521513 179:0.0468800475677678 186:0.0244008316933262 203:0.0325982835654978 254:0.04149885647031 275:0.0289156246581461 286:0.0240938652235872 293:0.12209598356604 306:0.0337422725205514 309:0.0316449286518575 377:0.0330953392999922 382:0.113303996327316 384:0.0465973205593446 388:0.178859969872998 402:0.1310992835846 404:0.0361098572539371 409:0.0219601427937158 444:0.169464685762367 448:0.0389408811903157 459:0.0392789661603871 534:0.0327748208961499 540:0.0486089384729957 626:0.0405831787840894 641:0.0340244914148412 653:0.0439263899962766 656:0.0424466793187644 673:0.0434773496551986 680:0.0593067608782621 687:0.0483842010467995 695:0.0424466793187644 706:0.0437748030098815 713:0.0429976755400783 824:0.0480910590571147 841:0.0662416784610462 867:0.0377982122574318 942:0.055634963521174 976:0.0630172658172809 1003:0.0454438638829265 1007:0.0496355298610261 1014:0.316385984499052 1021:0.0460368710104751 1029:0.0662416784610462 1082:0.058938032177196 1102:0.0515093874042438 1110:0.070211498413072 1145:0.0564882285874555 1146:0.049230048094515 1194:0.593183775289125 1225:0.115067156148225 1227:0.0469863126542119 1263:0.0584056851222972 1335:0.046220745248535 1389:0.0548392671368875 1404:0.0582334432583037 1424:0.0399856658867169 1512:0.293797610422552 1658:0.0627635279058388 1721:0.0563416632475038 1796:0.0697487583927598 1808:0.0432350750613165 1939:0.058938032177196 1977:0.0798977209928594 2279:0.0747616824830841 2307:0.0602823873570635 2409:0.0615707597123664 2559:0.213585793493023 2749:0.0798977209928594 3987:0.0779267570731533
+-1 6:0.0124417023631425 13:0.137816674304943 17:0.112993729802926 29:0.0753097290468914 31:0.0158070358451537 33:0.0229494441230117 34:0.0661027645782375 37:0.0196225378330428 42:0.124062071921718 48:0.0507425628177763 52:0.0676235449874505 53:0.03193932310743 58:0.0278199698798299 63:0.00896423901804713 72:0.051618430025465 78:0.0637222297269555 79:0.140622711617593 81:0.050501497874023 97:0.0776343324351024 100:0.0256275064857759 118:0.0543133107787834 142:0.00107543820859567 144:0.024656175023228 146:0.0744812493938484 148:0.036455537239645 158:0.0893008892076795 160:0.0375898063526591 165:0.0402668474274248 166:0.0309442946922963 185:0.0483006941899545 186:0.0470681217627938 199:0.0387714710964496 206:0.0395554123612681 216:0.288659307952844 219:0.069352870965994 229:0.0217185108034102 232:0.0736223357845333 242:0.0290599497069148 252:0.0598604526779759 271:0.137313569534768 274:0.0896394464973954 275:0.0278884785437274 284:0.0251855381298831 287:0.115485784010248 306:0.0325436733368614 312:0.0375898063526591 322:0.179710501571595 323:0.0354775764412253 333:0.167355581264717 335:0.164749716907797 337:0.0317062926833469 341:0.0346515082995304 342:0.0387422626093671 367:0.0353975344603096 377:0.0319197205966356 405:0.0394410470297494 409:0.0211800705798413 411:0.0310708325854272 419:0.0504514321102638 426:0.112004395130353 429:0.0473285453433828 430:0.0322778385860145 444:0.10896328677379 480:0.0305035248465633 484:0.0458375413722869 489:0.141758806198224 504:0.0440549377677263 532:0.0959044444524645 561:0.0367511189154386 570:0.048113632800662 580:0.150102066428254 598:0.0438295986279524 603:0.0444015408477189 625:0.0461068854189739 628:0.0450657707739905 643:0.0337425974800763 656:0.0409388806027522 684:0.0388138304849116 715:0.0511725310875764 730:0.0398661280394282 774:0.0930464921214301 810:0.061028858538208 814:0.0460389493682204 881:0.0945058707988163 886:0.0357211369695238 895:0.215633091585728 900:0.121068060747393 906:0.0970549389731954 920:0.272408216934475 930:0.036310576620667 963:0.0351868014989259 1000:0.0503520493414127 1003:0.0438295986279524 1023:0.0585403384198307 1026:0.057382127217012 1034:0.104578078322705 1039:0.121068060747393 1058:0.046523246060715 1126:0.0442269197018421 1170:0.110432087314032 1201:0.105782513293896 1260:0.0553687876242471 1320:0.175016791271692 1332:0.0509617981261927 1379:0.0437739542398002 1386:0.059383631910424 1404:0.112329728445209 1424:0.0385652877405227 1432:0.0493125569438769 1476:0.0533970845751988 1497:0.0503520493414127 1503:0.0561648642226045 1509:0.0524069599544534 1551:0.0444015408477189 1613:0.0475584370956209 1645:0.0474046610432501 1679:0.0598299343949931 1724:0.0638886294279288 1751:0.0564995723141452 1759:0.0629528211618741 1873:0.0549165723025992 1979:0.0612845828888322 1990:0.0552160436570162 2141:0.13733250654843 2227:0.0549165723025992 2402:0.0572000552575103 2403:0.0623691417005284 2472:0.0702566400141618 2554:0.0629528211618741 2649:0.0686662532742148 2745:0.0686662532742148 2907:0.0618139459954872 2979:0.128436971986392 2987:0.0708403194755075 3095:0.0656427492761849 3323:0.0751586285376908 3541:0.0781441383277952 3576:0.0664278367334641 3776:0.0708403194755075 3810:0.0743153350470975 3969:0.0629528211618741 4498:0.0822028333607309 4512:0.0681819565817202 4522:0.0822028333607309 4684:0.0668416734193998 4734:0.0885708439469639 5094:0.0793430624710101 5823:0.0760694548953536 6845:0.0885708439469639 6875:0.0885708439469639 7641:0.0918444515226204 7982:0.0885708439469639
+-1 6:0.00883325263010384 58:0.0592541474481184 83:0.0228875159566911 94:0.0530276793013609 96:0.16418639764671 100:0.0545843886458248 190:0.0757358822304312 201:0.106012895183932 243:0.0832896322564294 338:0.231480280978749 359:0.295047823795828 363:0.0825176932629806 404:0.0741788529256298 408:0.0520139911621271 413:0.229128083833325 439:0.285612964665958 465:0.0751122099439105 513:0.066100895372571 731:0.10179513430762 808:0.0921934037082982 887:0.111622325468449 963:0.0749448663406595 1133:0.103002913356977 1140:0.179438415055625 1151:0.565942357158049 1216:0.0945714700511556 1309:0.104274049957614 1335:0.0949491946144499 1393:0.101131069875014 1453:0.124256913297717 2063:0.14845809238039 2124:0.123421077518311 2369:0.115148968850316 2854:0.156613114658425 2864:0.130530900158311 3391:0.171848599384396 4095:0.158285283541218 7644:0.19562079672698
+-1 6:0.0221476826239598 17:0.120685217816475 34:0.235341275287565 53:0.284278618295444 72:0.045943415634897 79:0.0500649685344252 83:0.05738604573949 96:0.0457406471573849 98:0.0478883270257122 132:0.0447754050651725 151:0.0583032251428251 164:0.0862350662600785 190:0.0632977210519514 203:0.0559674423086763 240:0.0664602994947143 254:0.284994742218433 278:0.0637344029110643 286:0.0413663501387958 293:0.0698748437948015 331:0.0577117553343423 341:0.0616837299156917 355:0.177728272009294 371:0.309454622034349 398:0.172267119734457 402:0.0562705362690913 454:0.0736612167558918 465:0.062776474936406 468:0.395354028634178 515:0.0533379261526455 546:0.0637835093636217 680:0.101822775769756 806:0.0792498388268298 810:0.108638492575655 913:0.0770524113392186 1034:0.0930805938171411 1098:0.082816809011725 1117:0.176212434689013 1126:0.0787290800247326 1260:0.0985629056043035 1440:0.091475286705731 1609:0.103151540678116 1636:0.107757640677649 2394:0.113729218602859 2468:0.109559396689892 2688:0.127199245768957 3526:0.127199245768957 3563:0.127199245768957 3786:0.137175047308178 3918:0.153146356369911 5482:0.128357069563631 7181:0.163493845433935 7434:0.306292712739822
+-1 6:0.0278115962038282 17:0.303097042040125 33:0.0513001078487708 34:0.0738815052292533 37:0.0438632980261301 53:0.214186981337595 58:0.0310937260078075 72:0.028846352585893 79:0.0314341394645615 83:0.0120102673113268 91:0.222227037234341 96:0.0287190409588669 98:0.0300674981831995 111:0.0289878832105311 119:0.387984678705968 132:0.0281129973433034 160:0.126039727339554 164:0.0541441486713627 179:0.0252677402150077 181:0.0391248889738949 183:0.0815562990165446 203:0.03514010771416 214:0.0397124449661417 215:0.0590594655584697 218:0.0525859885149115 220:0.0371848738395514 226:0.0359413565120439 258:0.0439557790650113 275:0.0311702965301191 278:0.0400167256355982 296:0.0417988835744139 306:0.0727465965200496 323:0.0793049055084924 325:0.208114851613353 330:0.0460995209843861 341:0.154916703285727 359:0.0516089679648727 371:0.0647654439936527 377:0.0356759209576695 391:0.047969302315148 429:0.0528980019608935 448:0.0419772641330204 461:0.0507212827572247 465:0.0394152743127694 466:0.0428316626320744 502:0.127980860710632 507:0.0247845278383229 515:0.0334891214059162 516:0.129965713117238 546:0.0400475579545528 559:0.0663716886807251 575:0.0483786630656188 593:0.0446457557153343 597:0.0414494570538267 615:0.0615452162087362 620:0.0658916949110017 626:0.0437476185207894 629:0.16984046408921 648:0.0676574619857038 651:0.0599730537001837 653:0.0473515138569164 666:0.0605788027225375 673:0.0468674599673373 680:0.0639311564135795 687:0.0521569190301674 697:0.0496922858051829 706:0.0471881070008687 719:0.0498915325747523 723:0.0475727076989552 739:0.0947030277138328 767:0.0443392752144549 774:0.0519979378933292 848:0.0512315418908766 876:0.0447346954158225 882:0.139234667196552 883:0.054050973710018 969:0.0518409195367472 985:0.0593948484359476 1080:0.0468674599673373 1159:0.0471341012919502 1162:0.053775475746604 1185:0.0729503253112255 1198:0.0552168268366907 1236:0.051083652720589 1244:0.0654291593805879 1386:0.0663716886807251 1438:0.192403961881123 1497:0.0562773012665485 1508:0.0690879935725093 1609:0.0647654439936527 1784:0.135314923971408 1799:0.0798642034207827 1858:0.0596806655279926 1866:0.0737985279094701 1874:0.0717754913730652 1904:0.0647654439936527 1945:0.0707000630022253 2024:0.1354284151197 2101:0.0850210405797125 2166:0.0873398654555097 2167:0.174679730911019 2261:0.0703608875595874 2389:0.0742448307314391 2426:0.0707000630022253 2877:0.0756861818215258 2967:0.0779036649233606 3035:0.0725465350369398 3070:0.0725465350369398 3083:0.0873398654555097 3270:0.0901778777386423 3332:0.177359749543268 3716:0.0850210405797125 3960:0.0861276795805463 4083:0.192311073612722 5784:0.088679874771634
+-1 6:0.0152391543723899 12:0.0342434785026182 17:0.359839432533598 34:0.121448440629036 41:0.0233902468910962 42:0.0455870348910049 48:0.0155379409798763 50:0.0241082753459792 53:0.0195603568216539 58:0.0681502905727575 63:0.00548990074829744 79:0.0516722988878015 83:0.0329046769321683 85:0.062259913974741 96:0.0314727637631182 98:0.0329505176939293 101:0.0246853422728851 108:0.0235115224338344 111:0.01588369196563 132:0.0154043048534631 135:0.0231403092779175 142:0.00065862244572359 144:0.0150999938129339 145:0.0639403837714242 146:0.364911882387978 148:0.0223261875066683 149:0.0282787447384326 158:0.0364599097590528 164:0.059335755770174 166:0.0189509791343987 175:0.0491715694324772 179:0.0276905353404306 185:0.0147902134605556 186:0.0864767158817268 190:0.021776629160462 199:0.0118722586354777 215:0.0161805943499294 216:0.176781425343852 218:0.0144070478898502 242:0.0177969640613435 254:0.0245120389440188 258:0.0240852376045272 271:0.252281716258122 277:0.0460022505407748 278:0.0219268629879831 279:0.0287565518553944 287:0.0707260806833883 306:0.0398609488757931 331:0.0198548616479225 333:0.10249230625904 335:0.100896416562858 340:0.0581572100412942 341:0.0212213597785872 342:0.071179888017835 355:0.0305723697990608 364:0.0235327367894641 367:0.0216782429083281 368:0.0309589874831651 369:0.0227119173623003 377:0.0195483518050025 380:0.0312101465728786 389:0.0216457537565108 398:0.0197553040912759 403:0.0294162653412012 409:0.0129711495968784 410:0.0323164498792783 411:0.0761138950969745 413:0.0658820781502785 422:0.0231604215875272 426:0.0228646667200195 463:0.187260879437272 468:0.0340039022163016 473:0.0223620174593371 479:0.0643363391900893 484:0.0561438739358054 495:0.0279909022124899 504:0.0539604611903637 506:0.0142091344952875 508:0.0197060536358143 515:0.0367002229688791 523:0.0297711228911252 526:0.0304822950054682 530:0.0208791673691405 531:0.0285789903917688 543:0.0281128104601025 546:0.0219437573246031 569:0.0712137322430526 570:0.0294658663366616 574:0.019017350211718 575:0.0530174470665815 585:0.031470696935561 591:0.0267069049577161 597:0.0454238347246005 603:0.0815774942528992 626:0.0239711776043608 641:0.0200971720559988 643:0.0206647224357172 645:0.0323164498792783 648:0.0741447919844542 653:0.025945904871601 670:0.0362351210427947 671:0.0310220159182697 676:0.101589372525938 694:0.0373754398429278 695:0.0752156621894061 709:0.0221497499702192 715:0.0313392041582534 717:0.025738745783528 726:0.0234064086696774 730:0.0488298194001208 759:0.0375320511627535 774:0.0854756336308355 810:0.149501759371711 814:0.0563905674711657 864:0.0757124899710163 886:0.0437528486655069 895:0.0264117069719115 900:0.0370723959922271 914:0.0650899184359304 920:0.166828893225645 921:0.034396620784312 930:0.0444748207537952 936:0.029719309191902 942:0.0328617824314206 951:0.0331092253633953 952:0.0236613972519825 970:0.0417561572939756 974:0.0326228249491834 1003:0.0268422278590238 1023:0.0358514143866088 1034:0.12809191483705 1039:0.0370723959922271 1094:0.026159411168018 1099:0.035976983737769 1102:0.0304249373940867 1126:0.0541711123670883 1164:0.0538909457301239 1182:0.038024178664352 1198:0.03025564379516 1201:0.0323917901854126 1216:0.0543849961685995 1236:0.0279909022124899 1245:0.0248373972601243 1260:0.0678181712912195 1269:0.025945904871601 1288:0.033365778645129 1372:0.0354877365463759 1374:0.0339090856456097 1382:0.0332792072157859 1393:0.0290786050206471 1412:0.0318807511106271 1423:0.0741447919844542 1439:0.0299289162837962 1493:0.0339090856456097 1497:0.0308367227604281 1503:0.103189862352936 1506:0.0356068661215263 1531:0.0347064011366903 1533:0.173536793079818 1636:0.0370723959922271 1667:0.0406818950115714 1730:0.0717028287732175 1735:0.0417561572939756 1748:0.040437346746489 1776:0.0588325306824025 1792:0.0599646363153884 1849:0.0314046404178321 1854:0.0423625317877162 1865:0.0301450238464634 1945:0.0387395662705724 1952:0.0356068661215263 1979:0.0750641023255071 2013:0.0799451610606085 2141:0.0420527514353379 2190:0.0782536551731737 2194:0.0774791325411447 2245:0.143571661560051 2274:0.0430267398950543 2402:0.0350305949594449 2454:0.0971829370356754 2464:0.0433841982699545 2554:0.0771074352899837 2577:0.036503189108949 2595:0.0445818073200389 2711:0.098824575890003 2728:0.0465866379189383 2729:0.0465866379189383 2807:0.103495075530149 2838:0.0763925185401834 2889:0.0383726968065408 2910:0.0835123145879513 2977:0.0450315704939537 3011:0.0433841982699545 3044:0.041198346832604 3206:0.0433841982699545 3283:0.0417561572939756 3496:0.0430267398950543 3554:0.045512375636534 3753:0.047857220520017 3803:0.0417561572939756 3825:0.0417561572939756 3842:0.0389305072679124 3893:0.0526877011449796 3997:0.0450315704939537 4268:0.043760987892875 4398:0.0910247512730681 4573:0.0957144410400339 4892:0.0526877011449796 5005:0.043760987892875 5384:0.0562475991688636 5743:0.0943860248253576 5766:0.0542427685699642 5949:0.0542427685699642 5968:0.112495198337727 6370:0.0562475991688636 6547:0.0590732491949268 7003:0.0562475991688636 7032:0.0562475991688636 8483:0.0562475991688636
+-1 17:0.21719967570196 91:0.318496281551414 111:0.249272990204113 242:0.279299199312461 280:0.417562480514829 327:0.335215781708414 647:0.360048508361177 1828:0.543025210572967
+-1 6:0.0183856420593677 12:0.0991532716157749 13:0.048877839439518 17:0.0601112609649762 33:0.0203480321000338 34:0.0293048748442287 42:0.0219998271707902 46:0.0307900706582531 65:0.0263068902860405 70:0.0846114184194433 79:0.0997460482145422 86:0.0285653959841466 91:0.088145679936385 94:0.0220744944518201 98:0.0715570914591102 100:0.0454450505921849 109:0.202330997547117 119:0.461678836226044 132:0.0223018701658894 142:0.000953532951509059 145:0.0308569617560911 157:0.037263750111257 161:0.0358848908143618 162:0.0398306869728812 168:0.0273099213697555 179:0.0200447449547657 183:0.0323490585095987 199:0.0171882842609906 203:0.0278764341733643 204:0.0220744944518201 212:0.0832656704730809 215:0.070277273365813 226:0.0285120599816966 227:0.130686585228292 232:0.0326384735898901 242:0.0257658872385826 247:0.0541109913559386 252:0.238837630549273 258:0.0348698527509343 275:0.0494544141101749 288:0.190958271271064 295:0.124885612049706 297:0.0359217806920246 306:0.0288547167487806 325:0.0330192497341797 334:0.0502468407006196 345:0.0269846794297289 371:0.0513780336384757 376:0.0468958194496778 377:0.0283014915674227 384:0.0398477158043547 393:0.230202903748983 394:0.0685124599229951 411:0.0275488284349818 424:0.113618328844115 427:0.0390611329432518 429:0.0839273278021933 438:0.16400817681449 459:0.0671788447000776 461:0.0804737715360285 499:0.0273889301548751 504:0.0390611329432518 509:0.0682633365044289 571:0.0290211812631172 576:0.0359959675726021 634:0.0413125108626788 644:0.0350377330019172 651:0.0475762595051788 663:0.0344141263029689 670:0.0524600735073103 700:0.0454666549297403 701:0.0528481740586735 719:0.0395786499842717 756:0.0488234464812687 759:0.0543377283203447 770:0.0495100630721942 776:0.0458547554811035 785:0.103451954878227 812:0.0823743509166905 834:0.0370548529947555 846:0.0532518026935954 930:0.0321946263572989 966:0.0367293612096153 990:0.0495100630721942 1023:0.0519045550266356 1032:0.0485613701802049 1044:0.0536722539590102 1048:0.0499456431008286 1059:0.0337074280262616 1093:0.0933576707628804 1116:0.0428783093919318 1145:0.0966118588804976 1253:0.0900032493632532 1268:0.0497983504075227 1305:0.0334438300646413 1347:0.0555547887577749 1362:0.0651952975532337 1363:0.0416328352365405 1400:0.0560859308789218 1438:0.20351052693415 1440:0.0455622894874834 1466:0.0449111364490656 1609:0.0513780336384757 1667:0.0588979736042056 1722:0.0524600735073103 1724:0.0566465956847786 1776:0.0425879477617151 1842:0.0563623692753656 1929:0.0508776317335375 1969:0.0502468407006196 2024:0.0358115132523826 2045:0.0618005045620505 2219:0.0528481740586735 2320:0.0604532568950907 2520:0.136649130950969 2644:0.0600413886759619 2663:0.119291352755 2786:0.0628102836364088 2844:0.0692861851729589 2877:0.0600413886759619 2944:0.0604532568950907 2949:0.0548070859844805 3191:0.0633557878529356 3570:0.202340026417982 3714:0.0666390949550701 3917:0.0762796037505289 4043:0.0785309816699559 4044:0.0744400940502307 4677:0.0744400940502307 4706:0.228838811251587 4757:0.0715375630923859 4910:0.0744400940502307 5609:0.0762796037505289 5899:0.0785309816699559 6128:0.0785309816699559
+-1 6:0.0108493786330132 13:0.144214214855979 17:0.295597432410854 27:0.0631815770982401 50:0.308946049004164 59:0.0673688726328926 63:0.117254561021815 75:0.0439762166783845 79:0.0735752551319641 83:0.0281114258791841 98:0.0703764724497326 111:0.0678495081869471 125:0.11631056769754 137:0.266455823651931 142:0.036574224592056 162:0.117520563814532 181:0.0915763477956638 199:0.101428170632928 218:0.0615418075260664 234:0.0778295372146065 317:0.258658585771198 326:0.506050332356522 336:0.0991923564391271 704:0.448914895473461 717:0.10994680874825 729:0.116776927908286 829:0.1609705381377 982:0.121522887242401 1067:0.115399209238666 1150:0.118386439768653
+-1 6:0.0090612066792501 10:0.30570746344682 13:0.150556411004904 17:0.345628752331703 34:0.25274650291105 37:0.0214364400088047 42:0.10842426946996 57:0.0676488621111642 61:0.053198878849234 62:0.259352235298974 72:0.0281950119807203 79:0.122897470128043 83:0.0234781593080933 85:0.0277648254574208 96:0.0842117250178146 114:0.0636259766295488 142:0.0129233657346853 144:0.0269353852814081 145:0.0380189752230054 146:0.244098828805438 149:0.0504436554240069 151:0.035780102735069 164:0.158764777896552 186:0.0514190864137976 190:0.0388451746294737 199:0.0211777477837908 216:0.0394178621960304 219:0.0378819159517035 220:0.0363452523256076 264:0.0372961859844879 271:0.15000679936365 278:0.156452647573428 287:0.0841075061023871 314:0.036154000092103 323:0.0387571141669281 335:0.059993045633043 341:0.0378546845060303 342:0.0846471741114509 371:0.0633030628014553 376:0.0577805103371165 377:0.0348703710748041 389:0.115835156827423 411:0.0678860241634545 426:0.0407860172040065 430:0.0352615933958266 486:0.0675280107147219 496:0.0379914422106897 504:0.0962547289840587 507:0.0242249018227612 515:0.0327329486960986 545:0.0721321828252422 580:0.0819887307534861 594:0.043380464702721 603:0.0485060074685059 621:0.0630941309929536 628:0.147694915897235 647:0.0409245272718297 663:0.0424017706466411 668:0.0653605976098203 670:0.0646362480738326 671:0.0276685527595662 690:0.0566202869957508 694:0.0666703499818023 697:0.0971405025612626 740:0.064873039042338 774:0.101647685093618 776:0.0564978116210325 808:0.0472862896854911 810:0.200011049945407 855:0.0730204999238311 869:0.121312395039909 873:0.0523849128888186 886:0.0390231893656515 895:0.0471132314384612 900:0.0661297800334362 906:0.05301333585286 920:0.059517912004105 930:0.0396671166612975 952:0.0422072259879137 953:0.0495063713605595 991:0.0481273644920294 1005:0.143279743764517 1027:0.0473445153187718 1034:0.171367872082204 1045:0.0235355783395536 1099:0.0641757824701702 1126:0.0483152443903707 1229:0.0511365923748958 1337:0.0583330968644548 1359:0.0502947775969309 1433:0.0436810598317167 1503:0.0613567293259652 1559:0.0658680619461338 1568:0.067235499572341 1598:0.0474030149560416 1636:0.0661297800334362 1744:0.0622918429572851 1885:0.0773887797573323 2074:0.0773887797573323 2116:0.136898516062373 2275:0.0713031323465596 2348:0.0730204999238311 2402:0.0624876131446751 2414:0.144264365650484 2558:0.0755663299822458 2595:0.0795250760750761 2616:0.0601555466395413 2941:0.065114428179928 3469:0.0750137434549075 3528:0.0853677616807915
+-1 6:0.0217802968227425 11:0.146810117687819 17:0.237366582390568 18:0.0582946600795648 53:0.419344506056965 74:0.0892755893849498 79:0.0738517361126575 94:0.0653756120972205 101:0.105843290658282 144:0.129488424054477 159:0.262058625898635 166:0.0812560737707274 214:0.0933008841973987 215:0.0693775006994537 218:0.0617730692358347 301:0.0987064047958227 306:0.0854558537438177 347:0.0894613759904788 423:0.082509314150834 442:0.0926717960607842 499:0.0811147941562641 516:0.152671485720939 528:0.113941969605414 550:0.26617518461913 592:0.107274310245606 603:0.116593217409942 653:0.22249640457556 656:0.107500679379724 661:0.145391915909837 666:0.142324549960381 681:0.119165176883722 767:0.104171213474957 806:0.116902863525926 807:0.14160450107531 811:0.123687472478443 886:0.0937994990557173 964:0.13045294070723 1021:0.116593217409942 1324:0.129967066867061 1551:0.116593217409942 1597:0.152671485720939 1598:0.113941969605414 1932:0.140555951988368 2091:0.144204451729397 5020:0.208345538376251 6028:0.241172713825401
+-1 6:0.0292538182134159 17:0.11955551342526 21:0.0442422574639831 29:0.0265610411534098 41:0.134703149623335 42:0.0875110783053879 53:0.337941067988818 58:0.0490592234374321 81:0.0890570435132995 85:0.0448189289467696 92:0.048279603365274 96:0.135937440912295 98:0.0474400562738533 132:0.0443562736037085 144:0.0434800183034695 160:0.132575751648239 162:0.0396097016988066 176:0.0379088414899207 179:0.0398670687667276 186:0.0415012221852786 215:0.0465915779311999 229:0.0382995840338882 271:0.0807153652321968 286:0.0409791299949721 287:0.0678846035908603 290:0.0760517862981465 293:0.0692207627126393 299:0.0605434644249452 306:0.0573892548627606 314:0.0583610209887483 335:0.0968428219961674 347:0.12015845567425 369:0.0653983435260647 377:0.0562889432150717 388:0.304207145192586 398:0.113769713301941 402:0.0557438017354897 411:0.0547919686750156 444:0.38430338029863 466:0.135158334304227 479:0.0926273626406138 485:0.101222588875064 535:0.0693527815217549 671:0.0446635222718285 883:0.0852808311099385 913:0.152662285654957 1020:0.0934905833274639 1025:0.178291111784682 1098:0.0820415814030782 1168:0.0950967832617665 1194:0.22419865723684 1260:0.0976402826908549 1301:0.192151690149315 1344:0.115757936392395 1375:0.0917997489926845 1386:0.104720273925671 1500:0.0834616892469421 1544:0.0958265650167297 1911:0.198088253519463 1939:0.100242499898801 2706:0.113845367352821 2760:0.115099950014936 3248:0.11941654416637 3352:0.132538747044254 4270:0.156190565338692 4444:0.144960874740485 5573:0.148054183537847
+-1 17:0.311966864270218 146:0.257046141640477 216:0.249051814925708 774:0.321117623397037 814:0.317774860024294 920:0.376048907256661 1863:0.344859695325483 2711:0.556901041764897
+-1 6:0.0239650509707553 17:0.174117683581616 34:0.190989473488559 37:0.0377966861462251 42:0.0477933612356648 48:0.0488698438855602 59:0.0992068161136831 63:0.0172668047113829 72:0.049713386098001 78:0.0613704796499789 79:0.108346281021634 83:0.0206983206701904 98:0.103635781454972 100:0.0493633814134945 101:0.0776401985758555 109:0.0879104947495317 132:0.0484495322983468 142:0.0145004690779858 162:0.0432649401284187 179:0.0870921147755067 186:0.0453310127593408 190:0.205475191752335 253:0.0872895303410912 299:0.066130499629368 322:0.069231222616315 341:0.133490600944105 355:0.0480780220888577 357:0.0739483070724395 398:0.0621342704353684 410:0.609849089753116 414:0.0590236272954492 473:0.0703328905431766 532:0.0923649687374759 574:0.0598132620768317 580:0.072281179210355 719:0.171964688743534 756:0.318198401696663 856:0.0599535414524077 1083:0.085638965375934 1126:0.0851893377608848 1143:0.0948119581102236 1162:0.0926758757605283 1167:0.102118024543354 1340:0.107251210484883 1746:0.0933112413374357 3556:0.416668926511721
+-1 6:0.032867321338259 13:0.109221345791943 17:0.179097736864836 34:0.130968058549794 50:0.311975748789503 63:0.0710426553600731 75:0.0666112085171067 77:0.123919390503601 114:0.346181611351956 120:0.410747101364081 137:0.134534420121382 142:0.0468763630948212 326:0.574889566818742 349:0.16291380033813 446:0.202774183209435 490:0.170068175376469 537:0.18379443039489 586:0.120803547341609 729:0.176883162818992
+-1 6:0.0143894806843378 13:0.023908830741267 17:0.372447031622564 29:0.0130649471410748 33:0.0199066759487017 34:0.0860077246350054 37:0.0340417397336298 42:0.0215226429889323 48:0.0220074122363438 50:0.0682922858998366 53:0.0277046255112976 57:0.026857129219201 58:0.0723943188774376 63:0.0077757090891818 67:0.0203489495946832 78:0.0276367865623222 79:0.170769410826344 83:0.0186420270404633 85:0.0220457072532325 98:0.046669994900252 100:0.0222296655313777 101:0.034963480959171 132:0.0436362691251739 142:0.00186570095612031 146:0.258424402437021 149:0.0400530542490181 154:0.0260047905815757 158:0.077460868065457 164:0.042020575289881 166:0.0536830472754677 179:0.0392199344218874 186:0.0816551235335986 190:0.0925310352908976 216:0.219088809435603 218:0.0612169609405747 242:0.0504140317125211 252:0.0519238124991534 254:0.0347180200061894 256:0.0244811956044136 258:0.0341135130748412 268:0.0346146627453296 271:0.119107753435617 275:0.0241908650203701 277:0.0325780131602245 287:0.100174020192001 288:0.0373632635060666 291:0.0289548119417282 295:0.030544199526359 296:0.0324395743099127 306:0.0282288475409175 322:0.0311766916896888 323:0.0615475140814071 333:0.0725833119657743 335:0.142906259931383 342:0.100816777498003 347:0.0295520017997436 355:0.0649525004067079 367:0.0307043274820685 372:0.0710219407052572 377:0.0276876220131704 382:0.0315967775649214 389:0.0306583109501369 406:0.0337301434039603 410:0.0457719227682435 411:0.0269512844153931 414:0.053159870967342 419:0.0437622935345915 426:0.0647694758019459 430:0.0279982586772985 459:0.0328608556709122 463:0.0884099846273869 468:0.0481619729852026 478:0.0282109174211426 480:0.0264591935717011 484:0.0795202774840523 485:0.0248948782823917 504:0.114641648666729 506:0.0402506716642111 507:0.0384699046382914 514:0.0764277657778194 516:0.0504323566549533 519:0.129036817485904 530:0.0295725440094928 531:0.0404783120018759 532:0.041594443149086 541:0.0370952689022395 546:0.0310803930895531 559:0.103020422696204 561:0.0637568919822559 574:0.0269355293789725 585:0.0445740270041525 598:0.0380184204973156 609:0.0254748892355245 615:0.0477644483271568 620:0.0511376943756446 625:0.0399937716190305 640:0.0335746988020582 641:0.0284649523893749 645:0.0457719227682435 653:0.0734977980793993 655:0.0272392619042764 671:0.0439385304397789 676:0.107915804428593 687:0.0404783120018759 692:0.0502636255680434 695:0.177554851763143 713:0.0359719348095312 714:0.037228356692269 719:0.0387201747987547 726:0.0663040856228074 740:0.103020422696204 757:0.0341788810503182 758:0.037685407237926 759:0.106318246810697 774:0.0807098575850672 804:0.0338880752247799 810:0.0529373044474347 834:0.0362511198757224 864:0.0536183005325545 895:0.149634581299845 900:0.157524250268407 913:0.0375460562896953 914:0.0460955756398079 917:0.0437622935345915 920:0.0945163128346236 921:0.0487182062358158 930:0.0944889399181574 936:0.0420934208472426 1025:0.0438492591035216 1035:0.0439369977098663 1039:0.210032333691209 1050:0.0424659378196999 1094:0.0370513021114058 1116:0.0419482634043976 1124:0.0399937716190305 1126:0.0383630624774489 1129:0.0419482634043976 1223:0.0442049923136934 1260:0.0480276780126091 1283:0.0445740270041525 1294:0.0408579945123771 1308:0.042020575289881 1320:0.0506040223422183 1341:0.0413202441775758 1377:0.0343109302200256 1389:0.0458786322207544 1394:0.0466597593767325 1424:0.0334520819678257 1446:0.0375460562896953 1503:0.0974364124716317 1519:0.0579794231832715 1533:0.184343717827231 1668:0.0583519401557288 1669:0.0538561560954936 1744:0.0494607011380871 1749:0.0563024299457139 1789:0.0546061771347836 1792:0.0424659378196999 1863:0.0433386006692869 1865:0.0426963886349385 1873:0.0476354199771277 2014:0.0625457617127614 2091:0.0476354199771277 2194:0.109738813640472 2213:0.049934577490976 2348:0.0579794231832715 2358:0.0614479059424104 2450:0.0591420039607754 2454:0.0688233067834636 2517:0.072825461576029 2523:0.0559986974204099 2555:0.0485761817967178 2711:0.0699858875609675 2778:0.059562089836008 2826:0.0614479059424104 2910:0.0591420039607754 2977:0.0637811880476269 3114:0.0609416140325654 3183:0.0583519401557288 3283:0.118284007921551 3339:0.0569394592400001 3365:0.0587390693117901 3554:0.0644621841327467 3574:0.0668425810206021 3673:0.0614479059424104 4585:0.0559986974204099 5933:0.072825461576029 6100:0.074625071647819
+-1 6:0.0282015371770799 13:0.140574728261929 17:0.307346706629552 31:0.0268722898222793 34:0.0561880375676158 51:0.0478839994895921 57:0.0526365297511633 58:0.0472945276256251 63:0.0457181785292783 75:0.014288801132226 79:0.0478123071169135 83:0.0182679913949219 98:0.0914672061561031 118:0.0461668791907771 124:0.489118652949998 132:0.0427607463048376 141:0.0644030638216556 142:0.0109696039828477 179:0.0768660428367916 186:0.0400083931544923 189:0.10551871073713 190:0.181348965194433 196:0.13112358311766 197:0.235847217806757 230:0.202658104166819 275:0.0474109937796609 284:0.0428159388380068 317:0.0420218173866254 337:0.0539013572515009 422:0.0642909187553951 423:0.0534173043971196 442:0.119993181137276 534:0.0537386567991399 535:0.0668581117224114 567:0.0765073255271589 580:0.0637941589981862 581:0.105551160716651 586:0.0518272495713213 626:0.0665414930384109 631:0.0473177648293242 717:0.142896156512602 733:0.0795771778538195 754:0.0859389256584756 776:0.087920140840782 787:0.0809823806642507 853:0.0746062910658756 856:0.0529139922411686 890:0.0740428055072093 1018:0.0765073255271589 1061:0.0914471458423645 1150:0.0769325068128477 1199:0.102102954071488 1253:0.172568761453895 1296:0.0717745833867949 1332:0.0866361171396597 1632:0.105551160716651 1654:0.0995197933200297 1873:0.0933593155236656 2983:0.116734059255041 4472:0.142728567286645 5895:0.156137478529273 5896:0.156137478529273 6554:0.327962377563416 7031:0.156137478529273
+-1 6:0.0317345101912184 13:0.105456902783809 17:0.216156151625039 21:0.0239969763969032 27:0.0462016413599092 33:0.0219510566303813 37:0.0187688833287696 42:0.0711989419483688 57:0.0592306185060093 58:0.0532193922444784 63:0.00857426076547616 72:0.0493728333717768 78:0.0609500720737722 79:0.0269010185143472 80:0.0774849526808647 83:0.0205565304988551 92:0.026186830618928 96:0.0491549293671462 98:0.0771943821988414 105:0.0421383815923285 111:0.0248075371624972 118:0.0519504766345563 135:0.144564395634413 142:0.00822922067927157 144:0.0235835382906192 145:0.0332878831534938 164:0.09267202924349 179:0.0648716292780294 188:0.0876868704154456 190:0.0340112700712812 199:0.0556271485130206 203:0.0300725486466871 220:0.0954673164257456 226:0.0922747477834986 243:0.0374034881932475 252:0.0286281484556079 256:0.0269953714259852 276:0.0308157870910882 284:0.048179744205773 323:0.0678683357553865 342:0.074113655735529 369:0.035472025975825 371:0.0554256116960786 376:0.303541723368808 387:0.0560033117019996 388:0.206252237719184 399:0.0374034881932475 434:0.0343252595608227 441:0.0279719985733959 466:0.0366549035250257 513:0.0593688312134478 515:0.0286596512681834 523:0.139491795564086 603:0.169879624517295 626:0.0374387693072726 641:0.0313882530408614 647:0.250823072363776 664:0.0448426882340564 670:0.0565928950146989 671:0.024225470199665 680:0.109423273652153 688:0.132108243585524 695:0.0391578846824592 712:0.0364271239146379 714:0.041051643584992 719:0.0426966687927205 727:0.0849398122586476 756:0.0526697733388646 784:0.0389529028397924 808:0.0414019703734787 829:0.0294274985451288 863:0.0419228455561741 867:0.0348695836879123 869:0.10621624616319 906:0.0464163412899962 913:0.0414019703734787 917:0.144769812819881 918:0.0458661194579959 962:0.0537214805108002 1028:0.0965132085465873 1067:0.0421929391709541 1086:0.0500142684775602 1143:0.0470812328112184 1146:0.0454156739027814 1159:0.0403368869996058 1164:0.0841681922449158 1227:0.0866915689093373 1313:0.0518427264552031 1340:0.0532582525534748 1379:0.041869621909059 1395:0.0847165443702216 1407:0.0483525010535195 1457:0.0525274940037454 1472:0.0403368869996058 1507:0.108742954899912 1525:0.0556116711694738 1598:0.0830083406364523 1649:0.0450540388388396 1664:0.0470812328112184 1687:0.121605229803422 1707:0.0453423792544504 1855:0.0513243325706255 1858:0.0510741097311437 1859:0.0624301503159442 2045:0.0666691682398838 2056:0.0517107949714225 2219:0.0570115702526469 2528:0.0456385666233297 2569:0.0596558484867089 2616:0.0526697733388646 2706:0.0617496653620456 2806:0.0631560335177101 2807:0.0538803769699814 3636:0.0689691016664541 3698:0.0602141356871009 3810:0.0710823373054546 3957:0.0689691016664541 4036:0.069628953032853 4394:0.075891339598184 4445:0.137938203332908 4779:0.0803045086637548 5079:0.0747445731831817 6437:0.078626699653691 8381:0.499032012128992
+-1 17:0.220949568433641 76:0.337339111623474 83:0.105061931110196 101:0.394091352826811 141:0.370391583192734 160:0.367518246614649 481:0.467276283202493 758:0.424771582027732
+-1 17:0.160314560421873 50:0.558513534620702 111:0.183987797037294 246:0.3040995359029 559:0.421265005703326 758:0.308201866766405 814:0.326598384845068 1329:0.396124646387104
+-1 6:0.0282032607289282 17:0.230524117714463 85:0.0864188004078973 146:0.12662741207509 180:0.10866843292901 216:0.245378410236993 242:0.0988110767841878 287:0.13089348956677 323:0.120632608287572 342:0.131733355497736 367:0.120360445589357 419:0.171547452160018 430:0.109752701539995 463:0.173282823903487 465:0.239822105138773 484:0.311718145820307 504:0.149797776059247 774:0.158190639870967 920:0.370502351334093 1137:0.396733827261334 2435:0.415026680217226 2807:0.191539407503171
+-1 13:0.044431407729252 17:0.0364286143533989 59:0.0415117726252073 96:0.0414201944294078 132:0.0405461246989703 145:0.0560997893848126 158:0.0479836013915101 164:0.0780896955575458 199:0.0312493217754181 233:0.0790589891311202 253:0.146100571635248 371:0.373633268097802 372:0.131984907139412 380:0.0821491464142626 398:0.0519985179967972 515:0.0482998691317658 523:0.235084349340286 575:0.0697743923024023 640:0.0623941483380974 647:0.120774289530741 660:0.0860747673777279 663:0.0625669258276146 671:0.122480943262379 680:0.0922050611836247 687:0.0752236027018657 697:0.071668971907535 774:0.149988622569585 784:0.131293998790071 917:0.0813264491369101 951:0.087147767655918 991:0.0710154599331551 1023:0.0943655641836442 1043:0.074767850698315 1103:0.0875951818981805 1296:0.0680573062843947 1305:0.0608028696304645 1319:0.070562521500362 1320:0.28212269856591 1421:0.0937218814894057 1440:0.0828349487011022 1561:0.0890068840107353 1614:0.0844787112056798 1636:0.0975793458445168 1758:0.112356988261224 1791:0.0937218814894057 1945:0.101967553858006 1981:0.096081119635126 2073:0.0968149404690688 2246:0.0846707870394476 2315:0.107080014568704 2326:0.100537499493277 2406:0.108439382624309 2756:0.110688286154548 2866:0.091631793449247 4908:0.13533651274592 6549:0.466465319470558 8317:0.310976879647039
+-1 6:0.0415131016303025 13:0.045984041731459 17:0.113104783862817 18:0.0740728242619724 28:0.0510922146280295 29:0.0753837459961023 33:0.0765733320433568 37:0.0654727450899903 50:0.19702063384479 53:0.0532845235909867 58:0.0464121871454907 94:0.0830703227240165 96:0.0428676030427248 98:0.0448803836608372 101:0.0672455372202108 160:0.0627112514764892 179:0.0377160037786436 180:0.0533172829854218 186:0.0392619849208637 204:0.0415351613620083 224:0.0657996850415721 242:0.096961702694994 253:0.0756029926398458 254:0.0667734402436795 274:0.0747729559813735 322:0.0599623757105366 369:0.0618697147256696 394:0.128912400889665 410:0.264100494434194 411:0.0518356167512096 423:0.052420735610508 428:0.102241359083283 430:0.0538492705627332 468:0.0926303004771531 485:0.0478805147029296 489:0.0788322953045743 502:0.0477577989274377 534:0.105472185537069 567:0.0750799825822459 580:0.0626039965902689 586:0.101720690621167 599:0.0648734494246376 603:0.0740753003067263 647:0.0624973442627677 656:0.068298527865748 771:0.0734023769422878 856:0.0519268133927092 876:0.200320320731039 1007:0.239597090308487 1012:0.0923720099028087 1029:0.106585702223487 1127:0.0797334031026658 1160:0.0876295666431044 1168:0.0899657473646774 1195:0.0931576695101724 1196:0.0868466076637222 1227:0.151205985279692 1288:0.090891982981612 1324:0.165144246329735 1431:0.0808185021099615 1478:0.554109368820512 1510:0.106050904481954 1523:0.111512279461818 1645:0.0790854199128028 1815:0.0899657473646774 1824:0.0980051875426683 1851:0.0937001082517539 2472:0.117209484360901 2745:0.114556234651179 3156:0.125387494967016 3350:0.110821873764102 3662:0.116283248743966 4195:0.132368405861243
+-1 6:0.0295882299258196 17:0.161229598330005 18:0.0791924839187969 33:0.0409329091125622 34:0.058950849529662 63:0.0159887263073653 77:0.0557781296010263 83:0.0766649741511446 118:0.0484369425636993 132:0.0448633273258398 142:0.00575449421075299 146:0.265691334019849 149:0.0823587038579643 168:0.0549377219282823 186:0.0419756387102115 216:0.0643570338435843 219:0.0618493142737992 227:0.368052051653717 242:0.0518316815776832 246:0.152917632362718 252:0.213535670473823 256:0.0503392207330164 271:0.244914161387128 277:0.0669882232067126 286:0.124342734846342 287:0.0686606187546607 306:0.0580452936352799 308:0.0546547342295906 312:0.0670456381751476 342:0.0691011732442839 357:0.0684746982685687 372:0.0730190879526445 403:0.0856716062983768 411:0.055418316864401 456:0.0801592469160765 478:0.0580084250006061 504:0.0785769256083087 507:0.0395516839221674 515:0.0534426620235957 580:0.0669309701989114 597:0.132291874578583 626:0.0698133929106515 643:0.0601837093948958 648:0.215938473300017 667:0.0712466596111152 712:0.0679269420847015 850:0.0678072002753969 883:0.0862557092799824 900:0.107969236650009 936:0.0865541878622578 967:0.0947835797909071 970:0.121610171336471 997:0.0703475336796594 1003:0.0781750079636621 1023:0.104413263306663 1159:0.0752176151353619 1253:0.0905270546043417 1332:0.0908960861853955 1361:0.222484727296412 1584:0.0993125409848391 1688:0.0995964082388085 2245:0.418136521482512 2576:0.12983956326512 2592:0.100176338486475 2605:0.107541932913488 2674:0.109307931292091 7030:0.163814886605419
+-1 6:0.0352993836745995 17:0.0854890304605137 33:0.021703922544041 34:0.0937728126221451 42:0.0234657849245444 53:0.0302058991545538 59:0.07306346791012 79:0.0265981557071433 83:0.0203250965652315 91:0.031339754798335 98:0.0254417652916061 105:0.0416639702412016 111:0.0490564872706909 118:0.0513655966538698 119:0.24622139508165 145:0.0329131143791307 146:0.176097431724563 179:0.0213804258699084 183:0.0345046369503129 186:0.0222568107435952 190:0.0672567142148293 199:0.0183336250125573 203:0.029733979439798 220:0.0314641686135519 227:0.055757952599954 242:0.0274827962800276 271:0.0432870771866187 295:0.0333018401664928 325:0.0352194863449125 327:0.032984938951565 333:0.0395681977482 335:0.207744470890204 342:0.21983776051764 348:0.0389653863718073 367:0.0334764250523276 403:0.136277382744308 411:0.0587690874078112 459:0.0716553047882315 463:0.0481959786610634 466:0.0362422274409044 485:0.0271424777987405 518:0.0342045454486987 542:0.0557545901018307 575:0.0409358498448305 626:0.0370172681375451 641:0.0310348710890178 648:0.515238325390526 670:0.0559557487652807 700:0.0484963239727778 719:0.0422159720130829 739:0.200333611797314 756:0.104153590435984 819:0.0393924930263336 914:0.150771752032457 936:0.0458937668969218 953:0.0428577796620846 966:0.039176820975443 1039:0.0572487028211695 1093:0.0497892780286667 1094:0.0403964274725767 1098:0.0439983175011478 1145:0.0515247934461105 1386:0.056160739251864 1393:0.0449043654375679 1493:0.0523637902300708 1624:0.0496753968055858 1658:0.0572487028211695 1666:0.0565828198262074 1714:0.0604212397091706 1721:0.0513911063212668 1759:0.0595362200104947 1781:0.0497892780286667 1784:0.171746108463509 1787:0.11273942076802 1975:0.111509180203661 1979:0.115917042088993 2137:0.0553632133290737 2219:0.05636971038401 2274:0.0664436430311163 2297:0.0598232150225737 2464:0.133991289605995 2576:0.0688450414435223 3198:0.0739030678236192 3447:0.0664436430311163 3461:0.0750369234674003 3467:0.0568002347996309 3654:0.0728773706295024 3941:0.0659185791335156 4068:0.40681246308061 4254:0.0794004072479642 4893:0.0719409824554613 5926:0.0868598320404671 7452:0.0837638910285281
+-1 6:0.0146650796263678 11:0.131799983160327 13:0.194934015638614 33:0.162303557321156 36:0.336147159630862 47:0.138821959478779 51:0.0996006226092575 75:0.0891638232570097 82:0.109998671313844 83:0.0379981483616518 114:0.3089257468482 118:0.192057888244161 142:0.0798602433673349 199:0.0685501100571138 264:0.120723774787047 317:0.174814101557667 339:0.114066607816469 375:0.207924137714375 386:0.233593851780754 400:0.258443086600784 455:0.2141532301392 609:0.103851219458809 705:0.502884410599402 6217:0.280565865098384
+-1 6:0.0357366771344638 17:0.292099769797859 25:0.026820811145784 27:0.0104056633010095 33:0.0197755142608717 34:0.0569606896181514 37:0.0338174445247442 50:0.101763479538217 51:0.0242712305917442 53:0.275220844656642 56:0.0329925016904451 58:0.02397244169169 59:0.288477492686013 63:0.00772447627005919 72:0.0889591045099728 78:0.054909384991874 79:0.0242348914778962 80:0.0465370092062788 83:0.00925959895414586 84:0.0209736882295019 85:0.0219004518534766 96:0.0221416222248444 98:0.0231812471374694 101:0.0347331125547807 118:0.0234008642236349 125:0.038311440182255 135:0.0325591988078361 140:0.0505064739513656 142:0.00370681634235226 145:0.0599775235516497 146:0.128360844093708 148:0.0314137019052002 160:0.226737703677767 161:0.0348752236363954 162:0.0193549998933611 164:0.0417437088962745 168:0.106166087581508 194:0.0283139893826916 206:0.034084861361002 212:0.0404614423101562 214:0.030617246422839 216:0.0310921815271276 220:0.229348446617859 224:0.0339863128631703 229:0.0187148201854299 232:0.0317201485016766 246:0.110816390225717 252:0.025790847683508 256:0.0243198931878853 275:0.0240314755424725 286:0.0200241613207254 317:0.021299833567508 319:0.0972567526363851 326:0.041671873461454 330:0.0710830267517985 331:0.0558729254594444 333:0.108157609380341 342:0.0667683419801657 347:0.0587145774145432 351:0.0253611389503218 359:0.0397891515155037 371:0.0499324471240406 375:0.0253340519358666 377:0.0275051930006821 384:0.0387265494903002 387:0.0252264459945428 391:0.0369830654085068 394:0.0665847744683052 399:0.0336964742347831 402:0.027238813481861 403:0.0413896815260898 413:0.0308994383582032 422:0.0325874975085666 423:0.0541518555856507 448:0.0647267243914624 454:0.0713142001869561 459:0.0326443411054246 461:0.0391047696606055 462:0.0439137331694085 466:0.0660441617545431 479:0.0905234080106903 485:0.0247308501813538 514:0.113886294424088 515:0.0258192282908671 516:0.100200132941275 519:0.0427288719781872 548:0.0809228846203125 550:0.0291156626907786 561:0.0316684043552281 569:0.0501000664706375 571:0.0282046333087493 599:0.0335079012500712 603:0.0382607656870563 607:0.0350558087219305 615:0.0474497365351428 631:0.023984220063073 641:0.0282774016798033 655:0.0270597870599671 656:0.0352769946341343 671:0.0436490269672704 676:0.0357349218749615 680:0.0985784668599719 697:0.038311440182255 706:0.0363807844494259 714:0.0739661308170137 716:0.0342178192353613 742:0.036677301431892 796:0.0314137019052002 856:0.026820811145784 887:0.0451590277478241 900:0.0521621166293407 904:0.0435603438246004 963:0.0303204335192914 967:0.0457918597648927 971:0.0445645734431408 1003:0.0755358472361646 1007:0.123754721123433 1008:0.0464683688831196 1028:0.0434739512569505 1034:0.0901148310242296 1036:0.0403983842600564 1039:0.0521621166293407 1043:0.0399679800525101 1110:0.0583520476165382 1126:0.0381102948110723 1137:0.0502706010820091 1162:0.0414594718064557 1167:0.0456835106735442 1170:0.0475796125132874 1200:0.0509840424209114 1218:0.130421853770852 1229:0.0403357291395449 1243:0.0475796125132874 1263:0.0970807174426662 1284:0.0501000664706375 1297:0.0528088670206373 1306:0.0511708193633072 1340:0.0959597845893807 1383:0.0519556775728826 1426:0.0848301388452564 1439:0.0421109987634053 1449:0.0457918597648927 1463:0.0525885095899513 1467:0.0439137331694085 1468:0.0501000664706375 1489:0.0418889781161947 1492:0.0515553977914796 1508:0.0532650187081782 1516:0.0572408039863705 1519:0.0575974066666152 1603:0.0517534952966075 1636:0.0521621166293407 1738:0.0482561216315143 1791:0.0501000664706375 1808:0.0359322221531287 1849:0.0441873925958528 1865:0.0424150694226282 2010:0.0523729955740327 2024:0.0348039106457233 2141:0.0591696453990912 2192:0.0633609446932021 2218:0.0530342905806002 2253:0.0530342905806002 2256:0.0542463863602013 2366:0.0542463863602013 2456:0.0504441541613119 2459:0.0515553977914796 2463:0.0587523273979412 2468:0.0530342905806002 2480:0.0596055168456959 2534:0.1242673167429 2559:0.0591696453990912 2582:0.0673367299713944 2628:0.069524762501192 2734:0.177508936197274 2826:0.0610430361852599 2860:0.0556297315675036 2891:0.0673367299713944 2985:0.064037453811429 2992:0.0547765421197489 3140:0.0723456270480583 3200:0.131097954445999 3316:0.0550527714565728 3337:0.0596055168456959 3427:0.069524762501192 3496:0.0605400801463358 3536:0.0673367299713944 4036:0.0627281126761334 4505:0.069524762501192 4602:0.0655489772229997 4639:0.068369841769866 4854:0.0741333797964529 4945:0.0741333797964529 5025:0.0723456270480583 5371:0.0741333797964529 5692:0.0664021666707544 6027:0.0791422768731168 7181:0.0791422768731168 7355:0.0708341036364876 7966:0.0791422768731168
+-1 6:0.0141262419266458 9:0.216125980899865 12:0.0634853680089097 14:0.0477722722400276 19:0.114338891855558 21:0.0854557620831265 90:0.131584296512263 98:0.0305441478692542 99:0.133872506482231 105:0.150059217976591 114:0.0661277591019845 115:0.126800236565568 124:0.054444695132294 137:0.0385482334978811 142:0.13309409642282 162:0.0255025959236099 179:0.0256683009922101 196:0.0437868202190081 215:0.0299978574556792 234:0.0337788583390072 254:0.0454438591246149 297:0.0459996413553683 317:0.0280651537951504 331:0.110429190047498 361:0.168754463190659 373:0.134458013883625 386:0.11250546696313 421:0.205374010598637 447:0.0662377077393429 477:0.0503468440012777 486:0.0701832217237124 491:0.618155289129012 542:0.0669362532411154 571:0.0371630777788506 760:0.0745304243696218 818:0.0721748399622424 829:0.0698629491977331 831:0.0826520134044962 849:0.0588466047529618 889:0.180171372526446 934:0.152758558674265 1004:0.1906485459687 1444:0.0818687466511552 2111:0.201125719410953 2793:0.1906485459687 3208:0.0916074365549864 5713:0.219036565711934 5999:0.20855939226968
+-1 6:0.0170174031296709 9:0.0650899043579146 10:0.0717667542714936 12:0.172076992463361 46:0.0712467700462462 58:0.0570770335942344 91:0.339941570704293 98:0.110386487837844 109:0.0936368754425259 115:0.114563948807771 119:0.534151516651338 132:0.0516054747956369 142:0.0022064302379077 179:0.0463825936055475 183:0.149708388683295 199:0.0397728784004613 226:0.0659755608750516 227:0.181441553465098 252:0.0614065558522416 275:0.114435179736589 288:0.0883736850927389 295:0.0722448527525962 325:0.0764049851986976 393:0.133169663114964 438:0.0948767947701507 460:0.115917738263707 499:0.0633766914735557 534:0.0648540808719622 561:0.0754006872769129 617:0.119285436744193 663:0.0796326637331988 780:0.0863244470132727 811:0.0966396187520232 819:0.0854578859311382 868:0.12139013369827 895:0.176962049428969 1048:0.115571860432311 1139:0.141917378761748 1201:0.217029424943258 1381:0.130419861896199 1754:0.120525356071818 2866:0.116625256850853 2967:0.143003450240351 4480:0.353014804542255
+-1 6:0.0156018600782716 8:0.157046681634024 10:0.0657970461111828 12:0.157763269674336 13:0.0518465176114858 52:0.127199605338946 63:0.0843084805352322 67:0.0441268828640371 72:0.0485470255121468 75:0.079049547743242 83:0.0202127028654509 115:0.210068561659288 116:0.083519112659933 142:0.0121373686391488 147:0.20087938558903 180:0.0601146690724468 229:0.204262140002871 284:0.0473738919035466 286:0.087421156123497 310:0.320250325924744 363:0.0728740339590867 375:0.276507474402171 402:0.0594593832889256 448:0.0706457187863836 453:0.151330381511675 457:0.053791315138351 475:0.0632117981383748 522:0.108637385544512 658:0.0721483939422241 716:0.0746937978991409 727:0.167038225319866 824:0.0872457769428497 905:0.146988797418002 987:0.063686989472344 1115:0.109735284170522 1727:0.27126210990882 1840:0.138310088233848 1845:0.24694747377836 1912:0.236827986709353 1917:0.0970708186878774 3652:0.473768033705953
+-1 6:0.0245466096903635 9:0.187776767686847 10:0.0690128998109811 12:0.165474004797873 13:0.05438053433924 17:0.0891714944458858 22:0.261769869759357 37:0.0387138964800339 52:0.0667082653256149 58:0.109773714610123 59:0.152421394601117 67:0.0925671994733852 100:0.0505612801755458 115:0.220335736268947 142:0.0127305867872412 148:0.143848456996532 151:0.0646183411406697 171:0.0707467802314502 186:0.0464310582285132 204:0.19647722850663 218:0.0464125728633942 252:0.295251229471546 282:0.115900522570673 367:0.0698368629177645 382:0.0718667368543796 480:0.0601813238039695 543:0.0905659420201915 596:0.275032161736819 604:0.120910201216944 742:0.251927004672806 760:0.129508559074541 815:0.124800233606215 856:0.0614084311100841 902:0.112851713510907 905:0.154172926432044 1389:0.104350754828502 1776:0.0947650461743301 2283:0.150079720939677 3088:0.156538320019905 3518:0.126698587104193 5254:0.496923612475628
+-1 6:0.0223597132226541 10:0.0942966463333889 12:0.150731662732921 27:0.0325530611627135 41:0.10295831381029 72:0.0695748816371086 91:0.267996097012726 115:0.150529256519184 119:0.116973142521233 132:0.0678060928777951 142:0.00289909964460969 161:0.109103596306903 183:0.0983533331283565 216:0.0972687331557789 227:0.317869189263773 252:0.242052145392215 306:0.0877292168449078 325:0.100390967106216 393:0.174975902875354 441:0.23650437177582 608:0.121992555159951 621:0.155693024668075 697:0.119853450895686 780:0.226848933954626 850:0.102483288550216 1017:0.131739984152197 1145:0.146868236332193 1194:0.171362850625115 1899:0.160678372351263 2400:0.194378841859388 2403:0.168130865254197 2942:0.410126640266481 5149:0.196238531797358 7039:0.247588577977248
+-1 6:0.0156041309085692 27:0.136306460498695 41:0.14370264867204 77:0.352992756232454 83:0.0808625791915058 106:0.436898884917655 114:0.109569078783579 118:0.102177980158964 120:0.130004541066544 125:0.167283803597734 142:0.0404637840575187 194:0.123630743622014 207:0.369065944674315 234:0.111938418625619 351:0.110737361138031 685:0.164910582498745 805:0.203413132078162 827:0.133284762458682 1109:0.431805004864431 1381:0.239177338939278 2374:0.251494415733805
+-1 6:0.0226718777161145 11:0.101879879868644 12:0.15283603109744 13:0.0602727060182276 23:0.032616782859114 25:0.0340310403374239 27:0.171639183204554 34:0.036136705849545 39:0.0455413960624883 41:0.292308008447884 42:0.0271286360183258 53:0.104762510148941 55:0.182165584249953 56:0.0418618642723843 63:0.0196020889974596 74:0.0743440830781026 77:0.102575512226464 79:0.0307499487981375 82:0.1020332581275 83:0.105739683048249 84:0.0798361122953875 106:0.190436458483956 114:0.127357903888613 120:0.188888895823197 125:0.0486106911211767 142:0.0482090143280722 145:0.0761012600338832 162:0.221023779135334 166:0.033832923090339 187:0.0422810662620835 189:0.0339315873680609 203:0.103125760530807 207:0.482607856488754 215:0.028886993137123 229:0.0237459186888951 239:0.0384429620814583 283:0.0339911637000236 284:0.0275365906061278 294:0.0433319471180212 296:0.163556381898934 309:0.0333699301233552 351:0.0321789649809707 386:0.0361130752627298 402:0.0345614140939391 433:0.0366682682579273 465:0.0385573674873021 475:0.0367425460917917 490:0.0469252098259645 499:0.0337740979206187 502:0.0312988122231742 507:0.0242450716003742 538:0.0397316811127956 609:0.256882576376182 621:0.0631466634903041 695:0.0895209932952396 804:0.0427148867640213 812:0.0507891213398217 937:0.0614078152537689 964:0.0543172233783992 986:0.0810945490365789 1017:0.0534316836943211 1043:0.101425116039873 1045:0.023555174182896 1109:0.250954835610008 1146:0.0519136346602871 1225:0.0404465330754148 1251:0.0595674669231672 1362:0.0803942450864535 1363:0.154016032686288 1394:0.117626411355238 1448:0.0569162676365486 1595:0.0567912263808358 1844:0.0589604440850147 1865:0.0538174975615154 1897:0.0605374254583619 2015:0.0730812971669091 2278:0.147101686931474 2311:0.0672914801944298 2681:0.0695021005997723 3084:0.0803942450864535 3139:0.0745466948307102 3456:0.0882150798597228 5030:0.0940626301154661
+-1 27:0.297595379637533 41:0.235307505583443 51:0.347070910968236 57:0.38151801281582 82:0.383304220978262 142:0.0530062997782137 143:0.450288738916174 356:0.487402723074655
+-1 6:0.0114126226246484 27:0.0996924599061688 41:0.210203837569163 77:0.172115667734418 78:0.0876774422963138 83:0.118283306667416 114:0.320548591860541 120:0.0950833324442489 137:0.0934296136317003 142:0.0532702667143236 181:0.0963305212296015 207:0.134964592865093 215:0.0727060095248458 227:0.081121816387942 234:0.0818700468779419 283:0.085552755871934 293:0.216037561146091 351:0.0809916118060584 386:0.272680259405324 398:0.0887686383060954 475:0.0924777422640035 609:0.161637687211997 805:0.14877325285902 1109:0.631631149062703 1271:0.145549524004827 1975:0.324467697261137
+-1 42:0.0482753159851667 82:0.0605226125114161 105:0.08571378861002 106:0.225920688928083 111:0.0504610741070468 114:0.169974719221362 125:0.0865025603405536 142:0.0251086179063188 176:0.0836493544358415 200:0.0779503830936985 202:0.601148783723699 218:0.0457699074501454 248:0.0981588808449044 272:0.38096798013098 286:0.0452121145713891 301:0.438810931831176 309:0.0593816777231147 317:0.0480924269526811 433:0.0652510592712631 561:0.0715033954765291 641:0.0638469249249007 704:0.111289078892206 923:0.27122384758885 4230:0.18767044915121 5976:0.172324442610896
+-1 6:0.0418402894720596 29:0.0607823097788062 73:0.0909312008644926 97:0.0522154098731284 142:0.00650987785742716 200:0.0808403672034738 204:0.0502350276825356 254:0.242278987905961 272:0.26339482616384 306:0.0656648104811842 321:0.22221547957952 339:0.0650876778269363 348:0.0831340713591087 398:0.0650876778269363 462:0.102827876284833 485:0.115818930404147 519:0.200106838770169 724:0.0979160236149362 837:0.0908060756174958 838:0.110218838097696 844:0.0916966192751631 846:0.121185370215222 849:0.209156178134046 1193:0.102000383990154 1280:0.110218838097696 1334:0.129576482300645 1536:0.275147504759632 1653:0.128910916105335 1743:0.124184465247761 2014:0.145491436847241 2402:0.115415083881859 2403:0.503379913785025 2575:0.116535326835816 2857:0.142937648882951 2860:0.130261919051935 2915:0.134034387102739 3274:0.151650892260006 3799:0.162798358536851 3804:0.169403661473007 5045:0.185318616019602
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/example1/words	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9947 @@
+v
+ct
+shr
+net
+qtr
+said
+rev
+wheat
+tonn
+agricultur
+bank
+oil
+export
+grain
+inc
+corn
+trade
+rate
+soybean
+loss
+olon
+usda
+th
+div
+dollar
+share
+pct
+acquir
+company
+profit
+corp
+dividend
+issu
+import
+crop
+bond
+market
+money
+barrel
+debt
+price
+product
+coupon
+avg
+qtly
+currenc
+note
+record
+underwrit
+deficit
+rise
+depart
+japan
+prior
+crude
+yen
+produc
+country
+officy
+acquisit
+coffe
+sugar
+dlr
+stake
+lead
+mth
+offer
+manag
+ship
+farmer
+barley
+govern
+gold
+central
+mln
+treasury
+fall
+econom
+foreign
+buy
+sell
+rose
+year
+due
+week
+reserv
+dealer
+sharehold
+sorghum
+maiz
+minist
+financ
+denomin
+exchang
+oper
+agreement
+secur
+state
+cotton
+today
+surplu
+merger
+subordin
+rice
+shipment
+february
+debentur
+ga
+farm
+petroleum
+say
+intervent
+inflation
+january
+veget
+commod
+mine
+nation
+ec
+fell
+eurobond
+fed
+season
+soviet
+statist
+matur
+output
+england
+payout
+palm
+ounc
+told
+bushel
+common
+economy
+interven
+figur
+supply
+growth
+day
+forecast
+umber
+jan
+internat
+domest
+bill
+fe
+policy
+quota
+convert
+sourc
+callabl
+tender
+payment
+par
+copper
+monetary
+agre
+term
+japanes
+consum
+month
+moody
+tariff
+energy
+cut
+cocoa
+level
+quarter
+exclude
+program
+own
+estimat
+purchas
+trader
+stock
+pary
+investor
+unit
+complet
+show
+fee
+european
+shortag
+interest
+industry
+st
+gross
+gain
+good
+bpd
+outstand
+quarterly
+point
+gasolin
+union
+economist
+file
+new
+plant
+port
+ton
+world
+group
+subsidiary
+list
+index
+fund
+pay
+meal
+revis
+exporter
+extraordinary
+demand
+ad
+hous
+rapese
+report
+help
+talk
+payabl
+opec
+harvest
+secretary
+yield
+commiss
+tax
+earn
+sale
+ussr
+natur
+bid
+deleg
+compar
+oilse
+unemploy
+commercy
+split
+averag
+member
+winter
+major
+area
+beef
+undisclos
+budget
+cere
+metal
+stabil
+grower
+luxembourg
+propos
+council
+south
+transact
+include
+assistanc
+measur
+explorat
+drill
+vessel
+london
+silver
+account
+bought
+poor
+discontinu
+standard
+rd
+nd
+reagan
+zinc
+ico
+takeov
+meet
+feder
+support
+negoty
+organiz
+prime
+delivery
+enhancement
+lower
+current
+creditor
+increas
+committe
+germany
+date
+accord
+yesterday
+banker
+ministry
+mark
+west
+drop
+brazil
+adjust
+reuter
+buffer
+short
+weather
+stg
+loan
+gdp
+call
+target
+hold
+declin
+guarante
+grade
+approval
+repurchas
+non
+rubber
+feet
+total
+gulf
+senior
+proce
+refinery
+control
+open
+discount
+commun
+china
+deal
+deposit
+or
+grow
+follow
+fuel
+administr
+indonesia
+retaly
+agency
+firm
+cargo
+end
+concess
+move
+way
+lend
+cattl
+cash
+asset
+high
+caus
+paper
+cubic
+base
+band
+stabl
+acreag
+plan
+feb
+balanc
+bundesbank
+tokyo
+miner
+sunflow
+hectar
+septemb
+low
+disclos
+narrow
+work
+consumpt
+larg
+refin
+gatt
+rule
+board
+sea
+credit
+subsidy
+take
+dry
+strike
+white
+contract
+ask
+steel
+washington
+liquid
+decemb
+investment
+pact
+seek
+ne
+main
+downgrad
+fat
+discuss
+feedgrain
+seen
+icco
+spokesman
+institut
+franc
+miyazawa
+reduc
+congress
+privat
+subject
+effectiv
+gnp
+operat
+april
+taiwan
+presid
+borrow
+sign
+develop
+availabl
+carry
+registr
+repay
+session
+declar
+argentin
+want
+remain
+german
+acr
+consid
+letter
+rain
+damag
+chang
+morn
+indicat
+higher
+early
+sunflowerse
+york
+plc
+britain
+cooper
+morgan
+rais
+futur
+tanker
+semiconductor
+meat
+weekly
+india
+action
+slow
+bag
+brazilian
+lb
+cover
+pressur
+capit
+unchang
+prevy
+latest
+come
+ecu
+hit
+field
+legisl
+kilo
+start
+problem
+intent
+korea
+redeem
+lyng
+french
+income
+reach
+bonu
+valu
+minu
+princip
+part
+senat
+close
+baker
+temperatur
+far
+aid
+time
+destin
+bbl
+malaysian
+commerc
+custom
+nil
+pork
+comment
+crush
+keep
+assocy
+kiichy
+plu
+system
+bring
+fix
+continu
+labour
+mean
+financy
+may
+expect
+cost
+put
+real
+coast
+hog
+servic
+tomorrow
+gener
+imbalanc
+sharp
+ago
+worker
+drought
+sector
+ccc
+disput
+dec
+deficy
+push
+combin
+near
+rainfal
+provid
+texa
+eas
+northern
+see
+manufactur
+sole
+daily
+basy
+detail
+heavy
+accept
+iran
+reject
+bean
+processor
+repres
+syndic
+spend
+factor
+long
+licenc
+soyme
+buyout
+live
+capac
+reschedul
+us
+certif
+yeutter
+add
+held
+slaughter
+livestock
+governor
+property
+rebat
+littl
+spring
+protectionist
+urg
+amount
+situ
+interbank
+announc
+try
+past
+floor
+aluminium
+pretax
+allow
+moscow
+sold
+distil
+soft
+temporary
+busy
+merg
+saudy
+tin
+tea
+think
+resourc
+option
+present
+load
+eep
+back
+cent
+rang
+oat
+spot
+debtor
+free
+subsid
+colombia
+calendar
+affect
+food
+earlier
+mill
+afternoon
+normal
+condit
+sterl
+stimul
+exchequ
+weight
+arabia
+iraq
+clayton
+raw
+slightly
+spain
+redempt
+jame
+limit
+flour
+authority
+warn
+grew
+result
+iowa
+origin
+find
+provinc
+fourth
+jobless
+outlook
+differ
+charg
+american
+cordoba
+chairman
+execut
+richard
+pound
+canada
+textil
+award
+warship
+war
+rbd
+effort
+run
+annual
+hope
+friday
+corpor
+employment
+conserv
+fundament
+look
+decis
+transport
+mexico
+external
+number
+zone
+outright
+impose
+set
+overnight
+just
+pipelin
+moistur
+forc
+indonesian
+head
+chicago
+bilater
+need
+rio
+convers
+project
+office
+retail
+fail
+study
+land
+round
+kernel
+wage
+affily
+dump
+competit
+brother
+process
+compris
+protection
+crisy
+malaysia
+trend
+freight
+bureau
+swiss
+boost
+heat
+pik
+half
+turnov
+signup
+go
+decid
+face
+leader
+fiscal
+worth
+orang
+partner
+immedy
+remark
+visit
+july
+east
+widen
+get
+north
+bulk
+quot
+late
+principl
+launch
+ventur
+tranch
+provision
+libor
+definit
+lynch
+de
+barry
+merril
+review
+maximum
+prevent
+water
+drain
+prospect
+differenty
+specul
+mortgag
+latin
+indian
+olein
+organis
+rece
+curb
+right
+reduct
+surplus
+algeria
+schedul
+parlia
+polit
+receiv
+crusher
+restat
+effect
+wholly
+offshore
+argentina
+probabl
+director
+greec
+law
+hole
+chanc
+ecuador
+strong
+shelf
+british
+divis
+mid
+sen
+canadian
+protest
+missil
+encourag
+nickel
+despit
+eligibl
+steady
+step
+percentag
+premium
+termin
+posit
+thailand
+sumita
+holder
+possibl
+boston
+bueno
+fear
+largest
+stood
+depend
+movement
+october
+cold
+unfair
+appear
+clear
+lowest
+key
+turkey
+nearby
+coars
+egypt
+confer
+kuwait
+assay
+shift
+warrant
+request
+writedown
+versu
+give
+ban
+period
+escort
+bracket
+inspection
+stanley
+led
+cargil
+suggest
+local
+african
+nakason
+salomon
+microchip
+storag
+inra
+began
+venezuela
+attack
+data
+prepar
+africa
+revenu
+peopl
+trust
+post
+medium
+uruguay
+includ
+embassy
+respons
+iranian
+promis
+failur
+given
+commit
+rep
+workforc
+advanc
+june
+netherland
+duty
+diseas
+suspend
+don
+contain
+chines
+seamen
+concern
+bread
+entr
+pampa
+court
+construct
+statement
+leav
+facil
+underly
+requir
+favour
+la
+rape
+joint
+downward
+durum
+discovery
+mercantil
+vote
+italy
+underground
+aa
+platinum
+congression
+sugarcan
+circul
+enter
+weak
+veg
+restrict
+kan
+small
+third
+slight
+unknown
+believ
+aim
+pass
+expectat
+southern
+resolv
+offset
+devalu
+subcommitte
+moder
+river
+smelter
+bbb
+importer
+coconut
+hour
+yasuhiro
+flood
+full
+minn
+attend
+grant
+breakdown
+bale
+protect
+upward
+sanction
+senty
+carryforward
+shortfal
+threaten
+auction
+sharply
+turkish
+machinery
+air
+fob
+sry
+impact
+job
+approv
+re
+zero
+comprom
+philippin
+cane
+cif
+regular
+australia
+residu
+impos
+public
+monthly
+equity
+sery
+singl
+settl
+question
+dan
+hard
+apy
+imf
+renew
+expire
+pick
+mile
+pakistan
+cyclop
+lanka
+rel
+volum
+eia
+risk
+neg
+reflect
+addition
+foster
+dutch
+weekend
+reason
+euro
+equipment
+purpos
+santa
+view
+prefer
+chemic
+usair
+important
+electron
+frozen
+press
+linse
+extend
+sustain
+comput
+leverag
+analyst
+store
+confirm
+resist
+arrang
+maker
+adopt
+cathod
+matery
+western
+collaps
+implement
+maintain
+optional
+debat
+exxon
+deny
+affair
+involv
+side
+korean
+section
+partnership
+fluctu
+regulatory
+practic
+basic
+establish
+australian
+sec
+democrat
+peanut
+gap
+ahead
+home
+chancellor
+march
+pacif
+electric
+oppos
+kansa
+minimum
+unadjust
+iron
+earthquak
+promot
+build
+order
+family
+direct
+inity
+shell
+qual
+cbt
+intermedy
+name
+sown
+accru
+releas
+interview
+proven
+employer
+apr
+enroll
+island
+wait
+survey
+eastern
+subproduct
+wednesday
+texaco
+certain
+pre
+incentiv
+soon
+animal
+yr
+permit
+mm
+test
+dairy
+durabl
+soyoil
+outflow
+avoid
+power
+extreme
+decreas
+concert
+europe
+surg
+arranger
+spread
+hand
+deputy
+lawson
+brought
+flexibl
+cwt
+smelt
+wholesal
+retaliatory
+float
+partly
+apply
+left
+switch
+difficult
+came
+airline
+ghana
+coin
+draw
+exercis
+cite
+technology
+pl
+intend
+improvement
+bp
+took
+jorio
+dauster
+depth
+city
+buyer
+county
+belt
+draft
+return
+portug
+distribut
+signal
+satoshy
+oversea
+surpris
+critic
+success
+invisibl
+dakota
+form
+gave
+rotterdam
+beet
+ceil
+ownership
+officer
+anty
+summer
+plantat
+specy
+speak
+asc
+greater
+insect
+provis
+qtrly
+fertil
+especy
+matter
+packag
+abroad
+se
+volcker
+thou
+ibc
+perform
+predict
+s
+xon
+stand
+copra
+pod
+labor
+recess
+done
+tension
+dilson
+funaro
+link
+goldman
+exist
+aluminum
+join
+night
+chip
+advisory
+wide
+surfac
+necessary
+modest
+tight
+block
+inventory
+cake
+tonnag
+coal
+industrialis
+nearly
+gallon
+inflow
+basin
+kuwa
+sluggish
+broker
+room
+monday
+act
+glickman
+particularly
+chaco
+formosa
+corrient
+mision
+transfer
+rupiah
+second
+quebec
+attempt
+altern
+potenty
+placement
+extensiv
+vary
+pest
+basket
+parent
+determin
+newspap
+twa
+doubt
+petroleo
+p
+independ
+intention
+deliv
+place
+deprecy
+widespread
+newly
+nigel
+sach
+strength
+businessmen
+reform
+prove
+undersecretary
+janeiro
+affirm
+petrobra
+m
+violat
+slide
+spanish
+huge
+feasibl
+depress
+singapor
+highly
+forward
+respect
+herrington
+exclud
+shearson
+locat
+swap
+degre
+asa
+consist
+sink
+campaign
+idea
+zealand
+actual
+appropry
+threat
+lockout
+noranda
+barg
+feel
+broad
+peru
+disrupt
+achiev
+rally
+design
+warm
+chief
+informal
+snow
+arab
+tx
+break
+reopen
+al
+will
+line
+apprecy
+indirectly
+research
+informat
+aegean
+motor
+person
+paul
+expens
+well
+handl
+dilut
+stress
+taken
+panel
+confid
+case
+oecd
+adjustment
+suiss
+potato
+halt
+danger
+solut
+hear
+region
+item
+worry
+km
+flow
+juic
+occur
+lehman
+light
+access
+improve
+peak
+amstutz
+quantity
+guesstim
+pig
+oppose
+outbreak
+shipown
+emergenc
+suffer
+multy
+revolv
+fresh
+scheme
+rudy
+boschwitz
+expenditur
+novemb
+coordin
+reluct
+edibl
+mainly
+usual
+regist
+improv
+empty
+stc
+lira
+steadily
+belgium
+goal
+delay
+known
+difficulty
+fallen
+make
+engine
+expand
+restructur
+denmark
+saw
+cabinet
+deplet
+slower
+solv
+cyl
+utility
+identify
+deflat
+primary
+oct
+similar
+sever
+america
+jun
+drawdown
+summary
+elevat
+weaker
+vein
+stagnat
+banqu
+lose
+highest
+inflationary
+replac
+enrollment
+revers
+owner
+employe
+approach
+rica
+hundr
+election
+obtain
+guess
+preliminary
+lobby
+sow
+row
+ow
+tough
+final
+meatpack
+structur
+repair
+thousand
+inject
+rumor
+express
+met
+paid
+palladium
+broke
+thursday
+kind
+diplomat
+progress
+formal
+away
+watch
+citibank
+cuba
+shut
+party
+resum
+televis
+refer
+inter
+nebraska
+technigen
+influenc
+newslett
+quickly
+bb
+favor
+mint
+broadly
+stoppag
+tobacco
+john
+variety
+role
+excessiv
+obligat
+introduc
+thought
+life
+preced
+august
+substanty
+moment
+content
+subscript
+refus
+thay
+baldrig
+santo
+tighten
+slowdown
+consolid
+lack
+yellow
+applicat
+scale
+jose
+bad
+top
+disast
+margin
+increasingly
+hurt
+irrigat
+cd
+finish
+separ
+strait
+grown
+recommend
+search
+chase
+relief
+strateg
+hr
+stronger
+global
+multilater
+retain
+autumn
+equival
+mity
+window
+secondary
+upgrade
+seller
+hormuz
+respond
+criteria
+bleach
+deodoris
+butter
+malcolm
+underlin
+exampl
+coury
+california
+gencorp
+soar
+speech
+argu
+plywood
+lawmak
+plaza
+alleg
+kill
+aaa
+tuesday
+claus
+calcul
+cpo
+mobil
+tell
+old
+attribut
+featur
+smaller
+signific
+red
+dixon
+better
+guaranty
+opposit
+soil
+socy
+poland
+expir
+fully
+rapid
+daniel
+consult
+pattern
+destroy
+parliamentary
+roll
+cheaper
+fairly
+objectiv
+levy
+visibl
+bullish
+tonight
+health
+defenc
+category
+vice
+unsecur
+citicorp
+have
+ivory
+employ
+communist
+grace
+apparent
+iadb
+costa
+cheap
+luy
+baa
+sept
+announcement
+bangladesh
+stanc
+bearish
+recovery
+herd
+allocat
+benefit
+claim
+goe
+shipbuild
+gmt
+lloyd
+drexel
+arabian
+worst
+lift
+ag
+body
+smith
+stapl
+flat
+longer
+robert
+slip
+kanon
+bra
+caution
+spr
+publish
+necessarily
+silkworm
+gafta
+lot
+regard
+jointly
+serv
+retend
+unusu
+enrich
+iraqy
+upgrad
+bullet
+wet
+green
+complaint
+indirect
+invit
+street
+defin
+israel
+pump
+burnham
+prev
+abl
+intens
+manila
+decoupl
+contribut
+disburs
+wall
+size
+stick
+agent
+diesel
+manaspa
+xuto
+asian
+risen
+guilder
+wty
+suspens
+gram
+regul
+insuranc
+weaken
+anger
+sensit
+cauty
+ocean
+chile
+upper
+dm
+steelmak
+lo
+withdraw
+ill
+arrive
+military
+swing
+aviat
+welcom
+idl
+cattlemen
+broadcast
+pat
+spur
+sought
+midnight
+technic
+rely
+assistant
+hondura
+healthy
+rupe
+sail
+aggressiv
+convinc
+bloc
+san
+tex
+nomura
+mexican
+send
+mechan
+adequ
+creat
+precy
+pend
+acceptanc
+headquart
+lme
+unsolicit
+massiv
+emirat
+front
+purol
+acceler
+boycott
+bear
+ground
+virtu
+sweeten
+spark
+florida
+concentr
+poultry
+scope
+naval
+restor
+class
+forego
+qatar
+compon
+wind
+reaction
+benchmark
+sent
+merchand
+do
+poll
+mideast
+black
+fair
+discov
+book
+edg
+consensu
+controversy
+rock
+defens
+middl
+assign
+marin
+louisiana
+margarin
+undermin
+ambassador
+conflict
+priority
+kobena
+erbynn
+colombian
+tighter
+complex
+navy
+warburg
+pigmeat
+underwritten
+avert
+gradu
+constraint
+nato
+sweet
+user
+consider
+ha
+prevail
+prompt
+ibp
+big
+rest
+station
+react
+angele
+lambert
+contact
+active
+easier
+rouen
+reply
+specif
+correspond
+daiwa
+know
+accus
+specialist
+contrast
+friction
+agenda
+zack
+hutton
+tap
+toledo
+aggregat
+stay
+srw
+save
+salary
+alvite
+geneva
+household
+cypru
+crew
+won
+particip
+illinoy
+worsen
+merchant
+thing
+hrw
+spokeswoman
+dominican
+repe
+syrup
+fructos
+nv
+emerg
+portland
+ongpin
+defend
+jaim
+mmtc
+trip
+dispos
+activity
+countertrad
+hostil
+tallow
+earmark
+paz
+element
+redund
+car
+coverag
+larger
+jungl
+upcom
+lost
+fcoj
+particular
+resal
+comply
+republican
+stage
+comparison
+fnv
+enabl
+liber
+mouth
+troy
+attractiv
+approve
+mob
+turn
+commission
+alaska
+indefinit
+soyabean
+hernandez
+grisanty
+peter
+remov
+unilater
+southeast
+farmland
+check
+bullion
+gilt
+evalu
+petrochem
+saturday
+jump
+auto
+injury
+petrol
+lumber
+hover
+leahy
+histor
+sweden
+branch
+calm
+issuer
+hgca
+protein
+instrument
+stop
+pledg
+annum
+drift
+ufcwu
+em
+appeal
+unrest
+vital
+barney
+harbor
+jute
+best
+cours
+mix
+caiss
+tehran
+biffex
+enterpris
+authoriz
+manhattan
+assess
+expensiv
+begun
+fire
+clearly
+submit
+rig
+naphtha
+ortner
+est
+strongly
+paddy
+cumul
+correct
+heaviest
+spell
+fernando
+leas
+ferry
+countervail
+asia
+tree
+maritim
+explain
+expansion
+karl
+insist
+ohio
+tradit
+perman
+invest
+oilfield
+strategy
+ready
+tom
+possibly
+calif
+certainly
+unctad
+lake
+ba
+indianapoly
+bolivia
+rand
+sure
+managua
+striker
+sceptic
+sunday
+algerian
+describ
+switzerland
+groundnut
+deterior
+hedg
+navig
+belgian
+foot
+reneg
+westminst
+trigger
+estate
+brief
+alejandro
+cyacq
+pcc
+play
+await
+crucy
+blame
+choic
+telecommun
+majeur
+recov
+match
+type
+fact
+edouard
+kenya
+balladur
+midday
+piedmont
+significantly
+resid
+bottom
+sour
+stabilis
+milk
+brown
+bu
+canary
+georg
+onic
+refinanc
+endors
+injur
+consecut
+restraint
+specialty
+explore
+steve
+experienc
+adviser
+chrysler
+statu
+relat
+ontario
+telephon
+nikko
+waterway
+seed
+domin
+scant
+ratify
+vt
+compet
+dormanc
+pellet
+allowanc
+onward
+otto
+royal
+rival
+worldwid
+extract
+intersect
+border
+stangeland
+satisfy
+pretty
+citru
+strengthen
+sichuan
+csce
+moratorium
+twice
+advisor
+biggest
+read
+spent
+creek
+impetu
+panama
+northeast
+fruit
+pessimist
+overvalu
+conduct
+legal
+cert
+dwt
+bolivian
+arrival
+interval
+examin
+petit
+persuad
+outside
+balao
+extension
+strict
+lesly
+lock
+bob
+poehl
+absorb
+yangtz
+address
+outlay
+intellig
+persian
+inadequ
+nomin
+exposur
+membership
+tackl
+fast
+stockton
+amselco
+taft
+drive
+estenssoro
+aggravat
+licens
+warner
+rebound
+rye
+ratio
+excess
+simply
+flag
+collater
+groundnutse
+closur
+itc
+receipt
+stockpil
+refund
+joe
+coupl
+factory
+pace
+peabody
+borg
+carl
+centr
+excise
+yugoslavia
+penal
+hl
+admiralty
+hecla
+isolat
+pdvsa
+forum
+cabl
+ab
+mar
+introduct
+upham
+elect
+volatil
+complain
+great
+authoris
+compens
+platform
+advis
+drew
+standstil
+site
+faster
+slump
+gather
+expirat
+happen
+henan
+physic
+mind
+shrink
+glenn
+inform
+approxim
+louy
+connect
+retir
+behalf
+willy
+clercq
+arturo
+annualis
+gone
+mutu
+peke
+semy
+nicaraguan
+plastic
+praecipuum
+comibol
+kidder
+greek
+steer
+shultz
+anhuy
+glut
+climat
+opportun
+consequ
+arm
+gy
+frost
+automat
+slim
+admit
+badly
+amendment
+francisco
+tran
+scrap
+justic
+alumina
+programm
+iv
+shortly
+salvador
+evidenc
+alcan
+network
+burden
+lipc
+allen
+fulfil
+begin
+insufficy
+am
+noaa
+fla
+bancorp
+inch
+univers
+cross
+amoco
+trap
+suddenly
+liabl
+republ
+road
+bulletin
+portion
+revalu
+brokerag
+nppc
+soy
+quiet
+kept
+willing
+newmont
+harry
+understand
+radio
+diamond
+ally
+elabor
+diminish
+flight
+method
+rostenkowsky
+david
+venezuelan
+arrangement
+exportabl
+chemlawn
+advers
+allegheny
+shown
+self
+percept
+lay
+attract
+subroto
+haven
+uranium
+tabl
+mthly
+debit
+suit
+imminent
+tinker
+usage
+impossibl
+nigeria
+houston
+midwest
+envisag
+persist
+veto
+monitor
+payrol
+chevron
+straight
+cutback
+pursu
+guatemala
+aircraft
+morocco
+issuanc
+sheet
+paralys
+ming
+observer
+undervalu
+popul
+el
+minneapoly
+built
+minework
+uk
+win
+dramat
+lender
+seaforth
+centigrad
+srd
+mediterranean
+defer
+unlead
+format
+stockhold
+extent
+felt
+quak
+timechart
+stem
+graze
+sulphur
+track
+prohibit
+friendly
+slifer
+sun
+tour
+norway
+wors
+bidder
+amarillo
+atpc
+plain
+wood
+cuban
+metr
+mij
+graan
+conoco
+bran
+swedish
+bare
+satisfactory
+instruct
+toler
+exemption
+strain
+medic
+sa
+echo
+norwegian
+telex
+ireland
+dormant
+choke
+sponsor
+accident
+jakarta
+lbo
+victor
+general
+video
+harbour
+dw
+eurodollar
+missoury
+exploratory
+repaid
+analysy
+canal
+confront
+struck
+crown
+implicat
+ringgit
+plung
+center
+handler
+slowly
+kenyan
+undertak
+danish
+backlog
+charter
+zambia
+overshoot
+charl
+quick
+eradic
+fortun
+expert
+baltic
+fleet
+punta
+internal
+wagner
+costly
+cuenca
+martinez
+du
+divest
+answer
+learn
+rare
+meter
+event
+unabl
+fish
+continent
+investig
+fight
+presenc
+aground
+preserv
+testify
+occident
+ensure
+sufficy
+sit
+climb
+dictat
+harm
+select
+cftc
+von
+usx
+railway
+hint
+tire
+writeoff
+entire
+focu
+justify
+journalist
+afg
+allan
+keng
+lim
+yaik
+pit
+conclud
+keat
+postpon
+chv
+reintroduc
+constant
+nicaragua
+ideal
+closer
+interior
+chart
+circumst
+austerity
+illegal
+czechoslovakia
+subscrib
+settlement
+comprehens
+northwest
+drum
+renegoty
+gephardt
+laboratory
+eventu
+columbia
+bound
+meant
+colleagu
+cook
+vy
+happy
+congressmen
+oxy
+pictur
+cincinnaty
+procedur
+lombard
+deadlin
+sound
+fujitsu
+scientist
+hisham
+notabl
+carbon
+lmfe
+voic
+bonn
+amid
+espinosa
+expansionary
+resumpt
+unanim
+deep
+pie
+refrain
+drastic
+nspa
+bay
+southwest
+redress
+adherenc
+freez
+quit
+narrowly
+chill
+latex
+aside
+attach
+brusca
+slack
+soya
+heavily
+citruspulp
+sunm
+eiu
+phillip
+jet
+traffic
+interrupt
+nov
+surpass
+hardly
+driven
+ivorian
+displac
+furthermor
+indic
+dismantl
+jurisdict
+rebuild
+collect
+guangdong
+tend
+amend
+andrea
+equal
+hanov
+chuck
+midland
+notic
+attitud
+frustrat
+realis
+soyproduct
+drug
+mild
+intransig
+arbitrag
+phenomenon
+mount
+gro
+octane
+rudman
+mississippy
+rout
+primarily
+popular
+fieldwork
+sao
+paulo
+jorg
+rapidly
+optimist
+neutral
+marathon
+distort
+slash
+herald
+desir
+apartheid
+liquefy
+publicly
+formula
+mario
+shower
+weizsaeck
+phase
+forese
+ability
+euroyen
+bennett
+alloy
+staff
+enact
+ty
+hill
+lyonnay
+windfal
+supermarket
+overhang
+magma
+cropland
+meteorologist
+upturn
+liberal
+gem
+indiana
+pois
+exception
+individu
+sumitomo
+hamper
+passag
+uncertainty
+javy
+tendenc
+frankfurt
+gsm
+malt
+essenty
+zimbabw
+tool
+club
+gramm
+credibl
+pilot
+hunger
+nino
+anticip
+gazet
+tenant
+robust
+delhy
+elimin
+carlo
+warplan
+bahrain
+condens
+spotlight
+weinberg
+caspar
+doubl
+painewebb
+divid
+ian
+auspice
+install
+civilian
+directly
+flatten
+elmer
+plate
+gallium
+spare
+greenbaum
+dudley
+tfb
+went
+peoria
+reorgan
+got
+jacqu
+golden
+vehicl
+indebted
+inside
+heart
+adjourn
+afford
+permiss
+cloth
+belly
+accurat
+markedly
+unspecify
+rich
+succe
+chipmak
+socialist
+momentum
+objection
+adm
+rainy
+william
+desper
+downturn
+queensland
+landesbank
+peg
+drawn
+chirac
+hike
+pose
+defus
+hungary
+inherent
+counter
+deliver
+precis
+toronto
+up
+enquiry
+precipit
+wast
+athen
+spirit
+champlin
+oz
+mt
+mitsuy
+reviv
+docu
+lessen
+kitty
+expeller
+almir
+bit
+barclay
+shorter
+accu
+bridg
+ecuadorean
+disappoint
+resolut
+passeng
+modern
+sum
+venic
+toughen
+patrick
+testimony
+baron
+inevit
+po
+lightn
+upland
+sarney
+bulgaria
+prolong
+advantag
+minor
+update
+tapioca
+coastal
+supertank
+fitzwat
+marlin
+temporarily
+team
+practis
+exce
+super
+surcharg
+hong
+installat
+cheng
+dip
+challeng
+relationship
+fallow
+dn
+pension
+fairchild
+sheikh
+blast
+strictly
+salvag
+realist
+chamber
+english
+diversify
+italian
+pin
+samuel
+christy
+corpu
+oxide
+acknowledg
+intensity
+insistenc
+okla
+angl
+wish
+lamb
+royalty
+treasur
+societ
+pickup
+integrat
+distant
+feed
+coincid
+conting
+kharg
+pariba
+mandat
+appoint
+onshore
+solid
+iiy
+alter
+steep
+hot
+surviv
+crash
+pryor
+door
+reintroduct
+ccy
+district
+olive
+sampl
+mulford
+oregon
+sdr
+sosnoff
+caesar
+apparatu
+man
+rein
+summit
+kong
+panhandl
+conclus
+write
+montagu
+lag
+roaster
+steeper
+expansiv
+kwacha
+disappear
+consortium
+rush
+roast
+humid
+congressman
+ottawa
+lighter
+adapt
+pa
+cancel
+care
+bargain
+ufcw
+carcass
+can
+default
+rumour
+lou
+martin
+tech
+roughly
+cpb
+distributor
+battl
+parana
+geolog
+thatcher
+national
+rehabilit
+compensatory
+mention
+cp
+jerry
+abide
+million
+tonen
+ration
+judg
+ppo
+seattl
+discourag
+indebt
+arriv
+nippon
+upside
+minut
+margaret
+oklahoma
+hambro
+entity
+abundant
+michael
+czarnikow
+capabl
+teeth
+mission
+rural
+rot
+hotel
+pack
+tropic
+scenario
+keen
+troop
+denver
+attention
+strip
+belief
+mont
+alberta
+catalyt
+ferruzzy
+franklin
+reimburs
+brand
+sumatra
+ignor
+propan
+papandr
+sismik
+melvin
+monopoly
+cardena
+kuala
+lumpur
+interfer
+liberalis
+subsequ
+zccm
+deadlock
+vow
+restart
+jersey
+broken
+rescu
+tone
+softwood
+excellent
+proceed
+mpl
+underway
+seoul
+parallel
+tanzania
+destabil
+bode
+interpret
+taxat
+combat
+pharmaceut
+yard
+argument
+firmer
+utah
+inflate
+remot
+extra
+last
+northwestern
+ward
+dalla
+wayne
+unrealist
+del
+yamaichy
+broader
+qualify
+lord
+gover
+advise
+starch
+advertis
+awb
+sand
+reiter
+incident
+stearn
+sens
+unclear
+adher
+clarify
+boom
+doesn
+optimism
+messag
+importanc
+unaccept
+underpin
+restitut
+equilibrium
+lawsuit
+finland
+adoption
+assuranc
+resin
+pty
+transpar
+comfort
+dow
+shamrock
+entitl
+ordinary
+speaker
+zambian
+bar
+confeder
+prais
+dead
+obstacl
+channel
+understood
+repeatedly
+audio
+squeez
+uncertain
+rail
+mercal
+abandon
+ministery
+peavey
+yugoslav
+cartel
+bass
+hugh
+brussel
+reinforc
+overhaul
+frn
+encounter
+promin
+wireless
+hfc
+mge
+forfeit
+budg
+compound
+pleas
+dilemma
+timet
+stream
+peruvian
+cesar
+gaviria
+bottl
+pierson
+heldr
+safe
+amsterdam
+pill
+iy
+electrolyt
+censu
+hamburg
+tank
+peso
+enforc
+abolish
+haggard
+midmississippy
+christma
+outlin
+count
+bae
+guidelin
+smooth
+brisk
+shutdown
+decad
+metallurg
+jim
+caraca
+aerospac
+khalifa
+nazer
+creditwatch
+chain
+resign
+clearanc
+insignific
+psbr
+wave
+mainstay
+consumm
+confidenty
+oman
+bt
+et
+decre
+escalat
+wen
+secret
+beneath
+wroblewsky
+barter
+cool
+written
+absenc
+sight
+vigor
+constitut
+libya
+psycholog
+protocol
+ridden
+assum
+hopefully
+story
+impress
+embark
+applianc
+contin
+miguel
+mountain
+tunisia
+valley
+maxim
+egg
+alignment
+exceed
+vulner
+airport
+weigh
+hardest
+earth
+provok
+dampen
+proport
+aly
+enhanc
+phil
+card
+thin
+thad
+petro
+communiqu
+miller
+vietnam
+voluntary
+path
+train
+restrain
+army
+moor
+co
+donald
+error
+coke
+intellectu
+guid
+hawk
+illustrat
+thermoplast
+kg
+erupt
+invite
+honesty
+nevada
+breed
+citgo
+poison
+assembly
+withdrawn
+ankara
+jeffrey
+sixth
+bentsen
+belong
+hunan
+jordan
+suitor
+myra
+westmin
+aware
+peseta
+laid
+finnish
+assessment
+turbul
+uniform
+alcohol
+context
+acid
+outcome
+underscor
+harwood
+imply
+curtail
+cyclic
+memphy
+alaskan
+winterkil
+arrear
+fit
+marbl
+pull
+entertain
+width
+withhold
+baseless
+deploy
+bauxit
+guerrilla
+ingot
+regain
+warehous
+spill
+victory
+neighbour
+presidenty
+exclusiv
+resort
+generalis
+ly
+miamy
+taiwanes
+archer
+breach
+rha
+woong
+ethanol
+sulfur
+crowd
+advocat
+divert
+ray
+topic
+drake
+woodhous
+forbid
+uncompetit
+mood
+waiv
+undoubtedly
+holland
+icahn
+pseudoraby
+prv
+ford
+proper
+death
+prop
+aren
+instalment
+uae
+assumption
+anatolian
+replenish
+artificy
+witter
+sim
+balletto
+amc
+contamin
+solubl
+arango
+robusta
+gilberto
+klopfenstein
+oversold
+duim
+unveil
+restaur
+fifth
+chy
+instabl
+quietly
+ceas
+en
+faith
+caltex
+sudan
+successfully
+catch
+bind
+hebey
+overrid
+remaind
+ava
+emery
+injunction
+cast
+spokesmen
+miss
+reenter
+mckee
+counselor
+metric
+amalgam
+substitut
+enjoy
+greatest
+ic
+syria
+certify
+michel
+impaty
+guard
+deriv
+touch
+polic
+valid
+agpm
+davy
+shill
+dot
+cruzado
+fill
+tet
+version
+johnson
+yearly
+achievement
+rental
+contradict
+pion
+layday
+explosion
+stockbrok
+mcente
+mcginley
+mike
+tradition
+utiliz
+truck
+quito
+frank
+lunch
+regardless
+floater
+nervou
+swung
+root
+unpreced
+shadow
+topsoil
+grassley
+parliamentarian
+framework
+b
+firmly
+adhesiv
+machin
+replant
+entry
+on
+specify
+unexpect
+morrel
+schlumberg
+boat
+felix
+suralco
+moengo
+surinam
+wary
+queen
+battery
+disturb
+divers
+cobalt
+bankruptcy
+fault
+easily
+mae
+educat
+uproot
+packer
+deutsch
+dynam
+tadashy
+kuranary
+offtake
+setback
+tv
+deregul
+giant
+garcia
+stipul
+shun
+girozentral
+brent
+deter
+chequ
+eshleman
+roldan
+portfolio
+caribbean
+hora
+axy
+portugues
+safety
+interstat
+throw
+intensify
+heard
+automobil
+cycle
+ampl
+infrastructur
+railroad
+graham
+troubl
+sack
+model
+dock
+disagre
+listen
+ail
+ukrain
+enactment
+sfr
+gmac
+shrank
+didn
+margosh
+unp
+twin
+trough
+solicit
+aberrat
+viabl
+donor
+flank
+stephen
+lima
+int
+environ
+gruppo
+unstabl
+hajim
+unwilling
+nationalis
+memorandum
+lawrenc
+fishery
+vorm
+lent
+discharg
+analys
+honor
+polypropylen
+spa
+longest
+suharto
+pazzionotto
+burdensom
+dd
+rie
+devast
+wey
+ran
+stretch
+strive
+defeat
+harder
+eat
+ratif
+theodor
+chilean
+loophol
+lukman
+rilwanu
+overproduct
+ina
+men
+grove
+inclin
+fda
+confus
+throughput
+realloc
+powder
+bigger
+montr
+baltimor
+leon
+advice
+froze
+levitt
+enormou
+wellhead
+compil
+human
+gerhard
+iwc
+husbandry
+upset
+brasilia
+residenty
+nawg
+realign
+bach
+atlantic
+dubay
+modify
+intensiv
+host
+reaffirm
+mull
+alarm
+civil
+arnott
+impery
+dale
+chem
+novel
+dialogu
+accumul
+hagu
+harper
+justif
+logist
+butan
+sabah
+ambity
+wrangl
+word
+vast
+gaug
+utilis
+lesser
+emphasiz
+cope
+shed
+tunnel
+neb
+axp
+rothschild
+nymex
+nudg
+melt
+clarif
+impend
+dole
+beach
+temporao
+nwbl
+transatlant
+franca
+midsess
+reset
+capsiz
+grip
+dismiss
+function
+wor
+hpr
+ichy
+rank
+equat
+transmiss
+routin
+outline
+disciplin
+necessit
+guinea
+shape
+spoke
+dismal
+le
+aug
+sub
+divestitur
+easy
+carey
+alan
+kansay
+memory
+allevy
+maria
+temper
+interim
+heighten
+outturn
+recognit
+melcher
+fhlbb
+assur
+reynold
+wright
+dominion
+relax
+star
+antara
+tenn
+gramley
+absolut
+lesson
+unsuccess
+fraction
+reliev
+hesit
+stockdraw
+century
+nearer
+mca
+focus
+wilson
+leaf
+penalty
+synthet
+patent
+conabl
+bor
+tamura
+laden
+dynamit
+tremend
+funer
+bow
+bonus
+dean
+cochran
+realty
+beneficy
+feedlot
+erodibl
+deduct
+philadelphia
+task
+bolster
+uncommit
+num
+simultan
+thasso
+cypriot
+mty
+papua
+remitt
+wider
+euromarket
+duesseldorf
+mitig
+budgetary
+dy
+opinion
+nuclear
+hydro
+surround
+tent
+leg
+jamaica
+tract
+euronot
+criticis
+growmark
+travel
+signatur
+heinz
+typic
+slap
+lyle
+bv
+bubbl
+granma
+pemex
+mexicano
+rhetor
+emphasis
+ex
+dreyfu
+maryland
+cmo
+brodersohn
+schroder
+runner
+certainty
+secretariat
+uss
+furnitur
+convent
+implicit
+staunch
+titanium
+unofficy
+istat
+bert
+yemen
+client
+atmospher
+carrol
+flaw
+cacex
+ahm
+urgent
+somebody
+stenholm
+likelihood
+reconven
+taxpay
+overse
+incur
+drink
+accession
+coca
+concept
+frame
+francoy
+mandatory
+box
+emphasy
+cpc
+consent
+inspect
+richmond
+lac
+evapor
+turnabout
+kingdom
+planter
+toll
+ethylen
+tenth
+choos
+fiber
+recognis
+softwar
+sudden
+alcoa
+greenmail
+liner
+kilomet
+timber
+efficy
+segment
+recur
+amazon
+dept
+jean
+viacom
+ramirez
+concepcion
+tribun
+edward
+ouko
+scienc
+mcf
+bro
+soften
+helmut
+brasil
+counterpart
+disastr
+frequ
+scott
+sul
+grosso
+pure
+vicy
+shoot
+collid
+femal
+motion
+sort
+background
+bail
+policymak
+superpow
+environment
+disclosur
+devic
+accommod
+bruce
+evan
+expery
+heller
+smit
+ball
+valencia
+label
+viru
+commemor
+fahd
+unlimit
+siemen
+westpac
+spe
+roubl
+influenty
+trinidad
+sheer
+slb
+castor
+holiday
+engag
+amo
+wagon
+highlight
+butadien
+lankan
+sunshin
+sanford
+litig
+refriger
+phelp
+random
+subdu
+cap
+risky
+porla
+endanger
+greatly
+whichev
+true
+brian
+omission
+reloc
+ceremony
+automak
+burn
+spin
+alert
+dart
+dam
+voyag
+gcc
+licht
+tourism
+walter
+hydroelectr
+mer
+son
+prematur
+paso
+johannesburg
+romania
+sidelin
+reflat
+mo
+clash
+fao
+housew
+ft
+stimulu
+token
+procur
+multin
+predatory
+cawl
+territory
+raid
+barend
+plessy
+downstream
+scatter
+somewhat
+offical
+edition
+irritant
+code
+gear
+amusement
+wound
+huckaby
+retr
+verif
+redistribut
+sett
+lindenberg
+resold
+telecom
+grand
+merit
+hackmann
+hoc
+bahia
+oruro
+ultimat
+mitsubishy
+embarrass
+era
+leach
+ery
+unload
+fatty
+narragansett
+dilig
+nomine
+dupont
+charity
+syndarma
+pity
+offal
+bone
+molpu
+ham
+incorrect
+cheapest
+fujy
+esso
+occupy
+chacapalca
+robin
+andrew
+outward
+imposit
+uproar
+hertz
+eurosterl
+henry
+deflect
+plummet
+rebel
+bangkok
+discredit
+hudson
+sto
+manner
+chien
+cola
+detect
+cushion
+irv
+byrd
+sloan
+creditworthy
+zeebrugg
+townsend
+propon
+warmer
+plough
+barber
+pool
+tug
+ge
+caw
+zair
+iso
+gravity
+seat
+carson
+festiv
+techniqu
+clinch
+businessman
+yuan
+transship
+buoy
+cso
+ica
+politician
+tanjug
+seneg
+resembl
+seafar
+induce
+incorpor
+jiangxy
+outstrip
+carefully
+delta
+csx
+arizona
+visnew
+proxy
+jr
+tertiary
+wang
+forex
+concession
+unfavour
+imo
+king
+gidel
+rosario
+banner
+orient
+counterproduct
+orlean
+ronald
+treaty
+nzier
+ht
+bko
+epac
+antitrust
+composit
+pennsylvania
+kock
+unavail
+reve
+stone
+mass
+supercomput
+ralph
+nervous
+exactly
+withdrew
+pc
+gao
+geodom
+arifin
+siregar
+ramadan
+competitor
+asbesto
+exert
+yearend
+knowledg
+bolivar
+excit
+nikkeiren
+otsuky
+bookrunn
+premy
+exhaust
+streamlin
+technolog
+monopol
+arabl
+meaning
+franco
+anxiou
+southwestern
+donaldson
+jeddah
+oblig
+mere
+der
+wrong
+overtim
+grime
+engage
+pronounc
+demonstr
+wire
+undertaken
+treatment
+panic
+minnesota
+kangyo
+plane
+imper
+leadership
+fomc
+contractu
+inse
+refloat
+flumar
+madigan
+arrest
+villag
+windy
+chry
+adjacent
+assist
+csr
+havana
+geography
+commerzbank
+monsoon
+welland
+loewy
+islamic
+manuel
+sieg
+penn
+stamford
+owen
+shock
+hors
+pave
+taupo
+lpg
+unocal
+command
+stringent
+stricter
+outspoken
+iceland
+doe
+uneconom
+automot
+prudenty
+lull
+chapter
+ineffect
+riyal
+capita
+dealt
+hire
+kaunda
+ethiopia
+kramer
+hail
+louvr
+wmx
+rexnord
+rex
+plea
+grey
+trump
+boundary
+croo
+lufkin
+notify
+recogn
+salaam
+dar
+lobbyist
+internation
+unify
+gsp
+outpace
+occurrenc
+lawy
+disinfl
+lago
+deplor
+transit
+resurg
+hemispher
+anz
+injection
+ny
+beverag
+nederland
+carrington
+orderly
+mombasa
+den
+perceiv
+unsettl
+unwill
+carryov
+wisdom
+russian
+gluten
+grossly
+pasta
+turgut
+ozal
+sir
+arbitrat
+obvious
+melnikov
+found
+lire
+buydown
+pro
+midwestern
+mccarthy
+kaohsiung
+richfield
+nigerian
+grave
+ludwigshafen
+billiton
+paranam
+uphold
+worthwhil
+cie
+germin
+splinter
+baromet
+chair
+disposit
+sporad
+chocol
+pare
+volcano
+counterparty
+stiff
+belgrad
+gm
+spc
+discomfort
+houphouet
+boigny
+forthcom
+clone
+sooner
+garden
+freedom
+maoist
+styren
+misunderstand
+hardship
+polish
+patricia
+gordon
+society
+shrug
+inefficy
+lengthy
+antonio
+deliber
+explor
+upheld
+wine
+motiv
+foundat
+vain
+stormy
+additiv
+slope
+namibia
+narj
+eurofer
+gundy
+jury
+mail
+renam
+anniversary
+attain
+transmit
+clean
+entranc
+craig
+eagl
+md
+amro
+kenneth
+off
+assume
+turnaround
+strand
+deceler
+regim
+saito
+unresolv
+manoeuvr
+clearer
+cheat
+abolit
+ridicul
+auditor
+trace
+supplement
+habit
+enjoin
+allotment
+aspect
+arc
+tide
+statistician
+bitter
+jack
+harcourt
+arkansa
+billion
+ann
+seiz
+regret
+layoff
+exact
+simpl
+conceiv
+sugarbeet
+arbitrageur
+comdata
+southmark
+breakup
+kleckner
+spearhead
+slab
+bangemann
+heap
+sunbeam
+shop
+fuller
+migrant
+unprofit
+tactic
+bleak
+resily
+howard
+bern
+tip
+philip
+expedit
+reportedly
+avaj
+skeptic
+gasp
+sioux
+unpaid
+norsk
+freer
+herman
+portend
+aruba
+alterat
+tripl
+brace
+cam
+austria
+bright
+bcf
+fibr
+compagny
+forgiv
+bernard
+shoe
+briefly
+knock
+cholesterol
+kritchevsky
+noon
+wildlif
+thick
+object
+bbc
+torn
+kawasaky
+uganda
+lp
+young
+peasant
+accrual
+male
+wipe
+gustavo
+bours
+constantin
+boot
+gambl
+park
+thoma
+santiago
+sister
+empresa
+jacob
+semolina
+coalit
+fidel
+enthusiast
+dp
+inward
+upstream
+insider
+comex
+sovereignty
+dia
+repeat
+pentagon
+judgment
+fortnight
+ghanaian
+flesh
+mainten
+cigra
+jenrett
+mcdonnel
+curv
+ip
+van
+conrac
+efh
+rescind
+fluid
+succeed
+banco
+nec
+spadin
+copy
+commonwealth
+heritag
+deflationary
+carniv
+promptly
+suscept
+raider
+csra
+cathay
+lifo
+gh
+austmet
+asturiana
+snowstorm
+agreeement
+cmb
+berth
+ugandan
+han
+nowruz
+ardeshir
+denatur
+waiver
+dozen
+tape
+architect
+jitter
+dark
+pour
+haruo
+eishiro
+bondhold
+reoffer
+cordero
+febr
+leao
+bia
+duff
+condition
+nationwid
+unsure
+lisbon
+collin
+unseason
+departur
+importat
+nstc
+gustafson
+ctc
+reced
+syeduzzaman
+agro
+hussein
+consign
+articl
+saharan
+edt
+opt
+e
+genuin
+susan
+uniqu
+finalis
+professor
+fold
+va
+contrary
+enforcement
+fujian
+cooler
+perpetu
+hardwar
+tally
+chernobyl
+brake
+bacon
+recept
+concily
+nic
+alexandria
+dim
+mcdonald
+plenty
+lacomb
+fnsea
+alfr
+wing
+blow
+jovanovich
+omnibu
+sputnik
+facilit
+coodin
+crowley
+profession
+concret
+parity
+entrepreneur
+conn
+murphy
+candid
+conven
+sympath
+petrolifero
+yacimiento
+comalco
+unnam
+fly
+nielsen
+integral
+unsold
+sympathet
+pinpoint
+pile
+fewer
+yong
+colorado
+privatis
+midy
+shall
+ingredy
+stagnant
+mhc
+student
+leaner
+anglo
+seismic
+nahum
+oversubscrib
+frere
+vaskevitch
+lazard
+verify
+cst
+destock
+cultur
+tow
+appraisal
+andr
+winner
+sc
+embargo
+arthur
+fbc
+norstar
+crack
+placer
+nogal
+spinoff
+jopl
+denwa
+kokusay
+denshin
+resettl
+smart
+forest
+chalmer
+builder
+mdbl
+akron
+keidanren
+core
+leagu
+haity
+osaka
+chosen
+angola
+copyright
+unjustify
+brierley
+scientif
+milton
+invok
+heinrich
+reciproc
+judgement
+purity
+georgia
+destruct
+preferenty
+delight
+digit
+shake
+subsidis
+omit
+maclain
+oppenheim
+baghdad
+blood
+desk
+properly
+unfairly
+sunk
+urgency
+max
+brink
+louw
+wash
+guangxy
+delawar
+wyss
+dinner
+natwest
+occasion
+pipe
+dress
+na
+madrid
+fran
+sgl
+shc
+zimbabwean
+maekawa
+annoy
+pgulf
+muddy
+oilpatch
+earner
+cloud
+gazett
+instanc
+segreg
+tmoc
+victoria
+beaumont
+fort
+andriessen
+vieux
+montana
+apea
+grangemouth
+ol
+iea
+kato
+rent
+extraction
+and
+albeit
+dinar
+ucl
+bird
+flatly
+lane
+norfolk
+pegasu
+tele
+lifestyl
+untru
+grootvley
+britannia
+shaft
+colliery
+vaal
+menu
+acceptabl
+campbel
+hay
+beghin
+vern
+complic
+hanson
+captur
+orion
+municip
+statutory
+tremor
+chung
+inquiry
+celebr
+congest
+lee
+accomplish
+government
+space
+hourly
+franchis
+hammer
+moslem
+legitim
+eighth
+aris
+lavera
+marc
+umbrella
+tenneco
+tail
+amt
+pastur
+bancshar
+wifo
+beneficiary
+similarly
+myer
+bankamerica
+suspect
+mistak
+exploit
+agribusy
+guillaum
+aquino
+corazon
+discret
+ovr
+frazy
+unc
+born
+steam
+feket
+sophist
+mason
+asean
+propaganda
+bac
+expiry
+erosion
+suez
+saddam
+identic
+represent
+usa
+thaw
+shorten
+prudent
+jail
+special
+town
+rod
+confin
+buoyant
+sky
+reactiv
+hoar
+govett
+umuarama
+paranavay
+jon
+simao
+votuporanga
+guatemalan
+maringa
+rosenbaum
+kaul
+reimposit
+reintegro
+londrina
+catanduva
+rid
+leo
+circl
+leeway
+evacu
+boliden
+fiduciary
+treat
+pratt
+geograph
+eaf
+sunter
+cgct
+lindner
+theta
+sm
+consortia
+sfx
+cdn
+icc
+irish
+disadvantag
+surprisingly
+forint
+hydrocarbon
+chittagong
+compat
+suprem
+print
+kohl
+older
+petricioly
+goldfield
+reinstat
+mith
+remind
+recruit
+committ
+imputat
+tvx
+tgt
+international
+impression
+dome
+inroad
+evenly
+retreat
+revolut
+uptrend
+gabon
+gene
+moltk
+walk
+lacklustr
+calory
+rational
+swift
+imped
+explicit
+hazard
+atlanta
+bd
+fir
+recapit
+outlet
+slid
+viermetz
+kidokoro
+seaway
+quadrupl
+awful
+algemen
+clinton
+henriqu
+captain
+icebreak
+locomot
+downsid
+numer
+ripe
+delor
+orchard
+miy
+mclean
+moham
+solomon
+conjunct
+staley
+ply
+pel
+shy
+bold
+manpow
+mislead
+sydney
+fishm
+ap
+rafsanjany
+aggressor
+ergenc
+provincy
+virginia
+chiefly
+shex
+simon
+eysken
+btu
+media
+fine
+retriev
+commenc
+onstream
+checkoff
+botswana
+unsubordin
+outweigh
+phone
+denman
+translat
+bud
+of
+dedic
+encompass
+conciliatory
+saft
+abundanc
+broaden
+destrehan
+contend
+tast
+undertook
+collateralis
+tokay
+footwear
+hospit
+anonym
+alabama
+loosen
+saleh
+eastward
+trim
+gorbachev
+agip
+tourist
+poorest
+diagnost
+spoken
+sucr
+fellow
+outer
+liquify
+refug
+mlotok
+hess
+cure
+tam
+satur
+dansk
+unissu
+moo
+paic
+bc
+edelman
+lce
+woolworth
+sandra
+bottleneck
+anybody
+lusinchy
+capital
+rome
+panamanian
+unrelat
+airliner
+invitat
+underestim
+ferdinand
+speedy
+carbid
+shield
+contempl
+apparel
+christian
+wonder
+rememb
+ring
+subsist
+ibj
+renault
+anza
+sovereign
+pocket
+rozich
+reclaim
+audit
+voter
+madagascar
+ppy
+sprinkel
+beryl
+banca
+zhejiang
+wrinkl
+intermediary
+fuell
+undevelop
+unexpectedly
+millimetr
+cgp
+siegler
+bell
+smolinsky
+irration
+ron
+eurostat
+reluctantly
+scandal
+mulroney
+sidetrack
+prt
+recover
+polyethylen
+hook
+metropolitan
+ride
+australasia
+percent
+rude
+mathemat
+stalem
+stifl
+discriminatory
+amp
+hefty
+nova
+goldendal
+nutrit
+sabotag
+even
+suitabl
+allege
+austrian
+cby
+shore
+malagasy
+jpm
+dougla
+glass
+reactor
+homebuild
+colombo
+kay
+blend
+mart
+inland
+wale
+urban
+tobago
+pillsbury
+devel
+mato
+pulp
+ought
+fortnightly
+stave
+gestur
+sacrific
+vendor
+schultz
+ev
+lewy
+istanbul
+overcom
+saddl
+nitrogen
+libyan
+ngc
+drag
+fabric
+guidanc
+recoup
+mozambiqu
+recipy
+contractor
+yugoslavian
+abrassuco
+citrosuco
+cutral
+midseason
+enof
+realtor
+undercut
+graaf
+diver
+hulk
+sank
+amortiz
+buttros
+struggl
+allegat
+singer
+distanc
+salt
+dull
+fellner
+impedy
+gibb
+bumper
+eleven
+batter
+rubio
+yukon
+pittsburgh
+flower
+pertain
+turmoil
+blanket
+hfag
+arctic
+remodel
+penny
+alex
+ultra
+teacher
+susumu
+taketomy
+length
+school
+my
+norman
+exclusion
+cathol
+cracker
+recalcul
+unequivoc
+lopez
+agricol
+apc
+crane
+inertia
+improbabl
+vienna
+mud
+wane
+democracy
+dispatch
+harden
+pire
+condemn
+oversight
+vitamin
+cosmet
+ibm
+colour
+cancer
+applicabl
+horner
+anthony
+conglomer
+relev
+violent
+oy
+zorinsky
+expose
+fred
+shipper
+musa
+pzl
+quell
+breakthrough
+magnum
+wake
+pearl
+catapult
+grocery
+tier
+montgomery
+mikhail
+inclusion
+capel
+fry
+prepay
+bayou
+recycl
+caph
+swire
+swpc
+quevedo
+patricio
+medy
+alice
+density
+transform
+accomod
+contruct
+izvestia
+galvan
+forfeitur
+micro
+counsel
+joao
+berger
+screen
+richest
+nelson
+baird
+selloff
+verg
+nondur
+slate
+abdul
+shallow
+tian
+jiyun
+indice
+toyota
+overdu
+unnecessary
+isda
+roach
+cia
+foodgrain
+swept
+suburban
+edgar
+inconclus
+raul
+radic
+haul
+standby
+superior
+convey
+honour
+shanghay
+mariano
+hunt
+champion
+trademark
+cambist
+coooper
+vicker
+nev
+revlon
+westdeutsch
+walt
+disney
+southland
+slc
+specialis
+thrust
+softer
+allowabl
+kk
+swell
+larry
+ilacqua
+exempt
+coat
+infect
+saint
+albert
+expatry
+pechiney
+preclud
+antwerp
+mercury
+skill
+crystal
+reflationary
+innov
+gerard
+lear
+junior
+brew
+game
+titl
+michigan
+impair
+adjustabl
+roderick
+accordanc
+abate
+breaker
+pry
+enrichment
+apart
+fernand
+complement
+samuray
+raytheon
+southeastern
+accompany
+catastroph
+archy
+rosenberg
+dunham
+cnp
+emission
+snap
+assure
+electro
+carolina
+penc
+bounc
+stoltenberg
+pollut
+prudho
+breakout
+rough
+prat
+armstrong
+dissemin
+pesch
+gabelly
+astral
+rko
+theater
+jeumont
+sumner
+telephoniqu
+validly
+pglo
+invalid
+submers
+khj
+zico
+lard
+garlem
+gate
+unwant
+kim
+degussa
+connecticut
+lodg
+film
+ey
+attainabl
+deeper
+unicorp
+negara
+benson
+insur
+jone
+bet
+globo
+roger
+capitol
+roman
+harsh
+cax
+fumio
+irwin
+allot
+alton
+founder
+gratify
+multipl
+und
+insure
+burma
+scene
+mamman
+prospectu
+admission
+martha
+bcom
+ditch
+spectr
+offensiv
+backdrop
+telegraph
+style
+escudo
+landslid
+laps
+pain
+alusuiss
+interag
+retrain
+tony
+newcastl
+commonly
+fragil
+smoke
+kisumu
+down
+yanny
+kilometr
+tanaka
+avalanch
+ldc
+austin
+modif
+tube
+coffin
+kurt
+nkkt
+kokan
+deng
+inspirat
+tigrel
+acute
+perfectly
+itsu
+exacerb
+wrought
+soak
+camdessu
+unalloy
+extrusion
+billet
+ipay
+unwrought
+glen
+marco
+bh
+almaden
+retroact
+depriv
+racy
+minim
+victim
+storm
+expression
+cyru
+jardin
+arco
+tate
+hoechst
+profil
+punish
+overburden
+omb
+coren
+pora
+fungu
+ppn
+farouk
+rrim
+crepe
+rric
+egyptian
+tumbl
+blip
+strenu
+electricit
+postur
+hkg
+evident
+insulat
+isa
+indosuez
+scarc
+burst
+nut
+pe
+caa
+cordovez
+privatbanken
+hecha
+stal
+mena
+wagg
+eib
+tankoku
+ortiz
+master
+swiftly
+devis
+martel
+conductor
+pivot
+column
+jackson
+sue
+welfar
+caught
+seedb
+undergo
+resend
+circuit
+seminar
+die
+welt
+minstar
+alleghany
+rospatch
+colo
+telesy
+prefix
+tonner
+adhere
+contest
+oak
+kick
+fade
+overreact
+lusaka
+cominco
+wouldn
+ldp
+kyodo
+channon
+semiconduct
+saba
+dawkin
+noir
+bipartisan
+kuroda
+shoichy
+makoto
+lopsid
+kilobit
+imy
+dillon
+indentur
+thomson
+watanab
+darwin
+diw
+voluntarily
+speed
+bnl
+gome
+denny
+withheld
+robbin
+hardlin
+corner
+insurer
+lichtenstein
+payback
+devot
+vacanc
+appointment
+odd
+rotat
+image
+bootl
+extinguish
+cpy
+protract
+colony
+threshold
+nazional
+accordingly
+melbourn
+ranch
+aqazadeh
+gholamreza
+stat
+guayaquil
+qaba
+hydrocrack
+netback
+statoil
+ecopetrol
+taqy
+qassem
+cepe
+chalaby
+gareth
+bonny
+prorat
+polym
+appearanc
+ethiopian
+seventh
+truste
+loath
+loos
+eric
+score
+fate
+tsukihara
+hbj
+hormon
+fargo
+liberia
+nem
+interconnect
+bomb
+su
+bancroft
+foothold
+cvg
+beira
+lefebvr
+codelco
+suppos
+judy
+stearin
+breath
+takashy
+lunchtim
+un
+elder
+women
+bull
+casino
+henley
+citizen
+stall
+gmbh
+pizza
+diversif
+breakwat
+thoresen
+tietmey
+schlecht
+lifetim
+idaho
+license
+idb
+rhode
+tooth
+marketplac
+kleinwort
+lie
+easter
+domingo
+pennzoil
+franz
+tower
+influx
+shipyard
+dr
+manipul
+stefan
+unbalanc
+injure
+horizon
+cob
+catalyst
+sweep
+nacion
+anchor
+cb
+kouam
+languag
+alp
+abnormal
+muldoon
+nelissen
+redoubl
+log
+koichy
+hofer
+malta
+hongkong
+unwarrant
+sally
+azpurua
+raymond
+journal
+startup
+nonrecur
+cater
+keef
+squar
+deferr
+fiat
+cement
+amerada
+eromanga
+moony
+buildup
+brkn
+pwj
+blank
+expos
+fre
+page
+unawar
+cme
+editory
+slacken
+hinder
+coil
+inelig
+remedy
+hiroshy
+exagger
+multifood
+hawaiian
+cultiv
+rodino
+hart
+accountant
+mph
+blizzard
+leak
+ramnath
+hk
+takahashy
+unithold
+abid
+leclerc
+idrocarbury
+reconcil
+safeguard
+blanca
+clancy
+reconsid
+heir
+loom
+piec
+gazeta
+amnesty
+neill
+watcher
+abrupt
+disincent
+juergen
+pretoria
+olin
+homeland
+cameron
+rpy
+freddy
+corrupt
+ferrou
+airway
+oversupply
+eager
+katz
+hawaiy
+lid
+hector
+zen
+manganes
+yasuda
+unleash
+mcivor
+gaspar
+yergin
+rabobank
+depot
+naira
+inferenc
+autonom
+joseph
+dieter
+wisconsin
+fleme
+zoet
+wedd
+trintoc
+methanol
+offshoot
+appl
+likew
+peac
+pakistany
+teck
+conveyor
+salmonella
+arkla
+chloramphenicol
+inedibl
+statut
+scandinavian
+symbol
+rainbow
+veteran
+toyko
+gary
+danforth
+greas
+ordinat
+frighten
+jamaican
+pst
+eye
+redirect
+unaudit
+fought
+amd
+mitterrand
+rady
+kobe
+substanc
+mccormick
+underton
+nepal
+familiar
+toshiba
+sindt
+asarco
+northeastern
+rata
+mel
+coffer
+dodg
+dbp
+taipey
+lure
+rigid
+alongsid
+sport
+eastman
+kodak
+nasdaq
+median
+scotland
+cruis
+reassur
+docemart
+ventspil
+westinghous
+marcel
+forestry
+anyway
+watson
+ph
+delic
+eduardo
+urgently
+amax
+karnosky
+grenfel
+stuck
+backward
+mold
+strap
+leap
+upwardly
+carolin
+mapl
+yu
+reservoir
+durat
+span
+scotia
+holm
+thrown
+tung
+wool
+gralewicz
+fritz
+kiel
+liro
+symposium
+enthusiasm
+ensur
+mastercard
+pierc
+undesir
+financier
+altogeth
+seipp
+au
+foreshadow
+personnel
+mina
+hindustan
+rack
+psy
+fals
+equitabl
+kelvin
+readily
+paperboard
+tie
+lin
+polar
+existenc
+kittiwak
+viceroy
+mccoy
+ketza
+witt
+doyon
+tebereby
+levon
+ridgeway
+cinema
+cpl
+billon
+overly
+allianc
+mask
+sleeper
+hasn
+novo
+nazionaly
+zuccherificy
+eridania
+shelv
+showdown
+discrimin
+feedstock
+rash
+outokumpu
+astro
+display
+depositor
+focuss
+deadly
+idd
+bankrupt
+andean
+hank
+mckinnon
+vranitzky
+ftc
+outperform
+wil
+presplit
+accentu
+impass
+magazin
+donat
+contenty
+erik
+render
+phoenix
+parcel
+qintex
+ariz
+bil
+tampa
+schneider
+bnr
+gwf
+klm
+anderson
+repatry
+braverman
+milan
+agrio
+uphill
+koey
+narusawa
+wrote
+flush
+ita
+imagin
+lloy
+tel
+document
+mtbe
+shin
+paint
+runaway
+iry
+administ
+juan
+steeply
+swollen
+paus
+dual
+pepsico
+rpt
+detroit
+fetch
+thwart
+hayne
+scrambl
+reimpos
+kertosastro
+dharyono
+escalant
+paton
+arabica
+ah
+cm
+unidentify
+roy
+perish
+neptunia
+milwauke
+btlr
+buckstein
+renouf
+soriano
+narr
+dubily
+messeng
+shv
+bilzerian
+irvine
+refil
+depos
+mania
+mcv
+welsh
+dal
+leroy
+mathew
+soro
+arena
+calny
+ocf
+pincu
+predat
+symbion
+fibergla
+mh
+aquir
+bankhau
+rpch
+batm
+asher
+armtek
+gardner
+kjell
+symb
+itj
+acquirer
+norcro
+redston
+ent
+fernandez
+dana
+nugent
+expertis
+explanat
+amtorg
+taught
+wally
+scottish
+counten
+anxiety
+jerom
+flare
+chicken
+albany
+java
+despatch
+amlc
+frawley
+inexpens
+overwhelmingly
+sara
+foreclos
+maracaibo
+glimps
+recaptur
+ross
+optimal
+ra
+father
+equip
+clifford
+crk
+forma
+furnac
+fixtur
+clout
+theory
+liff
+karachy
+norton
+barreto
+successor
+hurdl
+let
+infusion
+sucralos
+kain
+mackay
+politoff
+yulo
+sra
+ignore
+nick
+defy
+fare
+lean
+spite
+hitachy
+cornerston
+closest
+observ
+overwhelm
+thrift
+guin
+nsc
+gaf
+tune
+sincer
+pnb
+yanke
+bnp
+impractic
+fnma
+tougher
+nashashiby
+hwwa
+bethlehem
+kirkland
+mac
+ar
+visa
+nobl
+picken
+ko
+unsuccessfully
+abm
+inconsist
+graphic
+dram
+rediscount
+comecon
+magnitud
+roubaty
+rundown
+proof
+jen
+punch
+ironic
+gobain
+constrain
+fm
+ramon
+jeffery
+pak
+cenergy
+usg
+prudenc
+arsenal
+grape
+prescript
+mcleod
+balk
+weir
+huntington
+stern
+contractionary
+prov
+psl
+collis
+understat
+discard
+unhappy
+dwindl
+allegedly
+airbu
+gloomy
+overallot
+bureacracy
+prescott
+turben
+heel
+mueller
+lt
+like
+bin
+reproduct
+sag
+chronic
+fighter
+marcano
+invers
+scania
+ltcb
+pru
+evergreen
+saab
+epargn
+relay
+swinglin
+volksbank
+panacea
+balo
+milbank
+laury
+kontrollbank
+disapprov
+hokkaido
+bot
+inco
+lafalc
+machinea
+dnc
+multicurr
+hamburgisch
+sacrif
+garanty
+euratom
+leiner
+query
+hall
+unfound
+sroka
+macroeconom
+kerridg
+ik
+inspector
+reassembl
+stubbornly
+inhibit
+equall
+triangl
+harold
+remit
+cove
+canamax
+inabl
+snyder
+falter
+healthcar
+pete
+norry
+perry
+jano
+euromoney
+dresdner
+envoy
+afloat
+medicin
+clock
+fluegel
+alike
+isra
+shandong
+safeway
+maray
+indentify
+petrofina
+inaccur
+groundwork
+wrap
+smallest
+byron
+supervis
+vertic
+characterist
+miny
+unaffect
+probe
+biotechnology
+preussag
+blunt
+layer
+att
+richter
+catalog
+bayer
+organic
+ccr
+varity
+ln
+fl
+thirdly
+stiffer
+harmony
+regularly
+promissory
+hungarian
+substant
+ldt
+iida
+shipbreak
+mhy
+britoil
+antibiot
+grantor
+yao
+marten
+simmond
+infancy
+ok
+hal
+history
+bio
+nc
+genm
+galact
+sigma
+lubric
+camp
+formul
+conform
+enlarg
+analyz
+desjardin
+renounc
+particulary
+rollback
+readjust
+reassess
+hermann
+arden
+brewery
+reign
+shot
+jacksonvil
+aluz
+immigrat
+rby
+flew
+ideolog
+paty
+emp
+reichhold
+ascertain
+calf
+baht
+submiss
+schweizerisch
+carv
+inflexibl
+heching
+paydown
+aep
+ltv
+sulfid
+gerald
+indexat
+lightly
+perspect
+tragedy
+newfoundland
+goldston
+rebuf
+array
+riot
+overstat
+henderson
+erect
+forg
+behaviour
+cgrt
+hull
+kaakebeen
+zeebregt
+svz
+ruben
+watersid
+liberian
+habbema
+reflo
+rosenmul
+schoufour
+casualty
+robot
+hostag
+thinly
+distinct
+hann
+obviou
+flurry
+collabor
+fsb
+er
+zurich
+pine
+necess
+butler
+spray
+taxabl
+tiny
+buyback
+ruler
+ald
+satellit
+fashion
+pbt
+fronty
+orientat
+kentucky
+supervisory
+pesticid
+brett
+truer
+westbank
+cambior
+verein
+lesley
+newport
+lyon
+mauritiu
+decay
+mixtur
+robinson
+simplify
+stow
+cmac
+abn
+pfennig
+undetermin
+categor
+attorney
+bacteria
+neglig
+abort
+cha
+incom
+pet
+br
+jeep
+notehold
+transco
+sensibl
+siew
+bergsten
+heng
+hy
+markka
+unsatisfactory
+clark
+somc
+tenny
+earliest
+renov
+appetit
+hf
+mich
+vat
+rodney
+anticompetit
+visitor
+edmonton
+by
+satisfact
+seamless
+thyssen
+tab
+coven
+kampuchea
+loral
+whatsoev
+porter
+friend
+cigarett
+mmc
+ninth
+defe
+wal
+temptat
+inactiv
+corridor
+tangibl
+paramet
+flourish
+mellon
+resurrect
+bomany
+escrow
+patch
+kais
+sgep
+bureaucracy
+a
+presum
+conscy
+bty
+underperform
+exhibit
+thank
+dissid
+gurante
+halv
+paragraph
+wedg
+glw
+hemminghau
+irna
+deeply
+converg
+theoret
+rigor
+pb
+capitalis
+oesterreichisch
+resel
+transamerican
+conced
+wendy
+kredietbank
+baudouin
+compulsory
+trail
+amortis
+kaneb
+westlb
+penetr
+schill
+endeavour
+torpedo
+accessibl
+disagr
+kyat
+foam
+quicker
+kern
+blair
+norddeutsch
+mim
+affinery
+wyom
+ed
+parsley
+bush
+innovat
+erratic
+brisban
+fend
+philipp
+liu
+drove
+oral
+foresaw
+vm
+inherit
+beetl
+standpoint
+chen
+conveny
+barbara
+nat
+stamp
+hilton
+mn
+bilion
+fecom
+scrutiny
+boon
+endaka
+unfortun
+cil
+relaunch
+hock
+pte
+boy
+deem
+facsimil
+hurry
+fring
+wealth
+rip
+steven
+prestig
+garag
+mlp
+cre
+wealthy
+keersmaek
+angry
+tsba
+ual
+wy
+nar
+solvent
+kellogg
+columbu
+flown
+guillermo
+jeopard
+helm
+gq
+grumman
+explosiv
+skew
+trunk
+pessim
+tanzanian
+tanga
+proportion
+weapon
+envision
+trustco
+spokesperson
+wisenbak
+lichtblau
+ranger
+nanc
+shoup
+ypf
+nativ
+orbit
+weren
+cairo
+flt
+itoh
+okay
+pierr
+gld
+thermo
+func
+rifa
+nerco
+sake
+quantify
+dbkg
+kraft
+zayre
+dayton
+midyear
+princevil
+beauty
+pvdc
+shine
+crow
+veba
+immunity
+crippl
+till
+increment
+bosphoru
+regrett
+burlington
+specter
+shenzhen
+ongo
+thoroughly
+nz
+sword
+tasmania
+morry
+belg
+activat
+ericsson
+kdd
+linotyp
+monsanto
+idc
+dublin
+mtc
+henkel
+synergy
+vision
+suchard
+scuttl
+eny
+carbozulia
+landmark
+berman
+breakfast
+goh
+hockin
+suntrust
+fnb
+stagger
+reiner
+wim
+neglect
+newman
+proud
+nsw
+filter
+anytim
+permian
+dissatisfact
+nichola
+arnold
+microwav
+lazy
+withstand
+saskatchewan
+ppw
+pacificorp
+peninsular
+porl
+nursery
+crosby
+author
+revert
+strongest
+alien
+deepen
+rjr
+nabisco
+armacost
+fendt
+oky
+neyra
+hata
+frenzel
+carney
+her
+yamamoto
+carlsson
+clearcut
+bash
+frolov
+grappl
+pep
+holt
+cassett
+icy
+cnt
+lion
+elector
+convict
+admiral
+angel
+adedejy
+tesfay
+he
+roberto
+instruction
+inappropry
+steamship
+illusion
+wilcox
+plateau
+stripper
+ngl
+maya
+yanbu
+rahim
+rrt
+mckinley
+cnooc
+wildcat
+operatorship
+entitlement
+efp
+jukardy
+aguarico
+pancanadian
+wattary
+wam
+haltenbanken
+oapec
+chl
+shojy
+quantum
+dmp
+dhaby
+diet
+reshuffl
+abu
+ely
+assembl
+involuntary
+ferro
+academ
+sentenc
+caecl
+foncy
+equipement
+incomplet
+phrase
+ruptur
+contributor
+editor
+genentech
+megawatt
+canton
+fenner
+disgruntl
+cbkg
+cambridg
+grigg
+oriental
+player
+ernest
+reclassify
+semiannu
+mop
+sausag
+pr
+pont
+sb
+cell
+assert
+lavoro
+laser
+tag
+ek
+hasty
+walkout
+static
+metro
+gemeinwirtschaft
+fuer
+reseed
+carload
+alfalfa
+legum
+mitsy
+pse
+meyer
+crise
+fcy
+induc
+emerson
+da
+reward
+girardin
+rico
+murakhovsky
+applicant
+vagu
+elizabeth
+ss
+classify
+trial
+conner
+nobuo
+lab
+ten
+contra
+bona
+nilsson
+ncpa
+aerojet
+sarl
+ito
+plaintiff
+pantera
+doresy
+atchison
+therapy
+kuhlmann
+pant
+minory
+matthey
+deak
+alw
+allwast
+amkg
+hawkin
+arkady
+beecham
+gnb
+matra
+novamin
+laroch
+aloha
+kleen
+dental
+pensacola
+sarasota
+lft
+outbid
+kaplan
+lpx
+cojuangco
+cablevis
+monica
+smc
+amicabl
+ssbk
+gardiny
+rtb
+fcsy
+ajinomoto
+ucpb
+diaz
+mcalpin
+kistler
+kenosha
+jpn
+stora
+silent
+rosewood
+conder
+reph
+vulcan
+shelter
+unwelcom
+gtx
+chancery
+ceasar
+bpy
+magnat
+barwon
+marriott
+skp
+benequ
+eckenfeld
+hunter
+knowlton
+rban
+mne
+mdnt
+dca
+halcyon
+iml
+antill
+ariadn
+reconsider
+studio
+hollywood
+kgaa
+fragranc
+databas
+forb
+hillard
+ffmc
+sawmil
+unlist
+pac
+wit
+mitchel
+whitehead
+bally
+getty
+guy
+quo
+pall
+highveld
+vanadium
+violenc
+wasn
+viewpoint
+rhine
+endotron
+nl
+pn
+fox
+bat
+canbra
+gcn
+laidlaw
+posttax
+healthmat
+atco
+reg
+qualif
+ifo
+kogyo
+trico
+tro
+nort
+nesbitt
+foreclosur
+sear
+roebuck
+gale
+ho
+cleveland
+counteract
+courag
+thermal
+riyadh
+terror
+fbt
+bhp
+midmorn
+inn
+ind
+adam
+sama
+nonperform
+wilder
+supplementary
+stun
+solidar
+nmic
+valentchit
+camera
+fierc
+caf
+aziz
+stark
+lump
+bkb
+lincoln
+disc
+gelco
+map
+geotherm
+rectify
+glesk
+microprocessor
+bearer
+spethmann
+deb
+lucky
+nataly
+rene
+culmin
+lucr
+unfavor
+writer
+redman
+hazelnut
+caesium
+receivership
+fcc
+abuse
+transpacif
+acico
+cindasa
+burgess
+cyanid
+doug
+nairoby
+poorer
+sideway
+cede
+whittak
+penney
+immens
+reid
+tayer
+phlx
+giordano
+misunderstood
+intn
+bed
+recalcitr
+counterfeit
+hemsley
+panamax
+hss
+gibraltar
+barker
+mccormack
+ganapin
+niedermey
+ixl
+eurodebt
+sayad
+escc
+lyphom
+edf
+eximbank
+sapporo
+gasuny
+csfb
+eurocommercy
+travaux
+autorout
+eurofranc
+guarantor
+copenhagen
+seixa
+adamant
+oldsmobil
+nordic
+undersubscrib
+lmed
+embrace
+padua
+eurofima
+pnta
+nmb
+bagliny
+svetozar
+bankasy
+dg
+dcn
+duquesn
+bfce
+fond
+pentair
+kyowa
+exterieur
+atomic
+rikanov
+pankky
+okongwu
+bgc
+cocain
+osake
+fnbf
+mtech
+repackag
+reprogram
+rheinland
+fatigu
+pfalz
+creditbank
+grindlay
+chock
+jaffray
+mainfram
+mobiliar
+nasd
+hopwood
+handelsbanken
+lax
+tradabl
+etat
+gnma
+cohn
+kansal
+soc
+enskilda
+atc
+italiano
+scare
+mtch
+unrecover
+mead
+mea
+dire
+toxic
+harvard
+sunny
+vry
+authorit
+intangibl
+captiv
+ef
+rift
+overlook
+mcminimy
+awf
+bwb
+kerin
+krenzler
+iac
+kcbt
+blue
+isn
+abidjan
+revok
+carol
+greenwich
+psa
+fiddl
+rollov
+twelv
+fraud
+spun
+downtown
+bld
+transworld
+brewer
+amy
+securit
+hing
+enserch
+ub
+wako
+at
+carter
+ryavec
+allegy
+belgo
+fhl
+goodyear
+kep
+eugene
+disallow
+itt
+craft
+punit
+erod
+chemy
+walker
+tucker
+gte
+andersen
+gape
+art
+christoph
+fso
+contraven
+santana
+sq
+pad
+pemberton
+schmidt
+peat
+luncheon
+detent
+beset
+sizabl
+knew
+perc
+unilev
+highway
+granit
+repugn
+seng
+stch
+sohio
+gasper
+crandal
+bailey
+baulk
+cofac
+unrespons
+cleric
+bermuda
+barrick
+prosper
+slice
+ritterbusch
+murray
+material
+alternat
+ac
+nhy
+canterra
+marker
+love
+geigy
+ciba
+med
+bwrlf
+organ
+ir
+frederick
+basf
+capper
+greet
+reconstruct
+reput
+plagu
+warren
+boe
+grass
+decatur
+multiyear
+stainless
+quicksilv
+pere
+grapefruit
+tangerin
+unreason
+sy
+oust
+explicitly
+sanchez
+lemon
+brass
+cellular
+feeder
+geray
+involvement
+repris
+weakest
+pan
+unlawfully
+dig
+mnd
+absent
+lechin
+gsa
+verdict
+goodwil
+svenska
+apartment
+olson
+nonaccru
+republicbank
+rowntre
+mackintosh
+nynex
+aerosol
+cryogen
+bishop
+downtrend
+textbook
+undu
+stuart
+compos
+lieu
+sperry
+agricola
+finanziaria
+valv
+rickel
+darta
+harvey
+carpet
+mateo
+revolt
+phenol
+ozone
+cfc
+bisphenol
+reviglio
+raimond
+polyphenylen
+aristech
+nbh
+norgold
+moy
+reinvest
+timberland
+levin
+wirsbo
+church
+metallgesellschaft
+prawiro
+radiu
+hemlo
+maison
+technician
+guzman
+exit
+couldn
+montedison
+unquot
+skeoch
+shrewd
+politick
+plug
+scarcity
+industrial
+seam
+jucker
+shaw
+baby
+gase
+rcy
+misguid
+constantly
+sore
+tarrif
+insolvenc
+nearest
+sila
+questionnair
+unregul
+maud
+bfg
+complementary
+rele
+curty
+forerunn
+bsc
+outset
+ecolab
+nobel
+toyo
+out
+beta
+diverg
+platt
+belcher
+sullivan
+dune
+sabin
+liedtk
+devon
+alive
+lebanes
+pontiac
+hamilton
+void
+infring
+hidden
+tl
+kilowatt
+morrison
+saga
+satisfactorily
+mackenzy
+fo
+tpn
+rafael
+operabl
+celanes
+linear
+printer
+nyse
+alpha
+mony
+lebanon
+academy
+jcp
+foray
+matsushita
+tacit
+toppl
+ryan
+tmo
+junk
+backer
+lor
+freighter
+planner
+quasy
+beck
+pier
+industrialist
+hypothecair
+collectivit
+bake
+predecessor
+herrhausen
+taper
+paraguay
+hugo
+fdic
+upheaval
+gould
+tsco
+amoskeag
+tesco
+wise
+compact
+cohen
+dunn
+reconstitut
+ammar
+iafmm
+overturn
+jwc
+ppg
+marshal
+taka
+strang
+liberty
+govt
+dash
+clement
+kahn
+burger
+baldwin
+towbin
+istituto
+hia
+unterberg
+nord
+toy
+goodrich
+condom
+dispens
+charact
+customarily
+bankverein
+rugerony
+southwir
+berton
+sixteen
+unrealis
+leal
+whip
+frigid
+royce
+matin
+marion
+leigh
+theme
+lilaratn
+chee
+polysar
+corynespora
+ric
+aromat
+sonex
+dioxin
+polystyren
+bolt
+fy
+hoffman
+sat
+redeploy
+fountain
+globe
+beverly
+bouygu
+tinto
+npt
+prey
+neco
+recurr
+simmon
+icg
+tianjin
+dhaka
+underus
+gin
+stillmann
+dl
+harman
+classif
+wellington
+digest
+covert
+stahl
+massachusett
+genet
+ing
+sergeyev
+opponent
+detriment
+ommeren
+regent
+lugar
+deterr
+cbot
+hsn
+adb
+nissan
+wheel
+brook
+milo
+mayer
+brennan
+fauber
+bhd
+handy
+pertamina
+conagra
+uac
+wick
+shekel
+mcneil
+flotat
+recal
+rehear
+pitt
+quaker
+bristol
+ma
+tok
+echlin
+optic
+hartford
+whitehal
+calgary
+scb
+wessberg
+cigz
+cheaply
+disk
+combust
+magnet
+lilly
+arose
+pby
+vancouv
+howel
+mapara
+tazara
+chitambala
+rgc
+centromin
+pasar
+chuquicamata
+seguel
+cobriza
+wirebar
+mdp
+toufexy
+fathy
+siedenburg
+iwcc
+alexand
+webber
+puerto
+curacao
+outboard
+gillett
+handelsblatt
+iel
+piper
+nsan
+ken
+sogen
+hambrecht
+roma
+chevrolet
+quist
+valero
+infringement
+gra
+vlo
+concurr
+westphalia
+bly
+hon
+honeywel
+notif
+entail
+riyad
+unwind
+lorenzo
+foremost
+moral
+taylor
+initial
+leonard
+acm
+fa
+moin
+impressiv
+wolfgang
+im
+fwb
+mesa
+headlin
+comissaria
+cpa
+hang
+sanwa
+modestly
+endo
+levesqu
+beaubien
+augment
+tektronix
+mf
+minorco
+cra
+mnrcy
+shon
+bovery
+hre
+rth
+unreal
+cntr
+falloff
+ead
+potomac
+pom
+precambrian
+technodyn
+jamesway
+metromail
+bbcz
+shoney
+spartech
+atcor
+df
+bfy
+mdt
+reclassif
+hmy
+mcic
+omcm
+sptn
+mcy
+omnicom
+all
+eqk
+salant
+pma
+flo
+koninklijk
+holly
+danah
+wilfr
+dime
+ivaco
+cmy
+notel
+mansion
+dalton
+allison
+ldmfa
+novl
+wallac
+mmct
+hmte
+downsiz
+insua
+gty
+arb
+petry
+manny
+geo
+biomed
+moe
+spy
+ttx
+electromed
+dhr
+inp
+swissair
+tultex
+dist
+nwa
+helicopt
+leaseback
+garment
+leather
+mot
+murtha
+gurria
+rocky
+ben
+shing
+richardson
+mrc
+hawley
+freeport
+jard
+matheson
+bradley
+bernstein
+ssmc
+asamera
+galcf
+duplic
+vacant
+hut
+cote
+oilman
+societa
+nurs
+showa
+purs
+evolv
+forse
+lone
+larsen
+brunswick
+essex
+androsch
+babcock
+music
+cont
+vanguard
+cry
+punt
+turk
+asahy
+louisvil
+germain
+pye
+zimmer
+defraud
+frivol
+influenza
+infection
+uy
+unisy
+library
+macandrew
+trailer
+foodservic
+suffield
+csbk
+jonathan
+fichtel
+mmwg
+oustand
+hundredth
+wx
+marvin
+hawker
+teamster
+chimy
+gluck
+meridian
+crg
+siddeley
+trelleborg
+vebg
+mannesmann
+salem
+smb
+dusseldorf
+ay
+noax
+neoax
+carlton
+mnst
+pcr
+sk
+winthrop
+learjet
+glj
+knight
+lang
+colly
+swearingen
+cct
+ebully
+populair
+intact
+doldrum
+orlando
+fever
+carmak
+quotat
+applaud
+marietta
+prod
+woe
+avail
+ram
+mayor
+later
+ladenburg
+thalmann
+ecgd
+samsung
+deck
+fourteen
+kerna
+avian
+endevco
+trunklin
+lm
+clg
+physician
+cag
+indemnify
+rochest
+wluk
+fc
+hampshir
+clabir
+bramalea
+buse
+vermont
+corport
+gmp
+cruz
+orginal
+salina
+wol
+teapa
+stride
+stopov
+mee
+lara
+nickl
+dignity
+appalachian
+hu
+simonsen
+counterclaim
+sonat
+russel
+puzzl
+creditanstalt
+adr
+bend
+yarn
+regenc
+ivan
+wertheim
+chairmen
+bancorpor
+obsolet
+intergroup
+kendal
+berlin
+perfect
+overhead
+safer
+fin
+boiler
+beat
+depositary
+soley
+tandem
+holden
+cole
+beliv
+epsilon
+ridg
+chu
+simex
+bhf
+unty
+soundly
+surrend
+cannon
+barn
+breakeven
+peninsula
+rudolph
+lanston
+pyongyang
+misima
+kinross
+bhpgm
+starrex
+barrett
+nagano
+syngold
+deka
+alligat
+jewellery
+compel
+carlin
+goldstrik
+paye
+rockefel
+niagara
+mohawk
+abc
+bzw
+hitherto
+esx
+emulat
+fbo
+absorption
+witco
+hyponex
+nederlands
+nyn
+hypx
+penner
+hohenwarth
+napm
+ipecod
+cherry
+cafe
+tre
+cfa
+merchandis
+viner
+wer
+logic
+wmb
+clinic
+op
+schroeder
+dislik
+pitney
+abdel
+nmc
+c
+mirror
+tedy
+falconbridg
+escape
+palac
+mastermind
+osman
+arabe
+elite
+postal
+pd
+chees
+bang
+weyerhaeus
+knox
+soo
+wilhelm
+suspicion
+calmon
+muda
+pragmat
+quintal
+aic
+sam
+roof
+liquor
+mckesson
+envirosystem
+centurion
+naturalit
+skylight
+royex
+corona
+wesson
+trenton
+moller
+hazleton
+pittston
+scan
+perkin
+alco
+comsat
+alza
+biltmor
+clevebaco
+goldberg
+billboard
+athletic
+mcandrew
+heyman
+pepsy
+natchez
+aircal
+bois
+candy
+oilwell
+smithson
+equiticorp
+piza
+becor
+panganiban
+monteil
+claremont
+connor
+callebaut
+parsow
+chavin
+declaratory
+oiy
+foxcroft
+callicoon
+shirt
+enzon
+unitel
+mcgill
+searl
+mobex
+bicoast
+sundor
+questar
+enro
+viratek
+ana
+danvil
+wyatt
+annesley
+bryson
+portsmouth
+gerber
+bogen
+ksz
+metzenbaum
+vendex
+xp
+santand
+subpoena
+kresg
+ink
+dainippon
+wavehil
+saatchy
+shad
+haft
+skanska
+hancock
+papyru
+interlink
+limbo
+paralax
+amylum
+vernel
+spear
+salzgitt
+exovir
+wallenberg
+greenwood
+providentia
+koba
+lace
+trackag
+superdrug
+interwest
+disord
+louart
+stant
+erbamont
+obligatory
+antibiotico
+greyhound
+clearwat
+hub
+ranco
+sieb
+centerr
+pantry
+landon
+kelman
+pcgg
+sequest
+vby
+pilgrim
+oporto
+glantz
+portugu
+iacocca
+varian
+cbsy
+holling
+albion
+aurora
+intercar
+acquisiton
+ordnanc
+warrington
+trecker
+koether
+rabbit
+bahama
+joist
+lerner
+chatsworth
+uaw
+photo
+foreseen
+simbl
+chamorro
+nevy
+stumbl
+truly
+inoper
+cabv
+prosecutor
+amex
+robertson
+vend
+poul
+franchise
+cayman
+cogener
+irrevoc
+asu
+mcdermott
+mdr
+bouy
+jay
+euphoria
+annuity
+finger
+sudanes
+rob
+alfaro
+ricart
+minguzzy
+markwart
+castro
+geplacea
+shouldn
+spencer
+psc
+systemat
+children
+barbado
+guyana
+woven
+butcher
+daewoo
+adequacy
+vacat
+tennesse
+krupp
+improper
+silicon
+delist
+expedity
+proprietary
+transcontinent
+dst
+ferc
+transnat
+vamga
+expo
+melzer
+josef
+biscuit
+diego
+borden
+transtar
+skapin
+ambival
+chronar
+zortman
+naylor
+handelsbank
+repric
+thuesen
+divisor
+finnair
+meink
+oakwood
+sofer
+cedel
+forgery
+clip
+cna
+gottlieb
+museum
+electricidad
+micropoly
+authentic
+hawkey
+arcalex
+cassa
+risparmio
+dty
+halmy
+gunz
+sangyo
+atary
+fanny
+piano
+ginny
+southdown
+showboat
+businessland
+nerv
+tme
+eksportfinan
+maxwel
+cnw
+zehntel
+vneshtorgbank
+pnc
+landusky
+experiment
+verd
+repuchas
+anyy
+korth
+anadarko
+feldstein
+lamp
+kidnap
+keppel
+schlueter
+consul
+brilly
+nety
+westcorp
+quebecor
+fpl
+ipma
+palo
+sutherland
+lbl
+nephew
+eurolir
+rlr
+rayrock
+cadillac
+drg
+guilford
+audiotron
+mepc
+jutland
+pirelly
+symm
+nyang
+buick
+kinburn
+amato
+sela
+bizarr
+crackdown
+sibson
+viewer
+mbank
+takushoku
+gzb
+erk
+yapy
+cooperatif
+kredy
+ramada
+mobutu
+wainoco
+kickback
+mikul
+trilater
+rambler
+contig
+recours
+oc
+ala
+cng
+pearson
+ech
+odeon
+csp
+utilicorp
+ultramar
+nestl
+analyt
+giorgio
+intermed
+coopervis
+lawn
+elxa
+mlc
+salad
+cypm
+leasehold
+character
+ameritrust
+hale
+com
+gosper
+rowland
+uic
+everybody
+cabot
+lng
+boddington
+val
+edison
+hapag
+kpa
+scy
+yeo
+versatil
+patrol
+ste
+prerequisit
+computer
+ce
+pelty
+meston
+cch
+guardian
+transamerica
+dick
+sty
+ccf
+lien
+berisford
+larner
+socanav
+ningbo
+styx
+calcutta
+peacetim
+dubuqu
+orley
+onomichy
+csbc
+mousavy
+gpu
+labatt
+gp
+avery
+jiang
+clarity
+nice
+ticket
+nich
+vine
+wtc
+seal
+entrant
+itel
+retract
+saunder
+secaucu
+absb
+kohlberg
+kravy
+untap
+mcd
+rt
+sierra
+tractor
+triton
+reshap
+jefferson
+wilmington
+vacuum
+bkfg
+spar
+seaman
+exco
+kaufman
+ernst
+herbert
+db
+fledgl
+cwe
+italiana
+micron
+wolf
+anita
+ta
+terrorist
+icn
+gel
+hydraul
+dillard
+hwhh
+livingwel
+perelman
+height
+erode
+villa
+wareh
+parker
+bk
+reinsur
+whampoa
+hutchison
+ida
+mgl
+metromedia
+bkne
+nbc
+stricken
+insituform
+adobe
+hex
+pson
+camco
+uncollect
+marcu
+derrick
+walsh
+mco
+mcmoran
+gre
+hkld
+heck
+wg
+werner
+humana
+crn
+lif
+assignment
+vista
+lancer
+comerica
+bellsouth
+turner
+gypsum
+volvo
+forman
+ca
+zenith
+overfund
+luxury
+pope
+waterhous
+trb
+olivetty
+centenny
+oliv
+goldstein
+empower
+dissatisfy
+chg
+aetna
+filipino
+abx
+berry
+oscar
+sahr
+aet
+taco
+asec
+prairy
+lly
+keyston
+mccrory
+rmj
+apprais
+sfe
+mould
+bushnel
+swf
+florenc
+southam
+hemdal
+finest
+gloeilampenfabrieken
+gleason
+ckl
+abex
+icx
+intercontinent
+bribe
+yate
+poulenc
+rhone
+salmon
+identity
+mp
+seper
+peterson
+ppc
+developp
+schulmann
+rotberg
+kahan
+vak
+boatmen
+quinn
+megabank
+eleventh
+petroluem
+freedman
+norg
+storehous
+connery
+seaga
+overcapac
+mla
+boesky
+lar
+rebuff
+mack
+legg
+om
+goria
+deacon
+stiffen
+improperly
+legislatur
+giovanny
+intel
+intc
+busch
+wrest
+nonstop
+ecl
+hercul
+textron
+schere
+mc
+anheuser
+aftermath
+computeris
+fslic
+keycorp
+txt
+stockholm
+zuckerman
+inty
+forstmann
+bcy
+lsy
+intermark
+rothman
+gta
+tb
+sgp
+heublein
+ruiz
+wonnacott
+honda
+paemen
+doumeng
+gradin
+enger
+mfn
+ligero
+potash
+pollock
+ryzhkov
+matsunaga
+wartenberg
+zhao
+shiratory
+axworthy
+k
+bywat
+uncondit
+gt
+abnn
+peck
+donovan
+pap
+baka
+eisenberg
+glidden
+sensor
+wix
+commut
+amtr
+hmo
+lsb
+itm
+cineplex
+edwin
+umar
+nt
+bakery
+castl
+aero
+flexy
+americu
+fisher
+nw
+installment
+chubb
+reincorpor
+monfort
+rrco
+scrip
+microfilm
+oxford
+ucu
+ambrit
+aby
+hair
+pciac
+sweeney
+petrona
+napo
+tumaco
+graven
+sur
+isthmu
+buchanan
+malmgreen
+guerard
+wellemey
+mckiernan
+mizrahy
+benbow
+powerin
+kaputin
+krapel
+samudio
+png
+shuffl
+synfuel
+mcmillan
+randol
+ural
+draugen
+pgrt
+ebinger
+bukhoosh
+maciej
+iagifu
+fesharaky
+staf
+strategist
+instant
+jeremy
+torino
+companion
+paolo
+ash
+homeless
+dibona
+crossroad
+sandy
+brien
+il
+assertion
+sia
+oldest
+beer
+nesy
+rebutt
+balloon
+xu
+demis
+mulligan
+patronag
+het
+comit
+sladoj
+snowcov
+stewart
+ashland
+coher
+gobert
+midamerica
+midam
+arise
+volkswagen
+anim
+wiggin
+ophthalmic
+llc
+hovnanian
+tcby
+valhy
+doneg
+tseng
+navistar
+vlan
+vogtl
+geoffrion
+strawbridg
+servotron
+coleman
+mayfair
+sheehy
+exchanger
+kloeckner
+centron
+tmy
+excel
+woodsid
+telco
+aec
+alc
+bionom
+infinit
+novar
+taikoo
+todd
+stuttgart
+durham
+lupberg
+mobay
+bigelow
+foresman
+eac
+pagurian
+stafford
+firstcorp
+furman
+selz
+kurzweil
+sirrin
+aequitron
+wardair
+emhart
+invacar
+datron
+sdc
+enron
+mg
+kinder
+brae
+oshman
+uniforc
+premdor
+payless
+mem
+pubco
+lamson
+kiena
+iomega
+wiehn
+undergar
+chemfix
+mccall
+lind
+cashway
+countrywid
+glynwed
+coleco
+meadow
+teeter
+tofutty
+equatory
+ghiringhelly
+glamy
+ax
+moto
+pansoph
+porsch
+hormel
+tote
+kidston
+oracl
+florjanc
+yamaha
+tokheim
+falcon
+sterivet
+quantech
+cadbury
+noncash
+teeco
+telemarket
+westar
+ur
+mcclain
+schwepp
+telxon
+lowranc
+lilco
+sulpetro
+knutson
+jewel
+mcm
+booker
+measor
+tsang
+donut
+sprint
+tonka
+input
+correl
+proxmir
+akzo
+leisur
+olbv
+laenderbank
+antc
+towl
+anitec
+luc
+luca
+pharmacia
+snack
+cf
+fbh
+avy
+arvin
+weston
+dietz
+macmillan
+parad
+optical
+drsd
+azzam
+gib
+byer
+suna
+darman
+fec
+melam
+circular
+bouldikian
+herstatt
+dattel
+ig
+audienc
+reclam
+wfc
+omt
+mattress
+monsod
+shepherd
+lighten
+prosecut
+chivuno
+khartoum
+omer
+prsl
+lube
+compressor
+corroon
+bael
+cbl
+datagraphix
+dya
+avalon
+elgin
+wilkinson
+rtc
+grossman
+goldom
+dxn
+mlx
+aac
+quest
+skb
+gnva
+ldbrinkman
+genova
+src
+cronu
+underwood
+rite
+btr
+itx
+acy
+metex
+sportswear
+lennar
+unaffily
+comtech
+anacomp
+imatron
+casu
+dwg
+pnp
+haye
+fmr
+regal
+goldsmith
+len
+gd
+cmin
+mitt
+italia
+nichol
+flagship
+nugget
+mtx
+acqusit
+gec
+healthvest
+avon
+dyne
+clbga
+scandinavia
+alsthom
+bancgroup
+alfa
+aar
+sheppard
+modx
+fairfield
+acl
+hyo
+gotten
+appleton
+joel
+dcy
+lessor
+mfg
+modulair
+husky
+scm
+magna
+rtr
+multibank
+hvt
+cypress
+encor
+retent
+taker
+braddock
+grind
+indemnity
+incompat
+keller
+foolish
+lever
+ut
+illumin
+bombay
+midafternoon
+arisen
+terra
+lasmo
+norcen
+nowak
+bonanza
+tricentrol
+carib
+roxy
+saf
+dresser
+diamet
+commer
+sbo
+rca
+albn
+thrid
+stodgel
+rhy
+fca
+emco
+cg
+bayerisch
+qltv
+conspiracy
+nmk
+outgo
+vereinsbank
+clausen
+rlm
+colman
+mcorp
+ilfc
+rok
+rabo
+holstein
+schleswig
+dc
+sgen
+aidc
+arv
+reciev
+plenum
+waxm
+olympic
+plen
+rmy
+bangor
+waxman
+undivid
+canyon
+davidson
+trinity
+sthf
+yellowknif
+bergen
+pcg
+harley
+geoffrey
+hdy
+trc
+fieldcrest
+restruct
+fld
+oshawa
+claud
+their
+matrix
+elk
+beaufort
+cnn
+abbey
+troon
+glaxo
+ballan
+comeau
+chapman
+dissolut
+fragment
+ammunit
+sealy
+hkbh
+hnz
+reilly
+adjoin
+architectur
+np
+scurry
+imag
+accessory
+amr
+peripher
+wtd
+regy
+theft
+ncb
+samba
+bancair
+relinquish
+stb
+kit
+ka
+simul
+concord
+cy
+bruxel
+morton
+argyll
+bmy
+fdx
+cardiovascular
+cty
+ted
+tissu
+nwp
+blockbust
+usine
+bbec
+unproduct
+lk
+macdonald
+passiv
+marwick
+nsm
+beerman
+seagram
+interfirst
+agl
+bug
+sensormat
+sss
+steak
+bsy
+brf
+hug
+cummin
+eldr
+drummond
+omaha
+adsa
+bsn
+kb
+gkn
+horn
+vestar
+gooderham
+plt
+texstyren
+sceptr
+savannah
+centel
+leaseway
+hum
+mickelberry
+willcox
+wkr
+aig
+wort
+medar
+mbc
+mdxr
+chesebrough
+deterg
+fairfax
+shear
+hillsdown
+sta
+sheldahl
+shel
+hung
+pond
+compo
+dco
+lnc
+ausimont
+hnt
+olsn
+fen
+gat
+jaguar
+pcy
+crime
+jacz
+spectrum
+adelaid
+cleanup
+comet
+fd
+bkn
+borman
+ltc
+kapok
+amn
+afp
+eaux
+tey
+jacobson
+cke
+msa
+kpk
+amcast
+ameron
+con
+trimac
+buckhorn
+tek
+gevaert
+tyre
+twt
+pir
+volv
+hiram
+acst
+ansy
+refurbish
+esselt
+esb
+tm
+lanc
+cox
+princeton
+newer
+race
+winston
+txn
+diablo
+emr
+basl
+asea
+stane
+rockwel
+humphrey
+depository
+warranty
+bl
+wardley
+wilf
+cr
+fal
+lvy
+plead
+overland
+cl
+alitalia
+macn
+guilty
+chic
+klau
+noel
+bg
+fasb
+rwnt
+bloedel
+weatherford
+wiy
+bicycl
+mpr
+amb
+rsy
+webcor
+lyonna
+numac
+interco
+marcxh
+cheroke
+msu
+engelhard
+embezzlement
+qtow
+schwendler
+nol
+bowl
+domtar
+amvestor
+cop
+ntt
+canon
+avfc
+resubmit
+inver
+avaq
+silverton
+kaltenbach
+hubbard
+plm
+qed
+caro
+liposom
+seton
+maxtor
+lucht
+mcdowel
+powerc
+loudon
+sedgwick
+standex
+innovex
+internatio
+powel
+esca
+scripp
+dba
+sycamor
+citadel
+fcl
+nzfp
+gandalf
+amcor
+guadalco
+triguna
+derlan
+aldershot
+markheath
+pcry
+infinity
+reef
+scholl
+penteco
+avia
+henz
+promac
+uab
+roffman
+cheyenn
+telemedia
+harrowsmith
+cirex
+juliu
+dubin
+hc
+fletcher
+autospa
+interpharm
+reebok
+lister
+hack
+mize
+bcw
+beeba
+nucel
+jannock
+checkrobot
+primagaz
+seafood
+banist
+pagex
+trident
+nylex
+energen
+bwa
+cityf
+takemoto
+flyfair
+shefra
+brandon
+certron
+attar
+inl
+whippany
+hogan
+multivest
+finlay
+pancontinent
+nawara
+noble
+dbm
+mcintyr
+smoky
+waterman
+coulson
+baiy
+kaufhof
+popsicl
+dynalectron
+burpe
+lomak
+ellmann
+strata
+mono
+confidata
+carrolton
+bartlett
+promedico
+acmex
+tvb
+teva
+hexcel
+stevenson
+bork
+rubbertech
+cheetham
+baur
+krestmark
+equinox
+steinhardt
+novatron
+campeau
+adventur
+ethyl
+unidar
+hearst
+sped
+chronicl
+metrobanc
+midway
+sahlen
+ansbacher
+sfsp
+tike
+conad
+palomino
+doj
+gst
+lazer
+bamberg
+verhofstadt
+mees
+messidor
+seashor
+fidelcor
+seax
+amerford
+crossland
+mcfarland
+petrominer
+feretty
+laurentiy
+wtrk
+kkk
+jauppy
+galveston
+rb
+kirschner
+comtec
+ventra
+nashua
+dumez
+noverco
+westburn
+dtd
+midivest
+lamborghiny
+goodwood
+astrotech
+calmat
+eagleslair
+kdy
+deltec
+rexham
+conant
+murren
+neo
+paragon
+pantherella
+gu
+cityquest
+sarlo
+microtel
+dougherty
+utvegsbanky
+halbert
+bakelit
+beaver
+shulman
+winnipeg
+quixot
+astra
+knoll
+cormy
+navon
+eskey
+virazol
+skandia
+petrosur
+trilogy
+sebro
+dingman
+maratech
+caston
+celina
+dauphin
+breast
+carteret
+bankeast
+canrad
+cvn
+vontobel
+instinet
+orbanco
+bard
+millipor
+donnelly
+moorhead
+alleghney
+krung
+equin
+sayam
+solmec
+josten
+careercom
+lpl
+amphenol
+clorox
+dorsey
+airco
+biopool
+handley
+inkey
+debartolo
+spermicid
+europharmaceut
+benetton
+amsouth
+fintech
+infortext
+malrit
+amtech
+mediq
+cytrx
+louge
+teleglob
+szynkarsky
+intercon
+gamco
+shelard
+lama
+shandwick
+erc
+ventana
+amca
+anixter
+nimock
+pette
+jwt
+jacoby
+lotoquik
+mattson
+nusourc
+trimedyn
+wca
+postech
+analytichem
+markey
+rexcom
+triumph
+nordbanken
+fermenta
+harleysvil
+kroger
+morbelly
+rossignol
+entrepo
+balzac
+norrel
+geronimu
+igon
+duffour
+imtec
+wilshir
+tylan
+clarostat
+triad
+calmar
+kebo
+texon
+moulinex
+kadoory
+liang
+lau
+sugarman
+cantrex
+shaer
+liebert
+nokia
+imr
+penril
+burdett
+tabak
+enfield
+faraway
+antonson
+colorol
+sanivan
+penser
+millen
+telcom
+schlang
+sportscen
+toshin
+cofab
+azuma
+wormald
+oakleaf
+kappa
+instrumentarium
+goldsil
+osr
+supermac
+borealy
+robeson
+constitu
+newest
+wallboard
+atorino
+tulsa
+dealership
+minier
+napl
+cardy
+delet
+avco
+nzy
+btv
+cger
+clemen
+nrc
+datarex
+mcgraw
+hellman
+lacy
+versar
+bruney
+khoo
+ware
+tiger
+tf
+tisch
+puritan
+promisary
+citic
+eberstadt
+sharon
+msc
+macomson
+balaclava
+scranton
+rodman
+buitony
+ryder
+acton
+belkin
+bench
+superstor
+tru
+endowment
+alltel
+autopart
+scime
+frenzy
+cascad
+apt
+hine
+nolan
+conseco
+evergo
+hachett
+spendthrift
+flyer
+sicilia
+escom
+bremer
+winery
+softklon
+chily
+crh
+chuan
+synergen
+cato
+ormand
+jwp
+bohn
+amylas
+landown
+wilbur
+swett
+bilfing
+fmha
+dataproduct
+mountleigh
+sarrazin
+weyerhaus
+greenidg
+topp
+stoneciph
+frayn
+emanuel
+gynex
+renshaw
+duma
+rolm
+russo
+bosworth
+hup
+dusen
+procter
+beazer
+amer
+securicor
+segal
+plenm
+knapp
+sofar
+mey
+caric
+finch
+hegewisch
+bif
+crivit
+buehrmann
+pfbc
+ruf
+gallen
+quasar
+hennick
+aerospatial
+apach
+cambrian
+loblaw
+krieger
+tetterod
+robur
+lufthansa
+alliant
+aegon
+anr
+dub
+primag
+stansbury
+anzola
+cdc
+templ
+wppss
+damson
+zemljar
+metropoly
+italfund
+telepictur
+litton
+avx
+mdu
+lorimar
+corchard
+asx
+wyle
+kado
+chiyoda
+ssangyong
+cpf
+bett
+nationair
+jbry
+bacob
+brougham
+beesley
+upjohn
+vectra
+louvem
+gallatin
+killian
+nikkey
+boral
+ae
+buchheit
+lewiston
+plessey
+periquet
+polly
+anemia
+roeher
+fecsa
+halikia
+irt
+glaverbel
+cancapit
+sickl
+milgard
+rivkin
+steckhan
+mangan
+eurotunnel
+avinda
+benihana
+marx
+hartnel
+haughey
+smail
+bouey
+wedtech
+bronx
+certainte
+savin
+fluor
+gemma
+nissen
+hallmark
+mittendorf
+usy
+scicon
+ceco
+upy
+rana
+vazquez
+tidewat
+roeller
+scherer
+electroperu
+azraay
+dau
+oftel
+refuel
+brentwood
+groly
+reuber
+mwape
+wrightson
+patten
+pmdb
+aslk
+recr
+hoogoven
+crimin
+preceed
+ckgh
+wtdy
+sandoz
+empire
+cheung
+forth
+vowg
+vw
+memotec
+saul
+tractebel
+adsteam
+polaroid
+rada
+apd
+accuray
+ffb
+templeton
+kirnan
+rockwood
+measurex
+cgee
+brooksvil
+confectionery
+caledonian
+frick
+asbestec
+toussy
+cyanamid
+buffton
+rinehart
+vtx
+temco
+brougher
+laurentian
+laserson
+murdoch
+sage
+mercer
+dna
+dixy
+altex
+atico
+magellan
+nbb
+pinola
+iroquoy
+pacer
+vogt
+algoma
+vertex
+contel
+crellin
+chemclear
+servicemast
+hovy
+biotech
+wrather
+avana
+alpine
+tricil
+nortek
+ionic
+alden
+penobscot
+maxxam
+neil
+fruehauf
+hardart
+luckey
+shareown
+weiss
+bic
+ducommun
+wolverin
+timminco
+welbilt
+wallcov
+agrico
+bojangl
+voicemail
+altron
+killearn
+ropak
+webb
+antibody
+visu
+microbiolog
+valtek
+tempo
+roch
+albertson
+jewelry
+mors
+gateway
+theatr
+careplu
+hbo
+desoto
+chesapeak
+whale
+phh
+stauffer
+ivey
+lieberman
+gartner
+ccl
+wichita
+bey
+dyr
+elcor
+flick
+jewelmast
+durkin
+bathurst
+walbro
+oreffic
+whippl
+tcw
+yochum
+bdm
+cardizem
+schutz
+galaxy
+cardin
+transpond
+wessanen
+munro
+rugby
+dravo
+nacco
+angu
+mmal
+rhm
+loyne
+pulcin
+burr
+zier
+harlow
+meredith
+equicor
+heymann
+quarto
+garofalo
+chargeoff
+beall
+cavendish
+geonex
+summitvil
+snet
+panoch
+cistron
+strenger
+driel
+crossen
+habbel
+alloytek
+reev
+pda
+abbett
+farah
+audy
+kline
+danzar
+gnn
+nekoosa
+hargreav
+sony
+chatwal
+healy
+hashimoto
+crd
+guinn
+fhlmc
+gevirtz
+seidman
+polyest
+foothil
+carolian
+mixon
+mccrann
+egan
+xj
+vtr
+burry
+genstar
+kask
+dcny
+scrubber
+kingsport
+corby
+meinhardt
+vishay
+snc
+widdrington
+poy
+lummu
+treybig
+crest
+tsay
+mcadoo
+exley
+lennox
+circu
+paradyn
+taunton
+mayo
+maytag
+schenker
+okc
+graff
+hazelhoff
+rowley
+marcor
+struther
+cornelissen
+scher
+takefman
+metropol
+groot
+charan
+advo
+ahold
+xiamen
+panin
+chiary
+gsx
+monod
+blind
+duvel
+anova
+mitek
+shattner
+possy
+tagamet
+tbg
+bloch
+usacaf
+catto
+smithklin
+poclain
+calvet
+lutterbach
+dreyer
+haerry
+reuss
+bryn
+ncr
+catena
+jude
+citroen
+joul
+hackl
+mawr
+naarden
+odger
+rambaud
+shadowfax
+knudsen
+pw
+bralorn
+asiatic
+vascular
+sierracin
+leutwil
+glendal
+signet
+zim
+telecredit
+onyx
+finan
+callon
+rafidain
+genzym
+torchmark
+moet
+brascan
+contracept
+hennessy
+harrah
+subtract
+tenera
+homestead
+westworld
+johnstown
+aancor
+shl
+loc
+talbot
+elxsy
+poco
+nixdorf
+kean
+ich
+hewlett
+sl
+lanschot
+banky
+packard
+hp
+gull
+braniff
+unrestrict
+elsinor
+genex
+trizec
+unqualify
+systemhous
+loh
+avatar
+duke
+keswick
+divy
+shulansky
+tierco
+emerald
+nrm
+indictment
+centerior
+wellcom
+merry
+moritorium
+investcorp
+tandy
+ncel
+cir
+rainer
+cthl
+belgiqu
+refractory
+xerox
+grx
+enka
+dey
+monkey
+enterra
+solar
+morr
+avenu
+enzyme
+caterpillar
+midst
+utx
+goody
+burk
+blackburn
+cmnt
+hadson
+had
+cc
+pop
+benjamin
+leucadia
+tcb
+rick
+sfy
+schwab
+tic
+mx
+ry
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/example2/test.dat	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,601 @@
+# Reuters category "corporate aquisitions" (test examples: 300 positive/ 300 negative) 
++1 6:0.0342598670723747 26:0.148286149621374 27:0.0570037235976456 31:0.0373086482671729 33:0.0270832794680822 63:0.0317368459004657 67:0.138424991237843 75:0.0297571881179897 96:0.0303237495966756 142:0.0241139382095992 144:0.0581948804675796 185:0.0285004985793364 199:0.0228776475252599 208:0.0366675566391316 274:0.0528930062061687 308:0.0361623318128513 337:0.0374174808347037 351:0.0347329937800643 387:0.0690970538458777 408:0.0288195477724883 423:0.0741629177979597 480:0.0719961218888683 565:0.0520577748209694 580:0.0442849093862884 593:0.329982711875242 598:0.0517245325094578 613:0.0452655621746453 641:0.0387269206869957 643:0.0398205809532254 644:0.0466353065571088 657:0.0508331832990127 717:0.0495981406619795 727:0.104798994968809 764:0.0452655621746453 827:0.0418050310923008 1027:0.05114477444793 1281:0.0633241153685135 1340:0.0657101916402099 1395:0.0522617631894159 1433:0.0471872599750513 1502:0.840963375098259 1506:0.0686138465829187 1558:0.0589627036028818 1598:0.0512079697459134 1726:0.0660884976719923 1836:0.0521934221969394 1943:0.0587388821544177 2433:0.0666767220421155 2646:0.0729483627336339 2731:0.071437898589286 2771:0.0706069752753547 3553:0.0783933439550538 3589:0.0774668403369963
++1 179:0.183380155787579 199:0.157247710191107 408:0.198088894016017 587:0.426066443224553 1990:0.447885839011823 2134:0.458297202655782 3005:0.5569874337712
++1 6:0.00482709726364712 17:0.0526067936384763 26:0.10446503857735 27:0.0281106990768854 28:0.0356456751828835 63:0.0313012858968506 72:0.0300401635230985 83:0.012507314153985 88:0.0737185781091803 102:0.0919905568442081 142:0.00876215636178203 155:0.100271086073242 172:0.0378545536912375 179:0.0526268994083645 199:0.0225636721456629 204:0.0579559481364334 306:0.0378786130534899 308:0.106998107844821 337:0.0369039591653246 357:0.0446845288778611 437:0.130255551720447 475:0.0391145025392082 538:0.0422966045382641 539:0.0448465452746061 587:0.0611368109939652 598:0.0510146592713463 755:0.100761643621509 808:0.0503808218107545 823:0.0549991894617621 871:0.0554451802614129 1990:0.128535407197547 2026:0.348920957396963 2134:0.460331503040801 2736:0.315429331039326 2804:0.315429331039326 2975:0.0686186332932993 3005:0.559459802671567 3813:0.0839264409437691 3835:0.0782990010086473 5570:0.079922828953081
++1 6:0.00797462873810959 26:0.0345163916642208 27:0.0696606189381528 33:0.0441290005061936 67:0.0451094300865861 142:0.0165434990048971 172:0.0625377934701842 204:0.047873198353993 308:0.117844484878955 437:0.0717297656206316 455:0.0582264995123673 473:0.0702120797712105 480:0.0586545824892089 546:0.0688988300164216 764:0.0737548795917481 808:0.166463747265811 882:0.05988570937618 1710:0.111056350005715 2976:0.107683390065739 5954:0.457701287906402 7029:0.316132177802849 7836:0.741910821304179 8399:0.165428413714452
++1 6:0.020398477445271 11:0.0458319874879689 15:0.0349435129583541 26:0.0441451169688967 28:0.0753162264530517 29:0.0370416466621968 30:0.0613060121073632 48:0.0623952610910362 63:0.0881825438769616 75:0.0826819575927399 80:0.0664082539832147 81:0.0620988371567663 83:0.0528537445458926 106:0.0713919290192784 142:0.0264481114418981 179:0.0555980417403573 216:0.266211025112519 227:0.0724969884807626 229:0.106824100071866 243:0.0961696532496726 284:0.0619384650702658 345:0.0748473146787298 384:0.11052547545743 414:0.0753592469880539 437:0.0917395689641771 455:0.372347094775744 505:0.0733654174810628 507:0.0545348021447396 557:0.0959891051878867 689:0.254925792581784 710:0.117536871080518 967:0.130689853323039 1043:0.570342575896572 1055:0.111292231708947 1057:0.13894866046608 1081:0.113390061284155 1788:0.125587611447188 2423:0.131638583246465 4488:0.396846996835276
++1 6:0.0331457691319788 31:0.126333924126773 60:0.251579838716322 68:0.203480917932947 204:0.198980295178862 252:0.239210120129266 5580:0.615880116120099 5956:0.634130303264387
++1 6:0.0218491019698381 18:0.0584788160942556 26:0.0472844683977855 27:0.0159048362045602 28:0.0403361455817294 31:0.0208192694179522 37:0.077533872728326 51:0.0370980624567537 60:0.0414592396979942 63:0.0236133971064361 67:0.123592027933923 68:0.0335327512474576 75:0.0110702289383883 84:0.0641156774433354 92:0.0360590870325244 103:0.0519974019127433 107:0.0522501480135825 142:0.018413818652895 159:0.0328608104261246 172:0.0428356814897517 185:0.0636163019598063 192:0.0441125876391305 194:0.0432773337366851 204:0.131164274452059 211:0.0543244512486792 213:0.0563928096988284 232:0.0969671517729285 239:0.0463098055362765 252:0.15768306012483 284:0.0331715894680471 286:0.030606506930599 287:0.0507016764518807 345:0.040085016515859 363:0.051026999054523 375:0.0387225623952956 415:0.0475237416516677 426:0.0491732437178919 427:0.0580242638507468 441:0.0385172511217403 477:0.0584037142091113 485:0.0756011625507409 502:0.0377036999516413 505:0.0785827516737091 538:0.0478622438631065 553:0.0698262795454381 571:0.0431101852912942 593:0.052611309792993 594:0.0523012127600622 613:0.101037799870997 633:0.11360316945256 643:0.0444419962528649 742:0.0560604792625693 772:0.0506100095692246 834:0.055043988873594 856:0.0409950423925163 986:0.0488447376658748 1126:0.116501558650048 1149:0.0524038671928424 1242:0.0693401562200767 1776:0.0632632525374431 1924:0.0753375504929324 1972:0.0794131539517976 2020:0.0911057714338088 2161:0.0725259184071201 2163:0.0690246184898803 2756:0.0904395511493393 3307:0.106267128558266 3469:0.0904395511493393 4335:0.0989905857074216 5149:0.0958785930963484 5580:0.202988613791452 5956:0.627011139929495 7828:0.508176797928401
++1 6:0.00348466932721003 26:0.0452478285578935 27:0.0710256494147685 29:0.0506225585902376 33:0.0578490784540854 64:0.0906702916249511 72:0.0650577546064757 83:0.00902899850939436 94:0.0209191263164869 100:0.0215332395464819 142:0.00903625507849666 179:0.0379912258109207 199:0.0162886579533739 204:0.0418382526329738 205:0.0827195493716847 206:0.0332360142102708 308:0.051494442603469 331:0.0272407348950546 402:0.0265604598582834 434:0.0301532126179079 437:0.0626874359458724 455:0.0254432028806464 483:0.0338337899521216 574:0.0260916749111685 609:0.0246767946892561 724:0.0407746897115988 883:0.0406340798592227 963:0.0295653354325134 987:0.0284489282230777 1102:0.0417428067970281 1149:0.0334311495064964 1230:0.0486889327373641 1248:0.0448663319578005 1380:0.0717810677581099 1990:0.185578771861469 2026:0.125942579096003 2134:0.427258478319213 2736:0.45541527536764 2804:0.45541527536764 2943:0.0690700557675639 3005:0.51926479589435 3241:0.0585658966812517 3813:0.0605862858204954 3814:0.0590323939629308
++1 6:0.00785445606167515 15:0.0538201516085403 28:0.0580011908235646 29:0.0570517063228698 40:0.0490761508769594 63:0.0339547850150409 74:0.0643894984454069 75:0.0318367782471932 96:0.0486644010703318 103:0.0747694452996197 142:0.00407354970079566 159:0.0472520640892858 162:0.0425397682230292 180:0.121054290840425 204:0.0471517791425653 229:0.0822654732534441 308:0.116068642063443 455:0.114698125032326 475:0.0636455254138321 574:0.0588107205940729 626:0.0741303185094789 834:0.0791502722013582 896:0.0994793287716406 965:0.0784550120313395 1031:0.0965166644860253 1057:0.107004667518699 2503:0.311368263248173 2886:0.583773246240059 2974:0.541319416898089 3079:0.115582692920521 4281:0.126591596142855 5122:0.147997359941209 5845:0.144068112306189 7126:0.173944414020896 7127:0.173944414020896
++1 6:0.00783355108261519 15:0.0536769069161587 28:0.057846818112062 29:0.0568998607059805 40:0.0489455325504489 63:0.033864412866524 74:0.0642181229731765 75:0.0317520432665188 96:0.0485348786339782 103:0.0745704431438957 142:0.00406270776972797 159:0.0471263006497083 162:0.0424265467654344 180:0.120732099539682 204:0.0470262826157689 229:0.0820465200907787 255:0.0729109308825163 308:0.115759720285436 455:0.114392850945465 475:0.0634761300584328 574:0.0586541932836052 626:0.073933017417719 834:0.0789396102828286 896:0.0992145601780499 965:0.0782462005782249 1031:0.096259781153281 1057:0.106719869906206 2503:0.310539542968624 2886:0.582219508159079 2974:0.539878671544605 3079:0.115275064517456 4281:0.126254667061356 5122:0.147603458481171 5845:0.143684668710946 7126:0.173481453339195 7127:0.173481453339195
++1 31:0.121578360639455 174:0.23382059176088 232:0.283129708150668 389:0.271848845786714 506:0.17845240482837 719:0.343333813947578 1228:0.392774642160119 2344:0.528140164045503 2402:0.439948957845025
++1 6:0.0261488826243853 15:0.044794216690105 26:0.16976935928035 29:0.047483821936342 63:0.0282603811429679 67:0.0739571227278646 68:0.160527234053451 142:0.0305135374553196 153:0.226795963556356 186:0.0741927484319776 204:0.156976667594588 242:0.183226987379415 411:0.0979529405146104 496:0.10963592358768 643:0.10637586343034 764:0.120921471880174 808:0.136459048170714 827:0.111677081843667 834:0.131752673974476 858:0.131169345927101 1005:0.13782583765324 1359:0.145140959979797 1731:0.48703532778565 2833:0.197531264581186 3236:0.391474393061168 4525:0.289545961533446 5918:0.271220662115919 6225:0.279225688098712
++1 26:0.15620989586763 28:0.266510561058506 63:0.0780096811503992 142:0.00935880799034978 158:0.259041653526988 204:0.216658432969386 513:0.270072471546516 719:0.388459554684346 6495:0.74867487688954
++1 26:0.176202309110135 27:0.118536549536136 60:0.308989992539676 80:0.265064145238512 142:0.0527829421196014 153:0.353084673037169 726:0.375164594544601 1174:0.721778856572601
++1 6:0.0282619337466596 15:0.0322759791183498 26:0.0407751468824368 29:0.0342139445339461 31:0.0359064528910632 67:0.106577979266019 68:0.057833064590458 85:0.0577323885836754 142:0.00488582068801075 153:0.0817076659082195 174:0.13811122339312 256:0.0641103449933427 275:0.126700078476862 373:0.269005974824668 389:0.160573439605384 505:0.0677648147583194 506:0.105406798275044 507:0.0503716995296016 713:0.0942018187339389 719:0.101398796229673 800:0.0830770129861911 808:0.196648126240849 1058:0.105679822541211 1228:0.116000447047891 1500:0.215018198278552 1604:0.126481124896071 1643:0.12612458776665 1786:0.12612458776665 2055:0.145126137835124 2303:0.130766611311505 2344:0.623914973698835 2402:0.129932715380012 4839:0.381424628223378 5880:0.201192991959869
++1 6:0.023702409591198 12:0.0798915346740287 27:0.0345078660644096 29:0.0860825307648993 31:0.0451704469881664 37:0.0560736885551188 42:0.0709043655986918 63:0.0256163576346981 75:0.0240184791968325 83:0.0307072207966611 88:0.0904947547868725 108:0.438827290193259 142:0.00921957001925433 205:0.18755032939063 229:0.12412635114105 231:0.381151880942266 242:0.0830421927661675 259:0.144170846573517 317:0.0706357473502409 339:0.0921799788350054 363:0.110710530205736 408:0.069784991702609 506:0.0663010658295947 586:0.0871179957043673 601:0.160029758207399 688:0.131561662932881 697:0.127050626980755 847:0.126383576997735 897:0.197667282950779 1264:0.196221820699538 1388:0.153335954486604 1407:0.144457346632878 2152:0.191007871138408 2892:0.245845427332808 3785:0.404868936445694 4535:0.21737733205829
++1 6:0.0263446335928295 15:0.120345458501861 26:0.152035782680804 27:0.0511395031541379 28:0.129694541815601 29:0.0318928577425718 63:0.0189812925495308 64:0.0761645872986944 75:0.0177972913530987 80:0.0571775066193463 94:0.0527172658427635 97:0.0547955036626274 134:0.188679104991507 142:0.0296033711057475 150:0.153165204020884 176:0.273111573113587 178:0.141741955202564 179:0.0478699138880459 192:0.0709185491033759 198:0.0764624274072915 205:0.0694858285610122 226:0.0680911560199281 325:0.315420055478884 363:0.0820346511442473 387:0.0619887400344992 485:0.121541832968126 546:0.0758703839123821 561:0.0778185117835585 742:0.0901268337252244 823:0.200111083346736 966:0.0877153269964253 997:0.167028578917694 1433:0.0846658034959993 1511:0.105997242953918 1880:0.122698595146067 2103:0.703286804341054
++1 111:0.215994569070182 186:0.195992437000748 229:0.180872475933477 426:0.310925435082124 586:0.253890450118932 800:0.304579905334509 3046:0.529396953756829 3266:0.589960522405692
++1 6:0.0414181490451389 15:0.0709511595535961 26:0.0896345837153026 27:0.0602998583070711 28:0.07646302772154 29:0.0752113213571199 37:0.0979844847061062 63:0.0671439404351639 68:0.0635662047336336 75:0.020985228260957 94:0.0621602374796953 97:0.0646107393097281 134:0.14831747924497 142:0.0429613170728851 176:0.161016319528302 185:0.0602969742168158 192:0.0836218226326396 198:0.0901587472325944 199:0.0484010102185417 204:0.310801187398477 226:0.0802879732247478 255:0.0963750593588942 265:0.19563693259551 317:0.0617152846931116 322:0.0897378363726056 323:0.0885780441804325 351:0.0734827295950458 387:0.0730924629722711 389:0.0882457484228118 394:0.0964631554400182 436:0.0914602402840867 485:0.0716564969771972 549:0.1105674056468 594:0.0991445519512959 613:0.0957659188928411 742:0.106270788101238 747:0.57056874585112 808:0.108071179883261 823:0.117977974239532 856:0.0777120624119458 965:0.10342732062337 1014:0.12697855241545 1036:0.117052453853647 1126:0.110422820279291 1175:0.109710728782976 1471:0.119924691929821 1548:0.113949996766476 1568:0.153664409222043 1625:0.139819885222829 1897:0.276482184431207 2723:0.134980209271462 4501:0.176869379977319
++1 6:0.0300323798317241 15:0.0205787291063404 26:0.129988419388934 27:0.0174894174677238 31:0.0228934702338641 63:0.0129829868888305 67:0.101929023871331 83:0.015563158926836 100:0.0371165449770361 102:0.057233057325837 134:0.0430181162129126 142:0.0202483670660566 153:0.312574236673861 154:0.0434198156457661 159:0.0361346966720378 172:0.0471033531218586 174:0.0880578538711608 176:0.0934025953098023 179:0.0327424732934381 180:0.0462864444620022 192:0.0485074760204765 256:0.0408758915630218 281:0.0693339744816167 310:0.0616457228891572 320:0.0570133117299494 327:0.0505138901011015 345:0.0881572848698004 405:0.0571228182825204 507:0.064232632909117 541:0.0619374238762957 561:0.0532269715330434 574:0.0899477130021352 593:0.115705832950305 631:0.0403117057689293 686:0.0710320151654598 755:0.0626900969346451 808:0.0626900969346451 987:0.0490370211904717 1122:0.07336095765149 1289:0.0813440710747443 1305:0.0546294659868671 1557:0.0883886371890227 1689:0.0962080252018784 1731:0.074582307094512 2017:0.0903297811822488 2280:0.0815846691510866 2975:0.0853838547699421 3057:0.107631558977073 4387:0.128277938972961 4810:0.121595600088751 4841:0.74546156893899 4903:0.121595600088751 7826:0.139701472748155 7930:0.139701472748155 8626:0.128277938972961 8700:0.133019133863945 8855:0.124600382507832
++1 6:0.0142894732787166 26:0.0618487797440109 28:0.0527602713605547 29:0.0259482905819441 31:0.0272319104410711 63:0.0154433352655841 96:0.0885342859211242 102:0.0680790406803614 134:0.0511702889988598 142:0.00370546853543854 144:0.084953909971397 199:0.0333971922032047 216:0.0621617526773957 255:0.0664997768945582 275:0.0480454752858271 345:0.0524317908508095 355:0.0430007188032256 382:0.0627543576605838 408:0.0420712826834366 426:0.0643193256276283 457:0.0492665333774512 465:0.121508346001675 513:0.0534654117616068 561:0.063313779301716 574:0.0534966529720355 755:0.0745702197101191 799:0.0720788553505339 952:0.066560564091775 1017:0.0841913742155727 1159:0.0726518689533112 1359:0.0793145886602619 2163:0.0902852156437678 2306:0.20100929030518 3719:0.238335376572902 3905:0.708083481941373 3929:0.248444265723718 4176:0.238335376572902 7592:0.152587323371781 7907:0.33235136093401 8259:0.152587323371781
++1 6:0.0149480029785652 29:0.0271441163254978 31:0.0569737834901793 63:0.0161550406404948 68:0.0458826789511475 75:0.0151473333204142 80:0.0486639643084019 142:0.00387623487754545 172:0.0586118271937767 174:0.0547862452679215 200:0.216609767462195 229:0.0391403468798352 255:0.0695644159658666 306:0.0586490793350709 383:0.447654814377486 404:0.0627642931155378 411:0.0559947768172002 515:0.05399857126391 610:0.0962303737840539 625:0.0830922297197326 952:0.0696280045381906 1064:0.0692493975111957 1322:0.0839703521684585 1330:0.0987041278940621 1576:0.0828480923346686 1829:0.122875157312138 1955:0.112399503946328 2642:0.103745538764432 2796:0.386324218027172 2852:0.128774739342391 2879:0.140828655724198 3089:0.121233697641679 3335:0.109533364124953 4050:0.116344531703242 4535:0.137089733201073 6319:0.620172926452531
++1 6:0.0176610820154908 15:0.0302542309798681 26:0.152884063717583 27:0.0257124175665849 31:0.0673145880687707 60:0.0670247256493164 67:0.0499509990116545 68:0.0542104358159842 142:0.0228988789277747 153:0.153179092609325 154:0.0638345120761401 174:0.0647300092450498 232:0.0783805587357477 465:0.0750891520787726 549:0.0942939298055075 574:0.0661192163815171 764:0.0816709479707576 801:0.106794861614436 808:0.184330204553469 858:0.0885924117528628 1174:0.626260150934097 1424:0.0821155365065742 1557:0.129946326213534 2010:0.129413790592454 3366:0.424326468588064 4459:0.168942033745949 4474:0.166389212153817 5440:0.178766208166242 8419:0.37718076517307
++1 6:0.0576644726785321 26:0.124793867491993 28:0.212911502547412 31:0.219786093578729 63:0.062320826465597 67:0.163092952925902 92:0.190335350337991 102:0.274729649212512 142:0.00747661880026088 159:0.173453472607481 220:0.46259397537499 287:0.267625226936218 373:0.205825720711774 502:0.199016323759425 1013:0.357252331580081 1159:0.293183074742331 1418:0.366007129208101
++1 6:0.0309109297810553 15:0.0423614548000294 29:0.134714964920907 31:0.0471263652636768 41:0.0284667086458094 63:0.0668139185635034 74:0.0506805117873142 75:0.0501169990194908 81:0.0376407072535309 88:0.0944132536401569 134:0.0442765434181804 142:0.0144281777114774 144:0.0367543896759755 161:0.120663214978495 166:0.0461279441883187 171:0.160361361931441 176:0.0320449803530592 179:0.0337003027566411 186:0.0701633601706766 190:0.106011528734172 199:0.0288978674844588 205:0.0489178540257817 229:0.0971258447628325 242:0.0866379894274748 243:0.0582924565158315 307:0.0593689212818384 313:0.0701051525576181 318:0.0746218008093872 320:0.0586811463275474 346:0.0515063769161204 347:0.0507859802621381 355:0.0744151823393614 373:0.132398978529295 398:0.048085724652166 408:0.0728067404283462 462:0.075967573443728 472:0.0563250525105958 475:0.0500949359573031 485:0.0855651543097052 506:0.0345859788201245 508:0.0959316915330136 510:0.0558907040985861 513:0.0925249269272811 515:0.0446653923473126 557:0.058183018770295 586:0.0454451390272826 609:0.0437793429583077 613:0.0571771295928983 655:0.0468114690436231 720:0.0615506310734709 743:0.0784789673419087 758:0.129526951245147 792:0.0678400873563805 823:0.0704388575830351 827:0.0528059647459434 952:0.115186830624065 966:0.0617513765136621 1020:0.0790291601689063 1027:0.0646034480987148 1138:0.121924534355226 1225:0.0551449667926113 1314:0.0720893187447353 1380:0.0636737473984825 1504:0.0863795120648748 1751:0.0842226053069354 1776:0.0716011471631414 1792:0.0729789573829539 1817:0.0878816249001201 1917:0.0769279879500865 1949:0.0769279879500865 2424:0.0866694813775285 2642:0.0858140333111687 3046:0.189518890157775 3266:0.633600151926369 3374:0.103902330458892 3785:0.105600025321061 3884:0.108515085436422 6267:0.143788219202885 7829:0.143788219202885 8310:0.273820798048236 8311:0.136910399024118
++1 6:0.0222985466329023 15:0.0327415005210145 26:0.0689387551446239 27:0.0278262942367657 28:0.0470467154727192 29:0.0809839741885217 31:0.0121414457247986 60:0.120891636127864 63:0.0275418674488828 67:0.0720767798837155 68:0.01955573325369 75:0.00645597024171451 80:0.0207411495326037 81:0.0193951984883513 88:0.0243242479737164 96:0.0592099971991269 102:0.0607065728425958 103:0.0303240051550381 106:0.0222976902176069 107:0.0304714024053397 134:0.0228144583519524 142:0.00660838617332151 150:0.0277803509423583 153:0.110514864159309 154:0.023027497782491 158:0.022864120132169 176:0.0330237553889001 192:0.102902859432539 199:0.0297805177769913 255:0.0296491659527042 279:0.0360666419941116 306:0.0249969220906283 308:0.023536794249081 319:0.0288976721093133 345:0.0233769035134964 355:0.0191720259438454 387:0.022486425211802 405:0.0302948216561265 455:0.023258876141289 473:0.0280465781164473 478:0.0249810447932488 513:0.0476754942670872 530:0.0261867785270182 571:0.0251411307665253 593:0.0613640516906302 613:0.029461767813739 644:0.0303532864212979 719:0.0685741910913678 737:0.037537028580738 757:0.0302657352738633 799:0.0321366182529827 808:0.0332474020600189 829:0.0236314326812149 856:0.0239076152098478 933:0.0740378486941982 987:0.026006556682229 1149:0.0305610488302154 1269:0.0325415114761671 1411:0.0403455136841346 1472:0.0323920984394628 1476:0.0410145083862148 1511:0.0384505165779135 2010:0.0466843981252169 2824:0.0464964242180091 3653:0.0483543068319278 3704:0.0591897628015669 4187:0.0564788692192719 5736:0.0570818979493356 6367:0.0740900279301984 6495:0.925137286953672 8834:0.0705460805055158
++1 186:0.143427256583034 252:0.182408394129025 527:0.241068649672439 586:0.185797019979149 965:0.252463123260795 1038:0.335593089045898 1543:0.354337817151707 1704:0.383663086405428 9210:0.635930948119661
++1 6:0.0149480029785652 29:0.0271441163254978 31:0.0569737834901793 63:0.0161550406404948 68:0.0458826789511475 75:0.0151473333204142 80:0.0486639643084019 142:0.00387623487754545 172:0.0586118271937767 174:0.0547862452679215 200:0.216609767462195 229:0.0391403468798352 255:0.0695644159658666 306:0.0586490793350709 383:0.447654814377486 404:0.0627642931155378 411:0.0559947768172002 515:0.05399857126391 610:0.0962303737840539 625:0.0830922297197326 952:0.0696280045381906 1064:0.0692493975111957 1322:0.0839703521684585 1330:0.0987041278940621 1576:0.0828480923346686 1829:0.122875157312138 1955:0.112399503946328 2642:0.103745538764432 2796:0.386324218027172 2852:0.128774739342391 2879:0.140828655724198 3089:0.121233697641679 3335:0.109533364124953 4050:0.116344531703242 4535:0.137089733201073 6319:0.620172926452531
++1 6:0.0146297124837151 26:0.0379928572932579 27:0.00851964281532518 29:0.042505810900465 37:0.013844026081929 41:0.0134728966678032 59:0.0181685471640235 60:0.0666246245630472 63:0.0189732581727803 65:0.0209327604650782 67:0.0165509395896327 75:0.0118598387592201 88:0.0223422388972282 94:0.017564983915748 97:0.0182574366311048 102:0.0278800141025292 132:0.0177459099509591 134:0.0628664137153555 142:0.0106223530464662 153:0.0253774494838448 176:0.0606657712895947 178:0.0236136598087765 186:0.132829364041641 198:0.0509533749938393 204:0.017564983915748 215:0.0186402030483247 226:0.0226874448280762 252:0.10558135690717 265:0.0276411393657311 278:0.0252599607572872 284:0.0177688151106728 308:0.0432378982944178 314:0.0233488825586506 317:0.017439250989741 337:0.0447386313232517 351:0.0207644471088749 355:0.0176098346080052 365:0.0310016059235205 387:0.0206541671738259 394:0.0272581612050579 408:0.0172292080323638 411:0.0219209880169309 423:0.022168431460398 426:0.0263403198347466 442:0.0248988660302021 527:0.0279069998524211 528:0.0306136921589578 538:0.0256380648507869 539:0.0271837101024018 586:0.0215085512619901 641:0.0231521388967129 713:0.0292579878477027 727:0.0313260239222756 732:0.0320170526612756 757:0.0277995968722073 767:0.0279885056594272 794:0.0341776856789772 800:0.0516055054783715 808:0.0610766178950154 965:0.233808530579289 1015:0.0365663668787134 1038:0.0776989981833226 1046:0.230110598131319 1126:0.0624056516119596 1229:0.0330249014429755 1244:0.0413011802461341 1377:0.0279069998524211 1432:0.034790827277604 1880:0.0408822198149219 1924:0.0403555882327969 2280:0.0397424466341701 2736:0.0382394650034405 2804:0.0382394650034405 3944:0.0508719685445558 8887:0.0624882002589617 9210:0.88341266603217
++1 6:0.0117995828147134 26:0.0510718473903028 27:0.0114525184122277 28:0.0580893061722454 29:0.0571383792156861 31:0.0149912305459559 37:0.0372196269349355 68:0.0482915317246779 83:0.0101911549936382 88:0.030033524630942 139:0.0321769735446853 142:0.0020398691166289 144:0.0467673266228436 145:0.0330057620031033 172:0.0308444818074296 176:0.0203874703947774 185:0.0458078825925683 186:0.0223194617771269 198:0.102741008854105 204:0.0472234120763218 229:0.0205976127186792 252:0.0283855194443666 256:0.0267665805110807 308:0.0290612433558901 322:0.0681742380286973 323:0.033646569341161 355:0.0236719965209912 365:0.0416738671261063 377:0.0302723353773737 382:0.0345464210265002 389:0.0670406921002371 404:0.0330297175475864 408:0.0231603397578842 429:0.0448859066049951 448:0.0356192575818064 510:0.0355584575992542 543:0.0435351499266029 571:0.0310421424309632 575:0.0410510807883302 576:0.0385026350994586 586:0.0289128411469541 608:0.0429182981330283 640:0.0367089864866958 647:0.0355281855783999 653:0.0401795067828452 693:0.0935350456844679 719:0.254008838351131 744:0.0485315032286177 827:0.0335959027299826 880:0.0462654803054719 895:0.0409008421435314 930:0.0344365781611045 987:0.0321106971745107 1057:0.0535836144490644 1192:0.0489426755636146 1236:0.0433463643249416 1245:0.0384628856314699 1291:0.0597038094175846 1380:0.0405101399878739 1472:0.0399950241989276 1598:0.0411524145690789 1636:0.05740985306149 1912:0.0597038094175846 2264:0.320542383072269 2393:0.123116823905425 2415:0.05740985306149 2783:0.0661041343399302 2792:0.0602873011587577 2844:0.0741110986881332 3496:0.0666306762478457 3699:0.0597038094175846 3882:0.0690388343930002 3920:0.0871043350967414 4246:0.155920646794678 4534:0.0704799009570514 5560:0.783939015870673 7012:0.0871043350967414 7100:0.0871043350967414 7592:0.0839996792735751
++1 6:0.0248233972589892 12:0.0669359558643418 26:0.0644655040654039 27:0.101191691115903 28:0.109984950453772 29:0.0360614957734894 31:0.0189226997472824 37:0.0234902606239233 63:0.0214622912306972 64:0.0430599378257527 75:0.0100617660557372 80:0.0969765596078856 97:0.0309788454782842 132:0.0301108974578455 134:0.14222726191795 142:0.0244608600771128 176:0.154404661993963 186:0.112691075608453 190:0.0425669222899587 192:0.0400940702679591 204:0.0298039058575978 218:0.0281615526184567 265:0.046900920570408 284:0.0301497624648978 322:0.0430265091568752 337:0.0379557978120468 351:0.0352326896390228 363:0.0463786006477731 387:0.0700911377964767 506:0.0277746899858419 594:0.0475367375102991 613:0.0459167877532789 717:0.0503116980840021 764:0.0459167877532789 806:0.0532945211102417 808:0.0518167787279182 834:0.0500296553850073 895:0.051627139808201 965:0.198360769002493 994:0.05684014321471 1046:0.16733441218955 1113:0.0602767476889109 1243:0.0660994651742307 1664:0.0589246792075206 1954:0.0703244501115541 2160:0.0768763442164821 2736:0.0648839429898741 2804:0.0648839429898741 3052:0.0889633442658422 3243:0.0965865288711802 3950:0.0910632119155682 4500:0.0922484961835545 8199:0.848229612580095
++1 6:0.0233852875833601 28:0.0431721342934449 29:0.0212327013641281 31:0.0222830486711246 49:0.0528092931406353 60:0.0887483837700482 63:0.0126368141563986 75:0.011848564197065 80:0.0380659811859224 96:0.0362224642026636 142:0.00303207282879307 179:0.0956083265521862 204:0.0701931430170101 240:0.0526305587907913 312:0.0529900414410242 341:0.048847946795986 391:0.0605022409496835 405:0.0555997202267035 408:0.0344256581527883 413:0.0505497649831883 455:0.0426867344169262 478:0.045847409740222 480:0.0430005685730902 507:0.0312599809196063 546:0.0505107826020565 565:0.0621842915207824 737:0.0688912551102194 984:0.067042738366994 1033:0.0700330110136091 1059:0.0535919479684362 1149:0.0560883237433081 1192:0.0727486658507355 1232:0.0661926723699248 1248:0.0752734317895601 1359:0.0649007289911362 1665:0.18903402845875 2017:0.0879212670676161 2223:0.0742153840702509 3945:0.107234486112636 4177:0.104761717762101 5406:0.105950501673203 8157:0.811164615705082 8218:0.118353427736976 8233:0.355060283210927 8778:0.129472369361315
++1 27:0.0824301952103377 65:0.202530970937398 111:0.177040474823198 142:0.0146820815679921 204:0.169946684905274 322:0.245344104534315 389:0.241264721781999 506:0.158375768260663 515:0.204531317863223 740:0.405358169601848 4784:0.462245465456058 6813:0.573097935967924
++1 6:0.00932846504342859 15:0.0639203273874091 28:0.0688860026494896 40:0.0582860422576615 63:0.0403269204872715 74:0.229419522126822 75:0.0378114373092552 96:0.0577970212933066 103:0.0888010769068194 142:0.00725702054123597 159:0.112239275291774 180:0.143771982629323 229:0.146555773977211 255:0.0868248719958979 308:0.0689253502486419 363:0.0871438245120165 455:0.136222984953927 475:0.0755895830763557 574:0.0698474530804937 626:0.0880420081854042 834:0.0940040330750488 896:0.118148148478161 965:0.0931782966852619 1031:0.114629494862079 2503:0.55470193031881 2886:0.346663618592946 2974:0.482179722396907 3079:0.137273555554714 7126:0.206587747509473 7127:0.206587747509473
++1 6:0.0193999731994898 28:0.0716295016917865 29:0.0352284602828621 41:0.0446648959379451 63:0.0628995102379255 75:0.0589760105509383 80:0.0631575739393211 122:0.208810969583638 142:0.0125767389876663 265:0.0916349797536096 317:0.0578140209858445 472:0.176750508138243 719:0.104405484791819 995:0.151814461685456 1245:0.0948566100356253 1534:0.164323606237195 1910:0.118710881830781 1955:0.291750994072121 2369:0.505790336400408 4234:0.617737775183914 7374:0.188710680087724 7861:0.225606898489992
++1 6:0.0188827964772949 31:0.0359855547168811 81:0.0574846679931861 142:0.00489658413875352 199:0.0441326542263463 205:0.0747070605945489 229:0.0988866814172384 308:0.0697597812079606 327:0.0794012588579452 355:0.0568232156428109 394:0.0879563270558713 528:0.0987839164815495 574:0.0706930472932133 671:0.115317897289906 808:0.0985406707852993 819:0.189651012568893 1003:0.0997804038085154 1700:0.135693019548118 1709:0.120409748466338 2195:0.146970141533205 2873:0.272412032081084 3050:0.146970141533205 3185:0.14858976116028 7003:0.836355042927923
++1 6:0.0217372792609427 15:0.0248246272815232 29:0.0263151868382218 63:0.0313233930871678 75:0.0293695253621568 80:0.0943557195016307 83:0.0187742215607852 96:0.0448930589135629 142:0.00375786206514385 172:0.0568219338967748 243:0.273284005596316 306:0.0568580484287981 355:0.0436087281322537 473:0.0637948020570457 496:0.0607594270161872 1273:0.0972812249065944 1298:0.12597857363201 1527:0.188433096789657 1700:0.104137013929572 1949:0.0901625611015171 2033:0.146683764370384 2161:0.192412624158587 2542:0.109470382161166 3087:0.124842204667946 3185:0.114034561831331 4660:0.845786065868825
++1 6:0.0378781390022991 15:0.0432579750005485 26:0.136622523364546 27:0.0183820093962911 28:0.0466184874560938 29:0.0687830081881928 37:0.0298699162672356 63:0.0409367643186802 64:0.0547544685825109 75:0.0127944135825934 88:0.144617064674684 94:0.0378982671438036 96:0.0391140378092698 97:0.0393923054029287 134:0.13564078127173 142:0.0294670593204523 174:0.0925519846652484 176:0.0981695009448596 185:0.0367622604012472 186:0.0716482683265993 198:0.0549685848463441 204:0.227389602862822 220:0.0506441201632148 226:0.0489505056781672 232:0.112069754890685 255:0.0587585873811435 265:0.0596386133267334 308:0.0466451158782254 317:0.0376269853685717 322:0.164135883338614 323:0.0540048512929543 373:0.0450670051375294 389:0.215209020018628 394:0.0588122983859936 404:0.0530147655268838 405:0.0600381450296855 430:0.0491341305622593 473:0.0555825858179672 502:0.0435760392544814 506:0.10595382624839 507:0.0337554084881013 508:0.0489809749651534 515:0.273664032739745 561:0.055943469395831 740:0.180790489782803 772:0.0584925024994054 774:0.0708188449494794 799:0.0636882094681692 800:0.167016312860688 808:0.0658895559576931 834:0.0636170726733823 909:0.111165171635934 987:0.103079360527917 1192:0.0785560598732089 1380:0.0650213120903696 1446:0.131779111915386 1731:0.156777396655832 1954:0.0894236751989118 2376:0.087630165800354 2694:0.0925189359779094 3493:0.117302012987243 3904:0.107834900311134 3929:0.109761526869616 4740:0.103788274042862 4784:0.618486985337668 5369:0.113124655644205
++1 63:0.0554623927735796 75:0.0520028001652496 80:0.167069830553479 142:0.00665381369336155 583:0.403827876529974 784:0.251965884414255 8379:0.568248239941652 9778:0.645595234862229
++1 6:0.0388432556231812 26:0.084062159420414 29:0.141071131790459 31:0.148049691928897 41:0.0894295034565314 60:0.147412177192 63:0.041979813229998 67:0.10986073342172 68:0.119228811349009 81:0.118250051360661 96:0.240663867196013 142:0.00503631095136563 153:0.168448757701598 176:0.100670812242646 192:0.15684640222121 306:0.152403045673935 345:0.142525999039629 355:0.116889396822067 404:0.163096668163035 414:0.143500832460711 453:0.188380252839145 473:0.170996409485191 477:0.2076598300012 505:0.139704135897603 510:0.175583274398261 547:0.243783638105157 561:0.172106645634674 1675:0.286997628953447 1711:0.282360844216937 1785:0.294810041249064 1980:0.241158013090468 2254:0.313021658668157
++1 6:0.028889833868409 15:0.0329930599593022 29:0.0174870407387728 37:0.0683457747413102 63:0.0104075539033663 75:0.00975835911110638 80:0.0627015236868723 142:0.00124859244640461 145:0.0404052836419311 158:0.0345596845486589 179:0.0524947084440417 205:0.0380994868701225 228:0.0364155495856052 229:0.0504307329227322 256:0.0327673476398793 299:0.0398601102551111 341:0.0402306810131076 351:0.0341702675298935 423:0.0364806840147525 437:0.0433094563658061 507:0.0514908160256943 521:0.0474802328140203 546:0.0416001759720378 560:0.0573575476345053 583:0.0757785624184204 586:0.0353947758372292 647:0.0869864125811391 676:0.0481473581694873 784:0.0472815613014792 903:0.0536098143989301 1251:0.063253628015891 1379:0.0508219144309986 1598:0.0503783243379635 1947:0.0668359375226883 2001:0.0630895090529645 2095:0.0714556195976454 2137:0.0679658057308719 2682:0.0708549976878781 3836:0.0815685265134845 4164:0.272177927286844 4400:0.213264300075529 4900:0.0845165667041774 7804:0.106632150037764 8320:0.223977828901135 8379:0.426528600151058 9778:0.726878182196186
++1 6:0.0152120609834458 15:0.052117894732535 60:0.230922253366318 176:0.0788507817132726 180:0.234451022465785 229:0.079663530239198 337:0.116298729172355 345:0.111634009782819 457:0.104894770515721 496:0.127560965380363 499:0.226612741856907 513:0.22766944263341 571:0.120058896436863 574:0.113901237861992 908:0.161802796985846 930:0.13318724956819 960:0.17530504965161 2970:0.24675060667547 3691:0.699503282903985 4771:0.259842398209246
++1 6:0.0385691451573562 15:0.0330353436234322 26:0.0556459643921961 27:0.0280760251439387 29:0.210113424026112 37:0.0152074147079818 41:0.0147997356933988 42:0.0192295552522063 63:0.0138945228643521 67:0.0545427321481672 75:0.0130278204702808 83:0.0166558488737677 88:0.0245425492847387 92:0.02121777764473 94:0.0385896404940302 96:0.059741385467663 102:0.0306256961676039 134:0.0690576295446961 138:0.0269518454004014 142:0.0050007705333762 153:0.0278766737542806 158:0.0461386346498596 174:0.070680299214384 176:0.0499801974397117 180:0.0247681086946236 199:0.0751194678306818 205:0.101728839716271 227:0.0456920846124874 255:0.0598305129459228 284:0.0390374503281493 306:0.0252212604080884 312:0.0873960002821365 323:0.0274950275222466 351:0.0228093732630858 375:0.0227850116670036 387:0.0226882327295203 404:0.0269909536337764 405:0.0305667067023513 408:0.018925976452779 411:0.0240798127372291 413:0.0277904247326015 475:0.0260441704367873 480:0.0236401507462392 500:0.0332619345277884 502:0.0221854957458012 527:0.0613106790611043 538:0.0563259101346218 557:0.0302491345367105 587:0.0814152000983476 603:0.0344110762374281 643:0.0523008468700656 644:0.0612513923352078 709:0.0280296695251128 737:0.0757478196194078 757:0.12214943712139 781:0.0348299941988376 799:0.0648500655124802 808:0.0335457854454222 823:0.0366208994423858 824:0.0359465155478636 1050:0.0379414878581873 1080:0.0324979165774742 1154:0.0873127317008702 1155:0.0748296607333241 1216:0.0344110762374281 1229:0.0362772627674488 1274:0.0895203322245181 1292:0.0385741896192526 1296:0.0981607600987053 1305:0.0292325013774332 1410:0.0443298909153152 1614:0.284306783493085 1625:0.0434007278883708 2114:0.0460221570222816 2246:0.0407076000491738 2306:0.0452125161446931 2646:0.0479056439838901 3170:0.0497691560962486 3184:0.0508729563580725 3738:0.0597209694737174 3930:0.055881946342062 4450:0.0614906626994053 4784:0.0524808305083667 4787:0.0575941872982785 5096:0.343210844182776 5106:0.063706977544092 5795:0.390398494607882 6141:0.343210844182776 6754:0.0711792060137937 8033:0.523284713576581 8784:0.0711792060137937
++1 15:0.105450788249814 37:0.145628925778241 111:0.192483214099402 1347:0.465011537051164 1815:0.400215849436182 3170:0.476598348789827 5086:0.571898695333651
++1 6:0.0302267084411683 15:0.0258898582243751 26:0.0981221453880711 27:0.0440064628215326 28:0.0558022436721909 29:0.0274443780630933 63:0.0326674876902074 64:0.131081996208489 83:0.0195798280864224 86:0.0587032732614979 94:0.0453641560100826 97:0.0471525170561116 134:0.108241177001436 142:0.0274337900396278 176:0.117508711925967 178:0.0609857516905525 192:0.0610266878242485 198:0.0657972948779195 199:0.0353227572419868 203:0.286437116737916 226:0.0585936651913616 308:0.0558341178444663 387:0.0533424264107484 402:0.115195331438015 436:0.0667471164395443 485:0.0522944673284334 575:0.0788696771954799 582:0.06373689159867 609:0.0535128450001247 757:0.0717965502033602 808:0.0788696771954799 994:0.0865156780707726 1243:0.100609177356612 2548:0.105235868101329 2783:0.127003032235854 2798:0.516312708703442 2799:0.645390885879302 2833:0.1141677835393 3900:0.135410004572456 5975:0.147013159453649
++1 6:0.0465197544584178 15:0.0531269599932497 29:0.197109125498686 37:0.0366845153179505 48:0.0474318444127603 88:0.0592034571599471 138:0.130030699421792 204:0.0465444746855768 208:0.0580872078637154 252:0.0559548339742998 275:0.10427553530909 286:0.043443652412102 287:0.21590173751101 292:0.0764548796714273 331:0.0606098780875045 373:0.276743534449629 382:0.0680994849057698 408:0.0456547208333008 475:0.0628257851632187 490:0.0802370402938302 502:0.0535175882391109 505:0.0557711756692832 546:0.133973077205012 586:0.0569943146284116 631:0.0520352439788353 655:0.0587078761776635 800:0.0683732804679934 814:0.0860702401336092 834:0.0781308342511082 866:0.0867129966246282 1026:0.107276415659362 1048:0.105311300606918 1067:0.0824677470797452 1155:0.0902549804855349 1192:0.0964780401777562 1314:0.0904096984150204 1347:0.351414859983661 1411:0.0981980570817945 1415:0.114572092502417 1638:0.116599685196054 1707:0.0886234506963206 1730:0.109441702176974 1815:0.100815990921234 1903:0.130307492496484 1972:0.112721045399058 2013:0.122022166446987 2073:0.112282398486776 2108:0.116599685196054 2275:0.122022166446987 2487:0.138933203752224 2596:0.107276415659362 3170:0.120057051394543 3852:0.301676516460096 4281:0.124961124462828 4335:0.140509748704585 4517:0.138933203752224 5086:0.288127188155335 5730:0.260614984992969 7440:0.171704048549558
++1 6:0.013325664913783 11:0.0199603690761067 29:0.0483962170803702 33:0.0245799644947942 46:0.0371937118956486 58:0.0297965331198064 68:0.109074495266723 75:0.0270067230324561 80:0.0867647247167335 83:0.011509213390181 94:0.0266654921320558 142:0.00345553898934581 172:0.0348337085691337 176:0.0230242546017569 178:0.143392072058873 179:0.0968544018159923 183:0.117230802324806 199:0.0207630602696404 206:0.0423657595454352 208:0.19967018573867 251:0.0502131493350844 288:0.046134658179768 351:0.0315226136080759 387:0.0313551970733112 400:0.0391397576086539 414:0.0656396750664107 441:0.0939659639205114 455:0.129729227877642 460:0.181541322832333 471:0.0463035440057646 477:0.0474935355143559 507:0.0475010942341178 599:0.0416486272951932 658:0.0410816538078751 671:0.0542535338871401 696:0.0980463156529863 852:0.088162915435147 913:0.0463603633724921 1036:0.0502131493350844 1057:0.0605137742774442 1083:0.047619183349761 1098:0.0498286464031741 1146:0.0508547570549513 1426:0.0527197870406471 1626:0.0638394040067757 1726:0.0599799196477033 1819:0.0616572121309281 1949:0.110545212451321 2146:0.0684278117823742 2185:0.0555115890216103 2334:0.444519864849215 2401:0.0601552857248635 2592:0.0601552857248635 2944:0.0730261727901213 3785:0.0758734080082523 4188:0.0740866441415358 7194:0.196739698388268 8372:0.688588944358936
++1 6:0.0154538482330866 15:0.0264731398428215 26:0.0334442577736283 28:0.0570594318236276 29:0.0280626819995292 63:0.0334034648796299 75:0.0469797719344831 80:0.0503107685970351 83:0.0200209488417458 94:0.0463861808550123 96:0.0478742425057613 134:0.0553398900580458 142:0.0100185197981433 162:0.0418490546530072 227:0.109847164852715 228:0.0584385890743137 337:0.0590736163984042 339:0.0601008685452097 363:0.0721826920179178 404:0.0648882570906194 472:0.0703989510655916 561:0.0684728903093436 731:0.0890457129628213 903:0.0860314329911338 1081:0.0859040976429328 3028:0.430720937854771 4181:0.450975810128688 6690:0.171120097570372 6691:0.684480390281489 7591:0.165020871776471
++1 6:0.0295069493811985 15:0.0505467366782536 37:0.0698057082950505 63:0.0318896087399656 75:0.0299004220287158 81:0.179655295306443 96:0.0914091318210502 142:0.0114773725780005 178:0.119067115204418 179:0.0804240712439451 204:0.177135774835106 229:0.077261975114799 243:0.139112004710105 312:0.133722920014076 345:0.108268665221184 346:0.122917368325519 355:0.0887940379840147 363:0.137822696809669 405:0.140308570034905 413:0.127564764920979 475:0.119549035730757 485:0.102098460596868 568:0.207536374451944 571:0.116439573302401 693:0.350851454036774 737:0.173850398041793 834:0.148672489667952 837:0.160097498760137 1033:0.176731674017289 1391:0.186433833907593 1726:0.19921982854708 1746:0.17233408421708 2313:0.270611386955605 2528:0.16974011788059 2935:0.23489152634094 4727:0.28702495760079 5690:0.32672975565428
++1 6:0.0453634771895804 28:0.167493183247378 29:0.0823756526894421 31:0.086450642653301 60:0.172156757466151 75:0.0459683952798846 80:0.14768304756323 142:0.00588170515824538 159:0.136452347218157 200:0.438237904171408 229:0.118781233548168 245:0.26225666018102 631:0.15222562742016 646:0.294930441341106 655:0.171745966815969 777:0.312834207833607 2874:0.433937064981276 4258:0.427379999906658
++1 6:0.0175546378484058 15:0.060143774630316 26:0.075981312158585 27:0.0511148952473556 28:0.129632133872654 29:0.0637550223253768 31:0.0669088798990578 64:0.152255875055987 80:0.114299986550275 142:0.00455217326275922 159:0.105607933402859 172:0.137665131789912 192:0.141768847365901 325:0.315268277951849 365:0.185998858594175 404:0.147418278820842 499:0.130754952253391 513:0.131364665804561 842:0.254224494320699 1294:0.199381009672605 2134:0.478308917035103 4786:0.347952617971805 5414:0.314565986693132 7993:0.364159384463314
++1 6:0.0360662000516493 29:0.0654927036758332 63:0.0389785129437095 75:0.036547139746122 83:0.046724902125302 96:0.111728935181156 142:0.00935249094753347 172:0.141417277478115 174:0.396561002445273 186:0.102331351812105 218:0.102290611142528 339:0.140263442188372 404:0.151436252377749 405:0.171498479577295 473:0.158771210437009 480:0.132636137397366 506:0.100885418195445 535:0.1710061417798 574:0.135023940389522 613:0.166782575684637 716:0.172666684878148 737:0.212496492057882 761:0.183371128430541 808:0.188212987945917 850:0.165305464788257 1080:0.182333783509555 1471:0.208856650042935 1482:0.427285575007345 1711:0.26217376815869 2175:0.280713427829898
++1 6:0.0307751052188546 27:0.0224024313841222 33:0.0425748545286803 64:0.200190283708799 67:0.0870415101986518 81:0.0468441395343224 142:0.00399021649850197 204:0.0461871882971346 215:0.0490144808682639 229:0.0402912782147778 308:0.0568471044344703 387:0.0543102067701137 426:0.0692619656157757 437:0.138407138237636 440:0.347356387858342 478:0.0603353221010309 749:0.0895621619236232 764:0.0711573621287499 882:0.0577766397559774 1003:0.0813108489963127 1146:0.0880853137181903 1213:0.0978934382805912 1665:0.0829231070322105 1791:0.107860812807534 2166:0.579879025172371 3292:0.133768024012065 3837:0.144969756293093 5697:0.545641032142531 5724:0.170386007690754 6098:0.159602315212523
++1 6:0.0240421286534719 28:0.177538976713979 29:0.0436581620848101 31:0.0916357211401508 67:0.203995713890172 153:0.208523546196392 159:0.0723181971517975 185:0.0700015642879584 220:0.0964349742022963 277:0.108863523410562 278:0.207558155016499 322:0.104180831683381 373:0.0858152034985716 387:0.0848564428344354 539:0.111682689644127 764:0.111179113297912 772:0.111379622182775 903:0.133842312220137 1150:0.131171660240692 1236:0.132479963587487 2354:0.350924713599238 6118:0.748107153839511
++1
++1 6:0.0289087459745033 17:0.0196908767159219 26:0.156406277857325 27:0.0210438337574897 28:0.106738243779768 29:0.0918670633256142 32:0.0270886781270908 37:0.0341952579136788 41:0.0499178317427381 48:0.0221066591579332 60:0.0274275489761522 63:0.00781077523789518 67:0.0204407173401665 88:0.0275930793881201 97:0.0225482728343821 134:0.103521582444417 140:0.0510707395945824 142:0.0046852867893606 153:0.0313416207523683 174:0.0529770314341748 232:0.0320745305956329 255:0.0336335902679715 274:0.0390525937355592 284:0.0438896323897466 331:0.0564971458762792 355:0.0869938893027654 373:0.0515929756979373 420:0.0367451336934935 469:0.0417820217882027 475:0.0585626907883505 527:0.0344656623695686 530:0.0297059074383681 558:0.0802298745002329 561:0.0320222083560847 586:0.0265634596973704 598:0.0381898723317035 757:0.583661300851596 799:0.109365961859759 903:0.0402336816799845 936:0.0422832497282302 965:0.0360947339228746 987:0.0295014663524149 1015:0.0903202824802521 1059:0.0331250151313237 1080:0.109611790731335 1122:0.220675702886791 1140:0.0734064191319521 1294:0.0410422519859102 1312:0.046987520231565 1359:0.0401149372501165 1497:0.0438730537395757 1579:0.0907168973565179 1744:0.0496837542746801 1808:0.0726673242881373 1969:0.0493786520055008 1979:0.0533988553327426 2054:0.112502469973899 2062:0.578803065402553 2190:0.0556678289940823 2398:0.210144535715547 2864:0.0533988553327426 2975:0.154104930767555 4238:0.0654876731325986 4787:0.0647528895217039
++1 6:0.0141355841981236 15:0.0242148940246298 26:0.0917740580674349 27:0.0617391465252767 28:0.0521920747942329 29:0.0256688430122031 31:0.0269386390531879 37:0.0668821743899479 41:0.0325446015176895 63:0.0458310593445725 64:0.122601546104145 75:0.0143240810049871 94:0.0424292872050842 97:0.0441019488640267 132:0.0428663250496773 134:0.151857646774786 142:0.0329900657001712 174:0.0518086318282289 176:0.109906395840324 192:0.0570785195319087 198:0.0615404885097471 205:0.0559253999532514 226:0.0548029031610391 255:0.0657836140713149 265:0.0667688536721568 284:0.0429216538563889 323:0.0604615334332315 387:0.0498913972938167 455:0.206421041893965 508:0.054837015278186 546:0.0610639845962411 808:0.0737671430447319 1038:0.0938433284448334 1457:0.0935898250494305 1471:0.0818581042026056 2185:0.0883282836913057 2423:0.0912219199788117 3391:0.412506091637592 4593:0.656631710875465 6831:0.405653686539159 8110:0.156522990954337
++1 6:0.0289647101277303 15:0.0992357127044262 26:0.188050875854257 27:0.0843382892221503 29:0.0525970902045471 63:0.0313035841593436 64:0.37682753620358 81:0.088176915279128 88:0.110585986222058 94:0.0869403052322815 97:0.0903676952441828 134:0.31116596653252 142:0.0187774279574499 176:0.150136791993884 192:0.116957513010406 198:0.126100370937648 204:0.347761220929126 226:0.112294630484977 229:0.0758421578654286 402:0.110385799686529 457:0.0998630831551675 483:0.14061390428548 582:0.122151612584032 808:0.151153562901567 856:0.108691837423105 991:0.153842110777084 1150:0.158028815609724 2578:0.218802306084868 6261:0.269096018949229 6842:0.320725553169536 7934:0.336837497164726
++1 6:0.0161695016590906 15:0.0276990864769444 27:0.0235408554321563 28:0.0597018013651501 29:0.0587244777230855 64:0.0701211168690571 80:0.0526406137830566 92:0.0533712981341371 132:0.0490342036307126 142:0.00838597455103156 204:0.0970685640212466 209:0.101573974583171 251:0.0913937435844595 278:0.139592961183677 284:0.0490974934968674 299:0.0669285384440717 308:0.0597359029599363 309:0.059498285414381 327:0.0679919835169113 337:0.0618092609656551 346:0.202072321885327 351:0.0573748052722821 389:0.0689016679125509 438:0.0901495062880852 505:0.0581554306130303 537:0.0904200350438176 539:0.0751120444250528 565:0.257979894751465 643:0.0657788986600919 723:0.0829754937934637 772:0.0749082168068835 827:0.069056976012795 856:0.0606770389826867 1098:0.0906939037450585 1237:0.0991439724509621 1262:0.249093074897588 1487:0.121584399477793 1588:0.144872690842494 1688:0.108855737047762 2291:0.13696054094291 2341:0.112589933314916 2754:0.113341974250914 3050:0.125851801146902 3148:0.144872690842494 4130:0.141910552871493 4160:0.139297762010856 4784:0.132010529014326 5193:0.167712823873143 5211:0.13809838435169 5824:0.15728669433661 6754:0.179044511103966 7090:0.376077954533685 7722:0.480746496922831
++1 6:0.0242923294433093 80:0.158169764174159 147:0.312772207199468 204:0.145831429162654 220:0.19487710068808 339:0.188948419385073 916:0.588717781016531 995:0.380199176524505 1046:0.272924143950457 5477:0.464750182008055
++1 147:0.36548778701912 204:0.170410302116462 387:0.20038064850717 742:0.291337965245097 916:0.343971033886199 995:0.444279102988885 1046:0.318923609900304 5477:0.543080592293579
++1 6:0.0660475591935363 27:0.0961573260204772 29:0.119935929390391 31:0.125868965337487 41:0.0760312225176722 42:0.0987886962703321 47:0.078152078096731 63:0.142761679203182 68:0.202732027704935 75:0.133856595498258 80:0.107510550668883 83:0.0427833502630387 142:0.0513812820795892 144:0.0981666414169981 169:0.12035893395462 174:0.121036160566512 176:0.085588364363175 180:0.254484218166513 186:0.0936990313158246 189:0.12356158548514 204:0.297371953532987 229:0.172941120035126 255:0.153684739287842 345:0.121172829197277 404:0.138661611545479 498:0.169664134775884 507:0.0882882210798903 530:0.135737654041705 553:0.211077569133424 561:0.146321718954646 579:0.193884557774778 582:0.139269749760171 636:0.168872750169623 684:0.154534244490191 808:0.172335988329076 823:0.188133883738427 1001:0.193545188272275 1482:0.195620617554851 1707:0.18873796757782 2731:0.241011529469681 4071:0.251849978075879
++1 174:0.199993319951885 204:0.163786877049189 278:0.235539645619139 389:0.232519953801046 1038:0.362256985925487 1543:0.382491039984551 2376:0.378715763897119 9640:0.634568300470963
++1 6:0.0157122733513238 17:0.0428089738324386 29:0.028531956823793 31:0.0299433864624089 63:0.0169810251515995 75:0.0159217951732578 81:0.0956653658905956 142:0.0162976852646507 158:0.0563877812213207 159:0.0472621745895149 162:0.0425488704356977 199:0.0367225441293929 229:0.0411415377775523 255:0.0731211467343314 317:0.04682427609192 324:0.0832391113534508 339:0.0611058980903232 365:0.0832391113534508 408:0.0925206242202849 436:0.0693922026575926 515:0.227037769124375 829:0.0582801371000452 1010:0.437350416405896 1064:0.0727900218290447 1190:0.170035837303023 1273:0.105476116353054 1817:0.111677335716659 1946:0.109406204727201 2161:0.104310653741429 2537:0.472585330118103 2581:0.36687919202473 2589:0.127432206126081 2734:0.260149996350624 2837:0.236292665059051 3535:0.137897719123633 3636:0.136590906448393 4540:0.150300157850841 4778:0.130074998175312 5153:0.12434755189313 5620:0.14237355329201
++1 6:0.0213711237689241 11:0.096034724141457 15:0.0732194000613626 63:0.0461936451999761 75:0.0433122117548295 81:0.130119705095067 142:0.0138546091147146 158:0.0766961103966746 179:0.232996337012093 180:0.0823439017290237 218:0.0606125765396758 229:0.111917718872153 255:0.0994560775543914 312:0.0968520682176557 317:0.063688263141526 345:0.0784162068008451 346:0.0890258853227614 386:0.0851028982667493 430:0.0831655102269505 480:0.0785938996759241 507:0.0571351469479018 531:0.601180150087555 641:0.507310611634787 1033:0.128002201465099 1064:0.0990056964303093 2202:0.1498033403255 2216:0.14557405219649 4619:0.3620396885026
++1 6:0.0177777108780408 15:0.0121816085951201 26:0.0153893667457476 27:0.020705772163824 29:0.0129130360160237 31:0.0271036459376923 41:0.0163719732644466 60:0.0539738706033267 63:0.0153705959059039 75:0.00720591005312963 81:0.0216481877296478 134:0.025464636396989 142:0.00553202321785959 147:0.595124979531625 171:0.0307427173130333 176:0.036859868004251 192:0.0287140709110439 198:0.0309587208193321 204:0.0213445893744801 205:0.0562679590555404 220:0.0855694492585043 232:0.0315592648387278 286:0.0199225993617521 292:0.0350610469510272 339:0.0553107988845557 346:0.0296227089795072 365:0.0376724824549216 387:0.100393992801082 394:0.0331235292224615 414:0.0262708804328154 415:0.0618689657885149 457:0.0245172420078548 478:0.0278828983210349 505:0.0255758143503493 506:0.0198913308740086 510:0.0321442539992361 561:0.0315077831370726 574:0.0266223397022272 586:0.0261367273052573 599:0.0333379501576117 607:0.034878006688169 613:0.0328841120580526 664:0.120580454519539 742:0.0364912752346588 800:0.031354948264734 806:0.0381678050669886 844:0.0389613935882598 856:0.0266847767782222 876:0.0686286806833684 916:0.17233513194522 987:0.0290275359438447 995:0.0556477801117873 1046:0.119839471157618 1080:0.0359503056256564 1086:0.044828885622029 1127:0.0409743622716002 1198:0.0423547980163935 1216:0.0380667082055589 1339:0.0429170138001182 1380:0.0366204924856511 1471:0.0411797542752181 1472:0.0361548363836481 1591:0.0421999414344166 1778:0.055056340861904 1936:0.0478729861056212 1980:0.0441491050517048 2185:0.0444346598713917 3719:0.059303199412296 3950:0.0652165147328691 5477:0.680230719374807 5563:0.0737573774682231 5564:0.0737573774682231 6275:0.0704748351401837 8807:0.0787408695658093
++1 6:0.0409486489985813 15:0.0467645898490248 26:0.0590790139316581 28:0.100795030060399 29:0.049572503358624 60:0.103601503102802 63:0.0295034768052981 134:0.0977574732812203 142:0.0283162161820589 158:0.0979702686094165 228:0.103231300315781 337:0.20870614201202 404:0.114624587294042 480:0.100394471407844 507:0.0729834363773306 513:0.102142154441832 561:0.120956813211637 579:0.160274622297554 731:0.157298539925535 808:0.142461502631911 1064:0.126468143207955 1175:0.144622787445718 2442:0.237318218672753 3028:0.253621697536412 4181:0.265548387506673 6690:0.302282284055303 6691:0.604564568110607 7591:0.29150805046073
++1 6:0.0278753901557114 15:0.0382014416414632 26:0.0723914240528455 27:0.0162332901435247 29:0.0202475965275167 37:0.0791350401703078 41:0.025671198361598 63:0.0361515631069316 68:0.0342252427695261 75:0.0112988424401741 94:0.0334682434993372 97:0.0347876398734244 134:0.0798569264185969 142:0.0173483871580754 174:0.0408666753465257 176:0.0866942213838967 192:0.0450235654688699 198:0.0485431688860796 204:0.0334682434993372 226:0.0432285581089015 232:0.0494848198647222 252:0.0402348510981727 255:0.155670445513026 265:0.105334612013166 278:0.0962604374092977 317:0.0664573450645092 322:0.048316542545435 323:0.0953841771371653 363:0.0520807677709963 389:0.0475131742693334 394:0.103875162189833 404:0.0468177364147403 414:0.0411926511136668 502:0.0384823265657968 506:0.0623790782326462 527:0.0531738754146774 549:0.0595315752531652 561:0.0494040967317292 586:0.0409822994662052 599:0.0522737923915152 806:0.0598469884524693 808:0.0581875602514408 856:0.0418416391746938 987:0.0455150775735182 1059:0.051105515072228 1126:0.0594537277660503 1297:0.082384143681994 1709:0.0711010939737901 1792:0.0658122199693154 2376:0.464321133591416 9640:0.778006887233504
++1 6:0.0190840109347916 15:0.0653835449421606 28:0.140925781647542 31:0.0727380312060518 60:0.14484962994578 96:0.118240137174213 107:0.182550733190262 186:0.108294892955595 245:0.220658083581216 345:0.140048390925354 363:0.178277314879195 571:0.1506176773097 737:0.224880102269162 903:0.212481031672545 936:0.223305155023677 1014:0.234028814772916 1844:0.248149221191068 3298:0.291081626283472 4856:0.345851728403253 5294:0.350043008582281 8894:0.422633607363095
++1 6:0.0255107953889721 27:0.0185703294657037 28:0.047096084687407 29:0.0231625588577684 98:0.0413701062888459 142:0.00496149059087309 172:0.0500145180951036 176:0.0330584093887216 186:0.21714687221418 198:0.0555317271824516 314:0.0508937347690455 408:0.0375546342176004 411:0.047781342306498 442:0.0542722453893887 527:0.0608290972864011 528:0.0667288948464885 555:0.0734971293038885 586:0.0468823508124839 640:0.0595238487180394 641:0.0504648911306832 693:0.0758338276538225 727:0.0682815697438331 761:0.0648521792001558 772:0.0590917466785009 800:0.0562424540412472 808:0.0665645814940211 880:0.0750197625741703 963:0.0541109608977625 965:0.318521381916036 1017:0.0751528373102761 1046:0.0716533999886547 1080:0.0644853053128432 1126:0.0680130338839668 1309:0.150573863572205 1598:0.0667288948464885 1675:0.0942446464886701 1785:0.0968100963765629 2194:0.0972767705250737 2264:0.086626909574438 2280:0.086626909574438 3944:0.110886012115669 5107:0.114283595482822 5351:0.124076448403504 9210:0.802325511076747
++1 6:0.00858448929765018 26:0.111468108885999 27:0.0249959739979075 33:0.142511311185335 37:0.0406173032686046 41:0.0395284382320727 48:0.052516806952596 67:0.0971183568586278 72:0.0534232993823828 76:0.214257012324942 85:0.052608191254739 110:0.0828484301043985 142:0.015582581705682 176:0.0444971718470992 194:0.0680144765320368 207:0.101519356340568 229:0.0899116462254043 303:0.0767004388572469 323:0.0734361423486117 355:0.051665894628512 398:0.0667711051673483 423:0.0650404657061146 426:0.0772804639769118 437:0.077215306883269 480:0.0631401977662617 671:0.104851551654762 676:0.0858406765782185 712:0.157662180890213 780:0.174186692496916 789:0.0882079499659202 795:0.101702659011429 808:0.0895970397982974 1011:0.206054689530299 1042:0.195620650476475 1128:0.516399329099443 1171:0.14213441998624 1215:0.100623648632734 1241:0.321152497478326 1558:0.206839850183378 1769:0.263163045528813 2787:0.323505979922645 3807:0.178079568804553
++1 6:0.00575681589278553 15:0.0394467422949836 29:0.0209076330105527 42:0.103327058924339 80:0.0374831987307305 96:0.0356679056187662 138:0.0482738659541185 159:0.0346327525903946 174:0.0421988579901514 179:0.0941445824544647 245:0.0665629445912814 346:0.0479624410056165 351:0.0408542202228297 471:0.0600107341170578 535:0.0545913278001056 586:0.0423182512553293 998:0.0637201789913509 1080:0.0582075195721385 1916:0.0703116984542046 2007:0.310942852226836 2823:0.0830505120126701 4355:0.108472636056499 4784:0.0939992248947812 5114:0.106967149454683 6483:0.0927835749345129 6831:0.440547497135287 7217:0.127490173633131 7388:0.114106549982649 8315:0.535579040401313 8316:0.535579040401313
++1 31:0.119541300923265 67:0.177411986779731 274:0.338950836618281 278:0.270765281913992 387:0.221395094444331 764:0.290072379499267 2354:0.457790873120507 6118:0.650617476003702
++1 6:0.0193883363307221 28:0.0715865354926835 29:0.0352073288635048 31:0.073897956665203 67:0.219344832450031 153:0.168160012152114 159:0.0583196916304678 185:0.0564514852929051 220:0.0777682268000268 274:0.104766193953881 277:0.0877910037190741 278:0.16738149003553 322:0.084014732347755 373:0.0692041063293867 387:0.0684309312713514 415:0.0843427146899536 539:0.0900644689307615 720:0.0965163734214197 726:0.0893378948383602 764:0.089658368967262 903:0.107934692556051 987:0.0791434332564372 1236:0.106836051338785 2354:0.282996837430275 6118:0.804396500222264 7392:0.196249548326366
++1 28:0.314065747971827 159:0.255861209756145 245:0.491756336248595 4781:0.770761605849939
++1 6:0.0146379186248927 11:0.0328889695353966 15:0.0250754155806298 17:0.0398818338608909 28:0.108093635607039 29:0.0531620667305215 92:0.0483159429068222 142:0.00189791274425902 144:0.130538235745887 158:0.0525321660653521 159:0.0440305390701788 161:0.071425315187205 179:0.0398970762833779 180:0.0564005592685918 204:0.0878741825898741 218:0.0415159246011668 245:0.0846251629812821 252:0.0528202899555701 255:0.068121357853401 256:0.0498077389947142 318:0.176686346160997 351:0.0519402359084186 387:0.0516643814244357 411:0.0548332100043428 478:0.0573959717661984 502:0.101039153464775 731:0.0843442927991663 780:0.148507997500038 1018:0.158843540796054 1058:0.0821033332247227 1064:0.0678128742043527 1620:0.44257041909936 1746:0.256476425449025 2833:0.110576295681373 3874:0.120326210553686 4111:0.123987572122637 4425:0.127251259495397 4781:0.663192537714375 6060:0.135993269405803 6607:0.156308128308206
++1 6:0.03978060460099 15:0.0681459719773409 29:0.144475400538293 63:0.0859857045725763 75:0.0806221511251845 80:0.259015458485685 83:0.0515370306215998 142:0.0257892253609591 158:0.142763556802778 204:0.238810462185405 229:0.104162854757591 408:0.117122655876969 521:0.19613740700699 664:0.224849129749997 881:0.453253972284832 1017:0.23438119118583 1109:0.275206999093542 1226:0.314825276034605 4126:0.327003416799411 4402:0.394248107962897
++1 6:0.0187773804190207 15:0.0643330011032867 26:0.162547358192032 27:0.0546752283599602 31:0.0357846599321692 63:0.0202936368307058 64:0.162861034881262 94:0.0563620757084458 97:0.0585840004511419 134:0.134482771189886 137:0.0768606592570394 142:0.0389539857563679 174:0.0688213783875146 176:0.048665697770293 179:0.102359167061589 192:0.0758217743237966 198:0.0817489498646463 226:0.0727988986021662 265:0.0886941882253753 286:0.0526071986598457 317:0.0559586270785671 457:0.0647397158111251 808:0.097990552633765 862:0.0903399788642294 991:0.0997334972726273 1607:0.121474887953072 2161:0.12465928915974 4887:0.306603378988438 5829:0.365308981894108 5869:0.601531665062754 6556:0.179620299233549 8291:0.415842982402195
++1 27:0.0905956384882189 111:0.19457790696647 134:0.222834963603646 142:0.0161364722065045 176:0.161275959670362 204:0.186781414124548 515:0.22479196228243 693:0.369956496894239 1731:0.386338295350388 3350:0.498360078998627 4784:0.508034986140899
++1 4:0.0341443594725359 6:0.0236811577334933 15:0.0270445950144837 26:0.136664772281333 27:0.0459692345440416 63:0.0341245196117181 64:0.068464250951576 94:0.0473874834243575 97:0.0492556087655769 134:0.113068938830218 137:0.0646220560677888 142:0.0266104327520104 174:0.0578628783022461 176:0.0409166077976609 192:0.0637485938694035 198:0.0687319790475541 218:0.0447761818295734 226:0.0612070538116233 274:0.0853084975708934 286:0.0884609987535202 308:0.0583244254181695 317:0.047048276341924 322:0.0684111001833546 389:0.0672736159031243 457:0.1088622862567 496:0.198578703115663 506:0.0441610796789315 800:0.0696116502921883 1031:0.0969991360172665 1038:0.104809660121587 1227:0.0862554867507872 2161:0.104809660121587 2845:0.129775461690283 4281:0.127224407497853 5643:0.4794033309273 9888:0.734383495477712
++1 6:0.0186763857238375 15:0.0319934920783724 26:0.202091365531347 27:0.0815717340440484 28:0.0689578376756345 29:0.0678289919201463 64:0.0809925409974851 81:0.17056888272959 142:0.00968611764836289 176:0.0484039478774694 178:0.150726755372364 186:0.052990883302029 189:0.0698794583584015 204:0.168176791858696 218:0.0529697863065438 256:0.0635492360174479 322:0.323718656628689 373:0.0666628926502099 389:0.0795840313499762 423:0.0707509080078838 515:0.202401246555888 643:0.0759771148033135 740:0.133712202261845 834:0.0941020614395053 852:0.092672558509733 909:0.082217487944826 1057:0.381654775799455 1201:0.11909353098052 1243:0.12432817865877 1731:0.347856532667972 2139:0.279603793050696 2268:0.150505232978284 3350:0.149573410304711 4784:0.457431455488294
++1 6:0.0293406790951005 15:0.100523816340444 67:0.165969019474021 80:0.191040069006635 590:0.493120872911408 1046:0.329642315433068 2142:0.381516584304229 3467:0.424908754620377 3962:0.497048748343836
++1 6:0.0279393822610455 15:0.0957228468356681 26:0.0604646744474799 28:0.20631822614968 29:0.0507351947443324 37:0.0660972553571119 63:0.0603909239976395 67:0.237063627440881 75:0.0283119515350233 142:0.00724508873410287 162:0.0756599079775109 232:0.123996049077377 411:0.10466009916917 493:0.124712523897526 590:0.234784827653715 609:0.0989268041040311 613:0.129201361104349 1041:0.199299818090456 1046:0.156949377866284 1457:0.184982938175807 1518:0.179003250582257 1576:0.154851756763489 1676:0.189747305310559 2142:0.363295534273581 2866:0.191476784537548 3467:0.404615315239445 3962:0.47330993728334
++1 6:0.0261154360637205 11:0.0391180286903481 26:0.113034806918294 29:0.063230781656585 63:0.018816155868608 75:0.035284910894776 94:0.0522586271970611 96:0.10787015207267 102:0.0829474863296985 142:0.00225737097362683 228:0.0658368588244491 306:0.0683099623750156 346:0.072526206898033 351:0.0617775402255231 473:0.0766438639499832 505:0.0626180679303279 587:0.220507189786952 909:0.306575455799933 915:0.10786306820153 1235:0.102037926437308 1317:0.1129102561779 1418:0.110506352094081 2216:0.592969886809335 3237:0.557734584039951 4332:0.166543019161092 5478:0.152800255213767 6263:0.164026448205325
++1 6:0.0253841413120028 31:0.0322502516059167 48:0.0517636713813121 58:0.0567595997809172 63:0.0182892584428617 75:0.0171484244442445 83:0.0219239715974074 118:0.221625098509932 142:0.00658247754106159 171:0.0731606641168595 174:0.124047945296699 254:0.081660313321271 256:0.0575822614071696 355:0.0509249618619396 414:0.0625187110114226 582:0.0713676236046872 586:0.0621994571274678 842:0.490147431467909 884:0.174711443042623 1725:0.122067821994317 1943:0.101549845224334 2254:0.545493995623995 4226:0.50314216110586 4604:0.141128105530826 4692:0.171292890810147
++1 6:0.01642637276635 15:0.0562782365654234 29:0.119314767013404 31:0.062608537532472 37:0.07772098503712 102:0.469558959093373 159:0.0988203400229513 179:0.2686300958951 213:0.169586706993003 220:0.131775090034011 252:0.118547697206268 278:0.141810555718182 325:0.147502736876814 448:0.148758276937506 457:0.113268057734389 527:0.156671152244659 574:0.122993471673946 613:0.151922451226051 871:0.377354401341942 1123:0.186566468399739 1448:0.206186677692508 1649:0.186566468399739 1868:0.25852005649868 2134:0.223783613098043 4195:0.314262152203602
++1 6:0.00869644320567049 11:0.117236772380144 17:0.0947757975698586 28:0.128437681208649 33:0.0481232868924867 41:0.0400439450938765 63:0.018797346189564 75:0.0176248190647586 83:0.0450660681792141 88:0.0664052734712139 96:0.107762319051245 107:0.166374048806314 142:0.00451022875935347 159:0.0523174219164881 169:0.0633903596869833 176:0.135232434113646 237:0.298932487391144 298:0.0862115045810749 351:0.0617157839501242 475:0.211404720852842 909:0.0765672464680885 1036:0.0983085956751206 1274:0.121108489457116 1746:0.203164828248904 1892:0.115467909159341 2216:0.118475424206467 5076:0.161588238607889 5478:0.763237537774339 6770:0.180401978790165
++1 6:0.0264384981103107 11:0.0297014548719019 15:0.0226451705475508 26:0.0572165542596512 28:0.0488087386937884 29:0.0480097354279902 31:0.0755770487854962 37:0.0625465568468275 41:0.0304349071699656 59:0.0410422539402106 63:0.0285733828162985 65:0.04728653661304 67:0.0373881224213616 75:0.0133955266112228 92:0.0872665710183408 100:0.0408436539884215 120:0.0550675464314401 142:0.0102838314220361 158:0.0474408831214387 176:0.034260581876307 190:0.113341204145342 203:0.0501077858632068 204:0.198394104882902 209:0.0415205024819692 232:0.176002601556564 252:0.0477010827824107 274:0.0714311113038899 296:0.119205639578838 309:0.0486423558270412 331:0.0516694735152246 355:0.0795602749413018 377:0.050871824934653 404:0.0555055296453188 430:0.205770291609606 466:0.0610755037176016 485:0.0457405800017387 505:0.0475445154335504 507:0.0353413206284208 530:0.0543350845012123 534:0.0503791466157876 609:0.0468062625530939 613:0.0611303769978033 661:0.088243606717584 678:0.0715283533881861 719:0.0711424748887585 749:0.0769417044047128 834:0.0666059592667669 863:0.0698531073167449 991:0.0702122399487114 1118:0.0851012191759812 1123:0.0750703958261908 1238:0.105232484305036 1245:0.0646358188072989 1272:0.250569645566508 1338:0.167046430377672 1558:0.079628135096328 1560:0.100814250378726 1819:0.0917472465890514 1820:0.0842950595564091 2123:0.107924170932138 2146:0.101822043264222 2196:0.102347749790726 2344:0.328309040636081 2703:0.102347749790726 2913:0.0972643039940849 2992:0.101311147359424 3209:0.121235146172263 3787:0.121235146172263 3880:0.119783523221097 4839:0.53522315933362 5760:0.131010173951846 5880:0.141159144985101 6466:0.141159144985101 7130:0.146376433494547
++1 6:0.0070545768221264 17:0.0384411838853215 26:0.0610683066546295 28:0.0260472433244717 29:0.0384312715541095 31:0.0134441347467956 33:0.0195188662932285 59:0.0219025855528095 60:0.0267724862870984 63:0.0152484549844375 67:0.0199525238352098 75:0.00714864900096999 83:0.0182788544996276 88:0.0538681265452906 94:0.0423499534085141 97:0.0440194875437926 102:0.0336099737959979 132:0.0213930870423687 134:0.0505245683604773 142:0.00640274079902958 148:0.0310060127476004 150:0.0307609810106475 153:0.030593076783412 176:0.0914174117639843 192:0.028485897384032 198:0.0307127104036371 204:0.0211749767042571 226:0.0820506499780373 240:0.0317538382932068 242:0.0247159482285002 275:0.0237195934201631 306:0.0276789104410492 307:0.0338733434254533 322:0.0305693264975227 345:0.0258850756262389 404:0.059242097838078 457:0.0243224181669976 473:0.0310557724286415 485:0.0244098915274649 493:0.0314893891459808 498:0.0362438426900479 550:0.0287377976422344 574:0.0264107879105644 609:0.0249786030628303 643:0.0286986144444098 730:0.033906774327927 755:0.0368146070416338 757:0.0335130290457576 834:0.0355448977849149 876:0.0340416648270522 882:0.105953104831798 886:0.0303813936674444 952:0.0328603163707142 963:0.0299269328730816 997:0.0335452361857726 1011:0.0423329969451065 1025:0.0429950147229173 1038:0.140501791891841 1056:0.103910693011112 1057:0.048053782554088 1154:0.0479103986479737 1179:0.0439862113812401 1232:0.0798726619257393 1359:0.0391568567927947 1462:0.0433438177567989 1538:0.0448802222329638 1863:0.0424943046231989 2146:0.0543382928482765 2241:0.0492844204328111 2284:0.0523460079542496 2402:0.243247772048892 3564:0.0602508155143309 3929:0.122654567063382 5123:0.878055261081223 5124:0.0731712717567686 5743:0.0655403948402807
++1 6:0.025441811293251 26:0.220238346406887 27:0.111120679081023 31:0.0484852809535236 37:0.0601886570750022 63:0.0549924288882797 64:0.220663352608838 88:0.0971357137955974 94:0.0763659926076629 97:0.0793765185037147 134:0.182213131462188 137:0.104139893055139 142:0.0593768898640302 174:0.0932473264536381 176:0.0659380313705524 192:0.102732289127586 198:0.110763126137178 199:0.0594623080350994 204:0.229097977822989 226:0.0986365403087161 255:0.118400079680656 265:0.120173354817497 317:0.0758193527847035 323:0.108821177996524 457:0.0877170082349138 808:0.132769166571513 856:0.0954719451581152 862:0.12240326622833 991:0.135130713688682 1281:0.164588515927402 1607:0.329177031854804 2161:0.168903118538317 4268:0.657531836671034
++1 6:0.010200042920367 15:0.0349462682124096 26:0.0441485977583841 28:0.0753221650471085 37:0.0482612561195383 42:0.183076974406001 74:0.167236443264025 75:0.020672119241464 96:0.126394234231791 102:0.194383410325245 134:0.0730522579601803 142:0.00529003936874813 158:0.0732112757691144 176:0.158613883810047 194:0.161628853104394 329:0.136945289815002 351:0.0723863343056043 404:0.0856567241206734 535:0.0967260195586122 561:0.0903886733585956 609:0.0722319225534731 871:0.234320208400608 993:0.112089426965832 1274:0.142047933996501 1620:0.123357353891052 1829:0.167692216843665 1868:0.160529394381215 2596:0.14113024328794 3691:0.312688881816552 4202:0.634779489635139 4355:0.192194012118439 7555:0.206490519030214
++1 6:0.0215803181552368 15:0.0246453729737476 26:0.0622703775642034 27:0.0418911405420879 29:0.0261251694596252 31:0.0274175392300165 63:0.0155486061619772 67:0.162762160687237 92:0.047487325970253 97:0.0448859688387466 134:0.154557287753294 142:0.0111921815939971 153:0.0623905441795745 172:0.0564116326136326 174:0.0527296569362456 176:0.074573500505654 186:0.0408201793035803 192:0.0580932297792592 284:0.0873693824028182 308:0.0531502585688749 405:0.0684110838239555 561:0.0637453634243492 593:0.13857091920316 808:0.0750785343803711 987:0.058727420460012 1482:0.0852225318867041 2335:0.106299022284112 4900:0.631327409902092 7226:0.142582039451586 8699:0.637222279331474 8721:0.159305569832868
++1 6:0.0308382602955863 15:0.0528273323900328 26:0.0667382461028505 27:0.134690426959967 63:0.0666568436026862 64:0.26746813845181 94:0.0925639425047791 97:0.0962130294404123 137:0.126228950139285 142:0.0679728852397129 174:0.113025967054775 179:0.336210756457511 185:0.0897893232219493 192:0.124522780094604 198:0.134257033652209 204:0.370255770019116 226:0.119558284181723 265:0.145663260910943 286:0.0863972742465507 317:0.0919013552009881 337:0.117881807276669 457:0.106322615992986 546:0.133217490361277 626:0.145525676128263 719:0.16596329712361 723:0.158249767352542 808:0.160930763567392 834:0.155380377549112 862:0.148366157639904 991:0.163793217182039 1241:0.1922805960149 1607:0.199499298117186 2161:0.204729068783031 4438:0.286502196647829 7708:0.294992028628463
++1 6:0.0259229620868932 26:0.112201726484393 75:0.0525372851404557 81:0.157833917318001 142:0.0134444032309323 308:0.191537325058644 507:0.138608738049913 582:0.218647561664162 1782:0.319200577480715 3787:0.47548451272985 3880:0.469791244289178 6466:0.553626480354417
++1 6:0.0223592925203947 28:0.165112081851627 204:0.134227044422579 1227:0.244322302328424 3393:0.427768168247317 3787:0.410118923655696 3880:0.40520831760553 3929:0.388750369168975 6466:0.477518594510451
++1 4:0.0141015884975091 6:0.0456413812144979 11:0.278346187839674 15:0.0111693924228625 26:0.183437874788476 27:0.0189852508320435 31:0.0248515009495281 37:0.0462752336080319 41:0.105080946321268 60:0.0742334647319309 63:0.0493268812874764 67:0.184411334152383 79:0.0221084173245629 80:0.0424536508243836 85:0.019978811525307 88:0.0995753035210143 94:0.0195709862919034 102:0.0310640406183053 111:0.0203879040524277 142:0.0135262570029627 144:0.0193819689853282 151:0.0257463865564841 153:0.0282756715493781 159:0.0392252218419787 162:0.0176567085249619 168:0.0242126540169247 174:0.023897314569806 176:0.0844926035793247 180:0.0251226137135867 186:0.0369997728903486 190:0.0279519287373178 199:0.137150369965961 228:0.0246560679195901 232:0.05787377107191 255:0.0303434324267248 274:0.0352323296342144 283:0.0244387669508305 286:0.0182671548356939 294:0.0311545484729108 296:0.205787409565976 327:0.0548342376663792 337:0.0249239949363368 345:0.0478485967018002 363:0.0304548994971356 364:0.0302060239390697 398:0.0507148143153368 422:0.0297281295911578 423:0.0247001688305261 430:0.0253732813706178 436:0.259164131812539 459:0.0297799854850747 480:0.0239785113450203 485:0.0225608584671936 493:0.0291040888461759 506:0.0182384845654788 538:0.028566050396199 543:0.0360848903104449 557:0.030682089274788 594:0.0312153998412496 597:0.029152440945796 607:0.0639597210147499 609:0.0230864904817236 633:0.0339013970284337 656:0.0321816386113857 662:0.067968445548693 712:0.119749526510881 717:0.0660752022388621 726:0.0300438723693397 730:0.0313383587071958 747:0.0359284119765095 776:0.040654285102564 789:0.0334983956941132 796:0.0286573278887185 800:0.0287495464028994 1009:0.203391976937354 1179:0.040654285102564 1239:0.043646546237123 1242:0.0413849046176846 1265:0.0837476609874201 1267:0.0437699291125803 1509:0.0823931588330825 1561:0.0868095432194662 1627:0.0435248420923921 1720:0.0423910332999322 1815:0.127173099899797 1863:0.0392753892899158 1912:0.0494865738967574 2090:0.0525435611939712 2227:0.0863387204338689 2643:0.047396861801893 2651:0.0572240768765575 2659:0.0507485384149343 2866:0.0446848253487348 2951:0.0532319866843976 2989:0.0502222032785167 3118:0.0481751887188953 3472:0.103808704851003 3887:0.680181390750963 5239:0.0572240768765575 5376:0.0605757534895988 8232:0.0659977089579484
++1 6:0.035567496927282 15:0.121857456578244 26:0.0769729660636875 27:0.103564020821641 29:0.129174214827939 63:0.0384395399950655 67:0.100595875286881 142:0.0184463399283794 176:0.184361930927872 192:0.143619113268375 204:0.106759191635951 284:0.215996137160518 345:0.130506389116223 355:0.214063584300569 377:0.136874906395902 404:0.298684554148275 546:0.153647210759263 553:0.227336206916362 608:0.388106035850828 712:0.163307592913425 772:0.164773029328898 1080:0.179812574527635 1155:0.207018100920583 4785:0.547921473575299
++1 6:0.0357291186666192 11:0.0401386947647968 28:0.13192074750103 29:0.0973208951073524 31:0.034045067326483 42:0.05344077956947 60:0.0677969326630598 63:0.0579213188145583 75:0.0362055634096388 142:0.0138976212526286 161:0.174339236849189 179:0.0486916005447602 192:0.0721358653836614 264:0.0735310374226199 276:0.0693895010289107 304:0.0676351594834362 375:0.31660867087512 475:0.0723792491884266 505:0.0642518961093993 804:0.0841441805754229 1225:0.0796757439987912 1340:0.11992436082952 1353:0.256751800693088 1393:0.10226482100524 1502:0.639499956312589 1577:0.136240882520593 1877:0.144888022020194 1894:0.139799082738197 1918:0.258712745998642 2722:0.12319702133892 2733:0.116146351535582 3105:0.139799082738197 3360:0.250447350406935 3467:0.129356372999321 4346:0.165970305785091
++1 6:0.040125495724 26:0.115782804994373 27:0.03894527338762 28:0.148153259506648 29:0.145727977859296 31:0.0254894841035896 37:0.0316421352533832 41:0.0307938757189976 59:0.0415263322475189 63:0.0433655930541861 67:0.0756582031796865 83:0.0173279493241889 88:0.204263164737114 96:0.0414347219320613 106:0.0468112804052324 132:0.0405603456349719 134:0.0957923441203285 140:0.0472576417999661 142:0.0156076881534477 153:0.116006237521019 174:0.098043208107656 176:0.0693293457060827 179:0.0364553186563551 192:0.0540079999361676 199:0.0312602819993202 204:0.160587272371898 232:0.0593594958609631 289:0.0581843499430746 299:0.0553622665635531 309:0.0492160745440138 322:0.0579580892702496 345:0.0490769570613305 355:0.160997318311485 373:0.0954817723135583 377:0.0514718394206977 436:0.0590705212576507 469:0.077324896213358 475:0.0541902209775638 505:0.0481052855264014 506:0.0374133991624488 538:0.0585987855586711 557:0.0629395084363688 580:0.0605114120322558 598:0.0706769990552292 657:0.0694590491918255 719:0.0719815742440727 757:0.444774532574515 808:0.139597729216644 810:0.0984115007271777 858:0.0670931795279276 936:0.0782525056679298 975:0.0828640017983568 1015:0.167153387266641 1122:0.326719006735073 1126:0.0713176953436506 1140:0.0679256711121521 1227:0.0730759070933248 1312:0.0869585761944795 1392:0.106473662797583 1822:0.095065989849032 1838:0.1025060751233 1979:0.0988238665770428 2280:0.0908359941144771 2306:0.188147765871772 2344:0.221454216771801 2571:0.0890381018203439 2722:0.0922374007051906 2900:0.111542776362022 3090:0.122665070182548 3482:0.102003317425263 4238:0.121196325871964 4787:0.119836481038707 4839:0.270767959935056 5880:0.142824065241796
++1 6:0.01816715541077 27:0.0176327998291777 29:0.0659795666993734 31:0.0461623125840453 64:0.0525227989744809 80:0.078858766062833 142:0.00157033599582934 158:0.0434651969964582 159:0.0364309374215549 208:0.0453690843781685 229:0.0317129882663727 245:0.0700189932252731 286:0.0339317175754919 308:0.0447439653390396 322:0.0524820240141793 355:0.0364464444576636 367:0.0516868585125118 381:0.0582118204228618 478:0.047489517499001 502:0.0417999774103964 513:0.0453160834146184 530:0.0995632878763649 538:0.0530621852723937 643:0.0492703485818454 658:0.056007470853268 671:0.0369824841044776 684:0.0566752740039481 733:0.0683504566030429 890:0.0635968716292588 1046:0.136071905607635 1378:0.0742617797189028 1380:0.0623711889164474 1811:0.390404153220543 2213:0.336234225376267 2393:0.0947780319309789 2736:0.0791428521824455 2804:0.0791428521824455 2866:0.0830032310604134 3284:0.473890159654894 4053:0.120031134428523 4602:0.111075282847981 6234:0.342314097541999 6781:0.129329591713616 7099:0.463421388683082
++1 6:0.0356869888751535 15:0.0407556155943285 26:0.0514877087399677 28:0.0878434625904467 29:0.172810915049629 63:0.0257124538727884 80:0.154907680567553 114:0.0835289603443632 142:0.00616943731104894 176:0.0616604366947371 204:0.07141190531385 220:0.0954289836016962 252:0.171699920672351 275:0.0799935406334197 296:0.107270095695451 373:0.0849199962480668 398:0.0925257793316884 457:0.0820265470609138 561:0.105414575401676 608:0.12980330339341 655:0.090073877148638 772:0.110217731966688 795:0.14093098746161 834:0.119873986661648 876:0.114804383462039 1008:0.309358395230535 1236:0.13109795877814 1536:0.195568793963937 2435:0.175051301835374 3024:0.199927196057231 3136:0.194236383188668 3996:0.263440791626883 4532:0.462853968691075 4887:0.388472766377336 5618:0.218192793184919
++1 6:0.0161708943763479 17:0.0881170252993188 37:0.038256097610168 41:0.0372305315639341 94:0.145615387147895 111:0.0505645192914404 174:0.0592682906723159 176:0.167641671166765 179:0.220376756776897 215:0.0515096853379154 218:0.0458637357445216 265:0.076382558034326 327:0.0679978398265736 353:0.0907017154245734 365:0.0856687538194023 408:0.0476105910470921 423:0.0612594683652266 457:0.0557532032144388 495:0.0891068976892066 577:0.11801713898665 593:0.0778770619349269 641:0.0639778110988217 908:0.086000705055782 1213:0.102876948060156 1654:0.114130237371749 1720:0.21026999298864 1797:0.562311276429131 1851:0.109499013137008 1856:0.125862641058917 1917:0.100611205853166 2951:0.264043798784153 3300:0.132927535084184 7189:0.167727269373629 7951:0.518033122975191
++1 6:0.00930956515425675 15:0.0318954109665503 28:0.137492873028127 29:0.0676210514138394 31:0.03548307758882 57:0.139006097472072 159:0.0560059367393677 172:0.073006491215307 186:0.052828431365305 237:0.160004004066702 255:0.0866489609054407 365:0.0986388046083853 404:0.0781787743764622 423:0.0705340099055185 499:0.208025666679628 535:0.0882817051087871 608:0.304752828255016 645:0.11845227957681 884:0.0961124236314295 993:0.102303865933553 1316:0.387674201286647 2935:0.444655516313149 5108:0.193120789245056 5793:0.188463612913787 5796:0.188463612913787 7247:0.184526026431066 7451:0.184526026431066 9664:0.433052581907198
++1 6:0.0203275281623863 15:0.0464292981774041 17:0.0369223303644743 26:0.14663857646969 27:0.0197296289377721 63:0.0146459717308082 67:0.153313421115517 80:0.0441181833850268 134:0.145584861025079 140:0.047881329675496 142:0.0175707470200348 153:0.176305863716261 192:0.109441552797062 205:0.107230577489996 226:0.0525391589420799 276:0.0526374411676314 331:0.0529688523976982 345:0.0497246555482042 363:0.0632979644810888 457:0.0467228252648945 574:0.0507345371739331 613:0.0626676777586711 761:0.0689007394181139 808:0.141440085454656 824:0.151562354655815 844:0.0742492317903387 848:0.0748903876610951 858:0.0679786490733495 975:0.0839576084886416 987:0.055318150766721 1005:0.142856765578096 1216:0.0725442182823105 1309:0.0799869076499913 1392:0.107878860560755 1645:0.0774507823977272 1689:0.217062534137784 1817:0.48160316802902 1853:0.0997102972281976 3719:0.113014874303651 4033:0.589041750032445 5038:0.127673619430842 5563:0.140560388413206 5564:0.140560388413206 5782:0.137170724790813
++1 6:0.0259376406929523 15:0.0444323497229169 28:0.191536375725059 29:0.0471002271800484 31:0.0494301990441593 176:0.0672230819565781 317:0.231890934269705 322:0.112394581122344 455:0.284074294758609 477:0.138665154877395 571:0.102354458122424 2657:0.209020669904952 2786:0.221524840351377 6831:0.248113777253034 7260:0.787625640046943
++1 6:0.0155352352993529 15:0.053225119124748 28:0.114719866023997 31:0.0592119986652075 159:0.0934592960025544 174:0.113877046000818 220:0.249252474589574 339:0.241669549347922 374:0.200508726270782 404:0.130459976940816 473:0.136778929267277 561:0.1376670000298 1001:0.182097269154594 2335:0.229567559393108 3710:0.4917858630293 8855:0.6445364208546
++1 6:0.0320118785168872 15:0.0548377933979301 28:0.236391554029873 29:0.0581304509710162 31:0.122012140240429 64:0.138823615100019 159:0.0962910304304243 174:0.234654840573417 176:0.0829658008837113 179:0.0872515001545743 185:0.0932064545646872 192:0.129261769982014 242:0.224309395749677 245:0.185068007703072 351:0.113588862231494 408:0.0942498554035402 499:0.11921953853913 781:0.173450597127028 896:0.202720606148509 987:0.130672891556966 1124:0.177946068601913 1655:0.301591445038117 1711:0.232701942666309 2457:0.263143151246355 2723:0.208651046026847 3382:0.283784479542159 5932:0.30621860291049 9930:0.354466776986494
++1 6:0.0279302145852025 26:0.0805931124443469 27:0.0542173908717591 28:0.0687501758313542 29:0.067624729518183 64:0.161497274923188 75:0.0377368821453422 88:0.0710908852341954 142:0.0144854228444744 159:0.0560089830640681 162:0.0504233879275821 185:0.0542147977006792 232:0.0826369083871279 341:0.07778871686996 430:0.0724600968372792 437:0.083741735267517 500:0.0963477894145546 550:0.0758517366424441 882:0.0699142563410954 930:0.0815131376018151 960:0.107290034750876 1017:0.109707013090372 1055:0.101589801547259 1243:0.123953772793584 1377:0.0887974268319772 1625:0.125716205337777 1740:0.133309537046977 1838:0.14270311794644 2444:0.131876723782626 2976:0.251432410675553 3071:0.156471858884796 3523:0.439568780965344 4857:0.168722620242541 6732:0.206180405591947 9643:0.433076136888217 9721:0.46848922008378
++1 6:0.0288838710357327 41:0.0443332259905719 42:0.0576029353736701 68:0.0591057495996511 81:0.117241090417483 179:0.104967747177952 187:0.0897764828935532 325:0.0864554841162742 327:0.161940400701797 337:0.0736073281739938 377:0.0741028089484832 408:0.0566935524090163 473:0.0847686968201508 478:0.0755033503031049 499:0.0717134167199264 580:0.0871168711959045 663:0.0901077393918471 685:0.203504060355603 710:0.110953373369549 772:0.0892065947932421 781:0.104334701379573 847:0.102674425708819 862:0.0926422550485989 882:0.072301426741821 946:0.136864292447425 1294:0.109351830934727 1309:0.113655310505702 1359:0.106881119428775 1726:0.130008691877428 2135:0.134524945506518 2320:0.158286927575473 2343:0.174483528904872 2365:0.133214725277639 2478:0.160585538410244 3316:0.148319810198378 5212:0.411240963562793 5448:0.199725618345076 6491:0.599176855035228
++1 6:0.0177619507706619 29:0.0322539712213041 75:0.0539964145972816 142:0.0115148313071003 179:0.0484119308897915 180:0.136875191458289 204:0.106628335979353 205:0.0702725962278297 229:0.0930169622555149 303:0.238048421723263 317:0.0529325367641018 387:0.0626906203657249 405:0.0844598972759251 437:0.319528496582223 507:0.0474861162349748 560:0.105793125227073 582:0.0749067026635754 717:0.0899991543495159 1037:0.0993250283769188 1324:0.10598885140489 1424:0.0825845277009051 1776:0.102858120092369 2833:0.268351091521264 4871:0.150449063739915 5954:0.679627688464171 8903:0.393355325233285
++1 6:0.0290139351665723 15:0.0497021810665094 26:0.188370465162329 27:0.0844816207295095 63:0.0627135681507134 64:0.251645298852195 94:0.0870880588221888 97:0.0905212736259047 134:0.207796525247574 142:0.0564280196435502 144:0.172493918283761 174:0.106339594024885 176:0.0751959734763113 186:0.0823218193968935 192:0.117156280341252 198:0.126314676402126 204:0.261264176466566 226:0.112485473325213 265:0.137046135797307 286:0.0812861973902194 317:0.0864646687577001 337:0.110908173186837 351:0.102951155543425 808:0.151410445845402 834:0.146188408722028 862:0.139589134971201 965:0.144904282021311 991:0.154103562862921 1046:0.162985674890717 1607:0.187697348873378 1610:0.602165661571285 2736:0.189593158383877 2804:0.189593158383877
++1 6:0.0113377941339566 17:0.123561835145194 29:0.0411766579506265 78:0.0871025726199448 79:0.230662360746054 96:0.07024636163921 139:0.0927530848247882 146:0.305427562498221 216:0.0986428458370067 271:0.125130222355737 274:0.245058166721627 278:0.195760672136747 387:0.0800332527675537 403:0.131312625023069 411:0.0849420826368067 473:0.0998228422043916 479:0.143596977478858 489:0.258362097796552 508:0.0879667626651376 626:0.107006046471644 639:0.130442390905371 712:0.104114600628203 767:0.108453230245261 828:0.172101720243571 900:0.165489180124292 914:0.145278946073214 951:0.147797799772303 1048:0.153998815362758 1052:0.173783688837927 1255:0.178435447787061 1347:0.17129365296497 1627:0.151368333016105 1738:0.153097046684748 2497:0.229523249427088 2751:0.193664725731508 2866:0.155402459813543 3622:0.213632056275661 3702:0.213632056275661 5516:0.193664725731508
++1 4:0.0308909563290456 6:0.0142831519010725 26:0.0618214190788579 27:0.0415891127763532 29:0.02593681157633 31:0.0272198635876628 33:0.03951915745371 63:0.0308730068848748 75:0.0289472330212792 80:0.139498526055015 83:0.0185042747409679 88:0.0545324442182957 96:0.0442475600604493 142:0.0129634025855244 179:0.0389301249424276 185:0.0831742472098628 204:0.0428722255628384 218:0.0405097386170421 312:0.0647299981621627 388:0.0742644401575017 405:0.0679178519250034 413:0.0617490778545859 437:0.0642366667987777 480:0.0525273551221115 507:0.0381856373848544 565:0.075961236609628 737:0.0841541296327658 794:0.0834201418386272 922:0.406078564007088 1248:0.0919502791259513 1509:0.0902452752671957 1665:0.153943042654401 1731:0.0886768237592408 2223:0.090657820674063 3070:0.111772784154668 5784:0.136629495766624 8157:0.566216191958464 8218:0.144574658776716 8233:0.144574658776716 9060:0.539053540624703
++1 6:0.0235713348477782 7:0.0243942427313339 15:0.0269191739729572 17:0.0214071431958883 26:0.0340077451617003 27:0.0228780246373077 28:0.0290104003752094 29:0.0142677488083821 30:0.0236139281055282 37:0.0185878666892101 41:0.0180895648199858 63:0.00849156624160461 64:0.170366859007009 77:0.0296236031085062 81:0.0478386189429098 85:0.048150614004914 94:0.0235838604674565 97:0.0245135913626067 132:0.023826783227296 140:0.0277610451630407 142:0.0132435125828916 144:0.0233560866742651 176:0.061090281612571 178:0.0634103920308039 198:0.0342066150462946 204:0.0235838604674565 226:0.0304616010896975 232:0.104610487279078 274:0.0424564369747935 299:0.0325220286891294 306:0.0308276873618328 308:0.0290269710798709 322:0.034046919662337 347:0.0322726555194398 351:0.0278796624949106 365:0.0832494412604473 387:0.0277315936658681 389:0.0334808151003233 398:0.0305567406416476 426:0.0707323650998502 431:0.0438056006894866 473:0.0345887041055831 493:0.0350716494377511 502:0.0271171034180154 518:0.0342603769595336 534:0.0299438021345832 541:0.0405103804065602 543:0.0434838083973865 561:0.0348132797547294 574:0.0294153021095468 582:0.132541820706052 603:0.0420603047931509 609:0.0278201906681361 663:0.0367672272001556 676:0.0392836285116164 692:0.0548910589579636 713:0.0392836285116164 829:0.0291436848091717 1215:0.0460488219564519 1471:0.0454999420167831 1472:0.0399478575828281 1557:0.0578108854397334 1608:0.0425723439115625 1963:0.0562524094927897 2123:0.0641467797098046 2154:0.0536825195521621 2252:0.130091140378321 2292:0.0689574160600202 2403:0.0590804971973447 2986:0.0696530923498907 3929:0.0683039286351976 4297:0.427173665207551 4825:0.0751594049899767 5119:0.22547821496993 5228:0.0778683838443989 7414:0.755105556916402
++1 6:0.0253016484856781 15:0.0216714331767929 26:0.164268764897222 28:0.0934199472532019 31:0.0241090840835853 60:0.0480105365781261 63:0.0273447336171777 67:0.107341324053033 88:0.0483002891880106 111:0.0395576664835112 140:0.0446983726746704 142:0.0213235293367081 153:0.0548619211602782 158:0.0908018710881817 174:0.0463668063756349 232:0.168434528261361 252:0.0456499466766649 274:0.0683595891722585 320:0.0600406453167499 328:0.064174033999411 345:0.0464191617040807 355:0.0380696002774015 386:0.151132222175567 387:0.0446509524861034 586:0.0464979920207619 593:0.0609248319949731 613:0.117003568367767 667:0.0609248319949731 909:0.0556916635294259 933:0.0735079149549054 1026:0.0875199210985577 1050:0.0746697017702802 1122:0.0772563302288654 1446:0.0660188605207522 1731:0.392712658788966 2073:0.091603980203097 2211:0.0974437177186001 4155:0.793426595113159
++1 6:0.00979701101061979 12:0.0660437700939426 15:0.0167827222458751 26:0.042404164543138 27:0.0142632732121699 29:0.0355808340279005 39:0.0491985670805368 41:0.0225558289587608 63:0.0105881107502381 75:0.0198553066298451 80:0.0318946547464218 86:0.0380535390164427 102:0.0466756960266233 108:0.0453455562950477 110:0.0945504099081971 142:0.00762152292105836 199:0.0457949223679108 205:0.0387604609357461 259:0.178772124309543 262:0.0458449551588086 284:0.0297478978959266 316:0.0667344687930445 322:0.0424530111209689 350:0.0714997688554055 351:0.0347630750060065 437:0.044060816287047 587:0.124082440802014 647:0.132743262066187 717:0.0496410961551055 784:0.0481018318187438 965:0.0489292072343335 1069:0.0779895895076771 1149:0.0469951821906516 1274:0.0682176136053669 1754:0.0693870992828331 4909:0.091018920919066 5898:0.0991657537287502 8768:0.797522384229611 9857:0.455727076702635
++1 6:0.0172136567397609 15:0.117951085116099 60:0.261306893743434 63:0.037207287769628 75:0.0348863987616599 142:0.004463751895182 176:0.0892259301057996 179:0.0938350039594043 180:0.265299976604343 255:0.160216448906985 345:0.126322759748053 475:0.139484162734215 717:0.174441937132292 2889:0.780202068145089 6998:0.357085956249641
++1 6:0.0161579285366898 15:0.0276792611956868 26:0.069935969205644 27:0.0235240063537444 28:0.0596590705334082 37:0.038225423831958 63:0.0349253331767118 84:0.0948301248848577 86:0.0627606076311759 103:0.0769066211837421 107:0.0772804446425664 142:0.00837997239264876 159:0.0972053912798812 203:0.0612468998602992 232:0.0717095059978314 252:0.174915537979142 289:0.0702898656854451 296:0.0728527088584546 345:0.0592876387459214 442:0.0687494881407358 571:0.0637620067041456 613:0.0747198467046211 639:0.0929492459248079 643:0.0657318182205316 714:0.0836073434709593 757:0.0767588392645984 1118:0.104019480387536 1238:0.643129936520864 1433:0.0778919925515 1972:0.117455817469994 2123:0.131916044098051 2196:0.125099967487535 2902:0.115681494298587 3136:0.131916044098051 3209:0.592744359324291
++1 6:0.0504777152834248 15:0.0345882422420382 26:0.0873925870786422 27:0.0587916002897756 28:0.149100972670898 29:0.146660176877236 30:0.0606827138470591 31:0.0769576090066528 63:0.0218214979756802 64:0.0875612334207481 67:0.0571066326292207 68:0.123952493606426 75:0.0204603325206024 88:0.0770886765617521 94:0.121210892974693 97:0.125989309645823 102:0.0961959721034761 134:0.0723038345409745 142:0.0130896067388395 144:0.060020116852551 148:0.177486216169758 153:0.0875612334207481 174:0.074002781349391 176:0.052329625992552 192:0.0815302209614669 198:0.0879036398880563 199:0.0471903736804661 215:0.0643153352019683 226:0.078279759893765 232:0.0896088138687887 256:0.0687032339040548 275:0.067888459562664 284:0.0613087366603247 308:0.074593069480647 317:0.0601716231399774 322:0.0874932571154788 325:0.0906542334269476 341:0.084351590435079 351:0.0716447333019187 373:0.0720694156765443 387:0.0712642282736022 389:0.258115470626454 394:0.0940503582685036 426:0.181766957699642 436:0.0891725791759996 475:0.0818053009826937 506:0.056479090213287 546:0.0872230078451137 586:0.0742121574822621 772:0.0935389530262017 808:0.105368035496628 824:0.112908780519976 885:0.14153173119426 909:0.0888855265502535 912:0.096010684921014 1026:0.139684358079403 1124:0.336711673397875 1126:0.107660855182615 1227:0.110315043314325 1228:0.124310762129478 1243:0.134411496889017 1283:0.125091104731823 1446:0.105368035496628 1453:0.142013488215283 1464:0.129055045394951 1625:0.136322622231086 1787:0.145094475067483 1951:0.125894069083482 3090:0.185174609096007 3473:0.171024570491775 3929:0.175526398550748 4537:0.167153118497196 4649:0.182957399639641 5369:0.180904584318582
++1 6:0.0273059836676758 60:0.207255259027211 67:0.154459524280559 203:0.207007580641735 1118:0.351574055564435 1676:0.370891293972492 2123:0.445861279490931 2196:0.4228237129883 3209:0.500852190244055
++1 6:0.021515711562381 26:0.139688896802033 27:0.0313242959547381 31:0.164012743902986 63:0.0465061714528495 64:0.1866112829938 94:0.064581434520633 97:0.0671273855963613 134:0.154094578181964 142:0.0251070181493845 144:0.0639577046469421 176:0.11152536646134 179:0.0586431723999121 198:0.0936705113581017 226:0.0834152618432661 229:0.0563374529109777 308:0.0794867080694343 363:0.100496779690679 387:0.15187896001644 455:0.471288862442587 513:0.161006127460281 582:0.181474549660456 694:0.158307835893019 862:0.103514381900973 991:0.114277769983917 1613:0.123365788503949 2423:0.138848489805695 2491:0.662904134546404
++1 27:0.140277523361439 111:0.301282791816278 322:0.41752010009904 325:0.432604361326545 389:0.410577914557952 506:0.269519688451311 1124:0.535598956294597
++1 6:0.0364214688742504 15:0.0499132966363512 26:0.0630568632564511 29:0.105820539563531 37:0.0344654596321394 68:0.0447180687796959 75:0.0147628584192406 88:0.333733349639891 142:0.00566677039645692 158:0.0522833525797168 176:0.0755153767791365 199:0.0340495348594298 204:0.131186962630246 208:0.0545734978483129 252:0.0525701117992047 275:0.0489839407944499 284:0.0884728728887958 287:0.0676139287853091 291:0.0586304289934956 308:0.0538215555729855 312:0.0660235676165141 341:0.060862675901133 355:0.219203228966427 373:0.104001298993443 377:0.0560645035342974 389:0.0620798341512289 404:0.0611711879212192 442:0.0619870879303054 457:0.0502288496419713 475:0.0590254373986738 502:0.100560591360027 505:0.0523975630318897 530:0.0598812710369173 543:0.0806272967215634 558:0.0808638293607741 626:0.0687491295904055 655:0.0551566217776853 685:0.0769832768349066 737:0.0858358724821593 757:0.138417231825282 772:0.269966740534508 776:0.0908370533973516 795:0.0862989072775054 824:0.0814677053477541 834:0.0734046801645842 863:0.0769832768349066 936:0.0852347211594523 952:0.0678606822249186 997:0.0692751277036192 1015:0.0910339690270714 1086:0.0918416253673486 1106:0.0933386609418523 1154:0.0989409931797516 1269:0.0744126302761837 1294:0.165466227229903 1347:0.110052561831852 1359:0.0808638293607741 1375:0.0914337178472719 1411:0.0922580315692772 1416:0.0879247442496963 1730:0.102821545705619 1903:0.122425159048109 1917:0.0906420589263533 1992:0.0951992382585171 2194:0.333314220824159 2306:0.204935576490131 2406:0.118156501614252 2526:0.218106029641924 3170:0.112794769742197 3469:0.12060692660903 3677:0.129150153849142 4431:0.129150153849142 4517:0.130529098830509 4714:0.15556779008973 4835:0.137254093631542 5086:0.135349150536962 7088:0.15556779008973
++1 6:0.0242900348508204 15:0.124829779552781 29:0.0441083355740907 41:0.0559233699853505 60:0.092181946749389 80:0.0790774119275443 96:0.0752477312694112 176:0.0629529502252881 227:0.0863277360529421 252:0.087649529740478 255:0.113039988726979 278:0.104849177283532 309:0.0893790950858935 339:0.0944652858957279 404:0.101990002902037 513:0.0908834559309613 561:0.107624254286996 603:0.130028224009307 795:0.143885154151506 1431:0.425594749650843 2171:0.16804137760655 2401:0.164476669213706 2642:0.16858323856496 2941:0.174549790747361 3114:0.205743898781206 4679:0.451332096863349 9007:0.537925967819594
++1 60:0.188830759558213 355:0.149731955708542 795:0.294742559749201 1431:0.581208379547043 4679:0.462267209952757 9007:0.550959123078697
++1 6:0.0262959742400409 15:0.0300307941797698 29:0.0318339506482346 31:0.0334087245670598 60:0.0665297274377765 88:0.0669312468444307 102:0.0835209091848935 142:0.00227297636646281 158:0.0629135202905561 252:0.063258582936381 255:0.0815834326001051 275:0.117886554745481 355:0.0527542558496329 373:0.0625733384684148 377:0.0674634488158923 426:0.0789084055957972 448:0.0793793386197199 485:0.0606586707223573 655:0.0663709779910929 713:0.0876489422485269 761:0.0891309584906166 808:0.0914844346521915 950:0.0955123802220904 987:0.0715603321735912 994:0.10035336999337 1007:0.404719709669792 1373:0.101689850134096 1880:0.122471967047147 1911:0.118706410078433 1942:0.113690814147083 2650:0.152398526386727 3542:0.609594105546907 3767:0.14039756237374 4432:0.17373857093027 5211:0.149723499382419 8305:0.388232938039757 8715:0.194116469019879
++1 6:0.028650659512365 26:0.0930059646953653 27:0.0417119245748263 28:0.0528926623482583 29:0.0260134024498472 31:0.0273002432874985 37:0.033889975451941 67:0.0810329210707546 75:0.0290327136076837 80:0.0466368207820538 134:0.0512986902547089 142:0.00928691660566287 171:0.0619314216171508 174:0.105008144658719 176:0.0371272324902134 204:0.0859976527341953 211:0.0712354840977251 255:0.0666666443294312 291:0.0576514522230092 313:0.243670952744406 323:0.0612731240432544 345:0.0525633575846189 373:0.0511323729246169 404:0.06014978703731 409:0.0365799815563354 485:0.0991355695062594 597:0.0640499527059572 643:0.0582766515735231 713:0.0716231307326222 800:0.063164765202585 834:0.0721790115491612 1544:0.0938508015092107 1917:0.267385711786327 2756:0.118593102362185 3136:0.116954399664824 5580:0.133089169217442 5956:0.82219775922044 7828:0.166592663964285
++1 6:0.0231991958853524 15:0.0794825402256819 26:0.150618773193877 31:0.044211456386972 62:0.265605388906231 63:0.0250725098792188 67:0.196843490629395 92:0.0765744811543578 94:0.139269142520093 102:0.110527446997153 134:0.083075809362601 142:0.0180476681100668 174:0.0850278687806008 176:0.0601258019104067 185:0.0675472636223049 232:0.102958920303924 308:0.171412198517181 331:0.0906776347409274 337:0.0886808500906976 373:0.0828064662908809 423:0.0878844653463383 457:0.0799850306671622 465:0.197270806671134 469:0.134119869302595 574:0.0868526996973005 613:0.107281100809914 757:0.110208641162644 827:0.0990795107695989 829:0.0860507124957338 909:0.102127876144641 952:0.108062175175104 975:0.143727436250548 997:0.110314555347003 1005:0.1222785941453 1237:0.142246835198458 1359:0.128768544718594 1676:0.157554840099486 1931:0.151210635324228 2114:0.332185854201455 2946:0.179615762280695 5440:0.234823227551558 7501:0.513768299465535
++1 6:0.0271381613770662 26:0.0880960830183765 33:0.0750868771747741 37:0.160504441875528 41:0.0312403306280263 67:0.0383775544141337 72:0.0422217929822359 78:0.0521222127556128 81:0.0413081875500265 97:0.042334500949524 110:0.0654772225828621 111:0.084857896696917 135:0.0618130211316507 142:0.00175933012244318 144:0.0403355126086143 162:0.0367451000398539 176:0.10550174173496 178:0.0547542639087279 215:0.0432220420419923 262:0.0634962944348779 303:0.0606183086502749 342:0.0633792151659453 423:0.0514031351537484 437:0.0610252219532569 499:0.0505343520291615 504:0.0720703229972935 616:0.0935746744123608 661:0.0905788683458623 671:0.0414334247324066 712:0.186906650458665 721:0.0898390805729836 780:0.0688320878332949 789:0.0697129875148942 908:0.0721636341821306 912:0.0645223700864665 974:0.0871429739222348 984:0.0778017651687346 986:0.0606686890393416 991:0.0720703229972935 1019:0.0975083078045691 1042:0.231905967142263 1044:0.0990287886538862 1068:0.0799469321035879 1104:0.601539791998734 1117:0.0809692187174272 1128:0.306092648078643 1129:0.079113261050158 1241:0.169209994153842 1249:0.102502187420832 1769:0.207984451678332 1820:0.0865258276013454 1893:0.116895536566814 1910:0.0830309154350352 2154:0.0927086790889619 2238:0.104516641993724 2471:0.105056260715396 3451:0.124443489477641 3561:0.111540178749993 3728:0.116895536566814 4277:0.134477201689311 7052:0.144894753116116 7369:0.129798847294462
++1 6:0.00841407794366733 27:0.0244997770052373 34:0.0670559940938056 37:0.0398110060731466 57:0.0628175494448435 60:0.063863727632499 63:0.0181870141887387 75:0.0170525579074921 80:0.0547848952566962 142:0.00436378590964928 148:0.0739624826715023 172:0.0659839957399492 205:0.0665781714631774 229:0.0440634016278101 237:0.0723066082684063 312:0.0762637341676644 336:0.0769271906462215 405:0.0800196068516958 411:0.0630377739760662 437:0.0756824999173635 505:0.0605243545957364 583:0.132421681665301 586:0.061851737337695 644:0.0801740334918919 647:0.0760035996224317 695:0.0830584727710145 704:0.116049807961458 784:0.0826236822062085 1155:0.0979470914389636 1296:0.0856573079968933 1379:0.0888103859405883 2240:0.228573216339128 2682:0.123817840412595 2688:0.4349158996915 2866:0.115328289970677 2912:0.13738789282808 3184:0.133178690357352 4164:0.158542018979318 4909:0.156341621772469 6249:0.163693666453347 7015:0.327387332906695 8923:0.186337773863008 8977:0.372675547726016 9778:0.423402204969948
++1 6:0.025179105993277 11:0.0565732650359966 27:0.036657758946172 29:0.0457228021049772 64:0.218384842184709 67:0.213642883966229 88:0.0961327165428963 132:0.0763559345577924 142:0.00652930889674748 204:0.151154915818452 232:0.11174583723062 299:0.104220946259711 323:0.107697519783687 331:0.0984164187260915 426:0.226670792660539 437:0.226479680841285 440:0.28419474913667 609:0.0891533127983459 643:0.102430730173575 644:0.119960291592035 749:0.146553206042678 764:0.23287377904971 882:0.0945416190135305 969:0.140801843760233 1003:0.133051339433093 1296:0.128164633819193 1412:0.158026251013141 1791:0.176495827967992 1819:0.174753772836751 2166:0.237218286245662 2246:0.159450924647924 3170:0.194944873903338 3837:0.237218286245662 5697:0.446424253788763
++1 6:0.0100597627655999 12:0.0678150365015108 26:0.0870828531508294 27:0.0585832330370272 29:0.0730701943551699 33:0.055667453715291 64:0.174501803564252 75:0.0203878176841866 94:0.0603906506606652 132:0.0610126974009449 142:0.0208691439774354 176:0.052144161056206 179:0.054837731065029 186:0.0570855327835313 206:0.0959478179518178 308:0.148657398362802 337:0.0769085547768841 351:0.071390812398619 387:0.0710116559436874 415:0.0875235178836008 437:0.0904850180582439 455:0.0734510396661531 539:0.0934610557191071 546:0.173827749868866 780:0.102060631837652 965:0.100482936387989 1046:0.113021361230642 1607:0.260315023185639 2736:0.131472148426113 2804:0.131472148426113 4500:0.186920020939892 4530:0.165385962809665 5930:0.429684774020124 8118:0.626049431757518 8417:0.214842387010062
++1 6:0.00938972183110889 15:0.0643400699608118 29:0.0341016391304131 31:0.0715771838426482 60:0.142537932636621 63:0.0202958666789168 65:0.0671758922614193 80:0.122274818572123 158:0.0673951589948654 159:0.112976311602028 172:0.0736350874630896 176:0.0486710451173466 179:0.0511852071015588 205:0.074298160089379 337:0.0717859807049315 346:0.0782296998498936 365:0.0994880987112854 375:0.199693748501799 398:0.07303429268049 455:0.0685587569748018 505:0.0675423804564451 515:0.135678742952483 768:0.11734612479486 952:0.0874749082143347 963:0.079666174746341 1027:0.0981219929769291 1047:0.211635064028282 1844:0.122094467853326 1936:0.126426294656295 2024:0.0914463978753503 2076:0.117092293326167 2385:0.14777647218976 2801:0.155466751721866 3044:0.152308064032964 3496:0.159067534473966 3899:0.636270137895863 4601:0.163254621089108 6464:0.401065173913299
++1 6:0.0209452939473502 15:0.0717604686359027 28:0.103113611055651 29:0.0253564080853646 60:0.0529923206001418 63:0.0301821432095212 75:0.0282994635354311 83:0.0180901935565543 88:0.0533121392127237 96:0.0432574060374613 142:0.00543141977129532 179:0.0380589623342632 205:0.0552446895591562 312:0.0632814964142537 325:0.0626936578527031 327:0.0587159749199589 331:0.0545786076231589 346:0.05816800143253 351:0.0495472767986969 405:0.0663980136734847 442:0.0594126586036 480:0.102703838380553 496:0.0585456921102932 505:0.0502214030053233 507:0.0373311346184799 782:0.079549131857368 829:0.0517936764276686 903:0.0777348409937613 1124:0.0776197854529997 1164:0.0740698382492418 1175:0.0739747676325209 1308:0.0815533996063571 1471:0.0808617472267374 1472:0.0709946742552077 2223:0.0886291165888408 4189:0.10868209482277 4512:0.229565228427292 6782:0.894640768997853
++1 15:0.0354237037070739 28:0.0763512155571623 63:0.0223485852020405 75:0.0209545414851159 81:0.0629521940343211 83:0.0267900280780937 108:0.095711978491631 142:0.00268115591138779 144:0.0614698723621358 159:0.0622013527580222 179:0.0563620652465937 229:0.0541460338322383 258:0.0980474892707483 351:0.0733752755314907 365:0.109550298384047 574:0.0774168588850042 745:0.140437785643299 993:0.113620791364594 1141:0.412974415464854 1335:0.11113882321379 1626:0.148599158591445 2240:0.421313356929897 2397:0.189647407948293 3323:0.562129928762994 3756:0.194819764393032 4737:0.189647407948293 6233:0.194819764393032 6450:0.228975772071183
++1 6:0.0324635632572275 11:0.0145880458873667 15:0.0111223099507975 29:0.0589506664306886 31:0.0123733720617344 52:0.0529341041837197 59:0.0201581466760793 63:0.0280679732005846 72:0.0202028402479867 75:0.0263171696784221 84:0.0381054260872605 100:0.0200606031307404 102:0.154665480001287 111:0.0203019626791935 118:0.0212575845577188 132:0.0196892273478135 138:0.054444739253739 140:0.0229402989238533 142:0.00420913737866897 185:0.0189043178590498 198:0.113066344545254 209:0.0407860825731129 226:0.025171899350071 232:0.0288149075398998 255:0.0302155253969151 276:0.0504379741814134 296:0.0292742787804325 299:0.0268745306726429 304:0.0245813875096177 306:0.0254744142037223 312:0.029424407225128 320:0.030814328771477 322:0.05626924418035 327:0.0273015471277023 336:0.0593607698066065 337:0.024818932525517 341:0.054248754654633 349:0.0321824976749526 355:0.058614752037948 372:0.0320459829692913 377:0.024985998824686 382:0.0285137180334755 408:0.0955797124265386 422:0.0592056325093453 448:0.0293992094425723 466:0.029997596234563 485:0.0224657574134988 489:0.0369884750331122 493:0.0289814060360284 502:0.0224081786080053 505:0.0233517710101598 506:0.0181616036656453 514:0.0344851584760439 515:0.0234544512272248 574:0.0243072917235421 580:0.0293740827398924 587:0.041116195150959 609:0.0229891737251774 613:0.0300245475718973 656:0.0320459829692913 673:0.0328241084806014 676:0.0324619687615313 687:0.0365286356344739 697:0.034802504361344 712:0.029811186228649 720:0.129284548832984 730:0.0312062577528615 755:0.0338824951409577 795:0.0384604207631722 800:0.0286283580997089 804:0.0305814420369669 824:0.0363073221333995 867:0.0856095849459665 942:0.0840054921661931 1019:0.0466570608750804 1033:0.0388880585715292 1086:0.0409306173929108 1168:0.0422123418755835 1216:0.0347564711312756 1268:0.0439645211556944 1305:0.0590518345435899 1309:0.0383223186139816 1347:0.0490465982437918 1422:0.0881891173009391 1424:0.0301879908767102 1553:0.0452094381058541 1669:0.0486011349137896 1692:0.0481768923447317 1779:0.044226522696608 1865:0.038530283162037 1880:0.0453591460028668 1919:0.0473846006011125 1921:0.0490465982437918 1924:0.0447748441001944 1932:0.0418997690957973 1981:0.0466570608750804 2008:0.115115461258249 2198:0.19806207028823 2371:0.0537503114543538 2379:0.0488210821428784 2380:0.100537409824209 2771:0.0468334509993142 2815:0.0980931964875835 3335:0.0475761651927187 3366:0.103996264348486 3950:0.0595453617726885 4189:0.0505346175003669 4696:0.460036556240266 4976:0.0595453617726885 5036:0.0621078639972994 6261:0.0603204077990263 6412:0.0755052983329831 7667:0.0718936542959588 7907:0.679547684996848 8399:0.0673435209277838
++1 15:0.110990356910167 31:0.123474798615528 80:0.210931162535445 111:0.20259479314178 375:0.229655541587521 505:0.233029056946601 3899:0.548801468038163 6464:0.691860714854494
++1 6:0.0264385530728988 15:0.0452904352484971 26:0.228866692825073 29:0.0480098352346928 63:0.0285734422170658 67:0.149552800587823 75:0.0535822178359103 117:0.136476482576772 134:0.0946758760847364 142:0.00685590186729034 232:0.234670623260898 274:0.142862519601863 286:0.0740709397555788 345:0.0970099217849379 539:0.122814779008927 592:0.130217580038927 633:0.137465760788122 743:0.167810411873068 827:0.112914211202157 1050:0.156049822153568 1150:0.144246333214467 2683:0.187250428214802 2709:0.197905521744486 7199:0.535224272000837 8149:0.548450346641691
++1 6:0.0268544151610694 15:0.0230014128919068 26:0.0290583280442717 31:0.0511773257382979 63:0.014511442395546 88:0.102528973081636 102:0.191912898383819 142:0.00348187048171882 159:0.0403887467288381 180:0.0517356351243674 204:0.0403030280752328 205:0.0531228100425035 229:0.0703164915184044 275:0.0451462805790831 383:0.0804221691110364 423:0.0508656836702971 430:0.0522518413833774 437:0.0603871656174201 457:0.0925873134061092 507:0.0358972923702483 574:0.100537038742951 586:0.0987031641506239 686:0.0793944417520679 755:0.0700704497530491 799:0.0677294210977297 867:0.0590147616085138 881:0.0764937490721157 952:0.0625441185483652 963:0.0569609134704232 979:0.6174295378541 1064:0.0622040306349362 1159:0.0682678575005901 1387:0.10889949823564 1509:0.0848371600727812 1550:0.64132769043853 1863:0.0808808045546499 2017:0.100964086881748 5362:0.133071159600202
++1 6:0.0275521183979816 15:0.0235990114667401 26:0.0894398730995802 27:0.0401125804450436 28:0.0508646195308257 29:0.0500319613182526 31:0.0262534806581411 63:0.0297769269305994 64:0.0597416468023549 68:0.0422854144694563 75:0.0279195235414518 80:0.0448486432690334 81:0.0419382897157567 134:0.0493317644904174 142:0.0178616639355876 158:0.0494391482909892 174:0.0504909290681557 185:0.0401106618948907 208:0.0516047100990122 255:0.0641104710684895 308:0.0508936733383244 331:0.0538458518298986 355:0.0414557231241484 399:0.129895855204727 414:0.101787346676649 423:0.0521872224910704 471:0.071802836947376 561:0.0610389448763932 582:0.058097175452095 647:0.124437887876121 739:0.0703645975521093 1226:0.109024276616535 1230:0.0962417889250102 1469:0.233960990179911 1913:0.328994996779569 2392:0.105578490708352 2455:0.103120551863857 2564:0.105060663848949 2744:0.0947043971702912 3061:0.114045933080762 3710:0.327072829849605 4777:0.127986182872524 5614:0.142887631221918 8373:0.152541979105206 9495:0.693220799676474
++1 6:0.0255451643039103 20:0.0360247205401699 27:0.0185953479750857 29:0.0695812924723389 31:0.0243411220609038 59:0.0396554719534774 81:0.0388834167282207 83:0.0165472838858218 100:0.0394635825209523 141:0.058336779185799 142:0.00331211657401443 159:0.0384196477573225 179:0.139251678469007 206:0.060911048085603 215:0.0406849288782795 228:0.0482994053350386 229:0.0668883056413067 276:0.099222498113615 296:0.0575888924606984 309:0.0469987730220744 351:0.0453213976066265 377:0.0491529103118256 396:0.0648654576487431 408:0.112815686869163 432:0.0599916073445136 461:0.0698818305272271 475:0.0517488222971321 480:0.046972122341688 493:0.05701274788311 499:0.0951360195438655 506:0.0357278363118473 509:0.0592785304052744 550:0.0520308858357662 644:0.0608521477982923 653:0.0652390926782178 730:0.0613895165551138 742:0.0655438450374396 781:0.0692059355386452 800:0.0563182255759793 882:0.0479580409229615 913:0.066654259310976 969:0.0714244229741324 993:0.140359351961937 1009:0.227674155808039 1201:0.0814468029686075 1449:0.0818319353723367 1489:0.0748573254638963 1639:0.0862356726052257 1651:0.0875342531859732 1880:0.0892313351546769 1990:0.340106892030029 2306:0.0898356301751555 3090:0.117138716256021 4379:0.126583454367198 4431:0.113228612200622 4737:0.117138716256021 9639:0.742676965421533
++1 6:0.0271106629965428 11:0.0761414406162058 31:0.012916416377284 37:0.0962050841840645 60:0.0514431886993265 63:0.00732495610162681 86:0.0263258015884199 98:0.0219822822579043 100:0.0209410257384413 142:0.00527264231940901 150:0.0295535299511894 151:0.0535261109016228 159:0.0407741406711255 181:0.0286041208847197 186:0.0576912203597622 242:0.0712373427872987 254:0.0327054381232642 276:0.0789774047652598 294:0.032384773936967 295:0.0287735714034349 304:0.0256602189460943 325:0.0304304627032977 341:0.0566296317262884 346:0.0282337840659532 351:0.0240494271719656 369:0.0303036075313782 373:0.0241919829101067 408:0.0199549056920413 411:0.0507778706638795 430:0.0263752171513896 467:0.0425372175343343 473:0.0895102500446417 485:0.0234517377749596 496:0.0284171088626983 498:0.0348211745950419 500:0.0350702521633651 505:0.048753273725115 507:0.0181199141761427 528:0.070913687822408 533:0.0424437660956528 534:0.0258299858837554 580:0.0306632566673228 625:0.037675357718239 641:0.0268148569211722 644:0.0322906921237297 676:0.0338866642705281 774:0.0380155788365134 882:0.0254485402788698 912:0.0322284956384453 916:0.0821274128859201 950:0.0369268114278857 952:0.0315704607642817 966:0.0338496926914779 996:0.0377312037712828 1005:0.107171400701134 1009:0.0604067098346016 1018:0.0367739585631404 1036:0.0383089261894123 1043:0.0758015661178513 1218:0.0412254207778136 1273:0.0454983085625682 1527:0.396584668338168 1551:0.0362818680871122 1576:0.037564661888488 1578:0.568198495964977 1697:0.0463073699193101 1700:0.0487047526087527 1808:0.306663839247185 1892:0.179982292651157 1943:0.0406713132038203 2142:0.0881299262973707 2404:0.0530386133325198 2645:0.0574088668224338 2791:0.0530386133325198 3658:0.0629677584487493 3708:0.0530386133325198 3743:0.0723739675492149 3969:0.102881382470042 5801:0.0686038151642391 5953:0.324168313896317 6099:0.0702991029668972 6355:0.0638539848946655 6799:0.28949587019686 6800:0.0723739675492149 8003:0.0702991029668972 8376:0.0750489332364708
++1 6:0.00640587435719798 15:0.0219471040631251 26:0.0277263902215526 29:0.0697946604510224 63:0.0276925715700841 67:0.0362355854986143 75:0.0129825922882556 83:0.0331960508108332 88:0.0489146917253019 102:0.244154992952201 141:0.0585156663581338 142:0.0116279556192928 158:0.0459784569308699 173:0.0478804786209802 204:0.0384556703269917 215:0.0408096874265788 232:0.0568590317249848 252:0.0462306356028984 306:0.0502674014615244 308:0.0473311666670924 322:0.0555166580972233 327:0.107745584963317 342:0.0598418269491112 355:0.0385538636099263 373:0.0914596905245062 426:0.0576678385093415 453:0.0621338356790351 458:0.0674431989562659 506:0.0358373941534126 557:0.0602882395652539 574:0.0479643764028592 609:0.0453633993571229 671:0.0391208983300562 687:0.0720801498160277 717:0.0649166617407062 723:0.0657448323608116 824:0.0716434428315844 852:0.0635721252443107 858:0.0642669410846079 1005:0.0675283155968488 1009:0.114186154305859 1057:0.08727000958133 1225:0.0571402625555804 1227:0.0699976517570779 1242:0.0813185510814076 1274:0.0892095479386859 1347:0.0967812262345381 1351:0.0850546483050435 1436:0.0860049636274862 1599:0.0776222829070636 1776:0.0741918725523801 1828:0.08727000958133 1924:0.0883519850844211 2024:0.062386740070089 2223:0.162637102162815 2433:0.08727000958133 2470:0.0954786636134486 2561:0.0954786636134486 2913:0.0942660068248629 3335:0.0938796934295253 3735:0.103907904763566 3837:0.120702501298122 3867:0.714163661839212 4387:0.136807732931154 4856:0.23218208435754 5474:0.12462459551595 5833:0.12462459551595 7035:0.132885638713327
++1 6:0.0267609959008424 15:0.0916855887453835 29:0.0647938133060553 37:0.0422063347271353 63:0.0385625626806167 75:0.0361571353245926 80:0.116162330735713 83:0.0231131440231537 96:0.0552683227344263 142:0.00693951598868712 154:0.128967191968835 158:0.0640260917216551 179:0.145879413902384 243:0.0841107121288789 256:0.0607055658309729 325:0.160202547170961 327:0.0750191412016813 331:0.0697329862521132 345:0.0654620322090397 351:0.0633046485115372 414:0.0659097721108073 478:0.0699540877142683 480:0.131220741270641 496:0.0748015774098862 507:0.0476965538421256 782:0.101636863961029 837:0.0967990840102478 987:0.072825815027016 1007:0.102969207307135 1124:0.0991718123199114 1175:0.0945147133459116 1308:0.208395279440954 1312:0.115990995704592 1471:0.103313942096451 2206:0.115132108792693 2223:0.113238010967581 3219:0.136729259374375 4512:0.293306656491012 6782:0.762032050797322
++1 102:0.293714522522 111:0.192770270215731 204:0.185046207112661 252:0.222458838917166 1776:0.35700650899245 3837:0.580812656867182 3867:0.572751585385306
++1 6:0.0536875001814069 15:0.122625482764519 28:0.132151690641614 29:0.129988356057907 63:0.0386818113679759 75:0.0362689456044704 80:0.116521544556006 96:0.110878462738271 142:0.0139219507107278 159:0.107660550879035 180:0.137906903003484 229:0.0937180876591441 327:0.150502252300239 365:0.189613970597578 413:0.154734923658359 507:0.0956880959340901 527:0.170686546449807 723:0.183668692332453 737:0.210878984378138 1614:0.226142580005509 2246:0.22665675125629 3719:0.298486172849392 3868:0.337201720327098 3957:0.311146331310857 7131:0.396320283499889 7356:0.348158717102748
++1 6:0.0200085269233632 15:0.0342755101060844 26:0.0216506051438648 27:0.00728250396400576 28:0.0184691081576455 29:0.0454169181569293 30:0.0300670233135117 40:0.0156271401610473 41:0.0115164949419504 57:0.018672376191155 63:0.0756846905392027 75:0.0354818431089562 79:0.0169610228727952 80:0.0162846876846774 81:0.0456837866390156 83:0.0129608395232486 96:0.0464880845048016 134:0.0179125235258832 142:0.0181597585356062 145:0.0209879245743884 158:0.0179515149318042 171:0.021625270376309 173:0.0186941272996348 174:0.0183334199398589 180:0.0192734386892151 186:0.014192648552554 200:0.024161769135904 205:0.0395804253641327 226:0.0193929969219397 227:0.0355555445197303 229:0.117879728969842 274:0.0270293590000155 275:0.0168186602657021 276:0.0194292743754806 288:0.0259767492728058 295:0.0212358059329039 312:0.0226692245511937 317:0.0149068942460392 320:0.0474801026896054 325:0.0224586441271088 327:0.0210337254272483 345:0.0183541212194491 346:0.0208374258019469 348:0.0248473171138717 355:0.0301054147733983 398:0.0194535663264398 402:0.0190633467005628 405:0.0237856493130972 408:0.0883641099835805 409:0.0127730313766458 413:0.021625270376309 423:0.037898699155729 457:0.0172461003333784 478:0.0196135952761691 507:0.0267461397523636 510:0.0226111497139368 515:0.216838035523484 535:0.0237173654762745 546:0.0216085936512605 557:0.0235385288026317 565:0.0266025394528218 574:0.0374537675540175 582:0.0210952726467987 586:0.0551558721019523 613:0.0231315861606921 631:0.0167855880620287 643:0.0203490944337436 647:0.0225919001389582 764:0.0231315861606921 804:0.0235606301711079 851:0.0284064554228611 856:0.0563124111851877 1031:0.0307334502981163 1080:0.0252884307964596 1098:0.0280566997846793 1145:0.0328561577643832 1149:0.0239946746796227 1225:0.0223094541431864 1359:0.0555292715018416 1380:0.0772795758343776 1411:0.0633536814139669 1433:0.0241136112612176 1509:0.0632099634729234 1528:0.6018057406351 1581:0.0356816745161555 1598:0.0261682724655344 1608:0.0271031497000307 1685:0.0358123921632708 1734:0.034605347920756 1783:0.0362201835429495 1986:0.0387281399020687 2007:0.0337725128041529 2024:0.0243578530179612 2042:0.0321245517645579 2164:0.0645610473651039 2188:0.0393620489460665 2223:0.0634989202080188 2340:0.0347169352408406 2388:0.0403101013584962 2401:0.135485020274329 2421:0.560847413398865 2424:0.0350630154095005 2427:0.0806202027169924 2529:0.0381478674496788 2666:0.0337725128041529 2913:0.0368045763611072 3018:0.0942525216806296 3046:0.0383358920601342 3348:0.0847391196300085 3520:0.0478492941107552 3553:0.0801210590569807 3609:0.0400605295284904 4047:0.0400605295284904 4602:0.0458750848123932 5121:0.0471262608403148 5122:0.0471262608403148 5192:0.259414809328127 5201:0.0518829618656253 5583:0.0929443953758193 5833:0.0486575765393418 6409:0.0553884868630143 7215:0.0553884868630143 9591:0.0534142775646523
++1 15:0.120004142471016 63:0.0757098361252308 75:0.07098726329095 81:0.213261835188879 111:0.219047988463987 142:0.00908289597942109 515:0.253061757773579 1528:0.526754974729242 2401:0.47435511901551 2421:0.561033750117451
++1 6:0.0203007907251941 27:0.0591110338087107 53:0.156343600429416 64:0.176073963068033 81:0.247205802644782 142:0.00526429069913804 185:0.118216413157813 719:0.218506889213321 733:0.22913355736153 7006:0.776771631264039 8400:0.402384449097053
++1 6:0.0416145054795591 15:0.0475250179948306 26:0.180119052211304 27:0.0403904864861936 29:0.0503785903345528 63:0.0599664519932104 67:0.0784657897425423 75:0.0562259084701349 88:0.10592156476637 134:0.0993470848737925 142:0.0107912473514343 144:0.0824689821907882 178:0.223898402332154 180:0.106895041700881 192:0.112024346053843 204:0.333092952771705 208:0.103924470714805 220:0.111279491102329 252:0.200218833666691 255:0.12910927627122 274:0.299822414053337 314:0.110693927655804 322:0.12021769102177 351:0.0984414650383771 355:0.0834858693229841 394:0.129227294577532 404:0.116488471114282 457:0.191301888992506 541:0.143039794589039 731:0.159856334988844 795:0.328678520369315 895:0.144248177772708 1036:0.156809839634304 1230:0.193817133271118 1340:0.186238121999364 1949:0.17260993650442 2399:0.201670478102531 2968:0.211577080125038 4397:0.25774578111795
++1 6:0.0219544374912403 15:0.0752178855531579 31:0.0836785602778 85:0.0672715176397002 88:0.167642148753628 179:0.0598389627509687 205:0.0868595652105598 229:0.114972454874542 255:0.102170679530053 275:0.0738173733436842 430:0.0854354696293359 477:0.117370562381031 480:0.0807390793429838 499:0.163526667465709 507:0.0586946211057244 586:0.080693339792927 655:0.0831194239602932 895:0.114150855536124 952:0.102264073365888 1007:0.126712269998661 1064:0.101708005487134 1124:0.122039256080263 1863:0.132245856570393 2382:0.763422695224544 4402:0.21758079167293 8145:0.255313370774214 9390:0.255313370774214
++1 6:0.0135089847033038 28:0.0498785144035698 29:0.0245309994085274 31:0.0514890163429745 54:0.050574674977949 60:0.0512673001997033 83:0.0175013166668554 94:0.040548489810676 97:0.0421470060409041 111:0.0422410351425626 226:0.0523736104658053 333:0.0681419206551371 405:0.0642366075142864 448:0.0611691125065444 478:0.0529693684252541 861:0.09017770437174 882:0.0507230592468364 1010:0.0752043953552148 1027:0.141168026702499 1038:0.179366918367145 1080:0.0682950876110787 1337:0.0869664428958236 1535:0.100238673213545 2024:0.0657819268925271 2186:0.106302941568819 2240:0.275234443730777 2398:0.0982000160424802 2913:0.198792229324277 3734:0.109562740207829 9162:0.849726783578967
++1 144:0.277794493900919 178:0.377097799128849 204:0.280503608081131 220:0.374841899234402 274:0.504971769746189 795:0.553572269213088
++1 4:0.0392412252361487 6:0.0181440928814854 15:0.0310816504037045 29:0.0329479040445674 31:0.034577783431599 37:0.0429241680866647 63:0.0196092118997854 75:0.0183860428089634 142:0.00470502753775797 144:0.107870430428126 174:0.133000605391158 179:0.0989069930412486 180:0.139820012962334 245:0.104895160069553 337:0.0693572996584167 351:0.0643813160025347 404:0.152368335163176 414:0.0670307468044403 507:0.0485077632898026 527:0.0865271955839118 561:0.080392822738906 641:0.0717844863688554 727:0.0971280686968537 850:0.0831614559515561 960:0.104547013942871 1007:0.104720478354177 1273:0.121800862873031 1565:0.136432073391974 1955:0.136432073391974 1980:0.112647442095884 2578:0.137062285338953 2709:0.135817423835179 3382:0.160846916635044 3456:0.176494269967857 5075:0.166401415350605 5423:0.188193620182456 5516:0.15496271717511 6106:0.200909113210926 6940:0.200909113210926 7234:0.539454417119441 9189:0.456511633516678
++1 6:0.0330947312150275 29:0.0400645372785448 31:0.0420464649718188 60:0.0837308185375993 80:0.0718276914516571 142:0.0114425944016409 199:0.10313149899401 265:0.104214405991033 325:0.0990594718191861 351:0.0782874574217607 436:0.0974404422166046 496:0.0925054548796642 499:0.328672877388371 560:0.262823612037839 1135:0.299679069940598 1448:0.138470267202094 1783:0.159758186231184 2134:0.150287967427984 2404:0.172655180237272 2448:0.163016019764251 6710:0.732914358826938
++1 6:0.0451424909711088 15:0.0773311254456898 26:0.0488472865078703 29:0.0819743632577283 31:0.0430147510420518 41:0.0519661713155673 47:0.0534157434874645 63:0.121969265275299 75:0.114361155572703 94:0.0677497189971232 96:0.0699231197132492 134:0.0808271328153363 142:0.035118316114683 158:0.0810030747221523 179:0.0615201331572241 198:0.0982658695944685 209:0.0708943034732077 229:0.0591012979513944 276:0.0876712060242863 306:0.0885591720226365 325:0.101340707750707 382:0.0991249981309691 429:0.12879236911152 475:0.0914486481872505 640:0.105330106817497 649:0.151093112971182 731:0.130056450432645 867:0.0992042957217907 880:0.132750817958548 882:0.0847497163690375 890:0.118521081248056 968:0.313308209376321 1045:0.0586265533003518 1138:0.111287035651155 1433:0.10880845779499 1465:0.178629728273603 1625:0.15239256344783 1700:0.162198457128923 1709:0.143929846130339 2195:0.175678382573335 2264:0.45987054778499 2657:0.181892289581358 3767:0.18076614030252 6749:0.24993086974308 7012:0.24993086974308 9351:0.28395015982394
++1 6:0.027551003557983 26:0.158997785063887 27:0.0267406382477953 28:0.0678167485310019 29:0.0333532912516575 63:0.0397009627577115 64:0.0796523059720893 81:0.0559154570250966 94:0.0551312878838609 97:0.0573046920941585 134:0.197319073526722 142:0.0285775059199468 172:0.0720191926583193 174:0.1346370294832 176:0.142808931011794 178:0.0741162920019546 192:0.074166041891959 198:0.0799637847354114 204:0.220525151535443 215:0.0585060826357749 226:0.0712091771996715 387:0.0648273201913204 409:0.0469013148580216 442:0.0781501741007601 506:0.051377642809997 531:0.103336424938873 717:0.0930666176523274 834:0.0925448948516946 867:0.080727428360049 987:0.0749756958357134 994:0.105142940455612 1614:0.116050384266187 2528:0.105658964859318 2997:0.316463526433423 4556:0.162825958525403 4887:0.449862046616652 7393:0.610143227226723
++1 6:0.0359656783953411 12:0.121226208311892 15:0.0616108311238178 26:0.155669371293801 27:0.0523617148799481 28:0.132794184557589 29:0.0653101661465072 64:0.155969775148684 86:0.558791388347478 94:0.215908741623029 108:0.166467475906444 134:0.128792301971745 142:0.0139896363270579 158:0.1290726529183 185:0.104718420928503 192:0.145226942727937 259:0.218762665538136 308:0.132870036430869 408:0.105890692620957 565:0.191274126700925 592:0.177141449162753 631:0.120689556853019 906:0.210420163168153 2862:0.304640110268041 8361:0.398247109934647
++1 27:0.0799828930653209 64:0.238244944340366 142:0.014246179534484 204:0.16490107163885 387:0.193902500401283 834:0.276807470340568 2997:0.473280932176062 4887:0.44852167993974 7393:0.60832530180699
++1 6:0.0457248255614875 15:0.104438254525821 29:0.055354550739827 31:0.0580928506057973 80:0.099239623394193 96:0.0944334966258893 159:0.0916928501450773 162:0.0825486180986745 174:0.111724690432418 179:0.0830849840618049 199:0.0712450234261846 228:0.115272012993351 245:0.176230465299954 256:0.103723770913371 265:0.143986228622709 277:0.138028976543723 322:0.13209175233562 346:0.126984215425598 351:0.108164659534595 381:0.146513049196136 499:0.22705290893179 507:0.0814960927611307 550:0.124177614745186 697:0.163397388883477 796:0.133978697800326 847:0.162539508618968 850:0.139716475647176 950:0.332163918685886 1548:0.167731420323356 2709:0.228181812987786 3653:0.231359558540601 3691:0.467241320704951 4315:0.252357142236872 5297:0.264998587664041
++1 6:0.0642599071783165 15:0.0550400613284181 29:0.0583448637926795 31:0.122462179192977 37:0.0760110487466189 63:0.034724418155012 75:0.0325584037735542 81:0.195625655016733 83:0.0416253704186743 96:0.099534896850672 142:0.00416588245583043 179:0.350293301165945 185:0.0935502444129789 229:0.168260272695419 473:0.141443002460202 513:0.120217251190377 586:0.118093358736036 684:0.15035160009036 764:0.148580011438788 1122:0.196211903436031 1305:0.146112480645342 1311:0.196211903436031 1446:0.167671519564551 1573:0.207345944401944 1951:0.200334473048683 2340:0.445991260553437 2605:0.233560258390687 2825:0.216929366793043 3167:0.248760609396973 4301:0.302703858095989
++1 6:0.0341837829297981 28:0.0841433237054174 29:0.0827658902327449 31:0.173720369230177 37:0.0539132470974062 42:0.0681725187214947 63:0.0246293948994895 75:0.0230930805019162 80:0.0741913326619511 83:0.0295241141637698 98:0.0739131133361638 142:0.00295478425733371 174:0.0835251423869271 179:0.124228316894297 180:0.0878077694223589 204:0.0684038958397955 229:0.0596719674842573 245:0.13174952331595 478:0.0893574872301866 586:0.167522920288131 1001:0.133562476974497 1047:0.128411455617856 1064:0.105575144984762 1191:0.190051436661293 1305:0.103634911015456 2709:0.17058824102485 2889:0.172151801341722 3025:0.243349858003458 8555:0.795062670050463
++1 6:0.0245979810783082 15:0.0842749046212252 28:0.0908218330584884 60:0.186701237427537 159:0.0739901890883688 162:0.0666113863015564 180:0.189554256345647 245:0.142206567142846 351:0.0872818720214403 413:0.106342259691017 427:0.130648824492077 467:0.154379060691635 531:0.138390644464015 608:0.13420434035257 2837:0.184961220254479 5268:0.248981789567434 6464:0.787994075053658 7592:0.262664691684553
++1 6:0.0107547058526741 15:0.0736931870203533 60:0.163258674317309 172:0.0843394213743106 179:0.0586260015245264 180:0.165753462743945 768:0.13440473294307 1010:0.119742699934472 2734:0.356133912103747 3179:0.185300263168013 4930:0.572041144305871 6307:0.639511009444345
++1 6:0.0253480721415074 27:0.0738075067924701 28:0.187182709756669 29:0.0460296281598834 31:0.0483066392264764 142:0.00657312427983474 159:0.0762464466008419 185:0.221411929929087 204:0.228253877147146 245:0.146543015520561 411:0.0949531281432909 643:0.103118098737911 644:0.120765293501805 689:0.1583911691064 965:0.126595864132257 1155:0.147536661561013 1296:0.129024691540129 1509:0.160156789183997 1576:0.140489630909012 2866:0.347435551905435 3478:0.256574242568325 5137:0.238810156112982 7247:0.502427229678033 7696:0.262914519459064 9794:0.318883117921705
++1 6:0.0197935604705947 26:0.0856719865048465 27:0.0288170504787295 29:0.107829529204677 31:0.150884908220654 41:0.0455710587622765 47:0.0468422422447876 60:0.225352777196969 63:0.042783744996717 75:0.0802300236294575 84:0.058083739109265 88:0.151141882368852 134:0.0708803039721074 142:0.0256637925336728 172:0.0776114874686374 176:0.102598702285888 199:0.0462612813312583 205:0.0783103669647995 215:0.0630490836084231 275:0.0665518596703584 319:0.0897797244009139 345:0.0726277170994705 387:0.0698611656551638 477:0.105818303242048 480:0.072792293127671 505:0.0711897655723567 571:0.0781088449895772 867:0.0869959182167744 952:0.0921986783284549 966:0.098854969247378 997:0.0941204097261974 1159:0.100636260929993 1277:0.116828692655968 1469:0.336157165122051 1863:0.119229488801801 1936:0.266506990660988 2968:0.150952066402803 5736:0.709371612604158
++1 6:0.0401357084751063 15:0.0275017123793764 26:0.06948736443754 27:0.0934924457957881 29:0.0583060274321204 63:0.0694026087610674 67:0.181625903338301 84:0.141332754569156 94:0.144565330575799 97:0.0500881445855089 103:0.0764133031193232 107:0.307138914739729 134:0.172470105380648 142:0.0333048760023485 153:0.139242916148777 154:0.058026872081595 176:0.124824584570971 192:0.0648260952788198 198:0.0698937114058777 199:0.0375218860488412 204:0.144565330575799 226:0.0622415972069389 306:0.0629896141685604 345:0.117814675537423 355:0.144934465849923 363:0.149974475746531 405:0.076339763771964 417:0.0939269070180562 453:0.0778593327373573 477:0.257483290683111 561:0.0711332976085489 571:0.190059014586257 799:0.242942692356107 882:0.0602800569727104 987:0.0655337871329591 1045:0.0416993958737303 1058:0.0900476503958191 1731:0.299018634392485 1894:0.251265542023445 5440:0.162502125517955 6161:0.499553281116114
++1 6:0.0291902127928943 11:0.16396388787895 15:0.0250020763001134 26:0.126343288272042 37:0.0690563925456014 48:0.0446437964157415 63:0.0473209439398135 75:0.0147897308925419 88:0.111446945455307 94:0.131425759078105 96:0.045213959169401 97:0.0455356232143971 134:0.104529508920063 142:0.0208159800978672 176:0.113479253383281 198:0.0635410581480121 226:0.0565844461225545 252:0.0526658038993152 255:0.0679221200239541 275:0.147219315223248 276:0.453522365222858 304:0.0552570220392078 306:0.057264475674542 317:0.0434949975867503 351:0.051788323788792 373:0.0520953050184076 413:0.0630977229264438 430:0.05679670771652 457:0.0503202799993335 475:0.118265759942968 506:0.0408258538549654 587:0.092425966627636 671:0.044566412140927 683:0.0882552023986633 723:0.074896319363837 737:0.0859921174400168 761:0.0742057972741139 799:0.0736205276608802 867:0.128295733788443 1017:0.0859921174400168 1043:0.652927992294956 1135:0.0991210930711224 1159:0.0742057972741139 1725:0.105277907238911 1863:0.175831637490534 2024:0.0710707905180274 2376:0.101296285436582 2532:0.106947470217719 3929:0.126879081583283 4176:0.121716529058488
++1 6:0.0129054641690775 26:0.0558584067669137 29:0.023435064947626 60:0.0489769083542451 88:0.0985449863987777 94:0.0387369660899758 134:0.0462141828684279 142:0.00334657481637007 144:0.0767256860889253 145:0.0541486956267226 159:0.0388193539584951 192:0.0521113792198853 255:0.0600589308804422 306:0.0506350977447283 513:0.0482870111666118 553:0.0824876509778416 703:0.185479031548936 947:0.0784979977466522 952:0.0601138305244192 1140:0.0655402979239031 1197:0.106085136739367 1268:0.0873875963630001 1482:0.0764471814375241 1670:0.108449326202628 1863:0.0777380046361527 3759:0.106085136739367 7816:0.75040354819559 8184:0.535430685452893
++1 6:0.0306922121870444 12:0.02586285504781 18:0.0205368192533698 20:0.021641637408232 29:0.0557340655528797 31:0.0146227848503141 51:0.0260564852098438 52:0.0312786204464196 60:0.0582392715124393 65:0.0274472553104647 68:0.0471046507047802 72:0.023875608430558 78:0.0294741045888512 83:0.00994068274724626 84:0.0450327885174296 98:0.0248863287298116 102:0.109669701672853 132:0.023268623455233 135:0.0349540695505287 139:0.0313861467099584 142:0.0139281408465284 179:0.0209136551840393 199:0.0358667422360136 204:0.0230313913381868 206:0.0731839024457724 215:0.0488824599086968 236:0.0529146710142428 243:0.217049979201589 253:0.12576636657194 279:0.0434375574463928 283:0.0287598589602089 318:0.0463086228812008 325:0.0344505856739342 337:0.0879926447029251 351:0.0272265610705636 411:0.0287430296525915 449:0.0438531402173063 472:0.0349540695505287 485:0.0265499118201489 499:0.0285762000170827 533:0.0480509486319527 550:0.0312572463686752 554:0.0487022942802708 576:0.0375563398550639 586:0.112808952996129 597:0.0343069718547489 607:0.037634315986961 630:0.10616620456453 643:0.0312146279717068 644:0.0731131344485689 654:0.0801829139039558 658:0.248379946894795 688:0.170358986451567 763:0.0444340726955783 767:0.0733976449856457 772:0.0710936840622242 819:0.0385324885951834 829:0.113843890961452 837:0.0832642225917836 856:0.0287935985072734 876:0.0370261046982689 916:0.046488571360079 951:0.150037169194706 966:0.0383215250281991 987:0.0313214992416435 1007:0.0885716128926711 1046:0.0862066949635619 1075:0.0536051958742227 1112:0.0462197891922239 1114:0.0469523789620147 1133:0.0447370210756516 1135:0.0521107133122927 1155:0.0446604627042211 1162:0.044508996354734 1199:0.055560190063559 1245:0.0750351346524981 1273:0.103018044282579 1292:0.0460443396362745 1296:0.0781134988887978 1331:0.173479444809329 1351:0.0509398711188334 1375:0.0481567458006005 1380:0.197572527312838 1493:0.102441201093414 1527:0.0997726392118269 1561:0.051079300040282 1598:0.040140994594797 1677:0.0603796752752866 1700:0.330834388323732 1707:0.0438531402173063 1711:0.0557772437259822 1782:0.0472408005565972 1836:0.0818269456370511 1849:0.0948751351756377 1936:0.0516562515296922 2010:0.0562252572819354 2020:0.0639897619630073 2023:0.0562252572819354 2066:0.0513638235679167 2075:0.0626440946179963 2142:0.0498863196059135 2184:0.0622312287730684 2195:0.358329242269889 2251:0.0553475216249745 2277:0.14679748224071 2365:0.0530831022822648 2382:0.200111577895009 2433:0.052266667715428 2461:0.065533017104877 2490:0.126147633438008 2683:0.0543442171271354 3613:0.063073816719004 4008:0.0733987411203552 4053:0.0760442601696714 4513:0.0746386112967184 4900:0.134684076607393 4909:0.0712863349560291 5365:0.0760442601696714 5627:0.0819351842897402 6060:0.142572669912058 7710:0.0795862124468901 7805:0.089231757282762 8420:0.0819351842897402 8759:0.089231757282762 8844:0.089231757282762 8878:0.0819351842897402 9455:0.0965283302757838
++1 6:0.0170284398967631 28:0.0628732138880355 29:0.0309219869746006 31:0.0324516475292686 60:0.129247631749328 63:0.0184034709499928 142:0.0132471674107912 159:0.0512211747716362 180:0.065611345318985 365:0.0902117836832813 408:0.100270778996687 850:0.0780479830900455 1305:0.0774376342602539 1340:0.114311510988997 1627:0.113671430729113 2026:0.512866845507519 2933:0.181834838441133 3952:0.142009420364323 6619:0.529865632494856 7661:0.529865632494856 8681:0.188555513983026
++1 6:0.0164195861915008 31:0.125165341485997 80:0.106909552737943 159:0.0987795122855239 174:0.120359552720893 180:0.126530809180021 245:0.18985078318143 346:0.273596880189766 586:0.120700086106845 1191:0.273863716443021 2024:0.15991016973921 3025:0.35066662835852 8555:0.763789078894404
++1 6:0.013577571274379 12:0.0915293444814119 15:0.0232589926891446 27:0.0988365780309179 29:0.024655545936 60:0.0515275898074129 64:0.117761756942387 102:0.129374681501482 110:0.131036387338824 142:0.0158438788985453 172:0.0532382996167607 180:0.104629986408297 205:0.0537177023086331 268:0.195969428309469 308:0.0501603881911804 411:0.0508611802070603 437:0.0610634072878164 441:0.0957422823364593 539:0.0630717729121919 643:0.16570412070902 644:0.0646873407507411 723:0.0696747311550048 768:0.0848414575975902 780:0.137750316321821 882:0.0509805856845806 1067:0.0722087891594675 1128:0.816757812116837 1129:0.0791627646200691 1155:0.0790272935450728 1296:0.0691114470465875 1395:0.14498347853802 1576:0.075252585929593 1614:0.0857872033850103 1872:0.101185902821945 2301:0.120364820062452 3300:0.111609972827033 3793:0.114097287542957 4107:0.116968681653869
++1 6:0.0141614258863954 15:0.0485183240070452 26:0.0919418329939454 27:0.0206173379077151 28:0.0522874887020128 29:0.0771473069974187 31:0.0269878863926062 47:0.0335135734112928 63:0.0306098963252994 64:0.0614128388461586 67:0.040052889728642 94:0.042506853466102 97:0.0441825729683264 103:0.0674039010380332 134:0.101423508215955 142:0.0110167919451184 178:0.0571445087626944 198:0.0616529925348993 204:0.042506853466102 226:0.0549030900029858 252:0.204403546889974 292:0.0698226027668305 308:0.0523173552506148 322:0.0613651622920744 323:0.0605720649880312 345:0.0519619516928347 355:0.0852307822011341 373:0.0505473397046925 387:0.0499826052635931 389:0.0603448321515865 423:0.0536470896973398 475:0.0573757994233693 506:0.0396127501856816 527:0.0675342920378006 553:0.181030723197779 609:0.0501422898834262 714:0.0732766700529644 723:0.072670842337468 853:0.0749272250625341 867:0.124483541005774 987:0.0578071189470736 1518:0.0907300398720285 1713:0.116409358230008 1880:0.197868046492641 3609:0.340243470432622 4740:0.116409358230008 5190:0.587538880431069 7101:0.146884720107767 8121:0.440654160323302 9289:0.17815317928957
++1 6:0.0170741250568089 26:0.0492676802175835 29:0.0206699645146669 31:0.0433849482844318 60:0.0863962579137544 63:0.012301896763475 96:0.105787347101454 100:0.035169403499683 102:0.325383597184198 134:0.0407613771115877 142:0.00295171286508659 150:0.0496336728045447 176:0.0295008920720791 179:0.0620495930074832 199:0.0266036321564128 275:0.0382722039477773 345:0.0417662679128774 355:0.0685072744164754 373:0.0812584463674227 530:0.0935730437611788 561:0.100869347622195 755:0.0594013617348506 757:0.0540741765605778 772:0.15819810511281 952:0.10604201409788 1863:0.0685657070232726 2484:0.182321865374374 2907:0.0848291506561327 9054:0.859181748182693
++1 6:0.0559347858724997 15:0.127758418584755 26:0.322801564851648 41:0.085853087342483 63:0.0806019586949394 68:0.114460677504067 75:0.0755742286138319 83:0.048310188700214 94:0.223858036689583 96:0.115519684287423 140:0.131753939844255 142:0.0338443107806323 176:0.0966448398151694 289:0.162217517639283 298:0.184835030998425 317:0.111127812773008 325:0.167424545884607 351:0.132316897784631 413:0.16121191697477 423:0.141263480997641 427:0.198059995227346 467:0.234034375300803 475:0.302163833948648 480:0.137136227893016 1245:0.182329604835861 2466:0.59022680621628
++1 6:0.0201362116471954 15:0.0459923197381614 17:0.0365748286160261 28:0.049565250818212 68:0.0412052069486231 80:0.0437029564555964 83:0.0173913990946683 94:0.0805876474790126 96:0.0415864434974513 186:0.0380885844231122 245:0.0776080368681052 427:0.0713004961140135 478:0.210546770534296 518:0.0585350134835399 571:0.0529740042328303 644:0.0639563565495258 781:0.290945161266916 814:0.0745115098749912 884:0.069295757359925 1109:0.0928698199557472 1411:0.0850106318815526 2237:0.0968314613749607 3559:0.123114233000566 3781:0.123114233000566 4977:0.135879715631039 6115:0.417712430309783 6989:0.135879715631039 7552:0.743225991307565
++1 6:0.0322141722639885 27:0.0312666478791069 31:0.0409277252289298 67:0.0607410910803149 81:0.130758951196475 96:0.133061062144737 142:0.00556906936041277 185:0.18759091453371 196:0.49926802073478 339:0.0835217957076234 388:0.111663843988702 389:0.0915142695265923 455:0.0784035866420823 502:0.0741201163574053 608:0.117171723021478 687:0.120826720054668 795:0.127216536068785 867:0.0943910183941697 1134:0.130629320452129 1613:0.123138750669922 1916:0.131150807921205 2458:0.17910100038368 2470:0.160049247803461 6784:0.687985375601044
++1 6:0.0537249618467648 15:0.061355523731821 27:0.0782171019613187 28:0.0661219512336786 29:0.130079058368102 30:0.161466127571642 47:0.169522990816923 63:0.174189611138309 75:0.163324138860506 81:0.109036165923883 83:0.0464015907854769 84:0.0525515469572134 142:0.0464388835538434 154:0.194184406300214 158:0.0642688961892316 159:0.0538678367295355 174:0.196908506170843 176:0.0464133387726924 185:0.0521422406031606 192:0.0723125704402247 205:0.0708516874067914 221:0.0852379329746805 229:0.046891740785344 255:0.0833410233018607 256:0.0609357779553455 280:0.093802183713324 310:0.0918984256546144 314:0.0714537752094373 325:0.241215118630268 345:0.131420564312094 346:0.149201709248897 373:0.0639213856682546 462:0.110029985449703 498:0.0920064196052911 499:0.0666946714381329 524:0.101221948386344 626:0.0845093218918774 658:0.082814264718124 693:0.106469161656871 795:0.106082246822362 804:0.0843503013741266 952:0.0834172050193984 1027:0.0935704028978582 1311:0.109362924088162 1410:0.123498806539782 1472:0.0910511491333608 1720:0.116430865313972 1816:0.196796563641269 1842:0.137247774156893 1969:0.122355875617709 2218:0.398647197568518 2528:0.206036917816401 3217:0.311363440688301 3614:0.142560069807786 6126:0.164239122696904 6812:0.174200826354005
++1 6:0.0204520929740414 15:0.0350353587801506 29:0.0371390072361734 67:0.0578448407088842 88:0.156170378496159 96:0.0633582292269006 142:0.00265176278792763 176:0.0530060824904213 199:0.0478003959060707 255:0.190358257896916 275:0.275064170207398 289:0.0889702454660138 514:0.10862850479292 586:0.0751714858779385 631:0.0686308210461433 737:0.120500579656345 761:0.103984433127016 799:0.103164296005738 1018:0.110968060006914 1036:0.115599935016191 1373:0.118636235939036 1709:0.130416666491936 1948:0.153786770596903 2650:0.355590799068647 7838:0.713526748112795 9103:0.257290855855955
++1 6:0.0175362439543038 15:0.0600807554879676 29:0.0636882192879545 31:0.0668387722236974 80:0.114180222083095 159:0.105497276540546 174:0.128544925196531 179:0.191186979705978 204:0.105273375448373 245:0.202762092171879 264:0.144359363855321 322:0.303956526661078 346:0.146101782961731 369:0.156812529279271 499:0.391853838412916 530:0.144158460607772 697:0.187996986610943 761:0.178318804738449 847:0.374019903676435 1034:0.221099971717539 1309:0.207010402026562 1486:0.239627436891755 2340:0.243418077926873 6171:0.330426166769903
++1 6:0.044952495840821 15:0.0770056552082641 26:0.048641698682196 29:0.122444025931866 31:0.128501133347912 40:0.140435916303892 63:0.0242911845228252 81:0.0684241685806927 142:0.00874262765036751 144:0.0668129995095539 171:0.0971695597952852 174:0.08237817673946 179:0.183783624056996 180:0.173203989645757 204:0.0674645748588421 229:0.117705106350799 286:0.0629700423110801 320:0.106671976745276 345:0.082471194500162 386:0.0895036620849268 387:0.0793296830859227 402:0.0856579813747859 502:0.0775718570767546 521:0.110818652219425 582:0.0947881030470988 586:0.165222498771412 658:0.103937939525767 782:0.128045422564181 994:0.128664213181258 1001:0.131728399611651 1134:0.136712669571164 1141:0.299247510556708 1389:0.143324076061396 1504:0.157022721587957 1897:0.300075318000326 2240:0.305290033726778 3079:0.165375249475662 4492:0.174018462682293 6147:0.240008182437639 6231:0.199251359609822 6233:0.211754023925076 6493:0.233127469743981 9267:0.282755074075449
++1 6:0.0114800536886176 17:0.0104260176521945 26:0.0331258914954446 27:0.0222847753699079 28:0.0141290663420824 29:0.00694888615319028 31:0.0145852725667063 40:0.0119549302645161 41:0.00881024246943486 60:0.0290449342512584 63:0.0248141151912564 64:0.0165949081865083 67:0.0541152338940224 75:0.00775542614876806 88:0.0146101129436418 94:0.011486154097751 96:0.0237092563603393 97:0.0358168954063394 102:0.054694181292477 111:0.0119656007205537 140:0.0270411744588904 142:0.00992315039623778 143:0.0168594408464405 153:0.0663796327460332 173:0.0143012084053736 176:0.0198353838760555 179:0.0104300023678038 180:0.0147443878478372 192:0.0154518898195497 193:0.0185584805888252 198:0.08329901122981 199:0.00894368304237236 204:0.011486154097751 205:0.0151397255093276 218:0.0217064122100665 220:0.0460474485125486 226:0.0148358511815016 229:0.0300597534142822 232:0.0169829727238869 242:0.0268138372938578 265:0.0361503759656223 274:0.103388751431696 276:0.0148636038235581 278:0.0330361591166864 286:0.0107209392639072 296:0.0345074352469204 307:0.018374255982656 317:0.0114039343946072 322:0.0165820250817286 327:0.0160910261310973 331:0.0299143734787798 333:0.0579076018477674 336:0.0349861380987806 337:0.0146278190736235 341:0.0159866055327219 346:0.0159408548068983 355:0.0115154830151658 363:0.017873890637813 365:0.101363378589847 372:0.0188873087280957 373:0.0273176904774884 382:0.0168054572081684 414:0.0141371368472278 436:0.0169002960142086 441:0.0134919385222624 442:0.0162819512647404 543:0.0211781156311821 570:0.0221974080228086 580:0.0173125402283531 631:0.0128411553657556 640:0.0535723773890361 644:0.018231393764159 655:0.0144878144416417 678:0.0414117995018057 687:0.0430586023406155 713:0.0382649660962731 772:0.0177278263072538 774:0.0643910311013351 792:0.0209960212188191 808:0.0199697149817096 814:0.0212402449073385 844:0.0419325537508757 858:0.0191956084086452 880:0.0225063125610768 886:0.0164800827997391 913:0.0199697149817096 952:0.0178247495997949 987:0.0156205746139882 1010:0.0213031182643639 1031:0.0235114199601144 1038:0.254045967435921 1056:0.0187884383376878 1150:0.020878041814194 1164:0.0202987296799455 1192:0.0238086613720901 1201:0.0244015830086153 1227:0.0209072890350369 1260:0.0255446013755739 1322:0.0214963865636621 1392:0.091387533782586 1590:0.0884257886723265 1613:0.0219412663664849 1636:0.0558552116418671 1749:0.0299457144078847 1782:0.0235598061327074 1820:0.0244015830086153 1838:0.0293273696584166 1853:0.0281558966821609 1921:0.0289071564439471 1946:0.0266456053399033 1981:0.0549976147673578 2010:0.0280405104425988 2021:0.0279276058209336 2055:0.0294752628907755 2067:0.0477197598993909 2160:0.0296274434754047 2240:0.41581625666274 2296:0.0279276058209336 2369:0.0748261370950421 2446:0.0308376610006743 2526:0.0572892172184083 2564:0.0291835288095573 2838:0.0575484828632581 2852:0.0329662970924 2860:0.0297841674290437 2913:0.0281558966821609 3708:0.0299457144078847 3734:0.0620715850713458 3759:0.0629120115002847 4211:0.0396910237335794 4234:0.091387533782586 4335:0.104024159908969 5833:0.0744471385517032 6364:0.127118364156278 7199:0.0387338606181093 9162:0.673964922089228 9274:0.336982461044614
++1 6:0.0145890578317981 15:0.0999668593429853 28:0.107732823329038 29:0.0529846138555899 48:0.0892505898961891 63:0.0315342219983757 75:0.0295672033416006 88:0.222801518298012 96:0.0903904428250722 102:0.278025380571154 142:0.0189157758662594 176:0.0756214832263215 255:0.135787942913389 275:0.0981055359885334 457:0.100598852119538 475:0.118216747755228 506:0.081617869269883 561:0.129282356286459 574:0.327709390875501 723:0.149730561039805 737:0.171912960458661 867:0.128242564937259 895:0.45512988441545 1626:0.209675861511207 1863:0.175758768612581 1955:0.219400928095855 2455:0.218412489821321 2975:0.207387826426046 3509:0.267595617780402 6248:0.283826270991979
++1 4:0.0167145122991272 6:0.0115925150832723 15:0.0397170035968693 26:0.0836260019385903 27:0.0112515412214113 29:0.0982374278194694 31:0.0294563068796137 41:0.0177930994896782 60:0.0586589309654892 63:0.00835240009716177 64:0.0335149518766374 67:0.0218581439483426 72:0.0240476508430916 81:0.0235273019215911 86:0.0300184225945253 88:0.0295064743182179 94:0.0231973505069909 97:0.024111844276225 132:0.070308876200363 134:0.110700109647515 142:0.00801628799043139 159:0.0232466878830551 174:0.0566506331345137 176:0.0801187844595728 185:0.0450040122795659 198:0.0336460114314856 199:0.0361251901361772 204:0.208776154562918 205:0.0305760758762823 215:0.0246173481118758 226:0.0299623735671659 228:0.0292246615027023 240:0.0347865750748023 277:0.104982554194332 284:0.0469330839348668 308:0.0856537660437582 322:0.03348893325503 341:0.0322864284079354 342:0.0360979752248105 346:0.0321940305858404 351:0.0548454994298734 365:0.0409425435478338 387:0.0818313226461312 409:0.0197344608073044 436:0.0682634216774543 473:0.0340218385292347 475:0.093935430735007 477:0.0413164769165578 478:0.0606064004470539 502:0.0533453760541067 504:0.0410480427564252 506:0.0648538371349408 538:0.0338591358533186 553:0.0987942601280016 628:0.0419898830713406 719:0.124775652500113 757:0.0367137821298813 876:0.0372929067107723 909:0.0680436770584694 965:0.0385976615562795 987:0.0315471951148764 1038:0.102613865378187 1126:0.0412082863555 1277:0.0456154543724899 1306:0.055330502894879 1446:0.0806613726427596 1495:0.0581122417809957 1614:0.0488300118430899 1675:0.0571017076903771 1785:0.0586560831912749 1787:0.111072769523148 1884:0.0581122417809957 2055:0.0595280194522988 2161:0.0513069326890935 2185:0.0482916940500151 2229:0.0549303579355883 2237:0.0557463437607879 2662:0.0608147580097255 2837:0.0581122417809957 3090:0.141754926699268 3117:0.134369025439375 3708:0.0604781398012034 3793:0.0649440905187558 8130:0.0765922184768693 8682:0.0855757643539967 9374:0.80887267628936
++1 274:0.257381960179964 640:0.222276977475001 1010:0.265166096935119 1038:0.316218390148908 1260:0.317961068443923 2240:0.323486603149887 3734:0.386311518804227 9162:0.599216930336621
++1 6:0.018522144023831 15:0.0211528460543114 29:0.0224229387118997 31:0.047064330260967 37:0.0292123586667195 80:0.0401998383767742 142:0.00480306170496797 171:0.0533834231773225 174:0.0452572706794565 245:0.0713871735887344 265:0.0583257263696231 337:0.0472016210002276 347:0.152157383726334 404:0.103695392470995 555:0.213450720535861 561:0.0547119274935588 842:0.357647761528442 847:0.0658412613112069 986:0.0552095469554459 1057:0.0841117385019269 1388:0.0798824727673021 1707:0.0705720112582883 2034:0.0831294075281695 2099:0.179522481294641 2217:0.109465553524346 2561:0.0920233242198006 2709:0.0924315478928455 2771:0.0890696971728969 3691:0.0946347080574906 3699:0.093718784313708 3921:0.0956029980336159 3963:0.367129675883806 4703:0.11324570852619 5029:0.11324570852619 7000:0.128076553993046 7386:0.244753117255871 8644:0.128076553993046 9055:0.621364707495042
++1 6:0.0290587081320315 15:0.0398231033424538 26:0.125774099845962 27:0.0169223977733857 29:0.0422142251341864 63:0.0251241379336844 64:0.050406725252276 75:0.0353354442249725 80:0.037840825625021 134:0.0416234374506803 142:0.0165777617158953 171:0.0502507693883385 172:0.136728683981505 174:0.12780443085327 255:0.0540928995753085 265:0.0549030476271955 289:0.0505642214459623 317:0.0346392388173193 423:0.0440327163141256 457:0.0801497318294952 478:0.0455762279938348 574:0.0870315424191522 631:0.0390047708109451 856:0.0436178282618255 987:0.0474472051306751 1433:0.0560329419018487 1917:0.0723183665085367 2924:0.0899928090235665 5677:0.215975444315625 5678:0.43195088863125 6640:0.113065899992286 7860:0.540688995670652 8220:0.588266909401865
++1 6:0.0160824701370093 11:0.0542019549306555 28:0.029690229724578 29:0.014602099050499 60:0.061033811391109 63:0.0260716724871701 86:0.031233756100512 122:0.129827351360612 142:0.0093834421521717 172:0.031530063309164 174:0.0589442051024256 205:0.0318139866751267 252:0.0870493364808743 276:0.031233756100512 304:0.0608881759862986 308:0.0297071887469194 327:0.0338130100581051 328:0.0407908988993801 346:0.200984677867907 373:0.0287021267430048 408:0.0236751255341868 496:0.0674298971917831 506:0.0224931753700753 515:0.0290483755936594 580:0.109139546248328 685:0.0424914648219274 687:0.0904815480485389 693:0.0478070263989074 727:0.0430459454348501 767:0.038459770394352 909:0.0353992553528419 916:0.0487192683312864 952:0.0749123682468308 996:0.0447654827152292 1027:0.0420151962491348 1080:0.0406527111819511 1229:0.0453804194567683 1236:0.0443098256576412 1363:0.0455218552640608 1485:0.100276309807871 1527:0.104560106703037 1578:0.337064251966677 1808:0.404261766951453 1892:0.213536632956696 1955:0.120929977617986 2223:0.204156856102257 2251:0.0580033044386982 2484:0.064399770386138 2616:0.053384158239174 2652:0.064399770386138 2791:0.0629266731792882 3969:0.0610308483211822 4189:0.125174410214181 4300:0.0728640078975506 4521:0.0769206895200905 5932:0.0769206895200905 5953:0.153841379040181 6799:0.60106720397719 6800:0.0858667434253129 9853:0.0935134335073211
++1 6:0.0415779773836386 27:0.0403550328012911 31:0.158472986981059 42:0.0829187175512153 48:0.169572705377954 67:0.0783969145784338 88:0.211657179319791 102:0.264118791831082 142:0.0143757001122144 153:0.120205486137458 199:0.0647837129247724 252:0.100021543474321 275:0.0931983820469972 289:0.241162138173201 308:0.307207738942666 507:0.0741050984901115 513:0.103711948773835 535:0.131426644803198 561:0.122815764795676 631:0.0930151168032502 671:0.169278772919526 723:0.142241168057326 895:0.28824312118815 1159:0.140929746221835 1359:0.15385405788753 1471:0.160516625159139 1734:0.191760959876505 2024:0.134975821828207 2975:0.197014466965556 6634:0.522287886532649
++1 6:0.0248525200846283 27:0.0361822890260861 28:0.09176165405702 29:0.0451297539294223 31:0.0473622496770085 37:0.0587945485320104 64:0.215552278862603 80:0.0809086104750214 174:0.0910875026473323 176:0.0644107540178246 190:0.106542154576457 308:0.0918140681998432 323:0.106300627758722 886:0.107030402440436 1792:0.146688486642246 3734:0.201562905084648 5676:0.216049464643527 8560:0.289015861944628 8906:0.825574108974244
++1 6:0.0205067458192392 15:0.0351289815718274 63:0.0221626469160569 75:0.0207802015216645 80:0.0667607270389182 83:0.0531342747470054 142:0.00797654678188231 159:0.0616838429106144 174:0.0751597124853933 204:0.0615529288221183 255:0.0954334701646401 405:0.0975116791910752 473:0.0902751288237198 480:0.0754150853751807 507:0.0548242548437821 565:0.436239222843179 593:0.0987579955122662 597:0.0916876694798946 852:0.101754837894148 884:0.1058563428486 974:0.131697854642874 987:0.0837087948840651 1055:0.111882934078511 1059:0.0939904160707102 1471:0.118753021636733 1573:0.39701183196874 1936:0.138054776063516 2237:0.147919941484999 2843:0.57959664267042 3957:0.17827051102829 4429:0.19319888089014 7561:0.218977242519061
++1 122:0.266791694884607 174:0.181693120341278 346:0.206509037934836 1578:0.346328959671299 1863:0.298613804988765 1955:0.372761748810294 5953:0.474209808188006 6799:0.529361504472879
++1 6:0.0165178002282051 15:0.0565914753065651 26:0.214480779293269 27:0.048095872764366 31:0.0629570100624987 88:0.252256932025182 96:0.204680973142666 102:0.157390824945376 134:0.236599514850305 142:0.00856661233433099 150:0.144049388636279 158:0.118557268537724 172:0.259068306043329 176:0.171238001424659 179:0.360167016978822 192:0.266790977927866 205:0.1307005881275 275:0.111075551514203 312:0.149714458800148 405:0.157087667735549 507:0.0883198238425713 561:0.146374094803911 587:0.209203497553903 768:0.206427824144245 1033:0.197866505798389 1395:0.176379713756341 1471:0.191306675879405 1665:0.356055924168463
++1 4:0.0195307153604234 6:0.0180609607069524 15:0.0773481030872266 26:0.156345634152004 27:0.0262945929894621 28:0.0666855362226974 29:0.0491954161786114 31:0.017209677881689 41:0.0207910320859762 47:0.0213709882531112 63:0.0390387337553504 64:0.0783236715144925 68:0.0277189288380088 72:0.056198806797108 84:0.0264997328632151 92:0.0298072550039833 94:0.0271058372365235 96:0.0279753883864487 97:0.0281744126867761 102:0.0430237299413408 103:0.0429822257274506 132:0.0547700754013719 134:0.194027707168533 140:0.0319068361493878 142:0.0304425560019798 174:0.0330978065927694 176:0.0702134085472868 178:0.0364400003100189 180:0.0347948472355863 198:0.0786299546791096 204:0.243952535128711 208:0.0338279121746299 218:0.0256121618841137 240:0.0406477128372713 252:0.0977582816789677 308:0.13344725383632 312:0.0818506980437656 317:0.0269118093772346 322:0.0782628665943619 323:0.0386256897597708 337:0.138079040054874 345:0.0331351791588453 387:0.0637459728235489 389:0.0384807875668956 405:0.0429408600921618 409:0.0230594904548318 423:0.102629281843379 457:0.0311348398272738 469:0.0522072769562065 475:0.0365874901026374 478:0.0354089408942268 506:0.0252603209004972 530:0.0371179868875615 553:0.115439956564235 561:0.0400122404049748 644:0.0430237299413408 714:0.0467271823183536 719:0.0971992764642041 723:0.0463408571469852 742:0.0463408571469852 772:0.04183537591019 814:0.050124229260945 834:0.0910012065092916 853:0.0477797108353138 856:0.0338874270829617 867:0.119071290603271 994:0.103389111335946 997:0.0429408600921618 1031:0.0554839084705642 1038:0.119903121363513 1216:0.0483415248073961 1377:0.043065373665456 1416:0.0545010058677679 1638:0.0679034860765871 1664:0.0535903841410855 1816:0.0496184857235349 2055:0.0695578060003164 2114:0.0646530561855156 2248:0.0593160882494598 2423:0.0582768808581953 2775:0.0667226886155146 3842:0.0692087971109537 3851:0.0878428063533685 4281:0.0727728892304372 5190:0.749325436463751 7101:0.0936656795579688 9289:0.11360499983475
++1 6:0.0115200982778365 15:0.0394688970814748 31:0.0439084462324641 42:0.137846788425749 57:0.0860063750327033 80:0.150017002866754 158:0.082686033626576 159:0.069304407315394 199:0.053849281758728 205:0.091155214338335 252:0.0831395428469183 255:0.107223541461189 337:0.0880730619678029 346:0.095978757062923 351:0.0817543310046074 365:0.122060343772053 608:0.502820840540351 641:0.091155214338335 665:0.142442763615159 1169:0.129825823410687 1174:0.204250749753766 1703:0.353156028561481 2040:0.156943304071361 3366:0.369043649438481 8419:0.492060393524261
++1 27:0.105184582996073 31:0.137685553239608 64:0.313313186869825 142:0.018734986897737 322:0.31306995282659 337:0.276174387914858 389:0.307864479606626 506:0.202094500670204 5190:0.749369685950048
++1 6:0.0426950334404532 15:0.146277040361139 27:0.0414392325784398 29:0.103373358603199 47:0.134719309480347 63:0.0922852372142104 80:0.092663864485068 83:0.0368751768670722 96:0.0881761985274177 134:0.101926649422317 142:0.0332143319660495 150:0.124112439911963 174:0.104321653184261 176:0.221307077700886 179:0.0775796545827845 180:0.109670590277217 265:0.134445495866235 308:0.210307563646014 593:0.137076061314174 689:0.355714955305371 997:0.406038524161329 1043:0.318334809262131 1138:0.140337956735141 1624:0.180248987971006 3679:0.295226770110175 4447:0.239187967109842 4488:0.276873537025571 6126:0.261040477079363
++1 4:0.0467202975332014 6:0.0432044317062834 29:0.0392275182743156 31:0.0411680399947027 41:0.0497351575276907 63:0.0700397254802548 75:0.0656708386644596 80:0.140654168020588 88:0.0824763076919025 96:0.0669211774838653 142:0.0140044229724676 158:0.0775254474121069 179:0.0588789482896245 255:0.100531524615513 276:0.167814604458047 304:0.0817859140638639 312:0.097899357379761 345:0.0792641437115095 346:0.0899885477269945 351:0.0766518940506122 405:0.102720751534924 475:0.087522571090874 480:0.0794437580305563 505:0.0776947979982298 506:0.0604263431459784 731:0.124472861594524 737:0.127276926399122 1033:0.129386325942634 1135:0.146709122219415 1236:0.119035248953298 1273:0.14501515992387 1282:0.151938633179953 1675:0.159610326954476 1746:0.12616682389007 1785:0.163955107381247 1808:0.217204195038704 2062:0.173005480989231 5953:0.206642054911907 6879:0.71760248232764
++1 6:0.0123601454540526 29:0.0448896386341339 31:0.0471102562674167 63:0.0267164319433141 75:0.0250499338740842 80:0.0804781318394418 108:0.228836191321688 142:0.0160258286572579 158:0.0887155107530123 165:0.120008679677192 174:0.0906028666657259 179:0.067377566263468 325:0.110989523286788 345:0.0907051713792312 490:0.127912303112549 498:0.127003838432299 531:0.278157543029209 641:0.195604530611479 731:0.142439339079812 1018:0.268252518542792 1080:0.124974190912179 1140:0.125541802267355 1627:0.16501751496908 2223:0.156904282449687 4656:0.229663333114779 6239:0.709406629301139
++1 6:0.0263025044012356 27:0.0382932923146108 31:0.100251063179098 42:0.078682396447953 48:0.241363842061216 67:0.0743916125975615 88:0.200843604268349 102:0.250624950577314 142:0.0170515561632314 153:0.114064182307747 199:0.122947820088243 252:0.094911438205997 275:0.0884368724106267 284:0.0798656053858631 289:0.343261730120096 308:0.291512481394038 331:0.102807394646499 506:0.0735741262541138 507:0.070319065591097 513:0.0984133005285858 561:0.11654110170895 633:0.136758383417551 671:0.160630312605238 723:0.134974060222213 876:0.126922005602179 895:0.136758383417551 1014:0.161274900533581 1159:0.133729638988771 1359:0.145993646975495 1471:0.152315823377971 1734:0.18196388359388 2024:0.128079900866961 2975:0.1869489887635 6634:0.495604174325813
++1 6:0.0219377780834523 26:0.0474763757309847 27:0.0319387741968494 29:0.0398368665750254 31:0.0418075317677714 63:0.0237092337356723 67:0.0620468174262067 83:0.0284210849029832 88:0.167514938984775 102:0.20903540073861 142:0.00568878536249075 153:0.0951359870743051 174:0.0804046194288767 176:0.0568565611462821 180:0.0845272463062372 204:0.0658483069322143 205:0.0867936546666112 209:0.0689046378930008 255:0.102093150647113 320:0.104116405987673 331:0.0857471887348819 423:0.0831058932938329 437:0.0986623786411208 457:0.0756359772746354 561:0.0972018781136255 574:0.0821302281908448 609:0.0776765303778834 952:0.204372947228172 979:0.672516709195134 1387:0.177923295768221 1550:0.523910294349273
++1 6:0.024905374104949 11:0.0223832939967946 15:0.0682624487129613 26:0.12935679019773 27:0.0145036952566502 28:0.0367827216716349 29:0.108541756027881 37:0.212110514246689 41:0.0229360305038441 60:0.0378068765008542 63:0.0538329208803514 64:0.0864042781330312 67:0.056352077011364 68:0.0305786742444249 75:0.0201899881116285 81:0.0303276511694773 88:0.114105144314423 94:0.0299023303469614 97:0.0310811500910368 102:0.189849850309133 132:0.0604206715139954 134:0.0713484767824511 142:0.0245416396794236 153:0.0864042781330312 174:0.073024975237678 176:0.0774572841578982 198:0.0867421603496245 206:0.0950168053193078 208:0.0373179177594559 214:0.0853502941367589 226:0.0386227208195372 229:0.026085223104052 232:0.04421240184846 252:0.0718959636481784 256:0.0338977256199661 265:0.0470558062816932 275:0.0334957212964837 278:0.0430021282535014 284:0.0302493291119414 292:0.0491181624460496 308:0.110411195749701 309:0.0366573339881529 317:0.0296882847487995 323:0.0426106792052755 325:0.0447282050112297 337:0.0761622862574549 351:0.0353490421568169 365:0.1055532149711 373:0.0355585776588982 375:0.0353112875426509 387:0.0703226069361089 389:0.0424508275393208 404:0.0418294859244184 411:0.0746358355189119 442:0.0423874067218657 448:0.0451089305111323 498:0.05118189135685 502:0.0343821820679922 505:0.0358299912066278 506:0.195064892315298 507:0.0266335495440419 528:0.0521162296799266 530:0.0409474275242273 546:0.043035260782787 594:0.0476937229449539 686:0.0589057184624263 696:0.0549739210782011 800:0.0878523362126564 806:0.0534705210631076 856:0.0373835727854925 867:0.218926341424132 884:0.0514248695188427 909:0.0438555366228383 998:0.0551337727441557 1001:0.116771983800559 1026:0.0689193473802 1027:0.0520519135064729 1038:0.198410182649467 1043:0.0557084527854405 1080:0.050363953882284 1216:0.0533288911776845 1228:0.061334115831558 1269:0.0508841200655654 1272:0.0629438756179538 1309:0.0588001800102935 1338:0.0629438756179538 1339:0.0601238422365994 1446:0.0519878985808372 1448:0.062523314385121 1509:0.0629438756179538 1591:0.059119272207835 1604:0.0668756730021789 1613:0.0571205113162962 1625:0.0672606889311349 1643:0.0666871574390871 1786:0.0666871574390871 1816:0.0547375953922546 1880:0.139194393582891 1903:0.0837155798542403 2055:0.076734043485981 2160:0.0771302208378822 2163:0.0629438756179538 2165:0.0745715704318778 2270:0.073299288572991 2280:0.067656866283036 2561:0.0742422252993942 3170:0.617041766703057 3469:0.0824722538571101 4234:0.0793041837301038 8142:0.0969054964531131
++1 6:0.0354826612838334 15:0.0405222673340903 28:0.174681021141911 31:0.0450803019092105 60:0.17954472897116 63:0.0255652359669814 75:0.0239705463591484 142:0.00306705694876102 159:0.0711540460547408 161:0.115424436621237 176:0.0613073968640678 199:0.110572889162394 229:0.0619393182648065 276:0.367524566858997 346:0.0985402972895068 365:0.125317965460546 455:0.0863585097099821 510:0.10692824708994 515:0.170904703610753 592:0.466033197604195 626:0.111628395477269 655:0.0895581547820626 686:0.419614587413041 856:0.0887672305274049 982:0.132479336439751 987:0.0965604470363291 1001:0.138637439292442 1331:0.133704110179785 1501:0.193124273325252 1980:0.146862528334943 2017:0.355742817973069 2024:0.115188416291793
++1 6:0.0168641446147227 15:0.0385187216354547 23:0.0404358613999393 26:0.0729926670845637 27:0.0491043445533733 28:0.0415110633672621 31:0.0214256964716078 32:0.210698582710272 37:0.0265974306461964 41:0.0258844091021341 48:0.034389583213936 63:0.0121506059821144 64:0.048755683399425 80:0.0366013722278669 81:0.0342262070956871 88:0.085848747471729 118:0.147238295973257 132:0.0340938110330773 134:0.0805201737738163 140:0.0397233574855855 142:0.0145770610360227 158:0.0403477237510246 162:0.0304454268828111 174:0.0824121825879359 176:0.174828511040501 185:0.0327346639565949 192:0.0453975062409358 198:0.0489463415327313 199:0.0262764562441645 204:0.033746212173819 221:0.0535119906625532 229:0.0294384238036551 232:0.0498958133423167 274:0.0607510348983283 299:0.0465358621834126 355:0.101497140767914 420:0.0571615016014811 475:0.136652027362664 499:0.0418706145337846 574:0.0420904383960176 667:0.054143780551031 723:0.115386835975805 744:0.0693619682720257 757:0.480682469740009 799:0.113421324596624 858:0.0563965160706422 867:0.0988275453105272 880:0.0661233335782164 966:0.056149726060264 997:0.160381473881627 1007:0.259555004503585 1015:0.140504128103237 1122:0.274630205984634 1135:0.0763540144902132 1140:0.114192567096662 1154:0.0763540144902132 1201:0.071691620239278 1228:0.0692184877342068 1229:0.0634481270498024 1277:0.0663588197796682 1294:0.127692378108637 1312:0.0730947731846686 1568:0.0834229721027929 1579:0.0705605552667265 1591:0.0667189306097039 1816:0.0617739984328475 1877:0.0911828651242384 1880:0.0785437704143958 2054:0.0875056023911311 2264:0.0763540144902132 2306:0.158151373601634 2528:0.0646745248128408 2792:0.0861635348586114 2975:0.159819244281328 3090:0.206217163966032 3144:0.100730954715531 3356:0.218724989401927 3589:0.0889756710449031 4004:0.0924174475765587 5149:0.098671360294506 5886:0.120053629107421 7223:0.105920718169308
++1 37:0.168186995242956 88:0.271429279668152 102:0.338706079538262 206:0.339033921465302 214:0.304542389340071 506:0.198862912902972 2280:0.482819278398328 3170:0.550423920195478
++1 2:0.0489235519680435 6:0.0359531292007992 26:0.155615054920199 27:0.0348956298383637 28:0.088498566550645 29:0.0435249186883164 31:0.0456780258388155 63:0.0259042078162436 64:0.103943569305167 80:0.0780314622946372 96:0.0742524364692925 134:0.0858315757217083 142:0.027969510087376 158:0.0860184111391169 176:0.0621202773598826 185:0.0697879216209244 204:0.143888937629684 404:0.100640990541929 561:0.106200718203562 582:0.101082378981244 755:0.125081948624057 823:0.136548105873739 834:0.120767962389278 965:0.239414260462608 987:0.0978407510139556 1122:0.146372903929969 2163:0.151441832256439 9625:0.836214966545996
++1 6:0.0452009386746181 15:0.0774312490010112 27:0.0658071463902364 29:0.0410402492950029 31:0.0430704438795836 63:0.0244254367062971 64:0.0980098326534399 75:0.0229018446638602 80:0.0735769476873296 142:0.0117212617123231 165:0.109717660497517 172:0.0886175099908734 174:0.0828334633100803 179:0.123199571236497 180:0.0870806255330054 185:0.197411996673415 200:0.109166921599514 204:0.0678374371403537 205:0.178830994050884 208:0.169321378691359 237:0.0971088747926831 408:0.133081285184176 515:0.163285096458502 565:0.120194730876668 582:0.0953119766272147 626:0.106651560418884 719:0.121629701928993 723:0.115976678982741 761:0.114907408030436 768:0.141222367551493 884:0.116664196835411 1031:0.138858878267793 1047:0.127348069019042 1055:0.12330609855403 1094:0.116387357632391 1135:0.153488653236525 1378:0.138575718448147 1509:0.142796603343561 1627:0.150866885063834 4031:0.223983329682371 6618:0.23441591542727 7387:0.223983329682371 8116:0.23441591542727 8117:0.468831830854539 8434:0.241334656348909
++1 6:0.0191292491869581 26:0.0413983320642988 27:0.0278498929113688 29:0.0347368518654165 31:0.0364552276003108 37:0.0452547896902886 134:0.0685014199008854 172:0.0750066914824966 174:0.140222040261925 176:0.0991552856395374 190:0.0820066301875371 215:0.0609330308787361 255:0.0890229316561186 286:0.053593003376159 323:0.0818207244256246 502:0.0660204224998261 506:0.0535088892433203 667:0.0921241391496759 742:0.0981637486826128 796:0.168152324114622 886:0.0823824397643227 1096:0.125323144319985 1154:0.129914235466124 1792:0.112907689211481 3734:0.155145113054199 5676:0.166295572111062 8560:0.222458584614196 8906:0.847270903129979
++1 6:0.0465890942312331 15:0.0399046110758746 26:0.151237832811111 28:0.0860092323257096 29:0.0423006268839248 63:0.0755266819041326 67:0.0658841796288869 75:0.0236051779100063 96:0.0721638248839051 134:0.0834172600174883 142:0.0181218459982229 153:0.101019789919597 158:0.0835988400300117 174:0.0853773426130144 176:0.120745851053442 192:0.0940617836440171 232:0.103382092717578 242:0.0816132328037213 255:0.108407227882608 351:0.0826568519452855 373:0.08314680991631 404:0.0978101078287716 437:0.104764275536546 475:0.0943791447051831 541:0.120104054922598 697:0.249728771657957 848:0.128732154490842 852:0.115587957565814 952:0.108506322523955 1036:0.131666139803625 1083:0.124864385828978 1126:0.124208814200358 1198:0.138746186831062 2066:0.155934932399054 2694:0.170693711728549 2833:0.703877319071782 9093:0.293049419037993
++1 6:0.0280720650046555 13:0.093286236727735 15:0.0961774298978721 27:0.0408695603543946 28:0.103649010597385 37:0.0664111479515841 42:0.251927799054593 60:0.106534948068102 142:0.00363974765096725 199:0.196829120055334 204:0.0842609468295218 406:0.131606525492327 414:0.1037082147835 515:0.304224866328833 936:0.328475855998967 1154:0.190648405872697 1312:0.547531210178985 1463:0.20654803105398 1536:0.230757206060892 1787:0.201727708605713 2825:0.189532028707564 6262:0.326456714902902
++1 6:0.0197349044234892 15:0.0676135648167161 28:0.0728661506515248 57:0.0736681037846117 60:0.0748949896467078 80:0.0642479591335072 204:0.0592361741837498 336:0.0902149210605611 513:0.073840005890866 515:0.0712909038368763 586:0.145070931474417 1665:0.106350868998936 1746:0.115260870820509 1845:0.312365626161796 1858:0.127046885927717 2223:0.125261107536784 2340:0.547874734789752 2387:0.13402747777067 4425:0.171560691670991 6237:0.655572395863035
++1 6:0.0397250186094985 26:0.171940832134456 63:0.0858655555529547 142:0.0103012758872262 232:0.35260230960588 437:0.357316480517441 541:0.409635421817485 697:0.425871344576984 2833:0.60017349683062
++1 6:0.0291958472858106 15:0.0333425364940123 19:0.11815672005259 29:0.0353445418354061 81:0.118507417763227 96:0.0602969155660762 142:0.00252363613813008 180:0.0749952757372603 185:0.170014478349774 255:0.0905803077498446 351:0.0690644270965483 357:0.0900888332332691 361:0.174389252346725 387:0.0686976260690772 506:0.054444979117683 582:0.0820842515136969 623:0.135087784443798 697:0.104331184518728 733:0.109843805911125 739:0.0994166287462625 767:0.0930922985101132 1017:0.114678288295926 1171:0.161133049623637 1262:0.149921820473964 1613:0.111601196208399 1951:0.121359957046153 2285:0.131412922775678 2401:0.131797140842169 3167:0.150695865827621 4538:0.197014388620401 4764:0.757330008021186 8932:0.215523286318687
++1 6:0.0130273361927833 15:0.0446328302969389 60:0.0988788380572436 63:0.0281585635129441 75:0.0264021092144743 80:0.084822276852397 142:0.00337817800708142 179:0.0710145532533307 180:0.200779650681608 345:0.0956013637844235 457:0.0898300001466083 574:0.097542977247928 600:0.453000178750149 608:0.142151915211074 620:0.185187485599932 781:0.141172548835008 5803:0.263726479685451 6464:0.556439365272294 7373:0.498466553469509
++1 4:0.0247324434212957 6:0.0114356202672461 18:0.0306072778393913 26:0.173237810010448 27:0.0332977835883925 29:0.10382985848794 33:0.0632810014277314 40:0.0357259765157621 67:0.0323434688863252 74:0.0468736375656206 75:0.0695286797154304 80:0.111687685103027 81:0.0348133198993714 142:0.0281715174129525 150:0.249321048416694 154:0.0413330983575859 158:0.0410398444159734 172:0.0448396083355486 180:0.0440619595711579 204:0.0686501823888785 221:0.0544299297955919 252:0.082529872424695 262:0.107025601542504 286:0.032038331959669 303:0.255436596951287 322:0.0495535336088046 337:0.0874272135659747 345:0.0419602625237826 377:0.0440078607965736 386:0.045538289831804 418:0.0590309623168144 432:0.0537120241351178 437:0.102860507797201 441:0.0403191543683976 455:0.0417484098496267 480:0.0420553454153315 491:0.0682384650693821 561:0.0506689311534705 657:0.0593867287879953 683:0.0691500941360551 698:0.064239555108624 757:0.0543253385476572 781:0.12392369681307 930:0.050061553531708 944:0.0625669945185742 1013:0.0708478169273027 1057:0.0778962117146138 1126:0.0609758509573249 1241:0.285210366565439 1433:0.0551273170106863 1450:0.0815736374454973 1591:0.0678634202196559 1858:0.0736187980660425 2248:0.0751140841249016 2975:0.0812803835038848 2976:0.154418017229658 3251:0.0815736374454973 3355:0.55619243791371 4292:0.0976678636275885 4573:0.107737671173734 4729:0.109390633223966 5445:0.0968631421574567 5476:0.204917766112784 7015:0.333715462748226 9806:0.143862074631575
++1 6:0.0091124004573355 17:0.0248272483558791 26:0.138043434660774 27:0.0265331246848228 29:0.0330944619656713 33:0.0252125294857125 41:0.0209796381668443 67:0.0773180554575748 75:0.0277017406153081 82:0.0341747869198181 102:0.0868280403805625 139:0.0372737078566855 142:0.0165408470717288 158:0.0327023360592187 172:0.0357301534988793 199:0.0212973972917172 203:0.0345407071847161 232:0.040441182405663 252:0.0328816990093943 296:0.0410859013277895 303:0.0407086018682512 317:0.0271559401579827 331:0.0356172224402413 369:0.0407424351316026 406:0.0427204540487397 408:0.0268288668229814 437:0.081963734051017 472:0.0415109184592988 475:0.0369193939296588 500:0.0471510684770892 513:0.0340949056053558 527:0.043456041685907 530:0.0374547031221201 538:0.0399229161426726 586:0.033492546858756 657:0.0473219328659737 695:0.0449759361828717 764:0.042138889507845 772:0.0422148859922021 871:0.0523335928795244 882:0.0342149198055786 890:0.0478490013171799 912:0.0433303985863356 930:0.0398912269414764 944:0.049856107158275 1027:0.0476120011732045 1086:0.0574453539950128 1213:0.0579718058095662 1241:0.284085057695957 1366:0.0493739003711281 1382:0.0596988761270747 1548:0.0501402417339596 1602:0.062840654093155 1662:0.062840654093155 1665:0.0491064809085399 1710:0.126901197261502 1728:0.0739048556130638 1776:0.0527692252203809 2166:0.515100421909456 2185:0.056940178872208 2229:0.0647677508088128 2906:0.0816437019595082 3653:0.0691607104400857 3698:0.0691607104400857 4825:0.0871672224963048 6152:0.0825701541159407 7185:0.0973049718597811 8499:0.583829831158686 9580:0.343906706596605
++1 75:0.0479187321888 111:0.14786458033577 142:0.0122625056878927 158:0.169706428054259 232:0.209866616254196 303:0.211254370379952 1377:0.225512012308164 2166:0.445512784026597 8499:0.504957174201277 9580:0.594893064670032
++1 6:0.028357351192096 15:0.0485774230701384 26:0.184107650484479 27:0.0825698056658055 63:0.0306471815413745 64:0.245950577693894 94:0.0851172601882696 97:0.0884727815040765 134:0.203094099752855 142:0.0477975820744068 176:0.0734942921688209 192:0.114505039282784 198:0.123456181275883 226:0.109939932407626 265:0.133944788254762 317:0.0845079774113253 387:0.200173951737057 441:0.0999809711649615 719:0.152611705602795 867:0.124635171565867 1031:0.34845913316322 1916:0.173173292590209 2376:0.393624309758947 2683:0.200840270612256 5209:0.267161282614701 5370:0.508142533886304
++1 6:0.0326816027766745 15:0.0559850612963891 29:0.0296733024721043 81:0.0994922064304035 85:0.0500705385542657 96:0.050621921258993 159:0.0491527731779892 174:0.0598910204941481 179:0.044538449504244 180:0.125923686395128 185:0.0475782188586393 278:0.0705359046309848 279:0.0925061373484981 339:0.127100556618794 355:0.0983473906719615 367:0.0697361257370543 414:0.0603687452218119 473:0.0719357407273745 530:0.134331204525808 731:0.0941563737434043 804:0.0769671010134366 1126:0.087130758690228 1573:0.527264828868703 1910:0.0999914238377496 2293:0.121778682497738 2825:0.220653894704598 4315:0.13527830526141 4813:0.607255460959266 8412:0.348984052380718
++1 6:0.00711903505215745 15:0.0243904570096934 26:0.0616262926341151 29:0.0258549474278478 63:0.0307755626630869 67:0.161078653071129 142:0.0110764168310154 204:0.128210724912726 289:0.0619381397175848 437:0.128067834254405 543:0.0787981057962373 723:0.073064150180985 827:0.0608081860772366 867:0.125157268617723 975:0.0882100105263049 1005:0.225138561392608 1999:0.117870718095844 2153:0.113342859532706 2730:0.114028310035479 9299:0.895586883827954
++1 6:0.0166728827056072 26:0.0360824164069342 28:0.0615604087535366 29:0.0302763297740405 31:0.0953221521418504 83:0.0216002465313922 88:0.0636563310674754 132:0.0505607125645768 151:0.065836425237102 176:0.043211430593839 204:0.100090455256429 218:0.0472874702358961 274:0.0900930556139622 309:0.0613505570433581 404:0.0700067894498208 422:0.0760181929597507 427:0.0885557444510267 493:0.148844900251268 515:0.0602295735587254 561:0.0738741866376909 609:0.0590347698405186 1134:0.202826940884607 1227:0.0910931570256544 1389:0.106317812364544 1639:0.112569035554489 1651:0.114264157296436 1697:0.113914934086013 2581:0.129769758094679 3482:0.127152772794057 3787:0.458726368682565 3880:0.453233755804955 5833:0.162183267061458 6466:0.534114273210371 7130:0.184618437578187
++1 6:0.0258849335767529 15:0.0443420600528739 29:0.094009032389503 31:0.0493297533916181 42:0.0774332578619139 96:0.0801885438893998 159:0.0778613140560858 204:0.0776960658731292 206:0.123442418692519 346:0.215658208066923 365:0.137130943447498 404:0.108686729633197 414:0.191256343314203 507:0.0692027007861415 561:0.114690929452181 587:0.491762089690402 903:0.144101190519041 963:0.109809091191123 1418:0.164296486000761 2117:0.480966841756912 2887:0.442149372487393 2941:0.186010838069215 5679:0.22717739311735
++1 102:0.258187878456577 142:0.00702644345668972 204:0.325327377213878 252:0.195551024071799 867:0.238184554956534 1005:0.28563810764435 2153:0.431401529506944 9299:0.681750139501733
++1 6:0.0176712848925931 15:0.0605434179381118 28:0.130493513376949 29:0.0320893308245513 67:0.0999597118036542 142:0.00229121077009198 185:0.0514520824378438 278:0.0762790046992757 325:0.0793407930911872 423:0.0669433299517474 499:0.0658118963302032 502:0.06098857740424 506:0.0494306293395766 1227:0.0965479790141327 2340:0.122646280875829 3136:0.144271339724472 4811:0.150924619975133 6079:0.16012473593975 9682:0.411007142737273 9871:0.822014285474546
++1 6:0.0210839531103002 15:0.0361177637252484 26:0.136885742387118 27:0.0920871222698869 29:0.0382864036519119 31:0.0401803699579754 63:0.0227864631715427 64:0.182866531236341 94:0.0632854708653785 97:0.0657803320251474 134:0.0755011715861767 142:0.043739008893627 198:0.09179081359062 204:0.189856412596136 226:0.0817413574395498 265:0.0995891899705936 317:0.0628324634806977 337:0.0805951591742175 351:0.0748129243298791 441:0.0743367775672885 457:0.0726922021110712 506:0.0589766436081339 510:0.0953058507834394 561:0.0934187515519933 679:0.132618376681004 856:0.0791188171259184 867:0.0926674037849275 987:0.0860649623208156 1665:0.113620856077944 1980:0.130899538635433 2215:0.178587422425489 2683:0.149326600343021 2889:0.318540564816653 6165:0.225140836785677 6296:0.205091372522467 9911:0.700386348886082
++1 6:0.0139131474782082 15:0.0476676997585398 26:0.12043987586405 27:0.0405117486359429 63:0.0300732429970691 64:0.241344590799402 94:0.083523244884064 97:0.0868159263913626 132:0.0843835661697155 142:0.0360788177449512 176:0.0721179435148612 178:0.224570600266722 192:0.112360670624516 204:0.250569734652192 226:0.107881055812991 256:0.0946831904108417 317:0.0829253723201469 387:0.196425236824636 409:0.071054933716103 496:0.233337813427249 499:0.103631470493293 515:0.100520462390145 582:0.234701247564776 631:0.093376334243881 663:0.130212698865997 694:0.204739709523399 719:0.149753702492807 801:0.168262925029533 867:0.122301093019649 1031:0.170966719598966 2423:0.179572914443677 3024:0.233834513753462 7990:0.563317834355888
++1 6:0.0417084454207659 15:0.0952646004711965 28:0.102665267664978 60:0.105523814419915 63:0.0300509096673554 75:0.0281764159832621 80:0.181045214064209 106:0.0973159682455968 142:0.00360520244878204 158:0.0997880931626144 159:0.0836387277324368 179:0.0757869599385796 186:0.157786943482676 204:0.166922435826427 229:0.0728071847424865 245:0.160750722461591 346:0.347490503463281 414:0.102723909938351 535:0.131839050058401 560:0.165614946481137 614:0.336275935450013 655:0.105272019503623 731:0.160217192207675 784:0.136521409429617 982:0.155724147325842 998:0.153885391806768 1001:0.162962750278207 1047:0.156677866783718 2969:0.270475600483869 3010:0.235522049149625 5134:0.258327612458861 5326:0.288404730846805 7173:0.307891089315838
++1 6:0.0123507211897523 26:0.0534573262180652 27:0.0359623380040743 28:0.0912038377846228 31:0.0470743360180987 64:0.107120971594924 94:0.0741437055879845 97:0.077066623736232 132:0.0749074140406789 142:0.0128108875298479 176:0.064019203025444 187:0.115165066508204 192:0.0997427302305647 226:0.0957661696671637 265:0.116676252541957 317:0.0736129732461109 337:0.188846623780088 387:0.1743669675357 499:0.0919938066171883 993:0.271446948131917 994:0.141402233124287 1195:0.33258832251668 2162:0.212799114929472 2165:0.184902397210545 3653:0.18747741737866 3803:0.203050107935533 4704:0.433581123117431 8630:0.527538965585917
++1 6:0.0266631287638332 15:0.0456751435477979 26:0.230810743830108 27:0.0776366362837759 31:0.0508127850770343 63:0.0576323043820823 64:0.231256152176135 94:0.080031892014551 97:0.0831869362324356 134:0.190960153372664 142:0.0587701697250125 166:0.198945053451262 176:0.0691033433351928 179:0.0726729605146971 192:0.107663885312237 198:0.116080237387175 204:0.160063784029102 205:0.105488823045627 226:0.103371522756635 240:0.120015232735464 252:0.0962127354659132 274:0.144076029621105 291:0.107304203128774 317:0.0794590111052868 513:0.199525221175839 582:0.112445253574963 592:0.262647361549577 719:0.143493852080575 834:0.134343733215001 867:0.117188788383359 1031:0.163820144440259 3962:0.225844717772856 4282:0.463579119987159 6265:0.29524019692584 8692:0.29524019692584
++1 11:0.0496966603956398 17:0.165723750201994 23:0.0198879452821995 29:0.0301238213019298 30:0.0166188737980781 33:0.0305991874042275 37:0.0784899681161896 38:0.0225257256858346 41:0.0381929080323301 48:0.0338282962478169 51:0.0187777653620236 59:0.0343360782280705 63:0.0119522907909769 67:0.015639510175668 72:0.0344122063566115 74:0.0226654949799786 75:0.0112067395299291 79:0.0187496511157878 83:0.0573105103509777 85:0.0169435803706946 87:0.0257571050409448 94:0.0663908518783691 97:0.155268302433639 111:0.017290522535074 118:0.0362087893317989 137:0.0226342118342318 142:0.00716957132166194 144:0.0164374116462952 148:0.0243036347620977 158:0.0198445957237078 159:0.0332660277612623 162:0.0149742570820925 175:0.0267633661996505 176:0.0573250202660801 178:0.066939898643963 182:0.0281142722509263 186:0.0313786745958821 199:0.0775427611879447 203:0.0209601653181727 208:0.0207138400387995 209:0.0173680912282077 216:0.0240548861790485 218:0.0156830909805084 226:0.0428761790020499 240:0.0248898074852444 244:0.040685810720884 246:0.057156398012297 256:0.0188154138367802 269:0.0295231507652706 271:0.0610281106710948 274:0.119518983008163 276:0.0214781926010775 284:0.0335806391205729 330:0.0274971718578979 333:0.0557850635380713 336:0.32861166369399 337:0.0845499164607827 341:0.0231009516093963 365:0.0292944052316312 369:0.0494470580035598 372:0.0545850467213196 375:0.0196000314496966 380:0.0339744527789272 387:0.136617464618827 403:0.0320216861344543 411:0.103569200193998 430:0.0215185088275517 433:0.0223583213542748 439:0.0297990412452276 442:0.0235277318567375 459:0.0252557354007436 467:0.0347044532660402 478:0.0216819511012091 479:0.0350173286222591 485:0.0382667125305779 500:0.0286124480579708 501:0.0287510117657645 504:0.0293698899548625 505:0.0596638358465985 506:0.0154676482474156 507:0.0147833297794579 509:0.0256634476526773 526:0.0331821348495862 527:0.0263702133525816 532:0.0319680735290308 576:0.0541304118322437 593:0.0266300384779719 609:0.0391582658917293 613:0.0511418649123353 633:0.0287510117657645 639:0.0318094722382238 640:0.0774131128169349 643:0.134970074865078 655:0.0209351697367674 658:0.102283729824671 667:0.0266300384779719 695:0.0272925233606598 715:0.0341149410919135 742:0.0283758896277202 749:0.0321848354782113 763:0.0320216861344543 772:0.0256170490242856 774:0.0930462749272458 824:0.0309217675874811 829:0.0205105740006554 848:0.0305582895838693 868:0.0394444930251282 880:0.0325220533098911 883:0.03224000773662 886:0.0714421071746048 936:0.0970547124222764 963:0.0469156258186392 976:0.0405190753916698 982:0.0309684517476904 996:0.0307834144745127 1003:0.0292196642123457 1007:0.0319148371555162 1011:0.0331821348495862 1033:0.0662393940626647 1034:0.0348592780702881 1036:0.0312547556158211 1038:0.330391165870609 1039:0.0403559260479128 1064:0.0512340980485712 1105:0.0347044532660402 1114:0.0338365189409523 1146:0.0316541189848033 1213:0.035178742203031 1227:0.060422867292681 1236:0.0304700775190911 1242:0.035097606113109 1247:0.0428122240606081 1260:0.0369124389196071 1263:0.0375539041258043 1294:0.0314020641684948 1305:0.0251462652170033 1318:0.0366109627422322 1319:0.0291825680401698 1322:0.0310626908737821 1337:0.0355979732885458 1359:0.0306925612677333 1365:0.0334371555719702 1370:0.0454545316184584 1374:0.0369124389196071 1411:0.0350173286222591 1426:0.0328149913298162 1436:0.0371202917049998 1446:0.0288566211571097 1457:0.0366109627422322 1462:0.0679489055578544 1489:0.0972239210551277 1507:0.03789619461036 1533:0.0472267694107864 1544:0.0362267716824942 1545:0.0353436650481622 1559:0.0401962116836546 1576:0.0306475394614462 1627:0.0738248778392141 1639:0.112002000786817 1651:0.11368858383108 1664:0.0984449739894485 1677:0.0435129821164896 1680:0.0457773953264736 1687:0.0847572232796073 1758:0.0464675210721447 1760:0.0421707588544108 1788:0.0340443717263451 1800:0.0437617306995387 1802:0.0412092011373409 1838:0.0423786116398036 1853:0.040685810720884 1854:0.0461146131581534 1866:0.088037826053502 1922:0.0405190753916698 1943:0.0331821348495862 1951:0.0344779841471495 2001:0.0724535433649883 2042:0.0355122531438023 2045:0.0464675210721447 2058:0.041392008828697 2088:0.0448473154640834 2120:0.0408562932233496 2140:0.044018913026751 2142:0.0359508812025371 2171:0.0382546621816858 2185:0.034552725166435 2206:0.0356846731132925 2218:0.041030695205155 2246:0.0350173286222591 2256:0.0419684494759826 2311:0.041030695205155 2339:0.0432721316623093 2402:0.114399843476058 2446:0.0445610115959527 2515:0.0485304515971131 2541:0.0548017609856032 2564:0.0421707588544108 2571:0.0368106098458153 2575:0.0385034107647349 2596:0.0382546621816858 2616:0.0367101295411788 2646:0.0412092011373409 2656:0.0520959706129973 2659:0.0430386931794987 2666:0.0746680005245444 2723:0.0360417344093165 2740:0.0800795812697564 2779:0.0415793307433897 2783:0.0464675210721447 2787:0.0520959706129973 2838:0.0415793307433897 2933:0.0590470914667207 3004:0.055971171488066 3030:0.0476369315746074 3055:0.0480705439954119 3214:0.0548017609856032 3271:0.0495434410507994 3274:0.0501056353988872 3307:0.0537887715319169 3471:0.0480705439954119 3492:0.0507128515532622 3574:0.0513729330929572 3734:0.0448473154640834 3845:0.0548017609856032 3852:0.0537887715319169 3981:0.0495434410507994 4008:0.0528952515094112 4080:0.101425703106524 4202:0.0573542905478011 4238:0.0501056353988872 4305:0.188907077643145 4394:0.0528952515094112 4398:0.0990868821015989 4704:0.0485304515971131 4893:0.101425703106524 4923:0.0468376506781935 5369:0.0495434410507994 5411:0.055971171488066 5493:0.100211270797774 5504:0.0513729330929572 5618:0.0507128515532622 5709:0.0590470914667207 5919:0.0573542905478011 6089:0.0612294914228698 6099:0.0573542905478011 6108:0.105790503018822 6189:0.0590470914667207 6383:0.0573542905478011 6737:0.0612294914228698 6988:0.0548017609856032 7001:0.0513729330929572 7694:0.0573542905478011 7696:0.0573542905478011 7880:0.257221645606098 8200:0.0590470914667207 8340:0.0612294914228698 8666:0.0643054114015245
++1 6:0.0293098548583634 26:0.126861132114917 27:0.170686535801876 29:0.0532238393917711 31:0.0558567364223679 63:0.0158382995067249 64:0.381317829319049 75:0.0148503496336339 83:0.0379718433769738 94:0.0439881448228334 96:0.0453992778411573 97:0.0457222602921206 111:0.0458242657123131 142:0.0437027153706759 162:0.0793711507541038 166:0.164020060054484 178:0.177407692335143 198:0.191404482565309 204:0.395893303405501 218:0.0415641648089799 226:0.0568163690638347 232:0.0650391294895514 262:0.068577496760813 274:0.158377794075385 317:0.043673270742406 322:0.0635036335524832 377:0.0563967665256016 389:0.124895493293119 422:0.133635091278849 455:0.053501244561468 475:0.0593752481908291 496:0.0614445568052845 506:0.0409931869783791 527:0.0698877469496854 575:0.0764773576264442 582:0.061803588224509 609:0.051889663178659 625:0.0814630956534942 653:0.0748536323642743 834:0.221519126086402 867:0.0644107900645702 1038:0.194582289461295 1192:0.182358487542556 1213:0.0932325802685612 1232:0.0829623160687653 1312:0.0952789442583384 1435:0.110195761652676 1446:0.0764773576264442 1527:0.0952789442583384 2292:0.128617993158594 3090:0.134401906009015 3138:0.14523855203409 3292:0.127399121484778 3408:0.126249938702893 3563:0.252499877405786 3962:0.124131641809219 4128:0.152003402122305 6604:0.152003402122305 7021:0.142553873315137
++1 28:0.0696432850333258 31:0.0359459807909065 100:0.0582782164145571 132:0.0571993296977676 144:0.168208081978996 185:0.109838165899513 218:0.1069926218758 274:0.101922265928522 299:0.0780734110720692 360:0.348384441145219 389:0.0803751040669001 398:0.0733554784033315 683:0.11405688289255 781:0.102200515788239 998:0.104388606271755 1025:0.229914085575956 1430:0.141830510886066 1560:0.431543762189468 1838:0.144556923645798 2531:0.28631565366025 2664:0.190922261256119 3190:0.572766783768357 4650:0.157300731555763
++1 6:0.0307198951801655 29:0.0557843351699377 63:0.0332004988103735 75:0.0311295423562201 81:0.0935202038183632 142:0.00398305811494183 144:0.182636207686791 199:0.0717981848443915 204:0.0922086584636767 262:0.143753254486634 346:0.255940295419883 351:0.109004472809834 408:0.090445978583079 411:0.230151636566808 423:0.116374790606816 424:0.15820058306759 436:0.135672359072244 437:0.138158838080655 582:0.129553678187067 781:0.166450218154756 953:0.503519208682015 1017:0.18099688774594 1410:0.211849590657611 1449:0.196817561799237 1620:0.185760246835282 2067:0.191542574001909 6758:0.318631982504912 9013:0.340160675923215
++1 6:0.00977096464386782 15:0.100428621861021 26:0.0845828573744847 31:0.0372416853882214 60:0.0741626389606243 63:0.0422398446521247 96:0.060538646920867 102:0.186206415450463 142:0.00506750687622077 186:0.0554467073927046 204:0.0586569411401368 232:0.0867278310017306 274:0.105596143942882 276:0.0759047394967016 372:0.192905605641565 440:0.110284171587694 505:0.0702847457329474 648:0.142619358654103 824:0.218557376507328 880:0.1149341581126 933:0.113548844609928 1031:0.120066992396654 1149:0.0937404812792865 1201:0.12461283438142 1215:0.229061992865797 1259:0.154655600234568 1322:0.109776716441341 1838:0.149767605519554 1918:0.141502124228573 2852:0.336701411403804 2979:0.151300008103654 3555:0.165526016988386 4839:0.197804222638068 5880:0.208674639391887 6480:0.544661626240389 8995:0.208674639391887
++1 6:0.020474530269184 11:0.184011462156815 15:0.0350737948798874 29:0.0371797511770365 31:0.0390189731796393 60:0.0777019082345584 83:0.0265254011101567 111:0.0640214917421992 198:0.178275277075629 252:0.0738814481235933 276:0.39763573583676 304:0.155033000732647 372:0.202111654568429 373:0.146162264324624 382:0.08991695987553 389:0.0872463057313621 827:0.0874429636412061 880:0.120419169703806 1015:0.127938123583373 1043:0.343481410276705 1665:0.110336692782814 1725:0.147687563207086 1808:0.102932817081052 2215:0.173425427718292 2264:0.417151701112639 2521:0.192895370607582 2792:0.156914976377372 2921:0.174866214812776 3551:0.192895370607582 4205:0.192895370607582 4398:0.183444138005648 6165:0.218633235118788
++1 6:0.0260673823514468 28:0.0274992074774399 29:0.0811471292315519 30:0.0223838451015029 31:0.028387115377346 60:0.0282648780112613 68:0.022860986605049 80:0.0484935170148836 94:0.02235534372934 97:0.0232366436236278 98:0.0241558325655234 100:0.0230116193374877 132:0.0225856122981091 151:0.0588186320989631 176:0.0772106696077588 185:0.0433704773054119 198:0.0324247439570948 199:0.0174069672857386 204:0.0670660311880199 216:0.0323993582662846 219:0.0622737864691264 226:0.0288748130886337 252:0.0268751458742159 274:0.0804896419230663 341:0.0311145104538815 398:0.0289649966863969 422:0.0339575402858278 423:0.0282142532902176 427:0.118674299242922 436:0.0328928136702609 463:0.0915199065414137 507:0.0398231273536824 564:0.138425907530272 609:0.0263709974819501 643:0.030298375267237 662:0.0388191463712425 686:0.0440386273769155 771:0.0790142767374135 774:0.0835489187594317 851:0.0422952210092796 873:0.043057575065648 882:0.027964825071442 936:0.0435741048727055 1058:0.0417744593797159 1083:0.0399221288181153 1134:0.0906033641155742 1156:0.052206372246046 1193:0.0453917067396638 1242:0.0472727206557309 1288:0.0489205158994237 1294:0.0845904420185592 1356:0.0795301152860426 1389:0.047492465367884 1393:0.0426347118817591 1411:0.047164595463726 1431:0.0434986968898878 1432:0.0442790557708185 1436:0.0499970617589867 1500:0.0424975590131425 1639:0.100569808645735 1651:0.102084239931204 1697:0.0508861209767421 1822:0.0529365210244885 1831:0.0504319246333859 1904:0.0520317058509584 2194:0.056799500704983 2520:0.0691938449460761 2561:0.0555043853285405 2589:0.0604045361173852 2977:0.0660247639881495 3482:0.056799500704983 3787:0.136609571456641 3880:0.539895444231977 4004:0.122444782633417 4109:0.0641618505822106 4187:0.0660247639881495 5516:0.063609406027121 5637:0.0772500935458715 5833:0.0724477208744307 6376:0.0712442449938225 6466:0.636240922288341 7130:0.0824695745515445 8343:0.0824695745515445 8348:0.0824695745515445
++1 6:0.0302806947853542 27:0.0587800806197809 28:0.0745358788575729 31:0.115413794813049 37:0.0477574580787797 60:0.0766112087084619 63:0.0872688890203884 75:0.081825294031174 80:0.131440402875767 83:0.0784591943762099 96:0.0625374039972456 142:0.0235566755127643 179:0.0550219932548099 180:0.0777819198981471 228:0.152674902523192 339:0.15701772393975 351:0.0716306951794586 414:0.0745784536589978 473:0.0888681102539099 507:0.107939539661239 780:0.102403569357997 784:0.297347198312003 867:0.177451439388231 1046:0.567005641417538 1210:0.323344987794628 1875:0.157974354948113 1939:0.138348324165741 2187:0.141030570689776 2457:0.165941682002901 2771:0.145614476987452 5357:0.17099105980992 6604:0.209384347494195 7392:0.204334969687176 9854:0.234760930316663
++1 6:0.0303502293006986 28:0.224121113847485 132:0.18407485340559 176:0.157318545339875 185:0.17673672395396 1134:0.369212947328948 3880:0.5500247980861 6466:0.64817788065164
++1 6:0.0162552400819579 15:0.0556919205336804 29:0.0295179314799622 80:0.0529197394666849 98:0.0527212891395781 128:0.262092915035582 174:0.0595774279210488 179:0.0443052438105248 180:0.062632171633238 199:0.113974679137048 411:0.121783296645637 453:0.0788339233535501 513:0.0608205136266373 530:0.0668139195922197 1018:0.0881969615105387 1043:0.0908994852683025 1133:0.0947746631887669 1145:0.320314274814765 1192:0.10113598345374 1331:0.0918783568768217 1576:0.090093347797922 1958:0.118163198188554 2825:0.329247808739869 4979:0.16109854817629 5231:0.151018959755824 5935:0.16109854817629 6684:0.719975562565463
++1 6:0.0251240825102013 28:0.123685772975973 31:0.0319198499710005 40:0.0523266985531968 63:0.0362037724673066 68:0.0514120052652168 75:0.0339454800035668 97:0.0522568192249443 142:0.00434336033747653 144:0.0497893099825834 172:0.065675144459172 205:0.0662665390241653 229:0.0438571540692084 337:0.128051851783375 346:0.0697730798678657 365:0.0887334486851424 404:0.14065604894428 413:0.072411138087384 427:0.0889620937032745 467:0.105120612577005 498:0.0860522482724009 655:0.0634131259830585 658:0.0774549612797943 667:0.0806630185554006 994:0.095881077646137 1080:0.0846770478496202 1082:0.114788472857939 1230:0.117013949633166 2017:0.251889559232106 2280:0.113751666856704 2837:0.125944779616053 4516:0.194782617283281 4928:0.829979173125662
++1 6:0.0282894924552385 15:0.0323074519931572 26:0.204074537225938 29:0.0684946143058182 41:0.04342092722354 63:0.0611476865463157 67:0.160022857991643 75:0.0382223072249677 98:0.0611683167530266 134:0.0675360328231603 142:0.00978116987536035 153:0.408936702450328 159:0.0567294497141454 174:0.0691229490378598 176:0.0488789475840856 283:0.0706890992942271 345:0.138401999174023 351:0.0669203935116735 457:0.065023400890642 548:0.106765537886506 574:0.0706064355260748 667:0.0908258382734265 723:0.0967803318918898 844:0.103331456031468 943:0.253208917730223 967:0.120830901210732 975:0.116842446997278 989:0.228085114245351 1005:0.0994057260606669 1126:0.100561569044614 2211:0.145267652884152 2415:0.137640086988009 2733:0.122616004651657 7462:0.626497767564764 8971:0.208832589188255
++1 6:0.0191254452856298 15:0.0655255027700738 28:0.0470772511334953 75:0.0129203209756823 100:0.0393947274090737 142:0.00826584418122063 159:0.0383526140777709 185:0.111372092462745 277:0.0577337498022499 318:0.230852837265636 365:0.067547410622611 457:0.0439598376671922 473:0.0561295634841421 485:0.0882358704347188 499:0.0474850142498473 538:0.0558611350107948 561:0.0564939984487267 733:0.0719558394504811 890:0.0669515100840464 909:0.112259126968284 1018:0.207539987502348 1035:0.0778637917655618 1043:0.0712998033547114 1626:0.0916244732475554 2134:0.173702833811037 2206:0.658257369940259 2683:0.090303676595775 2946:0.0987169684935807 3170:0.0987169684935807 3570:0.350803006303703 4650:0.425326636409502 7211:0.121966540895479
++1 6:0.0249155261801294 15:0.0426814214088025 28:0.091994288152845 80:0.0811137299406167 81:0.0758500337628729 158:0.0894161658116047 176:0.0645740481266365 245:0.144042368166486 325:0.111866093463543 345:0.0914215403278842 347:0.2046783176319 404:0.104616341764176 555:0.143564292795591 561:0.11039568044152 571:0.0983210158237392 842:0.180412068268694 847:0.531408135415032 1007:0.143802494678123 1113:0.453753429504576 1124:0.276998422855017 1294:0.141492032168854 2548:0.173489417934516 3751:0.200783873709072 4528:0.228502953972928 8857:0.258428079111854
++1 6:0.0226239330058816 15:0.0193779094121369 26:0.0734419643466575 29:0.0205414285149836 31:0.0215575796750534 37:0.0535222956291658 41:0.0520874747105999 63:0.0122253975223964 80:0.0368266674114475 100:0.069901405722369 144:0.0336260044420826 176:0.058634882047994 215:0.0360323814848337 232:0.351420585605125 274:0.061124980319689 286:0.0316919003489392 307:0.0543156784358102 309:0.0416242025128523 325:0.0507886324746229 341:0.0472576046733595 349:0.0560701443639254 377:0.0435320022493896 422:0.0515756793566115 437:0.0508741367536518 480:0.0416005994856629 526:0.0678806759762235 532:0.0653970713652046 597:0.0505769103997092 643:0.0460180353069177 653:0.057778640393813 749:0.131681002343451 764:0.104620886409824 780:0.0573823894020844 812:0.0633521456078496 882:0.0424737728059288 953:0.494428112578173 965:0.0564953486987266 996:0.0629736149545015 1009:0.100819176320257 1025:0.137884434063754 1241:0.211594782627606 1247:0.0875809444586071 1412:0.212984645903226 1614:0.0714724269504224 1620:0.0684023717351565 1781:0.0717991545421855 1855:0.0731795294556482 1865:0.0671296106690862 2080:0.112107933900358 2831:0.185972623306487 2880:0.0850588152418248 2882:0.0905940491975369 3563:0.0974508461066599 3729:0.117329642296057 4213:0.410004288935867 4259:0.0983378868100177 4419:0.105093582466552 4705:0.181188098395074 5452:0.106572699944646 6732:0.125257138707476 7782:0.125257138707476 8046:0.13154954660547
++1 1:0.601459153433861 2:0.287456848710408 3:0.358970005066722 4:0.228438173065556 5:0.0988335897765039 15:0.0603127229196356 23:0.126629171534422 44:0.304893595754764 83:0.0456129475857336 142:0.168903544141731 229:0.18437906791033 409:0.0899039926617108 2455:0.263548381280729 6525:0.331701918192118
++1 6:0.0269938250055263 15:0.046241641142429 26:0.292091791042755 27:0.0392997722139916 31:0.0514430035785377 33:0.074687521918127 60:0.204885942280788 81:0.0821769736370712 85:0.0827129174111967 96:0.0836237618605457 134:0.28999287792674 140:0.0953756076956671 142:0.0454992977822077 158:0.0968747083699375 176:0.419762490848541 185:0.0785957850795117 204:0.0810245079276805 206:0.12873060070115 229:0.141363053759745 262:0.126317169144918 289:0.117427944409238 322:0.23394260798827 387:0.0952744243856049 409:0.0689292070509542 423:0.102259487354092 480:0.19854360465955 586:0.297646691383121 658:0.124828777513426 834:0.136009965563902 997:0.25671681185119 1213:0.171730905440844 1931:0.175943746028448 3867:0.250785552942404 4530:0.221893887682964
++1 6:0.0125956853994923 15:0.0215769778483417 17:0.0343176543974182 27:0.0183378075162673 29:0.0686176106949121 42:0.0376792527821034 64:0.0546228044973246 67:0.0356244916585119 85:0.0385949707376532 88:0.0480897715151681 96:0.0390199831295437 161:0.0614602951903077 176:0.0652889599276013 178:0.101652794069967 252:0.0454509805689807 274:0.136123285364539 291:0.0506905996150971 309:0.0463478529325863 373:0.0899172715811354 387:0.0444563405124362 493:0.112446273987958 506:0.0352330155981576 571:0.0497047734220432 749:0.0733122962385327 796:0.0553600863536565 858:0.0631831133699839 912:0.0598937756723296 933:0.0731875293950679 1377:0.0600674468100533 1652:0.0754417726241064 2504:0.0926762608525251 2540:0.10150339544295 2652:0.201749915447796 2684:0.108509886336272 3200:0.115516377229594 4297:0.456532914461526 5119:0.240975123262315 5228:0.249660616627337 6193:0.124830308313668 7414:0.672502717089008
++1 6:0.0478346863230256 26:0.276055612950008 27:0.0928554228501164 29:0.0579087517268046 41:0.0734204205635491 63:0.0344648625274302 67:0.18038837161079 81:0.0970817030956792 134:0.114196638582649 142:0.016538974447859 158:0.114445218157902 174:0.116879954286215 176:0.082649384013653 192:0.257537576971077 240:0.143541319118632 255:0.148407428146905 284:0.0968309867216001 373:0.227652795100736 411:0.119458212963049 553:0.203829471421501 643:0.259460726365725 952:0.148543086821632 1008:0.414662661762145 1057:0.217224238303479 1527:0.207331330881072 1576:0.176746575667341 1863:0.192092952175419 2246:0.201947465661579 2866:0.218550093935933 4187:0.282702175799756
++1 6:0.0173122046968975 15:0.0593131767590784 27:0.100817976106873 63:0.0374202989999389 64:0.150153190173266 75:0.0350861229331005 96:0.107262433727565 142:0.0224465340786817 165:0.672359345834318 176:0.0897367473753935 185:0.100813154069963 286:0.0970046482955687 413:0.149688623780999 441:0.122077060503794 549:0.55458747534358 1949:0.215424298742477 4281:0.279023729730391
++1 27:0.0813991815118389 111:0.174826102356098 308:0.206553819669928 4297:0.506622800155048 5228:0.554105768401663 7414:0.5970307048645
++1 67:0.241997277668499 68:0.262632943249648 319:0.388094917264234 553:0.546888657535415 772:0.396384289286913 1863:0.515398759583635
++1 6:0.0275770217313123 15:0.0188962733871949 26:0.0716165715749429 27:0.0321190693696501 28:0.0407284753323148 29:0.100154366688168 60:0.0418624932299217 63:0.0119215364741899 64:0.0956730320818376 68:0.0338589077441587 75:0.0111779035834414 80:0.0718226884588656 81:0.0335809569386931 86:0.0428458545681839 94:0.0331100111293319 96:0.0341721752676435 97:0.0344152851462038 111:0.0344920649379279 132:0.0334510568751271 142:0.0128720220682752 176:0.0285887589223341 178:0.0445117708517727 198:0.048023579788493 204:0.198660066775991 220:0.0884909790664888 226:0.0427658547458292 265:0.0521035735880319 284:0.033494233122636 317:0.0328730044460703 355:0.0331945547262357 373:0.039373015024863 377:0.0424500186321048 448:0.0998957053798731 455:0.0402705503948372 475:0.0446919308900866 483:0.0535508579523866 506:0.0925670916025792 513:0.041272810922134 546:0.0476517364010919 586:0.0405436392698212 631:0.0370159405363452 641:0.130925410501071 713:0.0551513344905925 757:0.0524022661361217 800:0.0972764261509953 834:0.0555793745460363 856:0.0413937809066985 867:0.0484821986577612 876:0.0532288614540995 1038:0.0732313421671071 1064:0.0511022681166158 1184:0.0726454652148115 1229:0.0622519701450831 1283:0.0683398623375509 1306:0.0789742589822433 1313:0.14416285467913 1379:0.058214957347599 1432:0.0655807419970004 2185:0.0689276358077369 2578:0.083327827872676 3090:0.10116472567063 6404:0.114413425622655 6842:0.122143884893579 7658:0.343240276867966 7934:0.769679373687727
++1 6:0.00929312375849293 11:0.0835204162597219 15:0.0318390812598389 28:0.0686250251107005 60:0.141071553779503 63:0.0200870701204545 75:0.0188340935387295 97:0.057987680316535 142:0.00481968467435696 159:0.0559070260216491 179:0.0506586321463692 199:0.0434395634152348 204:0.055788372302834 304:0.140734936872028 312:0.0842312520337798 328:0.0942827484740114 365:0.098464601023431 496:0.155855257130848 505:0.133695057599131 685:0.19642676176273 867:0.0816895813841341 1033:0.111322203964251 1725:0.134066939209775 1754:0.131636659421782 1808:0.373758966039579 1892:0.123390395886504 1986:0.14390080726069 2215:0.314862210066202 2382:0.646300465643413 7705:0.180795270856427 9373:0.216143889156753
++1 6:0.011263015816492 15:0.0385881093517572 26:0.0974988749970337 27:0.0655904016477991 63:0.024344988224966 64:0.29306107201724 81:0.0685757245322803 83:0.0291831859695598 94:0.0676140053605679 97:0.0702795074659298 132:0.0683104554098996 142:0.0233653123012276 176:0.0583811491779976 178:0.0908975566702222 186:0.0639135607484122 192:0.0909585708322082 226:0.0873322186676087 317:0.0671300136430797 327:0.0947208889786777 404:0.0945832332365635 518:0.0982231604784767 582:0.189996107466899 852:0.223549140113911 867:0.0990055734845091 995:0.176277427350309 1207:0.128329036472332 1223:0.138401527760193 1955:0.169381474238221 2423:0.290736884484338 3138:0.22324561027399 5445:0.190802261120773 6168:0.261960574880517 6711:0.249430217818284 9197:0.566762723526138
++1 6:0.0103061189832604 12:0.208427331138074 26:0.133823172606505 27:0.0300089467401904 28:0.152210966387649 29:0.0374298149320939 31:0.0392814071831733 37:0.0487631524428596 63:0.0222766574584037 67:0.058297780248718 88:0.0786966157686201 134:0.147623940097374 142:0.00534505350478352 172:0.0808215606795849 205:0.163098692781625 252:0.148756720668383 345:0.0756316575809295 355:0.0620275521298389 373:0.0735726616038441 475:0.0835116209851437 593:0.0992660328722478 647:0.0930942339860785 755:0.10756583422638 784:0.303608846514133 880:0.121229085553259 952:0.0960120894231274 1235:0.241607685531769 1511:0.124399551118978 2248:0.135390065465386 2642:0.143057754005254 2884:0.171896661337339 4001:0.179187581887369 4430:0.660311158851075 7381:0.208637931688625
++1 6:0.0102861521279502 11:0.0924450948640491 15:0.0352412861341237 26:0.222606510739114 27:0.0299508080462217 29:0.0373572992062178 31:0.0392053042219246 42:0.0615408394051874 63:0.044466998273852 67:0.116369670743005 68:0.0631463903781888 75:0.0416932683489483 80:0.0669741557776181 92:0.135807597153813 100:0.127124933234365 142:0.0373428867841292 153:0.0892144347678634 158:0.0738293285549558 176:0.0533176363803137 199:0.0480813523281119 203:0.233938995793121 240:0.0925994059078954 313:0.233287147707467 317:0.0613076944873866 345:0.0754851304191297 412:0.104835822483752 436:0.0908562035638736 465:0.0874667181505164 571:0.0811819039121196 574:0.0770181937533167 609:0.0728417075967176 679:0.129400097824747 764:0.0951334459037418 863:0.108708094608424 1057:0.140132719548669 1102:0.123217677387381 3937:0.722205824853999 6511:0.208233721005534 8232:0.208233721005534
++1 6:0.0203350264347414 15:0.104504455536547 31:0.0387531162196502 60:0.0771724839205589 63:0.0219770613472487 75:0.0206061922738543 142:0.00527316851723822 145:0.0853216236588011 172:0.0797346011425766 180:0.156703544137843 274:0.109881698314859 345:0.0746144964321458 409:0.0519258477529569 430:0.0791335480159889 457:0.070110090066841 560:0.12111879071638 574:0.076129877647543 641:0.0804525989505136 685:0.107454272017129 768:0.127066413288845 1064:0.0942057832741511 1143:0.120675959140693 1610:0.562720618022358 1892:0.135000190858976 1907:0.611626017810653 2138:0.158273257713126 2236:0.145055714956131 2823:0.146681289505272 9881:0.236480854766061
++1 6:0.0346240605834175 12:0.233408280792093 27:0.10081696045471 28:0.255681199209249 142:0.00897852317986169 205:0.273970202998794 252:0.249878820387108 423:0.262329527931105 784:0.339997727319117 4430:0.739452410265545
++1 6:0.0268295736368881 17:0.0730986847081717 29:0.0974397809269236 31:0.0511299844438686 88:0.102434129237567 102:0.127823580298301 142:0.00347864959721066 172:0.10520002812034 176:0.0695347217120882 229:0.140502891294805 325:0.361379435098352 408:0.0789920352372129 426:0.120764429139016 475:0.108701499972785 496:0.112489895931568 499:0.0999194529150807 505:0.0964955779660672 553:0.171486160981851 593:0.129207965816885 641:0.212294676355485 658:0.124069222409701 727:0.143622758565686 800:0.118299805177477 856:0.100679607805914 965:0.133994926316313 1008:0.174432351396965 1228:0.165182037641949 1327:0.174432351396965 1380:0.138166298026661 1448:0.168384728959419 1509:0.169517363879653 1591:0.159217129240407 1709:0.171083886698734 2018:0.212330305455283 2021:0.195805466733391 2134:0.18275546926106 3090:0.246056887803253 3096:0.225458700679365 4004:0.220543713162053 5620:0.243110697388139
++1 6:0.0372192344863808 15:0.0637582293121775 29:0.0675865018151923 34:0.148309344446536 60:0.0706244662172788 63:0.0201123269308213 75:0.0188577748982352 80:0.121169061929444 83:0.0241093473399518 134:0.0666406293582952 142:0.00241287239236119 158:0.0667856905400087 176:0.0482309027227543 204:0.111717037473814 229:0.0487280391396704 240:0.0837650211399388 327:0.078252553203683 345:0.0682835217279758 458:0.0979641535446413 478:0.0729691900359052 527:0.0887472303774632 1064:0.0862125050317985 1098:0.417521546568483 1140:0.0945087942897051 1294:0.105681595587715 2136:0.17289225033594 2569:0.139932521405372 2889:0.140578902747882 6483:0.149967173533379 7011:0.737726986468067 8700:0.206063853505696
++1 6:0.00911162166968955 11:0.0818891961874599 31:0.0347286230139049 60:0.069158157138464 63:0.0196947536852547 80:0.0593266715776362 96:0.112907019366617 142:0.00472555240425026 179:0.0496692288209174 208:0.136527460576143 276:0.0707827010370299 304:0.275972543530081 413:0.0787829240716744 427:0.0967902736872377 467:0.114370654263546 473:0.160445314390645 496:0.22921692023804 505:0.131083886926325 513:0.0681839833958784 574:0.068223825044955 609:0.0645242334684098 687:0.102525747212043 737:0.107368541126864 916:0.110408795981466 1374:0.121647206407074 1645:0.104149735510197 1808:0.27484436740886 2352:0.330252389163502 5508:0.697278182277092
++1 6:0.0116531793353832 15:0.0798496896063958 28:0.0860528435101629 31:0.0444156799659725 60:0.0884488444378742 63:0.0503766519244193 75:0.0236171469712344 142:0.0181310347230503 158:0.0836412290193567 345:0.0855170865632724 404:0.0978597026750291 416:0.113374546483584 513:0.0872029387431794 530:0.0957961350533597 561:0.103265783169586 693:0.138561762558066 717:0.118092466217174 731:0.134292203023086 761:0.118496356226747 850:0.106822133939134 1118:0.450116234854073 1331:0.131732901430883 2935:0.185531418070416 3095:0.184447443056282 4556:0.206610270057012 6125:0.211185805138472 6644:0.471815867462812 8856:0.483475039526281
++1 6:0.0197686040793244 15:0.033864511440514 29:0.0358978580276813 31:0.0376736668548153 37:0.0935346715740777 67:0.0559117228469923 75:0.0200322167247499 111:0.0618141420672367 141:0.0902900194547197 142:0.0076894304265137 144:0.0587642447855836 176:0.0512346711839776 215:0.062969589188907 232:0.175467644825403 284:0.0600259012732842 303:0.176627933928974 317:0.0589125809273268 325:0.0887573674179571 437:0.0889067932705506 493:0.176481533172683 506:0.0552973112450646 609:0.0699959936441451 780:0.100280507100205 953:0.540033954347403 1009:0.0880949558929749 1056:0.0970608349510101 1430:0.148647367505455 1614:0.124904021825385 1822:0.140508313790914 2831:0.162501328075164 2937:0.186244673755235 4213:0.358258330091898 4259:0.171853651603307 4419:0.18365979270881 4705:0.158320650088856 5452:0.186244673755235 6732:0.218897287449833 7782:0.218897287449833 8046:0.229893794591958
++1 6:0.0328259896324698 29:0.0397391982666423 58:0.0733997660606516 80:0.142488847520581 96:0.135588181830495 108:0.101290264905374 142:0.0113496762598351 159:0.0658265725735006 174:0.0802074908934027 199:0.306882098068337 256:0.074463606735129 330:0.108822405359602 365:0.115935109885469 436:0.193298378838813 446:0.135012792133997 485:0.227165673126443 537:0.24475107070866 902:0.3018314320751 963:0.0928362974366935 1078:0.138901772856155 1135:0.445868345886645 1237:0.134182614505313 1620:0.264660796137832 1967:0.350524295835883 2062:0.175262147917941 4737:0.200700439928527 4915:0.200700439928527
++1 6:0.0356623197189233 15:0.0305455820064665 26:0.115767263483116 29:0.0323796481802836 31:0.0339814168711537 63:0.038542019640996 68:0.0547324872982329 75:0.0361378737036859 84:0.0523251205275172 92:0.0588559974822569 102:0.169905248958112 142:0.0115596986188465 180:0.0687042614631744 192:0.144002001197796 252:0.386057768794758 256:0.06067322677575 275:0.0599536829409531 284:0.0541429954799707 289:0.077568719820197 345:0.0654271592901297 373:0.0636459705382323 381:0.0857028179867093 404:0.0748702114666481 426:0.0802610533606746 475:0.0722439293747498 505:0.128263542293374 561:0.0790062795188604 613:0.0824574467104009 644:0.084952624479056 659:0.130660057297107 671:0.0544477578759526 688:0.0989729349713018 723:0.0915024671411074 755:0.0930526606874158 764:0.0824574467104009 772:0.0826061567531249 814:0.0989729349713018 975:0.110470505298514 1189:0.121460819008486 1198:0.106205346040698 1250:0.120389287421933 1294:0.101260837367145 1411:0.112918819591739 1416:0.107615111277612 1713:0.146575203117837 2067:0.111179619490564 2335:0.131747468615924 2402:0.122966692920761 3851:0.173450255277695 5076:0.165660008688802 6786:0.571219575942401 6814:0.173450255277695 8402:0.207362795350573
++1 102:0.351150532621994 229:0.192991250119743 325:0.330921156637086 641:0.291602646792836 727:0.394553243222301 800:0.324987294990526 3096:0.619368841359815
++1 6:0.0148493396993718 28:0.0548274367279043 29:0.0269649534278638 32:0.0556577561504586 48:0.0454214502066472 63:0.0320968207822622 67:0.0419985226271216 75:0.0451420631244815 81:0.0904113290171637 142:0.0192532502615108 159:0.044666489038112 179:0.0809466501249892 180:0.0572151741839601 295:0.126081324145624 345:0.0544860862401228 346:0.185574089714079 365:0.0786675367162631 413:0.064196827110468 427:0.0788702442704653 467:0.093195742666117 499:0.165906985961725 531:0.167087671489703 598:0.0784668263132916 799:0.0749029294058128 867:0.0652652636183769 963:0.0629938837718596 1035:0.0906822725123733 1045:0.038569675116839 1134:0.0903216977699675 1389:0.094689643043206 1448:0.279587227998351 1471:0.0859914085908399 1627:0.0991250930351561 2134:0.303448509659994 2448:0.109715965278169 6710:0.164426388811804 9711:0.747229014653205
++1 6:0.0333645265707916 15:0.0285774702965906 31:0.0317919275876254 40:0.0521169934324286 63:0.0360586817834408 75:0.0169047198401784 83:0.021612399369004 142:0.00865190766632479 154:0.0602966531843804 158:0.119737709671925 179:0.0454691372409312 196:0.310258000868274 198:0.0726276761994567 204:0.0500733843218768 209:0.0523975266110909 232:0.0740365237044529 237:0.0716797422417141 240:0.075089676402374 243:0.0786493737035356 317:0.049714951137078 331:0.0652051986767439 409:0.0425984527884495 480:0.0613502659568265 519:0.29919441987263 530:0.0685691132303734 553:0.319883274257595 608:0.0910169063337788 631:0.111960905677265 781:0.180779676941218 936:0.0976009551089628 1008:0.325378977416248 1020:0.106627758085865 1394:0.324566427864116 1599:0.101072491284041 2112:0.13443542875477 2264:0.113295794277403 2934:0.145023282933846 2935:0.265599959880969 3666:0.119435430151518 3787:0.152994819860845 6094:0.337717128378133 6763:0.173031274752739 7130:0.184722308517288
++1 6:0.0130896923114662 15:0.089692935981872 26:0.0566557969561112 28:0.193321532545992 31:0.0498908982541641 33:0.072434097888241 108:0.242343048895642 142:0.00678869571364159 158:0.187903733548824 231:0.140327810027765 284:0.0794917613032177 408:0.0770777389387947 499:0.0974980006980196 592:0.386823299645813 667:0.126076734548484 674:0.173330227631288 731:0.150846697438501 977:0.359943696987834 1056:0.128536790954452 1595:0.327886242429576 2152:0.210968783798118 2619:0.225531359325826 2862:0.221747259445902 5003:0.234557500588928 5167:0.250426246621601 6259:0.271537034037452
++1 6:0.0170518746123896 15:0.03894750825274 26:0.0738052142688144 27:0.033100646188589 31:0.0433284104309708 49:0.10268535340642 63:0.0368575959952368 64:0.0492984268672932 68:0.0348936550020496 75:0.057597533008735 94:0.0341218716856053 96:0.0352164961571873 97:0.0709340712206508 134:0.0814165164214893 142:0.0250568634555524 166:0.0424104529798922 176:0.0589248949381596 198:0.0494912073881702 209:0.0714112578520325 226:0.0440728033120376 317:0.0677552438896916 547:0.0713460284216493 582:0.143824258713362 867:0.0499638419079424 883:0.0662795777434687 2057:0.0899661394557997 2277:0.326228978912078 2436:0.110579907225826 3989:0.0955287511283448 4069:0.0979328459085073 4317:0.098824273987248 4635:0.858062090474296 5391:0.11266242884919
++1 6:0.00921789546244037 15:0.0315813423236853 29:0.03347759925758 100:0.0569612587218073 111:0.0576465892472563 218:0.104574827284345 292:0.0908972667559488 331:0.0720591318728392 448:0.0834778478174873 531:0.103721560691336 679:0.115961397395332 749:0.214608435001241 882:0.0692220574590123 1011:0.110629212861609 1133:0.322464485307125 1229:0.104041719718554 1614:0.232965810110779 1618:0.141290259627095 1639:0.124471529053587 1651:0.126345884591171 1911:0.124835452244822 2216:0.125579394860118 2257:0.132981660711841 2280:0.125204688370733 2322:0.291803155083138 2949:0.274782891766629 3081:0.169076609287995 3393:0.176352729115499 3797:0.326865624571542 4385:0.152621801905722 5531:0.342554641298908 5886:0.196862958948895 6548:0.214394193693096 6809:0.186607844032197
++1 6:0.0548943898836143 15:0.0626910457536369 17:0.299125714978392 26:0.158398701984834 28:0.270244895193385 29:0.0664552407325909 31:0.0697426737323884 63:0.0395513746675334 75:0.111252803759836 83:0.04741161144168 94:0.10984712065073 134:0.131050400527799 142:0.0237248579797544 158:0.131335666830768 176:0.0948472302932635 186:0.103835301300506 192:0.147773187687096 414:0.270399258741857 731:0.21086916393981 850:0.167734935960051 1007:0.633657114204782 6763:0.379582637992568
++1 6:0.011289070628054 15:0.0386773754891823 26:0.0488622099058788 63:0.0244013056528217 67:0.127715924831744 102:0.10756856932935 142:0.00585484085951622 153:0.195826008133719 337:0.0863068172687701 345:0.0828450676277561 829:0.167494179670608 844:0.123704881635961 867:0.198469207510309 886:0.0972355132103057 975:0.139879777475047 1001:0.132325574286449 1074:0.295076216763227 1557:0.166124958051158 1689:0.180821366401062 1709:0.143973818324757 1751:0.15379591402188 1959:0.179734407412779 2163:0.142655527770877 3719:0.18829139792737 5563:0.234184324767963 5564:0.234184324767963 7077:0.629285212988404
++1 6:0.027593689829252 29:0.0334049673234596 31:0.0175287284448778 98:0.0596638332246894 100:0.0284188386936717 111:0.0862822815622365 140:0.0324983576242823 216:0.0400124877282341 218:0.0260869862666377 219:0.115360114376688 242:0.0322251415144661 252:0.066380416281614 274:0.198805839500102 277:0.0832967369350568 306:0.0721766203491653 398:0.0715422549383538 399:0.0433639486064256 405:0.0437369415580906 419:0.111893141988051 426:0.124203844800838 431:0.051280853036785 448:0.0832967369350568 463:0.169537577285356 479:0.0582472276669532 506:0.0257286224959739 564:0.398890148436664 657:0.0477659259942205 685:0.0972069829819374 712:0.0422319950789891 713:0.0459872242075963 715:0.0567462116274129 729:0.148501883698165 800:0.0405563424787352 836:0.0521514517359298 876:0.0443841950265465 914:0.058929484420293 966:0.0459370504790311 1003:0.0486034914909687 1116:0.0536274794367249 1156:0.128947419986666 1159:0.0935296026807405 1227:0.0502531838657975 1237:0.0563972859096268 1294:0.104467316771383 1356:0.0982179256685858 1430:0.0691623501659767 1614:0.0581150937254844 1880:0.0642580008755 1979:0.0679596618771062 2194:0.280584486427061 2292:0.161449452266912 2977:0.0815391168282646 3441:0.182312630589949 3557:0.0772932826545676 3707:0.0866555497011064 3880:0.333379440100539 4004:0.151216586521228 5222:0.080724726133456 5637:0.0954021494686713 6441:0.273468945884923 6466:0.392871702674343 7524:0.101848092563309
++1 6:0.020812213544704 15:0.035652261578964 26:0.0600539985579896 28:0.0256146141712093 29:0.0251953007260626 31:0.0264416713980157 33:0.0191946695829706 37:0.0164120807486978 54:0.0259721204988769 59:0.0430775933789529 63:0.0224927808828696 75:0.0210897426331346 84:0.0203576508904292 85:0.0212571936941735 94:0.0208232729892882 97:0.0216441750745512 100:0.0428691445939345 107:0.132721395408958 134:0.0248426927294957 136:0.0439322811879444 142:0.00719588011291202 144:0.0206221610516572 150:0.121000237959978 155:0.0360268836137451 172:0.0544037829245539 180:0.0267301318267682 185:0.0403981839662362 198:0.0302025906289339 199:0.0162140218506605 226:0.026895945897274 262:0.0324634726407281 274:0.0374867371055975 286:0.0194360134030964 296:0.0312793010694287 306:0.0272191802715964 309:0.0255272971650648 325:0.0311476601476423 342:0.0324036140351572 355:0.0208764434455272 372:0.0342408418284333 382:0.0304666488171191 389:0.0295617485398524 415:0.0301789446865515 436:0.030638582288614 437:0.0312000982247197 459:0.0316855143692628 475:0.0281072776963895 493:0.0928991076038627 505:0.0249511552926584 538:0.0303939033400633 571:0.0547524185645555 574:0.0259721204988769 591:0.0364737960857689 678:0.0375377693292752 696:0.0382825335892021 713:0.0346853188703332 714:0.0717936040820198 780:0.0703829607717379 799:0.034993604507627 801:0.041949816805245 840:0.0876652414569852 867:0.0304910213961573 880:0.122405224530284 882:0.0260483217619272 886:0.0298767768658296 953:0.189514341936162 987:0.028318572663091 1134:0.0421970381571535 1138:0.0342047222901553 1154:0.0471146355439348 1213:0.0441347885492145 1215:0.0406586187090744 1227:0.0379028683872324 1322:0.0389708445393442 1339:0.0418688164277079 1430:0.260824414896114 1545:0.0443416985875209 1599:0.0420315124734946 1614:0.0438326207284926 1620:0.041949816805245 1639:0.0468387470410961 1651:0.0475440686962371 1688:0.0467037449631909 2021:0.101260030989903 2171:0.0479937974094157 2215:0.058761902199162 2934:0.0603086739838134 2952:0.0542886488086331 4213:0.691480602620786 4224:0.0687535705303244 4259:0.0603086739838134 4311:0.0608856680285724 4419:0.0644518080301136 4705:0.0555595320904458 4740:0.285133295841856 5452:0.0653589214191013 5977:0.0719559406390406 6395:0.0702206976082498 6634:0.0653589214191013 7634:0.074079706468451 7846:0.0806767256883903 8046:0.322706902753561
++1 6:0.0425843190006064 102:0.405767172664904 252:0.307327309956132 505:0.306318581865583 764:0.393849221516343 1713:0.700100863470929
++1 6:0.0323177514422314 28:0.178987703318085 29:0.0293429431939628 31:0.0307944910132714 83:0.0209343342365651 98:0.104817493284398 112:0.0899563146243971 142:0.00419023181504095 158:0.115981071430127 226:0.0626470960749625 408:0.0475752055411405 411:0.0605306702787128 489:0.0920558483426158 513:0.0604599572834412 576:0.0790908422709431 628:0.0877949216222771 643:0.0657356714467889 709:0.0704596295062851 795:0.0957191843621102 1305:0.0734832501236071 2074:0.138007631717657 2265:0.140473337790305 2547:0.383645942061614 2992:0.123840184303521 3366:0.129411449518973 5041:0.148194776560693 6412:0.187915405709015 7667:0.178926850342994 7907:0.751661622836062
++1 28:0.227653803142089 31:0.11750220040319 158:0.221273848823906 423:0.23357335187211 1305:0.280389228663681 2547:0.487957866106276 7907:0.717026745171776
++1 6:0.0345418324353952 15:0.0394478124670477 26:0.149506573446153 27:0.0335258439362085 29:0.041816400450134 31:0.0438849899738058 41:0.106035015984691 47:0.0544964067117136 63:0.0746621080543207 67:0.260519944184286 75:0.0233349632120132 88:0.0879194621993516 142:0.0238858672626535 153:0.199726779475771 158:0.0826418620568988 174:0.0844000056517093 229:0.060296986619782 232:0.102198650632622 252:0.0830951290088283 255:0.107166261749913 286:0.129031064713957 291:0.0926743903392493 317:0.0686256008285614 351:0.0817106571582515 355:0.0692968683790873 373:0.082195006451143 409:0.0588021178762497 441:0.0811906097837698 475:0.0932987617408781 477:0.123109334964933 480:0.0846867746217946 499:0.0857611093971749 509:0.106874190351142 531:0.129557149059897 541:0.118729192125444 772:0.106680965500378 912:0.109499970165983 1001:0.134961443816326 1243:0.30659201965741 1500:0.131397989997344 1706:0.173155118076215 1751:0.156859463647687 1822:0.163674164389508 2022:0.496439767226188 2291:0.195053137907576 2484:0.184423251619527 4960:0.208662502706526 7224:0.228219291282249
++1 6:0.0342596931025261 11:0.205268892227137 28:0.0843301764668424 29:0.0414748420991677 80:0.223068256642555 118:0.0747790496972331 158:0.0819668393906461 229:0.0598044779605861 245:0.132042092722101 294:0.109132205426985 341:0.095417010086849 409:0.058321819376165 413:0.0987412522256733 427:0.1213104608614 467:0.143344535036272 486:0.340423964092742 952:0.106388082753275 1225:0.101865243774374 1725:0.164748772385759 2709:0.17096705757854 5419:0.413916274887911 6703:0.252904516640442 7272:0.215179090347199 8727:0.252904516640442 8730:0.505809033280883
++1 6:0.0461617440397586 15:0.052718101317818 28:0.227254109325516 29:0.0558834849845756 31:0.0586479503699502 42:0.0920600966320808 63:0.033259508625457 75:0.0311848713001786 138:0.129029998844574 142:0.0079802750245555 174:0.112792263269046 200:0.14864987734764 205:0.12175485459388 256:0.104714891854599 345:0.112919623258901 346:0.256395197907686 408:0.271820205654432 444:0.202140157631614 501:0.16001025084429 502:0.106211446671641 565:0.163666170492518 586:0.113111386516449 1124:0.171067767180018 1202:0.190659169294097 1734:0.425803317220573 3122:0.319198311778296 3135:0.258609323506307 3691:0.2358529965541 7320:0.328619388917165
++1 6:0.0354491826221944 15:0.0404840336946777 18:0.0632528279382443 26:0.0511446117324914 27:0.0344065059802681 28:0.0436290514510556 31:0.0450377676651714 33:0.032694040254673 42:0.0353480489701247 63:0.0255411146115449 64:0.102486616675905 75:0.0119739648139975 80:0.076937713591227 81:0.0359725053810566 83:0.0153085121810445 103:0.0562422931257934 107:0.113031345119026 118:0.116063044454238 134:0.0423142473290184 142:0.0153208155695521 150:0.103049094791355 158:0.0424063556236125 159:0.0355434553333767 174:0.0433085190146984 176:0.0306247760017353 180:0.0455290987000063 185:0.0688097206934784 208:0.0442638630308077 239:0.050090380706722 252:0.0426389423427103 255:0.0549906608286614 286:0.03310511816025 312:0.0535508675274145 355:0.0711171692153548 387:0.0417058403613705 405:0.0561881661431658 499:0.0440069477290842 507:0.0315908244570527 530:0.0485689296782122 561:0.0523560638238215 586:0.0434310518447668 617:0.0828283688780602 723:0.0606370663047525 781:0.0640250034086677 782:0.0673170715516649 847:0.441043225154041 1007:0.340997607844849 1033:0.070774213292694 1359:0.0655876131839799 1497:0.0717321046753701 1613:0.0677522927579091 1720:0.0768242333823761 1861:0.229884831709086 1877:0.0958352205715237 1951:0.0736767670798443 3105:0.647284228204255 3167:0.091486388729148 6389:0.119606034602031 7223:0.1113250321211
++1 6:0.0281130096027786 26:0.0608404279482189 29:0.0510504850722811 63:0.0303831095906767 73:0.152744505078219 80:0.0915232956451212 117:0.290240139439941 142:0.0145802256651035 174:0.103037592481474 185:0.0818544263447615 259:0.170998496105102 263:0.201273012979063 268:0.135254686045145 317:0.335119252060211 345:0.103153937932418 565:0.448535236977714 592:0.138464766509386 1229:0.158654753541919 1401:0.264859282968968 1482:0.333062076296029 1495:0.211392005896829 1720:0.182776604512114 1776:0.162800322735765 3087:0.242189240189423 4720:0.240103949228675
++1 6:0.0311701909207761 26:0.269826358919647 29:0.0566020283414964 31:0.118804077803195 63:0.0336871555229952 67:0.176317869370757 142:0.0363729801312275 153:0.13517352893543 237:0.267861885716934 291:0.125442611321087 592:0.153522275589864 723:0.159953104172129 764:0.144141737108543 858:0.156357486254049 1005:0.16429220839674 1557:0.229343354726318 6930:0.690293580110435 6956:0.345146790055218
++1 6:0.0194819125842237 15:0.0333733959638328 26:0.0421615442679893 27:0.0425449927916556 29:0.0353772542183494 63:0.0421101186565204 67:0.192853047386988 84:0.0285846078468962 88:0.0371905416473628 107:0.0465892290455956 117:0.150849191483655 134:0.0348821498784727 142:0.0151558310127205 178:0.0393069290237476 211:0.0484387967923667 215:0.0310281906380484 256:0.0331450816874575 286:0.0272905171733602 345:0.0357421000083745 373:0.0347690572048226 394:0.0907470181650418 402:0.037123218056543 423:0.0369012245047171 456:0.0527796169338759 457:0.0335843833382165 475:0.0394660226231126 477:0.0520761016350512 485:0.0337051665123912 502:0.0336187815670264 507:0.0260421948410679 535:0.0461862727532764 561:0.0431602162540886 571:0.076879028025416 594:0.0466347613026388 658:0.0900910979090292 714:0.0504034583765426 800:0.0859017177980623 856:0.0365535312792292 997:0.0463192460346169 1011:0.0584533818758657 1018:0.105704098227967 1080:0.0492457040996402 1190:0.0527075752256385 1309:0.0574946175306357 1389:0.0621150632198522 1880:0.0680519040932877 1931:0.0634908294612811 2202:0.0682803490495395 2227:0.0644935775143918 2322:0.0770903128362411 2433:0.0663526399006489 2526:0.218747489542844 2786:0.166388594323163 3277:0.279539548909235 3851:0.0947538673217117 7838:0.792959268734148 9103:0.122542909639319
++1 6:0.045663369960795 15:0.0260744715584492 26:0.0329406089828963 27:0.0443202605933043 28:0.0562001538563202 29:0.0552801524862524 31:0.0580147719912574 63:0.0658008608067503 67:0.0430500416259857 68:0.0467210178898813 75:0.0462722870955663 80:0.0495531211127882 83:0.0197194463613588 96:0.0471532875212481 102:0.0725176816184359 142:0.0217088242795508 153:0.198025057862914 158:0.0546251552868722 176:0.0394488778891667 192:0.0614618520576366 219:0.0636344953513975 228:0.0575585418949568 229:0.119566482728873 237:0.130803138346471 317:0.0453605958120123 325:0.068340021866479 330:0.0756899915523619 339:0.0591957885171335 351:0.0540096414186405 355:0.0458042946018735 390:0.0695201095228966 408:0.0896285215663082 409:0.0388674061818161 414:0.0562322553143985 490:0.0787599525868391 499:0.226747742695812 507:0.0406932797272952 508:0.0590482119709863 531:0.085635526714642 587:0.0963903241141432 716:0.0728710232868416 801:0.092040666431319 851:0.0864387793742291 867:0.0668993131126865 993:0.0836333240979821 1001:0.178415385198641 1159:0.0773886507372651 1294:0.0864387793742291 1581:0.108576742338744 1679:0.32938054004998 1751:0.103681988119665 2022:0.656279969989988 2042:0.097752676324336 2282:0.110215386170407 2291:0.128927491252039 2629:0.126008983158561 4295:0.145601924466914 4960:0.137923097679524 7544:0.157876082292728
++1 28:0.380354984569009 63:0.111332815301379 75:0.10438817830287 142:0.0133565786459486 158:0.369695608829396 499:0.383649457591405 2022:0.74026890417614
++1 6:0.0189184443926817 11:0.0425065992804398 15:0.0324081495082777 28:0.0698515781798709 29:0.0343540509075883 31:0.0721069801996453 64:0.0820422594467637 80:0.0615899330509977 128:0.203355562629511 159:0.0569062669580922 199:0.0884319402464043 205:0.074848096429896 245:0.109371863658297 255:0.0880418967702096 256:0.064372877363472 304:0.0716251646516541 346:0.157617472922689 505:0.0680423122110584 685:0.0999687743921044 856:0.0709926138794247 1472:0.0961869143815676 2227:0.125256506989891 3188:0.161576198213122 3360:0.132611003259779 8239:0.196225325880705 9179:0.713991876836433 9185:0.475994584557622
++1 6:0.049648966738278 15:0.024300263407161 26:0.030699202217093 30:0.0852663122008954 31:0.0270336109733567 33:0.0392487466058663 38:0.0577862730717111 41:0.0326593372061243 75:0.0431237412560208 81:0.043184498993741 85:0.0869322814074006 111:0.0443561672862192 137:0.0580645775438163 142:0.00735697152631496 144:0.0421676429533305 179:0.0386637445646407 185:0.0413025626456913 204:0.170315485042045 205:0.056122564428015 229:0.0371435718708795 242:0.049699094945932 255:0.0660155335878005 265:0.0670042466416456 278:0.0612320866497245 284:0.0430729737458427 289:0.0617090983366438 303:0.190115188598373 309:0.0521975339889765 325:0.0636899017832042 355:0.042687592786288 377:0.0545899507941109 408:0.125294774122657 426:0.0638509601024366 437:0.127594251519348 441:0.10002852277711 478:0.0556216995863472 495:0.0781662817256832 507:0.0379243511822631 582:0.1196471020566 609:0.100454488232409 631:0.0476018253369758 643:0.0577074830754315 710:0.081736971629444 732:0.0776117968535816 757:0.0673883598182286 780:0.0719585971709405 781:0.0768611378603582 827:0.0605833231579569 873:0.0820091593180862 953:0.15500554156825 974:0.0911012051811489 989:0.08577786259016 1009:0.0632145730731095 1111:0.176140100639356 1126:0.0756380483654086 1149:0.0680458920412057 1150:0.0773943521053926 1169:0.319725347218988 1227:0.0775027707841249 1237:0.173956974920168 1431:0.0828493373798469 1614:0.0896277696579866 1620:0.17155572518032 1797:0.123317562362549 1822:0.201649980512072 1827:0.0954985676456535 1858:0.0913211069841355 2067:0.0884479476788716 2081:0.124497384341664 2254:0.114314398583603 2838:0.106665356490045 3744:0.400932519435539 4213:0.25707655060476 4259:0.123317562362549 4419:0.131789331966838 4705:0.113606644132758 5452:0.13364417314518 7779:0.143585402968256 8046:0.164965609324366
++1 4:0.026225924473733 6:0.0181892489349142 15:0.0415453396830037 26:0.209941557050036 27:0.0706169740414704 29:0.0220199353572842 30:0.07288846718549 51:0.0411785585183565 57:0.0452655676983 63:0.104842742738717 64:0.105173346482073 67:0.102889636634235 75:0.12287867343003 83:0.0157098312732238 92:0.0400253039419043 97:0.0378327165994372 134:0.0434235331383447 142:0.0597453373609165 153:0.105173346482073 158:0.0870361121813239 174:0.0444438700748837 176:0.0314276173985908 192:0.0489646264845126 199:0.0850234058124535 205:0.0479754265206038 218:0.0343921157410809 221:0.0577167085198166 229:0.0635031104214699 265:0.114554897627595 286:0.0679459655421822 291:0.0488010460627645 303:0.0541722529016574 308:0.0447983795748499 317:0.0361372877108764 322:0.157637546079911 327:0.0509899496736557 346:0.0505140801920608 363:0.0566395689540997 373:0.0432827481385938 377:0.0466652976352398 387:0.0427991765258819 391:0.0627454515483208 408:0.0357020406474074 437:0.0545358956830052 480:0.0445948786293212 508:0.0470417591878999 527:0.0578283599110756 541:0.0625211426015145 579:0.142386871079462 732:0.0663451339943114 743:0.153934059705083 1045:0.0314965036040684 1057:0.165200027382523 1193:0.0739044590458954 1241:0.0756082345490212 1376:0.0868163883005148 1591:0.0719613870288865 1607:0.0784467597720597 1767:0.0920343938350925 2410:0.0847153665361098 2581:0.28314413000865 2976:0.081871313486188 3050:0.0943813766695501 3277:0.231992483411109 3552:0.106424486752594 5179:0.101126692120929 5229:0.115996241705555 7170:0.647434363041557 7341:0.114243464709408 7664:0.125774657637267
++1 26:0.149686330296799 63:0.0747518768524216 111:0.216276366406951 142:0.00896796977071743 322:0.299717516579412 2581:0.538344179991304 7170:0.738583253537661
++1 6:0.0185684472431948 27:0.0540668650608559 29:0.0337184902007242 31:0.0353864892353714 37:0.0878561585615086 53:0.0715011039639436 56:0.0857129951890861 63:0.0200678324907244 64:0.161048903877005 75:0.0188160558998091 80:0.0604504999899329 83:0.0481120206073627 132:0.0563090342810332 142:0.012037672010292 160:0.0841505827460929 299:0.0768582150127175 325:0.0833688857206104 330:0.0923352097874877 337:0.070979429396105 351:0.0658870673474337 369:0.083021346662991 398:0.0722137159638078 434:0.160674739877467 501:0.0965455908234389 506:0.0519401978219796 507:0.0496422637061778 539:0.0862558453340445 733:0.104790360856065 890:0.0975024814545307 1007:0.107169682733815 1014:0.227706414303925 1149:0.0890707951890151 1194:0.142306925835349 1411:0.117587815984974 1433:0.0895123004830511 1455:0.12327222341366 1485:0.115776702990723 1486:0.126866090353816 1527:0.120722675591376 2340:0.128872971595372 2692:0.606383695732675 2771:0.133938541682405 4111:0.157280331361855 5357:0.157280331361855 5978:0.162964738790541 8373:0.411215958130471
++1 6:0.0540068839774506 10:0.0828221394479051 27:0.0142959175957448 28:0.0362557781765169 29:0.0891556698950303 31:0.0374264225264162 37:0.0696906174415876 38:0.0400008247943686 42:0.088122774606127 53:0.075622944968072 63:0.0318370313451347 75:0.0298511242681997 80:0.095902956330641 81:0.0298931820008109 83:0.0127213864016984 96:0.0304194742426251 132:0.0595550944610197 142:0.00509264421112751 172:0.0385024633299577 185:0.0857714030059601 190:0.042095674521864 199:0.0229498666518072 229:0.0257115302937133 242:0.103208150501618 243:0.0925884309327716 299:0.081288878660978 314:0.0391793069553059 327:0.0825804989398357 337:0.0375355986516907 369:0.0878072978151025 387:0.0346575881555291 411:0.0367833071292193 414:0.181382437159896 422:0.179082549783755 432:0.0461209478942001 462:0.060331291965836 473:0.0864545381825776 478:0.0770049266599154 493:0.0876616610494119 495:0.0541082782109195 509:0.0455727414730862 574:0.036761804542012 586:0.0721824806768093 609:0.0695366247033444 641:0.0388491720846883 644:0.0467825227908628 658:0.045408454461071 667:0.0472891980609762 719:0.21138229403363 727:0.105129819712539 730:0.0471956465181704 731:0.0565799818464544 733:0.221662471007408 796:0.129474022219362 799:0.0495311135332783 856:0.0368480215916619 882:0.0368696623481635 890:0.206246459998847 908:0.0522221084581327 965:0.196164766457766 966:0.0490411916144414 1018:0.0532778470030405 1031:0.120662583931672 1055:0.107147865888483 1068:0.0578545884852674 1098:0.110153395072017 1149:0.0471027401635506 1156:0.137660887362382 1169:0.0553300849691166 1184:0.0646677257340974 1227:0.053648982542388 1296:0.0499820800954697 1308:0.114699967750063 1377:0.0468278047428267 1395:0.0524267407678664 1412:0.0616276152005264 1437:0.0670897848932453 1558:0.0591488344079991 1583:0.145723309693384 1614:0.0620421515391733 1654:0.0693031717648601 1781:0.0623257697626633 1862:0.0690647342478629 1949:0.0610940259240855 1951:0.0612254549472931 2056:0.064002337749272 2102:0.13720031655645 2108:0.0738359130946602 2154:0.0670897848932453 2248:0.128996544659359 2537:0.221507739283981 2741:0.076841961996873 2771:0.0708298641924474 2868:0.0781680844461718 2924:0.152050530809986 2985:0.0879784532948215 3353:0.108730355364077 3388:0.0853629061699735 3999:0.0853629061699735 4803:0.0825162836021026 4822:0.177953578122617 5376:0.182454472231851 5677:0.0912272361159257 5678:0.182454472231851 6109:0.277533583873865 6640:0.0955172435268345 8876:0.104854884291815 9644:0.114192525056796
++1 6:0.0214410822296005 26:0.139204372312339 27:0.0624312891909359 29:0.0389349153207557 64:0.185964003655687 94:0.0643574275499919 97:0.0668945477474329 134:0.0767800430944587 142:0.0333599093617554 192:0.0865776195503807 198:0.0933456061025359 204:0.193072282649976 226:0.0831259279154982 240:0.0965099218729419 265:0.101276074755433 317:0.0638967469302455 409:0.0547501806838455 441:0.151191852131857 856:0.0804589658794489 867:0.0942370443607924 1057:0.146050589449104 4911:0.181612413448533 5710:0.194283983940313 9470:0.809197533621675 9591:0.228954369681486
++1 6:0.0215307136324505 15:0.073766169346386 26:0.186381728592925 27:0.0626922743395395 41:0.0495705367205553 63:0.0232692992000247 64:0.186741399794034 94:0.0646264646467835 97:0.0671741909153201 134:0.154202022346779 142:0.039082593352541 176:0.0558015643840385 192:0.0869395450079025 198:0.0937358241678023 204:0.129252929293567 226:0.0834734240657618 265:0.101699445019968 317:0.0641638582170536 337:0.164605876636493 387:0.151984859316756 441:0.151823888223177 599:0.100939578619071 1685:0.154147551814032 2270:0.158418217798806 4716:0.715227255109804 6333:0.426762901058237
++1 6:0.0143294661969935 12:0.0321993435908601 27:0.0139079896328054 29:0.017347275882102 31:0.0364108349816823 60:0.0362540467872517 63:0.0103243717171218 65:0.0341719273736002 67:0.0540375462247626 110:0.0921952556905874 132:0.0289695163251064 142:0.00371583928161125 172:0.0374576767978791 174:0.0350128219246684 179:0.026037572718356 215:0.0304294154542666 218:0.027094063186355 232:0.0847929600930999 274:0.0516201634234077 275:0.0321199622779741 285:0.0509374145408039 394:0.0444979011053545 422:0.0435557603967684 426:0.0859991206503302 442:0.0406464423595022 448:0.043256185874983 478:0.0374576767978791 591:0.0502253186057717 643:0.038862319309444 647:0.0862911752526325 655:0.0361675394455089 663:0.0894060082255325 674:0.0632489946710218 719:0.05141157841546 856:0.0358481292896347 890:0.0501624608608646 966:0.0477104306167163 1064:0.04425594073098 1113:0.0579919023882579 1319:0.0504157211995483 1377:0.0455571052734751 1446:0.0498526162952918 1468:0.0669626899237543 1476:0.0614989569839741 1816:0.0524893756914199 2082:0.0830465345149662 2220:0.266255197464368 2815:0.0721641435397539 4720:0.571121823666962 4911:0.485499549248011 5658:0.0966956360067491 6365:0.408038346307662 6483:0.0769834763650335 6598:0.0887517324881226 8737:0.105779894508132 8745:0.211559789016264
++1 6:0.0300896153862648 15:0.103089739710509 29:0.0728530780024998 42:0.120015088584862 68:0.0615730928299119 81:0.0610676337974944 142:0.00260089183327512 144:0.0596296874568513 159:0.0603392699842162 179:0.164024368650581 186:0.170747736860178 200:0.0968944681282738 204:0.0602112095366538 229:0.0525250980744396 255:0.0933532291452609 256:0.0682563210437938 319:0.0909870790459553 365:0.106270760006806 582:0.0845970844119651 856:0.0752754085751302 1627:0.133906556787022 2252:0.66426316615891 2419:0.456744452074158 3084:0.177829110893119 3374:0.168569347659499 3545:0.186364618103679 3778:0.167289110292134 7615:0.21420401734541
++1 6:0.0146324807730944 15:0.0250661002949527 26:0.0633334107417059 29:0.132855793782297 48:0.0895162357775341 52:0.0596482012442684 63:0.0158140403035489 67:0.0413851785521296 80:0.0476367661356723 88:0.111732332899735 134:0.0523985912794085 142:0.00379441537434895 199:0.0341988653645197 238:0.0721451286550571 252:0.105601335409776 275:0.0983975377736511 289:0.190961689027813 308:0.0540575999157825 345:0.0536903744846978 386:0.058268649608102 543:0.0809809025782418 561:0.0648335764540867 574:0.0547807977781893 655:0.0553985212991654 671:0.134041606357181 686:0.0865211649897971 719:0.0787481113047143 726:0.0674237854260676 867:0.0643121333595217 895:0.152161511724548 1010:0.244376663366474 1190:0.0791752429594752 1380:0.150708000561372 1471:0.0847355948702556 2017:0.11002697703221 7001:0.54377099664065 7546:0.60708232633637 8132:0.145016093080003
++1 31:0.120399444013185 110:0.304861383469633 111:0.197548817473181 232:0.280384266292641 274:0.341384040172368 426:0.284372668661173 4720:0.539578398007015 4911:0.53513261302137
+-1 6:0.0183062608107803 29:0.0332423851965553 31:0.0348868320886654 41:0.126440468610733 142:0.00474708004366487 199:0.0427851817134672 205:0.0724260803898945 286:0.0512872976795075 291:0.0736724765486929 406:0.0858228056847119 441:0.0645433250045949 452:0.387603402093712 578:0.139609440231897 598:0.386935504626131 1191:0.457997591535886 1391:0.115664494603457 2205:0.534215211321496 3177:0.189875653552262 5286:0.212887857215063 5287:0.212887857215063
+-1 6:0.0100433974534919 11:0.135395065928861 12:0.13540942878629 13:0.0667503977524845 17:0.109455208463285 37:0.0475200918856379 41:0.0462461775086819 48:0.061441880457304 74:0.247002205998832 83:0.0260230776931242 84:0.0589442286874982 101:0.390454269569589 142:0.0546923839014565 179:0.0547485205533018 181:0.169546605268697 215:0.0639831329687809 264:0.165355645269341 283:0.075288595682438 284:0.121984128281912 309:0.147825193581516 357:0.0929719164604766 366:0.379886633426438 458:0.105740265088339 475:0.0813827593977408 759:0.148413474079092 986:0.0898100278111452 1299:0.148413474079092 1363:0.113712403963416 1375:0.126066465380782 1715:0.166289737484338 2226:0.166289737484338 3218:0.552654429881721
+-1 6:0.0121488291364996 17:0.132400677348287 50:0.23063273260199 51:0.0825110382485217 82:0.0911249783213659 83:0.0314783842781907 84:0.0713009085046412 92:0.0802002183487549 101:0.354229897944179 142:0.0724584716512735 181:0.102544619369155 190:0.104163475363972 258:0.115206170586291 264:0.200019713491913 284:0.1475560773856 286:0.136145906107533 293:0.114986866023304 345:0.0891544224119052 400:0.428198275170244 404:0.102022012442365 408:0.0715375318467092 433:0.0982442944018393 455:0.0887042917009718 513:0.0909119796839278 517:0.135466258852574 521:0.11979907640442 538:0.106452013192131 622:0.134081257187332 725:0.353250889627506 759:0.17952589713696 944:0.132938259268295 1223:0.149286526840091 1371:0.181879875363386 1975:0.172699244686559 2423:0.156801374997028 5825:0.252019447994447
+-1 6:0.0126611809277721 10:0.0355969651971967 17:0.0229974004357598 33:0.0233542851092489 34:0.0336344270953768 53:0.162513752849334 59:0.026206400512487 70:0.0485560269305441 83:0.0328059201575819 98:0.027376352781258 111:0.0527867341884019 132:0.0255967865473717 142:0.0032832286141178 149:0.469897862826662 160:0.0765058229781865 179:0.023006189803239 199:0.0394554214576184 214:0.108474130096417 224:0.0401368090835999 244:0.310527208100039 256:0.0287210593789797 278:0.0728701797187154 299:0.0349379695320968 309:0.0310592361845273 359:0.0939795725653324 371:0.294843560312535 372:0.166644261102862 377:0.0324828022598556 409:0.0215536988305369 423:0.0319758530134532 426:0.0379934050303838 448:0.0764403067189496 470:0.328485164643501 502:0.0291315324167959 506:0.0236108143897842 507:0.0451324532213965 541:0.043519746258976 576:0.0413140732893001 608:0.0921043305186607 609:0.0298868494100231 643:0.0343378357075828 645:0.0536990975832809 656:0.0416610652757155 663:0.0394985280893037 670:0.0602106143492788 731:0.048636165597077 936:0.0493835210973142 969:0.0472009773841377 1012:0.0563455239002288 1045:0.0219241009978083 1068:0.0497318177612059 1083:0.0452446538259016 1113:0.05124028755778 1245:0.0412714213401684 1319:0.0445461511919772 1320:0.118736123348815 1322:0.0474160917637013 1332:0.155582377952983 1336:0.0748273621427012 1373:0.0489623841015681 1453:0.0593680616744077 1457:0.0558853312482444 1575:0.136915660915614 1593:0.128126688033525 1607:0.054605257326762 1636:0.0616018844108594 1720:0.0548777402772985 1824:0.0597816767529697 2017:0.0634693681243787 2049:0.392094767256968 2063:0.0709310166379759 2446:0.0680207977957381 2555:0.0569890222819068 2740:0.0611193149575201 3378:0.0689120059669708 3707:0.159045288970112 5404:0.0934646388411251 7790:0.0875492826653947
+-1 6:0.0297675233651316 9:0.0227715737124443 10:0.0502149127769451 17:0.0486619765441031 29:0.0108109841575997 34:0.189785821745262 37:0.0422532948258594 41:0.0137068574246166 42:0.0178095594165472 51:0.0202171685135068 53:0.320950379641811 57:0.0222237407753876 58:0.0199682867965487 59:0.129388344771748 67:0.0168383514541962 72:0.0185250311051445 79:0.0201868991793864 80:0.0581457883036626 83:0.00771295347863966 85:0.036484769403846 91:0.023785576616155 100:0.0183946065218211 101:0.0289315857662963 104:0.258654162166066 109:0.0982760244792018 111:0.0186159215986981 142:0.00463149140864624 144:0.0176974157878825 145:0.0499593828208687 148:0.0523332430673318 149:0.265144852267035 160:0.215846109717273 161:0.0290499598089219 162:0.0322442072266488 174:0.0218203172482539 175:0.028814902839361 186:0.0506759941722171 214:0.0255031992716781 220:0.0716400046557817 224:0.0283095252097023 244:0.350436540491147 252:0.021482961556182 278:0.0256986072994207 280:0.0311839256770534 284:0.0180773757367559 291:0.0239595315471401 299:0.0246426497727953 323:0.152788034843666 340:0.0681611091974363 344:0.0454033438838436 355:0.0179156344915666 359:0.132572426133517 371:0.0415921514149297 377:0.022910957060433 382:0.026145705604245 384:0.0322579926070324 404:0.0249978216420194 409:0.0304047578438285 412:0.0303388746002315 414:0.0219943684671002 429:0.033970919852265 433:0.0240721907950073 448:0.0269576585621214 454:0.0297012382033087 459:0.0271917051196101 470:0.417040284747464 475:0.0241209531247701 506:0.0333066310177763 507:0.015916540843912 508:0.0230957859355281 509:0.0276306704141193 543:0.0658972582163858 554:0.0377880010496066 557:0.0280154039843883 562:0.0522505366884449 563:0.0456271295530791 570:0.03453443058125 576:0.0291398799755814 580:0.0269346185864051 608:0.0324817782762679 609:0.0210799646541244 645:0.0378753565986219 656:0.0293846223607205 658:0.0275310634970109 664:0.0673011563358287 676:0.0297660612894034 712:0.0273354214253123 714:0.0308057254321565 716:0.0285023627059654 718:0.195755332483048 722:0.114703298117875 740:0.04262367637816 800:0.0262508250214558 824:0.033292065056682 827:0.0254263265538614 828:0.0451855265495287 839:0.047393167679209 856:0.0223408885904491 912:0.0566190504194045 928:0.047976820627959 936:0.0348314693511478 947:0.0362124283392831 1003:0.0629189750643915 1021:0.0318700094099938 1054:0.038903504399937 1055:0.0324817782762679 1068:0.0350771319589141 1080:0.0300981259633717 1084:0.0486054127050734 1123:0.0338091786070757 1304:0.0383267236989422 1319:0.0314195477656885 1336:0.158332997314917 1354:0.0852473527563199 1372:0.0415921514149297 1377:0.0283916129958937 1407:0.0362843906195593 1446:0.031068615536308 1525:0.0417317730366462 1527:0.0387066836478157 1607:0.0385144944047356 1621:0.0486054127050734 1664:0.0353304132144436 1811:0.047976820627959 1834:0.0465891420458821 1859:0.0468484548088675 2049:0.0553109076266305 2186:0.0468484548088675 2197:0.0512885241956419 2243:0.0447665800541964 2254:0.047976820627959 2261:0.0451855265495287 2410:0.0415921514149297 2456:0.0420183872154985 2463:0.048938833120762 2616:0.158096527627864 2621:0.0504279746967591 2723:0.0388045011759421 2789:0.0471162711290763 3147:0.0454033438838436 3235:0.0504279746967591 3367:0.0539464656632855 3429:0.053341176500624 3980:0.0553109076266305 4248:0.0553109076266305 5098:0.0692347206161331 5789:0.0602616224058875 6315:0.0692347206161331 6461:0.0635733259735703 7097:0.0659230170484502
+-1 6:0.0187948011801885 9:0.107832417372028 10:0.11889374667822 17:0.025603747271899 22:0.050107863358238 35:0.305927998835374 42:0.0562235433957604 48:0.0574899048195309 52:0.038307792797626 58:0.0315192479776237 59:0.0583528610115896 61:0.220690772514867 75:0.0190454282472022 83:0.048698517967027 84:0.0275764516945388 85:0.0287949713954679 87:0.043773221872684 91:0.037544707530189 99:0.133586863860851 123:0.0476703409515912 127:0.0934607986956393 141:0.0858423264180624 142:0.0341163597364497 151:0.0371076359317738 162:0.0254481812529427 167:0.262607072449826 173:0.0702405343840696 190:0.0402864298218988 199:0.0219634963162249 200:0.0453922119114801 215:0.0299338512839521 218:0.0266528175448285 223:0.0638214339255588 234:0.101120354034161 262:0.0439749846351328 296:0.0423709071160839 302:0.238588194930596 351:0.0333451234484496 378:0.19503703688923 390:0.0429211632090312 391:0.0972515377928717 414:0.034717347606685 434:0.0406583511147149 450:0.140066944768318 457:0.0647997782427344 459:0.0429211632090312 466:0.0434178198989495 478:0.0368476525089753 511:0.2437783321967 520:0.0697301083312988 529:0.16052020228688 533:0.0588493276765638 537:0.0525503697387853 567:0.0509879998058957 594:0.0449899907403558 607:0.0921835783249139 609:0.066547985819968 612:0.0546969056531789 613:0.0434568286348918 745:0.0638214339255588 749:0.0546969056531789 813:0.0656517681124565 942:0.060793793290543 966:0.0469334331091745 1018:0.0509879998058957 1025:0.057273651831389 1167:0.0600652165485086 1237:0.0576205528691203 1279:0.0720208411238979 1331:0.106232540494983 1351:0.0623874710619283 1544:0.0615660227369526 1580:0.329902638043373 1598:0.0491617878819886 1616:0.0873063488677718 1617:0.0873063488677718 1969:0.128412619185575 2516:0.274235923654797 2685:0.0873063488677718 2786:0.0802601011434401 3056:0.0931335116591433 7300:0.327853813899333 8915:0.104057195439638
+-1 6:0.0162377772800262 58:0.108924276194857 59:0.100827963187745 61:0.381331792499162 75:0.0329086133038505 142:0.00421069213840188 151:0.128236637753546 167:0.453759006410218 186:0.0921435414382097 219:0.135769580352479 254:0.156709887960752 256:0.11050300160058 400:0.28615877899774 414:0.119976274882828 471:0.169267343814977 484:0.358937916762309 530:0.133484284461379 599:0.152250819395587 684:0.151968834264774 1940:0.290968829770454 7765:0.377665941375044
+-1 6:0.0245255274199051 10:0.0344768134579874 12:0.0551106282176985 13:0.0543338286985395 19:0.09925575542054 33:0.0226193813628707 34:0.0325760317574742 42:0.0244555580729854 47:0.0193468762781221 57:0.0305169808202271 63:0.0265059414803627 75:0.0331367643085585 83:0.010591198653452 98:0.0265148841416913 137:0.0334631023081194 142:0.00741979752948586 145:0.034301370384578 146:0.256935166441194 161:0.0398905420683741 179:0.0445644795746681 181:0.0345021022992532 186:0.0231955900648402 228:0.0309143542998801 231:0.0438209122964693 252:0.0294997647964714 264:0.0336492575584181 287:0.0379416160222464 314:0.032618757890478 317:0.0243629092054723 328:0.0414703421765681 334:0.0558556447374997 347:0.0335790867579898 348:0.0406089236868155 368:0.0498246476055475 393:0.255899304912627 398:0.0635874196611565 429:0.0466478582545906 479:0.207082704505132 480:0.0300648180286152 496:0.0685530592589257 499:0.030446219725254 508:0.0317144473356687 557:0.0384699207349165 628:0.0444176272891281 641:0.032343903885833 643:0.0332573057754536 701:0.0587473519546159 709:0.035647273264905 776:0.0509732929665736 870:0.1344027044596 883:0.0476646010564164 886:0.0352073895776333 887:0.0516532342537155 895:0.085012728097265 903:0.0455111295899393 926:0.3623636160914 956:0.324760517613219 1023:0.0576984014397947 1084:0.0667435092170742 1215:0.0479129269869815 1228:0.0503322272689598 1276:0.149950822435685 1362:0.21741816965484 1419:0.068177236711941 1487:0.0614721382285943 1503:0.0553570917114757 1531:0.0558556447374997 1573:0.105514596750034 1682:0.0573048313614158 1849:0.0505418706877376 2058:0.061195195852963 2163:0.0516532342537155 2500:0.0650788903494581 2649:0.135357367371834 2855:0.067678683685917 3428:0.254382945578164 3744:0.231060768614037 3849:0.095071062180326 4519:0.0782019372194857 4833:0.380284248721304 5767:0.0872970031922837 6306:0.0872970031922837 6315:0.095071062180326 6324:0.0827494702058847 7072:0.0827494702058847 7345:0.090523529193927 7638:0.0872970031922837
+-1 6:0.03246751140424 17:0.123843389243732 26:0.0140528340164079 34:0.103499932733657 37:0.0153619244122521 41:0.0149501033153238 57:0.121197445319714 58:0.065338379481999 59:0.0201605982654488 61:0.495608553459283 69:0.0329396905804198 72:0.0202052972728899 80:0.0634197552043927 81:0.0197680901330679 84:0.0190550301925978 87:0.0302468234002876 96:0.0603483672577015 118:0.0425203397166006 142:0.00168385971387195 146:0.0291546214117039 149:0.180746341599399 151:0.076922926584776 159:0.0195323128380397 175:0.0314284858391975 176:0.0504880040376162 186:0.0184241440862238 190:0.0278374877635283 214:0.0278164025619856 215:0.0206839678401917 218:0.0184168089738349 240:0.116913389183543 242:0.0227502046177606 314:0.103635681370101 322:0.0281380437609039 324:0.0688014200547057 369:0.0290330848268845 377:0.024989037566793 389:0.0276701871942257 390:0.0296580600691087 398:0.025253588691502 403:0.0376033829868929 405:0.0308772692077994 414:0.0239893121196338 463:0.0398965361865033 485:0.0449369792988003 486:0.145177118385781 490:0.134399523872517 496:0.0272256803514645 499:0.120916419356192 500:0.0335998809681292 506:0.0181638124398543 521:0.0320160719660809 528:0.0339702642961458 534:0.0494940525126446 544:0.0526646464601816 546:0.0280511309398867 558:0.072085156999739 560:0.0386763767578237 572:0.0703677447397937 576:0.0317829392059399 580:0.0293776551510938 591:0.0682799100341905 594:0.0310875975422157 628:0.0705614095485803 631:0.0217901607217043 681:0.0355274932288395 685:0.0343129409085994 689:0.0405756071750483 726:0.0299208665459253 803:0.0405756071750483 814:0.0360425784998695 836:0.0368177187855968 856:0.0243672624757527 862:0.0312409316803535 872:0.0370521663554949 886:0.0279650578693998 900:0.0473903634118003 912:0.0926318076233982 925:0.239889747693418 951:0.0423241654675753 969:0.0363117377498947 971:0.0404878380562948 996:0.0361492683198798 1003:0.0343129409085994 1009:0.11574814179632 1020:0.0415044157070948 1088:0.041702390376535 1102:0.077785576103004 1149:0.0311486148594782 1164:0.0344449210039142 1168:0.0422174756475649 1215:0.0380570042811261 1216:0.0347606981366901 1284:0.045516948130578 1288:0.0426521225075897 1309:0.0383269792899077 1454:0.0621154174188308 1624:0.0822423912239834 1635:0.0508148925301682 1678:0.0550019168029806 1739:0.0523284369939235 1766:0.0569897896778637 1781:0.0412154662641048 1853:0.191111000994228 1863:0.0391145877281153 1924:0.0895605790360971 1995:0.0420078543644997 2076:0.0404878380562948 2101:0.0595526035483472 2118:0.0483923727952604 2248:0.0426521225075897 2275:0.255488628012571 2314:0.0537568484487653 2577:0.0933254704079805 2604:0.0483923727952604 2675:0.0537568484487653 2694:0.14274585390321 2722:0.0447802895180485 2730:0.0520044560724723 2810:0.131455001392085 2848:0.0595526035483472 2869:0.0693395839732546 2957:0.0513898335257688 3112:0.279702601355677 3275:0.0526646464601816 3318:0.0523284369939235 3582:0.0581793532201677 3742:0.0581793532201677 3744:0.0611768139506761 3778:0.0541528466863791 4248:0.0603277438340745 4677:0.0657275006960427 4785:0.0500165831975893 5052:0.0603277438340745 5252:0.0603277438340745 5308:0.143804795687476 5397:0.0631646868255591 5735:0.122353627901352 6199:0.0631646868255591 6901:0.0719023978437381 7124:0.0693395839732546 7410:0.0693395839732546 9905:0.07551448112095
+-1 6:0.0259661255150759 13:0.0575253282649434 41:0.0398548417951076 57:0.19385705532499 61:0.406529745057413 75:0.017541587719357 83:0.0224266242174621 142:0.00224446484034442 144:0.0514580172944363 149:0.0963687902023373 204:0.0519598474148982 273:0.501385080155136 275:0.0582039107796194 279:0.195994138942727 284:0.0525628105509585 297:0.169108311649252 355:0.0520925224652892 399:0.0816124077143235 402:0.0659720401620339 426:0.0779186024899226 450:0.129007159426657 464:0.121341687644452 665:0.32106381295908 682:0.134025490967162 739:0.0884188985865045 882:0.0649977947683898 883:0.302786152354652 990:0.116538810360891 1000:0.105085911475717 1243:0.115237182034779 1256:0.1478454132192 1416:0.104474321310833 1676:0.117564096438188 1703:0.13266804881453 1706:0.130165865923707 1897:0.115555962287595 2398:0.125835952794582 5721:0.165590837872478
+-1 21:0.0671368474305779 48:0.0339468972599474 61:0.0651572393822736 98:0.107984176307523 142:0.00143894152558765 243:0.0523222642442057 299:0.0459368211186463 331:0.0433783954608548 451:0.0630243177645674 491:0.794688634865848 529:0.189569380303704 576:0.0543201914647534 927:0.0712735161186072 2551:0.298302833391608 2552:0.0994342777972026 2617:0.0994342777972026 2839:0.109987788697015 3513:0.0906062525506427 4653:0.107954706767155 4664:0.122888320439438 4665:0.122888320439438 4667:0.122888320439438 4668:0.122888320439438 4670:0.122888320439438 4675:0.122888320439438 4676:0.122888320439438 5731:0.118508217666968 7095:0.122888320439438 7764:0.129061728566781
+-1 2:0.0908702377639976 6:0.0111298453315163 31:0.0424210109608808 41:0.102497746450634 142:0.0202029169396751 156:0.463475342601433 166:0.0830445554231523 205:0.0880672553548234 283:0.0834329646967483 351:0.0789848347920304 406:0.104357144592316 452:0.157103479873658 592:0.109635464639949 598:0.235249151329964 720:0.110810158212194 930:0.0974459338177224 1016:0.204146002546921 1482:0.131858148499409 2634:0.209713787012656 5276:0.713087155370856
+-1 6:0.0278818814140887 15:0.0238814609352713 29:0.0253153894056289 42:0.041703504990861 57:0.0520399108515208 63:0.0150666590053521 75:0.014126841959594 85:0.0427170242490674 117:0.3598174503466 138:0.0584509836253022 142:0.0108452668905526 156:0.193512191107971 180:0.0537150719823283 202:0.0865522085516554 316:0.0949617461439475 348:0.207748412028758 360:0.0858303983433068 408:0.0820902556615114 415:0.060645573942342 429:0.159095055915509 502:0.0481141097869953 707:0.103443850926937 844:0.0763819483852475 871:0.0800644702497391 911:0.118083959589216 923:0.234301627047612 930:0.0610290594806656 1095:0.0983917670260482 1136:0.124905617729394 1226:0.110329155383628 1286:0.518072043963778 1394:0.0904106205283697 1536:0.114596932106156 1563:0.120099053252241 1726:0.0941239903035202 1750:0.135608661663417 1901:0.133355978603914 1922:0.306461967574944 2115:0.124905617729394 2211:0.107380915655193 2307:0.0977206209545113 2402:0.0961390839665446 2749:0.259036021981889 5632:0.154367708161175
+-1 6:0.0207321012248914 9:0.105731015524449 16:0.304204531524121 19:0.0839036132964705 27:0.0804892087222511 55:0.0694082220061913 58:0.0927150344523084 63:0.0298749327546737 67:0.0390911937288908 75:0.0280114160298479 84:0.0405585766314393 92:0.0456208310661904 140:0.048834298281855 142:0.0465931768760246 153:0.0599382765398718 210:0.108761361099649 281:0.159543242474856 389:0.117791826764907 423:0.0523589880919435 475:0.111996338132128 552:0.403337559445669 675:0.236088057936616 728:0.095314716672627 743:0.263181002073023 808:0.0721275638011215 1050:0.0815788645239289 1125:0.245052725363283 1359:0.153433048103959 1392:0.110025943110486 1484:0.130214671486046 1505:0.232292552379114 1551:0.0739880454079234 1602:0.095314716672627 1654:0.195096167137819 1896:0.125239798324017 2161:0.0917575275432565 2203:0.247669169987923 2291:0.23414284154704 3275:0.112096547611491 3689:0.139900795056678 4387:0.295178207722164
+-1 6:0.00575169523117348 9:0.0439993446285826 10:0.0485127484087675 27:0.0167475570715261 34:0.0916762701826922 35:0.1248291727139 42:0.0344117166581091 59:0.0357149691755689 63:0.0124322787926373 72:0.07158830901573 74:0.0471514218474237 75:0.0116567871907641 77:0.0433711381632928 78:0.0441873829813709 83:0.0298060118721996 84:0.0675128591927243 90:0.241093667094638 92:0.0379696848340494 100:0.0355421474985053 104:0.333181880311965 109:0.0632964696012554 111:0.0359697735581697 123:0.0583534287148935 138:0.0482309265694204 142:0.00745749171045002 160:0.0521323618654821 199:0.0268855915656268 218:0.03262580584923 223:0.0781240373094723 224:0.0546998012391449 239:0.0487635396690029 242:0.120907551347874 243:0.0542333159387819 247:0.084639396854092 254:0.0555092916793682 283:0.0431165906510917 284:0.0349291926445661 293:0.0544389423476887 302:0.0730141580025395 330:0.0572028429570206 331:0.0449627755971301 336:0.0525858874317244 348:0.0571413161593363 355:0.0346166754300069 378:0.159163672865092 402:0.0438399331356286 428:0.169988109114573 466:0.0531479030326689 478:0.0451053384782196 484:0.0635709391909392 520:0.170713732042499 528:0.0601791140445488 529:0.196493333055028 541:0.0593101824658178 607:0.0564211180273413 608:0.125522897501432 609:0.0407308094419621 717:0.0582872583721801 729:0.0619081812959675 745:0.0781240373094723 792:0.0631161064539102 828:0.261923077427477 856:0.0431671727572678 861:0.0767895861287428 876:0.0555092916793682 916:0.0696953592178546 922:0.0817620703139749 941:0.0820570621479249 962:0.0778936448437267 966:0.0574513772843073 1119:0.500009927064242 1176:0.0649189682814942 1193:0.0701088746727965 1319:0.0607090018315801 1331:0.0650198095422803 1483:0.0806343332695427 1591:0.0682655949264946 1607:0.223253675908684 1611:0.11643779765055 1629:0.084639396854092 2186:0.0905208104842342 2200:0.0829766389591203 2366:0.0873076924758258 2400:0.100001985412848 2611:0.0696953592178546 3543:0.106872002660662 3667:0.104235621313944 3739:0.0886055415443998
+-1 6:0.0104333340384939 9:0.23943890011597 13:0.0693419931033267 34:0.166296911045494 69:0.105850673515209 83:0.108133712138474 90:0.58311174062923 96:0.0646425351626102 114:0.0732607798497349 132:0.0632784159434049 142:0.0243496392209554 149:0.116164551983248 254:0.30207458447666 287:0.193687604173155 299:0.0863709733320816 398:0.0811516236057331 409:0.053283404039545 410:0.398252393092981 413:0.0902110066864846 837:0.113217443234318 838:0.274842734053229 849:0.130388454538805 890:0.10957038521032 925:0.154175652019243 1782:0.256940255436341
+-1 8:0.145267201197432 9:0.1103990981471 13:0.0959154109706729 14:0.219622563414175 19:0.175216008155552 35:0.234907386798509 83:0.018696624107868 85:0.132661636251616 89:0.229767298307525 90:0.2016433323489 137:0.177217064605088 142:0.102914077794259 181:0.0609064997010605 234:0.155290906414142 235:0.219064410890659 331:0.056408225145347 373:0.0515117736294279 409:0.110554211834247 417:0.25330020129902 421:0.209813789703029 435:0.271927442033433 457:0.0497566310702893 491:0.516697021175133 609:0.0510989955322302 831:0.12665817920511 877:0.271927442033433 1418:0.0916001961335339 1428:0.121274198312283 1931:0.0940642484346827
+-1 8:0.297159256927896 9:0.0752776348239261 10:0.0829995307850075 14:0.0998357619779223 16:0.324878147470752 22:0.104940653236262 52:0.0802278231558505 57:0.073466623942507 75:0.0398867472583455 133:0.141963140115131 142:0.132692347151396 162:0.0532960015729656 171:0.08508481138806 176:0.102014889737834 304:0.298047731678221 331:0.0769259503895462 395:0.656519914661488 539:0.0914236522444874 603:0.21070998082926 684:0.0920965953122549 842:0.142508622161272 959:0.10940139415486 1150:0.107377358912019 1159:0.100063615169265 1856:0.153182241150117 4099:0.19144365135825
+-1 6:0.0240752791214353 9:0.147336944746599 10:0.0406126511209723 14:0.244254089888072 20:0.0543229359237143 27:0.056081151019804 35:0.313503798945743 42:0.0864237394674363 48:0.058913547078281 51:0.0327023494052522 75:0.0390341134566075 83:0.0124761140234062 90:0.0672775253952342 98:0.0312337374355005 118:0.063059286205824 132:0.0292034266434677 142:0.00998891282009704 173:0.0359899624310533 179:0.0262478094670665 184:0.0567391336075663 218:0.0273128304199704 223:0.130803732028426 256:0.0327679159704068 266:0.0489623092364116 293:0.0911475785429565 295:0.0817664120360712 297:0.141114500201886 299:0.039860801605468 330:0.0478876002770726 398:0.0749040712108827 466:0.222464951427794 478:0.0377601235838917 555:0.277445508951909 612:0.0560513839142784 631:0.0323156397756719 664:0.108863213382298 682:0.0745594740936241 714:0.0498299055128121 842:0.557849221442747 858:0.0483070525151406 912:0.0457921683882672 987:0.0393102371193795 1010:0.107221488459767 1074:0.0629284953095949 1140:0.0978128919997019 1160:0.0609843021129458 1331:0.054431606691149 1424:0.0447753871448684 1448:0.0604394151670231 1486:0.0657962724897798 1726:0.0650188932353893 1849:0.0595368062000185 2056:0.0627683523092947 2076:0.0600450086914561 2124:0.134555050790468 2193:0.0803107378919478 2253:0.0714568589536782 2311:0.0714568589536782 2410:0.0672775253952342 2503:0.0954398087963531 2551:0.0862822007169418 2552:0.0862822007169418 2715:0.0822476095944984 2839:0.0954398087963531 3377:0.0998851574308103 3454:0.0862822007169418 3462:0.0862822007169418 3594:0.0853706920286423 3720:0.106633999510195 3755:0.106633999510195 3825:0.079161175271961 3836:0.0815699412719877 4604:0.0803107378919478 4916:0.0883187833513723 5325:0.0954398087963531 5447:0.106633999510195 6339:0.0954398087963531
+-1 6:0.0290174015669093 10:0.034963950256961 15:0.0142023197619463 27:0.0362107345954013 35:0.224916188452725 37:0.0196135904227816 57:0.0618963350943826 85:0.0508076821018974 98:0.0268895236309723 99:0.353563760429701 142:0.0107494783436657 199:0.0193768961141699 200:0.0400464553519825 219:0.0346606238536704 243:0.0390868590824042 281:0.0478505388192878 295:0.281574995397732 302:0.157867579483086 319:0.037604933171184 369:0.0370684700186534 378:0.0573559623326203 386:0.0330147084745253 423:0.0314072317118292 429:0.14192089395919 431:0.0924458007487486 433:0.0335222679872557 436:0.036615260023702 442:0.0352755879986067 452:0.0585136454186945 461:0.0907206261713987 482:0.0656128177447262 483:0.080496973406592 513:0.0310203840820655 529:0.0708080179757332 531:0.373153681955234 534:0.0315961740305275 540:0.0468608656718059 598:0.131428840122195 612:0.0482553525790545 673:0.0419138188563869 676:0.0829027895271925 681:0.0453603130856993 723:0.0425445256557849 771:0.0439781211380662 782:0.0472313891854238 908:0.0440918627462469 944:0.0453603130856993 990:0.0558142589562115 1184:0.0545998729535348 1193:0.0505286401416944 1239:0.0554982923596962 1275:0.0626286692760348 1293:0.0610010308311213 1331:0.0937217313436118 1342:0.0593565543875253 1430:0.0623407028562166 1471:0.0480107395807571 1735:0.13630173446432 1934:0.0708080179757332 1956:0.061785760307204 2063:0.0696696621093185 2078:0.115081821141486 2131:0.228104307102823 2154:0.113289703327845 2227:0.0548915316525715 2321:0.0708080179757332 2379:0.0623407028562166 2383:0.0659984162320986 2585:0.0859924082625601 2649:0.0686349430968884 2702:0.0839186708363889 2785:0.152069538068549 2874:0.079306883922784 2915:0.0663975472208089 3095:0.0656128177447262 3251:0.0591398989601236 3478:0.0839186708363889 3514:0.0885304577499938 5299:0.4299620413128 5566:0.0918025726385034 7176:0.0918025726385034 8137:0.0918025726385034
+-1 94:0.0551549694140096 99:0.522418663446056 137:0.0752145349009453 140:0.0649240440928364 142:0.0166773724414682 176:0.0952468495275707 199:0.0429463648539445 218:0.0521156381564008 381:0.0883177878825512 409:0.0469214612203588 436:0.0811529517903556 442:0.0781837433456504 457:0.0633531856403792 558:0.203985607060541 742:0.0942943963050512 935:0.714970322500499 1986:0.284534009346297 2680:0.17577337218042
+-1 6:0.0162498600324139 27:0.283894171049434 41:0.149649342272912 51:0.441455816886713 82:0.121885667050018 83:0.0842088291505138 125:0.174206331008168 142:0.0674212059531399 161:0.317162953096178 207:0.384338607438544 234:0.11657064693793 331:0.12703016776032 351:0.11531988736801 409:0.165977213898953 506:0.363636628785916 647:0.4403505163939
+-1 6:0.0136311265382113 18:0.0364835196927543 27:0.297679284722781 41:0.251065438940784 51:0.0925783374288901 53:0.0524890736952448 58:0.0914386597555781 65:0.0487598623368652 78:0.0523605462913741 82:0.204486555261274 83:0.0882977763728122 106:0.238535552685181 113:0.218908435401016 114:0.0957150376605723 118:0.0446292390497954 142:0.0547886193789869 161:0.399076207880839 162:0.0738262406716705 165:0.264698098326524 186:0.03867586835817 207:0.0806002048796794 211:0.0677834237866503 239:0.0577831363592303 283:0.0510916937910649 286:0.114567958748941 288:0.0707882909611987 295:0.057868919370433 296:0.0614598889236394 331:0.0532793601747075 342:0.0636690223641758 367:0.058172297160704 400:0.0600554259870343 414:0.0503582404262542 438:0.151994706265954 439:0.073457774188547 457:0.0469967183162234 608:0.0743701826381303 609:0.0482646241840147 622:0.0752203592044912 647:0.0615643621766451 686:0.0806002048796794 754:0.0830766325149591 767:0.0651952084984194 896:0.0863214020025565 985:0.0873324949220469 1018:0.0739591624961776 1206:0.104994553799753 1269:0.0696243184780577 1271:0.0869214747800943 1305:0.0619881913916198 1323:0.439390341520192 1405:0.0965421320256219 1545:0.0871258556521289 1718:0.0968852730961315 2532:0.0998837870640109 3109:0.125012518597505
+-1 6:0.0221749903413664 18:0.118702103533115 27:0.193704760792829 78:0.170359303029734 83:0.0574568017615417 91:0.177188046602793 113:0.474824285633172 142:0.0632532775134334 234:0.159075399097542 334:0.303014494577497 394:0.206582823182069 419:0.269760516792484 457:0.15290765173616 572:0.240302381128121 677:0.331981332040866 716:0.212325227718221 1045:0.115194640367979 1309:0.261769491657578 1383:0.322390535645727
+-1 12:0.144778656443875 69:0.217889747105556 151:0.169610144325794 318:0.259232795068929 859:0.336130785915027 916:0.260240135478677 2145:0.399056476118474 2509:0.399056476118474 3815:0.425691045991683 5844:0.393929071523823
+-1 6:0.021546046007138 12:0.0363116390138391 21:0.032585343486597 30:0.0323774693705297 32:0.0807581076970432 59:0.133789489545558 79:0.0730574480660345 83:0.0139567918082451 91:0.0430406253311523 98:0.104821766608459 111:0.0336859988577898 124:0.186843946364295 138:0.0451686729331278 179:0.0880887778358842 199:0.0251785851614016 242:0.0377436500493583 260:0.0679140609473821 271:0.0594485465141197 286:0.0301819821864907 318:0.130035295343973 333:0.163023608697765 336:0.0492471308193319 384:0.058371684493508 419:0.0655273397670624 457:0.0371426914784817 458:0.0567110040937443 493:0.0480873512602466 500:0.111487537828219 542:0.382854371150402 550:0.0438854041677844 581:0.0806413547824649 582:0.0454326014825526 609:0.0381447494552591 619:0.157881350849139 641:0.0426219116051921 651:0.0696929887487821 676:0.0538624693534306 715:0.0664639176939045 749:0.0627036186418258 763:0.0623857654019194 771:0.0571457297282761 846:0.156013832301092 859:0.0843042756396626 876:0.0519849237606116 1026:0.0745290666573763 1056:0.0528939020416953 1114:0.0659214859518773 1145:0.0707618596332118 1168:0.0700407602296916 1185:0.0847735088920387 1215:0.126276688552715 1216:0.0576696187127197 1438:0.0745290666573763 1564:0.0862778170124355 1627:0.0719141004999589 1679:0.155416656192171 1688:0.0725257576894275 1704:0.0817643965498063 1724:0.082979843240647 1729:0.0976175458776278 1787:0.0774156530667126 1995:0.0696929887487821 2145:0.10008653943108 2174:0.109044987795568 2187:0.225786269719947 2363:0.0920088387844687 2404:0.0843042756396626 2556:0.0912507441025365 2880:0.0810063018678742 2940:0.087952770330748 3083:0.101495186337199 3113:0.0988005455609058 3198:0.101495186337199 3659:0.101495186337199 3875:0.119289430030231 3877:0.111739628571861 4001:0.0936527098494565 4818:0.11503760234365 4823:0.11503760234365 4893:0.0988005455609058 5054:0.223479257143722 6219:0.10676670148176 9163:0.406579460438923
+-1 6:0.0104176268278834 12:0.140454951086494 37:0.0985814982198455 41:0.047969367112321 55:0.104630343225305 91:0.0832414769726467 132:0.0631831513422089 165:0.101148133380103 199:0.0486959146339272 318:0.377236504804177 330:0.103607344872944 353:0.35059160066896 448:0.0943426913985845 502:0.0719083240435067 534:0.0794040791819144 789:0.321131802068564 819:0.104630343225305 845:0.141083087964671 846:0.301734041477925 859:0.16304624678107 1185:0.163953753785719 1679:0.300579090290834 1870:0.18879439215344 1871:0.18879439215344 2145:0.193569477748596 2168:0.193569477748596 2247:0.17126937118368 6381:0.199305462888998 7461:0.230708273091806
+-1 6:0.0184929972674389 12:0.15583161774478 52:0.0376926523848978 58:0.0310131169323749 69:0.0938097164746718 74:0.0379006136597036 98:0.0299895495568909 132:0.0280401156718397 142:0.00359662764490295 179:0.0252022347436951 218:0.0262248308615051 224:0.0439680491658531 271:0.102049518308335 301:0.0419043250196168 318:0.16741417617901 325:0.0415150646585624 335:0.0612198390473649 373:0.0330041558856441 379:0.0564667201278792 398:0.0359601434223246 411:0.0346371102600197 443:0.0719681120600104 485:0.0319942690183804 495:0.0509512206661451 502:0.0319122690324102 542:0.0657208736783152 629:0.0564667201278792 650:0.0783206236903477 657:0.0480183229039226 676:0.0462302223916403 724:0.0540974016909794 727:0.0494979032772534 732:0.0505897901304873 786:0.0731771553980321 846:0.133906860380366 859:0.361792307164201 883:0.053910849010395 977:0.127131288620837 993:0.0508054103980508 1056:0.0453988999001113 1060:0.140356960295028 1215:0.0541917170225329 1225:0.123717855718681 1426:0.0548723206678923 1506:0.0648143914481702 1563:0.318628636372209 1679:0.0666971517030119 1751:0.125969068289909 1766:0.162302557110524 1819:0.0641746582346402 1922:0.0677548769009736 1925:0.339202509541472 2028:0.088449976215474 2109:0.0771115803523259 2140:0.0736072085705918 2145:0.429521987373738 2217:0.0819699725204538 2314:0.0765476940233952 2619:0.0796571590930524 2622:0.0837852573307883 2623:0.0837852573307883 2992:0.0708643419706308 3063:0.0819699725204538 3271:0.082845171495144 3815:0.183275977235131 4310:0.183275977235131 4509:0.0959062579351909 5041:0.0848006273853679 5730:0.155403406405657 7315:0.107529729922527
+-1 6:0.0185101132036872 12:0.0311951691059657 33:0.0256072358275341 69:0.0938965407521773 72:0.028798198850136 97:0.057750147042718 98:0.180103835802659 118:0.060603374540644 132:0.0280660678106571 142:0.00119998548452145 144:0.0275116244663925 179:0.201804482570521 218:0.0262491028887302 224:0.132026229545527 233:0.109449421688005 240:0.0416585683506434 253:0.101130960878113 261:0.127248953215696 318:0.2792818733997 331:0.0361748159805166 374:0.0597261507483236 379:0.0565189821148294 394:0.0431101816074317 411:0.0346691681553659 414:0.0341914781737028 427:0.0491569719396525 448:0.125721572190578 480:0.0340361600973927 493:0.0413116316189873 515:0.100299652237721 542:0.131563401436583 619:0.0678175864843245 641:0.0732325929786179 651:0.059872939601813 653:0.0472724691222599 657:0.0961255311888021 676:0.0925460202611504 700:0.057218081303943 739:0.0472724691222599 745:0.0628547200610445 757:0.0879329798337144 774:0.0519111367993687 786:0.0732448834957826 820:0.06867389479375 846:0.268061592022739 858:0.0928513648877693 859:0.289701727199141 882:0.034750560064912 896:0.0586092029330535 1003:0.0489055361112971 1122:0.0565189821148294 1123:0.0525582625454238 1129:0.0539607454464033 1133:0.0539607454464033 1215:0.0542418734120209 1416:0.05585637467994 1432:0.0550234797911458 1463:0.0680966547379723 1563:0.159461769336077 1599:0.0560734243141969 1622:0.0871940674455299 1679:0.0667588823235266 1738:0.0624866625686371 1751:0.31521414301979 1904:0.064657329871877 2016:0.0745826559102283 2109:0.154365899804673 2145:0.171967810188547 2165:0.0692786326283542 2254:0.223747967730685 2280:0.0628547200610445 2376:0.0642340541964315 2597:0.0871940674455299 2678:0.0885318398599756 2765:0.0702434328631198 2789:0.0732448834957826 2950:0.0838628036096465 3672:0.0900273421836593 3759:0.0760781582339119 3793:0.311094475731321 4006:0.0790443880550569 4385:0.0766185416762616 4503:0.093680068617786 5157:0.0820458386877196 5894:0.0900273421836593
+-1 2:0.078320693262962 6:0.0191855380534563 12:0.194000792122856 15:0.0328656930098167 29:0.0348390669601183 39:0.289037435971845 41:0.0883423963383256 55:0.289037435971845 63:0.041469505646713 142:0.0248754471931544 179:0.0522920570110769 209:0.060260093220332 286:0.0537507037324456 295:0.162898693894676 311:0.368756221270486 363:0.0896128759402264 381:0.0922124353509157 406:0.0899450041348035 430:0.0746603257014685 441:0.202930313968274 500:0.0992733608190034 531:0.215879422555382 808:0.100120540484441 853:0.203018981168856 1063:0.140584433155103 1079:0.500354717899738 1269:0.0979948361466846 1300:0.173845831434667 1339:0.115789092174394 1737:0.15770842498606 1755:0.148540710603362 1774:0.163857357138191 2004:0.168380595129373
+-1 6:0.0175983248569218 12:0.296585284947927 42:0.0526443547766175 55:0.088375154936523 59:0.0546381201145786 79:0.0596716772932647 85:0.0539237692386309 91:0.0703092257736519 94:0.105646058799866 96:0.0545175841763244 124:0.508699750073064 132:0.0533671267542495 158:0.0631563918031143 186:0.0499320796107828 196:0.0818237459050129 218:0.0499122004015212 220:0.211765026471873 257:0.106622615006448 289:0.0765558461081841 293:0.0832827674099835 308:0.130028970351043 327:0.0740001169377024 398:0.0684408564707707 473:0.0774716309230201 542:0.500330916896043 581:0.131732082804794 671:0.0537367921315336 688:0.0976805701589707 722:0.113019474147408 735:0.114415429294037 772:0.0815275053995948 800:0.155192805536158 859:0.137715665235539 1296:0.0895775593351417 1309:0.103871624765215 1496:0.130582184611355 1538:0.111958059345149 1690:0.114997223669728 5425:0.19486583672694 5426:0.19486583672694
+-1 6:0.00661903835752021 12:0.0892407382319349 58:0.0444010254461208 69:0.0671529987999553 118:0.0433423670904163 132:0.0401446230694035 199:0.0309398802761666 318:0.159789616605866 335:0.262942641716082 384:0.0717281339745769 408:0.0389757450677361 542:0.188183225239509 629:0.0808425764725273 641:0.0523745410535446 650:0.112130490237857 796:0.0581835006875061 819:0.0664788887729345 846:0.19171249146364 859:0.207189099652723 913:0.0690834623449911 977:0.0910060022886527 1215:0.0775854878351374 1225:0.0590416808892266 1441:0.0862848005786266 1563:0.114043988405569 1766:0.348549292092212 2145:0.49195227252095 2314:0.109592212791311 2556:0.112130490237857 2747:0.141360192439489 2949:0.19731168659968 3979:0.232366194728141 4307:0.124719037775566 4521:0.126632535943278 5299:0.137307585313275 5730:0.111244390837549 6427:0.131196766623363 8173:0.333074575029813
+-1 6:0.0149781013513141 11:0.0673066071297497 12:0.201941241265866 13:0.0331824706200268 18:0.10690314388497 25:0.112412473648422 29:0.018132514691011 34:0.0397893261933335 36:0.114440706635164 40:0.0311953518697134 63:0.0107917129530014 72:0.093212253510521 74:0.122787934148797 76:0.0415369722784812 78:0.0383564076411881 79:0.0677161746979105 83:0.0258728049590574 91:0.0398938996801154 94:0.149860605951262 98:0.0323860616893627 110:0.0481842751453529 111:0.0312231954976842 117:0.0515448931079143 132:0.0302808454725991 142:0.0194201991197847 145:0.0418967056905935 173:0.037317760831438 174:0.073195412609749 186:0.11332711193407 190:0.0428071729815057 199:0.0700132915905271 208:0.037405016287232 215:0.0318068281448527 218:0.02832049839437 228:0.151038817306161 229:0.0261461049716771 258:0.0946905900670432 265:0.04716563265188 275:0.0335738989705577 283:0.0374269172675092 312:0.0452529656226391 313:0.0566165478087564 345:0.0366390308015076 346:0.0415962756622013 355:0.0300486524521225 367:0.0426137712716698 381:0.0479933443857275 385:0.0522378668759679 387:0.0352433685443134 406:0.0468132258169932 415:0.0434382715918168 455:0.0364540444313823 457:0.0688543345405134 465:0.0424546630923143 466:0.0461344957870628 505:0.035913616973329 509:0.0463430091010085 513:0.0373613190883133 530:0.041042997182657 580:0.0451755695961731 582:0.0421109970360901 660:0.0642827582020701 661:0.0666564179506611 671:0.0304905959472247 739:0.0510028815670365 796:0.0438874613501113 845:0.33807392435342 852:0.0495477370682316 952:0.0465121354497204 1020:0.0638235288242381 1054:0.0652501525097314 1240:0.0839109686699889 1245:0.0488238447323572 1251:0.065588418097228 1383:0.145172498184384 1386:0.0714897392175518 1424:0.0464273112762552 1600:0.0744155036844337 1649:0.0567057928165466 2132:0.457885895316513 3974:0.573108918632383 4029:0.0904806691886622
+-1 6:0.00959708687039617 12:0.301914845052971 13:0.0212613765687215 17:0.0174318691940618 27:0.0465740254604209 29:0.0232364990176942 37:0.015136128055854 39:0.0963891786299124 41:0.0883821605248274 42:0.0956970715744827 50:0.0303650986317174 51:0.0217268016239959 57:0.0477664126751843 59:0.0397285377586004 63:0.0207440858346004 65:0.0228864739987397 75:0.0453836282824406 79:0.0216942720530381 82:0.0239950238053721 83:0.0248666587588994 91:0.0511233315690373 96:0.0198204467587353 106:0.0447846852937228 111:0.0200059882447216 124:0.0369886394081408 127:0.254524683490065 132:0.0194021857439281 135:0.029145916226214 140:0.0226058612092396 142:0.0282048631893959 158:0.0229611770242577 166:0.143215972687887 168:0.0237590911939979 169:0.0466369046343725 191:0.330311428991503 194:0.0253457453743988 196:0.0297478918740294 219:0.0267481695006529 222:0.367185914691236 228:0.0241941988588886 232:0.0283948261862767 239:0.0271217387513275 275:0.0430243616918881 277:0.0579412195565689 284:0.0194272287067565 290:0.0997990203435933 293:0.0908350039153004 299:0.0264827373202847 314:0.0255280995771996 317:0.0190669054375343 326:0.0373032807123196 331:0.0250077960204988 351:0.0227024514826069 353:0.107659133992832 355:0.0577602303170545 366:0.0403339058075887 374:0.0825778572478758 386:0.127389948608459 388:0.0332663401145311 394:0.0298022422180658 398:0.0248824002805 402:0.0243832835239398 423:0.0242374736508191 438:0.0356709671252679 439:0.0344789619658216 457:0.022058905013707 458:0.0336804524050337 461:0.0350052944269347 462:0.039310119259687 473:0.0563312684969981 495:0.0352553840652383 501:0.0332663401145311 502:0.0441629969379084 504:0.0339824127347132 507:0.0171050424407785 576:0.0313157795145018 633:0.0332663401145311 636:0.0327175643977306 665:0.0395550901130773 671:0.0586097445541706 690:0.0399792089626304 701:0.0459768656927312 706:0.0325668730998295 709:0.0557965539103367 713:0.031988718317825 723:0.0656646105603954 727:0.0684995400560877 735:0.0415969445264808 756:0.0424754323400721 762:0.0425916930134732 769:0.046509001494563 771:0.0339386343271681 796:0.028120505344372 818:0.0490341459937783 856:0.0240091016793076 882:0.0240232021683114 909:0.028165634248499 952:0.0298022422180658 971:0.0398927299131864 990:0.0430727751876856 996:0.035617930392805 1005:0.0674459175913824 1019:0.0459768656927312 1020:0.0817887309125077 1059:0.0293247953938814 1105:0.0803095317300561 1129:0.0373032807123196 1153:0.134093617853111 1277:0.0377636324042464 1377:0.0305116388051536 1449:0.0409913559736885 1476:0.0411886126461425 1509:0.0404248657150182 1642:0.0495358569730608 1649:0.0363337386328568 1659:0.0450005768392873 1691:0.0448479199042675 1782:0.0787820378678077 1899:0.0459768656927312 1910:0.039150522999049 2279:0.111239985505211 2320:0.525931372741079 2927:0.0509320556838123 3070:0.0500679927748926 3182:0.0579746939834258 4044:0.0647614088331975 4450:0.0612024175528679 5018:0.120555220186875 6903:0.0708455446127423
+-1 6:0.0314372117552572 12:0.181650037369987 20:0.0253336573287947 29:0.0163105463281646 31:0.0513522078208794 39:0.0451060538388262 41:0.0620386626542042 52:0.0732293806757537 55:0.0451060538388262 57:0.033528987575777 63:0.0291220611834017 72:0.0279487393253416 75:0.027305506531302 76:0.074726613735018 77:0.0338649886115594 83:0.0116365432791701 84:0.0263576459428779 96:0.0278253892599826 132:0.0272382039310668 140:0.0317357572894774 142:0.00931671641705479 173:0.0335680448783136 181:0.0379074380307991 200:0.0867719939736714 227:0.0638451902557924 234:0.032217034528518 256:0.0305628236197976 277:0.0813421114056926 304:0.0680120996185154 310:0.0460923855977894 332:0.115368680018506 347:0.0368933214378905 375:0.0318373174959658 381:0.0431709379744792 387:0.0317020890482209 508:0.0696892865617599 530:0.036918966751276 633:0.0467017153654141 684:0.168125629532805 688:0.0997109438679332 707:0.0666482231765474 790:0.0678513799190734 884:0.0927312489572901 1047:0.0506116949876884 1124:0.0998580794528292 1129:0.0523690671118315 1138:0.0442858542250682 1216:0.0480823260290635 1253:0.0549623606087652 2059:0.174743617261504 2197:0.0773790653839924 2244:0.0621389730269082 2781:0.0767128183390364 3093:0.0647896977662056 3575:0.174743617261504 3698:0.0681714646330807 3784:0.0760807531984787 4039:0.712138067049355 4046:0.0873718086307519 4447:0.0754795330518338 4570:0.0909167907133279 6873:0.372653842441561 7387:0.178034516762339 7706:0.0994581444192836
+-1 2:0.0718415891869084 6:0.00879920418055094 12:0.118634676898909 15:0.0301468681798668 39:0.353502297109116 41:0.0810342437115068 55:0.265126722831837 63:0.0570583915502231 142:0.0228176179709118 179:0.0479661800862117 205:0.0696255642738779 209:0.0552750579845439 286:0.0493041597970598 291:0.0708237657421607 295:0.149422848015054 311:0.22550049763293 381:0.0845841325250075 406:0.0825042752720771 430:0.068484026687519 441:0.186142839680065 500:0.0910609407046106 506:0.0492267769973394 531:0.198020729171266 853:0.27933625778773 972:0.150302205539099 1063:0.128954541539783 1179:0.109728383383241 1339:0.106210402969603 1755:0.136252633424335 2004:0.154451257239472 2331:0.505027533976995 3421:0.157675160779275 3853:0.342372391563135
+-1 2:0.100147651188122 6:0.0122661489115203 12:0.0826887627024581 31:0.046751991777455 39:0.369588407763832 41:0.112962272485366 55:0.246392271842554 63:0.0530265171748023 142:0.0222655374129416 199:0.114673207276669 291:0.0987287985643238 295:0.208296439874334 373:0.0875647976231826 406:0.11501150621794 441:0.086494783826612 487:0.187091203500169 531:0.27604220810688 853:0.25959772907528 867:0.107823439762309 1063:0.17976348507062 2004:0.215306075640157 2726:0.409176344418629 4885:0.486257667409878
+-1 2:0.10893802446029 12:0.179893394343328 55:0.268019139923614 63:0.0576808737549076 142:0.0138399289479732 291:0.21478926655468 441:0.188173577001644 487:0.407025943422701 853:0.282383694718071 1661:0.478185984362466 4430:0.569913816196236
+-1 2:0.106549054881118 12:0.351896800802091 55:0.262141581788285 142:0.0203046368290703 441:0.184047001792593 487:0.398100018782633 784:0.256297917360848 853:0.276191127341549 1339:0.315043644859019 1774:0.445829724202619 3477:0.404155572857843
+-1 6:0.00675007543847272 12:0.182014873676072 25:0.0506601377273764 29:0.0245149580409537 31:0.0257276732634713 39:0.135589942237852 55:0.0677949711189259 63:0.0437708273906431 72:0.126021929260919 75:0.0410405227043784 79:0.137327271729949 98:0.0437855949357127 110:0.195433811065547 118:0.044200415791501 140:0.0476992457944832 142:0.0140031429633457 162:0.0365584379600376 172:0.0529347305739826 173:0.0504531972842451 204:0.0810439484978518 214:0.173492954279035 227:0.191920261743137 239:0.0572279229310923 275:0.0453915377188399 317:0.0402319115643066 337:0.258027231210219 348:0.0670599152470126 416:0.0656719269086627 429:0.0770323647366979 432:0.063408928661886 518:0.0588664487236275 574:0.0505416030701263 605:0.0981358008620532 613:0.124858728236617 628:0.0733494525600885 640:0.125998570600019 674:0.268148116343566 714:0.0698549785460174 732:0.0738625318240985 846:0.0977539115184961 871:0.0775329621557044 1021:0.0722683459767707 1069:0.107468617116321 1535:0.10017312490973 1555:0.101055242908504 1569:0.110973563834645 1642:0.209045167138569 1662:0.186198645556803 1709:0.086086283528248 1763:0.355449521300272 1859:0.106233427704689 2402:0.0930993227784015 2408:0.228700674380751 2465:0.119678490230854 3109:0.123811326807236 3116:0.122328857661265 3574:0.125422862517169 4785:0.207971412132489 5433:0.149486852752419 5458:0.273298179559655
+-1 6:0.0354018626207116 12:0.318202150061917 17:0.0321514563098311 34:0.0940450479421741 39:0.118520564488702 40:0.0368662734813002 41:0.163012648904597 51:0.0400730584534349 55:0.118520564488702 57:0.0440503457519835 58:0.0395797425083761 59:0.0732755811656869 63:0.0255070205791332 65:0.0422119659495394 72:0.0367190219457388 83:0.045864231985551 91:0.0471461075991447 113:0.0631705052636312 118:0.0772720770255124 127:0.117361757794053 142:0.00306007285872346 146:0.0529826000071983 159:0.0354960094902101 165:0.114576073208264 186:0.066964275941756 203:0.0894609037652045 215:0.0375889084328392 220:0.0946665402149835 222:0.225746720223635 242:0.0413438739033272 284:0.0358317107610669 314:0.0470841978615204 322:0.0511351767020556 332:0.0757856203125657 347:0.0484704037545184 353:0.198567227896817 364:0.0546685658896782 396:0.0599293599678506 411:0.0442047765890531 423:0.0447037587575778 433:0.0477142141930557 495:0.0650252665299917 500:0.0610609559453656 504:0.0626773896809051 506:0.0330090381046842 534:0.0449726914642768 550:0.0480714666900711 597:0.0527617319613132 700:0.0729556731664358 721:0.0781303430797525 782:0.0672272121052684 806:0.190014816978582 811:0.0670141909179228 909:0.0519488844769315 1095:0.08328591048152 1160:0.0747294169305622 1177:0.0796733554801093 1206:0.090894976266809 1351:0.0783419719319728 1621:0.0963422520410043 1680:0.0976921483146111 1865:0.0700294758378519 1891:0.0841772939531356 1900:0.0984117946420583 2016:0.0950963007579282 2118:0.175886607821375 2163:0.0745598931128938 2333:0.181789952533618 2504:0.0868263523273502 3435:0.597231881298464 3436:0.119446376259693 3589:0.0933905796848826 4119:0.105729152054919
+-1 6:0.0196521025016007 11:0.0220775035387373 12:0.0662395366337452 29:0.0178431512593683 55:0.0493444011724867 68:0.0301609222010784 100:0.0303596547493499 110:0.0948306756555692 142:0.0114661718891032 191:0.253643923970881 242:0.0344259025209917 317:0.146413484023961 408:0.0578600164990105 429:0.112135630301104 480:0.108408106363436 528:0.051404241276954 531:0.165846972660761 555:0.169854341657783 654:0.20536321504811 657:0.0510280183366693 674:0.520455839447352 745:0.133465137436653 837:0.0533137535710291 908:0.104514607023724 922:0.419040784144301 929:0.157387624901666 1074:0.0642088734391133 1196:0.0616691490889932 1210:0.0786938124508328 1305:0.0446844319030439 1445:0.228229507739449 1547:0.0659620477474173 1549:0.0777637577003142 2045:0.0825718953941324 2217:0.174215383123608 2219:0.0706106516616263 2815:0.0742269701268263 2862:0.0832296086185043 4380:0.101917476341484 4535:0.0901157663885869 4537:0.0813455551554983 4661:0.104925551168267 5040:0.114269485029756 5454:0.0912887186483529 5643:0.0994597002500766 7218:0.217607268223133 8228:0.108803634111566
+-1
+-1 6:0.0301988622214887 12:0.135718041042838 15:0.0344880097446941 27:0.087931844129778 28:0.148668896280815 29:0.0365587934037394 31:0.0383672976321996 60:0.0764041694818562 63:0.0217582619423892 64:0.0873074916713155 72:0.0626448781256187 75:0.0204010409783876 96:0.0623683987566836 142:0.0208826794541014 159:0.0605583447115226 171:0.0870373666984341 185:0.117236851233939 245:0.116391029937677 312:0.0912390724230177 318:0.486018698957238 340:0.230495935706936 355:0.06058412171603 357:0.0931838091860547 367:0.171835852513882 405:0.0957324576941427 408:0.0592746303266826 425:0.144674009017631 453:0.0976380448286195 647:0.272783571616716 724:0.117787286836615 769:0.14634846460813 1201:0.128379198085811 2331:0.385167582676009 4646:0.429963462414761 5318:0.208818493305241
+-1 6:0.0171501968525278 12:0.115613186181624 27:0.12484315016332 31:0.0326836836897548 39:0.172249497194374 75:0.0347577865228512 86:0.133229550188298 111:0.0536266850440894 142:0.0266837749330926 165:0.0832584247542566 172:0.0672467336072273 173:0.0640942662901562 177:0.268497079441613 185:0.0499348716092159 205:0.0678522800905486 259:0.104316752675205 317:0.102218887680678 400:0.0755595933214197 408:0.0504938681633538 437:0.0771308383737457 462:0.316116058671736 506:0.0479730267986008 561:0.0759890695284925 724:0.100338638977051 977:0.117900121566657 1045:0.0445459215145989 1069:0.136524988188197 1098:0.096194572680445 1210:0.274701269138559 1273:0.115128862529788 8199:0.732539984360121
+-1 6:0.0277745852223352 12:0.0748937943987255 27:0.161745861855799 34:0.0442699113342191 39:0.0557912935981766 42:0.0332344158914172 52:0.0452883984474924 55:0.111582587196353 75:0.202643689981607 83:0.10075198850538 85:0.0340421110851083 110:0.0536101963130449 120:0.138841011766712 127:0.0552458074641578 138:0.0465808401354134 140:0.0392536877383327 142:0.0821068408649052 145:0.0466145980232558 165:0.107868999228362 173:0.0415200286421575 188:0.0613960370727916 191:0.645261167724383 195:0.154717876355779 214:0.380732127654605 218:0.03150960503246 239:0.0941904627309759 258:0.0526767405671126 289:0.048329756139566 332:0.142698537139733 333:0.0560401428831833 336:0.050786808176085 339:0.043206757829325 409:0.0283691568001611 446:0.0685418659400639 483:0.053934499614181 518:0.145330926598997 583:0.174847787592269 609:0.0393373185661529 829:0.0824174375514262 961:0.18977086250949 983:0.309647026813129 1309:0.0655742252215364 2023:0.0814087008395711
+-1 6:0.0244751267499673 12:0.0824960614182613 17:0.0333419307683026 27:0.0534492743795313 47:0.0289606768296447 51:0.0415568466869111 53:0.0942458224621594 56:0.0564892797414997 59:0.0759887617745769 75:0.0248015004728561 83:0.031708300299418 108:0.113283351081878 138:0.256545677754489 141:0.0558931642705749 142:0.0111068244456512 144:0.0363774380255183 145:0.0513463201108624 151:0.0483226230548875 159:0.0736206459557299 160:0.110919138892945 165:0.475273961316121 173:0.0457346147361133 186:0.0694437673641811 211:0.182560981010016 214:0.262112011741607 231:0.196788865730231 275:0.0822926831833967 283:0.0458683909177077 287:0.0567954673518696 293:0.115826722430667 309:0.0450300852687072 331:0.14349721093605 336:0.0559420400604387 339:0.0475925592525807 355:0.0368259915015976 367:0.0522251166238468 430:0.047622353088192 475:0.0495811641614678 507:0.0327168093392756 530:0.0503000614705389 538:0.0536147658015646 550:0.0997028252073934 592:0.0602735665552311 638:0.149465239441543 663:0.0572654806216974 684:0.0572654806216974 716:0.0585872505536672 728:0.0843923059122527 742:0.0627983400649332 856:0.0459222012905711 891:0.0860725892791987 927:0.0785917403350029 934:0.0992510544854103 1045:0.0317858472599165 1047:0.13791130104804 1094:0.126041423637343 1205:0.084660932794432 1350:0.0866722538087903 1391:0.0773206280395455 1426:0.0726224626538059 1471:0.0708668084668462 1512:0.418067981590894 2563:0.117061844956684 3611:0.180837142327063 4161:0.110888179092543 7119:0.135506251075209 7212:0.130676407979469
+-1 25:0.280400042952952 56:0.34492241270564 142:0.0387531702887241 323:0.319606591589619 359:0.415978462894568 433:0.302129582069412 480:0.274796888221225 944:0.408823545003883 1215:0.437931246717069
+-1 25:0.31643104413315 111:0.263671495658198 2003:0.659877551564736 2204:0.628418931626907
+-1 6:0.0430251065800291 11:0.0138100373403925 17:0.0502389970804166 18:0.131606967441766 21:0.0371825034226228 25:0.276778852741977 36:0.0234810592791559 37:0.130867875052533 46:0.180133234863423 50:0.116683765389511 51:0.0208723595311387 53:0.118339867408518 56:0.028372329722289 58:0.0206154121414187 59:0.0381661478801416 63:0.00664276355040962 65:0.0879457035542992 76:0.0511355864722347 78:0.0472200377666038 85:0.0753343104301674 86:0.0238740100009655 91:0.0982256454866377 92:0.0405756084854752 94:0.0184491299053404 96:0.0761639007849571 98:0.0398700282463652 100:0.0189907325796278 106:0.0215117270621898 111:0.0192192199591118 113:0.0329028416724999 118:0.0201238766847367 132:0.0372783259630758 139:0.0502832928655957 142:0.00239079359164614 145:0.0257892246259487 148:0.135073101854256 151:0.121352706268614 157:0.124575222877829 158:0.0441163821902919 166:0.0229306282955293 168:0.0684741779461736 176:0.0159298565358484 177:0.128301906011281 179:0.0335054652687094 183:0.027036269576259 185:0.107376685353402 186:0.0348788561976834 199:0.0143653975801374 203:0.0232981985831917 204:0.0184491299053404 214:0.0263296981492295 220:0.0246538963981519 224:0.0584539410588558 242:0.0430685469901457 246:0.0952979919988439 249:0.0701436753901779 271:0.033917791677421 275:0.0413323581340676 276:0.0238740100009655 283:0.046075755148706 284:0.0373264421775951 288:0.127677268835975 290:0.0319580867525744 295:0.104375250135026 309:0.0226168298217468 333:0.0310038463093397 342:0.0574183016324718 347:0.0504923623416145 353:0.103425262051808 357:0.0284488721014763 373:0.021938919504473 375:0.0217863465301926 377:0.0236534474473197 382:0.0269930266052104 384:0.0666067969900901 388:0.0319580867525744 400:0.0270797354502049 403:0.0355935934284986 413:0.0265723727639114 422:0.0840721233702404 424:0.0316528095814809 430:0.0478376467235013 433:0.0994092561754897 438:0.0342681478639602 448:0.0278312930542358 449:0.0351282416570621 458:0.0647118267967118 471:0.0320361647259101 473:0.0270579745068389 478:0.0241004970504241 481:0.177080317422514 485:0.0212676153582228 499:0.0228907589026993 501:0.0319580867525744 505:0.0221063761455452 506:0.017193010408692 510:0.0277837866701341 541:0.0950711108132656 564:0.0380794495372916 567:0.033349102459911 586:0.0225911995257999 591:0.0323152754359701 599:0.057631108516045 607:0.030146697363909 609:0.0217631168712192 615:0.0408050163289285 625:0.0341665519256531 631:0.020625541104648 641:0.0243175183160281 643:0.0250042525846911 645:0.0391028080795967 647:0.027760133468441 653:0.0313944675988755 655:0.0232704148319454 661:0.0820597852244341 699:0.0458059436544636 721:0.040694787819771 747:0.0338689082890745 756:0.0408050163289285 759:0.0454136700947403 778:0.0293686942163329 803:0.0768139220562437 805:0.0400620640536111 811:0.0349048547954633 836:0.0348499206541099 860:0.0422541197117189 862:0.0295711963188417 863:0.259832125947282 872:0.0350718376950889 882:0.0923138014372882 885:0.0430842019301976 896:0.0389233893774176 912:0.146134852647139 955:0.0456075260087431 968:0.0426589507732039 971:0.0383238829090713 973:0.0419946419811323 974:0.0394735210014561 984:0.0352421942138333 996:0.03421719688795 1020:0.0392861274923229 1021:0.0329028416724999 1027:0.0321149724105046 1041:0.0438443885132904 1068:0.0362138995417938 1099:0.0435320431432293 1103:0.0402677415886088 1113:0.037312342674061 1167:0.0392861274923229 1172:0.0466498834945896 1183:0.131533165539871 1261:0.0908273401894806 1277:0.108835546950361 1284:0.0430842019301976 1291:0.0466498834945896 1313:0.0401642757399104 1324:0.0366769690275437 1333:0.0873735394044336 1360:0.0908273401894806 1382:0.0402677415886088 1385:0.0489290690958587 1386:0.0440050097672922 1394:0.0398612840711684 1400:0.0468747597778781 1448:0.0385756138675242 1459:0.0937495195557562 1469:0.0347953420760328 1489:0.0360229700067461 1507:0.0421233828157812 1558:0.0370240287477101 1559:0.0893599175275438 1562:0.0495316368678779 1694:0.0483667033588658 1707:0.0351282416570621 1910:0.037610864498609 1911:0.041619808677625 1995:0.0397626588430821 1996:0.0524947506602506 1998:0.158851994944458 2050:0.0395688029290793 2057:0.048643198977922 2099:0.0893599175275438 2173:0.0432308553809815 2251:0.044335732974358 2311:0.0456075260087431 2373:0.0492249717680717 2403:0.046217359925869 2459:0.044335732974358 2466:0.048643198977922 2479:0.05206222709153 2554:0.0466498834945896 2586:0.0516508108201247 2640:0.0425218361932048 2760:0.0483667033588658 2802:0.059788721208702 2891:0.0579070942571911 2985:0.110139677867465 3158:0.0556947440986143 3185:0.0483667033588658 3222:0.110139677867465 3239:0.059788721208702 3367:0.0556947440986143 3458:0.0529506649814859 3472:0.0978581381917173 3571:0.0489290690958587 3595:0.0508837039568941 3731:0.114206808852125 3842:0.0471057978158249 3871:0.0680594274264161 4390:0.0609147060993938 5181:0.0571034044260624 5683:0.0579070942571911 5720:0.0656335883743631 5942:0.0609147060993938 6311:0.056369693095094 6337:0.0656335883743631 6379:0.0680594274264161 6539:0.062214560260755 6568:0.0656335883743631 6818:0.062214560260755 8650:0.231969968117056 8792:0.0680594274264161
+-1 4:0.0383586827252584 6:0.0354720576633464 15:0.0101275394200723 17:0.0161076032128838 18:0.0632936444235633 25:0.155296230903262 26:0.0127944037234905 27:0.0344287081914893 37:0.0279725303338265 46:0.0247518135419966 47:0.0139910041320088 51:0.0401525155734396 53:0.0227652430094953 54:0.0221332669395461 56:0.0272901683522989 57:0.0220688445315098 58:0.019829110739164 59:0.0183552181157256 63:0.0575045911458945 67:0.0167209905913374 68:0.0181468279947691 75:0.0239633830132419 85:0.144921903450779 86:0.160743947001747 87:0.0275382225026323 96:0.0366294501567913 98:0.0383493281554334 100:0.0730655951491202 122:0.540886618415891 123:0.0299899436171151 132:0.0179282385581648 135:0.0269317563493267 138:0.0247876226002974 140:0.0626656106565999 142:0.0168637721506061 144:0.0175740673714484 148:0.181889707886894 157:0.0299559362778585 158:0.0212168600332038 162:0.0160097348938387 169:0.021546993800971 173:0.0220945521236509 179:0.0322275187429133 181:0.0249507490972955 185:0.0172135307480239 197:0.164805557647647 199:0.0138174807020405 208:0.0664386391598307 214:0.0253254456786185 215:0.018831719982042 219:0.0494323237733157 239:0.100245407164642 275:0.0198779413413854 276:0.0459268420004991 277:0.0267697675991546 291:0.0237925370938106 296:0.0266560106357906 313:0.100562084011851 317:0.017618428859597 324:0.0313201288758399 337:0.135594881977696 339:0.0229921316090975 347:0.0242832555926036 348:0.0293669950089646 351:0.0209777893793597 369:0.0264331741326907 384:0.0320331590859629 390:0.0270021828861469 398:0.0229921316090975 412:0.180764502316817 414:0.0218410709148812 433:0.0239044111230906 434:0.0255786225387689 446:0.0364740073451534 448:0.0267697675991546 455:0.021583175594194 457:0.0407662638258579 458:0.0933654372915166 484:0.0653428230014779 485:0.0204564379893655 490:0.0305910140022673 499:0.0660530175295188 505:0.0212632072366351 506:0.0330744886393613 509:0.0274380886563392 510:0.0267240731767143 515:0.0213567038169847 516:0.0414409086426152 526:0.0354766970568963 540:0.0334160385278418 560:0.0704258199056011 575:0.0308520718005934 585:0.03662704468781 609:0.02093304036361 657:0.0307018686463225 662:0.0308142594312671 672:0.0413022601633137 673:0.0298883463989587 681:0.0323460087212743 684:0.0276651537086838 687:0.0332615435989597 730:0.0284151949498928 738:0.0716379461961103 741:0.0716379461961103 771:0.0627207615251501 789:0.0607474981731133 791:0.0393560830217614 812:0.0331099365955239 819:0.0296888919580179 829:0.131573346365334 844:0.0323917031437146 847:0.0630468323443995 856:0.0221851758433231 882:0.110991025724845 904:0.0360314936894175 912:0.0281122119326413 913:0.0308520718005934 966:0.0295263466676507 996:0.0658242077937179 1003:0.0624804389509346 1009:0.0263457259698797 1078:0.300196993386053 1123:0.0335735335449883 1129:0.0344694213548567 1164:0.031360380762575 1170:0.0393560830217614 1207:0.0336802553285566 1215:0.034649002237614 1216:0.0316478800754299 1239:0.0791506110326437 1263:0.0401507764950663 1307:0.0485977365652009 1318:0.0391426302151769 1322:0.03321069240712 1359:0.0328149681426897 1372:0.0413022601633137 1378:0.0362497330045683 1436:0.0396871795456019 1480:0.0429758010206409 1513:0.0493034630931281 1531:0.0403929060735291 1538:0.0752227417335777 1540:0.0384369036872497 1607:0.0382460539752669 1764:0.0518863580402399 1767:0.044870589995377 1778:0.0457727120396264 1793:0.0467878775657612 1855:0.0382460539752669 1931:0.038534039441419 1942:0.0383409174956266 1963:0.0423265955474409 1985:0.041581968520338 1995:0.0382460539752669 2161:0.0392486544508169 2298:0.0413022601633137 2414:0.0470628441871752 2492:0.056552986179282 2495:0.087735979039654 2631:0.0428085633734576 2651:0.0518863580402399 2666:0.039915666162849 2685:0.0549253986376882 2705:0.0433209909251436 2783:0.0496807747763698 2934:0.0513946475841864 3109:0.054219672109761 3223:0.154183942752559 3388:0.0513946475841864 3504:0.065463543198881 3553:0.0473474607068488 3586:0.146828779409111 4116:0.175773995387907 4189:0.0460148416180891 4445:0.0513946475841864 4625:0.0556984345853602 5131:0.056552986179282 5319:0.0575082935847999 6128:0.06313022912936 6979:0.059841607654321 7199:0.179524822962963 7457:0.06313022912936
+-1 6:0.0483562159028512 11:0.125803384719242 17:0.0970783830779919 18:0.0136236564331624 25:0.26741421063167 26:0.0110157386058886 31:0.00970042120149855 33:0.0140835559882482 37:0.120419086720306 46:0.149175889494411 47:0.0120459888309723 50:0.024157680431286 53:0.0196004418581625 56:0.11748158318925 57:0.0190008559950916 59:0.0158034941828257 65:0.0364157634899286 74:0.0625920087357193 78:0.039104894447344 83:0.00659442169640395 84:0.0149368612397963 85:0.0311937516038864 87:0.331938411701029 91:0.0203361945503028 92:0.016801181892356 100:0.0157270224279512 106:0.0178147637302813 111:0.0318324848267232 112:0.0283366963660841 118:0.0166654266038 132:0.0154358728932526 139:0.0416417045173285 142:0.015179359694026 148:0.0447438811192286 151:0.0401989070232376 157:0.0257914921916752 158:0.0182673135235204 159:0.0459329809932433 162:0.0413522330273914 175:0.0739085050842938 177:0.106252191426933 183:0.0447797383498616 185:0.0148205230429392 197:0.113515564028108 234:0.0182573730352512 242:0.0356668707546283 249:0.0580889205518938 262:0.0714575157231596 275:0.0342290599190426 277:0.092193045892794 283:0.0190786330008627 284:0.0463673892637823 288:0.0264337257936667 290:0.0793974974379846 291:0.0204849225536885 292:0.0752902965097037 294:0.145928687274147 295:0.0216093809561288 296:0.0229503188882919 299:0.0210689750390231 301:0.0230680159187058 307:0.0244408215863967 308:0.0188047472372061 310:0.0261205256864525 319:0.0692634792158047 323:0.0435435761719689 341:0.0425296974164479 351:0.0180614782311535 353:0.0571005325566154 366:0.0320886033950685 377:0.0195884122396322 382:0.0447081157125902 384:0.0275799415774216 396:0.0517003496425842 400:0.0224258650888077 408:0.0449592947288566 422:0.0232078842362589 423:0.0192827018288228 424:0.078639058937037 430:0.0990409058426722 442:0.0216577077360606 459:0.0232483666211093 466:0.0235173820892087 483:0.0247108556170102 485:0.0176126045862295 493:0.0227207138166118 506:0.0142382532726285 507:0.0816499535982976 509:0.0236236732102254 510:0.023008919443337 516:0.0356798352673069 526:0.0305447623683748 528:0.053257236429659 530:0.0209219550439203 550:0.0207353427188424 557:0.0239526127546092 573:0.0323079887199333 599:0.190906955775225 626:0.0240203017352847 639:0.0292812013146309 661:0.0339785755300976 662:0.0265304921249016 681:0.0278492991715712 687:0.0286375573127958 697:0.0272843125938221 702:0.0303176466817729 705:0.116364683053408 706:0.0518187095345145 712:0.0233712412017838 716:0.0243689527685499 756:0.0337923460449546 763:0.0294765480896654 778:0.0243214478790245 791:0.0338848400041811 796:0.0671158216788429 807:0.033093444054847 811:0.0289061747308008 812:0.0285070265622612 827:0.0217390030875964 829:0.0188803587149788 847:0.0271410626100564 851:0.0289061747308008 873:0.0294271967052523 876:0.0245622714620107 882:0.019112233026375 885:0.0356798352673069 887:0.0321609687248306 891:0.0358012851429209 912:0.0242040805477127 915:0.0315351898304052 917:0.0619218108293734 939:0.0370013484530648 953:0.0278101775463945 966:0.025421623696345 969:0.0284640529384596 981:0.0302068000396309 985:0.0326116535983551 990:0.0342675764334865 996:0.0283366963660841 1012:0.0679571510601953 1035:0.0310845049568807 1042:0.0289980601595202 1064:0.0235809624236872 1083:0.0272843125938221 1088:0.0980690366994161 1095:0.0359248846851149 1144:0.0695550499194059 1162:0.0295262507324389 1243:0.0338848400041811 1277:0.0300437609181164 1296:0.0259093547672573 1301:0.0334341551306566 1305:0.0231475973136513 1306:0.0364423948707924 1333:0.0361788469207632 1354:0.0728847897415848 1363:0.0288154826531041 1382:0.100042218871486 1403:0.0363093776712979 1409:0.0334341551306566 1431:0.0297286762631023 1442:0.0382745348588908 1455:0.0337923460449546 1459:0.116456865774995 1472:0.0258797021034664 1502:0.0728847897415848 1538:0.0323826759755123 1594:0.0446731688115668 1608:0.0275799415774216 1649:0.0289061747308008 1666:0.0367162806344489 1672:0.0410192266489974 1690:0.0332617218801556 1722:0.0363093776712979 1739:0.0410192266489974 1771:0.0363093776712979 1781:0.0323079887199333 1784:0.074296736896335 1806:0.0349924093550984 1831:0.0344671097744917 1893:0.0438506672792653 1952:0.0356798352673069 1954:0.036050711365529 1966:0.0461231543272608 1979:0.0376089655899708 2050:0.0327685858617366 2124:0.0711209231198695 2140:0.0405202149955411 2185:0.0318064158370957 2233:0.0386327257731888 2234:0.0392070101889072 2321:0.043473105501423 2380:0.0394094357195707 2412:0.0374520333265892 2424:0.0356798352673069 2492:0.0486910470074995 2531:0.0386327257731888 2570:0.0386327257731888 2599:0.0815305288266982 2705:0.149194201619038 2750:0.0418417281812989 2754:0.0356798352673069 2910:0.0418417281812989 3035:0.0398327890833326 3099:0.0472897250464392 3109:0.466821079095331 3240:0.0973820940149989 3329:0.0466821079095331 3432:0.0466821079095331 3472:0.0405202149955411 3491:0.0415566603626831 3576:0.0407652644133491 3660:0.0563628673660015 3801:0.0486910470074995 3924:0.0438506672792653 4060:0.118388615992539 4426:0.0893463376231336 4754:0.049513548539801 5325:0.0504460238698175 5328:0.0504460238698175 5466:0.0504460238698175 5496:0.0527956740435934 5557:0.0472897250464392 5806:0.0945794500928784 6224:0.0912112882831666 6626:0.0466821079095331 6862:0.0543539282680352 8993:0.0543539282680352 9093:0.0640346877245036
+-1 1:0.49317570152766 2:0.141422803738849 3:0.235474389993648 4:0.199798826994387 5:0.0648320999944801 21:0.0698570690752999 31:0.0440136650176209 44:0.200001761874167 47:0.0546561954578334 63:0.19968273224315 66:0.216751749901648 75:0.374454137371375 95:0.228467049743282 142:0.134751954039862 169:0.0841738515408118 170:0.114722875075638 189:0.172827296006044 229:0.181421349685105 256:0.0785856307572891 267:0.247266415320601 269:0.123308232545809 408:0.0679978493208346 586:0.0848869678208647 1056:0.113394936901883 1164:0.122510084652893 1380:0.118936182441954 2375:0.179758089820422 4924:0.195625052611932
+-1 1:0.408885886531622 2:0.14656487612687 3:0.244036137652875 4:0.155297569882017 5:0.134378734596188 7:0.148624538983429 21:0.0723970420959413 23:0.0860854486427076 29:0.0434638945822526 31:0.0456139829691771 44:0.207273740014183 47:0.056643471244113 63:0.0517357776507095 66:0.112316375205233 75:0.0727629616760401 142:0.127238012558776 162:0.0648164312960446 165:0.116197072668759 199:0.0559409505870642 227:0.0850664521908101 228:0.0905105461803031 256:0.0814429705308552 264:0.0985177516771207 268:0.115154545695273 269:0.127791666907359 346:0.0997068620213226 684:0.112004136642107 766:0.159335608501746 847:0.127624557938704 2024:0.116552069007036 2227:0.158471431220568 2422:0.190536921884225 2531:0.181661441175244 2744:0.164543696734257 2967:0.201135780597222 3611:0.176847446134018 5843:0.484545119190433
+-1 1:0.464385118812949 3:0.369546466015668 4:0.235168728216612 5:0.101745558988308 15:0.0620897381289303 63:0.313376108657928 75:0.146914281372881 142:0.112787033087785 162:0.0981521972752731 269:0.193516252740568 1317:0.470119626926987 6175:0.421504545510849
+-1 1:0.394222493890857 2:0.376823447237086 3:0.15685637151083 4:0.19963775488688 5:0.17274622455267 7:0.191059456411913 21:0.093067669735367 26:0.133176942116006 47:0.0728161775922529 66:0.288769347775887 75:0.0311793552617739 110:0.148475209959375 142:0.123672383607872 264:0.126646300880726 269:0.328556866588693 430:0.119737454349865 631:0.103251307520768 766:0.204828724486736 1015:0.192264965264796 2325:0.272766859548486 9016:0.340704994610235
+-1 1:0.336589047170998 2:0.193040194848451 3:0.0803548312656365 4:0.136361334501295 5:0.0884949306936325 11:0.0708312468221696 21:0.0953539448329655 24:0.126870184744921 26:0.0682242653526269 29:0.057246175896657 32:0.118160548918657 45:0.138446383802226 47:0.0746049600341561 48:0.0964290309259018 54:0.118022372080671 75:0.191671793009048 88:0.120360742283532 137:0.129039612102097 142:0.0980984406148964 150:0.137462159731815 176:0.081703732750397 187:0.146978021773065 221:0.150048617059564 276:0.244898091631847 304:0.238706450386608 328:0.159916938332019 346:0.131323633471792 415:0.13713900021957 496:0.132176331018738 524:0.356372165335286 930:0.138006183426944 1064:0.146045026595307 1154:0.214098076699279 1808:0.316974157470949 2512:0.244076216413851
+-1 1:0.333711224377586 2:0.106327616088531 3:0.132779667825846 4:0.112662875487326 5:0.0731152521677733 7:0.161732742591262 20:0.514237203205721 21:0.0787822270384112 23:0.093677906767043 30:0.156559291383714 31:0.04963698872727 47:0.0616392421928465 63:0.112597411797172 75:0.211147785445058 83:0.101230831715854 142:0.104689263537822 227:0.0925690381240625 256:0.177251954203918 267:0.13942897353569 408:0.0766854675443549 475:0.105527415810381 640:0.243091925355143 1081:0.144784067943567 1202:0.161365349979064 2037:0.214103836000831 3535:0.228592298277586 4155:0.23336376814297 9680:0.30289686784688
+-1 1:0.334058045738276 2:0.159657181316539 3:0.132917663858653 4:0.225559928844147 5:0.1463824796327 6:0.0130366096963742 7:0.161900829145613 21:0.0788641042939054 26:0.112852081527822 29:0.0473464248830995 47:0.0617033029863936 48:0.0797532725596418 63:0.14089304087054 66:0.244698680268196 75:0.132104517722057 142:0.108178648371949 169:0.0950268239793855 227:0.0926652438175325 229:0.0682709826034683 256:0.088718084827818 264:0.107318117123753 269:0.27841400850378 286:0.0730474113900704 325:0.11706392136365 363:0.121784240207104 387:0.0920251564576391 430:0.10146366740013 457:0.0898939455930606 485:0.0902172409764676 571:0.102889475339867 574:0.0976124131737682 636:0.133329870729281 640:0.121672283679332 766:0.173568694007721 1314:0.152017477055739 2375:0.202935235201322 2611:0.15796928718464 2744:0.179242008851114 2833:0.196959696991005 7639:0.288708144351285 8584:0.303211664282185
+-1 1:0.560177360422437 2:0.356969253471021 3:0.222887809599988 4:0.283678765941132 5:0.122733387354157 7:0.271489282410664 15:0.074897459469183 66:0.205165932328547 68:0.134203507669264 75:0.177219404786674 142:0.136052470084517 269:0.233434318343687 998:0.241970781145124 2686:0.333436712953939
+-1 1:0.455165123790609 2:0.290050912309362 3:0.181104708286481 4:0.307332855006233 7:0.220595228523848 15:0.121713992101304 142:0.0829108025822451 513:0.265844935646379 1395:0.37934828471381 3691:0.544530418244636
+-1 1:0.384332473778587 2:0.367369924087843 3:0.152921251894319 4:0.259505815063985 5:0.0842062348636809 11:0.0673985793179916 21:0.0907328432357415 26:0.259671755959633 47:0.0709894085162971 63:0.194516270307299 66:0.140762436824397 95:0.593482242621573 142:0.116680416966149 162:0.0812323118407336 169:0.109327988956546 170:0.149006146086251 189:0.112237116178397 213:0.154845982350919 269:0.160157113393856 408:0.0883180225632501
+-1 1:0.342970775395654 2:0.163916864066549 3:0.204695897100606 4:0.0868417158493712 5:0.112715993188425 7:0.124665279622034 15:0.0687843928482012 20:0.566256261521067 21:0.121452319494899 37:0.0949921513821372 44:0.173859841274623 47:0.095024337565109 75:0.0813774542258446 107:0.192045894079221 142:0.104123319809355 169:0.146343235491762 187:0.187205906272471 189:0.150237307761508 256:0.136627649295655 313:0.227666418774784 324:0.21272057893769 475:0.162683258677425 631:0.134741858530847 1590:0.309283050431708
+-1 1:0.297234916893718 2:0.213087319519106 3:0.177399278095911 4:0.225783583137237 20:0.0981489648146243 21:0.105256402823158 47:0.0823526466546973 63:0.112826194864894 66:0.326588415492784 86:0.135165316068353 97:0.10856949735864 142:0.094750173941949 229:0.0911182357345149 256:0.118408071174372 269:0.185793380227033 276:0.135165316068353 304:0.131747996070806 640:0.162390570691551 1514:0.254992295386983 1808:0.174945880119261 2807:0.236332051539118 3700:0.282230524798249 4300:0.315321878860351 8365:0.385325884472305
+-1 1:0.579760155291678 2:0.277086193295965 3:0.34601935093074 4:0.146797833163908 5:0.0952679446804043 7:0.210735045252101 15:0.058136805145151 44:0.293893870287 75:0.137561007770387 142:0.149609158954257 187:0.158227075130295 270:0.19242443929997 709:0.147982910730973 1590:0.261407096771609 4613:0.330124457648942
+-1 1:0.38289694453002 2:0.0609996253428297 3:0.152350072135129 4:0.129268264399921 5:0.0838917141783219 21:0.0903939448621796 47:0.0707242543094154 54:0.111883234752921 63:0.193789728018007 66:0.140236671740915 75:0.181701653971899 83:0.0387170836387332 137:0.244654788049448 142:0.0929956809604702 162:0.080928899125098 169:0.217839270835019 189:0.447271586759821 229:0.156504242136473 256:0.203377131839782 269:0.159558906798451 284:0.181487745338308 387:0.105479127585909 565:0.476808347090516
+-1 1:0.474378936687216 2:0.453442177930695 3:0.283124478751293 4:0.360344528864253 5:0.155902767326706 31:0.105840350336052 66:0.260613165665234 142:0.11521427078683 269:0.296521240090841 1754:0.393345798242454
+-1 1:0.617732166132236 3:0.210675576022423 4:0.268135738456201 5:0.116008709154731 15:0.0707937569336095 63:0.17865329065378 66:0.193924697142775 75:0.0837546931184553 142:0.171464035685455 269:0.2206442315922 304:0.156461093077339 328:0.20963638755874 346:0.172153196586071 8264:0.480592948859658
+-1 1:0.569375386116652 2:0.310997685814918 3:0.291275476702561 4:0.247145766378129 5:0.106927414807358 7:0.236526080978354 23:0.136999273040593 44:0.164931194238211 66:0.178744050199882 75:0.385991400059243 142:0.118531226245016 204:0.114334315521562 3535:0.33430485124509
+-1 1:0.412110029671557 2:0.262614343301625 3:0.163973606070783 4:0.208696161089105 5:0.0902922243520686 7:0.19972862906383 21:0.0972905420935302 47:0.0761201544131592 66:0.150936014971668 142:0.100090777394389 269:0.171732438073596 387:0.113526647365949 510:0.290792648985943 852:0.15960416686201 930:0.140809029153293 1064:0.149011137739623 1980:0.399394405253548 3621:0.490603952881673
+-1 1:0.372763245930077 2:0.356311305192916 3:0.222476993684862 4:0.28315590310695 5:0.122507171174219 21:0.132002386466976 26:0.188891311361656 31:0.0831685167498427 47:0.103278713681254 66:0.204787780511301 67:0.123430911995716 114:0.15322001349688 134:0.156278313521384 142:0.124484896087175 176:0.113105836630094 228:0.165028953536476 238:0.215172178482332 269:0.233004063619194 867:0.191810342510831 963:0.18513490565241 986:0.195124252496731 1045:0.113353753352638 1059:0.200024821022151 1754:0.309088041618704
+-1 1:0.379918982928287 2:0.302626019224312 3:0.151165177161896 4:0.192394330526732 5:0.0832392506183601 20:0.41817266151551 21:0.0896909105322527 26:0.128344904672589 30:0.356474954424512 31:0.0565100389058232 47:0.0701742000019747 63:0.0961412691095244 66:0.139145988126002 75:0.0600961595189565 142:0.12687456616966 162:0.0802994787092186 169:0.108072518467161 170:0.147295030561912 228:0.112131284161097 229:0.155287038316363 267:0.317470375263603 269:0.158317945478575 408:0.174607641017593 766:0.19739695701647 847:0.158110918297314 986:0.1325799657246
+-1 1:0.274950491162895 2:0.131407762754675 3:0.164099222104025 4:0.0928249057514916 5:0.12048185992259 7:0.133254424077371 20:0.54474298709448 21:0.0649100492784406 30:0.0644959637518237 32:0.0804351310951323 47:0.0507856454257463 63:0.0927709690767674 66:0.100701095490699 75:0.152222296377091 142:0.0667783029386501 144:0.127583459456303 154:0.0775649395836975 228:0.0811503321502607 256:0.0730204864383094 269:0.114575998634559 458:0.112968398564493 546:0.0927040271547796 631:0.0720126277824878 930:0.0939445995932776 997:0.102043914351955 1064:0.0994168609361531 2116:0.16211004679528 2744:0.147527290539349 3382:0.190241255047664 9295:0.539937898226085
+-1 1:0.462321483324639 2:0.294611254266964 3:0.183952137357958 4:0.234123684967748 5:0.101293421876673 7:0.224063549544714 20:0.203548876307826 30:0.650688845924548 31:0.0687667797178871 66:0.16932604718314 75:0.0731307117027171 142:0.0982501011206851 269:0.192656304842709
+-1 1:0.449944385765398 2:0.358405040166716 3:0.179027439647746 4:0.227855813379916 5:0.197163264664349 7:0.218065004133755 20:0.0990497710218357 21:0.106222440734927 26:0.0760005052313048 31:0.0669257812523119 40:0.109712457427229 47:0.0831084750572378 63:0.0759078052953484 66:0.329585827359887 75:0.177932209212091 142:0.127493048292525 256:0.119494814429375 269:0.187498582421304 313:0.19911750369373 641:0.138939872809812 1826:0.355467321015656 2164:0.226629795583358
+-1 1:0.650578316915219 2:0.155466245506508 3:0.291214416289995 4:0.2470939569274 5:0.106904999490639 11:0.0855666459772731 44:0.164896619522622 63:0.0823167936506794 66:0.17870657987944 75:0.154364193695572 142:0.158008504543979 269:0.203329315857788 304:0.14418290831448 328:0.193185305383364 346:0.158643583981257 384:0.206347024169927 1808:0.191457984527332 2171:0.263464233598093
+-1 1:0.558297271215671 2:0.266828384456409 3:0.222139744799882 4:0.1884844481009 5:0.122321464750393 7:0.270578099443133 15:0.074646085680967 23:0.156722686864317 25:0.163518152648789 63:0.0470937319156373 75:0.264936921114375 83:0.0564528979761522 142:0.135595845453405 1010:0.242582094773843 1057:0.296821147512215 3535:0.382433814107772
+-1 1:0.384084599590284 2:0.183566494925017 3:0.152822625746976 4:0.194503835618419 5:0.0841519262805115 7:0.186146138160811 21:0.0906743253341747 31:0.0571296424797795 47:0.0709436240894931 63:0.0323984695942429 66:0.140671652471911 67:0.0847864570493465 75:0.121510166129862 134:0.107349806485956 142:0.112718325438925 176:0.0776940152544663 234:0.107524938603979 246:0.30986190940331 269:0.160053820497232 363:0.140021926527702 506:0.083854742191623 538:0.131337600051493 553:0.191608567334462 766:0.19956131334012 986:0.134033637004757 1008:0.194900467516393 1059:0.13739990754493 1844:0.194900467516393 4002:0.237245416172571 4114:0.240082871985861 4565:0.271637618823092 5923:0.268589795303549
+-1 1:0.508468405081339 2:0.27772977397007 3:0.346823040802387 4:0.147138796556204 5:0.0954892209819359 7:0.211224513893131 15:0.0582718379441532 44:0.294576489701936 66:0.159623517874185 75:0.275761034071854 142:0.141135672600105 186:0.0965157587902313 270:0.192871378387355 1590:0.262014260028482 8818:0.376664145387056
+-1 1:0.626129564581692 2:0.29924763883216 3:0.249129395501036 4:0.317077544986551 5:0.137183341943243 63:0.0528155507453199 66:0.229321041783974 75:0.198084243659595 142:0.152070540283959 229:0.25592247309358 269:0.260917592229603 383:0.292702891825305
+-1 1:0.252652548938401 2:0.161001136700845 3:0.100527399358424 4:0.213242472707448 5:0.1107110188512 7:0.122447753259406 15:0.0337804334499159 20:0.333710270586374 21:0.0596459723805303 26:0.0853515322105043 30:0.1777964051188 32:0.0739120007002998 47:0.0466670298060856 63:0.0426237132830662 66:0.277603306133477 75:0.159859849769488 110:0.0951560117236386 134:0.0706151776604763 142:0.0613627143558547 176:0.102214933961109 186:0.0559505977794317 189:0.073782455094606 228:0.074569200361291 256:0.13419733818501 269:0.105284111258539 346:0.0821457972052501 408:0.116117034287658 472:0.179661883368168 508:0.0764991225364285 513:0.073782455094606 624:0.126339898853894 966:0.0984852042786318 997:0.187536708558916 998:0.218268494745411 1380:0.101551129282732 1433:0.0950612536969487 1446:0.102907163825636 1545:0.126040963337578 2306:0.13869676157802 2807:0.133923016943868 3592:0.167030289697006 3673:0.168417947141186 6780:0.421142079102775
+-1 1:0.456885233141983 2:0.43672056062825 3:0.363578238066608 4:0.308494293109131 5:0.200204707499504 7:0.221428877447325 20:0.100577713952335 21:0.107861029352619 31:0.0679581791395326 47:0.0843905073690573 66:0.334670022201654 75:0.144541594848073 142:0.138706883091524 256:0.121338142839478 267:0.190892707308288 269:0.190390937754727 408:0.104990348415616
+-1 1:0.573372141881587 2:0.31318074785794 3:0.293320097824375 4:0.248880617041921 5:0.107677996536006 7:0.23818638628968 31:0.0731011839768849 44:0.166088936068053 66:0.17999875198451 75:0.272090618662867 142:0.134283669122792 144:0.114024893989967 269:0.204799527364671 5904:0.380155046385014
+-1 1:0.349143254888566 2:0.22248918977737 3:0.138919886480307 4:0.176809229863855 5:0.0764963694927166 21:0.0824254060583776 47:0.0644896667416995 66:0.127874324216561 75:0.11045601659084 142:0.0847977901233203 229:0.142707852031743 270:0.154509169453584 930:0.119294652438964 1064:0.126243551234422 1590:0.209899499036557 2239:0.442024712694182 4979:0.270068926134457 5144:0.581980735544964
+-1 1:0.2934303775573 2:0.18698653359243 3:0.116752405121342 4:0.0990638242768004 5:0.257159297998463 7:0.142210678740116 15:0.0784651125263314 20:0.258380481031765 30:0.275323385160383 118:0.149966937779847 142:0.0772054674563494 187:0.42710655406032 339:0.1781360821319 363:0.213946025491013 6821:0.576228035323314
+-1 1:0.283511909094238 3:0.263213921248743 4:0.0638101939244681 5:0.124233428256148 11:0.033145433873644 15:0.0252709507388913 20:0.416077935646469 21:0.0446208137629864 29:0.0267883091549329 31:0.0281134833707493 40:0.0460868635334443 44:0.191625017059551 47:0.0349113404097809 63:0.159432791216549 66:0.276897945853916 67:0.0417233951913007 75:0.179385370882268 95:0.364830138614364 97:0.0920506342995622 142:0.118588171645054 170:0.219835792319881 176:0.0764664125680913 180:0.0568403642340235 189:0.165588708995227 192:0.0595678202792286 204:0.0442797075946464 205:0.0583644110039842 229:0.038627292193831 238:0.0727347282121919 269:0.0787624467029782 276:0.0572999478771305 304:0.0558512607180675 328:0.149666045497324 345:0.0541291542278172 346:0.0614528051470577 387:0.104134508457819 434:0.0638255832275307 441:0.0520121084539254 510:0.0666837924573045 667:0.0710441444070679 723:0.0757017607037384 757:0.0700802247616499 766:0.0982040744613113 1409:0.0968979124468906 1590:0.113628635918651 1665:0.07949847279302 2163:0.0932080000086014 2449:0.0925852281978628 2548:0.102720162300825 4088:0.125992511376751 4740:0.24252900054415
+-1 1:0.175304546723683 2:0.0837837320757271 3:0.0697515629740817 4:0.118367695643017 5:0.192043827170714 7:0.084961137232409 12:0.0461183932440065 20:0.463093904795275 21:0.0827714598249429 26:0.177665078732084 27:0.0199200997159878 29:0.0248461118030412 30:0.0411217148338245 31:0.0260752086651931 32:0.0512843026308261 42:0.0409304368571642 47:0.0647604193305883 63:0.147873646400257 66:0.19261678520643 75:0.180244599783283 103:0.0651244324526375 107:0.0654409856988822 108:0.126659286355614 142:0.0904759168314786 165:0.0664239936725078 176:0.0354612346911492 189:0.0511944166044171 205:0.0541328932982173 213:0.0706294851463672 227:0.145884573998848 229:0.0358267487113846 231:0.0733415724319643 256:0.232784150020426 259:0.0832244345252294 267:0.219733690870701 269:0.365260185953713 346:0.056997373685048 355:0.0411742216167225 363:0.0639090460474078 408:0.120852792589434 719:0.0736356436574156 829:0.0507513316113238 997:0.0650617573939213 1363:0.0774574327609472 2305:0.109579033094526 3592:0.115895008174242 4114:0.109579033094526 5923:0.122590211558918 7334:0.141917365103027 7425:0.292212057996617 7428:0.146106028998309
+-1 1:0.453493960011576 2:0.123851131901361 3:0.15466266205033 4:0.196845727841054 5:0.0851651440458552 11:0.136332178380736 21:0.0917660749987384 31:0.0578175027730221 47:0.071797809411713 63:0.0655771163374536 66:0.142365386931294 75:0.0307432974469002 98:0.196797722879074 137:0.124184256274999 142:0.125876405351244 176:0.0786294775783388 185:0.0883348892108312 238:0.149584464317177 255:0.14118917742942 269:0.161980922840657 304:0.114862337720962 328:0.153899765576046 346:0.126382337085157 505:0.109116664268935 766:0.201964099311739 808:0.158323959466764 986:0.135647447504045 3897:0.242973551282256 4497:0.335940076470684 6393:0.30067386398959 6830:0.29021366051018
+-1 1:0.592088199963311 2:0.282978165929246 3:0.353377121168292 4:0.149919348549927 5:0.0972937263197166 7:0.215216124243187 15:0.0593730286495671 42:0.103681403885672 44:0.300143242080746 66:0.16263999959932 75:0.0702430554536217 142:0.157284291388616 231:0.185782458649662 269:0.185049033292171 3765:0.370103017848777
+-1 1:0.369227561283116 2:0.0588219447197781 3:0.146911189549464 4:0.249306800158818 5:0.0808967882361712 7:0.178945692456045 21:0.0871668899243626 26:0.0623665548245571 29:0.0523310401233603 31:0.0549197718218507 47:0.0681994053890525 63:0.0311452422990878 66:0.135230236357499 75:0.146012435668777 83:0.0373348875621626 142:0.0672568082249447 199:0.0673535622577625 218:0.163467799480019 269:0.153862669524575 386:0.114758225959353 415:0.125364295702884 472:0.131279338621938 505:0.103647892354278 518:0.125659708857329 862:0.554589707994304 994:0.164968410288363 1303:0.220860109731775 2252:0.238573189725351 2864:0.212926404508904 4740:0.236890555225978
+-1 1:0.392170923250875 2:0.0937156057148145 3:0.234060114477696 4:0.29789823207575 5:0.128885427811889 11:0.103159757034328 21:0.138875005347987 29:0.0833742431708142 47:0.108655853115244 63:0.0496208559764306 66:0.215449923860463 142:0.0833420774412398 269:0.245135269499948 808:0.239600971469725 851:0.260736176975184 862:0.441788440143265 963:0.194773834782221 1808:0.230823108005981 2640:0.317634354073355
+-1 1:0.415821412807706 2:0.0662448493077687 3:0.248175480928727 4:0.140383758872646 5:0.0455526893212844 7:0.151145509819899 20:0.0915380145359888 21:0.0490833609393121 26:0.105355145410765 27:0.0236251830371192 31:0.0309251251865892 44:0.210789519153455 47:0.0384028388928642 63:0.140302187735271 66:0.152295315498883 75:0.295988670881787 95:0.48158035315803 98:0.0526310712550422 108:0.0751087812351817 142:0.119928208473264 162:0.175775595245223 170:0.0806072221447403 194:0.0642845306759293 199:0.0379265476801438 200:0.0783832348266054 269:0.0866395135803742 408:0.0477770256538229 436:0.071667329841041 508:0.0629520132397379 631:0.0544541537239316 640:0.151452544084865 667:0.0781493004829354 684:0.0759359679117163 977:0.111556458983412 986:0.0725544012471818 1047:0.0914375293575994 1094:0.0835675995116496 1269:0.0828855425434101 1388:0.104978673098932 2992:0.124365530219875 3611:0.239796178918149 7009:0.179685880949113
+-1 1:0.449914018956174 2:0.143352340544267 3:0.179015357060925 4:0.227840435359355 5:0.0985749790440866 11:0.157798613241115 21:0.106215271767617 26:0.0759953759466281 47:0.0831028660546882 63:0.0379513411335016 66:0.329563583566523 75:0.213504240651029 137:0.143737917631213 142:0.136590475466732 150:0.153119838715163 176:0.0910102271459663 269:0.187485928115878 304:0.132948199179963 328:0.178132337313729 346:0.146282101313705 415:0.152759869597183 867:0.15433954038948 1149:0.168446499382184 1808:0.176539609022283 9793:0.441762494677134
+-1 1:0.417244811963443 2:0.265886448764953 3:0.166016673960831 4:0.281728613627822 5:0.18283448331294 75:0.26400166251177 142:0.0928930585785723 187:0.303663164190375 229:0.170543494834795 339:0.253301504471925 363:0.304221634854053 499:0.242566007646971 829:0.241587913272308 1007:0.375915316196432
+-1 1:0.29263852631514 2:0.0932409658583831 3:0.174656005606232 4:0.148194735948107 5:0.192348995921045 11:0.0513186427715546 20:0.128841607721695 21:0.0690858237188319 26:0.0988596660107745 47:0.0540527728191936 63:0.197478168237704 66:0.321538107367038 75:0.0462900048407074 142:0.121418536607077 189:0.170919224979303 227:0.162351547806405 256:0.155436038333619 269:0.121946868506005 328:0.115862992670248 346:0.0951465763481677 940:0.31210748776843 1269:0.116663078310261 1808:0.114827031041156 3297:0.375504486926153 5627:0.487793999766762
+-1 1:0.395769657737732 2:0.252201551241878 3:0.157471969329103 4:0.267228336442869 5:0.173424183617548 15:0.105831274142142 75:0.125206886483264 142:0.0881119499769207 187:0.288033938621413 229:0.161765799465655 1590:0.475861135679297 3087:0.532221871325194
+-1 1:0.313041886373037 2:0.0498709589046377 3:0.124555587741207 4:0.211369570397536 5:0.274346618144827 7:0.15171537284514 21:0.0739026294688505 26:0.0528761826474182 29:0.0443677808318285 31:0.0465625830058399 47:0.0578214433351532 63:0.184840908324368 66:0.343956405666831 75:0.272345915621886 142:0.114044563981086 176:0.0633232395183203 189:0.182836064952431 208:0.0915249535391584 227:0.086835515850993 269:0.521797020168079 313:0.138532940821436 387:0.172471394949387 510:0.220888289116674 1269:0.249594136248492
+-1 1:0.514516018511894 2:0.245903902946784 3:0.307079569273583 4:0.390833188291465 5:0.169093661029922 63:0.130202030484616 66:0.282663579682227 75:0.122080383369731 142:0.124962521091187 269:0.321609827200956 2216:0.410316984074388
+-1 1:0.586477350672998 3:0.350028387365384 4:0.222747985074599 5:0.0963717345703341 7:0.213176655734866 15:0.0588103876179052 44:0.297298972431519 63:0.148412370350909 66:0.161098762117497 75:0.347887029906771 142:0.146891303367066 269:0.183295439423581 592:0.169089705469524 3555:0.290793073912921
+-1 1:0.489462622586172 2:0.187144057576471 3:0.350552284270556 4:0.198294558201848 5:0.0643439844922843 15:0.0392656071382632 20:0.064649537442415 21:0.0693311209977808 26:0.0496053393955906 27:0.0333709915620172 32:0.0859136276804711 44:0.198495965201754 47:0.0542446934966709 60:0.0869883801590319 63:0.19817933751836 66:0.215119843959004 75:0.23227181452308 142:0.11887770467317 169:0.0835401135958724 176:0.0594061566221617 256:0.0779939660630137 269:0.122379855092987 298:0.11361536551516 304:0.0867808134403638 631:0.0769174614047644 723:0.11762420916334 766:0.15258795155816 1164:0.12158771638934 1317:0.297304081723946 3897:0.183571419867769 4619:0.194152207820449 6004:0.253809505202363
+-1 1:0.558433517565288 2:0.177929000672349 3:0.222193955577713 4:0.188530445671258 5:0.122351315967498 31:0.0830627086877805 63:0.0942104492528203 75:0.265001576075525 142:0.129977730465677 162:0.118030217939155 196:0.202652622062192 229:0.228252577354553 269:0.2327076328376 1590:0.335721552517426 6149:0.423974317509473
+-1 1:0.552909925111277 2:0.151002055380804 3:0.282852237622666 4:0.239998690691038 5:0.103835238324416 7:0.229686110269987 15:0.0633649548955637 21:0.111883240195775 26:0.0800507192544523 32:0.13864329472146 44:0.160161637609111 47:0.0875374865499217 63:0.0799530791594876 66:0.173575047007485 75:0.262380385441601 142:0.124695442485239 269:0.197490744783012 499:0.137757925950518 997:0.175889618123414 9404:0.430161526194701
+-1 1:0.398662048387008 2:0.190533530790079 3:0.237934224979968 4:0.201885984518735 5:0.065509355248469 7:0.144908310859798 21:0.0705868166396012 26:0.303022620653183 44:0.202091039316173 47:0.0552271502092608 63:0.126105423129661 66:0.109508001331465 75:0.0472957244779379 142:0.142211151071971 162:0.126391504919887 169:0.170106312881687 189:0.0873163504780516 199:0.109084390947941 228:0.0882474082119632 256:0.158813118906918 269:0.124596346741691 314:0.0931127596910335 472:0.1063086065353 537:0.260997839074001 640:0.217804012486788 1394:0.30268872622909 3700:0.189268811869841 3707:0.21986026051046 8276:0.258406394520587
+-1 1:0.307780144658115 2:0.196130826117209 3:0.122462004229308 4:0.207816780390066 7:0.149165276066261 20:0.271016186159051 21:0.145320885023245 30:0.288787657289768 31:0.091559878450996 47:0.113699111644296 63:0.0519240066852703 66:0.225450026339437 73:0.26103670130109 75:0.0486851289387479 142:0.0560638271227105 189:0.1797628782901 213:0.248006723861434 256:0.163478565060456 263:0.343970759158117 491:0.286690196110352 829:0.178207039998182 2040:0.327265277582223
+-1 1:0.379007966722376 2:0.181140207324376 3:0.113102021108089 4:0.0959664919344311 5:0.062279737021552 7:0.13776431562111 20:0.375452924364179 21:0.0671068790225288 23:0.0797950526764706 29:0.0402879210412201 30:0.333393895479031 31:0.0422808991670098 47:0.0525044457915482 63:0.0959107298152241 75:0.134892120593658 83:0.0862286512158847 95:0.438945145300334 142:0.0805447559742119 169:0.0808600267228619 170:0.220412742782524 267:0.118765914737762 408:0.195962563641773 631:0.074449838729346 636:0.113452775318095 686:0.131185767826401 713:0.11092539859959 716:0.106216133651342 850:0.203375739258997 1045:0.0576263567393012 1620:0.134157629275297 1835:0.149360931219999 2340:0.153981512015335
+-1 1:0.3447582741746 2:0.219694890324123 3:0.137175155586975 4:0.116392424585066 5:0.151071263486667 7:0.167086681957688 15:0.0921905121163241 75:0.109068770823635 142:0.0627995945089928 187:0.250908784039822 506:0.150537752516913 608:0.293619243378433 2734:0.445525143725517 8695:0.59591153607288
+-1 1:0.420059042968997 2:0.401519697804236 3:0.250704633759447 4:0.212721611673125 5:0.138050748409714 21:0.148750706337991 26:0.106428818213773 31:0.0937208481054034 47:0.116382605049411 75:0.0996683624192979 142:0.095645048807911 176:0.127456582717807 187:0.229283482641461 229:0.128770331896605 238:0.242472991513216 506:0.137563219630518 631:0.16502728571272 723:0.252364074656379 986:0.2198814063852 1317:0.318934639431407 1433:0.237072648301931
+-1 1:0.460436836549341 2:0.220057706843457 3:0.274803388734523 4:0.233169283184984 7:0.167362618317817 44:0.233406112305371 66:0.252953688036806 75:0.327746679409888 142:0.104838842162415 204:0.161802794263651 339:0.209641929752371 506:0.150786359042609 829:0.199947317521237 3534:0.460390131381941
+-1 1:0.340608767488306 2:0.217050645110496 3:0.135524116966758 4:0.114991526679988 5:0.149252971469033 7:0.165075628544586 15:0.0910809081558233 20:0.749808676251315 51:0.180553608901361 142:0.0620437393001933 187:0.247888848754685 1124:0.295553276796007
+-1 1:0.317838094512766 2:0.227857710354409 3:0.189695911594753 4:0.0804780099935391 5:0.104456236700618 15:0.0637439161685696 20:0.629713634207422 21:0.112552370556595 26:0.0805294716267014 30:0.111834356810619 44:0.161119502381131 47:0.0880610143799875 63:0.0402156237920577 75:0.0754141659959349 95:0.368101730906573 142:0.110967213323137 170:0.184839297121281 186:0.105579172621372 187:0.173487576201024 229:0.0974342002745886 267:0.199195454173482 408:0.21911366265769
+-1 1:0.371831745627376 2:0.177710458371616 3:0.147947363063954 4:0.188298882085785 5:0.0814673581814198 20:0.572979579248955 21:0.0877816832764353 23:0.104378927214316 30:0.174443382052754 31:0.0553071242975753 37:0.0686571568254338 47:0.0686804199243293 63:0.0313649115786822 75:0.0588169080870928 83:0.0375982127845436 97:0.0905447362345272 142:0.090308232753806 228:0.109744374465569 229:0.15198148322422 256:0.0987499052068645 339:0.112866041562775 409:0.0741067969773627 491:0.173176401928688 801:0.175489945199328 829:0.215293403150541 1164:0.153944927714868 4512:0.238561358654299 7471:0.321353892416304
+-1 1:0.24329893981665 2:0.116280459171643 3:0.145208566799731 4:0.061604366650881 5:0.0799592373766785 7:0.0884359034060473 15:0.0487947401249961 21:0.0861566719126251 28:0.105170756625184 29:0.0517245511302179 31:0.0542832808016583 44:0.123333875925753 47:0.0674090104607305 68:0.0874318745521543 75:0.115456183199782 83:0.073804392043336 106:0.0996909105180573 140:0.100641497074885 142:0.0553977812480851 169:0.103813959085609 187:0.132801398226901 256:0.0969218505131422 284:0.086490196633828 386:0.226856478000633 408:0.167727288655192 430:0.2216920354707 506:0.0796768598464387 518:0.124203379494798 575:0.29729211872412 631:0.19116819088543 716:0.136367965730518 766:0.189618599714214 829:0.105653949707143 986:0.127355699048387 2466:0.225425173097489 3557:0.478726449509907 9683:0.331249661852307
+-1 1:0.286594740019666 2:0.27394585435332 3:0.228065174921349 4:0.145134109155515 5:0.188376462843688 7:0.138897795248159 20:0.252361351963276 21:0.0676590124241571 30:0.268909560926308 31:0.0426287725448366 47:0.0529364351595198 63:0.0725248888940247 66:0.209931643764578 75:0.0226669947902639 95:0.55319580257615 142:0.0783071856856884 165:0.108592546818802 189:0.0836946376543653 213:0.115467849017925 256:0.0761129294164396 270:0.253658145361208 339:0.0869931473552773 506:0.0625704026234335 847:0.119272159486284 1113:0.135790547928665 9924:0.247688198585532
+-1 1:0.320177660807887 2:0.204031059860217 3:0.12739482625021 4:0.108093864690051 7:0.155173717322505 20:0.70483208575612 31:0.0952479496000567 42:0.149511370625521 63:0.10803105586119 75:0.101292373600343 83:0.0647502961297775 95:0.49441504202183 142:0.0712825692451824
+-1 1:0.411684916615251 2:0.262343442867098 3:0.163804458717379 4:0.138987253386942 5:0.180398166397513 7:0.199522598533584 15:0.0550435567996042 20:0.181254830658763 30:0.57942101533019 66:0.150780316575581 142:0.0916552344775609 269:0.171555287079056 339:0.124963098110587 409:0.0820496122050391 2189:0.287890656384563 7199:0.325241383249706
+-1 1:0.549523165770601 3:0.218648634158823 4:0.0927611292039787 24:0.172609363824385 31:0.0817373621028288 56:0.395967742269577 75:0.0869244057640195 142:0.127903808919969 162:0.116146930616384 229:0.112305292356049 284:0.130233110751627 339:0.166802606815952 409:0.109521045900502 1235:0.251370512098101 1311:0.261923207731972 7598:0.457995237966496
+-1 1:0.471198444061157 2:0.300268037762849 3:0.187484172877879 4:0.318158741780994 7:0.228365757864107 66:0.345154498977485 75:0.149069765564878 142:0.10490499440923 409:0.187821550153939 3400:0.558255762775434
+-1 1:0.417313484916184 2:0.265930210141983 3:0.16604399809975 4:0.281774982414718 5:0.36572915087969 7:0.202250477375148 142:0.101354560954781 187:0.303713143112882 339:0.253343194534322 409:0.166342793837679 3089:0.528330049888428
+-1 1:0.58811388069853 2:0.187385806515441 3:0.234003413785578 4:0.297826066700726 5:0.12885420552108 7:0.285028683283787 15:0.0786326593235841 63:0.0992176708052813 66:0.215397731457555 75:0.279086230311709 142:0.13093439535777 270:0.260262760281181 318:0.277030648208655 409:0.117212251156659 1018:0.24905449700336
+-1 1:0.491588623991266 4:0.0331926431536798 26:0.0332138681768358 29:0.0278693648078441 30:0.230626844415896 32:0.0575245314141841 42:0.0918216327415154 74:0.0629076512388137 75:0.326592975631259 83:0.0198830292514151 142:0.0577071265655844 161:0.149774325031998 162:0.0415607663945888 172:0.0601778438660492 181:0.0647713570198949 185:0.0446857824310391 186:0.0435454579650182 190:0.131587784766058 227:0.0545452268325434 229:0.0401861159456879 303:0.205688107719125 339:0.0596868478494975 375:0.0543995153777338 408:0.0903720359794726 433:0.0620550966692971 437:0.0690229443116609 472:0.0699139893104108 491:0.183161443600236 521:0.151339949305587 582:0.0647238818674523 586:0.0564091966637024 608:0.167467922474471 709:0.0669212050732599 852:0.152308048088028 930:0.0671860541148977 944:0.0839692175527261 1045:0.0398633118068163 1055:0.167467922474471 1064:0.0710996334830044 1081:0.085312324593199 1241:0.382771963120531 1314:0.0894815297183449 1317:0.0995318114857219 2263:0.128969723013809 3546:0.11112967915146 4591:0.28516920199461
+-1 1:0.256852033038754 2:0.163677229685281 3:0.102198323388398 4:0.0867147596574976 5:0.112551210708962 7:0.124483028165981 21:0.121274765149888 31:0.0764095453624624 47:0.094885418983013 63:0.129996560000101 75:0.203146215954927 84:0.117656620549498 142:0.0883754343076261 185:0.116740232637521 187:0.186932225026952 256:0.136427909736279 264:0.165030460524955 309:0.147534483834593 430:0.156027669943981 640:0.187103851119271 1096:0.262675207678656 1314:0.233767745080924 2508:0.345408666391894 2744:0.275632782785473 4321:0.33192543154984 4340:0.383536001971809
+-1 1:0.353836805271375 2:0.33822018476356 3:0.211181090280015 4:0.179186085257429 5:0.116287071068294 15:0.0709636259528577 21:0.125300182423117 26:0.0896503328660603 27:0.0603104532305904 47:0.0980349068758963 75:0.0839556617941369 138:0.173686766894416 142:0.0913088392855816 187:0.193136980044344 229:0.108469710662537 239:0.175604786178971 409:0.105780555048312 538:0.181491565388731 1317:0.268654646997127 1391:0.261738377664002 2998:0.327842460541226 8900:0.4587027707744
+-1 1:0.0879598975418082 4:0.044543669469526 6:0.010297900629677 26:0.0891443058043641 30:0.123798106476767 32:0.0771964348195849 47:0.0487407767414757 83:0.0266825115109812 88:0.0786338611453464 142:0.0213631649089128 179:0.0561358670599766 205:0.0814843169297486 218:0.0584136142641126 286:0.0577017339070368 433:0.083276336329673 455:0.0751897957489657 457:0.0710091765027216 505:0.0740751147630287 513:0.077061132584341 574:0.0771061613792126 882:0.0773323880704955 944:0.112684520330786 952:0.0959355270138977 2091:0.136362063965609 2976:0.139055106736743 3416:0.325991969285887 3609:0.164945417056136 4112:0.491861676196206 5005:0.177429650136152 5538:0.612347833316596 7127:0.228056822345066
+-1 1:0.34154822224521 2:0.217649306332701 3:0.135897914674018 4:0.23061738428187 5:0.14966463560517 7:0.165530934159966 15:0.0913321242154129 75:0.108053229081941 142:0.0898659176900566 187:0.24857256679243 216:0.231932590197463 409:0.136142462614098 4955:0.477688338438928 6285:0.569320709545953
+-1 1:0.506483039705914 2:0.161376454452935 3:0.201523487551271 4:0.256487487401378 5:0.110969102809973 7:0.24546639460623 31:0.075335472995629 63:0.0854461510792993 66:0.185500293998848 75:0.200290633763607 142:0.128137000060903 269:0.211059088566574 1045:0.102677779505632 6120:0.41002210044062 9875:0.459715212248618
+-1 1:0.449953416742196 2:0.215047340296926 3:0.402819824169896 4:0.227860386746379 5:0.147875416493182 7:0.16355203573933 21:0.159336859138953 44:0.228091823641613 47:0.12466521473079 68:0.161695199808777 75:0.106761468327614 142:0.143432558151779 176:0.136527295007893 187:0.245600917642165 238:0.259729085292244 499:0.196185909561107 641:0.208413992274249 867:0.231529583244987 986:0.235529723111811
+-1 1:0.592151757108507 3:0.353415054099569 4:0.224903162249905 5:0.0973041702223155 7:0.215239226413536 15:0.0593794019909085 44:0.300175460671857 63:0.149848320278834 66:0.162657458035529 75:0.351252978138306 142:0.103369343519788 187:0.161608968304153 592:0.170725717008236 3555:0.293606614944164
+-1 1:0.112776682936241 2:0.215598546965531 15:0.0904715645728661 24:0.212544031353632 45:0.231937492633273 48:0.161546347660187 54:0.197721401623073 129:0.272299402686378 142:0.047933400900432 186:0.149848228780052 209:0.16588193997071 723:0.271016979240426 867:0.232123036993766 5134:0.490660815369557 7389:0.523409412505783
+-1 1:0.565869820398075 2:0.360596735285682 3:0.225152770708464 4:0.382081970640636 5:0.247961180746648 7:0.27424812627535 15:0.151317118228904 75:0.0895101443247047 142:0.125982101794689 187:0.411829734618663
+-1 1:0.385170909564587 2:0.245447570287986 3:0.153254855372494 4:0.130035968393186 5:0.0843899339407323 7:0.186672616980263 20:0.678325439385064 110:0.145066130304778 117:0.155183784701173 142:0.0701609758176997 187:0.140160181503605 270:0.17045277690815 356:0.143365142173691 709:0.131085729862636 2624:0.190812763745404 4184:0.275707104669857
+-1 1:0.458261348054808 2:0.175214376232256 3:0.218803990254619 4:0.185654077268205 5:0.12048462829237 7:0.133257485928516 15:0.0735251650648895 20:0.484227114592638 21:0.129823081495873 44:0.185842645381531 47:0.101573624704011 63:0.0927731007200492 68:0.131744589517483 75:0.173972336071065 142:0.105734742448525 187:0.200108550644357 227:0.152541991158937 256:0.14604432853046 375:0.152134492341129 1395:0.229157262605035 3710:0.339676428633823
+-1 1:0.287269376316698 2:0.366120954019012 3:0.114301017099475 4:0.193967667917997 5:0.125879930641524 21:0.135636559833287 24:0.180466948004709 32:0.168077895376161 47:0.106122092203514 48:0.137165819890916 54:0.167881345238818 88:0.171207568296379 142:0.0581418656971602 178:0.180950409358488 187:0.209069412695219 221:0.213437191941591 409:0.114506701479164 472:0.204277999172849 506:0.125435383331076 1165:0.335669806503286 3588:0.352869906552993 3621:0.34198510450024
+-1 1:0.140615740552726 2:0.268819303373104 3:0.167847917220944 5:0.184851235048142 32:0.246817792051807 45:0.289191537110633 48:0.201424254716445 54:0.246529163551208 142:0.0170759478931234 209:0.206830093118552 409:0.168149959106587 506:0.184198429482116 5986:0.70316969585044
+-1 1:0.220063580657063 2:0.105175526967126 3:0.262681926819004 4:0.33432642623564 5:0.289292112772548 11:0.231549094201095 21:0.155857199648106 47:0.121942727919134 63:0.0556886938527887 66:0.241796007230729 142:0.10689540791673 270:0.292159512734882 276:0.200144476601188 339:0.200394712390564 524:0.29124735121859 963:0.218591562807237 1045:0.133838478530569 1808:0.259049086174569 2640:0.356475960622713
+-1 1:0.316862301685881 2:0.302877554353376 3:0.189113527314772 4:0.320923739751755 5:0.208271092470155 118:0.24291385307794 142:0.0673378899853339 187:0.345909906068563 1133:0.432576987360759 2216:0.5053836200111
+-1 1:0.171592279032501 5:0.225572504039758 11:0.180547988282503 15:0.137654535924512 63:0.173690710039559 142:0.0416752890409533 187:0.374645193236428 1754:0.56912393656959 2531:0.60988557894239
+-1 1:0.224317618859815 2:0.107208669881446 3:0.133879909082666 4:0.113596424619907 7:0.0815364476668532 20:0.370355917650225 21:0.0794350337362374 31:0.0500482916304653 44:0.113711804059919 47:0.0621499983832345 63:0.0851478138625151 75:0.0532243504997085 83:0.0340232174810004 88:0.100267059119148 142:0.0885314606838143 189:0.0982616524748883 256:0.0893603512575075 267:0.140584312388332 283:0.0984341781148932 286:0.0735762314181697 313:0.148903616918925 448:0.118915054081121 455:0.0958754865360494 475:0.106401838969449 508:0.101879643116646 535:0.124519878859421 684:0.122892484488157 693:0.156133588558145 764:0.121444445819118 993:0.144297903820489 1164:0.278614400410704 1202:0.162702458426278 1731:0.163047236518018 2264:0.17835536825731 2422:0.209059740283516 2706:0.204404366204588 4897:0.280433312813239 8008:0.305406737287161 8247:0.280433312813239
+-1 1:0.429791427325868 2:0.273881694977929 3:0.171008820758616 4:0.217650177122361 5:0.0941661721061029 7:0.208297897121301 15:0.0574644537295588 20:0.189226685832998 30:0.604904807416353 66:0.157411857608155 142:0.100035747390268 269:0.179100541999976 356:0.159973423624492 513:0.125512553979611 1395:0.179100541999976 3691:0.25708747600286
+-1 1:0.256824338159538 2:0.0613723429911978 3:0.153280955895411 4:0.195087171831983 5:0.084404306218853 7:0.0933522044071176 21:0.0909462665914754 44:0.130190214068144 47:0.0711563910250205 63:0.097486907413359 75:0.213280527458723 137:0.12307483433072 142:0.0974623955428943 187:0.140184051899231 227:0.106861772455896 256:0.10230989962387 264:0.247518999357641 268:0.144658893634684 373:0.107322672672371 375:0.106576303218122 387:0.106123622239192 505:0.108141851313914 533:0.188292891599365 766:0.200159817428882 882:0.112897126642635 1070:0.232793941409528 2142:0.195484993268192 2744:0.206702297164424 2967:0.252669830060709 9752:0.378256807541975 9753:0.378256807541975
+-1 1:0.311013944114539 2:0.148643657295327 3:0.278434561492364 4:0.157500209916307 5:0.102213506576117 11:0.0818115801222197 20:0.102698892097763 21:0.110135812196803 28:0.134441900355828 44:0.157660182257714 47:0.0861702982678403 63:0.0787043465621581 75:0.0368974921720124 83:0.0471728217962477 137:0.149043466521707 142:0.108584689119579 187:0.169762707053307 189:0.136238714759743 227:0.129409469385775 238:0.179528289401312 256:0.247794314448626 356:0.173644571314015 408:0.107204588765576 409:0.0929785345845202 518:0.158771686215085 940:0.248779053413167 986:0.162801359908732 1598:0.190486310939664 2216:0.248027853288707 2910:0.299312430720012 7379:0.368563194731867
+-1 1:0.386048784162987 2:0.184505242476419 3:0.230406226617063 4:0.195498516044713 5:0.126873410936885 7:0.140323558384546 15:0.0774238889532331 21:0.136707042227408 26:0.0978117637485619 32:0.16940441403796 44:0.195697083115638 47:0.106959638005846 75:0.0915986711285387 142:0.105481328174798 154:0.163359504251013 179:0.123187860787005 187:0.210719448096548 631:0.151665781440671 886:0.194644840346288 986:0.20207861493728 997:0.21491466827458 1990:0.300872786085814 8762:0.482623433685813
+-1 1:0.549730313278198 2:0.350311942976996 3:0.21873105565154 4:0.27838828894047 5:0.120444466782832 7:0.266426133606576 15:0.0735006566968106 66:0.201339683145946 75:0.0434785863350878 106:0.150166746887266 142:0.144641417718521 270:0.24327657183348 339:0.166865484500488 829:0.159149012090111 1573:0.276890372378538 2825:0.289688102289224
+-1 4:0.0175054707235397 6:0.0404703070343274 18:0.0216636422458513 25:0.0607469159986787 26:0.0175166645901969 29:0.029396053063239 31:0.0154251140708307 47:0.0191549158489113 63:0.01749529902584 78:0.0310913023799879 83:0.0629166743084172 85:0.0248013548480128 105:0.128971512516472 106:0.028328126890205 114:0.0284174382144198 142:0.00629672401817343 144:0.0240604447291274 166:0.030196633963882 169:0.117998922496309 171:0.0349923344254854 173:0.0302493861523255 186:0.0459308851073071 194:0.0641288410432066 199:0.0189173470034234 215:0.051564563650012 220:0.0324659523378 227:0.0287666115351246 228:0.0306076209215884 229:0.0423875177956127 256:0.0275412719725581 283:0.0303378672163594 299:0.033502807412343 306:0.0317573692134596 341:0.0338142757113102 351:0.0287204396815603 384:0.0438562136696552 413:0.0349923344254854 423:0.0613247340759714 432:0.0380170389954178 433:0.0327272423880584 434:0.0350193851447913 465:0.034413305333272 472:0.0368719444056561 485:0.0280066637503385 496:0.0339364366219436 502:0.0279348838314637 507:0.0216392639379619 508:0.0313997754043853 518:0.0352935796878253 549:0.043214841393693 550:0.0329722823465131 572:0.0438562136696552 586:0.0594993014664675 599:0.0379463106366576 631:0.0271611360586002 638:0.0494289912608242 643:0.032927325545091 690:0.0505769370504946 714:0.0418817901429755 723:0.041535525100843 747:0.0446009159967443 776:0.0504675340494497 778:0.0773494470206633 787:0.0929703026973044 814:0.0449265790666074 904:0.0986605711812158 930:0.0708665168900904 950:0.0440989405969399 953:0.0442223231416919 981:0.0480333097550545 982:0.0453304168354203 987:0.0330400606736279 1007:0.0934313980744617 1009:0.180348086230986 1045:0.0210235151972281 1144:0.055301442943705 1146:0.0463340699053881 1175:0.0428800125661625 1207:0.0461112333683313 1305:0.0736162526578878 1312:0.0526235035509395 1423:0.0590714371010723 1439:0.0476889623247499 1462:0.0497304843900998 1467:0.0497304843900998 1489:0.0948750662708784 1551:0.0433287328001279 1595:0.0506874286564896 1598:0.0423434678742497 1610:0.111991377336023 1639:0.0546480595094234 1649:0.0459651218552328 1651:0.0554709777601958 1697:0.055301442943705 1782:0.0498328290296371 1820:0.0516133242893154 1828:0.0551344576197714 1919:0.0590714371010723 2042:0.0519814568351349 2151:0.0617279188740524 2154:0.055301442943705 2164:0.0522338384895817 2213:0.0561762506103177 2308:0.0603204280352717 2326:0.0608622093765547 2403:0.0608622093765547 2555:0.0546480595094234 2625:0.12811344333334 3082:0.0762560583452189 3316:0.0623449839937556 3337:0.067500779622254 3398:0.0703637952123307 3730:0.086430839065284 4097:0.0839529828295511 5029:0.74231502386735 5258:0.0941277635496161 6940:0.268876054066198 6996:0.0896253513553993 8197:0.0802166891981528
+-1 1:0.49630457907351 2:0.316266753359181 3:0.197473600933673 4:0.251333024983969 5:0.108739028837466 7:0.240533415931311 15:0.0663574694762678 21:0.117167110880669 47:0.0916715888354924 66:0.181772415093242 75:0.157012418406164 106:0.135572738676695 142:0.100449531207829 269:0.206817571169795 339:0.150648603590834 709:0.16890799997218 829:0.143682059270716 1001:0.227026527668572 9644:0.450476614263764
+-1 1:0.0634255436603232 2:0.121252502712777 21:0.0898406505205557 24:0.119534644834183 47:0.0702913566215821 48:0.0908535759335965 54:0.111198406130764 129:0.153141032384583 142:0.0231066153983792 208:0.111263447916795 209:0.0932919106338634 227:0.105562674676271 283:0.111328593686541 409:0.151690024614242 472:0.13530620619753 603:0.159000197820663 671:0.0906960929538234 2262:0.249598172089233 2887:0.507352879888324 5153:0.470128284790899 5218:0.499196344178467
+-1 1:0.313353539758667 2:0.099841217320707 3:0.124679590861264 4:0.317370003653806 5:0.137309873947759 11:0.109902674610654 21:0.147952408604781 29:0.0888239036377572 47:0.115758016621676 63:0.105728531067887 97:0.152609420466411 142:0.0824475186160486 187:0.228052991109949 189:0.183018090045998 256:0.166438894533838 386:0.19478446406234 851:0.277778894029327 862:0.23533271393639 963:0.207505000032296 2640:0.338396154318907 4332:0.467905051873271
+-1 4:0.0204125019164205 6:0.0330336820448839 15:0.0161680539945699 29:0.0685553675151024 30:0.0283657488909292 31:0.0359733451907049 48:0.0577394694991008 54:0.035334530937057 63:0.0612019231930308 68:0.0289704026496402 75:0.0478202619585419 83:0.0122274797707323 84:0.0276961615523377 142:0.0220271525030113 144:0.0280560221372861 169:0.0343985784448591 179:0.0771741646515428 199:0.0220588402368245 205:0.112022569893437 218:0.0535370357813468 227:0.100631143663 228:0.0356904496077819 264:0.0388478801652556 309:0.0347293580228629 319:0.042809808549936 322:0.0817963338700434 339:0.0367056606631792 351:0.0669797504219007 386:0.0375842537119413 398:0.0734113213263584 408:0.0555761512899373 411:0.0707103973766754 457:0.0325405376051672 478:0.0370076088112195 493:0.0842582053012222 502:0.0651477333857647 506:0.0264007917413845 508:0.0732283051098194 531:0.0531002063329298 539:0.0438431639584077 571:0.0744895291753956 574:0.035334530937057 595:0.0670833833834571 631:0.0633432543008163 640:0.0440439174902511 720:0.0469839353390214 811:0.0535982809474958 829:0.105024768605925 850:0.0432589290667638 876:0.0455437476175885 886:0.0406467348906246 950:0.0514221938766084 951:0.123034906007465 988:0.557881054164683 993:0.0518586962244062 1017:0.0556083895268842 1027:0.0493142665673838 1064:0.0437241890622901 1067:0.0501945900072306 1080:0.0477150844191256 1155:0.0549343458746517 1236:0.0520075293967053 1269:0.0482078926963561 1324:0.0563194576158614 1472:0.0479865481025085 1482:0.0559083645666842 1548:0.0519328989686138 1795:0.0603259607012129 2042:0.0606137135083544 2402:0.13017477488271 2703:0.0730735916236299 2707:0.0746942469831581 2753:0.0670833833834571 2907:0.0703374889093137 2951:0.539385063804301 3051:0.0709692407109004 3095:0.149388493966316 3955:0.156269325646087 4424:0.0935378058577055 4871:0.239833045353351 5632:0.104508909540024 7989:0.0955338017998077 8349:0.104508909540024
+-1 1:0.36792805431263 2:0.175844757604958 3:0.219591197119119 4:0.0931610091523686 5:0.120918104511649 7:0.133736915977058 15:0.073789691843333 20:0.607461566669771 44:0.186511264843137 106:0.150757264981116 142:0.111700159938797 187:0.200828495580138 339:0.167521668974609 399:0.203080013346997 829:0.159774852185909 7342:0.405821212215081
+-1 1:0.208548356664519 3:0.248936620952934 5:0.274154380904759 31:0.186119824674547 63:0.211098729796476 142:0.050650956395092 187:0.455333071058048 199:0.22825719741307 436:0.431322776688122 998:0.540499623875457
+-1 1:0.480469650991276 2:0.204117367995138 3:0.254897432265519 4:0.216279179964775 5:0.0701797584757311 7:0.155239358083965 15:0.042826860150333 21:0.0756192107913274 23:0.0899168460273854 44:0.216498853874004 47:0.0591644971666764 54:0.0935961133867559 63:0.108076754584469 75:0.177336638083595 83:0.09716652968404 95:0.494624186846068 142:0.126418008633502 169:0.0911169092410885 170:0.124185760836611 189:0.0935414547172659 355:0.0752327468958208 795:0.148093252987365 2375:0.194585387928666 2744:0.171867028368961 8272:0.266962129895346
+-1 6:0.030662505929388 15:0.0525262572245351 26:0.132715778855949 29:0.0556801218846468 63:0.0331384754297275 75:0.0621427756493793 88:0.117068095737466 142:0.0198780859033262 150:0.133701678557732 176:0.15893721202217 180:0.118144015369307 218:0.0869647056298369 238:0.302361639077601 275:0.103096499226895 312:0.138959801464239 314:0.244685345216505 355:0.184542812678155 404:0.128746998014965 406:0.143750944848033 457:0.105716658853794 505:0.110281149882911 513:0.114726657391859 655:0.116088140770935 867:0.134766701630929 895:0.318855929341632 997:0.145803359915632 1230:0.214213250752016 1731:0.190367900107038 2557:0.519441289817753 5991:0.310367162842218
+-1 1:0.242909317420696 2:0.232188491968234 3:0.144976027727625 4:0.369034275231373 5:0.159662379024631 11:0.127793595500517 21:0.172037398776223 47:0.134602121417876 63:0.0614699741385711 95:0.562647094477223 142:0.0811199641270269 170:0.282528672751329 187:0.265177456343384 227:0.202143771821989 375:0.201603767411277 1808:0.285942074164374
+-1 1:0.495969917201314 3:0.0370013330652293 4:0.0313954436567852 24:0.0584204569638807 29:0.0263603916242525 30:0.174511733002468 32:0.054409893678406 51:0.0492954639263733 75:0.397169688901666 83:0.0188064723167372 92:0.047914885746443 142:0.116693839409124 213:0.0749340944545568 227:0.0515919020922513 256:0.0493942988512682 299:0.0600861021717018 303:0.12970081687214 375:0.0514540801131928 386:0.0578064523705622 387:0.051235529810243 408:0.0854788861075667 437:0.0652857306099148 440:0.163845708047349 472:0.0661285304111958 579:0.170453437891903 640:0.0677417366891668 710:0.0836441743593904 930:0.0635482979381878 997:0.0690270340188982 998:0.080338547731907 1001:0.0850775407466114 1064:0.0672499784575389 1159:0.0738056987528799 1164:0.0770026234481537 1241:0.543070442412873 1377:0.0692271884322272 1690:0.0948583030544244 2263:0.121986720176647 2476:0.133131578553176 2723:0.0946169037776774 6806:0.160739903150062
+-1 6:0.0398745053746518 20:0.0374883192688241 26:0.0862939260326507 29:0.048272143280646 30:0.159786233446899 31:0.0253300439669775 60:0.201767764911502 63:0.0861886709242496 75:0.0404062284950435 83:0.0172195606806123 88:0.10149273564341 132:0.0806132704823914 142:0.0241267599593548 168:0.0493577906663673 189:0.0497314073342256 199:0.0310647447490467 218:0.0376972300744931 228:0.100523390635342 242:0.0465672255674668 243:0.062663457206075 267:0.0711514159195815 274:0.0718215338788735 275:0.0893799944031004 286:0.0372378180359764 317:0.0396101146949165 341:0.111054879276217 369:0.0594276065982043 382:0.116743233428429 408:0.156532159934156 411:0.0497895723897381 441:0.046862531283615 473:0.0585120646186196 485:0.0459905852823446 502:0.137618139952973 504:0.0705960005120816 507:0.0710689729028485 534:0.0506545050105847 535:0.0630210123766123 580:0.0601329050463237 586:0.048852796654518 631:0.0892042376345748 643:0.0540709520812783 655:0.100643159080864 658:0.0614644986257821 662:0.0692772528151142 713:0.0664542447993743 800:0.0586063011562229 827:0.0567655664191171 914:0.0851565723099284 936:0.0777630257654245 969:0.0743262274320805 994:0.07608657041259 997:0.0632024539675777 1080:0.0671955960624307 1149:0.0637578693750776 1159:0.0675778895077066 1271:0.0847557928924816 1284:0.0931683044769006 1294:0.075480709717554 1316:0.0922487115054876 1455:0.0882396334433175 1472:0.135155779015413 1707:0.0759637771577098 1721:0.0870777928068133 1731:0.082520172720173 1788:0.0818319880503553 1795:0.0849550815366881 1838:0.101864885895821 1849:0.0821728340385248 1992:0.173708101976348 2024:0.0647228950470159 2151:0.101365273014514 2280:0.0902678028065616 2394:0.102378574215451 2706:0.206903029627197 2733:0.0864146386549162 3117:0.577732527042427 4492:0.102907154107524 7285:0.309140065775429
+-1 1:0.381120557231785 2:0.242866510518907 3:0.151643269072602 4:0.257337091164074 5:0.167005024780317 7:0.184709618605046 15:0.101914013328257 142:0.0848505559166357 187:0.277372590452108 325:0.267112063373604 9682:0.691856998654306
+-1 1:0.166661713634933 2:0.318612166619507 3:0.198938052056894 5:0.219090860522158 45:0.342757908567898 48:0.238733667559036 54:0.292193268669128 142:0.0303583374800952 209:0.245140818623257 409:0.199296040558416 592:0.384407412006466 867:0.343032106569381 1140:0.396364360995221
+-1 1:0.465840296379225 2:0.296853594207751 3:0.185352230595459 4:0.235905642996451 5:0.204128769136871 7:0.225768938049538 20:0.102549061948213 21:0.109975132126403 31:0.0692901762091189 47:0.0860445821241458 63:0.0392947613471489 75:0.147374645750977 142:0.117854643504303 162:0.196919525698249 189:0.136039952469421 256:0.123716400361054 267:0.194634251445573 269:0.38824529417005 356:0.173391236623084 1308:0.212352141617932 3199:0.322320001175976
+-1 32:0.258047058084365 142:0.0178528382463509 238:0.339444996150931 2674:0.508678107474957 3118:0.508678107474957 4234:0.548054059851801
+-1 1:0.618524036271834 2:0.236490168023215 3:0.147661948557446 4:0.25058083058866 5:0.162620388816199 31:0.110400855733516 118:0.18966984216514 142:0.150223355827819 187:0.270090307555791 304:0.21932632451679 328:0.293867168277473 346:0.241323431393743 1133:0.337760929965003
+-1 1:0.557698103235646 2:0.266542022633826 3:0.332852014640118 4:0.282423248191059 5:0.183285282931145 7:0.202715785052953 15:0.111848962581153 44:0.28271010436925 75:0.132326294610798 142:0.135450323178788 187:0.304411880931328 1124:0.362944639732164
+-1 1:0.227986756087281 2:0.217924539275517 3:0.136069767199571 4:0.230909016276522 5:0.1498538971231 11:0.119942897194156 15:0.0914476201466658 21:0.161468686706471 26:0.115528335479981 47:0.12633315737074 142:0.0553720366150456 176:0.138353944866497 187:0.248886904385388 238:0.263204098086549 298:0.26460446038361 325:0.239680115719756 499:0.198810754387478 506:0.149324685305245 7925:0.620804479605448
+-1 1:0.429193252831593 2:0.273500512306595 3:0.170770814348134 4:0.289796341696044 5:0.188070227293179 7:0.208007992573776 15:0.114768951869671 75:0.135780876163779 142:0.112926500622805 186:0.1900920387285 187:0.312359021531513 356:0.319501552086307 3167:0.51871298319594
+-1 1:0.406868004828023 2:0.259273898243899 3:0.161887867663999 4:0.137361035587615 5:0.178287420972933 37:0.15025290736054 75:0.128717993151292 142:0.0823480219036749 187:0.296111113215537 304:0.240456470644447 346:0.264572803673207 496:0.266290701470555 4454:0.598362152583742
+-1 1:0.420264755383159 3:0.286659896558847 4:0.182422102506567 5:0.0789247742763526 7:0.174583548899214 15:0.0481634639922397 21:0.0850420302418869 23:0.101121276711248 26:0.060846250750423 44:0.243476517221183 47:0.0665369144248141 83:0.0364247782603458 142:0.109362158116108 238:0.138623849155069 298:0.139361389388072 491:0.671086370655376 499:0.104709281606826 1409:0.184676040299375 2134:0.191516199676428
+-1 1:0.487116867306163 2:0.399101073248516 3:0.166129646854096 4:0.211440245612286 5:0.09147945028912 24:0.131148921950391 31:0.0621042027230992 45:0.143115531991206 48:0.0996811305672763 54:0.122002713998787 66:0.152920628299066 75:0.132090656665975 142:0.0887309864239124 209:0.102356379803494 229:0.170659548190034 269:0.173990497459962 356:0.155409108459327 409:0.166428596716733 499:0.121365535845835 1432:0.387487833043137 5555:0.347985650296646
+-1 2:0.0665990295424186 6:0.0163141841878151 26:0.0706122867410565 29:0.0592499364610316 31:0.0621809347421405 32:0.244592932400218 33:0.0902773866878335 63:0.0352630794827376 94:0.0979371204924571 129:0.168228183530312 142:0.0211525278119724 150:0.142273682081563 165:0.158399730138151 176:0.0845635695007677 193:0.158239575589586 221:0.155300697166114 373:0.116462652385679 506:0.0912690159733073 531:0.367140775735837 641:0.258178866278674 713:0.163133828926441 997:0.310302474865387 1433:0.157290498018433 1471:0.188948425549182 1931:0.212669281127415 4515:0.567293899833269
+-1 1:0.282192889952522 2:0.269738280350753 3:0.168421716683025 4:0.28580994675945 5:0.185483161502708 21:0.199859483596904 26:0.142996353911099 31:0.125922093183539 47:0.156370130384362 114:0.231984235996054 142:0.0771044542938116 176:0.171248980459469 187:0.30806225776098 238:0.325783507608466 298:0.327516820062094 1076:0.452834358204862
+-1 1:0.335667539394535 2:0.0802132052840559 3:0.200337092933511 4:0.254977512667051 5:0.22063162693861 11:0.0882966577970887 21:0.118866108027956 47:0.0930008848021516 63:0.127414677943403 66:0.184408229976597 75:0.119466898268529 142:0.0764295846643425 270:0.222818479226804 276:0.305284517245137 304:0.148783077450693 339:0.152833103539837 384:0.425861090439817 496:0.164768076130822 930:0.172035440552448 1045:0.102073302248667 1064:0.182056483752541 1808:0.39513293875794
+-1 1:0.382372730729609 2:0.243664449654465 3:0.152141493791928 4:0.387273860197123 5:0.167553720624887 7:0.185316482981217 15:0.102248852329001 20:0.336698779866624 21:0.180540377937978 30:0.358777286434625 47:0.141254855309958 63:0.0645081385893935 75:0.0604842970585734 142:0.116085453876371 187:0.278283899485946 227:0.212134763848767 256:0.203098693735949 375:0.211568069623606 1045:0.155034541561818
+-1 4:0.0203215315088844 6:0.0140941988803489 11:0.105557738883571 26:0.142341682731847 27:0.0820778537940449 29:0.0170624608728218 30:0.0564786680457251 37:0.0222287869202989 41:0.021632879586866 59:0.0291724936929767 67:0.0797255019511105 72:0.0292371733962022 75:0.0380857168467676 83:0.0121729867535394 85:0.028791086053412 88:0.0358740199440377 132:0.0284938823917412 142:0.0255838172795306 151:0.111307886854008 153:0.0407475335439728 159:0.0565267226274227 162:0.0508894949950613 177:0.0490341146775577 178:0.0758309770859057 180:0.0362037217478274 204:0.0282033768508499 218:0.0532984424926237 229:0.0984125810805693 237:0.0403729608132682 238:0.138982282947186 265:0.0443822478778161 284:0.0285306602706354 286:0.0263244500884985 289:0.0408748495202272 299:0.0388923192765392 317:0.0280014926298484 328:0.047663908731952 342:0.0438879775736095 346:0.0391415552688489 355:0.0565507835490165 369:0.0420110292784058 375:0.0333050146292464 396:0.0477181851818579 400:0.331176586794968 404:0.236717220627638 409:0.0479863797315129 434:0.0406528650317685 455:0.0686055649054478 457:0.0323955173631847 471:0.0489740183551532 475:0.0380689503293045 480:0.0345549775417176 483:0.0456150564739472 509:0.0436081697982453 515:0.0339428441261608 539:0.0436477724033058 667:0.0905012650987332 706:0.0478274285289587 732:0.051408473027401 739:0.239965246400748 772:0.0435293277310104 804:0.0885137844546199 827:0.0401291589776203 851:0.0533594147134108 856:0.0352595593409181 888:0.140669310976538 909:0.0413638071688231 963:0.0797205661756333 1042:0.05352903081595 1103:0.0615577155553245 1123:0.0533594147134108 1170:0.0625497924619575 1235:0.05506868907097 1279:0.0720111232603487 1403:0.13405074584872 1967:0.0752507265313095 2056:0.0612432941674837 2091:0.0622105455723497 2200:0.0677764963144696 2211:0.0723742638320676 2257:0.135552992628939 2353:0.0720111232603487 2392:0.0720111232603487 2575:0.0654262551611994 2661:0.0861729363652804 2769:0.0723742638320676 2777:0.0767116055668891 2781:0.0802492715460737 2823:0.271105985257878 2931:0.0713141622936542 2946:0.0727479316708545 2976:0.0634391545796481 3061:0.155572895375186 3074:0.0802492715460737 3139:0.0772378271128608 3406:0.0951080456176999 3653:0.0713141622936542 4126:0.0772378271128608 4448:0.166592947332077 4492:0.0727479316708545 5136:0.0951080456176999 5444:0.0885231775185506 5511:0.0931209450361487 5725:0.0872945685112523 5989:0.100334749470212 6320:0.10404315487012 6843:0.0974582867709702 6895:0.10404315487012 7369:0.269644025295564 7420:0.100334749470212 8160:0.301004248410636 8804:0.10404315487012
+-1 1:0.221465315822414 12:0.349573061824975 30:0.311698711746027 75:0.210190312339704 142:0.0672351860867889 227:0.368597094120989 303:0.46332217136233 1081:0.576510113970196
+-1 1:0.528019812740841 2:0.336477072600481 3:0.210092709563362 4:0.356525199466189 7:0.255904165694095 15:0.141195790182808 66:0.386776349144939 75:0.167045945696442 142:0.138929093873078 356:0.393070367695681
+-1 5:0.045925957826113 6:0.0327207894613328 15:0.0560521898566863 20:0.092288096656933 23:0.0588419990065772 29:0.0594177641437553 40:0.0511114451404518 50:0.0776462180179278 60:0.0620885496922349 67:0.0462722533254191 86:0.0635470265913717 114:0.057439705859889 142:0.00212124431458693 169:0.0596273259119163 218:0.0464011948343955 256:0.0556687252796845 264:0.0673398528754305 286:0.0458357085250207 339:0.0636264778989054 367:0.0698197424307406 402:0.0623501926160448 415:0.0711706296737337 426:0.0736408918336825 455:0.0597274523423834 480:0.12033314073921 496:0.137190335229308 504:0.0868960071553541 507:0.0437390923925833 530:0.0672461367854532 539:0.0759987983383731 636:0.0836616791222357 644:0.0779454887308375 720:0.0814430872361507 758:0.085694286197481 764:0.0756561203700509 795:0.0969129082053137 853:0.086561832680576 865:0.121396559184111 965:0.0817087112941434 987:0.133566674966716 1020:0.104570475941231 1031:0.100519419593131 1080:0.0827104786941859 1314:0.190775515146674 1380:0.0842523703426717 1472:0.0831810403933639 1916:0.0999100164325187 2340:0.227096284121115 2369:0.106635837449055 2422:0.13023772943045 2807:0.111109858656011 2825:0.110459234233232 7929:0.761035672637886
+-1 1:0.122013692244667 2:0.233257213042185 24:0.229952516378625 31:0.108891613300999 32:0.214166280400347 45:0.250934405139006 48:0.174777851533403 142:0.0444509151570332 193:0.277110061877821 209:0.179468551881219 409:0.291810821188849 484:0.315765958822057 671:0.17447489662409 8695:0.632698666404918
+-1 1:0.126881162203525 2:0.24256250047577 24:0.239125970151273 31:0.113235606559159 32:0.22270997674189 45:0.26094488557106 48:0.181750232470016 142:0.0616322498715974 209:0.186628058070817 409:0.303451977026982 484:0.328362752594301 671:0.18143519183579 8695:0.657938798844805
+-1 4:0.191169368963832 63:0.0955291442150688 75:0.0895702970633467 97:0.275775085288059 142:0.022921229903955 166:0.329763852162205 297:0.431747740074573 304:0.334650299917466 448:0.400239988627323 507:0.236312664606 1046:0.496539504950764
+-1 4:0.0277295296793654 6:0.0416695265466943 20:0.0180811947995252 26:0.0138736306583345 27:0.0746656416063111 29:0.0582059987665144 30:0.115601048656711 34:0.0766350672522351 37:0.136494246443953 38:0.026114861358586 41:0.0147594578757974 42:0.019177221579832 46:0.107358662936404 47:0.0151711660864932 51:0.0217697199145812 57:0.0239303843073386 64:0.0556016135041073 65:0.0458633661233083 67:0.0181314309536587 70:0.0368778333260711 75:0.0259847299205926 79:0.0869485043438263 82:0.0240424226550556 83:0.0498315588056761 84:0.0376240765054008 85:0.0196432851251937 89:0.0510326649130846 124:0.0370617053477091 130:0.0477752676832294 139:0.0524451105029021 142:0.0224422237013782 159:0.0385664690697424 162:0.0173601797829131 171:0.0277147924590506 175:0.0310277061676402 183:0.0281986334765938 185:0.055996552809766 190:0.0274825009130663 194:0.0253958123876621 199:0.0299660113955628 203:0.0242998524873869 214:0.0274616845924424 215:0.061260610499342 218:0.0181819557044337 225:0.0305423476382984 228:0.0242419911513334 229:0.100715880593333 239:0.0271753139937885 240:0.028855624044459 242:0.0224600913879596 251:0.0362347309510626 264:0.0527732195903101 286:0.0718414967595191 295:0.0272156576028697 317:0.038209138942429 330:0.0318784327234256 347:0.0263315842265611 355:0.019291442553533 357:0.0296719676858255 368:0.0390708036356001 372:0.0316411765654152 373:0.0228821342468923 381:0.0308120587984568 387:0.0226264861876557 389:0.0273173337798942 408:0.0377489379540365 414:0.0236833976482404 422:0.0292288720506786 424:0.132054605148097 433:0.025920783664021 465:0.0272561871278567 471:0.0668269758557956 480:0.0235758135378219 502:0.0221251174140824 508:0.024869397051702 534:0.0244314493269795 541:0.0330528268144166 550:0.026114861358586 570:0.0371864576714137 580:0.0290030279086991 581:0.0479872030313567 582:0.0270355511445356 594:0.0306911649174873 621:0.044638350301232 626:0.0605041216934738 631:0.0215122900822498 643:0.078237763387042 653:0.065488404938148 656:0.0316411765654152 662:0.0334134879278978 663:0.0299987504658499 667:0.0308731346783371 678:0.0346877916486603 710:0.0369386978690371 714:0.0331714114157725 732:0.0350744425428994 733:0.0723570667419711 789:0.0658716397642092 800:0.0848001698945098 838:0.0422188467513492 849:0.120174547075775 856:0.0240565283378833 858:0.0321576590758545 880:0.0377039534765552 890:0.0336624165642661 906:0.0750126143016727 969:0.0358486862874878 971:0.0799430649635009 982:0.035902808866645 984:0.0367573534782134 989:0.0387648635238684 1000:0.0778330066765448 1005:0.0337895738350346 1017:0.0377708351019679 1018:0.0347828724812754 1021:0.0343174257100895 1098:0.107871799716799 1140:0.0325566710281479 1196:0.0402340860493609 1218:0.0389933151047516 1229:0.0361785333709856 1262:0.148136297902262 1292:0.0769384181681464 1331:0.0362347309510626 1363:0.0362912899328516 1380:0.0330136512870242 1382:0.0839979260292972 1393:0.0366977268677369 1400:0.048890035163744 1424:0.0298066547186415 1426:0.038043566765099 1482:0.0379745868714292 1483:0.0898730215301622 1491:0.0368173870994198 1576:0.0355307640330882 1660:0.18035787701102 1827:0.0431578594957126 1836:0.034182463091977 1865:0.038043566765099 1920:0.0482043718764298 1947:0.0444929768863505 1949:0.0398857279830381 1954:0.04540360590875 2056:0.0417844428343623 2142:0.0416791135352259 2149:0.0491310061650442 2198:0.048890035163744 2291:0.0543005260244333 2387:0.0435375540569483 2473:0.0664928343204404 2549:0.0519930608222675 2594:0.0547516449759565 2601:0.0684553576114469 2602:0.048890035163744 2642:0.0444929768863505 2708:0.0498962617725622 2851:0.0574374434064308 2889:0.0484270392470697 2979:0.0992674164099036 3246:0.05346228334776 3264:0.0547516449759565 3492:0.0587931818882455 3556:0.0557298623529553 3604:0.05346228334776 3621:0.048890035163744 4119:0.0574374434064308 4321:0.159214004775858 4349:0.0552271603130477 4451:0.0664928343204404 4806:0.0684553576114469 5147:0.0684553576114469 5596:0.0648893360362491 5792:0.0648893360362491 6162:0.120793360344874 6355:0.241586720689747 6993:0.0648893360362491 7013:0.0664928343204404 8487:0.638869411658273
+-1 1:0.154379416120931 2:0.29513173229148 3:0.184277118307161 15:0.123846055325128 142:0.018747366796133 169:0.263490476381299 2973:0.612367586385694 5219:0.628486753209908
+-1 1:0.288807804362253 2:0.138030622447039 3:0.172369708571784 4:0.219382236745167 5:0.0949155462931383 7:0.104977765660387 15:0.0579217557238301 21:0.10227220580984 40:0.10563243461804 44:0.146403374944611 47:0.0800178098600306 54:0.12658530644688 75:0.137052166339498 83:0.0438047211270012 92:0.111605099170412 142:0.0789118682433566 185:0.0984481898096189 186:0.0959359169262106 187:0.157641789426013 228:0.127860378531016 355:0.101749527582367 766:0.225086601244447 986:0.302354953481532 1314:0.197138645513515 1392:0.269163362551372 3666:0.242075653940305 4740:0.555883538795549
+-1 2:0.0705438322527946 6:0.0345610162968939 11:0.0388264288533445 26:0.224384409731134 29:0.0941391550465518 57:0.0645061278439951 63:0.0747035739360974 75:0.0350218844946716 82:0.0648081355296403 88:0.197928654654628 100:0.0533917692763352 134:0.0618811189716994 142:0.0403297869518039 169:0.188942352844258 174:0.0633351598292231 176:0.0447862251338073 204:0.0518690726187024 218:0.0490108116970099 228:0.0653460872302564 275:0.0581022274914327 284:0.0524709823672238 286:0.145240566813181 341:0.072192171221668 411:0.0647322721602089 472:0.0787201756599687 473:0.0760725330577224 502:0.0596398968836672 505:0.124302580719291 513:0.0646566507796079 530:0.0710280793222199 643:0.0702985669105348 655:0.065423943729515 750:0.199805157541298 856:0.0648461584451157 952:0.160985691735231 1045:0.0897687841524272 1836:0.0921413674730465 1851:0.117012611963415 1863:0.104091740131116 1917:0.107514941481139 2385:0.679906332092673 3360:0.121129701514507 6452:0.174914023624042 7055:0.321088381527759
+-1 1:0.148032958394408 2:0.282999019849581 11:0.155759064383984 24:0.278989600786005 31:0.13211261264812 32:0.259836969873971 45:0.304445850890078 48:0.212049008175466 142:0.0359533445412531 209:0.217739994462779 409:0.354039111163565 457:0.239011157689269 959:0.385353785076389 1242:0.440011078955726
+-1 6:0.0202875294405021 11:0.182330823067279 18:0.0361995260276811 26:0.0878100203864509 27:0.0196908067093901 32:0.152081963151868 63:0.0584686107036541 72:0.042084691798945 75:0.0137053746075048 83:0.0175220904173277 88:0.258189643108616 129:0.209200422577213 134:0.145298391941373 142:0.0175361728495928 162:0.03662578258932 176:0.0701061066897488 180:0.0521125093416175 215:0.043081692883663 229:0.0354143600664593 280:0.0708428446760095 312:0.0612942088456876 317:0.0403060231325465 346:0.0563412976931228 377:0.0520485261932662 405:0.0643128552207355 434:0.0585167133779191 437:0.0608270629090897 455:0.0493762515208349 469:0.0781912387676236 506:0.0378325761853926 580:0.0611893775237011 599:0.0634075491072706 647:0.122170270289665 673:0.0683761526609559 730:0.0650059953752536 784:0.132811572578211 799:0.0682228038985718 856:0.0507534592253675 952:0.12599945682622 964:0.081008013702688 966:0.0675479988192965 997:0.128625710441471 1059:0.371942647549784 1111:0.0839699661608879 1140:0.34343352713507 1149:0.0648780286981488 1190:0.0731828547465809 1424:0.0628848358191773 1603:0.195867969766418 1731:0.0839699661608879 1931:0.0881550731619449 2401:0.457914159646433 2642:0.0938694252345848 2949:0.100794265335592 2975:0.096131102335473 8188:0.280567612089494
+-1 1:0.461829362383355 3:0.367512656751996 4:0.311832627431885 5:0.202371198943759 15:0.123496051053193 44:0.312149354600465 63:0.155825717259862 142:0.149555075348349 187:0.336110986826698 2216:0.491067137043224
+-1 1:0.420458442119473 2:0.100475367358959 3:0.250943007910462 4:0.106461935466328 5:0.0690910046829531 21:0.0744460704964031 31:0.046904979726174 44:0.213140136867747 47:0.0582466317865855 58:0.165103076374216 63:0.05320003744168 75:0.0997631287621393 83:0.0318863696277318 142:0.121265586974874 229:0.12889276887785 356:0.117374682580641 535:0.233398671688187 4656:0.457325212686004 9680:0.572450981002968
+-1 2:0.0750988570860287 4:0.0397867153255793 6:0.0367926258149312 26:0.119436470777102 29:0.0334059110261451 31:0.0350584472758828 42:0.0550314891420685 63:0.0795271938549995 75:0.0745665046697135 84:0.0539835488959673 142:0.0357782389790182 162:0.0498172553959774 169:0.268189848318253 173:0.137502582435297 199:0.0859913008712529 214:0.315219259720342 215:0.0585983846773102 218:0.052175446467302 228:0.208696478883529 229:0.192678063963647 286:0.0515395899819662 347:0.0755618474462116 411:0.068912043768658 433:0.148766005421832 502:0.0634908531286175 507:0.147546201027951 644:0.0876451714047007 778:0.175801066866703 829:0.0682358061376329 915:0.113971833494552 1007:0.318528575697834 1009:0.245938818088555 1045:0.0955651667418823 1059:0.0843174787253405 1155:0.10707443849171 1218:0.111896303010709 1296:0.0936394130926716 1312:0.23920708997564 1382:0.120521393961962 1467:0.113028244523092 1649:0.104470268011731 2733:0.23920708997564 2782:0.351950182133585 3378:0.150190590287134 4657:0.203701939619208
+-1 1:0.431213273747015 2:0.274787757042138 3:0.171574556285946 4:0.291160283620985 5:0.188955389839873 15:0.115309118057486 75:0.272839872185945 142:0.0872753809351116 187:0.313829155911426 229:0.176252925417829 652:0.603093615580695
+-1 6:0.019174392216709 21:0.0579971059489249 26:0.165984111213233 29:0.0174094136035229 32:0.0359343805157879 33:0.18568348262266 37:0.022680793133216 59:0.029765695132299 65:0.0342943307825267 88:0.109810476135057 94:0.0287768720041183 97:0.0299113235501206 100:0.0296216614828104 111:0.0299780550963686 142:0.00248609958041624 157:0.048577971725947 176:0.0248473204388562 199:0.022407084213344 206:0.0457202902447332 209:0.0301125425620768 215:0.0305384132331311 224:0.0455881005938402 252:0.0345949783764363 256:0.0326218893336388 287:0.0444949102107304 308:0.0354185199062439 317:0.0285708826143323 337:0.0732957043060193 414:0.0354185199062439 442:0.0407920373987033 455:0.0350003045822296 457:0.0330542566444296 474:0.193627729647989 502:0.0330881119000627 507:0.0256311209645277 515:0.0346330471716131 574:0.0358923588840326 598:0.0506606264720003 609:0.0339460143555309 643:0.0780030472851749 656:0.0473193778478992 697:0.0513896813683546 713:0.0479336260955259 729:0.0515957340349996 731:0.0552418206718925 757:0.0455443309709133 774:0.0537740902204778 827:0.0409451562356829 862:0.0461250224721783 882:0.0719953315360814 890:0.0503421421572218 895:0.0996961674283765 912:0.0455881005938402 1000:0.0581996286445165 1026:0.0663253738138477 1106:0.0614236653957002 1168:0.124662224090273 1179:0.0597774246717145 1190:0.0518755905406585 1253:0.0586652616786774 1317:0.0621754562692829 1379:0.0505963096712153 1407:0.116860769461704 1591:0.113788304092786 1598:0.100309377458863 1676:0.130220819490379 1682:0.0672025494267886 1855:0.0620216210705727 1866:0.0763193476265028 1943:0.0575307001114738 1956:0.0714479102448508 2185:0.0599070095578597 2246:0.0607125322347138 2736:0.125296122693672 2804:0.125296122693672 2976:0.12945828728541 2979:0.0742272079449037 3187:0.0812064337423644 3199:0.0849902468686037 3944:0.0833440061446179 4218:0.0932581854179851 4781:0.0868724178566281 5302:0.51538616110824 5570:0.0793681785198515 7548:0.0970419985442244 7549:0.485209992721122 9366:0.106158796743939 9899:0.222983563634827
+-1 6:0.0410050672796897 18:0.073166326368678 26:0.236641647559049 27:0.0397989738611526 32:0.204924940034666 33:0.226908699347285 64:0.11854915406236 75:0.0554024884619145 86:0.106181223770399 88:0.208740718629874 142:0.024810826017247 186:0.077562999149117 199:0.0638910469982059 252:0.197286658835737 275:0.0919141855057912 286:0.0765872438826403 308:0.100991556884009 382:0.120053254484365 420:0.138987851001381 437:0.122943398028233 455:0.199598134565231 458:0.143905044888041 474:0.368070450616039 506:0.152934080652416 507:0.073083991588076 515:0.0987518779089904 598:0.144452550633676 655:0.103496694706959 808:0.142657783420146 882:0.102642920136924 1021:0.146337544223549 1365:0.165302461150986 1863:0.164666793772111 2143:0.215114082308609 2228:0.216343814691119 3523:0.215114082308609 6152:0.247706023652119 6325:0.27092214667692
+-1 2:0.178013647054636 6:0.0174425810462858 27:0.152365838143231 31:0.0332408896849303 39:0.0875930416668076 41:0.160633431667219 63:0.0942552681056929 100:0.10778505525496 110:0.0841686911444504 142:0.0588004989254228 199:0.0407665993252833 283:0.130755298506621 332:0.224038521126559 338:0.114273125955568 406:0.0817737308152892 423:0.0660769415064455 436:0.0770339906754086 456:0.0945094832944231 500:0.090254630180189 540:0.09858948118535 667:0.0840013503788257 853:0.0922876132820834 1096:0.114273125955568 1507:0.239078251736079 1908:0.166851901438054 2313:0.799838876605217
+-1 6:0.00722967283560655 12:0.0487367881991402 17:0.0393953017894126 29:0.0262567622880996 41:0.166450015959943 59:0.0448924242497556 65:0.155167447627997 100:0.044675193653583 110:0.139546343138286 142:0.0262466324460388 186:0.0410257910934555 199:0.0337942160004831 211:0.215705712780681 283:0.0541959946877378 293:0.136855562359113 311:0.277916295957086 331:0.0565165823783962 341:0.0604062999468748 457:0.0997044218820785 580:0.0654164197481249 582:0.0609787697808745 598:0.22921806390521 671:0.0441518643967047 867:0.0635511764217289 1266:0.295478922525689 1305:0.0657545569951377 1474:0.111373960378819 1642:0.335846950167974 1664:0.0858073832861803 1886:0.498260128136719 2544:0.292716198921507 2587:0.11804852811804 3401:0.109227337797894 4139:0.246985011421736 4140:0.131020405224468 6402:0.160107994121768
+-1 6:0.0130284845483648 27:0.0948395558872121 34:0.0519152537435141 41:0.0299957067258807 42:0.0389739460057772 51:0.0442426909956584 58:0.0436980451472306 78:0.0500456485668152 83:0.0843940676438849 84:0.0382317824335106 113:0.0697434449049119 135:0.118700744610064 139:0.373045445490839 141:0.119011147030628 142:0.0185816168582471 145:0.327989184291678 183:0.114616396747406 188:0.0719990338226955 214:0.334862964818362 215:0.0415000632554827 218:0.0369512630885626 227:0.0463037448142273 286:0.036500942068484 302:0.0826942137156557 309:0.0958808142042716 317:0.0388262948277024 325:0.058495480273583 331:0.0509238410220224 368:0.158807508684951 387:0.0919678012069861 396:0.066165055949153 404:0.109409079489401 414:0.0481318660961084 423:0.0493552192267581 434:0.0563684280755709 439:0.0702101527184814 449:0.0744605773264687 475:0.0527856249952607 501:0.135481736494356 507:0.104493949952464 532:0.075320655658623 608:0.07108222292881 623:0.0904232592602765 630:0.0901326204379216 655:0.0493257971727922 676:0.0651392231758407 692:0.0910191108940895 695:0.0643044928008054 754:0.0794037543424757 773:0.10195438663489 778:0.249008754610756 809:0.0984184703179242 814:0.0723153941831608 815:0.0993594188167586 834:0.0656447811456938 891:0.0916355131409722 916:0.157870831844701 944:0.0712819333165192 986:0.0582516307377094 1098:0.0730761002092527 1099:0.184547868708593 1139:0.108651617538406 1188:0.0802126658519339 1262:0.100352668431911 1323:0.209982287933033 1385:0.103713894036933 1546:0.0979659425080721 1559:0.0947071463739046 1865:0.077316096640895 2099:0.0947071463739046 2137:0.0919518735014375 2150:0.0975245893742628 2173:0.0916355131409722 3115:0.104991143966517 3318:0.104991143966517 4659:0.121040856595697 6331:0.121040856595697
+-1 4:0.017399674532944 6:0.0764288687437319 11:0.0542283036159347 12:0.0271170281069968 13:0.0267348061096114 17:0.0219194482316332 18:0.150729009896519 21:0.024334282318279 25:0.241519141975605 27:0.0702765902144027 34:0.0320578878285463 37:0.0570981066323081 38:0.196638064922023 41:0.0370449504612656 47:0.0190391510597204 51:0.081960144055872 74:0.0989290896888965 77:0.0606650807003586 78:0.0309033987580625 79:0.027279144186759 82:0.0301721907308613 83:0.0833819075153161 84:0.0472165733329192 113:0.172267483817693 114:0.0282456943774756 116:0.0861337419088467 123:0.040810728194444 132:0.024396993877136 135:0.109947314560215 138:0.134925352503814 139:0.197448971723561 142:0.0156466727273808 145:0.0675115675439458 148:0.0353597169805116 157:0.0815289010778984 159:0.0725988522839301 162:0.0217862676755645 166:0.0600282747330484 168:0.0597510414585825 169:0.117285783347316 173:0.0300665707414567 176:0.0208507545512477 181:0.0339533229090961 185:0.0936976385942112 186:0.0228266484374659 190:0.0344893387495516 208:0.0301368716457917 214:0.034463215176017 215:0.0768793915153338 242:0.0281864340758352 249:0.0459058923597864 253:0.0439550607868788 275:0.0270501762692683 283:0.0301545170606865 286:0.0225394854515936 288:0.0417795255764178 294:0.192204943345647 295:0.102463386137203 298:0.0398774509967734 299:0.0333003296010082 301:0.10937967298999 302:0.0510640252374289 307:0.154518653715047 330:0.0400060412435131 341:0.033609915507891 353:0.0451247996403853 357:0.03723702395642 358:0.213063320547967 364:0.0372706227789134 381:0.0773355770519292 382:0.0353314526765489 394:0.0374743923450283 407:0.0580315010381708 411:0.0301368716457917 413:0.104342563493476 424:0.0828613819535179 430:0.0313075961448984 433:0.0325294517871634 449:0.0919594401820276 454:0.0401361473237397 455:0.0293706825192204 456:0.0435911639367186 461:0.0440168940279596 465:0.0342053248300587 466:0.0371701316021782 485:0.0278374024729427 506:0.0450082195306589 510:0.0363664867326025 517:0.134561803195658 527:0.0383664126782044 534:0.122641608876299 540:0.0454730053215753 550:0.0327730108203372 567:0.0873019726613603 576:0.0393775676182329 613:0.0744070542063911 636:0.0411402214586074 641:0.0318294521084944 656:0.0397082951239033 662:0.0419324685040369 673:0.0406724733011228 678:0.0435316640370132 681:0.0440168940279596 706:0.0819014737927304 712:0.0369391502796213 716:0.0385160719836203 725:0.0584820617465567 744:0.0496343313921974 748:0.0594424241226437 771:0.0853512758620406 782:0.0458325551818898 800:0.0354735036034118 805:0.0524376514326041 806:0.0863624943116854 814:0.0893101209310956 827:0.034359334835866 829:0.0596822737726508 872:0.0459058923597864 876:0.0388216196525675 885:0.0563933590651825 887:0.0508316544511997 904:0.0490321527166676 915:0.0498425867151982 944:0.0440168940279596 950:0.0438324239177746 969:0.0449885361236443 971:0.0501625280924255 976:0.117903601842788 991:0.12819205934237 1003:0.0425121207970684 1032:0.106246825233865 1045:0.0208964573273813 1055:0.0438935720224656 1058:0.0451247996403853 1068:0.0474007489640753 1074:0.0525714373696274 1080:0.0406724733011228 1127:0.0463564530681723 1168:0.0523054677609048 1209:0.191008763988621 1216:0.0430668709544233 1218:0.0489349079936312 1225:0.0358812567416562 1229:0.0454024798121861 1251:0.0528439747885205 1292:0.0482771778203462 1319:0.0424581490285637 1322:0.0903871349863269 1335:0.043238882820316 1337:0.0517920168272867 1363:0.0910879687486679 1376:0.0575986139999597 1382:0.105413729785663 1409:0.0528439747885205 1441:0.0524376514326041 1559:0.0584820617465567 1576:0.0445895575749783 1613:0.0461288737752529 1642:0.0622881367708099 1698:0.0582544824536374 1779:0.0548012466094047 1784:0.0587144325327859 1787:0.0578129353877825 1890:0.0666022082167512 1903:0.0676062823516189 1929:0.0556572727153976 1932:0.0519181576821551 1995:0.0520457568451006 1999:0.0666022082167512 2118:0.0599558750562618 2120:0.0594424241226437 2142:0.0523054677609048 2228:0.127339175992414 2242:0.137421847934745 2251:0.0580315010381708 2394:0.0619681953935826 2444:0.056979543076937 2456:0.0567806691439323 2668:0.0633076800107547 2699:0.122709719146279 3372:0.0769580822496004 3714:0.0728994285906737 4034:0.0747432387133577 4085:0.0797318910300033 5376:0.0747432387133577 6563:0.0890836909279848
+-1 6:0.027076456709609 27:0.0131400246887549 42:0.0269992097676602 58:0.0302718304990693 69:0.0457837218116333 73:0.245187787778527 98:0.0292727287911503 110:0.0435522303346738 117:0.279538714708074 127:0.0448809796862947 132:0.0273698909607544 137:0.0369436393967066 142:0.00702131957082403 156:0.0626407329727875 158:0.0323904182641476 172:0.0353893561112939 199:0.0421885216375533 202:0.0560346482880161 203:0.0342112548420534 204:0.0812725347694177 229:0.0236326308250143 243:0.0425511080419149 248:0.0548978740046912 286:0.0252860357398281 295:0.0383163559708493 299:0.0373581431682422 309:0.0332107276873049 322:0.0391097895934264 323:0.15441730313665 327:0.0379517364874195 328:0.0915674436232667 329:0.181763608261725 336:0.041258546317047 360:0.0555673421171819 370:0.0533672682174033 394:0.0420408365665564 398:0.0351006114211775 408:0.0265729707008045 414:0.0333433609479813 442:0.0384020458898041 464:0.0632651750579488 485:0.0312295307426834 515:0.032603908792021 533:0.0565202848010156 534:0.0343965272842646 546:0.0389889872316192 588:0.432980105917636 593:0.0434656415631274 618:0.25846918560682 644:0.0429999333975701 655:0.0341704569670176 709:0.0393549885736377 722:0.05796322327977 733:0.0509350015852553 754:0.0550069684890125 827:0.0385461935465345 858:0.0452740966365528 923:0.0758444497524709 1000:0.054789732322792 1028:0.0548978740046912 1108:0.0784609093515753 1124:0.0501704288779668 1296:0.0459407912819311 1504:0.0630535093246954 1605:0.0736855810283934 1690:0.0589775328756914 1891:0.128762877822178 1943:0.0541599960835396 2135:0.0630535093246954 2333:0.0695193333858467 2404:0.0706289240273615 2708:0.0702479049225907 4627:0.0850312246984108 4682:0.579415850659423 5046:0.089447625169553 5080:0.0999389891787239 5883:0.0963768683684282 6675:0.0999389891787239
+-1 6:0.0315635908021765 42:0.0629470848588636 57:0.157097619738976 63:0.0227415480583058 67:0.0595143941003876 73:0.228656417968777 83:0.0545221727025211 100:0.0650149074770859 117:0.21724274336779 131:0.279392524759386 142:0.0163697975847892 162:0.0569828483970478 169:0.0766914061547249 179:0.0573530988151209 199:0.0491800403501071 209:0.0660923145620759 259:0.127991195419493 367:0.0898006768286772 379:0.385506453558079 381:0.202274273339208 441:0.0741902500102489 449:0.12026178408813 519:0.377392846425961 541:0.108492207051541 546:0.0909005526068984 662:0.109676036816509 755:0.109810620963163 895:0.109408736321853 927:0.135137878696556 990:0.141660846577512 1138:0.103749065955867 1175:0.111476558940075 1226:0.333060672375711 1268:0.142485709755744 1366:0.114014420599582 1395:0.112347024298952 1433:0.101438373286488 1469:0.11912210001491 1598:0.110081686308456 2335:0.155474021185038 4605:0.224697054611044
+-1 6:0.0241947571263451 17:0.0878933049380918 25:0.0605281990042665 53:0.0621108062875204 63:0.0522969235721312 73:0.350548613610409 80:0.105022974099864 87:0.225399026399616 98:0.0523145676794487 131:0.214165565693609 142:0.0439183702953192 175:0.078068254370825 179:0.0439634484229671 189:0.060351310226801 190:0.0691482270856785 216:0.0701676672163805 226:0.0625345187113415 262:0.0754793174049511 277:0.146072839988532 303:0.0720581980395403 323:0.0689914708110716 337:0.061657643661605 341:0.134770114715541 347:0.0662524262760324 351:0.0572340656297128 377:0.0620726862639181 431:0.359713482940297 433:0.0652188183567493 480:0.118637362254601 501:0.251598541439559 502:0.0556686106583148 506:0.045118849732492 515:0.0582678644442061 622:0.0890089466343757 651:0.104347370626751 657:0.251293317891832 671:0.0985054842770047 803:0.10078967336828 808:0.252522723483698 899:0.147928469288802 904:0.0983053474922269 912:0.0766990340904212 939:0.117251621304051 1012:0.107672915638731 1293:0.118679772826286 1370:0.132590045296427 1405:0.342717592749452 1878:0.149853915182341 2293:0.120206493189576 2927:0.128402371871461
+-1 6:0.0293018600611095 9:0.448307007679966 13:0.259661244849194 51:0.0663363486607196 69:0.198186671762728 72:0.0607841262004886 75:0.0395901304801015 82:0.0732616927618765 83:0.0759229717288736 85:0.299283549815907 104:0.424346581286378 142:0.0557215931874282 212:0.221172497558908 229:0.0511499749570026 289:0.084978871862702 293:0.18489183987603 339:0.0759710337990954 404:0.164045149160785 446:0.120518101232105 457:0.134700655843134 489:0.11128693326179 507:0.0522251769425047 518:0.0851791192812944 797:0.144333325078711 808:0.203883992087761 863:0.103224520893174 866:0.109237553901772 1269:0.0997776195618766 1477:0.323436276746543 2433:0.133063990211341
+-1 6:0.0293088172333077 8:0.295019469859197 9:0.373677874746429 13:0.0649307241245662 17:0.0532356823631205 22:0.208369991259951 63:0.021116985067409 80:0.0636108710890851 105:0.20755971836846 142:0.0405344168911431 151:0.0771547343727436 153:0.084734295541515 212:0.110612505391625 232:0.34686307722492 241:0.129020634563176 289:0.0849990484877873 423:0.0740195118604405 432:0.0917738237669017 474:0.131541176271036 524:0.110440118830286 541:0.201483936833481 543:0.216272689036497 596:0.1641951264005 760:0.46390227440104 971:0.121829545335252 1549:0.154634091467013 2512:0.302557932031885
+-1 6:0.0432035827896399 8:0.173953087074869 13:0.114855808461038 14:0.0876637960537033 17:0.047084238003114 37:0.0817666823785272 41:0.0795746884638546 67:0.0488772345733373 71:0.123725142237375 85:0.105905535785779 91:0.138086345434983 96:0.0535358900486845 109:0.380358715794033 112:0.0962055814625127 119:0.180813011213766 142:0.00448132729660985 147:0.11125223688058 151:0.0682394160272836 153:0.299772600722162 158:0.0620191393020585 175:0.334567851043729 183:0.0760155790574776 220:0.069317263072944 232:0.230086987114464 254:0.0833910762749007 323:0.0739171392893106 325:0.0775904308881933 376:0.110198349970044 423:0.0654664720842514 429:0.0986085023113957 459:0.0789302535462278 468:0.115682828745497 473:0.0760766049642424 485:0.0597963447607665 550:0.0703983159264231 572:0.0936363322625616 631:0.0579910792064446 747:0.0952263280396999 861:0.230720516880965 914:0.110719438016033 950:0.0941545726055038 966:0.172617305689544 1083:0.0926326458095988 1093:0.109688468991949 1134:0.105115002452822 1159:0.0878638694071824 1169:0.0973766121552592 1291:0.262323017367676 1373:0.100244223371151 1556:0.156592173752841 1948:0.129945418962601 2596:0.119555029280076 2695:0.144119268396045
+-1 6:0.0122827677859998 8:0.556366715621007 9:0.140941160237413 10:0.051799582507082 13:0.0816336940774791 14:0.062306988254287 22:0.0654929247701329 34:0.0489437588781476 37:0.0871734275931294 47:0.0290676548528506 52:0.150209321870374 59:0.0381347285657687 106:0.042988036155692 123:0.062306988254287 142:0.0143329525883292 171:0.0531009954623918 218:0.0348362683496572 265:0.0580171511483316 281:0.212673732403954 282:0.0869924129830324 377:0.0472679506918508 423:0.0465302541165823 452:0.0866887860605043 471:0.128039167059508 507:0.0328376621635832 627:0.208077472727912 631:0.0412171233008878 653:0.0627372457974921 723:0.0630303112415835 734:0.0847040431728627 811:0.0697522405160068 814:0.0681762480361758 837:0.133286594624597 867:0.0539847625379934 877:0.115718847417628 966:0.0613438210655191 1061:0.0796569385577388 1267:0.0824539272685523 1359:0.0681762480361758 1373:0.0712485191072511 1457:0.0813225737332524 1553:0.0855261983396276 1698:0.0889389019648147 1912:0.0932229603195838 1952:0.0860974679048357 2030:0.0946087412145947 2047:0.0844386701561938 2314:0.101683630473314 3110:0.209806142746511 3917:0.382196875413899 4407:0.107798892263537 5358:0.12172911922152 6668:0.228225581979915 7247:0.243458238443039
+-1 6:0.0227397136420904 10:0.115079046695012 13:0.0302265231942881 14:0.0922816808386481 17:0.148693513840282 27:0.0132425184820987 34:0.0362448295318319 37:0.0645554427211996 42:0.13604903446501 50:0.0431689526368067 51:0.0308882010110081 53:0.315227901858379 57:0.0339538829004714 58:0.0305079544648 59:0.028240306175709 78:0.034939557650545 83:0.011784007106515 91:0.0363400874455634 96:0.0281780058660656 98:0.0295010596418447 101:0.044202264828507 104:0.131725695547355 109:0.300296215728559 127:0.0904621135908641 132:0.0275833794445602 140:0.0321379279445698 142:0.00589673893236857 145:0.076328960602269 164:0.0531241325592992 166:0.0339341536851333 168:0.0337774329300525 171:0.0393234310690485 179:0.0247917238260313 199:0.0212587986229521 203:0.0689562135951525 214:0.0389643062529307 215:0.057946850291303 218:0.0257976632118098 219:0.0760537929614262 220:0.0729687035636395 224:0.0432518680654657 244:0.066925508739399 275:0.0611661649656531 284:0.0276189821109416 293:0.0860912068675201 308:0.0336034432253999 323:0.116716332684647 347:0.0373608512061538 371:0.127090668757728 382:0.0399459404881063 384:0.0492844168159331 394:0.042368760213362 402:0.0346648243874073 409:0.0232265035369262 433:0.0367779824140443 454:0.0453781554665637 470:0.353979235694368 490:0.0470656135058016 509:0.0422146999096358 515:0.0657164465050802 532:0.0525853988513668 539:0.0422530370399489 546:0.0392931060818235 559:0.0651213191855813 569:0.0637586511306229 570:0.0527624050262876 575:0.0949345247014267 608:0.0496263211103011 620:0.0646503679696854 645:0.0578667397069103 690:0.0568369824546549 704:0.0627267638576911 722:0.0584153434826688 729:0.0979032621299512 759:0.0672059413523055 772:0.0421383771879079 804:0.085685385695052 806:0.0488209625820002 886:0.0391725377419344 906:0.0532162268968692 925:0.0672059413523055 1021:0.0486916482009307 1026:0.0629264277348911 1064:0.0421383771879079 1192:0.0565922937109214 1229:0.0513323008027302 1332:0.055885762040506 1351:0.0603857721377918 1543:0.0637586511306229 1636:0.0663828699379902 1760:0.0693681517032982 1791:0.0637586511306229 1873:0.0602226492123304 1920:0.0683952909808116 2049:0.0845051289814034 2254:0.0732999617842344 2410:0.063545334378864 4564:0.572139036559118
+-1 6:0.0194170415030539 9:0.594146293517056 13:0.258098964918434 69:0.098497130121011 72:0.0604184119387129 75:0.0393519321831583 77:0.07320791139863 83:0.0503107819783543 85:0.237986302405544 104:0.421793454238038 142:0.0528687773750463 212:0.219841789334148 229:0.0508422256069577 293:0.0918897090738039 339:0.0755139458671157 404:0.163058153799113 409:0.0991635141597734 446:0.119792991056509 457:0.133890214795584 483:0.0942631914276838 489:0.110617363405528 518:0.0846666299082644 797:0.286929856072181 863:0.102603459411907 866:0.108580314357823 1269:0.0991772967348371 1477:0.160745143723388 2433:0.132263396339373
+-1 8:0.347301970084959 9:0.263939994479418 142:0.0357883570767157 212:0.390644804462016 218:0.195713256377422 281:0.398273319604164 582:0.291014665224661 3143:0.611733602091382
+-1 1:0.159643637783678 9:0.285953841367158 14:0.379241719139804 22:0.398633445095304 35:0.405635376544175 75:0.0757580164735706 83:0.0968553470811681 124:0.432210962800161 142:0.0387732757306865 173:0.279399522652501 518:0.325990394245349 1045:0.194184440008266
+-1 6:0.02294941389861 8:0.0462012770290364 9:0.351117063948784 10:0.0774268522822822 14:0.0931326806554667 35:0.0996143305961602 42:0.0549214585827431 48:0.0280792461286761 57:0.0342669975714005 58:0.0307892915993766 68:0.0281771576186292 75:0.111626123381067 83:0.0475707057226978 84:0.0269378067998972 89:0.0730759766403956 104:0.0664702193655383 109:0.0505109127245475 118:0.0300551792564656 127:0.136944500683846 142:0.0547502788195406 173:0.102920743704727 190:0.0393534336912114 215:0.0292406112140833 218:0.104142252621672 223:0.0623433890560901 225:0.0874699326935162 242:0.0321616187671764 286:0.0514365411638891 293:0.0434425597993579 302:0.0582656787298837 307:0.308543731878347 317:0.0273566954573312 330:0.0456481668946155 331:0.0358805293304227 347:0.037705384132339 355:0.0552485749197104 414:0.0339133262245977 423:0.0347752910136787 428:0.135651397270453 433:0.0371171402621987 447:0.193696939447739 456:0.0497389060417601 485:0.031763362594731 501:0.0477296716278735 521:0.0452606347193782 557:0.0863944364720115 631:0.0308044192912379 653:0.0468879016765775 655:0.0695091209415831 745:0.0623433890560901 781:0.0497389060417601 789:0.0471622873004199 800:0.0404763971263428 817:0.0841886112276764 831:0.0805656001797064 856:0.0688952578064346 861:0.122556980113979 1017:0.0540857638592954 1021:0.0491406710549036 1041:0.0654819633811678 1045:0.0238435231764199 1071:0.0878116222756464 1101:0.0590963403139536 1124:0.0510280329574718 1127:0.0528941889905555 1150:0.050083963296599 1162:0.0532489674361204 1166:0.151990480523797 1171:0.0759952402618983 1229:0.0518056751299315 1232:0.0519671363410011 1269:0.0468879016765775 1282:0.0645656464825797 1292:0.0550857970907463 1344:0.0726490272124472 1366:0.0497389060417601 1494:0.168377222455353 1551:0.0491406710549036 1706:0.0690260161644772 1951:0.0572370417827874 2136:0.0852844152777718 2200:0.0662157904705207 2280:0.0623433890560901 3536:0.0864847328070226 3598:0.0831805692188742 3698:0.0696719937558824 4025:0.196048633644504 4240:0.101647327870222 5098:0.533768375717623 5126:0.0952140911282953 5444:0.0864847328070226 8622:0.101647327870222
+-1 6:0.025190144556832 8:0.338081792186759 9:0.192699683667651 10:0.0708222008845178 13:0.167418662499164 22:0.0895442173486787 29:0.0304952313735929 52:0.136914292269651 63:0.0181494838982441 114:0.0589600482438391 116:0.179795529559287 142:0.0239512949758309 171:0.0726015381936952 176:0.0435238545681626 229:0.0439724734388225 232:0.149059769064882 281:0.0969249883890716 282:0.118939069573986 375:0.0595250670222807 415:0.0730544089021534 453:0.0814440108849281 474:0.226112245954264 506:0.0469750674108603 522:0.233868819265873 541:0.173170055083188 574:0.0628709164845804 619:0.369167878821031 627:0.568981596369592 649:0.112416108058716 658:0.0776586237722165 867:0.073809855449048 987:0.0685509917043818 1059:0.076970839698245 1149:0.0805562316624895 1433:0.0809555320467637 2994:0.174184311777014
+-1 6:0.0050860607870831 12:0.342862357653595 17:0.027714518233746 29:0.0738863249310847 31:0.0193853404041118 37:0.0240645734730032 39:0.0510822949035689 63:0.0109935111510449 75:0.0206155318915331 94:0.0610651617515211 106:0.0356010581351846 116:0.0544529026334813 142:0.00263777927265306 179:0.0277251104346317 182:0.0517180465065992 199:0.023774165268414 281:0.0587094347500011 283:0.0381267769186877 372:0.0502063855628538 381:0.048890789532508 389:0.0433455623708265 429:0.116085010662414 436:0.0449244934802984 571:0.0401409674844522 582:0.0857968920252125 640:0.0474688316448115 645:0.0647136020118777 663:0.0952005579930642 676:0.050858109777208 707:0.226435959346064 713:0.050858109777208 856:0.0381715052390195 880:0.239305794659597 894:0.161005143816479 930:0.0445303531260745 1056:0.0499435675503445 1225:0.0453675536768866 1244:0.14358471743306 1322:0.0571418558123071 1457:0.0673482655661396 1466:0.0621193345490342 1599:0.061629627320723 1709:0.0648644707677232 1795:0.0650169883950772 1822:0.0722998773371719 1904:0.0710640948415904 2098:0.0861609283147938 2210:0.0783513646419841 2264:0.0690828680446715 2280:0.138165736089343 2456:0.0717923587165298 2548:0.0708295477407438 2657:0.0819729015046675 2726:0.0848308534064449 3503:0.543104974459131 3518:0.0787558922121671 4124:0.0958339524822894 4163:0.102962638485272 4885:0.100811431219017 4976:0.0932896143177763 5357:0.0861609283147938 5504:0.0945038775739405 6261:0.189007755147881 7012:0.112635662652767 7198:0.354882057177965 7685:0.118294019059322
+-1 6:0.011131584454907 18:0.0397247069818435 27:0.172866689175653 33:0.0205328553916594 51:0.050401487551094 52:0.0907541243388825 59:0.0230404069121219 77:0.0279795473604299 82:0.139158182891376 120:0.0618279239381381 123:0.263514358640367 142:0.0731267432756246 162:0.0200962366223921 168:0.110231920902434 179:0.242721761492531 189:0.0277665819601227 216:0.19369749641482 218:0.0210475288080707 286:0.0623730745983025 298:0.22070417101168 363:0.415952179812241 386:0.0295517169072533 442:0.0315754473820691 456:0.0402096567509049 457:0.0255859478463503 465:0.347070982025891 489:0.0845543520955787 655:0.0280960933456357 723:0.114245786459383 804:0.0349540500827544 856:0.0278479653918803 881:0.0422771760477893 967:0.142636639775492 1057:0.252750685767962 1086:0.280697852352504 1324:0.0885656360554629 1352:0.107890839176858 1376:0.0531305037330138 1471:0.429747785201 1659:0.052195809871353
+-1 6:0.0160439952662489 51:0.108965785278464 63:0.0693581332392901 75:0.0325158811431205 86:0.124636136303617 106:0.112303653476767 120:0.133669235004754 122:0.172689012149194 123:0.16277325144019 137:0.131344418205596 142:0.0166417665598237 161:0.46971736137613 276:0.124636136303617 298:0.159050883065972 373:0.114533845030768 375:0.341211977659192 409:0.16387449669032 485:0.111029249235179 501:0.16683969120963 657:0.166637291775351 671:0.0979812391907998 867:0.141031938354542 1045:0.0833453470017258 1067:0.51195495043014 3217:0.278949303830184
+-1 27:0.143462378528378 33:0.272644062220547 59:0.305940407016504 63:0.106496982127145 75:0.099853991196685 142:0.0383292737227615 146:0.442426193095425 225:0.469471927785377 239:0.417716647060848 647:0.445051282557457
+-1 6:0.0318444744798563 15:0.0218204090893423 17:0.104114477458559 18:0.0681850327504158 38:0.207556617316601 41:0.0293264351288637 50:0.241813530671804 72:0.0792702668650394 111:0.0398295977127303 135:0.0580261321789654 138:0.160219390828158 142:0.00165154720417072 171:0.0550681515540663 185:0.0741752299772674 242:0.0446272768702056 246:0.131662668662589 271:0.0702906778053392 276:0.0494761086116474 296:0.0574320210109491 306:0.0499772207118465 309:0.0468707489301812 331:0.0497876157375672 367:0.0543598866073396 375:0.0451496689134001 382:0.0559399077081088 402:0.0485442839310977 411:0.0477153836246221 485:0.0440746589002692 495:0.140378745338584 504:0.0676550346813635 532:0.0736400826365672 575:0.199418081733194 591:0.334848246528484 613:0.0589039429434569 643:0.0518184048923165 670:0.0908623950483013 712:0.116970715943957 714:0.0659102287633952 738:0.0771741894789018 741:0.0771741894789018 747:0.0701893726692921 757:0.0605113432087416 906:0.074523488114418 953:0.0695935733589114 1068:0.0750490942622801 1093:0.16169824009995 1183:0.272587185144904 1215:0.0746534150105411 1296:0.0648368597672241 1448:0.0799434724787923 1473:0.0902150956020473 1480:0.0925940171957248 1639:0.0860007676712417 1651:0.0872958109341208 1707:0.0727991945840146 1820:0.0812249428578603 1851:0.0862522121104448 1956:0.0949274899028521 2154:0.0870290105299327 2206:0.0822014587314863 2347:0.118340163188523 2406:0.103308071216872 2575:0.0886945642166989 2640:0.0881215592092236 2643:0.277782051587174 2651:0.11179236255059 3119:0.206616142433743 3391:0.123905169854315 3795:0.109734093752034 4814:0.27203595431608 5281:0.1289324391069 5376:0.118340163188523 5559:0.13601797715804 7746:0.13601797715804
+-1 11:0.190094612767668 18:0.226445581723701 27:0.246351080757641 142:0.0438789044817533 166:0.315639183219913 280:0.443156331973896 406:0.39664495419886 720:0.421171835436369 998:0.468234620950866
+-1 6:0.0320452336441934 17:0.0349236176803932 18:0.17153724007176 21:0.0387711024123261 65:0.0458515641143359 119:0.0670568829727327 125:0.068708069710372 135:0.175175850145056 139:0.104863229630464 145:0.0537821059406553 162:0.104134274952153 166:0.0956412996639739 181:0.0540968392874485 183:0.0563827542580486 185:0.186607144101004 199:0.0299583002490585 215:0.0816597950949041 241:0.0846399842051721 256:0.0436155077583324 283:0.0960886254102431 288:0.13313219955905 294:0.0612469062793091 295:0.0544173084084907 325:0.0575508632807654 358:0.0848668938868844 382:0.112585146517328 409:0.032731227151463 411:0.048016198780123 414:0.047354606410441 424:0.0660103117841594 433:0.0518282269499917 459:0.0585446449846475 483:0.0622275230317112 502:0.0884776958517613 507:0.0342688415085251 569:0.0898498945271502 576:0.0627391302075915 634:0.072005593209528 651:0.0829229866891396 676:0.128174638781488 699:0.0955259473701771 706:0.0652456149436784 800:0.056518898858126 803:0.0800957483923224 809:0.0968291550574182 906:0.0749933113236783 912:0.0609513487953606 915:0.0794127399672109 991:0.0680815566588079 1034:0.0808063604826188 1067:0.0681697034916953 1080:0.0648022656717477 1093:0.0813588223466445 1098:0.0718960273950172 1099:0.0907838444195262 1160:0.0811727332414377 1190:0.0693577308951585 1237:0.0785946735672801 1406:0.108573105766266 1911:0.0867959774671779 1923:0.0951121575413856 1944:0.11484532608587 1992:0.0837605381396413 2039:0.119086222674738 2083:0.623431565846162 2146:0.197464237365808 2193:0.213794103644985 2213:0.0889630550386216 2398:0.093177763601293 2444:0.0907838444195262 2616:0.0850967697921578 3717:0.124686313169232 4049:0.132951447470758
+-1 6:0.0246023278104308 17:0.0670304279911903 27:0.0358180390769348 37:0.0582026591880908 72:0.0765530411040256 86:0.28668100103635 87:0.114597983081159 96:0.0762151789015953 97:0.0767573938101313 122:0.529612682583053 140:0.26077763694113 142:0.00956961287046301 197:0.137164876964594 199:0.0575002769174848 208:0.0921595919471043 264:0.101263885280354 276:0.0955603336787832 313:0.41848060458857 369:0.109999417781952 390:0.112367299568635 436:0.108654532612628 485:0.0851277359815797 499:0.183249362701453 507:0.0657736874255246 560:0.146535545590267 585:0.152420347647539 671:0.0751236374058054 829:0.0912552248622481 882:0.0923759526379046 903:0.136960935847513 982:0.137784199885428 1013:0.152420347647539 1058:0.137993192207575 1822:0.174864729047327 4088:0.21012037312857
+-1 6:0.00747700711963932 11:0.134396735314855 18:0.120072630414311 27:0.195941263548723 33:0.0413753243947997 41:0.103286661736651 51:0.0507814879525737 63:0.193938447660604 75:0.0303068494815506 76:0.0622052615688606 82:0.056082944622114 85:0.412391030184675 140:0.369852637293237 142:0.0911281515974398 146:0.469985261285107 153:0.129699999695968 169:0.054501611691895 194:0.0592399509901869 225:0.284980397492157 234:0.0536373578207609 239:0.380345604517952 446:0.0922584469803531 457:0.0515577045616947 541:0.0771012090766761 647:0.202617372681759 671:0.0456623435037934 764:0.0691525308482722 793:0.0897358204567184 1491:0.0858826712870182
+-1 11:0.210536963463782 59:0.29092553060274 142:0.0485975440082377 303:0.418611164095472 343:0.496416062958329 409:0.239274419458627 506:0.262111109117705 614:0.566618130469492
+-1 6:0.0300608656202143 17:0.0819025217383826 18:0.0804574867500455 27:0.0875300311228936 37:0.14223225786387 38:0.122457107623321 68:0.0922713922537811 72:0.0935379245077443 86:0.350287140079828 97:0.0937876171093836 100:0.0928793752853641 112:0.167348566341162 122:0.323559132383002 136:0.190365488756431 142:0.0194880506669303 197:0.335195512068392 208:0.112607113053794 239:0.127429753684707 276:0.233524760053219 291:0.12097819649409 377:0.231367316983756 390:0.137298320649437 431:0.167597756034196 448:0.272233111747813 485:0.104015093677859 507:0.160733894311121 560:0.179047502273594 746:0.221181185089299 1364:0.218519566865298 2972:0.256739945478217
+-1 6:0.0150745462367808 11:0.158059996211395 13:0.0667922690439439 18:0.0268978748967042 27:0.043893463280101 37:0.04754990036146 40:0.0313962205958357 46:0.042075073425307 52:0.0409668317829325 72:0.0625416351699613 75:0.0101837093481068 83:0.0130197007445241 92:0.066342848687423 100:0.0310506569099159 126:0.0477414609572168 128:0.108024837833249 142:0.0117271481621935 144:0.0298737776842245 151:0.039683369050004 159:0.030229270251353 185:0.029260909262387 194:0.0398116236428603 199:0.0469760742262136 242:0.035209454679863 252:0.0725277888275135 255:0.0467688785994058 275:0.0337900833029333 292:0.148649445645459 303:0.0448958686550885 304:0.0380481197377967 310:0.103142153591033 319:0.0455834650068004 351:0.0356596912359411 355:0.18145282507495 370:0.0594233847435754 375:0.178108024162069 391:0.0520010042139386 394:0.0468116298563241 402:0.0765996890202148 414:0.0371271648791208 426:0.0904707616280848 433:0.0406345923496171 455:0.0733775483833701 485:0.0347734572645526 493:0.0448586560297735 507:0.026867606455767 508:0.0779727823259735 518:0.0438209918870769 526:0.0603060713520499 546:0.0434134567201121 580:0.0454664577757497 597:0.08986636398257 633:0.0522528334855298 671:0.0306869267080448 728:0.069304412897719 755:0.0524447707288319 758:0.0526394177637805 780:0.0509792576438886 806:0.053940422568638 854:0.060420489181401 961:0.0858311539846331 987:0.0410229918170363 1027:0.0525093482207065 1059:0.0460616841359231 1138:0.0495498152151529 1190:0.0543781504225211 1227:0.0549070420388173 1467:0.0617460504792803 1491:0.173149801590246 1652:0.0601925952439048 1808:0.0505234386322998 1846:0.0660107458224158 2012:0.159067405760271 2298:0.0702088202973096 2535:0.0844512763881011 3360:0.0704445058537243 4763:0.0910632795991659 5975:0.097757106607122 7648:0.778960445653892
+-1 6:0.0105096119597397 18:0.140644147723789 27:0.214210286384727 36:0.0401495286660103 41:0.0967858501046391 57:0.0392311595725082 63:0.113582535786812 75:0.0212995134735609 76:0.131152709329178 79:0.0712711213638452 85:0.032202945150297 86:0.0408214228119284 122:0.0565599302817277 142:0.0872094542367497 144:0.0624818431615581 146:0.519048302564275 157:0.0532518190783663 162:0.313060572691364 225:0.200282903697398 232:0.373136484742112 234:0.0376960866976613 239:0.311855984518173 276:0.0408214228119284 314:0.083866205729642 347:0.0431676553674222 446:0.0648388093161602 541:0.216745490824601 582:0.0443217295409971 599:0.197083258971447 628:0.114202321276618 695:0.103744263439935 764:0.0972001569104204 856:0.157751833796442 867:0.0923829084613477 943:0.14110154897446 963:0.0445838864004976 1319:0.0554643479938751 1405:0.148868157376579 1511:0.0634279020235344
+-1 6:0.0088755788795825 11:0.0398839002811764 27:0.0516871140956863 33:0.0982291308429498 41:0.0408687994533932 51:0.0602801488260958 67:0.100411522114675 75:0.017987867930378 82:0.0665732412485441 85:0.163176212936072 97:0.0553822637111727 100:0.0548459403695454 140:0.188157194273366 142:0.0483329042465617 157:0.0899444665553572 225:0.169142944269286 264:0.146128546596753 283:0.0665342452896895 289:0.0772206964413563 292:0.175043395603293 317:0.0529003724210502 328:0.270139726795363 336:0.0811465442959313 518:0.0774026622027901 573:0.112669898635367 588:0.121653892623196 729:0.0955319995756709 1215:0.104035674065747 1605:0.144923435230714 3683:0.139684834019386 4052:0.321696975187416 6815:0.718711834390064
+-1 6:0.0330265084581927 11:0.0404754947516868 15:0.0102865273278307 17:0.06544187833297 18:0.128574528527746 20:0.0677457227431967 25:0.383068674238597 34:0.0239277053500381 36:0.0688200522700767 37:0.198881613826191 40:0.0187596337822459 41:0.0138250009496043 46:0.0502807633428693 47:0.0142106429190945 50:0.14249397670033 53:0.0231226248182017 56:0.13859292513868 63:0.0194691103719825 65:0.0214798228208138 67:0.0169834862676806 70:0.0345430086282716 72:0.0186847039176257 73:0.0326255790157197 74:0.049226493466725 75:0.00608489347729506 77:0.0679197667574604 78:0.0461320111763073 79:0.0407217922648507 83:0.0388971687175149 85:0.0183996213000797 86:0.023323913920432 91:0.0239905916519319 92:0.019820340184705 94:0.0180240318991918 96:0.0186022401104885 100:0.0556594654968229 106:0.0420321236573203 111:0.0187763778236686 112:0.033428776932771 113:0.0321447066025336 120:0.0500286646156311 122:0.129265356703948 131:0.0398648022824511 132:0.018209686303755 140:0.0212164570878465 141:0.0274260786009805 142:0.0163499406892993 144:0.017849955135129 145:0.0251949988806231 159:0.0180623663822499 160:0.0272133190286426 162:0.0162610648713348 164:0.0350708944496181 166:0.0448045385324642 176:0.0311256133839211 177:0.0313364052741186 178:0.0484615710087233 181:0.0253424402308912 185:0.122386310210695 186:0.0170375952670915 194:0.0237879421676545 197:0.167392769576481 204:0.0180240318991918 239:0.0254547792291201 242:0.0420761775100041 246:0.0931021710253602 276:0.023323913920432 286:0.0336465190415297 294:0.0286919916607866 296:0.135372359702969 299:0.0248550521797807 301:0.0544266380572853 306:0.047120294080328 309:0.0662871036613641 322:0.0260204544082161 324:0.0318118101771067 342:0.028047645215006 347:0.0246644680312911 348:0.0298280148974058 353:0.0336807251790676 355:0.0180700547314257 368:0.0365971366908889 372:0.0296378972550731 375:0.042568707233545 377:0.0231084334873125 384:0.0976081018301736 399:0.0283100261682263 402:0.0228846352615409 407:0.0433141654649288 430:0.0233676947083849 441:0.0635145049172221 458:0.0316103804467571 459:0.0274260786009805 465:0.02553053208974 478:0.0235451823393298 485:0.0623327245680115 505:0.0431940184569358 506:0.0167968554419306 507:0.0481611908838366 509:0.027868827469334 516:0.0420914717347357 517:0.0334785539152962 526:0.0360336305434325 550:0.0733843992345953 567:0.0325806848144561 572:0.0325360339433912 574:0.0224807276263543 577:0.0438238990963148 591:0.0631413576984457 597:0.026848137222584 607:0.0294520683484966 629:0.110011093266986 641:0.0475144061629052 643:0.0244281138738942 651:0.0388464624110504 654:0.0313749911317522 661:0.0400844970498553 671:0.0183358218288827 673:0.030357550759784 676:0.060045247841117 687:0.0675674046784579 689:0.0750440041642834 700:0.0371239504755959 706:0.0305652440848157 712:0.0275710336407286 726:0.0276691070078696 744:0.0370465971791536 751:0.0378548985075686 758:0.0314527093076341 800:0.0264770887743929 803:0.0375220020821417 822:0.0401965813032586 861:0.0400844970498553 862:0.0288898277849832 904:0.109791410072667 912:0.114214134073967 944:0.0328537948712583 953:0.0656152862457091 971:0.0748816764365721 981:0.0356349366677136 984:0.0688603133011463 986:0.026848137222584 1001:0.0351929420973548 1019:0.0863020602466421 1041:0.0428341423806309 1042:0.0342089872451011 1045:0.0155969188133471 1095:0.0423805563273636 1116:0.0350105420511622 1138:0.0296066332116903 1162:0.0348320932208995 1170:0.0399739173285618 1172:0.136724982562458 1183:0.0856682847612618 1189:0.0409031340023898 1216:0.0321447066025336 1225:0.0267814318739648 1246:0.0422347460511191 1250:0.0405422851259344 1251:0.0394422447613229 1261:0.0443672651581273 1277:0.0354425995528287 1288:0.0394422447613229 1296:0.0611304881696313 1313:0.0392388254003529 1321:0.139328372883598 1328:0.0447505000960316 1333:0.0426801553637211 1342:0.0859821253185856 1351:0.0797296045649021 1406:0.0508626285713929 1424:0.0279195234172842 1439:0.035379472304896 1441:0.039138968837806 1455:0.0398648022824511 1465:0.0475223804350259 1472:0.0305302628622157 1480:0.0873009194628402 1507:0.0411527914578637 1565:0.0451524366663579 1567:0.044001068624526 1594:0.052700899772822 1614:0.0379402678263851 1639:0.0810845702518689 1651:0.0411527914578637 1698:0.0434805966919751 1714:0.0462524770309694 1730:0.0423805563273636 1736:0.0429910626592928 1793:0.0475223804350259 1798:0.046491278259688 1820:0.0382908767194911 1824:0.0425289939566981 1855:0.0388464624110504 1865:0.0356349366677136 1878:0.0557876489681972 1890:0.049711260529561 1934:0.051285186092521 1951:0.0374408382182861 1979:0.0443672651581273 1989:0.0487012545643278 1995:0.0388464624110504 2056:0.0782779376756119 2060:0.0565728204764279 2086:0.0447505000960316 2099:0.0436504597314201 2154:0.0410270170217603 2204:0.0447505000960316 2207:0.0434805966919751 2222:0.0557876489681972 2246:0.0380265310810219 2308:0.0447505000960316 2314:0.049711260529561 2425:0.0475223804350259 2480:0.0500774570631622 2492:0.0574407873101581 2569:0.0451524366663579 2607:0.105401799545644 2643:0.0436504597314201 2672:0.0472522557254367 2825:0.0405422851259344 2891:0.0565728204764279 2919:0.0622830123814628 2973:0.0508626285713929 3152:0.0550708435414901 3169:0.0504606920010666 3239:0.058411091677857 3243:0.058411091677857 3273:0.0504606920010666 3306:0.0595111320424685 3398:0.052201470164723 3625:0.0595111320424685 3739:0.0462524770309694 3742:0.0538009401374335 4003:0.0550708435414901 4059:0.060781035446525 4200:0.060781035446525 4476:0.060781035446525 4831:0.060781035446525 4992:0.060781035446525 5006:0.060781035446525 5048:0.0544114464693628 5219:0.156604410494169 5259:0.0622830123814628 5319:0.058411091677857 5647:0.0622830123814628 5914:0.06649122735156 6142:0.0508626285713929 6314:0.113145640952856 6481:0.064121283582892 6827:0.069831475487927 6870:0.209494426463781 6955:0.06649122735156 7727:0.139662950975854 7952:0.128242567165784
+-1 6:0.0117195701411632 18:0.250938125671218 21:0.0708967609998704 27:0.272996620167357 37:0.055450862374726 47:0.110939301571881 126:0.222697011853482 140:0.662528485039286 142:0.0972497671479641 159:0.141008842639325 199:0.0547816884372268 298:0.116181035282829 301:0.212448277229865 304:0.0887405035619249 324:0.24834766610337 331:0.0916154944191015 496:0.0982746310757306 1544:0.153558915544948 3338:0.214962861084141 4454:0.22082565958973 5528:0.237251954737138
+-1 6:0.023962574990057 11:0.179466407083636 18:0.0855139961311486 25:0.0599473472735757 27:0.162804299873273 38:0.0650765829913672 51:0.108497530602764 82:0.119824393608036 87:0.14882400746525 100:0.049358281370948 138:0.0669795105795196 140:0.112887306691403 142:0.0745661362782304 162:0.129781410463016 175:0.0773190815652686 185:0.0930265789050958 237:0.0686410138860356 289:0.0694943114646539 291:0.192871964651751 301:0.289590130770434 343:0.0846312265286008 347:0.0656166426727207 351:0.0566848256618567 412:0.162816715564936 453:0.0774750702171656 501:0.0830613685594666 588:0.218963409926363 601:0.323572594333154 729:0.17194692198599 796:0.0702129434871936 829:0.11850966222088 1747:0.120122246252394 2619:0.412867772737529 2927:0.127170173637361 3180:0.165695938093223 3273:0.134244176353269 4052:0.289509300241668 5353:0.146508891161278 5698:0.155395191410047 5835:0.165695938093223 8137:0.176891352388497
+-1 6:0.00923800935213565 11:0.207562711568445 27:0.0806966029842742 37:0.0874188351674243 38:0.0752646260924044 75:0.149779158673765 76:0.0768559904959538 100:0.0570855509183834 128:0.0992999503757796 142:0.0383288059026344 146:0.331815594864622 173:0.0690491702804523 184:0.108857854618203 219:0.154484278408542 257:0.111940280974108 265:0.261812155483453 303:0.660315922737636 317:0.11012107306743 352:0.392567899371071 385:0.0966558894382441 483:0.0896948429382649 500:0.0956020345229438 530:0.0759419868219409 611:0.119525314598556 862:0.0888900955294183 987:0.0754193412071742
+-1 27:0.238120580632369 42:0.244636812288194 51:0.092569455593275 59:0.084633927613367 77:0.102776786668275 82:0.102233468554239 83:0.0353157220832842 106:0.19081013433553 120:0.227111442042811 123:0.13828038987155 125:0.146118226155043 137:0.223161449393242 142:0.0459473367397241 162:0.0738191578858705 181:0.11504520838086 186:0.232032947098209 207:0.322369888837085 234:0.195550828190252 298:0.135118134737625 351:0.0967263203644585 409:0.278431856485561 457:0.0939844190342025 704:0.187987069216657 805:0.17767629260377 829:0.101111747459903 989:0.329672804853001 1045:0.212412548906042 1051:0.219674093514098 5514:0.239242391063535
+-1 6:0.0346806016872953 29:0.0503812736878947 31:0.0264367768012148 37:0.0328180854429195 41:0.223568107986536 42:0.0829959857627895 63:0.0299848230160761 114:0.0487040463938994 142:0.00899318511157127 162:0.0375660579428615 168:0.10302871143445 202:0.172251370005121 255:0.193674229675845 264:0.0570985395817218 283:0.0519954290477798 286:0.194324156180852 314:0.0553499118155169 324:0.0734911467260142 337:0.0530277903507518 381:0.200024585108435 383:0.415438459119597 406:0.0650353793251954 415:0.0603467165721183 430:0.0539836831321998 448:0.062813947102509 454:0.0692067525479793 601:0.0936601535156317 607:0.0680397080308752 613:0.0641500359607259 653:0.07085586800528 667:0.0668070250830986 671:0.0423591290425281 695:0.0684690070667714 720:0.0690568978345313 758:0.0726615575092758 793:0.083244330158996 858:0.0695866344275625 1080:0.070131539346832 1196:0.0870633845218589 1229:0.0782874888334901 1232:0.0785314851278526 1292:0.083244330158996 1322:0.0779272613544996 1406:0.117502049660192 1565:0.104310453558295 1612:0.101241286825955 1730:0.0979068989172391 2285:0.280980460546895 3084:0.12297705671782 3313:0.125700473308253 3370:0.117502049660192 4179:0.13069364576209 5708:0.296263974531189 5736:0.124290091121034 5967:0.431655725591961
+-1 6:0.03028900455211 15:0.0345909549998522 31:0.0384818223981607 42:0.0604051849417812 63:0.0218232094370124 75:0.0204619372256503 142:0.00261812667148868 180:0.0778032651683517 186:0.0572930662027361 199:0.0943881496483368 245:0.116738452255281 283:0.0756854317444965 289:0.0878417080456528 347:0.0829402845659486 355:0.121529925530549 383:0.120943858787439 430:0.0785795682398181 502:0.0696905859742369 508:0.0783346285094032 599:0.0946666053735485 610:0.519975318669843 781:0.109410343271489 884:0.104235073949921 1027:0.10550605386746 1061:0.13095470644288 1182:0.151152024910446 1190:0.109261003270822 1407:0.123066790963841 2017:0.151836072085665 2380:0.156338253223269 2589:0.163769837126003 2708:0.471495765076552 2936:0.196421530738993 2979:0.312676506446539 3103:0.145654437178215 3751:0.162724335575528 4556:0.179007497443721
+-1 6:0.00527749409239344 18:0.141251391884956 27:0.169034767925047 48:0.193714823678253 51:0.0716861702508541 53:0.0812877132540239 56:0.0974448363564774 59:0.0327704322392658 68:0.0323983835774039 72:0.0656861782013909 75:0.0534786902495474 82:0.118755032939508 83:0.0957202456630117 114:0.0370575054373438 120:0.0439690106089936 123:0.107084907296425 125:0.0565772801069824 142:0.057478305379321 168:0.0391957888191289 186:0.0598957587859683 234:0.037858843050602 236:0.65510084650552 294:0.0504334263334351 298:0.104636043808417 317:0.0943650234171445 336:0.0965008398776272 409:0.107809392090318 434:0.0456667151213172 456:0.0571903021047086 457:0.0727819238066568 465:0.0448763621788256 502:0.0364282347221132 506:0.206673028176434 518:0.0460242760560047 535:0.0500459655696175 607:0.0517694531973274 609:0.149490957061368 659:0.0773429979801764 671:0.064459681321725 723:0.0541640289900018 778:0.0504334263334351 851:0.0599404049100434 944:0.057748847239417 1051:0.255174793344539 1306:0.0755676572493503 1380:0.0543558262589037 1581:0.0752918302029855 1606:0.0835325933868493 1988:0.0830577809443053 2513:0.193601849861525 3456:0.102672255172054 3726:0.218956268627245 4285:0.218956268627245 4423:0.116875135616244
+-1 6:0.0213805310701846 18:0.114449385258657 27:0.155637446842084 51:0.0726049315981247 82:0.240554098882227 83:0.0553983075683445 106:0.224486954085532 123:0.108457354357772 125:0.114604798604832 142:0.0693035387014024 173:0.159808014289397 236:0.442331270536246 286:0.0599002534093022 298:0.105977105163014 367:0.0912437136712001 532:0.123605751118459 609:0.151406898624906 637:0.18109952692159 667:0.205932078165047 704:0.29488751369083 865:0.475940149643996 910:0.171230075967625 960:0.123195504702332 986:0.095594448936337 1037:0.119560170089389 1045:0.166601374989904 1051:0.172296816819886 1312:0.139005425846967
+-1 6:0.0288078038952702 9:0.22037407071063 17:0.117732726723986 20:0.0406258136513246 37:0.0340758566626954 41:0.0331623541422421 47:0.034087402582453 57:0.0537680913376395 65:0.257620774816956 69:0.0730668986912016 83:0.0186607102428834 84:0.0422679125428076 94:0.0432346681993665 117:0.0743533077537821 138:0.181176203508904 142:0.0149405662233891 150:0.0628071910565542 151:0.0568768718908524 175:0.0697147407995244 176:0.0373308695491138 199:0.100993900706847 205:0.0569869604268525 214:0.0617024092253746 218:0.0408522087425527 220:0.0577752466411498 242:0.0504645570956919 248:0.175224609950513 254:0.139011258837018 261:0.198041084340099 262:0.0674028270648469 284:0.087472761636527 329:0.0966930503178107 338:0.0943655584655719 348:0.071549159164156 357:0.0666685937095334 364:0.0667287485234238 379:0.0879620635059085 398:0.0560175695034636 416:0.280273014583868 431:0.0803057927559113 433:0.058240229061548 434:0.0623192442627371 503:0.0978225486514033 526:0.0864347150114463 561:0.0638207896965977 657:0.0748014185905701 661:0.0961516235424932 674:0.0953663212226678 727:0.0771062619118447 728:0.0993317429497307 796:0.0633074922372088 806:0.0773110392998387 856:0.0540515186185773 902:0.0993317429497307 1011:0.0864347150114463 1027:0.0752599273528914 1041:0.102747262310052 1046:0.161827733226604 1061:0.0934130443907166 1108:0.125216891243525 1200:0.102747262310052 1204:0.110946901837344 1218:0.0876123049752564 1286:0.13381914247893 1395:0.0769035848417677 1603:0.104297927433889 1652:0.0862720734258109 1668:0.116820841960228 1726:0.291749191623848 1849:0.0890500910139908 2088:0.116820841960228 2399:0.10470538189196 2547:0.113993048927335 3242:0.127690220223396 3943:0.142750748690152 4785:0.110946901837344 4932:0.135702551797545 4972:0.159494067076204 5257:0.167506398650354 5375:0.149399723093606 7568:0.145796895780143
+-1 2:0.115103063441024 6:0.014097897450312 15:0.0483006698477617 41:0.129831338649182 65:0.201718188732084 142:0.0219347407979458 229:0.0738288047270003 286:0.0789940742856159 351:0.100048119974743 370:0.166720398300545 406:0.132186591893044 452:0.198999059050198 598:0.297984231760292 601:0.190367406446636 709:0.12294576037472 720:0.140360463276584 948:0.225811421005068 1244:0.198999059050198 1624:0.178554614659001 2683:0.199696051990476 5665:0.62442274593314 6648:0.327895599265931
+-1 6:0.0264610133839141 10:0.0743952541143799 14:0.0894861309672837 17:0.0480630143584049 22:0.0940618156584921 52:0.14382175981653 63:0.114390864711171 75:0.107255474941191 98:0.0572147291378364 116:0.0944331999227426 142:0.0274469046122092 229:0.138572790509006 279:0.0998647936659073 286:0.0988451535315211 310:0.36209990851451 375:0.125056336346253 402:0.0672293999610436 448:0.0798775402823559 457:0.060820641584762 522:0.24566774290289 563:0.270393133027169 619:0.387792779845128 658:0.0815765816022536 824:0.098646856199319 954:0.120527231701168 1115:0.124075240967271 1223:0.108385555523361 1305:0.240665414917867 1319:0.0930984486847692 1726:0.238206418491338 1840:0.156384135290089 1845:0.139609003370767 1896:0.319694751988929 3091:0.32356904310072
+-1 6:0.0107105639936379 9:0.327734886764099 12:0.0722022283332651 19:0.0650190983847564 27:0.0467798904172169 34:0.128036759471533 35:0.116225807252336 48:0.0655233645362311 51:0.072742792364016 75:0.0542669422443586 82:0.120505429053767 83:0.111006993493705 84:0.0314298989130206 98:0.0347380129920866 119:0.168094507657807 124:0.185760676803128 142:0.0374949706588258 145:0.0449393421332083 162:0.0580084612161044 168:0.0397735172298417 173:0.0800557272466296 176:0.0555175491609868 179:0.0291926878159772 196:0.0497989708588718 203:0.0811971458935609 214:0.18352460464465 217:0.266004140987969 218:0.030377199012411 242:0.0375248227979464 286:0.0600139907909143 317:0.0319186405636219 331:0.0418638910798469 351:0.0380046668380659 363:0.100054993478676 369:0.0478879808648433 396:0.0543935147065879 423:0.0405743455415593 459:0.048918832481855 485:0.0741203085244361 494:0.0907216975080728 518:0.0934053066339171 552:0.625113589976194 609:0.0379235967403475 720:0.0533178698951046 723:0.109924765143143 771:0.0568144145812247 778:0.102353584998084 808:0.11178706095689 829:0.0397277417475323 944:0.0586000394399385 963:0.045436365320327 1263:0.0727396417415654 1269:0.0547068297313686 1471:0.248096279905084 1835:0.072105273390983 2267:0.0940005505394251 2640:0.0740969677272094 3027:0.0914753969665611 4984:0.114370646119306 6323:0.106147697654706
+-1 6:0.00663654465890766 11:0.0894672749727951 17:0.144653118126691 18:0.0355252380757186 25:0.0996161508174838 27:0.0193240263897138 37:0.0314006503730253 46:0.111140899139993 48:0.0405999847631632 72:0.0413007809648532 74:0.0544052673593378 83:0.034391413477836 85:0.040670632646953 132:0.0402507991984087 140:0.140690949810892 142:0.0189304795437541 144:0.0394556472780383 151:0.05241161759291 234:0.0476081826414606 237:0.0570313275108867 252:0.0478953630184101 292:0.0654426786088538 295:0.0563489256281236 299:0.0549397555600957 342:0.0619966822440327 364:0.0614900491851001 367:0.113288669703427 461:0.0726202241054551 475:0.0537766547335495 480:0.0976255494576151 496:0.166952534124352 502:0.0458091666889641 646:0.604064510282657 651:0.0858664521723965 657:0.137857910122047 688:0.147346175602071 698:0.074561530793014 724:0.0776553020715983 853:0.0702270914362143 1005:0.139919910135524 1019:0.095381294313682 1078:0.0842467656648649 1215:0.155581378166822 1327:0.172589860080759 1436:0.0891019320977139 1662:0.183066935759378 1849:0.0820590015181507 2311:0.0984882944117406 2626:0.103868540897783 2787:0.125048899750391 3000:0.111538614519068 3475:0.10764954351658 6076:0.129112225376472 6170:0.146972605455125 7205:0.29394521091025 7227:0.268701526431562
+-1 18:0.0587459620033744 51:0.0745350714340929 72:0.0682966319352915 76:0.091302437198012 91:0.0876907985904049 92:0.144895255969256 111:0.0686317198792421 144:0.0652454446856595 157:0.111214344529002 162:0.0594377072973481 185:0.0639069171937815 224:0.104369337494551 293:0.103871608635139 295:0.186361697946975 384:0.118926237454037 398:0.0853605383090743 424:0.226063988570697 439:0.236564215715727 481:0.12647055153461 502:0.151503759664062 625:0.12200855320818 729:0.11812320558724 863:0.115982371563338 882:0.0824130086277021 974:0.140959708135029 990:0.147763689798366 1145:0.144169930925405 1736:0.157141627498793 2478:0.183043930927472 3458:0.189086508930141 4189:0.341669203839518 5181:0.611747750177948
+-1 6:0.0115697225831872 11:0.0519904862600261 13:0.0768946552090436 21:0.0699902681527543 25:0.260496528464465 59:0.0718418255523786 77:0.0872424592225834 91:0.184894470093811 92:0.152754519300694 118:0.0757601234875827 132:0.140341278304247 157:0.117246721600562 186:0.0656540112533666 220:0.0928142357874171 242:0.0810698278845791 258:0.109714559203915 275:0.233405168794711 283:0.0867304285982127 292:0.114088531836948 295:0.196470142486871 299:0.0957784153181673 306:0.0907885258839086 308:0.085485358803757 309:0.0851453150422442 327:0.0973002636391134 348:0.114941621457719 377:0.0890478573084851 411:0.0866796768520139 424:0.357488887482711 429:0.264069075391589 496:0.0970180821323553 508:0.0897662304106014 517:0.129008895976463 626:0.109194986059297 951:0.150821184576779 963:0.0981621775019107 1042:0.131823605288608 1055:0.126246701499265 1067:0.123061133948068 1068:0.136334044589635 1083:0.124033002006108 1159:0.235295438129788 1237:0.141880471178021 1321:0.134224730923171 1497:0.140469340618743 1538:0.147209884816498 1808:0.116330301372153 3222:0.207320779361825 3714:0.209673352536524
+-1 111:0.180955952112723 142:0.00750339732139192 277:0.262041755277887 290:0.300897020186888 401:0.441342926700814 1929:0.400358566595968 4060:0.672995678560815
+-1 6:0.00883456763388141 46:0.221926131927274 47:0.0418147061362728 76:0.0734995408884795 91:0.0705921291297054 92:0.0583211966596379 106:0.0618395982863218 158:0.0634105142884743 168:0.0656140663018503 199:0.0412960992397682 224:0.0840185500420719 275:0.118817815782427 284:0.053651019814611 290:0.183739338181938 295:0.0750116845654061 307:0.169680677394711 309:0.130032857579828 353:0.0991052715797195 382:0.07759664842216 424:0.0909920911274782 430:0.0687592597235928 439:0.0952184945952774 481:0.101810288519976 493:0.157738809952274 502:0.0609811584439806 625:0.0982183271386329 631:0.0592920862496112 668:0.3823547838262 819:0.0887307502036902 882:0.0663434458407458 913:0.0922071285137827 1054:0.115459938201925 1067:0.0939687104119698 1215:0.207109916173382 1449:0.113203385041083 2479:0.149662888522338 2565:0.142388220040094 3458:0.152216874172044 4060:0.410957145741309 5181:0.49246416807172
+-1 6:0.0335903442462883 11:0.0754719189872361 18:0.0899040869703985 53:0.194018379513565 78:0.0645144320948313 79:0.0569483799830474 94:0.100824581663388 96:0.0520295094802293 106:0.0587808447615313 118:0.0549885403429479 135:0.0765092605157064 148:0.0738175136621993 203:0.0636623823918354 290:0.261976641510168 295:0.071301404082946 306:0.0658965203384645 351:0.0595948935468956 353:0.18840651444094 424:0.0864913765824778 442:0.0714608610924245 499:0.0625490525071879 502:0.0579648656719496 515:0.0606713351664239 564:0.104052185367782 678:0.0908774017213302 791:0.111804992208204 798:0.394291784102581 863:0.0887489868619775 876:0.0810446373389113 882:0.0630619198535853 890:0.0881910553432341 1011:0.100784212591123 1142:0.139039840666212 1206:0.129365800993508 1215:0.0984328502167362 1360:0.124092960280363 1465:0.132917655544782 1595:0.105176381296446 1682:0.2354553660905 3178:0.15403031888136 4060:0.585945143327484 5368:0.170001432150102
+-1 6:0.0178550731911507 11:0.0802347619609524 17:0.0648628702692341 25:0.0893363316445878 33:0.0329347216765517 37:0.0844808465061065 51:0.0404220195612384 63:0.0128645694213322 74:0.0487909537574023 75:0.0120621127105105 79:0.16144599733929 80:0.038752050279181 81:0.036237321649594 83:0.0154212077809117 91:0.0475566616863886 92:0.0392899527593454 94:0.214374734818726 132:0.0360971460615564 142:0.00463008052272331 175:0.0576122499770268 176:0.0308502242661712 208:0.0445897172051193 216:0.155345494140535 218:0.033760258378608 317:0.0354733677743473 337:0.0455016652832236 408:0.105138351415262 411:0.0445897172051193 448:0.0538988929629415 475:0.0482272103728954 478:0.046673724729322 551:0.0879494365827967 571:0.0469728238547419 603:0.063720601771062 628:0.0646738373977609 657:0.123631759282265 696:0.0656861835200441 749:0.0692827939956375 804:0.0560663331516666 845:0.241806402097296 867:0.0523173008514383 871:0.0683625304949205 888:0.35641058630679 1114:0.0728382959391709 1193:0.0725466746944097 1225:0.0530889572706576 1410:0.164175471065158 1535:0.176649727187267 1576:0.0659735285711814 1690:0.0777833065399029 1877:0.0965407239896862 1921:0.179838669070499 1988:0.093668366835478 2067:0.0742191481658793 2247:0.0978478498801653 2402:0.082087735532579 2438:0.104469239334602 2566:0.100825225761174 2917:0.227730280998636 3045:0.213299708956493 3274:0.323580192079442 4029:0.107860064026481 4364:0.113865140499318 5497:0.115788579371396 5529:0.240973059907509 5824:0.115788579371396 6108:0.227730280998636 6988:0.235938389030082
+-1 6:0.0516232155397211 10:0.0256127461441753 11:0.0955201740243617 18:0.0812757735228096 34:0.0242006597508065 37:0.0143678820265601 40:0.0569209008016908 46:0.0762815088954819 47:0.0143727502948654 48:0.0185771881928402 50:0.0576477885566833 51:0.0206240407980239 53:0.0701591858790538 56:0.0280347837461551 57:0.0453419910043375 58:0.0407403006294899 74:0.0497880428434652 78:0.163303911268597 83:0.0236045320259042 85:0.0186095142895184 86:0.0235899805931275 91:0.0485285268516579 92:0.0200464399715002 94:0.0729185614665434 96:0.0376288889328053 98:0.0196978470005911 100:0.0187647995868552 106:0.021255801765233 109:0.0334179460223381 111:0.0189905686490104 112:0.033810114451042 114:0.0213228158608087 118:0.0198844626617913 128:0.0326412487540015 132:0.0184174126168514 136:0.0384603173071843 138:0.0254639557444176 139:0.0745276078134744 142:0.00708705086746951 158:0.0217957645084737 160:0.0825712618324195 161:0.0296345927907704 166:0.0226578223121244 176:0.0157403388252234 177:0.0633877482824414 185:0.0353664078432106 186:0.0172319509956761 190:0.0260361742037467 194:0.0481186044503303 199:0.0141944922580789 203:0.0920840784451539 204:0.0364592807332717 215:0.0386910912713532 218:0.017225090525163 219:0.025390545216957 227:0.021584815495143 240:0.0273370337276023 242:0.0212780799629105 246:0.0313880768490621 249:0.0346545875853703 252:0.0219153080363885 258:0.086389050948526 275:0.0408406265311701 280:0.0318115049086336 286:0.0510455106671016 288:0.0630791453530924 290:0.0947336429350865 292:0.029944369768909 295:0.0257833741062825 303:0.0271318568246288 306:0.023828908533307 331:0.0237385057552972 341:0.0761168796094736 353:0.0681298735750051 355:0.0731047528104047 357:0.0281104154996606 359:0.067620228902084 367:0.0518370868726677 376:0.0387276784586034 384:0.0329071875295157 389:0.0258796993521455 390:0.0554778811266285 394:0.0282896060826157 396:0.0308433050203202 404:0.0255009049888612 414:0.0224370070561163 423:0.0230072817005629 424:0.031276235693748 432:0.0285258057378705 454:0.0302989782198046 459:0.0277389405633142 478:0.071441319369629 484:0.0335628547351085 500:0.0314256933507309 506:0.0509653948199838 507:0.0324737252408957 510:0.0549064851967098 526:0.0728893656630127 540:0.0343277989966052 556:0.037547440547376 574:0.0454743513660903 591:0.0319308201833406 597:0.0271544063403339 599:0.0284727352338159 609:0.0215042007864311 613:0.0280851285577403 614:0.0367247778098698 615:0.0806391170367061 616:0.0418826378547584 656:0.0599519809113866 661:0.0405417594455713 681:0.0332285733032418 706:0.0309139159595927 716:0.0290759752482243 719:0.0326849866022975 758:0.0636230098172672 761:0.0308785356900088 763:0.0351701359840259 768:0.0379500329126845 780:0.0308082226907326 800:0.0267791251708957 803:0.0379500329126845 839:0.0966939186474683 858:0.0304652919445761 863:0.0641852249404223 867:0.0266932270805496 885:0.0425716286188473 906:0.0355324557181813 909:0.0267360654318171 928:0.0489423583391238 930:0.0265870849958869 944:0.0332285733032418 973:0.0829900623573655 984:0.034822917370393 1000:0.0368684372474346 1015:0.0379500329126845 1020:0.0776374798440271 1021:0.0325113961367039 1027:0.0317329001655771 1028:0.0738824132534615 1042:0.0345992249832285 1044:0.0443238185805351 1059:0.0278363924457779 1095:0.0428640109331161 1104:0.493607213773356 1106:0.0389108076098036 1116:0.0354099234956572 1145:0.0797843613763227 1162:0.0352294390170605 1164:0.096648157115727 1167:0.0388187399220135 1169:0.102664970735827 1184:0.119990962850488 1225:0.0270869400529538 1236:0.0334659694461623 1239:0.0406551222958887 1249:0.0458784604063789 1268:0.0411246572718679 1269:0.0620419344181471 1283:0.0376264178303251 1318:0.0402106413992042 1360:0.0448733830703051 1366:0.0329071875295157 1377:0.0289629966905513 1393:0.0347664287406844 1439:0.0357830623074145 1468:0.0425716286188473 1474:0.0467801004268342 1482:0.0359760911944432 1500:0.0346545875853703 1502:0.0434814815931144 1510:0.0465453795258592 1578:0.084858394199565 1591:0.0360414408703633 1593:0.0460948892232399 1652:0.0363761059755185 1682:0.0425716286188473 1728:0.0492568122980012 1739:0.0489423583391238 1748:0.0483469593237341 1771:0.0433227712522629 1792:0.0358469096770588 1918:0.0439765999669021 1956:0.0452609897463807 1985:0.0427165373316176 2050:0.0781961047308364 2093:0.0514428420979351 2200:0.0438082701818795 2207:0.0439765999669021 2253:0.0450649326779748 2285:0.0410047697219474 2307:0.0851432572376945 2308:0.0452609897463807 2335:0.0897467661406101 2479:0.10288568419587 2520:0.0564240444800788 2605:0.0441484007125946 2710:0.177232242041972 2803:0.313924261384476 2845:0.0499237314174815 2932:0.0518702199281268 3083:0.0572181728028219 3536:0.0572181728028219 3543:0.0564240444800788 3728:0.0523207102307461 3875:0.0672497235321421 3934:0.0580960409356329 4060:0.282512301695058 4193:0.0590774140139906 4212:0.0499237314174815 4386:0.0648527447188775 4393:0.0564240444800788 4418:0.0556990621223684 4499:0.0672497235321421 4821:0.0590774140139906 4867:0.0518702199281268 6078:0.129705489437755 6328:0.0601900030477767 6553:0.0706280754237644 7748:0.0648527447188775
+-1 6:0.0355731922562082 18:0.0476055759799224 25:0.0667452843871365 86:0.138173352871979 111:0.0556166320870929 148:0.234524950336363 157:0.270372094420476 185:0.0517878250412586 216:0.309499438620941 246:0.183849062584722 276:0.138173352871979 284:0.108015362024474 309:0.0654486449423316 333:0.26915704963153 380:0.437128406439525 398:0.0691730538334924 441:0.0627111165129719 475:0.0720633769549272 625:0.0988712628387765 721:0.235525379994569 876:0.0858287263819971 1283:0.220388833625945 1288:0.116830031658947 1296:0.181071764840024 1911:0.240879035848824 1932:0.114783190135767 2013:0.139963700488285 2728:0.163122774410303 2729:0.163122774410303 3110:0.151909455232113 4978:0.153228781360922 5373:0.19695056007924
+-1 6:0.0116251705410977 11:0.208958603783878 27:0.101549125576774 37:0.110008425905141 38:0.18942698165463 74:0.0953011761229402 75:0.141362294357451 100:0.0718368253984613 128:0.124959697900079 142:0.0422040644511557 146:0.104389721082206 173:0.0868919211524699 184:0.136987426233993 219:0.0972020060795097 234:0.0833947891265755 257:0.140866371437647 265:0.109822034928766 303:0.623209361472395 352:0.494009976087991 419:0.141421121934704 431:0.129627171806566 499:0.0865895743429878 530:0.0955658859374026 669:0.175635392987195 698:0.130608706160167 714:0.120306216744433 862:0.111859869432267
+-1 6:0.0248611853379225 18:0.066540615136886 94:0.0746231891216471 132:0.0753918364376568 148:0.327806861677523 157:0.377912148067996 185:0.0723863468493715 204:0.0746231891216471 275:0.083590727413908 291:0.100052387142994 353:0.139445110774825 382:0.109181611255455 430:0.0967470492348001 534:0.0947470840405276 591:0.130709086160127 616:0.17144693711398 720:0.247521128872916 780:0.252227447400448 1044:0.181439931342937 1104:0.367379156586341 1249:0.187803870984813 1382:0.162875285256599 2366:0.377379648404111 2426:0.189599405602529 2459:0.179329529553298 4611:0.210581715142067
+-1 6:0.0138437937363633 11:0.0622094058748608 27:0.0806196143459003 33:0.153214099580625 37:0.131003149769619 38:0.225578459503698 41:0.0637456145184063 72:0.0861531899827913 75:0.0561135981694553 118:0.0906510519558708 142:0.0323090760523977 154:0.100074482148756 162:0.149956094285343 199:0.129422220460284 225:0.131911397791292 239:0.117369289904973 276:0.107544095747415 289:0.120445934650152 317:0.0825120089979158 349:0.274478717079123 400:0.243969543612802 409:0.141401483432472 441:0.097619550781937 480:0.10182316548389 558:0.153681634624364 655:0.104825109844035 705:0.474721462886122 732:0.302970734101826 827:0.118248608044225 966:0.414840313174072 1045:0.0719157400404347 1475:0.207255156117182
+-1 6:0.0366404545115266 11:0.109766679546311 18:0.0653784429812389 27:0.142250954636262 38:0.29851995203147 41:0.0562386374128045 51:0.0829501594948178 53:0.282181155268647 59:0.151678493714976 74:0.10012407692667 83:0.0632918225716756 100:0.0754722672371299 138:0.204832720324216 139:0.399668006571391 142:0.0285042104775515 168:0.0907091820554663 190:0.104717830224744 286:0.0684352352479864 319:0.110795963594862 328:0.123911071112359 347:0.200664879466962 348:0.121337200675342 363:0.114094845655316 385:0.127787837734197 386:0.0972717175586281 423:0.0925355853052211 465:0.103855496457811 495:0.134600563022249 498:0.125496860916583 506:0.068327826256031 507:0.0653048719817624 549:0.130417545301825 558:0.135583377647902 574:0.0914492154006505 609:0.0864901743800836 808:0.127473172729315 829:0.0906047845355163 1319:0.128913032340691 1379:0.128913032340691 1442:0.183675322934181 1471:0.141454742933253 1495:0.183675322934181 1718:0.173618344835715 1806:0.167924760215597 2554:0.185394242108465 3160:0.203709783499948
+-1 6:0.028811238850013 11:0.258936254831668 17:0.0523318954735654 27:0.16778283533758 38:0.234733159130639 47:0.0454552894139378 51:0.130451267033276 63:0.0207584801435748 83:0.0248839137188041 86:0.22381716229625 106:0.201670926122426 118:0.125773284387368 138:0.241597075209685 139:0.0785670548547266 142:0.0647501733275508 162:0.0520139316787816 179:0.0523518961802313 211:0.191025973513813 234:0.13778763817575 308:0.0709593243043178 328:0.194868295908068 404:0.0806492141591103 408:0.0565509892247884 465:0.0816639846372909 498:0.0986810912418428 521:0.0947021249405542 561:0.0851045326574174 607:0.0942077215113993 631:0.0644543317283843 847:0.102416237741301 960:0.221348733859811 1037:0.107408514349992 1045:0.299337248566187 1055:0.10479432688119 1120:0.154785202363133 1223:0.118012189585045 1511:0.115921592662401 1808:0.289688890483648 1948:0.144428164728284 2040:0.261672016474 2171:0.265759479646254 4156:0.156813197352933
+-1 6:0.0245642787087436 11:0.220767401380954 17:0.133853522140606 27:0.17881322073789 51:0.250249318347292 63:0.0265478219005738 82:0.276374703232414 83:0.0954713984396199 86:0.0954125434013177 106:0.343886693835762 114:0.258728160338175 123:0.124607600798678 125:0.131670453135484 139:0.200957311432214 142:0.0541439394330792 199:0.057411348995691 234:0.264322940775802 298:0.121758020856665 317:0.146408421307179 328:0.498430403194711 446:0.151548752635838 518:0.107110792036446 532:0.14201172601889 622:0.13555254313657 829:0.0911140927158503 1067:0.130638741369096 1281:0.158911570048933
+-1 6:0.0139377091336643 11:0.125262860885364 63:0.120505331882858 77:0.105098459535835 85:0.0854142444976247 86:0.108273667906018 118:0.182532045605806 120:0.232241768549371 142:0.0578280155115988 186:0.0790914825941894 192:0.112559027184957 199:0.195450318593334 237:0.239548167068109 242:0.0976624696441275 276:0.108273667906018 296:0.125684411013825 304:0.422144946315669 339:0.108409039849412 349:0.138170381431698 409:0.0711803709547382 436:0.36932975203273 586:0.204911703979024 657:0.144760832014968 761:0.141726793946501 847:0.148634469309031 856:0.104604203427289 1067:0.148248177801561 1271:0.177752914193557 1710:0.388198912992405 1746:0.162805196064393
+-1 4:0.0110019593273792 6:0.0381525877529946 18:0.0136153157281997 27:0.00740607902120849 29:0.0369500695291031 30:0.0152886116981871 37:0.0120345363481678 51:0.017274694222231 57:0.0569676697474916 59:0.0157938189327924 63:0.0109955665484502 68:0.0156145088414047 75:0.0103096931330945 86:0.0197589650566288 98:0.0164989144030449 108:0.541541458842034 123:0.0516099276300693 138:0.149300245008616 142:0.00197870433299801 151:0.0200871481798986 162:0.0551025550295511 165:0.0740871812475941 166:0.0189781893866839 173:0.0190113434469689 174:0.0186445153308106 179:0.0277302940487898 186:0.028866960380654 196:0.212869418286152 199:0.0118893050978464 209:0.0798892891158077 214:0.0217913783927028 226:0.0197220720197091 228:0.0192364893127001 229:0.0133200001913914 231:0.13633804265921 237:0.0218576868873912 241:0.0335903768680541 243:0.0239829738575828 254:0.0245472338940506 276:0.0197589650566288 278:0.0219583460828403 281:0.029360205667967 291:0.020472381229262 314:0.0202970562304827 323:0.021758458913906 332:0.0326696655525542 337:0.0194455240708391 345:0.0186655678854323 347:0.0626838656196165 351:0.0180504205931504 364:0.023566525634909 369:0.022744527656308 377:0.0978820988936284 381:0.0733498955690607 396:0.0258343487702994 433:0.0205686436735757 436:0.0224664463851064 462:0.0312549588201025 480:0.0374157289578564 485:0.0176018217586385 490:0.13161078584743 499:0.0378903841675411 502:0.0175567090187153 506:0.0284590725956688 508:0.118406088248749 523:0.0298138689550059 530:0.0209091461584996 531:0.0286200247643519 534:0.0193868280430572 549:0.0271599624403824 571:0.0200742362121732 572:0.0275630565248137 574:0.0190446557611245 601:0.377801494910861 631:0.0170704186663372 636:0.0260133051540699 640:0.0712165599538362 645:0.0647257011645358 663:0.0238045892818064 664:0.0862588815832903 674:0.235763000576645 678:0.0275254342419772 707:0.0377463824757383 714:0.0263221571694859 727:0.0272315416992966 764:0.023524100479548 767:0.0243302552809366 780:0.0258049638150347 803:0.0317869432431031 804:0.0239604248345256 822:0.0340527258022189 824:0.0284466266132461 884:0.0262592836220312 908:0.0541079030855873 914:0.0325916880199258 942:0.0329089661354476 944:0.0278322492122635 950:0.0277156072230395 988:0.037585940546182 1009:0.0906771301758068 1033:0.0304686222198882 1076:0.0697255676017863 1157:0.0697255676017863 1167:0.0325145721351244 1168:0.0330731835136029 1202:0.0945476498609883 1213:0.0323628505822679 1228:0.0313192810870868 1244:0.0718057813460974 1245:0.0248730593671196 1319:0.0268466417485929 1335:0.0273403062367478 1340:0.0341489882465326 1374:0.0339577730917112 1388:0.0987268984063429 1433:0.0245227893276763 1441:0.0331567643516826 1476:0.0327485242058913 1493:0.0339577730917112 1539:0.0418161117462691 1587:0.0409941137676681 1613:0.0291676716212273 1691:0.0713159825598705 1775:0.0825150007355812 1778:0.0393853083879916 1783:0.0368347951209638 1865:0.0301883067659467 2000:0.040495407620226 2008:0.045096227859953 2019:0.0514909444268505 2034:0.0342465970623302 2099:0.0369786954059784 2112:0.0819882275353363 2223:0.0322882090518851 2270:0.0374291043602165 2273:0.0430885186791082 2303:0.0353060385601789 2423:0.0328282841204894 2723:0.0331567643516826 2809:0.0427480161941842 2837:0.076502204677635 2868:0.040495407620226 3038:0.0418161117462691 3069:0.0434464903009753 3071:0.0427480161941842 3101:0.0387951894320019 3223:0.0442227247282823 3282:0.0543206515862963 3463:0.0412575003677906 3482:0.0387951894320019 3553:0.0407403070133394 3586:0.0421131317443302 3989:0.0427480161941842 4069:0.043823820927114 4317:0.0442227247282823 4783:0.0563283607671412 4800:0.0514909444268505 5178:0.043823820927114 5205:0.0504151396939207 5298:0.0527633513596895 6271:0.369343459517827 6806:0.0563283607671412
+-1 6:0.0163480083768758 12:0.110205460172074 18:0.0437552159671556 27:0.0238007398074232 29:0.0296863896607761 43:0.0746669814657181 53:0.125901819495091 56:0.150926649386027 59:0.0507562198443309 72:0.0508687538385424 78:0.12559352992427 83:0.0635380847102749 92:0.053960502146402 108:0.227000725025817 118:0.0535244957043285 132:0.0991510546965622 138:0.0685432346369731 142:0.00635891500085855 160:0.0740877475447653 208:0.0612391556103868 215:0.0520738524287274 218:0.0463660647764116 299:0.0676674105488341 304:0.309467514193003 382:0.0717947222203577 389:0.069662322807693 416:0.0795254231611453 439:0.088098977323308 546:0.0706213848478424 674:0.324713974842624 684:0.0765002417738718 701:0.352433595774367 829:0.0606382124478974 881:0.0931333222570007 916:0.0990473478277808 952:0.0761492490393351 1076:0.224075396395678 1143:0.0970154426526397 1225:0.0729119429157922 1296:0.0832133002599391 1583:0.121304650599033 1650:0.135337968748675 1690:0.106826961722481 1812:0.137378281788205 1863:0.0984746874923352 2569:0.245853313610676 3395:0.138472546516443 3494:0.140835569842887 4656:0.151880821612443 5071:0.18102111178644 5470:0.174568984596678 6531:0.174568984596678 8298:0.18102111178644 8440:0.205660764018888
+-1 6:0.0170559148826536 9:0.130474416100892 13:0.113356969862207 17:0.0929396017462108 80:0.111052751900945 105:0.181180335326029 142:0.0176913885370216 151:0.134697818589531 160:0.309183672246816 217:0.282396830507346 265:0.161125832379227 506:0.0954185970896995 586:0.125377726999777 672:0.23831078777297 709:0.297484420144926 765:0.625686474404921 784:0.334967776727367 867:0.149927041013962
+-1 17:0.15080103878021 34:0.220551299218723 372:0.273184438294121 451:0.314318875824856 670:0.394819545575559 718:0.454977010517459 1320:0.389294668146368 1336:0.490666063402373
+-1 33:0.0636535558144631 41:0.158900585890507 63:0.0248635951969441 100:0.0710815436632797 131:0.152731525111203 142:0.0357945747194162 204:0.138108693534315 331:0.0899220706054427 351:0.0816326014280606 457:0.0793185617995036 899:0.632968441458059 1434:0.245663865690717 1861:0.223786764378276 3284:0.360065123506785 6688:0.509487366221806
+-1 6:0.0403793936945034 15:0.0461144831552605 42:0.080528389097672 59:0.0417890941471505 63:0.0145466643517233 72:0.167526986826581 75:0.0136392831524929 78:0.0517024303856281 108:0.0622987993633705 118:0.0440682973835918 138:0.0564336685076169 142:0.00349032162573189 165:0.0653427817854423 172:0.0527765046342193 186:0.038189754176064 196:0.062581586151328 200:0.325073935404727 204:0.040400850982838 214:0.0576581235433877 231:0.0721477601429821 276:0.0522805316760544 320:0.0638800236353352 341:0.0562305243645804 373:0.048042971249724 385:0.0704139110448973 414:0.0497252913575895 416:0.0654756285193345 422:0.122736965393281 442:0.0572693593659352 508:0.104430794318512 530:0.165971437510887 535:0.0638189802198549 613:0.0622427579960268 621:0.0937219822686975 647:0.243162256708384 663:0.0629849073783058 674:0.178231067472604 684:0.125969814756612 688:0.149418850215215 757:0.0639412695169091 784:0.0660855575348578 881:0.0766794135570247 909:0.0592529404669536 1017:0.158606109491588 1055:0.0734354292107113 1076:0.092243944335868 1192:0.0837434507676512 1226:0.426085488761548 1305:0.0612090663134314 1626:0.0967229944730856 1881:0.117009547531072 2822:0.119320762112077 2990:0.114008535326684 3448:0.32338610426185 3686:0.149040025168666 4535:0.123441245325287 4855:0.120594758008973 5666:0.130928408461583 5768:0.133394147930662 7285:0.313054376609925
+-1 6:0.0181440780934009 9:0.069399326017191 17:0.123586407095043 37:0.150234465856765 41:0.0626601401660452 68:0.0278464926458012 70:0.0521873324588901 87:0.0422576833052606 109:0.0499181563575058 111:0.0567344369103702 116:0.0485639947670024 138:0.0380368597004967 142:0.00705753555448845 144:0.0269675856274671 146:0.0407317734558809 162:0.0245671014852301 188:0.0501346141786059 194:0.0359386543244004 209:0.0284944793901246 216:0.0394649849228955 224:0.0431384759399909 234:0.0325397713768166 239:0.0769137998715318 240:0.0408347755141112 262:0.0849049210711525 281:0.0523601965016212 287:0.0842080537936255 301:0.0411136893934381 303:0.162113167617897 311:0.0581231347062636 369:0.0811239506213792 372:0.0447767249829829 373:0.0323814454269282 377:0.0698241148583396 381:0.0436034064702262 382:0.0398412154138234 391:0.0469422229982721 409:0.0694968339273522 431:0.0505791618275682 442:0.386001237372224 448:0.0410784814180497 496:0.0760737194009935 572:0.0491552093383027 577:0.0662088359585563 580:0.0410433727600722 631:0.0304429228406099 643:0.0369058211981326 645:0.0577150322107225 720:0.0451611883242192 778:0.043347657519434 792:0.04977591468357 794:0.0529848586140494 796:0.0398730874184366 803:0.056687974642175 812:0.0508075354092721 858:0.0455076205386728 871:0.104203585055347 882:0.0340633722046381 890:0.0476370644955178 975:0.0562045736494849 1030:0.067908656569561 1061:0.11766905790731 1198:0.0540345694752037 1204:0.0698779142789205 1213:0.0577150322107225 1244:0.0640282439393151 1291:0.0688543780036488 1326:0.529482378356148 1446:0.0473428188524518 1472:0.0461249046136569 1535:0.0673158773479349 1636:0.0662088359585563 1662:0.062562314981929 1688:0.061074454721952 1730:0.0640282439393151 1746:0.0529848586140494 1819:0.125927668055929 1910:0.0555129506707469 1932:0.0585450737913342 1954:0.0642525024570039 2141:0.0751034198591319 2156:0.365538967362681 2204:0.0676087381775363 2236:0.194140555595368 2275:0.0713883728401581 2402:0.062562314981929 2558:0.0756566669850553 2741:0.070993228191701 2794:0.0854698159651349 2937:0.0854698159651349 2988:0.0762356556113647 3495:0.0788656109155347 3552:0.0796201456255295 3634:0.0788656109155347 4649:0.0822044274435806 5052:0.0842835844188838 5405:0.0918275572975791
+-1 4:0.115342318503359 6:0.0133328006930002 11:0.0599131730474164 46:0.223281772855313 59:0.165579206350735 73:0.144880400350845 77:0.100537096928514 86:0.207148997105166 120:0.111081139051026 142:0.0484034516115291 150:0.116273460273272 179:0.0726796998878113 183:0.117293578413523 218:0.0756287232464429 308:0.197024473647514 317:0.158932759574218 409:0.204273246792281 456:0.144482757571168 457:0.0919363306882639 506:0.298359166577812 896:0.337728813598546 2754:0.186915587715594 4112:0.63681850632256
+-1 11:0.0745286753593838 46:0.208312637059358 51:0.0563209667410055 63:0.125471586048039 74:0.0679816029396926 75:0.0840321508139545 77:0.0625312955185172 79:0.449893139695273 82:0.124401461483354 83:0.0214867376732389 86:0.322102376885766 106:0.232184820811216 114:0.0582292100118546 120:0.0690893982891922 137:0.0678877740427399 142:0.021504006476257 162:0.0449129392572682 170:0.0823847535110479 181:0.0699956299127374 199:0.0387628949245155 234:0.0594883680588447 264:0.136530867508813 317:0.0494258918356049 399:0.234576240066531 457:0.0571818566359009 499:0.123534636217045 505:0.178952332696257 561:0.0734859792827399 623:0.57554426084877 796:0.14578989339061 1467:0.101901050956556 1659:0.116652051938118
+-1 6:0.0284234193970693 37:0.0448282402346876 42:0.113369318717883 58:0.0635555045787572 80:0.0616892334066368 86:0.0736014755136126 94:0.0568770467516959 123:0.0961226160843255 127:0.188454630124803 137:0.0775629224967262 142:0.00245686887102375 161:0.0924608541764212 162:0.0513137877302992 168:0.140733250124752 186:0.0537642247840391 241:0.25024603196185 289:0.0824312896794284 296:0.0854368220692995 308:0.070004162102643 315:0.402616394229668 373:0.0676357615096202 423:0.0717834367872309 442:0.0806248371223579 458:0.0997504385569644 485:0.0655661898004509 488:0.418266437564359 506:0.0530045406929734 507:0.0506595180042218 528:0.0991299740733592 612:0.220582003742752 723:0.0972385053250173 742:0.194477010650035 867:0.0832837013829821 947:0.115257717328209 971:0.118149164275482 1074:0.123822933695406 1138:0.0934273680139864 1150:0.103383721848402 1157:0.129862688703778 1412:0.118925228705958 1516:0.151756263572792 1910:0.115950991154323 1992:0.247645867390811 2102:0.132380418842382 2157:0.152701685135125 2596:0.131091085462452 3341:0.202342587081552 3758:0.161836704649005
+-1 6:0.0282669063909724 12:0.047638332368126 37:0.066872091602564 52:0.0576139530646742 69:0.0716949890762748 98:0.0916792208177801 111:0.0441936760036666 176:0.0366299423196107 179:0.0770442130111236 224:0.0672060192294058 242:0.049517030755684 262:0.132274532974153 271:0.0779923378441357 379:0.172620962300186 398:0.0549657793825851 411:0.0529434974339 429:0.0806460114014727 542:0.401822540139302 657:0.220190824496561 663:0.132274532974153 732:0.154654958444762 745:0.0959858250808754 769:0.102739425724049 786:0.223705413641722 846:0.409358486646771 858:0.0708969418683452 859:0.110601317154694 872:0.0806460114014727 1110:0.115387887176251 1211:0.122865809425009 1309:0.250262128735654 1430:0.318823818238317 1622:0.133154590423573 1751:0.192546173560432 1882:0.106765513567294 1956:0.105328574063582 1967:0.113190465494227 2109:0.117866551968675 2622:0.128067397170006 2623:0.128067397170006 2737:0.121757518637537 4310:0.14007044983836 4767:0.131306544140742
+-1 6:0.00874124987800479 12:0.0294633279808946 52:0.0356330440432489 67:0.0247229565908738 69:0.133025624915932 85:0.0267844323315434 98:0.141754277370256 118:0.0286194489726058 132:0.0265079428879031 142:0.00113336670119243 179:0.0953005197342065 189:0.0327062107134992 216:0.0380259931495985 218:0.0495836983596928 219:0.0365442821152845 233:0.0516865960488774 244:0.0643161787689404 286:0.02448971361318 291:0.0351786491681762 318:0.316532604409716 337:0.0334141525364725 341:0.0730360244575355 355:0.0526093608436452 365:0.0463086312014981 380:0.0537068560215464 382:0.0767770106770674 398:0.101985609392878 422:0.0398547768654363 443:0.0680356182037035 493:0.0390181616801476 502:0.0301685133839902 542:0.124259484974769 641:0.0691669885965691 650:0.0740410148098536 651:0.226196056277336 673:0.0441916575790235 676:0.043704102693249 712:0.0401353089184288 722:0.0561378126972476 729:0.0470430769060816 796:0.0384192152103721 812:0.0489549659576866 830:0.0759899740560447 846:0.126589898872135 858:0.0438482992008993 859:0.342023190197565 876:0.042180658885625 882:0.0656426734046124 912:0.041565539522772 936:0.0511414022392424 953:0.0955165416559651 966:0.043656419933015 1011:0.0524543588810831 1179:0.0545028390171054 1211:0.0759899740560447 1236:0.0481671353746777 1242:0.0554823381698987 1327:0.056831196462713 1365:0.0528574959472991 1379:0.046131838834046 1464:0.167613925295607 1473:0.0619096959760179 1498:0.0718545785282978 1504:0.0610677925775274 1517:0.0812103947334015 1518:0.056003820259699 1543:0.061272792413897 1574:0.0669921605078412 1584:0.0586798019985998 1599:0.0529604339046556 1679:0.0630526745617114 1682:0.061272792413897 1704:0.0663437756634652 1729:0.0792070490066951 1759:0.0663437756634652 1815:0.056831196462713 1836:0.046609203286383 1838:0.0669921605078412 1914:0.0812103947334015 1956:0.0651435549719544 1985:0.0614813576430086 2023:0.0640526033589675 2024:0.0425654683200281 2076:0.0545028390171054 2109:0.0728980362241601 2174:0.0884792955467806 2187:0.122135585155055 2238:0.0673299912535102 2296:0.06379469667914 2358:0.0746561341727066 2379:0.0657286563006122 2385:0.0687853747286234 2398:0.0635422200190564 2404:0.068404638039513 2525:0.0728980362241601 2577:0.0628151975263468 2721:0.0774909552986384 2728:0.0801669370375392 2729:0.0801669370375392 2968:0.066663586573438 3003:0.0850293550579958 3063:0.0774909552986384 3102:0.0836168775263239 3365:0.0713650330709528 3496:0.0740410148098536 3552:0.0767169965487544 3632:0.173261380021787 3722:0.0740410148098536 4182:0.0906657318283363 4438:0.0812103947334015 4470:0.0884792955467806 4526:0.186683427134474 4774:0.101654072076479 5543:0.0933417135672372 6848:0.21993286117144 7350:0.290374962168066 8148:0.101654072076479 8980:0.0967916540560219
+-1 6:0.0265059971490128 20:0.0498396293232721 59:0.0548627163005163 63:0.0190975548940404 85:0.0541454290043217 100:0.054597240315007 118:0.0578549630362743 142:0.0137467821969869 201:0.318113566448609 214:0.151392670214016 277:0.0800133322286654 286:0.0990131904507084 297:0.0863121535757609 348:0.0877762991220008 367:0.0754114605945344 379:0.323734806441347 391:0.0914348231641901 398:0.206166571107104 454:0.088156582089192 537:0.0988145560127242 609:0.062567682254458 682:0.547248264575792 692:0.246900273003965 726:0.0814231795684346 739:0.180514499361256 761:0.0898428371611224 827:0.07546816832109 829:0.0655442240715058 1138:0.0871248288470821 1256:0.301838647356725 1327:0.114885746885089 1432:0.105056241952632 1479:0.139051430241371 1598:0.0924427414402187 1868:0.139051430241371 2460:0.162059555495903 2640:0.122247780570941 2824:0.128962644312782
+-1 6:0.0289976174553986 9:0.110913053677879 17:0.0395028211097995 18:0.038805858947584 37:0.0686007624574306 47:0.0343120032241135 62:0.331990966396303 63:0.0313391487238286 69:0.0735483337988044 105:0.308033787127323 140:0.0512277416403368 142:0.0150390090646243 151:0.0572516315074417 175:0.140348177324186 194:0.057436665814385 199:0.0338864486011318 201:0.0870042301690284 218:0.0411213824431488 243:0.0683553667972128 338:0.189974659317851 341:0.0605711633702365 381:0.0696863678643304 415:0.0630723991478752 426:0.0652615797363629 436:0.0640330174399249 442:0.061690189829492 461:0.158652852227014 483:0.140773658268953 486:0.216102721364217 501:0.0753857356255129 527:0.0691432339279705 538:0.0635216513710859 586:0.0532902425636595 621:0.302870170438364 631:0.0486534629211772 681:0.0793264261135069 703:0.312568184242903 723:0.148804315551861 724:0.0848264744151617 729:0.0780287239860269 797:0.10712602897827 806:0.0778204388937849 816:0.110042125215797 867:0.0637246229747005 1076:0.099364590414567 1200:0.103424260241703 1232:0.164157039753438 1477:0.120029258442146 1480:0.105395281801505 1544:0.0949873296589256 1986:0.112254519279781 2090:0.116839875644932 2376:0.100627938397828 2475:0.116839875644932 4604:0.36274035129639 5023:0.146757546163085
+-1 6:0.0312446265114183 17:0.068102195975043 29:0.0226948784473436 31:0.0238175572836811 42:0.0373865857416095 96:0.0387169021993383 142:0.00162043734127039 162:0.0338442066407684 196:0.0581089939264707 199:0.0292098323448602 248:0.152037344142338 252:0.0901958959700774 253:0.20484795959528 278:0.107895222197026 295:0.0530577650285923 409:0.0638269627840997 480:0.045961776610379 502:0.043133599713667 507:0.0668253610381692 511:0.243155419460073 514:0.0663806303845084 519:0.0747158243722201 546:0.0539891769669291 586:0.045935738773447 631:0.0419388739036228 767:0.0597749550385865 781:0.270869408556956 975:0.077428719293282 1046:0.140413260302284 1352:0.0908498422953192 1447:0.0812547190599156 1500:0.0713132019761263 1700:0.0898103778449425 1710:0.0870238425286855 2093:0.105860552508919 2195:0.0972743033280441 2364:0.202724155666501 2523:0.194548606656088 2792:0.0957824138869371 2826:0.213480045674655 2854:0.110793124100537 5502:0.25925966816154 8538:0.581361898533316 9196:0.314450230838509
+-1 6:0.0101256312490566 15:0.138765308425488 57:0.0755956084441298 96:0.0627360795356314 138:0.0849086326054585 144:0.0601989974548016 179:0.110393586059145 367:0.0864244387004458 388:0.210590587052716 444:0.133019022962456 478:0.0794061587823654 557:0.0952963558841275 671:0.123675167052528 1036:0.114464794960059 1485:0.126269276731823 1626:0.145526906532871 1679:0.146077080689607 1731:0.125729786246442 1734:0.140100665534445 1792:0.119530214172545 2468:0.150267375994114 2635:0.471013488083186 2771:0.146077080689607 3735:0.164245045848538 4041:0.196991484439497 4604:0.337772581215672 5357:0.171534282564552 7462:0.44848350551042 8971:0.22424175275521
+-1 6:0.00635944767018585 9:0.0729727980469305 27:0.0185171864153329 35:0.0690096188758487 42:0.0190239140403706 62:0.436852271953532 70:0.0365830226380706 75:0.0193327510836399 83:0.0329554618490311 84:0.0559849502422036 85:0.0584587552690909 114:0.0223273832704128 137:0.0260308589128867 138:0.0799908656339463 140:0.0449388840617139 142:0.00989458440560156 162:0.0172213981332332 173:0.0237667320052438 184:0.0749377710657024 215:0.0202569592497823 223:0.215947519420232 243:0.0899458127120654 299:0.0263229224283362 302:0.080729193452953 367:0.0271396262525301 378:0.0439954225622983 380:0.0390728951998782 398:0.0741967287399018 408:0.0187235817181178 415:0.0276647295199979 423:0.048182416421181 437:0.0286008105104111 466:0.0293818860815589 475:0.0257656536068537 480:0.070162027639135 485:0.0220046406351324 502:0.0219482436528377 507:0.017001818953101 527:0.0303275107748884 567:0.0345048094379243 611:0.0411406264314019 612:0.074029430987361 639:0.0365830226380706 654:0.0332279108399014 655:0.02407684675421 676:0.0317956765827617 697:0.136352687795668 744:0.0392344661651514 780:0.129038678641035 782:0.0362292748810751 789:0.0326725226424471 808:0.0663740924176815 812:0.0356157927697519 844:0.034843201324095 906:0.0372064722847875 927:0.0408414685713489 1021:0.0340430835654591 1055:0.0346965662290313 1116:0.0370781672844944 1152:0.563763399985179 1201:0.040552229394235 1279:0.194952962108686 1394:0.0824853389970548 1445:0.049236923840357 1499:0.048499195908749 1518:0.040743986185342 1607:0.0822812528628039 1634:0.110568687593335 1855:0.0411406264314019 1967:0.0509308540608038 2107:0.040743986185342 2112:0.0512481465829277 2119:0.452960280379865 2225:0.098473847680714 2295:0.0473933401602493 4598:0.0512481465829277 5278:0.067908108240902
+-1 6:0.0338626788333725 9:0.129521438128475 11:0.0304335238110634 17:0.0184521551994509 26:0.0146567009424124 27:0.00985999994024296 31:0.02581328000826 33:0.0187385045806308 35:0.257222871720966 41:0.0311850539321861 42:0.0202596428090091 48:0.041431929274506 57:0.0252810886254173 62:0.310152473400974 63:0.0365970593887094 70:0.116877994183804 75:0.00686284695215467 83:0.00877403414789469 85:0.0207520124109362 98:0.0219656439746643 127:0.0336777492818274 141:0.0927975061380847 142:0.0289775831505088 151:0.0267427986234386 154:0.220308905323133 162:0.0550201247930332 173:0.0253105381017747 180:0.0260948851196241 186:0.0384317027691935 196:0.0314890337694286 214:0.0870351190020657 215:0.0215727824424741 223:0.321964630387088 243:0.063858924574107 250:0.236570178861861 275:0.0227712871883661 281:0.0781767586607353 289:0.0589234725612849 304:0.0512815937006877 306:0.0265723112344083 308:0.025020161281428 319:0.0307188994890871 320:0.0321423655926669 322:0.0293471688363044 330:0.0336777492818274 331:0.0264715004586913 341:0.0282933845158122 342:0.0316335359356999 345:0.0248501937000575 357:0.0626934891744159 386:0.0539384291243788 414:0.025020161281428 418:0.0349600016692506 426:0.0304843240058614 432:0.0636199167258936 457:0.0233500110809415 458:0.0356517667753672 461:0.0370541517021196 465:0.0287946099619885 494:0.17209624298547 506:0.0378886659579385 507:0.0181061993006439 515:0.0489305836717533 520:0.0502532214265298 538:0.029671586400545 543:0.074962826554631 546:0.029256521268403 556:0.0418702465908476 564:0.0839166329272515 571:0.0267256084205476 576:0.0331486897567023 610:0.174397516304353 628:0.0367967584553093 671:0.0206800561789846 726:0.0624132032569981 755:0.0353427638839404 761:0.0688671123707423 764:0.0313185463803983 800:0.0298621838944741 808:0.0353427638839404 824:0.07574419227867 848:0.112280756043437 858:0.067945472052726 866:0.037872096139335 867:0.119065585709672 882:0.02542927840168 906:0.0396232782104397 908:0.0360179738605806 913:0.0353427638839404 930:0.0592960685831569 957:0.471003414281252 987:0.0552911527099215 1042:0.0385826053861675 1058:0.0379868050285532 1083:0.0363024236879746 1086:0.0426946463099429 1198:0.0403383464868103 1225:0.0604108745030261 1322:0.114134084843966 1359:0.0375913707974646 1373:0.0392853754449752 1424:0.0314890337694286 1433:0.0979444186106013 1709:0.0431863643250671 1873:0.0448400595730748 2200:0.0488518804076502 2237:0.0488518804076502 2404:0.052998468662329 2561:0.0504718503844657 2709:0.0506957480139418 2843:0.0638056541219907 3070:0.052998468662329 3116:0.0613679485036096 3546:0.0980791797256035 3924:0.0583443506996302 4107:0.0583443506996302 4152:0.0658789482493301 4787:0.242717555811265 5816:0.0638056541219907
+-1 6:0.0235966120745917 9:0.180509471557155 17:0.0642902988160078 58:0.0791439569145139 62:0.270155369087535 63:0.025502017064731 142:0.0122378903518551 153:0.204659466677628 175:0.11420736551162 216:0.102649463363352 265:0.334372895386143 380:0.434937748596535 408:0.069473501059005 415:0.102649463363352 471:0.122988995969654 571:0.0931163505197351 705:0.134859687748054 720:0.117465438169798 727:0.252632454382181 867:0.103710948683729 990:0.158856262447997 1216:0.126316227191091 1688:0.158856262447997 2071:0.211416823974329 2165:0.176632201132491 3652:0.47769178156181
+-1 6:0.0125327923518137 9:0.191746825129818 17:0.136585194984779 18:0.0670876871828372 62:0.28697349711041 83:0.0324732572412184 142:0.0129997423459968 159:0.150793461132256 175:0.121317178286458 216:0.109039755816747 218:0.0710907712569401 220:0.100540141395122 229:0.0656325585064899 278:0.10819687787386 381:0.240948010170582 389:0.106809760108611 453:0.121561931621724 506:0.0701141786913352 514:0.266264874853764 539:0.116436941069257 550:0.204216275237897 621:0.349068582295382 655:0.0948982164824181 760:0.19837002736484 797:0.370399610581544 974:0.321951006750171 2415:0.182931662584869 2953:0.219986432379577 6664:0.259984511663251
+-1 6:0.00570898519508272 9:0.131017863594281 35:0.18585335374055 48:0.104776532297893 57:0.0852439119706275 58:0.0382963178677456 62:0.52289303146313 70:0.131364826295374 75:0.0115702280492224 83:0.0739617076634164 111:0.0357026748568131 127:0.11355615012016 132:0.0346251292689689 142:0.0236867681231295 149:0.25425495053411 166:0.0425971901065414 190:0.097897127705036 200:0.16545647700569 215:0.0363700391770096 223:0.0775439160897388 239:0.0968028780528305 243:0.0538305986896981 247:0.0840108948996167 289:0.0496702039065667 299:0.0472610774483472 314:0.0455574314934216 330:0.05677807506008 341:0.0477004533853849 362:0.25203268469885 363:0.0533316897973963 380:0.140305631428274 398:0.0888102338164826 402:0.0435143934379945 409:0.0874679647990887 434:0.0494004533157938 459:0.0521498009937726 465:0.0485454806396372 483:0.0554303974904988 499:0.0425231265403832 507:0.122102594724103 515:0.0412465858273292 527:0.0544510526690095 545:0.0908933166222378 571:0.0450573044008902 613:0.0528006418207518 706:0.0581188225826874 709:0.0995744972966775 744:0.0704429057648894 804:0.0537799866422411 868:0.16289547137876 913:0.0595851606305493 962:0.0773152344362202 989:0.138086734059204 1089:0.0932182291856992 1152:0.404880055119734 1420:0.102300746755124 1437:0.0780115452953027 1467:0.0701528157141372 1472:0.0580523069198525 1496:0.084723036396793 1721:0.0748035606135343 2254:0.0920126794938509 2835:0.0932182291856992 5229:0.109221798374168 5297:0.0992594063584191
+-1 6:0.0258440997732776 20:0.0291570321762098 35:0.336537051902404 48:0.0316209747976125 57:0.0385892079021493 62:0.177531985292996 74:0.084746218406854 111:0.0323246062003143 123:0.052439907651813 139:0.0422854737027155 140:0.0365253419360788 141:0.0472155598231537 142:0.0026807005875927 173:0.0386341597625142 190:0.0443172131205639 218:0.0586390305926592 243:0.0487373260168935 331:0.0404062597864263 378:0.0715170341347786 386:0.0823319472605045 398:0.120610956161783 428:0.305523118013435 434:0.0447263463019025 457:0.0356415993579496 483:0.0501857571622633 494:0.0875629183819808 496:0.0433432172018411 506:0.0289167454267773 509:0.0479777772726301 511:0.0670422791861802 529:0.0882903752746638 576:0.0505983622643194 610:0.133100716389266 612:0.0601695021272317 613:0.0478048202501543 638:0.0631301255388878 654:0.0540138381532678 662:0.0538812923280212 675:0.176580750549328 681:0.0565596832026164 706:0.10523962478138 727:0.0553389472724471 771:0.0548362308416144 844:0.0566395836960474 861:0.0690077497397243 867:0.0454356090932166 916:0.0626324499114037 957:0.44933905303745 1037:0.0578081985813559 1059:0.0473814365687287 1112:0.0622703289605387 1157:0.070846879542563 1318:0.0684441404738591 1331:0.175292157617402 1394:0.0670422791861802 1551:0.0553389472724471 1554:0.0960416221208104 1634:0.08986781060749 1694:0.0813474554435044 1722:0.0737414211295178 1730:0.0729605468476136 1934:0.0882903752746638 2217:0.0916429118588118 2669:0.37048555786026 2912:0.0843982295781226 3456:0.100558028494565 3536:0.0973933396907066 3565:0.0890571728307753 3819:0.104638021971396 5355:0.100558028494565 5938:0.240437742224033 6375:0.104638021971396
+-1 6:0.0340664960236179 17:0.0464080437066436 42:0.0509539605969423 100:0.10525561402022 140:0.120365037546528 142:0.00441696928452129 151:0.067259404331882 196:0.0791964103735213 199:0.0398099108763181 214:0.0729658146162603 240:0.0766695177630849 287:0.0790526064468521 314:0.0679622562409887 379:0.20803802313756 398:0.0662432414383311 403:0.0986382572603238 519:0.305489289447986 590:0.286273201137404 607:0.0835436213009477 628:0.0925455891844882 633:0.088563409282645 671:0.0520113201214956 726:0.0784860801709654 732:0.18638589076638 752:0.129901034670026 757:0.0809170769213174 785:0.239605829246726 860:0.11709614930579 871:0.097823956600633 882:0.0639558388024338 895:0.088563409282645 943:0.114343787750652 949:0.293477607145289 980:0.149491165127783 1003:0.0900070265986558 1245:0.0832844534207265 1279:0.261082591323297 1383:0.123818722483719 1428:0.143136600568702 1664:0.101081921270317 2468:0.25277846096064 2640:0.117838054930651 3751:0.137263868839577 3764:0.168809043212765 4245:0.172411246216708 4927:0.188608754127704 5037:0.176671748086065 9496:0.214281196771768
+-1 6:0.00966563285122052 52:0.0394012213242013 57:0.0360806836834821 79:0.0327738309766656 83:0.0250442657283341 84:0.0283635729756793 85:0.0592337463539369 94:0.0290123072746984 96:0.0299430176944711 100:0.0597280166380422 112:0.0538084904429396 125:0.0518101212110259 136:0.061209246104527 140:0.0341509810765844 142:0.0100257574808287 144:0.0574642106845322 161:0.047163185598546 166:0.0360597186710261 176:0.025050606453051 183:0.0425160733613217 193:0.0937518923762211 233:0.171457286215398 240:0.0435066411916471 248:0.0587915952370826 253:0.369660795094968 262:0.0452301731788784 275:0.0649974866417053 300:0.0689477974487366 325:0.0433968995919197 327:0.0406435252833675 331:0.0755592331349952 333:0.0487553136890056 339:0.0375901795226468 347:0.0397010574156207 367:0.0412491267608206 377:0.0371963929447385 381:0.0464564268114592 386:0.0384899445679726 402:0.0368361570702164 408:0.0569154039573573 416:0.047018788154088 419:0.176374785711248 442:0.0411257736144082 448:0.0875325860985931 457:0.0333246869349696 502:0.0667176383483822 507:0.0516816391379454 514:0.102675383476701 557:0.0454835637097215 589:0.230831241563824 594:0.0925483016940813 643:0.0786412218769453 688:0.0536496817470184 712:0.0443795985459686 723:0.0496002088107305 742:0.0496002088107305 744:0.0596318996135249 761:0.0982858188767 774:0.054214037879815 808:0.100881026374346 857:0.0778913193198168 867:0.042482028753106 880:0.22739031710195 932:0.0656431044360421 960:0.0556937764298138 1019:0.0694578744733408 1027:0.0505026227509144 1042:0.055064352696558 1168:0.0628410681733705 1225:0.0431086193771498 1227:0.0528086850135668 1232:0.0547176566709463 1272:0.0610703928188672 1308:0.11290343601938 1322:0.108593314519919 1330:0.0638237671274194 1338:0.0610703928188672 1393:0.0553304559597728 1439:0.0569484190589093 1576:0.107141969944641 1599:0.058560974335237 1724:0.074450105467167 1970:0.0664470092079207 2021:0.0705409551907568 2023:0.070826135378016 2067:0.120532976093977 2078:0.0670836291032982 2113:0.470105842434886 2139:0.0723519969923112 2204:0.144064909199445 2366:0.0733595980524882 2387:0.131286208872084 2411:0.0812238410260749 2575:0.0673028137236103 2694:0.141652270756032 2752:0.0866004574151283 3139:0.0794531656715716 3623:0.0866004574151283 3767:0.0774090709887762 3865:0.0924593221352224 4244:0.0760593950452598 4394:0.0924593221352224 4862:0.103212554913329 5369:0.0866004574151283 5524:0.107027324950628 6483:0.0778913193198168 8470:0.0957918438414805
+-1 6:0.0130394560645724 33:0.0360780534223595 57:0.048674773489983 58:0.0437348440403628 72:0.0405738035756977 83:0.0168930274748048 96:0.0807894671104679 98:0.042291404490923 100:0.0805762913576273 119:0.204644773944851 142:0.00676264173270432 144:0.0775222959572347 151:0.0514890669769414 183:0.0573564586164769 193:0.0632381604198779 220:0.0523023409167815 233:0.231305056272045 240:0.176078362917735 253:0.284966970569462 275:0.0438425442191881 325:0.117089480694694 391:0.0674711662073315 394:0.121475933252286 419:0.237939026298704 420:0.0662964151825514 431:0.0726986243157038 438:0.0726986243157038 465:0.110879016200518 502:0.0450028325804814 514:0.069257293979902 589:0.311403699999023 597:0.0583006854614864 609:0.046169657713642 611:0.0843550287136135 657:0.0677156658539713 663:0.122035849082455 667:0.0627964356148246 713:0.130388156124935 719:0.0701748769363819 761:0.0662964151825514 771:0.0691680721207894 796:0.114621061235546 800:0.114989908742963 844:0.0714427441465697 867:0.0573105306177729 930:0.0570826428777652 975:0.0807841616375131 1005:0.068728518172564 1074:0.0852070442942999 1168:0.0847759645033476 1232:0.0738170475849457 1319:0.0688155691748486 1360:0.0963434427247535 1373:0.0756378326734947 1424:0.0606271988067943 1602:0.179844586934732 1690:0.0852070442942999 1851:0.0882949042696367 2078:0.361997625115284 2113:0.126839588726038 2202:0.0914015610793907 2591:0.0947869009292062 2723:0.0849902059343032 3139:0.107186573182823 3663:0.126839588726038 3827:0.139239260979655 4807:0.139239260979655 5813:0.288771179887346
+-1 6:0.0308170815794644 13:0.102408197152688 17:0.251888624153092 34:0.122798365680471 50:0.292514926979135 58:0.103361693155198 63:0.166527664615664 75:0.0936840741835363 82:0.231150332209345 83:0.0399245032336604 114:0.10819568418277 118:0.10089722935016 125:0.165186983261061 142:0.0559392265506253 162:0.166905447991138 317:0.0918382403334707 609:0.109116062910245 685:0.162843509323224 725:0.448033360308079 829:0.228614115769968 956:0.408071606115714 1041:0.219827292367493 1471:0.356918800071504
+-1 6:0.0294449472617021 10:0.0496707583070232 13:0.0782787677425308 17:0.128359067960593 33:0.0325877513621911 58:0.0790076009238493 63:0.0127290400022568 67:0.0666235298733082 75:0.0119350372465026 83:0.0305174878843338 91:0.0941112957851558 98:0.0382000037023593 109:0.0648073701527 114:0.0413513032568064 119:0.431309218466821 122:0.063385943102404 132:0.0357168593161725 139:0.0481770908654344 142:0.00305420146642896 151:0.0465078559775034 162:0.0318947925105583 166:0.0439402791677983 168:0.0437373463410794 179:0.0321020313656451 183:0.103615236139717 220:0.0472424512903546 226:0.0456625936571951 229:0.0308398506833077 242:0.0412645470003847 251:0.0665718465944432 262:0.0551148624984884 275:0.118803244180739 288:0.061164643677999 295:0.0500016568455299 320:0.0558981328322848 325:0.0528809417644744 340:0.0674224805671453 347:0.0483774031077187 355:0.0708859660635428 376:0.0751045259138237 377:0.0906507288610759 384:0.063816857011023 398:0.0916104197740129 400:0.0518909085323281 438:0.0656655353834929 445:0.0921685565629441 534:0.0448864019129109 535:0.0558447168697839 538:0.0516012511020868 546:0.0508794197912071 559:0.168647137709131 585:0.0729688529097522 597:0.0526604975003104 620:0.083713748786769 623:0.0817442148475886 626:0.0555802541096463 666:0.0769638522695067 684:0.0551148624984884 717:0.0596785879577243 739:0.120317825821453 810:0.086659757739721 828:0.268175238481866 942:0.0761942633015245 950:0.0641700582638246 1014:0.0722171678925672 1027:0.123079126746722 1084:0.0961573992017473 1245:0.0575886956379153 1304:0.151645582897379 1438:0.0814814722464925 1455:0.0781916564095741 1599:0.0713590026617743 1866:0.18751836432774 2024:0.114705607307403 2166:0.110963112508917 2167:0.221926225017835 2248:0.0773628432557741 2414:0.0937591821638698 3046:0.0902653812958433 3134:0.106723748356661 4501:0.10059183591167 4539:0.122163202259965 4557:0.125768825816087 4850:0.136968915567135 5453:0.27393783113427 6015:0.229137472130079 7097:0.130417283058061 7968:0.130417283058061 8665:0.136968915567135
+-1 6:0.0273634158370211 13:0.227328314378411 17:0.149106335708509 34:0.10903637112933 52:0.0557724476077364 58:0.0458889817994475 61:0.080326114144842 63:0.25137038787868 75:0.0970490662679042 79:0.0463913734046655 83:0.0886254252574275 101:0.398924863064826 142:0.0567658580150599 143:0.120556550476297 162:0.0370500948237843 173:0.0511317180889327 190:0.117306304146233 199:0.0319767300102782 229:0.0358246378868793 234:0.0981476480471359 239:0.0579975537653691 264:0.112628602608243 297:0.13365628182962 317:0.0407729712092472 363:0.319526403412758 423:0.0518297957991831 473:0.0602298363552774 483:0.0664200801330819 507:0.0365776924449363 535:0.0648711558398744 571:0.0539904078696309 622:0.0754994813727512 717:0.0693247131816671 772:0.126766101350075 819:0.0687067131062222 829:0.202993365867426 1393:0.156640573688671 1405:0.0969003734579205 1471:0.316918963310118 1545:0.0874491558596568 1590:0.316152479568515 1844:0.088951562020763 1910:0.0837200956545798 2845:0.112465993965641 3482:0.104341110599426 3657:0.271186801441401 3715:0.123973999682081 4327:0.117865802775886
+-1 6:0.0243058151918437 13:0.107694156900387 17:0.132445125318045 26:0.0350674229664816 37:0.0383341253667825 98:0.0525547004757209 119:0.423846757517106 142:0.00210095062439442 151:0.0639844555961312 166:0.120904083071624 179:0.0441652481562319 183:0.0712757483281029 199:0.037871514029218 203:0.0614210675045174 220:0.129990190401478 226:0.0628215628274986 286:0.0453972037935455 325:0.0727524027735721 371:0.113202917300428 372:0.0799772279587082 376:0.309981320514498 377:0.062357610490302 384:0.0877977874465253 398:0.0630177710085006 523:0.189934793850868 530:0.0666028010521843 580:0.0733089608646909 598:0.0856244662578971 646:0.105349431536851 651:0.104826342871075 687:0.0911645937638565 896:0.102613775821266 968:0.224923681181353 969:0.0906122611877975 1083:0.0868566842686148 1438:0.112100365266999 1609:0.113202917300428 1625:0.109402483974425 1799:0.139593898499228 1822:0.115171480805816 1853:0.11922453324339 1945:0.123575982679287 3099:0.1505417702346 4104:0.538275438508692 5231:0.1505417702346
+-1 6:0.0346102918169039 17:0.0942976896846103 18:0.0308779874633331 72:0.0358980000117229 83:0.0298924846598215 114:0.0405044216926605 118:0.037772152892128 140:0.040762132498646 142:0.0059833018254494 144:0.0342942383499936 164:0.404279877780424 199:0.188745141692951 209:0.0362359642187847 211:0.0573687990504288 212:0.130620456626695 268:0.111009202258291 275:0.0387900446641158 278:0.0497990313700295 284:0.035030528733081 306:0.0452649484012521 327:0.0485115422920784 333:0.0581936592728498 339:0.0448671115747421 341:0.048196733016835 351:0.0409363008474932 382:0.101330846330082 390:0.0526923720215213 403:0.133617063354518 430:0.0448951992289387 483:0.0560071001271689 499:0.386689867350883 500:0.119391317147919 507:0.0308432401629095 518:0.0503052394777022 546:0.0498374008166656 559:0.330386432592373 560:0.0687148797938559 586:0.0424032732794619 594:0.0552321780700672 620:0.0819992772966501 634:0.064807729315324 639:0.0663657786395477 641:0.0456435424535675 663:0.0539861009532831 709:0.0503052394777022 714:0.0596956585739594 737:0.0679728350427772 761:0.293281440641899 847:0.0615151589535736 869:0.0772277089568651 925:0.0852406381277541 1061:0.0748189098949658 1192:0.0717788209191826 1196:0.0724057301552123 1305:0.0524639786069015 1332:0.141765383319793 1335:0.0620047048540691 1341:0.0662569989056066 1377:0.055017566117683 1407:0.0703122735661467 1463:0.0848849514965577 1575:0.280701954598055 1640:0.0897938941927417 1707:0.0659350748113336 1789:0.0875609883404852 1899:0.0829039457463167 2042:0.074091085620123 2655:0.10453802825061 3689:0.116775605371709 3811:0.10453802825061 3951:0.101251639255463 3973:0.110358151385438 4076:0.116775605371709 5345:0.107182058230271 7378:0.116775605371709
+-1 6:0.0277010408845783 17:0.251576821050175 21:0.0558585355203897 37:0.0436889347540226 111:0.0577453039435236 139:0.0755395909923084 146:0.248745076160824 164:0.107857834912737 203:0.0700008408970387 216:0.160672612515706 258:0.0875620963334543 271:0.203816095936529 275:0.0620927797338296 335:0.122269941057404 341:0.0771504429298328 347:0.0758536719087999 376:0.117760642398438 380:0.113464766495887 411:0.0691781862839395 449:0.105544917837672 463:0.113464766495887 473:0.0812973141114793 479:0.116947667745771 594:0.265237085712635 714:0.0955572341046505 740:0.132215702273873 810:0.135878745220123 882:0.0693405941229553 886:0.0795319359646268 914:0.118317489783707 951:0.120368884392933 1058:0.103582476384337 1149:0.265757680956018 1563:0.159093462163014 1854:0.15400936250792 1989:0.149776957710289 2274:0.4692722910357 2558:0.15400936250792 3673:0.157723640125077 3961:0.1564240970119 3994:0.169366138058902 4520:0.179638813954791
+-1 6:0.0305804146025196 13:0.101621729479817 17:0.361044936231822 37:0.0241150818824326 42:0.0304931711519859 47:0.0241232527936769 58:0.102567902887036 63:0.0110165851009284 72:0.0634363749122495 78:0.0391556586785907 79:0.0345636047084344 83:0.0264119291230689 91:0.0407251881835551 96:0.0631564023202669 98:0.0330609057374485 118:0.133496487343326 135:0.0464356639782679 142:0.00396497344234086 148:0.044801965631669 158:0.0365820546716934 164:0.119069074823028 179:0.0277833018349854 186:0.0578442819180474 188:0.0563319624040028 199:0.0476481282975958 204:0.0305966647913778 215:0.0324696024231185 219:0.0426155417906865 220:0.0817737213370977 271:0.112500839632273 280:0.0533924933582413 283:0.0382068000639553 286:0.0285582956762453 308:0.0376583174440571 317:0.0303776490377212 323:0.0436001025020188 342:0.0476122325809637 372:0.0503117622353647 376:0.0650006128543732 384:0.055231489256933 387:0.0719555033575697 388:0.318002270923112 389:0.0434365390679049 396:0.0517674647324439 399:0.0961152738464909 411:0.0763688854446961 423:0.115846402637975 454:0.0508538655435746 461:0.0557709037812816 473:0.0897477312119475 478:0.0399690843601229 509:0.0946173616399547 513:0.0381398349837382 515:0.0368231729585541 523:0.0597417191890022 597:0.0455760098221502 603:0.163701576578825 643:0.0414679032896441 647:0.23019174959897 671:0.031125943257896 680:0.140591806009084 688:0.0565794823912256 725:0.0740987639092939 740:0.0729794055274882 756:0.0676724275252421 771:0.0540714866283825 774:0.0571746579232728 784:0.200193570408137 789:0.0523703388687025 808:0.0531950616433364 867:0.044801965631669 900:0.0743931856091107 906:0.059637744626791 917:0.0620021949646224 963:0.0432427551699575 1006:0.0714523064787302 1020:0.0651534505963878 1028:0.0620021949646224 1034:0.0642605187799096 1292:0.0611688284352843 1308:0.059534537411514 1372:0.0712132491327319 1423:0.0743931856091107 1486:0.0696453431854633 1598:0.0533263726005624 1620:0.0616389404062489 1697:0.0696453431854633 1776:0.0590296264615231 1818:0.0826727321144561 1858:0.065622249159115 1873:0.0674896208149825 1884:0.1532968846173 1972:0.0740987639092939 2024:0.0496370537067856 2042:0.0654642303682495 2045:0.171318924304259 2219:0.14650191604966 2321:0.0870590806991779 2339:0.0797689964699135 2399:0.0740987639092939 2470:0.0759661355651614 2577:0.219752874074491 2666:0.0688224873775495 2826:0.0870590806991779 3094:0.0837920904962619 3779:0.0886145171724178 3810:0.091329694712749 4085:0.101023021299717 4894:0.105728422069554 6124:0.118542302817785 7392:0.103178743670198 9433:0.256471258809507
+-1 6:0.0217928489460115 13:0.144839566694666 17:0.0296879222822804 27:0.0317277747520716 29:0.0197868446943311 31:0.0415313356327487 37:0.0515561685754174 53:0.0419586176956816 83:0.0423499869368956 96:0.0337558684282612 105:0.057874873715563 119:0.342022905256598 132:0.0330435351516017 142:0.0141280078159506 160:0.049381644961631 162:0.0295075411907358 164:0.127280208369663 168:0.0809274146120029 179:0.0593985373953752 183:0.143789813683616 299:0.0451023030653812 322:0.0472170572054961 325:0.048922925797482 384:0.118080626252244 398:0.0423767960567141 409:0.0278242115913966 444:0.0715724136862313 485:0.037703259334996 502:0.075213254886736 517:0.303753111028816 570:0.0632067723490282 713:0.0544794463953903 789:0.0559818546797776 803:0.0680879161825019 861:0.0727378530967905 913:0.0568634512384023 929:0.0872661013032611 938:0.0808530882175456 962:0.147567314305287 966:0.0544200073445903 1007:0.377338935801315 1014:0.0668118802015341 1021:0.0583302054104971 1312:0.283372217295703 1327:0.0708430543239257 1489:0.25544629377661 1535:0.0808530882175456 1770:0.0930627700629419 2016:0.0878097576367162 3112:0.0938710156324871 3115:0.0878097576367162 3256:0.0965965226411541 3963:0.21597935854078 4124:0.102657780636925 5663:0.431958717081561 6418:0.110294062611822
+-1 6:0.0356807104089066 18:0.0238747306982602 21:0.0269810109041547 27:0.0129867089159868 34:0.0710893553179874 37:0.0422056043541961 41:0.0205370801420447 50:0.0846700909438161 53:0.103046184383683 56:0.041176040726058 59:0.0276947799995938 63:0.00964047384062238 78:0.102793860278394 81:0.0271555883431156 83:0.034669116081606 85:0.0546653846318653 91:0.0356380954480077 96:0.0829010494892439 98:0.0578623582515228 118:0.0292052705592919 135:0.0812705207200182 142:0.00462626393441748 145:0.0374272459782287 148:0.0392056316656755 160:0.161701866310038 162:0.048311720726088 179:0.0243128149142804 183:0.0392370506070275 190:0.0382405863755323 199:0.0416962725018009 203:0.0338120832196466 214:0.0764232429207805 215:0.0284137370979963 218:0.0252993222775053 220:0.0357795729882847 224:0.0424163591992095 227:0.0634053217560024 229:0.0467137778981631 242:0.0625042871782653 246:0.0922023684828226 276:0.0346477436895782 280:0.0467230934804244 284:0.0270854582317942 288:0.0463236934791781 295:0.0378692866643239 341:0.0372655122902453 342:0.0416648606156301 359:0.14897564349285 363:0.0416648606156301 367:0.0380678163868823 377:0.0343276468635347 382:0.117522879547944 384:0.0483323754577275 402:0.0679903878633991 409:0.0227778304389722 430:0.0694255603613065 448:0.040390847966207 455:0.0325651973191045 466:0.0824259136102734 473:0.0392685504209046 475:0.0361405924115216 507:0.0238478642309721 538:0.0390807563889232 571:0.0352005780186391 572:0.0483323754577275 574:0.0333951879350239 615:0.236877130730295 633:0.0463799587320154 641:0.0352913960305073 662:0.046493271309493 680:0.0615150527871928 702:0.0531300575204179 713:0.0445986973728655 716:0.0427052889657098 726:0.0411025409799842 758:0.0934461869608489 771:0.0473172718758878 796:0.0392056316656755 819:0.0895905813840024 839:0.0710095138996094 841:0.0687081925719717 847:0.0475632634938153 869:0.0597121414074744 873:0.0515695914668295 876:0.0430440696570725 912:0.0424163591992095 928:0.0718840051861455 938:0.198567128614271 962:0.120803540202364 991:0.0473783077676722 1001:0.0522792204443505 1007:0.154451138165621 1027:0.0466076428983668 1034:0.0562335646306889 1059:0.0408846538426065 1094:0.045936917735639 1160:0.112977050660855 1162:0.0517431783621875 1169:0.100526000234447 1188:0.109837981952723 1194:0.136726893299432 1232:0.0504975952423922 1236:0.0491530854430499 1260:0.0595456399147661 1312:0.0579944942507634 1448:0.111967615151042 1468:0.0625270067947173 1507:0.0611325944439224 1535:0.0661890428714237 1607:0.173119607299595 1624:0.0564885253304273 1645:0.0509807239399761 1652:0.0534273434981916 1682:0.0625270067947173 1736:0.0638633517960689 1744:0.0613223295768572 1791:0.0625270067947173 1995:0.0577065357665316 2010:0.0653637186696445 2024:0.0434367558913976 2094:0.0790771449709244 2181:0.559450199203072 2207:0.0645905560615949 2240:0.0605804254045371 2268:0.0718840051861455 2275:0.0701933668043229 2363:0.076184296892358 2415:0.0651005328070998 2459:0.0643433219774564 2604:0.0664770013556555 2640:0.0617108596994308 2710:0.0867698508915335 2803:0.0768459537546082 2915:0.0714389499241182 3808:0.0867698508915335 4001:0.0775454396143214 4768:0.0884039641339024 5030:0.0925216006442792 5325:0.0884039641339024
+-1 6:0.0281763155294627 17:0.204714556953857 27:0.0273475577447988 34:0.0748503821166708 58:0.0630029739078445 59:0.116639958617389 63:0.0203010182756229 72:0.0584492832685653 83:0.0243355382321102 92:0.0620017680260014 98:0.121847204997858 100:0.116075547847166 101:0.27385062550207 142:0.0292261159253561 148:0.082559660252222 164:0.329125147479697 166:0.210235589705891 179:0.102396398365161 190:0.161054914045614 219:0.15706117363817 227:0.0667598199538941 254:0.181285372319209 258:0.0890644241489909 283:0.0704062955303689 293:0.177789765165259 377:0.0722875449751499 382:0.082493667322083 384:0.203557720023489 402:0.143174923701929 468:0.251484998358017 500:0.0971967367751263 574:0.0703239624726798 626:0.0886426434549383 667:0.0904624740606165 723:0.0963931457146753 767:0.0898414747311916 856:0.0704888924765145 881:0.10701217394906 944:0.102772876217004 993:0.103210907586792 1305:0.0854220832912513 1319:0.0991334393504445 1332:0.115411513797835 1393:0.107529319566815 1461:0.16042974952229 1591:0.111472813095196 1799:0.161823073986917 2916:0.353940937347066 3425:0.155506213057454 6303:0.200583487124194
+-1 6:0.0194255225528899 10:0.0546149410704501 17:0.0705679072704478 27:0.0377083085389609 42:0.116220618645222 53:0.249338082216712 63:0.0139960772354135 64:0.0561608459304987 72:0.0402965344828893 75:0.0131230401569931 98:0.0420023978333412 100:0.0800256573712199 109:0.071258237692741 111:0.0809884876710816 132:0.0392720834805234 142:0.0050373209145082 160:0.117379697689201 164:0.226907878299586 179:0.0352974387956655 190:0.111035662621517 199:0.0302674049020799 215:0.0412511734946647 271:0.142927270666612 307:0.0621825530898951 335:0.514455216491177 359:0.0720944719451242 388:0.0673346036014628 411:0.0485116217627337 444:0.0850634713353902 461:0.0708544317191224 483:0.0628695760439045 498:0.0665341665258291 510:0.0585394950725696 546:0.0559439116354815 559:0.463585306607947 591:0.0680871880284839 597:0.0579022762234208 599:0.060713394344988 609:0.045854148247401 620:0.0920465403108087 641:0.102472370705932 680:0.0893077917313769 713:0.0647485614658503 771:0.0686953984516212 776:0.080747119942758 962:0.0876915236188488 966:0.0646779184382713 1001:0.0758991745886113 1260:0.0864485905005457 1468:0.0907769504762839 1535:0.0960935086264116 1963:0.278151183964768 2134:0.0882141112351641 2154:0.0884812846612947 2191:0.11603028065191 2206:0.0835731743392938 2741:0.101342932075226 3099:0.12031493409139 3170:0.100265832726301 3625:0.128345217298463
+-1 6:0.0265296592432598 13:0.0503775259866236 17:0.330429947649275 21:0.0229270587343855 27:0.0110354292928791 37:0.0537961887373105 42:0.0453496667490441 48:0.0231855541961145 50:0.0359741181494373 51:0.0257401610352289 53:0.204314329446747 58:0.0254232889930858 59:0.0706007476823781 63:0.00819197289369248 75:0.00768097999465985 83:0.0196400069045056 85:0.0232258992934835 96:0.0469633312982951 98:0.0245842101849942 100:0.0234197055702939 105:0.0402596199521178 111:0.0474029604540865 142:0.00589673744927175 146:0.0340323576208969 160:0.274811659171682 164:0.265620595989882 179:0.0206597646588593 181:0.0959695237832833 186:0.0215066095884748 190:0.0649897198428667 198:0.0329997617955656 199:0.0354313221268713 203:0.028731748438284 204:0.0227517916225454 206:0.0722954542398911 215:0.0241445148820883 216:0.0329739259169274 271:0.334624140000537 278:0.0327190372789476 291:0.0610097501972157 306:0.0297400470134753 323:0.0324211953692121 331:0.0296272183933812 335:0.250927641940209 341:0.031666292715291 355:0.0228098863870643 371:0.105908863994151 377:0.029169847588339 380:0.046571456653835 388:0.0788225498091736 390:0.0346200244675022 398:0.0294786596410825 403:0.0877892914124245 411:0.0567881819777104 413:0.0327695176489658 422:0.0345597406128614 423:0.0287146026210396 444:0.199152273798471 448:0.102966120907308 461:0.0414714476262238 463:0.09314291330767 485:0.0262275974759474 515:0.0273818458236031 523:0.0444241604576403 530:0.0311556767549781 546:0.0327442468326342 574:0.0851324775730588 591:0.0398517662738951 599:0.0355358485375999 603:0.0405763632953568 631:0.0254357802087653 634:0.0425800754170528 641:0.0599775829366947 651:0.0980720210652639 656:0.0374120100457695 663:0.0709400645370205 670:0.0540696713823645 671:0.023145365022216 676:0.0378976517142773 678:0.0410142779280751 685:0.0400536937021372 694:0.111542486511456 724:0.0443468445936531 744:0.0467640350426963 756:0.0503214641250702 774:0.0425152843301795 810:0.167313729767183 861:0.0505987855144519 863:0.0400536937021372 886:0.0326437732413302 909:0.0333683702627919 930:0.0331824328682 938:0.112488007130394 962:0.102652560772465 995:0.0593165169471175 1018:0.0411266999506128 1034:0.143353068983765 1043:0.0847738015520619 1045:0.0590641176368996 1048:0.0514780923642119 1080:0.0766408618138789 1094:0.039034801725663 1098:0.0425152843301795 1159:0.0385384459319458 1184:0.0499188743982647 1190:0.0410142779280751 1260:0.0505987855144519 1288:0.0497880684496177 1294:0.0430452811051922 1319:0.040002843058986 1320:0.10662610305625 1322:0.0851601508341056 1329:0.0510291477205162 1370:0.0623081043501726 1404:0.0513262803862327 1423:0.110638088736574 1437:0.0517885314115301 1445:0.0586860853967767 1448:0.0475721257820202 1500:0.0865024147103457 1507:0.0519472968740898 1591:0.0449820915808953 1607:0.049036010532632 1636:0.055319044368287 1658:0.055319044368287 1664:0.0449820915808953 1738:0.0511766528291844 1744:0.0521085239145527 1863:0.0456586837112137 2127:0.0671956419178025 2141:0.0627506790483074 2144:0.0529544319970756 2185:0.0473641401329235 2213:0.0526077687028163 2275:0.0596466696227147 2383:0.12068037788946 2604:0.0564886956971744 2728:0.0695160973827375 2729:0.0695160973827375 2783:0.0636966887297393 3096:0.0636966887297393 3414:0.145015369571585 3985:0.0704209231061696 4398:0.0679130943592491 5211:0.0647374501901999 6388:0.075121087391814 7986:0.0809404960448121
+-1 6:0.0241313734063752 17:0.0657472861880478 53:0.0619480927735027 58:0.0269791890904357 59:0.149842998061112 63:0.00869331996276173 67:0.0227503276812155 72:0.125146018329995 79:0.0545491133675383 83:0.0104209856592164 85:0.0246473195897165 91:0.0321367364006013 118:0.052671842850944 135:0.0366429416146708 137:0.0329253109752733 142:0.00417174438507472 145:0.06750021419958 157:0.0407575952271606 160:0.0364537595778106 162:0.0217826039034382 166:0.0600181798456162 174:0.0589629416936947 186:0.0228228097056774 190:0.0689670774325067 208:0.0301318035619899 214:0.0689148390717814 215:0.0256221542648497 220:0.0322643141053391 227:0.0571758980398002 242:0.0281816939949254 252:0.0290256689495752 253:0.0439476689137541 256:0.0273702197470608 257:0.0487347547224604 258:0.0381392463133746 271:0.044387883633753 280:0.0421326594512219 286:0.0450713900233627 287:0.0373318497171662 306:0.0315601318206001 319:0.0364850655521438 355:0.19364677422668 367:0.0686554859451736 369:0.0359645781682868 384:0.0435838332597179 409:0.0205399621779104 411:0.0301318035619899 414:0.0594332635387804 466:0.111491642228885 506:0.0225003252745065 507:0.0215048676668529 538:0.0352411640021338 539:0.0747315050087176 570:0.046659532801938 571:0.0317422040295097 594:0.038509594779124 615:0.106802254917298 628:0.0437037838814927 643:0.03272282183445 644:0.076645733996486 678:0.0435243433660436 722:0.103317224982754 730:0.038661285807468 771:0.042668461216998 787:0.0461964432381957 819:0.040394258752052 839:0.0640329961923975 848:0.0444522298717586 860:0.0552975549424997 928:0.0648215707670696 1003:0.0425049715815386 1007:0.0464255590504524 1035:0.0491219996677099 1039:0.0587045585927184 1149:0.0385851796537383 1169:0.0453247785877653 1280:0.0529738993227339 1335:0.0432316113860342 1446:0.0419768637075554 1489:0.0471429100104432 1645:0.0459719877332116 1652:0.0481782326749379 1682:0.0563838754574289 1792:0.0949546802101985 1859:0.0632970336294261 1942:0.0521660742441806 2135:0.168585697281056 2624:0.0510554378577498 2672:0.0632970336294261 2695:0.0670815484920181 2734:0.0665910077983204 3215:0.0814195890889287 3235:0.068133329546665 3320:0.0599457923442018 3810:0.0720693618726156 3944:0.0699267825798896 4941:0.0890687098238973 5377:0.801618388415076
+-1 6:0.0174970284066267 17:0.190686558069997 19:0.0531083616178894 27:0.0127367875923733 34:0.139442567723888 37:0.0206966915692317 42:0.104682664794963 48:0.0267601260603361 50:0.0830406664810018 51:0.0297085826929041 52:0.0356626565159818 53:0.033687707722055 59:0.0814854323495548 63:0.00945494877818381 72:0.0272220325070805 79:0.0593282054490915 82:0.0328100822788749 83:0.0226679533361561 92:0.0288765584505978 98:0.0851232484778596 100:0.0810911313211631 101:0.0850283666182661 114:0.0307151563774592 132:0.0530599440793865 137:0.0358099241843717 142:0.0215518629034939 164:0.306571953069901 166:0.261105685114964 169:0.0318849585375954 174:0.0320643664280715 179:0.0715347886841456 181:0.0369217909374144 190:0.0375046695220356 199:0.0408938530681465 200:0.0422578995989581 206:0.0417207079176257 215:0.0278669319889978 218:0.0496249043794168 219:0.0731493037259861 220:0.175455084211753 233:0.103459099319955 240:0.0393785357112462 242:0.0306507150715549 252:0.0315686313567561 293:0.0828033894704366 306:0.0343251405762944 312:0.0396475030318487 323:0.0374196479311371 330:0.04350368578007 333:0.0441291905931852 341:0.0730967202903176 342:0.0408630456846422 355:0.0263265406544424 357:0.0404925791013552 377:0.0336670321538209 382:0.0384204077088788 384:0.331815737779007 402:0.0333409770766925 403:0.0506619873105677 409:0.0446789698595841 410:0.389597689680011 453:0.0424281459199697 465:0.0743916497188227 478:0.0343033382734929 485:0.0302711683654181 490:0.0452681808931202 504:0.046466541017184 507:0.0233889265715145 540:0.049448615096502 565:0.0465267023681711 569:0.0613237125343453 574:0.0655050356618339 609:0.0309764383015434 641:0.0346122345535564 647:0.039512265945921 653:0.0446851797167183 671:0.0267137408262077 690:0.109332763838689 714:0.0452681808931202 715:0.0539737572044858 719:0.0941643431372437 725:0.0635950261238455 758:0.0458239359308491 772:0.0405291153986468 787:0.0502437511126251 804:0.0824130665812368 827:0.074726599276008 856:0.0328293319452175 883:0.051007397174124 909:0.0385128510238468 913:0.0456544907956723 936:0.0511839027726656 939:0.0635950261238455 946:0.0621813747673289 966:0.0436927001493028 993:0.0480692067429334 1003:0.0462288666289851 1020:0.0559177397049165 1073:0.0585630175214387 1094:0.0450528896606674 1103:0.0573149158846638 1117:0.0522040052852817 1193:0.0533189313064608 1218:0.0532131846806201 1263:0.0594145919204637 1332:0.0537514885488032 1383:0.127190052247691 1423:0.0638477126020463 1436:0.0587285672411804 1448:0.0549064332091043 1467:0.0537514885488032 1591:0.051917087294125 1738:0.0590666787375967 1954:0.0619611453885847 1969:0.0597728920917694 2047:0.060142218597697 2202:0.0613237125343453 2213:0.0607184331386951 2238:0.0673859451464102 2241:0.0611185423349818 2649:0.0724251000213662 3122:0.0907410786471013 3932:0.086702683549887 3993:0.0934192842329511 4375:0.088552825350286 5028:0.0824218122382878 5511:0.086702683549887 5627:0.0934192842329511 5672:0.193744183518199 6273:0.203477101283529 7536:0.0968720917590995 9021:0.0968720917590995
+-1 6:0.0219370916814556 13:0.437394696978988 27:0.0958133246335584 41:0.0505061479754592 42:0.131247041594586 51:0.0744949241796413 77:0.0827092357971751 82:0.0822720025710406 83:0.0284201956475011 84:0.0643738811890172 116:0.117432563962446 132:0.066524488092022 142:0.0369759478949648 188:0.121230477733723 199:0.0512711177644398 242:0.0768573418297952 253:0.119854435043375 309:0.0807210617583185 315:0.155368934139993 317:0.0653749088103597 535:0.208027316708898 608:0.119686770592722 643:0.0892419420854784 648:0.160099542899736 697:0.117588097595708 701:0.315282772224957 819:0.11016354635838 834:0.11053131905375 904:0.133698392349192 998:0.121406992556753 1001:0.128568522182391 1047:0.123610099588298 1054:0.143349134606038 1175:0.116216410981018 1366:0.118862179530376 2367:0.377969320351409 2653:0.196548141566516 3697:0.203806080322287 4810:0.222048156202962 5087:0.222048156202962
+-1 6:0.0339439179369338 13:0.0451195929277947 17:0.184964233022361 27:0.0197673096376496 37:0.0642419303543874 53:0.313697003123416 59:0.0421547364417044 72:0.0422481996838699 85:0.0416035960869607 91:0.054245403679578 96:0.0841234796355371 98:0.264220094403082 140:0.0479727759981275 142:0.00528129137155065 144:0.0403607395772359 160:0.0615323497472388 162:0.0367680814630651 164:0.317196816889709 179:0.222041909316296 186:0.0385239033034946 190:0.0582067032148455 220:0.108921498516326 258:0.128754755088644 271:0.0749248036944415 291:0.0546421254242563 293:0.0642548298320183 306:0.10654424079958 319:0.0615851928609302 323:0.0580747509387329 335:0.179790536941887 339:0.0528039079734014 355:0.122575227944325 377:0.0522507456718352 384:0.147135203749724 388:0.0705957922956568 409:0.0346705566494042 411:0.0508611648500596 426:0.0611149163661607 448:0.0614796561192173 502:0.0468600054627058 506:0.0759591274124886 515:0.0490479718079308 523:0.0795751675673783 539:0.0630717538683306 554:0.0861793432322341 574:0.0508314327047467 629:0.165831568477076 641:0.0537176860891355 653:0.0693507509070269 670:0.290558321164047 694:0.0999007292832764 723:0.0696747101174494 789:0.0697565879859139 841:0.104582009653076 861:0.181271037855972 862:0.065323123046184 882:0.0509805702915266 938:0.2014951306791 942:0.0878361845169957 1007:0.0783643105618763 1043:0.0759259082708091 1110:0.110849540280155 1350:0.0961627990980225 1395:0.0724917173808886 1576:0.0752525632078628 1698:0.0983144790259969 1952:0.0951735125521352 2076:0.0846579114312569 3381:0.127917457333279 5109:0.126142096973701 5894:0.264147987127699 6479:0.137432700772679
+-1 6:0.0278885289917176 17:0.0379919341121652 27:0.0609035308927183 34:0.0555644078850323 37:0.065976949850816 41:0.0642082456748028 42:0.041713447909802 53:0.107389734032234 63:0.0301405023741881 65:0.0498799871970181 67:0.0394386901912325 75:0.0282604201416963 81:0.042450355058238 83:0.0361304707923357 100:0.0430837418839444 119:0.291793445110071 142:0.0126558280462787 160:0.315970950054055 164:0.0814408843465798 183:0.122672851617935 203:0.0528559690844103 226:0.162183500754056 290:0.0725024142686129 294:0.0666279321126525 324:0.0738727082427553 325:0.0626071624615394 337:0.159909322136857 341:0.0582544634334573 347:0.0572753024959753 359:0.0776275940136185 364:0.0645993927389266 384:0.0755544852523422 409:0.0356069247100604 444:0.0915919409637805 496:0.116929838931526 535:0.0661160551424605 555:0.0803474290059015 644:0.0664343696478469 670:0.0994685333936182 676:0.0697178980139097 694:0.307796420637874 714:0.0721529934055525 717:0.0706550777477752 732:0.15258476582627 823:0.0794393817883433 827:0.0595533962090423 841:0.107406517334007 862:0.0670873429478513 869:0.0933436452198106 912:0.066306407562725 1014:0.0854998381628606 1047:0.0785724902848336 1056:0.0684642147374138 1129:0.0813007352919344 1156:0.0977439194329781 1194:0.320602803366006 1340:0.0936075150639517 1438:0.0964680960725373 1599:0.0844838333749279 1636:0.101766925364461 1734:0.0964680960725373 1842:0.106867601122002 1994:0.099832930323514 2034:0.0938750755149138 2057:0.110355459979586 2141:0.115438430728554 2200:0.10058323277912 2339:0.109120821264541 2402:0.192324010752255 2410:0.0974168984714634 2425:0.110355459979586 2470:0.103918658476422 3542:0.12122114252073 3870:0.133387773238102 4522:0.138195483692818 4976:0.127884340280347 5985:0.141144426338397 6108:0.133387773238102
+-1 6:0.0232730160220958 11:0.0116201328369162 17:0.0986356671105873 18:0.0138422004792853 25:0.155259393634612 34:0.020608255663517 37:0.0122350790926984 50:0.515449329112423 53:0.0199148625785098 59:0.0321140122440848 63:0.0726621737831799 72:0.0482778205889603 77:0.0389982490302315 78:0.0198660980375213 79:0.0350725275906715 83:0.0603018557117598 86:0.0401764543749163 92:0.0170706982507886 94:0.0310471774900336 96:0.0160215831189374 98:0.0335477025162915 106:0.0181005394737786 111:0.0323431260093093 113:0.0276853263696972 118:0.0169327652421623 122:0.0834994459483271 132:0.0313669752623921 135:0.117798484837399 137:0.0211694344109891 138:0.0216840249641522 142:0.0140817413487534 145:0.0216997397275739 148:0.0454616406184504 157:0.026205226719316 158:0.055681046549667 159:0.0155566051507286 166:0.173649966494866 168:0.0576159950926361 171:0.0223587014066632 173:0.0193281472590783 177:0.0269891593037186 179:0.028192389896465 186:0.0146739987817173 190:0.0221713019403447 197:0.0288341313234268 199:0.024174855436208 203:0.0392074482819388 213:0.0266968666459731 216:0.0674945086173962 219:0.0864860466871696 227:0.0183807136150049 242:0.0181195106422586 246:0.37420257415009 249:0.0590207546593232 275:0.0173890728946867 276:0.200882271874582 283:0.0387693662364835 284:0.0314074615254298 287:0.0960105305759402 288:0.0268577627192448 295:0.0219560280968235 296:0.0466369534014329 299:0.0214069532517943 301:0.0468761235388771 306:0.0202916880900566 309:0.0380608046742843 327:0.0434941878750144 333:0.0260874611479958 341:0.0216059690307809 342:0.0483132866185633 355:0.0466896807250727 357:0.0239376378739175 368:0.0315200784381656 373:0.0369199811205062 375:0.0183316116004601 377:0.0199026399867113 390:0.023621305569772 393:0.0404717672414606 396:0.0262648507070313 402:0.0591296667194314 403:0.119797585940658 432:0.02429136658699 448:0.0468359808655191 454:0.0516026501695895 455:0.0377615978697826 459:0.023621305569772 466:0.0238946364526909 475:0.10476878921128 478:0.0202787994166043 479:0.131004701545796 485:0.0178951373914217 495:0.0284982005232719 502:0.0178492728956838 505:0.037201786066535 507:0.0138266237160927 510:0.0233780172972598 513:0.0193507075731078 514:0.0274692118113478 516:0.0362521937675796 532:0.0298992534299334 546:0.0223414590827842 548:0.0878331796787052 550:0.0210679689647957 567:0.0841824662072378 571:0.0204087520013883 576:0.0253136758486427 577:0.0377442844408641 594:0.0247598676131765 615:0.0343344263644987 629:0.0315831474115206 643:0.0210392433677271 662:0.026956081328729 671:0.047376373771216 681:0.056592088068533 712:0.0712384537334656 716:0.0247598676131765 721:0.0342416771642428 726:0.0238306190609489 758:0.135446643386757 763:0.0299493964851645 767:0.0247356930998944 774:0.0580165114263054 792:0.0283762167831627 796:0.0227308203092252 808:0.0269891593037186 812:0.0289643223666888 827:0.0220877295632492 829:0.0191832282130512 833:0.0336243129298344 861:0.0345236432521347 872:0.0295103773296616 891:0.0363755918828125 895:0.0268903844446848 900:0.0377442844408641 908:0.0275047768621768 912:0.0245923505926549 942:0.0334573590437854 950:0.0281774583303891 952:0.024090228976146 953:0.0282562948390759 987:0.021111276603531 991:0.0274692118113478 997:0.0245923505926549 1009:0.0691411260581394 1023:0.0365011741485273 1050:0.0305257082649249 1068:0.030471338552255 1102:0.0309763493931892 1106:0.06626958765205 1116:0.0301535893623629 1153:0.0722618102509319 1172:0.235514718609033 1176:0.0291867610471212 1183:0.0368918349835047 1199:0.0374486077926008 1207:0.0294632328852173 1218:0.0314575651458058 1227:0.0282562948390759 1228:0.0318411835853817 1239:0.0346201782485415 1313:0.0337952901858718 1318:0.0342416771642428 1320:0.0363755918828125 1328:0.0770846793336822 1333:0.0367592103223884 1335:0.0277959033524489 1341:0.0297021515115348 1372:0.0722618102509319 1406:0.0438065430004176 1441:0.0337092865536579 1462:0.0317757894562515 1480:0.112784718068303 1502:0.0370269859799813 1549:0.0818593635634493 1551:0.0276853263696972 1568:0.0383753857807921 1639:0.0349179231704777 1651:0.0354437350019316 1652:0.0309763493931892 1714:0.0398359499074844 1751:0.0352287120987554 1771:0.0368918349835047 1776:0.0299493964851645 1849:0.031973808246498 1863:0.0311530028197569 1910:0.0316467820334417 1920:0.0388885162634109 1942:0.0335403449346405 1943:0.0310347465358849 2066:0.0346201782485415 2099:0.0751898120455353 2180:0.0416772370593951 2273:0.0438065430004176 2307:0.0362521937675796 2347:0.0480483237311895 2368:0.0416772370593951 2394:0.0398359499074844 2399:0.0375949060227676 2403:0.0388885162634109 2500:0.0411702205045863 2545:0.0523489862337878 2606:0.0512552543595474 2611:0.0313341670305729 2713:0.041419200885534 2986:0.0458477085187314 3011:0.0441704798385122 3273:0.0869207328076956 3912:0.047430959496781 3942:0.050307820715474 4585:0.0402534357754899 4622:0.0487245697374243 4817:0.041419200885534 4831:0.0523489862337878 5176:0.0441704798385122 5557:0.0480483237311895 5916:0.102510508719095 5982:0.0494721250150948 6346:0.0487245697374243 7563:0.0552258474524807 7876:0.120287748378975 9575:0.0650619009264941
+-1 6:0.0366404203299183 13:0.0487038901360997 17:0.159726222683708 21:0.0443307577287504 33:0.0811024653503507 34:0.116802331791411 37:0.0346726523344099 53:0.225744713619152 59:0.0455035056645702 72:0.0456043936199531 97:0.0457261311905596 98:0.0475349532746275 100:0.0452833180977669 135:0.133530347596195 137:0.0599914748312785 145:0.122988584809453 160:0.132840950347291 164:0.0855987272870549 192:0.059180601753586 224:0.0696915823530638 243:0.13819449132925 296:0.0660815863539843 323:0.0626882049651428 341:0.0612285582198941 377:0.112803082279702 382:0.0643647529161923 384:0.0794118068623435 402:0.167565927549734 403:0.0848727665827031 434:0.0634106872632366 439:0.157963391520054 448:0.132727191135228 463:0.0900485311227381 466:0.135428699087967 502:0.0505825609172712 516:0.102734089525671 567:0.159041575530075 569:0.102734089525671 572:0.0794118068623435 631:0.0491815118170996 653:0.0748599695577294 656:0.144676451759352 670:0.104546751081064 706:0.074601632890686 740:0.104929751752983 763:0.169745533165406 771:0.077743955679303 776:0.0913831298101014 789:0.0752980463048955 792:0.0804145761244485 806:0.078665044691005 819:0.0736002511585013 862:0.0705123872300807 938:0.217501889329071 942:0.0948138846805645 968:0.101720080016936 969:0.0819574569483114 1000:0.0889711165800379 1003:0.0774460698261305 1026:0.101393130905526 1086:0.0923937408691838 1093:0.0930254240436275 1114:0.0896829405543606 1190:0.0793034134606303 1473:0.10380196492342 1489:0.0858966131402273 1607:0.0948138846805645 1791:0.102734089525671 1865:0.0869754043511231 1873:0.0970365421153193 1969:0.100136038631466 2075:0.239310839531801 2731:0.106962484027598 2765:0.111236441493331 2866:0.100443020584012 2880:0.1102050909509 3198:0.138079210918842 3999:0.127409907238967 6219:0.145250848094713 6542:0.340880124111509
+-1 4:0.0245097640933748 6:0.0169989889537328 10:0.047792731311994 12:0.114593861033006 17:0.0308764686487139 34:0.045157814102894 35:0.0614882407933799 37:0.0268101015546112 41:0.0782741362435201 42:0.0339009844251217 57:0.0846069992269831 70:0.0651916570925038 79:0.0384263158153162 83:0.0146818183221371 91:0.2263824846946 109:0.187071105876814 115:0.152586642073785 119:0.533573522469129 127:0.0563538491097526 132:0.0343664223939332 144:0.0336875159546326 145:0.047549527174865 158:0.0406703408931367 183:0.0498487974558877 199:0.0264865606671708 203:0.042956635677298 204:0.0340160441622556 219:0.0947562200935668 226:0.131808340201554 227:0.241660292474246 235:0.0860118881084304 246:0.0585693511661418 247:0.0833831948289656 252:0.122680218205445 275:0.07620756788165 278:0.0489180032716321 284:0.0344107801302168 325:0.0508815393083575 353:0.0635643035651378 389:0.0482908591921354 393:0.266051126016588 411:0.0424518063916737 454:0.05653712089035 466:0.0523590918418714 501:0.0589235208323885 530:0.0465806339115779 544:0.0919119559531909 570:0.262948940146749 655:0.0429054086918391 715:0.0699165809712025 796:0.0498088811925727 819:0.0569102758269818 876:0.0546854332019601 906:0.0663026564756142 913:0.0591399611170547 925:0.0837325887691661 1021:0.0606654363180284 1041:0.08083918664931 1048:0.0769645350265296 1080:0.0572926076184448 1160:0.0717659715553115 1201:0.0722648606475278 1280:0.074633359175935 1393:0.129746539330691 1394:0.0734952383275585 1538:0.0720967792697227 1705:0.0848305066403384 1754:0.16052658414039 1865:0.0672524097930874 1896:0.205377151614677 2280:0.0769645350265296 2374:0.091325192882881 2460:0.103933029881288 2703:0.0877411548806775 2723:0.0738654314361067 3263:0.0945092086233139 4130:0.0994603285263439 4326:0.0945092086233139 4349:0.0976291113820845
+-1 6:0.0137194146345072 9:0.0524754205798685 12:0.138728311874309 17:0.0373793179989141 34:0.0546684374010572 41:0.0631728941765654 57:0.0512129797779029 83:0.03554787058774 100:0.04238902088292 109:0.150979924432285 115:0.0923613493717986 119:0.215316228884927 142:0.00355764402656607 144:0.0407823959983245 145:0.057563865777161 162:0.0371522046927781 183:0.0603473821169863 220:0.0550297111964856 227:0.195037349702051 252:0.148517725282956 258:0.130099880817198 275:0.0461287679329656 277:0.0621219459295757 284:0.0416579858180014 288:0.0712467830331115 295:0.0582437333457562 296:0.18557388426492 306:0.0538286645034627 325:0.123195256537898 345:0.0503400975446328 349:0.068003168056181 391:0.0709895336498833 393:0.322083777017598 394:0.127810446091372 405:0.065237223415248 411:0.154177563710039 438:0.0764895840291419 460:0.0934527731767284 623:0.095218609792263 688:0.076150443558774 715:0.0846416131084427 719:0.0738342327201451 744:0.0846416131084427 799:0.0692033697566394 811:0.0779107710898629 834:0.0691260727819867 848:0.151634611781682 867:0.0602990591459641 868:0.0978646133052521 873:0.0793150808666604 913:0.0715953446033045 1080:0.0693589225996561 1145:0.0901150301354796 1169:0.0773055167881793 1301:0.0901150301354796 1371:0.205393079098136 1381:0.105144371811313 1421:0.0961678085711259 1438:0.189825115467893 1440:0.0849967516986641 1449:0.0878981429409272 1553:0.0955297207907725 1561:0.0913297604255243 1682:0.0961678085711259 1705:0.102696539549068 1749:0.107361259005866 1754:0.0971674303841253 1776:0.0794480975819397 1952:0.0961678085711259 2005:0.120407527511004 2218:0.101800094561745 2257:0.0989613382753696 2307:0.0961678085711259 2435:0.100944411446065 2694:0.201061458296141 2786:0.117172998600808 2803:0.236381280632903 2904:0.122920826924034 3495:0.11926646379983 4189:0.106782081404666 5299:0.142300104156032 5369:0.122920826924034
+-1 6:0.0237102773144323 12:0.10655740491466 47:0.0374075381840708 58:0.0530167963737813 72:0.147554641806702 79:0.0535972231426764 92:0.0521742849005365 98:0.0512670121376723 119:0.165384688071287 183:0.0695293593452528 203:0.0599161366111789 216:0.0687626182614424 224:0.0751631999666904 227:0.337069020166226 240:0.142298601454148 252:0.114076666659929 277:0.0715739266599944 283:0.0592466672926543 291:0.0636137500521811 296:0.071269776370952 325:0.0709698329982992 335:0.104655064110038 393:0.123696493456946 429:0.0901944848242497 505:0.0568511186985143 538:0.0692524007898558 597:0.0706739817503613 762:0.210451539363618 767:0.0756013069908554 796:0.0694736839356663 800:0.0696972483912255 909:0.0695851780636449 953:0.0863615509751865 989:0.191165017138717 1023:0.111560911642345 1025:0.0963368649811462 1026:0.109353696905489 1030:0.11832202742414 1116:0.0921603755776675 1179:0.0985577917387711 1229:0.0892053953402895 1257:0.120548140253802 1289:0.107033946575542 1375:0.099205169965979 1446:0.0824887222567553 1553:0.330194287739137 1564:0.126592196499905 1989:0.128199269385578 2219:0.11358907659633 2478:0.131821930782198 2783:0.132830743378134 2931:0.119969824378349 3311:0.163951355131721 3993:0.337580696059248 4321:0.261715938824862 6539:0.159997610050294 6843:0.163951355131721
+-1 27:0.19597017277336 41:0.154952851016104 51:0.114275205599453 57:0.251234246239741 74:0.137934629010152 82:0.252410486014126 83:0.130789731108247 113:0.360283080724226 125:0.180380128938642 137:0.137744250238073 142:0.0654474231395896 181:0.142021088454038 207:0.198979701726834 254:0.162384362006855 286:0.0942789094781562 351:0.119406774898761 409:0.257789063153215 609:0.119152060946116 685:0.177821112951266 838:0.443236514903507 964:0.201555409532459 1045:0.174812793576266 1179:0.209821491061894 1332:0.206757167404631
+-1 27:0.248558134285592 41:0.19653394700702 51:0.289881174231057 53:0.328707443655817 59:0.265031074873594 106:0.298760889549768 142:0.0442720145531248 296:0.384886254475666 1045:0.221723240866967 1109:0.590555168799087
+-1 6:0.0373149878957926 18:0.0998730436486494 51:0.0633579244328723 53:0.287375976462243 56:0.344496159113689 78:0.143336146546851 111:0.0583398289978441 118:0.0610859091606702 142:0.00725723986730539 168:0.138568642593073 177:0.0973649200217268 181:0.0787411524918604 186:0.0529372812877491 204:0.112004450349848 242:0.0653671603721745 276:0.0724694167563664 279:0.105621055951069 284:0.0566520977014576 287:0.0865908560319809 290:0.388034336504804 291:0.0750859937778403 384:0.101092269997506 414:0.0689274333523161 473:0.0821343222625752 586:0.137150906227752 594:0.178645248099545 643:0.151800522925822 715:0.230213959761654 744:0.115106979880827 876:0.0900312196608271 882:0.070054500149459 952:0.0869068647590061 1283:0.115589944808577 1333:0.132610932145933 1465:0.147656144022362 1489:0.109347513304861 1497:0.113261396442974 1625:0.1259683845117 1659:0.131227006908846 1706:0.140292523866386 2237:0.134580856336568 2241:0.130344285580207 2485:0.149422111900619 4194:0.184906231618819 4361:0.199230370973505 4491:0.184906231618819 5470:0.199230370973505
+-1 6:0.00966443418646333 25:0.0725327548419481 56:0.267669425476542 85:0.059226400595487 91:0.077223132396421 92:0.0637995417717147 96:0.119757217476259 111:0.120878278588484 132:0.0586150202852096 158:0.138733839043917 160:0.0875967449567125 177:0.403474063236169 204:0.0580174187390882 215:0.0615688844819661 275:0.0649894261041552 284:0.0586906763887828 331:0.0755498628028883 394:0.27010240833871 401:0.442224524454148 432:0.0907858620948393 497:0.151258030969964 576:0.0946066116321001 599:0.271850881775624 819:0.0970655872699829 1003:0.102137535281456 1245:0.0945089413695095 1337:0.248865916205222 2050:0.124432958102611 2076:0.120518028430152 2154:0.132061552014558 2648:0.171349920888156 3472:0.153868410316006 4060:0.224780003564746 6820:0.20639951041605
+-1 105:0.275681049861293 272:0.40843546267641 398:0.201857539838248 676:0.25950727861553 1607:0.335778104232558 1991:0.496502318912414 3177:0.538357176569866
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/example2/train_induction.dat	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+# Reuters category "corporate aquisitions" (training examples: 5 positive/ 5 negative) 
+1 6:0.0198403253586671 15:0.0339873732306071 29:0.0360280968798065 31:0.0378103484117687 41:0.0456787263779904 63:0.021442413608662 74:0.0813238108919922 75:0.0201048944012214 81:0.0603996615380116 142:0.0102897706466067 172:0.0777948548082322 174:0.072717200608936 179:0.054076743737027 180:0.0764456665578607 186:0.112586705083256 187:0.0925011727805475 205:0.156990770998115 229:0.0519505660963924 255:0.0923321093879611 308:0.0732972342194965 318:0.119740882706743 408:0.058414185072804 409:0.0506626198519805 465:0.0843545829662396 480:0.0729642744872502 519:0.118611296605205 664:0.112142083701314 679:0.374387819227881 720:0.0987664035972632 768:0.123975200617516 922:0.141018083523918 977:0.136393581474495 1018:0.107648758381437 1305:0.180449632267364 1581:0.141526866911118 1677:0.156124608446181 1817:0.141018083523918 2162:0.170921341813635 2314:0.164249324532582 2358:0.508349039100422 2419:0.150582824316425 3266:0.338899359400281 3374:0.166725496161846 8311:0.219691455487068
+1 6:0.0292418053787394 11:0.0438009834096617 15:0.0500925330294462 26:0.0210944325344804 27:0.0141908540227881 31:0.0371513682217675 63:0.0316030546001617 67:0.0275682881016999 75:0.0197544949024337 81:0.0593469819910562 92:0.0321731851678454 94:0.0292573442413133 97:0.0304107371257703 142:0.00631902168102332 153:0.0422702792713471 173:0.0364278046265029 174:0.142899688014398 176:0.101048732113733 185:0.0283803505729403 198:0.0424355763603897 199:0.0227812034671483 205:0.0771273234149142 208:0.0365129792089388 209:0.0306153157853223 215:0.0310482969941045 219:0.040750113932403 226:0.0377896379794415 229:0.0255225710876498 284:0.0295968583260194 292:0.0480586954431413 308:0.0360098842315623 327:0.040986799124144 346:0.121812855534701 355:0.0586641007620941 408:0.0286980547677093 412:0.0496717768325293 427:0.0517712881475387 432:0.0457819957743755 436:0.0430481581615391 440:0.0550083572343217 483:0.0473197027754143 505:0.0350571468755799 508:0.0378131601741308 515:0.0352112968734238 571:0.0384644229274552 696:0.107576293527448 732:0.05332962078396 764:0.0450747385987509 840:0.0615861912924126 852:0.0967322393087606 863:0.0515064802025663 881:0.0555294243582368 947:0.177864441189829 998:0.0539445504675195 1235:0.0571266200351702 1526:0.0785491867700354 1552:0.0695301282155265 1717:0.491459129051904 1936:0.065620209870441 1960:0.0948152680980665 1984:0.0839712138793791 2055:0.0750789085415005 2387:0.0661975238773467 2393:0.076277234967193 2657:0.0785491867700354 2771:0.0703093212784121 3253:0.642819178775732 4326:0.0812877722487952 4687:0.0986622575541595 6813:0.0986622575541595 7903:0.11335330122894 7909:0.22670660245788 8317:0.11335330122894
+1 6:0.028662086648757 26:0.124057412723749 29:0.0520475554655016 31:0.0546222636376468 63:0.0309765241093428 67:0.243195721633858 88:0.109430583121918 142:0.0185812412685586 192:0.115735540157124 255:0.133386467807302 345:0.105168644302219 375:0.203188110919707 377:0.110300717398829 386:0.114136564392033 404:0.120347554807498 586:0.210694489261706 643:0.116599789703191 644:0.136554183970595 726:0.132069633990058 764:0.132543396003188 772:0.132782434863458 827:0.122410515296684 833:0.186346426437887 1155:0.166825648669573 1242:0.18192359288375 1296:0.145893418170318 1744:0.197039341839648 1880:0.200237996480307 2383:0.22816595487613 3568:0.481715952854602 3997:0.254088660805048 8877:0.306062441818476
+1 6:0.0161664810467732 17:0.0176185953138505 26:0.0699729868270837 27:0.0188291662262737 31:0.01232359389114 41:0.0148881482713775 48:0.0197801391509356 63:0.0069887638823438 75:0.00655282387579873 88:0.0740674942333784 94:0.0194100861433132 96:0.0200327587646674 97:0.0201752771004878 102:0.246469215344607 134:0.0231567249855208 140:0.0228480099255414 142:0.00838440797349835 153:0.056086414077201 172:0.0507116298975149 180:0.0249160716303621 198:0.056305738887484 215:0.0205982509652315 226:0.0250706326061485 239:0.0274122604952999 252:0.0233344162741729 275:0.108713071565545 289:0.0562616565015097 299:0.160598485379197 308:0.0238898974965195 312:0.0293060326094465 351:0.0229456348514038 373:0.0230816477339547 405:0.0307493100539153 406:0.0606329288465394 409:0.016512557507211 423:0.024497099819299 437:0.0290826804476497 475:0.0261997564754394 480:0.0237813753406901 485:0.0223753774993184 505:0.0232578266564924 506:0.0180885393949658 507:0.0345765353371254 631:0.0216998596490873 641:0.0255841401587765 671:0.0197458528256941 681:0.0353802629818059 742:0.0331839972818091 755:0.0337461856034382 761:0.0328780505631582 790:0.0488492834033202 799:0.0326187376166791 800:0.0285131859957573 882:0.0242805331106131 895:0.0672453627922462 903:0.0359994613613495 1017:0.0762003317552704 1045:0.0167963272274782 1083:0.0346624936196829 1159:0.0657561011263163 1324:0.0385873551735458 1359:0.0358932136769116 1418:0.0410446643659641 1424:0.0300665443581487 2577:0.046469359161749 3929:0.11243156230214 4871:0.0547739821793341 5003:0.0579382509140837 7708:0.0618580035846416 9253:0.894859323196116
+1 6:0.0266122935137017 12:0.0448498065528929 15:0.0227940302344268 26:0.0287963357344921 27:0.0387443081136612 29:0.0241626654697638 31:0.025357953350038 63:0.0143806060203199 64:0.0577038112544057 80:0.0433188200314301 134:0.0476490183877829 139:0.0544279665095036 142:0.0155271494114443 150:0.116041015083596 172:0.0521740312365414 174:0.0487686429309076 176:0.0689715926402733 186:0.0377537967151749 229:0.0348412560824314 277:0.0602506558319919 320:0.063150797341361 345:0.0488237103059996 414:0.0491576492705971 478:0.0521740312365414 510:0.0601478114979985 557:0.0626147281882022 565:0.0707652883033254 683:0.0804609876265141 715:0.328367865761492 794:0.0777139848032242 827:0.0568281123799494 997:0.0632720922793172 1159:0.0676523488022562 1341:0.0764187735634102 1426:0.0789638522232989 1509:0.0840722611601958 1665:0.0717064668899099 1846:0.0874005085439126 1980:0.0826110958592592 3070:0.104127231838244 3945:0.122032094283546 6213:0.115673817926575 8233:0.13468537199133 9239:0.836968101885807
+-1 6:0.0199371587356936 27:0.0193507415553135 31:0.0253299246025387 37:0.0314440612832433 42:0.119281677802051 83:0.0344389590714789 127:0.0660942623191568 142:0.00861665938043954 162:0.0359932461684799 190:0.056980079299817 202:0.165039567709828 286:0.0744752851154952 323:0.0568509077312274 386:0.052928428408273 408:0.0391328555743307 411:0.0497893377630484 480:0.0488802576298326 500:0.0687750237482548 506:0.0371791981374803 555:0.0765858223917685 594:0.0636326736178054 663:0.0621970753624849 673:0.0671952794121863 782:0.0757202870064092 834:0.0669696933163687 923:0.44677125966773 1146:0.07608621186482 1191:0.554222695078002 1225:0.0592796768115261 1302:0.094811738549765 1305:0.0604434469911613 1379:0.070145406849891 1544:0.0870773824643803 1936:0.0894801482679798 2451:0.315566923392324 2796:0.114503697610905 2833:0.200809711261864 6242:0.154569304497142 6574:0.283860025514859 7639:0.294351585587471
+-1 6:0.0192225317271122 12:0.25916648754049 27:0.0279857011037553 29:0.104718731596357 31:0.0366329991479141 39:0.193063173167598 42:0.230012296778089 57:0.0717554760787397 86:0.0746641358552679 137:0.0786827783303896 140:0.135835558283958 142:0.0124617060924797 165:0.186637824061149 243:0.0906255977063515 286:0.0538543461732838 317:0.0572852261827637 409:0.0490850729450308 414:0.0710148843238779 439:0.207179412645623 527:0.091670152552351 537:0.107492613504215 674:0.127269828832852 720:0.0956909875417843 782:0.109509256458963 884:0.0992271970823488 922:0.136627022774649 1088:0.246900820986445 1315:0.586388869251039 1335:0.10331210836877 1595:0.120377231718141 1948:0.144541249678514 2241:0.134291731355261 2305:0.1539473251211 2359:0.172226699055151 2629:0.159134882866478 2884:0.16030714528469 5990:0.186984641572938
+-1 6:0.0418402894720596 29:0.0607823097788062 73:0.0909312008644926 97:0.0522154098731284 142:0.00650987785742716 200:0.0808403672034738 204:0.0502350276825356 254:0.242278987905961 272:0.26339482616384 306:0.0656648104811842 321:0.22221547957952 339:0.0650876778269363 348:0.0831340713591087 398:0.0650876778269363 462:0.102827876284833 485:0.115818930404147 519:0.200106838770169 724:0.0979160236149362 837:0.0908060756174958 838:0.110218838097696 844:0.0916966192751631 846:0.121185370215222 849:0.209156178134046 1193:0.102000383990154 1280:0.110218838097696 1334:0.129576482300645 1536:0.275147504759632 1653:0.128910916105335 1743:0.124184465247761 2014:0.145491436847241 2402:0.115415083881859 2403:0.503379913785025 2575:0.116535326835816 2857:0.142937648882951 2860:0.130261919051935 2915:0.134034387102739 3274:0.151650892260006 3799:0.162798358536851 3804:0.169403661473007 5045:0.185318616019602
+-1 1:0.257352644427708 2:0.163996240924256 3:0.102397510616994 4:0.0868837690118771 7:0.124725648872129 15:0.0688177017392339 20:0.339918282910448 26:0.0869393268052297 30:0.36220790345732 83:0.0520450424131057 142:0.0520868708004191 144:0.119417646927797 518:0.175170338097555 641:0.158937614581985 1045:0.104344651284208 1332:0.24682409212727 1463:0.295582046868843 1932:0.518497654773702 3425:0.332572362973164
+-1 6:0.0281599486312015 12:0.0379664608162699 25:0.126806305119632 27:0.0163990033503938 37:0.0532952460617512 41:0.1037330237354 63:0.0121735355612024 73:0.122399628569851 83:0.0145928414056612 84:0.0330538836012835 101:0.0547383105409719 111:0.0352211629776272 113:0.0602977827112469 138:0.0472271342636153 142:0.00438137088374979 159:0.067763607665468 176:0.0291930720629135 178:0.0454526668210332 189:0.0421452413083796 208:0.0421945337059145 214:0.0482518328859688 215:0.0358795267439658 218:0.0319467906361383 248:0.205540805528973 263:0.645149022340447 301:0.0510473720581913 337:0.0430574955350422 341:0.0470571308601195 366:0.0710090925074975 423:0.0426708243141489 433:0.0455443772001481 454:0.0561944863083878 502:0.0777503262374913 550:0.0458853833920123 576:0.0551324013870055 638:0.0687871161252262 789:0.0578702181056671 796:0.0990140441583713 803:0.070384637707709 829:0.0417804764532914 904:0.0686497538561165 964:0.0674655288493394 974:0.0723392166513987 981:0.0668448368400873 1045:0.0585141207353895 1115:0.0792249116392415 1198:0.0670901301415471 1199:0.0815619070320407 1213:0.0716598477557567 1227:0.0615413343400712 1344:0.0891435782825451 1366:0.183095530713264 1454:0.107748754867088 1482:0.0667236350146624 1491:0.0646903653575619 1567:0.082538220298306 1587:0.0907717305064235 1598:0.0589266535188084 1708:0.201842091027956 2001:0.0737947061457591 2084:0.0854906262036552 2106:0.0764981032226203 2184:0.182709875177613 2308:0.0839440211533136 2756:0.0932495300945566 2808:0.399419552315183 4078:0.124725779227752
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/example2/train_transduction.dat	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,611 @@
+# Reuters category "corporate aquisitions" (training examples: 5 positive/ 5 negative / 600 unlabeled) 
+1 6:0.0198403253586671 15:0.0339873732306071 29:0.0360280968798065 31:0.0378103484117687 41:0.0456787263779904 63:0.021442413608662 74:0.0813238108919922 75:0.0201048944012214 81:0.0603996615380116 142:0.0102897706466067 172:0.0777948548082322 174:0.072717200608936 179:0.054076743737027 180:0.0764456665578607 186:0.112586705083256 187:0.0925011727805475 205:0.156990770998115 229:0.0519505660963924 255:0.0923321093879611 308:0.0732972342194965 318:0.119740882706743 408:0.058414185072804 409:0.0506626198519805 465:0.0843545829662396 480:0.0729642744872502 519:0.118611296605205 664:0.112142083701314 679:0.374387819227881 720:0.0987664035972632 768:0.123975200617516 922:0.141018083523918 977:0.136393581474495 1018:0.107648758381437 1305:0.180449632267364 1581:0.141526866911118 1677:0.156124608446181 1817:0.141018083523918 2162:0.170921341813635 2314:0.164249324532582 2358:0.508349039100422 2419:0.150582824316425 3266:0.338899359400281 3374:0.166725496161846 8311:0.219691455487068
+1 6:0.0292418053787394 11:0.0438009834096617 15:0.0500925330294462 26:0.0210944325344804 27:0.0141908540227881 31:0.0371513682217675 63:0.0316030546001617 67:0.0275682881016999 75:0.0197544949024337 81:0.0593469819910562 92:0.0321731851678454 94:0.0292573442413133 97:0.0304107371257703 142:0.00631902168102332 153:0.0422702792713471 173:0.0364278046265029 174:0.142899688014398 176:0.101048732113733 185:0.0283803505729403 198:0.0424355763603897 199:0.0227812034671483 205:0.0771273234149142 208:0.0365129792089388 209:0.0306153157853223 215:0.0310482969941045 219:0.040750113932403 226:0.0377896379794415 229:0.0255225710876498 284:0.0295968583260194 292:0.0480586954431413 308:0.0360098842315623 327:0.040986799124144 346:0.121812855534701 355:0.0586641007620941 408:0.0286980547677093 412:0.0496717768325293 427:0.0517712881475387 432:0.0457819957743755 436:0.0430481581615391 440:0.0550083572343217 483:0.0473197027754143 505:0.0350571468755799 508:0.0378131601741308 515:0.0352112968734238 571:0.0384644229274552 696:0.107576293527448 732:0.05332962078396 764:0.0450747385987509 840:0.0615861912924126 852:0.0967322393087606 863:0.0515064802025663 881:0.0555294243582368 947:0.177864441189829 998:0.0539445504675195 1235:0.0571266200351702 1526:0.0785491867700354 1552:0.0695301282155265 1717:0.491459129051904 1936:0.065620209870441 1960:0.0948152680980665 1984:0.0839712138793791 2055:0.0750789085415005 2387:0.0661975238773467 2393:0.076277234967193 2657:0.0785491867700354 2771:0.0703093212784121 3253:0.642819178775732 4326:0.0812877722487952 4687:0.0986622575541595 6813:0.0986622575541595 7903:0.11335330122894 7909:0.22670660245788 8317:0.11335330122894
+1 6:0.028662086648757 26:0.124057412723749 29:0.0520475554655016 31:0.0546222636376468 63:0.0309765241093428 67:0.243195721633858 88:0.109430583121918 142:0.0185812412685586 192:0.115735540157124 255:0.133386467807302 345:0.105168644302219 375:0.203188110919707 377:0.110300717398829 386:0.114136564392033 404:0.120347554807498 586:0.210694489261706 643:0.116599789703191 644:0.136554183970595 726:0.132069633990058 764:0.132543396003188 772:0.132782434863458 827:0.122410515296684 833:0.186346426437887 1155:0.166825648669573 1242:0.18192359288375 1296:0.145893418170318 1744:0.197039341839648 1880:0.200237996480307 2383:0.22816595487613 3568:0.481715952854602 3997:0.254088660805048 8877:0.306062441818476
+1 6:0.0161664810467732 17:0.0176185953138505 26:0.0699729868270837 27:0.0188291662262737 31:0.01232359389114 41:0.0148881482713775 48:0.0197801391509356 63:0.0069887638823438 75:0.00655282387579873 88:0.0740674942333784 94:0.0194100861433132 96:0.0200327587646674 97:0.0201752771004878 102:0.246469215344607 134:0.0231567249855208 140:0.0228480099255414 142:0.00838440797349835 153:0.056086414077201 172:0.0507116298975149 180:0.0249160716303621 198:0.056305738887484 215:0.0205982509652315 226:0.0250706326061485 239:0.0274122604952999 252:0.0233344162741729 275:0.108713071565545 289:0.0562616565015097 299:0.160598485379197 308:0.0238898974965195 312:0.0293060326094465 351:0.0229456348514038 373:0.0230816477339547 405:0.0307493100539153 406:0.0606329288465394 409:0.016512557507211 423:0.024497099819299 437:0.0290826804476497 475:0.0261997564754394 480:0.0237813753406901 485:0.0223753774993184 505:0.0232578266564924 506:0.0180885393949658 507:0.0345765353371254 631:0.0216998596490873 641:0.0255841401587765 671:0.0197458528256941 681:0.0353802629818059 742:0.0331839972818091 755:0.0337461856034382 761:0.0328780505631582 790:0.0488492834033202 799:0.0326187376166791 800:0.0285131859957573 882:0.0242805331106131 895:0.0672453627922462 903:0.0359994613613495 1017:0.0762003317552704 1045:0.0167963272274782 1083:0.0346624936196829 1159:0.0657561011263163 1324:0.0385873551735458 1359:0.0358932136769116 1418:0.0410446643659641 1424:0.0300665443581487 2577:0.046469359161749 3929:0.11243156230214 4871:0.0547739821793341 5003:0.0579382509140837 7708:0.0618580035846416 9253:0.894859323196116
+1 6:0.0266122935137017 12:0.0448498065528929 15:0.0227940302344268 26:0.0287963357344921 27:0.0387443081136612 29:0.0241626654697638 31:0.025357953350038 63:0.0143806060203199 64:0.0577038112544057 80:0.0433188200314301 134:0.0476490183877829 139:0.0544279665095036 142:0.0155271494114443 150:0.116041015083596 172:0.0521740312365414 174:0.0487686429309076 176:0.0689715926402733 186:0.0377537967151749 229:0.0348412560824314 277:0.0602506558319919 320:0.063150797341361 345:0.0488237103059996 414:0.0491576492705971 478:0.0521740312365414 510:0.0601478114979985 557:0.0626147281882022 565:0.0707652883033254 683:0.0804609876265141 715:0.328367865761492 794:0.0777139848032242 827:0.0568281123799494 997:0.0632720922793172 1159:0.0676523488022562 1341:0.0764187735634102 1426:0.0789638522232989 1509:0.0840722611601958 1665:0.0717064668899099 1846:0.0874005085439126 1980:0.0826110958592592 3070:0.104127231838244 3945:0.122032094283546 6213:0.115673817926575 8233:0.13468537199133 9239:0.836968101885807
+-1 6:0.0199371587356936 27:0.0193507415553135 31:0.0253299246025387 37:0.0314440612832433 42:0.119281677802051 83:0.0344389590714789 127:0.0660942623191568 142:0.00861665938043954 162:0.0359932461684799 190:0.056980079299817 202:0.165039567709828 286:0.0744752851154952 323:0.0568509077312274 386:0.052928428408273 408:0.0391328555743307 411:0.0497893377630484 480:0.0488802576298326 500:0.0687750237482548 506:0.0371791981374803 555:0.0765858223917685 594:0.0636326736178054 663:0.0621970753624849 673:0.0671952794121863 782:0.0757202870064092 834:0.0669696933163687 923:0.44677125966773 1146:0.07608621186482 1191:0.554222695078002 1225:0.0592796768115261 1302:0.094811738549765 1305:0.0604434469911613 1379:0.070145406849891 1544:0.0870773824643803 1936:0.0894801482679798 2451:0.315566923392324 2796:0.114503697610905 2833:0.200809711261864 6242:0.154569304497142 6574:0.283860025514859 7639:0.294351585587471
+-1 6:0.0192225317271122 12:0.25916648754049 27:0.0279857011037553 29:0.104718731596357 31:0.0366329991479141 39:0.193063173167598 42:0.230012296778089 57:0.0717554760787397 86:0.0746641358552679 137:0.0786827783303896 140:0.135835558283958 142:0.0124617060924797 165:0.186637824061149 243:0.0906255977063515 286:0.0538543461732838 317:0.0572852261827637 409:0.0490850729450308 414:0.0710148843238779 439:0.207179412645623 527:0.091670152552351 537:0.107492613504215 674:0.127269828832852 720:0.0956909875417843 782:0.109509256458963 884:0.0992271970823488 922:0.136627022774649 1088:0.246900820986445 1315:0.586388869251039 1335:0.10331210836877 1595:0.120377231718141 1948:0.144541249678514 2241:0.134291731355261 2305:0.1539473251211 2359:0.172226699055151 2629:0.159134882866478 2884:0.16030714528469 5990:0.186984641572938
+-1 6:0.0418402894720596 29:0.0607823097788062 73:0.0909312008644926 97:0.0522154098731284 142:0.00650987785742716 200:0.0808403672034738 204:0.0502350276825356 254:0.242278987905961 272:0.26339482616384 306:0.0656648104811842 321:0.22221547957952 339:0.0650876778269363 348:0.0831340713591087 398:0.0650876778269363 462:0.102827876284833 485:0.115818930404147 519:0.200106838770169 724:0.0979160236149362 837:0.0908060756174958 838:0.110218838097696 844:0.0916966192751631 846:0.121185370215222 849:0.209156178134046 1193:0.102000383990154 1280:0.110218838097696 1334:0.129576482300645 1536:0.275147504759632 1653:0.128910916105335 1743:0.124184465247761 2014:0.145491436847241 2402:0.115415083881859 2403:0.503379913785025 2575:0.116535326835816 2857:0.142937648882951 2860:0.130261919051935 2915:0.134034387102739 3274:0.151650892260006 3799:0.162798358536851 3804:0.169403661473007 5045:0.185318616019602
+-1 1:0.257352644427708 2:0.163996240924256 3:0.102397510616994 4:0.0868837690118771 7:0.124725648872129 15:0.0688177017392339 20:0.339918282910448 26:0.0869393268052297 30:0.36220790345732 83:0.0520450424131057 142:0.0520868708004191 144:0.119417646927797 518:0.175170338097555 641:0.158937614581985 1045:0.104344651284208 1332:0.24682409212727 1463:0.295582046868843 1932:0.518497654773702 3425:0.332572362973164
+-1 6:0.0281599486312015 12:0.0379664608162699 25:0.126806305119632 27:0.0163990033503938 37:0.0532952460617512 41:0.1037330237354 63:0.0121735355612024 73:0.122399628569851 83:0.0145928414056612 84:0.0330538836012835 101:0.0547383105409719 111:0.0352211629776272 113:0.0602977827112469 138:0.0472271342636153 142:0.00438137088374979 159:0.067763607665468 176:0.0291930720629135 178:0.0454526668210332 189:0.0421452413083796 208:0.0421945337059145 214:0.0482518328859688 215:0.0358795267439658 218:0.0319467906361383 248:0.205540805528973 263:0.645149022340447 301:0.0510473720581913 337:0.0430574955350422 341:0.0470571308601195 366:0.0710090925074975 423:0.0426708243141489 433:0.0455443772001481 454:0.0561944863083878 502:0.0777503262374913 550:0.0458853833920123 576:0.0551324013870055 638:0.0687871161252262 789:0.0578702181056671 796:0.0990140441583713 803:0.070384637707709 829:0.0417804764532914 904:0.0686497538561165 964:0.0674655288493394 974:0.0723392166513987 981:0.0668448368400873 1045:0.0585141207353895 1115:0.0792249116392415 1198:0.0670901301415471 1199:0.0815619070320407 1213:0.0716598477557567 1227:0.0615413343400712 1344:0.0891435782825451 1366:0.183095530713264 1454:0.107748754867088 1482:0.0667236350146624 1491:0.0646903653575619 1567:0.082538220298306 1587:0.0907717305064235 1598:0.0589266535188084 1708:0.201842091027956 2001:0.0737947061457591 2084:0.0854906262036552 2106:0.0764981032226203 2184:0.182709875177613 2308:0.0839440211533136 2756:0.0932495300945566 2808:0.399419552315183 4078:0.124725779227752
+0 6:0.0342598670723747 26:0.148286149621374 27:0.0570037235976456 31:0.0373086482671729 33:0.0270832794680822 63:0.0317368459004657 67:0.138424991237843 75:0.0297571881179897 96:0.0303237495966756 142:0.0241139382095992 144:0.0581948804675796 185:0.0285004985793364 199:0.0228776475252599 208:0.0366675566391316 274:0.0528930062061687 308:0.0361623318128513 337:0.0374174808347037 351:0.0347329937800643 387:0.0690970538458777 408:0.0288195477724883 423:0.0741629177979597 480:0.0719961218888683 565:0.0520577748209694 580:0.0442849093862884 593:0.329982711875242 598:0.0517245325094578 613:0.0452655621746453 641:0.0387269206869957 643:0.0398205809532254 644:0.0466353065571088 657:0.0508331832990127 717:0.0495981406619795 727:0.104798994968809 764:0.0452655621746453 827:0.0418050310923008 1027:0.05114477444793 1281:0.0633241153685135 1340:0.0657101916402099 1395:0.0522617631894159 1433:0.0471872599750513 1502:0.840963375098259 1506:0.0686138465829187 1558:0.0589627036028818 1598:0.0512079697459134 1726:0.0660884976719923 1836:0.0521934221969394 1943:0.0587388821544177 2433:0.0666767220421155 2646:0.0729483627336339 2731:0.071437898589286 2771:0.0706069752753547 3553:0.0783933439550538 3589:0.0774668403369963
+0 179:0.183380155787579 199:0.157247710191107 408:0.198088894016017 587:0.426066443224553 1990:0.447885839011823 2134:0.458297202655782 3005:0.5569874337712
+0 6:0.00482709726364712 17:0.0526067936384763 26:0.10446503857735 27:0.0281106990768854 28:0.0356456751828835 63:0.0313012858968506 72:0.0300401635230985 83:0.012507314153985 88:0.0737185781091803 102:0.0919905568442081 142:0.00876215636178203 155:0.100271086073242 172:0.0378545536912375 179:0.0526268994083645 199:0.0225636721456629 204:0.0579559481364334 306:0.0378786130534899 308:0.106998107844821 337:0.0369039591653246 357:0.0446845288778611 437:0.130255551720447 475:0.0391145025392082 538:0.0422966045382641 539:0.0448465452746061 587:0.0611368109939652 598:0.0510146592713463 755:0.100761643621509 808:0.0503808218107545 823:0.0549991894617621 871:0.0554451802614129 1990:0.128535407197547 2026:0.348920957396963 2134:0.460331503040801 2736:0.315429331039326 2804:0.315429331039326 2975:0.0686186332932993 3005:0.559459802671567 3813:0.0839264409437691 3835:0.0782990010086473 5570:0.079922828953081
+0 6:0.00797462873810959 26:0.0345163916642208 27:0.0696606189381528 33:0.0441290005061936 67:0.0451094300865861 142:0.0165434990048971 172:0.0625377934701842 204:0.047873198353993 308:0.117844484878955 437:0.0717297656206316 455:0.0582264995123673 473:0.0702120797712105 480:0.0586545824892089 546:0.0688988300164216 764:0.0737548795917481 808:0.166463747265811 882:0.05988570937618 1710:0.111056350005715 2976:0.107683390065739 5954:0.457701287906402 7029:0.316132177802849 7836:0.741910821304179 8399:0.165428413714452
+0 6:0.020398477445271 11:0.0458319874879689 15:0.0349435129583541 26:0.0441451169688967 28:0.0753162264530517 29:0.0370416466621968 30:0.0613060121073632 48:0.0623952610910362 63:0.0881825438769616 75:0.0826819575927399 80:0.0664082539832147 81:0.0620988371567663 83:0.0528537445458926 106:0.0713919290192784 142:0.0264481114418981 179:0.0555980417403573 216:0.266211025112519 227:0.0724969884807626 229:0.106824100071866 243:0.0961696532496726 284:0.0619384650702658 345:0.0748473146787298 384:0.11052547545743 414:0.0753592469880539 437:0.0917395689641771 455:0.372347094775744 505:0.0733654174810628 507:0.0545348021447396 557:0.0959891051878867 689:0.254925792581784 710:0.117536871080518 967:0.130689853323039 1043:0.570342575896572 1055:0.111292231708947 1057:0.13894866046608 1081:0.113390061284155 1788:0.125587611447188 2423:0.131638583246465 4488:0.396846996835276
+0 6:0.0331457691319788 31:0.126333924126773 60:0.251579838716322 68:0.203480917932947 204:0.198980295178862 252:0.239210120129266 5580:0.615880116120099 5956:0.634130303264387
+0 6:0.0218491019698381 18:0.0584788160942556 26:0.0472844683977855 27:0.0159048362045602 28:0.0403361455817294 31:0.0208192694179522 37:0.077533872728326 51:0.0370980624567537 60:0.0414592396979942 63:0.0236133971064361 67:0.123592027933923 68:0.0335327512474576 75:0.0110702289383883 84:0.0641156774433354 92:0.0360590870325244 103:0.0519974019127433 107:0.0522501480135825 142:0.018413818652895 159:0.0328608104261246 172:0.0428356814897517 185:0.0636163019598063 192:0.0441125876391305 194:0.0432773337366851 204:0.131164274452059 211:0.0543244512486792 213:0.0563928096988284 232:0.0969671517729285 239:0.0463098055362765 252:0.15768306012483 284:0.0331715894680471 286:0.030606506930599 287:0.0507016764518807 345:0.040085016515859 363:0.051026999054523 375:0.0387225623952956 415:0.0475237416516677 426:0.0491732437178919 427:0.0580242638507468 441:0.0385172511217403 477:0.0584037142091113 485:0.0756011625507409 502:0.0377036999516413 505:0.0785827516737091 538:0.0478622438631065 553:0.0698262795454381 571:0.0431101852912942 593:0.052611309792993 594:0.0523012127600622 613:0.101037799870997 633:0.11360316945256 643:0.0444419962528649 742:0.0560604792625693 772:0.0506100095692246 834:0.055043988873594 856:0.0409950423925163 986:0.0488447376658748 1126:0.116501558650048 1149:0.0524038671928424 1242:0.0693401562200767 1776:0.0632632525374431 1924:0.0753375504929324 1972:0.0794131539517976 2020:0.0911057714338088 2161:0.0725259184071201 2163:0.0690246184898803 2756:0.0904395511493393 3307:0.106267128558266 3469:0.0904395511493393 4335:0.0989905857074216 5149:0.0958785930963484 5580:0.202988613791452 5956:0.627011139929495 7828:0.508176797928401
+0 6:0.00348466932721003 26:0.0452478285578935 27:0.0710256494147685 29:0.0506225585902376 33:0.0578490784540854 64:0.0906702916249511 72:0.0650577546064757 83:0.00902899850939436 94:0.0209191263164869 100:0.0215332395464819 142:0.00903625507849666 179:0.0379912258109207 199:0.0162886579533739 204:0.0418382526329738 205:0.0827195493716847 206:0.0332360142102708 308:0.051494442603469 331:0.0272407348950546 402:0.0265604598582834 434:0.0301532126179079 437:0.0626874359458724 455:0.0254432028806464 483:0.0338337899521216 574:0.0260916749111685 609:0.0246767946892561 724:0.0407746897115988 883:0.0406340798592227 963:0.0295653354325134 987:0.0284489282230777 1102:0.0417428067970281 1149:0.0334311495064964 1230:0.0486889327373641 1248:0.0448663319578005 1380:0.0717810677581099 1990:0.185578771861469 2026:0.125942579096003 2134:0.427258478319213 2736:0.45541527536764 2804:0.45541527536764 2943:0.0690700557675639 3005:0.51926479589435 3241:0.0585658966812517 3813:0.0605862858204954 3814:0.0590323939629308
+0 6:0.00785445606167515 15:0.0538201516085403 28:0.0580011908235646 29:0.0570517063228698 40:0.0490761508769594 63:0.0339547850150409 74:0.0643894984454069 75:0.0318367782471932 96:0.0486644010703318 103:0.0747694452996197 142:0.00407354970079566 159:0.0472520640892858 162:0.0425397682230292 180:0.121054290840425 204:0.0471517791425653 229:0.0822654732534441 308:0.116068642063443 455:0.114698125032326 475:0.0636455254138321 574:0.0588107205940729 626:0.0741303185094789 834:0.0791502722013582 896:0.0994793287716406 965:0.0784550120313395 1031:0.0965166644860253 1057:0.107004667518699 2503:0.311368263248173 2886:0.583773246240059 2974:0.541319416898089 3079:0.115582692920521 4281:0.126591596142855 5122:0.147997359941209 5845:0.144068112306189 7126:0.173944414020896 7127:0.173944414020896
+0 6:0.00783355108261519 15:0.0536769069161587 28:0.057846818112062 29:0.0568998607059805 40:0.0489455325504489 63:0.033864412866524 74:0.0642181229731765 75:0.0317520432665188 96:0.0485348786339782 103:0.0745704431438957 142:0.00406270776972797 159:0.0471263006497083 162:0.0424265467654344 180:0.120732099539682 204:0.0470262826157689 229:0.0820465200907787 255:0.0729109308825163 308:0.115759720285436 455:0.114392850945465 475:0.0634761300584328 574:0.0586541932836052 626:0.073933017417719 834:0.0789396102828286 896:0.0992145601780499 965:0.0782462005782249 1031:0.096259781153281 1057:0.106719869906206 2503:0.310539542968624 2886:0.582219508159079 2974:0.539878671544605 3079:0.115275064517456 4281:0.126254667061356 5122:0.147603458481171 5845:0.143684668710946 7126:0.173481453339195 7127:0.173481453339195
+0 31:0.121578360639455 174:0.23382059176088 232:0.283129708150668 389:0.271848845786714 506:0.17845240482837 719:0.343333813947578 1228:0.392774642160119 2344:0.528140164045503 2402:0.439948957845025
+0 6:0.0261488826243853 15:0.044794216690105 26:0.16976935928035 29:0.047483821936342 63:0.0282603811429679 67:0.0739571227278646 68:0.160527234053451 142:0.0305135374553196 153:0.226795963556356 186:0.0741927484319776 204:0.156976667594588 242:0.183226987379415 411:0.0979529405146104 496:0.10963592358768 643:0.10637586343034 764:0.120921471880174 808:0.136459048170714 827:0.111677081843667 834:0.131752673974476 858:0.131169345927101 1005:0.13782583765324 1359:0.145140959979797 1731:0.48703532778565 2833:0.197531264581186 3236:0.391474393061168 4525:0.289545961533446 5918:0.271220662115919 6225:0.279225688098712
+0 26:0.15620989586763 28:0.266510561058506 63:0.0780096811503992 142:0.00935880799034978 158:0.259041653526988 204:0.216658432969386 513:0.270072471546516 719:0.388459554684346 6495:0.74867487688954
+0 26:0.176202309110135 27:0.118536549536136 60:0.308989992539676 80:0.265064145238512 142:0.0527829421196014 153:0.353084673037169 726:0.375164594544601 1174:0.721778856572601
+0 6:0.0282619337466596 15:0.0322759791183498 26:0.0407751468824368 29:0.0342139445339461 31:0.0359064528910632 67:0.106577979266019 68:0.057833064590458 85:0.0577323885836754 142:0.00488582068801075 153:0.0817076659082195 174:0.13811122339312 256:0.0641103449933427 275:0.126700078476862 373:0.269005974824668 389:0.160573439605384 505:0.0677648147583194 506:0.105406798275044 507:0.0503716995296016 713:0.0942018187339389 719:0.101398796229673 800:0.0830770129861911 808:0.196648126240849 1058:0.105679822541211 1228:0.116000447047891 1500:0.215018198278552 1604:0.126481124896071 1643:0.12612458776665 1786:0.12612458776665 2055:0.145126137835124 2303:0.130766611311505 2344:0.623914973698835 2402:0.129932715380012 4839:0.381424628223378 5880:0.201192991959869
+0 6:0.023702409591198 12:0.0798915346740287 27:0.0345078660644096 29:0.0860825307648993 31:0.0451704469881664 37:0.0560736885551188 42:0.0709043655986918 63:0.0256163576346981 75:0.0240184791968325 83:0.0307072207966611 88:0.0904947547868725 108:0.438827290193259 142:0.00921957001925433 205:0.18755032939063 229:0.12412635114105 231:0.381151880942266 242:0.0830421927661675 259:0.144170846573517 317:0.0706357473502409 339:0.0921799788350054 363:0.110710530205736 408:0.069784991702609 506:0.0663010658295947 586:0.0871179957043673 601:0.160029758207399 688:0.131561662932881 697:0.127050626980755 847:0.126383576997735 897:0.197667282950779 1264:0.196221820699538 1388:0.153335954486604 1407:0.144457346632878 2152:0.191007871138408 2892:0.245845427332808 3785:0.404868936445694 4535:0.21737733205829
+0 6:0.0263446335928295 15:0.120345458501861 26:0.152035782680804 27:0.0511395031541379 28:0.129694541815601 29:0.0318928577425718 63:0.0189812925495308 64:0.0761645872986944 75:0.0177972913530987 80:0.0571775066193463 94:0.0527172658427635 97:0.0547955036626274 134:0.188679104991507 142:0.0296033711057475 150:0.153165204020884 176:0.273111573113587 178:0.141741955202564 179:0.0478699138880459 192:0.0709185491033759 198:0.0764624274072915 205:0.0694858285610122 226:0.0680911560199281 325:0.315420055478884 363:0.0820346511442473 387:0.0619887400344992 485:0.121541832968126 546:0.0758703839123821 561:0.0778185117835585 742:0.0901268337252244 823:0.200111083346736 966:0.0877153269964253 997:0.167028578917694 1433:0.0846658034959993 1511:0.105997242953918 1880:0.122698595146067 2103:0.703286804341054
+0 111:0.215994569070182 186:0.195992437000748 229:0.180872475933477 426:0.310925435082124 586:0.253890450118932 800:0.304579905334509 3046:0.529396953756829 3266:0.589960522405692
+0 6:0.0414181490451389 15:0.0709511595535961 26:0.0896345837153026 27:0.0602998583070711 28:0.07646302772154 29:0.0752113213571199 37:0.0979844847061062 63:0.0671439404351639 68:0.0635662047336336 75:0.020985228260957 94:0.0621602374796953 97:0.0646107393097281 134:0.14831747924497 142:0.0429613170728851 176:0.161016319528302 185:0.0602969742168158 192:0.0836218226326396 198:0.0901587472325944 199:0.0484010102185417 204:0.310801187398477 226:0.0802879732247478 255:0.0963750593588942 265:0.19563693259551 317:0.0617152846931116 322:0.0897378363726056 323:0.0885780441804325 351:0.0734827295950458 387:0.0730924629722711 389:0.0882457484228118 394:0.0964631554400182 436:0.0914602402840867 485:0.0716564969771972 549:0.1105674056468 594:0.0991445519512959 613:0.0957659188928411 742:0.106270788101238 747:0.57056874585112 808:0.108071179883261 823:0.117977974239532 856:0.0777120624119458 965:0.10342732062337 1014:0.12697855241545 1036:0.117052453853647 1126:0.110422820279291 1175:0.109710728782976 1471:0.119924691929821 1548:0.113949996766476 1568:0.153664409222043 1625:0.139819885222829 1897:0.276482184431207 2723:0.134980209271462 4501:0.176869379977319
+0 6:0.0300323798317241 15:0.0205787291063404 26:0.129988419388934 27:0.0174894174677238 31:0.0228934702338641 63:0.0129829868888305 67:0.101929023871331 83:0.015563158926836 100:0.0371165449770361 102:0.057233057325837 134:0.0430181162129126 142:0.0202483670660566 153:0.312574236673861 154:0.0434198156457661 159:0.0361346966720378 172:0.0471033531218586 174:0.0880578538711608 176:0.0934025953098023 179:0.0327424732934381 180:0.0462864444620022 192:0.0485074760204765 256:0.0408758915630218 281:0.0693339744816167 310:0.0616457228891572 320:0.0570133117299494 327:0.0505138901011015 345:0.0881572848698004 405:0.0571228182825204 507:0.064232632909117 541:0.0619374238762957 561:0.0532269715330434 574:0.0899477130021352 593:0.115705832950305 631:0.0403117057689293 686:0.0710320151654598 755:0.0626900969346451 808:0.0626900969346451 987:0.0490370211904717 1122:0.07336095765149 1289:0.0813440710747443 1305:0.0546294659868671 1557:0.0883886371890227 1689:0.0962080252018784 1731:0.074582307094512 2017:0.0903297811822488 2280:0.0815846691510866 2975:0.0853838547699421 3057:0.107631558977073 4387:0.128277938972961 4810:0.121595600088751 4841:0.74546156893899 4903:0.121595600088751 7826:0.139701472748155 7930:0.139701472748155 8626:0.128277938972961 8700:0.133019133863945 8855:0.124600382507832
+0 6:0.0142894732787166 26:0.0618487797440109 28:0.0527602713605547 29:0.0259482905819441 31:0.0272319104410711 63:0.0154433352655841 96:0.0885342859211242 102:0.0680790406803614 134:0.0511702889988598 142:0.00370546853543854 144:0.084953909971397 199:0.0333971922032047 216:0.0621617526773957 255:0.0664997768945582 275:0.0480454752858271 345:0.0524317908508095 355:0.0430007188032256 382:0.0627543576605838 408:0.0420712826834366 426:0.0643193256276283 457:0.0492665333774512 465:0.121508346001675 513:0.0534654117616068 561:0.063313779301716 574:0.0534966529720355 755:0.0745702197101191 799:0.0720788553505339 952:0.066560564091775 1017:0.0841913742155727 1159:0.0726518689533112 1359:0.0793145886602619 2163:0.0902852156437678 2306:0.20100929030518 3719:0.238335376572902 3905:0.708083481941373 3929:0.248444265723718 4176:0.238335376572902 7592:0.152587323371781 7907:0.33235136093401 8259:0.152587323371781
+0 6:0.0149480029785652 29:0.0271441163254978 31:0.0569737834901793 63:0.0161550406404948 68:0.0458826789511475 75:0.0151473333204142 80:0.0486639643084019 142:0.00387623487754545 172:0.0586118271937767 174:0.0547862452679215 200:0.216609767462195 229:0.0391403468798352 255:0.0695644159658666 306:0.0586490793350709 383:0.447654814377486 404:0.0627642931155378 411:0.0559947768172002 515:0.05399857126391 610:0.0962303737840539 625:0.0830922297197326 952:0.0696280045381906 1064:0.0692493975111957 1322:0.0839703521684585 1330:0.0987041278940621 1576:0.0828480923346686 1829:0.122875157312138 1955:0.112399503946328 2642:0.103745538764432 2796:0.386324218027172 2852:0.128774739342391 2879:0.140828655724198 3089:0.121233697641679 3335:0.109533364124953 4050:0.116344531703242 4535:0.137089733201073 6319:0.620172926452531
+0 6:0.0176610820154908 15:0.0302542309798681 26:0.152884063717583 27:0.0257124175665849 31:0.0673145880687707 60:0.0670247256493164 67:0.0499509990116545 68:0.0542104358159842 142:0.0228988789277747 153:0.153179092609325 154:0.0638345120761401 174:0.0647300092450498 232:0.0783805587357477 465:0.0750891520787726 549:0.0942939298055075 574:0.0661192163815171 764:0.0816709479707576 801:0.106794861614436 808:0.184330204553469 858:0.0885924117528628 1174:0.626260150934097 1424:0.0821155365065742 1557:0.129946326213534 2010:0.129413790592454 3366:0.424326468588064 4459:0.168942033745949 4474:0.166389212153817 5440:0.178766208166242 8419:0.37718076517307
+0 6:0.0576644726785321 26:0.124793867491993 28:0.212911502547412 31:0.219786093578729 63:0.062320826465597 67:0.163092952925902 92:0.190335350337991 102:0.274729649212512 142:0.00747661880026088 159:0.173453472607481 220:0.46259397537499 287:0.267625226936218 373:0.205825720711774 502:0.199016323759425 1013:0.357252331580081 1159:0.293183074742331 1418:0.366007129208101
+0 6:0.0309109297810553 15:0.0423614548000294 29:0.134714964920907 31:0.0471263652636768 41:0.0284667086458094 63:0.0668139185635034 74:0.0506805117873142 75:0.0501169990194908 81:0.0376407072535309 88:0.0944132536401569 134:0.0442765434181804 142:0.0144281777114774 144:0.0367543896759755 161:0.120663214978495 166:0.0461279441883187 171:0.160361361931441 176:0.0320449803530592 179:0.0337003027566411 186:0.0701633601706766 190:0.106011528734172 199:0.0288978674844588 205:0.0489178540257817 229:0.0971258447628325 242:0.0866379894274748 243:0.0582924565158315 307:0.0593689212818384 313:0.0701051525576181 318:0.0746218008093872 320:0.0586811463275474 346:0.0515063769161204 347:0.0507859802621381 355:0.0744151823393614 373:0.132398978529295 398:0.048085724652166 408:0.0728067404283462 462:0.075967573443728 472:0.0563250525105958 475:0.0500949359573031 485:0.0855651543097052 506:0.0345859788201245 508:0.0959316915330136 510:0.0558907040985861 513:0.0925249269272811 515:0.0446653923473126 557:0.058183018770295 586:0.0454451390272826 609:0.0437793429583077 613:0.0571771295928983 655:0.0468114690436231 720:0.0615506310734709 743:0.0784789673419087 758:0.129526951245147 792:0.0678400873563805 823:0.0704388575830351 827:0.0528059647459434 952:0.115186830624065 966:0.0617513765136621 1020:0.0790291601689063 1027:0.0646034480987148 1138:0.121924534355226 1225:0.0551449667926113 1314:0.0720893187447353 1380:0.0636737473984825 1504:0.0863795120648748 1751:0.0842226053069354 1776:0.0716011471631414 1792:0.0729789573829539 1817:0.0878816249001201 1917:0.0769279879500865 1949:0.0769279879500865 2424:0.0866694813775285 2642:0.0858140333111687 3046:0.189518890157775 3266:0.633600151926369 3374:0.103902330458892 3785:0.105600025321061 3884:0.108515085436422 6267:0.143788219202885 7829:0.143788219202885 8310:0.273820798048236 8311:0.136910399024118
+0 6:0.0222985466329023 15:0.0327415005210145 26:0.0689387551446239 27:0.0278262942367657 28:0.0470467154727192 29:0.0809839741885217 31:0.0121414457247986 60:0.120891636127864 63:0.0275418674488828 67:0.0720767798837155 68:0.01955573325369 75:0.00645597024171451 80:0.0207411495326037 81:0.0193951984883513 88:0.0243242479737164 96:0.0592099971991269 102:0.0607065728425958 103:0.0303240051550381 106:0.0222976902176069 107:0.0304714024053397 134:0.0228144583519524 142:0.00660838617332151 150:0.0277803509423583 153:0.110514864159309 154:0.023027497782491 158:0.022864120132169 176:0.0330237553889001 192:0.102902859432539 199:0.0297805177769913 255:0.0296491659527042 279:0.0360666419941116 306:0.0249969220906283 308:0.023536794249081 319:0.0288976721093133 345:0.0233769035134964 355:0.0191720259438454 387:0.022486425211802 405:0.0302948216561265 455:0.023258876141289 473:0.0280465781164473 478:0.0249810447932488 513:0.0476754942670872 530:0.0261867785270182 571:0.0251411307665253 593:0.0613640516906302 613:0.029461767813739 644:0.0303532864212979 719:0.0685741910913678 737:0.037537028580738 757:0.0302657352738633 799:0.0321366182529827 808:0.0332474020600189 829:0.0236314326812149 856:0.0239076152098478 933:0.0740378486941982 987:0.026006556682229 1149:0.0305610488302154 1269:0.0325415114761671 1411:0.0403455136841346 1472:0.0323920984394628 1476:0.0410145083862148 1511:0.0384505165779135 2010:0.0466843981252169 2824:0.0464964242180091 3653:0.0483543068319278 3704:0.0591897628015669 4187:0.0564788692192719 5736:0.0570818979493356 6367:0.0740900279301984 6495:0.925137286953672 8834:0.0705460805055158
+0 186:0.143427256583034 252:0.182408394129025 527:0.241068649672439 586:0.185797019979149 965:0.252463123260795 1038:0.335593089045898 1543:0.354337817151707 1704:0.383663086405428 9210:0.635930948119661
+0 6:0.0149480029785652 29:0.0271441163254978 31:0.0569737834901793 63:0.0161550406404948 68:0.0458826789511475 75:0.0151473333204142 80:0.0486639643084019 142:0.00387623487754545 172:0.0586118271937767 174:0.0547862452679215 200:0.216609767462195 229:0.0391403468798352 255:0.0695644159658666 306:0.0586490793350709 383:0.447654814377486 404:0.0627642931155378 411:0.0559947768172002 515:0.05399857126391 610:0.0962303737840539 625:0.0830922297197326 952:0.0696280045381906 1064:0.0692493975111957 1322:0.0839703521684585 1330:0.0987041278940621 1576:0.0828480923346686 1829:0.122875157312138 1955:0.112399503946328 2642:0.103745538764432 2796:0.386324218027172 2852:0.128774739342391 2879:0.140828655724198 3089:0.121233697641679 3335:0.109533364124953 4050:0.116344531703242 4535:0.137089733201073 6319:0.620172926452531
+0 6:0.0146297124837151 26:0.0379928572932579 27:0.00851964281532518 29:0.042505810900465 37:0.013844026081929 41:0.0134728966678032 59:0.0181685471640235 60:0.0666246245630472 63:0.0189732581727803 65:0.0209327604650782 67:0.0165509395896327 75:0.0118598387592201 88:0.0223422388972282 94:0.017564983915748 97:0.0182574366311048 102:0.0278800141025292 132:0.0177459099509591 134:0.0628664137153555 142:0.0106223530464662 153:0.0253774494838448 176:0.0606657712895947 178:0.0236136598087765 186:0.132829364041641 198:0.0509533749938393 204:0.017564983915748 215:0.0186402030483247 226:0.0226874448280762 252:0.10558135690717 265:0.0276411393657311 278:0.0252599607572872 284:0.0177688151106728 308:0.0432378982944178 314:0.0233488825586506 317:0.017439250989741 337:0.0447386313232517 351:0.0207644471088749 355:0.0176098346080052 365:0.0310016059235205 387:0.0206541671738259 394:0.0272581612050579 408:0.0172292080323638 411:0.0219209880169309 423:0.022168431460398 426:0.0263403198347466 442:0.0248988660302021 527:0.0279069998524211 528:0.0306136921589578 538:0.0256380648507869 539:0.0271837101024018 586:0.0215085512619901 641:0.0231521388967129 713:0.0292579878477027 727:0.0313260239222756 732:0.0320170526612756 757:0.0277995968722073 767:0.0279885056594272 794:0.0341776856789772 800:0.0516055054783715 808:0.0610766178950154 965:0.233808530579289 1015:0.0365663668787134 1038:0.0776989981833226 1046:0.230110598131319 1126:0.0624056516119596 1229:0.0330249014429755 1244:0.0413011802461341 1377:0.0279069998524211 1432:0.034790827277604 1880:0.0408822198149219 1924:0.0403555882327969 2280:0.0397424466341701 2736:0.0382394650034405 2804:0.0382394650034405 3944:0.0508719685445558 8887:0.0624882002589617 9210:0.88341266603217
+0 6:0.0117995828147134 26:0.0510718473903028 27:0.0114525184122277 28:0.0580893061722454 29:0.0571383792156861 31:0.0149912305459559 37:0.0372196269349355 68:0.0482915317246779 83:0.0101911549936382 88:0.030033524630942 139:0.0321769735446853 142:0.0020398691166289 144:0.0467673266228436 145:0.0330057620031033 172:0.0308444818074296 176:0.0203874703947774 185:0.0458078825925683 186:0.0223194617771269 198:0.102741008854105 204:0.0472234120763218 229:0.0205976127186792 252:0.0283855194443666 256:0.0267665805110807 308:0.0290612433558901 322:0.0681742380286973 323:0.033646569341161 355:0.0236719965209912 365:0.0416738671261063 377:0.0302723353773737 382:0.0345464210265002 389:0.0670406921002371 404:0.0330297175475864 408:0.0231603397578842 429:0.0448859066049951 448:0.0356192575818064 510:0.0355584575992542 543:0.0435351499266029 571:0.0310421424309632 575:0.0410510807883302 576:0.0385026350994586 586:0.0289128411469541 608:0.0429182981330283 640:0.0367089864866958 647:0.0355281855783999 653:0.0401795067828452 693:0.0935350456844679 719:0.254008838351131 744:0.0485315032286177 827:0.0335959027299826 880:0.0462654803054719 895:0.0409008421435314 930:0.0344365781611045 987:0.0321106971745107 1057:0.0535836144490644 1192:0.0489426755636146 1236:0.0433463643249416 1245:0.0384628856314699 1291:0.0597038094175846 1380:0.0405101399878739 1472:0.0399950241989276 1598:0.0411524145690789 1636:0.05740985306149 1912:0.0597038094175846 2264:0.320542383072269 2393:0.123116823905425 2415:0.05740985306149 2783:0.0661041343399302 2792:0.0602873011587577 2844:0.0741110986881332 3496:0.0666306762478457 3699:0.0597038094175846 3882:0.0690388343930002 3920:0.0871043350967414 4246:0.155920646794678 4534:0.0704799009570514 5560:0.783939015870673 7012:0.0871043350967414 7100:0.0871043350967414 7592:0.0839996792735751
+0 6:0.0248233972589892 12:0.0669359558643418 26:0.0644655040654039 27:0.101191691115903 28:0.109984950453772 29:0.0360614957734894 31:0.0189226997472824 37:0.0234902606239233 63:0.0214622912306972 64:0.0430599378257527 75:0.0100617660557372 80:0.0969765596078856 97:0.0309788454782842 132:0.0301108974578455 134:0.14222726191795 142:0.0244608600771128 176:0.154404661993963 186:0.112691075608453 190:0.0425669222899587 192:0.0400940702679591 204:0.0298039058575978 218:0.0281615526184567 265:0.046900920570408 284:0.0301497624648978 322:0.0430265091568752 337:0.0379557978120468 351:0.0352326896390228 363:0.0463786006477731 387:0.0700911377964767 506:0.0277746899858419 594:0.0475367375102991 613:0.0459167877532789 717:0.0503116980840021 764:0.0459167877532789 806:0.0532945211102417 808:0.0518167787279182 834:0.0500296553850073 895:0.051627139808201 965:0.198360769002493 994:0.05684014321471 1046:0.16733441218955 1113:0.0602767476889109 1243:0.0660994651742307 1664:0.0589246792075206 1954:0.0703244501115541 2160:0.0768763442164821 2736:0.0648839429898741 2804:0.0648839429898741 3052:0.0889633442658422 3243:0.0965865288711802 3950:0.0910632119155682 4500:0.0922484961835545 8199:0.848229612580095
+0 6:0.0233852875833601 28:0.0431721342934449 29:0.0212327013641281 31:0.0222830486711246 49:0.0528092931406353 60:0.0887483837700482 63:0.0126368141563986 75:0.011848564197065 80:0.0380659811859224 96:0.0362224642026636 142:0.00303207282879307 179:0.0956083265521862 204:0.0701931430170101 240:0.0526305587907913 312:0.0529900414410242 341:0.048847946795986 391:0.0605022409496835 405:0.0555997202267035 408:0.0344256581527883 413:0.0505497649831883 455:0.0426867344169262 478:0.045847409740222 480:0.0430005685730902 507:0.0312599809196063 546:0.0505107826020565 565:0.0621842915207824 737:0.0688912551102194 984:0.067042738366994 1033:0.0700330110136091 1059:0.0535919479684362 1149:0.0560883237433081 1192:0.0727486658507355 1232:0.0661926723699248 1248:0.0752734317895601 1359:0.0649007289911362 1665:0.18903402845875 2017:0.0879212670676161 2223:0.0742153840702509 3945:0.107234486112636 4177:0.104761717762101 5406:0.105950501673203 8157:0.811164615705082 8218:0.118353427736976 8233:0.355060283210927 8778:0.129472369361315
+0 27:0.0824301952103377 65:0.202530970937398 111:0.177040474823198 142:0.0146820815679921 204:0.169946684905274 322:0.245344104534315 389:0.241264721781999 506:0.158375768260663 515:0.204531317863223 740:0.405358169601848 4784:0.462245465456058 6813:0.573097935967924
+0 6:0.00932846504342859 15:0.0639203273874091 28:0.0688860026494896 40:0.0582860422576615 63:0.0403269204872715 74:0.229419522126822 75:0.0378114373092552 96:0.0577970212933066 103:0.0888010769068194 142:0.00725702054123597 159:0.112239275291774 180:0.143771982629323 229:0.146555773977211 255:0.0868248719958979 308:0.0689253502486419 363:0.0871438245120165 455:0.136222984953927 475:0.0755895830763557 574:0.0698474530804937 626:0.0880420081854042 834:0.0940040330750488 896:0.118148148478161 965:0.0931782966852619 1031:0.114629494862079 2503:0.55470193031881 2886:0.346663618592946 2974:0.482179722396907 3079:0.137273555554714 7126:0.206587747509473 7127:0.206587747509473
+0 6:0.0193999731994898 28:0.0716295016917865 29:0.0352284602828621 41:0.0446648959379451 63:0.0628995102379255 75:0.0589760105509383 80:0.0631575739393211 122:0.208810969583638 142:0.0125767389876663 265:0.0916349797536096 317:0.0578140209858445 472:0.176750508138243 719:0.104405484791819 995:0.151814461685456 1245:0.0948566100356253 1534:0.164323606237195 1910:0.118710881830781 1955:0.291750994072121 2369:0.505790336400408 4234:0.617737775183914 7374:0.188710680087724 7861:0.225606898489992
+0 6:0.0188827964772949 31:0.0359855547168811 81:0.0574846679931861 142:0.00489658413875352 199:0.0441326542263463 205:0.0747070605945489 229:0.0988866814172384 308:0.0697597812079606 327:0.0794012588579452 355:0.0568232156428109 394:0.0879563270558713 528:0.0987839164815495 574:0.0706930472932133 671:0.115317897289906 808:0.0985406707852993 819:0.189651012568893 1003:0.0997804038085154 1700:0.135693019548118 1709:0.120409748466338 2195:0.146970141533205 2873:0.272412032081084 3050:0.146970141533205 3185:0.14858976116028 7003:0.836355042927923
+0 6:0.0217372792609427 15:0.0248246272815232 29:0.0263151868382218 63:0.0313233930871678 75:0.0293695253621568 80:0.0943557195016307 83:0.0187742215607852 96:0.0448930589135629 142:0.00375786206514385 172:0.0568219338967748 243:0.273284005596316 306:0.0568580484287981 355:0.0436087281322537 473:0.0637948020570457 496:0.0607594270161872 1273:0.0972812249065944 1298:0.12597857363201 1527:0.188433096789657 1700:0.104137013929572 1949:0.0901625611015171 2033:0.146683764370384 2161:0.192412624158587 2542:0.109470382161166 3087:0.124842204667946 3185:0.114034561831331 4660:0.845786065868825
+0 6:0.0378781390022991 15:0.0432579750005485 26:0.136622523364546 27:0.0183820093962911 28:0.0466184874560938 29:0.0687830081881928 37:0.0298699162672356 63:0.0409367643186802 64:0.0547544685825109 75:0.0127944135825934 88:0.144617064674684 94:0.0378982671438036 96:0.0391140378092698 97:0.0393923054029287 134:0.13564078127173 142:0.0294670593204523 174:0.0925519846652484 176:0.0981695009448596 185:0.0367622604012472 186:0.0716482683265993 198:0.0549685848463441 204:0.227389602862822 220:0.0506441201632148 226:0.0489505056781672 232:0.112069754890685 255:0.0587585873811435 265:0.0596386133267334 308:0.0466451158782254 317:0.0376269853685717 322:0.164135883338614 323:0.0540048512929543 373:0.0450670051375294 389:0.215209020018628 394:0.0588122983859936 404:0.0530147655268838 405:0.0600381450296855 430:0.0491341305622593 473:0.0555825858179672 502:0.0435760392544814 506:0.10595382624839 507:0.0337554084881013 508:0.0489809749651534 515:0.273664032739745 561:0.055943469395831 740:0.180790489782803 772:0.0584925024994054 774:0.0708188449494794 799:0.0636882094681692 800:0.167016312860688 808:0.0658895559576931 834:0.0636170726733823 909:0.111165171635934 987:0.103079360527917 1192:0.0785560598732089 1380:0.0650213120903696 1446:0.131779111915386 1731:0.156777396655832 1954:0.0894236751989118 2376:0.087630165800354 2694:0.0925189359779094 3493:0.117302012987243 3904:0.107834900311134 3929:0.109761526869616 4740:0.103788274042862 4784:0.618486985337668 5369:0.113124655644205
+0 63:0.0554623927735796 75:0.0520028001652496 80:0.167069830553479 142:0.00665381369336155 583:0.403827876529974 784:0.251965884414255 8379:0.568248239941652 9778:0.645595234862229
+0 6:0.0388432556231812 26:0.084062159420414 29:0.141071131790459 31:0.148049691928897 41:0.0894295034565314 60:0.147412177192 63:0.041979813229998 67:0.10986073342172 68:0.119228811349009 81:0.118250051360661 96:0.240663867196013 142:0.00503631095136563 153:0.168448757701598 176:0.100670812242646 192:0.15684640222121 306:0.152403045673935 345:0.142525999039629 355:0.116889396822067 404:0.163096668163035 414:0.143500832460711 453:0.188380252839145 473:0.170996409485191 477:0.2076598300012 505:0.139704135897603 510:0.175583274398261 547:0.243783638105157 561:0.172106645634674 1675:0.286997628953447 1711:0.282360844216937 1785:0.294810041249064 1980:0.241158013090468 2254:0.313021658668157
+0 6:0.028889833868409 15:0.0329930599593022 29:0.0174870407387728 37:0.0683457747413102 63:0.0104075539033663 75:0.00975835911110638 80:0.0627015236868723 142:0.00124859244640461 145:0.0404052836419311 158:0.0345596845486589 179:0.0524947084440417 205:0.0380994868701225 228:0.0364155495856052 229:0.0504307329227322 256:0.0327673476398793 299:0.0398601102551111 341:0.0402306810131076 351:0.0341702675298935 423:0.0364806840147525 437:0.0433094563658061 507:0.0514908160256943 521:0.0474802328140203 546:0.0416001759720378 560:0.0573575476345053 583:0.0757785624184204 586:0.0353947758372292 647:0.0869864125811391 676:0.0481473581694873 784:0.0472815613014792 903:0.0536098143989301 1251:0.063253628015891 1379:0.0508219144309986 1598:0.0503783243379635 1947:0.0668359375226883 2001:0.0630895090529645 2095:0.0714556195976454 2137:0.0679658057308719 2682:0.0708549976878781 3836:0.0815685265134845 4164:0.272177927286844 4400:0.213264300075529 4900:0.0845165667041774 7804:0.106632150037764 8320:0.223977828901135 8379:0.426528600151058 9778:0.726878182196186
+0 6:0.0152120609834458 15:0.052117894732535 60:0.230922253366318 176:0.0788507817132726 180:0.234451022465785 229:0.079663530239198 337:0.116298729172355 345:0.111634009782819 457:0.104894770515721 496:0.127560965380363 499:0.226612741856907 513:0.22766944263341 571:0.120058896436863 574:0.113901237861992 908:0.161802796985846 930:0.13318724956819 960:0.17530504965161 2970:0.24675060667547 3691:0.699503282903985 4771:0.259842398209246
+0 6:0.0385691451573562 15:0.0330353436234322 26:0.0556459643921961 27:0.0280760251439387 29:0.210113424026112 37:0.0152074147079818 41:0.0147997356933988 42:0.0192295552522063 63:0.0138945228643521 67:0.0545427321481672 75:0.0130278204702808 83:0.0166558488737677 88:0.0245425492847387 92:0.02121777764473 94:0.0385896404940302 96:0.059741385467663 102:0.0306256961676039 134:0.0690576295446961 138:0.0269518454004014 142:0.0050007705333762 153:0.0278766737542806 158:0.0461386346498596 174:0.070680299214384 176:0.0499801974397117 180:0.0247681086946236 199:0.0751194678306818 205:0.101728839716271 227:0.0456920846124874 255:0.0598305129459228 284:0.0390374503281493 306:0.0252212604080884 312:0.0873960002821365 323:0.0274950275222466 351:0.0228093732630858 375:0.0227850116670036 387:0.0226882327295203 404:0.0269909536337764 405:0.0305667067023513 408:0.018925976452779 411:0.0240798127372291 413:0.0277904247326015 475:0.0260441704367873 480:0.0236401507462392 500:0.0332619345277884 502:0.0221854957458012 527:0.0613106790611043 538:0.0563259101346218 557:0.0302491345367105 587:0.0814152000983476 603:0.0344110762374281 643:0.0523008468700656 644:0.0612513923352078 709:0.0280296695251128 737:0.0757478196194078 757:0.12214943712139 781:0.0348299941988376 799:0.0648500655124802 808:0.0335457854454222 823:0.0366208994423858 824:0.0359465155478636 1050:0.0379414878581873 1080:0.0324979165774742 1154:0.0873127317008702 1155:0.0748296607333241 1216:0.0344110762374281 1229:0.0362772627674488 1274:0.0895203322245181 1292:0.0385741896192526 1296:0.0981607600987053 1305:0.0292325013774332 1410:0.0443298909153152 1614:0.284306783493085 1625:0.0434007278883708 2114:0.0460221570222816 2246:0.0407076000491738 2306:0.0452125161446931 2646:0.0479056439838901 3170:0.0497691560962486 3184:0.0508729563580725 3738:0.0597209694737174 3930:0.055881946342062 4450:0.0614906626994053 4784:0.0524808305083667 4787:0.0575941872982785 5096:0.343210844182776 5106:0.063706977544092 5795:0.390398494607882 6141:0.343210844182776 6754:0.0711792060137937 8033:0.523284713576581 8784:0.0711792060137937
+0 15:0.105450788249814 37:0.145628925778241 111:0.192483214099402 1347:0.465011537051164 1815:0.400215849436182 3170:0.476598348789827 5086:0.571898695333651
+0 6:0.0302267084411683 15:0.0258898582243751 26:0.0981221453880711 27:0.0440064628215326 28:0.0558022436721909 29:0.0274443780630933 63:0.0326674876902074 64:0.131081996208489 83:0.0195798280864224 86:0.0587032732614979 94:0.0453641560100826 97:0.0471525170561116 134:0.108241177001436 142:0.0274337900396278 176:0.117508711925967 178:0.0609857516905525 192:0.0610266878242485 198:0.0657972948779195 199:0.0353227572419868 203:0.286437116737916 226:0.0585936651913616 308:0.0558341178444663 387:0.0533424264107484 402:0.115195331438015 436:0.0667471164395443 485:0.0522944673284334 575:0.0788696771954799 582:0.06373689159867 609:0.0535128450001247 757:0.0717965502033602 808:0.0788696771954799 994:0.0865156780707726 1243:0.100609177356612 2548:0.105235868101329 2783:0.127003032235854 2798:0.516312708703442 2799:0.645390885879302 2833:0.1141677835393 3900:0.135410004572456 5975:0.147013159453649
+0 6:0.0465197544584178 15:0.0531269599932497 29:0.197109125498686 37:0.0366845153179505 48:0.0474318444127603 88:0.0592034571599471 138:0.130030699421792 204:0.0465444746855768 208:0.0580872078637154 252:0.0559548339742998 275:0.10427553530909 286:0.043443652412102 287:0.21590173751101 292:0.0764548796714273 331:0.0606098780875045 373:0.276743534449629 382:0.0680994849057698 408:0.0456547208333008 475:0.0628257851632187 490:0.0802370402938302 502:0.0535175882391109 505:0.0557711756692832 546:0.133973077205012 586:0.0569943146284116 631:0.0520352439788353 655:0.0587078761776635 800:0.0683732804679934 814:0.0860702401336092 834:0.0781308342511082 866:0.0867129966246282 1026:0.107276415659362 1048:0.105311300606918 1067:0.0824677470797452 1155:0.0902549804855349 1192:0.0964780401777562 1314:0.0904096984150204 1347:0.351414859983661 1411:0.0981980570817945 1415:0.114572092502417 1638:0.116599685196054 1707:0.0886234506963206 1730:0.109441702176974 1815:0.100815990921234 1903:0.130307492496484 1972:0.112721045399058 2013:0.122022166446987 2073:0.112282398486776 2108:0.116599685196054 2275:0.122022166446987 2487:0.138933203752224 2596:0.107276415659362 3170:0.120057051394543 3852:0.301676516460096 4281:0.124961124462828 4335:0.140509748704585 4517:0.138933203752224 5086:0.288127188155335 5730:0.260614984992969 7440:0.171704048549558
+0 6:0.013325664913783 11:0.0199603690761067 29:0.0483962170803702 33:0.0245799644947942 46:0.0371937118956486 58:0.0297965331198064 68:0.109074495266723 75:0.0270067230324561 80:0.0867647247167335 83:0.011509213390181 94:0.0266654921320558 142:0.00345553898934581 172:0.0348337085691337 176:0.0230242546017569 178:0.143392072058873 179:0.0968544018159923 183:0.117230802324806 199:0.0207630602696404 206:0.0423657595454352 208:0.19967018573867 251:0.0502131493350844 288:0.046134658179768 351:0.0315226136080759 387:0.0313551970733112 400:0.0391397576086539 414:0.0656396750664107 441:0.0939659639205114 455:0.129729227877642 460:0.181541322832333 471:0.0463035440057646 477:0.0474935355143559 507:0.0475010942341178 599:0.0416486272951932 658:0.0410816538078751 671:0.0542535338871401 696:0.0980463156529863 852:0.088162915435147 913:0.0463603633724921 1036:0.0502131493350844 1057:0.0605137742774442 1083:0.047619183349761 1098:0.0498286464031741 1146:0.0508547570549513 1426:0.0527197870406471 1626:0.0638394040067757 1726:0.0599799196477033 1819:0.0616572121309281 1949:0.110545212451321 2146:0.0684278117823742 2185:0.0555115890216103 2334:0.444519864849215 2401:0.0601552857248635 2592:0.0601552857248635 2944:0.0730261727901213 3785:0.0758734080082523 4188:0.0740866441415358 7194:0.196739698388268 8372:0.688588944358936
+0 6:0.0154538482330866 15:0.0264731398428215 26:0.0334442577736283 28:0.0570594318236276 29:0.0280626819995292 63:0.0334034648796299 75:0.0469797719344831 80:0.0503107685970351 83:0.0200209488417458 94:0.0463861808550123 96:0.0478742425057613 134:0.0553398900580458 142:0.0100185197981433 162:0.0418490546530072 227:0.109847164852715 228:0.0584385890743137 337:0.0590736163984042 339:0.0601008685452097 363:0.0721826920179178 404:0.0648882570906194 472:0.0703989510655916 561:0.0684728903093436 731:0.0890457129628213 903:0.0860314329911338 1081:0.0859040976429328 3028:0.430720937854771 4181:0.450975810128688 6690:0.171120097570372 6691:0.684480390281489 7591:0.165020871776471
+0 6:0.0295069493811985 15:0.0505467366782536 37:0.0698057082950505 63:0.0318896087399656 75:0.0299004220287158 81:0.179655295306443 96:0.0914091318210502 142:0.0114773725780005 178:0.119067115204418 179:0.0804240712439451 204:0.177135774835106 229:0.077261975114799 243:0.139112004710105 312:0.133722920014076 345:0.108268665221184 346:0.122917368325519 355:0.0887940379840147 363:0.137822696809669 405:0.140308570034905 413:0.127564764920979 475:0.119549035730757 485:0.102098460596868 568:0.207536374451944 571:0.116439573302401 693:0.350851454036774 737:0.173850398041793 834:0.148672489667952 837:0.160097498760137 1033:0.176731674017289 1391:0.186433833907593 1726:0.19921982854708 1746:0.17233408421708 2313:0.270611386955605 2528:0.16974011788059 2935:0.23489152634094 4727:0.28702495760079 5690:0.32672975565428
+0 6:0.0453634771895804 28:0.167493183247378 29:0.0823756526894421 31:0.086450642653301 60:0.172156757466151 75:0.0459683952798846 80:0.14768304756323 142:0.00588170515824538 159:0.136452347218157 200:0.438237904171408 229:0.118781233548168 245:0.26225666018102 631:0.15222562742016 646:0.294930441341106 655:0.171745966815969 777:0.312834207833607 2874:0.433937064981276 4258:0.427379999906658
+0 6:0.0175546378484058 15:0.060143774630316 26:0.075981312158585 27:0.0511148952473556 28:0.129632133872654 29:0.0637550223253768 31:0.0669088798990578 64:0.152255875055987 80:0.114299986550275 142:0.00455217326275922 159:0.105607933402859 172:0.137665131789912 192:0.141768847365901 325:0.315268277951849 365:0.185998858594175 404:0.147418278820842 499:0.130754952253391 513:0.131364665804561 842:0.254224494320699 1294:0.199381009672605 2134:0.478308917035103 4786:0.347952617971805 5414:0.314565986693132 7993:0.364159384463314
+0 6:0.0360662000516493 29:0.0654927036758332 63:0.0389785129437095 75:0.036547139746122 83:0.046724902125302 96:0.111728935181156 142:0.00935249094753347 172:0.141417277478115 174:0.396561002445273 186:0.102331351812105 218:0.102290611142528 339:0.140263442188372 404:0.151436252377749 405:0.171498479577295 473:0.158771210437009 480:0.132636137397366 506:0.100885418195445 535:0.1710061417798 574:0.135023940389522 613:0.166782575684637 716:0.172666684878148 737:0.212496492057882 761:0.183371128430541 808:0.188212987945917 850:0.165305464788257 1080:0.182333783509555 1471:0.208856650042935 1482:0.427285575007345 1711:0.26217376815869 2175:0.280713427829898
+0 6:0.0307751052188546 27:0.0224024313841222 33:0.0425748545286803 64:0.200190283708799 67:0.0870415101986518 81:0.0468441395343224 142:0.00399021649850197 204:0.0461871882971346 215:0.0490144808682639 229:0.0402912782147778 308:0.0568471044344703 387:0.0543102067701137 426:0.0692619656157757 437:0.138407138237636 440:0.347356387858342 478:0.0603353221010309 749:0.0895621619236232 764:0.0711573621287499 882:0.0577766397559774 1003:0.0813108489963127 1146:0.0880853137181903 1213:0.0978934382805912 1665:0.0829231070322105 1791:0.107860812807534 2166:0.579879025172371 3292:0.133768024012065 3837:0.144969756293093 5697:0.545641032142531 5724:0.170386007690754 6098:0.159602315212523
+0 6:0.0240421286534719 28:0.177538976713979 29:0.0436581620848101 31:0.0916357211401508 67:0.203995713890172 153:0.208523546196392 159:0.0723181971517975 185:0.0700015642879584 220:0.0964349742022963 277:0.108863523410562 278:0.207558155016499 322:0.104180831683381 373:0.0858152034985716 387:0.0848564428344354 539:0.111682689644127 764:0.111179113297912 772:0.111379622182775 903:0.133842312220137 1150:0.131171660240692 1236:0.132479963587487 2354:0.350924713599238 6118:0.748107153839511
+0 
+0 6:0.0289087459745033 17:0.0196908767159219 26:0.156406277857325 27:0.0210438337574897 28:0.106738243779768 29:0.0918670633256142 32:0.0270886781270908 37:0.0341952579136788 41:0.0499178317427381 48:0.0221066591579332 60:0.0274275489761522 63:0.00781077523789518 67:0.0204407173401665 88:0.0275930793881201 97:0.0225482728343821 134:0.103521582444417 140:0.0510707395945824 142:0.0046852867893606 153:0.0313416207523683 174:0.0529770314341748 232:0.0320745305956329 255:0.0336335902679715 274:0.0390525937355592 284:0.0438896323897466 331:0.0564971458762792 355:0.0869938893027654 373:0.0515929756979373 420:0.0367451336934935 469:0.0417820217882027 475:0.0585626907883505 527:0.0344656623695686 530:0.0297059074383681 558:0.0802298745002329 561:0.0320222083560847 586:0.0265634596973704 598:0.0381898723317035 757:0.583661300851596 799:0.109365961859759 903:0.0402336816799845 936:0.0422832497282302 965:0.0360947339228746 987:0.0295014663524149 1015:0.0903202824802521 1059:0.0331250151313237 1080:0.109611790731335 1122:0.220675702886791 1140:0.0734064191319521 1294:0.0410422519859102 1312:0.046987520231565 1359:0.0401149372501165 1497:0.0438730537395757 1579:0.0907168973565179 1744:0.0496837542746801 1808:0.0726673242881373 1969:0.0493786520055008 1979:0.0533988553327426 2054:0.112502469973899 2062:0.578803065402553 2190:0.0556678289940823 2398:0.210144535715547 2864:0.0533988553327426 2975:0.154104930767555 4238:0.0654876731325986 4787:0.0647528895217039
+0 6:0.0141355841981236 15:0.0242148940246298 26:0.0917740580674349 27:0.0617391465252767 28:0.0521920747942329 29:0.0256688430122031 31:0.0269386390531879 37:0.0668821743899479 41:0.0325446015176895 63:0.0458310593445725 64:0.122601546104145 75:0.0143240810049871 94:0.0424292872050842 97:0.0441019488640267 132:0.0428663250496773 134:0.151857646774786 142:0.0329900657001712 174:0.0518086318282289 176:0.109906395840324 192:0.0570785195319087 198:0.0615404885097471 205:0.0559253999532514 226:0.0548029031610391 255:0.0657836140713149 265:0.0667688536721568 284:0.0429216538563889 323:0.0604615334332315 387:0.0498913972938167 455:0.206421041893965 508:0.054837015278186 546:0.0610639845962411 808:0.0737671430447319 1038:0.0938433284448334 1457:0.0935898250494305 1471:0.0818581042026056 2185:0.0883282836913057 2423:0.0912219199788117 3391:0.412506091637592 4593:0.656631710875465 6831:0.405653686539159 8110:0.156522990954337
+0 6:0.0289647101277303 15:0.0992357127044262 26:0.188050875854257 27:0.0843382892221503 29:0.0525970902045471 63:0.0313035841593436 64:0.37682753620358 81:0.088176915279128 88:0.110585986222058 94:0.0869403052322815 97:0.0903676952441828 134:0.31116596653252 142:0.0187774279574499 176:0.150136791993884 192:0.116957513010406 198:0.126100370937648 204:0.347761220929126 226:0.112294630484977 229:0.0758421578654286 402:0.110385799686529 457:0.0998630831551675 483:0.14061390428548 582:0.122151612584032 808:0.151153562901567 856:0.108691837423105 991:0.153842110777084 1150:0.158028815609724 2578:0.218802306084868 6261:0.269096018949229 6842:0.320725553169536 7934:0.336837497164726
+0 6:0.0161695016590906 15:0.0276990864769444 27:0.0235408554321563 28:0.0597018013651501 29:0.0587244777230855 64:0.0701211168690571 80:0.0526406137830566 92:0.0533712981341371 132:0.0490342036307126 142:0.00838597455103156 204:0.0970685640212466 209:0.101573974583171 251:0.0913937435844595 278:0.139592961183677 284:0.0490974934968674 299:0.0669285384440717 308:0.0597359029599363 309:0.059498285414381 327:0.0679919835169113 337:0.0618092609656551 346:0.202072321885327 351:0.0573748052722821 389:0.0689016679125509 438:0.0901495062880852 505:0.0581554306130303 537:0.0904200350438176 539:0.0751120444250528 565:0.257979894751465 643:0.0657788986600919 723:0.0829754937934637 772:0.0749082168068835 827:0.069056976012795 856:0.0606770389826867 1098:0.0906939037450585 1237:0.0991439724509621 1262:0.249093074897588 1487:0.121584399477793 1588:0.144872690842494 1688:0.108855737047762 2291:0.13696054094291 2341:0.112589933314916 2754:0.113341974250914 3050:0.125851801146902 3148:0.144872690842494 4130:0.141910552871493 4160:0.139297762010856 4784:0.132010529014326 5193:0.167712823873143 5211:0.13809838435169 5824:0.15728669433661 6754:0.179044511103966 7090:0.376077954533685 7722:0.480746496922831
+0 6:0.0242923294433093 80:0.158169764174159 147:0.312772207199468 204:0.145831429162654 220:0.19487710068808 339:0.188948419385073 916:0.588717781016531 995:0.380199176524505 1046:0.272924143950457 5477:0.464750182008055
+0 147:0.36548778701912 204:0.170410302116462 387:0.20038064850717 742:0.291337965245097 916:0.343971033886199 995:0.444279102988885 1046:0.318923609900304 5477:0.543080592293579
+0 6:0.0660475591935363 27:0.0961573260204772 29:0.119935929390391 31:0.125868965337487 41:0.0760312225176722 42:0.0987886962703321 47:0.078152078096731 63:0.142761679203182 68:0.202732027704935 75:0.133856595498258 80:0.107510550668883 83:0.0427833502630387 142:0.0513812820795892 144:0.0981666414169981 169:0.12035893395462 174:0.121036160566512 176:0.085588364363175 180:0.254484218166513 186:0.0936990313158246 189:0.12356158548514 204:0.297371953532987 229:0.172941120035126 255:0.153684739287842 345:0.121172829197277 404:0.138661611545479 498:0.169664134775884 507:0.0882882210798903 530:0.135737654041705 553:0.211077569133424 561:0.146321718954646 579:0.193884557774778 582:0.139269749760171 636:0.168872750169623 684:0.154534244490191 808:0.172335988329076 823:0.188133883738427 1001:0.193545188272275 1482:0.195620617554851 1707:0.18873796757782 2731:0.241011529469681 4071:0.251849978075879
+0 174:0.199993319951885 204:0.163786877049189 278:0.235539645619139 389:0.232519953801046 1038:0.362256985925487 1543:0.382491039984551 2376:0.378715763897119 9640:0.634568300470963
+0 6:0.0157122733513238 17:0.0428089738324386 29:0.028531956823793 31:0.0299433864624089 63:0.0169810251515995 75:0.0159217951732578 81:0.0956653658905956 142:0.0162976852646507 158:0.0563877812213207 159:0.0472621745895149 162:0.0425488704356977 199:0.0367225441293929 229:0.0411415377775523 255:0.0731211467343314 317:0.04682427609192 324:0.0832391113534508 339:0.0611058980903232 365:0.0832391113534508 408:0.0925206242202849 436:0.0693922026575926 515:0.227037769124375 829:0.0582801371000452 1010:0.437350416405896 1064:0.0727900218290447 1190:0.170035837303023 1273:0.105476116353054 1817:0.111677335716659 1946:0.109406204727201 2161:0.104310653741429 2537:0.472585330118103 2581:0.36687919202473 2589:0.127432206126081 2734:0.260149996350624 2837:0.236292665059051 3535:0.137897719123633 3636:0.136590906448393 4540:0.150300157850841 4778:0.130074998175312 5153:0.12434755189313 5620:0.14237355329201
+0 6:0.0213711237689241 11:0.096034724141457 15:0.0732194000613626 63:0.0461936451999761 75:0.0433122117548295 81:0.130119705095067 142:0.0138546091147146 158:0.0766961103966746 179:0.232996337012093 180:0.0823439017290237 218:0.0606125765396758 229:0.111917718872153 255:0.0994560775543914 312:0.0968520682176557 317:0.063688263141526 345:0.0784162068008451 346:0.0890258853227614 386:0.0851028982667493 430:0.0831655102269505 480:0.0785938996759241 507:0.0571351469479018 531:0.601180150087555 641:0.507310611634787 1033:0.128002201465099 1064:0.0990056964303093 2202:0.1498033403255 2216:0.14557405219649 4619:0.3620396885026
+0 6:0.0177777108780408 15:0.0121816085951201 26:0.0153893667457476 27:0.020705772163824 29:0.0129130360160237 31:0.0271036459376923 41:0.0163719732644466 60:0.0539738706033267 63:0.0153705959059039 75:0.00720591005312963 81:0.0216481877296478 134:0.025464636396989 142:0.00553202321785959 147:0.595124979531625 171:0.0307427173130333 176:0.036859868004251 192:0.0287140709110439 198:0.0309587208193321 204:0.0213445893744801 205:0.0562679590555404 220:0.0855694492585043 232:0.0315592648387278 286:0.0199225993617521 292:0.0350610469510272 339:0.0553107988845557 346:0.0296227089795072 365:0.0376724824549216 387:0.100393992801082 394:0.0331235292224615 414:0.0262708804328154 415:0.0618689657885149 457:0.0245172420078548 478:0.0278828983210349 505:0.0255758143503493 506:0.0198913308740086 510:0.0321442539992361 561:0.0315077831370726 574:0.0266223397022272 586:0.0261367273052573 599:0.0333379501576117 607:0.034878006688169 613:0.0328841120580526 664:0.120580454519539 742:0.0364912752346588 800:0.031354948264734 806:0.0381678050669886 844:0.0389613935882598 856:0.0266847767782222 876:0.0686286806833684 916:0.17233513194522 987:0.0290275359438447 995:0.0556477801117873 1046:0.119839471157618 1080:0.0359503056256564 1086:0.044828885622029 1127:0.0409743622716002 1198:0.0423547980163935 1216:0.0380667082055589 1339:0.0429170138001182 1380:0.0366204924856511 1471:0.0411797542752181 1472:0.0361548363836481 1591:0.0421999414344166 1778:0.055056340861904 1936:0.0478729861056212 1980:0.0441491050517048 2185:0.0444346598713917 3719:0.059303199412296 3950:0.0652165147328691 5477:0.680230719374807 5563:0.0737573774682231 5564:0.0737573774682231 6275:0.0704748351401837 8807:0.0787408695658093
+0 6:0.0409486489985813 15:0.0467645898490248 26:0.0590790139316581 28:0.100795030060399 29:0.049572503358624 60:0.103601503102802 63:0.0295034768052981 134:0.0977574732812203 142:0.0283162161820589 158:0.0979702686094165 228:0.103231300315781 337:0.20870614201202 404:0.114624587294042 480:0.100394471407844 507:0.0729834363773306 513:0.102142154441832 561:0.120956813211637 579:0.160274622297554 731:0.157298539925535 808:0.142461502631911 1064:0.126468143207955 1175:0.144622787445718 2442:0.237318218672753 3028:0.253621697536412 4181:0.265548387506673 6690:0.302282284055303 6691:0.604564568110607 7591:0.29150805046073
+0 6:0.0278753901557114 15:0.0382014416414632 26:0.0723914240528455 27:0.0162332901435247 29:0.0202475965275167 37:0.0791350401703078 41:0.025671198361598 63:0.0361515631069316 68:0.0342252427695261 75:0.0112988424401741 94:0.0334682434993372 97:0.0347876398734244 134:0.0798569264185969 142:0.0173483871580754 174:0.0408666753465257 176:0.0866942213838967 192:0.0450235654688699 198:0.0485431688860796 204:0.0334682434993372 226:0.0432285581089015 232:0.0494848198647222 252:0.0402348510981727 255:0.155670445513026 265:0.105334612013166 278:0.0962604374092977 317:0.0664573450645092 322:0.048316542545435 323:0.0953841771371653 363:0.0520807677709963 389:0.0475131742693334 394:0.103875162189833 404:0.0468177364147403 414:0.0411926511136668 502:0.0384823265657968 506:0.0623790782326462 527:0.0531738754146774 549:0.0595315752531652 561:0.0494040967317292 586:0.0409822994662052 599:0.0522737923915152 806:0.0598469884524693 808:0.0581875602514408 856:0.0418416391746938 987:0.0455150775735182 1059:0.051105515072228 1126:0.0594537277660503 1297:0.082384143681994 1709:0.0711010939737901 1792:0.0658122199693154 2376:0.464321133591416 9640:0.778006887233504
+0 6:0.0190840109347916 15:0.0653835449421606 28:0.140925781647542 31:0.0727380312060518 60:0.14484962994578 96:0.118240137174213 107:0.182550733190262 186:0.108294892955595 245:0.220658083581216 345:0.140048390925354 363:0.178277314879195 571:0.1506176773097 737:0.224880102269162 903:0.212481031672545 936:0.223305155023677 1014:0.234028814772916 1844:0.248149221191068 3298:0.291081626283472 4856:0.345851728403253 5294:0.350043008582281 8894:0.422633607363095
+0 6:0.0255107953889721 27:0.0185703294657037 28:0.047096084687407 29:0.0231625588577684 98:0.0413701062888459 142:0.00496149059087309 172:0.0500145180951036 176:0.0330584093887216 186:0.21714687221418 198:0.0555317271824516 314:0.0508937347690455 408:0.0375546342176004 411:0.047781342306498 442:0.0542722453893887 527:0.0608290972864011 528:0.0667288948464885 555:0.0734971293038885 586:0.0468823508124839 640:0.0595238487180394 641:0.0504648911306832 693:0.0758338276538225 727:0.0682815697438331 761:0.0648521792001558 772:0.0590917466785009 800:0.0562424540412472 808:0.0665645814940211 880:0.0750197625741703 963:0.0541109608977625 965:0.318521381916036 1017:0.0751528373102761 1046:0.0716533999886547 1080:0.0644853053128432 1126:0.0680130338839668 1309:0.150573863572205 1598:0.0667288948464885 1675:0.0942446464886701 1785:0.0968100963765629 2194:0.0972767705250737 2264:0.086626909574438 2280:0.086626909574438 3944:0.110886012115669 5107:0.114283595482822 5351:0.124076448403504 9210:0.802325511076747
+0 6:0.00858448929765018 26:0.111468108885999 27:0.0249959739979075 33:0.142511311185335 37:0.0406173032686046 41:0.0395284382320727 48:0.052516806952596 67:0.0971183568586278 72:0.0534232993823828 76:0.214257012324942 85:0.052608191254739 110:0.0828484301043985 142:0.015582581705682 176:0.0444971718470992 194:0.0680144765320368 207:0.101519356340568 229:0.0899116462254043 303:0.0767004388572469 323:0.0734361423486117 355:0.051665894628512 398:0.0667711051673483 423:0.0650404657061146 426:0.0772804639769118 437:0.077215306883269 480:0.0631401977662617 671:0.104851551654762 676:0.0858406765782185 712:0.157662180890213 780:0.174186692496916 789:0.0882079499659202 795:0.101702659011429 808:0.0895970397982974 1011:0.206054689530299 1042:0.195620650476475 1128:0.516399329099443 1171:0.14213441998624 1215:0.100623648632734 1241:0.321152497478326 1558:0.206839850183378 1769:0.263163045528813 2787:0.323505979922645 3807:0.178079568804553
+0 6:0.00575681589278553 15:0.0394467422949836 29:0.0209076330105527 42:0.103327058924339 80:0.0374831987307305 96:0.0356679056187662 138:0.0482738659541185 159:0.0346327525903946 174:0.0421988579901514 179:0.0941445824544647 245:0.0665629445912814 346:0.0479624410056165 351:0.0408542202228297 471:0.0600107341170578 535:0.0545913278001056 586:0.0423182512553293 998:0.0637201789913509 1080:0.0582075195721385 1916:0.0703116984542046 2007:0.310942852226836 2823:0.0830505120126701 4355:0.108472636056499 4784:0.0939992248947812 5114:0.106967149454683 6483:0.0927835749345129 6831:0.440547497135287 7217:0.127490173633131 7388:0.114106549982649 8315:0.535579040401313 8316:0.535579040401313
+0 31:0.119541300923265 67:0.177411986779731 274:0.338950836618281 278:0.270765281913992 387:0.221395094444331 764:0.290072379499267 2354:0.457790873120507 6118:0.650617476003702
+0 6:0.0193883363307221 28:0.0715865354926835 29:0.0352073288635048 31:0.073897956665203 67:0.219344832450031 153:0.168160012152114 159:0.0583196916304678 185:0.0564514852929051 220:0.0777682268000268 274:0.104766193953881 277:0.0877910037190741 278:0.16738149003553 322:0.084014732347755 373:0.0692041063293867 387:0.0684309312713514 415:0.0843427146899536 539:0.0900644689307615 720:0.0965163734214197 726:0.0893378948383602 764:0.089658368967262 903:0.107934692556051 987:0.0791434332564372 1236:0.106836051338785 2354:0.282996837430275 6118:0.804396500222264 7392:0.196249548326366
+0 28:0.314065747971827 159:0.255861209756145 245:0.491756336248595 4781:0.770761605849939
+0 6:0.0146379186248927 11:0.0328889695353966 15:0.0250754155806298 17:0.0398818338608909 28:0.108093635607039 29:0.0531620667305215 92:0.0483159429068222 142:0.00189791274425902 144:0.130538235745887 158:0.0525321660653521 159:0.0440305390701788 161:0.071425315187205 179:0.0398970762833779 180:0.0564005592685918 204:0.0878741825898741 218:0.0415159246011668 245:0.0846251629812821 252:0.0528202899555701 255:0.068121357853401 256:0.0498077389947142 318:0.176686346160997 351:0.0519402359084186 387:0.0516643814244357 411:0.0548332100043428 478:0.0573959717661984 502:0.101039153464775 731:0.0843442927991663 780:0.148507997500038 1018:0.158843540796054 1058:0.0821033332247227 1064:0.0678128742043527 1620:0.44257041909936 1746:0.256476425449025 2833:0.110576295681373 3874:0.120326210553686 4111:0.123987572122637 4425:0.127251259495397 4781:0.663192537714375 6060:0.135993269405803 6607:0.156308128308206
+0 6:0.03978060460099 15:0.0681459719773409 29:0.144475400538293 63:0.0859857045725763 75:0.0806221511251845 80:0.259015458485685 83:0.0515370306215998 142:0.0257892253609591 158:0.142763556802778 204:0.238810462185405 229:0.104162854757591 408:0.117122655876969 521:0.19613740700699 664:0.224849129749997 881:0.453253972284832 1017:0.23438119118583 1109:0.275206999093542 1226:0.314825276034605 4126:0.327003416799411 4402:0.394248107962897
+0 6:0.0187773804190207 15:0.0643330011032867 26:0.162547358192032 27:0.0546752283599602 31:0.0357846599321692 63:0.0202936368307058 64:0.162861034881262 94:0.0563620757084458 97:0.0585840004511419 134:0.134482771189886 137:0.0768606592570394 142:0.0389539857563679 174:0.0688213783875146 176:0.048665697770293 179:0.102359167061589 192:0.0758217743237966 198:0.0817489498646463 226:0.0727988986021662 265:0.0886941882253753 286:0.0526071986598457 317:0.0559586270785671 457:0.0647397158111251 808:0.097990552633765 862:0.0903399788642294 991:0.0997334972726273 1607:0.121474887953072 2161:0.12465928915974 4887:0.306603378988438 5829:0.365308981894108 5869:0.601531665062754 6556:0.179620299233549 8291:0.415842982402195
+0 27:0.0905956384882189 111:0.19457790696647 134:0.222834963603646 142:0.0161364722065045 176:0.161275959670362 204:0.186781414124548 515:0.22479196228243 693:0.369956496894239 1731:0.386338295350388 3350:0.498360078998627 4784:0.508034986140899
+0 4:0.0341443594725359 6:0.0236811577334933 15:0.0270445950144837 26:0.136664772281333 27:0.0459692345440416 63:0.0341245196117181 64:0.068464250951576 94:0.0473874834243575 97:0.0492556087655769 134:0.113068938830218 137:0.0646220560677888 142:0.0266104327520104 174:0.0578628783022461 176:0.0409166077976609 192:0.0637485938694035 198:0.0687319790475541 218:0.0447761818295734 226:0.0612070538116233 274:0.0853084975708934 286:0.0884609987535202 308:0.0583244254181695 317:0.047048276341924 322:0.0684111001833546 389:0.0672736159031243 457:0.1088622862567 496:0.198578703115663 506:0.0441610796789315 800:0.0696116502921883 1031:0.0969991360172665 1038:0.104809660121587 1227:0.0862554867507872 2161:0.104809660121587 2845:0.129775461690283 4281:0.127224407497853 5643:0.4794033309273 9888:0.734383495477712
+0 6:0.0186763857238375 15:0.0319934920783724 26:0.202091365531347 27:0.0815717340440484 28:0.0689578376756345 29:0.0678289919201463 64:0.0809925409974851 81:0.17056888272959 142:0.00968611764836289 176:0.0484039478774694 178:0.150726755372364 186:0.052990883302029 189:0.0698794583584015 204:0.168176791858696 218:0.0529697863065438 256:0.0635492360174479 322:0.323718656628689 373:0.0666628926502099 389:0.0795840313499762 423:0.0707509080078838 515:0.202401246555888 643:0.0759771148033135 740:0.133712202261845 834:0.0941020614395053 852:0.092672558509733 909:0.082217487944826 1057:0.381654775799455 1201:0.11909353098052 1243:0.12432817865877 1731:0.347856532667972 2139:0.279603793050696 2268:0.150505232978284 3350:0.149573410304711 4784:0.457431455488294
+0 6:0.0293406790951005 15:0.100523816340444 67:0.165969019474021 80:0.191040069006635 590:0.493120872911408 1046:0.329642315433068 2142:0.381516584304229 3467:0.424908754620377 3962:0.497048748343836
+0 6:0.0279393822610455 15:0.0957228468356681 26:0.0604646744474799 28:0.20631822614968 29:0.0507351947443324 37:0.0660972553571119 63:0.0603909239976395 67:0.237063627440881 75:0.0283119515350233 142:0.00724508873410287 162:0.0756599079775109 232:0.123996049077377 411:0.10466009916917 493:0.124712523897526 590:0.234784827653715 609:0.0989268041040311 613:0.129201361104349 1041:0.199299818090456 1046:0.156949377866284 1457:0.184982938175807 1518:0.179003250582257 1576:0.154851756763489 1676:0.189747305310559 2142:0.363295534273581 2866:0.191476784537548 3467:0.404615315239445 3962:0.47330993728334
+0 6:0.0261154360637205 11:0.0391180286903481 26:0.113034806918294 29:0.063230781656585 63:0.018816155868608 75:0.035284910894776 94:0.0522586271970611 96:0.10787015207267 102:0.0829474863296985 142:0.00225737097362683 228:0.0658368588244491 306:0.0683099623750156 346:0.072526206898033 351:0.0617775402255231 473:0.0766438639499832 505:0.0626180679303279 587:0.220507189786952 909:0.306575455799933 915:0.10786306820153 1235:0.102037926437308 1317:0.1129102561779 1418:0.110506352094081 2216:0.592969886809335 3237:0.557734584039951 4332:0.166543019161092 5478:0.152800255213767 6263:0.164026448205325
+0 6:0.0253841413120028 31:0.0322502516059167 48:0.0517636713813121 58:0.0567595997809172 63:0.0182892584428617 75:0.0171484244442445 83:0.0219239715974074 118:0.221625098509932 142:0.00658247754106159 171:0.0731606641168595 174:0.124047945296699 254:0.081660313321271 256:0.0575822614071696 355:0.0509249618619396 414:0.0625187110114226 582:0.0713676236046872 586:0.0621994571274678 842:0.490147431467909 884:0.174711443042623 1725:0.122067821994317 1943:0.101549845224334 2254:0.545493995623995 4226:0.50314216110586 4604:0.141128105530826 4692:0.171292890810147
+0 6:0.01642637276635 15:0.0562782365654234 29:0.119314767013404 31:0.062608537532472 37:0.07772098503712 102:0.469558959093373 159:0.0988203400229513 179:0.2686300958951 213:0.169586706993003 220:0.131775090034011 252:0.118547697206268 278:0.141810555718182 325:0.147502736876814 448:0.148758276937506 457:0.113268057734389 527:0.156671152244659 574:0.122993471673946 613:0.151922451226051 871:0.377354401341942 1123:0.186566468399739 1448:0.206186677692508 1649:0.186566468399739 1868:0.25852005649868 2134:0.223783613098043 4195:0.314262152203602
+0 6:0.00869644320567049 11:0.117236772380144 17:0.0947757975698586 28:0.128437681208649 33:0.0481232868924867 41:0.0400439450938765 63:0.018797346189564 75:0.0176248190647586 83:0.0450660681792141 88:0.0664052734712139 96:0.107762319051245 107:0.166374048806314 142:0.00451022875935347 159:0.0523174219164881 169:0.0633903596869833 176:0.135232434113646 237:0.298932487391144 298:0.0862115045810749 351:0.0617157839501242 475:0.211404720852842 909:0.0765672464680885 1036:0.0983085956751206 1274:0.121108489457116 1746:0.203164828248904 1892:0.115467909159341 2216:0.118475424206467 5076:0.161588238607889 5478:0.763237537774339 6770:0.180401978790165
+0 6:0.0264384981103107 11:0.0297014548719019 15:0.0226451705475508 26:0.0572165542596512 28:0.0488087386937884 29:0.0480097354279902 31:0.0755770487854962 37:0.0625465568468275 41:0.0304349071699656 59:0.0410422539402106 63:0.0285733828162985 65:0.04728653661304 67:0.0373881224213616 75:0.0133955266112228 92:0.0872665710183408 100:0.0408436539884215 120:0.0550675464314401 142:0.0102838314220361 158:0.0474408831214387 176:0.034260581876307 190:0.113341204145342 203:0.0501077858632068 204:0.198394104882902 209:0.0415205024819692 232:0.176002601556564 252:0.0477010827824107 274:0.0714311113038899 296:0.119205639578838 309:0.0486423558270412 331:0.0516694735152246 355:0.0795602749413018 377:0.050871824934653 404:0.0555055296453188 430:0.205770291609606 466:0.0610755037176016 485:0.0457405800017387 505:0.0475445154335504 507:0.0353413206284208 530:0.0543350845012123 534:0.0503791466157876 609:0.0468062625530939 613:0.0611303769978033 661:0.088243606717584 678:0.0715283533881861 719:0.0711424748887585 749:0.0769417044047128 834:0.0666059592667669 863:0.0698531073167449 991:0.0702122399487114 1118:0.0851012191759812 1123:0.0750703958261908 1238:0.105232484305036 1245:0.0646358188072989 1272:0.250569645566508 1338:0.167046430377672 1558:0.079628135096328 1560:0.100814250378726 1819:0.0917472465890514 1820:0.0842950595564091 2123:0.107924170932138 2146:0.101822043264222 2196:0.102347749790726 2344:0.328309040636081 2703:0.102347749790726 2913:0.0972643039940849 2992:0.101311147359424 3209:0.121235146172263 3787:0.121235146172263 3880:0.119783523221097 4839:0.53522315933362 5760:0.131010173951846 5880:0.141159144985101 6466:0.141159144985101 7130:0.146376433494547
+0 6:0.0070545768221264 17:0.0384411838853215 26:0.0610683066546295 28:0.0260472433244717 29:0.0384312715541095 31:0.0134441347467956 33:0.0195188662932285 59:0.0219025855528095 60:0.0267724862870984 63:0.0152484549844375 67:0.0199525238352098 75:0.00714864900096999 83:0.0182788544996276 88:0.0538681265452906 94:0.0423499534085141 97:0.0440194875437926 102:0.0336099737959979 132:0.0213930870423687 134:0.0505245683604773 142:0.00640274079902958 148:0.0310060127476004 150:0.0307609810106475 153:0.030593076783412 176:0.0914174117639843 192:0.028485897384032 198:0.0307127104036371 204:0.0211749767042571 226:0.0820506499780373 240:0.0317538382932068 242:0.0247159482285002 275:0.0237195934201631 306:0.0276789104410492 307:0.0338733434254533 322:0.0305693264975227 345:0.0258850756262389 404:0.059242097838078 457:0.0243224181669976 473:0.0310557724286415 485:0.0244098915274649 493:0.0314893891459808 498:0.0362438426900479 550:0.0287377976422344 574:0.0264107879105644 609:0.0249786030628303 643:0.0286986144444098 730:0.033906774327927 755:0.0368146070416338 757:0.0335130290457576 834:0.0355448977849149 876:0.0340416648270522 882:0.105953104831798 886:0.0303813936674444 952:0.0328603163707142 963:0.0299269328730816 997:0.0335452361857726 1011:0.0423329969451065 1025:0.0429950147229173 1038:0.140501791891841 1056:0.103910693011112 1057:0.048053782554088 1154:0.0479103986479737 1179:0.0439862113812401 1232:0.0798726619257393 1359:0.0391568567927947 1462:0.0433438177567989 1538:0.0448802222329638 1863:0.0424943046231989 2146:0.0543382928482765 2241:0.0492844204328111 2284:0.0523460079542496 2402:0.243247772048892 3564:0.0602508155143309 3929:0.122654567063382 5123:0.878055261081223 5124:0.0731712717567686 5743:0.0655403948402807
+0 6:0.025441811293251 26:0.220238346406887 27:0.111120679081023 31:0.0484852809535236 37:0.0601886570750022 63:0.0549924288882797 64:0.220663352608838 88:0.0971357137955974 94:0.0763659926076629 97:0.0793765185037147 134:0.182213131462188 137:0.104139893055139 142:0.0593768898640302 174:0.0932473264536381 176:0.0659380313705524 192:0.102732289127586 198:0.110763126137178 199:0.0594623080350994 204:0.229097977822989 226:0.0986365403087161 255:0.118400079680656 265:0.120173354817497 317:0.0758193527847035 323:0.108821177996524 457:0.0877170082349138 808:0.132769166571513 856:0.0954719451581152 862:0.12240326622833 991:0.135130713688682 1281:0.164588515927402 1607:0.329177031854804 2161:0.168903118538317 4268:0.657531836671034
+0 6:0.010200042920367 15:0.0349462682124096 26:0.0441485977583841 28:0.0753221650471085 37:0.0482612561195383 42:0.183076974406001 74:0.167236443264025 75:0.020672119241464 96:0.126394234231791 102:0.194383410325245 134:0.0730522579601803 142:0.00529003936874813 158:0.0732112757691144 176:0.158613883810047 194:0.161628853104394 329:0.136945289815002 351:0.0723863343056043 404:0.0856567241206734 535:0.0967260195586122 561:0.0903886733585956 609:0.0722319225534731 871:0.234320208400608 993:0.112089426965832 1274:0.142047933996501 1620:0.123357353891052 1829:0.167692216843665 1868:0.160529394381215 2596:0.14113024328794 3691:0.312688881816552 4202:0.634779489635139 4355:0.192194012118439 7555:0.206490519030214
+0 6:0.0215803181552368 15:0.0246453729737476 26:0.0622703775642034 27:0.0418911405420879 29:0.0261251694596252 31:0.0274175392300165 63:0.0155486061619772 67:0.162762160687237 92:0.047487325970253 97:0.0448859688387466 134:0.154557287753294 142:0.0111921815939971 153:0.0623905441795745 172:0.0564116326136326 174:0.0527296569362456 176:0.074573500505654 186:0.0408201793035803 192:0.0580932297792592 284:0.0873693824028182 308:0.0531502585688749 405:0.0684110838239555 561:0.0637453634243492 593:0.13857091920316 808:0.0750785343803711 987:0.058727420460012 1482:0.0852225318867041 2335:0.106299022284112 4900:0.631327409902092 7226:0.142582039451586 8699:0.637222279331474 8721:0.159305569832868
+0 6:0.0308382602955863 15:0.0528273323900328 26:0.0667382461028505 27:0.134690426959967 63:0.0666568436026862 64:0.26746813845181 94:0.0925639425047791 97:0.0962130294404123 137:0.126228950139285 142:0.0679728852397129 174:0.113025967054775 179:0.336210756457511 185:0.0897893232219493 192:0.124522780094604 198:0.134257033652209 204:0.370255770019116 226:0.119558284181723 265:0.145663260910943 286:0.0863972742465507 317:0.0919013552009881 337:0.117881807276669 457:0.106322615992986 546:0.133217490361277 626:0.145525676128263 719:0.16596329712361 723:0.158249767352542 808:0.160930763567392 834:0.155380377549112 862:0.148366157639904 991:0.163793217182039 1241:0.1922805960149 1607:0.199499298117186 2161:0.204729068783031 4438:0.286502196647829 7708:0.294992028628463
+0 6:0.0259229620868932 26:0.112201726484393 75:0.0525372851404557 81:0.157833917318001 142:0.0134444032309323 308:0.191537325058644 507:0.138608738049913 582:0.218647561664162 1782:0.319200577480715 3787:0.47548451272985 3880:0.469791244289178 6466:0.553626480354417
+0 6:0.0223592925203947 28:0.165112081851627 204:0.134227044422579 1227:0.244322302328424 3393:0.427768168247317 3787:0.410118923655696 3880:0.40520831760553 3929:0.388750369168975 6466:0.477518594510451
+0 4:0.0141015884975091 6:0.0456413812144979 11:0.278346187839674 15:0.0111693924228625 26:0.183437874788476 27:0.0189852508320435 31:0.0248515009495281 37:0.0462752336080319 41:0.105080946321268 60:0.0742334647319309 63:0.0493268812874764 67:0.184411334152383 79:0.0221084173245629 80:0.0424536508243836 85:0.019978811525307 88:0.0995753035210143 94:0.0195709862919034 102:0.0310640406183053 111:0.0203879040524277 142:0.0135262570029627 144:0.0193819689853282 151:0.0257463865564841 153:0.0282756715493781 159:0.0392252218419787 162:0.0176567085249619 168:0.0242126540169247 174:0.023897314569806 176:0.0844926035793247 180:0.0251226137135867 186:0.0369997728903486 190:0.0279519287373178 199:0.137150369965961 228:0.0246560679195901 232:0.05787377107191 255:0.0303434324267248 274:0.0352323296342144 283:0.0244387669508305 286:0.0182671548356939 294:0.0311545484729108 296:0.205787409565976 327:0.0548342376663792 337:0.0249239949363368 345:0.0478485967018002 363:0.0304548994971356 364:0.0302060239390697 398:0.0507148143153368 422:0.0297281295911578 423:0.0247001688305261 430:0.0253732813706178 436:0.259164131812539 459:0.0297799854850747 480:0.0239785113450203 485:0.0225608584671936 493:0.0291040888461759 506:0.0182384845654788 538:0.028566050396199 543:0.0360848903104449 557:0.030682089274788 594:0.0312153998412496 597:0.029152440945796 607:0.0639597210147499 609:0.0230864904817236 633:0.0339013970284337 656:0.0321816386113857 662:0.067968445548693 712:0.119749526510881 717:0.0660752022388621 726:0.0300438723693397 730:0.0313383587071958 747:0.0359284119765095 776:0.040654285102564 789:0.0334983956941132 796:0.0286573278887185 800:0.0287495464028994 1009:0.203391976937354 1179:0.040654285102564 1239:0.043646546237123 1242:0.0413849046176846 1265:0.0837476609874201 1267:0.0437699291125803 1509:0.0823931588330825 1561:0.0868095432194662 1627:0.0435248420923921 1720:0.0423910332999322 1815:0.127173099899797 1863:0.0392753892899158 1912:0.0494865738967574 2090:0.0525435611939712 2227:0.0863387204338689 2643:0.047396861801893 2651:0.0572240768765575 2659:0.0507485384149343 2866:0.0446848253487348 2951:0.0532319866843976 2989:0.0502222032785167 3118:0.0481751887188953 3472:0.103808704851003 3887:0.680181390750963 5239:0.0572240768765575 5376:0.0605757534895988 8232:0.0659977089579484
+0 6:0.035567496927282 15:0.121857456578244 26:0.0769729660636875 27:0.103564020821641 29:0.129174214827939 63:0.0384395399950655 67:0.100595875286881 142:0.0184463399283794 176:0.184361930927872 192:0.143619113268375 204:0.106759191635951 284:0.215996137160518 345:0.130506389116223 355:0.214063584300569 377:0.136874906395902 404:0.298684554148275 546:0.153647210759263 553:0.227336206916362 608:0.388106035850828 712:0.163307592913425 772:0.164773029328898 1080:0.179812574527635 1155:0.207018100920583 4785:0.547921473575299
+0 6:0.0357291186666192 11:0.0401386947647968 28:0.13192074750103 29:0.0973208951073524 31:0.034045067326483 42:0.05344077956947 60:0.0677969326630598 63:0.0579213188145583 75:0.0362055634096388 142:0.0138976212526286 161:0.174339236849189 179:0.0486916005447602 192:0.0721358653836614 264:0.0735310374226199 276:0.0693895010289107 304:0.0676351594834362 375:0.31660867087512 475:0.0723792491884266 505:0.0642518961093993 804:0.0841441805754229 1225:0.0796757439987912 1340:0.11992436082952 1353:0.256751800693088 1393:0.10226482100524 1502:0.639499956312589 1577:0.136240882520593 1877:0.144888022020194 1894:0.139799082738197 1918:0.258712745998642 2722:0.12319702133892 2733:0.116146351535582 3105:0.139799082738197 3360:0.250447350406935 3467:0.129356372999321 4346:0.165970305785091
+0 6:0.040125495724 26:0.115782804994373 27:0.03894527338762 28:0.148153259506648 29:0.145727977859296 31:0.0254894841035896 37:0.0316421352533832 41:0.0307938757189976 59:0.0415263322475189 63:0.0433655930541861 67:0.0756582031796865 83:0.0173279493241889 88:0.204263164737114 96:0.0414347219320613 106:0.0468112804052324 132:0.0405603456349719 134:0.0957923441203285 140:0.0472576417999661 142:0.0156076881534477 153:0.116006237521019 174:0.098043208107656 176:0.0693293457060827 179:0.0364553186563551 192:0.0540079999361676 199:0.0312602819993202 204:0.160587272371898 232:0.0593594958609631 289:0.0581843499430746 299:0.0553622665635531 309:0.0492160745440138 322:0.0579580892702496 345:0.0490769570613305 355:0.160997318311485 373:0.0954817723135583 377:0.0514718394206977 436:0.0590705212576507 469:0.077324896213358 475:0.0541902209775638 505:0.0481052855264014 506:0.0374133991624488 538:0.0585987855586711 557:0.0629395084363688 580:0.0605114120322558 598:0.0706769990552292 657:0.0694590491918255 719:0.0719815742440727 757:0.444774532574515 808:0.139597729216644 810:0.0984115007271777 858:0.0670931795279276 936:0.0782525056679298 975:0.0828640017983568 1015:0.167153387266641 1122:0.326719006735073 1126:0.0713176953436506 1140:0.0679256711121521 1227:0.0730759070933248 1312:0.0869585761944795 1392:0.106473662797583 1822:0.095065989849032 1838:0.1025060751233 1979:0.0988238665770428 2280:0.0908359941144771 2306:0.188147765871772 2344:0.221454216771801 2571:0.0890381018203439 2722:0.0922374007051906 2900:0.111542776362022 3090:0.122665070182548 3482:0.102003317425263 4238:0.121196325871964 4787:0.119836481038707 4839:0.270767959935056 5880:0.142824065241796
+0 6:0.01816715541077 27:0.0176327998291777 29:0.0659795666993734 31:0.0461623125840453 64:0.0525227989744809 80:0.078858766062833 142:0.00157033599582934 158:0.0434651969964582 159:0.0364309374215549 208:0.0453690843781685 229:0.0317129882663727 245:0.0700189932252731 286:0.0339317175754919 308:0.0447439653390396 322:0.0524820240141793 355:0.0364464444576636 367:0.0516868585125118 381:0.0582118204228618 478:0.047489517499001 502:0.0417999774103964 513:0.0453160834146184 530:0.0995632878763649 538:0.0530621852723937 643:0.0492703485818454 658:0.056007470853268 671:0.0369824841044776 684:0.0566752740039481 733:0.0683504566030429 890:0.0635968716292588 1046:0.136071905607635 1378:0.0742617797189028 1380:0.0623711889164474 1811:0.390404153220543 2213:0.336234225376267 2393:0.0947780319309789 2736:0.0791428521824455 2804:0.0791428521824455 2866:0.0830032310604134 3284:0.473890159654894 4053:0.120031134428523 4602:0.111075282847981 6234:0.342314097541999 6781:0.129329591713616 7099:0.463421388683082
+0 6:0.0356869888751535 15:0.0407556155943285 26:0.0514877087399677 28:0.0878434625904467 29:0.172810915049629 63:0.0257124538727884 80:0.154907680567553 114:0.0835289603443632 142:0.00616943731104894 176:0.0616604366947371 204:0.07141190531385 220:0.0954289836016962 252:0.171699920672351 275:0.0799935406334197 296:0.107270095695451 373:0.0849199962480668 398:0.0925257793316884 457:0.0820265470609138 561:0.105414575401676 608:0.12980330339341 655:0.090073877148638 772:0.110217731966688 795:0.14093098746161 834:0.119873986661648 876:0.114804383462039 1008:0.309358395230535 1236:0.13109795877814 1536:0.195568793963937 2435:0.175051301835374 3024:0.199927196057231 3136:0.194236383188668 3996:0.263440791626883 4532:0.462853968691075 4887:0.388472766377336 5618:0.218192793184919
+0 6:0.0161708943763479 17:0.0881170252993188 37:0.038256097610168 41:0.0372305315639341 94:0.145615387147895 111:0.0505645192914404 174:0.0592682906723159 176:0.167641671166765 179:0.220376756776897 215:0.0515096853379154 218:0.0458637357445216 265:0.076382558034326 327:0.0679978398265736 353:0.0907017154245734 365:0.0856687538194023 408:0.0476105910470921 423:0.0612594683652266 457:0.0557532032144388 495:0.0891068976892066 577:0.11801713898665 593:0.0778770619349269 641:0.0639778110988217 908:0.086000705055782 1213:0.102876948060156 1654:0.114130237371749 1720:0.21026999298864 1797:0.562311276429131 1851:0.109499013137008 1856:0.125862641058917 1917:0.100611205853166 2951:0.264043798784153 3300:0.132927535084184 7189:0.167727269373629 7951:0.518033122975191
+0 6:0.00930956515425675 15:0.0318954109665503 28:0.137492873028127 29:0.0676210514138394 31:0.03548307758882 57:0.139006097472072 159:0.0560059367393677 172:0.073006491215307 186:0.052828431365305 237:0.160004004066702 255:0.0866489609054407 365:0.0986388046083853 404:0.0781787743764622 423:0.0705340099055185 499:0.208025666679628 535:0.0882817051087871 608:0.304752828255016 645:0.11845227957681 884:0.0961124236314295 993:0.102303865933553 1316:0.387674201286647 2935:0.444655516313149 5108:0.193120789245056 5793:0.188463612913787 5796:0.188463612913787 7247:0.184526026431066 7451:0.184526026431066 9664:0.433052581907198
+0 6:0.0203275281623863 15:0.0464292981774041 17:0.0369223303644743 26:0.14663857646969 27:0.0197296289377721 63:0.0146459717308082 67:0.153313421115517 80:0.0441181833850268 134:0.145584861025079 140:0.047881329675496 142:0.0175707470200348 153:0.176305863716261 192:0.109441552797062 205:0.107230577489996 226:0.0525391589420799 276:0.0526374411676314 331:0.0529688523976982 345:0.0497246555482042 363:0.0632979644810888 457:0.0467228252648945 574:0.0507345371739331 613:0.0626676777586711 761:0.0689007394181139 808:0.141440085454656 824:0.151562354655815 844:0.0742492317903387 848:0.0748903876610951 858:0.0679786490733495 975:0.0839576084886416 987:0.055318150766721 1005:0.142856765578096 1216:0.0725442182823105 1309:0.0799869076499913 1392:0.107878860560755 1645:0.0774507823977272 1689:0.217062534137784 1817:0.48160316802902 1853:0.0997102972281976 3719:0.113014874303651 4033:0.589041750032445 5038:0.127673619430842 5563:0.140560388413206 5564:0.140560388413206 5782:0.137170724790813
+0 6:0.0259376406929523 15:0.0444323497229169 28:0.191536375725059 29:0.0471002271800484 31:0.0494301990441593 176:0.0672230819565781 317:0.231890934269705 322:0.112394581122344 455:0.284074294758609 477:0.138665154877395 571:0.102354458122424 2657:0.209020669904952 2786:0.221524840351377 6831:0.248113777253034 7260:0.787625640046943
+0 6:0.0155352352993529 15:0.053225119124748 28:0.114719866023997 31:0.0592119986652075 159:0.0934592960025544 174:0.113877046000818 220:0.249252474589574 339:0.241669549347922 374:0.200508726270782 404:0.130459976940816 473:0.136778929267277 561:0.1376670000298 1001:0.182097269154594 2335:0.229567559393108 3710:0.4917858630293 8855:0.6445364208546
+0 6:0.0320118785168872 15:0.0548377933979301 28:0.236391554029873 29:0.0581304509710162 31:0.122012140240429 64:0.138823615100019 159:0.0962910304304243 174:0.234654840573417 176:0.0829658008837113 179:0.0872515001545743 185:0.0932064545646872 192:0.129261769982014 242:0.224309395749677 245:0.185068007703072 351:0.113588862231494 408:0.0942498554035402 499:0.11921953853913 781:0.173450597127028 896:0.202720606148509 987:0.130672891556966 1124:0.177946068601913 1655:0.301591445038117 1711:0.232701942666309 2457:0.263143151246355 2723:0.208651046026847 3382:0.283784479542159 5932:0.30621860291049 9930:0.354466776986494
+0 6:0.0279302145852025 26:0.0805931124443469 27:0.0542173908717591 28:0.0687501758313542 29:0.067624729518183 64:0.161497274923188 75:0.0377368821453422 88:0.0710908852341954 142:0.0144854228444744 159:0.0560089830640681 162:0.0504233879275821 185:0.0542147977006792 232:0.0826369083871279 341:0.07778871686996 430:0.0724600968372792 437:0.083741735267517 500:0.0963477894145546 550:0.0758517366424441 882:0.0699142563410954 930:0.0815131376018151 960:0.107290034750876 1017:0.109707013090372 1055:0.101589801547259 1243:0.123953772793584 1377:0.0887974268319772 1625:0.125716205337777 1740:0.133309537046977 1838:0.14270311794644 2444:0.131876723782626 2976:0.251432410675553 3071:0.156471858884796 3523:0.439568780965344 4857:0.168722620242541 6732:0.206180405591947 9643:0.433076136888217 9721:0.46848922008378
+0 6:0.0288838710357327 41:0.0443332259905719 42:0.0576029353736701 68:0.0591057495996511 81:0.117241090417483 179:0.104967747177952 187:0.0897764828935532 325:0.0864554841162742 327:0.161940400701797 337:0.0736073281739938 377:0.0741028089484832 408:0.0566935524090163 473:0.0847686968201508 478:0.0755033503031049 499:0.0717134167199264 580:0.0871168711959045 663:0.0901077393918471 685:0.203504060355603 710:0.110953373369549 772:0.0892065947932421 781:0.104334701379573 847:0.102674425708819 862:0.0926422550485989 882:0.072301426741821 946:0.136864292447425 1294:0.109351830934727 1309:0.113655310505702 1359:0.106881119428775 1726:0.130008691877428 2135:0.134524945506518 2320:0.158286927575473 2343:0.174483528904872 2365:0.133214725277639 2478:0.160585538410244 3316:0.148319810198378 5212:0.411240963562793 5448:0.199725618345076 6491:0.599176855035228
+0 6:0.0177619507706619 29:0.0322539712213041 75:0.0539964145972816 142:0.0115148313071003 179:0.0484119308897915 180:0.136875191458289 204:0.106628335979353 205:0.0702725962278297 229:0.0930169622555149 303:0.238048421723263 317:0.0529325367641018 387:0.0626906203657249 405:0.0844598972759251 437:0.319528496582223 507:0.0474861162349748 560:0.105793125227073 582:0.0749067026635754 717:0.0899991543495159 1037:0.0993250283769188 1324:0.10598885140489 1424:0.0825845277009051 1776:0.102858120092369 2833:0.268351091521264 4871:0.150449063739915 5954:0.679627688464171 8903:0.393355325233285
+0 6:0.0290139351665723 15:0.0497021810665094 26:0.188370465162329 27:0.0844816207295095 63:0.0627135681507134 64:0.251645298852195 94:0.0870880588221888 97:0.0905212736259047 134:0.207796525247574 142:0.0564280196435502 144:0.172493918283761 174:0.106339594024885 176:0.0751959734763113 186:0.0823218193968935 192:0.117156280341252 198:0.126314676402126 204:0.261264176466566 226:0.112485473325213 265:0.137046135797307 286:0.0812861973902194 317:0.0864646687577001 337:0.110908173186837 351:0.102951155543425 808:0.151410445845402 834:0.146188408722028 862:0.139589134971201 965:0.144904282021311 991:0.154103562862921 1046:0.162985674890717 1607:0.187697348873378 1610:0.602165661571285 2736:0.189593158383877 2804:0.189593158383877
+0 6:0.0113377941339566 17:0.123561835145194 29:0.0411766579506265 78:0.0871025726199448 79:0.230662360746054 96:0.07024636163921 139:0.0927530848247882 146:0.305427562498221 216:0.0986428458370067 271:0.125130222355737 274:0.245058166721627 278:0.195760672136747 387:0.0800332527675537 403:0.131312625023069 411:0.0849420826368067 473:0.0998228422043916 479:0.143596977478858 489:0.258362097796552 508:0.0879667626651376 626:0.107006046471644 639:0.130442390905371 712:0.104114600628203 767:0.108453230245261 828:0.172101720243571 900:0.165489180124292 914:0.145278946073214 951:0.147797799772303 1048:0.153998815362758 1052:0.173783688837927 1255:0.178435447787061 1347:0.17129365296497 1627:0.151368333016105 1738:0.153097046684748 2497:0.229523249427088 2751:0.193664725731508 2866:0.155402459813543 3622:0.213632056275661 3702:0.213632056275661 5516:0.193664725731508
+0 4:0.0308909563290456 6:0.0142831519010725 26:0.0618214190788579 27:0.0415891127763532 29:0.02593681157633 31:0.0272198635876628 33:0.03951915745371 63:0.0308730068848748 75:0.0289472330212792 80:0.139498526055015 83:0.0185042747409679 88:0.0545324442182957 96:0.0442475600604493 142:0.0129634025855244 179:0.0389301249424276 185:0.0831742472098628 204:0.0428722255628384 218:0.0405097386170421 312:0.0647299981621627 388:0.0742644401575017 405:0.0679178519250034 413:0.0617490778545859 437:0.0642366667987777 480:0.0525273551221115 507:0.0381856373848544 565:0.075961236609628 737:0.0841541296327658 794:0.0834201418386272 922:0.406078564007088 1248:0.0919502791259513 1509:0.0902452752671957 1665:0.153943042654401 1731:0.0886768237592408 2223:0.090657820674063 3070:0.111772784154668 5784:0.136629495766624 8157:0.566216191958464 8218:0.144574658776716 8233:0.144574658776716 9060:0.539053540624703
+0 6:0.0235713348477782 7:0.0243942427313339 15:0.0269191739729572 17:0.0214071431958883 26:0.0340077451617003 27:0.0228780246373077 28:0.0290104003752094 29:0.0142677488083821 30:0.0236139281055282 37:0.0185878666892101 41:0.0180895648199858 63:0.00849156624160461 64:0.170366859007009 77:0.0296236031085062 81:0.0478386189429098 85:0.048150614004914 94:0.0235838604674565 97:0.0245135913626067 132:0.023826783227296 140:0.0277610451630407 142:0.0132435125828916 144:0.0233560866742651 176:0.061090281612571 178:0.0634103920308039 198:0.0342066150462946 204:0.0235838604674565 226:0.0304616010896975 232:0.104610487279078 274:0.0424564369747935 299:0.0325220286891294 306:0.0308276873618328 308:0.0290269710798709 322:0.034046919662337 347:0.0322726555194398 351:0.0278796624949106 365:0.0832494412604473 387:0.0277315936658681 389:0.0334808151003233 398:0.0305567406416476 426:0.0707323650998502 431:0.0438056006894866 473:0.0345887041055831 493:0.0350716494377511 502:0.0271171034180154 518:0.0342603769595336 534:0.0299438021345832 541:0.0405103804065602 543:0.0434838083973865 561:0.0348132797547294 574:0.0294153021095468 582:0.132541820706052 603:0.0420603047931509 609:0.0278201906681361 663:0.0367672272001556 676:0.0392836285116164 692:0.0548910589579636 713:0.0392836285116164 829:0.0291436848091717 1215:0.0460488219564519 1471:0.0454999420167831 1472:0.0399478575828281 1557:0.0578108854397334 1608:0.0425723439115625 1963:0.0562524094927897 2123:0.0641467797098046 2154:0.0536825195521621 2252:0.130091140378321 2292:0.0689574160600202 2403:0.0590804971973447 2986:0.0696530923498907 3929:0.0683039286351976 4297:0.427173665207551 4825:0.0751594049899767 5119:0.22547821496993 5228:0.0778683838443989 7414:0.755105556916402
+0 6:0.0253016484856781 15:0.0216714331767929 26:0.164268764897222 28:0.0934199472532019 31:0.0241090840835853 60:0.0480105365781261 63:0.0273447336171777 67:0.107341324053033 88:0.0483002891880106 111:0.0395576664835112 140:0.0446983726746704 142:0.0213235293367081 153:0.0548619211602782 158:0.0908018710881817 174:0.0463668063756349 232:0.168434528261361 252:0.0456499466766649 274:0.0683595891722585 320:0.0600406453167499 328:0.064174033999411 345:0.0464191617040807 355:0.0380696002774015 386:0.151132222175567 387:0.0446509524861034 586:0.0464979920207619 593:0.0609248319949731 613:0.117003568367767 667:0.0609248319949731 909:0.0556916635294259 933:0.0735079149549054 1026:0.0875199210985577 1050:0.0746697017702802 1122:0.0772563302288654 1446:0.0660188605207522 1731:0.392712658788966 2073:0.091603980203097 2211:0.0974437177186001 4155:0.793426595113159
+0 6:0.00979701101061979 12:0.0660437700939426 15:0.0167827222458751 26:0.042404164543138 27:0.0142632732121699 29:0.0355808340279005 39:0.0491985670805368 41:0.0225558289587608 63:0.0105881107502381 75:0.0198553066298451 80:0.0318946547464218 86:0.0380535390164427 102:0.0466756960266233 108:0.0453455562950477 110:0.0945504099081971 142:0.00762152292105836 199:0.0457949223679108 205:0.0387604609357461 259:0.178772124309543 262:0.0458449551588086 284:0.0297478978959266 316:0.0667344687930445 322:0.0424530111209689 350:0.0714997688554055 351:0.0347630750060065 437:0.044060816287047 587:0.124082440802014 647:0.132743262066187 717:0.0496410961551055 784:0.0481018318187438 965:0.0489292072343335 1069:0.0779895895076771 1149:0.0469951821906516 1274:0.0682176136053669 1754:0.0693870992828331 4909:0.091018920919066 5898:0.0991657537287502 8768:0.797522384229611 9857:0.455727076702635
+0 6:0.0172136567397609 15:0.117951085116099 60:0.261306893743434 63:0.037207287769628 75:0.0348863987616599 142:0.004463751895182 176:0.0892259301057996 179:0.0938350039594043 180:0.265299976604343 255:0.160216448906985 345:0.126322759748053 475:0.139484162734215 717:0.174441937132292 2889:0.780202068145089 6998:0.357085956249641
+0 6:0.0161579285366898 15:0.0276792611956868 26:0.069935969205644 27:0.0235240063537444 28:0.0596590705334082 37:0.038225423831958 63:0.0349253331767118 84:0.0948301248848577 86:0.0627606076311759 103:0.0769066211837421 107:0.0772804446425664 142:0.00837997239264876 159:0.0972053912798812 203:0.0612468998602992 232:0.0717095059978314 252:0.174915537979142 289:0.0702898656854451 296:0.0728527088584546 345:0.0592876387459214 442:0.0687494881407358 571:0.0637620067041456 613:0.0747198467046211 639:0.0929492459248079 643:0.0657318182205316 714:0.0836073434709593 757:0.0767588392645984 1118:0.104019480387536 1238:0.643129936520864 1433:0.0778919925515 1972:0.117455817469994 2123:0.131916044098051 2196:0.125099967487535 2902:0.115681494298587 3136:0.131916044098051 3209:0.592744359324291
+0 6:0.0504777152834248 15:0.0345882422420382 26:0.0873925870786422 27:0.0587916002897756 28:0.149100972670898 29:0.146660176877236 30:0.0606827138470591 31:0.0769576090066528 63:0.0218214979756802 64:0.0875612334207481 67:0.0571066326292207 68:0.123952493606426 75:0.0204603325206024 88:0.0770886765617521 94:0.121210892974693 97:0.125989309645823 102:0.0961959721034761 134:0.0723038345409745 142:0.0130896067388395 144:0.060020116852551 148:0.177486216169758 153:0.0875612334207481 174:0.074002781349391 176:0.052329625992552 192:0.0815302209614669 198:0.0879036398880563 199:0.0471903736804661 215:0.0643153352019683 226:0.078279759893765 232:0.0896088138687887 256:0.0687032339040548 275:0.067888459562664 284:0.0613087366603247 308:0.074593069480647 317:0.0601716231399774 322:0.0874932571154788 325:0.0906542334269476 341:0.084351590435079 351:0.0716447333019187 373:0.0720694156765443 387:0.0712642282736022 389:0.258115470626454 394:0.0940503582685036 426:0.181766957699642 436:0.0891725791759996 475:0.0818053009826937 506:0.056479090213287 546:0.0872230078451137 586:0.0742121574822621 772:0.0935389530262017 808:0.105368035496628 824:0.112908780519976 885:0.14153173119426 909:0.0888855265502535 912:0.096010684921014 1026:0.139684358079403 1124:0.336711673397875 1126:0.107660855182615 1227:0.110315043314325 1228:0.124310762129478 1243:0.134411496889017 1283:0.125091104731823 1446:0.105368035496628 1453:0.142013488215283 1464:0.129055045394951 1625:0.136322622231086 1787:0.145094475067483 1951:0.125894069083482 3090:0.185174609096007 3473:0.171024570491775 3929:0.175526398550748 4537:0.167153118497196 4649:0.182957399639641 5369:0.180904584318582
+0 6:0.0273059836676758 60:0.207255259027211 67:0.154459524280559 203:0.207007580641735 1118:0.351574055564435 1676:0.370891293972492 2123:0.445861279490931 2196:0.4228237129883 3209:0.500852190244055
+0 6:0.021515711562381 26:0.139688896802033 27:0.0313242959547381 31:0.164012743902986 63:0.0465061714528495 64:0.1866112829938 94:0.064581434520633 97:0.0671273855963613 134:0.154094578181964 142:0.0251070181493845 144:0.0639577046469421 176:0.11152536646134 179:0.0586431723999121 198:0.0936705113581017 226:0.0834152618432661 229:0.0563374529109777 308:0.0794867080694343 363:0.100496779690679 387:0.15187896001644 455:0.471288862442587 513:0.161006127460281 582:0.181474549660456 694:0.158307835893019 862:0.103514381900973 991:0.114277769983917 1613:0.123365788503949 2423:0.138848489805695 2491:0.662904134546404
+0 27:0.140277523361439 111:0.301282791816278 322:0.41752010009904 325:0.432604361326545 389:0.410577914557952 506:0.269519688451311 1124:0.535598956294597
+0 6:0.0364214688742504 15:0.0499132966363512 26:0.0630568632564511 29:0.105820539563531 37:0.0344654596321394 68:0.0447180687796959 75:0.0147628584192406 88:0.333733349639891 142:0.00566677039645692 158:0.0522833525797168 176:0.0755153767791365 199:0.0340495348594298 204:0.131186962630246 208:0.0545734978483129 252:0.0525701117992047 275:0.0489839407944499 284:0.0884728728887958 287:0.0676139287853091 291:0.0586304289934956 308:0.0538215555729855 312:0.0660235676165141 341:0.060862675901133 355:0.219203228966427 373:0.104001298993443 377:0.0560645035342974 389:0.0620798341512289 404:0.0611711879212192 442:0.0619870879303054 457:0.0502288496419713 475:0.0590254373986738 502:0.100560591360027 505:0.0523975630318897 530:0.0598812710369173 543:0.0806272967215634 558:0.0808638293607741 626:0.0687491295904055 655:0.0551566217776853 685:0.0769832768349066 737:0.0858358724821593 757:0.138417231825282 772:0.269966740534508 776:0.0908370533973516 795:0.0862989072775054 824:0.0814677053477541 834:0.0734046801645842 863:0.0769832768349066 936:0.0852347211594523 952:0.0678606822249186 997:0.0692751277036192 1015:0.0910339690270714 1086:0.0918416253673486 1106:0.0933386609418523 1154:0.0989409931797516 1269:0.0744126302761837 1294:0.165466227229903 1347:0.110052561831852 1359:0.0808638293607741 1375:0.0914337178472719 1411:0.0922580315692772 1416:0.0879247442496963 1730:0.102821545705619 1903:0.122425159048109 1917:0.0906420589263533 1992:0.0951992382585171 2194:0.333314220824159 2306:0.204935576490131 2406:0.118156501614252 2526:0.218106029641924 3170:0.112794769742197 3469:0.12060692660903 3677:0.129150153849142 4431:0.129150153849142 4517:0.130529098830509 4714:0.15556779008973 4835:0.137254093631542 5086:0.135349150536962 7088:0.15556779008973
+0 6:0.0242900348508204 15:0.124829779552781 29:0.0441083355740907 41:0.0559233699853505 60:0.092181946749389 80:0.0790774119275443 96:0.0752477312694112 176:0.0629529502252881 227:0.0863277360529421 252:0.087649529740478 255:0.113039988726979 278:0.104849177283532 309:0.0893790950858935 339:0.0944652858957279 404:0.101990002902037 513:0.0908834559309613 561:0.107624254286996 603:0.130028224009307 795:0.143885154151506 1431:0.425594749650843 2171:0.16804137760655 2401:0.164476669213706 2642:0.16858323856496 2941:0.174549790747361 3114:0.205743898781206 4679:0.451332096863349 9007:0.537925967819594
+0 60:0.188830759558213 355:0.149731955708542 795:0.294742559749201 1431:0.581208379547043 4679:0.462267209952757 9007:0.550959123078697
+0 6:0.0262959742400409 15:0.0300307941797698 29:0.0318339506482346 31:0.0334087245670598 60:0.0665297274377765 88:0.0669312468444307 102:0.0835209091848935 142:0.00227297636646281 158:0.0629135202905561 252:0.063258582936381 255:0.0815834326001051 275:0.117886554745481 355:0.0527542558496329 373:0.0625733384684148 377:0.0674634488158923 426:0.0789084055957972 448:0.0793793386197199 485:0.0606586707223573 655:0.0663709779910929 713:0.0876489422485269 761:0.0891309584906166 808:0.0914844346521915 950:0.0955123802220904 987:0.0715603321735912 994:0.10035336999337 1007:0.404719709669792 1373:0.101689850134096 1880:0.122471967047147 1911:0.118706410078433 1942:0.113690814147083 2650:0.152398526386727 3542:0.609594105546907 3767:0.14039756237374 4432:0.17373857093027 5211:0.149723499382419 8305:0.388232938039757 8715:0.194116469019879
+0 6:0.028650659512365 26:0.0930059646953653 27:0.0417119245748263 28:0.0528926623482583 29:0.0260134024498472 31:0.0273002432874985 37:0.033889975451941 67:0.0810329210707546 75:0.0290327136076837 80:0.0466368207820538 134:0.0512986902547089 142:0.00928691660566287 171:0.0619314216171508 174:0.105008144658719 176:0.0371272324902134 204:0.0859976527341953 211:0.0712354840977251 255:0.0666666443294312 291:0.0576514522230092 313:0.243670952744406 323:0.0612731240432544 345:0.0525633575846189 373:0.0511323729246169 404:0.06014978703731 409:0.0365799815563354 485:0.0991355695062594 597:0.0640499527059572 643:0.0582766515735231 713:0.0716231307326222 800:0.063164765202585 834:0.0721790115491612 1544:0.0938508015092107 1917:0.267385711786327 2756:0.118593102362185 3136:0.116954399664824 5580:0.133089169217442 5956:0.82219775922044 7828:0.166592663964285
+0 6:0.0231991958853524 15:0.0794825402256819 26:0.150618773193877 31:0.044211456386972 62:0.265605388906231 63:0.0250725098792188 67:0.196843490629395 92:0.0765744811543578 94:0.139269142520093 102:0.110527446997153 134:0.083075809362601 142:0.0180476681100668 174:0.0850278687806008 176:0.0601258019104067 185:0.0675472636223049 232:0.102958920303924 308:0.171412198517181 331:0.0906776347409274 337:0.0886808500906976 373:0.0828064662908809 423:0.0878844653463383 457:0.0799850306671622 465:0.197270806671134 469:0.134119869302595 574:0.0868526996973005 613:0.107281100809914 757:0.110208641162644 827:0.0990795107695989 829:0.0860507124957338 909:0.102127876144641 952:0.108062175175104 975:0.143727436250548 997:0.110314555347003 1005:0.1222785941453 1237:0.142246835198458 1359:0.128768544718594 1676:0.157554840099486 1931:0.151210635324228 2114:0.332185854201455 2946:0.179615762280695 5440:0.234823227551558 7501:0.513768299465535
+0 6:0.0271381613770662 26:0.0880960830183765 33:0.0750868771747741 37:0.160504441875528 41:0.0312403306280263 67:0.0383775544141337 72:0.0422217929822359 78:0.0521222127556128 81:0.0413081875500265 97:0.042334500949524 110:0.0654772225828621 111:0.084857896696917 135:0.0618130211316507 142:0.00175933012244318 144:0.0403355126086143 162:0.0367451000398539 176:0.10550174173496 178:0.0547542639087279 215:0.0432220420419923 262:0.0634962944348779 303:0.0606183086502749 342:0.0633792151659453 423:0.0514031351537484 437:0.0610252219532569 499:0.0505343520291615 504:0.0720703229972935 616:0.0935746744123608 661:0.0905788683458623 671:0.0414334247324066 712:0.186906650458665 721:0.0898390805729836 780:0.0688320878332949 789:0.0697129875148942 908:0.0721636341821306 912:0.0645223700864665 974:0.0871429739222348 984:0.0778017651687346 986:0.0606686890393416 991:0.0720703229972935 1019:0.0975083078045691 1042:0.231905967142263 1044:0.0990287886538862 1068:0.0799469321035879 1104:0.601539791998734 1117:0.0809692187174272 1128:0.306092648078643 1129:0.079113261050158 1241:0.169209994153842 1249:0.102502187420832 1769:0.207984451678332 1820:0.0865258276013454 1893:0.116895536566814 1910:0.0830309154350352 2154:0.0927086790889619 2238:0.104516641993724 2471:0.105056260715396 3451:0.124443489477641 3561:0.111540178749993 3728:0.116895536566814 4277:0.134477201689311 7052:0.144894753116116 7369:0.129798847294462
+0 6:0.00841407794366733 27:0.0244997770052373 34:0.0670559940938056 37:0.0398110060731466 57:0.0628175494448435 60:0.063863727632499 63:0.0181870141887387 75:0.0170525579074921 80:0.0547848952566962 142:0.00436378590964928 148:0.0739624826715023 172:0.0659839957399492 205:0.0665781714631774 229:0.0440634016278101 237:0.0723066082684063 312:0.0762637341676644 336:0.0769271906462215 405:0.0800196068516958 411:0.0630377739760662 437:0.0756824999173635 505:0.0605243545957364 583:0.132421681665301 586:0.061851737337695 644:0.0801740334918919 647:0.0760035996224317 695:0.0830584727710145 704:0.116049807961458 784:0.0826236822062085 1155:0.0979470914389636 1296:0.0856573079968933 1379:0.0888103859405883 2240:0.228573216339128 2682:0.123817840412595 2688:0.4349158996915 2866:0.115328289970677 2912:0.13738789282808 3184:0.133178690357352 4164:0.158542018979318 4909:0.156341621772469 6249:0.163693666453347 7015:0.327387332906695 8923:0.186337773863008 8977:0.372675547726016 9778:0.423402204969948
+0 6:0.025179105993277 11:0.0565732650359966 27:0.036657758946172 29:0.0457228021049772 64:0.218384842184709 67:0.213642883966229 88:0.0961327165428963 132:0.0763559345577924 142:0.00652930889674748 204:0.151154915818452 232:0.11174583723062 299:0.104220946259711 323:0.107697519783687 331:0.0984164187260915 426:0.226670792660539 437:0.226479680841285 440:0.28419474913667 609:0.0891533127983459 643:0.102430730173575 644:0.119960291592035 749:0.146553206042678 764:0.23287377904971 882:0.0945416190135305 969:0.140801843760233 1003:0.133051339433093 1296:0.128164633819193 1412:0.158026251013141 1791:0.176495827967992 1819:0.174753772836751 2166:0.237218286245662 2246:0.159450924647924 3170:0.194944873903338 3837:0.237218286245662 5697:0.446424253788763
+0 6:0.0100597627655999 12:0.0678150365015108 26:0.0870828531508294 27:0.0585832330370272 29:0.0730701943551699 33:0.055667453715291 64:0.174501803564252 75:0.0203878176841866 94:0.0603906506606652 132:0.0610126974009449 142:0.0208691439774354 176:0.052144161056206 179:0.054837731065029 186:0.0570855327835313 206:0.0959478179518178 308:0.148657398362802 337:0.0769085547768841 351:0.071390812398619 387:0.0710116559436874 415:0.0875235178836008 437:0.0904850180582439 455:0.0734510396661531 539:0.0934610557191071 546:0.173827749868866 780:0.102060631837652 965:0.100482936387989 1046:0.113021361230642 1607:0.260315023185639 2736:0.131472148426113 2804:0.131472148426113 4500:0.186920020939892 4530:0.165385962809665 5930:0.429684774020124 8118:0.626049431757518 8417:0.214842387010062
+0 6:0.00938972183110889 15:0.0643400699608118 29:0.0341016391304131 31:0.0715771838426482 60:0.142537932636621 63:0.0202958666789168 65:0.0671758922614193 80:0.122274818572123 158:0.0673951589948654 159:0.112976311602028 172:0.0736350874630896 176:0.0486710451173466 179:0.0511852071015588 205:0.074298160089379 337:0.0717859807049315 346:0.0782296998498936 365:0.0994880987112854 375:0.199693748501799 398:0.07303429268049 455:0.0685587569748018 505:0.0675423804564451 515:0.135678742952483 768:0.11734612479486 952:0.0874749082143347 963:0.079666174746341 1027:0.0981219929769291 1047:0.211635064028282 1844:0.122094467853326 1936:0.126426294656295 2024:0.0914463978753503 2076:0.117092293326167 2385:0.14777647218976 2801:0.155466751721866 3044:0.152308064032964 3496:0.159067534473966 3899:0.636270137895863 4601:0.163254621089108 6464:0.401065173913299
+0 6:0.0209452939473502 15:0.0717604686359027 28:0.103113611055651 29:0.0253564080853646 60:0.0529923206001418 63:0.0301821432095212 75:0.0282994635354311 83:0.0180901935565543 88:0.0533121392127237 96:0.0432574060374613 142:0.00543141977129532 179:0.0380589623342632 205:0.0552446895591562 312:0.0632814964142537 325:0.0626936578527031 327:0.0587159749199589 331:0.0545786076231589 346:0.05816800143253 351:0.0495472767986969 405:0.0663980136734847 442:0.0594126586036 480:0.102703838380553 496:0.0585456921102932 505:0.0502214030053233 507:0.0373311346184799 782:0.079549131857368 829:0.0517936764276686 903:0.0777348409937613 1124:0.0776197854529997 1164:0.0740698382492418 1175:0.0739747676325209 1308:0.0815533996063571 1471:0.0808617472267374 1472:0.0709946742552077 2223:0.0886291165888408 4189:0.10868209482277 4512:0.229565228427292 6782:0.894640768997853
+0 15:0.0354237037070739 28:0.0763512155571623 63:0.0223485852020405 75:0.0209545414851159 81:0.0629521940343211 83:0.0267900280780937 108:0.095711978491631 142:0.00268115591138779 144:0.0614698723621358 159:0.0622013527580222 179:0.0563620652465937 229:0.0541460338322383 258:0.0980474892707483 351:0.0733752755314907 365:0.109550298384047 574:0.0774168588850042 745:0.140437785643299 993:0.113620791364594 1141:0.412974415464854 1335:0.11113882321379 1626:0.148599158591445 2240:0.421313356929897 2397:0.189647407948293 3323:0.562129928762994 3756:0.194819764393032 4737:0.189647407948293 6233:0.194819764393032 6450:0.228975772071183
+0 6:0.0324635632572275 11:0.0145880458873667 15:0.0111223099507975 29:0.0589506664306886 31:0.0123733720617344 52:0.0529341041837197 59:0.0201581466760793 63:0.0280679732005846 72:0.0202028402479867 75:0.0263171696784221 84:0.0381054260872605 100:0.0200606031307404 102:0.154665480001287 111:0.0203019626791935 118:0.0212575845577188 132:0.0196892273478135 138:0.054444739253739 140:0.0229402989238533 142:0.00420913737866897 185:0.0189043178590498 198:0.113066344545254 209:0.0407860825731129 226:0.025171899350071 232:0.0288149075398998 255:0.0302155253969151 276:0.0504379741814134 296:0.0292742787804325 299:0.0268745306726429 304:0.0245813875096177 306:0.0254744142037223 312:0.029424407225128 320:0.030814328771477 322:0.05626924418035 327:0.0273015471277023 336:0.0593607698066065 337:0.024818932525517 341:0.054248754654633 349:0.0321824976749526 355:0.058614752037948 372:0.0320459829692913 377:0.024985998824686 382:0.0285137180334755 408:0.0955797124265386 422:0.0592056325093453 448:0.0293992094425723 466:0.029997596234563 485:0.0224657574134988 489:0.0369884750331122 493:0.0289814060360284 502:0.0224081786080053 505:0.0233517710101598 506:0.0181616036656453 514:0.0344851584760439 515:0.0234544512272248 574:0.0243072917235421 580:0.0293740827398924 587:0.041116195150959 609:0.0229891737251774 613:0.0300245475718973 656:0.0320459829692913 673:0.0328241084806014 676:0.0324619687615313 687:0.0365286356344739 697:0.034802504361344 712:0.029811186228649 720:0.129284548832984 730:0.0312062577528615 755:0.0338824951409577 795:0.0384604207631722 800:0.0286283580997089 804:0.0305814420369669 824:0.0363073221333995 867:0.0856095849459665 942:0.0840054921661931 1019:0.0466570608750804 1033:0.0388880585715292 1086:0.0409306173929108 1168:0.0422123418755835 1216:0.0347564711312756 1268:0.0439645211556944 1305:0.0590518345435899 1309:0.0383223186139816 1347:0.0490465982437918 1422:0.0881891173009391 1424:0.0301879908767102 1553:0.0452094381058541 1669:0.0486011349137896 1692:0.0481768923447317 1779:0.044226522696608 1865:0.038530283162037 1880:0.0453591460028668 1919:0.0473846006011125 1921:0.0490465982437918 1924:0.0447748441001944 1932:0.0418997690957973 1981:0.0466570608750804 2008:0.115115461258249 2198:0.19806207028823 2371:0.0537503114543538 2379:0.0488210821428784 2380:0.100537409824209 2771:0.0468334509993142 2815:0.0980931964875835 3335:0.0475761651927187 3366:0.103996264348486 3950:0.0595453617726885 4189:0.0505346175003669 4696:0.460036556240266 4976:0.0595453617726885 5036:0.0621078639972994 6261:0.0603204077990263 6412:0.0755052983329831 7667:0.0718936542959588 7907:0.679547684996848 8399:0.0673435209277838
+0 15:0.110990356910167 31:0.123474798615528 80:0.210931162535445 111:0.20259479314178 375:0.229655541587521 505:0.233029056946601 3899:0.548801468038163 6464:0.691860714854494
+0 6:0.0264385530728988 15:0.0452904352484971 26:0.228866692825073 29:0.0480098352346928 63:0.0285734422170658 67:0.149552800587823 75:0.0535822178359103 117:0.136476482576772 134:0.0946758760847364 142:0.00685590186729034 232:0.234670623260898 274:0.142862519601863 286:0.0740709397555788 345:0.0970099217849379 539:0.122814779008927 592:0.130217580038927 633:0.137465760788122 743:0.167810411873068 827:0.112914211202157 1050:0.156049822153568 1150:0.144246333214467 2683:0.187250428214802 2709:0.197905521744486 7199:0.535224272000837 8149:0.548450346641691
+0 6:0.0268544151610694 15:0.0230014128919068 26:0.0290583280442717 31:0.0511773257382979 63:0.014511442395546 88:0.102528973081636 102:0.191912898383819 142:0.00348187048171882 159:0.0403887467288381 180:0.0517356351243674 204:0.0403030280752328 205:0.0531228100425035 229:0.0703164915184044 275:0.0451462805790831 383:0.0804221691110364 423:0.0508656836702971 430:0.0522518413833774 437:0.0603871656174201 457:0.0925873134061092 507:0.0358972923702483 574:0.100537038742951 586:0.0987031641506239 686:0.0793944417520679 755:0.0700704497530491 799:0.0677294210977297 867:0.0590147616085138 881:0.0764937490721157 952:0.0625441185483652 963:0.0569609134704232 979:0.6174295378541 1064:0.0622040306349362 1159:0.0682678575005901 1387:0.10889949823564 1509:0.0848371600727812 1550:0.64132769043853 1863:0.0808808045546499 2017:0.100964086881748 5362:0.133071159600202
+0 6:0.0275521183979816 15:0.0235990114667401 26:0.0894398730995802 27:0.0401125804450436 28:0.0508646195308257 29:0.0500319613182526 31:0.0262534806581411 63:0.0297769269305994 64:0.0597416468023549 68:0.0422854144694563 75:0.0279195235414518 80:0.0448486432690334 81:0.0419382897157567 134:0.0493317644904174 142:0.0178616639355876 158:0.0494391482909892 174:0.0504909290681557 185:0.0401106618948907 208:0.0516047100990122 255:0.0641104710684895 308:0.0508936733383244 331:0.0538458518298986 355:0.0414557231241484 399:0.129895855204727 414:0.101787346676649 423:0.0521872224910704 471:0.071802836947376 561:0.0610389448763932 582:0.058097175452095 647:0.124437887876121 739:0.0703645975521093 1226:0.109024276616535 1230:0.0962417889250102 1469:0.233960990179911 1913:0.328994996779569 2392:0.105578490708352 2455:0.103120551863857 2564:0.105060663848949 2744:0.0947043971702912 3061:0.114045933080762 3710:0.327072829849605 4777:0.127986182872524 5614:0.142887631221918 8373:0.152541979105206 9495:0.693220799676474
+0 6:0.0255451643039103 20:0.0360247205401699 27:0.0185953479750857 29:0.0695812924723389 31:0.0243411220609038 59:0.0396554719534774 81:0.0388834167282207 83:0.0165472838858218 100:0.0394635825209523 141:0.058336779185799 142:0.00331211657401443 159:0.0384196477573225 179:0.139251678469007 206:0.060911048085603 215:0.0406849288782795 228:0.0482994053350386 229:0.0668883056413067 276:0.099222498113615 296:0.0575888924606984 309:0.0469987730220744 351:0.0453213976066265 377:0.0491529103118256 396:0.0648654576487431 408:0.112815686869163 432:0.0599916073445136 461:0.0698818305272271 475:0.0517488222971321 480:0.046972122341688 493:0.05701274788311 499:0.0951360195438655 506:0.0357278363118473 509:0.0592785304052744 550:0.0520308858357662 644:0.0608521477982923 653:0.0652390926782178 730:0.0613895165551138 742:0.0655438450374396 781:0.0692059355386452 800:0.0563182255759793 882:0.0479580409229615 913:0.066654259310976 969:0.0714244229741324 993:0.140359351961937 1009:0.227674155808039 1201:0.0814468029686075 1449:0.0818319353723367 1489:0.0748573254638963 1639:0.0862356726052257 1651:0.0875342531859732 1880:0.0892313351546769 1990:0.340106892030029 2306:0.0898356301751555 3090:0.117138716256021 4379:0.126583454367198 4431:0.113228612200622 4737:0.117138716256021 9639:0.742676965421533
+0 6:0.0271106629965428 11:0.0761414406162058 31:0.012916416377284 37:0.0962050841840645 60:0.0514431886993265 63:0.00732495610162681 86:0.0263258015884199 98:0.0219822822579043 100:0.0209410257384413 142:0.00527264231940901 150:0.0295535299511894 151:0.0535261109016228 159:0.0407741406711255 181:0.0286041208847197 186:0.0576912203597622 242:0.0712373427872987 254:0.0327054381232642 276:0.0789774047652598 294:0.032384773936967 295:0.0287735714034349 304:0.0256602189460943 325:0.0304304627032977 341:0.0566296317262884 346:0.0282337840659532 351:0.0240494271719656 369:0.0303036075313782 373:0.0241919829101067 408:0.0199549056920413 411:0.0507778706638795 430:0.0263752171513896 467:0.0425372175343343 473:0.0895102500446417 485:0.0234517377749596 496:0.0284171088626983 498:0.0348211745950419 500:0.0350702521633651 505:0.048753273725115 507:0.0181199141761427 528:0.070913687822408 533:0.0424437660956528 534:0.0258299858837554 580:0.0306632566673228 625:0.037675357718239 641:0.0268148569211722 644:0.0322906921237297 676:0.0338866642705281 774:0.0380155788365134 882:0.0254485402788698 912:0.0322284956384453 916:0.0821274128859201 950:0.0369268114278857 952:0.0315704607642817 966:0.0338496926914779 996:0.0377312037712828 1005:0.107171400701134 1009:0.0604067098346016 1018:0.0367739585631404 1036:0.0383089261894123 1043:0.0758015661178513 1218:0.0412254207778136 1273:0.0454983085625682 1527:0.396584668338168 1551:0.0362818680871122 1576:0.037564661888488 1578:0.568198495964977 1697:0.0463073699193101 1700:0.0487047526087527 1808:0.306663839247185 1892:0.179982292651157 1943:0.0406713132038203 2142:0.0881299262973707 2404:0.0530386133325198 2645:0.0574088668224338 2791:0.0530386133325198 3658:0.0629677584487493 3708:0.0530386133325198 3743:0.0723739675492149 3969:0.102881382470042 5801:0.0686038151642391 5953:0.324168313896317 6099:0.0702991029668972 6355:0.0638539848946655 6799:0.28949587019686 6800:0.0723739675492149 8003:0.0702991029668972 8376:0.0750489332364708
+0 6:0.00640587435719798 15:0.0219471040631251 26:0.0277263902215526 29:0.0697946604510224 63:0.0276925715700841 67:0.0362355854986143 75:0.0129825922882556 83:0.0331960508108332 88:0.0489146917253019 102:0.244154992952201 141:0.0585156663581338 142:0.0116279556192928 158:0.0459784569308699 173:0.0478804786209802 204:0.0384556703269917 215:0.0408096874265788 232:0.0568590317249848 252:0.0462306356028984 306:0.0502674014615244 308:0.0473311666670924 322:0.0555166580972233 327:0.107745584963317 342:0.0598418269491112 355:0.0385538636099263 373:0.0914596905245062 426:0.0576678385093415 453:0.0621338356790351 458:0.0674431989562659 506:0.0358373941534126 557:0.0602882395652539 574:0.0479643764028592 609:0.0453633993571229 671:0.0391208983300562 687:0.0720801498160277 717:0.0649166617407062 723:0.0657448323608116 824:0.0716434428315844 852:0.0635721252443107 858:0.0642669410846079 1005:0.0675283155968488 1009:0.114186154305859 1057:0.08727000958133 1225:0.0571402625555804 1227:0.0699976517570779 1242:0.0813185510814076 1274:0.0892095479386859 1347:0.0967812262345381 1351:0.0850546483050435 1436:0.0860049636274862 1599:0.0776222829070636 1776:0.0741918725523801 1828:0.08727000958133 1924:0.0883519850844211 2024:0.062386740070089 2223:0.162637102162815 2433:0.08727000958133 2470:0.0954786636134486 2561:0.0954786636134486 2913:0.0942660068248629 3335:0.0938796934295253 3735:0.103907904763566 3837:0.120702501298122 3867:0.714163661839212 4387:0.136807732931154 4856:0.23218208435754 5474:0.12462459551595 5833:0.12462459551595 7035:0.132885638713327
+0 6:0.0267609959008424 15:0.0916855887453835 29:0.0647938133060553 37:0.0422063347271353 63:0.0385625626806167 75:0.0361571353245926 80:0.116162330735713 83:0.0231131440231537 96:0.0552683227344263 142:0.00693951598868712 154:0.128967191968835 158:0.0640260917216551 179:0.145879413902384 243:0.0841107121288789 256:0.0607055658309729 325:0.160202547170961 327:0.0750191412016813 331:0.0697329862521132 345:0.0654620322090397 351:0.0633046485115372 414:0.0659097721108073 478:0.0699540877142683 480:0.131220741270641 496:0.0748015774098862 507:0.0476965538421256 782:0.101636863961029 837:0.0967990840102478 987:0.072825815027016 1007:0.102969207307135 1124:0.0991718123199114 1175:0.0945147133459116 1308:0.208395279440954 1312:0.115990995704592 1471:0.103313942096451 2206:0.115132108792693 2223:0.113238010967581 3219:0.136729259374375 4512:0.293306656491012 6782:0.762032050797322
+0 102:0.293714522522 111:0.192770270215731 204:0.185046207112661 252:0.222458838917166 1776:0.35700650899245 3837:0.580812656867182 3867:0.572751585385306
+0 6:0.0536875001814069 15:0.122625482764519 28:0.132151690641614 29:0.129988356057907 63:0.0386818113679759 75:0.0362689456044704 80:0.116521544556006 96:0.110878462738271 142:0.0139219507107278 159:0.107660550879035 180:0.137906903003484 229:0.0937180876591441 327:0.150502252300239 365:0.189613970597578 413:0.154734923658359 507:0.0956880959340901 527:0.170686546449807 723:0.183668692332453 737:0.210878984378138 1614:0.226142580005509 2246:0.22665675125629 3719:0.298486172849392 3868:0.337201720327098 3957:0.311146331310857 7131:0.396320283499889 7356:0.348158717102748
+0 6:0.0200085269233632 15:0.0342755101060844 26:0.0216506051438648 27:0.00728250396400576 28:0.0184691081576455 29:0.0454169181569293 30:0.0300670233135117 40:0.0156271401610473 41:0.0115164949419504 57:0.018672376191155 63:0.0756846905392027 75:0.0354818431089562 79:0.0169610228727952 80:0.0162846876846774 81:0.0456837866390156 83:0.0129608395232486 96:0.0464880845048016 134:0.0179125235258832 142:0.0181597585356062 145:0.0209879245743884 158:0.0179515149318042 171:0.021625270376309 173:0.0186941272996348 174:0.0183334199398589 180:0.0192734386892151 186:0.014192648552554 200:0.024161769135904 205:0.0395804253641327 226:0.0193929969219397 227:0.0355555445197303 229:0.117879728969842 274:0.0270293590000155 275:0.0168186602657021 276:0.0194292743754806 288:0.0259767492728058 295:0.0212358059329039 312:0.0226692245511937 317:0.0149068942460392 320:0.0474801026896054 325:0.0224586441271088 327:0.0210337254272483 345:0.0183541212194491 346:0.0208374258019469 348:0.0248473171138717 355:0.0301054147733983 398:0.0194535663264398 402:0.0190633467005628 405:0.0237856493130972 408:0.0883641099835805 409:0.0127730313766458 413:0.021625270376309 423:0.037898699155729 457:0.0172461003333784 478:0.0196135952761691 507:0.0267461397523636 510:0.0226111497139368 515:0.216838035523484 535:0.0237173654762745 546:0.0216085936512605 557:0.0235385288026317 565:0.0266025394528218 574:0.0374537675540175 582:0.0210952726467987 586:0.0551558721019523 613:0.0231315861606921 631:0.0167855880620287 643:0.0203490944337436 647:0.0225919001389582 764:0.0231315861606921 804:0.0235606301711079 851:0.0284064554228611 856:0.0563124111851877 1031:0.0307334502981163 1080:0.0252884307964596 1098:0.0280566997846793 1145:0.0328561577643832 1149:0.0239946746796227 1225:0.0223094541431864 1359:0.0555292715018416 1380:0.0772795758343776 1411:0.0633536814139669 1433:0.0241136112612176 1509:0.0632099634729234 1528:0.6018057406351 1581:0.0356816745161555 1598:0.0261682724655344 1608:0.0271031497000307 1685:0.0358123921632708 1734:0.034605347920756 1783:0.0362201835429495 1986:0.0387281399020687 2007:0.0337725128041529 2024:0.0243578530179612 2042:0.0321245517645579 2164:0.0645610473651039 2188:0.0393620489460665 2223:0.0634989202080188 2340:0.0347169352408406 2388:0.0403101013584962 2401:0.135485020274329 2421:0.560847413398865 2424:0.0350630154095005 2427:0.0806202027169924 2529:0.0381478674496788 2666:0.0337725128041529 2913:0.0368045763611072 3018:0.0942525216806296 3046:0.0383358920601342 3348:0.0847391196300085 3520:0.0478492941107552 3553:0.0801210590569807 3609:0.0400605295284904 4047:0.0400605295284904 4602:0.0458750848123932 5121:0.0471262608403148 5122:0.0471262608403148 5192:0.259414809328127 5201:0.0518829618656253 5583:0.0929443953758193 5833:0.0486575765393418 6409:0.0553884868630143 7215:0.0553884868630143 9591:0.0534142775646523
+0 15:0.120004142471016 63:0.0757098361252308 75:0.07098726329095 81:0.213261835188879 111:0.219047988463987 142:0.00908289597942109 515:0.253061757773579 1528:0.526754974729242 2401:0.47435511901551 2421:0.561033750117451
+0 6:0.0203007907251941 27:0.0591110338087107 53:0.156343600429416 64:0.176073963068033 81:0.247205802644782 142:0.00526429069913804 185:0.118216413157813 719:0.218506889213321 733:0.22913355736153 7006:0.776771631264039 8400:0.402384449097053
+0 6:0.0416145054795591 15:0.0475250179948306 26:0.180119052211304 27:0.0403904864861936 29:0.0503785903345528 63:0.0599664519932104 67:0.0784657897425423 75:0.0562259084701349 88:0.10592156476637 134:0.0993470848737925 142:0.0107912473514343 144:0.0824689821907882 178:0.223898402332154 180:0.106895041700881 192:0.112024346053843 204:0.333092952771705 208:0.103924470714805 220:0.111279491102329 252:0.200218833666691 255:0.12910927627122 274:0.299822414053337 314:0.110693927655804 322:0.12021769102177 351:0.0984414650383771 355:0.0834858693229841 394:0.129227294577532 404:0.116488471114282 457:0.191301888992506 541:0.143039794589039 731:0.159856334988844 795:0.328678520369315 895:0.144248177772708 1036:0.156809839634304 1230:0.193817133271118 1340:0.186238121999364 1949:0.17260993650442 2399:0.201670478102531 2968:0.211577080125038 4397:0.25774578111795
+0 6:0.0219544374912403 15:0.0752178855531579 31:0.0836785602778 85:0.0672715176397002 88:0.167642148753628 179:0.0598389627509687 205:0.0868595652105598 229:0.114972454874542 255:0.102170679530053 275:0.0738173733436842 430:0.0854354696293359 477:0.117370562381031 480:0.0807390793429838 499:0.163526667465709 507:0.0586946211057244 586:0.080693339792927 655:0.0831194239602932 895:0.114150855536124 952:0.102264073365888 1007:0.126712269998661 1064:0.101708005487134 1124:0.122039256080263 1863:0.132245856570393 2382:0.763422695224544 4402:0.21758079167293 8145:0.255313370774214 9390:0.255313370774214
+0 6:0.0135089847033038 28:0.0498785144035698 29:0.0245309994085274 31:0.0514890163429745 54:0.050574674977949 60:0.0512673001997033 83:0.0175013166668554 94:0.040548489810676 97:0.0421470060409041 111:0.0422410351425626 226:0.0523736104658053 333:0.0681419206551371 405:0.0642366075142864 448:0.0611691125065444 478:0.0529693684252541 861:0.09017770437174 882:0.0507230592468364 1010:0.0752043953552148 1027:0.141168026702499 1038:0.179366918367145 1080:0.0682950876110787 1337:0.0869664428958236 1535:0.100238673213545 2024:0.0657819268925271 2186:0.106302941568819 2240:0.275234443730777 2398:0.0982000160424802 2913:0.198792229324277 3734:0.109562740207829 9162:0.849726783578967
+0 144:0.277794493900919 178:0.377097799128849 204:0.280503608081131 220:0.374841899234402 274:0.504971769746189 795:0.553572269213088
+0 4:0.0392412252361487 6:0.0181440928814854 15:0.0310816504037045 29:0.0329479040445674 31:0.034577783431599 37:0.0429241680866647 63:0.0196092118997854 75:0.0183860428089634 142:0.00470502753775797 144:0.107870430428126 174:0.133000605391158 179:0.0989069930412486 180:0.139820012962334 245:0.104895160069553 337:0.0693572996584167 351:0.0643813160025347 404:0.152368335163176 414:0.0670307468044403 507:0.0485077632898026 527:0.0865271955839118 561:0.080392822738906 641:0.0717844863688554 727:0.0971280686968537 850:0.0831614559515561 960:0.104547013942871 1007:0.104720478354177 1273:0.121800862873031 1565:0.136432073391974 1955:0.136432073391974 1980:0.112647442095884 2578:0.137062285338953 2709:0.135817423835179 3382:0.160846916635044 3456:0.176494269967857 5075:0.166401415350605 5423:0.188193620182456 5516:0.15496271717511 6106:0.200909113210926 6940:0.200909113210926 7234:0.539454417119441 9189:0.456511633516678
+0 6:0.0330947312150275 29:0.0400645372785448 31:0.0420464649718188 60:0.0837308185375993 80:0.0718276914516571 142:0.0114425944016409 199:0.10313149899401 265:0.104214405991033 325:0.0990594718191861 351:0.0782874574217607 436:0.0974404422166046 496:0.0925054548796642 499:0.328672877388371 560:0.262823612037839 1135:0.299679069940598 1448:0.138470267202094 1783:0.159758186231184 2134:0.150287967427984 2404:0.172655180237272 2448:0.163016019764251 6710:0.732914358826938
+0 6:0.0451424909711088 15:0.0773311254456898 26:0.0488472865078703 29:0.0819743632577283 31:0.0430147510420518 41:0.0519661713155673 47:0.0534157434874645 63:0.121969265275299 75:0.114361155572703 94:0.0677497189971232 96:0.0699231197132492 134:0.0808271328153363 142:0.035118316114683 158:0.0810030747221523 179:0.0615201331572241 198:0.0982658695944685 209:0.0708943034732077 229:0.0591012979513944 276:0.0876712060242863 306:0.0885591720226365 325:0.101340707750707 382:0.0991249981309691 429:0.12879236911152 475:0.0914486481872505 640:0.105330106817497 649:0.151093112971182 731:0.130056450432645 867:0.0992042957217907 880:0.132750817958548 882:0.0847497163690375 890:0.118521081248056 968:0.313308209376321 1045:0.0586265533003518 1138:0.111287035651155 1433:0.10880845779499 1465:0.178629728273603 1625:0.15239256344783 1700:0.162198457128923 1709:0.143929846130339 2195:0.175678382573335 2264:0.45987054778499 2657:0.181892289581358 3767:0.18076614030252 6749:0.24993086974308 7012:0.24993086974308 9351:0.28395015982394
+0 6:0.027551003557983 26:0.158997785063887 27:0.0267406382477953 28:0.0678167485310019 29:0.0333532912516575 63:0.0397009627577115 64:0.0796523059720893 81:0.0559154570250966 94:0.0551312878838609 97:0.0573046920941585 134:0.197319073526722 142:0.0285775059199468 172:0.0720191926583193 174:0.1346370294832 176:0.142808931011794 178:0.0741162920019546 192:0.074166041891959 198:0.0799637847354114 204:0.220525151535443 215:0.0585060826357749 226:0.0712091771996715 387:0.0648273201913204 409:0.0469013148580216 442:0.0781501741007601 506:0.051377642809997 531:0.103336424938873 717:0.0930666176523274 834:0.0925448948516946 867:0.080727428360049 987:0.0749756958357134 994:0.105142940455612 1614:0.116050384266187 2528:0.105658964859318 2997:0.316463526433423 4556:0.162825958525403 4887:0.449862046616652 7393:0.610143227226723
+0 6:0.0359656783953411 12:0.121226208311892 15:0.0616108311238178 26:0.155669371293801 27:0.0523617148799481 28:0.132794184557589 29:0.0653101661465072 64:0.155969775148684 86:0.558791388347478 94:0.215908741623029 108:0.166467475906444 134:0.128792301971745 142:0.0139896363270579 158:0.1290726529183 185:0.104718420928503 192:0.145226942727937 259:0.218762665538136 308:0.132870036430869 408:0.105890692620957 565:0.191274126700925 592:0.177141449162753 631:0.120689556853019 906:0.210420163168153 2862:0.304640110268041 8361:0.398247109934647
+0 27:0.0799828930653209 64:0.238244944340366 142:0.014246179534484 204:0.16490107163885 387:0.193902500401283 834:0.276807470340568 2997:0.473280932176062 4887:0.44852167993974 7393:0.60832530180699
+0 6:0.0457248255614875 15:0.104438254525821 29:0.055354550739827 31:0.0580928506057973 80:0.099239623394193 96:0.0944334966258893 159:0.0916928501450773 162:0.0825486180986745 174:0.111724690432418 179:0.0830849840618049 199:0.0712450234261846 228:0.115272012993351 245:0.176230465299954 256:0.103723770913371 265:0.143986228622709 277:0.138028976543723 322:0.13209175233562 346:0.126984215425598 351:0.108164659534595 381:0.146513049196136 499:0.22705290893179 507:0.0814960927611307 550:0.124177614745186 697:0.163397388883477 796:0.133978697800326 847:0.162539508618968 850:0.139716475647176 950:0.332163918685886 1548:0.167731420323356 2709:0.228181812987786 3653:0.231359558540601 3691:0.467241320704951 4315:0.252357142236872 5297:0.264998587664041
+0 6:0.0642599071783165 15:0.0550400613284181 29:0.0583448637926795 31:0.122462179192977 37:0.0760110487466189 63:0.034724418155012 75:0.0325584037735542 81:0.195625655016733 83:0.0416253704186743 96:0.099534896850672 142:0.00416588245583043 179:0.350293301165945 185:0.0935502444129789 229:0.168260272695419 473:0.141443002460202 513:0.120217251190377 586:0.118093358736036 684:0.15035160009036 764:0.148580011438788 1122:0.196211903436031 1305:0.146112480645342 1311:0.196211903436031 1446:0.167671519564551 1573:0.207345944401944 1951:0.200334473048683 2340:0.445991260553437 2605:0.233560258390687 2825:0.216929366793043 3167:0.248760609396973 4301:0.302703858095989
+0 6:0.0341837829297981 28:0.0841433237054174 29:0.0827658902327449 31:0.173720369230177 37:0.0539132470974062 42:0.0681725187214947 63:0.0246293948994895 75:0.0230930805019162 80:0.0741913326619511 83:0.0295241141637698 98:0.0739131133361638 142:0.00295478425733371 174:0.0835251423869271 179:0.124228316894297 180:0.0878077694223589 204:0.0684038958397955 229:0.0596719674842573 245:0.13174952331595 478:0.0893574872301866 586:0.167522920288131 1001:0.133562476974497 1047:0.128411455617856 1064:0.105575144984762 1191:0.190051436661293 1305:0.103634911015456 2709:0.17058824102485 2889:0.172151801341722 3025:0.243349858003458 8555:0.795062670050463
+0 6:0.0245979810783082 15:0.0842749046212252 28:0.0908218330584884 60:0.186701237427537 159:0.0739901890883688 162:0.0666113863015564 180:0.189554256345647 245:0.142206567142846 351:0.0872818720214403 413:0.106342259691017 427:0.130648824492077 467:0.154379060691635 531:0.138390644464015 608:0.13420434035257 2837:0.184961220254479 5268:0.248981789567434 6464:0.787994075053658 7592:0.262664691684553
+0 6:0.0107547058526741 15:0.0736931870203533 60:0.163258674317309 172:0.0843394213743106 179:0.0586260015245264 180:0.165753462743945 768:0.13440473294307 1010:0.119742699934472 2734:0.356133912103747 3179:0.185300263168013 4930:0.572041144305871 6307:0.639511009444345
+0 6:0.0253480721415074 27:0.0738075067924701 28:0.187182709756669 29:0.0460296281598834 31:0.0483066392264764 142:0.00657312427983474 159:0.0762464466008419 185:0.221411929929087 204:0.228253877147146 245:0.146543015520561 411:0.0949531281432909 643:0.103118098737911 644:0.120765293501805 689:0.1583911691064 965:0.126595864132257 1155:0.147536661561013 1296:0.129024691540129 1509:0.160156789183997 1576:0.140489630909012 2866:0.347435551905435 3478:0.256574242568325 5137:0.238810156112982 7247:0.502427229678033 7696:0.262914519459064 9794:0.318883117921705
+0 6:0.0197935604705947 26:0.0856719865048465 27:0.0288170504787295 29:0.107829529204677 31:0.150884908220654 41:0.0455710587622765 47:0.0468422422447876 60:0.225352777196969 63:0.042783744996717 75:0.0802300236294575 84:0.058083739109265 88:0.151141882368852 134:0.0708803039721074 142:0.0256637925336728 172:0.0776114874686374 176:0.102598702285888 199:0.0462612813312583 205:0.0783103669647995 215:0.0630490836084231 275:0.0665518596703584 319:0.0897797244009139 345:0.0726277170994705 387:0.0698611656551638 477:0.105818303242048 480:0.072792293127671 505:0.0711897655723567 571:0.0781088449895772 867:0.0869959182167744 952:0.0921986783284549 966:0.098854969247378 997:0.0941204097261974 1159:0.100636260929993 1277:0.116828692655968 1469:0.336157165122051 1863:0.119229488801801 1936:0.266506990660988 2968:0.150952066402803 5736:0.709371612604158
+0 6:0.0401357084751063 15:0.0275017123793764 26:0.06948736443754 27:0.0934924457957881 29:0.0583060274321204 63:0.0694026087610674 67:0.181625903338301 84:0.141332754569156 94:0.144565330575799 97:0.0500881445855089 103:0.0764133031193232 107:0.307138914739729 134:0.172470105380648 142:0.0333048760023485 153:0.139242916148777 154:0.058026872081595 176:0.124824584570971 192:0.0648260952788198 198:0.0698937114058777 199:0.0375218860488412 204:0.144565330575799 226:0.0622415972069389 306:0.0629896141685604 345:0.117814675537423 355:0.144934465849923 363:0.149974475746531 405:0.076339763771964 417:0.0939269070180562 453:0.0778593327373573 477:0.257483290683111 561:0.0711332976085489 571:0.190059014586257 799:0.242942692356107 882:0.0602800569727104 987:0.0655337871329591 1045:0.0416993958737303 1058:0.0900476503958191 1731:0.299018634392485 1894:0.251265542023445 5440:0.162502125517955 6161:0.499553281116114
+0 6:0.0291902127928943 11:0.16396388787895 15:0.0250020763001134 26:0.126343288272042 37:0.0690563925456014 48:0.0446437964157415 63:0.0473209439398135 75:0.0147897308925419 88:0.111446945455307 94:0.131425759078105 96:0.045213959169401 97:0.0455356232143971 134:0.104529508920063 142:0.0208159800978672 176:0.113479253383281 198:0.0635410581480121 226:0.0565844461225545 252:0.0526658038993152 255:0.0679221200239541 275:0.147219315223248 276:0.453522365222858 304:0.0552570220392078 306:0.057264475674542 317:0.0434949975867503 351:0.051788323788792 373:0.0520953050184076 413:0.0630977229264438 430:0.05679670771652 457:0.0503202799993335 475:0.118265759942968 506:0.0408258538549654 587:0.092425966627636 671:0.044566412140927 683:0.0882552023986633 723:0.074896319363837 737:0.0859921174400168 761:0.0742057972741139 799:0.0736205276608802 867:0.128295733788443 1017:0.0859921174400168 1043:0.652927992294956 1135:0.0991210930711224 1159:0.0742057972741139 1725:0.105277907238911 1863:0.175831637490534 2024:0.0710707905180274 2376:0.101296285436582 2532:0.106947470217719 3929:0.126879081583283 4176:0.121716529058488
+0 6:0.0129054641690775 26:0.0558584067669137 29:0.023435064947626 60:0.0489769083542451 88:0.0985449863987777 94:0.0387369660899758 134:0.0462141828684279 142:0.00334657481637007 144:0.0767256860889253 145:0.0541486956267226 159:0.0388193539584951 192:0.0521113792198853 255:0.0600589308804422 306:0.0506350977447283 513:0.0482870111666118 553:0.0824876509778416 703:0.185479031548936 947:0.0784979977466522 952:0.0601138305244192 1140:0.0655402979239031 1197:0.106085136739367 1268:0.0873875963630001 1482:0.0764471814375241 1670:0.108449326202628 1863:0.0777380046361527 3759:0.106085136739367 7816:0.75040354819559 8184:0.535430685452893
+0 6:0.0306922121870444 12:0.02586285504781 18:0.0205368192533698 20:0.021641637408232 29:0.0557340655528797 31:0.0146227848503141 51:0.0260564852098438 52:0.0312786204464196 60:0.0582392715124393 65:0.0274472553104647 68:0.0471046507047802 72:0.023875608430558 78:0.0294741045888512 83:0.00994068274724626 84:0.0450327885174296 98:0.0248863287298116 102:0.109669701672853 132:0.023268623455233 135:0.0349540695505287 139:0.0313861467099584 142:0.0139281408465284 179:0.0209136551840393 199:0.0358667422360136 204:0.0230313913381868 206:0.0731839024457724 215:0.0488824599086968 236:0.0529146710142428 243:0.217049979201589 253:0.12576636657194 279:0.0434375574463928 283:0.0287598589602089 318:0.0463086228812008 325:0.0344505856739342 337:0.0879926447029251 351:0.0272265610705636 411:0.0287430296525915 449:0.0438531402173063 472:0.0349540695505287 485:0.0265499118201489 499:0.0285762000170827 533:0.0480509486319527 550:0.0312572463686752 554:0.0487022942802708 576:0.0375563398550639 586:0.112808952996129 597:0.0343069718547489 607:0.037634315986961 630:0.10616620456453 643:0.0312146279717068 644:0.0731131344485689 654:0.0801829139039558 658:0.248379946894795 688:0.170358986451567 763:0.0444340726955783 767:0.0733976449856457 772:0.0710936840622242 819:0.0385324885951834 829:0.113843890961452 837:0.0832642225917836 856:0.0287935985072734 876:0.0370261046982689 916:0.046488571360079 951:0.150037169194706 966:0.0383215250281991 987:0.0313214992416435 1007:0.0885716128926711 1046:0.0862066949635619 1075:0.0536051958742227 1112:0.0462197891922239 1114:0.0469523789620147 1133:0.0447370210756516 1135:0.0521107133122927 1155:0.0446604627042211 1162:0.044508996354734 1199:0.055560190063559 1245:0.0750351346524981 1273:0.103018044282579 1292:0.0460443396362745 1296:0.0781134988887978 1331:0.173479444809329 1351:0.0509398711188334 1375:0.0481567458006005 1380:0.197572527312838 1493:0.102441201093414 1527:0.0997726392118269 1561:0.051079300040282 1598:0.040140994594797 1677:0.0603796752752866 1700:0.330834388323732 1707:0.0438531402173063 1711:0.0557772437259822 1782:0.0472408005565972 1836:0.0818269456370511 1849:0.0948751351756377 1936:0.0516562515296922 2010:0.0562252572819354 2020:0.0639897619630073 2023:0.0562252572819354 2066:0.0513638235679167 2075:0.0626440946179963 2142:0.0498863196059135 2184:0.0622312287730684 2195:0.358329242269889 2251:0.0553475216249745 2277:0.14679748224071 2365:0.0530831022822648 2382:0.200111577895009 2433:0.052266667715428 2461:0.065533017104877 2490:0.126147633438008 2683:0.0543442171271354 3613:0.063073816719004 4008:0.0733987411203552 4053:0.0760442601696714 4513:0.0746386112967184 4900:0.134684076607393 4909:0.0712863349560291 5365:0.0760442601696714 5627:0.0819351842897402 6060:0.142572669912058 7710:0.0795862124468901 7805:0.089231757282762 8420:0.0819351842897402 8759:0.089231757282762 8844:0.089231757282762 8878:0.0819351842897402 9455:0.0965283302757838
+0 6:0.0170284398967631 28:0.0628732138880355 29:0.0309219869746006 31:0.0324516475292686 60:0.129247631749328 63:0.0184034709499928 142:0.0132471674107912 159:0.0512211747716362 180:0.065611345318985 365:0.0902117836832813 408:0.100270778996687 850:0.0780479830900455 1305:0.0774376342602539 1340:0.114311510988997 1627:0.113671430729113 2026:0.512866845507519 2933:0.181834838441133 3952:0.142009420364323 6619:0.529865632494856 7661:0.529865632494856 8681:0.188555513983026
+0 6:0.0164195861915008 31:0.125165341485997 80:0.106909552737943 159:0.0987795122855239 174:0.120359552720893 180:0.126530809180021 245:0.18985078318143 346:0.273596880189766 586:0.120700086106845 1191:0.273863716443021 2024:0.15991016973921 3025:0.35066662835852 8555:0.763789078894404
+0 6:0.013577571274379 12:0.0915293444814119 15:0.0232589926891446 27:0.0988365780309179 29:0.024655545936 60:0.0515275898074129 64:0.117761756942387 102:0.129374681501482 110:0.131036387338824 142:0.0158438788985453 172:0.0532382996167607 180:0.104629986408297 205:0.0537177023086331 268:0.195969428309469 308:0.0501603881911804 411:0.0508611802070603 437:0.0610634072878164 441:0.0957422823364593 539:0.0630717729121919 643:0.16570412070902 644:0.0646873407507411 723:0.0696747311550048 768:0.0848414575975902 780:0.137750316321821 882:0.0509805856845806 1067:0.0722087891594675 1128:0.816757812116837 1129:0.0791627646200691 1155:0.0790272935450728 1296:0.0691114470465875 1395:0.14498347853802 1576:0.075252585929593 1614:0.0857872033850103 1872:0.101185902821945 2301:0.120364820062452 3300:0.111609972827033 3793:0.114097287542957 4107:0.116968681653869
+0 6:0.0141614258863954 15:0.0485183240070452 26:0.0919418329939454 27:0.0206173379077151 28:0.0522874887020128 29:0.0771473069974187 31:0.0269878863926062 47:0.0335135734112928 63:0.0306098963252994 64:0.0614128388461586 67:0.040052889728642 94:0.042506853466102 97:0.0441825729683264 103:0.0674039010380332 134:0.101423508215955 142:0.0110167919451184 178:0.0571445087626944 198:0.0616529925348993 204:0.042506853466102 226:0.0549030900029858 252:0.204403546889974 292:0.0698226027668305 308:0.0523173552506148 322:0.0613651622920744 323:0.0605720649880312 345:0.0519619516928347 355:0.0852307822011341 373:0.0505473397046925 387:0.0499826052635931 389:0.0603448321515865 423:0.0536470896973398 475:0.0573757994233693 506:0.0396127501856816 527:0.0675342920378006 553:0.181030723197779 609:0.0501422898834262 714:0.0732766700529644 723:0.072670842337468 853:0.0749272250625341 867:0.124483541005774 987:0.0578071189470736 1518:0.0907300398720285 1713:0.116409358230008 1880:0.197868046492641 3609:0.340243470432622 4740:0.116409358230008 5190:0.587538880431069 7101:0.146884720107767 8121:0.440654160323302 9289:0.17815317928957
+0 6:0.0170741250568089 26:0.0492676802175835 29:0.0206699645146669 31:0.0433849482844318 60:0.0863962579137544 63:0.012301896763475 96:0.105787347101454 100:0.035169403499683 102:0.325383597184198 134:0.0407613771115877 142:0.00295171286508659 150:0.0496336728045447 176:0.0295008920720791 179:0.0620495930074832 199:0.0266036321564128 275:0.0382722039477773 345:0.0417662679128774 355:0.0685072744164754 373:0.0812584463674227 530:0.0935730437611788 561:0.100869347622195 755:0.0594013617348506 757:0.0540741765605778 772:0.15819810511281 952:0.10604201409788 1863:0.0685657070232726 2484:0.182321865374374 2907:0.0848291506561327 9054:0.859181748182693
+0 6:0.0559347858724997 15:0.127758418584755 26:0.322801564851648 41:0.085853087342483 63:0.0806019586949394 68:0.114460677504067 75:0.0755742286138319 83:0.048310188700214 94:0.223858036689583 96:0.115519684287423 140:0.131753939844255 142:0.0338443107806323 176:0.0966448398151694 289:0.162217517639283 298:0.184835030998425 317:0.111127812773008 325:0.167424545884607 351:0.132316897784631 413:0.16121191697477 423:0.141263480997641 427:0.198059995227346 467:0.234034375300803 475:0.302163833948648 480:0.137136227893016 1245:0.182329604835861 2466:0.59022680621628
+0 6:0.0201362116471954 15:0.0459923197381614 17:0.0365748286160261 28:0.049565250818212 68:0.0412052069486231 80:0.0437029564555964 83:0.0173913990946683 94:0.0805876474790126 96:0.0415864434974513 186:0.0380885844231122 245:0.0776080368681052 427:0.0713004961140135 478:0.210546770534296 518:0.0585350134835399 571:0.0529740042328303 644:0.0639563565495258 781:0.290945161266916 814:0.0745115098749912 884:0.069295757359925 1109:0.0928698199557472 1411:0.0850106318815526 2237:0.0968314613749607 3559:0.123114233000566 3781:0.123114233000566 4977:0.135879715631039 6115:0.417712430309783 6989:0.135879715631039 7552:0.743225991307565
+0 6:0.0322141722639885 27:0.0312666478791069 31:0.0409277252289298 67:0.0607410910803149 81:0.130758951196475 96:0.133061062144737 142:0.00556906936041277 185:0.18759091453371 196:0.49926802073478 339:0.0835217957076234 388:0.111663843988702 389:0.0915142695265923 455:0.0784035866420823 502:0.0741201163574053 608:0.117171723021478 687:0.120826720054668 795:0.127216536068785 867:0.0943910183941697 1134:0.130629320452129 1613:0.123138750669922 1916:0.131150807921205 2458:0.17910100038368 2470:0.160049247803461 6784:0.687985375601044
+0 6:0.0537249618467648 15:0.061355523731821 27:0.0782171019613187 28:0.0661219512336786 29:0.130079058368102 30:0.161466127571642 47:0.169522990816923 63:0.174189611138309 75:0.163324138860506 81:0.109036165923883 83:0.0464015907854769 84:0.0525515469572134 142:0.0464388835538434 154:0.194184406300214 158:0.0642688961892316 159:0.0538678367295355 174:0.196908506170843 176:0.0464133387726924 185:0.0521422406031606 192:0.0723125704402247 205:0.0708516874067914 221:0.0852379329746805 229:0.046891740785344 255:0.0833410233018607 256:0.0609357779553455 280:0.093802183713324 310:0.0918984256546144 314:0.0714537752094373 325:0.241215118630268 345:0.131420564312094 346:0.149201709248897 373:0.0639213856682546 462:0.110029985449703 498:0.0920064196052911 499:0.0666946714381329 524:0.101221948386344 626:0.0845093218918774 658:0.082814264718124 693:0.106469161656871 795:0.106082246822362 804:0.0843503013741266 952:0.0834172050193984 1027:0.0935704028978582 1311:0.109362924088162 1410:0.123498806539782 1472:0.0910511491333608 1720:0.116430865313972 1816:0.196796563641269 1842:0.137247774156893 1969:0.122355875617709 2218:0.398647197568518 2528:0.206036917816401 3217:0.311363440688301 3614:0.142560069807786 6126:0.164239122696904 6812:0.174200826354005
+0 6:0.0204520929740414 15:0.0350353587801506 29:0.0371390072361734 67:0.0578448407088842 88:0.156170378496159 96:0.0633582292269006 142:0.00265176278792763 176:0.0530060824904213 199:0.0478003959060707 255:0.190358257896916 275:0.275064170207398 289:0.0889702454660138 514:0.10862850479292 586:0.0751714858779385 631:0.0686308210461433 737:0.120500579656345 761:0.103984433127016 799:0.103164296005738 1018:0.110968060006914 1036:0.115599935016191 1373:0.118636235939036 1709:0.130416666491936 1948:0.153786770596903 2650:0.355590799068647 7838:0.713526748112795 9103:0.257290855855955
+0 6:0.0175362439543038 15:0.0600807554879676 29:0.0636882192879545 31:0.0668387722236974 80:0.114180222083095 159:0.105497276540546 174:0.128544925196531 179:0.191186979705978 204:0.105273375448373 245:0.202762092171879 264:0.144359363855321 322:0.303956526661078 346:0.146101782961731 369:0.156812529279271 499:0.391853838412916 530:0.144158460607772 697:0.187996986610943 761:0.178318804738449 847:0.374019903676435 1034:0.221099971717539 1309:0.207010402026562 1486:0.239627436891755 2340:0.243418077926873 6171:0.330426166769903
+0 6:0.044952495840821 15:0.0770056552082641 26:0.048641698682196 29:0.122444025931866 31:0.128501133347912 40:0.140435916303892 63:0.0242911845228252 81:0.0684241685806927 142:0.00874262765036751 144:0.0668129995095539 171:0.0971695597952852 174:0.08237817673946 179:0.183783624056996 180:0.173203989645757 204:0.0674645748588421 229:0.117705106350799 286:0.0629700423110801 320:0.106671976745276 345:0.082471194500162 386:0.0895036620849268 387:0.0793296830859227 402:0.0856579813747859 502:0.0775718570767546 521:0.110818652219425 582:0.0947881030470988 586:0.165222498771412 658:0.103937939525767 782:0.128045422564181 994:0.128664213181258 1001:0.131728399611651 1134:0.136712669571164 1141:0.299247510556708 1389:0.143324076061396 1504:0.157022721587957 1897:0.300075318000326 2240:0.305290033726778 3079:0.165375249475662 4492:0.174018462682293 6147:0.240008182437639 6231:0.199251359609822 6233:0.211754023925076 6493:0.233127469743981 9267:0.282755074075449
+0 6:0.0114800536886176 17:0.0104260176521945 26:0.0331258914954446 27:0.0222847753699079 28:0.0141290663420824 29:0.00694888615319028 31:0.0145852725667063 40:0.0119549302645161 41:0.00881024246943486 60:0.0290449342512584 63:0.0248141151912564 64:0.0165949081865083 67:0.0541152338940224 75:0.00775542614876806 88:0.0146101129436418 94:0.011486154097751 96:0.0237092563603393 97:0.0358168954063394 102:0.054694181292477 111:0.0119656007205537 140:0.0270411744588904 142:0.00992315039623778 143:0.0168594408464405 153:0.0663796327460332 173:0.0143012084053736 176:0.0198353838760555 179:0.0104300023678038 180:0.0147443878478372 192:0.0154518898195497 193:0.0185584805888252 198:0.08329901122981 199:0.00894368304237236 204:0.011486154097751 205:0.0151397255093276 218:0.0217064122100665 220:0.0460474485125486 226:0.0148358511815016 229:0.0300597534142822 232:0.0169829727238869 242:0.0268138372938578 265:0.0361503759656223 274:0.103388751431696 276:0.0148636038235581 278:0.0330361591166864 286:0.0107209392639072 296:0.0345074352469204 307:0.018374255982656 317:0.0114039343946072 322:0.0165820250817286 327:0.0160910261310973 331:0.0299143734787798 333:0.0579076018477674 336:0.0349861380987806 337:0.0146278190736235 341:0.0159866055327219 346:0.0159408548068983 355:0.0115154830151658 363:0.017873890637813 365:0.101363378589847 372:0.0188873087280957 373:0.0273176904774884 382:0.0168054572081684 414:0.0141371368472278 436:0.0169002960142086 441:0.0134919385222624 442:0.0162819512647404 543:0.0211781156311821 570:0.0221974080228086 580:0.0173125402283531 631:0.0128411553657556 640:0.0535723773890361 644:0.018231393764159 655:0.0144878144416417 678:0.0414117995018057 687:0.0430586023406155 713:0.0382649660962731 772:0.0177278263072538 774:0.0643910311013351 792:0.0209960212188191 808:0.0199697149817096 814:0.0212402449073385 844:0.0419325537508757 858:0.0191956084086452 880:0.0225063125610768 886:0.0164800827997391 913:0.0199697149817096 952:0.0178247495997949 987:0.0156205746139882 1010:0.0213031182643639 1031:0.0235114199601144 1038:0.254045967435921 1056:0.0187884383376878 1150:0.020878041814194 1164:0.0202987296799455 1192:0.0238086613720901 1201:0.0244015830086153 1227:0.0209072890350369 1260:0.0255446013755739 1322:0.0214963865636621 1392:0.091387533782586 1590:0.0884257886723265 1613:0.0219412663664849 1636:0.0558552116418671 1749:0.0299457144078847 1782:0.0235598061327074 1820:0.0244015830086153 1838:0.0293273696584166 1853:0.0281558966821609 1921:0.0289071564439471 1946:0.0266456053399033 1981:0.0549976147673578 2010:0.0280405104425988 2021:0.0279276058209336 2055:0.0294752628907755 2067:0.0477197598993909 2160:0.0296274434754047 2240:0.41581625666274 2296:0.0279276058209336 2369:0.0748261370950421 2446:0.0308376610006743 2526:0.0572892172184083 2564:0.0291835288095573 2838:0.0575484828632581 2852:0.0329662970924 2860:0.0297841674290437 2913:0.0281558966821609 3708:0.0299457144078847 3734:0.0620715850713458 3759:0.0629120115002847 4211:0.0396910237335794 4234:0.091387533782586 4335:0.104024159908969 5833:0.0744471385517032 6364:0.127118364156278 7199:0.0387338606181093 9162:0.673964922089228 9274:0.336982461044614
+0 6:0.0145890578317981 15:0.0999668593429853 28:0.107732823329038 29:0.0529846138555899 48:0.0892505898961891 63:0.0315342219983757 75:0.0295672033416006 88:0.222801518298012 96:0.0903904428250722 102:0.278025380571154 142:0.0189157758662594 176:0.0756214832263215 255:0.135787942913389 275:0.0981055359885334 457:0.100598852119538 475:0.118216747755228 506:0.081617869269883 561:0.129282356286459 574:0.327709390875501 723:0.149730561039805 737:0.171912960458661 867:0.128242564937259 895:0.45512988441545 1626:0.209675861511207 1863:0.175758768612581 1955:0.219400928095855 2455:0.218412489821321 2975:0.207387826426046 3509:0.267595617780402 6248:0.283826270991979
+0 4:0.0167145122991272 6:0.0115925150832723 15:0.0397170035968693 26:0.0836260019385903 27:0.0112515412214113 29:0.0982374278194694 31:0.0294563068796137 41:0.0177930994896782 60:0.0586589309654892 63:0.00835240009716177 64:0.0335149518766374 67:0.0218581439483426 72:0.0240476508430916 81:0.0235273019215911 86:0.0300184225945253 88:0.0295064743182179 94:0.0231973505069909 97:0.024111844276225 132:0.070308876200363 134:0.110700109647515 142:0.00801628799043139 159:0.0232466878830551 174:0.0566506331345137 176:0.0801187844595728 185:0.0450040122795659 198:0.0336460114314856 199:0.0361251901361772 204:0.208776154562918 205:0.0305760758762823 215:0.0246173481118758 226:0.0299623735671659 228:0.0292246615027023 240:0.0347865750748023 277:0.104982554194332 284:0.0469330839348668 308:0.0856537660437582 322:0.03348893325503 341:0.0322864284079354 342:0.0360979752248105 346:0.0321940305858404 351:0.0548454994298734 365:0.0409425435478338 387:0.0818313226461312 409:0.0197344608073044 436:0.0682634216774543 473:0.0340218385292347 475:0.093935430735007 477:0.0413164769165578 478:0.0606064004470539 502:0.0533453760541067 504:0.0410480427564252 506:0.0648538371349408 538:0.0338591358533186 553:0.0987942601280016 628:0.0419898830713406 719:0.124775652500113 757:0.0367137821298813 876:0.0372929067107723 909:0.0680436770584694 965:0.0385976615562795 987:0.0315471951148764 1038:0.102613865378187 1126:0.0412082863555 1277:0.0456154543724899 1306:0.055330502894879 1446:0.0806613726427596 1495:0.0581122417809957 1614:0.0488300118430899 1675:0.0571017076903771 1785:0.0586560831912749 1787:0.111072769523148 1884:0.0581122417809957 2055:0.0595280194522988 2161:0.0513069326890935 2185:0.0482916940500151 2229:0.0549303579355883 2237:0.0557463437607879 2662:0.0608147580097255 2837:0.0581122417809957 3090:0.141754926699268 3117:0.134369025439375 3708:0.0604781398012034 3793:0.0649440905187558 8130:0.0765922184768693 8682:0.0855757643539967 9374:0.80887267628936
+0 274:0.257381960179964 640:0.222276977475001 1010:0.265166096935119 1038:0.316218390148908 1260:0.317961068443923 2240:0.323486603149887 3734:0.386311518804227 9162:0.599216930336621
+0 6:0.018522144023831 15:0.0211528460543114 29:0.0224229387118997 31:0.047064330260967 37:0.0292123586667195 80:0.0401998383767742 142:0.00480306170496797 171:0.0533834231773225 174:0.0452572706794565 245:0.0713871735887344 265:0.0583257263696231 337:0.0472016210002276 347:0.152157383726334 404:0.103695392470995 555:0.213450720535861 561:0.0547119274935588 842:0.357647761528442 847:0.0658412613112069 986:0.0552095469554459 1057:0.0841117385019269 1388:0.0798824727673021 1707:0.0705720112582883 2034:0.0831294075281695 2099:0.179522481294641 2217:0.109465553524346 2561:0.0920233242198006 2709:0.0924315478928455 2771:0.0890696971728969 3691:0.0946347080574906 3699:0.093718784313708 3921:0.0956029980336159 3963:0.367129675883806 4703:0.11324570852619 5029:0.11324570852619 7000:0.128076553993046 7386:0.244753117255871 8644:0.128076553993046 9055:0.621364707495042
+0 6:0.0290587081320315 15:0.0398231033424538 26:0.125774099845962 27:0.0169223977733857 29:0.0422142251341864 63:0.0251241379336844 64:0.050406725252276 75:0.0353354442249725 80:0.037840825625021 134:0.0416234374506803 142:0.0165777617158953 171:0.0502507693883385 172:0.136728683981505 174:0.12780443085327 255:0.0540928995753085 265:0.0549030476271955 289:0.0505642214459623 317:0.0346392388173193 423:0.0440327163141256 457:0.0801497318294952 478:0.0455762279938348 574:0.0870315424191522 631:0.0390047708109451 856:0.0436178282618255 987:0.0474472051306751 1433:0.0560329419018487 1917:0.0723183665085367 2924:0.0899928090235665 5677:0.215975444315625 5678:0.43195088863125 6640:0.113065899992286 7860:0.540688995670652 8220:0.588266909401865
+0 6:0.0160824701370093 11:0.0542019549306555 28:0.029690229724578 29:0.014602099050499 60:0.061033811391109 63:0.0260716724871701 86:0.031233756100512 122:0.129827351360612 142:0.0093834421521717 172:0.031530063309164 174:0.0589442051024256 205:0.0318139866751267 252:0.0870493364808743 276:0.031233756100512 304:0.0608881759862986 308:0.0297071887469194 327:0.0338130100581051 328:0.0407908988993801 346:0.200984677867907 373:0.0287021267430048 408:0.0236751255341868 496:0.0674298971917831 506:0.0224931753700753 515:0.0290483755936594 580:0.109139546248328 685:0.0424914648219274 687:0.0904815480485389 693:0.0478070263989074 727:0.0430459454348501 767:0.038459770394352 909:0.0353992553528419 916:0.0487192683312864 952:0.0749123682468308 996:0.0447654827152292 1027:0.0420151962491348 1080:0.0406527111819511 1229:0.0453804194567683 1236:0.0443098256576412 1363:0.0455218552640608 1485:0.100276309807871 1527:0.104560106703037 1578:0.337064251966677 1808:0.404261766951453 1892:0.213536632956696 1955:0.120929977617986 2223:0.204156856102257 2251:0.0580033044386982 2484:0.064399770386138 2616:0.053384158239174 2652:0.064399770386138 2791:0.0629266731792882 3969:0.0610308483211822 4189:0.125174410214181 4300:0.0728640078975506 4521:0.0769206895200905 5932:0.0769206895200905 5953:0.153841379040181 6799:0.60106720397719 6800:0.0858667434253129 9853:0.0935134335073211
+0 6:0.0415779773836386 27:0.0403550328012911 31:0.158472986981059 42:0.0829187175512153 48:0.169572705377954 67:0.0783969145784338 88:0.211657179319791 102:0.264118791831082 142:0.0143757001122144 153:0.120205486137458 199:0.0647837129247724 252:0.100021543474321 275:0.0931983820469972 289:0.241162138173201 308:0.307207738942666 507:0.0741050984901115 513:0.103711948773835 535:0.131426644803198 561:0.122815764795676 631:0.0930151168032502 671:0.169278772919526 723:0.142241168057326 895:0.28824312118815 1159:0.140929746221835 1359:0.15385405788753 1471:0.160516625159139 1734:0.191760959876505 2024:0.134975821828207 2975:0.197014466965556 6634:0.522287886532649
+0 6:0.0248525200846283 27:0.0361822890260861 28:0.09176165405702 29:0.0451297539294223 31:0.0473622496770085 37:0.0587945485320104 64:0.215552278862603 80:0.0809086104750214 174:0.0910875026473323 176:0.0644107540178246 190:0.106542154576457 308:0.0918140681998432 323:0.106300627758722 886:0.107030402440436 1792:0.146688486642246 3734:0.201562905084648 5676:0.216049464643527 8560:0.289015861944628 8906:0.825574108974244
+0 6:0.0205067458192392 15:0.0351289815718274 63:0.0221626469160569 75:0.0207802015216645 80:0.0667607270389182 83:0.0531342747470054 142:0.00797654678188231 159:0.0616838429106144 174:0.0751597124853933 204:0.0615529288221183 255:0.0954334701646401 405:0.0975116791910752 473:0.0902751288237198 480:0.0754150853751807 507:0.0548242548437821 565:0.436239222843179 593:0.0987579955122662 597:0.0916876694798946 852:0.101754837894148 884:0.1058563428486 974:0.131697854642874 987:0.0837087948840651 1055:0.111882934078511 1059:0.0939904160707102 1471:0.118753021636733 1573:0.39701183196874 1936:0.138054776063516 2237:0.147919941484999 2843:0.57959664267042 3957:0.17827051102829 4429:0.19319888089014 7561:0.218977242519061
+0 122:0.266791694884607 174:0.181693120341278 346:0.206509037934836 1578:0.346328959671299 1863:0.298613804988765 1955:0.372761748810294 5953:0.474209808188006 6799:0.529361504472879
+0 6:0.0165178002282051 15:0.0565914753065651 26:0.214480779293269 27:0.048095872764366 31:0.0629570100624987 88:0.252256932025182 96:0.204680973142666 102:0.157390824945376 134:0.236599514850305 142:0.00856661233433099 150:0.144049388636279 158:0.118557268537724 172:0.259068306043329 176:0.171238001424659 179:0.360167016978822 192:0.266790977927866 205:0.1307005881275 275:0.111075551514203 312:0.149714458800148 405:0.157087667735549 507:0.0883198238425713 561:0.146374094803911 587:0.209203497553903 768:0.206427824144245 1033:0.197866505798389 1395:0.176379713756341 1471:0.191306675879405 1665:0.356055924168463
+0 4:0.0195307153604234 6:0.0180609607069524 15:0.0773481030872266 26:0.156345634152004 27:0.0262945929894621 28:0.0666855362226974 29:0.0491954161786114 31:0.017209677881689 41:0.0207910320859762 47:0.0213709882531112 63:0.0390387337553504 64:0.0783236715144925 68:0.0277189288380088 72:0.056198806797108 84:0.0264997328632151 92:0.0298072550039833 94:0.0271058372365235 96:0.0279753883864487 97:0.0281744126867761 102:0.0430237299413408 103:0.0429822257274506 132:0.0547700754013719 134:0.194027707168533 140:0.0319068361493878 142:0.0304425560019798 174:0.0330978065927694 176:0.0702134085472868 178:0.0364400003100189 180:0.0347948472355863 198:0.0786299546791096 204:0.243952535128711 208:0.0338279121746299 218:0.0256121618841137 240:0.0406477128372713 252:0.0977582816789677 308:0.13344725383632 312:0.0818506980437656 317:0.0269118093772346 322:0.0782628665943619 323:0.0386256897597708 337:0.138079040054874 345:0.0331351791588453 387:0.0637459728235489 389:0.0384807875668956 405:0.0429408600921618 409:0.0230594904548318 423:0.102629281843379 457:0.0311348398272738 469:0.0522072769562065 475:0.0365874901026374 478:0.0354089408942268 506:0.0252603209004972 530:0.0371179868875615 553:0.115439956564235 561:0.0400122404049748 644:0.0430237299413408 714:0.0467271823183536 719:0.0971992764642041 723:0.0463408571469852 742:0.0463408571469852 772:0.04183537591019 814:0.050124229260945 834:0.0910012065092916 853:0.0477797108353138 856:0.0338874270829617 867:0.119071290603271 994:0.103389111335946 997:0.0429408600921618 1031:0.0554839084705642 1038:0.119903121363513 1216:0.0483415248073961 1377:0.043065373665456 1416:0.0545010058677679 1638:0.0679034860765871 1664:0.0535903841410855 1816:0.0496184857235349 2055:0.0695578060003164 2114:0.0646530561855156 2248:0.0593160882494598 2423:0.0582768808581953 2775:0.0667226886155146 3842:0.0692087971109537 3851:0.0878428063533685 4281:0.0727728892304372 5190:0.749325436463751 7101:0.0936656795579688 9289:0.11360499983475
+0 6:0.0115200982778365 15:0.0394688970814748 31:0.0439084462324641 42:0.137846788425749 57:0.0860063750327033 80:0.150017002866754 158:0.082686033626576 159:0.069304407315394 199:0.053849281758728 205:0.091155214338335 252:0.0831395428469183 255:0.107223541461189 337:0.0880730619678029 346:0.095978757062923 351:0.0817543310046074 365:0.122060343772053 608:0.502820840540351 641:0.091155214338335 665:0.142442763615159 1169:0.129825823410687 1174:0.204250749753766 1703:0.353156028561481 2040:0.156943304071361 3366:0.369043649438481 8419:0.492060393524261
+0 27:0.105184582996073 31:0.137685553239608 64:0.313313186869825 142:0.018734986897737 322:0.31306995282659 337:0.276174387914858 389:0.307864479606626 506:0.202094500670204 5190:0.749369685950048
+0 6:0.0426950334404532 15:0.146277040361139 27:0.0414392325784398 29:0.103373358603199 47:0.134719309480347 63:0.0922852372142104 80:0.092663864485068 83:0.0368751768670722 96:0.0881761985274177 134:0.101926649422317 142:0.0332143319660495 150:0.124112439911963 174:0.104321653184261 176:0.221307077700886 179:0.0775796545827845 180:0.109670590277217 265:0.134445495866235 308:0.210307563646014 593:0.137076061314174 689:0.355714955305371 997:0.406038524161329 1043:0.318334809262131 1138:0.140337956735141 1624:0.180248987971006 3679:0.295226770110175 4447:0.239187967109842 4488:0.276873537025571 6126:0.261040477079363
+0 4:0.0467202975332014 6:0.0432044317062834 29:0.0392275182743156 31:0.0411680399947027 41:0.0497351575276907 63:0.0700397254802548 75:0.0656708386644596 80:0.140654168020588 88:0.0824763076919025 96:0.0669211774838653 142:0.0140044229724676 158:0.0775254474121069 179:0.0588789482896245 255:0.100531524615513 276:0.167814604458047 304:0.0817859140638639 312:0.097899357379761 345:0.0792641437115095 346:0.0899885477269945 351:0.0766518940506122 405:0.102720751534924 475:0.087522571090874 480:0.0794437580305563 505:0.0776947979982298 506:0.0604263431459784 731:0.124472861594524 737:0.127276926399122 1033:0.129386325942634 1135:0.146709122219415 1236:0.119035248953298 1273:0.14501515992387 1282:0.151938633179953 1675:0.159610326954476 1746:0.12616682389007 1785:0.163955107381247 1808:0.217204195038704 2062:0.173005480989231 5953:0.206642054911907 6879:0.71760248232764
+0 6:0.0123601454540526 29:0.0448896386341339 31:0.0471102562674167 63:0.0267164319433141 75:0.0250499338740842 80:0.0804781318394418 108:0.228836191321688 142:0.0160258286572579 158:0.0887155107530123 165:0.120008679677192 174:0.0906028666657259 179:0.067377566263468 325:0.110989523286788 345:0.0907051713792312 490:0.127912303112549 498:0.127003838432299 531:0.278157543029209 641:0.195604530611479 731:0.142439339079812 1018:0.268252518542792 1080:0.124974190912179 1140:0.125541802267355 1627:0.16501751496908 2223:0.156904282449687 4656:0.229663333114779 6239:0.709406629301139
+0 6:0.0263025044012356 27:0.0382932923146108 31:0.100251063179098 42:0.078682396447953 48:0.241363842061216 67:0.0743916125975615 88:0.200843604268349 102:0.250624950577314 142:0.0170515561632314 153:0.114064182307747 199:0.122947820088243 252:0.094911438205997 275:0.0884368724106267 284:0.0798656053858631 289:0.343261730120096 308:0.291512481394038 331:0.102807394646499 506:0.0735741262541138 507:0.070319065591097 513:0.0984133005285858 561:0.11654110170895 633:0.136758383417551 671:0.160630312605238 723:0.134974060222213 876:0.126922005602179 895:0.136758383417551 1014:0.161274900533581 1159:0.133729638988771 1359:0.145993646975495 1471:0.152315823377971 1734:0.18196388359388 2024:0.128079900866961 2975:0.1869489887635 6634:0.495604174325813
+0 6:0.0219377780834523 26:0.0474763757309847 27:0.0319387741968494 29:0.0398368665750254 31:0.0418075317677714 63:0.0237092337356723 67:0.0620468174262067 83:0.0284210849029832 88:0.167514938984775 102:0.20903540073861 142:0.00568878536249075 153:0.0951359870743051 174:0.0804046194288767 176:0.0568565611462821 180:0.0845272463062372 204:0.0658483069322143 205:0.0867936546666112 209:0.0689046378930008 255:0.102093150647113 320:0.104116405987673 331:0.0857471887348819 423:0.0831058932938329 437:0.0986623786411208 457:0.0756359772746354 561:0.0972018781136255 574:0.0821302281908448 609:0.0776765303778834 952:0.204372947228172 979:0.672516709195134 1387:0.177923295768221 1550:0.523910294349273
+0 6:0.024905374104949 11:0.0223832939967946 15:0.0682624487129613 26:0.12935679019773 27:0.0145036952566502 28:0.0367827216716349 29:0.108541756027881 37:0.212110514246689 41:0.0229360305038441 60:0.0378068765008542 63:0.0538329208803514 64:0.0864042781330312 67:0.056352077011364 68:0.0305786742444249 75:0.0201899881116285 81:0.0303276511694773 88:0.114105144314423 94:0.0299023303469614 97:0.0310811500910368 102:0.189849850309133 132:0.0604206715139954 134:0.0713484767824511 142:0.0245416396794236 153:0.0864042781330312 174:0.073024975237678 176:0.0774572841578982 198:0.0867421603496245 206:0.0950168053193078 208:0.0373179177594559 214:0.0853502941367589 226:0.0386227208195372 229:0.026085223104052 232:0.04421240184846 252:0.0718959636481784 256:0.0338977256199661 265:0.0470558062816932 275:0.0334957212964837 278:0.0430021282535014 284:0.0302493291119414 292:0.0491181624460496 308:0.110411195749701 309:0.0366573339881529 317:0.0296882847487995 323:0.0426106792052755 325:0.0447282050112297 337:0.0761622862574549 351:0.0353490421568169 365:0.1055532149711 373:0.0355585776588982 375:0.0353112875426509 387:0.0703226069361089 389:0.0424508275393208 404:0.0418294859244184 411:0.0746358355189119 442:0.0423874067218657 448:0.0451089305111323 498:0.05118189135685 502:0.0343821820679922 505:0.0358299912066278 506:0.195064892315298 507:0.0266335495440419 528:0.0521162296799266 530:0.0409474275242273 546:0.043035260782787 594:0.0476937229449539 686:0.0589057184624263 696:0.0549739210782011 800:0.0878523362126564 806:0.0534705210631076 856:0.0373835727854925 867:0.218926341424132 884:0.0514248695188427 909:0.0438555366228383 998:0.0551337727441557 1001:0.116771983800559 1026:0.0689193473802 1027:0.0520519135064729 1038:0.198410182649467 1043:0.0557084527854405 1080:0.050363953882284 1216:0.0533288911776845 1228:0.061334115831558 1269:0.0508841200655654 1272:0.0629438756179538 1309:0.0588001800102935 1338:0.0629438756179538 1339:0.0601238422365994 1446:0.0519878985808372 1448:0.062523314385121 1509:0.0629438756179538 1591:0.059119272207835 1604:0.0668756730021789 1613:0.0571205113162962 1625:0.0672606889311349 1643:0.0666871574390871 1786:0.0666871574390871 1816:0.0547375953922546 1880:0.139194393582891 1903:0.0837155798542403 2055:0.076734043485981 2160:0.0771302208378822 2163:0.0629438756179538 2165:0.0745715704318778 2270:0.073299288572991 2280:0.067656866283036 2561:0.0742422252993942 3170:0.617041766703057 3469:0.0824722538571101 4234:0.0793041837301038 8142:0.0969054964531131
+0 6:0.0354826612838334 15:0.0405222673340903 28:0.174681021141911 31:0.0450803019092105 60:0.17954472897116 63:0.0255652359669814 75:0.0239705463591484 142:0.00306705694876102 159:0.0711540460547408 161:0.115424436621237 176:0.0613073968640678 199:0.110572889162394 229:0.0619393182648065 276:0.367524566858997 346:0.0985402972895068 365:0.125317965460546 455:0.0863585097099821 510:0.10692824708994 515:0.170904703610753 592:0.466033197604195 626:0.111628395477269 655:0.0895581547820626 686:0.419614587413041 856:0.0887672305274049 982:0.132479336439751 987:0.0965604470363291 1001:0.138637439292442 1331:0.133704110179785 1501:0.193124273325252 1980:0.146862528334943 2017:0.355742817973069 2024:0.115188416291793
+0 6:0.0168641446147227 15:0.0385187216354547 23:0.0404358613999393 26:0.0729926670845637 27:0.0491043445533733 28:0.0415110633672621 31:0.0214256964716078 32:0.210698582710272 37:0.0265974306461964 41:0.0258844091021341 48:0.034389583213936 63:0.0121506059821144 64:0.048755683399425 80:0.0366013722278669 81:0.0342262070956871 88:0.085848747471729 118:0.147238295973257 132:0.0340938110330773 134:0.0805201737738163 140:0.0397233574855855 142:0.0145770610360227 158:0.0403477237510246 162:0.0304454268828111 174:0.0824121825879359 176:0.174828511040501 185:0.0327346639565949 192:0.0453975062409358 198:0.0489463415327313 199:0.0262764562441645 204:0.033746212173819 221:0.0535119906625532 229:0.0294384238036551 232:0.0498958133423167 274:0.0607510348983283 299:0.0465358621834126 355:0.101497140767914 420:0.0571615016014811 475:0.136652027362664 499:0.0418706145337846 574:0.0420904383960176 667:0.054143780551031 723:0.115386835975805 744:0.0693619682720257 757:0.480682469740009 799:0.113421324596624 858:0.0563965160706422 867:0.0988275453105272 880:0.0661233335782164 966:0.056149726060264 997:0.160381473881627 1007:0.259555004503585 1015:0.140504128103237 1122:0.274630205984634 1135:0.0763540144902132 1140:0.114192567096662 1154:0.0763540144902132 1201:0.071691620239278 1228:0.0692184877342068 1229:0.0634481270498024 1277:0.0663588197796682 1294:0.127692378108637 1312:0.0730947731846686 1568:0.0834229721027929 1579:0.0705605552667265 1591:0.0667189306097039 1816:0.0617739984328475 1877:0.0911828651242384 1880:0.0785437704143958 2054:0.0875056023911311 2264:0.0763540144902132 2306:0.158151373601634 2528:0.0646745248128408 2792:0.0861635348586114 2975:0.159819244281328 3090:0.206217163966032 3144:0.100730954715531 3356:0.218724989401927 3589:0.0889756710449031 4004:0.0924174475765587 5149:0.098671360294506 5886:0.120053629107421 7223:0.105920718169308
+0 37:0.168186995242956 88:0.271429279668152 102:0.338706079538262 206:0.339033921465302 214:0.304542389340071 506:0.198862912902972 2280:0.482819278398328 3170:0.550423920195478
+0 2:0.0489235519680435 6:0.0359531292007992 26:0.155615054920199 27:0.0348956298383637 28:0.088498566550645 29:0.0435249186883164 31:0.0456780258388155 63:0.0259042078162436 64:0.103943569305167 80:0.0780314622946372 96:0.0742524364692925 134:0.0858315757217083 142:0.027969510087376 158:0.0860184111391169 176:0.0621202773598826 185:0.0697879216209244 204:0.143888937629684 404:0.100640990541929 561:0.106200718203562 582:0.101082378981244 755:0.125081948624057 823:0.136548105873739 834:0.120767962389278 965:0.239414260462608 987:0.0978407510139556 1122:0.146372903929969 2163:0.151441832256439 9625:0.836214966545996
+0 6:0.0452009386746181 15:0.0774312490010112 27:0.0658071463902364 29:0.0410402492950029 31:0.0430704438795836 63:0.0244254367062971 64:0.0980098326534399 75:0.0229018446638602 80:0.0735769476873296 142:0.0117212617123231 165:0.109717660497517 172:0.0886175099908734 174:0.0828334633100803 179:0.123199571236497 180:0.0870806255330054 185:0.197411996673415 200:0.109166921599514 204:0.0678374371403537 205:0.178830994050884 208:0.169321378691359 237:0.0971088747926831 408:0.133081285184176 515:0.163285096458502 565:0.120194730876668 582:0.0953119766272147 626:0.106651560418884 719:0.121629701928993 723:0.115976678982741 761:0.114907408030436 768:0.141222367551493 884:0.116664196835411 1031:0.138858878267793 1047:0.127348069019042 1055:0.12330609855403 1094:0.116387357632391 1135:0.153488653236525 1378:0.138575718448147 1509:0.142796603343561 1627:0.150866885063834 4031:0.223983329682371 6618:0.23441591542727 7387:0.223983329682371 8116:0.23441591542727 8117:0.468831830854539 8434:0.241334656348909
+0 6:0.0191292491869581 26:0.0413983320642988 27:0.0278498929113688 29:0.0347368518654165 31:0.0364552276003108 37:0.0452547896902886 134:0.0685014199008854 172:0.0750066914824966 174:0.140222040261925 176:0.0991552856395374 190:0.0820066301875371 215:0.0609330308787361 255:0.0890229316561186 286:0.053593003376159 323:0.0818207244256246 502:0.0660204224998261 506:0.0535088892433203 667:0.0921241391496759 742:0.0981637486826128 796:0.168152324114622 886:0.0823824397643227 1096:0.125323144319985 1154:0.129914235466124 1792:0.112907689211481 3734:0.155145113054199 5676:0.166295572111062 8560:0.222458584614196 8906:0.847270903129979
+0 6:0.0465890942312331 15:0.0399046110758746 26:0.151237832811111 28:0.0860092323257096 29:0.0423006268839248 63:0.0755266819041326 67:0.0658841796288869 75:0.0236051779100063 96:0.0721638248839051 134:0.0834172600174883 142:0.0181218459982229 153:0.101019789919597 158:0.0835988400300117 174:0.0853773426130144 176:0.120745851053442 192:0.0940617836440171 232:0.103382092717578 242:0.0816132328037213 255:0.108407227882608 351:0.0826568519452855 373:0.08314680991631 404:0.0978101078287716 437:0.104764275536546 475:0.0943791447051831 541:0.120104054922598 697:0.249728771657957 848:0.128732154490842 852:0.115587957565814 952:0.108506322523955 1036:0.131666139803625 1083:0.124864385828978 1126:0.124208814200358 1198:0.138746186831062 2066:0.155934932399054 2694:0.170693711728549 2833:0.703877319071782 9093:0.293049419037993
+0 6:0.0280720650046555 13:0.093286236727735 15:0.0961774298978721 27:0.0408695603543946 28:0.103649010597385 37:0.0664111479515841 42:0.251927799054593 60:0.106534948068102 142:0.00363974765096725 199:0.196829120055334 204:0.0842609468295218 406:0.131606525492327 414:0.1037082147835 515:0.304224866328833 936:0.328475855998967 1154:0.190648405872697 1312:0.547531210178985 1463:0.20654803105398 1536:0.230757206060892 1787:0.201727708605713 2825:0.189532028707564 6262:0.326456714902902
+0 6:0.0197349044234892 15:0.0676135648167161 28:0.0728661506515248 57:0.0736681037846117 60:0.0748949896467078 80:0.0642479591335072 204:0.0592361741837498 336:0.0902149210605611 513:0.073840005890866 515:0.0712909038368763 586:0.145070931474417 1665:0.106350868998936 1746:0.115260870820509 1845:0.312365626161796 1858:0.127046885927717 2223:0.125261107536784 2340:0.547874734789752 2387:0.13402747777067 4425:0.171560691670991 6237:0.655572395863035
+0 6:0.0397250186094985 26:0.171940832134456 63:0.0858655555529547 142:0.0103012758872262 232:0.35260230960588 437:0.357316480517441 541:0.409635421817485 697:0.425871344576984 2833:0.60017349683062
+0 6:0.0291958472858106 15:0.0333425364940123 19:0.11815672005259 29:0.0353445418354061 81:0.118507417763227 96:0.0602969155660762 142:0.00252363613813008 180:0.0749952757372603 185:0.170014478349774 255:0.0905803077498446 351:0.0690644270965483 357:0.0900888332332691 361:0.174389252346725 387:0.0686976260690772 506:0.054444979117683 582:0.0820842515136969 623:0.135087784443798 697:0.104331184518728 733:0.109843805911125 739:0.0994166287462625 767:0.0930922985101132 1017:0.114678288295926 1171:0.161133049623637 1262:0.149921820473964 1613:0.111601196208399 1951:0.121359957046153 2285:0.131412922775678 2401:0.131797140842169 3167:0.150695865827621 4538:0.197014388620401 4764:0.757330008021186 8932:0.215523286318687
+0 6:0.0130273361927833 15:0.0446328302969389 60:0.0988788380572436 63:0.0281585635129441 75:0.0264021092144743 80:0.084822276852397 142:0.00337817800708142 179:0.0710145532533307 180:0.200779650681608 345:0.0956013637844235 457:0.0898300001466083 574:0.097542977247928 600:0.453000178750149 608:0.142151915211074 620:0.185187485599932 781:0.141172548835008 5803:0.263726479685451 6464:0.556439365272294 7373:0.498466553469509
+0 4:0.0247324434212957 6:0.0114356202672461 18:0.0306072778393913 26:0.173237810010448 27:0.0332977835883925 29:0.10382985848794 33:0.0632810014277314 40:0.0357259765157621 67:0.0323434688863252 74:0.0468736375656206 75:0.0695286797154304 80:0.111687685103027 81:0.0348133198993714 142:0.0281715174129525 150:0.249321048416694 154:0.0413330983575859 158:0.0410398444159734 172:0.0448396083355486 180:0.0440619595711579 204:0.0686501823888785 221:0.0544299297955919 252:0.082529872424695 262:0.107025601542504 286:0.032038331959669 303:0.255436596951287 322:0.0495535336088046 337:0.0874272135659747 345:0.0419602625237826 377:0.0440078607965736 386:0.045538289831804 418:0.0590309623168144 432:0.0537120241351178 437:0.102860507797201 441:0.0403191543683976 455:0.0417484098496267 480:0.0420553454153315 491:0.0682384650693821 561:0.0506689311534705 657:0.0593867287879953 683:0.0691500941360551 698:0.064239555108624 757:0.0543253385476572 781:0.12392369681307 930:0.050061553531708 944:0.0625669945185742 1013:0.0708478169273027 1057:0.0778962117146138 1126:0.0609758509573249 1241:0.285210366565439 1433:0.0551273170106863 1450:0.0815736374454973 1591:0.0678634202196559 1858:0.0736187980660425 2248:0.0751140841249016 2975:0.0812803835038848 2976:0.154418017229658 3251:0.0815736374454973 3355:0.55619243791371 4292:0.0976678636275885 4573:0.107737671173734 4729:0.109390633223966 5445:0.0968631421574567 5476:0.204917766112784 7015:0.333715462748226 9806:0.143862074631575
+0 6:0.0091124004573355 17:0.0248272483558791 26:0.138043434660774 27:0.0265331246848228 29:0.0330944619656713 33:0.0252125294857125 41:0.0209796381668443 67:0.0773180554575748 75:0.0277017406153081 82:0.0341747869198181 102:0.0868280403805625 139:0.0372737078566855 142:0.0165408470717288 158:0.0327023360592187 172:0.0357301534988793 199:0.0212973972917172 203:0.0345407071847161 232:0.040441182405663 252:0.0328816990093943 296:0.0410859013277895 303:0.0407086018682512 317:0.0271559401579827 331:0.0356172224402413 369:0.0407424351316026 406:0.0427204540487397 408:0.0268288668229814 437:0.081963734051017 472:0.0415109184592988 475:0.0369193939296588 500:0.0471510684770892 513:0.0340949056053558 527:0.043456041685907 530:0.0374547031221201 538:0.0399229161426726 586:0.033492546858756 657:0.0473219328659737 695:0.0449759361828717 764:0.042138889507845 772:0.0422148859922021 871:0.0523335928795244 882:0.0342149198055786 890:0.0478490013171799 912:0.0433303985863356 930:0.0398912269414764 944:0.049856107158275 1027:0.0476120011732045 1086:0.0574453539950128 1213:0.0579718058095662 1241:0.284085057695957 1366:0.0493739003711281 1382:0.0596988761270747 1548:0.0501402417339596 1602:0.062840654093155 1662:0.062840654093155 1665:0.0491064809085399 1710:0.126901197261502 1728:0.0739048556130638 1776:0.0527692252203809 2166:0.515100421909456 2185:0.056940178872208 2229:0.0647677508088128 2906:0.0816437019595082 3653:0.0691607104400857 3698:0.0691607104400857 4825:0.0871672224963048 6152:0.0825701541159407 7185:0.0973049718597811 8499:0.583829831158686 9580:0.343906706596605
+0 75:0.0479187321888 111:0.14786458033577 142:0.0122625056878927 158:0.169706428054259 232:0.209866616254196 303:0.211254370379952 1377:0.225512012308164 2166:0.445512784026597 8499:0.504957174201277 9580:0.594893064670032
+0 6:0.028357351192096 15:0.0485774230701384 26:0.184107650484479 27:0.0825698056658055 63:0.0306471815413745 64:0.245950577693894 94:0.0851172601882696 97:0.0884727815040765 134:0.203094099752855 142:0.0477975820744068 176:0.0734942921688209 192:0.114505039282784 198:0.123456181275883 226:0.109939932407626 265:0.133944788254762 317:0.0845079774113253 387:0.200173951737057 441:0.0999809711649615 719:0.152611705602795 867:0.124635171565867 1031:0.34845913316322 1916:0.173173292590209 2376:0.393624309758947 2683:0.200840270612256 5209:0.267161282614701 5370:0.508142533886304
+0 6:0.0326816027766745 15:0.0559850612963891 29:0.0296733024721043 81:0.0994922064304035 85:0.0500705385542657 96:0.050621921258993 159:0.0491527731779892 174:0.0598910204941481 179:0.044538449504244 180:0.125923686395128 185:0.0475782188586393 278:0.0705359046309848 279:0.0925061373484981 339:0.127100556618794 355:0.0983473906719615 367:0.0697361257370543 414:0.0603687452218119 473:0.0719357407273745 530:0.134331204525808 731:0.0941563737434043 804:0.0769671010134366 1126:0.087130758690228 1573:0.527264828868703 1910:0.0999914238377496 2293:0.121778682497738 2825:0.220653894704598 4315:0.13527830526141 4813:0.607255460959266 8412:0.348984052380718
+0 6:0.00711903505215745 15:0.0243904570096934 26:0.0616262926341151 29:0.0258549474278478 63:0.0307755626630869 67:0.161078653071129 142:0.0110764168310154 204:0.128210724912726 289:0.0619381397175848 437:0.128067834254405 543:0.0787981057962373 723:0.073064150180985 827:0.0608081860772366 867:0.125157268617723 975:0.0882100105263049 1005:0.225138561392608 1999:0.117870718095844 2153:0.113342859532706 2730:0.114028310035479 9299:0.895586883827954
+0 6:0.0166728827056072 26:0.0360824164069342 28:0.0615604087535366 29:0.0302763297740405 31:0.0953221521418504 83:0.0216002465313922 88:0.0636563310674754 132:0.0505607125645768 151:0.065836425237102 176:0.043211430593839 204:0.100090455256429 218:0.0472874702358961 274:0.0900930556139622 309:0.0613505570433581 404:0.0700067894498208 422:0.0760181929597507 427:0.0885557444510267 493:0.148844900251268 515:0.0602295735587254 561:0.0738741866376909 609:0.0590347698405186 1134:0.202826940884607 1227:0.0910931570256544 1389:0.106317812364544 1639:0.112569035554489 1651:0.114264157296436 1697:0.113914934086013 2581:0.129769758094679 3482:0.127152772794057 3787:0.458726368682565 3880:0.453233755804955 5833:0.162183267061458 6466:0.534114273210371 7130:0.184618437578187
+0 6:0.0258849335767529 15:0.0443420600528739 29:0.094009032389503 31:0.0493297533916181 42:0.0774332578619139 96:0.0801885438893998 159:0.0778613140560858 204:0.0776960658731292 206:0.123442418692519 346:0.215658208066923 365:0.137130943447498 404:0.108686729633197 414:0.191256343314203 507:0.0692027007861415 561:0.114690929452181 587:0.491762089690402 903:0.144101190519041 963:0.109809091191123 1418:0.164296486000761 2117:0.480966841756912 2887:0.442149372487393 2941:0.186010838069215 5679:0.22717739311735
+0 102:0.258187878456577 142:0.00702644345668972 204:0.325327377213878 252:0.195551024071799 867:0.238184554956534 1005:0.28563810764435 2153:0.431401529506944 9299:0.681750139501733
+0 6:0.0176712848925931 15:0.0605434179381118 28:0.130493513376949 29:0.0320893308245513 67:0.0999597118036542 142:0.00229121077009198 185:0.0514520824378438 278:0.0762790046992757 325:0.0793407930911872 423:0.0669433299517474 499:0.0658118963302032 502:0.06098857740424 506:0.0494306293395766 1227:0.0965479790141327 2340:0.122646280875829 3136:0.144271339724472 4811:0.150924619975133 6079:0.16012473593975 9682:0.411007142737273 9871:0.822014285474546
+0 6:0.0210839531103002 15:0.0361177637252484 26:0.136885742387118 27:0.0920871222698869 29:0.0382864036519119 31:0.0401803699579754 63:0.0227864631715427 64:0.182866531236341 94:0.0632854708653785 97:0.0657803320251474 134:0.0755011715861767 142:0.043739008893627 198:0.09179081359062 204:0.189856412596136 226:0.0817413574395498 265:0.0995891899705936 317:0.0628324634806977 337:0.0805951591742175 351:0.0748129243298791 441:0.0743367775672885 457:0.0726922021110712 506:0.0589766436081339 510:0.0953058507834394 561:0.0934187515519933 679:0.132618376681004 856:0.0791188171259184 867:0.0926674037849275 987:0.0860649623208156 1665:0.113620856077944 1980:0.130899538635433 2215:0.178587422425489 2683:0.149326600343021 2889:0.318540564816653 6165:0.225140836785677 6296:0.205091372522467 9911:0.700386348886082
+0 6:0.0139131474782082 15:0.0476676997585398 26:0.12043987586405 27:0.0405117486359429 63:0.0300732429970691 64:0.241344590799402 94:0.083523244884064 97:0.0868159263913626 132:0.0843835661697155 142:0.0360788177449512 176:0.0721179435148612 178:0.224570600266722 192:0.112360670624516 204:0.250569734652192 226:0.107881055812991 256:0.0946831904108417 317:0.0829253723201469 387:0.196425236824636 409:0.071054933716103 496:0.233337813427249 499:0.103631470493293 515:0.100520462390145 582:0.234701247564776 631:0.093376334243881 663:0.130212698865997 694:0.204739709523399 719:0.149753702492807 801:0.168262925029533 867:0.122301093019649 1031:0.170966719598966 2423:0.179572914443677 3024:0.233834513753462 7990:0.563317834355888
+0 6:0.0417084454207659 15:0.0952646004711965 28:0.102665267664978 60:0.105523814419915 63:0.0300509096673554 75:0.0281764159832621 80:0.181045214064209 106:0.0973159682455968 142:0.00360520244878204 158:0.0997880931626144 159:0.0836387277324368 179:0.0757869599385796 186:0.157786943482676 204:0.166922435826427 229:0.0728071847424865 245:0.160750722461591 346:0.347490503463281 414:0.102723909938351 535:0.131839050058401 560:0.165614946481137 614:0.336275935450013 655:0.105272019503623 731:0.160217192207675 784:0.136521409429617 982:0.155724147325842 998:0.153885391806768 1001:0.162962750278207 1047:0.156677866783718 2969:0.270475600483869 3010:0.235522049149625 5134:0.258327612458861 5326:0.288404730846805 7173:0.307891089315838
+0 6:0.0123507211897523 26:0.0534573262180652 27:0.0359623380040743 28:0.0912038377846228 31:0.0470743360180987 64:0.107120971594924 94:0.0741437055879845 97:0.077066623736232 132:0.0749074140406789 142:0.0128108875298479 176:0.064019203025444 187:0.115165066508204 192:0.0997427302305647 226:0.0957661696671637 265:0.116676252541957 317:0.0736129732461109 337:0.188846623780088 387:0.1743669675357 499:0.0919938066171883 993:0.271446948131917 994:0.141402233124287 1195:0.33258832251668 2162:0.212799114929472 2165:0.184902397210545 3653:0.18747741737866 3803:0.203050107935533 4704:0.433581123117431 8630:0.527538965585917
+0 6:0.0266631287638332 15:0.0456751435477979 26:0.230810743830108 27:0.0776366362837759 31:0.0508127850770343 63:0.0576323043820823 64:0.231256152176135 94:0.080031892014551 97:0.0831869362324356 134:0.190960153372664 142:0.0587701697250125 166:0.198945053451262 176:0.0691033433351928 179:0.0726729605146971 192:0.107663885312237 198:0.116080237387175 204:0.160063784029102 205:0.105488823045627 226:0.103371522756635 240:0.120015232735464 252:0.0962127354659132 274:0.144076029621105 291:0.107304203128774 317:0.0794590111052868 513:0.199525221175839 582:0.112445253574963 592:0.262647361549577 719:0.143493852080575 834:0.134343733215001 867:0.117188788383359 1031:0.163820144440259 3962:0.225844717772856 4282:0.463579119987159 6265:0.29524019692584 8692:0.29524019692584
+0 11:0.0496966603956398 17:0.165723750201994 23:0.0198879452821995 29:0.0301238213019298 30:0.0166188737980781 33:0.0305991874042275 37:0.0784899681161896 38:0.0225257256858346 41:0.0381929080323301 48:0.0338282962478169 51:0.0187777653620236 59:0.0343360782280705 63:0.0119522907909769 67:0.015639510175668 72:0.0344122063566115 74:0.0226654949799786 75:0.0112067395299291 79:0.0187496511157878 83:0.0573105103509777 85:0.0169435803706946 87:0.0257571050409448 94:0.0663908518783691 97:0.155268302433639 111:0.017290522535074 118:0.0362087893317989 137:0.0226342118342318 142:0.00716957132166194 144:0.0164374116462952 148:0.0243036347620977 158:0.0198445957237078 159:0.0332660277612623 162:0.0149742570820925 175:0.0267633661996505 176:0.0573250202660801 178:0.066939898643963 182:0.0281142722509263 186:0.0313786745958821 199:0.0775427611879447 203:0.0209601653181727 208:0.0207138400387995 209:0.0173680912282077 216:0.0240548861790485 218:0.0156830909805084 226:0.0428761790020499 240:0.0248898074852444 244:0.040685810720884 246:0.057156398012297 256:0.0188154138367802 269:0.0295231507652706 271:0.0610281106710948 274:0.119518983008163 276:0.0214781926010775 284:0.0335806391205729 330:0.0274971718578979 333:0.0557850635380713 336:0.32861166369399 337:0.0845499164607827 341:0.0231009516093963 365:0.0292944052316312 369:0.0494470580035598 372:0.0545850467213196 375:0.0196000314496966 380:0.0339744527789272 387:0.136617464618827 403:0.0320216861344543 411:0.103569200193998 430:0.0215185088275517 433:0.0223583213542748 439:0.0297990412452276 442:0.0235277318567375 459:0.0252557354007436 467:0.0347044532660402 478:0.0216819511012091 479:0.0350173286222591 485:0.0382667125305779 500:0.0286124480579708 501:0.0287510117657645 504:0.0293698899548625 505:0.0596638358465985 506:0.0154676482474156 507:0.0147833297794579 509:0.0256634476526773 526:0.0331821348495862 527:0.0263702133525816 532:0.0319680735290308 576:0.0541304118322437 593:0.0266300384779719 609:0.0391582658917293 613:0.0511418649123353 633:0.0287510117657645 639:0.0318094722382238 640:0.0774131128169349 643:0.134970074865078 655:0.0209351697367674 658:0.102283729824671 667:0.0266300384779719 695:0.0272925233606598 715:0.0341149410919135 742:0.0283758896277202 749:0.0321848354782113 763:0.0320216861344543 772:0.0256170490242856 774:0.0930462749272458 824:0.0309217675874811 829:0.0205105740006554 848:0.0305582895838693 868:0.0394444930251282 880:0.0325220533098911 883:0.03224000773662 886:0.0714421071746048 936:0.0970547124222764 963:0.0469156258186392 976:0.0405190753916698 982:0.0309684517476904 996:0.0307834144745127 1003:0.0292196642123457 1007:0.0319148371555162 1011:0.0331821348495862 1033:0.0662393940626647 1034:0.0348592780702881 1036:0.0312547556158211 1038:0.330391165870609 1039:0.0403559260479128 1064:0.0512340980485712 1105:0.0347044532660402 1114:0.0338365189409523 1146:0.0316541189848033 1213:0.035178742203031 1227:0.060422867292681 1236:0.0304700775190911 1242:0.035097606113109 1247:0.0428122240606081 1260:0.0369124389196071 1263:0.0375539041258043 1294:0.0314020641684948 1305:0.0251462652170033 1318:0.0366109627422322 1319:0.0291825680401698 1322:0.0310626908737821 1337:0.0355979732885458 1359:0.0306925612677333 1365:0.0334371555719702 1370:0.0454545316184584 1374:0.0369124389196071 1411:0.0350173286222591 1426:0.0328149913298162 1436:0.0371202917049998 1446:0.0288566211571097 1457:0.0366109627422322 1462:0.0679489055578544 1489:0.0972239210551277 1507:0.03789619461036 1533:0.0472267694107864 1544:0.0362267716824942 1545:0.0353436650481622 1559:0.0401962116836546 1576:0.0306475394614462 1627:0.0738248778392141 1639:0.112002000786817 1651:0.11368858383108 1664:0.0984449739894485 1677:0.0435129821164896 1680:0.0457773953264736 1687:0.0847572232796073 1758:0.0464675210721447 1760:0.0421707588544108 1788:0.0340443717263451 1800:0.0437617306995387 1802:0.0412092011373409 1838:0.0423786116398036 1853:0.040685810720884 1854:0.0461146131581534 1866:0.088037826053502 1922:0.0405190753916698 1943:0.0331821348495862 1951:0.0344779841471495 2001:0.0724535433649883 2042:0.0355122531438023 2045:0.0464675210721447 2058:0.041392008828697 2088:0.0448473154640834 2120:0.0408562932233496 2140:0.044018913026751 2142:0.0359508812025371 2171:0.0382546621816858 2185:0.034552725166435 2206:0.0356846731132925 2218:0.041030695205155 2246:0.0350173286222591 2256:0.0419684494759826 2311:0.041030695205155 2339:0.0432721316623093 2402:0.114399843476058 2446:0.0445610115959527 2515:0.0485304515971131 2541:0.0548017609856032 2564:0.0421707588544108 2571:0.0368106098458153 2575:0.0385034107647349 2596:0.0382546621816858 2616:0.0367101295411788 2646:0.0412092011373409 2656:0.0520959706129973 2659:0.0430386931794987 2666:0.0746680005245444 2723:0.0360417344093165 2740:0.0800795812697564 2779:0.0415793307433897 2783:0.0464675210721447 2787:0.0520959706129973 2838:0.0415793307433897 2933:0.0590470914667207 3004:0.055971171488066 3030:0.0476369315746074 3055:0.0480705439954119 3214:0.0548017609856032 3271:0.0495434410507994 3274:0.0501056353988872 3307:0.0537887715319169 3471:0.0480705439954119 3492:0.0507128515532622 3574:0.0513729330929572 3734:0.0448473154640834 3845:0.0548017609856032 3852:0.0537887715319169 3981:0.0495434410507994 4008:0.0528952515094112 4080:0.101425703106524 4202:0.0573542905478011 4238:0.0501056353988872 4305:0.188907077643145 4394:0.0528952515094112 4398:0.0990868821015989 4704:0.0485304515971131 4893:0.101425703106524 4923:0.0468376506781935 5369:0.0495434410507994 5411:0.055971171488066 5493:0.100211270797774 5504:0.0513729330929572 5618:0.0507128515532622 5709:0.0590470914667207 5919:0.0573542905478011 6089:0.0612294914228698 6099:0.0573542905478011 6108:0.105790503018822 6189:0.0590470914667207 6383:0.0573542905478011 6737:0.0612294914228698 6988:0.0548017609856032 7001:0.0513729330929572 7694:0.0573542905478011 7696:0.0573542905478011 7880:0.257221645606098 8200:0.0590470914667207 8340:0.0612294914228698 8666:0.0643054114015245
+0 6:0.0293098548583634 26:0.126861132114917 27:0.170686535801876 29:0.0532238393917711 31:0.0558567364223679 63:0.0158382995067249 64:0.381317829319049 75:0.0148503496336339 83:0.0379718433769738 94:0.0439881448228334 96:0.0453992778411573 97:0.0457222602921206 111:0.0458242657123131 142:0.0437027153706759 162:0.0793711507541038 166:0.164020060054484 178:0.177407692335143 198:0.191404482565309 204:0.395893303405501 218:0.0415641648089799 226:0.0568163690638347 232:0.0650391294895514 262:0.068577496760813 274:0.158377794075385 317:0.043673270742406 322:0.0635036335524832 377:0.0563967665256016 389:0.124895493293119 422:0.133635091278849 455:0.053501244561468 475:0.0593752481908291 496:0.0614445568052845 506:0.0409931869783791 527:0.0698877469496854 575:0.0764773576264442 582:0.061803588224509 609:0.051889663178659 625:0.0814630956534942 653:0.0748536323642743 834:0.221519126086402 867:0.0644107900645702 1038:0.194582289461295 1192:0.182358487542556 1213:0.0932325802685612 1232:0.0829623160687653 1312:0.0952789442583384 1435:0.110195761652676 1446:0.0764773576264442 1527:0.0952789442583384 2292:0.128617993158594 3090:0.134401906009015 3138:0.14523855203409 3292:0.127399121484778 3408:0.126249938702893 3563:0.252499877405786 3962:0.124131641809219 4128:0.152003402122305 6604:0.152003402122305 7021:0.142553873315137
+0 28:0.0696432850333258 31:0.0359459807909065 100:0.0582782164145571 132:0.0571993296977676 144:0.168208081978996 185:0.109838165899513 218:0.1069926218758 274:0.101922265928522 299:0.0780734110720692 360:0.348384441145219 389:0.0803751040669001 398:0.0733554784033315 683:0.11405688289255 781:0.102200515788239 998:0.104388606271755 1025:0.229914085575956 1430:0.141830510886066 1560:0.431543762189468 1838:0.144556923645798 2531:0.28631565366025 2664:0.190922261256119 3190:0.572766783768357 4650:0.157300731555763
+0 6:0.0307198951801655 29:0.0557843351699377 63:0.0332004988103735 75:0.0311295423562201 81:0.0935202038183632 142:0.00398305811494183 144:0.182636207686791 199:0.0717981848443915 204:0.0922086584636767 262:0.143753254486634 346:0.255940295419883 351:0.109004472809834 408:0.090445978583079 411:0.230151636566808 423:0.116374790606816 424:0.15820058306759 436:0.135672359072244 437:0.138158838080655 582:0.129553678187067 781:0.166450218154756 953:0.503519208682015 1017:0.18099688774594 1410:0.211849590657611 1449:0.196817561799237 1620:0.185760246835282 2067:0.191542574001909 6758:0.318631982504912 9013:0.340160675923215
+0 6:0.00977096464386782 15:0.100428621861021 26:0.0845828573744847 31:0.0372416853882214 60:0.0741626389606243 63:0.0422398446521247 96:0.060538646920867 102:0.186206415450463 142:0.00506750687622077 186:0.0554467073927046 204:0.0586569411401368 232:0.0867278310017306 274:0.105596143942882 276:0.0759047394967016 372:0.192905605641565 440:0.110284171587694 505:0.0702847457329474 648:0.142619358654103 824:0.218557376507328 880:0.1149341581126 933:0.113548844609928 1031:0.120066992396654 1149:0.0937404812792865 1201:0.12461283438142 1215:0.229061992865797 1259:0.154655600234568 1322:0.109776716441341 1838:0.149767605519554 1918:0.141502124228573 2852:0.336701411403804 2979:0.151300008103654 3555:0.165526016988386 4839:0.197804222638068 5880:0.208674639391887 6480:0.544661626240389 8995:0.208674639391887
+0 6:0.020474530269184 11:0.184011462156815 15:0.0350737948798874 29:0.0371797511770365 31:0.0390189731796393 60:0.0777019082345584 83:0.0265254011101567 111:0.0640214917421992 198:0.178275277075629 252:0.0738814481235933 276:0.39763573583676 304:0.155033000732647 372:0.202111654568429 373:0.146162264324624 382:0.08991695987553 389:0.0872463057313621 827:0.0874429636412061 880:0.120419169703806 1015:0.127938123583373 1043:0.343481410276705 1665:0.110336692782814 1725:0.147687563207086 1808:0.102932817081052 2215:0.173425427718292 2264:0.417151701112639 2521:0.192895370607582 2792:0.156914976377372 2921:0.174866214812776 3551:0.192895370607582 4205:0.192895370607582 4398:0.183444138005648 6165:0.218633235118788
+0 6:0.0260673823514468 28:0.0274992074774399 29:0.0811471292315519 30:0.0223838451015029 31:0.028387115377346 60:0.0282648780112613 68:0.022860986605049 80:0.0484935170148836 94:0.02235534372934 97:0.0232366436236278 98:0.0241558325655234 100:0.0230116193374877 132:0.0225856122981091 151:0.0588186320989631 176:0.0772106696077588 185:0.0433704773054119 198:0.0324247439570948 199:0.0174069672857386 204:0.0670660311880199 216:0.0323993582662846 219:0.0622737864691264 226:0.0288748130886337 252:0.0268751458742159 274:0.0804896419230663 341:0.0311145104538815 398:0.0289649966863969 422:0.0339575402858278 423:0.0282142532902176 427:0.118674299242922 436:0.0328928136702609 463:0.0915199065414137 507:0.0398231273536824 564:0.138425907530272 609:0.0263709974819501 643:0.030298375267237 662:0.0388191463712425 686:0.0440386273769155 771:0.0790142767374135 774:0.0835489187594317 851:0.0422952210092796 873:0.043057575065648 882:0.027964825071442 936:0.0435741048727055 1058:0.0417744593797159 1083:0.0399221288181153 1134:0.0906033641155742 1156:0.052206372246046 1193:0.0453917067396638 1242:0.0472727206557309 1288:0.0489205158994237 1294:0.0845904420185592 1356:0.0795301152860426 1389:0.047492465367884 1393:0.0426347118817591 1411:0.047164595463726 1431:0.0434986968898878 1432:0.0442790557708185 1436:0.0499970617589867 1500:0.0424975590131425 1639:0.100569808645735 1651:0.102084239931204 1697:0.0508861209767421 1822:0.0529365210244885 1831:0.0504319246333859 1904:0.0520317058509584 2194:0.056799500704983 2520:0.0691938449460761 2561:0.0555043853285405 2589:0.0604045361173852 2977:0.0660247639881495 3482:0.056799500704983 3787:0.136609571456641 3880:0.539895444231977 4004:0.122444782633417 4109:0.0641618505822106 4187:0.0660247639881495 5516:0.063609406027121 5637:0.0772500935458715 5833:0.0724477208744307 6376:0.0712442449938225 6466:0.636240922288341 7130:0.0824695745515445 8343:0.0824695745515445 8348:0.0824695745515445
+0 6:0.0302806947853542 27:0.0587800806197809 28:0.0745358788575729 31:0.115413794813049 37:0.0477574580787797 60:0.0766112087084619 63:0.0872688890203884 75:0.081825294031174 80:0.131440402875767 83:0.0784591943762099 96:0.0625374039972456 142:0.0235566755127643 179:0.0550219932548099 180:0.0777819198981471 228:0.152674902523192 339:0.15701772393975 351:0.0716306951794586 414:0.0745784536589978 473:0.0888681102539099 507:0.107939539661239 780:0.102403569357997 784:0.297347198312003 867:0.177451439388231 1046:0.567005641417538 1210:0.323344987794628 1875:0.157974354948113 1939:0.138348324165741 2187:0.141030570689776 2457:0.165941682002901 2771:0.145614476987452 5357:0.17099105980992 6604:0.209384347494195 7392:0.204334969687176 9854:0.234760930316663
+0 6:0.0303502293006986 28:0.224121113847485 132:0.18407485340559 176:0.157318545339875 185:0.17673672395396 1134:0.369212947328948 3880:0.5500247980861 6466:0.64817788065164
+0 6:0.0162552400819579 15:0.0556919205336804 29:0.0295179314799622 80:0.0529197394666849 98:0.0527212891395781 128:0.262092915035582 174:0.0595774279210488 179:0.0443052438105248 180:0.062632171633238 199:0.113974679137048 411:0.121783296645637 453:0.0788339233535501 513:0.0608205136266373 530:0.0668139195922197 1018:0.0881969615105387 1043:0.0908994852683025 1133:0.0947746631887669 1145:0.320314274814765 1192:0.10113598345374 1331:0.0918783568768217 1576:0.090093347797922 1958:0.118163198188554 2825:0.329247808739869 4979:0.16109854817629 5231:0.151018959755824 5935:0.16109854817629 6684:0.719975562565463
+0 6:0.0251240825102013 28:0.123685772975973 31:0.0319198499710005 40:0.0523266985531968 63:0.0362037724673066 68:0.0514120052652168 75:0.0339454800035668 97:0.0522568192249443 142:0.00434336033747653 144:0.0497893099825834 172:0.065675144459172 205:0.0662665390241653 229:0.0438571540692084 337:0.128051851783375 346:0.0697730798678657 365:0.0887334486851424 404:0.14065604894428 413:0.072411138087384 427:0.0889620937032745 467:0.105120612577005 498:0.0860522482724009 655:0.0634131259830585 658:0.0774549612797943 667:0.0806630185554006 994:0.095881077646137 1080:0.0846770478496202 1082:0.114788472857939 1230:0.117013949633166 2017:0.251889559232106 2280:0.113751666856704 2837:0.125944779616053 4516:0.194782617283281 4928:0.829979173125662
+0 6:0.0282894924552385 15:0.0323074519931572 26:0.204074537225938 29:0.0684946143058182 41:0.04342092722354 63:0.0611476865463157 67:0.160022857991643 75:0.0382223072249677 98:0.0611683167530266 134:0.0675360328231603 142:0.00978116987536035 153:0.408936702450328 159:0.0567294497141454 174:0.0691229490378598 176:0.0488789475840856 283:0.0706890992942271 345:0.138401999174023 351:0.0669203935116735 457:0.065023400890642 548:0.106765537886506 574:0.0706064355260748 667:0.0908258382734265 723:0.0967803318918898 844:0.103331456031468 943:0.253208917730223 967:0.120830901210732 975:0.116842446997278 989:0.228085114245351 1005:0.0994057260606669 1126:0.100561569044614 2211:0.145267652884152 2415:0.137640086988009 2733:0.122616004651657 7462:0.626497767564764 8971:0.208832589188255
+0 6:0.0191254452856298 15:0.0655255027700738 28:0.0470772511334953 75:0.0129203209756823 100:0.0393947274090737 142:0.00826584418122063 159:0.0383526140777709 185:0.111372092462745 277:0.0577337498022499 318:0.230852837265636 365:0.067547410622611 457:0.0439598376671922 473:0.0561295634841421 485:0.0882358704347188 499:0.0474850142498473 538:0.0558611350107948 561:0.0564939984487267 733:0.0719558394504811 890:0.0669515100840464 909:0.112259126968284 1018:0.207539987502348 1035:0.0778637917655618 1043:0.0712998033547114 1626:0.0916244732475554 2134:0.173702833811037 2206:0.658257369940259 2683:0.090303676595775 2946:0.0987169684935807 3170:0.0987169684935807 3570:0.350803006303703 4650:0.425326636409502 7211:0.121966540895479
+0 6:0.0249155261801294 15:0.0426814214088025 28:0.091994288152845 80:0.0811137299406167 81:0.0758500337628729 158:0.0894161658116047 176:0.0645740481266365 245:0.144042368166486 325:0.111866093463543 345:0.0914215403278842 347:0.2046783176319 404:0.104616341764176 555:0.143564292795591 561:0.11039568044152 571:0.0983210158237392 842:0.180412068268694 847:0.531408135415032 1007:0.143802494678123 1113:0.453753429504576 1124:0.276998422855017 1294:0.141492032168854 2548:0.173489417934516 3751:0.200783873709072 4528:0.228502953972928 8857:0.258428079111854
+0 6:0.0226239330058816 15:0.0193779094121369 26:0.0734419643466575 29:0.0205414285149836 31:0.0215575796750534 37:0.0535222956291658 41:0.0520874747105999 63:0.0122253975223964 80:0.0368266674114475 100:0.069901405722369 144:0.0336260044420826 176:0.058634882047994 215:0.0360323814848337 232:0.351420585605125 274:0.061124980319689 286:0.0316919003489392 307:0.0543156784358102 309:0.0416242025128523 325:0.0507886324746229 341:0.0472576046733595 349:0.0560701443639254 377:0.0435320022493896 422:0.0515756793566115 437:0.0508741367536518 480:0.0416005994856629 526:0.0678806759762235 532:0.0653970713652046 597:0.0505769103997092 643:0.0460180353069177 653:0.057778640393813 749:0.131681002343451 764:0.104620886409824 780:0.0573823894020844 812:0.0633521456078496 882:0.0424737728059288 953:0.494428112578173 965:0.0564953486987266 996:0.0629736149545015 1009:0.100819176320257 1025:0.137884434063754 1241:0.211594782627606 1247:0.0875809444586071 1412:0.212984645903226 1614:0.0714724269504224 1620:0.0684023717351565 1781:0.0717991545421855 1855:0.0731795294556482 1865:0.0671296106690862 2080:0.112107933900358 2831:0.185972623306487 2880:0.0850588152418248 2882:0.0905940491975369 3563:0.0974508461066599 3729:0.117329642296057 4213:0.410004288935867 4259:0.0983378868100177 4419:0.105093582466552 4705:0.181188098395074 5452:0.106572699944646 6732:0.125257138707476 7782:0.125257138707476 8046:0.13154954660547
+0 1:0.601459153433861 2:0.287456848710408 3:0.358970005066722 4:0.228438173065556 5:0.0988335897765039 15:0.0603127229196356 23:0.126629171534422 44:0.304893595754764 83:0.0456129475857336 142:0.168903544141731 229:0.18437906791033 409:0.0899039926617108 2455:0.263548381280729 6525:0.331701918192118
+0 6:0.0269938250055263 15:0.046241641142429 26:0.292091791042755 27:0.0392997722139916 31:0.0514430035785377 33:0.074687521918127 60:0.204885942280788 81:0.0821769736370712 85:0.0827129174111967 96:0.0836237618605457 134:0.28999287792674 140:0.0953756076956671 142:0.0454992977822077 158:0.0968747083699375 176:0.419762490848541 185:0.0785957850795117 204:0.0810245079276805 206:0.12873060070115 229:0.141363053759745 262:0.126317169144918 289:0.117427944409238 322:0.23394260798827 387:0.0952744243856049 409:0.0689292070509542 423:0.102259487354092 480:0.19854360465955 586:0.297646691383121 658:0.124828777513426 834:0.136009965563902 997:0.25671681185119 1213:0.171730905440844 1931:0.175943746028448 3867:0.250785552942404 4530:0.221893887682964
+0 6:0.0125956853994923 15:0.0215769778483417 17:0.0343176543974182 27:0.0183378075162673 29:0.0686176106949121 42:0.0376792527821034 64:0.0546228044973246 67:0.0356244916585119 85:0.0385949707376532 88:0.0480897715151681 96:0.0390199831295437 161:0.0614602951903077 176:0.0652889599276013 178:0.101652794069967 252:0.0454509805689807 274:0.136123285364539 291:0.0506905996150971 309:0.0463478529325863 373:0.0899172715811354 387:0.0444563405124362 493:0.112446273987958 506:0.0352330155981576 571:0.0497047734220432 749:0.0733122962385327 796:0.0553600863536565 858:0.0631831133699839 912:0.0598937756723296 933:0.0731875293950679 1377:0.0600674468100533 1652:0.0754417726241064 2504:0.0926762608525251 2540:0.10150339544295 2652:0.201749915447796 2684:0.108509886336272 3200:0.115516377229594 4297:0.456532914461526 5119:0.240975123262315 5228:0.249660616627337 6193:0.124830308313668 7414:0.672502717089008
+0 6:0.0478346863230256 26:0.276055612950008 27:0.0928554228501164 29:0.0579087517268046 41:0.0734204205635491 63:0.0344648625274302 67:0.18038837161079 81:0.0970817030956792 134:0.114196638582649 142:0.016538974447859 158:0.114445218157902 174:0.116879954286215 176:0.082649384013653 192:0.257537576971077 240:0.143541319118632 255:0.148407428146905 284:0.0968309867216001 373:0.227652795100736 411:0.119458212963049 553:0.203829471421501 643:0.259460726365725 952:0.148543086821632 1008:0.414662661762145 1057:0.217224238303479 1527:0.207331330881072 1576:0.176746575667341 1863:0.192092952175419 2246:0.201947465661579 2866:0.218550093935933 4187:0.282702175799756
+0 6:0.0173122046968975 15:0.0593131767590784 27:0.100817976106873 63:0.0374202989999389 64:0.150153190173266 75:0.0350861229331005 96:0.107262433727565 142:0.0224465340786817 165:0.672359345834318 176:0.0897367473753935 185:0.100813154069963 286:0.0970046482955687 413:0.149688623780999 441:0.122077060503794 549:0.55458747534358 1949:0.215424298742477 4281:0.279023729730391
+0 27:0.0813991815118389 111:0.174826102356098 308:0.206553819669928 4297:0.506622800155048 5228:0.554105768401663 7414:0.5970307048645
+0 67:0.241997277668499 68:0.262632943249648 319:0.388094917264234 553:0.546888657535415 772:0.396384289286913 1863:0.515398759583635
+0 6:0.0275770217313123 15:0.0188962733871949 26:0.0716165715749429 27:0.0321190693696501 28:0.0407284753323148 29:0.100154366688168 60:0.0418624932299217 63:0.0119215364741899 64:0.0956730320818376 68:0.0338589077441587 75:0.0111779035834414 80:0.0718226884588656 81:0.0335809569386931 86:0.0428458545681839 94:0.0331100111293319 96:0.0341721752676435 97:0.0344152851462038 111:0.0344920649379279 132:0.0334510568751271 142:0.0128720220682752 176:0.0285887589223341 178:0.0445117708517727 198:0.048023579788493 204:0.198660066775991 220:0.0884909790664888 226:0.0427658547458292 265:0.0521035735880319 284:0.033494233122636 317:0.0328730044460703 355:0.0331945547262357 373:0.039373015024863 377:0.0424500186321048 448:0.0998957053798731 455:0.0402705503948372 475:0.0446919308900866 483:0.0535508579523866 506:0.0925670916025792 513:0.041272810922134 546:0.0476517364010919 586:0.0405436392698212 631:0.0370159405363452 641:0.130925410501071 713:0.0551513344905925 757:0.0524022661361217 800:0.0972764261509953 834:0.0555793745460363 856:0.0413937809066985 867:0.0484821986577612 876:0.0532288614540995 1038:0.0732313421671071 1064:0.0511022681166158 1184:0.0726454652148115 1229:0.0622519701450831 1283:0.0683398623375509 1306:0.0789742589822433 1313:0.14416285467913 1379:0.058214957347599 1432:0.0655807419970004 2185:0.0689276358077369 2578:0.083327827872676 3090:0.10116472567063 6404:0.114413425622655 6842:0.122143884893579 7658:0.343240276867966 7934:0.769679373687727
+0 6:0.00929312375849293 11:0.0835204162597219 15:0.0318390812598389 28:0.0686250251107005 60:0.141071553779503 63:0.0200870701204545 75:0.0188340935387295 97:0.057987680316535 142:0.00481968467435696 159:0.0559070260216491 179:0.0506586321463692 199:0.0434395634152348 204:0.055788372302834 304:0.140734936872028 312:0.0842312520337798 328:0.0942827484740114 365:0.098464601023431 496:0.155855257130848 505:0.133695057599131 685:0.19642676176273 867:0.0816895813841341 1033:0.111322203964251 1725:0.134066939209775 1754:0.131636659421782 1808:0.373758966039579 1892:0.123390395886504 1986:0.14390080726069 2215:0.314862210066202 2382:0.646300465643413 7705:0.180795270856427 9373:0.216143889156753
+0 6:0.011263015816492 15:0.0385881093517572 26:0.0974988749970337 27:0.0655904016477991 63:0.024344988224966 64:0.29306107201724 81:0.0685757245322803 83:0.0291831859695598 94:0.0676140053605679 97:0.0702795074659298 132:0.0683104554098996 142:0.0233653123012276 176:0.0583811491779976 178:0.0908975566702222 186:0.0639135607484122 192:0.0909585708322082 226:0.0873322186676087 317:0.0671300136430797 327:0.0947208889786777 404:0.0945832332365635 518:0.0982231604784767 582:0.189996107466899 852:0.223549140113911 867:0.0990055734845091 995:0.176277427350309 1207:0.128329036472332 1223:0.138401527760193 1955:0.169381474238221 2423:0.290736884484338 3138:0.22324561027399 5445:0.190802261120773 6168:0.261960574880517 6711:0.249430217818284 9197:0.566762723526138
+0 6:0.0103061189832604 12:0.208427331138074 26:0.133823172606505 27:0.0300089467401904 28:0.152210966387649 29:0.0374298149320939 31:0.0392814071831733 37:0.0487631524428596 63:0.0222766574584037 67:0.058297780248718 88:0.0786966157686201 134:0.147623940097374 142:0.00534505350478352 172:0.0808215606795849 205:0.163098692781625 252:0.148756720668383 345:0.0756316575809295 355:0.0620275521298389 373:0.0735726616038441 475:0.0835116209851437 593:0.0992660328722478 647:0.0930942339860785 755:0.10756583422638 784:0.303608846514133 880:0.121229085553259 952:0.0960120894231274 1235:0.241607685531769 1511:0.124399551118978 2248:0.135390065465386 2642:0.143057754005254 2884:0.171896661337339 4001:0.179187581887369 4430:0.660311158851075 7381:0.208637931688625
+0 6:0.0102861521279502 11:0.0924450948640491 15:0.0352412861341237 26:0.222606510739114 27:0.0299508080462217 29:0.0373572992062178 31:0.0392053042219246 42:0.0615408394051874 63:0.044466998273852 67:0.116369670743005 68:0.0631463903781888 75:0.0416932683489483 80:0.0669741557776181 92:0.135807597153813 100:0.127124933234365 142:0.0373428867841292 153:0.0892144347678634 158:0.0738293285549558 176:0.0533176363803137 199:0.0480813523281119 203:0.233938995793121 240:0.0925994059078954 313:0.233287147707467 317:0.0613076944873866 345:0.0754851304191297 412:0.104835822483752 436:0.0908562035638736 465:0.0874667181505164 571:0.0811819039121196 574:0.0770181937533167 609:0.0728417075967176 679:0.129400097824747 764:0.0951334459037418 863:0.108708094608424 1057:0.140132719548669 1102:0.123217677387381 3937:0.722205824853999 6511:0.208233721005534 8232:0.208233721005534
+0 6:0.0203350264347414 15:0.104504455536547 31:0.0387531162196502 60:0.0771724839205589 63:0.0219770613472487 75:0.0206061922738543 142:0.00527316851723822 145:0.0853216236588011 172:0.0797346011425766 180:0.156703544137843 274:0.109881698314859 345:0.0746144964321458 409:0.0519258477529569 430:0.0791335480159889 457:0.070110090066841 560:0.12111879071638 574:0.076129877647543 641:0.0804525989505136 685:0.107454272017129 768:0.127066413288845 1064:0.0942057832741511 1143:0.120675959140693 1610:0.562720618022358 1892:0.135000190858976 1907:0.611626017810653 2138:0.158273257713126 2236:0.145055714956131 2823:0.146681289505272 9881:0.236480854766061
+0 6:0.0346240605834175 12:0.233408280792093 27:0.10081696045471 28:0.255681199209249 142:0.00897852317986169 205:0.273970202998794 252:0.249878820387108 423:0.262329527931105 784:0.339997727319117 4430:0.739452410265545
+0 6:0.0268295736368881 17:0.0730986847081717 29:0.0974397809269236 31:0.0511299844438686 88:0.102434129237567 102:0.127823580298301 142:0.00347864959721066 172:0.10520002812034 176:0.0695347217120882 229:0.140502891294805 325:0.361379435098352 408:0.0789920352372129 426:0.120764429139016 475:0.108701499972785 496:0.112489895931568 499:0.0999194529150807 505:0.0964955779660672 553:0.171486160981851 593:0.129207965816885 641:0.212294676355485 658:0.124069222409701 727:0.143622758565686 800:0.118299805177477 856:0.100679607805914 965:0.133994926316313 1008:0.174432351396965 1228:0.165182037641949 1327:0.174432351396965 1380:0.138166298026661 1448:0.168384728959419 1509:0.169517363879653 1591:0.159217129240407 1709:0.171083886698734 2018:0.212330305455283 2021:0.195805466733391 2134:0.18275546926106 3090:0.246056887803253 3096:0.225458700679365 4004:0.220543713162053 5620:0.243110697388139
+0 6:0.0372192344863808 15:0.0637582293121775 29:0.0675865018151923 34:0.148309344446536 60:0.0706244662172788 63:0.0201123269308213 75:0.0188577748982352 80:0.121169061929444 83:0.0241093473399518 134:0.0666406293582952 142:0.00241287239236119 158:0.0667856905400087 176:0.0482309027227543 204:0.111717037473814 229:0.0487280391396704 240:0.0837650211399388 327:0.078252553203683 345:0.0682835217279758 458:0.0979641535446413 478:0.0729691900359052 527:0.0887472303774632 1064:0.0862125050317985 1098:0.417521546568483 1140:0.0945087942897051 1294:0.105681595587715 2136:0.17289225033594 2569:0.139932521405372 2889:0.140578902747882 6483:0.149967173533379 7011:0.737726986468067 8700:0.206063853505696
+0 6:0.00911162166968955 11:0.0818891961874599 31:0.0347286230139049 60:0.069158157138464 63:0.0196947536852547 80:0.0593266715776362 96:0.112907019366617 142:0.00472555240425026 179:0.0496692288209174 208:0.136527460576143 276:0.0707827010370299 304:0.275972543530081 413:0.0787829240716744 427:0.0967902736872377 467:0.114370654263546 473:0.160445314390645 496:0.22921692023804 505:0.131083886926325 513:0.0681839833958784 574:0.068223825044955 609:0.0645242334684098 687:0.102525747212043 737:0.107368541126864 916:0.110408795981466 1374:0.121647206407074 1645:0.104149735510197 1808:0.27484436740886 2352:0.330252389163502 5508:0.697278182277092
+0 6:0.0116531793353832 15:0.0798496896063958 28:0.0860528435101629 31:0.0444156799659725 60:0.0884488444378742 63:0.0503766519244193 75:0.0236171469712344 142:0.0181310347230503 158:0.0836412290193567 345:0.0855170865632724 404:0.0978597026750291 416:0.113374546483584 513:0.0872029387431794 530:0.0957961350533597 561:0.103265783169586 693:0.138561762558066 717:0.118092466217174 731:0.134292203023086 761:0.118496356226747 850:0.106822133939134 1118:0.450116234854073 1331:0.131732901430883 2935:0.185531418070416 3095:0.184447443056282 4556:0.206610270057012 6125:0.211185805138472 6644:0.471815867462812 8856:0.483475039526281
+0 6:0.0197686040793244 15:0.033864511440514 29:0.0358978580276813 31:0.0376736668548153 37:0.0935346715740777 67:0.0559117228469923 75:0.0200322167247499 111:0.0618141420672367 141:0.0902900194547197 142:0.0076894304265137 144:0.0587642447855836 176:0.0512346711839776 215:0.062969589188907 232:0.175467644825403 284:0.0600259012732842 303:0.176627933928974 317:0.0589125809273268 325:0.0887573674179571 437:0.0889067932705506 493:0.176481533172683 506:0.0552973112450646 609:0.0699959936441451 780:0.100280507100205 953:0.540033954347403 1009:0.0880949558929749 1056:0.0970608349510101 1430:0.148647367505455 1614:0.124904021825385 1822:0.140508313790914 2831:0.162501328075164 2937:0.186244673755235 4213:0.358258330091898 4259:0.171853651603307 4419:0.18365979270881 4705:0.158320650088856 5452:0.186244673755235 6732:0.218897287449833 7782:0.218897287449833 8046:0.229893794591958
+0 6:0.0328259896324698 29:0.0397391982666423 58:0.0733997660606516 80:0.142488847520581 96:0.135588181830495 108:0.101290264905374 142:0.0113496762598351 159:0.0658265725735006 174:0.0802074908934027 199:0.306882098068337 256:0.074463606735129 330:0.108822405359602 365:0.115935109885469 436:0.193298378838813 446:0.135012792133997 485:0.227165673126443 537:0.24475107070866 902:0.3018314320751 963:0.0928362974366935 1078:0.138901772856155 1135:0.445868345886645 1237:0.134182614505313 1620:0.264660796137832 1967:0.350524295835883 2062:0.175262147917941 4737:0.200700439928527 4915:0.200700439928527
+0 6:0.0356623197189233 15:0.0305455820064665 26:0.115767263483116 29:0.0323796481802836 31:0.0339814168711537 63:0.038542019640996 68:0.0547324872982329 75:0.0361378737036859 84:0.0523251205275172 92:0.0588559974822569 102:0.169905248958112 142:0.0115596986188465 180:0.0687042614631744 192:0.144002001197796 252:0.386057768794758 256:0.06067322677575 275:0.0599536829409531 284:0.0541429954799707 289:0.077568719820197 345:0.0654271592901297 373:0.0636459705382323 381:0.0857028179867093 404:0.0748702114666481 426:0.0802610533606746 475:0.0722439293747498 505:0.128263542293374 561:0.0790062795188604 613:0.0824574467104009 644:0.084952624479056 659:0.130660057297107 671:0.0544477578759526 688:0.0989729349713018 723:0.0915024671411074 755:0.0930526606874158 764:0.0824574467104009 772:0.0826061567531249 814:0.0989729349713018 975:0.110470505298514 1189:0.121460819008486 1198:0.106205346040698 1250:0.120389287421933 1294:0.101260837367145 1411:0.112918819591739 1416:0.107615111277612 1713:0.146575203117837 2067:0.111179619490564 2335:0.131747468615924 2402:0.122966692920761 3851:0.173450255277695 5076:0.165660008688802 6786:0.571219575942401 6814:0.173450255277695 8402:0.207362795350573
+0 102:0.351150532621994 229:0.192991250119743 325:0.330921156637086 641:0.291602646792836 727:0.394553243222301 800:0.324987294990526 3096:0.619368841359815
+0 6:0.0148493396993718 28:0.0548274367279043 29:0.0269649534278638 32:0.0556577561504586 48:0.0454214502066472 63:0.0320968207822622 67:0.0419985226271216 75:0.0451420631244815 81:0.0904113290171637 142:0.0192532502615108 159:0.044666489038112 179:0.0809466501249892 180:0.0572151741839601 295:0.126081324145624 345:0.0544860862401228 346:0.185574089714079 365:0.0786675367162631 413:0.064196827110468 427:0.0788702442704653 467:0.093195742666117 499:0.165906985961725 531:0.167087671489703 598:0.0784668263132916 799:0.0749029294058128 867:0.0652652636183769 963:0.0629938837718596 1035:0.0906822725123733 1045:0.038569675116839 1134:0.0903216977699675 1389:0.094689643043206 1448:0.279587227998351 1471:0.0859914085908399 1627:0.0991250930351561 2134:0.303448509659994 2448:0.109715965278169 6710:0.164426388811804 9711:0.747229014653205
+0 6:0.0333645265707916 15:0.0285774702965906 31:0.0317919275876254 40:0.0521169934324286 63:0.0360586817834408 75:0.0169047198401784 83:0.021612399369004 142:0.00865190766632479 154:0.0602966531843804 158:0.119737709671925 179:0.0454691372409312 196:0.310258000868274 198:0.0726276761994567 204:0.0500733843218768 209:0.0523975266110909 232:0.0740365237044529 237:0.0716797422417141 240:0.075089676402374 243:0.0786493737035356 317:0.049714951137078 331:0.0652051986767439 409:0.0425984527884495 480:0.0613502659568265 519:0.29919441987263 530:0.0685691132303734 553:0.319883274257595 608:0.0910169063337788 631:0.111960905677265 781:0.180779676941218 936:0.0976009551089628 1008:0.325378977416248 1020:0.106627758085865 1394:0.324566427864116 1599:0.101072491284041 2112:0.13443542875477 2264:0.113295794277403 2934:0.145023282933846 2935:0.265599959880969 3666:0.119435430151518 3787:0.152994819860845 6094:0.337717128378133 6763:0.173031274752739 7130:0.184722308517288
+0 6:0.0130896923114662 15:0.089692935981872 26:0.0566557969561112 28:0.193321532545992 31:0.0498908982541641 33:0.072434097888241 108:0.242343048895642 142:0.00678869571364159 158:0.187903733548824 231:0.140327810027765 284:0.0794917613032177 408:0.0770777389387947 499:0.0974980006980196 592:0.386823299645813 667:0.126076734548484 674:0.173330227631288 731:0.150846697438501 977:0.359943696987834 1056:0.128536790954452 1595:0.327886242429576 2152:0.210968783798118 2619:0.225531359325826 2862:0.221747259445902 5003:0.234557500588928 5167:0.250426246621601 6259:0.271537034037452
+0 6:0.0170518746123896 15:0.03894750825274 26:0.0738052142688144 27:0.033100646188589 31:0.0433284104309708 49:0.10268535340642 63:0.0368575959952368 64:0.0492984268672932 68:0.0348936550020496 75:0.057597533008735 94:0.0341218716856053 96:0.0352164961571873 97:0.0709340712206508 134:0.0814165164214893 142:0.0250568634555524 166:0.0424104529798922 176:0.0589248949381596 198:0.0494912073881702 209:0.0714112578520325 226:0.0440728033120376 317:0.0677552438896916 547:0.0713460284216493 582:0.143824258713362 867:0.0499638419079424 883:0.0662795777434687 2057:0.0899661394557997 2277:0.326228978912078 2436:0.110579907225826 3989:0.0955287511283448 4069:0.0979328459085073 4317:0.098824273987248 4635:0.858062090474296 5391:0.11266242884919
+0 6:0.00921789546244037 15:0.0315813423236853 29:0.03347759925758 100:0.0569612587218073 111:0.0576465892472563 218:0.104574827284345 292:0.0908972667559488 331:0.0720591318728392 448:0.0834778478174873 531:0.103721560691336 679:0.115961397395332 749:0.214608435001241 882:0.0692220574590123 1011:0.110629212861609 1133:0.322464485307125 1229:0.104041719718554 1614:0.232965810110779 1618:0.141290259627095 1639:0.124471529053587 1651:0.126345884591171 1911:0.124835452244822 2216:0.125579394860118 2257:0.132981660711841 2280:0.125204688370733 2322:0.291803155083138 2949:0.274782891766629 3081:0.169076609287995 3393:0.176352729115499 3797:0.326865624571542 4385:0.152621801905722 5531:0.342554641298908 5886:0.196862958948895 6548:0.214394193693096 6809:0.186607844032197
+0 6:0.0548943898836143 15:0.0626910457536369 17:0.299125714978392 26:0.158398701984834 28:0.270244895193385 29:0.0664552407325909 31:0.0697426737323884 63:0.0395513746675334 75:0.111252803759836 83:0.04741161144168 94:0.10984712065073 134:0.131050400527799 142:0.0237248579797544 158:0.131335666830768 176:0.0948472302932635 186:0.103835301300506 192:0.147773187687096 414:0.270399258741857 731:0.21086916393981 850:0.167734935960051 1007:0.633657114204782 6763:0.379582637992568
+0 6:0.011289070628054 15:0.0386773754891823 26:0.0488622099058788 63:0.0244013056528217 67:0.127715924831744 102:0.10756856932935 142:0.00585484085951622 153:0.195826008133719 337:0.0863068172687701 345:0.0828450676277561 829:0.167494179670608 844:0.123704881635961 867:0.198469207510309 886:0.0972355132103057 975:0.139879777475047 1001:0.132325574286449 1074:0.295076216763227 1557:0.166124958051158 1689:0.180821366401062 1709:0.143973818324757 1751:0.15379591402188 1959:0.179734407412779 2163:0.142655527770877 3719:0.18829139792737 5563:0.234184324767963 5564:0.234184324767963 7077:0.629285212988404
+0 6:0.027593689829252 29:0.0334049673234596 31:0.0175287284448778 98:0.0596638332246894 100:0.0284188386936717 111:0.0862822815622365 140:0.0324983576242823 216:0.0400124877282341 218:0.0260869862666377 219:0.115360114376688 242:0.0322251415144661 252:0.066380416281614 274:0.198805839500102 277:0.0832967369350568 306:0.0721766203491653 398:0.0715422549383538 399:0.0433639486064256 405:0.0437369415580906 419:0.111893141988051 426:0.124203844800838 431:0.051280853036785 448:0.0832967369350568 463:0.169537577285356 479:0.0582472276669532 506:0.0257286224959739 564:0.398890148436664 657:0.0477659259942205 685:0.0972069829819374 712:0.0422319950789891 713:0.0459872242075963 715:0.0567462116274129 729:0.148501883698165 800:0.0405563424787352 836:0.0521514517359298 876:0.0443841950265465 914:0.058929484420293 966:0.0459370504790311 1003:0.0486034914909687 1116:0.0536274794367249 1156:0.128947419986666 1159:0.0935296026807405 1227:0.0502531838657975 1237:0.0563972859096268 1294:0.104467316771383 1356:0.0982179256685858 1430:0.0691623501659767 1614:0.0581150937254844 1880:0.0642580008755 1979:0.0679596618771062 2194:0.280584486427061 2292:0.161449452266912 2977:0.0815391168282646 3441:0.182312630589949 3557:0.0772932826545676 3707:0.0866555497011064 3880:0.333379440100539 4004:0.151216586521228 5222:0.080724726133456 5637:0.0954021494686713 6441:0.273468945884923 6466:0.392871702674343 7524:0.101848092563309
+0 6:0.020812213544704 15:0.035652261578964 26:0.0600539985579896 28:0.0256146141712093 29:0.0251953007260626 31:0.0264416713980157 33:0.0191946695829706 37:0.0164120807486978 54:0.0259721204988769 59:0.0430775933789529 63:0.0224927808828696 75:0.0210897426331346 84:0.0203576508904292 85:0.0212571936941735 94:0.0208232729892882 97:0.0216441750745512 100:0.0428691445939345 107:0.132721395408958 134:0.0248426927294957 136:0.0439322811879444 142:0.00719588011291202 144:0.0206221610516572 150:0.121000237959978 155:0.0360268836137451 172:0.0544037829245539 180:0.0267301318267682 185:0.0403981839662362 198:0.0302025906289339 199:0.0162140218506605 226:0.026895945897274 262:0.0324634726407281 274:0.0374867371055975 286:0.0194360134030964 296:0.0312793010694287 306:0.0272191802715964 309:0.0255272971650648 325:0.0311476601476423 342:0.0324036140351572 355:0.0208764434455272 372:0.0342408418284333 382:0.0304666488171191 389:0.0295617485398524 415:0.0301789446865515 436:0.030638582288614 437:0.0312000982247197 459:0.0316855143692628 475:0.0281072776963895 493:0.0928991076038627 505:0.0249511552926584 538:0.0303939033400633 571:0.0547524185645555 574:0.0259721204988769 591:0.0364737960857689 678:0.0375377693292752 696:0.0382825335892021 713:0.0346853188703332 714:0.0717936040820198 780:0.0703829607717379 799:0.034993604507627 801:0.041949816805245 840:0.0876652414569852 867:0.0304910213961573 880:0.122405224530284 882:0.0260483217619272 886:0.0298767768658296 953:0.189514341936162 987:0.028318572663091 1134:0.0421970381571535 1138:0.0342047222901553 1154:0.0471146355439348 1213:0.0441347885492145 1215:0.0406586187090744 1227:0.0379028683872324 1322:0.0389708445393442 1339:0.0418688164277079 1430:0.260824414896114 1545:0.0443416985875209 1599:0.0420315124734946 1614:0.0438326207284926 1620:0.041949816805245 1639:0.0468387470410961 1651:0.0475440686962371 1688:0.0467037449631909 2021:0.101260030989903 2171:0.0479937974094157 2215:0.058761902199162 2934:0.0603086739838134 2952:0.0542886488086331 4213:0.691480602620786 4224:0.0687535705303244 4259:0.0603086739838134 4311:0.0608856680285724 4419:0.0644518080301136 4705:0.0555595320904458 4740:0.285133295841856 5452:0.0653589214191013 5977:0.0719559406390406 6395:0.0702206976082498 6634:0.0653589214191013 7634:0.074079706468451 7846:0.0806767256883903 8046:0.322706902753561
+0 6:0.0425843190006064 102:0.405767172664904 252:0.307327309956132 505:0.306318581865583 764:0.393849221516343 1713:0.700100863470929
+0 6:0.0323177514422314 28:0.178987703318085 29:0.0293429431939628 31:0.0307944910132714 83:0.0209343342365651 98:0.104817493284398 112:0.0899563146243971 142:0.00419023181504095 158:0.115981071430127 226:0.0626470960749625 408:0.0475752055411405 411:0.0605306702787128 489:0.0920558483426158 513:0.0604599572834412 576:0.0790908422709431 628:0.0877949216222771 643:0.0657356714467889 709:0.0704596295062851 795:0.0957191843621102 1305:0.0734832501236071 2074:0.138007631717657 2265:0.140473337790305 2547:0.383645942061614 2992:0.123840184303521 3366:0.129411449518973 5041:0.148194776560693 6412:0.187915405709015 7667:0.178926850342994 7907:0.751661622836062
+0 28:0.227653803142089 31:0.11750220040319 158:0.221273848823906 423:0.23357335187211 1305:0.280389228663681 2547:0.487957866106276 7907:0.717026745171776
+0 6:0.0345418324353952 15:0.0394478124670477 26:0.149506573446153 27:0.0335258439362085 29:0.041816400450134 31:0.0438849899738058 41:0.106035015984691 47:0.0544964067117136 63:0.0746621080543207 67:0.260519944184286 75:0.0233349632120132 88:0.0879194621993516 142:0.0238858672626535 153:0.199726779475771 158:0.0826418620568988 174:0.0844000056517093 229:0.060296986619782 232:0.102198650632622 252:0.0830951290088283 255:0.107166261749913 286:0.129031064713957 291:0.0926743903392493 317:0.0686256008285614 351:0.0817106571582515 355:0.0692968683790873 373:0.082195006451143 409:0.0588021178762497 441:0.0811906097837698 475:0.0932987617408781 477:0.123109334964933 480:0.0846867746217946 499:0.0857611093971749 509:0.106874190351142 531:0.129557149059897 541:0.118729192125444 772:0.106680965500378 912:0.109499970165983 1001:0.134961443816326 1243:0.30659201965741 1500:0.131397989997344 1706:0.173155118076215 1751:0.156859463647687 1822:0.163674164389508 2022:0.496439767226188 2291:0.195053137907576 2484:0.184423251619527 4960:0.208662502706526 7224:0.228219291282249
+0 6:0.0342596931025261 11:0.205268892227137 28:0.0843301764668424 29:0.0414748420991677 80:0.223068256642555 118:0.0747790496972331 158:0.0819668393906461 229:0.0598044779605861 245:0.132042092722101 294:0.109132205426985 341:0.095417010086849 409:0.058321819376165 413:0.0987412522256733 427:0.1213104608614 467:0.143344535036272 486:0.340423964092742 952:0.106388082753275 1225:0.101865243774374 1725:0.164748772385759 2709:0.17096705757854 5419:0.413916274887911 6703:0.252904516640442 7272:0.215179090347199 8727:0.252904516640442 8730:0.505809033280883
+0 6:0.0461617440397586 15:0.052718101317818 28:0.227254109325516 29:0.0558834849845756 31:0.0586479503699502 42:0.0920600966320808 63:0.033259508625457 75:0.0311848713001786 138:0.129029998844574 142:0.0079802750245555 174:0.112792263269046 200:0.14864987734764 205:0.12175485459388 256:0.104714891854599 345:0.112919623258901 346:0.256395197907686 408:0.271820205654432 444:0.202140157631614 501:0.16001025084429 502:0.106211446671641 565:0.163666170492518 586:0.113111386516449 1124:0.171067767180018 1202:0.190659169294097 1734:0.425803317220573 3122:0.319198311778296 3135:0.258609323506307 3691:0.2358529965541 7320:0.328619388917165
+0 6:0.0354491826221944 15:0.0404840336946777 18:0.0632528279382443 26:0.0511446117324914 27:0.0344065059802681 28:0.0436290514510556 31:0.0450377676651714 33:0.032694040254673 42:0.0353480489701247 63:0.0255411146115449 64:0.102486616675905 75:0.0119739648139975 80:0.076937713591227 81:0.0359725053810566 83:0.0153085121810445 103:0.0562422931257934 107:0.113031345119026 118:0.116063044454238 134:0.0423142473290184 142:0.0153208155695521 150:0.103049094791355 158:0.0424063556236125 159:0.0355434553333767 174:0.0433085190146984 176:0.0306247760017353 180:0.0455290987000063 185:0.0688097206934784 208:0.0442638630308077 239:0.050090380706722 252:0.0426389423427103 255:0.0549906608286614 286:0.03310511816025 312:0.0535508675274145 355:0.0711171692153548 387:0.0417058403613705 405:0.0561881661431658 499:0.0440069477290842 507:0.0315908244570527 530:0.0485689296782122 561:0.0523560638238215 586:0.0434310518447668 617:0.0828283688780602 723:0.0606370663047525 781:0.0640250034086677 782:0.0673170715516649 847:0.441043225154041 1007:0.340997607844849 1033:0.070774213292694 1359:0.0655876131839799 1497:0.0717321046753701 1613:0.0677522927579091 1720:0.0768242333823761 1861:0.229884831709086 1877:0.0958352205715237 1951:0.0736767670798443 3105:0.647284228204255 3167:0.091486388729148 6389:0.119606034602031 7223:0.1113250321211
+0 6:0.0281130096027786 26:0.0608404279482189 29:0.0510504850722811 63:0.0303831095906767 73:0.152744505078219 80:0.0915232956451212 117:0.290240139439941 142:0.0145802256651035 174:0.103037592481474 185:0.0818544263447615 259:0.170998496105102 263:0.201273012979063 268:0.135254686045145 317:0.335119252060211 345:0.103153937932418 565:0.448535236977714 592:0.138464766509386 1229:0.158654753541919 1401:0.264859282968968 1482:0.333062076296029 1495:0.211392005896829 1720:0.182776604512114 1776:0.162800322735765 3087:0.242189240189423 4720:0.240103949228675
+0 6:0.0311701909207761 26:0.269826358919647 29:0.0566020283414964 31:0.118804077803195 63:0.0336871555229952 67:0.176317869370757 142:0.0363729801312275 153:0.13517352893543 237:0.267861885716934 291:0.125442611321087 592:0.153522275589864 723:0.159953104172129 764:0.144141737108543 858:0.156357486254049 1005:0.16429220839674 1557:0.229343354726318 6930:0.690293580110435 6956:0.345146790055218
+0 6:0.0194819125842237 15:0.0333733959638328 26:0.0421615442679893 27:0.0425449927916556 29:0.0353772542183494 63:0.0421101186565204 67:0.192853047386988 84:0.0285846078468962 88:0.0371905416473628 107:0.0465892290455956 117:0.150849191483655 134:0.0348821498784727 142:0.0151558310127205 178:0.0393069290237476 211:0.0484387967923667 215:0.0310281906380484 256:0.0331450816874575 286:0.0272905171733602 345:0.0357421000083745 373:0.0347690572048226 394:0.0907470181650418 402:0.037123218056543 423:0.0369012245047171 456:0.0527796169338759 457:0.0335843833382165 475:0.0394660226231126 477:0.0520761016350512 485:0.0337051665123912 502:0.0336187815670264 507:0.0260421948410679 535:0.0461862727532764 561:0.0431602162540886 571:0.076879028025416 594:0.0466347613026388 658:0.0900910979090292 714:0.0504034583765426 800:0.0859017177980623 856:0.0365535312792292 997:0.0463192460346169 1011:0.0584533818758657 1018:0.105704098227967 1080:0.0492457040996402 1190:0.0527075752256385 1309:0.0574946175306357 1389:0.0621150632198522 1880:0.0680519040932877 1931:0.0634908294612811 2202:0.0682803490495395 2227:0.0644935775143918 2322:0.0770903128362411 2433:0.0663526399006489 2526:0.218747489542844 2786:0.166388594323163 3277:0.279539548909235 3851:0.0947538673217117 7838:0.792959268734148 9103:0.122542909639319
+0 6:0.045663369960795 15:0.0260744715584492 26:0.0329406089828963 27:0.0443202605933043 28:0.0562001538563202 29:0.0552801524862524 31:0.0580147719912574 63:0.0658008608067503 67:0.0430500416259857 68:0.0467210178898813 75:0.0462722870955663 80:0.0495531211127882 83:0.0197194463613588 96:0.0471532875212481 102:0.0725176816184359 142:0.0217088242795508 153:0.198025057862914 158:0.0546251552868722 176:0.0394488778891667 192:0.0614618520576366 219:0.0636344953513975 228:0.0575585418949568 229:0.119566482728873 237:0.130803138346471 317:0.0453605958120123 325:0.068340021866479 330:0.0756899915523619 339:0.0591957885171335 351:0.0540096414186405 355:0.0458042946018735 390:0.0695201095228966 408:0.0896285215663082 409:0.0388674061818161 414:0.0562322553143985 490:0.0787599525868391 499:0.226747742695812 507:0.0406932797272952 508:0.0590482119709863 531:0.085635526714642 587:0.0963903241141432 716:0.0728710232868416 801:0.092040666431319 851:0.0864387793742291 867:0.0668993131126865 993:0.0836333240979821 1001:0.178415385198641 1159:0.0773886507372651 1294:0.0864387793742291 1581:0.108576742338744 1679:0.32938054004998 1751:0.103681988119665 2022:0.656279969989988 2042:0.097752676324336 2282:0.110215386170407 2291:0.128927491252039 2629:0.126008983158561 4295:0.145601924466914 4960:0.137923097679524 7544:0.157876082292728
+0 28:0.380354984569009 63:0.111332815301379 75:0.10438817830287 142:0.0133565786459486 158:0.369695608829396 499:0.383649457591405 2022:0.74026890417614
+0 6:0.0189184443926817 11:0.0425065992804398 15:0.0324081495082777 28:0.0698515781798709 29:0.0343540509075883 31:0.0721069801996453 64:0.0820422594467637 80:0.0615899330509977 128:0.203355562629511 159:0.0569062669580922 199:0.0884319402464043 205:0.074848096429896 245:0.109371863658297 255:0.0880418967702096 256:0.064372877363472 304:0.0716251646516541 346:0.157617472922689 505:0.0680423122110584 685:0.0999687743921044 856:0.0709926138794247 1472:0.0961869143815676 2227:0.125256506989891 3188:0.161576198213122 3360:0.132611003259779 8239:0.196225325880705 9179:0.713991876836433 9185:0.475994584557622
+0 6:0.049648966738278 15:0.024300263407161 26:0.030699202217093 30:0.0852663122008954 31:0.0270336109733567 33:0.0392487466058663 38:0.0577862730717111 41:0.0326593372061243 75:0.0431237412560208 81:0.043184498993741 85:0.0869322814074006 111:0.0443561672862192 137:0.0580645775438163 142:0.00735697152631496 144:0.0421676429533305 179:0.0386637445646407 185:0.0413025626456913 204:0.170315485042045 205:0.056122564428015 229:0.0371435718708795 242:0.049699094945932 255:0.0660155335878005 265:0.0670042466416456 278:0.0612320866497245 284:0.0430729737458427 289:0.0617090983366438 303:0.190115188598373 309:0.0521975339889765 325:0.0636899017832042 355:0.042687592786288 377:0.0545899507941109 408:0.125294774122657 426:0.0638509601024366 437:0.127594251519348 441:0.10002852277711 478:0.0556216995863472 495:0.0781662817256832 507:0.0379243511822631 582:0.1196471020566 609:0.100454488232409 631:0.0476018253369758 643:0.0577074830754315 710:0.081736971629444 732:0.0776117968535816 757:0.0673883598182286 780:0.0719585971709405 781:0.0768611378603582 827:0.0605833231579569 873:0.0820091593180862 953:0.15500554156825 974:0.0911012051811489 989:0.08577786259016 1009:0.0632145730731095 1111:0.176140100639356 1126:0.0756380483654086 1149:0.0680458920412057 1150:0.0773943521053926 1169:0.319725347218988 1227:0.0775027707841249 1237:0.173956974920168 1431:0.0828493373798469 1614:0.0896277696579866 1620:0.17155572518032 1797:0.123317562362549 1822:0.201649980512072 1827:0.0954985676456535 1858:0.0913211069841355 2067:0.0884479476788716 2081:0.124497384341664 2254:0.114314398583603 2838:0.106665356490045 3744:0.400932519435539 4213:0.25707655060476 4259:0.123317562362549 4419:0.131789331966838 4705:0.113606644132758 5452:0.13364417314518 7779:0.143585402968256 8046:0.164965609324366
+0 4:0.026225924473733 6:0.0181892489349142 15:0.0415453396830037 26:0.209941557050036 27:0.0706169740414704 29:0.0220199353572842 30:0.07288846718549 51:0.0411785585183565 57:0.0452655676983 63:0.104842742738717 64:0.105173346482073 67:0.102889636634235 75:0.12287867343003 83:0.0157098312732238 92:0.0400253039419043 97:0.0378327165994372 134:0.0434235331383447 142:0.0597453373609165 153:0.105173346482073 158:0.0870361121813239 174:0.0444438700748837 176:0.0314276173985908 192:0.0489646264845126 199:0.0850234058124535 205:0.0479754265206038 218:0.0343921157410809 221:0.0577167085198166 229:0.0635031104214699 265:0.114554897627595 286:0.0679459655421822 291:0.0488010460627645 303:0.0541722529016574 308:0.0447983795748499 317:0.0361372877108764 322:0.157637546079911 327:0.0509899496736557 346:0.0505140801920608 363:0.0566395689540997 373:0.0432827481385938 377:0.0466652976352398 387:0.0427991765258819 391:0.0627454515483208 408:0.0357020406474074 437:0.0545358956830052 480:0.0445948786293212 508:0.0470417591878999 527:0.0578283599110756 541:0.0625211426015145 579:0.142386871079462 732:0.0663451339943114 743:0.153934059705083 1045:0.0314965036040684 1057:0.165200027382523 1193:0.0739044590458954 1241:0.0756082345490212 1376:0.0868163883005148 1591:0.0719613870288865 1607:0.0784467597720597 1767:0.0920343938350925 2410:0.0847153665361098 2581:0.28314413000865 2976:0.081871313486188 3050:0.0943813766695501 3277:0.231992483411109 3552:0.106424486752594 5179:0.101126692120929 5229:0.115996241705555 7170:0.647434363041557 7341:0.114243464709408 7664:0.125774657637267
+0 26:0.149686330296799 63:0.0747518768524216 111:0.216276366406951 142:0.00896796977071743 322:0.299717516579412 2581:0.538344179991304 7170:0.738583253537661
+0 6:0.0185684472431948 27:0.0540668650608559 29:0.0337184902007242 31:0.0353864892353714 37:0.0878561585615086 53:0.0715011039639436 56:0.0857129951890861 63:0.0200678324907244 64:0.161048903877005 75:0.0188160558998091 80:0.0604504999899329 83:0.0481120206073627 132:0.0563090342810332 142:0.012037672010292 160:0.0841505827460929 299:0.0768582150127175 325:0.0833688857206104 330:0.0923352097874877 337:0.070979429396105 351:0.0658870673474337 369:0.083021346662991 398:0.0722137159638078 434:0.160674739877467 501:0.0965455908234389 506:0.0519401978219796 507:0.0496422637061778 539:0.0862558453340445 733:0.104790360856065 890:0.0975024814545307 1007:0.107169682733815 1014:0.227706414303925 1149:0.0890707951890151 1194:0.142306925835349 1411:0.117587815984974 1433:0.0895123004830511 1455:0.12327222341366 1485:0.115776702990723 1486:0.126866090353816 1527:0.120722675591376 2340:0.128872971595372 2692:0.606383695732675 2771:0.133938541682405 4111:0.157280331361855 5357:0.157280331361855 5978:0.162964738790541 8373:0.411215958130471
+0 6:0.0540068839774506 10:0.0828221394479051 27:0.0142959175957448 28:0.0362557781765169 29:0.0891556698950303 31:0.0374264225264162 37:0.0696906174415876 38:0.0400008247943686 42:0.088122774606127 53:0.075622944968072 63:0.0318370313451347 75:0.0298511242681997 80:0.095902956330641 81:0.0298931820008109 83:0.0127213864016984 96:0.0304194742426251 132:0.0595550944610197 142:0.00509264421112751 172:0.0385024633299577 185:0.0857714030059601 190:0.042095674521864 199:0.0229498666518072 229:0.0257115302937133 242:0.103208150501618 243:0.0925884309327716 299:0.081288878660978 314:0.0391793069553059 327:0.0825804989398357 337:0.0375355986516907 369:0.0878072978151025 387:0.0346575881555291 411:0.0367833071292193 414:0.181382437159896 422:0.179082549783755 432:0.0461209478942001 462:0.060331291965836 473:0.0864545381825776 478:0.0770049266599154 493:0.0876616610494119 495:0.0541082782109195 509:0.0455727414730862 574:0.036761804542012 586:0.0721824806768093 609:0.0695366247033444 641:0.0388491720846883 644:0.0467825227908628 658:0.045408454461071 667:0.0472891980609762 719:0.21138229403363 727:0.105129819712539 730:0.0471956465181704 731:0.0565799818464544 733:0.221662471007408 796:0.129474022219362 799:0.0495311135332783 856:0.0368480215916619 882:0.0368696623481635 890:0.206246459998847 908:0.0522221084581327 965:0.196164766457766 966:0.0490411916144414 1018:0.0532778470030405 1031:0.120662583931672 1055:0.107147865888483 1068:0.0578545884852674 1098:0.110153395072017 1149:0.0471027401635506 1156:0.137660887362382 1169:0.0553300849691166 1184:0.0646677257340974 1227:0.053648982542388 1296:0.0499820800954697 1308:0.114699967750063 1377:0.0468278047428267 1395:0.0524267407678664 1412:0.0616276152005264 1437:0.0670897848932453 1558:0.0591488344079991 1583:0.145723309693384 1614:0.0620421515391733 1654:0.0693031717648601 1781:0.0623257697626633 1862:0.0690647342478629 1949:0.0610940259240855 1951:0.0612254549472931 2056:0.064002337749272 2102:0.13720031655645 2108:0.0738359130946602 2154:0.0670897848932453 2248:0.128996544659359 2537:0.221507739283981 2741:0.076841961996873 2771:0.0708298641924474 2868:0.0781680844461718 2924:0.152050530809986 2985:0.0879784532948215 3353:0.108730355364077 3388:0.0853629061699735 3999:0.0853629061699735 4803:0.0825162836021026 4822:0.177953578122617 5376:0.182454472231851 5677:0.0912272361159257 5678:0.182454472231851 6109:0.277533583873865 6640:0.0955172435268345 8876:0.104854884291815 9644:0.114192525056796
+0 6:0.0214410822296005 26:0.139204372312339 27:0.0624312891909359 29:0.0389349153207557 64:0.185964003655687 94:0.0643574275499919 97:0.0668945477474329 134:0.0767800430944587 142:0.0333599093617554 192:0.0865776195503807 198:0.0933456061025359 204:0.193072282649976 226:0.0831259279154982 240:0.0965099218729419 265:0.101276074755433 317:0.0638967469302455 409:0.0547501806838455 441:0.151191852131857 856:0.0804589658794489 867:0.0942370443607924 1057:0.146050589449104 4911:0.181612413448533 5710:0.194283983940313 9470:0.809197533621675 9591:0.228954369681486
+0 6:0.0215307136324505 15:0.073766169346386 26:0.186381728592925 27:0.0626922743395395 41:0.0495705367205553 63:0.0232692992000247 64:0.186741399794034 94:0.0646264646467835 97:0.0671741909153201 134:0.154202022346779 142:0.039082593352541 176:0.0558015643840385 192:0.0869395450079025 198:0.0937358241678023 204:0.129252929293567 226:0.0834734240657618 265:0.101699445019968 317:0.0641638582170536 337:0.164605876636493 387:0.151984859316756 441:0.151823888223177 599:0.100939578619071 1685:0.154147551814032 2270:0.158418217798806 4716:0.715227255109804 6333:0.426762901058237
+0 6:0.0143294661969935 12:0.0321993435908601 27:0.0139079896328054 29:0.017347275882102 31:0.0364108349816823 60:0.0362540467872517 63:0.0103243717171218 65:0.0341719273736002 67:0.0540375462247626 110:0.0921952556905874 132:0.0289695163251064 142:0.00371583928161125 172:0.0374576767978791 174:0.0350128219246684 179:0.026037572718356 215:0.0304294154542666 218:0.027094063186355 232:0.0847929600930999 274:0.0516201634234077 275:0.0321199622779741 285:0.0509374145408039 394:0.0444979011053545 422:0.0435557603967684 426:0.0859991206503302 442:0.0406464423595022 448:0.043256185874983 478:0.0374576767978791 591:0.0502253186057717 643:0.038862319309444 647:0.0862911752526325 655:0.0361675394455089 663:0.0894060082255325 674:0.0632489946710218 719:0.05141157841546 856:0.0358481292896347 890:0.0501624608608646 966:0.0477104306167163 1064:0.04425594073098 1113:0.0579919023882579 1319:0.0504157211995483 1377:0.0455571052734751 1446:0.0498526162952918 1468:0.0669626899237543 1476:0.0614989569839741 1816:0.0524893756914199 2082:0.0830465345149662 2220:0.266255197464368 2815:0.0721641435397539 4720:0.571121823666962 4911:0.485499549248011 5658:0.0966956360067491 6365:0.408038346307662 6483:0.0769834763650335 6598:0.0887517324881226 8737:0.105779894508132 8745:0.211559789016264
+0 6:0.0300896153862648 15:0.103089739710509 29:0.0728530780024998 42:0.120015088584862 68:0.0615730928299119 81:0.0610676337974944 142:0.00260089183327512 144:0.0596296874568513 159:0.0603392699842162 179:0.164024368650581 186:0.170747736860178 200:0.0968944681282738 204:0.0602112095366538 229:0.0525250980744396 255:0.0933532291452609 256:0.0682563210437938 319:0.0909870790459553 365:0.106270760006806 582:0.0845970844119651 856:0.0752754085751302 1627:0.133906556787022 2252:0.66426316615891 2419:0.456744452074158 3084:0.177829110893119 3374:0.168569347659499 3545:0.186364618103679 3778:0.167289110292134 7615:0.21420401734541
+0 6:0.0146324807730944 15:0.0250661002949527 26:0.0633334107417059 29:0.132855793782297 48:0.0895162357775341 52:0.0596482012442684 63:0.0158140403035489 67:0.0413851785521296 80:0.0476367661356723 88:0.111732332899735 134:0.0523985912794085 142:0.00379441537434895 199:0.0341988653645197 238:0.0721451286550571 252:0.105601335409776 275:0.0983975377736511 289:0.190961689027813 308:0.0540575999157825 345:0.0536903744846978 386:0.058268649608102 543:0.0809809025782418 561:0.0648335764540867 574:0.0547807977781893 655:0.0553985212991654 671:0.134041606357181 686:0.0865211649897971 719:0.0787481113047143 726:0.0674237854260676 867:0.0643121333595217 895:0.152161511724548 1010:0.244376663366474 1190:0.0791752429594752 1380:0.150708000561372 1471:0.0847355948702556 2017:0.11002697703221 7001:0.54377099664065 7546:0.60708232633637 8132:0.145016093080003
+0 31:0.120399444013185 110:0.304861383469633 111:0.197548817473181 232:0.280384266292641 274:0.341384040172368 426:0.284372668661173 4720:0.539578398007015 4911:0.53513261302137
+0 6:0.0183062608107803 29:0.0332423851965553 31:0.0348868320886654 41:0.126440468610733 142:0.00474708004366487 199:0.0427851817134672 205:0.0724260803898945 286:0.0512872976795075 291:0.0736724765486929 406:0.0858228056847119 441:0.0645433250045949 452:0.387603402093712 578:0.139609440231897 598:0.386935504626131 1191:0.457997591535886 1391:0.115664494603457 2205:0.534215211321496 3177:0.189875653552262 5286:0.212887857215063 5287:0.212887857215063
+0 6:0.0100433974534919 11:0.135395065928861 12:0.13540942878629 13:0.0667503977524845 17:0.109455208463285 37:0.0475200918856379 41:0.0462461775086819 48:0.061441880457304 74:0.247002205998832 83:0.0260230776931242 84:0.0589442286874982 101:0.390454269569589 142:0.0546923839014565 179:0.0547485205533018 181:0.169546605268697 215:0.0639831329687809 264:0.165355645269341 283:0.075288595682438 284:0.121984128281912 309:0.147825193581516 357:0.0929719164604766 366:0.379886633426438 458:0.105740265088339 475:0.0813827593977408 759:0.148413474079092 986:0.0898100278111452 1299:0.148413474079092 1363:0.113712403963416 1375:0.126066465380782 1715:0.166289737484338 2226:0.166289737484338 3218:0.552654429881721
+0 6:0.0121488291364996 17:0.132400677348287 50:0.23063273260199 51:0.0825110382485217 82:0.0911249783213659 83:0.0314783842781907 84:0.0713009085046412 92:0.0802002183487549 101:0.354229897944179 142:0.0724584716512735 181:0.102544619369155 190:0.104163475363972 258:0.115206170586291 264:0.200019713491913 284:0.1475560773856 286:0.136145906107533 293:0.114986866023304 345:0.0891544224119052 400:0.428198275170244 404:0.102022012442365 408:0.0715375318467092 433:0.0982442944018393 455:0.0887042917009718 513:0.0909119796839278 517:0.135466258852574 521:0.11979907640442 538:0.106452013192131 622:0.134081257187332 725:0.353250889627506 759:0.17952589713696 944:0.132938259268295 1223:0.149286526840091 1371:0.181879875363386 1975:0.172699244686559 2423:0.156801374997028 5825:0.252019447994447
+0 6:0.0126611809277721 10:0.0355969651971967 17:0.0229974004357598 33:0.0233542851092489 34:0.0336344270953768 53:0.162513752849334 59:0.026206400512487 70:0.0485560269305441 83:0.0328059201575819 98:0.027376352781258 111:0.0527867341884019 132:0.0255967865473717 142:0.0032832286141178 149:0.469897862826662 160:0.0765058229781865 179:0.023006189803239 199:0.0394554214576184 214:0.108474130096417 224:0.0401368090835999 244:0.310527208100039 256:0.0287210593789797 278:0.0728701797187154 299:0.0349379695320968 309:0.0310592361845273 359:0.0939795725653324 371:0.294843560312535 372:0.166644261102862 377:0.0324828022598556 409:0.0215536988305369 423:0.0319758530134532 426:0.0379934050303838 448:0.0764403067189496 470:0.328485164643501 502:0.0291315324167959 506:0.0236108143897842 507:0.0451324532213965 541:0.043519746258976 576:0.0413140732893001 608:0.0921043305186607 609:0.0298868494100231 643:0.0343378357075828 645:0.0536990975832809 656:0.0416610652757155 663:0.0394985280893037 670:0.0602106143492788 731:0.048636165597077 936:0.0493835210973142 969:0.0472009773841377 1012:0.0563455239002288 1045:0.0219241009978083 1068:0.0497318177612059 1083:0.0452446538259016 1113:0.05124028755778 1245:0.0412714213401684 1319:0.0445461511919772 1320:0.118736123348815 1322:0.0474160917637013 1332:0.155582377952983 1336:0.0748273621427012 1373:0.0489623841015681 1453:0.0593680616744077 1457:0.0558853312482444 1575:0.136915660915614 1593:0.128126688033525 1607:0.054605257326762 1636:0.0616018844108594 1720:0.0548777402772985 1824:0.0597816767529697 2017:0.0634693681243787 2049:0.392094767256968 2063:0.0709310166379759 2446:0.0680207977957381 2555:0.0569890222819068 2740:0.0611193149575201 3378:0.0689120059669708 3707:0.159045288970112 5404:0.0934646388411251 7790:0.0875492826653947
+0 6:0.0297675233651316 9:0.0227715737124443 10:0.0502149127769451 17:0.0486619765441031 29:0.0108109841575997 34:0.189785821745262 37:0.0422532948258594 41:0.0137068574246166 42:0.0178095594165472 51:0.0202171685135068 53:0.320950379641811 57:0.0222237407753876 58:0.0199682867965487 59:0.129388344771748 67:0.0168383514541962 72:0.0185250311051445 79:0.0201868991793864 80:0.0581457883036626 83:0.00771295347863966 85:0.036484769403846 91:0.023785576616155 100:0.0183946065218211 101:0.0289315857662963 104:0.258654162166066 109:0.0982760244792018 111:0.0186159215986981 142:0.00463149140864624 144:0.0176974157878825 145:0.0499593828208687 148:0.0523332430673318 149:0.265144852267035 160:0.215846109717273 161:0.0290499598089219 162:0.0322442072266488 174:0.0218203172482539 175:0.028814902839361 186:0.0506759941722171 214:0.0255031992716781 220:0.0716400046557817 224:0.0283095252097023 244:0.350436540491147 252:0.021482961556182 278:0.0256986072994207 280:0.0311839256770534 284:0.0180773757367559 291:0.0239595315471401 299:0.0246426497727953 323:0.152788034843666 340:0.0681611091974363 344:0.0454033438838436 355:0.0179156344915666 359:0.132572426133517 371:0.0415921514149297 377:0.022910957060433 382:0.026145705604245 384:0.0322579926070324 404:0.0249978216420194 409:0.0304047578438285 412:0.0303388746002315 414:0.0219943684671002 429:0.033970919852265 433:0.0240721907950073 448:0.0269576585621214 454:0.0297012382033087 459:0.0271917051196101 470:0.417040284747464 475:0.0241209531247701 506:0.0333066310177763 507:0.015916540843912 508:0.0230957859355281 509:0.0276306704141193 543:0.0658972582163858 554:0.0377880010496066 557:0.0280154039843883 562:0.0522505366884449 563:0.0456271295530791 570:0.03453443058125 576:0.0291398799755814 580:0.0269346185864051 608:0.0324817782762679 609:0.0210799646541244 645:0.0378753565986219 656:0.0293846223607205 658:0.0275310634970109 664:0.0673011563358287 676:0.0297660612894034 712:0.0273354214253123 714:0.0308057254321565 716:0.0285023627059654 718:0.195755332483048 722:0.114703298117875 740:0.04262367637816 800:0.0262508250214558 824:0.033292065056682 827:0.0254263265538614 828:0.0451855265495287 839:0.047393167679209 856:0.0223408885904491 912:0.0566190504194045 928:0.047976820627959 936:0.0348314693511478 947:0.0362124283392831 1003:0.0629189750643915 1021:0.0318700094099938 1054:0.038903504399937 1055:0.0324817782762679 1068:0.0350771319589141 1080:0.0300981259633717 1084:0.0486054127050734 1123:0.0338091786070757 1304:0.0383267236989422 1319:0.0314195477656885 1336:0.158332997314917 1354:0.0852473527563199 1372:0.0415921514149297 1377:0.0283916129958937 1407:0.0362843906195593 1446:0.031068615536308 1525:0.0417317730366462 1527:0.0387066836478157 1607:0.0385144944047356 1621:0.0486054127050734 1664:0.0353304132144436 1811:0.047976820627959 1834:0.0465891420458821 1859:0.0468484548088675 2049:0.0553109076266305 2186:0.0468484548088675 2197:0.0512885241956419 2243:0.0447665800541964 2254:0.047976820627959 2261:0.0451855265495287 2410:0.0415921514149297 2456:0.0420183872154985 2463:0.048938833120762 2616:0.158096527627864 2621:0.0504279746967591 2723:0.0388045011759421 2789:0.0471162711290763 3147:0.0454033438838436 3235:0.0504279746967591 3367:0.0539464656632855 3429:0.053341176500624 3980:0.0553109076266305 4248:0.0553109076266305 5098:0.0692347206161331 5789:0.0602616224058875 6315:0.0692347206161331 6461:0.0635733259735703 7097:0.0659230170484502
+0 6:0.0187948011801885 9:0.107832417372028 10:0.11889374667822 17:0.025603747271899 22:0.050107863358238 35:0.305927998835374 42:0.0562235433957604 48:0.0574899048195309 52:0.038307792797626 58:0.0315192479776237 59:0.0583528610115896 61:0.220690772514867 75:0.0190454282472022 83:0.048698517967027 84:0.0275764516945388 85:0.0287949713954679 87:0.043773221872684 91:0.037544707530189 99:0.133586863860851 123:0.0476703409515912 127:0.0934607986956393 141:0.0858423264180624 142:0.0341163597364497 151:0.0371076359317738 162:0.0254481812529427 167:0.262607072449826 173:0.0702405343840696 190:0.0402864298218988 199:0.0219634963162249 200:0.0453922119114801 215:0.0299338512839521 218:0.0266528175448285 223:0.0638214339255588 234:0.101120354034161 262:0.0439749846351328 296:0.0423709071160839 302:0.238588194930596 351:0.0333451234484496 378:0.19503703688923 390:0.0429211632090312 391:0.0972515377928717 414:0.034717347606685 434:0.0406583511147149 450:0.140066944768318 457:0.0647997782427344 459:0.0429211632090312 466:0.0434178198989495 478:0.0368476525089753 511:0.2437783321967 520:0.0697301083312988 529:0.16052020228688 533:0.0588493276765638 537:0.0525503697387853 567:0.0509879998058957 594:0.0449899907403558 607:0.0921835783249139 609:0.066547985819968 612:0.0546969056531789 613:0.0434568286348918 745:0.0638214339255588 749:0.0546969056531789 813:0.0656517681124565 942:0.060793793290543 966:0.0469334331091745 1018:0.0509879998058957 1025:0.057273651831389 1167:0.0600652165485086 1237:0.0576205528691203 1279:0.0720208411238979 1331:0.106232540494983 1351:0.0623874710619283 1544:0.0615660227369526 1580:0.329902638043373 1598:0.0491617878819886 1616:0.0873063488677718 1617:0.0873063488677718 1969:0.128412619185575 2516:0.274235923654797 2685:0.0873063488677718 2786:0.0802601011434401 3056:0.0931335116591433 7300:0.327853813899333 8915:0.104057195439638
+0 6:0.0162377772800262 58:0.108924276194857 59:0.100827963187745 61:0.381331792499162 75:0.0329086133038505 142:0.00421069213840188 151:0.128236637753546 167:0.453759006410218 186:0.0921435414382097 219:0.135769580352479 254:0.156709887960752 256:0.11050300160058 400:0.28615877899774 414:0.119976274882828 471:0.169267343814977 484:0.358937916762309 530:0.133484284461379 599:0.152250819395587 684:0.151968834264774 1940:0.290968829770454 7765:0.377665941375044
+0 6:0.0245255274199051 10:0.0344768134579874 12:0.0551106282176985 13:0.0543338286985395 19:0.09925575542054 33:0.0226193813628707 34:0.0325760317574742 42:0.0244555580729854 47:0.0193468762781221 57:0.0305169808202271 63:0.0265059414803627 75:0.0331367643085585 83:0.010591198653452 98:0.0265148841416913 137:0.0334631023081194 142:0.00741979752948586 145:0.034301370384578 146:0.256935166441194 161:0.0398905420683741 179:0.0445644795746681 181:0.0345021022992532 186:0.0231955900648402 228:0.0309143542998801 231:0.0438209122964693 252:0.0294997647964714 264:0.0336492575584181 287:0.0379416160222464 314:0.032618757890478 317:0.0243629092054723 328:0.0414703421765681 334:0.0558556447374997 347:0.0335790867579898 348:0.0406089236868155 368:0.0498246476055475 393:0.255899304912627 398:0.0635874196611565 429:0.0466478582545906 479:0.207082704505132 480:0.0300648180286152 496:0.0685530592589257 499:0.030446219725254 508:0.0317144473356687 557:0.0384699207349165 628:0.0444176272891281 641:0.032343903885833 643:0.0332573057754536 701:0.0587473519546159 709:0.035647273264905 776:0.0509732929665736 870:0.1344027044596 883:0.0476646010564164 886:0.0352073895776333 887:0.0516532342537155 895:0.085012728097265 903:0.0455111295899393 926:0.3623636160914 956:0.324760517613219 1023:0.0576984014397947 1084:0.0667435092170742 1215:0.0479129269869815 1228:0.0503322272689598 1276:0.149950822435685 1362:0.21741816965484 1419:0.068177236711941 1487:0.0614721382285943 1503:0.0553570917114757 1531:0.0558556447374997 1573:0.105514596750034 1682:0.0573048313614158 1849:0.0505418706877376 2058:0.061195195852963 2163:0.0516532342537155 2500:0.0650788903494581 2649:0.135357367371834 2855:0.067678683685917 3428:0.254382945578164 3744:0.231060768614037 3849:0.095071062180326 4519:0.0782019372194857 4833:0.380284248721304 5767:0.0872970031922837 6306:0.0872970031922837 6315:0.095071062180326 6324:0.0827494702058847 7072:0.0827494702058847 7345:0.090523529193927 7638:0.0872970031922837
+0 6:0.03246751140424 17:0.123843389243732 26:0.0140528340164079 34:0.103499932733657 37:0.0153619244122521 41:0.0149501033153238 57:0.121197445319714 58:0.065338379481999 59:0.0201605982654488 61:0.495608553459283 69:0.0329396905804198 72:0.0202052972728899 80:0.0634197552043927 81:0.0197680901330679 84:0.0190550301925978 87:0.0302468234002876 96:0.0603483672577015 118:0.0425203397166006 142:0.00168385971387195 146:0.0291546214117039 149:0.180746341599399 151:0.076922926584776 159:0.0195323128380397 175:0.0314284858391975 176:0.0504880040376162 186:0.0184241440862238 190:0.0278374877635283 214:0.0278164025619856 215:0.0206839678401917 218:0.0184168089738349 240:0.116913389183543 242:0.0227502046177606 314:0.103635681370101 322:0.0281380437609039 324:0.0688014200547057 369:0.0290330848268845 377:0.024989037566793 389:0.0276701871942257 390:0.0296580600691087 398:0.025253588691502 403:0.0376033829868929 405:0.0308772692077994 414:0.0239893121196338 463:0.0398965361865033 485:0.0449369792988003 486:0.145177118385781 490:0.134399523872517 496:0.0272256803514645 499:0.120916419356192 500:0.0335998809681292 506:0.0181638124398543 521:0.0320160719660809 528:0.0339702642961458 534:0.0494940525126446 544:0.0526646464601816 546:0.0280511309398867 558:0.072085156999739 560:0.0386763767578237 572:0.0703677447397937 576:0.0317829392059399 580:0.0293776551510938 591:0.0682799100341905 594:0.0310875975422157 628:0.0705614095485803 631:0.0217901607217043 681:0.0355274932288395 685:0.0343129409085994 689:0.0405756071750483 726:0.0299208665459253 803:0.0405756071750483 814:0.0360425784998695 836:0.0368177187855968 856:0.0243672624757527 862:0.0312409316803535 872:0.0370521663554949 886:0.0279650578693998 900:0.0473903634118003 912:0.0926318076233982 925:0.239889747693418 951:0.0423241654675753 969:0.0363117377498947 971:0.0404878380562948 996:0.0361492683198798 1003:0.0343129409085994 1009:0.11574814179632 1020:0.0415044157070948 1088:0.041702390376535 1102:0.077785576103004 1149:0.0311486148594782 1164:0.0344449210039142 1168:0.0422174756475649 1215:0.0380570042811261 1216:0.0347606981366901 1284:0.045516948130578 1288:0.0426521225075897 1309:0.0383269792899077 1454:0.0621154174188308 1624:0.0822423912239834 1635:0.0508148925301682 1678:0.0550019168029806 1739:0.0523284369939235 1766:0.0569897896778637 1781:0.0412154662641048 1853:0.191111000994228 1863:0.0391145877281153 1924:0.0895605790360971 1995:0.0420078543644997 2076:0.0404878380562948 2101:0.0595526035483472 2118:0.0483923727952604 2248:0.0426521225075897 2275:0.255488628012571 2314:0.0537568484487653 2577:0.0933254704079805 2604:0.0483923727952604 2675:0.0537568484487653 2694:0.14274585390321 2722:0.0447802895180485 2730:0.0520044560724723 2810:0.131455001392085 2848:0.0595526035483472 2869:0.0693395839732546 2957:0.0513898335257688 3112:0.279702601355677 3275:0.0526646464601816 3318:0.0523284369939235 3582:0.0581793532201677 3742:0.0581793532201677 3744:0.0611768139506761 3778:0.0541528466863791 4248:0.0603277438340745 4677:0.0657275006960427 4785:0.0500165831975893 5052:0.0603277438340745 5252:0.0603277438340745 5308:0.143804795687476 5397:0.0631646868255591 5735:0.122353627901352 6199:0.0631646868255591 6901:0.0719023978437381 7124:0.0693395839732546 7410:0.0693395839732546 9905:0.07551448112095
+0 6:0.0259661255150759 13:0.0575253282649434 41:0.0398548417951076 57:0.19385705532499 61:0.406529745057413 75:0.017541587719357 83:0.0224266242174621 142:0.00224446484034442 144:0.0514580172944363 149:0.0963687902023373 204:0.0519598474148982 273:0.501385080155136 275:0.0582039107796194 279:0.195994138942727 284:0.0525628105509585 297:0.169108311649252 355:0.0520925224652892 399:0.0816124077143235 402:0.0659720401620339 426:0.0779186024899226 450:0.129007159426657 464:0.121341687644452 665:0.32106381295908 682:0.134025490967162 739:0.0884188985865045 882:0.0649977947683898 883:0.302786152354652 990:0.116538810360891 1000:0.105085911475717 1243:0.115237182034779 1256:0.1478454132192 1416:0.104474321310833 1676:0.117564096438188 1703:0.13266804881453 1706:0.130165865923707 1897:0.115555962287595 2398:0.125835952794582 5721:0.165590837872478
+0 21:0.0671368474305779 48:0.0339468972599474 61:0.0651572393822736 98:0.107984176307523 142:0.00143894152558765 243:0.0523222642442057 299:0.0459368211186463 331:0.0433783954608548 451:0.0630243177645674 491:0.794688634865848 529:0.189569380303704 576:0.0543201914647534 927:0.0712735161186072 2551:0.298302833391608 2552:0.0994342777972026 2617:0.0994342777972026 2839:0.109987788697015 3513:0.0906062525506427 4653:0.107954706767155 4664:0.122888320439438 4665:0.122888320439438 4667:0.122888320439438 4668:0.122888320439438 4670:0.122888320439438 4675:0.122888320439438 4676:0.122888320439438 5731:0.118508217666968 7095:0.122888320439438 7764:0.129061728566781
+0 2:0.0908702377639976 6:0.0111298453315163 31:0.0424210109608808 41:0.102497746450634 142:0.0202029169396751 156:0.463475342601433 166:0.0830445554231523 205:0.0880672553548234 283:0.0834329646967483 351:0.0789848347920304 406:0.104357144592316 452:0.157103479873658 592:0.109635464639949 598:0.235249151329964 720:0.110810158212194 930:0.0974459338177224 1016:0.204146002546921 1482:0.131858148499409 2634:0.209713787012656 5276:0.713087155370856
+0 6:0.0278818814140887 15:0.0238814609352713 29:0.0253153894056289 42:0.041703504990861 57:0.0520399108515208 63:0.0150666590053521 75:0.014126841959594 85:0.0427170242490674 117:0.3598174503466 138:0.0584509836253022 142:0.0108452668905526 156:0.193512191107971 180:0.0537150719823283 202:0.0865522085516554 316:0.0949617461439475 348:0.207748412028758 360:0.0858303983433068 408:0.0820902556615114 415:0.060645573942342 429:0.159095055915509 502:0.0481141097869953 707:0.103443850926937 844:0.0763819483852475 871:0.0800644702497391 911:0.118083959589216 923:0.234301627047612 930:0.0610290594806656 1095:0.0983917670260482 1136:0.124905617729394 1226:0.110329155383628 1286:0.518072043963778 1394:0.0904106205283697 1536:0.114596932106156 1563:0.120099053252241 1726:0.0941239903035202 1750:0.135608661663417 1901:0.133355978603914 1922:0.306461967574944 2115:0.124905617729394 2211:0.107380915655193 2307:0.0977206209545113 2402:0.0961390839665446 2749:0.259036021981889 5632:0.154367708161175
+0 6:0.0207321012248914 9:0.105731015524449 16:0.304204531524121 19:0.0839036132964705 27:0.0804892087222511 55:0.0694082220061913 58:0.0927150344523084 63:0.0298749327546737 67:0.0390911937288908 75:0.0280114160298479 84:0.0405585766314393 92:0.0456208310661904 140:0.048834298281855 142:0.0465931768760246 153:0.0599382765398718 210:0.108761361099649 281:0.159543242474856 389:0.117791826764907 423:0.0523589880919435 475:0.111996338132128 552:0.403337559445669 675:0.236088057936616 728:0.095314716672627 743:0.263181002073023 808:0.0721275638011215 1050:0.0815788645239289 1125:0.245052725363283 1359:0.153433048103959 1392:0.110025943110486 1484:0.130214671486046 1505:0.232292552379114 1551:0.0739880454079234 1602:0.095314716672627 1654:0.195096167137819 1896:0.125239798324017 2161:0.0917575275432565 2203:0.247669169987923 2291:0.23414284154704 3275:0.112096547611491 3689:0.139900795056678 4387:0.295178207722164
+0 6:0.00575169523117348 9:0.0439993446285826 10:0.0485127484087675 27:0.0167475570715261 34:0.0916762701826922 35:0.1248291727139 42:0.0344117166581091 59:0.0357149691755689 63:0.0124322787926373 72:0.07158830901573 74:0.0471514218474237 75:0.0116567871907641 77:0.0433711381632928 78:0.0441873829813709 83:0.0298060118721996 84:0.0675128591927243 90:0.241093667094638 92:0.0379696848340494 100:0.0355421474985053 104:0.333181880311965 109:0.0632964696012554 111:0.0359697735581697 123:0.0583534287148935 138:0.0482309265694204 142:0.00745749171045002 160:0.0521323618654821 199:0.0268855915656268 218:0.03262580584923 223:0.0781240373094723 224:0.0546998012391449 239:0.0487635396690029 242:0.120907551347874 243:0.0542333159387819 247:0.084639396854092 254:0.0555092916793682 283:0.0431165906510917 284:0.0349291926445661 293:0.0544389423476887 302:0.0730141580025395 330:0.0572028429570206 331:0.0449627755971301 336:0.0525858874317244 348:0.0571413161593363 355:0.0346166754300069 378:0.159163672865092 402:0.0438399331356286 428:0.169988109114573 466:0.0531479030326689 478:0.0451053384782196 484:0.0635709391909392 520:0.170713732042499 528:0.0601791140445488 529:0.196493333055028 541:0.0593101824658178 607:0.0564211180273413 608:0.125522897501432 609:0.0407308094419621 717:0.0582872583721801 729:0.0619081812959675 745:0.0781240373094723 792:0.0631161064539102 828:0.261923077427477 856:0.0431671727572678 861:0.0767895861287428 876:0.0555092916793682 916:0.0696953592178546 922:0.0817620703139749 941:0.0820570621479249 962:0.0778936448437267 966:0.0574513772843073 1119:0.500009927064242 1176:0.0649189682814942 1193:0.0701088746727965 1319:0.0607090018315801 1331:0.0650198095422803 1483:0.0806343332695427 1591:0.0682655949264946 1607:0.223253675908684 1611:0.11643779765055 1629:0.084639396854092 2186:0.0905208104842342 2200:0.0829766389591203 2366:0.0873076924758258 2400:0.100001985412848 2611:0.0696953592178546 3543:0.106872002660662 3667:0.104235621313944 3739:0.0886055415443998
+0 6:0.0104333340384939 9:0.23943890011597 13:0.0693419931033267 34:0.166296911045494 69:0.105850673515209 83:0.108133712138474 90:0.58311174062923 96:0.0646425351626102 114:0.0732607798497349 132:0.0632784159434049 142:0.0243496392209554 149:0.116164551983248 254:0.30207458447666 287:0.193687604173155 299:0.0863709733320816 398:0.0811516236057331 409:0.053283404039545 410:0.398252393092981 413:0.0902110066864846 837:0.113217443234318 838:0.274842734053229 849:0.130388454538805 890:0.10957038521032 925:0.154175652019243 1782:0.256940255436341
+0 8:0.145267201197432 9:0.1103990981471 13:0.0959154109706729 14:0.219622563414175 19:0.175216008155552 35:0.234907386798509 83:0.018696624107868 85:0.132661636251616 89:0.229767298307525 90:0.2016433323489 137:0.177217064605088 142:0.102914077794259 181:0.0609064997010605 234:0.155290906414142 235:0.219064410890659 331:0.056408225145347 373:0.0515117736294279 409:0.110554211834247 417:0.25330020129902 421:0.209813789703029 435:0.271927442033433 457:0.0497566310702893 491:0.516697021175133 609:0.0510989955322302 831:0.12665817920511 877:0.271927442033433 1418:0.0916001961335339 1428:0.121274198312283 1931:0.0940642484346827
+0 8:0.297159256927896 9:0.0752776348239261 10:0.0829995307850075 14:0.0998357619779223 16:0.324878147470752 22:0.104940653236262 52:0.0802278231558505 57:0.073466623942507 75:0.0398867472583455 133:0.141963140115131 142:0.132692347151396 162:0.0532960015729656 171:0.08508481138806 176:0.102014889737834 304:0.298047731678221 331:0.0769259503895462 395:0.656519914661488 539:0.0914236522444874 603:0.21070998082926 684:0.0920965953122549 842:0.142508622161272 959:0.10940139415486 1150:0.107377358912019 1159:0.100063615169265 1856:0.153182241150117 4099:0.19144365135825
+0 6:0.0240752791214353 9:0.147336944746599 10:0.0406126511209723 14:0.244254089888072 20:0.0543229359237143 27:0.056081151019804 35:0.313503798945743 42:0.0864237394674363 48:0.058913547078281 51:0.0327023494052522 75:0.0390341134566075 83:0.0124761140234062 90:0.0672775253952342 98:0.0312337374355005 118:0.063059286205824 132:0.0292034266434677 142:0.00998891282009704 173:0.0359899624310533 179:0.0262478094670665 184:0.0567391336075663 218:0.0273128304199704 223:0.130803732028426 256:0.0327679159704068 266:0.0489623092364116 293:0.0911475785429565 295:0.0817664120360712 297:0.141114500201886 299:0.039860801605468 330:0.0478876002770726 398:0.0749040712108827 466:0.222464951427794 478:0.0377601235838917 555:0.277445508951909 612:0.0560513839142784 631:0.0323156397756719 664:0.108863213382298 682:0.0745594740936241 714:0.0498299055128121 842:0.557849221442747 858:0.0483070525151406 912:0.0457921683882672 987:0.0393102371193795 1010:0.107221488459767 1074:0.0629284953095949 1140:0.0978128919997019 1160:0.0609843021129458 1331:0.054431606691149 1424:0.0447753871448684 1448:0.0604394151670231 1486:0.0657962724897798 1726:0.0650188932353893 1849:0.0595368062000185 2056:0.0627683523092947 2076:0.0600450086914561 2124:0.134555050790468 2193:0.0803107378919478 2253:0.0714568589536782 2311:0.0714568589536782 2410:0.0672775253952342 2503:0.0954398087963531 2551:0.0862822007169418 2552:0.0862822007169418 2715:0.0822476095944984 2839:0.0954398087963531 3377:0.0998851574308103 3454:0.0862822007169418 3462:0.0862822007169418 3594:0.0853706920286423 3720:0.106633999510195 3755:0.106633999510195 3825:0.079161175271961 3836:0.0815699412719877 4604:0.0803107378919478 4916:0.0883187833513723 5325:0.0954398087963531 5447:0.106633999510195 6339:0.0954398087963531
+0 6:0.0290174015669093 10:0.034963950256961 15:0.0142023197619463 27:0.0362107345954013 35:0.224916188452725 37:0.0196135904227816 57:0.0618963350943826 85:0.0508076821018974 98:0.0268895236309723 99:0.353563760429701 142:0.0107494783436657 199:0.0193768961141699 200:0.0400464553519825 219:0.0346606238536704 243:0.0390868590824042 281:0.0478505388192878 295:0.281574995397732 302:0.157867579483086 319:0.037604933171184 369:0.0370684700186534 378:0.0573559623326203 386:0.0330147084745253 423:0.0314072317118292 429:0.14192089395919 431:0.0924458007487486 433:0.0335222679872557 436:0.036615260023702 442:0.0352755879986067 452:0.0585136454186945 461:0.0907206261713987 482:0.0656128177447262 483:0.080496973406592 513:0.0310203840820655 529:0.0708080179757332 531:0.373153681955234 534:0.0315961740305275 540:0.0468608656718059 598:0.131428840122195 612:0.0482553525790545 673:0.0419138188563869 676:0.0829027895271925 681:0.0453603130856993 723:0.0425445256557849 771:0.0439781211380662 782:0.0472313891854238 908:0.0440918627462469 944:0.0453603130856993 990:0.0558142589562115 1184:0.0545998729535348 1193:0.0505286401416944 1239:0.0554982923596962 1275:0.0626286692760348 1293:0.0610010308311213 1331:0.0937217313436118 1342:0.0593565543875253 1430:0.0623407028562166 1471:0.0480107395807571 1735:0.13630173446432 1934:0.0708080179757332 1956:0.061785760307204 2063:0.0696696621093185 2078:0.115081821141486 2131:0.228104307102823 2154:0.113289703327845 2227:0.0548915316525715 2321:0.0708080179757332 2379:0.0623407028562166 2383:0.0659984162320986 2585:0.0859924082625601 2649:0.0686349430968884 2702:0.0839186708363889 2785:0.152069538068549 2874:0.079306883922784 2915:0.0663975472208089 3095:0.0656128177447262 3251:0.0591398989601236 3478:0.0839186708363889 3514:0.0885304577499938 5299:0.4299620413128 5566:0.0918025726385034 7176:0.0918025726385034 8137:0.0918025726385034
+0 94:0.0551549694140096 99:0.522418663446056 137:0.0752145349009453 140:0.0649240440928364 142:0.0166773724414682 176:0.0952468495275707 199:0.0429463648539445 218:0.0521156381564008 381:0.0883177878825512 409:0.0469214612203588 436:0.0811529517903556 442:0.0781837433456504 457:0.0633531856403792 558:0.203985607060541 742:0.0942943963050512 935:0.714970322500499 1986:0.284534009346297 2680:0.17577337218042
+0 6:0.0162498600324139 27:0.283894171049434 41:0.149649342272912 51:0.441455816886713 82:0.121885667050018 83:0.0842088291505138 125:0.174206331008168 142:0.0674212059531399 161:0.317162953096178 207:0.384338607438544 234:0.11657064693793 331:0.12703016776032 351:0.11531988736801 409:0.165977213898953 506:0.363636628785916 647:0.4403505163939
+0 6:0.0136311265382113 18:0.0364835196927543 27:0.297679284722781 41:0.251065438940784 51:0.0925783374288901 53:0.0524890736952448 58:0.0914386597555781 65:0.0487598623368652 78:0.0523605462913741 82:0.204486555261274 83:0.0882977763728122 106:0.238535552685181 113:0.218908435401016 114:0.0957150376605723 118:0.0446292390497954 142:0.0547886193789869 161:0.399076207880839 162:0.0738262406716705 165:0.264698098326524 186:0.03867586835817 207:0.0806002048796794 211:0.0677834237866503 239:0.0577831363592303 283:0.0510916937910649 286:0.114567958748941 288:0.0707882909611987 295:0.057868919370433 296:0.0614598889236394 331:0.0532793601747075 342:0.0636690223641758 367:0.058172297160704 400:0.0600554259870343 414:0.0503582404262542 438:0.151994706265954 439:0.073457774188547 457:0.0469967183162234 608:0.0743701826381303 609:0.0482646241840147 622:0.0752203592044912 647:0.0615643621766451 686:0.0806002048796794 754:0.0830766325149591 767:0.0651952084984194 896:0.0863214020025565 985:0.0873324949220469 1018:0.0739591624961776 1206:0.104994553799753 1269:0.0696243184780577 1271:0.0869214747800943 1305:0.0619881913916198 1323:0.439390341520192 1405:0.0965421320256219 1545:0.0871258556521289 1718:0.0968852730961315 2532:0.0998837870640109 3109:0.125012518597505
+0 6:0.0221749903413664 18:0.118702103533115 27:0.193704760792829 78:0.170359303029734 83:0.0574568017615417 91:0.177188046602793 113:0.474824285633172 142:0.0632532775134334 234:0.159075399097542 334:0.303014494577497 394:0.206582823182069 419:0.269760516792484 457:0.15290765173616 572:0.240302381128121 677:0.331981332040866 716:0.212325227718221 1045:0.115194640367979 1309:0.261769491657578 1383:0.322390535645727
+0 12:0.144778656443875 69:0.217889747105556 151:0.169610144325794 318:0.259232795068929 859:0.336130785915027 916:0.260240135478677 2145:0.399056476118474 2509:0.399056476118474 3815:0.425691045991683 5844:0.393929071523823
+0 6:0.021546046007138 12:0.0363116390138391 21:0.032585343486597 30:0.0323774693705297 32:0.0807581076970432 59:0.133789489545558 79:0.0730574480660345 83:0.0139567918082451 91:0.0430406253311523 98:0.104821766608459 111:0.0336859988577898 124:0.186843946364295 138:0.0451686729331278 179:0.0880887778358842 199:0.0251785851614016 242:0.0377436500493583 260:0.0679140609473821 271:0.0594485465141197 286:0.0301819821864907 318:0.130035295343973 333:0.163023608697765 336:0.0492471308193319 384:0.058371684493508 419:0.0655273397670624 457:0.0371426914784817 458:0.0567110040937443 493:0.0480873512602466 500:0.111487537828219 542:0.382854371150402 550:0.0438854041677844 581:0.0806413547824649 582:0.0454326014825526 609:0.0381447494552591 619:0.157881350849139 641:0.0426219116051921 651:0.0696929887487821 676:0.0538624693534306 715:0.0664639176939045 749:0.0627036186418258 763:0.0623857654019194 771:0.0571457297282761 846:0.156013832301092 859:0.0843042756396626 876:0.0519849237606116 1026:0.0745290666573763 1056:0.0528939020416953 1114:0.0659214859518773 1145:0.0707618596332118 1168:0.0700407602296916 1185:0.0847735088920387 1215:0.126276688552715 1216:0.0576696187127197 1438:0.0745290666573763 1564:0.0862778170124355 1627:0.0719141004999589 1679:0.155416656192171 1688:0.0725257576894275 1704:0.0817643965498063 1724:0.082979843240647 1729:0.0976175458776278 1787:0.0774156530667126 1995:0.0696929887487821 2145:0.10008653943108 2174:0.109044987795568 2187:0.225786269719947 2363:0.0920088387844687 2404:0.0843042756396626 2556:0.0912507441025365 2880:0.0810063018678742 2940:0.087952770330748 3083:0.101495186337199 3113:0.0988005455609058 3198:0.101495186337199 3659:0.101495186337199 3875:0.119289430030231 3877:0.111739628571861 4001:0.0936527098494565 4818:0.11503760234365 4823:0.11503760234365 4893:0.0988005455609058 5054:0.223479257143722 6219:0.10676670148176 9163:0.406579460438923
+0 6:0.0104176268278834 12:0.140454951086494 37:0.0985814982198455 41:0.047969367112321 55:0.104630343225305 91:0.0832414769726467 132:0.0631831513422089 165:0.101148133380103 199:0.0486959146339272 318:0.377236504804177 330:0.103607344872944 353:0.35059160066896 448:0.0943426913985845 502:0.0719083240435067 534:0.0794040791819144 789:0.321131802068564 819:0.104630343225305 845:0.141083087964671 846:0.301734041477925 859:0.16304624678107 1185:0.163953753785719 1679:0.300579090290834 1870:0.18879439215344 1871:0.18879439215344 2145:0.193569477748596 2168:0.193569477748596 2247:0.17126937118368 6381:0.199305462888998 7461:0.230708273091806
+0 6:0.0184929972674389 12:0.15583161774478 52:0.0376926523848978 58:0.0310131169323749 69:0.0938097164746718 74:0.0379006136597036 98:0.0299895495568909 132:0.0280401156718397 142:0.00359662764490295 179:0.0252022347436951 218:0.0262248308615051 224:0.0439680491658531 271:0.102049518308335 301:0.0419043250196168 318:0.16741417617901 325:0.0415150646585624 335:0.0612198390473649 373:0.0330041558856441 379:0.0564667201278792 398:0.0359601434223246 411:0.0346371102600197 443:0.0719681120600104 485:0.0319942690183804 495:0.0509512206661451 502:0.0319122690324102 542:0.0657208736783152 629:0.0564667201278792 650:0.0783206236903477 657:0.0480183229039226 676:0.0462302223916403 724:0.0540974016909794 727:0.0494979032772534 732:0.0505897901304873 786:0.0731771553980321 846:0.133906860380366 859:0.361792307164201 883:0.053910849010395 977:0.127131288620837 993:0.0508054103980508 1056:0.0453988999001113 1060:0.140356960295028 1215:0.0541917170225329 1225:0.123717855718681 1426:0.0548723206678923 1506:0.0648143914481702 1563:0.318628636372209 1679:0.0666971517030119 1751:0.125969068289909 1766:0.162302557110524 1819:0.0641746582346402 1922:0.0677548769009736 1925:0.339202509541472 2028:0.088449976215474 2109:0.0771115803523259 2140:0.0736072085705918 2145:0.429521987373738 2217:0.0819699725204538 2314:0.0765476940233952 2619:0.0796571590930524 2622:0.0837852573307883 2623:0.0837852573307883 2992:0.0708643419706308 3063:0.0819699725204538 3271:0.082845171495144 3815:0.183275977235131 4310:0.183275977235131 4509:0.0959062579351909 5041:0.0848006273853679 5730:0.155403406405657 7315:0.107529729922527
+0 6:0.0185101132036872 12:0.0311951691059657 33:0.0256072358275341 69:0.0938965407521773 72:0.028798198850136 97:0.057750147042718 98:0.180103835802659 118:0.060603374540644 132:0.0280660678106571 142:0.00119998548452145 144:0.0275116244663925 179:0.201804482570521 218:0.0262491028887302 224:0.132026229545527 233:0.109449421688005 240:0.0416585683506434 253:0.101130960878113 261:0.127248953215696 318:0.2792818733997 331:0.0361748159805166 374:0.0597261507483236 379:0.0565189821148294 394:0.0431101816074317 411:0.0346691681553659 414:0.0341914781737028 427:0.0491569719396525 448:0.125721572190578 480:0.0340361600973927 493:0.0413116316189873 515:0.100299652237721 542:0.131563401436583 619:0.0678175864843245 641:0.0732325929786179 651:0.059872939601813 653:0.0472724691222599 657:0.0961255311888021 676:0.0925460202611504 700:0.057218081303943 739:0.0472724691222599 745:0.0628547200610445 757:0.0879329798337144 774:0.0519111367993687 786:0.0732448834957826 820:0.06867389479375 846:0.268061592022739 858:0.0928513648877693 859:0.289701727199141 882:0.034750560064912 896:0.0586092029330535 1003:0.0489055361112971 1122:0.0565189821148294 1123:0.0525582625454238 1129:0.0539607454464033 1133:0.0539607454464033 1215:0.0542418734120209 1416:0.05585637467994 1432:0.0550234797911458 1463:0.0680966547379723 1563:0.159461769336077 1599:0.0560734243141969 1622:0.0871940674455299 1679:0.0667588823235266 1738:0.0624866625686371 1751:0.31521414301979 1904:0.064657329871877 2016:0.0745826559102283 2109:0.154365899804673 2145:0.171967810188547 2165:0.0692786326283542 2254:0.223747967730685 2280:0.0628547200610445 2376:0.0642340541964315 2597:0.0871940674455299 2678:0.0885318398599756 2765:0.0702434328631198 2789:0.0732448834957826 2950:0.0838628036096465 3672:0.0900273421836593 3759:0.0760781582339119 3793:0.311094475731321 4006:0.0790443880550569 4385:0.0766185416762616 4503:0.093680068617786 5157:0.0820458386877196 5894:0.0900273421836593
+0 2:0.078320693262962 6:0.0191855380534563 12:0.194000792122856 15:0.0328656930098167 29:0.0348390669601183 39:0.289037435971845 41:0.0883423963383256 55:0.289037435971845 63:0.041469505646713 142:0.0248754471931544 179:0.0522920570110769 209:0.060260093220332 286:0.0537507037324456 295:0.162898693894676 311:0.368756221270486 363:0.0896128759402264 381:0.0922124353509157 406:0.0899450041348035 430:0.0746603257014685 441:0.202930313968274 500:0.0992733608190034 531:0.215879422555382 808:0.100120540484441 853:0.203018981168856 1063:0.140584433155103 1079:0.500354717899738 1269:0.0979948361466846 1300:0.173845831434667 1339:0.115789092174394 1737:0.15770842498606 1755:0.148540710603362 1774:0.163857357138191 2004:0.168380595129373
+0 6:0.0175983248569218 12:0.296585284947927 42:0.0526443547766175 55:0.088375154936523 59:0.0546381201145786 79:0.0596716772932647 85:0.0539237692386309 91:0.0703092257736519 94:0.105646058799866 96:0.0545175841763244 124:0.508699750073064 132:0.0533671267542495 158:0.0631563918031143 186:0.0499320796107828 196:0.0818237459050129 218:0.0499122004015212 220:0.211765026471873 257:0.106622615006448 289:0.0765558461081841 293:0.0832827674099835 308:0.130028970351043 327:0.0740001169377024 398:0.0684408564707707 473:0.0774716309230201 542:0.500330916896043 581:0.131732082804794 671:0.0537367921315336 688:0.0976805701589707 722:0.113019474147408 735:0.114415429294037 772:0.0815275053995948 800:0.155192805536158 859:0.137715665235539 1296:0.0895775593351417 1309:0.103871624765215 1496:0.130582184611355 1538:0.111958059345149 1690:0.114997223669728 5425:0.19486583672694 5426:0.19486583672694
+0 6:0.00661903835752021 12:0.0892407382319349 58:0.0444010254461208 69:0.0671529987999553 118:0.0433423670904163 132:0.0401446230694035 199:0.0309398802761666 318:0.159789616605866 335:0.262942641716082 384:0.0717281339745769 408:0.0389757450677361 542:0.188183225239509 629:0.0808425764725273 641:0.0523745410535446 650:0.112130490237857 796:0.0581835006875061 819:0.0664788887729345 846:0.19171249146364 859:0.207189099652723 913:0.0690834623449911 977:0.0910060022886527 1215:0.0775854878351374 1225:0.0590416808892266 1441:0.0862848005786266 1563:0.114043988405569 1766:0.348549292092212 2145:0.49195227252095 2314:0.109592212791311 2556:0.112130490237857 2747:0.141360192439489 2949:0.19731168659968 3979:0.232366194728141 4307:0.124719037775566 4521:0.126632535943278 5299:0.137307585313275 5730:0.111244390837549 6427:0.131196766623363 8173:0.333074575029813
+0 6:0.0149781013513141 11:0.0673066071297497 12:0.201941241265866 13:0.0331824706200268 18:0.10690314388497 25:0.112412473648422 29:0.018132514691011 34:0.0397893261933335 36:0.114440706635164 40:0.0311953518697134 63:0.0107917129530014 72:0.093212253510521 74:0.122787934148797 76:0.0415369722784812 78:0.0383564076411881 79:0.0677161746979105 83:0.0258728049590574 91:0.0398938996801154 94:0.149860605951262 98:0.0323860616893627 110:0.0481842751453529 111:0.0312231954976842 117:0.0515448931079143 132:0.0302808454725991 142:0.0194201991197847 145:0.0418967056905935 173:0.037317760831438 174:0.073195412609749 186:0.11332711193407 190:0.0428071729815057 199:0.0700132915905271 208:0.037405016287232 215:0.0318068281448527 218:0.02832049839437 228:0.151038817306161 229:0.0261461049716771 258:0.0946905900670432 265:0.04716563265188 275:0.0335738989705577 283:0.0374269172675092 312:0.0452529656226391 313:0.0566165478087564 345:0.0366390308015076 346:0.0415962756622013 355:0.0300486524521225 367:0.0426137712716698 381:0.0479933443857275 385:0.0522378668759679 387:0.0352433685443134 406:0.0468132258169932 415:0.0434382715918168 455:0.0364540444313823 457:0.0688543345405134 465:0.0424546630923143 466:0.0461344957870628 505:0.035913616973329 509:0.0463430091010085 513:0.0373613190883133 530:0.041042997182657 580:0.0451755695961731 582:0.0421109970360901 660:0.0642827582020701 661:0.0666564179506611 671:0.0304905959472247 739:0.0510028815670365 796:0.0438874613501113 845:0.33807392435342 852:0.0495477370682316 952:0.0465121354497204 1020:0.0638235288242381 1054:0.0652501525097314 1240:0.0839109686699889 1245:0.0488238447323572 1251:0.065588418097228 1383:0.145172498184384 1386:0.0714897392175518 1424:0.0464273112762552 1600:0.0744155036844337 1649:0.0567057928165466 2132:0.457885895316513 3974:0.573108918632383 4029:0.0904806691886622
+0 6:0.00959708687039617 12:0.301914845052971 13:0.0212613765687215 17:0.0174318691940618 27:0.0465740254604209 29:0.0232364990176942 37:0.015136128055854 39:0.0963891786299124 41:0.0883821605248274 42:0.0956970715744827 50:0.0303650986317174 51:0.0217268016239959 57:0.0477664126751843 59:0.0397285377586004 63:0.0207440858346004 65:0.0228864739987397 75:0.0453836282824406 79:0.0216942720530381 82:0.0239950238053721 83:0.0248666587588994 91:0.0511233315690373 96:0.0198204467587353 106:0.0447846852937228 111:0.0200059882447216 124:0.0369886394081408 127:0.254524683490065 132:0.0194021857439281 135:0.029145916226214 140:0.0226058612092396 142:0.0282048631893959 158:0.0229611770242577 166:0.143215972687887 168:0.0237590911939979 169:0.0466369046343725 191:0.330311428991503 194:0.0253457453743988 196:0.0297478918740294 219:0.0267481695006529 222:0.367185914691236 228:0.0241941988588886 232:0.0283948261862767 239:0.0271217387513275 275:0.0430243616918881 277:0.0579412195565689 284:0.0194272287067565 290:0.0997990203435933 293:0.0908350039153004 299:0.0264827373202847 314:0.0255280995771996 317:0.0190669054375343 326:0.0373032807123196 331:0.0250077960204988 351:0.0227024514826069 353:0.107659133992832 355:0.0577602303170545 366:0.0403339058075887 374:0.0825778572478758 386:0.127389948608459 388:0.0332663401145311 394:0.0298022422180658 398:0.0248824002805 402:0.0243832835239398 423:0.0242374736508191 438:0.0356709671252679 439:0.0344789619658216 457:0.022058905013707 458:0.0336804524050337 461:0.0350052944269347 462:0.039310119259687 473:0.0563312684969981 495:0.0352553840652383 501:0.0332663401145311 502:0.0441629969379084 504:0.0339824127347132 507:0.0171050424407785 576:0.0313157795145018 633:0.0332663401145311 636:0.0327175643977306 665:0.0395550901130773 671:0.0586097445541706 690:0.0399792089626304 701:0.0459768656927312 706:0.0325668730998295 709:0.0557965539103367 713:0.031988718317825 723:0.0656646105603954 727:0.0684995400560877 735:0.0415969445264808 756:0.0424754323400721 762:0.0425916930134732 769:0.046509001494563 771:0.0339386343271681 796:0.028120505344372 818:0.0490341459937783 856:0.0240091016793076 882:0.0240232021683114 909:0.028165634248499 952:0.0298022422180658 971:0.0398927299131864 990:0.0430727751876856 996:0.035617930392805 1005:0.0674459175913824 1019:0.0459768656927312 1020:0.0817887309125077 1059:0.0293247953938814 1105:0.0803095317300561 1129:0.0373032807123196 1153:0.134093617853111 1277:0.0377636324042464 1377:0.0305116388051536 1449:0.0409913559736885 1476:0.0411886126461425 1509:0.0404248657150182 1642:0.0495358569730608 1649:0.0363337386328568 1659:0.0450005768392873 1691:0.0448479199042675 1782:0.0787820378678077 1899:0.0459768656927312 1910:0.039150522999049 2279:0.111239985505211 2320:0.525931372741079 2927:0.0509320556838123 3070:0.0500679927748926 3182:0.0579746939834258 4044:0.0647614088331975 4450:0.0612024175528679 5018:0.120555220186875 6903:0.0708455446127423
+0 6:0.0314372117552572 12:0.181650037369987 20:0.0253336573287947 29:0.0163105463281646 31:0.0513522078208794 39:0.0451060538388262 41:0.0620386626542042 52:0.0732293806757537 55:0.0451060538388262 57:0.033528987575777 63:0.0291220611834017 72:0.0279487393253416 75:0.027305506531302 76:0.074726613735018 77:0.0338649886115594 83:0.0116365432791701 84:0.0263576459428779 96:0.0278253892599826 132:0.0272382039310668 140:0.0317357572894774 142:0.00931671641705479 173:0.0335680448783136 181:0.0379074380307991 200:0.0867719939736714 227:0.0638451902557924 234:0.032217034528518 256:0.0305628236197976 277:0.0813421114056926 304:0.0680120996185154 310:0.0460923855977894 332:0.115368680018506 347:0.0368933214378905 375:0.0318373174959658 381:0.0431709379744792 387:0.0317020890482209 508:0.0696892865617599 530:0.036918966751276 633:0.0467017153654141 684:0.168125629532805 688:0.0997109438679332 707:0.0666482231765474 790:0.0678513799190734 884:0.0927312489572901 1047:0.0506116949876884 1124:0.0998580794528292 1129:0.0523690671118315 1138:0.0442858542250682 1216:0.0480823260290635 1253:0.0549623606087652 2059:0.174743617261504 2197:0.0773790653839924 2244:0.0621389730269082 2781:0.0767128183390364 3093:0.0647896977662056 3575:0.174743617261504 3698:0.0681714646330807 3784:0.0760807531984787 4039:0.712138067049355 4046:0.0873718086307519 4447:0.0754795330518338 4570:0.0909167907133279 6873:0.372653842441561 7387:0.178034516762339 7706:0.0994581444192836
+0 2:0.0718415891869084 6:0.00879920418055094 12:0.118634676898909 15:0.0301468681798668 39:0.353502297109116 41:0.0810342437115068 55:0.265126722831837 63:0.0570583915502231 142:0.0228176179709118 179:0.0479661800862117 205:0.0696255642738779 209:0.0552750579845439 286:0.0493041597970598 291:0.0708237657421607 295:0.149422848015054 311:0.22550049763293 381:0.0845841325250075 406:0.0825042752720771 430:0.068484026687519 441:0.186142839680065 500:0.0910609407046106 506:0.0492267769973394 531:0.198020729171266 853:0.27933625778773 972:0.150302205539099 1063:0.128954541539783 1179:0.109728383383241 1339:0.106210402969603 1755:0.136252633424335 2004:0.154451257239472 2331:0.505027533976995 3421:0.157675160779275 3853:0.342372391563135
+0 2:0.100147651188122 6:0.0122661489115203 12:0.0826887627024581 31:0.046751991777455 39:0.369588407763832 41:0.112962272485366 55:0.246392271842554 63:0.0530265171748023 142:0.0222655374129416 199:0.114673207276669 291:0.0987287985643238 295:0.208296439874334 373:0.0875647976231826 406:0.11501150621794 441:0.086494783826612 487:0.187091203500169 531:0.27604220810688 853:0.25959772907528 867:0.107823439762309 1063:0.17976348507062 2004:0.215306075640157 2726:0.409176344418629 4885:0.486257667409878
+0 2:0.10893802446029 12:0.179893394343328 55:0.268019139923614 63:0.0576808737549076 142:0.0138399289479732 291:0.21478926655468 441:0.188173577001644 487:0.407025943422701 853:0.282383694718071 1661:0.478185984362466 4430:0.569913816196236
+0 2:0.106549054881118 12:0.351896800802091 55:0.262141581788285 142:0.0203046368290703 441:0.184047001792593 487:0.398100018782633 784:0.256297917360848 853:0.276191127341549 1339:0.315043644859019 1774:0.445829724202619 3477:0.404155572857843
+0 6:0.00675007543847272 12:0.182014873676072 25:0.0506601377273764 29:0.0245149580409537 31:0.0257276732634713 39:0.135589942237852 55:0.0677949711189259 63:0.0437708273906431 72:0.126021929260919 75:0.0410405227043784 79:0.137327271729949 98:0.0437855949357127 110:0.195433811065547 118:0.044200415791501 140:0.0476992457944832 142:0.0140031429633457 162:0.0365584379600376 172:0.0529347305739826 173:0.0504531972842451 204:0.0810439484978518 214:0.173492954279035 227:0.191920261743137 239:0.0572279229310923 275:0.0453915377188399 317:0.0402319115643066 337:0.258027231210219 348:0.0670599152470126 416:0.0656719269086627 429:0.0770323647366979 432:0.063408928661886 518:0.0588664487236275 574:0.0505416030701263 605:0.0981358008620532 613:0.124858728236617 628:0.0733494525600885 640:0.125998570600019 674:0.268148116343566 714:0.0698549785460174 732:0.0738625318240985 846:0.0977539115184961 871:0.0775329621557044 1021:0.0722683459767707 1069:0.107468617116321 1535:0.10017312490973 1555:0.101055242908504 1569:0.110973563834645 1642:0.209045167138569 1662:0.186198645556803 1709:0.086086283528248 1763:0.355449521300272 1859:0.106233427704689 2402:0.0930993227784015 2408:0.228700674380751 2465:0.119678490230854 3109:0.123811326807236 3116:0.122328857661265 3574:0.125422862517169 4785:0.207971412132489 5433:0.149486852752419 5458:0.273298179559655
+0 6:0.0354018626207116 12:0.318202150061917 17:0.0321514563098311 34:0.0940450479421741 39:0.118520564488702 40:0.0368662734813002 41:0.163012648904597 51:0.0400730584534349 55:0.118520564488702 57:0.0440503457519835 58:0.0395797425083761 59:0.0732755811656869 63:0.0255070205791332 65:0.0422119659495394 72:0.0367190219457388 83:0.045864231985551 91:0.0471461075991447 113:0.0631705052636312 118:0.0772720770255124 127:0.117361757794053 142:0.00306007285872346 146:0.0529826000071983 159:0.0354960094902101 165:0.114576073208264 186:0.066964275941756 203:0.0894609037652045 215:0.0375889084328392 220:0.0946665402149835 222:0.225746720223635 242:0.0413438739033272 284:0.0358317107610669 314:0.0470841978615204 322:0.0511351767020556 332:0.0757856203125657 347:0.0484704037545184 353:0.198567227896817 364:0.0546685658896782 396:0.0599293599678506 411:0.0442047765890531 423:0.0447037587575778 433:0.0477142141930557 495:0.0650252665299917 500:0.0610609559453656 504:0.0626773896809051 506:0.0330090381046842 534:0.0449726914642768 550:0.0480714666900711 597:0.0527617319613132 700:0.0729556731664358 721:0.0781303430797525 782:0.0672272121052684 806:0.190014816978582 811:0.0670141909179228 909:0.0519488844769315 1095:0.08328591048152 1160:0.0747294169305622 1177:0.0796733554801093 1206:0.090894976266809 1351:0.0783419719319728 1621:0.0963422520410043 1680:0.0976921483146111 1865:0.0700294758378519 1891:0.0841772939531356 1900:0.0984117946420583 2016:0.0950963007579282 2118:0.175886607821375 2163:0.0745598931128938 2333:0.181789952533618 2504:0.0868263523273502 3435:0.597231881298464 3436:0.119446376259693 3589:0.0933905796848826 4119:0.105729152054919
+0 6:0.0196521025016007 11:0.0220775035387373 12:0.0662395366337452 29:0.0178431512593683 55:0.0493444011724867 68:0.0301609222010784 100:0.0303596547493499 110:0.0948306756555692 142:0.0114661718891032 191:0.253643923970881 242:0.0344259025209917 317:0.146413484023961 408:0.0578600164990105 429:0.112135630301104 480:0.108408106363436 528:0.051404241276954 531:0.165846972660761 555:0.169854341657783 654:0.20536321504811 657:0.0510280183366693 674:0.520455839447352 745:0.133465137436653 837:0.0533137535710291 908:0.104514607023724 922:0.419040784144301 929:0.157387624901666 1074:0.0642088734391133 1196:0.0616691490889932 1210:0.0786938124508328 1305:0.0446844319030439 1445:0.228229507739449 1547:0.0659620477474173 1549:0.0777637577003142 2045:0.0825718953941324 2217:0.174215383123608 2219:0.0706106516616263 2815:0.0742269701268263 2862:0.0832296086185043 4380:0.101917476341484 4535:0.0901157663885869 4537:0.0813455551554983 4661:0.104925551168267 5040:0.114269485029756 5454:0.0912887186483529 5643:0.0994597002500766 7218:0.217607268223133 8228:0.108803634111566
+0 
+0 6:0.0301988622214887 12:0.135718041042838 15:0.0344880097446941 27:0.087931844129778 28:0.148668896280815 29:0.0365587934037394 31:0.0383672976321996 60:0.0764041694818562 63:0.0217582619423892 64:0.0873074916713155 72:0.0626448781256187 75:0.0204010409783876 96:0.0623683987566836 142:0.0208826794541014 159:0.0605583447115226 171:0.0870373666984341 185:0.117236851233939 245:0.116391029937677 312:0.0912390724230177 318:0.486018698957238 340:0.230495935706936 355:0.06058412171603 357:0.0931838091860547 367:0.171835852513882 405:0.0957324576941427 408:0.0592746303266826 425:0.144674009017631 453:0.0976380448286195 647:0.272783571616716 724:0.117787286836615 769:0.14634846460813 1201:0.128379198085811 2331:0.385167582676009 4646:0.429963462414761 5318:0.208818493305241
+0 6:0.0171501968525278 12:0.115613186181624 27:0.12484315016332 31:0.0326836836897548 39:0.172249497194374 75:0.0347577865228512 86:0.133229550188298 111:0.0536266850440894 142:0.0266837749330926 165:0.0832584247542566 172:0.0672467336072273 173:0.0640942662901562 177:0.268497079441613 185:0.0499348716092159 205:0.0678522800905486 259:0.104316752675205 317:0.102218887680678 400:0.0755595933214197 408:0.0504938681633538 437:0.0771308383737457 462:0.316116058671736 506:0.0479730267986008 561:0.0759890695284925 724:0.100338638977051 977:0.117900121566657 1045:0.0445459215145989 1069:0.136524988188197 1098:0.096194572680445 1210:0.274701269138559 1273:0.115128862529788 8199:0.732539984360121
+0 6:0.0277745852223352 12:0.0748937943987255 27:0.161745861855799 34:0.0442699113342191 39:0.0557912935981766 42:0.0332344158914172 52:0.0452883984474924 55:0.111582587196353 75:0.202643689981607 83:0.10075198850538 85:0.0340421110851083 110:0.0536101963130449 120:0.138841011766712 127:0.0552458074641578 138:0.0465808401354134 140:0.0392536877383327 142:0.0821068408649052 145:0.0466145980232558 165:0.107868999228362 173:0.0415200286421575 188:0.0613960370727916 191:0.645261167724383 195:0.154717876355779 214:0.380732127654605 218:0.03150960503246 239:0.0941904627309759 258:0.0526767405671126 289:0.048329756139566 332:0.142698537139733 333:0.0560401428831833 336:0.050786808176085 339:0.043206757829325 409:0.0283691568001611 446:0.0685418659400639 483:0.053934499614181 518:0.145330926598997 583:0.174847787592269 609:0.0393373185661529 829:0.0824174375514262 961:0.18977086250949 983:0.309647026813129 1309:0.0655742252215364 2023:0.0814087008395711
+0 6:0.0244751267499673 12:0.0824960614182613 17:0.0333419307683026 27:0.0534492743795313 47:0.0289606768296447 51:0.0415568466869111 53:0.0942458224621594 56:0.0564892797414997 59:0.0759887617745769 75:0.0248015004728561 83:0.031708300299418 108:0.113283351081878 138:0.256545677754489 141:0.0558931642705749 142:0.0111068244456512 144:0.0363774380255183 145:0.0513463201108624 151:0.0483226230548875 159:0.0736206459557299 160:0.110919138892945 165:0.475273961316121 173:0.0457346147361133 186:0.0694437673641811 211:0.182560981010016 214:0.262112011741607 231:0.196788865730231 275:0.0822926831833967 283:0.0458683909177077 287:0.0567954673518696 293:0.115826722430667 309:0.0450300852687072 331:0.14349721093605 336:0.0559420400604387 339:0.0475925592525807 355:0.0368259915015976 367:0.0522251166238468 430:0.047622353088192 475:0.0495811641614678 507:0.0327168093392756 530:0.0503000614705389 538:0.0536147658015646 550:0.0997028252073934 592:0.0602735665552311 638:0.149465239441543 663:0.0572654806216974 684:0.0572654806216974 716:0.0585872505536672 728:0.0843923059122527 742:0.0627983400649332 856:0.0459222012905711 891:0.0860725892791987 927:0.0785917403350029 934:0.0992510544854103 1045:0.0317858472599165 1047:0.13791130104804 1094:0.126041423637343 1205:0.084660932794432 1350:0.0866722538087903 1391:0.0773206280395455 1426:0.0726224626538059 1471:0.0708668084668462 1512:0.418067981590894 2563:0.117061844956684 3611:0.180837142327063 4161:0.110888179092543 7119:0.135506251075209 7212:0.130676407979469
+0 25:0.280400042952952 56:0.34492241270564 142:0.0387531702887241 323:0.319606591589619 359:0.415978462894568 433:0.302129582069412 480:0.274796888221225 944:0.408823545003883 1215:0.437931246717069
+0 25:0.31643104413315 111:0.263671495658198 2003:0.659877551564736 2204:0.628418931626907
+0 6:0.0430251065800291 11:0.0138100373403925 17:0.0502389970804166 18:0.131606967441766 21:0.0371825034226228 25:0.276778852741977 36:0.0234810592791559 37:0.130867875052533 46:0.180133234863423 50:0.116683765389511 51:0.0208723595311387 53:0.118339867408518 56:0.028372329722289 58:0.0206154121414187 59:0.0381661478801416 63:0.00664276355040962 65:0.0879457035542992 76:0.0511355864722347 78:0.0472200377666038 85:0.0753343104301674 86:0.0238740100009655 91:0.0982256454866377 92:0.0405756084854752 94:0.0184491299053404 96:0.0761639007849571 98:0.0398700282463652 100:0.0189907325796278 106:0.0215117270621898 111:0.0192192199591118 113:0.0329028416724999 118:0.0201238766847367 132:0.0372783259630758 139:0.0502832928655957 142:0.00239079359164614 145:0.0257892246259487 148:0.135073101854256 151:0.121352706268614 157:0.124575222877829 158:0.0441163821902919 166:0.0229306282955293 168:0.0684741779461736 176:0.0159298565358484 177:0.128301906011281 179:0.0335054652687094 183:0.027036269576259 185:0.107376685353402 186:0.0348788561976834 199:0.0143653975801374 203:0.0232981985831917 204:0.0184491299053404 214:0.0263296981492295 220:0.0246538963981519 224:0.0584539410588558 242:0.0430685469901457 246:0.0952979919988439 249:0.0701436753901779 271:0.033917791677421 275:0.0413323581340676 276:0.0238740100009655 283:0.046075755148706 284:0.0373264421775951 288:0.127677268835975 290:0.0319580867525744 295:0.104375250135026 309:0.0226168298217468 333:0.0310038463093397 342:0.0574183016324718 347:0.0504923623416145 353:0.103425262051808 357:0.0284488721014763 373:0.021938919504473 375:0.0217863465301926 377:0.0236534474473197 382:0.0269930266052104 384:0.0666067969900901 388:0.0319580867525744 400:0.0270797354502049 403:0.0355935934284986 413:0.0265723727639114 422:0.0840721233702404 424:0.0316528095814809 430:0.0478376467235013 433:0.0994092561754897 438:0.0342681478639602 448:0.0278312930542358 449:0.0351282416570621 458:0.0647118267967118 471:0.0320361647259101 473:0.0270579745068389 478:0.0241004970504241 481:0.177080317422514 485:0.0212676153582228 499:0.0228907589026993 501:0.0319580867525744 505:0.0221063761455452 506:0.017193010408692 510:0.0277837866701341 541:0.0950711108132656 564:0.0380794495372916 567:0.033349102459911 586:0.0225911995257999 591:0.0323152754359701 599:0.057631108516045 607:0.030146697363909 609:0.0217631168712192 615:0.0408050163289285 625:0.0341665519256531 631:0.020625541104648 641:0.0243175183160281 643:0.0250042525846911 645:0.0391028080795967 647:0.027760133468441 653:0.0313944675988755 655:0.0232704148319454 661:0.0820597852244341 699:0.0458059436544636 721:0.040694787819771 747:0.0338689082890745 756:0.0408050163289285 759:0.0454136700947403 778:0.0293686942163329 803:0.0768139220562437 805:0.0400620640536111 811:0.0349048547954633 836:0.0348499206541099 860:0.0422541197117189 862:0.0295711963188417 863:0.259832125947282 872:0.0350718376950889 882:0.0923138014372882 885:0.0430842019301976 896:0.0389233893774176 912:0.146134852647139 955:0.0456075260087431 968:0.0426589507732039 971:0.0383238829090713 973:0.0419946419811323 974:0.0394735210014561 984:0.0352421942138333 996:0.03421719688795 1020:0.0392861274923229 1021:0.0329028416724999 1027:0.0321149724105046 1041:0.0438443885132904 1068:0.0362138995417938 1099:0.0435320431432293 1103:0.0402677415886088 1113:0.037312342674061 1167:0.0392861274923229 1172:0.0466498834945896 1183:0.131533165539871 1261:0.0908273401894806 1277:0.108835546950361 1284:0.0430842019301976 1291:0.0466498834945896 1313:0.0401642757399104 1324:0.0366769690275437 1333:0.0873735394044336 1360:0.0908273401894806 1382:0.0402677415886088 1385:0.0489290690958587 1386:0.0440050097672922 1394:0.0398612840711684 1400:0.0468747597778781 1448:0.0385756138675242 1459:0.0937495195557562 1469:0.0347953420760328 1489:0.0360229700067461 1507:0.0421233828157812 1558:0.0370240287477101 1559:0.0893599175275438 1562:0.0495316368678779 1694:0.0483667033588658 1707:0.0351282416570621 1910:0.037610864498609 1911:0.041619808677625 1995:0.0397626588430821 1996:0.0524947506602506 1998:0.158851994944458 2050:0.0395688029290793 2057:0.048643198977922 2099:0.0893599175275438 2173:0.0432308553809815 2251:0.044335732974358 2311:0.0456075260087431 2373:0.0492249717680717 2403:0.046217359925869 2459:0.044335732974358 2466:0.048643198977922 2479:0.05206222709153 2554:0.0466498834945896 2586:0.0516508108201247 2640:0.0425218361932048 2760:0.0483667033588658 2802:0.059788721208702 2891:0.0579070942571911 2985:0.110139677867465 3158:0.0556947440986143 3185:0.0483667033588658 3222:0.110139677867465 3239:0.059788721208702 3367:0.0556947440986143 3458:0.0529506649814859 3472:0.0978581381917173 3571:0.0489290690958587 3595:0.0508837039568941 3731:0.114206808852125 3842:0.0471057978158249 3871:0.0680594274264161 4390:0.0609147060993938 5181:0.0571034044260624 5683:0.0579070942571911 5720:0.0656335883743631 5942:0.0609147060993938 6311:0.056369693095094 6337:0.0656335883743631 6379:0.0680594274264161 6539:0.062214560260755 6568:0.0656335883743631 6818:0.062214560260755 8650:0.231969968117056 8792:0.0680594274264161
+0 4:0.0383586827252584 6:0.0354720576633464 15:0.0101275394200723 17:0.0161076032128838 18:0.0632936444235633 25:0.155296230903262 26:0.0127944037234905 27:0.0344287081914893 37:0.0279725303338265 46:0.0247518135419966 47:0.0139910041320088 51:0.0401525155734396 53:0.0227652430094953 54:0.0221332669395461 56:0.0272901683522989 57:0.0220688445315098 58:0.019829110739164 59:0.0183552181157256 63:0.0575045911458945 67:0.0167209905913374 68:0.0181468279947691 75:0.0239633830132419 85:0.144921903450779 86:0.160743947001747 87:0.0275382225026323 96:0.0366294501567913 98:0.0383493281554334 100:0.0730655951491202 122:0.540886618415891 123:0.0299899436171151 132:0.0179282385581648 135:0.0269317563493267 138:0.0247876226002974 140:0.0626656106565999 142:0.0168637721506061 144:0.0175740673714484 148:0.181889707886894 157:0.0299559362778585 158:0.0212168600332038 162:0.0160097348938387 169:0.021546993800971 173:0.0220945521236509 179:0.0322275187429133 181:0.0249507490972955 185:0.0172135307480239 197:0.164805557647647 199:0.0138174807020405 208:0.0664386391598307 214:0.0253254456786185 215:0.018831719982042 219:0.0494323237733157 239:0.100245407164642 275:0.0198779413413854 276:0.0459268420004991 277:0.0267697675991546 291:0.0237925370938106 296:0.0266560106357906 313:0.100562084011851 317:0.017618428859597 324:0.0313201288758399 337:0.135594881977696 339:0.0229921316090975 347:0.0242832555926036 348:0.0293669950089646 351:0.0209777893793597 369:0.0264331741326907 384:0.0320331590859629 390:0.0270021828861469 398:0.0229921316090975 412:0.180764502316817 414:0.0218410709148812 433:0.0239044111230906 434:0.0255786225387689 446:0.0364740073451534 448:0.0267697675991546 455:0.021583175594194 457:0.0407662638258579 458:0.0933654372915166 484:0.0653428230014779 485:0.0204564379893655 490:0.0305910140022673 499:0.0660530175295188 505:0.0212632072366351 506:0.0330744886393613 509:0.0274380886563392 510:0.0267240731767143 515:0.0213567038169847 516:0.0414409086426152 526:0.0354766970568963 540:0.0334160385278418 560:0.0704258199056011 575:0.0308520718005934 585:0.03662704468781 609:0.02093304036361 657:0.0307018686463225 662:0.0308142594312671 672:0.0413022601633137 673:0.0298883463989587 681:0.0323460087212743 684:0.0276651537086838 687:0.0332615435989597 730:0.0284151949498928 738:0.0716379461961103 741:0.0716379461961103 771:0.0627207615251501 789:0.0607474981731133 791:0.0393560830217614 812:0.0331099365955239 819:0.0296888919580179 829:0.131573346365334 844:0.0323917031437146 847:0.0630468323443995 856:0.0221851758433231 882:0.110991025724845 904:0.0360314936894175 912:0.0281122119326413 913:0.0308520718005934 966:0.0295263466676507 996:0.0658242077937179 1003:0.0624804389509346 1009:0.0263457259698797 1078:0.300196993386053 1123:0.0335735335449883 1129:0.0344694213548567 1164:0.031360380762575 1170:0.0393560830217614 1207:0.0336802553285566 1215:0.034649002237614 1216:0.0316478800754299 1239:0.0791506110326437 1263:0.0401507764950663 1307:0.0485977365652009 1318:0.0391426302151769 1322:0.03321069240712 1359:0.0328149681426897 1372:0.0413022601633137 1378:0.0362497330045683 1436:0.0396871795456019 1480:0.0429758010206409 1513:0.0493034630931281 1531:0.0403929060735291 1538:0.0752227417335777 1540:0.0384369036872497 1607:0.0382460539752669 1764:0.0518863580402399 1767:0.044870589995377 1778:0.0457727120396264 1793:0.0467878775657612 1855:0.0382460539752669 1931:0.038534039441419 1942:0.0383409174956266 1963:0.0423265955474409 1985:0.041581968520338 1995:0.0382460539752669 2161:0.0392486544508169 2298:0.0413022601633137 2414:0.0470628441871752 2492:0.056552986179282 2495:0.087735979039654 2631:0.0428085633734576 2651:0.0518863580402399 2666:0.039915666162849 2685:0.0549253986376882 2705:0.0433209909251436 2783:0.0496807747763698 2934:0.0513946475841864 3109:0.054219672109761 3223:0.154183942752559 3388:0.0513946475841864 3504:0.065463543198881 3553:0.0473474607068488 3586:0.146828779409111 4116:0.175773995387907 4189:0.0460148416180891 4445:0.0513946475841864 4625:0.0556984345853602 5131:0.056552986179282 5319:0.0575082935847999 6128:0.06313022912936 6979:0.059841607654321 7199:0.179524822962963 7457:0.06313022912936
+0 6:0.0483562159028512 11:0.125803384719242 17:0.0970783830779919 18:0.0136236564331624 25:0.26741421063167 26:0.0110157386058886 31:0.00970042120149855 33:0.0140835559882482 37:0.120419086720306 46:0.149175889494411 47:0.0120459888309723 50:0.024157680431286 53:0.0196004418581625 56:0.11748158318925 57:0.0190008559950916 59:0.0158034941828257 65:0.0364157634899286 74:0.0625920087357193 78:0.039104894447344 83:0.00659442169640395 84:0.0149368612397963 85:0.0311937516038864 87:0.331938411701029 91:0.0203361945503028 92:0.016801181892356 100:0.0157270224279512 106:0.0178147637302813 111:0.0318324848267232 112:0.0283366963660841 118:0.0166654266038 132:0.0154358728932526 139:0.0416417045173285 142:0.015179359694026 148:0.0447438811192286 151:0.0401989070232376 157:0.0257914921916752 158:0.0182673135235204 159:0.0459329809932433 162:0.0413522330273914 175:0.0739085050842938 177:0.106252191426933 183:0.0447797383498616 185:0.0148205230429392 197:0.113515564028108 234:0.0182573730352512 242:0.0356668707546283 249:0.0580889205518938 262:0.0714575157231596 275:0.0342290599190426 277:0.092193045892794 283:0.0190786330008627 284:0.0463673892637823 288:0.0264337257936667 290:0.0793974974379846 291:0.0204849225536885 292:0.0752902965097037 294:0.145928687274147 295:0.0216093809561288 296:0.0229503188882919 299:0.0210689750390231 301:0.0230680159187058 307:0.0244408215863967 308:0.0188047472372061 310:0.0261205256864525 319:0.0692634792158047 323:0.0435435761719689 341:0.0425296974164479 351:0.0180614782311535 353:0.0571005325566154 366:0.0320886033950685 377:0.0195884122396322 382:0.0447081157125902 384:0.0275799415774216 396:0.0517003496425842 400:0.0224258650888077 408:0.0449592947288566 422:0.0232078842362589 423:0.0192827018288228 424:0.078639058937037 430:0.0990409058426722 442:0.0216577077360606 459:0.0232483666211093 466:0.0235173820892087 483:0.0247108556170102 485:0.0176126045862295 493:0.0227207138166118 506:0.0142382532726285 507:0.0816499535982976 509:0.0236236732102254 510:0.023008919443337 516:0.0356798352673069 526:0.0305447623683748 528:0.053257236429659 530:0.0209219550439203 550:0.0207353427188424 557:0.0239526127546092 573:0.0323079887199333 599:0.190906955775225 626:0.0240203017352847 639:0.0292812013146309 661:0.0339785755300976 662:0.0265304921249016 681:0.0278492991715712 687:0.0286375573127958 697:0.0272843125938221 702:0.0303176466817729 705:0.116364683053408 706:0.0518187095345145 712:0.0233712412017838 716:0.0243689527685499 756:0.0337923460449546 763:0.0294765480896654 778:0.0243214478790245 791:0.0338848400041811 796:0.0671158216788429 807:0.033093444054847 811:0.0289061747308008 812:0.0285070265622612 827:0.0217390030875964 829:0.0188803587149788 847:0.0271410626100564 851:0.0289061747308008 873:0.0294271967052523 876:0.0245622714620107 882:0.019112233026375 885:0.0356798352673069 887:0.0321609687248306 891:0.0358012851429209 912:0.0242040805477127 915:0.0315351898304052 917:0.0619218108293734 939:0.0370013484530648 953:0.0278101775463945 966:0.025421623696345 969:0.0284640529384596 981:0.0302068000396309 985:0.0326116535983551 990:0.0342675764334865 996:0.0283366963660841 1012:0.0679571510601953 1035:0.0310845049568807 1042:0.0289980601595202 1064:0.0235809624236872 1083:0.0272843125938221 1088:0.0980690366994161 1095:0.0359248846851149 1144:0.0695550499194059 1162:0.0295262507324389 1243:0.0338848400041811 1277:0.0300437609181164 1296:0.0259093547672573 1301:0.0334341551306566 1305:0.0231475973136513 1306:0.0364423948707924 1333:0.0361788469207632 1354:0.0728847897415848 1363:0.0288154826531041 1382:0.100042218871486 1403:0.0363093776712979 1409:0.0334341551306566 1431:0.0297286762631023 1442:0.0382745348588908 1455:0.0337923460449546 1459:0.116456865774995 1472:0.0258797021034664 1502:0.0728847897415848 1538:0.0323826759755123 1594:0.0446731688115668 1608:0.0275799415774216 1649:0.0289061747308008 1666:0.0367162806344489 1672:0.0410192266489974 1690:0.0332617218801556 1722:0.0363093776712979 1739:0.0410192266489974 1771:0.0363093776712979 1781:0.0323079887199333 1784:0.074296736896335 1806:0.0349924093550984 1831:0.0344671097744917 1893:0.0438506672792653 1952:0.0356798352673069 1954:0.036050711365529 1966:0.0461231543272608 1979:0.0376089655899708 2050:0.0327685858617366 2124:0.0711209231198695 2140:0.0405202149955411 2185:0.0318064158370957 2233:0.0386327257731888 2234:0.0392070101889072 2321:0.043473105501423 2380:0.0394094357195707 2412:0.0374520333265892 2424:0.0356798352673069 2492:0.0486910470074995 2531:0.0386327257731888 2570:0.0386327257731888 2599:0.0815305288266982 2705:0.149194201619038 2750:0.0418417281812989 2754:0.0356798352673069 2910:0.0418417281812989 3035:0.0398327890833326 3099:0.0472897250464392 3109:0.466821079095331 3240:0.0973820940149989 3329:0.0466821079095331 3432:0.0466821079095331 3472:0.0405202149955411 3491:0.0415566603626831 3576:0.0407652644133491 3660:0.0563628673660015 3801:0.0486910470074995 3924:0.0438506672792653 4060:0.118388615992539 4426:0.0893463376231336 4754:0.049513548539801 5325:0.0504460238698175 5328:0.0504460238698175 5466:0.0504460238698175 5496:0.0527956740435934 5557:0.0472897250464392 5806:0.0945794500928784 6224:0.0912112882831666 6626:0.0466821079095331 6862:0.0543539282680352 8993:0.0543539282680352 9093:0.0640346877245036
+0 1:0.49317570152766 2:0.141422803738849 3:0.235474389993648 4:0.199798826994387 5:0.0648320999944801 21:0.0698570690752999 31:0.0440136650176209 44:0.200001761874167 47:0.0546561954578334 63:0.19968273224315 66:0.216751749901648 75:0.374454137371375 95:0.228467049743282 142:0.134751954039862 169:0.0841738515408118 170:0.114722875075638 189:0.172827296006044 229:0.181421349685105 256:0.0785856307572891 267:0.247266415320601 269:0.123308232545809 408:0.0679978493208346 586:0.0848869678208647 1056:0.113394936901883 1164:0.122510084652893 1380:0.118936182441954 2375:0.179758089820422 4924:0.195625052611932
+0 1:0.408885886531622 2:0.14656487612687 3:0.244036137652875 4:0.155297569882017 5:0.134378734596188 7:0.148624538983429 21:0.0723970420959413 23:0.0860854486427076 29:0.0434638945822526 31:0.0456139829691771 44:0.207273740014183 47:0.056643471244113 63:0.0517357776507095 66:0.112316375205233 75:0.0727629616760401 142:0.127238012558776 162:0.0648164312960446 165:0.116197072668759 199:0.0559409505870642 227:0.0850664521908101 228:0.0905105461803031 256:0.0814429705308552 264:0.0985177516771207 268:0.115154545695273 269:0.127791666907359 346:0.0997068620213226 684:0.112004136642107 766:0.159335608501746 847:0.127624557938704 2024:0.116552069007036 2227:0.158471431220568 2422:0.190536921884225 2531:0.181661441175244 2744:0.164543696734257 2967:0.201135780597222 3611:0.176847446134018 5843:0.484545119190433
+0 1:0.464385118812949 3:0.369546466015668 4:0.235168728216612 5:0.101745558988308 15:0.0620897381289303 63:0.313376108657928 75:0.146914281372881 142:0.112787033087785 162:0.0981521972752731 269:0.193516252740568 1317:0.470119626926987 6175:0.421504545510849
+0 1:0.394222493890857 2:0.376823447237086 3:0.15685637151083 4:0.19963775488688 5:0.17274622455267 7:0.191059456411913 21:0.093067669735367 26:0.133176942116006 47:0.0728161775922529 66:0.288769347775887 75:0.0311793552617739 110:0.148475209959375 142:0.123672383607872 264:0.126646300880726 269:0.328556866588693 430:0.119737454349865 631:0.103251307520768 766:0.204828724486736 1015:0.192264965264796 2325:0.272766859548486 9016:0.340704994610235
+0 1:0.336589047170998 2:0.193040194848451 3:0.0803548312656365 4:0.136361334501295 5:0.0884949306936325 11:0.0708312468221696 21:0.0953539448329655 24:0.126870184744921 26:0.0682242653526269 29:0.057246175896657 32:0.118160548918657 45:0.138446383802226 47:0.0746049600341561 48:0.0964290309259018 54:0.118022372080671 75:0.191671793009048 88:0.120360742283532 137:0.129039612102097 142:0.0980984406148964 150:0.137462159731815 176:0.081703732750397 187:0.146978021773065 221:0.150048617059564 276:0.244898091631847 304:0.238706450386608 328:0.159916938332019 346:0.131323633471792 415:0.13713900021957 496:0.132176331018738 524:0.356372165335286 930:0.138006183426944 1064:0.146045026595307 1154:0.214098076699279 1808:0.316974157470949 2512:0.244076216413851
+0 1:0.333711224377586 2:0.106327616088531 3:0.132779667825846 4:0.112662875487326 5:0.0731152521677733 7:0.161732742591262 20:0.514237203205721 21:0.0787822270384112 23:0.093677906767043 30:0.156559291383714 31:0.04963698872727 47:0.0616392421928465 63:0.112597411797172 75:0.211147785445058 83:0.101230831715854 142:0.104689263537822 227:0.0925690381240625 256:0.177251954203918 267:0.13942897353569 408:0.0766854675443549 475:0.105527415810381 640:0.243091925355143 1081:0.144784067943567 1202:0.161365349979064 2037:0.214103836000831 3535:0.228592298277586 4155:0.23336376814297 9680:0.30289686784688
+0 1:0.334058045738276 2:0.159657181316539 3:0.132917663858653 4:0.225559928844147 5:0.1463824796327 6:0.0130366096963742 7:0.161900829145613 21:0.0788641042939054 26:0.112852081527822 29:0.0473464248830995 47:0.0617033029863936 48:0.0797532725596418 63:0.14089304087054 66:0.244698680268196 75:0.132104517722057 142:0.108178648371949 169:0.0950268239793855 227:0.0926652438175325 229:0.0682709826034683 256:0.088718084827818 264:0.107318117123753 269:0.27841400850378 286:0.0730474113900704 325:0.11706392136365 363:0.121784240207104 387:0.0920251564576391 430:0.10146366740013 457:0.0898939455930606 485:0.0902172409764676 571:0.102889475339867 574:0.0976124131737682 636:0.133329870729281 640:0.121672283679332 766:0.173568694007721 1314:0.152017477055739 2375:0.202935235201322 2611:0.15796928718464 2744:0.179242008851114 2833:0.196959696991005 7639:0.288708144351285 8584:0.303211664282185
+0 1:0.560177360422437 2:0.356969253471021 3:0.222887809599988 4:0.283678765941132 5:0.122733387354157 7:0.271489282410664 15:0.074897459469183 66:0.205165932328547 68:0.134203507669264 75:0.177219404786674 142:0.136052470084517 269:0.233434318343687 998:0.241970781145124 2686:0.333436712953939
+0 1:0.455165123790609 2:0.290050912309362 3:0.181104708286481 4:0.307332855006233 7:0.220595228523848 15:0.121713992101304 142:0.0829108025822451 513:0.265844935646379 1395:0.37934828471381 3691:0.544530418244636
+0 1:0.384332473778587 2:0.367369924087843 3:0.152921251894319 4:0.259505815063985 5:0.0842062348636809 11:0.0673985793179916 21:0.0907328432357415 26:0.259671755959633 47:0.0709894085162971 63:0.194516270307299 66:0.140762436824397 95:0.593482242621573 142:0.116680416966149 162:0.0812323118407336 169:0.109327988956546 170:0.149006146086251 189:0.112237116178397 213:0.154845982350919 269:0.160157113393856 408:0.0883180225632501
+0 1:0.342970775395654 2:0.163916864066549 3:0.204695897100606 4:0.0868417158493712 5:0.112715993188425 7:0.124665279622034 15:0.0687843928482012 20:0.566256261521067 21:0.121452319494899 37:0.0949921513821372 44:0.173859841274623 47:0.095024337565109 75:0.0813774542258446 107:0.192045894079221 142:0.104123319809355 169:0.146343235491762 187:0.187205906272471 189:0.150237307761508 256:0.136627649295655 313:0.227666418774784 324:0.21272057893769 475:0.162683258677425 631:0.134741858530847 1590:0.309283050431708
+0 1:0.297234916893718 2:0.213087319519106 3:0.177399278095911 4:0.225783583137237 20:0.0981489648146243 21:0.105256402823158 47:0.0823526466546973 63:0.112826194864894 66:0.326588415492784 86:0.135165316068353 97:0.10856949735864 142:0.094750173941949 229:0.0911182357345149 256:0.118408071174372 269:0.185793380227033 276:0.135165316068353 304:0.131747996070806 640:0.162390570691551 1514:0.254992295386983 1808:0.174945880119261 2807:0.236332051539118 3700:0.282230524798249 4300:0.315321878860351 8365:0.385325884472305
+0 1:0.579760155291678 2:0.277086193295965 3:0.34601935093074 4:0.146797833163908 5:0.0952679446804043 7:0.210735045252101 15:0.058136805145151 44:0.293893870287 75:0.137561007770387 142:0.149609158954257 187:0.158227075130295 270:0.19242443929997 709:0.147982910730973 1590:0.261407096771609 4613:0.330124457648942
+0 1:0.38289694453002 2:0.0609996253428297 3:0.152350072135129 4:0.129268264399921 5:0.0838917141783219 21:0.0903939448621796 47:0.0707242543094154 54:0.111883234752921 63:0.193789728018007 66:0.140236671740915 75:0.181701653971899 83:0.0387170836387332 137:0.244654788049448 142:0.0929956809604702 162:0.080928899125098 169:0.217839270835019 189:0.447271586759821 229:0.156504242136473 256:0.203377131839782 269:0.159558906798451 284:0.181487745338308 387:0.105479127585909 565:0.476808347090516
+0 1:0.474378936687216 2:0.453442177930695 3:0.283124478751293 4:0.360344528864253 5:0.155902767326706 31:0.105840350336052 66:0.260613165665234 142:0.11521427078683 269:0.296521240090841 1754:0.393345798242454
+0 1:0.617732166132236 3:0.210675576022423 4:0.268135738456201 5:0.116008709154731 15:0.0707937569336095 63:0.17865329065378 66:0.193924697142775 75:0.0837546931184553 142:0.171464035685455 269:0.2206442315922 304:0.156461093077339 328:0.20963638755874 346:0.172153196586071 8264:0.480592948859658
+0 1:0.569375386116652 2:0.310997685814918 3:0.291275476702561 4:0.247145766378129 5:0.106927414807358 7:0.236526080978354 23:0.136999273040593 44:0.164931194238211 66:0.178744050199882 75:0.385991400059243 142:0.118531226245016 204:0.114334315521562 3535:0.33430485124509
+0 1:0.412110029671557 2:0.262614343301625 3:0.163973606070783 4:0.208696161089105 5:0.0902922243520686 7:0.19972862906383 21:0.0972905420935302 47:0.0761201544131592 66:0.150936014971668 142:0.100090777394389 269:0.171732438073596 387:0.113526647365949 510:0.290792648985943 852:0.15960416686201 930:0.140809029153293 1064:0.149011137739623 1980:0.399394405253548 3621:0.490603952881673
+0 1:0.372763245930077 2:0.356311305192916 3:0.222476993684862 4:0.28315590310695 5:0.122507171174219 21:0.132002386466976 26:0.188891311361656 31:0.0831685167498427 47:0.103278713681254 66:0.204787780511301 67:0.123430911995716 114:0.15322001349688 134:0.156278313521384 142:0.124484896087175 176:0.113105836630094 228:0.165028953536476 238:0.215172178482332 269:0.233004063619194 867:0.191810342510831 963:0.18513490565241 986:0.195124252496731 1045:0.113353753352638 1059:0.200024821022151 1754:0.309088041618704
+0 1:0.379918982928287 2:0.302626019224312 3:0.151165177161896 4:0.192394330526732 5:0.0832392506183601 20:0.41817266151551 21:0.0896909105322527 26:0.128344904672589 30:0.356474954424512 31:0.0565100389058232 47:0.0701742000019747 63:0.0961412691095244 66:0.139145988126002 75:0.0600961595189565 142:0.12687456616966 162:0.0802994787092186 169:0.108072518467161 170:0.147295030561912 228:0.112131284161097 229:0.155287038316363 267:0.317470375263603 269:0.158317945478575 408:0.174607641017593 766:0.19739695701647 847:0.158110918297314 986:0.1325799657246
+0 1:0.274950491162895 2:0.131407762754675 3:0.164099222104025 4:0.0928249057514916 5:0.12048185992259 7:0.133254424077371 20:0.54474298709448 21:0.0649100492784406 30:0.0644959637518237 32:0.0804351310951323 47:0.0507856454257463 63:0.0927709690767674 66:0.100701095490699 75:0.152222296377091 142:0.0667783029386501 144:0.127583459456303 154:0.0775649395836975 228:0.0811503321502607 256:0.0730204864383094 269:0.114575998634559 458:0.112968398564493 546:0.0927040271547796 631:0.0720126277824878 930:0.0939445995932776 997:0.102043914351955 1064:0.0994168609361531 2116:0.16211004679528 2744:0.147527290539349 3382:0.190241255047664 9295:0.539937898226085
+0 1:0.462321483324639 2:0.294611254266964 3:0.183952137357958 4:0.234123684967748 5:0.101293421876673 7:0.224063549544714 20:0.203548876307826 30:0.650688845924548 31:0.0687667797178871 66:0.16932604718314 75:0.0731307117027171 142:0.0982501011206851 269:0.192656304842709
+0 1:0.449944385765398 2:0.358405040166716 3:0.179027439647746 4:0.227855813379916 5:0.197163264664349 7:0.218065004133755 20:0.0990497710218357 21:0.106222440734927 26:0.0760005052313048 31:0.0669257812523119 40:0.109712457427229 47:0.0831084750572378 63:0.0759078052953484 66:0.329585827359887 75:0.177932209212091 142:0.127493048292525 256:0.119494814429375 269:0.187498582421304 313:0.19911750369373 641:0.138939872809812 1826:0.355467321015656 2164:0.226629795583358
+0 1:0.650578316915219 2:0.155466245506508 3:0.291214416289995 4:0.2470939569274 5:0.106904999490639 11:0.0855666459772731 44:0.164896619522622 63:0.0823167936506794 66:0.17870657987944 75:0.154364193695572 142:0.158008504543979 269:0.203329315857788 304:0.14418290831448 328:0.193185305383364 346:0.158643583981257 384:0.206347024169927 1808:0.191457984527332 2171:0.263464233598093
+0 1:0.558297271215671 2:0.266828384456409 3:0.222139744799882 4:0.1884844481009 5:0.122321464750393 7:0.270578099443133 15:0.074646085680967 23:0.156722686864317 25:0.163518152648789 63:0.0470937319156373 75:0.264936921114375 83:0.0564528979761522 142:0.135595845453405 1010:0.242582094773843 1057:0.296821147512215 3535:0.382433814107772
+0 1:0.384084599590284 2:0.183566494925017 3:0.152822625746976 4:0.194503835618419 5:0.0841519262805115 7:0.186146138160811 21:0.0906743253341747 31:0.0571296424797795 47:0.0709436240894931 63:0.0323984695942429 66:0.140671652471911 67:0.0847864570493465 75:0.121510166129862 134:0.107349806485956 142:0.112718325438925 176:0.0776940152544663 234:0.107524938603979 246:0.30986190940331 269:0.160053820497232 363:0.140021926527702 506:0.083854742191623 538:0.131337600051493 553:0.191608567334462 766:0.19956131334012 986:0.134033637004757 1008:0.194900467516393 1059:0.13739990754493 1844:0.194900467516393 4002:0.237245416172571 4114:0.240082871985861 4565:0.271637618823092 5923:0.268589795303549
+0 1:0.508468405081339 2:0.27772977397007 3:0.346823040802387 4:0.147138796556204 5:0.0954892209819359 7:0.211224513893131 15:0.0582718379441532 44:0.294576489701936 66:0.159623517874185 75:0.275761034071854 142:0.141135672600105 186:0.0965157587902313 270:0.192871378387355 1590:0.262014260028482 8818:0.376664145387056
+0 1:0.626129564581692 2:0.29924763883216 3:0.249129395501036 4:0.317077544986551 5:0.137183341943243 63:0.0528155507453199 66:0.229321041783974 75:0.198084243659595 142:0.152070540283959 229:0.25592247309358 269:0.260917592229603 383:0.292702891825305
+0 1:0.252652548938401 2:0.161001136700845 3:0.100527399358424 4:0.213242472707448 5:0.1107110188512 7:0.122447753259406 15:0.0337804334499159 20:0.333710270586374 21:0.0596459723805303 26:0.0853515322105043 30:0.1777964051188 32:0.0739120007002998 47:0.0466670298060856 63:0.0426237132830662 66:0.277603306133477 75:0.159859849769488 110:0.0951560117236386 134:0.0706151776604763 142:0.0613627143558547 176:0.102214933961109 186:0.0559505977794317 189:0.073782455094606 228:0.074569200361291 256:0.13419733818501 269:0.105284111258539 346:0.0821457972052501 408:0.116117034287658 472:0.179661883368168 508:0.0764991225364285 513:0.073782455094606 624:0.126339898853894 966:0.0984852042786318 997:0.187536708558916 998:0.218268494745411 1380:0.101551129282732 1433:0.0950612536969487 1446:0.102907163825636 1545:0.126040963337578 2306:0.13869676157802 2807:0.133923016943868 3592:0.167030289697006 3673:0.168417947141186 6780:0.421142079102775
+0 1:0.456885233141983 2:0.43672056062825 3:0.363578238066608 4:0.308494293109131 5:0.200204707499504 7:0.221428877447325 20:0.100577713952335 21:0.107861029352619 31:0.0679581791395326 47:0.0843905073690573 66:0.334670022201654 75:0.144541594848073 142:0.138706883091524 256:0.121338142839478 267:0.190892707308288 269:0.190390937754727 408:0.104990348415616
+0 1:0.573372141881587 2:0.31318074785794 3:0.293320097824375 4:0.248880617041921 5:0.107677996536006 7:0.23818638628968 31:0.0731011839768849 44:0.166088936068053 66:0.17999875198451 75:0.272090618662867 142:0.134283669122792 144:0.114024893989967 269:0.204799527364671 5904:0.380155046385014
+0 1:0.349143254888566 2:0.22248918977737 3:0.138919886480307 4:0.176809229863855 5:0.0764963694927166 21:0.0824254060583776 47:0.0644896667416995 66:0.127874324216561 75:0.11045601659084 142:0.0847977901233203 229:0.142707852031743 270:0.154509169453584 930:0.119294652438964 1064:0.126243551234422 1590:0.209899499036557 2239:0.442024712694182 4979:0.270068926134457 5144:0.581980735544964
+0 1:0.2934303775573 2:0.18698653359243 3:0.116752405121342 4:0.0990638242768004 5:0.257159297998463 7:0.142210678740116 15:0.0784651125263314 20:0.258380481031765 30:0.275323385160383 118:0.149966937779847 142:0.0772054674563494 187:0.42710655406032 339:0.1781360821319 363:0.213946025491013 6821:0.576228035323314
+0 1:0.283511909094238 3:0.263213921248743 4:0.0638101939244681 5:0.124233428256148 11:0.033145433873644 15:0.0252709507388913 20:0.416077935646469 21:0.0446208137629864 29:0.0267883091549329 31:0.0281134833707493 40:0.0460868635334443 44:0.191625017059551 47:0.0349113404097809 63:0.159432791216549 66:0.276897945853916 67:0.0417233951913007 75:0.179385370882268 95:0.364830138614364 97:0.0920506342995622 142:0.118588171645054 170:0.219835792319881 176:0.0764664125680913 180:0.0568403642340235 189:0.165588708995227 192:0.0595678202792286 204:0.0442797075946464 205:0.0583644110039842 229:0.038627292193831 238:0.0727347282121919 269:0.0787624467029782 276:0.0572999478771305 304:0.0558512607180675 328:0.149666045497324 345:0.0541291542278172 346:0.0614528051470577 387:0.104134508457819 434:0.0638255832275307 441:0.0520121084539254 510:0.0666837924573045 667:0.0710441444070679 723:0.0757017607037384 757:0.0700802247616499 766:0.0982040744613113 1409:0.0968979124468906 1590:0.113628635918651 1665:0.07949847279302 2163:0.0932080000086014 2449:0.0925852281978628 2548:0.102720162300825 4088:0.125992511376751 4740:0.24252900054415
+0 1:0.175304546723683 2:0.0837837320757271 3:0.0697515629740817 4:0.118367695643017 5:0.192043827170714 7:0.084961137232409 12:0.0461183932440065 20:0.463093904795275 21:0.0827714598249429 26:0.177665078732084 27:0.0199200997159878 29:0.0248461118030412 30:0.0411217148338245 31:0.0260752086651931 32:0.0512843026308261 42:0.0409304368571642 47:0.0647604193305883 63:0.147873646400257 66:0.19261678520643 75:0.180244599783283 103:0.0651244324526375 107:0.0654409856988822 108:0.126659286355614 142:0.0904759168314786 165:0.0664239936725078 176:0.0354612346911492 189:0.0511944166044171 205:0.0541328932982173 213:0.0706294851463672 227:0.145884573998848 229:0.0358267487113846 231:0.0733415724319643 256:0.232784150020426 259:0.0832244345252294 267:0.219733690870701 269:0.365260185953713 346:0.056997373685048 355:0.0411742216167225 363:0.0639090460474078 408:0.120852792589434 719:0.0736356436574156 829:0.0507513316113238 997:0.0650617573939213 1363:0.0774574327609472 2305:0.109579033094526 3592:0.115895008174242 4114:0.109579033094526 5923:0.122590211558918 7334:0.141917365103027 7425:0.292212057996617 7428:0.146106028998309
+0 1:0.453493960011576 2:0.123851131901361 3:0.15466266205033 4:0.196845727841054 5:0.0851651440458552 11:0.136332178380736 21:0.0917660749987384 31:0.0578175027730221 47:0.071797809411713 63:0.0655771163374536 66:0.142365386931294 75:0.0307432974469002 98:0.196797722879074 137:0.124184256274999 142:0.125876405351244 176:0.0786294775783388 185:0.0883348892108312 238:0.149584464317177 255:0.14118917742942 269:0.161980922840657 304:0.114862337720962 328:0.153899765576046 346:0.126382337085157 505:0.109116664268935 766:0.201964099311739 808:0.158323959466764 986:0.135647447504045 3897:0.242973551282256 4497:0.335940076470684 6393:0.30067386398959 6830:0.29021366051018
+0 1:0.592088199963311 2:0.282978165929246 3:0.353377121168292 4:0.149919348549927 5:0.0972937263197166 7:0.215216124243187 15:0.0593730286495671 42:0.103681403885672 44:0.300143242080746 66:0.16263999959932 75:0.0702430554536217 142:0.157284291388616 231:0.185782458649662 269:0.185049033292171 3765:0.370103017848777
+0 1:0.369227561283116 2:0.0588219447197781 3:0.146911189549464 4:0.249306800158818 5:0.0808967882361712 7:0.178945692456045 21:0.0871668899243626 26:0.0623665548245571 29:0.0523310401233603 31:0.0549197718218507 47:0.0681994053890525 63:0.0311452422990878 66:0.135230236357499 75:0.146012435668777 83:0.0373348875621626 142:0.0672568082249447 199:0.0673535622577625 218:0.163467799480019 269:0.153862669524575 386:0.114758225959353 415:0.125364295702884 472:0.131279338621938 505:0.103647892354278 518:0.125659708857329 862:0.554589707994304 994:0.164968410288363 1303:0.220860109731775 2252:0.238573189725351 2864:0.212926404508904 4740:0.236890555225978
+0 1:0.392170923250875 2:0.0937156057148145 3:0.234060114477696 4:0.29789823207575 5:0.128885427811889 11:0.103159757034328 21:0.138875005347987 29:0.0833742431708142 47:0.108655853115244 63:0.0496208559764306 66:0.215449923860463 142:0.0833420774412398 269:0.245135269499948 808:0.239600971469725 851:0.260736176975184 862:0.441788440143265 963:0.194773834782221 1808:0.230823108005981 2640:0.317634354073355
+0 1:0.415821412807706 2:0.0662448493077687 3:0.248175480928727 4:0.140383758872646 5:0.0455526893212844 7:0.151145509819899 20:0.0915380145359888 21:0.0490833609393121 26:0.105355145410765 27:0.0236251830371192 31:0.0309251251865892 44:0.210789519153455 47:0.0384028388928642 63:0.140302187735271 66:0.152295315498883 75:0.295988670881787 95:0.48158035315803 98:0.0526310712550422 108:0.0751087812351817 142:0.119928208473264 162:0.175775595245223 170:0.0806072221447403 194:0.0642845306759293 199:0.0379265476801438 200:0.0783832348266054 269:0.0866395135803742 408:0.0477770256538229 436:0.071667329841041 508:0.0629520132397379 631:0.0544541537239316 640:0.151452544084865 667:0.0781493004829354 684:0.0759359679117163 977:0.111556458983412 986:0.0725544012471818 1047:0.0914375293575994 1094:0.0835675995116496 1269:0.0828855425434101 1388:0.104978673098932 2992:0.124365530219875 3611:0.239796178918149 7009:0.179685880949113
+0 1:0.449914018956174 2:0.143352340544267 3:0.179015357060925 4:0.227840435359355 5:0.0985749790440866 11:0.157798613241115 21:0.106215271767617 26:0.0759953759466281 47:0.0831028660546882 63:0.0379513411335016 66:0.329563583566523 75:0.213504240651029 137:0.143737917631213 142:0.136590475466732 150:0.153119838715163 176:0.0910102271459663 269:0.187485928115878 304:0.132948199179963 328:0.178132337313729 346:0.146282101313705 415:0.152759869597183 867:0.15433954038948 1149:0.168446499382184 1808:0.176539609022283 9793:0.441762494677134
+0 1:0.417244811963443 2:0.265886448764953 3:0.166016673960831 4:0.281728613627822 5:0.18283448331294 75:0.26400166251177 142:0.0928930585785723 187:0.303663164190375 229:0.170543494834795 339:0.253301504471925 363:0.304221634854053 499:0.242566007646971 829:0.241587913272308 1007:0.375915316196432
+0 1:0.29263852631514 2:0.0932409658583831 3:0.174656005606232 4:0.148194735948107 5:0.192348995921045 11:0.0513186427715546 20:0.128841607721695 21:0.0690858237188319 26:0.0988596660107745 47:0.0540527728191936 63:0.197478168237704 66:0.321538107367038 75:0.0462900048407074 142:0.121418536607077 189:0.170919224979303 227:0.162351547806405 256:0.155436038333619 269:0.121946868506005 328:0.115862992670248 346:0.0951465763481677 940:0.31210748776843 1269:0.116663078310261 1808:0.114827031041156 3297:0.375504486926153 5627:0.487793999766762
+0 1:0.395769657737732 2:0.252201551241878 3:0.157471969329103 4:0.267228336442869 5:0.173424183617548 15:0.105831274142142 75:0.125206886483264 142:0.0881119499769207 187:0.288033938621413 229:0.161765799465655 1590:0.475861135679297 3087:0.532221871325194
+0 1:0.313041886373037 2:0.0498709589046377 3:0.124555587741207 4:0.211369570397536 5:0.274346618144827 7:0.15171537284514 21:0.0739026294688505 26:0.0528761826474182 29:0.0443677808318285 31:0.0465625830058399 47:0.0578214433351532 63:0.184840908324368 66:0.343956405666831 75:0.272345915621886 142:0.114044563981086 176:0.0633232395183203 189:0.182836064952431 208:0.0915249535391584 227:0.086835515850993 269:0.521797020168079 313:0.138532940821436 387:0.172471394949387 510:0.220888289116674 1269:0.249594136248492
+0 1:0.514516018511894 2:0.245903902946784 3:0.307079569273583 4:0.390833188291465 5:0.169093661029922 63:0.130202030484616 66:0.282663579682227 75:0.122080383369731 142:0.124962521091187 269:0.321609827200956 2216:0.410316984074388
+0 1:0.586477350672998 3:0.350028387365384 4:0.222747985074599 5:0.0963717345703341 7:0.213176655734866 15:0.0588103876179052 44:0.297298972431519 63:0.148412370350909 66:0.161098762117497 75:0.347887029906771 142:0.146891303367066 269:0.183295439423581 592:0.169089705469524 3555:0.290793073912921
+0 1:0.489462622586172 2:0.187144057576471 3:0.350552284270556 4:0.198294558201848 5:0.0643439844922843 15:0.0392656071382632 20:0.064649537442415 21:0.0693311209977808 26:0.0496053393955906 27:0.0333709915620172 32:0.0859136276804711 44:0.198495965201754 47:0.0542446934966709 60:0.0869883801590319 63:0.19817933751836 66:0.215119843959004 75:0.23227181452308 142:0.11887770467317 169:0.0835401135958724 176:0.0594061566221617 256:0.0779939660630137 269:0.122379855092987 298:0.11361536551516 304:0.0867808134403638 631:0.0769174614047644 723:0.11762420916334 766:0.15258795155816 1164:0.12158771638934 1317:0.297304081723946 3897:0.183571419867769 4619:0.194152207820449 6004:0.253809505202363
+0 1:0.558433517565288 2:0.177929000672349 3:0.222193955577713 4:0.188530445671258 5:0.122351315967498 31:0.0830627086877805 63:0.0942104492528203 75:0.265001576075525 142:0.129977730465677 162:0.118030217939155 196:0.202652622062192 229:0.228252577354553 269:0.2327076328376 1590:0.335721552517426 6149:0.423974317509473
+0 1:0.552909925111277 2:0.151002055380804 3:0.282852237622666 4:0.239998690691038 5:0.103835238324416 7:0.229686110269987 15:0.0633649548955637 21:0.111883240195775 26:0.0800507192544523 32:0.13864329472146 44:0.160161637609111 47:0.0875374865499217 63:0.0799530791594876 66:0.173575047007485 75:0.262380385441601 142:0.124695442485239 269:0.197490744783012 499:0.137757925950518 997:0.175889618123414 9404:0.430161526194701
+0 1:0.398662048387008 2:0.190533530790079 3:0.237934224979968 4:0.201885984518735 5:0.065509355248469 7:0.144908310859798 21:0.0705868166396012 26:0.303022620653183 44:0.202091039316173 47:0.0552271502092608 63:0.126105423129661 66:0.109508001331465 75:0.0472957244779379 142:0.142211151071971 162:0.126391504919887 169:0.170106312881687 189:0.0873163504780516 199:0.109084390947941 228:0.0882474082119632 256:0.158813118906918 269:0.124596346741691 314:0.0931127596910335 472:0.1063086065353 537:0.260997839074001 640:0.217804012486788 1394:0.30268872622909 3700:0.189268811869841 3707:0.21986026051046 8276:0.258406394520587
+0 1:0.307780144658115 2:0.196130826117209 3:0.122462004229308 4:0.207816780390066 7:0.149165276066261 20:0.271016186159051 21:0.145320885023245 30:0.288787657289768 31:0.091559878450996 47:0.113699111644296 63:0.0519240066852703 66:0.225450026339437 73:0.26103670130109 75:0.0486851289387479 142:0.0560638271227105 189:0.1797628782901 213:0.248006723861434 256:0.163478565060456 263:0.343970759158117 491:0.286690196110352 829:0.178207039998182 2040:0.327265277582223
+0 1:0.379007966722376 2:0.181140207324376 3:0.113102021108089 4:0.0959664919344311 5:0.062279737021552 7:0.13776431562111 20:0.375452924364179 21:0.0671068790225288 23:0.0797950526764706 29:0.0402879210412201 30:0.333393895479031 31:0.0422808991670098 47:0.0525044457915482 63:0.0959107298152241 75:0.134892120593658 83:0.0862286512158847 95:0.438945145300334 142:0.0805447559742119 169:0.0808600267228619 170:0.220412742782524 267:0.118765914737762 408:0.195962563641773 631:0.074449838729346 636:0.113452775318095 686:0.131185767826401 713:0.11092539859959 716:0.106216133651342 850:0.203375739258997 1045:0.0576263567393012 1620:0.134157629275297 1835:0.149360931219999 2340:0.153981512015335
+0 1:0.3447582741746 2:0.219694890324123 3:0.137175155586975 4:0.116392424585066 5:0.151071263486667 7:0.167086681957688 15:0.0921905121163241 75:0.109068770823635 142:0.0627995945089928 187:0.250908784039822 506:0.150537752516913 608:0.293619243378433 2734:0.445525143725517 8695:0.59591153607288
+0 1:0.420059042968997 2:0.401519697804236 3:0.250704633759447 4:0.212721611673125 5:0.138050748409714 21:0.148750706337991 26:0.106428818213773 31:0.0937208481054034 47:0.116382605049411 75:0.0996683624192979 142:0.095645048807911 176:0.127456582717807 187:0.229283482641461 229:0.128770331896605 238:0.242472991513216 506:0.137563219630518 631:0.16502728571272 723:0.252364074656379 986:0.2198814063852 1317:0.318934639431407 1433:0.237072648301931
+0 1:0.460436836549341 2:0.220057706843457 3:0.274803388734523 4:0.233169283184984 7:0.167362618317817 44:0.233406112305371 66:0.252953688036806 75:0.327746679409888 142:0.104838842162415 204:0.161802794263651 339:0.209641929752371 506:0.150786359042609 829:0.199947317521237 3534:0.460390131381941
+0 1:0.340608767488306 2:0.217050645110496 3:0.135524116966758 4:0.114991526679988 5:0.149252971469033 7:0.165075628544586 15:0.0910809081558233 20:0.749808676251315 51:0.180553608901361 142:0.0620437393001933 187:0.247888848754685 1124:0.295553276796007
+0 1:0.317838094512766 2:0.227857710354409 3:0.189695911594753 4:0.0804780099935391 5:0.104456236700618 15:0.0637439161685696 20:0.629713634207422 21:0.112552370556595 26:0.0805294716267014 30:0.111834356810619 44:0.161119502381131 47:0.0880610143799875 63:0.0402156237920577 75:0.0754141659959349 95:0.368101730906573 142:0.110967213323137 170:0.184839297121281 186:0.105579172621372 187:0.173487576201024 229:0.0974342002745886 267:0.199195454173482 408:0.21911366265769
+0 1:0.371831745627376 2:0.177710458371616 3:0.147947363063954 4:0.188298882085785 5:0.0814673581814198 20:0.572979579248955 21:0.0877816832764353 23:0.104378927214316 30:0.174443382052754 31:0.0553071242975753 37:0.0686571568254338 47:0.0686804199243293 63:0.0313649115786822 75:0.0588169080870928 83:0.0375982127845436 97:0.0905447362345272 142:0.090308232753806 228:0.109744374465569 229:0.15198148322422 256:0.0987499052068645 339:0.112866041562775 409:0.0741067969773627 491:0.173176401928688 801:0.175489945199328 829:0.215293403150541 1164:0.153944927714868 4512:0.238561358654299 7471:0.321353892416304
+0 1:0.24329893981665 2:0.116280459171643 3:0.145208566799731 4:0.061604366650881 5:0.0799592373766785 7:0.0884359034060473 15:0.0487947401249961 21:0.0861566719126251 28:0.105170756625184 29:0.0517245511302179 31:0.0542832808016583 44:0.123333875925753 47:0.0674090104607305 68:0.0874318745521543 75:0.115456183199782 83:0.073804392043336 106:0.0996909105180573 140:0.100641497074885 142:0.0553977812480851 169:0.103813959085609 187:0.132801398226901 256:0.0969218505131422 284:0.086490196633828 386:0.226856478000633 408:0.167727288655192 430:0.2216920354707 506:0.0796768598464387 518:0.124203379494798 575:0.29729211872412 631:0.19116819088543 716:0.136367965730518 766:0.189618599714214 829:0.105653949707143 986:0.127355699048387 2466:0.225425173097489 3557:0.478726449509907 9683:0.331249661852307
+0 1:0.286594740019666 2:0.27394585435332 3:0.228065174921349 4:0.145134109155515 5:0.188376462843688 7:0.138897795248159 20:0.252361351963276 21:0.0676590124241571 30:0.268909560926308 31:0.0426287725448366 47:0.0529364351595198 63:0.0725248888940247 66:0.209931643764578 75:0.0226669947902639 95:0.55319580257615 142:0.0783071856856884 165:0.108592546818802 189:0.0836946376543653 213:0.115467849017925 256:0.0761129294164396 270:0.253658145361208 339:0.0869931473552773 506:0.0625704026234335 847:0.119272159486284 1113:0.135790547928665 9924:0.247688198585532
+0 1:0.320177660807887 2:0.204031059860217 3:0.12739482625021 4:0.108093864690051 7:0.155173717322505 20:0.70483208575612 31:0.0952479496000567 42:0.149511370625521 63:0.10803105586119 75:0.101292373600343 83:0.0647502961297775 95:0.49441504202183 142:0.0712825692451824
+0 1:0.411684916615251 2:0.262343442867098 3:0.163804458717379 4:0.138987253386942 5:0.180398166397513 7:0.199522598533584 15:0.0550435567996042 20:0.181254830658763 30:0.57942101533019 66:0.150780316575581 142:0.0916552344775609 269:0.171555287079056 339:0.124963098110587 409:0.0820496122050391 2189:0.287890656384563 7199:0.325241383249706
+0 1:0.549523165770601 3:0.218648634158823 4:0.0927611292039787 24:0.172609363824385 31:0.0817373621028288 56:0.395967742269577 75:0.0869244057640195 142:0.127903808919969 162:0.116146930616384 229:0.112305292356049 284:0.130233110751627 339:0.166802606815952 409:0.109521045900502 1235:0.251370512098101 1311:0.261923207731972 7598:0.457995237966496
+0 1:0.471198444061157 2:0.300268037762849 3:0.187484172877879 4:0.318158741780994 7:0.228365757864107 66:0.345154498977485 75:0.149069765564878 142:0.10490499440923 409:0.187821550153939 3400:0.558255762775434
+0 1:0.417313484916184 2:0.265930210141983 3:0.16604399809975 4:0.281774982414718 5:0.36572915087969 7:0.202250477375148 142:0.101354560954781 187:0.303713143112882 339:0.253343194534322 409:0.166342793837679 3089:0.528330049888428
+0 1:0.58811388069853 2:0.187385806515441 3:0.234003413785578 4:0.297826066700726 5:0.12885420552108 7:0.285028683283787 15:0.0786326593235841 63:0.0992176708052813 66:0.215397731457555 75:0.279086230311709 142:0.13093439535777 270:0.260262760281181 318:0.277030648208655 409:0.117212251156659 1018:0.24905449700336
+0 1:0.491588623991266 4:0.0331926431536798 26:0.0332138681768358 29:0.0278693648078441 30:0.230626844415896 32:0.0575245314141841 42:0.0918216327415154 74:0.0629076512388137 75:0.326592975631259 83:0.0198830292514151 142:0.0577071265655844 161:0.149774325031998 162:0.0415607663945888 172:0.0601778438660492 181:0.0647713570198949 185:0.0446857824310391 186:0.0435454579650182 190:0.131587784766058 227:0.0545452268325434 229:0.0401861159456879 303:0.205688107719125 339:0.0596868478494975 375:0.0543995153777338 408:0.0903720359794726 433:0.0620550966692971 437:0.0690229443116609 472:0.0699139893104108 491:0.183161443600236 521:0.151339949305587 582:0.0647238818674523 586:0.0564091966637024 608:0.167467922474471 709:0.0669212050732599 852:0.152308048088028 930:0.0671860541148977 944:0.0839692175527261 1045:0.0398633118068163 1055:0.167467922474471 1064:0.0710996334830044 1081:0.085312324593199 1241:0.382771963120531 1314:0.0894815297183449 1317:0.0995318114857219 2263:0.128969723013809 3546:0.11112967915146 4591:0.28516920199461
+0 1:0.256852033038754 2:0.163677229685281 3:0.102198323388398 4:0.0867147596574976 5:0.112551210708962 7:0.124483028165981 21:0.121274765149888 31:0.0764095453624624 47:0.094885418983013 63:0.129996560000101 75:0.203146215954927 84:0.117656620549498 142:0.0883754343076261 185:0.116740232637521 187:0.186932225026952 256:0.136427909736279 264:0.165030460524955 309:0.147534483834593 430:0.156027669943981 640:0.187103851119271 1096:0.262675207678656 1314:0.233767745080924 2508:0.345408666391894 2744:0.275632782785473 4321:0.33192543154984 4340:0.383536001971809
+0 1:0.353836805271375 2:0.33822018476356 3:0.211181090280015 4:0.179186085257429 5:0.116287071068294 15:0.0709636259528577 21:0.125300182423117 26:0.0896503328660603 27:0.0603104532305904 47:0.0980349068758963 75:0.0839556617941369 138:0.173686766894416 142:0.0913088392855816 187:0.193136980044344 229:0.108469710662537 239:0.175604786178971 409:0.105780555048312 538:0.181491565388731 1317:0.268654646997127 1391:0.261738377664002 2998:0.327842460541226 8900:0.4587027707744
+0 1:0.0879598975418082 4:0.044543669469526 6:0.010297900629677 26:0.0891443058043641 30:0.123798106476767 32:0.0771964348195849 47:0.0487407767414757 83:0.0266825115109812 88:0.0786338611453464 142:0.0213631649089128 179:0.0561358670599766 205:0.0814843169297486 218:0.0584136142641126 286:0.0577017339070368 433:0.083276336329673 455:0.0751897957489657 457:0.0710091765027216 505:0.0740751147630287 513:0.077061132584341 574:0.0771061613792126 882:0.0773323880704955 944:0.112684520330786 952:0.0959355270138977 2091:0.136362063965609 2976:0.139055106736743 3416:0.325991969285887 3609:0.164945417056136 4112:0.491861676196206 5005:0.177429650136152 5538:0.612347833316596 7127:0.228056822345066
+0 1:0.34154822224521 2:0.217649306332701 3:0.135897914674018 4:0.23061738428187 5:0.14966463560517 7:0.165530934159966 15:0.0913321242154129 75:0.108053229081941 142:0.0898659176900566 187:0.24857256679243 216:0.231932590197463 409:0.136142462614098 4955:0.477688338438928 6285:0.569320709545953
+0 1:0.506483039705914 2:0.161376454452935 3:0.201523487551271 4:0.256487487401378 5:0.110969102809973 7:0.24546639460623 31:0.075335472995629 63:0.0854461510792993 66:0.185500293998848 75:0.200290633763607 142:0.128137000060903 269:0.211059088566574 1045:0.102677779505632 6120:0.41002210044062 9875:0.459715212248618
+0 1:0.449953416742196 2:0.215047340296926 3:0.402819824169896 4:0.227860386746379 5:0.147875416493182 7:0.16355203573933 21:0.159336859138953 44:0.228091823641613 47:0.12466521473079 68:0.161695199808777 75:0.106761468327614 142:0.143432558151779 176:0.136527295007893 187:0.245600917642165 238:0.259729085292244 499:0.196185909561107 641:0.208413992274249 867:0.231529583244987 986:0.235529723111811
+0 1:0.592151757108507 3:0.353415054099569 4:0.224903162249905 5:0.0973041702223155 7:0.215239226413536 15:0.0593794019909085 44:0.300175460671857 63:0.149848320278834 66:0.162657458035529 75:0.351252978138306 142:0.103369343519788 187:0.161608968304153 592:0.170725717008236 3555:0.293606614944164
+0 1:0.112776682936241 2:0.215598546965531 15:0.0904715645728661 24:0.212544031353632 45:0.231937492633273 48:0.161546347660187 54:0.197721401623073 129:0.272299402686378 142:0.047933400900432 186:0.149848228780052 209:0.16588193997071 723:0.271016979240426 867:0.232123036993766 5134:0.490660815369557 7389:0.523409412505783
+0 1:0.565869820398075 2:0.360596735285682 3:0.225152770708464 4:0.382081970640636 5:0.247961180746648 7:0.27424812627535 15:0.151317118228904 75:0.0895101443247047 142:0.125982101794689 187:0.411829734618663
+0 1:0.385170909564587 2:0.245447570287986 3:0.153254855372494 4:0.130035968393186 5:0.0843899339407323 7:0.186672616980263 20:0.678325439385064 110:0.145066130304778 117:0.155183784701173 142:0.0701609758176997 187:0.140160181503605 270:0.17045277690815 356:0.143365142173691 709:0.131085729862636 2624:0.190812763745404 4184:0.275707104669857
+0 1:0.458261348054808 2:0.175214376232256 3:0.218803990254619 4:0.185654077268205 5:0.12048462829237 7:0.133257485928516 15:0.0735251650648895 20:0.484227114592638 21:0.129823081495873 44:0.185842645381531 47:0.101573624704011 63:0.0927731007200492 68:0.131744589517483 75:0.173972336071065 142:0.105734742448525 187:0.200108550644357 227:0.152541991158937 256:0.14604432853046 375:0.152134492341129 1395:0.229157262605035 3710:0.339676428633823
+0 1:0.287269376316698 2:0.366120954019012 3:0.114301017099475 4:0.193967667917997 5:0.125879930641524 21:0.135636559833287 24:0.180466948004709 32:0.168077895376161 47:0.106122092203514 48:0.137165819890916 54:0.167881345238818 88:0.171207568296379 142:0.0581418656971602 178:0.180950409358488 187:0.209069412695219 221:0.213437191941591 409:0.114506701479164 472:0.204277999172849 506:0.125435383331076 1165:0.335669806503286 3588:0.352869906552993 3621:0.34198510450024
+0 1:0.140615740552726 2:0.268819303373104 3:0.167847917220944 5:0.184851235048142 32:0.246817792051807 45:0.289191537110633 48:0.201424254716445 54:0.246529163551208 142:0.0170759478931234 209:0.206830093118552 409:0.168149959106587 506:0.184198429482116 5986:0.70316969585044
+0 1:0.220063580657063 2:0.105175526967126 3:0.262681926819004 4:0.33432642623564 5:0.289292112772548 11:0.231549094201095 21:0.155857199648106 47:0.121942727919134 63:0.0556886938527887 66:0.241796007230729 142:0.10689540791673 270:0.292159512734882 276:0.200144476601188 339:0.200394712390564 524:0.29124735121859 963:0.218591562807237 1045:0.133838478530569 1808:0.259049086174569 2640:0.356475960622713
+0 1:0.316862301685881 2:0.302877554353376 3:0.189113527314772 4:0.320923739751755 5:0.208271092470155 118:0.24291385307794 142:0.0673378899853339 187:0.345909906068563 1133:0.432576987360759 2216:0.5053836200111
+0 1:0.171592279032501 5:0.225572504039758 11:0.180547988282503 15:0.137654535924512 63:0.173690710039559 142:0.0416752890409533 187:0.374645193236428 1754:0.56912393656959 2531:0.60988557894239
+0 1:0.224317618859815 2:0.107208669881446 3:0.133879909082666 4:0.113596424619907 7:0.0815364476668532 20:0.370355917650225 21:0.0794350337362374 31:0.0500482916304653 44:0.113711804059919 47:0.0621499983832345 63:0.0851478138625151 75:0.0532243504997085 83:0.0340232174810004 88:0.100267059119148 142:0.0885314606838143 189:0.0982616524748883 256:0.0893603512575075 267:0.140584312388332 283:0.0984341781148932 286:0.0735762314181697 313:0.148903616918925 448:0.118915054081121 455:0.0958754865360494 475:0.106401838969449 508:0.101879643116646 535:0.124519878859421 684:0.122892484488157 693:0.156133588558145 764:0.121444445819118 993:0.144297903820489 1164:0.278614400410704 1202:0.162702458426278 1731:0.163047236518018 2264:0.17835536825731 2422:0.209059740283516 2706:0.204404366204588 4897:0.280433312813239 8008:0.305406737287161 8247:0.280433312813239
+0 1:0.429791427325868 2:0.273881694977929 3:0.171008820758616 4:0.217650177122361 5:0.0941661721061029 7:0.208297897121301 15:0.0574644537295588 20:0.189226685832998 30:0.604904807416353 66:0.157411857608155 142:0.100035747390268 269:0.179100541999976 356:0.159973423624492 513:0.125512553979611 1395:0.179100541999976 3691:0.25708747600286
+0 1:0.256824338159538 2:0.0613723429911978 3:0.153280955895411 4:0.195087171831983 5:0.084404306218853 7:0.0933522044071176 21:0.0909462665914754 44:0.130190214068144 47:0.0711563910250205 63:0.097486907413359 75:0.213280527458723 137:0.12307483433072 142:0.0974623955428943 187:0.140184051899231 227:0.106861772455896 256:0.10230989962387 264:0.247518999357641 268:0.144658893634684 373:0.107322672672371 375:0.106576303218122 387:0.106123622239192 505:0.108141851313914 533:0.188292891599365 766:0.200159817428882 882:0.112897126642635 1070:0.232793941409528 2142:0.195484993268192 2744:0.206702297164424 2967:0.252669830060709 9752:0.378256807541975 9753:0.378256807541975
+0 1:0.311013944114539 2:0.148643657295327 3:0.278434561492364 4:0.157500209916307 5:0.102213506576117 11:0.0818115801222197 20:0.102698892097763 21:0.110135812196803 28:0.134441900355828 44:0.157660182257714 47:0.0861702982678403 63:0.0787043465621581 75:0.0368974921720124 83:0.0471728217962477 137:0.149043466521707 142:0.108584689119579 187:0.169762707053307 189:0.136238714759743 227:0.129409469385775 238:0.179528289401312 256:0.247794314448626 356:0.173644571314015 408:0.107204588765576 409:0.0929785345845202 518:0.158771686215085 940:0.248779053413167 986:0.162801359908732 1598:0.190486310939664 2216:0.248027853288707 2910:0.299312430720012 7379:0.368563194731867
+0 1:0.386048784162987 2:0.184505242476419 3:0.230406226617063 4:0.195498516044713 5:0.126873410936885 7:0.140323558384546 15:0.0774238889532331 21:0.136707042227408 26:0.0978117637485619 32:0.16940441403796 44:0.195697083115638 47:0.106959638005846 75:0.0915986711285387 142:0.105481328174798 154:0.163359504251013 179:0.123187860787005 187:0.210719448096548 631:0.151665781440671 886:0.194644840346288 986:0.20207861493728 997:0.21491466827458 1990:0.300872786085814 8762:0.482623433685813
+0 1:0.549730313278198 2:0.350311942976996 3:0.21873105565154 4:0.27838828894047 5:0.120444466782832 7:0.266426133606576 15:0.0735006566968106 66:0.201339683145946 75:0.0434785863350878 106:0.150166746887266 142:0.144641417718521 270:0.24327657183348 339:0.166865484500488 829:0.159149012090111 1573:0.276890372378538 2825:0.289688102289224
+0 4:0.0175054707235397 6:0.0404703070343274 18:0.0216636422458513 25:0.0607469159986787 26:0.0175166645901969 29:0.029396053063239 31:0.0154251140708307 47:0.0191549158489113 63:0.01749529902584 78:0.0310913023799879 83:0.0629166743084172 85:0.0248013548480128 105:0.128971512516472 106:0.028328126890205 114:0.0284174382144198 142:0.00629672401817343 144:0.0240604447291274 166:0.030196633963882 169:0.117998922496309 171:0.0349923344254854 173:0.0302493861523255 186:0.0459308851073071 194:0.0641288410432066 199:0.0189173470034234 215:0.051564563650012 220:0.0324659523378 227:0.0287666115351246 228:0.0306076209215884 229:0.0423875177956127 256:0.0275412719725581 283:0.0303378672163594 299:0.033502807412343 306:0.0317573692134596 341:0.0338142757113102 351:0.0287204396815603 384:0.0438562136696552 413:0.0349923344254854 423:0.0613247340759714 432:0.0380170389954178 433:0.0327272423880584 434:0.0350193851447913 465:0.034413305333272 472:0.0368719444056561 485:0.0280066637503385 496:0.0339364366219436 502:0.0279348838314637 507:0.0216392639379619 508:0.0313997754043853 518:0.0352935796878253 549:0.043214841393693 550:0.0329722823465131 572:0.0438562136696552 586:0.0594993014664675 599:0.0379463106366576 631:0.0271611360586002 638:0.0494289912608242 643:0.032927325545091 690:0.0505769370504946 714:0.0418817901429755 723:0.041535525100843 747:0.0446009159967443 776:0.0504675340494497 778:0.0773494470206633 787:0.0929703026973044 814:0.0449265790666074 904:0.0986605711812158 930:0.0708665168900904 950:0.0440989405969399 953:0.0442223231416919 981:0.0480333097550545 982:0.0453304168354203 987:0.0330400606736279 1007:0.0934313980744617 1009:0.180348086230986 1045:0.0210235151972281 1144:0.055301442943705 1146:0.0463340699053881 1175:0.0428800125661625 1207:0.0461112333683313 1305:0.0736162526578878 1312:0.0526235035509395 1423:0.0590714371010723 1439:0.0476889623247499 1462:0.0497304843900998 1467:0.0497304843900998 1489:0.0948750662708784 1551:0.0433287328001279 1595:0.0506874286564896 1598:0.0423434678742497 1610:0.111991377336023 1639:0.0546480595094234 1649:0.0459651218552328 1651:0.0554709777601958 1697:0.055301442943705 1782:0.0498328290296371 1820:0.0516133242893154 1828:0.0551344576197714 1919:0.0590714371010723 2042:0.0519814568351349 2151:0.0617279188740524 2154:0.055301442943705 2164:0.0522338384895817 2213:0.0561762506103177 2308:0.0603204280352717 2326:0.0608622093765547 2403:0.0608622093765547 2555:0.0546480595094234 2625:0.12811344333334 3082:0.0762560583452189 3316:0.0623449839937556 3337:0.067500779622254 3398:0.0703637952123307 3730:0.086430839065284 4097:0.0839529828295511 5029:0.74231502386735 5258:0.0941277635496161 6940:0.268876054066198 6996:0.0896253513553993 8197:0.0802166891981528
+0 1:0.49630457907351 2:0.316266753359181 3:0.197473600933673 4:0.251333024983969 5:0.108739028837466 7:0.240533415931311 15:0.0663574694762678 21:0.117167110880669 47:0.0916715888354924 66:0.181772415093242 75:0.157012418406164 106:0.135572738676695 142:0.100449531207829 269:0.206817571169795 339:0.150648603590834 709:0.16890799997218 829:0.143682059270716 1001:0.227026527668572 9644:0.450476614263764
+0 1:0.0634255436603232 2:0.121252502712777 21:0.0898406505205557 24:0.119534644834183 47:0.0702913566215821 48:0.0908535759335965 54:0.111198406130764 129:0.153141032384583 142:0.0231066153983792 208:0.111263447916795 209:0.0932919106338634 227:0.105562674676271 283:0.111328593686541 409:0.151690024614242 472:0.13530620619753 603:0.159000197820663 671:0.0906960929538234 2262:0.249598172089233 2887:0.507352879888324 5153:0.470128284790899 5218:0.499196344178467
+0 1:0.313353539758667 2:0.099841217320707 3:0.124679590861264 4:0.317370003653806 5:0.137309873947759 11:0.109902674610654 21:0.147952408604781 29:0.0888239036377572 47:0.115758016621676 63:0.105728531067887 97:0.152609420466411 142:0.0824475186160486 187:0.228052991109949 189:0.183018090045998 256:0.166438894533838 386:0.19478446406234 851:0.277778894029327 862:0.23533271393639 963:0.207505000032296 2640:0.338396154318907 4332:0.467905051873271
+0 4:0.0204125019164205 6:0.0330336820448839 15:0.0161680539945699 29:0.0685553675151024 30:0.0283657488909292 31:0.0359733451907049 48:0.0577394694991008 54:0.035334530937057 63:0.0612019231930308 68:0.0289704026496402 75:0.0478202619585419 83:0.0122274797707323 84:0.0276961615523377 142:0.0220271525030113 144:0.0280560221372861 169:0.0343985784448591 179:0.0771741646515428 199:0.0220588402368245 205:0.112022569893437 218:0.0535370357813468 227:0.100631143663 228:0.0356904496077819 264:0.0388478801652556 309:0.0347293580228629 319:0.042809808549936 322:0.0817963338700434 339:0.0367056606631792 351:0.0669797504219007 386:0.0375842537119413 398:0.0734113213263584 408:0.0555761512899373 411:0.0707103973766754 457:0.0325405376051672 478:0.0370076088112195 493:0.0842582053012222 502:0.0651477333857647 506:0.0264007917413845 508:0.0732283051098194 531:0.0531002063329298 539:0.0438431639584077 571:0.0744895291753956 574:0.035334530937057 595:0.0670833833834571 631:0.0633432543008163 640:0.0440439174902511 720:0.0469839353390214 811:0.0535982809474958 829:0.105024768605925 850:0.0432589290667638 876:0.0455437476175885 886:0.0406467348906246 950:0.0514221938766084 951:0.123034906007465 988:0.557881054164683 993:0.0518586962244062 1017:0.0556083895268842 1027:0.0493142665673838 1064:0.0437241890622901 1067:0.0501945900072306 1080:0.0477150844191256 1155:0.0549343458746517 1236:0.0520075293967053 1269:0.0482078926963561 1324:0.0563194576158614 1472:0.0479865481025085 1482:0.0559083645666842 1548:0.0519328989686138 1795:0.0603259607012129 2042:0.0606137135083544 2402:0.13017477488271 2703:0.0730735916236299 2707:0.0746942469831581 2753:0.0670833833834571 2907:0.0703374889093137 2951:0.539385063804301 3051:0.0709692407109004 3095:0.149388493966316 3955:0.156269325646087 4424:0.0935378058577055 4871:0.239833045353351 5632:0.104508909540024 7989:0.0955338017998077 8349:0.104508909540024
+0 1:0.36792805431263 2:0.175844757604958 3:0.219591197119119 4:0.0931610091523686 5:0.120918104511649 7:0.133736915977058 15:0.073789691843333 20:0.607461566669771 44:0.186511264843137 106:0.150757264981116 142:0.111700159938797 187:0.200828495580138 339:0.167521668974609 399:0.203080013346997 829:0.159774852185909 7342:0.405821212215081
+0 1:0.208548356664519 3:0.248936620952934 5:0.274154380904759 31:0.186119824674547 63:0.211098729796476 142:0.050650956395092 187:0.455333071058048 199:0.22825719741307 436:0.431322776688122 998:0.540499623875457
+0 1:0.480469650991276 2:0.204117367995138 3:0.254897432265519 4:0.216279179964775 5:0.0701797584757311 7:0.155239358083965 15:0.042826860150333 21:0.0756192107913274 23:0.0899168460273854 44:0.216498853874004 47:0.0591644971666764 54:0.0935961133867559 63:0.108076754584469 75:0.177336638083595 83:0.09716652968404 95:0.494624186846068 142:0.126418008633502 169:0.0911169092410885 170:0.124185760836611 189:0.0935414547172659 355:0.0752327468958208 795:0.148093252987365 2375:0.194585387928666 2744:0.171867028368961 8272:0.266962129895346
+0 6:0.030662505929388 15:0.0525262572245351 26:0.132715778855949 29:0.0556801218846468 63:0.0331384754297275 75:0.0621427756493793 88:0.117068095737466 142:0.0198780859033262 150:0.133701678557732 176:0.15893721202217 180:0.118144015369307 218:0.0869647056298369 238:0.302361639077601 275:0.103096499226895 312:0.138959801464239 314:0.244685345216505 355:0.184542812678155 404:0.128746998014965 406:0.143750944848033 457:0.105716658853794 505:0.110281149882911 513:0.114726657391859 655:0.116088140770935 867:0.134766701630929 895:0.318855929341632 997:0.145803359915632 1230:0.214213250752016 1731:0.190367900107038 2557:0.519441289817753 5991:0.310367162842218
+0 1:0.242909317420696 2:0.232188491968234 3:0.144976027727625 4:0.369034275231373 5:0.159662379024631 11:0.127793595500517 21:0.172037398776223 47:0.134602121417876 63:0.0614699741385711 95:0.562647094477223 142:0.0811199641270269 170:0.282528672751329 187:0.265177456343384 227:0.202143771821989 375:0.201603767411277 1808:0.285942074164374
+0 1:0.495969917201314 3:0.0370013330652293 4:0.0313954436567852 24:0.0584204569638807 29:0.0263603916242525 30:0.174511733002468 32:0.054409893678406 51:0.0492954639263733 75:0.397169688901666 83:0.0188064723167372 92:0.047914885746443 142:0.116693839409124 213:0.0749340944545568 227:0.0515919020922513 256:0.0493942988512682 299:0.0600861021717018 303:0.12970081687214 375:0.0514540801131928 386:0.0578064523705622 387:0.051235529810243 408:0.0854788861075667 437:0.0652857306099148 440:0.163845708047349 472:0.0661285304111958 579:0.170453437891903 640:0.0677417366891668 710:0.0836441743593904 930:0.0635482979381878 997:0.0690270340188982 998:0.080338547731907 1001:0.0850775407466114 1064:0.0672499784575389 1159:0.0738056987528799 1164:0.0770026234481537 1241:0.543070442412873 1377:0.0692271884322272 1690:0.0948583030544244 2263:0.121986720176647 2476:0.133131578553176 2723:0.0946169037776774 6806:0.160739903150062
+0 6:0.0398745053746518 20:0.0374883192688241 26:0.0862939260326507 29:0.048272143280646 30:0.159786233446899 31:0.0253300439669775 60:0.201767764911502 63:0.0861886709242496 75:0.0404062284950435 83:0.0172195606806123 88:0.10149273564341 132:0.0806132704823914 142:0.0241267599593548 168:0.0493577906663673 189:0.0497314073342256 199:0.0310647447490467 218:0.0376972300744931 228:0.100523390635342 242:0.0465672255674668 243:0.062663457206075 267:0.0711514159195815 274:0.0718215338788735 275:0.0893799944031004 286:0.0372378180359764 317:0.0396101146949165 341:0.111054879276217 369:0.0594276065982043 382:0.116743233428429 408:0.156532159934156 411:0.0497895723897381 441:0.046862531283615 473:0.0585120646186196 485:0.0459905852823446 502:0.137618139952973 504:0.0705960005120816 507:0.0710689729028485 534:0.0506545050105847 535:0.0630210123766123 580:0.0601329050463237 586:0.048852796654518 631:0.0892042376345748 643:0.0540709520812783 655:0.100643159080864 658:0.0614644986257821 662:0.0692772528151142 713:0.0664542447993743 800:0.0586063011562229 827:0.0567655664191171 914:0.0851565723099284 936:0.0777630257654245 969:0.0743262274320805 994:0.07608657041259 997:0.0632024539675777 1080:0.0671955960624307 1149:0.0637578693750776 1159:0.0675778895077066 1271:0.0847557928924816 1284:0.0931683044769006 1294:0.075480709717554 1316:0.0922487115054876 1455:0.0882396334433175 1472:0.135155779015413 1707:0.0759637771577098 1721:0.0870777928068133 1731:0.082520172720173 1788:0.0818319880503553 1795:0.0849550815366881 1838:0.101864885895821 1849:0.0821728340385248 1992:0.173708101976348 2024:0.0647228950470159 2151:0.101365273014514 2280:0.0902678028065616 2394:0.102378574215451 2706:0.206903029627197 2733:0.0864146386549162 3117:0.577732527042427 4492:0.102907154107524 7285:0.309140065775429
+0 1:0.381120557231785 2:0.242866510518907 3:0.151643269072602 4:0.257337091164074 5:0.167005024780317 7:0.184709618605046 15:0.101914013328257 142:0.0848505559166357 187:0.277372590452108 325:0.267112063373604 9682:0.691856998654306
+0 1:0.166661713634933 2:0.318612166619507 3:0.198938052056894 5:0.219090860522158 45:0.342757908567898 48:0.238733667559036 54:0.292193268669128 142:0.0303583374800952 209:0.245140818623257 409:0.199296040558416 592:0.384407412006466 867:0.343032106569381 1140:0.396364360995221
+0 1:0.465840296379225 2:0.296853594207751 3:0.185352230595459 4:0.235905642996451 5:0.204128769136871 7:0.225768938049538 20:0.102549061948213 21:0.109975132126403 31:0.0692901762091189 47:0.0860445821241458 63:0.0392947613471489 75:0.147374645750977 142:0.117854643504303 162:0.196919525698249 189:0.136039952469421 256:0.123716400361054 267:0.194634251445573 269:0.38824529417005 356:0.173391236623084 1308:0.212352141617932 3199:0.322320001175976
+0 32:0.258047058084365 142:0.0178528382463509 238:0.339444996150931 2674:0.508678107474957 3118:0.508678107474957 4234:0.548054059851801
+0 1:0.618524036271834 2:0.236490168023215 3:0.147661948557446 4:0.25058083058866 5:0.162620388816199 31:0.110400855733516 118:0.18966984216514 142:0.150223355827819 187:0.270090307555791 304:0.21932632451679 328:0.293867168277473 346:0.241323431393743 1133:0.337760929965003
+0 1:0.557698103235646 2:0.266542022633826 3:0.332852014640118 4:0.282423248191059 5:0.183285282931145 7:0.202715785052953 15:0.111848962581153 44:0.28271010436925 75:0.132326294610798 142:0.135450323178788 187:0.304411880931328 1124:0.362944639732164
+0 1:0.227986756087281 2:0.217924539275517 3:0.136069767199571 4:0.230909016276522 5:0.1498538971231 11:0.119942897194156 15:0.0914476201466658 21:0.161468686706471 26:0.115528335479981 47:0.12633315737074 142:0.0553720366150456 176:0.138353944866497 187:0.248886904385388 238:0.263204098086549 298:0.26460446038361 325:0.239680115719756 499:0.198810754387478 506:0.149324685305245 7925:0.620804479605448
+0 1:0.429193252831593 2:0.273500512306595 3:0.170770814348134 4:0.289796341696044 5:0.188070227293179 7:0.208007992573776 15:0.114768951869671 75:0.135780876163779 142:0.112926500622805 186:0.1900920387285 187:0.312359021531513 356:0.319501552086307 3167:0.51871298319594
+0 1:0.406868004828023 2:0.259273898243899 3:0.161887867663999 4:0.137361035587615 5:0.178287420972933 37:0.15025290736054 75:0.128717993151292 142:0.0823480219036749 187:0.296111113215537 304:0.240456470644447 346:0.264572803673207 496:0.266290701470555 4454:0.598362152583742
+0 1:0.420264755383159 3:0.286659896558847 4:0.182422102506567 5:0.0789247742763526 7:0.174583548899214 15:0.0481634639922397 21:0.0850420302418869 23:0.101121276711248 26:0.060846250750423 44:0.243476517221183 47:0.0665369144248141 83:0.0364247782603458 142:0.109362158116108 238:0.138623849155069 298:0.139361389388072 491:0.671086370655376 499:0.104709281606826 1409:0.184676040299375 2134:0.191516199676428
+0 1:0.487116867306163 2:0.399101073248516 3:0.166129646854096 4:0.211440245612286 5:0.09147945028912 24:0.131148921950391 31:0.0621042027230992 45:0.143115531991206 48:0.0996811305672763 54:0.122002713998787 66:0.152920628299066 75:0.132090656665975 142:0.0887309864239124 209:0.102356379803494 229:0.170659548190034 269:0.173990497459962 356:0.155409108459327 409:0.166428596716733 499:0.121365535845835 1432:0.387487833043137 5555:0.347985650296646
+0 2:0.0665990295424186 6:0.0163141841878151 26:0.0706122867410565 29:0.0592499364610316 31:0.0621809347421405 32:0.244592932400218 33:0.0902773866878335 63:0.0352630794827376 94:0.0979371204924571 129:0.168228183530312 142:0.0211525278119724 150:0.142273682081563 165:0.158399730138151 176:0.0845635695007677 193:0.158239575589586 221:0.155300697166114 373:0.116462652385679 506:0.0912690159733073 531:0.367140775735837 641:0.258178866278674 713:0.163133828926441 997:0.310302474865387 1433:0.157290498018433 1471:0.188948425549182 1931:0.212669281127415 4515:0.567293899833269
+0 1:0.282192889952522 2:0.269738280350753 3:0.168421716683025 4:0.28580994675945 5:0.185483161502708 21:0.199859483596904 26:0.142996353911099 31:0.125922093183539 47:0.156370130384362 114:0.231984235996054 142:0.0771044542938116 176:0.171248980459469 187:0.30806225776098 238:0.325783507608466 298:0.327516820062094 1076:0.452834358204862
+0 1:0.335667539394535 2:0.0802132052840559 3:0.200337092933511 4:0.254977512667051 5:0.22063162693861 11:0.0882966577970887 21:0.118866108027956 47:0.0930008848021516 63:0.127414677943403 66:0.184408229976597 75:0.119466898268529 142:0.0764295846643425 270:0.222818479226804 276:0.305284517245137 304:0.148783077450693 339:0.152833103539837 384:0.425861090439817 496:0.164768076130822 930:0.172035440552448 1045:0.102073302248667 1064:0.182056483752541 1808:0.39513293875794
+0 1:0.382372730729609 2:0.243664449654465 3:0.152141493791928 4:0.387273860197123 5:0.167553720624887 7:0.185316482981217 15:0.102248852329001 20:0.336698779866624 21:0.180540377937978 30:0.358777286434625 47:0.141254855309958 63:0.0645081385893935 75:0.0604842970585734 142:0.116085453876371 187:0.278283899485946 227:0.212134763848767 256:0.203098693735949 375:0.211568069623606 1045:0.155034541561818
+0 4:0.0203215315088844 6:0.0140941988803489 11:0.105557738883571 26:0.142341682731847 27:0.0820778537940449 29:0.0170624608728218 30:0.0564786680457251 37:0.0222287869202989 41:0.021632879586866 59:0.0291724936929767 67:0.0797255019511105 72:0.0292371733962022 75:0.0380857168467676 83:0.0121729867535394 85:0.028791086053412 88:0.0358740199440377 132:0.0284938823917412 142:0.0255838172795306 151:0.111307886854008 153:0.0407475335439728 159:0.0565267226274227 162:0.0508894949950613 177:0.0490341146775577 178:0.0758309770859057 180:0.0362037217478274 204:0.0282033768508499 218:0.0532984424926237 229:0.0984125810805693 237:0.0403729608132682 238:0.138982282947186 265:0.0443822478778161 284:0.0285306602706354 286:0.0263244500884985 289:0.0408748495202272 299:0.0388923192765392 317:0.0280014926298484 328:0.047663908731952 342:0.0438879775736095 346:0.0391415552688489 355:0.0565507835490165 369:0.0420110292784058 375:0.0333050146292464 396:0.0477181851818579 400:0.331176586794968 404:0.236717220627638 409:0.0479863797315129 434:0.0406528650317685 455:0.0686055649054478 457:0.0323955173631847 471:0.0489740183551532 475:0.0380689503293045 480:0.0345549775417176 483:0.0456150564739472 509:0.0436081697982453 515:0.0339428441261608 539:0.0436477724033058 667:0.0905012650987332 706:0.0478274285289587 732:0.051408473027401 739:0.239965246400748 772:0.0435293277310104 804:0.0885137844546199 827:0.0401291589776203 851:0.0533594147134108 856:0.0352595593409181 888:0.140669310976538 909:0.0413638071688231 963:0.0797205661756333 1042:0.05352903081595 1103:0.0615577155553245 1123:0.0533594147134108 1170:0.0625497924619575 1235:0.05506868907097 1279:0.0720111232603487 1403:0.13405074584872 1967:0.0752507265313095 2056:0.0612432941674837 2091:0.0622105455723497 2200:0.0677764963144696 2211:0.0723742638320676 2257:0.135552992628939 2353:0.0720111232603487 2392:0.0720111232603487 2575:0.0654262551611994 2661:0.0861729363652804 2769:0.0723742638320676 2777:0.0767116055668891 2781:0.0802492715460737 2823:0.271105985257878 2931:0.0713141622936542 2946:0.0727479316708545 2976:0.0634391545796481 3061:0.155572895375186 3074:0.0802492715460737 3139:0.0772378271128608 3406:0.0951080456176999 3653:0.0713141622936542 4126:0.0772378271128608 4448:0.166592947332077 4492:0.0727479316708545 5136:0.0951080456176999 5444:0.0885231775185506 5511:0.0931209450361487 5725:0.0872945685112523 5989:0.100334749470212 6320:0.10404315487012 6843:0.0974582867709702 6895:0.10404315487012 7369:0.269644025295564 7420:0.100334749470212 8160:0.301004248410636 8804:0.10404315487012
+0 1:0.221465315822414 12:0.349573061824975 30:0.311698711746027 75:0.210190312339704 142:0.0672351860867889 227:0.368597094120989 303:0.46332217136233 1081:0.576510113970196
+0 1:0.528019812740841 2:0.336477072600481 3:0.210092709563362 4:0.356525199466189 7:0.255904165694095 15:0.141195790182808 66:0.386776349144939 75:0.167045945696442 142:0.138929093873078 356:0.393070367695681
+0 5:0.045925957826113 6:0.0327207894613328 15:0.0560521898566863 20:0.092288096656933 23:0.0588419990065772 29:0.0594177641437553 40:0.0511114451404518 50:0.0776462180179278 60:0.0620885496922349 67:0.0462722533254191 86:0.0635470265913717 114:0.057439705859889 142:0.00212124431458693 169:0.0596273259119163 218:0.0464011948343955 256:0.0556687252796845 264:0.0673398528754305 286:0.0458357085250207 339:0.0636264778989054 367:0.0698197424307406 402:0.0623501926160448 415:0.0711706296737337 426:0.0736408918336825 455:0.0597274523423834 480:0.12033314073921 496:0.137190335229308 504:0.0868960071553541 507:0.0437390923925833 530:0.0672461367854532 539:0.0759987983383731 636:0.0836616791222357 644:0.0779454887308375 720:0.0814430872361507 758:0.085694286197481 764:0.0756561203700509 795:0.0969129082053137 853:0.086561832680576 865:0.121396559184111 965:0.0817087112941434 987:0.133566674966716 1020:0.104570475941231 1031:0.100519419593131 1080:0.0827104786941859 1314:0.190775515146674 1380:0.0842523703426717 1472:0.0831810403933639 1916:0.0999100164325187 2340:0.227096284121115 2369:0.106635837449055 2422:0.13023772943045 2807:0.111109858656011 2825:0.110459234233232 7929:0.761035672637886
+0 1:0.122013692244667 2:0.233257213042185 24:0.229952516378625 31:0.108891613300999 32:0.214166280400347 45:0.250934405139006 48:0.174777851533403 142:0.0444509151570332 193:0.277110061877821 209:0.179468551881219 409:0.291810821188849 484:0.315765958822057 671:0.17447489662409 8695:0.632698666404918
+0 1:0.126881162203525 2:0.24256250047577 24:0.239125970151273 31:0.113235606559159 32:0.22270997674189 45:0.26094488557106 48:0.181750232470016 142:0.0616322498715974 209:0.186628058070817 409:0.303451977026982 484:0.328362752594301 671:0.18143519183579 8695:0.657938798844805
+0 4:0.191169368963832 63:0.0955291442150688 75:0.0895702970633467 97:0.275775085288059 142:0.022921229903955 166:0.329763852162205 297:0.431747740074573 304:0.334650299917466 448:0.400239988627323 507:0.236312664606 1046:0.496539504950764
+0 4:0.0277295296793654 6:0.0416695265466943 20:0.0180811947995252 26:0.0138736306583345 27:0.0746656416063111 29:0.0582059987665144 30:0.115601048656711 34:0.0766350672522351 37:0.136494246443953 38:0.026114861358586 41:0.0147594578757974 42:0.019177221579832 46:0.107358662936404 47:0.0151711660864932 51:0.0217697199145812 57:0.0239303843073386 64:0.0556016135041073 65:0.0458633661233083 67:0.0181314309536587 70:0.0368778333260711 75:0.0259847299205926 79:0.0869485043438263 82:0.0240424226550556 83:0.0498315588056761 84:0.0376240765054008 85:0.0196432851251937 89:0.0510326649130846 124:0.0370617053477091 130:0.0477752676832294 139:0.0524451105029021 142:0.0224422237013782 159:0.0385664690697424 162:0.0173601797829131 171:0.0277147924590506 175:0.0310277061676402 183:0.0281986334765938 185:0.055996552809766 190:0.0274825009130663 194:0.0253958123876621 199:0.0299660113955628 203:0.0242998524873869 214:0.0274616845924424 215:0.061260610499342 218:0.0181819557044337 225:0.0305423476382984 228:0.0242419911513334 229:0.100715880593333 239:0.0271753139937885 240:0.028855624044459 242:0.0224600913879596 251:0.0362347309510626 264:0.0527732195903101 286:0.0718414967595191 295:0.0272156576028697 317:0.038209138942429 330:0.0318784327234256 347:0.0263315842265611 355:0.019291442553533 357:0.0296719676858255 368:0.0390708036356001 372:0.0316411765654152 373:0.0228821342468923 381:0.0308120587984568 387:0.0226264861876557 389:0.0273173337798942 408:0.0377489379540365 414:0.0236833976482404 422:0.0292288720506786 424:0.132054605148097 433:0.025920783664021 465:0.0272561871278567 471:0.0668269758557956 480:0.0235758135378219 502:0.0221251174140824 508:0.024869397051702 534:0.0244314493269795 541:0.0330528268144166 550:0.026114861358586 570:0.0371864576714137 580:0.0290030279086991 581:0.0479872030313567 582:0.0270355511445356 594:0.0306911649174873 621:0.044638350301232 626:0.0605041216934738 631:0.0215122900822498 643:0.078237763387042 653:0.065488404938148 656:0.0316411765654152 662:0.0334134879278978 663:0.0299987504658499 667:0.0308731346783371 678:0.0346877916486603 710:0.0369386978690371 714:0.0331714114157725 732:0.0350744425428994 733:0.0723570667419711 789:0.0658716397642092 800:0.0848001698945098 838:0.0422188467513492 849:0.120174547075775 856:0.0240565283378833 858:0.0321576590758545 880:0.0377039534765552 890:0.0336624165642661 906:0.0750126143016727 969:0.0358486862874878 971:0.0799430649635009 982:0.035902808866645 984:0.0367573534782134 989:0.0387648635238684 1000:0.0778330066765448 1005:0.0337895738350346 1017:0.0377708351019679 1018:0.0347828724812754 1021:0.0343174257100895 1098:0.107871799716799 1140:0.0325566710281479 1196:0.0402340860493609 1218:0.0389933151047516 1229:0.0361785333709856 1262:0.148136297902262 1292:0.0769384181681464 1331:0.0362347309510626 1363:0.0362912899328516 1380:0.0330136512870242 1382:0.0839979260292972 1393:0.0366977268677369 1400:0.048890035163744 1424:0.0298066547186415 1426:0.038043566765099 1482:0.0379745868714292 1483:0.0898730215301622 1491:0.0368173870994198 1576:0.0355307640330882 1660:0.18035787701102 1827:0.0431578594957126 1836:0.034182463091977 1865:0.038043566765099 1920:0.0482043718764298 1947:0.0444929768863505 1949:0.0398857279830381 1954:0.04540360590875 2056:0.0417844428343623 2142:0.0416791135352259 2149:0.0491310061650442 2198:0.048890035163744 2291:0.0543005260244333 2387:0.0435375540569483 2473:0.0664928343204404 2549:0.0519930608222675 2594:0.0547516449759565 2601:0.0684553576114469 2602:0.048890035163744 2642:0.0444929768863505 2708:0.0498962617725622 2851:0.0574374434064308 2889:0.0484270392470697 2979:0.0992674164099036 3246:0.05346228334776 3264:0.0547516449759565 3492:0.0587931818882455 3556:0.0557298623529553 3604:0.05346228334776 3621:0.048890035163744 4119:0.0574374434064308 4321:0.159214004775858 4349:0.0552271603130477 4451:0.0664928343204404 4806:0.0684553576114469 5147:0.0684553576114469 5596:0.0648893360362491 5792:0.0648893360362491 6162:0.120793360344874 6355:0.241586720689747 6993:0.0648893360362491 7013:0.0664928343204404 8487:0.638869411658273
+0 1:0.154379416120931 2:0.29513173229148 3:0.184277118307161 15:0.123846055325128 142:0.018747366796133 169:0.263490476381299 2973:0.612367586385694 5219:0.628486753209908
+0 1:0.288807804362253 2:0.138030622447039 3:0.172369708571784 4:0.219382236745167 5:0.0949155462931383 7:0.104977765660387 15:0.0579217557238301 21:0.10227220580984 40:0.10563243461804 44:0.146403374944611 47:0.0800178098600306 54:0.12658530644688 75:0.137052166339498 83:0.0438047211270012 92:0.111605099170412 142:0.0789118682433566 185:0.0984481898096189 186:0.0959359169262106 187:0.157641789426013 228:0.127860378531016 355:0.101749527582367 766:0.225086601244447 986:0.302354953481532 1314:0.197138645513515 1392:0.269163362551372 3666:0.242075653940305 4740:0.555883538795549
+0 2:0.0705438322527946 6:0.0345610162968939 11:0.0388264288533445 26:0.224384409731134 29:0.0941391550465518 57:0.0645061278439951 63:0.0747035739360974 75:0.0350218844946716 82:0.0648081355296403 88:0.197928654654628 100:0.0533917692763352 134:0.0618811189716994 142:0.0403297869518039 169:0.188942352844258 174:0.0633351598292231 176:0.0447862251338073 204:0.0518690726187024 218:0.0490108116970099 228:0.0653460872302564 275:0.0581022274914327 284:0.0524709823672238 286:0.145240566813181 341:0.072192171221668 411:0.0647322721602089 472:0.0787201756599687 473:0.0760725330577224 502:0.0596398968836672 505:0.124302580719291 513:0.0646566507796079 530:0.0710280793222199 643:0.0702985669105348 655:0.065423943729515 750:0.199805157541298 856:0.0648461584451157 952:0.160985691735231 1045:0.0897687841524272 1836:0.0921413674730465 1851:0.117012611963415 1863:0.104091740131116 1917:0.107514941481139 2385:0.679906332092673 3360:0.121129701514507 6452:0.174914023624042 7055:0.321088381527759
+0 1:0.148032958394408 2:0.282999019849581 11:0.155759064383984 24:0.278989600786005 31:0.13211261264812 32:0.259836969873971 45:0.304445850890078 48:0.212049008175466 142:0.0359533445412531 209:0.217739994462779 409:0.354039111163565 457:0.239011157689269 959:0.385353785076389 1242:0.440011078955726
+0 6:0.0202875294405021 11:0.182330823067279 18:0.0361995260276811 26:0.0878100203864509 27:0.0196908067093901 32:0.152081963151868 63:0.0584686107036541 72:0.042084691798945 75:0.0137053746075048 83:0.0175220904173277 88:0.258189643108616 129:0.209200422577213 134:0.145298391941373 142:0.0175361728495928 162:0.03662578258932 176:0.0701061066897488 180:0.0521125093416175 215:0.043081692883663 229:0.0354143600664593 280:0.0708428446760095 312:0.0612942088456876 317:0.0403060231325465 346:0.0563412976931228 377:0.0520485261932662 405:0.0643128552207355 434:0.0585167133779191 437:0.0608270629090897 455:0.0493762515208349 469:0.0781912387676236 506:0.0378325761853926 580:0.0611893775237011 599:0.0634075491072706 647:0.122170270289665 673:0.0683761526609559 730:0.0650059953752536 784:0.132811572578211 799:0.0682228038985718 856:0.0507534592253675 952:0.12599945682622 964:0.081008013702688 966:0.0675479988192965 997:0.128625710441471 1059:0.371942647549784 1111:0.0839699661608879 1140:0.34343352713507 1149:0.0648780286981488 1190:0.0731828547465809 1424:0.0628848358191773 1603:0.195867969766418 1731:0.0839699661608879 1931:0.0881550731619449 2401:0.457914159646433 2642:0.0938694252345848 2949:0.100794265335592 2975:0.096131102335473 8188:0.280567612089494
+0 1:0.461829362383355 3:0.367512656751996 4:0.311832627431885 5:0.202371198943759 15:0.123496051053193 44:0.312149354600465 63:0.155825717259862 142:0.149555075348349 187:0.336110986826698 2216:0.491067137043224
+0 1:0.420458442119473 2:0.100475367358959 3:0.250943007910462 4:0.106461935466328 5:0.0690910046829531 21:0.0744460704964031 31:0.046904979726174 44:0.213140136867747 47:0.0582466317865855 58:0.165103076374216 63:0.05320003744168 75:0.0997631287621393 83:0.0318863696277318 142:0.121265586974874 229:0.12889276887785 356:0.117374682580641 535:0.233398671688187 4656:0.457325212686004 9680:0.572450981002968
+0 2:0.0750988570860287 4:0.0397867153255793 6:0.0367926258149312 26:0.119436470777102 29:0.0334059110261451 31:0.0350584472758828 42:0.0550314891420685 63:0.0795271938549995 75:0.0745665046697135 84:0.0539835488959673 142:0.0357782389790182 162:0.0498172553959774 169:0.268189848318253 173:0.137502582435297 199:0.0859913008712529 214:0.315219259720342 215:0.0585983846773102 218:0.052175446467302 228:0.208696478883529 229:0.192678063963647 286:0.0515395899819662 347:0.0755618474462116 411:0.068912043768658 433:0.148766005421832 502:0.0634908531286175 507:0.147546201027951 644:0.0876451714047007 778:0.175801066866703 829:0.0682358061376329 915:0.113971833494552 1007:0.318528575697834 1009:0.245938818088555 1045:0.0955651667418823 1059:0.0843174787253405 1155:0.10707443849171 1218:0.111896303010709 1296:0.0936394130926716 1312:0.23920708997564 1382:0.120521393961962 1467:0.113028244523092 1649:0.104470268011731 2733:0.23920708997564 2782:0.351950182133585 3378:0.150190590287134 4657:0.203701939619208
+0 1:0.431213273747015 2:0.274787757042138 3:0.171574556285946 4:0.291160283620985 5:0.188955389839873 15:0.115309118057486 75:0.272839872185945 142:0.0872753809351116 187:0.313829155911426 229:0.176252925417829 652:0.603093615580695
+0 6:0.019174392216709 21:0.0579971059489249 26:0.165984111213233 29:0.0174094136035229 32:0.0359343805157879 33:0.18568348262266 37:0.022680793133216 59:0.029765695132299 65:0.0342943307825267 88:0.109810476135057 94:0.0287768720041183 97:0.0299113235501206 100:0.0296216614828104 111:0.0299780550963686 142:0.00248609958041624 157:0.048577971725947 176:0.0248473204388562 199:0.022407084213344 206:0.0457202902447332 209:0.0301125425620768 215:0.0305384132331311 224:0.0455881005938402 252:0.0345949783764363 256:0.0326218893336388 287:0.0444949102107304 308:0.0354185199062439 317:0.0285708826143323 337:0.0732957043060193 414:0.0354185199062439 442:0.0407920373987033 455:0.0350003045822296 457:0.0330542566444296 474:0.193627729647989 502:0.0330881119000627 507:0.0256311209645277 515:0.0346330471716131 574:0.0358923588840326 598:0.0506606264720003 609:0.0339460143555309 643:0.0780030472851749 656:0.0473193778478992 697:0.0513896813683546 713:0.0479336260955259 729:0.0515957340349996 731:0.0552418206718925 757:0.0455443309709133 774:0.0537740902204778 827:0.0409451562356829 862:0.0461250224721783 882:0.0719953315360814 890:0.0503421421572218 895:0.0996961674283765 912:0.0455881005938402 1000:0.0581996286445165 1026:0.0663253738138477 1106:0.0614236653957002 1168:0.124662224090273 1179:0.0597774246717145 1190:0.0518755905406585 1253:0.0586652616786774 1317:0.0621754562692829 1379:0.0505963096712153 1407:0.116860769461704 1591:0.113788304092786 1598:0.100309377458863 1676:0.130220819490379 1682:0.0672025494267886 1855:0.0620216210705727 1866:0.0763193476265028 1943:0.0575307001114738 1956:0.0714479102448508 2185:0.0599070095578597 2246:0.0607125322347138 2736:0.125296122693672 2804:0.125296122693672 2976:0.12945828728541 2979:0.0742272079449037 3187:0.0812064337423644 3199:0.0849902468686037 3944:0.0833440061446179 4218:0.0932581854179851 4781:0.0868724178566281 5302:0.51538616110824 5570:0.0793681785198515 7548:0.0970419985442244 7549:0.485209992721122 9366:0.106158796743939 9899:0.222983563634827
+0 6:0.0410050672796897 18:0.073166326368678 26:0.236641647559049 27:0.0397989738611526 32:0.204924940034666 33:0.226908699347285 64:0.11854915406236 75:0.0554024884619145 86:0.106181223770399 88:0.208740718629874 142:0.024810826017247 186:0.077562999149117 199:0.0638910469982059 252:0.197286658835737 275:0.0919141855057912 286:0.0765872438826403 308:0.100991556884009 382:0.120053254484365 420:0.138987851001381 437:0.122943398028233 455:0.199598134565231 458:0.143905044888041 474:0.368070450616039 506:0.152934080652416 507:0.073083991588076 515:0.0987518779089904 598:0.144452550633676 655:0.103496694706959 808:0.142657783420146 882:0.102642920136924 1021:0.146337544223549 1365:0.165302461150986 1863:0.164666793772111 2143:0.215114082308609 2228:0.216343814691119 3523:0.215114082308609 6152:0.247706023652119 6325:0.27092214667692
+0 2:0.178013647054636 6:0.0174425810462858 27:0.152365838143231 31:0.0332408896849303 39:0.0875930416668076 41:0.160633431667219 63:0.0942552681056929 100:0.10778505525496 110:0.0841686911444504 142:0.0588004989254228 199:0.0407665993252833 283:0.130755298506621 332:0.224038521126559 338:0.114273125955568 406:0.0817737308152892 423:0.0660769415064455 436:0.0770339906754086 456:0.0945094832944231 500:0.090254630180189 540:0.09858948118535 667:0.0840013503788257 853:0.0922876132820834 1096:0.114273125955568 1507:0.239078251736079 1908:0.166851901438054 2313:0.799838876605217
+0 6:0.00722967283560655 12:0.0487367881991402 17:0.0393953017894126 29:0.0262567622880996 41:0.166450015959943 59:0.0448924242497556 65:0.155167447627997 100:0.044675193653583 110:0.139546343138286 142:0.0262466324460388 186:0.0410257910934555 199:0.0337942160004831 211:0.215705712780681 283:0.0541959946877378 293:0.136855562359113 311:0.277916295957086 331:0.0565165823783962 341:0.0604062999468748 457:0.0997044218820785 580:0.0654164197481249 582:0.0609787697808745 598:0.22921806390521 671:0.0441518643967047 867:0.0635511764217289 1266:0.295478922525689 1305:0.0657545569951377 1474:0.111373960378819 1642:0.335846950167974 1664:0.0858073832861803 1886:0.498260128136719 2544:0.292716198921507 2587:0.11804852811804 3401:0.109227337797894 4139:0.246985011421736 4140:0.131020405224468 6402:0.160107994121768
+0 6:0.0130284845483648 27:0.0948395558872121 34:0.0519152537435141 41:0.0299957067258807 42:0.0389739460057772 51:0.0442426909956584 58:0.0436980451472306 78:0.0500456485668152 83:0.0843940676438849 84:0.0382317824335106 113:0.0697434449049119 135:0.118700744610064 139:0.373045445490839 141:0.119011147030628 142:0.0185816168582471 145:0.327989184291678 183:0.114616396747406 188:0.0719990338226955 214:0.334862964818362 215:0.0415000632554827 218:0.0369512630885626 227:0.0463037448142273 286:0.036500942068484 302:0.0826942137156557 309:0.0958808142042716 317:0.0388262948277024 325:0.058495480273583 331:0.0509238410220224 368:0.158807508684951 387:0.0919678012069861 396:0.066165055949153 404:0.109409079489401 414:0.0481318660961084 423:0.0493552192267581 434:0.0563684280755709 439:0.0702101527184814 449:0.0744605773264687 475:0.0527856249952607 501:0.135481736494356 507:0.104493949952464 532:0.075320655658623 608:0.07108222292881 623:0.0904232592602765 630:0.0901326204379216 655:0.0493257971727922 676:0.0651392231758407 692:0.0910191108940895 695:0.0643044928008054 754:0.0794037543424757 773:0.10195438663489 778:0.249008754610756 809:0.0984184703179242 814:0.0723153941831608 815:0.0993594188167586 834:0.0656447811456938 891:0.0916355131409722 916:0.157870831844701 944:0.0712819333165192 986:0.0582516307377094 1098:0.0730761002092527 1099:0.184547868708593 1139:0.108651617538406 1188:0.0802126658519339 1262:0.100352668431911 1323:0.209982287933033 1385:0.103713894036933 1546:0.0979659425080721 1559:0.0947071463739046 1865:0.077316096640895 2099:0.0947071463739046 2137:0.0919518735014375 2150:0.0975245893742628 2173:0.0916355131409722 3115:0.104991143966517 3318:0.104991143966517 4659:0.121040856595697 6331:0.121040856595697
+0 4:0.017399674532944 6:0.0764288687437319 11:0.0542283036159347 12:0.0271170281069968 13:0.0267348061096114 17:0.0219194482316332 18:0.150729009896519 21:0.024334282318279 25:0.241519141975605 27:0.0702765902144027 34:0.0320578878285463 37:0.0570981066323081 38:0.196638064922023 41:0.0370449504612656 47:0.0190391510597204 51:0.081960144055872 74:0.0989290896888965 77:0.0606650807003586 78:0.0309033987580625 79:0.027279144186759 82:0.0301721907308613 83:0.0833819075153161 84:0.0472165733329192 113:0.172267483817693 114:0.0282456943774756 116:0.0861337419088467 123:0.040810728194444 132:0.024396993877136 135:0.109947314560215 138:0.134925352503814 139:0.197448971723561 142:0.0156466727273808 145:0.0675115675439458 148:0.0353597169805116 157:0.0815289010778984 159:0.0725988522839301 162:0.0217862676755645 166:0.0600282747330484 168:0.0597510414585825 169:0.117285783347316 173:0.0300665707414567 176:0.0208507545512477 181:0.0339533229090961 185:0.0936976385942112 186:0.0228266484374659 190:0.0344893387495516 208:0.0301368716457917 214:0.034463215176017 215:0.0768793915153338 242:0.0281864340758352 249:0.0459058923597864 253:0.0439550607868788 275:0.0270501762692683 283:0.0301545170606865 286:0.0225394854515936 288:0.0417795255764178 294:0.192204943345647 295:0.102463386137203 298:0.0398774509967734 299:0.0333003296010082 301:0.10937967298999 302:0.0510640252374289 307:0.154518653715047 330:0.0400060412435131 341:0.033609915507891 353:0.0451247996403853 357:0.03723702395642 358:0.213063320547967 364:0.0372706227789134 381:0.0773355770519292 382:0.0353314526765489 394:0.0374743923450283 407:0.0580315010381708 411:0.0301368716457917 413:0.104342563493476 424:0.0828613819535179 430:0.0313075961448984 433:0.0325294517871634 449:0.0919594401820276 454:0.0401361473237397 455:0.0293706825192204 456:0.0435911639367186 461:0.0440168940279596 465:0.0342053248300587 466:0.0371701316021782 485:0.0278374024729427 506:0.0450082195306589 510:0.0363664867326025 517:0.134561803195658 527:0.0383664126782044 534:0.122641608876299 540:0.0454730053215753 550:0.0327730108203372 567:0.0873019726613603 576:0.0393775676182329 613:0.0744070542063911 636:0.0411402214586074 641:0.0318294521084944 656:0.0397082951239033 662:0.0419324685040369 673:0.0406724733011228 678:0.0435316640370132 681:0.0440168940279596 706:0.0819014737927304 712:0.0369391502796213 716:0.0385160719836203 725:0.0584820617465567 744:0.0496343313921974 748:0.0594424241226437 771:0.0853512758620406 782:0.0458325551818898 800:0.0354735036034118 805:0.0524376514326041 806:0.0863624943116854 814:0.0893101209310956 827:0.034359334835866 829:0.0596822737726508 872:0.0459058923597864 876:0.0388216196525675 885:0.0563933590651825 887:0.0508316544511997 904:0.0490321527166676 915:0.0498425867151982 944:0.0440168940279596 950:0.0438324239177746 969:0.0449885361236443 971:0.0501625280924255 976:0.117903601842788 991:0.12819205934237 1003:0.0425121207970684 1032:0.106246825233865 1045:0.0208964573273813 1055:0.0438935720224656 1058:0.0451247996403853 1068:0.0474007489640753 1074:0.0525714373696274 1080:0.0406724733011228 1127:0.0463564530681723 1168:0.0523054677609048 1209:0.191008763988621 1216:0.0430668709544233 1218:0.0489349079936312 1225:0.0358812567416562 1229:0.0454024798121861 1251:0.0528439747885205 1292:0.0482771778203462 1319:0.0424581490285637 1322:0.0903871349863269 1335:0.043238882820316 1337:0.0517920168272867 1363:0.0910879687486679 1376:0.0575986139999597 1382:0.105413729785663 1409:0.0528439747885205 1441:0.0524376514326041 1559:0.0584820617465567 1576:0.0445895575749783 1613:0.0461288737752529 1642:0.0622881367708099 1698:0.0582544824536374 1779:0.0548012466094047 1784:0.0587144325327859 1787:0.0578129353877825 1890:0.0666022082167512 1903:0.0676062823516189 1929:0.0556572727153976 1932:0.0519181576821551 1995:0.0520457568451006 1999:0.0666022082167512 2118:0.0599558750562618 2120:0.0594424241226437 2142:0.0523054677609048 2228:0.127339175992414 2242:0.137421847934745 2251:0.0580315010381708 2394:0.0619681953935826 2444:0.056979543076937 2456:0.0567806691439323 2668:0.0633076800107547 2699:0.122709719146279 3372:0.0769580822496004 3714:0.0728994285906737 4034:0.0747432387133577 4085:0.0797318910300033 5376:0.0747432387133577 6563:0.0890836909279848
+0 6:0.027076456709609 27:0.0131400246887549 42:0.0269992097676602 58:0.0302718304990693 69:0.0457837218116333 73:0.245187787778527 98:0.0292727287911503 110:0.0435522303346738 117:0.279538714708074 127:0.0448809796862947 132:0.0273698909607544 137:0.0369436393967066 142:0.00702131957082403 156:0.0626407329727875 158:0.0323904182641476 172:0.0353893561112939 199:0.0421885216375533 202:0.0560346482880161 203:0.0342112548420534 204:0.0812725347694177 229:0.0236326308250143 243:0.0425511080419149 248:0.0548978740046912 286:0.0252860357398281 295:0.0383163559708493 299:0.0373581431682422 309:0.0332107276873049 322:0.0391097895934264 323:0.15441730313665 327:0.0379517364874195 328:0.0915674436232667 329:0.181763608261725 336:0.041258546317047 360:0.0555673421171819 370:0.0533672682174033 394:0.0420408365665564 398:0.0351006114211775 408:0.0265729707008045 414:0.0333433609479813 442:0.0384020458898041 464:0.0632651750579488 485:0.0312295307426834 515:0.032603908792021 533:0.0565202848010156 534:0.0343965272842646 546:0.0389889872316192 588:0.432980105917636 593:0.0434656415631274 618:0.25846918560682 644:0.0429999333975701 655:0.0341704569670176 709:0.0393549885736377 722:0.05796322327977 733:0.0509350015852553 754:0.0550069684890125 827:0.0385461935465345 858:0.0452740966365528 923:0.0758444497524709 1000:0.054789732322792 1028:0.0548978740046912 1108:0.0784609093515753 1124:0.0501704288779668 1296:0.0459407912819311 1504:0.0630535093246954 1605:0.0736855810283934 1690:0.0589775328756914 1891:0.128762877822178 1943:0.0541599960835396 2135:0.0630535093246954 2333:0.0695193333858467 2404:0.0706289240273615 2708:0.0702479049225907 4627:0.0850312246984108 4682:0.579415850659423 5046:0.089447625169553 5080:0.0999389891787239 5883:0.0963768683684282 6675:0.0999389891787239
+0 6:0.0315635908021765 42:0.0629470848588636 57:0.157097619738976 63:0.0227415480583058 67:0.0595143941003876 73:0.228656417968777 83:0.0545221727025211 100:0.0650149074770859 117:0.21724274336779 131:0.279392524759386 142:0.0163697975847892 162:0.0569828483970478 169:0.0766914061547249 179:0.0573530988151209 199:0.0491800403501071 209:0.0660923145620759 259:0.127991195419493 367:0.0898006768286772 379:0.385506453558079 381:0.202274273339208 441:0.0741902500102489 449:0.12026178408813 519:0.377392846425961 541:0.108492207051541 546:0.0909005526068984 662:0.109676036816509 755:0.109810620963163 895:0.109408736321853 927:0.135137878696556 990:0.141660846577512 1138:0.103749065955867 1175:0.111476558940075 1226:0.333060672375711 1268:0.142485709755744 1366:0.114014420599582 1395:0.112347024298952 1433:0.101438373286488 1469:0.11912210001491 1598:0.110081686308456 2335:0.155474021185038 4605:0.224697054611044
+0 6:0.0241947571263451 17:0.0878933049380918 25:0.0605281990042665 53:0.0621108062875204 63:0.0522969235721312 73:0.350548613610409 80:0.105022974099864 87:0.225399026399616 98:0.0523145676794487 131:0.214165565693609 142:0.0439183702953192 175:0.078068254370825 179:0.0439634484229671 189:0.060351310226801 190:0.0691482270856785 216:0.0701676672163805 226:0.0625345187113415 262:0.0754793174049511 277:0.146072839988532 303:0.0720581980395403 323:0.0689914708110716 337:0.061657643661605 341:0.134770114715541 347:0.0662524262760324 351:0.0572340656297128 377:0.0620726862639181 431:0.359713482940297 433:0.0652188183567493 480:0.118637362254601 501:0.251598541439559 502:0.0556686106583148 506:0.045118849732492 515:0.0582678644442061 622:0.0890089466343757 651:0.104347370626751 657:0.251293317891832 671:0.0985054842770047 803:0.10078967336828 808:0.252522723483698 899:0.147928469288802 904:0.0983053474922269 912:0.0766990340904212 939:0.117251621304051 1012:0.107672915638731 1293:0.118679772826286 1370:0.132590045296427 1405:0.342717592749452 1878:0.149853915182341 2293:0.120206493189576 2927:0.128402371871461
+0 6:0.0293018600611095 9:0.448307007679966 13:0.259661244849194 51:0.0663363486607196 69:0.198186671762728 72:0.0607841262004886 75:0.0395901304801015 82:0.0732616927618765 83:0.0759229717288736 85:0.299283549815907 104:0.424346581286378 142:0.0557215931874282 212:0.221172497558908 229:0.0511499749570026 289:0.084978871862702 293:0.18489183987603 339:0.0759710337990954 404:0.164045149160785 446:0.120518101232105 457:0.134700655843134 489:0.11128693326179 507:0.0522251769425047 518:0.0851791192812944 797:0.144333325078711 808:0.203883992087761 863:0.103224520893174 866:0.109237553901772 1269:0.0997776195618766 1477:0.323436276746543 2433:0.133063990211341
+0 6:0.0293088172333077 8:0.295019469859197 9:0.373677874746429 13:0.0649307241245662 17:0.0532356823631205 22:0.208369991259951 63:0.021116985067409 80:0.0636108710890851 105:0.20755971836846 142:0.0405344168911431 151:0.0771547343727436 153:0.084734295541515 212:0.110612505391625 232:0.34686307722492 241:0.129020634563176 289:0.0849990484877873 423:0.0740195118604405 432:0.0917738237669017 474:0.131541176271036 524:0.110440118830286 541:0.201483936833481 543:0.216272689036497 596:0.1641951264005 760:0.46390227440104 971:0.121829545335252 1549:0.154634091467013 2512:0.302557932031885
+0 6:0.0432035827896399 8:0.173953087074869 13:0.114855808461038 14:0.0876637960537033 17:0.047084238003114 37:0.0817666823785272 41:0.0795746884638546 67:0.0488772345733373 71:0.123725142237375 85:0.105905535785779 91:0.138086345434983 96:0.0535358900486845 109:0.380358715794033 112:0.0962055814625127 119:0.180813011213766 142:0.00448132729660985 147:0.11125223688058 151:0.0682394160272836 153:0.299772600722162 158:0.0620191393020585 175:0.334567851043729 183:0.0760155790574776 220:0.069317263072944 232:0.230086987114464 254:0.0833910762749007 323:0.0739171392893106 325:0.0775904308881933 376:0.110198349970044 423:0.0654664720842514 429:0.0986085023113957 459:0.0789302535462278 468:0.115682828745497 473:0.0760766049642424 485:0.0597963447607665 550:0.0703983159264231 572:0.0936363322625616 631:0.0579910792064446 747:0.0952263280396999 861:0.230720516880965 914:0.110719438016033 950:0.0941545726055038 966:0.172617305689544 1083:0.0926326458095988 1093:0.109688468991949 1134:0.105115002452822 1159:0.0878638694071824 1169:0.0973766121552592 1291:0.262323017367676 1373:0.100244223371151 1556:0.156592173752841 1948:0.129945418962601 2596:0.119555029280076 2695:0.144119268396045
+0 6:0.0122827677859998 8:0.556366715621007 9:0.140941160237413 10:0.051799582507082 13:0.0816336940774791 14:0.062306988254287 22:0.0654929247701329 34:0.0489437588781476 37:0.0871734275931294 47:0.0290676548528506 52:0.150209321870374 59:0.0381347285657687 106:0.042988036155692 123:0.062306988254287 142:0.0143329525883292 171:0.0531009954623918 218:0.0348362683496572 265:0.0580171511483316 281:0.212673732403954 282:0.0869924129830324 377:0.0472679506918508 423:0.0465302541165823 452:0.0866887860605043 471:0.128039167059508 507:0.0328376621635832 627:0.208077472727912 631:0.0412171233008878 653:0.0627372457974921 723:0.0630303112415835 734:0.0847040431728627 811:0.0697522405160068 814:0.0681762480361758 837:0.133286594624597 867:0.0539847625379934 877:0.115718847417628 966:0.0613438210655191 1061:0.0796569385577388 1267:0.0824539272685523 1359:0.0681762480361758 1373:0.0712485191072511 1457:0.0813225737332524 1553:0.0855261983396276 1698:0.0889389019648147 1912:0.0932229603195838 1952:0.0860974679048357 2030:0.0946087412145947 2047:0.0844386701561938 2314:0.101683630473314 3110:0.209806142746511 3917:0.382196875413899 4407:0.107798892263537 5358:0.12172911922152 6668:0.228225581979915 7247:0.243458238443039
+0 6:0.0227397136420904 10:0.115079046695012 13:0.0302265231942881 14:0.0922816808386481 17:0.148693513840282 27:0.0132425184820987 34:0.0362448295318319 37:0.0645554427211996 42:0.13604903446501 50:0.0431689526368067 51:0.0308882010110081 53:0.315227901858379 57:0.0339538829004714 58:0.0305079544648 59:0.028240306175709 78:0.034939557650545 83:0.011784007106515 91:0.0363400874455634 96:0.0281780058660656 98:0.0295010596418447 101:0.044202264828507 104:0.131725695547355 109:0.300296215728559 127:0.0904621135908641 132:0.0275833794445602 140:0.0321379279445698 142:0.00589673893236857 145:0.076328960602269 164:0.0531241325592992 166:0.0339341536851333 168:0.0337774329300525 171:0.0393234310690485 179:0.0247917238260313 199:0.0212587986229521 203:0.0689562135951525 214:0.0389643062529307 215:0.057946850291303 218:0.0257976632118098 219:0.0760537929614262 220:0.0729687035636395 224:0.0432518680654657 244:0.066925508739399 275:0.0611661649656531 284:0.0276189821109416 293:0.0860912068675201 308:0.0336034432253999 323:0.116716332684647 347:0.0373608512061538 371:0.127090668757728 382:0.0399459404881063 384:0.0492844168159331 394:0.042368760213362 402:0.0346648243874073 409:0.0232265035369262 433:0.0367779824140443 454:0.0453781554665637 470:0.353979235694368 490:0.0470656135058016 509:0.0422146999096358 515:0.0657164465050802 532:0.0525853988513668 539:0.0422530370399489 546:0.0392931060818235 559:0.0651213191855813 569:0.0637586511306229 570:0.0527624050262876 575:0.0949345247014267 608:0.0496263211103011 620:0.0646503679696854 645:0.0578667397069103 690:0.0568369824546549 704:0.0627267638576911 722:0.0584153434826688 729:0.0979032621299512 759:0.0672059413523055 772:0.0421383771879079 804:0.085685385695052 806:0.0488209625820002 886:0.0391725377419344 906:0.0532162268968692 925:0.0672059413523055 1021:0.0486916482009307 1026:0.0629264277348911 1064:0.0421383771879079 1192:0.0565922937109214 1229:0.0513323008027302 1332:0.055885762040506 1351:0.0603857721377918 1543:0.0637586511306229 1636:0.0663828699379902 1760:0.0693681517032982 1791:0.0637586511306229 1873:0.0602226492123304 1920:0.0683952909808116 2049:0.0845051289814034 2254:0.0732999617842344 2410:0.063545334378864 4564:0.572139036559118
+0 6:0.0194170415030539 9:0.594146293517056 13:0.258098964918434 69:0.098497130121011 72:0.0604184119387129 75:0.0393519321831583 77:0.07320791139863 83:0.0503107819783543 85:0.237986302405544 104:0.421793454238038 142:0.0528687773750463 212:0.219841789334148 229:0.0508422256069577 293:0.0918897090738039 339:0.0755139458671157 404:0.163058153799113 409:0.0991635141597734 446:0.119792991056509 457:0.133890214795584 483:0.0942631914276838 489:0.110617363405528 518:0.0846666299082644 797:0.286929856072181 863:0.102603459411907 866:0.108580314357823 1269:0.0991772967348371 1477:0.160745143723388 2433:0.132263396339373
+0 8:0.347301970084959 9:0.263939994479418 142:0.0357883570767157 212:0.390644804462016 218:0.195713256377422 281:0.398273319604164 582:0.291014665224661 3143:0.611733602091382
+0 1:0.159643637783678 9:0.285953841367158 14:0.379241719139804 22:0.398633445095304 35:0.405635376544175 75:0.0757580164735706 83:0.0968553470811681 124:0.432210962800161 142:0.0387732757306865 173:0.279399522652501 518:0.325990394245349 1045:0.194184440008266
+0 6:0.02294941389861 8:0.0462012770290364 9:0.351117063948784 10:0.0774268522822822 14:0.0931326806554667 35:0.0996143305961602 42:0.0549214585827431 48:0.0280792461286761 57:0.0342669975714005 58:0.0307892915993766 68:0.0281771576186292 75:0.111626123381067 83:0.0475707057226978 84:0.0269378067998972 89:0.0730759766403956 104:0.0664702193655383 109:0.0505109127245475 118:0.0300551792564656 127:0.136944500683846 142:0.0547502788195406 173:0.102920743704727 190:0.0393534336912114 215:0.0292406112140833 218:0.104142252621672 223:0.0623433890560901 225:0.0874699326935162 242:0.0321616187671764 286:0.0514365411638891 293:0.0434425597993579 302:0.0582656787298837 307:0.308543731878347 317:0.0273566954573312 330:0.0456481668946155 331:0.0358805293304227 347:0.037705384132339 355:0.0552485749197104 414:0.0339133262245977 423:0.0347752910136787 428:0.135651397270453 433:0.0371171402621987 447:0.193696939447739 456:0.0497389060417601 485:0.031763362594731 501:0.0477296716278735 521:0.0452606347193782 557:0.0863944364720115 631:0.0308044192912379 653:0.0468879016765775 655:0.0695091209415831 745:0.0623433890560901 781:0.0497389060417601 789:0.0471622873004199 800:0.0404763971263428 817:0.0841886112276764 831:0.0805656001797064 856:0.0688952578064346 861:0.122556980113979 1017:0.0540857638592954 1021:0.0491406710549036 1041:0.0654819633811678 1045:0.0238435231764199 1071:0.0878116222756464 1101:0.0590963403139536 1124:0.0510280329574718 1127:0.0528941889905555 1150:0.050083963296599 1162:0.0532489674361204 1166:0.151990480523797 1171:0.0759952402618983 1229:0.0518056751299315 1232:0.0519671363410011 1269:0.0468879016765775 1282:0.0645656464825797 1292:0.0550857970907463 1344:0.0726490272124472 1366:0.0497389060417601 1494:0.168377222455353 1551:0.0491406710549036 1706:0.0690260161644772 1951:0.0572370417827874 2136:0.0852844152777718 2200:0.0662157904705207 2280:0.0623433890560901 3536:0.0864847328070226 3598:0.0831805692188742 3698:0.0696719937558824 4025:0.196048633644504 4240:0.101647327870222 5098:0.533768375717623 5126:0.0952140911282953 5444:0.0864847328070226 8622:0.101647327870222
+0 6:0.025190144556832 8:0.338081792186759 9:0.192699683667651 10:0.0708222008845178 13:0.167418662499164 22:0.0895442173486787 29:0.0304952313735929 52:0.136914292269651 63:0.0181494838982441 114:0.0589600482438391 116:0.179795529559287 142:0.0239512949758309 171:0.0726015381936952 176:0.0435238545681626 229:0.0439724734388225 232:0.149059769064882 281:0.0969249883890716 282:0.118939069573986 375:0.0595250670222807 415:0.0730544089021534 453:0.0814440108849281 474:0.226112245954264 506:0.0469750674108603 522:0.233868819265873 541:0.173170055083188 574:0.0628709164845804 619:0.369167878821031 627:0.568981596369592 649:0.112416108058716 658:0.0776586237722165 867:0.073809855449048 987:0.0685509917043818 1059:0.076970839698245 1149:0.0805562316624895 1433:0.0809555320467637 2994:0.174184311777014
+0 6:0.0050860607870831 12:0.342862357653595 17:0.027714518233746 29:0.0738863249310847 31:0.0193853404041118 37:0.0240645734730032 39:0.0510822949035689 63:0.0109935111510449 75:0.0206155318915331 94:0.0610651617515211 106:0.0356010581351846 116:0.0544529026334813 142:0.00263777927265306 179:0.0277251104346317 182:0.0517180465065992 199:0.023774165268414 281:0.0587094347500011 283:0.0381267769186877 372:0.0502063855628538 381:0.048890789532508 389:0.0433455623708265 429:0.116085010662414 436:0.0449244934802984 571:0.0401409674844522 582:0.0857968920252125 640:0.0474688316448115 645:0.0647136020118777 663:0.0952005579930642 676:0.050858109777208 707:0.226435959346064 713:0.050858109777208 856:0.0381715052390195 880:0.239305794659597 894:0.161005143816479 930:0.0445303531260745 1056:0.0499435675503445 1225:0.0453675536768866 1244:0.14358471743306 1322:0.0571418558123071 1457:0.0673482655661396 1466:0.0621193345490342 1599:0.061629627320723 1709:0.0648644707677232 1795:0.0650169883950772 1822:0.0722998773371719 1904:0.0710640948415904 2098:0.0861609283147938 2210:0.0783513646419841 2264:0.0690828680446715 2280:0.138165736089343 2456:0.0717923587165298 2548:0.0708295477407438 2657:0.0819729015046675 2726:0.0848308534064449 3503:0.543104974459131 3518:0.0787558922121671 4124:0.0958339524822894 4163:0.102962638485272 4885:0.100811431219017 4976:0.0932896143177763 5357:0.0861609283147938 5504:0.0945038775739405 6261:0.189007755147881 7012:0.112635662652767 7198:0.354882057177965 7685:0.118294019059322
+0 6:0.011131584454907 18:0.0397247069818435 27:0.172866689175653 33:0.0205328553916594 51:0.050401487551094 52:0.0907541243388825 59:0.0230404069121219 77:0.0279795473604299 82:0.139158182891376 120:0.0618279239381381 123:0.263514358640367 142:0.0731267432756246 162:0.0200962366223921 168:0.110231920902434 179:0.242721761492531 189:0.0277665819601227 216:0.19369749641482 218:0.0210475288080707 286:0.0623730745983025 298:0.22070417101168 363:0.415952179812241 386:0.0295517169072533 442:0.0315754473820691 456:0.0402096567509049 457:0.0255859478463503 465:0.347070982025891 489:0.0845543520955787 655:0.0280960933456357 723:0.114245786459383 804:0.0349540500827544 856:0.0278479653918803 881:0.0422771760477893 967:0.142636639775492 1057:0.252750685767962 1086:0.280697852352504 1324:0.0885656360554629 1352:0.107890839176858 1376:0.0531305037330138 1471:0.429747785201 1659:0.052195809871353
+0 6:0.0160439952662489 51:0.108965785278464 63:0.0693581332392901 75:0.0325158811431205 86:0.124636136303617 106:0.112303653476767 120:0.133669235004754 122:0.172689012149194 123:0.16277325144019 137:0.131344418205596 142:0.0166417665598237 161:0.46971736137613 276:0.124636136303617 298:0.159050883065972 373:0.114533845030768 375:0.341211977659192 409:0.16387449669032 485:0.111029249235179 501:0.16683969120963 657:0.166637291775351 671:0.0979812391907998 867:0.141031938354542 1045:0.0833453470017258 1067:0.51195495043014 3217:0.278949303830184
+0 27:0.143462378528378 33:0.272644062220547 59:0.305940407016504 63:0.106496982127145 75:0.099853991196685 142:0.0383292737227615 146:0.442426193095425 225:0.469471927785377 239:0.417716647060848 647:0.445051282557457
+0 6:0.0318444744798563 15:0.0218204090893423 17:0.104114477458559 18:0.0681850327504158 38:0.207556617316601 41:0.0293264351288637 50:0.241813530671804 72:0.0792702668650394 111:0.0398295977127303 135:0.0580261321789654 138:0.160219390828158 142:0.00165154720417072 171:0.0550681515540663 185:0.0741752299772674 242:0.0446272768702056 246:0.131662668662589 271:0.0702906778053392 276:0.0494761086116474 296:0.0574320210109491 306:0.0499772207118465 309:0.0468707489301812 331:0.0497876157375672 367:0.0543598866073396 375:0.0451496689134001 382:0.0559399077081088 402:0.0485442839310977 411:0.0477153836246221 485:0.0440746589002692 495:0.140378745338584 504:0.0676550346813635 532:0.0736400826365672 575:0.199418081733194 591:0.334848246528484 613:0.0589039429434569 643:0.0518184048923165 670:0.0908623950483013 712:0.116970715943957 714:0.0659102287633952 738:0.0771741894789018 741:0.0771741894789018 747:0.0701893726692921 757:0.0605113432087416 906:0.074523488114418 953:0.0695935733589114 1068:0.0750490942622801 1093:0.16169824009995 1183:0.272587185144904 1215:0.0746534150105411 1296:0.0648368597672241 1448:0.0799434724787923 1473:0.0902150956020473 1480:0.0925940171957248 1639:0.0860007676712417 1651:0.0872958109341208 1707:0.0727991945840146 1820:0.0812249428578603 1851:0.0862522121104448 1956:0.0949274899028521 2154:0.0870290105299327 2206:0.0822014587314863 2347:0.118340163188523 2406:0.103308071216872 2575:0.0886945642166989 2640:0.0881215592092236 2643:0.277782051587174 2651:0.11179236255059 3119:0.206616142433743 3391:0.123905169854315 3795:0.109734093752034 4814:0.27203595431608 5281:0.1289324391069 5376:0.118340163188523 5559:0.13601797715804 7746:0.13601797715804
+0 11:0.190094612767668 18:0.226445581723701 27:0.246351080757641 142:0.0438789044817533 166:0.315639183219913 280:0.443156331973896 406:0.39664495419886 720:0.421171835436369 998:0.468234620950866
+0 6:0.0320452336441934 17:0.0349236176803932 18:0.17153724007176 21:0.0387711024123261 65:0.0458515641143359 119:0.0670568829727327 125:0.068708069710372 135:0.175175850145056 139:0.104863229630464 145:0.0537821059406553 162:0.104134274952153 166:0.0956412996639739 181:0.0540968392874485 183:0.0563827542580486 185:0.186607144101004 199:0.0299583002490585 215:0.0816597950949041 241:0.0846399842051721 256:0.0436155077583324 283:0.0960886254102431 288:0.13313219955905 294:0.0612469062793091 295:0.0544173084084907 325:0.0575508632807654 358:0.0848668938868844 382:0.112585146517328 409:0.032731227151463 411:0.048016198780123 414:0.047354606410441 424:0.0660103117841594 433:0.0518282269499917 459:0.0585446449846475 483:0.0622275230317112 502:0.0884776958517613 507:0.0342688415085251 569:0.0898498945271502 576:0.0627391302075915 634:0.072005593209528 651:0.0829229866891396 676:0.128174638781488 699:0.0955259473701771 706:0.0652456149436784 800:0.056518898858126 803:0.0800957483923224 809:0.0968291550574182 906:0.0749933113236783 912:0.0609513487953606 915:0.0794127399672109 991:0.0680815566588079 1034:0.0808063604826188 1067:0.0681697034916953 1080:0.0648022656717477 1093:0.0813588223466445 1098:0.0718960273950172 1099:0.0907838444195262 1160:0.0811727332414377 1190:0.0693577308951585 1237:0.0785946735672801 1406:0.108573105766266 1911:0.0867959774671779 1923:0.0951121575413856 1944:0.11484532608587 1992:0.0837605381396413 2039:0.119086222674738 2083:0.623431565846162 2146:0.197464237365808 2193:0.213794103644985 2213:0.0889630550386216 2398:0.093177763601293 2444:0.0907838444195262 2616:0.0850967697921578 3717:0.124686313169232 4049:0.132951447470758
+0 6:0.0246023278104308 17:0.0670304279911903 27:0.0358180390769348 37:0.0582026591880908 72:0.0765530411040256 86:0.28668100103635 87:0.114597983081159 96:0.0762151789015953 97:0.0767573938101313 122:0.529612682583053 140:0.26077763694113 142:0.00956961287046301 197:0.137164876964594 199:0.0575002769174848 208:0.0921595919471043 264:0.101263885280354 276:0.0955603336787832 313:0.41848060458857 369:0.109999417781952 390:0.112367299568635 436:0.108654532612628 485:0.0851277359815797 499:0.183249362701453 507:0.0657736874255246 560:0.146535545590267 585:0.152420347647539 671:0.0751236374058054 829:0.0912552248622481 882:0.0923759526379046 903:0.136960935847513 982:0.137784199885428 1013:0.152420347647539 1058:0.137993192207575 1822:0.174864729047327 4088:0.21012037312857
+0 6:0.00747700711963932 11:0.134396735314855 18:0.120072630414311 27:0.195941263548723 33:0.0413753243947997 41:0.103286661736651 51:0.0507814879525737 63:0.193938447660604 75:0.0303068494815506 76:0.0622052615688606 82:0.056082944622114 85:0.412391030184675 140:0.369852637293237 142:0.0911281515974398 146:0.469985261285107 153:0.129699999695968 169:0.054501611691895 194:0.0592399509901869 225:0.284980397492157 234:0.0536373578207609 239:0.380345604517952 446:0.0922584469803531 457:0.0515577045616947 541:0.0771012090766761 647:0.202617372681759 671:0.0456623435037934 764:0.0691525308482722 793:0.0897358204567184 1491:0.0858826712870182
+0 11:0.210536963463782 59:0.29092553060274 142:0.0485975440082377 303:0.418611164095472 343:0.496416062958329 409:0.239274419458627 506:0.262111109117705 614:0.566618130469492
+0 6:0.0300608656202143 17:0.0819025217383826 18:0.0804574867500455 27:0.0875300311228936 37:0.14223225786387 38:0.122457107623321 68:0.0922713922537811 72:0.0935379245077443 86:0.350287140079828 97:0.0937876171093836 100:0.0928793752853641 112:0.167348566341162 122:0.323559132383002 136:0.190365488756431 142:0.0194880506669303 197:0.335195512068392 208:0.112607113053794 239:0.127429753684707 276:0.233524760053219 291:0.12097819649409 377:0.231367316983756 390:0.137298320649437 431:0.167597756034196 448:0.272233111747813 485:0.104015093677859 507:0.160733894311121 560:0.179047502273594 746:0.221181185089299 1364:0.218519566865298 2972:0.256739945478217
+0 6:0.0150745462367808 11:0.158059996211395 13:0.0667922690439439 18:0.0268978748967042 27:0.043893463280101 37:0.04754990036146 40:0.0313962205958357 46:0.042075073425307 52:0.0409668317829325 72:0.0625416351699613 75:0.0101837093481068 83:0.0130197007445241 92:0.066342848687423 100:0.0310506569099159 126:0.0477414609572168 128:0.108024837833249 142:0.0117271481621935 144:0.0298737776842245 151:0.039683369050004 159:0.030229270251353 185:0.029260909262387 194:0.0398116236428603 199:0.0469760742262136 242:0.035209454679863 252:0.0725277888275135 255:0.0467688785994058 275:0.0337900833029333 292:0.148649445645459 303:0.0448958686550885 304:0.0380481197377967 310:0.103142153591033 319:0.0455834650068004 351:0.0356596912359411 355:0.18145282507495 370:0.0594233847435754 375:0.178108024162069 391:0.0520010042139386 394:0.0468116298563241 402:0.0765996890202148 414:0.0371271648791208 426:0.0904707616280848 433:0.0406345923496171 455:0.0733775483833701 485:0.0347734572645526 493:0.0448586560297735 507:0.026867606455767 508:0.0779727823259735 518:0.0438209918870769 526:0.0603060713520499 546:0.0434134567201121 580:0.0454664577757497 597:0.08986636398257 633:0.0522528334855298 671:0.0306869267080448 728:0.069304412897719 755:0.0524447707288319 758:0.0526394177637805 780:0.0509792576438886 806:0.053940422568638 854:0.060420489181401 961:0.0858311539846331 987:0.0410229918170363 1027:0.0525093482207065 1059:0.0460616841359231 1138:0.0495498152151529 1190:0.0543781504225211 1227:0.0549070420388173 1467:0.0617460504792803 1491:0.173149801590246 1652:0.0601925952439048 1808:0.0505234386322998 1846:0.0660107458224158 2012:0.159067405760271 2298:0.0702088202973096 2535:0.0844512763881011 3360:0.0704445058537243 4763:0.0910632795991659 5975:0.097757106607122 7648:0.778960445653892
+0 6:0.0105096119597397 18:0.140644147723789 27:0.214210286384727 36:0.0401495286660103 41:0.0967858501046391 57:0.0392311595725082 63:0.113582535786812 75:0.0212995134735609 76:0.131152709329178 79:0.0712711213638452 85:0.032202945150297 86:0.0408214228119284 122:0.0565599302817277 142:0.0872094542367497 144:0.0624818431615581 146:0.519048302564275 157:0.0532518190783663 162:0.313060572691364 225:0.200282903697398 232:0.373136484742112 234:0.0376960866976613 239:0.311855984518173 276:0.0408214228119284 314:0.083866205729642 347:0.0431676553674222 446:0.0648388093161602 541:0.216745490824601 582:0.0443217295409971 599:0.197083258971447 628:0.114202321276618 695:0.103744263439935 764:0.0972001569104204 856:0.157751833796442 867:0.0923829084613477 943:0.14110154897446 963:0.0445838864004976 1319:0.0554643479938751 1405:0.148868157376579 1511:0.0634279020235344
+0 6:0.0088755788795825 11:0.0398839002811764 27:0.0516871140956863 33:0.0982291308429498 41:0.0408687994533932 51:0.0602801488260958 67:0.100411522114675 75:0.017987867930378 82:0.0665732412485441 85:0.163176212936072 97:0.0553822637111727 100:0.0548459403695454 140:0.188157194273366 142:0.0483329042465617 157:0.0899444665553572 225:0.169142944269286 264:0.146128546596753 283:0.0665342452896895 289:0.0772206964413563 292:0.175043395603293 317:0.0529003724210502 328:0.270139726795363 336:0.0811465442959313 518:0.0774026622027901 573:0.112669898635367 588:0.121653892623196 729:0.0955319995756709 1215:0.104035674065747 1605:0.144923435230714 3683:0.139684834019386 4052:0.321696975187416 6815:0.718711834390064
+0 6:0.0330265084581927 11:0.0404754947516868 15:0.0102865273278307 17:0.06544187833297 18:0.128574528527746 20:0.0677457227431967 25:0.383068674238597 34:0.0239277053500381 36:0.0688200522700767 37:0.198881613826191 40:0.0187596337822459 41:0.0138250009496043 46:0.0502807633428693 47:0.0142106429190945 50:0.14249397670033 53:0.0231226248182017 56:0.13859292513868 63:0.0194691103719825 65:0.0214798228208138 67:0.0169834862676806 70:0.0345430086282716 72:0.0186847039176257 73:0.0326255790157197 74:0.049226493466725 75:0.00608489347729506 77:0.0679197667574604 78:0.0461320111763073 79:0.0407217922648507 83:0.0388971687175149 85:0.0183996213000797 86:0.023323913920432 91:0.0239905916519319 92:0.019820340184705 94:0.0180240318991918 96:0.0186022401104885 100:0.0556594654968229 106:0.0420321236573203 111:0.0187763778236686 112:0.033428776932771 113:0.0321447066025336 120:0.0500286646156311 122:0.129265356703948 131:0.0398648022824511 132:0.018209686303755 140:0.0212164570878465 141:0.0274260786009805 142:0.0163499406892993 144:0.017849955135129 145:0.0251949988806231 159:0.0180623663822499 160:0.0272133190286426 162:0.0162610648713348 164:0.0350708944496181 166:0.0448045385324642 176:0.0311256133839211 177:0.0313364052741186 178:0.0484615710087233 181:0.0253424402308912 185:0.122386310210695 186:0.0170375952670915 194:0.0237879421676545 197:0.167392769576481 204:0.0180240318991918 239:0.0254547792291201 242:0.0420761775100041 246:0.0931021710253602 276:0.023323913920432 286:0.0336465190415297 294:0.0286919916607866 296:0.135372359702969 299:0.0248550521797807 301:0.0544266380572853 306:0.047120294080328 309:0.0662871036613641 322:0.0260204544082161 324:0.0318118101771067 342:0.028047645215006 347:0.0246644680312911 348:0.0298280148974058 353:0.0336807251790676 355:0.0180700547314257 368:0.0365971366908889 372:0.0296378972550731 375:0.042568707233545 377:0.0231084334873125 384:0.0976081018301736 399:0.0283100261682263 402:0.0228846352615409 407:0.0433141654649288 430:0.0233676947083849 441:0.0635145049172221 458:0.0316103804467571 459:0.0274260786009805 465:0.02553053208974 478:0.0235451823393298 485:0.0623327245680115 505:0.0431940184569358 506:0.0167968554419306 507:0.0481611908838366 509:0.027868827469334 516:0.0420914717347357 517:0.0334785539152962 526:0.0360336305434325 550:0.0733843992345953 567:0.0325806848144561 572:0.0325360339433912 574:0.0224807276263543 577:0.0438238990963148 591:0.0631413576984457 597:0.026848137222584 607:0.0294520683484966 629:0.110011093266986 641:0.0475144061629052 643:0.0244281138738942 651:0.0388464624110504 654:0.0313749911317522 661:0.0400844970498553 671:0.0183358218288827 673:0.030357550759784 676:0.060045247841117 687:0.0675674046784579 689:0.0750440041642834 700:0.0371239504755959 706:0.0305652440848157 712:0.0275710336407286 726:0.0276691070078696 744:0.0370465971791536 751:0.0378548985075686 758:0.0314527093076341 800:0.0264770887743929 803:0.0375220020821417 822:0.0401965813032586 861:0.0400844970498553 862:0.0288898277849832 904:0.109791410072667 912:0.114214134073967 944:0.0328537948712583 953:0.0656152862457091 971:0.0748816764365721 981:0.0356349366677136 984:0.0688603133011463 986:0.026848137222584 1001:0.0351929420973548 1019:0.0863020602466421 1041:0.0428341423806309 1042:0.0342089872451011 1045:0.0155969188133471 1095:0.0423805563273636 1116:0.0350105420511622 1138:0.0296066332116903 1162:0.0348320932208995 1170:0.0399739173285618 1172:0.136724982562458 1183:0.0856682847612618 1189:0.0409031340023898 1216:0.0321447066025336 1225:0.0267814318739648 1246:0.0422347460511191 1250:0.0405422851259344 1251:0.0394422447613229 1261:0.0443672651581273 1277:0.0354425995528287 1288:0.0394422447613229 1296:0.0611304881696313 1313:0.0392388254003529 1321:0.139328372883598 1328:0.0447505000960316 1333:0.0426801553637211 1342:0.0859821253185856 1351:0.0797296045649021 1406:0.0508626285713929 1424:0.0279195234172842 1439:0.035379472304896 1441:0.039138968837806 1455:0.0398648022824511 1465:0.0475223804350259 1472:0.0305302628622157 1480:0.0873009194628402 1507:0.0411527914578637 1565:0.0451524366663579 1567:0.044001068624526 1594:0.052700899772822 1614:0.0379402678263851 1639:0.0810845702518689 1651:0.0411527914578637 1698:0.0434805966919751 1714:0.0462524770309694 1730:0.0423805563273636 1736:0.0429910626592928 1793:0.0475223804350259 1798:0.046491278259688 1820:0.0382908767194911 1824:0.0425289939566981 1855:0.0388464624110504 1865:0.0356349366677136 1878:0.0557876489681972 1890:0.049711260529561 1934:0.051285186092521 1951:0.0374408382182861 1979:0.0443672651581273 1989:0.0487012545643278 1995:0.0388464624110504 2056:0.0782779376756119 2060:0.0565728204764279 2086:0.0447505000960316 2099:0.0436504597314201 2154:0.0410270170217603 2204:0.0447505000960316 2207:0.0434805966919751 2222:0.0557876489681972 2246:0.0380265310810219 2308:0.0447505000960316 2314:0.049711260529561 2425:0.0475223804350259 2480:0.0500774570631622 2492:0.0574407873101581 2569:0.0451524366663579 2607:0.105401799545644 2643:0.0436504597314201 2672:0.0472522557254367 2825:0.0405422851259344 2891:0.0565728204764279 2919:0.0622830123814628 2973:0.0508626285713929 3152:0.0550708435414901 3169:0.0504606920010666 3239:0.058411091677857 3243:0.058411091677857 3273:0.0504606920010666 3306:0.0595111320424685 3398:0.052201470164723 3625:0.0595111320424685 3739:0.0462524770309694 3742:0.0538009401374335 4003:0.0550708435414901 4059:0.060781035446525 4200:0.060781035446525 4476:0.060781035446525 4831:0.060781035446525 4992:0.060781035446525 5006:0.060781035446525 5048:0.0544114464693628 5219:0.156604410494169 5259:0.0622830123814628 5319:0.058411091677857 5647:0.0622830123814628 5914:0.06649122735156 6142:0.0508626285713929 6314:0.113145640952856 6481:0.064121283582892 6827:0.069831475487927 6870:0.209494426463781 6955:0.06649122735156 7727:0.139662950975854 7952:0.128242567165784
+0 6:0.0117195701411632 18:0.250938125671218 21:0.0708967609998704 27:0.272996620167357 37:0.055450862374726 47:0.110939301571881 126:0.222697011853482 140:0.662528485039286 142:0.0972497671479641 159:0.141008842639325 199:0.0547816884372268 298:0.116181035282829 301:0.212448277229865 304:0.0887405035619249 324:0.24834766610337 331:0.0916154944191015 496:0.0982746310757306 1544:0.153558915544948 3338:0.214962861084141 4454:0.22082565958973 5528:0.237251954737138
+0 6:0.023962574990057 11:0.179466407083636 18:0.0855139961311486 25:0.0599473472735757 27:0.162804299873273 38:0.0650765829913672 51:0.108497530602764 82:0.119824393608036 87:0.14882400746525 100:0.049358281370948 138:0.0669795105795196 140:0.112887306691403 142:0.0745661362782304 162:0.129781410463016 175:0.0773190815652686 185:0.0930265789050958 237:0.0686410138860356 289:0.0694943114646539 291:0.192871964651751 301:0.289590130770434 343:0.0846312265286008 347:0.0656166426727207 351:0.0566848256618567 412:0.162816715564936 453:0.0774750702171656 501:0.0830613685594666 588:0.218963409926363 601:0.323572594333154 729:0.17194692198599 796:0.0702129434871936 829:0.11850966222088 1747:0.120122246252394 2619:0.412867772737529 2927:0.127170173637361 3180:0.165695938093223 3273:0.134244176353269 4052:0.289509300241668 5353:0.146508891161278 5698:0.155395191410047 5835:0.165695938093223 8137:0.176891352388497
+0 6:0.00923800935213565 11:0.207562711568445 27:0.0806966029842742 37:0.0874188351674243 38:0.0752646260924044 75:0.149779158673765 76:0.0768559904959538 100:0.0570855509183834 128:0.0992999503757796 142:0.0383288059026344 146:0.331815594864622 173:0.0690491702804523 184:0.108857854618203 219:0.154484278408542 257:0.111940280974108 265:0.261812155483453 303:0.660315922737636 317:0.11012107306743 352:0.392567899371071 385:0.0966558894382441 483:0.0896948429382649 500:0.0956020345229438 530:0.0759419868219409 611:0.119525314598556 862:0.0888900955294183 987:0.0754193412071742
+0 27:0.238120580632369 42:0.244636812288194 51:0.092569455593275 59:0.084633927613367 77:0.102776786668275 82:0.102233468554239 83:0.0353157220832842 106:0.19081013433553 120:0.227111442042811 123:0.13828038987155 125:0.146118226155043 137:0.223161449393242 142:0.0459473367397241 162:0.0738191578858705 181:0.11504520838086 186:0.232032947098209 207:0.322369888837085 234:0.195550828190252 298:0.135118134737625 351:0.0967263203644585 409:0.278431856485561 457:0.0939844190342025 704:0.187987069216657 805:0.17767629260377 829:0.101111747459903 989:0.329672804853001 1045:0.212412548906042 1051:0.219674093514098 5514:0.239242391063535
+0 6:0.0346806016872953 29:0.0503812736878947 31:0.0264367768012148 37:0.0328180854429195 41:0.223568107986536 42:0.0829959857627895 63:0.0299848230160761 114:0.0487040463938994 142:0.00899318511157127 162:0.0375660579428615 168:0.10302871143445 202:0.172251370005121 255:0.193674229675845 264:0.0570985395817218 283:0.0519954290477798 286:0.194324156180852 314:0.0553499118155169 324:0.0734911467260142 337:0.0530277903507518 381:0.200024585108435 383:0.415438459119597 406:0.0650353793251954 415:0.0603467165721183 430:0.0539836831321998 448:0.062813947102509 454:0.0692067525479793 601:0.0936601535156317 607:0.0680397080308752 613:0.0641500359607259 653:0.07085586800528 667:0.0668070250830986 671:0.0423591290425281 695:0.0684690070667714 720:0.0690568978345313 758:0.0726615575092758 793:0.083244330158996 858:0.0695866344275625 1080:0.070131539346832 1196:0.0870633845218589 1229:0.0782874888334901 1232:0.0785314851278526 1292:0.083244330158996 1322:0.0779272613544996 1406:0.117502049660192 1565:0.104310453558295 1612:0.101241286825955 1730:0.0979068989172391 2285:0.280980460546895 3084:0.12297705671782 3313:0.125700473308253 3370:0.117502049660192 4179:0.13069364576209 5708:0.296263974531189 5736:0.124290091121034 5967:0.431655725591961
+0 6:0.03028900455211 15:0.0345909549998522 31:0.0384818223981607 42:0.0604051849417812 63:0.0218232094370124 75:0.0204619372256503 142:0.00261812667148868 180:0.0778032651683517 186:0.0572930662027361 199:0.0943881496483368 245:0.116738452255281 283:0.0756854317444965 289:0.0878417080456528 347:0.0829402845659486 355:0.121529925530549 383:0.120943858787439 430:0.0785795682398181 502:0.0696905859742369 508:0.0783346285094032 599:0.0946666053735485 610:0.519975318669843 781:0.109410343271489 884:0.104235073949921 1027:0.10550605386746 1061:0.13095470644288 1182:0.151152024910446 1190:0.109261003270822 1407:0.123066790963841 2017:0.151836072085665 2380:0.156338253223269 2589:0.163769837126003 2708:0.471495765076552 2936:0.196421530738993 2979:0.312676506446539 3103:0.145654437178215 3751:0.162724335575528 4556:0.179007497443721
+0 6:0.00527749409239344 18:0.141251391884956 27:0.169034767925047 48:0.193714823678253 51:0.0716861702508541 53:0.0812877132540239 56:0.0974448363564774 59:0.0327704322392658 68:0.0323983835774039 72:0.0656861782013909 75:0.0534786902495474 82:0.118755032939508 83:0.0957202456630117 114:0.0370575054373438 120:0.0439690106089936 123:0.107084907296425 125:0.0565772801069824 142:0.057478305379321 168:0.0391957888191289 186:0.0598957587859683 234:0.037858843050602 236:0.65510084650552 294:0.0504334263334351 298:0.104636043808417 317:0.0943650234171445 336:0.0965008398776272 409:0.107809392090318 434:0.0456667151213172 456:0.0571903021047086 457:0.0727819238066568 465:0.0448763621788256 502:0.0364282347221132 506:0.206673028176434 518:0.0460242760560047 535:0.0500459655696175 607:0.0517694531973274 609:0.149490957061368 659:0.0773429979801764 671:0.064459681321725 723:0.0541640289900018 778:0.0504334263334351 851:0.0599404049100434 944:0.057748847239417 1051:0.255174793344539 1306:0.0755676572493503 1380:0.0543558262589037 1581:0.0752918302029855 1606:0.0835325933868493 1988:0.0830577809443053 2513:0.193601849861525 3456:0.102672255172054 3726:0.218956268627245 4285:0.218956268627245 4423:0.116875135616244
+0 6:0.0213805310701846 18:0.114449385258657 27:0.155637446842084 51:0.0726049315981247 82:0.240554098882227 83:0.0553983075683445 106:0.224486954085532 123:0.108457354357772 125:0.114604798604832 142:0.0693035387014024 173:0.159808014289397 236:0.442331270536246 286:0.0599002534093022 298:0.105977105163014 367:0.0912437136712001 532:0.123605751118459 609:0.151406898624906 637:0.18109952692159 667:0.205932078165047 704:0.29488751369083 865:0.475940149643996 910:0.171230075967625 960:0.123195504702332 986:0.095594448936337 1037:0.119560170089389 1045:0.166601374989904 1051:0.172296816819886 1312:0.139005425846967
+0 6:0.0288078038952702 9:0.22037407071063 17:0.117732726723986 20:0.0406258136513246 37:0.0340758566626954 41:0.0331623541422421 47:0.034087402582453 57:0.0537680913376395 65:0.257620774816956 69:0.0730668986912016 83:0.0186607102428834 84:0.0422679125428076 94:0.0432346681993665 117:0.0743533077537821 138:0.181176203508904 142:0.0149405662233891 150:0.0628071910565542 151:0.0568768718908524 175:0.0697147407995244 176:0.0373308695491138 199:0.100993900706847 205:0.0569869604268525 214:0.0617024092253746 218:0.0408522087425527 220:0.0577752466411498 242:0.0504645570956919 248:0.175224609950513 254:0.139011258837018 261:0.198041084340099 262:0.0674028270648469 284:0.087472761636527 329:0.0966930503178107 338:0.0943655584655719 348:0.071549159164156 357:0.0666685937095334 364:0.0667287485234238 379:0.0879620635059085 398:0.0560175695034636 416:0.280273014583868 431:0.0803057927559113 433:0.058240229061548 434:0.0623192442627371 503:0.0978225486514033 526:0.0864347150114463 561:0.0638207896965977 657:0.0748014185905701 661:0.0961516235424932 674:0.0953663212226678 727:0.0771062619118447 728:0.0993317429497307 796:0.0633074922372088 806:0.0773110392998387 856:0.0540515186185773 902:0.0993317429497307 1011:0.0864347150114463 1027:0.0752599273528914 1041:0.102747262310052 1046:0.161827733226604 1061:0.0934130443907166 1108:0.125216891243525 1200:0.102747262310052 1204:0.110946901837344 1218:0.0876123049752564 1286:0.13381914247893 1395:0.0769035848417677 1603:0.104297927433889 1652:0.0862720734258109 1668:0.116820841960228 1726:0.291749191623848 1849:0.0890500910139908 2088:0.116820841960228 2399:0.10470538189196 2547:0.113993048927335 3242:0.127690220223396 3943:0.142750748690152 4785:0.110946901837344 4932:0.135702551797545 4972:0.159494067076204 5257:0.167506398650354 5375:0.149399723093606 7568:0.145796895780143
+0 2:0.115103063441024 6:0.014097897450312 15:0.0483006698477617 41:0.129831338649182 65:0.201718188732084 142:0.0219347407979458 229:0.0738288047270003 286:0.0789940742856159 351:0.100048119974743 370:0.166720398300545 406:0.132186591893044 452:0.198999059050198 598:0.297984231760292 601:0.190367406446636 709:0.12294576037472 720:0.140360463276584 948:0.225811421005068 1244:0.198999059050198 1624:0.178554614659001 2683:0.199696051990476 5665:0.62442274593314 6648:0.327895599265931
+0 6:0.0264610133839141 10:0.0743952541143799 14:0.0894861309672837 17:0.0480630143584049 22:0.0940618156584921 52:0.14382175981653 63:0.114390864711171 75:0.107255474941191 98:0.0572147291378364 116:0.0944331999227426 142:0.0274469046122092 229:0.138572790509006 279:0.0998647936659073 286:0.0988451535315211 310:0.36209990851451 375:0.125056336346253 402:0.0672293999610436 448:0.0798775402823559 457:0.060820641584762 522:0.24566774290289 563:0.270393133027169 619:0.387792779845128 658:0.0815765816022536 824:0.098646856199319 954:0.120527231701168 1115:0.124075240967271 1223:0.108385555523361 1305:0.240665414917867 1319:0.0930984486847692 1726:0.238206418491338 1840:0.156384135290089 1845:0.139609003370767 1896:0.319694751988929 3091:0.32356904310072
+0 6:0.0107105639936379 9:0.327734886764099 12:0.0722022283332651 19:0.0650190983847564 27:0.0467798904172169 34:0.128036759471533 35:0.116225807252336 48:0.0655233645362311 51:0.072742792364016 75:0.0542669422443586 82:0.120505429053767 83:0.111006993493705 84:0.0314298989130206 98:0.0347380129920866 119:0.168094507657807 124:0.185760676803128 142:0.0374949706588258 145:0.0449393421332083 162:0.0580084612161044 168:0.0397735172298417 173:0.0800557272466296 176:0.0555175491609868 179:0.0291926878159772 196:0.0497989708588718 203:0.0811971458935609 214:0.18352460464465 217:0.266004140987969 218:0.030377199012411 242:0.0375248227979464 286:0.0600139907909143 317:0.0319186405636219 331:0.0418638910798469 351:0.0380046668380659 363:0.100054993478676 369:0.0478879808648433 396:0.0543935147065879 423:0.0405743455415593 459:0.048918832481855 485:0.0741203085244361 494:0.0907216975080728 518:0.0934053066339171 552:0.625113589976194 609:0.0379235967403475 720:0.0533178698951046 723:0.109924765143143 771:0.0568144145812247 778:0.102353584998084 808:0.11178706095689 829:0.0397277417475323 944:0.0586000394399385 963:0.045436365320327 1263:0.0727396417415654 1269:0.0547068297313686 1471:0.248096279905084 1835:0.072105273390983 2267:0.0940005505394251 2640:0.0740969677272094 3027:0.0914753969665611 4984:0.114370646119306 6323:0.106147697654706
+0 6:0.00663654465890766 11:0.0894672749727951 17:0.144653118126691 18:0.0355252380757186 25:0.0996161508174838 27:0.0193240263897138 37:0.0314006503730253 46:0.111140899139993 48:0.0405999847631632 72:0.0413007809648532 74:0.0544052673593378 83:0.034391413477836 85:0.040670632646953 132:0.0402507991984087 140:0.140690949810892 142:0.0189304795437541 144:0.0394556472780383 151:0.05241161759291 234:0.0476081826414606 237:0.0570313275108867 252:0.0478953630184101 292:0.0654426786088538 295:0.0563489256281236 299:0.0549397555600957 342:0.0619966822440327 364:0.0614900491851001 367:0.113288669703427 461:0.0726202241054551 475:0.0537766547335495 480:0.0976255494576151 496:0.166952534124352 502:0.0458091666889641 646:0.604064510282657 651:0.0858664521723965 657:0.137857910122047 688:0.147346175602071 698:0.074561530793014 724:0.0776553020715983 853:0.0702270914362143 1005:0.139919910135524 1019:0.095381294313682 1078:0.0842467656648649 1215:0.155581378166822 1327:0.172589860080759 1436:0.0891019320977139 1662:0.183066935759378 1849:0.0820590015181507 2311:0.0984882944117406 2626:0.103868540897783 2787:0.125048899750391 3000:0.111538614519068 3475:0.10764954351658 6076:0.129112225376472 6170:0.146972605455125 7205:0.29394521091025 7227:0.268701526431562
+0 18:0.0587459620033744 51:0.0745350714340929 72:0.0682966319352915 76:0.091302437198012 91:0.0876907985904049 92:0.144895255969256 111:0.0686317198792421 144:0.0652454446856595 157:0.111214344529002 162:0.0594377072973481 185:0.0639069171937815 224:0.104369337494551 293:0.103871608635139 295:0.186361697946975 384:0.118926237454037 398:0.0853605383090743 424:0.226063988570697 439:0.236564215715727 481:0.12647055153461 502:0.151503759664062 625:0.12200855320818 729:0.11812320558724 863:0.115982371563338 882:0.0824130086277021 974:0.140959708135029 990:0.147763689798366 1145:0.144169930925405 1736:0.157141627498793 2478:0.183043930927472 3458:0.189086508930141 4189:0.341669203839518 5181:0.611747750177948
+0 6:0.0115697225831872 11:0.0519904862600261 13:0.0768946552090436 21:0.0699902681527543 25:0.260496528464465 59:0.0718418255523786 77:0.0872424592225834 91:0.184894470093811 92:0.152754519300694 118:0.0757601234875827 132:0.140341278304247 157:0.117246721600562 186:0.0656540112533666 220:0.0928142357874171 242:0.0810698278845791 258:0.109714559203915 275:0.233405168794711 283:0.0867304285982127 292:0.114088531836948 295:0.196470142486871 299:0.0957784153181673 306:0.0907885258839086 308:0.085485358803757 309:0.0851453150422442 327:0.0973002636391134 348:0.114941621457719 377:0.0890478573084851 411:0.0866796768520139 424:0.357488887482711 429:0.264069075391589 496:0.0970180821323553 508:0.0897662304106014 517:0.129008895976463 626:0.109194986059297 951:0.150821184576779 963:0.0981621775019107 1042:0.131823605288608 1055:0.126246701499265 1067:0.123061133948068 1068:0.136334044589635 1083:0.124033002006108 1159:0.235295438129788 1237:0.141880471178021 1321:0.134224730923171 1497:0.140469340618743 1538:0.147209884816498 1808:0.116330301372153 3222:0.207320779361825 3714:0.209673352536524
+0 111:0.180955952112723 142:0.00750339732139192 277:0.262041755277887 290:0.300897020186888 401:0.441342926700814 1929:0.400358566595968 4060:0.672995678560815
+0 6:0.00883456763388141 46:0.221926131927274 47:0.0418147061362728 76:0.0734995408884795 91:0.0705921291297054 92:0.0583211966596379 106:0.0618395982863218 158:0.0634105142884743 168:0.0656140663018503 199:0.0412960992397682 224:0.0840185500420719 275:0.118817815782427 284:0.053651019814611 290:0.183739338181938 295:0.0750116845654061 307:0.169680677394711 309:0.130032857579828 353:0.0991052715797195 382:0.07759664842216 424:0.0909920911274782 430:0.0687592597235928 439:0.0952184945952774 481:0.101810288519976 493:0.157738809952274 502:0.0609811584439806 625:0.0982183271386329 631:0.0592920862496112 668:0.3823547838262 819:0.0887307502036902 882:0.0663434458407458 913:0.0922071285137827 1054:0.115459938201925 1067:0.0939687104119698 1215:0.207109916173382 1449:0.113203385041083 2479:0.149662888522338 2565:0.142388220040094 3458:0.152216874172044 4060:0.410957145741309 5181:0.49246416807172
+0 6:0.0335903442462883 11:0.0754719189872361 18:0.0899040869703985 53:0.194018379513565 78:0.0645144320948313 79:0.0569483799830474 94:0.100824581663388 96:0.0520295094802293 106:0.0587808447615313 118:0.0549885403429479 135:0.0765092605157064 148:0.0738175136621993 203:0.0636623823918354 290:0.261976641510168 295:0.071301404082946 306:0.0658965203384645 351:0.0595948935468956 353:0.18840651444094 424:0.0864913765824778 442:0.0714608610924245 499:0.0625490525071879 502:0.0579648656719496 515:0.0606713351664239 564:0.104052185367782 678:0.0908774017213302 791:0.111804992208204 798:0.394291784102581 863:0.0887489868619775 876:0.0810446373389113 882:0.0630619198535853 890:0.0881910553432341 1011:0.100784212591123 1142:0.139039840666212 1206:0.129365800993508 1215:0.0984328502167362 1360:0.124092960280363 1465:0.132917655544782 1595:0.105176381296446 1682:0.2354553660905 3178:0.15403031888136 4060:0.585945143327484 5368:0.170001432150102
+0 6:0.0178550731911507 11:0.0802347619609524 17:0.0648628702692341 25:0.0893363316445878 33:0.0329347216765517 37:0.0844808465061065 51:0.0404220195612384 63:0.0128645694213322 74:0.0487909537574023 75:0.0120621127105105 79:0.16144599733929 80:0.038752050279181 81:0.036237321649594 83:0.0154212077809117 91:0.0475566616863886 92:0.0392899527593454 94:0.214374734818726 132:0.0360971460615564 142:0.00463008052272331 175:0.0576122499770268 176:0.0308502242661712 208:0.0445897172051193 216:0.155345494140535 218:0.033760258378608 317:0.0354733677743473 337:0.0455016652832236 408:0.105138351415262 411:0.0445897172051193 448:0.0538988929629415 475:0.0482272103728954 478:0.046673724729322 551:0.0879494365827967 571:0.0469728238547419 603:0.063720601771062 628:0.0646738373977609 657:0.123631759282265 696:0.0656861835200441 749:0.0692827939956375 804:0.0560663331516666 845:0.241806402097296 867:0.0523173008514383 871:0.0683625304949205 888:0.35641058630679 1114:0.0728382959391709 1193:0.0725466746944097 1225:0.0530889572706576 1410:0.164175471065158 1535:0.176649727187267 1576:0.0659735285711814 1690:0.0777833065399029 1877:0.0965407239896862 1921:0.179838669070499 1988:0.093668366835478 2067:0.0742191481658793 2247:0.0978478498801653 2402:0.082087735532579 2438:0.104469239334602 2566:0.100825225761174 2917:0.227730280998636 3045:0.213299708956493 3274:0.323580192079442 4029:0.107860064026481 4364:0.113865140499318 5497:0.115788579371396 5529:0.240973059907509 5824:0.115788579371396 6108:0.227730280998636 6988:0.235938389030082
+0 6:0.0516232155397211 10:0.0256127461441753 11:0.0955201740243617 18:0.0812757735228096 34:0.0242006597508065 37:0.0143678820265601 40:0.0569209008016908 46:0.0762815088954819 47:0.0143727502948654 48:0.0185771881928402 50:0.0576477885566833 51:0.0206240407980239 53:0.0701591858790538 56:0.0280347837461551 57:0.0453419910043375 58:0.0407403006294899 74:0.0497880428434652 78:0.163303911268597 83:0.0236045320259042 85:0.0186095142895184 86:0.0235899805931275 91:0.0485285268516579 92:0.0200464399715002 94:0.0729185614665434 96:0.0376288889328053 98:0.0196978470005911 100:0.0187647995868552 106:0.021255801765233 109:0.0334179460223381 111:0.0189905686490104 112:0.033810114451042 114:0.0213228158608087 118:0.0198844626617913 128:0.0326412487540015 132:0.0184174126168514 136:0.0384603173071843 138:0.0254639557444176 139:0.0745276078134744 142:0.00708705086746951 158:0.0217957645084737 160:0.0825712618324195 161:0.0296345927907704 166:0.0226578223121244 176:0.0157403388252234 177:0.0633877482824414 185:0.0353664078432106 186:0.0172319509956761 190:0.0260361742037467 194:0.0481186044503303 199:0.0141944922580789 203:0.0920840784451539 204:0.0364592807332717 215:0.0386910912713532 218:0.017225090525163 219:0.025390545216957 227:0.021584815495143 240:0.0273370337276023 242:0.0212780799629105 246:0.0313880768490621 249:0.0346545875853703 252:0.0219153080363885 258:0.086389050948526 275:0.0408406265311701 280:0.0318115049086336 286:0.0510455106671016 288:0.0630791453530924 290:0.0947336429350865 292:0.029944369768909 295:0.0257833741062825 303:0.0271318568246288 306:0.023828908533307 331:0.0237385057552972 341:0.0761168796094736 353:0.0681298735750051 355:0.0731047528104047 357:0.0281104154996606 359:0.067620228902084 367:0.0518370868726677 376:0.0387276784586034 384:0.0329071875295157 389:0.0258796993521455 390:0.0554778811266285 394:0.0282896060826157 396:0.0308433050203202 404:0.0255009049888612 414:0.0224370070561163 423:0.0230072817005629 424:0.031276235693748 432:0.0285258057378705 454:0.0302989782198046 459:0.0277389405633142 478:0.071441319369629 484:0.0335628547351085 500:0.0314256933507309 506:0.0509653948199838 507:0.0324737252408957 510:0.0549064851967098 526:0.0728893656630127 540:0.0343277989966052 556:0.037547440547376 574:0.0454743513660903 591:0.0319308201833406 597:0.0271544063403339 599:0.0284727352338159 609:0.0215042007864311 613:0.0280851285577403 614:0.0367247778098698 615:0.0806391170367061 616:0.0418826378547584 656:0.0599519809113866 661:0.0405417594455713 681:0.0332285733032418 706:0.0309139159595927 716:0.0290759752482243 719:0.0326849866022975 758:0.0636230098172672 761:0.0308785356900088 763:0.0351701359840259 768:0.0379500329126845 780:0.0308082226907326 800:0.0267791251708957 803:0.0379500329126845 839:0.0966939186474683 858:0.0304652919445761 863:0.0641852249404223 867:0.0266932270805496 885:0.0425716286188473 906:0.0355324557181813 909:0.0267360654318171 928:0.0489423583391238 930:0.0265870849958869 944:0.0332285733032418 973:0.0829900623573655 984:0.034822917370393 1000:0.0368684372474346 1015:0.0379500329126845 1020:0.0776374798440271 1021:0.0325113961367039 1027:0.0317329001655771 1028:0.0738824132534615 1042:0.0345992249832285 1044:0.0443238185805351 1059:0.0278363924457779 1095:0.0428640109331161 1104:0.493607213773356 1106:0.0389108076098036 1116:0.0354099234956572 1145:0.0797843613763227 1162:0.0352294390170605 1164:0.096648157115727 1167:0.0388187399220135 1169:0.102664970735827 1184:0.119990962850488 1225:0.0270869400529538 1236:0.0334659694461623 1239:0.0406551222958887 1249:0.0458784604063789 1268:0.0411246572718679 1269:0.0620419344181471 1283:0.0376264178303251 1318:0.0402106413992042 1360:0.0448733830703051 1366:0.0329071875295157 1377:0.0289629966905513 1393:0.0347664287406844 1439:0.0357830623074145 1468:0.0425716286188473 1474:0.0467801004268342 1482:0.0359760911944432 1500:0.0346545875853703 1502:0.0434814815931144 1510:0.0465453795258592 1578:0.084858394199565 1591:0.0360414408703633 1593:0.0460948892232399 1652:0.0363761059755185 1682:0.0425716286188473 1728:0.0492568122980012 1739:0.0489423583391238 1748:0.0483469593237341 1771:0.0433227712522629 1792:0.0358469096770588 1918:0.0439765999669021 1956:0.0452609897463807 1985:0.0427165373316176 2050:0.0781961047308364 2093:0.0514428420979351 2200:0.0438082701818795 2207:0.0439765999669021 2253:0.0450649326779748 2285:0.0410047697219474 2307:0.0851432572376945 2308:0.0452609897463807 2335:0.0897467661406101 2479:0.10288568419587 2520:0.0564240444800788 2605:0.0441484007125946 2710:0.177232242041972 2803:0.313924261384476 2845:0.0499237314174815 2932:0.0518702199281268 3083:0.0572181728028219 3536:0.0572181728028219 3543:0.0564240444800788 3728:0.0523207102307461 3875:0.0672497235321421 3934:0.0580960409356329 4060:0.282512301695058 4193:0.0590774140139906 4212:0.0499237314174815 4386:0.0648527447188775 4393:0.0564240444800788 4418:0.0556990621223684 4499:0.0672497235321421 4821:0.0590774140139906 4867:0.0518702199281268 6078:0.129705489437755 6328:0.0601900030477767 6553:0.0706280754237644 7748:0.0648527447188775
+0 6:0.0355731922562082 18:0.0476055759799224 25:0.0667452843871365 86:0.138173352871979 111:0.0556166320870929 148:0.234524950336363 157:0.270372094420476 185:0.0517878250412586 216:0.309499438620941 246:0.183849062584722 276:0.138173352871979 284:0.108015362024474 309:0.0654486449423316 333:0.26915704963153 380:0.437128406439525 398:0.0691730538334924 441:0.0627111165129719 475:0.0720633769549272 625:0.0988712628387765 721:0.235525379994569 876:0.0858287263819971 1283:0.220388833625945 1288:0.116830031658947 1296:0.181071764840024 1911:0.240879035848824 1932:0.114783190135767 2013:0.139963700488285 2728:0.163122774410303 2729:0.163122774410303 3110:0.151909455232113 4978:0.153228781360922 5373:0.19695056007924
+0 6:0.0116251705410977 11:0.208958603783878 27:0.101549125576774 37:0.110008425905141 38:0.18942698165463 74:0.0953011761229402 75:0.141362294357451 100:0.0718368253984613 128:0.124959697900079 142:0.0422040644511557 146:0.104389721082206 173:0.0868919211524699 184:0.136987426233993 219:0.0972020060795097 234:0.0833947891265755 257:0.140866371437647 265:0.109822034928766 303:0.623209361472395 352:0.494009976087991 419:0.141421121934704 431:0.129627171806566 499:0.0865895743429878 530:0.0955658859374026 669:0.175635392987195 698:0.130608706160167 714:0.120306216744433 862:0.111859869432267
+0 6:0.0248611853379225 18:0.066540615136886 94:0.0746231891216471 132:0.0753918364376568 148:0.327806861677523 157:0.377912148067996 185:0.0723863468493715 204:0.0746231891216471 275:0.083590727413908 291:0.100052387142994 353:0.139445110774825 382:0.109181611255455 430:0.0967470492348001 534:0.0947470840405276 591:0.130709086160127 616:0.17144693711398 720:0.247521128872916 780:0.252227447400448 1044:0.181439931342937 1104:0.367379156586341 1249:0.187803870984813 1382:0.162875285256599 2366:0.377379648404111 2426:0.189599405602529 2459:0.179329529553298 4611:0.210581715142067
+0 6:0.0138437937363633 11:0.0622094058748608 27:0.0806196143459003 33:0.153214099580625 37:0.131003149769619 38:0.225578459503698 41:0.0637456145184063 72:0.0861531899827913 75:0.0561135981694553 118:0.0906510519558708 142:0.0323090760523977 154:0.100074482148756 162:0.149956094285343 199:0.129422220460284 225:0.131911397791292 239:0.117369289904973 276:0.107544095747415 289:0.120445934650152 317:0.0825120089979158 349:0.274478717079123 400:0.243969543612802 409:0.141401483432472 441:0.097619550781937 480:0.10182316548389 558:0.153681634624364 655:0.104825109844035 705:0.474721462886122 732:0.302970734101826 827:0.118248608044225 966:0.414840313174072 1045:0.0719157400404347 1475:0.207255156117182
+0 6:0.0366404545115266 11:0.109766679546311 18:0.0653784429812389 27:0.142250954636262 38:0.29851995203147 41:0.0562386374128045 51:0.0829501594948178 53:0.282181155268647 59:0.151678493714976 74:0.10012407692667 83:0.0632918225716756 100:0.0754722672371299 138:0.204832720324216 139:0.399668006571391 142:0.0285042104775515 168:0.0907091820554663 190:0.104717830224744 286:0.0684352352479864 319:0.110795963594862 328:0.123911071112359 347:0.200664879466962 348:0.121337200675342 363:0.114094845655316 385:0.127787837734197 386:0.0972717175586281 423:0.0925355853052211 465:0.103855496457811 495:0.134600563022249 498:0.125496860916583 506:0.068327826256031 507:0.0653048719817624 549:0.130417545301825 558:0.135583377647902 574:0.0914492154006505 609:0.0864901743800836 808:0.127473172729315 829:0.0906047845355163 1319:0.128913032340691 1379:0.128913032340691 1442:0.183675322934181 1471:0.141454742933253 1495:0.183675322934181 1718:0.173618344835715 1806:0.167924760215597 2554:0.185394242108465 3160:0.203709783499948
+0 6:0.028811238850013 11:0.258936254831668 17:0.0523318954735654 27:0.16778283533758 38:0.234733159130639 47:0.0454552894139378 51:0.130451267033276 63:0.0207584801435748 83:0.0248839137188041 86:0.22381716229625 106:0.201670926122426 118:0.125773284387368 138:0.241597075209685 139:0.0785670548547266 142:0.0647501733275508 162:0.0520139316787816 179:0.0523518961802313 211:0.191025973513813 234:0.13778763817575 308:0.0709593243043178 328:0.194868295908068 404:0.0806492141591103 408:0.0565509892247884 465:0.0816639846372909 498:0.0986810912418428 521:0.0947021249405542 561:0.0851045326574174 607:0.0942077215113993 631:0.0644543317283843 847:0.102416237741301 960:0.221348733859811 1037:0.107408514349992 1045:0.299337248566187 1055:0.10479432688119 1120:0.154785202363133 1223:0.118012189585045 1511:0.115921592662401 1808:0.289688890483648 1948:0.144428164728284 2040:0.261672016474 2171:0.265759479646254 4156:0.156813197352933
+0 6:0.0245642787087436 11:0.220767401380954 17:0.133853522140606 27:0.17881322073789 51:0.250249318347292 63:0.0265478219005738 82:0.276374703232414 83:0.0954713984396199 86:0.0954125434013177 106:0.343886693835762 114:0.258728160338175 123:0.124607600798678 125:0.131670453135484 139:0.200957311432214 142:0.0541439394330792 199:0.057411348995691 234:0.264322940775802 298:0.121758020856665 317:0.146408421307179 328:0.498430403194711 446:0.151548752635838 518:0.107110792036446 532:0.14201172601889 622:0.13555254313657 829:0.0911140927158503 1067:0.130638741369096 1281:0.158911570048933
+0 6:0.0139377091336643 11:0.125262860885364 63:0.120505331882858 77:0.105098459535835 85:0.0854142444976247 86:0.108273667906018 118:0.182532045605806 120:0.232241768549371 142:0.0578280155115988 186:0.0790914825941894 192:0.112559027184957 199:0.195450318593334 237:0.239548167068109 242:0.0976624696441275 276:0.108273667906018 296:0.125684411013825 304:0.422144946315669 339:0.108409039849412 349:0.138170381431698 409:0.0711803709547382 436:0.36932975203273 586:0.204911703979024 657:0.144760832014968 761:0.141726793946501 847:0.148634469309031 856:0.104604203427289 1067:0.148248177801561 1271:0.177752914193557 1710:0.388198912992405 1746:0.162805196064393
+0 4:0.0110019593273792 6:0.0381525877529946 18:0.0136153157281997 27:0.00740607902120849 29:0.0369500695291031 30:0.0152886116981871 37:0.0120345363481678 51:0.017274694222231 57:0.0569676697474916 59:0.0157938189327924 63:0.0109955665484502 68:0.0156145088414047 75:0.0103096931330945 86:0.0197589650566288 98:0.0164989144030449 108:0.541541458842034 123:0.0516099276300693 138:0.149300245008616 142:0.00197870433299801 151:0.0200871481798986 162:0.0551025550295511 165:0.0740871812475941 166:0.0189781893866839 173:0.0190113434469689 174:0.0186445153308106 179:0.0277302940487898 186:0.028866960380654 196:0.212869418286152 199:0.0118893050978464 209:0.0798892891158077 214:0.0217913783927028 226:0.0197220720197091 228:0.0192364893127001 229:0.0133200001913914 231:0.13633804265921 237:0.0218576868873912 241:0.0335903768680541 243:0.0239829738575828 254:0.0245472338940506 276:0.0197589650566288 278:0.0219583460828403 281:0.029360205667967 291:0.020472381229262 314:0.0202970562304827 323:0.021758458913906 332:0.0326696655525542 337:0.0194455240708391 345:0.0186655678854323 347:0.0626838656196165 351:0.0180504205931504 364:0.023566525634909 369:0.022744527656308 377:0.0978820988936284 381:0.0733498955690607 396:0.0258343487702994 433:0.0205686436735757 436:0.0224664463851064 462:0.0312549588201025 480:0.0374157289578564 485:0.0176018217586385 490:0.13161078584743 499:0.0378903841675411 502:0.0175567090187153 506:0.0284590725956688 508:0.118406088248749 523:0.0298138689550059 530:0.0209091461584996 531:0.0286200247643519 534:0.0193868280430572 549:0.0271599624403824 571:0.0200742362121732 572:0.0275630565248137 574:0.0190446557611245 601:0.377801494910861 631:0.0170704186663372 636:0.0260133051540699 640:0.0712165599538362 645:0.0647257011645358 663:0.0238045892818064 664:0.0862588815832903 674:0.235763000576645 678:0.0275254342419772 707:0.0377463824757383 714:0.0263221571694859 727:0.0272315416992966 764:0.023524100479548 767:0.0243302552809366 780:0.0258049638150347 803:0.0317869432431031 804:0.0239604248345256 822:0.0340527258022189 824:0.0284466266132461 884:0.0262592836220312 908:0.0541079030855873 914:0.0325916880199258 942:0.0329089661354476 944:0.0278322492122635 950:0.0277156072230395 988:0.037585940546182 1009:0.0906771301758068 1033:0.0304686222198882 1076:0.0697255676017863 1157:0.0697255676017863 1167:0.0325145721351244 1168:0.0330731835136029 1202:0.0945476498609883 1213:0.0323628505822679 1228:0.0313192810870868 1244:0.0718057813460974 1245:0.0248730593671196 1319:0.0268466417485929 1335:0.0273403062367478 1340:0.0341489882465326 1374:0.0339577730917112 1388:0.0987268984063429 1433:0.0245227893276763 1441:0.0331567643516826 1476:0.0327485242058913 1493:0.0339577730917112 1539:0.0418161117462691 1587:0.0409941137676681 1613:0.0291676716212273 1691:0.0713159825598705 1775:0.0825150007355812 1778:0.0393853083879916 1783:0.0368347951209638 1865:0.0301883067659467 2000:0.040495407620226 2008:0.045096227859953 2019:0.0514909444268505 2034:0.0342465970623302 2099:0.0369786954059784 2112:0.0819882275353363 2223:0.0322882090518851 2270:0.0374291043602165 2273:0.0430885186791082 2303:0.0353060385601789 2423:0.0328282841204894 2723:0.0331567643516826 2809:0.0427480161941842 2837:0.076502204677635 2868:0.040495407620226 3038:0.0418161117462691 3069:0.0434464903009753 3071:0.0427480161941842 3101:0.0387951894320019 3223:0.0442227247282823 3282:0.0543206515862963 3463:0.0412575003677906 3482:0.0387951894320019 3553:0.0407403070133394 3586:0.0421131317443302 3989:0.0427480161941842 4069:0.043823820927114 4317:0.0442227247282823 4783:0.0563283607671412 4800:0.0514909444268505 5178:0.043823820927114 5205:0.0504151396939207 5298:0.0527633513596895 6271:0.369343459517827 6806:0.0563283607671412
+0 6:0.0163480083768758 12:0.110205460172074 18:0.0437552159671556 27:0.0238007398074232 29:0.0296863896607761 43:0.0746669814657181 53:0.125901819495091 56:0.150926649386027 59:0.0507562198443309 72:0.0508687538385424 78:0.12559352992427 83:0.0635380847102749 92:0.053960502146402 108:0.227000725025817 118:0.0535244957043285 132:0.0991510546965622 138:0.0685432346369731 142:0.00635891500085855 160:0.0740877475447653 208:0.0612391556103868 215:0.0520738524287274 218:0.0463660647764116 299:0.0676674105488341 304:0.309467514193003 382:0.0717947222203577 389:0.069662322807693 416:0.0795254231611453 439:0.088098977323308 546:0.0706213848478424 674:0.324713974842624 684:0.0765002417738718 701:0.352433595774367 829:0.0606382124478974 881:0.0931333222570007 916:0.0990473478277808 952:0.0761492490393351 1076:0.224075396395678 1143:0.0970154426526397 1225:0.0729119429157922 1296:0.0832133002599391 1583:0.121304650599033 1650:0.135337968748675 1690:0.106826961722481 1812:0.137378281788205 1863:0.0984746874923352 2569:0.245853313610676 3395:0.138472546516443 3494:0.140835569842887 4656:0.151880821612443 5071:0.18102111178644 5470:0.174568984596678 6531:0.174568984596678 8298:0.18102111178644 8440:0.205660764018888
+0 6:0.0170559148826536 9:0.130474416100892 13:0.113356969862207 17:0.0929396017462108 80:0.111052751900945 105:0.181180335326029 142:0.0176913885370216 151:0.134697818589531 160:0.309183672246816 217:0.282396830507346 265:0.161125832379227 506:0.0954185970896995 586:0.125377726999777 672:0.23831078777297 709:0.297484420144926 765:0.625686474404921 784:0.334967776727367 867:0.149927041013962
+0 17:0.15080103878021 34:0.220551299218723 372:0.273184438294121 451:0.314318875824856 670:0.394819545575559 718:0.454977010517459 1320:0.389294668146368 1336:0.490666063402373
+0 33:0.0636535558144631 41:0.158900585890507 63:0.0248635951969441 100:0.0710815436632797 131:0.152731525111203 142:0.0357945747194162 204:0.138108693534315 331:0.0899220706054427 351:0.0816326014280606 457:0.0793185617995036 899:0.632968441458059 1434:0.245663865690717 1861:0.223786764378276 3284:0.360065123506785 6688:0.509487366221806
+0 6:0.0403793936945034 15:0.0461144831552605 42:0.080528389097672 59:0.0417890941471505 63:0.0145466643517233 72:0.167526986826581 75:0.0136392831524929 78:0.0517024303856281 108:0.0622987993633705 118:0.0440682973835918 138:0.0564336685076169 142:0.00349032162573189 165:0.0653427817854423 172:0.0527765046342193 186:0.038189754176064 196:0.062581586151328 200:0.325073935404727 204:0.040400850982838 214:0.0576581235433877 231:0.0721477601429821 276:0.0522805316760544 320:0.0638800236353352 341:0.0562305243645804 373:0.048042971249724 385:0.0704139110448973 414:0.0497252913575895 416:0.0654756285193345 422:0.122736965393281 442:0.0572693593659352 508:0.104430794318512 530:0.165971437510887 535:0.0638189802198549 613:0.0622427579960268 621:0.0937219822686975 647:0.243162256708384 663:0.0629849073783058 674:0.178231067472604 684:0.125969814756612 688:0.149418850215215 757:0.0639412695169091 784:0.0660855575348578 881:0.0766794135570247 909:0.0592529404669536 1017:0.158606109491588 1055:0.0734354292107113 1076:0.092243944335868 1192:0.0837434507676512 1226:0.426085488761548 1305:0.0612090663134314 1626:0.0967229944730856 1881:0.117009547531072 2822:0.119320762112077 2990:0.114008535326684 3448:0.32338610426185 3686:0.149040025168666 4535:0.123441245325287 4855:0.120594758008973 5666:0.130928408461583 5768:0.133394147930662 7285:0.313054376609925
+0 6:0.0181440780934009 9:0.069399326017191 17:0.123586407095043 37:0.150234465856765 41:0.0626601401660452 68:0.0278464926458012 70:0.0521873324588901 87:0.0422576833052606 109:0.0499181563575058 111:0.0567344369103702 116:0.0485639947670024 138:0.0380368597004967 142:0.00705753555448845 144:0.0269675856274671 146:0.0407317734558809 162:0.0245671014852301 188:0.0501346141786059 194:0.0359386543244004 209:0.0284944793901246 216:0.0394649849228955 224:0.0431384759399909 234:0.0325397713768166 239:0.0769137998715318 240:0.0408347755141112 262:0.0849049210711525 281:0.0523601965016212 287:0.0842080537936255 301:0.0411136893934381 303:0.162113167617897 311:0.0581231347062636 369:0.0811239506213792 372:0.0447767249829829 373:0.0323814454269282 377:0.0698241148583396 381:0.0436034064702262 382:0.0398412154138234 391:0.0469422229982721 409:0.0694968339273522 431:0.0505791618275682 442:0.386001237372224 448:0.0410784814180497 496:0.0760737194009935 572:0.0491552093383027 577:0.0662088359585563 580:0.0410433727600722 631:0.0304429228406099 643:0.0369058211981326 645:0.0577150322107225 720:0.0451611883242192 778:0.043347657519434 792:0.04977591468357 794:0.0529848586140494 796:0.0398730874184366 803:0.056687974642175 812:0.0508075354092721 858:0.0455076205386728 871:0.104203585055347 882:0.0340633722046381 890:0.0476370644955178 975:0.0562045736494849 1030:0.067908656569561 1061:0.11766905790731 1198:0.0540345694752037 1204:0.0698779142789205 1213:0.0577150322107225 1244:0.0640282439393151 1291:0.0688543780036488 1326:0.529482378356148 1446:0.0473428188524518 1472:0.0461249046136569 1535:0.0673158773479349 1636:0.0662088359585563 1662:0.062562314981929 1688:0.061074454721952 1730:0.0640282439393151 1746:0.0529848586140494 1819:0.125927668055929 1910:0.0555129506707469 1932:0.0585450737913342 1954:0.0642525024570039 2141:0.0751034198591319 2156:0.365538967362681 2204:0.0676087381775363 2236:0.194140555595368 2275:0.0713883728401581 2402:0.062562314981929 2558:0.0756566669850553 2741:0.070993228191701 2794:0.0854698159651349 2937:0.0854698159651349 2988:0.0762356556113647 3495:0.0788656109155347 3552:0.0796201456255295 3634:0.0788656109155347 4649:0.0822044274435806 5052:0.0842835844188838 5405:0.0918275572975791
+0 4:0.115342318503359 6:0.0133328006930002 11:0.0599131730474164 46:0.223281772855313 59:0.165579206350735 73:0.144880400350845 77:0.100537096928514 86:0.207148997105166 120:0.111081139051026 142:0.0484034516115291 150:0.116273460273272 179:0.0726796998878113 183:0.117293578413523 218:0.0756287232464429 308:0.197024473647514 317:0.158932759574218 409:0.204273246792281 456:0.144482757571168 457:0.0919363306882639 506:0.298359166577812 896:0.337728813598546 2754:0.186915587715594 4112:0.63681850632256
+0 11:0.0745286753593838 46:0.208312637059358 51:0.0563209667410055 63:0.125471586048039 74:0.0679816029396926 75:0.0840321508139545 77:0.0625312955185172 79:0.449893139695273 82:0.124401461483354 83:0.0214867376732389 86:0.322102376885766 106:0.232184820811216 114:0.0582292100118546 120:0.0690893982891922 137:0.0678877740427399 142:0.021504006476257 162:0.0449129392572682 170:0.0823847535110479 181:0.0699956299127374 199:0.0387628949245155 234:0.0594883680588447 264:0.136530867508813 317:0.0494258918356049 399:0.234576240066531 457:0.0571818566359009 499:0.123534636217045 505:0.178952332696257 561:0.0734859792827399 623:0.57554426084877 796:0.14578989339061 1467:0.101901050956556 1659:0.116652051938118
+0 6:0.0284234193970693 37:0.0448282402346876 42:0.113369318717883 58:0.0635555045787572 80:0.0616892334066368 86:0.0736014755136126 94:0.0568770467516959 123:0.0961226160843255 127:0.188454630124803 137:0.0775629224967262 142:0.00245686887102375 161:0.0924608541764212 162:0.0513137877302992 168:0.140733250124752 186:0.0537642247840391 241:0.25024603196185 289:0.0824312896794284 296:0.0854368220692995 308:0.070004162102643 315:0.402616394229668 373:0.0676357615096202 423:0.0717834367872309 442:0.0806248371223579 458:0.0997504385569644 485:0.0655661898004509 488:0.418266437564359 506:0.0530045406929734 507:0.0506595180042218 528:0.0991299740733592 612:0.220582003742752 723:0.0972385053250173 742:0.194477010650035 867:0.0832837013829821 947:0.115257717328209 971:0.118149164275482 1074:0.123822933695406 1138:0.0934273680139864 1150:0.103383721848402 1157:0.129862688703778 1412:0.118925228705958 1516:0.151756263572792 1910:0.115950991154323 1992:0.247645867390811 2102:0.132380418842382 2157:0.152701685135125 2596:0.131091085462452 3341:0.202342587081552 3758:0.161836704649005
+0 6:0.0282669063909724 12:0.047638332368126 37:0.066872091602564 52:0.0576139530646742 69:0.0716949890762748 98:0.0916792208177801 111:0.0441936760036666 176:0.0366299423196107 179:0.0770442130111236 224:0.0672060192294058 242:0.049517030755684 262:0.132274532974153 271:0.0779923378441357 379:0.172620962300186 398:0.0549657793825851 411:0.0529434974339 429:0.0806460114014727 542:0.401822540139302 657:0.220190824496561 663:0.132274532974153 732:0.154654958444762 745:0.0959858250808754 769:0.102739425724049 786:0.223705413641722 846:0.409358486646771 858:0.0708969418683452 859:0.110601317154694 872:0.0806460114014727 1110:0.115387887176251 1211:0.122865809425009 1309:0.250262128735654 1430:0.318823818238317 1622:0.133154590423573 1751:0.192546173560432 1882:0.106765513567294 1956:0.105328574063582 1967:0.113190465494227 2109:0.117866551968675 2622:0.128067397170006 2623:0.128067397170006 2737:0.121757518637537 4310:0.14007044983836 4767:0.131306544140742
+0 6:0.00874124987800479 12:0.0294633279808946 52:0.0356330440432489 67:0.0247229565908738 69:0.133025624915932 85:0.0267844323315434 98:0.141754277370256 118:0.0286194489726058 132:0.0265079428879031 142:0.00113336670119243 179:0.0953005197342065 189:0.0327062107134992 216:0.0380259931495985 218:0.0495836983596928 219:0.0365442821152845 233:0.0516865960488774 244:0.0643161787689404 286:0.02448971361318 291:0.0351786491681762 318:0.316532604409716 337:0.0334141525364725 341:0.0730360244575355 355:0.0526093608436452 365:0.0463086312014981 380:0.0537068560215464 382:0.0767770106770674 398:0.101985609392878 422:0.0398547768654363 443:0.0680356182037035 493:0.0390181616801476 502:0.0301685133839902 542:0.124259484974769 641:0.0691669885965691 650:0.0740410148098536 651:0.226196056277336 673:0.0441916575790235 676:0.043704102693249 712:0.0401353089184288 722:0.0561378126972476 729:0.0470430769060816 796:0.0384192152103721 812:0.0489549659576866 830:0.0759899740560447 846:0.126589898872135 858:0.0438482992008993 859:0.342023190197565 876:0.042180658885625 882:0.0656426734046124 912:0.041565539522772 936:0.0511414022392424 953:0.0955165416559651 966:0.043656419933015 1011:0.0524543588810831 1179:0.0545028390171054 1211:0.0759899740560447 1236:0.0481671353746777 1242:0.0554823381698987 1327:0.056831196462713 1365:0.0528574959472991 1379:0.046131838834046 1464:0.167613925295607 1473:0.0619096959760179 1498:0.0718545785282978 1504:0.0610677925775274 1517:0.0812103947334015 1518:0.056003820259699 1543:0.061272792413897 1574:0.0669921605078412 1584:0.0586798019985998 1599:0.0529604339046556 1679:0.0630526745617114 1682:0.061272792413897 1704:0.0663437756634652 1729:0.0792070490066951 1759:0.0663437756634652 1815:0.056831196462713 1836:0.046609203286383 1838:0.0669921605078412 1914:0.0812103947334015 1956:0.0651435549719544 1985:0.0614813576430086 2023:0.0640526033589675 2024:0.0425654683200281 2076:0.0545028390171054 2109:0.0728980362241601 2174:0.0884792955467806 2187:0.122135585155055 2238:0.0673299912535102 2296:0.06379469667914 2358:0.0746561341727066 2379:0.0657286563006122 2385:0.0687853747286234 2398:0.0635422200190564 2404:0.068404638039513 2525:0.0728980362241601 2577:0.0628151975263468 2721:0.0774909552986384 2728:0.0801669370375392 2729:0.0801669370375392 2968:0.066663586573438 3003:0.0850293550579958 3063:0.0774909552986384 3102:0.0836168775263239 3365:0.0713650330709528 3496:0.0740410148098536 3552:0.0767169965487544 3632:0.173261380021787 3722:0.0740410148098536 4182:0.0906657318283363 4438:0.0812103947334015 4470:0.0884792955467806 4526:0.186683427134474 4774:0.101654072076479 5543:0.0933417135672372 6848:0.21993286117144 7350:0.290374962168066 8148:0.101654072076479 8980:0.0967916540560219
+0 6:0.0265059971490128 20:0.0498396293232721 59:0.0548627163005163 63:0.0190975548940404 85:0.0541454290043217 100:0.054597240315007 118:0.0578549630362743 142:0.0137467821969869 201:0.318113566448609 214:0.151392670214016 277:0.0800133322286654 286:0.0990131904507084 297:0.0863121535757609 348:0.0877762991220008 367:0.0754114605945344 379:0.323734806441347 391:0.0914348231641901 398:0.206166571107104 454:0.088156582089192 537:0.0988145560127242 609:0.062567682254458 682:0.547248264575792 692:0.246900273003965 726:0.0814231795684346 739:0.180514499361256 761:0.0898428371611224 827:0.07546816832109 829:0.0655442240715058 1138:0.0871248288470821 1256:0.301838647356725 1327:0.114885746885089 1432:0.105056241952632 1479:0.139051430241371 1598:0.0924427414402187 1868:0.139051430241371 2460:0.162059555495903 2640:0.122247780570941 2824:0.128962644312782
+0 6:0.0289976174553986 9:0.110913053677879 17:0.0395028211097995 18:0.038805858947584 37:0.0686007624574306 47:0.0343120032241135 62:0.331990966396303 63:0.0313391487238286 69:0.0735483337988044 105:0.308033787127323 140:0.0512277416403368 142:0.0150390090646243 151:0.0572516315074417 175:0.140348177324186 194:0.057436665814385 199:0.0338864486011318 201:0.0870042301690284 218:0.0411213824431488 243:0.0683553667972128 338:0.189974659317851 341:0.0605711633702365 381:0.0696863678643304 415:0.0630723991478752 426:0.0652615797363629 436:0.0640330174399249 442:0.061690189829492 461:0.158652852227014 483:0.140773658268953 486:0.216102721364217 501:0.0753857356255129 527:0.0691432339279705 538:0.0635216513710859 586:0.0532902425636595 621:0.302870170438364 631:0.0486534629211772 681:0.0793264261135069 703:0.312568184242903 723:0.148804315551861 724:0.0848264744151617 729:0.0780287239860269 797:0.10712602897827 806:0.0778204388937849 816:0.110042125215797 867:0.0637246229747005 1076:0.099364590414567 1200:0.103424260241703 1232:0.164157039753438 1477:0.120029258442146 1480:0.105395281801505 1544:0.0949873296589256 1986:0.112254519279781 2090:0.116839875644932 2376:0.100627938397828 2475:0.116839875644932 4604:0.36274035129639 5023:0.146757546163085
+0 6:0.0312446265114183 17:0.068102195975043 29:0.0226948784473436 31:0.0238175572836811 42:0.0373865857416095 96:0.0387169021993383 142:0.00162043734127039 162:0.0338442066407684 196:0.0581089939264707 199:0.0292098323448602 248:0.152037344142338 252:0.0901958959700774 253:0.20484795959528 278:0.107895222197026 295:0.0530577650285923 409:0.0638269627840997 480:0.045961776610379 502:0.043133599713667 507:0.0668253610381692 511:0.243155419460073 514:0.0663806303845084 519:0.0747158243722201 546:0.0539891769669291 586:0.045935738773447 631:0.0419388739036228 767:0.0597749550385865 781:0.270869408556956 975:0.077428719293282 1046:0.140413260302284 1352:0.0908498422953192 1447:0.0812547190599156 1500:0.0713132019761263 1700:0.0898103778449425 1710:0.0870238425286855 2093:0.105860552508919 2195:0.0972743033280441 2364:0.202724155666501 2523:0.194548606656088 2792:0.0957824138869371 2826:0.213480045674655 2854:0.110793124100537 5502:0.25925966816154 8538:0.581361898533316 9196:0.314450230838509
+0 6:0.0101256312490566 15:0.138765308425488 57:0.0755956084441298 96:0.0627360795356314 138:0.0849086326054585 144:0.0601989974548016 179:0.110393586059145 367:0.0864244387004458 388:0.210590587052716 444:0.133019022962456 478:0.0794061587823654 557:0.0952963558841275 671:0.123675167052528 1036:0.114464794960059 1485:0.126269276731823 1626:0.145526906532871 1679:0.146077080689607 1731:0.125729786246442 1734:0.140100665534445 1792:0.119530214172545 2468:0.150267375994114 2635:0.471013488083186 2771:0.146077080689607 3735:0.164245045848538 4041:0.196991484439497 4604:0.337772581215672 5357:0.171534282564552 7462:0.44848350551042 8971:0.22424175275521
+0 6:0.00635944767018585 9:0.0729727980469305 27:0.0185171864153329 35:0.0690096188758487 42:0.0190239140403706 62:0.436852271953532 70:0.0365830226380706 75:0.0193327510836399 83:0.0329554618490311 84:0.0559849502422036 85:0.0584587552690909 114:0.0223273832704128 137:0.0260308589128867 138:0.0799908656339463 140:0.0449388840617139 142:0.00989458440560156 162:0.0172213981332332 173:0.0237667320052438 184:0.0749377710657024 215:0.0202569592497823 223:0.215947519420232 243:0.0899458127120654 299:0.0263229224283362 302:0.080729193452953 367:0.0271396262525301 378:0.0439954225622983 380:0.0390728951998782 398:0.0741967287399018 408:0.0187235817181178 415:0.0276647295199979 423:0.048182416421181 437:0.0286008105104111 466:0.0293818860815589 475:0.0257656536068537 480:0.070162027639135 485:0.0220046406351324 502:0.0219482436528377 507:0.017001818953101 527:0.0303275107748884 567:0.0345048094379243 611:0.0411406264314019 612:0.074029430987361 639:0.0365830226380706 654:0.0332279108399014 655:0.02407684675421 676:0.0317956765827617 697:0.136352687795668 744:0.0392344661651514 780:0.129038678641035 782:0.0362292748810751 789:0.0326725226424471 808:0.0663740924176815 812:0.0356157927697519 844:0.034843201324095 906:0.0372064722847875 927:0.0408414685713489 1021:0.0340430835654591 1055:0.0346965662290313 1116:0.0370781672844944 1152:0.563763399985179 1201:0.040552229394235 1279:0.194952962108686 1394:0.0824853389970548 1445:0.049236923840357 1499:0.048499195908749 1518:0.040743986185342 1607:0.0822812528628039 1634:0.110568687593335 1855:0.0411406264314019 1967:0.0509308540608038 2107:0.040743986185342 2112:0.0512481465829277 2119:0.452960280379865 2225:0.098473847680714 2295:0.0473933401602493 4598:0.0512481465829277 5278:0.067908108240902
+0 6:0.0338626788333725 9:0.129521438128475 11:0.0304335238110634 17:0.0184521551994509 26:0.0146567009424124 27:0.00985999994024296 31:0.02581328000826 33:0.0187385045806308 35:0.257222871720966 41:0.0311850539321861 42:0.0202596428090091 48:0.041431929274506 57:0.0252810886254173 62:0.310152473400974 63:0.0365970593887094 70:0.116877994183804 75:0.00686284695215467 83:0.00877403414789469 85:0.0207520124109362 98:0.0219656439746643 127:0.0336777492818274 141:0.0927975061380847 142:0.0289775831505088 151:0.0267427986234386 154:0.220308905323133 162:0.0550201247930332 173:0.0253105381017747 180:0.0260948851196241 186:0.0384317027691935 196:0.0314890337694286 214:0.0870351190020657 215:0.0215727824424741 223:0.321964630387088 243:0.063858924574107 250:0.236570178861861 275:0.0227712871883661 281:0.0781767586607353 289:0.0589234725612849 304:0.0512815937006877 306:0.0265723112344083 308:0.025020161281428 319:0.0307188994890871 320:0.0321423655926669 322:0.0293471688363044 330:0.0336777492818274 331:0.0264715004586913 341:0.0282933845158122 342:0.0316335359356999 345:0.0248501937000575 357:0.0626934891744159 386:0.0539384291243788 414:0.025020161281428 418:0.0349600016692506 426:0.0304843240058614 432:0.0636199167258936 457:0.0233500110809415 458:0.0356517667753672 461:0.0370541517021196 465:0.0287946099619885 494:0.17209624298547 506:0.0378886659579385 507:0.0181061993006439 515:0.0489305836717533 520:0.0502532214265298 538:0.029671586400545 543:0.074962826554631 546:0.029256521268403 556:0.0418702465908476 564:0.0839166329272515 571:0.0267256084205476 576:0.0331486897567023 610:0.174397516304353 628:0.0367967584553093 671:0.0206800561789846 726:0.0624132032569981 755:0.0353427638839404 761:0.0688671123707423 764:0.0313185463803983 800:0.0298621838944741 808:0.0353427638839404 824:0.07574419227867 848:0.112280756043437 858:0.067945472052726 866:0.037872096139335 867:0.119065585709672 882:0.02542927840168 906:0.0396232782104397 908:0.0360179738605806 913:0.0353427638839404 930:0.0592960685831569 957:0.471003414281252 987:0.0552911527099215 1042:0.0385826053861675 1058:0.0379868050285532 1083:0.0363024236879746 1086:0.0426946463099429 1198:0.0403383464868103 1225:0.0604108745030261 1322:0.114134084843966 1359:0.0375913707974646 1373:0.0392853754449752 1424:0.0314890337694286 1433:0.0979444186106013 1709:0.0431863643250671 1873:0.0448400595730748 2200:0.0488518804076502 2237:0.0488518804076502 2404:0.052998468662329 2561:0.0504718503844657 2709:0.0506957480139418 2843:0.0638056541219907 3070:0.052998468662329 3116:0.0613679485036096 3546:0.0980791797256035 3924:0.0583443506996302 4107:0.0583443506996302 4152:0.0658789482493301 4787:0.242717555811265 5816:0.0638056541219907
+0 6:0.0235966120745917 9:0.180509471557155 17:0.0642902988160078 58:0.0791439569145139 62:0.270155369087535 63:0.025502017064731 142:0.0122378903518551 153:0.204659466677628 175:0.11420736551162 216:0.102649463363352 265:0.334372895386143 380:0.434937748596535 408:0.069473501059005 415:0.102649463363352 471:0.122988995969654 571:0.0931163505197351 705:0.134859687748054 720:0.117465438169798 727:0.252632454382181 867:0.103710948683729 990:0.158856262447997 1216:0.126316227191091 1688:0.158856262447997 2071:0.211416823974329 2165:0.176632201132491 3652:0.47769178156181
+0 6:0.0125327923518137 9:0.191746825129818 17:0.136585194984779 18:0.0670876871828372 62:0.28697349711041 83:0.0324732572412184 142:0.0129997423459968 159:0.150793461132256 175:0.121317178286458 216:0.109039755816747 218:0.0710907712569401 220:0.100540141395122 229:0.0656325585064899 278:0.10819687787386 381:0.240948010170582 389:0.106809760108611 453:0.121561931621724 506:0.0701141786913352 514:0.266264874853764 539:0.116436941069257 550:0.204216275237897 621:0.349068582295382 655:0.0948982164824181 760:0.19837002736484 797:0.370399610581544 974:0.321951006750171 2415:0.182931662584869 2953:0.219986432379577 6664:0.259984511663251
+0 6:0.00570898519508272 9:0.131017863594281 35:0.18585335374055 48:0.104776532297893 57:0.0852439119706275 58:0.0382963178677456 62:0.52289303146313 70:0.131364826295374 75:0.0115702280492224 83:0.0739617076634164 111:0.0357026748568131 127:0.11355615012016 132:0.0346251292689689 142:0.0236867681231295 149:0.25425495053411 166:0.0425971901065414 190:0.097897127705036 200:0.16545647700569 215:0.0363700391770096 223:0.0775439160897388 239:0.0968028780528305 243:0.0538305986896981 247:0.0840108948996167 289:0.0496702039065667 299:0.0472610774483472 314:0.0455574314934216 330:0.05677807506008 341:0.0477004533853849 362:0.25203268469885 363:0.0533316897973963 380:0.140305631428274 398:0.0888102338164826 402:0.0435143934379945 409:0.0874679647990887 434:0.0494004533157938 459:0.0521498009937726 465:0.0485454806396372 483:0.0554303974904988 499:0.0425231265403832 507:0.122102594724103 515:0.0412465858273292 527:0.0544510526690095 545:0.0908933166222378 571:0.0450573044008902 613:0.0528006418207518 706:0.0581188225826874 709:0.0995744972966775 744:0.0704429057648894 804:0.0537799866422411 868:0.16289547137876 913:0.0595851606305493 962:0.0773152344362202 989:0.138086734059204 1089:0.0932182291856992 1152:0.404880055119734 1420:0.102300746755124 1437:0.0780115452953027 1467:0.0701528157141372 1472:0.0580523069198525 1496:0.084723036396793 1721:0.0748035606135343 2254:0.0920126794938509 2835:0.0932182291856992 5229:0.109221798374168 5297:0.0992594063584191
+0 6:0.0258440997732776 20:0.0291570321762098 35:0.336537051902404 48:0.0316209747976125 57:0.0385892079021493 62:0.177531985292996 74:0.084746218406854 111:0.0323246062003143 123:0.052439907651813 139:0.0422854737027155 140:0.0365253419360788 141:0.0472155598231537 142:0.0026807005875927 173:0.0386341597625142 190:0.0443172131205639 218:0.0586390305926592 243:0.0487373260168935 331:0.0404062597864263 378:0.0715170341347786 386:0.0823319472605045 398:0.120610956161783 428:0.305523118013435 434:0.0447263463019025 457:0.0356415993579496 483:0.0501857571622633 494:0.0875629183819808 496:0.0433432172018411 506:0.0289167454267773 509:0.0479777772726301 511:0.0670422791861802 529:0.0882903752746638 576:0.0505983622643194 610:0.133100716389266 612:0.0601695021272317 613:0.0478048202501543 638:0.0631301255388878 654:0.0540138381532678 662:0.0538812923280212 675:0.176580750549328 681:0.0565596832026164 706:0.10523962478138 727:0.0553389472724471 771:0.0548362308416144 844:0.0566395836960474 861:0.0690077497397243 867:0.0454356090932166 916:0.0626324499114037 957:0.44933905303745 1037:0.0578081985813559 1059:0.0473814365687287 1112:0.0622703289605387 1157:0.070846879542563 1318:0.0684441404738591 1331:0.175292157617402 1394:0.0670422791861802 1551:0.0553389472724471 1554:0.0960416221208104 1634:0.08986781060749 1694:0.0813474554435044 1722:0.0737414211295178 1730:0.0729605468476136 1934:0.0882903752746638 2217:0.0916429118588118 2669:0.37048555786026 2912:0.0843982295781226 3456:0.100558028494565 3536:0.0973933396907066 3565:0.0890571728307753 3819:0.104638021971396 5355:0.100558028494565 5938:0.240437742224033 6375:0.104638021971396
+0 6:0.0340664960236179 17:0.0464080437066436 42:0.0509539605969423 100:0.10525561402022 140:0.120365037546528 142:0.00441696928452129 151:0.067259404331882 196:0.0791964103735213 199:0.0398099108763181 214:0.0729658146162603 240:0.0766695177630849 287:0.0790526064468521 314:0.0679622562409887 379:0.20803802313756 398:0.0662432414383311 403:0.0986382572603238 519:0.305489289447986 590:0.286273201137404 607:0.0835436213009477 628:0.0925455891844882 633:0.088563409282645 671:0.0520113201214956 726:0.0784860801709654 732:0.18638589076638 752:0.129901034670026 757:0.0809170769213174 785:0.239605829246726 860:0.11709614930579 871:0.097823956600633 882:0.0639558388024338 895:0.088563409282645 943:0.114343787750652 949:0.293477607145289 980:0.149491165127783 1003:0.0900070265986558 1245:0.0832844534207265 1279:0.261082591323297 1383:0.123818722483719 1428:0.143136600568702 1664:0.101081921270317 2468:0.25277846096064 2640:0.117838054930651 3751:0.137263868839577 3764:0.168809043212765 4245:0.172411246216708 4927:0.188608754127704 5037:0.176671748086065 9496:0.214281196771768
+0 6:0.00966563285122052 52:0.0394012213242013 57:0.0360806836834821 79:0.0327738309766656 83:0.0250442657283341 84:0.0283635729756793 85:0.0592337463539369 94:0.0290123072746984 96:0.0299430176944711 100:0.0597280166380422 112:0.0538084904429396 125:0.0518101212110259 136:0.061209246104527 140:0.0341509810765844 142:0.0100257574808287 144:0.0574642106845322 161:0.047163185598546 166:0.0360597186710261 176:0.025050606453051 183:0.0425160733613217 193:0.0937518923762211 233:0.171457286215398 240:0.0435066411916471 248:0.0587915952370826 253:0.369660795094968 262:0.0452301731788784 275:0.0649974866417053 300:0.0689477974487366 325:0.0433968995919197 327:0.0406435252833675 331:0.0755592331349952 333:0.0487553136890056 339:0.0375901795226468 347:0.0397010574156207 367:0.0412491267608206 377:0.0371963929447385 381:0.0464564268114592 386:0.0384899445679726 402:0.0368361570702164 408:0.0569154039573573 416:0.047018788154088 419:0.176374785711248 442:0.0411257736144082 448:0.0875325860985931 457:0.0333246869349696 502:0.0667176383483822 507:0.0516816391379454 514:0.102675383476701 557:0.0454835637097215 589:0.230831241563824 594:0.0925483016940813 643:0.0786412218769453 688:0.0536496817470184 712:0.0443795985459686 723:0.0496002088107305 742:0.0496002088107305 744:0.0596318996135249 761:0.0982858188767 774:0.054214037879815 808:0.100881026374346 857:0.0778913193198168 867:0.042482028753106 880:0.22739031710195 932:0.0656431044360421 960:0.0556937764298138 1019:0.0694578744733408 1027:0.0505026227509144 1042:0.055064352696558 1168:0.0628410681733705 1225:0.0431086193771498 1227:0.0528086850135668 1232:0.0547176566709463 1272:0.0610703928188672 1308:0.11290343601938 1322:0.108593314519919 1330:0.0638237671274194 1338:0.0610703928188672 1393:0.0553304559597728 1439:0.0569484190589093 1576:0.107141969944641 1599:0.058560974335237 1724:0.074450105467167 1970:0.0664470092079207 2021:0.0705409551907568 2023:0.070826135378016 2067:0.120532976093977 2078:0.0670836291032982 2113:0.470105842434886 2139:0.0723519969923112 2204:0.144064909199445 2366:0.0733595980524882 2387:0.131286208872084 2411:0.0812238410260749 2575:0.0673028137236103 2694:0.141652270756032 2752:0.0866004574151283 3139:0.0794531656715716 3623:0.0866004574151283 3767:0.0774090709887762 3865:0.0924593221352224 4244:0.0760593950452598 4394:0.0924593221352224 4862:0.103212554913329 5369:0.0866004574151283 5524:0.107027324950628 6483:0.0778913193198168 8470:0.0957918438414805
+0 6:0.0130394560645724 33:0.0360780534223595 57:0.048674773489983 58:0.0437348440403628 72:0.0405738035756977 83:0.0168930274748048 96:0.0807894671104679 98:0.042291404490923 100:0.0805762913576273 119:0.204644773944851 142:0.00676264173270432 144:0.0775222959572347 151:0.0514890669769414 183:0.0573564586164769 193:0.0632381604198779 220:0.0523023409167815 233:0.231305056272045 240:0.176078362917735 253:0.284966970569462 275:0.0438425442191881 325:0.117089480694694 391:0.0674711662073315 394:0.121475933252286 419:0.237939026298704 420:0.0662964151825514 431:0.0726986243157038 438:0.0726986243157038 465:0.110879016200518 502:0.0450028325804814 514:0.069257293979902 589:0.311403699999023 597:0.0583006854614864 609:0.046169657713642 611:0.0843550287136135 657:0.0677156658539713 663:0.122035849082455 667:0.0627964356148246 713:0.130388156124935 719:0.0701748769363819 761:0.0662964151825514 771:0.0691680721207894 796:0.114621061235546 800:0.114989908742963 844:0.0714427441465697 867:0.0573105306177729 930:0.0570826428777652 975:0.0807841616375131 1005:0.068728518172564 1074:0.0852070442942999 1168:0.0847759645033476 1232:0.0738170475849457 1319:0.0688155691748486 1360:0.0963434427247535 1373:0.0756378326734947 1424:0.0606271988067943 1602:0.179844586934732 1690:0.0852070442942999 1851:0.0882949042696367 2078:0.361997625115284 2113:0.126839588726038 2202:0.0914015610793907 2591:0.0947869009292062 2723:0.0849902059343032 3139:0.107186573182823 3663:0.126839588726038 3827:0.139239260979655 4807:0.139239260979655 5813:0.288771179887346
+0 6:0.0308170815794644 13:0.102408197152688 17:0.251888624153092 34:0.122798365680471 50:0.292514926979135 58:0.103361693155198 63:0.166527664615664 75:0.0936840741835363 82:0.231150332209345 83:0.0399245032336604 114:0.10819568418277 118:0.10089722935016 125:0.165186983261061 142:0.0559392265506253 162:0.166905447991138 317:0.0918382403334707 609:0.109116062910245 685:0.162843509323224 725:0.448033360308079 829:0.228614115769968 956:0.408071606115714 1041:0.219827292367493 1471:0.356918800071504
+0 6:0.0294449472617021 10:0.0496707583070232 13:0.0782787677425308 17:0.128359067960593 33:0.0325877513621911 58:0.0790076009238493 63:0.0127290400022568 67:0.0666235298733082 75:0.0119350372465026 83:0.0305174878843338 91:0.0941112957851558 98:0.0382000037023593 109:0.0648073701527 114:0.0413513032568064 119:0.431309218466821 122:0.063385943102404 132:0.0357168593161725 139:0.0481770908654344 142:0.00305420146642896 151:0.0465078559775034 162:0.0318947925105583 166:0.0439402791677983 168:0.0437373463410794 179:0.0321020313656451 183:0.103615236139717 220:0.0472424512903546 226:0.0456625936571951 229:0.0308398506833077 242:0.0412645470003847 251:0.0665718465944432 262:0.0551148624984884 275:0.118803244180739 288:0.061164643677999 295:0.0500016568455299 320:0.0558981328322848 325:0.0528809417644744 340:0.0674224805671453 347:0.0483774031077187 355:0.0708859660635428 376:0.0751045259138237 377:0.0906507288610759 384:0.063816857011023 398:0.0916104197740129 400:0.0518909085323281 438:0.0656655353834929 445:0.0921685565629441 534:0.0448864019129109 535:0.0558447168697839 538:0.0516012511020868 546:0.0508794197912071 559:0.168647137709131 585:0.0729688529097522 597:0.0526604975003104 620:0.083713748786769 623:0.0817442148475886 626:0.0555802541096463 666:0.0769638522695067 684:0.0551148624984884 717:0.0596785879577243 739:0.120317825821453 810:0.086659757739721 828:0.268175238481866 942:0.0761942633015245 950:0.0641700582638246 1014:0.0722171678925672 1027:0.123079126746722 1084:0.0961573992017473 1245:0.0575886956379153 1304:0.151645582897379 1438:0.0814814722464925 1455:0.0781916564095741 1599:0.0713590026617743 1866:0.18751836432774 2024:0.114705607307403 2166:0.110963112508917 2167:0.221926225017835 2248:0.0773628432557741 2414:0.0937591821638698 3046:0.0902653812958433 3134:0.106723748356661 4501:0.10059183591167 4539:0.122163202259965 4557:0.125768825816087 4850:0.136968915567135 5453:0.27393783113427 6015:0.229137472130079 7097:0.130417283058061 7968:0.130417283058061 8665:0.136968915567135
+0 6:0.0273634158370211 13:0.227328314378411 17:0.149106335708509 34:0.10903637112933 52:0.0557724476077364 58:0.0458889817994475 61:0.080326114144842 63:0.25137038787868 75:0.0970490662679042 79:0.0463913734046655 83:0.0886254252574275 101:0.398924863064826 142:0.0567658580150599 143:0.120556550476297 162:0.0370500948237843 173:0.0511317180889327 190:0.117306304146233 199:0.0319767300102782 229:0.0358246378868793 234:0.0981476480471359 239:0.0579975537653691 264:0.112628602608243 297:0.13365628182962 317:0.0407729712092472 363:0.319526403412758 423:0.0518297957991831 473:0.0602298363552774 483:0.0664200801330819 507:0.0365776924449363 535:0.0648711558398744 571:0.0539904078696309 622:0.0754994813727512 717:0.0693247131816671 772:0.126766101350075 819:0.0687067131062222 829:0.202993365867426 1393:0.156640573688671 1405:0.0969003734579205 1471:0.316918963310118 1545:0.0874491558596568 1590:0.316152479568515 1844:0.088951562020763 1910:0.0837200956545798 2845:0.112465993965641 3482:0.104341110599426 3657:0.271186801441401 3715:0.123973999682081 4327:0.117865802775886
+0 6:0.0243058151918437 13:0.107694156900387 17:0.132445125318045 26:0.0350674229664816 37:0.0383341253667825 98:0.0525547004757209 119:0.423846757517106 142:0.00210095062439442 151:0.0639844555961312 166:0.120904083071624 179:0.0441652481562319 183:0.0712757483281029 199:0.037871514029218 203:0.0614210675045174 220:0.129990190401478 226:0.0628215628274986 286:0.0453972037935455 325:0.0727524027735721 371:0.113202917300428 372:0.0799772279587082 376:0.309981320514498 377:0.062357610490302 384:0.0877977874465253 398:0.0630177710085006 523:0.189934793850868 530:0.0666028010521843 580:0.0733089608646909 598:0.0856244662578971 646:0.105349431536851 651:0.104826342871075 687:0.0911645937638565 896:0.102613775821266 968:0.224923681181353 969:0.0906122611877975 1083:0.0868566842686148 1438:0.112100365266999 1609:0.113202917300428 1625:0.109402483974425 1799:0.139593898499228 1822:0.115171480805816 1853:0.11922453324339 1945:0.123575982679287 3099:0.1505417702346 4104:0.538275438508692 5231:0.1505417702346
+0 6:0.0346102918169039 17:0.0942976896846103 18:0.0308779874633331 72:0.0358980000117229 83:0.0298924846598215 114:0.0405044216926605 118:0.037772152892128 140:0.040762132498646 142:0.0059833018254494 144:0.0342942383499936 164:0.404279877780424 199:0.188745141692951 209:0.0362359642187847 211:0.0573687990504288 212:0.130620456626695 268:0.111009202258291 275:0.0387900446641158 278:0.0497990313700295 284:0.035030528733081 306:0.0452649484012521 327:0.0485115422920784 333:0.0581936592728498 339:0.0448671115747421 341:0.048196733016835 351:0.0409363008474932 382:0.101330846330082 390:0.0526923720215213 403:0.133617063354518 430:0.0448951992289387 483:0.0560071001271689 499:0.386689867350883 500:0.119391317147919 507:0.0308432401629095 518:0.0503052394777022 546:0.0498374008166656 559:0.330386432592373 560:0.0687148797938559 586:0.0424032732794619 594:0.0552321780700672 620:0.0819992772966501 634:0.064807729315324 639:0.0663657786395477 641:0.0456435424535675 663:0.0539861009532831 709:0.0503052394777022 714:0.0596956585739594 737:0.0679728350427772 761:0.293281440641899 847:0.0615151589535736 869:0.0772277089568651 925:0.0852406381277541 1061:0.0748189098949658 1192:0.0717788209191826 1196:0.0724057301552123 1305:0.0524639786069015 1332:0.141765383319793 1335:0.0620047048540691 1341:0.0662569989056066 1377:0.055017566117683 1407:0.0703122735661467 1463:0.0848849514965577 1575:0.280701954598055 1640:0.0897938941927417 1707:0.0659350748113336 1789:0.0875609883404852 1899:0.0829039457463167 2042:0.074091085620123 2655:0.10453802825061 3689:0.116775605371709 3811:0.10453802825061 3951:0.101251639255463 3973:0.110358151385438 4076:0.116775605371709 5345:0.107182058230271 7378:0.116775605371709
+0 6:0.0277010408845783 17:0.251576821050175 21:0.0558585355203897 37:0.0436889347540226 111:0.0577453039435236 139:0.0755395909923084 146:0.248745076160824 164:0.107857834912737 203:0.0700008408970387 216:0.160672612515706 258:0.0875620963334543 271:0.203816095936529 275:0.0620927797338296 335:0.122269941057404 341:0.0771504429298328 347:0.0758536719087999 376:0.117760642398438 380:0.113464766495887 411:0.0691781862839395 449:0.105544917837672 463:0.113464766495887 473:0.0812973141114793 479:0.116947667745771 594:0.265237085712635 714:0.0955572341046505 740:0.132215702273873 810:0.135878745220123 882:0.0693405941229553 886:0.0795319359646268 914:0.118317489783707 951:0.120368884392933 1058:0.103582476384337 1149:0.265757680956018 1563:0.159093462163014 1854:0.15400936250792 1989:0.149776957710289 2274:0.4692722910357 2558:0.15400936250792 3673:0.157723640125077 3961:0.1564240970119 3994:0.169366138058902 4520:0.179638813954791
+0 6:0.0305804146025196 13:0.101621729479817 17:0.361044936231822 37:0.0241150818824326 42:0.0304931711519859 47:0.0241232527936769 58:0.102567902887036 63:0.0110165851009284 72:0.0634363749122495 78:0.0391556586785907 79:0.0345636047084344 83:0.0264119291230689 91:0.0407251881835551 96:0.0631564023202669 98:0.0330609057374485 118:0.133496487343326 135:0.0464356639782679 142:0.00396497344234086 148:0.044801965631669 158:0.0365820546716934 164:0.119069074823028 179:0.0277833018349854 186:0.0578442819180474 188:0.0563319624040028 199:0.0476481282975958 204:0.0305966647913778 215:0.0324696024231185 219:0.0426155417906865 220:0.0817737213370977 271:0.112500839632273 280:0.0533924933582413 283:0.0382068000639553 286:0.0285582956762453 308:0.0376583174440571 317:0.0303776490377212 323:0.0436001025020188 342:0.0476122325809637 372:0.0503117622353647 376:0.0650006128543732 384:0.055231489256933 387:0.0719555033575697 388:0.318002270923112 389:0.0434365390679049 396:0.0517674647324439 399:0.0961152738464909 411:0.0763688854446961 423:0.115846402637975 454:0.0508538655435746 461:0.0557709037812816 473:0.0897477312119475 478:0.0399690843601229 509:0.0946173616399547 513:0.0381398349837382 515:0.0368231729585541 523:0.0597417191890022 597:0.0455760098221502 603:0.163701576578825 643:0.0414679032896441 647:0.23019174959897 671:0.031125943257896 680:0.140591806009084 688:0.0565794823912256 725:0.0740987639092939 740:0.0729794055274882 756:0.0676724275252421 771:0.0540714866283825 774:0.0571746579232728 784:0.200193570408137 789:0.0523703388687025 808:0.0531950616433364 867:0.044801965631669 900:0.0743931856091107 906:0.059637744626791 917:0.0620021949646224 963:0.0432427551699575 1006:0.0714523064787302 1020:0.0651534505963878 1028:0.0620021949646224 1034:0.0642605187799096 1292:0.0611688284352843 1308:0.059534537411514 1372:0.0712132491327319 1423:0.0743931856091107 1486:0.0696453431854633 1598:0.0533263726005624 1620:0.0616389404062489 1697:0.0696453431854633 1776:0.0590296264615231 1818:0.0826727321144561 1858:0.065622249159115 1873:0.0674896208149825 1884:0.1532968846173 1972:0.0740987639092939 2024:0.0496370537067856 2042:0.0654642303682495 2045:0.171318924304259 2219:0.14650191604966 2321:0.0870590806991779 2339:0.0797689964699135 2399:0.0740987639092939 2470:0.0759661355651614 2577:0.219752874074491 2666:0.0688224873775495 2826:0.0870590806991779 3094:0.0837920904962619 3779:0.0886145171724178 3810:0.091329694712749 4085:0.101023021299717 4894:0.105728422069554 6124:0.118542302817785 7392:0.103178743670198 9433:0.256471258809507
+0 6:0.0217928489460115 13:0.144839566694666 17:0.0296879222822804 27:0.0317277747520716 29:0.0197868446943311 31:0.0415313356327487 37:0.0515561685754174 53:0.0419586176956816 83:0.0423499869368956 96:0.0337558684282612 105:0.057874873715563 119:0.342022905256598 132:0.0330435351516017 142:0.0141280078159506 160:0.049381644961631 162:0.0295075411907358 164:0.127280208369663 168:0.0809274146120029 179:0.0593985373953752 183:0.143789813683616 299:0.0451023030653812 322:0.0472170572054961 325:0.048922925797482 384:0.118080626252244 398:0.0423767960567141 409:0.0278242115913966 444:0.0715724136862313 485:0.037703259334996 502:0.075213254886736 517:0.303753111028816 570:0.0632067723490282 713:0.0544794463953903 789:0.0559818546797776 803:0.0680879161825019 861:0.0727378530967905 913:0.0568634512384023 929:0.0872661013032611 938:0.0808530882175456 962:0.147567314305287 966:0.0544200073445903 1007:0.377338935801315 1014:0.0668118802015341 1021:0.0583302054104971 1312:0.283372217295703 1327:0.0708430543239257 1489:0.25544629377661 1535:0.0808530882175456 1770:0.0930627700629419 2016:0.0878097576367162 3112:0.0938710156324871 3115:0.0878097576367162 3256:0.0965965226411541 3963:0.21597935854078 4124:0.102657780636925 5663:0.431958717081561 6418:0.110294062611822
+0 6:0.0356807104089066 18:0.0238747306982602 21:0.0269810109041547 27:0.0129867089159868 34:0.0710893553179874 37:0.0422056043541961 41:0.0205370801420447 50:0.0846700909438161 53:0.103046184383683 56:0.041176040726058 59:0.0276947799995938 63:0.00964047384062238 78:0.102793860278394 81:0.0271555883431156 83:0.034669116081606 85:0.0546653846318653 91:0.0356380954480077 96:0.0829010494892439 98:0.0578623582515228 118:0.0292052705592919 135:0.0812705207200182 142:0.00462626393441748 145:0.0374272459782287 148:0.0392056316656755 160:0.161701866310038 162:0.048311720726088 179:0.0243128149142804 183:0.0392370506070275 190:0.0382405863755323 199:0.0416962725018009 203:0.0338120832196466 214:0.0764232429207805 215:0.0284137370979963 218:0.0252993222775053 220:0.0357795729882847 224:0.0424163591992095 227:0.0634053217560024 229:0.0467137778981631 242:0.0625042871782653 246:0.0922023684828226 276:0.0346477436895782 280:0.0467230934804244 284:0.0270854582317942 288:0.0463236934791781 295:0.0378692866643239 341:0.0372655122902453 342:0.0416648606156301 359:0.14897564349285 363:0.0416648606156301 367:0.0380678163868823 377:0.0343276468635347 382:0.117522879547944 384:0.0483323754577275 402:0.0679903878633991 409:0.0227778304389722 430:0.0694255603613065 448:0.040390847966207 455:0.0325651973191045 466:0.0824259136102734 473:0.0392685504209046 475:0.0361405924115216 507:0.0238478642309721 538:0.0390807563889232 571:0.0352005780186391 572:0.0483323754577275 574:0.0333951879350239 615:0.236877130730295 633:0.0463799587320154 641:0.0352913960305073 662:0.046493271309493 680:0.0615150527871928 702:0.0531300575204179 713:0.0445986973728655 716:0.0427052889657098 726:0.0411025409799842 758:0.0934461869608489 771:0.0473172718758878 796:0.0392056316656755 819:0.0895905813840024 839:0.0710095138996094 841:0.0687081925719717 847:0.0475632634938153 869:0.0597121414074744 873:0.0515695914668295 876:0.0430440696570725 912:0.0424163591992095 928:0.0718840051861455 938:0.198567128614271 962:0.120803540202364 991:0.0473783077676722 1001:0.0522792204443505 1007:0.154451138165621 1027:0.0466076428983668 1034:0.0562335646306889 1059:0.0408846538426065 1094:0.045936917735639 1160:0.112977050660855 1162:0.0517431783621875 1169:0.100526000234447 1188:0.109837981952723 1194:0.136726893299432 1232:0.0504975952423922 1236:0.0491530854430499 1260:0.0595456399147661 1312:0.0579944942507634 1448:0.111967615151042 1468:0.0625270067947173 1507:0.0611325944439224 1535:0.0661890428714237 1607:0.173119607299595 1624:0.0564885253304273 1645:0.0509807239399761 1652:0.0534273434981916 1682:0.0625270067947173 1736:0.0638633517960689 1744:0.0613223295768572 1791:0.0625270067947173 1995:0.0577065357665316 2010:0.0653637186696445 2024:0.0434367558913976 2094:0.0790771449709244 2181:0.559450199203072 2207:0.0645905560615949 2240:0.0605804254045371 2268:0.0718840051861455 2275:0.0701933668043229 2363:0.076184296892358 2415:0.0651005328070998 2459:0.0643433219774564 2604:0.0664770013556555 2640:0.0617108596994308 2710:0.0867698508915335 2803:0.0768459537546082 2915:0.0714389499241182 3808:0.0867698508915335 4001:0.0775454396143214 4768:0.0884039641339024 5030:0.0925216006442792 5325:0.0884039641339024
+0 6:0.0281763155294627 17:0.204714556953857 27:0.0273475577447988 34:0.0748503821166708 58:0.0630029739078445 59:0.116639958617389 63:0.0203010182756229 72:0.0584492832685653 83:0.0243355382321102 92:0.0620017680260014 98:0.121847204997858 100:0.116075547847166 101:0.27385062550207 142:0.0292261159253561 148:0.082559660252222 164:0.329125147479697 166:0.210235589705891 179:0.102396398365161 190:0.161054914045614 219:0.15706117363817 227:0.0667598199538941 254:0.181285372319209 258:0.0890644241489909 283:0.0704062955303689 293:0.177789765165259 377:0.0722875449751499 382:0.082493667322083 384:0.203557720023489 402:0.143174923701929 468:0.251484998358017 500:0.0971967367751263 574:0.0703239624726798 626:0.0886426434549383 667:0.0904624740606165 723:0.0963931457146753 767:0.0898414747311916 856:0.0704888924765145 881:0.10701217394906 944:0.102772876217004 993:0.103210907586792 1305:0.0854220832912513 1319:0.0991334393504445 1332:0.115411513797835 1393:0.107529319566815 1461:0.16042974952229 1591:0.111472813095196 1799:0.161823073986917 2916:0.353940937347066 3425:0.155506213057454 6303:0.200583487124194
+0 6:0.0194255225528899 10:0.0546149410704501 17:0.0705679072704478 27:0.0377083085389609 42:0.116220618645222 53:0.249338082216712 63:0.0139960772354135 64:0.0561608459304987 72:0.0402965344828893 75:0.0131230401569931 98:0.0420023978333412 100:0.0800256573712199 109:0.071258237692741 111:0.0809884876710816 132:0.0392720834805234 142:0.0050373209145082 160:0.117379697689201 164:0.226907878299586 179:0.0352974387956655 190:0.111035662621517 199:0.0302674049020799 215:0.0412511734946647 271:0.142927270666612 307:0.0621825530898951 335:0.514455216491177 359:0.0720944719451242 388:0.0673346036014628 411:0.0485116217627337 444:0.0850634713353902 461:0.0708544317191224 483:0.0628695760439045 498:0.0665341665258291 510:0.0585394950725696 546:0.0559439116354815 559:0.463585306607947 591:0.0680871880284839 597:0.0579022762234208 599:0.060713394344988 609:0.045854148247401 620:0.0920465403108087 641:0.102472370705932 680:0.0893077917313769 713:0.0647485614658503 771:0.0686953984516212 776:0.080747119942758 962:0.0876915236188488 966:0.0646779184382713 1001:0.0758991745886113 1260:0.0864485905005457 1468:0.0907769504762839 1535:0.0960935086264116 1963:0.278151183964768 2134:0.0882141112351641 2154:0.0884812846612947 2191:0.11603028065191 2206:0.0835731743392938 2741:0.101342932075226 3099:0.12031493409139 3170:0.100265832726301 3625:0.128345217298463
+0 6:0.0265296592432598 13:0.0503775259866236 17:0.330429947649275 21:0.0229270587343855 27:0.0110354292928791 37:0.0537961887373105 42:0.0453496667490441 48:0.0231855541961145 50:0.0359741181494373 51:0.0257401610352289 53:0.204314329446747 58:0.0254232889930858 59:0.0706007476823781 63:0.00819197289369248 75:0.00768097999465985 83:0.0196400069045056 85:0.0232258992934835 96:0.0469633312982951 98:0.0245842101849942 100:0.0234197055702939 105:0.0402596199521178 111:0.0474029604540865 142:0.00589673744927175 146:0.0340323576208969 160:0.274811659171682 164:0.265620595989882 179:0.0206597646588593 181:0.0959695237832833 186:0.0215066095884748 190:0.0649897198428667 198:0.0329997617955656 199:0.0354313221268713 203:0.028731748438284 204:0.0227517916225454 206:0.0722954542398911 215:0.0241445148820883 216:0.0329739259169274 271:0.334624140000537 278:0.0327190372789476 291:0.0610097501972157 306:0.0297400470134753 323:0.0324211953692121 331:0.0296272183933812 335:0.250927641940209 341:0.031666292715291 355:0.0228098863870643 371:0.105908863994151 377:0.029169847588339 380:0.046571456653835 388:0.0788225498091736 390:0.0346200244675022 398:0.0294786596410825 403:0.0877892914124245 411:0.0567881819777104 413:0.0327695176489658 422:0.0345597406128614 423:0.0287146026210396 444:0.199152273798471 448:0.102966120907308 461:0.0414714476262238 463:0.09314291330767 485:0.0262275974759474 515:0.0273818458236031 523:0.0444241604576403 530:0.0311556767549781 546:0.0327442468326342 574:0.0851324775730588 591:0.0398517662738951 599:0.0355358485375999 603:0.0405763632953568 631:0.0254357802087653 634:0.0425800754170528 641:0.0599775829366947 651:0.0980720210652639 656:0.0374120100457695 663:0.0709400645370205 670:0.0540696713823645 671:0.023145365022216 676:0.0378976517142773 678:0.0410142779280751 685:0.0400536937021372 694:0.111542486511456 724:0.0443468445936531 744:0.0467640350426963 756:0.0503214641250702 774:0.0425152843301795 810:0.167313729767183 861:0.0505987855144519 863:0.0400536937021372 886:0.0326437732413302 909:0.0333683702627919 930:0.0331824328682 938:0.112488007130394 962:0.102652560772465 995:0.0593165169471175 1018:0.0411266999506128 1034:0.143353068983765 1043:0.0847738015520619 1045:0.0590641176368996 1048:0.0514780923642119 1080:0.0766408618138789 1094:0.039034801725663 1098:0.0425152843301795 1159:0.0385384459319458 1184:0.0499188743982647 1190:0.0410142779280751 1260:0.0505987855144519 1288:0.0497880684496177 1294:0.0430452811051922 1319:0.040002843058986 1320:0.10662610305625 1322:0.0851601508341056 1329:0.0510291477205162 1370:0.0623081043501726 1404:0.0513262803862327 1423:0.110638088736574 1437:0.0517885314115301 1445:0.0586860853967767 1448:0.0475721257820202 1500:0.0865024147103457 1507:0.0519472968740898 1591:0.0449820915808953 1607:0.049036010532632 1636:0.055319044368287 1658:0.055319044368287 1664:0.0449820915808953 1738:0.0511766528291844 1744:0.0521085239145527 1863:0.0456586837112137 2127:0.0671956419178025 2141:0.0627506790483074 2144:0.0529544319970756 2185:0.0473641401329235 2213:0.0526077687028163 2275:0.0596466696227147 2383:0.12068037788946 2604:0.0564886956971744 2728:0.0695160973827375 2729:0.0695160973827375 2783:0.0636966887297393 3096:0.0636966887297393 3414:0.145015369571585 3985:0.0704209231061696 4398:0.0679130943592491 5211:0.0647374501901999 6388:0.075121087391814 7986:0.0809404960448121
+0 6:0.0241313734063752 17:0.0657472861880478 53:0.0619480927735027 58:0.0269791890904357 59:0.149842998061112 63:0.00869331996276173 67:0.0227503276812155 72:0.125146018329995 79:0.0545491133675383 83:0.0104209856592164 85:0.0246473195897165 91:0.0321367364006013 118:0.052671842850944 135:0.0366429416146708 137:0.0329253109752733 142:0.00417174438507472 145:0.06750021419958 157:0.0407575952271606 160:0.0364537595778106 162:0.0217826039034382 166:0.0600181798456162 174:0.0589629416936947 186:0.0228228097056774 190:0.0689670774325067 208:0.0301318035619899 214:0.0689148390717814 215:0.0256221542648497 220:0.0322643141053391 227:0.0571758980398002 242:0.0281816939949254 252:0.0290256689495752 253:0.0439476689137541 256:0.0273702197470608 257:0.0487347547224604 258:0.0381392463133746 271:0.044387883633753 280:0.0421326594512219 286:0.0450713900233627 287:0.0373318497171662 306:0.0315601318206001 319:0.0364850655521438 355:0.19364677422668 367:0.0686554859451736 369:0.0359645781682868 384:0.0435838332597179 409:0.0205399621779104 411:0.0301318035619899 414:0.0594332635387804 466:0.111491642228885 506:0.0225003252745065 507:0.0215048676668529 538:0.0352411640021338 539:0.0747315050087176 570:0.046659532801938 571:0.0317422040295097 594:0.038509594779124 615:0.106802254917298 628:0.0437037838814927 643:0.03272282183445 644:0.076645733996486 678:0.0435243433660436 722:0.103317224982754 730:0.038661285807468 771:0.042668461216998 787:0.0461964432381957 819:0.040394258752052 839:0.0640329961923975 848:0.0444522298717586 860:0.0552975549424997 928:0.0648215707670696 1003:0.0425049715815386 1007:0.0464255590504524 1035:0.0491219996677099 1039:0.0587045585927184 1149:0.0385851796537383 1169:0.0453247785877653 1280:0.0529738993227339 1335:0.0432316113860342 1446:0.0419768637075554 1489:0.0471429100104432 1645:0.0459719877332116 1652:0.0481782326749379 1682:0.0563838754574289 1792:0.0949546802101985 1859:0.0632970336294261 1942:0.0521660742441806 2135:0.168585697281056 2624:0.0510554378577498 2672:0.0632970336294261 2695:0.0670815484920181 2734:0.0665910077983204 3215:0.0814195890889287 3235:0.068133329546665 3320:0.0599457923442018 3810:0.0720693618726156 3944:0.0699267825798896 4941:0.0890687098238973 5377:0.801618388415076
+0 6:0.0174970284066267 17:0.190686558069997 19:0.0531083616178894 27:0.0127367875923733 34:0.139442567723888 37:0.0206966915692317 42:0.104682664794963 48:0.0267601260603361 50:0.0830406664810018 51:0.0297085826929041 52:0.0356626565159818 53:0.033687707722055 59:0.0814854323495548 63:0.00945494877818381 72:0.0272220325070805 79:0.0593282054490915 82:0.0328100822788749 83:0.0226679533361561 92:0.0288765584505978 98:0.0851232484778596 100:0.0810911313211631 101:0.0850283666182661 114:0.0307151563774592 132:0.0530599440793865 137:0.0358099241843717 142:0.0215518629034939 164:0.306571953069901 166:0.261105685114964 169:0.0318849585375954 174:0.0320643664280715 179:0.0715347886841456 181:0.0369217909374144 190:0.0375046695220356 199:0.0408938530681465 200:0.0422578995989581 206:0.0417207079176257 215:0.0278669319889978 218:0.0496249043794168 219:0.0731493037259861 220:0.175455084211753 233:0.103459099319955 240:0.0393785357112462 242:0.0306507150715549 252:0.0315686313567561 293:0.0828033894704366 306:0.0343251405762944 312:0.0396475030318487 323:0.0374196479311371 330:0.04350368578007 333:0.0441291905931852 341:0.0730967202903176 342:0.0408630456846422 355:0.0263265406544424 357:0.0404925791013552 377:0.0336670321538209 382:0.0384204077088788 384:0.331815737779007 402:0.0333409770766925 403:0.0506619873105677 409:0.0446789698595841 410:0.389597689680011 453:0.0424281459199697 465:0.0743916497188227 478:0.0343033382734929 485:0.0302711683654181 490:0.0452681808931202 504:0.046466541017184 507:0.0233889265715145 540:0.049448615096502 565:0.0465267023681711 569:0.0613237125343453 574:0.0655050356618339 609:0.0309764383015434 641:0.0346122345535564 647:0.039512265945921 653:0.0446851797167183 671:0.0267137408262077 690:0.109332763838689 714:0.0452681808931202 715:0.0539737572044858 719:0.0941643431372437 725:0.0635950261238455 758:0.0458239359308491 772:0.0405291153986468 787:0.0502437511126251 804:0.0824130665812368 827:0.074726599276008 856:0.0328293319452175 883:0.051007397174124 909:0.0385128510238468 913:0.0456544907956723 936:0.0511839027726656 939:0.0635950261238455 946:0.0621813747673289 966:0.0436927001493028 993:0.0480692067429334 1003:0.0462288666289851 1020:0.0559177397049165 1073:0.0585630175214387 1094:0.0450528896606674 1103:0.0573149158846638 1117:0.0522040052852817 1193:0.0533189313064608 1218:0.0532131846806201 1263:0.0594145919204637 1332:0.0537514885488032 1383:0.127190052247691 1423:0.0638477126020463 1436:0.0587285672411804 1448:0.0549064332091043 1467:0.0537514885488032 1591:0.051917087294125 1738:0.0590666787375967 1954:0.0619611453885847 1969:0.0597728920917694 2047:0.060142218597697 2202:0.0613237125343453 2213:0.0607184331386951 2238:0.0673859451464102 2241:0.0611185423349818 2649:0.0724251000213662 3122:0.0907410786471013 3932:0.086702683549887 3993:0.0934192842329511 4375:0.088552825350286 5028:0.0824218122382878 5511:0.086702683549887 5627:0.0934192842329511 5672:0.193744183518199 6273:0.203477101283529 7536:0.0968720917590995 9021:0.0968720917590995
+0 6:0.0219370916814556 13:0.437394696978988 27:0.0958133246335584 41:0.0505061479754592 42:0.131247041594586 51:0.0744949241796413 77:0.0827092357971751 82:0.0822720025710406 83:0.0284201956475011 84:0.0643738811890172 116:0.117432563962446 132:0.066524488092022 142:0.0369759478949648 188:0.121230477733723 199:0.0512711177644398 242:0.0768573418297952 253:0.119854435043375 309:0.0807210617583185 315:0.155368934139993 317:0.0653749088103597 535:0.208027316708898 608:0.119686770592722 643:0.0892419420854784 648:0.160099542899736 697:0.117588097595708 701:0.315282772224957 819:0.11016354635838 834:0.11053131905375 904:0.133698392349192 998:0.121406992556753 1001:0.128568522182391 1047:0.123610099588298 1054:0.143349134606038 1175:0.116216410981018 1366:0.118862179530376 2367:0.377969320351409 2653:0.196548141566516 3697:0.203806080322287 4810:0.222048156202962 5087:0.222048156202962
+0 6:0.0339439179369338 13:0.0451195929277947 17:0.184964233022361 27:0.0197673096376496 37:0.0642419303543874 53:0.313697003123416 59:0.0421547364417044 72:0.0422481996838699 85:0.0416035960869607 91:0.054245403679578 96:0.0841234796355371 98:0.264220094403082 140:0.0479727759981275 142:0.00528129137155065 144:0.0403607395772359 160:0.0615323497472388 162:0.0367680814630651 164:0.317196816889709 179:0.222041909316296 186:0.0385239033034946 190:0.0582067032148455 220:0.108921498516326 258:0.128754755088644 271:0.0749248036944415 291:0.0546421254242563 293:0.0642548298320183 306:0.10654424079958 319:0.0615851928609302 323:0.0580747509387329 335:0.179790536941887 339:0.0528039079734014 355:0.122575227944325 377:0.0522507456718352 384:0.147135203749724 388:0.0705957922956568 409:0.0346705566494042 411:0.0508611648500596 426:0.0611149163661607 448:0.0614796561192173 502:0.0468600054627058 506:0.0759591274124886 515:0.0490479718079308 523:0.0795751675673783 539:0.0630717538683306 554:0.0861793432322341 574:0.0508314327047467 629:0.165831568477076 641:0.0537176860891355 653:0.0693507509070269 670:0.290558321164047 694:0.0999007292832764 723:0.0696747101174494 789:0.0697565879859139 841:0.104582009653076 861:0.181271037855972 862:0.065323123046184 882:0.0509805702915266 938:0.2014951306791 942:0.0878361845169957 1007:0.0783643105618763 1043:0.0759259082708091 1110:0.110849540280155 1350:0.0961627990980225 1395:0.0724917173808886 1576:0.0752525632078628 1698:0.0983144790259969 1952:0.0951735125521352 2076:0.0846579114312569 3381:0.127917457333279 5109:0.126142096973701 5894:0.264147987127699 6479:0.137432700772679
+0 6:0.0278885289917176 17:0.0379919341121652 27:0.0609035308927183 34:0.0555644078850323 37:0.065976949850816 41:0.0642082456748028 42:0.041713447909802 53:0.107389734032234 63:0.0301405023741881 65:0.0498799871970181 67:0.0394386901912325 75:0.0282604201416963 81:0.042450355058238 83:0.0361304707923357 100:0.0430837418839444 119:0.291793445110071 142:0.0126558280462787 160:0.315970950054055 164:0.0814408843465798 183:0.122672851617935 203:0.0528559690844103 226:0.162183500754056 290:0.0725024142686129 294:0.0666279321126525 324:0.0738727082427553 325:0.0626071624615394 337:0.159909322136857 341:0.0582544634334573 347:0.0572753024959753 359:0.0776275940136185 364:0.0645993927389266 384:0.0755544852523422 409:0.0356069247100604 444:0.0915919409637805 496:0.116929838931526 535:0.0661160551424605 555:0.0803474290059015 644:0.0664343696478469 670:0.0994685333936182 676:0.0697178980139097 694:0.307796420637874 714:0.0721529934055525 717:0.0706550777477752 732:0.15258476582627 823:0.0794393817883433 827:0.0595533962090423 841:0.107406517334007 862:0.0670873429478513 869:0.0933436452198106 912:0.066306407562725 1014:0.0854998381628606 1047:0.0785724902848336 1056:0.0684642147374138 1129:0.0813007352919344 1156:0.0977439194329781 1194:0.320602803366006 1340:0.0936075150639517 1438:0.0964680960725373 1599:0.0844838333749279 1636:0.101766925364461 1734:0.0964680960725373 1842:0.106867601122002 1994:0.099832930323514 2034:0.0938750755149138 2057:0.110355459979586 2141:0.115438430728554 2200:0.10058323277912 2339:0.109120821264541 2402:0.192324010752255 2410:0.0974168984714634 2425:0.110355459979586 2470:0.103918658476422 3542:0.12122114252073 3870:0.133387773238102 4522:0.138195483692818 4976:0.127884340280347 5985:0.141144426338397 6108:0.133387773238102
+0 6:0.0232730160220958 11:0.0116201328369162 17:0.0986356671105873 18:0.0138422004792853 25:0.155259393634612 34:0.020608255663517 37:0.0122350790926984 50:0.515449329112423 53:0.0199148625785098 59:0.0321140122440848 63:0.0726621737831799 72:0.0482778205889603 77:0.0389982490302315 78:0.0198660980375213 79:0.0350725275906715 83:0.0603018557117598 86:0.0401764543749163 92:0.0170706982507886 94:0.0310471774900336 96:0.0160215831189374 98:0.0335477025162915 106:0.0181005394737786 111:0.0323431260093093 113:0.0276853263696972 118:0.0169327652421623 122:0.0834994459483271 132:0.0313669752623921 135:0.117798484837399 137:0.0211694344109891 138:0.0216840249641522 142:0.0140817413487534 145:0.0216997397275739 148:0.0454616406184504 157:0.026205226719316 158:0.055681046549667 159:0.0155566051507286 166:0.173649966494866 168:0.0576159950926361 171:0.0223587014066632 173:0.0193281472590783 177:0.0269891593037186 179:0.028192389896465 186:0.0146739987817173 190:0.0221713019403447 197:0.0288341313234268 199:0.024174855436208 203:0.0392074482819388 213:0.0266968666459731 216:0.0674945086173962 219:0.0864860466871696 227:0.0183807136150049 242:0.0181195106422586 246:0.37420257415009 249:0.0590207546593232 275:0.0173890728946867 276:0.200882271874582 283:0.0387693662364835 284:0.0314074615254298 287:0.0960105305759402 288:0.0268577627192448 295:0.0219560280968235 296:0.0466369534014329 299:0.0214069532517943 301:0.0468761235388771 306:0.0202916880900566 309:0.0380608046742843 327:0.0434941878750144 333:0.0260874611479958 341:0.0216059690307809 342:0.0483132866185633 355:0.0466896807250727 357:0.0239376378739175 368:0.0315200784381656 373:0.0369199811205062 375:0.0183316116004601 377:0.0199026399867113 390:0.023621305569772 393:0.0404717672414606 396:0.0262648507070313 402:0.0591296667194314 403:0.119797585940658 432:0.02429136658699 448:0.0468359808655191 454:0.0516026501695895 455:0.0377615978697826 459:0.023621305569772 466:0.0238946364526909 475:0.10476878921128 478:0.0202787994166043 479:0.131004701545796 485:0.0178951373914217 495:0.0284982005232719 502:0.0178492728956838 505:0.037201786066535 507:0.0138266237160927 510:0.0233780172972598 513:0.0193507075731078 514:0.0274692118113478 516:0.0362521937675796 532:0.0298992534299334 546:0.0223414590827842 548:0.0878331796787052 550:0.0210679689647957 567:0.0841824662072378 571:0.0204087520013883 576:0.0253136758486427 577:0.0377442844408641 594:0.0247598676131765 615:0.0343344263644987 629:0.0315831474115206 643:0.0210392433677271 662:0.026956081328729 671:0.047376373771216 681:0.056592088068533 712:0.0712384537334656 716:0.0247598676131765 721:0.0342416771642428 726:0.0238306190609489 758:0.135446643386757 763:0.0299493964851645 767:0.0247356930998944 774:0.0580165114263054 792:0.0283762167831627 796:0.0227308203092252 808:0.0269891593037186 812:0.0289643223666888 827:0.0220877295632492 829:0.0191832282130512 833:0.0336243129298344 861:0.0345236432521347 872:0.0295103773296616 891:0.0363755918828125 895:0.0268903844446848 900:0.0377442844408641 908:0.0275047768621768 912:0.0245923505926549 942:0.0334573590437854 950:0.0281774583303891 952:0.024090228976146 953:0.0282562948390759 987:0.021111276603531 991:0.0274692118113478 997:0.0245923505926549 1009:0.0691411260581394 1023:0.0365011741485273 1050:0.0305257082649249 1068:0.030471338552255 1102:0.0309763493931892 1106:0.06626958765205 1116:0.0301535893623629 1153:0.0722618102509319 1172:0.235514718609033 1176:0.0291867610471212 1183:0.0368918349835047 1199:0.0374486077926008 1207:0.0294632328852173 1218:0.0314575651458058 1227:0.0282562948390759 1228:0.0318411835853817 1239:0.0346201782485415 1313:0.0337952901858718 1318:0.0342416771642428 1320:0.0363755918828125 1328:0.0770846793336822 1333:0.0367592103223884 1335:0.0277959033524489 1341:0.0297021515115348 1372:0.0722618102509319 1406:0.0438065430004176 1441:0.0337092865536579 1462:0.0317757894562515 1480:0.112784718068303 1502:0.0370269859799813 1549:0.0818593635634493 1551:0.0276853263696972 1568:0.0383753857807921 1639:0.0349179231704777 1651:0.0354437350019316 1652:0.0309763493931892 1714:0.0398359499074844 1751:0.0352287120987554 1771:0.0368918349835047 1776:0.0299493964851645 1849:0.031973808246498 1863:0.0311530028197569 1910:0.0316467820334417 1920:0.0388885162634109 1942:0.0335403449346405 1943:0.0310347465358849 2066:0.0346201782485415 2099:0.0751898120455353 2180:0.0416772370593951 2273:0.0438065430004176 2307:0.0362521937675796 2347:0.0480483237311895 2368:0.0416772370593951 2394:0.0398359499074844 2399:0.0375949060227676 2403:0.0388885162634109 2500:0.0411702205045863 2545:0.0523489862337878 2606:0.0512552543595474 2611:0.0313341670305729 2713:0.041419200885534 2986:0.0458477085187314 3011:0.0441704798385122 3273:0.0869207328076956 3912:0.047430959496781 3942:0.050307820715474 4585:0.0402534357754899 4622:0.0487245697374243 4817:0.041419200885534 4831:0.0523489862337878 5176:0.0441704798385122 5557:0.0480483237311895 5916:0.102510508719095 5982:0.0494721250150948 6346:0.0487245697374243 7563:0.0552258474524807 7876:0.120287748378975 9575:0.0650619009264941
+0 6:0.0366404203299183 13:0.0487038901360997 17:0.159726222683708 21:0.0443307577287504 33:0.0811024653503507 34:0.116802331791411 37:0.0346726523344099 53:0.225744713619152 59:0.0455035056645702 72:0.0456043936199531 97:0.0457261311905596 98:0.0475349532746275 100:0.0452833180977669 135:0.133530347596195 137:0.0599914748312785 145:0.122988584809453 160:0.132840950347291 164:0.0855987272870549 192:0.059180601753586 224:0.0696915823530638 243:0.13819449132925 296:0.0660815863539843 323:0.0626882049651428 341:0.0612285582198941 377:0.112803082279702 382:0.0643647529161923 384:0.0794118068623435 402:0.167565927549734 403:0.0848727665827031 434:0.0634106872632366 439:0.157963391520054 448:0.132727191135228 463:0.0900485311227381 466:0.135428699087967 502:0.0505825609172712 516:0.102734089525671 567:0.159041575530075 569:0.102734089525671 572:0.0794118068623435 631:0.0491815118170996 653:0.0748599695577294 656:0.144676451759352 670:0.104546751081064 706:0.074601632890686 740:0.104929751752983 763:0.169745533165406 771:0.077743955679303 776:0.0913831298101014 789:0.0752980463048955 792:0.0804145761244485 806:0.078665044691005 819:0.0736002511585013 862:0.0705123872300807 938:0.217501889329071 942:0.0948138846805645 968:0.101720080016936 969:0.0819574569483114 1000:0.0889711165800379 1003:0.0774460698261305 1026:0.101393130905526 1086:0.0923937408691838 1093:0.0930254240436275 1114:0.0896829405543606 1190:0.0793034134606303 1473:0.10380196492342 1489:0.0858966131402273 1607:0.0948138846805645 1791:0.102734089525671 1865:0.0869754043511231 1873:0.0970365421153193 1969:0.100136038631466 2075:0.239310839531801 2731:0.106962484027598 2765:0.111236441493331 2866:0.100443020584012 2880:0.1102050909509 3198:0.138079210918842 3999:0.127409907238967 6219:0.145250848094713 6542:0.340880124111509
+0 4:0.0245097640933748 6:0.0169989889537328 10:0.047792731311994 12:0.114593861033006 17:0.0308764686487139 34:0.045157814102894 35:0.0614882407933799 37:0.0268101015546112 41:0.0782741362435201 42:0.0339009844251217 57:0.0846069992269831 70:0.0651916570925038 79:0.0384263158153162 83:0.0146818183221371 91:0.2263824846946 109:0.187071105876814 115:0.152586642073785 119:0.533573522469129 127:0.0563538491097526 132:0.0343664223939332 144:0.0336875159546326 145:0.047549527174865 158:0.0406703408931367 183:0.0498487974558877 199:0.0264865606671708 203:0.042956635677298 204:0.0340160441622556 219:0.0947562200935668 226:0.131808340201554 227:0.241660292474246 235:0.0860118881084304 246:0.0585693511661418 247:0.0833831948289656 252:0.122680218205445 275:0.07620756788165 278:0.0489180032716321 284:0.0344107801302168 325:0.0508815393083575 353:0.0635643035651378 389:0.0482908591921354 393:0.266051126016588 411:0.0424518063916737 454:0.05653712089035 466:0.0523590918418714 501:0.0589235208323885 530:0.0465806339115779 544:0.0919119559531909 570:0.262948940146749 655:0.0429054086918391 715:0.0699165809712025 796:0.0498088811925727 819:0.0569102758269818 876:0.0546854332019601 906:0.0663026564756142 913:0.0591399611170547 925:0.0837325887691661 1021:0.0606654363180284 1041:0.08083918664931 1048:0.0769645350265296 1080:0.0572926076184448 1160:0.0717659715553115 1201:0.0722648606475278 1280:0.074633359175935 1393:0.129746539330691 1394:0.0734952383275585 1538:0.0720967792697227 1705:0.0848305066403384 1754:0.16052658414039 1865:0.0672524097930874 1896:0.205377151614677 2280:0.0769645350265296 2374:0.091325192882881 2460:0.103933029881288 2703:0.0877411548806775 2723:0.0738654314361067 3263:0.0945092086233139 4130:0.0994603285263439 4326:0.0945092086233139 4349:0.0976291113820845
+0 6:0.0137194146345072 9:0.0524754205798685 12:0.138728311874309 17:0.0373793179989141 34:0.0546684374010572 41:0.0631728941765654 57:0.0512129797779029 83:0.03554787058774 100:0.04238902088292 109:0.150979924432285 115:0.0923613493717986 119:0.215316228884927 142:0.00355764402656607 144:0.0407823959983245 145:0.057563865777161 162:0.0371522046927781 183:0.0603473821169863 220:0.0550297111964856 227:0.195037349702051 252:0.148517725282956 258:0.130099880817198 275:0.0461287679329656 277:0.0621219459295757 284:0.0416579858180014 288:0.0712467830331115 295:0.0582437333457562 296:0.18557388426492 306:0.0538286645034627 325:0.123195256537898 345:0.0503400975446328 349:0.068003168056181 391:0.0709895336498833 393:0.322083777017598 394:0.127810446091372 405:0.065237223415248 411:0.154177563710039 438:0.0764895840291419 460:0.0934527731767284 623:0.095218609792263 688:0.076150443558774 715:0.0846416131084427 719:0.0738342327201451 744:0.0846416131084427 799:0.0692033697566394 811:0.0779107710898629 834:0.0691260727819867 848:0.151634611781682 867:0.0602990591459641 868:0.0978646133052521 873:0.0793150808666604 913:0.0715953446033045 1080:0.0693589225996561 1145:0.0901150301354796 1169:0.0773055167881793 1301:0.0901150301354796 1371:0.205393079098136 1381:0.105144371811313 1421:0.0961678085711259 1438:0.189825115467893 1440:0.0849967516986641 1449:0.0878981429409272 1553:0.0955297207907725 1561:0.0913297604255243 1682:0.0961678085711259 1705:0.102696539549068 1749:0.107361259005866 1754:0.0971674303841253 1776:0.0794480975819397 1952:0.0961678085711259 2005:0.120407527511004 2218:0.101800094561745 2257:0.0989613382753696 2307:0.0961678085711259 2435:0.100944411446065 2694:0.201061458296141 2786:0.117172998600808 2803:0.236381280632903 2904:0.122920826924034 3495:0.11926646379983 4189:0.106782081404666 5299:0.142300104156032 5369:0.122920826924034
+0 6:0.0237102773144323 12:0.10655740491466 47:0.0374075381840708 58:0.0530167963737813 72:0.147554641806702 79:0.0535972231426764 92:0.0521742849005365 98:0.0512670121376723 119:0.165384688071287 183:0.0695293593452528 203:0.0599161366111789 216:0.0687626182614424 224:0.0751631999666904 227:0.337069020166226 240:0.142298601454148 252:0.114076666659929 277:0.0715739266599944 283:0.0592466672926543 291:0.0636137500521811 296:0.071269776370952 325:0.0709698329982992 335:0.104655064110038 393:0.123696493456946 429:0.0901944848242497 505:0.0568511186985143 538:0.0692524007898558 597:0.0706739817503613 762:0.210451539363618 767:0.0756013069908554 796:0.0694736839356663 800:0.0696972483912255 909:0.0695851780636449 953:0.0863615509751865 989:0.191165017138717 1023:0.111560911642345 1025:0.0963368649811462 1026:0.109353696905489 1030:0.11832202742414 1116:0.0921603755776675 1179:0.0985577917387711 1229:0.0892053953402895 1257:0.120548140253802 1289:0.107033946575542 1375:0.099205169965979 1446:0.0824887222567553 1553:0.330194287739137 1564:0.126592196499905 1989:0.128199269385578 2219:0.11358907659633 2478:0.131821930782198 2783:0.132830743378134 2931:0.119969824378349 3311:0.163951355131721 3993:0.337580696059248 4321:0.261715938824862 6539:0.159997610050294 6843:0.163951355131721
+0 27:0.19597017277336 41:0.154952851016104 51:0.114275205599453 57:0.251234246239741 74:0.137934629010152 82:0.252410486014126 83:0.130789731108247 113:0.360283080724226 125:0.180380128938642 137:0.137744250238073 142:0.0654474231395896 181:0.142021088454038 207:0.198979701726834 254:0.162384362006855 286:0.0942789094781562 351:0.119406774898761 409:0.257789063153215 609:0.119152060946116 685:0.177821112951266 838:0.443236514903507 964:0.201555409532459 1045:0.174812793576266 1179:0.209821491061894 1332:0.206757167404631
+0 27:0.248558134285592 41:0.19653394700702 51:0.289881174231057 53:0.328707443655817 59:0.265031074873594 106:0.298760889549768 142:0.0442720145531248 296:0.384886254475666 1045:0.221723240866967 1109:0.590555168799087
+0 6:0.0373149878957926 18:0.0998730436486494 51:0.0633579244328723 53:0.287375976462243 56:0.344496159113689 78:0.143336146546851 111:0.0583398289978441 118:0.0610859091606702 142:0.00725723986730539 168:0.138568642593073 177:0.0973649200217268 181:0.0787411524918604 186:0.0529372812877491 204:0.112004450349848 242:0.0653671603721745 276:0.0724694167563664 279:0.105621055951069 284:0.0566520977014576 287:0.0865908560319809 290:0.388034336504804 291:0.0750859937778403 384:0.101092269997506 414:0.0689274333523161 473:0.0821343222625752 586:0.137150906227752 594:0.178645248099545 643:0.151800522925822 715:0.230213959761654 744:0.115106979880827 876:0.0900312196608271 882:0.070054500149459 952:0.0869068647590061 1283:0.115589944808577 1333:0.132610932145933 1465:0.147656144022362 1489:0.109347513304861 1497:0.113261396442974 1625:0.1259683845117 1659:0.131227006908846 1706:0.140292523866386 2237:0.134580856336568 2241:0.130344285580207 2485:0.149422111900619 4194:0.184906231618819 4361:0.199230370973505 4491:0.184906231618819 5470:0.199230370973505
+0 6:0.00966443418646333 25:0.0725327548419481 56:0.267669425476542 85:0.059226400595487 91:0.077223132396421 92:0.0637995417717147 96:0.119757217476259 111:0.120878278588484 132:0.0586150202852096 158:0.138733839043917 160:0.0875967449567125 177:0.403474063236169 204:0.0580174187390882 215:0.0615688844819661 275:0.0649894261041552 284:0.0586906763887828 331:0.0755498628028883 394:0.27010240833871 401:0.442224524454148 432:0.0907858620948393 497:0.151258030969964 576:0.0946066116321001 599:0.271850881775624 819:0.0970655872699829 1003:0.102137535281456 1245:0.0945089413695095 1337:0.248865916205222 2050:0.124432958102611 2076:0.120518028430152 2154:0.132061552014558 2648:0.171349920888156 3472:0.153868410316006 4060:0.224780003564746 6820:0.20639951041605
+0 105:0.275681049861293 272:0.40843546267641 398:0.201857539838248 676:0.25950727861553 1607:0.335778104232558 1991:0.496502318912414 3177:0.538357176569866
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/example2/words	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9947 @@
+v
+ct
+shr
+net
+qtr
+said
+rev
+wheat
+tonn
+agricultur
+bank
+oil
+export
+grain
+inc
+corn
+trade
+rate
+soybean
+loss
+olon
+usda
+th
+div
+dollar
+share
+pct
+acquir
+company
+profit
+corp
+dividend
+issu
+import
+crop
+bond
+market
+money
+barrel
+debt
+price
+product
+coupon
+avg
+qtly
+currenc
+note
+record
+underwrit
+deficit
+rise
+depart
+japan
+prior
+crude
+yen
+produc
+country
+officy
+acquisit
+coffe
+sugar
+dlr
+stake
+lead
+mth
+offer
+manag
+ship
+farmer
+barley
+govern
+gold
+central
+mln
+treasury
+fall
+econom
+foreign
+buy
+sell
+rose
+year
+due
+week
+reserv
+dealer
+sharehold
+sorghum
+maiz
+minist
+financ
+denomin
+exchang
+oper
+agreement
+secur
+state
+cotton
+today
+surplu
+merger
+subordin
+rice
+shipment
+february
+debentur
+ga
+farm
+petroleum
+say
+intervent
+inflation
+january
+veget
+commod
+mine
+nation
+ec
+fell
+eurobond
+fed
+season
+soviet
+statist
+matur
+output
+england
+payout
+palm
+ounc
+told
+bushel
+common
+economy
+interven
+figur
+supply
+growth
+day
+forecast
+umber
+jan
+internat
+domest
+bill
+fe
+policy
+quota
+convert
+sourc
+callabl
+tender
+payment
+par
+copper
+monetary
+agre
+term
+japanes
+consum
+month
+moody
+tariff
+energy
+cut
+cocoa
+level
+quarter
+exclude
+program
+own
+estimat
+purchas
+trader
+stock
+pary
+investor
+unit
+complet
+show
+fee
+european
+shortag
+interest
+industry
+st
+gross
+gain
+good
+bpd
+outstand
+quarterly
+point
+gasolin
+union
+economist
+file
+new
+plant
+port
+ton
+world
+group
+subsidiary
+list
+index
+fund
+pay
+meal
+revis
+exporter
+extraordinary
+demand
+ad
+hous
+rapese
+report
+help
+talk
+payabl
+opec
+harvest
+secretary
+yield
+commiss
+tax
+earn
+sale
+ussr
+natur
+bid
+deleg
+compar
+oilse
+unemploy
+commercy
+split
+averag
+member
+winter
+major
+area
+beef
+undisclos
+budget
+cere
+metal
+stabil
+grower
+luxembourg
+propos
+council
+south
+transact
+include
+assistanc
+measur
+explorat
+drill
+vessel
+london
+silver
+account
+bought
+poor
+discontinu
+standard
+rd
+nd
+reagan
+zinc
+ico
+takeov
+meet
+feder
+support
+negoty
+organiz
+prime
+delivery
+enhancement
+lower
+current
+creditor
+increas
+committe
+germany
+date
+accord
+yesterday
+banker
+ministry
+mark
+west
+drop
+brazil
+adjust
+reuter
+buffer
+short
+weather
+stg
+loan
+gdp
+call
+target
+hold
+declin
+guarante
+grade
+approval
+repurchas
+non
+rubber
+feet
+total
+gulf
+senior
+proce
+refinery
+control
+open
+discount
+commun
+china
+deal
+deposit
+or
+grow
+follow
+fuel
+administr
+indonesia
+retaly
+agency
+firm
+cargo
+end
+concess
+move
+way
+lend
+cattl
+cash
+asset
+high
+caus
+paper
+cubic
+base
+band
+stabl
+acreag
+plan
+feb
+balanc
+bundesbank
+tokyo
+miner
+sunflow
+hectar
+septemb
+low
+disclos
+narrow
+work
+consumpt
+larg
+refin
+gatt
+rule
+board
+sea
+credit
+subsidy
+take
+dry
+strike
+white
+contract
+ask
+steel
+washington
+liquid
+decemb
+investment
+pact
+seek
+ne
+main
+downgrad
+fat
+discuss
+feedgrain
+seen
+icco
+spokesman
+institut
+franc
+miyazawa
+reduc
+congress
+privat
+subject
+effectiv
+gnp
+operat
+april
+taiwan
+presid
+borrow
+sign
+develop
+availabl
+carry
+registr
+repay
+session
+declar
+argentin
+want
+remain
+german
+acr
+consid
+letter
+rain
+damag
+chang
+morn
+indicat
+higher
+early
+sunflowerse
+york
+plc
+britain
+cooper
+morgan
+rais
+futur
+tanker
+semiconductor
+meat
+weekly
+india
+action
+slow
+bag
+brazilian
+lb
+cover
+pressur
+capit
+unchang
+prevy
+latest
+come
+ecu
+hit
+field
+legisl
+kilo
+start
+problem
+intent
+korea
+redeem
+lyng
+french
+income
+reach
+bonu
+valu
+minu
+princip
+part
+senat
+close
+baker
+temperatur
+far
+aid
+time
+destin
+bbl
+malaysian
+commerc
+custom
+nil
+pork
+comment
+crush
+keep
+assocy
+kiichy
+plu
+system
+bring
+fix
+continu
+labour
+mean
+financy
+may
+expect
+cost
+put
+real
+coast
+hog
+servic
+tomorrow
+gener
+imbalanc
+sharp
+ago
+worker
+drought
+sector
+ccc
+disput
+dec
+deficy
+push
+combin
+near
+rainfal
+provid
+texa
+eas
+northern
+see
+manufactur
+sole
+daily
+basy
+detail
+heavy
+accept
+iran
+reject
+bean
+processor
+repres
+syndic
+spend
+factor
+long
+licenc
+soyme
+buyout
+live
+capac
+reschedul
+us
+certif
+yeutter
+add
+held
+slaughter
+livestock
+governor
+property
+rebat
+littl
+spring
+protectionist
+urg
+amount
+situ
+interbank
+announc
+try
+past
+floor
+aluminium
+pretax
+allow
+moscow
+sold
+distil
+soft
+temporary
+busy
+merg
+saudy
+tin
+tea
+think
+resourc
+option
+present
+load
+eep
+back
+cent
+rang
+oat
+spot
+debtor
+free
+subsid
+colombia
+calendar
+affect
+food
+earlier
+mill
+afternoon
+normal
+condit
+sterl
+stimul
+exchequ
+weight
+arabia
+iraq
+clayton
+raw
+slightly
+spain
+redempt
+jame
+limit
+flour
+authority
+warn
+grew
+result
+iowa
+origin
+find
+provinc
+fourth
+jobless
+outlook
+differ
+charg
+american
+cordoba
+chairman
+execut
+richard
+pound
+canada
+textil
+award
+warship
+war
+rbd
+effort
+run
+annual
+hope
+friday
+corpor
+employment
+conserv
+fundament
+look
+decis
+transport
+mexico
+external
+number
+zone
+outright
+impose
+set
+overnight
+just
+pipelin
+moistur
+forc
+indonesian
+head
+chicago
+bilater
+need
+rio
+convers
+project
+office
+retail
+fail
+study
+land
+round
+kernel
+wage
+affily
+dump
+competit
+brother
+process
+compris
+protection
+crisy
+malaysia
+trend
+freight
+bureau
+swiss
+boost
+heat
+pik
+half
+turnov
+signup
+go
+decid
+face
+leader
+fiscal
+worth
+orang
+partner
+immedy
+remark
+visit
+july
+east
+widen
+get
+north
+bulk
+quot
+late
+principl
+launch
+ventur
+tranch
+provision
+libor
+definit
+lynch
+de
+barry
+merril
+review
+maximum
+prevent
+water
+drain
+prospect
+differenty
+specul
+mortgag
+latin
+indian
+olein
+organis
+rece
+curb
+right
+reduct
+surplus
+algeria
+schedul
+parlia
+polit
+receiv
+crusher
+restat
+effect
+wholly
+offshore
+argentina
+probabl
+director
+greec
+law
+hole
+chanc
+ecuador
+strong
+shelf
+british
+divis
+mid
+sen
+canadian
+protest
+missil
+encourag
+nickel
+despit
+eligibl
+steady
+step
+percentag
+premium
+termin
+posit
+thailand
+sumita
+holder
+possibl
+boston
+bueno
+fear
+largest
+stood
+depend
+movement
+october
+cold
+unfair
+appear
+clear
+lowest
+key
+turkey
+nearby
+coars
+egypt
+confer
+kuwait
+assay
+shift
+warrant
+request
+writedown
+versu
+give
+ban
+period
+escort
+bracket
+inspection
+stanley
+led
+cargil
+suggest
+local
+african
+nakason
+salomon
+microchip
+storag
+inra
+began
+venezuela
+attack
+data
+prepar
+africa
+revenu
+peopl
+trust
+post
+medium
+uruguay
+includ
+embassy
+respons
+iranian
+promis
+failur
+given
+commit
+rep
+workforc
+advanc
+june
+netherland
+duty
+diseas
+suspend
+don
+contain
+chines
+seamen
+concern
+bread
+entr
+pampa
+court
+construct
+statement
+leav
+facil
+underly
+requir
+favour
+la
+rape
+joint
+downward
+durum
+discovery
+mercantil
+vote
+italy
+underground
+aa
+platinum
+congression
+sugarcan
+circul
+enter
+weak
+veg
+restrict
+kan
+small
+third
+slight
+unknown
+believ
+aim
+pass
+expectat
+southern
+resolv
+offset
+devalu
+subcommitte
+moder
+river
+smelter
+bbb
+importer
+coconut
+hour
+yasuhiro
+flood
+full
+minn
+attend
+grant
+breakdown
+bale
+protect
+upward
+sanction
+senty
+carryforward
+shortfal
+threaten
+auction
+sharply
+turkish
+machinery
+air
+fob
+sry
+impact
+job
+approv
+re
+zero
+comprom
+philippin
+cane
+cif
+regular
+australia
+residu
+impos
+public
+monthly
+equity
+sery
+singl
+settl
+question
+dan
+hard
+apy
+imf
+renew
+expire
+pick
+mile
+pakistan
+cyclop
+lanka
+rel
+volum
+eia
+risk
+neg
+reflect
+addition
+foster
+dutch
+weekend
+reason
+euro
+equipment
+purpos
+santa
+view
+prefer
+chemic
+usair
+important
+electron
+frozen
+press
+linse
+extend
+sustain
+comput
+leverag
+analyst
+store
+confirm
+resist
+arrang
+maker
+adopt
+cathod
+matery
+western
+collaps
+implement
+maintain
+optional
+debat
+exxon
+deny
+affair
+involv
+side
+korean
+section
+partnership
+fluctu
+regulatory
+practic
+basic
+establish
+australian
+sec
+democrat
+peanut
+gap
+ahead
+home
+chancellor
+march
+pacif
+electric
+oppos
+kansa
+minimum
+unadjust
+iron
+earthquak
+promot
+build
+order
+family
+direct
+inity
+shell
+qual
+cbt
+intermedy
+name
+sown
+accru
+releas
+interview
+proven
+employer
+apr
+enroll
+island
+wait
+survey
+eastern
+subproduct
+wednesday
+texaco
+certain
+pre
+incentiv
+soon
+animal
+yr
+permit
+mm
+test
+dairy
+durabl
+soyoil
+outflow
+avoid
+power
+extreme
+decreas
+concert
+europe
+surg
+arranger
+spread
+hand
+deputy
+lawson
+brought
+flexibl
+cwt
+smelt
+wholesal
+retaliatory
+float
+partly
+apply
+left
+switch
+difficult
+came
+airline
+ghana
+coin
+draw
+exercis
+cite
+technology
+pl
+intend
+improvement
+bp
+took
+jorio
+dauster
+depth
+city
+buyer
+county
+belt
+draft
+return
+portug
+distribut
+signal
+satoshy
+oversea
+surpris
+critic
+success
+invisibl
+dakota
+form
+gave
+rotterdam
+beet
+ceil
+ownership
+officer
+anty
+summer
+plantat
+specy
+speak
+asc
+greater
+insect
+provis
+qtrly
+fertil
+especy
+matter
+packag
+abroad
+se
+volcker
+thou
+ibc
+perform
+predict
+s
+xon
+stand
+copra
+pod
+labor
+recess
+done
+tension
+dilson
+funaro
+link
+goldman
+exist
+aluminum
+join
+night
+chip
+advisory
+wide
+surfac
+necessary
+modest
+tight
+block
+inventory
+cake
+tonnag
+coal
+industrialis
+nearly
+gallon
+inflow
+basin
+kuwa
+sluggish
+broker
+room
+monday
+act
+glickman
+particularly
+chaco
+formosa
+corrient
+mision
+transfer
+rupiah
+second
+quebec
+attempt
+altern
+potenty
+placement
+extensiv
+vary
+pest
+basket
+parent
+determin
+newspap
+twa
+doubt
+petroleo
+p
+independ
+intention
+deliv
+place
+deprecy
+widespread
+newly
+nigel
+sach
+strength
+businessmen
+reform
+prove
+undersecretary
+janeiro
+affirm
+petrobra
+m
+violat
+slide
+spanish
+huge
+feasibl
+depress
+singapor
+highly
+forward
+respect
+herrington
+exclud
+shearson
+locat
+swap
+degre
+asa
+consist
+sink
+campaign
+idea
+zealand
+actual
+appropry
+threat
+lockout
+noranda
+barg
+feel
+broad
+peru
+disrupt
+achiev
+rally
+design
+warm
+chief
+informal
+snow
+arab
+tx
+break
+reopen
+al
+will
+line
+apprecy
+indirectly
+research
+informat
+aegean
+motor
+person
+paul
+expens
+well
+handl
+dilut
+stress
+taken
+panel
+confid
+case
+oecd
+adjustment
+suiss
+potato
+halt
+danger
+solut
+hear
+region
+item
+worry
+km
+flow
+juic
+occur
+lehman
+light
+access
+improve
+peak
+amstutz
+quantity
+guesstim
+pig
+oppose
+outbreak
+shipown
+emergenc
+suffer
+multy
+revolv
+fresh
+scheme
+rudy
+boschwitz
+expenditur
+novemb
+coordin
+reluct
+edibl
+mainly
+usual
+regist
+improv
+empty
+stc
+lira
+steadily
+belgium
+goal
+delay
+known
+difficulty
+fallen
+make
+engine
+expand
+restructur
+denmark
+saw
+cabinet
+deplet
+slower
+solv
+cyl
+utility
+identify
+deflat
+primary
+oct
+similar
+sever
+america
+jun
+drawdown
+summary
+elevat
+weaker
+vein
+stagnat
+banqu
+lose
+highest
+inflationary
+replac
+enrollment
+revers
+owner
+employe
+approach
+rica
+hundr
+election
+obtain
+guess
+preliminary
+lobby
+sow
+row
+ow
+tough
+final
+meatpack
+structur
+repair
+thousand
+inject
+rumor
+express
+met
+paid
+palladium
+broke
+thursday
+kind
+diplomat
+progress
+formal
+away
+watch
+citibank
+cuba
+shut
+party
+resum
+televis
+refer
+inter
+nebraska
+technigen
+influenc
+newslett
+quickly
+bb
+favor
+mint
+broadly
+stoppag
+tobacco
+john
+variety
+role
+excessiv
+obligat
+introduc
+thought
+life
+preced
+august
+substanty
+moment
+content
+subscript
+refus
+thay
+baldrig
+santo
+tighten
+slowdown
+consolid
+lack
+yellow
+applicat
+scale
+jose
+bad
+top
+disast
+margin
+increasingly
+hurt
+irrigat
+cd
+finish
+separ
+strait
+grown
+recommend
+search
+chase
+relief
+strateg
+hr
+stronger
+global
+multilater
+retain
+autumn
+equival
+mity
+window
+secondary
+upgrade
+seller
+hormuz
+respond
+criteria
+bleach
+deodoris
+butter
+malcolm
+underlin
+exampl
+coury
+california
+gencorp
+soar
+speech
+argu
+plywood
+lawmak
+plaza
+alleg
+kill
+aaa
+tuesday
+claus
+calcul
+cpo
+mobil
+tell
+old
+attribut
+featur
+smaller
+signific
+red
+dixon
+better
+guaranty
+opposit
+soil
+socy
+poland
+expir
+fully
+rapid
+daniel
+consult
+pattern
+destroy
+parliamentary
+roll
+cheaper
+fairly
+objectiv
+levy
+visibl
+bullish
+tonight
+health
+defenc
+category
+vice
+unsecur
+citicorp
+have
+ivory
+employ
+communist
+grace
+apparent
+iadb
+costa
+cheap
+luy
+baa
+sept
+announcement
+bangladesh
+stanc
+bearish
+recovery
+herd
+allocat
+benefit
+claim
+goe
+shipbuild
+gmt
+lloyd
+drexel
+arabian
+worst
+lift
+ag
+body
+smith
+stapl
+flat
+longer
+robert
+slip
+kanon
+bra
+caution
+spr
+publish
+necessarily
+silkworm
+gafta
+lot
+regard
+jointly
+serv
+retend
+unusu
+enrich
+iraqy
+upgrad
+bullet
+wet
+green
+complaint
+indirect
+invit
+street
+defin
+israel
+pump
+burnham
+prev
+abl
+intens
+manila
+decoupl
+contribut
+disburs
+wall
+size
+stick
+agent
+diesel
+manaspa
+xuto
+asian
+risen
+guilder
+wty
+suspens
+gram
+regul
+insuranc
+weaken
+anger
+sensit
+cauty
+ocean
+chile
+upper
+dm
+steelmak
+lo
+withdraw
+ill
+arrive
+military
+swing
+aviat
+welcom
+idl
+cattlemen
+broadcast
+pat
+spur
+sought
+midnight
+technic
+rely
+assistant
+hondura
+healthy
+rupe
+sail
+aggressiv
+convinc
+bloc
+san
+tex
+nomura
+mexican
+send
+mechan
+adequ
+creat
+precy
+pend
+acceptanc
+headquart
+lme
+unsolicit
+massiv
+emirat
+front
+purol
+acceler
+boycott
+bear
+ground
+virtu
+sweeten
+spark
+florida
+concentr
+poultry
+scope
+naval
+restor
+class
+forego
+qatar
+compon
+wind
+reaction
+benchmark
+sent
+merchand
+do
+poll
+mideast
+black
+fair
+discov
+book
+edg
+consensu
+controversy
+rock
+defens
+middl
+assign
+marin
+louisiana
+margarin
+undermin
+ambassador
+conflict
+priority
+kobena
+erbynn
+colombian
+tighter
+complex
+navy
+warburg
+pigmeat
+underwritten
+avert
+gradu
+constraint
+nato
+sweet
+user
+consider
+ha
+prevail
+prompt
+ibp
+big
+rest
+station
+react
+angele
+lambert
+contact
+active
+easier
+rouen
+reply
+specif
+correspond
+daiwa
+know
+accus
+specialist
+contrast
+friction
+agenda
+zack
+hutton
+tap
+toledo
+aggregat
+stay
+srw
+save
+salary
+alvite
+geneva
+household
+cypru
+crew
+won
+particip
+illinoy
+worsen
+merchant
+thing
+hrw
+spokeswoman
+dominican
+repe
+syrup
+fructos
+nv
+emerg
+portland
+ongpin
+defend
+jaim
+mmtc
+trip
+dispos
+activity
+countertrad
+hostil
+tallow
+earmark
+paz
+element
+redund
+car
+coverag
+larger
+jungl
+upcom
+lost
+fcoj
+particular
+resal
+comply
+republican
+stage
+comparison
+fnv
+enabl
+liber
+mouth
+troy
+attractiv
+approve
+mob
+turn
+commission
+alaska
+indefinit
+soyabean
+hernandez
+grisanty
+peter
+remov
+unilater
+southeast
+farmland
+check
+bullion
+gilt
+evalu
+petrochem
+saturday
+jump
+auto
+injury
+petrol
+lumber
+hover
+leahy
+histor
+sweden
+branch
+calm
+issuer
+hgca
+protein
+instrument
+stop
+pledg
+annum
+drift
+ufcwu
+em
+appeal
+unrest
+vital
+barney
+harbor
+jute
+best
+cours
+mix
+caiss
+tehran
+biffex
+enterpris
+authoriz
+manhattan
+assess
+expensiv
+begun
+fire
+clearly
+submit
+rig
+naphtha
+ortner
+est
+strongly
+paddy
+cumul
+correct
+heaviest
+spell
+fernando
+leas
+ferry
+countervail
+asia
+tree
+maritim
+explain
+expansion
+karl
+insist
+ohio
+tradit
+perman
+invest
+oilfield
+strategy
+ready
+tom
+possibly
+calif
+certainly
+unctad
+lake
+ba
+indianapoly
+bolivia
+rand
+sure
+managua
+striker
+sceptic
+sunday
+algerian
+describ
+switzerland
+groundnut
+deterior
+hedg
+navig
+belgian
+foot
+reneg
+westminst
+trigger
+estate
+brief
+alejandro
+cyacq
+pcc
+play
+await
+crucy
+blame
+choic
+telecommun
+majeur
+recov
+match
+type
+fact
+edouard
+kenya
+balladur
+midday
+piedmont
+significantly
+resid
+bottom
+sour
+stabilis
+milk
+brown
+bu
+canary
+georg
+onic
+refinanc
+endors
+injur
+consecut
+restraint
+specialty
+explore
+steve
+experienc
+adviser
+chrysler
+statu
+relat
+ontario
+telephon
+nikko
+waterway
+seed
+domin
+scant
+ratify
+vt
+compet
+dormanc
+pellet
+allowanc
+onward
+otto
+royal
+rival
+worldwid
+extract
+intersect
+border
+stangeland
+satisfy
+pretty
+citru
+strengthen
+sichuan
+csce
+moratorium
+twice
+advisor
+biggest
+read
+spent
+creek
+impetu
+panama
+northeast
+fruit
+pessimist
+overvalu
+conduct
+legal
+cert
+dwt
+bolivian
+arrival
+interval
+examin
+petit
+persuad
+outside
+balao
+extension
+strict
+lesly
+lock
+bob
+poehl
+absorb
+yangtz
+address
+outlay
+intellig
+persian
+inadequ
+nomin
+exposur
+membership
+tackl
+fast
+stockton
+amselco
+taft
+drive
+estenssoro
+aggravat
+licens
+warner
+rebound
+rye
+ratio
+excess
+simply
+flag
+collater
+groundnutse
+closur
+itc
+receipt
+stockpil
+refund
+joe
+coupl
+factory
+pace
+peabody
+borg
+carl
+centr
+excise
+yugoslavia
+penal
+hl
+admiralty
+hecla
+isolat
+pdvsa
+forum
+cabl
+ab
+mar
+introduct
+upham
+elect
+volatil
+complain
+great
+authoris
+compens
+platform
+advis
+drew
+standstil
+site
+faster
+slump
+gather
+expirat
+happen
+henan
+physic
+mind
+shrink
+glenn
+inform
+approxim
+louy
+connect
+retir
+behalf
+willy
+clercq
+arturo
+annualis
+gone
+mutu
+peke
+semy
+nicaraguan
+plastic
+praecipuum
+comibol
+kidder
+greek
+steer
+shultz
+anhuy
+glut
+climat
+opportun
+consequ
+arm
+gy
+frost
+automat
+slim
+admit
+badly
+amendment
+francisco
+tran
+scrap
+justic
+alumina
+programm
+iv
+shortly
+salvador
+evidenc
+alcan
+network
+burden
+lipc
+allen
+fulfil
+begin
+insufficy
+am
+noaa
+fla
+bancorp
+inch
+univers
+cross
+amoco
+trap
+suddenly
+liabl
+republ
+road
+bulletin
+portion
+revalu
+brokerag
+nppc
+soy
+quiet
+kept
+willing
+newmont
+harry
+understand
+radio
+diamond
+ally
+elabor
+diminish
+flight
+method
+rostenkowsky
+david
+venezuelan
+arrangement
+exportabl
+chemlawn
+advers
+allegheny
+shown
+self
+percept
+lay
+attract
+subroto
+haven
+uranium
+tabl
+mthly
+debit
+suit
+imminent
+tinker
+usage
+impossibl
+nigeria
+houston
+midwest
+envisag
+persist
+veto
+monitor
+payrol
+chevron
+straight
+cutback
+pursu
+guatemala
+aircraft
+morocco
+issuanc
+sheet
+paralys
+ming
+observer
+undervalu
+popul
+el
+minneapoly
+built
+minework
+uk
+win
+dramat
+lender
+seaforth
+centigrad
+srd
+mediterranean
+defer
+unlead
+format
+stockhold
+extent
+felt
+quak
+timechart
+stem
+graze
+sulphur
+track
+prohibit
+friendly
+slifer
+sun
+tour
+norway
+wors
+bidder
+amarillo
+atpc
+plain
+wood
+cuban
+metr
+mij
+graan
+conoco
+bran
+swedish
+bare
+satisfactory
+instruct
+toler
+exemption
+strain
+medic
+sa
+echo
+norwegian
+telex
+ireland
+dormant
+choke
+sponsor
+accident
+jakarta
+lbo
+victor
+general
+video
+harbour
+dw
+eurodollar
+missoury
+exploratory
+repaid
+analysy
+canal
+confront
+struck
+crown
+implicat
+ringgit
+plung
+center
+handler
+slowly
+kenyan
+undertak
+danish
+backlog
+charter
+zambia
+overshoot
+charl
+quick
+eradic
+fortun
+expert
+baltic
+fleet
+punta
+internal
+wagner
+costly
+cuenca
+martinez
+du
+divest
+answer
+learn
+rare
+meter
+event
+unabl
+fish
+continent
+investig
+fight
+presenc
+aground
+preserv
+testify
+occident
+ensure
+sufficy
+sit
+climb
+dictat
+harm
+select
+cftc
+von
+usx
+railway
+hint
+tire
+writeoff
+entire
+focu
+justify
+journalist
+afg
+allan
+keng
+lim
+yaik
+pit
+conclud
+keat
+postpon
+chv
+reintroduc
+constant
+nicaragua
+ideal
+closer
+interior
+chart
+circumst
+austerity
+illegal
+czechoslovakia
+subscrib
+settlement
+comprehens
+northwest
+drum
+renegoty
+gephardt
+laboratory
+eventu
+columbia
+bound
+meant
+colleagu
+cook
+vy
+happy
+congressmen
+oxy
+pictur
+cincinnaty
+procedur
+lombard
+deadlin
+sound
+fujitsu
+scientist
+hisham
+notabl
+carbon
+lmfe
+voic
+bonn
+amid
+espinosa
+expansionary
+resumpt
+unanim
+deep
+pie
+refrain
+drastic
+nspa
+bay
+southwest
+redress
+adherenc
+freez
+quit
+narrowly
+chill
+latex
+aside
+attach
+brusca
+slack
+soya
+heavily
+citruspulp
+sunm
+eiu
+phillip
+jet
+traffic
+interrupt
+nov
+surpass
+hardly
+driven
+ivorian
+displac
+furthermor
+indic
+dismantl
+jurisdict
+rebuild
+collect
+guangdong
+tend
+amend
+andrea
+equal
+hanov
+chuck
+midland
+notic
+attitud
+frustrat
+realis
+soyproduct
+drug
+mild
+intransig
+arbitrag
+phenomenon
+mount
+gro
+octane
+rudman
+mississippy
+rout
+primarily
+popular
+fieldwork
+sao
+paulo
+jorg
+rapidly
+optimist
+neutral
+marathon
+distort
+slash
+herald
+desir
+apartheid
+liquefy
+publicly
+formula
+mario
+shower
+weizsaeck
+phase
+forese
+ability
+euroyen
+bennett
+alloy
+staff
+enact
+ty
+hill
+lyonnay
+windfal
+supermarket
+overhang
+magma
+cropland
+meteorologist
+upturn
+liberal
+gem
+indiana
+pois
+exception
+individu
+sumitomo
+hamper
+passag
+uncertainty
+javy
+tendenc
+frankfurt
+gsm
+malt
+essenty
+zimbabw
+tool
+club
+gramm
+credibl
+pilot
+hunger
+nino
+anticip
+gazet
+tenant
+robust
+delhy
+elimin
+carlo
+warplan
+bahrain
+condens
+spotlight
+weinberg
+caspar
+doubl
+painewebb
+divid
+ian
+auspice
+install
+civilian
+directly
+flatten
+elmer
+plate
+gallium
+spare
+greenbaum
+dudley
+tfb
+went
+peoria
+reorgan
+got
+jacqu
+golden
+vehicl
+indebted
+inside
+heart
+adjourn
+afford
+permiss
+cloth
+belly
+accurat
+markedly
+unspecify
+rich
+succe
+chipmak
+socialist
+momentum
+objection
+adm
+rainy
+william
+desper
+downturn
+queensland
+landesbank
+peg
+drawn
+chirac
+hike
+pose
+defus
+hungary
+inherent
+counter
+deliver
+precis
+toronto
+up
+enquiry
+precipit
+wast
+athen
+spirit
+champlin
+oz
+mt
+mitsuy
+reviv
+docu
+lessen
+kitty
+expeller
+almir
+bit
+barclay
+shorter
+accu
+bridg
+ecuadorean
+disappoint
+resolut
+passeng
+modern
+sum
+venic
+toughen
+patrick
+testimony
+baron
+inevit
+po
+lightn
+upland
+sarney
+bulgaria
+prolong
+advantag
+minor
+update
+tapioca
+coastal
+supertank
+fitzwat
+marlin
+temporarily
+team
+practis
+exce
+super
+surcharg
+hong
+installat
+cheng
+dip
+challeng
+relationship
+fallow
+dn
+pension
+fairchild
+sheikh
+blast
+strictly
+salvag
+realist
+chamber
+english
+diversify
+italian
+pin
+samuel
+christy
+corpu
+oxide
+acknowledg
+intensity
+insistenc
+okla
+angl
+wish
+lamb
+royalty
+treasur
+societ
+pickup
+integrat
+distant
+feed
+coincid
+conting
+kharg
+pariba
+mandat
+appoint
+onshore
+solid
+iiy
+alter
+steep
+hot
+surviv
+crash
+pryor
+door
+reintroduct
+ccy
+district
+olive
+sampl
+mulford
+oregon
+sdr
+sosnoff
+caesar
+apparatu
+man
+rein
+summit
+kong
+panhandl
+conclus
+write
+montagu
+lag
+roaster
+steeper
+expansiv
+kwacha
+disappear
+consortium
+rush
+roast
+humid
+congressman
+ottawa
+lighter
+adapt
+pa
+cancel
+care
+bargain
+ufcw
+carcass
+can
+default
+rumour
+lou
+martin
+tech
+roughly
+cpb
+distributor
+battl
+parana
+geolog
+thatcher
+national
+rehabilit
+compensatory
+mention
+cp
+jerry
+abide
+million
+tonen
+ration
+judg
+ppo
+seattl
+discourag
+indebt
+arriv
+nippon
+upside
+minut
+margaret
+oklahoma
+hambro
+entity
+abundant
+michael
+czarnikow
+capabl
+teeth
+mission
+rural
+rot
+hotel
+pack
+tropic
+scenario
+keen
+troop
+denver
+attention
+strip
+belief
+mont
+alberta
+catalyt
+ferruzzy
+franklin
+reimburs
+brand
+sumatra
+ignor
+propan
+papandr
+sismik
+melvin
+monopoly
+cardena
+kuala
+lumpur
+interfer
+liberalis
+subsequ
+zccm
+deadlock
+vow
+restart
+jersey
+broken
+rescu
+tone
+softwood
+excellent
+proceed
+mpl
+underway
+seoul
+parallel
+tanzania
+destabil
+bode
+interpret
+taxat
+combat
+pharmaceut
+yard
+argument
+firmer
+utah
+inflate
+remot
+extra
+last
+northwestern
+ward
+dalla
+wayne
+unrealist
+del
+yamaichy
+broader
+qualify
+lord
+gover
+advise
+starch
+advertis
+awb
+sand
+reiter
+incident
+stearn
+sens
+unclear
+adher
+clarify
+boom
+doesn
+optimism
+messag
+importanc
+unaccept
+underpin
+restitut
+equilibrium
+lawsuit
+finland
+adoption
+assuranc
+resin
+pty
+transpar
+comfort
+dow
+shamrock
+entitl
+ordinary
+speaker
+zambian
+bar
+confeder
+prais
+dead
+obstacl
+channel
+understood
+repeatedly
+audio
+squeez
+uncertain
+rail
+mercal
+abandon
+ministery
+peavey
+yugoslav
+cartel
+bass
+hugh
+brussel
+reinforc
+overhaul
+frn
+encounter
+promin
+wireless
+hfc
+mge
+forfeit
+budg
+compound
+pleas
+dilemma
+timet
+stream
+peruvian
+cesar
+gaviria
+bottl
+pierson
+heldr
+safe
+amsterdam
+pill
+iy
+electrolyt
+censu
+hamburg
+tank
+peso
+enforc
+abolish
+haggard
+midmississippy
+christma
+outlin
+count
+bae
+guidelin
+smooth
+brisk
+shutdown
+decad
+metallurg
+jim
+caraca
+aerospac
+khalifa
+nazer
+creditwatch
+chain
+resign
+clearanc
+insignific
+psbr
+wave
+mainstay
+consumm
+confidenty
+oman
+bt
+et
+decre
+escalat
+wen
+secret
+beneath
+wroblewsky
+barter
+cool
+written
+absenc
+sight
+vigor
+constitut
+libya
+psycholog
+protocol
+ridden
+assum
+hopefully
+story
+impress
+embark
+applianc
+contin
+miguel
+mountain
+tunisia
+valley
+maxim
+egg
+alignment
+exceed
+vulner
+airport
+weigh
+hardest
+earth
+provok
+dampen
+proport
+aly
+enhanc
+phil
+card
+thin
+thad
+petro
+communiqu
+miller
+vietnam
+voluntary
+path
+train
+restrain
+army
+moor
+co
+donald
+error
+coke
+intellectu
+guid
+hawk
+illustrat
+thermoplast
+kg
+erupt
+invite
+honesty
+nevada
+breed
+citgo
+poison
+assembly
+withdrawn
+ankara
+jeffrey
+sixth
+bentsen
+belong
+hunan
+jordan
+suitor
+myra
+westmin
+aware
+peseta
+laid
+finnish
+assessment
+turbul
+uniform
+alcohol
+context
+acid
+outcome
+underscor
+harwood
+imply
+curtail
+cyclic
+memphy
+alaskan
+winterkil
+arrear
+fit
+marbl
+pull
+entertain
+width
+withhold
+baseless
+deploy
+bauxit
+guerrilla
+ingot
+regain
+warehous
+spill
+victory
+neighbour
+presidenty
+exclusiv
+resort
+generalis
+ly
+miamy
+taiwanes
+archer
+breach
+rha
+woong
+ethanol
+sulfur
+crowd
+advocat
+divert
+ray
+topic
+drake
+woodhous
+forbid
+uncompetit
+mood
+waiv
+undoubtedly
+holland
+icahn
+pseudoraby
+prv
+ford
+proper
+death
+prop
+aren
+instalment
+uae
+assumption
+anatolian
+replenish
+artificy
+witter
+sim
+balletto
+amc
+contamin
+solubl
+arango
+robusta
+gilberto
+klopfenstein
+oversold
+duim
+unveil
+restaur
+fifth
+chy
+instabl
+quietly
+ceas
+en
+faith
+caltex
+sudan
+successfully
+catch
+bind
+hebey
+overrid
+remaind
+ava
+emery
+injunction
+cast
+spokesmen
+miss
+reenter
+mckee
+counselor
+metric
+amalgam
+substitut
+enjoy
+greatest
+ic
+syria
+certify
+michel
+impaty
+guard
+deriv
+touch
+polic
+valid
+agpm
+davy
+shill
+dot
+cruzado
+fill
+tet
+version
+johnson
+yearly
+achievement
+rental
+contradict
+pion
+layday
+explosion
+stockbrok
+mcente
+mcginley
+mike
+tradition
+utiliz
+truck
+quito
+frank
+lunch
+regardless
+floater
+nervou
+swung
+root
+unpreced
+shadow
+topsoil
+grassley
+parliamentarian
+framework
+b
+firmly
+adhesiv
+machin
+replant
+entry
+on
+specify
+unexpect
+morrel
+schlumberg
+boat
+felix
+suralco
+moengo
+surinam
+wary
+queen
+battery
+disturb
+divers
+cobalt
+bankruptcy
+fault
+easily
+mae
+educat
+uproot
+packer
+deutsch
+dynam
+tadashy
+kuranary
+offtake
+setback
+tv
+deregul
+giant
+garcia
+stipul
+shun
+girozentral
+brent
+deter
+chequ
+eshleman
+roldan
+portfolio
+caribbean
+hora
+axy
+portugues
+safety
+interstat
+throw
+intensify
+heard
+automobil
+cycle
+ampl
+infrastructur
+railroad
+graham
+troubl
+sack
+model
+dock
+disagre
+listen
+ail
+ukrain
+enactment
+sfr
+gmac
+shrank
+didn
+margosh
+unp
+twin
+trough
+solicit
+aberrat
+viabl
+donor
+flank
+stephen
+lima
+int
+environ
+gruppo
+unstabl
+hajim
+unwilling
+nationalis
+memorandum
+lawrenc
+fishery
+vorm
+lent
+discharg
+analys
+honor
+polypropylen
+spa
+longest
+suharto
+pazzionotto
+burdensom
+dd
+rie
+devast
+wey
+ran
+stretch
+strive
+defeat
+harder
+eat
+ratif
+theodor
+chilean
+loophol
+lukman
+rilwanu
+overproduct
+ina
+men
+grove
+inclin
+fda
+confus
+throughput
+realloc
+powder
+bigger
+montr
+baltimor
+leon
+advice
+froze
+levitt
+enormou
+wellhead
+compil
+human
+gerhard
+iwc
+husbandry
+upset
+brasilia
+residenty
+nawg
+realign
+bach
+atlantic
+dubay
+modify
+intensiv
+host
+reaffirm
+mull
+alarm
+civil
+arnott
+impery
+dale
+chem
+novel
+dialogu
+accumul
+hagu
+harper
+justif
+logist
+butan
+sabah
+ambity
+wrangl
+word
+vast
+gaug
+utilis
+lesser
+emphasiz
+cope
+shed
+tunnel
+neb
+axp
+rothschild
+nymex
+nudg
+melt
+clarif
+impend
+dole
+beach
+temporao
+nwbl
+transatlant
+franca
+midsess
+reset
+capsiz
+grip
+dismiss
+function
+wor
+hpr
+ichy
+rank
+equat
+transmiss
+routin
+outline
+disciplin
+necessit
+guinea
+shape
+spoke
+dismal
+le
+aug
+sub
+divestitur
+easy
+carey
+alan
+kansay
+memory
+allevy
+maria
+temper
+interim
+heighten
+outturn
+recognit
+melcher
+fhlbb
+assur
+reynold
+wright
+dominion
+relax
+star
+antara
+tenn
+gramley
+absolut
+lesson
+unsuccess
+fraction
+reliev
+hesit
+stockdraw
+century
+nearer
+mca
+focus
+wilson
+leaf
+penalty
+synthet
+patent
+conabl
+bor
+tamura
+laden
+dynamit
+tremend
+funer
+bow
+bonus
+dean
+cochran
+realty
+beneficy
+feedlot
+erodibl
+deduct
+philadelphia
+task
+bolster
+uncommit
+num
+simultan
+thasso
+cypriot
+mty
+papua
+remitt
+wider
+euromarket
+duesseldorf
+mitig
+budgetary
+dy
+opinion
+nuclear
+hydro
+surround
+tent
+leg
+jamaica
+tract
+euronot
+criticis
+growmark
+travel
+signatur
+heinz
+typic
+slap
+lyle
+bv
+bubbl
+granma
+pemex
+mexicano
+rhetor
+emphasis
+ex
+dreyfu
+maryland
+cmo
+brodersohn
+schroder
+runner
+certainty
+secretariat
+uss
+furnitur
+convent
+implicit
+staunch
+titanium
+unofficy
+istat
+bert
+yemen
+client
+atmospher
+carrol
+flaw
+cacex
+ahm
+urgent
+somebody
+stenholm
+likelihood
+reconven
+taxpay
+overse
+incur
+drink
+accession
+coca
+concept
+frame
+francoy
+mandatory
+box
+emphasy
+cpc
+consent
+inspect
+richmond
+lac
+evapor
+turnabout
+kingdom
+planter
+toll
+ethylen
+tenth
+choos
+fiber
+recognis
+softwar
+sudden
+alcoa
+greenmail
+liner
+kilomet
+timber
+efficy
+segment
+recur
+amazon
+dept
+jean
+viacom
+ramirez
+concepcion
+tribun
+edward
+ouko
+scienc
+mcf
+bro
+soften
+helmut
+brasil
+counterpart
+disastr
+frequ
+scott
+sul
+grosso
+pure
+vicy
+shoot
+collid
+femal
+motion
+sort
+background
+bail
+policymak
+superpow
+environment
+disclosur
+devic
+accommod
+bruce
+evan
+expery
+heller
+smit
+ball
+valencia
+label
+viru
+commemor
+fahd
+unlimit
+siemen
+westpac
+spe
+roubl
+influenty
+trinidad
+sheer
+slb
+castor
+holiday
+engag
+amo
+wagon
+highlight
+butadien
+lankan
+sunshin
+sanford
+litig
+refriger
+phelp
+random
+subdu
+cap
+risky
+porla
+endanger
+greatly
+whichev
+true
+brian
+omission
+reloc
+ceremony
+automak
+burn
+spin
+alert
+dart
+dam
+voyag
+gcc
+licht
+tourism
+walter
+hydroelectr
+mer
+son
+prematur
+paso
+johannesburg
+romania
+sidelin
+reflat
+mo
+clash
+fao
+housew
+ft
+stimulu
+token
+procur
+multin
+predatory
+cawl
+territory
+raid
+barend
+plessy
+downstream
+scatter
+somewhat
+offical
+edition
+irritant
+code
+gear
+amusement
+wound
+huckaby
+retr
+verif
+redistribut
+sett
+lindenberg
+resold
+telecom
+grand
+merit
+hackmann
+hoc
+bahia
+oruro
+ultimat
+mitsubishy
+embarrass
+era
+leach
+ery
+unload
+fatty
+narragansett
+dilig
+nomine
+dupont
+charity
+syndarma
+pity
+offal
+bone
+molpu
+ham
+incorrect
+cheapest
+fujy
+esso
+occupy
+chacapalca
+robin
+andrew
+outward
+imposit
+uproar
+hertz
+eurosterl
+henry
+deflect
+plummet
+rebel
+bangkok
+discredit
+hudson
+sto
+manner
+chien
+cola
+detect
+cushion
+irv
+byrd
+sloan
+creditworthy
+zeebrugg
+townsend
+propon
+warmer
+plough
+barber
+pool
+tug
+ge
+caw
+zair
+iso
+gravity
+seat
+carson
+festiv
+techniqu
+clinch
+businessman
+yuan
+transship
+buoy
+cso
+ica
+politician
+tanjug
+seneg
+resembl
+seafar
+induce
+incorpor
+jiangxy
+outstrip
+carefully
+delta
+csx
+arizona
+visnew
+proxy
+jr
+tertiary
+wang
+forex
+concession
+unfavour
+imo
+king
+gidel
+rosario
+banner
+orient
+counterproduct
+orlean
+ronald
+treaty
+nzier
+ht
+bko
+epac
+antitrust
+composit
+pennsylvania
+kock
+unavail
+reve
+stone
+mass
+supercomput
+ralph
+nervous
+exactly
+withdrew
+pc
+gao
+geodom
+arifin
+siregar
+ramadan
+competitor
+asbesto
+exert
+yearend
+knowledg
+bolivar
+excit
+nikkeiren
+otsuky
+bookrunn
+premy
+exhaust
+streamlin
+technolog
+monopol
+arabl
+meaning
+franco
+anxiou
+southwestern
+donaldson
+jeddah
+oblig
+mere
+der
+wrong
+overtim
+grime
+engage
+pronounc
+demonstr
+wire
+undertaken
+treatment
+panic
+minnesota
+kangyo
+plane
+imper
+leadership
+fomc
+contractu
+inse
+refloat
+flumar
+madigan
+arrest
+villag
+windy
+chry
+adjacent
+assist
+csr
+havana
+geography
+commerzbank
+monsoon
+welland
+loewy
+islamic
+manuel
+sieg
+penn
+stamford
+owen
+shock
+hors
+pave
+taupo
+lpg
+unocal
+command
+stringent
+stricter
+outspoken
+iceland
+doe
+uneconom
+automot
+prudenty
+lull
+chapter
+ineffect
+riyal
+capita
+dealt
+hire
+kaunda
+ethiopia
+kramer
+hail
+louvr
+wmx
+rexnord
+rex
+plea
+grey
+trump
+boundary
+croo
+lufkin
+notify
+recogn
+salaam
+dar
+lobbyist
+internation
+unify
+gsp
+outpace
+occurrenc
+lawy
+disinfl
+lago
+deplor
+transit
+resurg
+hemispher
+anz
+injection
+ny
+beverag
+nederland
+carrington
+orderly
+mombasa
+den
+perceiv
+unsettl
+unwill
+carryov
+wisdom
+russian
+gluten
+grossly
+pasta
+turgut
+ozal
+sir
+arbitrat
+obvious
+melnikov
+found
+lire
+buydown
+pro
+midwestern
+mccarthy
+kaohsiung
+richfield
+nigerian
+grave
+ludwigshafen
+billiton
+paranam
+uphold
+worthwhil
+cie
+germin
+splinter
+baromet
+chair
+disposit
+sporad
+chocol
+pare
+volcano
+counterparty
+stiff
+belgrad
+gm
+spc
+discomfort
+houphouet
+boigny
+forthcom
+clone
+sooner
+garden
+freedom
+maoist
+styren
+misunderstand
+hardship
+polish
+patricia
+gordon
+society
+shrug
+inefficy
+lengthy
+antonio
+deliber
+explor
+upheld
+wine
+motiv
+foundat
+vain
+stormy
+additiv
+slope
+namibia
+narj
+eurofer
+gundy
+jury
+mail
+renam
+anniversary
+attain
+transmit
+clean
+entranc
+craig
+eagl
+md
+amro
+kenneth
+off
+assume
+turnaround
+strand
+deceler
+regim
+saito
+unresolv
+manoeuvr
+clearer
+cheat
+abolit
+ridicul
+auditor
+trace
+supplement
+habit
+enjoin
+allotment
+aspect
+arc
+tide
+statistician
+bitter
+jack
+harcourt
+arkansa
+billion
+ann
+seiz
+regret
+layoff
+exact
+simpl
+conceiv
+sugarbeet
+arbitrageur
+comdata
+southmark
+breakup
+kleckner
+spearhead
+slab
+bangemann
+heap
+sunbeam
+shop
+fuller
+migrant
+unprofit
+tactic
+bleak
+resily
+howard
+bern
+tip
+philip
+expedit
+reportedly
+avaj
+skeptic
+gasp
+sioux
+unpaid
+norsk
+freer
+herman
+portend
+aruba
+alterat
+tripl
+brace
+cam
+austria
+bright
+bcf
+fibr
+compagny
+forgiv
+bernard
+shoe
+briefly
+knock
+cholesterol
+kritchevsky
+noon
+wildlif
+thick
+object
+bbc
+torn
+kawasaky
+uganda
+lp
+young
+peasant
+accrual
+male
+wipe
+gustavo
+bours
+constantin
+boot
+gambl
+park
+thoma
+santiago
+sister
+empresa
+jacob
+semolina
+coalit
+fidel
+enthusiast
+dp
+inward
+upstream
+insider
+comex
+sovereignty
+dia
+repeat
+pentagon
+judgment
+fortnight
+ghanaian
+flesh
+mainten
+cigra
+jenrett
+mcdonnel
+curv
+ip
+van
+conrac
+efh
+rescind
+fluid
+succeed
+banco
+nec
+spadin
+copy
+commonwealth
+heritag
+deflationary
+carniv
+promptly
+suscept
+raider
+csra
+cathay
+lifo
+gh
+austmet
+asturiana
+snowstorm
+agreeement
+cmb
+berth
+ugandan
+han
+nowruz
+ardeshir
+denatur
+waiver
+dozen
+tape
+architect
+jitter
+dark
+pour
+haruo
+eishiro
+bondhold
+reoffer
+cordero
+febr
+leao
+bia
+duff
+condition
+nationwid
+unsure
+lisbon
+collin
+unseason
+departur
+importat
+nstc
+gustafson
+ctc
+reced
+syeduzzaman
+agro
+hussein
+consign
+articl
+saharan
+edt
+opt
+e
+genuin
+susan
+uniqu
+finalis
+professor
+fold
+va
+contrary
+enforcement
+fujian
+cooler
+perpetu
+hardwar
+tally
+chernobyl
+brake
+bacon
+recept
+concily
+nic
+alexandria
+dim
+mcdonald
+plenty
+lacomb
+fnsea
+alfr
+wing
+blow
+jovanovich
+omnibu
+sputnik
+facilit
+coodin
+crowley
+profession
+concret
+parity
+entrepreneur
+conn
+murphy
+candid
+conven
+sympath
+petrolifero
+yacimiento
+comalco
+unnam
+fly
+nielsen
+integral
+unsold
+sympathet
+pinpoint
+pile
+fewer
+yong
+colorado
+privatis
+midy
+shall
+ingredy
+stagnant
+mhc
+student
+leaner
+anglo
+seismic
+nahum
+oversubscrib
+frere
+vaskevitch
+lazard
+verify
+cst
+destock
+cultur
+tow
+appraisal
+andr
+winner
+sc
+embargo
+arthur
+fbc
+norstar
+crack
+placer
+nogal
+spinoff
+jopl
+denwa
+kokusay
+denshin
+resettl
+smart
+forest
+chalmer
+builder
+mdbl
+akron
+keidanren
+core
+leagu
+haity
+osaka
+chosen
+angola
+copyright
+unjustify
+brierley
+scientif
+milton
+invok
+heinrich
+reciproc
+judgement
+purity
+georgia
+destruct
+preferenty
+delight
+digit
+shake
+subsidis
+omit
+maclain
+oppenheim
+baghdad
+blood
+desk
+properly
+unfairly
+sunk
+urgency
+max
+brink
+louw
+wash
+guangxy
+delawar
+wyss
+dinner
+natwest
+occasion
+pipe
+dress
+na
+madrid
+fran
+sgl
+shc
+zimbabwean
+maekawa
+annoy
+pgulf
+muddy
+oilpatch
+earner
+cloud
+gazett
+instanc
+segreg
+tmoc
+victoria
+beaumont
+fort
+andriessen
+vieux
+montana
+apea
+grangemouth
+ol
+iea
+kato
+rent
+extraction
+and
+albeit
+dinar
+ucl
+bird
+flatly
+lane
+norfolk
+pegasu
+tele
+lifestyl
+untru
+grootvley
+britannia
+shaft
+colliery
+vaal
+menu
+acceptabl
+campbel
+hay
+beghin
+vern
+complic
+hanson
+captur
+orion
+municip
+statutory
+tremor
+chung
+inquiry
+celebr
+congest
+lee
+accomplish
+government
+space
+hourly
+franchis
+hammer
+moslem
+legitim
+eighth
+aris
+lavera
+marc
+umbrella
+tenneco
+tail
+amt
+pastur
+bancshar
+wifo
+beneficiary
+similarly
+myer
+bankamerica
+suspect
+mistak
+exploit
+agribusy
+guillaum
+aquino
+corazon
+discret
+ovr
+frazy
+unc
+born
+steam
+feket
+sophist
+mason
+asean
+propaganda
+bac
+expiry
+erosion
+suez
+saddam
+identic
+represent
+usa
+thaw
+shorten
+prudent
+jail
+special
+town
+rod
+confin
+buoyant
+sky
+reactiv
+hoar
+govett
+umuarama
+paranavay
+jon
+simao
+votuporanga
+guatemalan
+maringa
+rosenbaum
+kaul
+reimposit
+reintegro
+londrina
+catanduva
+rid
+leo
+circl
+leeway
+evacu
+boliden
+fiduciary
+treat
+pratt
+geograph
+eaf
+sunter
+cgct
+lindner
+theta
+sm
+consortia
+sfx
+cdn
+icc
+irish
+disadvantag
+surprisingly
+forint
+hydrocarbon
+chittagong
+compat
+suprem
+print
+kohl
+older
+petricioly
+goldfield
+reinstat
+mith
+remind
+recruit
+committ
+imputat
+tvx
+tgt
+international
+impression
+dome
+inroad
+evenly
+retreat
+revolut
+uptrend
+gabon
+gene
+moltk
+walk
+lacklustr
+calory
+rational
+swift
+imped
+explicit
+hazard
+atlanta
+bd
+fir
+recapit
+outlet
+slid
+viermetz
+kidokoro
+seaway
+quadrupl
+awful
+algemen
+clinton
+henriqu
+captain
+icebreak
+locomot
+downsid
+numer
+ripe
+delor
+orchard
+miy
+mclean
+moham
+solomon
+conjunct
+staley
+ply
+pel
+shy
+bold
+manpow
+mislead
+sydney
+fishm
+ap
+rafsanjany
+aggressor
+ergenc
+provincy
+virginia
+chiefly
+shex
+simon
+eysken
+btu
+media
+fine
+retriev
+commenc
+onstream
+checkoff
+botswana
+unsubordin
+outweigh
+phone
+denman
+translat
+bud
+of
+dedic
+encompass
+conciliatory
+saft
+abundanc
+broaden
+destrehan
+contend
+tast
+undertook
+collateralis
+tokay
+footwear
+hospit
+anonym
+alabama
+loosen
+saleh
+eastward
+trim
+gorbachev
+agip
+tourist
+poorest
+diagnost
+spoken
+sucr
+fellow
+outer
+liquify
+refug
+mlotok
+hess
+cure
+tam
+satur
+dansk
+unissu
+moo
+paic
+bc
+edelman
+lce
+woolworth
+sandra
+bottleneck
+anybody
+lusinchy
+capital
+rome
+panamanian
+unrelat
+airliner
+invitat
+underestim
+ferdinand
+speedy
+carbid
+shield
+contempl
+apparel
+christian
+wonder
+rememb
+ring
+subsist
+ibj
+renault
+anza
+sovereign
+pocket
+rozich
+reclaim
+audit
+voter
+madagascar
+ppy
+sprinkel
+beryl
+banca
+zhejiang
+wrinkl
+intermediary
+fuell
+undevelop
+unexpectedly
+millimetr
+cgp
+siegler
+bell
+smolinsky
+irration
+ron
+eurostat
+reluctantly
+scandal
+mulroney
+sidetrack
+prt
+recover
+polyethylen
+hook
+metropolitan
+ride
+australasia
+percent
+rude
+mathemat
+stalem
+stifl
+discriminatory
+amp
+hefty
+nova
+goldendal
+nutrit
+sabotag
+even
+suitabl
+allege
+austrian
+cby
+shore
+malagasy
+jpm
+dougla
+glass
+reactor
+homebuild
+colombo
+kay
+blend
+mart
+inland
+wale
+urban
+tobago
+pillsbury
+devel
+mato
+pulp
+ought
+fortnightly
+stave
+gestur
+sacrific
+vendor
+schultz
+ev
+lewy
+istanbul
+overcom
+saddl
+nitrogen
+libyan
+ngc
+drag
+fabric
+guidanc
+recoup
+mozambiqu
+recipy
+contractor
+yugoslavian
+abrassuco
+citrosuco
+cutral
+midseason
+enof
+realtor
+undercut
+graaf
+diver
+hulk
+sank
+amortiz
+buttros
+struggl
+allegat
+singer
+distanc
+salt
+dull
+fellner
+impedy
+gibb
+bumper
+eleven
+batter
+rubio
+yukon
+pittsburgh
+flower
+pertain
+turmoil
+blanket
+hfag
+arctic
+remodel
+penny
+alex
+ultra
+teacher
+susumu
+taketomy
+length
+school
+my
+norman
+exclusion
+cathol
+cracker
+recalcul
+unequivoc
+lopez
+agricol
+apc
+crane
+inertia
+improbabl
+vienna
+mud
+wane
+democracy
+dispatch
+harden
+pire
+condemn
+oversight
+vitamin
+cosmet
+ibm
+colour
+cancer
+applicabl
+horner
+anthony
+conglomer
+relev
+violent
+oy
+zorinsky
+expose
+fred
+shipper
+musa
+pzl
+quell
+breakthrough
+magnum
+wake
+pearl
+catapult
+grocery
+tier
+montgomery
+mikhail
+inclusion
+capel
+fry
+prepay
+bayou
+recycl
+caph
+swire
+swpc
+quevedo
+patricio
+medy
+alice
+density
+transform
+accomod
+contruct
+izvestia
+galvan
+forfeitur
+micro
+counsel
+joao
+berger
+screen
+richest
+nelson
+baird
+selloff
+verg
+nondur
+slate
+abdul
+shallow
+tian
+jiyun
+indice
+toyota
+overdu
+unnecessary
+isda
+roach
+cia
+foodgrain
+swept
+suburban
+edgar
+inconclus
+raul
+radic
+haul
+standby
+superior
+convey
+honour
+shanghay
+mariano
+hunt
+champion
+trademark
+cambist
+coooper
+vicker
+nev
+revlon
+westdeutsch
+walt
+disney
+southland
+slc
+specialis
+thrust
+softer
+allowabl
+kk
+swell
+larry
+ilacqua
+exempt
+coat
+infect
+saint
+albert
+expatry
+pechiney
+preclud
+antwerp
+mercury
+skill
+crystal
+reflationary
+innov
+gerard
+lear
+junior
+brew
+game
+titl
+michigan
+impair
+adjustabl
+roderick
+accordanc
+abate
+breaker
+pry
+enrichment
+apart
+fernand
+complement
+samuray
+raytheon
+southeastern
+accompany
+catastroph
+archy
+rosenberg
+dunham
+cnp
+emission
+snap
+assure
+electro
+carolina
+penc
+bounc
+stoltenberg
+pollut
+prudho
+breakout
+rough
+prat
+armstrong
+dissemin
+pesch
+gabelly
+astral
+rko
+theater
+jeumont
+sumner
+telephoniqu
+validly
+pglo
+invalid
+submers
+khj
+zico
+lard
+garlem
+gate
+unwant
+kim
+degussa
+connecticut
+lodg
+film
+ey
+attainabl
+deeper
+unicorp
+negara
+benson
+insur
+jone
+bet
+globo
+roger
+capitol
+roman
+harsh
+cax
+fumio
+irwin
+allot
+alton
+founder
+gratify
+multipl
+und
+insure
+burma
+scene
+mamman
+prospectu
+admission
+martha
+bcom
+ditch
+spectr
+offensiv
+backdrop
+telegraph
+style
+escudo
+landslid
+laps
+pain
+alusuiss
+interag
+retrain
+tony
+newcastl
+commonly
+fragil
+smoke
+kisumu
+down
+yanny
+kilometr
+tanaka
+avalanch
+ldc
+austin
+modif
+tube
+coffin
+kurt
+nkkt
+kokan
+deng
+inspirat
+tigrel
+acute
+perfectly
+itsu
+exacerb
+wrought
+soak
+camdessu
+unalloy
+extrusion
+billet
+ipay
+unwrought
+glen
+marco
+bh
+almaden
+retroact
+depriv
+racy
+minim
+victim
+storm
+expression
+cyru
+jardin
+arco
+tate
+hoechst
+profil
+punish
+overburden
+omb
+coren
+pora
+fungu
+ppn
+farouk
+rrim
+crepe
+rric
+egyptian
+tumbl
+blip
+strenu
+electricit
+postur
+hkg
+evident
+insulat
+isa
+indosuez
+scarc
+burst
+nut
+pe
+caa
+cordovez
+privatbanken
+hecha
+stal
+mena
+wagg
+eib
+tankoku
+ortiz
+master
+swiftly
+devis
+martel
+conductor
+pivot
+column
+jackson
+sue
+welfar
+caught
+seedb
+undergo
+resend
+circuit
+seminar
+die
+welt
+minstar
+alleghany
+rospatch
+colo
+telesy
+prefix
+tonner
+adhere
+contest
+oak
+kick
+fade
+overreact
+lusaka
+cominco
+wouldn
+ldp
+kyodo
+channon
+semiconduct
+saba
+dawkin
+noir
+bipartisan
+kuroda
+shoichy
+makoto
+lopsid
+kilobit
+imy
+dillon
+indentur
+thomson
+watanab
+darwin
+diw
+voluntarily
+speed
+bnl
+gome
+denny
+withheld
+robbin
+hardlin
+corner
+insurer
+lichtenstein
+payback
+devot
+vacanc
+appointment
+odd
+rotat
+image
+bootl
+extinguish
+cpy
+protract
+colony
+threshold
+nazional
+accordingly
+melbourn
+ranch
+aqazadeh
+gholamreza
+stat
+guayaquil
+qaba
+hydrocrack
+netback
+statoil
+ecopetrol
+taqy
+qassem
+cepe
+chalaby
+gareth
+bonny
+prorat
+polym
+appearanc
+ethiopian
+seventh
+truste
+loath
+loos
+eric
+score
+fate
+tsukihara
+hbj
+hormon
+fargo
+liberia
+nem
+interconnect
+bomb
+su
+bancroft
+foothold
+cvg
+beira
+lefebvr
+codelco
+suppos
+judy
+stearin
+breath
+takashy
+lunchtim
+un
+elder
+women
+bull
+casino
+henley
+citizen
+stall
+gmbh
+pizza
+diversif
+breakwat
+thoresen
+tietmey
+schlecht
+lifetim
+idaho
+license
+idb
+rhode
+tooth
+marketplac
+kleinwort
+lie
+easter
+domingo
+pennzoil
+franz
+tower
+influx
+shipyard
+dr
+manipul
+stefan
+unbalanc
+injure
+horizon
+cob
+catalyst
+sweep
+nacion
+anchor
+cb
+kouam
+languag
+alp
+abnormal
+muldoon
+nelissen
+redoubl
+log
+koichy
+hofer
+malta
+hongkong
+unwarrant
+sally
+azpurua
+raymond
+journal
+startup
+nonrecur
+cater
+keef
+squar
+deferr
+fiat
+cement
+amerada
+eromanga
+moony
+buildup
+brkn
+pwj
+blank
+expos
+fre
+page
+unawar
+cme
+editory
+slacken
+hinder
+coil
+inelig
+remedy
+hiroshy
+exagger
+multifood
+hawaiian
+cultiv
+rodino
+hart
+accountant
+mph
+blizzard
+leak
+ramnath
+hk
+takahashy
+unithold
+abid
+leclerc
+idrocarbury
+reconcil
+safeguard
+blanca
+clancy
+reconsid
+heir
+loom
+piec
+gazeta
+amnesty
+neill
+watcher
+abrupt
+disincent
+juergen
+pretoria
+olin
+homeland
+cameron
+rpy
+freddy
+corrupt
+ferrou
+airway
+oversupply
+eager
+katz
+hawaiy
+lid
+hector
+zen
+manganes
+yasuda
+unleash
+mcivor
+gaspar
+yergin
+rabobank
+depot
+naira
+inferenc
+autonom
+joseph
+dieter
+wisconsin
+fleme
+zoet
+wedd
+trintoc
+methanol
+offshoot
+appl
+likew
+peac
+pakistany
+teck
+conveyor
+salmonella
+arkla
+chloramphenicol
+inedibl
+statut
+scandinavian
+symbol
+rainbow
+veteran
+toyko
+gary
+danforth
+greas
+ordinat
+frighten
+jamaican
+pst
+eye
+redirect
+unaudit
+fought
+amd
+mitterrand
+rady
+kobe
+substanc
+mccormick
+underton
+nepal
+familiar
+toshiba
+sindt
+asarco
+northeastern
+rata
+mel
+coffer
+dodg
+dbp
+taipey
+lure
+rigid
+alongsid
+sport
+eastman
+kodak
+nasdaq
+median
+scotland
+cruis
+reassur
+docemart
+ventspil
+westinghous
+marcel
+forestry
+anyway
+watson
+ph
+delic
+eduardo
+urgently
+amax
+karnosky
+grenfel
+stuck
+backward
+mold
+strap
+leap
+upwardly
+carolin
+mapl
+yu
+reservoir
+durat
+span
+scotia
+holm
+thrown
+tung
+wool
+gralewicz
+fritz
+kiel
+liro
+symposium
+enthusiasm
+ensur
+mastercard
+pierc
+undesir
+financier
+altogeth
+seipp
+au
+foreshadow
+personnel
+mina
+hindustan
+rack
+psy
+fals
+equitabl
+kelvin
+readily
+paperboard
+tie
+lin
+polar
+existenc
+kittiwak
+viceroy
+mccoy
+ketza
+witt
+doyon
+tebereby
+levon
+ridgeway
+cinema
+cpl
+billon
+overly
+allianc
+mask
+sleeper
+hasn
+novo
+nazionaly
+zuccherificy
+eridania
+shelv
+showdown
+discrimin
+feedstock
+rash
+outokumpu
+astro
+display
+depositor
+focuss
+deadly
+idd
+bankrupt
+andean
+hank
+mckinnon
+vranitzky
+ftc
+outperform
+wil
+presplit
+accentu
+impass
+magazin
+donat
+contenty
+erik
+render
+phoenix
+parcel
+qintex
+ariz
+bil
+tampa
+schneider
+bnr
+gwf
+klm
+anderson
+repatry
+braverman
+milan
+agrio
+uphill
+koey
+narusawa
+wrote
+flush
+ita
+imagin
+lloy
+tel
+document
+mtbe
+shin
+paint
+runaway
+iry
+administ
+juan
+steeply
+swollen
+paus
+dual
+pepsico
+rpt
+detroit
+fetch
+thwart
+hayne
+scrambl
+reimpos
+kertosastro
+dharyono
+escalant
+paton
+arabica
+ah
+cm
+unidentify
+roy
+perish
+neptunia
+milwauke
+btlr
+buckstein
+renouf
+soriano
+narr
+dubily
+messeng
+shv
+bilzerian
+irvine
+refil
+depos
+mania
+mcv
+welsh
+dal
+leroy
+mathew
+soro
+arena
+calny
+ocf
+pincu
+predat
+symbion
+fibergla
+mh
+aquir
+bankhau
+rpch
+batm
+asher
+armtek
+gardner
+kjell
+symb
+itj
+acquirer
+norcro
+redston
+ent
+fernandez
+dana
+nugent
+expertis
+explanat
+amtorg
+taught
+wally
+scottish
+counten
+anxiety
+jerom
+flare
+chicken
+albany
+java
+despatch
+amlc
+frawley
+inexpens
+overwhelmingly
+sara
+foreclos
+maracaibo
+glimps
+recaptur
+ross
+optimal
+ra
+father
+equip
+clifford
+crk
+forma
+furnac
+fixtur
+clout
+theory
+liff
+karachy
+norton
+barreto
+successor
+hurdl
+let
+infusion
+sucralos
+kain
+mackay
+politoff
+yulo
+sra
+ignore
+nick
+defy
+fare
+lean
+spite
+hitachy
+cornerston
+closest
+observ
+overwhelm
+thrift
+guin
+nsc
+gaf
+tune
+sincer
+pnb
+yanke
+bnp
+impractic
+fnma
+tougher
+nashashiby
+hwwa
+bethlehem
+kirkland
+mac
+ar
+visa
+nobl
+picken
+ko
+unsuccessfully
+abm
+inconsist
+graphic
+dram
+rediscount
+comecon
+magnitud
+roubaty
+rundown
+proof
+jen
+punch
+ironic
+gobain
+constrain
+fm
+ramon
+jeffery
+pak
+cenergy
+usg
+prudenc
+arsenal
+grape
+prescript
+mcleod
+balk
+weir
+huntington
+stern
+contractionary
+prov
+psl
+collis
+understat
+discard
+unhappy
+dwindl
+allegedly
+airbu
+gloomy
+overallot
+bureacracy
+prescott
+turben
+heel
+mueller
+lt
+like
+bin
+reproduct
+sag
+chronic
+fighter
+marcano
+invers
+scania
+ltcb
+pru
+evergreen
+saab
+epargn
+relay
+swinglin
+volksbank
+panacea
+balo
+milbank
+laury
+kontrollbank
+disapprov
+hokkaido
+bot
+inco
+lafalc
+machinea
+dnc
+multicurr
+hamburgisch
+sacrif
+garanty
+euratom
+leiner
+query
+hall
+unfound
+sroka
+macroeconom
+kerridg
+ik
+inspector
+reassembl
+stubbornly
+inhibit
+equall
+triangl
+harold
+remit
+cove
+canamax
+inabl
+snyder
+falter
+healthcar
+pete
+norry
+perry
+jano
+euromoney
+dresdner
+envoy
+afloat
+medicin
+clock
+fluegel
+alike
+isra
+shandong
+safeway
+maray
+indentify
+petrofina
+inaccur
+groundwork
+wrap
+smallest
+byron
+supervis
+vertic
+characterist
+miny
+unaffect
+probe
+biotechnology
+preussag
+blunt
+layer
+att
+richter
+catalog
+bayer
+organic
+ccr
+varity
+ln
+fl
+thirdly
+stiffer
+harmony
+regularly
+promissory
+hungarian
+substant
+ldt
+iida
+shipbreak
+mhy
+britoil
+antibiot
+grantor
+yao
+marten
+simmond
+infancy
+ok
+hal
+history
+bio
+nc
+genm
+galact
+sigma
+lubric
+camp
+formul
+conform
+enlarg
+analyz
+desjardin
+renounc
+particulary
+rollback
+readjust
+reassess
+hermann
+arden
+brewery
+reign
+shot
+jacksonvil
+aluz
+immigrat
+rby
+flew
+ideolog
+paty
+emp
+reichhold
+ascertain
+calf
+baht
+submiss
+schweizerisch
+carv
+inflexibl
+heching
+paydown
+aep
+ltv
+sulfid
+gerald
+indexat
+lightly
+perspect
+tragedy
+newfoundland
+goldston
+rebuf
+array
+riot
+overstat
+henderson
+erect
+forg
+behaviour
+cgrt
+hull
+kaakebeen
+zeebregt
+svz
+ruben
+watersid
+liberian
+habbema
+reflo
+rosenmul
+schoufour
+casualty
+robot
+hostag
+thinly
+distinct
+hann
+obviou
+flurry
+collabor
+fsb
+er
+zurich
+pine
+necess
+butler
+spray
+taxabl
+tiny
+buyback
+ruler
+ald
+satellit
+fashion
+pbt
+fronty
+orientat
+kentucky
+supervisory
+pesticid
+brett
+truer
+westbank
+cambior
+verein
+lesley
+newport
+lyon
+mauritiu
+decay
+mixtur
+robinson
+simplify
+stow
+cmac
+abn
+pfennig
+undetermin
+categor
+attorney
+bacteria
+neglig
+abort
+cha
+incom
+pet
+br
+jeep
+notehold
+transco
+sensibl
+siew
+bergsten
+heng
+hy
+markka
+unsatisfactory
+clark
+somc
+tenny
+earliest
+renov
+appetit
+hf
+mich
+vat
+rodney
+anticompetit
+visitor
+edmonton
+by
+satisfact
+seamless
+thyssen
+tab
+coven
+kampuchea
+loral
+whatsoev
+porter
+friend
+cigarett
+mmc
+ninth
+defe
+wal
+temptat
+inactiv
+corridor
+tangibl
+paramet
+flourish
+mellon
+resurrect
+bomany
+escrow
+patch
+kais
+sgep
+bureaucracy
+a
+presum
+conscy
+bty
+underperform
+exhibit
+thank
+dissid
+gurante
+halv
+paragraph
+wedg
+glw
+hemminghau
+irna
+deeply
+converg
+theoret
+rigor
+pb
+capitalis
+oesterreichisch
+resel
+transamerican
+conced
+wendy
+kredietbank
+baudouin
+compulsory
+trail
+amortis
+kaneb
+westlb
+penetr
+schill
+endeavour
+torpedo
+accessibl
+disagr
+kyat
+foam
+quicker
+kern
+blair
+norddeutsch
+mim
+affinery
+wyom
+ed
+parsley
+bush
+innovat
+erratic
+brisban
+fend
+philipp
+liu
+drove
+oral
+foresaw
+vm
+inherit
+beetl
+standpoint
+chen
+conveny
+barbara
+nat
+stamp
+hilton
+mn
+bilion
+fecom
+scrutiny
+boon
+endaka
+unfortun
+cil
+relaunch
+hock
+pte
+boy
+deem
+facsimil
+hurry
+fring
+wealth
+rip
+steven
+prestig
+garag
+mlp
+cre
+wealthy
+keersmaek
+angry
+tsba
+ual
+wy
+nar
+solvent
+kellogg
+columbu
+flown
+guillermo
+jeopard
+helm
+gq
+grumman
+explosiv
+skew
+trunk
+pessim
+tanzanian
+tanga
+proportion
+weapon
+envision
+trustco
+spokesperson
+wisenbak
+lichtblau
+ranger
+nanc
+shoup
+ypf
+nativ
+orbit
+weren
+cairo
+flt
+itoh
+okay
+pierr
+gld
+thermo
+func
+rifa
+nerco
+sake
+quantify
+dbkg
+kraft
+zayre
+dayton
+midyear
+princevil
+beauty
+pvdc
+shine
+crow
+veba
+immunity
+crippl
+till
+increment
+bosphoru
+regrett
+burlington
+specter
+shenzhen
+ongo
+thoroughly
+nz
+sword
+tasmania
+morry
+belg
+activat
+ericsson
+kdd
+linotyp
+monsanto
+idc
+dublin
+mtc
+henkel
+synergy
+vision
+suchard
+scuttl
+eny
+carbozulia
+landmark
+berman
+breakfast
+goh
+hockin
+suntrust
+fnb
+stagger
+reiner
+wim
+neglect
+newman
+proud
+nsw
+filter
+anytim
+permian
+dissatisfact
+nichola
+arnold
+microwav
+lazy
+withstand
+saskatchewan
+ppw
+pacificorp
+peninsular
+porl
+nursery
+crosby
+author
+revert
+strongest
+alien
+deepen
+rjr
+nabisco
+armacost
+fendt
+oky
+neyra
+hata
+frenzel
+carney
+her
+yamamoto
+carlsson
+clearcut
+bash
+frolov
+grappl
+pep
+holt
+cassett
+icy
+cnt
+lion
+elector
+convict
+admiral
+angel
+adedejy
+tesfay
+he
+roberto
+instruction
+inappropry
+steamship
+illusion
+wilcox
+plateau
+stripper
+ngl
+maya
+yanbu
+rahim
+rrt
+mckinley
+cnooc
+wildcat
+operatorship
+entitlement
+efp
+jukardy
+aguarico
+pancanadian
+wattary
+wam
+haltenbanken
+oapec
+chl
+shojy
+quantum
+dmp
+dhaby
+diet
+reshuffl
+abu
+ely
+assembl
+involuntary
+ferro
+academ
+sentenc
+caecl
+foncy
+equipement
+incomplet
+phrase
+ruptur
+contributor
+editor
+genentech
+megawatt
+canton
+fenner
+disgruntl
+cbkg
+cambridg
+grigg
+oriental
+player
+ernest
+reclassify
+semiannu
+mop
+sausag
+pr
+pont
+sb
+cell
+assert
+lavoro
+laser
+tag
+ek
+hasty
+walkout
+static
+metro
+gemeinwirtschaft
+fuer
+reseed
+carload
+alfalfa
+legum
+mitsy
+pse
+meyer
+crise
+fcy
+induc
+emerson
+da
+reward
+girardin
+rico
+murakhovsky
+applicant
+vagu
+elizabeth
+ss
+classify
+trial
+conner
+nobuo
+lab
+ten
+contra
+bona
+nilsson
+ncpa
+aerojet
+sarl
+ito
+plaintiff
+pantera
+doresy
+atchison
+therapy
+kuhlmann
+pant
+minory
+matthey
+deak
+alw
+allwast
+amkg
+hawkin
+arkady
+beecham
+gnb
+matra
+novamin
+laroch
+aloha
+kleen
+dental
+pensacola
+sarasota
+lft
+outbid
+kaplan
+lpx
+cojuangco
+cablevis
+monica
+smc
+amicabl
+ssbk
+gardiny
+rtb
+fcsy
+ajinomoto
+ucpb
+diaz
+mcalpin
+kistler
+kenosha
+jpn
+stora
+silent
+rosewood
+conder
+reph
+vulcan
+shelter
+unwelcom
+gtx
+chancery
+ceasar
+bpy
+magnat
+barwon
+marriott
+skp
+benequ
+eckenfeld
+hunter
+knowlton
+rban
+mne
+mdnt
+dca
+halcyon
+iml
+antill
+ariadn
+reconsider
+studio
+hollywood
+kgaa
+fragranc
+databas
+forb
+hillard
+ffmc
+sawmil
+unlist
+pac
+wit
+mitchel
+whitehead
+bally
+getty
+guy
+quo
+pall
+highveld
+vanadium
+violenc
+wasn
+viewpoint
+rhine
+endotron
+nl
+pn
+fox
+bat
+canbra
+gcn
+laidlaw
+posttax
+healthmat
+atco
+reg
+qualif
+ifo
+kogyo
+trico
+tro
+nort
+nesbitt
+foreclosur
+sear
+roebuck
+gale
+ho
+cleveland
+counteract
+courag
+thermal
+riyadh
+terror
+fbt
+bhp
+midmorn
+inn
+ind
+adam
+sama
+nonperform
+wilder
+supplementary
+stun
+solidar
+nmic
+valentchit
+camera
+fierc
+caf
+aziz
+stark
+lump
+bkb
+lincoln
+disc
+gelco
+map
+geotherm
+rectify
+glesk
+microprocessor
+bearer
+spethmann
+deb
+lucky
+nataly
+rene
+culmin
+lucr
+unfavor
+writer
+redman
+hazelnut
+caesium
+receivership
+fcc
+abuse
+transpacif
+acico
+cindasa
+burgess
+cyanid
+doug
+nairoby
+poorer
+sideway
+cede
+whittak
+penney
+immens
+reid
+tayer
+phlx
+giordano
+misunderstood
+intn
+bed
+recalcitr
+counterfeit
+hemsley
+panamax
+hss
+gibraltar
+barker
+mccormack
+ganapin
+niedermey
+ixl
+eurodebt
+sayad
+escc
+lyphom
+edf
+eximbank
+sapporo
+gasuny
+csfb
+eurocommercy
+travaux
+autorout
+eurofranc
+guarantor
+copenhagen
+seixa
+adamant
+oldsmobil
+nordic
+undersubscrib
+lmed
+embrace
+padua
+eurofima
+pnta
+nmb
+bagliny
+svetozar
+bankasy
+dg
+dcn
+duquesn
+bfce
+fond
+pentair
+kyowa
+exterieur
+atomic
+rikanov
+pankky
+okongwu
+bgc
+cocain
+osake
+fnbf
+mtech
+repackag
+reprogram
+rheinland
+fatigu
+pfalz
+creditbank
+grindlay
+chock
+jaffray
+mainfram
+mobiliar
+nasd
+hopwood
+handelsbanken
+lax
+tradabl
+etat
+gnma
+cohn
+kansal
+soc
+enskilda
+atc
+italiano
+scare
+mtch
+unrecover
+mead
+mea
+dire
+toxic
+harvard
+sunny
+vry
+authorit
+intangibl
+captiv
+ef
+rift
+overlook
+mcminimy
+awf
+bwb
+kerin
+krenzler
+iac
+kcbt
+blue
+isn
+abidjan
+revok
+carol
+greenwich
+psa
+fiddl
+rollov
+twelv
+fraud
+spun
+downtown
+bld
+transworld
+brewer
+amy
+securit
+hing
+enserch
+ub
+wako
+at
+carter
+ryavec
+allegy
+belgo
+fhl
+goodyear
+kep
+eugene
+disallow
+itt
+craft
+punit
+erod
+chemy
+walker
+tucker
+gte
+andersen
+gape
+art
+christoph
+fso
+contraven
+santana
+sq
+pad
+pemberton
+schmidt
+peat
+luncheon
+detent
+beset
+sizabl
+knew
+perc
+unilev
+highway
+granit
+repugn
+seng
+stch
+sohio
+gasper
+crandal
+bailey
+baulk
+cofac
+unrespons
+cleric
+bermuda
+barrick
+prosper
+slice
+ritterbusch
+murray
+material
+alternat
+ac
+nhy
+canterra
+marker
+love
+geigy
+ciba
+med
+bwrlf
+organ
+ir
+frederick
+basf
+capper
+greet
+reconstruct
+reput
+plagu
+warren
+boe
+grass
+decatur
+multiyear
+stainless
+quicksilv
+pere
+grapefruit
+tangerin
+unreason
+sy
+oust
+explicitly
+sanchez
+lemon
+brass
+cellular
+feeder
+geray
+involvement
+repris
+weakest
+pan
+unlawfully
+dig
+mnd
+absent
+lechin
+gsa
+verdict
+goodwil
+svenska
+apartment
+olson
+nonaccru
+republicbank
+rowntre
+mackintosh
+nynex
+aerosol
+cryogen
+bishop
+downtrend
+textbook
+undu
+stuart
+compos
+lieu
+sperry
+agricola
+finanziaria
+valv
+rickel
+darta
+harvey
+carpet
+mateo
+revolt
+phenol
+ozone
+cfc
+bisphenol
+reviglio
+raimond
+polyphenylen
+aristech
+nbh
+norgold
+moy
+reinvest
+timberland
+levin
+wirsbo
+church
+metallgesellschaft
+prawiro
+radiu
+hemlo
+maison
+technician
+guzman
+exit
+couldn
+montedison
+unquot
+skeoch
+shrewd
+politick
+plug
+scarcity
+industrial
+seam
+jucker
+shaw
+baby
+gase
+rcy
+misguid
+constantly
+sore
+tarrif
+insolvenc
+nearest
+sila
+questionnair
+unregul
+maud
+bfg
+complementary
+rele
+curty
+forerunn
+bsc
+outset
+ecolab
+nobel
+toyo
+out
+beta
+diverg
+platt
+belcher
+sullivan
+dune
+sabin
+liedtk
+devon
+alive
+lebanes
+pontiac
+hamilton
+void
+infring
+hidden
+tl
+kilowatt
+morrison
+saga
+satisfactorily
+mackenzy
+fo
+tpn
+rafael
+operabl
+celanes
+linear
+printer
+nyse
+alpha
+mony
+lebanon
+academy
+jcp
+foray
+matsushita
+tacit
+toppl
+ryan
+tmo
+junk
+backer
+lor
+freighter
+planner
+quasy
+beck
+pier
+industrialist
+hypothecair
+collectivit
+bake
+predecessor
+herrhausen
+taper
+paraguay
+hugo
+fdic
+upheaval
+gould
+tsco
+amoskeag
+tesco
+wise
+compact
+cohen
+dunn
+reconstitut
+ammar
+iafmm
+overturn
+jwc
+ppg
+marshal
+taka
+strang
+liberty
+govt
+dash
+clement
+kahn
+burger
+baldwin
+towbin
+istituto
+hia
+unterberg
+nord
+toy
+goodrich
+condom
+dispens
+charact
+customarily
+bankverein
+rugerony
+southwir
+berton
+sixteen
+unrealis
+leal
+whip
+frigid
+royce
+matin
+marion
+leigh
+theme
+lilaratn
+chee
+polysar
+corynespora
+ric
+aromat
+sonex
+dioxin
+polystyren
+bolt
+fy
+hoffman
+sat
+redeploy
+fountain
+globe
+beverly
+bouygu
+tinto
+npt
+prey
+neco
+recurr
+simmon
+icg
+tianjin
+dhaka
+underus
+gin
+stillmann
+dl
+harman
+classif
+wellington
+digest
+covert
+stahl
+massachusett
+genet
+ing
+sergeyev
+opponent
+detriment
+ommeren
+regent
+lugar
+deterr
+cbot
+hsn
+adb
+nissan
+wheel
+brook
+milo
+mayer
+brennan
+fauber
+bhd
+handy
+pertamina
+conagra
+uac
+wick
+shekel
+mcneil
+flotat
+recal
+rehear
+pitt
+quaker
+bristol
+ma
+tok
+echlin
+optic
+hartford
+whitehal
+calgary
+scb
+wessberg
+cigz
+cheaply
+disk
+combust
+magnet
+lilly
+arose
+pby
+vancouv
+howel
+mapara
+tazara
+chitambala
+rgc
+centromin
+pasar
+chuquicamata
+seguel
+cobriza
+wirebar
+mdp
+toufexy
+fathy
+siedenburg
+iwcc
+alexand
+webber
+puerto
+curacao
+outboard
+gillett
+handelsblatt
+iel
+piper
+nsan
+ken
+sogen
+hambrecht
+roma
+chevrolet
+quist
+valero
+infringement
+gra
+vlo
+concurr
+westphalia
+bly
+hon
+honeywel
+notif
+entail
+riyad
+unwind
+lorenzo
+foremost
+moral
+taylor
+initial
+leonard
+acm
+fa
+moin
+impressiv
+wolfgang
+im
+fwb
+mesa
+headlin
+comissaria
+cpa
+hang
+sanwa
+modestly
+endo
+levesqu
+beaubien
+augment
+tektronix
+mf
+minorco
+cra
+mnrcy
+shon
+bovery
+hre
+rth
+unreal
+cntr
+falloff
+ead
+potomac
+pom
+precambrian
+technodyn
+jamesway
+metromail
+bbcz
+shoney
+spartech
+atcor
+df
+bfy
+mdt
+reclassif
+hmy
+mcic
+omcm
+sptn
+mcy
+omnicom
+all
+eqk
+salant
+pma
+flo
+koninklijk
+holly
+danah
+wilfr
+dime
+ivaco
+cmy
+notel
+mansion
+dalton
+allison
+ldmfa
+novl
+wallac
+mmct
+hmte
+downsiz
+insua
+gty
+arb
+petry
+manny
+geo
+biomed
+moe
+spy
+ttx
+electromed
+dhr
+inp
+swissair
+tultex
+dist
+nwa
+helicopt
+leaseback
+garment
+leather
+mot
+murtha
+gurria
+rocky
+ben
+shing
+richardson
+mrc
+hawley
+freeport
+jard
+matheson
+bradley
+bernstein
+ssmc
+asamera
+galcf
+duplic
+vacant
+hut
+cote
+oilman
+societa
+nurs
+showa
+purs
+evolv
+forse
+lone
+larsen
+brunswick
+essex
+androsch
+babcock
+music
+cont
+vanguard
+cry
+punt
+turk
+asahy
+louisvil
+germain
+pye
+zimmer
+defraud
+frivol
+influenza
+infection
+uy
+unisy
+library
+macandrew
+trailer
+foodservic
+suffield
+csbk
+jonathan
+fichtel
+mmwg
+oustand
+hundredth
+wx
+marvin
+hawker
+teamster
+chimy
+gluck
+meridian
+crg
+siddeley
+trelleborg
+vebg
+mannesmann
+salem
+smb
+dusseldorf
+ay
+noax
+neoax
+carlton
+mnst
+pcr
+sk
+winthrop
+learjet
+glj
+knight
+lang
+colly
+swearingen
+cct
+ebully
+populair
+intact
+doldrum
+orlando
+fever
+carmak
+quotat
+applaud
+marietta
+prod
+woe
+avail
+ram
+mayor
+later
+ladenburg
+thalmann
+ecgd
+samsung
+deck
+fourteen
+kerna
+avian
+endevco
+trunklin
+lm
+clg
+physician
+cag
+indemnify
+rochest
+wluk
+fc
+hampshir
+clabir
+bramalea
+buse
+vermont
+corport
+gmp
+cruz
+orginal
+salina
+wol
+teapa
+stride
+stopov
+mee
+lara
+nickl
+dignity
+appalachian
+hu
+simonsen
+counterclaim
+sonat
+russel
+puzzl
+creditanstalt
+adr
+bend
+yarn
+regenc
+ivan
+wertheim
+chairmen
+bancorpor
+obsolet
+intergroup
+kendal
+berlin
+perfect
+overhead
+safer
+fin
+boiler
+beat
+depositary
+soley
+tandem
+holden
+cole
+beliv
+epsilon
+ridg
+chu
+simex
+bhf
+unty
+soundly
+surrend
+cannon
+barn
+breakeven
+peninsula
+rudolph
+lanston
+pyongyang
+misima
+kinross
+bhpgm
+starrex
+barrett
+nagano
+syngold
+deka
+alligat
+jewellery
+compel
+carlin
+goldstrik
+paye
+rockefel
+niagara
+mohawk
+abc
+bzw
+hitherto
+esx
+emulat
+fbo
+absorption
+witco
+hyponex
+nederlands
+nyn
+hypx
+penner
+hohenwarth
+napm
+ipecod
+cherry
+cafe
+tre
+cfa
+merchandis
+viner
+wer
+logic
+wmb
+clinic
+op
+schroeder
+dislik
+pitney
+abdel
+nmc
+c
+mirror
+tedy
+falconbridg
+escape
+palac
+mastermind
+osman
+arabe
+elite
+postal
+pd
+chees
+bang
+weyerhaeus
+knox
+soo
+wilhelm
+suspicion
+calmon
+muda
+pragmat
+quintal
+aic
+sam
+roof
+liquor
+mckesson
+envirosystem
+centurion
+naturalit
+skylight
+royex
+corona
+wesson
+trenton
+moller
+hazleton
+pittston
+scan
+perkin
+alco
+comsat
+alza
+biltmor
+clevebaco
+goldberg
+billboard
+athletic
+mcandrew
+heyman
+pepsy
+natchez
+aircal
+bois
+candy
+oilwell
+smithson
+equiticorp
+piza
+becor
+panganiban
+monteil
+claremont
+connor
+callebaut
+parsow
+chavin
+declaratory
+oiy
+foxcroft
+callicoon
+shirt
+enzon
+unitel
+mcgill
+searl
+mobex
+bicoast
+sundor
+questar
+enro
+viratek
+ana
+danvil
+wyatt
+annesley
+bryson
+portsmouth
+gerber
+bogen
+ksz
+metzenbaum
+vendex
+xp
+santand
+subpoena
+kresg
+ink
+dainippon
+wavehil
+saatchy
+shad
+haft
+skanska
+hancock
+papyru
+interlink
+limbo
+paralax
+amylum
+vernel
+spear
+salzgitt
+exovir
+wallenberg
+greenwood
+providentia
+koba
+lace
+trackag
+superdrug
+interwest
+disord
+louart
+stant
+erbamont
+obligatory
+antibiotico
+greyhound
+clearwat
+hub
+ranco
+sieb
+centerr
+pantry
+landon
+kelman
+pcgg
+sequest
+vby
+pilgrim
+oporto
+glantz
+portugu
+iacocca
+varian
+cbsy
+holling
+albion
+aurora
+intercar
+acquisiton
+ordnanc
+warrington
+trecker
+koether
+rabbit
+bahama
+joist
+lerner
+chatsworth
+uaw
+photo
+foreseen
+simbl
+chamorro
+nevy
+stumbl
+truly
+inoper
+cabv
+prosecutor
+amex
+robertson
+vend
+poul
+franchise
+cayman
+cogener
+irrevoc
+asu
+mcdermott
+mdr
+bouy
+jay
+euphoria
+annuity
+finger
+sudanes
+rob
+alfaro
+ricart
+minguzzy
+markwart
+castro
+geplacea
+shouldn
+spencer
+psc
+systemat
+children
+barbado
+guyana
+woven
+butcher
+daewoo
+adequacy
+vacat
+tennesse
+krupp
+improper
+silicon
+delist
+expedity
+proprietary
+transcontinent
+dst
+ferc
+transnat
+vamga
+expo
+melzer
+josef
+biscuit
+diego
+borden
+transtar
+skapin
+ambival
+chronar
+zortman
+naylor
+handelsbank
+repric
+thuesen
+divisor
+finnair
+meink
+oakwood
+sofer
+cedel
+forgery
+clip
+cna
+gottlieb
+museum
+electricidad
+micropoly
+authentic
+hawkey
+arcalex
+cassa
+risparmio
+dty
+halmy
+gunz
+sangyo
+atary
+fanny
+piano
+ginny
+southdown
+showboat
+businessland
+nerv
+tme
+eksportfinan
+maxwel
+cnw
+zehntel
+vneshtorgbank
+pnc
+landusky
+experiment
+verd
+repuchas
+anyy
+korth
+anadarko
+feldstein
+lamp
+kidnap
+keppel
+schlueter
+consul
+brilly
+nety
+westcorp
+quebecor
+fpl
+ipma
+palo
+sutherland
+lbl
+nephew
+eurolir
+rlr
+rayrock
+cadillac
+drg
+guilford
+audiotron
+mepc
+jutland
+pirelly
+symm
+nyang
+buick
+kinburn
+amato
+sela
+bizarr
+crackdown
+sibson
+viewer
+mbank
+takushoku
+gzb
+erk
+yapy
+cooperatif
+kredy
+ramada
+mobutu
+wainoco
+kickback
+mikul
+trilater
+rambler
+contig
+recours
+oc
+ala
+cng
+pearson
+ech
+odeon
+csp
+utilicorp
+ultramar
+nestl
+analyt
+giorgio
+intermed
+coopervis
+lawn
+elxa
+mlc
+salad
+cypm
+leasehold
+character
+ameritrust
+hale
+com
+gosper
+rowland
+uic
+everybody
+cabot
+lng
+boddington
+val
+edison
+hapag
+kpa
+scy
+yeo
+versatil
+patrol
+ste
+prerequisit
+computer
+ce
+pelty
+meston
+cch
+guardian
+transamerica
+dick
+sty
+ccf
+lien
+berisford
+larner
+socanav
+ningbo
+styx
+calcutta
+peacetim
+dubuqu
+orley
+onomichy
+csbc
+mousavy
+gpu
+labatt
+gp
+avery
+jiang
+clarity
+nice
+ticket
+nich
+vine
+wtc
+seal
+entrant
+itel
+retract
+saunder
+secaucu
+absb
+kohlberg
+kravy
+untap
+mcd
+rt
+sierra
+tractor
+triton
+reshap
+jefferson
+wilmington
+vacuum
+bkfg
+spar
+seaman
+exco
+kaufman
+ernst
+herbert
+db
+fledgl
+cwe
+italiana
+micron
+wolf
+anita
+ta
+terrorist
+icn
+gel
+hydraul
+dillard
+hwhh
+livingwel
+perelman
+height
+erode
+villa
+wareh
+parker
+bk
+reinsur
+whampoa
+hutchison
+ida
+mgl
+metromedia
+bkne
+nbc
+stricken
+insituform
+adobe
+hex
+pson
+camco
+uncollect
+marcu
+derrick
+walsh
+mco
+mcmoran
+gre
+hkld
+heck
+wg
+werner
+humana
+crn
+lif
+assignment
+vista
+lancer
+comerica
+bellsouth
+turner
+gypsum
+volvo
+forman
+ca
+zenith
+overfund
+luxury
+pope
+waterhous
+trb
+olivetty
+centenny
+oliv
+goldstein
+empower
+dissatisfy
+chg
+aetna
+filipino
+abx
+berry
+oscar
+sahr
+aet
+taco
+asec
+prairy
+lly
+keyston
+mccrory
+rmj
+apprais
+sfe
+mould
+bushnel
+swf
+florenc
+southam
+hemdal
+finest
+gloeilampenfabrieken
+gleason
+ckl
+abex
+icx
+intercontinent
+bribe
+yate
+poulenc
+rhone
+salmon
+identity
+mp
+seper
+peterson
+ppc
+developp
+schulmann
+rotberg
+kahan
+vak
+boatmen
+quinn
+megabank
+eleventh
+petroluem
+freedman
+norg
+storehous
+connery
+seaga
+overcapac
+mla
+boesky
+lar
+rebuff
+mack
+legg
+om
+goria
+deacon
+stiffen
+improperly
+legislatur
+giovanny
+intel
+intc
+busch
+wrest
+nonstop
+ecl
+hercul
+textron
+schere
+mc
+anheuser
+aftermath
+computeris
+fslic
+keycorp
+txt
+stockholm
+zuckerman
+inty
+forstmann
+bcy
+lsy
+intermark
+rothman
+gta
+tb
+sgp
+heublein
+ruiz
+wonnacott
+honda
+paemen
+doumeng
+gradin
+enger
+mfn
+ligero
+potash
+pollock
+ryzhkov
+matsunaga
+wartenberg
+zhao
+shiratory
+axworthy
+k
+bywat
+uncondit
+gt
+abnn
+peck
+donovan
+pap
+baka
+eisenberg
+glidden
+sensor
+wix
+commut
+amtr
+hmo
+lsb
+itm
+cineplex
+edwin
+umar
+nt
+bakery
+castl
+aero
+flexy
+americu
+fisher
+nw
+installment
+chubb
+reincorpor
+monfort
+rrco
+scrip
+microfilm
+oxford
+ucu
+ambrit
+aby
+hair
+pciac
+sweeney
+petrona
+napo
+tumaco
+graven
+sur
+isthmu
+buchanan
+malmgreen
+guerard
+wellemey
+mckiernan
+mizrahy
+benbow
+powerin
+kaputin
+krapel
+samudio
+png
+shuffl
+synfuel
+mcmillan
+randol
+ural
+draugen
+pgrt
+ebinger
+bukhoosh
+maciej
+iagifu
+fesharaky
+staf
+strategist
+instant
+jeremy
+torino
+companion
+paolo
+ash
+homeless
+dibona
+crossroad
+sandy
+brien
+il
+assertion
+sia
+oldest
+beer
+nesy
+rebutt
+balloon
+xu
+demis
+mulligan
+patronag
+het
+comit
+sladoj
+snowcov
+stewart
+ashland
+coher
+gobert
+midamerica
+midam
+arise
+volkswagen
+anim
+wiggin
+ophthalmic
+llc
+hovnanian
+tcby
+valhy
+doneg
+tseng
+navistar
+vlan
+vogtl
+geoffrion
+strawbridg
+servotron
+coleman
+mayfair
+sheehy
+exchanger
+kloeckner
+centron
+tmy
+excel
+woodsid
+telco
+aec
+alc
+bionom
+infinit
+novar
+taikoo
+todd
+stuttgart
+durham
+lupberg
+mobay
+bigelow
+foresman
+eac
+pagurian
+stafford
+firstcorp
+furman
+selz
+kurzweil
+sirrin
+aequitron
+wardair
+emhart
+invacar
+datron
+sdc
+enron
+mg
+kinder
+brae
+oshman
+uniforc
+premdor
+payless
+mem
+pubco
+lamson
+kiena
+iomega
+wiehn
+undergar
+chemfix
+mccall
+lind
+cashway
+countrywid
+glynwed
+coleco
+meadow
+teeter
+tofutty
+equatory
+ghiringhelly
+glamy
+ax
+moto
+pansoph
+porsch
+hormel
+tote
+kidston
+oracl
+florjanc
+yamaha
+tokheim
+falcon
+sterivet
+quantech
+cadbury
+noncash
+teeco
+telemarket
+westar
+ur
+mcclain
+schwepp
+telxon
+lowranc
+lilco
+sulpetro
+knutson
+jewel
+mcm
+booker
+measor
+tsang
+donut
+sprint
+tonka
+input
+correl
+proxmir
+akzo
+leisur
+olbv
+laenderbank
+antc
+towl
+anitec
+luc
+luca
+pharmacia
+snack
+cf
+fbh
+avy
+arvin
+weston
+dietz
+macmillan
+parad
+optical
+drsd
+azzam
+gib
+byer
+suna
+darman
+fec
+melam
+circular
+bouldikian
+herstatt
+dattel
+ig
+audienc
+reclam
+wfc
+omt
+mattress
+monsod
+shepherd
+lighten
+prosecut
+chivuno
+khartoum
+omer
+prsl
+lube
+compressor
+corroon
+bael
+cbl
+datagraphix
+dya
+avalon
+elgin
+wilkinson
+rtc
+grossman
+goldom
+dxn
+mlx
+aac
+quest
+skb
+gnva
+ldbrinkman
+genova
+src
+cronu
+underwood
+rite
+btr
+itx
+acy
+metex
+sportswear
+lennar
+unaffily
+comtech
+anacomp
+imatron
+casu
+dwg
+pnp
+haye
+fmr
+regal
+goldsmith
+len
+gd
+cmin
+mitt
+italia
+nichol
+flagship
+nugget
+mtx
+acqusit
+gec
+healthvest
+avon
+dyne
+clbga
+scandinavia
+alsthom
+bancgroup
+alfa
+aar
+sheppard
+modx
+fairfield
+acl
+hyo
+gotten
+appleton
+joel
+dcy
+lessor
+mfg
+modulair
+husky
+scm
+magna
+rtr
+multibank
+hvt
+cypress
+encor
+retent
+taker
+braddock
+grind
+indemnity
+incompat
+keller
+foolish
+lever
+ut
+illumin
+bombay
+midafternoon
+arisen
+terra
+lasmo
+norcen
+nowak
+bonanza
+tricentrol
+carib
+roxy
+saf
+dresser
+diamet
+commer
+sbo
+rca
+albn
+thrid
+stodgel
+rhy
+fca
+emco
+cg
+bayerisch
+qltv
+conspiracy
+nmk
+outgo
+vereinsbank
+clausen
+rlm
+colman
+mcorp
+ilfc
+rok
+rabo
+holstein
+schleswig
+dc
+sgen
+aidc
+arv
+reciev
+plenum
+waxm
+olympic
+plen
+rmy
+bangor
+waxman
+undivid
+canyon
+davidson
+trinity
+sthf
+yellowknif
+bergen
+pcg
+harley
+geoffrey
+hdy
+trc
+fieldcrest
+restruct
+fld
+oshawa
+claud
+their
+matrix
+elk
+beaufort
+cnn
+abbey
+troon
+glaxo
+ballan
+comeau
+chapman
+dissolut
+fragment
+ammunit
+sealy
+hkbh
+hnz
+reilly
+adjoin
+architectur
+np
+scurry
+imag
+accessory
+amr
+peripher
+wtd
+regy
+theft
+ncb
+samba
+bancair
+relinquish
+stb
+kit
+ka
+simul
+concord
+cy
+bruxel
+morton
+argyll
+bmy
+fdx
+cardiovascular
+cty
+ted
+tissu
+nwp
+blockbust
+usine
+bbec
+unproduct
+lk
+macdonald
+passiv
+marwick
+nsm
+beerman
+seagram
+interfirst
+agl
+bug
+sensormat
+sss
+steak
+bsy
+brf
+hug
+cummin
+eldr
+drummond
+omaha
+adsa
+bsn
+kb
+gkn
+horn
+vestar
+gooderham
+plt
+texstyren
+sceptr
+savannah
+centel
+leaseway
+hum
+mickelberry
+willcox
+wkr
+aig
+wort
+medar
+mbc
+mdxr
+chesebrough
+deterg
+fairfax
+shear
+hillsdown
+sta
+sheldahl
+shel
+hung
+pond
+compo
+dco
+lnc
+ausimont
+hnt
+olsn
+fen
+gat
+jaguar
+pcy
+crime
+jacz
+spectrum
+adelaid
+cleanup
+comet
+fd
+bkn
+borman
+ltc
+kapok
+amn
+afp
+eaux
+tey
+jacobson
+cke
+msa
+kpk
+amcast
+ameron
+con
+trimac
+buckhorn
+tek
+gevaert
+tyre
+twt
+pir
+volv
+hiram
+acst
+ansy
+refurbish
+esselt
+esb
+tm
+lanc
+cox
+princeton
+newer
+race
+winston
+txn
+diablo
+emr
+basl
+asea
+stane
+rockwel
+humphrey
+depository
+warranty
+bl
+wardley
+wilf
+cr
+fal
+lvy
+plead
+overland
+cl
+alitalia
+macn
+guilty
+chic
+klau
+noel
+bg
+fasb
+rwnt
+bloedel
+weatherford
+wiy
+bicycl
+mpr
+amb
+rsy
+webcor
+lyonna
+numac
+interco
+marcxh
+cheroke
+msu
+engelhard
+embezzlement
+qtow
+schwendler
+nol
+bowl
+domtar
+amvestor
+cop
+ntt
+canon
+avfc
+resubmit
+inver
+avaq
+silverton
+kaltenbach
+hubbard
+plm
+qed
+caro
+liposom
+seton
+maxtor
+lucht
+mcdowel
+powerc
+loudon
+sedgwick
+standex
+innovex
+internatio
+powel
+esca
+scripp
+dba
+sycamor
+citadel
+fcl
+nzfp
+gandalf
+amcor
+guadalco
+triguna
+derlan
+aldershot
+markheath
+pcry
+infinity
+reef
+scholl
+penteco
+avia
+henz
+promac
+uab
+roffman
+cheyenn
+telemedia
+harrowsmith
+cirex
+juliu
+dubin
+hc
+fletcher
+autospa
+interpharm
+reebok
+lister
+hack
+mize
+bcw
+beeba
+nucel
+jannock
+checkrobot
+primagaz
+seafood
+banist
+pagex
+trident
+nylex
+energen
+bwa
+cityf
+takemoto
+flyfair
+shefra
+brandon
+certron
+attar
+inl
+whippany
+hogan
+multivest
+finlay
+pancontinent
+nawara
+noble
+dbm
+mcintyr
+smoky
+waterman
+coulson
+baiy
+kaufhof
+popsicl
+dynalectron
+burpe
+lomak
+ellmann
+strata
+mono
+confidata
+carrolton
+bartlett
+promedico
+acmex
+tvb
+teva
+hexcel
+stevenson
+bork
+rubbertech
+cheetham
+baur
+krestmark
+equinox
+steinhardt
+novatron
+campeau
+adventur
+ethyl
+unidar
+hearst
+sped
+chronicl
+metrobanc
+midway
+sahlen
+ansbacher
+sfsp
+tike
+conad
+palomino
+doj
+gst
+lazer
+bamberg
+verhofstadt
+mees
+messidor
+seashor
+fidelcor
+seax
+amerford
+crossland
+mcfarland
+petrominer
+feretty
+laurentiy
+wtrk
+kkk
+jauppy
+galveston
+rb
+kirschner
+comtec
+ventra
+nashua
+dumez
+noverco
+westburn
+dtd
+midivest
+lamborghiny
+goodwood
+astrotech
+calmat
+eagleslair
+kdy
+deltec
+rexham
+conant
+murren
+neo
+paragon
+pantherella
+gu
+cityquest
+sarlo
+microtel
+dougherty
+utvegsbanky
+halbert
+bakelit
+beaver
+shulman
+winnipeg
+quixot
+astra
+knoll
+cormy
+navon
+eskey
+virazol
+skandia
+petrosur
+trilogy
+sebro
+dingman
+maratech
+caston
+celina
+dauphin
+breast
+carteret
+bankeast
+canrad
+cvn
+vontobel
+instinet
+orbanco
+bard
+millipor
+donnelly
+moorhead
+alleghney
+krung
+equin
+sayam
+solmec
+josten
+careercom
+lpl
+amphenol
+clorox
+dorsey
+airco
+biopool
+handley
+inkey
+debartolo
+spermicid
+europharmaceut
+benetton
+amsouth
+fintech
+infortext
+malrit
+amtech
+mediq
+cytrx
+louge
+teleglob
+szynkarsky
+intercon
+gamco
+shelard
+lama
+shandwick
+erc
+ventana
+amca
+anixter
+nimock
+pette
+jwt
+jacoby
+lotoquik
+mattson
+nusourc
+trimedyn
+wca
+postech
+analytichem
+markey
+rexcom
+triumph
+nordbanken
+fermenta
+harleysvil
+kroger
+morbelly
+rossignol
+entrepo
+balzac
+norrel
+geronimu
+igon
+duffour
+imtec
+wilshir
+tylan
+clarostat
+triad
+calmar
+kebo
+texon
+moulinex
+kadoory
+liang
+lau
+sugarman
+cantrex
+shaer
+liebert
+nokia
+imr
+penril
+burdett
+tabak
+enfield
+faraway
+antonson
+colorol
+sanivan
+penser
+millen
+telcom
+schlang
+sportscen
+toshin
+cofab
+azuma
+wormald
+oakleaf
+kappa
+instrumentarium
+goldsil
+osr
+supermac
+borealy
+robeson
+constitu
+newest
+wallboard
+atorino
+tulsa
+dealership
+minier
+napl
+cardy
+delet
+avco
+nzy
+btv
+cger
+clemen
+nrc
+datarex
+mcgraw
+hellman
+lacy
+versar
+bruney
+khoo
+ware
+tiger
+tf
+tisch
+puritan
+promisary
+citic
+eberstadt
+sharon
+msc
+macomson
+balaclava
+scranton
+rodman
+buitony
+ryder
+acton
+belkin
+bench
+superstor
+tru
+endowment
+alltel
+autopart
+scime
+frenzy
+cascad
+apt
+hine
+nolan
+conseco
+evergo
+hachett
+spendthrift
+flyer
+sicilia
+escom
+bremer
+winery
+softklon
+chily
+crh
+chuan
+synergen
+cato
+ormand
+jwp
+bohn
+amylas
+landown
+wilbur
+swett
+bilfing
+fmha
+dataproduct
+mountleigh
+sarrazin
+weyerhaus
+greenidg
+topp
+stoneciph
+frayn
+emanuel
+gynex
+renshaw
+duma
+rolm
+russo
+bosworth
+hup
+dusen
+procter
+beazer
+amer
+securicor
+segal
+plenm
+knapp
+sofar
+mey
+caric
+finch
+hegewisch
+bif
+crivit
+buehrmann
+pfbc
+ruf
+gallen
+quasar
+hennick
+aerospatial
+apach
+cambrian
+loblaw
+krieger
+tetterod
+robur
+lufthansa
+alliant
+aegon
+anr
+dub
+primag
+stansbury
+anzola
+cdc
+templ
+wppss
+damson
+zemljar
+metropoly
+italfund
+telepictur
+litton
+avx
+mdu
+lorimar
+corchard
+asx
+wyle
+kado
+chiyoda
+ssangyong
+cpf
+bett
+nationair
+jbry
+bacob
+brougham
+beesley
+upjohn
+vectra
+louvem
+gallatin
+killian
+nikkey
+boral
+ae
+buchheit
+lewiston
+plessey
+periquet
+polly
+anemia
+roeher
+fecsa
+halikia
+irt
+glaverbel
+cancapit
+sickl
+milgard
+rivkin
+steckhan
+mangan
+eurotunnel
+avinda
+benihana
+marx
+hartnel
+haughey
+smail
+bouey
+wedtech
+bronx
+certainte
+savin
+fluor
+gemma
+nissen
+hallmark
+mittendorf
+usy
+scicon
+ceco
+upy
+rana
+vazquez
+tidewat
+roeller
+scherer
+electroperu
+azraay
+dau
+oftel
+refuel
+brentwood
+groly
+reuber
+mwape
+wrightson
+patten
+pmdb
+aslk
+recr
+hoogoven
+crimin
+preceed
+ckgh
+wtdy
+sandoz
+empire
+cheung
+forth
+vowg
+vw
+memotec
+saul
+tractebel
+adsteam
+polaroid
+rada
+apd
+accuray
+ffb
+templeton
+kirnan
+rockwood
+measurex
+cgee
+brooksvil
+confectionery
+caledonian
+frick
+asbestec
+toussy
+cyanamid
+buffton
+rinehart
+vtx
+temco
+brougher
+laurentian
+laserson
+murdoch
+sage
+mercer
+dna
+dixy
+altex
+atico
+magellan
+nbb
+pinola
+iroquoy
+pacer
+vogt
+algoma
+vertex
+contel
+crellin
+chemclear
+servicemast
+hovy
+biotech
+wrather
+avana
+alpine
+tricil
+nortek
+ionic
+alden
+penobscot
+maxxam
+neil
+fruehauf
+hardart
+luckey
+shareown
+weiss
+bic
+ducommun
+wolverin
+timminco
+welbilt
+wallcov
+agrico
+bojangl
+voicemail
+altron
+killearn
+ropak
+webb
+antibody
+visu
+microbiolog
+valtek
+tempo
+roch
+albertson
+jewelry
+mors
+gateway
+theatr
+careplu
+hbo
+desoto
+chesapeak
+whale
+phh
+stauffer
+ivey
+lieberman
+gartner
+ccl
+wichita
+bey
+dyr
+elcor
+flick
+jewelmast
+durkin
+bathurst
+walbro
+oreffic
+whippl
+tcw
+yochum
+bdm
+cardizem
+schutz
+galaxy
+cardin
+transpond
+wessanen
+munro
+rugby
+dravo
+nacco
+angu
+mmal
+rhm
+loyne
+pulcin
+burr
+zier
+harlow
+meredith
+equicor
+heymann
+quarto
+garofalo
+chargeoff
+beall
+cavendish
+geonex
+summitvil
+snet
+panoch
+cistron
+strenger
+driel
+crossen
+habbel
+alloytek
+reev
+pda
+abbett
+farah
+audy
+kline
+danzar
+gnn
+nekoosa
+hargreav
+sony
+chatwal
+healy
+hashimoto
+crd
+guinn
+fhlmc
+gevirtz
+seidman
+polyest
+foothil
+carolian
+mixon
+mccrann
+egan
+xj
+vtr
+burry
+genstar
+kask
+dcny
+scrubber
+kingsport
+corby
+meinhardt
+vishay
+snc
+widdrington
+poy
+lummu
+treybig
+crest
+tsay
+mcadoo
+exley
+lennox
+circu
+paradyn
+taunton
+mayo
+maytag
+schenker
+okc
+graff
+hazelhoff
+rowley
+marcor
+struther
+cornelissen
+scher
+takefman
+metropol
+groot
+charan
+advo
+ahold
+xiamen
+panin
+chiary
+gsx
+monod
+blind
+duvel
+anova
+mitek
+shattner
+possy
+tagamet
+tbg
+bloch
+usacaf
+catto
+smithklin
+poclain
+calvet
+lutterbach
+dreyer
+haerry
+reuss
+bryn
+ncr
+catena
+jude
+citroen
+joul
+hackl
+mawr
+naarden
+odger
+rambaud
+shadowfax
+knudsen
+pw
+bralorn
+asiatic
+vascular
+sierracin
+leutwil
+glendal
+signet
+zim
+telecredit
+onyx
+finan
+callon
+rafidain
+genzym
+torchmark
+moet
+brascan
+contracept
+hennessy
+harrah
+subtract
+tenera
+homestead
+westworld
+johnstown
+aancor
+shl
+loc
+talbot
+elxsy
+poco
+nixdorf
+kean
+ich
+hewlett
+sl
+lanschot
+banky
+packard
+hp
+gull
+braniff
+unrestrict
+elsinor
+genex
+trizec
+unqualify
+systemhous
+loh
+avatar
+duke
+keswick
+divy
+shulansky
+tierco
+emerald
+nrm
+indictment
+centerior
+wellcom
+merry
+moritorium
+investcorp
+tandy
+ncel
+cir
+rainer
+cthl
+belgiqu
+refractory
+xerox
+grx
+enka
+dey
+monkey
+enterra
+solar
+morr
+avenu
+enzyme
+caterpillar
+midst
+utx
+goody
+burk
+blackburn
+cmnt
+hadson
+had
+cc
+pop
+benjamin
+leucadia
+tcb
+rick
+sfy
+schwab
+tic
+mx
+ry
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/example3/test.dat	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+4 qid:4 1:1 2:0 3:0 4:0.2 5:1
+3 qid:4 1:1 2:1 3:0 4:0.3 5:0
+2 qid:4 1:0 2:0 3:0 4:0.2 5:1
+1 qid:4 1:0 2:0 3:1 4:0.2 5:0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/example3/train.dat	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+# query 1
+3 qid:1 1:1 2:1 3:0 4:0.2 5:0
+2 qid:1 1:0 2:0 3:1 4:0.1 5:1
+1 qid:1 1:0 2:1 3:0 4:0.4 5:0
+1 qid:1 1:0 2:0 3:1 4:0.3 5:0
+# query 2
+1 qid:2 1:0 2:0 3:1 4:0.2 5:0
+2 qid:2 1:1 2:0 3:1 4:0.4 5:0
+1 qid:2 1:0 2:0 3:1 4:0.1 5:0
+1 qid:2 1:0 2:0 3:1 4:0.2 5:0
+# query 3
+2 qid:3 1:0 2:0 3:1 4:0.1 5:1
+3 qid:3 1:1 2:1 3:0 4:0.3 5:0
+4 qid:3 1:1 2:0 3:0 4:0.4 5:1
+1 qid:3 1:0 2:1 3:1 4:0.5 5:0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/src/LICENSE.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+SVM-Light
+---------
+
+Available at http://svmlight.joachims.org/
+
+Author: Thorsten Joachims
+	thorsten@joachims.org
+
+	Cornell University
+	Department of Computer Science
+	4153 Upson Hall
+	Ithaca, NY 14853
+	USA
+
+LICENSING TERMS 
+
+This program is granted free of charge for research and education
+purposes. However you must obtain a license from the author to use it
+for commercial purposes.
+
+Scientific results produced using the software provided shall
+acknowledge the use of SVM-Light. Please cite as  
+
+       T. Joachims, Making large-Scale SVM Learning
+       Practical. Advances in Kernel Methods - Support Vector
+       Learning, B. Schölkopf and C. Burges and A. Smola (ed.),
+       MIT-Press, 1999. 
+       http://www-ai.cs.uni-dortmund.de/DOKUMENTE/joachims_99a.pdf
+
+Moreover shall the author of SVM-Light be informed about the
+publication.
+
+The software must not be modified and distributed without prior
+permission of the author.
+
+By using SVM-Light you agree to the licensing terms.
+
+
+NO WARRANTY 
+
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
+WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
+PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF
+THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO
+LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
+OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGES.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/src/Makefile	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,88 @@
+#
+# makefile for svm_light 
+#
+# Thorsten Joachims, 2002
+#
+# Thanks to Ralf Herbrich for the initial version.
+#
+
+CC=gcc                          # used C-compiler
+CFLAGS= -O3                     # release C-Compiler flags
+#CFLAGS=   -g -Wall -pedantic  # debugging C-Compiler flags
+LD=gcc                          # used linker
+LFLAGS=-O3                      # linker flags
+LIBS=-L. -lm                    # used libraries
+
+
+all: svm_learn_hideo svm_classify
+
+tidy: 
+	rm -f *.o 
+	rm -f donlp2/*.o
+	rm -f donlp2_c/*.o
+	rm -f pr_loqo/*.o
+
+clean:	tidy
+	rm -f svm_learn
+	rm -f svm_classify
+
+help:   info
+
+info:
+	@echo
+	@echo "make for SVM-light               Thorsten Joachims, 1998"
+	@echo
+	@echo "Thanks to Ralf Herbrich for the initial version."
+	@echo 
+	@echo "USAGE: make [svm_learn | svm_learn_loqo | svm_learn_hideo | "
+	@echo "             svm_classify | all | clean | tidy]"
+	@echo 
+	@echo "    svm_learn           builds the learning module (prefers HIDEO)"
+	@echo "    svm_learn_hideo     builds the learning module using HIDEO"
+	@echo "    svm_learn_loqo      builds the learning module using PR_LOQO"
+	@echo "    svm_classify        builds the classfication module"
+	@echo "    all (default)       builds svm_learn + svm_classify"
+	@echo "    clean               removes .o and target files"
+	@echo "    tidy                removes .o files"
+	@echo
+
+
+svm_learn_hideo_noexe: svm_learn_main.o svm_learn.o svm_common.o svm_hideo.o 
+
+svm_learn_hideo: svm_learn_main.o svm_learn.o svm_common.o svm_hideo.o 
+	$(LD) $(LFLAGS) svm_learn_main.o svm_learn.o svm_common.o svm_hideo.o -o svm_learn $(LIBS)
+
+svm_learn_loqo_noexe: svm_learn_main.o svm_learn.o svm_common.o svm_loqo.o loqo
+
+svm_learn_loqo: svm_learn_main.o svm_learn.o svm_common.o svm_loqo.o loqo
+	$(LD) $(LFLAGS) svm_learn_main.o svm_learn.o svm_common.o svm_loqo.o pr_loqo/pr_loqo.o -o svm_learn $(LIBS)
+
+
+svm_hideo.o: svm_hideo.c
+	$(CC) -c $(CFLAGS) svm_hideo.c -o svm_hideo.o 
+
+svm_loqo.o: svm_loqo.c 
+	$(CC) -c $(CFLAGS) svm_loqo.c -o svm_loqo.o 
+
+svm_common.o: svm_common.c svm_common.h kernel.h
+	$(CC) -c $(CFLAGS) svm_common.c -o svm_common.o 
+
+svm_learn.o: svm_learn.c svm_common.h
+	$(CC) -c $(CFLAGS) svm_learn.c -o svm_learn.o 
+
+svm_learn_main.o: svm_learn_main.c svm_learn.h svm_common.h
+	$(CC) -c $(CFLAGS) svm_learn_main.c -o svm_learn_main.o 
+
+
+svm_classify: svm_classify.o svm_common.o 
+	$(LD) $(LFLAGS) svm_classify.o svm_common.o -o svm_classify $(LIBS)
+
+svm_classify.o: svm_classify.c svm_common.h kernel.h
+	$(CC) -c $(CFLAGS) svm_classify.c -o svm_classify.o
+
+
+loqo: pr_loqo/pr_loqo.o
+
+pr_loqo/pr_loqo.o: pr_loqo/pr_loqo.c
+	$(CC) -c $(CFLAGS) pr_loqo/pr_loqo.c -o pr_loqo/pr_loqo.o
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/src/kernel.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,40 @@
+/************************************************************************/
+/*                                                                      */
+/*   kernel.h                                                           */
+/*                                                                      */
+/*   User defined kernel function. Feel free to plug in your own.       */
+/*                                                                      */
+/*   Copyright: Thorsten Joachims                                       */
+/*   Date: 16.12.97                                                     */
+/*                                                                      */
+/************************************************************************/
+
+/* KERNEL_PARM is defined in svm_common.h The field 'custom' is reserved for */
+/* parameters of the user defined kernel. You can also access and use */
+/* the parameters of the other kernels. Just replace the line 
+             return((double)(1.0)); 
+   with your own kernel. */
+
+  /* Example: The following computes the polynomial kernel. sprod_ss
+              computes the inner product between two sparse vectors. 
+
+      return((CFLOAT)pow(kernel_parm->coef_lin*sprod_ss(a->words,b->words)
+             +kernel_parm->coef_const,(double)kernel_parm->poly_degree)); 
+  */
+
+/* If you are implementing a kernel that is not based on a
+   feature/value representation, you might want to make use of the
+   field "userdefined" in SVECTOR. By default, this field will contain
+   whatever string you put behind a # sign in the example file. So, if
+   a line in your training file looks like
+
+   -1 1:3 5:6 #abcdefg
+
+   then the SVECTOR field "words" will contain the vector 1:3 5:6, and
+   "userdefined" will contain the string "abcdefg". */
+
+double custom_kernel(KERNEL_PARM *kernel_parm, SVECTOR *a, SVECTOR *b) 
+     /* plug in you favorite kernel */                          
+{
+  return((double)(1.0)); 
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/src/svm_classify.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,195 @@
+/***********************************************************************/
+/*                                                                     */
+/*   svm_classify.c                                                    */
+/*                                                                     */
+/*   Classification module of Support Vector Machine.                  */
+/*                                                                     */
+/*   Author: Thorsten Joachims                                         */
+/*   Date: 02.07.02                                                    */
+/*                                                                     */
+/*   Copyright (c) 2002  Thorsten Joachims - All rights reserved       */
+/*                                                                     */
+/*   This software is available for non-commercial use only. It must   */
+/*   not be modified and distributed without prior permission of the   */
+/*   author. The author is not responsible for implications from the   */
+/*   use of this software.                                             */
+/*                                                                     */
+/************************************************************************/
+
+# include "svm_common.h"
+
+char docfile[200];
+char modelfile[200];
+char predictionsfile[200];
+
+void read_input_parameters(int, char **, char *, char *, char *, long *, 
+			   long *);
+void print_help(void);
+
+
+int main (int argc, char* argv[])
+{
+  DOC *doc;   /* test example */
+  WORD *words;
+  long max_docs,max_words_doc,lld;
+  long totdoc=0,queryid,slackid;
+  long correct=0,incorrect=0,no_accuracy=0;
+  long res_a=0,res_b=0,res_c=0,res_d=0,wnum,pred_format;
+  long j;
+  double t1,runtime=0;
+  double dist,doc_label,costfactor;
+  char *line,*comment; 
+  FILE *predfl,*docfl;
+  MODEL *model; 
+
+  read_input_parameters(argc,argv,docfile,modelfile,predictionsfile,
+			&verbosity,&pred_format);
+
+  nol_ll(docfile,&max_docs,&max_words_doc,&lld); /* scan size of input file */
+  max_words_doc+=2;
+  lld+=2;
+
+  line = (char *)my_malloc(sizeof(char)*lld);
+  words = (WORD *)my_malloc(sizeof(WORD)*(max_words_doc+10));
+
+  model=read_model(modelfile);
+
+  if(model->kernel_parm.kernel_type == 0) { /* linear kernel */
+    /* compute weight vector */
+    add_weight_vector_to_linear_model(model);
+  }
+  
+  if(verbosity>=2) {
+    printf("Classifying test examples.."); fflush(stdout);
+  }
+
+  if ((docfl = fopen (docfile, "r")) == NULL)
+  { perror (docfile); exit (1); }
+  if ((predfl = fopen (predictionsfile, "w")) == NULL)
+  { perror (predictionsfile); exit (1); }
+
+  while((!feof(docfl)) && fgets(line,(int)lld,docfl)) {
+    if(line[0] == '#') continue;  /* line contains comments */
+    parse_document(line,words,&doc_label,&queryid,&slackid,&costfactor,&wnum,
+		   max_words_doc,&comment);
+    totdoc++;
+    if(model->kernel_parm.kernel_type == 0) {   /* linear kernel */
+      for(j=0;(words[j]).wnum != 0;j++) {  /* Check if feature numbers   */
+	if((words[j]).wnum>model->totwords) /* are not larger than in     */
+	  (words[j]).wnum=0;               /* model. Remove feature if   */
+      }                                        /* necessary.                 */
+      doc = create_example(-1,0,0,0.0,create_svector(words,comment,1.0));
+      t1=get_runtime();
+      dist=classify_example_linear(model,doc);
+      runtime+=(get_runtime()-t1);
+      free_example(doc,1);
+    }
+    else {                             /* non-linear kernel */
+      doc = create_example(-1,0,0,0.0,create_svector(words,comment,1.0));
+      t1=get_runtime();
+      dist=classify_example(model,doc);
+      runtime+=(get_runtime()-t1);
+      free_example(doc,1);
+    }
+    if(dist>0) {
+      if(pred_format==0) { /* old weired output format */
+	fprintf(predfl,"%.8g:+1 %.8g:-1\n",dist,-dist);
+      }
+      if(doc_label>0) correct++; else incorrect++;
+      if(doc_label>0) res_a++; else res_b++;
+    }
+    else {
+      if(pred_format==0) { /* old weired output format */
+	fprintf(predfl,"%.8g:-1 %.8g:+1\n",-dist,dist);
+      }
+      if(doc_label<0) correct++; else incorrect++;
+      if(doc_label>0) res_c++; else res_d++;
+    }
+    if(pred_format==1) { /* output the value of decision function */
+      fprintf(predfl,"%.8g\n",dist);
+    }
+    if((int)(0.01+(doc_label*doc_label)) != 1) 
+      { no_accuracy=1; } /* test data is not binary labeled */
+    if(verbosity>=2) {
+      if(totdoc % 100 == 0) {
+	printf("%ld..",totdoc); fflush(stdout);
+      }
+    }
+  }  
+  free(line);
+  free(words);
+  free_model(model,1);
+
+  if(verbosity>=2) {
+    printf("done\n");
+
+/*   Note by Gary Boone                     Date: 29 April 2000        */
+/*      o Timing is inaccurate. The timer has 0.01 second resolution.  */
+/*        Because classification of a single vector takes less than    */
+/*        0.01 secs, the timer was underflowing.                       */
+    printf("Runtime (without IO) in cpu-seconds: %.2f\n",
+	   (float)(runtime/100.0));
+    
+  }
+  if((!no_accuracy) && (verbosity>=1)) {
+    printf("Accuracy on test set: %.2f%% (%ld correct, %ld incorrect, %ld total)\n",(float)(correct)*100.0/totdoc,correct,incorrect,totdoc);
+    printf("Precision/recall on test set: %.2f%%/%.2f%%\n",(float)(res_a)*100.0/(res_a+res_b),(float)(res_a)*100.0/(res_a+res_c));
+  }
+
+  return(0);
+}
+
+void read_input_parameters(int argc, char **argv, char *docfile, 
+			   char *modelfile, char *predictionsfile, 
+			   long int *verbosity, long int *pred_format)
+{
+  long i;
+  
+  /* set default */
+  strcpy (modelfile, "svm_model");
+  strcpy (predictionsfile, "svm_predictions"); 
+  (*verbosity)=2;
+  (*pred_format)=1;
+
+  for(i=1;(i<argc) && ((argv[i])[0] == '-');i++) {
+    switch ((argv[i])[1]) 
+      { 
+      case 'h': print_help(); exit(0);
+      case 'v': i++; (*verbosity)=atol(argv[i]); break;
+      case 'f': i++; (*pred_format)=atol(argv[i]); break;
+      default: printf("\nUnrecognized option %s!\n\n",argv[i]);
+	       print_help();
+	       exit(0);
+      }
+  }
+  if((i+1)>=argc) {
+    printf("\nNot enough input parameters!\n\n");
+    print_help();
+    exit(0);
+  }
+  strcpy (docfile, argv[i]);
+  strcpy (modelfile, argv[i+1]);
+  if((i+2)<argc) {
+    strcpy (predictionsfile, argv[i+2]);
+  }
+  if(((*pred_format) != 0) && ((*pred_format) != 1)) {
+    printf("\nOutput format can only take the values 0 or 1!\n\n");
+    print_help();
+    exit(0);
+  }
+}
+
+void print_help(void)
+{
+  printf("\nSVM-light %s: Support Vector Machine, classification module     %s\n",VERSION,VERSION_DATE);
+  copyright_notice();
+  printf("   usage: svm_classify [options] example_file model_file output_file\n\n");
+  printf("options: -h         -> this help\n");
+  printf("         -v [0..3]  -> verbosity level (default 2)\n");
+  printf("         -f [0,1]   -> 0: old output format of V1.0\n");
+  printf("                    -> 1: output the value of decision function (default)\n\n");
+}
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/src/svm_common.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,984 @@
+/************************************************************************/
+/*                                                                      */
+/*   svm_common.c                                                       */
+/*                                                                      */
+/*   Definitions and functions used in both svm_learn and svm_classify. */
+/*                                                                      */
+/*   Author: Thorsten Joachims                                          */
+/*   Date: 02.07.04                                                     */
+/*                                                                      */
+/*   Copyright (c) 2004  Thorsten Joachims - All rights reserved        */
+/*                                                                      */
+/*   This software is available for non-commercial use only. It must    */
+/*   not be modified and distributed without prior permission of the    */
+/*   author. The author is not responsible for implications from the    */
+/*   use of this software.                                              */
+/*                                                                      */
+/************************************************************************/
+
+# include "ctype.h"
+# include "svm_common.h"
+# include "kernel.h"           /* this contains a user supplied kernel */
+
+long   verbosity;              /* verbosity level (0-4) */
+long   kernel_cache_statistic;
+
+double classify_example(MODEL *model, DOC *ex) 
+     /* classifies one example */
+{
+  register long i;
+  register double dist;
+
+  if((model->kernel_parm.kernel_type == LINEAR) && (model->lin_weights))
+    return(classify_example_linear(model,ex));
+	   
+  dist=0;
+  for(i=1;i<model->sv_num;i++) {  
+    dist+=kernel(&model->kernel_parm,model->supvec[i],ex)*model->alpha[i];
+  }
+  return(dist-model->b);
+}
+
+double classify_example_linear(MODEL *model, DOC *ex) 
+     /* classifies example for linear kernel */
+     
+     /* important: the model must have the linear weight vector computed */
+     /* use: add_weight_vector_to_linear_model(&model); */
+
+
+     /* important: the feature numbers in the example to classify must */
+     /*            not be larger than the weight vector!               */
+{
+  double sum=0;
+  SVECTOR *f;
+
+  for(f=ex->fvec;f;f=f->next)  
+    sum+=f->factor*sprod_ns(model->lin_weights,f);
+  return(sum-model->b);
+}
+
+
+CFLOAT kernel(KERNEL_PARM *kernel_parm, DOC *a, DOC *b) 
+     /* calculate the kernel function */
+{
+  double sum=0;
+  SVECTOR *fa,*fb;
+
+  /* in case the constraints are sums of feature vector as represented
+     as a list of SVECTOR's with their coefficient factor in the sum,
+     take the kernel between all pairs */ 
+  for(fa=a->fvec;fa;fa=fa->next) { 
+    for(fb=b->fvec;fb;fb=fb->next) {
+      if(fa->kernel_id == fb->kernel_id)
+	sum+=fa->factor*fb->factor*single_kernel(kernel_parm,fa,fb);
+    }
+  }
+  return(sum);
+}
+
+CFLOAT single_kernel(KERNEL_PARM *kernel_parm, SVECTOR *a, SVECTOR *b) 
+     /* calculate the kernel function between two vectors */
+{
+  kernel_cache_statistic++;
+  switch(kernel_parm->kernel_type) {
+    case 0: /* linear */ 
+            return((CFLOAT)sprod_ss(a,b)); 
+    case 1: /* polynomial */
+            return((CFLOAT)pow(kernel_parm->coef_lin*sprod_ss(a,b)+kernel_parm->coef_const,(double)kernel_parm->poly_degree)); 
+    case 2: /* radial basis function */
+            return((CFLOAT)exp(-kernel_parm->rbf_gamma*(a->twonorm_sq-2*sprod_ss(a,b)+b->twonorm_sq)));
+    case 3: /* sigmoid neural net */
+            return((CFLOAT)tanh(kernel_parm->coef_lin*sprod_ss(a,b)+kernel_parm->coef_const)); 
+    case 4: /* custom-kernel supplied in file kernel.h*/
+            return((CFLOAT)custom_kernel(kernel_parm,a,b)); 
+    default: printf("Error: Unknown kernel function\n"); exit(1);
+  }
+}
+
+
+SVECTOR *create_svector(WORD *words,char *userdefined,double factor)
+{
+  SVECTOR *vec;
+  long    fnum,i;
+
+  fnum=0;
+  while(words[fnum].wnum) {
+    fnum++;
+  }
+  fnum++;
+  vec = (SVECTOR *)my_malloc(sizeof(SVECTOR));
+  vec->words = (WORD *)my_malloc(sizeof(WORD)*(fnum));
+  for(i=0;i<fnum;i++) { 
+      vec->words[i]=words[i];
+  }
+  vec->twonorm_sq=sprod_ss(vec,vec);
+
+  fnum=0;
+  while(userdefined[fnum]) {
+    fnum++;
+  }
+  fnum++;
+  vec->userdefined = (char *)my_malloc(sizeof(char)*(fnum));
+  for(i=0;i<fnum;i++) { 
+      vec->userdefined[i]=userdefined[i];
+  }
+  vec->kernel_id=0;
+  vec->next=NULL;
+  vec->factor=factor;
+  return(vec);
+}
+
+SVECTOR *copy_svector(SVECTOR *vec)
+{
+  SVECTOR *newvec=NULL;
+  if(vec) {
+    newvec=create_svector(vec->words,vec->userdefined,vec->factor);
+    newvec->next=copy_svector(vec->next);
+  }
+  return(newvec);
+}
+    
+void free_svector(SVECTOR *vec)
+{
+  if(vec) {
+    free(vec->words);
+    if(vec->userdefined)
+      free(vec->userdefined);
+    free_svector(vec->next);
+    free(vec);
+  }
+}
+
+double sprod_ss(SVECTOR *a, SVECTOR *b) 
+     /* compute the inner product of two sparse vectors */
+{
+    register CFLOAT sum=0;
+    register WORD *ai,*bj;
+    ai=a->words;
+    bj=b->words;
+    while (ai->wnum && bj->wnum) {
+      if(ai->wnum > bj->wnum) {
+	bj++;
+      }
+      else if (ai->wnum < bj->wnum) {
+	ai++;
+      }
+      else {
+	sum+=(CFLOAT)(ai->weight) * (CFLOAT)(bj->weight);
+	ai++;
+	bj++;
+      }
+    }
+    return((double)sum);
+}
+
+SVECTOR* sub_ss(SVECTOR *a, SVECTOR *b) 
+     /* compute the difference a-b of two sparse vectors */
+     /* Note: SVECTOR lists are not followed, but only the first
+	SVECTOR is used */
+{
+    SVECTOR *vec;
+    register WORD *sum,*sumi;
+    register WORD *ai,*bj;
+    long veclength;
+  
+    ai=a->words;
+    bj=b->words;
+    veclength=0;
+    while (ai->wnum && bj->wnum) {
+      if(ai->wnum > bj->wnum) {
+	veclength++;
+	bj++;
+      }
+      else if (ai->wnum < bj->wnum) {
+	veclength++;
+	ai++;
+      }
+      else {
+	veclength++;
+	ai++;
+	bj++;
+      }
+    }
+    while (bj->wnum) {
+      veclength++;
+      bj++;
+    }
+    while (ai->wnum) {
+      veclength++;
+      ai++;
+    }
+    veclength++;
+
+    sum=(WORD *)my_malloc(sizeof(WORD)*veclength);
+    sumi=sum;
+    ai=a->words;
+    bj=b->words;
+    while (ai->wnum && bj->wnum) {
+      if(ai->wnum > bj->wnum) {
+	(*sumi)=(*bj);
+	sumi->weight*=(-1);
+	sumi++;
+	bj++;
+      }
+      else if (ai->wnum < bj->wnum) {
+	(*sumi)=(*ai);
+	sumi++;
+	ai++;
+      }
+      else {
+	(*sumi)=(*ai);
+	sumi->weight-=bj->weight;
+	if(sumi->weight != 0)
+	  sumi++;
+	ai++;
+	bj++;
+      }
+    }
+    while (bj->wnum) {
+      (*sumi)=(*bj);
+      sumi->weight*=(-1);
+      sumi++;
+      bj++;
+    }
+    while (ai->wnum) {
+      (*sumi)=(*ai);
+      sumi++;
+      ai++;
+    }
+    sumi->wnum=0;
+
+    vec=create_svector(sum,"",1.0);
+    free(sum);
+
+    return(vec);
+}
+
+SVECTOR* add_ss(SVECTOR *a, SVECTOR *b) 
+     /* compute the sum a+b of two sparse vectors */
+     /* Note: SVECTOR lists are not followed, but only the first
+	SVECTOR is used */
+{
+    SVECTOR *vec;
+    register WORD *sum,*sumi;
+    register WORD *ai,*bj;
+    long veclength;
+  
+    ai=a->words;
+    bj=b->words;
+    veclength=0;
+    while (ai->wnum && bj->wnum) {
+      if(ai->wnum > bj->wnum) {
+	veclength++;
+	bj++;
+      }
+      else if (ai->wnum < bj->wnum) {
+	veclength++;
+	ai++;
+      }
+      else {
+	veclength++;
+	ai++;
+	bj++;
+      }
+    }
+    while (bj->wnum) {
+      veclength++;
+      bj++;
+    }
+    while (ai->wnum) {
+      veclength++;
+      ai++;
+    }
+    veclength++;
+
+    /*** is veclength=lengSequence(a)+lengthSequence(b)? ***/
+
+    sum=(WORD *)my_malloc(sizeof(WORD)*veclength);
+    sumi=sum;
+    ai=a->words;
+    bj=b->words;
+    while (ai->wnum && bj->wnum) {
+      if(ai->wnum > bj->wnum) {
+	(*sumi)=(*bj);
+	sumi++;
+	bj++;
+      }
+      else if (ai->wnum < bj->wnum) {
+	(*sumi)=(*ai);
+	sumi++;
+	ai++;
+      }
+      else {
+	(*sumi)=(*ai);
+	sumi->weight+=bj->weight;
+	if(sumi->weight != 0)
+	  sumi++;
+	ai++;
+	bj++;
+      }
+    }
+    while (bj->wnum) {
+      (*sumi)=(*bj);
+      sumi++;
+      bj++;
+    }
+    while (ai->wnum) {
+      (*sumi)=(*ai);
+      sumi++;
+      ai++;
+    }
+    sumi->wnum=0;
+
+    vec=create_svector(sum,"",1.0);
+    free(sum);
+
+    return(vec);
+}
+
+SVECTOR* add_list_ss(SVECTOR *a) 
+     /* computes the linear combination of the SVECTOR list weighted
+	by the factor of each SVECTOR */
+{
+  SVECTOR *scaled,*oldsum,*sum,*f;
+  WORD    empty[2];
+    
+  if(a){
+    sum=smult_s(a,a->factor);
+    for(f=a->next;f;f=f->next) {
+      scaled=smult_s(f,f->factor);
+      oldsum=sum;
+      sum=add_ss(sum,scaled);
+      free_svector(oldsum);
+      free_svector(scaled);
+    }
+    sum->factor=1.0;
+  }
+  else {
+    empty[0].wnum=0;
+    sum=create_svector(empty,"",1.0);
+  }
+  return(sum);
+}
+
+void append_svector_list(SVECTOR *a, SVECTOR *b) 
+     /* appends SVECTOR b to the end of SVECTOR a. */
+{
+    SVECTOR *f;
+    
+    for(f=a;f->next;f=f->next);  /* find end of first vector list */
+    f->next=b;                   /* append the two vector lists */
+}
+
+SVECTOR* smult_s(SVECTOR *a, double factor) 
+     /* scale sparse vector a by factor */
+{
+    SVECTOR *vec;
+    register WORD *sum,*sumi;
+    register WORD *ai;
+    long veclength;
+  
+    ai=a->words;
+    veclength=0;
+    while (ai->wnum) {
+      veclength++;
+      ai++;
+    }
+    veclength++;
+
+    sum=(WORD *)my_malloc(sizeof(WORD)*veclength);
+    sumi=sum;
+    ai=a->words;
+    while (ai->wnum) {
+	(*sumi)=(*ai);
+	sumi->weight*=factor;
+	if(sumi->weight != 0)
+	  sumi++;
+	ai++;
+    }
+    sumi->wnum=0;
+
+    vec=create_svector(sum,a->userdefined,a->factor);
+    free(sum);
+
+    return(vec);
+}
+
+int featvec_eq(SVECTOR *a, SVECTOR *b)
+     /* tests two sparse vectors for equality */
+{
+    register WORD *ai,*bj;
+    ai=a->words;
+    bj=b->words;
+    while (ai->wnum && bj->wnum) {
+      if(ai->wnum > bj->wnum) {
+	if((CFLOAT)(bj->weight) != 0)
+	  return(0);
+	bj++;
+      }
+      else if (ai->wnum < bj->wnum) {
+	if((CFLOAT)(ai->weight) != 0)
+	  return(0);
+	ai++;
+      }
+      else {
+	if((CFLOAT)(ai->weight) != (CFLOAT)(bj->weight)) 
+	  return(0);
+	ai++;
+	bj++;
+      }
+    }
+    return(1);
+}
+
+double model_length_s(MODEL *model, KERNEL_PARM *kernel_parm) 
+     /* compute length of weight vector */
+{
+  register long i,j;
+  register double sum=0,alphai;
+  register DOC *supveci;
+
+  for(i=1;i<model->sv_num;i++) {  
+    alphai=model->alpha[i];
+    supveci=model->supvec[i];
+    for(j=1;j<model->sv_num;j++) {
+      sum+=alphai*model->alpha[j]
+	   *kernel(kernel_parm,supveci,model->supvec[j]);
+    }
+  }
+  return(sqrt(sum));
+}
+
+void clear_vector_n(double *vec, long int n)
+{
+  register long i;
+  for(i=0;i<=n;i++) vec[i]=0;
+}
+
+void add_vector_ns(double *vec_n, SVECTOR *vec_s, double faktor)
+{
+  register WORD *ai;
+  ai=vec_s->words;
+  while (ai->wnum) {
+    vec_n[ai->wnum]+=(faktor*ai->weight);
+    ai++;
+  }
+}
+
+double sprod_ns(double *vec_n, SVECTOR *vec_s)
+{
+  register double sum=0;
+  register WORD *ai;
+  ai=vec_s->words;
+  while (ai->wnum) {
+    sum+=(vec_n[ai->wnum]*ai->weight);
+    ai++;
+  }
+  return(sum);
+}
+
+void add_weight_vector_to_linear_model(MODEL *model)
+     /* compute weight vector in linear case and add to model */
+{
+  long i;
+  SVECTOR *f;
+
+  model->lin_weights=(double *)my_malloc(sizeof(double)*(model->totwords+1));
+  clear_vector_n(model->lin_weights,model->totwords);
+  for(i=1;i<model->sv_num;i++) {
+    for(f=(model->supvec[i])->fvec;f;f=f->next)  
+      add_vector_ns(model->lin_weights,f,f->factor*model->alpha[i]);
+  }
+}
+
+
+DOC *create_example(long docnum, long queryid, long slackid, 
+		    double costfactor, SVECTOR *fvec)
+{
+  DOC *example;
+  example = (DOC *)my_malloc(sizeof(DOC));
+  example->docnum=docnum;
+  example->queryid=queryid;
+  example->slackid=slackid;
+  example->costfactor=costfactor;
+  example->fvec=fvec;
+  return(example);
+}
+
+void free_example(DOC *example, long deep)
+{
+  if(example) {
+    if(deep) {
+      if(example->fvec)
+	free_svector(example->fvec);
+    }
+    free(example);
+  }
+}
+
+void write_model(char *modelfile, MODEL *model)
+{
+  FILE *modelfl;
+  long j,i,sv_num;
+  SVECTOR *v;
+
+  if(verbosity>=1) {
+    printf("Writing model file..."); fflush(stdout);
+  }
+  if ((modelfl = fopen (modelfile, "w")) == NULL)
+  { perror (modelfile); exit (1); }
+  fprintf(modelfl,"SVM-light Version %s\n",VERSION);
+  fprintf(modelfl,"%ld # kernel type\n",
+	  model->kernel_parm.kernel_type);
+  fprintf(modelfl,"%ld # kernel parameter -d \n",
+	  model->kernel_parm.poly_degree);
+  fprintf(modelfl,"%.8g # kernel parameter -g \n",
+	  model->kernel_parm.rbf_gamma);
+  fprintf(modelfl,"%.8g # kernel parameter -s \n",
+	  model->kernel_parm.coef_lin);
+  fprintf(modelfl,"%.8g # kernel parameter -r \n",
+	  model->kernel_parm.coef_const);
+  fprintf(modelfl,"%s# kernel parameter -u \n",model->kernel_parm.custom);
+  fprintf(modelfl,"%ld # highest feature index \n",model->totwords);
+  fprintf(modelfl,"%ld # number of training documents \n",model->totdoc);
+ 
+  sv_num=1;
+  for(i=1;i<model->sv_num;i++) {
+    for(v=model->supvec[i]->fvec;v;v=v->next) 
+      sv_num++;
+  }
+  fprintf(modelfl,"%ld # number of support vectors plus 1 \n",sv_num);
+  fprintf(modelfl,"%.8g # threshold b, each following line is a SV (starting with alpha*y)\n",model->b);
+
+  for(i=1;i<model->sv_num;i++) {
+    for(v=model->supvec[i]->fvec;v;v=v->next) {
+      fprintf(modelfl,"%.32g ",model->alpha[i]*v->factor);
+      for (j=0; (v->words[j]).wnum; j++) {
+	fprintf(modelfl,"%ld:%.8g ",
+		(long)(v->words[j]).wnum,
+		(double)(v->words[j]).weight);
+      }
+      fprintf(modelfl,"#%s\n",v->userdefined);
+    /* NOTE: this could be made more efficient by summing the
+       alpha's of identical vectors before writing them to the
+       file. */
+    }
+  }
+  fclose(modelfl);
+  if(verbosity>=1) {
+    printf("done\n");
+  }
+}
+
+
+MODEL *read_model(char *modelfile)
+{
+  FILE *modelfl;
+  long i,queryid,slackid;
+  double costfactor;
+  long max_sv,max_words,ll,wpos;
+  char *line,*comment;
+  WORD *words;
+  char version_buffer[100];
+  MODEL *model;
+
+  if(verbosity>=1) {
+    printf("Reading model..."); fflush(stdout);
+  }
+
+  nol_ll(modelfile,&max_sv,&max_words,&ll); /* scan size of model file */
+  max_words+=2;
+  ll+=2;
+
+  words = (WORD *)my_malloc(sizeof(WORD)*(max_words+10));
+  line = (char *)my_malloc(sizeof(char)*ll);
+  model = (MODEL *)my_malloc(sizeof(MODEL));
+
+  if ((modelfl = fopen (modelfile, "r")) == NULL)
+  { perror (modelfile); exit (1); }
+
+  fscanf(modelfl,"SVM-light Version %s\n",version_buffer);
+  if(strcmp(version_buffer,VERSION)) {
+    perror ("Version of model-file does not match version of svm_classify!"); 
+    exit (1); 
+  }
+  fscanf(modelfl,"%ld%*[^\n]\n", &model->kernel_parm.kernel_type);  
+  fscanf(modelfl,"%ld%*[^\n]\n", &model->kernel_parm.poly_degree);
+  fscanf(modelfl,"%lf%*[^\n]\n", &model->kernel_parm.rbf_gamma);
+  fscanf(modelfl,"%lf%*[^\n]\n", &model->kernel_parm.coef_lin);
+  fscanf(modelfl,"%lf%*[^\n]\n", &model->kernel_parm.coef_const);
+  fscanf(modelfl,"%[^#]%*[^\n]\n", model->kernel_parm.custom);
+
+  fscanf(modelfl,"%ld%*[^\n]\n", &model->totwords);
+  fscanf(modelfl,"%ld%*[^\n]\n", &model->totdoc);
+  fscanf(modelfl,"%ld%*[^\n]\n", &model->sv_num);
+  fscanf(modelfl,"%lf%*[^\n]\n", &model->b);
+
+  model->supvec = (DOC **)my_malloc(sizeof(DOC *)*model->sv_num);
+  model->alpha = (double *)my_malloc(sizeof(double)*model->sv_num);
+  model->index=NULL;
+  model->lin_weights=NULL;
+
+  for(i=1;i<model->sv_num;i++) {
+    fgets(line,(int)ll,modelfl);
+    if(!parse_document(line,words,&(model->alpha[i]),&queryid,&slackid,
+		       &costfactor,&wpos,max_words,&comment)) {
+      printf("\nParsing error while reading model file in SV %ld!\n%s",
+	     i,line);
+      exit(1);
+    }
+    model->supvec[i] = create_example(-1,
+				      0,0,
+				      0.0,
+				      create_svector(words,comment,1.0));
+  }
+  fclose(modelfl);
+  free(line);
+  free(words);
+  if(verbosity>=1) {
+    fprintf(stdout, "OK. (%d support vectors read)\n",(int)(model->sv_num-1));
+  }
+  return(model);
+}
+
+MODEL *copy_model(MODEL *model)
+{
+  MODEL *newmodel;
+  long  i;
+
+  newmodel=(MODEL *)my_malloc(sizeof(MODEL));
+  (*newmodel)=(*model);
+  newmodel->supvec = (DOC **)my_malloc(sizeof(DOC *)*model->sv_num);
+  newmodel->alpha = (double *)my_malloc(sizeof(double)*model->sv_num);
+  newmodel->index = NULL; /* index is not copied */
+  newmodel->supvec[0] = NULL;
+  newmodel->alpha[0] = 0;
+  for(i=1;i<model->sv_num;i++) {
+    newmodel->alpha[i]=model->alpha[i];
+    newmodel->supvec[i]=create_example(model->supvec[i]->docnum,
+				       model->supvec[i]->queryid,0,
+				       model->supvec[i]->costfactor,
+				       copy_svector(model->supvec[i]->fvec));
+  }
+  if(model->lin_weights) {
+    newmodel->lin_weights = (double *)my_malloc(sizeof(double)*(model->totwords+1));
+    for(i=0;i<model->totwords+1;i++) 
+      newmodel->lin_weights[i]=model->lin_weights[i];
+  }
+  return(newmodel);
+}
+
+void free_model(MODEL *model, int deep)
+{
+  long i;
+
+  if(model->supvec) {
+    if(deep) {
+      for(i=1;i<model->sv_num;i++) {
+	free_example(model->supvec[i],1);
+      }
+    }
+    free(model->supvec);
+  }
+  if(model->alpha) free(model->alpha);
+  if(model->index) free(model->index);
+  if(model->lin_weights) free(model->lin_weights);
+  free(model);
+}
+
+
+void read_documents(char *docfile, DOC ***docs, double **label, 
+		    long int *totwords, long int *totdoc)
+{
+  char *line,*comment;
+  WORD *words;
+  long dnum=0,wpos,dpos=0,dneg=0,dunlab=0,queryid,slackid,max_docs;
+  long max_words_doc, ll;
+  double doc_label,costfactor;
+  FILE *docfl;
+
+  if(verbosity>=1) {
+    printf("Scanning examples..."); fflush(stdout);
+  }
+  nol_ll(docfile,&max_docs,&max_words_doc,&ll); /* scan size of input file */
+  max_words_doc+=2;
+  ll+=2;
+  max_docs+=2;
+  if(verbosity>=1) {
+    printf("done\n"); fflush(stdout);
+  }
+
+  (*docs) = (DOC **)my_malloc(sizeof(DOC *)*max_docs);    /* feature vectors */
+  (*label) = (double *)my_malloc(sizeof(double)*max_docs); /* target values */
+  line = (char *)my_malloc(sizeof(char)*ll);
+
+  if ((docfl = fopen (docfile, "r")) == NULL)
+  { perror (docfile); exit (1); }
+
+  words = (WORD *)my_malloc(sizeof(WORD)*(max_words_doc+10));
+  if(verbosity>=1) {
+    printf("Reading examples into memory..."); fflush(stdout);
+  }
+  dnum=0;
+  (*totwords)=0;
+  while((!feof(docfl)) && fgets(line,(int)ll,docfl)) {
+    if(line[0] == '#') continue;  /* line contains comments */
+    if(!parse_document(line,words,&doc_label,&queryid,&slackid,&costfactor,
+		       &wpos,max_words_doc,&comment)) {
+      printf("\nParsing error in line %ld!\n%s",dnum,line);
+      exit(1);
+    }
+    (*label)[dnum]=doc_label;
+    /* printf("docnum=%ld: Class=%f ",dnum,doc_label); */
+    if(doc_label > 0) dpos++;
+    if (doc_label < 0) dneg++;
+    if (doc_label == 0) dunlab++;
+    if((wpos>1) && ((words[wpos-2]).wnum>(*totwords))) 
+      (*totwords)=(words[wpos-2]).wnum;
+    if((*totwords) > MAXFEATNUM) {
+      printf("\nMaximum feature number exceeds limit defined in MAXFEATNUM!\n");
+      printf("LINE: %s\n",line);
+      exit(1);
+    }
+    (*docs)[dnum] = create_example(dnum,queryid,slackid,costfactor,
+				   create_svector(words,comment,1.0));
+    /* printf("\nNorm=%f\n",((*docs)[dnum]->fvec)->twonorm_sq);  */
+    dnum++;  
+    if(verbosity>=1) {
+      if((dnum % 100) == 0) {
+	printf("%ld..",dnum); fflush(stdout);
+      }
+    }
+  } 
+
+  fclose(docfl);
+  free(line);
+  free(words);
+  if(verbosity>=1) {
+    fprintf(stdout, "OK. (%ld examples read)\n", dnum);
+  }
+  (*totdoc)=dnum;
+}
+
+int parse_document(char *line, WORD *words, double *label,
+		   long *queryid, long *slackid, double *costfactor,
+		   long int *numwords, long int max_words_doc,
+		   char **comment)
+{
+  register long wpos,pos;
+  long wnum;
+  double weight;
+  int numread;
+  char featurepair[1000],junk[1000];
+
+  (*queryid)=0;
+  (*slackid)=0;
+  (*costfactor)=1;
+
+  pos=0;
+  (*comment)=NULL;
+  while(line[pos] ) {      /* cut off comments */
+    if((line[pos] == '#') && (!(*comment))) {
+      line[pos]=0;
+      (*comment)=&(line[pos+1]);
+    }
+    if(line[pos] == '\n') { /* strip the CR */
+      line[pos]=0;
+    }
+    pos++;
+  }
+  if(!(*comment)) (*comment)=&(line[pos]);
+  /* printf("Comment: '%s'\n",(*comment)); */
+
+  wpos=0;
+  /* check, that line starts with target value or zero, but not with
+     feature pair */
+  if(sscanf(line,"%s",featurepair) == EOF) return(0);
+  pos=0;
+  while((featurepair[pos] != ':') && featurepair[pos]) pos++;
+  if(featurepair[pos] == ':') {
+	perror ("Line must start with label or 0!!!\n"); 
+	printf("LINE: %s\n",line);
+	exit (1); 
+  }
+  /* read the target value */
+  if(sscanf(line,"%lf",label) == EOF) return(0);
+  pos=0;
+  while(space_or_null((int)line[pos])) pos++;
+  while((!space_or_null((int)line[pos])) && line[pos]) pos++;
+  while(((numread=sscanf(line+pos,"%s",featurepair)) != EOF) && 
+	(numread > 0) && 
+	(wpos<max_words_doc)) {
+    /* printf("%s\n",featurepair); */
+    while(space_or_null((int)line[pos])) pos++;
+    while((!space_or_null((int)line[pos])) && line[pos]) pos++;
+    if(sscanf(featurepair,"qid:%ld%s",&wnum,junk)==1) {
+      /* it is the query id */
+      (*queryid)=(long)wnum;
+    }
+    else if(sscanf(featurepair,"sid:%ld%s",&wnum,junk)==1) {
+      /* it is the slack id */
+      if(wnum > 0) 
+	(*slackid)=(long)wnum;
+      else {
+	perror ("Slack-id must be greater or equal to 1!!!\n"); 
+	printf("LINE: %s\n",line);
+	exit (1); 
+      }
+    }
+    else if(sscanf(featurepair,"cost:%lf%s",&weight,junk)==1) {
+      /* it is the example-dependent cost factor */
+      (*costfactor)=(double)weight;
+    }
+    else if(sscanf(featurepair,"%ld:%lf%s",&wnum,&weight,junk)==2) {
+      /* it is a regular feature */
+      if(wnum<=0) { 
+	perror ("Feature numbers must be larger or equal to 1!!!\n"); 
+	printf("LINE: %s\n",line);
+	exit (1); 
+      }
+      if((wpos>0) && ((words[wpos-1]).wnum >= wnum)) { 
+	perror ("Features must be in increasing order!!!\n"); 
+	printf("LINE: %s\n",line);
+	exit (1); 
+      }
+      (words[wpos]).wnum=wnum;
+      (words[wpos]).weight=(FVAL)weight; 
+      wpos++;
+    }
+    else {
+      perror ("Cannot parse feature/value pair!!!\n"); 
+      printf("'%s' in LINE: %s\n",featurepair,line);
+      exit (1); 
+    }
+  }
+  (words[wpos]).wnum=0;
+  (*numwords)=wpos+1;
+  return(1);
+}
+
+double *read_alphas(char *alphafile,long totdoc)
+     /* reads the alpha vector from a file as written by the
+        write_alphas function */
+{
+  FILE *fl;
+  double *alpha;
+  long dnum;
+
+  if ((fl = fopen (alphafile, "r")) == NULL)
+  { perror (alphafile); exit (1); }
+
+  alpha = (double *)my_malloc(sizeof(double)*totdoc);
+  if(verbosity>=1) {
+    printf("Reading alphas..."); fflush(stdout);
+  }
+  dnum=0;
+  while((!feof(fl)) && fscanf(fl,"%lf\n",&alpha[dnum]) && (dnum<totdoc)) {
+    dnum++;
+  }
+  if(dnum != totdoc)
+  { perror ("\nNot enough values in alpha file!"); exit (1); }
+  fclose(fl);
+
+  if(verbosity>=1) {
+    printf("done\n"); fflush(stdout);
+  }
+
+  return(alpha);
+}
+
+void nol_ll(char *file, long int *nol, long int *wol, long int *ll) 
+     /* Grep through file and count number of lines, maximum number of
+        spaces per line, and longest line. */
+{
+  FILE *fl;
+  int ic;
+  char c;
+  long current_length,current_wol;
+
+  if ((fl = fopen (file, "r")) == NULL)
+  { perror (file); exit (1); }
+  current_length=0;
+  current_wol=0;
+  (*ll)=0;
+  (*nol)=1;
+  (*wol)=0;
+  while((ic=getc(fl)) != EOF) {
+    c=(char)ic;
+    current_length++;
+    if(space_or_null((int)c)) {
+      current_wol++;
+    }
+    if(c == '\n') {
+      (*nol)++;
+      if(current_length>(*ll)) {
+	(*ll)=current_length;
+      }
+      if(current_wol>(*wol)) {
+	(*wol)=current_wol;
+      }
+      current_length=0;
+      current_wol=0;
+    }
+  }
+  fclose(fl);
+}
+
+long minl(long int a, long int b)
+{
+  if(a<b)
+    return(a);
+  else
+    return(b);
+}
+
+long maxl(long int a, long int b)
+{
+  if(a>b)
+    return(a);
+  else
+    return(b);
+}
+
+long get_runtime(void)
+{
+  clock_t start;
+  start = clock();
+  return((long)((double)start*100.0/(double)CLOCKS_PER_SEC));
+}
+
+
+# ifdef _MSC_VER
+
+int isnan(double a)
+{
+  return(_isnan(a));
+}
+
+# endif 
+
+int space_or_null(int c) {
+  if (c==0)
+    return 1;
+  return isspace(c);
+}
+
+void *my_malloc(size_t size)
+{
+  void *ptr;
+  ptr=(void *)malloc(size);
+  if(!ptr) { 
+    perror ("Out of memory!\n"); 
+    exit (1); 
+  }
+  return(ptr);
+}
+
+void copyright_notice(void)
+{
+  printf("\nCopyright: Thorsten Joachims, thorsten@joachims.org\n\n");
+  printf("This software is available for non-commercial use only. It must not\n");
+  printf("be modified and distributed without prior permission of the author.\n");
+  printf("The author is not responsible for implications from the use of this\n");
+  printf("software.\n\n");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/src/svm_common.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,301 @@
+/************************************************************************/
+/*                                                                      */
+/*   svm_common.h                                                       */
+/*                                                                      */
+/*   Definitions and functions used in both svm_learn and svm_classify. */
+/*                                                                      */
+/*   Author: Thorsten Joachims                                          */
+/*   Date: 02.07.02                                                     */
+/*                                                                      */
+/*   Copyright (c) 2002  Thorsten Joachims - All rights reserved        */
+/*                                                                      */
+/*   This software is available for non-commercial use only. It must    */
+/*   not be modified and distributed without prior permission of the    */
+/*   author. The author is not responsible for implications from the    */
+/*   use of this software.                                              */
+/*                                                                      */
+/************************************************************************/
+
+#ifndef SVM_COMMON
+#define SVM_COMMON
+
+# define MAXSHRINK     50000    /* maximum number of shrinking rounds */
+# define MAXFEATNUM 99999999    /* maximum feature number (must be in
+			  	   valid range of long int type!) */
+
+# include <stdio.h>
+# include <ctype.h>
+# include <math.h>
+# include <string.h>
+# include <stdlib.h>
+# include <time.h> 
+# include <float.h>
+
+# define VERSION       "V6.01"
+# define VERSION_DATE  "01.09.04"
+
+# define CFLOAT  float       /* the type of float to use for caching */
+                             /* kernel evaluations. Using float saves */
+                             /* us some memory, but you can use double, too */
+# define FNUM    long        /* the type used for storing feature ids */
+# define FVAL    float       /* the type used for storing feature values */
+
+# define LINEAR  0           /* linear kernel type */
+# define POLY    1           /* polynoial kernel type */
+# define RBF     2           /* rbf kernel type */
+# define SIGMOID 3           /* sigmoid kernel type */
+
+# define CLASSIFICATION 1    /* train classification model */
+# define REGRESSION     2    /* train regression model */
+# define RANKING        3    /* train ranking model */
+# define OPTIMIZATION   4    /* train on general set of constraints */
+
+typedef struct word {
+  FNUM    wnum;	               /* word number */
+  FVAL    weight;              /* word weight */
+} WORD;
+
+typedef struct svector {
+  WORD    *words;              /* The features/values in the vector by
+				  increasing feature-number. Feature
+				  numbers that are skipped are
+				  interpreted as having value zero. */
+  double  twonorm_sq;          /* The squared euclidian length of the
+                                  vector. Used to speed up the RBF kernel. */
+  char    *userdefined;        /* You can put additional information
+				  here. This can be useful, if you are
+				  implementing your own kernel that
+				  does not work with feature/values
+				  representations (for example a
+				  string kernel). By default,
+				  svm-light will put here the string
+				  after the # sign from each line of
+				  the input file. */
+  long    kernel_id;           /* Feature vectors with different
+				  kernel_id's are orthogonal (ie. the
+				  feature number do not match). This
+				  is used for computing component
+				  kernels for linear constraints which
+				  are a sum of several different
+				  weight vectors. (currently not
+				  implemented). */
+  struct svector *next;        /* Let's you set up a list of SVECTOR's
+				  for linear constraints which are a
+				  sum of multiple feature
+				  vectors. List is terminated by
+				  NULL. */
+  double  factor;              /* Factor by which this feature vector
+				  is multiplied in the sum. */
+} SVECTOR;
+
+typedef struct doc {
+  long    docnum;              /* Document ID. This has to be the position of 
+                                  the document in the training set array. */
+  long    queryid;             /* for learning rankings, constraints are 
+				  generated for documents with the same 
+				  queryID. */
+  double  costfactor;          /* Scales the cost of misclassifying this
+				  document by this factor. The effect of this
+				  value is, that the upper bound on the alpha
+				  for this example is scaled by this factor.
+				  The factors are set by the feature 
+				  'cost:<val>' in the training data. */
+  long    slackid;             /* Index of the slack variable
+				  corresponding to this
+				  constraint. All constraints with the
+				  same slackid share the same slack
+				  variable. This can only be used for
+				  svm_learn_optimization. */
+  SVECTOR *fvec;               /* Feature vector of the example. The
+				  feature vector can actually be a
+				  list of feature vectors. For
+				  example, the list will have two
+				  elements, if this DOC is a
+				  preference constraint. The one
+				  vector that is supposed to be ranked
+				  higher, will have a factor of +1,
+				  the lower ranked one should have a
+				  factor of -1. */
+} DOC;
+
+typedef struct learn_parm {
+  long   type;                 /* selects between regression and
+				  classification */
+  double svm_c;                /* upper bound C on alphas */
+  double eps;                  /* regression epsilon (eps=1.0 for
+				  classification */
+  double svm_costratio;        /* factor to multiply C for positive examples */
+  double transduction_posratio;/* fraction of unlabeled examples to be */
+                               /* classified as positives */
+  long   biased_hyperplane;    /* if nonzero, use hyperplane w*x+b=0 
+				  otherwise w*x=0 */
+  long   sharedslack;          /* if nonzero, it will use the shared
+                                  slack variable mode in
+                                  svm_learn_optimization. It requires
+                                  that the slackid is set for every
+                                  training example */
+  long   svm_maxqpsize;        /* size q of working set */
+  long   svm_newvarsinqp;      /* new variables to enter the working set 
+				  in each iteration */
+  long   kernel_cache_size;    /* size of kernel cache in megabytes */
+  double epsilon_crit;         /* tolerable error for distances used 
+				  in stopping criterion */
+  double epsilon_shrink;       /* how much a multiplier should be above 
+				  zero for shrinking */
+  long   svm_iter_to_shrink;   /* iterations h after which an example can
+				  be removed by shrinking */
+  long   maxiter;              /* number of iterations after which the
+				  optimizer terminates, if there was
+				  no progress in maxdiff */
+  long   remove_inconsistent;  /* exclude examples with alpha at C and 
+				  retrain */
+  long   skip_final_opt_check; /* do not check KT-Conditions at the end of
+				  optimization for examples removed by 
+				  shrinking. WARNING: This might lead to 
+				  sub-optimal solutions! */
+  long   compute_loo;          /* if nonzero, computes leave-one-out
+				  estimates */
+  double rho;                  /* parameter in xi/alpha-estimates and for
+				  pruning leave-one-out range [1..2] */
+  long   xa_depth;             /* parameter in xi/alpha-estimates upper
+				  bounding the number of SV the current
+				  alpha_t is distributed over */
+  char predfile[200];          /* file for predicitions on unlabeled examples
+				  in transduction */
+  char alphafile[200];         /* file to store optimal alphas in. use  
+				  empty string if alphas should not be 
+				  output */
+
+  /* you probably do not want to touch the following */
+  double epsilon_const;        /* tolerable error on eq-constraint */
+  double epsilon_a;            /* tolerable error on alphas at bounds */
+  double opt_precision;        /* precision of solver, set to e.g. 1e-21 
+				  if you get convergence problems */
+
+  /* the following are only for internal use */
+  long   svm_c_steps;          /* do so many steps for finding optimal C */
+  double svm_c_factor;         /* increase C by this factor every step */
+  double svm_costratio_unlab;
+  double svm_unlabbound;
+  double *svm_cost;            /* individual upper bounds for each var */
+  long   totwords;             /* number of features */
+} LEARN_PARM;
+
+typedef struct kernel_parm {
+  long    kernel_type;   /* 0=linear, 1=poly, 2=rbf, 3=sigmoid, 4=custom */
+  long    poly_degree;
+  double  rbf_gamma;
+  double  coef_lin;
+  double  coef_const;
+  char    custom[50];    /* for user supplied kernel */
+} KERNEL_PARM;
+
+typedef struct model {
+  long    sv_num;	
+  long    at_upper_bound;
+  double  b;
+  DOC     **supvec;
+  double  *alpha;
+  long    *index;       /* index from docnum to position in model */
+  long    totwords;     /* number of features */
+  long    totdoc;       /* number of training documents */
+  KERNEL_PARM kernel_parm; /* kernel */
+
+  /* the following values are not written to file */
+  double  loo_error,loo_recall,loo_precision; /* leave-one-out estimates */
+  double  xa_error,xa_recall,xa_precision;    /* xi/alpha estimates */
+  double  *lin_weights;                       /* weights for linear case using
+						 folding */
+  double  maxdiff;                            /* precision, up to which this 
+						 model is accurate */
+} MODEL;
+
+typedef struct quadratic_program {
+  long   opt_n;            /* number of variables */
+  long   opt_m;            /* number of linear equality constraints */
+  double *opt_ce,*opt_ce0; /* linear equality constraints */
+  double *opt_g;           /* hessian of objective */
+  double *opt_g0;          /* linear part of objective */
+  double *opt_xinit;       /* initial value for variables */
+  double *opt_low,*opt_up; /* box constraints */
+} QP;
+
+typedef struct kernel_cache {
+  long   *index;  /* cache some kernel evalutations */
+  CFLOAT *buffer; /* to improve speed */
+  long   *invindex;
+  long   *active2totdoc;
+  long   *totdoc2active;
+  long   *lru;
+  long   *occu;
+  long   elems;
+  long   max_elems;
+  long   time;
+  long   activenum;
+  long   buffsize;
+} KERNEL_CACHE;
+
+
+typedef struct timing_profile {
+  long   time_kernel;
+  long   time_opti;
+  long   time_shrink;
+  long   time_update;
+  long   time_model;
+  long   time_check;
+  long   time_select;
+} TIMING;
+
+typedef struct shrink_state {
+  long   *active;
+  long   *inactive_since;
+  long   deactnum;
+  double **a_history;  /* for shrinking with non-linear kernel */
+  long   maxhistory;
+  double *last_a;      /* for shrinking with linear kernel */
+  double *last_lin;    /* for shrinking with linear kernel */
+} SHRINK_STATE;
+
+double classify_example(MODEL *, DOC *);
+double classify_example_linear(MODEL *, DOC *);
+CFLOAT kernel(KERNEL_PARM *, DOC *, DOC *); 
+CFLOAT single_kernel(KERNEL_PARM *, SVECTOR *, SVECTOR *); 
+double custom_kernel(KERNEL_PARM *, SVECTOR *, SVECTOR *); 
+SVECTOR *create_svector(WORD *, char *, double);
+SVECTOR *copy_svector(SVECTOR *);
+void   free_svector(SVECTOR *);
+double    sprod_ss(SVECTOR *, SVECTOR *);
+SVECTOR*  sub_ss(SVECTOR *, SVECTOR *); 
+SVECTOR*  add_ss(SVECTOR *, SVECTOR *); 
+SVECTOR*  add_list_ss(SVECTOR *); 
+void      append_svector_list(SVECTOR *a, SVECTOR *b);
+SVECTOR*  smult_s(SVECTOR *, double);
+int       featvec_eq(SVECTOR *, SVECTOR *); 
+double model_length_s(MODEL *, KERNEL_PARM *);
+void   clear_vector_n(double *, long);
+void   add_vector_ns(double *, SVECTOR *, double);
+double sprod_ns(double *, SVECTOR *);
+void   add_weight_vector_to_linear_model(MODEL *);
+DOC    *create_example(long, long, long, double, SVECTOR *);
+void   free_example(DOC *, long);
+MODEL  *read_model(char *);
+MODEL  *copy_model(MODEL *);
+void   free_model(MODEL *, int);
+void   read_documents(char *, DOC ***, double **, long *, long *);
+int    parse_document(char *, WORD *, double *, long *, long *, double *, long *, long, char **);
+double *read_alphas(char *,long);
+void   nol_ll(char *, long *, long *, long *);
+long   minl(long, long);
+long   maxl(long, long);
+long   get_runtime(void);
+int    space_or_null(int);
+void   *my_malloc(size_t); 
+void   copyright_notice(void);
+# ifdef _MSC_VER
+   int isnan(double);
+# endif
+
+extern long   verbosity;              /* verbosity level (0-4) */
+extern long   kernel_cache_statistic;
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/src/svm_hideo.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1062 @@
+/***********************************************************************/
+/*                                                                     */
+/*   svm_hideo.c                                                       */
+/*                                                                     */
+/*   The Hildreth and D'Espo solver specialized for SVMs.              */
+/*                                                                     */
+/*   Author: Thorsten Joachims                                         */
+/*   Date: 02.07.02                                                    */
+/*                                                                     */
+/*   Copyright (c) 2002  Thorsten Joachims - All rights reserved       */
+/*                                                                     */
+/*   This software is available for non-commercial use only. It must   */
+/*   not be modified and distributed without prior permission of the   */
+/*   author. The author is not responsible for implications from the   */
+/*   use of this software.                                             */
+/*                                                                     */
+/***********************************************************************/
+
+# include <math.h>
+# include "svm_common.h"
+
+/* 
+  solve the quadratic programming problem
+ 
+  minimize   g0 * x + 1/2 x' * G * x
+  subject to ce*x = ce0
+             l <= x <= u
+ 
+  The linear constraint vector ce can only have -1/+1 as entries 
+*/
+
+/* Common Block Declarations */
+
+long verbosity;
+
+# define PRIMAL_OPTIMAL      1
+# define DUAL_OPTIMAL        2
+# define MAXITER_EXCEEDED    3
+# define NAN_SOLUTION        4
+# define ONLY_ONE_VARIABLE   5
+
+# define LARGEROUND          0
+# define SMALLROUND          1
+
+/* /////////////////////////////////////////////////////////////// */
+
+# define DEF_PRECISION          1E-5
+# define DEF_MAX_ITERATIONS     200
+# define DEF_LINDEP_SENSITIVITY 1E-8
+# define EPSILON_HIDEO          1E-20
+# define EPSILON_EQ             1E-5
+
+double *optimize_qp(QP *, double *, long, double *, LEARN_PARM *);
+double *primal=0,*dual=0;
+long   precision_violations=0;
+double opt_precision=DEF_PRECISION;
+long   maxiter=DEF_MAX_ITERATIONS;
+double lindep_sensitivity=DEF_LINDEP_SENSITIVITY;
+double *buffer;
+long   *nonoptimal;
+
+long  smallroundcount=0;
+long  roundnumber=0;
+
+/* /////////////////////////////////////////////////////////////// */
+
+void *my_malloc();
+
+int optimize_hildreth_despo(long,long,double,double,double,long,long,long,double,double *,
+			    double *,double *,double *,double *,double *,
+			    double *,double *,double *,long *,double *,double *);
+int solve_dual(long,long,double,double,long,double *,double *,double *,
+	       double *,double *,double *,double *,double *,double *,
+	       double *,double *,double *,double *,long);
+
+void linvert_matrix(double *, long, double *, double, long *);
+void lprint_matrix(double *, long);
+void ladd_matrix(double *, long, double);
+void lcopy_matrix(double *, long, double *);
+void lswitch_rows_matrix(double *, long, long, long);
+void lswitchrk_matrix(double *, long, long, long);
+
+double calculate_qp_objective(long, double *, double *, double *);
+
+
+
+double *optimize_qp(qp,epsilon_crit,nx,threshold,learn_parm)
+QP *qp;
+double *epsilon_crit;
+long nx; /* Maximum number of variables in QP */
+double *threshold; 
+LEARN_PARM *learn_parm;
+/* start the optimizer and return the optimal values */
+/* The HIDEO optimizer does not necessarily fully solve the problem. */
+/* Since it requires a strictly positive definite hessian, the solution */
+/* is restricted to a linear independent subset in case the matrix is */
+/* only semi-definite. */
+{
+  long i,j;
+  int result;
+  double eq,progress;
+
+  roundnumber++;
+
+  if(!primal) { /* allocate memory at first call */
+    primal=(double *)my_malloc(sizeof(double)*nx);
+    dual=(double *)my_malloc(sizeof(double)*((nx+1)*2));
+    nonoptimal=(long *)my_malloc(sizeof(long)*(nx));
+    buffer=(double *)my_malloc(sizeof(double)*((nx+1)*2*(nx+1)*2+
+					       nx*nx+2*(nx+1)*2+2*nx+1+2*nx+
+					       nx+nx+nx*nx));
+    (*threshold)=0;
+    for(i=0;i<nx;i++) {
+      primal[i]=0;
+    }
+  }
+
+  if(verbosity>=4) { /* really verbose */
+    printf("\n\n");
+    eq=qp->opt_ce0[0];
+    for(i=0;i<qp->opt_n;i++) {
+      eq+=qp->opt_xinit[i]*qp->opt_ce[i];
+      printf("%f: ",qp->opt_g0[i]);
+      for(j=0;j<qp->opt_n;j++) {
+	printf("%f ",qp->opt_g[i*qp->opt_n+j]);
+      }
+      printf(": a=%.10f < %f",qp->opt_xinit[i],qp->opt_up[i]);
+      printf(": y=%f\n",qp->opt_ce[i]);
+    }
+    if(qp->opt_m) {
+      printf("EQ: %f*x0",qp->opt_ce[0]);
+      for(i=1;i<qp->opt_n;i++) {
+	printf(" + %f*x%ld",qp->opt_ce[i],i);
+      }
+      printf(" = %f\n\n",-qp->opt_ce0[0]);
+    }
+  }
+
+  result=optimize_hildreth_despo(qp->opt_n,qp->opt_m,
+				 opt_precision,(*epsilon_crit),
+				 learn_parm->epsilon_a,maxiter,
+				 /* (long)PRIMAL_OPTIMAL, */
+				 (long)0, (long)0,
+				 lindep_sensitivity,
+				 qp->opt_g,qp->opt_g0,qp->opt_ce,qp->opt_ce0,
+				 qp->opt_low,qp->opt_up,primal,qp->opt_xinit,
+				 dual,nonoptimal,buffer,&progress);
+  if(verbosity>=3) { 
+    printf("return(%d)...",result);
+  }
+
+  if(learn_parm->totwords < learn_parm->svm_maxqpsize) { 
+    /* larger working sets will be linear dependent anyway */
+    learn_parm->svm_maxqpsize=maxl(learn_parm->totwords,(long)2);
+  }
+
+  if(result == NAN_SOLUTION) {
+    lindep_sensitivity*=2;  /* throw out linear dependent examples more */
+                            /* generously */
+    if(learn_parm->svm_maxqpsize>2) {
+      learn_parm->svm_maxqpsize--;  /* decrease size of qp-subproblems */
+    }
+    precision_violations++;
+  }
+
+  /* take one round of only two variable to get unstuck */
+  if((result != PRIMAL_OPTIMAL) || (!(roundnumber % 31)) || (progress <= 0)) {
+
+    smallroundcount++;
+
+    result=optimize_hildreth_despo(qp->opt_n,qp->opt_m,
+				   opt_precision,(*epsilon_crit),
+				   learn_parm->epsilon_a,(long)maxiter,
+				   (long)PRIMAL_OPTIMAL,(long)SMALLROUND,
+				   lindep_sensitivity,
+				   qp->opt_g,qp->opt_g0,qp->opt_ce,qp->opt_ce0,
+				   qp->opt_low,qp->opt_up,primal,qp->opt_xinit,
+				   dual,nonoptimal,buffer,&progress);
+    if(verbosity>=3) { 
+      printf("return_srd(%d)...",result);
+    }
+
+    if(result != PRIMAL_OPTIMAL) {
+      if(result != ONLY_ONE_VARIABLE) 
+	precision_violations++;
+      if(result == MAXITER_EXCEEDED) 
+	maxiter+=100;
+      if(result == NAN_SOLUTION) {
+	lindep_sensitivity*=2;  /* throw out linear dependent examples more */
+	                        /* generously */
+	/* results not valid, so return inital values */
+	for(i=0;i<qp->opt_n;i++) {
+	  primal[i]=qp->opt_xinit[i];
+	}
+      }
+    }
+  }
+
+
+  if(precision_violations > 50) {
+    precision_violations=0;
+    (*epsilon_crit)*=10.0; 
+    if(verbosity>=1) {
+      printf("\nWARNING: Relaxing epsilon on KT-Conditions (%f).\n",
+	     (*epsilon_crit));
+    }
+  }	  
+
+  if((qp->opt_m>0) && (result != NAN_SOLUTION) && (!isnan(dual[1]-dual[0])))
+    (*threshold)=dual[1]-dual[0];
+  else
+    (*threshold)=0;
+
+  if(verbosity>=4) { /* really verbose */
+    printf("\n\n");
+    eq=qp->opt_ce0[0];
+    for(i=0;i<qp->opt_n;i++) {
+      eq+=primal[i]*qp->opt_ce[i];
+      printf("%f: ",qp->opt_g0[i]);
+      for(j=0;j<qp->opt_n;j++) {
+	printf("%f ",qp->opt_g[i*qp->opt_n+j]);
+      }
+      printf(": a=%.30f",primal[i]);
+      printf(": nonopti=%ld",nonoptimal[i]);
+      printf(": y=%f\n",qp->opt_ce[i]);
+    }
+    printf("eq-constraint=%.30f\n",eq);
+    printf("b=%f\n",(*threshold));
+    printf(" smallroundcount=%ld ",smallroundcount);
+  }
+
+  return(primal);
+}
+
+
+
+int optimize_hildreth_despo(n,m,precision,epsilon_crit,epsilon_a,maxiter,goal,
+			    smallround,lindep_sensitivity,g,g0,ce,ce0,low,up,
+			    primal,init,dual,lin_dependent,buffer,progress)
+     long   n;            /* number of variables */
+     long   m;            /* number of linear equality constraints [0,1] */
+     double precision;    /* solve at least to this dual precision */
+     double epsilon_crit; /* stop, if KT-Conditions approx fulfilled */
+     double epsilon_a;    /* precision of alphas at bounds */
+     long   maxiter;      /* stop after this many iterations */
+     long   goal;         /* keep going until goal fulfilled */
+     long   smallround;   /* use only two variables of steepest descent */
+     double lindep_sensitivity; /* epsilon for detecting linear dependent ex */
+     double *g;           /* hessian of objective */
+     double *g0;          /* linear part of objective */
+     double *ce,*ce0;     /* linear equality constraints */
+     double *low,*up;     /* box constraints */
+     double *primal;      /* primal variables */
+     double *init;        /* initial values of primal */
+     double *dual;        /* dual variables */
+     long   *lin_dependent;
+     double *buffer;
+     double *progress;    /* delta in the objective function between
+                             before and after */
+{
+  long i,j,k,from,to,n_indep,changed;
+  double sum,bmin=0,bmax=0;
+  double *d,*d0,*ig,*dual_old,*temp,*start;       
+  double *g0_new,*g_new,*ce_new,*ce0_new,*low_new,*up_new;
+  double add,t;
+  int result;
+  double obj_before,obj_after; 
+  long b1,b2;
+  double g0_b1,g0_b2,ce0_b;
+
+  g0_new=&(buffer[0]);    /* claim regions of buffer */
+  d=&(buffer[n]);
+  d0=&(buffer[n+(n+m)*2*(n+m)*2]);
+  ce_new=&(buffer[n+(n+m)*2*(n+m)*2+(n+m)*2]);
+  ce0_new=&(buffer[n+(n+m)*2*(n+m)*2+(n+m)*2+n]);
+  ig=&(buffer[n+(n+m)*2*(n+m)*2+(n+m)*2+n+m]);
+  dual_old=&(buffer[n+(n+m)*2*(n+m)*2+(n+m)*2+n+m+n*n]);
+  low_new=&(buffer[n+(n+m)*2*(n+m)*2+(n+m)*2+n+m+n*n+(n+m)*2]);
+  up_new=&(buffer[n+(n+m)*2*(n+m)*2+(n+m)*2+n+m+n*n+(n+m)*2+n]);
+  start=&(buffer[n+(n+m)*2*(n+m)*2+(n+m)*2+n+m+n*n+(n+m)*2+n+n]);
+  g_new=&(buffer[n+(n+m)*2*(n+m)*2+(n+m)*2+n+m+n*n+(n+m)*2+n+n+n]);
+  temp=&(buffer[n+(n+m)*2*(n+m)*2+(n+m)*2+n+m+n*n+(n+m)*2+n+n+n+n*n]);
+
+  b1=-1;
+  b2=-1;
+  for(i=0;i<n;i++) {   /* get variables with steepest feasible descent */
+    sum=g0[i];         
+    for(j=0;j<n;j++) 
+      sum+=init[j]*g[i*n+j];
+    sum=sum*ce[i];
+    if(((b1==-1) || (sum<bmin)) 
+       && (!((init[i]<=(low[i]+epsilon_a)) && (ce[i]<0.0)))
+       && (!((init[i]>=( up[i]-epsilon_a)) && (ce[i]>0.0)))
+       ) {
+      bmin=sum;
+      b1=i;
+    }
+    if(((b2==-1) || (sum>=bmax)) 
+       && (!((init[i]<=(low[i]+epsilon_a)) && (ce[i]>0.0)))
+       && (!((init[i]>=( up[i]-epsilon_a)) && (ce[i]<0.0)))
+       ) {
+      bmax=sum;
+      b2=i;
+    }
+  }
+  /* in case of unbiased hyperplane, the previous projection on */
+  /* equality constraint can lead to b1 or b2 being -1. */
+  if((b1 == -1) || (b2 == -1)) {
+    b1=maxl(b1,b2);
+    b2=maxl(b1,b2);
+  }
+
+  for(i=0;i<n;i++) {
+    start[i]=init[i];
+  }
+
+  /* in case both example vectors are linearly dependent */
+  /* WARNING: Assumes that ce[] in {-1,1} */
+  add=0;
+  changed=0;
+  if((b1 != b2) && (m==1)) {
+    for(i=0;i<n;i++) {  /* fix other vectors */
+      if(i==b1) 
+	g0_b1=g0[i];
+      if(i==b2) 
+	g0_b2=g0[i];
+    }
+    ce0_b=ce0[0];
+    for(i=0;i<n;i++) {  
+      if((i!=b1) && (i!=b2)) {
+	for(j=0;j<n;j++) {
+	  if(j==b1) 
+	    g0_b1+=start[i]*g[i*n+j];
+	  if(j==b2) 
+	    g0_b2+=start[i]*g[i*n+j];
+	}
+	ce0_b-=(start[i]*ce[i]);
+      }
+    }
+    if((g[b1*n+b2] == g[b1*n+b1]) && (g[b1*n+b2] == g[b2*n+b2])) {
+      /* printf("euqal\n"); */
+      if(ce[b1] == ce[b2]) { 
+	if(g0_b1 <= g0_b2) { /* set b1 to upper bound */
+	  /* printf("case +=<\n"); */
+	  changed=1;
+	  t=up[b1]-init[b1];
+	  if((init[b2]-low[b2]) < t) {
+	    t=init[b2]-low[b2];
+	  }
+	  start[b1]=init[b1]+t;
+	  start[b2]=init[b2]-t;
+	}
+	else if(g0_b1 > g0_b2) { /* set b2 to upper bound */
+	  /* printf("case +=>\n"); */
+	  changed=1;
+	  t=up[b2]-init[b2];
+	  if((init[b1]-low[b1]) < t) {
+	    t=init[b1]-low[b1];
+	  }
+	  start[b1]=init[b1]-t;
+	  start[b2]=init[b2]+t;
+	}
+      }
+      else if(((g[b1*n+b1]>0) || (g[b2*n+b2]>0))) { /* (ce[b1] != ce[b2]) */ 
+	/* printf("case +!\n"); */
+	t=((ce[b2]/ce[b1])*g0[b1]-g0[b2]+ce0[0]*(g[b1*n+b1]*ce[b2]/ce[b1]-g[b1*n+b2]/ce[b1]))/((ce[b2]*ce[b2]/(ce[b1]*ce[b1]))*g[b1*n+b1]+g[b2*n+b2]-2*(g[b1*n+b2]*ce[b2]/ce[b1]))-init[b2];
+	changed=1;
+	if((up[b2]-init[b2]) < t) {
+	  t=up[b2]-init[b2];
+	}
+	if((init[b2]-low[b2]) < -t) {
+	  t=-(init[b2]-low[b2]);
+	}
+	if((up[b1]-init[b1]) < t) {
+	  t=(up[b1]-init[b1]);
+	}
+	if((init[b1]-low[b1]) < -t) {
+	  t=-(init[b1]-low[b1]);
+	}
+	start[b1]=init[b1]+t;
+	start[b2]=init[b2]+t;
+      }
+    }
+    if((-g[b1*n+b2] == g[b1*n+b1]) && (-g[b1*n+b2] == g[b2*n+b2])) {
+      /* printf("diffeuqal\n"); */
+      if(ce[b1] != ce[b2]) {
+	if((g0_b1+g0_b2) < 0) { /* set b1 and b2 to upper bound */
+	  /* printf("case -!<\n"); */
+	  changed=1;
+	  t=up[b1]-init[b1];
+	  if((up[b2]-init[b2]) < t) {
+	    t=up[b2]-init[b2];
+	  }
+	  start[b1]=init[b1]+t;
+	  start[b2]=init[b2]+t;
+	}     
+	else if((g0_b1+g0_b2) >= 0) { /* set b1 and b2 to lower bound */
+	  /* printf("case -!>\n"); */
+	  changed=1;
+	  t=init[b1]-low[b1];
+	  if((init[b2]-low[b2]) < t) {
+	    t=init[b2]-low[b2];
+	  }
+	  start[b1]=init[b1]-t;
+	  start[b2]=init[b2]-t;
+	}
+      }
+      else if(((g[b1*n+b1]>0) || (g[b2*n+b2]>0))) { /* (ce[b1]==ce[b2]) */
+	/*  printf("case -=\n"); */
+	t=((ce[b2]/ce[b1])*g0[b1]-g0[b2]+ce0[0]*(g[b1*n+b1]*ce[b2]/ce[b1]-g[b1*n+b2]/ce[b1]))/((ce[b2]*ce[b2]/(ce[b1]*ce[b1]))*g[b1*n+b1]+g[b2*n+b2]-2*(g[b1*n+b2]*ce[b2]/ce[b1]))-init[b2];
+	changed=1;
+	if((up[b2]-init[b2]) < t) {
+	  t=up[b2]-init[b2];
+	}
+	if((init[b2]-low[b2]) < -t) {
+	  t=-(init[b2]-low[b2]);
+	}
+	if((up[b1]-init[b1]) < -t) {
+	  t=-(up[b1]-init[b1]);
+	}
+	if((init[b1]-low[b1]) < t) {
+	  t=init[b1]-low[b1];
+	}
+	start[b1]=init[b1]-t;
+	start[b2]=init[b2]+t;
+      }	
+    }
+  }
+  /* if we have a biased hyperplane, then adding a constant to the */
+  /* hessian does not change the solution. So that is done for examples */
+  /* with zero diagonal entry, since HIDEO cannot handle them. */
+  if((m>0) 
+     && ((fabs(g[b1*n+b1]) < lindep_sensitivity) 
+	 || (fabs(g[b2*n+b2]) < lindep_sensitivity))) {
+    /* printf("Case 0\n"); */
+    add+=0.093274;
+  }    
+  /* in case both examples are linear dependent */
+  else if((m>0) 
+	  && (g[b1*n+b2] != 0 && g[b2*n+b2] != 0)
+	  && (fabs(g[b1*n+b1]/g[b1*n+b2] - g[b1*n+b2]/g[b2*n+b2])
+	      < lindep_sensitivity)) { 
+    /* printf("Case lindep\n"); */
+    add+=0.078274;
+  }
+
+  /* special case for zero diagonal entry on unbiased hyperplane */
+  if((m==0) && (b1>=0))  {
+    if(fabs(g[b1*n+b1]) < lindep_sensitivity) { 
+      /* printf("Case 0b1\n"); */
+      for(i=0;i<n;i++) {  /* fix other vectors */
+	if(i==b1) 
+	  g0_b1=g0[i];
+      }
+      for(i=0;i<n;i++) {  
+	if(i!=b1) {
+	  for(j=0;j<n;j++) {
+	    if(j==b1) 
+	      g0_b1+=start[i]*g[i*n+j];
+	  }
+	}
+      }
+      if(g0_b1<0)
+	start[b1]=up[b1];
+      if(g0_b1>=0)
+	start[b1]=low[b1];
+    }
+  }
+  if((m==0) && (b2>=0))  {
+    if(fabs(g[b2*n+b2]) < lindep_sensitivity) { 
+      /* printf("Case 0b2\n"); */
+      for(i=0;i<n;i++) {  /* fix other vectors */
+	if(i==b2) 
+	  g0_b2=g0[i];
+      }
+      for(i=0;i<n;i++) {  
+	if(i!=b2) {
+	  for(j=0;j<n;j++) {
+	    if(j==b2) 
+	      g0_b2+=start[i]*g[i*n+j];
+	  }
+	}
+      }
+      if(g0_b2<0)
+	start[b2]=up[b2];
+      if(g0_b2>=0)
+	start[b2]=low[b2];
+    }
+  }
+
+  /* printf("b1=%ld,b2=%ld\n",b1,b2); */
+
+  lcopy_matrix(g,n,d);
+  if((m==1) && (add>0.0)) {
+    for(j=0;j<n;j++) {
+      for(k=0;k<n;k++) {
+	d[j*n+k]+=add*ce[j]*ce[k];
+      }
+    }
+  }
+  else {
+    add=0.0;
+  }
+
+  if(n>2) {                    /* switch, so that variables are better mixed */
+    lswitchrk_matrix(d,n,b1,(long)0); 
+    if(b2 == 0) 
+      lswitchrk_matrix(d,n,b1,(long)1); 
+    else
+      lswitchrk_matrix(d,n,b2,(long)1); 
+  }
+  if(smallround == SMALLROUND) {
+    for(i=2;i<n;i++) {
+      lin_dependent[i]=1;
+    }
+    if(m>0) { /* for biased hyperplane, pick two variables */
+      lin_dependent[0]=0;
+      lin_dependent[1]=0;
+    }
+    else {    /* for unbiased hyperplane, pick only one variable */
+      lin_dependent[0]=smallroundcount % 2;
+      lin_dependent[1]=(smallroundcount+1) % 2;
+    }
+  }
+  else {
+    for(i=0;i<n;i++) {
+      lin_dependent[i]=0;
+    }
+  }
+  linvert_matrix(d,n,ig,lindep_sensitivity,lin_dependent);
+  if(n>2) {                    /* now switch back */
+    if(b2 == 0) {
+      lswitchrk_matrix(ig,n,b1,(long)1); 
+      i=lin_dependent[1];  
+      lin_dependent[1]=lin_dependent[b1];
+      lin_dependent[b1]=i;
+    }
+    else {
+      lswitchrk_matrix(ig,n,b2,(long)1); 
+      i=lin_dependent[1];  
+      lin_dependent[1]=lin_dependent[b2];
+      lin_dependent[b2]=i;
+    }
+    lswitchrk_matrix(ig,n,b1,(long)0); 
+    i=lin_dependent[0];  
+    lin_dependent[0]=lin_dependent[b1];
+    lin_dependent[b1]=i;
+  }
+  /* lprint_matrix(d,n); */
+  /* lprint_matrix(ig,n); */
+
+  lcopy_matrix(g,n,g_new);   /* restore g_new matrix */
+  if(add>0)
+    for(j=0;j<n;j++) {
+      for(k=0;k<n;k++) {
+	g_new[j*n+k]+=add*ce[j]*ce[k];
+      }
+    }
+
+  for(i=0;i<n;i++) {  /* fix linear dependent vectors */
+    g0_new[i]=g0[i]+add*ce0[0]*ce[i];
+  }
+  if(m>0) ce0_new[0]=-ce0[0];
+  for(i=0;i<n;i++) {  /* fix linear dependent vectors */
+    if(lin_dependent[i]) {
+      for(j=0;j<n;j++) {
+	if(!lin_dependent[j]) {
+	  g0_new[j]+=start[i]*g_new[i*n+j];
+	}
+      }
+      if(m>0) ce0_new[0]-=(start[i]*ce[i]);
+    }
+  }
+  from=0;   /* remove linear dependent vectors */
+  to=0;
+  n_indep=0;
+  for(i=0;i<n;i++) {
+    if(!lin_dependent[i]) {
+      g0_new[n_indep]=g0_new[i];
+      ce_new[n_indep]=ce[i]; 
+      low_new[n_indep]=low[i];
+      up_new[n_indep]=up[i];
+      primal[n_indep]=start[i];
+      n_indep++;
+    }
+    for(j=0;j<n;j++) {
+      if((!lin_dependent[i]) && (!lin_dependent[j])) {
+        ig[to]=ig[from];
+        g_new[to]=g_new[from];
+	to++;
+      }
+      from++;
+    }
+  }
+
+  if(verbosity>=3) {
+    printf("real_qp_size(%ld)...",n_indep);
+  }
+  
+  /* cannot optimize with only one variable */
+  if((n_indep<=1) && (m>0) && (!changed)) { 
+    for(i=n-1;i>=0;i--) {
+      primal[i]=init[i];
+    }
+    return((int)ONLY_ONE_VARIABLE);
+  }
+
+  if((!changed) || (n_indep>1)) { 
+    result=solve_dual(n_indep,m,precision,epsilon_crit,maxiter,g_new,g0_new,
+		      ce_new,ce0_new,low_new,up_new,primal,d,d0,ig,
+		      dual,dual_old,temp,goal);
+  }
+  else {
+    result=PRIMAL_OPTIMAL;
+  }
+  
+  j=n_indep;
+  for(i=n-1;i>=0;i--) {
+    if(!lin_dependent[i]) {
+      j--;
+      primal[i]=primal[j];
+    }
+    else {
+      primal[i]=start[i];  /* leave as is */
+    }
+    temp[i]=primal[i];
+  }
+   
+  obj_before=calculate_qp_objective(n,g,g0,init);
+  obj_after=calculate_qp_objective(n,g,g0,primal);
+  (*progress)=obj_before-obj_after;
+  if(verbosity>=3) {
+    printf("before(%.30f)...after(%.30f)...result_sd(%d)...",
+	   obj_before,obj_after,result); 
+  }
+
+  return((int)result);
+}
+
+
+int solve_dual(n,m,precision,epsilon_crit,maxiter,g,g0,ce,ce0,low,up,primal,
+	       d,d0,ig,dual,dual_old,temp,goal)
+     /* Solves the dual using the method of Hildreth and D'Espo. */
+     /* Can only handle problems with zero or exactly one */
+     /* equality constraints. */
+
+     long   n;            /* number of variables */
+     long   m;            /* number of linear equality constraints */
+     double precision;    /* solve at least to this dual precision */
+     double epsilon_crit; /* stop, if KT-Conditions approx fulfilled */
+     long   maxiter;      /* stop after that many iterations */
+     double *g;
+     double *g0;          /* linear part of objective */
+     double *ce,*ce0;     /* linear equality constraints */
+     double *low,*up;     /* box constraints */
+     double *primal;      /* variables (with initial values) */
+     double *d,*d0,*ig,*dual,*dual_old,*temp;       /* buffer  */
+     long goal;
+{
+  long i,j,k,iter;
+  double sum,w,maxviol,viol,temp1,temp2,isnantest;
+  double model_b,dist;
+  long retrain,maxfaktor,primal_optimal=0,at_bound,scalemaxiter;
+  double epsilon_a=1E-15,epsilon_hideo;
+  double eq; 
+
+  if((m<0) || (m>1)) 
+    perror("SOLVE DUAL: inappropriate number of eq-constrains!");
+
+  /*  
+  printf("\n");
+  for(i=0;i<n;i++) {
+    printf("%f: ",g0[i]);
+    for(j=0;j<n;j++) {
+      printf("%f ",g[i*n+j]);
+    }
+    printf(": a=%.30f",primal[i]);
+    printf(": y=%f\n",ce[i]);
+  }
+  */
+
+  for(i=0;i<2*(n+m);i++) {
+    dual[i]=0;
+    dual_old[i]=0;
+  }
+  for(i=0;i<n;i++) {   
+    for(j=0;j<n;j++) {   /* dual hessian for box constraints */
+      d[i*2*(n+m)+j]=ig[i*n+j];
+      d[(i+n)*2*(n+m)+j]=-ig[i*n+j];
+      d[i*2*(n+m)+j+n]=-ig[i*n+j];
+      d[(i+n)*2*(n+m)+j+n]=ig[i*n+j];
+    }
+    if(m>0) {
+      sum=0;              /* dual hessian for eq constraints */
+      for(j=0;j<n;j++) {
+	sum+=(ce[j]*ig[i*n+j]);
+      }
+      d[i*2*(n+m)+2*n]=sum;
+      d[i*2*(n+m)+2*n+1]=-sum;
+      d[(n+i)*2*(n+m)+2*n]=-sum;
+      d[(n+i)*2*(n+m)+2*n+1]=sum;
+      d[(n+n)*2*(n+m)+i]=sum;
+      d[(n+n+1)*2*(n+m)+i]=-sum;
+      d[(n+n)*2*(n+m)+(n+i)]=-sum;
+      d[(n+n+1)*2*(n+m)+(n+i)]=sum;
+      
+      sum=0;
+      for(j=0;j<n;j++) {
+	for(k=0;k<n;k++) {
+	  sum+=(ce[k]*ce[j]*ig[j*n+k]);
+	}
+      }
+      d[(n+n)*2*(n+m)+2*n]=sum;
+      d[(n+n)*2*(n+m)+2*n+1]=-sum;
+      d[(n+n+1)*2*(n+m)+2*n]=-sum;
+      d[(n+n+1)*2*(n+m)+2*n+1]=sum;
+    } 
+  }
+
+  for(i=0;i<n;i++) {   /* dual linear component for the box constraints */
+    w=0;
+    for(j=0;j<n;j++) {
+      w+=(ig[i*n+j]*g0[j]); 
+    }
+    d0[i]=up[i]+w;
+    d0[i+n]=-low[i]-w;
+  }
+
+  if(m>0) {  
+    sum=0;             /* dual linear component for eq constraints */
+    for(j=0;j<n;j++) {
+      for(k=0;k<n;k++) {
+	sum+=(ce[k]*ig[k*n+j]*g0[j]); 
+      }
+    }
+    d0[2*n]=ce0[0]+sum;
+    d0[2*n+1]=-ce0[0]-sum;
+  }
+
+  maxviol=999999;
+  iter=0;
+  retrain=1;
+  maxfaktor=1;
+  scalemaxiter=maxiter/5;
+  while((retrain) && (maxviol > 0) && (iter < (scalemaxiter*maxfaktor))) {
+    iter++;
+    
+    while((maxviol > precision) && (iter < (scalemaxiter*maxfaktor))) {
+      iter++;
+      maxviol=0;
+      for(i=0;i<2*(n+m);i++) {
+	sum=d0[i];
+	for(j=0;j<2*(n+m);j++) {
+	  sum+=d[i*2*(n+m)+j]*dual_old[j];
+	}
+	sum-=d[i*2*(n+m)+i]*dual_old[i];
+	dual[i]=-sum/d[i*2*(n+m)+i];
+	if(dual[i]<0) dual[i]=0;
+	
+	viol=fabs(dual[i]-dual_old[i]);
+	if(viol>maxviol) 
+	  maxviol=viol;
+	dual_old[i]=dual[i];
+      }
+      /*
+      printf("%d) maxviol=%20f precision=%f\n",iter,maxviol,precision); 
+      */
+    }
+  
+    if(m>0) {
+      for(i=0;i<n;i++) {
+	temp[i]=dual[i]-dual[i+n]+ce[i]*(dual[n+n]-dual[n+n+1])+g0[i];
+      }
+    } 
+    else {
+      for(i=0;i<n;i++) {
+	temp[i]=dual[i]-dual[i+n]+g0[i];
+      }
+    }
+    for(i=0;i<n;i++) {
+      primal[i]=0;             /* calc value of primal variables */
+      for(j=0;j<n;j++) {
+	primal[i]+=ig[i*n+j]*temp[j];
+      }
+      primal[i]*=-1.0;
+      if(primal[i]<=(low[i])) {  /* clip conservatively */
+	primal[i]=low[i];
+      }
+      else if(primal[i]>=(up[i])) {
+	primal[i]=up[i];
+      }
+    }
+
+    if(m>0) 
+      model_b=dual[n+n+1]-dual[n+n];
+    else
+      model_b=0;
+
+    epsilon_hideo=EPSILON_HIDEO;
+    for(i=0;i<n;i++) {           /* check precision of alphas */
+      dist=-model_b*ce[i]; 
+      dist+=(g0[i]+1.0);
+      for(j=0;j<i;j++) {
+	dist+=(primal[j]*g[j*n+i]);
+      }
+      for(j=i;j<n;j++) {
+	dist+=(primal[j]*g[i*n+j]);
+      }
+      if((primal[i]<(up[i]-epsilon_hideo)) && (dist < (1.0-epsilon_crit))) {
+	epsilon_hideo=(up[i]-primal[i])*2.0;
+      }
+      else if((primal[i]>(low[i]+epsilon_hideo)) &&(dist>(1.0+epsilon_crit))) {
+	epsilon_hideo=(primal[i]-low[i])*2.0;
+      }
+    }
+    /* printf("\nEPSILON_HIDEO=%.30f\n",epsilon_hideo); */
+
+    for(i=0;i<n;i++) {           /* clip alphas to bounds */
+      if(primal[i]<=(low[i]+epsilon_hideo)) {
+	primal[i]=low[i];
+      }
+      else if(primal[i]>=(up[i]-epsilon_hideo)) {
+	primal[i]=up[i];
+      }
+    }
+
+    retrain=0;
+    primal_optimal=1;
+    at_bound=0;
+    for(i=0;(i<n);i++) {  /* check primal KT-Conditions */
+      dist=-model_b*ce[i]; 
+      dist+=(g0[i]+1.0);
+      for(j=0;j<i;j++) {
+	dist+=(primal[j]*g[j*n+i]);
+      }
+      for(j=i;j<n;j++) {
+	dist+=(primal[j]*g[i*n+j]);
+      }
+      if((primal[i]<(up[i]-epsilon_a)) && (dist < (1.0-epsilon_crit))) {
+	retrain=1;
+	primal_optimal=0;
+      }
+      else if((primal[i]>(low[i]+epsilon_a)) && (dist > (1.0+epsilon_crit))) {
+	retrain=1;
+	primal_optimal=0;
+      }
+      if((primal[i]<=(low[i]+epsilon_a)) || (primal[i]>=(up[i]-epsilon_a))) {
+	at_bound++;
+      }
+      /*    printf("HIDEOtemp: a[%ld]=%.30f, dist=%.6f, b=%f, at_bound=%ld\n",i,primal[i],dist,model_b,at_bound);  */
+    }
+    if(m>0) {
+      eq=-ce0[0];               /* check precision of eq-constraint */
+      for(i=0;i<n;i++) { 
+	eq+=(ce[i]*primal[i]);
+      }
+      if((EPSILON_EQ < fabs(eq)) 
+	 /*
+	 && !((goal==PRIMAL_OPTIMAL) 
+	       && (at_bound==n)) */
+	 ) {
+	retrain=1;
+	primal_optimal=0;
+      }
+      /* printf("\n eq=%.30f ce0=%f at-bound=%ld\n",eq,ce0[0],at_bound);  */
+    }
+
+    if(retrain) {
+      precision/=10;
+      if(((goal == PRIMAL_OPTIMAL) && (maxfaktor < 50000))
+	 || (maxfaktor < 5)) {
+	maxfaktor++;
+      }
+    }
+  }
+
+  if(!primal_optimal) {
+    for(i=0;i<n;i++) {
+      primal[i]=0;             /* calc value of primal variables */
+      for(j=0;j<n;j++) {
+	primal[i]+=ig[i*n+j]*temp[j];
+      }
+      primal[i]*=-1.0;
+      if(primal[i]<=(low[i]+epsilon_a)) {  /* clip conservatively */
+	primal[i]=low[i];
+      }
+      else if(primal[i]>=(up[i]-epsilon_a)) {
+	primal[i]=up[i];
+      }
+    }
+  }
+
+  isnantest=0;
+  for(i=0;i<n;i++) {           /* check for isnan */
+    isnantest+=primal[i];
+  }
+
+  if(m>0) {
+    temp1=dual[n+n+1];   /* copy the dual variables for the eq */
+    temp2=dual[n+n];     /* constraints to a handier location */
+    for(i=n+n+1;i>=2;i--) {
+      dual[i]=dual[i-2];
+    }
+    dual[0]=temp2;
+    dual[1]=temp1;
+    isnantest+=temp1+temp2;
+  }
+
+  if(isnan(isnantest)) {
+    return((int)NAN_SOLUTION);
+  }
+  else if(primal_optimal) {
+    return((int)PRIMAL_OPTIMAL);
+  }
+  else if(maxviol == 0.0) {
+    return((int)DUAL_OPTIMAL);
+  }
+  else {
+    return((int)MAXITER_EXCEEDED);
+  }
+}
+
+
+void linvert_matrix(matrix,depth,inverse,lindep_sensitivity,lin_dependent)
+double *matrix;
+long depth;
+double *inverse,lindep_sensitivity;
+long *lin_dependent;  /* indicates the active parts of matrix on 
+			 input and output*/
+{
+  long i,j,k;
+  double factor;
+
+  for(i=0;i<depth;i++) {
+    /*    lin_dependent[i]=0; */
+    for(j=0;j<depth;j++) {
+      inverse[i*depth+j]=0.0;
+    }
+    inverse[i*depth+i]=1.0;
+  }
+  for(i=0;i<depth;i++) {
+    if(lin_dependent[i] || (fabs(matrix[i*depth+i])<lindep_sensitivity)) {
+      lin_dependent[i]=1;
+    }
+    else {
+      for(j=i+1;j<depth;j++) {
+	factor=matrix[j*depth+i]/matrix[i*depth+i];
+	for(k=i;k<depth;k++) {
+	  matrix[j*depth+k]-=(factor*matrix[i*depth+k]);
+	}
+	for(k=0;k<depth;k++) {
+	  inverse[j*depth+k]-=(factor*inverse[i*depth+k]);
+	}
+      }
+    }
+  }
+  for(i=depth-1;i>=0;i--) {
+    if(!lin_dependent[i]) {
+      factor=1/matrix[i*depth+i];
+      for(k=0;k<depth;k++) {
+	inverse[i*depth+k]*=factor;
+      }
+      matrix[i*depth+i]=1;
+      for(j=i-1;j>=0;j--) {
+	factor=matrix[j*depth+i];
+	matrix[j*depth+i]=0;
+	for(k=0;k<depth;k++) {
+	  inverse[j*depth+k]-=(factor*inverse[i*depth+k]);
+	}
+      }
+    }
+  }
+}
+
+void lprint_matrix(matrix,depth)
+double *matrix;
+long depth;
+{
+  long i,j;
+  for(i=0;i<depth;i++) {
+    for(j=0;j<depth;j++) {
+      printf("%5.2f ",(double)(matrix[i*depth+j]));
+    }
+    printf("\n");
+  }
+  printf("\n");
+}
+
+void ladd_matrix(matrix,depth,scalar)
+double *matrix;
+long depth;
+double scalar;
+{
+  long i,j;
+  for(i=0;i<depth;i++) {
+    for(j=0;j<depth;j++) {
+      matrix[i*depth+j]+=scalar;
+    }
+  }
+}
+
+void lcopy_matrix(matrix,depth,matrix2) 
+double *matrix;
+long depth;
+double *matrix2;
+{
+  long i;
+  
+  for(i=0;i<(depth)*(depth);i++) {
+    matrix2[i]=matrix[i];
+  }
+}
+
+void lswitch_rows_matrix(matrix,depth,r1,r2) 
+double *matrix;
+long depth,r1,r2;
+{
+  long i;
+  double temp;
+
+  for(i=0;i<depth;i++) {
+    temp=matrix[r1*depth+i];
+    matrix[r1*depth+i]=matrix[r2*depth+i];
+    matrix[r2*depth+i]=temp;
+  }
+}
+
+void lswitchrk_matrix(matrix,depth,rk1,rk2) 
+double *matrix;
+long depth,rk1,rk2;
+{
+  long i;
+  double temp;
+
+  for(i=0;i<depth;i++) {
+    temp=matrix[rk1*depth+i];
+    matrix[rk1*depth+i]=matrix[rk2*depth+i];
+    matrix[rk2*depth+i]=temp;
+  }
+  for(i=0;i<depth;i++) {
+    temp=matrix[i*depth+rk1];
+    matrix[i*depth+rk1]=matrix[i*depth+rk2];
+    matrix[i*depth+rk2]=temp;
+  }
+}
+
+double calculate_qp_objective(opt_n,opt_g,opt_g0,alpha)
+long opt_n;
+double *opt_g,*opt_g0,*alpha;
+{
+  double obj;
+  long i,j;
+  obj=0;  /* calculate objective  */
+  for(i=0;i<opt_n;i++) {
+    obj+=(opt_g0[i]*alpha[i]);
+    obj+=(0.5*alpha[i]*alpha[i]*opt_g[i*opt_n+i]);
+    for(j=0;j<i;j++) {
+      obj+=(alpha[j]*alpha[i]*opt_g[j*opt_n+i]);
+    }
+  }
+  return(obj);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/src/svm_learn.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4147 @@
+/***********************************************************************/
+/*                                                                     */
+/*   svm_learn.c                                                       */
+/*                                                                     */
+/*   Learning module of Support Vector Machine.                        */
+/*                                                                     */
+/*   Author: Thorsten Joachims                                         */
+/*   Date: 02.07.02                                                    */
+/*                                                                     */
+/*   Copyright (c) 2002  Thorsten Joachims - All rights reserved       */
+/*                                                                     */
+/*   This software is available for non-commercial use only. It must   */
+/*   not be modified and distributed without prior permission of the   */
+/*   author. The author is not responsible for implications from the   */
+/*   use of this software.                                             */
+/*                                                                     */
+/***********************************************************************/
+
+
+# include "svm_common.h"
+# include "svm_learn.h"
+
+
+/* interface to QP-solver */
+double *optimize_qp(QP *, double *, long, double *, LEARN_PARM *);
+
+/*---------------------------------------------------------------------------*/
+
+/* Learns an SVM classification model based on the training data in
+   docs/label. The resulting model is returned in the structure
+   model. */
+
+void svm_learn_classification(DOC **docs, double *class, long int
+			      totdoc, long int totwords, 
+			      LEARN_PARM *learn_parm, 
+			      KERNEL_PARM *kernel_parm, 
+			      KERNEL_CACHE *kernel_cache, 
+			      MODEL *model,
+			      double *alpha)
+     /* docs:        Training vectors (x-part) */
+     /* class:       Training labels (y-part, zero if test example for
+                     transduction) */
+     /* totdoc:      Number of examples in docs/label */
+     /* totwords:    Number of features (i.e. highest feature index) */
+     /* learn_parm:  Learning paramenters */
+     /* kernel_parm: Kernel paramenters */
+     /* kernel_cache:Initialized Cache of size totdoc, if using a kernel. 
+                     NULL if linear.*/
+     /* model:       Returns learning result (assumed empty before called) */
+     /* alpha:       Start values for the alpha variables or NULL
+	             pointer. The new alpha values are returned after 
+		     optimization if not NULL. Array must be of size totdoc. */
+{
+  long *inconsistent,i,*label;
+  long inconsistentnum;
+  long misclassified,upsupvecnum;
+  double loss,model_length,example_length;
+  double maxdiff,*lin,*a,*c;
+  long runtime_start,runtime_end;
+  long iterations;
+  long *unlabeled,transduction;
+  long heldout;
+  long loo_count=0,loo_count_pos=0,loo_count_neg=0,trainpos=0,trainneg=0;
+  long loocomputed=0,runtime_start_loo=0,runtime_start_xa=0;
+  double heldout_c=0,r_delta_sq=0,r_delta,r_delta_avg;
+  long *index,*index2dnum;
+  double *weights;
+  CFLOAT *aicache;  /* buffer to keep one row of hessian */
+
+  double *xi_fullset; /* buffer for storing xi on full sample in loo */
+  double *a_fullset;  /* buffer for storing alpha on full sample in loo */
+  TIMING timing_profile;
+  SHRINK_STATE shrink_state;
+
+  runtime_start=get_runtime();
+  timing_profile.time_kernel=0;
+  timing_profile.time_opti=0;
+  timing_profile.time_shrink=0;
+  timing_profile.time_update=0;
+  timing_profile.time_model=0;
+  timing_profile.time_check=0;
+  timing_profile.time_select=0;
+  kernel_cache_statistic=0;
+
+  learn_parm->totwords=totwords;
+
+  /* make sure -n value is reasonable */
+  if((learn_parm->svm_newvarsinqp < 2) 
+     || (learn_parm->svm_newvarsinqp > learn_parm->svm_maxqpsize)) {
+    learn_parm->svm_newvarsinqp=learn_parm->svm_maxqpsize;
+  }
+
+  init_shrink_state(&shrink_state,totdoc,(long)MAXSHRINK);
+
+  label = (long *)my_malloc(sizeof(long)*totdoc);
+  inconsistent = (long *)my_malloc(sizeof(long)*totdoc);
+  unlabeled = (long *)my_malloc(sizeof(long)*totdoc);
+  c = (double *)my_malloc(sizeof(double)*totdoc);
+  a = (double *)my_malloc(sizeof(double)*totdoc);
+  a_fullset = (double *)my_malloc(sizeof(double)*totdoc);
+  xi_fullset = (double *)my_malloc(sizeof(double)*totdoc);
+  lin = (double *)my_malloc(sizeof(double)*totdoc);
+  learn_parm->svm_cost = (double *)my_malloc(sizeof(double)*totdoc);
+  model->supvec = (DOC **)my_malloc(sizeof(DOC *)*(totdoc+2));
+  model->alpha = (double *)my_malloc(sizeof(double)*(totdoc+2));
+  model->index = (long *)my_malloc(sizeof(long)*(totdoc+2));
+
+  model->at_upper_bound=0;
+  model->b=0;	       
+  model->supvec[0]=0;  /* element 0 reserved and empty for now */
+  model->alpha[0]=0;
+  model->lin_weights=NULL;
+  model->totwords=totwords;
+  model->totdoc=totdoc;
+  model->kernel_parm=(*kernel_parm);
+  model->sv_num=1;
+  model->loo_error=-1;
+  model->loo_recall=-1;
+  model->loo_precision=-1;
+  model->xa_error=-1;
+  model->xa_recall=-1;
+  model->xa_precision=-1;
+  inconsistentnum=0;
+  transduction=0;
+
+  r_delta=estimate_r_delta(docs,totdoc,kernel_parm);
+  r_delta_sq=r_delta*r_delta;
+
+  r_delta_avg=estimate_r_delta_average(docs,totdoc,kernel_parm);
+  if(learn_parm->svm_c == 0.0) {  /* default value for C */
+    learn_parm->svm_c=1.0/(r_delta_avg*r_delta_avg);
+    if(verbosity>=1) 
+      printf("Setting default regularization parameter C=%.4f\n",
+	     learn_parm->svm_c);
+  }
+
+  learn_parm->eps=-1.0;      /* equivalent regression epsilon for
+				classification */
+
+  for(i=0;i<totdoc;i++) {    /* various inits */
+    docs[i]->docnum=i;
+    inconsistent[i]=0;
+    a[i]=0;
+    lin[i]=0;
+    c[i]=0.0;
+    unlabeled[i]=0;
+    if(class[i] == 0) {
+      unlabeled[i]=1;
+      label[i]=0;
+      transduction=1;
+    }
+    if(class[i] > 0) {
+      learn_parm->svm_cost[i]=learn_parm->svm_c*learn_parm->svm_costratio*
+	docs[i]->costfactor;
+      label[i]=1;
+      trainpos++;
+    }
+    else if(class[i] < 0) {
+      learn_parm->svm_cost[i]=learn_parm->svm_c*docs[i]->costfactor;
+      label[i]=-1;
+      trainneg++;
+    }
+    else {
+      learn_parm->svm_cost[i]=0;
+    }
+  }
+  if(verbosity>=2) {
+    printf("%ld positive, %ld negative, and %ld unlabeled examples.\n",trainpos,trainneg,totdoc-trainpos-trainneg); fflush(stdout);
+  }
+
+  /* caching makes no sense for linear kernel */
+  if(kernel_parm->kernel_type == LINEAR) {
+    kernel_cache = NULL;   
+  } 
+
+  /* compute starting state for initial alpha values */
+  if(alpha) {
+    if(verbosity>=1) {
+      printf("Computing starting state..."); fflush(stdout);
+    }
+    index = (long *)my_malloc(sizeof(long)*totdoc);
+    index2dnum = (long *)my_malloc(sizeof(long)*(totdoc+11));
+    weights=(double *)my_malloc(sizeof(double)*(totwords+1));
+    aicache = (CFLOAT *)my_malloc(sizeof(CFLOAT)*totdoc);
+    for(i=0;i<totdoc;i++) {    /* create full index and clip alphas */
+      index[i]=1;
+      alpha[i]=fabs(alpha[i]);
+      if(alpha[i]<0) alpha[i]=0;
+      if(alpha[i]>learn_parm->svm_cost[i]) alpha[i]=learn_parm->svm_cost[i];
+    }
+    if(kernel_parm->kernel_type != LINEAR) {
+      for(i=0;i<totdoc;i++)     /* fill kernel cache with unbounded SV */
+	if((alpha[i]>0) && (alpha[i]<learn_parm->svm_cost[i]) 
+	   && (kernel_cache_space_available(kernel_cache))) 
+	  cache_kernel_row(kernel_cache,docs,i,kernel_parm);
+      for(i=0;i<totdoc;i++)     /* fill rest of kernel cache with bounded SV */
+	if((alpha[i]==learn_parm->svm_cost[i]) 
+	   && (kernel_cache_space_available(kernel_cache))) 
+	  cache_kernel_row(kernel_cache,docs,i,kernel_parm);
+    }
+    (void)compute_index(index,totdoc,index2dnum);
+    update_linear_component(docs,label,index2dnum,alpha,a,index2dnum,totdoc,
+			    totwords,kernel_parm,kernel_cache,lin,aicache,
+			    weights);
+    (void)calculate_svm_model(docs,label,unlabeled,lin,alpha,a,c,
+			      learn_parm,index2dnum,index2dnum,model);
+    for(i=0;i<totdoc;i++) {    /* copy initial alphas */
+      a[i]=alpha[i];
+    }
+    free(index);
+    free(index2dnum);
+    free(weights);
+    free(aicache);
+    if(verbosity>=1) {
+      printf("done.\n");  fflush(stdout);
+    }   
+  } 
+
+  if(transduction) {
+    learn_parm->svm_iter_to_shrink=99999999;
+    if(verbosity >= 1)
+      printf("\nDeactivating Shrinking due to an incompatibility with the transductive \nlearner in the current version.\n\n");
+  }
+
+  if(transduction && learn_parm->compute_loo) {
+    learn_parm->compute_loo=0;
+    if(verbosity >= 1)
+      printf("\nCannot compute leave-one-out estimates for transductive learner.\n\n");
+  }    
+
+  if(learn_parm->remove_inconsistent && learn_parm->compute_loo) {
+    learn_parm->compute_loo=0;
+    printf("\nCannot compute leave-one-out estimates when removing inconsistent examples.\n\n");
+  }    
+
+  if(learn_parm->compute_loo && ((trainpos == 1) || (trainneg == 1))) {
+    learn_parm->compute_loo=0;
+    printf("\nCannot compute leave-one-out with only one example in one class.\n\n");
+  }    
+
+
+  if(verbosity==1) {
+    printf("Optimizing"); fflush(stdout);
+  }
+
+  /* train the svm */
+  iterations=optimize_to_convergence(docs,label,totdoc,totwords,learn_parm,
+				     kernel_parm,kernel_cache,&shrink_state,model,
+				     inconsistent,unlabeled,a,lin,
+				     c,&timing_profile,
+				     &maxdiff,(long)-1,
+				     (long)1);
+  
+  if(verbosity>=1) {
+    if(verbosity==1) printf("done. (%ld iterations)\n",iterations);
+
+    misclassified=0;
+    for(i=0;(i<totdoc);i++) { /* get final statistic */
+      if((lin[i]-model->b)*(double)label[i] <= 0.0) 
+	misclassified++;
+    }
+
+    printf("Optimization finished (%ld misclassified, maxdiff=%.5f).\n",
+	   misclassified,maxdiff); 
+
+    runtime_end=get_runtime();
+    if(verbosity>=2) {
+      printf("Runtime in cpu-seconds: %.2f (%.2f%% for kernel/%.2f%% for optimizer/%.2f%% for final/%.2f%% for update/%.2f%% for model/%.2f%% for check/%.2f%% for select)\n",
+        ((float)runtime_end-(float)runtime_start)/100.0,
+        (100.0*timing_profile.time_kernel)/(float)(runtime_end-runtime_start),
+	(100.0*timing_profile.time_opti)/(float)(runtime_end-runtime_start),
+	(100.0*timing_profile.time_shrink)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_update)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_model)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_check)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_select)/(float)(runtime_end-runtime_start));
+    }
+    else {
+      printf("Runtime in cpu-seconds: %.2f\n",
+	     (runtime_end-runtime_start)/100.0);
+    }
+
+    if(learn_parm->remove_inconsistent) {	  
+      inconsistentnum=0;
+      for(i=0;i<totdoc;i++) 
+	if(inconsistent[i]) 
+	  inconsistentnum++;
+      printf("Number of SV: %ld (plus %ld inconsistent examples)\n",
+	     model->sv_num-1,inconsistentnum);
+    }
+    else {
+      upsupvecnum=0;
+      for(i=1;i<model->sv_num;i++) {
+	if(fabs(model->alpha[i]) >= 
+	   (learn_parm->svm_cost[(model->supvec[i])->docnum]-
+	    learn_parm->epsilon_a)) 
+	  upsupvecnum++;
+      }
+      printf("Number of SV: %ld (including %ld at upper bound)\n",
+	     model->sv_num-1,upsupvecnum);
+    }
+    
+    if((verbosity>=1) && (!learn_parm->skip_final_opt_check)) {
+      loss=0;
+      model_length=0; 
+      for(i=0;i<totdoc;i++) {
+	if((lin[i]-model->b)*(double)label[i] < 1.0-learn_parm->epsilon_crit)
+	  loss+=1.0-(lin[i]-model->b)*(double)label[i];
+	model_length+=a[i]*label[i]*lin[i];
+      }
+      model_length=sqrt(model_length);
+      fprintf(stdout,"L1 loss: loss=%.5f\n",loss);
+      fprintf(stdout,"Norm of weight vector: |w|=%.5f\n",model_length);
+      example_length=estimate_sphere(model,kernel_parm); 
+      fprintf(stdout,"Norm of longest example vector: |x|=%.5f\n",
+	      length_of_longest_document_vector(docs,totdoc,kernel_parm));
+      fprintf(stdout,"Estimated VCdim of classifier: VCdim<=%.5f\n",
+	      estimate_margin_vcdim(model,model_length,example_length,
+				    kernel_parm));
+      if((!learn_parm->remove_inconsistent) && (!transduction)) {
+	runtime_start_xa=get_runtime();
+	if(verbosity>=1) {
+	  printf("Computing XiAlpha-estimates..."); fflush(stdout);
+	}
+	compute_xa_estimates(model,label,unlabeled,totdoc,docs,lin,a,
+			     kernel_parm,learn_parm,&(model->xa_error),
+			     &(model->xa_recall),&(model->xa_precision));
+	if(verbosity>=1) {
+	  printf("done\n");
+	}
+	printf("Runtime for XiAlpha-estimates in cpu-seconds: %.2f\n",
+	       (get_runtime()-runtime_start_xa)/100.0);
+	
+	fprintf(stdout,"XiAlpha-estimate of the error: error<=%.2f%% (rho=%.2f,depth=%ld)\n",
+		model->xa_error,learn_parm->rho,learn_parm->xa_depth);
+	fprintf(stdout,"XiAlpha-estimate of the recall: recall=>%.2f%% (rho=%.2f,depth=%ld)\n",
+		model->xa_recall,learn_parm->rho,learn_parm->xa_depth);
+	fprintf(stdout,"XiAlpha-estimate of the precision: precision=>%.2f%% (rho=%.2f,depth=%ld)\n",
+		model->xa_precision,learn_parm->rho,learn_parm->xa_depth);
+      }
+      else if(!learn_parm->remove_inconsistent) {
+	estimate_transduction_quality(model,label,unlabeled,totdoc,docs,lin);
+      }
+    }
+    if(verbosity>=1) {
+      printf("Number of kernel evaluations: %ld\n",kernel_cache_statistic);
+    }
+  }
+
+
+  /* leave-one-out testing starts now */
+  if(learn_parm->compute_loo) {
+    /* save results of training on full dataset for leave-one-out */
+    runtime_start_loo=get_runtime();
+    for(i=0;i<totdoc;i++) {
+      xi_fullset[i]=1.0-((lin[i]-model->b)*(double)label[i]);
+      if(xi_fullset[i]<0) xi_fullset[i]=0;
+      a_fullset[i]=a[i];
+    }
+    if(verbosity>=1) {
+      printf("Computing leave-one-out");
+    }
+    
+    /* repeat this loop for every held-out example */
+    for(heldout=0;(heldout<totdoc);heldout++) {
+      if(learn_parm->rho*a_fullset[heldout]*r_delta_sq+xi_fullset[heldout]
+	 < 1.0) { 
+	/* guaranteed to not produce a leave-one-out error */
+	if(verbosity==1) {
+	  printf("+"); fflush(stdout); 
+	}
+      }
+      else if(xi_fullset[heldout] > 1.0) {
+	/* guaranteed to produce a leave-one-out error */
+	loo_count++;
+	if(label[heldout] > 0)  loo_count_pos++; else loo_count_neg++;
+	if(verbosity==1) {
+	  printf("-"); fflush(stdout); 
+	}
+      }
+      else {
+	loocomputed++;
+	heldout_c=learn_parm->svm_cost[heldout]; /* set upper bound to zero */
+	learn_parm->svm_cost[heldout]=0;
+	/* make sure heldout example is not currently  */
+	/* shrunk away. Assumes that lin is up to date! */
+	shrink_state.active[heldout]=1;  
+	if(verbosity>=2) 
+	  printf("\nLeave-One-Out test on example %ld\n",heldout);
+	if(verbosity>=1) {
+	  printf("(?[%ld]",heldout); fflush(stdout); 
+	}
+	
+	optimize_to_convergence(docs,label,totdoc,totwords,learn_parm,
+				kernel_parm,
+				kernel_cache,&shrink_state,model,inconsistent,unlabeled,
+				a,lin,c,&timing_profile,
+				&maxdiff,heldout,(long)2);
+
+	/* printf("%.20f\n",(lin[heldout]-model->b)*(double)label[heldout]); */
+
+	if(((lin[heldout]-model->b)*(double)label[heldout]) <= 0.0) { 
+	  loo_count++;                            /* there was a loo-error */
+	  if(label[heldout] > 0)  loo_count_pos++; else loo_count_neg++;
+	  if(verbosity>=1) {
+	    printf("-)"); fflush(stdout); 
+	  }
+	}
+	else {
+	  if(verbosity>=1) {
+	    printf("+)"); fflush(stdout); 
+	  }
+	}
+	/* now we need to restore the original data set*/
+	learn_parm->svm_cost[heldout]=heldout_c; /* restore upper bound */
+      }
+    } /* end of leave-one-out loop */
+
+
+    if(verbosity>=1) {
+      printf("\nRetrain on full problem"); fflush(stdout); 
+    }
+    optimize_to_convergence(docs,label,totdoc,totwords,learn_parm,
+			    kernel_parm,
+			    kernel_cache,&shrink_state,model,inconsistent,unlabeled,
+			    a,lin,c,&timing_profile,
+			    &maxdiff,(long)-1,(long)1);
+    if(verbosity >= 1) 
+      printf("done.\n");
+    
+    
+    /* after all leave-one-out computed */
+    model->loo_error=100.0*loo_count/(double)totdoc;
+    model->loo_recall=(1.0-(double)loo_count_pos/(double)trainpos)*100.0;
+    model->loo_precision=(trainpos-loo_count_pos)/
+      (double)(trainpos-loo_count_pos+loo_count_neg)*100.0;
+    if(verbosity >= 1) {
+      fprintf(stdout,"Leave-one-out estimate of the error: error=%.2f%%\n",
+	      model->loo_error);
+      fprintf(stdout,"Leave-one-out estimate of the recall: recall=%.2f%%\n",
+	      model->loo_recall);
+      fprintf(stdout,"Leave-one-out estimate of the precision: precision=%.2f%%\n",
+	      model->loo_precision);
+      fprintf(stdout,"Actual leave-one-outs computed:  %ld (rho=%.2f)\n",
+	      loocomputed,learn_parm->rho);
+      printf("Runtime for leave-one-out in cpu-seconds: %.2f\n",
+	     (double)(get_runtime()-runtime_start_loo)/100.0);
+    }
+  }
+    
+  if(learn_parm->alphafile[0])
+    write_alphas(learn_parm->alphafile,a,label,totdoc);
+  
+  shrink_state_cleanup(&shrink_state);
+  free(label);
+  free(inconsistent);
+  free(unlabeled);
+  free(c);
+  free(a);
+  free(a_fullset);
+  free(xi_fullset);
+  free(lin);
+  free(learn_parm->svm_cost);
+}
+
+
+/* Learns an SVM regression model based on the training data in
+   docs/label. The resulting model is returned in the structure
+   model. */
+
+void svm_learn_regression(DOC **docs, double *value, long int totdoc, 
+			  long int totwords, LEARN_PARM *learn_parm, 
+			  KERNEL_PARM *kernel_parm, 
+			  KERNEL_CACHE **kernel_cache, MODEL *model)
+     /* docs:        Training vectors (x-part) */
+     /* class:       Training value (y-part) */
+     /* totdoc:      Number of examples in docs/label */
+     /* totwords:    Number of features (i.e. highest feature index) */
+     /* learn_parm:  Learning paramenters */
+     /* kernel_parm: Kernel paramenters */
+     /* kernel_cache:Initialized Cache, if using a kernel. NULL if
+                     linear. Note that it will be free'd and reassigned */
+     /* model:       Returns learning result (assumed empty before called) */
+{
+  long *inconsistent,i,j;
+  long inconsistentnum;
+  long upsupvecnum;
+  double loss,model_length,example_length;
+  double maxdiff,*lin,*a,*c;
+  long runtime_start,runtime_end;
+  long iterations,kernel_cache_size;
+  long *unlabeled;
+  double r_delta_sq=0,r_delta,r_delta_avg;
+  double *xi_fullset; /* buffer for storing xi on full sample in loo */
+  double *a_fullset;  /* buffer for storing alpha on full sample in loo */
+  TIMING timing_profile;
+  SHRINK_STATE shrink_state;
+  DOC **docs_org;
+  long *label;
+
+  /* set up regression problem in standard form */
+  docs_org=docs;
+  docs = (DOC **)my_malloc(sizeof(DOC)*2*totdoc);
+  label = (long *)my_malloc(sizeof(long)*2*totdoc);
+  c = (double *)my_malloc(sizeof(double)*2*totdoc);
+  for(i=0;i<totdoc;i++) {   
+    j=2*totdoc-1-i;
+    docs[i]=create_example(i,0,0,docs_org[i]->costfactor,docs_org[i]->fvec);
+    label[i]=+1;
+    c[i]=value[i];
+    docs[j]=create_example(j,0,0,docs_org[i]->costfactor,docs_org[i]->fvec);
+    label[j]=-1;
+    c[j]=value[i];
+  }
+  totdoc*=2;
+
+  /* need to get a bigger kernel cache */
+  if(*kernel_cache) {
+    kernel_cache_size=(*kernel_cache)->buffsize*sizeof(CFLOAT)/(1024*1024);
+    kernel_cache_cleanup(*kernel_cache);
+    (*kernel_cache)=kernel_cache_init(totdoc,kernel_cache_size);
+  }
+
+  runtime_start=get_runtime();
+  timing_profile.time_kernel=0;
+  timing_profile.time_opti=0;
+  timing_profile.time_shrink=0;
+  timing_profile.time_update=0;
+  timing_profile.time_model=0;
+  timing_profile.time_check=0;
+  timing_profile.time_select=0;
+  kernel_cache_statistic=0;
+
+  learn_parm->totwords=totwords;
+
+  /* make sure -n value is reasonable */
+  if((learn_parm->svm_newvarsinqp < 2) 
+     || (learn_parm->svm_newvarsinqp > learn_parm->svm_maxqpsize)) {
+    learn_parm->svm_newvarsinqp=learn_parm->svm_maxqpsize;
+  }
+
+  init_shrink_state(&shrink_state,totdoc,(long)MAXSHRINK);
+
+  inconsistent = (long *)my_malloc(sizeof(long)*totdoc);
+  unlabeled = (long *)my_malloc(sizeof(long)*totdoc);
+  a = (double *)my_malloc(sizeof(double)*totdoc);
+  a_fullset = (double *)my_malloc(sizeof(double)*totdoc);
+  xi_fullset = (double *)my_malloc(sizeof(double)*totdoc);
+  lin = (double *)my_malloc(sizeof(double)*totdoc);
+  learn_parm->svm_cost = (double *)my_malloc(sizeof(double)*totdoc);
+  model->supvec = (DOC **)my_malloc(sizeof(DOC *)*(totdoc+2));
+  model->alpha = (double *)my_malloc(sizeof(double)*(totdoc+2));
+  model->index = (long *)my_malloc(sizeof(long)*(totdoc+2));
+
+  model->at_upper_bound=0;
+  model->b=0;	       
+  model->supvec[0]=0;  /* element 0 reserved and empty for now */
+  model->alpha[0]=0;
+  model->lin_weights=NULL;
+  model->totwords=totwords;
+  model->totdoc=totdoc;
+  model->kernel_parm=(*kernel_parm);
+  model->sv_num=1;
+  model->loo_error=-1;
+  model->loo_recall=-1;
+  model->loo_precision=-1;
+  model->xa_error=-1;
+  model->xa_recall=-1;
+  model->xa_precision=-1;
+  inconsistentnum=0;
+
+  r_delta=estimate_r_delta(docs,totdoc,kernel_parm);
+  r_delta_sq=r_delta*r_delta;
+
+  r_delta_avg=estimate_r_delta_average(docs,totdoc,kernel_parm);
+  if(learn_parm->svm_c == 0.0) {  /* default value for C */
+    learn_parm->svm_c=1.0/(r_delta_avg*r_delta_avg);
+    if(verbosity>=1) 
+      printf("Setting default regularization parameter C=%.4f\n",
+	     learn_parm->svm_c);
+  }
+
+  for(i=0;i<totdoc;i++) {    /* various inits */
+    inconsistent[i]=0;
+    a[i]=0;
+    lin[i]=0;
+    unlabeled[i]=0;
+    if(label[i] > 0) {
+      learn_parm->svm_cost[i]=learn_parm->svm_c*learn_parm->svm_costratio*
+	docs[i]->costfactor;
+    }
+    else if(label[i] < 0) {
+      learn_parm->svm_cost[i]=learn_parm->svm_c*docs[i]->costfactor;
+    }
+  }
+
+  /* caching makes no sense for linear kernel */
+  if((kernel_parm->kernel_type == LINEAR) && (*kernel_cache)) {
+    printf("WARNING: Using a kernel cache for linear case will slow optimization down!\n");
+  } 
+
+  if(verbosity==1) {
+    printf("Optimizing"); fflush(stdout);
+  }
+
+  /* train the svm */
+  iterations=optimize_to_convergence(docs,label,totdoc,totwords,learn_parm,
+				     kernel_parm,*kernel_cache,&shrink_state,
+				     model,inconsistent,unlabeled,a,lin,c,
+				     &timing_profile,&maxdiff,(long)-1,
+				     (long)1);
+  
+  if(verbosity>=1) {
+    if(verbosity==1) printf("done. (%ld iterations)\n",iterations);
+
+    printf("Optimization finished (maxdiff=%.5f).\n",maxdiff); 
+
+    runtime_end=get_runtime();
+    if(verbosity>=2) {
+      printf("Runtime in cpu-seconds: %.2f (%.2f%% for kernel/%.2f%% for optimizer/%.2f%% for final/%.2f%% for update/%.2f%% for model/%.2f%% for check/%.2f%% for select)\n",
+        ((float)runtime_end-(float)runtime_start)/100.0,
+        (100.0*timing_profile.time_kernel)/(float)(runtime_end-runtime_start),
+	(100.0*timing_profile.time_opti)/(float)(runtime_end-runtime_start),
+	(100.0*timing_profile.time_shrink)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_update)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_model)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_check)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_select)/(float)(runtime_end-runtime_start));
+    }
+    else {
+      printf("Runtime in cpu-seconds: %.2f\n",
+	     (runtime_end-runtime_start)/100.0);
+    }
+
+    if(learn_parm->remove_inconsistent) {	  
+      inconsistentnum=0;
+      for(i=0;i<totdoc;i++) 
+	if(inconsistent[i]) 
+	  inconsistentnum++;
+      printf("Number of SV: %ld (plus %ld inconsistent examples)\n",
+	     model->sv_num-1,inconsistentnum);
+    }
+    else {
+      upsupvecnum=0;
+      for(i=1;i<model->sv_num;i++) {
+	if(fabs(model->alpha[i]) >= 
+	   (learn_parm->svm_cost[(model->supvec[i])->docnum]-
+	    learn_parm->epsilon_a)) 
+	  upsupvecnum++;
+      }
+      printf("Number of SV: %ld (including %ld at upper bound)\n",
+	     model->sv_num-1,upsupvecnum);
+    }
+    
+    if((verbosity>=1) && (!learn_parm->skip_final_opt_check)) {
+      loss=0;
+      model_length=0; 
+      for(i=0;i<totdoc;i++) {
+	if((lin[i]-model->b)*(double)label[i] < (-learn_parm->eps+(double)label[i]*c[i])-learn_parm->epsilon_crit)
+	  loss+=-learn_parm->eps+(double)label[i]*c[i]-(lin[i]-model->b)*(double)label[i];
+	model_length+=a[i]*label[i]*lin[i];
+      }
+      model_length=sqrt(model_length);
+      fprintf(stdout,"L1 loss: loss=%.5f\n",loss);
+      fprintf(stdout,"Norm of weight vector: |w|=%.5f\n",model_length);
+      example_length=estimate_sphere(model,kernel_parm); 
+      fprintf(stdout,"Norm of longest example vector: |x|=%.5f\n",
+	      length_of_longest_document_vector(docs,totdoc,kernel_parm));
+    }
+    if(verbosity>=1) {
+      printf("Number of kernel evaluations: %ld\n",kernel_cache_statistic);
+    }
+  }
+    
+  if(learn_parm->alphafile[0])
+    write_alphas(learn_parm->alphafile,a,label,totdoc);
+
+  /* this makes sure the model we return does not contain pointers to the 
+     temporary documents */
+  for(i=1;i<model->sv_num;i++) { 
+    j=model->supvec[i]->docnum;
+    if(j >= (totdoc/2)) {
+      j=totdoc-j-1;
+    }
+    model->supvec[i]=docs_org[j];
+  }
+  
+  shrink_state_cleanup(&shrink_state);
+  for(i=0;i<totdoc;i++)
+    free_example(docs[i],0);
+  free(docs);
+  free(label);
+  free(inconsistent);
+  free(unlabeled);
+  free(c);
+  free(a);
+  free(a_fullset);
+  free(xi_fullset);
+  free(lin);
+  free(learn_parm->svm_cost);
+}
+
+void svm_learn_ranking(DOC **docs, double *rankvalue, long int totdoc, 
+		       long int totwords, LEARN_PARM *learn_parm, 
+		       KERNEL_PARM *kernel_parm, KERNEL_CACHE **kernel_cache, 
+		       MODEL *model)
+     /* docs:        Training vectors (x-part) */
+     /* rankvalue:   Training target values that determine the ranking */
+     /* totdoc:      Number of examples in docs/label */
+     /* totwords:    Number of features (i.e. highest feature index) */
+     /* learn_parm:  Learning paramenters */
+     /* kernel_parm: Kernel paramenters */
+     /* kernel_cache:Initialized pointer to Cache of size 1*totdoc, if 
+	             using a kernel. NULL if linear. NOTE: Cache is 
+                     getting reinitialized in this function */
+     /* model:       Returns learning result (assumed empty before called) */
+{
+  DOC **docdiff;
+  long i,j,k,totpair,kernel_cache_size;
+  double *target,*alpha,cost;
+  long *greater,*lesser;
+  MODEL *pairmodel;
+  SVECTOR *flow,*fhigh;
+
+  totpair=0;
+  for(i=0;i<totdoc;i++) {
+    for(j=i+1;j<totdoc;j++) {
+      if((docs[i]->queryid==docs[j]->queryid) && (rankvalue[i] != rankvalue[j])) {
+	totpair++;
+      }
+    }
+  }
+
+  printf("Constructing %ld rank constraints...",totpair); fflush(stdout);
+  docdiff=(DOC **)my_malloc(sizeof(DOC)*totpair);
+  target=(double *)my_malloc(sizeof(double)*totpair); 
+  greater=(long *)my_malloc(sizeof(long)*totpair); 
+  lesser=(long *)my_malloc(sizeof(long)*totpair); 
+
+  k=0;
+  for(i=0;i<totdoc;i++) {
+    for(j=i+1;j<totdoc;j++) {
+      if(docs[i]->queryid == docs[j]->queryid) {
+	cost=(docs[i]->costfactor+docs[j]->costfactor)/2.0;
+	if(rankvalue[i] > rankvalue[j]) {
+	  if(kernel_parm->kernel_type == LINEAR)
+	    docdiff[k]=create_example(k,0,0,cost,
+				      sub_ss(docs[i]->fvec,docs[j]->fvec));
+	  else {
+	    flow=copy_svector(docs[j]->fvec);
+	    flow->factor=-1.0;
+	    flow->next=NULL;
+	    fhigh=copy_svector(docs[i]->fvec);
+	    fhigh->factor=1.0;
+	    fhigh->next=flow;
+	    docdiff[k]=create_example(k,0,0,cost,fhigh);
+	  }
+	  target[k]=1;
+	  greater[k]=i;
+	  lesser[k]=j;
+	  k++;
+	}
+	else if(rankvalue[i] < rankvalue[j]) {
+	  if(kernel_parm->kernel_type == LINEAR)
+	    docdiff[k]=create_example(k,0,0,cost,
+				      sub_ss(docs[i]->fvec,docs[j]->fvec));
+	  else {
+	    flow=copy_svector(docs[j]->fvec);
+	    flow->factor=-1.0;
+	    flow->next=NULL;
+	    fhigh=copy_svector(docs[i]->fvec);
+	    fhigh->factor=1.0;
+	    fhigh->next=flow;
+	    docdiff[k]=create_example(k,0,0,cost,fhigh);
+	  }
+	  target[k]=-1;
+	  greater[k]=i;
+	  lesser[k]=j;
+	  k++;
+	}
+      }
+    }
+  }
+  printf("done.\n"); fflush(stdout);
+
+  /* need to get a bigger kernel cache */
+  if(*kernel_cache) {
+    kernel_cache_size=(*kernel_cache)->buffsize*sizeof(CFLOAT)/(1024*1024);
+    kernel_cache_cleanup(*kernel_cache);
+    (*kernel_cache)=kernel_cache_init(totpair,kernel_cache_size);
+  }
+
+  /* must use unbiased hyperplane on difference vectors */
+  learn_parm->biased_hyperplane=0;
+  pairmodel=(MODEL *)my_malloc(sizeof(MODEL));
+  svm_learn_classification(docdiff,target,totpair,totwords,learn_parm,
+			   kernel_parm,(*kernel_cache),pairmodel,NULL);
+
+  /* Transfer the result into a more compact model. If you would like
+     to output the original model on pairs of documents, see below. */
+  alpha=(double *)my_malloc(sizeof(double)*totdoc); 
+  for(i=0;i<totdoc;i++) {
+    alpha[i]=0;
+  }
+  for(i=1;i<pairmodel->sv_num;i++) {
+    alpha[lesser[(pairmodel->supvec[i])->docnum]]-=pairmodel->alpha[i];
+    alpha[greater[(pairmodel->supvec[i])->docnum]]+=pairmodel->alpha[i];
+  }
+  model->supvec = (DOC **)my_malloc(sizeof(DOC *)*(totdoc+2));
+  model->alpha = (double *)my_malloc(sizeof(double)*(totdoc+2));
+  model->index = (long *)my_malloc(sizeof(long)*(totdoc+2));
+  model->supvec[0]=0;  /* element 0 reserved and empty for now */
+  model->alpha[0]=0;
+  model->sv_num=1;
+  for(i=0;i<totdoc;i++) {
+    if(alpha[i]) {
+      model->supvec[model->sv_num]=docs[i];
+      model->alpha[model->sv_num]=alpha[i];
+      model->index[i]=model->sv_num;
+      model->sv_num++;
+    }
+    else {
+      model->index[i]=-1;
+    }
+  }
+  model->at_upper_bound=0;
+  model->b=0;	       
+  model->lin_weights=NULL;
+  model->totwords=totwords;
+  model->totdoc=totdoc;
+  model->kernel_parm=(*kernel_parm);
+  model->loo_error=-1;
+  model->loo_recall=-1;
+  model->loo_precision=-1;
+  model->xa_error=-1;
+  model->xa_recall=-1;
+  model->xa_precision=-1;
+
+  free(alpha);
+  free(greater);
+  free(lesser);
+  free(target);
+
+  /* If you would like to output the original model on pairs of
+     document, replace the following lines with '(*model)=(*pairmodel);' */
+  for(i=0;i<totpair;i++)
+    free_example(docdiff[i],1);
+  free(docdiff);
+  free_model(pairmodel,0);
+}
+
+
+/* The following solves a freely defined and given set of
+   inequalities. The optimization problem is of the following form:
+
+   min 0.5 w*w + C sum_i C_i \xi_i
+   s.t. x_i * w > rhs_i - \xi_i
+
+   This corresponds to the -z o option. */
+
+void svm_learn_optimization(DOC **docs, double *rhs, long int
+			    totdoc, long int totwords, 
+			    LEARN_PARM *learn_parm, 
+			    KERNEL_PARM *kernel_parm, 
+			    KERNEL_CACHE *kernel_cache, MODEL *model,
+			    double *alpha)
+     /* docs:        Left-hand side of inequalities (x-part) */
+     /* rhs:         Right-hand side of inequalities */
+     /* totdoc:      Number of examples in docs/label */
+     /* totwords:    Number of features (i.e. highest feature index) */
+     /* learn_parm:  Learning paramenters */
+     /* kernel_parm: Kernel paramenters */
+     /* kernel_cache:Initialized Cache of size 1*totdoc, if using a kernel. 
+                     NULL if linear.*/
+     /* model:       Returns solution as SV expansion (assumed empty before called) */
+     /* alpha:       Start values for the alpha variables or NULL
+	             pointer. The new alpha values are returned after 
+		     optimization if not NULL. Array must be of size totdoc. */
+{
+  long i,*label;
+  long misclassified,upsupvecnum;
+  double loss,model_length,example_length;
+  double maxdiff,*lin,*a,*c;
+  long runtime_start,runtime_end;
+  long iterations,maxslackid,svsetnum;
+  long *unlabeled,*inconsistent;
+  double r_delta_sq=0,r_delta,r_delta_avg;
+  long *index,*index2dnum;
+  double *weights,*slack,*alphaslack;
+  CFLOAT *aicache;  /* buffer to keep one row of hessian */
+
+  TIMING timing_profile;
+  SHRINK_STATE shrink_state;
+
+  runtime_start=get_runtime();
+  timing_profile.time_kernel=0;
+  timing_profile.time_opti=0;
+  timing_profile.time_shrink=0;
+  timing_profile.time_update=0;
+  timing_profile.time_model=0;
+  timing_profile.time_check=0;
+  timing_profile.time_select=0;
+  kernel_cache_statistic=0;
+
+  learn_parm->totwords=totwords;
+
+  /* make sure -n value is reasonable */
+  if((learn_parm->svm_newvarsinqp < 2) 
+     || (learn_parm->svm_newvarsinqp > learn_parm->svm_maxqpsize)) {
+    learn_parm->svm_newvarsinqp=learn_parm->svm_maxqpsize;
+  }
+
+  init_shrink_state(&shrink_state,totdoc,(long)MAXSHRINK);
+
+  label = (long *)my_malloc(sizeof(long)*totdoc);
+  unlabeled = (long *)my_malloc(sizeof(long)*totdoc);
+  inconsistent = (long *)my_malloc(sizeof(long)*totdoc);
+  c = (double *)my_malloc(sizeof(double)*totdoc);
+  a = (double *)my_malloc(sizeof(double)*totdoc);
+  lin = (double *)my_malloc(sizeof(double)*totdoc);
+  learn_parm->svm_cost = (double *)my_malloc(sizeof(double)*totdoc);
+  model->supvec = (DOC **)my_malloc(sizeof(DOC *)*(totdoc+2));
+  model->alpha = (double *)my_malloc(sizeof(double)*(totdoc+2));
+  model->index = (long *)my_malloc(sizeof(long)*(totdoc+2));
+
+  model->at_upper_bound=0;
+  model->b=0;	       
+  model->supvec[0]=0;  /* element 0 reserved and empty for now */
+  model->alpha[0]=0;
+  model->lin_weights=NULL;
+  model->totwords=totwords;
+  model->totdoc=totdoc;
+  model->kernel_parm=(*kernel_parm);
+  model->sv_num=1;
+  model->loo_error=-1;
+  model->loo_recall=-1;
+  model->loo_precision=-1;
+  model->xa_error=-1;
+  model->xa_recall=-1;
+  model->xa_precision=-1;
+
+  r_delta=estimate_r_delta(docs,totdoc,kernel_parm);
+  r_delta_sq=r_delta*r_delta;
+
+  r_delta_avg=estimate_r_delta_average(docs,totdoc,kernel_parm);
+  if(learn_parm->svm_c == 0.0) {  /* default value for C */
+    learn_parm->svm_c=1.0/(r_delta_avg*r_delta_avg);
+    if(verbosity>=1) 
+      printf("Setting default regularization parameter C=%.4f\n",
+	     learn_parm->svm_c);
+  }
+
+  learn_parm->biased_hyperplane=0; /* learn an unbiased hyperplane */
+
+  learn_parm->eps=0.0;      /* No margin, unless explicitly handcoded
+                               in the right-hand side in the training
+                               set.  */
+
+  for(i=0;i<totdoc;i++) {    /* various inits */
+    docs[i]->docnum=i;
+    a[i]=0;
+    lin[i]=0;
+    c[i]=rhs[i];       /* set right-hand side */
+    unlabeled[i]=0;
+    inconsistent[i]=0;
+    learn_parm->svm_cost[i]=learn_parm->svm_c*learn_parm->svm_costratio*
+      docs[i]->costfactor;
+    label[i]=1;
+  }
+  if(learn_parm->sharedslack) /* if shared slacks are used, they must */
+    for(i=0;i<totdoc;i++)     /*  be used on every constraint */
+      if(!docs[i]->slackid) {
+	perror("Error: Missing shared slacks definitions in some of the examples.");
+	exit(0);
+      }
+      
+  /* compute starting state for initial alpha values */
+  if(alpha) {
+    if(verbosity>=1) {
+      printf("Computing starting state..."); fflush(stdout);
+    }
+    index = (long *)my_malloc(sizeof(long)*totdoc);
+    index2dnum = (long *)my_malloc(sizeof(long)*(totdoc+11));
+    weights=(double *)my_malloc(sizeof(double)*(totwords+1));
+    aicache = (CFLOAT *)my_malloc(sizeof(CFLOAT)*totdoc);
+    for(i=0;i<totdoc;i++) {    /* create full index and clip alphas */
+      index[i]=1;
+      alpha[i]=fabs(alpha[i]);
+      if(alpha[i]<0) alpha[i]=0;
+      if(alpha[i]>learn_parm->svm_cost[i]) alpha[i]=learn_parm->svm_cost[i];
+    }
+    if(kernel_parm->kernel_type != LINEAR) {
+      for(i=0;i<totdoc;i++)     /* fill kernel cache with unbounded SV */
+	if((alpha[i]>0) && (alpha[i]<learn_parm->svm_cost[i]) 
+	   && (kernel_cache_space_available(kernel_cache))) 
+	  cache_kernel_row(kernel_cache,docs,i,kernel_parm);
+      for(i=0;i<totdoc;i++)     /* fill rest of kernel cache with bounded SV */
+	if((alpha[i]==learn_parm->svm_cost[i]) 
+	   && (kernel_cache_space_available(kernel_cache))) 
+	  cache_kernel_row(kernel_cache,docs,i,kernel_parm);
+    }
+    (void)compute_index(index,totdoc,index2dnum);
+    update_linear_component(docs,label,index2dnum,alpha,a,index2dnum,totdoc,
+			    totwords,kernel_parm,kernel_cache,lin,aicache,
+			    weights);
+    (void)calculate_svm_model(docs,label,unlabeled,lin,alpha,a,c,
+			      learn_parm,index2dnum,index2dnum,model);
+    for(i=0;i<totdoc;i++) {    /* copy initial alphas */
+      a[i]=alpha[i];
+    }
+    free(index);
+    free(index2dnum);
+    free(weights);
+    free(aicache);
+    if(verbosity>=1) {
+      printf("done.\n");  fflush(stdout);
+    }   
+  } 
+
+  /* removing inconsistent does not work for general optimization problem */
+  if(learn_parm->remove_inconsistent) {	  
+    learn_parm->remove_inconsistent = 0;
+    printf("'remove inconsistent' not available in this mode. Switching option off!"); fflush(stdout);
+  }
+
+  /* caching makes no sense for linear kernel */
+  if(kernel_parm->kernel_type == LINEAR) {
+    kernel_cache = NULL;   
+  } 
+
+  if(verbosity==1) {
+    printf("Optimizing"); fflush(stdout);
+  }
+
+  /* train the svm */
+  if(learn_parm->sharedslack)
+    iterations=optimize_to_convergence_sharedslack(docs,label,totdoc,
+				     totwords,learn_parm,kernel_parm,
+				     kernel_cache,&shrink_state,model,
+				     a,lin,c,&timing_profile,
+				     &maxdiff);
+  else
+    iterations=optimize_to_convergence(docs,label,totdoc,
+				     totwords,learn_parm,kernel_parm,
+				     kernel_cache,&shrink_state,model,
+				     inconsistent,unlabeled,
+				     a,lin,c,&timing_profile,
+				     &maxdiff,(long)-1,(long)1);
+  
+  if(verbosity>=1) {
+    if(verbosity==1) printf("done. (%ld iterations)\n",iterations);
+
+    misclassified=0;
+    for(i=0;(i<totdoc);i++) { /* get final statistic */
+      if((lin[i]-model->b)*(double)label[i] <= 0.0) 
+	misclassified++;
+    }
+
+    printf("Optimization finished (maxdiff=%.5f).\n",maxdiff); 
+
+    runtime_end=get_runtime();
+    if(verbosity>=2) {
+      printf("Runtime in cpu-seconds: %.2f (%.2f%% for kernel/%.2f%% for optimizer/%.2f%% for final/%.2f%% for update/%.2f%% for model/%.2f%% for check/%.2f%% for select)\n",
+        ((float)runtime_end-(float)runtime_start)/100.0,
+        (100.0*timing_profile.time_kernel)/(float)(runtime_end-runtime_start),
+	(100.0*timing_profile.time_opti)/(float)(runtime_end-runtime_start),
+	(100.0*timing_profile.time_shrink)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_update)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_model)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_check)/(float)(runtime_end-runtime_start),
+        (100.0*timing_profile.time_select)/(float)(runtime_end-runtime_start));
+    }
+    else {
+      printf("Runtime in cpu-seconds: %.2f\n",
+	     (runtime_end-runtime_start)/100.0);
+    }
+  }
+  if((verbosity>=1) && (!learn_parm->skip_final_opt_check)) {
+    loss=0;
+    model_length=0; 
+    for(i=0;i<totdoc;i++) {
+      if((lin[i]-model->b)*(double)label[i] < c[i]-learn_parm->epsilon_crit)
+	loss+=c[i]-(lin[i]-model->b)*(double)label[i];
+      model_length+=a[i]*label[i]*lin[i];
+    }
+    model_length=sqrt(model_length);
+    fprintf(stdout,"Norm of weight vector: |w|=%.5f\n",model_length);
+  }
+  
+  if(learn_parm->sharedslack) {
+    index = (long *)my_malloc(sizeof(long)*totdoc);
+    index2dnum = (long *)my_malloc(sizeof(long)*(totdoc+11));
+    maxslackid=0;
+    for(i=0;i<totdoc;i++) {    /* create full index */
+      index[i]=1;
+      if(maxslackid<docs[i]->slackid)
+	maxslackid=docs[i]->slackid;
+    }
+    (void)compute_index(index,totdoc,index2dnum);
+    slack=(double *)my_malloc(sizeof(double)*(maxslackid+1));
+    alphaslack=(double *)my_malloc(sizeof(double)*(maxslackid+1));
+    for(i=0;i<=maxslackid;i++) {    /* init shared slacks */
+      slack[i]=0;
+      alphaslack[i]=0;
+    }
+    compute_shared_slacks(docs,label,a,lin,c,index2dnum,learn_parm,
+			  slack,alphaslack);
+    loss=0;
+    model->at_upper_bound=0;
+    svsetnum=0;
+    for(i=0;i<=maxslackid;i++) {    /* create full index */
+      loss+=slack[i];
+      if(alphaslack[i] > (learn_parm->svm_c - learn_parm->epsilon_a)) 
+	model->at_upper_bound++;
+      if(alphaslack[i] > learn_parm->epsilon_a)
+	svsetnum++;
+    }
+    free(index);
+    free(index2dnum);
+    free(slack);
+    free(alphaslack);
+  }
+  
+  if((verbosity>=1) && (!learn_parm->skip_final_opt_check)) {
+    if(learn_parm->sharedslack) {
+      printf("Number of SV: %ld\n",
+	     model->sv_num-1);
+      printf("Number of non-zero slack variables: %ld (out of %ld)\n",
+	     model->at_upper_bound,svsetnum);
+      fprintf(stdout,"L1 loss: loss=%.5f\n",loss);
+    }
+    else {
+      upsupvecnum=0;
+      for(i=1;i<model->sv_num;i++) {
+	if(fabs(model->alpha[i]) >= 
+	   (learn_parm->svm_cost[(model->supvec[i])->docnum]-
+	    learn_parm->epsilon_a)) 
+	  upsupvecnum++;
+      }
+      printf("Number of SV: %ld (including %ld at upper bound)\n",
+	     model->sv_num-1,upsupvecnum);
+      fprintf(stdout,"L1 loss: loss=%.5f\n",loss);
+    }
+    example_length=estimate_sphere(model,kernel_parm); 
+    fprintf(stdout,"Norm of longest example vector: |x|=%.5f\n",
+	    length_of_longest_document_vector(docs,totdoc,kernel_parm));
+  }
+  if(verbosity>=1) {
+    printf("Number of kernel evaluations: %ld\n",kernel_cache_statistic);
+  }
+    
+  if(alpha) {
+    for(i=0;i<totdoc;i++) {    /* copy final alphas */
+      alpha[i]=a[i];
+    }
+  }
+ 
+  if(learn_parm->alphafile[0])
+    write_alphas(learn_parm->alphafile,a,label,totdoc);
+  
+  shrink_state_cleanup(&shrink_state);
+  free(label);
+  free(unlabeled);
+  free(inconsistent);
+  free(c);
+  free(a);
+  free(lin);
+  free(learn_parm->svm_cost);
+}
+
+
+long optimize_to_convergence(DOC **docs, long int *label, long int totdoc, 
+			     long int totwords, LEARN_PARM *learn_parm, 
+			     KERNEL_PARM *kernel_parm, 
+			     KERNEL_CACHE *kernel_cache, 
+			     SHRINK_STATE *shrink_state, MODEL *model, 
+			     long int *inconsistent, long int *unlabeled, 
+			     double *a, double *lin, double *c, 
+			     TIMING *timing_profile, double *maxdiff, 
+			     long int heldout, long int retrain)
+     /* docs: Training vectors (x-part) */
+     /* label: Training labels/value (y-part, zero if test example for
+			      transduction) */
+     /* totdoc: Number of examples in docs/label */
+     /* totwords: Number of features (i.e. highest feature index) */
+     /* laern_parm: Learning paramenters */
+     /* kernel_parm: Kernel paramenters */
+     /* kernel_cache: Initialized/partly filled Cache, if using a kernel. 
+                      NULL if linear. */
+     /* shrink_state: State of active variables */
+     /* model: Returns learning result */
+     /* inconsistent: examples thrown out as inconstistent */
+     /* unlabeled: test examples for transduction */
+     /* a: alphas */
+     /* lin: linear component of gradient */
+     /* c: right hand side of inequalities (margin) */
+     /* maxdiff: returns maximum violation of KT-conditions */
+     /* heldout: marks held-out example for leave-one-out (or -1) */
+     /* retrain: selects training mode (1=regular / 2=holdout) */
+{
+  long *chosen,*key,i,j,jj,*last_suboptimal_at,noshrink;
+  long inconsistentnum,choosenum,already_chosen=0,iteration;
+  long misclassified,supvecnum=0,*active2dnum,inactivenum;
+  long *working2dnum,*selexam;
+  long activenum;
+  double criterion,eq;
+  double *a_old;
+  long t0=0,t1=0,t2=0,t3=0,t4=0,t5=0,t6=0; /* timing */
+  long transductcycle;
+  long transduction;
+  double epsilon_crit_org; 
+  double bestmaxdiff;
+  long   bestmaxdiffiter,terminate;
+
+  double *selcrit;  /* buffer for sorting */        
+  CFLOAT *aicache;  /* buffer to keep one row of hessian */
+  double *weights;  /* buffer for weight vector in linear case */
+  QP qp;            /* buffer for one quadratic program */
+
+  epsilon_crit_org=learn_parm->epsilon_crit; /* save org */
+  if(kernel_parm->kernel_type == LINEAR) {
+    learn_parm->epsilon_crit=2.0;
+    kernel_cache=NULL;   /* caching makes no sense for linear kernel */
+  } 
+  learn_parm->epsilon_shrink=2;
+  (*maxdiff)=1;
+
+  learn_parm->totwords=totwords;
+
+  chosen = (long *)my_malloc(sizeof(long)*totdoc);
+  last_suboptimal_at = (long *)my_malloc(sizeof(long)*totdoc);
+  key = (long *)my_malloc(sizeof(long)*(totdoc+11)); 
+  selcrit = (double *)my_malloc(sizeof(double)*totdoc);
+  selexam = (long *)my_malloc(sizeof(long)*totdoc);
+  a_old = (double *)my_malloc(sizeof(double)*totdoc);
+  aicache = (CFLOAT *)my_malloc(sizeof(CFLOAT)*totdoc);
+  working2dnum = (long *)my_malloc(sizeof(long)*(totdoc+11));
+  active2dnum = (long *)my_malloc(sizeof(long)*(totdoc+11));
+  qp.opt_ce = (double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize);
+  qp.opt_ce0 = (double *)my_malloc(sizeof(double));
+  qp.opt_g = (double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize
+				 *learn_parm->svm_maxqpsize);
+  qp.opt_g0 = (double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize);
+  qp.opt_xinit = (double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize);
+  qp.opt_low=(double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize);
+  qp.opt_up=(double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize);
+  weights=(double *)my_malloc(sizeof(double)*(totwords+1));
+
+  choosenum=0;
+  inconsistentnum=0;
+  transductcycle=0;
+  transduction=0;
+  if(!retrain) retrain=1;
+  iteration=1;
+  bestmaxdiffiter=1;
+  bestmaxdiff=999999999;
+  terminate=0;
+
+  if(kernel_cache) {
+    kernel_cache->time=iteration;  /* for lru cache */
+    kernel_cache_reset_lru(kernel_cache);
+  }
+
+  for(i=0;i<totdoc;i++) {    /* various inits */
+    chosen[i]=0;
+    a_old[i]=a[i];
+    last_suboptimal_at[i]=1;
+    if(inconsistent[i]) 
+      inconsistentnum++;
+    if(unlabeled[i]) {
+      transduction=1;
+    }
+  }
+  activenum=compute_index(shrink_state->active,totdoc,active2dnum);
+  inactivenum=totdoc-activenum;
+  clear_index(working2dnum);
+
+                            /* repeat this loop until we have convergence */
+  for(;retrain && (!terminate);iteration++) {
+
+    if(kernel_cache)
+      kernel_cache->time=iteration;  /* for lru cache */
+    if(verbosity>=2) {
+      printf(
+	"Iteration %ld: ",iteration); fflush(stdout);
+    }
+    else if(verbosity==1) {
+      printf("."); fflush(stdout);
+    }
+
+    if(verbosity>=2) t0=get_runtime();
+    if(verbosity>=3) {
+      printf("\nSelecting working set... "); fflush(stdout); 
+    }
+
+    if(learn_parm->svm_newvarsinqp>learn_parm->svm_maxqpsize) 
+      learn_parm->svm_newvarsinqp=learn_parm->svm_maxqpsize;
+
+    i=0;
+    for(jj=0;(j=working2dnum[jj])>=0;jj++) { /* clear working set */
+      if((chosen[j]>=(learn_parm->svm_maxqpsize/
+		      minl(learn_parm->svm_maxqpsize,
+			   learn_parm->svm_newvarsinqp))) 
+	 || (inconsistent[j])
+	 || (j == heldout)) {
+	chosen[j]=0; 
+	choosenum--; 
+      }
+      else {
+	chosen[j]++;
+	working2dnum[i++]=j;
+      }
+    }
+    working2dnum[i]=-1;
+
+    if(retrain == 2) {
+      choosenum=0;
+      for(jj=0;(j=working2dnum[jj])>=0;jj++) { /* fully clear working set */
+	chosen[j]=0; 
+      }
+      clear_index(working2dnum);
+      for(i=0;i<totdoc;i++) { /* set inconsistent examples to zero (-i 1) */
+	if((inconsistent[i] || (heldout==i)) && (a[i] != 0.0)) {
+	  chosen[i]=99999;
+	  choosenum++;
+	  a[i]=0;
+	}
+      }
+      if(learn_parm->biased_hyperplane) {
+	eq=0;
+	for(i=0;i<totdoc;i++) { /* make sure we fulfill equality constraint */
+	  eq+=a[i]*label[i];
+	}
+	for(i=0;(i<totdoc) && (fabs(eq) > learn_parm->epsilon_a);i++) {
+	  if((eq*label[i] > 0) && (a[i] > 0)) {
+	    chosen[i]=88888;
+	    choosenum++;
+	    if((eq*label[i]) > a[i]) {
+	      eq-=(a[i]*label[i]);
+	      a[i]=0;
+	    }
+	    else {
+	      a[i]-=(eq*label[i]);
+	      eq=0;
+	    }
+	  }
+	}
+      }
+      compute_index(chosen,totdoc,working2dnum);
+    }
+    else {      /* select working set according to steepest gradient */
+      if(iteration % 101) {
+        already_chosen=0;
+	if((minl(learn_parm->svm_newvarsinqp,
+		 learn_parm->svm_maxqpsize-choosenum)>=4) 
+	   && (kernel_parm->kernel_type != LINEAR)) {
+	  /* select part of the working set from cache */
+	  already_chosen=select_next_qp_subproblem_grad(
+			      label,unlabeled,a,lin,c,totdoc,
+			      (long)(minl(learn_parm->svm_maxqpsize-choosenum,
+					  learn_parm->svm_newvarsinqp)
+				     /2),
+			      learn_parm,inconsistent,active2dnum,
+			      working2dnum,selcrit,selexam,kernel_cache,1,
+			      key,chosen);
+	  choosenum+=already_chosen;
+	}
+	choosenum+=select_next_qp_subproblem_grad(
+                              label,unlabeled,a,lin,c,totdoc,
+                              minl(learn_parm->svm_maxqpsize-choosenum,
+				   learn_parm->svm_newvarsinqp-already_chosen),
+                              learn_parm,inconsistent,active2dnum,
+			      working2dnum,selcrit,selexam,kernel_cache,0,key,
+			      chosen);
+      }
+      else { /* once in a while, select a somewhat random working set
+		to get unlocked of infinite loops due to numerical
+		inaccuracies in the core qp-solver */
+	choosenum+=select_next_qp_subproblem_rand(
+                              label,unlabeled,a,lin,c,totdoc,
+                              minl(learn_parm->svm_maxqpsize-choosenum,
+				   learn_parm->svm_newvarsinqp),
+                              learn_parm,inconsistent,active2dnum,
+			      working2dnum,selcrit,selexam,kernel_cache,key,
+			      chosen,iteration);
+      }
+    }
+
+    if(verbosity>=2) {
+      printf(" %ld vectors chosen\n",choosenum); fflush(stdout); 
+    }
+
+    if(verbosity>=2) t1=get_runtime();
+
+    if(kernel_cache) 
+      cache_multiple_kernel_rows(kernel_cache,docs,working2dnum,
+				 choosenum,kernel_parm); 
+    
+    if(verbosity>=2) t2=get_runtime();
+    if(retrain != 2) {
+      optimize_svm(docs,label,unlabeled,inconsistent,0.0,chosen,active2dnum,
+		   model,totdoc,working2dnum,choosenum,a,lin,c,learn_parm,
+		   aicache,kernel_parm,&qp,&epsilon_crit_org);
+    }
+
+    if(verbosity>=2) t3=get_runtime();
+    update_linear_component(docs,label,active2dnum,a,a_old,working2dnum,totdoc,
+			    totwords,kernel_parm,kernel_cache,lin,aicache,
+			    weights);
+
+    if(verbosity>=2) t4=get_runtime();
+    supvecnum=calculate_svm_model(docs,label,unlabeled,lin,a,a_old,c,
+		                  learn_parm,working2dnum,active2dnum,model);
+
+    if(verbosity>=2) t5=get_runtime();
+
+    /* The following computation of the objective function works only */
+    /* relative to the active variables */
+    if(verbosity>=3) {
+      criterion=compute_objective_function(a,lin,c,learn_parm->eps,label,
+		                           active2dnum);
+      printf("Objective function (over active variables): %.16f\n",criterion);
+      fflush(stdout); 
+    }
+
+    for(jj=0;(i=working2dnum[jj])>=0;jj++) {
+      a_old[i]=a[i];
+    }
+
+    if(retrain == 2) {  /* reset inconsistent unlabeled examples */
+      for(i=0;(i<totdoc);i++) {
+	if(inconsistent[i] && unlabeled[i]) {
+	  inconsistent[i]=0;
+	  label[i]=0;
+	}
+      }
+    }
+
+    retrain=check_optimality(model,label,unlabeled,a,lin,c,totdoc,learn_parm,
+			     maxdiff,epsilon_crit_org,&misclassified,
+			     inconsistent,active2dnum,last_suboptimal_at,
+			     iteration,kernel_parm);
+
+    if(verbosity>=2) {
+      t6=get_runtime();
+      timing_profile->time_select+=t1-t0;
+      timing_profile->time_kernel+=t2-t1;
+      timing_profile->time_opti+=t3-t2;
+      timing_profile->time_update+=t4-t3;
+      timing_profile->time_model+=t5-t4;
+      timing_profile->time_check+=t6-t5;
+    }
+
+    /* checking whether optimizer got stuck */
+    if((*maxdiff) < bestmaxdiff) {
+      bestmaxdiff=(*maxdiff);
+      bestmaxdiffiter=iteration;
+    }
+    if(iteration > (bestmaxdiffiter+learn_parm->maxiter)) { 
+      /* long time no progress? */
+      terminate=1;
+      retrain=0;
+      if(verbosity>=1) 
+	printf("\nWARNING: Relaxing KT-Conditions due to slow progress! Terminating!\n");
+    }
+
+    noshrink=0;
+    if((!retrain) && (inactivenum>0) 
+       && ((!learn_parm->skip_final_opt_check) 
+	   || (kernel_parm->kernel_type == LINEAR))) { 
+      if(((verbosity>=1) && (kernel_parm->kernel_type != LINEAR)) 
+	 || (verbosity>=2)) {
+	if(verbosity==1) {
+	  printf("\n");
+	}
+	printf(" Checking optimality of inactive variables..."); 
+	fflush(stdout);
+      }
+      t1=get_runtime();
+      reactivate_inactive_examples(label,unlabeled,a,shrink_state,lin,c,totdoc,
+				   totwords,iteration,learn_parm,inconsistent,
+				   docs,kernel_parm,kernel_cache,model,aicache,
+				   weights,maxdiff);
+      /* Update to new active variables. */
+      activenum=compute_index(shrink_state->active,totdoc,active2dnum);
+      inactivenum=totdoc-activenum;
+      /* reset watchdog */
+      bestmaxdiff=(*maxdiff);
+      bestmaxdiffiter=iteration;
+      /* termination criterion */
+      noshrink=1;
+      retrain=0;
+      if((*maxdiff) > learn_parm->epsilon_crit) 
+	retrain=1;
+      timing_profile->time_shrink+=get_runtime()-t1;
+      if(((verbosity>=1) && (kernel_parm->kernel_type != LINEAR)) 
+	 || (verbosity>=2)) {
+	printf("done.\n");  fflush(stdout);
+        printf(" Number of inactive variables = %ld\n",inactivenum);
+      }		  
+    }
+
+    if((!retrain) && (learn_parm->epsilon_crit>(*maxdiff))) 
+      learn_parm->epsilon_crit=(*maxdiff);
+    if((!retrain) && (learn_parm->epsilon_crit>epsilon_crit_org)) {
+      learn_parm->epsilon_crit/=2.0;
+      retrain=1;
+      noshrink=1;
+    }
+    if(learn_parm->epsilon_crit<epsilon_crit_org) 
+      learn_parm->epsilon_crit=epsilon_crit_org;
+    
+    if(verbosity>=2) {
+      printf(" => (%ld SV (incl. %ld SV at u-bound), max violation=%.5f)\n",
+	     supvecnum,model->at_upper_bound,(*maxdiff)); 
+      fflush(stdout);
+    }
+    if(verbosity>=3) {
+      printf("\n");
+    }
+
+    if((!retrain) && (transduction)) {
+      for(i=0;(i<totdoc);i++) {
+	shrink_state->active[i]=1;
+      }
+      activenum=compute_index(shrink_state->active,totdoc,active2dnum);
+      inactivenum=0;
+      if(verbosity==1) printf("done\n");
+      retrain=incorporate_unlabeled_examples(model,label,inconsistent,
+					     unlabeled,a,lin,totdoc,
+					     selcrit,selexam,key,
+					     transductcycle,kernel_parm,
+					     learn_parm);
+      epsilon_crit_org=learn_parm->epsilon_crit;
+      if(kernel_parm->kernel_type == LINEAR)
+	learn_parm->epsilon_crit=1; 
+      transductcycle++;
+      /* reset watchdog */
+      bestmaxdiff=(*maxdiff);
+      bestmaxdiffiter=iteration;
+    } 
+    else if(((iteration % 10) == 0) && (!noshrink)) {
+      activenum=shrink_problem(docs,learn_parm,shrink_state,kernel_parm,
+			       active2dnum,last_suboptimal_at,iteration,totdoc,
+			       maxl((long)(activenum/10),
+				    maxl((long)(totdoc/500),100)),
+			       a,inconsistent);
+      inactivenum=totdoc-activenum;
+      if((kernel_cache)
+	 && (supvecnum>kernel_cache->max_elems)
+	 && ((kernel_cache->activenum-activenum)>maxl((long)(activenum/10),500))) {
+	kernel_cache_shrink(kernel_cache,totdoc,
+			    minl((kernel_cache->activenum-activenum),
+				 (kernel_cache->activenum-supvecnum)),
+			    shrink_state->active); 
+      }
+    }
+
+    if((!retrain) && learn_parm->remove_inconsistent) {
+      if(verbosity>=1) {
+	printf(" Moving training errors to inconsistent examples...");
+	fflush(stdout);
+      }
+      if(learn_parm->remove_inconsistent == 1) {
+	retrain=identify_inconsistent(a,label,unlabeled,totdoc,learn_parm,
+				      &inconsistentnum,inconsistent); 
+      }
+      else if(learn_parm->remove_inconsistent == 2) {
+	retrain=identify_misclassified(lin,label,unlabeled,totdoc,
+				       model,&inconsistentnum,inconsistent); 
+      }
+      else if(learn_parm->remove_inconsistent == 3) {
+	retrain=identify_one_misclassified(lin,label,unlabeled,totdoc,
+				   model,&inconsistentnum,inconsistent);
+      }
+      if(retrain) {
+	if(kernel_parm->kernel_type == LINEAR) { /* reinit shrinking */
+	  learn_parm->epsilon_crit=2.0;
+	} 
+      }
+      if(verbosity>=1) {
+	printf("done.\n");
+	if(retrain) {
+	  printf(" Now %ld inconsistent examples.\n",inconsistentnum);
+	}
+      }
+    }
+  } /* end of loop */
+
+  free(chosen);
+  free(last_suboptimal_at);
+  free(key);
+  free(selcrit);
+  free(selexam);
+  free(a_old);
+  free(aicache);
+  free(working2dnum);
+  free(active2dnum);
+  free(qp.opt_ce);
+  free(qp.opt_ce0);
+  free(qp.opt_g);
+  free(qp.opt_g0);
+  free(qp.opt_xinit);
+  free(qp.opt_low);
+  free(qp.opt_up);
+  free(weights);
+
+  learn_parm->epsilon_crit=epsilon_crit_org; /* restore org */
+  model->maxdiff=(*maxdiff);
+
+  return(iteration);
+}
+
+long optimize_to_convergence_sharedslack(DOC **docs, long int *label, 
+			     long int totdoc, 
+			     long int totwords, LEARN_PARM *learn_parm, 
+			     KERNEL_PARM *kernel_parm, 
+			     KERNEL_CACHE *kernel_cache, 
+			     SHRINK_STATE *shrink_state, MODEL *model, 
+			     double *a, double *lin, double *c, 
+			     TIMING *timing_profile, double *maxdiff)
+     /* docs: Training vectors (x-part) */
+     /* label: Training labels/value (y-part, zero if test example for
+			      transduction) */
+     /* totdoc: Number of examples in docs/label */
+     /* totwords: Number of features (i.e. highest feature index) */
+     /* learn_parm: Learning paramenters */
+     /* kernel_parm: Kernel paramenters */
+     /* kernel_cache: Initialized/partly filled Cache, if using a kernel. 
+                      NULL if linear. */
+     /* shrink_state: State of active variables */
+     /* model: Returns learning result */
+     /* a: alphas */
+     /* lin: linear component of gradient */
+     /* c: right hand side of inequalities (margin) */
+     /* maxdiff: returns maximum violation of KT-conditions */
+{
+  long *chosen,*key,i,j,jj,*last_suboptimal_at,noshrink,*unlabeled;
+  long *inconsistent,choosenum,already_chosen=0,iteration;
+  long misclassified,supvecnum=0,*active2dnum,inactivenum;
+  long *working2dnum,*selexam,*ignore;
+  long activenum,retrain,maxslackid,slackset,jointstep;
+  double criterion,eq_target;
+  double *a_old,*alphaslack;
+  long t0=0,t1=0,t2=0,t3=0,t4=0,t5=0,t6=0; /* timing */
+  double epsilon_crit_org,maxsharedviol; 
+  double bestmaxdiff;
+  long   bestmaxdiffiter,terminate;
+
+  double *selcrit;  /* buffer for sorting */        
+  CFLOAT *aicache;  /* buffer to keep one row of hessian */
+  double *weights;  /* buffer for weight vector in linear case */
+  QP qp;            /* buffer for one quadratic program */
+  double *slack;    /* vector of slack variables for optimization with
+		       shared slacks */
+
+  epsilon_crit_org=learn_parm->epsilon_crit; /* save org */
+  if(kernel_parm->kernel_type == LINEAR) {
+    learn_parm->epsilon_crit=2.0;
+    kernel_cache=NULL;   /* caching makes no sense for linear kernel */
+  } 
+  learn_parm->epsilon_shrink=2;
+  (*maxdiff)=1;
+
+  learn_parm->totwords=totwords;
+
+  chosen = (long *)my_malloc(sizeof(long)*totdoc);
+  unlabeled = (long *)my_malloc(sizeof(long)*totdoc);
+  inconsistent = (long *)my_malloc(sizeof(long)*totdoc);
+  ignore = (long *)my_malloc(sizeof(long)*totdoc);
+  key = (long *)my_malloc(sizeof(long)*(totdoc+11)); 
+  selcrit = (double *)my_malloc(sizeof(double)*totdoc);
+  selexam = (long *)my_malloc(sizeof(long)*totdoc);
+  a_old = (double *)my_malloc(sizeof(double)*totdoc);
+  aicache = (CFLOAT *)my_malloc(sizeof(CFLOAT)*totdoc);
+  working2dnum = (long *)my_malloc(sizeof(long)*(totdoc+11));
+  active2dnum = (long *)my_malloc(sizeof(long)*(totdoc+11));
+  qp.opt_ce = (double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize);
+  qp.opt_ce0 = (double *)my_malloc(sizeof(double));
+  qp.opt_g = (double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize
+				 *learn_parm->svm_maxqpsize);
+  qp.opt_g0 = (double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize);
+  qp.opt_xinit = (double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize);
+  qp.opt_low=(double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize);
+  qp.opt_up=(double *)my_malloc(sizeof(double)*learn_parm->svm_maxqpsize);
+  weights=(double *)my_malloc(sizeof(double)*(totwords+1));
+  maxslackid=0;
+  for(i=0;i<totdoc;i++) {    /* determine size of slack array */
+    if(maxslackid<docs[i]->slackid)
+      maxslackid=docs[i]->slackid;
+  }
+  slack=(double *)my_malloc(sizeof(double)*(maxslackid+1));
+  alphaslack=(double *)my_malloc(sizeof(double)*(maxslackid+1));
+  last_suboptimal_at = (long *)my_malloc(sizeof(long)*(maxslackid+1));
+  for(i=0;i<=maxslackid;i++) {    /* init shared slacks */
+    slack[i]=0;
+    alphaslack[i]=0;
+    last_suboptimal_at[i]=1;
+  }
+
+  choosenum=0;
+  retrain=1;
+  iteration=1;
+  bestmaxdiffiter=1;
+  bestmaxdiff=999999999;
+  terminate=0;
+
+  if(kernel_cache) {
+    kernel_cache->time=iteration;  /* for lru cache */
+    kernel_cache_reset_lru(kernel_cache);
+  }
+
+  for(i=0;i<totdoc;i++) {    /* various inits */
+    chosen[i]=0;
+    unlabeled[i]=0;
+    inconsistent[i]=0;
+    ignore[i]=0;
+    a_old[i]=a[i];
+  }
+  activenum=compute_index(shrink_state->active,totdoc,active2dnum);
+  inactivenum=totdoc-activenum;
+  clear_index(working2dnum);
+
+  /* call to init slack and alphaslack */
+  compute_shared_slacks(docs,label,a,lin,c,active2dnum,learn_parm,
+			slack,alphaslack);
+
+                            /* repeat this loop until we have convergence */
+  for(;retrain && (!terminate);iteration++) {
+
+    if(kernel_cache)
+      kernel_cache->time=iteration;  /* for lru cache */
+    if(verbosity>=2) {
+      printf(
+	"Iteration %ld: ",iteration); fflush(stdout);
+    }
+    else if(verbosity==1) {
+      printf("."); fflush(stdout);
+    }
+
+    if(verbosity>=2) t0=get_runtime();
+    if(verbosity>=3) {
+      printf("\nSelecting working set... "); fflush(stdout); 
+    }
+
+    if(learn_parm->svm_newvarsinqp>learn_parm->svm_maxqpsize) 
+      learn_parm->svm_newvarsinqp=learn_parm->svm_maxqpsize;
+
+    /* select working set according to steepest gradient */
+    jointstep=0;
+    eq_target=0;
+    if(iteration % 101) {
+      slackset=select_next_qp_slackset(docs,label,a,lin,slack,alphaslack,c,
+				       learn_parm,active2dnum,&maxsharedviol);
+      if((iteration % 2) 
+	 || (!slackset) || (maxsharedviol<learn_parm->epsilon_crit)){
+	/* do a step with examples from different slack sets */
+	if(verbosity >= 2) {
+	  printf("(i-step)"); fflush(stdout);
+	}
+	i=0;
+	for(jj=0;(j=working2dnum[jj])>=0;jj++) { /* clear old part of working set */
+	  if((chosen[j]>=(learn_parm->svm_maxqpsize/
+			  minl(learn_parm->svm_maxqpsize,
+			       learn_parm->svm_newvarsinqp)))) {
+	    chosen[j]=0; 
+	    choosenum--; 
+	  }
+	  else {
+	    chosen[j]++;
+	    working2dnum[i++]=j;
+	  }
+	}
+	working2dnum[i]=-1;
+	
+	already_chosen=0;
+	if((minl(learn_parm->svm_newvarsinqp,
+		 learn_parm->svm_maxqpsize-choosenum)>=4) 
+	   && (kernel_parm->kernel_type != LINEAR)) {
+	  /* select part of the working set from cache */
+	  already_chosen=select_next_qp_subproblem_grad(
+			      label,unlabeled,a,lin,c,totdoc,
+			      (long)(minl(learn_parm->svm_maxqpsize-choosenum,
+					  learn_parm->svm_newvarsinqp)
+				     /2),
+			      learn_parm,inconsistent,active2dnum,
+			      working2dnum,selcrit,selexam,kernel_cache,
+			      (long)1,key,chosen);
+	  choosenum+=already_chosen;
+	}
+	choosenum+=select_next_qp_subproblem_grad(
+                              label,unlabeled,a,lin,c,totdoc,
+                              minl(learn_parm->svm_maxqpsize-choosenum,
+				   learn_parm->svm_newvarsinqp-already_chosen),
+                              learn_parm,inconsistent,active2dnum,
+			      working2dnum,selcrit,selexam,kernel_cache,
+			      (long)0,key,chosen);
+      }
+      else { /* do a step with all examples from same slack set */
+	if(verbosity >= 2) {
+	  printf("(j-step on %ld)",slackset); fflush(stdout);
+	}
+	jointstep=1;
+	for(jj=0;(j=working2dnum[jj])>=0;jj++) { /* clear working set */
+	    chosen[j]=0; 
+	}
+	working2dnum[0]=-1;
+	eq_target=alphaslack[slackset];
+	for(j=0;j<totdoc;j++) {                  /* mask all but slackset */
+	  /* for(jj=0;(j=active2dnum[jj])>=0;jj++) { */
+	  if(docs[j]->slackid != slackset)
+	    ignore[j]=1; 
+	  else {
+	    ignore[j]=0; 
+	    learn_parm->svm_cost[j]=learn_parm->svm_c;
+	    /* printf("Inslackset(%ld,%ld)",j,shrink_state->active[j]); */
+	  }
+	}
+	learn_parm->biased_hyperplane=1;
+	choosenum=select_next_qp_subproblem_grad(
+                              label,unlabeled,a,lin,c,totdoc,
+                              learn_parm->svm_maxqpsize,
+                              learn_parm,ignore,active2dnum,
+			      working2dnum,selcrit,selexam,kernel_cache,
+			      (long)0,key,chosen);
+	learn_parm->biased_hyperplane=0;
+      }
+    }
+    else { /* once in a while, select a somewhat random working set
+	      to get unlocked of infinite loops due to numerical
+	      inaccuracies in the core qp-solver */
+      choosenum+=select_next_qp_subproblem_rand(
+                              label,unlabeled,a,lin,c,totdoc,
+                              minl(learn_parm->svm_maxqpsize-choosenum,
+				   learn_parm->svm_newvarsinqp),
+                              learn_parm,inconsistent,active2dnum,
+			      working2dnum,selcrit,selexam,kernel_cache,key,
+			      chosen,iteration);
+    }
+
+    if(verbosity>=2) {
+      printf(" %ld vectors chosen\n",choosenum); fflush(stdout); 
+    }
+
+    if(verbosity>=2) t1=get_runtime();
+
+    if(kernel_cache) 
+      cache_multiple_kernel_rows(kernel_cache,docs,working2dnum,
+				 choosenum,kernel_parm); 
+
+    if(verbosity>=2) t2=get_runtime();
+    if(jointstep) learn_parm->biased_hyperplane=1;
+    optimize_svm(docs,label,unlabeled,ignore,eq_target,chosen,active2dnum,
+		 model,totdoc,working2dnum,choosenum,a,lin,c,learn_parm,
+		 aicache,kernel_parm,&qp,&epsilon_crit_org);
+    learn_parm->biased_hyperplane=0;
+
+    for(jj=0;(i=working2dnum[jj])>=0;jj++)   /* recompute sums of alphas */
+      alphaslack[docs[i]->slackid]+=(a[i]-a_old[i]);
+    for(jj=0;(i=working2dnum[jj])>=0;jj++) { /* reduce alpha to fulfill
+						constraints */
+      if(alphaslack[docs[i]->slackid] > learn_parm->svm_c) {
+	if(a[i] < (alphaslack[docs[i]->slackid]-learn_parm->svm_c)) {
+	  alphaslack[docs[i]->slackid]-=a[i];
+	  a[i]=0;
+	}
+	else {
+	  a[i]-=(alphaslack[docs[i]->slackid]-learn_parm->svm_c);
+	  alphaslack[docs[i]->slackid]=learn_parm->svm_c;
+	}
+      }
+    }
+    for(jj=0;(i=active2dnum[jj])>=0;jj++) 
+      learn_parm->svm_cost[i]=a[i]+(learn_parm->svm_c
+				    -alphaslack[docs[i]->slackid]);
+
+    if(verbosity>=2) t3=get_runtime();
+    update_linear_component(docs,label,active2dnum,a,a_old,working2dnum,totdoc,
+			    totwords,kernel_parm,kernel_cache,lin,aicache,
+			    weights);
+    compute_shared_slacks(docs,label,a,lin,c,active2dnum,learn_parm,
+			  slack,alphaslack);
+
+    if(verbosity>=2) t4=get_runtime();
+    supvecnum=calculate_svm_model(docs,label,unlabeled,lin,a,a_old,c,
+		                  learn_parm,working2dnum,active2dnum,model);
+
+    if(verbosity>=2) t5=get_runtime();
+
+    /* The following computation of the objective function works only */
+    /* relative to the active variables */
+    if(verbosity>=3) {
+      criterion=compute_objective_function(a,lin,c,learn_parm->eps,label,
+		                           active2dnum);
+      printf("Objective function (over active variables): %.16f\n",criterion);
+      fflush(stdout); 
+    }
+
+    for(jj=0;(i=working2dnum[jj])>=0;jj++) {
+      a_old[i]=a[i];
+    }
+
+    retrain=check_optimality_sharedslack(docs,model,label,a,lin,c,
+                             slack,alphaslack,totdoc,learn_parm,
+			     maxdiff,epsilon_crit_org,&misclassified,
+			     active2dnum,last_suboptimal_at,
+			     iteration,kernel_parm);
+
+    if(verbosity>=2) {
+      t6=get_runtime();
+      timing_profile->time_select+=t1-t0;
+      timing_profile->time_kernel+=t2-t1;
+      timing_profile->time_opti+=t3-t2;
+      timing_profile->time_update+=t4-t3;
+      timing_profile->time_model+=t5-t4;
+      timing_profile->time_check+=t6-t5;
+    }
+
+    /* checking whether optimizer got stuck */
+    if((*maxdiff) < bestmaxdiff) {
+      bestmaxdiff=(*maxdiff);
+      bestmaxdiffiter=iteration;
+    }
+    if(iteration > (bestmaxdiffiter+learn_parm->maxiter)) { 
+      /* long time no progress? */
+      terminate=1;
+      retrain=0;
+      if(verbosity>=1) 
+	printf("\nWARNING: Relaxing KT-Conditions due to slow progress! Terminating!\n");
+    }
+
+    noshrink=0; 
+
+    if((!retrain) && (inactivenum>0) 
+       && ((!learn_parm->skip_final_opt_check) 
+	   || (kernel_parm->kernel_type == LINEAR))) { 
+      if(((verbosity>=1) && (kernel_parm->kernel_type != LINEAR)) 
+	 || (verbosity>=2)) {
+	if(verbosity==1) {
+	  printf("\n");
+	}
+	printf(" Checking optimality of inactive variables..."); 
+	fflush(stdout);
+      }
+      t1=get_runtime();
+      reactivate_inactive_examples(label,unlabeled,a,shrink_state,lin,c,totdoc,
+				   totwords,iteration,learn_parm,inconsistent,
+				   docs,kernel_parm,kernel_cache,model,aicache,
+				   weights,maxdiff);
+      /* Update to new active variables. */
+      activenum=compute_index(shrink_state->active,totdoc,active2dnum);
+      inactivenum=totdoc-activenum;
+      /* check optimality, since check in reactivate does not work for
+	 sharedslacks */
+      retrain=check_optimality_sharedslack(docs,model,label,a,lin,c,
+			     slack,alphaslack,totdoc,learn_parm,
+			     maxdiff,epsilon_crit_org,&misclassified,
+			     active2dnum,last_suboptimal_at,
+			     iteration,kernel_parm);
+
+      /* reset watchdog */
+      bestmaxdiff=(*maxdiff);
+      bestmaxdiffiter=iteration;
+      /* termination criterion */
+      noshrink=1;
+      retrain=0;
+      if((*maxdiff) > learn_parm->epsilon_crit) 
+	retrain=1;
+      timing_profile->time_shrink+=get_runtime()-t1;
+      if(((verbosity>=1) && (kernel_parm->kernel_type != LINEAR)) 
+	 || (verbosity>=2)) {
+	printf("done.\n");  fflush(stdout);
+        printf(" Number of inactive variables = %ld\n",inactivenum);
+      }		  
+    }
+
+    if((!retrain) && (learn_parm->epsilon_crit>(*maxdiff))) 
+      learn_parm->epsilon_crit=(*maxdiff);
+    if((!retrain) && (learn_parm->epsilon_crit>epsilon_crit_org)) {
+      learn_parm->epsilon_crit/=2.0;
+      retrain=1;
+      noshrink=1;
+    }
+    if(learn_parm->epsilon_crit<epsilon_crit_org) 
+      learn_parm->epsilon_crit=epsilon_crit_org;
+    
+    if(verbosity>=2) {
+      printf(" => (%ld SV (incl. %ld SV at u-bound), max violation=%.5f)\n",
+	     supvecnum,model->at_upper_bound,(*maxdiff)); 
+      fflush(stdout);
+    }
+    if(verbosity>=3) {
+      printf("\n");
+    }
+
+    if(((iteration % 10) == 0) && (!noshrink)) {
+      activenum=shrink_problem(docs,learn_parm,shrink_state,
+			       kernel_parm,active2dnum,
+			       last_suboptimal_at,iteration,totdoc,
+			       maxl((long)(activenum/10),
+				    maxl((long)(totdoc/500),100)),
+			       a,inconsistent);
+      inactivenum=totdoc-activenum;
+      if((kernel_cache)
+	 && (supvecnum>kernel_cache->max_elems)
+	 && ((kernel_cache->activenum-activenum)>maxl((long)(activenum/10),500))) {
+	kernel_cache_shrink(kernel_cache,totdoc,
+			    minl((kernel_cache->activenum-activenum),
+				 (kernel_cache->activenum-supvecnum)),
+			    shrink_state->active); 
+      }
+    }
+
+  } /* end of loop */
+
+
+  free(alphaslack);
+  free(slack);
+  free(chosen);
+  free(unlabeled);
+  free(inconsistent);
+  free(ignore);
+  free(last_suboptimal_at);
+  free(key);
+  free(selcrit);
+  free(selexam);
+  free(a_old);
+  free(aicache);
+  free(working2dnum);
+  free(active2dnum);
+  free(qp.opt_ce);
+  free(qp.opt_ce0);
+  free(qp.opt_g);
+  free(qp.opt_g0);
+  free(qp.opt_xinit);
+  free(qp.opt_low);
+  free(qp.opt_up);
+  free(weights);
+
+  learn_parm->epsilon_crit=epsilon_crit_org; /* restore org */
+  model->maxdiff=(*maxdiff);
+
+  return(iteration);
+}
+
+
+double compute_objective_function(double *a, double *lin, double *c, 
+				  double eps, long int *label, 
+				  long int *active2dnum)
+     /* Return value of objective function. */
+     /* Works only relative to the active variables! */
+{
+  long i,ii;
+  double criterion;
+  /* calculate value of objective function */
+  criterion=0;
+  for(ii=0;active2dnum[ii]>=0;ii++) {
+    i=active2dnum[ii];
+    criterion=criterion+(eps-(double)label[i]*c[i])*a[i]+0.5*a[i]*label[i]*lin[i];
+  } 
+  return(criterion);
+}
+
+void clear_index(long int *index)
+              /* initializes and empties index */
+{
+  index[0]=-1;
+} 
+
+void add_to_index(long int *index, long int elem)
+     /* initializes and empties index */
+{
+  register long i;
+  for(i=0;index[i] != -1;i++);
+  index[i]=elem;
+  index[i+1]=-1;
+}
+
+long compute_index(long int *binfeature, long int range, long int *index)
+     /* create an inverted index of binfeature */
+{               
+  register long i,ii;
+
+  ii=0;
+  for(i=0;i<range;i++) {
+    if(binfeature[i]) {
+      index[ii]=i;
+      ii++;
+    }
+  }
+  for(i=0;i<4;i++) {
+    index[ii+i]=-1;
+  }
+  return(ii);
+}
+
+
+void optimize_svm(DOC **docs, long int *label, long int *unlabeled, 
+		  long int *exclude_from_eq_const, double eq_target,
+		  long int *chosen, long int *active2dnum, MODEL *model, 
+		  long int totdoc, long int *working2dnum, long int varnum, 
+		  double *a, double *lin, double *c, LEARN_PARM *learn_parm, 
+		  CFLOAT *aicache, KERNEL_PARM *kernel_parm, QP *qp, 
+		  double *epsilon_crit_target)
+     /* Do optimization on the working set. */
+{
+    long i;
+    double *a_v;
+
+    compute_matrices_for_optimization(docs,label,unlabeled,
+				      exclude_from_eq_const,eq_target,chosen,
+				      active2dnum,working2dnum,model,a,lin,c,
+				      varnum,totdoc,learn_parm,aicache,
+				      kernel_parm,qp);
+
+    if(verbosity>=3) {
+      printf("Running optimizer..."); fflush(stdout);
+    }
+    /* call the qp-subsolver */
+    a_v=optimize_qp(qp,epsilon_crit_target,
+		    learn_parm->svm_maxqpsize,
+		    &(model->b),   /* in case the optimizer gives us */
+                                   /* the threshold for free. otherwise */
+                                   /* b is calculated in calculate_model. */
+		    learn_parm);
+    if(verbosity>=3) {         
+      printf("done\n");
+    }
+
+    for(i=0;i<varnum;i++) {
+      a[working2dnum[i]]=a_v[i];
+      /*
+      if(a_v[i]<=(0+learn_parm->epsilon_a)) {
+	a[working2dnum[i]]=0;
+      }
+      else if(a_v[i]>=(learn_parm->svm_cost[working2dnum[i]]-learn_parm->epsilon_a)) {
+	a[working2dnum[i]]=learn_parm->svm_cost[working2dnum[i]];
+      }
+      */
+    }
+}
+
+void compute_matrices_for_optimization(DOC **docs, long int *label, 
+          long int *unlabeled, long *exclude_from_eq_const, double eq_target,
+	  long int *chosen, long int *active2dnum, 
+          long int *key, MODEL *model, double *a, double *lin, double *c, 
+	  long int varnum, long int totdoc, LEARN_PARM *learn_parm, 
+          CFLOAT *aicache, KERNEL_PARM *kernel_parm, QP *qp)
+{
+  register long ki,kj,i,j;
+  register double kernel_temp;
+
+  if(verbosity>=3) {
+    fprintf(stdout,"Computing qp-matrices (type %ld kernel [degree %ld, rbf_gamma %f, coef_lin %f, coef_const %f])...",kernel_parm->kernel_type,kernel_parm->poly_degree,kernel_parm->rbf_gamma,kernel_parm->coef_lin,kernel_parm->coef_const); 
+    fflush(stdout);
+  }
+
+  qp->opt_n=varnum;
+  qp->opt_ce0[0]=-eq_target; /* compute the constant for equality constraint */
+  for(j=1;j<model->sv_num;j++) { /* start at 1 */
+    if((!chosen[(model->supvec[j])->docnum])
+       && (!exclude_from_eq_const[(model->supvec[j])->docnum])) {
+      qp->opt_ce0[0]+=model->alpha[j];
+    }
+  } 
+  if(learn_parm->biased_hyperplane) 
+    qp->opt_m=1;
+  else 
+    qp->opt_m=0;  /* eq-constraint will be ignored */
+
+  /* init linear part of objective function */
+  for(i=0;i<varnum;i++) {
+    qp->opt_g0[i]=lin[key[i]];
+  }
+
+  for(i=0;i<varnum;i++) {
+    ki=key[i];
+
+    /* Compute the matrix for equality constraints */
+    qp->opt_ce[i]=label[ki];
+    qp->opt_low[i]=0;
+    qp->opt_up[i]=learn_parm->svm_cost[ki];
+
+    kernel_temp=(double)kernel(kernel_parm,docs[ki],docs[ki]); 
+    /* compute linear part of objective function */
+    qp->opt_g0[i]-=(kernel_temp*a[ki]*(double)label[ki]); 
+    /* compute quadratic part of objective function */
+    qp->opt_g[varnum*i+i]=kernel_temp;
+    for(j=i+1;j<varnum;j++) {
+      kj=key[j];
+      kernel_temp=(double)kernel(kernel_parm,docs[ki],docs[kj]);
+      /* compute linear part of objective function */
+      qp->opt_g0[i]-=(kernel_temp*a[kj]*(double)label[kj]);
+      qp->opt_g0[j]-=(kernel_temp*a[ki]*(double)label[ki]); 
+      /* compute quadratic part of objective function */
+      qp->opt_g[varnum*i+j]=(double)label[ki]*(double)label[kj]*kernel_temp;
+      qp->opt_g[varnum*j+i]=(double)label[ki]*(double)label[kj]*kernel_temp;
+    }
+
+    if(verbosity>=3) {
+      if(i % 20 == 0) {
+	fprintf(stdout,"%ld..",i); fflush(stdout);
+      }
+    }
+  }
+
+  for(i=0;i<varnum;i++) {
+    /* assure starting at feasible point */
+    qp->opt_xinit[i]=a[key[i]];
+    /* set linear part of objective function */
+    qp->opt_g0[i]=(learn_parm->eps-(double)label[key[i]]*c[key[i]])+qp->opt_g0[i]*(double)label[key[i]];    
+  }
+
+  if(verbosity>=3) {
+    fprintf(stdout,"done\n");
+  }
+}
+
+long calculate_svm_model(DOC **docs, long int *label, long int *unlabeled, 
+			 double *lin, double *a, double *a_old, double *c, 
+			 LEARN_PARM *learn_parm, long int *working2dnum, 
+			 long int *active2dnum, MODEL *model)
+     /* Compute decision function based on current values */
+     /* of alpha. */
+{
+  long i,ii,pos,b_calculated=0,first_low,first_high;
+  double ex_c,b_temp,b_low,b_high;
+
+  if(verbosity>=3) {
+    printf("Calculating model..."); fflush(stdout);
+  }
+
+  if(!learn_parm->biased_hyperplane) {
+    model->b=0;
+    b_calculated=1;
+  }
+
+  for(ii=0;(i=working2dnum[ii])>=0;ii++) {
+    if((a_old[i]>0) && (a[i]==0)) { /* remove from model */
+      pos=model->index[i]; 
+      model->index[i]=-1;
+      (model->sv_num)--;
+      model->supvec[pos]=model->supvec[model->sv_num];
+      model->alpha[pos]=model->alpha[model->sv_num];
+      model->index[(model->supvec[pos])->docnum]=pos;
+    }
+    else if((a_old[i]==0) && (a[i]>0)) { /* add to model */
+      model->supvec[model->sv_num]=docs[i];
+      model->alpha[model->sv_num]=a[i]*(double)label[i];
+      model->index[i]=model->sv_num;
+      (model->sv_num)++;
+    }
+    else if(a_old[i]==a[i]) { /* nothing to do */
+    }
+    else {  /* just update alpha */
+      model->alpha[model->index[i]]=a[i]*(double)label[i];
+    }
+      
+    ex_c=learn_parm->svm_cost[i]-learn_parm->epsilon_a;
+    if((a_old[i]>=ex_c) && (a[i]<ex_c)) { 
+      (model->at_upper_bound)--;
+    }
+    else if((a_old[i]<ex_c) && (a[i]>=ex_c)) { 
+      (model->at_upper_bound)++;
+    }
+
+    if((!b_calculated) 
+       && (a[i]>learn_parm->epsilon_a) && (a[i]<ex_c)) {   /* calculate b */
+     	model->b=((double)label[i]*learn_parm->eps-c[i]+lin[i]); 
+	/* model->b=(-(double)label[i]+lin[i]); */
+	b_calculated=1;
+    }
+  }      
+
+  /* No alpha in the working set not at bounds, so b was not
+     calculated in the usual way. The following handles this special
+     case. */
+  if(learn_parm->biased_hyperplane 
+     && (!b_calculated)
+     && (model->sv_num-1 == model->at_upper_bound)) { 
+    first_low=1;
+    first_high=1;
+    b_low=0;
+    b_high=0;
+    for(ii=0;(i=active2dnum[ii])>=0;ii++) {
+      ex_c=learn_parm->svm_cost[i]-learn_parm->epsilon_a;
+      if(a[i]<ex_c) { 
+	if(label[i]>0)  {
+	  b_temp=-(learn_parm->eps-c[i]+lin[i]);
+	  if((b_temp>b_low) || (first_low)) {
+	    b_low=b_temp;
+	    first_low=0;
+	  }
+	}
+	else {
+	  b_temp=-(-learn_parm->eps-c[i]+lin[i]);
+	  if((b_temp<b_high) || (first_high)) {
+	    b_high=b_temp;
+	    first_high=0;
+	  }
+	}
+      }
+      else {
+	if(label[i]<0)  {
+	  b_temp=-(-learn_parm->eps-c[i]+lin[i]);
+	  if((b_temp>b_low) || (first_low)) {
+	    b_low=b_temp;
+	    first_low=0;
+	  }
+	}
+	else {
+	  b_temp=-(learn_parm->eps-c[i]+lin[i]);
+	  if((b_temp<b_high) || (first_high)) {
+	    b_high=b_temp;
+	    first_high=0;
+	  }
+	}
+      }
+    }
+    if(first_high) {
+      model->b=-b_low;
+    }
+    else if(first_low) {
+      model->b=-b_high;
+    }
+    else {
+      model->b=-(b_high+b_low)/2.0;  /* select b as the middle of range */
+      /* printf("\nb_low=%f, b_high=%f,b=%f\n",b_low,b_high,model->b); */
+    }
+  }
+
+  if(verbosity>=3) {
+    printf("done\n"); fflush(stdout);
+  }
+
+  return(model->sv_num-1); /* have to substract one, since element 0 is empty*/
+}
+
+long check_optimality(MODEL *model, long int *label, long int *unlabeled, 
+		      double *a, double *lin, double *c, long int totdoc, 
+		      LEARN_PARM *learn_parm, double *maxdiff, 
+		      double epsilon_crit_org, long int *misclassified, 
+		      long int *inconsistent, long int *active2dnum,
+		      long int *last_suboptimal_at, 
+		      long int iteration, KERNEL_PARM *kernel_parm)
+     /* Check KT-conditions */
+{
+  long i,ii,retrain;
+  double dist,ex_c,target;
+
+  if(kernel_parm->kernel_type == LINEAR) {  /* be optimistic */
+    learn_parm->epsilon_shrink=-learn_parm->epsilon_crit+epsilon_crit_org;  
+  }
+  else {  /* be conservative */
+    learn_parm->epsilon_shrink=learn_parm->epsilon_shrink*0.7+(*maxdiff)*0.3; 
+  }
+  retrain=0;
+  (*maxdiff)=0;
+  (*misclassified)=0;
+  for(ii=0;(i=active2dnum[ii])>=0;ii++) {
+    if((!inconsistent[i]) && label[i]) {
+      dist=(lin[i]-model->b)*(double)label[i];/* 'distance' from
+						 hyperplane*/
+      target=-(learn_parm->eps-(double)label[i]*c[i]);
+      ex_c=learn_parm->svm_cost[i]-learn_parm->epsilon_a;
+      if(dist <= 0) {       
+	(*misclassified)++;  /* does not work due to deactivation of var */
+      }
+      if((a[i]>learn_parm->epsilon_a) && (dist > target)) {
+	if((dist-target)>(*maxdiff))  /* largest violation */
+	  (*maxdiff)=dist-target;
+      }
+      else if((a[i]<ex_c) && (dist < target)) {
+	if((target-dist)>(*maxdiff))  /* largest violation */
+	  (*maxdiff)=target-dist;
+      }
+      /* Count how long a variable was at lower/upper bound (and optimal).*/
+      /* Variables, which were at the bound and optimal for a long */
+      /* time are unlikely to become support vectors. In case our */
+      /* cache is filled up, those variables are excluded to save */
+      /* kernel evaluations. (See chapter 'Shrinking').*/ 
+      if((a[i]>(learn_parm->epsilon_a)) 
+	 && (a[i]<ex_c)) { 
+	last_suboptimal_at[i]=iteration;         /* not at bound */
+      }
+      else if((a[i]<=(learn_parm->epsilon_a)) 
+	      && (dist < (target+learn_parm->epsilon_shrink))) {
+	last_suboptimal_at[i]=iteration;         /* not likely optimal */
+      }
+      else if((a[i]>=ex_c)
+	      && (dist > (target-learn_parm->epsilon_shrink)))  { 
+	last_suboptimal_at[i]=iteration;         /* not likely optimal */
+      }
+    }   
+  }
+  /* termination criterion */
+  if((!retrain) && ((*maxdiff) > learn_parm->epsilon_crit)) {  
+    retrain=1;
+  }
+  return(retrain);
+}
+
+long check_optimality_sharedslack(DOC **docs, MODEL *model, long int *label,
+		      double *a, double *lin, double *c, double *slack,
+		      double *alphaslack,
+		      long int totdoc, 
+		      LEARN_PARM *learn_parm, double *maxdiff, 
+		      double epsilon_crit_org, long int *misclassified, 
+		      long int *active2dnum,
+		      long int *last_suboptimal_at, 
+		      long int iteration, KERNEL_PARM *kernel_parm)
+     /* Check KT-conditions */
+{
+  long i,ii,retrain;
+  double dist,ex_c=0,target;
+
+  if(kernel_parm->kernel_type == LINEAR) {  /* be optimistic */
+    learn_parm->epsilon_shrink=-learn_parm->epsilon_crit+epsilon_crit_org;  
+  }
+  else {  /* be conservative */
+    learn_parm->epsilon_shrink=learn_parm->epsilon_shrink*0.7+(*maxdiff)*0.3; 
+  }
+
+  retrain=0;
+  (*maxdiff)=0;
+  (*misclassified)=0;
+  for(ii=0;(i=active2dnum[ii])>=0;ii++) {
+    /* 'distance' from hyperplane*/
+    dist=(lin[i]-model->b)*(double)label[i]+slack[docs[i]->slackid];
+    target=-(learn_parm->eps-(double)label[i]*c[i]);
+    ex_c=learn_parm->svm_c-learn_parm->epsilon_a;
+    if((a[i]>learn_parm->epsilon_a) && (dist > target)) {
+      if((dist-target)>(*maxdiff)) {  /* largest violation */
+	(*maxdiff)=dist-target;
+	if(verbosity>=5) printf("sid %ld: dist=%.2f, target=%.2f, slack=%.2f, a=%f, alphaslack=%f\n",docs[i]->slackid,dist,target,slack[docs[i]->slackid],a[i],alphaslack[docs[i]->slackid]);
+	if(verbosity>=5) printf(" (single %f)\n",(*maxdiff));
+      }
+    }
+    if((alphaslack[docs[i]->slackid]<ex_c) && (slack[docs[i]->slackid]>0)) {
+      if((slack[docs[i]->slackid])>(*maxdiff)) { /* largest violation */
+	(*maxdiff)=slack[docs[i]->slackid];
+	if(verbosity>=5) printf("sid %ld: dist=%.2f, target=%.2f, slack=%.2f, a=%f, alphaslack=%f\n",docs[i]->slackid,dist,target,slack[docs[i]->slackid],a[i],alphaslack[docs[i]->slackid]);
+	if(verbosity>=5) printf(" (joint %f)\n",(*maxdiff));
+      }
+    }
+    /* Count how long a variable was at lower/upper bound (and optimal).*/
+    /* Variables, which were at the bound and optimal for a long */
+    /* time are unlikely to become support vectors. In case our */
+    /* cache is filled up, those variables are excluded to save */
+    /* kernel evaluations. (See chapter 'Shrinking').*/ 
+    if((a[i]>(learn_parm->epsilon_a)) 
+       && (a[i]<ex_c)) { 
+      last_suboptimal_at[docs[i]->slackid]=iteration;  /* not at bound */
+    }
+    else if((a[i]<=(learn_parm->epsilon_a)) 
+	    && (dist < (target+learn_parm->epsilon_shrink))) {
+      last_suboptimal_at[docs[i]->slackid]=iteration;  /* not likely optimal */
+    }
+    else if((a[i]>=ex_c)
+	    && (slack[docs[i]->slackid] < learn_parm->epsilon_shrink))  { 
+      last_suboptimal_at[docs[i]->slackid]=iteration;  /* not likely optimal */
+    }
+  }   
+  /* termination criterion */
+  if((!retrain) && ((*maxdiff) > learn_parm->epsilon_crit)) {  
+    retrain=1;
+  }
+  return(retrain);
+}
+
+void compute_shared_slacks(DOC **docs, long int *label, 
+			   double *a, double *lin, 
+			   double *c, long int *active2dnum,
+			   LEARN_PARM *learn_parm, 
+			   double *slack, double *alphaslack)
+     /* compute the value of shared slacks and the joint alphas */
+{
+  long jj,i;
+  double dist,target;
+
+  for(jj=0;(i=active2dnum[jj])>=0;jj++) { /* clear slack variables */
+    slack[docs[i]->slackid]=0.0;
+    alphaslack[docs[i]->slackid]=0.0;
+  }
+  for(jj=0;(i=active2dnum[jj])>=0;jj++) { /* recompute slack variables */
+    dist=(lin[i])*(double)label[i];
+    target=-(learn_parm->eps-(double)label[i]*c[i]);
+    if((target-dist) > slack[docs[i]->slackid])
+      slack[docs[i]->slackid]=target-dist;
+    alphaslack[docs[i]->slackid]+=a[i];
+  }
+}
+
+
+long identify_inconsistent(double *a, long int *label, 
+			   long int *unlabeled, long int totdoc, 
+			   LEARN_PARM *learn_parm, 
+			   long int *inconsistentnum, long int *inconsistent)
+{
+  long i,retrain;
+
+  /* Throw out examples with multipliers at upper bound. This */
+  /* corresponds to the -i 1 option. */
+  /* ATTENTION: this is just a heuristic for finding a close */
+  /*            to minimum number of examples to exclude to */
+  /*            make the problem separable with desired margin */
+  retrain=0;
+  for(i=0;i<totdoc;i++) {
+    if((!inconsistent[i]) && (!unlabeled[i]) 
+       && (a[i]>=(learn_parm->svm_cost[i]-learn_parm->epsilon_a))) { 
+	(*inconsistentnum)++;
+	inconsistent[i]=1;  /* never choose again */
+	retrain=2;          /* start over */
+	if(verbosity>=3) {
+	  printf("inconsistent(%ld)..",i); fflush(stdout);
+	}
+    }
+  }
+  return(retrain);
+}
+
+long identify_misclassified(double *lin, long int *label, 
+			    long int *unlabeled, long int totdoc, 
+			    MODEL *model, long int *inconsistentnum, 
+			    long int *inconsistent)
+{
+  long i,retrain;
+  double dist;
+
+  /* Throw out misclassified examples. This */
+  /* corresponds to the -i 2 option. */
+  /* ATTENTION: this is just a heuristic for finding a close */
+  /*            to minimum number of examples to exclude to */
+  /*            make the problem separable with desired margin */
+  retrain=0;
+  for(i=0;i<totdoc;i++) {
+    dist=(lin[i]-model->b)*(double)label[i]; /* 'distance' from hyperplane*/  
+    if((!inconsistent[i]) && (!unlabeled[i]) && (dist <= 0)) { 
+	(*inconsistentnum)++;
+	inconsistent[i]=1;  /* never choose again */
+	retrain=2;          /* start over */
+	if(verbosity>=3) {
+	  printf("inconsistent(%ld)..",i); fflush(stdout);
+	}
+    }
+  }
+  return(retrain);
+}
+
+long identify_one_misclassified(double *lin, long int *label, 
+				long int *unlabeled, 
+				long int totdoc, MODEL *model, 
+				long int *inconsistentnum, 
+				long int *inconsistent)
+{
+  long i,retrain,maxex=-1;
+  double dist,maxdist=0;
+
+  /* Throw out the 'most misclassified' example. This */
+  /* corresponds to the -i 3 option. */
+  /* ATTENTION: this is just a heuristic for finding a close */
+  /*            to minimum number of examples to exclude to */
+  /*            make the problem separable with desired margin */
+  retrain=0;
+  for(i=0;i<totdoc;i++) {
+    if((!inconsistent[i]) && (!unlabeled[i])) {
+      dist=(lin[i]-model->b)*(double)label[i];/* 'distance' from hyperplane*/  
+      if(dist<maxdist) {
+	maxdist=dist;
+	maxex=i;
+      }
+    }
+  }
+  if(maxex>=0) {
+    (*inconsistentnum)++;
+    inconsistent[maxex]=1;  /* never choose again */
+    retrain=2;          /* start over */
+    if(verbosity>=3) {
+      printf("inconsistent(%ld)..",i); fflush(stdout);
+    }
+  }
+  return(retrain);
+}
+
+void update_linear_component(DOC **docs, long int *label, 
+			     long int *active2dnum, double *a, 
+			     double *a_old, long int *working2dnum, 
+			     long int totdoc, long int totwords, 
+			     KERNEL_PARM *kernel_parm, 
+			     KERNEL_CACHE *kernel_cache, 
+			     double *lin, CFLOAT *aicache, double *weights)
+     /* keep track of the linear component */
+     /* lin of the gradient etc. by updating */
+     /* based on the change of the variables */
+     /* in the current working set */
+{
+  register long i,ii,j,jj;
+  register double tec;
+  SVECTOR *f;
+
+  if(kernel_parm->kernel_type==0) { /* special linear case */
+    clear_vector_n(weights,totwords);
+    for(ii=0;(i=working2dnum[ii])>=0;ii++) {
+      if(a[i] != a_old[i]) {
+	for(f=docs[i]->fvec;f;f=f->next)  
+	  add_vector_ns(weights,f,
+			f->factor*((a[i]-a_old[i])*(double)label[i]));
+      }
+    }
+    for(jj=0;(j=active2dnum[jj])>=0;jj++) {
+      for(f=docs[j]->fvec;f;f=f->next)  
+	lin[j]+=f->factor*sprod_ns(weights,f);
+    }
+  }
+  else {                            /* general case */
+    for(jj=0;(i=working2dnum[jj])>=0;jj++) {
+      if(a[i] != a_old[i]) {
+	get_kernel_row(kernel_cache,docs,i,totdoc,active2dnum,aicache,
+		       kernel_parm);
+	for(ii=0;(j=active2dnum[ii])>=0;ii++) {
+	  tec=aicache[j];
+	  lin[j]+=(((a[i]*tec)-(a_old[i]*tec))*(double)label[i]);
+	}
+      }
+    }
+  }
+}
+
+
+long incorporate_unlabeled_examples(MODEL *model, long int *label, 
+				    long int *inconsistent, 
+				    long int *unlabeled, 
+				    double *a, double *lin, 
+				    long int totdoc, double *selcrit, 
+				    long int *select, long int *key, 
+				    long int transductcycle, 
+				    KERNEL_PARM *kernel_parm, 
+				    LEARN_PARM *learn_parm)
+{
+  long i,j,k,j1,j2,j3,j4,unsupaddnum1=0,unsupaddnum2=0;
+  long pos,neg,upos,uneg,orgpos,orgneg,nolabel,newpos,newneg,allunlab;
+  double dist,model_length,posratio,negratio;
+  long check_every=2;
+  double loss;
+  static double switchsens=0.0,switchsensorg=0.0;
+  double umin,umax,sumalpha;
+  long imin=0,imax=0;
+  static long switchnum=0;
+
+  switchsens/=1.2;
+
+  /* assumes that lin[] is up to date -> no inactive vars */
+
+  orgpos=0;
+  orgneg=0;
+  newpos=0;
+  newneg=0;
+  nolabel=0;
+  allunlab=0;
+  for(i=0;i<totdoc;i++) {
+    if(!unlabeled[i]) {
+      if(label[i] > 0) {
+	orgpos++;
+      }
+      else {
+	orgneg++;
+      }
+    }
+    else {
+      allunlab++;
+      if(unlabeled[i]) {
+	if(label[i] > 0) {
+	  newpos++;
+	}
+	else if(label[i] < 0) {
+	  newneg++;
+	}
+      }
+    }
+    if(label[i]==0) {
+      nolabel++;
+    }
+  }
+
+  if(learn_parm->transduction_posratio >= 0) {
+    posratio=learn_parm->transduction_posratio;
+  }
+  else {
+    posratio=(double)orgpos/(double)(orgpos+orgneg); /* use ratio of pos/neg */
+  }                                                  /* in training data */
+  negratio=1.0-posratio;
+
+  learn_parm->svm_costratio=1.0;                     /* global */
+  if(posratio>0) {
+    learn_parm->svm_costratio_unlab=negratio/posratio;
+  }
+  else {
+    learn_parm->svm_costratio_unlab=1.0;
+  }
+  
+  pos=0;
+  neg=0;
+  upos=0;
+  uneg=0;
+  for(i=0;i<totdoc;i++) {
+    dist=(lin[i]-model->b);  /* 'distance' from hyperplane*/
+    if(dist>0) {
+      pos++;
+    }
+    else {
+      neg++;
+    }
+    if(unlabeled[i]) {
+      if(dist>0) {
+	upos++;
+      }
+      else {
+	uneg++;
+      }
+    }
+    if((!unlabeled[i]) && (a[i]>(learn_parm->svm_cost[i]-learn_parm->epsilon_a))) {
+      /*      printf("Ubounded %ld (class %ld, unlabeled %ld)\n",i,label[i],unlabeled[i]); */
+    }
+  }
+  if(verbosity>=2) {
+    printf("POS=%ld, ORGPOS=%ld, ORGNEG=%ld\n",pos,orgpos,orgneg);
+    printf("POS=%ld, NEWPOS=%ld, NEWNEG=%ld\n",pos,newpos,newneg);
+    printf("pos ratio = %f (%f).\n",(double)(upos)/(double)(allunlab),posratio);
+    fflush(stdout);
+  }
+
+  if(transductcycle == 0) {
+    j1=0; 
+    j2=0;
+    j4=0;
+    for(i=0;i<totdoc;i++) {
+      dist=(lin[i]-model->b);  /* 'distance' from hyperplane*/
+      if((label[i]==0) && (unlabeled[i])) {
+	selcrit[j4]=dist;
+	key[j4]=i;
+	j4++;
+      }
+    }
+    unsupaddnum1=0;	
+    unsupaddnum2=0;	
+    select_top_n(selcrit,j4,select,(long)(allunlab*posratio+0.5));
+    for(k=0;(k<(long)(allunlab*posratio+0.5));k++) {
+      i=key[select[k]];
+      label[i]=1;
+      unsupaddnum1++;	
+      j1++;
+    }
+    for(i=0;i<totdoc;i++) {
+      if((label[i]==0) && (unlabeled[i])) {
+	label[i]=-1;
+	j2++;
+	unsupaddnum2++;
+      }
+    }
+    for(i=0;i<totdoc;i++) {  /* set upper bounds on vars */
+      if(unlabeled[i]) {
+	if(label[i] == 1) {
+	  learn_parm->svm_cost[i]=learn_parm->svm_c*
+	    learn_parm->svm_costratio_unlab*learn_parm->svm_unlabbound;
+	}
+	else if(label[i] == -1) {
+	  learn_parm->svm_cost[i]=learn_parm->svm_c*
+	    learn_parm->svm_unlabbound;
+	}
+      }
+    }
+    if(verbosity>=1) {
+      /* printf("costratio %f, costratio_unlab %f, unlabbound %f\n",
+	 learn_parm->svm_costratio,learn_parm->svm_costratio_unlab,
+	 learn_parm->svm_unlabbound); */
+      printf("Classifying unlabeled data as %ld POS / %ld NEG.\n",
+	     unsupaddnum1,unsupaddnum2); 
+      fflush(stdout);
+    }
+    if(verbosity >= 1) 
+      printf("Retraining.");
+    if(verbosity >= 2) printf("\n");
+    return((long)3);
+  }
+  if((transductcycle % check_every) == 0) {
+    if(verbosity >= 1) 
+      printf("Retraining.");
+    if(verbosity >= 2) printf("\n");
+    j1=0;
+    j2=0;
+    unsupaddnum1=0;
+    unsupaddnum2=0;
+    for(i=0;i<totdoc;i++) {
+      if((unlabeled[i] == 2)) {
+	unlabeled[i]=1;
+	label[i]=1;
+	j1++;
+	unsupaddnum1++;
+      }
+      else if((unlabeled[i] == 3)) {
+	unlabeled[i]=1;
+	label[i]=-1;
+	j2++;
+	unsupaddnum2++;
+      }
+    }
+    for(i=0;i<totdoc;i++) {  /* set upper bounds on vars */
+      if(unlabeled[i]) {
+	if(label[i] == 1) {
+	  learn_parm->svm_cost[i]=learn_parm->svm_c*
+	    learn_parm->svm_costratio_unlab*learn_parm->svm_unlabbound;
+	}
+	else if(label[i] == -1) {
+	  learn_parm->svm_cost[i]=learn_parm->svm_c*
+	    learn_parm->svm_unlabbound;
+	}
+      }
+    }
+
+    if(verbosity>=2) {
+      /* printf("costratio %f, costratio_unlab %f, unlabbound %f\n",
+	     learn_parm->svm_costratio,learn_parm->svm_costratio_unlab,
+	     learn_parm->svm_unlabbound); */
+      printf("%ld positive -> Added %ld POS / %ld NEG unlabeled examples.\n",
+	     upos,unsupaddnum1,unsupaddnum2); 
+      fflush(stdout);
+    }
+
+    if(learn_parm->svm_unlabbound == 1) {
+      learn_parm->epsilon_crit=0.001; /* do the last run right */
+    }
+    else {
+      learn_parm->epsilon_crit=0.01; /* otherwise, no need to be so picky */
+    }
+
+    return((long)3);
+  }
+  else if(((transductcycle % check_every) < check_every)) { 
+    model_length=0;
+    sumalpha=0;
+    loss=0;
+    for(i=0;i<totdoc;i++) {
+      model_length+=a[i]*label[i]*lin[i];
+      sumalpha+=a[i];
+      dist=(lin[i]-model->b);  /* 'distance' from hyperplane*/
+      if((label[i]*dist)<(1.0-learn_parm->epsilon_crit)) {
+	loss+=(1.0-(label[i]*dist))*learn_parm->svm_cost[i]; 
+      }
+    }
+    model_length=sqrt(model_length); 
+    if(verbosity>=2) {
+      printf("Model-length = %f (%f), loss = %f, objective = %f\n",
+	     model_length,sumalpha,loss,loss+0.5*model_length*model_length);
+      fflush(stdout);
+    }
+    j1=0;
+    j2=0;
+    j3=0;
+    j4=0;
+    unsupaddnum1=0;	
+    unsupaddnum2=0;	
+    umin=99999;
+    umax=-99999;
+    j4=1;
+    while(j4) {
+      umin=99999;
+      umax=-99999;
+      for(i=0;(i<totdoc);i++) { 
+	dist=(lin[i]-model->b);  
+	if((label[i]>0) && (unlabeled[i]) && (!inconsistent[i]) 
+	   && (dist<umin)) {
+	  umin=dist;
+	  imin=i;
+	}
+	if((label[i]<0) && (unlabeled[i])  && (!inconsistent[i]) 
+	   && (dist>umax)) {
+	  umax=dist;
+	  imax=i;
+	}
+      }
+      if((umin < (umax+switchsens-1E-4))) {
+	j1++;
+	j2++;
+	unsupaddnum1++;	
+	unlabeled[imin]=3;
+	inconsistent[imin]=1;
+	unsupaddnum2++;	
+	unlabeled[imax]=2;
+	inconsistent[imax]=1;
+      }
+      else
+	j4=0;
+      j4=0;
+    }
+    for(j=0;(j<totdoc);j++) {
+      if(unlabeled[j] && (!inconsistent[j])) {
+	if(label[j]>0) {
+	  unlabeled[j]=2;
+	}
+	else if(label[j]<0) {
+	  unlabeled[j]=3;
+	}
+	/* inconsistent[j]=1; */
+	j3++;
+      }
+    }
+    switchnum+=unsupaddnum1+unsupaddnum2;
+
+    /* stop and print out current margin
+       printf("switchnum %ld %ld\n",switchnum,kernel_parm->poly_degree);
+       if(switchnum == 2*kernel_parm->poly_degree) {
+       learn_parm->svm_unlabbound=1;
+       }
+       */
+
+    if((!unsupaddnum1) && (!unsupaddnum2)) {
+      if((learn_parm->svm_unlabbound>=1) && ((newpos+newneg) == allunlab)) {
+	for(j=0;(j<totdoc);j++) {
+	  inconsistent[j]=0;
+	  if(unlabeled[j]) unlabeled[j]=1;
+	}
+	write_prediction(learn_parm->predfile,model,lin,a,unlabeled,label,
+			 totdoc,learn_parm);  
+	if(verbosity>=1)
+	  printf("Number of switches: %ld\n",switchnum);
+	return((long)0);
+      }
+      switchsens=switchsensorg;
+      learn_parm->svm_unlabbound*=1.5;
+      if(learn_parm->svm_unlabbound>1) {
+	learn_parm->svm_unlabbound=1;
+      }
+      model->at_upper_bound=0; /* since upper bound increased */
+      if(verbosity>=1) 
+	printf("Increasing influence of unlabeled examples to %f%% .",
+	       learn_parm->svm_unlabbound*100.0);
+    }
+    else if(verbosity>=1) {
+      printf("%ld positive -> Switching labels of %ld POS / %ld NEG unlabeled examples.",
+	     upos,unsupaddnum1,unsupaddnum2); 
+      fflush(stdout);
+    }
+
+    if(verbosity >= 2) printf("\n");
+    
+    learn_parm->epsilon_crit=0.5; /* don't need to be so picky */
+
+    for(i=0;i<totdoc;i++) {  /* set upper bounds on vars */
+      if(unlabeled[i]) {
+	if(label[i] == 1) {
+	  learn_parm->svm_cost[i]=learn_parm->svm_c*
+	    learn_parm->svm_costratio_unlab*learn_parm->svm_unlabbound;
+	}
+	else if(label[i] == -1) {
+	  learn_parm->svm_cost[i]=learn_parm->svm_c*
+	    learn_parm->svm_unlabbound;
+	}
+      }
+    }
+
+    return((long)2);
+  }
+
+  return((long)0); 
+}
+
+/*************************** Working set selection ***************************/
+
+long select_next_qp_subproblem_grad(long int *label, 
+				    long int *unlabeled, 
+				    double *a, double *lin, 
+				    double *c, long int totdoc, 
+				    long int qp_size, 
+				    LEARN_PARM *learn_parm, 
+				    long int *inconsistent, 
+				    long int *active2dnum, 
+				    long int *working2dnum, 
+				    double *selcrit, 
+				    long int *select, 
+				    KERNEL_CACHE *kernel_cache, 
+				    long int cache_only,
+				    long int *key, long int *chosen)
+     /* Use the feasible direction approach to select the next
+      qp-subproblem (see chapter 'Selecting a good working set'). If
+      'cache_only' is true, then the variables are selected only among
+      those for which the kernel evaluations are cached. */
+{
+  long choosenum,i,j,k,activedoc,inum,valid;
+  double s;
+
+  for(inum=0;working2dnum[inum]>=0;inum++); /* find end of index */
+  choosenum=0;
+  activedoc=0;
+  for(i=0;(j=active2dnum[i])>=0;i++) {
+    s=-label[j];
+    if(kernel_cache && cache_only) 
+      valid=(kernel_cache->index[j]>=0);
+    else
+      valid=1;
+    if(valid
+       && (!((a[j]<=(0+learn_parm->epsilon_a)) && (s<0)))
+       && (!((a[j]>=(learn_parm->svm_cost[j]-learn_parm->epsilon_a)) 
+	     && (s>0)))
+       && (!chosen[j]) 
+       && (label[j])
+       && (!inconsistent[j]))
+      {
+      selcrit[activedoc]=(double)label[j]*(learn_parm->eps-(double)label[j]*c[j]+(double)label[j]*lin[j]);
+      /*      selcrit[activedoc]=(double)label[j]*(-1.0+(double)label[j]*lin[j]); */
+      key[activedoc]=j;
+      activedoc++;
+    }
+  }
+  select_top_n(selcrit,activedoc,select,(long)(qp_size/2));
+  for(k=0;(choosenum<(qp_size/2)) && (k<(qp_size/2)) && (k<activedoc);k++) {
+    /* if(learn_parm->biased_hyperplane || (selcrit[select[k]] > 0)) { */
+      i=key[select[k]];
+      chosen[i]=1;
+      working2dnum[inum+choosenum]=i;
+      choosenum+=1;
+      if(kernel_cache)
+	kernel_cache_touch(kernel_cache,i); /* make sure it does not get
+					       kicked out of cache */
+      /* } */
+  }
+
+  activedoc=0;
+  for(i=0;(j=active2dnum[i])>=0;i++) {
+    s=label[j];
+    if(kernel_cache && cache_only) 
+      valid=(kernel_cache->index[j]>=0);
+    else
+      valid=1;
+    if(valid
+       && (!((a[j]<=(0+learn_parm->epsilon_a)) && (s<0)))
+       && (!((a[j]>=(learn_parm->svm_cost[j]-learn_parm->epsilon_a)) 
+	     && (s>0))) 
+       && (!chosen[j]) 
+       && (label[j])
+       && (!inconsistent[j])) 
+      {
+      selcrit[activedoc]=-(double)label[j]*(learn_parm->eps-(double)label[j]*c[j]+(double)label[j]*lin[j]);
+      /*  selcrit[activedoc]=-(double)(label[j]*(-1.0+(double)label[j]*lin[j])); */
+      key[activedoc]=j;
+      activedoc++;
+    }
+  }
+  select_top_n(selcrit,activedoc,select,(long)(qp_size/2));
+  for(k=0;(choosenum<qp_size) && (k<(qp_size/2)) && (k<activedoc);k++) {
+    /* if(learn_parm->biased_hyperplane || (selcrit[select[k]] > 0)) { */
+      i=key[select[k]];
+      chosen[i]=1;
+      working2dnum[inum+choosenum]=i;
+      choosenum+=1;
+      if(kernel_cache)
+	kernel_cache_touch(kernel_cache,i); /* make sure it does not get
+					       kicked out of cache */
+      /* } */
+  } 
+  working2dnum[inum+choosenum]=-1; /* complete index */
+  return(choosenum);
+}
+
+long select_next_qp_subproblem_rand(long int *label, 
+				    long int *unlabeled, 
+				    double *a, double *lin, 
+				    double *c, long int totdoc, 
+				    long int qp_size, 
+				    LEARN_PARM *learn_parm, 
+				    long int *inconsistent, 
+				    long int *active2dnum, 
+				    long int *working2dnum, 
+				    double *selcrit, 
+				    long int *select, 
+				    KERNEL_CACHE *kernel_cache, 
+				    long int *key, 
+				    long int *chosen, 
+				    long int iteration)
+/* Use the feasible direction approach to select the next
+   qp-subproblem (see section 'Selecting a good working set'). Chooses
+   a feasible direction at (pseudo) random to help jump over numerical
+   problem. */
+{
+  long choosenum,i,j,k,activedoc,inum;
+  double s;
+
+  for(inum=0;working2dnum[inum]>=0;inum++); /* find end of index */
+  choosenum=0;
+  activedoc=0;
+  for(i=0;(j=active2dnum[i])>=0;i++) {
+    s=-label[j];
+    if((!((a[j]<=(0+learn_parm->epsilon_a)) && (s<0)))
+       && (!((a[j]>=(learn_parm->svm_cost[j]-learn_parm->epsilon_a)) 
+	     && (s>0)))
+       && (!inconsistent[j]) 
+       && (label[j])
+       && (!chosen[j])) {
+      selcrit[activedoc]=(j+iteration) % totdoc;
+      key[activedoc]=j;
+      activedoc++;
+    }
+  }
+  select_top_n(selcrit,activedoc,select,(long)(qp_size/2));
+  for(k=0;(choosenum<(qp_size/2)) && (k<(qp_size/2)) && (k<activedoc);k++) {
+    i=key[select[k]];
+    chosen[i]=1;
+    working2dnum[inum+choosenum]=i;
+    choosenum+=1;
+    kernel_cache_touch(kernel_cache,i); /* make sure it does not get kicked */
+                                        /* out of cache */
+  }
+
+  activedoc=0;
+  for(i=0;(j=active2dnum[i])>=0;i++) {
+    s=label[j];
+    if((!((a[j]<=(0+learn_parm->epsilon_a)) && (s<0)))
+       && (!((a[j]>=(learn_parm->svm_cost[j]-learn_parm->epsilon_a)) 
+	     && (s>0))) 
+       && (!inconsistent[j]) 
+       && (label[j])
+       && (!chosen[j])) {
+      selcrit[activedoc]=(j+iteration) % totdoc;
+      key[activedoc]=j;
+      activedoc++;
+    }
+  }
+  select_top_n(selcrit,activedoc,select,(long)(qp_size/2));
+  for(k=0;(choosenum<qp_size) && (k<(qp_size/2)) && (k<activedoc);k++) {
+    i=key[select[k]];
+    chosen[i]=1;
+    working2dnum[inum+choosenum]=i;
+    choosenum+=1;
+    kernel_cache_touch(kernel_cache,i); /* make sure it does not get kicked */
+                                        /* out of cache */
+  } 
+  working2dnum[inum+choosenum]=-1; /* complete index */
+  return(choosenum);
+}
+
+long select_next_qp_slackset(DOC **docs, long int *label, 
+			     double *a, double *lin, 
+			     double *slack, double *alphaslack, 
+			     double *c,
+			     LEARN_PARM *learn_parm, 
+			     long int *active2dnum, double *maxviol)
+     /* returns the slackset with the largest internal violation */
+{
+  long i,ii,maxdiffid;
+  double dist,target,maxdiff,ex_c;
+
+  maxdiff=0;
+  maxdiffid=0;
+  for(ii=0;(i=active2dnum[ii])>=0;ii++) {
+    ex_c=learn_parm->svm_c-learn_parm->epsilon_a;
+    if(alphaslack[docs[i]->slackid] >= ex_c) {
+      dist=(lin[i])*(double)label[i]+slack[docs[i]->slackid]; /* distance */
+      target=-(learn_parm->eps-(double)label[i]*c[i]); /* rhs of constraint */
+      if((a[i]>learn_parm->epsilon_a) && (dist > target)) {
+	if((dist-target)>maxdiff) { /* largest violation */
+	  maxdiff=dist-target;
+	  maxdiffid=docs[i]->slackid;
+	}
+      }
+    }
+  }
+  (*maxviol)=maxdiff;
+  return(maxdiffid);
+}
+
+
+void select_top_n(double *selcrit, long int range, long int *select, 
+		  long int n)
+{
+  register long i,j;
+
+  for(i=0;(i<n) && (i<range);i++) { /* Initialize with the first n elements */
+    for(j=i;j>=0;j--) {
+      if((j>0) && (selcrit[select[j-1]]<selcrit[i])){
+	select[j]=select[j-1];
+      }
+      else {
+	select[j]=i;
+	j=-1;
+      }
+    }
+  }
+  if(n>0) {
+    for(i=n;i<range;i++) {  
+      if(selcrit[i]>selcrit[select[n-1]]) {
+	for(j=n-1;j>=0;j--) {
+	  if((j>0) && (selcrit[select[j-1]]<selcrit[i])) {
+	    select[j]=select[j-1];
+	  }
+	  else {
+	    select[j]=i;
+	    j=-1;
+	  }
+	}
+      }
+    }
+  }
+}      
+      
+
+/******************************** Shrinking  *********************************/
+
+void init_shrink_state(SHRINK_STATE *shrink_state, long int totdoc, 
+		       long int maxhistory)
+{
+  long i;
+
+  shrink_state->deactnum=0;
+  shrink_state->active = (long *)my_malloc(sizeof(long)*totdoc);
+  shrink_state->inactive_since = (long *)my_malloc(sizeof(long)*totdoc);
+  shrink_state->a_history = (double **)my_malloc(sizeof(double *)*maxhistory);
+  shrink_state->maxhistory=maxhistory;
+  shrink_state->last_lin = (double *)my_malloc(sizeof(double)*totdoc);
+  shrink_state->last_a = (double *)my_malloc(sizeof(double)*totdoc);
+
+  for(i=0;i<totdoc;i++) { 
+    shrink_state->active[i]=1;
+    shrink_state->inactive_since[i]=0;
+    shrink_state->last_a[i]=0;
+    shrink_state->last_lin[i]=0;
+  }
+}
+
+void shrink_state_cleanup(SHRINK_STATE *shrink_state)
+{
+  free(shrink_state->active);
+  free(shrink_state->inactive_since);
+  if(shrink_state->deactnum > 0) 
+    free(shrink_state->a_history[shrink_state->deactnum-1]);
+  free(shrink_state->a_history);
+  free(shrink_state->last_a);
+  free(shrink_state->last_lin);
+}
+
+long shrink_problem(DOC **docs,
+		    LEARN_PARM *learn_parm, 
+		    SHRINK_STATE *shrink_state, 
+		    KERNEL_PARM *kernel_parm,
+		    long int *active2dnum, 
+		    long int *last_suboptimal_at, 
+		    long int iteration, 
+		    long int totdoc, 
+		    long int minshrink, 
+		    double *a, 
+		    long int *inconsistent)
+     /* Shrink some variables away.  Do the shrinking only if at least
+        minshrink variables can be removed. */
+{
+  long i,ii,change,activenum,lastiter;
+  double *a_old;
+  
+  activenum=0;
+  change=0;
+  for(ii=0;active2dnum[ii]>=0;ii++) {
+    i=active2dnum[ii];
+    activenum++;
+    if(learn_parm->sharedslack)
+      lastiter=last_suboptimal_at[docs[i]->slackid];
+    else
+      lastiter=last_suboptimal_at[i];
+    if(((iteration-lastiter) > learn_parm->svm_iter_to_shrink) 
+       || (inconsistent[i])) {
+      change++;
+    }
+  }
+  if((change>=minshrink) /* shrink only if sufficiently many candidates */
+     && (shrink_state->deactnum<shrink_state->maxhistory)) { /* and enough memory */
+    /* Shrink problem by removing those variables which are */
+    /* optimal at a bound for a minimum number of iterations */
+    if(verbosity>=2) {
+      printf(" Shrinking..."); fflush(stdout);
+    }
+    if(kernel_parm->kernel_type != LINEAR) { /*  non-linear case save alphas */
+      a_old=(double *)my_malloc(sizeof(double)*totdoc);
+      shrink_state->a_history[shrink_state->deactnum]=a_old;
+      for(i=0;i<totdoc;i++) {
+	a_old[i]=a[i];
+      }
+    }
+    for(ii=0;active2dnum[ii]>=0;ii++) {
+      i=active2dnum[ii];
+      if(learn_parm->sharedslack)
+	lastiter=last_suboptimal_at[docs[i]->slackid];
+      else
+	lastiter=last_suboptimal_at[i];
+      if(((iteration-lastiter) > learn_parm->svm_iter_to_shrink) 
+	 || (inconsistent[i])) {
+	shrink_state->active[i]=0;
+	shrink_state->inactive_since[i]=shrink_state->deactnum;
+      }
+    }
+    activenum=compute_index(shrink_state->active,totdoc,active2dnum);
+    shrink_state->deactnum++;
+    if(kernel_parm->kernel_type == LINEAR) { 
+      shrink_state->deactnum=0;
+    }
+    if(verbosity>=2) {
+      printf("done.\n"); fflush(stdout);
+      printf(" Number of inactive variables = %ld\n",totdoc-activenum);
+    }
+  }
+  return(activenum);
+} 
+
+
+void reactivate_inactive_examples(long int *label, 
+				  long int *unlabeled, 
+				  double *a, 
+				  SHRINK_STATE *shrink_state, 
+				  double *lin, 
+				  double *c, 
+				  long int totdoc, 
+				  long int totwords, 
+				  long int iteration, 
+				  LEARN_PARM *learn_parm, 
+				  long int *inconsistent, 
+				  DOC **docs, 
+				  KERNEL_PARM *kernel_parm, 
+				  KERNEL_CACHE *kernel_cache, 
+				  MODEL *model, 
+				  CFLOAT *aicache, 
+				  double *weights, 
+				  double *maxdiff)
+     /* Make all variables active again which had been removed by
+        shrinking. */
+     /* Computes lin for those variables from scratch. */
+{
+  register long i,j,ii,jj,t,*changed2dnum,*inactive2dnum;
+  long *changed,*inactive;
+  register double kernel_val,*a_old,dist;
+  double ex_c,target;
+  SVECTOR *f;
+
+  if(kernel_parm->kernel_type == LINEAR) { /* special linear case */
+    a_old=shrink_state->last_a;    
+    clear_vector_n(weights,totwords);
+    for(i=0;i<totdoc;i++) {
+      if(a[i] != a_old[i]) {
+	for(f=docs[i]->fvec;f;f=f->next)  
+	  add_vector_ns(weights,f,
+			f->factor*((a[i]-a_old[i])*(double)label[i]));
+	a_old[i]=a[i];
+      }
+    }
+    for(i=0;i<totdoc;i++) {
+      if(!shrink_state->active[i]) {
+	for(f=docs[i]->fvec;f;f=f->next)  
+	  lin[i]=shrink_state->last_lin[i]+f->factor*sprod_ns(weights,f);
+      }
+      shrink_state->last_lin[i]=lin[i];
+    }
+  }
+  else {
+    changed=(long *)my_malloc(sizeof(long)*totdoc);
+    changed2dnum=(long *)my_malloc(sizeof(long)*(totdoc+11));
+    inactive=(long *)my_malloc(sizeof(long)*totdoc);
+    inactive2dnum=(long *)my_malloc(sizeof(long)*(totdoc+11));
+    for(t=shrink_state->deactnum-1;(t>=0) && shrink_state->a_history[t];t--) {
+      if(verbosity>=2) {
+	printf("%ld..",t); fflush(stdout);
+      }
+      a_old=shrink_state->a_history[t];    
+      for(i=0;i<totdoc;i++) {
+	inactive[i]=((!shrink_state->active[i]) 
+		     && (shrink_state->inactive_since[i] == t));
+	changed[i]= (a[i] != a_old[i]);
+      }
+      compute_index(inactive,totdoc,inactive2dnum);
+      compute_index(changed,totdoc,changed2dnum);
+      
+      for(ii=0;(i=changed2dnum[ii])>=0;ii++) {
+	get_kernel_row(kernel_cache,docs,i,totdoc,inactive2dnum,aicache,
+		       kernel_parm);
+	for(jj=0;(j=inactive2dnum[jj])>=0;jj++) {
+	  kernel_val=aicache[j];
+	  lin[j]+=(((a[i]*kernel_val)-(a_old[i]*kernel_val))*(double)label[i]);
+	}
+      }
+    }
+    free(changed);
+    free(changed2dnum);
+    free(inactive);
+    free(inactive2dnum);
+  }
+  (*maxdiff)=0;
+  for(i=0;i<totdoc;i++) {
+    shrink_state->inactive_since[i]=shrink_state->deactnum-1;
+    if(!inconsistent[i]) {
+      dist=(lin[i]-model->b)*(double)label[i];
+      target=-(learn_parm->eps-(double)label[i]*c[i]);
+      ex_c=learn_parm->svm_cost[i]-learn_parm->epsilon_a;
+      if((a[i]>learn_parm->epsilon_a) && (dist > target)) {
+	if((dist-target)>(*maxdiff))  /* largest violation */
+	  (*maxdiff)=dist-target;
+      }
+      else if((a[i]<ex_c) && (dist < target)) {
+	if((target-dist)>(*maxdiff))  /* largest violation */
+	  (*maxdiff)=target-dist;
+      }
+      if((a[i]>(0+learn_parm->epsilon_a)) 
+	 && (a[i]<ex_c)) { 
+	shrink_state->active[i]=1;                         /* not at bound */
+      }
+      else if((a[i]<=(0+learn_parm->epsilon_a)) && (dist < (target+learn_parm->epsilon_shrink))) {
+	shrink_state->active[i]=1;
+      }
+      else if((a[i]>=ex_c)
+	      && (dist > (target-learn_parm->epsilon_shrink))) {
+	shrink_state->active[i]=1;
+      }
+      else if(learn_parm->sharedslack) { /* make all active when sharedslack */
+	shrink_state->active[i]=1;
+      }
+    }
+  }
+  if(kernel_parm->kernel_type != LINEAR) { /* update history for non-linear */
+    for(i=0;i<totdoc;i++) {
+      (shrink_state->a_history[shrink_state->deactnum-1])[i]=a[i];
+    }
+    for(t=shrink_state->deactnum-2;(t>=0) && shrink_state->a_history[t];t--) {
+      free(shrink_state->a_history[t]);
+      shrink_state->a_history[t]=0;
+    }
+  }
+}
+
+/****************************** Cache handling *******************************/
+
+void get_kernel_row(KERNEL_CACHE *kernel_cache, DOC **docs, 
+		    long int docnum, long int totdoc, 
+		    long int *active2dnum, CFLOAT *buffer, 
+		    KERNEL_PARM *kernel_parm)
+     /* Get's a row of the matrix of kernel values This matrix has the
+      same form as the Hessian, just that the elements are not
+      multiplied by */
+     /* y_i * y_j * a_i * a_j */
+     /* Takes the values from the cache if available. */
+{
+  register long i,j,start;
+  DOC *ex;
+
+  ex=docs[docnum];
+
+  if(kernel_cache->index[docnum] != -1) { /* row is cached? */
+    kernel_cache->lru[kernel_cache->index[docnum]]=kernel_cache->time; /* lru */
+    start=kernel_cache->activenum*kernel_cache->index[docnum];
+    for(i=0;(j=active2dnum[i])>=0;i++) {
+      if(kernel_cache->totdoc2active[j] >= 0) { /* column is cached? */
+	buffer[j]=kernel_cache->buffer[start+kernel_cache->totdoc2active[j]];
+      }
+      else {
+	buffer[j]=(CFLOAT)kernel(kernel_parm,ex,docs[j]);
+      }
+    }
+  }
+  else {
+    for(i=0;(j=active2dnum[i])>=0;i++) {
+      buffer[j]=(CFLOAT)kernel(kernel_parm,ex,docs[j]);
+    }
+  }
+}
+
+
+void cache_kernel_row(KERNEL_CACHE *kernel_cache, DOC **docs, 
+		      long int m, KERNEL_PARM *kernel_parm)
+     /* Fills cache for the row m */
+{
+  register DOC *ex;
+  register long j,k,l;
+  register CFLOAT *cache;
+
+  if(!kernel_cache_check(kernel_cache,m)) {  /* not cached yet*/
+    cache = kernel_cache_clean_and_malloc(kernel_cache,m);
+    if(cache) {
+      l=kernel_cache->totdoc2active[m];
+      ex=docs[m];
+      for(j=0;j<kernel_cache->activenum;j++) {  /* fill cache */
+	k=kernel_cache->active2totdoc[j];
+	if((kernel_cache->index[k] != -1) && (l != -1) && (k != m)) {
+	  cache[j]=kernel_cache->buffer[kernel_cache->activenum
+				       *kernel_cache->index[k]+l];
+	}
+	else {
+	  cache[j]=kernel(kernel_parm,ex,docs[k]);
+	} 
+      }
+    }
+    else {
+      perror("Error: Kernel cache full! => increase cache size");
+    }
+  }
+}
+
+ 
+void cache_multiple_kernel_rows(KERNEL_CACHE *kernel_cache, DOC **docs, 
+				long int *key, long int varnum, 
+				KERNEL_PARM *kernel_parm)
+     /* Fills cache for the rows in key */
+{
+  register long i;
+
+  for(i=0;i<varnum;i++) {  /* fill up kernel cache */
+    cache_kernel_row(kernel_cache,docs,key[i],kernel_parm);
+  }
+}
+
+ 
+void kernel_cache_shrink(KERNEL_CACHE *kernel_cache, long int totdoc, 
+			 long int numshrink, long int *after)
+     /* Remove numshrink columns in the cache which correspond to
+        examples marked 0 in after. */
+{
+  register long i,j,jj,from=0,to=0,scount;  
+  long *keep;
+
+  if(verbosity>=2) {
+    printf(" Reorganizing cache..."); fflush(stdout);
+  }
+
+  keep=(long *)my_malloc(sizeof(long)*totdoc);
+  for(j=0;j<totdoc;j++) {
+    keep[j]=1;
+  }
+  scount=0;
+  for(jj=0;(jj<kernel_cache->activenum) && (scount<numshrink);jj++) {
+    j=kernel_cache->active2totdoc[jj];
+    if(!after[j]) {
+      scount++;
+      keep[j]=0;
+    }
+  }
+
+  for(i=0;i<kernel_cache->max_elems;i++) {
+    for(jj=0;jj<kernel_cache->activenum;jj++) {
+      j=kernel_cache->active2totdoc[jj];
+      if(!keep[j]) {
+	from++;
+      }
+      else {
+	kernel_cache->buffer[to]=kernel_cache->buffer[from];
+	to++;
+	from++;
+      }
+    }
+  }
+
+  kernel_cache->activenum=0;
+  for(j=0;j<totdoc;j++) {
+    if((keep[j]) && (kernel_cache->totdoc2active[j] != -1)) {
+      kernel_cache->active2totdoc[kernel_cache->activenum]=j;
+      kernel_cache->totdoc2active[j]=kernel_cache->activenum;
+      kernel_cache->activenum++;
+    }
+    else {
+      kernel_cache->totdoc2active[j]=-1;
+    }
+  }
+
+  kernel_cache->max_elems=(long)(kernel_cache->buffsize/kernel_cache->activenum);
+  if(kernel_cache->max_elems>totdoc) {
+    kernel_cache->max_elems=totdoc;
+  }
+
+  free(keep);
+
+  if(verbosity>=2) {
+    printf("done.\n"); fflush(stdout);
+    printf(" Cache-size in rows = %ld\n",kernel_cache->max_elems);
+  }
+}
+
+KERNEL_CACHE *kernel_cache_init(long int totdoc, long int buffsize)
+{
+  long i;
+  KERNEL_CACHE *kernel_cache;
+
+  kernel_cache=(KERNEL_CACHE *)my_malloc(sizeof(KERNEL_CACHE));
+  kernel_cache->index = (long *)my_malloc(sizeof(long)*totdoc);
+  kernel_cache->occu = (long *)my_malloc(sizeof(long)*totdoc);
+  kernel_cache->lru = (long *)my_malloc(sizeof(long)*totdoc);
+  kernel_cache->invindex = (long *)my_malloc(sizeof(long)*totdoc);
+  kernel_cache->active2totdoc = (long *)my_malloc(sizeof(long)*totdoc);
+  kernel_cache->totdoc2active = (long *)my_malloc(sizeof(long)*totdoc);
+  kernel_cache->buffer = (CFLOAT *)my_malloc((size_t)(buffsize)*1024*1024);
+
+  kernel_cache->buffsize=(long)(buffsize/sizeof(CFLOAT)*1024*1024);
+
+  kernel_cache->max_elems=(long)(kernel_cache->buffsize/totdoc);
+  if(kernel_cache->max_elems>totdoc) {
+    kernel_cache->max_elems=totdoc;
+  }
+
+  if(verbosity>=2) {
+    printf(" Cache-size in rows = %ld\n",kernel_cache->max_elems);
+    printf(" Kernel evals so far: %ld\n",kernel_cache_statistic);    
+  }
+
+  kernel_cache->elems=0;   /* initialize cache */
+  for(i=0;i<totdoc;i++) {
+    kernel_cache->index[i]=-1;
+    kernel_cache->lru[i]=0;
+  }
+  for(i=0;i<totdoc;i++) {
+    kernel_cache->occu[i]=0;
+    kernel_cache->invindex[i]=-1;
+  }
+
+  kernel_cache->activenum=totdoc;;
+  for(i=0;i<totdoc;i++) {
+      kernel_cache->active2totdoc[i]=i;
+      kernel_cache->totdoc2active[i]=i;
+  }
+
+  kernel_cache->time=0;  
+
+  return(kernel_cache);
+} 
+
+void kernel_cache_reset_lru(KERNEL_CACHE *kernel_cache)
+{
+  long maxlru=0,k;
+  
+  for(k=0;k<kernel_cache->max_elems;k++) {
+    if(maxlru < kernel_cache->lru[k]) 
+      maxlru=kernel_cache->lru[k];
+  }
+  for(k=0;k<kernel_cache->max_elems;k++) {
+      kernel_cache->lru[k]-=maxlru;
+  }
+}
+
+void kernel_cache_cleanup(KERNEL_CACHE *kernel_cache)
+{
+  free(kernel_cache->index);
+  free(kernel_cache->occu);
+  free(kernel_cache->lru);
+  free(kernel_cache->invindex);
+  free(kernel_cache->active2totdoc);
+  free(kernel_cache->totdoc2active);
+  free(kernel_cache->buffer);
+  free(kernel_cache);
+}
+
+long kernel_cache_malloc(KERNEL_CACHE *kernel_cache)
+{
+  long i;
+
+  if(kernel_cache_space_available(kernel_cache)) {
+    for(i=0;i<kernel_cache->max_elems;i++) {
+      if(!kernel_cache->occu[i]) {
+	kernel_cache->occu[i]=1;
+	kernel_cache->elems++;
+	return(i);
+      }
+    }
+  }
+  return(-1);
+}
+
+void kernel_cache_free(KERNEL_CACHE *kernel_cache, long int i)
+{
+  kernel_cache->occu[i]=0;
+  kernel_cache->elems--;
+}
+
+long kernel_cache_free_lru(KERNEL_CACHE *kernel_cache) 
+     /* remove least recently used cache element */
+{                                     
+  register long k,least_elem=-1,least_time;
+
+  least_time=kernel_cache->time+1;
+  for(k=0;k<kernel_cache->max_elems;k++) {
+    if(kernel_cache->invindex[k] != -1) {
+      if(kernel_cache->lru[k]<least_time) {
+	least_time=kernel_cache->lru[k];
+	least_elem=k;
+      }
+    }
+  }
+  if(least_elem != -1) {
+    kernel_cache_free(kernel_cache,least_elem);
+    kernel_cache->index[kernel_cache->invindex[least_elem]]=-1;
+    kernel_cache->invindex[least_elem]=-1;
+    return(1);
+  }
+  return(0);
+}
+
+
+CFLOAT *kernel_cache_clean_and_malloc(KERNEL_CACHE *kernel_cache, 
+				      long int docnum)
+     /* Get a free cache entry. In case cache is full, the lru element
+        is removed. */
+{
+  long result;
+  if((result = kernel_cache_malloc(kernel_cache)) == -1) {
+    if(kernel_cache_free_lru(kernel_cache)) {
+      result = kernel_cache_malloc(kernel_cache);
+    }
+  }
+  kernel_cache->index[docnum]=result;
+  if(result == -1) {
+    return(0);
+  }
+  kernel_cache->invindex[result]=docnum;
+  kernel_cache->lru[kernel_cache->index[docnum]]=kernel_cache->time; /* lru */
+  return((CFLOAT *)((long)kernel_cache->buffer
+		    +(kernel_cache->activenum*sizeof(CFLOAT)*
+		      kernel_cache->index[docnum])));
+}
+
+long kernel_cache_touch(KERNEL_CACHE *kernel_cache, long int docnum)
+     /* Update lru time to avoid removal from cache. */
+{
+  if(kernel_cache && kernel_cache->index[docnum] != -1) {
+    kernel_cache->lru[kernel_cache->index[docnum]]=kernel_cache->time; /* lru */
+    return(1);
+  }
+  return(0);
+}
+  
+long kernel_cache_check(KERNEL_CACHE *kernel_cache, long int docnum)
+     /* Is that row cached? */
+{
+  return(kernel_cache->index[docnum] != -1);
+}
+  
+long kernel_cache_space_available(KERNEL_CACHE *kernel_cache)
+     /* Is there room for one more row? */
+{
+  return(kernel_cache->elems < kernel_cache->max_elems);
+}
+  
+/************************** Compute estimates ******************************/
+
+void compute_xa_estimates(MODEL *model, long int *label, 
+			  long int *unlabeled, long int totdoc, 
+			  DOC **docs, double *lin, double *a, 
+			  KERNEL_PARM *kernel_parm, 
+			  LEARN_PARM *learn_parm, double *error, 
+			  double *recall, double *precision) 
+     /* Computes xa-estimate of error rate, recall, and precision. See
+        T. Joachims, Estimating the Generalization Performance of an SVM
+        Efficiently, IMCL, 2000. */
+{
+  long i,looerror,looposerror,loonegerror;
+  long totex,totposex;
+  double xi,r_delta,r_delta_sq,sim=0;
+  long *sv2dnum=NULL,*sv=NULL,svnum;
+
+  r_delta=estimate_r_delta(docs,totdoc,kernel_parm); 
+  r_delta_sq=r_delta*r_delta;
+
+  looerror=0;
+  looposerror=0;
+  loonegerror=0;
+  totex=0;
+  totposex=0;
+  svnum=0;
+
+  if(learn_parm->xa_depth > 0) {
+    sv = (long *)my_malloc(sizeof(long)*(totdoc+11));
+    for(i=0;i<totdoc;i++) 
+      sv[i]=0;
+    for(i=1;i<model->sv_num;i++) 
+      if(a[model->supvec[i]->docnum] 
+	 < (learn_parm->svm_cost[model->supvec[i]->docnum]
+	    -learn_parm->epsilon_a)) {
+	sv[model->supvec[i]->docnum]=1;
+	svnum++;
+      }
+    sv2dnum = (long *)my_malloc(sizeof(long)*(totdoc+11));
+    clear_index(sv2dnum);
+    compute_index(sv,totdoc,sv2dnum);
+  }
+
+  for(i=0;i<totdoc;i++) {
+    if(unlabeled[i]) {
+      /* ignore it */
+    }
+    else {
+      xi=1.0-((lin[i]-model->b)*(double)label[i]);
+      if(xi<0) xi=0;
+      if(label[i]>0) {
+	totposex++;
+      }
+      if((learn_parm->rho*a[i]*r_delta_sq+xi) >= 1.0) {
+	if(learn_parm->xa_depth > 0) {  /* makes assumptions */
+	  sim=distribute_alpha_t_greedily(sv2dnum,svnum,docs,a,i,label,
+					  kernel_parm,learn_parm,
+		            (double)((1.0-xi-a[i]*r_delta_sq)/(2.0*a[i])));
+	}
+	if((learn_parm->xa_depth == 0) || 
+	   ((a[i]*kernel(kernel_parm,docs[i],docs[i])+a[i]*2.0*sim+xi) >= 1.0)) { 
+	  looerror++;
+	  if(label[i]>0) {
+	    looposerror++;
+	  }
+	  else {
+	    loonegerror++;
+	  }
+	}
+      }
+      totex++;
+    }
+  }
+
+  (*error)=((double)looerror/(double)totex)*100.0;
+  (*recall)=(1.0-(double)looposerror/(double)totposex)*100.0;
+  (*precision)=(((double)totposex-(double)looposerror)
+    /((double)totposex-(double)looposerror+(double)loonegerror))*100.0;
+
+  free(sv);
+  free(sv2dnum);
+}
+
+
+double distribute_alpha_t_greedily(long int *sv2dnum, long int svnum, 
+				   DOC **docs, double *a, 
+				   long int docnum, 
+				   long int *label, 
+				   KERNEL_PARM *kernel_parm, 
+				   LEARN_PARM *learn_parm, double thresh)
+     /* Experimental Code improving plain XiAlpha Estimates by
+	computing a better bound using a greedy optimzation strategy. */
+{
+  long best_depth=0;
+  long i,j,k,d,skip,allskip;
+  double best,best_val[101],val,init_val_sq,init_val_lin;
+  long best_ex[101];
+  CFLOAT *cache,*trow;
+
+  cache=(CFLOAT *)my_malloc(sizeof(CFLOAT)*learn_parm->xa_depth*svnum);
+  trow = (CFLOAT *)my_malloc(sizeof(CFLOAT)*svnum);
+
+  for(k=0;k<svnum;k++) {
+    trow[k]=kernel(kernel_parm,docs[docnum],docs[sv2dnum[k]]);
+  }
+
+  init_val_sq=0;
+  init_val_lin=0;
+  best=0;
+
+  for(d=0;d<learn_parm->xa_depth;d++) {
+    allskip=1;
+    if(d>=1) {
+      init_val_sq+=cache[best_ex[d-1]+svnum*(d-1)]; 
+      for(k=0;k<d-1;k++) {
+        init_val_sq+=2.0*cache[best_ex[k]+svnum*(d-1)]; 
+      }
+      init_val_lin+=trow[best_ex[d-1]]; 
+    }
+    for(i=0;i<svnum;i++) {
+      skip=0;
+      if(sv2dnum[i] == docnum) skip=1;
+      for(j=0;j<d;j++) {
+	if(i == best_ex[j]) skip=1;
+      }
+
+      if(!skip) {
+	val=init_val_sq;
+	if(kernel_parm->kernel_type == LINEAR) 
+	  val+=docs[sv2dnum[i]]->fvec->twonorm_sq;
+	else
+	  val+=kernel(kernel_parm,docs[sv2dnum[i]],docs[sv2dnum[i]]);
+	for(j=0;j<d;j++) {
+	  val+=2.0*cache[i+j*svnum];
+	}
+	val*=(1.0/(2.0*(d+1.0)*(d+1.0)));
+	val-=((init_val_lin+trow[i])/(d+1.0));
+
+	if(allskip || (val < best_val[d])) {
+	  best_val[d]=val;
+	  best_ex[d]=i;
+	}
+	allskip=0;
+	if(val < thresh) {
+	  i=svnum;
+	  /*	  printf("EARLY"); */
+	}
+      }
+    }
+    if(!allskip) {
+      for(k=0;k<svnum;k++) {
+	  cache[d*svnum+k]=kernel(kernel_parm,
+				  docs[sv2dnum[best_ex[d]]],
+				  docs[sv2dnum[k]]);
+      }
+    }
+    if((!allskip) && ((best_val[d] < best) || (d == 0))) {
+      best=best_val[d];
+      best_depth=d;
+    }
+    if(allskip || (best < thresh)) {
+      d=learn_parm->xa_depth;
+    }
+  }    
+
+  free(cache);
+  free(trow);
+
+  /*  printf("Distribute[%ld](%ld)=%f, ",docnum,best_depth,best); */
+  return(best);
+}
+
+
+void estimate_transduction_quality(MODEL *model, long int *label, 
+				   long int *unlabeled, 
+				   long int totdoc, DOC **docs, double *lin) 
+     /* Loo-bound based on observation that loo-errors must have an
+	equal distribution in both training and test examples, given
+	that the test examples are classified correctly. Compare
+	chapter "Constraints on the Transductive Hyperplane" in my
+	Dissertation. */
+{
+  long i,j,l=0,ulab=0,lab=0,labpos=0,labneg=0,ulabpos=0,ulabneg=0,totulab=0;
+  double totlab=0,totlabpos=0,totlabneg=0,labsum=0,ulabsum=0;
+  double r_delta,r_delta_sq,xi,xisum=0,asum=0;
+
+  r_delta=estimate_r_delta(docs,totdoc,&(model->kernel_parm)); 
+  r_delta_sq=r_delta*r_delta;
+
+  for(j=0;j<totdoc;j++) {
+    if(unlabeled[j]) {
+      totulab++;
+    }
+    else {
+      totlab++;
+      if(label[j] > 0) 
+	totlabpos++;
+      else 
+	totlabneg++;
+    }
+  }
+  for(j=1;j<model->sv_num;j++) {
+    i=model->supvec[j]->docnum;
+    xi=1.0-((lin[i]-model->b)*(double)label[i]);
+    if(xi<0) xi=0;
+
+    xisum+=xi;
+    asum+=fabs(model->alpha[j]);
+    if(unlabeled[i]) {
+      ulabsum+=(fabs(model->alpha[j])*r_delta_sq+xi);
+    }
+    else {
+      labsum+=(fabs(model->alpha[j])*r_delta_sq+xi);
+    }
+    if((fabs(model->alpha[j])*r_delta_sq+xi) >= 1) { 
+      l++;
+      if(unlabeled[model->supvec[j]->docnum]) {
+	ulab++;
+	if(model->alpha[j] > 0) 
+	  ulabpos++;
+	else 
+	  ulabneg++;
+      }
+      else {
+	lab++;
+	if(model->alpha[j] > 0) 
+	  labpos++;
+	else 
+	  labneg++;
+      }
+    }
+  }
+  printf("xacrit>=1: labeledpos=%.5f labeledneg=%.5f default=%.5f\n",(double)labpos/(double)totlab*100.0,(double)labneg/(double)totlab*100.0,(double)totlabpos/(double)(totlab)*100.0);
+  printf("xacrit>=1: unlabelpos=%.5f unlabelneg=%.5f\n",(double)ulabpos/(double)totulab*100.0,(double)ulabneg/(double)totulab*100.0);
+  printf("xacrit>=1: labeled=%.5f unlabled=%.5f all=%.5f\n",(double)lab/(double)totlab*100.0,(double)ulab/(double)totulab*100.0,(double)l/(double)(totdoc)*100.0);
+  printf("xacritsum: labeled=%.5f unlabled=%.5f all=%.5f\n",(double)labsum/(double)totlab*100.0,(double)ulabsum/(double)totulab*100.0,(double)(labsum+ulabsum)/(double)(totdoc)*100.0);
+  printf("r_delta_sq=%.5f xisum=%.5f asum=%.5f\n",r_delta_sq,xisum,asum);
+}
+
+double estimate_margin_vcdim(MODEL *model, double w, double R, 
+			     KERNEL_PARM *kernel_parm) 
+     /* optional: length of model vector in feature space */
+     /* optional: radius of ball containing the data */
+{
+  double h;
+
+  /* follows chapter 5.6.4 in [Vapnik/95] */
+
+  if(w<0) {
+    w=model_length_s(model,kernel_parm);
+  }
+  if(R<0) {
+    R=estimate_sphere(model,kernel_parm); 
+  }
+  h = w*w * R*R +1; 
+  return(h);
+}
+
+double estimate_sphere(MODEL *model, KERNEL_PARM *kernel_parm) 
+                          /* Approximates the radius of the ball containing */
+                          /* the support vectors by bounding it with the */
+{                         /* length of the longest support vector. This is */
+  register long j;        /* pretty good for text categorization, since all */
+  double xlen,maxxlen=0;  /* documents have feature vectors of length 1. It */
+  DOC *nulldoc;           /* assumes that the center of the ball is at the */
+  WORD nullword;          /* origin of the space. */
+
+  nullword.wnum=0;
+  nulldoc=create_example(-2,0,0,0.0,create_svector(&nullword,"",1.0)); 
+
+  for(j=1;j<model->sv_num;j++) {
+    xlen=sqrt(kernel(kernel_parm,model->supvec[j],model->supvec[j])
+	      -2*kernel(kernel_parm,model->supvec[j],nulldoc)
+	      +kernel(kernel_parm,nulldoc,nulldoc));
+    if(xlen>maxxlen) {
+      maxxlen=xlen;
+    }
+  }
+
+  free_example(nulldoc,1);
+  return(maxxlen);
+}
+
+double estimate_r_delta(DOC **docs, long int totdoc, KERNEL_PARM *kernel_parm)
+{
+  long i;
+  double maxxlen,xlen;
+  DOC *nulldoc;           /* assumes that the center of the ball is at the */
+  WORD nullword;          /* origin of the space. */
+
+  nullword.wnum=0;
+  nulldoc=create_example(-2,0,0,0.0,create_svector(&nullword,"",1.0)); 
+
+  maxxlen=0;
+  for(i=0;i<totdoc;i++) {
+    xlen=sqrt(kernel(kernel_parm,docs[i],docs[i])
+	      -2*kernel(kernel_parm,docs[i],nulldoc)
+	      +kernel(kernel_parm,nulldoc,nulldoc));
+    if(xlen>maxxlen) {
+      maxxlen=xlen;
+    }
+  }
+
+  free_example(nulldoc,1);
+  return(maxxlen);
+}
+
+double estimate_r_delta_average(DOC **docs, long int totdoc, 
+				KERNEL_PARM *kernel_parm)
+{
+  long i;
+  double avgxlen;
+  DOC *nulldoc;           /* assumes that the center of the ball is at the */
+  WORD nullword;          /* origin of the space. */
+
+  nullword.wnum=0;
+  nulldoc=create_example(-2,0,0,0.0,create_svector(&nullword,"",1.0)); 
+
+  avgxlen=0;
+  for(i=0;i<totdoc;i++) {
+    avgxlen+=sqrt(kernel(kernel_parm,docs[i],docs[i])
+		  -2*kernel(kernel_parm,docs[i],nulldoc)
+		  +kernel(kernel_parm,nulldoc,nulldoc));
+  }
+
+  free_example(nulldoc,1);
+  return(avgxlen/totdoc);
+}
+
+double length_of_longest_document_vector(DOC **docs, long int totdoc, 
+					 KERNEL_PARM *kernel_parm)
+{
+  long i;
+  double maxxlen,xlen;
+
+  maxxlen=0;
+  for(i=0;i<totdoc;i++) {
+    xlen=sqrt(kernel(kernel_parm,docs[i],docs[i]));
+    if(xlen>maxxlen) {
+      maxxlen=xlen;
+    }
+  }
+
+  return(maxxlen);
+}
+
+/****************************** IO-handling **********************************/
+
+void write_prediction(char *predfile, MODEL *model, double *lin, 
+		      double *a, long int *unlabeled, 
+		      long int *label, long int totdoc, 
+		      LEARN_PARM *learn_parm)
+{
+  FILE *predfl;
+  long i;
+  double dist,a_max;
+
+  if(verbosity>=1) {
+    printf("Writing prediction file..."); fflush(stdout);
+  }
+  if ((predfl = fopen (predfile, "w")) == NULL)
+  { perror (predfile); exit (1); }
+  a_max=learn_parm->epsilon_a;
+  for(i=0;i<totdoc;i++) {
+    if((unlabeled[i]) && (a[i]>a_max)) {
+      a_max=a[i];
+    }
+  }
+  for(i=0;i<totdoc;i++) {
+    if(unlabeled[i]) {
+      if((a[i]>(learn_parm->epsilon_a))) {
+	dist=(double)label[i]*(1.0-learn_parm->epsilon_crit-a[i]/(a_max*2.0));
+      }
+      else {
+	dist=(lin[i]-model->b);
+      }
+      if(dist>0) {
+	fprintf(predfl,"%.8g:+1 %.8g:-1\n",dist,-dist);
+      }
+      else {
+	fprintf(predfl,"%.8g:-1 %.8g:+1\n",-dist,dist);
+      }
+    }
+  }
+  fclose(predfl);
+  if(verbosity>=1) {
+    printf("done\n");
+  }
+}
+
+void write_alphas(char *alphafile, double *a, 
+		  long int *label, long int totdoc)
+{
+  FILE *alphafl;
+  long i;
+
+  if(verbosity>=1) {
+    printf("Writing alpha file..."); fflush(stdout);
+  }
+  if ((alphafl = fopen (alphafile, "w")) == NULL)
+  { perror (alphafile); exit (1); }
+  for(i=0;i<totdoc;i++) {
+    fprintf(alphafl,"%.18g\n",a[i]*(double)label[i]);
+  }
+  fclose(alphafl);
+  if(verbosity>=1) {
+    printf("done\n");
+  }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/src/svm_learn.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,169 @@
+/***********************************************************************/
+/*                                                                     */
+/*   svm_learn.h                                                       */
+/*                                                                     */
+/*   Declarations for learning module of Support Vector Machine.       */
+/*                                                                     */
+/*   Author: Thorsten Joachims                                         */
+/*   Date: 02.07.02                                                    */
+/*                                                                     */
+/*   Copyright (c) 2002  Thorsten Joachims - All rights reserved       */
+/*                                                                     */
+/*   This software is available for non-commercial use only. It must   */
+/*   not be modified and distributed without prior permission of the   */
+/*   author. The author is not responsible for implications from the   */
+/*   use of this software.                                             */
+/*                                                                     */
+/***********************************************************************/
+
+#ifndef SVM_LEARN
+#define SVM_LEARN
+
+void   svm_learn_classification(DOC **, double *, long, long, LEARN_PARM *, 
+				KERNEL_PARM *, KERNEL_CACHE *, MODEL *,
+				double *);
+void   svm_learn_regression(DOC **, double *, long, long, LEARN_PARM *, 
+			    KERNEL_PARM *, KERNEL_CACHE **, MODEL *);
+void   svm_learn_ranking(DOC **, double *, long, long, LEARN_PARM *, 
+			 KERNEL_PARM *, KERNEL_CACHE **, MODEL *);
+void   svm_learn_optimization(DOC **, double *, long, long, LEARN_PARM *, 
+			      KERNEL_PARM *, KERNEL_CACHE *, MODEL *,
+			      double *);
+long   optimize_to_convergence(DOC **, long *, long, long, LEARN_PARM *,
+			       KERNEL_PARM *, KERNEL_CACHE *, SHRINK_STATE *,
+			       MODEL *, long *, long *, double *,
+			       double *, double *,
+			       TIMING *, double *, long, long);
+long   optimize_to_convergence_sharedslack(DOC **, long *, long, long, 
+			       LEARN_PARM *,
+			       KERNEL_PARM *, KERNEL_CACHE *, SHRINK_STATE *,
+			       MODEL *, double *, double *, double *,
+			       TIMING *, double *);
+double compute_objective_function(double *, double *, double *, double,
+				  long *, long *);
+void   clear_index(long *);
+void   add_to_index(long *, long);
+long   compute_index(long *,long, long *);
+void   optimize_svm(DOC **, long *, long *, long *, double, long *, long *, 
+		    MODEL *, 
+		    long, long *, long, double *, double *, double *, 
+		    LEARN_PARM *, CFLOAT *, KERNEL_PARM *, QP *, double *);
+void   compute_matrices_for_optimization(DOC **, long *, long *, long *, double,
+					 long *,
+					 long *, long *, MODEL *, double *, 
+					 double *, double *, long, long, LEARN_PARM *, 
+					 CFLOAT *, KERNEL_PARM *, QP *);
+long   calculate_svm_model(DOC **, long *, long *, double *, double *, 
+			   double *, double *, LEARN_PARM *, long *,
+			   long *, MODEL *);
+long   check_optimality(MODEL *, long *, long *, double *, double *,
+			double *, long, 
+			LEARN_PARM *,double *, double, long *, long *, long *,
+			long *, long, KERNEL_PARM *);
+long   check_optimality_sharedslack(DOC **docs, MODEL *model, long int *label,
+		      double *a, double *lin, double *c, double *slack,
+		      double *alphaslack, long int totdoc, 
+		      LEARN_PARM *learn_parm, double *maxdiff, 
+		      double epsilon_crit_org, long int *misclassified, 
+		      long int *active2dnum,
+		      long int *last_suboptimal_at, 
+		      long int iteration, KERNEL_PARM *kernel_parm);
+void   compute_shared_slacks(DOC **docs, long int *label, double *a, 
+			     double *lin, double *c, long int *active2dnum, 
+			     LEARN_PARM *learn_parm,
+			     double *slack, double *alphaslack);
+long   identify_inconsistent(double *, long *, long *, long, LEARN_PARM *, 
+			     long *, long *);
+long   identify_misclassified(double *, long *, long *, long,
+			      MODEL *, long *, long *);
+long   identify_one_misclassified(double *, long *, long *, long,
+				  MODEL *, long *, long *);
+long   incorporate_unlabeled_examples(MODEL *, long *,long *, long *,
+				      double *, double *, long, double *,
+				      long *, long *, long, KERNEL_PARM *,
+				      LEARN_PARM *);
+void   update_linear_component(DOC **, long *, long *, double *, double *, 
+			       long *, long, long, KERNEL_PARM *, 
+			       KERNEL_CACHE *, double *,
+			       CFLOAT *, double *);
+long   select_next_qp_subproblem_grad(long *, long *, double *, 
+				      double *, double *, long,
+				      long, LEARN_PARM *, long *, long *, 
+				      long *, double *, long *, KERNEL_CACHE *,
+				      long, long *, long *);
+long   select_next_qp_subproblem_rand(long *, long *, double *, 
+				      double *, double *, long,
+				      long, LEARN_PARM *, long *, long *, 
+				      long *, double *, long *, KERNEL_CACHE *,
+				      long *, long *, long);
+long   select_next_qp_slackset(DOC **docs, long int *label, double *a, 
+			       double *lin, double *slack, double *alphaslack, 
+			       double *c, LEARN_PARM *learn_parm, 
+			       long int *active2dnum, double *maxviol);
+void   select_top_n(double *, long, long *, long);
+void   init_shrink_state(SHRINK_STATE *, long, long);
+void   shrink_state_cleanup(SHRINK_STATE *);
+long   shrink_problem(DOC **, LEARN_PARM *, SHRINK_STATE *, KERNEL_PARM *, 
+		      long *, long *, long, long, long, double *, long *);
+void   reactivate_inactive_examples(long *, long *, double *, SHRINK_STATE *,
+				    double *, double*, long, long, long, LEARN_PARM *, 
+				    long *, DOC **, KERNEL_PARM *,
+				    KERNEL_CACHE *, MODEL *, CFLOAT *, 
+				    double *, double *);
+
+/* cache kernel evalutations to improve speed */
+KERNEL_CACHE *kernel_cache_init(long, long);
+void   kernel_cache_cleanup(KERNEL_CACHE *);
+void   get_kernel_row(KERNEL_CACHE *,DOC **, long, long, long *, CFLOAT *, 
+		      KERNEL_PARM *);
+void   cache_kernel_row(KERNEL_CACHE *,DOC **, long, KERNEL_PARM *);
+void   cache_multiple_kernel_rows(KERNEL_CACHE *,DOC **, long *, long, 
+				  KERNEL_PARM *);
+void   kernel_cache_shrink(KERNEL_CACHE *,long, long, long *);
+void   kernel_cache_reset_lru(KERNEL_CACHE *);
+long   kernel_cache_malloc(KERNEL_CACHE *);
+void   kernel_cache_free(KERNEL_CACHE *,long);
+long   kernel_cache_free_lru(KERNEL_CACHE *);
+CFLOAT *kernel_cache_clean_and_malloc(KERNEL_CACHE *,long);
+long   kernel_cache_touch(KERNEL_CACHE *,long);
+long   kernel_cache_check(KERNEL_CACHE *,long);
+long   kernel_cache_space_available(KERNEL_CACHE *);
+
+void compute_xa_estimates(MODEL *, long *, long *, long, DOC **, 
+			  double *, double *, KERNEL_PARM *, 
+			  LEARN_PARM *, double *, double *, double *);
+double xa_estimate_error(MODEL *, long *, long *, long, DOC **, 
+			 double *, double *, KERNEL_PARM *, 
+			 LEARN_PARM *);
+double xa_estimate_recall(MODEL *, long *, long *, long, DOC **, 
+			  double *, double *, KERNEL_PARM *, 
+			  LEARN_PARM *);
+double xa_estimate_precision(MODEL *, long *, long *, long, DOC **, 
+			     double *, double *, KERNEL_PARM *, 
+			     LEARN_PARM *);
+void avg_similarity_of_sv_of_one_class(MODEL *, DOC **, double *, long *, KERNEL_PARM *, double *, double *);
+double most_similar_sv_of_same_class(MODEL *, DOC **, double *, long, long *, KERNEL_PARM *, LEARN_PARM *);
+double distribute_alpha_t_greedily(long *, long, DOC **, double *, long, long *, KERNEL_PARM *, LEARN_PARM *, double);
+double distribute_alpha_t_greedily_noindex(MODEL *, DOC **, double *, long, long *, KERNEL_PARM *, LEARN_PARM *, double); 
+void estimate_transduction_quality(MODEL *, long *, long *, long, DOC **, double *);
+double estimate_margin_vcdim(MODEL *, double, double, KERNEL_PARM *);
+double estimate_sphere(MODEL *, KERNEL_PARM *);
+double estimate_r_delta_average(DOC **, long, KERNEL_PARM *); 
+double estimate_r_delta(DOC **, long, KERNEL_PARM *); 
+double length_of_longest_document_vector(DOC **, long, KERNEL_PARM *); 
+
+void   write_model(char *, MODEL *);
+void   write_prediction(char *, MODEL *, double *, double *, long *, long *,
+			long, LEARN_PARM *);
+void   write_alphas(char *, double *, long *, long);
+
+typedef struct cache_parm_s {
+  KERNEL_CACHE *kernel_cache;
+  CFLOAT *cache;
+  DOC **docs; 
+  long m;
+  KERNEL_PARM *kernel_parm;
+  long offset,stepsize;
+} cache_parm_t;
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/src/svm_learn_main.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,391 @@
+/***********************************************************************/
+/*                                                                     */
+/*   svm_learn_main.c                                                  */
+/*                                                                     */
+/*   Command line interface to the learning module of the              */
+/*   Support Vector Machine.                                           */
+/*                                                                     */
+/*   Author: Thorsten Joachims                                         */
+/*   Date: 02.07.02                                                    */
+/*                                                                     */
+/*   Copyright (c) 2000  Thorsten Joachims - All rights reserved       */
+/*                                                                     */
+/*   This software is available for non-commercial use only. It must   */
+/*   not be modified and distributed without prior permission of the   */
+/*   author. The author is not responsible for implications from the   */
+/*   use of this software.                                             */
+/*                                                                     */
+/***********************************************************************/
+
+
+/* uncomment, if you want to use svm-learn out of C++ */
+/* extern "C" { */
+# include "svm_common.h"
+# include "svm_learn.h"
+/* } */
+
+char docfile[200];           /* file with training examples */
+char modelfile[200];         /* file for resulting classifier */
+char restartfile[200];       /* file with initial alphas */
+
+void   read_input_parameters(int, char **, char *, char *, char *, long *, 
+			     LEARN_PARM *, KERNEL_PARM *);
+void   wait_any_key();
+void   print_help();
+
+
+
+int main (int argc, char* argv[])
+{  
+  DOC **docs;  /* training examples */
+  long totwords,totdoc,i;
+  double *target;
+  double *alpha_in=NULL;
+  KERNEL_CACHE *kernel_cache;
+  LEARN_PARM learn_parm;
+  KERNEL_PARM kernel_parm;
+  MODEL *model=(MODEL *)my_malloc(sizeof(MODEL));
+
+  read_input_parameters(argc,argv,docfile,modelfile,restartfile,&verbosity,
+			&learn_parm,&kernel_parm);
+  read_documents(docfile,&docs,&target,&totwords,&totdoc);
+  if(restartfile[0]) alpha_in=read_alphas(restartfile,totdoc);
+
+  if(kernel_parm.kernel_type == LINEAR) { /* don't need the cache */
+    kernel_cache=NULL;
+  }
+  else {
+    /* Always get a new kernel cache. It is not possible to use the
+       same cache for two different training runs */
+    kernel_cache=kernel_cache_init(totdoc,learn_parm.kernel_cache_size);
+  }
+
+  if(learn_parm.type == CLASSIFICATION) {
+    svm_learn_classification(docs,target,totdoc,totwords,&learn_parm,
+			     &kernel_parm,kernel_cache,model,alpha_in);
+  }
+  else if(learn_parm.type == REGRESSION) {
+    svm_learn_regression(docs,target,totdoc,totwords,&learn_parm,
+			 &kernel_parm,&kernel_cache,model);
+  }
+  else if(learn_parm.type == RANKING) {
+    svm_learn_ranking(docs,target,totdoc,totwords,&learn_parm,
+		      &kernel_parm,&kernel_cache,model);
+  }
+  else if(learn_parm.type == OPTIMIZATION) {
+    svm_learn_optimization(docs,target,totdoc,totwords,&learn_parm,
+			   &kernel_parm,kernel_cache,model,alpha_in);
+  }
+
+  if(kernel_cache) {
+    /* Free the memory used for the cache. */
+    kernel_cache_cleanup(kernel_cache);
+  }
+
+  /* Warning: The model contains references to the original data 'docs'.
+     If you want to free the original data, and only keep the model, you 
+     have to make a deep copy of 'model'. */
+  /* deep_copy_of_model=copy_model(model); */
+  write_model(modelfile,model);
+
+  free(alpha_in);
+  free_model(model,0);
+  for(i=0;i<totdoc;i++) 
+    free_example(docs[i],1);
+  free(docs);
+  free(target);
+
+  return(0);
+}
+
+/*---------------------------------------------------------------------------*/
+
+void read_input_parameters(int argc,char *argv[],char *docfile,char *modelfile,
+			   char *restartfile,long *verbosity,
+			   LEARN_PARM *learn_parm,KERNEL_PARM *kernel_parm)
+{
+  long i;
+  char type[100];
+  
+  /* set default */
+  strcpy (modelfile, "svm_model");
+  strcpy (learn_parm->predfile, "trans_predictions");
+  strcpy (learn_parm->alphafile, "");
+  strcpy (restartfile, "");
+  (*verbosity)=1;
+  learn_parm->biased_hyperplane=1;
+  learn_parm->sharedslack=0;
+  learn_parm->remove_inconsistent=0;
+  learn_parm->skip_final_opt_check=0;
+  learn_parm->svm_maxqpsize=10;
+  learn_parm->svm_newvarsinqp=0;
+  learn_parm->svm_iter_to_shrink=-9999;
+  learn_parm->maxiter=100000;
+  learn_parm->kernel_cache_size=40;
+  learn_parm->svm_c=0.0;
+  learn_parm->eps=0.1;
+  learn_parm->transduction_posratio=-1.0;
+  learn_parm->svm_costratio=1.0;
+  learn_parm->svm_costratio_unlab=1.0;
+  learn_parm->svm_unlabbound=1E-5;
+  learn_parm->epsilon_crit=0.001;
+  learn_parm->epsilon_a=1E-15;
+  learn_parm->compute_loo=0;
+  learn_parm->rho=1.0;
+  learn_parm->xa_depth=0;
+  kernel_parm->kernel_type=0;
+  kernel_parm->poly_degree=3;
+  kernel_parm->rbf_gamma=1.0;
+  kernel_parm->coef_lin=1;
+  kernel_parm->coef_const=1;
+  strcpy(kernel_parm->custom,"empty");
+  strcpy(type,"c");
+
+  for(i=1;(i<argc) && ((argv[i])[0] == '-');i++) {
+    switch ((argv[i])[1]) 
+      { 
+      case '?': print_help(); exit(0);
+      case 'z': i++; strcpy(type,argv[i]); break;
+      case 'v': i++; (*verbosity)=atol(argv[i]); break;
+      case 'b': i++; learn_parm->biased_hyperplane=atol(argv[i]); break;
+      case 'i': i++; learn_parm->remove_inconsistent=atol(argv[i]); break;
+      case 'f': i++; learn_parm->skip_final_opt_check=!atol(argv[i]); break;
+      case 'q': i++; learn_parm->svm_maxqpsize=atol(argv[i]); break;
+      case 'n': i++; learn_parm->svm_newvarsinqp=atol(argv[i]); break;
+      case '#': i++; learn_parm->maxiter=atol(argv[i]); break;
+      case 'h': i++; learn_parm->svm_iter_to_shrink=atol(argv[i]); break;
+      case 'm': i++; learn_parm->kernel_cache_size=atol(argv[i]); break;
+      case 'c': i++; learn_parm->svm_c=atof(argv[i]); break;
+      case 'w': i++; learn_parm->eps=atof(argv[i]); break;
+      case 'p': i++; learn_parm->transduction_posratio=atof(argv[i]); break;
+      case 'j': i++; learn_parm->svm_costratio=atof(argv[i]); break;
+      case 'e': i++; learn_parm->epsilon_crit=atof(argv[i]); break;
+      case 'o': i++; learn_parm->rho=atof(argv[i]); break;
+      case 'k': i++; learn_parm->xa_depth=atol(argv[i]); break;
+      case 'x': i++; learn_parm->compute_loo=atol(argv[i]); break;
+      case 't': i++; kernel_parm->kernel_type=atol(argv[i]); break;
+      case 'd': i++; kernel_parm->poly_degree=atol(argv[i]); break;
+      case 'g': i++; kernel_parm->rbf_gamma=atof(argv[i]); break;
+      case 's': i++; kernel_parm->coef_lin=atof(argv[i]); break;
+      case 'r': i++; kernel_parm->coef_const=atof(argv[i]); break;
+      case 'u': i++; strcpy(kernel_parm->custom,argv[i]); break;
+      case 'l': i++; strcpy(learn_parm->predfile,argv[i]); break;
+      case 'a': i++; strcpy(learn_parm->alphafile,argv[i]); break;
+      case 'y': i++; strcpy(restartfile,argv[i]); break;
+      default: printf("\nUnrecognized option %s!\n\n",argv[i]);
+	       print_help();
+	       exit(0);
+      }
+  }
+  if(i>=argc) {
+    printf("\nNot enough input parameters!\n\n");
+    wait_any_key();
+    print_help();
+    exit(0);
+  }
+  strcpy (docfile, argv[i]);
+  if((i+1)<argc) {
+    strcpy (modelfile, argv[i+1]);
+  }
+  if(learn_parm->svm_iter_to_shrink == -9999) {
+    if(kernel_parm->kernel_type == LINEAR) 
+      learn_parm->svm_iter_to_shrink=2;
+    else
+      learn_parm->svm_iter_to_shrink=100;
+  }
+  if(strcmp(type,"c")==0) {
+    learn_parm->type=CLASSIFICATION;
+  }
+  else if(strcmp(type,"r")==0) {
+    learn_parm->type=REGRESSION;
+  }
+  else if(strcmp(type,"p")==0) {
+    learn_parm->type=RANKING;
+  }
+  else if(strcmp(type,"o")==0) {
+    learn_parm->type=OPTIMIZATION;
+  }
+  else if(strcmp(type,"s")==0) {
+    learn_parm->type=OPTIMIZATION;
+    learn_parm->sharedslack=1;
+  }
+  else {
+    printf("\nUnknown type '%s': Valid types are 'c' (classification), 'r' regession, and 'p' preference ranking.\n",type);
+    wait_any_key();
+    print_help();
+    exit(0);
+  }    
+  if((learn_parm->skip_final_opt_check) 
+     && (kernel_parm->kernel_type == LINEAR)) {
+    printf("\nIt does not make sense to skip the final optimality check for linear kernels.\n\n");
+    learn_parm->skip_final_opt_check=0;
+  }    
+  if((learn_parm->skip_final_opt_check) 
+     && (learn_parm->remove_inconsistent)) {
+    printf("\nIt is necessary to do the final optimality check when removing inconsistent \nexamples.\n");
+    wait_any_key();
+    print_help();
+    exit(0);
+  }    
+  if((learn_parm->svm_maxqpsize<2)) {
+    printf("\nMaximum size of QP-subproblems not in valid range: %ld [2..]\n",learn_parm->svm_maxqpsize); 
+    wait_any_key();
+    print_help();
+    exit(0);
+  }
+  if((learn_parm->svm_maxqpsize<learn_parm->svm_newvarsinqp)) {
+    printf("\nMaximum size of QP-subproblems [%ld] must be larger than the number of\n",learn_parm->svm_maxqpsize); 
+    printf("new variables [%ld] entering the working set in each iteration.\n",learn_parm->svm_newvarsinqp); 
+    wait_any_key();
+    print_help();
+    exit(0);
+  }
+  if(learn_parm->svm_iter_to_shrink<1) {
+    printf("\nMaximum number of iterations for shrinking not in valid range: %ld [1,..]\n",learn_parm->svm_iter_to_shrink);
+    wait_any_key();
+    print_help();
+    exit(0);
+  }
+  if(learn_parm->svm_c<0) {
+    printf("\nThe C parameter must be greater than zero!\n\n");
+    wait_any_key();
+    print_help();
+    exit(0);
+  }
+  if(learn_parm->transduction_posratio>1) {
+    printf("\nThe fraction of unlabeled examples to classify as positives must\n");
+    printf("be less than 1.0 !!!\n\n");
+    wait_any_key();
+    print_help();
+    exit(0);
+  }
+  if(learn_parm->svm_costratio<=0) {
+    printf("\nThe COSTRATIO parameter must be greater than zero!\n\n");
+    wait_any_key();
+    print_help();
+    exit(0);
+  }
+  if(learn_parm->epsilon_crit<=0) {
+    printf("\nThe epsilon parameter must be greater than zero!\n\n");
+    wait_any_key();
+    print_help();
+    exit(0);
+  }
+  if(learn_parm->rho<0) {
+    printf("\nThe parameter rho for xi/alpha-estimates and leave-one-out pruning must\n");
+    printf("be greater than zero (typically 1.0 or 2.0, see T. Joachims, Estimating the\n");
+    printf("Generalization Performance of an SVM Efficiently, ICML, 2000.)!\n\n");
+    wait_any_key();
+    print_help();
+    exit(0);
+  }
+  if((learn_parm->xa_depth<0) || (learn_parm->xa_depth>100)) {
+    printf("\nThe parameter depth for ext. xi/alpha-estimates must be in [0..100] (zero\n");
+    printf("for switching to the conventional xa/estimates described in T. Joachims,\n");
+    printf("Estimating the Generalization Performance of an SVM Efficiently, ICML, 2000.)\n");
+    wait_any_key();
+    print_help();
+    exit(0);
+  }
+}
+
+void wait_any_key()
+{
+  printf("\n(more)\n");
+  (void)getc(stdin);
+}
+
+void print_help()
+{
+  printf("\nSVM-light %s: Support Vector Machine, learning module     %s\n",VERSION,VERSION_DATE);
+  copyright_notice();
+  printf("   usage: svm_learn [options] example_file model_file\n\n");
+  printf("Arguments:\n");
+  printf("         example_file-> file with training data\n");
+  printf("         model_file  -> file to store learned decision rule in\n");
+
+  printf("General options:\n");
+  printf("         -?          -> this help\n");
+  printf("         -v [0..3]   -> verbosity level (default 1)\n");
+  printf("Learning options:\n");
+  printf("         -z {c,r,p}  -> select between classification (c), regression (r),\n");
+  printf("                        and preference ranking (p) (default classification)\n");
+  printf("         -c float    -> C: trade-off between training error\n");
+  printf("                        and margin (default [avg. x*x]^-1)\n");
+  printf("         -w [0..]    -> epsilon width of tube for regression\n");
+  printf("                        (default 0.1)\n");
+  printf("         -j float    -> Cost: cost-factor, by which training errors on\n");
+  printf("                        positive examples outweight errors on negative\n");
+  printf("                        examples (default 1) (see [4])\n");
+  printf("         -b [0,1]    -> use biased hyperplane (i.e. x*w+b>0) instead\n");
+  printf("                        of unbiased hyperplane (i.e. x*w>0) (default 1)\n");
+  printf("         -i [0,1]    -> remove inconsistent training examples\n");
+  printf("                        and retrain (default 0)\n");
+  printf("Performance estimation options:\n");
+  printf("         -x [0,1]    -> compute leave-one-out estimates (default 0)\n");
+  printf("                        (see [5])\n");
+  printf("         -o ]0..2]   -> value of rho for XiAlpha-estimator and for pruning\n");
+  printf("                        leave-one-out computation (default 1.0) (see [2])\n");
+  printf("         -k [0..100] -> search depth for extended XiAlpha-estimator \n");
+  printf("                        (default 0)\n");
+  printf("Transduction options (see [3]):\n");
+  printf("         -p [0..1]   -> fraction of unlabeled examples to be classified\n");
+  printf("                        into the positive class (default is the ratio of\n");
+  printf("                        positive and negative examples in the training data)\n");
+  printf("Kernel options:\n");
+  printf("         -t int      -> type of kernel function:\n");
+  printf("                        0: linear (default)\n");
+  printf("                        1: polynomial (s a*b+c)^d\n");
+  printf("                        2: radial basis function exp(-gamma ||a-b||^2)\n");
+  printf("                        3: sigmoid tanh(s a*b + c)\n");
+  printf("                        4: user defined kernel from kernel.h\n");
+  printf("         -d int      -> parameter d in polynomial kernel\n");
+  printf("         -g float    -> parameter gamma in rbf kernel\n");
+  printf("         -s float    -> parameter s in sigmoid/poly kernel\n");
+  printf("         -r float    -> parameter c in sigmoid/poly kernel\n");
+  printf("         -u string   -> parameter of user defined kernel\n");
+  printf("Optimization options (see [1]):\n");
+  printf("         -q [2..]    -> maximum size of QP-subproblems (default 10)\n");
+  printf("         -n [2..q]   -> number of new variables entering the working set\n");
+  printf("                        in each iteration (default n = q). Set n<q to prevent\n");
+  printf("                        zig-zagging.\n");
+  printf("         -m [5..]    -> size of cache for kernel evaluations in MB (default 40)\n");
+  printf("                        The larger the faster...\n");
+  printf("         -e float    -> eps: Allow that error for termination criterion\n");
+  printf("                        [y [w*x+b] - 1] >= eps (default 0.001)\n");
+  printf("         -y [0,1]    -> restart the optimization from alpha values in file\n");
+  printf("                        specified by -a option. (default 0)\n");
+  printf("         -h [5..]    -> number of iterations a variable needs to be\n"); 
+  printf("                        optimal before considered for shrinking (default 100)\n");
+  printf("         -f [0,1]    -> do final optimality check for variables removed\n");
+  printf("                        by shrinking. Although this test is usually \n");
+  printf("                        positive, there is no guarantee that the optimum\n");
+  printf("                        was found if the test is omitted. (default 1)\n");
+  printf("         -y string   -> if option is given, reads alphas from file with given\n");
+  printf("                        and uses them as starting point. (default 'disabled')\n");
+  printf("         -# int      -> terminate optimization, if no progress after this\n");
+  printf("                        number of iterations. (default 100000)\n");
+  printf("Output options:\n");
+  printf("         -l string   -> file to write predicted labels of unlabeled\n");
+  printf("                        examples into after transductive learning\n");
+  printf("         -a string   -> write all alphas to this file after learning\n");
+  printf("                        (in the same order as in the training set)\n");
+  wait_any_key();
+  printf("\nMore details in:\n");
+  printf("[1] T. Joachims, Making Large-Scale SVM Learning Practical. Advances in\n");
+  printf("    Kernel Methods - Support Vector Learning, B. Schölkopf and C. Burges and\n");
+  printf("    A. Smola (ed.), MIT Press, 1999.\n");
+  printf("[2] T. Joachims, Estimating the Generalization performance of an SVM\n");
+  printf("    Efficiently. International Conference on Machine Learning (ICML), 2000.\n");
+  printf("[3] T. Joachims, Transductive Inference for Text Classification using Support\n");
+  printf("    Vector Machines. International Conference on Machine Learning (ICML),\n");
+  printf("    1999.\n");
+  printf("[4] K. Morik, P. Brockhausen, and T. Joachims, Combining statistical learning\n");
+  printf("    with a knowledge-based approach - A case study in intensive care  \n");
+  printf("    monitoring. International Conference on Machine Learning (ICML), 1999.\n");
+  printf("[5] T. Joachims, Learning to Classify Text Using Support Vector\n");
+  printf("    Machines: Methods, Theory, and Algorithms. Dissertation, Kluwer,\n");
+  printf("    2002.\n\n");
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/src/svm_loqo.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,211 @@
+/***********************************************************************/
+/*                                                                     */
+/*   svm_loqo.c                                                        */
+/*                                                                     */
+/*   Interface to the PR_LOQO optimization package for SVM.            */
+/*                                                                     */
+/*   Author: Thorsten Joachims                                         */
+/*   Date: 19.07.99                                                    */
+/*                                                                     */
+/*   Copyright (c) 1999  Universitaet Dortmund - All rights reserved   */
+/*                                                                     */
+/*   This software is available for non-commercial use only. It must   */
+/*   not be modified and distributed without prior permission of the   */
+/*   author. The author is not responsible for implications from the   */
+/*   use of this software.                                             */
+/*                                                                     */
+/***********************************************************************/
+
+# include <math.h>
+# include "pr_loqo/pr_loqo.h"
+# include "svm_common.h"
+
+/* Common Block Declarations */
+
+long verbosity;
+
+/* /////////////////////////////////////////////////////////////// */
+
+# define DEF_PRECISION_LINEAR    1E-8
+# define DEF_PRECISION_NONLINEAR 1E-14
+
+double *optimize_qp();
+double *primal=0,*dual=0;
+double init_margin=0.15;
+long   init_iter=500,precision_violations=0;
+double model_b;
+double opt_precision=DEF_PRECISION_LINEAR;
+
+/* /////////////////////////////////////////////////////////////// */
+
+void *my_malloc();
+
+double *optimize_qp(qp,epsilon_crit,nx,threshold,learn_parm)
+QP *qp;
+double *epsilon_crit;
+long nx; /* Maximum number of variables in QP */
+double *threshold;
+LEARN_PARM *learn_parm;
+/* start the optimizer and return the optimal values */
+{
+  register long i,j,result;
+  double margin,obj_before,obj_after;
+  double sigdig,dist,epsilon_loqo;
+  int iter;
+ 
+  if(!primal) { /* allocate memory at first call */
+    primal=(double *)my_malloc(sizeof(double)*nx*3);
+    dual=(double *)my_malloc(sizeof(double)*(nx*2+1));
+  }
+  
+  if(verbosity>=4) { /* really verbose */
+    printf("\n\n");
+    for(i=0;i<qp->opt_n;i++) {
+      printf("%f: ",qp->opt_g0[i]);
+      for(j=0;j<qp->opt_n;j++) {
+	printf("%f ",qp->opt_g[i*qp->opt_n+j]);
+      }
+      printf(": a%ld=%.10f < %f",i,qp->opt_xinit[i],qp->opt_up[i]);
+      printf(": y=%f\n",qp->opt_ce[i]);
+    }
+    for(j=0;j<qp->opt_m;j++) {
+      printf("EQ-%ld: %f*a0",j,qp->opt_ce[j]);
+      for(i=1;i<qp->opt_n;i++) {
+	printf(" + %f*a%ld",qp->opt_ce[i],i);
+      }
+      printf(" = %f\n\n",-qp->opt_ce0[0]);
+    }
+}
+
+  obj_before=0; /* calculate objective before optimization */
+  for(i=0;i<qp->opt_n;i++) {
+    obj_before+=(qp->opt_g0[i]*qp->opt_xinit[i]);
+    obj_before+=(0.5*qp->opt_xinit[i]*qp->opt_xinit[i]*qp->opt_g[i*qp->opt_n+i]);
+    for(j=0;j<i;j++) {
+      obj_before+=(qp->opt_xinit[j]*qp->opt_xinit[i]*qp->opt_g[j*qp->opt_n+i]);
+    }
+  }
+
+  result=STILL_RUNNING;
+  qp->opt_ce0[0]*=(-1.0);
+  /* Run pr_loqo. If a run fails, try again with parameters which lead */
+  /* to a slower, but more robust setting. */
+  for(margin=init_margin,iter=init_iter;
+      (margin<=0.9999999) && (result!=OPTIMAL_SOLUTION);) {
+    sigdig=-log10(opt_precision);
+
+    result=pr_loqo((int)qp->opt_n,(int)qp->opt_m,
+		   (double *)qp->opt_g0,(double *)qp->opt_g,
+		   (double *)qp->opt_ce,(double *)qp->opt_ce0,
+		   (double *)qp->opt_low,(double *)qp->opt_up,
+		   (double *)primal,(double *)dual, 
+		   (int)(verbosity-2),
+		   (double)sigdig,(int)iter, 
+		   (double)margin,(double)(qp->opt_up[0])/4.0,(int)0);
+
+    if(isnan(dual[0])) {     /* check for choldc problem */
+      if(verbosity>=2) {
+	printf("NOTICE: Restarting PR_LOQO with more conservative parameters.\n");
+      }
+      if(init_margin<0.80) { /* become more conservative in general */
+	init_margin=(4.0*margin+1.0)/5.0;
+      }
+      margin=(margin+1.0)/2.0;
+      (opt_precision)*=10.0;   /* reduce precision */
+      if(verbosity>=2) {
+	printf("NOTICE: Reducing precision of PR_LOQO.\n");
+      }
+    }
+    else if(result!=OPTIMAL_SOLUTION) {
+      iter+=2000; 
+      init_iter+=10;
+      (opt_precision)*=10.0;   /* reduce precision */
+      if(verbosity>=2) {
+	printf("NOTICE: Reducing precision of PR_LOQO due to (%ld).\n",result);
+      }      
+    }
+  }
+
+  if(qp->opt_m)         /* Thanks to Alex Smola for this hint */
+    model_b=dual[0];
+  else
+    model_b=0;
+
+  /* Check the precision of the alphas. If results of current optimization */
+  /* violate KT-Conditions, relax the epsilon on the bounds on alphas. */
+  epsilon_loqo=1E-10;
+  for(i=0;i<qp->opt_n;i++) {
+    dist=-model_b*qp->opt_ce[i]; 
+    dist+=(qp->opt_g0[i]+1.0);
+    for(j=0;j<i;j++) {
+      dist+=(primal[j]*qp->opt_g[j*qp->opt_n+i]);
+    }
+    for(j=i;j<qp->opt_n;j++) {
+      dist+=(primal[j]*qp->opt_g[i*qp->opt_n+j]);
+    }
+    /*  printf("LOQO: a[%d]=%f, dist=%f, b=%f\n",i,primal[i],dist,dual[0]); */
+    if((primal[i]<(qp->opt_up[i]-epsilon_loqo)) && (dist < (1.0-(*epsilon_crit)))) {
+      epsilon_loqo=(qp->opt_up[i]-primal[i])*2.0;
+    }
+    else if((primal[i]>(0+epsilon_loqo)) && (dist > (1.0+(*epsilon_crit)))) {
+      epsilon_loqo=primal[i]*2.0;
+    }
+  }
+
+  for(i=0;i<qp->opt_n;i++) {  /* clip alphas to bounds */
+    if(primal[i]<=(0+epsilon_loqo)) {
+      primal[i]=0;
+    }
+    else if(primal[i]>=(qp->opt_up[i]-epsilon_loqo)) {
+      primal[i]=qp->opt_up[i];
+    }
+  }
+
+  obj_after=0;  /* calculate objective after optimization */
+  for(i=0;i<qp->opt_n;i++) {
+    obj_after+=(qp->opt_g0[i]*primal[i]);
+    obj_after+=(0.5*primal[i]*primal[i]*qp->opt_g[i*qp->opt_n+i]);
+    for(j=0;j<i;j++) {
+      obj_after+=(primal[j]*primal[i]*qp->opt_g[j*qp->opt_n+i]);
+    }
+  }
+
+  /* if optimizer returned NAN values, reset and retry with smaller */
+  /* working set. */
+  if(isnan(obj_after) || isnan(model_b)) {
+    for(i=0;i<qp->opt_n;i++) {
+      primal[i]=qp->opt_xinit[i];
+    }     
+    model_b=0;
+    if(learn_parm->svm_maxqpsize>2) {
+      learn_parm->svm_maxqpsize--;  /* decrease size of qp-subproblems */
+    }
+  }
+
+  if(obj_after >= obj_before) { /* check whether there was progress */
+    (opt_precision)/=100.0;
+    precision_violations++;
+    if(verbosity>=2) {
+      printf("NOTICE: Increasing Precision of PR_LOQO.\n");
+    }
+  }
+
+  if(precision_violations > 500) { 
+    (*epsilon_crit)*=10.0;
+    precision_violations=0;
+    if(verbosity>=1) {
+      printf("\nWARNING: Relaxing epsilon on KT-Conditions.\n");
+    }
+  }	  
+
+  (*threshold)=model_b;
+
+  if(result!=OPTIMAL_SOLUTION) {
+    printf("\nERROR: PR_LOQO did not converge. \n");
+    return(qp->opt_xinit);
+  }
+  else {
+    return(primal);
+  }
+}
+
Binary file toolboxes/SVM-light/svm_classify.exe has changed
Binary file toolboxes/SVM-light/svm_learn.exe has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/SVM-light/svm_light_faq.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,218 @@
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
+<META NAME="Generator" CONTENT="Microsoft FrontPage 6.0">
+<TITLE>svm_light_faq</TITLE>
+<META NAME="Version" CONTENT="8.0.3514">
+<META NAME="Date" CONTENT="11/26/96">
+<META NAME="Template" CONTENT="C:\Programme\Microsoft Office\Office\HTML.DOT">
+</HEAD>
+<BODY LINK="#0000ff" VLINK="#800080" BGCOLOR="#ffffff">
+
+<TABLE CELLSPACING=0 BORDER=0 CELLPADDING=5>
+<TR><TD WIDTH="14%" VALIGN="TOP">
+<H2><a TARGET="_top" HREF="http://www-ai.cs.uni-dortmund.de/"><IMG SRC="eier_graybg.gif" BORDER=0 WIDTH=100 HEIGHT=81></A></H2></TD>
+<TD WIDTH="75%" VALIGN="TOP">
+<H1 ALIGN="CENTER">SVM<I><SUP>light</SUP> &amp;</I> SVM<sup><i>struct</i></sup><I>
+</I> </H1>
+<H1 ALIGN="CENTER">FAQ</H1>
+<FONT COLOR="#000000"><P ALIGN="CENTER">Author: </FONT><a TARGET="_top" HREF="http://www.joachims.org/">Thorsten Joachims</A><FONT COLOR="#000000"> &lt;</FONT><A HREF="mailto:thorsten@joachims.org">thorsten@joachims.org</A><FONT COLOR="#000000">&gt; <BR>
+</FONT><a TARGET="_top" HREF="http://www.cornell.edu/">Cornell University</A><FONT COLOR="#000000"> <BR>
+</FONT><a TARGET="_top" HREF="http://www.cs.cornell.edu/">Department of Computer Science</A><FONT COLOR="#000000"> </P>
+<P ALIGN="CENTER">Developed at: <BR>
+</FONT><a TARGET="_top" HREF="http://www.uni-dortmund.de/">University of Dortmund</A><FONT COLOR="#000000">, </FONT><a TARGET="_top" HREF="http://www.informatik.uni-dortmund.de/">Informatik</A><FONT COLOR="#000000">, </FONT><a TARGET="_top" HREF="http://www-ai.informatik.uni-dortmund.de/">AI-Unit</A><FONT COLOR="#000000"> <BR>
+</FONT><a TARGET="_top" HREF="http://www.sfb475.uni-dortmund.de/">Collaborative Research Center on 'Complexity Reduction in Multivariate Data' (SFB475)</A><FONT COLOR="#000000"> </FONT> </P>
+<P ALIGN="CENTER"><FONT COLOR="#000000"> Date: 25. May, 2009</FONT></P></TD>
+<TD WIDTH="11%" VALIGN="TOP">
+<H2><IMG SRC="http://www.joachims.org/images/culogo_125.gif" WIDTH=80 HEIGHT=80></H2></TD>
+</TR>
+</TABLE>
+
+<H2>How do I compile on a Windows PC?</H2>
+<UL>
+	<LI>The following instructions apply to SVM<I><SUP>light</SUP></I>, SVM<sup><i>struct</i></sup>, SVM<sup><i>perf</i></sup>, SVM<sup><i>cfg</i></sup>, SVM<sup><i>multiclass</i></sup>, 
+	and SVM<sup><i>hmm</i></sup>. </LI>
+	<LI>The easiest is to install <a href="http://www.cygwin.com">CYGWIN</a> and 
+	use the gcc compiler that comes with the Cygwin distribution. Just open a 
+	cygwin command window, change to the directory that contains file &quot;Makefile&quot; and type 
+	<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; make<br>
+	at the command prompt. This creates executables that run under Cygwin.</LI>
+	<LI>If you want execuables that do not need Cygwin to run, follow the same 
+	instructions as above, but make sure that you download the MinGW package as 
+	part of Cygwin. Then use the command <br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; make 'SFLAGS=-mno-cygwin'<br>
+	to create the executables.</LI>
+	<LI>You can also use the Visual C compiler, but it will be much more of a 
+	hassle than using Cygwin. To use Visual C, you need to build the appropriate project file according to the provided <TT>"Makefile"</TT>. 
+Make sure you do not include the file &quot;svm_loqo.c&quot; in your project, unless you 
+want to use the PL_LOQO optimizer instead of the built-in optimizer.</p>
+</UL>
+
+<H2>How do I compile on a PowerMac using Code Warrior?</H2>
+
+<UL>
+<LI>This applies to SVM<I><SUP>light</SUP></I>, but should also work for SVM<sup><i>struct</i></sup>, SVM<sup><i>perf</i></sup>, SVM<sup><i>cfg</i></sup>, SVM<sup><i>multiclass</i></sup>, 
+	and SVM<sup><i>hmm</i></sup>. </LI>
+<LI>You need to modify the source code a little (as suggested by Jewgeni Starikow). Use <TT>#include "console.h"</TT> to emulate a UNIX shell. Then add <TT>argc=ccommand(&amp;argv)</TT> as the first instruction of each <TT>main()</TT>. </LI>
+<LI>CPU-timing might cause another problem. The timing routines are used to calculated the runtime of the program. If you do not need this feature, remove the body of <TT>get_runtime()</TT> in <TT>svm_common.c</TT>. Otherwise replace the body with the appropriate Mac routines from <TT>'time.h'</TT>. </LI></UL>
+<H2>How do I integrate SVM<SUP>light</SUP> into C++ code?</H2>
+
+<UL>
+<LI>Compile <TT>"svm_learn.c"</TT>, <TT>"svm_common.c"</TT>, and <TT>"svm_hideo.c"</TT> as C code.</LI>
+<LI>The C++ program you want to call <TT>svm_learn/8</TT> and <TT>classify_example/2 </TT>(or <TT>classify_example_linear/2</TT>) from needs to include the following headers:<BR>
+<FONT FACE="Courier New" SIZE=2>extern "C" {<BR>
+# include "svm_common.h"<BR>
+# include "svm_learn.h"<BR>
+} </FONT> </LI>
+<LI>Link <TT>"svm_learn.o"</TT>, <TT>"svm_common.o"</TT>, and <TT>"svm_hideo.o" </TT>to your program.</LI></UL>
+
+<h2>Is there an option for doing multi-class classification?</h2>
+<ul>
+  <li>Not in SVM<I><SUP>light</SUP></I>. If you do not use kernel, you can 
+		use <a href="svm_multiclass.html">SVM<sup><i>multiclass</i></sup></a> to 
+		do multi-class classification. Otherwise, I recommend to split the task 
+		into multiple binary classification tasks for multi-class or multi-label classification. For
+        example, you can do one-class-against-the-rest classification, or pairwise classification. Refer to Chapter 2 in [<a href="index.html#References">Joachims,
+        2002a</a>].</li>
+</ul>
+
+<h2>Is there an option for doing cross-validation?</h2>
+<ul>
+  <li>Yes, there is such an option in SVM<I><SUP>light</SUP></I>, but not in SVM<sup><i>struct</i></sup>. 
+  By setting the option &quot;-x 1&quot;, SVM<I><SUP>light</SUP></I> computes the 
+  leave-one-out estimates of the prediction error, recall, precision, and F1. By 
+  default, it also outputs the XiAlpha-Estimates of these quantities. They are 
+  strictly conservative approximations to the leave-one-out (i.e. they never 
+  underestimate the leave-one-out error). Refer to Chapter 5 in [<a href="index.html#References">Joachims,
+        2002a</a>].</li>
+</ul>
+<h2>How can I output the dual variables at the solution?</h2>
+<ul>
+  <li>Use the option -a &lt;filename&gt;. The file contains the value of the 
+  dual variables (multiplied by the label y) for each training example in the 
+  order in which the examples appeared in the training file.</li>
+</ul>
+<h2>How can I get the weight vector of the hyperplane for a linear SVM?</h2>
+<ul>
+  <li>There is a small <a href="svm2weight.pl.txt">PERL script to 
+      compute the weight vector</a> (<a href="svm2weight.py.txt">similar script in 
+	PYTHON by Ori Cohen</a>) based on the model file output by svm_learn 
+		and svm_perf_learn. 
+      Of course, it works only in the linear case and not for kernels. All the 
+      script does is compute the weighted sum of the support vectors (first
+        element in line is alpha*y, what follows is the feature vector). For 
+      further info, see the comment in the model file for its format.
+  </li>
+</ul>
+
+<h2>What is the format of the learned model file?</h2>
+<ul>
+  <li>The model files produced by svm_learn and svm_perf_learn are in ASCII and 
+  easy to read. The first few lines contain parameters. The comments in the 
+  model file are self-explanatory. The last of these is the threshold b of the 
+  learned hyperplane classifier sign(w*x - b). The following lines each contain 
+  a support vector, and the first element of the line is its coefficient (alpha_i 
+  * y_i) in the kernel expansion. The support vectors are listed in random 
+  order. Note that the term support vector has a different meaning in SVM<sup>perf</sup> 
+  compared to SVM<SUP>light</SUP>.</li>
+</ul>
+
+
+<h2>How can I implement my own Kernel?</h2>
+<ul>
+  <li>You can write your own kernel by extending the function &quot;double 
+  custom_kernel(KERNEL_PARM *kernel_parm, SVECTOR *a, SVECTOR *b)&quot; in &quot;kernel.h&quot; 
+  and then select it via the &quot;-t 4&quot; option. The &quot;a&quot; and &quot;b&quot; are pointers to the 
+  examples you are computing the kernel for.</li>
+  <ul>
+    <li>If the data you are working with is vectorial, then you can use the 
+    existing sparse vector operations defined in svm_common.c. For example,<br>
+&nbsp;&nbsp;&nbsp; pow(sprod_ss(a-&gt;words,b-&gt;words),2.0) <br>
+    implements the homogeneous polynomial kernel of degree 2.</li>
+    <li>If the data is non-vectorial (e.g. strings), then you can use the 
+    following functionality. In the training and test data files, whatever is 
+    written behind the &quot;#&quot; is copied into the &quot;userdefined&quot; field of the 
+    internal datastructure &quot;SVECTOR&quot; as a string. So, for the line<br>
+&nbsp;&nbsp;&nbsp; +1 #abcdefg<br>
+    you will find &quot;abcdefg&quot; in &quot;svector-&gt;userdefined&quot;.</li>
+  </ul>
+</ul>
+
+
+<H2>Error messages and known problems:</H2>
+
+<UL>
+<TT><LI>ERROR: terminating optimizer - choldc failed, matrix not positive definite</TT> </LI>
+
+<UL>
+<LI>If the program terminates after this message, get the lastest version of PR_LOQO and SVM-Light V2.01 (or later). </LI>
+<LI>It the program continues after this error message, don't worry :-) </LI></UL>
+
+<I><LI>The CPU-time is negative or looks bogus:</I> </LI>
+
+<UL>
+<LI>To be compatible with Windows, I used the <TT>clock/0</TT> function to measure CPU-time. This function returns a long integer and counts microseconds, so that it wraps around after about 30 minutes. You could use timing routines more appropriate for your system. For example on Solaris, you might want to use the routines from <TT>'sys/times.h'</TT>.</LI></UL>
+</UL>
+
+<H2>The program hangs when ...</H2>
+
+<UL>
+<I><LI>... reading in the examples.</I> </LI>
+
+<UL>
+<LI>Get version 3.02 or later. </LI></UL>
+</UL>
+
+<H2>Convergence during learning is very slow!</H2>
+
+<UL>
+<I><LI>In verbose mode 2 I observe that <TT>max violation</TT> bounces around and does not really converge.</I> </LI>
+
+<UL>
+<LI>Use a smaller value for the option -n (default n=q). This makes sure that only n new variables enter the working set in each iteration. This can prevent zig-zagging behavior.</LI>
+<LI>Use a smaller or larger value for the size of the working set (option -q). Reasonable values are in the range [2:50].</LI>
+<LI>You might be using an excessively large value of C (option -c) in relation to your data. The value of C should typically be less than 1000 times 1.0/(the maximum squared Euclidian length of your feature vectors). </LI>
+<LI>You have weired data and the convergence simply IS very slow <FONT FACE="Wingdings">&#74;</FONT>
+. Sorry, not much you can do about it. </LI></UL>
+
+<I><LI>Nearly all my training examples end up as support vectors.</I> </LI>
+
+<UL>
+<LI>Use a "stiffer" kernel (e g. a lower value of gamma for the RBF-kernel). If you pick a kernel which is very far away from the optimum, you will not get good generalization performance anyway. </LI>
+<LI>Your data is really difficult to separate. Think about a better representation of your data. It is a bad idea - for example - if different features have values in very much different orders of magnitude. You might want to normalize all features to the range [-1,+1]. </LI></UL>
+</UL>
+
+<H2>It does not converge!</H2>
+
+<UL>
+<LI>If you are using the built-in HIDEO optimizer, get the version 3.50 or later. There used to be problems for low dimensional data sets for the old HIDEO optimizer.</LI>
+<LI>It should always converge, unless there are numerical problems :-) </LI>
+<LI>Numerical problems. </LI>
+
+<UL>
+<LI>Make sure your data is properly scaled. It is a bad idea - for example - if different features have values in different orders of magnitude. You might want to normalize all features to the range [-1,+1], especially for problems with more than 100 features. Or even better, normalize all feature vectors to Euclidian length 1.</LI></UL>
+</UL>
+
+<h2>It crashes!</h2>
+<ul>
+  <li><i>It crashes during learning when using a non-linear kernel.</i>
+    <ul>
+      <li>Get version 5.00 or later. There was an initialization bug in the
+        kernel cache.</li>
+    </ul>
+  </li>
+</ul>
+<h2>The results look bogus!</h2>
+<ul>
+  <li><i>When doing transductive learning, for some training set sizes it does
+    not obey the -p parameter and the results look bogus.</i>
+    <ul>
+      <li>Get version 5.00 or later. There was a bug introduced in version 4.00.</li>
+    </ul>
+  </li>
+</ul>
+
+<FONT COLOR="#000000">
+<P>Last modified July 1st, 2007 by </FONT><a TARGET="_top" HREF="http://www.joachims.org">Thorsten Joachims</A><FONT COLOR="#000000"> &lt;</FONT><a HREF="mailto:thorsten@joachims.org">thorsten@joachims.org</a><FONT COLOR="#000000">&gt;</P></FONT></BODY>
+</HTML>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/_python_lib/pylast/.build	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+9
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/_python_lib/pylast/COPYING	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+  Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and 
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and 
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and 
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/_python_lib/pylast/INSTALL	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+Installation Instructions
+=========================
+
+Execute "python setup.py install" as a super user.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/_python_lib/pylast/README	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+pylast
+------
+
+A python interface to Last.fm. Try using the pydoc utility for help
+on usage.
+For more info check out the project's home page at http://code.google.com/p/pylast/
+or the mailing list http://groups.google.com/group/pylast/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/_python_lib/pylast/pylast.py	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3834 @@
+# -*- coding: utf-8 -*-
+#
+# pylast - A Python interface to Last.fm (and other API compatible social networks)
+#
+# Copyright 2008-2010 Amr Hassan
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# http://code.google.com/p/pylast/
+    
+__version__ = '0.5'
+__author__ = 'Amr Hassan'
+__copyright__ = "Copyright (C) 2008-2010  Amr Hassan"
+__license__ = "apache2"
+__email__ = 'amr.hassan@gmail.com'
+
+import hashlib
+from xml.dom import minidom
+import xml.dom
+import time
+import shelve
+import tempfile
+import sys
+import collections
+import warnings
+
+def _deprecation_warning(message):
+    warnings.warn(message, DeprecationWarning)
+
+if sys.version_info[0] == 3:
+    from http.client import HTTPConnection
+    import html.entities as htmlentitydefs
+    from urllib.parse import splithost as url_split_host
+    from urllib.parse import quote_plus as url_quote_plus
+    
+    unichr = chr
+
+elif sys.version_info[0] == 2:
+    from httplib import HTTPConnection
+    import htmlentitydefs 
+    from urllib import splithost as url_split_host
+    from urllib import quote_plus as url_quote_plus
+
+STATUS_INVALID_SERVICE = 2
+STATUS_INVALID_METHOD = 3
+STATUS_AUTH_FAILED = 4
+STATUS_INVALID_FORMAT = 5
+STATUS_INVALID_PARAMS = 6
+STATUS_INVALID_RESOURCE = 7
+STATUS_TOKEN_ERROR = 8
+STATUS_INVALID_SK = 9
+STATUS_INVALID_API_KEY = 10
+STATUS_OFFLINE = 11
+STATUS_SUBSCRIBERS_ONLY = 12
+STATUS_INVALID_SIGNATURE = 13
+STATUS_TOKEN_UNAUTHORIZED = 14
+STATUS_TOKEN_EXPIRED = 15
+
+EVENT_ATTENDING = '0'
+EVENT_MAYBE_ATTENDING = '1'
+EVENT_NOT_ATTENDING = '2'
+
+PERIOD_OVERALL = 'overall'
+PERIOD_7DAYS = "7day"
+PERIOD_3MONTHS = '3month'
+PERIOD_6MONTHS = '6month'
+PERIOD_12MONTHS = '12month'
+
+DOMAIN_ENGLISH = 0
+DOMAIN_GERMAN = 1
+DOMAIN_SPANISH = 2
+DOMAIN_FRENCH = 3
+DOMAIN_ITALIAN = 4
+DOMAIN_POLISH = 5
+DOMAIN_PORTUGUESE = 6
+DOMAIN_SWEDISH = 7
+DOMAIN_TURKISH = 8
+DOMAIN_RUSSIAN = 9
+DOMAIN_JAPANESE = 10
+DOMAIN_CHINESE = 11
+
+COVER_SMALL = 0
+COVER_MEDIUM = 1
+COVER_LARGE = 2
+COVER_EXTRA_LARGE = 3
+COVER_MEGA = 4
+
+IMAGES_ORDER_POPULARITY = "popularity"
+IMAGES_ORDER_DATE = "dateadded"
+
+
+USER_MALE = 'Male'
+USER_FEMALE = 'Female'
+
+SCROBBLE_SOURCE_USER = "P"
+SCROBBLE_SOURCE_NON_PERSONALIZED_BROADCAST = "R"
+SCROBBLE_SOURCE_PERSONALIZED_BROADCAST = "E"
+SCROBBLE_SOURCE_LASTFM = "L"
+SCROBBLE_SOURCE_UNKNOWN = "U"
+
+SCROBBLE_MODE_PLAYED = ""
+SCROBBLE_MODE_LOVED = "L"
+SCROBBLE_MODE_BANNED = "B"
+SCROBBLE_MODE_SKIPPED = "S"
+
+class _Network(object):
+    """
+        A music social network website that is Last.fm or one exposing a Last.fm compatible API
+    """
+    
+    def __init__(self, name, homepage, ws_server, api_key, api_secret, session_key, submission_server, username, password_hash,
+                    domain_names, urls):
+        """
+            name: the name of the network
+            homepage: the homepage url
+            ws_server: the url of the webservices server
+            api_key: a provided API_KEY
+            api_secret: a provided API_SECRET
+            session_key: a generated session_key or None
+            submission_server: the url of the server to which tracks are submitted (scrobbled)
+            username: a username of a valid user
+            password_hash: the output of pylast.md5(password) where password is the user's password
+            domain_names: a dict mapping each DOMAIN_* value to a string domain name
+            urls: a dict mapping types to urls
+            
+            if username and password_hash were provided and not session_key, session_key will be
+            generated automatically when needed.
+            
+            Either a valid session_key or a combination of username and password_hash must be present for scrobbling.
+            
+            You should use a preconfigured network object through a get_*_network(...) method instead of creating an object
+            of this class, unless you know what you're doing.
+        """
+        
+        self.name = name
+        self.homepage = homepage    
+        self.ws_server = ws_server
+        self.api_key = api_key
+        self.api_secret = api_secret
+        self.session_key = session_key
+        self.submission_server = submission_server
+        self.username = username
+        self.password_hash = password_hash
+        self.domain_names = domain_names
+        self.urls = urls
+        
+        self.cache_backend = None
+        self.proxy_enabled = False
+        self.proxy = None
+        self.last_call_time = 0
+        
+        #generate a session_key if necessary
+        if (self.api_key and self.api_secret) and not self.session_key and (self.username and self.password_hash):
+            sk_gen = SessionKeyGenerator(self)
+            self.session_key = sk_gen.get_session_key(self.username, self.password_hash)
+    
+    """def __repr__(self):
+        attributes = ("name", "homepage", "ws_server", "api_key", "api_secret", "session_key", "submission_server",
+            "username", "password_hash", "domain_names", "urls")
+        
+        text = "pylast._Network(%s)"
+        args = []
+        for attr in attributes:
+            args.append("=".join((attr, repr(getattr(self, attr)))))
+        
+        return text % ", ".join(args)
+    """
+    
+    def __str__(self):
+        return "The %s Network" %self.name
+    
+    def get_artist(self, artist_name):
+        """
+            Return an Artist object
+        """
+        
+        return Artist(artist_name, self)
+    
+    def get_track(self, artist, title):
+        """
+            Return a Track object
+        """
+        
+        return Track(artist, title, self)
+    
+    def get_album(self, artist, title):
+        """
+            Return an Album object
+        """
+        
+        return Album(artist, title, self)
+    
+    def get_authenticated_user(self):
+        """
+            Returns the authenticated user
+        """
+        
+        return AuthenticatedUser(self)
+    
+    def get_country(self, country_name):
+        """
+            Returns a country object
+        """
+        
+        return Country(country_name, self)
+    
+    def get_group(self, name):
+        """
+            Returns a Group object
+        """
+        
+        return Group(name, self)
+    
+    def get_user(self, username):
+        """
+            Returns a user object
+        """
+        
+        return User(username, self)
+    
+    def get_tag(self, name):
+        """
+            Returns a tag object
+        """
+        
+        return Tag(name, self)
+    
+    def get_scrobbler(self, client_id, client_version):
+        """
+            Returns a Scrobbler object used for submitting tracks to the server
+            
+            Quote from http://www.last.fm/api/submissions:
+            ========
+            Client identifiers are used to provide a centrally managed database of 
+            the client versions, allowing clients to be banned if they are found to 
+            be behaving undesirably. The client ID is associated with a version 
+            number on the server, however these are only incremented if a client is 
+            banned and do not have to reflect the version of the actual client application.
+
+            During development, clients which have not been allocated an identifier should 
+            use the identifier tst, with a version number of 1.0. Do not distribute code or
+            client implementations which use this test identifier. Do not use the identifiers
+            used by other clients.
+            =========
+            
+            To obtain a new client identifier please contact:
+                * Last.fm: submissions@last.fm
+                * # TODO: list others
+            
+            ...and provide us with the name of your client and its homepage address. 
+        """
+        
+        _deprecation_warning("Use _Network.scrobble(...), _Network.scrobble_many(...), and Netowrk.update_now_playing(...) instead")
+        
+        return Scrobbler(self, client_id, client_version)
+    
+    def _get_language_domain(self, domain_language):
+        """
+            Returns the mapped domain name of the network to a DOMAIN_* value
+        """
+        
+        if domain_language in self.domain_names:
+            return self.domain_names[domain_language]
+    
+    def _get_url(self, domain, type):
+        return "http://%s/%s" %(self._get_language_domain(domain), self.urls[type])
+    
+    def _get_ws_auth(self):
+        """
+            Returns a (API_KEY, API_SECRET, SESSION_KEY) tuple.
+        """
+        return (self.api_key, self.api_secret, self.session_key)
+
+    def _delay_call(self):
+        """
+            Makes sure that web service calls are at least a second apart
+        """
+        
+        # delay time in seconds
+        DELAY_TIME = 1.0
+        now = time.time()
+            
+        if (now - self.last_call_time) < DELAY_TIME:
+            time.sleep(1)
+        
+        self.last_call_time = now
+        
+    def create_new_playlist(self, title, description):
+        """
+            Creates a playlist for the authenticated user and returns it
+                title: The title of the new playlist.
+                description: The description of the new playlist.
+        """
+        
+        params = {}
+        params['title'] = title
+        params['description'] = description
+        
+        doc = _Request(self, 'playlist.create', params).execute(False)
+        
+        e_id = doc.getElementsByTagName("id")[0].firstChild.data
+        user = doc.getElementsByTagName('playlists')[0].getAttribute('user')
+        
+        return Playlist(user, e_id, self)
+
+    def get_top_tags(self, limit=None):
+        """Returns a sequence of the most used tags as a sequence of TopItem objects."""
+        
+        doc = _Request(self, "tag.getTopTags").execute(True)
+        seq = []
+        for node in doc.getElementsByTagName("tag"):
+            tag = Tag(_extract(node, "name"), self)
+            weight = _number(_extract(node, "count"))
+            
+            seq.append(TopItem(tag, weight))
+        
+        if limit:
+            seq = seq[:limit]
+        
+        return seq
+
+    def enable_proxy(self, host, port):
+        """Enable a default web proxy"""
+        
+        self.proxy = [host, _number(port)]
+        self.proxy_enabled = True
+
+    def disable_proxy(self):
+        """Disable using the web proxy"""
+        
+        self.proxy_enabled = False
+
+    def is_proxy_enabled(self):
+        """Returns True if a web proxy is enabled."""
+        
+        return self.proxy_enabled
+
+    def _get_proxy(self):
+        """Returns proxy details."""
+        
+        return self.proxy
+        
+    def enable_caching(self, file_path = None):
+        """Enables caching request-wide for all cachable calls.
+        In choosing the backend used for caching, it will try _SqliteCacheBackend first if
+        the module sqlite3 is present. If not, it will fallback to _ShelfCacheBackend which uses shelve.Shelf objects.
+        
+        * file_path: A file path for the backend storage file. If 
+        None set, a temp file would probably be created, according the backend.
+        """
+        
+        if not file_path:
+            file_path = tempfile.mktemp(prefix="pylast_tmp_")
+        
+        self.cache_backend = _ShelfCacheBackend(file_path)
+            
+    def disable_caching(self):
+        """Disables all caching features."""
+
+        self.cache_backend = None
+
+    def is_caching_enabled(self):
+        """Returns True if caching is enabled."""
+        
+        return not (self.cache_backend == None)
+
+    def _get_cache_backend(self):
+        
+        return self.cache_backend
+        
+    def search_for_album(self, album_name):
+        """Searches for an album by its name. Returns a AlbumSearch object.
+        Use get_next_page() to retreive sequences of results."""
+        
+        return AlbumSearch(album_name, self)
+
+    def search_for_artist(self, artist_name):
+        """Searches of an artist by its name. Returns a ArtistSearch object.
+        Use get_next_page() to retreive sequences of results."""
+        
+        return ArtistSearch(artist_name, self)
+
+    def search_for_tag(self, tag_name):
+        """Searches of a tag by its name. Returns a TagSearch object.
+        Use get_next_page() to retreive sequences of results."""
+        
+        return TagSearch(tag_name, self)
+
+    def search_for_track(self, artist_name, track_name):
+        """Searches of a track by its name and its artist. Set artist to an empty string if not available.
+        Returns a TrackSearch object.
+        Use get_next_page() to retreive sequences of results."""
+        
+        return TrackSearch(artist_name, track_name, self)
+
+    def search_for_venue(self, venue_name, country_name):
+        """Searches of a venue by its name and its country. Set country_name to an empty string if not available.
+        Returns a VenueSearch object.
+        Use get_next_page() to retreive sequences of results."""
+
+        return VenueSearch(venue_name, country_name, self)
+        
+    def get_track_by_mbid(self, mbid):
+        """Looks up a track by its MusicBrainz ID"""
+        
+        params = {"mbid": mbid}
+        
+        doc = _Request(self, "track.getInfo", params).execute(True)
+        
+        return Track(_extract(doc, "name", 1), _extract(doc, "name"), self)
+
+    def get_artist_by_mbid(self, mbid):
+        """Loooks up an artist by its MusicBrainz ID"""
+        
+        params = {"mbid": mbid}
+        
+        doc = _Request(self, "artist.getInfo", params).execute(True)
+        
+        return Artist(_extract(doc, "name"), self)
+
+    def get_album_by_mbid(self, mbid):
+        """Looks up an album by its MusicBrainz ID"""
+        
+        params = {"mbid": mbid}
+        
+        doc = _Request(self, "album.getInfo", params).execute(True)
+        
+        return Album(_extract(doc, "artist"), _extract(doc, "name"), self)
+    
+    def update_now_playing(self, artist, title, album = None, album_artist = None, 
+            duration = None, track_number = None, mbid = None, context = None):
+        """
+            Used to notify Last.fm that a user has started listening to a track. 
+            
+            Parameters:
+                artist (Required) : The artist name
+                title (Required) : The track title
+                album (Optional) : The album name.
+                album_artist (Optional) : The album artist - if this differs from the track artist.
+                duration (Optional) : The length of the track in seconds.
+                track_number (Optional) : The track number of the track on the album.
+                mbid (Optional) : The MusicBrainz Track ID.
+                context (Optional) : Sub-client version (not public, only enabled for certain API keys)
+        """
+            
+        params = {"track": title, "artist": artist}
+        
+        if album: params["album"] = album
+        if album_artist: params["albumArtist"] = album_artist
+        if context: params["context"] = context
+        if track_number: params["trackNumber"] = track_number
+        if mbid: params["mbid"] = mbid
+        if duration: params["duration"] = duration
+        
+        _Request(self, "track.updateNowPlaying", params).execute()
+    
+    def scrobble(self, artist, title, timestamp, album = None, album_artist = None, track_number = None, 
+        duration = None, stream_id = None, context = None, mbid = None):
+        
+        """Used to add a track-play to a user's profile.
+        
+        Parameters:
+            artist (Required) : The artist name.
+            title (Required) : The track name.
+            timestamp (Required) : The time the track started playing, in UNIX timestamp format (integer number of seconds since 00:00:00, January 1st 1970 UTC). This must be in the UTC time zone.
+            album (Optional) : The album name.
+            album_artist (Optional) : The album artist - if this differs from the track artist.
+            context (Optional) : Sub-client version (not public, only enabled for certain API keys)
+            stream_id (Optional) : The stream id for this track received from the radio.getPlaylist service.
+            track_number (Optional) : The track number of the track on the album.
+            mbid (Optional) : The MusicBrainz Track ID.
+            duration (Optional) : The length of the track in seconds.
+        """
+        
+        return self.scrobble_many(({"artist": artist, "title": title, "timestamp": timestamp, "album": album, "album_artist": album_artist,
+            "track_number": track_number, "duration": duration, "stream_id": stream_id, "context": context, "mbid": mbid},))
+        
+    def scrobble_many(self, tracks):
+        """
+            Used to scrobble a batch of tracks at once. The parameter tracks is a sequence of dicts per
+            track containing the keyword arguments as if passed to the scrobble() method.
+        """
+        
+        tracks_to_scrobble = tracks[:50]
+        if len(tracks) > 50:
+            remaining_tracks = tracks[50:]
+        else:
+            remaining_tracks = None
+        
+        params = {}
+        for i in range(len(tracks_to_scrobble)):
+            
+            params["artist[%d]" % i] = tracks_to_scrobble[i]["artist"]
+            params["track[%d]" % i] = tracks_to_scrobble[i]["title"]
+            
+            additional_args = ("timestamp", "album", "album_artist", "context", "stream_id", "track_number", "mbid", "duration")
+            args_map_to = {"album_artist": "albumArtist", "track_number": "trackNumber", "stream_id": "streamID"}  # so friggin lazy
+            
+            for arg in additional_args:
+                
+                if arg in tracks_to_scrobble[i] and tracks_to_scrobble[i][arg]:
+                    if arg in args_map_to:
+                        maps_to = args_map_to[arg]
+                    else:
+                        maps_to = arg
+                    
+                    params["%s[%d]" %(maps_to, i)] = tracks_to_scrobble[i][arg]
+        
+        
+        _Request(self, "track.scrobble", params).execute()
+        
+        if remaining_tracks:
+            self.scrobble_many(remaining_tracks)
+    
+class LastFMNetwork(_Network):
+    
+    """A Last.fm network object
+    
+    api_key: a provided API_KEY
+    api_secret: a provided API_SECRET
+    session_key: a generated session_key or None
+    username: a username of a valid user
+    password_hash: the output of pylast.md5(password) where password is the user's password
+    
+    if username and password_hash were provided and not session_key, session_key will be
+    generated automatically when needed.
+            
+    Either a valid session_key or a combination of username and password_hash must be present for scrobbling.
+    
+    Most read-only webservices only require an api_key and an api_secret, see about obtaining them from:
+    http://www.last.fm/api/account
+    """
+    
+    def __init__(self, api_key="", api_secret="", session_key="", username="", password_hash=""):
+        _Network.__init__(self,
+            name = "Last.fm",
+                    homepage = "http://last.fm",
+                    ws_server = ("ws.audioscrobbler.com", "/2.0/"),
+                    api_key = api_key,
+                    api_secret = api_secret,
+                    session_key = session_key,
+                    submission_server = "http://post.audioscrobbler.com:80/",
+                    username = username,
+                    password_hash = password_hash,
+                    domain_names = {
+                        DOMAIN_ENGLISH: 'www.last.fm',
+                        DOMAIN_GERMAN: 'www.lastfm.de',
+                        DOMAIN_SPANISH: 'www.lastfm.es',
+                        DOMAIN_FRENCH: 'www.lastfm.fr',
+                        DOMAIN_ITALIAN: 'www.lastfm.it',
+                        DOMAIN_POLISH: 'www.lastfm.pl',
+                        DOMAIN_PORTUGUESE: 'www.lastfm.com.br',
+                        DOMAIN_SWEDISH: 'www.lastfm.se',
+                        DOMAIN_TURKISH: 'www.lastfm.com.tr',
+                        DOMAIN_RUSSIAN: 'www.lastfm.ru',
+                        DOMAIN_JAPANESE: 'www.lastfm.jp',
+                        DOMAIN_CHINESE: 'cn.last.fm',
+                        },
+                    urls = {
+                        "album": "music/%(artist)s/%(album)s",
+                        "artist": "music/%(artist)s",
+                        "event": "event/%(id)s",
+                        "country": "place/%(country_name)s",
+                        "playlist": "user/%(user)s/library/playlists/%(appendix)s",
+                        "tag": "tag/%(name)s",
+                        "track": "music/%(artist)s/_/%(title)s",
+                        "group": "group/%(name)s",
+                        "user": "user/%(name)s",
+                        }
+                )
+    
+    def __repr__(self):
+        return "pylast.LastFMNetwork(%s)" %(", ".join(("'%s'" %self.api_key, "'%s'" %self.api_secret, "'%s'" %self.session_key, 
+            "'%s'" %self.username, "'%s'" %self.password_hash)))
+    
+    def __str__(self):
+        return "LastFM Network"
+
+def get_lastfm_network(api_key="", api_secret="", session_key = "", username = "", password_hash = ""):
+    """
+    Returns a preconfigured _Network object for Last.fm
+    
+    api_key: a provided API_KEY
+    api_secret: a provided API_SECRET
+    session_key: a generated session_key or None
+    username: a username of a valid user
+    password_hash: the output of pylast.md5(password) where password is the user's password
+    
+    if username and password_hash were provided and not session_key, session_key will be
+    generated automatically when needed.
+            
+    Either a valid session_key or a combination of username and password_hash must be present for scrobbling.
+    
+    Most read-only webservices only require an api_key and an api_secret, see about obtaining them from:
+    http://www.last.fm/api/account
+    """
+    
+    _deprecation_warning("Create a LastFMNetwork object instead")
+    
+    return LastFMNetwork(api_key, api_secret, session_key, username, password_hash)
+
+class LibreFMNetwork(_Network):
+    """
+    A preconfigured _Network object for Libre.fm
+    
+    api_key: a provided API_KEY
+    api_secret: a provided API_SECRET
+    session_key: a generated session_key or None
+    username: a username of a valid user
+    password_hash: the output of pylast.md5(password) where password is the user's password
+    
+    if username and password_hash were provided and not session_key, session_key will be
+    generated automatically when needed.
+    """
+    
+    def __init__(self, api_key="", api_secret="", session_key = "", username = "", password_hash = ""):
+        
+        _Network.__init__(self,
+                    name = "Libre.fm",
+                    homepage = "http://alpha.dev.libre.fm",
+                    ws_server = ("alpha.dev.libre.fm", "/2.0/"),
+                    api_key = api_key,
+                    api_secret = api_secret,
+                    session_key = session_key,
+                    submission_server = "http://turtle.libre.fm:80/",
+                    username = username,
+                    password_hash = password_hash,
+                    domain_names = {
+                        DOMAIN_ENGLISH: "alpha.dev.libre.fm",
+                        DOMAIN_GERMAN: "alpha.dev.libre.fm",
+                        DOMAIN_SPANISH: "alpha.dev.libre.fm",
+                        DOMAIN_FRENCH: "alpha.dev.libre.fm",
+                        DOMAIN_ITALIAN: "alpha.dev.libre.fm",
+                        DOMAIN_POLISH: "alpha.dev.libre.fm",
+                        DOMAIN_PORTUGUESE: "alpha.dev.libre.fm",
+                        DOMAIN_SWEDISH: "alpha.dev.libre.fm",
+                        DOMAIN_TURKISH: "alpha.dev.libre.fm",
+                        DOMAIN_RUSSIAN: "alpha.dev.libre.fm",
+                        DOMAIN_JAPANESE: "alpha.dev.libre.fm",
+                        DOMAIN_CHINESE: "alpha.dev.libre.fm",
+                        },
+                    urls = {
+                        "album": "artist/%(artist)s/album/%(album)s",
+                        "artist": "artist/%(artist)s",
+                        "event": "event/%(id)s",
+                        "country": "place/%(country_name)s",
+                        "playlist": "user/%(user)s/library/playlists/%(appendix)s",
+                        "tag": "tag/%(name)s",
+                        "track": "music/%(artist)s/_/%(title)s",
+                        "group": "group/%(name)s",
+                        "user": "user/%(name)s",
+                        }
+                    )
+        
+    def __repr__(self):
+        return "pylast.LibreFMNetwork(%s)" %(", ".join(("'%s'" %self.api_key, "'%s'" %self.api_secret, "'%s'" %self.session_key, 
+            "'%s'" %self.username, "'%s'" %self.password_hash)))
+    
+    def __str__(self):
+        return "Libre.fm Network"
+
+def get_librefm_network(api_key="", api_secret="", session_key = "", username = "", password_hash = ""):
+    """
+    Returns a preconfigured _Network object for Libre.fm
+    
+    api_key: a provided API_KEY
+    api_secret: a provided API_SECRET
+    session_key: a generated session_key or None
+    username: a username of a valid user
+    password_hash: the output of pylast.md5(password) where password is the user's password
+    
+    if username and password_hash were provided and not session_key, session_key will be
+    generated automatically when needed.
+    """
+    
+    _deprecation_warning("DeprecationWarning: Create a LibreFMNetwork object instead")
+    
+    return LibreFMNetwork(api_key, api_secret, session_key, username, password_hash)
+
+class _ShelfCacheBackend(object):
+    """Used as a backend for caching cacheable requests."""
+    def __init__(self, file_path = None):
+        self.shelf = shelve.open(file_path)
+    
+    def get_xml(self, key):
+        return self.shelf[key]
+    
+    def set_xml(self, key, xml_string):
+        self.shelf[key] = xml_string
+    
+    def has_key(self, key):
+        return key in self.shelf.keys()
+    
+class _Request(object):
+    """Representing an abstract web service operation."""
+    
+    def __init__(self, network, method_name, params = {}):
+        
+        self.network = network
+        self.params = {}
+        
+        for key in params:
+            self.params[key] = _unicode(params[key])
+        
+        (self.api_key, self.api_secret, self.session_key) = network._get_ws_auth()
+        
+        self.params["api_key"] = self.api_key
+        self.params["method"] = method_name
+        
+        if network.is_caching_enabled():
+            self.cache = network._get_cache_backend()
+        
+        if self.session_key:
+            self.params["sk"] = self.session_key
+            self.sign_it()
+    
+    def sign_it(self):
+        """Sign this request."""
+        
+        if not "api_sig" in self.params.keys():
+            self.params['api_sig'] = self._get_signature()
+    
+    def _get_signature(self):
+        """Returns a 32-character hexadecimal md5 hash of the signature string."""
+        
+        keys = list(self.params.keys())
+        
+        keys.sort()
+        
+        string = ""
+        
+        for name in keys:
+            string += name
+            string += self.params[name]
+        
+        string += self.api_secret
+        
+        return md5(string)
+    
+    def _get_cache_key(self):
+        """The cache key is a string of concatenated sorted names and values."""
+        
+        keys = list(self.params.keys())
+        keys.sort()
+        
+        cache_key = str()
+        
+        for key in keys:
+            if key != "api_sig" and key != "api_key" and key != "sk":
+                cache_key += key + _string(self.params[key])
+        
+        return hashlib.sha1(cache_key).hexdigest()
+    
+    def _get_cached_response(self):
+        """Returns a file object of the cached response."""
+        
+        if not self._is_cached():
+            response = self._download_response()
+            self.cache.set_xml(self._get_cache_key(), response)
+        
+        return self.cache.get_xml(self._get_cache_key())
+    
+    def _is_cached(self):
+        """Returns True if the request is already in cache."""
+        
+        return self.cache.has_key(self._get_cache_key())
+        
+    def _download_response(self):
+        """Returns a response body string from the server."""
+        
+        # Delay the call if necessary
+        #self.network._delay_call()    # enable it if you want.
+        
+        data = []
+        for name in self.params.keys():
+            data.append('='.join((name, url_quote_plus(_string(self.params[name])))))
+        data = '&'.join(data)
+        
+        headers = {
+            "Content-type": "application/x-www-form-urlencoded",
+            'Accept-Charset': 'utf-8',
+            'User-Agent': "pylast" + '/' + __version__
+            }        
+        
+        (HOST_NAME, HOST_SUBDIR) = self.network.ws_server
+        
+        if self.network.is_proxy_enabled():
+            conn = HTTPConnection(host = self._get_proxy()[0], port = self._get_proxy()[1])
+            
+            try:
+                conn.request(method='POST', url="http://" + HOST_NAME + HOST_SUBDIR, 
+                    body=data, headers=headers)
+            except Exception as e:
+                raise NetworkError(self.network, e)
+                
+        else:
+            conn = HTTPConnection(host=HOST_NAME)
+            
+            try:
+                conn.request(method='POST', url=HOST_SUBDIR, body=data, headers=headers)
+            except Exception as e:
+                raise NetworkError(self.network, e)
+        
+        try:
+            response_text = _unicode(conn.getresponse().read())
+        except Exception as e:
+            raise MalformedResponseError(self.network, e)
+        
+        self._check_response_for_errors(response_text)
+        return response_text
+        
+    def execute(self, cacheable = False):
+        """Returns the XML DOM response of the POST Request from the server"""
+        
+        if self.network.is_caching_enabled() and cacheable:
+            response = self._get_cached_response()
+        else:
+            response = self._download_response()
+        
+        return minidom.parseString(_string(response))
+    
+    def _check_response_for_errors(self, response):
+        """Checks the response for errors and raises one if any exists."""
+        
+        try:
+            doc = minidom.parseString(_string(response))
+        except Exception as e:
+            raise MalformedResponseError(self.network, e)
+            
+        e = doc.getElementsByTagName('lfm')[0]
+        
+        if e.getAttribute('status') != "ok":
+            e = doc.getElementsByTagName('error')[0]
+            status = e.getAttribute('code')
+            details = e.firstChild.data.strip()
+            raise WSError(self.network, status, details)
+
+class SessionKeyGenerator(object):
+    """Methods of generating a session key:
+    1) Web Authentication:
+        a. network = get_*_network(API_KEY, API_SECRET)
+        b. sg = SessionKeyGenerator(network)
+        c. url = sg.get_web_auth_url()
+        d. Ask the user to open the url and authorize you, and wait for it.
+        e. session_key = sg.get_web_auth_session_key(url)
+    2) Username and Password Authentication:
+        a. network = get_*_network(API_KEY, API_SECRET)
+        b. username = raw_input("Please enter your username: ")
+        c. password_hash = pylast.md5(raw_input("Please enter your password: ")
+        d. session_key = SessionKeyGenerator(network).get_session_key(username, password_hash)
+    
+    A session key's lifetime is infinie, unless the user provokes the rights of the given API Key.
+    
+    If you create a Network object with just a API_KEY and API_SECRET and a username and a password_hash, a
+    SESSION_KEY will be automatically generated for that network and stored in it so you don't have to do this
+    manually, unless you want to.
+    """
+    
+    def __init__(self, network):        
+        self.network = network
+        self.web_auth_tokens = {}
+    
+    def _get_web_auth_token(self):
+        """Retrieves a token from the network for web authentication.
+        The token then has to be authorized from getAuthURL before creating session.
+        """
+        
+        request = _Request(self.network, 'auth.getToken')
+        
+        # default action is that a request is signed only when
+        # a session key is provided.
+        request.sign_it()
+        
+        doc = request.execute()
+        
+        e = doc.getElementsByTagName('token')[0]
+        return e.firstChild.data
+    
+    def get_web_auth_url(self):
+        """The user must open this page, and you first, then call get_web_auth_session_key(url) after that."""
+        
+        token = self._get_web_auth_token()
+        
+        url = '%(homepage)s/api/auth/?api_key=%(api)s&token=%(token)s' % \
+            {"homepage": self.network.homepage, "api": self.network.api_key, "token": token}
+        
+        self.web_auth_tokens[url] = token
+        
+        return url
+
+    def get_web_auth_session_key(self, url):
+        """Retrieves the session key of a web authorization process by its url."""
+        
+        if url in self.web_auth_tokens.keys():
+            token = self.web_auth_tokens[url]
+        else:
+            token = ""    #that's gonna raise a WSError of an unauthorized token when the request is executed.
+        
+        request = _Request(self.network, 'auth.getSession', {'token': token})
+        
+        # default action is that a request is signed only when
+        # a session key is provided.
+        request.sign_it()
+        
+        doc = request.execute()
+        
+        return doc.getElementsByTagName('key')[0].firstChild.data
+    
+    def get_session_key(self, username, password_hash):
+        """Retrieve a session key with a username and a md5 hash of the user's password."""
+        
+        params = {"username": username, "authToken": md5(username + password_hash)}
+        request = _Request(self.network, "auth.getMobileSession", params)
+        
+        # default action is that a request is signed only when
+        # a session key is provided.
+        request.sign_it()
+        
+        doc = request.execute()
+        
+        return _extract(doc, "key")
+
+TopItem = collections.namedtuple("TopItem", ["item", "weight"])
+SimilarItem = collections.namedtuple("SimilarItem", ["item", "match"])
+LibraryItem = collections.namedtuple("LibraryItem", ["item", "playcount", "tagcount"])
+PlayedTrack = collections.namedtuple("PlayedTrack", ["track", "playback_date", "timestamp"])
+LovedTrack = collections.namedtuple("LovedTrack", ["track", "date", "timestamp"])
+ImageSizes = collections.namedtuple("ImageSizes", ["original", "large", "largesquare", "medium", "small", "extralarge"])
+Image = collections.namedtuple("Image", ["title", "url", "dateadded", "format", "owner", "sizes", "votes"])
+Shout = collections.namedtuple("Shout", ["body", "author", "date"])
+
+def _string_output(funct):
+    def r(*args):
+        return _string(funct(*args))
+        
+    return r
+
+def _pad_list(given_list, desired_length, padding = None):
+    """
+        Pads a list to be of the desired_length.
+    """
+    
+    while len(given_list) < desired_length:
+        given_list.append(padding)
+    
+    return given_list
+
+class _BaseObject(object):
+    """An abstract webservices object."""
+    
+    network = None
+    
+    def __init__(self, network):
+        self.network = network
+    
+    def _request(self, method_name, cacheable = False, params = None):
+        if not params:
+            params = self._get_params()
+            
+        return _Request(self.network, method_name, params).execute(cacheable)
+    
+    def _get_params(self):
+        """Returns the most common set of parameters between all objects."""
+        
+        return {}
+    
+    def __hash__(self):
+        return hash(self.network) + \
+            hash(str(type(self)) + "".join(list(self._get_params().keys()) + list(self._get_params().values())).lower())
+
+class _Taggable(object):
+    """Common functions for classes with tags."""
+    
+    def __init__(self, ws_prefix):
+        self.ws_prefix = ws_prefix
+    
+    def add_tags(self, tags):
+        """Adds one or several tags.
+        * tags: A sequence of tag names or Tag objects.
+        """
+        
+        for tag in tags:
+            self.add_tag(tag)
+    
+    def add_tag(self, tag):
+        """Adds one tag.
+        * tag: a tag name or a Tag object.
+        """
+        
+        if isinstance(tag, Tag):
+            tag = tag.get_name()
+        
+        params = self._get_params()
+        params['tags'] = tag
+        
+        self._request(self.ws_prefix + '.addTags', False, params)
+    
+    def remove_tag(self, tag):
+        """Remove a user's tag from this object."""
+        
+        if isinstance(tag, Tag):
+            tag = tag.get_name()
+        
+        params = self._get_params()
+        params['tag'] = tag
+        
+        self._request(self.ws_prefix + '.removeTag', False, params)
+
+    def get_tags(self):
+        """Returns a list of the tags set by the user to this object."""
+        
+        # Uncacheable because it can be dynamically changed by the user.
+        params = self._get_params()
+        
+        doc = self._request(self.ws_prefix + '.getTags', False, params)
+        tag_names = _extract_all(doc, 'name')
+        tags = []
+        for tag in tag_names:
+            tags.append(Tag(tag, self.network))
+        
+        return tags
+    
+    def remove_tags(self, tags):
+        """Removes one or several tags from this object.
+        * tags: a sequence of tag names or Tag objects.
+        """
+        
+        for tag in tags:
+            self.remove_tag(tag)
+    
+    def clear_tags(self):
+        """Clears all the user-set tags. """
+        
+        self.remove_tags(*(self.get_tags()))
+    
+    def set_tags(self, tags):
+        """Sets this object's tags to only those tags.
+        * tags: a sequence of tag names or Tag objects.
+        """
+        
+        c_old_tags = []
+        old_tags = []
+        c_new_tags = []
+        new_tags = []
+        
+        to_remove = []
+        to_add = []
+        
+        tags_on_server = self.get_tags()
+        
+        for tag in tags_on_server:
+            c_old_tags.append(tag.get_name().lower())
+            old_tags.append(tag.get_name())
+        
+        for tag in tags:
+            c_new_tags.append(tag.lower())
+            new_tags.append(tag)
+        
+        for i in range(0, len(old_tags)):
+            if not c_old_tags[i] in c_new_tags:
+                to_remove.append(old_tags[i])
+        
+        for i in range(0, len(new_tags)):
+            if not c_new_tags[i] in c_old_tags:
+                to_add.append(new_tags[i])
+        
+        self.remove_tags(to_remove)
+        self.add_tags(to_add)
+        
+    def get_top_tags(self, limit=None):
+        """Returns a list of the most frequently used Tags on this object."""
+        
+        doc = self._request(self.ws_prefix + '.getTopTags', True)
+        
+        elements = doc.getElementsByTagName('tag')
+        seq = []
+        
+        for element in elements:
+            tag_name = _extract(element, 'name')
+            tagcount = _extract(element, 'count')
+            
+            seq.append(TopItem(Tag(tag_name, self.network), tagcount))
+        
+        if limit:
+            seq = seq[:limit]
+        
+        return seq
+        
+class WSError(Exception):
+    """Exception related to the Network web service"""
+    
+    def __init__(self, network, status, details):
+        self.status = status
+        self.details = details
+        self.network = network
+
+    @_string_output
+    def __str__(self):
+        return self.details
+    
+    def get_id(self):
+        """Returns the exception ID, from one of the following:
+            STATUS_INVALID_SERVICE = 2
+            STATUS_INVALID_METHOD = 3
+            STATUS_AUTH_FAILED = 4
+            STATUS_INVALID_FORMAT = 5
+            STATUS_INVALID_PARAMS = 6
+            STATUS_INVALID_RESOURCE = 7
+            STATUS_TOKEN_ERROR = 8
+            STATUS_INVALID_SK = 9
+            STATUS_INVALID_API_KEY = 10
+            STATUS_OFFLINE = 11
+            STATUS_SUBSCRIBERS_ONLY = 12
+            STATUS_TOKEN_UNAUTHORIZED = 14
+            STATUS_TOKEN_EXPIRED = 15
+        """
+        
+        return self.status
+
+class MalformedResponseError(Exception):
+    """Exception conveying a malformed response from Last.fm."""
+    
+    def __init__(self, network, underlying_error):
+        self.network = network
+        self.underlying_error = underlying_error
+    
+    def __str__(self):
+        return "Malformed response from Last.fm. Underlying error: %s" %str(self.underlying_error)
+
+class NetworkError(Exception):
+    """Exception conveying a problem in sending a request to Last.fm"""
+    
+    def __init__(self, network, underlying_error):
+        self.network = network
+        self.underlying_error = underlying_error
+    
+    def __str__(self):
+        return "NetworkError: %s" %str(self.underlying_error)
+
+class Album(_BaseObject, _Taggable):
+    """An album."""
+    
+    title = None
+    artist = None
+    
+    def __init__(self, artist, title, network):
+        """
+        Create an album instance.
+        # Parameters:
+            * artist: An artist name or an Artist object.
+            * title: The album title.
+        """
+        
+        _BaseObject.__init__(self, network)
+        _Taggable.__init__(self, 'album')
+        
+        if isinstance(artist, Artist):
+            self.artist = artist
+        else:
+            self.artist = Artist(artist, self.network)
+        
+        self.title = title
+    
+    def __repr__(self):
+        return "pylast.Album(%s, %s, %s)" %(repr(self.artist.name), repr(self.title), repr(self.network))
+
+    @_string_output
+    def __str__(self):
+        return _unicode("%s - %s") %(self.get_artist().get_name(), self.get_title())
+    
+    def __eq__(self, other):
+        return (self.get_title().lower() == other.get_title().lower()) and (self.get_artist().get_name().lower() == other.get_artist().get_name().lower())
+    
+    def __ne__(self, other):
+        return (self.get_title().lower() != other.get_title().lower()) or (self.get_artist().get_name().lower() != other.get_artist().get_name().lower())
+    
+    def _get_params(self):
+        return {'artist': self.get_artist().get_name(), 'album': self.get_title(), }
+    
+    def get_artist(self):
+        """Returns the associated Artist object."""
+        
+        return self.artist
+    
+    def get_title(self):
+        """Returns the album title."""
+        
+        return self.title
+    
+    def get_name(self):
+        """Returns the album title (alias to Album.get_title)."""
+        
+        return self.get_title()
+    
+    def get_release_date(self):
+        """Retruns the release date of the album."""
+        
+        return _extract(self._request("album.getInfo", cacheable = True), "releasedate")
+    
+    def get_cover_image(self, size = COVER_EXTRA_LARGE):
+        """
+        Returns a uri to the cover image
+        size can be one of:
+            COVER_EXTRA_LARGE
+            COVER_LARGE
+            COVER_MEDIUM
+            COVER_SMALL
+        """
+        
+        return _extract_all(self._request("album.getInfo", cacheable = True), 'image')[size]
+    
+    def get_id(self):
+        """Returns the ID"""
+        
+        return _extract(self._request("album.getInfo", cacheable = True), "id")
+    
+    def get_playcount(self):
+        """Returns the number of plays on the network"""
+        
+        return _number(_extract(self._request("album.getInfo", cacheable = True), "playcount"))
+    
+    def get_listener_count(self):
+        """Returns the number of liteners on the network"""
+        
+        return _number(_extract(self._request("album.getInfo", cacheable = True), "listeners"))
+    
+    def get_top_tags(self, limit=None):
+        """Returns a list of the most-applied tags to this album."""
+        
+        doc = self._request("album.getInfo", True)
+        e = doc.getElementsByTagName("toptags")[0]
+        
+        seq = []
+        for name in _extract_all(e, "name"):
+            seq.append(Tag(name, self.network))
+        
+        if limit:
+            seq = seq[:limit]
+        
+        return seq
+
+    def get_tracks(self):
+        """Returns the list of Tracks on this album."""
+        
+        uri = 'lastfm://playlist/album/%s' %self.get_id()
+        
+        return XSPF(uri, self.network).get_tracks()
+    
+    def get_mbid(self):
+        """Returns the MusicBrainz id of the album."""
+        
+        return _extract(self._request("album.getInfo", cacheable = True), "mbid")
+        
+    def get_url(self, domain_name = DOMAIN_ENGLISH):
+        """Returns the url of the album page on the network. 
+        # Parameters:
+        * domain_name str: The network's language domain. Possible values:
+            o DOMAIN_ENGLISH
+            o DOMAIN_GERMAN
+            o DOMAIN_SPANISH
+            o DOMAIN_FRENCH
+            o DOMAIN_ITALIAN
+            o DOMAIN_POLISH
+            o DOMAIN_PORTUGUESE
+            o DOMAIN_SWEDISH
+            o DOMAIN_TURKISH
+            o DOMAIN_RUSSIAN
+            o DOMAIN_JAPANESE
+            o DOMAIN_CHINESE
+        """
+        
+        artist = _url_safe(self.get_artist().get_name())
+        album = _url_safe(self.get_title())
+        
+        return self.network._get_url(domain_name, "album") %{'artist': artist, 'album': album}
+    
+    def get_wiki_published_date(self):
+        """Returns the date of publishing this version of the wiki."""
+        
+        doc = self._request("album.getInfo", True)
+        
+        if len(doc.getElementsByTagName("wiki")) == 0:
+            return
+        
+        node = doc.getElementsByTagName("wiki")[0]
+        
+        return _extract(node, "published")
+    
+    def get_wiki_summary(self):
+        """Returns the summary of the wiki."""
+        
+        doc = self._request("album.getInfo", True)
+        
+        if len(doc.getElementsByTagName("wiki")) == 0:
+            return
+        
+        node = doc.getElementsByTagName("wiki")[0]
+        
+        return _extract(node, "summary")
+    
+    def get_wiki_content(self):
+        """Returns the content of the wiki."""
+        
+        doc = self._request("album.getInfo", True)
+        
+        if len(doc.getElementsByTagName("wiki")) == 0:
+            return
+        
+        node = doc.getElementsByTagName("wiki")[0]
+        
+        return _extract(node, "content")
+
+class Artist(_BaseObject, _Taggable):
+    """An artist."""
+    
+    name = None
+    
+    def __init__(self, name, network):
+        """Create an artist object.
+        # Parameters:
+            * name str: The artist's name.
+        """
+        
+        _BaseObject.__init__(self, network)
+        _Taggable.__init__(self, 'artist')
+        
+        self.name = name
+    
+    def __repr__(self):
+        return "pylast.Artist(%s, %s)" %(repr(self.get_name()), repr(self.network))
+    
+    @_string_output
+    def __str__(self):
+        return self.get_name()
+    
+    def __eq__(self, other):
+        return self.get_name().lower() == other.get_name().lower()
+    
+    def __ne__(self, other):
+        return self.get_name().lower() != other.get_name().lower()
+    
+    def _get_params(self):
+        return {'artist': self.get_name()}
+    
+    def get_name(self, properly_capitalized=False):
+        """Returns the name of the artist.
+        If properly_capitalized was asserted then the name would be downloaded
+        overwriting the given one."""
+        
+        if properly_capitalized:
+            self.name = _extract(self._request("artist.getInfo", True), "name")
+        
+        return self.name
+    
+    def get_cover_image(self, size = COVER_MEGA):
+        """
+        Returns a uri to the cover image
+        size can be one of:
+            COVER_MEGA
+            COVER_EXTRA_LARGE
+            COVER_LARGE
+            COVER_MEDIUM
+            COVER_SMALL
+        """
+        
+        return _extract_all(self._request("artist.getInfo", True), "image")[size]
+    
+    def get_playcount(self):
+        """Returns the number of plays on the network."""
+        
+        return _number(_extract(self._request("artist.getInfo", True), "playcount"))
+
+    def get_mbid(self):
+        """Returns the MusicBrainz ID of this artist."""
+        
+        doc = self._request("artist.getInfo", True)
+        
+        return _extract(doc, "mbid")
+        
+    def get_listener_count(self):
+        """Returns the number of liteners on the network."""
+        
+        if hasattr(self, "listener_count"):
+            return self.listener_count
+        else:
+            self.listener_count = _number(_extract(self._request("artist.getInfo", True), "listeners"))
+            return self.listener_count
+    
+    def is_streamable(self):
+        """Returns True if the artist is streamable."""
+        
+        return bool(_number(_extract(self._request("artist.getInfo", True), "streamable")))
+    
+    def get_bio_published_date(self):
+        """Returns the date on which the artist's biography was published."""
+        
+        return _extract(self._request("artist.getInfo", True), "published")
+    
+    def get_bio_summary(self):
+        """Returns the summary of the artist's biography."""
+        
+        return _extract(self._request("artist.getInfo", True), "summary")
+    
+    def get_bio_content(self):
+        """Returns the content of the artist's biography."""
+        
+        return _extract(self._request("artist.getInfo", True), "content")
+    
+    def get_upcoming_events(self):
+        """Returns a list of the upcoming Events for this artist."""
+        
+        doc = self._request('artist.getEvents', True)
+        
+        ids = _extract_all(doc, 'id')
+        
+        events = []
+        for e_id in ids:
+            events.append(Event(e_id, self.network))
+        
+        return events
+    
+    def get_similar(self, limit = None):
+        """Returns the similar artists on the network."""
+        
+        params = self._get_params()
+        if limit:
+            params['limit'] = limit
+        
+        doc = self._request('artist.getSimilar', True, params)
+        
+        names = _extract_all(doc, "name")
+        matches = _extract_all(doc, "match")
+        
+        artists = []
+        for i in range(0, len(names)):
+            artists.append(SimilarItem(Artist(names[i], self.network), _number(matches[i])))
+        
+        return artists
+
+    def compare_with_artist(self, artist, shared_artists_limit = None):
+        """Compare this artist with another Last.fm artist.
+        Seems like the tasteometer only returns stats on subsets of artist sets...
+        Returns a sequence (tasteometer_score, (shared_artist1, shared_artist2, ...))
+        artist: A artist object or a artistname string/unicode object.
+        """
+        
+        if isinstance(artist, Artist):
+            artist = artist.get_name()
+        
+        params = self._get_params()
+        if shared_artists_limit:
+            params['limit'] = shared_artists_limit
+        params['type1'] = 'artists'
+        params['type2'] = 'artists'
+        params['value1'] = self.get_name()
+        params['value2'] = artist
+        
+        doc = self._request('tasteometer.compare', False, params)
+        
+        score = _extract(doc, 'score')
+        
+        artists = doc.getElementsByTagName('artists')[0]
+        shared_artists_names = _extract_all(artists, 'name')
+        
+        shared_artists_seq = []
+        
+        for name in shared_artists_names:
+            shared_artists_seq.append(Artist(name, self.network))
+        
+        return (score, shared_artists_seq)
+
+    def get_top_albums(self):
+        """Retuns a list of the top albums."""
+        
+        doc = self._request('artist.getTopAlbums', True)
+        
+        seq = []
+        
+        for node in doc.getElementsByTagName("album"):
+            name = _extract(node, "name")
+            artist = _extract(node, "name", 1)
+            playcount = _extract(node, "playcount")
+            
+            seq.append(TopItem(Album(artist, name, self.network), playcount))
+        
+        return seq
+        
+    def get_top_tracks(self):
+        """Returns a list of the most played Tracks by this artist."""
+        
+        doc = self._request("artist.getTopTracks", True)
+        
+        seq = []
+        for track in doc.getElementsByTagName('track'):
+            
+            title = _extract(track, "name")
+            artist = _extract(track, "name", 1)
+            playcount = _number(_extract(track, "playcount"))
+            
+            seq.append( TopItem(Track(artist, title, self.network), playcount) )
+        
+        return seq
+    
+    def get_top_fans(self, limit = None):
+        """Returns a list of the Users who played this artist the most.
+        # Parameters:
+            * limit int: Max elements.
+        """
+        
+        doc = self._request('artist.getTopFans', True)
+        
+        seq = []
+        
+        elements = doc.getElementsByTagName('user')
+        
+        for element in elements:
+            if limit and len(seq) >= limit:
+                break
+                
+            name = _extract(element, 'name')
+            weight = _number(_extract(element, 'weight'))
+            
+            seq.append(TopItem(User(name, self.network), weight))
+        
+        return seq
+
+    def share(self, users, message = None):
+        """Shares this artist (sends out recommendations). 
+        # Parameters:
+            * users [User|str,]: A list that can contain usernames, emails, User objects, or all of them.
+            * message str: A message to include in the recommendation message. 
+        """
+        
+        #last.fm currently accepts a max of 10 recipient at a time
+        while(len(users) > 10):
+            section = users[0:9]
+            users = users[9:]
+            self.share(section, message)
+        
+        nusers = []
+        for user in users:
+            if isinstance(user, User):
+                nusers.append(user.get_name())
+            else:
+                nusers.append(user)
+        
+        params = self._get_params()
+        recipients = ','.join(nusers)
+        params['recipient'] = recipients
+        if message:
+            params['message'] = message
+        
+        self._request('artist.share', False, params)
+    
+    def get_url(self, domain_name = DOMAIN_ENGLISH):
+        """Returns the url of the artist page on the network. 
+        # Parameters:
+        * domain_name: The network's language domain. Possible values:
+          o DOMAIN_ENGLISH
+          o DOMAIN_GERMAN
+          o DOMAIN_SPANISH
+          o DOMAIN_FRENCH
+          o DOMAIN_ITALIAN
+          o DOMAIN_POLISH
+          o DOMAIN_PORTUGUESE
+          o DOMAIN_SWEDISH
+          o DOMAIN_TURKISH
+          o DOMAIN_RUSSIAN
+          o DOMAIN_JAPANESE
+          o DOMAIN_CHINESE 
+        """
+        
+        artist = _url_safe(self.get_name())
+        
+        return self.network._get_url(domain_name, "artist") %{'artist': artist}
+    
+    def get_images(self, order=IMAGES_ORDER_POPULARITY, limit=None):
+        """
+            Returns a sequence of Image objects
+            if limit is None it will return all
+            order can be IMAGES_ORDER_POPULARITY or IMAGES_ORDER_DATE.
+            
+            If limit==None, it will try to pull all the available data.
+        """
+        
+        images = []
+        
+        params = self._get_params()
+        params["order"] = order
+        nodes = _collect_nodes(limit, self, "artist.getImages", True, params)
+        for e in nodes:
+            if _extract(e, "name"):
+                user = User(_extract(e, "name"), self.network)
+            else:
+                user = None
+                
+            images.append(Image(
+                            _extract(e, "title"),
+                            _extract(e, "url"),
+                            _extract(e, "dateadded"),
+                            _extract(e, "format"),
+                            user,
+                            ImageSizes(*_extract_all(e, "size")),
+                            (_extract(e, "thumbsup"), _extract(e, "thumbsdown"))
+                            )
+                        )
+        return images
+
+    def get_shouts(self, limit=50):
+        """
+            Returns a sequqence of Shout objects
+        """
+        
+        shouts = []
+        for node in _collect_nodes(limit, self, "artist.getShouts", False):
+            shouts.append(Shout(
+                                _extract(node, "body"),
+                                User(_extract(node, "author"), self.network),
+                                _extract(node, "date")
+                                )
+                            )
+        return shouts
+    
+    def shout(self, message):
+        """
+            Post a shout
+        """
+        
+        params = self._get_params()
+        params["message"] = message
+        
+        self._request("artist.Shout", False, params)
+        
+
+class Event(_BaseObject):
+    """An event."""
+    
+    id = None
+    
+    def __init__(self, event_id, network):
+        _BaseObject.__init__(self, network)
+        
+        self.id = event_id
+    
+    def __repr__(self):
+        return "pylast.Event(%s, %s)" %(repr(self.id), repr(self.network))
+    
+    @_string_output
+    def __str__(self):
+        return "Event #" + self.get_id()
+    
+    def __eq__(self, other):
+        return self.get_id() == other.get_id()
+    
+    def __ne__(self, other):
+        return self.get_id() != other.get_id()
+    
+    def _get_params(self):
+        return {'event': self.get_id()}
+    
+    def attend(self, attending_status):
+        """Sets the attending status.
+        * attending_status: The attending status. Possible values:
+          o EVENT_ATTENDING
+          o EVENT_MAYBE_ATTENDING
+          o EVENT_NOT_ATTENDING 
+        """
+        
+        params = self._get_params()
+        params['status'] = attending_status
+        
+        self._request('event.attend', False, params)
+    
+    def get_attendees(self):
+        """
+            Get a list of attendees for an event
+        """
+        
+        doc = self._request("event.getAttendees", False)
+        
+        users = []
+        for name in _extract_all(doc, "name"):
+            users.append(User(name, self.network))
+        
+        return users
+        
+    def get_id(self):
+        """Returns the id of the event on the network. """
+        
+        return self.id
+    
+    def get_title(self):
+        """Returns the title of the event. """
+        
+        doc = self._request("event.getInfo", True)
+        
+        return _extract(doc, "title")
+    
+    def get_headliner(self):
+        """Returns the headliner of the event. """
+        
+        doc = self._request("event.getInfo", True)
+        
+        return Artist(_extract(doc, "headliner"), self.network)
+    
+    def get_artists(self):
+        """Returns a list of the participating Artists. """
+        
+        doc = self._request("event.getInfo", True)
+        names = _extract_all(doc, "artist")
+        
+        artists = []
+        for name in names:
+            artists.append(Artist(name, self.network))
+        
+        return artists
+    
+    def get_venue(self):
+        """Returns the venue where the event is held."""
+        
+        doc = self._request("event.getInfo", True)
+        
+        v = doc.getElementsByTagName("venue")[0]
+        venue_id = _number(_extract(v, "id"))
+        
+        return Venue(venue_id, self.network)
+    
+    def get_start_date(self):
+        """Returns the date when the event starts."""
+        
+        doc = self._request("event.getInfo", True)
+        
+        return _extract(doc, "startDate")
+        
+    def get_description(self):
+        """Returns the description of the event. """
+        
+        doc = self._request("event.getInfo", True)
+        
+        return _extract(doc, "description")
+    
+    def get_cover_image(self, size = COVER_MEGA):
+        """
+        Returns a uri to the cover image
+        size can be one of:
+            COVER_MEGA
+            COVER_EXTRA_LARGE
+            COVER_LARGE
+            COVER_MEDIUM
+            COVER_SMALL
+        """
+        
+        doc = self._request("event.getInfo", True)
+        
+        return _extract_all(doc, "image")[size]
+    
+    def get_attendance_count(self):
+        """Returns the number of attending people. """
+        
+        doc = self._request("event.getInfo", True)
+        
+        return _number(_extract(doc, "attendance"))
+    
+    def get_review_count(self):
+        """Returns the number of available reviews for this event. """
+        
+        doc = self._request("event.getInfo", True)
+        
+        return _number(_extract(doc, "reviews"))
+    
+    def get_url(self, domain_name = DOMAIN_ENGLISH):
+        """Returns the url of the event page on the network. 
+        * domain_name: The network's language domain. Possible values:
+          o DOMAIN_ENGLISH
+          o DOMAIN_GERMAN
+          o DOMAIN_SPANISH
+          o DOMAIN_FRENCH
+          o DOMAIN_ITALIAN
+          o DOMAIN_POLISH
+          o DOMAIN_PORTUGUESE
+          o DOMAIN_SWEDISH
+          o DOMAIN_TURKISH
+          o DOMAIN_RUSSIAN
+          o DOMAIN_JAPANESE
+          o DOMAIN_CHINESE 
+        """
+        
+        return self.network._get_url(domain_name, "event") %{'id': self.get_id()}
+
+    def share(self, users, message = None):
+        """Shares this event (sends out recommendations). 
+          * users: A list that can contain usernames, emails, User objects, or all of them.
+          * message: A message to include in the recommendation message. 
+        """
+        
+        #last.fm currently accepts a max of 10 recipient at a time
+        while(len(users) > 10):
+            section = users[0:9]
+            users = users[9:]
+            self.share(section, message)
+        
+        nusers = []
+        for user in users:
+            if isinstance(user, User):
+                nusers.append(user.get_name())
+            else:
+                nusers.append(user)
+        
+        params = self._get_params()
+        recipients = ','.join(nusers)
+        params['recipient'] = recipients
+        if message:
+            params['message'] = message
+        
+        self._request('event.share', False, params)
+
+    def get_shouts(self, limit=50):
+        """
+            Returns a sequqence of Shout objects
+        """
+        
+        shouts = []
+        for node in _collect_nodes(limit, self, "event.getShouts", False):
+            shouts.append(Shout(
+                                _extract(node, "body"),
+                                User(_extract(node, "author"), self.network),
+                                _extract(node, "date")
+                                )
+                            )
+        return shouts
+    
+    def shout(self, message):
+        """
+            Post a shout
+        """
+        
+        params = self._get_params()
+        params["message"] = message
+        
+        self._request("event.Shout", False, params)
+        
+class Country(_BaseObject):
+    """A country at Last.fm."""
+    
+    name = None
+    
+    def __init__(self, name, network):
+        _BaseObject.__init__(self, network)
+        
+        self.name = name
+    
+    def __repr__(self):
+        return "pylast.Country(%s, %s)" %(repr(self.name), repr(self.network))
+    
+    @_string_output
+    def __str__(self):
+        return self.get_name()
+    
+    def __eq__(self, other):
+        return self.get_name().lower() == other.get_name().lower()
+    
+    def __ne__(self, other):
+        return self.get_name() != other.get_name()
+    
+    def _get_params(self):
+        return {'country': self.get_name()}
+    
+    def _get_name_from_code(self, alpha2code):
+        # TODO: Have this function lookup the alpha-2 code and return the country name.
+        
+        return alpha2code
+    
+    def get_name(self):
+        """Returns the country name. """
+        
+        return self.name
+    
+    def get_top_artists(self):
+        """Returns a sequence of the most played artists."""
+        
+        doc = self._request('geo.getTopArtists', True)
+        
+        seq = []
+        for node in doc.getElementsByTagName("artist"):
+            name = _extract(node, 'name')
+            playcount = _extract(node, "playcount")
+        
+            seq.append(TopItem(Artist(name, self.network), playcount))
+        
+        return seq
+    
+    def get_top_tracks(self):
+        """Returns a sequence of the most played tracks"""
+        
+        doc = self._request("geo.getTopTracks", True)
+        
+        seq = []
+        
+        for n in doc.getElementsByTagName('track'):
+            
+            title = _extract(n, 'name')
+            artist = _extract(n, 'name', 1)
+            playcount = _number(_extract(n, "playcount"))
+            
+            seq.append( TopItem(Track(artist, title, self.network), playcount))
+        
+        return seq
+    
+    def get_url(self, domain_name = DOMAIN_ENGLISH):
+        """Returns the url of the event page on the network. 
+        * domain_name: The network's language domain. Possible values:
+          o DOMAIN_ENGLISH
+          o DOMAIN_GERMAN
+          o DOMAIN_SPANISH
+          o DOMAIN_FRENCH
+          o DOMAIN_ITALIAN
+          o DOMAIN_POLISH
+          o DOMAIN_PORTUGUESE
+          o DOMAIN_SWEDISH
+          o DOMAIN_TURKISH
+          o DOMAIN_RUSSIAN
+          o DOMAIN_JAPANESE
+          o DOMAIN_CHINESE 
+        """
+        
+        country_name = _url_safe(self.get_name())
+        
+        return self.network._get_url(domain_name, "country") %{'country_name': country_name}
+
+
+class Library(_BaseObject):
+    """A user's Last.fm library."""
+    
+    user = None
+    
+    def __init__(self, user, network):
+        _BaseObject.__init__(self, network)
+        
+        if isinstance(user, User):
+            self.user = user
+        else:
+            self.user = User(user, self.network)
+        
+        self._albums_index = 0
+        self._artists_index = 0
+        self._tracks_index = 0
+    
+    def __repr__(self):
+        return "pylast.Library(%s, %s)" %(repr(self.user), repr(self.network))
+    
+    @_string_output
+    def __str__(self):
+        return repr(self.get_user()) + "'s Library"
+    
+    def _get_params(self):
+        return {'user': self.user.get_name()}
+    
+    def get_user(self):
+        """Returns the user who owns this library."""
+        
+        return self.user
+    
+    def add_album(self, album):
+        """Add an album to this library."""
+        
+        params = self._get_params()
+        params["artist"] = album.get_artist.get_name()
+        params["album"] = album.get_name()
+        
+        self._request("library.addAlbum", False, params)
+    
+    def add_artist(self, artist):
+        """Add an artist to this library."""
+        
+        params = self._get_params()
+        params["artist"] = artist.get_name()
+        
+        self._request("library.addArtist", False, params)
+    
+    def add_track(self, track):
+        """Add a track to this library."""
+        
+        params = self._get_params()
+        params["track"] = track.get_title()
+        
+        self._request("library.addTrack", False, params)
+    
+    def get_albums(self, artist=None, limit=50):
+        """
+        Returns a sequence of Album objects
+        If no artist is specified, it will return all, sorted by playcount descendingly.
+        If limit==None it will return all (may take a while)
+        """
+        
+        params = self._get_params()
+        if artist:
+            params["artist"] = artist
+        
+        seq = []
+        for node in _collect_nodes(limit, self, "library.getAlbums", True, params):
+            name = _extract(node, "name")
+            artist = _extract(node, "name", 1)
+            playcount = _number(_extract(node, "playcount"))
+            tagcount = _number(_extract(node, "tagcount"))
+            
+            seq.append(LibraryItem(Album(artist, name, self.network), playcount, tagcount))
+        
+        return seq
+    
+    def get_artists(self, limit=50):
+        """
+        Returns a sequence of Album objects
+        if limit==None it will return all (may take a while)
+        """
+        
+        seq = []
+        for node in _collect_nodes(limit, self, "library.getArtists", True):
+            name = _extract(node, "name")
+            
+            playcount = _number(_extract(node, "playcount"))
+            tagcount = _number(_extract(node, "tagcount"))
+            
+            seq.append(LibraryItem(Artist(name, self.network), playcount, tagcount))
+        
+        return seq
+
+    def get_tracks(self, artist=None, album=None, limit=50):
+        """
+        Returns a sequence of Album objects
+        If limit==None it will return all (may take a while)
+        """
+        
+        params = self._get_params()
+        if artist:
+            params["artist"] = artist
+        if album:
+            params["album"] = album
+        
+        seq = []
+        for node in _collect_nodes(limit, self, "library.getTracks", True, params):
+            name = _extract(node, "name")
+            artist = _extract(node, "name", 1)
+            playcount = _number(_extract(node, "playcount"))
+            tagcount = _number(_extract(node, "tagcount"))
+            
+            seq.append(LibraryItem(Track(artist, name, self.network), playcount, tagcount))
+        
+        return seq
+            
+
+class Playlist(_BaseObject):
+    """A Last.fm user playlist."""
+    
+    id = None
+    user = None
+    
+    def __init__(self, user, id, network):
+        _BaseObject.__init__(self, network)
+        
+        if isinstance(user, User):
+            self.user = user
+        else:
+            self.user = User(user, self.network)
+        
+        self.id = id
+    
+    @_string_output
+    def __str__(self):
+        return repr(self.user) + "'s playlist # " + repr(self.id)
+        
+    def _get_info_node(self):
+        """Returns the node from user.getPlaylists where this playlist's info is."""
+        
+        doc = self._request("user.getPlaylists", True)
+        
+        for node in doc.getElementsByTagName("playlist"):
+            if _extract(node, "id") == str(self.get_id()):
+                return node
+    
+    def _get_params(self):
+        return {'user': self.user.get_name(), 'playlistID': self.get_id()}
+    
+    def get_id(self):
+        """Returns the playlist id."""
+        
+        return self.id
+    
+    def get_user(self):
+        """Returns the owner user of this playlist."""
+        
+        return self.user
+    
+    def get_tracks(self):
+        """Returns a list of the tracks on this user playlist."""
+        
+        uri = _unicode('lastfm://playlist/%s') %self.get_id()
+        
+        return XSPF(uri, self.network).get_tracks()
+    
+    def add_track(self, track):
+        """Adds a Track to this Playlist."""
+        
+        params = self._get_params()
+        params['artist'] = track.get_artist().get_name()
+        params['track'] = track.get_title()
+        
+        self._request('playlist.addTrack', False, params)
+    
+    def get_title(self):
+        """Returns the title of this playlist."""
+        
+        return _extract(self._get_info_node(), "title")
+    
+    def get_creation_date(self):
+        """Returns the creation date of this playlist."""
+        
+        return _extract(self._get_info_node(), "date")
+    
+    def get_size(self):
+        """Returns the number of tracks in this playlist."""
+        
+        return _number(_extract(self._get_info_node(), "size"))
+    
+    def get_description(self):
+        """Returns the description of this playlist."""
+        
+        return _extract(self._get_info_node(), "description")
+    
+    def get_duration(self):
+        """Returns the duration of this playlist in milliseconds."""
+        
+        return _number(_extract(self._get_info_node(), "duration"))
+    
+    def is_streamable(self):
+        """Returns True if the playlist is streamable.
+        For a playlist to be streamable, it needs at least 45 tracks by 15 different artists."""
+        
+        if _extract(self._get_info_node(), "streamable") == '1':
+            return True
+        else:
+            return False
+    
+    def has_track(self, track):
+        """Checks to see if track is already in the playlist.
+        * track: Any Track object.
+        """
+        
+        return track in self.get_tracks()
+
+    def get_cover_image(self, size = COVER_EXTRA_LARGE):
+        """
+        Returns a uri to the cover image
+        size can be one of:
+            COVER_MEGA
+            COVER_EXTRA_LARGE
+            COVER_LARGE
+            COVER_MEDIUM
+            COVER_SMALL
+        """
+        
+        return _extract(self._get_info_node(), "image")[size]
+    
+    def get_url(self, domain_name = DOMAIN_ENGLISH):
+        """Returns the url of the playlist on the network. 
+        * domain_name: The network's language domain. Possible values:
+          o DOMAIN_ENGLISH
+          o DOMAIN_GERMAN
+          o DOMAIN_SPANISH
+          o DOMAIN_FRENCH
+          o DOMAIN_ITALIAN
+          o DOMAIN_POLISH
+          o DOMAIN_PORTUGUESE
+          o DOMAIN_SWEDISH
+          o DOMAIN_TURKISH
+          o DOMAIN_RUSSIAN
+          o DOMAIN_JAPANESE
+          o DOMAIN_CHINESE 
+        """
+        
+        english_url = _extract(self._get_info_node(), "url")
+        appendix = english_url[english_url.rfind("/") + 1:]
+        
+        return self.network._get_url(domain_name, "playlist") %{'appendix': appendix, "user": self.get_user().get_name()}
+        
+
+class Tag(_BaseObject):
+    """A Last.fm object tag."""
+    
+    # TODO: getWeeklyArtistChart (too lazy, i'll wait for when someone requests it)
+    
+    name = None
+    
+    def __init__(self, name, network):
+        _BaseObject.__init__(self, network)
+        
+        self.name = name
+    
+    def __repr__(self):
+        return "pylast.Tag(%s, %s)" %(repr(self.name), repr(self.network))
+    
+    @_string_output
+    def __str__(self):
+        return self.get_name()
+    
+    def __eq__(self, other):
+        return self.get_name().lower() == other.get_name().lower()
+    
+    def __ne__(self, other):
+        return self.get_name().lower() != other.get_name().lower()
+    
+    def _get_params(self):
+        return {'tag': self.get_name()}
+    
+    def get_name(self, properly_capitalized=False):
+        """Returns the name of the tag. """
+        
+        if properly_capitalized:
+            self.name = _extract(self._request("tag.getInfo", True), "name")
+        
+        return self.name
+
+    def get_similar(self):
+        """Returns the tags similar to this one, ordered by similarity. """
+        
+        doc = self._request('tag.getSimilar', True)
+        
+        seq = []
+        names = _extract_all(doc, 'name')
+        for name in names:
+            seq.append(Tag(name, self.network))
+        
+        return seq
+    
+    def get_top_albums(self):
+        """Retuns a list of the top albums."""
+        
+        doc = self._request('tag.getTopAlbums', True)
+        
+        seq = []
+        
+        for node in doc.getElementsByTagName("album"):
+            name = _extract(node, "name")
+            artist = _extract(node, "name", 1)
+            playcount = _extract(node, "playcount")
+            
+            seq.append(TopItem(Album(artist, name, self.network), playcount))
+        
+        return seq
+        
+    def get_top_tracks(self):
+        """Returns a list of the most played Tracks by this artist."""
+        
+        doc = self._request("tag.getTopTracks", True)
+        
+        seq = []
+        for track in doc.getElementsByTagName('track'):
+            
+            title = _extract(track, "name")
+            artist = _extract(track, "name", 1)
+            playcount = _number(_extract(track, "playcount"))
+            
+            seq.append( TopItem(Track(artist, title, self.network), playcount) )
+        
+        return seq
+    
+    def get_top_artists(self):
+        """Returns a sequence of the most played artists."""
+        
+        doc = self._request('tag.getTopArtists', True)
+        
+        seq = []
+        for node in doc.getElementsByTagName("artist"):
+            name = _extract(node, 'name')
+            playcount = _extract(node, "playcount")
+        
+            seq.append(TopItem(Artist(name, self.network), playcount))
+        
+        return seq
+    
+    def get_weekly_chart_dates(self):
+        """Returns a list of From and To tuples for the available charts."""
+        
+        doc = self._request("tag.getWeeklyChartList", True)
+        
+        seq = []
+        for node in doc.getElementsByTagName("chart"):
+            seq.append( (node.getAttribute("from"), node.getAttribute("to")) )
+        
+        return seq
+    
+    def get_weekly_artist_charts(self, from_date = None, to_date = None):
+        """Returns the weekly artist charts for the week starting from the from_date value to the to_date value."""
+        
+        params = self._get_params()
+        if from_date and to_date:
+            params["from"] = from_date
+            params["to"] = to_date
+        
+        doc = self._request("tag.getWeeklyArtistChart", True, params)
+        
+        seq = []
+        for node in doc.getElementsByTagName("artist"):
+            item = Artist(_extract(node, "name"), self.network)
+            weight = _number(_extract(node, "weight"))
+            seq.append(TopItem(item, weight))
+        
+        return seq
+    
+    def get_url(self, domain_name = DOMAIN_ENGLISH):
+        """Returns the url of the tag page on the network. 
+        * domain_name: The network's language domain. Possible values:
+          o DOMAIN_ENGLISH
+          o DOMAIN_GERMAN
+          o DOMAIN_SPANISH
+          o DOMAIN_FRENCH
+          o DOMAIN_ITALIAN
+          o DOMAIN_POLISH
+          o DOMAIN_PORTUGUESE
+          o DOMAIN_SWEDISH
+          o DOMAIN_TURKISH
+          o DOMAIN_RUSSIAN
+          o DOMAIN_JAPANESE
+          o DOMAIN_CHINESE 
+        """
+        
+        name = _url_safe(self.get_name())
+        
+        return self.network._get_url(domain_name, "tag") %{'name': name}
+
+class Track(_BaseObject, _Taggable):
+    """A Last.fm track."""
+    
+    artist = None
+    title = None
+    
+    def __init__(self, artist, title, network):
+        _BaseObject.__init__(self, network)
+        _Taggable.__init__(self, 'track')
+        
+        if isinstance(artist, Artist):
+            self.artist = artist
+        else:
+            self.artist = Artist(artist, self.network)
+        
+        self.title = title
+    
+    def __repr__(self):
+        return "pylast.Track(%s, %s, %s)" %(repr(self.artist.name), repr(self.title), repr(self.network))
+
+    @_string_output
+    def __str__(self):
+        return self.get_artist().get_name() + ' - ' + self.get_title()
+
+    def __eq__(self, other):
+        return (self.get_title().lower() == other.get_title().lower()) and (self.get_artist().get_name().lower() == other.get_artist().get_name().lower())
+    
+    def __ne__(self, other):
+        return (self.get_title().lower() != other.get_title().lower()) or (self.get_artist().get_name().lower() != other.get_artist().get_name().lower())
+    
+    def _get_params(self):
+        return {'artist': self.get_artist().get_name(), 'track': self.get_title()}
+            
+    def get_artist(self):
+        """Returns the associated Artist object."""
+        
+        return self.artist
+    
+    def get_title(self, properly_capitalized=False):
+        """Returns the track title."""
+        
+        if properly_capitalized:
+            self.title = _extract(self._request("track.getInfo", True), "name")
+        
+        return self.title
+    
+    def get_name(self, properly_capitalized=False):
+        """Returns the track title (alias to Track.get_title)."""
+        
+        return self.get_title(properly_capitalized)
+    
+    def get_id(self):
+        """Returns the track id on the network."""
+        
+        doc = self._request("track.getInfo", True)
+        
+        return _extract(doc, "id")
+    
+    def get_duration(self):
+        """Returns the track duration."""
+        
+        doc = self._request("track.getInfo", True)
+        
+        return _number(_extract(doc, "duration"))
+    
+    def get_mbid(self):
+        """Returns the MusicBrainz ID of this track."""
+        
+        doc = self._request("track.getInfo", True)
+        
+        return _extract(doc, "mbid")
+        
+    def get_listener_count(self):
+        """Returns the listener count."""
+        
+        if hasattr(self, "listener_count"):
+            return self.listener_count
+        else:
+            doc = self._request("track.getInfo", True)
+            self.listener_count = _number(_extract(doc, "listeners"))
+            return self.listener_count
+    
+    def get_playcount(self):
+        """Returns the play count."""
+        
+        doc = self._request("track.getInfo", True)
+        return _number(_extract(doc, "playcount"))
+    
+    def is_streamable(self):
+        """Returns True if the track is available at Last.fm."""
+        
+        doc = self._request("track.getInfo", True)
+        return _extract(doc, "streamable") == "1"
+    
+    def is_fulltrack_available(self):
+        """Returns True if the fulltrack is available for streaming."""
+        
+        doc = self._request("track.getInfo", True)
+        return doc.getElementsByTagName("streamable")[0].getAttribute("fulltrack") == "1"
+        
+    def get_album(self):
+        """Returns the album object of this track."""
+        
+        doc = self._request("track.getInfo", True)
+        
+        albums = doc.getElementsByTagName("album")
+        
+        if len(albums) == 0:
+            return
+        
+        node = doc.getElementsByTagName("album")[0]
+        return Album(_extract(node, "artist"), _extract(node, "title"), self.network)
+    
+    def get_wiki_published_date(self):
+        """Returns the date of publishing this version of the wiki."""
+        
+        doc = self._request("track.getInfo", True)
+        
+        if len(doc.getElementsByTagName("wiki")) == 0:
+            return
+        
+        node = doc.getElementsByTagName("wiki")[0]
+        
+        return _extract(node, "published")
+    
+    def get_wiki_summary(self):
+        """Returns the summary of the wiki."""
+        
+        doc = self._request("track.getInfo", True)
+        
+        if len(doc.getElementsByTagName("wiki")) == 0:
+            return
+        
+        node = doc.getElementsByTagName("wiki")[0]
+        
+        return _extract(node, "summary")
+        
+    def get_wiki_content(self):
+        """Returns the content of the wiki."""
+        
+        doc = self._request("track.getInfo", True)
+        
+        if len(doc.getElementsByTagName("wiki")) == 0:
+            return
+        
+        node = doc.getElementsByTagName("wiki")[0]
+        
+        return _extract(node, "content")
+    
+    def love(self):
+        """Adds the track to the user's loved tracks. """
+        
+        self._request('track.love')
+    
+    def ban(self):
+        """Ban this track from ever playing on the radio. """
+        
+        self._request('track.ban')
+    
+    def get_similar(self):
+        """Returns similar tracks for this track on the network, based on listening data. """
+        
+        doc = self._request('track.getSimilar', True)
+        
+        seq = []
+        for node in doc.getElementsByTagName("track"):
+            title = _extract(node, 'name')
+            artist = _extract(node, 'name', 1)
+            match = _number(_extract(node, "match"))
+            
+            seq.append(SimilarItem(Track(artist, title, self.network), match))
+        
+        return seq
+
+    def get_top_fans(self, limit = None):
+        """Returns a list of the Users who played this track."""
+        
+        doc = self._request('track.getTopFans', True)
+        
+        seq = []
+        
+        elements = doc.getElementsByTagName('user')
+        
+        for element in elements:
+            if limit and len(seq) >= limit:
+                break
+                
+            name = _extract(element, 'name')
+            weight = _number(_extract(element, 'weight'))
+            
+            seq.append(TopItem(User(name, self.network), weight))
+        
+        return seq
+    
+    def share(self, users, message = None):
+        """Shares this track (sends out recommendations). 
+          * users: A list that can contain usernames, emails, User objects, or all of them.
+          * message: A message to include in the recommendation message. 
+        """
+        
+        #last.fm currently accepts a max of 10 recipient at a time
+        while(len(users) > 10):
+            section = users[0:9]
+            users = users[9:]
+            self.share(section, message)
+        
+        nusers = []
+        for user in users:
+            if isinstance(user, User):
+                nusers.append(user.get_name())
+            else:
+                nusers.append(user)
+        
+        params = self._get_params()
+        recipients = ','.join(nusers)
+        params['recipient'] = recipients
+        if message:
+            params['message'] = message
+        
+        self._request('track.share', False, params)
+    
+    def get_url(self, domain_name = DOMAIN_ENGLISH):
+        """Returns the url of the track page on the network. 
+        * domain_name: The network's language domain. Possible values:
+          o DOMAIN_ENGLISH
+          o DOMAIN_GERMAN
+          o DOMAIN_SPANISH
+          o DOMAIN_FRENCH
+          o DOMAIN_ITALIAN
+          o DOMAIN_POLISH
+          o DOMAIN_PORTUGUESE
+          o DOMAIN_SWEDISH
+          o DOMAIN_TURKISH
+          o DOMAIN_RUSSIAN
+          o DOMAIN_JAPANESE
+          o DOMAIN_CHINESE 
+        """
+        
+        artist = _url_safe(self.get_artist().get_name())
+        title = _url_safe(self.get_title())
+        
+        return self.network._get_url(domain_name, "track") %{'domain': self.network._get_language_domain(domain_name), 'artist': artist, 'title': title}
+    
+    def get_shouts(self, limit=50):
+        """
+            Returns a sequqence of Shout objects
+        """
+        
+        shouts = []
+        for node in _collect_nodes(limit, self, "track.getShouts", False):
+            shouts.append(Shout(
+                                _extract(node, "body"),
+                                User(_extract(node, "author"), self.network),
+                                _extract(node, "date")
+                                )
+                            )
+        return shouts
+        
+class Group(_BaseObject):
+    """A Last.fm group."""
+    
+    name = None
+    
+    def __init__(self, group_name, network):
+        _BaseObject.__init__(self, network)
+        
+        self.name = group_name
+    
+    def __repr__(self):
+        return "pylast.Group(%s, %s)" %(repr(self.name), repr(self.network))
+    
+    @_string_output
+    def __str__(self):
+        return self.get_name()
+    
+    def __eq__(self, other):
+        return self.get_name().lower() == other.get_name().lower()
+    
+    def __ne__(self, other):
+        return self.get_name() != other.get_name()
+    
+    def _get_params(self):
+        return {'group': self.get_name()}
+    
+    def get_name(self):
+        """Returns the group name. """
+        return self.name
+    
+    def get_weekly_chart_dates(self):
+        """Returns a list of From and To tuples for the available charts."""
+        
+        doc = self._request("group.getWeeklyChartList", True)
+        
+        seq = []
+        for node in doc.getElementsByTagName("chart"):
+            seq.append( (node.getAttribute("from"), node.getAttribute("to")) )
+        
+        return seq
+    
+    def get_weekly_artist_charts(self, from_date = None, to_date = None):
+        """Returns the weekly artist charts for the week starting from the from_date value to the to_date value."""
+        
+        params = self._get_params()
+        if from_date and to_date:
+            params["from"] = from_date
+            params["to"] = to_date
+        
+        doc = self._request("group.getWeeklyArtistChart", True, params)
+        
+        seq = []
+        for node in doc.getElementsByTagName("artist"):
+            item = Artist(_extract(node, "name"), self.network)
+            weight = _number(_extract(node, "playcount"))
+            seq.append(TopItem(item, weight))
+        
+        return seq
+
+    def get_weekly_album_charts(self, from_date = None, to_date = None):
+        """Returns the weekly album charts for the week starting from the from_date value to the to_date value."""
+        
+        params = self._get_params()
+        if from_date and to_date:
+            params["from"] = from_date
+            params["to"] = to_date
+        
+        doc = self._request("group.getWeeklyAlbumChart", True, params)
+        
+        seq = []
+        for node in doc.getElementsByTagName("album"):
+            item = Album(_extract(node, "artist"), _extract(node, "name"), self.network)
+            weight = _number(_extract(node, "playcount"))
+            seq.append(TopItem(item, weight))
+        
+        return seq
+
+    def get_weekly_track_charts(self, from_date = None, to_date = None):
+        """Returns the weekly track charts for the week starting from the from_date value to the to_date value."""
+        
+        params = self._get_params()
+        if from_date and to_date:
+            params["from"] = from_date
+            params["to"] = to_date
+        
+        doc = self._request("group.getWeeklyTrackChart", True, params)
+        
+        seq = []
+        for node in doc.getElementsByTagName("track"):
+            item = Track(_extract(node, "artist"), _extract(node, "name"), self.network)
+            weight = _number(_extract(node, "playcount"))
+            seq.append(TopItem(item, weight))
+        
+        return seq
+        
+    def get_url(self, domain_name = DOMAIN_ENGLISH):
+        """Returns the url of the group page on the network. 
+        * domain_name: The network's language domain. Possible values:
+          o DOMAIN_ENGLISH
+          o DOMAIN_GERMAN
+          o DOMAIN_SPANISH
+          o DOMAIN_FRENCH
+          o DOMAIN_ITALIAN
+          o DOMAIN_POLISH
+          o DOMAIN_PORTUGUESE
+          o DOMAIN_SWEDISH
+          o DOMAIN_TURKISH
+          o DOMAIN_RUSSIAN
+          o DOMAIN_JAPANESE
+          o DOMAIN_CHINESE 
+        """
+        
+        name = _url_safe(self.get_name())
+        
+        return self.network._get_url(domain_name, "group") %{'name': name}
+    
+    def get_members(self, limit=50):
+        """
+            Returns a sequence of User objects
+            if limit==None it will return all
+        """
+        
+        nodes = _collect_nodes(limit, self, "group.getMembers", False)
+        
+        users = []
+        
+        for node in nodes:
+            users.append(User(_extract(node, "name"), self.network))
+        
+        return users
+
+class XSPF(_BaseObject):
+    "A Last.fm XSPF playlist."""
+    
+    uri = None
+    
+    def __init__(self, uri, network):
+        _BaseObject.__init__(self, network)
+        
+        self.uri = uri
+    
+    def _get_params(self):
+        return {'playlistURL': self.get_uri()}
+    
+    @_string_output
+    def __str__(self):
+        return self.get_uri()
+    
+    def __eq__(self, other):
+        return self.get_uri() == other.get_uri()
+    
+    def __ne__(self, other):
+        return self.get_uri() != other.get_uri()
+    
+    def get_uri(self):
+        """Returns the Last.fm playlist URI. """
+        
+        return self.uri
+    
+    def get_tracks(self):
+        """Returns the tracks on this playlist."""
+        
+        doc = self._request('playlist.fetch', True)
+        
+        seq = []
+        for n in doc.getElementsByTagName('track'):
+            title = _extract(n, 'title')
+            artist = _extract(n, 'creator')
+            
+            seq.append(Track(artist, title, self.network))
+        
+        return seq
+
+class User(_BaseObject):
+    """A Last.fm user."""
+    
+    name = None
+    
+    def __init__(self, user_name, network):
+        _BaseObject.__init__(self, network)
+        
+        self.name = user_name
+        
+        self._past_events_index = 0
+        self._recommended_events_index = 0
+        self._recommended_artists_index = 0
+    
+    def __repr__(self):
+        return "pylast.User(%s, %s)" %(repr(self.name), repr(self.network))
+    
+    @_string_output
+    def __str__(self):
+        return self.get_name()
+    
+    def __eq__(self, another):
+        return self.get_name() == another.get_name()
+    
+    def __ne__(self, another):
+        return self.get_name() != another.get_name()
+    
+    def _get_params(self):
+        return {"user": self.get_name()}
+        
+    def get_name(self, properly_capitalized=False):
+        """Returns the nuser name."""
+        
+        if properly_capitalized:
+            self.name = _extract(self._request("user.getInfo", True), "name")
+        
+        return self.name
+    
+    def get_upcoming_events(self):
+        """Returns all the upcoming events for this user. """
+        
+        doc = self._request('user.getEvents', True)
+        
+        ids = _extract_all(doc, 'id')
+        events = []
+        
+        for e_id in ids:
+            events.append(Event(e_id, self.network))
+        
+        return events
+    
+    def get_friends(self, limit = 50):
+        """Returns a list of the user's friends. """
+        
+        seq = []
+        for node in _collect_nodes(limit, self, "user.getFriends", False):
+            seq.append(User(_extract(node, "name"), self.network))
+        
+        return seq
+    
+    def get_loved_tracks(self, limit=50):
+        """Returns this user's loved track as a sequence of LovedTrack objects
+        in reverse order of their timestamp, all the way back to the first track.
+        
+        If limit==None, it will try to pull all the available data.
+        
+        This method uses caching. Enable caching only if you're pulling a
+        large amount of data.
+        
+        Use extract_items() with the return of this function to
+        get only a sequence of Track objects with no playback dates. """
+        
+        params = self._get_params()
+        if limit:
+            params['limit'] = limit
+        
+        seq = []
+        for track in _collect_nodes(limit, self, "user.getLovedTracks", True, params):
+                
+            title = _extract(track, "name")
+            artist = _extract(track, "name", 1)
+            date = _extract(track, "date")
+            timestamp = track.getElementsByTagName("date")[0].getAttribute("uts")
+                
+            seq.append(LovedTrack(Track(artist, title, self.network), date, timestamp))
+        
+        return seq
+    
+    def get_neighbours(self, limit = 50):
+        """Returns a list of the user's friends."""
+        
+        params = self._get_params()
+        if limit:
+            params['limit'] = limit
+        
+        doc = self._request('user.getNeighbours', True, params)
+        
+        seq = []
+        names = _extract_all(doc, 'name')
+        
+        for name in names:
+            seq.append(User(name, self.network))
+        
+        return seq
+        
+    def get_past_events(self, limit=50):
+        """
+        Returns a sequence of Event objects
+        if limit==None it will return all
+        """
+        
+        seq = []
+        for n in _collect_nodes(limit, self, "user.getPastEvents", False):
+            seq.append(Event(_extract(n, "id"), self.network))
+
+        return seq
+                
+    def get_playlists(self):
+        """Returns a list of Playlists that this user owns."""
+        
+        doc = self._request("user.getPlaylists", True)
+        
+        playlists = []
+        for playlist_id in _extract_all(doc, "id"):
+            playlists.append(Playlist(self.get_name(), playlist_id, self.network))
+        
+        return playlists
+    
+    def get_now_playing(self):
+        """Returns the currently playing track, or None if nothing is playing. """
+        
+        params = self._get_params()
+        params['limit'] = '1'
+        
+        doc = self._request('user.getRecentTracks', False, params)
+        
+        e = doc.getElementsByTagName('track')[0]
+        
+        if not e.hasAttribute('nowplaying'):
+            return None
+        
+        artist = _extract(e, 'artist')
+        title = _extract(e, 'name')
+        
+        return Track(artist, title, self.network)
+
+
+    def get_recent_tracks(self, limit = 10):
+        """Returns this user's played track as a sequence of PlayedTrack objects
+        in reverse order of their playtime, all the way back to the first track.
+        
+        If limit==None, it will try to pull all the available data.
+        
+        This method uses caching. Enable caching only if you're pulling a
+        large amount of data.
+        
+        Use extract_items() with the return of this function to
+        get only a sequence of Track objects with no playback dates. """
+        
+        params = self._get_params()
+        if limit:
+            params['limit'] = limit
+        
+        seq = []
+        for track in _collect_nodes(limit, self, "user.getRecentTracks", True, params):
+            
+            if track.hasAttribute('nowplaying'):
+                continue    #to prevent the now playing track from sneaking in here
+                
+            title = _extract(track, "name")
+            artist = _extract(track, "artist")
+            date = _extract(track, "date")
+            timestamp = track.getElementsByTagName("date")[0].getAttribute("uts")
+                
+            seq.append(PlayedTrack(Track(artist, title, self.network), date, timestamp))
+        
+        return seq
+    
+    def get_id(self):
+        """Returns the user id."""
+        
+        doc = self._request("user.getInfo", True)
+        
+        return _extract(doc, "id")
+    
+    def get_language(self):
+        """Returns the language code of the language used by the user."""
+        
+        doc = self._request("user.getInfo", True)
+        
+        return _extract(doc, "lang")
+    
+    def get_country(self):
+        """Returns the name of the country of the user."""
+        
+        doc = self._request("user.getInfo", True)
+        
+        return Country(_extract(doc, "country"), self.network)
+    
+    def get_age(self):
+        """Returns the user's age."""
+        
+        doc = self._request("user.getInfo", True)
+        
+        return _number(_extract(doc, "age"))
+    
+    def get_gender(self):
+        """Returns the user's gender. Either USER_MALE or USER_FEMALE."""
+        
+        doc = self._request("user.getInfo", True)
+        
+        value = _extract(doc, "gender")
+        
+        if value == 'm':
+            return USER_MALE
+        elif value == 'f':
+            return USER_FEMALE
+        
+        return None
+    
+    def is_subscriber(self):
+        """Returns whether the user is a subscriber or not. True or False."""
+        
+        doc = self._request("user.getInfo", True)
+        
+        return _extract(doc, "subscriber") == "1"
+    
+    def get_playcount(self):
+        """Returns the user's playcount so far."""
+        
+        doc = self._request("user.getInfo", True)
+        
+        return _number(_extract(doc, "playcount"))
+        
+    def get_top_albums(self, period = PERIOD_OVERALL):
+        """Returns the top albums played by a user. 
+        * period: The period of time. Possible values:
+          o PERIOD_OVERALL
+          o PERIOD_7DAYS
+          o PERIOD_3MONTHS
+          o PERIOD_6MONTHS
+          o PERIOD_12MONTHS 
+        """
+        
+        params = self._get_params()
+        params['period'] = period
+        
+        doc = self._request('user.getTopAlbums', True, params)
+        
+        seq = []
+        for album in doc.getElementsByTagName('album'):
+            name = _extract(album, 'name')
+            artist = _extract(album, 'name', 1)
+            playcount = _extract(album, "playcount")
+            
+            seq.append(TopItem(Album(artist, name, self.network), playcount))
+        
+        return seq
+    
+    def get_top_artists(self, period = PERIOD_OVERALL):
+        """Returns the top artists played by a user. 
+        * period: The period of time. Possible values:
+          o PERIOD_OVERALL
+          o PERIOD_7DAYS
+          o PERIOD_3MONTHS
+          o PERIOD_6MONTHS
+          o PERIOD_12MONTHS 
+        """
+        
+        params = self._get_params()
+        params['period'] = period
+        
+        doc = self._request('user.getTopArtists', True, params)
+        
+        seq = []
+        for node in doc.getElementsByTagName('artist'):
+            name = _extract(node, 'name')
+            playcount = _extract(node, "playcount")
+            
+            seq.append(TopItem(Artist(name, self.network), playcount))
+        
+        return seq
+    
+    def get_top_tags(self, limit=None):
+        """Returns a sequence of the top tags used by this user with their counts as TopItem objects. 
+        * limit: The limit of how many tags to return. 
+        """
+        
+        doc = self._request("user.getTopTags", True)
+        
+        seq = []
+        for node in doc.getElementsByTagName("tag"):
+            seq.append(TopItem(Tag(_extract(node, "name"), self.network), _extract(node, "count")))
+        
+        if limit:
+            seq = seq[:limit]
+        
+        return seq
+    
+    def get_top_tracks(self, period = PERIOD_OVERALL):
+        """Returns the top tracks played by a user. 
+        * period: The period of time. Possible values:
+          o PERIOD_OVERALL
+          o PERIOD_7DAYS
+          o PERIOD_3MONTHS
+          o PERIOD_6MONTHS
+          o PERIOD_12MONTHS 
+        """
+        
+        params = self._get_params()
+        params['period'] = period
+        
+        doc = self._request('user.getTopTracks', True, params)
+        
+        seq = []
+        for track in doc.getElementsByTagName('track'):
+            name = _extract(track, 'name')
+            artist = _extract(track, 'name', 1)
+            playcount = _extract(track, "playcount")
+            
+            seq.append(TopItem(Track(artist, name, self.network), playcount))
+        
+        return seq
+    
+    def get_weekly_chart_dates(self):
+        """Returns a list of From and To tuples for the available charts."""
+        
+        doc = self._request("user.getWeeklyChartList", True)
+        
+        seq = []
+        for node in doc.getElementsByTagName("chart"):
+            seq.append( (node.getAttribute("from"), node.getAttribute("to")) )
+        
+        return seq
+    
+    def get_weekly_artist_charts(self, from_date = None, to_date = None):
+        """Returns the weekly artist charts for the week starting from the from_date value to the to_date value."""
+        
+        params = self._get_params()
+        if from_date and to_date:
+            params["from"] = from_date
+            params["to"] = to_date
+        
+        doc = self._request("user.getWeeklyArtistChart", True, params)
+        
+        seq = []
+        for node in doc.getElementsByTagName("artist"):
+            item = Artist(_extract(node, "name"), self.network)
+            weight = _number(_extract(node, "playcount"))
+            seq.append(TopItem(item, weight))
+        
+        return seq
+
+    def get_weekly_album_charts(self, from_date = None, to_date = None):
+        """Returns the weekly album charts for the week starting from the from_date value to the to_date value."""
+        
+        params = self._get_params()
+        if from_date and to_date:
+            params["from"] = from_date
+            params["to"] = to_date
+        
+        doc = self._request("user.getWeeklyAlbumChart", True, params)
+        
+        seq = []
+        for node in doc.getElementsByTagName("album"):
+            item = Album(_extract(node, "artist"), _extract(node, "name"), self.network)
+            weight = _number(_extract(node, "playcount"))
+            seq.append(TopItem(item, weight))
+        
+        return seq
+
+    def get_weekly_track_charts(self, from_date = None, to_date = None):
+        """Returns the weekly track charts for the week starting from the from_date value to the to_date value."""
+        
+        params = self._get_params()
+        if from_date and to_date:
+            params["from"] = from_date
+            params["to"] = to_date
+        
+        doc = self._request("user.getWeeklyTrackChart", True, params)
+        
+        seq = []
+        for node in doc.getElementsByTagName("track"):
+            item = Track(_extract(node, "artist"), _extract(node, "name"), self.network)
+            weight = _number(_extract(node, "playcount"))
+            seq.append(TopItem(item, weight))
+        
+        return seq
+    
+    def compare_with_user(self, user, shared_artists_limit = None):
+        """Compare this user with another Last.fm user.
+        Returns a sequence (tasteometer_score, (shared_artist1, shared_artist2, ...))
+        user: A User object or a username string/unicode object.
+        """
+        
+        if isinstance(user, User):
+            user = user.get_name()
+        
+        params = self._get_params()
+        if shared_artists_limit:
+            params['limit'] = shared_artists_limit
+        params['type1'] = 'user'
+        params['type2'] = 'user'
+        params['value1'] = self.get_name()
+        params['value2'] = user
+        
+        doc = self._request('tasteometer.compare', False, params)
+        
+        score = _extract(doc, 'score')
+        
+        artists = doc.getElementsByTagName('artists')[0]
+        shared_artists_names = _extract_all(artists, 'name')
+        
+        shared_artists_seq = []
+        
+        for name in shared_artists_names:
+            shared_artists_seq.append(Artist(name, self.network))
+        
+        return (score, shared_artists_seq)
+    
+    def get_image(self):
+        """Returns the user's avatar."""
+            
+        doc = self._request("user.getInfo", True)
+        
+        return _extract(doc, "image")
+    
+    def get_url(self, domain_name = DOMAIN_ENGLISH):
+        """Returns the url of the user page on the network. 
+        * domain_name: The network's language domain. Possible values:
+          o DOMAIN_ENGLISH
+          o DOMAIN_GERMAN
+          o DOMAIN_SPANISH
+          o DOMAIN_FRENCH
+          o DOMAIN_ITALIAN
+          o DOMAIN_POLISH
+          o DOMAIN_PORTUGUESE
+          o DOMAIN_SWEDISH
+          o DOMAIN_TURKISH
+          o DOMAIN_RUSSIAN
+          o DOMAIN_JAPANESE
+          o DOMAIN_CHINESE 
+        """
+        
+        name = _url_safe(self.get_name())
+        
+        return self.network._get_url(domain_name, "user") %{'name': name}
+
+    def get_library(self):
+        """Returns the associated Library object. """
+        
+        return Library(self, self.network)
+
+    def get_shouts(self, limit=50):
+        """
+            Returns a sequqence of Shout objects
+        """
+        
+        shouts = []
+        for node in _collect_nodes(limit, self, "user.getShouts", False):
+            shouts.append(Shout(
+                                _extract(node, "body"),
+                                User(_extract(node, "author"), self.network),
+                                _extract(node, "date")
+                                )
+                            )
+        return shouts
+    
+    def shout(self, message):
+        """
+            Post a shout
+        """
+        
+        params = self._get_params()
+        params["message"] = message
+        
+        self._request("user.Shout", False, params)
+
+class AuthenticatedUser(User):
+    def __init__(self, network):
+        User.__init__(self, "", network);
+    
+    def _get_params(self):
+        return {"user": self.get_name()}
+        
+    def get_name(self):
+        """Returns the name of the authenticated user."""
+        
+        doc = self._request("user.getInfo", True, {"user": ""})    # hack
+        
+        self.name = _extract(doc, "name")
+        return self.name
+        
+    def get_recommended_events(self, limit=50):
+        """
+        Returns a sequence of Event objects
+        if limit==None it will return all
+        """
+        
+        seq = []
+        for node in _collect_nodes(limit, self, "user.getRecommendedEvents", False):
+            seq.append(Event(_extract(node, "id"), self.network))
+        
+        return seq
+        
+    def get_recommended_artists(self, limit=50):
+        """
+        Returns a sequence of Event objects
+        if limit==None it will return all
+        """
+        
+        seq = []
+        for node in _collect_nodes(limit, self, "user.getRecommendedArtists", False):
+            seq.append(Artist(_extract(node, "name"), self.network))
+        
+        return seq
+    
+class _Search(_BaseObject):
+    """An abstract class. Use one of its derivatives."""
+    
+    def __init__(self, ws_prefix, search_terms, network):
+        _BaseObject.__init__(self, network)
+        
+        self._ws_prefix = ws_prefix
+        self.search_terms = search_terms
+        
+        self._last_page_index = 0
+    
+    def _get_params(self):
+        params = {}
+        
+        for key in self.search_terms.keys():
+            params[key] = self.search_terms[key]
+        
+        return params
+    
+    def get_total_result_count(self):
+        """Returns the total count of all the results."""
+        
+        doc = self._request(self._ws_prefix + ".search", True)
+        
+        return _extract(doc, "opensearch:totalResults")
+    
+    def _retreive_page(self, page_index):
+        """Returns the node of matches to be processed"""
+        
+        params = self._get_params()
+        params["page"] = str(page_index)
+        doc = self._request(self._ws_prefix + ".search", True, params)
+        
+        return doc.getElementsByTagName(self._ws_prefix + "matches")[0]
+    
+    def _retrieve_next_page(self):
+        self._last_page_index += 1
+        return self._retreive_page(self._last_page_index)
+
+class AlbumSearch(_Search):
+    """Search for an album by name."""
+    
+    def __init__(self, album_name, network):
+        
+        _Search.__init__(self, "album", {"album": album_name}, network)
+    
+    def get_next_page(self):
+        """Returns the next page of results as a sequence of Album objects."""
+        
+        master_node = self._retrieve_next_page()
+        
+        seq = []
+        for node in master_node.getElementsByTagName("album"):
+            seq.append(Album(_extract(node, "artist"), _extract(node, "name"), self.network))
+        
+        return seq
+
+class ArtistSearch(_Search):
+    """Search for an artist by artist name."""
+    
+    def __init__(self, artist_name, network):
+        _Search.__init__(self, "artist", {"artist": artist_name}, network)
+
+    def get_next_page(self):
+        """Returns the next page of results as a sequence of Artist objects."""
+        
+        master_node = self._retrieve_next_page()
+        
+        seq = []
+        for node in master_node.getElementsByTagName("artist"):
+            artist = Artist(_extract(node, "name"), self.network)
+            artist.listener_count = _number(_extract(node, "listeners"))
+            seq.append(artist)
+        
+        return seq
+
+class TagSearch(_Search):
+    """Search for a tag by tag name."""
+    
+    def __init__(self, tag_name, network):
+        
+        _Search.__init__(self, "tag", {"tag": tag_name}, network)
+        
+    def get_next_page(self):
+        """Returns the next page of results as a sequence of Tag objects."""
+        
+        master_node = self._retrieve_next_page()
+        
+        seq = []
+        for node in master_node.getElementsByTagName("tag"):
+            tag = Tag(_extract(node, "name"), self.network)
+            tag.tag_count = _number(_extract(node, "count"))
+            seq.append(tag)
+        
+        return seq
+
+class TrackSearch(_Search):
+    """Search for a track by track title. If you don't wanna narrow the results down
+    by specifying the artist name, set it to empty string."""
+    
+    def __init__(self, artist_name, track_title, network):
+        
+        _Search.__init__(self, "track", {"track": track_title, "artist": artist_name}, network)
+
+    def get_next_page(self):
+        """Returns the next page of results as a sequence of Track objects."""
+        
+        master_node = self._retrieve_next_page()
+        
+        seq = []
+        for node in master_node.getElementsByTagName("track"):
+            track = Track(_extract(node, "artist"), _extract(node, "name"), self.network)
+            track.listener_count = _number(_extract(node, "listeners"))
+            seq.append(track)
+        
+        return seq
+
+class VenueSearch(_Search):
+    """Search for a venue by its name. If you don't wanna narrow the results down
+    by specifying a country, set it to empty string."""
+    
+    def __init__(self, venue_name, country_name, network):
+        
+        _Search.__init__(self, "venue", {"venue": venue_name, "country": country_name}, network)
+
+    def get_next_page(self):
+        """Returns the next page of results as a sequence of Track objects."""
+        
+        master_node = self._retrieve_next_page()
+        
+        seq = []
+        for node in master_node.getElementsByTagName("venue"):
+            seq.append(Venue(_extract(node, "id"), self.network))
+        
+        return seq
+
+class Venue(_BaseObject):
+    """A venue where events are held."""
+    
+    # TODO: waiting for a venue.getInfo web service to use.
+    
+    id = None
+    
+    def __init__(self, id, network):
+        _BaseObject.__init__(self, network)
+        
+        self.id = _number(id)
+    
+    def __repr__(self):
+        return "pylast.Venue(%s, %s)" %(repr(self.id), repr(self.network))
+    
+    @_string_output
+    def __str__(self):
+        return "Venue #" + str(self.id)
+    
+    def __eq__(self, other):
+        return self.get_id() == other.get_id()
+    
+    def _get_params(self):
+        return {"venue": self.get_id()}
+        
+    def get_id(self):
+        """Returns the id of the venue."""
+        
+        return self.id
+    
+    def get_upcoming_events(self):
+        """Returns the upcoming events in this venue."""
+        
+        doc = self._request("venue.getEvents", True)
+        
+        seq = []
+        for node in doc.getElementsByTagName("event"):
+            seq.append(Event(_extract(node, "id"), self.network))
+        
+        return seq
+    
+    def get_past_events(self):
+        """Returns the past events held in this venue."""
+        
+        doc = self._request("venue.getEvents", True)
+        
+        seq = []
+        for node in doc.getElementsByTagName("event"):
+            seq.append(Event(_extract(node, "id"), self.network))
+        
+        return seq
+
+def md5(text):
+    """Returns the md5 hash of a string."""
+    
+    h = hashlib.md5()
+    h.update(_unicode(text).encode("utf-8"))
+    
+    return h.hexdigest()
+
+def _unicode(text):
+    if sys.version_info[0] == 3:
+        if type(text) in (bytes, bytearray):
+            return str(text, "utf-8")
+        elif type(text) == str:
+            return text
+        else:
+            return str(text)
+        
+    elif sys.version_info[0] ==2:
+        if type(text) in (str,):
+            return unicode(text, "utf-8")
+        elif type(text) == unicode:
+            return text
+        else:
+            return unicode(text)
+
+def _string(text):
+    """For Python2 routines that can only process str type."""
+    
+    if sys.version_info[0] == 3:
+        if type(text) != str:
+            return str(text)
+        else:
+            return text
+    
+    elif sys.version_info[0] == 2:
+        if type(text) == str:
+            return text
+        
+        if type(text) == int:
+            return str(text)
+        
+        return text.encode("utf-8")
+
+def _collect_nodes(limit, sender, method_name, cacheable, params=None):
+    """
+        Returns a sequqnce of dom.Node objects about as close to
+        limit as possible
+    """
+    
+    if not params:
+        params = sender._get_params()
+    
+    nodes = []
+    page = 1
+    end_of_pages = False
+    
+    while not end_of_pages and (not limit or (limit and len(nodes) < limit)):
+        params["page"] = str(page)
+        doc = sender._request(method_name, cacheable, params)
+        
+        main = doc.documentElement.childNodes[1]
+        
+        if main.hasAttribute("totalPages"):
+            total_pages = _number(main.getAttribute("totalPages"))
+        elif main.hasAttribute("totalpages"):
+            total_pages = _number(main.getAttribute("totalpages"))
+        else:
+            raise Exception("No total pages attribute")
+        
+        for node in main.childNodes:
+            if not node.nodeType == xml.dom.Node.TEXT_NODE and len(nodes) < limit:
+                nodes.append(node)
+        
+        if page >= total_pages:
+            end_of_pages = True
+        
+        page += 1
+    
+    return nodes
+    
+def _extract(node, name, index = 0):
+    """Extracts a value from the xml string"""
+    
+    nodes = node.getElementsByTagName(name)
+    
+    if len(nodes):
+        if nodes[index].firstChild:
+            return _unescape_htmlentity(nodes[index].firstChild.data.strip())
+    else:
+        return None
+
+def _extract_all(node, name, limit_count = None):
+    """Extracts all the values from the xml string. returning a list."""
+    
+    seq = []
+    
+    for i in range(0, len(node.getElementsByTagName(name))):
+        if len(seq) == limit_count:
+            break
+        
+        seq.append(_extract(node, name, i))
+    
+    return seq
+
+def _url_safe(text):
+    """Does all kinds of tricks on a text to make it safe to use in a url."""
+    
+    return url_quote_plus(url_quote_plus(_string(text))).lower()
+
+def _number(string):
+    """
+        Extracts an int from a string. Returns a 0 if None or an empty string was passed
+    """
+    
+    if not string:
+        return 0
+    elif string == "":
+        return 0
+    else:
+        try:
+            return int(string)
+        except ValueError:
+            return float(string)
+
+def _unescape_htmlentity(string):
+    
+    #string = _unicode(string)  
+    
+    mapping = htmlentitydefs.name2codepoint
+    for key in mapping:
+        string = string.replace("&%s;" %key, unichr(mapping[key]))
+    
+    return string
+    
+def extract_items(topitems_or_libraryitems):
+    """Extracts a sequence of items from a sequence of TopItem or LibraryItem objects."""
+    
+    seq = []
+    for i in topitems_or_libraryitems:
+        seq.append(i.item)
+    
+    return seq
+
+class ScrobblingError(Exception):
+    def __init__(self, message):
+        Exception.__init__(self)
+        self.message = message
+    
+    @_string_output
+    def __str__(self):
+        return self.message
+
+class BannedClientError(ScrobblingError):
+    def __init__(self):
+        ScrobblingError.__init__(self, "This version of the client has been banned")
+
+class BadAuthenticationError(ScrobblingError):
+    def __init__(self):
+        ScrobblingError.__init__(self, "Bad authentication token")
+
+class BadTimeError(ScrobblingError):
+    def __init__(self):
+        ScrobblingError.__init__(self, "Time provided is not close enough to current time")
+
+class BadSessionError(ScrobblingError):
+    def __init__(self):
+        ScrobblingError.__init__(self, "Bad session id, consider re-handshaking")
+
+class _ScrobblerRequest(object):
+    
+    def __init__(self, url, params, network, type="POST"):
+        
+        for key in params:
+                params[key] = str(params[key])
+        
+        self.params = params
+        self.type = type
+        (self.hostname, self.subdir) = url_split_host(url[len("http:"):])
+        self.network = network
+    
+    def execute(self):
+        """Returns a string response of this request."""
+        
+        connection = HTTPConnection(self.hostname)
+
+        data = []
+        for name in self.params.keys():
+            value = url_quote_plus(self.params[name])
+            data.append('='.join((name, value)))
+        data = "&".join(data)
+        
+        headers = {
+            "Content-type": "application/x-www-form-urlencoded",
+            "Accept-Charset": "utf-8",
+            "User-Agent": "pylast" + "/" + __version__,
+            "HOST": self.hostname
+            }
+        
+        if self.type == "GET":
+            connection.request("GET", self.subdir + "?" + data, headers = headers)
+        else:
+            connection.request("POST", self.subdir, data, headers)
+        response = _unicode(connection.getresponse().read())
+        
+        self._check_response_for_errors(response)
+        
+        return response
+        
+    def _check_response_for_errors(self, response):
+        """When passed a string response it checks for erros, raising
+        any exceptions as necessary."""
+        
+        lines = response.split("\n")
+        status_line = lines[0]
+        
+        if status_line == "OK":
+            return
+        elif status_line == "BANNED":
+            raise BannedClientError()
+        elif status_line == "BADAUTH":
+            raise BadAuthenticationError()
+        elif status_line == "BADTIME":
+            raise BadTimeError()
+        elif status_line == "BADSESSION":
+            raise BadSessionError()
+        elif status_line.startswith("FAILED "):
+            reason = status_line[status_line.find("FAILED ")+len("FAILED "):]
+            raise ScrobblingError(reason)
+    
+class Scrobbler(object):
+    """A class for scrobbling tracks to Last.fm"""
+    
+    session_id = None
+    nowplaying_url = None
+    submissions_url = None
+    
+    def __init__(self, network, client_id, client_version):
+        self.client_id = client_id
+        self.client_version = client_version
+        self.username = network.username
+        self.password = network.password_hash
+        self.network = network
+    
+    def _do_handshake(self):
+        """Handshakes with the server"""
+        
+        timestamp = str(int(time.time()))
+        
+        if self.password and self.username:
+            token = md5(self.password + timestamp)
+        elif self.network.api_key and self.network.api_secret and self.network.session_key:
+            if not self.username:
+                self.username = self.network.get_authenticated_user().get_name()
+            token = md5(self.network.api_secret + timestamp)
+        
+        params = {"hs": "true", "p": "1.2.1", "c": self.client_id,
+            "v": self.client_version, "u": self.username, "t": timestamp,
+            "a": token}
+        
+        if self.network.session_key and self.network.api_key:
+            params["sk"] = self.network.session_key
+            params["api_key"] = self.network.api_key
+        
+        server = self.network.submission_server
+        response = _ScrobblerRequest(server, params, self.network, "GET").execute().split("\n")
+        
+        self.session_id = response[1]
+        self.nowplaying_url = response[2]
+        self.submissions_url = response[3]
+    
+    def _get_session_id(self, new = False):
+        """Returns a handshake. If new is true, then it will be requested from the server
+        even if one was cached."""
+        
+        if not self.session_id or new:
+            self._do_handshake()
+        
+        return self.session_id
+    
+    def report_now_playing(self, artist, title, album = "", duration = "", track_number = "", mbid = ""):
+        
+        _deprecation_warning("DeprecationWarning: Use Netowrk.update_now_playing(...) instead")
+        
+        params = {"s": self._get_session_id(), "a": artist, "t": title,
+            "b": album, "l": duration, "n": track_number, "m": mbid}
+        
+        try:
+            _ScrobblerRequest(self.nowplaying_url, params, self.network).execute()
+        except BadSessionError:
+            self._do_handshake()
+            self.report_now_playing(artist, title, album, duration, track_number, mbid)
+    
+    def scrobble(self, artist, title, time_started, source, mode, duration, album="", track_number="", mbid=""):
+        """Scrobble a track. parameters:
+            artist: Artist name.
+            title: Track title.
+            time_started: UTC timestamp of when the track started playing.
+            source: The source of the track
+                SCROBBLE_SOURCE_USER: Chosen by the user (the most common value, unless you have a reason for choosing otherwise, use this).
+                SCROBBLE_SOURCE_NON_PERSONALIZED_BROADCAST: Non-personalised broadcast (e.g. Shoutcast, BBC Radio 1).
+                SCROBBLE_SOURCE_PERSONALIZED_BROADCAST: Personalised recommendation except Last.fm (e.g. Pandora, Launchcast).
+                SCROBBLE_SOURCE_LASTFM: ast.fm (any mode). In this case, the 5-digit recommendation_key value must be set.
+                SCROBBLE_SOURCE_UNKNOWN: Source unknown.
+            mode: The submission mode
+                SCROBBLE_MODE_PLAYED: The track was played.
+                SCROBBLE_MODE_LOVED: The user manually loved the track (implies a listen)
+                SCROBBLE_MODE_SKIPPED: The track was skipped (Only if source was Last.fm)
+                SCROBBLE_MODE_BANNED: The track was banned (Only if source was Last.fm)
+            duration: Track duration in seconds.
+            album: The album name.
+            track_number: The track number on the album.
+            mbid: MusicBrainz ID.
+        """
+        
+        _deprecation_warning("DeprecationWarning: Use Network.scrobble(...) instead")
+        
+        params = {"s": self._get_session_id(), "a[0]": _string(artist), "t[0]": _string(title),
+            "i[0]": str(time_started), "o[0]": source, "r[0]": mode, "l[0]": str(duration),
+            "b[0]": _string(album), "n[0]": track_number, "m[0]": mbid}
+        
+        _ScrobblerRequest(self.submissions_url, params, self.network).execute()
+    
+    def scrobble_many(self, tracks):
+        """
+            Scrobble several tracks at once.
+            
+            tracks: A sequence of a sequence of parameters for each trach. The order of parameters
+                is the same as if passed to the scrobble() method.
+        """
+        
+        _deprecation_warning("DeprecationWarning: Use Network.scrobble_many(...) instead")
+        
+        remainder = []
+        
+        if len(tracks) > 50:
+            remainder = tracks[50:]
+            tracks = tracks[:50]
+        
+        params = {"s": self._get_session_id()}
+        
+        i = 0
+        for t in tracks:
+            _pad_list(t, 9, "")
+            params["a[%s]" % str(i)] = _string(t[0])
+            params["t[%s]" % str(i)] = _string(t[1])
+            params["i[%s]" % str(i)] = str(t[2])
+            params["o[%s]" % str(i)] = t[3]
+            params["r[%s]" % str(i)] = t[4]
+            params["l[%s]" % str(i)] = str(t[5])
+            params["b[%s]" % str(i)] = _string(t[6])
+            params["n[%s]" % str(i)] = t[7]
+            params["m[%s]" % str(i)] = t[8]
+            
+            i += 1
+        
+        _ScrobblerRequest(self.submissions_url, params, self.network).execute()
+        
+        if remainder:
+            self.scrobble_many(remainder)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/_python_lib/pylast/setup.py	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+
+from distutils.core import setup
+
+import os
+def get_build():
+	path = "./.build"
+	
+	if os.path.exists(path):
+		fp = open(path, "r")
+		build = eval(fp.read())
+		if os.path.exists("./.increase_build"):
+			build += 1
+		fp.close()
+	else:
+		build = 1
+	
+	fp = open(path, "w")
+	fp.write(str(build))
+	fp.close()
+	
+	return str(build)
+
+setup(name = "pylast",
+      version = "0.5." + get_build(),
+      author = "Amr Hassan <amr.hassan@gmail.com>",
+	  description = "A Python interface to Last.fm (and other API compatible social networks)",
+      author_email = "amr.hassan@gmail.com",
+      url = "http://code.google.com/p/pylast/",
+      py_modules = ("pylast",),
+	  license = "Apache2"
+	)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/conversion/extract_buchfink_xls.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,128 @@
+
+
+%seglengths
+%vols
+%periods
+%name
+
+% 
+% datlen=size(data,1);
+% maxseglen=10;
+% clear segvol;
+% clear seglengths;
+% clear repetitions;
+% clear name;
+% 
+% filectr=0;
+% lineptr=15;
+% 
+% while lineptr <= size(textdata,1)
+%     if ~strcmp('',textdata{lineptr,1}) 
+%         path = textdata{lineptr,1};
+%     end
+%     if ~strcmp('',textdata{lineptr,2}) 
+%         filectr=filectr+1;
+%         name{filectr} = strcat(path,'\',textdata{lineptr,2});
+%         datapos=lineptr-14;
+%         
+%         segctr=0;
+%         while ~isnan(data(datapos,2))&& datapos < datlen
+%             segctr=segctr+1;
+%             seglengths(filectr,segctr)= data(datapos,2);
+%             if ~isnan(data(datapos,3))
+%                 repetitions(filectr,segctr)=data(datapos,3);
+%             end
+%             segvol(filectr,segctr)=data(datapos,4);
+%             datapos=datapos+1;
+%             lineptr = lineptr+1;
+%         end
+%     end
+%     lineptr = lineptr+1;
+% end
+
+
+compl_len=sum(seglengths,2);%ins secs
+compl_std=std(compl_len);
+compl_mean=mean(compl_len);
+
+numsegs=seglengths>0;
+numsegs=sum(numsegs,2);
+meannumsegs=mean(numsegs)
+minnumsegs=min(numsegs)
+maxnumsegs=max(numsegs)
+
+for i=1:maxnumsegs %segmentlänge, betrachtet werden jeweils alle segs 
+                    % mit ausreichender länge
+    valid_cols=find(numsegs>=i);
+    mean_seglen(i)=mean(seglengths(valid_cols,i));
+    min_seglen(i)=min(seglengths(valid_cols,i));
+    max_seglen(i)=max(seglengths(valid_cols,i));
+    std_seglen(i)=std(seglengths(valid_cols,i));%in s
+end
+
+% valid_cols=find(numsegs==floor(meannumsegs));
+% for i=1:floor(mean(numsegs)) %segmentlänge, betrachtet werden jeweils alle segs 
+%                     % mit genau floor(mittlerer) länge
+%     mean_seglen2(i)=mean(seglengths(valid_cols,i));
+%     min_seglen2(i)=min(seglengths(valid_cols,i));
+%     max_seglen2(i)=max(seglengths(valid_cols,i));
+%     std_seglen2(i)=std(seglengths(valid_cols,i));%in s
+% end
+
+%längen
+seglen_all=reshape(seglengths,115*6,1);
+goodlens=find(seglen_all>0);
+mean_seglen_all=mean(seglen_all(goodlens));
+std_seglen_all=std(seglen_all(goodlens));
+for i=1:maxnumsegs
+    segs(i)=sum(numsegs==i);
+end
+
+period_segs=sum(repetitions>0,2);
+for i=1:maxnumsegs
+    havenumperiodsegs(i)=sum(period_segs==i);
+end
+segs_period=(repetitions>0);
+sum((period_segs==3)&(numsegs==4))
+sum((period_segs==2)&(numsegs==4))
+sum(((period_segs==4)&(numsegs==5)))
+sum(((period_segs==3)&(numsegs==5)))
+
+better_half_ind=find((period_segs==3)&(numsegs==4));
+better_half_len=seglengths(better_half_ind,:);
+better_half_mean=mean(better_half_len,1);
+better_half_std=std(better_half_len);
+
+%wiederholungen
+period_all=reshape(repetitions,115*6,1);
+goodreps=find(period_all>0);
+period_all=period_all(goodreps);
+peri_all_mean=mean(period_all);
+peri_all_std=std(period_all);
+
+%frequenzen
+freqs = repetitions./(seglengths./1000);
+freqs_all=reshape(freqs,115*6,1);
+freqs_all=freqs_all(find(~isnan(freqs_all) & (freqs_all>0)));
+freqs_all_mean=mean(freqs_all);
+freqs_all_std=std(freqs_all);
+
+
+better_h_f=repetitions(better_half_ind,2:4)./(seglengths(better_half_ind,2:4)./1000);
+better_h_f_mean=mean(better_h_f);
+better_h_f_std=std(better_h_f);
+better_h_f_min=min(better_h_f);
+better_h_f_max=max(better_h_f);
+
+better_half2_ind=find((period_segs==4)&(numsegs==5));
+
+better_h2_f=repetitions(better_half2_ind,2:5)./(seglengths(better_half2_ind,2:5)./1000);
+better_h2_f_mean=mean(better_h2_f);
+better_h2_f_std=std(better_h2_f);
+better_h2_f_min=min(better_h2_f);
+better_h2_f_max=max(better_h2_f);
+
+abweichung_f=better_h_f-repmat(better_h_f_mean,size(better_h_f,1),1);
+corrcoef(abweichung_f)
+abweichung2_f=better_h2_f-repmat(better_h2_f_mean,size(better_h2_f,1),1);
+corrcoef(abweichung2_f)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/conversion/found_time_make_txt.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,75 @@
+%makes textfiles for already found wavs 
+
+clear
+global globalvars;
+addpath('..\vogelst\k-band250905')
+sourcedir='F:\Aufnahmen';
+%sourcedir='F:\Ample';
+%sourcedir='M:\PrograMathe\matlab\work\hiwi\vogelst\testmaterial\online2';
+
+segmentsdir='F:\viele_einzelne_strophen\blaumeise\typ1';
+
+%segmentsdir='F:\viele_einzelne_strophen\fringila_coelebs_buchfink\tst';
+%segmentsdir='M:\PrograMathe\matlab\work\hiwi\vogelst\testmaterial\online';
+
+
+
+%---------------------------------------------z-------------zugehörige dateien suchen 
+allpaths=genpath(sourcedir);
+data_names=dir(strcat(segmentsdir,'\*.wav'));
+psourcedirs = explode(';',allpaths);
+for i = 1:length(data_names)
+    ldata_names{i} = data_names(i).name;
+end
+
+names_done = [];
+relsource_files = {};
+for i = 1:length(psourcedirs)
+    actdir = dir(strcat(psourcedirs{i},'\*.wav'));
+    ldata_names = ldata_names(setdiff(1:length(ldata_names),names_done));
+    for j = 1:length(ldata_names)
+        for k = 1:length(actdir)
+            if(strncmp(actdir(k).name,ldata_names{j},length(ldata_names{j})-(7+2*6+1+3))) && ...
+                    strncmp(substr(ldata_names{j},-(7+4),1),'-',1)
+                names_done = [names_done j];
+                relsource_files= cat(1,relsource_files,{[strcat(psourcedirs{i},'\',actdir(k).name)] [strcat(segmentsdir,'\',ldata_names{j})]});
+            end
+        end
+    end
+end
+
+
+for i=1:size(relsource_files,1)
+     newfilename=char(relsource_files(i,2));
+     position(i,2)= hhmmss_to_s(substr(newfilename,-(7+3),6));
+     position(i,1)= hhmmss_to_s(substr(newfilename,-(7+3+7),6));
+     
+        filetoopen=strcat(newfilename,'.txt');
+        ftoex=dir(filetoopen);
+        if(length(ftoex)==0)
+           FID = fopen(filetoopen,'w');
+           fprintf(FID,'%s','annotations for ');
+           fprintf(FID,'%s',newfilename);
+           fprintf(FID,'\n');
+           fprintf(FID,'%s','sourcefile available at');
+           fprintf(FID,'\n');
+           fprintf(FID,'%s',char(relsource_files(i,1)));
+           fprintf(FID,'\n');
+           fprintf(FID,'%s','time of occurrence in hhmmss format:');
+           fprintf(FID,'\n');
+           fprintf(FID,'%s',s_to_hhmmss(position(i,1)));
+           fprintf(FID,'%s','-');
+           fprintf(FID,'%s',s_to_hhmmss(position(i,2)));
+           fprintf(FID,'\n');
+           fprintf(FID,'%s','in seconds:');
+           fprintf(FID,'\n');
+           fprintf(FID,'%s',sprintf('%d',position(i,1)));
+           fprintf(FID,'\n');
+           fprintf(FID,'%s',sprintf('%d',position(i,2)));
+           fprintf(FID,'\n');
+           fprintf(FID,'%s','comments:');
+
+           fclose(FID);
+        end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/conversion/hhmmss_to_s.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+function out=hhmmss_to_s(in)
+
+h = sscanf(substr(in,0,2),'%d');
+m = sscanf(substr(in,2,2),'%d');
+s = sscanf(substr(in,4,2),'%d');
+
+out=h*3600+m*60+s;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/conversion/process_options.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,132 @@
+% PROCESS_OPTIONS - Processes options passed to a Matlab function.
+%                   This function provides a simple means of
+%                   parsing attribute-value options.  Each option is
+%                   named by a unique string and is given a default
+%                   value.
+%
+% Usage:  [var1, var2, ..., varn[, unused]] = ...
+%           process_options(args, ...
+%                           str1, def1, str2, def2, ..., strn, defn)
+%
+% Arguments:   
+%            args            - a cell array of input arguments, such
+%                              as that provided by VARARGIN.  Its contents
+%                              should alternate between strings and
+%                              values.
+%            str1, ..., strn - Strings that are associated with a 
+%                              particular variable
+%            def1, ..., defn - Default values returned if no option
+%                              is supplied
+%
+% Returns:
+%            var1, ..., varn - values to be assigned to variables
+%            unused          - an optional cell array of those 
+%                              string-value pairs that were unused;
+%                              if this is not supplied, then a
+%                              warning will be issued for each
+%                              option in args that lacked a match.
+%
+% Examples:
+%
+% Suppose we wish to define a Matlab function 'func' that has
+% required parameters x and y, and optional arguments 'u' and 'v'.
+% With the definition
+%
+%   function y = func(x, y, varargin)
+%
+%     [u, v] = process_options(varargin, 'u', 0, 'v', 1);
+%
+% calling func(0, 1, 'v', 2) will assign 0 to x, 1 to y, 0 to u, and 2
+% to v.  The parameter names are insensitive to case; calling 
+% func(0, 1, 'V', 2) has the same effect.  The function call
+% 
+%   func(0, 1, 'u', 5, 'z', 2);
+%
+% will result in u having the value 5 and v having value 1, but
+% will issue a warning that the 'z' option has not been used.  On
+% the other hand, if func is defined as
+%
+%   function y = func(x, y, varargin)
+%
+%     [u, v, unused_args] = process_options(varargin, 'u', 0, 'v', 1);
+%
+% then the call func(0, 1, 'u', 5, 'z', 2) will yield no warning,
+% and unused_args will have the value {'z', 2}.  This behaviour is
+% useful for functions with options that invoke other functions
+% with options; all options can be passed to the outer function and
+% its unprocessed arguments can be passed to the inner function.
+
+% Copyright (C) 2002 Mark A. Paskin
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+% USA.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [varargout] = process_options(args, varargin)
+
+% Check the number of input arguments
+n = length(varargin);
+if (mod(n, 2))
+  error('Each option must be a string/value pair.');
+end
+
+% Check the number of supplied output arguments
+if (nargout < (n / 2))
+  error('Insufficient number of output arguments given');
+elseif (nargout == (n / 2))
+  warn = 1;
+  nout = n / 2;
+else
+  warn = 0;
+  nout = n / 2 + 1;
+end
+
+% Set outputs to be defaults
+varargout = cell(1, nout);
+for i=2:2:n
+  varargout{i/2} = varargin{i};
+end
+
+% Now process all arguments
+nunused = 0;
+for i=1:2:length(args)
+  found = 0;
+  for j=1:2:n
+    if strcmpi(args{i}, varargin{j})
+      varargout{(j + 1)/2} = args{i + 1};
+      found = 1;
+      break;
+    end
+  end
+  if (~found)
+    if (warn)
+      warning(sprintf('Option ''%s'' not used.', args{i}));
+      args{i}
+    else
+      nunused = nunused + 1;
+      unused{2 * nunused - 1} = args{i};
+      unused{2 * nunused} = args{i + 1};
+    end
+  end
+end
+
+% Assign the unused arguments
+if (~warn)
+  if (nunused)
+    varargout{nout} = unused;
+  else
+    varargout{nout} = cell(0);
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/conversion/s_to_hhmmss.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function out = s_to_hhmmss(in)
+%input: time in s (integer)
+%output: string in hhmmss format
+
+hours = div(in,3600);
+mins = div(mod(in,3600),60);
+secs = mod(in,60);
+
+out = strcat(tostr(hours),tostr(mins),tostr(secs));
+
+
+function u=tostr(v)
+if(v<10)
+    u=sprintf('0%d',v);
+else
+     u=sprintf('%d',v);
+end
+
+function u=div(v,w)
+u=(floor(v/w));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/filesys/find_time_and_rename.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,177 @@
+%sucht die datei (1)  "coelebs_aufn1_ch1"unter sourcedir  bei datei (2)
+%   coelebs_aufn1_ch1_01 im segmentsdir.
+%   daraufhin wird die genaue stelle des vorkommens von (2) in (1) gesucht,
+%   und in sekunden an den dateinamen angehängt; 
+
+clear
+global globalvars;
+addpath('..\vogelst\k-band250905')
+sourcedir='F:\Aufnahmen\2006-Juni-3-Remscheid-Daniel';
+%sourcedir='F:\Ample';
+%sourcedir='M:\PrograMathe\matlab\work\hiwi\vogelst\testmaterial\online2';
+
+segmentsdir='F:\viele_einzelne_strophen\fringila_coelebs_buchfink\typ1';
+
+%segmentsdir='F:\viele_einzelne_strophen\fringila_coelebs_buchfink\tst';
+%segmentsdir='M:\PrograMathe\matlab\work\hiwi\vogelst\testmaterial\online';
+
+
+
+%---------------------------------------------z-------------zugehörige dateien suchen 
+allpaths=genpath(sourcedir);
+data_names=dir(strcat(segmentsdir,'\*.wav'));
+psourcedirs = explode(';',allpaths);
+for i = 1:length(data_names)
+    ldata_names{i} = data_names(i).name;
+end
+
+names_done = [];
+relsource_files = {};
+for i = 1:length(psourcedirs)
+    actdir = dir(strcat(psourcedirs{i},'\*.wav'));
+    ldata_names = ldata_names(setdiff(1:length(ldata_names),names_done));
+    for j = 1:length(ldata_names)
+        for k = 1:length(actdir)
+            if(strncmp(actdir(k).name,ldata_names{j},length(ldata_names{j})-7))
+                names_done = [names_done j];
+                relsource_files= cat(1,relsource_files,{[strcat(psourcedirs{i},'\',actdir(k).name)] [strcat(segmentsdir,'\',ldata_names{j})]});
+            end
+        end
+    end
+end
+
+
+
+oldsource='';
+oldsamplesource=0;
+k=1;
+position=zeros(size(relsource_files,1),2);
+
+i=1;
+while i <= size(relsource_files,1)
+    aktsource =char(relsource_files(i,1));
+    aktsamplesource=i;
+%--------------------------------------------------features generieren und overhead
+
+    if ~strcmp(aktsource,oldsource) || (aktsamplesource~=oldsamplesource)   %neue quelldatei
+        aktmajstart=1;
+        siz=WAVREAD(aktsource,'size');
+        siz=siz(1,1);
+        aktmajpointer = min(siz,globalvars.maxaudiodatalen);
+        [aktdata,sr,nbits]=wavread(aktsource,[aktmajstart aktmajpointer]);
+        oldsource=aktsource;	
+        if length(aktdata(1,:)) > 1
+            aktdata = aktdata(:,1);
+        end
+        windowsz=floor(sr/5);
+         fprintf('generating features for fast search \n');
+        aktfeat =resample(abs(specgram(aktdata,windowsz,sr,windowsz,floor(windowsz/2))),1,40);  
+    elseif (aktmajpointer < siz) && (aktsamplesource==oldsamplesource)  %alte quelldatei zu lang
+        aktmajstart=aktmajstart+floor(globalvars.maxaudiodatalen/2);
+        aktmajpointer=min(aktmajpointer+floor(globalvars.maxaudiodatalen/2),siz);
+        if (aktmajstart-aktmajpointer) < windowsz
+            aktmajstart=max(aktmajstart-windowsz,1);
+        end
+         [aktdata,sr,nbits]=wavread(aktsource,[aktmajstart aktmajpointer]);
+        if length(aktdata(1,:)) > 1
+            aktdata = aktdata(:,1);
+        end
+         fprintf('generating features for fast search \n');
+        aktfeat =resample(abs(specgram(aktdata,windowsz,sr,windowsz,floor(windowsz/2))),1,40);  
+    end
+    
+    
+    if (aktsamplesource~=oldsamplesource)%neue suchdatei
+	    [aktsample,sr,nbits]=wavread(char(relsource_files(i,2)));
+        oldsamplesource=aktsamplesource;
+	    if length(aktsample(1,:)) > 1
+	        aktsample = aktsample(:,1);
+	    end
+	    
+	    if(length(aktsample)>=windowsz)
+	        aktsamplefeat =resample(abs(specgram(aktsample(1:windowsz),windowsz,sr,windowsz,floor(windowsz/2))),1,40);
+	        for j=1:size(aktfeat,2)
+	            di(j)=dist(aktfeat(:,j),aktsamplefeat(:,1));
+	        end
+	        bdi = di>mean(di);
+	    else 
+	        fprintf('fast search not possible \n');
+	        bdi=ones(1,size(aktfeat,2))
+	    end   
+	    fprintf(strcat('searching for \n', escape(aktsource ),' in \n' ,escape(char(relsource_files(i,2))),'\n' ));
+    end
+    
+    
+%---------------------- bestandteil lokalisieren (k mismatches), ausreichende minmatches        
+    minmatches=length(aktsample);
+    found=0;
+    aktpointer=1;
+    aktstart=1;
+    len = length(aktdata);
+    len2=length(aktsample);  
+    while ((aktstart+len2)<=len) &&~found
+        mismatches=0;
+        aktstart=aktstart+1;
+        aktpointer=aktstart;
+        while (aktpointer <= len)&&(mismatches <k)&&((aktpointer-(aktstart)+1)<=len2)
+            if(aktdata(aktpointer) ~= aktsample(aktpointer-(aktstart)+1))
+                mismatches = mismatches+1;
+                if(~bdi(floor(aktpointer/(windowsz/2))+1))
+                    aktpointer=aktpointer+(windowsz/2);
+                end
+            end
+            aktpointer=aktpointer+1;
+            if (aktpointer-aktstart) >= minmatches
+                fprintf('found');
+                position(i,:)=[floor((aktmajstart-1+aktstart)/sr) floor((aktmajstart-1+aktpointer)/sr)]
+                found=1;
+                break
+            end
+        end
+    end
+    if(position(i,2)~=0)
+        
+%---------------------------------------------zugehörige infos in dateien schreiben 
+        newfilename= strcat(substr(char(relsource_files(i,2)),0,length(relsource_files(i,2))-5),'__',...
+            s_to_hhmmss(position(i,1)),'-',s_to_hhmmss(position(i,2)),'.wav');
+        movefile(char(relsource_files(i,2)),newfilename);
+        
+        filetoopen=strcat(newfilename,'.txt');
+        ftoex=dir(filetoopen);
+        if(length(ftoex)==0)
+           FID = fopen(filetoopen,'w');
+           fprintf(FID,'%s','annotations for ');
+           fprintf(FID,'%s',newfilename);
+           fprintf(FID,'\n');
+           fprintf(FID,'%s','sourcefile available at');
+           fprintf(FID,'\n');
+           fprintf(FID,'%s',char(relsource_files(i,1)));
+           fprintf(FID,'\n');
+           fprintf(FID,'%s','time of occurrence in hhmmss format:');
+           fprintf(FID,'\n');
+           fprintf(FID,'%s',s_to_hhmmss(position(i,1)));
+           fprintf(FID,'%s','-');
+           fprintf(FID,'%s',s_to_hhmmss(position(i,2)));
+           fprintf(FID,'\n');
+           fprintf(FID,'%s','in seconds:');
+           fprintf(FID,'\n');
+           fprintf(FID,'%s',sprintf('%d',position(i,1)));
+           fprintf(FID,'\n');
+           fprintf(FID,'%s',sprintf('%d',position(i,2)));
+           fprintf(FID,'\n');
+           fprintf(FID,'%s','comments:');
+
+           fclose(FID);
+        end
+
+       i=i+1; 
+    elseif(aktmajpointer==siz)
+       i=i+1; 
+    end
+end
+
+
+    
+    
+    
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/filesys/forAllFilesInDir.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,68 @@
+function y = forAllFilesInDir(startdir, filetypes, func, recursive, y, varargin)
+% y = forAllFilesInDir(startdir, filetypes, func, recursive, y, varargin)
+%
+% Traverse directory structure, performing for each file of a specified filetype 
+% an action defined by a function handle.
+%
+% INPUT:
+% ------
+% startdir ..... (string) Start directory. 
+%                Any directory containing a file named "skip" will be skipped.
+% filetypes .... (cell array of strings) File type filter, e.g. {'*.amc' '*.asf'} 
+%                or {'*.*'} for all files
+% func ......... (function handle) Worker function to be called for each file
+%                The function designated by func will be passed the current complete 
+%                filename (including pathname) as the first argument. If the parameter list 
+%                varargin is nonempty, a single cell array with the current filename as the
+%                first entry followed by the remaining parameters in varargin will be passed.
+% recursive .... (boolean) Flag indicating whether recursive traversal is desired or not.
+% y ............ (matrix or cell array) Initial value for output container. Usually empty ([]).
+% varargin ..... (cell array of parameters) Parameters to be passed to func, see "func".
+%
+% OUTPUT:
+% -------
+% y ............ (matrix or cell array) Collected outputs of calls to func, vertically concatenated.
+%
+% EXAMPLE:
+% --------
+% y = forAllFilesInDir('S:\data_MoCap\MoCaDaDB\AMC',{'*.amc'},@getAMCLengthInSeconds,true,[]);
+% y = forAllFilesInDir('S:\data_MoCap\MoCaDaDB\AMC',{'*.amc'},@getAMCLengthInSeconds,true,[],param1,...,paramn);
+
+if (startdir(end)~='\')
+    startdir = [startdir '\'];
+end
+
+files = dir(startdir);
+if (isempty(strmatch('skip',{files.name},'exact'))) % only process dir if no "skip" file is present!
+    disp(['Entered directory ' startdir]);
+	files = [];
+	for k=1:length(filetypes)
+        fls = dir([startdir filetypes{k}]);
+        files = [files; fls];
+	end
+	
+	for k=1:length(files)
+        disp(['Processing file ' files(k).name]);
+        if (nargin>5)
+            args = horzcat({startdir files(k).name}, varargin);   % changed by -fk to pass both dir + filename
+        else
+            args = {startdir files(k).name};   % changed by -fk to pass both dir + filename
+        end
+        a = feval(func,args{:});
+        y = [y; a];
+	end
+	
+	if (recursive)
+		dirs = dir(startdir);
+		isdir = cell2mat({dirs.isdir});
+		dirs = dirs(find(isdir));
+		for k = 1:length(dirs)
+            if (~strcmp(dirs(k).name,'.') & ~strcmp(dirs(k).name,'..'))
+                y = forAllFilesInDir([startdir dirs(k).name], filetypes, func, recursive, y, varargin{:});
+            end
+		end
+	end
+    disp(['Left directory ' startdir]);
+else
+    disp(['Skipped directory ' startdir]);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/filesys/pathsdiff.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function path_out=pathsdiff(root_path,substr_notwanted)
+path_out='';
+root_path=explode(';',root_path);
+for i=1:size(root_path,2)
+    tmp_path=root_path{i};
+    if(isempty(findstr(tmp_path,substr_notwanted)))
+        path_out=strcat(tmp_path,';',path_out );
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/filesys/pathsdiff_mac.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function path_out=pathsdiff(root_path,substr_notwanted)
+path_out='';
+root_path=explode(':',root_path);
+for i=1:size(root_path,2)
+    tmp_path=root_path{i};
+    if(isempty(findstr(tmp_path,substr_notwanted)))
+        path_out=strcat(tmp_path,':',path_out );
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/math/dist.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+function out = dist(a,b)
+
+out = sqrt(sum((a-b).^2));
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/math/maxsum.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function [startf,stopf,maxsofar]=maxsum(in)
+
+maxsofar=0;
+maxendinghere=0;
+startf=1;
+stopf=1;
+aktstartf=1;
+
+for i=1:length(in)
+    if (maxendinghere+in(i) < 0)
+        maxendinghere=0;
+        aktstartf=i+1;
+    else
+        maxendinghere=maxendinghere+in(i);
+    end
+    
+    if(maxendinghere > maxsofar)
+        maxsofar=maxendinghere;
+        stopf=i;
+        startf=aktstartf;
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/sp/acorr2peaks.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function out=acorr2peaks(acorr)
+for i=1:size(acorr,2)
+p{i}=peaks(acorr(:,i));
+end
+out=zeros(size(acorr));
+for i=1:size(acorr,2)
+out(p{i},i)=acorr(p{i},i);
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/sp/peaks.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function out = peaks(in, hw)
+
+% this shall be the great peak picking algo.
+% 1. lowpass
+% 2. hillvalley
+% 3. plateaus
+% 4. filter
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/sp/seq_wavwrite.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,407 @@
+function seq_wavwrite(in_files,wavefile,varargin)
+% Combines wav-data from folder or specific files in one file. 
+%
+% seq_wavwrite(path_string,wavefile) combines all .wav files in
+%   path_string in the file wavefile.
+%   i.e.: seq_wavwrite('C:\wav\','C:\combined.wav') 
+%
+%   The file format will depend on the first file processed, the other
+%   files will be transfered to this format by resampling, dithering and
+%   channel repetition/rejection. You may use some of the extra-options 'Fs','nbits'
+%   or 'channels' to override these settings.
+%   i.e.: seq_wavwrite('C:\wav\','C:\combined.wav','Fs',44100,'nbits',16,'channels',1) 
+%   will produce a mono file with 44.1 kHz samle rate and 16bits per sample
+%   
+% seq_wavwrite(files_cellarray,wavefile) only combines the files specified
+%   in files_cellarray.
+%   i.e.: files={'C:\wav\test1.wav','C:\other_wav\test2.wav'};
+%         seq_wavwrite(files,'C:\combined.wav');
+%
+%   You may want to copy only some parts of the files.
+%   Therefore use the extra-option 'sequences':
+%   seq_wavwrite(files,'C:\combined','sequences',segments);
+%   ,where segments is an cell array the same size as the files_cellarray,
+%   witch contains the position of the parts for every file.
+%   Every cell row contains a struct array with the following fields:
+%       abs_startspl and abs_stopspl
+%           or
+%       abs_startms and abs_stopms
+%   You may also specify the channels that are to be copied in the field
+%       channels
+%       i.e.: files={'C:\wav\test1.wav','C:\other_wav\test2.wav'};
+%             segsforfile1(1).abs_startspl=1;
+%             segsforfile1(1).abs_stopspl=44100;
+%             segsforfile1(2).abs_startspl=88200;
+%             segsforfile1(2).abs_stopspl=200000;
+%             segsforfile2(1).abs_startms=1;
+%             segsforfile2(1).abs_stopms=2000;
+%             segsforfile2(1).channels=[1 2]; <- use the first two channels
+%             segments={segsforfile1,segsforfile2};
+%             seq_wavwrite(files,'C:\combined','sequences',segments);
+%
+%   If you want to copy specific files as a whole, just omit their abs_...
+%   values.
+%
+%   seq_wavwrite uses blockwise file processing to be able to copy large
+%   amounts of data. The option 'max_chunksize' allows you to specify the
+%   blocksize in samples. Keep in mind that in multichannel mode the actual
+%   blocksize will be chunksize times channels.
+%   i.e.: seq_wavwrite('C:\wav\','C:\combined.wav','max_chunksize',44100*60) 
+
+% Parse inputs:
+
+[slash,leftargs]=process_options(varargin,'systemslash','\');
+
+if ischar(in_files)
+    data_names=dir(strcat(in_files,slash,'*.wav'));
+    in_files=strcat(in_files,{data_names.name});
+end
+
+[tmp_sig,tmp_Fs,tmp_nbits]=wavread(char(in_files{1}),[1 2]);
+tmp_channels=size(tmp_sig,2);
+
+def_max_chunk_size = 44100*60*2;%chunksize nearly one minute at 44,1 khz sample rate
+[sequences,Fs,nbits,channels,max_chunk_size]=process_options(leftargs,'sequences',[],'Fs',...
+    tmp_Fs,'nbits',tmp_nbits,'channels',tmp_channels,'max_chunksize',def_max_chunk_size);
+
+if ischar(in_files) && ~isempty(sequences)
+    warning('segment parameters ignored in directory-input mode')
+    sequences=[];
+end
+
+% Determine number of bytes in chunks
+% (not including pad bytes, if needed):
+% ----------------------------------
+%  'RIFF'           4 bytes
+%  size             4 bytes
+%  'WAVE'           4 bytes
+%  'fmt '           4 bytes
+%  size             4 bytes
+% <wave-format>     14 bytes
+% <format_specific> 2 bytes (PCM)
+%  'data'           4 bytes
+%  size             4 bytes
+% <wave-data>       N bytes
+% ----------------------------------
+
+bytes_per_sample = ceil(nbits/8);
+fmt_cksize  = 16;               % Don't include 'fmt ' or its size field
+
+% Open file for output:
+[fid,err] = OpenWaveWrite(wavefile);
+error(err);
+try
+    % Prepare basic chunk structure fields:
+    ck=[]; ck.fid=fid; ck.filename = wavefile;
+
+    fwrite(fid,zeros(1,20),'uchar'); %skip previous chunks
+    % Write <wave-format>:
+    fmt.filename        = wavefile;
+    if nbits == 32,
+        fmt.wFormatTag  = 3;            % Data encoding format (1=PCM, 3=Type 3 32-bit)
+    else
+        fmt.wFormatTag  = 1;            
+    end
+    fmt.nSamplesPerSec  = Fs;           % Samples per second
+    fmt.nAvgBytesPerSec = channels*bytes_per_sample*Fs; % Avg transfer rate
+    fmt.nBlockAlign     = channels*bytes_per_sample;    % Block alignment
+    fmt.nBitsPerSample  = nbits;        % standard <PCM-format-specific> info
+    fmt.nChannels       = channels;     % Number of channels
+    error(write_wavefmt(fid,fmt));
+    
+    fwrite(fid,zeros(1,8),'uchar'); %skip following chunks
+
+    % Write all audio data
+    sample_sum=0;
+    for filei=1:size(in_files,2)
+        resamplewarn=0;
+        channelwarn=0;
+        if ~isempty(sequences)&& ~isempty(sequences{filei})
+            numsegs=size(sequences{filei},2);
+        else numsegs=1;
+        end
+        for seqi=1:numsegs;
+            tmp_fsiz=wavread(char(in_files{filei}),'size');
+            tmp_fsiz=tmp_fsiz(1);
+            [y,tmp_fs,null]=wavread(char(in_files{filei}),[1 2]);%read data
+            if ~isempty(sequences) && ~isempty(sequences{filei})
+                if isfield(sequences{filei}(seqi),'abs_startspl')
+                    spl_seq=[sequences{filei}(seqi).abs_startspl sequences{filei}(seqi).abs_stopspl];
+                elseif isfield(sequences{filei}(seqi),'abs_startms')
+                    spl_seq=floor([sequences{filei}(seqi).abs_startms sequences{filei}(seqi).abs_stopms].*tmp_fs./1000);
+                else
+                    spl_seq=[1 tmp_fsiz];
+                end
+                if (spl_seq(1)< 1) || (spl_seq(2) > tmp_fsiz)
+                    warning('correcting segment range, not necessary critical in miliseconds-mode')
+                    spl_seq(1)=max(spl_seq(1),1);
+                    spl_seq(2)=min(spl_seq(2),tmp_fsiz);
+                end
+            else
+                 spl_seq=[1 tmp_fsiz];
+            end
+            win_start=spl_seq(1);
+            win_stop=(min(spl_seq(2),spl_seq(1)+max_chunk_size-1));
+            while win_stop <= spl_seq(2)
+                [y,tmp_fs,null]=wavread(char(in_files{filei}),[win_start win_stop]);%read data
+                if (size(y,2) > 1) &&  ~isempty(sequences) && isfield(sequences{filei}(seqi),'channels') %choose channel
+                    if size(y,2) >= max(sequences{filei}(seqi).channels)
+                        y=y(:,sequences{filei}(seqi).channels);
+                    else
+                        if ~channelwarn
+                            warning('ignoring errorneous channel field');
+                            channelwarn=1;
+                        end
+                    end
+                end
+                if (tmp_fs ~= Fs) %resample data if necessary
+                    if ~resamplewarn
+                        fprintf('seq_wavwrite.m: resampling from %d to %d Hz. \n',tmp_fs,Fs);
+                        resamplewarn=1;
+                    end
+                    y=resample(y,Fs,tmp_fs);
+                end
+                [samples,akt_channels] = size(y);
+                if akt_channels > channels % if necessary make equivalent channelnum
+                    y=y(:,1:channels);
+                elseif akt_channels < channels
+                    y=[y repmat(y(:,end),1,channels-akt_channels)];
+                end
+                error(write_wavedat(fid,fmt,y));
+                sample_sum=sample_sum+samples;
+                
+                if win_stop == spl_seq(2), break;
+                end
+                win_start=win_start+max_chunk_size;
+                win_stop=(min(spl_seq(2),win_stop+max_chunk_size));
+            end
+        end
+    end
+    clear y;
+
+    total_samples    = sample_sum * channels;
+    total_bytes      = total_samples * bytes_per_sample;
+    data_cksize = total_bytes; 
+    
+    riff_cksize = 36+total_bytes;  
+    
+    % Determine pad bytes:
+    % Determine if a pad-byte must be appended to data chunk:
+    if rem(data_cksize, 2) ~= 0,
+       fwrite(fid,0,'uchar');
+    end 
+    data_pad    = rem(data_cksize,2);
+    riff_cksize = riff_cksize + data_pad; % + fmt_pad, always 0
+
+    % Write RIFF chunk:
+    fseek(fid,0,'bof');
+    ck.ID   = 'RIFF';
+    ck.Size = riff_cksize;
+    error(write_ckinfo(ck));
+    
+    % Write WAVE subchunk:
+    ck.ID   = 'WAVE';
+    ck.Size = [];  % Indicate a subchunk (no chunk size)
+    error(write_ckinfo(ck));
+    
+    % Write <fmt-ck>:
+    ck.ID   = 'fmt ';
+    ck.Size = fmt_cksize;
+    error(write_ckinfo(ck));
+
+    % Write <data-ck>:
+    fseek(fid,36,'bof');
+    ck.ID   = 'data';
+    ck.Size = data_cksize;
+    error(write_ckinfo(ck));
+    err='';
+catch
+    err=lasterr;
+end
+% Close file:
+fclose(fid);
+
+error(err);
+% end of wavwrite()
+
+
+% ------------------------------------------------------------------------
+% Private functions:
+% ------------------------------------------------------------------------
+
+
+% ------------------------------------------------------------------------
+function [fid,err] = OpenWaveWrite(wavefile)
+% OpenWaveWrite
+%   Open WAV file for writing.
+%   If filename does not contain an extension, add ".wav"
+
+fid = [];
+err = '';
+if ~isstr(wavefile),
+   err='Wave file name must be a string.'; return;
+end
+if isempty(findstr(wavefile,'.')),
+  wavefile=[wavefile '.wav'];
+end
+% Open file, little-endian:
+[fid,err] = fopen(wavefile,'wb','l');
+
+return
+
+
+% ------------------------------------------------------------------------
+function err = write_ckinfo(ck)
+% WRITE_CKINFO: Writes next RIFF chunk, but not the chunk data.
+%   Assumes the following fields in ck:
+%         .fid   File ID to an open file
+%         .ID    4-character string chunk identifier
+%         .Size  Size of chunk (empty if subchunk)
+%
+%
+%   Expects an open FID pointing to first byte of chunk header,
+%   and a chunk structure.
+%   ck.fid, ck.ID, ck.Size, ck.Data
+
+errmsg = ['Failed to write ' ck.ID ' chunk to WAVE file: ' ck.filename];
+err    = '';
+
+if (fwrite(ck.fid, ck.ID, 'char') ~= 4),
+   err=errmsg; return;
+end
+
+if ~isempty(ck.Size),
+  % Write chunk size:
+  if (fwrite(ck.fid, ck.Size, 'uint32') ~= 1),
+     err=errmsg; return;
+  end
+end
+
+return
+
+% ------------------------------------------------------------------------
+function err = write_wavefmt(fid, fmt)
+% WRITE_WAVEFMT: Write WAVE format chunk.
+%   Assumes fid points to the wave-format subchunk.
+%   Requires chunk structure to be passed, indicating
+%   the length of the chunk.
+
+errmsg = ['Failed to write WAVE format chunk to file' fmt.filename];
+err    = '';
+
+% Create <wave-format> data:
+if (fwrite(fid, fmt.wFormatTag,      'uint16') ~= 1) | ...
+   (fwrite(fid, fmt.nChannels,       'uint16') ~= 1) | ...
+   (fwrite(fid, fmt.nSamplesPerSec,  'uint32' ) ~= 1) | ...
+   (fwrite(fid, fmt.nAvgBytesPerSec, 'uint32' ) ~= 1) | ...
+   (fwrite(fid, fmt.nBlockAlign,     'uint16') ~= 1),
+   err=errmsg; return;
+end
+
+% Write format-specific info:
+if fmt.wFormatTag==1 | fmt.wFormatTag==3,
+  % Write standard <PCM-format-specific> info:
+  if (fwrite(fid, fmt.nBitsPerSample, 'uint16') ~= 1),
+     err=errmsg; return;
+  end
+  
+else
+  err='Unknown data format.';
+end
+
+return
+
+
+% -----------------------------------------------------------------------
+function y = PCM_Quantize(x, fmt)
+% PCM_Quantize:
+%   Scale and quantize input data, from [-1, +1] range to
+%   either an 8-, 16-, or 24-bit data range.
+
+% Clip data to normalized range [-1,+1]:
+ClipMsg  = ['Data clipped during write to file:' fmt.filename];
+ClipWarn = 0;
+
+% Determine slope (m) and bias (b) for data scaling:
+nbits = fmt.nBitsPerSample;
+m = 2.^(nbits-1);
+
+switch nbits
+case 8,
+   b=128;
+case {16,24},
+   b=0;
+otherwise,
+   error('Invalid number of bits specified.');
+end
+
+y = round(m .* x + b);
+
+% Determine quantized data limits, based on the
+% presumed input data limits of [-1, +1]:
+ylim = [-1 +1];
+qlim = m * ylim + b;
+qlim(2) = qlim(2)-1;
+
+% Clip data to quantizer limits:
+i = find(y < qlim(1));
+if ~isempty(i),
+   warning(ClipMsg); ClipWarn=1;
+   y(i) = qlim(1);
+end
+
+i = find(y > qlim(2));
+if ~isempty(i),
+   if ~ClipWarn, warning(ClipMsg); end
+   y(i) = qlim(2);
+end
+
+return
+
+
+% -----------------------------------------------------------------------
+function err = write_wavedat(fid,fmt,data)
+% WRITE_WAVEDAT: Write WAVE data chunk
+%   Assumes fid points to the wave-data chunk
+%   Requires <wave-format> structure to be passed.
+
+err = '';
+
+if fmt.wFormatTag==1 | fmt.wFormatTag==3,
+   % PCM Format
+   
+   % 32-bit Type 3 is normalized, so no scaling needed.
+   if fmt.nBitsPerSample ~= 32,
+       data = PCM_Quantize(data, fmt);
+   end
+   
+   switch fmt.nBitsPerSample
+   case 8,
+      dtype='uchar'; % unsigned 8-bit
+   case 16,
+      dtype='int16'; % signed 16-bit
+   case 24,
+	  dtype='bit24'; % signed 24-bit
+   case 32,
+      dtype='float'; % normalized 32-bit floating point
+   otherwise,
+      err = 'Invalid number of bits specified.'; return;
+   end
+   
+   % Write data, one row at a time (one sample from each channel):
+   [samples,channels] = size(data);
+   total_samples = samples*channels;
+   
+   if (fwrite(fid, reshape(data',total_samples,1), dtype) ~= total_samples),
+      err = 'Failed to write PCM data samples.'; return;
+   end
+   
+   
+else
+  % Unknown wave-format for data.
+  err = 'Unsupported data format.';
+end
+
+return
+
+% end of wavwrite.m
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/strings/escape.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function out = escape(in)
+j=1;
+for i=1:length(in)
+    if(in(i)=='\')
+        out(j) = in(i);
+        out(j+1) = '\';
+        j=j+2;
+    else
+         out(j) = in(i);
+         j=j+1;
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/strings/explode.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function out = explode(divider,input)
+%out = explode(divider,input)
+out = {};
+len = length(input);
+start = 1;
+stop = 1;
+
+segment = 1;
+while (stop <= len)
+    while (stop <= len)&& (~strcmp(input(stop),divider))
+        stop = stop+1;
+    end
+    out{segment} = input(start:stop-1);
+    segment = segment+1;
+    stop= stop+1;
+    start = stop;
+end
+        
+        
+        
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/strings/substr.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+function outstr = substr(str, offset, len, repl)
+%SUBSTR Extract a substring out of a string.
+%
+%   SUBSTR(STRING, OFFSET, LENGTH) extracts a substring out of STRING with
+%   given LENGTH starting at the given OFFSET.  First character is at offset 0.
+%   If OFFSET is negative, starts that far from the end of the string.  If
+%   LENGTH is omitted, returns everything to the end of the string.  If LENGTH
+%   is negative, removes that many characters from the end of the string.
+%
+%   SUBSTR(STRING, OFFSET, LENGTH, REPLACEMENT) will not return the substring
+%   as specified by STRING, OFFSET, and LENGTH (see above) but rather replace
+%   it by REPLACEMENT and return the result.
+%
+%   Examples:
+%
+%      Get first character:              substr(string,  0, 1)
+%      Get last character:               substr(string, -1, 1)
+%      Remove first character:           substr(string,  1)
+%      Remove last character:            substr(string,  0, -1)
+%      Remove first and last character:  substr(string,  1, -1)
+%
+%   SUBSTR is a MATLAB version of the Perl operator with the same name.
+%   However, unlike Perl's SUBSTR, no warning is produced if the substring is
+%   totally outside the string.
+
+%   Author:      Peter J. Acklam
+%   Time-stamp:  2004-02-21 22:49:14 +0100
+%   E-mail:      pjacklam@online.no
+%   URL:         http://home.online.no/~pjacklam
+
+   % Check number of input arguments.
+   error(nargchk(2, 4, nargin));
+
+   n = length(str);
+
+   % Get lower index.
+   lb = offset + 1;             % offset from beginning of string
+   if offset < 0
+      lb = lb + n;              % offset from end of string
+   end
+   lb = max(lb, 1);
+
+   % Get upper index.
+   if nargin == 2               % SUBSTR(STR, OFFSET)
+      ub = n;
+   elseif nargin > 2            % SUBSTR(STR, OFFSET, LEN)
+      if len >= 0
+         ub = lb + len - 1;
+      else
+         ub = n + len;
+      end
+      ub = min(ub, n);
+   end
+
+   % Extract or replace substring.
+   if nargin < 4
+      outstr = str(lb : ub);                        % extract substring
+   else
+      outstr = [str(1:lb-1) repl str(ub+1:end)];    % replace substring
+   end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/visualisation/datarawplot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,45 @@
+function [h,out] = datarawplot(wavin, varargin)
+%[h,out] =datarawplot(data,'minx',-1, 'maxx',-1,'color','k','against',-1);
+
+
+[miny,maxy,minx,maxx,color,against,unused]=process_options(varargin,...
+   'miny',-1,'maxy',-1,'minx',-1,'maxx',-1,'color','k','against',-1);
+out= wavin;
+
+
+m=min(wavin);
+ma=max(wavin);
+add=(ma-m)*0.1;
+if miny ==-1
+    miny=m-add;
+end
+if maxy==-1
+    maxy=ma+add;
+end
+    
+wavlens=length(wavin);
+
+if against==-1
+    h=plot(out,color);
+else
+    h=plot(against,out,color);
+end
+
+if minx ==-1
+    minx=0;
+    if against ~=-1
+         minx=min(against);
+    end
+end
+if maxx==-1
+    maxx=wavlens;
+    if against ~=-1
+         maxx=max(against);
+    end
+end
+axis([minx maxx miny maxy]);
+set(gca,'FontSize',8);
+h=get(0,'CurrentFigure');
+axis xy;
+xlabel('Time[samples]','FontSize',8)
+%ylabel('Amplitude','FontSize',8)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/visualisation/dataspecgram.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function [h,out] = dataspecgram(wavin, varargin)
+%[h,spec] = dataspecgram(data,'sr',fs,'fftlen',2048,'stepw',1024,'winsize',2048,'min_fkhz',0.5,'max_fkhz',15,'nolog',0,'clip',0,'logadd',0);
+
+
+[sr,fftlen, stepw,winsize,min_fkhz,max_fkhz,nolog,clip,logadd,fontsize,cutoff,colormode,unused]=process_options(varargin,...
+    'sr',44800,'fftlen',2048,'stepw',1024,'winsize',2048,'min_fkhz',0.5,'max_fkhz',15,...
+    'nolog',0,'clip',0,'logadd',0,'fontsize',8,'cutoff',0,'colormode','jet');
+out= specgram(wavin,fftlen,sr,winsize,winsize-stepw);
+
+wavlens=round(length(wavin)/sr*100)/100;
+
+firstindex= max(round(fftlen/(sr)*min_fkhz*1000),1);
+lastindex= min(round(fftlen/(sr)*max_fkhz*1000),fftlen/2);
+
+out=out(firstindex:lastindex,:);
+if nolog
+    out=abs(out);
+    out=sqrt(abs(out));
+    out=out./max(max(out));
+else
+    out=log(0.000000001+logadd+abs(out));
+    out=out./max(max(abs(out)));
+    out=out+1;
+end
+
+%cut off small values
+if cutoff
+    for i=1:size(out,2)
+        out((out(:,i)<cutoff),i)=0;
+    end
+end
+
+
+
+if clip > 0
+    h=image([0 wavlens],[min_fkhz max_fkhz],out*100*clip);
+else
+    h=imagesc([0 wavlens],[min_fkhz max_fkhz],out);
+end
+
+switch colormode
+    case 'inv'
+        color= 'w';
+        bgcolor= 'k';
+        colormap(hot);
+    case 'bw'
+        color= 'black';
+        colormap(1-grey);
+        bgcolor= 'w';
+    case 'jet'
+        color= 'black';
+        colormap(jet);
+        bgcolor= 'w';
+end
+
+set(gca,'FontSize',fontsize,'xcolor',color);
+set(gca,'FontSize',fontsize,'ycolor',color);
+ 
+h=get(0,'CurrentFigure');
+axis xy;
+set(gcf, 'color', bgcolor);
+set(gcf, 'InvertHardCopy', 'off');
+
+xlabel('Time[s]','FontSize',fontsize,'Color',color)
+ylabel('Frequency[kHz]','FontSize',fontsize,'Color',color)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/visualisation/datawavplot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+function [h,out] = datawavplot(wavin, varargin)
+%[h,out] = datawavplot(data,'sr',fs,'minx',-1, 'maxx',-1,'color','k');
+
+
+[sr,miny,maxy,minx,maxx,color,unused]=process_options(varargin,...
+    'sr',44800,'miny',-1,'maxy',-1,'minx',-1,'maxx',-1,'color','k');
+out= wavin;
+
+
+m=min(wavin);
+ma=max(wavin);
+add=(ma-m)*0.1;
+if miny ==-1
+    miny=m-add;
+end
+if maxy==-1
+    maxy=ma+add;
+end
+    
+wavlens=round(length(wavin)/sr*100)/100;
+timetbl=([0:length(wavin)-1]./length(wavin))*wavlens;
+h=plot(timetbl,out,color);
+
+if minx ==-1
+    minx=0;
+end
+if maxx==-1
+    maxx=wavlens;
+end
+axis([minx maxx miny maxy]);
+set(gca,'FontSize',8);
+h=get(0,'CurrentFigure');
+axis xy;
+xlabel('Time[s]','FontSize',8)
+ylabel('Amplitude','FontSize',8)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/visualisation/datawavstem.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+function [h,out] = datawavstem(wavin, varargin)
+%[h,out] = datawavplot(data)
+
+
+[sr,miny,maxy,minx,maxx,unused]=process_options(varargin,...
+    'sr',44800,'miny',-1,'maxy',-1,'minx',-1,'maxx',-1);
+out= wavin;
+
+m=min(wavin);
+ma=max(wavin);
+add=(ma-m)*0.1;
+if miny ==-1
+    miny=m-add;
+end
+if maxy==-1
+    maxy=ma+add;
+end
+wavlens=round(length(wavin)/sr*100)/100;
+timetbl=([0:length(wavin)-1]./length(wavin))*wavlens;
+h=stem(timetbl,out,'r');
+
+if minx ==-1
+    minx=0;
+end
+if maxx==-1
+    maxx=wavlens;
+end
+axis([minx maxx miny maxy]);
+set(gca,'FontSize',8);
+h=get(0,'CurrentFigure');
+axis xy;
+xlabel('Time[s]','FontSize',8)
+ylabel('Amplitude','FontSize',8)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/bioakustik_tools/visualisation/filespecgram.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,19 @@
+function out=filespecgram(working_file, varargin)
+
+[starts,stops, unused]=process_options(varargin,'starts',0,'stops',-1);
+
+
+filesize=wavread(working_file,'size');
+audiodatalen=filesize(1);
+num_channels=filesize(2);
+[src,sr,bits] = wavread(working_file,[1 2]);
+
+
+startspl=max(1,starts*sr);
+if stops =-1,
+    stopspl=audiodatalen;
+else
+    stopspl=max(1,starts*sr);
+end
+ 
+sgram=dataspecgram(src(startspl:stopspl,1),'sr',sr);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/.gitignore	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+*.mex*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/LICENSE	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/MANIFEST	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,56 @@
+./cuttingPlane/cpGradientDiag.m
+./cuttingPlane/cpGradientDiagMKL.m
+./cuttingPlane/cpGradientFull.m
+./cuttingPlane/cpGradientFullMKL.m
+./cuttingPlane/cuttingPlaneFull.m
+./cuttingPlane/cuttingPlaneRandom.m
+./distance/distanceDiag.m
+./distance/distanceDiagMKL.m
+./distance/distanceFull.m
+./distance/distanceFullMKL.m
+./distance/setDistanceDiag.m
+./distance/setDistanceDiagMKL.m
+./distance/setDistanceFull.m
+./distance/setDistanceFullMKL.m
+./feasible/feasibleDiag.m
+./feasible/feasibleDiagMKL.m
+./feasible/feasibleFull.m
+./feasible/feasibleFullMKL.m
+./initialize/initializeDiag.m
+./initialize/initializeDiagMKL.m
+./initialize/initializeFull.m
+./initialize/initializeFullMKL.m
+./LICENSE
+./loss/lossHingeDiagMKL.m
+./loss/lossHingeFullMKL.m
+./loss/lossHinge.m
+./MANIFEST
+./metricPsi/metricPsiPO.m
+./mlr_demo.m
+./mlr_plot.m
+./mlr_test.m
+./mlr_train.m
+./README
+./regularize/regularizeKernel.m
+./regularize/regularizeMKLDiag.m
+./regularize/regularizeMKLFull.m
+./regularize/regularizeNone.m
+./regularize/regularizeTraceDiag.m
+./regularize/regularizeTraceFull.m
+./regularize/regularizeTwoDiag.m
+./regularize/regularizeTwoFull.m
+./separationOracle/separationOracleAUC.m
+./separationOracle/separationOracleKNN.m
+./separationOracle/separationOracleMAP.m
+./separationOracle/separationOracleMRR.m
+./separationOracle/separationOracleNDCG.m
+./separationOracle/separationOraclePrecAtK.m
+./util/binarysearch.c
+./util/cummax.c
+./util/dbprint.m
+./util/distToFrom.m
+./util/Makefile
+./util/mlr_solver.m
+./util/PsdToEdm.m
+./util/soft_classify.m
+./Wine.mat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/README	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,236 @@
+Metric Learning to Rank (mlr-1.2)
+http://www-cse.ucsd.edu/~bmcfee/code/mlr/
+
+AUTHORS:
+Brian McFee <bmcfee@cs.ucsd.edu>
+Daryl Lim <dklim@ucsd.edu>
+
+This code is distributed under the GNU GPL license.  See LICENSE for details
+or http://www.gnu.org/licenses/gpl-3.0.txt
+
+
+
+INTRODUCTION
+------------
+This package contains the MATLAB code for Metric Learning to Rank (MLR).  
+The latest version of this software can be found at the URL above.
+
+The software included here implements the algorithm described in
+
+[1] McFee, Brian and Lanckriet, G.R.G.  Metric learning to rank.  
+    Proceedings of the 27th annual International Conference 
+    on Machine Learning (ICML), 2010.
+
+Please cite this paper if you use this code.
+
+If you use the Robust MLR code (rmlr_train), please cite:
+
+[2] Lim, D.K.H., McFee, B. and Lanckriet, G.R.G. Robust structural metric learning.
+    Proceedings of the 30th annual International Conference on Machine Learning (ICML),
+    2013.
+
+
+INSTALLATION
+------------
+
+1. Requirements
+
+This software requires MATLAB R2007a or later.  Because it makes extensive use
+of the "bsxfun" function, earlier versions of Matlab will not work.
+
+If you have an older Matlab installation, you can install an alternative bsxfun
+implementation by going to
+
+http://www.mathworks.com/matlabcentral/fileexchange/23005 ,
+
+however, this may not work, and it will certainly be slower than the native
+bsxfun implementation.
+
+
+2. Compiling MEX functions
+
+MLR includes two auxiliary functions "cummax" and "binarysearch" to accelerate
+certain steps of the optimization procedure.  The source code for these
+functions is located in the "util" subdirectory.
+
+A makefile is provided, so that (on Unix systems), you can simply type
+
+cd util
+make
+cd ..
+
+
+3. Running the demo
+
+To test the installation, first add the path to MLR to your Matlab environment:
+
+    >> addpath(genpath('/path/to/mlr/'));
+
+Then, run the demo script:
+
+    >> mlr_demo
+
+from within Matlab.  The demo generates a random training/test split of the Wine data set
+(http://archive.ics.uci.edu/ml/datasets/Wine)
+and learns a metric with MLR.  Both native and learned metrics are displayed in a figure
+with a scatter plot.
+
+
+TRAINING
+--------
+
+There are several modes of operation for training metrics with MLR.  In the
+simplest mode, training data is contained in a matrix X (each column is a
+training vector), and Y contains the labels/relevance for the training data
+(see below).
+
+   [W, Xi, D] = mlr_train(X, Y, C,...)
+
+       X = d*n data matrix
+       Y = either n-by-1 label of vectors
+           OR
+           n-by-2 cell array where 
+               Y{q,1} contains relevant indices for q, and
+               Y{q,2} contains irrelevant indices for q
+       
+       C >= 0 slack trade-off parameter (default=1)
+
+       W   = the learned metric, i.e., the inner product matrix of the learned 
+                space can be computed by X' * W * X
+       Xi  = slack value on the learned metric (see [1])
+       D   = diagnostics
+
+
+By default, MLR optimizes for Area Under the ROC Curve (AUC).  This can be
+changed by setting the "LOSS" parameter to one of several ranking loss
+measures:
+
+   [W, Xi, D] = mlr_train(X, Y, C, LOSS)
+       where LOSS is one of:
+           'AUC':      Area under ROC curve (default)
+           'KNN':      KNN accuracy*
+           'Prec@k':   Precision-at-k
+           'MAP':      Mean Average Precision
+           'MRR':      Mean Reciprocal Rank
+           'NDCG':     Normalized Discounted Cumulative Gain
+
+    *Note:  KNN is correct only for binary classification problems; in 
+            practice, Prec@k is usually a better alternative.
+
+
+For KNN/Prec@k/NDCG, a threshold k may be set to determine the truncation of
+the ranked list.  Thiscan be done by setting the k parameter:
+
+   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k)
+       where k is the number of neighbors for Prec@k or NDCG
+       (default=3)
+
+
+By default, MLR regularizes the metric W by the trace, i.e., the 1-norm of the
+eigenvalues.  This can be changed to one of several alternatives:
+
+   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG)
+       where REG defines the regularization on W, and is one of:
+           0:          no regularization
+           1:          1-norm: trace(W)            (default)
+           2:          2-norm: trace(W' * W)
+           3:          Kernel: trace(W * X), assumes X is square 
+                                and positive-definite
+
+    The last setting, "kernel", is appropriate for regularizing metrics learned
+    from kernel matrices.
+
+
+W corresponds to a linear projection matrix (rotation and scaling).  To learn a
+restricted model which may only scale, but not rotate the data, W can be
+constrained to diagonal matrices by setting the "Diagonal" parameter to 1:
+
+   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG, Diagonal)
+       Diagonal = 0:   learn a full d-by-d W       (default)
+       Diagonal = 1:   learn diagonally-constrained W (d-by-1)
+       
+    Note: the W returned in this case will be the d-by-1 vector corresponding
+          to the main diagonal of a full metric, not the full d-by-d matrix.
+
+
+
+Finally, we provide a stochastic gradient descent implementation to handle
+large-scale problems.  Rather than estimating gradients from the entire
+training set, this variant uses a random subset of size B (see below) at each
+call to the cutting plane subroutine.  This results in faster, but less
+accurate, optimization:
+
+   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG, Diagonal, B)
+       where B > 0 enables stochastic optimization with batch size B
+
+
+
+TESTING
+-------
+
+Once a metric has been trained by "mlr_train", you can evaluate performance
+across all measures by using the "mlr_test" function:
+
+   Perf = mlr_test(W, test_k, Xtrain, Ytrain, Xtest, Ytest)
+
+       W       = d-by-d positive semi-definite matrix
+       test_k  = vector of k-values to use for KNN/Prec@k/NDCG
+       Xtrain  = d-by-n matrix of training data
+       Ytrain  = n-by-1 vector of training labels
+                   OR
+                 n-by-2 cell array where
+                   Y{q,1} contains relevant indices (in 1..n) for point q
+                   Y{q,2} contains irrelevant indices (in 1..n) for point q
+       Xtest   = d-by-m matrix of testing data
+       Ytest   = m-by-1 vector of training labels, or m-by-2 cell array 
+                   If using the cell version, indices correspond to
+                   the training set, and must lie in the range (1..n)
+               
+
+   The output structure Perf contains the mean score for:
+       AUC, KNN, Prec@k, MAP, MRR, NDCG,
+   as well as the effective dimensionality of W, and
+   the best-performing k-value for KNN, Prec@k, and NDCG.
+
+   For information retrieval settings, consider Xtrain/Ytrain as the corpus
+   and Xtest/Ytest as the queries.
+
+By testing with 
+    Wnative = []
+you can quickly evaluate the performance of the native (Euclidean) metric.
+
+
+MULTIPLE KERNEL LEARNING
+------------------------
+
+As of version 1.1, MLR supports learning (multiple) kernel metrics, using the method described in
+
+[3] Galleguillos, Carolina, McFee, Brian, Belongie, Serge, and Lanckriet, G.R.G.  
+    From region similarity to category discovery.
+    Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2011.
+
+For m kernels, input data must be provided in the form of an n-by-n-by-m matrix K, where K(:,:,i) 
+contains the i'th kernel matrix of the training data.  Training the metric is similar to the 
+single-kernel case, except that the regularization parameter should be set to 3 (kernel regularization), 
+eg:
+
+    >> [W, Xi, D] = mlr_train(K, Y, C, 'auc', 1, 3);
+
+returns an n-by-n-by-m matrix W which can be used directly with mlr_test.  Multiple kernel learning also supports
+diagonally constrained learning, eg:
+    
+    >> [W, Xi, D] = mlr_train(K, Y, C, 'auc', 1, 3, 1);
+
+returns an n-by-m matrix W, where W(:,i) is the main diagonal of the i'th kernels metric.  Again, this W can be fed
+directly into mlr_test.
+
+For testing with multiple kernel data, Ktest should be an n-by-nTest-by-m matrix, where K(:,:,i) is the
+training-by-test slice of the i'th kernel matrix.
+
+FEEDBACK
+--------
+
+Please send any bug reports, source code contributions, etc. to 
+
+Brian McFee <bmcfee@cs.ucsd.edu>
+
Binary file toolboxes/distance_learning/mlr/Wine.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/cuttingPlane/cpGradientDODMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function dPsi = cpGradientDODMKL(X, S)
+
+    [d,n,m] = size(X);
+
+    dPsi    = zeros(m,m,d);
+
+    for i = 1:m
+        dPsi(i,i,:)     = diag(X(:,:,i) * S * X(:,:,i)');
+        for j = (i+1):m
+            Q           = X(:,:,i) + X(:,:,j);
+            dPsi(i,j,:) = diag( Q * S * Q');
+        end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/cuttingPlane/cpGradientDiag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function dPsi = cpGradientDiag(X, S, batchsize)
+
+    dPsi    = diag(X * S * X') / batchsize;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/cuttingPlane/cpGradientDiagMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function dPsi = cpGradientDiagMKL(X, S, batchsize)
+
+    [d,n,m] = size(X);
+
+    dPsi    = zeros(d,m);
+
+    for i = 1:m
+        dPsi(:,i)    = diag(X(:,:,i) * S * X(:,:,i)');
+    end
+    
+    dPsi = dPsi / batchsize;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/cuttingPlane/cpGradientFull.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function dPsi = cpGradientFull(X, S, batchSize)
+
+    dPsi    = X * S * X' / batchSize;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/cuttingPlane/cpGradientFullMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function dPsi = cpGradientFullMKL(X, S, batchsize)
+
+    [d,n,m] = size(X);
+
+    dPsi = zeros(d,d,m);
+    for i = 1:m
+        dPsi(:,:,i)    = X(:,:,i) * S * X(:,:,i)';
+    end
+
+    dPsi = dPsi / batchsize;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/cuttingPlane/cuttingPlaneFull.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,96 @@
+function [dPsi, M, SO_time] = cuttingPlaneFull(k, X, W, Ypos, Yneg, batchSize, SAMPLES, ClassScores)
+%
+% [dPsi, M, SO_time] = cuttingPlaneFull(k, X, W, Yp, Yn, batchSize, SAMPLES, ClassScores)
+%
+%   k           = k parameter for the SO
+%   X           = d*n data matrix
+%   W           = d*d PSD metric
+%   Yp          = cell-array of relevant results for each point
+%   Yn          = cell-array of irrelevant results for each point
+%   batchSize   = number of points to use in the constraint batch
+%   SAMPLES     = indices of valid points to include in the batch
+%   ClassScores = structure for synthetic constraints
+%
+%   dPsi        = dPsi vector for this batch
+%   M           = mean loss on this batch
+%   SO_time     = time spent in separation oracle
+
+    global SO PSI DISTANCE CPGRADIENT;
+
+    [d,n,m] = size(X);
+    D       = DISTANCE(W, X);
+
+    M       = 0;
+    S       = zeros(n);
+    dIndex  = sub2ind([n n], 1:n, 1:n);
+
+    SO_time = 0;
+
+    if isempty(ClassScores)
+        TS  = zeros(batchSize, n);
+        parfor i = 1:batchSize
+            if i <= length(SAMPLES)
+                j = SAMPLES(i);
+
+                if isempty(Ypos{j})
+                    continue;
+                end
+                if isempty(Yneg)
+                    % Construct a negative set 
+                    Ynegative = setdiff((1:n)', [j ; Ypos{j}]);
+                else
+                    Ynegative = Yneg{j};
+                end
+                SO_start        = tic();
+                    [yi, li]    =   SO(j, D, Ypos{j}, Ynegative, k);
+                SO_time         = SO_time + toc(SO_start);
+
+                M               = M + li /batchSize;
+                TS(i,:)         = PSI(j, yi', n, Ypos{j}, Ynegative);
+            end
+        end
+
+        % Reconstruct the S matrix from TS
+        S(SAMPLES,:)    = TS;
+        S(:,SAMPLES)    = S(:,SAMPLES) + TS';
+        S(dIndex)       = S(dIndex) - sum(TS, 1);
+    else
+
+        % Do it class-wise for efficiency
+        batchSize = 0;
+        for j = 1:length(ClassScores.classes)
+            c       = ClassScores.classes(j);
+            points  = find(ClassScores.Y == c);
+
+            Yneg    = find(ClassScores.Yneg{j});
+            yp      = ClassScores.Ypos{j};
+            
+            if length(points) <= 1
+                continue;
+            end
+
+            batchSize = batchSize + length(points);
+            TS      = zeros(length(points), n);
+            parfor x = 1:length(points)
+                i           = points(x);
+                yl          = yp;
+                yl(i)       = 0;
+                Ypos        = find(yl);
+                SO_start    = tic();
+                    [yi, li]    = SO(i, D, Ypos, Yneg, k);
+                SO_time     = SO_time + toc(SO_start);
+
+                M           = M + li;
+                TS(x,:)     = PSI(i, yi', n, Ypos, Yneg);
+            end
+
+            S(points,:) = S(points,:) + TS;
+            S(:,points) = S(:,points) + TS';
+            S(dIndex)   = S(dIndex) - sum(TS, 1);
+        end
+        M   = M / batchSize;
+    end
+
+    dPsi    = CPGRADIENT(X, S, batchSize);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/cuttingPlane/cuttingPlaneRandom.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,105 @@
+function [dPsi, M, SO_time] = cuttingPlaneRandom(k, X, W, Ypos, Yneg, batchSize, SAMPLES, ClassScores)
+%
+% [dPsi, M, SO_time] = cuttingPlaneRandom(k, X, W, Yp, Yn, batchSize, SAMPLES, ClassScores)
+%
+%   k           = k parameter for the SO
+%   X           = d*n data matrix
+%   W           = d*d PSD metric
+%   Yp          = cell-array of relevant results for each point
+%   Yn          = cell-array of irrelevant results for each point
+%   batchSize   = number of points to use in the constraint batch
+%   SAMPLES     = indices of valid points to include in the batch
+%   ClassScores = structure for synthetic constraints
+%
+%   dPsi        = dPsi vector for this batch
+%   M           = mean loss on this batch
+%   SO_time     = time spent in separation oracle
+
+    global SO PSI SETDISTANCE CPGRADIENT;
+
+    [d,n]   = size(X);
+
+
+    if length(SAMPLES) == n
+        % All samples are fair game (full data)
+        Batch   = randperm(n);
+        Batch   = Batch(1:batchSize);
+        D       = SETDISTANCE(X, W, Batch);
+
+    else
+        Batch   = randperm(length(SAMPLES));
+        Batch   = SAMPLES(Batch(1:batchSize));
+
+        Ito     = sparse(n,1);
+
+        if isempty(ClassScores)
+            for i = Batch
+                Ito(Ypos{i}) = 1;
+                Ito(Yneg{i}) = 1;
+            end
+            D       = SETDISTANCE(X, W, Batch, find(Ito));
+        else
+            D       = SETDISTANCE(X, W, Batch, 1:n);
+        end
+    end
+
+
+    M       = 0;
+    S       = zeros(n);
+    dIndex  = sub2ind([n n], 1:n, 1:n);
+
+    SO_time = 0;
+
+
+    if isempty(ClassScores)
+        TS = zeros(batchSize, n);
+        parfor j = 1:batchSize
+            i = Batch(j);
+            if isempty(Yneg)
+                Ynegative   = setdiff((1:n)', [i ; Ypos{i}]);
+            else
+                Ynegative   = Yneg{i};
+            end
+            SO_start        = tic();
+                [yi, li]    =   SO(i, D, Ypos{i}, Ynegative, k);
+            SO_time         = SO_time + toc(SO_start);
+    
+            M               = M + li /batchSize;
+            TS(j,:)         = PSI(i, yi', n, Ypos{i}, Ynegative);
+        end
+        S(Batch,:)      = TS;
+        S(:,Batch)      = S(:,Batch)    + TS';
+        S(dIndex)       = S(dIndex)     - sum(TS, 1);
+    else
+        for j = 1:length(ClassScores.classes)
+            c       = ClassScores.classes(j);
+            points  = find(ClassScores.Y(Batch) == c);
+            if ~any(points)
+                continue;
+            end
+
+            Yneg    = find(ClassScores.Yneg{j});
+            yp      = ClassScores.Ypos{j};
+
+            TS      = zeros(length(points), n);
+            parfor x = 1:length(points)
+                i               = Batch(points(x));
+                yl              = yp;
+                yl(i)           = 0;
+                Ypos            = find(yl);
+                SO_start        = tic();
+                    [yi, li]    =   SO(i, D, Ypos, Yneg, k);
+                SO_time         = SO_time + toc(SO_start);
+    
+                M               = M + li /batchSize;
+                TS(x,:)         = PSI(i, yi', n, Ypos, Yneg);
+            end
+            S(Batch(points),:)  = S(Batch(points),:) + TS;
+            S(:,Batch(points))  = S(:,Batch(points)) + TS';
+            S(dIndex)           = S(dIndex) - sum(TS, 1);
+        end
+    end
+
+    dPsi    = CPGRADIENT(X, S, batchSize);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/distance/distanceDODMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function D = distanceDODMKL(W, X)
+
+    [d, n, m] = size(X);
+
+    D = 0;
+    for i = 1:m
+        D = D + PsdToEdm(X(:,:,i)' * bsxfun(@times, squeeze(W(i,i,:)), X(:,:,i)));
+        for j = (i+1):m
+            Q = X(:,:,i) + X(:,:,j);
+            D = D + PsdToEdm(Q' * bsxfun(@times, squeeze(W(i,j,:)), Q));
+        end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/distance/distanceDiag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function D = distanceDiag(W, X)
+
+    D = PsdToEdm(X' * bsxfun(@times, W, X));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/distance/distanceDiagMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function D = distanceDiagMKL(W, X)
+
+    [d, n, m] = size(X);
+
+    D = zeros(n);
+    for i = 1:m
+        D = D + PsdToEdm(X(:,:,i)' * bsxfun(@times, W(:,i), X(:,:,i)));
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/distance/distanceFull.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function D = distanceFull(W, X)
+
+    D = PsdToEdm(X' * W * X);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/distance/distanceFullMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function D = distanceFullMKL(W, X)
+
+    [d, n, m] = size(X);
+
+    D = zeros(n);
+    parfor i = 1:m
+        D = D + PsdToEdm(X(:,:,i)' * W(:,:,i) * X(:,:,i));
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/distance/setDistanceDODMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,39 @@
+function D = setDistanceDODMKL(X, W, Ifrom, Ito)
+%
+% D = setDistanceDODMKL(X, W, Ifrom, Ito)
+%
+%   X       = d-by-n data matrix
+%   W       = m-by-m-by-n PSD matrix
+%   Ifrom   = k-by-1 vector of source points
+%   Ito     = j-by-1 vector of destination points
+%
+%   D = n-by-n matrix of squared euclidean distances from Ifrom to Ito
+%       D is sparse, and only the rows corresponding to Ifrom and
+%       columns corresponding to Ito are populated.
+
+    [d,n,m]       = size(X);
+    L           = W.^0.5;
+   
+    D = 0;
+    for i = 1:m
+        for j = i:m
+            Vfrom       = bsxfun(@times, squeeze(L(i,j)), X(:,Ifrom,i) + X(:,Ifrom,j));
+
+            if nargin == 4
+                Vto     = bsxfun(@times, squeeze(L(i,j)), X(:,Ito,i) + X(:,Ito,j));
+            else
+                Vto     = bsxfun(@times, squeeze(L(i,j)), X(:,:,i) + X(:,:,j));
+                Ito     = 1:n;
+            end
+
+            if i == j
+                s = 0.5;
+            else
+                s = 1;
+            end
+
+            D = D + s * distToFrom(n, Vto, Vfrom, Ito, Ifrom);
+        end
+    end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/distance/setDistanceDiag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function D = setDistanceDiag(X, W, Ifrom, Ito)
+%
+% D = setDistanceDiag(X, W, Ifrom, Ito)
+%
+%   X       = d-by-n data matrix
+%   W       = d-by-1 PSD matrix
+%   Ifrom   = k-by-1 vector of source points
+%   Ito     = j-by-1 vector of destination points
+%
+%   D = n-by-n matrix of squared euclidean distances from Ifrom to Ito
+%       D is sparse, and only the rows corresponding to Ifrom and
+%       columns corresponding to Ito are populated.
+
+    [d,n]       = size(X);
+    L           = W.^0.5;
+    
+    Vfrom       = bsxfun(@times, L, X(:,Ifrom));
+
+    if nargin == 4
+        Vto     = bsxfun(@times, L, X(:,Ito));
+    else
+        Vto     = bsxfun(@times, L, X);
+        Ito     = 1:n;
+    end
+
+    D = distToFrom(n, Vto, Vfrom, Ito, Ifrom);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/distance/setDistanceDiagMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+function D = setDistanceDiagMKL(X, W, Ifrom, Ito)
+%
+% D = setDistanceDiagMKL(X, W, Ifrom, Ito)
+%
+%   X       = d-by-n data matrix
+%   W       = d-by-1 PSD matrix
+%   Ifrom   = k-by-1 vector of source points
+%   Ito     = j-by-1 vector of destination points
+%
+%   D = n-by-n matrix of squared euclidean distances from Ifrom to Ito
+%       D is sparse, and only the rows corresponding to Ifrom and
+%       columns corresponding to Ito are populated.
+
+    [d,n,m]       = size(X);
+    L           = W.^0.5;
+   
+    D = 0;
+    for i = 1:m
+        Vfrom       = bsxfun(@times, L(:,i), X(:,Ifrom,i));
+
+        if nargin == 4
+            Vto     = bsxfun(@times, L(:,i), X(:,Ito,i));
+        else
+            Vto     = bsxfun(@times, L(:,i), X(:,:,i));
+            Ito     = 1:n;
+        end
+
+        D = D + distToFrom(n, Vto, Vfrom, Ito, Ifrom);
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/distance/setDistanceFull.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,28 @@
+function D = setDistanceFull(X, W, Ifrom, Ito)
+%
+% D = setDistanceFull(X, W, Ifrom, Ito)
+%
+%   X       = d-by-n data matrix
+%   W       = d-by-d PSD matrix
+%   Ifrom   = k-by-1 vector of source points
+%   Ito     = j-by-1 vector of destination points
+%
+%   D = n-by-n matrix of squared euclidean distances from Ifrom to Ito
+%       D is sparse, and only the rows corresponding to Ifrom and
+%       columns corresponding to Ito are populated.
+
+    [d,n]       = size(X);
+    [vecs,vals] = eig(0.5 * (W + W'));
+    L           = real(abs(vals)).^0.5 * vecs';
+
+    Vfrom   = L * X(:,Ifrom);
+
+    if nargin == 4
+        Vto     = L * X(:,Ito);
+    else
+        Vto     = L * X;
+        Ito     = 1:n;
+    end
+
+    D = distToFrom(n, Vto, Vfrom, Ito, Ifrom);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/distance/setDistanceFullMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+function D = setDistanceFullMKL(X, W, Ifrom, Ito)
+%
+% D = setDistanceFullMKL(X, W, Ifrom, Ito)
+%
+%   X       = d-by-n-by-m data matrix
+%   W       = d-by-d-by-m PSD matrix
+%   Ifrom   = k-by-1 vector of source points
+%   Ito     = j-by-1 vector of destination points
+%
+%   D = n-by-n matrix of squared euclidean distances from Ifrom to Ito
+%       D is sparse, and only the rows corresponding to Ifrom and
+%       columns corresponding to Ito are populated.
+
+    [d,n,m]       = size(X);
+
+    D = 0;
+
+    if nargin < 4
+        Ito     = 1:n;
+    end
+
+    parfor i = 1:m
+        [vecs,vals] = eig(0.5 * (W(:,:,i) + W(:,:,i)'));
+        L           = real(abs(vals)).^0.5 * vecs';
+
+        Vfrom   = L * X(:,Ifrom,i);
+
+        Vto     = L * X(:,Ito,i);
+
+        D = D + distToFrom(n, Vto, Vfrom, Ito, Ifrom);
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/dual/dualWDiag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function W = dualWDiag(alpha, Z, U, RHO, K)
+
+    global PsiR;
+    d = size(K, 1);
+    m = length(alpha);
+
+    W = Z - U - ones(d,1) / (d * RHO);
+    for i = 1:m
+        W = W + alpha(i) * PsiR{i} / RHO;
+    end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/dual/dualWDiagMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function W = dualWDiagMKL(alpha, Z, U, RHO, K)
+
+    global PsiR;
+    d = size(K, 1);
+    m = length(alpha);
+
+    nKernels = size(K,3);
+
+    W = Z - U;
+    for p = 1:nKernels
+        W(:,p) = W(:,p) - diag(K(:,:,p)) / RHO;
+    end
+
+    for i = 1:m
+        W = W + alpha(i) * PsiR{i} / RHO;
+    end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/dual/dualWLinear.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function W = dualWlinear(alpha, Z, U, RHO, K)
+
+    global PsiR;
+    d = size(K, 1);
+    m = length(alpha);
+
+    W = Z - U - eye(d) /(d * RHO);
+    for i = 1:m
+        W = W + alpha(i) * PsiR{i} / RHO;
+    end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/dual/dualWMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function W = dualWMKL(alpha, Z, U, RHO, K)
+
+    global PsiR;
+    d = size(K, 1);
+    m = length(alpha);
+
+    nKernels = size(K,3);
+
+    W = Z - U - K / RHO;
+    for i = 1:m
+        W = W + alpha(i) * PsiR{i} / RHO;
+    end
+%     for p = 1:nKernels
+%         W(:,:,p) = W(:,:,p) - K(:,:,p) / RHO;
+%         for i = 1:m
+%             W(:,:,p) = W(:,:,p) + alpha(i) * PsiR{i}(:,:,p) / RHO;
+%         end
+%     end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/dual/structKernelDiag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function H = structKernelDiag(Psi1, Psi2)
+
+    H = Psi1' * Psi2;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/dual/structKernelDiagMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function H = structKernelDiagMKL(Psi1, Psi2)
+
+    H = Psi1(:)' * Psi2(:);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/dual/structKernelLinear.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function H = structKernelLinear(Psi1, Psi2)
+
+    H = Psi1(:)' * Psi2(:);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/dual/structKernelMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function H = structKernelMKL(Psi1, Psi2)
+
+    H = Psi1(:)' * Psi2(:);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/feasible/feasibleDODMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function W = feasibleDODMKL(W)
+%
+% W = feasibleFull(W)
+%
+% Projects a single d*1 matrix onto the PSD cone
+%
+    W = max(0,W);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/feasible/feasibleDiag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function W = feasibleDiag(W)
+%
+% W = feasibleDiag(W)
+%
+% Projects a single d*1 matrix onto the PSD cone
+%
+    global FEASIBLE_COUNT;
+    FEASIBLE_COUNT = FEASIBLE_COUNT + 1;
+    W = max(0,W);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/feasible/feasibleDiagMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function W = feasibleFull(W)
+%
+% W = feasibleFull(W)
+%
+% Projects a single d*1 matrix onto the PSD cone
+%
+    global FEASIBLE_COUNT;
+    FEASIBLE_COUNT = FEASIBLE_COUNT + 1;
+    W = max(0,W);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/feasible/feasibleFull.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,14 @@
+function W = feasibleFull(W)
+%
+% W = feasibleFull(W)
+%
+% Projects a single d*d matrix onto the PSD cone
+%
+
+    global FEASIBLE_COUNT;
+    FEASIBLE_COUNT = FEASIBLE_COUNT + 1;
+
+    [v,d]   = eig(0.5 * (W + W'));
+    W       = v * bsxfun(@times, max(real(diag(d)),0), v');
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/feasible/feasibleFullMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function W = feasibleFullMKL(W)
+%
+% W = feasibleFullMKL(W)
+%
+% Projects a single d*d matrix onto the PSD cone
+%
+    global FEASIBLE_COUNT;
+    m       = size(W,3);
+    FEASIBLE_COUNT = FEASIBLE_COUNT + m;
+
+    parfor i = 1:m
+        [v,d]       = eig(0.5 * (W(:,:,i) + W(:,:,i)'));
+        W(:,:,i)    = v * bsxfun(@times, max(real(diag(d)),0), v');
+    end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/initialize/initializeDODMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function W = initializeDODMKL(X)
+
+    [d,n,m] = size(X);
+
+    W = zeros(m,m,d);
+    for i = 1:m
+        for j = i:m
+            W(i,j,:) = ones(d,1);
+        end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/initialize/initializeDiag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function W = initializeDiag(X)
+
+    [d,n,m] = size(X);
+
+%     W = ones(d, 1);
+    W = 1./std(X,1,2);
+    W(isinf(W)) = 1;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/initialize/initializeDiagMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function W = initializeDiagMKL(X)
+    
+    [d,n,m] = size(X);
+
+    W = zeros(d,m);
+    for i = 1:m
+        W(:,i) = 1./std(X(:,:,i),1,2);
+    end
+    W(isinf(W)) = 1;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/initialize/initializeFull.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function W = initializeFull(X)
+    
+    [d,n,m] = size(X);
+
+    W = diag(1./std(X,1,2));
+    W(isinf(W)) = 1;
+    W(isnan(W)) = 1;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/initialize/initializeFullMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+function W = initializeFull(X)
+
+    [d,n,m] = size(X);
+
+    W = zeros(d,d,m);
+    for i = 1:m
+        W(:,:,i) = diag(1./std(X(:,:,i),1,2));
+    end
+    W(isinf(W)) = 1;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/loss/lossHinge.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function Xi = lossHinge(W, Psi, M, gradient)
+%
+%   Xi = lossHinge(W, Psi, M, gradient)
+%   
+%   W:          d*d metric
+%   Psi:        d*d feature matrix
+%   M:          the desired margin
+%   gradient:   if 0, returns the loss value
+%               if 1, returns the gradient of the loss WRT W
+    
+    Xi = max(0, M - sum(sum(W .* Psi)));
+
+    if gradient & Xi > 0
+        Xi = -Psi;
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/loss/lossHingeDODMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,18 @@
+function Xi = lossHingeDODMKL(W, Psi, M, gradient)
+%
+%   Xi = lossHingeDODMKL(W, Psi, M, gradient)
+%   
+%   W:          m*m*d matrix of diagonal metrics
+%   Psi:        m*m*d feature matrix
+%   M:          the desired margin
+%   gradient:   if 0, returns the loss value
+%               if 1, returns the gradient of the loss WRT W
+
+    m = size(W,1);
+
+    Xi = max(0, M - sum(sum(sum(W .* Psi))));
+
+    if gradient & Xi > 0
+        Xi = -Psi;
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/loss/lossHingeDiagMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,16 @@
+function Xi = lossHingeDiagMKL(W, Psi, M, gradient)
+%
+%   Xi = lossHingeDiagMKL(W, Psi, M, gradient)
+%   
+%   W:          d*m matrix of diagonal metrics
+%   Psi:        d*m feature matrix
+%   M:          the desired margin
+%   gradient:   if 0, returns the loss value
+%               if 1, returns the gradient of the loss WRT W
+    
+    Xi = max(0, M - trace(W' * Psi));
+
+    if gradient & Xi > 0
+        Xi = -Psi;
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/loss/lossHingeFullMKL.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+function Xi = lossHingeMKLFull(W, Psi, M, gradient)
+%
+%   Xi = lossHingeMKLFull(W, Psi, M, gradient)
+%   
+%   W:          d*d*m metric
+%   Psi:        d*d*m feature matrix
+%   M:          the desired margin
+%   gradient:   if 0, returns the loss value
+%               if 1, returns the gradient of the loss WRT W
+    
+    m = size(W, 3);
+
+    Xi = M;
+    for i = 1:m
+        Xi = Xi -  sum(sum(W(:,:,i) .* Psi(:,:,i)));
+    end
+    Xi = max(0, Xi);
+
+    if gradient & Xi > 0
+        Xi = -Psi;
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/metricPsi/metricPsiMRR.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+function S = metricPsiMRR(q, y, n, pos, neg)
+%
+%   S = metricPsiMRR(q, y, n, d, pos, neg)
+%
+%   q   = index of the query point
+%   y   = the ordering to compute
+%   n   = number of points in the data set
+%   pos = indices of relevant results for q
+%   neg = indices of irrelevant results for q
+%
+%   S is the vector of weights for q
+
+    yp          = ismember(y, pos);
+    % Truncate yp after the first 1
+    yp(find(yp,1)+1:end) = 0;
+    NumPOS      = sum(yp);
+    PosAfter    = NumPOS - cumsum(yp);
+
+    yn          = ~yp;
+    NumNEG      = sum(yn);
+    NegBefore   = cumsum(yn) - yn;
+
+    S = zeros(n,1);
+
+    S(y)    = 2 * (yp .* NegBefore - yn .* PosAfter) / (NumNEG * NumPOS);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/metricPsi/metricPsiPO.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+function S = metricPsiPO(q, y, n, pos, neg)
+%
+%   S = metricPsiPO(q, y, n, d, pos, neg)
+%
+%   q   = index of the query point
+%   y   = the ordering to compute
+%   n   = number of points in the data set
+%   pos = indices of relevant results for q
+%   neg = indices of irrelevant results for q
+%
+%   S is the vector of weights for q
+
+    yp          = ismember(y, pos);
+    NumPOS      = sum(yp);
+    PosAfter    = NumPOS - cumsum(yp);
+
+    yn          = ~yp;
+    NumNEG      = sum(yn);
+    NegBefore   = cumsum(yn) - yn;
+
+    S = zeros(n,1);
+
+    S(y)    = 2 * (yp .* NegBefore - yn .* PosAfter) / (NumNEG * NumPOS);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/mlr_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,70 @@
+function mlr_demo()
+
+    display('Loading Wine data');
+    load Wine;
+
+    % z-score the input dimensions
+    display('z-scoring features');
+    X = zscore(X')';
+
+    [d,n] = size(X);
+    
+    % Generate a random training/test split
+    display('Generating a 80/20 training/test split');
+    P       = randperm(n);
+    Xtrain  = X(:,P(1:floor(0.8 * n)));
+    Ytrain  = Y(P(1:floor(0.8*n)));
+    Xtest   = X(:,P((1+floor(0.8*n)):end));
+    Ytest   = Y(P((1+floor(0.8*n)):end));
+
+
+    % Optimize W for AUC
+    C = 1e-2;
+    display(sprintf('Training with C=%.2e, Delta=mAP', C));
+    [W, Xi, Diagnostics] = mlr_train(Xtrain, Ytrain, C, 'map');
+%     [W, Xi, Diagnostics] = mlr_train_primal(Xtrain, Ytrain, C, 'map');
+
+    display('Test performance in the native (normalized) metric');
+    mlr_test(eye(d), 3, Xtrain, Ytrain, Xtest, Ytest)
+
+    display('Test performance with MLR metric');
+    mlr_test(W, 3, Xtrain, Ytrain, Xtest, Ytest)
+
+    % Scatter-plot
+    figure;
+    subplot(1,2,1), drawData(eye(d), Xtrain, Ytrain, Xtest, Ytest), title('Native metric (z-scored)');
+    subplot(1,2,2), drawData(W, Xtrain, Ytrain, Xtest, Ytest), title('Learned metric (MLR-mAP)');
+
+    Diagnostics
+
+end
+
+
+function drawData(W, Xtrain, Ytrain, Xtest, Ytest);
+
+    n = length(Ytrain);
+    m = length(Ytest);
+
+    if size(W,2) == 1
+        W = diag(W);
+    end
+    % PCA the learned metric
+    Z = [Xtrain Xtest];
+    A = Z' * W * Z;
+    [v,d] = eig(A);
+
+    L = (d.^0.5) * v';
+    L = L(1:2,:);
+
+    % Draw training points
+    hold on;
+    trmarkers = {'b+', 'r+', 'g+'};
+    tsmarkers = {'bo', 'ro', 'go'};
+    for i = min(Ytrain):max(Ytrain)
+        points = find(Ytrain == i);
+        scatter(L(1,points), L(2,points), trmarkers{i});
+        points = n + find(Ytest == i);
+        scatter(L(1,points), L(2,points), tsmarkers{i});
+    end
+    legend({'Training', 'Test'});
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/mlr_plot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+function mlr_plot(X, Y, W, D)
+
+    [d, n] = size(X);
+    %%%
+    % Color-coding
+    CODES = {   'b.', 'r.', 'g.', 'c.', 'k.', 'm.', 'y.', ...
+                'b+', 'r+', 'g+', 'c+', 'k+', 'm+', 'y+', ...
+                'b^', 'r^', 'g^', 'c^', 'k^', 'm^', 'y^', ...
+                'bx', 'rx', 'gx', 'cx', 'kx', 'mx', 'yx', ...
+                'bo', 'ro', 'go', 'co', 'ko', 'mo', 'yo'};
+
+    %%%
+    % First, PCA-plot of X
+
+    figure;
+
+    z = sum(X,3);
+    subplot(3,2,[1 3]), pcaplot(z, eye(d), Y, CODES), title('Native');
+    subplot(3,2,[2 4]), pcaplot(X, W, Y, CODES), title('Learned');
+
+    [vecs, vals] = eig(z * z');
+    subplot(3,2,5), bar(sort(real(diag(vals)), 'descend')), title('X*X'' spectrum'), axis tight;
+
+    if size(X,3) == 1
+        [vecs, vals] = eig(W);
+        vals = real(diag(vals));
+    else
+        if size(W,3) == 1
+            vals = real(W(:));
+        else
+            vals = [];
+            for i = 1:size(W,3)
+                [vecs, vals2] = eig(W(:,:,i));
+                vals = [vals ; real(diag(vals2))];
+            end
+        end
+    end
+    subplot(3,2,6), bar(sort(vals, 'descend')), title('W spectrum'), axis tight;
+
+    if nargin < 4
+        return;
+    end
+
+    %%%
+    % Now show some diagnostics
+
+    figure;
+    subplot(2,1,1), semilogy(D.f), title('Objective');
+    subplot(2,1,2), barh([D.time_SO, D.time_solver D.time_total]), ...
+                    title('Time% in SO/solver/total');
+
+
+function pcaplot(X, W, Y, CODES)
+    if size(X,3) == 1
+        A = X' * W * X;
+    else
+        A = 0;
+        if size(W,3) == 1
+            for i = 1:size(X,3)
+                A = A + X(:,:,i)' * bsxfun(@times, W(:,i), X(:,:,i));
+            end
+        else
+            for i = 1:size(X,3)
+                A = A + X(:,:,i)' * W(:,:,i) * X(:,:,i);
+            end
+        end
+    end
+    [v,d] = eigs(A, 3);
+    X2 = d.^0.5 * v';
+    hold on;
+    for y = 1:max(Y)
+        z = Y == y;
+        scatter3(X2(1, z), X2(2, z), X2(3,z), CODES{y});
+    end
+
+    axis equal;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/mlr_test.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,283 @@
+function Perf = mlr_test(W, test_k, Xtrain, Ytrain, Xtest, Ytest)
+%   Perf = mlr_test(W, test_k, Xtrain, Ytrain, Xtest, Ytest)
+%
+%       W       = d-by-d positive semi-definite matrix
+%       test_k  = vector of k-values to use for KNN/Prec@k/NDCG
+%       Xtrain  = d-by-n matrix of training data
+%       Ytrain  = n-by-1 vector of training labels
+%                   OR
+%                 n-by-2 cell array where
+%                   Y{q,1} contains relevant indices (in 1..n) for point q
+%                   Y{q,2} contains irrelevant indices (in 1..n) for point q
+%       Xtest   = d-by-m matrix of testing data
+%       Ytest   = m-by-1 vector of training labels, or m-by-2 cell array 
+%               
+%
+%   The output structure Perf contains the mean score for:
+%       AUC, KNN, Prec@k, MAP, MRR, NDCG,
+%   as well as the effective dimensionality of W, and
+%   the best-performing k-value for KNN, Prec@k, and NDCG.
+%
+
+    Perf        = struct(                       ...
+                            'AUC',      [],     ...
+                            'KNN',      [],     ...
+                            'PrecAtK',  [],     ...
+                            'MAP',      [],     ...
+                            'MRR',      [],     ...
+                            'NDCG',     [],     ...
+                            'dimensionality',   [],     ...
+                            'KNNk',     [],     ...
+                            'PrecAtKk', [],     ...
+                            'NDCGk',    []     ...
+                );
+
+    [d, nTrain, nKernel] = size(Xtrain);
+    % Compute dimensionality of the learned metric
+    Perf.dimensionality = mlr_test_dimension(W, nTrain, nKernel);
+    test_k      = min(test_k, nTrain);
+
+    if nargin > 5
+        % Knock out the points with no labels
+        if ~iscell(Ytest)
+            Ibad                = find(isnan(Ytrain));
+            Xtrain(:,Ibad,:)    = inf;
+        end
+
+        % Build the distance matrix
+        [D, I] = mlr_test_distance(W, Xtrain, Xtest);
+    else
+        % Leave-one-out validation
+
+        if nargin > 4 
+            % In this case, Xtest is a subset of training indices to test on
+            testRange = Xtest;
+        else
+            testRange = 1:nTrain;
+        end
+        Xtest       = Xtrain(:,testRange,:);
+        Ytest       = Ytrain(testRange);
+
+        % compute self-distance
+        [D, I]  = mlr_test_distance(W, Xtrain, Xtest);
+        % clear out the self-link (distance = 0)
+        I       = I(2:end,:);
+        D       = D(2:end,:);
+    end
+    
+    nTest       = length(Ytest);
+
+    % Compute label agreement
+    if ~iscell(Ytest)
+        % First, knock out the points with no label
+        Labels  = Ytrain(I);
+        Agree   = bsxfun(@eq, Ytest', Labels); 
+
+        % We only compute KNN error if Y are labels
+        [Perf.KNN, Perf.KNNk] = mlr_test_knn(Labels, Ytest, test_k);
+    else
+        if nargin > 5
+            Agree   = zeros(nTrain, nTest);
+        else
+            Agree   = zeros(nTrain-1, nTest);
+        end
+        for i = 1:nTest
+            Agree(:,i) = ismember(I(:,i), Ytest{i,1});
+        end
+
+        Agree = reduceAgreement(Agree);
+    end
+
+    % Compute AUC score
+    Perf.AUC    = mlr_test_auc(Agree);
+
+    % Compute MAP score
+    Perf.MAP    = mlr_test_map(Agree);
+
+    % Compute MRR score
+    Perf.MRR    = mlr_test_mrr(Agree);
+
+    % Compute prec@k
+    [Perf.PrecAtK, Perf.PrecAtKk] = mlr_test_preck(Agree, test_k);
+
+    % Compute NDCG score
+    [Perf.NDCG, Perf.NDCGk] = mlr_test_ndcg(Agree, test_k);
+
+end
+
+
+function [D,I] = mlr_test_distance(W, Xtrain, Xtest)
+
+    % CASES:
+    %   Raw:                        W = []
+    
+    %   Linear, full:               W = d-by-d
+    %   Single Kernel, full:        W = n-by-n
+    %   MKL, full:                  W = n-by-n-by-m
+
+    %   Linear, diagonal:           W = d-by-1
+    %   Single Kernel, diagonal:    W = n-by-1
+    %   MKL, diag:                  W = n-by-m
+    %   MKL, diag-off-diag:         W = m-by-m-by-n
+    
+    [d, nTrain, nKernel] = size(Xtrain);
+    nTest = size(Xtest, 2);
+
+    if isempty(W)
+        % W = []  => native euclidean distances
+        D = mlr_test_distance_raw(Xtrain, Xtest);
+
+    elseif size(W,1) == d && size(W,2) == d
+        % We're in a full-projection case
+        D = setDistanceFullMKL([Xtrain Xtest], W, nTrain + (1:nTest), 1:nTrain);
+
+    elseif size(W,1) == d && size(W,2) == nKernel
+        % We're in a simple diagonal case
+        D = setDistanceDiagMKL([Xtrain Xtest], W, nTrain + (1:nTest), 1:nTrain);
+
+    else
+        % Error?
+        error('Cannot determine metric mode.');
+
+    end
+    
+    D       = full(D(1:nTrain, nTrain + (1:nTest)));
+    [v,I]   = sort(D, 1);
+end
+
+
+
+function dimension = mlr_test_dimension(W, nTrain, nKernel)
+
+    % CASES:
+    %   Raw:                        W = []
+    
+    %   Linear, full:               W = d-by-d
+    %   Single Kernel, full:        W = n-by-n
+    %   MKL, full:                  W = n-by-n-by-m
+
+    %   Linear, diagonal:           W = d-by-1
+    %   Single Kernel, diagonal:    W = n-by-1
+    %   MKL, diag:                  W = n-by-m
+    %   MKL, diag-off-diag:         W = m-by-m-by-n
+    
+    
+    if size(W,1) == size(W,2)
+        dim = [];
+        for i = 1:nKernel
+            [v,d]   = eig(0.5 * (W(:,:,i) + W(:,:,i)'));
+            dim     = [dim ; abs(real(diag(d)))];
+        end
+    else
+        dim       = W(:);
+    end
+
+    cd      = cumsum(dim) / sum(dim);
+    dimension = find(cd >= 0.95, 1);
+    if isempty(dimension)
+        dimension = 0;
+    end
+end
+
+function [NDCG, NDCGk] = mlr_test_ndcg(Agree, test_k)
+
+    nTrain = size(Agree, 1);
+
+    Discount        = zeros(1, nTrain);
+    Discount(1:2)   = 1;
+
+    NDCG   = -Inf;
+    NDCGk  = 0;
+    for k = test_k
+        
+        Discount(3:k)   = 1 ./ log2(3:k);
+        Discount        = Discount / sum(Discount);
+
+        b = mean(Discount * Agree);
+        if b > NDCG
+            NDCG = b;
+            NDCGk = k;
+        end
+    end
+end
+
+function [PrecAtK, PrecAtKk] = mlr_test_preck(Agree, test_k)
+
+    PrecAtK        = -Inf;
+    PrecAtKk       = 0;
+    for k = test_k
+        b   = mean( mean( Agree(1:k, :), 1 ) );
+        if b > PrecAtK
+            PrecAtK = b;
+            PrecAtKk = k;
+        end
+    end
+end
+
+function [KNN, KNNk] = mlr_test_knn(Labels, Ytest, test_k)
+
+    KNN        = -Inf;
+    KNNk       = 0;
+    for k = test_k
+        % FIXME:  2012-02-07 16:51:59 by Brian McFee <bmcfee@cs.ucsd.edu>
+        %   fix these to discount nans 
+
+        b   = mean( mode( Labels(1:k,:), 1 ) == Ytest');
+        if b > KNN
+            KNN    = b;
+            KNNk   = k;
+        end
+    end
+end
+
+function MAP = mlr_test_map(Agree);
+
+    nTrain      = size(Agree, 1);
+    MAP         = bsxfun(@ldivide, (1:nTrain)', cumsum(Agree, 1));
+    MAP         = mean(sum(MAP .* Agree, 1)./ sum(Agree, 1));
+end
+
+function MRR = mlr_test_mrr(Agree);
+
+        nTest = size(Agree, 2);
+        MRR        = 0;
+        for i = 1:nTest
+            MRR    = MRR  + (1 / find(Agree(:,i), 1));
+        end
+        MRR        = MRR / nTest;
+end
+
+function AUC = mlr_test_auc(Agree)
+
+    TPR             = cumsum(Agree,     1);
+    FPR             = cumsum(~Agree,    1);
+
+    numPos          = TPR(end,:);
+    numNeg          = FPR(end,:);
+
+    TPR             = mean(bsxfun(@rdivide, TPR, numPos),2);
+    FPR             = mean(bsxfun(@rdivide, FPR, numNeg),2);
+    AUC             = diff([0 FPR']) * TPR;
+end
+
+
+function D = mlr_test_distance_raw(Xtrain, Xtest)
+
+    [d, nTrain, nKernel] = size(Xtrain);
+    nTest = size(Xtest, 2);
+
+        % Not in kernel mode, compute distances directly
+        D = 0;
+        for i = 1:nKernel
+            D = D + setDistanceDiag([Xtrain(:,:,i) Xtest(:,:,i)], ones(d,1), ...
+                                    nTrain + (1:nTest), 1:nTrain);
+        end
+end
+
+function A = reduceAgreement(Agree)
+    nPos = sum(Agree,1);
+    nNeg = sum(~Agree,1);
+
+    goodI = find(nPos > 0 & nNeg > 0);
+    A = Agree(:,goodI);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/mlr_train.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,507 @@
+function [W, Xi, Diagnostics] = mlr_train(X, Y, Cslack, varargin)
+%
+%   [W, Xi, D] = mlr_train(X, Y, C,...)
+%
+%       X = d*n data matrix
+%       Y = either n-by-1 label of vectors
+%           OR
+%           n-by-2 cell array where 
+%               Y{q,1} contains relevant indices for q, and
+%               Y{q,2} contains irrelevant indices for q
+%       
+%       C >= 0 slack trade-off parameter (default=1)
+%
+%       W   = the learned metric
+%       Xi  = slack value on the learned metric
+%       D   = diagnostics
+%
+%   Optional arguments:
+%
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS)
+%       where LOSS is one of:
+%           'AUC':      Area under ROC curve (default)
+%           'KNN':      KNN accuracy
+%           'Prec@k':   Precision-at-k
+%           'MAP':      Mean Average Precision
+%           'MRR':      Mean Reciprocal Rank
+%           'NDCG':     Normalized Discounted Cumulative Gain
+%
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k)
+%       where k is the number of neighbors for Prec@k or NDCG
+%       (default=3)
+%
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG)
+%       where REG defines the regularization on W, and is one of:
+%           0:          no regularization
+%           1:          1-norm: trace(W)            (default)
+%           2:          2-norm: trace(W' * W)
+%           3:          Kernel: trace(W * X), assumes X is square and positive-definite
+%
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG, Diagonal)
+%       Diagonal = 0:   learn a full d-by-d W       (default)
+%       Diagonal = 1:   learn diagonally-constrained W (d-by-1)
+%       
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG, Diagonal, B)
+%       where B > 0 enables stochastic optimization with batch size B
+%
+% // added by Daniel Wolff
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG, Diagonal, B, CC)
+%       Set ConstraintClock to CC (default: 20, 100)
+% 
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG, Diagonal, B, CC, E)
+%       Set ConstraintClock to E (default: 1e-3)
+%
+
+    TIME_START = tic();
+
+    global C;
+    C = Cslack;
+
+    [d,n,m] = size(X);
+
+    if m > 1
+        MKL = 1;
+    else
+        MKL = 0;
+    end
+
+    if nargin < 3
+        C = 1;
+    end
+
+    %%%
+    % Default options:
+
+    global CP SO PSI REG FEASIBLE LOSS DISTANCE SETDISTANCE CPGRADIENT STRUCTKERNEL DUALW INIT;
+
+    global FEASIBLE_COUNT;
+    FEASIBLE_COUNT = 0;
+
+    CP          = @cuttingPlaneFull;
+    SO          = @separationOracleAUC;
+    PSI         = @metricPsiPO;
+
+    if ~MKL
+        INIT        = @initializeFull;
+        REG         = @regularizeTraceFull;
+        STRUCTKERNEL= @structKernelLinear;
+        DUALW       = @dualWLinear;
+        FEASIBLE    = @feasibleFull;
+        CPGRADIENT  = @cpGradientFull;
+        DISTANCE    = @distanceFull;
+        SETDISTANCE = @setDistanceFull;
+        LOSS        = @lossHinge;
+        Regularizer = 'Trace';
+    else
+        INIT        = @initializeFullMKL;
+        REG         = @regularizeMKLFull;
+        STRUCTKERNEL= @structKernelMKL;
+        DUALW       = @dualWMKL;
+        FEASIBLE    = @feasibleFullMKL;
+        CPGRADIENT  = @cpGradientFullMKL;
+        DISTANCE    = @distanceFullMKL;
+        SETDISTANCE = @setDistanceFullMKL;
+        LOSS        = @lossHingeFullMKL;
+        Regularizer = 'Trace';
+    end
+
+    
+    Loss        = 'AUC';
+    Feature     = 'metricPsiPO';
+
+
+    %%%
+    % Default k for prec@k, ndcg
+    k           = 3;
+
+    %%%
+    % Stochastic violator selection?
+    STOCHASTIC  = 0;
+    batchSize   = n;
+    SAMPLES     = 1:n;
+
+
+    if nargin > 3
+        switch lower(varargin{1})
+            case {'auc'}
+                SO          = @separationOracleAUC;
+                PSI         = @metricPsiPO;
+                Loss        = 'AUC';
+                Feature     = 'metricPsiPO';
+            case {'knn'}
+                SO          = @separationOracleKNN;
+                PSI         = @metricPsiPO;
+                Loss        = 'KNN';
+                Feature     = 'metricPsiPO';
+            case {'prec@k'}
+                SO          = @separationOraclePrecAtK;
+                PSI         = @metricPsiPO;
+                Loss        = 'Prec@k';
+                Feature     = 'metricPsiPO';
+            case {'map'}
+                SO  = @separationOracleMAP;
+                PSI = @metricPsiPO;
+                Loss        = 'MAP';
+                Feature     = 'metricPsiPO';
+            case {'mrr'}
+                SO          = @separationOracleMRR;
+                PSI         = @metricPsiPO;
+                Loss        = 'MRR';
+                Feature     = 'metricPsiPO';
+            case {'ndcg'}
+                SO          = @separationOracleNDCG;
+                PSI         = @metricPsiPO;
+                Loss        = 'NDCG';
+                Feature     = 'metricPsiPO';
+            otherwise
+                error('MLR:LOSS', ...
+                    'Unknown loss function: %s', varargin{1});
+        end
+    end
+
+    if nargin > 4
+        k = varargin{2};
+    end
+
+    Diagonal = 0;
+    if nargin > 6 & varargin{4} > 0
+        Diagonal = varargin{4};
+
+        if ~MKL
+            INIT        = @initializeDiag;
+            REG         = @regularizeTraceDiag;
+            STRUCTKERNEL= @structKernelDiag;
+            DUALW       = @dualWDiag;
+            FEASIBLE    = @feasibleDiag;
+            CPGRADIENT  = @cpGradientDiag;
+            DISTANCE    = @distanceDiag;
+            SETDISTANCE = @setDistanceDiag;
+            Regularizer = 'Trace';
+        else
+            INIT        = @initializeDiagMKL;
+            REG         = @regularizeMKLDiag;
+            STRUCTKERNEL= @structKernelDiagMKL;
+            DUALW       = @dualWDiagMKL;
+            FEASIBLE    = @feasibleDiagMKL;
+            CPGRADIENT  = @cpGradientDiagMKL;
+            DISTANCE    = @distanceDiagMKL;
+            SETDISTANCE = @setDistanceDiagMKL;
+            LOSS        = @lossHingeDiagMKL;
+            Regularizer = 'Trace';
+        end
+    end
+
+    if nargin > 5
+        switch(varargin{3})
+            case {0}
+                REG         = @regularizeNone;
+                Regularizer = 'None';
+
+            case {1}
+                if MKL
+                    if Diagonal == 0
+                        REG         = @regularizeMKLFull;
+                        STRUCTKERNEL= @structKernelMKL;
+                        DUALW       = @dualWMKL;
+                    elseif Diagonal == 1
+                        REG         = @regularizeMKLDiag;
+                        STRUCTKERNEL= @structKernelDiagMKL;
+                        DUALW       = @dualWDiagMKL;
+                    end
+                else
+                    if Diagonal 
+                        REG         = @regularizeTraceDiag;
+                        STRUCTKERNEL= @structKernelDiag;
+                        DUALW       = @dualWDiag;
+                    else
+                        REG         = @regularizeTraceFull;
+                        STRUCTKERNEL= @structKernelLinear;
+                        DUALW       = @dualWLinear;
+                    end
+                end
+                Regularizer = 'Trace';
+
+            case {2}
+                if Diagonal
+                    REG         = @regularizeTwoDiag;
+                else
+                    REG         = @regularizeTwoFull;
+                end
+                Regularizer = '2-norm';
+                error('MLR:REGULARIZER', '2-norm regularization no longer supported');
+                
+
+            case {3}
+                if MKL
+                    if Diagonal == 0
+                        REG         = @regularizeMKLFull;
+                        STRUCTKERNEL= @structKernelMKL;
+                        DUALW       = @dualWMKL;
+                    elseif Diagonal == 1
+                        REG         = @regularizeMKLDiag;
+                        STRUCTKERNEL= @structKernelDiagMKL;
+                        DUALW       = @dualWDiagMKL;
+                    end
+                else
+                    if Diagonal
+                        REG         = @regularizeMKLDiag;
+                        STRUCTKERNEL= @structKernelDiagMKL;
+                        DUALW       = @dualWDiagMKL;
+                    else
+                        REG         = @regularizeKernel;
+                        STRUCTKERNEL= @structKernelMKL;
+                        DUALW       = @dualWMKL;
+                    end
+                end
+                Regularizer = 'Kernel';
+
+            otherwise
+                error('MLR:REGULARIZER', ... 
+                    'Unknown regularization: %s', varargin{3});
+        end
+    end
+
+
+    % Are we in stochastic optimization mode?
+    if nargin > 7 && varargin{5} > 0
+        if varargin{5} < n
+            STOCHASTIC  = 1;
+            CP          = @cuttingPlaneRandom;
+            batchSize   = varargin{5};
+        end
+    end
+
+    % Algorithm
+    %
+    % Working <- []
+    %
+    % repeat:
+    %   (W, Xi) <- solver(X, Y, C, Working)
+    %
+    %   for i = 1:|X|
+    %       y^_i <- argmax_y^ ( Delta(y*_i, y^) + w' Psi(x_i, y^) )
+    %
+    %   Working <- Working + (y^_1,y^_2,...,y^_n)
+    % until mean(Delta(y*_i, y_i)) - mean(w' (Psi(x_i,y_i) - Psi(x_i,y^_i))) 
+    %           <= Xi + epsilon
+
+    global DEBUG;
+    
+    if isempty(DEBUG)
+        DEBUG = 0;
+    end
+
+    %%%
+    % Timer to eliminate old constraints
+        
+    %%%
+    % Timer to eliminate old constraints
+    ConstraintClock = 100; % standard: 100
+    
+    if nargin > 8 && varargin{6} > 0
+        ConstraintClock = varargin{6};
+    end
+    
+    %%%
+    % Convergence criteria for worst-violated constraint
+    E = 1e-3;
+    if nargin > 9 && varargin{7} > 0
+        E = varargin{7};
+    end
+    
+    
+    %XXX:    2012-01-31 21:29:50 by Brian McFee <bmcfee@cs.ucsd.edu>
+    % no longer belongs here
+    % Initialize
+    W           = INIT(X);
+
+
+    global ADMM_Z ADMM_U RHO;
+    ADMM_Z      = W;
+    ADMM_U      = 0 * ADMM_Z;
+
+    %%%
+    % Augmented lagrangian factor
+    RHO = 1;
+
+    ClassScores = [];
+
+    if isa(Y, 'double')
+        Ypos        = [];
+        Yneg        = [];
+        ClassScores = synthesizeRelevance(Y);
+
+    elseif isa(Y, 'cell') && size(Y,1) == n && size(Y,2) == 2
+         dbprint(2, 'Using supplied Ypos/synthesized Yneg');
+        Ypos        = Y(:,1);
+        Yneg        = Y(:,2);
+
+        % Compute the valid samples
+        SAMPLES     = find( ~(cellfun(@isempty, Y(:,1)) | cellfun(@isempty, Y(:,2))));
+    elseif isa(Y, 'cell') && size(Y,1) == n && size(Y,2) == 1
+        dbprint(2, 'Using supplied Ypos/synthesized Yneg');
+        Ypos        = Y(:,1);
+        Yneg        = [];
+        SAMPLES     = find( ~(cellfun(@isempty, Y(:,1))));
+    else
+        error('MLR:LABELS', 'Incorrect format for Y.');
+    end
+
+    %%
+    % If we don't have enough data to make the batch, cut the batch
+    batchSize = min([batchSize, length(SAMPLES)]);
+
+
+    Diagnostics = struct(   'loss',                 Loss, ...           % Which loss are we optimizing?
+                            'feature',              Feature, ...        % Which ranking feature is used?
+                            'k',                    k, ...              % What is the ranking length?
+                            'regularizer',          Regularizer, ...    % What regularization is used?
+                            'diagonal',             Diagonal, ...       % 0 for full metric, 1 for diagonal
+                            'num_calls_SO',         0, ...              % Calls to separation oracle
+                            'num_calls_solver',     0, ...              % Calls to solver
+                            'time_SO',              0, ...              % Time in separation oracle
+                            'time_solver',          0, ...              % Time in solver
+                            'time_total',           0, ...              % Total time
+                            'f',                    [], ...             % Objective value
+                            'num_steps',            [], ...             % Number of steps for each solver run
+                            'num_constraints',      [], ...             % Number of constraints for each run
+                            'Xi',                   [], ...             % Slack achieved for each run
+                            'Delta',                [], ...             % Mean loss for each SO call
+                            'gap',                  [], ...             % Gap between loss and slack
+                            'C',                    C, ...              % Slack trade-off
+                            'epsilon',              E, ...              % Convergence threshold
+                            'feasible_count',       FEASIBLE_COUNT, ... % Counter for # svd's
+                            'constraint_timer',     ConstraintClock);   % Time before evicting old constraints
+
+
+
+    global PsiR;
+    global PsiClock;
+
+    PsiR        = {};
+    PsiClock    = [];
+
+    Xi          = -Inf;
+    Margins     = [];
+    H           = [];
+    Q           = [];
+
+    if STOCHASTIC
+        dbprint(1, 'STOCHASTIC OPTIMIZATION: Batch size is %d/%d', batchSize, n);
+    end
+
+    MAXITER = 200;
+%     while 1
+    while Diagnostics.num_calls_solver < MAXITER
+        dbprint(2, 'Round %03d', Diagnostics.num_calls_solver);
+        % Generate a constraint set
+        Termination = 0;
+
+
+        dbprint(2, 'Calling separation oracle...');
+
+        [PsiNew, Mnew, SO_time]     = CP(k, X, W, Ypos, Yneg, batchSize, SAMPLES, ClassScores);
+        Termination                 = LOSS(W, PsiNew, Mnew, 0);
+
+        Diagnostics.num_calls_SO    = Diagnostics.num_calls_SO + 1;
+        Diagnostics.time_SO         = Diagnostics.time_SO + SO_time;
+
+        Margins     = cat(1, Margins,   Mnew);
+        PsiR        = cat(1, PsiR,      PsiNew);
+        PsiClock    = cat(1, PsiClock,  0);
+        H           = expandKernel(H);
+        Q           = expandRegularizer(Q, X, W);
+
+
+        dbprint(2, '\n\tActive constraints    : %d',            length(PsiClock));
+        dbprint(2, '\t           Mean loss  : %0.4f',           Mnew);
+        dbprint(2, '\t  Current loss Xi     : %0.4f',           Xi);
+        dbprint(2, '\t  Termination -Xi < E : %0.4f <? %.04f\n', Termination - Xi, E);
+        
+        Diagnostics.gap     = cat(1, Diagnostics.gap,   Termination - Xi);
+        Diagnostics.Delta   = cat(1, Diagnostics.Delta, Mnew);
+
+        if Termination <= Xi + E
+            dbprint(2, 'Done.');
+            break;
+        end
+        
+        dbprint(2, 'Calling solver...');
+        PsiClock                        = PsiClock + 1;
+        Solver_time                     = tic();
+            [W, Xi, Dsolver]            = mlr_admm(C, X, Margins, H, Q);
+        Diagnostics.time_solver         = Diagnostics.time_solver + toc(Solver_time);
+        Diagnostics.num_calls_solver    = Diagnostics.num_calls_solver + 1;
+
+        Diagnostics.Xi                  = cat(1, Diagnostics.Xi, Xi);
+        Diagnostics.f                   = cat(1, Diagnostics.f, Dsolver.f);
+        Diagnostics.num_steps           = cat(1, Diagnostics.num_steps, Dsolver.num_steps);
+
+        %%%
+        % Cull the old constraints
+        GC          = PsiClock < ConstraintClock;
+        Margins     = Margins(GC);
+        PsiR        = PsiR(GC);
+        PsiClock    = PsiClock(GC);
+        H           = H(GC, GC);
+        Q           = Q(GC);
+
+        Diagnostics.num_constraints = cat(1, Diagnostics.num_constraints, length(PsiR));
+    end
+
+
+    % Finish diagnostics
+
+    Diagnostics.time_total = toc(TIME_START);
+    Diagnostics.feasible_count = FEASIBLE_COUNT;
+end
+
+function H = expandKernel(H)
+
+    global STRUCTKERNEL;
+    global PsiR;
+
+    m = length(H);
+    H = padarray(H, [1 1], 0, 'post');
+
+
+    for i = 1:m+1
+        H(i,m+1)    = STRUCTKERNEL( PsiR{i}, PsiR{m+1} );
+        H(m+1, i)   = H(i, m+1);
+    end
+end
+
+function Q = expandRegularizer(Q, K, W)
+
+    % FIXME:  2012-01-31 21:34:15 by Brian McFee <bmcfee@cs.ucsd.edu>
+    %  does not support unregularized learning
+
+    global PsiR;
+    global STRUCTKERNEL REG;
+
+    m           = length(Q);
+    Q(m+1,1)    = STRUCTKERNEL(REG(W,K,1), PsiR{m+1});
+
+end
+
+function ClassScores = synthesizeRelevance(Y)
+
+    classes     = unique(Y);
+    nClasses    = length(classes);
+
+    ClassScores = struct(   'Y',    Y, ...
+                            'classes', classes, ...
+                            'Ypos', [], ...
+                            'Yneg', []);
+
+    Ypos = cell(nClasses, 1);
+    Yneg = cell(nClasses, 1);
+    for c = 1:nClasses
+        Ypos{c} = (Y == classes(c));
+        Yneg{c} = ~Ypos{c};
+    end
+
+    ClassScores.Ypos = Ypos;
+    ClassScores.Yneg = Yneg;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/mlr_train_primal.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,413 @@
+function [W, Xi, Diagnostics] = mlr_train(X, Y, Cslack, varargin)
+%
+%   [W, Xi, D] = mlr_train(X, Y, C,...)
+%
+%       X = d*n data matrix
+%       Y = either n-by-1 label of vectors
+%           OR
+%           n-by-2 cell array where 
+%               Y{q,1} contains relevant indices for q, and
+%               Y{q,2} contains irrelevant indices for q
+%       
+%       C >= 0 slack trade-off parameter (default=1)
+%
+%       W   = the learned metric
+%       Xi  = slack value on the learned metric
+%       D   = diagnostics
+%
+%   Optional arguments:
+%
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS)
+%       where LOSS is one of:
+%           'AUC':      Area under ROC curve (default)
+%           'KNN':      KNN accuracy
+%           'Prec@k':   Precision-at-k
+%           'MAP':      Mean Average Precision
+%           'MRR':      Mean Reciprocal Rank
+%           'NDCG':     Normalized Discounted Cumulative Gain
+%
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k)
+%       where k is the number of neighbors for Prec@k or NDCG
+%       (default=3)
+%
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG)
+%       where REG defines the regularization on W, and is one of:
+%           0:          no regularization
+%           1:          1-norm: trace(W)            (default)
+%           2:          2-norm: trace(W' * W)
+%           3:          Kernel: trace(W * X), assumes X is square and positive-definite
+%
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG, Diagonal)
+%       Diagonal = 0:   learn a full d-by-d W       (default)
+%       Diagonal = 1:   learn diagonally-constrained W (d-by-1)
+%       
+%   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG, Diagonal, B)
+%       where B > 0 enables stochastic optimization with batch size B
+%
+
+    TIME_START = tic();
+
+    global C;
+    C = Cslack;
+
+    [d,n,m] = size(X);
+
+    if m > 1
+        MKL = 1;
+    else
+        MKL = 0;
+    end
+
+    if nargin < 3
+        C = 1;
+    end
+
+    %%%
+    % Default options:
+
+    global CP SO PSI REG FEASIBLE LOSS DISTANCE SETDISTANCE CPGRADIENT;
+    global FEASIBLE_COUNT;
+    FEASIBLE_COUNT = 0;
+
+    CP          = @cuttingPlaneFull;
+    SO          = @separationOracleAUC;
+    PSI         = @metricPsiPO;
+
+    if ~MKL
+        INIT        = @initializeFull;
+        REG         = @regularizeTraceFull;
+        FEASIBLE    = @feasibleFull;
+        CPGRADIENT  = @cpGradientFull;
+        DISTANCE    = @distanceFull;
+        SETDISTANCE = @setDistanceFull;
+        LOSS        = @lossHinge;
+        Regularizer = 'Trace';
+    else
+        INIT        = @initializeFullMKL;
+        REG         = @regularizeMKLFull;
+        FEASIBLE    = @feasibleFullMKL;
+        CPGRADIENT  = @cpGradientFullMKL;
+        DISTANCE    = @distanceFullMKL;
+        SETDISTANCE = @setDistanceFullMKL;
+        LOSS        = @lossHingeFullMKL;
+        Regularizer = 'Trace';
+    end
+
+    
+    Loss        = 'AUC';
+    Feature     = 'metricPsiPO';
+
+
+    %%%
+    % Default k for prec@k, ndcg
+    k           = 3;
+
+    %%%
+    % Stochastic violator selection?
+    STOCHASTIC  = 0;
+    batchSize   = n;
+    SAMPLES     = 1:n;
+
+
+    if nargin > 3
+        switch lower(varargin{1})
+            case {'auc'}
+                SO          = @separationOracleAUC;
+                PSI         = @metricPsiPO;
+                Loss        = 'AUC';
+                Feature     = 'metricPsiPO';
+            case {'knn'}
+                SO          = @separationOracleKNN;
+                PSI         = @metricPsiPO;
+                Loss        = 'KNN';
+                Feature     = 'metricPsiPO';
+            case {'prec@k'}
+                SO          = @separationOraclePrecAtK;
+                PSI         = @metricPsiPO;
+                Loss        = 'Prec@k';
+                Feature     = 'metricPsiPO';
+            case {'map'}
+                SO  = @separationOracleMAP;
+                PSI = @metricPsiPO;
+                Loss        = 'MAP';
+                Feature     = 'metricPsiPO';
+            case {'mrr'}
+                SO          = @separationOracleMRR;
+                PSI         = @metricPsiPO;
+                Loss        = 'MRR';
+                Feature     = 'metricPsiPO';
+            case {'ndcg'}
+                SO          = @separationOracleNDCG;
+                PSI         = @metricPsiPO;
+                Loss        = 'NDCG';
+                Feature     = 'metricPsiPO';
+            otherwise
+                error('MLR:LOSS', ...
+                    'Unknown loss function: %s', varargin{1});
+        end
+    end
+
+    if nargin > 4
+        k = varargin{2};
+    end
+
+    Diagonal = 0;
+    if nargin > 6 & varargin{4} > 0
+        Diagonal = varargin{4};
+
+        if ~MKL
+            INIT        = @initializeDiag;
+            REG         = @regularizeTraceDiag;
+            FEASIBLE    = @feasibleDiag;
+            CPGRADIENT  = @cpGradientDiag;
+            DISTANCE    = @distanceDiag;
+            SETDISTANCE = @setDistanceDiag;
+            Regularizer = 'Trace';
+        else
+            INIT        = @initializeDiagMKL;
+            REG         = @regularizeMKLDiag;
+            FEASIBLE    = @feasibleDiagMKL;
+            CPGRADIENT  = @cpGradientDiagMKL;
+            DISTANCE    = @distanceDiagMKL;
+            SETDISTANCE = @setDistanceDiagMKL;
+            LOSS        = @lossHingeDiagMKL;
+            Regularizer = 'Trace';
+        end
+    end
+
+    if nargin > 5
+        switch(varargin{3})
+            case {0}
+                REG         = @regularizeNone;
+                Regularizer = 'None';
+
+            case {1}
+                if MKL
+                    if Diagonal == 0
+                        REG         = @regularizeMKLFull;
+                    elseif Diagonal == 1
+                        REG         = @regularizeMKLDiag;
+                    end
+                else
+                    if Diagonal 
+                        REG         = @regularizeTraceDiag;
+                    else
+                        REG         = @regularizeTraceFull;
+                    end
+                end
+                Regularizer = 'Trace';
+
+            case {2}
+                if Diagonal
+                    REG         = @regularizeTwoDiag;
+                else
+                    REG         = @regularizeTwoFull;
+                end
+                Regularizer = '2-norm';
+
+            case {3}
+                if MKL
+                    if Diagonal == 0
+                        REG         = @regularizeMKLFull;
+                    elseif Diagonal == 1
+                        REG         = @regularizeMKLDiag;
+                    end
+                else
+                    if Diagonal
+                        REG         = @regularizeMKLDiag;
+                    else
+                        REG         = @regularizeKernel;
+                    end
+                end
+                Regularizer = 'Kernel';
+
+            otherwise
+                error('MLR:REGULARIZER', ... 
+                    'Unknown regularization: %s', varargin{3});
+        end
+    end
+
+
+    % Are we in stochastic optimization mode?
+    if nargin > 7 && varargin{5} > 0
+        if varargin{5} < n
+            STOCHASTIC  = 1;
+            CP          = @cuttingPlaneRandom;
+            batchSize   = varargin{5};
+        end
+    end
+    % Algorithm
+    %
+    % Working <- []
+    %
+    % repeat:
+    %   (W, Xi) <- solver(X, Y, C, Working)
+    %
+    %   for i = 1:|X|
+    %       y^_i <- argmax_y^ ( Delta(y*_i, y^) + w' Psi(x_i, y^) )
+    %
+    %   Working <- Working + (y^_1,y^_2,...,y^_n)
+    % until mean(Delta(y*_i, y_i)) - mean(w' (Psi(x_i,y_i) - Psi(x_i,y^_i))) 
+    %           <= Xi + epsilon
+
+    global DEBUG;
+    
+    if isempty(DEBUG)
+        DEBUG = 0;
+    end
+
+    %%%
+    % Timer to eliminate old constraints
+    ConstraintClock = 100;
+
+    %%%
+    % Convergence criteria for worst-violated constraint
+    E = 1e-3;
+    
+    % Initialize
+    W           = INIT(X);
+
+    ClassScores = [];
+
+    if isa(Y, 'double')
+        Ypos        = [];
+        Yneg        = [];
+        ClassScores = synthesizeRelevance(Y);
+
+    elseif isa(Y, 'cell') && size(Y,1) == n && size(Y,2) == 2
+        dbprint(1, 'Using supplied Ypos/Yneg');
+        Ypos        = Y(:,1);
+        Yneg        = Y(:,2);
+
+        % Compute the valid samples
+        SAMPLES     = find( ~(cellfun(@isempty, Y(:,1)) | cellfun(@isempty, Y(:,2))));
+    elseif isa(Y, 'cell') && size(Y,1) == n && size(Y,2) == 1
+        dbprint(1, 'Using supplied Ypos/synthesized Yneg');
+        Ypos        = Y(:,1);
+        Yneg        = [];
+        SAMPLES     = find( ~(cellfun(@isempty, Y(:,1))));
+    else
+        error('MLR:LABELS', 'Incorrect format for Y.');
+    end
+
+    %%
+    % If we don't have enough data to make the batch, cut the batch
+    batchSize = min([batchSize, length(SAMPLES)]);
+
+
+    Diagnostics = struct(   'loss',                 Loss, ...           % Which loss are we optimizing?
+                            'feature',              Feature, ...        % Which ranking feature is used?
+                            'k',                    k, ...              % What is the ranking length?
+                            'regularizer',          Regularizer, ...    % What regularization is used?
+                            'diagonal',             Diagonal, ...       % 0 for full metric, 1 for diagonal
+                            'num_calls_SO',         0, ...              % Calls to separation oracle
+                            'num_calls_solver',     0, ...              % Calls to solver
+                            'time_SO',              0, ...              % Time in separation oracle
+                            'time_solver',          0, ...              % Time in solver
+                            'time_total',           0, ...              % Total time
+                            'f',                    [], ...             % Objective value
+                            'num_steps',            [], ...             % Number of steps for each solver run
+                            'num_constraints',      [], ...             % Number of constraints for each run
+                            'Xi',                   [], ...             % Slack achieved for each run
+                            'Delta',                [], ...             % Mean loss for each SO call
+                            'gap',                  [], ...             % Gap between loss and slack
+                            'C',                    C, ...              % Slack trade-off
+                            'epsilon',              E, ...              % Convergence threshold
+                            'feasible_count',       0, ...              % Counter for projections
+                            'constraint_timer',     ConstraintClock);   % Time before evicting old constraints
+
+
+
+    global PsiR;
+    global PsiClock;
+
+    PsiR        = {};
+    PsiClock    = [];
+
+    Xi          = -Inf;
+    Margins     = [];
+
+    if STOCHASTIC
+        dbprint(1, 'STOCHASTIC OPTIMIZATION: Batch size is %d/%d', batchSize, n);
+    end
+
+    while 1
+        dbprint(1, 'Round %03d', Diagnostics.num_calls_solver);
+        % Generate a constraint set
+        Termination = 0;
+
+
+        dbprint(2, 'Calling separation oracle...');
+
+        [PsiNew, Mnew, SO_time]     = CP(k, X, W, Ypos, Yneg, batchSize, SAMPLES, ClassScores);
+        Termination                 = LOSS(W, PsiNew, Mnew, 0);
+
+        Diagnostics.num_calls_SO    = Diagnostics.num_calls_SO + 1;
+        Diagnostics.time_SO         = Diagnostics.time_SO + SO_time;
+
+        Margins     = cat(1, Margins,   Mnew);
+        PsiR        = cat(1, PsiR,      PsiNew);
+        PsiClock    = cat(1, PsiClock,  0);
+
+        dbprint(2, '\n\tActive constraints    : %d',            length(PsiClock));
+        dbprint(2, '\t           Mean loss  : %0.4f',           Mnew);
+        dbprint(2, '\t  Termination -Xi < E : %0.4f <? %.04f\n', Termination - Xi, E);
+        
+        Diagnostics.gap     = cat(1, Diagnostics.gap,   Termination - Xi);
+        Diagnostics.Delta   = cat(1, Diagnostics.Delta, Mnew);
+
+        if Termination <= Xi + E
+            dbprint(1, 'Done.');
+            break;
+        end
+        
+        dbprint(1, 'Calling solver...');
+        PsiClock                        = PsiClock + 1;
+        Solver_time                     = tic();
+            [W, Xi, Dsolver]            = mlr_solver(C, Margins, W, X);
+        Diagnostics.time_solver         = Diagnostics.time_solver + toc(Solver_time);
+        Diagnostics.num_calls_solver    = Diagnostics.num_calls_solver + 1;
+
+        Diagnostics.Xi                  = cat(1, Diagnostics.Xi, Xi);
+        Diagnostics.f                   = cat(1, Diagnostics.f, Dsolver.f);
+        Diagnostics.num_steps           = cat(1, Diagnostics.num_steps, Dsolver.num_steps);
+
+        %%%
+        % Cull the old constraints
+        GC          = PsiClock < ConstraintClock;
+        Margins     = Margins(GC);
+        PsiR        = PsiR(GC);
+        PsiClock    = PsiClock(GC);
+
+        Diagnostics.num_constraints = cat(1, Diagnostics.num_constraints, length(PsiR));
+    end
+
+
+    % Finish diagnostics
+
+    Diagnostics.time_total = toc(TIME_START);
+    Diagnostics.feasible_count = FEASIBLE_COUNT;
+end
+
+
+function ClassScores = synthesizeRelevance(Y)
+
+    classes     = unique(Y);
+    nClasses    = length(classes);
+
+    ClassScores = struct(   'Y',    Y, ...
+                            'classes', classes, ...
+                            'Ypos', [], ...
+                            'Yneg', []);
+
+    Ypos = cell(nClasses, 1);
+    Yneg = cell(nClasses, 1);
+    for c = 1:nClasses
+        Ypos{c} = (Y == classes(c));
+        Yneg{c} = ~Ypos{c};
+    end
+
+    ClassScores.Ypos = Ypos;
+    ClassScores.Yneg = Yneg;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/readme.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,198 @@
+Metric Learning to Rank (mlr-1.0)
+http://www-cse.ucsd.edu/~bmcfee/code/mlr/
+
+Brian McFee <bmcfee@cs.ucsd.edu>, 2010.
+
+This code is distributed under the GNU GPL license.  See LICENSE for details, 
+or http://www.gnu.org/licenses/gpl-3.0.txt .
+
+
+
+INTRODUCTION
+------------
+This package contains the MATLAB code for Metric Learning to Rank (MLR).  
+The latest version of this software can be found at the URL above.
+
+The software included here implements the algorithm described in
+
+[1] Mcfee, Brian and Lanckriet, G.R.G.  Metric learning to rank.  
+    Proceedings of the 27th annual International Conference 
+    on Machine Learning (ICML), 2010.
+
+Please cite this paper if you use this code.
+
+
+
+INSTALLATION
+------------
+
+1. Requirements
+
+This software requires MATLAB R2007a or later.  Because it makes extensive use
+of the "bsxfun" function, earlier versions of Matlab will not work.
+
+If you have an older Matlab installation, you can install an alternative bsxfun
+implementation by going to
+
+http://www.mathworks.com/matlabcentral/fileexchange/23005 ,
+
+however, this may not work, and it will certainly be slower than the native
+bsxfun implementation.
+
+
+2. Compiling MEX functions
+
+MLR includes two auxiliary functions "cummax" and "binarysearch" to accelerate
+certain steps of the optimization procedure.  The source code for these
+functions is located in the "util" subdirectory.
+
+A makefile is provided, so that (on Unix systems), you can simply type
+
+cd util
+make
+cd ..
+
+
+3. Running the demo
+
+To test the installation, run 
+
+    mlr_demo
+
+from within Matlab.  The demo generates a random training/test split of the Wine data set
+http://archive.ics.uci.edu/ml/datasets/Wine
+and learns a metric with MLR.  Both native and learned metrics are displayed in a figure
+with a scatter plot.
+
+
+TRAINING
+--------
+
+There are several modes of operation for training metrics with MLR.  In the
+simplest mode, training data is contained in a matrix X (each column is a
+training vector), and Y contains the labels/relevance for the training data
+(see below).
+
+   [W, Xi, D] = mlr_train(X, Y, C,...)
+
+       X = d*n data matrix
+       Y = either n-by-1 label of vectors
+           OR
+           n-by-2 cell array where 
+               Y{q,1} contains relevant indices for q, and
+               Y{q,2} contains irrelevant indices for q
+       
+       C >= 0 slack trade-off parameter (default=1)
+
+       W   = the learned metric, i.e., the inner product matrix of the learned 
+                space can be computed by X' * W * X
+       Xi  = slack value on the learned metric (see [1])
+       D   = diagnostics
+
+
+By default, MLR optimizes for Area Under the ROC Curve (AUC).  This can be
+changed by setting the "LOSS" parameter to one of several ranking loss
+measures:
+
+   [W, Xi, D] = mlr_train(X, Y, C, LOSS)
+       where LOSS is one of:
+           'AUC':      Area under ROC curve (default)
+           'KNN':      KNN accuracy*
+           'Prec@k':   Precision-at-k
+           'MAP':      Mean Average Precision
+           'MRR':      Mean Reciprocal Rank
+           'NDCG':     Normalized Discounted Cumulative Gain
+
+    *Note:  KNN is correct only for binary classification problems; in 
+            practice, Prec@k is usually a better alternative.
+
+
+For KNN/Prec@k/NDCG, a threshold k may be set to determine the truncation of
+the ranked list.  Thiscan be done by setting the k parameter:
+
+   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k)
+       where k is the number of neighbors for Prec@k or NDCG
+       (default=3)
+
+
+By default, MLR regularizes the metric W by the trace, i.e., the 1-norm of the
+eigenvalues.  This can be changed to one of several alternatives:
+
+   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG)
+       where REG defines the regularization on W, and is one of:
+           0:          no regularization
+           1:          1-norm: trace(W)            (default)
+           2:          2-norm: trace(W' * W)
+           3:          Kernel: trace(W * X), assumes X is square 
+                                and positive-definite
+
+    The last setting, "kernel", is appropriate for regularizing metrics learned
+    from kernel matrices.
+
+
+W corresponds to a linear projection matrix (rotation and scaling).  To learn a
+restricted model which may only scale, but not rotate the data, W can be
+constrained to diagonal matrices by setting the "Diagonal" parameter to 1:
+
+   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG, Diagonal)
+       Diagonal = 0:   learn a full d-by-d W       (default)
+       Diagonal = 1:   learn diagonally-constrained W (d-by-1)
+       
+    Note: the W returned in this case will be the d-by-1 vector corresponding
+          to the main diagonal of a full metric, not the full d-by-d matrix.
+
+
+
+Finally, we provide a stochastic gradient descent implementation to handle
+large-scale problems.  Rather than estimating gradients from the entire
+training set, this variant uses a random subset of size B (see below) at each
+call to the cutting plane subroutine.  This results in faster, but less
+accurate, optimization:
+
+   [W, Xi, D] = mlr_train(X, Y, C, LOSS, k, REG, Diagonal, B)
+       where B > 0 enables stochastic optimization with batch size B
+
+
+
+TESTING
+-------
+
+Once a metric has been trained by "mlr_train", you can evaluate performance
+across all measures by using the "mlr_test" function:
+
+   Perf = mlr_test(W, test_k, Xtrain, Ytrain, Xtest, Ytest)
+
+       W       = d-by-d positive semi-definite matrix
+       test_k  = vector of k-values to use for KNN/Prec@k/NDCG
+       Xtrain  = d-by-n matrix of training data
+       Ytrain  = n-by-1 vector of training labels
+                   OR
+                 n-by-2 cell array where
+                   Y{q,1} contains relevant indices (in 1..n) for point q
+                   Y{q,2} contains irrelevant indices (in 1..n) for point q
+       Xtest   = d-by-m matrix of testing data
+       Ytest   = m-by-1 vector of training labels, or m-by-2 cell array 
+                   If using the cell version, indices correspond to
+                   the training set, and must lie in the range (1..n)
+               
+
+   The output structure Perf contains the mean score for:
+       AUC, KNN, Prec@k, MAP, MRR, NDCG,
+   as well as the effective dimensionality of W, and
+   the best-performing k-value for KNN, Prec@k, and NDCG.
+
+   For information retrieval settings, consider Xtrain/Ytrain as the corpus
+   and Xtest/Ytest as the queries.
+
+By testing with 
+    Wnative = eye(size(X,1))
+you can quickly evaluate the performance of the native (Euclidean) metric.
+
+
+FEEDBACK
+--------
+
+Please send any bug reports, source code contributions, etc. to 
+
+Brian McFee <bmcfee@cs.ucsd.edu>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/regularize/regularizeKernel.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function r = regularizeKernel(W, X, gradient)
+%
+% r = regularizeKernel(W, X, gradient)
+%
+%
+    if gradient
+        r = X;
+    else
+        r = sum(sum(W .* X));
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/regularize/regularizeMKLDOD.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+function r = regularizeMKLDOD(W, X, gradient)
+%
+% r = regularizeMKLDOD(W, X, gradient)
+%
+%
+
+    [d,n,m] = size(X);
+
+    if gradient
+        r = zeros(m,m,d);
+        for i = 1:m
+            r(i,i,:) = diag(X(:,:,i));
+            for j = (i+1):m
+                r(i,j,:) = diag(X(:,:,i)) + diag(X(:,:,j));
+            end
+        end
+    else
+        r = 0;
+        for i = 1:m
+            r = r + squeeze(W(i,i,:))' * diag(X(:,:,i));
+            for j = (i+1):m
+                r = r + squeeze(W(i,j,:))' * (diag(X(:,:,i)) + diag(X(:,:,j)));
+            end
+        end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/regularize/regularizeMKLDiag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+function r = regularizeMKLDiag(W, X, gradient)
+%
+% r = regularizeMKL(W, X, gradient)
+%
+%
+
+    [d,n,m] = size(X);
+
+    if gradient
+        r = zeros(d,m);
+        for i = 1:m
+            r(:,i) = diag(X(:,:,i));
+        end
+    else
+        r = 0;
+        for i = 1:m
+            r = r + W(:,i)' * diag(X(:,:,i));
+        end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/regularize/regularizeMKLFull.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+function r = regularizeMKLFull(W, X, gradient)
+%
+% r = regularizMKL(W, X, gradient)
+%
+%
+
+    [d,n,m] = size(X);
+
+    if gradient
+        r = X;
+    else
+        r = 0;
+        for i = 1:m
+            r = r + sum(sum(W(:,:,i) .* X(:,:,i)));
+        end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/regularize/regularizeNone.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function r = regularizeNone(W, X, gradient)
+%
+%   r = regularizeNone(W, X, gradient)
+%   
+%   Always returns 0
+
+    if gradient    
+    	    r = zeros(size(W));
+    else
+	    r = 0;
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/regularize/regularizeTraceDiag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function r = regularizeTraceDiag(W, X, gradient)
+%
+% r = regularizeTraceDiag(W, X, gradient)
+%
+%
+    d = length(W);
+
+    if gradient
+        r = ones(d,1) / d;
+    else
+        r = sum(W) / d;
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/regularize/regularizeTraceFull.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function r = regularizeTraceFull(W, X, gradient)
+%
+% r = regularizeTraceFull(W, X, gradient)
+%
+%
+    d = length(W);
+
+    if gradient
+        r = eye(d) / d;
+    else
+        r = trace(W) / d;
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/regularize/regularizeTwoDiag.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function r = regularizeTwoDiag(W, X, gradient)
+%
+% r = regularizeTwoDiag(W, X, gradient)
+%
+%
+    d = length(W);
+
+    if gradient
+        r = W / d;
+    else
+        r = sum(sum(W.^2)) / (2 * d);
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/regularize/regularizeTwoFull.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+function r = regularizeTwoFull(W, X, gradient)
+%
+% r = regularizeTwoFull(W, X, gradient)
+%
+%
+    d = length(W);
+
+    if gradient
+        r = W / d;
+    else
+        r = sum(sum(W.^2)) / (2 * d);
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/rmlr_demo.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,87 @@
+function rmlr_demo()
+
+    display('Loading Wine data');
+    load Wine;
+
+    noisedim = 96;
+    [d,n] = size(X); 
+    d = d + noisedim;
+
+    %create covariance matrix
+    var = randn(noisedim); var = var'*var;
+    noise = sqrtm(var)* randn(noisedim, n);
+    X = [X; noise];
+    
+    % z-score the input dimensions
+    display('z-scoring features');
+    X = zscore(X')';
+
+    display('Generating a 80/20 training/test split');
+    P       = randperm(n);
+    Xtrain  = X(:,P(1:floor(0.8 * n)));
+    Ytrain  = Y(P(1:floor(0.8*n)));
+    Xtest   = X(:,P((1+floor(0.8*n)):end));
+    Ytest   = Y(P((1+floor(0.8*n)):end));
+    
+    C = 1e2;
+    lam = 0.5;
+   
+    display(sprintf('Training with C=%.2e, Delta=MAP', C));
+    %learn metric with R-MLR
+    [W_rmlr, Xi, Diagnostics_rmlr] = rmlr_train(Xtrain, Ytrain, C, 'map',3,1,0,0,lam);
+    
+    %learn metric with MLR
+    [W_mlr, Xi, Diagnostics_mlr] = mlr_train(Xtrain, Ytrain, C, 'map');
+    
+    display('Test performance in the native (normalized) metric');
+    mlr_test(eye(d), 3, Xtrain, Ytrain, Xtest, Ytest)
+
+    display('Test performance with R-MLR metric');
+    mlr_test(W_rmlr, 3, Xtrain, Ytrain, Xtest, Ytest)
+
+    display('Test performance with MLR metric');
+    mlr_test(W_mlr, 3, Xtrain, Ytrain, Xtest, Ytest)
+
+    % Scatter-plot
+    figure;
+    subplot(1,3,1), drawData(eye(d), Xtrain, Ytrain, Xtest, Ytest), title('Native metric (z-scored)');
+    subplot(1,3,2), drawData(W_mlr, Xtrain, Ytrain, Xtest, Ytest), title('Learned metric (MLR)');
+    subplot(1,3,3), drawData(W_rmlr, Xtrain, Ytrain, Xtest, Ytest), title('Learned metric (RMLR)');
+
+    figure;
+    subplot(121), imagesc(W_mlr), title('W: MLR');
+    subplot(122), imagesc(W_rmlr), title('W: RMLR');
+    Diagnostics_rmlr
+    Diagnostics_mlr
+
+end
+
+
+function drawData(W, Xtrain, Ytrain, Xtest, Ytest);
+
+    n = length(Ytrain);
+    m = length(Ytest);
+
+    if size(W,2) == 1
+        W = diag(W);
+    end
+    % PCA the learned metric
+    Z = [Xtrain Xtest];
+    A = Z' * W * Z;
+    [v,d] = eig(A);
+
+    L = (d.^0.5) * v';
+    L = L(1:2,:);
+
+    % Draw training points
+    hold on;
+    trmarkers = {'b+', 'r+', 'g+'};
+    tsmarkers = {'bo', 'ro', 'go'};
+    for i = min(Ytrain):max(Ytrain)
+        points = find(Ytrain == i);
+        scatter(L(1,points), L(2,points), trmarkers{i});
+        points = n + find(Ytest == i);
+        scatter(L(1,points), L(2,points), tsmarkers{i});
+    end
+    legend({'Training', 'Test'});
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/rmlr_train.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,482 @@
+function [W, Xi, Diagnostics] = rmlr_train(X, Y, Cslack, varargin)
+%[W, Xi, D] = rmlr_train(X, Y, C, LOSS, k, REG, Diagonal, stochastic, lam, STRUCTREG)
+%
+%   [W, Xi, D] = rmlr_train(X, Y, C,...)
+%
+%       X = d*n data matrix
+%       Y = either n-by-1 label of vectors
+%           OR
+%           n-by-2 cell array where 
+%               Y{q,1} contains relevant indices for q, and
+%               Y{q,2} contains irrelevant indices for q
+%       
+%       C >= 0 slack trade-off parameter (default=1)
+%
+%       W   = the learned metric
+%       Xi  = slack value on the learned metric
+%       D   = diagnostics
+%
+%   Optional arguments:
+%
+%   [W, Xi, D] = rmlr_train(X, Y, C, LOSS)
+%       where LOSS is one of:
+%           'AUC':      Area under ROC curve (default)
+%           'KNN':      KNN accuracy
+%           'Prec@k':   Precision-at-k
+%           'MAP':      Mean Average Precision
+%           'MRR':      Mean Reciprocal Rank
+%           'NDCG':     Normalized Discounted Cumulative Gain
+%
+%   [W, Xi, D] = rmlr_train(X, Y, C, LOSS, k)
+%       where k is the number of neighbors for Prec@k or NDCG
+%       (default=3)
+%
+%   [W, Xi, D] = rmlr_train(X, Y, C, LOSS, k, REG)
+%       where REG defines the regularization on W, and is one of:
+%           0:          no regularization
+%           1:          1-norm: trace(W)            (default)
+%           2:          2-norm: trace(W' * W)
+%           3:          Kernel: trace(W * X), assumes X is square and positive-definite
+%
+%   [W, Xi, D] = rmlr_train(X, Y, C, LOSS, k, REG, Diagonal)
+%   Not implemented as learning a diagonal W metric just reduces to MLR because ||W||_2,1 = trace(W) when W is diagonal. 
+%       
+%   [W, Xi, D] = rmlr_train(X, Y, C, LOSS, k, REG, Diagonal, B)
+%       where B > 0 enables stochastic optimization with batch size B
+%
+%   [W, Xi, D] = rmlr_train(X, Y, C, LOSS, k, REG, Diagonal, B, lambda)
+%	lambda is the desired value of the hyperparameter which is the coefficient of ||W||_2,1. Default is 1 if lambda is not set
+%   [W, Xi, D] = rmlr_train(X, Y, C, LOSS, k, REG, Diagonal, B, lambda, CC)
+%       Set ConstraintClock to CC (default: 20, 100)
+% 
+%   [W, Xi, D] = rmlr_train(X, Y, C, LOSS, k, REG, Diagonal, B, lambda, CC, E)
+%       Set ConstraintClock to E (default: 1e-3)
+%
+
+
+    TIME_START = tic();
+
+    global C;
+    C = Cslack;
+    
+    [d,n,m] = size(X);
+
+    if m > 1
+        MKL = 1;
+    else
+        MKL = 0;
+    end
+
+    if nargin < 3
+        C = 1;
+    end
+
+    %%%
+    % Default options:
+
+    global CP SO PSI REG FEASIBLE LOSS DISTANCE SETDISTANCE CPGRADIENT STRUCTKERNEL DUALW THRESH INIT;
+    global RHO;
+ 
+
+    %%%
+    % Augmented lagrangian factor
+    RHO = 1;
+
+    % </modified>
+
+    global FEASIBLE_COUNT;
+    FEASIBLE_COUNT = 0;
+
+    CP          = @cuttingPlaneFull;
+    SO          = @separationOracleAUC;
+    PSI         = @metricPsiPO;
+
+    if ~MKL
+        INIT        = @initializeFull;
+        REG         = @regularizeTraceFull;
+        STRUCTKERNEL= @structKernelLinear;
+        DUALW       = @dualWLinear;
+        FEASIBLE    = @feasibleFull;
+        THRESH	    = @threshFull_admmMixed;
+        CPGRADIENT  = @cpGradientFull;
+        DISTANCE    = @distanceFull;
+        SETDISTANCE = @setDistanceFull;
+        LOSS        = @lossHinge;
+        Regularizer = 'Trace';
+    else
+        INIT        = @initializeFullMKL;
+        REG         = @regularizeMKLFull;
+        STRUCTKERNEL= @structKernelMKL;
+        DUALW       = @dualWMKL;
+        FEASIBLE    = @feasibleFullMKL;
+	THRESH	    = @threshFull_admmMixed;
+	CPGRADIENT  = @cpGradientFullMKL;
+        DISTANCE    = @distanceFullMKL;
+        SETDISTANCE = @setDistanceFullMKL;
+        LOSS        = @lossHingeFullMKL;
+        Regularizer = 'Trace';
+    end
+
+    
+    Loss        = 'AUC';
+    Feature     = 'metricPsiPO';
+
+
+    %%%
+    % Default k for prec@k, ndcg
+    k           = 3;
+
+    %%%
+    % Stochastic violator selection?
+    STOCHASTIC  = 0;
+    batchSize   = n;
+    SAMPLES     = 1:n;
+
+
+    if nargin > 3
+        switch lower(varargin{1})
+            case {'auc'}
+                SO          = @separationOracleAUC;
+                PSI         = @metricPsiPO;
+                Loss        = 'AUC';
+                Feature     = 'metricPsiPO';
+            case {'knn'}
+                SO          = @separationOracleKNN;
+                PSI         = @metricPsiPO;
+                Loss        = 'KNN';
+                Feature     = 'metricPsiPO';
+            case {'prec@k'}
+                SO          = @separationOraclePrecAtK;
+                PSI         = @metricPsiPO;
+                Loss        = 'Prec@k';
+                Feature     = 'metricPsiPO';
+            case {'map'}
+                SO  = @separationOracleMAP;
+                PSI = @metricPsiPO;
+                Loss        = 'MAP';
+                Feature     = 'metricPsiPO';
+            case {'mrr'}
+                SO          = @separationOracleMRR;
+                PSI         = @metricPsiPO;
+                Loss        = 'MRR';
+                Feature     = 'metricPsiPO';
+            case {'ndcg'}
+                SO          = @separationOracleNDCG;
+                PSI         = @metricPsiPO;
+                Loss        = 'NDCG';
+                Feature     = 'metricPsiPO';
+            otherwise
+                error('MLR:LOSS', ...
+                    'Unknown loss function: %s', varargin{1});
+        end
+    end
+
+    if nargin > 4
+        k = varargin{2};
+    end
+
+    Diagonal = 0;
+    %Diagonal case is not implemented. Use mlr_train for that.
+    
+    if nargin > 5
+        switch(varargin{3})
+            case {0}
+                REG         = @regularizeNone;
+                Regularizer = 'None';
+                THRESH      = @threshFull_admmMixed;
+            case {1}
+                if MKL
+                        REG         = @regularizeMKLFull;
+                        STRUCTKERNEL= @structKernelMKL;
+                        DUALW       = @dualWMKL;
+                else
+                        REG         = @regularizeTraceFull;
+                        STRUCTKERNEL= @structKernelLinear;
+                        DUALW       = @dualWLinear;
+                end
+                Regularizer = 'Trace';
+
+            case {2}
+                REG         = @regularizeTwoFull;
+                Regularizer = '2-norm';
+                error('MLR:REGULARIZER', '2-norm regularization no longer supported');
+                
+
+            case {3}
+                if MKL
+                        REG         = @regularizeMKLFull;
+                        STRUCTKERNEL= @structKernelMKL;
+                        DUALW       = @dualWMKL;
+                else
+                        REG         = @regularizeKernel;
+                        STRUCTKERNEL= @structKernelMKL;
+                        DUALW       = @dualWMKL;
+                end
+                Regularizer = 'Kernel';
+
+		
+            otherwise
+                error('MLR:REGULARIZER', ... 
+                    'Unknown regularization: %s', varargin{3});
+        end
+    end
+
+
+    % Are we in stochastic optimization mode?
+    if nargin > 7 && varargin{5} > 0
+        if varargin{5} < n
+            STOCHASTIC  = 1;
+            CP          = @cuttingPlaneRandom;
+            batchSize   = varargin{5};
+        end
+    end
+    % Algorithm
+    %
+    % Working <- []
+    %
+    % repeat:
+    %   (W, Xi) <- solver(X, Y, C, Working)
+    %
+    %   for i = 1:|X|
+    %       y^_i <- argmax_y^ ( Delta(y*_i, y^) + w' Psi(x_i, y^) )
+    %
+    %   Working <- Working + (y^_1,y^_2,...,y^_n)
+    % until mean(Delta(y*_i, y_i)) - mean(w' (Psi(x_i,y_i) - Psi(x_i,y^_i))) 
+    %           <= Xi + epsilon
+
+    if nargin > 8 
+	    lam = varargin{6};
+    else
+	    lam = 1;
+    end
+
+    disp(['lam = ' num2str(lam)])
+
+    global DEBUG;
+    
+    if isempty(DEBUG)
+        DEBUG = 0;
+    end
+
+    DEBUG = 1;
+
+    %%%
+    % Max calls to seperation oracle
+    MAX_CALLS = 200;
+    MIN_CALLS = 10;
+ 
+    %%%
+    % Timer to eliminate old constraints
+    ConstraintClock = 500; % standard: 500
+    
+    if nargin > 9 && varargin{7} > 0
+        ConstraintClock = varargin{7};
+    end
+    
+    %%%
+    % Convergence criteria for worst-violated constraint
+    E = 1e-3;
+    if nargin > 10 && varargin{8} > 0
+        E = varargin{8};
+    end
+    
+    %XXX:    2012-01-31 21:29:50 by Brian McFee <bmcfee@cs.ucsd.edu>
+    % no longer belongs here
+    % Initialize
+    W           = INIT(X);
+
+
+    global ADMM_Z ADMM_V ADMM_UW ADMM_UV;
+    ADMM_Z      = W;
+    ADMM_V      = W;
+    ADMM_UW     = 0 * ADMM_Z;
+    ADMM_UV     = 0 * ADMM_Z;
+ 
+    ClassScores = [];
+
+    if isa(Y, 'double')
+        Ypos        = [];
+        Yneg        = [];
+        ClassScores = synthesizeRelevance(Y);
+
+    elseif isa(Y, 'cell') && size(Y,1) == n && size(Y,2) == 2
+        dbprint(2, 'Using supplied Ypos/Yneg');
+        Ypos        = Y(:,1);
+        Yneg        = Y(:,2);
+
+        % Compute the valid samples
+        SAMPLES     = find( ~(cellfun(@isempty, Y(:,1)) | cellfun(@isempty, Y(:,2))));
+    elseif isa(Y, 'cell') && size(Y,1) == n && size(Y,2) == 1
+        dbprint(2, 'Using supplied Ypos/synthesized Yneg');
+        Ypos        = Y(:,1);
+        Yneg        = [];
+        SAMPLES     = find( ~(cellfun(@isempty, Y(:,1))));
+    else
+        error('MLR:LABELS', 'Incorrect format for Y.');
+    end
+    %%
+    % If we don't have enough data to make the batch, cut the batch
+    batchSize = min([batchSize, length(SAMPLES)]);
+
+    Diagnostics = struct(   'loss',                 Loss, ...           % Which loss are we optimizing?
+                            'feature',              Feature, ...        % Which ranking feature is used?
+                            'k',                    k, ...              % What is the ranking length?
+                            'regularizer',          Regularizer, ...    % What regularization is used?
+                            'diagonal',             Diagonal, ...       % 0 for full metric, 1 for diagonal
+                            'num_calls_SO',         0, ...              % Calls to separation oracle
+                            'num_calls_solver',     0, ...              % Calls to solver
+                            'time_SO',              0, ...              % Time in separation oracle
+                            'time_solver',          0, ...              % Time in solver
+                            'time_total',           0, ...              % Total time
+                            'f',                    [], ...             % Objective value
+                            'num_steps',            [], ...             % Number of steps for each solver run
+                            'num_constraints',      [], ...             % Number of constraints for each run
+                            'Xi',                   [], ...             % Slack achieved for each run
+                            'Delta',                [], ...             % Mean loss for each SO call
+                            'gap',                  [], ...             % Gap between loss and slack
+                            'C',                    C, ...              % Slack trade-off
+                            'epsilon',              E, ...              % Convergence threshold
+                            'feasible_count',       FEASIBLE_COUNT, ... % Counter for # svd's
+                            'constraint_timer',     ConstraintClock);   % Time before evicting old constraints
+
+
+
+    global PsiR;
+    global PsiClock;
+
+    PsiR        = {};
+    PsiClock    = [];
+
+    Xi          = -Inf;
+    Margins     = [];
+    H           = [];
+    Q           = [];
+
+    if STOCHASTIC
+        dbprint(2, 'STOCHASTIC OPTIMIZATION: Batch size is %d/%d', batchSize, n);
+    end
+
+    dbprint(2,['Regularizer is "' Regularizer '"']);
+    while 1
+	if Diagnostics.num_calls_solver > MAX_CALLS
+	    dbprint(2,['Calls to SO >= ' num2str(MAX_CALLS)]);
+	    break;
+        end
+
+	dbprint(2, 'Round %03d', Diagnostics.num_calls_solver);
+        % Generate a constraint set
+        Termination = -Inf;
+
+
+        dbprint(2, 'Calling separation oracle...');
+        [PsiNew, Mnew, SO_time]     = CP(k, X, W, Ypos, Yneg, batchSize, SAMPLES, ClassScores);
+	        
+      	Termination                 = LOSS(W, PsiNew, Mnew, 0);
+	Diagnostics.num_calls_SO    = Diagnostics.num_calls_SO + 1;
+        Diagnostics.time_SO         = Diagnostics.time_SO + SO_time;
+
+        Margins     = cat(1, Margins,   Mnew);
+        PsiR        = cat(1, PsiR,      PsiNew);
+        PsiClock    = cat(1, PsiClock,  0);
+        H           = expandKernel(H);
+        Q           = expandRegularizer(Q, X, W);
+      
+ 
+        dbprint(2, '\n\tActive constraints    : %d',            length(PsiClock));
+        dbprint(2, '\t           Mean loss  : %0.4f',           Mnew);
+        dbprint(2, '\t  Current loss Xi     : %0.4f',           Xi);
+        dbprint(2, '\t  Termination -Xi < E : %0.4f <? %.04f\n', Termination - Xi, E);
+        
+        Diagnostics.gap     = cat(1, Diagnostics.gap,   Termination - Xi);
+        Diagnostics.Delta   = cat(1, Diagnostics.Delta, Mnew);
+
+        %if Termination <= Xi + E
+        if Termination <= Xi + E && Diagnostics.num_calls_solver > MIN_CALLS	
+        %if Termination - Xi <= E            
+	    dbprint(1, 'Done.');
+            break;
+        end
+
+
+
+        dbprint(1, 'Calling solver...');
+        PsiClock                        = PsiClock + 1;
+        Solver_time                     = tic();
+%         disp('Robust MLR')
+		[W, Xi, Dsolver]                = rmlr_admm(C, X, Margins, H, Q, lam);
+
+    	Diagnostics.time_solver         = Diagnostics.time_solver + toc(Solver_time);
+        Diagnostics.num_calls_solver    = Diagnostics.num_calls_solver + 1;
+
+        Diagnostics.Xi                  = cat(1, Diagnostics.Xi, Xi);
+        Diagnostics.f                   = cat(1, Diagnostics.f, Dsolver.f);
+        Diagnostics.num_steps           = cat(1, Diagnostics.num_steps, Dsolver.num_steps);
+
+        %%%
+        % Cull the old constraints
+        GC          = PsiClock < ConstraintClock;
+        Margins     = Margins(GC);
+        PsiR        = PsiR(GC);
+        PsiClock    = PsiClock(GC);
+        H           = H(GC, GC);
+        Q           = Q(GC);
+
+        Diagnostics.num_constraints = cat(1, Diagnostics.num_constraints, length(PsiR));
+    end
+
+
+    % Finish diagnostics
+
+    Diagnostics.time_total = toc(TIME_START);
+    Diagnostics.feasible_count = FEASIBLE_COUNT;
+end
+
+function H = expandKernel(H)
+
+    global STRUCTKERNEL;
+    global PsiR;
+
+    m = length(H);
+    H = padarray(H, [1 1], 0, 'post');
+
+
+    for i = 1:m+1
+        H(i,m+1)    = STRUCTKERNEL( PsiR{i}, PsiR{m+1} );
+        H(m+1, i)   = H(i, m+1);
+    end
+end
+
+function Q = expandRegularizer(Q, K, W)
+
+    % FIXME:  2012-01-31 21:34:15 by Brian McFee <bmcfee@cs.ucsd.edu>
+    %  does not support unregularized learning
+
+    global PsiR;
+    global STRUCTKERNEL REG;
+
+    m           = length(Q);
+    Q(m+1,1)    = STRUCTKERNEL(REG(W,K,1), PsiR{m+1});
+
+end
+
+function ClassScores = synthesizeRelevance(Y)
+
+    classes     = unique(Y);
+    nClasses    = length(classes);
+
+    ClassScores = struct(   'Y',    Y, ...
+                            'classes', classes, ...
+                            'Ypos', [], ...
+                            'Yneg', []);
+
+    Ypos = cell(nClasses, 1);
+    Yneg = cell(nClasses, 1);
+    for c = 1:nClasses
+        Ypos{c} = (Y == classes(c));
+        Yneg{c} = ~Ypos{c};
+    end
+
+    ClassScores.Ypos = Ypos;
+    ClassScores.Yneg = Yneg;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/separationOracle/separationOracleAUC.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+function [Y, Loss] = separationOracleAUC(q, D, pos, neg, k)
+%
+%   [Y,Loss]  = separationOracleAUC(q, D, pos, neg, k)
+%
+%   q   = index of the query point
+%   D   = the current distance matrix
+%   pos = indices of relevant results for q
+%   neg = indices of irrelevant results for q
+%   k   = length of the list to consider (unused in AUC)
+%
+%   Y is a permutation 1:n corresponding to the maximally
+%   violated constraint
+%
+%   Loss is the loss for Y, in this case, 1-AUC(Y)
+
+
+    % First, sort the documents in descending order of W'Phi(q,x)
+    % Phi = - (X(q) - X(x)) * (X(q) - X(x))'
+    
+    % Sort the positive documents
+    ScorePos        = - D(pos,q);
+    [Vpos, Ipos]    = sort(full(ScorePos'), 'descend');
+    Ipos            = pos(Ipos);
+    
+    % Sort the negative documents
+    ScoreNeg        = - D(neg,q);
+    [Vneg, Ineg]    = sort(full(ScoreNeg'), 'descend');
+    Ineg            = neg(Ineg);
+
+
+    % How many pos and neg documents are we using here?
+    numPos  = length(pos);
+    numNeg  = length(neg);
+    n       = numPos + numNeg;
+
+
+    NegsBefore = sum(bsxfun(@lt, Vpos, Vneg' + 0.5),1);
+
+    % Construct Y from NegsBefore
+    Y                           = nan * ones(n,1);
+    Y((1:numPos) + NegsBefore)  = Ipos;
+    Y(isnan(Y))                 = Ineg;
+
+    % Compute AUC loss for this ranking
+    Loss = 1 - sum(NegsBefore) / (numPos * numNeg * 2);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/separationOracle/separationOracleKNN.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,98 @@
+function [Y, Loss] = separationOracleKNN(q, D, pos, neg, k)
+%
+%   [Y,Loss]  = separationOracleKNN(q, D, pos, neg, k)
+%
+%   q   = index of the query point
+%   D   = the current distance matrix
+%   pos = indices of relevant results for q
+%   neg = indices of irrelevant results for q
+%   k   = length of the list to consider
+%
+%   Y is a permutation 1:n corresponding to the maximally
+%   violated constraint
+%
+%   Loss is the loss for Y, in this case, 1-Prec@k(Y)
+
+
+    % First, sort the documents in descending order of W'Phi(q,x)
+    % Phi = - (X(q) - X(x)) * (X(q) - X(x))'
+    
+    % Sort the positive documents
+    ScorePos        = - D(pos,q);
+    [Vpos, Ipos]    = sort(full(ScorePos'), 'descend');
+    Ipos            = pos(Ipos);
+    
+    % Sort the negative documents
+    ScoreNeg        = - D(neg,q);
+    [Vneg, Ineg]    = sort(full(ScoreNeg'), 'descend');
+    Ineg            = neg(Ineg);
+
+    % Now, solve the DP for the interleaving
+
+    numPos  = length(pos);
+    numNeg  = length(neg);
+    n       = numPos + numNeg;
+
+    cVpos           = cumsum(Vpos);
+    cVneg           = cumsum(Vneg);
+
+
+    % If we don't have enough positive (or negative) examples, scale k down
+    k = min([k, numPos, numNeg]);
+
+    % Algorithm:
+    %   For each precision score in 0, 1/k, 2/k, ... 1
+    %       Calculate maximum discriminant score for that precision level
+    KNN             = (0:(1/k):1)' > 0.5;
+    Discriminant    = zeros(k+1, 1);
+    NegsBefore      = zeros(numPos,k+1);
+
+    % For 0 precision, all positives go after the first k negatives
+
+    NegsBefore(:,1) = k + binarysearch(Vpos, Vneg(k+1:end));
+    Discriminant(1) = Vpos * (numNeg - 2 * NegsBefore(:,1)) + numPos * cVneg(end) ...
+                    - 2 * sum(cVneg(NegsBefore((NegsBefore(:,1) > 0),1)));
+
+
+
+    % For precision (a-1)/k, swap the (a-1)'th positive doc
+    %   into the top (k-a) negative docs
+
+    for a = 2:(k+1)
+        NegsBefore(:,a) = NegsBefore(:,a-1);
+
+        % We have a-1 positives, and k - (a-1) negatives
+        NegsBefore(a-1, a) = binarysearch(Vpos(a-1), Vneg(1:(k-a+1)));
+
+        % There were NegsBefore(a-1,a-1) negatives before (a-1)
+        % Now there are NegsBefore(a,a-1)
+
+        Discriminant(a) = Discriminant(a-1) ...
+                        + 2 * (NegsBefore(a-1,a-1) - NegsBefore(a-1,a)) * Vpos(a-1);
+
+        if NegsBefore(a-1,a-1) > 0
+            Discriminant(a) = Discriminant(a) + 2 * cVneg(NegsBefore(a-1,a-1));
+        end
+        if NegsBefore(a-1,a) > 0
+            Discriminant(a) = Discriminant(a) - 2 * cVneg(NegsBefore(a-1,a));
+        end
+    end
+
+    % Normalize discriminant scores
+    Discriminant    = Discriminant / (numPos * numNeg);
+    [s, x]          = max(Discriminant - KNN);
+
+    % Now we know that there are x-1 relevant docs in the max ranking
+    % Construct Y from NegsBefore(x,:)
+
+    Y = nan * ones(n,1);
+    Y((1:numPos)' + NegsBefore(:,x)) = Ipos;
+    if sum(isnan(Y)) ~= length(Ineg)
+        keyboard;
+    end
+    Y(isnan(Y))                     = Ineg;
+
+    % Compute loss for this list
+    Loss        = 1 - KNN(x);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/separationOracle/separationOracleMAP.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,134 @@
+function [Y, Loss] = separationOracleMAP(q, D, pos, neg, k)
+%
+%   [Y,Loss]  = separationOracleMAP(q, D, pos, neg, k)
+%
+%   q   = index of the query point
+%   D   = the current distance matrix
+%   pos = indices of relevant results for q
+%   neg = indices of irrelevant results for q
+%   k   = length of the list to consider (unused in MAP)
+%
+%   Y is a permutation 1:n corresponding to the maximally
+%   violated constraint
+%
+%   Loss is the loss for Y, in this case, 1-AP(Y)
+
+
+    % First, sort the documents in descending order of W'Phi(q,x)
+    % Phi = - (X(q) - X(x)) * (X(q) - X(x))'
+    
+    % Sort the positive documents
+    ScorePos        = - D(pos,q);
+    [Vpos, Ipos]    = sort(full(ScorePos'), 'descend');
+    Ipos            = pos(Ipos);
+    
+    % Sort the negative documents
+    ScoreNeg        = - D(neg,q);
+    [Vneg, Ineg]    = sort(full(ScoreNeg'), 'descend');
+    Ineg            = neg(Ineg);
+
+    % Now, solve the DP for the interleaving
+
+    numPos  = length(pos);
+    numNeg  = length(neg);
+    n       = numPos + numNeg;
+
+    
+    % Pre-generate the precision scores
+%     H       = triu(1./bsxfun(@minus, (0:(numPos-1))', 1:n));
+    H       = tril(1./bsxfun(@minus, 0:(numPos-1), (1:n)'));
+
+    % Padded cumulative Vneg
+    pcVneg  = cumsum([0  Vneg]);
+
+    % Generate the discriminant scores
+    H       = H + scoreChangeMatrix(Vpos, Vneg, n, pcVneg);
+
+    % Cost of inserting the first + at position b
+    P       = zeros(size(H));
+
+    % Now recurse
+    for a = 2:numPos
+
+        % Fill in the back-pointers
+        [m,p]           = cummax(H(:,a-1));
+        % The best point is the previous row, up to b-1
+        H(a:n,a)        = H(a:n,a) + (a-1)/a .* m(a-1:n-1)';
+        P(a+1:n,a)      = p(a:n-1);
+        P(a,a)          = a-1;
+    end
+
+    % Now reconstruct the permutation from the DP table
+    Y           = nan * ones(n,1);
+    [m,p]       = max(H(:,numPos));
+    Y(p)        = Ipos(numPos);
+
+    for a = numPos:-1:2
+        p       = P(p,a);
+        Y(p)    = Ipos(a-1);
+    end
+    Y(isnan(Y)) = Ineg;
+
+    % Compute loss for this list
+    Loss        = 1 - AP(Y, pos);
+end
+
+function C = scoreChangeMatrix(Vpos, Vneg, n, pcVneg)
+    numNeg  = length(Vneg);
+    numPos  = length(Vpos);
+
+    % Inserting the a'th relevant document at position b
+    % There are (b - (a - 1)) negative docs before a
+    % And (numNeg - (b - (a - 1))) negative docs after
+    %
+    % The change in score is proportional to: 
+    %
+    %   sum_{negative j}  (Vpos(a) - Vneg(j)) * y_{aj}
+    %
+    %   = (numNeg - (b - (a - 1))) * Vpos(a)            # Negatives after a
+    %   - (cVneg(end) - cVneg(b - (a - 1)))             Weight of negs after a
+    %   - (b - (a - 1)) * Vpos(a)                       # Negatives before a
+    %   + cVneg(b - (a - 1))                            Weight of negs before a
+    %
+    %   Rearrange:
+    %
+    %   (numNeg - 2 * (b - a + 1)) * Vpos(a)
+    %   - cVneg(end) + 2 * cVneg(b - a + 1)
+    %
+    % Valid range of a:  1:numPos
+    % Valid range of b:  a:n
+
+    D   = bsxfun(@plus, 1-(1:numPos), (1:n)');
+    C   = numNeg - 2 * D;
+    C   = bsxfun(@times, Vpos, C);
+
+    D(D < 1)                = 1;
+    D(D > length(pcVneg))   = length(pcVneg);
+
+    %     FIXME:  2011-01-28 21:13:37 by Brian McFee <bmcfee@cs.ucsd.edu>
+    % brutal hack to get around matlab's screwy matrix reshaping 
+    if numPos == 1
+        pcVneg = pcVneg';
+    end
+
+    C   = C + 2 * pcVneg(D) - pcVneg(end);
+
+    % Normalize
+    C   = bsxfun(@ldivide, (1:numPos) * numNeg, C);
+
+    % -Inf out the infeasible regions
+    C   = C - triu(Inf * bsxfun(@gt, (1:numPos), (1:n)'),1);
+
+
+end
+
+function x = AP(Y, pos)
+    % Indicator for relevant documents
+    rel     = ismember(Y, pos);
+
+    % Prec@k for all k
+    Prec    = cumsum(rel)' ./ (1:length(Y));
+
+    % Prec@k averaged over relevant positions
+    x       = mean(Prec(rel));
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/separationOracle/separationOracleMRR.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,77 @@
+function [Y, Loss] = separationOracleMRR(q, D, pos, neg, k)
+%
+%   [Y,Loss]  = separationOracleMRR(q, D, pos, neg, k)
+%
+%   q   = index of the query point
+%   D   = the current distance matrix
+%   pos = indices of relevant results for q
+%   neg = indices of irrelevant results for q
+%   k   = length of the list to consider (unused in MRR)
+%
+%   Y is a permutation 1:n corresponding to the maximally
+%   violated constraint
+%
+%   Loss is the loss for Y, in this case, 1-MRR(Y)
+
+
+    % First, sort the documents in descending order of W'Phi(q,x)
+    % Phi = - (X(q) - X(x)) * (X(q) - X(x))'
+    
+    % Sort the positive documents
+    ScorePos        = - D(pos,q);
+    [Vpos, Ipos]    = sort(full(ScorePos'), 'descend');
+    Ipos            = pos(Ipos);
+    
+    % Sort the negative documents
+    ScoreNeg        = -D(neg,q);
+    [Vneg, Ineg]    = sort(full(ScoreNeg'), 'descend');
+    Ineg            = neg(Ineg);
+
+    % Now, solve the DP for the interleaving
+
+    numPos  = length(pos);
+    numNeg  = length(neg);
+    n       = numPos + numNeg;
+
+    cVpos           = cumsum(Vpos);
+    cVneg           = cumsum(Vneg);
+
+
+    % Algorithm:
+    %   For each RR score in 1/1, 1/2, ..., 1/(numNeg+1)
+    %       Calculate maximum discriminant score for that precision level
+    MRR                     = ((1:(numNeg+1)).^-1)';
+
+    
+    Discriminant            = zeros(numNeg+1, 1);
+    Discriminant(end)       = numPos * cVneg(end) - numNeg * cVpos(end);
+    
+    % For the rest of the positions, we're interleaving one more negative
+    % example into the 2nd-through-last positives
+    offsets                 = 1 + binarysearch(Vneg, Vpos(2:end));
+    
+    % How many of the remaining positives go before Vneg(a)?
+    NegsBefore              = -bsxfun(@ge, offsets, (1:length(Vpos))');
+
+    % For the last position, all negatives come before all positives
+    NegsBefore(:,numNeg+1)  = numNeg;
+
+    Discriminant(1:numNeg) = -2 * (offsets .* Vneg - cVpos(offsets));
+    Discriminant = sum(Discriminant) - cumsum(Discriminant) + Discriminant;
+
+
+    % Normalize discriminant scores
+    Discriminant    = Discriminant / (numPos * numNeg);
+    [s, x]          = max(Discriminant - MRR);
+
+    % Now we know that there are x-1 relevant docs in the max ranking
+    % Construct Y from NegsBefore(x,:)
+
+    Y = nan * ones(n,1);
+    Y((1:numPos)' + sum(NegsBefore(:,x:end),2)) = Ipos;
+    Y(isnan(Y))                     = Ineg;
+
+    % Compute loss for this list
+    Loss        = 1 - MRR(x);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/separationOracle/separationOracleNDCG.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,100 @@
+function [Y, Loss] = separationOracleNDCG(q, D, pos, neg, k)
+%
+%   [Y,Loss]  = separationOracleNDCG(q, D, pos, neg, k)
+%
+%   q   = index of the query point
+%   D   = the current distance matrix
+%   pos = indices of relevant results for q
+%   neg = indices of irrelevant results for q
+%   k   = length of the list to consider 
+%
+%   Y is a permutation 1:n corresponding to the maximally
+%   violated constraint
+%
+%   Loss is the loss for Y, in this case, 1-NDCG(Y)
+
+
+    % First, sort the documents in descending order of W'Phi(q,x)
+    % Phi = - (X(q) - X(x)) * (X(q) - X(x))'
+    
+    % Sort the positive documents
+    ScorePos        = - D(pos, q);
+    [Vpos, Ipos]    = sort(full(ScorePos'), 'descend');
+    Ipos            = pos(Ipos);
+    
+    % Sort the negative documents
+    ScoreNeg        = - D(neg, q);
+    [Vneg, Ineg]    = sort(full(ScoreNeg'), 'descend');
+    Ineg            = neg(Ineg);
+
+    % Now, solve the DP for the interleaving
+
+    numPos  = length(pos);
+    numNeg  = length(neg);
+    n       = numPos + numNeg;
+
+    % From Chakrabarti (KDD08)
+    k       = min(k, numPos);
+
+    cVneg   = cumsum(Vneg);
+
+    Discount = zeros(k, 1);
+    Discount(1:2) = 1;
+    Discount(3:k) = 1./ log2(3:k);
+
+    DCGstar         = sum(Discount);
+
+
+    % Pre-compute the loss table
+    LossTab     = padarray(  hankel(- Discount / DCGstar), ...
+                            max(0, [numNeg numPos] - k), 0, 'post');
+    if sum(size(LossTab) > [numNeg, numPos])
+        LossTab     = LossTab(1:numNeg, 1:numPos);
+    end
+
+    % 2010-01-17 09:13:41 by Brian McFee <bmcfee@cs.ucsd.edu>
+    % initialize the score table
+
+    pcVneg = [0 cVneg];
+    % Pre-compute cellScore
+    cellValue = bsxfun(@times, Vpos / (numPos * numNeg), numNeg - 2 * ((1:numNeg)-1)');
+    cellValue = bsxfun(@plus, (2 * pcVneg(1:numNeg) - cVneg(end))' / (numPos * numNeg), cellValue);
+    cellValue = cellValue + LossTab;
+
+    S       = zeros(numNeg, numPos);
+    P       = zeros(numNeg, numPos);
+    
+    % Initialize first column
+    P(:,1) = 1;
+    S(:,1) = cellValue(:,1);
+
+    % Initialize first row
+    P(1,:) = 1;
+    S(1,:) = cumsum(cellValue(1,:));
+    
+    % For the rest, use the recurrence
+
+    for g = 2:numPos
+        [m, pointer]    = cummax(S(:,g-1));
+        P(:,g)          = pointer;
+        S(:,g)          = m' + cellValue(:,g);
+    end
+
+    % Now reconstruct the permutation from the DP table
+    Y           = nan * ones(n,1);
+    [m,p]       = max(S(:,numPos));
+    
+    Loss        = 1 + LossTab(p,numPos);
+    
+    NegsBefore      = zeros(numPos,1);
+    NegsBefore(numPos)  = p-1;
+
+    for a = numPos:-1:2
+        p               = P(p,a);
+        NegsBefore(a-1) = p-1;
+        Loss            = Loss + LossTab(p,a-1);
+    end
+    Y((1:numPos)' + NegsBefore)     = Ipos;
+    Y(isnan(Y))                     = Ineg;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/separationOracle/separationOraclePrecAtK.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,95 @@
+function [Y, Loss] = separationOraclePrecAtK(q, D, pos, neg, k)
+%
+%   [Y,Loss]  = separationOraclePrecAtK(q, D, pos, neg, k)
+%
+%   q   = index of the query point
+%   D   = the current distance matrix
+%   pos = indices of relevant results for q
+%   neg = indices of irrelevant results for q
+%   k   = length of the list to consider
+%
+%   Y is a permutation 1:n corresponding to the maximally
+%   violated constraint
+%
+%   Loss is the loss for Y, in this case, 1-Prec@k(Y)
+
+
+    % First, sort the documents in descending order of W'Phi(q,x)
+    % Phi = - (X(q) - X(x)) * (X(q) - X(x))'
+    
+    % Sort the positive documents
+    ScorePos        = - D(pos,q);
+    [Vpos, Ipos]    = sort(full(ScorePos'), 'descend');
+    Ipos            = pos(Ipos);
+    
+    % Sort the negative documents
+    ScoreNeg        = -D(neg,q);
+    [Vneg, Ineg]    = sort(full(ScoreNeg'), 'descend');
+    Ineg            = neg(Ineg);
+
+    % Now, solve the DP for the interleaving
+
+    numPos  = length(pos);
+    numNeg  = length(neg);
+    n       = numPos + numNeg;
+
+    cVpos           = cumsum(Vpos);
+    cVneg           = cumsum(Vneg);
+
+
+    % If we don't have enough positive (or negative) examples, scale k down
+    k = min([k, numPos, numNeg]);
+
+    % Algorithm:
+    %   For each precision score in 0, 1/k, 2/k, ... 1
+    %       Calculate maximum discriminant score for that precision level
+    Precision       = (0:(1/k):1)';
+    Discriminant    = zeros(k+1, 1);
+    NegsBefore      = zeros(numPos, k+1);
+
+    % For 0 precision, all positives go after the first k negatives
+
+    NegsBefore(:,1) = k + binarysearch(Vpos, Vneg(k+1:end));
+
+    Discriminant(1) = Vpos * (numNeg - 2 * NegsBefore(:,1)) + numPos * cVneg(end) ...
+                    - 2 * sum(cVneg(NegsBefore((NegsBefore(:,1) > 0),1)));
+
+
+
+    % For precision (a-1)/k, swap the (a-1)'th positive doc
+    %   into the top (k-a) negative docs
+
+    for a = 2:(k+1)
+        NegsBefore(:,a) = NegsBefore(:,a-1);
+
+        % We have a-1 positives, and k - (a-1) negatives
+        NegsBefore(a-1, a) = binarysearch(Vpos(a-1), Vneg(1:(k-a+1)));
+
+        % There were NegsBefore(a-1,a-1) negatives before (a-1)
+        % Now there are NegsBefore(a,a-1)
+        Discriminant(a) = Discriminant(a-1) ...
+                        + 2 * (NegsBefore(a-1,a-1) - NegsBefore(a-1,a)) * Vpos(a-1);
+
+        if NegsBefore(a-1,a-1) > 0
+            Discriminant(a) = Discriminant(a) + 2 * cVneg(NegsBefore(a-1,a-1));
+        end
+        if NegsBefore(a-1,a) > 0
+            Discriminant(a) = Discriminant(a) - 2 * cVneg(NegsBefore(a-1,a));
+        end
+    end
+
+    % Normalize discriminant scores
+    Discriminant    = Discriminant / (numPos * numNeg);
+    [s, x]          = max(Discriminant - Precision);
+
+    % Now we know that there are x-1 relevant docs in the max ranking
+    % Construct Y from NegsBefore(x,:)
+
+    Y = nan * ones(n,1);
+    Y((1:numPos)' + NegsBefore(:,x)) = Ipos;
+    Y(isnan(Y))                     = Ineg;
+
+    % Compute loss for this list
+    Loss        = 1 - Precision(x);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/thresh/threshFull_admmMixed.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+function result = threshFull_admmMixed(R,lam);
+% return argmin_V lam*||V||_2,1 + 0.5 ||V - A||_F^2
+% symmetry constraint on V
+
+
+   
+    W = R;
+    V = eye(length(R));
+    U = zeros(size(R));
+    q = 1;
+    mu = 100;
+    mult = 2;
+    
+    p = numel(R);
+    n = numel(U);
+    tol = 1e-4;
+    ptol = tol * sqrt(p);
+    dtol = tol * sqrt(n);
+    
+    iter = 0;
+    while 1
+        iter = iter + 1;
+        Vold = V;
+        W = threshFull_mixed(((1*R+q*(V-U))/(1+q)),lam/(1+q));
+        V = feasible_symm(W+U);
+        U = U + W - V;
+        
+        pr = q * norm( V(:)-Vold(:));
+        dr = norm((W(:) - V(:)));
+        
+        if pr < ptol && dr < dtol,break,end
+        
+        if pr/dr > mu
+            q = 1/mult * q;
+            U = mult * U;
+            %         disp(['q = ' num2str(q)]);
+        elseif dr/pr > mu
+            q = mult * q;
+            U = 1/mult * U;
+            %         disp(['q = ' num2str(q)]);
+            
+        end
+    end
+    %disp(['Iterations: ' num2str(iter)]);
+    %disp(['PR: ' num2str(pr) 'DR: ' num2str(dr)])
+    result = V;
+end
+
+
+
+function result = feasible_symm(A)
+result = 0.5*(A+A');
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/thresh/threshFull_mixed.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function result = threshFull_mixed(A, lam)
+%return argmin_V lam*||V||_2,1 + 0.5 ||V - A||_F^2
+% no symmetry constraint on V
+
+norm = sqrt(sum(A.^2));
+result = bsxfun(@times, A, max(1 - (lam ./ norm),0));
+	
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/Makefile	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+MEXFLAGS=
+MEX=mex
+
+all: binarysearch cummax
+
+binarysearch: binarysearch.c
+	${MEX} ${MEXFLAGS} $<
+
+cummax: cummax.c
+	${MEX} ${MEXFLAGS} $<
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/PsdToEdm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,4 @@
+function D = PsdToEdm(G)
+
+    d = diag(G);
+    D = bsxfun(@plus, d, d') - 2 * G;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/binarysearch.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+/* CREATED:2010-01-17 08:12:57 by Brian McFee <bmcfee@cs.ucsd.edu> */
+/* binarysearch.c
+ *
+ *  binary search
+ *
+ * Compile: 
+ *  mex binarysearch.c
+ */
+
+#include "mex.h"
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+    /* Declare variables */
+    int nQuery, nData;          /* number of elements */
+    double *pQuery, *pData;     /* input arrays */
+    double *positions;          /* output array(s) */
+
+    int i;
+
+    if (nrhs != 2) {
+        mexErrMsgTxt("Two input arguments are required.");
+    }
+    if (nlhs > 1) {
+        mexErrMsgTxt("Too many output arguments.");
+    }
+
+    if (!(mxIsDouble(prhs[0])) || !(mxIsDouble(prhs[1]))) {
+        mexErrMsgTxt("Input arrays must be of type double.");
+    }
+
+    nQuery      = mxGetNumberOfElements(prhs[0]);
+    nData       = mxGetNumberOfElements(prhs[1]);
+    pQuery      = (double *)mxGetPr(prhs[0]);
+    pData       = (double *)mxGetPr(prhs[1]);
+    
+    plhs[0]     = mxCreateDoubleMatrix(1, nQuery, mxREAL);
+    positions   = mxGetPr(plhs[0]);
+
+    /* Now for the meat */
+
+    for (i = 0; i < nQuery; i++) {
+        positions[i] = 0;
+        positions[i] = binarysearch(pQuery[i], pData, nData);
+    }
+
+    mxSetN(plhs[0], nQuery);
+}
+
+int binarysearch(double q, double *data, int n) {
+    int l = 0;
+    int u = n-1;
+    int pivot;
+
+    while (l < u) {
+        pivot = l + (u - l) / 2;
+
+        if (q > data[pivot]) {
+            u = pivot - 1;
+        } else {
+            l = pivot + 1;
+        }
+    }
+
+    /* Break ties to the right */
+    if (l == n || q > data[l]) {
+        return l;
+    } else {
+        return l + 1;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/cummax.c	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+/* CREATED:2010-01-08 17:25:37 by Brian McFee <bmcfee@cs.ucsd.edu> */
+/* cummax.c
+ *
+ *  cumulative maximum (analogous to cumsum)
+ *
+ * Compile: 
+ *  mex cummax.c
+ */
+
+#include "mex.h"
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
+{
+    /* Declare variables */
+    int n;      /* number of elements */
+    double *pi; /* input array */
+    double *po1, *po2; /* output array(s) */
+    double currentMax;
+    double currentMaxPointer;
+    int i;
+
+    if (nrhs != 1) {
+        mexErrMsgTxt("Only one input argument is required.");
+    }
+    if (nlhs > 2) {
+        mexErrMsgTxt("Too many output arguments.");
+    }
+
+    if (!(mxIsDouble(prhs[0]))) {
+        mexErrMsgTxt("Input array must be of type double.");
+    }
+
+    n       = mxGetNumberOfElements(prhs[0]);
+    pi      = (double *)mxGetPr(prhs[0]);
+    
+    plhs[0] = mxCreateDoubleMatrix(1, n, mxREAL);
+    po1     = mxGetPr(plhs[0]);
+
+    plhs[1] = mxCreateDoubleMatrix(1, n, mxREAL);
+    po2     = mxGetPr(plhs[1]);
+
+    /* Now for the meat */
+
+    currentMax = pi[0];
+    currentMaxPointer = 1;
+    for (i = 0; i < n; i++) {
+        if (pi[i] > currentMax) {
+            currentMax          = pi[i];
+            currentMaxPointer   = i + 1;
+        }
+        po1[i] = currentMax;
+        po2[i] = currentMaxPointer;
+    }
+
+    mxSetN(plhs[0], n);
+    mxSetN(plhs[1], n);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/dbprint.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+function dbprint(l, varargin)
+
+    global DEBUG;
+
+    if DEBUG >= l
+        display(sprintf(varargin{:}));
+    end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/distToFrom.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function D = distToFrom(n, Vto, Vfrom, Ito, Ifrom)
+    Cross           = -2 * Vto' * Vfrom;
+    Tonorm          = sum(Vto .^2, 1)';
+    Fromnorm        = sum(Vfrom .^2, 1);
+
+    D               = zeros(n);
+    D(Ito,Ifrom)    = bsxfun(@plus, bsxfun(@plus, Cross, Tonorm), Fromnorm);
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/lcprog.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,307 @@
+function [z, w, status, z0] = lcprog(M, q, varargin)
+%LCPROG - Linear complementary programming with Lemke's algorithm.
+%
+%	[z, w] = lcprog(M, q);
+%	[z, w, status, z0] = lcprog(M, q, varargin);
+%
+% Inputs:
+%	M - Matrix (n x n matrix)
+%	q - Vector (n vector)
+%
+% Optional Inputs:
+%	Optional name-value pairs are:
+%	'maxiter'	Maximum number of iterations before termination of algorithm (default is (1+n)^3).
+%	'tiebreak'	Method to break ties for pivot selection (default is 'first'). Options are:
+%				'first'		Select pivot with lowest index.
+%				'last'		Select pivot with highest index.
+%				'random'	Select a pivot at random.
+%	'tolpiv'	Pivot tolerance below which a number is considered to be zero (default is 1.0e-9).
+%
+% Outputs:
+%	z - Solution vector (n vector)
+%	w - Complementary solution vector (n vector)
+%	status - Status of optimization with values (integer)
+%		 6		Ray termination
+%		 1		Convergence to a solution (normal termination)
+%		 0		Termination prior to convergence
+%		-2		Infeasible problem
+%		-3		Bad pivot to an infeasible solution
+%	z0 - Artificial variable which is 0 upon normal termination (scalar)
+%
+% Comments:
+%	Given a matrix M and a vector q, the linear complementary programming (LCP) problem seeks an
+%	orthogonal pair of non-negative vectors w and z such that
+%		w = M * z + q
+%	with
+%		w' * z = 0
+%		w >= 0
+%		z >= 0 .
+%
+%	The algorithm starts with the problem
+%		w = M * z + q + z0 * 1
+%	with an artificial variable z0 > 0 such that q + z0*1 >= 0. The algorithm goes through a series
+%	of pivot steps that seeks to drive z0 to 0. The algorithm can stop in two ways with either
+%	normal termination or ray termination.
+%
+%	With normal termination, the artificial variable z0 is zero so that the original problem is
+%	solved.
+%
+%	With ray termination, the artificial variable z0 is non-negative with "ray" solution in the form
+%		w = wR + lambda * dw
+%		z = zR + lambda * dz
+%		z0 = z0R + lambda * dz0
+%	that satisfies
+%		w = M * z + q + z0 * 1
+%		w' * z = 0
+%	for any lambda >= 0. If ray termination occurs, the returned variables w, z, and z0 are the
+%	points on the ray with lambda = 0.
+%
+%	If tolpiv is too small, the algorithm may identify a pivot that is effectively zero. If this
+%	situation occurs, the status code -3 is triggered. Try a larger pivot tolerance 'tolpiv' although
+%	a pivot that is too large can trigger false convergence due to failure to find a pivot.
+%
+
+%
+% Copyright 2007 The MathWorks, Inc.
+% $Revision: 1.1.6.4 $   $ Date: $
+
+% initialization
+
+if nargin < 2 || isempty(M) || isempty(q)
+   error('finance:lcprog:MissingInputArgument', ...
+      'One or more missing required input arguments M, q.');
+end
+
+q = q(:);
+n = size(q,1);
+
+% process name-value pairs (if any)
+
+if mod(nargin-2,2) ~= 0
+   error('finance:lcprog:InvalidNameValuePair', ...
+      'Invalid name-value pairs with either a missing name or value.');
+end
+
+names = { 'maxiter', 'tiebreak', 'tolpiv' };				% names
+values = { (1 + n)^3, 'first', 1.0e-9 };					% default values
+try
+   [maxiter, tiebreak, tolpiv] = parsepvpairs(names, values, varargin{:});
+
+catch E
+   E.throw
+end
+
+% check optional arguments
+
+if maxiter <= 0
+   error('finance:lcprog:NonPositiveInteger', ...
+      'Maximum number of iterations (maxiter) must be a positive integer.');
+end
+
+if ~isempty(strmatch(tiebreak,{'default','first'}))
+   tb = 1;
+elseif ~isempty(strmatch(tiebreak,'last'))
+   tb = 2;
+elseif ~isempty(strmatch(tiebreak,'random'))
+   tb = 3;
+else
+   tb = 1;
+end
+
+if tolpiv < 2*eps
+   error('finance:lcprog:InvalidTolerance', ...
+      'Unrealistically small tolerance (tolpiv) specified.');
+end
+
+% trivial solution
+
+if all(q >= 0)
+   z = zeros(n,1);
+   w = q;
+   status = 1;
+   z0 = 0;
+   return
+end
+
+% set up general problem
+
+w = zeros(n,1);
+z = zeros(n,1);
+u = ones(n,1);
+z0 = max(-q);
+
+tableau = [ eye(n), -M, -u, q];
+basic = (1:n)';
+
+% initial pivot and initial basis
+
+r = find(q == min(q),1);			% r are pivot rows
+cx = r;								% w(r) leaves the basis
+c = 2*n + 1;						% initial pivot column
+basic(r) = c;						% z0 enters the basis
+
+% pivot step
+
+pr = (1/tableau(r,c)) * tableau(r,:);
+pc = tableau(:,c);
+tableau = tableau - pc * pr;
+tableau(r,:) = pr;
+
+% main loop
+
+for iter = 2:maxiter
+
+   % get new basic variable
+
+   if cx <= n
+      c = n + cx;
+   elseif cx <= 2*n
+      c = cx - n;
+   end
+
+   % do ratio test
+
+   d = tableau(:,c);
+   mind = NaN(n,1);
+   for i = 1:n
+      if d(i) > tolpiv
+         mind(i) = tableau(i,end)/d(i);
+      end
+   end
+   iind = find(mind == nanmin(mind));
+
+   % ray termination
+
+   if isempty(iind)						% cannot find a new basic variable
+      for i = 1:n
+         if basic(i) <= n
+            ii = basic(i);
+            w(ii) = tableau(i,end);
+            z(ii) = 0;
+         elseif basic(i) <= 2*n
+            ii = basic(i) - n;
+            w(ii) = 0;
+            z(ii) = tableau(i,end);
+         else
+            z0 = tableau(i,end);
+         end
+      end
+      if lcprealitycheck(M, q, w, z)
+         status = -3;
+         z = NaN(n,1);
+         w = NaN(n,1);
+         z0 = NaN;
+      else
+         status = 6;
+      end
+      return
+   end
+
+   % identify next basic variable to be replaced using ratio test
+
+   if tb == 3
+      ii = ceil(rand()*numel(iind));
+      if ii < 1
+         ii = 1;
+      end
+      r = iind(ii);
+   elseif tb == 2
+      r = iind(end);
+   elseif tb == 1
+      r = iind(1);
+   end
+   for i = 1:numel(iind)					% always select z0 if it is in the index set
+      if basic(iind(i)) == (2*n + 1)
+         r = iind(i);
+      end
+   end
+
+   % new basis
+
+   cx = basic(r);							% get variable leaving the basis
+   basic(r) = c;							% move new basic variable into the basis
+
+   % pivot step
+
+   pr = (1/tableau(r,c)) * tableau(r,:);
+   pc = tableau(:,c);
+   tableau = tableau - pc * pr;
+   tableau(r,:) = pr;
+
+   if ~isfinite(tableau(1,end))			% trap overflow/underflow
+      warning('finance:lcprog:InfeasibleProblem', ...
+         'Tableau overflow/underflow due to bad pivot.');
+      status = -3;
+      z = NaN(n,1);
+      w = NaN(n,1);
+      z0 = NaN;
+      return
+   end
+
+   % convergence test
+
+   if all(basic <= 2*n)					% test if z0 left the basis -> convergence
+      for i = 1:n
+         if basic(i) <= n
+            ii = basic(i);
+            w(ii) = tableau(i,end);
+            z(ii) = 0;
+         else
+            ii = basic(i) - n;
+            w(ii) = 0;
+            z(ii) = tableau(i,end);
+         end
+      end
+      z0 = 0;
+      if lcprealitycheck(M, q, w, z)
+         status = -3;
+         z = NaN(n,1);
+         w = NaN(n,1);
+         z0 = NaN;
+      else
+         status = 1;
+      end
+      return
+   end
+end
+
+% too many iterations
+
+for i = 1:n
+   if basic(i) <= n
+      ii = basic(i);
+      w(ii) = tableau(i,end);
+      z(ii) = 0;
+   elseif basic(i) <= 2*n
+      ii = basic(i) - n;
+      w(ii) = 0;
+      z(ii) = tableau(i,end);
+   else
+      z0 = tableau(i,end);
+   end
+end
+if lcprealitycheck(M, q, w, z)
+   status = -3;
+   z = NaN(n,1);
+   w = NaN(n,1);
+   z0 = NaN;
+else
+   status = 0;
+end
+
+
+function notok = lcprealitycheck(M, q, w, z)
+%LCPREALITYCHECK - Make sure candidate solution z and w is complementary basic feasible.
+
+u = w - M*z - q;
+
+if (max(u) - min(u)) > 1
+   warning('finance:lcprog:InfeasibleProblem', ...
+      'Candidate solution is infeasible due to a bad pivot.');
+   notok = true;
+else
+   notok = false;
+end
+
+
+% [EOF]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/mlr_admm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,181 @@
+function [W, Xi, Diagnostics] = mlr_admm(C, K, Delta, H, Q)
+% [W, Xi, D] = mlr_admm(C, Delta, W, X)
+%
+%   C       >= 0    Slack trade-off parameter
+%   K       =       data matrix (or kernel)
+%   Delta   =       array of mean margin values
+%   H       =       structural kernel matrix
+%   Q       =       kernel-structure interaction vector
+%
+%   W (output)  =   the learned metric
+%   Xi          =   1-slack
+%   D           =   diagnostics
+
+    global DEBUG REG FEASIBLE LOSS INIT STRUCTKERNEL DUALW;
+
+    %%%
+    % Initialize the gradient directions for each constraint
+    %
+    global PsiR;
+
+    global ADMM_Z ADMM_U;
+
+    global ADMM_STEPS;
+
+    global RHO;
+
+    global ADMM_RELTOL;
+
+    
+    numConstraints = length(PsiR);
+
+    Diagnostics = struct(   'f',                [], ...
+                            'num_steps',        [], ...
+                            'stop_criteria',    []);
+
+
+    % Convergence settings
+    if ~isempty(ADMM_STEPS)
+        MAX_ITER = ADMM_STEPS;
+    else
+        MAX_ITER = 10;
+    end
+    ABSTOL      = 1e-4 * sqrt(numel(ADMM_Z));
+    
+    if ~isempty(ADMM_RELTOL)
+        RELTOL    =  ADMM_RELTOL;
+    else
+        RELTOL      = 1e-3;
+    end
+
+    SCALE_THRESH    = 10;
+    RHO_RESCALE     = 2;
+    stopcriteria= 'MAX STEPS';
+
+    % Objective function
+    F           = zeros(1,MAX_ITER);
+
+    % how many constraints
+
+    alpha           = zeros(numConstraints,  1);
+    Gamma           = zeros(numConstraints,  1);
+
+    ln1 = 0;
+    ln2 = 0;
+    for step = 1:MAX_ITER
+        % do a w-update
+        % dubstep needs:
+        %   C       <-- static
+        %   RHO     <-- static
+        %   H       <-- static
+        %   Q       <-- static
+        %   Delta   <-- static
+        %   Gamma   <-- this one's dynamic
+
+        for i = 1:numConstraints
+            Gamma(i) = STRUCTKERNEL(ADMM_Z-ADMM_U, PsiR{i});
+        end
+        
+        alpha = mlr_dual(C, RHO, H, Q, Delta, Gamma, alpha);
+
+        %%%
+        % 3) convert back to W
+        %
+        W = DUALW(alpha, ADMM_Z, ADMM_U, RHO, K);
+
+        %figure(1), imagesc(W), drawnow;
+        % Update Z
+        Zold    = ADMM_Z;
+        ADMM_Z  = FEASIBLE(W + ADMM_U);
+
+        % Update residuals
+        ADMM_U  = ADMM_U + W - ADMM_Z;
+
+        % Compute primal objective
+        %   slack term
+        Xi      = 0;
+        for R = numConstraints:-1:1
+            Xi = max(Xi, LOSS(ADMM_Z, PsiR{R}, Delta(R), 0));
+        end
+        F(step)     = C * Xi + REG(ADMM_Z, K, 0);
+        
+%           figure(2), loglog(1:step, F(1:step)), xlim([0, MAX_ITER]), drawnow;
+        % Test for convergence
+
+        N1          = norm(W(:)-ADMM_Z(:));
+        N2          = RHO * norm(Zold(:) - ADMM_Z(:));
+
+        eps_primal = ABSTOL + RELTOL * max(norm(W(:)), norm(ADMM_Z(:)));
+        eps_dual   = ABSTOL + RELTOL * RHO * norm(ADMM_U(:));
+%               figure(2), loglog(step + (-1:0), [ln1, N1/eps_primal], 'b'), xlim([0, MAX_ITER]), hold('on');
+%               figure(2), loglog(step + (-1:0), [ln2, N2/eps_dual], 'r-'), xlim([0, MAX_ITER]), hold('on'), drawnow;
+%              ln1 = N1/eps_primal;
+%              ln2 = N2/eps_dual;
+        if N1 < eps_primal && N2 < eps_dual
+            stopcriteria = 'CONVERGENCE';
+            break;
+        end
+
+        if N1 > SCALE_THRESH * N2
+            dbprint(3, sprintf('RHO: %.2e UP %.2e', RHO, RHO * RHO_RESCALE));
+            RHO = RHO * RHO_RESCALE;
+            ADMM_U  = ADMM_U / RHO_RESCALE;
+        elseif N2 > SCALE_THRESH * N1
+            dbprint(3, sprintf('RHO: %.2e DN %.2e', RHO, RHO / RHO_RESCALE));
+            RHO = RHO / RHO_RESCALE;
+            ADMM_U  = ADMM_U * RHO_RESCALE;
+        end
+    end
+%     figure(2), hold('off');
+
+    %%%
+    % Ensure feasibility
+    %
+    W = FEASIBLE(W);
+    
+
+    %%%
+    % Compute the slack
+    %
+    Xi = 0;
+    for R = numConstraints:-1:1
+        Xi  = max(Xi, LOSS(W, PsiR{R}, Delta(R), 0));
+    end
+
+    %%% 
+    % Update diagnostics
+    %
+
+    Diagnostics.f               = F(1:step)';
+    Diagnostics.stop_criteria   = stopcriteria;
+    Diagnostics.num_steps       = step;
+
+    dbprint(1, '\t%s after %d steps.\n', stopcriteria, step);
+end
+
+function alpha = mlr_dual(C, RHO, H, Q, Delta, Gamma, alpha)
+
+    global PsiClock;
+
+    m = length(Delta);
+
+    if nargin < 7
+        alpha = zeros(m,1);
+    end
+
+    %%%
+    % 1) construct the QP parameters
+    %
+    b = RHO * (Gamma - Delta) - Q;
+
+    %%%
+    % 2) solve the QP
+    %
+    alpha = qplcprog(H, b, ones(1, m), C, [], [], 0, []);
+
+    %%%
+    % 3) update the Psi clock
+    %
+    PsiClock(alpha > 0)  = 0;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/mlr_solver.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,177 @@
+function [W, Xi, Diagnostics] = mlr_solver(C, Margins, W, K)
+% [W, Xi, D] = mlr_solver(C, Margins, W, X)
+%
+%   C       >= 0    Slack trade-off parameter
+%   Margins =       array of mean margin values
+%   W       =       initial value for W 
+%   X       =       data matrix (or kernel)
+%
+%   W (output)  =   the learned metric
+%   Xi          =   1-slack
+%   D           =   diagnostics
+
+    global DEBUG REG FEASIBLE LOSS;
+
+    %%%
+    % Initialize the gradient directions for each constraint
+    %
+    global PsiR;
+    global PsiClock;
+
+    numConstraints = length(PsiR);
+
+    %%% 
+    % Some optimization details
+    
+    % Armijo rule number
+    armijo      = 1e-5;
+    
+    % Initial learning rate
+    lambda0     = 1e-4;
+
+    % Increase/decrease after each iteration
+    lambdaup    = ((1+sqrt(5))/2)^(1/3);
+    lambdadown  = ((1+sqrt(5))/2)^(-1);
+
+    % Maximum steps to take
+    maxsteps    = 1e4;
+
+    % Size of convergence window
+    frame       = 10;
+    
+    % Convergence threshold
+    convthresh  = 1e-5;
+
+    % Maximum number of backtracks
+    maxbackcount = 100;
+
+
+    Diagnostics = struct(   'f',                [], ...
+                            'num_steps',        [], ...
+                            'stop_criteria',    []);
+
+    % Repeat until convergence:
+    % 1) Calculate f
+    % 2) Take a gradient step
+    % 3) Project W back onto PSD
+
+    %%%
+    % Initialze
+    %
+
+    f       = inf;
+    dfdW    = zeros(size(W));
+    lambda  = lambda0;
+    F       = Inf * ones(1,maxsteps+1);
+    XiR     = zeros(numConstraints,1);
+
+
+    stepcount   = -1;
+    backcount   = 0;
+    done        = 0;
+
+
+    while 1
+        fold = f;
+        Wold = W;
+
+        %%%
+        % Count constraint violations and build the gradient
+        dbprint(3, 'Computing gradient');
+
+        %%%
+        % Calculate constraint violations
+        %
+        XiR(:) = 0;
+        for R = numConstraints:-1:1
+            XiR(R)  = LOSS(W, PsiR{R}, Margins(R), 0);
+        end
+
+        %%%
+        % Find the most active constraint
+        %
+        [Xi, mgrad] = max(XiR);
+        Xi          = max(Xi, 0);
+        
+        PsiClock(mgrad) = 0;
+
+        %%%
+        % Evaluate f
+        %
+
+        f           = C     * max(Xi, 0) ...
+                            + REG(W, K, 0);
+
+        %%%
+        % Test for convergence
+        %
+        objDiff        = fold - f;
+
+        if objDiff > armijo * lambda * (dfdW(:)' * dfdW(:))
+
+            stepcount = stepcount + 1;
+
+            F(stepcount+1) = f;
+
+            sdiff = inf;
+            if stepcount >= frame;
+                sdiff = log(F(stepcount+1-frame) / f);
+            end
+
+            if stepcount >= maxsteps
+                done = 1; 
+                stopcriteria = 'MAXSTEPS';
+            elseif sdiff <= convthresh
+                done = 1;
+                stopcriteria = 'CONVERGENCE';
+            else
+                %%%
+                % If it's positive, add the corresponding gradient
+                dfdW    = C     * LOSS(W, PsiR{mgrad}, Margins(mgrad), 1) ...
+                                + REG(W, K, 1);
+            end
+
+            dbprint(3, 'Lambda up!');
+            Wold        = W;
+            lambda      = lambdaup * lambda;
+            backcount   = 0;
+
+        else
+            % Backtracking time, drop the learning rate
+            if backcount >= maxbackcount
+                W       = Wold;
+                f       = fold;
+                done    = 1;
+
+                stopcriteria = 'BACKTRACK';
+            else
+                dbprint(3, 'Lambda down!');
+                lambda      = lambdadown * lambda;
+                backcount   = backcount+1;
+            end
+        end
+        
+        %%%
+        % Take a gradient step
+        %
+        W   = W - lambda * dfdW;
+
+        %%%
+        % Project back onto the feasible set
+        %
+
+        dbprint(3, 'Projecting onto feasible set');
+        W   = FEASIBLE(W);
+        if done
+            break;
+        end; 
+
+    end
+
+    Diagnostics.f               = F(2:(stepcount+1))';
+    Diagnostics.stop_criteria   = stopcriteria;
+    Diagnostics.num_steps       = stepcount;
+
+    dbprint(1, '\t%s after %d steps.\n', stopcriteria, stepcount);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/parsepvpairs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,94 @@
+function varargout = parsepvpairs(names, defaults, varargin)
+%PARSEPVPAIRS Validate parameter name/value pairs and throw errors if necessary.
+%   Given the cell array of valid parameter names, a corresponding cell array of
+%   parameter default values, and a variable length list of parameter name/value
+%   pairs, validate the specified name/value pairs and assign values to output
+%   parameters.
+%
+%   [P1, P2, ...] = parsepvpairs(Names, Defaults, 'Name1', Value1, 'Name2', Value2, ...)
+%
+%   Inputs:
+%      Names - Cell array of valid parameter names.
+%
+%   Defaults - Cell array of default values for the parameters named in Names.
+%
+%      Name# - Character strings of parameter names to be validated and
+%              assigned the corresponding value that immediately follows each
+%              in the input argument list. Parameter name validation is
+%              case-insensitive and partial string matches are allowed provided
+%              no ambiguities exist.
+%
+%     Value# - The values assigned to the corresponding parameter that
+%              immediately precede each in the input argument list.
+%
+%   Outputs:
+%         P# - Parameters assigned the parameter values Value1, Value2, ...
+%              in the same order as the names listed in Names. Parameters
+%              corresponding to entries in Names that are not specified in the
+%              name/value pairs are set to the corresponding value listed in
+%              Defaults.
+
+%   Copyright 1995-2007 The MathWorks, Inc.
+%   $Revision: 1.1.6.2 $   $Date: 2008/12/21 01:51:18 $
+
+%
+% Short-circuit the input argument checking for performance purposes. Under the
+% following specific circumstances, users may by-pass P-V pair validation when:
+%
+% (1) Values are assigned to all recognized parameters,
+% (2) Parameters are specified in exactly the same order as in the input NAMES,
+% (3) All parameters are completely specified (i.e., exact matches and no partial 
+%     names allowed).
+%
+
+if isequal(varargin(1:2:end-1), names)
+   varargout = varargin(2:2:end);
+   return
+end 
+
+% Initialize some variables.
+nInputs   = length(varargin);  % # of input arguments
+varargout = defaults;
+
+% Ensure parameter/value pairs.
+if mod(nInputs, 2) ~= 0
+   error('finance:parsepvpairs:incorrectNumberOfInputs', ...
+      'Input parameters must be in name/value pair format.');
+
+else
+   names = lower(names);
+
+   % Process p/v pairs.
+   for j = 1:2:nInputs
+      pName = varargin{j};
+
+      if ~ischar(pName)
+         error('finance:parsepvpairs:nonTextString', ...
+            'Parameter names must be character strings.');
+      end
+
+      i = strmatch(lower(pName), names);
+
+      if isempty(i)
+         error('finance:parsepvpairs:invalidParameter', ...
+            'Invalid parameter name:  %s.', pName);
+
+      elseif length(i) > 1
+         % If ambiguities exist, check for exact match to narrow search.
+         i = strmatch(lower(pName), names, 'exact');
+         if length(i) == 1
+            varargout{i} = varargin{j+1};
+
+         else
+            error('finance:parsepvpairs:ambiguousParameter', ...
+               'Ambiguous parameter name:  %s.', pName);
+         end
+
+      else
+         varargout{i} = varargin{j+1};
+      end
+   end
+end
+
+
+% [EOF]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/qplcprog.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,315 @@
+function [x, fval, status] = qplcprog(H, f, Ai, bi, Ae, be, lb, ub, varargin)
+%QPLCPROG Positive-semidefinite quadratic programming based on linear complementary programming.
+%
+%	x = qplcprog(H, f);
+%	[x, fval, status] = qplcprog(H, f, Ai, bi, Ae, be, lb, ub, varargin);
+%
+% Inputs:
+%	H - Hessian for objective function (n x n matrix)
+%
+% Optional Inputs:
+%	f - Vector for objective function, default is 0 (n x 1 vector)
+%	Ai - Linear inequality constraint matrix, default is [] (ni x n matrix)
+%	bi - Linear inequality constraint vector, default is [] (ni x 1 vector)
+%	Ae - Linear equality constraint matrix, default is [] (ne x n matrix)
+%	be - Linear equality constraint vector, default is [] (ne x 1 vector)
+%	lb - Lower-bound constraint, default is 0 (n x 1 vector)
+%	ub - Upper-bound constraint, default is [] (n x 1 vector)
+%
+%	maxiter - LCP maximum iterations, default is 100000
+%	tiebreak - Method to break ties for pivot selection (default is 'first'). Options are:
+%			'first'		Select pivot with lowest index.
+%			'last'		Select pivot with highest index.
+%			'random'	Select a pivot at random.
+%	tolpiv - LCP pivot selection tolerance, default is 1.0e-9
+%	tolcon - QP constraint tolerance, default is 1.0e-6
+%
+% Outputs:
+%	x - Solution vector (n x 1 vector)
+%	fval - Value of objective function at solution (scalar)
+%	status - Status of optimization with values (integer)
+%		 6		Ray termination
+%		 1		Convergence to a solution (normal termination)
+%		 0		Termination prior to convergence
+%		-2		Infeasible problem
+%		-3		Bad pivot to an infeasible solution
+%
+% Notes:
+%	Depending upon the inputs, various types of positive-semidefinite quadratic programs can be
+%	solved. The general problem is
+%
+%		min  0.5 * x' * H * x + f' * x
+%		 x
+%
+%	subject to any or all of the following constraints
+%
+%		Ai * x <= bi
+%		Ae * x = be
+%		lb <= x <= ub
+%
+%	with the current requirement that lb must be specified and finite.
+%
+%	It is assumed that H is positive-semidefinite. Note that if H = 0, qplcp solves a linear
+%	program.
+
+% Copyright 2008 The MathWorks, Inc.
+% $Revision: 1.1.6.3 $   $ Date: $
+
+if nargin < 1
+   error('Finance:qplcprog:MissingInputArgument', ...
+      'Missing required Hessian matrix for QP.');
+end
+H = full(H);
+n = size(H,1);
+
+if nargin < 2 || isempty(f)
+   f = zeros(n,1);
+else
+   f = full(f);
+   f = f(:);
+end
+
+if nargin == 3
+   error('Finance:qplcprog:IncompleteConstraintSpecification', ...
+      'Incomplete specification for linear inequality constraints.');
+end
+if nargin < 3
+   Ai = [];
+   bi = [];
+else
+   Ai = full(Ai);
+   bi = full(bi);
+   bi = bi(:);
+end
+
+if nargin == 5
+   error('Finance:qplcprog:IncompleteConstraintSpecification', ...
+      'Incomplete specification for linear equality constraints.');
+end
+if nargin < 5
+   Ae = [];
+   be = [];
+else
+   Ae = full(Ae);
+   be = full(be);
+   be = be(:);
+end
+
+if nargin < 7 || isempty(lb)
+   error('Finance:qplcprog:MissingBoundConstraint', ...
+      'Lower-bound constraint required.');
+else
+   lb = full(lb);
+   lb = lb(:);
+   if any(~isfinite(lb))
+      error('Finance:qplcprog:MissingBoundConstraint', ...
+         'Finite lower-bound constraint required.');
+   end
+end
+
+if nargin < 8
+   ub = [];
+else
+   ub = full(ub);
+   ub = ub(:);
+   if all(ub == Inf)
+      ub = [];
+   end
+end
+if any(~isfinite(ub))
+   error('Finance:qplcprog:InvalidBoundConstraint', ...
+      'If specified, finite upper-bound constraint required.');
+end
+
+% process name-value pairs (if any)
+
+if nargin > 8
+   if mod(nargin-8,2) ~= 0
+      error('Finance:qplcprog:InvalidNameValuePair', ...
+         'Invalid name-value pairs with either a missing name or value.');
+   end
+
+   names = { 'maxiter', 'tiebreak', 'tolcon', 'tolpiv' };			% names
+   values = { 10000, 'first', 1.0e-4, 1.0e-9 };					% default values
+   try
+      [maxiter, tiebreak, tolcon, tolpiv] = parsepvpairs(names, values, varargin{:});
+
+   catch E
+      E.throw
+   end
+else
+   maxiter = 100000;
+   tiebreak = 'first';
+   tolpiv = 1.0e-9;
+   tolcon = 1.0e-6;
+end
+
+% check arguments
+
+if maxiter <= 0
+   error('Finance:qplcprog:NonPositiveInteger', ...
+      'Maximum number of iterations (maxiter) must be a positive integer.');
+end
+
+if tolcon < 2*eps
+   error('Finance:qplcprog:InvalidTolerance', ...
+      'Unrealistically small constraint tolerance (tolcon) specified.');
+end
+
+if tolpiv < 2*eps
+   error('Finance:qplcprog:InvalidTolerance', ...
+      'Unrealistically small pivot tolerance (tolpiv) specified.');
+end
+
+% set translation if necessary
+
+if norm(lb) ~= 0
+   fx = f + H*lb;
+   if ~isempty(Ai) && ~isempty(bi)
+      bxi = bi - Ai*lb;
+   end
+   if ~isempty(Ae) && ~isempty(be)
+      bxe = be - Ae*lb;
+   end
+   if ~isempty(ub)
+      uxb = ub - lb;
+   end
+   translate = true;
+else
+   fx = f;
+   if ~isempty(Ai) && ~isempty(bi)
+      bxi = bi;
+   end
+   if ~isempty(Ae) && ~isempty(be)
+      bxe = be;
+   end
+   if ~isempty(ub)
+      uxb = ub;
+   end
+   translate = false;
+end
+
+% set up constraints
+
+if ~isempty(Ai) && ~isempty(bi)
+   if ~isempty(Ae) && ~isempty(be)
+      if ~isempty(ub)
+         A = [ Ai; Ae; -Ae; eye(n,n) ];
+         b = [ bxi; bxe; -bxe; uxb ];
+      else
+         A = [ Ai; Ae; -Ae ];
+         b = [ bxi; bxe; -bxe ];
+      end
+   else
+      if ~isempty(ub)
+         A = [ Ai; eye(n,n) ];
+         b = [ bxi; uxb ];
+      else
+         A = Ai;
+         b = bxi;
+      end
+   end
+else
+   if ~isempty(Ae) && ~isempty(be)
+      if ~isempty(ub)
+         A = [ Ae; -Ae; eye(n,n) ];
+         b = [ bxe; -bxe; uxb ];
+      else
+         A = [ Ae; -Ae ];
+         b = [ bxe; -bxe ];
+      end
+   else
+      if ~isempty(ub)
+         A = eye(n,n);
+         b = uxb;
+      else
+         error('Finance:qplcprog:InvalidConstraints', ...
+            'Insufficient or invalid constraints.');
+      end
+   end
+end
+
+% set up lcp problem
+
+ns = size(A,1);
+
+M = [ zeros(ns,ns) -A; A' H ];
+q = [ b; fx ];
+
+% solve lcp problem
+
+if isempty(varargin)
+   [z, w, status] = lcprog(M, q); %#ok
+else
+   [z, w, status] = lcprog(M, q, 'maxiter', maxiter, 'tiebreak', tiebreak, 'tolpiv', tolpiv); %#ok
+end
+
+% solve qp problem
+
+if status > 0
+   x = z(end-n+1:end);
+   if translate
+      x = x + lb;
+   end
+   fval = 0.5*x'*H*x + f'*x;
+
+   if qplcprogrealitycheck(Ai, bi, Ae, be, lb, ub, x)
+      status = -2;
+      x = NaN(n,1);
+      fval = NaN;
+   end
+else
+   x = NaN(n,1);
+   fval = NaN;
+end
+
+function notok = qplcprogrealitycheck(Ai, bi, Ae, be, lb, ub, x, tolcon)
+%QPLCPROGREALITYCHECK - Make sure candidate solution x is feasible.
+
+if nargin < 7
+   error('Finance:qplcprog:MissingInputArgument', ...
+      'Missing required input arguments Ai, bi, Ae, be, lb, ub, x.');
+end
+if nargin < 8 || isempty(tolcon)
+   tolcon = 1.0e-6;
+end
+
+notok = false;
+
+if ~isempty(Ai)
+   u = max(Ai*x - bi,0);
+   if u > tolcon
+      warning('Finance:qplcprog:InfeasibleProblem', ...
+         'Candidate solution violates inequality constraints.');
+      notok = true;
+   end
+end
+
+if ~isempty(Ae)
+   if norm(be - Ae*x,inf) > tolcon
+      warning('Finance:qplcprog:InfeasibleProblem', ...
+         'Candidate solution violates equality constraints.');
+      notok = true;
+   end
+end
+
+if ~isempty(lb)
+   u = x - lb;
+   if min(u) < -tolcon
+      warning('Finance:qplcprog:InfeasibleProblem', ...
+         'Candidate solution violates lower-bound constraints.');
+      notok = true;
+   end
+end
+
+if ~isempty(ub)
+   u = ub - x;
+   if min(u) < -tolcon
+      warning('Finance:qplcprog:InfeasibleProblem', ...
+         'Candidate solution violates upper-bound constraints.');
+      notok = true;
+   end
+end
+
+
+% [EOF]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/rmlr_admm.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,188 @@
+function [W, Xi, Diagnostics] = rmlr_admm(C, K, Delta, H, Q, lam)
+% [W, Xi, D] = mlr_admm(C, Delta, W, X)
+%
+%   C       >= 0    Slack trade-off parameter
+%   K       =       data matrix (or kernel)
+%   Delta   =       array of mean margin values
+%   H       =       structural kernel matrix
+%   Q       =       kernel-structure interaction vector
+%
+%   W (output)  =   the learned metric
+%   Xi          =   1-slack
+%   D           =   diagnostics
+
+global DEBUG REG FEASIBLE LOSS INIT STRUCTKERNEL DUALW THRESH;
+
+%%%
+% Initialize the gradient directions for each constraint
+%
+global PsiR;
+
+global ADMM_Z ADMM_V ADMM_UW ADMM_UV;
+
+global ADMM_STEPS;
+
+global RHO;
+
+numConstraints = length(PsiR);
+
+Diagnostics = struct(   'f',                [], ...
+    'num_steps',        [], ...
+    'stop_criteria',    []);
+
+
+% Convergence settings
+if ~isempty(ADMM_STEPS)
+    MAX_ITER = ADMM_STEPS;
+else
+    MAX_ITER = 10;
+end
+ABSTOL      = 1e-4 * sqrt(numel(ADMM_Z));
+RELTOL      = 1e-3;
+SCALE_THRESH    = 10;
+RHO_RESCALE     = 2;
+stopcriteria= 'MAX STEPS';
+
+% Objective function
+F           = zeros(1,MAX_ITER);
+
+% how many constraints
+
+alpha           = zeros(numConstraints,  1);
+Gamma           = zeros(numConstraints,  1);
+
+ln1 = 0;
+ln2 = 0;
+
+% figure(2)
+% hold off
+% plot(0)
+% delete(abc)
+% delete(abc2)
+for step = 1:MAX_ITER
+    % do a w-update
+    % dubstep needs:
+    %   C       <-- static
+    %   RHO     <-- static
+    %   H       <-- static
+    %   Q       <-- static
+    %   Delta   <-- static
+    %   Gamma   <-- this one's dynamic
+    
+    for i = 1:numConstraints
+        Gamma(i) = STRUCTKERNEL(ADMM_Z-ADMM_UW, PsiR{i});
+    end
+    %     d = length(K);
+    alpha = mlr_dual(C, RHO, H, Q, Delta, Gamma, alpha);
+    
+    %%%
+    % 3) convert back to W
+    %
+    W = DUALW(alpha, ADMM_Z, ADMM_UW, RHO, K);
+    
+    %   figure(1), imagesc(W), drawnow;
+    
+    % Update V
+    ADMM_V = THRESH(ADMM_Z - ADMM_UV, lam/RHO);
+    
+    % Update Z
+    Zold    = ADMM_Z;
+    ADMM_Z  = FEASIBLE(0.5* (W + ADMM_V + ADMM_UW + ADMM_UV));
+    
+    % Update residuals
+    ADMM_UW  = ADMM_UW + W - ADMM_Z;
+    ADMM_UV  = ADMM_UV + ADMM_V - ADMM_Z;
+    
+    % Compute primal objective
+    %   slack term
+    Xi      = 0;
+    for R = numConstraints:-1:1
+        Xi = max(Xi, LOSS(ADMM_Z, PsiR{R}, Delta(R), 0));
+    end
+    F(step)     = C * Xi + REG(W, K, 0) + lam * sum(sqrt(sum(W.^2)));
+    
+%     figure(2), loglog(1:step, F(1:step)), xlim([0, MAX_ITER]), drawnow;
+    % Test for convergence
+    
+    %WIP
+    N1          = norm(ADMM_V(:) + W(:) - 2* ADMM_Z(:));
+    N2          = RHO * norm(2* (Zold(:) - ADMM_Z(:)));
+    
+    eps_primal = ABSTOL + RELTOL * max(norm(W(:)), norm(ADMM_Z(:)));
+    eps_dual   = ABSTOL + RELTOL * RHO * norm(ADMM_UW(:));
+    %end WIP
+    
+    
+%            figure(2), loglog(step + (-1:0), [ln1, N1/eps_primal], 'b'), xlim([0, MAX_ITER]), hold('on');
+%            figure(2), loglog(step + (-1:0), [ln2, N2/eps_dual], 'r-'), xlim([0, MAX_ITER]), hold('on'), drawnow;
+%           ln1 = N1/eps_primal;
+%           ln2 = N2/eps_dual;
+    
+    if N1 < eps_primal && N2 < eps_dual
+        stopcriteria = 'CONVERGENCE';
+        break;
+    end
+    
+    if N1 > SCALE_THRESH * N2
+         dbprint(3, sprintf('RHO: %.2e UP %.2e', RHO, RHO * RHO_RESCALE));
+        RHO = RHO * RHO_RESCALE;
+        ADMM_UW  = ADMM_UW / RHO_RESCALE;
+    elseif N2 > SCALE_THRESH * N1
+         dbprint(3, sprintf('RHO: %.2e DN %.2e', RHO, RHO / RHO_RESCALE));
+        RHO = RHO / RHO_RESCALE;
+        ADMM_UW  = ADMM_UW * RHO_RESCALE;
+    end
+end
+%     figure(2), hold('off');
+
+%%%
+% Ensure feasibility
+%
+W = FEASIBLE(W);
+
+
+%%%
+% Compute the slack
+%
+Xi = 0;
+for R = numConstraints:-1:1
+    Xi  = max(Xi, LOSS(W, PsiR{R}, Delta(R), 0));
+end
+
+%%%
+% Update diagnostics
+%
+
+Diagnostics.f               = F(1:step)';
+Diagnostics.stop_criteria   = stopcriteria;
+Diagnostics.num_steps       = step;
+
+dbprint(1, '\t%s after %d steps.\n', stopcriteria, step);
+end
+
+function alpha = mlr_dual(C, RHO, H, Q, Delta, Gamma, alpha)
+
+global PsiClock;
+
+m = length(Delta);
+
+if nargin < 7
+    alpha = zeros(m,1);
+end
+
+%%%
+% 1) construct the QP parameters
+%
+b = RHO * (Gamma - Delta) - Q;
+
+%%%
+% 2) solve the QP
+%
+alpha = qplcprog(H, b, ones(1, m), C, [], [], 0, []);
+
+%%%
+% 3) update the Psi clock
+%
+PsiClock(alpha > 0)  = 0;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/distance_learning/mlr/util/soft_classify.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,99 @@
+function Ypredict = soft_classify(W, test_k, Xtrain, Ytrain, Xtest, Testnorm)
+% Ypredict = soft_classify(W, test_k, Xtrain, Ytrain, Xtest, Testnorm)
+%
+%       W       = d-by-d positive semi-definite matrix
+%       test_k  = k-value to use for KNN
+%       Xtrain  = d-by-n matrix of training data
+%       Ytrain  = n-by-1 vector of training labels
+%       Xtest   = d-by-m matrix of testing data
+%       Testnorm= m-by-#kernels vector of k(i,i) for each i in test
+%
+
+    addpath('cuttingPlane', 'distance', 'feasible', 'initialize', 'loss', ...
+            'metricPsi', 'regularize', 'separationOracle', 'util');
+
+    [d, nTrain, nKernel] = size(Xtrain);
+    nTest       = size(Xtest, 2);
+    test_k      = min(test_k, nTrain);
+
+    if nargin < 7
+        Testnorm = [];
+    end
+
+    % Build the distance matrix
+    [D, I] = mlr_test_distance(W, Xtrain, Xtest, Testnorm);
+
+    % Compute label agreement
+    Ypredict  = histc(Ytrain(I(1:test_k,:)), unique(Ytrain)');
+
+end
+
+
+function [D,I] = mlr_test_distance(W, Xtrain, Xtest, Testnorm)
+
+    % CASES:
+    %   Raw:                        W = []
+    
+    %   Linear, full:               W = d-by-d
+    %   Single Kernel, full:        W = n-by-n
+    %   MKL, full:                  W = n-by-n-by-m
+
+    %   Linear, diagonal:           W = d-by-1
+    %   Single Kernel, diagonal:    W = n-by-1
+    %   MKL, diag:                  W = n-by-m
+    %   MKL, diag-off-diag:         W = m-by-m-by-n
+    
+    [d, nTrain, nKernel] = size(Xtrain);
+    nTest = size(Xtest, 2);
+
+    if isempty(W)
+        % W = []  => native euclidean distances
+        D = mlr_test_distance_raw(Xtrain, Xtest, Testnorm);
+
+    elseif size(W,1) == d && size(W,2) == d
+        % We're in a full-projection case
+        D = setDistanceFullMKL([Xtrain Xtest], W, nTrain + (1:nTest), 1:nTrain);
+
+    elseif size(W,1) == d && size(W,2) == nKernel
+        % We're in a simple diagonal case
+        D = setDistanceDiagMKL([Xtrain Xtest], W, nTrain + (1:nTest), 1:nTrain);
+
+    elseif size(W,1) == nKernel && size(W,2) == nKernel && size(W,3) == nTrain
+        % We're in DOD mode
+        D = setDistanceDODMKL([Xtrain Xtest], W, nTrain + (1:nTest), 1:nTrain);
+
+    else
+        % Error?
+        error('Cannot determine metric mode.');
+
+    end
+    
+    D       = full(D(1:nTrain, nTrain + (1:nTest)));
+    [v,I]   = sort(D, 1);
+end
+
+
+
+function D = mlr_test_distance_raw(Xtrain, Xtest, Testnorm)
+
+    [d, nTrain, nKernel] = size(Xtrain);
+    nTest = size(Xtest, 2);
+
+    if isempty(Testnorm)
+        % Not in kernel mode, compute distances directly
+        D = 0;
+        for i = 1:nKernel
+            D = D + setDistanceDiag([Xtrain(:,:,i) Xtest(:,:,i)], ones(d,1), ...
+                                    nTrain + (1:nTest), 1:nTrain);
+        end
+    else
+        % We are in kernel mode
+        D = sparse(nTrain + nTest, nTrain + nTest);
+        for i = 1:nKernel
+            Trainnorm = diag(Xtrain(:,:,i));
+            D(1:nTrain, nTrain + (1:nTest)) = D(1:nTrain, nTrain + (1:nTest)) ...
+                +  bsxfun(@plus, Trainnorm, bsxfun(@plus, Testnorm(:,i)', -2 * Xtest(:,:,i)));
+        end
+    end
+end
+
Binary file toolboxes/graph_visualisation/bin/GVUI.exe has changed
Binary file toolboxes/graph_visualisation/bin/GdiPlus.dll has changed
Binary file toolboxes/graph_visualisation/bin/Gvedit.exe has changed
Binary file toolboxes/graph_visualisation/bin/Pathplan.dll has changed
Binary file toolboxes/graph_visualisation/bin/acyclic.exe has changed
Binary file toolboxes/graph_visualisation/bin/bcomps.exe has changed
Binary file toolboxes/graph_visualisation/bin/ccomps.exe has changed
Binary file toolboxes/graph_visualisation/bin/cdt.dll has changed
Binary file toolboxes/graph_visualisation/bin/cgraph.dll has changed
Binary file toolboxes/graph_visualisation/bin/circo.exe has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/bin/config6	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,255 @@
+# This file was generated by "dot -c" at time of install.
+
+# You may temporarily disable a plugin by removing or commenting out
+# a line in this file, or you can modify its "quality" value to affect
+# default plugin selection.
+
+# Manual edits to this file **will be lost** on upgrade.
+
+gvplugin_core.dll core {
+	device {
+		dot:dot 1
+		gv:dot 1
+		canon:dot 1
+		plain:dot 1
+		plain-ext:dot 1
+		xdot:xdot 1
+	}
+	device {
+		fig:fig 1
+	}
+	device {
+		ismap:map 1
+		cmap:map 1
+		imap:map 1
+		cmapx:map 1
+		imap_np:map 1
+		cmapx_np:map 1
+	}
+	device {
+		ps:ps 1
+		ps2:ps 1
+		eps:ps 1
+	}
+	device {
+		svg:svg 1
+		svgz:svg 1
+	}
+	device {
+		tk:tk 1
+	}
+	device {
+		vml:vml 1
+		vmlz:vml 1
+	}
+	render {
+		dot 1
+		xdot 1
+	}
+	render {
+		fig 1
+	}
+	render {
+		map 1
+	}
+	render {
+		ps 1
+	}
+	render {
+		svg 1
+	}
+	render {
+		tk 1
+	}
+	render {
+		vml 1
+	}
+	loadimage {
+		png:svg 1
+		gif:svg 1
+		jpeg:svg 1
+		jpe:svg 1
+		jpg:svg 1
+		png:fig 1
+		gif:fig 1
+		jpeg:fig 1
+		jpe:fig 1
+		jpg:fig 1
+		png:vrml 1
+		gif:vrml 1
+		jpeg:vrml 1
+		jpe:vrml 1
+		jpg:vrml 1
+		eps:ps 1
+#FAILS		eps:lasi 1
+		ps:ps 1
+#FAILS		ps:lasi 1
+		(lib):ps 1
+		png:map 1
+		gif:map 1
+		jpeg:map 1
+		jpe:map 1
+		jpg:map 1
+		ps:map 1
+		eps:map 1
+		svg:map 1
+		png:dot 1
+		gif:dot 1
+		jpeg:dot 1
+		jpe:dot 1
+		jpg:dot 1
+		ps:dot 1
+		eps:dot 1
+		svg:dot 1
+		png:xdot 1
+		gif:xdot 1
+		jpeg:xdot 1
+		jpe:xdot 1
+		jpg:xdot 1
+		ps:xdot 1
+		eps:xdot 1
+		svg:xdot 1
+		svg:svg 1
+	}
+}
+gvplugin_dot_layout.dll dot_layout {
+	layout {
+		dot 0
+	}
+}
+gvplugin_gd.dll gd {
+	render {
+		gd 1
+	}
+	render {
+		vrml 1
+	}
+	textlayout {
+		textlayout 2
+	}
+	loadimage {
+		gd:gd 1
+		gd2:gd 1
+		gif:gd 1
+		jpeg:gd 1
+		jpe:gd 1
+		jpg:gd 1
+		png:gd 1
+		gd:ps 1
+#FAILS		gd:lasi 1
+		gd2:ps 1
+#FAILS		gd2:lasi 1
+		gif:ps 1
+#FAILS		gif:lasi 1
+		jpeg:ps 1
+		jpg:ps 1
+		jpe:ps 1
+#FAILS		jpeg:lasi 1
+#FAILS		jpg:lasi 1
+#FAILS		jpe:lasi 1
+		png:ps 1
+#FAILS		png:lasi 1
+		gd:cairo 1
+		gd2:cairo 1
+		gif:cairo 1
+		jpeg:cairo 1
+		jpg:cairo 1
+		jpe:cairo 1
+		png:cairo -1
+	}
+	device {
+		gif:cairo 10
+		wbmp:cairo 5
+		jpe:cairo 5
+		jpeg:cairo 5
+		jpg:cairo 5
+		png:cairo 5
+		gd:cairo 5
+		gd2:cairo 5
+	}
+	device {
+		gif:gd 1
+		wbmp:gd 1
+		jpe:gd 1
+		jpeg:gd 1
+		jpg:gd 1
+		png:gd 1
+		gd:gd 1
+		gd2:gd 1
+	}
+	device {
+		vrml:vrml 1
+	}
+}
+gvplugin_gdiplus.dll gdiplus {
+	render {
+		gdiplus 1
+	}
+	textlayout {
+		textlayout 8
+	}
+	loadimage {
+		bmp:gdiplus 8
+		gif:gdiplus 8
+		jpe:gdiplus 8
+		jpeg:gdiplus 8
+		jpg:gdiplus 8
+		png:gdiplus 8
+	}
+	device {
+		metafile:gdiplus 8
+		bmp:gdiplus 8
+		emf:gdiplus 8
+		emfplus:gdiplus 8
+		gif:gdiplus 8
+		jpe:gdiplus 8
+		jpeg:gdiplus 8
+		jpg:gdiplus 8
+		png:gdiplus 8
+		tif:gdiplus 8
+		tiff:gdiplus 8
+	}
+	device {
+		bmp:cairo 8
+		gif:cairo 8
+		jpe:cairo 8
+		jpeg:cairo 8
+		jpg:cairo 8
+		png:cairo 8
+		tif:cairo 8
+		tiff:cairo 8
+	}
+}
+gvplugin_neato_layout.dll neato_layout {
+	layout {
+		neato 0
+		fdp 0
+		sfdp 0
+		twopi 0
+		circo 0
+		patchwork 0
+		osage 0
+		nop 0
+		nop1 0
+		nop2 0
+	}
+}
+gvplugin_pango.dll cairo {
+	render {
+		cairo 10
+	}
+	textlayout {
+		textlayout 10
+	}
+	loadimage {
+		png:cairo 1
+#FAILS		png:lasi 2
+		png:ps 2
+	}
+	device {
+		png:cairo 10
+		ps:cairo -10
+		pdf:cairo 10
+		svg:cairo -10
+	}
+}
Binary file toolboxes/graph_visualisation/bin/diffimg.exe has changed
Binary file toolboxes/graph_visualisation/bin/dijkstra.exe has changed
Binary file toolboxes/graph_visualisation/bin/dot.exe has changed
Binary file toolboxes/graph_visualisation/bin/dotty.exe has changed
Binary file toolboxes/graph_visualisation/bin/fc-cache.exe has changed
Binary file toolboxes/graph_visualisation/bin/fc-cat.exe has changed
Binary file toolboxes/graph_visualisation/bin/fc-list.exe has changed
Binary file toolboxes/graph_visualisation/bin/fc-match.exe has changed
Binary file toolboxes/graph_visualisation/bin/fdp.exe has changed
Binary file toolboxes/graph_visualisation/bin/gc.exe has changed
Binary file toolboxes/graph_visualisation/bin/glut32.dll has changed
Binary file toolboxes/graph_visualisation/bin/graph.dll has changed
Binary file toolboxes/graph_visualisation/bin/gvc.dll has changed
Binary file toolboxes/graph_visualisation/bin/gvcolor.exe has changed
Binary file toolboxes/graph_visualisation/bin/gvgen.exe has changed
Binary file toolboxes/graph_visualisation/bin/gvpack.exe has changed
Binary file toolboxes/graph_visualisation/bin/gvplugin_core.dll has changed
Binary file toolboxes/graph_visualisation/bin/gvplugin_dot_layout.dll has changed
Binary file toolboxes/graph_visualisation/bin/gvplugin_gd.dll has changed
Binary file toolboxes/graph_visualisation/bin/gvplugin_gdiplus.dll has changed
Binary file toolboxes/graph_visualisation/bin/gvplugin_neato_layout.dll has changed
Binary file toolboxes/graph_visualisation/bin/gvplugin_pango.dll has changed
Binary file toolboxes/graph_visualisation/bin/gvpr.exe has changed
Binary file toolboxes/graph_visualisation/bin/gxl2gv.exe has changed
Binary file toolboxes/graph_visualisation/bin/iconv.dll has changed
Binary file toolboxes/graph_visualisation/bin/intl.dll has changed
Binary file toolboxes/graph_visualisation/bin/jpeg62.dll has changed
Binary file toolboxes/graph_visualisation/bin/lefty.exe has changed
Binary file toolboxes/graph_visualisation/bin/libatk-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libcairo-2.dll has changed
Binary file toolboxes/graph_visualisation/bin/libexpat.dll has changed
Binary file toolboxes/graph_visualisation/bin/libfontconfig-1.dll has changed
Binary file toolboxes/graph_visualisation/bin/libfreetype-6.dll has changed
Binary file toolboxes/graph_visualisation/bin/libgdk-win32-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libgdk_pixbuf-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libgdkglext-win32-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libglade-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libglib-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libgmodule-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libgobject-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libgtk-win32-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libgtkglext-win32-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libltdl-3.dll has changed
Binary file toolboxes/graph_visualisation/bin/libpango-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libpangocairo-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libpangoft2-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libpangowin32-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/bin/libpng12.dll has changed
Binary file toolboxes/graph_visualisation/bin/libxml2.dll has changed
Binary file toolboxes/graph_visualisation/bin/lneato.exe has changed
Binary file toolboxes/graph_visualisation/bin/ltdl.dll has changed
Binary file toolboxes/graph_visualisation/bin/mm2gv.exe has changed
Binary file toolboxes/graph_visualisation/bin/neato.exe has changed
Binary file toolboxes/graph_visualisation/bin/nop.exe has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/bin/props.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+"Damping", "0.99", GRAPH, NEATO
+"Epsilon", "", GRAPH, NEATO
+"URL", "", ANY_ELEMENT, ALL_ENGINES
+"arrowhead", "normal", EDGE, ALL_ENGINES
+"arrowsize", "1.0", EDGE, ALL_ENGINES
+"arrowtail", "normal", EDGE, ALL_ENGINES
+"bb", "", GRAPH, ALL_ENGINES
+"bgcolor", "", GRAPH Or CLUSTER, ALL_ENGINES
+"bottomlabel", "", NODE, ALL_ENGINES
+"center", "false", GRAPH, ALL_ENGINES
+"clusterrank", "local", GRAPH, DOT
+"color", "black", EDGE Or NODE Or CLUSTER, ALL_ENGINES
+"comment", "", EDGE Or NODE Or GRAPH, ALL_ENGINES
+"compound", "false", GRAPH, DOT
+"concentrate", "false", GRAPH, DOT
+"constraint", "true", EDGE, DOT
+"decorate", "false", EDGE, ALL_ENGINES
+"dir", "forward", EDGE, ALL_ENGINES
+"distortion", "0.0", NODE, ALL_ENGINES
+"fillcolor", "lightgrey", NODE Or CLUSTER, ALL_ENGINES
+"fixedsize", "false", NODE, ALL_ENGINES
+"fontcolor", "black", EDGE Or NODE Or GRAPH Or CLUSTER, ALL_ENGINES
+"fontname", "Times-Roman", EDGE Or NODE Or GRAPH Or CLUSTER, ALL_ENGINES
+"fontpath", "", GRAPH, ALL_ENGINES
+"fontsize", "14.0", EDGE Or NODE Or GRAPH Or CLUSTER, ALL_ENGINES
+"group", "", NODE, DOT
+"headURL", "", EDGE, ALL_ENGINES
+"headlabel", "", EDGE, ALL_ENGINES
+"headport", "center", EDGE, ALL_ENGINES
+"height", "0.5", NODE, ALL_ENGINES
+"label", "", EDGE Or NODE Or GRAPH Or CLUSTER, ALL_ENGINES
+"labelangle", "-25.0", EDGE, ALL_ENGINES
+"labeldistance", "1.0", EDGE, ALL_ENGINES
+"labelfloat", "false", EDGE, ALL_ENGINES
+"labelfontcolor", "black", EDGE, ALL_ENGINES
+"labelfontname", "Times-Roman", EDGE, ALL_ENGINES
+"labelfontsize", "11.0", EDGE, ALL_ENGINES
+"labeljust", "", ANY_ELEMENT, DOT
+"labelloc", "t", GRAPH Or CLUSTER, DOT
+"layer", "", EDGE Or NODE, ALL_ENGINES
+"layers", "", GRAPH, ALL_ENGINES
+"len", "1.0", EDGE, NEATO
+"lhead", "", EDGE, DOT
+"lp", "", EDGE Or GRAPH Or CLUSTER, ALL_ENGINES
+"ltail", "", EDGE, DOT
+"margin", "", GRAPH, ALL_ENGINES
+"maxiter", "", GRAPH, NEATO
+"mclimit", "1.0", GRAPH, DOT
+"minlen", "1", EDGE, DOT
+"model", "", GRAPH, NEATO
+"nodesep", "0.25", GRAPH, DOT
+"normalize", "false", GRAPH, NEATO
+"nslimit", "", GRAPH, DOT
+"ordering", "", GRAPH, DOT
+"orientation", "0.0", NODE, ALL_ENGINES
+"orientation", "", GRAPH, ALL_ENGINES
+"overlap", "", GRAPH, NEATO
+"pack", "false", GRAPH, NEATO
+"page", "", GRAPH, ALL_ENGINES
+"pagedir", "", GRAPH, ALL_ENGINES
+"pencolor", "black", CLUSTER, ALL_ENGINES
+"peripheries", "0", NODE, ALL_ENGINES
+"pin", "false", NODE, NEATO
+"pos", "", EDGE Or NODE, ALL_ENGINES
+"quantum", "0.0", GRAPH, ALL_ENGINES
+"rank", "", SUBGRAPH, DOT
+"rankdir", "", GRAPH, DOT
+"ranksep", "", GRAPH, ALL_ENGINES
+"ratio", "", GRAPH, ALL_ENGINES
+"rects", "", NODE, ALL_ENGINES
+"regular", "false", NODE, ALL_ENGINES
+"remincross", "false", GRAPH, DOT
+"rotate", "0", GRAPH, ALL_ENGINES
+"samehead", "", EDGE, DOT
+"sametail", "", EDGE, DOT
+"samplepoints", "8", GRAPH, ALL_ENGINES
+"searchsize", "30", GRAPH, DOT
+"sep", "0.01", GRAPH, NEATO
+"shape", "ellipse", NODE, ALL_ENGINES
+"shapefile", "", NODE, ALL_ENGINES
+"showboxes", "0", EDGE Or NODE Or GRAPH, DOT
+"sides", "4", NODE, ALL_ENGINES
+"size", "", GRAPH, ALL_ENGINES
+"skew", "0.0", NODE, ALL_ENGINES
+"splines", "false", GRAPH, NEATO
+"start", "", GRAPH, ALL_ENGINES
+"style", "", EDGE Or NODE, ALL_ENGINES
+"stylesheet", "", GRAPH, ALL_ENGINES
+"tailURL", "", EDGE, ALL_ENGINES
+"taillabel", "", EDGE, ALL_ENGINES
+"tailport", "center", EDGE, ALL_ENGINES
+"toplabel", "", NODE, ALL_ENGINES
+"vertices", "", NODE, ALL_ENGINES
+"voro_margin", "0.05", GRAPH, NEATO
+"weight", "", EDGE, DOT Or NEATO
+"width", "0.75", NODE, ALL_ENGINES
+"z", "0.0", NODE, ALL_ENGINES
Binary file toolboxes/graph_visualisation/bin/prune.exe has changed
Binary file toolboxes/graph_visualisation/bin/regex_win32.dll has changed
Binary file toolboxes/graph_visualisation/bin/sccmap.exe has changed
Binary file toolboxes/graph_visualisation/bin/sfdp.exe has changed
Binary file toolboxes/graph_visualisation/bin/smyrna.exe has changed
Binary file toolboxes/graph_visualisation/bin/tred.exe has changed
Binary file toolboxes/graph_visualisation/bin/twopi.exe has changed
Binary file toolboxes/graph_visualisation/bin/unflatten.exe has changed
Binary file toolboxes/graph_visualisation/bin/vmalloc.dll has changed
Binary file toolboxes/graph_visualisation/bin/zlib1.dll has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/10-autohint.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- debian/autohint.conf -->
+<fontconfig>
+<!--  Use the Autohinter --> 
+  <match target="font">
+    <edit name="autohint" mode="assign"><bool>true</bool></edit>
+  </match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/10-no-sub-pixel.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--  Enable sub-pixel rendering --> 
+  <match target="font">
+    <edit name="rgba" mode="assign"><const>none</const></edit>
+  </match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/10-sub-pixel-bgr.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--  Enable sub-pixel rendering --> 
+  <match target="font">
+    <edit name="rgba" mode="assign"><const>bgr</const></edit>
+  </match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/10-sub-pixel-rgb.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--  Enable sub-pixel rendering --> 
+  <match target="font">
+    <edit name="rgba" mode="assign"><const>rgb</const></edit>
+  </match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/10-sub-pixel-vbgr.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--  Enable sub-pixel rendering --> 
+  <match target="font">
+    <edit name="rgba" mode="assign"><const>vbgr</const></edit>
+  </match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/10-sub-pixel-vrgb.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--  Enable sub-pixel rendering --> 
+  <match target="font">
+    <edit name="rgba" mode="assign"><const>vrgb</const></edit>
+  </match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/10-unhinted.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- debian/unhinted.conf -->
+<fontconfig>
+<!--  Disable hinting --> 
+  <match target="font">
+    <edit name="hinting" mode="assign"><bool>false</bool></edit>
+  </match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/20-fix-globaladvance.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+  Some Asian fonts misadvertise themselves as monospaced when
+  in fact they are dual-spaced (half and full).  This makes
+  FreeType very confused as it forces all widths to match.
+  Undo this magic by disabling the width forcing code -->
+	<match target="font">
+		<test name="family"><string>GulimChe</string></test>
+		<edit name="globaladvance"><bool>false</bool></edit>
+	</match>
+
+	<match target="font">
+		<test name="family"><string>DotumChe</string></test>
+		<edit name="globaladvance"><bool>false</bool></edit>
+	</match>
+
+	<match target="font">
+		<test name="family"><string>BatangChe</string></test>
+		<edit name="globaladvance"><bool>false</bool></edit>
+	</match>
+
+	<match target="font">
+		<test name="family"><string>GungsuhChe</string></test>
+		<edit name="globaladvance"><bool>false</bool></edit>
+	</match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/20-lohit-gujarati.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+
+<!-- Available Gujarti fonts look much better without hinting -->
+
+	<match target="font">
+		<test name="family"><string>Lohit Gujarati</string></test>
+		<edit name="hinting"><bool>false</bool></edit>
+	</match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/20-unhint-small-vera.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!-- 
+	The Bitstream Vera fonts have GASP entries suggesting that hinting be
+	disabled below 8 ppem, but FreeType ignores those, preferring to use
+	the data found in the instructed hints.  The initial Vera release
+	didn't include the right instructions in the 'prep' table. Fix this
+	by disabling hinting manually at smaller sizes (< 8ppem)
+ -->
+
+	<match target="font">
+		<test name="family">
+			<string>Bitstream Vera Sans</string>
+		</test>
+		<test name="pixelsize" compare="less">
+			<double>7.5</double>
+		</test>
+		<edit name="hinting">
+			<bool>false</bool>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Bitstream Vera Serif</string>
+		</test>
+		<test name="pixelsize" compare="less">
+			<double>7.5</double>
+		</test>
+		<edit name="hinting">
+			<bool>false</bool>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Bitstream Vera Sans Mono</string>
+		</test>
+		<test name="pixelsize" compare="less">
+			<double>7.5</double>
+		</test>
+		<edit name="hinting">
+			<bool>false</bool>
+		</edit>
+	</match>
+
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/30-amt-aliases.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+ AMT provides metric and shape compatible fonts for these three web font
+ families.
+ -->
+ 	<alias>
+		<family>Times New Roman</family>
+		<accept><family>Thorndale AMT</family></accept>
+	</alias>
+ 	<alias>
+		<family>Arial</family>
+		<accept><family>Albany AMT</family></accept>
+	</alias>
+ 	<alias>
+		<family>Courier New</family>
+		<accept><family>Cumberland AMT</family></accept>
+	</alias>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/30-urw-aliases.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+  URW provides metric and shape compatible fonts for these 10 Adobe families.
+  -->
+        <alias>
+          <family>Avant Garde</family>
+          <accept><family>URW Gothic L</family></accept>
+        </alias>
+        <alias>
+          <family>Bookman</family>
+          <accept><family>URW Bookman L</family></accept>
+        </alias>
+        <alias>
+	  <family>Courier</family>
+	  <accept><family>Nimbus Mono L</family></accept>
+	</alias>
+        <alias>
+	  <family>Helvetica</family>
+	  <accept><family>Nimbus Sans L</family></accept>
+	</alias>
+        <alias>
+          <family>New Century Schoolbook</family>
+          <accept><family>Century Schoolbook L</family></accept>
+        </alias>
+        <alias>
+          <family>Palatino</family>
+          <accept><family>URW Palladio L</family></accept>
+        </alias>
+        <alias>
+	  <family>Times</family>
+	  <accept><family>Nimbus Roman No9 L</family></accept>
+	</alias>
+        <alias>
+	  <family>Zapf Chancery</family>
+	  <accept><family>URW Chancery L</family></accept>
+	</alias>
+        <alias>
+	  <family>Zapf Dingbats</family>
+	  <accept><family>Dingbats</family></accept>
+	</alias>
+	<match target="pattern">
+	  <test name="family">
+	    <string>Symbol</string>
+	  </test>
+	  <edit name="family" mode="append" binding="same">
+	    <string>Standard Symbols L</string>
+	  </edit>
+	</match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/40-generic.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+  Mark common families with their generics so we'll get
+  something reasonable
+-->
+
+<!--
+  Serif faces
+ -->
+	<alias>
+		<family>Bitstream Vera Serif</family>
+		<family>DejaVu Serif</family>
+		<family>Times New Roman</family>
+		<family>Times</family>
+		<family>Nimbus Roman No9 L</family>
+		<family>Luxi Serif</family>
+		<family>Kochi Mincho</family>
+		<family>AR PL SungtiL GB</family>
+		<family>AR PL Mingti2L Big5</family>
+		<family>ï¼­ï¼³ 明æœ</family>
+		<family>Baekmuk Batang</family>
+		<family>FreeSerif</family>
+		<family>MgOpen Canonica</family>
+		<default><family>serif</family></default>
+	</alias>
+<!--
+  Sans-serif faces
+ -->
+	<alias>
+		<family>Bitstream Vera Sans</family>
+		<family>DejaVu Sans</family>
+		<family>Helvetica</family>
+		<family>Arial</family>
+		<family>Verdana</family>
+		<family>Albany AMT</family>
+		<family>Nimbus Sans L</family>
+		<family>Luxi Sans</family>
+		<family>Kochi Gothic</family>
+		<family>AR PL KaitiM GB</family>
+		<family>AR PL KaitiM Big5</family>
+		<family>MS ゴシック</family>
+		<family>Baekmuk Dotum</family>
+		<family>SimSun</family>
+		<family>FreeSans</family>
+		<family>MgOpen Modata</family>
+		<default><family>sans-serif</family></default>
+	</alias>
+<!--
+  Monospace faces
+ -->
+ 	<alias>
+		<family>Bitstream Vera Sans Mono</family>
+		<family>DejaVu Sans Mono</family>
+		<family>Courier</family>
+		<family>Courier New</family>
+		<family>Andale Mono</family>
+		<family>Luxi Mono</family>
+		<family>Cumberland AMT</family>
+		<family>Nimbus Mono L</family>
+		<family>NSimSun</family>
+		<family>FreeMono</family>
+		<default><family>monospace</family></default>
+	</alias>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/49-sansserif.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+  If the font still has no generic name, add sans-serif
+ -->
+	<match target="pattern">
+		<test qual="all" name="family" compare="not_eq">
+			<string>sans-serif</string>
+		</test>
+		<test qual="all" name="family" compare="not_eq">
+			<string>serif</string>
+		</test>
+		<test qual="all" name="family" compare="not_eq">
+			<string>monospace</string>
+		</test>
+		<edit name="family" mode="append_last">
+			<string>sans-serif</string>
+		</edit>
+	</match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/50-user.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.avail/50-user.conf file to configure system font access -->
+<fontconfig>
+	<!-- Load per-user customization file -->
+	<include ignore_missing="yes">~/.fonts.conf</include>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/51-local.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.avail/51-local.conf file to configure system font access -->
+<fontconfig>
+	<!-- Load local system customization file -->
+	<include ignore_missing="yes">local.conf</include>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/60-latin.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+	<alias>
+		<family>serif</family>
+		<prefer>
+			<family>Bitstream Vera Serif</family>
+			<family>DejaVu Serif</family>
+			<family>Times New Roman</family>
+			<family>Thorndale AMT</family>
+			<family>Luxi Serif</family>
+			<family>Nimbus Roman No9 L</family>
+			<family>Times</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>sans-serif</family>
+		<prefer>
+			<family>Bitstream Vera Sans</family>
+			<family>DejaVu Sans</family>
+			<family>Verdana</family>
+			<family>Arial</family>
+			<family>Albany AMT</family>
+			<family>Luxi Sans</family>
+			<family>Nimbus Sans L</family>
+			<family>Helvetica</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>monospace</family>
+		<prefer>
+			<family>Bitstream Vera Sans Mono</family>
+			<family>DejaVu Sans Mono</family>
+			<family>Andale Mono</family>
+			<family>Courier New</family>
+			<family>Cumberland AMT</family>
+			<family>Luxi Mono</family>
+			<family>Nimbus Mono L</family>
+			<family>Courier</family>
+		</prefer>
+	</alias>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/65-fonts-persian.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,539 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.d/10-fonts-persian.conf -->
+<!--
+  fonts-persian.conf
+  To configure Persian fonts from The FarsiWeb Project.
+
+  Copyright (C) 2005  Sharif FarsiWeb, Inc. <license@farsiweb.info>
+
+  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 Sharif FarsiWeb, Inc. not be used in
+  advertising or publicity pertaining to distribution of the software without
+  specific, written prior permission.  Sharif FarsiWeb, Inc. makes no
+  representations about the suitability of this software for any purpose.  It
+  is provided "as is" without express or implied warranty.
+
+  SHARIF FARSIWEB, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+  EVENT SHALL KEITH PACKARD 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.
+
+  ChangeLog:
+    2005-04-03  Behdad Esfahbod:  Initial revision.
+    2005-10-09  Behdad Esfahbod:  Turned off back-slant and Tahoma sections.
+    2005-11-30  Behdad Esfahbod:  Set Titr susbtitution size to 24 points.
+
+  Todo:
+    Add generic font "fantasy".  Add some fonts into that category.
+    Maybe add a "cursive" generic font.
+  -->
+<fontconfig>
+
+
+<!--
+  We don't want weak bindings.  So got to use the syntactical expansion
+  of alias tag to do binding=same :(.  Please support that in alias.
+  -->
+
+
+<!-- Deprecated fonts are discouraged -->
+
+	<!-- Nesf[2] is officially deprecated and has problematic tables -->
+	<match>
+		<test name="family">
+			<string>Nesf</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Nesf2</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Nesf2</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Persian_sansserif_default</string>
+		</edit>
+	</match>
+
+	<!-- Tahoma looks awful (TURNED-OFF) -->
+	<!--match>
+		<test name="family">
+			<string>Tahoma</string>
+		</test>
+		<edit name="family" mode="prepend" binding="same">
+			<string>Persian_sansserif_default</string>
+		</edit>
+	</match-->
+
+<!-- Name changes and spelling variant aliases -->
+
+	<!-- Changed due to trademark problems -->
+	<match>
+		<test name="family">
+			<string>Nazanin</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Nazli</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Lotus</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Lotoos</string>
+		</edit>
+	</match>
+
+	<!-- Changed due to transcription orthography -->
+	<match>
+		<test name="family">
+			<string>Yaqut</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Yaghoot</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Yagut</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Yaghoot</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Yaghut</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Yaghoot</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Traffic</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Terafik</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Ferdowsi</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Ferdosi</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Fantezy</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Fantezi</string>
+		</edit>
+	</match>
+
+
+<!-- Classify fonts. -->
+
+	<!-- Persian_title class -->
+	<match>
+		<test name="family">
+			<string>Jadid</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_title</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Titr</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_title</string>
+		</edit>
+	</match>
+
+	<!-- Persian_fantasy class -->
+	<match>
+		<test name="family">
+			<string>Kamran</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Homa</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_fantasy</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Homa</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Kamran</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_fantasy</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Fantezi</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_fantasy</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Tabassom</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_fantasy</string>
+		</edit>
+	</match>
+
+	<!-- Persian_square class -->
+	<match>
+		<test name="family">
+			<string>Arshia</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Nasim</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Elham</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Farnaz</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Farnaz</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Elham</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Sina</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+	</match>
+
+<!-- Font ordering per class -->
+
+	<!-- Persian_title class -->
+	<match>
+		<test name="family">
+			<string>Persian_title</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_serif</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Jadid</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Titr</string>
+		</edit>
+	</match>
+
+	<!-- Persian_fantasy class -->
+	<match>
+		<test name="family">
+			<string>Persian_fantasy</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Tabassom</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Fantezi</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Kamran</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Homa</string>
+		</edit>
+	</match>
+
+	<!-- Persian_square class -->
+	<match>
+		<test name="family">
+			<string>Persian_square</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_serif</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Sina</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Nasim</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Farnaz</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Elham</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Arshia</string>
+		</edit>
+	</match>
+
+<!-- Register the fonts that we actually do have -->
+
+	<match target="font">
+		<test name="family">
+			<string>Elham</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Homa</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Koodak</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Nazli</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Roya</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Terafik</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Titr</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+
+<!-- Our fonts should oblique to the other side (TURNED-OFF) -->
+
+	<match target="font">
+		<test name="foundry">
+			<!--string>farsiweb</string-->
+			<string>TURNED-OFF</string>
+		</test>
+		<test name="foundry">
+			<string>farsiweb</string>
+		</test>
+		<!-- check to see if the font is roman -->
+		<test name="slant">
+			<const>roman</const>
+		</test>
+		<!-- check to see if the pattern requested non-roman -->
+		<test target="pattern" name="slant" compare="not_eq">
+			<const>roman</const>
+		</test>
+		<!-- multiply the matrix to slant the font -->
+		<edit name="matrix" mode="assign">
+			<times>
+				<name>matrix</name>
+				<matrix><double>1</double><double>-0.2</double>
+					<double>0</double><double>1</double>
+				</matrix>
+			</times>
+		</edit>
+		<!-- pretend the font is oblique now -->
+		<edit name="slant" mode="assign">
+			<const>oblique</const>
+		</edit>
+	</match>
+
+
+<!--
+  We can't hint our fonts well, so turn off hinting.
+  Moreover, the bitmaps we have designed (well, they
+  have designed), suck, so disable them too.
+  -->
+
+	<match target="font">
+		<test name="foundry">
+			<string>farsiweb</string>
+		</test>
+		<edit name="autohint">
+			<bool>false</bool>
+		</edit>
+		<edit name="hinting">
+			<bool>false</bool>
+		</edit>
+ 		<edit name="embeddedbitmap">
+ 			<bool>false</bool>
+ 		</edit>
+	</match>
+
+
+<!-- Alias our fonts to common families -->
+
+	<!-- Persian serif fonts -->
+	<alias>
+		<family>serif</family>
+		<accept>
+			<family>Nazli</family>
+			<family>Lotoos</family>
+			<family>Mitra</family>
+			<family>Ferdosi</family>
+			<family>Badr</family>
+			<family>Zar</family>
+		</accept>
+	</alias>
+
+	<!-- Persian sans-serif fonts -->
+	<alias>
+		<family>sans-serif</family>
+		<accept>
+			<family>Roya</family>
+			<family>Koodak</family>
+			<family>Terafik</family>
+		</accept>
+	</alias>
+
+	<!-- Persian monospace fonts -->
+	<alias>
+		<family>monospace</family>
+		<accept>
+			<!-- Not really monospace -->
+			<family>Terafik</family>
+		</accept>
+	</alias>
+
+
+<!-- Use Titr in titles -->
+
+	<!-- Both serif... -->
+	<match>
+		<test name="family">
+			<string>serif</string>
+		</test>
+		<test name="weight" compare="more_eq">
+			<int>200</int>
+		</test>
+		<test name="size" compare="more_eq">
+			<double>24</double>
+		</test>
+		<edit name="family" mode="prepend">
+			<string>Titr</string>
+		</edit>
+	</match>
+
+	<!-- and sans-serif. -->
+	<match>
+		<test name="family">
+			<string>sans-serif</string>
+		</test>
+		<test name="weight" compare="more_eq">
+			<int>200</int>
+		</test>
+		<test name="size" compare="more_eq">
+			<double>24</double>
+		</test>
+		<edit name="family" mode="prepend">
+			<string>Titr</string>
+		</edit>
+	</match>
+
+	<!-- and more. -->
+	<match>
+		<test name="family">
+			<string>Persian_sansserif_default</string>
+		</test>
+		<test name="weight" compare="more_eq">
+			<int>200</int>
+		</test>
+		<test name="size" compare="more_eq">
+			<double>24</double>
+		</test>
+		<edit name="family" mode="prepend" binding="same">
+			<string>Titr</string>
+		</edit>
+	</match>
+
+
+<!-- Default substituted for deprecated sans-serif fonts -->
+
+	<match>
+		<test name="family">
+			<string>Persian_sansserif_default</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Roya</string>
+		</edit>
+	</match>
+
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/65-nonlatin.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+	<alias>
+		<family>serif</family>
+		<prefer>
+			<family>Frank Ruehl</family>
+			<family>MgOpen Canonica</family>
+			<family>Kochi Mincho</family>
+			<family>AR PL SungtiL GB</family>
+			<family>AR PL Mingti2L Big5</family>
+			<family>ï¼­ï¼³ 明æœ</family>
+			<family>Baekmuk Batang</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>sans-serif</family>
+		<prefer>
+			<family>Nachlieli</family>
+			<family>MgOpen Modata</family>
+			<family>Kochi Gothic</family>
+			<family>AR PL KaitiM GB</family>
+			<family>AR PL KaitiM Big5</family>
+			<family>MS ゴシック</family>
+			<family>Baekmuk Dotum</family>
+			<family>SimSun</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>monospace</family>
+		<prefer>
+			<family>Miriam Mono</family>
+			<family>Kochi Gothic</family>
+			<family>AR PL KaitiM GB</family>
+			<family>Baekmuk Dotum</family>
+		</prefer>
+	</alias>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/69-unifont.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+	<alias>
+		<family>serif</family>
+		<prefer>
+			<family>FreeSerif</family>
+			<family>Code2000</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>sans-serif</family>
+		<prefer>
+			<family>FreeSans</family>
+			<family>Arial Unicode MS</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>monospace</family>
+		<prefer>
+			<family>FreeMono</family>
+		</prefer>
+	</alias>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/70-no-bitmaps.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.d/no-bitmaps.conf -->
+<fontconfig>
+<!-- Reject bitmap fonts -->
+ <selectfont>
+  <rejectfont>
+   <pattern>
+     <patelt name="scalable"><bool>false</bool></patelt>
+   </pattern>
+  </rejectfont>
+ </selectfont>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/70-yes-bitmaps.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/yes-bitmaps.conf -->
+<fontconfig>
+<!-- Accept bitmap fonts -->
+ <selectfont>
+  <acceptfont>
+   <pattern>
+     <patelt name="scalable"><bool>false</bool></patelt>
+   </pattern>
+  </acceptfont>
+ </selectfont>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/80-delicious.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.d/60-delicious.conf -->
+<fontconfig>
+<!-- Fix-ups for Delicious family -->
+
+<!-- Delicious 'heavy' variant says its Medium weight -->
+<match target="scan">
+	<test name="family">
+		<string>Delicious</string>
+	</test>
+	<test name="style">
+		<string>Heavy</string>
+	</test>
+	<edit name="weight">
+		<const>heavy</const>
+	</edit>
+</match>
+
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/90-synthetic.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- 
+ Artificial oblique for fonts without an italic or oblique version
+ -->
+ 
+	<match target="font">
+		<!-- check to see if the font is roman -->
+		<test name="slant">
+			<const>roman</const>
+		</test>
+		<!-- check to see if the pattern requested non-roman -->
+		<test target="pattern" name="slant" compare="not_eq">
+			<const>roman</const>
+		</test>
+		<!-- multiply the matrix to slant the font -->
+		<edit name="matrix" mode="assign">
+			<times>
+				<name>matrix</name>
+				<matrix><double>1</double><double>0.2</double>
+					<double>0</double><double>1</double>
+				</matrix>
+			</times>
+		</edit>
+		<!-- pretend the font is oblique now -->
+		<edit name="slant" mode="assign">
+			<const>oblique</const>
+		</edit>
+                <!-- and disable embedded bitmaps for artificial oblique -->
+                <edit name="embeddedbitmap" mode="assign">
+                        <bool>false</bool>
+                </edit>
+	</match>
+
+<!--
+ Synthetic emboldening for fonts that do not have bold face available
+ -->
+
+	<match target="font">
+		<!-- check to see if the font is just regular -->
+		<test name="weight" compare="less_eq">
+			<const>medium</const>
+		</test>
+		<!-- check to see if the pattern requests bold -->
+		<test target="pattern" name="weight" compare="more">
+			<const>medium</const>
+		</test>
+		<!--
+		  set the embolden flag
+		  needed for applications using cairo, e.g. gucharmap, gedit, ...
+		-->
+		<edit name="embolden" mode="assign">
+			<bool>true</bool>
+		</edit>
+		<!--
+		 set weight to bold
+		 needed for applications using Xft directly, e.g. Firefox, ...
+		-->
+		<edit name="weight" mode="assign">
+			<const>bold</const>
+		</edit>
+	</match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.avail/README	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+conf.d/README
+
+Each file in this directory is a fontconfig configuration file.  Fontconfig
+scans this directory, loading all files of the form [0-9][0-9]*. These files
+are normally installed in ../conf.avail and then symlinked here, allowing
+them to be easily installed and then enabled/disabled by adjusting the
+symlinks.
+
+The files are loaded in numeric order, the structure of the configuration
+has led to the following conventions in usage:
+
+ Files begining with:	Contain:
+ 
+ 00 through 09		Font directories
+ 10 through 19		system rendering defaults (AA, etc)
+	10-autohint.conf
+	10-no-sub-pixel.conf
+ 	10-sub-pixel-bgr.conf
+ 	10-sub-pixel-rgb.conf
+ 	10-sub-pixel-vbgr.conf
+ 	10-sub-pixel-vrgb.conf
+	10-unhinted.conf
+ 20 through 29		font rendering options
+ 	20-fix-globaladvance.conf
+	20-lohit-gujarati.conf
+	20-unhint-small-vera.conf
+ 30 through 39		family substitution
+ 	30-urw-aliases.conf
+	30-amt-aliases.conf
+ 40 through 49		generic identification, map family->generic
+ 	40-generic-id.conf
+	49-sansserif.conf
+ 50 through 59		alternate config file loading
+ 	50-user.conf	Load ~/.fonts.conf
+	51-local.conf	Load local.conf
+ 60 through 69		generic aliases
+ 	60-latin.conf
+	65-fonts-persian.conf
+	65-nonlatin.conf
+	69-unifont.conf
+ 70 through 79		select font (adjust which fonts are available)
+ 	70-no-bitmaps.conf
+	70-yes-bitmaps.conf
+ 80 through 89		match target="scan" (modify scanned patterns)
+ 	80-delicious.conf
+ 90 through 98		font synthesis
+ 	90-synthetic.conf
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/20-fix-globaladvance.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+  Some Asian fonts misadvertise themselves as monospaced when
+  in fact they are dual-spaced (half and full).  This makes
+  FreeType very confused as it forces all widths to match.
+  Undo this magic by disabling the width forcing code -->
+	<match target="font">
+		<test name="family"><string>GulimChe</string></test>
+		<edit name="globaladvance"><bool>false</bool></edit>
+	</match>
+
+	<match target="font">
+		<test name="family"><string>DotumChe</string></test>
+		<edit name="globaladvance"><bool>false</bool></edit>
+	</match>
+
+	<match target="font">
+		<test name="family"><string>BatangChe</string></test>
+		<edit name="globaladvance"><bool>false</bool></edit>
+	</match>
+
+	<match target="font">
+		<test name="family"><string>GungsuhChe</string></test>
+		<edit name="globaladvance"><bool>false</bool></edit>
+	</match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/20-lohit-gujarati.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+
+<!-- Available Gujarti fonts look much better without hinting -->
+
+	<match target="font">
+		<test name="family"><string>Lohit Gujarati</string></test>
+		<edit name="hinting"><bool>false</bool></edit>
+	</match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/20-unhint-small-vera.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!-- 
+	The Bitstream Vera fonts have GASP entries suggesting that hinting be
+	disabled below 8 ppem, but FreeType ignores those, preferring to use
+	the data found in the instructed hints.  The initial Vera release
+	didn't include the right instructions in the 'prep' table. Fix this
+	by disabling hinting manually at smaller sizes (< 8ppem)
+ -->
+
+	<match target="font">
+		<test name="family">
+			<string>Bitstream Vera Sans</string>
+		</test>
+		<test name="pixelsize" compare="less">
+			<double>7.5</double>
+		</test>
+		<edit name="hinting">
+			<bool>false</bool>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Bitstream Vera Serif</string>
+		</test>
+		<test name="pixelsize" compare="less">
+			<double>7.5</double>
+		</test>
+		<edit name="hinting">
+			<bool>false</bool>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Bitstream Vera Sans Mono</string>
+		</test>
+		<test name="pixelsize" compare="less">
+			<double>7.5</double>
+		</test>
+		<edit name="hinting">
+			<bool>false</bool>
+		</edit>
+	</match>
+
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/30-amt-aliases.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+ AMT provides metric and shape compatible fonts for these three web font
+ families.
+ -->
+ 	<alias>
+		<family>Times New Roman</family>
+		<accept><family>Thorndale AMT</family></accept>
+	</alias>
+ 	<alias>
+		<family>Arial</family>
+		<accept><family>Albany AMT</family></accept>
+	</alias>
+ 	<alias>
+		<family>Courier New</family>
+		<accept><family>Cumberland AMT</family></accept>
+	</alias>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/30-urw-aliases.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+<!--
+  URW provides metric and shape compatible fonts for these 10 Adobe families.
+  -->
+        <alias>
+          <family>Avant Garde</family>
+          <accept><family>URW Gothic L</family></accept>
+        </alias>
+        <alias>
+          <family>Bookman</family>
+          <accept><family>URW Bookman L</family></accept>
+        </alias>
+        <alias>
+	  <family>Courier</family>
+	  <accept><family>Nimbus Mono L</family></accept>
+	</alias>
+        <alias>
+	  <family>Helvetica</family>
+	  <accept><family>Nimbus Sans L</family></accept>
+	</alias>
+        <alias>
+          <family>New Century Schoolbook</family>
+          <accept><family>Century Schoolbook L</family></accept>
+        </alias>
+        <alias>
+          <family>Palatino</family>
+          <accept><family>URW Palladio L</family></accept>
+        </alias>
+        <alias>
+	  <family>Times</family>
+	  <accept><family>Nimbus Roman No9 L</family></accept>
+	</alias>
+        <alias>
+	  <family>Zapf Chancery</family>
+	  <accept><family>URW Chancery L</family></accept>
+	</alias>
+        <alias>
+	  <family>Zapf Dingbats</family>
+	  <accept><family>Dingbats</family></accept>
+	</alias>
+	<match target="pattern">
+	  <test name="family">
+	    <string>Symbol</string>
+	  </test>
+	  <edit name="family" mode="append" binding="same">
+	    <string>Standard Symbols L</string>
+	  </edit>
+	</match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/40-generic.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+  Mark common families with their generics so we'll get
+  something reasonable
+-->
+
+<!--
+  Serif faces
+ -->
+	<alias>
+		<family>Bitstream Vera Serif</family>
+		<family>DejaVu Serif</family>
+		<family>Times New Roman</family>
+		<family>Times</family>
+		<family>Nimbus Roman No9 L</family>
+		<family>Luxi Serif</family>
+		<family>Kochi Mincho</family>
+		<family>AR PL SungtiL GB</family>
+		<family>AR PL Mingti2L Big5</family>
+		<family>ï¼­ï¼³ 明æœ</family>
+		<family>Baekmuk Batang</family>
+		<family>FreeSerif</family>
+		<family>MgOpen Canonica</family>
+		<default><family>serif</family></default>
+	</alias>
+<!--
+  Sans-serif faces
+ -->
+	<alias>
+		<family>Bitstream Vera Sans</family>
+		<family>DejaVu Sans</family>
+		<family>Helvetica</family>
+		<family>Arial</family>
+		<family>Verdana</family>
+		<family>Albany AMT</family>
+		<family>Nimbus Sans L</family>
+		<family>Luxi Sans</family>
+		<family>Kochi Gothic</family>
+		<family>AR PL KaitiM GB</family>
+		<family>AR PL KaitiM Big5</family>
+		<family>MS ゴシック</family>
+		<family>Baekmuk Dotum</family>
+		<family>SimSun</family>
+		<family>FreeSans</family>
+		<family>MgOpen Modata</family>
+		<default><family>sans-serif</family></default>
+	</alias>
+<!--
+  Monospace faces
+ -->
+ 	<alias>
+		<family>Bitstream Vera Sans Mono</family>
+		<family>DejaVu Sans Mono</family>
+		<family>Courier</family>
+		<family>Courier New</family>
+		<family>Andale Mono</family>
+		<family>Luxi Mono</family>
+		<family>Cumberland AMT</family>
+		<family>Nimbus Mono L</family>
+		<family>NSimSun</family>
+		<family>FreeMono</family>
+		<default><family>monospace</family></default>
+	</alias>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/49-sansserif.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+  If the font still has no generic name, add sans-serif
+ -->
+	<match target="pattern">
+		<test qual="all" name="family" compare="not_eq">
+			<string>sans-serif</string>
+		</test>
+		<test qual="all" name="family" compare="not_eq">
+			<string>serif</string>
+		</test>
+		<test qual="all" name="family" compare="not_eq">
+			<string>monospace</string>
+		</test>
+		<edit name="family" mode="append_last">
+			<string>sans-serif</string>
+		</edit>
+	</match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/50-user.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.avail/50-user.conf file to configure system font access -->
+<fontconfig>
+	<!-- Load per-user customization file -->
+	<include ignore_missing="yes">~/.fonts.conf</include>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/51-local.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.avail/51-local.conf file to configure system font access -->
+<fontconfig>
+	<!-- Load local system customization file -->
+	<include ignore_missing="yes">local.conf</include>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/60-latin.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+	<alias>
+		<family>serif</family>
+		<prefer>
+			<family>Bitstream Vera Serif</family>
+			<family>DejaVu Serif</family>
+			<family>Times New Roman</family>
+			<family>Thorndale AMT</family>
+			<family>Luxi Serif</family>
+			<family>Nimbus Roman No9 L</family>
+			<family>Times</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>sans-serif</family>
+		<prefer>
+			<family>Bitstream Vera Sans</family>
+			<family>DejaVu Sans</family>
+			<family>Verdana</family>
+			<family>Arial</family>
+			<family>Albany AMT</family>
+			<family>Luxi Sans</family>
+			<family>Nimbus Sans L</family>
+			<family>Helvetica</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>monospace</family>
+		<prefer>
+			<family>Bitstream Vera Sans Mono</family>
+			<family>DejaVu Sans Mono</family>
+			<family>Andale Mono</family>
+			<family>Courier New</family>
+			<family>Cumberland AMT</family>
+			<family>Luxi Mono</family>
+			<family>Nimbus Mono L</family>
+			<family>Courier</family>
+		</prefer>
+	</alias>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/65-fonts-persian.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,539 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.d/10-fonts-persian.conf -->
+<!--
+  fonts-persian.conf
+  To configure Persian fonts from The FarsiWeb Project.
+
+  Copyright (C) 2005  Sharif FarsiWeb, Inc. <license@farsiweb.info>
+
+  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 Sharif FarsiWeb, Inc. not be used in
+  advertising or publicity pertaining to distribution of the software without
+  specific, written prior permission.  Sharif FarsiWeb, Inc. makes no
+  representations about the suitability of this software for any purpose.  It
+  is provided "as is" without express or implied warranty.
+
+  SHARIF FARSIWEB, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+  EVENT SHALL KEITH PACKARD 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.
+
+  ChangeLog:
+    2005-04-03  Behdad Esfahbod:  Initial revision.
+    2005-10-09  Behdad Esfahbod:  Turned off back-slant and Tahoma sections.
+    2005-11-30  Behdad Esfahbod:  Set Titr susbtitution size to 24 points.
+
+  Todo:
+    Add generic font "fantasy".  Add some fonts into that category.
+    Maybe add a "cursive" generic font.
+  -->
+<fontconfig>
+
+
+<!--
+  We don't want weak bindings.  So got to use the syntactical expansion
+  of alias tag to do binding=same :(.  Please support that in alias.
+  -->
+
+
+<!-- Deprecated fonts are discouraged -->
+
+	<!-- Nesf[2] is officially deprecated and has problematic tables -->
+	<match>
+		<test name="family">
+			<string>Nesf</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Nesf2</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Nesf2</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Persian_sansserif_default</string>
+		</edit>
+	</match>
+
+	<!-- Tahoma looks awful (TURNED-OFF) -->
+	<!--match>
+		<test name="family">
+			<string>Tahoma</string>
+		</test>
+		<edit name="family" mode="prepend" binding="same">
+			<string>Persian_sansserif_default</string>
+		</edit>
+	</match-->
+
+<!-- Name changes and spelling variant aliases -->
+
+	<!-- Changed due to trademark problems -->
+	<match>
+		<test name="family">
+			<string>Nazanin</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Nazli</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Lotus</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Lotoos</string>
+		</edit>
+	</match>
+
+	<!-- Changed due to transcription orthography -->
+	<match>
+		<test name="family">
+			<string>Yaqut</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Yaghoot</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Yagut</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Yaghoot</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Yaghut</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Yaghoot</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Traffic</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Terafik</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Ferdowsi</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Ferdosi</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Fantezy</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Fantezi</string>
+		</edit>
+	</match>
+
+
+<!-- Classify fonts. -->
+
+	<!-- Persian_title class -->
+	<match>
+		<test name="family">
+			<string>Jadid</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_title</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Titr</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_title</string>
+		</edit>
+	</match>
+
+	<!-- Persian_fantasy class -->
+	<match>
+		<test name="family">
+			<string>Kamran</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Homa</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_fantasy</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Homa</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Kamran</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_fantasy</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Fantezi</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_fantasy</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Tabassom</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_fantasy</string>
+		</edit>
+	</match>
+
+	<!-- Persian_square class -->
+	<match>
+		<test name="family">
+			<string>Arshia</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Nasim</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Elham</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Farnaz</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Farnaz</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Elham</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+	</match>
+	<match>
+		<test name="family">
+			<string>Sina</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+	</match>
+
+<!-- Font ordering per class -->
+
+	<!-- Persian_title class -->
+	<match>
+		<test name="family">
+			<string>Persian_title</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_serif</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Jadid</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Titr</string>
+		</edit>
+	</match>
+
+	<!-- Persian_fantasy class -->
+	<match>
+		<test name="family">
+			<string>Persian_fantasy</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_square</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Tabassom</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Fantezi</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Kamran</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Homa</string>
+		</edit>
+	</match>
+
+	<!-- Persian_square class -->
+	<match>
+		<test name="family">
+			<string>Persian_square</string>
+		</test>
+		<edit name="family" mode="append" binding="same">
+			<string>Persian_serif</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Sina</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Nasim</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Farnaz</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Elham</string>
+		</edit>
+		<edit name="family" mode="append" binding="same">
+			<string>Arshia</string>
+		</edit>
+	</match>
+
+<!-- Register the fonts that we actually do have -->
+
+	<match target="font">
+		<test name="family">
+			<string>Elham</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Homa</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Koodak</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Nazli</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Roya</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Terafik</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+	<match target="font">
+		<test name="family">
+			<string>Titr</string>
+		</test>
+		<edit name="foundry">
+			<string>farsiweb</string>
+		</edit>
+	</match>
+
+
+<!-- Our fonts should oblique to the other side (TURNED-OFF) -->
+
+	<match target="font">
+		<test name="foundry">
+			<!--string>farsiweb</string-->
+			<string>TURNED-OFF</string>
+		</test>
+		<test name="foundry">
+			<string>farsiweb</string>
+		</test>
+		<!-- check to see if the font is roman -->
+		<test name="slant">
+			<const>roman</const>
+		</test>
+		<!-- check to see if the pattern requested non-roman -->
+		<test target="pattern" name="slant" compare="not_eq">
+			<const>roman</const>
+		</test>
+		<!-- multiply the matrix to slant the font -->
+		<edit name="matrix" mode="assign">
+			<times>
+				<name>matrix</name>
+				<matrix><double>1</double><double>-0.2</double>
+					<double>0</double><double>1</double>
+				</matrix>
+			</times>
+		</edit>
+		<!-- pretend the font is oblique now -->
+		<edit name="slant" mode="assign">
+			<const>oblique</const>
+		</edit>
+	</match>
+
+
+<!--
+  We can't hint our fonts well, so turn off hinting.
+  Moreover, the bitmaps we have designed (well, they
+  have designed), suck, so disable them too.
+  -->
+
+	<match target="font">
+		<test name="foundry">
+			<string>farsiweb</string>
+		</test>
+		<edit name="autohint">
+			<bool>false</bool>
+		</edit>
+		<edit name="hinting">
+			<bool>false</bool>
+		</edit>
+ 		<edit name="embeddedbitmap">
+ 			<bool>false</bool>
+ 		</edit>
+	</match>
+
+
+<!-- Alias our fonts to common families -->
+
+	<!-- Persian serif fonts -->
+	<alias>
+		<family>serif</family>
+		<accept>
+			<family>Nazli</family>
+			<family>Lotoos</family>
+			<family>Mitra</family>
+			<family>Ferdosi</family>
+			<family>Badr</family>
+			<family>Zar</family>
+		</accept>
+	</alias>
+
+	<!-- Persian sans-serif fonts -->
+	<alias>
+		<family>sans-serif</family>
+		<accept>
+			<family>Roya</family>
+			<family>Koodak</family>
+			<family>Terafik</family>
+		</accept>
+	</alias>
+
+	<!-- Persian monospace fonts -->
+	<alias>
+		<family>monospace</family>
+		<accept>
+			<!-- Not really monospace -->
+			<family>Terafik</family>
+		</accept>
+	</alias>
+
+
+<!-- Use Titr in titles -->
+
+	<!-- Both serif... -->
+	<match>
+		<test name="family">
+			<string>serif</string>
+		</test>
+		<test name="weight" compare="more_eq">
+			<int>200</int>
+		</test>
+		<test name="size" compare="more_eq">
+			<double>24</double>
+		</test>
+		<edit name="family" mode="prepend">
+			<string>Titr</string>
+		</edit>
+	</match>
+
+	<!-- and sans-serif. -->
+	<match>
+		<test name="family">
+			<string>sans-serif</string>
+		</test>
+		<test name="weight" compare="more_eq">
+			<int>200</int>
+		</test>
+		<test name="size" compare="more_eq">
+			<double>24</double>
+		</test>
+		<edit name="family" mode="prepend">
+			<string>Titr</string>
+		</edit>
+	</match>
+
+	<!-- and more. -->
+	<match>
+		<test name="family">
+			<string>Persian_sansserif_default</string>
+		</test>
+		<test name="weight" compare="more_eq">
+			<int>200</int>
+		</test>
+		<test name="size" compare="more_eq">
+			<double>24</double>
+		</test>
+		<edit name="family" mode="prepend" binding="same">
+			<string>Titr</string>
+		</edit>
+	</match>
+
+
+<!-- Default substituted for deprecated sans-serif fonts -->
+
+	<match>
+		<test name="family">
+			<string>Persian_sansserif_default</string>
+		</test>
+		<edit name="family" mode="assign" binding="same">
+			<string>Roya</string>
+		</edit>
+	</match>
+
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/65-nonlatin.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+	<alias>
+		<family>serif</family>
+		<prefer>
+			<family>Frank Ruehl</family>
+			<family>MgOpen Canonica</family>
+			<family>Kochi Mincho</family>
+			<family>AR PL SungtiL GB</family>
+			<family>AR PL Mingti2L Big5</family>
+			<family>ï¼­ï¼³ 明æœ</family>
+			<family>Baekmuk Batang</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>sans-serif</family>
+		<prefer>
+			<family>Nachlieli</family>
+			<family>MgOpen Modata</family>
+			<family>Kochi Gothic</family>
+			<family>AR PL KaitiM GB</family>
+			<family>AR PL KaitiM Big5</family>
+			<family>MS ゴシック</family>
+			<family>Baekmuk Dotum</family>
+			<family>SimSun</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>monospace</family>
+		<prefer>
+			<family>Miriam Mono</family>
+			<family>Kochi Gothic</family>
+			<family>AR PL KaitiM GB</family>
+			<family>Baekmuk Dotum</family>
+		</prefer>
+	</alias>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/69-unifont.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+	<alias>
+		<family>serif</family>
+		<prefer>
+			<family>FreeSerif</family>
+			<family>Code2000</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>sans-serif</family>
+		<prefer>
+			<family>FreeSans</family>
+			<family>Arial Unicode MS</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>monospace</family>
+		<prefer>
+			<family>FreeMono</family>
+		</prefer>
+	</alias>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/80-delicious.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/conf.d/60-delicious.conf -->
+<fontconfig>
+<!-- Fix-ups for Delicious family -->
+
+<!-- Delicious 'heavy' variant says its Medium weight -->
+<match target="scan">
+	<test name="family">
+		<string>Delicious</string>
+	</test>
+	<test name="style">
+		<string>Heavy</string>
+	</test>
+	<edit name="weight">
+		<const>heavy</const>
+	</edit>
+</match>
+
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/conf.d/90-synthetic.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!-- 
+ Artificial oblique for fonts without an italic or oblique version
+ -->
+ 
+	<match target="font">
+		<!-- check to see if the font is roman -->
+		<test name="slant">
+			<const>roman</const>
+		</test>
+		<!-- check to see if the pattern requested non-roman -->
+		<test target="pattern" name="slant" compare="not_eq">
+			<const>roman</const>
+		</test>
+		<!-- multiply the matrix to slant the font -->
+		<edit name="matrix" mode="assign">
+			<times>
+				<name>matrix</name>
+				<matrix><double>1</double><double>0.2</double>
+					<double>0</double><double>1</double>
+				</matrix>
+			</times>
+		</edit>
+		<!-- pretend the font is oblique now -->
+		<edit name="slant" mode="assign">
+			<const>oblique</const>
+		</edit>
+                <!-- and disable embedded bitmaps for artificial oblique -->
+                <edit name="embeddedbitmap" mode="assign">
+                        <bool>false</bool>
+                </edit>
+	</match>
+
+<!--
+ Synthetic emboldening for fonts that do not have bold face available
+ -->
+
+	<match target="font">
+		<!-- check to see if the font is just regular -->
+		<test name="weight" compare="less_eq">
+			<const>medium</const>
+		</test>
+		<!-- check to see if the pattern requests bold -->
+		<test target="pattern" name="weight" compare="more">
+			<const>medium</const>
+		</test>
+		<!--
+		  set the embolden flag
+		  needed for applications using cairo, e.g. gucharmap, gedit, ...
+		-->
+		<edit name="embolden" mode="assign">
+			<bool>true</bool>
+		</edit>
+		<!--
+		 set weight to bold
+		 needed for applications using Xft directly, e.g. Firefox, ...
+		-->
+		<edit name="weight" mode="assign">
+			<const>bold</const>
+		</edit>
+	</match>
+</fontconfig>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/fonts.conf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,155 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/fonts.conf file to configure system font access -->
+<fontconfig>
+
+<!--
+	DO NOT EDIT THIS FILE.
+	IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.
+	LOCAL CHANGES BELONG IN 'local.conf'.
+
+	The intent of this standard configuration file is to be adequate for
+	most environments.  If you have a reasonably normal environment and
+	have found problems with this configuration, they are probably
+	things that others will also want fixed.  Please submit any
+	problems to the fontconfig bugzilla system located at fontconfig.org
+
+	Note that the normal 'make install' procedure for fontconfig is to
+	replace any existing fonts.conf file with the new version.  Place
+	any local customizations in local.conf which this file references.
+
+	Keith Packard
+-->
+
+
+<!-- Font directory list -->
+
+	<dir>C:\WINDOWS\Fonts</dir>
+    <dir>~/.fonts</dir>
+
+<!-- Font cache directory list-->
+
+ 	<cachedir>c:/windows</cachedir> 
+    <cachedir>~/.fontconfig</cachedir>
+
+
+<!--
+  Accept deprecated 'mono' alias, replacing it with 'monospace'
+-->
+	<match target="pattern">
+		<test qual="any" name="family">
+			<string>mono</string>
+		</test>
+		<edit name="family" mode="assign">
+			<string>monospace</string>
+		</edit>
+	</match>
+
+
+
+
+<!--
+  Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
+-->
+	<match target="pattern">
+		<test qual="any" name="family">
+			<string>sans serif</string>
+		</test>
+		<edit name="family" mode="assign">
+			<string>sans-serif</string>
+		</edit>
+	</match>
+
+
+<!--
+  Accept deprecated 'sans' alias, replacing it with 'sans-serif'
+-->
+	<match target="pattern">
+		<test qual="any" name="family">
+			<string>sans</string>
+		</test>
+		<edit name="family" mode="assign">
+			<string>sans-serif</string>
+		</edit>
+	</match>
+<!--
+  Load local system customization file
+-->
+	<include ignore_missing="yes">conf.d</include>
+
+	<config>
+<!--
+  These are the default Unicode chars that are expected to be blank
+  in fonts.  All other blank chars are assumed to be broken and
+  won't appear in the resulting charsets
+ -->
+		<blank>
+			<int>0x0020</int>	<!-- SPACE -->
+			<int>0x00A0</int>	<!-- NO-BREAK SPACE -->
+			<int>0x00AD</int>	<!-- SOFT HYPHEN -->
+			<int>0x034F</int>	<!-- COMBINING GRAPHEME JOINER -->
+			<int>0x0600</int>	<!-- ARABIC NUMBER SIGN -->
+			<int>0x0601</int>	<!-- ARABIC SIGN SANAH -->
+			<int>0x0602</int>	<!-- ARABIC FOOTNOTE MARKER -->
+			<int>0x0603</int>	<!-- ARABIC SIGN SAFHA -->
+			<int>0x06DD</int>	<!-- ARABIC END OF AYAH -->
+			<int>0x070F</int>	<!-- SYRIAC ABBREVIATION MARK -->
+			<int>0x115F</int>	<!-- HANGUL CHOSEONG FILLER -->
+			<int>0x1160</int>	<!-- HANGUL JUNGSEONG FILLER -->
+			<int>0x1680</int>	<!-- OGHAM SPACE MARK -->
+			<int>0x17B4</int>	<!-- KHMER VOWEL INHERENT AQ -->
+			<int>0x17B5</int>	<!-- KHMER VOWEL INHERENT AA -->
+			<int>0x180E</int>	<!-- MONGOLIAN VOWEL SEPARATOR -->
+			<int>0x2000</int>	<!-- EN QUAD -->
+			<int>0x2001</int>	<!-- EM QUAD -->
+			<int>0x2002</int>	<!-- EN SPACE -->
+			<int>0x2003</int>	<!-- EM SPACE -->
+			<int>0x2004</int>	<!-- THREE-PER-EM SPACE -->
+			<int>0x2005</int>	<!-- FOUR-PER-EM SPACE -->
+			<int>0x2006</int>	<!-- SIX-PER-EM SPACE -->
+			<int>0x2007</int>	<!-- FIGURE SPACE -->
+			<int>0x2008</int>	<!-- PUNCTUATION SPACE -->
+			<int>0x2009</int>	<!-- THIN SPACE -->
+			<int>0x200A</int>	<!-- HAIR SPACE -->
+			<int>0x200B</int>	<!-- ZERO WIDTH SPACE -->
+			<int>0x200C</int>	<!-- ZERO WIDTH NON-JOINER -->
+			<int>0x200D</int>	<!-- ZERO WIDTH JOINER -->
+			<int>0x200E</int>	<!-- LEFT-TO-RIGHT MARK -->
+			<int>0x200F</int>	<!-- RIGHT-TO-LEFT MARK -->
+			<int>0x2028</int>	<!-- LINE SEPARATOR -->
+			<int>0x2029</int>	<!-- PARAGRAPH SEPARATOR -->
+			<int>0x202A</int>	<!-- LEFT-TO-RIGHT EMBEDDING -->
+			<int>0x202B</int>	<!-- RIGHT-TO-LEFT EMBEDDING -->
+			<int>0x202C</int>	<!-- POP DIRECTIONAL FORMATTING -->
+			<int>0x202D</int>	<!-- LEFT-TO-RIGHT OVERRIDE -->
+			<int>0x202E</int>	<!-- RIGHT-TO-LEFT OVERRIDE -->
+			<int>0x202F</int>	<!-- NARROW NO-BREAK SPACE -->
+			<int>0x205F</int>	<!-- MEDIUM MATHEMATICAL SPACE -->
+			<int>0x2060</int>	<!-- WORD JOINER -->
+			<int>0x2061</int>	<!-- FUNCTION APPLICATION -->
+			<int>0x2062</int>	<!-- INVISIBLE TIMES -->
+			<int>0x2063</int>	<!-- INVISIBLE SEPARATOR -->
+			<int>0x206A</int>	<!-- INHIBIT SYMMETRIC SWAPPING -->
+			<int>0x206B</int>	<!-- ACTIVATE SYMMETRIC SWAPPING -->
+			<int>0x206C</int>	<!-- INHIBIT ARABIC FORM SHAPING -->
+			<int>0x206D</int>	<!-- ACTIVATE ARABIC FORM SHAPING -->
+			<int>0x206E</int>	<!-- NATIONAL DIGIT SHAPES -->
+			<int>0x206F</int>	<!-- NOMINAL DIGIT SHAPES -->
+			<int>0x3000</int>	<!-- IDEOGRAPHIC SPACE -->
+			<int>0x3164</int>	<!-- HANGUL FILLER -->
+			<int>0xFEFF</int>	<!-- ZERO WIDTH NO-BREAK SPACE -->
+			<int>0xFFA0</int>	<!-- HALFWIDTH HANGUL FILLER -->
+			<int>0xFFF9</int>	<!-- INTERLINEAR ANNOTATION ANCHOR -->
+			<int>0xFFFA</int>	<!-- INTERLINEAR ANNOTATION SEPARATOR -->
+			<int>0xFFFB</int>	<!-- INTERLINEAR ANNOTATION TERMINATOR -->
+		</blank>
+<!--
+  Rescan configuration every 30 seconds when FcFontSetList is called
+ -->
+		<rescan>
+			<int>30</int>
+		</rescan>
+	</config>
+
+</fontconfig>
+ÿ
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/fonts/fonts.dtd	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,222 @@
+<!-- This is the Document Type Definition for font configuration files -->
+<!ELEMENT fontconfig (dir | 
+		      cache | 
+		      cachedir |
+		      include | 
+		      config |
+		      selectfont |
+		      match | 
+		      alias)* >
+
+<!-- 
+    Add a directory that provides fonts
+-->
+<!ELEMENT dir (#PCDATA)>
+<!ATTLIST dir xml:space (default|preserve) 'preserve'>
+
+<!--
+    Define the per-user file that holds cache font information.
+
+    If the filename begins with '~', it is replaced with the users
+    home directory path.
+-->
+<!ELEMENT cache (#PCDATA)>
+<!ATTLIST cache xml:space (default|preserve) 'preserve'>
+
+<!--
+    Add a directory that is searched for font cache files.
+    These hold per-directory cache data and are searched in
+    order for each directory. When writing cache files, the first
+    directory which allows the cache file to be created is used.
+
+    A leading '~' in a directory name is replaced with the users
+    home directory path.
+-->
+<!ELEMENT cachedir (#PCDATA)>
+<!ATTLIST cachedir xml:space (default|preserve) 'preserve'>
+
+<!--
+    Reference another configuration file; note that this
+    is another complete font configuration file and not
+    just a file included by the XML parser.
+
+    Set 'ignore_missing' to 'yes' if errors are to be ignored.
+
+    If the filename begins with '~', it is replaced with the users
+    home directory path.
+-->
+<!ELEMENT include (#PCDATA)>
+<!ATTLIST include
+	  ignore_missing    (no|yes)		"no"
+	  xml:space	    (default|preserve)	"preserve">
+
+<!--
+    Global library configuration data
+ -->
+<!ELEMENT config (blank|rescan)*>
+
+<!--
+    Specify the set of Unicode encoding values which
+    represent glyphs that are allowed to contain no
+    data.  With this list, fontconfig can examine
+    fonts for broken glyphs and eliminate them from
+    the set of valid Unicode chars.  This idea
+    was borrowed from Mozilla
+ -->
+<!ELEMENT blank (int)*>
+
+<!--
+    Aliases are just a special case for multiple match elements
+
+    They are syntactically equivalent to:
+
+    <match>
+	<test name="family">
+	    <string value=[family]/>
+	</test>
+	<edit name="family" mode="prepend">
+	    <string value=[prefer]/>
+	    ...
+	</edit>
+	<edit name="family" mode="append">
+	    <string value=[accept]/>
+	    ...
+	</edit>
+	<edit name="family" mode="append_last">
+	    <string value=[default]/>
+	    ...
+	</edit>
+    </match>
+-->
+<!--
+    Periodically rescan the font configuration and
+    directories to synch internal state with filesystem
+ -->
+<!ELEMENT rescan (int)>
+
+<!--
+    Edit list of available fonts at startup/reload time
+ -->
+<!ELEMENT selectfont (rejectfont | acceptfont)* >
+
+<!ELEMENT rejectfont (glob | pattern)*>
+
+<!ELEMENT acceptfont (glob | pattern)*>
+
+<!ELEMENT glob (#PCDATA)>
+
+<!ELEMENT pattern (patelt)*>
+
+<!ENTITY % constant 'int|double|string|matrix|bool|charset|const'>
+
+<!ELEMENT patelt (%constant;)*>
+<!ATTLIST patelt
+	  name CDATA	#REQUIRED>
+
+<!ELEMENT alias (family*, prefer?, accept?, default?)>
+<!ELEMENT prefer (family)*>
+<!ELEMENT accept (family)*>
+<!ELEMENT default (family)*>
+<!ELEMENT family (#PCDATA)>
+<!ATTLIST family xml:space (default|preserve) 'preserve'>
+
+<!ENTITY % expr 'int|double|string|matrix|bool|charset
+		|name|const
+		|or|and|eq|not_eq|less|less_eq|more|more_eq|contains|not_contains
+		|plus|minus|times|divide|not|if|floor|ceil|round|trunc'>
+
+<!--
+    Match and edit patterns.
+
+    If 'target' is 'pattern', execute the match before selecting a font.
+    if 'target' is 'font', execute the match on the result of a font
+    selection.
+-->
+<!ELEMENT match (test*, edit*)>
+<!ATTLIST match
+	  target (pattern|font|scan) "pattern">
+
+<!--
+    Match a field in a pattern
+
+    if 'qual' is 'any', then the match succeeds if any value in the field matches.
+    if 'qual' is 'all', then the match succeeds only if all values match.
+    if 'qual' is 'first', then the match succeeds only if the first value matches.
+    if 'qual' is 'not_first', then the match succeeds only if any value other than
+    	the first matches.
+    For match elements with target=font, if test 'target' is 'pattern',
+    then the test is applied to the pattern used in matching rather than
+    to the resulting font.
+
+    Match elements with target=scan are applied as fonts are scanned.
+    They edit the pattern generated from the scanned font and affect
+    what the fontconfig database contains.
+-->
+<!ELEMENT test (%expr;)*>
+<!ATTLIST test 
+	  qual (any|all|first|not_first)    "any"
+	  name CDATA	    #REQUIRED
+	  target (pattern|font|default)		"default"
+	  compare (eq|not_eq|less|less_eq|more|more_eq|contains|not_contains)	"eq">
+
+<!--
+    Edit a field in a pattern
+
+    The enclosed values are used together to edit the list of values
+    associated with 'name'.
+
+    If 'name' matches one of those used in a test element for this match element:
+	if 'mode' is 'assign', replace the matched value.
+	if 'mode' is 'assign_replace', replace all of the values
+	if 'mode' is 'prepend', insert before the matched value
+	if 'mode' is 'append', insert after the matched value
+	if 'mode' is 'prepend_first', insert before all of the values
+	if 'mode' is 'append_last', insert after all of the values
+    If 'name' doesn't match any of those used in a test element:
+	if 'mode' is 'assign' or 'assign_replace, replace all of the values
+	if 'mode' is 'prepend' or 'prepend_first', insert before all of the values
+	if 'mode' is 'append' or 'append_last', insert after all of the values
+-->
+<!ELEMENT edit (%expr;)*>
+<!ATTLIST edit
+	  name CDATA	    #REQUIRED
+	  mode (assign|assign_replace|prepend|append|prepend_first|append_last) "assign"
+	  binding (weak|strong|same) "weak">
+
+<!--
+    Elements of expressions follow
+-->
+<!ELEMENT int (#PCDATA)>
+<!ATTLIST int xml:space (default|preserve) 'preserve'>
+<!ELEMENT double (#PCDATA)>
+<!ATTLIST double xml:space (default|preserve) 'preserve'>
+<!ELEMENT string (#PCDATA)>
+<!ATTLIST string xml:space (default|preserve) 'preserve'>
+<!ELEMENT matrix (double,double,double,double)>
+<!ELEMENT bool (#PCDATA)>
+<!ELEMENT charset (#PCDATA)>
+<!ATTLIST charset xml:space (default|preserve) 'preserve'>
+<!ELEMENT name (#PCDATA)>
+<!ATTLIST name xml:space (default|preserve) 'preserve'>
+<!ELEMENT const (#PCDATA)>
+<!ATTLIST const xml:space (default|preserve) 'preserve'>
+<!ELEMENT or (%expr;)*>
+<!ELEMENT and (%expr;)*>
+<!ELEMENT eq ((%expr;), (%expr;))>
+<!ELEMENT not_eq ((%expr;), (%expr;))>
+<!ELEMENT less ((%expr;), (%expr;))>
+<!ELEMENT less_eq ((%expr;), (%expr;))>
+<!ELEMENT more ((%expr;), (%expr;))>
+<!ELEMENT more_eq ((%expr;), (%expr;))>
+<!ELEMENT contains ((%expr;), (%expr;))>
+<!ELEMENT not_contains ((%expr;), (%expr;))>
+<!ELEMENT plus (%expr;)*>
+<!ELEMENT minus (%expr;)*>
+<!ELEMENT times (%expr;)*>
+<!ELEMENT divide (%expr;)*>
+<!ELEMENT not (%expr;)>
+<!ELEMENT if ((%expr;), (%expr;), (%expr;))>
+<!ELEMENT floor (%expr;)>
+<!ELEMENT ceil (%expr;)>
+<!ELEMENT round (%expr;)>
+<!ELEMENT trunc (%expr;)>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/gtk-2.0/gdk-pixbuf.loaders	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,114 @@
+# GdkPixbuf Image Loader Modules file
+# Automatically generated file, do not edit
+# Created by gdk-pixbuf-query-loaders.exe from gtk+-2.10.6
+#
+# LoaderDir = /target/lib/gtk-2.0/2.10.0/loaders
+#
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-ani.dll"
+"ani" 4 "gtk20" "The ANI image format"
+"application/x-navi-animation" ""
+"ani" ""
+"RIFF    ACON" "    xxxx    " 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-bmp.dll"
+"bmp" 5 "gtk20" "The BMP image format"
+"image/bmp" "image/x-bmp" "image/x-MS-bmp" ""
+"bmp" ""
+"BM" "" 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-gif.dll"
+"gif" 4 "gtk20" "The GIF image format"
+"image/gif" ""
+"gif" ""
+"GIF8" "" 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-ico.dll"
+"ico" 5 "gtk20" "The ICO image format"
+"image/x-icon" ""
+"ico" "cur" ""
+"  \001   " "zz znz" 100
+"  \002   " "zz znz" 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-jpeg.dll"
+"jpeg" 5 "gtk20" "The JPEG image format"
+"image/jpeg" ""
+"jpeg" "jpe" "jpg" ""
+"\377\330" "" 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-pcx.dll"
+"pcx" 4 "gtk20" "The PCX image format"
+"image/x-pcx" ""
+"pcx" ""
+"\n \001" "" 100
+"\n\002\001" "" 100
+"\n\003\001" "" 100
+"\n\004\001" "" 100
+"\n\005\001" "" 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-png.dll"
+"png" 5 "gtk20" "The PNG image format"
+"image/png" ""
+"png" ""
+"\211PNG\r\n\032\n" "" 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-pnm.dll"
+"pnm" 4 "gtk20" "The PNM/PBM/PGM/PPM image format family"
+"image/x-portable-anymap" "image/x-portable-bitmap" "image/x-portable-graymap" "image/x-portable-pixmap" ""
+"pnm" "pbm" "pgm" "ppm" ""
+"P1" "" 100
+"P2" "" 100
+"P3" "" 100
+"P4" "" 100
+"P5" "" 100
+"P6" "" 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-ras.dll"
+"ras" 4 "gtk20" "The Sun raster image format"
+"image/x-cmu-raster" "image/x-sun-raster" ""
+"ras" ""
+"Y\246j\225" "" 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-tga.dll"
+"tga" 4 "gtk20" "The Targa image format"
+"image/x-tga" ""
+"tga" "targa" ""
+" \001\001" "x  " 100
+" \001\t" "x  " 100
+"  \002" "xz " 99
+"  \003" "xz " 100
+"  \n" "xz " 100
+"  \013" "xz " 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-tiff.dll"
+"tiff" 1 "gtk20" "The TIFF image format"
+"image/tiff" ""
+"tiff" "tif" ""
+"MM *" "  z " 100
+"II* " "   z" 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-wbmp.dll"
+"wbmp" 4 "gtk20" "The WBMP image format"
+"image/vnd.wap.wbmp" ""
+"wbmp" ""
+" " "z" 1
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-xbm.dll"
+"xbm" 4 "gtk20" "The XBM image format"
+"image/x-xbitmap" ""
+"xbm" ""
+"#define " "" 100
+"/*" "" 50
+
+"/target/lib/gtk-2.0/2.10.0/loaders/libpixbufloader-xpm.dll"
+"xpm" 4 "gtk20" "The XPM image format"
+"image/x-xpixmap" ""
+"xpm" ""
+"/* XPM */" "" 100
+
+"/target/lib/gtk-2.0/2.10.0/loaders/svg_loader.dll"
+"svg" 2 "gtk20" "Scalable Vector Graphics"
+"image/svg+xml" "image/svg" "image/svg-xml" "image/vnd.adobe.svg+xml" "text/xml-svg" ""
+"svg" "svgz" "svg.gz" ""
+" <svg" "*    " 100
+" <!DOCTYPE svg" "*             " 100
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/gtk-2.0/gtk.immodules	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+# GTK+ Input Method Modules file
+# Automatically generated file, do not edit
+# Created by gtk-query-immodules-2.0.exe from gtk+-2.10.6
+#
+# ModulesPath = /target/lib/gtk-2.0/2.4.0/immodules
+#
+"/target/lib/gtk-2.0/2.10.0/immodules/im-am-et.dll" 
+"am_et" "Amharic (EZ+)" "gtk20" "${prefix}/share/locale" "am" 
+
+"/target/lib/gtk-2.0/2.10.0/immodules/im-cedilla.dll" 
+"cedilla" "Cedilla" "gtk+" "${prefix}/share/locale" "az:ca:co:fr:gv:oc:pt:sq:tr:wa" 
+
+"/target/lib/gtk-2.0/2.10.0/immodules/im-cyrillic-translit.dll" 
+"cyrillic_translit" "Cyrillic (Transliterated)" "gtk20" "${prefix}/share/locale" "" 
+
+"/target/lib/gtk-2.0/2.10.0/immodules/im-ime.dll" 
+"ime" "Windows IME" "gtk+" "" "ja:ko:zh" 
+
+"/target/lib/gtk-2.0/2.10.0/immodules/im-inuktitut.dll" 
+"inuktitut" "Inuktitut (Transliterated)" "gtk20" "${prefix}/share/locale" "iu" 
+
+"/target/lib/gtk-2.0/2.10.0/immodules/im-ipa.dll" 
+"ipa" "IPA" "gtk20" "${prefix}/share/locale" "" 
+
+"/target/lib/gtk-2.0/2.10.0/immodules/im-thai-broken.dll" 
+"thai_broken" "Thai (Broken)" "gtk20" "${prefix}/share/locale" "" 
+
+"/target/lib/gtk-2.0/2.10.0/immodules/im-ti-er.dll" 
+"ti_er" "Tigrigna-Eritrean (EZ+)" "gtk20" "${prefix}/share/locale" "ti" 
+
+"/target/lib/gtk-2.0/2.10.0/immodules/im-ti-et.dll" 
+"ti_et" "Tigrigna-Ethiopian (EZ+)" "gtk20" "${prefix}/share/locale" "ti" 
+
+"/target/lib/gtk-2.0/2.10.0/immodules/im-viqr.dll" 
+"viqr" "Vietnamese (VIQR)" "gtk20" "${prefix}/share/locale" "vi" 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/gtk-2.0/gtkrc	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1 @@
+gtk-theme-name = "MS-Windows"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/pango/pango.aliases	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+courier = "courier new"
+
+tahoma = "tahoma,browallia new,mingliu,simhei,gulimche,ms gothic,latha,mangal"
+sans = "arial,browallia new,mingliu,simhei,gulimche,ms gothic,latha,mangal"
+serif = "times new roman,angsana new,mingliu,simsun,gulimche,ms gothic,latha,mangal"
+monospace = "courier new,courier monothai,mingliu,simsun,gulimche,ms gothic,latha,mangal"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/etc/pango/pango.modules	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,35 @@
+# Pango Modules file
+# Automatically generated file, do not edit
+#
+# ModulesPath = /target/lib/pango/1.6.0/modules
+#
+"/target/lib/pango/1.6.0/modules/pango-arabic-fc.dll" ArabicScriptEngineFc PangoEngineShape PangoRenderFc arabic:*
+"/target/lib/pango/1.6.0/modules/pango-arabic-lang.dll" ArabicScriptEngineLang PangoEngineLang PangoRenderNone arabic:*
+"/target/lib/pango/1.6.0/modules/pango-basic-fc.dll" BasicScriptEngineFc PangoEngineShape PangoRenderFc armenian:* bopomofo:* cherokee:* coptic:* cyrillic:* deseret:* ethiopic:* georgian:* gothic:* greek:* han:* hiragana:* katakana:* latin:* ogham:* old-italic:* runic:* canadian-aboriginal:* yi:* braille:* cypriot:* limbu:* osmanya:* shavian:* linear-b:* ugaritic:* glagolitic:* cuneiform:* phoenician:* common:
+"/target/lib/pango/1.6.0/modules/pango-basic-win32.dll" BasicScriptEngineWin32 PangoEngineShape PangoRenderWin32 common:
+"/target/lib/pango/1.6.0/modules/pango-hangul-fc.dll" HangulScriptEngineFc PangoEngineShape PangoRenderFc hangul:*
+"/target/lib/pango/1.6.0/modules/pango-hebrew-fc.dll" HebrewScriptEngineFc PangoEngineShape PangoRenderFc hebrew:*
+"/target/lib/pango/1.6.0/modules/pango-indic-fc.dll" devaScriptEngineFc PangoEngineShape PangoRenderFc devanagari:*
+"/target/lib/pango/1.6.0/modules/pango-indic-fc.dll" bengScriptEngineFc PangoEngineShape PangoRenderFc bengali:*
+"/target/lib/pango/1.6.0/modules/pango-indic-fc.dll" guruScriptEngineFc PangoEngineShape PangoRenderFc gurmukhi:*
+"/target/lib/pango/1.6.0/modules/pango-indic-fc.dll" gujrScriptEngineFc PangoEngineShape PangoRenderFc gujarati:*
+"/target/lib/pango/1.6.0/modules/pango-indic-fc.dll" oryaScriptEngineFc PangoEngineShape PangoRenderFc oriya:*
+"/target/lib/pango/1.6.0/modules/pango-indic-fc.dll" tamlScriptEngineFc PangoEngineShape PangoRenderFc tamil:*
+"/target/lib/pango/1.6.0/modules/pango-indic-fc.dll" teluScriptEngineFc PangoEngineShape PangoRenderFc telugu:*
+"/target/lib/pango/1.6.0/modules/pango-indic-fc.dll" kndaScriptEngineFc PangoEngineShape PangoRenderFc kannada:*
+"/target/lib/pango/1.6.0/modules/pango-indic-fc.dll" mlymScriptEngineFc PangoEngineShape PangoRenderFc malayalam:*
+"/target/lib/pango/1.6.0/modules/pango-indic-fc.dll" sinhScriptEngineFc PangoEngineShape PangoRenderFc sinhala:*
+"/target/lib/pango/1.6.0/modules/pango-indic-lang.dll" devaIndicScriptEngineLang PangoEngineLang PangoRenderNone devanagari:*
+"/target/lib/pango/1.6.0/modules/pango-indic-lang.dll" bengIndicScriptEngineLang PangoEngineLang PangoRenderNone bengali:*
+"/target/lib/pango/1.6.0/modules/pango-indic-lang.dll" guruIndicScriptEngineLang PangoEngineLang PangoRenderNone gurmukhi:*
+"/target/lib/pango/1.6.0/modules/pango-indic-lang.dll" gujrIndicScriptEngineLang PangoEngineLang PangoRenderNone gujarati:*
+"/target/lib/pango/1.6.0/modules/pango-indic-lang.dll" oryaIndicScriptEngineLang PangoEngineLang PangoRenderNone oriya:*
+"/target/lib/pango/1.6.0/modules/pango-indic-lang.dll" tamlIndicScriptEngineLang PangoEngineLang PangoRenderNone tamil:*
+"/target/lib/pango/1.6.0/modules/pango-indic-lang.dll" teluIndicScriptEngineLang PangoEngineLang PangoRenderNone telugu:*
+"/target/lib/pango/1.6.0/modules/pango-indic-lang.dll" kndaIndicScriptEngineLang PangoEngineLang PangoRenderNone kannada:*
+"/target/lib/pango/1.6.0/modules/pango-indic-lang.dll" mlymIndicScriptEngineLang PangoEngineLang PangoRenderNone malayalam:*
+"/target/lib/pango/1.6.0/modules/pango-indic-lang.dll" sinhIndicScriptEngineLang PangoEngineLang PangoRenderNone sinhala:*
+"/target/lib/pango/1.6.0/modules/pango-khmer-fc.dll" KhmerScriptEngineFc PangoEngineShape PangoRenderFc khmer:*
+"/target/lib/pango/1.6.0/modules/pango-syriac-fc.dll" SyriacScriptEngineFc PangoEngineShape PangoRenderFc syriac:*
+"/target/lib/pango/1.6.0/modules/pango-thai-fc.dll" ThaiScriptEngineFc PangoEngineShape PangoRenderFc thai:* lao:*
+"/target/lib/pango/1.6.0/modules/pango-tibetan-fc.dll" TibetanScriptEngineFc PangoEngineShape PangoRenderFc tibetan:*
Binary file toolboxes/graph_visualisation/fontconfig_fix.dll has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/demos/graphViz4MatlabDEMO1.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+load smallExample 
+nodeColors = {'g','b','r','c'}; % if too few specified, it will cycle through
+edgeColors = {'Tom', 'Bill', 'r'
+              'Bill' 'all' , 'g'};
+
+graphViz4Matlab('-adjMat',adj,'-nodeLabels',names,'-layout',Treelayout,'-nodeColors',nodeColors,'-edgeColors', edgeColors);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/demos/graphViz4MatlabDEMO2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2 @@
+load largeExample
+graphViz4Matlab(adj);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/demos/graphViz4MatlabDEMO3.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+adj = rand(4) > 0.5;
+descriptions = {'First Random Node','Yet another node','The thrid one','The final node'};
+colors = [0 0.5 0.2];  % either use string names for colors or normalized rgb values
+graphViz4Matlab('-adjMat',adj,'-nodeDescriptions',descriptions,'-nodeColors',colors);
+
+% double click on the nodes to see and edit descriptions. 
\ No newline at end of file
Binary file toolboxes/graph_visualisation/graphViz4Matlab/demos/largeExample.mat has changed
Binary file toolboxes/graph_visualisation/graphViz4Matlab/demos/smallExample.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/drawNetwork.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,11 @@
+function g = drawNetwork(varargin)
+% Visualize a graph in a Matlab figure window by specifying an
+% adjacency matrix and optionally node labels, descriptions, colors and the
+% the layout algorithm. The best layout algorithms require that graphViz be
+% installed, available free at <http://www.graphviz.org>.
+%%
+% Type doc graphViz4Matlab for more details.
+
+    g = graphViz4Matlab(varargin{:}); 
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/graphViz4Matlab.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1028 @@
+classdef graphViz4Matlab < handle
+    % Visualize a graph in a Matlab figure window by specifying an
+    % adjacency matrix and optionally node labels, descriptions, colors and the
+    % the layout algorithm. The best layout algorithms require that graphViz be
+    % installed, available free at <http://www.graphviz.org>.
+    %
+    % Matthew Dunham
+    % University of British Columbia
+    % Last Updated: April 24, 2010
+    % Requires Matlab version 2008a or newer.
+    %
+    % Syntax (see more examples below):
+    % graphViz4Matlab('-adjMat',adj,'-nodeLabels',labels,'-nodeColors',colors);
+    %
+    % Self loops are removed and not represented on the graph.
+    %
+    % Once the graph is displayed, there are several operations you can perform
+    % with the mouse.
+    % (1) Move a single node around.
+    % (2) Draw a mouse box around several nodes and move them all together.
+    % (3) Enter a description for a node by double clicking it.
+    % (4) Shade the node by right clicking it
+    % (5) Display a node's properties on the console by shift clicking it.
+    % (6) Increase or decrease the font size
+    % (7) Increase or decrease the node size
+    % (8) Tighten the axes and relax the square aspect ratio.
+    % (9) Ask the current layout algorithm to layout the nodes as though the
+    %     arrows were pointing the other way. This only affects some of the
+    %     layouts.
+    % (10) Change the layout algorithm and refresh the graph
+    %
+    % Additionally, any operation you could do with a regular Matlab figure can
+    % be done here, e.g. annotating or saving as a pdf.
+    %
+    % Options are specified via name value pairs in any order.
+    % [] denote defaults.
+    %
+    % '-adjMat'           [example matrix] The adjacency matrix
+    %
+    % '-layout'            [Gvizlayout if graphViz installed, else Gridlayout]
+    %                      A layout object, i.e. Gvizlayout | Gridlayout | Circlelayout
+    %                     (See knownLayouts Property)
+    %
+    % '-nodeLabels'        ['1':'n'] A cell array of labels for the nodes
+    %
+    % '-nodeDescriptions'  [{}] Longer descriptions for the nodes, displayed when
+    %                      double clicking on a node.
+    %
+    % '-nodeColors'        ['c'] A cell array or n-by-3 matrix specifying colors
+    %                      for the nodes. If fewer colors than nodes are specified,
+    %                      the specified colors are reused and cycled through.
+    %
+    % '-undirected'        [false] If true, no arrows are displayed.
+    %
+    % '-edgeColors'        [] An n-by-3 cell array listing
+    %                         {fromName,toName,color} for each row. You can
+    %                         list only the n < numel(edges) edges you want to
+    %                         color. If you do not label the nodes, graphViz4Matlab
+    %                         uses '1','2','3', etc, in which case use these.
+    %                         You can specify the text 'all' in place of toName,
+    %                         to mean all nodes, i.e. {fromName,'all',color}
+    %
+    %
+    % '-splitLabels'       [true] If true, long node labels are split into
+    %                       several rows
+    %
+    % '-doubleClickFn'     (by default, double clicking a node brings up
+    %                      an edit box for the node's description, but you
+    %                      can pass in a custom function handle. The function
+    %                      gets passed the node's label.
+    % Examples:
+    %
+    % adj = rand(5,5) > 0.8;
+    % labels = {'First','Second','Third','Fourth','Fifth'};
+    % colors = {'g','b'};    % will cycle through
+    % s = graphViz4Matlab('-adjMat',adj,'-nodeLabels',labels,'-nodeColors',colors);
+    % freeze(s); % convert to an image
+    %
+    % If you are only specifying an adjacency matrix, you can omit the
+    % '-adjMat' name as in graphViz4Matlab(adj).
+    %
+    % Calling graphViz4Matlab without any parameters displays an example graph.
+    %
+    
+    
+    properties(GetAccess = 'public', SetAccess = 'private')
+        % read only
+        path         = addpath(genpath(fileparts(which(mfilename))));  % automatically adds subdirectories to path
+        graphVizPath = setupPath();
+        nnodes       = 0;      % The number of nodes
+        nedges       = 0;      % The number of edges
+        currentLayout= [];     % The current layout object
+        layouts      = [];     % List currently added layout objects
+        adjMatrix    = [];     % The adjacency matrix
+        isvisible    = false;  % True iff the graph is being displayed
+        nodeArray    = [];     % The nodes
+        edgeArray    = [];     % The edges
+        fig          = [];     % The main window
+        ax           = [];     % The main axes
+        doubleClickFn = [];    % function to execute when a user double clicks on a node, (must be a function handle that takes in the node name
+        selectedNode = [];     % The selected node, if any
+        minNodeSize  = [];     % A minimum size for the nodes
+        maxNodeSize  = [];     % A maximum size for the nodes
+        undirected   = false;  % If undirected, arrows are not displayed
+        flipped      = false;  % If true, layout is done as though edge directions were reversed.
+        % (does not affect the logical layout).
+        knownLayouts = {Gvizlayout  ,...   % add your own layout here or use
+            Treelayout  ,...   % the addLayout() method
+            Radiallayout,...
+            Circularlayout,...
+            Springlayout,...
+            Circlelayout,...
+            Gridlayout  ,...
+            Randlayout  };
+        defaultEdgeColor  = [0,0,0];%[20,43,140]/255;
+        edgeColors;
+        square      = true;  % amounts to a the call "axis square"
+        splitLabels = true;
+    end
+    
+    properties(GetAccess = 'private', SetAccess = 'private')
+        % These values store the initial values not the current ones.
+        nodeLabels          = {};
+        nodeDescriptions    = {};
+        nodeColors          = {};
+    end
+    
+    properties(GetAccess = 'protected',SetAccess = 'protected')
+        toolbar;                    % The button toolbar
+        layoutButtons;              % The layout buttons
+        fontSize;                   % last calculated optimal font size
+        selectedFontSize;           %
+        
+        previousMouseLocation;      % last mouse location relative to the axes
+        groupSelectionMode = 0;     % current stage in a group selection task
+        groupSelectedNodes;         % selected nodes in a group selection
+        groupSelectedDims;          % size of enclosing rectangle of selected nodes
+        groupSelectedRect;          % a bounding rectangle for the selected nodes
+    end
+    
+    methods
+        
+        function obj = graphViz4Matlab(varargin)
+            % graphViz4Matlab constructor
+            if(~exist('processArgs','file')), error('Requires processArgs() function');            end
+            obj.addKnownLayouts();
+            obj.processInputs(varargin{:})
+            obj.addNodes();
+            obj.addEdges();
+            obj.draw();
+        end
+        
+        function draw(obj)
+            % Draw the graph
+            if(obj.isvisible)
+                obj.erase()
+            end
+            obj.createWindow();
+            obj.calculateMinMaxNodeSize();
+            obj.layoutNodes();
+            obj.displayGraph();
+            obj.isvisible = true;
+            obj.paperCrop();
+        end
+        
+        function fig = freeze(obj)
+            % Freeze the current image into a regular Matlab figure
+            figure(obj.fig);
+            print tmp.png -dpng -r300
+            fig = figure;
+            image(imread('tmp.png'));
+            axis off;
+            delete tmp.png;
+            close(obj.fig);
+        end
+        
+        function redraw(obj)
+            % Redraw the graph. (You could also call draw() again but then the
+            % window is recreated as well and it doesn't look as nice).
+            if(~obj.isvisible)
+                obj.draw();
+                return;
+            end
+            cla(obj.ax);
+            obj.clearGroupSelection();
+            obj.calculateMinMaxNodeSize();
+            obj.layoutNodes();
+            obj.displayGraph();
+        end
+        
+        function flip(obj,varargin)
+            % Have the layout algorithms layout the graph as though the arrows
+            % were pointing in the opposite direction. The node connectivity
+            % remains the same and if node one pointed to node 2 before, it
+            % still does after. This is useful for tree layout, for example to
+            % turn the tree on its head. Calling it twice flips it back.
+            obj.flipped = ~obj.flipped;
+            if(obj.isvisible)
+                obj.redraw();
+            end
+        end
+        
+        function erase(obj)
+            % Erase the graph but maintain the state so that it can be redrawn.
+            if(obj.isvisible)
+                obj.clearGroupSelection();
+                delete(obj.fig);
+                obj.isvisible = false;
+                
+            end
+        end
+        
+        function nodeSelected(obj,node)
+            % This function is called by nodes when they are selected by the
+            % mouse. It should not be called manually.
+            if(obj.groupSelectionMode == 1)
+                obj.groupSelectionStage1();
+                return;
+            end
+            if(~isempty(obj.selectedNode))
+                node.deselect();
+                obj.selectedNode = [];
+                return;
+            end
+            switch get(obj.fig,'SelectionType')
+                case 'normal'
+                    obj.singleClick(node);
+                case 'open'
+                    obj.doubleClick(node);
+                case 'alt'
+                    obj.rightClick(node);
+                otherwise
+                    obj.shiftClick(node);
+            end
+        end
+        
+        function addLayout(obj,layout)
+            % Let the graph know about a new layout you have created so that it
+            % will be available via a toolbar button. The layout object must be
+            % a descendant of the Abstractlayout class. This method does not have
+            % to be called for existing layouts, nor does it need to be called
+            % if you passed the new layout to the constructor or to the
+            % setLayout() method. It will not add two layouts with the same
+            % name property.
+            if(~ismember(layout.name,fieldnames(obj.layouts)))
+                if(layout.isavailable())
+                    obj.layouts.(layout.name) = layout;
+                    if(obj.isvisible)
+                        obj.addButtons();
+                    end
+                else
+                    warning('graphViz4Matlab:layout','This layout is not available');
+                end
+            end
+        end
+        
+        function setLayout(obj,layout)
+            % Set a new layout algorithm and refresh the graph.
+            if(layout.isavailable())
+                obj.addLayout(layout);
+                obj.currentLayout = obj.layouts.(layout.name);
+                obj.redraw();
+            else
+                warning('graphViz4Matlab:layout','Sorry, this layout is not available');
+            end
+        end
+        
+        function squareAxes(obj,varargin)
+            % Toggle the axes from square to normal and vice versa.
+            obj.clearGroupSelection();
+            if(obj.square)
+                axis(obj.ax,'normal');
+                obj.square = false;
+            else
+                axis(obj.ax,'square');
+                obj.square = true;
+            end
+            
+        end
+        
+        function tightenAxes(obj,varargin)
+            % Tighten the axes as much as possible.
+            obj.clearGroupSelection();
+            xpos = vertcat(obj.nodeArray.xpos);
+            ypos = vertcat(obj.nodeArray.ypos);
+            r = obj.nodeArray(1).width/2;
+            axis(obj.ax,[min(xpos)-r,max(xpos)+r,min(ypos)-r,max(ypos)+r]);
+            axis normal;
+        end
+        
+        
+        
+        
+    end % end of public methods
+    
+    
+    methods(Access = 'protected')
+        
+        function addKnownLayouts(obj)
+            % Add all of the known layouts
+            obj.layouts = struct;
+            for i=1:numel(obj.knownLayouts)
+                layout = obj.knownLayouts{i};
+                if(layout.isavailable())
+                    obj.layouts.(layout.name) = layout;
+                end
+            end
+        end
+        
+        function processInputs(obj,varargin)
+            % Process the inputs and perform error checking
+            labels = {'adj', 'adjMatrix', 'adjMat', 'layout', 'nodeLabels', 'nodeDescriptions', 'nodeColors', 'undirected', 'edgeColors', 'splitLabels', 'doubleClickFn'};
+            for i=1:numel(varargin)
+                arg = varargin{i};
+                if ~ischar(arg), continue; end
+                for j = 1:numel(labels)
+                    if strcmpi(arg, labels{i});
+                        varargin{i} = ['-', arg];
+                    end
+                    if strcmpi(arg, '-adj') || strcmpi(arg, '-adjMatrix')
+                        varargin{i} = '-adjMat';
+                    end
+                end
+            end
+            
+            [adjMatrix, currentLayout, nodeLabels, nodeDescriptions, nodeColors,obj.undirected,obj.edgeColors,obj.splitLabels,obj.doubleClickFn] = processArgs(varargin,...
+                '-adjMat'               , []     ,...
+                '-layout'               , []     ,...
+                '-nodeLabels'           , {}     ,...
+                '-nodeDescriptions'     , {}     ,...
+                '-nodeColors'           , {}     ,...
+                '-undirected'           , false  ,...
+                '-edgeColors'           , []     ,...
+                '-splitLabels'          , true   ,...
+                '-doubleClickFn'        , []     );
+            
+            
+            if(~isempty(currentLayout) && ~isavailable(currentLayout))
+                currentLayout = [];
+            end
+            if(isempty(adjMatrix))
+                adjMatrix = [0 0 0 0; 1 0 0 0; 1 1 0 0; 1 1 1 0]; % example graph
+            end
+            
+            if(isempty(currentLayout))
+                fields = fieldnames(obj.layouts);
+                currentLayout = obj.layouts.(fields{1});
+            else
+                obj.addLayout(currentLayout);
+            end
+            obj.nnodes = size(adjMatrix,1);
+            obj.adjMatrix = adjMatrix;
+            if(isempty(nodeDescriptions))
+                nodeDescriptions = repmat({'Enter a description here...'},size(adjMatrix,1),1);
+            end
+            obj.nodeDescriptions = nodeDescriptions;
+            obj.nodeColors = nodeColors;
+            
+            if(isempty(nodeLabels))
+                nodeLabels = cellfun(@(x)num2str(x),mat2cell(1:obj.nnodes,1,ones(1,obj.nnodes)),'UniformOutput',false);
+            end
+            
+            obj.nodeLabels = nodeLabels;
+            if(~isequal(numel(obj.nodeLabels),size(adjMatrix,1),size(adjMatrix,2)))
+                error('graphViz4Matlab:dimMismatch','The number of labels must match the dimensions of adjmatrix.');
+            end
+            obj.currentLayout = currentLayout;
+        end
+        
+        function createWindow(obj)
+            % Create the main window
+            obj.fig = figure(floor(1000*rand) + 1000);
+            set(obj.fig,'Name','graphViz4Matlab',...
+                'NumberTitle' ,'off',...
+                'Color','w'   ,'Toolbar','none');
+            obj.createAxes();
+            ssize = get(0,'ScreenSize');
+            pos = [ssize(3)/2,50,-20+ssize(3)/2,ssize(4)-200];
+            set(obj.fig,'Position',pos);
+            obj.setCallbacks();
+            obj.addButtons();
+            
+        end
+        
+        function createAxes(obj)
+            % Create the axes upon which the graph will be displayed.
+            obj.ax = axes('Parent',obj.fig,'box','on','UserData','main');
+            outerpos = get(obj.ax,'OuterPosition');
+            axpos = outerpos;
+            axpos(4) = 0.90;
+            axpos(2) = 0.03;
+            axis manual
+            if(obj.square)
+                axis square
+            end
+            set(obj.ax,'Position',axpos,'XTick',[],'YTick',[],'LineWidth',0.5);
+            set(obj.ax,'ButtonDownFcn',@obj.axPressed);
+        end
+        
+        
+        
+        function setCallbacks(obj)
+            % Set the callback functions for the figure, i.e. functions that
+            % will be called when the user performs various actions.
+            set(obj.fig,'ResizeFcn'             ,@obj.windowResized);
+            set(obj.fig,'WindowButtonMotionFcn' ,@obj.mouseMoved);
+            set(obj.fig,'WindowButtonUpFcn'     ,@obj.buttonUp);
+            set(obj.fig,'DeleteFcn'             ,@obj.deleted);
+        end
+        
+        function addNodes(obj)
+            % Add all of the nodes to the graph structure, but don't display
+            % them yet.
+            obj.nodeArray = [];
+            for i=1:obj.nnodes
+                newnode = graphViz4MatlabNode(obj.nodeLabels{i});
+                newnode.containingGraph = obj;
+                newnode.showFullLabel = ~obj.splitLabels;
+                obj.nodeArray = [obj.nodeArray newnode];
+            end
+            obj.addNodeDescriptions(obj.nodeDescriptions);
+            obj.addNodeColors(obj.nodeColors);
+        end
+        
+        function addNodeDescriptions(obj,nodeDescriptions)
+            % Add any descriptions to the newly created nodes.
+            if(~isempty(nodeDescriptions))
+                if(numel(nodeDescriptions) == 1)
+                    nodeDescriptions = repmat(nodeDescriptions,obj.nnodes,1);
+                end
+                for i=1:obj.nnodes
+                    obj.nodeArray(i).description = nodeDescriptions{i};
+                end
+            end
+        end
+        
+        function addNodeColors(obj,nodeColors)
+            % Shade the nodes according to the specified colors. If too few
+            % colors are specified, they are cycled through.
+            if(~isempty(nodeColors))
+                if(~iscell(nodeColors))
+                    nodeColors = mat2cell(nodeColors,ones(1,size(nodeColors,1)),size(nodeColors,2));
+                end
+                if(size(nodeColors,2) > size(nodeColors,1))
+                    nodeColors = nodeColors';
+                end
+                if(numel(nodeColors) < obj.nnodes)
+                    nodeColors = repmat(nodeColors,ceil(obj.nnodes/numel(nodeColors)),1);
+                    nodeColors = nodeColors(1:obj.nnodes);
+                end
+                for i=1:obj.nnodes
+                    obj.nodeArray(i).shade(nodeColors{i});
+                end
+                obj.nodeColors = nodeColors;
+            end
+        end
+        
+        function addEdges(obj)
+            % Add all of the edges to the graph structure, but don't display
+            % them yet.
+            if(any(diag(obj.adjMatrix)))
+                fprintf('\nRemoving Self Loops\n');
+                obj.adjMatrix = obj.adjMatrix - diag(diag(obj.adjMatrix));
+            end
+            obj.edgeArray = struct('from',[],'to',[],'arrow',[]);
+            counter = 1;
+            for i=1:obj.nnodes
+                for j=1:obj.nnodes
+                    if(obj.adjMatrix(i,j))
+                        obj.edgeArray(counter) = struct('from',obj.nodeArray(i),'to',obj.nodeArray(j),'arrow',-1);
+                        obj.nodeArray(i).outedges = [obj.nodeArray(i).outedges,counter];
+                        obj.nodeArray(j).inedges =  [obj.nodeArray(j).inedges,counter];
+                        counter = counter + 1;
+                    end
+                end
+            end
+            obj.nedges = counter -1;
+        end
+        
+        function calculateMinMaxNodeSize(obj)
+            % calculates the maximum and minimum node sizes in data units
+            SCREEN_PROPORTION_MAX = 1/10;
+            SCREEN_PROPORTION_MIN = 1/35;
+            units = get(0,'Units');
+            set(0,'Units','pixels');
+            screensize = get(0,'ScreenSize');
+            set(0,'Units',units);
+            axunits = get(obj.ax,'Units');
+            set(obj.ax,'Units','pixels');
+            axsize = get(obj.ax,'Position');
+            set(obj.ax,'Units',axunits);
+            if(screensize(3) < screensize(4))
+                dataUnitsPerPixel = abs(diff(xlim))/axsize(3);
+                obj.minNodeSize = (SCREEN_PROPORTION_MIN*screensize(3))*dataUnitsPerPixel;
+                obj.maxNodeSize = (SCREEN_PROPORTION_MAX*screensize(3))*dataUnitsPerPixel;
+            else
+                dataUnitsPerPixel = abs(diff(ylim))/axsize(4);
+                obj.minNodeSize = (SCREEN_PROPORTION_MIN*screensize(4))*dataUnitsPerPixel;
+                obj.maxNodeSize = (SCREEN_PROPORTION_MAX*screensize(4))*dataUnitsPerPixel;
+            end
+        end
+        
+        function layoutNodes(obj)
+            % Layout the nodes and edges according to the current layout
+            % algorithm.
+            if(obj.flipped)
+                adj = obj.adjMatrix';
+            else
+                adj = obj.adjMatrix;
+            end
+            obj.currentLayout.dolayout(adj,obj.ax,obj.maxNodeSize);
+            nodesize = obj.currentLayout.nodeSize();
+            locs = obj.currentLayout.centers();
+            for i=1:obj.nnodes
+                node = obj.nodeArray(i);
+                node.resize(nodesize);
+                node.move(locs(i,1),locs(i,2));
+            end
+        end
+        
+        function displayGraph(obj)
+            % Display all of the nodes and edges.
+            cla(obj.ax);
+            obj.setFontSize();
+            for i=1:obj.nnodes
+                node = obj.nodeArray(i);
+                node.fontSize = obj.fontSize;
+                node.draw(obj.ax);
+            end
+            displayEdges(obj);
+        end
+        
+        function displayEdges(obj,indices)
+            % Display or refresh the specified edges. If none specified, all
+            % are refreshed. Currently only works with round nodes.
+            figure(obj.fig);
+            if(nargin < 2)
+                indices = 1:obj.nedges;
+            else
+                indices = unique(indices);
+            end
+            for i=1:numel(indices)
+                edge = obj.edgeArray(indices(i));
+                [X,Y,Xarrow,Yarrow] = obj.calcPositions(edge);
+                if(ishandle(edge.arrow))
+                    delete(edge.arrow)
+                end
+                hold on;
+                edgeColor = obj.defaultEdgeColor;
+                if ~isempty(obj.edgeColors)
+                    candidates = obj.edgeColors(findString(edge.from.label,obj.edgeColors(:,1)),:);
+                    if size(candidates,1)==1 && strcmpi(candidates(1,2),'all')
+                        edgeColor = candidates{1,3};
+                    else
+                        edgeCol = candidates(findString(edge.to.label,candidates(:,2)),3);
+                        if ~isempty(edgeCol); edgeColor = edgeCol{1}; end
+                    end
+                end
+                edge.arrow = plot(X,Y,'LineWidth',2,'HitTest','off','Color',edgeColor);
+                if(~obj.undirected)
+                    arrowHead = obj.displayArrowHead(X,Y,Xarrow,Yarrow,edgeColor);
+                    edge.arrow = [edge.arrow arrowHead];
+                end
+                hold off;
+                obj.edgeArray(indices(i)) = edge;
+            end
+        end
+        
+        function arrowHead = displayArrowHead(obj,X,Y,Xarrow,Yarrow,arrowColor)   %#ok
+            % Displays the arrow head given the appropriate coordinates
+            % calculated via the calcPositions() function.
+            
+            arrowHead = patch('Faces'      ,[1,2,3]                                             ,...
+                'Vertices'  ,[Xarrow(1) Yarrow(1); Xarrow(2) Yarrow(2) ;X(2) Y(2)],...
+                'FaceColor' ,arrowColor);
+        end
+        
+        function [X,Y,Xarrow,Yarrow] = calcPositions(obj,edge)
+            % Helper function for displayEdges() - calculates edge and arrow
+            % start and end positions in data units.
+            X = [edge.from.xpos edge.to.xpos];
+            Y = [edge.from.ypos edge.to.ypos];
+            ratio = (Y(2) - Y(1))/(X(2)-X(1));
+            if(isinf(ratio))
+                ratio = realmax;
+            end
+            % dx:  x-distance from node1 center to perimeter in direction of node2
+            % dy:  y-distance from node1 center to perimeter in direction of node2
+            % ddx: x-distance from node1 perimeter to base of arrow head
+            % ddy: y-distance from node1 perimeter to base of arrow head
+            % dpx: x-offset away from edge in perpendicular direction, for arrow head
+            % dpy: y-offset away from edge in perpendicular direction, for arrow head
+            
+            arrowSize = obj.maxNodeSize/10;
+            [dx,dy] = pol2cart(atan(ratio),edge.from.width/2);
+            [ddx,ddy] = pol2cart(atan(ratio),arrowSize);
+            ratio = 1/ratio; % now work out perpendicular directions.
+            if(isinf(ratio))
+                ratio = realmax;
+            end
+            [dpx dpy] = pol2cart(atan(ratio),arrowSize/2);
+            ddx = abs(ddx); ddy = abs(ddy); dpx = abs(dpx); dpy = abs(dpy);
+            dx = abs(dx); dy = abs(dy);
+            if(X(1) < X(2))
+                X(1) = X(1) + dx; X(2) = X(2) - dx;
+            else
+                X(1) = X(1) - dx; X(2) = X(2) + dx;
+            end
+            if(Y(1) < Y(2))
+                Y(1) = Y(1) + dy; Y(2) = Y(2) - dy;
+            else
+                Y(1) = Y(1) - dy; Y(2) = Y(2) + dy;
+            end
+            if(X(1) <= X(2) && Y(1) <= Y(2))
+                Xarrow(1) = X(2) - ddx - dpx; Xarrow(2) = X(2) - ddx + dpx;
+                Yarrow(1) = Y(2) - ddy + dpy; Yarrow(2) = Y(2) - ddy - dpy;
+            elseif(X(1) <= X(2) && Y(1) >= Y(2))
+                Xarrow(1) = X(2) - ddx - dpx; Xarrow(2) = X(2) - ddx + dpx;
+                Yarrow(1) = Y(2) + ddy - dpy; Yarrow(2) = Y(2) + ddy + dpy;
+            elseif(X(1) >= X(2) && Y(1) <= Y(2))
+                Xarrow(1) = X(2) + ddx - dpx; Xarrow(2) = X(2) + ddx + dpx;
+                Yarrow(1) = Y(2) - ddy - dpy; Yarrow(2) = Y(2) - ddy + dpy;
+            else % (X(1) >= (X(2) && Y(1) >= Y(2))
+                Xarrow(1) = X(2) + ddx - dpx; Xarrow(2) = X(2) + ddx + dpx;
+                Yarrow(1) = Y(2) + ddy + dpy; Yarrow(2) = Y(2) + ddy - dpy;
+            end
+        end
+        
+        function addButtons(obj)
+            % Add user interface buttons.
+            if(~isempty(obj.toolbar))
+                if(ishandle(obj.toolbar))
+                    delete(obj.toolbar);
+                    obj.toolbar = [];
+                end
+            end
+            obj.toolbar = uitoolbar(obj.fig);
+            
+            % button icons
+            load glicons;
+            
+            uipushtool(obj.toolbar,...
+                'ClickedCallback'   ,@obj.decreaseFontSize,...
+                'TooltipString'     ,'Decrease Font Size',...
+                'CData'             ,icons.downblue);
+            
+            uipushtool(obj.toolbar,...
+                'ClickedCallback'   ,@obj.increaseFontSize,...
+                'TooltipString'     ,'Increase Font Size',...
+                'CData'             ,icons.upblue);
+            
+            uipushtool(obj.toolbar,...
+                'ClickedCallback'   ,@obj.tightenAxes,...
+                'TooltipString'     ,'Tighten Axes',...
+                'CData'             ,icons.expand);
+            
+            uipushtool(obj.toolbar,...
+                'ClickedCallback' ,@obj.flip,...
+                'TooltipString'   ,'Flip/Reset Layout',...
+                'CData'           , icons.flip);
+            
+            uipushtool(obj.toolbar,...
+                'ClickedCallback' ,@obj.shrinkNodes,...
+                'TooltipString'   ,'Decrease Node Size',...
+                'CData'           , icons.downdarkblue);
+            
+            uipushtool(obj.toolbar,...
+                'ClickedCallback' ,@obj.growNodes,...
+                'TooltipString'   ,'Increase Node Size',...
+                'CData'           , icons.updarkblue);
+            
+            if(~isempty(obj.layoutButtons))
+                for i=1:numel(obj.layoutButtons)
+                    if(ishandle(obj.layoutButtons(i)))
+                        delete(obj.layoutButtons(i));
+                    end
+                end
+                obj.layoutButtons = [];
+            end
+            
+            layoutNames = fieldnames(obj.layouts);
+            for i=1:numel(layoutNames)
+                layout = obj.layouts.(layoutNames{i});
+                layoutButton = uipushtool(obj.toolbar,...
+                    'ClickedCallback', @obj.layoutButtonPushed,...
+                    'TooltipString', layout.shortDescription,...
+                    'UserData'     , layoutNames{i},...
+                    'Separator'    , 'on',...
+                    'CData'        , layout.image);
+                obj.layoutButtons = [obj.layoutButtons,layoutButton];
+            end
+        end
+        
+        function setFontSize(obj)
+            % fontsize = obj.maxFontSize;
+            fontSize = 20;
+            maxchars = size(char(obj.nodeLabels),2);
+            width = obj.nodeArray(1).width;
+            height = obj.nodeArray(1).height;
+            xpos = -10; ypos = -10;
+            t = text(xpos,ypos,repmat('g',1,maxchars),...
+                'FontUnits'           , 'points'    ,...
+                'Units'               , 'data'      ,...
+                'HorizontalAlignment' , 'center'    ,...
+                'VerticalAlignment'   , 'middle'    ,...
+                'FontWeight'          , 'demi'      ,...
+                'LineStyle'           , 'none'      ,...
+                'Margin'              , 0.01        ,...
+                'FontSize'            , fontSize    ,...
+                'Color'               , 'w'         );
+            
+            extent = get(t,'Extent');
+            
+            while(extent(3) > width || extent(4) > height)
+                fontSize = fontSize - 1;
+                if(fontSize < 2), break,end
+                set(t,'FontSize',fontSize);
+                extent = get(t,'Extent');
+            end
+            obj.fontSize = fontSize;
+            
+        end
+        
+        function asp = aspectRatio(obj)
+            % Return the current aspect ratio of the figure, width/height
+            
+            units = get(obj.ax,'Units');
+            set(obj.ax,'Units','pixels');
+            pos = get(obj.ax,'Position');
+            set(obj.ax,'Units',units);
+            asp = (pos(3)/pos(4));
+            
+        end
+        
+        function paperCrop(obj)
+            % Make the papersize the same as the the figure size. This is
+            % useful when saving as pdf.
+            units = get(obj.fig,'Units');
+            set(obj.fig,'Units','inches');
+            pos = get(obj.fig,'Position');
+            set(obj.fig,'Units',units);
+            set(obj.fig,'PaperPositionMode','auto','PaperSize',pos(3:4));
+        end
+        %%
+        % Callbacks
+        
+        function layoutButtonPushed(obj,buttonPushed,varargin)
+            % Called when a layout button is pushed.
+            name = get(buttonPushed,'UserData');
+            obj.currentLayout = obj.layouts.(name);
+            axis square;
+            obj.redraw;
+        end
+        
+        function windowResized(obj,varargin)
+            % This function is called whenever the window is resized. It
+            % redraws the whole graph.
+            if(obj.isvisible)
+                obj.redraw;
+                obj.paperCrop();
+            end
+            
+        end
+        
+        function mouseMoved(obj,varargin)
+            % This function is called whenever the mouse moves within the
+            % figure.
+            if(obj.groupSelectionMode == 2)
+                % Move all of the nodes & rectangle
+                currentPoint = get(obj.ax,'CurrentPoint');
+                xlimits = get(obj.ax,'XLim');
+                ylimits = get(obj.ax,'YLim');
+                sdims = obj.groupSelectedDims;
+                xdiff = currentPoint(1,1) - obj.previousMouseLocation(1,1);
+                ydiff = currentPoint(1,2) - obj.previousMouseLocation(1,2);
+                
+                if(xdiff <=0)
+                    xdiff = max(xdiff,(xlimits(1)-sdims(1)));
+                else
+                    xdiff = min(xdiff,xlimits(2)-sdims(2));
+                end
+                if(ydiff <=0)
+                    ydiff = max(ydiff,(ylimits(1)-sdims(3)));
+                else
+                    ydiff = min(ydiff,ylimits(2)-sdims(4));
+                end
+                xnodepos = vertcat(obj.groupSelectedNodes.xpos) + xdiff;
+                ynodepos = vertcat(obj.groupSelectedNodes.ypos) + ydiff;
+                for i=1:numel(obj.groupSelectedNodes)
+                    obj.groupSelectedNodes(i).move(xnodepos(i),ynodepos(i));
+                end
+                recpos = get(obj.groupSelectedRect,'Position');
+                recpos(1) = recpos(1) + xdiff;
+                recpos(2) = recpos(2) + ydiff;
+                obj.groupSelectedDims = [recpos(1),recpos(1)+recpos(3),recpos(2),recpos(2)+recpos(4)];
+                set(obj.groupSelectedRect,'Position',recpos);
+                edges = [obj.groupSelectedNodes.inedges,obj.groupSelectedNodes.outedges];
+                obj.displayEdges(edges);
+                obj.previousMouseLocation = currentPoint;
+            else
+                if(isempty(obj.selectedNode)), return,end
+                currentPoint = get(obj.ax,'CurrentPoint');
+                x = currentPoint(1,1); y = currentPoint(1,2);
+                xl = xlim + [obj.selectedNode.width,-obj.selectedNode.width]/2;
+                yl = ylim + [obj.selectedNode.height,-obj.selectedNode.height]/2;
+                x = min(max(xl(1),x),xl(2));
+                y = min(max(yl(1),y),yl(2));
+                obj.selectedNode.move(x,y);
+                obj.displayEdges([obj.selectedNode.inedges,obj.selectedNode.outedges]);
+            end
+        end
+        
+        function buttonUp(obj,varargin)
+            % This function executes when the mouse button is released.
+            if(obj.groupSelectionMode == 2)
+                obj.clearGroupSelection();
+                return;
+            end
+            if(isempty(obj.selectedNode)),return,end
+            obj.selectedNode.deselect();
+            
+            obj.selectedNode.useFullLabel = false;
+            obj.selectedNode.fontSize = obj.selectedFontSize;
+            obj.selectedNode.redraw();
+            obj.selectedNode = [];
+            set(gcf,'Pointer','arrow');
+        end
+        
+        function axPressed(obj,varargin)
+            % Called when the user selects the axes but not a node
+            switch obj.groupSelectionMode
+                case 0         % hasn't been selected yet
+                    xpos = vertcat(obj.nodeArray.xpos);
+                    ypos = vertcat(obj.nodeArray.ypos);
+                    p1 = get(obj.ax,'CurrentPoint');
+                    rbbox;               % returns after box drawn
+                    p2 = get(obj.ax,'CurrentPoint');
+                    xleft  = min(p1(1,1),p2(1,1));
+                    xright = max(p1(1,1),p2(1,1));
+                    ylower = min(p1(1,2),p2(1,2));
+                    yupper = max(p1(1,2),p2(1,2));
+                    selectedX = (xpos <= xright) & (xpos >= xleft);
+                    selectedY = (ypos <= yupper) & (ypos >= ylower);
+                    selected = selectedX & selectedY;
+                    if(~any(selected)),return,end
+                    obj.groupSelectionMode = 1;
+                    obj.groupSelectedNodes = obj.nodeArray(selected);
+                    for i=1:numel(obj.groupSelectedNodes)
+                        node = obj.groupSelectedNodes(i);
+                        node.select();
+                        node.redraw();
+                    end
+                    
+                    w = obj.groupSelectedNodes(1).width/2;
+                    h = obj.groupSelectedNodes(1).height/2;
+                    x = vertcat(obj.groupSelectedNodes.xpos);
+                    y = vertcat(obj.groupSelectedNodes.ypos);
+                    minx = min(x)-w; maxx = max(x)+w; miny = min(y)-h; maxy = max(y)+h;
+                    obj.groupSelectedDims = [minx,maxx,miny,maxy];
+                    obj.groupSelectedRect = rectangle('Position',[minx,miny,maxx-minx,maxy-miny],'LineStyle','--','EdgeColor','r');
+                case 1         % nodes selected
+                    obj.groupSelectionStage1();
+                case 2         %not ever reached in this function
+                    obj.clearGroupSelection();
+            end
+        end
+        
+        function groupSelectionStage1(obj)
+            % Called after a group of nodes has been selected and the mouse
+            % button has been pressed somewhere on the axes, (or on a node).
+            p = get(obj.ax,'CurrentPoint');
+            obj.previousMouseLocation = p;
+            dims = obj.groupSelectedDims;
+            if(p(1,1) >= dims(1) && p(1,1) <= dims(2) && p(1,2) >= dims(3) && p(1,2) <=dims(4))
+                set(gcf,'Pointer','hand');
+                obj.groupSelectionMode = 2;
+            else
+                obj.clearGroupSelection();
+            end
+        end
+        
+        function clearGroupSelection(obj)
+            % Clear a group selection
+            if(ishandle(obj.groupSelectedRect))
+                delete(obj.groupSelectedRect);
+            end
+            obj.groupSelectedRect = [];
+            for i=1:numel(obj.groupSelectedNodes)
+                obj.groupSelectedNodes(i).deselect();
+            end
+            obj.groupSelectedNodes = [];
+            obj.groupSelectedDims = [];
+            obj.groupSelectionMode = 0;
+            set(gcf,'Pointer','arrow');
+        end
+        
+        function deleted(obj,varargin)
+            % Called when the figure is deleted by the user.
+            obj.isvisible = false;
+            obj.clearGroupSelection();
+        end
+        
+        function singleClick(obj,node)
+            % Called when a user single clicks on a node.
+            obj.selectedNode = node;
+            node.select();
+            set(gcf,'Pointer','hand');
+            obj.selectedFontSize = node.fontSize;
+            node.useFullLabel = true;
+            node.fontSize = max(15,node.fontSize*1.5);
+            node.redraw();
+        end
+        
+        function doubleClick(obj,node)
+            % Called when a user double clicks on a node
+            if isempty(obj.doubleClickFn)
+                description = node.description;
+                if(~iscell(description))
+                    description = {description};
+                end
+                answer = inputdlg('',node.label,4,description);
+                if(~isempty(answer))
+                    node.description = answer;
+                end
+            else
+                obj.doubleClickFn(node.label);
+            end
+        end
+        
+        function rightClick(obj,node)                 %#ok
+            % Called when a user right clicks on a node
+            if(node.isshaded)
+                node.unshade();
+            else
+                node.shade();
+            end
+        end
+        
+        function shiftClick(obj,node)                 %#ok
+            % Called when a user shift clicks on a node
+            display(node);
+        end
+        
+        
+    end
+    
+    methods
+        % Callbacks that can be called by the user programmatically.
+        function shrinkNodes(obj,varargin)
+            % Shrink the nodes to 95% of their original size, (but not smaller
+            % than a calculated minimum.
+            obj.clearGroupSelection();
+            s = max(0.8*obj.nodeArray(1).width,obj.minNodeSize);
+            obj.nodeArray(1).resize(s);
+            obj.setFontSize();
+            for i=1:obj.nnodes
+                node = obj.nodeArray(i);
+                node.fontSize = obj.fontSize;
+                node.resize(s);
+            end
+            obj.displayEdges();
+        end
+        
+        function growNodes(obj,varargin)
+            % Grow the nodes to 1/0.95 times their original size, (but not
+            % larger than a calculated maximum.
+            obj.clearGroupSelection();
+            s = min(obj.nodeArray(1).width/0.8,1.5*obj.maxNodeSize);
+            obj.nodeArray(1).resize(s);
+            obj.setFontSize();
+            for i=1:obj.nnodes
+                node = obj.nodeArray(i);
+                node.fontSize = obj.fontSize;
+                node.resize(s);
+            end
+            obj.displayEdges();
+        end
+        
+        function increaseFontSize(obj,varargin)
+            % Increase the fontsize of all the nodes by 0.5 points.
+            current = get(obj.nodeArray(1).labelhandle,'FontSize');
+            newsize = current + 1;
+            for i=1:numel(obj.nodeArray)
+                node = obj.nodeArray(i);
+                node.fontSize = newsize;
+                node.redraw();
+            end
+        end
+        
+        function decreaseFontSize(obj,varargin)
+            % Decrease the fontsize of all the nodes by 0.5 points.
+            current = get(obj.nodeArray(1).labelhandle,'FontSize');
+            newsize = max(current - 1,1);
+            for i=1:numel(obj.nodeArray)
+                node = obj.nodeArray(i);
+                node.fontSize = newsize;
+                node.redraw();
+            end
+        end
+        
+        function XY = getNodePositions(obj)
+            % Return the current positions of the nodes. The bottom left
+            % corner is [0 0] and the top right is [1 1]. Node positions
+            % refer to the centre of a node.
+            XY = zeros(obj.nnodes, 2);
+            for i=1:obj.nnodes
+                XY(i, 1) = obj.nodeArray(i).xpos;
+                XY(i, 2) = obj.nodeArray(i).ypos;
+            end
+        end
+        
+        function setNodePositions(obj, XY)
+            % Programmatically set the node positions
+            % XY(i, 1) is the xposition of node i, XY(i, 2) is the yposition.
+            for i=1:obj.nnodes
+                obj.nodeArray(i).move(XY(i, 1), XY(i, 2));
+            end
+            obj.displayGraph();
+        end
+        
+        function moveNode(obj, nodeIndex, xpos, ypos)
+            % Programmatically set a node position.
+            obj.nodeArray(nodeIndex).move(xpos, ypos);
+            obj.displayGraph();
+        end
+        
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/graphViz4MatlabRoot.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+function r = graphViz4MatlabRoot()
+% Return directory name where graphlayout is stored
+[pathstr,name,ext,versn] = fileparts(which(mfilename));
+r = pathstr;
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/layouts/Abstractlayout.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+classdef Abstractlayout < handle
+% This class represents an abstract graph layout. Subclass to create actual
+% layouts.  
+
+  properties(Abstract = true)
+     xmin;               % The left most point on the graph axis in data units           
+     xmax;               % The right most point on the graph axis in data units
+     ymin;               % The bottom most point on the graph axis in data units
+     ymax;               % The top most point on the graph axis in data units
+     adjMatrix;          % The adjacency matrix
+     maxNodeSize;        % The maximum diameter of a node in data units
+     image;              % A 20-by-20-by-3 array specifying an image for 
+                         % the smartgraph button that will launch this
+                         % layout.
+     name;               % A unique name for instances of this class. 
+     shortDescription;   % A short description used for tooltips.
+     nodeSize;           % The calculated node size, call dolayout() before accessing
+     centers;            % The calculated node centers in an n-by-2 matrix
+  end
+    
+   methods
+       function dolayout(obj,adjMatrix,graphAxis,maxNodeSize)
+       % Calculate the node centers and an optimal size
+            obj.adjMatrix = adjMatrix;
+            obj.maxNodeSize = maxNodeSize;
+            xlimits = get(graphAxis,'XLim');
+            ylimits = get(graphAxis,'YLim');
+            obj.xmin = xlimits(1); obj.xmax = xlimits(2);
+            obj.ymin = xlimits(1); obj.ymax = ylimits(2);
+            obj.calcLayout();
+       end
+       
+       function available = isavailable(obj)
+       % Test to see if this layout is available.    
+           available = true;
+       end
+       
+   end
+   
+   methods(Access = 'protected')
+      
+       function setImage(obj,color)
+       % Sets the image to a grid with the specified color in rgb normalized
+       % units, i.e. [0.2 0.5 0.9].
+            obj.image = cat(3,color(1)*ones(20,20),color(2)*ones(20,20),color(3)*ones(20,20));
+            obj.image(1:4:20,:,:) = 0;
+            obj.image(:,1:4:20,:) = 0;
+       end
+       
+       
+   end
+   
+   methods(Abstract = true, Access = 'protected')
+       calcLayout(obj);     % do the actual work
+   end
+    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/layouts/Circlelayout.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,54 @@
+classdef Circlelayout < Abstractlayout
+% A simple layout which places node onto a scaled unit circle. 
+%
+% Matthew Dunham
+% University of British Columbia 
+     properties
+        xmin;               % The left most point on the graph axis in data units           
+        xmax;               % The right most point on the graph axis in data units
+        ymin;               % The bottom most point on the graph axis in data units
+        ymax;               % The top most point on the graph axis in data units
+        adjMatrix;          % The adjacency matrix
+        maxNodeSize;        % The maximum diameter of a node in data units
+        image;              % An image for the button that will lanuch this layout
+        name;               % A unique name for instances of this class
+        shortDescription;   % A description for use in the tooltips
+        nodeSize;           % The calculated node size, call dolayout() before accessing
+        centers;            % The calculated node centers in an n-by-2 matrix
+     end
+    
+     methods     
+         function obj = Circlelayout(name)
+         % constructor
+            if(nargin < 1)
+                obj.name = 'circlelayout';
+            else
+                obj.name = name;
+            end
+            load glicons;
+            obj.image = icons.circle;
+            obj.shortDescription = 'Simple Circle Layout'; 
+         end
+     end
+     
+     methods(Access = 'protected')
+       
+        function calcLayout(obj)
+            nnodes = size(obj.adjMatrix,1);
+            step = 2*pi/(nnodes);
+            t = 0:step:2*pi;
+            x = 0.4*sin(t)+0.5;
+            y = 0.4*cos(t)+0.5;
+           
+            x = obj.xmin + x ./ (obj.xmax - obj.xmin);
+            y = obj.ymin + y ./ (obj.ymax - obj.ymin);
+            obj.centers = [x',y'];
+            d = sqrt((x(2)- x(1))^2 + (y(2) - y(1))^2);
+            obj.nodeSize = min(2*d/3,obj.maxNodeSize);
+        end
+    
+     end
+    
+    
+    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/layouts/Circularlayout.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+classdef Circularlayout < Gvizlayout
+% A layout that also uses graphviz but calls twopi instead of neato to 
+% to display the graph like a tree. 
+%
+% Matthew Dunham
+% University of British Columbia 
+% http://www.cs.ubc.ca/~mdunham/  
+    methods
+       function obj = Circularlayout(name)
+            if(nargin < 1)
+                obj.name = 'circularlayout';
+            else
+                obj.name = name;
+            end
+            load glicons;
+            obj.image = icons.circular;
+            obj.shortDescription = 'Circular Layout (GraphViz)'; 
+       end
+       
+    end
+    
+    methods(Access = 'protected')
+      
+       function callGraphViz(obj)
+       % Call GraphViz to determine an optimal layout. Write this layout in
+       % layout.dot for later parsing. 
+           err = system(['circo -Tdot -Gmaxiter=5000 -Gstart=7 -o ',obj.layoutFile,' ',obj.adjFile]);
+           if(err),error('Sorry, unknown GraphViz failure, try another layout'); end
+       end
+      
+    end
+   
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/layouts/Gridlayout.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+classdef Gridlayout < Abstractlayout
+% Provides a simple, (naive) grid layout for Graphlayout.   
+% An uninitialized instance can be created to pass to the GraphLayout
+% constructor by just calling Gridlayout without any parameters, e.g.
+% Graphlayout('-adjMat',[0 1; 0 0], '-layout',Gridlayout);
+%
+% Matthew Dunham
+% University of British Columbia 
+% http://www.cs.ubc.ca/~mdunham/
+
+    properties
+        xmin;               % The left most point on the graph axis in data units           
+        xmax;               % The right most point on the graph axis in data units
+        ymin;               % The bottom most point on the graph axis in data units
+        ymax;               % The top most point on the graph axis in data units
+        adjMatrix;          % The adjacency matrix
+        maxNodeSize;        % The maximum diameter of a node in data units
+        image;              % An image for the button that will lanuch this layout
+        name;               % A unique name for instances of this class
+        shortDescription;   % A description for use in the tooltips
+        nodeSize;           % The calculated node size, call dolayout() before accessing
+        centers;            % The calculated node centers in an n-by-2 matrix
+    end
+     
+    methods
+        function obj = Gridlayout(name)
+        
+        % constructor
+            if(nargin < 1)
+                obj.name = 'Gridlayout';
+            else
+                obj.name = name;
+            end
+            load glicons;
+            obj.image = icons.grid;
+            obj.shortDescription = 'Grid Layout';
+        end
+     
+    end
+    
+    
+    methods(Access = 'protected')
+       
+        function calcLayout(obj)
+            
+            nnodes = size(obj.adjMatrix,1);
+            obj.centers = zeros(nnodes,2);
+            xspacePerNode = (obj.xmax - obj.xmin)/ceil(sqrt(nnodes));
+            yspacePerNode = (obj.ymax - obj.ymin)/ceil(sqrt(nnodes));
+            obj.nodeSize = min(min([xspacePerNode,yspacePerNode]./2),obj.maxNodeSize);
+            xstart = obj.xmin + (xspacePerNode)/2;
+            ystart = obj.ymin + (yspacePerNode)/2;
+            counter = 1;
+            for ypos=1:ceil(sqrt(nnodes))
+                if(counter > nnodes),break,end
+                for xpos=1:ceil(sqrt(nnodes))
+                    obj.centers(counter,1) = xstart + (xpos-1)*xspacePerNode;
+                    obj.centers(counter,2) = ystart + (ypos-1)*yspacePerNode;
+                    positions(ypos,xpos) = counter; %#ok
+                    counter = counter + 1;
+                end
+            end
+            
+            %swap out the center node for the node with the most edges,
+            %(total of in and out). 
+            edgeCounts = sum(obj.adjMatrix,1)' + sum(obj.adjMatrix,2);
+            [vals ndx] = sort(edgeCounts,'descend');
+            c = positions(ceil(size(positions,1)/2),ceil(size(positions,2)/2));
+            if(c ~= 0)
+                store = obj.centers(c,:);
+                obj.centers(c,:) = obj.centers(ndx(1),:);
+                obj.centers(ndx(1),:) = store;
+            end
+            
+        end
+        
+        
+    end
+    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/layouts/Gvizlayout.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,142 @@
+classdef Gvizlayout < Abstractlayout
+% Use the graphVIZ package to determine the optimal layout for a graph.
+%
+% Matthew Dunham
+% University of British Columbia 
+% http://www.cs.ubc.ca/~mdunham/
+   properties
+     xmin;               % The left most point on the graph axis in data units           
+     xmax;               % The right most point on the graph axis in data units
+     ymin;               % The bottom most point on the graph axis in data units
+     ymax;               % The top most point on the graph axis in data units
+     adjMatrix;          % The adjacency matrix
+     maxNodeSize;        % The maximum diameter of a node in data units
+     image;              % An image for the button that will lanuch this layout
+     name;               % A unique name for instances of this class. 
+     shortDescription;   % A short descriptions used in tooltips.
+     nodeSize;           % The calculated node size, call dolayout() before accessing
+     centers;            % The calculated node centers in an n-by-2 matrix
+   end
+    
+   properties(GetAccess = 'protected', SetAccess = 'protected')
+        layoutFile = 'layout.dot';
+        adjFile   =  'adjmat.dot';
+   end
+    
+   methods
+     
+       function obj = Gvizlayout(name)
+       % constructor
+            if(nargin < 1)
+                obj.name = 'Gvizlayout';
+            else
+                obj.name = name;
+            end
+            load glicons;
+            obj.image = icons.energy;
+            obj.shortDescription = 'Minimum Energy Layout (GraphViz)';
+       end
+       
+       function available = isavailable(obj)
+        % Make sure graphViz is available. 
+            available = Gvizlayout.queryGviz('neato');
+            if(not(available))
+                  fprintf('Please install or upgrade graphViz\n');
+            end
+        end
+       
+       
+   end
+
+   
+   methods(Access = 'protected')
+       
+       function calcLayout(obj)
+       % Have graphViz calculate the layout
+          obj.writeDOTfile();
+          obj.callGraphViz();
+          obj.readLayout();
+          obj.cleanup();
+       end
+      
+       function writeDOTfile(obj)
+       % Write the adjacency matrix into a dot file that graphViz can
+       % understand. 
+            fid = fopen('adjmat.dot','w');
+            fprintf(fid,'digraph G {\ncenter = 1;\nsize="10,10";\n');
+            n = size(obj.adjMatrix,1);
+            for i=1:n, fprintf(fid,'%d;\n',i); end
+            edgetxt = ' -> ';
+            for i=1:n
+                for j=1:n
+                   if(obj.adjMatrix(i,j))
+                      fprintf(fid,'%d%s%d;\n',i,edgetxt,j);
+                   end
+                end 
+            end
+            fprintf(fid,'}');
+            fclose(fid);
+       end
+       
+       function callGraphViz(obj)
+       % Call GraphViz to determine an optimal layout. Write this layout in
+       % layout.dot for later parsing. 
+           err = system(['neato -Tdot -Gmaxiter=5000 -Gstart=7 -o ',obj.layoutFile,' ',obj.adjFile]);
+           if(err),error('Sorry, unknown GraphViz failure, try another layout'); end
+       end
+       
+       function readLayout(obj)
+       % Parse the layout.dot file for the graphViz node locations and 
+       % dimensions. 
+            fid = fopen(obj.layoutFile,'r');
+            text = textscan(fid,'%s','delimiter','\n'); 
+            fclose(fid);
+            text = text{:};
+            [start,dims] = strtok(text{cellfun(@(x)~isempty(x),strfind(text,'graph [bb="'))},'"');
+            dims = textscan(strtok(dims,'"'),'%n','delimiter',',');
+            dims = dims{:}';
+            text(cellfun(@(x)~isempty(x),strfind(text,' -> ')))=[]; % delete edge info, we don't need it
+            text(cellfun(@(x)isempty(x),strfind(text,'pos')))=[];   % keep only positions
+            [start,remaining] = strtok(text,'"');
+            [locations,remaining] = strtok(remaining,'"');
+            locations = cellfun(@(str)textscan(str,'%n','delimiter',','),locations,'UniformOutput',false);
+            locations = [locations{:}];
+            locations = [locations{:}]';
+            obj.scaleLocations(locations,dims);
+       end
+       
+       function scaleLocations(obj,locations,graphVizDims)
+       % Scale the graphViz node locations to the smartgraph dimensions and
+       % set the node size. 
+            dims = graphVizDims; loc = locations;
+            loc(:,1) = (loc(:,1)-dims(1)) ./ (dims(3)-dims(1))*(obj.xmax - obj.xmin) + obj.xmin;
+            loc(:,2) = (loc(:,2)-dims(2)) ./ (dims(4)-dims(2))*(obj.ymax - obj.ymin) + obj.ymin;
+            obj.centers = loc;
+            
+            a = min(abs(loc(:,1) - obj.xmin));
+            b = min(abs(loc(:,1) - obj.xmax));
+            c = min(abs(loc(:,2) - obj.ymin));
+            d = min(abs(loc(:,2) - obj.ymax));
+            obj.nodeSize = min(2*min([a,b,c,d]),obj.maxNodeSize);
+            
+       end
+       
+       function cleanup(obj)
+       % delete the temporary files. 
+           delete(obj.adjFile);
+           delete(obj.layoutFile);
+       end
+       
+   end
+  
+   methods(Access = 'protected',Static = true)
+      
+       function available = queryGviz(name)
+            err = system([name,' -V']);
+            available = ~err;
+       end
+       
+   end
+   
+ 
+end % end of graphVIZlayout class
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/layouts/Radiallayout.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+classdef Radiallayout < Gvizlayout
+% A layout that also uses graphviz but calls twopi instead of neato to 
+% to display the graph like a tree. 
+%
+% Matthew Dunham
+% University of British Columbia 
+% http://www.cs.ubc.ca/~mdunham/  
+    methods
+       function obj = Radiallayout(name)
+            if(nargin < 1)
+                obj.name = 'Radiallayout';
+            else
+                obj.name = name;
+            end
+            load glicons;
+            obj.image = icons.radial;
+            obj.shortDescription = 'Radial Layout (GraphViz)'; 
+       end
+       
+        function available = isavailable(obj)
+        % Make sure graphViz is available. 
+            available = Gvizlayout.queryGviz('twopi');
+            if(not(available))
+                   fprintf('Please install or upgrade graphViz\n');
+            end
+        end
+       
+    end
+    
+    methods(Access = 'protected')
+      
+       function callGraphViz(obj)
+       % Call GraphViz to determine an optimal layout. Write this layout in
+       % layout.dot for later parsing. 
+           err = system(['twopi -Tdot -Gmaxiter=5000 -Gstart=7 -o ',obj.layoutFile,' ',obj.adjFile]);
+           if(err),error('Sorry, unknown GraphViz failure, try another layout'); end
+       end
+       
+      
+      
+    end
+   
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/layouts/Randlayout.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,134 @@
+classdef Randlayout < Abstractlayout
+% A greedy, random layout - gives a different layout each time its called. 
+% Matthew Dunham
+% University of British Columbia 
+% http://www.cs.ubc.ca/~mdunham/
+
+     properties
+        xmin;               % The left most point on the graph axis in data units           
+        xmax;               % The right most point on the graph axis in data units
+        ymin;               % The bottom most point on the graph axis in data units
+        ymax;               % The top most point on the graph axis in data units
+        adjMatrix;          % The adjacency matrix
+        maxNodeSize;        % The maximum diameter of a node in data units
+        image;              % An image for the button that will lanuch this layout
+        name;               % A unique name for instances of this class
+        shortDescription;   % A description for use in the tooltips
+        nodeSize;           % The calculated node size, call dolayout() before accessing
+        centers;            % The calculated node centers in an n-by-2 matrix
+        seed;               % The seed used to generate the last layout. 
+     end
+    
+    
+     
+     methods
+         
+         function obj = Randlayout(name,seed)
+         % constructor - seed is optional. 
+            if(nargin < 1)
+                obj.name = 'Randlayout';
+            else
+                obj.name = name;
+            end
+            if(nargin < 2)
+                seed = 31;
+            end
+            obj.seed = seed;
+            load glicons
+            obj.image = icons.random;
+            obj.shortDescription = 'Random Greedy Layout';
+             
+         end
+     end
+     
+     methods(Access = 'protected')
+       
+         function calcLayout(obj)
+             rand('twister',obj.seed); randn('state',obj.seed);
+             obj.seed = obj.seed + 1;
+             nnodes = size(obj.adjMatrix,1);
+             obj.nodeSize = min(obj.maxNodeSize,2*(obj.xmax-obj.xmin)/nnodes);
+             npoints = 25;
+             locdist = ones(npoints,npoints);
+             c = floor(0.4*npoints):ceil(0.6*npoints);
+             locdist(c,c) = 1.5;                 % slightly favour the center
+             locdist = locdist./sum(locdist(:)); % discrete distribution over locations
+             locations = zeros(nnodes,2);        % holds indices into locdist
+             nsize = ceil(npoints*(obj.nodeSize/2)/(obj.xmax - obj.xmin+obj.nodeSize));
+             for i=1:nnodes
+                while(true)
+                    [xcandidate,ycandidate] = obj.sample(locdist);
+                    [valid,locdist] = obj.isfree(xcandidate,ycandidate,locdist,nsize);
+                    if(valid)
+                       locations(i,:) = [xcandidate,ycandidate];
+                       locdist = obj.radiate(locdist,locations,npoints);
+                       break; 
+                    end
+                end
+             end
+             nedges = sum(obj.adjMatrix,1) + sum(obj.adjMatrix,2)';
+             [val,perm] = sort(nedges,'descend');
+             locations = locations(perm,:);
+             obj.mapLocationsToAxes(locations,npoints);
+         end
+         
+         function mapLocationsToAxes(obj,locations,npoints)
+         % Map sampled locations on a grid to actual points on the graph
+         % axes. 
+             xndx = locations(:,1); yndx = locations(:,2);
+             xmin = obj.xmin + obj.nodeSize/2;
+             xmax = obj.xmax - obj.nodeSize/2;
+             ymin = obj.ymin + obj.nodeSize/2;
+             ymax = obj.ymax - obj.nodeSize/2;
+             xstep = (xmax - xmin) /npoints;
+             ystep = (ymax - ymin) /npoints;
+             xpos = xmin+xstep:xstep:xmax;
+             ypos = ymin+ystep:ystep:ymax;
+             obj.centers =  [xpos(xndx)',ypos(yndx)'];
+         end
+         
+         function [valid,locdist2] = isfree(obj,xcandidate,ycandidate,locdist,nsize)
+         % Check if the sampled location is valid. Regardless, zero out the
+         % spot so that we don't sample from here again. 
+             xndx = max(1,xcandidate-nsize):min(xcandidate+nsize,size(locdist,2));
+             yndx = max(1,ycandidate-nsize):min(ycandidate+nsize,size(locdist,1));
+             nodeArea = locdist(xndx,yndx);
+             valid = all(nodeArea(:));
+             locdist2 = locdist;
+             locdist2(xndx,yndx) = 0;
+             locdist2 = locdist2 ./sum(locdist(:));
+         end
+         
+         function locdist = radiate(obj,locdist,locations,npoints)
+         % Update the location probability distribution.
+             n = nnz(locations(:,1));
+             loczeros = locdist == 0;
+             for i=1:n             
+                 [x y] = meshgrid(1:npoints,1:npoints);
+                 x = x(:); y = y(:);
+                 dist = sqrt((x-locations(i,1)).^2 + (y-locations(i,2)).^2);
+                 locdist = locdist +  reshape(dist,npoints,npoints)';       
+             end
+             locdist(loczeros) = 0;
+             locdist = locdist ./sum(locdist(:));
+         end
+ 
+        function [xndx,yndx] = sample(obj,dist)
+        % Sample a single value from the non-uniform discrete distribution. 
+            if(isnan(dist(1)))
+                perm = randperm(size(dist,1));
+                xndx = perm(1);
+                yndx = perm(2);
+                return;
+            end
+            r = rand;
+            cumprob = cumsum(dist(:));
+            s = sum(r > cumprob(1:end-1)) + 1;
+            [xndx,yndx] = ind2sub(size(dist),s);
+        end
+        
+     end
+    
+    
+    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/layouts/Springlayout.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+classdef Springlayout < Gvizlayout
+% A layout that also uses graphviz but calls twopi instead of neato to 
+% to display the graph like a tree. 
+%
+% Matthew Dunham
+% University of British Columbia 
+% http://www.cs.ubc.ca/~mdunham/  
+    methods
+       function obj = Springlayout(name)
+            if(nargin < 1)
+                obj.name = 'springlayout';
+            else
+                obj.name = name;
+            end
+            load glicons;
+            obj.image = icons.spring;
+            obj.shortDescription = 'Spring Layout (GraphViz)'; 
+       end
+       
+       function available = isavailable(obj)
+        % Make sure graphViz is available. 
+            available = Gvizlayout.queryGviz('fdp');
+            if(not(available))
+                 fprintf('Please install or upgrade graphViz\n');
+            end
+        end
+       
+    end
+    
+    methods(Access = 'protected')
+      
+       function callGraphViz(obj)
+       % Call GraphViz to determine an optimal layout. Write this layout in
+       % layout.dot for later parsing. 
+           err = system(['fdp -Tdot -Gmaxiter=5000 -Gstart=7 -o ',obj.layoutFile,' ',obj.adjFile]);
+           if(err),error('Sorry, unknown GraphViz failure, try another layout'); end
+       end
+       
+       
+      
+    end
+   
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/layouts/Treelayout.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+classdef Treelayout < Gvizlayout
+% A layout that also uses graphviz but calls dot instead of neato to 
+% to display the graph like a tree.
+%
+% Matthew Dunham
+% University of British Columbia 
+% http://www.cs.ubc.ca/~mdunham/
+  
+    methods
+       function obj = Treelayout(name)
+            if(nargin < 1)
+                obj.name = 'Treelayout';
+            else
+                obj.name = name;
+            end
+           %obj.setImage([0,153,102]/255);
+           load glicons;
+           obj.image = icons.tree;
+           obj.shortDescription = 'Tree Layout (GraphViz)'; 
+       end
+       
+       function available = isavailable(obj)
+        % Make sure graphViz is available. 
+            available = Gvizlayout.queryGviz('dot');
+            if(not(available))
+                 fprintf('Please install or upgrade graphViz\n');
+            end
+        end
+       
+    end
+    
+    methods(Access = 'protected')
+      
+       function callGraphViz(obj)
+       % Call GraphViz to determine an optimal layout. Write this layout in
+       % layout.dot for later parsing. 
+           err = system(['dot -Tdot -Gmaxiter=5000 -Gstart=7 -o ',obj.layoutFile,' ',obj.adjFile]);
+           if(err),error('Sorry, unknown GraphViz failure, try another layout'); end
+       end
+       
+       
+      
+    end
+    
+    
+   
+    
+    
+    
+    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/util/addtosystempath.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function addtosystempath(p)
+% Add p to the system path. If p is already on the path, this does nothing.  
+% Note, this change only persists for the duration of the Matlab session.
+% Do not include path delimiters like ; or : .
+% Example:
+% addtosystempath('C:\Users\matt\bin');
+    
+    if isempty(getenv('PATH')) || all(cellfun(@(c)isempty(c),strfind(tokenize(getenv('PATH'),pathsep()),p)));
+        setenv('PATH', [p, pathsep(), getenv('PATH'),]);
+    end
+    
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/util/adj2pajek2.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,86 @@
+function adj2pajek2(adj,filename, varargin)
+% ADJ2PAJEK2 Converts an adjacency matrix representation to a Pajek .net read format
+% adj2pajek2(adj, filename-stem, 'argname1', argval1, ...)
+%
+% Set A(i,j)=-1 to get a dotted line
+%
+% Optional arguments
+%
+%  nodeNames - cell array, defaults to {'v1','v2,...}
+%  shapes - cell array, defaults to {'ellipse','ellipse',...}
+%     Choices are 'ellipse', 'box', 'diamond', 'triangle', 'cross', 'empty'
+%  partition - vector of integers, defaults to [1 1 ... 1]
+%    This will automatically color-code the vertices by their partition
+%
+% Run pajek (available from http://vlado.fmf.uni-lj.si/pub/networks/pajek/)
+% Choose File->Network->Read from the menu
+% Then press ctrl-G (Draw->Draw)
+% Optional: additionally load the partition file then press ctrl-P (Draw->partition)
+%
+% Examples
+% A=zeros(5,5);A(1,2)=-1;A(2,1)=-1;A(1,[3 4])=1;A(2,5)=1;
+% adj2pajek2(A,'foo') % makes foo.net
+%
+% adj2pajek2(A,'foo','partition',[1 1 2 2 2]) % makes foo.net and foo.clu
+% 
+% adj2pajek2(A,'foo',...
+%            'nodeNames',{'TF1','TF2','G1','G2','G3'},...
+%            'shapes',{'box','box','ellipse','ellipse','ellipse'});
+%
+%
+% The file format is documented on p68 of the pajek manual
+% and good examples are on p58, p72
+%
+% Written by Kevin Murphy, 30 May 2007
+% Based on adj2pajek by Gergana Bounova
+% http://stuff.mit.edu/people/gerganaa/www/matlab/routines.html
+% Fixes a small bug (opens files as 'wt' instead of 'w' so it works in windows)
+% Also, simplified her code and added some features.
+
+N = length(adj);
+for i=1:N
+  nodeNames{i} = strcat('"v',num2str(i),'"');
+  shapes{i} = 'ellipse';
+end
+
+[nodeNames, shapes, partition] = process_options(varargin, ...
+    'nodeNames', nodeNames, 'shapes', shapes, 'partition', []);
+
+if ~isempty(partition)
+  fid = fopen(sprintf('%s.clu', filename),'wt','native'); 
+  fprintf(fid,'*Vertices  %6i\n',N);
+  for i=1:N
+    fprintf(fid, '%d\n', partition(i));
+  end
+  fclose(fid);
+end
+
+fid = fopen(sprintf('%s.net', filename),'wt','native'); 
+
+fprintf(fid,'*Vertices  %6i\n',N);
+for i=1:N
+  fprintf(fid,'%3i %s %s\n', i, nodeNames{i}, shapes{i});
+end
+
+%fprintf(fid,'*Edges\n');
+fprintf(fid,'*Arcs\n'); % directed
+for i=1:N
+  for j=1:N
+    if adj(i,j) ~= 0
+      fprintf(fid,' %4i   %4i   %2i\n',i,j,adj(i,j));
+    end
+  end
+end
+fclose(fid)
+
+
+if 0
+adj2pajek2(A,'foo',...
+            'nodeNames',{'TF1','TF2','G1','G2','G3'},...
+            'shapes',{'box','box','ellipse','ellipse','ellipse'});
+
+N = 100; part = ones(1,N); part(intersect(reg.tfidxTest,1:N))=2;
+G = reg.Atest(1:N, 1:N)';
+adj2pajek2(G, 'Ecoli100', 'partition', part)
+end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/util/findString.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function idx = findString(str, cellArray,ignoreCase)
+% Returns a boolean matrix the same size as cellArray with true everywhere
+% the corresponding cell holds the specified string, str. 
+    
+   if nargin < 3, ignoreCase = false; end
+   if ignoreCase, fn = @(c)strcmpi(c,str); else fn = @(c)strcmp(c,str); end
+   idx = cellfun(fn,cellArray);
+end
\ No newline at end of file
Binary file toolboxes/graph_visualisation/graphViz4Matlab/util/glicons.mat has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/util/graphViz4MatlabNode.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,298 @@
+classdef graphViz4MatlabNode < dynamicprops & hgsetget
+% This class represents a drawable node in an arbitrary graph.
+%
+% Public properties can be set using the standard Matlab set method as in
+% set(node,'curvature',[0,0],'linesytle','--','linecolor','g'). Call
+% node.redraw to redraw it after changing properties. 
+%
+% Nodes are not really designed to live on their own, they should be
+% aggregated into a graph object responsible for layout.
+%
+% Matthew Dunham
+% University of British Columbia 
+% http://www.cs.ubc.ca/~mdunham/
+    
+    properties
+        label;                      % displayed name for the node
+        splitLabel;                 % label split in the middle
+        useFullLabel    = false;    % if true, the full non-split label is used regardles of how long it is. 
+        description     = '';       % text displayed when you click on the node
+        curvature       = [1 1];    % curvature of the node, [1,1] = circle
+        lineStyle       = '-';      % line style for the node
+        lineWidth       = 2;        % line wdth for the node
+        inedges         = [];       % indices of edges in
+        outedges        = [];       % indices of edges out
+        fontSize        = 12;       % The font size for the node
+        showFullLabel  = false;     % If true, node labels are not split onto multiple lines regardelss of how long
+    end
+    
+    properties
+    % Color properties
+        lineColor       = 'k';       % line color for the node
+        selectedColor  = [1 1 0.7];  % face color when selected with mouse
+        faceColor       = [1 1 0.8]; % face color when not shaded  
+        shadedColor     = 'r';       % color when shaded, call shade() to shade
+        textColor       = 'k';       % label's text color
+        containingGraph = [];        % containing graph object
+        
+    end
+    
+    properties(GetAccess = 'public', SetAccess = 'protected')
+    % Read only properties
+        xpos            = 0;        % x-coordinate of node center relative to parent axes
+        ypos            = 0;        % y-coordinate of node center relative to parent axes
+        isvisible       = false;    % true iff the node is being displayed
+        isshaded        = false;    % is the node shaded or not? 
+        width           = 1;        % width in data units
+        height          = 1;        % height in data units
+    end
+    
+    properties(GetAccess = 'public', SetAccess = 'protected')
+    % Handles to underlying Matlab graphics objects    
+        rechandle       = [];       % handle to the underlying rectangle object
+        labelhandle     = [];       % handle to the underlying text object
+        parent          = [];       % handle to the parent axes object
+        isselected      = false;    % true iff, the node has been selected 
+    end
+    
+    methods
+       
+        function obj = graphViz4MatlabNode(label)
+         % Node Constructor
+            obj.label = label;
+            obj.setSplitLabel(label);
+            
+        end
+            
+        function draw(obj,parent)
+        % Draw the node on the specified parent axes. If no parent is
+        % specified, the current axis is used. 
+            if(obj.isvisible)
+                warning('GRAPHNODE:draw',['Node ',obj.label,' is already drawn, call redraw().']);
+                return;
+            end
+            if(nargin < 2)
+                if(isempty(obj.parent) || ~ishandle(obj.parent))
+                    obj.parent = gca;
+                end
+            else
+                obj.parent = parent;
+            end
+            obj.drawNode();
+            obj.setText();
+            obj.isvisible = true;
+        end
+        
+        function redraw(obj)
+        % Redraw the node, (must be called after node properties are
+        % changed).
+            if(obj.isvisible), obj.erase;end
+            obj.draw();
+        end
+        
+        function erase(obj)
+        % Erase the node but do not delete it
+           if(~obj.isvisible)
+              warning('GRAPHNODE:erase',['Node ',obj.label,' is already erased']);
+              return;
+           end
+           delete(obj.rechandle); 
+           delete(obj.labelhandle);
+           obj.rechandle = [];
+        end
+        
+        function shade(obj,color)
+        % Shade the node the specified color. The default color is used if 
+        % none given.
+           obj.isshaded = true;
+           if(nargin == 2)
+              obj.shadedColor = color; 
+           end
+           if(obj.isvisible)
+                set(obj.rechandle,'FaceColor',obj.shadedColor);
+           end
+        end
+        
+        function unshade(obj)
+        % Unshade the node
+           obj.isshaded = false;
+           if(obj.isvisible)
+                set(obj.rechandle,'FaceColor',obj.faceColor);
+           end
+        end
+        
+        function resize(obj,width,height)
+        % Resize the node by the specified proportion
+            if(nargin < 3)
+               if(~isempty(obj.containingGraph))
+                    height = width;
+                end
+            end
+            obj.width = width;
+            obj.height = height;
+            if(obj.isvisible), obj.redraw; end
+        end
+
+        function move(obj,x,y)
+        % Move the node's center to the new x,y coordinates, (relative to
+        % the parent axes.)
+            obj.xpos = x; obj.ypos = y;
+            if(obj.isvisible),obj.redraw;end
+        end
+        
+        function select(obj)
+        % Call this function to set the node in a selected state. 
+            obj.isselected = true;
+            if(obj.isvisible)
+                set(obj.rechandle,'faceColor',obj.selectedColor);
+            end
+        end
+        
+        
+        function deselect(obj)
+        % Call this function to deselect the node. 
+            obj.isselected = false;
+            if(obj.isvisible)
+                obj.redraw;
+            end
+        end
+        
+    end % end of public methods
+    
+    methods(Access = 'protected')
+        
+        function nodePressed(obj,varargin)
+        % This function is called whenever the node is pressed.   
+            if(~isempty(obj.containingGraph))
+               obj.containingGraph.nodeSelected(obj); 
+            end
+        end
+        
+        function nodeDeleted(obj)
+        % This function is called whenver the node is deleted, (perhaps
+        % because the figure window was closed for instance).
+            obj.isvisible = false;
+            obj.parent = [];
+        end
+       
+        function drawNode(obj)
+        % Draw the actual node    
+            recxpos = obj.xpos - obj.width/2;
+            recypos = obj.ypos - obj.height/2;
+            lineColor = obj.lineColor;
+            lineWidth = obj.lineWidth;
+            if(obj.isselected)
+                color = obj.selectedColor;
+                lineColor = 'r';
+                lineWidth = 1.5*lineWidth;
+            elseif(obj.isshaded)
+                color = obj.shadedColor;
+            else
+                color = obj.faceColor;
+            end
+            obj.rechandle = rectangle(...
+               'Parent'       ,obj.parent                              ,...
+               'Position'     ,[recxpos,recypos,obj.width,obj.height]  ,... 
+               'Curvature'    ,obj.curvature                           ,...
+               'LineWidth'    , lineWidth                                ,...
+               'LineStyle'    ,obj.lineStyle                           ,...
+               'EdgeColor'    ,lineColor                               ,...
+               'faceColor'    ,color                                   ,...
+               'DisplayName'  ,obj.label                               ,...
+               'Tag'          ,obj.label                               ,...
+               'ButtonDownFcn',@obj.nodePressed                        ,...
+               'UserData'     ,obj                                     ,...
+               'DeleteFcn'    ,@(varargin)obj.nodeDeleted()            );
+        end
+        
+        function setText(obj)
+        % Draw the node's label    
+            if((length(obj.label) < 10) || obj.useFullLabel || obj.showFullLabel)
+                label = obj.label;
+            else
+                label = obj.splitLabel;
+            end
+            obj.labelhandle = text(obj.xpos,obj.ypos,label            ,...
+                'FontUnits'           , 'points'                      ,...
+                'HitTest'             , 'off'                         ,...
+                'FontWeight'          , 'demi'                        ,...
+                'Margin'              , 0.01                          ,...
+                'HorizontalAlignment' , 'center'                      ,...
+                'BackGroundColor'     , 'none'                        ,...
+                'Selected'            , 'off'                         ,...
+                'VerticalAlignment'   , 'middle'                      ,...
+                'LineStyle'           , 'none'                        ,...
+                'FontSize'            , obj.fontSize                  ,...
+                'Color'               , obj.textColor                 );
+            if(obj.useFullLabel)
+               set(obj.labelhandle,'BackgroundColor',obj.selectedColor,'Margin',6,'EdgeColor','k','LineStyle','-');
+            end
+        end
+        
+        function resizeText(obj)
+          % Resize the text to fill the node (too slow for large graphs)
+           fontsize = obj.maxFontSize;
+           set(obj.labelhandle,'FontSize',fontsize);
+           extent = get(obj.labelhandle,'Extent');
+ 
+           while((extent(1) < (obj.xpos - obj.width/2)) || (extent(2)+(extent(4)) > (obj.ypos + obj.height/2)))
+                fontsize = 0.95*fontsize;
+                set(obj.labelhandle,'FontSize',fontsize);
+                extent = get(obj.labelhandle,'Extent');
+           end
+        end
+         
+        function setSplitLabel(obj,label)
+            
+            obj.splitLabel = splitString(label,8,10);
+          
+        end
+       
+    end % end of protected methods
+    
+end % end of graphnode class
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function S = splitString(varargin)
+% Split a string into multiple lines based on camel case.
+%
+% Inputs
+%
+% '-S'          the string to split
+% '-minSize'    does not split at all if length(S) < minSize
+% '-maxSize'    splits no matter what, (even if no camel case change) if length(S) > maxSize
+% '-center'     if true, [default], the string is center justified 
+% '-cellMode'   if true, a cell array of strings is returned, instead of a char array.
+
+    [S,minSize,maxSize,cellMode,center] = processArgs(varargin,'*+-S','','-minSize',8,'-maxSize',10,'-cellMode',false,'-center',true);
+
+    S = splitInTwo(S);
+    if center
+        S = strjust(S,'center');
+    end
+    if cellMode
+       S =  cellstr(S);
+    end
+  
+    function str = splitInTwo(str)
+    % recursively split a string into two based on camel case
+        isupper = isstrprop(str(2:end),'upper');
+        if(size(str,2) >= minSize && any(isupper))
+            first = find(isupper); first = first(1);
+            top = str(1:first);
+            bottom = str(first+1:end);
+            str = strvcat(splitInTwo(top),splitInTwo(bottom)); %#ok
+        elseif(size(str,2) > maxSize)
+            top = [str(1:floor(length(str)/2)),'-'];
+            bottom = str(floor(length(str)/2)+1:end);
+            str = strvcat(splitInTwo(top),splitInTwo(bottom)); %#ok
+        end
+    end 
+end
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/util/processArgs.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,346 @@
+function varargout = processArgs(userArgs, varargin)    
+% Process function arguments, allowing args to be passed by
+% the user either as name/value pairs, or positionally, or both. 
+%
+% This function also provides optional enforcement of required inputs, and 
+% optional type checking. Argument names must start with the '-'
+% character and not precede any positional arguments. 
+%
+% Matthew Dunham
+% University of British Columbia
+% Last updated January 14th, 2010
+%
+%% USAGE:
+%
+% [out1,out2,...,outN] = processArgs(userArgs ,...
+% '-name1' , default1                         ,...
+% '-name2' , default2                         ,...
+% '-nameN' , defaultN                         );
+% 
+% The 'userArgs' input is a cell array and in normal usage is simply the
+% varargin cell array from the calling function. It contains 0 to N values
+% or 0 to N name/value pairs. It may also contain a combination of
+% positional and named arguments as long as no named argument precedes a
+% positional one. 
+%
+% Note, this function is CASE INSENSITIVE. 
+%
+%% ENFORCING REQUIRED ARGUMENTS
+%
+% To ensure that certain arguments are passed in, (and error if not), add a
+% '*' character to the corresponding name as in
+%
+% [out1,...] = processArgs(userArgs,'*-name1',default1,...
+%
+%
+% Providing empty values, (e.g. {},[],'') for required arguments also
+% errors unless these were explicitly passed as named arguments. 
+%% TYPE CHECKING
+%
+% To enforce that the input type, (class) is the same type as the default
+% value, add a '+' character to the corresponding name as in
+%
+% [out1,...] = processArgs(userArgs,'+-name1',default1,...
+%
+% '+' and '*' can be combined as in
+%
+% [out1,...] = processArgs(userArgs,'*+-name1',default1,...
+%
+% or equivalently
+%
+% [out1,...] = processArgs(userArgs,'+*-name1',default1,...
+%% OTHER CONSIDERATIONS
+%
+% If the user passes in arguments in positional mode, and uses [], {}, or
+% '' as place holders, the default values are used in their place. When the
+% user passes in values via name/value pairs, this behavior does not
+% occur; the explicit value the user specified, (even if [], {}, '') is
+% always used. 
+%
+%% ADVANCED
+% The programmer must specify the same number of output arguments as
+% possible input arguments, OR exactly one output. If exactly one output
+% is used, the outputs are all bundled into a single cell array and
+% returned with each arg value preceded by its name. This can be useful for
+% relaying some or all of the arguments to subsequent functions as is done
+% with the extractArgs function.
+%
+%% DEPENDENCIES
+%
+% None
+%
+%% EXAMPLES
+% These are all valid usages. Note that here the first and second arguments
+% are required and the types of the second and fourth arguments are
+% checked. 
+%
+% outerFunction(obj,...
+%                 '-first'  , 1         ,...
+%                 '-second' , MvnDist() ,...
+%                 '-third'  , 22        ,...
+%                 '-fourth' , 10        ); 
+%
+% outerFunction(obj,'-fourth',3,'-second',MvnDist(),'-first',12);
+% outerFunction(obj,1,MvnDist(),3);
+% outerFunction(obj,1,MvnDist(),3,[]);                           
+% outerFunction(obj,'-first',1,'-second',DiscreteDist(),'-third',[]);
+% outerFunction(obj,1,MvnDist(),'-fourth',10);                           
+% 
+% 
+% function [a,b,c,d] = outerFunction(obj,varargin)
+%   [a,b,c,d] = processArgs(varargin ,...
+%   '*-first'       , []             ,...
+%   '*+-second'     , MvnDist()      ,...
+%   '-third'        , 18             ,...
+%   '+-fourth'      , 23             );
+% end 
+%%  CONSTANTS
+    PREFIX = '-';  % prefix that must precede the names of arguments. 
+    REQ    = '*';  % require the argument
+    TYPE   = '+';  % check the type of the arg against the default type
+    
+    % set to true for more exhaustive error checking or false for faster
+    % execution.
+    FULL_ERROR_CHECK = true; 
+
+%% PROCESS VARARGIN - PASSED BY PROGRAMMER
+    
+    %% Check Initial Inputs
+    if ~iscell(userArgs)                                                   ,throwAsCaller(MException('PROCESSARGS:noUserArgs','PROGRAMMER ERROR - you must pass in the user''s arguments in a cell array as in processArgs(varargin,''-name'',val,...)'));end
+    if isempty(varargin)                                                   ,throwAsCaller(MException('PROCESSARGS:emptyVarargin','PROGRAMMER ERROR - you have not passed in any name/default pairs to processArgs'));  end
+    %% Extract Programmer Argument Names and Markers
+    progArgNames  = varargin(1:2:end);
+    maxNargs  = numel(progArgNames);
+    required  = cellfun(@(c)any(REQ==c(1:min(3,end))),progArgNames);
+    typecheck = cellfun(@(c)any(TYPE==c(1:min(3,end))),progArgNames); 
+    if ~iscellstr(progArgNames)                                            ,throwAsCaller(MException('PROCESSARGS:notCellStr ',sprintf('PROGRAMMER ERROR - you must pass to processArgs name/default pairs'))); end
+    %% Remove * and + Markers
+    try
+    progArgNames(required | typecheck)  =    ...
+        cellfuncell(@(c)c(c~=REQ & c~=TYPE) ,...
+             progArgNames(required | typecheck));
+    catch ME
+       if strcmp(ME.identifier,'MATLAB:UndefinedFunction')
+                                                                           err = MException('PROCESSARGS:missingExternalFunctions','ProcessArgs requires the following external functions available in PMTK2: catString, cellfuncell, interweave, isprefix. Please add these to your MATLAB path.'); 
+           throw(addCause(err,ME));
+       else
+           rethrow(ME);
+       end
+    end
+    %% Set Default Values
+    defaults = varargin(2:2:end);
+    varargout = defaults;
+    %% Check Programmer Supplied Arguments
+    if mod(numel(varargin),2)                                              ,throwAsCaller(MException('PROCESSARGS:oddNumArgs',sprintf('PROGRAMMER ERROR - you have passed in an odd number of arguments to processArgs, which requires name/default pairs')));  end
+    if any(cellfun(@isempty,progArgNames))                                 ,throwAsCaller(MException('PROCESSARGS:emptyStrName ',sprintf('PROGRAMMER ERROR - empty-string names are not allowed')));end
+    if nargout ~= 1 && nargout ~= maxNargs                                 ,throwAsCaller(MException('PROCESSARGS:wrongNumOutputs',sprintf('PROGRAMMER ERROR - processArgs requires the same number of output arguments as named/default input pairs'))); end
+    if ~isempty(PREFIX)             && ...
+       ~all(cellfun(@(c)~isempty(c) &&...
+        c(1)==PREFIX,progArgNames)) 
+                                                                            throwAsCaller(MException('PROCESSARGS:missingPrefix',sprintf('PROGRAMMER ERROR - processArgs requires that each argument name begin with the prefix %s',PREFIX))); 
+    end
+    if FULL_ERROR_CHECK  && ...
+       numel(unique(progArgNames)) ~= numel(progArgNames)                  ,throwAsCaller(MException('PROCESSARGS:duplicateName',sprintf('PROGRAMMER ERROR - you can not use the same argument name twice')));end
+%% PROCESS USERARGS
+
+    %% Error Check User Args
+    if numel(userArgs) == 0 && nargout > 1
+        if any(required)                                                   ,throwAsCaller(MException('PROCESSARGS:missingReqArgs',sprintf('The following required arguments were not specified:\n%s',catString(progArgNames(required))))); 
+        else  return;
+        end
+    end
+    if FULL_ERROR_CHECK 
+     % slow, but helpful in transition from process_options to processArgs
+     % checks for missing '-' 
+        if ~isempty(PREFIX)
+            userstrings = lower(...
+                userArgs(cellfun(@(c)ischar(c) && size(c,1)==1,userArgs)));
+            problem = ismember(...
+                userstrings,cellfuncell(@(c)c(2:end),progArgNames));
+            if any(problem)
+                if sum(problem) == 1,                                       warning('processArgs:missingPrefix','The specified value ''%s'', matches an argument name, except for a missing prefix %s. It will be interpreted as a value, not a name.',userstrings{problem},PREFIX)
+                else                                                        warning('processArgs:missingPrefix','The following values match an argument name, except for missing prefixes %s:\n\n%s\n\nThey will be interpreted as values, not names.',PREFIX,catString(userstrings(problem)));
+                end
+            end
+        end
+    end
+    %% Find User Arg Names
+    userArgNamesNDX = find(cellfun(@(c)ischar(c)  &&...
+                                      ~isempty(c) &&...
+                                      c(1)==PREFIX,userArgs));
+    %% Check User Arg Names                                  
+    if ~isempty(userArgNamesNDX) && ...
+       ~isequal(userArgNamesNDX,userArgNamesNDX(1):2:numel(userArgs)-1)
+        if isempty(PREFIX),                                                 throwAsCaller(MException('PROCESSARGS:missingVal',sprintf('\n(1) every named argument must be followed by its value\n(2) no positional argument may be used after the first named argument\n')));
+        else                                                                throwAsCaller(MException('PROCESSARGS:posArgAfterNamedArg',sprintf('\n(1) every named argument must be followed by its value\n(2) no positional argument may be used after the first named argument\n(3) every argument name must begin with the ''%s'' character\n(4) values cannot be strings beginning with the %s character\n',PREFIX,PREFIX))); 
+        end
+    end
+     if FULL_ERROR_CHECK          && ...
+        ~isempty(userArgNamesNDX) && ...
+         numel(unique(userArgs(userArgNamesNDX))) ~= numel(userArgNamesNDX)
+                                                                            throwAsCaller(MException('PROCESSARGS:duplicateUserArg',sprintf('You have specified the same argument name twice')));
+     end
+    %% Extract Positional Args 
+    argsProvided = false(1,maxNargs);
+    if isempty(userArgNamesNDX)
+        positionalArgs = userArgs;
+    elseif userArgNamesNDX(1) == 1
+        positionalArgs = {};
+    else
+        positionalArgs = userArgs(1:userArgNamesNDX(1)-1); 
+    end
+    %% Check For Too Many Inputs
+    if numel(positionalArgs) + numel(userArgNamesNDX) > maxNargs           ,throwAsCaller(MException('PROCESSARGS:tooManyInputs',sprintf('You have specified %d too many arguments to the function',numel(positionalArgs)+numel(userArgNamesNDX)- maxNargs)));end
+    %% Process Positional Args
+    for i=1:numel(positionalArgs)
+    % don't overwrite default value if positional arg is 
+    % empty, i.e. '',{},[]    
+        if ~isempty(userArgs{i})  
+           argsProvided(i) = true;
+           if typecheck(i) && ~isa(userArgs{i},class(defaults{i}))         ,throwAsCaller(MException('PROCESSARGS:argWrongType',sprintf('Argument %d must be of type %s',i,class(defaults{i}))));  end
+           varargout{i} = userArgs{i};
+        end
+    end
+    %% Process Named Args
+    userArgNames = userArgs(userArgNamesNDX);
+    userProgMap = zeros(1,numel(userArgNames));
+    usedProgArgNames = false(1,numel(progArgNames));
+    for i=1:numel(userArgNames)
+       for j=1:numel(progArgNames)
+          if ~usedProgArgNames(j) && strcmpi(userArgNames{i},progArgNames{j})
+              userProgMap(i) = j;
+              usedProgArgNames(j) = true;
+              break;
+          end
+       end
+    end
+    %% Error Check User Args
+    if any(~userProgMap)                                                   ,throwAsCaller(MException('PROCESSARGS:invalidArgNames',sprintf('The following argument names are invalid: %s',catString(userArgNames(userProgMap == 0),' , ')))); end
+    if any(userProgMap  <= numel(positionalArgs))                          ,throwAsCaller(MException('PROCESSARGS:bothPosAndName' ,sprintf('You cannot specify an argument positionally, and by name in the same function call.')));end
+    %% Extract User Values
+    userValues = userArgs(userArgNamesNDX + 1);
+    %% Type Check User Args
+    if any(typecheck)
+       for i=1:numel(userArgNamesNDX)
+          if typecheck(userProgMap(i)) && ...
+             ~isa(userArgs{userArgNamesNDX(i)+1},...
+              class(defaults{userProgMap(i)}))
+                                                                            throwAsCaller(MException('PROCESSARGS:wrongType',sprintf('Argument %s must be of type %s',userArgs{userArgNamesNDX(i)},class(defaults{userProgMap(i)})))); 
+          end
+       end
+    end    
+    varargout(userProgMap) = userValues;
+    %% Check Required Args
+    argsProvided(userProgMap) = true;
+    if any(~argsProvided & required)                                       ,throwAsCaller(MException('PROCESSARGS:emptyVals',sprintf('The following required arguments were either not specified, or were given empty values:\n%s',catString(progArgNames(~argsProvided & required))))); end
+    %% Relay Mode
+    if nargout == 1 && (numel(varargin) > 2 || (numel(varargin) == 1 && isprefix('-',varargin{1})))
+        varargout = {interweave(progArgNames,varargout)};
+    end 
+    
+end
+
+
+function s = catString(c,delim)
+% Converts a cell array of strings to a single string, (i.e. single-row
+% character array). The specified delimiter, delim, is added between each
+% entry. Include any spaces you want in delim. If delim is not specified,
+% ', ' is used instead. If c is already a string, it is just returned. If c
+% is empty, s = ''. 
+%
+% EXAMPLE:
+%
+% s = catString({'touch /tmp/foo';'touch /tmp foo2';'mkdir /tmp/test'},' && ')
+% s =
+% touch /tmp/foo && touch /tmp foo2 && mkdir /tmp/test
+
+   if nargin == 0; s = ''; return; end
+   if ischar(c), s=c; 
+        if strcmp(s,','),s = '';end
+       return; 
+   end
+   if isempty(c),s=''; return;end
+   if nargin < 2, delim = ',  '; end
+   s = '';
+   for i=1:numel(c)
+      s = [s, rowvec(c{i}),rowvec(delim)]; %#ok
+   end
+    s(end-numel(delim)+1:end) = [];
+    if strcmp(s,','),s = '';end
+end
+    
+    
+function out = cellfuncell(fun, C, varargin)
+    out = cellfun(fun, C, varargin{:},'UniformOutput',false);
+end
+    
+function C = interweave(A,B)
+% If A, B are two cell arrays of length N1, N2, C is a cell array of length
+% N1 + N2 where where C(1) = A(1), C(2) = B(1), C(3) = A(2), C(4) = B(2), ... etc
+% Note, C is always a row vector. If one cell array is longer than the 
+% other the remaining elements of the longer cell array are added to the
+% end of C. A and B are first converted to column vectors. 
+    A = A(:); B = B(:);
+    C = cell(length(A)+length(B),1);
+    counter = 1;
+    while true
+       if ~isempty(A)
+          C(counter) = A(1); A(1) = [];
+          counter = counter + 1;
+       end
+       if ~isempty(B)
+           C(counter) = B(1); B(1) = [];
+           counter = counter + 1;
+       end
+       if isempty(A) && isempty(B)
+           break;
+       end
+    end
+    C = C';
+end    
+    
+function p = isprefix(short,long)
+% ISPREFIX Tests if the first arg is a prefix of the second. 
+% The second arg may also be a cell array of strings, in which case, each
+% is tested. CASE SENSITIVE!
+%
+% If the second argument is not a string, p = false, it does not error. 
+%
+% EXAMPLES:
+% 
+% isprefix('foo','foobar')
+% ans =
+%      1
+%
+%isprefix('test_',{'test_MvnDist','test_DiscreteDist','UnitTest'})
+%ans =
+%     1     1     0
+    error(nargchk(2,2,nargin));
+    if ischar(long)
+        p = strncmp(long,short,length(short));
+    elseif iscell(long)
+        p = cellfun(@(c)isprefix(short,c),long);
+    else
+        p  = false;
+    end
+end    
+    
+    
+function x = rowvec(x)
+    x = x(:)';
+end    
+    
+function x = colvec(x)
+    x = x(:);
+end
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/util/setupPath.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+function gvizPath = setupPath()
+% Attempt to add GraphViz to the system path, (temporariliy within the
+% matlab session only). 
+    gvizPath = 'unknown';
+    if ~ispc()
+        return
+    end
+    try  %#ok
+        gvizPath = winqueryreg('HKEY_LOCAL_MACHINE','SOFTWARE\AT&T Research Labs\Graphviz', 'InstallPath');
+        addtosystempath(fullfile(gvizPath, 'bin'));
+    end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/graphViz4Matlab/util/tokenize.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+function tokens = tokenize(str,delimiter)
+% tokenize a string    
+    if(nargin < 2)
+       delimiter = ' ' ; 
+    end
+    tokens = textscan(str,'%s','delimiter',delimiter, 'bufsize', 100000);
+    tokens = tokens{:};
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/arith.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,106 @@
+/* $Id: arith.h,v 1.16 2009/06/03 01:10:51 ellson Exp $ $Revision: 1.16 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+/* geometric functions (e.g. on points and boxes) with application to, but
+ * no specific dependance on graphs */
+
+#ifndef GV_ARITH_H
+#define GV_ARITH_H
+
+/* for sincos */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE 1
+#endif
+
+#include <limits.h>
+#ifdef HAVE_VALUES_H
+#include <values.h>
+#endif
+#include <math.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef MIN
+#undef MIN
+#endif
+#define MIN(a,b)	((a)<(b)?(a):(b))
+
+#ifdef MAX
+#undef MAX
+#endif
+#define MAX(a,b)	((a)>(b)?(a):(b))
+
+#ifdef ABS
+#undef ABS
+#endif
+#define ABS(a)		((a) >= 0 ? (a) : -(a))
+
+#define AVG(a,b)	((a + b) / 2)
+#define SGN(a)		(((a)<0)? -1 : 1)
+#define CMP(a,b)	(((a)<(b)) ? -1 : (((a)>(b)) ? 1 : 0))
+
+#ifndef INT_MAX
+#define	INT_MAX		((int)(~(unsigned)0 >> 1))
+#endif
+
+#ifndef INT_MIN
+#define INT_MIN		(-INT_MAX - 1)
+#endif
+
+#ifndef MAXSHORT
+#define	MAXSHORT	(0x7fff)
+#endif
+
+#ifndef MAXDOUBLE
+#define MAXDOUBLE	1.7976931348623157e+308
+#endif
+
+#ifndef MAXFLOAT
+#define MAXFLOAT	((float)3.40282347e+38)
+#endif
+
+#ifdef BETWEEN
+#undef BETWEEN
+#endif
+#define BETWEEN(a,b,c)	(((a) <= (b)) && ((b) <= (c)))
+
+#ifndef M_PI
+#define M_PI		3.14159265358979323846
+#endif
+
+#ifndef SQRT2
+#define SQRT2		1.41421356237309504880
+#endif
+
+#define ROUND(f)        ((f>=0)?(int)(f + .5):(int)(f - .5))
+#define RADIANS(deg)	((deg)/180.0 * M_PI)
+#define DEGREES(rad)	((rad)/M_PI * 180.0)
+
+#define SQR(a) ((a) * (a))
+
+#ifdef HAVE_SINCOS
+    extern void sincos(double x, double *s, double *c);
+#else
+# define sincos(x,s,c) *s = sin(x); *c = cos(x)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/cdt.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,261 @@
+/* $Id: cdt.h,v 1.11 2009/07/24 21:10:19 arif Exp $ $Revision: 1.11 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef _CDT_H
+#define _CDT_H		1
+
+/*	Public interface for the dictionary library
+**
+**      Written by Kiem-Phong Vo (05/25/96)
+*/
+
+#define CDT_VERSION	19991101L
+
+#define Void_t		void
+#define _ARG_(x)	x
+#ifndef NIL
+#define NIL(type) ((type)0)
+#endif
+
+#include <string.h>
+
+#if _PACKAGE_ast
+#  include	<ast_std.h>
+#elif _BLD_cdt
+#  include	"ast_common.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    typedef struct _dtlink_s Dtlink_t;
+    typedef struct _dthold_s Dthold_t;
+    typedef struct _dtdisc_s Dtdisc_t;
+    typedef struct _dtmethod_s Dtmethod_t;
+    typedef struct _dtdata_s Dtdata_t;
+    typedef struct _dt_s Dt_t;
+    typedef struct _dt_s Dict_t;	/* for libdict compatibility */
+    typedef struct _dtstat_s Dtstat_t;
+    typedef Void_t *(*Dtsearch_f) _ARG_((Dt_t *, Void_t *, int));
+    typedef Void_t *(*Dtmake_f) _ARG_((Dt_t *, Void_t *, Dtdisc_t *));
+    typedef void (*Dtfree_f) _ARG_((Dt_t *, Void_t *, Dtdisc_t *));
+    typedef int (*Dtcompar_f)
+	_ARG_((Dt_t *, Void_t *, Void_t *, Dtdisc_t *));
+    typedef unsigned int (*Dthash_f) _ARG_((Dt_t *, Void_t *, Dtdisc_t *));
+    typedef Void_t *(*Dtmemory_f)
+	_ARG_((Dt_t *, Void_t *, size_t, Dtdisc_t *));
+    typedef int (*Dtevent_f) _ARG_((Dt_t *, int, Void_t *, Dtdisc_t *));
+
+    struct _dtlink_s {
+	Dtlink_t *right;	/* right child          */
+	union {
+	    unsigned int _hash;	/* hash value           */
+	    Dtlink_t *_left;	/* left child           */
+	} hl;
+    };
+
+/* private structure to hold an object */
+    struct _dthold_s {
+	Dtlink_t hdr;		/* header               */
+	Void_t *obj;		/* user object          */
+    };
+
+/* method to manipulate dictionary structure */
+    struct _dtmethod_s {
+	Dtsearch_f searchf;	/* search function     */
+	int type;		/* type of operation    */
+    };
+
+/* stuff that may be in shared memory */
+    struct _dtdata_s {
+	int type;		/* type of dictionary                   */
+	Dtlink_t *here;		/* finger to last search element        */
+	union {
+	    Dtlink_t **_htab;	/* hash table                           */
+	    Dtlink_t *_head;	/* linked list                          */
+	} hh;
+	int ntab;		/* number of hash slots                 */
+	int size;		/* number of objects                    */
+	int loop;		/* number of nested loops               */
+    };
+
+/* structure to hold methods that manipulate an object */
+    struct _dtdisc_s {
+	int key;		/* where the key begins in an object    */
+	int size;		/* key size and type                    */
+	int link;		/* offset to Dtlink_t field             */
+	Dtmake_f makef;		/* object constructor                   */
+	Dtfree_f freef;		/* object destructor                    */
+	Dtcompar_f comparf;	/* to compare two objects               */
+	Dthash_f hashf;		/* to compute hash value of an object   */
+	Dtmemory_f memoryf;	/* to allocate/free memory              */
+	Dtevent_f eventf;	/* to process events                    */
+    };
+
+/* the dictionary structure itself */
+    struct _dt_s {
+	Dtsearch_f searchf;	/* search function                      */
+	Dtdisc_t *disc;		/* method to manipulate objs            */
+	Dtdata_t *data;		/* sharable data                        */
+	Dtmemory_f memoryf;	/* function to alloc/free memory        */
+	Dtmethod_t *meth;	/* dictionary method                    */
+	int type;		/* type information                     */
+	int nview;		/* number of parent view dictionaries   */
+	Dt_t *view;		/* next on viewpath                     */
+	Dt_t *walk;		/* dictionary being walked              */
+    };
+
+/* structure to get status of a dictionary */
+    struct _dtstat_s {
+	int dt_meth;		/* method type                          */
+	int dt_size;		/* number of elements                   */
+	int dt_n;		/* number of chains or levels           */
+	int dt_max;		/* max size of a chain or a level       */
+	int *dt_count;		/* counts of chains or levels by size   */
+    };
+
+/* supported storage methods */
+#define DT_SET		0000001	/* set with unique elements             */
+#define DT_BAG		0000002	/* multiset                             */
+#define DT_OSET		0000004	/* ordered set (self-adjusting tree)    */
+#define DT_OBAG		0000010	/* ordered multiset                     */
+#define DT_LIST		0000020	/* linked list                          */
+#define DT_STACK	0000040	/* stack                                */
+#define DT_QUEUE	0000100	/* queue                                */
+#define DT_METHODS	0000177	/* all currently supported methods      */
+
+/* asserts to dtdisc() */
+#define DT_SAMECMP	0000001	/* compare methods equivalent           */
+#define DT_SAMEHASH	0000002	/* hash methods equivalent              */
+
+/* types of search */
+#define DT_INSERT	0000001	/* insert object if not found           */
+#define DT_DELETE	0000002	/* delete object if found               */
+#define DT_SEARCH	0000004	/* look for an object                   */
+#define DT_NEXT		0000010	/* look for next element                */
+#define DT_PREV		0000020	/* find previous element                */
+#define DT_RENEW	0000040	/* renewing an object                   */
+#define DT_CLEAR	0000100	/* clearing all objects                 */
+#define DT_FIRST	0000200	/* get first object                     */
+#define DT_LAST		0000400	/* get last object                      */
+#define DT_MATCH	0001000	/* find object matching key             */
+#define DT_VSEARCH	0002000	/* search using internal representation */
+#define DT_ATTACH	0004000	/* attach an object to the dictionary   */
+#define DT_DETACH	0010000	/* attach an object to the dictionary   */
+
+/* events */
+#define DT_OPEN		1	/* a dictionary is being opened         */
+#define DT_CLOSE	2	/* a dictionary is being closed         */
+#define DT_DISC		3	/* discipline is about to be changed    */
+#define DT_METH		4	/* method is about to be changed        */
+
+
+#if _BLD_cdt && defined(__EXPORT__)
+#define extern	__EXPORT__
+#endif
+#if !_BLD_cdt && defined(GVDLL)
+#define extern	__declspec(dllimport)
+#endif
+#if !_BLD_cdt && defined(__IMPORT__)
+#define extern	__IMPORT__
+#endif
+/*visual studio*/
+#ifdef WIN32_DLL
+#ifndef CDT_EXPORTS
+#define extern __declspec(dllimport)
+#else
+#define extern __declspec(dllexport)
+#endif
+#endif
+/*end visual studio*/
+
+	
+	extern Dtmethod_t *Dtset;
+    extern Dtmethod_t *Dtbag;
+    extern Dtmethod_t *Dtoset;
+    extern Dtmethod_t *Dtobag;
+    extern Dtmethod_t *Dtlist;
+    extern Dtmethod_t *Dtstack;
+    extern Dtmethod_t *Dtqueue;
+
+/* compatibility stuff; will go away */
+#ifndef KPVDEL
+	extern Dtmethod_t *Dtorder;
+    extern Dtmethod_t *Dttree;
+    extern Dtmethod_t *Dthash;
+    extern Dtmethod_t _Dttree;
+    extern Dtmethod_t _Dthash;
+    extern Dtmethod_t _Dtlist;
+    extern Dtmethod_t _Dtqueue;
+    extern Dtmethod_t _Dtstack;
+#endif
+
+#undef extern
+#if _BLD_cdt && defined(__EXPORT__)
+#define extern	__EXPORT__
+#endif
+#if !_BLD_cdt && defined(__IMPORT__) && defined(__EXPORT__)
+#define extern	__IMPORT__
+#endif
+     extern Dt_t *dtopen _ARG_((Dtdisc_t *, Dtmethod_t *));
+    extern int dtclose _ARG_((Dt_t *));
+    extern Dt_t *dtview _ARG_((Dt_t *, Dt_t *));
+    extern Dtdisc_t *dtdisc _ARG_((Dt_t * dt, Dtdisc_t *, int));
+    extern Dtmethod_t *dtmethod _ARG_((Dt_t *, Dtmethod_t *));
+
+    extern Dtlink_t *dtflatten _ARG_((Dt_t *));
+    extern Dtlink_t *dtextract _ARG_((Dt_t *));
+    extern int dtrestore _ARG_((Dt_t *, Dtlink_t *));
+
+    extern int dtwalk
+	_ARG_((Dt_t *, int (*)(Dt_t *, Void_t *, Void_t *), Void_t *));
+
+    extern Void_t *dtrenew _ARG_((Dt_t *, Void_t *));
+
+    extern int dtsize _ARG_((Dt_t *));
+    extern int dtstat _ARG_((Dt_t *, Dtstat_t *, int));
+    extern unsigned int dtstrhash _ARG_((unsigned int, Void_t *, int));
+
+#undef extern
+
+#define _DT_(d)		((Dt_t*)(d))
+#define dtvnext(d)	(_DT_(d)->view)
+#define dtvcount(d)	(_DT_(d)->nview)
+#define dtvhere(d)	(_DT_(d)->walk)
+#define dtlink(d,e)	(((Dtlink_t*)(e))->right)
+#define dtobj(d,e)	((_DT_(d)->disc->link < 0) ? (((Dthold_t*)(e))->obj) : \
+				(Void_t*)((char*)(e) - _DT_(d)->disc->link) )
+#define dtfinger(d)	(_DT_(d)->data->here ? dtobj((d),_DT_(d)->data->here) : \
+				(Void_t*)(0) )
+#define dtfirst(d)	(*(_DT_(d)->searchf))((d),(Void_t*)(0),DT_FIRST)
+#define dtnext(d,o)	(*(_DT_(d)->searchf))((d),(Void_t*)(o),DT_NEXT)
+#define dtlast(d)	(*(_DT_(d)->searchf))((d),(Void_t*)(0),DT_LAST)
+#define dtprev(d,o)	(*(_DT_(d)->searchf))((d),(Void_t*)(o),DT_PREV)
+#define dtsearch(d,o)	(*(_DT_(d)->searchf))((d),(Void_t*)(o),DT_SEARCH)
+#define dtmatch(d,o)	(*(_DT_(d)->searchf))((d),(Void_t*)(o),DT_MATCH)
+#define dtinsert(d,o)	(*(_DT_(d)->searchf))((d),(Void_t*)(o),DT_INSERT)
+#define dtdelete(d,o)	(*(_DT_(d)->searchf))((d),(Void_t*)(o),DT_DELETE)
+#define dtattach(d,o)	(*(_DT_(d)->searchf))((d),(Void_t*)(o),DT_ATTACH)
+#define dtdetach(d,o)	(*(_DT_(d)->searchf))((d),(Void_t*)(o),DT_DETACH)
+#define dtclear(d)	(*(_DT_(d)->searchf))((d),(Void_t*)(0),DT_CLEAR)
+/* A linear congruential hash: h*17 + c + 97531 */
+#define dtcharhash(h,c)	((((unsigned int)(h))<<4) + ((unsigned int)(h)) + \
+			 ((unsigned char)(c)) + 97531 )
+#ifdef __cplusplus
+}
+#endif
+#endif				/* _CDT_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/cgraph.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,467 @@
+/* $Id: cgraph.h,v 1.16 2009/07/10 21:10:32 erg Exp $ $Revision: 1.16 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef ATT_GRAPH_H
+#define ATT_GRAPH_H
+
+#include		"cdt.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+#ifndef TRUE
+#define TRUE (!FALSE)
+#endif
+#ifndef NOT
+#define	NOT(x)			(!(x))
+#endif
+#ifndef NIL
+#define NIL(type)		((type)0)
+#endif
+#define NILgraph		NIL(Agraph_t*)
+#define NILnode			NIL(Agnode_t*)
+#define NILedge			NIL(Agedge_t*)
+#define NILsym			NIL(Agsym_t*)
+
+/* forward struct type declarations */
+typedef struct Agtag_s Agtag_t;
+typedef struct Agobj_s Agobj_t;	/* generic object header */
+typedef struct Agraph_s Agraph_t;	/* graph, subgraph (or hyperedge) */
+typedef struct Agnode_s Agnode_t;	/* node (atom) */
+typedef struct Agedge_s Agedge_t;	/* node pair */
+typedef struct Agdesc_s Agdesc_t;	/* graph descriptor */
+typedef struct Agmemdisc_s Agmemdisc_t;	/* memory allocator */
+typedef struct Agiddisc_s Agiddisc_t;	/* object ID allocator */
+typedef struct Agiodisc_s Agiodisc_t;	/* IO services */
+typedef struct Agdisc_s Agdisc_t;	/* union of client discipline methods */
+typedef struct Agdstate_s Agdstate_t;	/* client state (closures) */
+typedef struct Agsym_s Agsym_t;	/* string attribute descriptors */
+typedef struct Agattr_s Agattr_t;	/* string attribute container */
+typedef struct Agcbdisc_s Agcbdisc_t;	/* client event callbacks */
+typedef struct Agcbstack_s Agcbstack_t;	/* enclosing state for cbdisc */
+typedef struct Agclos_s Agclos_t;	/* common fields for graph/subgs */
+typedef struct Agrec_s Agrec_t;	/* generic runtime record */
+typedef struct Agdatadict_s Agdatadict_t;	/* set of dictionaries per graph */
+typedef struct Agedgepair_s Agedgepair_t;	/* the edge object */
+typedef struct Agsubnode_s Agsubnode_t;
+
+/* Header of a user record.  These records are attached by client programs
+dynamically at runtime.  A unique string ID must be given to each record
+attached to the same object.  Cgraph has functions to create, search for,
+and delete these records.   The records are maintained in a circular list,
+with obj->data pointing somewhere in the list.  The search function has
+an option to lock this pointer on a given record.  The application must
+be written so only one such lock is outstanding at a time. */
+
+struct Agrec_s {
+    char *name;
+    Agrec_t *next;
+    /* following this would be any programmer-defined data */
+};
+
+/* Object tag for graphs, nodes, and edges.  While there may be several structs
+for a given node or edges, there is only one unique ID (per main graph).  */
+struct Agtag_s {
+    unsigned objtype:2;		/* see literal tags below */
+    unsigned mtflock:1;		/* move-to-front lock, see above */
+    unsigned attrwf:1;		/* attrs written (parity, write.c) */
+    unsigned seq:(sizeof(unsigned) * 8 - 4);	/* sequence no. */
+    unsigned long id;		/* client  ID */
+};
+
+	/* object tags */
+#define AGRAPH				0	/* can't exceed 2 bits. see Agtag_t. */
+#define AGNODE				1
+#define AGOUTEDGE			2
+#define AGINEDGE			3	/* (1 << 1) indicates an edge tag.   */
+#define AGEDGE 				AGOUTEDGE	/* synonym in object kind args */
+
+	/* a generic graph/node/edge header */
+struct Agobj_s {
+    Agtag_t tag;
+    Agrec_t *data;
+};
+
+#define AGTAG(obj)		(((Agobj_t*)(obj))->tag)
+#define AGTYPE(obj)		(AGTAG(obj).objtype)
+#define AGID(obj)		(AGTAG(obj).id)
+#define AGSEQ(obj)		(AGTAG(obj).seq)
+#define AGATTRWF(obj)		(AGTAG(obj).attrwf)
+#define AGDATA(obj)		(((Agobj_t*)(obj))->data)
+
+/* This is the node struct allocated per graph (or subgraph).  It resides
+in the n_dict of the graph.  The node set is maintained by libdict, but
+transparently to libgraph callers.  Every node may be given an optional
+string name at its time of creation, or it is permissible to pass NIL(char*)
+for the name. */
+
+struct Agsubnode_s {		/* the node-per-graph-or-subgraph record */
+    Dtlink_t seq_link;		/* must be first */
+    Dtlink_t id_link;
+    Agnode_t *node;		/* the object */
+    Dtlink_t *in_id, *out_id;	/* by node/ID for random access */
+    Dtlink_t *in_seq, *out_seq;	/* by node/sequence for serial access */
+};
+
+struct Agnode_s {
+    Agobj_t base;
+    Agraph_t *root;
+    Agsubnode_t mainsub;	/* embedded for main graph */
+};
+
+struct Agedge_s {
+    Agobj_t base;
+    Dtlink_t id_link;		/* main graph only */
+    Dtlink_t seq_link;
+    Agnode_t *node;		/* the endpoint node */
+};
+
+struct Agedgepair_s {
+    Agedge_t out, in;
+};
+
+struct Agdesc_s {		/* graph descriptor */
+    unsigned directed:1;	/* if edges are asymmetric */
+    unsigned strict:1;		/* if multi-edges forbidden */
+    unsigned no_loop:1;		/* if no loops */
+    unsigned maingraph:1;	/* if this is the top level graph */
+    unsigned flatlock:1;	/* if sets are flattened into lists in cdt */
+    unsigned no_write:1;	/* if a temporary subgraph */
+    unsigned has_attrs:1;	/* if string attr tables should be initialized */
+    unsigned has_cmpnd:1;	/* if may contain collapsed nodes */
+};
+
+/* disciplines for external resources needed by libgraph */
+
+struct Agmemdisc_s {		/* memory allocator */
+    void *(*open) (void);	/* independent of other resources */
+    void *(*alloc) (void *state, size_t req);
+    void *(*resize) (void *state, void *ptr, size_t old, size_t req);
+    void (*free) (void *state, void *ptr);
+    void (*close) (void *state);
+};
+
+struct Agiddisc_s {		/* object ID allocator */
+    void *(*open) (Agraph_t * g);	/* associated with a graph */
+    long (*map) (void *state, int objtype, char *str, unsigned long *id,
+		 int createflag);
+    long (*alloc) (void *state, int objtype, unsigned long id);
+    void (*free) (void *state, int objtype, unsigned long id);
+    char *(*print) (void *state, int objtype, unsigned long id);
+    void (*close) (void *state);
+};
+
+struct Agiodisc_s {
+    int (*afread) (void *chan, char *buf, int bufsize);
+    int (*putstr) (void *chan, const char *str);
+    int (*flush) (void *chan);	/* sync */
+    /* error messages? */
+};
+
+struct Agdisc_s {		/* user's discipline */
+    Agmemdisc_t *mem;
+    Agiddisc_t *id;
+    Agiodisc_t *io;
+};
+
+	/* default resource disciplines */
+#if !defined(_BLD_cgraph) && defined(GVDLL)
+#define extern  __declspec(dllimport)
+#endif
+
+/*visual studio*/
+#ifdef WIN32_DLL
+#ifndef CGRAPH_EXPORTS
+#define extern __declspec(dllimport)
+#endif
+#endif
+/*end visual studio*/
+
+extern Agmemdisc_t AgMemDisc;
+extern Agiddisc_t AgIdDisc;
+extern Agiodisc_t AgIoDisc;
+
+extern Agdisc_t AgDefaultDisc;
+#undef extern
+
+struct Agdstate_s {
+    void *mem;
+    void *id;
+    /* IO must be initialized and finalized outside Cgraph,
+     * and channels (FILES) are passed as void* arguments. */
+};
+
+typedef void (*agobjfn_t) (Agraph_t * g, Agobj_t * obj, void *arg);
+typedef void (*agobjupdfn_t) (Agraph_t * g, Agobj_t * obj, void *arg,
+			      Agsym_t * sym);
+
+struct Agcbdisc_s {
+    struct {
+	agobjfn_t ins;
+	agobjupdfn_t mod;
+	agobjfn_t del;
+    } graph, node, edge;
+};
+
+struct Agcbstack_s {		/* object event callbacks */
+    Agcbdisc_t *f;		/* methods */
+    void *state;		/* closure */
+    Agcbstack_t *prev;		/* kept in a stack, unlike other disciplines */
+};
+
+struct Agclos_s {
+    Agdisc_t disc;		/* resource discipline functions */
+    Agdstate_t state;		/* resource closures */
+    Dict_t *strdict;		/* shared string dict */
+    unsigned long seq[3];	/* local object sequence number counter */
+    Agcbstack_t *cb;		/* user and system callback function stacks */
+    unsigned char callbacks_enabled;	/* issue user callbacks or hold them? */
+    Dict_t *lookup_by_name[3];
+    Dict_t *lookup_by_id[3];
+};
+
+struct Agraph_s {
+    Agobj_t base;
+    Agdesc_t desc;
+    Dtlink_t link;
+    Dict_t *n_seq;		/* the node set in sequence */
+    Dict_t *n_id;		/* the node set indexed by ID */
+    Dict_t *e_seq, *e_id;	/* holders for edge sets */
+    Dict_t *g_dict;		/* subgraphs - descendants */
+    Agraph_t *parent, *root;	/* subgraphs - ancestors */
+    Agclos_t *clos;		/* shared resources */
+};
+
+
+#if _PACKAGE_ast
+/* fine control of object callbacks */
+#   if defined(_BLD_cgraph) && defined(__EXPORT__)
+#	define extern  __EXPORT__
+#   endif
+#   if !defined(_BLD_cgraph) && defined(__IMPORT__)
+#	define extern  __IMPORT__
+#   endif
+#endif
+
+extern void agpushdisc(Agraph_t * g, Agcbdisc_t * disc, void *state);
+extern int agpopdisc(Agraph_t * g, Agcbdisc_t * disc);
+extern int agcallbacks(Agraph_t * g, int flag);	/* return prev value */
+
+/* graphs */
+extern Agraph_t *agopen(char *name, Agdesc_t desc, Agdisc_t * disc);
+extern int agclose(Agraph_t * g);
+extern Agraph_t *agread(void *chan, Agdisc_t * disc);
+extern void agreadline(int);
+extern void agsetfile(char *);
+extern Agraph_t *agconcat(Agraph_t * g, void *chan, Agdisc_t * disc);
+extern int agwrite(Agraph_t * g, void *chan);
+extern int agisdirected(Agraph_t * g);
+extern int agisundirected(Agraph_t * g);
+extern int agisstrict(Agraph_t * g);
+extern int agissimple(Agraph_t * g);
+
+/* nodes */
+extern Agnode_t *agnode(Agraph_t * g, char *name, int createflag);
+extern Agnode_t *agidnode(Agraph_t * g, unsigned long id, int createflag);
+extern Agnode_t *agsubnode(Agraph_t * g, Agnode_t * n, int createflag);
+extern Agnode_t *agfstnode(Agraph_t * g);
+extern Agnode_t *agnxtnode(Agraph_t * g, Agnode_t * n);
+extern Agnode_t *aglstnode(Agraph_t * g);
+extern Agnode_t *agprvnode(Agraph_t * g, Agnode_t * n);
+
+extern Agsubnode_t *agsubrep(Agraph_t * g, Agnode_t * n);
+
+/* edges */
+extern Agedge_t *agedge(Agraph_t * g, Agnode_t * t, Agnode_t * h,
+			char *name, int createflag);
+extern Agedge_t *agidedge(Agraph_t * g, Agnode_t * t, Agnode_t * h,
+			  unsigned long id, int createflag);
+extern Agedge_t *agsubedge(Agraph_t * g, Agedge_t * e, int createflag);
+extern Agedge_t *agfstin(Agraph_t * g, Agnode_t * n);
+extern Agedge_t *agnxtin(Agraph_t * g, Agedge_t * e);
+extern Agedge_t *agfstout(Agraph_t * g, Agnode_t * n);
+extern Agedge_t *agnxtout(Agraph_t * g, Agedge_t * e);
+extern Agedge_t *agfstedge(Agraph_t * g, Agnode_t * n);
+extern Agedge_t *agnxtedge(Agraph_t * g, Agedge_t * e, Agnode_t * n);
+
+/* generic */
+extern Agraph_t *agraphof(void* obj);
+extern Agraph_t *agroot(void* obj);
+extern int agcontains(Agraph_t *, void *);
+extern char *agnameof(void *);
+extern int agrelabel(void *obj, char *name);	/* scary */
+extern int agrelabel_node(Agnode_t * n, char *newname);
+extern int agdelete(Agraph_t * g, void *obj);
+extern long agdelsubg(Agraph_t * g, Agraph_t * sub);	/* could be agclose */
+extern int agdelnode(Agraph_t * g, Agnode_t * arg_n);
+extern int agdeledge(Agraph_t * g, Agedge_t * arg_e);
+extern int agobjkind(void *);
+
+/* strings */
+extern char *agstrdup(Agraph_t *, char *);
+extern char *agstrdup_html(Agraph_t *, char *);
+extern int aghtmlstr(char *);
+extern char *agstrbind(Agraph_t * g, char *);
+extern int agstrfree(Agraph_t *, char *);
+extern char *agstrcanon(char *, char *);
+char *agcanonStr(char *str);  /* manages its own buf */
+
+/* definitions for dynamic string attributes */
+struct Agattr_s {		/* dynamic string attributes */
+    Agrec_t h;			/* common data header */
+    Dict_t *dict;		/* shared dict to interpret attr field */
+    char **str;			/* the attribute string values */
+};
+
+struct Agsym_s {		/* symbol in one of the above dictionaries */
+    Dtlink_t link;
+    char *name;			/* attribute's name */
+    char *defval;		/* its default value for initialization */
+    int id;			/* its index in attr[] */
+    unsigned char kind;		/* referent object type */
+    unsigned char fixed;	/* immutable value */
+};
+
+struct Agdatadict_s {		/* set of dictionaries per graph */
+    Agrec_t h;			/* installed in list of graph recs */
+    struct {
+	Dict_t *n, *e, *g;
+    } dict;
+};
+
+extern Agsym_t *agattr(Agraph_t * g, int kind, char *name, char *value);
+extern Agsym_t *agattrsym(void *obj, char *name);
+extern Agsym_t *agnxtattr(Agraph_t * g, int kind, Agsym_t * attr);
+extern int      agcopyattr(void *oldobj, void *newobj);
+
+extern void *agbindrec(void *obj, char *name, unsigned int size,
+		       int move_to_front);
+extern Agrec_t *aggetrec(void *obj, char *name, int move_to_front);
+extern int agdelrec(void *obj, char *name);
+extern void aginit(Agraph_t * g, int kind, char *rec_name, int rec_size,
+		   int move_to_front);
+extern void agclean(Agraph_t * g, int kind, char *rec_name);
+
+extern char *agget(void *obj, char *name);
+extern char *agxget(void *obj, Agsym_t * sym);
+extern int agset(void *obj, char *name, char *value);
+extern int agxset(void *obj, Agsym_t * sym, char *value);
+extern int agsafeset(void* obj, char* name, char* value, char* def);
+
+/* defintions for subgraphs */
+extern Agraph_t *agsubg(Agraph_t * g, char *name, int cflag);	/* constructor */
+extern Agraph_t *agidsubg(Agraph_t * g, unsigned long id, int cflag);	/* constructor */
+extern Agraph_t *agfstsubg(Agraph_t * g), *agnxtsubg(Agraph_t * subg);
+extern Agraph_t *agparent(Agraph_t * g);
+
+/* set cardinality */
+extern int agnnodes(Agraph_t * g), agnedges(Agraph_t * g);
+extern int agdegree(Agraph_t * g, Agnode_t * n, int in, int out);
+extern int agcountuniqedges(Agraph_t * g, Agnode_t * n, int in, int out);
+
+/* memory */
+extern void *agalloc(Agraph_t * g, size_t size);
+extern void *agrealloc(Agraph_t * g, void *ptr, size_t oldsize,
+		       size_t size);
+extern void agfree(Agraph_t * g, void *ptr);
+extern struct _vmalloc_s *agheap(Agraph_t * g);
+
+/* an engineering compromise is a joy forever */
+extern void aginternalmapclearlocalnames(Agraph_t * g);
+
+#define agnew(g,t)		((t*)agalloc(g,sizeof(t)))
+#define agnnew(g,n,t)	((t*)agalloc(g,(n)*sizeof(t)))
+
+/* error handling */
+typedef enum { AGWARN, AGERR, AGMAX, AGPREV } agerrlevel_t;
+extern agerrlevel_t agerrno;
+extern void agseterr(agerrlevel_t);
+extern char *aglasterr(void);
+extern int agerr(agerrlevel_t level, char *fmt, ...);
+extern void agerrorf(char *fmt, ...);
+extern void agwarningf(char *fmt, ...);
+extern int agerrors(void);
+
+/* data access macros */
+/* this assumes that e[0] is out and e[1] is inedge, see edgepair in edge.c  */
+#define AGIN2OUT(e)		((e)-1)
+#define AGOUT2IN(e)		((e)+1)
+#define AGOPP(e)		((AGTYPE(e)==AGINEDGE)?AGIN2OUT(e):AGOUT2IN(e))
+#define AGMKOUT(e)		(AGTYPE(e) == AGOUTEDGE? (e): AGIN2OUT(e))
+#define AGMKIN(e)		(AGTYPE(e) == AGINEDGE?  (e): AGOUT2IN(e))
+#define AGTAIL(e)		(AGMKIN(e)->node)
+#define AGHEAD(e)		(AGMKOUT(e)->node)
+#define agtail(e)		AGTAIL(e)
+#define aghead(e)		AGHEAD(e)
+#define agopp(e)		AGOPP(e)
+
+#define TAILPORT_ID		"tailport"
+#define HEADPORT_ID		"headport"
+
+#if _PACKAGE_ast
+#   if !defined(_BLD_cgraph) && defined(__IMPORT__)
+#	define extern  __IMPORT__
+#   endif
+#endif
+#if !defined(_BLD_cgraph) && defined(GVDLL)
+#define extern  __declspec(dllimport)
+#endif
+
+extern Agdesc_t Agdirected, Agstrictdirected, Agundirected,
+    Agstrictundirected;
+
+#undef extern
+
+/* fast graphs */
+void agflatten(Agraph_t * g, int flag);
+typedef Agsubnode_t	Agnoderef_t;
+typedef Dtlink_t	Agedgeref_t;
+
+#define AGHEADPOINTER(g)	((Agnoderef_t*)(g->n_seq->data->hh._head))
+#define AGRIGHTPOINTER(rep)  	((Agnoderef_t*)((rep)->seq_link.right?((void*)((rep)->seq_link.right) - offsetof(Agsubnode_t,seq_link)):0))
+#define AGLEFTPOINTER(rep)  	((Agnoderef_t*)((rep)->seq_link.hl._left?((void*)((rep)->seq_link.hl._left) - offsetof(Agsubnode_t,seq_link)):0))
+
+#define FIRSTNREF(g)	(agflatten(g,1), AGHEADPOINTER(g))
+
+#define NEXTNREF(g,rep)  	(AGRIGHTPOINTER(rep) == AGHEADPOINTER(g)?0:AGRIGHTPOINTER(rep))
+
+#define PREVNREF(g,rep)  	(((rep)==AGHEADPOINTER(g))?0:(AGLEFTPOINTER(rep)))
+
+#define LASTNREF(g)		(agflatten(g,1), AGHEADPOINTER(g)?AGLEFTPOINTER(AGHEADPOINTER(g)):0)
+#define NODEOF(rep)		((rep)->node)
+
+#define FIRSTOUTREF(g,sn)	(agflatten(g,1), (sn)->out_seq)
+#define LASTOUTREF(g,sn)	(agflatten(g,1), (Agedgeref_t*)dtlast(sn->out_seq))
+#define FIRSTINREF(g,sn)	(agflatten(g,1), (sn)->in_seq)
+#define NEXTEREF(g,rep)  	((rep)->right)
+#define PREVEREF(g,rep)  	((rep)->hl._left)
+/* this is expedient but a bit slimey because it "knows" that dict entries of both nodes
+and edges are embedded in main graph objects but allocated separately in subgraphs */
+#define AGSNMAIN(sn)        ((sn)==(&((sn)->node->mainsub)))
+#define EDGEOF(sn,rep)		(AGSNMAIN(sn)?((Agedge_t*)((unsigned char*)(rep) - offsetof(Agedge_t,seq_link))) : ((Dthold_t*)(rep))->obj)
+
+#undef extern
+#if _PACKAGE_ast
+_END_EXTERNS_
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/color.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+/* $Id: color.h,v 1.7 2009/06/03 01:10:51 ellson Exp $ $Revision: 1.7 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef GV_COLOR_H
+#define GV_COLOR_H
+
+/* #include "arith.h" */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct hsvrgbacolor_t {
+    char *name;
+    unsigned char h, s, v;
+    unsigned char r, g, b, a;
+} hsvrgbacolor_t;
+
+/* possible representations of color in gvcolor_t */
+typedef enum { HSVA_DOUBLE, RGBA_BYTE, RGBA_WORD, CMYK_BYTE,
+		RGBA_DOUBLE, COLOR_STRING, COLOR_INDEX } color_type_t;
+
+/* gvcolor_t can hold a color spec in a choice or representations */
+typedef struct color_s {
+    union {
+	double RGBA[4];
+	double HSVA[4];
+	unsigned char rgba[4];
+	unsigned char cmyk[4];
+	int rrggbbaa[4];
+	char *string;
+	int index;
+    } u;
+    color_type_t type;
+} gvcolor_t;
+
+#define COLOR_MALLOC_FAIL -1
+#define COLOR_UNKNOWN 1
+#define COLOR_OK 0
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/geom.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,95 @@
+/* $Id: geom.h,v 1.14 2009/06/03 01:10:52 ellson Exp $ $Revision: 1.14 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+/* geometric types and macros (e.g. points and boxes) with application to, but
+ * no specific dependance on graphs */
+
+#ifndef GV_GEOM_H
+#define GV_GEOM_H
+
+#ifdef HAVE_CONFIG_H
+#include "arith.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
+typedef struct { int x, y; } point;
+
+typedef struct pointf_s { double x, y; } pointf;
+
+/* tell pathplan/pathgeom.h */
+#define HAVE_POINTF_S
+
+typedef struct { point LL, UR; } box;
+
+typedef struct { pointf LL, UR; } boxf;
+
+#ifdef HAVE_CONFIG_H
+
+/* true if point p is inside box b */
+#define INSIDE(p,b)	(BETWEEN((b).LL.x,(p).x,(b).UR.x) && BETWEEN((b).LL.y,(p).y,(b).UR.y))
+
+/* true if boxes b0 and b1 overlap */
+#define OVERLAP(b0,b1)	(((b0).UR.x >= (b1).LL.x) && ((b1).UR.x >= (b0).LL.x) && ((b0).UR.y >= (b1).LL.y) && ((b1).UR.y >= (b0).LL.y))
+
+/* true if box b0 completely contains b1*/
+#define CONTAINS(b0,b1)	(((b0).UR.x >= (b1).UR.x) && ((b0).UR.y >= (b1).UR.y) && ((b0).LL.x <= (b1).LL.x) && ((b0).LL.y <= (b1).LL.y))
+
+/* expand box b as needed to enclose point p */
+#define EXPANDBP(b, p)	((b).LL.x = MIN((b).LL.x, (p).x), (b).LL.y = MIN((b).LL.y, (p).y), (b).UR.x = MAX((b).UR.x, (p).x), (b).UR.y = MAX((b).UR.y, (p).y))
+
+/* expand box b0 as needed to enclose box b1 */
+#define EXPANDBB(b0, b1) ((b0).LL.x = MIN((b0).LL.x, (b1).LL.x), (b0).LL.y = MIN((b0).LL.y, (b1).LL.y), (b0).UR.x = MAX((b0).UR.x, (b1).UR.x), (b0).UR.y = MAX((b0).UR.y, (b1).UR.y))
+
+/* clip box b0 to fit box b1 */
+#define CLIPBB(b0, b1) ((b0).LL.x = MAX((b0).LL.x, (b1).LL.x), (b0).LL.y = MAX((b0).LL.y, (b1).LL.y), (b0).UR.x = MIN((b0).UR.x, (b1).UR.x), (b0).UR.y = MIN((b0).UR.y, (b1).UR.y))
+
+#define LEN2(a,b)		(SQR(a) + SQR(b))
+#define LEN(a,b)		(sqrt(LEN2((a),(b))))
+
+#define DIST2(p,q)		(LEN2(((p).x - (q).x),((p).y - (q).y)))
+#define DIST(p,q)		(sqrt(DIST2((p),(q))))
+
+#define POINTS_PER_INCH	72
+#define POINTS_PER_PC		((double)POINTS_PER_INCH / 6)
+#define POINTS_PER_CM		((double)POINTS_PER_INCH * 0.393700787)
+#define POINTS_PER_MM		((double)POINTS_PER_INCH * 0.0393700787)
+
+#define POINTS(a_inches)	(ROUND((a_inches)*POINTS_PER_INCH))
+#define PS2INCH(a_points)	((a_points)/(double)POINTS_PER_INCH)
+
+#define P2PF(p,pf)		((pf).x = (p).x,(pf).y = (p).y)
+#define PF2P(pf,p)		((p).x = ROUND((pf).x),(p).y = ROUND((pf).y))
+
+#define B2BF(b,bf)		(P2PF((b).LL,(bf).LL),P2PF((b).UR,(bf).UR))
+#define BF2B(bf,b)		(PF2P((bf).LL,(b).LL),PF2P((bf).UR,(b).UR))
+
+#define APPROXEQ(a,b,tol)	(ABS((a) - (b)) < (tol))
+#define APPROXEQPT(p,q,tol)	(DIST2((p),(q)) < SQR(tol))
+
+/* some common tolerance values */
+#define MILLIPOINT .001
+#define MICROPOINT .000001
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/graph.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,236 @@
+/* $Id: graph.h,v 1.20 2009/06/03 01:10:53 ellson Exp $ $Revision: 1.20 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+
+
+#ifndef _GRAPH_H
+#define _GRAPH_H 1
+
+#if _PACKAGE_ast
+#include    <ast.h>
+#else
+#include <sys/types.h>
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#include "cdt.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define TAIL_ID				"tailport"
+#define HEAD_ID				"headport"
+
+    typedef struct Agraph_t Agraph_t;
+    typedef struct Agnode_t Agnode_t;
+    typedef struct Agedge_t Agedge_t;
+    typedef struct Agdict_t Agdict_t;
+    typedef struct Agsym_t Agsym_t;
+    typedef struct Agdata_t Agdata_t;
+    typedef struct Agproto_t Agproto_t;
+
+    typedef char *(*gets_f) (char *ubuf, int n, FILE * fp);
+
+#define AGFLAG_DIRECTED		(1<<0)
+#define AGFLAG_STRICT		(1<<1)
+#define AGFLAG_METAGRAPH	(1<<2)
+
+#define	AGRAPH				0
+#define	AGRAPHSTRICT		(AGRAPH | AGFLAG_STRICT)
+#define AGDIGRAPH 			AGFLAG_DIRECTED
+#define AGDIGRAPHSTRICT		(AGDIGRAPH | AGFLAG_STRICT)
+#define AGMETAGRAPH			(AGFLAG_DIRECTED | AGFLAG_STRICT | AGFLAG_METAGRAPH)
+
+#define AG_IS_DIRECTED(g)	((g)->kind & AGFLAG_DIRECTED)
+#define AG_IS_STRICT(g)		((g)->kind & AGFLAG_STRICT)
+#define AG_IS_METAGRAPH(g)	((g)->kind & AGFLAG_METAGRAPH)
+#define aginit()			aginitlib(sizeof(Agraph_t),sizeof(Agnode_t),sizeof(Agedge_t))
+
+    struct Agraph_t {
+	int tag:4;
+	int kind:4;
+	int handle:24;
+	char **attr;
+	char *didset;
+	char *name;
+	Agdata_t *univ;
+	Dict_t *nodes, *inedges, *outedges;
+	Agraph_t *root;
+	Agnode_t *meta_node;
+	Agproto_t *proto;
+	Agraphinfo_t u;
+    };
+
+    struct Agnode_t {
+	int tag:4;
+	int pad:4;
+	int handle:24;
+	char **attr;
+	char *didset;
+	char *name;
+	int id;
+	Agraph_t *graph;
+	Agnodeinfo_t u;
+    };
+
+    struct Agedge_t {
+	int tag:4;
+	int printkey:4;
+	int handle:24;
+	char **attr;
+	char *didset;
+	Agnode_t *head, *tail;
+	int id;
+	Agedgeinfo_t u;
+    };
+
+    struct Agdata_t {		/* for main graph */
+	Dict_t *node_dict;
+	Agdict_t *nodeattr;
+	Agdict_t *edgeattr;
+	Agdict_t *globattr;
+	int max_node_id, max_edge_id;
+    };
+
+    struct Agsym_t {
+	char *name, *value;
+	int index;
+	unsigned char printed;
+	unsigned char fixed;
+    };
+
+    struct Agdict_t {
+	char *name;
+	Dict_t *dict;
+	Agsym_t **list;
+    };
+
+    struct Agproto_t {
+	Agnode_t *n;
+	Agedge_t *e;
+	Agproto_t *prev;
+    };
+
+#if _PACKAGE_ast
+     _BEGIN_EXTERNS_		/* public data */
+#if _BLD_graph && defined(__EXPORT__)
+#define extern  __EXPORT__
+#endif
+#if !_BLD_graph && defined(__IMPORT__) && 0
+#define extern  __IMPORT__
+#endif
+#endif
+
+/*visual studio*/
+#ifdef WIN32_DLL
+#ifndef GRAPH_EXPORTS
+#define extern __declspec(dllimport)
+#endif
+#endif
+/*end visual studio*/
+    extern char *agstrcanon(char *, char *);
+    extern char *agcanonical(char *);
+    extern char *agcanon(char *);
+    extern int aghtmlstr(char *s);
+    extern char *agget(void *, char *);
+    extern char *agxget(void *, int);
+    extern int agset(void *, char *, char *);
+    extern int agsafeset(void *, char *, char *, char*);
+    extern int agxset(void *, int, char *);
+    extern int agindex(void *, char *);
+
+    extern void aginitlib(int, int, int);
+    extern Agraph_t *agopen(char *, int);
+    extern Agraph_t *agsubg(Agraph_t *, char *);
+    extern Agraph_t *agfindsubg(Agraph_t *, char *);
+    extern void agclose(Agraph_t *);
+    extern Agraph_t *agread(FILE *);
+    extern Agraph_t *agread_usergets(FILE *, gets_f);
+    extern void agreadline(int);
+    extern void agsetfile(char *);
+    extern Agraph_t *agmemread(char *);
+    extern void agsetiodisc(
+        char * (*myfgets) (char *s, int size, FILE *stream),
+	size_t (*myfwrite) (const void *ptr, size_t size, size_t nmemb, FILE *stream),
+	int (*myferror) (FILE *stream) );
+    extern int agputs(const char *s, FILE *fp);
+    extern int agputc(int c, FILE *fp);
+    extern int agwrite(Agraph_t *, FILE *);
+    extern int agerrors(void);
+    extern Agraph_t *agprotograph(void);
+    extern Agnode_t *agprotonode(Agraph_t *);
+    extern Agedge_t *agprotoedge(Agraph_t *);
+    extern Agraph_t *agusergraph(Agnode_t *);
+    extern int agnnodes(Agraph_t *);
+    extern int agnedges(Agraph_t *);
+
+    extern void aginsert(Agraph_t *, void *);
+    extern void agdelete(Agraph_t *, void *);
+    extern int agcontains(Agraph_t *, void *);
+
+    extern Agnode_t *agnode(Agraph_t *, char *);
+    extern Agnode_t *agfindnode(Agraph_t *, char *);
+    extern Agnode_t *agfstnode(Agraph_t *);
+    extern Agnode_t *agnxtnode(Agraph_t *, Agnode_t *);
+    extern Agnode_t *aglstnode(Agraph_t *);
+    extern Agnode_t *agprvnode(Agraph_t *, Agnode_t *);
+
+    extern Agedge_t *agedge(Agraph_t *, Agnode_t *, Agnode_t *);
+    extern Agedge_t *agfindedge(Agraph_t *, Agnode_t *, Agnode_t *);
+    extern Agedge_t *agfstedge(Agraph_t *, Agnode_t *);
+    extern Agedge_t *agnxtedge(Agraph_t *, Agedge_t *, Agnode_t *);
+    extern Agedge_t *agfstin(Agraph_t *, Agnode_t *);
+    extern Agedge_t *agnxtin(Agraph_t *, Agedge_t *);
+    extern Agedge_t *agfstout(Agraph_t *, Agnode_t *);
+    extern Agedge_t *agnxtout(Agraph_t *, Agedge_t *);
+
+    extern Agsym_t *agattr(void *, char *, char *);
+    extern Agsym_t *agraphattr(Agraph_t *, char *, char *);
+    extern Agsym_t *agnodeattr(Agraph_t *, char *, char *);
+    extern Agsym_t *agedgeattr(Agraph_t *, char *, char *);
+    extern Agsym_t *agfindattr(void *, char *);
+    extern Agsym_t *agfstattr(void *);
+    extern Agsym_t *agnxtattr(void *, Agsym_t *);
+    extern Agsym_t *aglstattr(void *);
+    extern Agsym_t *agprvattr(void *, Agsym_t *);
+    extern int      agcopyattr(void *, void *);	
+
+    typedef enum { AGWARN, AGERR, AGMAX, AGPREV } agerrlevel_t;
+    extern agerrlevel_t agerrno;
+    extern void agseterr(agerrlevel_t);
+    extern char *aglasterr(void);
+    extern int agerr(agerrlevel_t level, char *fmt, ...);
+    extern void agerrorf(const char *fmt, ...);
+    extern void agwarningf(char *fmt, ...);
+
+    extern char *agstrdup(char *);
+    extern char *agstrdup_html(char *s);
+    extern void agstrfree(char *);
+
+    typedef enum { AGNODE = 1, AGEDGE, AGGRAPH } agobjkind_t;
+#define agobjkind(p)		((agobjkind_t)(((Agraph_t*)(p))->tag))
+
+#define agmetanode(g)		((g)->meta_node)
+
+#undef extern
+#if _PACKAGE_ast
+     _END_EXTERNS_
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif				/* _GRAPH_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/gvc.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,111 @@
+/* $Id: gvc.h,v 1.65 2009/06/03 01:10:53 ellson Exp $ $Revision: 1.65 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef			GVC_H
+#define			GVC_H
+
+#include "types.h"
+#include "gvplugin.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef GVDLL
+#define extern __declspec(dllexport)
+#else
+#define extern
+#endif
+
+/*visual studio*/
+#ifdef WIN32_DLL
+#ifndef GVC_EXPORTS
+#define extern __declspec(dllimport)
+#endif
+#endif
+/*end visual studio*/
+	
+/* misc */
+/* FIXME - this needs eliminating or renaming */
+extern void gvToggle(int);
+
+/* set up a graphviz context */
+extern GVC_t *gvNEWcontext(const lt_symlist_t *builtins, int demand_loading);
+
+/*  set up a graphviz context - and init graph - retaining old API */
+extern GVC_t *gvContext(void);
+/*  set up a graphviz context - and init graph - with builtins */
+extern GVC_t *gvContextPlugins(const lt_symlist_t *builtins, int demand_loading);
+
+/* get information associated with a graphviz context */
+extern char **gvcInfo(GVC_t*);
+extern char *gvcVersion(GVC_t*);
+extern char *gvcBuildDate(GVC_t*);
+
+/* parse command line args - minimally argv[0] sets layout engine */
+extern int gvParseArgs(GVC_t *gvc, int argc, char **argv);
+extern graph_t *gvNextInputGraph(GVC_t *gvc);
+extern graph_t *gvPluginsGraph(GVC_t *gvc);
+
+/* Compute a layout using a specified engine */
+extern int gvLayout(GVC_t *gvc, graph_t *g, const char *engine);
+
+/* Compute a layout using layout engine from command line args */
+extern int gvLayoutJobs(GVC_t *gvc, graph_t *g);
+
+/* Render layout into string attributes of the graph */
+extern void attach_attrs(graph_t *g);
+
+/* Parse an html string */
+#ifndef WITH_CGRAPH
+extern char *agstrdup_html(char *s);
+#endif
+extern int aghtmlstr(char *s);
+
+/* Render layout in a specified format to an open FILE */
+extern int gvRender(GVC_t *gvc, graph_t *g, const char *format, FILE *out);
+
+/* Render layout in a specified format to an open FILE */
+extern int gvRenderFilename(GVC_t *gvc, graph_t *g, const char *format, const char *filename);
+
+/* Render layout in a specified format to an external context */
+extern int gvRenderContext(GVC_t *gvc, graph_t *g, const char *format, void *context);
+
+/* Render layout in a specified format to a malloc'ed string */
+extern int gvRenderData(GVC_t *gvc, graph_t *g, const char *format, char **result, unsigned int *length);
+
+/* Render layout according to -T and -o options found by gvParseArgs */
+extern int gvRenderJobs(GVC_t *gvc, graph_t *g);
+
+/* Clean up layout data structures - layouts are not nestable (yet) */
+extern int gvFreeLayout(GVC_t *gvc, graph_t *g);
+
+/* Clean up graphviz context */
+extern int gvFreeContext(GVC_t *gvc);
+
+/** Add a library from your user application
+ * @param gvc Graphviz context to add library to
+ * @param lib library to add
+ */
+extern void gvAddLibrary(GVC_t *gvc, gvplugin_library_t *lib);
+
+#undef extern
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif			/* GVC_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/gvcext.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,94 @@
+
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+/* Common header used by both clients and plugins */
+
+#ifndef GVCEXT_H
+#define GVCEXT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Define an apis array of name strings using an enumerated api_t as index.
+ * The enumerated type is defined here.  The apis array is
+ * inititialized in gvplugin.c by redefining ELEM and reinvoking APIS.
+ */
+#define APIS ELEM(render) ELEM(layout) ELEM(textlayout) ELEM(device) ELEM(loadimage)
+
+/*
+ * Define api_t using names based on the plugin names with API_ prefixed.
+ */
+#define ELEM(x) API_##x,
+    typedef enum { APIS _DUMMY_ELEM_=0 } api_t; /* API_render, API_layout, ... */
+    			/* Stupid but true: The sole purpose of "_DUMMY_ELEM_=0"
+			 * is to avoid a "," after the last element of the enum
+			 * because some compilers when using "-pedantic"
+			 * generate an error for about the dangling ","
+			 * but only if this header is used from a .cpp file!
+			 * Setting it to 0 makes sure that the enumeration
+			 * does not define an extra value.  (It does however
+			 * define _DUMMY_ELEM_ as an enumeration symbol,
+			 * but its value duplicates that of the first
+			 * symbol in the enumeration - in this case "render".)
+			 */
+
+    			/* One could wonder why trailing "," in:
+			 * 	int nums[]={1,2,3,};
+			 * is OK, but in:
+			 * 	typedef enum {a,b,c,} abc_t; 
+			 * is not!!!
+			 */
+#undef ELEM
+
+    typedef struct GVJ_s GVJ_t;
+    typedef struct GVC_s GVC_t;
+
+    typedef struct {
+	const char *name;
+	void* address;
+    } lt_symlist_t;
+
+    typedef struct gvplugin_available_s gvplugin_available_t;
+
+/*visual studio*/
+#ifdef WIN32_DLL
+#ifndef GVC_EXPORTS
+__declspec(dllimport) lt_symlist_t lt_preloaded_symbols[];
+#else
+__declspec(dllexport) lt_symlist_t lt_preloaded_symbols[];
+#endif
+#endif
+/*end visual studio*/
+
+
+#ifndef WIN32_DLL
+#if defined(GVDLL)
+	__declspec(dllexport) lt_symlist_t lt_preloaded_symbols[];
+#else
+	extern lt_symlist_t lt_preloaded_symbols[];
+#endif
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/gvcjob.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,374 @@
+/* $Id: gvcjob.h,v 1.82 2009/07/08 15:14:20 ellson Exp $ $Revision: 1.82 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+/* Common header used by both clients and plugins */
+
+#ifndef GVCJOB_H
+#define GVCJOB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "gvcommon.h"
+#include "color.h"
+
+#define ARRAY_SIZE(A) (sizeof(A)/sizeof(A[0]))
+
+    typedef struct gvdevice_engine_s gvdevice_engine_t;
+    typedef struct gvformatter_engine_s gvformatter_engine_t;
+    typedef struct gvrender_engine_s gvrender_engine_t;
+    typedef struct gvlayout_engine_s gvlayout_engine_t;
+    typedef struct gvtextlayout_engine_s gvtextlayout_engine_t;
+    typedef struct gvloadimage_engine_s gvloadimage_engine_t;
+
+    typedef enum { PEN_NONE, PEN_DASHED, PEN_DOTTED, PEN_SOLID } pen_type;
+    typedef enum { FILL_NONE, FILL_SOLID } fill_type;
+    typedef enum { FONT_REGULAR, FONT_BOLD, FONT_ITALIC } font_type;
+    typedef enum { LABEL_PLAIN, LABEL_HTML } label_type;
+
+#define PENWIDTH_NORMAL 1.
+#define PENWIDTH_BOLD 2.
+    typedef enum { GVATTR_STRING, GVATTR_BOOL, GVATTR_COLOR } gvattr_t;
+
+/* The -T output formats listed below are examples only, they are not definitive or inclusive,
+ other outputs may use the flags now, or in the future 
+
+                   Default emit order is breadth first graph walk order 
+ EMIT_SORTED			emits nodes before edges		
+ EMIT_COLORS			emits colors before nodes or edge -Tfig 
+ EMIT_CLUSTERS_LAST		emits cluster after nodes and edges 	
+ EMIT_PREORDER			emit in preorder traversal ???		
+ EMIT_EDGE_SORTED		emits edges before nodes		
+
+ GVDEVICE_DOES_PAGES		provides pagination support -Tps	
+ GVDEVICE_DOES_LAYERS		provides support for layers -Tps	
+ GVDEVICE_EVENTS		supports mouse events -Tgtk, -Txlib	
+ GVDEVICE_DOES_TRUECOLOR	supports alpha channel -Tpng, -Tgtk, -Txlib 
+ GVDEVICE_BINARY_FORMAT		Suppresses \r\n substitution for linends 
+ GVDEVICE_COMPRESSED_FORMAT	controls libz compression		
+ GVDEVICE_NO_WRITER		used when gvdevice is not used because device uses its own writer, -Tming, devil outputs   (FIXME seems to overlap OUTPUT_NOT_REQUIRED)
+
+ GVRENDER_Y_GOES_DOWN		device origin top left, y goes down, otherwise
+  				device origin lower left, y goes up	
+ GVRENDER_DOES_TRANSFORM	device uses scale, translate, rotate to do its own
+ 				coordinate transformations, otherwise coordinates 
+  				are pre-transformed			
+ GVRENDER_DOES_ARROWS		renderer has its own idea of arrow shapes (deprecated) 
+ GVRENDER_DOES_LABELS		basically, maps don't need labels	
+ GVRENDER_DOES_MAPS		renderer encodes mapping information for mouse events -Tcmapx -Tsvg 
+ GVRENDER_DOES_MAP_RECTANGLE	supports a 2 coord rectngle optimization 
+ GVRENDER_DOES_MAP_CIRCLE	supports a 1 coord + radius circle optimization	
+ GVRENDER_DOES_MAP_POLYGON	supports polygons (basically, -Tsvg uses anchors, so doesn't need to support any map shapes) 
+ GVRENDER_DOES_MAP_ELLIPSE	supports a 2 coord ellipse optimization	
+ GVRENDER_DOES_MAP_BSPLINE	supports mapping of splines		
+ GVRENDER_DOES_TOOLTIPS		can represent tooltip info -Tcmapx, -Tsvg		
+ GVRENDER_DOES_TARGETS		can represent target info (open link in a new tab or window) 
+ GVRENDER_DOES_Z		render support 2.5D representation -Tvrml 
+ GVRENDER_NO_WHITE_BG		don't paint white background, assumes white paper -Tps 
+ LAYOUT_NOT_REQUIRED 		don't perform layout -Tcanon 		
+ OUTPUT_NOT_REQUIRED		don't use gvdevice for output (basically when agwrite() used instead) -Tcanon, -Txdot 
+ */
+
+
+#define EMIT_SORTED (1<<0)
+#define EMIT_COLORS (1<<1)
+#define EMIT_CLUSTERS_LAST (1<<2)
+#define EMIT_PREORDER (1<<3)
+#define EMIT_EDGE_SORTED (1<<4)
+#define GVDEVICE_DOES_PAGES (1<<5)
+#define GVDEVICE_DOES_LAYERS (1<<6)
+#define GVDEVICE_EVENTS (1<<7)
+#define GVDEVICE_DOES_TRUECOLOR (1<<8)
+#define GVDEVICE_BINARY_FORMAT (1<<9)
+#define GVDEVICE_COMPRESSED_FORMAT (1<<10)
+#define GVDEVICE_NO_WRITER (1<<11)
+#define GVRENDER_Y_GOES_DOWN (1<<12)
+#define GVRENDER_DOES_TRANSFORM (1<<13)
+#define GVRENDER_DOES_ARROWS (1<<14)
+#define GVRENDER_DOES_LABELS (1<<15)
+#define GVRENDER_DOES_MAPS (1<<16)
+#define GVRENDER_DOES_MAP_RECTANGLE (1<<17)
+#define GVRENDER_DOES_MAP_CIRCLE (1<<18)
+#define GVRENDER_DOES_MAP_POLYGON (1<<19)
+#define GVRENDER_DOES_MAP_ELLIPSE (1<<20)
+#define GVRENDER_DOES_MAP_BSPLINE (1<<21)
+#define GVRENDER_DOES_TOOLTIPS (1<<22)
+#define GVRENDER_DOES_TARGETS (1<<23)
+#define GVRENDER_DOES_Z (1<<24)
+#define GVRENDER_NO_WHITE_BG (1<<25)
+#define LAYOUT_NOT_REQUIRED (1<<26)
+#define OUTPUT_NOT_REQUIRED (1<<27)
+
+    typedef struct {
+	int flags;
+	double default_pad;	/* graph units */
+	char **knowncolors;
+	int sz_knowncolors;
+	color_type_t color_type;
+    } gvrender_features_t;
+
+    typedef struct {
+	int flags;
+	pointf default_margin;  /* left/right, top/bottom - points */
+	pointf default_pagesize;/* default page width, height - points */
+	pointf default_dpi;
+    } gvdevice_features_t;
+
+#define LAYOUT_USES_RANKDIR (1<<0)
+
+    typedef struct gvplugin_active_device_s {
+        gvdevice_engine_t *engine;
+        int id;
+        gvdevice_features_t *features;
+        const char *type;
+    } gvplugin_active_device_t;
+
+    typedef struct gvplugin_active_render_s {
+        gvrender_engine_t *engine;
+        int id;
+        gvrender_features_t *features;
+        const char *type;
+    } gvplugin_active_render_t;
+
+    typedef struct gvplugin_active_loadimage_t {
+	gvloadimage_engine_t *engine;
+	int id;
+	const char *type;
+    } gvplugin_active_loadimage_t;
+
+    typedef struct gv_argvlist_s {
+	char **argv;
+	int argc;
+	int alloc;
+    } gv_argvlist_t;
+
+    typedef struct gvdevice_callbacks_s {
+	void (*refresh) (GVJ_t * job);
+        void (*button_press) (GVJ_t * job, int button, pointf pointer);
+        void (*button_release) (GVJ_t * job, int button, pointf pointer);
+        void (*motion) (GVJ_t * job, pointf pointer);
+        void (*modify) (GVJ_t * job, const char *name, const char *value);
+        void (*del) (GVJ_t * job);  /* can't use "delete" 'cos C++ stole it */
+        void (*read) (GVJ_t * job, const char *filename, const char *layout);
+        void (*layout) (GVJ_t * job, const char *layout);
+        void (*render) (GVJ_t * job, const char *format, const char *filename);
+    } gvdevice_callbacks_t;
+
+    typedef int (*gvevent_key_callback_t) (GVJ_t * job);
+
+    typedef struct gvevent_key_binding_s {
+	char *keystring;
+	gvevent_key_callback_t callback;
+    } gvevent_key_binding_t;
+
+    typedef enum {MAP_RECTANGLE, MAP_CIRCLE, MAP_POLYGON, } map_shape_t;
+
+    typedef enum {ROOTGRAPH_OBJTYPE, CLUSTER_OBJTYPE, NODE_OBJTYPE, EDGE_OBJTYPE} obj_type;
+
+    /* See comment in gvrender_core_dot.c */
+    typedef enum {
+	EMIT_GDRAW, EMIT_CDRAW, EMIT_TDRAW, EMIT_HDRAW, 
+	EMIT_GLABEL, EMIT_CLABEL, EMIT_TLABEL, EMIT_HLABEL,
+	EMIT_NDRAW, EMIT_EDRAW, EMIT_NLABEL, EMIT_ELABEL,  
+    } emit_state_t;
+
+    typedef struct obj_state_s obj_state_t;
+
+    struct obj_state_s {
+	obj_state_t *parent;
+
+	obj_type type;
+	union {
+	    graph_t *g;
+	    graph_t *sg;  
+	    node_t *n;
+	    edge_t *e;
+	} u;
+
+	emit_state_t emit_state; 
+
+	gvcolor_t pencolor, fillcolor;
+	pen_type pen;
+	fill_type fill;
+	double penwidth;
+	char **rawstyle;
+
+	double z, tail_z, head_z;   /* z depths for 2.5D renderers such as vrml */
+
+	/* fully substituted text strings */
+	char *label;
+	char *taillabel;
+	char *headlabel; 
+
+	char *url;              /* if GVRENDER_DOES_MAPS */
+	char *id;
+	char *labelurl;
+	char *tailurl;
+	char *headurl; 
+
+	char *tooltip;          /* if GVRENDER_DOES_TOOLTIPS */
+	char *labeltooltip;
+	char *tailtooltip;
+	char *headtooltip; 
+
+	char *target;           /* if GVRENDER_DOES_TARGETS */
+	char *labeltarget;
+	char *tailtarget;
+	char *headtarget; 
+
+	int explicit_tooltip:1;
+	int explicit_tailtooltip:1;
+	int explicit_headtooltip:1;
+	int explicit_labeltooltip:1;
+	int explicit_tailtarget:1;
+	int explicit_headtarget:1;
+	int explicit_edgetarget:1;
+	int explicit_tailurl:1;
+	int explicit_headurl:1;
+
+	/* primary mapped region - node shape, edge labels */
+	map_shape_t url_map_shape; 
+	int url_map_n;                  /* number of points for url map if GVRENDER_DOES_MAPS */
+	pointf *url_map_p;
+
+	/* additonal mapped regions for edges */
+	int url_bsplinemap_poly_n;      /* number of polygons in url bspline map
+					 if GVRENDER_DOES_MAPS && GVRENDER_DOES_MAP_BSPLINES */
+	int *url_bsplinemap_n;          /* array of url_bsplinemap_poly_n ints 
+					 of number of points in each polygon */
+	pointf *url_bsplinemap_p;       /* all the polygon points */
+
+	int tailendurl_map_n;           /* tail end intersection with node */
+	pointf *tailendurl_map_p;
+
+	int headendurl_map_n;           /* head end intersection with node */
+	pointf *headendurl_map_p;
+    };
+
+/* Note on units:
+ *     points  - a physical distance (1/72 inch) unaffected by zoom or dpi.
+ *     graph units - related to physical distance by zoom.  Equals points at zoom=1
+ *     device units - related to physical distance in points by dpi/72
+ */
+
+    struct GVJ_s {
+	GVC_t *gvc;		/* parent gvc */
+	GVJ_t *next;		/* linked list of jobs */
+	GVJ_t *next_active;	/* linked list of active jobs (e.g. multiple windows) */
+
+	GVCOMMON_t *common;
+
+	obj_state_t *obj;	/* objects can be nested (at least clusters can)
+					so keep object state on a stack */
+	char *input_filename;
+	int graph_index;
+
+	const char *layout_type;
+
+	const char *output_filename;
+	FILE *output_file;
+	char *output_data;
+	unsigned int output_data_allocated;
+	unsigned int output_data_position;
+
+	const char *output_langname;
+	int output_lang;
+
+	gvplugin_active_render_t render;
+	gvplugin_active_device_t device;
+	gvplugin_active_loadimage_t loadimage;
+	gvdevice_callbacks_t *callbacks;
+	pointf device_dpi;
+	boolean device_sets_dpi;
+
+	void *display;
+	int screen;
+
+	void *context;		/* gd or cairo surface */
+	boolean external_context;	/* context belongs to caller */
+	char *imagedata;	/* location of imagedata */
+
+        int flags;		/* emit_graph flags */
+
+	int numLayers;		/* number of layers */
+	int layerNum;		/* current layer - 1 based*/
+
+	point 	pagesArraySize; /* 2D size of page array */
+	point	pagesArrayFirst;/* 2D starting corner in */
+	point	pagesArrayMajor;/* 2D major increment */
+	point	pagesArrayMinor;/* 2D minor increment */
+	point	pagesArrayElem; /* 2D coord of current page - 0,0 based */
+        int	numPages;	/* number of pages */
+
+	boxf    bb;		/* graph bb with padding - graph units */
+	pointf  pad;		/* padding around bb - graph units */
+	boxf    clip;		/* clip region in graph units */
+	boxf	pageBox;	/* current page in graph units */
+	pointf	pageSize;	/* page size in graph units */
+	pointf  focus;		/* viewport focus - graph units */
+
+	double  zoom;		/* viewport zoom factor (points per graph unit) */
+	int	rotation;	/* viewport rotation (degrees)  0=portrait, 90=landscape */
+
+	pointf  view;		/* viewport size - points */
+	boxf	canvasBox;	/* viewport area - points */
+        pointf  margin;		/* job-specific margin - points */
+
+	pointf	dpi;		/* device resolution device-units-per-inch */
+
+        unsigned int width;     /* device width - device units */
+        unsigned int height;    /* device height - device units */
+	box     pageBoundingBox;/* rotated boundingBox - device units */
+	box     boundingBox;    /* cumulative boundingBox over all pages - device units */
+
+	pointf  scale;		/* composite device to graph units (zoom and dpi) */
+	pointf  translation;    /* composite translation */
+	pointf  devscale;	/* composite device to points: dpi, y_goes_down */
+
+	boolean	fit_mode,
+		needs_refresh,
+		click,
+		has_grown,
+		has_been_rendered;
+
+	unsigned char button;   /* active button */
+	pointf pointer;		/* pointer position in device units */
+	pointf oldpointer;	/* old pointer position in device units */
+
+	void *current_obj;      /* graph object that pointer is in currently */
+
+	void *selected_obj;      /* graph object that has been selected */
+					/* (e.g. button 1 clicked on current obj) */
+	char *active_tooltip;		/* tooltip of active object - or NULL */
+	char *selected_href;		/* href of selected object - or NULL */
+	gv_argvlist_t selected_obj_type_name; /* (e.g. "edge" "node3" "e" "->" "node5" "") */
+	gv_argvlist_t selected_obj_attributes; /* attribute triplets: name, value, type */
+				/* e.g. "color", "red", GVATTR_COLOR,
+					"style", "filled", GVATTR_BOOL, */
+
+	void *window;		/* display-specific data for gvrender plugin */
+
+        /* keybindings for keyboard events */
+	gvevent_key_binding_t *keybindings;
+	int numkeys;
+	void *keycodes;
+    };
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* GVCJOB_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/gvcommon.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,43 @@
+/* $Id: gvcommon.h,v 1.14 2009/06/03 01:10:53 ellson Exp $ $Revision: 1.14 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef GVCOMMON_H
+#define GVCOMMON_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    typedef struct GVCOMMON_s {
+	char **info;
+	char *cmdname;
+	int verbose;
+	boolean config, auto_outfile_names;
+        void (*errorfn) (const char *fmt, ...);
+	const char **show_boxes; /* emit code for correct box coordinates */
+	const char **lib; 
+
+	/* rendering state */
+	int viewNum;     /* current view - 1 based count of views,
+			    all pages in all layers */
+	const lt_symlist_t *builtins;
+	int demand_loading;
+    } GVCOMMON_t;
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* GVCOMMON_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/gvconfig.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,33 @@
+/* $Id: gvconfig.h,v 1.4 2009/06/03 01:10:53 ellson Exp $ $Revision: 1.4 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+/* Header used by plugins */
+
+#ifndef GVCONFIG_H
+#define GVCONFIG_H
+
+#include "gvplugin.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void gvconfig_plugin_install_from_library(GVC_t * gvc, char *path, gvplugin_library_t *library);
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* GVCONFIG_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/gvplugin.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+/* $Id: gvplugin.h,v 1.31 2009/07/14 13:18:07 ellson Exp $ $Revision: 1.31 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+/* Header used by plugins */
+
+#ifndef GVPLUGIN_H
+#define GVPLUGIN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "gvcext.h"
+
+/* 
+ * Terminology:
+ *
+ *    package         - e.g. libgvplugin_cairo.so
+ *       api	      - e.g. render
+ *          type      - e.g. "png", "ps"
+ */
+
+    typedef struct {
+	int id;         /* an id that is only unique within a package 
+			of plugins of the same api.
+			A renderer-type such as "png" in the cairo package
+			has an id that is different from the "ps" type
+			in the same package */
+	const char *type;	/* a string name, such as "png" or "ps" that
+			distinguishes different types withing the same
+			 (renderer in this case) */
+	int quality;    /* an arbitrary integer used for ordering plugins of
+			the same type from different packages */
+	void *engine;   /* pointer to the jump table for the plugin */
+	void *features; /* pointer to the feature description 
+				void* because type varies by api */
+    } gvplugin_installed_t;
+
+    typedef struct {
+	api_t api;
+	gvplugin_installed_t *types;
+    } gvplugin_api_t;
+
+    typedef struct {
+	char *packagename;    /* used when this plugin is builtin and has
+					no pathname */
+	gvplugin_api_t *apis;
+    } gvplugin_library_t;
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* GVPLUGIN_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/gvplugin_device.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,37 @@
+/* $Id: gvplugin_device.h,v 1.18 2009/06/03 01:10:53 ellson Exp $ $Revision: 1.18 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef GVDEVICE_PLUGIN_H
+#define GVDEVICE_PLUGIN_H
+
+#include "types.h"
+#include "gvplugin.h"
+#include "gvcjob.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    struct gvdevice_engine_s {
+	void (*initialize) (GVJ_t * firstjob);
+	void (*format) (GVJ_t * firstjob);
+	void (*finalize) (GVJ_t * firstjob);
+    };
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* GVDEVICE_PLUGIN_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/gvplugin_layout.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+/* $Id: gvplugin_layout.h,v 1.8 2009/06/03 01:10:53 ellson Exp $ $Revision: 1.8 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef GVPLUGIN_LAYOUT_H
+#define GVPLUGIN_LAYOUT_H
+
+#include "types.h"
+#include "gvplugin.h"
+#include "gvcjob.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    struct gvlayout_engine_s {
+	void (*layout) (graph_t * g);
+	void (*cleanup) (graph_t * g);
+    };
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* GVPLUGIN_LAYOUT_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/gvplugin_loadimage.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,54 @@
+/* $Id: gvplugin_loadimage.h,v 1.12 2009/06/03 01:10:53 ellson Exp $ $Revision: 1.12 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef GVPLUGIN_IMAGELOAD_H
+#define GVPLUGIN_IMAGELOAD_H
+
+#include "types.h"
+#include "gvplugin.h"
+#include "gvcjob.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef GVDLL
+#  define extern __declspec(dllexport)
+#endif
+
+/*visual studio*/
+#ifdef WIN32_DLL
+#ifndef GVC_EXPORTS
+#define extern __declspec(dllimport)
+#endif
+#endif
+/*end visual studio*/
+
+extern boolean gvusershape_file_access(usershape_t *us);
+extern void gvusershape_file_release(usershape_t *us);
+
+    struct gvloadimage_engine_s {
+	void (*loadimage) (GVJ_t *job, usershape_t *us, boxf b, boolean filled);
+    };
+
+#ifdef extern
+#undef extern
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* GVPLUGIN_IMAGELOAD_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/gvplugin_render.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+/* $Id: gvplugin_render.h,v 1.36 2009/06/03 01:10:53 ellson Exp $ $Revision: 1.36 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef GVPLUGIN_RENDER_H
+#define GVPLUGIN_RENDER_H
+
+#include "types.h"
+#include "gvplugin.h"
+#include "gvcjob.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    struct gvrender_engine_s {
+	void (*begin_job) (GVJ_t * job);
+	void (*end_job) (GVJ_t * job);
+	void (*begin_graph) (GVJ_t * job);
+	void (*end_graph) (GVJ_t * job);
+	void (*begin_layer) (GVJ_t * job, char *layername,
+			     int layerNum, int numLayers);
+	void (*end_layer) (GVJ_t * job);
+	void (*begin_page) (GVJ_t * job);
+	void (*end_page) (GVJ_t * job);
+	void (*begin_cluster) (GVJ_t * job);
+	void (*end_cluster) (GVJ_t * job);
+	void (*begin_nodes) (GVJ_t * job);
+	void (*end_nodes) (GVJ_t * job);
+	void (*begin_edges) (GVJ_t * job);
+	void (*end_edges) (GVJ_t * job);
+	void (*begin_node) (GVJ_t * job);
+	void (*end_node) (GVJ_t * job);
+	void (*begin_edge) (GVJ_t * job);
+	void (*end_edge) (GVJ_t * job);
+	void (*begin_anchor) (GVJ_t * job,
+		char *href, char *tooltip, char *target, char *id);
+	void (*end_anchor) (GVJ_t * job);
+	void (*begin_label) (GVJ_t * job, label_type type);
+	void (*end_label) (GVJ_t * job);
+	void (*textpara) (GVJ_t * job, pointf p, textpara_t * str);
+	void (*resolve_color) (GVJ_t * job, gvcolor_t * color);
+	void (*ellipse) (GVJ_t * job, pointf * A, int filled);
+	void (*polygon) (GVJ_t * job, pointf * A, int n, int filled);
+	void (*beziercurve) (GVJ_t * job, pointf * A, int n,
+			     int arrow_at_start, int arrow_at_end, int);
+	void (*polyline) (GVJ_t * job, pointf * A, int n);
+	void (*comment) (GVJ_t * job, char *comment);
+	void (*library_shape) (GVJ_t * job, char *name, pointf * A, int n, int filled);
+    };
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* GVPLUGIN_RENDER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/gvplugin_textlayout.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,36 @@
+/* $Id: gvplugin_textlayout.h,v 1.16 2009/06/03 01:10:53 ellson Exp $ $Revision: 1.16 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef GVPLUGIN_TEXTLAYOUT_H
+#define GVPLUGIN_TEXTLAYOUT_H
+
+#include "types.h"
+#include "gvplugin.h"
+#include "gvcjob.h"
+#include "gvcommon.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    struct gvtextlayout_engine_s {
+	boolean (*textlayout) (textpara_t *para, char** fontpath);
+    };
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* GVPLUGIN_TEXTLAYOUT_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/pack.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,95 @@
+/* $Id: pack.h,v 1.17 2009/08/11 21:23:23 erg Exp $ $Revision: 1.17 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+
+
+#ifndef _PACK_H
+#define _PACK_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "types.h"
+
+/* Type indicating granularity and method 
+ *  l_undef    - unspecified
+ *  l_node     - polyomino using nodes and edges
+ *  l_clust    - polyomino using nodes and edges and top-level clusters
+ *               (assumes ND_clust(n) unused by application)
+ *  l_graph    - polyomino using computer graph bounding box
+ *  l_array    - array based on graph bounding boxes
+ *  l_aspect   - tiling based on graph bounding boxes preserving aspect ratio
+ *  l_hull     - polyomino using convex hull (unimplemented)
+ *  l_tile     - tiling using graph bounding box (unimplemented)
+ *  l_bisect   - alternate bisection using graph bounding box (unimplemented)
+ */
+    typedef enum { l_undef, l_clust, l_node, l_graph, l_array, l_aspect } pack_mode;
+
+#define PK_COL_MAJOR 1
+#define PK_USER_VALS 2
+
+typedef unsigned char packval_t;
+
+    typedef struct {
+	float aspect;		/* desired aspect ratio */
+	int sz;			/* row/column size size */
+	unsigned int margin;	/* margin left around objects, in points */
+	int doSplines;		/* use splines in constructing graph shape */
+	pack_mode mode;		/* granularity and method */
+	boolean *fixed;		/* fixed[i] == true implies g[i] should not be moved */
+	packval_t* vals;	/* for arrays, sort numbers */
+	int flags;       
+    } pack_info;
+#ifdef GVDLL
+#define extern __declspec(dllexport)
+#else
+#define extern
+#endif
+
+/*visual studio*/
+#ifdef WIN32_DLL
+#ifndef GVC_EXPORTS
+#define extern __declspec(dllimport)
+#endif
+#endif
+/*end visual studio*/
+
+    extern point *putRects(int ng, boxf* bbs, pack_info* pinfo);
+    extern int packRects(int ng, boxf* bbs, pack_info* pinfo);
+
+    extern point *putGraphs(int, Agraph_t **, Agraph_t *, pack_info *);
+    extern int packGraphs(int, Agraph_t **, Agraph_t *, pack_info *);
+    extern int packSubgraphs(int, Agraph_t **, Agraph_t *, pack_info *);
+    extern int pack_graph(int ng, Agraph_t** gs, Agraph_t* root, boolean* fixed);
+
+    extern int shiftGraphs(int, Agraph_t**, point*, Agraph_t*, int);
+
+    extern pack_mode getPackMode(Agraph_t * g, pack_mode dflt);
+    extern int getPack(Agraph_t *, int not_def, int dflt);
+    extern pack_mode getPackInfo(Agraph_t * g, pack_mode dflt, int dfltMargin, pack_info*);
+    extern pack_mode getPackModeInfo(Agraph_t * g, pack_mode dflt, pack_info*);
+    extern pack_mode parsePackModeInfo(char* p, pack_mode dflt, pack_info* pinfo);
+
+    extern int isConnected(Agraph_t *);
+    extern Agraph_t **ccomps(Agraph_t *, int *, char *);
+    extern Agraph_t **pccomps(Agraph_t *, int *, char *, boolean *);
+    extern int nodeInduce(Agraph_t *);
+#undef extern
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/pathgeom.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,54 @@
+/* $Id: pathgeom.h,v 1.4 2009/06/03 01:10:54 ellson Exp $ $Revision: 1.4 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+
+#ifndef _PATHGEOM_INCLUDE
+#define _PATHGEOM_INCLUDE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef HAVE_POINTF_S
+    typedef struct pointf_s Ppoint_t;
+    typedef struct pointf_s Pvector_t;
+#else
+    typedef struct Pxy_t {
+	double x, y;
+    } Pxy_t;
+
+    typedef struct Pxy_t Ppoint_t;
+    typedef struct Pxy_t Pvector_t;
+#endif
+
+    typedef struct Ppoly_t {
+	Ppoint_t *ps;
+	int pn;
+    } Ppoly_t;
+
+    typedef Ppoly_t Ppolyline_t;
+
+    typedef struct Pedge_t {
+	Ppoint_t a, b;
+    } Pedge_t;
+
+/* opaque state handle for visibility graph operations */
+    typedef struct vconfig_s vconfig_t;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/pathplan.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+/* $Id: pathplan.h,v 1.5 2009/06/03 01:10:54 ellson Exp $ $Revision: 1.5 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+
+
+#ifndef _PATH_INCLUDE
+#define _PATH_INCLUDE
+
+#include "pathgeom.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#if defined(_BLD_pathplan) && defined(__EXPORT__)
+#   define extern __EXPORT__
+#endif
+
+/* find shortest euclidean path within a simple polygon */
+    extern int Pshortestpath(Ppoly_t * boundary, Ppoint_t endpoints[2],
+			     Ppolyline_t * output_route);
+
+/* fit a spline to an input polyline, without touching barrier segments */
+    extern int Proutespline(Pedge_t * barriers, int n_barriers,
+			    Ppolyline_t input_route,
+			    Pvector_t endpoint_slopes[2],
+			    Ppolyline_t * output_route);
+
+/* utility function to convert from a set of polygonal obstacles to barriers */
+    extern int Ppolybarriers(Ppoly_t ** polys, int npolys,
+			     Pedge_t ** barriers, int *n_barriers);
+
+/* function to convert a polyline into a spline representation */
+    extern void make_polyline(Ppolyline_t line, Ppolyline_t* sline);
+
+#undef extern
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/textpara.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+/* $Id: textpara.h,v 1.13 2009/06/03 01:10:52 ellson Exp $ $Revision: 1.13 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef TEXTPARA_H
+#define TEXTPARA_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    typedef struct _PostscriptAlias {
+        char* name;
+        char* family;
+        char* weight;
+        char* stretch;
+        char* style;
+        int xfig_code;
+	char* svg_font_family;
+	char* svg_font_weight;
+	char* svg_font_style;
+    } PostscriptAlias;
+
+    typedef struct textpara_t {
+	char *str;      /* stored in utf-8 */
+	char *fontname; 
+	PostscriptAlias *postscript_alias; 
+	void *layout;
+	void (*free_layout) (void *layout);   /* FIXME - this is ugly */
+	double fontsize, width, height, yoffset_layout, yoffset_centerline;
+	char just;	/* 'l' 'n' 'r' */
+    } textpara_t;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/types.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,752 @@
+/* $Id: types.h,v 1.101 2009/08/28 19:46:42 erg Exp $ $Revision: 1.101 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef GV_TYPES_H
+#define GV_TYPES_H
+
+#include <stdio.h>
+#include <assert.h>
+#include <signal.h>
+
+typedef unsigned char boolean;
+#ifndef NOT
+#define NOT(v) (!(v))
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef TRUE
+#define TRUE NOT(FALSE)
+#endif
+
+#include "geom.h"
+#include "gvcext.h"
+#include "pathgeom.h"
+#include "textpara.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    typedef int (*qsort_cmpf) (const void *, const void *);
+    typedef int (*bsearch_cmpf) (const void *, const void *);
+
+#ifdef WITH_CGRAPH
+#include <cgraph.h>
+    typedef struct Agraph_s graph_t;
+    typedef struct Agnode_s node_t;
+    typedef struct Agedge_s edge_t;
+    typedef struct Agsym_s attrsym_t;
+#define TAIL_ID "tailport"
+#define HEAD_ID "headport"
+#else
+    typedef struct Agraph_t graph_t;
+    typedef struct Agnode_t node_t;
+    typedef struct Agedge_t edge_t;
+    typedef struct Agsym_t attrsym_t;
+#endif
+
+    typedef struct htmllabel_t htmllabel_t;
+
+    typedef union inside_t {
+	struct {
+	    pointf* p;
+	    double* r;
+	} a;
+	struct {
+	    node_t* n;
+	    boxf*    bp;
+	} s;
+    } inside_t;
+
+    typedef struct port {	/* internal edge endpoint specification */
+	pointf p;		/* aiming point relative to node center */
+	double theta;		/* slope in radians */
+	boxf *bp;		/* if not null, points to bbox of 
+				 * rectangular area that is port target
+				 */
+	boolean	defined;        /* if true, edge has port info at this end */
+	boolean	constrained;    /* if true, constraints such as theta are set */
+	boolean clip;           /* if true, clip end to node/port shape */
+	boolean dyna;           /* if true, assign compass point dynamically */
+	unsigned char order;	/* for mincross */
+	unsigned char side;	/* if port is on perimeter of node, this
+                                 * contains the bitwise OR of the sides (TOP,
+                                 * BOTTOM, etc.) it is on. 
+                                 */
+	char *name;		/* port name, if it was explicitly given, otherwise NULL */
+    } port;
+
+    typedef struct {
+	boolean(*swapEnds) (edge_t * e);	/* Should head and tail be swapped? */
+	boolean(*splineMerge) (node_t * n);	/* Is n a node in the middle of an edge? */
+	boolean ignoreSwap;                     /* Test for swapped edges if false */
+    } splineInfo;
+
+    typedef struct pathend_t {
+	boxf nb;			/* the node box */
+	pointf np;		/* node port */
+	int sidemask;
+	int boxn;
+	boxf boxes[20];
+    } pathend_t;
+
+    typedef struct path {	/* internal specification for an edge spline */
+	port start, end;
+	int nbox;		/* number of subdivisions */
+	boxf *boxes;		/* rectangular regions of subdivision */
+	void *data;
+    } path;
+
+    typedef struct bezier {
+	pointf *list;
+	int size;
+	int sflag, eflag;
+	pointf sp, ep;
+    } bezier;
+
+    typedef struct splines {
+	bezier *list;
+	int size;
+	boxf bb;
+    } splines;
+
+    typedef struct textlabel_t {
+	char *text, *fontname, *fontcolor;
+	int charset;
+	double fontsize;
+	pointf dimen; /* the diagonal size of the label (estimated by layout) */
+	pointf space; /* the diagonal size of the space for the label */
+		      /*   the rendered label is aligned in this box */
+		      /*   space does not include pad or margin */
+	pointf pos;   /* the center of the space for the label */
+	union {
+	    struct {
+		textpara_t *para;
+		short nparas;
+	    } txt;
+	    htmllabel_t *html;
+	} u;
+	char valign;  /* 't' 'c' 'b' */
+	boolean set;  /* true if position is set */
+	boolean html; /* true if html label */
+    } textlabel_t;
+
+    typedef struct polygon_t {	/* mutable shape information for a node */
+	int regular;		/* true for symmetric shapes */
+	int peripheries;	/* number of periphery lines */
+	int sides;		/* number of sides */
+	double orientation;	/* orientation of shape (+ve degrees) */
+	double distortion;	/* distortion factor - as in trapezium */
+	double skew;		/* skew factor - as in parallelogram */
+	int option;		/* ROUNDED, DIAGONAL corners, etc. */
+	pointf *vertices;	/* array of vertex points */
+    } polygon_t;
+
+    typedef struct stroke_t {	/* information about a single stroke */
+	/* we would have called it a path if that term wasn't already used */
+	int nvertices;		/* number of points in the stroke */
+	int flags;		/* stroke style flags */
+	pointf *vertices;	/* array of vertex points */
+    } stroke_t;
+
+/* flag definitions for stroke_t */
+#define STROKE_CLOSED (1 << 0)
+#define STROKE_FILLED (1 << 1)
+#define STROKE_PENDOWN (1 << 2)
+#define STROKE_VERTICES_ALLOCATED (1 << 3)
+
+    typedef struct shape_t {	/* mutable shape information for a node */
+	int nstrokes;		/* number of strokes in array */
+	stroke_t *strokes;	/* array of strokes */
+	/* The last stroke must always be closed, but can be pen_up.
+	 * It is used as the clipping path */
+    } shape_t;
+
+    typedef struct shape_functions {	/* read-only shape functions */
+	void (*initfn) (node_t *);	/* initializes shape from node u.shape_info structure */
+	void (*freefn) (node_t *);	/* frees  shape from node u.shape_info structure */
+	 port(*portfn) (node_t *, char *, char *);	/* finds aiming point and slope of port */
+	 boolean(*insidefn) (inside_t * inside_context, pointf);	/* clips incident gvc->e spline on shape of gvc->n */
+	int (*pboxfn)(node_t* n, port* p, int side, boxf rv[], int *kptr); /* finds box path to reach port */
+	void (*codefn) (GVJ_t * job, node_t * n);	/* emits graphics code for node */
+    } shape_functions;
+
+    typedef enum { SH_UNSET, SH_POLY, SH_RECORD, SH_POINT, SH_EPSF} shape_kind;
+
+    typedef struct shape_desc {	/* read-only shape descriptor */
+	char *name;		/* as read from graph file */
+	shape_functions *fns;
+	polygon_t *polygon;	/* base polygon info */
+	boolean usershape;
+    } shape_desc;
+
+#include "usershape.h"		/* usershapes needed by gvc */
+
+    typedef struct nodequeue {
+	node_t **store, **limit, **head, **tail;
+    } nodequeue;
+
+    typedef struct adjmatrix_t {
+	int nrows, ncols;
+	char *data;
+    } adjmatrix_t;
+
+    typedef struct rank_t {
+	int n;			/* number of nodes in this rank  */
+	node_t **v;		/* ordered list of nodes in rank    */
+	int an;			/* globally allocated number of nodes   */
+	node_t **av;		/* allocated list of nodes in rank  */
+	int ht1, ht2;		/* height below/above centerline    */
+	int pht1, pht2;		/* as above, but only primitive nodes   */
+	boolean candidate;	/* for transpose () */
+	boolean valid;
+	int cache_nc;		/* caches number of crossings */
+	adjmatrix_t *flat;
+    } rank_t;
+
+    typedef enum { R_NONE =
+	    0, R_VALUE, R_FILL, R_COMPRESS, R_AUTO, R_EXPAND } ratio_t;
+
+    typedef struct layout_t {
+	double quantum;
+	double scale;
+	double ratio;		/* set only if ratio_kind == R_VALUE */
+	double dpi;
+	pointf margin;
+	pointf page;
+	pointf size;
+	boolean filled;
+	boolean landscape;
+	boolean centered;
+	ratio_t ratio_kind;
+	void* xdots;
+    } layout_t;
+
+/* for "record" shapes */
+    typedef struct field_t {
+	pointf size;		/* its dimension */
+	boxf b;			/* its placement in node's coordinates */
+	int n_flds;
+	textlabel_t *lp;	/* n_flds == 0 */
+	struct field_t **fld;	/* n_flds > 0 */
+	char *id;		/* user's identifier */
+	unsigned char LR;	/* if box list is horizontal (left to right) */
+	unsigned char sides;    /* sides of node exposed to field */
+    } field_t;
+
+    typedef struct nlist_t {
+	node_t **list;
+	int size;
+    } nlist_t;
+
+    typedef struct elist {
+	edge_t **list;
+	int size;
+    } elist;
+
+#define GUI_STATE_ACTIVE    (1<<0)
+#define GUI_STATE_SELECTED  (1<<1)
+#define GUI_STATE_VISITED   (1<<2)
+#define GUI_STATE_DELETED   (1<<3)
+
+#define elist_fastapp(item,L) do {L.list[L.size++] = item; L.list[L.size] = NULL;} while(0)
+#define elist_append(item,L)  do {L.list = ALLOC(L.size + 2,L.list,edge_t*); L.list[L.size++] = item; L.list[L.size] = NULL;} while(0)
+#define alloc_elist(n,L)      do {L.size = 0; L.list = N_NEW(n + 1,edge_t*); } while (0)
+#define free_list(L)          do {if (L.list) free(L.list);} while (0)
+
+typedef enum {NATIVEFONTS,PSFONTS,SVGFONTS} fontname_kind;
+
+    typedef struct Agraphinfo_t {
+#ifdef WITH_CGRAPH
+	Agrec_t hdr;
+#endif
+	/* to generate code */
+	layout_t *drawing;
+	textlabel_t *label;	/* if the cluster has a title */
+	boxf bb;			/* bounding box */
+	pointf border[4];	/* sizes of margins for graph labels */
+	unsigned char gui_state; /* Graph state for GUI ops */
+	unsigned char has_labels;
+	boolean has_images;
+	unsigned char charset; /* input character set */
+	int rankdir;
+	int ht1, ht2;	/* below and above extremal ranks */
+	unsigned short flags;
+	void *alg;
+	GVC_t *gvc;	/* context for "globals" over multiple graphs */
+	void (*cleanup) (graph_t * g);   /* function to deallocate layout-specific data */
+
+#ifndef DOT_ONLY
+	/* to place nodes */
+	node_t **neato_nlist;
+	int move;
+	double **dist, **spring, **sum_t, ***t;
+	unsigned short ndim;
+	unsigned short odim;
+#endif
+#ifndef NEATO_ONLY
+	/* to have subgraphs */
+	int n_cluster;
+	graph_t **clust;	/* clusters are in clust[1..n_cluster] !!! */
+	node_t *nlist;
+	rank_t *rank;
+	/* fast graph node list */
+	nlist_t comp;
+	/* connected components */
+	node_t *minset, *maxset;	/* set leaders */
+	long n_nodes;
+	/* includes virtual */
+	short minrank, maxrank;
+
+	/* various flags */
+	boolean has_flat_edges;
+	unsigned char	showboxes;
+	boolean cluster_was_collapsed;
+	fontname_kind fontnames;		/* to override mangling in SVG */
+
+	int nodesep, ranksep;
+	node_t *ln, *rn;	/* left, right nodes of bounding box */
+
+
+	/* for clusters */
+	node_t *leader, **rankleader;
+	boolean expanded;
+	char installed;
+	char set_type;
+	char label_pos;
+	boolean exact_ranksep;
+#endif
+
+    } Agraphinfo_t;
+
+#ifdef WITH_CGRAPH
+#define GD_u(g)(((Agraphinfo_t*)AGDATA(g)))
+#define GD_drawing(g) (((Agraphinfo_t*)AGDATA(g))->drawing)
+#define GD_bb(g) (((Agraphinfo_t*)AGDATA(g))->bb)
+#define GD_gvc(g) (((Agraphinfo_t*)AGDATA(g))->gvc)
+#define GD_cleanup(g) (((Agraphinfo_t*)AGDATA(g))->cleanup)
+#define GD_dist(g) (((Agraphinfo_t*)AGDATA(g))->dist)
+#define GD_alg(g) (((Agraphinfo_t*)AGDATA(g))->alg)
+#define GD_border(g) (((Agraphinfo_t*)AGDATA(g))->border)
+#define GD_cl_cnt(g) (((Agraphinfo_t*)AGDATA(g))->cl_nt)
+#define GD_clust(g) (((Agraphinfo_t*)AGDATA(g))->clust)
+#define GD_cluster_was_collapsed(g) (((Agraphinfo_t*)AGDATA(g))->cluster_was_collapsed)
+#define GD_comp(g) (((Agraphinfo_t*)AGDATA(g))->comp)
+#define GD_exact_ranksep(g) (((Agraphinfo_t*)AGDATA(g))->exact_ranksep)
+#define GD_expanded(g) (((Agraphinfo_t*)AGDATA(g))->expanded)
+#define GD_flags(g) (((Agraphinfo_t*)AGDATA(g))->flags)
+#define GD_gui_state(g) (((Agraphinfo_t*)AGDATA(g))->gui_state)
+#define GD_charset(g) (((Agraphinfo_t*)AGDATA(g))->charset)
+#define GD_has_labels(g) (((Agraphinfo_t*)AGDATA(g))->has_labels)
+#define GD_has_images(g) (((Agraphinfo_t*)AGDATA(g))->has_images)
+#define GD_has_flat_edges(g) (((Agraphinfo_t*)AGDATA(g))->has_flat_edges)
+#define GD_ht1(g) (((Agraphinfo_t*)AGDATA(g))->ht1)
+#define GD_ht2(g) (((Agraphinfo_t*)AGDATA(g))->ht2)
+#define GD_inleaf(g) (((Agraphinfo_t*)AGDATA(g))->inleaf)
+#define GD_installed(g) (((Agraphinfo_t*)AGDATA(g))->installed)
+#define GD_label(g) (((Agraphinfo_t*)AGDATA(g))->label)
+#define GD_leader(g) (((Agraphinfo_t*)AGDATA(g))->leader)
+#define GD_rankdir2(g) (((Agraphinfo_t*)AGDATA(g))->rankdir)
+#define GD_rankdir(g) (((Agraphinfo_t*)AGDATA(g))->rankdir & 0x3)
+#define GD_flip(g) (GD_rankdir(g) & 1)
+#define GD_realrankdir(g) ((((Agraphinfo_t*)AGDATA(g))->rankdir) >> 2)
+#define GD_realflip(g) (GD_realrankdir(g) & 1)
+#define GD_ln(g) (((Agraphinfo_t*)AGDATA(g))->ln)
+#define GD_maxrank(g) (((Agraphinfo_t*)AGDATA(g))->maxrank)
+#define GD_maxset(g) (((Agraphinfo_t*)AGDATA(g))->maxset)
+#define GD_minrank(g) (((Agraphinfo_t*)AGDATA(g))->minrank)
+#define GD_minset(g) (((Agraphinfo_t*)AGDATA(g))->minset)
+#define GD_move(g) (((Agraphinfo_t*)AGDATA(g))->move)
+#define GD_n_cluster(g) (((Agraphinfo_t*)AGDATA(g))->n_cluster)
+#define GD_n_nodes(g) (((Agraphinfo_t*)AGDATA(g))->n_nodes)
+#define GD_ndim(g) (((Agraphinfo_t*)AGDATA(g))->ndim)
+#define GD_odim(g) (((Agraphinfo_t*)AGDATA(g))->odim)
+#define GD_neato_nlist(g) (((Agraphinfo_t*)AGDATA(g))->neato_nlist)
+#define GD_nlist(g) (((Agraphinfo_t*)AGDATA(g))->nlist)
+#define GD_nodesep(g) (((Agraphinfo_t*)AGDATA(g))->nodesep)
+#define GD_outleaf(g) (((Agraphinfo_t*)AGDATA(g))->outleaf)
+#define GD_rank(g) (((Agraphinfo_t*)AGDATA(g))->rank)
+#define GD_rankleader(g) (((Agraphinfo_t*)AGDATA(g))->rankleader)
+#define GD_ranksep(g) (((Agraphinfo_t*)AGDATA(g))->ranksep)
+#define GD_rn(g) (((Agraphinfo_t*)AGDATA(g))->rn)
+#define GD_set_type(g) (((Agraphinfo_t*)AGDATA(g))->set_type)
+#define GD_label_pos(g) (((Agraphinfo_t*)AGDATA(g))->label_pos)
+#define GD_showboxes(g) (((Agraphinfo_t*)AGDATA(g))->showboxes)
+#define GD_fontnames(g) (((Agraphinfo_t*)AGDATA(g))->fontnames)
+#define GD_spring(g) (((Agraphinfo_t*)AGDATA(g))->spring)
+#define GD_sum_t(g) (((Agraphinfo_t*)AGDATA(g))->sum_t)
+#define GD_t(g) (((Agraphinfo_t*)AGDATA(g))->t)
+
+#else
+
+#define GD_alg(g) (g)->u.alg
+#define GD_bb(g) (g)->u.bb
+#define GD_border(g) (g)->u.border
+#define GD_cl_cnt(g) (g)->u.cl_cnt
+#define GD_cleanup(g) (g)->u.cleanup
+#define GD_clust(g) (g)->u.clust
+#define GD_cluster_was_collapsed(g) (g)->u.cluster_was_collapsed
+#define GD_comp(g) (g)->u.comp
+#define GD_dist(g) (g)->u.dist
+#define GD_drawing(g) (g)->u.drawing
+#define GD_exact_ranksep(g) (g)->u.exact_ranksep
+#define GD_expanded(g) (g)->u.expanded
+#define GD_flags(g) (g)->u.flags
+#define GD_gui_state(g) (g)->u.gui_state
+#define GD_gvc(g) (g)->u.gvc
+#define GD_charset(g) (g)->u.charset
+#define GD_has_labels(g) (g)->u.has_labels
+#define GD_has_images(g) (g)->u.has_images
+#define GD_has_flat_edges(g) (g)->u.has_flat_edges
+#define GD_ht1(g) (g)->u.ht1
+#define GD_ht2(g) (g)->u.ht2
+#define GD_inleaf(g) (g)->u.inleaf
+#define GD_installed(g) (g)->u.installed
+#define GD_label(g) (g)->u.label
+#define GD_leader(g) (g)->u.leader
+#define GD_rankdir(g) ((g)->u.rankdir & 0x3)
+#define GD_flip(g) (GD_rankdir(g) & 1)
+#define GD_realrankdir(g) ((g)->u.rankdir >> 2)
+#define GD_realflip(g) (GD_realrankdir(g) & 1)
+#define GD_ln(g) (g)->u.ln
+#define GD_maxrank(g) (g)->u.maxrank
+#define GD_maxset(g) (g)->u.maxset
+#define GD_minrank(g) (g)->u.minrank
+#define GD_minset(g) (g)->u.minset
+#define GD_move(g) (g)->u.move
+#define GD_n_cluster(g) (g)->u.n_cluster
+#define GD_n_nodes(g) (g)->u.n_nodes
+#define GD_ndim(g) (g)->u.ndim
+#define GD_odim(g) (g)->u.odim
+#define GD_neato_nlist(g) (g)->u.neato_nlist
+#define GD_nlist(g) (g)->u.nlist
+#define GD_nodesep(g) (g)->u.nodesep
+#define GD_outleaf(g) (g)->u.outleaf
+#define GD_rank(g) (g)->u.rank
+#define GD_rankleader(g) (g)->u.rankleader
+#define GD_ranksep(g) (g)->u.ranksep
+#define GD_rn(g) (g)->u.rn
+#define GD_set_type(g) (g)->u.set_type
+#define GD_label_pos(g) (g)->u.label_pos
+#define GD_showboxes(g) (g)->u.showboxes
+#define GD_fontnames(g) (g)->u.fontnames
+#define GD_spring(g) (g)->u.spring
+#define GD_sum_t(g) (g)->u.sum_t
+#define GD_t(g) (g)->u.t
+#endif
+
+    typedef struct Agnodeinfo_t {
+#ifdef WITH_CGRAPH
+	Agrec_t hdr;
+#endif
+	shape_desc *shape;
+	void *shape_info;
+	pointf coord;
+	double width, height;  /* inches */
+	boxf bb;
+	double ht, lw, rw;
+	textlabel_t *label;
+	textlabel_t *xlabel;
+	void *alg;
+	char state;
+	unsigned char gui_state; /* Node state for GUI ops */
+	boolean clustnode;
+
+#ifndef DOT_ONLY
+	unsigned char pinned;
+	short xsize, ysize;
+	int id, heapindex, hops;
+	double *pos, dist;
+#endif
+#ifndef NEATO_ONLY
+	unsigned char showboxes;
+	boolean  has_port;
+
+	/* fast graph */
+	char node_type, mark, onstack;
+	char ranktype, weight_class;
+	node_t *next, *prev;
+	elist in, out, flat_out, flat_in, other;
+	graph_t *clust;
+
+	/* for union-find and collapsing nodes */
+	int UF_size;
+	node_t *UF_parent;
+	node_t *inleaf, *outleaf;
+
+	/* for placing nodes */
+	int rank, order;	/* initially, order = 1 for ordered edges */
+	int mval;
+	elist save_in, save_out;
+
+	/* for network-simplex */
+	elist tree_in, tree_out;
+	edge_t *par;
+	int low, lim;
+	int priority;
+
+	double pad[1];
+#endif
+
+    } Agnodeinfo_t;
+
+#ifdef WITH_CGRAPH
+#define ND_id(n) (((Agnodeinfo_t*)AGDATA(n))->id)
+#define ND_alg(n) (((Agnodeinfo_t*)AGDATA(n))->alg)
+#define ND_UF_parent(n) (((Agnodeinfo_t*)AGDATA(n))->UF_parent)
+#define ND_UF_size(n) (((Agnodeinfo_t*)AGDATA(n))->UF_size)
+#define ND_bb(n) (((Agnodeinfo_t*)AGDATA(n))->bb)
+#define ND_clust(n) (((Agnodeinfo_t*)AGDATA(n))->clust)
+#define ND_coord(n) (((Agnodeinfo_t*)AGDATA(n))->coord)
+#define ND_dist(n) (((Agnodeinfo_t*)AGDATA(n))->dist)
+#define ND_flat_in(n) (((Agnodeinfo_t*)AGDATA(n))->flat_in)
+#define ND_flat_out(n) (((Agnodeinfo_t*)AGDATA(n))->flat_out)
+#define ND_gui_state(n) (((Agnodeinfo_t*)AGDATA(n))->gui_state)
+#define ND_has_port(n) (((Agnodeinfo_t*)AGDATA(n))->has_port)
+#define ND_heapindex(n) (((Agnodeinfo_t*)AGDATA(n))->heapindex)
+#define ND_height(n) (((Agnodeinfo_t*)AGDATA(n))->height)
+#define ND_hops(n) (((Agnodeinfo_t*)AGDATA(n))->hops)
+#define ND_ht(n) (((Agnodeinfo_t*)AGDATA(n))->ht)
+#define ND_in(n) (((Agnodeinfo_t*)AGDATA(n))->in)
+#define ND_inleaf(n) (((Agnodeinfo_t*)AGDATA(n))->inleaf)
+#define ND_label(n) (((Agnodeinfo_t*)AGDATA(n))->label)
+#define ND_xlabel(n) (((Agnodeinfo_t*)AGDATA(n))->xlabel)
+#define ND_lim(n) (((Agnodeinfo_t*)AGDATA(n))->lim)
+#define ND_low(n) (((Agnodeinfo_t*)AGDATA(n))->low)
+#define ND_lw(n) (((Agnodeinfo_t*)AGDATA(n))->lw)
+#define ND_mark(n) (((Agnodeinfo_t*)AGDATA(n))->mark)
+#define ND_mval(n) (((Agnodeinfo_t*)AGDATA(n))->mval)
+#define ND_n_cluster(n) (((Agnodeinfo_t*)AGDATA(n))->n_cluster)
+#define ND_next(n) (((Agnodeinfo_t*)AGDATA(n))->next)
+#define ND_node_type(n) (((Agnodeinfo_t*)AGDATA(n))->node_type)
+#define ND_onstack(n) (((Agnodeinfo_t*)AGDATA(n))->onstack)
+#define ND_order(n) (((Agnodeinfo_t*)AGDATA(n))->order)
+#define ND_other(n) (((Agnodeinfo_t*)AGDATA(n))->other)
+#define ND_out(n) (((Agnodeinfo_t*)AGDATA(n))->out)
+#define ND_outleaf(n) (((Agnodeinfo_t*)AGDATA(n))->outleaf)
+#define ND_par(n) (((Agnodeinfo_t*)AGDATA(n))->par)
+#define ND_pinned(n) (((Agnodeinfo_t*)AGDATA(n))->pinned)
+#define ND_pos(n) (((Agnodeinfo_t*)AGDATA(n))->pos)
+#define ND_prev(n) (((Agnodeinfo_t*)AGDATA(n))->prev)
+#define ND_priority(n) (((Agnodeinfo_t*)AGDATA(n))->priority)
+#define ND_rank(n) (((Agnodeinfo_t*)AGDATA(n))->rank)
+#define ND_ranktype(n) (((Agnodeinfo_t*)AGDATA(n))->ranktype)
+#define ND_rw(n) (((Agnodeinfo_t*)AGDATA(n))->rw)
+#define ND_save_in(n) (((Agnodeinfo_t*)AGDATA(n))->save_in)
+#define ND_save_out(n) (((Agnodeinfo_t*)AGDATA(n))->save_out)
+#define ND_shape(n) (((Agnodeinfo_t*)AGDATA(n))->shape)
+#define ND_shape_info(n) (((Agnodeinfo_t*)AGDATA(n))->shape_info)
+#define ND_showboxes(n) (((Agnodeinfo_t*)AGDATA(n))->showboxes)
+#define ND_state(n) (((Agnodeinfo_t*)AGDATA(n))->state)
+#define ND_clustnode(n) (((Agnodeinfo_t*)AGDATA(n))->clustnode)
+#define ND_tree_in(n) (((Agnodeinfo_t*)AGDATA(n))->tree_in)
+#define ND_tree_out(n) (((Agnodeinfo_t*)AGDATA(n))->tree_out)
+#define ND_weight_class(n) (((Agnodeinfo_t*)AGDATA(n))->weight_class)
+#define ND_width(n) (((Agnodeinfo_t*)AGDATA(n))->width)
+#define ND_xsize(n) (((Agnodeinfo_t*)AGDATA(n))->xsize)
+#define ND_ysize(n) (((Agnodeinfo_t*)AGDATA(n))->ysize)
+
+#else
+
+#define ND_UF_parent(n) (n)->u.UF_parent
+#define ND_UF_size(n) (n)->u.UF_size
+#define ND_alg(n) (n)->u.alg
+#define ND_bb(n) (n)->u.bb
+#define ND_clust(n) (n)->u.clust
+#define ND_coord(n) (n)->u.coord
+#define ND_dist(n) (n)->u.dist
+#define ND_flat_in(n) (n)->u.flat_in
+#define ND_flat_out(n) (n)->u.flat_out
+#define ND_gui_state(n) (n)->u.gui_state
+#define ND_has_port(n) (n)->u.has_port
+#define ND_heapindex(n) (n)->u.heapindex
+#define ND_height(n) (n)->u.height
+#define ND_hops(n) (n)->u.hops
+#define ND_ht(n) (n)->u.ht
+#define ND_id(n) (n)->u.id
+#define ND_in(n) (n)->u.in
+#define ND_inleaf(n) (n)->u.inleaf
+#define ND_label(n) (n)->u.label
+#define ND_xlabel(n) (n)->u.xlabel
+#define ND_lim(n) (n)->u.lim
+#define ND_low(n) (n)->u.low
+#define ND_lw(n) (n)->u.lw
+#define ND_mark(n) (n)->u.mark
+#define ND_mval(n) (n)->u.mval
+#define ND_n_cluster(n) (n)->u.n_cluster
+#define ND_next(n) (n)->u.next
+#define ND_node_type(n) (n)->u.node_type
+#define ND_onstack(n) (n)->u.onstack
+#define ND_order(n) (n)->u.order
+#define ND_other(n) (n)->u.other
+#define ND_out(n) (n)->u.out
+#define ND_outleaf(n) (n)->u.outleaf
+#define ND_par(n) (n)->u.par
+#define ND_pinned(n) (n)->u.pinned
+#define ND_pos(n) (n)->u.pos
+#define ND_prev(n) (n)->u.prev
+#define ND_priority(n) (n)->u.priority
+#define ND_rank(n) (n)->u.rank
+#define ND_ranktype(n) (n)->u.ranktype
+#define ND_rw(n) (n)->u.rw
+#define ND_save_in(n) (n)->u.save_in
+#define ND_save_out(n) (n)->u.save_out
+#define ND_shape(n) (n)->u.shape
+#define ND_shape_info(n) (n)->u.shape_info
+#define ND_showboxes(n) (n)->u.showboxes
+#define ND_state(n) (n)->u.state
+#define ND_clustnode(n) (n)->u.clustnode
+#define ND_tree_in(n) (n)->u.tree_in
+#define ND_tree_out(n) (n)->u.tree_out
+#define ND_weight_class(n) (n)->u.weight_class
+#define ND_width(n) (n)->u.width
+#define ND_xsize(n) (n)->u.xsize
+#define ND_ysize(n) (n)->u.ysize
+#endif
+
+    typedef struct Agedgeinfo_t {
+#ifdef WITH_CGRAPH
+	Agrec_t hdr;
+#endif
+	splines *spl;
+	port tail_port, head_port;
+	textlabel_t *label, *head_label, *tail_label, *xlabel;
+	char edge_type;
+	char adjacent;          /* true for flat edge with adjacent nodes */
+	char label_ontop;
+	unsigned char gui_state; /* Edge state for GUI ops */
+	edge_t *to_orig;	/* for dot's shapes.c    */
+	void *alg;
+
+#ifndef DOT_ONLY
+	double factor;
+	double dist;
+	Ppolyline_t path;
+#endif
+#ifndef NEATO_ONLY
+	unsigned char showboxes;
+	boolean conc_opp_flag;
+	short xpenalty;
+	int weight;
+	int cutvalue, tree_index;
+	short count;
+	unsigned short minlen;
+	edge_t *to_virt;
+#endif
+    } Agedgeinfo_t;
+
+#ifdef WITH_CGRAPH
+#define ED_alg(e) (((Agedgeinfo_t*)AGDATA(e))->alg)
+#define ED_conc_opp_flag(e) (((Agedgeinfo_t*)AGDATA(e))->conc_opp_flag)
+#define ED_count(e) (((Agedgeinfo_t*)AGDATA(e))->count)
+#define ED_cutvalue(e) (((Agedgeinfo_t*)AGDATA(e))->cutvalue)
+#define ED_edge_type(e) (((Agedgeinfo_t*)AGDATA(e))->edge_type)
+#define ED_adjacent(e) (((Agedgeinfo_t*)AGDATA(e))->adjacent)
+#define ED_factor(e) (((Agedgeinfo_t*)AGDATA(e))->factor)
+#define ED_gui_state(e) (((Agedgeinfo_t*)AGDATA(e))->gui_state)
+#define ED_head_label(e) (((Agedgeinfo_t*)AGDATA(e))->head_label)
+#define ED_head_port(e) (((Agedgeinfo_t*)AGDATA(e))->head_port)
+#define ED_label(e) (((Agedgeinfo_t*)AGDATA(e))->label)
+#define ED_xlabel(e) (((Agedgeinfo_t*)AGDATA(e))->xlabel)
+#define ED_label_ontop(e) (((Agedgeinfo_t*)AGDATA(e))->label_ontop)
+#define ED_minlen(e) (((Agedgeinfo_t*)AGDATA(e))->minlen)
+#define ED_path(e) (((Agedgeinfo_t*)AGDATA(e))->path)
+#define ED_showboxes(e) (((Agedgeinfo_t*)AGDATA(e))->showboxes)
+#define ED_spl(e) (((Agedgeinfo_t*)AGDATA(e))->spl)
+#define ED_tail_label(e) (((Agedgeinfo_t*)AGDATA(e))->tail_label)
+#define ED_tail_port(e) (((Agedgeinfo_t*)AGDATA(e))->tail_port)
+#define ED_to_orig(e) (((Agedgeinfo_t*)AGDATA(e))->to_orig)
+#define ED_to_virt(e) (((Agedgeinfo_t*)AGDATA(e))->to_virt)
+#define ED_tree_index(e) (((Agedgeinfo_t*)AGDATA(e))->tree_index)
+#define ED_xpenalty(e) (((Agedgeinfo_t*)AGDATA(e))->xpenalty)
+#define ED_dist(e) (((Agedgeinfo_t*)AGDATA(e))->dist)
+#define ED_weight(e) (((Agedgeinfo_t*)AGDATA(e))->weight)
+
+#else
+
+#define ED_alg(e) (e)->u.alg
+#define ED_conc_opp_flag(e) (e)->u.conc_opp_flag
+#define ED_count(e) (e)->u.count
+#define ED_cutvalue(e) (e)->u.cutvalue
+#define ED_dist(e) (e)->u.dist
+#define ED_edge_type(e) (e)->u.edge_type
+#define ED_adjacent(e) (e)->u.adjacent
+#define ED_factor(e) (e)->u.factor
+#define ED_gui_state(e) (e)->u.gui_state
+#define ED_head_label(e) (e)->u.head_label
+#define ED_head_port(e) (e)->u.head_port
+#define ED_label(e) (e)->u.label
+#define ED_xlabel(e) (e)->u.xlabel
+#define ED_label_ontop(e) (e)->u.label_ontop
+#define ED_minlen(e) (e)->u.minlen
+#define ED_path(e) (e)->u.path
+#define ED_showboxes(e) (e)->u.showboxes
+#define ED_spl(e) (e)->u.spl
+#define ED_tail_label(e) (e)->u.tail_label
+#define ED_tail_port(e) (e)->u.tail_port
+#define ED_to_orig(e) (e)->u.to_orig
+#define ED_to_virt(e) (e)->u.to_virt
+#define ED_tree_index(e) (e)->u.tree_index
+#define ED_weight(e) (e)->u.weight
+#define ED_xpenalty(e) (e)->u.xpenalty
+#endif
+
+#ifdef WITH_CGRAPH
+#include "cgraph.h"
+#define SET_RANKDIR(g,rd) (GD_rankdir2(g) = rd)
+#define agfindedge(g,t,h) (agedge(g,t,h,NULL,0))
+#define agfindnode(g,n) (agnode(g,n,0))
+#define agfindgraphattr(g,a) (agattr(g,AGRAPH,a,NULL))
+#define agfindnodeattr(g,a) (agattr(g,AGNODE,a,NULL))
+#define agfindedgeattr(g,a) (agattr(g,AGEDGE,a,NULL))
+#else
+#include "graph.h"
+#define SET_RANKDIR(g,rd) ((g)->u.rankdir = (rd))
+#define agnameof(x) ((x)->name)
+    /* warning, agraphof doesn't work for edges */
+#define agraphof(n) ((n)->graph)
+#define agroot(g) ((g)->root)
+#define aghead(e) ((e)->head)
+#define agtail(e) ((e)->tail)
+#define agisdirected(g) ((g)->kind & AGFLAG_DIRECTED)
+#define AGID(x) ((x)->id)
+#define agfindgraphattr(g,a) agfindattr((g)->root,a)
+#define agfindnodeattr(g,a) agfindattr((g)->proto->n,a)
+#define agfindedgeattr(g,a) agfindattr((g)->proto->e,a)
+#define agcanonStr(s) agcanonical(s)
+#endif
+
+
+    typedef struct {
+        int useGrid;            /* use grid for speed up */
+        int useNew;             /* encode x-K into attractive force */
+        int numIters;           /* actual iterations in layout */
+        int unscaled;           /* % of iterations used in pass 1 */
+        double C;               /* Repulsion factor in xLayout */
+        double Tfact;           /* scale temp from default expression */
+        double K;               /* spring constant; ideal distance */
+        double T0;              /* initial temperature */
+    } fdpParms_t;
+
+    typedef struct {
+	int flags;
+    } gvlayout_features_t;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/include/graphviz/usershape.h	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,59 @@
+/* $Id: usershape.h,v 1.15 2009/06/03 01:10:52 ellson Exp $ $Revision: 1.15 $ */
+/* vim:set shiftwidth=4 ts=8: */
+
+/**********************************************************
+*      This software is part of the graphviz package      *
+*                http://www.graphviz.org/                 *
+*                                                         *
+*            Copyright (c) 1994-2004 AT&T Corp.           *
+*                and is licensed under the                *
+*            Common Public License, Version 1.0           *
+*                      by AT&T Corp.                      *
+*                                                         *
+*        Information and Software Systems Research        *
+*              AT&T Research, Florham Park NJ             *
+**********************************************************/
+
+#ifndef USERSHAPE_H
+#define USERSHAPE_H
+
+#include "cdt.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    typedef enum { FT_NULL,
+		FT_BMP, FT_GIF, FT_PNG, FT_JPEG,
+		FT_PDF, FT_PS, FT_EPS, FT_SVG, FT_XML
+    } imagetype_t;
+
+    typedef enum {
+	IMAGESCALE_FALSE,  /* no image scaling */
+	IMAGESCALE_TRUE,   /* scale image to fit but keep aspect ratio */
+	IMAGESCALE_WIDTH,  /* scale image width to fit, keep height fixed */
+	IMAGESCALE_HEIGHT, /* scale image height to fit, keep width fixed */
+	IMAGESCALE_BOTH    /* scale image to fit without regard for aspect ratio */
+    } imagescale_t;
+
+    typedef struct usershape_s usershape_t;
+
+    struct usershape_s {
+	Dtlink_t link;
+	const char *name;
+	int macro_id;
+	boolean must_inline;
+	boolean nocache;
+	FILE *f;
+	imagetype_t type;
+	char *stringtype;
+	int x, y, w, h, dpi;
+	void *data;                   /* data loaded by a renderer */
+	size_t datasize;              /* size of data (if mmap'ed) */
+	void (*datafree)(usershape_t *us); /* renderer's function for freeing data */
+    };
+
+#ifdef __cplusplus
+}
+#endif
+#endif
Binary file toolboxes/graph_visualisation/lib/debug/dll/GdiPlus.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/Pathplan.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/cdt.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/cgraph.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/glut32.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/graph.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/gvc.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/gvplugin_core.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/gvplugin_dot_layout.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/gvplugin_gd.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/gvplugin_gdiplus.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/gvplugin_neato_layout.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/gvplugin_pango.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/iconv.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/intl.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/jpeg62.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libatk-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libcairo-2.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libexpat.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libfontconfig-1.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libfreetype-6.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libgdk-win32-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libgdk_pixbuf-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libgdkglext-win32-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libglade-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libglib-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libgmodule-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libgobject-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libgtk-win32-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libgtkglext-win32-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libltdl-3.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libpango-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libpangocairo-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libpangoft2-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libpangowin32-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libpng12.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/libxml2.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/ltdl.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/regex_win32.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/vmalloc.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/dll/zlib1.dll has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/Pathplan.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/acyclic.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/ast.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/bcomps.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/ccomps.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/cdt.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/cgraph.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/circogen.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/dijkstra.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/dot.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/dotgen.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/expr.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/fdpgen.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gc.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gd.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/graph.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gts.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gvc.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gvcolor.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gvpack.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gvplugin_core.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gvplugin_dot_layout.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gvplugin_gd.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gvplugin_gdiplus.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gvplugin_neato_layout.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gvplugin_pango.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gvpr.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gvprlib.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/gxl2gv.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/hs_regex.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/ingraphs.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/ltdl.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/mm2gv.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/neatogen.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/nop.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/osage.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/patchwork.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/prune.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/rbtree.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/regex_win32.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/sccmap.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/sfdp.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/sfio.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/smyrna.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/sparse.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/topfish.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/tred.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/twopigen.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/unflatten.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/vmalloc.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/vpsc.lib has changed
Binary file toolboxes/graph_visualisation/lib/debug/lib/xdot.lib has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/box.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,157 @@
+load ('def.lefty');
+definit ();
+#
+# initialize window data
+#
+canvas = defcanvas;
+wrect = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 400; 'y' = 500;];];
+setwidgetattr (canvas, ['window' = wrect;]);
+#
+# data structures
+#
+objarray = [];
+objnum = 0;
+#
+# misc functions
+#
+min = function (a, b) {
+    if (a <= b)
+        return a;
+    return b;
+};
+max = function (a, b) {
+    if (b <= a)
+        return a;
+    return b;
+};
+rectof = function (p1, p2) {
+    return [
+        0 = ['x' = min (p1.x, p2.x); 'y' = min (p1.y, p2.y);];
+        1 = ['x' = max (p1.x, p2.x); 'y' = max (p1.y, p2.y);];
+    ];
+};
+pointadd = function (p1, p2) {
+    return ['x' = p2.x + p1.x; 'y' = p2.y + p1.y;];
+};
+pointsub = function (p1, p2) {
+    return ['x' = p2.x - p1.x; 'y' = p2.y - p1.y;];
+};
+#
+# rendering functions
+#
+drawbox = function (obj, color) {
+    box (canvas, obj, obj.rect, ['color' = color;]);
+};
+redrawboxes = function () {
+    local i;
+    clear (canvas);
+    for (i = 0; i < objnum; i = i + 1)
+        drawbox (objarray[i], 1);
+};
+redraw = function (canvas) {
+    redrawboxes ();
+};
+#
+# editing functions
+#
+new = function (rect) {
+    objarray[objnum] = [
+        'rect' = rect;
+        'id' = objnum;
+    ];
+    objnum = objnum + 1;
+    return objarray[objnum - 1];
+};
+reshape = function (obj, rect) {
+    obj.rect = rect;
+    return obj;
+};
+move = function (obj, p) {
+    obj.rect[0] = pointadd (obj.rect[0], p);
+    obj.rect[1] = pointadd (obj.rect[1], p);
+    return obj;
+};
+delete = function (obj) {
+    if (obj.id ~= objnum - 1) {
+        objarray[obj.id] = objarray[objnum - 1];
+        objarray[obj.id].id = obj.id;
+    }
+    remove (objnum - 1, objarray);
+    objnum = objnum - 1;
+};
+#
+# user interface functions
+#
+# left mouse button creates new box
+# middle button moves a box
+# right button deletes a box
+#
+leftdown = function (data) {
+    if (data.obj ~= null)
+        return;
+    leftbox = new (rectof (data.pos, data.pos));
+    drawbox (leftbox, 1);
+    setgfxattr (canvas, ['mode' = 'xor';]);
+};
+leftmove = function (data) {
+    if (~leftbox)
+        return;
+    drawbox (leftbox, 1);
+    clearpick (canvas, leftbox);
+    reshape (leftbox, rectof (data.ppos, data.pos));
+    drawbox (leftbox, 1);
+};
+leftup = function (data) {
+    if (~leftbox)
+        return;
+    drawbox (leftbox, 1);
+    clearpick (canvas, leftbox);
+    reshape (leftbox, rectof (data.ppos, data.pos));
+    setgfxattr (canvas, ['mode' = 'src';]);
+    drawbox (leftbox, 1);
+    remove ('leftbox');
+};
+middledown = function (data) {
+    if (data.obj == null)
+        return;
+    middlebox = data.obj;
+    middlepos = data.pos;
+    setgfxattr (canvas, ['mode' = 'xor';]);
+};
+middlemove = function (data) {
+    if (~middlebox)
+        return;
+    drawbox (middlebox, 1);
+    clearpick (canvas, middlebox);
+    move (middlebox, pointsub (middlepos, data.pos));
+    middlepos = data.pos;
+    drawbox (middlebox, 1);
+};
+middleup = function (data) {
+    if (~middlebox)
+        return;
+    drawbox (middlebox, 1);
+    clearpick (canvas, middlebox);
+    move (middlebox, pointsub (middlepos, data.pos));
+    setgfxattr (canvas, ['mode' = 'src';]);
+    drawbox (middlebox, 1);
+    remove ('middlepos');
+    remove ('middlebox');
+};
+rightup = function (data) {
+    if (data.pobj == null)
+        return;
+    drawbox (data.obj, 0);
+    clearpick (canvas, data.obj);
+    delete (data.obj);
+};
+dops = function () {
+    local s;
+
+    s = ['x' = 8 * 300; 'y' = 10.5 * 300;];
+    canvas = createwidget (-1, ['type' = 'ps'; 'size' = s;]);
+    setwidgetattr (canvas, ['window' = wrect;]);
+    redraw (canvas);
+    destroywidget (canvas);
+    canvas=defcanvas;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/def.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+definit = function () {
+    defview = createwidget (-1, [
+        'type' = 'view';
+        'name' = 'graphics view';
+        'origin' = ['x' = 1; 'y' = 1;];
+        'size' = ['x' = 400; 'y' = 500;];
+    ]);
+    defscroll = createwidget (defview, ['type' = 'scroll';]);
+    defcanvas = createwidget (defscroll, [
+        'type' = 'canvas';
+        'origin' = ['x' = 1; 'y' = 1;];
+        'size' = ['x' = 400; 'y' = 500;];
+        'borderwidth' = 1;
+    ]);
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/dotty.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,735 @@
+#
+# DOTTY
+#
+dotty = [
+    'keys' = [
+        'nid'    = 'nid';
+        'eid'    = 'eid';
+        'gid'    = 'gid';
+        'name'   = 'name';
+        'attr'   = 'attr';
+        'gattr'  = 'graphattr';
+        'eattr'  = 'edgeattr';
+        'nattr'  = 'nodeattr';
+        'edges'  = 'edges';
+        'tail'   = 'tail';
+        'tport'  = 'tport';
+        'head'   = 'head';
+        'hport'  = 'hport';
+        'pos'    = 'pos';
+        'size'   = 'size';
+        'rect'   = 'rect';
+        'fname'  = 'fontname';
+        'fsize'  = 'fontsize';
+        'fcolor' = 'fontcolor';
+        'dcolor' = 'drawcolor';
+        'bcolor' = 'fillcolor';
+    ];
+    'maps' = [
+        'X11' = [
+            'fontmap' = [
+                'Times-Roman'    = '-*-times-medium-r-*--%d-*-*-*-*-*-*-1';
+                'Times-Italic'   = '-*-times-medium-i-*--%d-*-*-*-*-*-*-1';
+                'Times-Bold'     = '-*-times-bold-r-*--%d-*-*-*-*-*-*-1';
+                'Courier'        = '-*-courier-bold-r-*--%d-*-*-*-*-*-*-1';
+                'Courier-Bold'   = '-*-courier-bold-r-*--%d-*-*-*-*-*-*-1';
+                'Helvetica'      = (
+                     '-*-helvetica-medium-r-normal--%d-*-*-*-p-*-iso8859-1'
+                );
+                'Helvetica-Bold' = (
+                    '-*-helvetica-bold-r-normal--%d-*-*-*-p-*-iso8859-1'
+                );
+            ];
+            'psfontmap' = [
+                'Times-Roman'    = 'Times-Roman';
+                'Times-Italic'   = 'Times-Italic';
+                'Times-Bold'     = 'Times-Bold';
+                'Courier'        = 'Courier';
+                'Courier-Bold'   = 'Courier-Bold';
+                'Helvetica'      = 'Helvetica';
+                'Helvetica-Bold' = 'Helvetica-Bold';
+            ];
+        ];
+        'mswin' = [
+            'fontmap' = [
+                'Times-Roman'    = 'Times New Roman';
+                'Times-Italic'   = 'Times New Roman Italic';
+                'Times-Bold'     = 'Times New Roman Bold';
+                'Courier'        = 'Courier New';
+                'Courier-Bold'   = 'Courier New Bold';
+                'Helvetica'      = 'Arial';
+                'Helvetica-Bold' = 'Arial Bold';
+            ];
+            'psfontmap' = [
+                'Times-Roman'    = 'Times New Roman';
+                'Times-Italic'   = 'Times New Roman Italic';
+                'Times-Bold'     = 'Times New Roman Bold';
+                'Courier'        = 'Courier New';
+                'Courier-Bold'   = 'Courier New Bold';
+                'Helvetica'      = 'Arial';
+                'Helvetica-Bold' = 'Arial Bold';
+            ];
+        ];
+    ];
+    'protogt' = [
+        'graph' = [
+            'graphattr' = [
+                'fontsize' = '14';
+                'fontname' = 'Times-Roman';
+                'fontcolor' = 'black';
+            ];
+            'nodeattr' = [
+                'shape' = 'ellipse';
+                'fontsize' = '14';
+                'fontname' = 'Times-Roman';
+                'fontcolor' = 'black';
+                'style' = 'solid';
+            ];
+            'edgeattr' = [
+                'fontsize' = '14';
+                'fontname' = 'Times-Roman';
+                'fontcolor' = 'black';
+                'style' = 'solid';
+            ];
+            'graphdict' = [];
+            'nodedict' = [];
+            'graphs' = [];
+            'nodes' = [];
+            'edges' = [];
+            'maxgid' = 0;
+            'maxnid' = 0;
+            'maxeid' = 0;
+            'type' = 'digraph';
+        ];
+        'layoutmode' = 'sync';
+        'lserver' = 'dot';
+        'edgehandles' = 1;
+        'noundo' = 0;
+    ];
+    'lservers' = [];
+    'mlevel' = 0;
+    'graphs' = [];
+    'views' = [];
+    'protovt' = [
+        'normal' = [
+            'name' = 'DOTTY';
+            'orig' = ['x' = 1; 'y' = 1;];
+            'size' = ['x' = 420; 'y' = 520;];
+            'wrect' = [
+                0 = ['x' = 0; 'y' = 0;];
+                1 = ['x' = 400; 'y' = 500;];
+            ];
+            'vsize' = ['x' = 400; 'y' = 500;];
+            'w2v' = 1;
+        ];
+        'birdseye' = [
+            'type' = 'birdseye';
+            'name' = 'DOTTY birdseye view';
+            'orig' = ['x' = 1; 'y' = 1;];
+            'size' = ['x' = 220; 'y' = 260;];
+            'wrect' = [
+                0 = ['x' = 0; 'y' = 0;];
+                1 = ['x' = 200; 'y' = 250;];
+            ];
+            'vsize' = ['x' = 200; 'y' = 250;];
+            'w2v' = 1;
+        ];
+    ];
+    'pagesizes' = [
+        '8.5x11' = ['x' =    8; 'y' = 10.5;];
+        '11x17'  = ['x' = 10.5; 'y' = 16.5;];
+        '36x50'  = ['x' = 35.5; 'y' = 49.5;];
+    ];
+];
+load ('dotty_draw.lefty');
+load ('dotty_edit.lefty');
+load ('dotty_layout.lefty');
+load ('dotty_ui.lefty');
+#
+# initialization functions
+#
+dotty.init = function () {
+    dotty.fontmap = dotty.maps[getenv ('LEFTYWINSYS')].fontmap;
+    dotty.clipgt = dotty.protogt.creategraph (['noundo' = 1;]);
+    dotty.inited = 1;
+};
+dotty.simple = function (file) {
+    if (dotty.inited ~= 1)
+        dotty.init ();
+    dotty.createviewandgraph (file, 'file', null, null);
+    txtview ('off');
+};
+#
+# main operations
+#
+dotty.protogt.creategraph = function (protogt) {
+    local gt, id, gtid;
+
+    if (~protogt)
+        protogt = dotty.protogt;
+    for (gtid = 0; dotty.graphs[gtid]; gtid = gtid + 1)
+        ;
+    gt = (dotty.graphs[gtid] = []);
+    if (protogt.mode ~= 'replace') {
+        for (id in dotty.protogt)
+            gt[id] = copy (dotty.protogt[id]);
+    }
+    for (id in protogt)
+        gt[id] = copy (protogt[id]);
+    gt.gtid = gtid;
+    gt.views = [];
+    gt.undoarray = ['level' = 0; 'entries' = [];];
+    gt.busy = 0;
+    return gt;
+};
+dotty.protogt.copygraph = function (ogt) {
+    local gt, gtid, id;
+
+    for (gtid = 0; dotty.graphs[gtid]; gtid = gtid + 1)
+        ;
+    gt = (dotty.graphs[gtid] = []);
+    for (id in ogt)
+        gt[id] = copy (ogt[id]);
+    gt.gtid = gtid;
+    gt.views = [];
+    gt.undoarray = ['level' = 0; 'entries' = [];];
+    gt.busy = 0;
+    return gt;
+};
+dotty.protogt.destroygraph = function (gt) {
+    local vid, vlist;
+
+    if (gt.layoutpending > 0)
+        gt.cancellayout (gt);
+    for (vid in gt.views)
+        vlist[vid] = gt.views[vid];
+    for (vid in gt.views)
+        gt.destroyview (gt, vlist[vid]);
+    remove (gt.gtid, dotty.graphs);
+};
+dotty.protogt.loadgraph = function (gt, name, type, protograph, layoutflag) {
+    local fd, vid, vt, graph, nid, eid, gid;
+
+    if (gt.layoutpending > 0)
+        gt.cancellayout (gt);
+    if (~name)
+        if (~(name = ask ('file name:', 'file', '')))
+            return;
+    dotty.pushbusy (gt, gt.views);
+    dotty.message (1, 'loading');
+    if (~protograph)
+        protograph = dotty.protogt.graph;
+    if (
+        ~((fd = dotty.openio (name, type, 'r')) >= 0) |
+        ~(graph = readgraph (fd, protograph))
+    ) {
+        dotty.message (0, 'cannot load graph');
+        dotty.popbusy (gt, gt.views);
+        return;
+    }
+    for (vid in gt.views) {
+        vt = gt.views[vid];
+        vt.colors = [];
+        vt.colorn = 2;
+    }
+    gt.graph = graph;
+    gt.name = name;
+    gt.type = type;
+    gt.undoarray = ['level' = 0; 'entries' = [];];
+    if (~(type == 'file' & name == '-'))
+        closeio (fd);
+    graph.maxgid = tablesize (graph.graphs);
+    graph.maxnid = tablesize (graph.nodes);
+    graph.maxeid = tablesize (graph.edges);
+    for (nid in graph.nodes)
+        graph.nodes[nid][dotty.keys.nid] = nid;
+    for (eid in graph.edges)
+        graph.edges[eid][dotty.keys.eid] = eid;
+    for (gid in graph.graphs)
+        graph.graphs[gid][dotty.keys.gid] = gid;
+    gt.unpackattr (gt);
+    if (layoutflag) {
+        dotty.message (1, 'generating layout');
+        gt.layoutgraph (gt);
+    }
+    dotty.popbusy (gt, gt.views);
+    return gt.graph;
+};
+dotty.protogt.savegraph = function (gt, name, type) {
+    local fd;
+
+    if (~name)
+        if (~(name = ask ('file name:', 'file', '')))
+            return;
+    if (
+        ~((fd = dotty.openio (name, type, 'w')) >= 0) |
+        ~writegraph (fd, gt.graph, 0)
+    ) {
+        dotty.message (0, 'cannot save graph');
+        return;
+    }
+    if (~(type == 'file' & name == '-'))
+        closeio (fd);
+};
+dotty.protogt.setgraph = function (gt, graph) {
+    local vid, vt, nid, eid, gid;
+
+    if (gt.layoutpending > 0)
+        gt.cancellayout (gt);
+    for (vid in gt.views) {
+        vt = gt.views[vid];
+        vt.colors = [];
+        vt.colorn = 2;
+    }
+    gt.graph = copy (graph);
+    gt.undoarray = ['level' = 0; 'entries' = [];];
+    gt.unpackattr (gt);
+    gt.graph.maxgid = tablesize (graph.graphs);
+    gt.graph.maxnid = tablesize (graph.nodes);
+    gt.graph.maxeid = tablesize (graph.edges);
+    for (nid in gt.graph.nodes)
+        gt.graph.nodes[nid][dotty.keys.nid] = nid;
+    for (eid in gt.graph.edges)
+        gt.graph.edges[eid][dotty.keys.eid] = eid;
+    for (gid in gt.graph.graphs)
+        gt.graph.graphs[gid][dotty.keys.gid] = gid;
+    gt.unpackattr (gt);
+    dotty.message (1, 'generating layout');
+    gt.layoutgraph (gt);
+    return gt.graph;
+};
+dotty.protogt.erasegraph = function (gt, protogt, protovt) {
+    local vid, vt;
+
+    if (gt.layoutpending > 0)
+        gt.cancellayout (gt);
+    for (vid in gt.views) {
+        vt = gt.views[vid];
+        vt.colors = [];
+        vt.colorn = 2;
+        clear (vt.canvas);
+    }
+    if (~protogt)
+        protogt = dotty.protogt;
+    gt.graph = copy (protogt.graph);
+    gt.undoarray = ['level' = 0; 'entries' = [];];
+};
+dotty.protogt.layoutgraph = function (gt) {
+    if (gt.graph.graphattr.xdotversion) {
+        gt.unpacklayout (gt, gt.graph);
+        gt.setviewsize (gt.views, gt.graph.rect);
+        gt.redrawgraph (gt, gt.views);
+        return;
+    }
+    if (gt.layoutmode == 'async') {
+        if (~gt.haveinput) {
+            gt.startlayout (gt);
+            return;
+        }
+        if (~gt.finishlayout (gt))
+            return;
+        gt.setviewsize (gt.views, gt.graph.rect);
+        gt.redrawgraph (gt, gt.views);
+    } else {
+        if (~gt.startlayout (gt))
+            return;
+        else
+            while (~gt.finishlayout (gt))
+                ;
+        gt.setviewsize (gt.views, gt.graph.rect);
+        gt.redrawgraph (gt, gt.views);
+    }
+};
+dotty.protogt.createview = function (gt, protovt) {
+    local vt, ovt, id, t;
+
+    vt = [];
+    vt.colors = [];
+    vt.colorn = 2;
+    if (~protovt)
+        protovt = dotty.protovt.normal;
+    if (protovt.mode ~= 'replace') {
+        for (id in dotty.protovt[protovt.type])
+            vt[id] = copy (dotty.protovt[protovt.type][id]);
+    }
+    for (id in protovt)
+        vt[id] = copy (protovt[id]);
+    if (~(vt.parent >= 0)) {
+        vt.view = createwidget (-1, [
+            'type'   = 'view';
+            'name'   = vt.name;
+            'origin' = vt.orig;
+            'size'   = vt.size;
+        ]);
+        vt.scroll = createwidget (vt.view, ['type' = 'scroll';]);
+    } else {
+        vt.view = -1;
+        vt.scroll = createwidget (vt.parent, [
+            'type' = 'scroll';
+            'size' = vt.size;
+        ]);
+    }
+    vt.canvas = createwidget (vt.scroll, [
+        'type' = 'canvas';
+        'color' = [0 = protovt.bgcolor; 1 = protovt.fgcolor;];
+    ]);
+    setwidgetattr (vt.canvas, [
+        'window' = vt.wrect;
+        'viewport' = vt.vsize;
+    ]);
+    clear (vt.canvas);
+    dotty.views[vt.canvas] = vt;
+    vt.vtid = vt.canvas;
+    vt.gtid = gt.gtid;
+    gt.views[vt.vtid] = vt;
+    dotty.views[vt.scroll] = vt;
+    if (vt.view ~= -1)
+        dotty.views[vt.view] = vt;
+    if (protovt.colors & tablesize (protovt.colors) > 0) {
+        for (id in protovt.colors)
+            if (id == '_bgcolor_')
+                setwidgetattr (vt.canvas, [
+                    'color' = [0 = protovt.colors[id];];
+                ]);
+            else if (setwidgetattr (vt.canvas, ['color' = [
+                protovt.colors[id] = id;
+            ];]) ~= 1) {
+                t = split (id, ' ');
+                if (tablesize (t) ~= 3 | setwidgetattr (vt.canvas, [
+                    'color' = [protovt.colors[id] = [
+                        'h' = ston (t[0]); 's' = ston (t[1]); 'v' = ston (t[2]);
+                    ];];
+                ]) ~= 1) {
+                    dotty.message (
+                        0, concat ('unknown color ', id, ' using #1')
+                    );
+                }
+            }
+        vt.colors = copy (protovt.colors);
+        vt.colorn = protovt.colorn;
+    } else if (tablesize (gt.views) > 1) {
+        for (id in gt.views)
+            if (gt.views[id] ~= vt)
+                break;
+        ovt = gt.views[id];
+        for (id in ovt.colors)
+            if (id == '_bgcolor_')
+                setwidgetattr (vt.canvas, ['color' = [0 = ovt.colors[id];];]);
+            else if (setwidgetattr (vt.canvas, ['color' = [
+                ovt.colors[id] = id;
+            ];]) ~= 1) {
+                t = split (id, ' ');
+                if (tablesize (t) ~= 3 | setwidgetattr (vt.canvas, [
+                    'color' = [ovt.colors[id] = [
+                        'h' = ston (t[0]); 's' = ston (t[1]); 'v' = ston (t[2]);
+                    ];];
+                ]) ~= 1) {
+                    dotty.message (
+                        0, concat ('unknown color ', id, ' using #1')
+                    );
+                }
+            }
+        vt.colors = copy (ovt.colors);
+        vt.colorn = ovt.colorn;
+    }
+    if (gt.graph.rect)
+        gt.setviewsize ([vt.vtid = vt;], gt.graph.rect);
+    gt.drawgraph (gt, [vt.vtid = vt;]);
+    for (id in vt.uifuncs)
+        if (id == 'closeview')
+            widgets[vt.view][id] = vt.uifuncs[id];
+        else
+            widgets[vt.canvas][id] = vt.uifuncs[id];
+    return vt;
+};
+dotty.protogt.destroyview = function (gt, vt) {
+    destroywidget (vt.canvas);
+    destroywidget (vt.scroll);
+    if (vt.view ~= -1) {
+        destroywidget (vt.view);
+        remove (vt.view, dotty.views);
+    }
+    remove (vt.scroll, dotty.views);
+    remove (vt.canvas, dotty.views);
+    if (vt.gtid >= 0)
+        remove (vt.vtid, gt.views);
+    if (tablesize (dotty.views) == 0)
+        exit ();
+};
+dotty.protogt.zoom = function (gt, vt, factor, pos) {
+    gt.setviewscale ([vt.vtid = vt;], factor);
+    if (pos)
+        gt.setviewcenter ([vt.vtid = vt;], pos);
+    gt.redrawgraph (gt, [vt.vtid = vt;]);
+};
+dotty.protogt.findnode = function (gt, vt) {
+    local key, node, node1, nid;
+
+    if (~(key = ask ('give node name or label')))
+        return;
+    if (gt.graph.nodedict[key] >= 0)
+        node = gt.graph.nodes[gt.graph.nodedict[key]];
+    else if (gt.graph.nodedict[ston (key)] >= 0)
+        node = gt.graph.nodes[gt.graph.nodedict[ston (key)]];
+    else {
+        for (nid in gt.graph.nodes) {
+            node1 = gt.graph.nodes[nid];
+            if (node1.attr.label == key | node1.attr.label == ston (key)) {
+                node = node1;
+                break;
+            }
+        }
+    }
+    if (~node) {
+        dotty.message (0, concat ('cannot find node: ', key));
+        return;
+    }
+    gt.setviewcenter ([vt.vtid = vt;], node.pos);
+};
+dotty.protogt.setattr = function (gt, obj) {
+    local kv, t, attr, value;
+
+    if (~(kv = ask ('give attr/value, eg. color=blue')))
+        return;
+    t = split (kv, '=');
+    attr = t[0];
+    value = t[1];
+    if (
+        obj.attr == gt.graph.graphattr |
+        obj.attr == gt.graph.edgeattr |
+        obj.attr == gt.graph.nodeattr
+    ) {
+        obj.attr[attr] = value;
+        return;
+    }
+    if (obj.nid >= 0) {
+        gt.undrawnode (gt, gt.views, obj);
+        obj.attr[attr] = value;
+        gt.unpacknodeattr (gt, obj);
+        gt.drawnode (gt, gt.views, obj);
+    } else if (obj.eid >= 0) {
+        gt.undrawedge (gt, gt.views, obj);
+        obj.attr[attr] = value;
+        gt.unpackedgeattr (gt, obj);
+        gt.drawedge (gt, gt.views, obj);
+    }
+};
+dotty.protogt.getattr = function (gt, node) {
+    local kv;
+
+    if (~(kv.key = ask ('give attr name')))
+        return null;
+    if ((kv.val = node.attr[kv.key]))
+        return kv;
+    return null;
+};
+#
+# utilities
+#
+dotty.createviewandgraph = function (name, type, protogt, protovt) {
+    local vt, gt;
+
+    if (~protogt)
+        protogt = dotty.protogt;
+    if (protogt.creategraph)
+        gt = protogt.creategraph (protogt);
+    else
+        gt = dotty.protogt.creategraph (protogt);
+    vt = gt.createview (gt, protovt);
+    if (~protogt.graph)
+        protogt.graph = copy (dotty.protogt.graph);
+    if (name)
+        gt.loadgraph (gt, name, type, protogt.graph, 1);
+    return ['gt' = gt; 'vt' = vt;];
+};
+dotty.openio = function (name, type, mode) {
+    local fd;
+
+    if (~name)
+        return null;
+    if (type == 'file') {
+        if (name == '-') {
+            if (mode == 'r' | mode == 'r+')
+                fd = 0;
+            else
+                fd = 1;
+        } else if (~((fd = openio ('file', name, mode)) >= 0)) {
+            dotty.message (0, concat ('cannot open file: ', name));
+            return null;
+        }
+    } else if (type == 'pipe') {
+        if (~((fd = openio (
+            'pipe', 'ksh', mode, concat ("%e ", name)
+        )) >= 0)) {
+            dotty.message (0, concat ('cannot run command: ', name));
+            return null;
+        }
+    } else
+        return null;
+    return fd;
+};
+dotty.pushbusy = function (gt, views) {
+    local vid;
+
+    if (gt.busy == 0)
+        for (vid in gt.views)
+            setwidgetattr (vid, ['cursor' = 'watch';]);
+    gt.busy = gt.busy + 1;
+};
+dotty.popbusy = function (gt, views) {
+    local vid;
+
+    gt.busy = gt.busy - 1;
+    if (gt.busy == 0)
+        for (vid in gt.views)
+            setwidgetattr (vid, ['cursor' = 'default';]);
+};
+dotty.message = function (level, text) {
+    if (level <= dotty.mlevel)
+        echo ('dotty.lefty: ', text);
+};
+#
+# printing or saving to file
+#
+dotty.protogt.printorsave = function (gt, vt, otype, name, mode, ptype) {
+    local pr, wrect, vsize, xy, psize, canvas, pscanvas, cid, cname, t;
+    local graph, edgehandles, fontmap, eid, edge, nid, node, gid, sgraph;
+    local did, draw, i;
+
+    if (~otype)
+        if (~(otype = ask ('print to', 'choice', 'file|printer')))
+            return;
+    if (otype == 'printer') {
+        if (~getenv ('TMPDIR'))
+            name = concat (getenv ('HOME'), '/.dottyout.ps');
+        else
+            name = concat (getenv ('TMPDIR'), '/.dottyout.ps', random (10000));
+        if (getenv ('LEFTYWINSYS') ~= 'mswin' & ~pr)
+            if (~(pr = ask ('printer command', 'string', 'lpr')))
+                return;
+    }
+    if (~name)
+        if (~(name = ask ('postscript file', 'file', 'out.ps')))
+            return;
+    if (~ptype)
+        if (~(ptype = ask ('page size', 'choice', '8.5x11|11x17|36x50')))
+            return;
+    if (~mode)
+        if (~(mode = ask ('mode', 'choice', 'portrait|landscape|best fit')))
+            return;
+    wrect = copy (vt.wrect);
+    wrect[0].x = wrect[0].x - 1;
+    wrect[1].x = wrect[1].x + 1;
+    wrect[0].y = wrect[0].y - 1;
+    wrect[1].y = wrect[1].y + 1;
+    vsize = copy (vt.vsize);
+    if (vsize.x == 0)
+        vsize.x = 1;
+    if (vsize.y == 0)
+        vsize.y = 1;
+    xy = vsize.x / vsize.y;
+    if (mode == 'best fit') {
+        if (xy < 1)
+            mode = 'portrait';
+        else
+            mode = 'landscape';
+    }
+    psize = dotty.pagesizes[ptype];
+    if (mode == 'portrait') {
+        if (xy < psize.x / psize.y) {
+            vsize.y = psize.y * 300;
+            vsize.x = vsize.y * xy;
+        } else {
+            vsize.x = psize.x * 300;
+            vsize.y = vsize.x / xy;
+        }
+    } else {
+        if (xy < psize.y / psize.x) {
+            vsize.y = psize.x * 300;
+            vsize.x = vsize.y * xy;
+        } else {
+            vsize.x = psize.y * 300;
+            vsize.y = vsize.x / xy;
+        }
+    }
+    if (~((pscanvas = createwidget (-1, [
+        'type'   = 'ps';
+        'origin' = ['x' = 0; 'y' = 0;];
+        'size'   = vsize;
+        'mode'   = mode;
+        'name'   = name;
+    ])) >= 0)) {
+        dotty.message (0, 'cannot open printer device');
+        return;
+    }
+    for (cname in vt.colors) {
+        cid = vt.colors[cname];
+        if (cname == '_bgcolor_')
+            setwidgetattr (pscanvas, ['color' = [0 = cid;];]);
+        else if (setwidgetattr (pscanvas, ['color' = [cid = cname;];]) ~= 1) {
+            t = split (cname, ' ');
+            if (tablesize (t) ~= 3 | setwidgetattr (pscanvas, [
+                'color' = [cid = [
+                    'h' = ston (t[0]); 's' = ston (t[1]); 'v' = ston (t[2]);
+                ];];
+            ]) ~= 1) {
+                dotty.message (
+                    0, concat ('unknown color ', cname, ' using #1')
+                );
+            }
+        }
+    }
+    setwidgetattr (pscanvas, ['window' = wrect;]);
+    graph = copy (gt.graph);
+    canvas = vt.canvas;
+    vt.canvas = pscanvas;
+    edgehandles = gt.edgehandles;
+    gt.edgehandles = 0;
+    fontmap = dotty.maps[getenv ('LEFTYWINSYS')].psfontmap;
+    for (eid in graph.edges) {
+        edge = graph.edges[eid];
+        edge.fontname = fontmap[edge.attr.fontname];
+        for (did in edge.draws) {
+            if (did == 'ep')
+                continue;
+            draw = edge.draws[did];
+            for (i = 0; draw[i]; i = i + 1)
+                if (draw[i].type == 'F')
+                    draw[i].fn = fontmap[draw[i].ofn];
+        }
+        gt.drawedge (gt, [0 = vt;], edge);
+    }
+    for (nid in graph.nodes) {
+        node = graph.nodes[nid];
+        node.fontname = fontmap[node.attr.fontname];
+        for (did in node.draws) {
+            if (did == 'ep')
+                continue;
+            draw = node.draws[did];
+            for (i = 0; draw[i]; i = i + 1)
+                if (draw[i].type == 'F')
+                    draw[i].fn = fontmap[draw[i].ofn];
+        }
+        gt.drawnode (gt, [0 = vt;], node);
+    }
+    for (gid in graph.graphs) {
+        sgraph = graph.graphs[gid];
+        sgraph.fontname = fontmap[sgraph.graphattr.fontname];
+        for (did in sgraph.draws) {
+            if (did == 'ep')
+                continue;
+            draw = sgraph.draws[did];
+            for (i = 0; draw[i]; i = i + 1)
+                if (draw[i].type == 'F')
+                    draw[i].fn = fontmap[draw[i].ofn];
+        }
+        gt.drawsgraph (gt, [0 = vt;], sgraph);
+    }
+    graph.fontname = fontmap[graph.graphattr.fontname];
+    gt.drawsgraph (gt, [0 = vt;], graph);
+    gt.edgehandles = edgehandles;
+    vt.canvas = canvas;
+    destroywidget (pscanvas);
+    if (otype == 'printer' & getenv ('LEFTYWINSYS') ~= 'mswin')
+        system (concat (pr, ' ', name, '; rm ',name));
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/dotty_draw.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,596 @@
+#
+# dotty_draw: drawing functions and data structures
+#
+dotty.protogt.drawgraph = function (gt, views) {
+    local gid, eid, nid, graph;
+
+    graph = gt.graph;
+    gt.drawsgraph (gt, views, graph);
+    for (gid in graph.graphs)
+        gt.drawsgraph (gt, views, graph.graphs[gid]);
+    for (eid in graph.edges)
+        gt.drawedge (gt, views, graph.edges[eid]);
+    for (nid in graph.nodes)
+        gt.drawnode (gt, views, graph.nodes[nid]);
+};
+dotty.protogt.redrawgraph = function (gt, views) {
+    local vid;
+
+    for (vid in views)
+        clear (views[vid].canvas);
+    gt.drawgraph (gt, views);
+};
+dotty.protogt.setviewsize = function (views, r) {
+    local vid, vt, w2v, scale, attr;
+
+    for (vid in views) {
+        vt = views[vid];
+        vt.wrect = copy (r);
+        if (r[1].x == 0 | r[1].y == 0) {
+            attr = getwidgetattr (vt.scroll, [0 = 'size';]);
+            vt.wrect[1] = copy (attr.size);
+        }
+        if (vt.type == 'birdseye') {
+            attr = getwidgetattr (vt.scroll, [0 = 'size';]);
+            scale.x = (vt.wrect[1].x - vt.wrect[0].x) / attr.size.x;
+            scale.y = (vt.wrect[1].y - vt.wrect[0].y) / attr.size.y;
+            if (scale.x > 1 & scale.x > scale.y)
+                vt.w2v = scale.x;
+            else if (scale.y > 1)
+                vt.w2v = scale.y;
+            else
+                vt.w2v = 1;
+        }
+        w2v = vt.w2v;
+        vt.vsize = [
+            'x' = toint ((vt.wrect[1].x - vt.wrect[0].x) / w2v);
+            'y' = toint ((vt.wrect[1].y - vt.wrect[0].y) / w2v);
+        ];
+        setwidgetattr (vt.canvas, [
+            'window' = vt.wrect;
+            'viewport' = vt.vsize;
+        ]);
+        attr = getwidgetattr (vt.canvas, [0 = 'viewport';]);
+        vt.vsize = copy (attr.viewport);
+    }
+};
+dotty.protogt.setviewscale = function (views, factor) {
+    local vid, vt, w2v, attr;
+
+    for (vid in views) {
+        vt = views[vid];
+        if ((w2v = vt.w2v * factor) < 0.01) {
+            dotty.message (0, 'cannot zoom any closer');
+            return;
+        }
+        vt.w2v = w2v;
+        vt.vsize = [
+            'x' = (vt.wrect[1].x - vt.wrect[0].x) / w2v;
+            'y' = (vt.wrect[1].y - vt.wrect[0].y) / w2v;
+        ];
+        setwidgetattr (vt.canvas, ['viewport' = vt.vsize;]);
+        attr = getwidgetattr (vt.canvas, [0 = 'viewport';]);
+        vt.vsize = copy (attr.viewport);
+    }
+};
+dotty.protogt.setviewcenter = function (views, center) {
+    local vid, vt, pos;
+
+    for (vid in views) {
+        vt = views[vid];
+        pos = [
+            'x' = center.x * vt.vsize.x / (vt.wrect[1].x - vt.wrect[0].x);
+            'y' = (
+                (vt.wrect[1].y - center.y) * vt.vsize.y /
+                (vt.wrect[1].y - vt.wrect[0].y)
+            );
+        ];
+        setwidgetattr (vt.scroll, ['childcenter' = pos;]);
+    }
+};
+#
+# draw graph components
+#
+dotty.protogt.drawsgraph = function (gt, views, sgraph) {
+    sgraph.draw = 1;
+    if (~sgraph.draws)
+        return;
+    gt.execalldraw (gt, views, null, sgraph.draws, [
+        'fontname' = sgraph.fontname;
+        'fontsize' = sgraph.fontsize;
+        'fontcolor' = sgraph.fontcolor;
+        'drawcolor' = sgraph.drawcolor;
+        'fillcolor' = sgraph.fillcolor;
+    ]);
+};
+dotty.protogt.undrawsgraph = function (gt, views, sgraph) {
+    sgraph.drawn = 0;
+    if (~sgraph.draws)
+        return;
+    gt.execalldraw (gt, views, null, sgraph.draws, [
+        'fontname' = sgraph.fontname;
+        'fontsize' = sgraph.fontsize;
+        'fontcolor' = sgraph.fontcolor;
+        'drawcolor' = 0;
+        'fillcolor' = 0;
+    ]);
+};
+dotty.protogt.drawnode = function (gt, views, node) {
+    local vid;
+
+    node.drawn = 1;
+    if (~node.draws)
+        return;
+    gt.execalldraw (gt, views, node, node.draws, [
+        'fontname' = node.fontname;
+        'fontsize' = node.fontsize;
+        'fontcolor' = node.fontcolor;
+        'drawcolor' = node.drawcolor;
+        'fillcolor' = node.fillcolor;
+    ]);
+    for (vid in views)
+        setpick (views[vid].canvas, node, node.rect);
+};
+dotty.protogt.undrawnode = function (gt, views, node) {
+    local vid;
+
+    if (~node.drawn)
+        return;
+    node.drawn = 0;
+    if (~node.pos)
+        return;
+    gt.execalldraw (gt, views, node, node.draws, [
+        'nooverride' = 1;
+        'fontname' = node.fontname;
+        'fontsize' = node.fontsize;
+        'fontcolor' = 0;
+        'drawcolor' = 0;
+        'fillcolor' = 0;
+    ]);
+    for (vid in views)
+        clearpick (views[vid].canvas, node);
+};
+dotty.protogt.movenode = function (gt, node, pos) {
+    local dp, eid, edge;
+
+    dp.x = pos.x - node.pos.x;
+    dp.y = pos.y - node.pos.y;
+    gt.undrawnode (gt, gt.views, node);
+    node.pos.x = pos.x;
+    node.pos.y = pos.y;
+    gt.movenodedraw (node.draws, dp);
+    for (eid in node.edges) {
+        edge = node.edges[eid];
+        gt.undrawedge (gt, gt.views, edge);
+        gt.moveedgedraw (edge.draws, edge.tail.pos, edge.head.pos);
+        gt.drawedge (gt, gt.views, edge);
+    }
+    gt.drawnode (gt, gt.views, node);
+};
+dotty.protogt.drawedge = function (gt, views, edge) {
+    local vid, canvas;
+
+    edge.drawn = 1;
+    if (~edge.draws)
+        return;
+    gt.execalldraw (gt, views, edge, edge.draws, [
+        'fontname' = edge.fontname;
+        'fontsize' = edge.fontsize;
+        'fontcolor' = edge.fontcolor;
+        'drawcolor' = edge.drawcolor;
+        'fillcolor' = edge.fillcolor;
+    ]);
+    for (vid in views) {
+        canvas = views[vid].canvas;
+        if (gt.edgehandles == 0 | ~edge.draws.ep)
+            continue;
+        arc (canvas, edge, edge.draws.ep, ['x' = 5; 'y' = 5;], ['color' = 1;]);
+    }
+};
+dotty.protogt.undrawedge = function (gt, views, edge) {
+    local vid, canvas;
+
+    if (~edge.drawn)
+        return;
+    edge.drawn = 0;
+    if (~edge.draws)
+        return;
+    gt.execalldraw (gt, views, edge, edge.draws, [
+        'nooverride' = 1;
+        'fontname' = edge.fontname;
+        'fontsize' = edge.fontsize;
+        'fontcolor' = 0;
+        'drawcolor' = 0;
+        'fillcolor' = 0;
+    ]);
+    for (vid in views) {
+        canvas = views[vid].canvas;
+        if (gt.edgehandles == 0 | ~edge.draws.ep)
+            continue;
+        arc (canvas, edge, edge.draws.ep, ['x' = 5; 'y' = 5;], ['color' = 0;]);
+        clearpick (canvas, edge);
+    }
+};
+#
+# draw directives
+#
+dotty.protogt.execalldraw = function (gt, views, obj, draws, gc) {
+    local vid, vt, did, draw, i, func;
+
+    for (vid in views) {
+        vt = views[vid];
+        for (did in draws) {
+            if (did == 'ep')
+                continue;
+            draw = draws[did];
+            for (i = 0; draw[i]; i = i + 1)
+                if ((func = gt.drawfunc[draw[i].type]))
+                    func (gt, vt.canvas, obj, draw[i], gc);
+        }
+    }
+};
+dotty.protogt.drawfunc.E = function (gt, canvas, obj, data, gc) {
+    arc (canvas, obj, data.c, data.s, [
+        'color' = gc.fillcolor; 'style' = gc.style; 'width' = gc.width;
+        'fill' = 'on';
+    ]);
+    arc (canvas, obj, data.c, data.s, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.e = function (gt, canvas, obj, data, gc) {
+    arc (canvas, obj, data.c, data.s, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.P = function (gt, canvas, obj, data, gc) {
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.fillcolor; 'style' = gc.style; 'width' = gc.width;
+        'fill' = 'on';
+    ]);
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.p = function (gt, canvas, obj, data, gc) {
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.L = function (gt, canvas, obj, data, gc) {
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.b = function (gt, canvas, obj, data, gc) {
+    splinegon (canvas, obj, data.ps, [
+        'color' = gc.fillcolor; 'style' = gc.style; 'width' = gc.width;
+        'fill' = 'on';
+    ]);
+};
+dotty.protogt.drawfunc.B = function (gt, canvas, obj, data, gc) {
+    splinegon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.T = function (gt, canvas, obj, data, gc) {
+    text (canvas, obj, data.p, data.s, gc.fontname, gc.fontsize, data.j, [
+        'color' = gc.fontcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.C = function (gt, canvas, obj, data, gc) {
+    if (gc.nooverride ~= 1)
+        gc.fillcolor = data.fillcolor;
+};
+dotty.protogt.drawfunc.c = function (gt, canvas, obj, data, gc) {
+    if (gc.nooverride ~= 1) {
+        gc.drawcolor = data.drawcolor;
+        gc.fontcolor = data.drawcolor;
+    }
+};
+dotty.protogt.drawfunc.F = function (gt, canvas, obj, data, gc) {
+    gc.fontname = data.fn;
+    gc.fontsize = data.fs;
+};
+dotty.protogt.drawfunc.S = function (gt, canvas, obj, data, gc) {
+    gc.style = data.style;
+    gc.width = data.width;
+};
+dotty.protogt.movenodedraw = function (draws, dp) {
+    local did, draw, i, j;
+
+    for (did in draws) {
+        if (did == 'ep')
+            continue;
+        draw = draws[did];
+        for (i = 0; draw[i]; i = i + 1) {
+            if (draw[i].type == 'E' | draw[i].type == 'e') {
+                draw[i].c.x = draw[i].c.x + dp.x;
+                draw[i].c.y = draw[i].c.y + dp.y;
+            } else if (draw[i].type == 'P' | draw[i].type == 'p') {
+                for (j = 1; draw[i].ps[j]; j = j + 1) {
+                    draw[i].ps[j].x = draw[i].ps[j].x + dp.x;
+                    draw[i].ps[j].y = draw[i].ps[j].y + dp.y;
+                }
+            } else if (draw[i].type == 'L' | draw[i].type == 'B') {
+                for (j = 0; draw[i].ps[j]; j = j + 1) {
+                    draw[i].ps[j].x = draw[i].ps[j].x + dp.x;
+                    draw[i].ps[j].y = draw[i].ps[j].y + dp.y;
+                }
+            } else if (draw[i].type == 'T') {
+                draw[i].p.x = draw[i].p.x + dp.x;
+                draw[i].p.y = draw[i].p.y + dp.y;
+            }
+        }
+    }
+};
+dotty.protogt.moveedgedraw = function (draws, tp, hp) {
+    local draws2, did;
+
+    for (did in draws)
+        draws2[did] = draws[did];
+    for (did in draws2)
+        remove (did, draws);
+    draws[0] = [
+        0 = [
+            'type' = 'L';
+            'n' = 2;
+            'ps' = [
+                0 = copy (tp);
+                1 = copy (hp);
+            ];
+        ];
+        'ep' = ['x' = (tp.x + hp.x) / 2; 'y' = (tp.y + hp.y) / 2;];
+    ];
+};
+dotty.protogt.simplenodedraw = function (node, c, s) {
+    local draws;
+
+    if (node.attr.shape == 'ellipse')
+        draws[0] = [
+            0 = [
+                'type' = 'e';
+                'c' = copy (c);
+                's' = ['x' = s.x / 2; 'y' = s.y / 2;];
+            ];
+        ];
+    else
+        draws[0] = [
+            0 = [
+                'type' = 'p';
+                'n' = 5;
+                'ps' = [
+                    0 = ['x' = c.x - s.x / 2; 'y' = c.y - s.y / 2;];
+                    1 = ['x' = c.x + s.x / 2; 'y' = c.y - s.y / 2;];
+                    2 = ['x' = c.x + s.x / 2; 'y' = c.y + s.y / 2;];
+                    3 = ['x' = c.x - s.x / 2; 'y' = c.y + s.y / 2;];
+                    4 = ['x' = c.x - s.x / 2; 'y' = c.y - s.y / 2;];
+                ];
+            ];
+        ];
+    return draws;
+};
+dotty.protogt.simpleedgedraw = function (edge, tp, hp) {
+    local draws;
+
+    draws[0] = [
+        0 = [
+            'type' = 'L';
+            'n' = 2;
+            'ps' = [
+                0 = copy (tp);
+                1 = copy (hp);
+            ];
+        ];
+        'ep' = ['x' = (tp.x + hp.x) / 2; 'y' = (tp.y + hp.y) / 2;];
+    ];
+    return draws;
+};
+#
+# utilities
+#
+dotty.protogt.getcolor = function (views, name) {
+    local vid, vt, color, t;
+
+    for (vid in views) {
+        vt = views[vid];
+        if (~(color >= 0)) {
+            if (~(vt.colors[name] >= 0))
+                color = (vt.colors[name] = vt.colorn);
+            else {
+                color = vt.colors[name];
+                break;
+            }
+        } else if (~(vt.colors[name] >= 0))
+            vt.colors[name] = color;
+        else if (vt.colors[name] ~= color)
+            dotty.message (0, concat ('inconsistent color ids for ', name));
+        if (setwidgetattr (vt.canvas, ['color' = [color = name;];]) ~= 1) {
+            t = split (name, ' ');
+            if (tablesize (t) ~= 3 |
+                    setwidgetattr (vt.canvas, ['color' = [color = [
+                        'h' = ston (t[0]); 's' = ston (t[1]); 'v' = ston (t[2]);
+                    ];];]) ~= 1) {
+                dotty.message (0, concat ('unknown color ', name, ' using #1'));
+                return 1;
+            }
+        }
+        vt.colorn = color + 1;
+    }
+    return color;
+};
+dotty.protogt.setbgcolor = function (views, name) {
+    local vid, vt, t;
+
+    for (vid in views) {
+        vt = views[vid];
+        if (setwidgetattr (vt.canvas, ['color' = [0 = name;];]) ~= 1) {
+            t = split (name, ' ');
+            if (tablesize (t) ~= 3 |
+                    setwidgetattr (vt.canvas, ['color' = [0 = [
+                        'h' = ston (t[0]); 's' = ston (t[1]); 'v' = ston (t[2]);
+                    ];];]) ~= 1) {
+                dotty.message (0, concat ('unknown bgcolor ', name));
+                return;
+            }
+        }
+        vt.colors['_bgcolor_'] = name;
+    }
+};
+dotty.protogt.unpacksgraphattr = function (gt, sgraph) {
+    local attr;
+
+    attr = sgraph.graphattr;
+    if (dotty.fontmap[attr.fontname])
+        sgraph[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+    else
+        sgraph[dotty.keys.fname] = attr.fontname;
+    sgraph[dotty.keys.fsize] = ston (attr.fontsize);
+    sgraph[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+    if (attr.color)
+        sgraph[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+    else
+        sgraph[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+    if (attr.style == 'filled') {
+        if (attr.fillcolor)
+            sgraph[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.fillcolor);
+        else if (attr.color)
+            sgraph[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            sgraph[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+    }
+};
+dotty.protogt.unpacknodeattr = function (gt, node) {
+    local attr;
+
+    attr = node.attr;
+    if (dotty.fontmap[attr.fontname])
+        node[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+    else
+        node[dotty.keys.fname] = attr.fontname;
+    node[dotty.keys.fsize] = ston (attr.fontsize);
+    node[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+    if (attr.color)
+        node[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+    else
+        node[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+    if (attr.style == 'filled') {
+        if (attr.fillcolor)
+            node[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.fillcolor);
+        else if (attr.color)
+            node[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            node[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+    }
+};
+dotty.protogt.unpackedgeattr = function (gt, edge) {
+    local attr;
+
+    attr = edge.attr;
+    if (dotty.fontmap[attr.fontname])
+        edge[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+    else
+        edge[dotty.keys.fname] = attr.fontname;
+    edge[dotty.keys.fsize] = ston (attr.fontsize);
+    edge[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+    if (attr.color)
+        edge[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+    else
+        edge[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+    if (attr.style == 'filled') {
+        if (attr.fillcolor)
+            edge[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.fillcolor);
+        else if (attr.color)
+            edge[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            edge[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+    }
+};
+dotty.protogt.unpackattr = function (gt) {
+    local gid, sgraph, nid, node, eid, edge, graph, attr;
+
+    graph = gt.graph;
+    attr = graph.graphattr;
+    if (dotty.fontmap[attr.fontname])
+        graph[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+    else
+        graph[dotty.keys.fname] = attr.fontname;
+    graph[dotty.keys.fsize] = ston (attr.fontsize);
+    graph[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+    if (attr.color)
+        graph[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+    else
+        graph[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+    if (attr.style == 'filled') {
+        if (attr.fillcolor)
+            graph[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.fillcolor);
+        else if (attr.color)
+            graph[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            graph[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+    }
+    if (attr.bgcolor & attr.bgcolor ~= '')
+        gt.setbgcolor (gt.views, attr.bgcolor);
+    for (gid in graph.graphdict) {
+        sgraph = graph.graphs[graph.graphdict[gid]];
+        attr = sgraph.graphattr;
+        if (dotty.fontmap[attr.fontname])
+            sgraph[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+        else
+            sgraph[dotty.keys.fname] = attr.fontname;
+        sgraph[dotty.keys.fsize] = ston (attr.fontsize);
+        sgraph[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+        if (attr.color)
+            sgraph[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            sgraph[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+        if (attr.style == 'filled') {
+            if (attr.fillcolor)
+                sgraph[dotty.keys.bcolor] = gt.getcolor (
+                    gt.views, attr.fillcolor
+                );
+            else if (attr.color)
+                sgraph[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+            else
+                sgraph[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+        }
+    }
+    for (nid in graph.nodedict) {
+        node = graph.nodes[graph.nodedict[nid]];
+        attr = node.attr;
+        if (dotty.fontmap[attr.fontname])
+            node[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+        else
+            node[dotty.keys.fname] = attr.fontname;
+        node[dotty.keys.fsize] = ston (attr.fontsize);
+        node[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+        if (attr.color)
+            node[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            node[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+        if (attr.style == 'filled') {
+            if (attr.fillcolor)
+                node[dotty.keys.bcolor] = gt.getcolor (
+                    gt.views, attr.fillcolor
+                );
+            else if (attr.color)
+                node[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+            else
+                node[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+        }
+    }
+    for (eid in graph.edges) {
+        edge = graph.edges[eid];
+        attr = edge.attr;
+        if (dotty.fontmap[attr.fontname])
+            edge[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+        else
+            edge[dotty.keys.fname] = attr.fontname;
+        edge[dotty.keys.fsize] = ston (attr.fontsize);
+        edge[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+        if (attr.color)
+            edge[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            edge[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+    }
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/dotty_edit.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,593 @@
+#
+# dotty_edit: editing functions and data structures
+#
+dotty.protogt.getnodesbyattr = function (gt, key, val) {
+    local nid, node, nlist;
+
+    nlist = [];
+    for (nid in gt.graph.nodes) {
+        node = gt.graph.nodes[nid];
+        if (node.attr[key] == val)
+            nlist[nid] = node;
+    }
+    return nlist;
+};
+dotty.protogt.reachablenodes = function (gt, node) {
+    local nlist, stack, eid, edge, i;
+
+    stack[0] = node;
+    i = 1;
+    while (i > 0) {
+        node = stack[i - 1];
+        i = i - 1;
+        nlist[node.nid] = node;
+        for (eid in node.edges) {
+            edge = node.edges[eid];
+            if (~nlist[edge.head.nid]) {
+                nlist[edge.head.nid] = edge.head;
+                stack[i] = edge.head;
+                i = i + 1;
+            }
+        }
+    }
+    return nlist;
+};
+dotty.protogt.mergegraph = function (gt, graph, show) {
+    local nameid, onode, pos, size, eid, eid2, tnode, hnode, oedge;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    for (nameid in graph.nodedict) {
+        pos = null;
+        size = null;
+        onode = graph.nodes[graph.nodedict[nameid]];
+        if (onode.pos)
+            pos = node.pos;
+        if (onode.size)
+            size = node.size;
+        if (~(gt.graph.nodedict[nameid] >= 0)) {
+            pos = null;
+            size = null;
+            if (onode.pos)
+                pos = node.pos;
+            if (onode.size)
+                size = node.size;
+            gt.insertnode (gt, pos, size, nameid, onode.attr, show);
+        }
+    }
+    for (eid in graph.edges) {
+        oedge = graph.edges[eid];
+        tnode = gt.graph.nodes[gt.graph.nodedict[oedge.tail.name]];
+        hnode = gt.graph.nodes[gt.graph.nodedict[oedge.head.name]];
+        for (eid2 in tnode.edges)
+            if (
+                tnode.edges[eid2].tail == tnode &
+                tnode.edges[eid2].head == hnode
+            ) {
+                oedge = null;
+                break;
+            }
+        if (oedge)
+            gt.insertedge (gt, tnode, null, hnode, null, oedge.attr, show);
+    }
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.insertsgraph = function (gt, name, attr, show) {
+    local gid, sgraph, aid;
+
+    if (~gt)
+        return null;
+    gid = gt.graph.maxgid;
+    if (~name) {
+        while (gt.graph.graphdict[(name = concat ('g', gid))] >= 0)
+            gid = gid + 1;
+    } else if (gt.graph.graphdict[name]) {
+        dotty.message (0, concat ('graph: ', name, ' exists'));
+        return null;
+    }
+    gt.graph.graphdict[name] = gid;
+    gt.graph.maxgid = gid + 1;
+    gt.graph.graphs[gid] = [
+        dotty.keys.gid   = gid;
+        dotty.keys.name  = name;
+        dotty.keys.gattr = copy (gt.graph.graphattr);
+        dotty.keys.nattr = copy (gt.graph.nodeattr);
+        dotty.keys.eattr = copy (gt.graph.edgeattr);
+    ];
+    sgraph = gt.graph.graphs[gid];
+    if (~attr)
+        attr = [];
+    if (~attr.label)
+        attr.label = '\N';
+    for (aid in attr)
+        sgraph.graphattr[aid] = attr[aid];
+    gt.unpacksgraphattr (gt, sgraph);
+    if (show)
+        gt.drawsgraph (gt, gt.views, sgraph);
+    return sgraph;
+};
+dotty.protogt.removesgraph = function (gt, sgraph) {
+    gt.undrawsgraph (gt, gt.views, sgraph);
+    remove (sgraph.name, gt.graph.graphdict);
+    remove (sgraph.gid, gt.graph.graphs);
+};
+dotty.protogt.insertnode = function (gt, pos, size, name, attr, show) {
+    local nid, node, aid;
+
+    nid = gt.graph.maxnid;
+    if (~name) {
+        while (gt.graph.nodedict[(name = concat ('n', nid))] >= 0)
+            nid = nid + 1;
+    } else if (gt.graph.nodedict[name] >= 0) {
+        dotty.message (0, concat ('node: ', name, ' exists'));
+        return null;
+    }
+    gt.graph.nodedict[name] = nid;
+    gt.graph.maxnid = nid + 1;
+    gt.graph.nodes[nid] = [
+        dotty.keys.nid   = nid;
+        dotty.keys.name  = name;
+        dotty.keys.attr  = copy (gt.graph.nodeattr);
+        dotty.keys.edges = [];
+    ];
+    node = gt.graph.nodes[nid];
+    if (~attr)
+        attr = [];
+    if (~attr.label)
+        attr.label = '\N';
+    for (aid in attr)
+        node.attr[aid] = attr[aid];
+    gt.unpacknodeattr (gt, node);
+    if (~pos)
+        pos = ['x' = 10; 'y' = 10;];
+    node[dotty.keys.pos] = copy (pos);
+    if (~size)
+        size = ['x' = strlen (attr.label) * 30; 'y' = 30;];
+    if (size.x == 0)
+        size.x = 30;
+    node[dotty.keys.size] = copy (size);
+    node[dotty.keys.rect] = [
+        0 = ['x' = pos.x - size.x / 2; 'y' = pos.y - size.y / 2;];
+        1 = ['x' = pos.x + size.x / 2; 'y' = pos.y + size.y / 2;];
+    ];
+    node.draws = gt.simplenodedraw (node, pos, size);
+    if (show)
+        gt.drawnode (gt, gt.views, node);
+    if (~gt.noundo) {
+        gt.startadd2undo (gt);
+        gt.currundo.inserted.nodes[nid] = node;
+        gt.endadd2undo (gt);
+    }
+    return node;
+};
+dotty.protogt.removenode = function (gt, node) {
+    local eid, list, edge, gid;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    for (eid in node.edges)
+        list[eid] = node.edges[eid];
+    for (eid in list)
+        gt.removeedge (gt, list[eid]);
+    gt.undrawnode (gt, gt.views, node);
+    for (gid in gt.graph.graphs)
+        remove (node.nid, gt.graph.graphs[gid].nodes);
+    remove (node.name, gt.graph.nodedict);
+    remove (node.nid, gt.graph.nodes);
+    if (~gt.noundo) {
+        gt.currundo.deleted.nodes[node.nid] = node;
+        gt.endadd2undo (gt);
+    }
+};
+dotty.protogt.insertedge = function (
+    gt, nodea, porta, nodeb, portb, attr, show
+) {
+    local eid, edge, aid, tport, hport;
+
+    if (~nodea | ~nodeb)
+        return null;
+    if (porta)
+        tport = porta;
+    if (portb)
+        hport = portb;
+    eid = gt.graph.maxeid;
+    while (gt.graph.edges[eid])
+        eid = eid + 1;
+    gt.graph.maxeid = eid + 1;
+    gt.graph.edges[eid] = [
+        dotty.keys.eid   = eid;
+        dotty.keys.tail  = nodea;
+        dotty.keys.tport = porta;
+        dotty.keys.head  = nodeb;
+        dotty.keys.hport = portb;
+        dotty.keys.attr  = copy (gt.graph.edgeattr);
+    ];
+    edge = gt.graph.edges[eid];
+    if (~attr)
+        attr = [];
+    for (aid in attr)
+        edge.attr[aid] = attr[aid];
+    nodea.edges[eid] = edge;
+    nodeb.edges[eid] = edge;
+    gt.unpackedgeattr (gt, edge);
+    edge.draws = gt.simpleedgedraw (edge, nodea.pos, nodeb.pos);
+    if (show)
+        gt.drawedge (gt, gt.views, edge);
+    if (~gt.noundo) {
+        gt.startadd2undo (gt);
+        gt.currundo.inserted.edges[eid] = edge;
+        gt.endadd2undo (gt);
+    }
+    return edge;
+};
+dotty.protogt.removeedge = function (gt, edge) {
+    local head, tail;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    if (edge.head.attr.support == 1)
+        head = edge.head;
+    if (edge.tail.attr.support == 1)
+        if (head ~= edge.tail)
+            tail = edge.tail;
+    gt.undrawedge (gt, gt.views, edge);
+    remove (edge.eid, edge.head.edges);
+    remove (edge.eid, edge.tail.edges);
+    remove (edge.eid, gt.graph.edges);
+    if (head & tablesize (head.edges) == 0)
+        gt.removenode (gt, head);
+    if (tail & tablesize (tail.edges) == 0)
+        gt.removenode (gt, tail);
+    if (~gt.noundo) {
+        gt.currundo.deleted.edges[edge.eid] = edge;
+        gt.endadd2undo (gt);
+    }
+};
+dotty.protogt.swapedgeids = function (gt, edge1, edge2) {
+    local eid1, eid2;
+
+    if (edge1.eid == edge2.eid)
+        return;
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    eid1 = edge1.eid;
+    eid2 = edge2.eid;
+    gt.graph.edges[eid1] = edge2;
+    gt.graph.edges[eid2] = edge1;
+    remove (eid1, edge1.tail.edges);
+    remove (eid1, edge1.head.edges);
+    remove (eid2, edge2.tail.edges);
+    remove (eid2, edge2.head.edges);
+    edge1.tail.edges[eid2] = edge1;
+    edge1.head.edges[eid2] = edge1;
+    edge2.tail.edges[eid1] = edge2;
+    edge2.head.edges[eid1] = edge2;
+    edge1.eid = eid2;
+    edge2.eid = eid1;
+    if (~gt.noundo) {
+        gt.currundo.swapped.edges[eid1] = edge1;
+        gt.currundo.swapped.edges[eid2] = edge2;
+        gt.endadd2undo (gt);
+    }
+};
+dotty.protogt.removesubtree = function (gt, obj) {
+    local nlist, node, head, nid, edge, eid;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    if (obj.nid >= 0)
+        node = obj;
+    else if (obj.eid >= 0) {
+        node = obj.head;
+        gt.removeedge (gt, obj);
+        if (~gt.graph.nodes[node.nid]) {
+            if (~gt.noundo)
+                gt.endadd2undo (gt);
+            return;
+        }
+        for (eid in node.edges) {
+            edge = node.edges[eid];
+            if (edge.head == node & edge.tail ~= node) {
+                if (~gt.noundo)
+                    gt.endadd2undo (gt);
+                return;
+            }
+        }
+    } else {
+        dotty.message (0, 'bad object type in gt.removesubtree');
+        return;
+    }
+    nlist = [node.nid = node;];
+    while (node) {
+        for (eid in node.edges) {
+            head = node.edges[eid].head;
+            if (head ~= node)
+                nlist[head.nid] = head;
+        }
+        gt.removenode (gt, node);
+        remove (node.nid, nlist);
+        node = null;
+        for (nid in nlist) {
+            node = nlist[nid];
+            for (eid in node.edges) {
+                edge = node.edges[eid];
+                if (edge.head == node & edge.tail ~= node) {
+                    node = null;
+                    break;
+                }
+            }
+            if (node)
+                break;
+        }
+    }
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.removenodesbyattr = function (gt, key, val) {
+    local nlist, nid;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    nlist = gt.getnodesbyattr (gt, key, val);
+    for (nid in nlist)
+        gt.removenode (gt, nlist[nid]);
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.removesubtreesbyattr = function (gt, key, val) {
+    local nlist, nid;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    nlist = gt.getnodesbyattr (gt, key, val);
+    for (nid in nlist)
+        if (gt.graph.nodes[nid])
+            gt.removesubtree (gt, nlist[nid]);
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.groupnodes = function (
+    gt, nlist, gnode, pos, size, attr, keepmulti, show
+) {
+    local nid, node, elist, eid, edge, nodea, nodeb, inlist, outlist;
+
+    if (~nlist | tablesize (nlist) == 0)
+        return;
+    if (gnode.attr.support) {
+        dotty.message (0, 'cannot group nodes in a support node');
+        return;
+    }
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    if (~gnode)
+        gnode = gt.insertnode (gt, pos, size, null, attr, show);
+    inlist = [];
+    outlist = [];
+    for (nid in nlist) {
+        if ((node = nlist[nid]) == gnode)
+            continue;
+        elist = [];
+        for (eid in node.edges)
+            elist[eid] = node.edges[eid];
+        for (eid in elist) {
+            edge = elist[eid];
+            if (edge.head == node) {
+                nodea = edge.tail;
+                nodeb = gnode;
+                if (~keepmulti) {
+                    if (inlist[nodea.nid])
+                        continue;
+                    inlist[nodea.nid] = nodea;
+                    if (nodea == gnode)
+                        outlist[nodea.nid] = nodea;
+                }
+            } else {
+                nodea = gnode;
+                nodeb = edge.head;
+                if (~keepmulti) {
+                    if (outlist[nodeb.nid])
+                        continue;
+                    outlist[nodeb.nid] = nodeb;
+                    if (nodeb == gnode)
+                        inlist[nodeb.nid] = nodeb;
+                }
+            }
+            gt.insertedge (gt, nodea, null, nodeb, null, edge.attr, show);
+        }
+        gt.removenode (gt, node);
+    }
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+    return gnode;
+};
+dotty.protogt.groupnodesbyattr = function (
+    gt, key, val, attr, keepmulti, show
+) {
+    local nlist, nid, pos, size;
+
+    pos = null;
+    size = null;
+    nlist = gt.getnodesbyattr (gt, key, val);
+    if (show)
+        for (nid in nlist) {
+            pos = nlist[nid].pos;
+            size = nlist[nid].size;
+            break;
+        }
+    return gt.groupnodes (gt, nlist, null, pos, size, attr, keepmulti, show);
+};
+dotty.protogt.cut = function (gt, obj, set, mode, op) {
+    local clipgt, list, node, nid, edge, eid, clipnode;
+
+    clipgt = dotty.clipgt;
+    clipgt.graph = copy (dotty.protogt.graph);
+    if (obj.eid >= 0) { # it's an edge
+        list.edges[obj.eid] = obj;
+        node = obj.head;
+    } else if (obj.nid >= 0) {
+        list.nodes[obj.nid] = obj;
+        node = obj;
+        for (eid in node.edges)
+            list.edges[eid] = node.edges[eid];
+    } else {
+        dotty.message (0, 'unknown object type in gt.cut');
+        return;
+    }
+    if (set == 'reachable') {
+        list.nodes = gt.reachablenodes (gt, node);
+        for (nid in list.nodes) {
+            node = list.nodes[nid];
+            for (eid in node.edges) {
+                edge = node.edges[eid];
+                list.edges[edge.eid] = edge;
+            }
+        }
+    }
+    if (mode == 'support') {
+        for (eid in list.edges) {
+            edge = list.edges[eid];
+            if (~list.nodes[edge.tail.nid]) {
+                list.support[edge.tail.nid] = edge.tail;
+                list.nodes[edge.tail.nid] = edge.tail;
+            }
+            if (~list.nodes[edge.head.nid]) {
+                list.support[edge.head.nid] = edge.head;
+                list.nodes[edge.head.nid] = edge.head;
+            }
+        }
+    }
+    for (nid = 0; nid < gt.graph.maxnid; nid = nid + 1) {
+        if (~list.nodes[nid])
+            continue;
+        node = list.nodes[nid];
+        clipnode = gt.insertnode (clipgt, null, null, node.name, node.attr, 0);
+        if (list.support[nid])
+            clipnode.support = 1;
+        list.clipnodes[nid] = clipnode;
+    }
+    for (eid = 0; eid < gt.graph.maxeid; eid = eid + 1) {
+        if (~list.edges[eid])
+            continue;
+        edge = list.edges[eid];
+        if (~list.nodes[edge.tail.nid] | ~list.nodes[edge.head.nid])
+            continue;
+        gt.insertedge (
+            clipgt, list.clipnodes[edge.tail.nid], null,
+            list.clipnodes[edge.head.nid], null, edge.attr, 0
+        );
+    }
+    if (op ~= 'cut')
+        return;
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    for (eid in list.edges)
+        gt.removeedge (gt, list.edges[eid]);
+    for (nid in list.nodes)
+        if (~list.support[nid] & gt.graph.nodes[nid])
+            gt.removenode (gt, list.nodes[nid]);
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.paste = function (gt, pos, show) {
+    local clipgt, offset, center, nid, node, eid, edge, nodes;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    clipgt = dotty.clipgt;
+    if (clipgt.graph.rect)
+        center = [
+            'x' = (clipgt.graph.rect[1].x + clipgt.graph.rect[0].x) / 2;
+            'y' = (clipgt.graph.rect[1].y + clipgt.graph.rect[0].y) / 2;
+        ];
+    else
+        center = pos;
+    offset = [
+        'x' = center.x - pos.x;
+        'y' = center.y - pos.y;
+    ];
+    for (nid = 0; clipgt.graph.nodes[nid]; nid = nid + 1) {
+        node = clipgt.graph.nodes[nid];
+        if (node.attr.label == '\N' | ~node.attr.label)
+            node.attr.label = node.name;
+        if (node.support == 1)
+            nodes[nid] = gt.insertnode (gt, [
+                'x' = node.pos.x - offset.x;
+                'y' = node.pos.y - offset.y;
+            ], null, null, [
+                'support' = 1; 'shape' = 'circle';
+                'label' = ''; 'width' = 0.2;
+            ], show);
+        else
+            nodes[nid] = gt.insertnode (gt, [
+                'x' = node.pos.x - offset.x;
+                'y' = node.pos.y - offset.y;
+            ], node.size, null, node.attr, show);
+    }
+    for (eid = 0; clipgt.graph.edges[eid]; eid = eid + 1) {
+        edge = clipgt.graph.edges[eid];
+        gt.insertedge (
+            gt, nodes[edge.tail.nid], null,
+            nodes[edge.head.nid], null, edge.attr, show
+        );
+    }
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.startadd2undo = function (gt) {
+    if (~gt.undoarray.level)
+        gt.currundo = (
+            gt.undoarray.entries[tablesize (gt.undoarray.entries)] = []
+        );
+    gt.undoarray.level = gt.undoarray.level + 1;
+};
+dotty.protogt.endadd2undo = function (gt) {
+    gt.undoarray.level = gt.undoarray.level - 1;
+};
+dotty.protogt.undo = function (gt, show) {
+    local entry, n, eid, edge, nid, node, edges;
+
+    if ((n = tablesize (gt.undoarray.entries)) < 1)
+        return;
+    entry = gt.undoarray.entries[n - 1];
+    remove (n - 1, gt.undoarray.entries);
+    remove ('currundo', gt);
+    gt.noundo = 1;
+    # hardwire nodes and edges back with the same id's as the originals
+    for (nid in entry.deleted.nodes) {
+        node = entry.deleted.nodes[nid];
+        gt.graph.nodedict[node.name] = node.nid;
+        gt.graph.nodes[node.nid] = node;
+        node.edges = [];
+        if (show)
+            gt.drawnode (gt, gt.views, node);
+    }
+    for (eid in entry.deleted.edges) {
+        edge = entry.deleted.edges[eid];
+        gt.graph.edges[edge.eid] = edge;
+        edge.head.edges[edge.eid] = edge;
+        edge.tail.edges[edge.eid] = edge;
+        if (show)
+            gt.drawedge (gt, gt.views, edge);
+    }
+    if (entry.swapped.edges) {
+        if (tablesize (entry.swapped.edges) == 2) {
+            n = 0;
+            for (eid in entry.swapped.edges) {
+                edges[n] = entry.swapped.edges[eid];
+                n = n + 1;
+            }
+            gt.swapedgeids (gt, edges[0], edges[1]);
+        } else
+            dotty.message (0, 'cannot handle undoing swap of > 2 edges');
+    }
+    for (eid in entry.inserted.edges) {
+        edge = entry.inserted.edges[eid];
+        gt.removeedge (gt, edge);
+    }
+    for (nid in entry.inserted.nodes) {
+        node = entry.inserted.nodes[nid];
+        gt.removenode (gt, node);
+    }
+    gt.noundo = 0;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/dotty_layout.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,449 @@
+#
+# dotty_layout: layout functions and data structures
+#
+dotty.grablserver = function (lserver) {
+    local fd;
+
+    if (~dotty.lservers[lserver] | tablesize (dotty.lservers[lserver]) == 0) {
+        if (~((fd = openio ('pipe', lserver, 'r+', '%e -Txdot')) >= 0)) {
+            dotty.message (0, concat ('cannot start ', lserver));
+            return null;
+        }
+        dotty.lservers[lserver][fd] = [
+            'fd' = fd;
+            'count' = 0;
+        ];
+    }
+    for (fd in dotty.lservers[lserver]) {
+        dotty.lservers[lserver][fd].count = dotty.lservers[
+            lserver
+        ][fd].count + 1;
+        dotty.lservers.inuse[fd] = dotty.lservers[lserver][fd];
+        remove (fd, dotty.lservers[lserver]);
+        return fd;
+    }
+};
+dotty.releaselserver = function (lserver, fd, state) {
+    if (state == 'bad' | dotty.lservers.inuse[fd].count > 40) {
+        closeio (fd, 'kill');
+        remove (fd, dotty.lservers.inuse);
+        return;
+    }
+    dotty.lservers[lserver][fd] = dotty.lservers.inuse[fd];
+    remove (fd, dotty.lservers.inuse);
+};
+dotty.protogt.startlayout = function (gt) {
+    local lpt, fd;
+
+    if (gt.layoutpending >= 1) {
+        lpt = dotty.layoutpending[gt.gtid];
+        if (gt.layoutmode == 'async')
+            monitor ('off', lpt.fd);
+        dotty.releaselserver (gt.lserver, lpt.fd, 'bad');
+        remove (gt.gtid, dotty.layoutpending);
+        gt.layoutpending = 0;
+        gt.haveinput = 0;
+        dotty.popbusy (gt, gt.views);
+    }
+    if (~((fd = dotty.grablserver (gt.lserver)) >= 0))
+        return null;
+    dotty.pushbusy (gt, gt.views);
+    writegraph (fd, gt.graph, 1);
+    gt.layoutpending = 1;
+    dotty.layoutpending[gt.gtid] = [
+        'fd' = fd;
+        'gtid' = gt.gtid;
+    ];
+    if (gt.layoutmode == 'async')
+        monitor ('on', fd);
+    return 1;
+};
+dotty.protogt.finishlayout = function (gt) {
+    local graph, lpt, fd;
+
+    if (~(gt.layoutpending >= 1)) {
+        dotty.message (0, concat ('no layout pending for graph ', gt.gtid));
+        return null;
+    }
+    lpt = dotty.layoutpending[gt.gtid];
+    if (~(graph = readgraph (lpt.fd))) {
+        if (gt.layoutmode == 'async')
+            monitor ('off', lpt.fd);
+        dotty.releaselserver (gt.lserver, lpt.fd, 'bad');
+        if (gt.layoutpending == 2) {
+            dotty.message (0, concat ('giving up on ', gt.lserver));
+            if ((fd = openio ('file', 'dottybug.dot', 'w+')) >= 0) {
+                writegraph (fd, gt.graph, 0);
+                closeio (fd);
+                dotty.message (
+                    0, concat ('graph that causes ', gt.lserver)
+                );
+                dotty.message (
+                    0, 'to fail has been saved in file dottybug.dot'
+                );
+                dotty.message (
+                    0, 'please fill out a bug report at'
+                );
+                dotty.message (
+                    0, 'http://www.graphviz.org/bugs/bugform.html'
+                );
+            }
+            dotty.popbusy (gt, gt.views);
+            gt.layoutpending = 0;
+            gt.haveinput = 0;
+            return 1;
+        }
+        dotty.message (
+            1, concat ('lost connection to ', gt.lserver, ', restarting...')
+        );
+        lpt.fd = dotty.grablserver (gt.lserver);
+        writegraph (lpt.fd, gt.graph, 1);
+        if (gt.layoutmode == 'async')
+            monitor ('on', lpt.fd);
+        gt.layoutpending = 2;
+        gt.haveinput = 0;
+        return null;
+    }
+    if (gt.layoutmode == 'async')
+        monitor ('off', lpt.fd);
+    dotty.releaselserver (gt.lserver, lpt.fd, null);
+    remove (gt.gtid, dotty.layoutpending);
+    gt.layoutpending = 0;
+    gt.haveinput = 0;
+    gt.unpacklayout (gt, graph);
+    dotty.popbusy (gt, gt.views);
+    return 1;
+};
+dotty.protogt.cancellayout = function (gt) {
+    local lpt, vid;
+
+    if (gt.layoutpending >= 1) {
+        lpt = dotty.layoutpending[gt.gtid];
+        if (gt.layoutmode == 'async')
+            monitor ('off', lpt.fd);
+        dotty.releaselserver (gt.lserver, lpt.fd, 'bad');
+        remove (gt.gtid, dotty.layoutpending);
+        gt.layoutpending = 0;
+        gt.haveinput = 0;
+        dotty.popbusy (gt, gt.views);
+    }
+};
+dotty.protogt.unpacklayout = function (gt, graph2) {
+    local graph, gid, sgraph1, sgraph2, nid, node1, node2, eid, edge1, edge2;
+    local t1, pos, size;
+
+    graph = gt.graph;
+    for (gid in graph2.graphdict) {
+        if (~(sgraph1 = graph.graphs[graph.graphdict[gid]]))
+            continue;
+        sgraph2 = graph2.graphs[graph2.graphdict[gid]];
+        sgraph1.draws = gt.unpackalldraw (gt, sgraph2.graphattr);
+    }
+    for (nid in graph2.nodedict) {
+        if (~(node1 = graph.nodes[graph.nodedict[nid]]))
+            continue;
+        node2 = graph2.nodes[graph2.nodedict[nid]];
+        node1.draws = gt.unpackalldraw (gt, node2.attr);
+        t1 = split (node2.attr.pos, ',');
+        pos = ['x' = ston (t1[0]); 'y' = ston (t1[1]);];
+        size = [
+            'x' = ston (node2.attr.width) * 72;
+            'y' = ston (node2.attr.height) * 72;
+        ];
+        node1.pos = pos;
+        node1.size = size;
+        node1.rect = [
+            0 = ['x' = pos.x - size.x / 2; 'y' = pos.y - size.y / 2;];
+            1 = ['x' = pos.x + size.x / 2; 'y' = pos.y + size.y / 2;];
+        ];
+    }
+    for (eid in graph2.edges) {
+        edge2 = graph2.edges[eid];
+        if (edge2.attr.id) {
+            if (~(edge1 = graph.edges[ston (edge2.attr.id)]))
+                continue;
+        } else if (graph == graph2)
+            edge1 = edge2;
+        edge1.draws = gt.unpackalldraw (gt, edge2.attr);
+    }
+    graph.draws = gt.unpackalldraw (gt, graph2.graphattr);
+    t1 = split (graph2.graphattr.bb, ',');
+    graph.rect[0].x = ston (t1[0]);
+    graph.rect[0].y = ston (t1[1]);
+    graph.rect[1].x = ston (t1[2]);
+    graph.rect[1].y = ston (t1[3]);
+    if (gt.graph ~= graph2)
+        return;
+    # strip position and size info from the attributes
+    for (gid in graph2.graphdict) {
+        sgraph2 = graph2.graphs[graph2.graphdict[gid]];
+        gt.removealldraw (gt, sgraph2.graphattr);
+        if (sgraph2.graphattr.bb)
+            remove ('bb', sgraph2.graphattr);
+    }
+    for (nid in graph2.nodedict) {
+        node2 = graph2.nodes[graph2.nodedict[nid]];
+        gt.removealldraw (gt, node2.attr);
+        if (node2.attr.rects)
+            remove ('rects', node2.attr);
+        remove ('pos', node2.attr);
+        remove ('width', node2.attr);
+        remove ('height', node2.attr);
+    }
+    for (eid in graph2.edges) {
+        edge2 = graph2.edges[eid];
+        gt.removealldraw (gt, edge2.attr);
+        if (edge2.attr.pos)
+            remove ('pos', edge2.attr);
+        if (edge2.attr.lp)
+            remove ('lp', edge2.attr);
+    }
+    gt.removealldraw (gt, graph2.graphattr);
+    remove ('bb', graph2.graphattr);
+    if (graph2.graphattr.lp)
+        remove ('lp', graph2.graphattr);
+};
+#
+# draw directive parsing
+#
+dotty.protogt.unpackalldraw = function (gt, attr) {
+    local o, did;
+
+    o = [];
+    if (attr._draw_)
+        o._draw_ = gt.unpackdraw (gt, attr._draw_);
+    if (attr._ldraw_)
+        o._ldraw_ = gt.unpackdraw (gt, attr._ldraw_);
+    if (attr._hdraw_)
+        o._hdraw_ = gt.unpackdraw (gt, attr._hdraw_);
+    if (attr._tdraw_)
+        o._tdraw_ = gt.unpackdraw (gt, attr._tdraw_);
+    if (attr._hldraw_)
+        o._hldraw_ = gt.unpackdraw (gt, attr._hldraw_);
+    if (attr._tldraw_)
+        o._tldraw_ = gt.unpackdraw (gt, attr._tldraw_);
+    for (did in o)
+        if (o[did].ep) {
+            o.ep = o[did].ep;
+            break;
+        }
+    return o;
+};
+dotty.protogt.removealldraw = function (gt, attr) {
+    if (attr._draw_)
+        remove ('_draw_', attr);
+    if (attr._ldraw_)
+        remove ('_ldraw_', attr);
+    if (attr._hdraw_)
+        remove ('_hdraw_', attr);
+    if (attr._tdraw_)
+        remove ('_tdraw_', attr);
+    if (attr._hldraw_)
+        remove ('_hldraw_', attr);
+    if (attr._tldraw_)
+        remove ('_tldraw_', attr);
+};
+dotty.protogt.unpackdraw = function (gt, attr) {
+    local oo, o, tt, t, n, i, j, s, l, ep;
+
+    oo = [];
+    t = split (attr, ' ', 0);
+    n = tablesize (t);
+    if (t[n - 1] == '') {
+        remove (n - 1, t);
+        n = n - 1;
+    }
+    i = 0;
+    while (i < n) {
+        o = [];
+        if (t[i] == 'E') {
+            o.type = t[i];
+            o.c.x = ston (t[i + 1]);
+            o.c.y = ston (t[i + 2]);
+            o.s.x = ston (t[i + 3]);
+            o.s.y = ston (t[i + 4]);
+            i = i + 5;
+        } else if (t[i] == 'e') {
+            o.type = t[i];
+            o.c.x = ston (t[i + 1]);
+            o.c.y = ston (t[i + 2]);
+            o.s.x = ston (t[i + 3]);
+            o.s.y = ston (t[i + 4]);
+            i = i + 5;
+        } else if (t[i] == 'P') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            for (j = 0; j < o.n; j = j + 1) {
+                o.ps[j].x = ston (t[i + 2 + j * 2]);
+                o.ps[j].y = ston (t[i + 2 + j * 2 + 1]);
+            }
+            i = i + 2 + o.n * 2;
+            o.ps[o.n] = o.ps[0];
+            o.n = o.n + 1;
+        } else if (t[i] == 'p') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            for (j = 0; j < o.n; j = j + 1) {
+                o.ps[j].x = ston (t[i + 2 + j * 2]);
+                o.ps[j].y = ston (t[i + 2 + j * 2 + 1]);
+            }
+            i = i + 2 + o.n * 2;
+            o.ps[o.n] = o.ps[0];
+            o.n = o.n + 1;
+        } else if (t[i] == 'L') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            for (j = 0; j < o.n; j = j + 1) {
+                o.ps[j].x = ston (t[i + 2 + j * 2]);
+                o.ps[j].y = ston (t[i + 2 + j * 2 + 1]);
+            }
+            i = i + 2 + o.n * 2;
+            if (~ep)
+                ep = copy (o.ps[1]);
+        } else if (t[i] == 'B') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            for (j = 0; j < o.n; j = j + 1) {
+                o.ps[j].x = ston (t[i + 2 + j * 2]);
+                o.ps[j].y = ston (t[i + 2 + j * 2 + 1]);
+            }
+            i = i + 2 + o.n * 2;
+            if (~ep)
+                ep = copy (o.ps[1]);
+        } else if (t[i] == 'b') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            for (j = 0; j < o.n; j = j + 1) {
+                o.ps[j].x = ston (t[i + 2 + j * 2]);
+                o.ps[j].y = ston (t[i + 2 + j * 2 + 1]);
+            }
+            i = i + 2 + o.n * 2;
+            if (~ep)
+                ep = copy (o.ps[1]);
+        } else if (t[i] == 'T') {
+            o.type = t[i];
+            o.p.x = ston (t[i + 1]);
+            o.p.y = ston (t[i + 2]);
+            o.j = ston (t[i + 3]);
+            if (o.j == -1)
+                o.j = 'lb';
+            else if (o.j == 1)
+                o.j = 'rb';
+            else if (o.j == 0)
+                o.j = 'cb';
+            o.w = ston (t[i + 4]);
+            o.n = ston (t[i + 5]);
+            i = i + 6;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            o.s = s;
+        } else if (t[i] == 'C') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            i = i + 2;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            o.fillcolor = gt.getcolor (gt.views, s);
+        } else if (t[i] == 'c') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            i = i + 2;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            o.drawcolor = gt.getcolor (gt.views, s);
+        } else if (t[i] == 'F') {
+            o.type = t[i];
+            o.fs = ston (t[i + 1]);
+            o.n = ston (t[i + 2]);
+            i = i + 3;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            o.ofn = s;
+            o.fn = dotty.fontmap[s];
+        } else if (t[i] == 'S') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            i = i + 2;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            if (
+                s == 'solid' | s == 'dashed' | s == 'dotted' |
+                s == 'longdashed' | s == 'shortdashed'
+            )
+                o.style = s;
+            else if (s == 'bold')
+                o.width = 3;
+            else {
+                tt = split (s, '(');
+                if (tt[0] == 'setlinewidth') {
+                    tt = split (tt[1], ')');
+                    o.width = ston (tt[0]);
+                } else
+                    continue;
+            }
+        } else if (t[i] == 'I') {
+            i = i + 7;
+        } else {
+            dotty.message (0, concat ('draw language parser error: ', t[i]));
+            return null;
+        }
+        oo[tablesize (oo)] = o;
+    }
+    oo.ep = ep;
+    return oo;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/dotty_ui.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,468 @@
+#
+# dotty_ui: user interface functions and data structures
+#
+dotty.protogt.doaction = function (data, s) {
+    local vt, gt;
+
+    vt = dotty.views[data.widget];
+    gt = dotty.graphs[vt.gtid];
+    data.menuitem = s;
+    if (data.obj.nid >= 0) {
+        if (gt.actions.node[s]) {
+            gt.actions.node[s] (gt, vt, data.obj, data);
+            return;
+        }
+    } else if (data.obj.eid >= 0) {
+        if (gt.actions.edge[s]) {
+            gt.actions.edge[s] (gt, vt, data.obj, data);
+            return;
+        }
+    }
+    if (gt.actions.general[s])
+        gt.actions.general[s] (gt, vt, data);
+};
+dotty.protogt.actions.general = [
+    "undo" = function (gt, vt, data) {
+        gt.undo (gt, 1);
+    };
+    "paste" = function (gt, vt, data) {
+        gt.paste (gt, data.pos, 1);
+    };
+    "do layout" = function (gt, vt, data) {
+        gt.layoutgraph (gt);
+    };
+    "cancel layout" = function (gt, vt, data) {
+        gt.cancellayout (gt);
+    };
+    "redraw" = function (gt, vt, data) {
+        gt.redrawgraph (gt, [vt.vtid = vt;]);
+    };
+    "new graph" = function (gt, vt, data) {
+        gt.erasegraph (gt, null, null);
+    };
+    "load graph" = function (gt, vt, data) {
+        gt.loadgraph (gt, null, 'file', dotty.protogt.graph, 1);
+    };
+    "reload graph" = function (gt, vt, data) {
+        gt.loadgraph (gt, gt.name, gt.type, gt.graph, 1);
+    };
+    "save graph" = function (gt, vt, data) {
+        gt.savegraph (gt, gt.name, gt.type);
+    };
+    "save graph as" = function (gt, vt, data) {
+        gt.savegraph (gt, null, 'file');
+    };
+    "open view" = function (gt, vt, data) {
+        gt = dotty.protogt.creategraph (null);
+        gt.createview (gt, null);
+    };
+    "copy view" = function (gt, vt, data) {
+        gt = gt.copygraph (gt);
+        gt.createview (gt, vt);
+    };
+    "birdseye view" = function (gt, vt, data) {
+        gt.createview (gt, dotty.protovt.birdseye);
+    };
+    "clone view" = function (gt, vt, data) {
+        gt.createview (gt, vt);
+    };
+    "close view" = function (gt, vt, data) {
+        gt.destroyview (gt, vt);
+        if (tablesize (gt.views) == 0)
+            gt.destroygraph (gt);
+    };
+    "set graph attr" = function (gt, vt, data) {
+        gt.setattr (gt, ['attr' = gt.graph.graphattr;]);
+    };
+    "set node attr" = function (gt, vt, data) {
+        gt.setattr (gt, ['attr' = gt.graph.nodeattr;]);
+    };
+    "set edge attr" = function (gt, vt, data) {
+        gt.setattr (gt, ['attr' = gt.graph.edgeattr;]);
+    };
+    "zoom in" = function (gt, vt, data) {
+        gt.zoom (gt, vt, 0.5, data.pos);
+    };
+    "zoom out" = function (gt, vt, data) {
+        gt.zoom (gt, vt, 2, data.pos);
+    };
+    "zoom in slowly" = function (gt, vt, data) {
+        gt.zoom (gt, vt, 0.9, data.pos);
+    };
+    "zoom out slowly" = function (gt, vt, data) {
+        gt.zoom (gt, vt, 1.1, data.pos);
+    };
+    "scroll horizontally" = function (gt, vt, data) {
+        vt.scrollmode = 'h';
+    };
+    "scroll vertically" = function (gt, vt, data) {
+        vt.scrollmode = 'v';
+    };
+    "find node" = function (gt, vt, data) {
+        gt.findnode (gt, vt);
+    };
+    "print graph" = function (gt, vt, data) {
+        gt.printorsave (gt, vt, null, null, null, null);
+    };
+    "text view" = function (gt, vt, data) {
+        if (dotty.txtview == 'on')
+            dotty.txtview = 'off';
+        else
+            dotty.txtview = 'on';
+        txtview (dotty.txtview);
+    };
+    "quit" = function (gt, vt, data) {
+        exit ();
+    };
+];
+dotty.protogt.actions.node = [
+    "cut" = function (gt, vt, obj, data) {
+        gt.cut (gt, obj, 'one', 'support', 'cut');
+        dotty.clipgt.layoutgraph (dotty.clipgt);
+    };
+    "Cut" = function (gt, vt, obj, data) {
+        gt.cut (gt, obj, 'reachable', 'support', 'cut');
+        dotty.clipgt.layoutgraph (dotty.clipgt);
+    };
+    "copy" = function (gt, vt, obj, data) {
+        gt.cut (gt, obj, 'one', 'support', 'copy');
+        dotty.clipgt.layoutgraph (dotty.clipgt);
+    };
+    "Copy" = function (gt, vt, obj, data) {
+        gt.cut (gt, obj, 'reachable', 'support', 'copy');
+        dotty.clipgt.layoutgraph (dotty.clipgt);
+    };
+    "group" = function (gt, vt, obj, data) {
+        local kv;
+
+        if ((kv = gt.getattr (gt, obj)))
+            gt.groupnodesbyattr (gt, kv.key, kv.val, [
+                'label' = kv.val; kv.key = kv.val;
+            ], 1, 1);
+    };
+    "Group" = function (gt, vt, obj, data) {
+        local kv;
+
+        if ((kv = gt.getattr (gt, obj)))
+            gt.groupnodesbyattr (gt, kv.key, kv.val, [
+                'label' = kv.val; kv.key = kv.val;
+            ], 0, 1);
+    };
+    "delete" = function (gt, vt, obj, data) {
+        if (obj.eid >= 0)
+            gt.removeedge (gt, obj);
+        else
+            gt.removenode (gt, obj);
+    };
+    "Delete" = function (gt, vt, obj, data) {
+        gt.removesubtree (gt, obj);
+    };
+    "remove" = function (gt, vt, obj, data) {
+        if (obj.nid >= 0)
+            if ((kv = gt.getattr (gt, obj)))
+                gt.removenodesbyattr (gt, kv.key, kv.val);
+    };
+    "Remove" = function (gt, vt, obj, data) {
+        if (obj.nid >= 0)
+            if ((kv = gt.getattr (gt, obj)))
+                gt.removesubtreesbyattr (gt, kv.key, kv.val);
+    };
+    "set attr" = function (gt, vt, obj, data) {
+        gt.setattr (gt, obj);
+    };
+    "print attr" = function (gt, vt, obj, data) {
+        if (obj.nid >= 0)
+            echo ('node: ', obj.name);
+        dump (obj.attr);
+    };
+];
+dotty.protogt.actions.edge = dotty.protogt.actions.node;
+dotty.protovt.normal.menus = [
+    'general' = [
+        0 = "undo";
+        1 = "paste";
+        2 = "do layout";
+        3 = "cancel layout";
+        4 = "redraw";
+        5 = "new graph";
+        6 = "load graph";
+        7 = "reload graph";
+        8 = "save graph";
+        9 = "save graph as";
+        10 = "open view";
+        11 = "copy view";
+        12 = "clone view";
+        13 = "birdseye view";
+        14 = "close view";
+        15 = "set graph attr";
+        16 = "set node attr";
+        17 = "set edge attr";
+        18 = "zoom in";
+        19 = "zoom out";
+        20 = "find node";
+        21 = "print graph";
+        22 = "text view";
+        23 = "quit";
+    ];
+    'node' = [
+        0 = "cut";
+        1 = "Cut";
+        2 = "copy";
+        3 = "Copy";
+        4 = "group";
+        5 = "Group";
+        6 = "delete";
+        7 = "Delete";
+        8 = "remove";
+        9 = "Remove";
+        10 = "set attr";
+        11 = "print attr";
+    ];
+    'edge' = [
+        0 = "cut";
+        1 = "Cut";
+        2 = "copy";
+        3 = "Copy";
+        4 = "delete";
+        5 = "Delete";
+        6 = "set attr";
+        7 = "print attr";
+    ];
+];
+dotty.protovt.normal.keys = [
+    'general' = [
+        'u' = "undo";
+        'p' = "paste";
+        'l' = "do layout";
+        'k' = "cancel layout";
+        ' ' = "redraw";
+        'L' = "reload graph";
+        's' = "save graph";
+        'Z' = "zoom in slowly";
+        'z' = "zoom out slowly";
+        'h' = "scroll horizontally";
+        'v' = "scroll vertically";
+    ];
+    'node' = [
+        'c' = "copy";
+        'C' = "Copy";
+        'g' = "group";
+        'G' = "Group";
+        'd' = "delete";
+        'D' = "Delete";
+        'r' = "remove";
+        'R' = "Remove";
+        'a' = "set attr";
+    ];
+    'edge' = [
+        'c' = "copy";
+        'C' = "Copy";
+        'd' = "delete";
+        'D' = "Delete";
+        'a' = "set attr";
+    ];
+];
+dotty.protovt.birdseye.menus = dotty.protovt.normal.menus;
+dotty.protovt.birdseye.keys = dotty.protovt.normal.keys;
+dotty.protovt.normal.uifuncs = [
+    'leftdown' = function (data) {
+        local gt;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        if (data.obj.nid >= 0) {
+            dotty.node2move = data.obj;
+            dotty.movewidget = data.widget;
+            dotty.rp2 = data.pos;
+        }
+    };
+    'leftmove' = function (data) {
+        local gt;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        if (dotty.node2move & (
+            dotty.rp2.x ~= data.pos.x | dotty.rp2.y ~= data.pos.y
+        )) {
+            gt.movenode (gt, dotty.node2move, data.pos);
+            dotty.rp2 = data.pos;
+        }
+    };
+    'leftup' = function (data) {
+        local gt;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        if (dotty.node2move) {
+            if (dotty.movewidget == data.widget)
+                gt.movenode (gt, dotty.node2move, data.pos);
+            dotty.node2move = 0;
+        } else if (~data.obj)
+            gt.insertnode (gt, data.pos, null, null, null, 1);
+    };
+    'middledown' = function (data) {
+        if (~(data.obj.nid >= 0))
+            return;
+        dotty.rubberband = 1;
+        dotty.movewidget = data.widget;
+        setgfxattr (data.widget, ['mode' = 'xor';]);
+        dotty.rp1 = data.pos;
+        dotty.rp2 = data.pos;
+        line (data.widget, null, dotty.rp1, dotty.rp2, ['color' = 1;]);
+    };
+    'middlemove' = function (data) {
+        if (dotty.rubberband ~= 1 | (
+            dotty.rp2.x == data.pos.x & dotty.rp2.y == data.pos.y
+        ))
+            return;
+        line (data.widget, null, dotty.rp1, dotty.rp2, ['color' = 1;]);
+        dotty.rp2 = data.pos;
+        line (data.widget, null, dotty.rp1, dotty.rp2, ['color' = 1;]);
+    };
+    'middleup' = function (data) {
+        local gt;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        if (dotty.rubberband ~= 1)
+            return;
+        dotty.rubberband = 0;
+        line (dotty.movewidget, null, dotty.rp1, dotty.rp2, ['color' = 1;]);
+        setgfxattr (dotty.movewidget, ['mode' = 'src';]);
+        if (dotty.movewidget ~= data.widget | ~(
+            data.pobj.nid >= 0) | ~(data.obj.nid >= 0
+        ))
+            return;
+        if (data.pobj.attr.support)
+            gt.groupnodes (gt, [
+                data.obj.nid = data.obj;
+                data.pobj.nid = data.pobj;
+            ], data.obj, null, null, null, 1, 1);
+        else if (data.obj.attr.support)
+            gt.groupnodes (gt, [
+                data.obj.nid = data.obj;
+                data.pobj.nid = data.pobj;
+            ], data.pobj, null, null, null, 1, 1);
+        else
+            gt.insertedge (gt, data.pobj, null, data.obj, null, null, 1);
+    };
+    'rightdown' = function (data) {
+        local vt, gt, menu, i;
+
+        vt = dotty.views[data.widget];
+        gt = dotty.graphs[vt.gtid];
+        if (~data.obj)
+            menu = vt.menus.general;
+        else if (data.obj.nid >= 0)
+            menu = vt.menus.node;
+        else if (data.obj.eid >= 0)
+            menu = vt.menus.edge;
+        if ((i = displaymenu (data.widget, menu)) >= 0)
+            gt.doaction (data, menu[i]);
+    };
+    'button3up' = function (data) {
+        local vt, attr;
+
+        vt = dotty.views[data.widget];
+        attr = getwidgetattr (vt.scroll, [0 = 'childcenter';]);
+        if (vt.scrollmode == 'h')
+            attr.childcenter.x = attr.childcenter.x - 40;
+        else
+            attr.childcenter.y = attr.childcenter.y - 40;
+        setwidgetattr (vt.scroll, ['childcenter' = attr.childcenter;]);
+    };
+    'button4up' = function (data) {
+        local vt, attr;
+
+        vt = dotty.views[data.widget];
+        attr = getwidgetattr (vt.scroll, [0 = 'childcenter';]);
+        if (vt.scrollmode == 'h')
+            attr.childcenter.x = attr.childcenter.x + 40;
+        else
+            attr.childcenter.y = attr.childcenter.y + 40;
+        setwidgetattr (vt.scroll, ['childcenter' = attr.childcenter;]);
+    };
+    'keyup' = function (data) {
+        local vt, gt, action;
+
+        vt = dotty.views[data.widget];
+        gt = dotty.graphs[vt.gtid];
+        if (data.obj.nid >= 0) {
+            if (vt.keys.node[data.key])
+                action = vt.keys.node[data.key];
+        } else if (data.obj.eid >= 0) {
+            if (vt.keys.edge[data.key])
+                action = vt.keys.edge[data.key];
+        }
+        if (~action)
+            if (vt.keys.general[data.key])
+                action = vt.keys.general[data.key];
+        if (action)
+            gt.doaction (data, action);
+    };
+    'redraw' = function (data) {
+        local vt, gt;
+
+        vt = dotty.views[data.widget];
+        gt = dotty.graphs[vt.gtid];
+        gt.drawgraph (gt, [vt.vtid = vt;]);
+    };
+    'closeview' = function (data) {
+        local vt, gt;
+
+        vt = dotty.views[data.widget];
+        gt = dotty.graphs[vt.gtid];
+        gt.destroyview (gt, vt);
+        if (tablesize (gt.views) == 0)
+            gt.destroygraph (gt);
+    };
+];
+dotty.protovt.birdseye.uifuncs = [
+    'leftdown' = function (data) {
+        local gt, vid;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        for (vid in gt.views) {
+            vt = gt.views[vid];
+            if (vt.type ~= 'birdseye')
+                gt.setviewcenter ([vid = vt;], data.pos);
+        }
+    };
+    'leftmove' = function (data) {
+        local gt, vid;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        for (vid in gt.views) {
+            vt = gt.views[vid];
+            if (vt.type ~= 'birdseye')
+                gt.setviewcenter ([vid = vt;], data.pos);
+        }
+    };
+    'leftup' = function (data) {
+        local gt, vid;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        for (vid in gt.views) {
+            vt = gt.views[vid];
+            if (vt.type ~= 'birdseye')
+                gt.setviewcenter ([vid = vt;], data.pos);
+        }
+    };
+    'middledown' = dotty.protovt.normal.uifuncs.middledown;
+    'middlemove' = dotty.protovt.normal.uifuncs.middlemove;
+    'middleup' = dotty.protovt.normal.uifuncs.middleup;
+    'rightdown' = dotty.protovt.normal.uifuncs.rightdown;
+    'keyup' = dotty.protovt.normal.uifuncs.keyup;
+    'redraw' = dotty.protovt.normal.uifuncs.redraw;
+    'closeview' = dotty.protovt.normal.uifuncs.closeview;
+];
+dotty.monitorfile = function (data) {
+    local gtid, gt, lpt;
+
+    for (gtid in dotty.layoutpending) {
+        lpt = dotty.layoutpending[gtid];
+        if (lpt.fd == data.fd) {
+            gt = dotty.graphs[lpt.gtid];
+            gt.haveinput = 1;
+            gt.layoutgraph (gt);
+            return 1;
+        }
+    }
+    return 0;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/fractal.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,101 @@
+load ('def.lefty');
+definit ();
+#
+# initialize window data
+#
+canvas = defcanvas;
+wrect = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 400; 'y' = 500;];];
+setwidgetattr (canvas, ['window' = wrect;]);
+
+sq = function (x) {
+    return x * x;
+};
+
+# data structures
+#
+length = 300;
+center = ['x' = 200; 'y' = 250;];
+radius = 2 * length / sqrt (12);
+fractalangle = 0;
+maxlevel = 2;
+
+# drawing functions
+#
+# draw a Koch curve (a ``snowflake'' fractal)
+#
+# start with a triangle and keep replacing edges
+# with the construct: _/\_
+# until the recursion level reaches 'maxlevel'
+#
+fractal = function (level, length, angle) {
+    local nlength, newpenpos;
+
+    if (level >= maxlevel) {
+        newpenpos.x = penpos.x + length * cos (angle);
+        newpenpos.y = penpos.y + length * sin (angle);
+        line (canvas, null, penpos, newpenpos, ['color' = 1;]);
+        penpos = newpenpos;
+        return;
+    }
+    nlength = length / 3;
+    fractal (level + 1, nlength, angle);
+    fractal (level + 1, nlength, angle + 60);
+    fractal (level + 1, nlength, angle - 60);
+    fractal (level + 1, nlength, angle);
+};
+drawfractal = function () {
+    clear (canvas);
+    setpick (canvas, center, wrect);
+    penpos = [
+        'x' = center.x + cos (fractalangle + 210) * radius;
+        'y' = center.y + sin (fractalangle + 210) * radius;
+    ];
+    fractal (0, length, fractalangle +  60);
+    fractal (0, length, fractalangle -  60);
+    fractal (0, length, fractalangle - 180);
+    remove ('penpos');
+};
+
+# editing functions
+#
+# transform the fractal.
+#
+# map point 'prevpoint' to point 'currpoint'
+# with respect to the center of the fractal.
+#
+transformfractal = function (prevpoint, currpoint) {
+    local prevtan, currtan, prevradius, currradius;
+
+    prevtan = atan (prevpoint.y - center.y, prevpoint.x - center.x);
+    currtan = atan (currpoint.y - center.y, currpoint.x - center.x);
+    fractalangle = fractalangle + (currtan - prevtan);
+    prevradius = sqrt (
+        sq (prevpoint.y - center.y) + sq (prevpoint.x - center.x)
+    );
+    currradius = sqrt (
+        sq (currpoint.y - center.y) + sq (currpoint.x - center.x)
+    );
+    radius = radius / prevradius * currradius;
+    length = radius / 2 * sqrt (12);
+};
+
+# user interface functions
+#
+# bind changes to the fractal to user actions
+#
+leftup = function (data) {
+    transformfractal (data.ppos, data.pos);
+    drawfractal ();
+};
+dops = function () {
+    local s;
+
+    s = ['x' = 8 * 300; 'y' = 10.5 * 300;];
+    canvas = createwidget (-1, ['type' = 'ps'; 'size' = s;]);
+    setwidgetattr (canvas, ['window' = wrect;]);
+    drawfractal ();
+    destroywidget (canvas);
+    canvas=defcanvas;
+};
+transformfractal (['x' = 0; 'y' = 0;], ['x' = 0; 'y' = 0;]);
+drawfractal ();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/fractal2.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,218 @@
+#
+# data structures
+#
+length = 300;
+center = ['x' = 200; 'y' = 250;];
+radius = 2 * length / sqrt (12);
+fractalangle = 0;
+maxlevel = 2;
+sizes = [
+    'button' = [ 'x' = 100; 'y' = 40;  ];
+    'canvas' = [ 'x' = 400; 'y' = 500; ];
+    'view'   = [ 'x' = 400; 'y' = 600; ];
+];
+sq = function (x) {
+    return x * x;
+};
+#
+# create view and other widgets
+#
+init = function () {
+    view = createwidget (-1, [
+        'type' = 'view'; 'name' = 'fractal'; 'size' = sizes.view;
+    ]);
+
+    array1 = createwidget (view, [
+        'type' = 'array'; 'borderwidth' = 1; 'mode' = 'vertical';
+    ]);
+    widgets[array1].resize = resize;
+
+    array2 = createwidget (array1, [
+        'type' = 'array'; 'borderwidth' = 1; 'mode' = 'horizontal';
+    ]);
+    widgets[array2].resize = resize;
+
+    array3 = createwidget (array2, [
+        'type' = 'array'; 'borderwidth' = 1; 'mode' = 'vertical';
+    ]);
+    widgets[array3].resize = resize;
+
+    morebutton = createwidget (array3, [
+        'type' = 'button'; 'text' = 'more';
+    ]);
+    widgets[morebutton].pressed = pressed;
+    lessbutton = createwidget (array3, [
+        'type' = 'button'; 'text' = 'less';
+    ]);
+    widgets[lessbutton].pressed = pressed;
+    setwidgetattr (morebutton, ['size' = sizes.button;]);
+    setwidgetattr (lessbutton, ['size' = sizes.button;]);
+
+    atext = createwidget (array2, [
+        'type' = 'text'; 'mode' = 'oneline';
+    ]);
+    widgets[atext].oneline = oneline;
+    setwidgetattr (atext, [
+        'size' = ['x' = sizes.button.x; 'y' = sizes.button.y * 2;];
+    ]);
+
+    scroll = createwidget (array1, ['type' = 'scroll';]);
+    canvas = createwidget (scroll, ['type' = 'canvas';]);
+    wrect = [0 = ['x' = 0; 'y' = 0;]; 1 = sizes.canvas;];
+    setwidgetattr (canvas, ['window' = wrect; 'viewport' = wrect[1];]);
+};
+#
+# drawing functions
+#
+# draw a Koch curve (a ``snowflake'' fractal)
+#
+# start with a triangle and keep replacing edges
+# with the construct: _/\_
+# until the recursion level reaches 'maxlevel'
+#
+fractal = function (level, length, angle) {
+    local nlength, newpenpos;
+
+    if (level >= maxlevel) {
+        newpenpos.x = penpos.x + length * cos (angle);
+        newpenpos.y = penpos.y + length * sin (angle);
+        line (canvas, null, penpos, newpenpos, ['color' = 1;]);
+        penpos = newpenpos;
+        return;
+    }
+    nlength = length / 3;
+    fractal (level + 1, nlength, angle);
+    fractal (level + 1, nlength, angle + 60);
+    fractal (level + 1, nlength, angle - 60);
+    fractal (level + 1, nlength, angle);
+};
+redrawfractal = function () {
+    clear (canvas);
+    setpick (canvas, center, wrect);
+    penpos = [
+        'x' = center.x + cos (fractalangle + 210) * radius;
+        'y' = center.y + sin (fractalangle + 210) * radius;
+    ];
+    fractal (0, length, fractalangle +  60);
+    fractal (0, length, fractalangle -  60);
+    fractal (0, length, fractalangle - 180);
+    remove ('penpos');
+};
+#
+# editing functions
+#
+# transform the fractal.
+#
+# map point 'prevpoint' to point 'currpoint'
+# with respect to the center of the fractal.
+#
+transformfractal = function (prevpoint, currpoint) {
+    local prevtan, currtan, prevradius, currradius;
+
+    prevtan = atan (prevpoint.y - center.y, prevpoint.x - center.x);
+    currtan = atan (currpoint.y - center.y, currpoint.x - center.x);
+    fractalangle = fractalangle + (currtan - prevtan);
+    prevradius = sqrt (
+        sq (prevpoint.y - center.y) + sq (prevpoint.x - center.x)
+    );
+    currradius = sqrt (
+        sq (currpoint.y - center.y) + sq (currpoint.x - center.x)
+    );
+    radius = radius / prevradius * currradius;
+    length = radius / 2 * sqrt (12);
+};
+#
+# main actions
+#
+redraw = function (data) {
+    redrawfractal ();
+};
+changemaxlevel = function (dn) {
+    maxlevel = maxlevel + dn;
+    if (maxlevel < 0)
+        maxlevel = 0;
+    redrawfractal ();
+};
+resize = function (data) {
+    local ret;
+    if (data.widget == array1) {
+        ret = [
+            array2 = [
+                'x' = data.size.x;
+                'y' = sizes.button.y * 2;
+            ];
+            scroll = [
+                'x' = data.size.x;
+                'y' = data.size.y - sizes.button.y * 2;
+            ];
+        ];
+    } else if (data.widget == array2) {
+        ret = [
+            array3 = [
+                'x' = sizes.button.x;
+                'y' = 2 * sizes.button.y;
+            ];
+            atext = [
+                'x' = data.size.x - sizes.button.x;
+                'y' = 2 * sizes.button.y;
+            ];
+        ];
+    } else if (data.widget == array3) {
+        ret = [
+            morebutton = sizes.button;
+            lessbutton = sizes.button;
+        ];
+    }
+    return ret;
+};
+#
+# user interface functions
+#
+# bind changes to the fractal to user actions
+#
+leftup = function (data) {
+    transformfractal (data.ppos, data.pos);
+    redrawfractal ();
+};
+menu = [
+    0 = 'more';
+    1 = 'less';
+];
+domenu = function (i) {
+    local s;
+    s = menu[i];
+    if (s == 'more')
+        changemaxlevel (1);
+    else if (s == 'less')
+        changemaxlevel (-1);
+};
+rightdown = function (data) {
+    domenu (displaymenu (canvas, menu));
+};
+pressed = function (data) {
+    if (data.widget == morebutton)
+        changemaxlevel (1);
+    else if (data.widget == lessbutton)
+        changemaxlevel (-1);
+};
+oneline = function (data) {
+    local dn;
+    dn = ston (data.text);
+    if (dn > 0 | dn < 0)
+        changemaxlevel (dn - maxlevel);
+};
+#
+# postscript generation
+#
+dops = function () {
+    local r;
+
+    r = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 8 * 300; 'y' = 10.5 * 300;];];
+    canvas = opencanvas ('pscanvas', '', r);
+    setwidgetattr (canvas, ['window' = wrect;]);
+    redraw ();
+    closecanvas (canvas);
+    canvas=defcanvas;
+};
+init ();
+#txtview ('off');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/lefty.psp	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+/BOX {
+    /boxy1 exch def /boxx1 exch def /boxy0 exch def /boxx0 exch def
+    boxx0 boxy0 moveto boxx1 boxy0 lineto
+    boxx1 boxy1 lineto boxx0 boxy1 lineto
+    closepath
+} def
+/SCP { stroke initclip newpath BOX clip newpath } def
+/CL { stroke setrgbcolor } def
+/DO { stroke } def
+/NP { newpath } def
+/FI { fill } def
+/LI { moveto lineto } def
+/CT { curveto } def
+/AR {
+    /ang2 exch def /ang1 exch def
+    /radius exch def /y2x exch def /cy exch def /cx exch def
+    gsave
+        cx cy translate 1 y2x scale 0 0 radius ang1 ang2 arc stroke
+    grestore
+} def
+/ARF {
+    /ang2 exch def /ang1 exch def
+    /radius exch def /y2x exch def /cy exch def /cx exch def
+    gsave
+        cx cy translate 1 y2x scale 0 0 radius ang1 ang2 arc fill
+    grestore
+} def
+/TXT {
+    /texth exch def
+    /textf exch def
+    /textn exch def
+    /texts exch def
+    /textyj exch def /texty exch def
+    /textxj exch def /textx exch def
+    textf findfont texth scalefont dup setfont
+    /FontBBox get 1 get 1000 div texth mul /textbl exch def
+    /textth texth textn mul def /texttw 0 def
+    0 1 textn 1 sub {
+        texts exch get 0 get stringwidth pop
+        dup texttw gt { /texttw exch def } { pop } ifelse
+    } for
+    textyj (b) eq { /ty texty textth add textbl add def } if
+    textyj (d) eq { /ty texty textth add def } if
+    textyj (c) eq { /ty texty textth 2 div add def } if
+    textyj (u) eq { /ty texty def } if
+    /ty ty textbl sub def
+    textxj (l) eq { /tx textx def } if
+    textxj (c) eq { /tx textx texttw 2 div sub def } if
+    textxj (r) eq { /tx textx texttw sub def } if
+    0 1 textn 1 sub {
+        /ty ty texth sub def
+        texts exch get dup 0 get /ts exch def 1 get /tj exch def
+        tj (l) eq { tx ty moveto ts show } if
+        tj (n) eq {
+            tx texttw ts stringwidth pop sub 2 div add ty moveto ts show
+        } if
+        tj (r) eq {
+            tx texttw ts stringwidth pop sub add ty moveto ts show
+        } if
+    } for
+} def
+
+/colorimage where {
+    pop
+} {
+    /bwproc {
+        rgbproc dup length 3 idiv string 0 3 0 5 -1 roll {
+            add 2 1 roll 1 sub dup 0 eq {
+                pop 3 idiv 3 -1 roll dup 4 -1 roll
+                dup 3 1 roll 5 -1 roll put 1 add 3 0
+            } {
+                2 1 roll
+            } ifelse
+        } forall
+        pop pop pop
+    } def
+    /colorimage {
+        pop pop /rgbproc exch def {bwproc} image
+    } bind def
+} ifelse
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/slides.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,109 @@
+load ('def.lefty');
+definit ();
+#
+# initialize window data
+#
+canvas = defcanvas;
+wrect = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 800; 'y' = 1000;];];
+lmargin = 100;
+width = 800;
+height = 1000;
+setwidgetattr (canvas, ['window' = wrect;]);
+fonts = [
+    'timr' = [
+        14 = 'timr14';
+        18 = 'timr18';
+        24 = 'timr24';
+    ];
+    'courr' = [
+        14 = 'courr14';
+        18 = 'courr18';
+        24 = 'courr24';
+    ];
+];
+x2ps = [
+    'timr24' = 'Times-Roman';
+    'timr18' = 'Times-Roman';
+    'timr14' = 'Times-Roman';
+    'courr24' = 'Courier';
+    'courr18' = 'Courier';
+    'courr14' = 'Courier';
+];
+
+calc = function () {
+    local i, j, cpos, tsiz, dist, slidep;
+    tsiz = ['x' = 0; 'y' = 0;];
+    for (i = 0; slides[i]; i = i + 1) {
+        slidep = slides[i];
+        if (slidep.skip) {
+            tsiz.y = tsiz.y + slidep.skip;
+        } else {
+            for (j = 0; slidep.text[j]; j = j + 1) {
+                if (j > 0)
+                    tsiz.y = tsiz.y + 5;
+                if (~slidep.font)
+                    slidep.font = slides.font;
+                if (~slidep.size)
+                    slidep.size = slides.size;
+                if (~slidep.just)
+                    slidep.just = slides.just;
+                slidep.tsiz[j] = textsize (canvas, slidep.text[j],
+                        fonts[slidep.font][slidep.size], 0);
+                tsiz.y = tsiz.y + slidep.tsiz[j].y;
+            }
+        }
+    }
+    dist = (height - tsiz.y) / (i + 1);
+    cpos = ['x' = lmargin; 'y' = height - dist;];
+    for (i = 0; slides[i]; i = i + 1) {
+        slidep = slides[i];
+        if (slidep.skip) {
+            cpos.y = cpos.y - slidep.skip - dist;
+        } else {
+            for (j = 0; slidep.text[j]; j = j + 1) {
+                if (j > 0)
+                    cpos.y = cpos.y - 5;
+                if (slidep.just == 0)
+                    slidep.tpos[j].x = cpos.x;
+                else
+                    slidep.tpos[j].x = width / 2;
+                cpos.y = cpos.y - slidep.tsiz[j].y;
+                slidep.tpos[j].y = cpos.y;
+            }
+            cpos.y = cpos.y - dist;
+        }
+    }
+};
+redraw = function () {
+    local i, j, slidep;
+    for (i = 0; slides[i]; i = i + 1) {
+        slidep = slides[i];
+        if (~slidep.skip)
+            for (j = 0; slidep.text[j]; j = j + 1)
+                text (canvas, slidep, slidep.tpos[j], slidep.text[j],
+                        fonts[slidep.font][slidep.size], 0, slidep.just);
+    }
+};
+dops = function () {
+    local i, j, slidep, r;
+
+    r = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 8 * 300; 'y' = 10.5 * 300;];];
+    canvas = createwidget (-1, ['type' = 'ps'; 'origin' = r[0]; 'size' = r[1]
+;]);
+    setwidgetattr (canvas, ['window' = wrect;]);
+    for (i = 0; slides[i]; i = i + 1) {
+        slidep = slides[i];
+        if (~slidep.skip)
+            for (j = 0; slidep.text[j]; j = j + 1)
+                text (canvas, slidep, slidep.tpos[j], slidep.text[j],
+                        x2ps[fonts[slidep.font][slidep.size]],
+                        slidep.tsiz[j].y, slidep.just, 1);
+    }
+    destroywidget (canvas);
+    canvas=defcanvas;
+};
+doit = function () {
+    calc ();
+    redraw ();
+    dops ();
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/lefty/tree.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,195 @@
+load ('def.lefty');
+definit ();
+#
+# initialize window data
+#
+canvas = defcanvas;
+wrect = [0 = ['x' = -5; 'y' = 0;]; 1 = ['x' = 410; 'y' = 500;];];
+setwidgetattr (canvas, ['window' = wrect;]);
+#
+# data structures
+#
+nodearray = [];
+nodenum = 0;
+dist = ['x' = 40; 'y' = 40;];
+defsize = ['x' = 10; 'y' = 10;];
+fontname = 'fixed';
+fontsize = 18;
+tree = null;
+
+# drawing functions
+#
+boxnode = function (node) {
+    local center;
+    box (canvas, node, node.rect, ['color' = 0; 'fill' = 'on';]);
+    box (canvas, node, node.rect);
+    center = [
+        'x' = (node.rect[0].x + node.rect[1].x) / 2;
+        'y' = (node.rect[0].y + node.rect[1].y) / 2;
+    ];
+    if (node.name)
+        text (canvas, node, center, node.name, fontname, fontsize, 'cc');
+};
+circlenode = function (node) {
+    local center, radius;
+    center = [
+        'x' = (node.rect[0].x + node.rect[1].x) / 2;
+        'y' = (node.rect[0].y + node.rect[1].y) / 2;
+    ];
+    radius = [
+        'x' = center.x - node.rect[0].x;
+        'y' = center.y - node.rect[0].y;
+    ];
+    arc (canvas, node, center, radius, ['color' = 0; 'fill' = 'on';]);
+    arc (canvas, node, center, radius);
+    if (node.name)
+        text (canvas, node, center, node.name, fontname, fontsize, 'cc');
+};
+drawnode = boxnode;
+drawedge = function (node1, node2) {
+    line (canvas, null,
+            [
+                'x' = (node1.rect[1].x + node1.rect[0].x) / 2;
+                'y' = node1.rect[0].y;
+            ], [
+                'x' = (node2.rect[1].x + node2.rect[0].x) / 2;
+                'y' = node2.rect[1].y;
+            ]);
+};
+drawtree = function (node) {
+    local i;
+    for (i in nodearray)
+        drawnode (nodearray[i]);
+    drawtreerec (node);
+};
+drawtreerec = function (node) {
+    local i, n;
+    if ((n = tablesize (node.ch)) > 0) {
+        for (i = 0; i < n; i = i + 1) {
+            drawedge (node, node.ch[i]);
+            drawtreerec (node.ch[i]);
+        }
+    }
+};
+redraw = function (c) {
+    if (tree)
+        drawtree (tree);
+};
+
+# layout functions
+#
+complayout = function () {
+    leafx = 0;
+    leafrank = 0;
+    dolayout (tree, wrect[1].y - 10);
+    remove ('leafx');
+    remove ('leafrank');
+};
+dolayout = function (node, pary) {
+    local r, n, i, size, lchp, rchp;
+    size = nodesize (node);
+    if (node.chn > 0) {
+        for (i = 0; i < node.chn; i = i + 1)
+            dolayout (node.ch[i], pary - size.y - dist.y);
+        node.rank = (node.ch[0].rank + node.ch[node.chn - 1].rank) / 2;
+        lchp = node.ch[0].rect;
+        rchp = node.ch[node.chn - 1].rect;
+        r[0].x = lchp[0].x + ((rchp[1].x - lchp[0].x) - size.x) / 2;
+        r[0].y = pary - size.y;
+        r[1].x = r[0].x + size.x;
+        r[1].y = pary;
+        node.rect = r;
+    } else {
+        node.rank = leafrank;
+        r[0].x = leafx;
+        r[0].y = pary - size.y;
+        r[1].x = r[0].x + size.x;
+        r[1].y = pary;
+        leafrank = leafrank + 1;
+        leafx = r[1].x + dist.x;
+        node.rect = r;
+    }
+};
+
+# editing functions
+#
+inode = function (point, name) {
+    local i, nnum, size;
+    nnum = nodenum;
+    if (~name)
+        name = ask ('give name of node:');
+    nodearray[nnum].ch = [];
+    nodearray[nnum].chn = 0;
+    nodearray[nnum].name = name;
+    size = nodesize (nodearray[nnum]);
+    nodearray[nnum].rect[0] = point;
+    nodearray[nnum].rect[1] = ['x' = point.x + size.x; 'y' = point.y + size.y;];
+    nodenum = nodenum + 1;
+    if (~tree) {
+        tree = nodearray[nnum];
+        tree.depth = 0;
+        complayout ();
+        drawtree (tree);
+    } else
+        drawtree (nodearray[nnum]);
+    return nodearray[nnum];
+};
+iedge = function (node1, node2) {
+    node1.ch[node1.chn] = node2;
+    node1.chn = node1.chn + 1;
+    node2.depth = node1.depth + 1;
+    complayout ();
+    clear (canvas);
+    drawtree (tree);
+};
+fix = function (node, op, np) {
+    if (node.depth ~= 0)
+        dist.y = dist.y + (op.y - np.y) / node.depth;
+    if (node.rank ~= 0)
+        dist.x = dist.x + (np.x - op.x) / node.rank;
+    complayout ();
+    clear (canvas);
+    drawtree (tree);
+};
+nodesize = function (node) {
+    local siz;
+    if (~(siz = textsize (canvas, node.name, fontname, fontsize)))
+        siz = defsize;
+    else {
+        siz.x = siz.x + 8;
+        siz.y = siz.y + 8;
+    }
+    return siz;
+};
+changenode = function (nodestyle) {
+    drawnode = nodestyle;
+    clear (canvas);
+    drawtree (tree);
+};
+
+# user interface functions
+#
+leftdown = function (data) {
+    if (~data.obj)
+        inode (data.pos, null);
+};
+leftup = function (data) {
+    if (data.pobj)
+        fix (data.pobj, data.ppos, data.pos);
+};
+middleup = function (data) {
+    if (data.pobj & data.obj)
+        iedge (data.pobj, data.obj);
+};
+dops = function () {
+    local s;
+
+    s = ['x' = 8 * 300; 'y' = 10.5 * 300;];
+    fontname = 'Times-Roman';
+    canvas = createwidget (-1, ['type' = 'ps'; 'size' = s;]);
+    setwidgetattr (canvas, ['window' = wrect;]);
+    drawtree (tree);
+    destroywidget (canvas);
+    canvas=defcanvas;
+    fontname = 'fixed';
+};
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-arabic-fc.dll has changed
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-arabic-lang.dll has changed
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-basic-fc.dll has changed
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-basic-win32.dll has changed
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-hangul-fc.dll has changed
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-hebrew-fc.dll has changed
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-indic-fc.dll has changed
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-indic-lang.dll has changed
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-khmer-fc.dll has changed
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-syriac-fc.dll has changed
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-thai-fc.dll has changed
Binary file toolboxes/graph_visualisation/lib/pango/1.6.0/modules/pango-tibetan-fc.dll has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/pkgconfig/libcdt.pc	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+prefix=/c/graphviz-mingw/local.2.20.3
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include/graphviz
+
+Name: libcdt
+Description: Container DataType library
+Version: 2.20.3
+Libs: -L${libdir} -lcdt
+Cflags: -I${includedir}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/pkgconfig/libcgraph.pc	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+prefix=/c/graphviz-mingw/local.2.20.3
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include/graphviz
+
+Name: libcgraph
+Description: Graph library (file i/o, dot language parsing, graph, subgraph, node, edge, attribute, data structure manipulation)
+Version: 2.20.3
+Libs: -L${libdir} -lcgraph -lcdt
+Cflags: -I${includedir}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/pkgconfig/libgraph.pc	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+prefix=/c/graphviz-mingw/local.2.20.3
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include/graphviz
+
+Name: libgraph
+Description: Graph library (file i/o, dot language parsing, graph, subgraph, node, edge, attribute, data structure manipulation)
+Version: 2.20.3
+Libs: -L${libdir} -lgraph -lcdt
+Cflags: -I${includedir}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/pkgconfig/libgvc.pc	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,12 @@
+prefix=/c/graphviz-mingw/local.2.20.3
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include/graphviz
+plugins=5
+
+Name: libgvc
+Description: The GraphVizContext library 
+Version: 2.20.3
+Libs: -L${libdir} -lgvc -lgraph -lcdt
+Cflags: -I${includedir}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/lib/pkgconfig/libpathplan.pc	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,10 @@
+prefix=/c/graphviz-mingw/local.2.20.3
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include/graphviz
+
+Name: libpathplan
+Description: Library for planning polyline and bezier paths around polygon obstacles
+Version: 2.20.3
+Libs: -L${libdir} -lpathplan
+Cflags: -I${includedir}
Binary file toolboxes/graph_visualisation/lib/release/dll/GdiPlus.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/Pathplan.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/cdt.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/cgraph.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/glut32.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/graph.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/gvc.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/gvplugin_core.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/gvplugin_dot_layout.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/gvplugin_gd.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/gvplugin_gdiplus.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/gvplugin_neato_layout.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/gvplugin_pango.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/iconv.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/intl.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/jpeg62.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libatk-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libcairo-2.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libexpat.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libfontconfig-1.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libfreetype-6.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libgdk-win32-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libgdk_pixbuf-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libgdkglext-win32-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libglade-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libglib-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libgmodule-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libgobject-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libgtk-win32-2.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libgtkglext-win32-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libltdl-3.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libpango-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libpangocairo-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libpangoft2-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libpangowin32-1.0-0.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libpng12.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/libxml2.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/ltdl.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/regex_win32.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/vmalloc.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/dll/zlib1.dll has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/Pathplan.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/acyclic.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/ast.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/bcomps.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/ccomps.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/cdt.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/cgraph.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/circogen.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/dijkstra.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/dot.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/dotgen.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/expr.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/fdpgen.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gc.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gd.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/graph.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gts.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gvc.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gvcolor.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gvpack.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gvplugin_core.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gvplugin_dot_layout.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gvplugin_gd.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gvplugin_gdiplus.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gvplugin_neato_layout.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gvplugin_pango.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gvpr.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gvprlib.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/gxl2gv.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/hs_regex.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/ingraphs.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/ltdl.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/mm2gv.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/neatogen.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/nop.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/osage.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/patchwork.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/prune.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/rbtree.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/regex_win32.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/sccmap.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/sfdp.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/sfio.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/smyrna.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/sparse.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/topfish.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/tred.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/twopigen.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/unflatten.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/vmalloc.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/vpsc.lib has changed
Binary file toolboxes/graph_visualisation/lib/release/lib/xdot.lib has changed
Binary file toolboxes/graph_visualisation/share/Thumbs.db has changed
Binary file toolboxes/graph_visualisation/share/fonts/FreeSans.ttf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/AUTHORS	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+Primary contact. Please send patches or enhancements to:
+    Graphviz project <gviz-bugs@research.att.com>
+
+---------------
+Authors: (In alphabetical order.)
+
+    David Dobkin <dpd@cs.princeton.edu>
+    John Ellson  <ellson@graphviz.org>
+    Emden Gansner <erg@research.att.com>
+    Eleftherios Koutsofios <ek@research.att.com>
+    Stephen North <north@research.att.com>
+    Kiem-Phong Vo <kpv@research.att.com>
+    Gordon Woodhull <gmcw@worldnet.att.net>
+
+---------------
+
+Recommended packages:
+
+FreeType:    <http://www.freetype.org/>
+    David TURNER (david.turner@freetype.org)
+    Robert WILHELM (robert.wilhelm@freetype.org)
+        and others.
+
+GD: <http://www.boutell.com/gd/>
+       Tom Boutell
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/COPYING	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,213 @@
+Common Public License Version 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+    a) in the case of the initial Contributor, the initial code and
+documentation distributed under this Agreement, and
+
+    b) in the case of each subsequent Contributor:
+
+    i) changes to the Program, and
+
+    ii) additions to the Program;
+
+    where such changes and/or additions to the Program originate from and are
+distributed by that particular Contributor. A Contribution 'originates' from a
+Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to
+the Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+
+    a) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free copyright license to
+reproduce, prepare derivative works of, publicly display, publicly perform,
+distribute and sublicense the Contribution of such Contributor, if any, and such
+derivative works, in source code and object code form.
+
+    b) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form.
+This patent license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the
+Licensed Patents. The patent license shall not apply to any other combinations
+which include the Contribution. No hardware per se is licensed hereunder.
+
+    c) Recipient understands that although each Contributor grants the licenses
+to its Contributions set forth herein, no assurances are provided by any
+Contributor that the Program does not infringe the patent or other intellectual
+property rights of any other entity. Each Contributor disclaims any liability to
+Recipient for claims brought by any other entity based on infringement of
+intellectual property rights or otherwise. As a condition to exercising the
+rights and licenses granted hereunder, each Recipient hereby assumes sole
+responsibility to secure any other intellectual property rights needed, if any.
+For example, if a third party patent license is required to allow Recipient to
+distribute the Program, it is Recipient's responsibility to acquire that license
+before distributing the Program.
+
+    d) Each Contributor represents that to its knowledge it has sufficient
+copyright rights in its Contribution, if any, to grant the copyright license set
+forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its
+own license agreement, provided that:
+
+    a) it complies with the terms and conditions of this Agreement; and
+
+    b) its license agreement:
+
+    i) effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title and
+non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+    ii) effectively excludes on behalf of all Contributors all liability for
+damages, including direct, indirect, special, incidental and consequential
+damages, such as lost profits;
+
+    iii) states that any provisions which differ from this Agreement are offered
+by that Contributor alone and not by any other party; and
+
+    iv) states that source code for the Program is available from such
+Contributor, and informs licensees how to obtain it in a reasonable manner on or
+through a medium customarily used for software exchange. 
+
+When the Program is made available in source code form:
+
+    a) it must be made available under this Agreement; and
+
+    b) a copy of this Agreement must be included with each copy of the Program. 
+
+Contributors may not remove or alter any copyright notices contained within the
+Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if
+any, in a manner that reasonably allows subsequent Recipients to identify the
+originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore, if
+a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and other legal
+actions brought by a third party against the Indemnified Contributor to the
+extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to
+control, and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may participate in
+any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If that
+Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such
+Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a court
+requires any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its exercise of
+rights under this Agreement, including but not limited to the risks and costs of
+program errors, compliance with applicable laws, damage to or loss of data,
+programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable
+law, it shall not affect the validity or enforceability of the remainder of the
+terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such
+provision valid and enforceable.
+
+If Recipient institutes patent litigation against a Contributor with respect to
+a patent applicable to software (including a cross-claim or counterclaim in a
+lawsuit), then any patent licenses granted by that Contributor to such Recipient
+under this Agreement shall terminate as of the date such litigation is filed. In
+addition, if Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the Program
+itself (excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted under
+Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue and
+survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to time.
+No one other than the Agreement Steward has the right to modify this Agreement.
+IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
+as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the Agreement
+under which it was received. In addition, after a new version of the Agreement
+is published, Contributor may elect to distribute the Program (including its
+Contributions) under the new version. Except as expressly stated in Sections
+2(a) and 2(b) above, Recipient receives no rights or licenses to the
+intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial in
+any resulting litigation.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/ChangeLog	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,960 @@
+June 16, 2009
+	- Release 2.24.0
+	- Core:
+		- add new layout engine for large graphs: sfdp
+	- Fixed bugs:
+		1515, 1590, 1598, 1601, 1605, 1607, 1609, 1610, 1611,
+		1614, 1615, 1617, 1625, 1628, 1634, 1635, 1640, 1641,
+		1642, 1646, 1649, 1651, 1652
+	
+March 13, 2009
+	- Release 2.22.2
+		- fix for buffer overflow (present in 2.22.0 and 2.22.1)
+	- Fixed bugs:
+		1602
+
+March 9, 2009
+	- Release 2.22.1
+		- build fixes for Visual Studio and for FreeBSD
+March 3, 2009
+	- Release 2.22.0
+	- Core:
+		- libgvc api changed, version bumped.  Affects third party
+		  applications using libgvc.
+		- plugin api changed, version bumped.  Affects third party
+		  plugins for graphviz.
+		- 90% conversion to cgraph has been done, but not enabled yet,
+		  (and yes, its true what they say about the last 10% )
+		- drop libagraph from distribution  (use libcgraph)
+		- layout code completely converted to floating point.
+		- new "dot -P" option for generating a graph of available
+		  plugins.
+		- registered MIME type:  text/vnd.graphviz for .gv files
+		- rename files from .dot to .gv to avoid conflict with
+		  Word templates.  .dot still supported, but deprecated.
+		- new command: mm2gv   (matrix-market graph file conversion)
+		- rename commands:	dot2gxl -> gv2gxl
+					gxl2dot -> gxl2gv
+	- Plugins:
+		- new rsvg plugin for support of node shapes in SVG format
+		- new gs plugin for support of node shapes in PS format
+		- new lasi plugin for support of UTF-8 characters in PS output
+		  (the above thee plugins are Linux only, at the moment)
+		- new quartz plugin (MacOSx only)
+		- new gdiplus plugin (Windows only)
+		- new -Tvml support in core plugin (thanks Steve Roush)
+		- new -Ttk support in core plugin (also used by Tcldot and
+		  gv_tcl language bindings.)
+		- disabled old style codegens completely
+	- Linux:
+		- new Ubuntu8 builds
+		- new Fedora 10 and 11 builds
+	- MacOSx: 
+		- Universal binary for Leopard: i386, x86_64, ppc, ppc64
+		- Should not conflict with parallel install of MacPorts
+		  version of graphviz
+		- Improved GUI 
+	- Windows:
+		- VisualC project files now available, in addition to the GNU
+		  Makefiles that are used the mingw builds.
+	- Language Bindings:
+		- fixed problem with writing dot, xdot, plain, canon to 
+		  memory or to Tcl_Channels
+		- renamed man pages to Debian style:  gv.3tcl, gv.3perl, etc
+	- Fixed bugs:
+		827, 1365, 1366, 1367, 1368, 1374, 1375, 1376, 1378, 1380, 1382,
+		1383, 1385, 1386, 1388, 1390, 1391, 1392, 1394, 1395, 1397,
+		1398, 1399, 1405, 1407, 1410, 1412, 1414, 1415, 1416, 1421,
+		1424, 1425, 1427, 1429, 1431, 1433, 1435, 1436, 1437, 1438,
+		1440, 1441, 1444, 1446, 1451, 1452, 1453, 1456, 1457, 1459,
+		1460, 1461, 1462, 1463, 1464, 1465, 1466, 1470, 1474, 1475,
+		1476, 1477, 1478, 1484, 1485, 1489, 1490, 1492, 1493, 1495,
+		1496, 1499, 1500, 1501, 1502, 1503, 1505, 1509, 1513, 1521,
+		1523, 1525, 1530, 1531, 1532, 1533, 1535, 1536, 1539, 1540,
+		1542, 1543, 1546, 1547, 1551, 1553, 1554, 1561, 1565, 1566, 
+		1568, 1569, 1570, 1571, 1573, 1577, 1578, 1579, 1580, 1581,
+		1582, 1584, 1586,
+		
+June 25, 2008
+	- Release 2.20.2
+	- Fix bug in HTML-like labels 
+June 23, 2008
+	- Release 2.20.1
+	- Fix bug in ccomps related to conversion to cgraph
+June 20, 2008
+	- Release 2.20.0
+	- Preparing for Release 2.20
+	- Fixed bugs: 1315, 1317, 1324, 1336, 1343, 1364
+	- Add new "folder" shape for nodes.
+	- Migration of gvpr tools to libcgraph.   
+	- New output format -Teps  (encapsulated postscript)
+	- Various NetBSD and SuSE fixes incorporated
+	- ./configure now provides a summary
+	- RPM specfile updates for fedora-10 (no more string comparisons)
+	- Add MacOS support (Glen Low)
+March 10, 2008
+	- Release 2.18
+	- Fixed bugs: 1249, 1255, 1256, 1268, 1276, 1289, 1295, 1300, 
+		Fedora BZ#247376, 
+	- in -Tps use a new number formatter that suppresses trailing 0.
+	- support tcl/tk-8.5
+	- support gcc-4.3
+	- support for node usershapes/images in svg format (thanks Alex Poylisher)
+	- install: perl, php, python, ruby, tcl, bindings in language-specified directories
+	- add arrowhead scaling with edge penwidth
+	- add "folder" node shape (thanks Pander)
+	- many windows and mac fixes (thanks Glen)
+	- add "smyna" large graph view (thanks Arif) (not yet included in binary distros)
+December 12, 2007
+	- Release 2.16.1
+	- Fixed bugs: 1228, 1234, 1238, 1239, 1245
+	- Improvements to PHP binding
+	- Improvements to OCAML binding
+	- Make regression tests run from the build tree, rather than require installation
+	- Repair freetype detection on RedHat-7 (Yes, people still use it!!)
+	- Fix zoom-at-mouse-location in -Txlib and -Tgtk
+	- Fix some dotty regressions
+November 9, 2007
+	- Release 2.16
+	- Fixed bugs: 456, 473, 1021, 1153, 1154, 1155, 1159, 1160, 1162,
+	1165, 1166, 1168, 1169, 1170, 1172, 1173, 1174, 1175, 1177, 1178,
+	1179, 1181, 1182, 1183, 1185, 1187, 1189, 1192, 1193, 1195, 1196,
+	1199, 1204, 1207, 1210, 1215, 1216, 1217, 1218, 1219, 1220, 1223
+	- new regression test suite
+	- new cgraph library (will eventually replace graph and agraph)
+	- add "image" and "imagescale" for simpler support for images in nodes
+	- add "tab" "box3d" and "component" shapes.  - Diomidis Spinellis
+	- replace arith.h in distro
+	- add functions to access version info to avoid need for gvcint.h
+	- Fix problem with irregular character spacing at 96dpi in pango/cairo output formats.
+	- Add gdk_pixbuf plugin providing: .bmp .ico .jpg .png .tif 
+	- Add DevIL plugin providing: .bmp .jpg .png .tif .tga
+	- Extend GD plugin to provide a backend to cairo for: .gif .jpg .png .gd .gd2 .wbmp  <- gifs are now antialiased
+	- Rework plugin framework to separate device from renderer, and to autoload load dependendent plugins
+	- show defaults in output from: ./configure --help
+	- add more info to dot -v  and dot -v2 debug outputs
+	- various issues with CR/LF in windows, but not in binary outputs.
+August 15, 2007
+	- release 2.14.1
+	- Fixed bugs: 1163, 1167
+	- Windows build fixes
+	- Add xdot parsing library to source distros
+	- graphviz.spec fixes for rpm distros from Gareth Armstrong
+	- moved language binding man pages to mann (gv_php.n, gv_ocaml.n, etc.)
+	- New access functions for version info in GVC_t - permits gvcint.h to
+	be private.
+August 2, 2007
+	- release 2.14
+	- Fixed (or otherwise closed) bugs:
+		74, 130, 162, 184, 190, 197, 219, 223, 281, 295, 311, 316,
+		324, 352, 364, 385, 393, 404, 420, 447, 455, 474, 489, 507,
+		530, 532, 537, 543, 551, 564, 571, 574, 577, 583, 587, 588,
+		590, 592, 595, 599, 638, 647, 650, 660, 675, 667, 668, 669,
+		676, 684, 685, 686, 721, 725, 734, 740, 746, 747, 748, 749,
+		752, 755, 756, 765, 778, 780, 781, 782, 785, 794, 803, 814,
+		822, 828, 836, 840, 847, 852, 862, 866, 868, 893, 928, 944,
+		948, 950, 955, 961, 976, 985, 992, 1024, 1057, 1064, 1065,
+		1066, 1069, 1072, 1074, 1079, 1085, 1086, 1089, 1091, 1092,
+		1093, 1094, 1096, 1107, 1111, 1123, 1124, 1130, 1138, 1145,
+		1151, 1152, 1156
+	- Fixed Redhat bugs: 218191, 237497
+	- Fixed Debian bugs: 321128, 422862, 422873
+	- Fixed Gentoo bugs: 173676
+	- Using system version of libgd if gd-2.0.34 or later. (Fedora 7 and 8 distros)
+	        internal copy of gd updated to gd-2.0.35.
+	- Updated GVGUI viewer for Windows
+	- Windows build process now uses GNU autoconf and UWIN
+	- Added support for selection of edge routing types:
+		line, polyline, orthogonal, spline
+	- Added -Tvml support
+December 5, 2006
+	- release 2.12
+	- Bug fix release for 2.10
+	- The gd plugin for font handlers was not being used at all if the build
+	did not use fontconfig, e.g., on Windows. In addition, the code had
+	dropped the name mapping to Windows font names.
+	- PostScript output had an extraneous '%' character on the first line,
+	which would cause printing to fail.
+	- Text handling, during both sizing and layout, incorrectly handled
+	empty lines such as label="\nabc".
+	- HTML-like tables had been changed to use too much vertical space,
+	to possibly use the wrong font in calculating the height of a line,
+	and to use the wrong offset when moving the baseline from one line to
+	the next.
+November 27, 2006
+	- release 2.10
+	- dot - New pango+cairo renderer plugin (was in separate graphviz-cairo tree).
+	  -- -Tpng now uses cairo   (-Tpng:gd for old gd based renderer)
+	  -- -Tpdf now available
+	  -- -Tps:cairo now available (-Tps is a direct ps renderer not based on cairo)
+	  -- -Tsvg:cairo now available (-Tsvg is a direct svg renderer not based on cairo)
+	  -- -Txlib now available -- "dot -Tx11 foo.dot"  watches foo.dot with inotify and updates
+	  -- -Tgtk now available -- eventually to provide a graph editing capability - not fully working
+	  -- -Tswf "Flash" now available using the ming library. Currently has incomplete font support and not yet in Fedora rpms because ming not yet available as rpm.
+	- remove hard gd dependencies from dot.  gd renderers now provided
+	  as optional plugin.   Deprecated, but required for -Tjpg, -Tgif and -Tvrml.
+	- gvpr - Add kindOf function, plus functions to set and get default values
+	- dot - Implement esep attribute to allow graph to specify room
+	around nodes for spline routing.
+	- neato - add vpsc library and DIGCOLA
+	- neato - add IPSEPCOLA additions from Tim Dwyer
+	- move: -Tps, -Tfig, -Tsvg, -Timap/ismap/cmap/cmapx, -Tdot/xdot,
+	from codegens to a "core" plugin.
+	- dot - new usershape plugin mechanism potentially supporting
+	  a wider range of input shape format -> output format combinations.
+	display on changes
+	- Fixes for builds on Mac OS/X
+	- dot - new -O switch to automatically generate output file
+	names based on the input filename and the -T value.
+	 e.g.  "dot -Tpng -O *.dot"   
+	Also works for case of multiple graphs in a single input file.
+	- add support for "Brewer" color nameset
+	- move reusable .so libraries to $PREFIX/lib per frequent request
+	from Debian community.   Plugin .so's remain in $PREFIX/lib/graphviz.
+	- Fix bugs 882 884 886 896 902 905 906 911 918 919 933 936 938 940
+	   948 955 958 967 979 987 993 1005 1006 1011 1012 1013 1014 1016
+	   1018 1025 1030 1034 1035 1039 1040 debian#37300
+
+February 3, 2006
+	- release 2.8
+	- (POTENTIAL INCOMPATIBILITY) The default input scaling, in the
+	absence of a "-s" switch, has been changed from inches to points.
+	The new behavior of "neato" is equivalent to "neato -s72".
+	The old behavior can be restored with "neato -s1".
+	The purpose of this change is to avoid a Frequently-Made-Mistake
+	when using "neato -n" to process a previously generated layout.
+	Previously it was necessary to use "neato -n -s72", but with this
+	change the default matches dot's output and the "-s72" is not required.
+	- Added pseudo layout engines: "dot -Knop" and dot -Knop1" equivalent
+	to "neato -n"
+	- Added pseodo layout engine: "dot -Knop2" equivalent to "neato -n2"
+	- Add support for color namespaces; add Brewer color data
+	- Add support for simulated duplex edges using parallel edges:
+	head arrow takes first color, tail arrow takes second color.
+	- source code management moved back to CVS until GIT matures a bit more
+	- distribute separe rpms for binares of language bindings : 
+	- Add a small pad region around graph renderings to allow for finite
+	penwidths at the drawing edges
+	- Add protonode(g) and E=protoedge(g) functions to simplify
+	language bindings.
+	- Add special purpose code to deal with html labels from language
+	bindings.
+	- Various portability fixes for: HPUX, Mac OS/X, Cygwin, Windows.
+	- Fix bugs 784, 786, 787, 788, 789, 790, 791, 793, 795, 796, 798, 799,
+	    800, 801, 804, 806, 811, 812, 817, 820, 821, 823, 824, 825, 830,
+	    837, 839, 841, 842, 843, 848, 850, 851, 854, 855, 856, 857, 858,
+	    859, 861, 863, 866, 867, 869, 872, 874, 876, 877
+
+August 28, 2005
+	- release 2.6
+	- experimentally moved source code management from CVS to GIT
+	- added iterator functions to script bindings
+	- more C-API tuning
+	- add "-c" switch to dot to explicitly generate plugin "config" file
+		instead of generating it as a side-effect of "dot -V"
+	- better support for binary relocation.
+	- plugin versioning and version checking
+	- clean up of header files
+	- provide statically linked "dot_static" (not incl. in rpms)
+	- additional "event" support for GUIs (e.g. "DotEdit" graphviz-cairo)
+	- add some information about plugins to "dot -v" output.
+	- lefty/dotty fixes
+	- fix bugs 746, 750, 752, 753, 754, 756, 761, 763, 764, 765, 768, 
+		771, 772, 773, 774, 775, 776, 777, 778
+	- not a bug 757, 760, 770
+July 20, 2005
+	- release 2.4
+	- major code restructuring
+	- new plugin architecture (e.g. see separate package: graphviz-cairo )
+	- new script-language bindings using swig (perl, ruby, python, tcl, java ... )
+	- C-API now in libgvc (no more dotneato.[ch] or dotneato-config.sh]
+	- pkgconfig now used for reusable libraries
+	- lefty upgrade
+	- fix bugs 156, 255, 492, 631, 641, 647, 659, 662, 665, 670, 690, 691,
+			701, 702, 703, 705, 730, 731, 732, 741, 743
+April 7, 2005
+	- release 2.2.1
+	- correct license headers to CPL in .cpp files
+	- undo indentation cleanup to dynagraph .h files
+	- fix bugs: 183, 247, 419, 615, 616, 625, 626, 627, 643,
+		646, 651, 658, 661, 664, 674
+	- fix buffer overrun in Gvfilepath construction
+January 19, 2005
+	- release 2.2
+	- fix bugs: 86, 345, 517, 579, 580, 597, 600, 601, 604
+	- use the original cpl1.0.txt as the license master, instead of CPL.html        - fix for bug generating in memory bitmaps that was affecting webdot
+	- fixes for windows builds
+	- documentation updates
+December 11, 2004
+	- release 2.0
+	- new CPL license
+	- re indent all sources
+December 11, 2004
+	- release 1.18
+	dotneato
+	- fix bugs: 451, 536, 545, 547, 548, 559, 561, 565, 572
+	- increase max size  of HTML tables.
+	- spline cluster edges in fdp
+	- center userimages in nodes
+	- support user images in HTML table cells
+	- syntax extension for node:port:compass as well as node:compass
+	- FreeBSD fixes
+	- sync with gd-2.0.32
+	- attempt to catch some out-of-memory conditions with very large graphs
+	- support background and node-fill partial transparency when truecolor=true
+		
+September 14, 2004
+	- release 1.16
+	dotneato
+	- fix bugs: 275, 523, 526, 527, 529, 534
+August 30, 2004
+	- release 1.14
+    dotneato
+	- the official gd now has support support for GIFs again - the
+		internal gd is now closely sync'ed with the official version
+		and will eventually be removed in favor of using a
+		separate installation of the official version.
+	- gd has new support for FontConfig (thanks to Dag Lem)
+		NB. the fontname attribute in graphs is now a font pattern
+		as understood by fontconfig (e.g. fontname="Times-Italic"),
+		unless it contains a '/' in which case it is interpreted as
+		a font path as before.
+	- gd provides support for html4 entities in decimal, hex or named, e.g "&lt;"
+	- "dot -v" debugging output now reports fontname -> fontpath resolutions
+
+	- PostScript generated by -Tps now uses "xshow" operator for strings
+		for better matching of bitmap and PostScript outputs.
+
+	- ability to use an external gd-2.0.29 version of libgd (EXPERIMENTAL)
+
+	- new feature: parallel edges by using a ":" separated list of edge colors
+	- new feature: rankdir=BT and rankdir=RL  (thanks to Dag Lem)
+
+	- new layout engine: fdp - force directed placement (EXPERIMENTAL)
+		a neato-like undirected layout engine that produces
+		clustered symmetric layouts.
+		Supports edges between clusters and nodes.
+
+	- updated neato engine: now using stress majorization as the default,
+		which avoids the potential for cycling
+	- model=subset in neato provides a third distance function, where
+		two nodes sharing many nodes will be place farther apart
+	- shape=none now equivalent to shape=plaintext
+	- fix label justification with \l and \r
+	- first cut at <FONT> support added to html labels
+	- various color transparency fixes
+	- various fixes for UTF8 and Latin[12] character encodings.
+	- various cluster fixes.
+	- improved hyperlink support in -Tsvg
+	- support tooltips on clusters in client-side imagemaps
+
+    gvpr
+	- add support for scanf and friends
+
+    general
+	- greater use of shared libraries.
+	- pkg-config files provided for shared libraries (EXPERIMENTAL)
+	- "./configure --disable-shared --enable-static" works if needed
+	- C++ wrappers on all header files (thanks to Victor Wodecki)
+	- various configuration and portablity fixes
+	- provide pdf version of man pages
+	- Windows package provides graphviz libraries and header files
+	- Closed bugs: 195, 198, 234, 321, 330, 399, 401, 406, 410, 411,
+		412, 413, 415, 416, 417, 423, 424, 427, 430, 431, 433, 434, 435,
+		438, 441, 442, 444, 445, 449, 450, 452, 454, 457, 458, 462, 463,
+		464, 467, 468, 469, 471, 475, 480, 482, 485, 495, 496, 498, 499,
+		500, 501, 504, 508, 511, 512, 514
+
+March 5, 2004
+    - added glyphwidths.ps support utility
+
+March 1, 2004
+    - release 1.12
+    - general
+	- rename bcc -> bcomps to avoid name conflict with "Bruce's C Compiler"
+		on Redhat distributions.
+	- all build without X11 (fix problem in lefty tree)
+	- remove from distribution:
+		dag, fdp, geo, grid, incr, shape, tcldgr, tcldgl
+    - dotneato
+	- fix "brown-bag" problem resulting in PNG and JPEG errors on RH8 and RH9.
+February 23, 2004
+    - release 1.11
+    - general
+	- fix windows builds
+	- add tool "bcc" to distribution
+    - dotneato
+	- add -Gviewport="X,Y,Z,x,y"  where XY are the dimensions of a viewport
+	  in device coordinates (pixels), Z is a zooming factor, x,y is the
+	  location of the center of the viewport in graph coordinates.
+	  Supported in bitmap and imagemap outputs only.
+	- fix memory leak in gd/gdft.c
+	- clean up calculation of whitespace around labels
+    - dotty, lefty
+	- fix for bug #400	
+December 23, 2003
+	- added dijkstra (single source distance) filter
+September 10, 2003
+    - general
+	- removed CVS directories from .tar.gz distributions
+	- add "config" directory to contain some of the autoconf clutter
+	- only remove flex products with "make maintainer-clean" to
+	  avoid trying to regenerate them after "make distclean"
+	  basically this is to avoid the broken flex on Debian.
+	- suppress complaints from ./configure about config.rpath
+	- doc/build.html updated with notes about Windows builds
+	- build fixes for Forte 6sp2 compiler on Sun -xarch=v9a (64bit)
+	- build fixes for OpenBSD
+	- improved configure testing for Tcl/Tk
+	- various bug fixes, internal restructuring, etc
+    - dotneato
+	- fix problem with extra escape chars in .fig output
+	- support for "setlinewidth" in -Tfig
+	- improved splines in -Tfig
+	- add manpage for dotneato-config
+	- neato: add defaultdist graph attribute to set distance
+	  between components
+	- first cut at html table formatter add. not ready for use yet
+	  as the syntax is going to change some more.
+    - tools
+	- renamed "colorize" to "gvcolor" to avoid conflict on Debian
+	- renamed "gpr" to "gvpr" to avoid conflict on Debian
+	- add fflush() to acyclic, ccomps, gvcolor, tred, dot2gxl
+	  to try to fix truncated output when used in php or perl cgi scripts
+July 9, 2003
+	- rerelease 1.10 with ast_common.h fix in -devel rpms
+July 3, 2003
+	- declare this version 1.10
+	- general
+	    - "mkdir obj;cd obj;../configure;make"   now works (bug #293)
+	    - "make prefix=xxx"   now works (bug #274)
+	    - "--with-wish=xxx"   now works (bug #270)
+	    - remove generated file: ast_common.h from source distributions
+	    - make GIF support configurable
+	    - added .cvsignore thoughout source tree to reduce CVS noise
+	    - FAQ updates
+	    - documentation updates for gpr
+	    - improve portability of dotneato-config, but requires libtool now
+	    - improvements to error processing for library users
+	-gd
+	    - sync with gd-2.0.15
+	    - optimize line drawing code
+	- dot, neato, twopi
+	    - fix bugs 240,270,274,293,298,303
+	    - support "peripheries=0" without crashing
+	    - add support for "dia" output format (-Tdia)
+	    - espf fixes (use of showpage)
+	    - svg fixes (coordinates and viewBox)
+	    - ismap/imap, fixes (quoting of label strings)
+	    - fix to "point" shape
+	    - improve (m|c|re)alloc usage
+	    - improve handling of very-small fonts in bitmap outputs.
+	    - various fixes for multiple -T -o feature
+	    - add support for splines to records and ports (neato)
+	    - various improvements to libpack
+	    - dot_init_graph and neato_init_graph external for library users
+	    - cluster improvements (neato)
+	    - fix support for truecolor
+	    - normalize splines so that they now always go from tail to head
+	    - add some simple help text for any unrecognized option
+		(e.g. -?  -h  --help)
+	- tools
+	    - extend gpr language to allow access to command-line arguments
+	    - add sqrt() function to gpr
+	    - add new tool - gvpack
+	- tcldot
+	    - use .dll extension if on windows
+	    - doted demo
+		- use tcl's file requestor instead of homebrew
+		- add zooming controlled by mousewheel
+		- support additonal export formats
+	    
+January 31, 2003
+	- declare this version 1.9
+		(3-level version numbering has been dropped now
+		that we have nightly snapshot builds with their
+		own extended numbering.)
+	- general
+	    - config.h is no longer installed.  config.h is generated by
+		./configure for the current build only.  It may not be
+		applicable for derivative builds.
+	    - improve ICONV configure tests
+	    - lots of janitor-work to clean up warning messages from -Wall
+	    - use @OBJEXT@ in Makefile.am so that .obj is used under cygwin
+	    - fixes for Solaris builds
+	    - use libpng-config if available
+	    - reduce long build times due to touching ast_common.h too often
+	    - improve dependency tracking.  "make -j8" now works with distcc
+	    - autogen.sh fixes to work on RH7.3, RH8.0, and Solaris.
+	    - eliminate use of suffix rules which confused some makes.
+	    - DOT language allows '+' for concatenation of quoted strings
+	- dot, neato, twopi
+	    - fix bugs 209, 210, 214, 216, 217, 222, 224, 225, 229,
+			230, 233, 236, 237
+	    - update gd into alignment with gd-2.0.9
+	    - change to make libagraph output compatible with libgraph input
+	    - add shapes: septagon, pentagon, a_ediamond, rect, rectangle
+	    - introduce "ND_...", "ED_...", "GD_...", node/edge/graph-data
+		accessor macros in partial preparation for use of
+		libagraph in dot.
+	    - add libdotneato.so, dotneato.h, dotneato-config
+		to aid use of dot libraries by user apps based
+	        on installed graphviz-devel rpm and without access
+		to graphviz sources.
+	    - new xdot output format providing detailed drawing instructions
+	    - new -y command line flag, inverts y coordinates
+	    - support multple -T when -o given, as in:
+			cat xxx.dot | dot -Tpng -Tcmap -o xxx
+		which produces xxx.png and xxx.cmap from a single
+		layout computation.   Intended for use in CGI programs.
+	- agraph
+	    - correct callback ordering for deletions
+	- tools
+	    - add gxl2dot and dot2gxl for GXL language conversions
+	    - gvui now provides *map output
+	- tcldot, tcldgr, tcldgl
+	    - improve tcl8.4 support
+	    - extend search path for tcl.h to include /usr/local/include/tcl8.4/
+		in support of BSD install conventions.
+	- dynagraph
+	    - many fixes
+	    - change to not build dynagraph by default (use --with-dynagraph)
+	- docs
+	    - dotguide updates
+September 27, 2002
+		- declare this version 1.8.10
+	- general
+	    - various configure.in fixes and simplifications
+	    - change configure to now build dynagraph by default
+	    	"--without-dynagraph" is supported
+	    - fix graphviz.spec.in to partition packages properly
+	    	graphviz no longer depends on graphviz-tcl.
+	    -  Makefile.old cleanups
+	    - configure.old now set version number automatically from
+	      configure.in
+	- dot, neato, twopi
+	    - Initial support for image node shapes + URL fetch.
+	    - Made number of dimensions a runtime variable in neato.
+	    - Bug fix in vrmlgen for degenerate splines.
+	    - Bug fix - ordering=in should now work
+	    - Bug fix - layers no numbered from 0 to match PS requirements
+	    - Bug fix - don't draw arrows on invisible edges
+	    - Bug fix - when pack=true and ratio is set
+	    - Bug fix - agraph/scan.l to work with latest flex beta
+
+August 2, 2002
+		- declare this version 1.8.9
+	- general
+	    - split rpm into:
+	        graphviz, graphviz-tcl, graphviz-graphs, graphviz-devel
+	    - gcc3 warning cleanup
+	    - Install lincdt, libgraph, libagraph, libgd, libpathplan, libexp,
+	    	and libpack so that they can be used by other programs. 
+		Headers and man3 in graphviz-devel
+	- dynagraph, graphsearch
+ 	    - New tools based on libagraph and written in C++
+	- dot, neato, twopi
+	    - Add node and edge tooltips for use with -Tcmap
+	    	\N,\E,\H,\T substitutions also work in tooltips.
+	    - Add alt="label_string" to -Tcmap
+	    - Add edge-label and port mappings to -Tps and -Tps2 so
+	        that edges can be hyperlinked in PDF documents.
+	    - Add support for \E (edge name), \H (head-node name),
+	        \T (tail-node name) substitutions in edge labels and edge URLs
+	    - Add support for stylesheet="file.css" for use in -Tsvg
+	    - Fix -Tpic to work with recent gpic (Bruce Lilly)
+	    - Fix alignment of imagemaps to images.
+	    - Fix "transparent" color support in -Tsvg
+	    - Fix support for graph [URL="default.html"] in -Tsvg and -Tcmap.
+	    - Fix '&' escaping in URLs in -Tsvg
+	    - Fix infinite loop in dot layout algorithm
+	    - Fix text rotations again (hopefully freetype is stable now.)
+	    - Cluster layout improvements
+	    - Clean up warning messages from pathplan
+	    - Consolidation of mapping code from imapgen.c and ismapgen.c into mapgen.c
+	- gpr
+	    - Added additional mode to extract components based sharing an
+	        edge or a cluster
+	    - Fix test for getopt
+	- tcl-based tools
+	    - Disable tcl-based tool building if tcl/tk not available
+	        with stubs support.
+	- documentation updates: FAQ, dotguide, dot.1
+July 5, 2002
+	    - declare 1.8.7 a "brown bag" release
+		 and declare this version 1.8.8
+	- remove wrong assert in gdgen.c
+	- fix graph centering in bitmap outputs
+	- provide enough margins
+	- fix line widths after scaling 
+		(test with directed/proc3d.dot)
+	- fix text rotations (requires libfreetype.so.6.3.1) 
+		(test with directed/NaN.dot)
+July 5, 2002
+	    - declare this version 1.8.7
+	- Fix missing "]" in ihi demo.
+July 2, 2002
+	- Add URL mappings for clusters: svg,svgz,ps,ismap,imap,cmap.
+	- Fix to avoid white edges in bitmap outputs when bgcolor is set.
+	- Improve sizing and position of strings in bitmap outputs
+	  when using builtin fonts (when font file not found).
+	- Fix \N substitution in edge URLs in imap and cmap outputs.
+	- Add -Tcmap for client-side imagemaps.
+	- Generate warnings instead of access violation for EPSF file problems.
+	- Various spline fixes in neato.
+	- Fixes to pack.c
+	- Add feature to ccomps to allow extraction of individual component
+	  by number or node.
+	- Cdt make to use iffe provided in the tools directory.
+	- Various Makefile.old fixes.
+	- Use HAVE_LIBZ to remove GD2 format if libz not available.
+	  Now bare-bones programs can be built without any add-on libraries.
+	- Modified dot grammar to allow simple name attributes in attribute
+	  lists.  Thus, [splines] is equivalent to [splines=true]. Adopted
+	  the same convention for command line attributes -G, -E and -N.
+	  In addition, such command line attributes now override any
+	  competing initial attribute statements.
+	- HP-UX 11.11 build fixes for struct dioattr.
+	- Fix for bug #158 "Nodes disappear with ports"
+	- Various Windows-specific #ifdefs
+	- Fix edge coordinates in -Tplain.
+	
+May 24, 2002
+	    - declare this version 1.8.6
+May 19, 2002
+	- Fixed segfault from use of bgcolor in clusters.
+May 15, 2002
+	- Changed install location of architecture-independent demo
+	  scripts and graphs to <prefix>/share/graphviz/ to conform to FHS.
+	- Avoid multiple linking of libfreetype (and others) which caused
+	  problems on SunOS-2.8.
+May 6, 2002
+	- Factored out some duplicated arrow code from dotgen/splines.c
+	  and neatorgen/splines.c into common/arrows.c.
+	- Added new arrow types:  halfopen, box, obox, crow.
+	- Touched up the arrow designs so that they look better at default size.
+	- Modified/extended graphs/directed/newarrows.dot to show new arrows.
+May 3, 2002
+        - Added some UML arrow types from Diomidis Spinellis <dds@aueb.gr>
+	  empty, invempty, open, diamond, odiamond.
+May 2, 2002
+	- Added new pack option to neato. This causes each connected component
+	  to be laid out separately, and then the resulting graphs are packed
+	  together in a single layout.
+	- Amended neato to accept new tee arrowhead.
+April 19, 2002
+	- Coords of rectangles changed to left/top right/bottom in -Timap.
+	- Generate COPYING from LICENSE.html during ./authogen.sh,
+	  remove COPYING from CVS.
+April 16, 2002
+	- Minor license file patches.
+	- Corrected one of those reversed flat edge bugs again.
+
+April 11, 2002
+	     - declared this version 1.8.5
+	- various portability fixes 
+	- various SVG fixes and optimizations
+April 5, 2002:
+	     - declared this version 1.8.4
+	- SVG renderer:
+		- make graph|node|edge ids unique, particularly for multiedges
+		- put graph|node|edge names in <title>...</title>
+		- use some property inheritance to reduce size of output
+		- fix compile errors when no zlib
+		- updated DTD reference
+	- GD renderer:
+		- Minimal Type1 font support:
+			- look in /usr/lib/X11/fonts/Type1/
+			- look for .pfa or .pfb font files based on fontname
+		- run gdgen.c through dos2unix - problems with gcc on SuSE
+	- fix Mac-OSX build problems:
+		- improve strto[u]ll configure tests
+		- add -fno-common for extern problem
+		- function renamed to avoid conflicts (vis -> visibility)
+		- add configure tests for search.h, malloc.h, getopt.h, errno.h
+		- improve configure tests for FILE struct features
+		- add configure tests for lrand48
+	- add new demo graphs:
+		- graphs/undirected/Heawood.dot
+		- graphs/undirected/Petersen.dot
+	- neato:
+		- fix for -x implementation in neato (Bug 77)
+		- fix spline problem (Bug 87)
+		- fix some divide-by-zero problems
+	- twopi:
+		- fix Bug 117
+		- update man pages for unconnected graphs capability
+	- added arrowhead or arrowtail = tee
+March 22, 2002:
+	- add dotneato/pack code to twopi
+	- add contrib/prune to gnu build and install
+March 20, 2002:
+	    - declared this version 1.8.3
+	- fixed parse error for lines starting with '#' in .dot files
+	- fixed a recently introduced bug that caused failure of:
+		digraph G {  {rank = same;  A -> B; B -> A } }
+	- updated DOCTYPE header in SVG outputs
+	- added dotneato/common/xbuf.[ch] for dynamic string handling
+	  to avoid sprintf buffer overruns.
+	- twopigen - handle special case of graphs with < 3 nodes.
+	- neato - handle point shapes
+	- added fontcolor support to svg
+March 14, 2002:
+	- Fixed bug 109
+	- Removed duplicate definitions for str[n]casecmp
+	- Added missing declarations needed for Windows
+	- Cleaned up warning messages from set but unused variables
+	- Removed use of DOS preprocessor variable; uniformly replaced by MSWIN32
+March 8, 2002:
+	- declared this version 1.8.2
+    - Mainly to fix a missed static buffer problem which trips up the
+      Windows community
+March 1, 2002:
+	- declared this version 1.8.1
+    - Bug fixes reported from user testing of 1.8.0, especially problem
+      with SVG output
+February 25, 2002:
+	- updated dotguide.tex and moved to LaTeX article format
+	- added webdot.cgi perl script, enhanced to accept the same
+	    argument format as John's tcl version (so it can also
+	    serve neato and twopi graph layouts).
+
+February 7, 2002: graphviz-1.8.0 pre
+	- declared this version 1.8.0
+
+February 5, 2002: graphviz-1.7.17-0
+    - various 64bit portability fixes
+    - various bug fixes
+January 2, 2002: graphviz-1.7.16-0
+    - dotneato 
+	- fix bugs in -Tps output due to pen/fill color changes
+	- various -Tfig.c fixes
+	- various portability fixes
+December 28, 2001: graphviz-1.7.15-0
+    -dotneato
+        - introduce damping factor into neato's solver
+        - clean up pencolor v fillcolor code so that filled polygons are drawn
+		just once if the renderer is capable (e.g. svg, fig)
+        - complete -Tfig support (xfig format)
+December 11, 2001: graphviz-1.7.14-0
+    -dotneato
+	- add -Tsvgz (compressed SVG) support
+December 11, 2001: graphviz-1.7.13-0
+    - dotneato
+        - fontwidth fixes
+	- remove some potential buffer overruns
+	- escape '&' in SVG, unless it is already part of a UTF entity sequence
+	- recognize Times_New_Roman and Courier_New as default font names.
+	- improve -liconv support in configure
+	- clean up some compiler warnings
+    - dynagraph
+	- change "round" to "ROUND" to avoid conflict with system headers on linux
+December 03, 2001: graphviz-1.7.12-0
+    - dotneato
+        - add -Tplain-ext which includes port identifiers edge records
+	- escape '>' with '&gt;' in edge ids and edge URLs in -Tsvg.
+	- spline fixes
+	- mincross fixes
+	- improved text alignment in nodes - particularly in bitmap outputs.
+	- fixed text scaling problems for 8-bit characters (e.g. umlauts)
+	- add graph lexer and postscript support for extended characters
+    - lefty
+        - fix for X11 displays
+    - pathplan
+        - added workaround for gcc-0.96 bug when "-O2 -mcpu=686 -ffast-math"
+October 22, 2001: graphviz-1.7.11-0
+    - dotneato
+	- svg - fix landscape "y" direction
+	      - fix text rotation (works in batik, not yet in sodipodi or amaya)
+	      - fix linewidth
+	      - fix xmnls:xlink reference
+    - doc
+	- Dot.ref - updated 
+    - graphs/directed
+        - newarrows.dot expanded 
+	- honda-tokoro.dot added
+October 21, 2001: graphviz-1.7.10-0
+    - lefty & dotty
+	- realign code with EK's master tree.
+	  includes fix for dirty trails when dragging nodes in dotty.
+    - dotneato
+	- svg - kludge escape of "<" & ">" characters in labels.
+    - general
+	- generate doxygen documentation on http://www.graphviz.org/
+August 20, 2001: graphviz-1.7.9-0
+    - general
+	- first release from relocated cvs server
+    - dotneato
+        - fix for abort from spline code
+        - fix for crash from gd tiling code
+August 15, 2001: graphviz-1.7.8-0
+    - general
+        - Update gd to gd-2.0.1 with extensions
+    - dotneato
+        - more spline fixes
+        - add suport for "#rgb" color specification
+        - add twopi layout engine (circular layouts)
+July 13, 2001: graphviz-1.7.7-0
+    - Synchronization release prior to relocating CVS server.
+    - general
+    	- some Makefile fixes for OpenBSD
+	- some FAQ updates
+    - dotneato
+        - self-edge fixes
+        - spline fixes
+    - libgraph
+        - parser fixes
+July 1, 2001: graphviz-1.7.6-3
+    - general
+	- portability fixes (including 14 charater file names !)
+	- memory leak fixes
+	- "make test" targets in graphs/directed, graphs/undirected
+    - configure
+	- add support for building without X11, Tk, Tcl
+	- add hooks for dmalloc and ElectricFence debugging
+    - dotneato
+	- spline fixes
+	- cluster fixes
+	- fix label centering
+	- fix support for graph margins in bitmapped outputs
+	- correction to PostScript preamble
+	- SVG generator improvement - now works with Amaya and SodiPodi
+    - tcldot 
+	- now uses Tcl Channels properly for input
+	- fixes for linewidth support
+	- command extensions 
+	    - listattributes now accepts list
+	    - queryattributes now accepts list
+	    - setattributes now accepts list
+	    - queryattributevalues - new command
+		- generates list of pairs compatible with setattributes
+    - dotty
+	- passthrough keyboard events
+    - doted
+	- fix resizing problems
+	- add PNG and SVG output formats
+ 
+April 27, 2001: graphviz-1.7.6
+
+    NEW FEATURES
+
+    Added a collection of graph processing tools:
+
+    acyclic : a filter that takes a directed graph as input
+    and outputs a copy of the graph with sufficient edges
+    reversed to make the graph acyclic.
+
+    ccomps : decomposes graphs into their connected components,
+    printing the components to standard output.
+
+    colorize : is a filter that sets node colors from initial
+    seed values. Colors flow along edges from tail to head.
+
+    gc : a graph analogue to wc in that it prints to standard
+    output the number of nodes, edges, connected components or
+    clusters contained in the input files.
+
+    gpr : a graph stream editor inspired by awk. It copies
+    input graphs to its output, possibly transforming their
+    structure and attributes, creating new graphs, or
+    printing arbitrary information.
+
+    nop : reads a stream of graphs and prints each in
+    pretty-printed (canonical) format on stdout.
+
+    sccmap : decomposes digraphs into strongly connected components
+    and an auxiliary map of the relationship between components.
+
+    tred : computes the transitive reduction of directed graphs,
+    and prints the resulting graphs to standard output. This
+    removes edges implied by transitivity.
+
+    unflatten : is a preprocessor to dot that is used to improve
+    the aspect ratio of graphs having many leaves or disconnected
+    nodes. The usual layout for such a graph is generally very
+    wide or tall. unflatten inserts invisible edges or adjusts
+    the minlen on edges to improve layout compaction.
+
+
+    FIXES
+
+    Add FAQ
+
+    Change PNG default background color from transparent to white
+    because of the difficulty some viewers have with transparency.
+
+    Add support for [color=transparent]
+
+    Fix broken support for specific capitalized fontnames
+    (Times Helvetica Arial Courier) 
+
+    Fix broken support for DOTFONTPATH
+
+    Some bitmap font scaling fixes - we're still not happy with
+    bitmap font scaling as some labels still exceed the area
+    allocated by the layout engines.
+
+    Some -Timap fixes for mouse sensitive graphs on web pages
+
+    Some cluster layout fixes
+
+    Fix for [rankdir=LR] problems when using neato layout engine
+
+    Some neato layout fixes
+
+    Updates to unix.dot
+
+    Various OS and distro fixes
+
+
+December 23, 2000: graphviz-1.7.5
+
+   - update to gd-1.8.4 and freetype2 
+   - add support for font paths
+
+
+December 15, 2000: graphviz-1.7.4
+    -various cluster fixes
+    -separate support for node fillcolor from pencolor (see dot.1)
+    -add support for dotted and dashed lines to bitmap renderers (PNG, GIF etc)
+    -add support for varying linewidth to bitmap renderers
+    -remove libtcldot dependence on lingdtclft (already statically included)
+    -various fixes to build processes, GNU and non-GNU
+
+
+graphviz-1.7.3 .....
+
+May 3, 2000: removed webdot into its own CVS module and rpm package
+
+April 16, 2000: Use check for "gdImagePng" to make sure that we have
+   recent version of libgd.  <ellson@graphviz.org>
+
+April 14, 2000: Add Tcldgl and dge demo <ellson@graphviz.org>
+
+April 14, 2000: Add dynagraph libraries <north@research.att.com>
+
+April 14, 2000: Flatten directory hierachy of sources <ellson@graphviz.org>
+
+April 14, 2000: Fix X11 library detection for lefty:
+	src/configure.in, src/lefty/Makefile.in
+   <ellson@graphviz.org>
+
+April 14, 2000: Fix pic support:
+	src/dotneato/picgen.c,
+	src/dotneato/emit.c,
+	webdot/tcl/webdot.tcl
+   <Bruce Lilly>
+
+April 7, 2000: Upgrade webdot installation process:
+	webdot/Makefile, webdot/README
+    <ellson@graphviz.org>
+
+March 13, 2000: Support for virtual hosts in webdot/webdot.tcl, add
+   "puts $skt "Host: $server"     Michael Tillberg <mt@proteome.com>
+
+March 13, 2000: Fix to src/graph/parser.y line 149
+   "if ((e->head == t->node) && !(Agraph_type & AGDIGRAPH)) {"
+   Stephen North  <north@research.att.com>
+
+March 13, 2000: Use AM_PROG_LIBTOOL instead of AC_PROG_LIBTOOL
+   in configure.in.  John Ellson <ellson@graphviz.org>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/Dot.ref	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,870 @@
+                   Quick Reference Guide for GraphViz
+                           20 February 2002
+
+
+Command-line Invocation
+
+  ------------------------------------------------------------------------
+All GraphViz programs have a similar invocation:
+ cmd [ flags ] [ input files ]
+If no input files are supplied, the program reads from stdin.
+
+Flags
+
+-Gname=value
+     Set a graph attribute.
+-Nname=value
+     Set a default node attribute.
+-Ename=value
+     Set a default edge attribute.
+-Tformat
+     Set output language to one of the supported formats. By default,
+     attributed dot is produced.
+-V
+     Emit version information and exit.
+-llibfile
+     User-supplied, device-dependent library files. Multiple libraries may
+     be given. These names are passed to the code generator at the beginning
+     of output.
+-n[num]
+     Sets no-op flag in neato. If set, neato assumes nodes have already been
+     positioned and have a pos attribute giving this position. It then just
+     computes the edge layouts and emits the graph in the appropriate
+     format. If num is supplied and > 1, neato checks for previously
+     positioned edges, with control points provided in the pos attribute. It
+     uses these if given; otherwise, it computes the edge layout.
+-ooutfile
+     Write output to file outfile. By default, output goes to stdout.
+-s[scale]
+     Set input scale to scale. If this value is omitted, 72.0 is used. This
+     number is used to convert the point coordinate units used in the pos
+     attribute into inches. For example, dot -Tdot produces pos values in
+     points, with 72 per inch. Thus, to use this output as input to neato
+     -n, one needs -s (equivalently, -s72).
+-v
+     Verbose mode
+-x
+     In neato, on input, prune isolated nodes and peninsulas. This removes
+     uninteresting graph structure and produces a less cluttered drawing.
+
+Note that the file contents override the -G, -N and -E flags. In addition,
+these flags cause the related attributes to be permanently attached to the
+graph. Thus, if attributed dot is used for output, the graph will have these
+attributes.
+
+  ------------------------------------------------------------------------
+
+The DOT Language
+
+  ------------------------------------------------------------------------
+digraph G {foo -> bar; ... }  or graph G { foo -- bar;  ...}
+
+To connect all pairs:
+    {foo bar}->{baz bart}
+
+To make a chain of links:      
+     foo->bar->baz
+
+Commas inside [...] and semicolons inside {...} are optional.
+
+Quotes are needed on attribute values to protect spaces, commas, periods, etc.
+
+// C++ like comment: to end of line
+/* C-like comment: between delimiters */
+
+For a complete language description, see
+
+  http://www.research.att.com/~erg/graphviz/info/lang.html
+
+  ------------------------------------------------------------------------
+
+Attributes
+
+  ------------------------------------------------------------------------
+
+       Name      Used By     Type         Default       Minimum    Notes
+ Damping         G       double      0.99              0.0       neato only
+ Epsilon         G       double      (.0001 * # nodes)           neato only
+ URL             ENGC    string
+ arrowhead       E       arrowType   normal
+ arrowsize       E       double      1.0               0.0
+ arrowtail       E       arrowType   normal
+ bb              G       rect                                    write-only
+ bgcolor         G       color
+ bottomlabel     N       string      ""
+ center          G       bool        false
+ clusterrank     G       clusterMode local                       dot only
+ color           ENC     color       black
+ comment         ENG     string      ""
+ compound        G       bool        false                       dot only
+ concentrate     G       bool        false                       dot only
+ constraint      E       bool        true                        dot only
+ decorate        E       bool        false
+
+ dir             E       dirType     forward(directed)
+                                     none(undirected)
+ distortion      N       double      0.0               -100.0
+
+ fillcolor       NC      color       lightgrey(nodes)
+                                     black(clusters)
+ fixedsize       N       bool        false
+ fontcolor       ENGC    color       black
+ fontname        ENGC    string      "Times-Roman"
+ fontpath        G       string      ""
+ fontsize        ENGC    double      14.0              1.0
+ group           N       string      ""                          dot only
+ headURL         E       string      ""
+ headlabel       E       string      ""
+ headport        E       portPos     center
+ height          N       double      0.5               0.02
+ K               G       double      1.0               0.0       sfdp only
+
+ label           ENGC    string      ""
+                                     "\N" (nodes)
+ labelangle      E       double      -25.0             -180.0
+ labeldistance   E       double      1.0               0.0
+ labelfloat      E       bool        false
+ labelfontcolor  E       color       black
+ labelfontname   E       string      "Times-Roman"
+ labelfontsize   E       double      11.0              1.0
+ labeljust       C       string      ""                          dot only
+
+ labelloc        GC      string      "t"(clusters)               dot only
+                                     "b"(root graphs)
+ layer           EN      layerRange  ""
+ layers          G       layerList   ""
+ len             E       double      1.0                         neato only
+ levels          G       int         MAXINT            0         sfdp only
+ lhead           E       string      ""                          dot only
+ lp              EGC     point                                   write-only
+ ltail           E       string      ""                          dot only
+
+ margin          G       double
+                         pointf
+ maxiter         G       int         MAXINT                      neato only
+ mclimit         G       double      1.0                         dot only
+ minlen          E       int         1                 0         dot only
+ model           G       string      ""                          neato only
+ nodesep         G       double      0.25              0.02      dot only
+ normalize       G       bool        false                       neato only
+ nslimit
+ nslimit1        G       double                                  dot only
+ ordering        G       string      ""                          dot only
+ orientation     N       double      0.0               360.0
+ orientation     G       string      ""
+
+ overlap         G       string      ""                          neato/sfdp only
+                         bool
+ page            G       pointf
+ pagedir         G       pagedir     BL
+ peripheries     N       int                           0
+ pin             N       bool                                    neato only
+
+ pos             EN      point
+                         splineType
+ quadtree        G       string      ""                          sfdp only
+ quantum         G       double      0.0               0.0
+ rank            S       rankType                                dot only
+ rankdir         G       rankdir     TB                          dot only
+ ranksep         G       double      0.5               0.02
+ ratio           G       double
+ rects           N       rect                                    write-only
+ regular         N       bool        false
+ remincross      G       bool        false                       dot only
+ repulsiveforce  G       double      1                 0.0       sfdp only
+ rotate          G       int         0
+ samehead        E       string      ""                          dot only
+ sametail        E       string      ""                          dot only
+ samplepoints    G       int         8
+ searchsize      G       int         30                          dot only
+ sep             G       double      0.01                        neato only
+ shape           N       shape       ellipse
+ shapefile       N       string      ""
+ showboxes       ENG     int         0                 0         dot only
+ sides           N       int         4                 0
+ size            G       pointf
+ skew            N       double      0.0               -100.0
+ smoothing       G       string      ""                          sfdp only
+ splines         G       bool        false                       neato only
+
+ start           G       string      ""                          neato only
+                         int
+ style           ENC     style
+ styleheet       G       style
+ tailURL         E       string      ""
+ taillabel       E       string      ""
+ tailport        E       portPos     center
+ toplabel        N       string      ""
+ vertices        N       pointfList                              write-only
+ voro_margin     G       double      0.05              0.0       neato only
+ w               E       double      1.0                         neato only
+
+ weight          E       double      1.0               0(dot)
+                                                       1(neato)
+ width           N       double      0.75              0.01
+
+ z               N       double      0.0               -MAXFLOAT
+                                                       -1000
+           ------------------------------------------------------
+For the bool type, TRUE values are represented by "true" (case-insensitive)
+and any non-zero integer, and FALSE values by "false" (case-insensitive) and
+zero.
+
+In the Used By field, the characters E, N, G and C represent edges, nodes,
+the root graph and cluster subgraphs, respectively. This field indicates
+which graph component uses the attribute.
+  ------------------------------------------------------------------------
+
+Attribute Descriptions
+
+Damping
+     Factor damping force motions. On each iteration, a nodes movement is
+     limited to this factor of its potential motion. By being less than 1.0,
+     the system tends to ``cool'', thereby preventing cycling.
+Epsilon
+     Terminating condition. If the length squared of all energy gradients
+     are < Epsilon, the algorithm stops.
+URL
+     Incorporated into device-dependent output. At present, used for ps2,
+     i*map and svg. For ps2, URLs can be attached to nodes and the root
+     graph. When distilled to PDF, such nodes are active links and the graph
+     URL can be used as a base URL. For i*map, URLs can be attached to
+     nodes, edges and the root graph. If the node or edge URL contains "\N",
+     this is replaced by the object's name. For svg, URLs can be attached to
+     nodes, edges and clusters, with "\N" replacement done for all three.
+arrowhead
+     Style of arrowhead on head of edge.
+arrowsize
+     Multiplicative scale factor for arrowheads.
+arrowtail
+     Style of arrowhead on tail of edge.
+bb
+     Bounding box of drawing in integer points.
+bgcolor
+     Color used as background for canvas, plus initial fill color.
+bottomlabel
+     Additional label near bottom of nodes of shape M*.
+center
+     If true, the drawing is centered in the output canvas.
+clusterrank
+     Mode used for handling clusters. If clusterrank is "local", a subgraph
+     whose name begins with "cluster" is given special treatment. The
+     subgraph is laid out separately, and then integrated as a unit into its
+     parent graph, with a bounding rectangle drawn about it. If the cluster
+     has a label parameter, this label is displayed within the rectangle.
+     Note also that there can be clusters within clusters. At present, the
+     modes "global" and "none" appear to be identical, both turning off the
+     special cluster processing.
+color
+     Basic drawing color for graphics.
+comment
+     Comments are inserted into output. Device-dependent
+compound
+     If true, allow edges between clusters. (See lhead and ltail below.)
+concentrate
+     If true, use edge concentrators.
+constraint
+     If false, the edge is not used in ranking the nodes. For example, in
+     the graph
+
+       digraph G {
+         a -> c;
+         a -> b;
+         b -> c [constraint=false];
+       }
+
+
+     the edge b -> c does not add a constraint during rank assignment, so
+     the only constraints are that a be above b and c.
+             
+decorate
+     If true, attach edge label to edge by a 2-segment polyline, underlining
+     the label, then going to the closest point of spline.
+dir
+     Set edge type for drawing arrowheads.
+distortion
+     Distortion factor for shape=polygon. Positive values cause top part to
+     be larger than bottom; negative values do the opposite.
+fillcolor
+     If fillcolor is not defined, color is used. If this is not defined, the
+     default is used, except for shape=point or when the output format is
+     MIF, which use black by default.
+fixedsize
+     If true, the node size is kept fixed and not expanded to contain the
+     text label.
+fontcolor
+     Color used for text.
+fontname
+     Font used for text.
+fontpath
+     Directory list used by libgd to search for bitmap fonts. If fontpath is
+     not set, the environment variable DOTFONTPATH is checked. If that is
+     not set, GDFONTPATH is checked. If not set, libgd uses its compiled-in
+     font path.
+fontsize
+     Font size, in points, used for text.
+group
+     If the end points of an edge belong to the same group, i.e., have the
+     same group attribute, parameters are set to avoid crossings and keep
+     the edges straight.
+headURL
+     For the output format imap, or cmap,  if headURL is defined, it is
+     output as part of the head label of the edge. If headURL contains
+     "\N", this will be replaced by the head label text.
+headlabel
+     Text label to be placed near head of edge.
+headport
+     Indicates where on the head node to attach the head of the edge. In the
+     default case, the edge is aimed towards the center of the node, and
+     then clipped at the node boundary.
+height
+     Height of node, in inches.
+K    constant used in the Fruchterman-Reingold force directed model.
+label
+     Text label attached to objects. The escape sequences "\n", "\l" and
+     "\r" divide the label into lines, centered, left-justified and
+     right-justified, respectively. The escape sequence "\N" represents a
+     node's name. If a node's shape is record, then the label can have a
+     special format which describes the record layout.
+labelangle
+     Angle, in degrees, that the headlabel(taillabel) is rotated from the
+     angle the edge makes incident with the head(tail) node, respectively.
+labeldistance
+     Multiplicative scaling factor adjusting the distance that the
+     headlabel(taillabel) is the from head(tail) node.
+labelfloat
+     If true, allows edge labels to be less constrained in position. In
+     particular, it may appear on top of other edges.
+labelfontcolor
+     Color used for headlabel and taillabel.
+labelfontname
+     Font used for headlabel and taillabel.
+labelfontsize
+     Font size, in points, used for headlabel and taillabel.
+labeljust
+     Justification for cluster labels. If "r", the label is right-justified
+     within bounding rectangle; otherwise, left-justified.
+labelloc
+     Top/bottom placement of graph and cluster labels. If the attribute is
+     "t", place label at the top; if the attribute is "b", place label at
+     the bottom. By default, root graph labels go on the bottom and cluster
+     labels go on the top.
+layer
+     Specifies layers in which the node or edge is present.
+layers
+     Specifies a linearly ordered list of layer names attached to the graph
+     The graph is then output in separate layers. Only those components
+     belonging to the current output layer appear. For more information, see
+     the page How to use drawing layers (overlays).
+len
+     Preferred edge length, in inches.
+levels
+     Number of levels allowed in the multilevel scheme. Default is MAXINT.
+lhead
+     Logical head of an edge. When compound is true, if lhead is defined and
+     is the name of a cluster containing the real head, the edge is clipped
+     to the boundary of the cluster.
+lp
+     Label position, in points.
+ltail
+     Logical tail of an edge. When compound is true, if ltail is defined and
+     is the name of a cluster containing the real tail, the edge is clipped
+     to the boundary of the cluster.
+margin
+     Set x and y margins of canvas, in inches. In first case, both margins
+     are set equal to the given value.
+maxiter
+     Sets the number of iterations used.
+mclimit
+     Multiplicative scale factor used to alter the MinQuit (default = 8) and
+     MaxIter (default = 24) parameters used during crossing minimization.
+     These correspond to the number of tries without improvement before
+     quitting and the maximum number of iterations in each pass.
+minlen
+     Minimum edge length (rank difference between head and tail).
+model
+     If "circuit", use circuit resistance model to compute dissimilarity
+     values; otherwise, use shortest path model.
+nodesep
+     Minimum space between two adjacent nodes in the same rank, in inches.
+normalize
+     If set, normalize coordinates of final layout so that the first point
+     is at the origin, and then rotate the layout so that the first edge is
+     horizontal.
+nslimit ,
+nslimit1
+     Used to set number of iterations in network simplex applications.
+     nslimit is used in computing node x coordinates, nslimit1 for ranking
+     nodes. If defined, # iterations = nslimit(1) * # nodes; otherwise, #
+     iterations = MAXINT.
+ordering
+     If "out" for a graph G, and n is a node in G, then edges n->* appear
+     left-to-right in the same order in which they are defined.
+orientation
+     Angle, in degrees, used to rotate node shapes.
+orientation
+     If "[lL]*", set graph orientation to landscape Used only if rotate is
+     not defined.
+overlap
+     If "scale", remove node overlaps by scaling; if converts to false,
+     remove node overlaps by the Voronoi technique; otherwise, leave
+     overlaps.
+page
+     Width and height of output pages, in inches. If this is set and is
+     smaller than the size of the layout, a rectangular array of pages of
+     the specified page size is overlaid on the layout, with origins aligned
+     in the lower-left corner, thereby partitioning the layout into pages.
+     The pages are then produced one at a time, in pagedir order.
+pagedir
+     If the page attribute is set and applicable, this attribute specifies
+     the order in which the pages are emitted. This is limited to one of the
+     8 row or column major orders.
+peripheries
+     Set number of peripheries used in polygonal shapes.
+pin
+     If true and the node has a pos attribute on input, neato prevents the
+     node from moving from the input position. This property can also be
+     specified in the pos attribute itself (cf. the point type).
+pos
+     Position of node, or spline control points, in points. In neato, pos
+     can be used to set initial position of a node. Concerning this, see the
+     -s command line flag.
+quantum
+     If quantum > 0.0, node label dimensions will be rounded to integral
+     multiples of the quantum.
+quadtree
+     Quadtree scheme to use. Values are "normal" (default), "fast" or "none". 
+     "fast" gives about 2-4 overall speedup compared with "normal", though 
+     layout quality can suffer a little. 
+rank
+     Rank constraints on the nodes in a subgraph. If rank="same", all nodes
+     are placed on the same rank. If rank="min", all nodes are placed on the
+     minimum rank. If rank="source", all nodes are placed on the minimum
+     rank, and the only nodes on the minimum rank belong to some subgraph
+     whose rank attribute is "source" or "min". Analogous criteria hold for
+     rank="max" and rank="sink". (Note: the minimum rank is topmost or
+     leftmost, and the maximum rank is bottommost or rightmost.)
+rankdir
+     Sets direction of graph layout. If rankdir="LR", the graph is laid out
+     from left to right, i.e., directed edges tend to go from left to right.
+     By default, graphs are laid out from top to bottom.
+ranksep
+     In dot, this the gives desired rank separation, in inches. This is the
+     minimum vertical distance between the bottom of the nodes in one rank
+     and the tops of nodes in the next. If the value contains "equally", the
+     centers of all ranks are spaced equally apart. Note that both settings
+     are possible, e.g., ranksep = "1.2 equally". In twopi, specifies radial
+     separation of ranks.
+ratio
+     Sets the aspect ratio (drawing height/drawing width) for the drawing.
+     Note that this is adjusted before the size attribute constraints are
+     enforced.
+
+     If ratio is numeric, it is taken as the desired aspect ratio. Then, if
+     the actual aspect ratio is less than the desired ratio, the drawing
+     height is scaled up to achieve the desired ratio; if the actual ratio
+     is greater than that desired ratio, the drawing width is scaled up.
+
+     If ratio = "fill" and the size attribute is set, the drawing is scaled
+     to achieve the aspect ratio implied by size. As size is set, when the
+     drawing is later scaled to fit that rectangle, the resulting picture
+     will fill the rectangle.
+
+     If ratio = "compress" and the size attribute is set, dot attempts to
+     compress the initial layout to fit in the given size. This achieves a
+     tighter packing of nodes but reduces the balance and symmetry.
+
+     If ratio = "auto", the page attribute is set and the graph cannot be
+     drawn on a single page, then size is set to an ``ideal'' value. In
+     particular, the size in a given dimension will be the smallest integral
+     multiple of the page size in that dimension which is at least half the
+     current size. The two dimensions are then scaled independently to the
+     new size.
+rects
+     Rectangles for fields of records, in points.
+regular
+     If true, force polygon to be regular.
+repulsiveforce
+     The power of repulsive force used in an extended Fruchterman-Reingold 
+     force directed model. Default is 1. Values larger than 1 tend to reduce 
+     the warping effect at the expensive of less clustering.
+remincross
+     If true and there are multiple clusters, run cross minimization a
+     second time.
+rotate
+     If 90, set drawing orientation to landscape.
+samehead
+     Edges with the same head and the same samehead value are aimed at the
+     same point on the head.
+sametail
+     Edges with the same tail and the same sametail value are aimed at the
+     same point on the tail.
+samplepoints
+     If the input graph defines the vertices attribute, and output is plain*
+     or attributed dot, this give the number of points used to represent
+     circles and ellipses. It plays the same role in neato, when adjusting
+     the layout to avoid overlapping nodes.
+searchsize
+     During network simplex, maximum number of edges with negative cut
+     values to search when looking for one with minimum cut value.
+sep
+     Fraction to increase polygons (multiply coordinates by 1 + sep) for
+     purposes of determining overlap. Guarantees a minimal non-zero distance
+     between nodes.
+shape
+     Set shape of node.
+shapefile
+     For output format is ps* or svg*, if non-empty, taken as a filename
+     containing a device-dependent description of a node's shape.
+showboxes
+     Print guide boxes in PostScript at the beginning of routesplines if 1,
+     or at the end if 2. (Debugging)
+sides
+     Number of sides if shape=polygon.
+size
+     Maximum width and height of drawing, inches. If defined and the drawing
+     is too large, the drawing is uniformly scaled down so that it fits
+     within the given size. Note that there is some interaction between the
+     size and ratio attributes.
+skew
+     Skew factor for shape=polygon. Positive values skew top of polygon to
+     right; negative to left.
+smoothing
+     A post processing step to smooth out uneven distribution of nodes. Possible
+     values are "none" (default), "avg_dist", "graph_dist", "power_dist", "rng", 
+     "spring" and "triangle".
+splines
+     If true, draw edges as splines. This requires non-overlapping nodes
+     (cf. overlap).
+start
+     Parameter used to determine the initial layout of nodes. By default,
+     nodes are randomly placed in a square whose sides have length (#
+     nodes). The same seed is always used for the random number generator,
+     so the initial placement is repeatable. If start converts to an
+     integer, this is used as a seed value for the random number generator.
+     If start is "regular", the nodes are placed regularly about a circle.
+     Finally, if start is defined but is not one of the above cases, the
+     current time is used to pick a seed.
+style
+     Set style for node or edge. For cluster subgraph, if "filled", the
+     cluster box's background is filled.
+stylesheet
+     The URL of a CSS stylesheet to be referenced from the output file.
+     Relevant only for SVG output.
+tailURL
+     When the output format is imap, or cmap, if tailURL is defined, it is
+     output as part of the tail label of the edge. If tailURL
+     contains "\N", this will be replaced by the tail label text.
+taillabel
+     Text label to be placed near tail of edge.
+tailport
+     Indicates where on the tail node to attach the tail of the edge.
+toplabel
+     Additional label near top of nodes of shape M*.
+vertices
+     If the input graph defines this attribute, the node is polynomial, and
+     output is plain* or attributed dot, this attribute provides the
+     coordinates of the vertices of the node's polynomial, in points. If the
+     node is an ellipse or circle, the samplepoints attribute affects the
+     output.
+voro_margin
+     Factor to scale up drawing to allow margin for expansion in Voronoi
+     technique. dim' = (1+2*margin)*dim.
+w
+     Redundant definition of weight in neato, cf. bug 9.
+weight
+     Weight of edge. Usually, the heavier the weight, the shorter (and, in
+     dot, straighter and more vertical) an edge is.
+width
+     Width of node, in inches.
+z
+     Provides z coordinate for the node when output format is VRML.
+
+  ------------------------------------------------------------------------
+
+Attribute Type Descriptions
+
+arrowType
+      "normal"         "inv"             
+
+      "dot"            "invdot"          
+
+      "odot"           "invodot"         
+
+      "none"          
+clusterMode
+     "local","global","none"
+color
+      "#%2x%2x%2x"   RGB
+      "#%2x%2x%2x%2x"RGBA
+      "%lf,%lf,%lf"  HSV 0.0 <= values <= 1.0
+      string         color name
+dirType
+     For an edge T -> H;
+
+      "forward"         "back"         
+
+      "both"            "none"         
+
+     For undirected edges T -- H;, one of the nodes, usually the righthand
+     one, is treated as the head for the purpose of interpreting "forward"
+     and "back".
+layerList
+     list of strings separated by colons, tabs or spaces, defining layer
+     names and implicitly numbered 1,2,...
+layerRange
+     layerId or layerId[:\t ]layerId,
+     where layerId = "all", decimal integer or layer name. (An integer i
+     corresponds to layer i.)
+pagedir
+     "BL", "BR", "TL", "TR", "RB", "RT", "LB", "LT". These specify the 8 row
+     or column major orders for traversing a rectangular array, the first
+     character corresponding to the major order and the second to the minor
+     order. Thus, for "BL", the major order is from bottom to top, and the
+     minor order is from left to right. This means the bottom row is
+     traversed first, from left to right, then the next row up, from left to
+     right, and so on, until the topmost row is traversed.
+point
+     "%d,%d"('!') representing the point (x,y). The optional '!' indicates
+     the node position should not change (input-only).
+pointf
+     "%lf,%lf" representing the point (x,y).
+pointfList
+     list of pointf, separated by spaces.
+portPos
+     "n","ne","e","se","s","sw","w","nw" These correspond to the obvious
+     compass points on the node.
+rankType
+     "same", "min", "source", "max", "sink"
+rankdir
+     "LR". Any other value corresponds to a top-down layout.
+rect
+     "%d,%d,%d,%d" The rect llx,lly,urx,ury gives the coordinates, in
+     points, of the lower-left corner (llx,lly) and the upper-right corner
+     (urx,ury).
+shape
+     A string specifying the shape of a node. There are three main types of
+     shapes : polygon-based, record-based and PostScript-based.
+splineType
+     spline ( ';' spline )*
+      where spline= (endp)? (startp)? point (triple)]*
+       and triple = point point point
+         and endp = "e,%d,%d"
+       and startp = "s,%d,%d"
+     If a spline has points p1 p2 p3 ... pn, (n = 1 (mod 3)), the points
+     correspond to the control points of a B-spline from p1 to pn. If startp
+     is given, it touches one node of the edge, and the arrowhead goes from
+     p1 to startp. If startp is not given, p1 touches a node. Similarly for
+     pn and endp.
+style
+     styleItem ( ',' styleItem )*
+      where styleItem= name or name'('args')'
+            and args = name ( ',' name )*
+            and name = [^)(, ][^)(,]*
+     At present, the recognized style names comprise "dashed", "dotted",
+     "solid", "invis" and "bold" for nodes and edges, and "filled",
+     "diagonals" and "rounded" for nodes only. Additional styles are
+     available in device-dependent form. Style lists are passed to device
+     drivers, which can use this to generate appropriate output.
+
+     Note that, at present, "rounded" cancels "filled", except for circles
+     and ellipses. This holds for the Mrecord shape, which is rounded by
+     definition.
+
+  ------------------------------------------------------------------------
+
+Output Formats
+
+  ------------------------------------------------------------------------
+The output format is specified with the -Tlang flag on the command line,
+                    where lang is one of the following:
+                Command-line
+                 parameter               Format
+                   canon
+                   cmap     Client-side imagemap
+                    dot     DOT
+                    fig     FIG
+                    gd
+                    gd2     GD/GD2 formats
+                    gif     GIF
+                   hpgl     HP-GL/2
+                   imap     Server-side imagemap
+                   ismap    Server-side imagemap (deprecated)
+                    jpg
+                   jpeg     JPEG
+                    mif     FrameMaker MIF format
+                    mp      MetaPost
+                    pcl     PCL
+                    pic     PIC
+                   plain
+                 plain-ext  Simple text format
+                    png     Portable Network Graphics format
+                    ps      PostScript
+                    ps2     PostScript for PDF
+                    svg
+                   svgz     Scalable Vector Graphics
+                   vrml     VRML
+                    vtx     Visual Thought format
+                   wbmp     Wireless BitMap format
+  ------------------------------------------------------------------------
+
+Format Descriptions
+
+canon ,
+dot
+     These two formats produce output in variations of the dot language.
+     Using canon produces a prettyprinted version of the input, with no
+     layout performed.
+
+     dot corresponds to attributed dot, and is the default output format. It
+     reproduces the input, along with layout information for the graph. In
+     particular, a bb attribute is attached to the graph, specifying the
+     bounding box of the drawing. If the graph has a label, its position is
+     specified by the lp attribute.
+
+     Each node gets pos, width and height attributes. If the node is a
+     record, the record rectangles are given in the rects attribute. If the
+     node is a polygon and the vertices attribute is defined, this attribute
+     contains the vertices of the node.
+
+     Every edge is assigned a pos attribute, and if the edge has a label,
+     the label position is given in lp.
+fig
+     Outputs graphs in the FIG graphics language.
+gd ,
+gd2
+     Output images in the GD and GD2 format. These are the internal formats
+     used by the gd library. The latter is compressed.
+gif
+     Outputs GIF bitmap images.
+hpgl
+     Produces output in the HP-GL/2 vector graphic printer language.
+imap
+cmap
+     Produces map files for server-side and client-side image maps,
+     respectively. These can be used in a web page with a graphical
+     form of the output, e.g. in JPEG or GIF format, to attach links
+     to nodes and edges. For example, given the dot file
+
+       /* x.dot */
+       digraph G {
+         URL="http://www.research.att.com/";
+         command [URL="command.html"];
+         command -> output [URL="colors.html"];
+       }
+
+
+     this can be processed twice:
+
+       dot -Timap > x.map
+       dot -Tgif > x.gif
+
+
+     and then be referred to in a web page, such as
+
+       <A HREF="x.map">
+       <IMG SRC="x.gif" ISMAP>
+       </A>
+
+
+     URLs can be attached to the root graph, nodes and edges. If the URL of
+     a node contains the escape sequence "\N", it will be replaced by the
+     node's name. If an edge has a URL, various points along the edge (but
+     not the head or tail) will link to it. In addition, if the edge has a
+     label, that will link to the URL.
+
+     As for the head of the edge, this is linked to the headURL, if set.
+     Otherwise, it is linked to the edge's URL if that is defined. If the
+     headURL contains the escape sequence "\N", it will be replaced by the
+     headlabel, if defined. The analogous description holds for the tail,
+     tailURL and taillabel.
+ismap
+     Produces HTML image map files. This is a predecessor (circa 1994) of
+     the IMAP format. Most servers now user the latter. URLs can be attached
+     to the root graph, nodes and edges. Since edge links are attached to
+     edge labels, an edge must have a label for its URL to be used. For both
+     nodes and edges, if the URL has the escape sequence "\N" embedded in
+     its string, this will be replaced with the node or edge name.
+jpg ,
+jpeg
+     Output JPEG compressed image files. This format relies on the
+     installation having the JPEG library.
+mif
+     Generates Frame Maker MIF files.
+mp
+     Produces MetaPost output.
+pcl
+     Produces output in the PCL printer language. HP-GL is a subset of PCL,
+     so that PCL output is the same as HP-GL, wrapped with some initial and
+     final commands to set the printer to and from HP-GL mode.
+pic
+     Outputs in PIC, the picture description language in the troff-family
+plain ,
+plain-ext
+     The plain and plain-ext formats produce output using a simple,
+     line-based language. The latter format differs in that, on edges, it
+     provides port names on head and tail nodes when applicable.
+
+     There are four types of statements.
+
+        graph scale width height
+        node name x y width height label style shape color fillcolor
+        edge tail head n x1 y1 .. xn yn [label xl yl] style color
+        stop
+
+
+     graph
+          The width and height values give the width and height of the
+          drawing. The lower left corner of the drawing is at the origin.
+          The scale value indicates how the drawing should be scaled if a
+          size attribute was given and the drawing needs to be scaled to
+          conform to that size. If no scaling is necessary, it will be set
+          to 1.0. Note that all graph, node and edge coordinates and lengths
+          are given unscaled.
+     node
+          The name value is the name of the node, and x and y give the
+          node's position. The width and height are the width and height of
+          the node. The label, style, shape, color and fillcolor give the
+          node's label, style, shape, color and fillcolor, respectively,
+          using attribute default values where necessary. If the node does
+          not have a style attribute, "solid" is used.
+     edge
+          The tail and head values give the names of the head and tail
+          nodes. n is the number of control points defining the B-spline
+          forming the edge. This is followed by 2*n numbers giving the x and
+          y coordinates of the control points in order from tail to head. If
+          the edge has a label, this comes next followed by the x and y
+          coordinates of the label's position. The edge description is
+          completed by the edge's style and color. As with nodes, if a style
+          is not defined, "solid" is used.
+     The output consists of one graph line, a sequence of node lines, one
+     per node, a sequence of edge lines, one per edge, and a final stop
+     line. All units are in inches, represented by a floating point number.
+png
+     Produces output in the PNG (Portable Network Graphics) format. PNG
+     relies on having libz and the PNG library.
+ps
+     Produces PostScript output.
+ps2
+     Produces PostScript output with PDF notations. It is assumed the output
+     will be directly converted into PDF format. The notations include PDF
+     bounding box information, so that the resulting PDF file can be
+     correctly used with pdf tools, such as pdflatex. In addition, if a node
+     has a URL attribute, this gets translated into PDF code such that the
+     node, when viewed in a PDF-viewer, e.g., acroread, is a link to the
+     given URL. If a URL is attached to the graph, this serves as a base,
+     such that relative URLs on nodes are derived from it.
+svg ,
+svgz
+     Produce SVG output, the latter in compressed format. SVG relies on
+     having libz.
+vrml
+     Outputs graphs in the VRML format. VRML relies on having the PNG
+     library.
+vtx
+     Generates graph diagrams in the format for Confluents's Visual Thought.
+wbmp
+     Produces output in the Wireless BitMap (WBMP) format, optimized for
+     mobile computing.
+
+  ------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/NEWS	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3 @@
+Notes on 2.0
+
+This release is licensed under the CPL.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/addingLayout.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,297 @@
+To create a new layout plugin called xxx, you first need
+to provide two functions: xxx_layout and xxx_cleanup. The
+semantics of these are described below.
+
+========================
+
+  void xxx_layout(Agraph_t * g)
+
+    Initialize the graph.
+       - If the algorithm will use the common edge routing code, it should
+    call setEdgeType (g, ...);
+
+       - For each node, call common_init_node and gv_nodesize.
+
+         If the algorithm will use spline_edges() to route the edges, the
+    node coordinates need to be stored in ND_pos, so this should be
+    allocated here. This, and the two calls mentioned above, are all
+    handled by a call to neato_init_node().
+
+       - For each edge, call common_init_edge
+
+       - The algorithm should allocate whatever other data structures it
+    needs. This can involve fields in the A*info_t fields. In addition,
+    each of these fields contains a void* alg; subfield that the algorithm
+    can use the store additional data. 
+         Once we move to cgraph, this will all be replace with 
+    algorithm specific records.
+
+    Layout the graph. When finished, each node should have its coordinates
+  stored in points in ND_coord_i(n), each edge should have its layout
+  described in ED_spl(e). 
+  (N.B. As of version 2.21, ND_coord_i has been replaced by ND_coord,
+  which are now floating point coordinates.)
+
+    To add edges, there are 3 functions available:
+
+      - spline_edges1 (Agraph_t*, int edgeType)
+          Assumes the node coordinates are stored in ND_coord_i, and that
+        GD_bb is set. For each edge, this function constructs the appropriate 
+        data and stores it in ED_spl.
+      - spline_edges0 (Agraph_t*)
+          Assumes the node coordinates are stored in ND_pos, and that
+        GD_bb is set. This function uses the ratio attribute if set, 
+        copies the values in ND_pos to ND_coord_i (converting from 
+        inches to points); and calls spline_edges1 using the edge type
+        specified by setEdgeType().
+      - spline_edges (Agraph_t*)
+          Assumes the node coordinates are stored in ND_pos. This
+        function calculates the bounding box of g and stores it in GD_bb,
+        then calls spline_edges0().
+
+    If the algorithm only works with connected components, the code can
+  use the pack library to get components, lay them out individually, and
+  pack them together based on user specifications. A typical schema is
+  given below. One can look at the code for twopi, circo, neato or fdp
+  for more detailed examples.
+
+        Agraph_t **ccs;
+        Agraph_t *sg;
+        Agnode_t *c = NULL;
+        int ncc;
+        int i;
+
+        ccs = ccomps(g, &ncc, 0);
+        if (ncc == 1) {
+            /* layout nodes of g */
+            adjustNodes(g);  /* if you need to remove overlaps */
+            spline_edges(g); /* generic edge routing code */
+
+        } else {
+            pack_info pinfo;
+            pack_mode pmode = getPackMode(g, l_node);
+
+            for (i = 0; i < ncc; i++) {
+                sg = ccs[i];
+                /* layout sg */
+                adjustNodes(sg);  /* if you need to remove overlaps */
+            }
+            spline_edges(g);  /* generic edge routing */
+
+            /* initialize packing info, e.g. */
+            pinfo.margin = getPack(g, CL_OFFSET, CL_OFFSET);
+            pinfo.doSplines = 1;
+            pinfo.mode = pmode;
+            pinfo.fixed = 0;
+            packSubgraphs(ncc, ccs, g, &pinfo);
+        }
+        for (i = 0; i < ncc; i++) {
+            agdelete(g, ccs[i]);
+        }
+
+        free(ccs);
+
+    Be careful in laying of subgraphs if you rely on attributes that have
+  only been set in the root graph. With connected components, edges can
+  be added with each component, before packing (as above) or after the
+  components have been packed (see circo).
+
+    It good to check for trivial cases where the graph has 0 or 1 nodes,
+  or no edges.
+
+    At the end of xxx_layout, call
+
+       dotneato_postprocess(g);
+
+  The following template will work in most cases, ignoring the problems of
+  handling disconnected graphs and removing node overlaps:
+
+  static void
+  xxx_init_node(node_t * n)
+  {
+    neato_init_node(n);
+    /* add algorithm-specific data, if desired */
+  }
+
+  static void
+  xxx_init_edge(edge_t * e)
+  {
+    common_init_edge(e);
+    /* add algorithm-specific data, if desired */
+  }
+
+  static void
+  xxx_init_node_edge(graph_t * g)
+  {
+    node_t *n;
+    edge_t *e;
+
+    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {
+        xxx_init_node(n);
+    }
+    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {
+        for (e = agfstout(g, n); e; e = agnxtout(g, e)){          
+            xxx_init_edge(e);
+        }
+    }
+  }
+
+  void
+  xxx_layout (Agraph_t* g)
+  {
+    xxx_init_node_edge(g);
+    /* Set ND_pos(n) for each node n */
+    spline_edges(g);
+    dotneato_postprocess(g);
+  }  
+
+======================
+
+  void xxx_cleanup(Agraph_t * g)
+
+    Free up any resources allocated in the layout.
+
+    Finish with calls to gv_cleanup_node and gv_cleanup_edge for
+  each node and edge. This cleans up splines labels, ND_pos, shapes
+  and 0's out the A*info_t, so these have to occur last, but could be
+  part of explicit xxx_cleanup_node and xxx_cleanup_edge, if desired.
+    At the end, you should do
+
+  if (g != g->root) memset(&(g->u), 0, sizeof(Agraphinfo_t));
+
+  This is necessary for the graph to be laid out again, as the layout
+  code assumes this structure is clean.
+
+  libgvc does a final cleanup to the root graph, freeing any drawing,
+  freeing its label, and zeroing out Agraphinfo_t of the root graph.
+
+  The following template will work in most cases:
+
+  static void xxx_cleanup_graph(Agraph_t * g)
+  {
+    /* Free any algorithm-specific data attached to the graph */
+    if (g != g->root) memset(&(g->u), 0, sizeof(Agraphinfo_t));
+  }
+
+  static void xxx_cleanup_edge (Agedge_t* e)
+  {
+    /* Free any algorithm-specific data attached to the edge */
+    gv_cleanup_edge(e);
+  }
+
+  static void xxx_cleanup_node (Agnode_t* n)
+  {
+    /* Free any algorithm-specific data attached to the node */
+    gv_cleanup_node(e);
+  }
+
+  void xxx_cleanup(Agraph_t * g)
+  {
+    Agnode_t *n;
+    Agedge_t *e;
+
+    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {
+        for (e = agfstout(g, n); e; e = agnxtout(g, e)) {
+            xxx_cleanup_edge(e);
+        }
+        xxx_cleanup_node(n);
+    }
+    xxx_cleanup_graph(g);
+  }   
+
+==================
+
+Most layouts use auxiliary routines similar to neato, so
+the entry points can be added in plugin/neato_layout
+
+Add to gvlayout_neato_layout.c:
+
+gvlayout_engine_t xxxgen_engine = {
+    xxx_layout,
+    xxx_cleanup,
+};
+
+and the line
+
+    {LAYOUT_XXX, "xxx", 0, &xxxgen_engine, &neatogen_features},
+
+to gvlayout_neato_types and a new emum
+
+    LAYOUT_XXX
+
+to layout_type in that file.
+
+The above allows the new layout to piggyback on top of the neato
+plugin, but requires rebuilding the plugin. In general, a user
+can (and probably should) build a layout plugin totally separately. 
+
+To do this, after writing xxx_layout and xxx_cleanup, it is necessary to:
+
+  - add the types and data structures
+
+typedef enum { LAYOUT_XXX } layout_type;
+
+static gvlayout_features_t xxxgen_features = {
+    0
+};
+gvlayout_engine_t xxxgen_engine = {
+    xxx_layout,
+    xxx_cleanup,
+};
+static gvplugin_installed_t gvlayout_xxx_types[] = {
+    {LAYOUT_XXX, "xxx", 0, &xxxgen_engine, &xxxgen_features},
+    {0, NULL, 0, NULL, NULL}
+};
+static gvplugin_api_t apis[] = {
+    {API_layout, &gvlayout_xxx_types},
+    {(api_t)0, 0},
+};
+gvplugin_library_t gvplugin_xxx_layout_LTX_library = { "xxx_layout", apis };
+
+  - combine all of this into a dynamic library whose name contains the 
+  string "gvplugin_" and install the library in the same directory as the 
+  other Graphviz plugins. For example, on Linux systems, the dot layout 
+  plugin is in the library libgvplugin_dot_layout.so.
+
+  - run
+      dot -c
+  to regenerate the config file.
+
+NOTES:
+  - Additional layouts can be added as extra lines in gvlayout_xxx_types.
+  - Obviously, most of the names and strings can be arbitrary. One
+  constraint is that external identifier for the gvplugin_library_t
+  type must end in "_LTX_library". In addition, the string "xxx" in
+  each entry of gvlayout_xxx_types is the name used to identify the
+  layout algorithm, so needs to be distinct from any other layout name.
+  - The features of a layout algorithm are currently limited to a 
+  flag of bits, and the only flag supported is LAYOUT_USES_RANKDIR,
+  which enables the layout to the rankdir attribute.
+
+Changes need to be made to any applications, such as gvedit, that
+statically know about layout algorithms.
+
+==================
+
+Software configuration - automake
+
+If you want to integrate your code into the Graphviz software
+and use its build system, follow the instructions below. 
+You can certainly build and install your plugin using your own
+build software.
+
+0. Put your software in lib/xxxgen, and added the hooks describe above
+into gvlayout_neato_layout.c
+1. In lib/xxxgen, provide a Makefile.am (based on a simple example
+like lib/fdpgen/Makefile.am)
+3. In lib/Makefile.am, add xxxgen to SUBDIRS
+2. In configure.ac, add lib/xxxgen/Makefile to AC_CONFIG_FILES.
+4. In lib/plugin/neato_layout/Makefile.am, insert
+	$(top_builddir)/lib/xxxgen/libxxxgen_C.la 
+	in libgvplugin_neato_layout_C_la_LIBADD
+5. Remember to run autogen.sh because on its own configure can guess wrong.
+
+This also assumes you have a good version of the various automake tools
+on your system.
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/cpl1.0.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,213 @@
+Common Public License Version 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+    a) in the case of the initial Contributor, the initial code and
+documentation distributed under this Agreement, and
+
+    b) in the case of each subsequent Contributor:
+
+    i) changes to the Program, and
+
+    ii) additions to the Program;
+
+    where such changes and/or additions to the Program originate from and are
+distributed by that particular Contributor. A Contribution 'originates' from a
+Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to
+the Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+
+    a) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free copyright license to
+reproduce, prepare derivative works of, publicly display, publicly perform,
+distribute and sublicense the Contribution of such Contributor, if any, and such
+derivative works, in source code and object code form.
+
+    b) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form.
+This patent license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the
+Licensed Patents. The patent license shall not apply to any other combinations
+which include the Contribution. No hardware per se is licensed hereunder.
+
+    c) Recipient understands that although each Contributor grants the licenses
+to its Contributions set forth herein, no assurances are provided by any
+Contributor that the Program does not infringe the patent or other intellectual
+property rights of any other entity. Each Contributor disclaims any liability to
+Recipient for claims brought by any other entity based on infringement of
+intellectual property rights or otherwise. As a condition to exercising the
+rights and licenses granted hereunder, each Recipient hereby assumes sole
+responsibility to secure any other intellectual property rights needed, if any.
+For example, if a third party patent license is required to allow Recipient to
+distribute the Program, it is Recipient's responsibility to acquire that license
+before distributing the Program.
+
+    d) Each Contributor represents that to its knowledge it has sufficient
+copyright rights in its Contribution, if any, to grant the copyright license set
+forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its
+own license agreement, provided that:
+
+    a) it complies with the terms and conditions of this Agreement; and
+
+    b) its license agreement:
+
+    i) effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title and
+non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+    ii) effectively excludes on behalf of all Contributors all liability for
+damages, including direct, indirect, special, incidental and consequential
+damages, such as lost profits;
+
+    iii) states that any provisions which differ from this Agreement are offered
+by that Contributor alone and not by any other party; and
+
+    iv) states that source code for the Program is available from such
+Contributor, and informs licensees how to obtain it in a reasonable manner on or
+through a medium customarily used for software exchange. 
+
+When the Program is made available in source code form:
+
+    a) it must be made available under this Agreement; and
+
+    b) a copy of this Agreement must be included with each copy of the Program. 
+
+Contributors may not remove or alter any copyright notices contained within the
+Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if
+any, in a manner that reasonably allows subsequent Recipients to identify the
+originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore, if
+a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and other legal
+actions brought by a third party against the Indemnified Contributor to the
+extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to
+control, and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may participate in
+any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If that
+Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such
+Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a court
+requires any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its exercise of
+rights under this Agreement, including but not limited to the risks and costs of
+program errors, compliance with applicable laws, damage to or loss of data,
+programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable
+law, it shall not affect the validity or enforceability of the remainder of the
+terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such
+provision valid and enforceable.
+
+If Recipient institutes patent litigation against a Contributor with respect to
+a patent applicable to software (including a cross-claim or counterclaim in a
+lawsuit), then any patent licenses granted by that Contributor to such Recipient
+under this Agreement shall terminate as of the date such litigation is filed. In
+addition, if Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the Program
+itself (excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted under
+Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue and
+survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to time.
+No one other than the Agreement Steward has the right to modify this Agreement.
+IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
+as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the Agreement
+under which it was received. In addition, after a new version of the Agreement
+is published, Contributor may elect to distribute the Program (including its
+Contributions) under the new version. Except as expressly stated in Sections
+2(a) and 2(b) above, Recipient receives no rights or licenses to the
+intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial in
+any resulting litigation.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/fontfaq.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,319 @@
+Graphviz and fonts.
+===================
+
+Before we launch into the gory details, we would like to explain
+why this is a hard problem.  The naming and rendering of text fonts
+in Graphviz (and other programs) is complicated.  There are several reasons:
+
+- Graphviz runs on a wide range of systems: Linux and other Unix
+variants, Microsoft Windows, and Mac.
+- Graphviz has a wide range of output formats: raster-oriented formats
+like PNG and GIF; path-based ones like Postscript, PDF and SVG; some
+idiosyncractic legacy formats, like troff PIC and HPGL.
+- Often, output will be downloaded and displayed on a computer or other 
+device, different than the one where the layout was created.
+- Graphviz layouts should be identical in size and appearance,
+regardless of the output format.
+- Graphviz can run on external libraries that help with naming and
+rendering text fonts, but they are not required, and stripped-down
+Graphviz tools can be built without them. In fact, Graphviz may have
+to run on systems with no font files installed.
+- There are several major font file formats to be supported.
+- Non-Western, international character sets should be supported.
+- Graphviz should provide a good set of standard fonts.
+- It should be easy to specify standard fonts.
+- Users should be able to load their own custom fonts.
+- Output should be small to download quickly.
+- Output should allow the best rendering possible in a given format.
+- Output files should be easy to postprocess, for example, retaining
+the objects of the original graph if possible.
+- It is very helpful to work around known bugs or missing features
+in support libraries and popular external tools.
+
+This is a tall order. Some of the goals conflict.  Generally our
+approach has been to define defaults that favor convenience and good
+looking output, and give the user options to override the defaults.
+
+===Overview===
+
+In the following, we will assume a ''standard'' version of Graphviz 
+with the full set of support libraries (fontconfig, gd, Cairo and Pango),
+running on a desktop system or server with a standard installation of
+font files.
+
+The graphviz layout engines (dot, neato, etc) create layouts with nodes
+sized to enclose the text labels.  This requires knowing the size of
+the text blocks, which in turn requires knowing the metrics of the font
+glyphs and their composition into words, taking into account wordspacing,
+kerning, hinting, etc.  So the overall process is: font specification,
+then text layout, followed by Graphviz output (and final rendering on
+the target display or device, which may or may not be by a Graphviz tool.)
+
+
+A font is usually selected by family name ("fontname") and other properties
+(see below: "Font selection"). Then fontconfig matches the request
+to a system font.  [Note: in older versions of Graphviz, fontname was
+simply a file name.  This required exact file name matching (with a little
+bit of helpful name mangling under the hood, e.g. translating Times-Roman
+to Times, or Helvetica to Arial on Windows systems (and yes we know
+there is a difference).  Under fontconfig, fontnames are family names,
+which fontconfig matches to the closest font it finds. This always
+"succeeds", but unfortunately produces surprising results if fontconfig's
+idea of "close" doesn't match yours. This can happen when you specify
+a custom (or just nonexistent) font, like Steve-North-Handwriting,
+and fontconfig silently falls back to something safe like a typewriter
+font.]
+
+Text layout is performed by pango, which accepts text and computes a
+layout with metrics that determine node sizes.
+
+Though line drawing is provided by cairo for many output formats (and
+likely more in the future), for raster output formats, font rendering
+is passed though cairo to freetype. Freetype is also called if gd is
+used for drawing.  (gd can also be requested explicitly, e.g. dot -Tpng:gd,
+or by default when Graphviz is built without cairo).  Freetype provides
+antialiasing, hinting, kerning, and other low-level font features.  
+
+Font metrics are obtained from the fonts installed on the system running
+Graphviz.  Results are guaranteed when Graphviz outputs raster formats,
+because freetype immediately renders the fonts into pixels.  On the
+other hand, with path-based formats like Postscript (-Tps) and SVG (-Tsvg),
+final rendering may be done on a different platform altogether, with
+different font files installed.  Clearly, Your Milage May Vary.  In the
+case of Postscript, the driver in Graphviz passes the expected metrics
+of the text block down to the renderer, and asks it to make a final stretch
+(or squeeze) to force the text to fit the metrics that were in effect at
+layout time.  In Graphviz SVG, there is only a hope and a prayer that
+the SVG rendering program's fonts match the ones fontconfig and freetype
+used when Graphviz was run.  (More about this later.)
+
+Default fonts and PostScript fonts.  ===================================
+
+The default font in graphviz is, and always has been, Times-Roman.
+
+Graphviz has historically supported some ``standard'' Postscript
+fonts, initially, Times-Roman, Helvetica, Courier and Symbol.
+This list was later enlarged by Adobe to include 35 fonts, which are:
+	AvantGarde-Book AvantGarde-BookOblique AvantGarde-Demi
+	AvantGarde-DemiOblique Bookman-Demi Bookman-DemiItalic
+	Bookman-Light Bookman-LightItalic Courier Courier-Bold
+	Courier-BoldOblique Courier-Oblique Helvetica
+	Helvetica-Bold Helvetica-BoldOblique Helvetica-Narrow
+	Helvetica-Narrow-Bold Helvetica-Narrow-BoldOblique
+	Helvetica-Narrow-Oblique Helvetica-Oblique NewCenturySchlbk-Bold
+	NewCenturySchlbk-BoldItalic NewCenturySchlbk-Italic
+	NewCenturySchlbk-Roman Palatino-Bold Palatino-BoldItalic
+	Palatino-Italic Palatino-Roman Symbol Times-Bold Times-BoldItalic
+	Times-Italic Times-Roman ZapfChancery-MediumItalic ZapfDingbats
+
+Unfortunately, fontconfig doesn't recognize PostScript-style font
+names directly, so Graphviz makes custom mappings from its list of
+PostScipt names into fontconfig family names for use in all cairo
+and gd based renderers. In -Tps output, these fonts are used without
+name translation.
+
+Font selection.  ===============
+
+The fontname attribute in .dot graphs is a fontconfig style specification.
+From: http://www.fontconfig.org/fontconfig-user.html
+
+	Fontconfig provides a textual representation for patterns that
+	the library can both accept and generate. The representation is
+	in three parts, first a family name list, second list of point sizes,
+	and finally a list of additional properties:
+
+	<families>-<point sizes>:<name1>=<values1>:<name2>=<values2>...
+
+	Values in a list are separated with commas. The name needn't
+	include either a family or point size; they can be elided. In
+	addition, there are symbolic constants that simultaneously
+	indicate both a name and a value. Here are some examples:
+
+	Name				Meaning
+	----------------------------------------------------------
+	Times-12			12 point Times Roman
+	Times-12:bold			12 point Times Bold
+	Courier:italic	  		Courier Italic in the default size
+	Monospace:matrix=1 .1 0   	The users preferred monospace font
+					with artificial obliquing
+
+Graphviz currently has a seperate attribute for specififying fontsize.
+
+[ FIXME
+  We should allow the fontconfig style specification.  "Times-20" does
+  not currently result in a 20pt font.
+
+  This is probably because of special treatment of '-' for postscript
+  font names.
+]
+
+[ FIXME
+  We seem to have a bug with use of ':' in fontnames, probably because
+  of special treatment for filenames in Windows.
+
+  In fontnames, use <space> instead of ':' to separate values.
+
+  -Nfontname="Courier:italic" doesn't produce an italic font in
+  graphviz-2.16.1, but: -Nfontname="Courier italic" works, but
+  -Nfontname="Monospace matrix=1 .1 0 1" doesn't.
+]
+
+
+Font management with fontconfig.  ================================
+
+How can I tell what fonts are available?
+	$ fc-list
+
+How can I tell what fonts dot is using;
+	$ dot foo.dot -Tpng -o foo.png -v 2>&1 | grep font
+
+How can I add a custom font?
+  In the current version of Graphviz with fontconfig, Cairo and
+  Pango, this cannot be done by simply putting a file in the
+  current directory or setting the DOTFONTPATH path variable.
+  Your custom font must be explicitly installed by fontconfig tools.
+
+  For a single font, e.g., foo.ttf:
+	$ mkdir -p ~/.fonts
+	$ cp foo.ttf ~/.fonts/
+
+  One can run fc-cache to speed up the use of fontconfig.
+	$ fc-cache
+
+  For Windows users, one can go to the C:\windows\fonts
+  folder and use File -> Install New Font from the pull-down menus
+  to install the font.
+
+  For a new font directory, e.g., /Library/Fonts, add a new <dir> element
+
+    <dir>/Library/Fonts</dir>
+
+  to a .conf file. Note that the file must have a correct xml structure
+  as specified by the fontconfig fonts.dtd. Possible choices for the
+  .conf file are local.conf in the same directory as the system-wide
+  fonts.conf file, or .fonts.conf in your home directory. 
+
+How can I ... font?
+	See: http://www.fontconfig.org/fontconfig-user.html
+
+Can I specifiy a font by filename instead of by familyname?
+	Sorry, the answer is no.  {The reason is that for this to
+	work, Graphviz has to intercept the font lookup before
+	fontconfig is called, and this can't be done when fonts
+	are being looked up by Pango.)
+
+    Some versions of fontconfig appear to recognize pathnames and
+    attempt to use that, but this isn't always the case.
+
+How can I be sure that a specific font is selected?
+	Provide enough specification in the fontname, and test it
+	with fc-match to ensure that your desired font is selected.
+	(Note, this will not ensure that the same font is used in -Tps
+	or -Tsvg renderings where we rely on the fonts available on the
+	final printer or computer.)
+
+	Note the downside, as mentioned previously, is that Graphviz cannot
+	do much to warn you when fontconfig didn't find a very
+	good match, because fontconfig just cheerfully falls back
+	to some standard font.  It would be really nice if the
+	fontconfig developers could provide a metric reflecting the
+	quality of the font match in their API.
+
+What about SVG fonts?
+	Graphviz has a native SVG driver that we wrote (which is the
+	default), and cairo's SVG driver (which you get with -Tsvg:cairo).
+
+	Graphviz' native SVG driver generates Windows compliant names
+	like "Times New Roman" or Arial by default. The names work in a
+	lot of situations (like Firefox running on Windows), but are
+	not guaranteed to be portable.  If you set -Gfontnames=ps,
+	you get Postscript names like Times-Roman.  If you set -Gfontnames=svg
+	you are guaranteed to get rock solid standards compliant SVG.
+	The SVG standard says that the legal generic font names
+	are Serif, Sans-Serif, and Monospace (plus Cursive and
+	Fantasy which we don't use in Graphviz). We generate those names.
+	The bad news is that various downstream renderers and editors
+	may resolve the generic font names differently, so it's not
+	quite clear how your SVG will look.  Many W3C examples show
+	how to use CSS (Cascading Style Sheets) to get around this
+	problem by giving a list of font family names in order of
+	lookup precedence, but some downstream processors (like the
+	inkscape editor in Linux) don't implement CSS, so we're up a tree here.
+
+	The cairo SVG driver solves this in an effective though brute
+	force way: it simply encodes embeds the needed fonts as lines and
+	curves in the target SVG.  For small examples, -Tsvg:cairo is
+	about 10 times bigger than -Tsvg, but maybe it's worth it for
+	correctness.  The other problem is that such SVG is much much
+	slower to render, no doubt because it bypasses any system
+	font rendering services, and does it the old fashioned way.
+
+What about Postscript fonts?
+
+	say something here.  What about non-ASCII like Latin1.
+	what about loading your own fonts via -L like in the old
+	days with the weird outline font example.
+
+==="What if" issues for nonstandard Graphviz builds===
+The following only apply if you build your own version of Graphviz
+by configuring and compiling the source code to build your own
+custom executable.  If you don't know what this means, it
+definitely does not mean you.
+
+No freetype.  ============
+
+When graphviz is built on systems without freetype, then only the gd
+renderer will be available for bitmap outputs, and the only available
+fonts are a small set of builtin bitmap fonts.  The poor quality of
+these fonts will be evident, also, "dot ... -v 2>&1 | grep font"  will
+say that the font is "<internal>". This may actually be desirable
+for installing minimal graphviz programs on a server where fonts
+may not even be installed.
+
+
+No fontconfig.	==============
+
+If graphviz is built on systems without fontconfig (e.g. Redhat-7) then
+the fontname attribute will be interpreted as a font file name. The
+system directories will be searched for this, or the directories can
+be specified with the GDFONTPATH environment variable (or DOTFONTPATH
+for historical reasons). Graphviz will use gd and freetype to obtain
+metrics and render text.  No pango/cairo renderers will be available
+without fontconfig support.
+
+
+Disabling fontconfig.  =====================
+
+Pango/cairo depends on fontconfig, so to disable fontconfig you also have
+to disable pango/cairo.    The easiest way to do this temporarily is to
+edit /usr/lib/graphviz/config and remove the entire "libpango" block.
+[Note that any changes to this file will be lost the next time graphviz
+is updated, or "dot -c" is run with installer priviledges.]
+
+With pango disabled, graphviz will use gd which, even if it was built with
+fontconfig support, will still allow fontnames to be given as filenames.
+
+You can also disable cairopango at build time with configure script options.
+
+
+No gd. =====
+
+Cairopango works without gd.  We are moving graphviz to the pango/cairo
+libraries, but gd still offers some features that are hard to replace,
+such as JPEGs, GIFs and paletted color bitmap outputs. However, font support
+is fully functional without gd so long as pango, cairo, fontconfig,
+freetype are available.
+
+No pango/cairo.  ===============
+
+Without pango/cairo, some of the key renderers are only available
+with gd, which produces lower quality (but smaller) output.
+
+Looking forward, we expect to depend more on pango for things like:
+line wrapping, multiple fonts per label, bidirectional text and
+other internationalization features.
+
+No gd and no cairopango =====
+This is basically the original Graphviz without any external fonts.
+It cannot render any raster formats, so it's mainly good for Postscript.
+It relies on a few internal font tables
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/FAQ.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1089 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+        "http://www.w3.org/TR/html4/loose.dtd">
+<HTML><HEAD><TITLE>Graphviz FAQ 2008-06-06</TITLE>
+<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">
+</HEAD><BODY>
+<H1>Graphviz FAQ 2008-06-06</H1>
+
+<A HREF="mailto:gviz-bugs@research.att.com">The Graphviz Project</A>
+<p>
+<b>Note</b>:
+This is not a tutorial; to understand the following, you should
+know how to use the basic features of the tools and
+languages involved. Please see the
+<A HREF="http://www.graphviz.org/Documentation.php">
+user guides and documentation</A> for further information or the
+<A HREF="http://www.graphviz.org/Resources.php">resources page</A>
+for a partial list of compatible tools and packages.
+
+<h2>General</h2>
+
+<A name=Q1 HREF=#Q1>
+<B>Q1</A>. Where can I see a list of all the attributes that control dot or neato?</B>
+
+</A>
+<P>
+See <A HREF="info/attrs.html">
+Graph Attributes</A>. There is also information on
+<A HREF="info/command.html">
+command-line usage</A> and
+<A HREF="info/output.html">
+output formats</A>.
+<p>
+<a name="mailinglist"></a>
+<A name=Q2 HREF=#Q2>
+<B>Q2</A>. Where can I discuss Graphviz?</B>
+
+<p>
+We run a mailing list.
+<p>
+To subscribe or unsubscribe, visit the
+<A HREF="https://mailman.research.att.com/mailman/listinfo/graphviz-interest">graphviz-interest</A> <em>mailman</em> control page.  See also the general
+<A HREF="http://www.list.org/mailman-member/index.html">
+instructions</A> for mailman.
+<p>
+You can also see the
+<A HREF="https://mailman.research.att.com/pipermail/graphviz-interest/">
+archive</A>.
+<p>
+You may wish to use a Yahoo or Hotmail account if you're concerned
+about spam. We also run anti-spam filters, and rewrite <tt>@</tt>
+as <tt>at</tt> to keep verbatim addresses out of the archive.
+<p>
+Please, please, please, do not torment the mailing list with beginner's
+questions.  First, check this FAQ and the
+<A HREF="https://mailman.research.att.com/pipermail/graphviz-interest/">
+message archive</A> carefully. 
+If you are desperate, or better yet, if you have constructive advice,
+please send a message to the <A HREF="https://mailman.research.att.com/mailman/listinfo/graphviz-devel">graphviz-devel mailing list</A>.
+<p>
+Also, if a program crashes or you get an abort or something strange occurs
+and you are fairly comfortable using the tools:
+<UL>
+<LI>
+Check the 
+<A HREF="http://www.research.att.com/~erg/graphviz/bugs/openbugs.html"> open
+bug list</A> to see if a similar bug has already been reported. You might
+also consider checking the
+<A HREF="http://www.research.att.com/~erg/graphviz/bugs/buglist.html"> full
+bug list</A>, since your bug may have been reported and fixed in the working
+version.
+<LI>
+Submit a <A HREF="http://www.research.att.com/~erg/graphviz/bugform.html">bug 
+report</A>. If you prefer, you can download a 
+<A HREF="http://www.research.att.com/~erg/graphviz/bugform.txt">report in
+text form</A>, fill in the fields, and email it to 
+<a href="mailto:gviz-bugs@research.att.com">gviz-bugs@research.att.com</a>.
+</UL>
+<p>
+<A name=Q3 HREF=#Q3>
+<B>Q3</A>. I'm trying to make a layout larger. How?</B>
+
+<p>
+There are various ways to increase the size of a layout. In doing this,
+one has to decide if the sizes of the nodes and text should be 
+increased as well.
+<p>
+One approach is to adjust individual
+parameters such as <tt>fontsize, nodesep</tt> and <tt>ranksep</tt>.
+For example,
+<pre>
+           digraph G {
+                graph [fontsize=24];
+                edge  [fontsize=24];
+                node  [fontsize=24];
+                ranksep = 1.5;
+                nodesep = .25;
+                edge [style="setlinewidth(3)"];
+                a -&gt; b -&gt; c;
+           }
+</pre>
+If you do this, make sure you are not fighting a conflicting graph
+size setting, like <tt>size="6,6"</tt>, which will then scale
+everything back down.
+<p>
+If you are using fdp or neato, increasing the edge len will tend to
+expand the layout.
+<pre>
+        graph G {
+           edge [len=3]
+           a -- { b c d }
+        }
+</pre>
+For twopi and circo, there are other parameters such as
+<tt>ranksep</tt> which can be used. See the 
+<A HREF="info/attrs.html">
+graph attributes</A>.
+<p>
+You can also use the <tt>ratio</tt> attribute. If you set the <tt>size</tt>
+attribute to the desired drawing size, and then set <tt>ratio=fill</tt>, node
+positions are scaled separately in x and y until the drawing fills the
+specified <tt>size</tt>. Note that node sizes stay the same. If, instead,
+you set <tt>ratio=expand</tt>, the layout is uniformly scaled up in x and y
+until at least one dimension fits <tt>size</tt>.
+<p>
+If you specify the <tt>size</tt> attribute but end it with an exclamation
+mark (!), the final drawing will be scaled up uniformly in x and y 
+until at least one dimension fits <tt>size</tt>. Note that everything is
+scaled up, including text and node sizes.
+<p>
+If you're using Postscript, you can just scale up the output by
+manually adding a command such as <tt>2 2 scale</tt> where the
+Postscript environment is set up.  Make sure to adjust the
+<tt>BoundingBox</tt> too if your tools look at this header.
+<p>
+<A name=Q4 HREF=#Q4>
+<B>Q4</A>. How can I join or merge certain edge routes in dot?</B>
+
+<p>
+You can try running <tt>dot -Gconcentrate=true</tt> or you can
+introduce your own virtual nodes drawn as tiny circles where
+you want to split or join edges:
+
+<pre>
+digraph G {
+  yourvirtualnode [shape=circle,width=.01,height=.01,label=""];
+  a -&gt; yourvirtualnode [arrowhead=none]
+  yourvirtualnode -&gt; {b;c}
+}
+</pre>
+
+<P>
+<A name=Q4a>
+<B>Q. How can I generate graph layouts in PDF?</B>
+</A>
+<P>
+Recent versions of graphviz with the CairoPango based drivers
+can generate PDF directly with the <tt>-Tpdf</tt> command line option.
+This this first.
+<P>
+Otherwise, create Postscript output, then use an external converter from
+Postscript to PDF.
+For example,<BR>
+<tt>dot -Tps | epsf2pdf -o file.pdf</tt><br>
+Note that URL tags are respected, to allow clickable PDF objects.
+<P>
+If your intention is to use the figure as PDF in some document preparation 
+system, such as pdflatex, it is very important to use -Tps2 rather than
+-Tps. In general, if you really want PDF output, that is, you would like
+to have a -Tpdf flag, use -Tps2 before converting to PDF. 
+<P>
+In the diagram below, the shaded nodes will contain bad output.<BR>
+<IMG src="pspdf.png">
+<P>
+<A name=Q4b>
+<B>Q. How can I make duplicate nodes?</B>
+</A>
+<P>
+Make unique nodes with duplicate labels.
+<pre>
+      digraph G {
+            node001 [label = "A"];
+            node002 [label = "A"];
+			node001 -&gt; node002;
+	  }
+</pre>
+<P>
+<A name=Q4c>
+<B>Q. How can I set a graph or cluster label without its propagating to all sub-clusters?</B>
+</A>
+<P>
+Set the label at the end of the graph (before the closing brace), after all
+its contents have been defined. (We admit it seems desirable to define some
+special syntax for non-inherited attribute settings.)
+<p>
+<A name=Q5 HREF=#Q5>
+<B>Q5</A>. How can I draw multiple parallel edges in neato?</B>
+
+<p>
+This is possible when the <tt>splines</tt> attribute is false, which
+is the default. When <tt>splines=true</tt>, we have no good answer but
+we are working on it. One trick which is sometimes sufficient is to 
+specify multiple colors for the edge. This will a produce set of tightly
+parallel splines, each in its specified color. Read about the
+<A HREF="info/attrs.html#d:color">color
+attribute</A> for more information.
+
+<h2>Clusters</h2>
+
+<A name=Q5a>
+<B>Q. How can I create edges between cluster boxes?</B>
+</A>
+<p>
+This only works in Graphviz version 1.7 and higher.
+To make edges between clusters, first set the
+graph attribute <tt>compound=true</tt>.
+Then, you can specify a cluster by name as
+a <i>logical head or tail</i> to an edge. This will
+cause the edge joining the two nodes to be
+clipped to the exterior of the box around the
+given cluster.
+<p>
+For example,
+ 
+<pre>
+      digraph G {
+        compound=true;
+        nodesep=1.0;
+        subgraph cluster_A {
+          a -&gt; b;
+          a -&gt; c;
+        }
+        subgraph cluster_B {
+          d -&gt; e;
+          f -&gt; e;
+        }
+        a -&gt; e [ ltail=cluster_A,
+                 lhead=cluster_B ];
+      }
+</pre>
+
+has an edge going from <tt>cluster_A</tt> to
+<tt>cluster_B</tt>. If, instead, you say
+ 
+<pre>
+        a -&gt; e [ltail=cluster_A];
+</pre>
+ 
+this gives you an edge from <tt>cluster_A</tt> to node
+<tt>e</tt>. Or you could just specify
+an <tt>lhead</tt> attribute.
+ 
+The program warns if a cluster specified as a
+logical node is not defined.
+Also, if a cluster is specified as a logical
+head for an edge, the real
+head must be contained in the cluster, and
+the real tail must not be.
+A similar check is done for logical tails. In
+these cases, the edge
+is drawn between the real nodes as usual.
+<p>
+<A name=Q6 HREF=#Q6>
+<B>Q6</A>. Clusters are hard to see.</B>
+
+<P>
+Set <tt>bgcolor=grey</tt>
+(or some other color)
+in the cluster.
+<P>
+<A name=Q7 HREF=#Q7>
+<B>Q7</A>. How can I symmetrize (balance) tree layouts?</B>
+
+<P>
+When a tree node has an even number of children, it isn't necessarily
+centered above the two middle ones.  If you know the order of the children,
+a simple hack is to introduce new, invisible middle nodes to re-balance
+the layout. The connecting edges should also be invisible. For example:
+<pre>
+digraph G {
+a -&gt; b0;
+xb [label="",width=.1,style=invis]
+a -&gt; xb [style=invis];
+a -&gt; b1;
+{rank=same b0 -&gt;  xb -&gt; b1 [style=invis]}
+b0 -&gt; c0;
+xc [label="",width=.1,style=invis]
+b0 -&gt; xc [style=invis];
+b0 -&gt; c1;
+{rank=same c0 -&gt;  xc -&gt; c1 [style=invis]}
+}
+</pre>
+This trick really ought to be build into our solver (and made
+independent of the order of the children, and available for
+layouts other than trees, too).
+
+<H2>Output features</H2>
+
+<A name=Q8 HREF=#Q8>
+<B>Q8</A>. How can I get high quality (antialiased) output?</B>
+
+<P>
+The easiest thing may be to make the layout in Postscript (option <tt>-Tps</tt>),
+then run through <A HREF="http://www.cs.wisc.edu/~ghost/">Ghostview</A> with
+antialiasing enabled.  The important command line options are
+<tt>-dTextAlphaBits=4 -dGraphicsAlphaBits=4</tt>
+(4 is the highest level of antialiasing allowed - see the
+<A HREF="http://www.cs.wisc.edu/~ghost/doc/GPL/8.15/Use.htm">Ghostview documentation</A>).
+The full command line to render a raster could be something like:
+<pre>
+gs -q -dNOPAUSE -dBATCH -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=png16m -sOutputFile=file.png file.ps
+</pre>
+<P>
+On Mac OS X, the <A HREF="http://www.pixelglow.com/graphviz/">pixelglow</A> port
+uses Apple's Quartz renderer, which enables antialiasing.  It also provides a beautiful document container for its user interface. (One downside is
+that you can't run Pixelglow Graphviz as a web server or other background
+process if your Mac has 3D graphics, because Quartz wants to get this resource
+to accelerate rendering. Another problem is that as of this writing,
+Pixelglow Graphviz hasn't been updated in a long time, maybe mid 2004.)
+<P>
+On the Linux bleeding edge, Graphviz has an optional plugin to use
+the <A HREF="http://www.cairographics.org">cairo</A> back end,
+which has antialiased, path-based graphics.  If you want this,
+you must install cairo, which is not part of Graphviz.  Cairo is
+available in recent versions of Fedora linux, or it can be built
+from source.
+<P>
+<A name=Q9 HREF=#Q9>
+<B>Q9</A>. I can only get 11x17 output.</B>
+
+<P>
+It's not us!  It's probably your printer setup.  If you don't
+believe this, run <tt>dot -Tps</tt> and look at the
+<tt>BoundingBox</tt> header.  The coords are in 1/72ths of an inch.
+ 
+<P>
+<A name=Q10 HREF=#Q10>
+<B>Q10</A>. How do I create special symbols and accents in labels?</B>
+
+<P>
+The following solution only works with the
+raster drivers that load Truetype or Type1
+fonts!  (That means, <tt>-Tgif, -Tpng, -Tjpeg</tt>, and possibly
+<tt>-Tbmp</tt> or <tt>-Txbm</tt> if enabled). 
+ 
+Use UTF8 coding, <i>e.g.</i> &amp;#165; for the Yen currency symbol &#165.
+Example:
+ 
+<pre>
+      graph G {
+            yen [label="&amp#165;"]
+      }
+</pre>
+<P>
+You can look up other examples in this handy 
+<A HREF="http://www.graphviz.org/doc/char.html">
+character set reference</A>.
+<P>
+<A name=Q10b>
+<B>Q. More generally, how do I use non-ASCII character sets?</B>
+</A>
+<P>
+The following applies to Graphviz 2.8 and later.  (In older versions
+of Graphviz, you can sometimes get away with simply putting
+Latin-1 or other UTF-8 characters in the input stream, but the
+results are not always correct.)
+<P>
+<B>Input:</B> the general idea is to find the
+<A HREF="http://en.wikipedia.org/wiki/Unicode">Unicode</A>
+value for the glyph you want, and enter it within a text
+string "...." or HTML-like label <...>.
+<P>
+For example, the mathematical <it>forall</it> sign (&#8704;) has the value 0x2200.
+There are several ways this can be inserted into a file.
+One is to write out the ASCII representation: "&amp;#&lt;nnn&gt;;" where &lt;nnn&gt;
+is the decimal representation of the value. The decimal value of 0x2200 is 8704,
+so the character can be specified as "&amp;#8704;" . Alternatively, Graphviz
+accepts UTF-8 encoded input.  In the case of forall, its UTF-8 representation
+is 3 bytes whose decimal values are 226 136 128. For convenience, you
+would probably enter this using your favorite editor, tuned to your character set
+of choice. You can then use the <A HREF="http://www.gnu.org/software/libiconv/#TOCdownloading">
+iconv</A> program to map the graph from your character set to UTF-8 or Latin-1.
+<P>
+We also accept the HTML symbolic names for Latin-1 characters as suggested
+<A HREF="#Q10">above</A>.
+(Go to http://www.research.att.com/~john/docs/html/index.htm and click
+on Special symbols and Entities) For example, the cent sign (unicode
+and Latin-1 value decimal 162 can be inserted as
+<pre>
+&amp;cent;
+</pre>
+<P>
+Note that <b>the graph file must always be a plain text document</b>
+not a Word or other rich format file.  Any characters not enclosed in "..."
+or <...> must be ordinary ASCII characters. In particular, all of the DOT
+keywords such as <tt>digraph</tt> or <tt>subgraph</tt> must be ASCII.
+<P>
+Because we cannot always guess the encoding, you should set the graph
+attribute <tt>charset</tt> to 
+<A HREF="http://en.wikipedia.org/wiki/UTF-8">UTF-8</A>,
+<A HREF="http://en.wikipedia.org/wiki/Latin-1">Latin1</A>
+(alias ISO-8859-1 or ISO-IR-100)
+or 
+<A HREF="http://en.wikipedia.org/wiki/Big-5">Big-5</A> for
+Traditional Chinese.  This can be done in the graph file or on the command line.
+For example <tt>charset=Latin1</tt>.
+<P>
+<B>Output:</B> It is essential that a font which has the glyphs for your
+specified characters is available at final rendering time.
+The choice of this font depends on the target code generator.
+For the gd-based raster generators (PNG, GIF, etc.) you need a
+TrueType or Type-1 font file on the machine running the Graphviz program. 
+If Graphviz is built with the <tt>fontconfig</tt>
+library, it will be used to find the specified font. Otherwise, Graphviz will
+look in various default directories for the font. The directories to be
+searched include those specified by the <tt>fontpath</tt> attribute,
+related environment or shell variables
+(see the <a href=http://www.graphviz.org/doc/info/attrs.html#d:fontpath>fontpath</A> entry),
+and known system font directories. 
+The table
+<A HREF="http://www.graphviz.org/doc/char.html">
+http://www.graphviz.org/doc/char.html</A>
+points out that these glyphs are from the <tt>times.ttf</tt> font.
+With fontconfig, it's hard to specify this font.  <tt>Times</tt> usually gets
+resolved to Adobe Type1 times, which doesn't have all the glyphs seen on that page.)
+<!--- can someone explain whether Cairo differs from libgd here? --->
+<P>
+For Postscript, the input must be either the ASCII subset of UTF-8
+or Latin-1. (We have looked for more general solutions, but it
+appears that UTF-8 and Unicode are handled differently for every
+kind of font type in Postscript, and we don't have time to hack
+this case-by-case.  If someone wants to volunteer to work on this, let us know.)
+<P>
+For SVG output, we just pass the raw UTF-8 (or other encoding)
+straight through to the generated code.
+<P>
+Non-ASCII characters probably won't ever work in Grappa
+or dotty, which have their own back end rendering. 
+(Though, Java supports UTF-8, so there's a chance
+Grappa also handles raw UTF-8 strings.)
+<P>
+As you can see, this is a sad state of affairs.
+Our plan is to eventually migrate Graphviz to the
+<A HREF="http://www.pango.org/">pango</A> text formatting
+library, to ameliorate the worst of these complications.
+<P>
+<A name = Q11>
+<B>Q. How do I get font and color changes in record labels or other labels?</B>
+</A>
+<P>
+This is not possible in record shapes. However, you can do this using
+<A HREF="info/shapes.html#html">
+HTML-like labels</A>. The granularity of changes is still at the cell level,
+but by playing with cell spacing and padding, you can get pretty much
+the effect you want. The intention is to support arbitrary font changes
+within running text in the not-too-distant future.
+ 
+<P>
+<A name=Q12 HREF=#Q12>
+<B>Q12</A>. In plain format, splines do not touch the nodes (arrowheads are missing).</B>
+
+<P>
+Edges are specified as the main spline and, if necessary, arrowheads
+which actually abut the node. If the arrowheads are not given, drawing
+the edge spline will leave a gap between the edge and the node.
+This is a bug which has now solidified into a feature. 
+A workaround is to set
+       
+<pre>
+      edge [dir=none]
+</pre>
+Since the edges have no arrowheads, the spline specification will go
+all the way to both nodes. 
+<P>
+<A name=Q13 HREF=#Q13>
+<B>Q13</A>. Record nodes are drawn differently in dot and neato when rankdir=LR.</B>
+
+<P>
+It's true.  dot -Grankdir=LR rotates record nodes so that their top level
+fields are still listed across levels.  rankdir=LR has no effect in neato.
+One workaround is
+<A HREF="info/shapes.html#html">
+HTML-like records</A> (they don't rotate; the downside is that
+you have to write in XML). Another workaround is to enclose
+record labels in { } to rotate/unrotate the record contents. See also,
+<A HREF="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnhfact/html/hfactor8_5.asp">How To Avoid Foolish Consistency</A>
+by Scott Berkun (Microsoft Corp.)
+<P>
+<A name=Q14 HREF=#Q14>
+<B>Q14</A>. How can I print a big graph on multiple pages?</B>
+
+<P>
+The <tt>page</tt> attribute, if set, tells Graphviz to print the
+graph as an array of pages of the given size. Thus, the graph
+<pre>
+digraph G {
+  page="8.5,11";
+  ...
+}
+</pre>
+will be emitted as 8.5 by 11 inch pages. When printed, the
+pages can be tiled to make a drawing of the entire graph.
+At present, the feature only works with PostScript output.
+<P>
+Alternatively, there are various tools and viewers which will take
+a large picture and allow you to extract page-size pieces, which can
+then be printed.
+<P>
+<A name=Q15>
+<B>Q. When I have a red edge it shows up as a
+solid red in PNG and GIF formats, but has a
+black border when rendered to JPEG.  </B>
+</A>
+<P>
+This is an artifact of JPEG's lossy
+compression algorithm.  JPEG isn't very good
+for line drawings.  PNG is bitmap format of
+choice.  John Ellson wants to deprecate and
+eventually remove the JPEG driver, but North
+is reluctant to change anything that people
+might already rely on.
+<P>
+<A name=Q16 HREF=#Q16>
+<B>Q16</A>. How can I get custom shapes or images in my graph?</B>
+
+<P>
+Please see the
+<A HREF="http://www.graphviz.org/Documentation/html/shapehowto.html">
+Shape HowTo</A> for some approaches.  There is no easy way to create
+custom shapes that work with dot/neato, dotty
+(Unix or MS-Windows) and Grappa (the Java
+front end), because they don't share any universal back end structure.
+We're thinking about it.
+<P>
+<A name=Q17>
+<B>Q. Sometimes in dotty, right mouse click shows the global menu
+but none of the items can be selected.</B>
+</A>
+<P>
+Check that the NUMLOCK key is off.  It's a
+<A HREF="http://www.research.att.com/~erg/graphviz/bugs/b524.html">
+known bug</A>.
+<P>
+<A name=Q18 HREF=#Q18>
+<B>Q18</A>. Why does dotty report a syntax error on a legal dot file?</B>
+
+<P>
+Typically this error is reported as:
+<pre>
+>> graph parser: syntax error near line 14
+>> context:  >>>  <<< digraph G {
+>> dotty.lefty: giving up on dot
+>> dotty.lefty: graph that causes dot
+>> dotty.lefty: to fail has been saved in file dottybug.dot
+</pre>
+Probably there is a command in your shell environment (such as
+.alias or .profile) that does output even for non-interactive shells.
+When this occurs, those characters go in the pipe to the dot parser
+and cause this problem.  An easy check is whether other users have
+the same problem.
+<P>
+<A name=Q20>
+<B>Q. How can I get some display feature (such
+as bold lines) in dotty?</B>
+</A>
+<P>
+<A NAME="dotty_note">Dotty</A> has not really changed for many years. Therefore, there are
+myriad features available in Graphviz which it cannot handle.
+In some cases, you can use 
+<A HREF="http://www.research.att.com/~john/Grappa/">Grappa</A> 
+or <A HREF="http://www.graphviz.org/webdot/">webdot</A> 
+for display instead of dotty.  
+For example, Grappa has generalized polygons 
+(<tt>node [shape=polygon]</tt>) that dotty lacks.
+There are additional interactive viewers available. For example, see
+<A HREF="http://www.graphviz.org/Resources.php">Graphical Interfaces</A>
+and <A HREF="http://www.graphviz.org/About.php">Viewers</A>. If you
+are using Mac OS X, the <A HREF="http://www.pixelglow.com/graphviz/">Mac
+version</A> of Graphviz has a highly recommended GUI.
+<P>
+If the display attribute that you need isn't there already, in dotty,
+there's probably no easy way to do it except by rolling up
+your sleeves and hacking the dotty code (a lefty script) that
+interprets and renders graphical attributes.  This is problematic
+for the same reason as above: there's no universal low-level driver
+layer shared across all the Graphviz tools.  We recently added an
+intermediate rendering language to the layout tools, but the
+various front ends don't use it yet.  This would be a good project
+for someone who wants to get involved here (along with porting
+dotty to GTK.)
+<P>
+<A name=Q21>
+<B>Q. How can I get rid of the little circles on
+edges ("edge handles") in dotty?</B>
+</A>
+<P> 
+Edit the file dotty.lefty and change the
+line that says: 'edgehandles' = 1; to 'edgehandles' = 0;
+it's around line 110.
+<P>
+<A name=Q22>
+<B>Q. I already have all the coordinates for the
+nodes and edges of my graph and just want to
+use dot, neato, or dotty to render it.  How?</B>
+</A>
+<P>
+Put the graph with layout attributes into a dot
+file. 
+
+Then run <tt>neato -s -n2</tt>. For example:
+<pre>
+neato -s -n2 -Tgif file.dot -o file.gif
+</pre>
+Note that if an edge does not have a <TT>pos</TT> attribute
+defined, neato will perform whatever edge routing it would
+normally do. All of the usual backend attributes (<TT>size</TT>,
+<TT>overlap</TT>, <TT>page</TT>, etc.) are available.
+<P>
+<A name=Q23>
+<B>Q. I already have all the coordinates for the
+nodes, and I want dot or neato to route the edges.</B>
+</A>
+<P>
+It's not really too convenient to use dot for this.
+It is possible to use neato for this,
+running neato -s -n For example:
+<pre>
+neato -s -n -Tgif file.dot -o file.gif
+</pre>
+neato will use the node positions, but use its technique
+for routing the edges. There are several things to note. First,
+the neato edge router is different from dot's. Without the built-in
+top-down bias, it doesn't do as good a job of avoiding edge overlaps
+and, at present, it doesn't handle spline multi-edges at all. Second, by
+default, neato uses straight lines as edges. To get spline routing,
+you have to specify -Gsplines=true. And this will only work if none of
+the nodes overlap. Since the input graph supplies fixed node positions,
+it is the user's task to insure this.
+<P>
+<A name=Q24>
+<B>Q. I already have all the coordinates for the
+nodes and edges of my graph and just want to
+use dotty to render it.  How?</B>
+</A>
+<P>
+Just run dotty on it. Dotty will use the given pos attributes.
+<P>
+<A name=Q25 HREF=#Q25>
+<B>Q25</A>. Same as above, but I have only node coords, not edges.</B>
+
+<P>
+<tt>neato -n</tt> is some help, but neato doesn't handle
+spline-based parallel edges. 
+<P>
+<A name=Q26 HREF=#Q26>
+<B>Q26</A>. How can I make client-side image maps?</B>
+
+<P>
+Use the -Tcmap command line option (only version 1.8.9 and beyond!)
+<P>
+<A name=Q27 HREF=#Q27>
+<B>Q27</A>. Why aren't my server-side maps being recognized? I've checked the HTML!</B>
+
+<P>
+Make sure that your server has map files enabled. For example, if running
+apache, check that httpd.conf has a line like the following:
+<pre>
+AddHandler imap-file map
+</pre>
+and that it is not commented out!
+<P>
+<A name=Q28>
+<B>Q. I've installed Debian Graphviz and it works just fine on the command line,
+but when I execute a Perl/CGI script through Apache, no output is generated.</A>
+For example, the code
+<tt>
+system("/usr/local/bin/dot -Tpng /tmp/tree.dot -o /tmp/tree.png");
+</tt>
+produces no file <tt>/tmp/tree.png</tt>.</B>
+<P>
+As best as we can tell, dot dies with no stdout or stderr messages on Debian 
+systems when run from an Apache cgi program
+with no HOME set. The workaround is to provide a HOME directory in the 
+Apache userid's environment.
+<P>
+Someone has also suggested using the 
+<A HREF="http://search.cpan.org/search?query=graphviz&amp;mode=all">
+Perl module for Graphviz</A>.
+<P>
+<A name=Q29 HREF=#Q29>
+<B>Q29</A>. How can I get 3D output?</B>
+
+<P>
+The Graphviz authors have qualms about the gratuitous use of 3D.
+<p>
+Nonetheless, dot -Tvrml generates VRML files.  There's no Z coordinate
+layout - you specify Z coords yourself in the <tt>z</tt> attribute of nodes,
+and the Z coordinates of edges are interpolated.   If someone
+contributes a driver for a newer, more useful format (OpenGL Performer
+scene graphs? Open Scene Graphs? Java3D programs?) we'd like to try it.
+<p>
+neato internally supports layouts in higher dimensions through the <tt>dim</tt>
+attribute, e.g. <tt>neato -Gdim=7</tt> but there's no way to get the output
+unless you invoke neato as a library and inspect ND_pos(n)[i]
+where n is a pointer to the relevant node.
+This would need some (minor) driver work and a good 7-dimensional viewer. Well,
+<tt>dim=3</tt> ought to be possible.
+
+<H2>Problems</H2>
+<A name=Q30 HREF=#Q30>
+<B>Q30</A>. How can I avoid node overlaps in neato?</B>
+
+<P>
+Use the graph attribute <A HREF="info/attrs.html#d:overlap"><tt>overlap</tt></A>.
+<P>
+<A name=Q31 HREF=#Q31>
+<B>Q31</A>. How can I avoid node-edge overlaps in neato?</B>
+
+<P>
+Use the <tt>overlap</tt> attribute to leave room among the nodes, then
+use <tt>-Gsplines=true</tt>.
+<pre>
+neato -Goverlap=... -Gsplines=true -Gsep=.1
+</pre>
+<P>
+The <tt>sep</tt> argument is the node-edge separation as
+a ratio of a node's bounding box. That is, <tt>sep=.1</tt> means
+each node is treated as though it is 1.1 times larger than it is.
+The actual value may require some tinkering.
+(Don't ask why this isn't just a constant!)  Note that this option really
+slows down neato, so should be used sparingly and only
+with modest-sized graphs.
+<P>
+<A name=Q32 HREF=#Q32>
+<B>Q32</A>. Neato runs forever on a certain example.</B>
+
+<P>
+First, how big is your graph? Neato is a quadratic algorithm, roughly
+equivalent to statistical multidimensional scaling. If you
+feed it a graph with thousands of nodes and edges, it can easily take
+hours or days. The first thing to check is to run <tt>neato -v</tt> to
+get a trace of the output. If the numbers you see are generally
+getting smaller, the layout is just taking a long time. You can set
+certain parameters, such as <tt>epsilon</tt> or <tt>maxiter</tt> to
+shorten the layout time, at the expense of layout quality. But if your
+graph is big, who's going to notice?
+<P>
+If you see
+the numbers repeating, or fluctuating up and down, then neato is
+cycling, especially if your graph is small.
+This should never happen by default for versions later than 1.13. If it
+does, please report it as a bug.
+<P>
+If you are using an earlier version of neato, or you used <tt>mode=KK</tt>,
+cycling is indeed possible. This cycling is very sensitive to the
+initial layout. By using the <tt>start</tt> attribute, for example,
+<pre>
+neato -Gstart=3
+neato -Gstart=rand
+</pre>
+the cycling will most likely disappear. Or you can employ the parameters used
+for large graphs to stop the layout earlier:
+<pre>
+neato -Gepsilon=.01
+neato -Gmaxiter=500
+</pre>
+<P>
+Note that, if you have a large graph, the generation of edges as splines
+is a cubic algorithm, so you would do well to avoid using <tt>splines=true</tt>.
+(This commment applies to circo, fdp and twopi as well.)
+<P>
+<A name=Q33 HREF=#Q33>
+<B>Q33</A>. Edge label placement in neato is bad.</b>
+
+<p>
+Difficult problem.  We're working on it.
+If anyone has some general
+label placement code (e.g. a simulated annealer based on the Marks et al.
+technique in <I>Graphics Gems IV</I>), please get in touch.
+<P>
+<A name=Q34 HREF=#Q34>
+<B>Q34</A>. Dot runs forever on a certain example.</B>
+
+<p>
+Try dot -v to observe its progress.
+<p>
+Note that it's possible to make graphs whose layout or even parsing
+is quadratic in the input size. For example, in dot, 
+
+<pre>
+digraph G {
+    a -&gt; b -&gt; c -&gt; .... -&gt; x -&gt; y -&gt; z
+    a -&gt; z
+    b -&gt; z
+    c -&gt; z
+    /* and so on... */
+	x -&gt; z
+}
+</pre>
+
+The total edge length (therefore the layout time) of
+this as a ranked graph is quadratic in the number of nodes.
+
+
+You probably won't encounter the following, but it is also possible
+to construct graphs whose parsing takes quadratic time in the number
+of attributes, by appending attributes to nodes and edges after the 
+graph has been loaded. For example:
+
+<pre>
+digraph G {
+    /* really big graph goes here...with N+1 nodes */
+    n0 -&gt; n1 -&gt; ... -&gt; nN;
+
+    n0 [attr0="whatever",
+        attr1="something else",
+    /* and so on with many more attributes */
+        attrM="something again"]
+}
+</pre>
+When an attribute first appears, each object is visited with possible cost
+proportional to the number of previously declared attributes. Thus,
+the running time for the above would be <I>cN</I> O(<I>M</I>)
+for some constant <I>c</I>. If there is any concern about this, the
+graph should specify the attributes first before declaring nodes or
+edges. In practice, this problem is neglible.
+<P>
+<A name=Q34a>
+<B>Q. Twopi runs forever on a certain example.</B>
+</A>
+<p>
+Is your graph is large (many thousands of edges),
+and did you set <pre>splines=true</pre>?  It takes
+a lot of cycles to fit all those splines!
+<p>
+<A name=Q35>
+<B>Q. Neato has unnecessary edge crossings, or has missed an
+obvious chance to make a much nicer layout.</B>
+</A>
+<P>
+Neato and all similar virtual physical model algorithms rely
+on heuristic solutions of optimization problems. The better
+the solution, the longer it takes to find. Unfortunately, it
+is also possible for these heuristics to get stuck in local
+minima. Also, it is heavily influenced by the initial position
+of the nodes. It is quite possible that if you run neato again,
+but with a different random seed value,
+or more iterations, you'll get a better layout.  For example:
+<pre>
+neato -Gstart=5 file.dot -Tps -o file.ps
+neato -Gepsilon=.0000001 file.dot -Tps -o file.ps
+</pre>
+<P>
+In particular, note that there are no guarantees that neato will produce
+a planar layout of a planar graph, or expose all or most of a graph's
+symmetries.
+<P>
+<A name=Q36 HREF=#Q36>
+<B>Q36</A>. Webdot doesn't work.</B>
+
+<P>
+We assume you're using Apache and have <A HREF="http://www.tcl.tk/">TCL</A> installed.
+If you don't, it's probably better to just use the
+<A HREF="http://www.graphviz.org/Misc/webdot.pl">
+webdot perl script</A>.
+<P>
+To debug webdot, first test whether <tt>tclsh</tt> can load the
+Tcldot shared library.  Try:
+<pre>
+$ tclsh
+% load <b>$prefix</b>/lib/graphviz/libtcldot.so.0
+%
+</pre>
+where <b>$prefix</b> is the installation prefix for graphviz; usually /usr
+or /usr/local.
+<p>
+Then test whether webdot runs from a shell command.  (With webdot we provide
+a helper script scaffold.tcl or scaffold.sh that sets up an environment
+like the one Apache provides.)  For example
+<pre>
+$ scaffold.tcl >out.gif
+can't read "LIBTCLDOT": no such variable
+    while executing
+"file mtime $LIBTCLDOT"
+    invoked from within
+"set t1 [file mtime $LIBTCLDOT]"
+    (file "cgi-bin/webdot" line 67)
+    invoked from within
+"source cgi-bin/webdot
+"
+    (file "scaffold.tcl" line 22)
+</pre>
+The above is a strong clue that webdot is not configured properly. 
+<P>
+Finally, test whether webdot runs as a cgi-bin program.
+It may help to examine the cgi-bin environment using a
+simple cgi-bin tcl script like:
+<pre>
+	#!/bin/env tclsh
+	puts "Content-type: text/plain"
+	puts ""
+	foreach e [lsort [array names env]] {puts "$e: $env($e)"}
+</pre>
+Save this script as .../cgi-bin/test.tcl, make it executable, then
+look at: <a href="http://localhost/cgi-bin/test.tcl">http://localhost/cgi-bin/test.tcl</a>
+<P>
+Also, if you see something like:
+<pre>
+WebDot Error:
+
+Response Code = 403
+</pre>
+This usually means that webdot ran succesfully, but was not able
+to fetch the remote graph from the URL you gave as an argument.
+The reason is probably that your server is behind a firewall that
+blocks the webdot server, so it cannot get the graph file.
+You can either change firewall permissions, put the graph on a
+different server, or install webdot locally so you don't need a
+remote server to fetch your graph data.
+<P>
+It would be nice if someone hacked webdot to take the contents
+of a graph as a cgi-bin argument, so it wouldn't need
+permission to fetch a graph remotely.
+This is left as an exercise for the Open Source Community.
+<P>
+<A name=Q37 HREF=#Q37>
+<B>Q37</A>. I have "Font not found" errors, or text labels missing in webdot.</B>
+
+<P>
+Firstly, recent versions of graphviz will use fontconfig if it is available
+on your platform.  With fontconfig, this error should not occur, so you
+may want to see if an upgrade to graphviz is available, or if a rebuild
+will add fontconfig support.
+<p>
+If fontconfig is not available then graphviz tries to resolve fontnames
+to fontpaths itself, and uses DOTFONTPATH (or GDFONTPATH) to indicate where it should look.
+<p>
+For copyright reasons, Graphviz doesn't come with its own fonts.
+On a Windows machine, it knows to search in <tt>C:\Windows\Fonts</tt>.
+On a Unix machine, you need to set up a directory that contains
+Truetype fonts. You can get a copy of some fonts
+<A HREF="http://www.graphviz.org/pub/graphviz/webfonts-1.0-5.noarch.rpm">here</A>.
+<P>
+The default DOTFONTPATH is:
+<pre>
+#define DEFAULT_FONTPATH "/usr/X11R6/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/truetype:/usr/X11R6/lib/X11/fonts/TTF:/usr/share/fonts/TrueType:/usr/share/fonts/truetype:/usr/openwin/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/Type1"
+</pre>
+If your fonts are somewhere else, then you must set that directory in
+the webdot script, or recompile Graphviz with the correct DEFAULT_FONTPATH
+(or set <tt>fontpath="/your/font/directory"</tt> in every graph you lay out,
+but that's pretty clumsy.)
+<P>
+<A name=Q38 HREF=#Q38>
+<B>Q38</A>. My browser doesn't recognize SVG.</B>
+
+<P>
+The correct MIME type for svg images is: <tt>image/svg+xml</tt>   (note "+" not "-").
+<P>
+SVG is not built into all browsers; you can get
+<A HREF="http://www.adobe.com/svg/viewer/install/main.html">plugins</A>
+from Adobe for Windows, Linux and some other operating systems.
+<A HREF="http://www.mozilla.com/firefox/">
+Firefox 1.5</A> has a <A href="http://developer.mozilla.org/en/docs/SVG_in_Firefox_1.5">large subset of SVG</A> and renders graphviz -Tsvg output
+though until graphviz 2.8, the fonts may be too large (thanks for
+Phil Colbourne at the RailCorp of New South Wales for this advice).
+<P>
+For help with embedding SVG in HTML pages, see 
+<A HREF="http://www.graphviz.org/webdot/svgembed.html">here</A>.
+<P>
+There are several good standalone viewers and editors for SVG.
+We like <A HREF="http://www.inkscape.org">inkscape</A>.
+<A HREF="http://www.gnome.org/projects/evince/">evince</A>
+is the standard Gnome document viewer that handles SVG, at least
+since version 0.5 (though Phil C. reports output is blurred)
+(see also <A HREF="">eog</A> (Eye of Gnome)).
+Commercial tools like Adobe Illustrator and Microsoft Visio
+can import SVG (the better to deal with your content, my dear!)
+If you are using an older (less bloated) Unix system, you
+may find tools like <A HREF="http://xml.apache.org/batik/">Batik</A>
+(an SVG renderer in Java) or <A HREF="http://www.sodipodi.com">sodipodi</A>
+useful, though it seems they are no longer very actively maintained.
+sodipodi is faster but both make sharp images - isn't that the
+beauty of path-based graphics?
+<P>
+<A name=Q39>
+<B>Q39. libexpat is reported as containing a virus or as a security hole.
+Is this a real problem?</B>
+</A>
+<P>
+No, this is a false positive reported by various security software.
+See <A HREF="http://www.pcreview.co.uk/forums/thread-1689630.php">http://www.pcreview.co.uk/forums/thread-1689630.php</A> or
+<A HREF="http://spywareblog.com/index.php/2004/11/24/is_libexpat_dll_spyware">http://spywareblog.com/index.php/2004/11/24/is_libexpat_dll_spyware</A>.
+<P>
+<A name=Q40 HREF=#Q40>
+<B>Q40</A>. What is the coordinate transformation between the graph bb and a .png image?</B>
+<OL>
+<LI>
+The bb is expanded by 4 graph-units in all directions (pad) to allow for finite line widths.
+<LI>
+Then it is zoomed and/or rotated according to -Gviewport, -Gsize, -Glandscape, -Gorientation options.
+At the default scaling of 1:1, one graph unit = 1 point (1/72 inch).
+<LI>
+Then it is paginated, if requested by -Gpage and if the output format supports it.  Not the -Tpng renderer, yet.
+<LI>
+Then a margin is added, -Gmargin, in absolute units (inches).
+The top/bottom margin can be set independently of the left/right margin.
+<LI>
+Then it is converted to device units, according to -Gdpi,
+or a dpi value that is given by the output device,
+or a default that is provided by each render.
+There are separate dpi values for x and y to allow for non-square pixels.
+Some renderers invert the Y axis and need an offset to place the
+origin in the top left corner.
+The default dpi for -Tpng is 96dpi (approximating the resolution
+of most computer monitors) so this is where the scaling by 96/72 (4/3)
+comes from.
+</OL>
+<P>
+At the renderer api, plugins have a choice of coordinate representation:
+<UL>
+<LI>
+coordinates in graph-units, and composite transformation data consisting
+of: scaling, rotation, and translation.  (used by svg, cairo, ps, renderers)
+<LI>
+coordinates pre-transformed into device units. 
+</UL>
+<P>
+<A name=Q41 HREF=#Q41>
+<B>Q41</A>. File associations are broken in Mac OSX.  Clicking on a <tt>dot</tt> file doesn't open Graphviz.</B>
+<p>
+The immediate fix is to rebuild the Launch Services database like this:
+<p>
+1. 	Trash all other versions of Graphviz.app on your system, except for the just installed one. You can use either of these command lines to find it:
+<p>
+<pre>locate Graphviz.app</pre>
+<p>
+or
+<p>
+<pre>find / -name "Graphviz.app"</pre>
+<p>
+2.	Run the following command line:
+<p>
+<pre>/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r / </pre>
+<p>
+or
+<p>
+<pre>/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r /Applications</pre>
+<p>
+which deletes the Launch Services database and rebuilds it from existing apps. You may need to sudo to do this.
+<p>
+3.	Verify that the Graphviz.app can now open .dot files and Microsoft Word can still open its own .dot files.
+<p>
+One artifact of this will be that Microsoft .dot files may appear with the Graphviz document icon. Unfortunately there doesn't seem any a priori way of getting the system to determine whether an arbitrary .dot file belongs to Word or Graphviz -- you can choose which application to open with by right-clicking or control-clicking on the document icon and choosing the app.
+<p>
+As for why the Launch Services database doesn't automatically register Graphviz,
+we're not entirely sure but suspect this only happens if both conditions
+hold true:
+<p>
+A.	The user had installed Microsoft Word.<br>
+B.	There is also another version of Graphviz.app present in the system. (Possibly the previous version 1.13 released by Pixelglow Software)<br>
+<A name=Q42 HREF=#Q42><B>Q41</A>. What do all these plugin libraries do?</B>
+<p>
+<ul>
+	<li><b>lasi</b> - Adds support for UTF8 characters, beyond ASCII, in postScript output. This table provides a feture comparison of the various PosScript renderers:
+	<table>
+		<tr>
+			<th></th>
+			<th>UTF8</th>
+			<th>hyperlinks</th>
+			<th>human readable PostScript</th>
+		</tr>
+		<tr>
+			<th>-Tps:core</th><td>no</td><td>yes</td><td>++</td>
+		</tr>
+		<tr>
+			<th>-Tps:lasi</th><td>yes</td><td>yes</td><td>+</td>
+		</tr>
+		<tr>
+			<th>-Tps:cairo</th><td>yes</td><td>no</td><td>--</td>
+		</tr>
+	</table>
+	<li><b>gs</b> - Provides support for usershapes in PostScript that can be embedded in all output formats.  It interprets the format and renders to a cairo surface.  Requires a recent version of ghostscript.  (Not needed for PostScript in PostScript) 
+	<li><b>rsvg</b> - Provides support for usershapes in SVG that can be embedded in all output formats.  It interprets the format and renders to a cairo surface.  (Not needed for SVG in SVG)
+	<li><b>glitz</b> - OpenGL output.   But this may not be the right way to dot it, and my glitz plugin is unfinished.  Not useful at this time.
+	<li><b>ming</b> - Flash output.  Was sort of working at one point, not now.  Needs development.  Might be interesting opportunities for a dynamic graph output.  Not useful at this time.
+</ul>
+
+
+</BODY>
+</HTML>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/GVedit.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,305 @@
+<html>
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=Generator content="Microsoft Word 11 (filtered)">
+<title>GVedit Help</title>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{margin:0in;
+	margin-bottom:.0001pt;
+	font-size:12.0pt;
+	font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+
+</head>
+
+<body lang=EN-US>
+
+<div class=Section1>
+
+<p class=MsoNormal align=center style='text-align:center'><b><u>Introduction</u></b></p>
+
+<p class=MsoNormal style='text-indent:.5in'>GVedit<span style='color:black'> is a
+Graphviz tool for creating, viewing, editing and processing DOT files. It
+allows users to set attributes of graphs with dialogue boxes and save them
+for future use. GVedit users can also take advantage of the simple 
+instant previewing feature of the program.</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b><u><span
+style='color:black'>Menu system</span></u></b></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>GVedit's main menu bar
+provides basic file options such as <b>Open</b>, <b>Save</b>, <b>Save As</b> and simple editing
+operations such as <b>Cut</b>, <b>Copy</b> and <b>Paste</b>. Most of the common commands
+also have standard keyboard shortcuts.
+Below you will find a list of the menu items and brief information on
+each of them.</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+<p class=MsoNormal><b><span style='color:black'>File:</span></b></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>New: Creates a blank text
+window. You can use it to write a description of a graph in the DOT language.
+New graphs are not saved to disk until you save them manually.</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Open: Opens a file
+dialogue box to select and load a DOT file into the editor. Each file is opened in a
+new window and does not affect other open graphs.</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Save: Saves the active
+graph to disk. If the active graph is new and does not have a name, 
+it opens a <b>Save As</b> dialogue to allow you
+to specify the file's name before saving.</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Save as: Opens a <b>Save As</b>
+dialogue to save the active graph. You can save a graph under different names but
+you will always be working with the most recently saved graph.</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>
+Close: Closes the active graph window. If there are any unsaved changes,
+you get a dialogue box asking if you want to
+save the changes before closing the graph.</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal><b><span style='color:black'>Edit:</span></b></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Undo : This command
+rolls back the last thing that you have done within the active graph. </span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Cut : Removes selected
+text and keeps it in the clipboard. </span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Copy: Copies selected
+text to the clipboard. </span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>
+Paste: Inserts the text from the clipboard into the cursor position on the 
+active graph.</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Find: Opens the find
+dialogue box to allow you to locate desired text in a graph.</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+<p class=MsoNormal><b><span style='color:black'>Graphviz</span></b></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Run: Processes the active
+graph with the last attributes that were used for it. If the active graph has
+never been processed before, it opens the settings window.</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Settings: Opens the
+settings window. Details of this window are given below.
+</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+<p class=MsoNormal><b><span style='color:black'>View</span></b></p>
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Cascade:
+Sets the style for handling multiple windows to cascade, in which each
+new window overlaps the previous one.
+</span></p>
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Tile:
+Sets the style for handling multiple windows to tiling, in which the
+open graph windows partition the root window. 
+</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+<p class=MsoNormal><b><span style='color:black'>Help</span></b></p>
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>
+Help: Opens a manual page describing how to use this program.
+</span></p>
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>
+Graphviz on net: Opens a browser window on the Graphviz home page.
+</span></p>
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>
+About GVedit: Provides version information about the program.
+</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b><u><span
+style='color:black'>Tool bar</span></u></b></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>Under the menu bar,
+there is a toolbar with five buttons on it. These buttons are nothing but shortcuts
+to some menu items. Each button has a tool tip attached to it to
+indicate its purpose.</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b><u><span
+style='color:black'><span style='text-decoration:none'>&nbsp;</span></span></u></b></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b><u><span
+style='color:black'>Working with multiple graphs; the active graph</span></u></b><span
+style='color:black'>.</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>
+GVedit allows you to have multiple graphs open at the same time. At any
+time, there is a single active graph. 
+Anything you do using either the GVedit menus or the settings window affects the
+active graph. When you go to the settings window, you always see the 
+settings of active graph.
+The settings of each graph are maintained separately.
+</span></p>
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>
+To make a graph active, click on its window.
+The background of the active graph window is white 
+while all others are gray. 
+</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b><u><span
+style='color:black'><span style='text-decoration:none'>&nbsp;</span></span></u></b></p>
+<p class=MsoNormal align=center style='text-align:center'><b><u><span
+style='color:black'>Settings window</span></u></b></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>
+With the settings window,
+you can select the layout engine, set the output type and file,
+and set any attributes that are available with the Graphviz release 
+installed on your computer.</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'><b>Layout engine:</b>
+Graphviz provides five different graph layouts. You can select
+the one which best fits your needs. More information about these layouts 
+can be found at the <A HREF="http://www.graphviz.org">Graphviz home page</A>
+</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'><b>Output file name:</b>
+This field allows you to specify the output file name. 
+You can either type in the name, or use the
+small button by the text box to open a file
+dialogue box.
+This field corresponds to the –o option of Graphviz. 
+</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><b><span style='color:black'>Output
+file type:</span></b><span style='color:black'> This drop down list allows 
+you to select the output file type. The output file name's extension is changed
+accordingly.
+This field corresponds to the –T option of Graphviz. 
+</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><b><span style='color:black'>Graphviz
+bin folder:</span></b><span style='color:black'>You usually do not need to
+enter anything here. During the Graphviz installation, locations of the Graphviz
+files are stored in the registry and GVedit retrieves it from there. If, 
+for some reason, Graphviz files are not where they are supposed to be 
+and GVedit can not
+find them, you can edit this information manually.
+</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><b><span style='color:black'>
+Preview Output file:</span></b><span style='color:black'> 
+If this box is checked,
+GVedit creates a low-quality preview of the output and shows it in a 
+separate window. It is a convenient way to preview the results without 
+executing another viewing program.
+</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><b><span style='color:black'>
+Apply cairo filter:</span></b><span style='color:black'> 
+If this output format is supported by the cairo library, this box becomes
+active. If checked, output will be generated using the cairo library
+rather than the default renderer. 
+</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><b><span style='color:black'>Attributes:</span></b><span style='color:black'>
+On the lower half of the settings window, you will see two dropdown lists,
+one small text box, and a larger text editing area. GVedit processes the
+contents of the large box as additional, generic graph, node or edge attributes.
+(These correspond to the –G, –N, and –E command-line options of Graphviz.) 
+You can either type directly in the large text box,
+or use the drop down lists to pick
+an allowed scope and one of the common attribute names.
+For details of these attributes, refer to the
+<A HREF="http://www.graphviz.org/doc/info/attrs.html">page of Graphviz attributes.</A>
+</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>
+If you specify an attribute using the drop down lists, you need to click on the
+<b>Add</b> button to register the attribute.
+If you do not click on 
+<b>Add</b> button, the attribute that you entered will not be 
+added to the large box, hence will not be processed.
+</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>As an
+example, assume that we would like to have a graph drawn 
+with a green background.
+First, click on the scope list and select <b>graph</b>; 
+then click on the name list and
+select <b>bgcolor</b>; and then type <tt>green</tt> to the value box. 
+Finally, click on the <b>Add</b> button to send the attribute to large box. 
+</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>
+Belowe the <b>Add</b> button is a <b>Help</b> button. Clicking on this
+will open a browser window on the Graphviz page describing the supported
+attributes.
+</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>
+Under the large box, there are 3 small buttons, plus 
+<b>Cancel</b> and <b>OK</b> buttons. The first button is used to
+clear the attributes box; 
+the second one is used to load an existing text file into the attributes box;
+and the last one is used to save the attributes to a text file for later use. 
+The <b>Cancel</b> button closes the window without processing anything; 
+the <b>OK</b> button processes the
+active document file with the settings on the screen and closes the settings
+window. If you check the preview check box, you will see the preview of the
+graph layout on the screen.</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal align=center style='text-align:center'><b><u><span
+style='color:black'>Console window</span></u></b></p>
+
+<p class=MsoNormalstyle='text-indent:.5in'><span style='color:black'>
+At the bottom of the
+main window, there is a console window where you can see the results of your
+actions. This provides a trace of your layout actions, showing the
+Graphviz command corresponding to the active graph's settings. It also
+displays warnings from GVedit, as well as the output of the 
+executed Graphviz programs. 
+By right clicking on the console window, you will get a menu providing some
+additional functions, such as clearing or saving the console logs.</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal style='text-indent:.5in'><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+
+<p class=MsoNormal><span style='color:black'> </span></p>
+
+<p class=MsoNormal><span style='color:black'>&nbsp;</span></p>
+
+</div>
+
+</body>
+
+</html>
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/Gdtclft2.2.5.example.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/build.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,382 @@
+<html>
+<head>
+<title>graphviz build notes</title>
+</head>
+<body bgcolor=#ffffff>
+<h1>graphviz build notes</h1>
+<h2>External packages</h2>
+The full build requires external libraries that you must
+obtain elsewhere.  Most, if not all of these are optional,
+and configure will build graphviz with reduced functionality
+if an external library is not found.  Newer versions of these
+libraries should be fine - if not, please let us know.
+<ul>
+<li>GD (generic raster graphics driver for PNG, GIF, JPEG)
+<a href="http://www.boutell.com/gd/http/gd-2.0.28.tar.gz">
+http://www.boutell.com/gd/http/gd-2.0.28.tar.gz</a>
+<br>Graphviz also contains a copy of GD 2.0.4, but we will
+remove it eventually so the external library is preferred.
+<li>ZLIB (raster image compression)
+<a href="http://www.zlib.net/zlib-1.2.3.tar.gz">
+http://www.zlib.net/zlib-1.2.3.tar.gz</a>
+<br>
+NB: Use "./configure -s" to build shared libraries. (See notes in zlib-1.2.3/Makefile)
+<li>FREETYPE (renders text in raster graphics formats)
+<a href="http://prdownloads.sourceforge.net/freetype/freetype-2.1.3.tar.gz">
+http://prdownloads.sourceforge.net/freetype/freetype-2.1.3.tar.gz</a>
+<li>PNG (driver for Portable Network Graphics raster format)
+<a href="http://prdownloads.sourceforge.net/libpng/libpng-1.2.5.tar.gz">
+http://prdownloads.sourceforge.net/libpng/libpng-1.2.5.tar.gz</a>
+<li>JPEG (a popular raster format with lossy compression, not critical here)
+<a href="ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz">
+ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz</a>
+<li>EXPAT (XML parser)
+<a href="http://prdownloads.sourceforge.net/expat/expat-1.95.5.tar.gz">
+http://prdownloads.sourceforge.net/expat/expat-1.95.5.tar.gz</a>
+<li>GETTEXT (gcc compatibility library)
+<a href="http://ftp.gnu.org/gnu/gettext/gettext-0.11.5.tar.gz">
+http://ftp.gnu.org/gnu/gettext/gettext-0.11.5.tar.gz</a>
+<li>ICONV (string converstion for text internationalization)
+(Many systems already provide iconv in glibc.  Check to see if you already
+have a working /usr/bin/iconv before installing this extra package.)
+<br>
+<a href="http://ftp.gnu.org/gnu/libiconv/libiconv-1.8.tar.gz">
+http://ftp.gnu.org/gnu/libiconv/libiconv-1.8.tar.gz</a>
+<li>TCL (a command interpreter for the tcldot GUI)
+<a href="http://prdownloads.sourceforge.net/tcl/tcl8.3.5-src.tar.gz">
+http://prdownloads.sourceforge.net/tcl/tcl8.3.5-src.tar.gz</a>
+<li>LIBTOOL (generic library support)
+<a href="ftp://ftp.gnu.org/pub/gnu/libtool/libtool-1.5.22.tar.gz">
+ftp://ftp.gnu.org/pub/gnu/libtool/libtool-1.5.22.tar.gz
+</a>
+</ul>
+<P>
+These libraries (either static or dynamic) and their
+interface header files must already be on your system.
+It's OK if you install your own copies of these packages,
+though you may need to tell make or configure where to find them.
+Run "configure --help" for details.
+<P>
+On most Linux distributions these packages are already installed
+or installable from packages included in the distribution.
+You might need to install some -devel packages to get the include
+header files.
+                                                                                
+<h2>Abbreviated Build Instructions (GNU tools)</h2>
+
+<p>If you are using GNU tools, the recommended method for building
+graphviz is the usual:
+<pre>
+
+	./configure
+	make
+	make install
+</pre>
+
+<p>If you are building from CVS sources, then you must have
+recent versions of "libtool", "automake", and "autoconf".
+Build with:
+<pre>
+
+	./autogen.sh
+	./configure
+	make
+	make install
+</pre>
+
+<p>If you are not building with GNU tools, then there are some
+tried-and-true old-style Makefiles that can be used instead.
+Details below.
+
+<h2>Detailed Build Instructions</h2>
+
+<P>
+There are a handful of preprocessor defines that control the
+image driver configuration.  These preprocessor defines need to
+agree with the libraries used in the Makefile.
+<p>
+The generic raster driver is <tt>gd</tt> and it can be configured to
+generate GIF (no compression), PNG (lossless compression), JPEG
+(lossy compression), and wireless bitmap (WBMP) files.
+The compressors all need <tt>zlib</tt>.  In the current build we
+have a top-level config.h file that defines various symbols, such as:
+<P>
+	HAVE_JPEG<br>
+	HAVE_PNG<br>
+<P>
+If you don't enable the <tt>gd</tt> based drivers, graphviz will
+still have the <tt>printf</tt> style drivers for Postscript and SVG.
+(However, even these benefit from better text size estimation via
+Freetype, when it is available.)
+<P>
+<h2>Build tools for Unix</h2>
+You have several choices.
+<P>
+1. (Recommended for Linux) Use configure generated by GNU autoconf.
+This often works well on a vanilla Linux distribution with
+Tcl/Tk, freetype-devel and libjpeg already installed by root
+under /usr.  Probably works OK with Solaris, too.
+Otherwise some adjusting of command line arguments
+to <tt>configure</tt> will be needed.
+For Linux you can also just pick up the source tarball
+or RPMs <A HREF="http://www.graphviz.org/pub/graphviz/">here</A>.
+<P>
+First, if you are using sources from CVS, run "./autogen.sh"
+to generate the "configure" script.  If you are using sources
+from graphviz-&lt;version&gt;.tar.gz this autogen.sh step should not be
+needed.
+<p>
+Next, run configure. For help on possible configure options, run:
+<br>
+<pre>
+./configure --help
+</pre>
+<p>
+For example, I use <br>
+<pre>
+./configure  --prefix=$HOME/arch/sgi.mips3 \
+	--with-freetypeincludedir=$HOME/arch/$ARCH/include/freetype2 \
+	--with-freetypelibdir=$HOME/arch/$ARCH/lib \
+	--with-tcl=/usr/common/tcl8.3.3 </pre>
+<P>
+Obviously you would change the pathnames to reflect your installation.
+<p>
+Note that the directory ${prefix}/include is automatically searched
+for headers, and ${prefix}/lib for libraries.
+<P>
+If you have problems with one or more of the optional script language bindings,
+they can be disabled with e.g. --disable-perl.
+<p>
+2. (Recommend for other Unix platforms.) As above, you need
+the external packages to be installed somewhere.
+<ul>
+<li>
+Run configure.old from the root graphviz directory.
+<li>
+Edit Config.mk for your architecture, tools, and installation directory.
+In particular, set the ARCH make variable.
+<li>
+If desired, check settings in makearch/$(ARCH).
+See below for further notes on individual platforms.
+<li>
+Run make.
+</ul>
+<pre>
+make
+make install
+make clean
+</pre>
+	
+<P>
+3. (Recommended for Dave Korn and Eleftheris Koutsofios) Use AT&amp;T/Lucent
+<A HREF="http://www.research.att.com/sw/tools/reuse/packages/astkit.html">nmake</A>.
+<P>
+You have to install the AST tools first.
+<P>
+Then edit Makeargs in the top source directory appropriately
+and <tt>nmake install</tt>.  Some fiddling with X11 libs is probably
+necessary to compile 'lefty'.  This usually involes editing
+$INSTALLROOT/lib/lib/Xt or X11 (or less portably, edit nmakefile).
+You may also need...
+<pre>
+export PACKAGE_tcl=/where/tcl/is/installed
+</pre>
+<P>
+When nmake works, it's absolutely great, but it's usually
+some work to get the environment right including the
+actions of tools like <tt>iffe</tt> (the AST equivalent
+of what GNU <tt>configure</tt> does).  If you're Lefty
+or Dave Korn, you already knew that.
+<P>
+<h2>Build tools for win32</h2>
+<p>See separate
+<A HREF="http://www.graphviz.org/pub/scm/graphviz2/doc/winbuild.html">
+build notes</A> for Microsoft Windows (in native mode).
+<p>
+With some persistence you can likely get Graphviz to build on
+<A HREF="http://www.research.att.com/sw/tools/uwin">UWIN</A>
+or <A HREF="http://www.cygwin.com/">Cygwin</A> installed on
+Microsoft Windows.  You will still need various third-party packages
+to enable all the Graphviz drivers.
+
+<!--------------------------------------------------------------------------
+Currently we build graphviz on Windows using the MS Visual C++ compiler only.
+The project and makefiles can be found in both the CVS tree and the source
+distribution package in the $ROOT/windows directory. ($ROOT refers
+to the directory where the source tree has been installed.)
+<p>
+Follow the step-by-step procedure given below:
+<p>
+<ol>
+<li>Open the WSH script file $ROOT/windows/winmake.wsf using a text editor
+and set the "vc" variable to the location of MS VC++ on your machine.</li>
+<p>
+<li>Download the third-party libraries/header files from
+<a href=http://www.research.att.com/sw/tools/graphviz/dist/third-party.zip>http:
+//www.research.att.com/sw/tools/graphviz/dist/third-party.zip</a>.
+Unzip the file in $ROOT directory.</li>
+<p>
+<li>Execute the $ROOT/windows/winmake.wsf file by double-clicking on the
+file within Windows Explorer.</li>
+<p>
+<li>If the script throws errors, you'll need to open the graphviz project in
+$ROOT/makearch/win32/static/graphviz.dsw using the MS Visual Studio.
+Switch to the "File View" within the MS Visual Studio and trigger project
+builds individually.</li>
+<p>
+<li>Follow step 4 for building tools in
+$ROOT/makearch/win32/static/tools.dsw.</li>
+</ol>
+
+<P>
+If you're ambitious, we have also used nmake from
+<A HREF="http://www.research.att.com/sw/tools/uwin">
+AT&amp;T UWIN</A> to build for both the UWIN environment
+and the native win32 platform.
+<pre>
+	export nativepp=-1 <br>
+	nmake CC=ncc  MSWIN32==1
+</pre>
+(the nativepp thing seems fixed in UWIN 2.25).
+<p>
+Obviously you need to have native versions
+of zlib, libpng, jpeg and freetype. (See step 2 above. Or build them
+yourself; see notes below.)
+<P>
+If you're running UWIN, of course, you can always just go
+with either the old binaries of graphviz for UWIN
+(from Dave Korn's <A HREF="http://www.research.att.com/sw/tools/uwin">UWIN
+site </A>) or build graphviz as a UWIN program using nmake or gmake.
+<br>
+<P>
+More win32 notes...
+<il>
+<P>
+<li>
+Add extra fluff to globals.h to pull in astwin32.h but #undef _UWIN
+when compiling with CC=ncc.
+</li>
+<P>
+<li>
+MSVC 5.0 C compiler may die when -O is invoked on neato/splines.c;
+this required nmakefile CC.NOOPTIMIZE.
+</li>
+<P>
+<li>
+Get cygwin versions of: zlib, png, jpeg-6b (required minor
+source mods), freetype.1.3.1.
+</li>
+<P>
+<li>
+Build zlib by <tt>configure CC=ncc --prefix=/home/users/north/src/usr</tt>
+then <tt>gmake install</tt>
+</li>
+<P>
+<li>
+Build png by copying scripts/makefile.gcc to makefile and editing slightly
+then gmake install
+</li>
+<P>
+<li>
+Build jpeg same as zlib: <tt> gmake install-lib install-headers </tt>
+</li>
+<P>
+<li>
+Needed to hand-craft a lib/lib/z to go with our libz.a in order
+to not unintentionally pull in /usr/lib/ast.lib (because of mistakenly
+binding the lib/lib/z that goes with /usr/lib/z.lib).
+</li>
+<P>
+<li>
+----------------------------------------------------------->
+We haven't tried to build tcldot or webdot in win32.
+</li>
+<h2>Unix platform-specific build notes</h2>
+<h2>AIX</h2>
+Matt Fago tells us that "--enable-shared=no" is required or the
+executables segfault after seemingly correct compiles.  (Bug #421)
+<h2>SGI</h2>
+The default Irix libjpeg is obsolescent.  We need at least
+version 62.  It wasn't at all clear to me where to get sources for
+this - eventually I found the source for v61 and patches for v62
+using a search engine.  We may eventually remove JPEG support
+(lossy compression seems good for photos, not technical diagrams)
+so if you can't get this to work, the loss of -Tjpeg is no big deal.
+<P>
+
+We found that on some platforms (Solaris?)
+gd/dotneato and freetype MUST be compiled with the 
+same C compiler (e.g. gcc, or the native cc).
+Otherwise there are are weird stack argument errors in
+the call to TT_Open_Face.  I don't have time to try
+to figure out what's wrong.
+
+<h2>Solaris</h2>
+Put /usr/ccs/bin in PATH
+
+<h2>HP-UX</h2>
+The X11 package must include /usr/contrib/X11R6
+as well as the base stuff.  For some reason GNU autoconf doesn't seem to find
+X11 in this location so you may need to add the following to the
+./configure line:
+<pre>
+--with-Xawincludedir=/usr/contrib/X11R6/include --with-Xawlibdir=/usr/contrib/X11R6/lib
+</pre>
+
+<h2>Apple Mac OS/X</h2>
+<P>
+Currently, PixelGlow (Glen Low) provides a full featured
+<A HREF="http://www.pixelglow.com/graphviz/">
+port of Graphviz</A> including a very nice Aqua-based graph
+document container.  Highly recommended. We merged his patches
+into our source, but we don't build or test on OS X. Talk to Glen.
+<P>
+The following are old pre-Pixelglow build notes:
+<P>
+dot and neato build with old make.  (Didn't bother with tcldot.)
+<P>
+There could still be problems with case-sensitive names,
+though we fixed all the ones we could find.
+<P>
+It's weird that Mac OSX declares lrand48() but it's not
+defined in any of the standard system library functions.
+
+<h2>GNU style building</h2>
+
+<pre>
+<!--
+To produce graphviz-(ver).tar.gz from CVS sources.
+
+	cvs checkout graphviz
+	cd graphviz
+	./autogen.sh
+	make dist
+-->
+To produce graphviz-(ver).tar.gz from GIT sources using cogito.
+	cg clone http://www.graphviz.org/pub/scm/graphviz2/.git
+	cd graphviz2
+or to update from GIT
+	cd graphviz2
+	cg update
+then
+	./autogen.sh
+	make dist
+
+(Cogito &amp; GIT are available from http://www.kernel.org/pub/software/scm/
+or as binary packages in Fedora-Extras )
+
+To build source and binary rpms (results are left in /usr/src/redhat/ ):
+
+	rpm -ta graphviz-(ver).tar.gz
+
+To build locally:
+
+	zcat graphviz-(ver).tar.gz | tar xfvo -
+	cd graphviz-(ver)
+	./configure
+	make
+	make install
+</pre>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/char.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+<html>
+<head>
+<title>Character Set Reference</title>
+</head>
+<body bgcolor=white>
+<h1>Character Set Reference</h1>
+<img src="Gdtclft2.2.5.example.png"
+	alt="character glyphs">
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/gd.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5593 @@
+<!-- REMEMBER TO EDIT index.html.source -->
+<head>
+<TITLE>gd 2.0.34</TITLE>
+</head>
+<body bgcolor="#FFFFFF">
+<!-- BANNER HERE -->
+<H2>gd 2.0.33</H2>
+<H3>A graphics library for fast image creation</H3>
+<H3>Follow this link to the
+<A HREF="http://libgd.org">latest version
+of this document</A>.</H3>
+<blockquote>
+<strong>UPGRADING UNIX USERS: READ THIS FIRST!</strong>
+Modern versions of gd install by default to /usr/local/lib and
+/usr/local/include. If you already have an older version of gd
+in /usr/lib and /usr/include, you may wish to use:
+<pre>
+./configure --prefix=/usr</pre> 
+To ensure that your
+new installation overwrites the old.
+<p>
+<strong>GIF support has been restored in gd 2.0.28 and above.</strong>
+The well-known patents on LZW compression held by Unisys
+have expired in all countries. British Telecom and IBM may hold related
+patents but have never chosen to require royalties for GIF applications,
+to the best of my knowledge. I am not a lawyer and cannot give
+legal advice regarding this issue. PNG remains a superior format especially
+if lossless truecolor images are needed.
+<p>
+When building from soruce, gd 2.0.33 <strong>requires</strong> that the 
+following libraries also be installed, in order to produce the related 
+image formats. The win32 binary release (bgd) already contains the
+appropriate libraries.
+You may skip libraries associated with formats you do not use:
+<p>
+libpng (see the <a href="http://www.libpng.org/pub/png/">libpng home page</a>), if you want PNG
+<p>
+zlib (see the <a href="http://www.info-zip.org/pub/infozip/zlib/">info-zip home page</a>), if you want PNG
+<p>
+jpeg-6b or later, if desired (see the <a href="http://www.ijg.org/">Independent JPEG Group home page</a>), if you want JPEG
+<p>
+If you want to use the TrueType font support, you must also
+install the <strong>FreeType 2.x library</strong>, including
+the header files. See the <a href="http://www.freetype.org/">Freetype 
+Home Page</a>, or <a href="http://freetype.sourceforge.net/">SourceForge</a>. 
+No, I cannot explain why that site is down on a particular day, and no, I 
+can't send you a copy.
+<p>
+If you want to use the Xpm color bitmap loading support, you must also
+have the X Window System and the Xpm library installed (Xpm is often
+included in modern X distributions). Most of the time you won't
+need Xpm.
+<p>
+Please read the documentation and install the required libraries.
+Do not send email asking why <code>png.h</code> is not found. 
+Do not send email asking why <code>libgd.so</code> is not found, either.
+See the <a href="#required">requirements section</a> for more
+information. Thank you!
+</blockquote>
+<H3>Table of Contents</H3>
+<UL>
+<LI><A HREF="#notice">Credits and license terms</A>
+<LI><A HREF="#whatsnew2.0.34">What's new in version "XYZ" of GD?</A>
+<LI><A HREF="#whatis">What is gd?</A>
+<LI><A HREF="#gdother">What if I want to use another programming language?</A>
+<LI><A HREF="#required">What else do I need to use gd?</A>
+<LI><A HREF="#getgd">How do I get gd?</A>
+<LI><A HREF="#buildgd">How do I build gd?</A>
+<LI><A HREF="#basics">gd basics: using gd in your program</A>
+<LI><A HREF="#webpng">webpng: a useful example</A>
+<LI><A HREF="#reference">Function and type reference by category</A>
+<LI><A HREF="#gdformat">About the additional .gd image file format</A>
+<LI><A HREF="#informing"><strong>Please</strong>
+ tell us you're using gd!</A>
+<LI><A HREF="#support">How do I get support?</A>
+<LI><A HREF="#issues">How do I report issues, bugs or features request?</A>
+<LI><A HREF="#index">Alphabetical quick index</A>
+</UL>
+<P><A HREF="http://www.libgd.org/">
+Up to the <EM>LibGD Homepage</EM></A>
+<A NAME="notice"><H3>Credits and license terms</A></H3>
+<P>
+In order to resolve any possible confusion regarding the authorship
+of gd, the following copyright statement covers all of the authors
+who have required such a statement. <strong>If you are aware of any oversights
+in this copyright notice, please contact <A HREF="http://libgd.org/Contact">Pierre-A. Joye</A> who will be
+pleased to correct them.</strong>
+<pre>
+COPYRIGHT STATEMENT FOLLOWS THIS LINE
+</pre>
+<blockquote>
+
+Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 by Cold Spring
+Harbor Laboratory. Funded under Grant P41-RR02188 by the National
+Institutes of Health.
+<P>
+Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 by Boutell.Com, Inc.
+<p>
+Portions relating to GD2 format copyright 1999, 2000, 2001, 2002, 2003, 2004 Philip Warner.
+<p>
+Portions relating to PNG copyright 1999, 2000, 2001, 2002, 2003, 2004 Greg Roelofs.
+<p>
+Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002, 2003, 2004 John Ellson (ellson@graphviz.org).
+<p>
+Portions relating to gdft.c copyright 2001, 2002, 2003, 2004 John Ellson (ellson@graphviz.org).
+<p>
+Portions copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Pierre-Alain Joye (pierre@libgd.org).  
+
+<p>
+Portions relating to JPEG and to color quantization copyright 2000, 2001, 2002, 2003, 2004, Doug Becker and copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Thomas G. Lane.  This software is based 
+in part on the work of the Independent JPEG Group. See the file
+README-JPEG.TXT for more information.
+<p>
+Portions relating to GIF compression copyright 1989 by Jef
+Poskanzer and David Rowley, with modifications for thread safety
+by Thomas Boutell.
+<p>
+Portions relating to GIF decompression copyright 1990, 1991, 1993 
+by David Koblas, with modifications for thread safety by
+Thomas Boutell.
+<p>
+Portions relating to WBMP copyright 2000, 2001, 2002, 2003, 2004 Maurice Szmurlo and Johan Van 
+den Brande.
+<p>
+Portions relating to GIF animations copyright 2004 Jaakko Hyv&auml;tti (jaakko.hyvatti@iki.fi)
+<p>
+<strong>Permission has been granted to copy, distribute and modify gd in any
+context without fee, including a commercial application, provided that this notice
+is present in user-accessible supporting documentation.</strong>
+<p>
+This does not affect your ownership of the derived work itself, and the intent
+is to assure proper credit for the authors of gd, not to interfere
+with your productive use of gd. If you have questions, ask.
+"Derived works" includes all programs that utilize the library.
+Credit must be given in user-accessible documentation.
+<p>
+<strong>This software is provided "AS IS."</strong>
+The copyright holders disclaim all warranties, either express or implied,
+including but not limited to implied warranties of merchantability and
+fitness for a particular purpose, with respect to this code and accompanying
+documentation.
+<p>
+Although their code does not appear in the current release, the authors
+also wish to thank Hutchison Avenue Software Corporation for their
+prior contributions.
+</blockquote>
+<pre>
+END OF COPYRIGHT STATEMENT
+</pre>
+<A NAME="whatis"><H3>What is gd?</H3></A>
+<P>
+gd is a graphics library. It allows your code to quickly
+draw images complete with lines, arcs, text, multiple
+colors, cut and paste from other images, and flood fills, and
+write out the result as a PNG or JPEG file. This is particularly
+useful in World Wide Web applications, where PNG and JPEG are two
+of the formats accepted for inline images by most browsers.
+<P>
+gd is not a paint program.
+If you are looking for a paint program, you are looking in
+the wrong place. If you are not a programmer, you are looking
+in the wrong place, unless you are installing a required
+library in order to run an application.
+<P>
+gd does not provide for every possible desirable graphics
+operation. It is not necessary or desirable for gd to become
+a kitchen-sink graphics package, but version 2.0 does include
+most frequently requested features, including both truecolor and
+palette images, resampling (smooth resizing of truecolor images)
+and so forth.
+<P>
+<A NAME="gdother"><H3>What if I want to use another programming
+language?</h3></A>
+Not all of these tools are necessarily up to date and fully compatible
+with 2.0.33.
+<h4>PHP</h4>
+A variant of gd 2.x is included in PHP 4.3.0. It is also possible
+to patch PHP 4.2.3 for use with gd 2.0.33; see the
+<a href="http://www.libgd.org/">gd home page</a> for a link to
+that information. It would be a Good Idea to merge all of the things
+that are better in mainstream gd and all of the things that are
+better in PHP gd at some point in the near future. 
+<h4>Perl</h4>
+gd can also be used from Perl, courtesy of
+Lincoln Stein's
+<a href="http://stein.cshl.org/WWW/software/GD/">
+GD.pm</a> library, which uses gd as the basis for a set of
+Perl 5.x classes. Highly recommended.
+<h4>OCaml</h4>
+gd can be used from OCaml, thanks to
+<a href="http://gd4o.sourceforge.net/">Matt Gushee's GD4O project</a>.
+<h4>Tcl</h4>
+gd can be used from Tcl with John Ellson's
+<a href=http://www.graphviz.org/pub/>Gdtclft</a>
+dynamically loaded extension package.
+<h4>Pascal</h4>
+Pascal enthusiasts should look into the
+<a href="http://www.freepascal.org/">freepascal</a> project, a
+free Pascal compiler that includes gd support.
+<h4>REXX</h4>
+A 
+<a href="http://www.lightlink.com/hessling/RexxGd/index.html">gd interface 
+for the REXX language</a> is available.
+<h4>Any Language</h4>
+The "fly" interpreter performs gd operations specified in a text file.
+You can output the desired commands to a simple
+text file from whatever scripting language you prefer to use, then
+invoke the interpreter.
+<p>
+<ul>
+<li><a href="http://martin.gleeson.com/fly/">fly</a>, by Martin Gleeson
+</ul>
+<p>
+<A NAME="whatsnew2.0.34"><h3>What's new in version 2.0.34?</h3></a>
+<p>
+From 2.0.34 and later, please check the ISSUES and ChangeLog as well as 
+the releases announcements.
+<p>
+<A NAME="whatsnew2.0.33"><h3>What's new in version 2.0.33?</h3></a>
+<p>
+Version 2.0.33 restores compatibility with older releases
+of Freetype 2.x in addition to the latest release. Thanks to
+John Ellson and the graphviz project.
+<p>
+<A NAME="whatsnew2.0.32"><h3>What's new in version 2.0.32?</h3></a>
+<p>
+Version 2.0.32 restores correct detection of Unicode character sets
+for freetype fonts, which repairs a bug that prevented umlauts from
+displaying properly. Thanks to John Ellson and the graphviz project.
+Also, version 2.0.32 builds all test programs 
+smoothly in the absence of libpng. 
+<p>
+<A NAME="whatsnew2.0.31"><h3>What's new in version 2.0.31?</h3></a>
+<p>
+A minor type naming conflict prevented bgd.dll from compiling, and it
+was left out of the distribution as a result. This has been corrected.
+<p>
+<A NAME="whatsnew2.0.30"><h3>What's new in version 2.0.30?</h3></a>
+<p>
+2.0.29 did not compile correctly when freetype was not available.
+This has been corrected. Thanks to Alessandro Ranellucci.
+<p>
+<A NAME="whatsnew2.0.29"><h3>What's new in version 2.0.29?</h3></a>
+<p>
+<ul>
+<li>A 32-bit multiplication overflow vulnerability reported on
+the Bugtraq mailing list has been corrected, along with a number
+of similar issues. These bugs come into play only when attempting
+to deal with images with <i>extremely large</i> dimensions.
+The relevant functions now fail gracefully when such extreme
+parameters are specified. The code in question is also 
+correct for systems with larger bit depths. Thanks to Phil Knirsch,
+Alan Cox and infamous41md.
+Since exploits are theoretically possible, upgrading is recommended.
+<li>Support for the fontconfig library, when available. 
+When fontconfig is available and gdFTUseFontConfig(1) has been invoked
+or the gdFTEX_FONTCONFIG flag has been set for a particular call, fontconfig
+patterns can be used to fetch the best available font. 
+For instance, "arial:bold:italic" does the right thing (or as close as
+the available fonts permit). Also, standard 
+PostScript font names can be mapped to an appropriate font by 
+gdImageStringFTEx and relatives. 
+When fontconfig is available <tt>gdlib-config --features</tt> will list
+the GD_FONTCONFIG feature. For more information about fontconfig, see the
+<a href="http://freedesktop.org/software/fontconfig">fontconfig pages</a>.
+<p>
+The actual resolved font filename can be returned in the gdFTStringExtra
+structure as the fontpath element if the gdFTEX_RETURNFONTPATHNAME flag
+is set. Also, a 
+vector of character position advances can be retrieved if gdFTEX_XSHOW is set 
+in the flags element. .afm files (font metrics) are now used to adjust size 
+calculations
+when available. When fontconfig is not available, gd falls back to its
+usual behavior and requires a specific font file name. One can
+still fetch fonts by filename when gdFTUseFontConfig(1) is in effect, by
+setting the gdFTEX_FONTPATHNAME flag
+in the flag element of the gdFTStringExtra structure. Thanks to
+Dag Lem and John Ellson.
+<li>Additional freetype fixes: fixed width fonts are now the right
+size, horizontal advance calculations now better match the
+PostScript equivalent, and various compiler warning fixes. Also,
+a fix to the encoding table selection in the was made, addressing a problem
+with latin1 font encodings. Thanks to Dag Lem and John Ellson. 
+<li>Improved tolerance when reading JPEG files containing some garbage as well
+as valid image data.
+<li>Easier compilation on Windows: no errno.h in gd_gd2.c.
+<li>Support for creating optimized GIF animations has been added
+ by Jaakko Hyv&auml;tti.  See
+ <A HREF="#gdImageGifAnimAdd">gdImageGifAnimAdd</A>,
+ <A HREF="#gdImageGifAnimAddCtx">gdImageGifAnimAddCtx</A>,
+ <A HREF="#gdImageGifAnimAddPtr">gdImageGifAnimAddPtr</A>,
+ <A HREF="#gdImageGifAnimBegin">gdImageGifAnimBegin</A>,
+ <A HREF="#gdImageGifAnimBeginCtx">gdImageGifAnimBeginCtx</A>,
+ <A HREF="#gdImageGifAnimBeginPtr">gdImageGifAnimBeginPtr</A>,
+ <A HREF="#gdImageGifAnimEnd">gdImageGifAnimEnd</A>,
+ <A HREF="#gdImageGifAnimEndCtx">gdImageGifAnimEndCtx</A>, and
+ <A HREF="#gdImageGifAnimEndPtr">gdImageGifAnimEndPtr</A>.
+<li><A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A> has been
+ added to allow consecutive line segments to be drawn without
+ connecting the end points to form a closed polygon. Thanks to
+Jaakko Hyv&auml;tti.
+<li>Better alpha channel blending when the destination color
+contains an alpha channel. Also, quicker handling of the
+most common cases. Thanks to Frank Warmerdam.
+</ul>
+<P>
+<A NAME="whatsnew2.0.28"><H3>What's new in version 2.0.28?</H3></A>
+<P>
+<ul>
+<li>GIF support has been restored. See
+<a href="#gdImageGif">gdImageGif</a>, 
+<a href="#gdImageGifCtx">gdImageGifCtx</a>, 
+<a href="#gdImageGifPtr">gdImageGifPtr</a>, 
+<a href="#gdImageCreateFromGif">gdImageCreateFromGif</a>, 
+<a href="#gdImageCreateFromGifCtx">gdImageCreateFromGifCtx</a>, 
+and <a href="#gdImageCreateFromGifPtr">gdImageCreateFromGifPtr</a>.
+These functions are now thread-safe, similar to the PNG and JPEG
+manipulation functions.
+<li>The new <a href="#gdImageCreatePaletteFromTrueColor">gdImageCreatePaletteFromTrueColor</a> function is identical to <a href="#gdImageTrueColorToPalette">gdImageTrueColorToPalette</a>, except that it returns a new image rather than permanently modifying the original.
+</ul>
+<P>
+<A NAME="whatsnew2.0.27"><H3>What's new in version 2.0.27?</H3></A>
+<P>
+<ul>
+<li>In gd 2.0.26, there was potential for out of bounds fills, and therefore
+crashes, in the horizontalLine function used by gdImageFilledPolygon.
+Fixed by John Ellson.
+<li>The order of the points returned in the bounding rectangle by
+gdImageStringFT was incorrect in version 2.0.26. This has been
+corrected in version 2.0.27. Thanks to Riccardo Cohen for pointing
+this out, and to John Ellson for verifying and fixing it.
+</ul>
+<P>
+<A NAME="whatsnew2.0.26"><H3>What's new in version 2.0.26?</H3></A>
+<P>
+The following enhancements and fixes:
+<ul>
+<li>Drastically faster, less memory-intensive antialiased drawing, thanks to
+Pierre-Alain Joye. This code was imported from the PHP "fork"
+of gd. The API for antialiased drawing has not changed, however the
+implementation has been completely replaced.
+Antialiased line drawing does not support widths other
+than 1, however this did not work properly with the other
+implementation of antialiasing either. Support has been included
+for the "non-blending color" option introduced by the previous
+implementation of antialiased drawing.
+<li><code>gdlib-config</code>, which has been installed by 
+<code>make install</code> for some time now, has gained
+a <code>--features</code> option. This option produces a space-separated
+list of optional features with which the gd library was compiled.
+Typical usage looks like this:
+<pre>
+% gdlib-config --features
+GD_XPM GD_JPEG GD_FREETYPE GD_PNG GD_GIF
+</pre>
+Other <code>configure</code> scripts can conveniently define
+preprocessor symbols based on this list in order to conditionally
+compile code. For instance, if
+GD_PNG is not reported by --features, then gdImagePng is not
+included in the library.
+<p>
+Thanks to Lars Hecking and Lincoln Stein for their advice on
+implementing this feature. Any blame for the actual implementation
+is entirely due to me (TBB).
+<li>Fixes to the behavior of the bounding rectangle returned by
+gdImageStringFT and relatives when the string is rotated.
+See fontwheeltest.c. Thanks to John Ellson.
+<li>Previously, gdImageStringFT and friends accepted either 
+a full path to a font file, or the name of a font with no
+extension, in which case the GDFONTPATH environment variable
+and then the compiled-in DEFAULT_FONTPATH was searched. In addition,
+a font filename with an extension but no full path can now be
+automatically searched for in the same fashion. Thanks to John Ellson.
+
+<li>Fixes to freetype antialiased text against a transparent 
+background. See testtr.c. Thanks to John Ellson.
+
+<li>Support for named entities like &amp;amp; and hex-coded 
+entities such as &amp;#x6C34; in text 
+strings passed to gdImageStringFT and relatives, adding to the 
+previous support for decimal-coded entities like &amp;#197;. 
+These were extracted from entities.html (from the W3C) via
+the script entities.tcl, which is included for the curious and
+those with other entities they need support for.  Thanks to John Ellson.
+
+<li>Optimization: gdImageSetPixel no longer calls gdImageAlphaBlend 
+when either the source or the destination pixel is 100% transparent. 
+Thanks to John Ellson.
+
+<li>Optimization: gdImageLine is potentially faster now in the most 
+common cases.
+Thanks to John Ellson.
+<li>Documentation of the entities feature of gdImageStringFT.
+<li>autoconf/configure fixes. Thanks to many who pointed out an oversight
+in handling libpng flags.
+</ul>
+<P>
+<A NAME="whatsnew2.0.25"><H3>What's new in version 2.0.25?</H3></A>
+<P>
+Owing to an oversight while making changes to better accommodate the use
+of gd as a DLL, the <b>extern</b> qualifier was dropped from the 
+declarations of font pointers in 2.0.24. This has been corrected.
+Thanks to Richard ("OpenMacNews").
+<P>
+<A NAME="whatsnew2.0.24"><H3>What's new in version 2.0.24?</H3></A>
+<P>
+<b>Windows DLL now uses __stdcall calling convention.</b> Existing
+applications will require a recompile, using the new version of gd.h,
+in order to use this version of the DLL. However, Visual BASIC and other
+non-C programmers will now be able to use the DLL, which is an enormous
+benefit and justifies the one-time inconvenience to existing DLL users. 
+<p>
+The elaborate #ifdef test for older versions of Freetype without
+FT_ENCODING_MS_SYMBOL was needed in a second place also. Thanks to
+David R. Morrison.
+<p>
+An off-by-one error in gdImageToPalette caused transparency to be applied
+to the wrong pixels. Thanks to "Super Pikeman."
+<P>
+<A NAME="whatsnew2.0.23"><H3>What's new in version 2.0.23?</H3></A>
+<P>
+Output dpi specification option added to the
+<code>gdFTStringExtra</code> structure, thanks to
+Mark Shackelford. See <a href="#gdImageStringFTEx">gdImageStringFTEx</a>.
+<P>
+<A NAME="whatsnew2.0.22"><H3>What's new in version 2.0.22?</H3></A>
+<P>
+<ul>
+<li>Win32 DLL users: working with pointers exported by DLLs is 
+difficult and causes unexpected results. gd 2.0.22 exports new
+functions for retrieving the basic gd fonts:
+<a href="#gdFontGetTiny">gdFontGetTiny()</a>,
+<a href="#gdFontGetSmall">gdFontGetSmall()</a>,
+<a href="#gdFontGetMediumBold">gdFontGetMediumBold()</a>,
+<a href="#gdFontGetLarge">gdFontGetLarge()</a>, and
+<a href="#gdFontGetHuge">gdFontGetHuge()</a>. You may safely assign the
+return values from these functions to a local <code>gdFontPtr</code>.
+Direct use of <code>gdFontLarge</code>, etc. is strongly deprecated
+for users of <code>bgd.dll</code>; use these new functions instead.
+<li>Basic support for loading CMYK-colorspace JPEG images. They are
+of course converted to RGB which is a lossy process, however the
+results do look quite good and are certainly fine for thumbnails and
+web previews of DTP work.
+<li>"make" no longer fails on <code>circletexttest</code> if 
+PNG support is missing. 
+<li>Small performance improvements to gdImageCopyResampled; larger
+improvements are forthcoming.
+</ul>
+<P>
+<A NAME="whatsnew2.0.21"><H3>What's new in version 2.0.21?</H3></A>
+<P>
+<ul>
+<li>Version 2.0.21 adds a <code>gdImageCreateFrom*Ptr</code> family
+of functions which make it convenient to load an image in any
+GD-supported format directly from memory.
+<li>The new <code>gdNewDynamicCtxEx</code> function was added to
+support the easy implementation of the above functions and to
+correct a design problem which made life unpleasant for those passing
+in memory not originally allocated by gd to the 
+<code>gdNewDynamicCtx</code> function by provoding a way to specify
+that gd should never free or reallocate a particular block of memory.
+The <code>gdNewDynamicCtx</code> function and its relatives, although
+still exported for ABI compatibility, are now <b>deprecated</b> except 
+for internal use, in favor of <a href="#gdImageCreateFromPngPtr"><code>gdImageCreateFromPngPtr</code></a>
+and its relatives.
+<li>Version 2.0.21 includes a new patch from Ethan A. Merritt to
+correct a bug in the conditional compilation of support for
+symbol fonts in gdft.c. Symbol fonts should now work correctly.
+Thanks to Mr. Merritt.
+<li>Version 2.0.20 restores the <code>gdFreeFontCache</code> function,
+an undocumented function added in an earlier release which now simply
+calls <code>gdFontCacheShutdown</code> for backwards compatibility.
+This repairs build problems when compiling PHP against the latest gd.
+<li>Documentation improvements.
+</ul>
+<P>
+<A NAME="whatsnew2.0.20"><H3>What's new in version 2.0.20?</H3></A>
+<P>
+<ul>
+<li>Version 2.0.20 restores the <code>gdFreeFontCache</code> function,
+an undocumented function added in an earlier release which now simply
+calls <code>gdFontCacheShutdown</code> for backwards compatibility.
+This repairs build problems when compiling PHP against the latest gd.
+</ul>
+<P>
+<A NAME="whatsnew2.0.19"><H3>What's new in version 2.0.19?</H3></A>
+<P>
+<ul>
+<li>Version 2.0.19 restored <code>extern</code> declarations for the
+gd font pointers inadvertently removed in 2.0.18.
+</ul>
+<P>
+<A NAME="whatsnew2.0.18"><H3>What's new in version 2.0.18?</H3></A>
+<P>
+<ul>
+<li>A Win32 binary distribution of "bgd.dll," built with mingw32 and
+tested with win32 versions of the demo programs as console applications,
+is now available.
+<li>Semicolon rather than space used as the default separator of
+alternative font file paths in <a href="#gdImageStringFT">gdImageStringFT</a>,
+for better compatibility with Windows and other environments where
+spaces are common in paths.
+<li>The circletexttest demo no longer fails to compile when JPEG
+support happens to be absent.
+</ul>
+<P>
+<A NAME="whatsnew2.0.17"><H3>What's new in version 2.0.17?</H3></A>
+<P>
+Minor compilation and packaging problems with 2.0.16 were corrected.
+If 2.0.16 compiled without errors for you, then you don't need
+to upgrade to 2.0.17.
+<P>
+<A NAME="whatsnew2.0.16"><H3>What's new in version 2.0.16?</H3></A>
+<P>
+<ul>
+<li>Thread safety for freetype text output. Background: all gd functions
+were already thread safe, as long as only one thread manipulates each
+image -- except for gdImageStringFT and gdImageStringFTEx. This is because
+of a shared freetype font cache. Sharing the cache between images
+is worthwhile, so "configure" now detects pthreads and uses it to
+wrap freetype text output in a critical section if available. There is
+also critical section support under WIN32. Those who wish to be
+strictly thread-safe should call the new function
+<a href="#gdFontCacheSetup">gdFontCacheSetup</a> before allowing any
+thread to use freetype text calls. Otherwise this function is automatically
+invoked on the first use of freetype, with a very small but real chance
+of a race condition.
+<li><a href="#gdImageSquareToCircle">gdImageSquareToCircle</a> performs
+a "polar coordinate transform," returning a new image in which the
+X axis of the original has been remapped to theta (angle) and the
+Y axis of the original has been remapped to rho (distance from center).
+<li><a href="#gdImageStringFTCircle">gdImageStringFTCircle</a> wraps
+text in a circle around a specified center point. This function 
+takes advantage of <a href="#gdImageSquareToCircle">gdImageSquareToCircle</a>.
+The result is very smooth, although it takes some time to compute.
+Thanks to Steve Bassi for sponsoring this work.
+<li><a href="#gdImageSharpen">gdImageSharpen</a>, contributed by
+Paul Troughton. Thank you.
+<li>Christophe Thomas corrected gdft.c to include freetype header
+files in the way that is now mandatory in freetype 2.1.6 and above.
+<li>Gustavo Scotti fixed a memory leak in gdft.c.
+<li>Clipping rectangle respected in freetype text output. Thanks to Matt
+McNabb.
+<li>Paul den Dulk found a degenerate case that crashes
+gdImageToPalette. Fixed.
+<li>Optimization by Ilia Chipitsine to avoid wasting time with
+offscreen scanlines during polygon rasterization.
+<li>Optimized PNG saving by Phong Tran. Speeds up saves a 
+little bit. 
+<li>Bug in gdImageCopyResized fixed by Mao Morimoto.
+</ul>
+<P>
+<A NAME="whatsnew2.0.15"><H3>What's new in version 2.0.15?</H3></A>
+<P>
+<ul>
+<li>gd.c in 2.0.14 contained an instance of declaring variables
+after the first line of executable code appears. This is of course
+not allowed by ANSI C, although many compilers accept it. 
+My apologies. Thanks to Jeff Vendetti for reporting this quickly.
+</ul>
+<P>
+<A NAME="whatsnew2.0.14"><H3>What's new in version 2.0.14?</H3></A>
+<P>
+<ul>
+<li>2.0.13 was available for mere minutes due to a typo
+in the new bounds-checking code for antialiased line drawing. Fixed.
+<li>Not all platforms -- notably msys/mingw -- have an ssize_t type.
+We now call an int an int in gd_jpeg.c, with good results. 
+(Note: ssize_t is signed, unlike size_t, and it needs to be here.)
+</ul>
+<P>
+<A NAME="whatsnew2.0.13"><H3>What's new in version 2.0.13?</H3></A>
+<P>
+<ul>
+<li>The <code>main()</code> function of one of the test programs
+was accidentally included in the gd shared library, causing problems
+on some platforms. This has been corrected. Thanks to many people
+who pointed this out.
+<li>The antialiased drawing functions now have proper bounds
+checking. Thanks to Arne Jorgensen.
+<li>A void function returned a value in gd_png.c, causing warnings
+and, on some platforms, compilation errors but no reported runtime problems.
+Thanks to Kevin Smith, among others.
+<li>Autohinting was being forced ON for freetype text output. This is
+apparently meant only for testing freetype and does not look as good
+as the default behavior (FT_LOAD_DEFAULT). Thanks to Bob Ostermann.
+<li>penf.x is properly reset when newlines are encountered in freetype
+text output. Thanks to Christopher J. Grayce.
+</ul>
+<P>
+<A NAME="whatsnew2.0.12"><H3>What's new in version 2.0.12?</H3></A>
+<P>
+<ul>
+<li>Small but numerous code cleanups by Dr. Martin Zinser.
+<li><a href="#gdImageSetClip">gdImageSetClip</a> and
+<a href="#gdImageGetClip">gdImageGetClip</a> have been added. All
+drawing routines now stay within the specified clipping rectangle.
+Note that the <a href="#gdImageBoundsSafe">gdImageBoundsSafe</a> function
+now returns true only if the specified location is within the
+clipping rectangle. Of course, the default clipping area is the 
+entire image. The behavior of existing gd applications does not change.
+<li>Support for fast drawing of antialiased lines and polygons,
+by Bright Fulton and Frank Faubert. To learn more about this feature,
+read about the <a href="#gdImageSetAntiAliased">gdImageSetAntiAliased</a> 
+function, which is used to set the foreground color for antialiasing,
+as well as the <a href="#gdAntiAliased">gdAntiAliased</a> constant, which
+is passed to line- and polygon-drawing functions in place of a color.
+This code does not currently support an alpha channel component in the
+specified foreground color, or in the existing background image, 
+but <em>does</em> perform alpha blending against an opaque background.
+Also see the 
+<a href="#gdImageSetAntiAliasedDontBlend">gdImageSetAntiAliasedDontBlend</a> 
+function, which allows the specification of a special background
+color that should never be blended with the foreground.
+<li>Fixes to color mapping in <a href="#gdImageCopyMergeGray">gdImageCopyMergeGray</a>. Thanks to Philip Warner.
+<li><a href="#gdImageStringFTEx">gdImageStringFTEx</a> now supports
+explicit specification of the desired character mapping.
+This is useful when a font offers more than one of Unicode,
+Shift_JIS, and Big5. 
+<li>The PNG compression level can now be specified when writing PNG
+images. See the new <a href="#gdImagePngEx">gdImagePngEx</a>,
+<a href="#gdImagePngEx">gdImagePngEx</a>,
+<a href="#gdImagePngCtxEx">gdImagePngCtxEx</a>, and
+<a href="#gdImagePngPtrEx">gdImagePngPtrEx</a> functions.
+<li>The annotate utility builds without error in the absence of
+freetype, although of course it is not useful without freetype.
+<li>Thorben Kundinger fixed a bug relating to the use of palette-based
+images as brushes when drawing on truecolor images.
+<li>Michael Schwartz corrected a problem with his code for drawing
+thick lines.
+<li>Prior to 2.0.12, any alpha channel component in the
+<em>destination</em> image was ignored when drawing with
+alpha blending in effect (see 
+<a href="#gdImageAlphaBlending">gdImageAlphaBlending</a>). 2.0.12
+correctly preserves an appropriate proportion of the alpha component
+of the destination, just as it preserves an appropriate proportion
+of the red, green and blue components, depending on the opacity
+of the foreground. Thanks to Frank Warmerdam for pointing out the issue.
+<li>Memory leaks on failed attempts to load fonts
+in <a href="#gdImageStringFTEx">gdImageStringFTEx</a> were corrected.
+Thanks to Frank Faubert.
+<li>The impact of kerning is now correctly included in the calculation
+of the bounding box returned by the freetype text routines. This issue
+was pointed out by several individuals.
+<li>Color problems with the <code>gd2</code> file format routines
+were fixed by Steven Brown. These problems were due to the
+incorrect use of a signed integer.
+<li>Version 2.0.12 supports the <code>gd</code> file format correctly
+for truecolor images. Truecolor <code>gd</code> files created with
+earlier releases in the 2.0 series must be written again. The <code>gd</code>
+file format is used to quickly load an entire uncompressed image, typically 
+an existing background to which additional material will be added; it is not a 
+general purpose file format. More advanced capabilities are also available
+via the <code>gd2</code> format. Thanks to Andreas Pfaller for reporting 
+the problem. 
+<li>Signed vs. unsigned problem caused misbehavior when attempting to
+load a bad JPEG image. Thanks to Geert Jansen.
+<li>Existing truecolor PNG images with simple single-color transparency are 
+now loaded properly, thanks to Slaven Rezic.
+<li>The <a href="#gdImageTrueColorToPalette">gdImageTrueColorToPalette</a>
+function no longer attempts to preserve an alpha channel in the original.
+My attempt to do so resulted in significantly inferior output even if no
+alpha channel was present in the original. Thanks to Barend Gehrels for
+submitting a new adaptation of Tom Lane's jquant2.c which does a very
+high-quality job of palette conversion. Thanks also to Steven Brown, who
+submitted patches allowing a single 100% transparent color in the
+original truecolor image to be preserved. In practice, more complex 
+alpha channels in palettes are ill-supported and difficult to 
+allocate skillfully.
+</ul>
+<P>
+<A NAME="whatsnew2.0.11"><H3>What's new in version 2.0.11?</H3></A>
+<P>
+<ul>
+<li>Support for the "gd2" file format, which allows fast loading of all or
+only part of an existing image, has been properly debugged for use with
+truecolor images. (Palette images already worked properly, except for a
+bug when loading from a regular file with gdImageCreateFromGd2Part, which
+has also been fixed.) .gd2 files can be either compressed or uncompressed,
+and they allow useful tricks such as fast loading of a 500x500 pixel
+region of a 6000x3000 pixel image, without uncompressing <em>all</em> of the
+image. .gd2 is NOT a general purpose file format and should only be used
+where quick loading of a background image or subset of a larger image
+is required. For more information, see
+<a href="#gdImageGd2">gdImageGd2</a>, 
+<a href="#gdImageCreateFromGd2">gdImageCreateFromGd2</a>,
+and 
+<a href="#gdImageCreateFromGd2Part">gdImageCreateFromGd2Part</a>.
+<li>The gd2topng utility has been extended to support extraction of
+only part of an image from a .gd2 file. This is both a demonstration and 
+a practical tool.
+<li>Additional <code>configure</code> improvements by Lars Hecking.
+</ul>
+<P>
+<A NAME="whatsnew2.0.10"><H3>What's new in version 2.0.10?</H3></A>
+<P>
+<ul>
+<li>gdImageLine now clips to the edges of the image before drawing
+lines, which greatly improves performance when many lines extend
+outside or are entirely outside the actual image. Thanks to 
+Nick Atty for this code.
+<li>gdImageBoundsSafe is replaced with a macro when called internally;
+this improves the performance of gdImageSetPixel and gdImageGetPixel
+a little bit, and therefore everything else as well. Thanks to
+Nicky Atty for the idea.
+<li>Transparent indexes are handled properly with non-truecolor
+source images in gdImageCopy. Thanks to Frank Warmerdam.
+<li>floor() replaced with a cast to long in gdImageCopyResampled,
+for a roughly 35% performance boost. Thanks to John Buckman.
+<li>gdft.c builds correctly on WIN32 without patches.
+<li>Much faster gdImageCreateFromJpeg routines, thanks to Christian
+Aberger for more efficient pointer arithmetic.
+<li>gdtestft correctly builds without PNG tests if PNG support is not present.
+Thanks to Gabriele Verzeletti.
+</ul>
+<P>
+<A NAME="whatsnew2.0.9"><H3>What's new in version 2.0.9?</H3></A>
+<P>
+<ul>
+<li>Version 2.0.9 contains a fix to gdImageCopyResized which allows
+correct results when copying a palette-based image with a single
+transparent index into a truecolor image. Thanks to Thorben
+Kundinger.
+<li>More <code>configure</code> fixes from Lars Hecking. Thanks, Lars. 
+</ul>
+<P>
+<A NAME="whatsnew2.0.8"><H3>What's new in version 2.0.8?</H3></A>
+<P>
+<ul>
+<li>Version 2.0.8 contains additional fixes to the 'configure' script,
+allowing a clean out-of-the-box build on more systems.
+<li>Version 2.0.8 adds the new 
+<a href="#gdImageCopyRotated">gdImageCopyRotated</a> function, which
+can rotate any rectangular image region by an arbitrary number of degrees.
+</ul>
+<P>
+<A NAME="whatsnew2.0.7"><H3>What's new in version 2.0.7?</H3></A>
+<P>
+Version 2.0.7 corrects a problem which caused 'configure' to complain
+that the directory NONE was not found, in various places, causing
+the configuration process to stop. There are no code changes.
+<P>
+<A NAME="whatsnew2.0.6"><H3>What's new in version 2.0.6?</H3></A>
+<P>
+<ul>
+<li>
+Fixed a compilation problem with gdft.c. A declaration appeared
+after executable code, and gcc let it slide by, so it made it
+out the door. My apologies!
+<li>As penance, I have seen to it that the entire library
+now compiles cleanly with the <code>-Wall</code>, <code>-ansi</code>
+and <code>-pedantic</code> options enabled.
+</ul>
+<p>
+<A NAME="whatsnew2.0.5"><H3>What's new in version 2.0.5?</H3></A>
+<ul>
+<li>libgd 2.0.5 INSTALLS IN /usr/local/lib BY DEFAULT. IF YOU WANT
+IT TO INSTALL IN /usr/lib, YOU MUST SPECIFY THIS at
+<code>configure</code> time using this syntax:
+<p>
+<code>./configure --prefix=/usr</code> 
+<li>gd now uses GNU autoconf. This means that the provided
+<code>configure</code> script should be compatible with all standard
+GNU configure options and will figure out the correct settings for a
+much wider range of operating systems. Many, many thanks to
+Lars Hecking for taking care of this.
+<li>The <a href="#gdImageStringFTEx">gdImageStringFTEx</a> function
+is now included, thanks to Wez Furlong. My apologies to Wez for the
+unreasonable amount of time this patch has sat in my queue.
+<li>Additional fixes from Wez Furlong.
+<li>Arithmetic cleanup by Doug Claar.
+<li>Corrections to loading and saving of alpha channel
+information in PNG files, by Andrew Hull.
+<li>gdImageTrueColorToPalette does not contain
+unneeded test code.
+<li>gdImageCopyResized works properly again when copying
+from a non-truecolor source.
+</ul>
+<P>
+<A NAME="whatsnew2.0.4"><H3>What's new in version 2.0.4?</H3></A>
+The following contributions from John Ellson:
+<ul>
+<li>Various test programs now compile in the absence
+of PNG support
+<li>gdIOCtx correctly calls gdFree rather than free
+<li>Various cleanups to pass -Wall without warnings
+<li>Support for Adobe-style Type 1 fonts (.pfa and .pfb files)
+via freetype
+<li>gdImageColorResolve and gdImageColorResolveAlpha will not
+attempt to resolve a color request to the transparent color index
+(for palette-based images)
+<li>Improved font search path support
+<li>Antialiased freetype text on palette images works properly
+when more than one image is created in a single program lifetime
+with different color indexes
+<li>Better threshold for two-color "mono" images 
+<li>Memory leak fixes
+<li>Text rotation fix
+<li>More extensive default font path
+<li>fontwheeltest and fontsizetest test programs for freetype
+</ul>
+And the following additional fixes:
+<ul>
+<li><code>configure</code> now correctly detects and provides
+support for the Xpm library and its dependencies (Len Makin)
+</ul>
+<A NAME="whatsnew2.0.3"><H3>What's new in version 2.0.3?</H3></A>
+<ul>
+<li>The <code>configure</code> script has been extensively modified
+to work properly in tests with both Solaris and Linux. Other platforms
+should also work based on feedback received and integrated to date.
+<li>The <code>--prefix</code> option to <code>configure</code>
+works properly.
+<li>The <code>annotate</code> utility has been added. This is a
+very handy tool for adding freetype text to existing JPEGs. After
+<code>make install</code>, type <code>annotate -h</code> for more 
+information. Thanks to Joel Dubiner.
+</ul>
+<P>
+<A NAME="whatsnew2.0.2"><H3>What's new in version 2.0.2?</H3></A>
+<ul>
+<li>A "configure" script has been added. After wrestling with GNU
+autoconf for a while, I got tired of trying to make it detect libraries
+but accept their absence gracefully, and so on. Instead, I wrote a short
+Perl script which does the job and builds a reasonable Makefile. Those
+who find it doesn't detect their system's needs properly are welcome
+to contribute patches or the necessary commands.
+<li>Antialiased freetype text output now works properly in both
+truecolor and non-truecolor contexts! Hurrah! On a truecolor image
+it is possible, for instance, to draw antialiased text on an arbitrarily
+complex background with 50% alpha blending (transparency), and get the
+expected pretty results. Thanks to Joel Dubiner for his support of this work.
+<li><strong>By default, alpha blending is now done within the library.</strong>
+Also, by default, alpha channel is not saved with PNG images. This means
+that programmers who try loading a JPEG, scribbling some pretty antialiased
+text on it, and saving the JPEG again will now get the results they
+expected. It also means that, by default, users will not run afoul of
+the fact that many web browsers don't properly support full PNG alpha
+channel. 
+<li>Various submitted bug fixes have been incorporated.
+<li>Various other submitted changes have not been incorporated. Sorry.
+The interval between 2.0.1 and 2.0.2 was simply too long, and changes
+accumulated which were not mutually compatible. I'll do better in
+the future, especially with bug fixes.
+</ul> 
+<P><A NAME="whatsnew2.0.1"><H3>What's new in version 2.0.1?</H3></A>
+<ul>
+<li>Workaround for a bug in gcc, apparently found in gcc 2.7.2 and up.
+I reproduced and fixed it while using gcc 2.9.5.2. The bug occurred only
+when the -g option was in use. This problem caused gcc to spew
+internal error messages unrelated to the correctness of the code
+in gd_gd2.c. Howard Jones was first to report it.
+<li><a href="#gdImageFilledEllipse">gdImageFilledEllipse</a> documented
+and altered; no longer requires a superfluous style argument. Thanks to
+Francis James Franklin.
+<li>The Makefile now offers the correct syntax for
+optionally creating a static library. Thanks to Jean-Lous Regez,
+among others.
+<li>A nested comment, an attempt to return the value of a void function,
+and a potentially significant error in gdImageCopyResampled were fixed
+thanks to Joseph Shirley.
+<li>A bug preventing proper truecolor text rendering was fixed,
+thanks to Jason Gallagher.
+<li><a href="#gdImageStringFT">gdImageStringFT</a> (FreeType) should 
+now work better against a transparent or semitransparent background,
+and should act in a manner consistent with the most recent
+<a href="#gdImageAlphaBlending">gdImageAlphaBlending</a> setting.
+Antialiasing is now done via the alpha channel mechanism if the
+image is a truecolor image. 
+<li>Bugs in the output of gdImageArc and gdImageFilledArc were reported
+by Bruce Verderaime. A simple and correct but inefficient implementation
+has been substituted until fixes are contributed for the faster code,
+which is in gd_arc_f_buggy.c along with the test program that reproduces
+the bug(s).
+<li><a href="#gdImageFilledArc">gdImageFilledArc</a> now offers additional
+style options, which can be combined to produce various effects.  
+<li>Masahito Yamaga (ma@yama-ga.com) sent a patch to improve
+support for Japanese output via <a href="#gdImageStringFT">gdImageStringFT</a>. 
+He also added a new <code>readme.jpn</code> file.
+<li>Zillions of documentation fixes.
+</ul>
+<P><A NAME="whatsnew2.0"><H3>What's new in version 2.0?</H3></A>
+<ul>
+<li><strong>Support for truecolor images!</strong> Version 2.0 can
+load truecolor PNGs with no loss of color information, and almost
+no loss of alpha channel information. Version 2.0 can also load
+truecolor JPEGs with as little loss as possible; however, bear in
+mind that JPEG is a lossy format, so repeated load/save cycles
+always reduce image quality. This is not a bug. To create
+a truecolor image from scratch, call the new
+<a href="#gdImageCreateTrueColor">gdImageCreateTrueColor</a>
+function. The <a href="#gdImageCreate">gdImageCreate</a> function
+is still available to create palette images, and may also be
+referred to as <a href="#gdImageCreatePalette">gdImageCreatePalette</a>.
+<li><strong>Support for alpha channels!</strong> In addition to
+24 bits of color information for each pixel (eight bits of
+red, green, and blue respectively), version 2.0 supports
+7 bits of "alpha channel" information. This is used to determine
+exactly how transparent the pixel should be. There is also support
+for a full 7 bits of transparency for each individual palette index
+in a palette-based image. Please note that, as of this writing,
+only Macintosh Internet Explorer 5.x and Mozilla/Netscape 6.x
+display partial transparency properly.
+<li>The new <a href="#gdImageAlphaBlending">gdImageAlphaBlending</a>
+function allows for two different modes of drawing. In blending mode,
+the alpha channel component of the color supplied to all drawing
+functions, such as <a href="#gdImageSetPixel">gdImageSetPixel</a>,
+determines how much of the underlying color should be allowed to
+shine through. The resulting image is not transparent. In non-blending 
+mode, drawing color is copied literally with the alpha channel 
+information, resulting in a transparent image. Blending mode is
+not available when drawing on palette images. 
+<li>The <a href="#gdImageCopyResampled">gdImageCopyResampled</a>
+function provides "smooth" copying from a large image to a smaller
+one, using a weighted average of the pixels of the source area rather 
+than selecting one representative pixel. This function is identical
+to <a href="#gdImageCopyResized">gdImageCopyResized</a> when the
+destination image is a palette image.
+<li>The <a href="#gdImageTrueColorToPalette">gdImageTrueColorToPalette</a>
+function converts a truecolor image to a palette image. The code for
+this function was originally drawn from the Independent JPEG Group library
+code, which is excellent. The code has been modified to preserve as much
+alpha channel information as possible in the resulting palette, in addition 
+to preserving colors as well as possible. This does not work as well as
+might be hoped. It is usually best to simply produce a truecolor
+output image instead, which guarantees the highest output quality.
+<li>A very high degree of backwards compatibility with existing
+gd 1.x code has been maintained, at both the source code and binary
+level. <strong>Code which directly accesses the <code>pixels</code> array
+will fail only if it encounters an existing truecolor image</strong>, which may
+happen if the code attempts to open and modify an existing JPEG or 
+truecolor PNG. Such code should be modified to check the
+<code>trueColor</code> flag of the <code>gdImage</code> structure, and
+refer to the <code>tpixels</code> array instead when it is set.
+<li>gd is now compiled and installed as a shared library. However,
+gd still does not use autoconf, because I (TBB) have very limited
+patience with autoconf. These days, most Unix systems provide a fairly
+POSIX-standard environment, and the provided Makefile is likely to work well
+if users read it and follow the instructions at the top.
+<li>Support for line thickness was added by Michael Schwartz. My apologies
+to him for sitting on his patches for so long. See the new
+<a href="#gdImageSetThickness">gdImageSetThickness</a> function, which
+affects all standard gd functions that draw lines and curves. In addition,
+Michael added a convenient <a href="#gdImageEllipse">gdImageEllipse</a>
+function. 
+<li>The new <a href="#gdImageFilledArc">gdImageFilledArc</a> function
+provides a straightforward way to draw filled arcs. Also,
+<a href="#gdImageFilledEllipse">gdImageFilledEllipse</a> is a 
+convenient way to fill an ellipse without specifying starting
+and ending angles. Thanks go out to F J Franklin.
+<li>To put an end to the confusion, TrueType 1.x support has been
+removed in favor of TrueType 2.x support. The old
+gdImageStringTTF function simply invokes gdImageStringFT.
+<li>The specialized .gd and .gd2 file formats have been upgraded to support
+truecolor. New images written by the versions of these functions
+found in 2.0 will be rejected, with varying degrees of grace, by
+older versions of gd. THIS AFFECTS THE .GD and .GD2 FORMATS ONLY. IF YOU
+ARE CONFUSED BY THIS PARAGRAPH, IT PROBABLY DOESN'T APPLY TO ANYTHING
+YOU WILL EVER ENCOUNTER. Since these file formats are absolutely,
+positively *not* designed for distributing images, just for
+preprocessing them, this should not be a big problem. gd 2.0 should
+read old .gd and .gd2 files correctly.
+</ul>
+<P><A NAME="whatsnew1.8.4"><H3>What's new in version 1.8.4?</H3></A>
+<ul>
+<li>Add support for FreeType2  (John Ellson  ellson@graphviz.org)
+<li>Add support for finding in fonts in a builtin DEFAULT_FONTPATH,
+or in a path from the GDFONTPATH environment variable.
+<li>remove some unused symbols to reduce compiler warnings
+<li>bugfix in size comparisons in gdImageCompare
+<li>REXX now mentioned
+<li>All memory allocation functions are now wrapped within the
+library; gdFree is exported and recommended for freeing memory
+returned by the gdImage(Something)Ptr family of functions.
+</ul>
+<P><A NAME="whatsnew1.8.3"><H3>What's new in version 1.8.3?</H3></A>
+<ul>
+<li>WBMP output memory leak fixed
+<li><code>#include &lt;gd.h&gt;</code> corrected to <code>#include "gd.h"</code> in gd_wbmp.c 
+<li>Documented the fact that the source and output images shouldn't
+match in the WBMP test except for black and white source images
+</ul>
+<P>
+<A NAME="whatsnew1.8.2"><H3>What's new in version 1.8.2?</H3></A>
+<ul>
+<li>WBMP support debugged and improved by Johann Van den Brande
+<li>WBMP tests added to gdtest.c by Thomas Boutell
+<li>Use of platform-dependent 'install' command removed by Thomas Boutell
+<li>Comments added to Makefile warning users to juggle the order of the
+libraries if the linker complains; is there any portable way to do this
+automatically, short of using autoconf?
+<li>Documentation of <a href="#gdImageCreateFromXpm">gdImageCreateFromXpm</a>
+corrected
+<li>Updated links to fast-moving, always dodging libpng and zlib web sites
+</ul>
+<P><A NAME="whatsnew1.8.1"><H3>What's new in version 1.8.1?</H3></A>
+<ul>
+<li>Optional components no longer built by default (following the
+documentation)
+<li>JPEG code no longer requires inappropriate header files
+<li>Win32 patches from Joe Gregorio
+<li>16-bit font support for bdftogd, from Honza Pazdziora
+</ul>
+<P><A NAME="whatsnew1.8"><H3>What's new in version 1.8?</H3></A>
+<ul>
+<li>Support for JPEG output, courtesy of Doug Becker
+<li>A link to Michael Bradbery's Pascal wrapper
+<li>Support for WBMP output, courtesy of Maurice Szmurlo
+<li>gdImageColorClosestHWB function based on hue, whiteness, blackness,
+superior to the regular gdImageColorClosest function, courtesy 
+of Philip Warner
+<li>License clarification: yes, you can modify gd
+</ul>
+<h4>Additional JPEG Information</h4>
+Support for reading and writing JPEG-format images is courtesy
+of Doug Becker and the Independent JPEG Group / Thomas G. Lane.  You
+can get the latest version of the IJG JPEG software from <A
+HREF="ftp://ftp.uu.net/graphics/jpeg/">ftp://ftp.uu.net/graphics/jpeg/</A>
+(e.g., the <A
+HREF="ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz">jpegsrc.v6b.tar.gz</A>
+file).  You <strong>must</strong> use
+version 6b or later of the IJG JPEG software.  You might also consult
+the <A HREF="http://www.faqs.org/faqs/jpeg-faq/">JPEG FAQ</A> at
+<A HREF="http://www.faqs.org/faqs/jpeg-faq/">http://www.faqs.org/faqs/jpeg-faq/</A>.
+<P><A NAME="whatsnew1.7.3"><H3>What's new in version 1.7.3?</H3></A>
+Another attempt at Makefile fixes to permit
+linking with all libraries required on platforms with order-
+dependent linkers. Perhaps it will work this time.
+<P><A NAME="whatsnew1.7.2"><H3>What's new in version 1.7.2?</H3></A>
+An uninitialized-pointer bug in <code>gdtestttf.c</code> was corrected.
+This bug caused crashes at the end of each call to gdImageStringTTF on
+some platforms. Thanks to Wolfgang Haefelinger.
+<p>
+Documentation fixes. Thanks to Dohn Arms.
+<p>
+Makefile fixes to permit
+linking with all libraries required on platforms with order-
+dependent linkers.
+<P><A NAME="whatsnew1.7.1"><H3>What's new in version 1.7.1?</H3></A>
+A minor buglet in the Makefile was corrected, as well as an inaccurate
+error message in <code>gdtestttf.c</code>. Thanks to Masahito Yamaga.
+<P><A NAME="whatsnew1.7"><H3>What's new in version 1.7?</H3></A>
+Version 1.7 contains the following changes:
+<ul>
+<li>Japanese language support for the TrueType functions.
+Thanks to Masahito Yamaga.
+<li><code>autoconf</code> and <code>configure</code> have been removed, in favor of a 
+carefully designed Makefile which produces and properly installs
+the library and the binaries. System-dependent variables are
+at the top of the Makefile for easy modification. I'm sorry, 
+folks, but autoconf generated <strong>many, many confused email 
+messages</strong> from people who didn't have things where autoconf 
+expected to find them. I am not an autoconf/automake wizard, and 
+gd is a simple, very compact library which does not need to 
+be a shared library. I <strong>did</strong> make many improvements
+over the old gd 1.3 Makefile, which were directly inspired by the 
+autoconf version found in the 1.6 series (thanks to John Ellson).
+<li>Completely ANSI C compliant, according to the <code>-pedantic-errors</code>
+flag of gcc. Several pieces of not-quite-ANSI-C code were causing problems
+for those with non-gcc compilers.
+<li><code>gdttf.c</code> patched to allow the use of Windows symbol
+fonts, when present (thanks to Joseph Peppin). 
+<li><code>extern "C"</code> wrappers added to <code>gd.h</code> and the
+font header files for the convenience of C++ programmers. 
+<code>bdftogd</code> was also modified to automatically insert these
+wrappers into future font header files. Thanks to John Lindal.
+<li>Compiles correctly on platforms that don't define <code>SEEK_SET</code>.
+Thanks to Robert Bonomi.
+<li>Loads Xpm images via the 
+<a href="#gdImageCreateFromXpm"><code>gdImageCreateFromXpm</code></a>
+function, if the Xpm library is available. Thanks to Caolan McNamara.
+</ul>
+<P><A NAME="whatsnew1.6.3"><H3>What's new in version 1.6.3?</H3></A>
+Version 1.6.3 corrects a memory leak in gd_png.c. This leak caused
+a significant amount of memory to be allocated and not freed when
+writing a PNG image. 
+<P><A NAME="whatsnew1.6.2"><H3>What's new in version 1.6.2?</H3></A>
+Version 1.6.2 from John Ellson <ellson@graphviz.org> adds two new functions:
+<ul>
+<li>gdImageStringTTF - scalable, rotatable, anti-aliased, TrueType strings using
+the FreeType library, but only if libttf is found by configure.
+<strong>We do not provide TrueType fonts. Obtaining them
+is entirely up to you.</strong>
+<li>gdImageColorResolve - an efficient alternative for the
+common code fragment:
+<pre>
+
+      if ((color=gdImageColorExact(im,R,G,B)) < 0)
+          if ((color=gdImageColorAllocate(im,R,G,B)) < 0)
+              color=gdImageColorClosest(im,R,G,B);
+</pre>
+</ul>
+<p>
+Also in this release the build process has been converted to
+GNU autoconf/automake/libtool conventions so that both (or either)
+static and shared libraries can be built.
+<P><A NAME="whatsnew1.6.1"><H3>What's new in version 1.6.1?</H3></A>
+Version 1.6.1 incorporates superior PNG reading and writing code
+from Greg Roelofs, with minor modifications by Tom Boutell. 
+Specifically, I altered his code to read non-palette images
+(converting them to palette images badly, by dithering them),
+and to tolerate palette images with types of transparency that
+gd doesn't actually support (it just ignores the advanced
+transparency features). Any bugs in this area are therefore my 
+fault, not Greg's.
+<p>
+Unlike gd 1.6, users should have no trouble linking with
+gd 1.6.1 if they follow the instructions and install all of
+the pieces. However, <strong>If you get undefined symbol errors,
+be sure to check for older versions of libpng in your
+library directories!</strong>
+<P><A NAME="whatsnew1.6"><H3>What's new in version 1.6?</H3></A>
+Version 1.6 features the following changes:
+<p>
+<strong>Support for 8-bit palette PNG images has been added.
+Support for GIF has been removed.</strong> This step was taken
+to completely avoid the legal controversy regarding the LZW
+compression algorithm used in GIF. Unisys holds a patent which
+is relevant to LZW compression. PNG is a superior image format
+in any case. Now that PNG is supported by both Microsoft
+Internet Explorer and Netscape (in their recent releases),
+we highly recommend that GD users upgrade in order to get 
+well-compressed images in a format which is legally unemcumbered.
+
+<P><A NAME="whatsnew1.5"><H3>What's new in version 1.5?</H3></A>
+
+Version 1.5 featured the following changes:
+
+<dl>
+<dt><b>New GD2 format</b>
+<dd>      An improvement over the GD format, the GD2 format uses the zlib
+          compression library to compress the image in chunks. This results
+          in file sizes comparable to GIFs, with the ability to access parts
+          of large images without having to read the entire image into memory.
+<p>
+  This format also supports version numbers and rudimentary validity
+  checks, so it should be more 'supportable' than the previous GD format.
+<p>
+<dt><b>Re-arranged source files</b>
+<dd>      gd.c has been broken into constituant parts: io, gif, gd, gd2 and
+          graphics functions are now in separate files.
+<p>
+<dt><b>Extended I/O capabilities.</b>
+<dd>      The source/sink feature has been extended to support GD2 file formats (which
+          require seek/tell functions; seek must return 1 for success, 0 for failure), and to allow more general non-file I/O.
+<p>
+<dt><b>Better support for Lincoln Stein's Perl Module</b>
+<dd>      The new gdImage*Ptr function returns the chosen format stored in a block of memory.
+          This can be directly used by the GD perl module.
+<p>
+<dt><b>Added functions</b>
+<dd>gdImageCreateFromGd2Part - allows retrieval of part of an image (good for huge images, like maps),
+<br>gdImagePaletteCopy - Copies a palette from one image to another, doing it's best to match the colors in the target image to the colors in the source palette.
+<br>gdImageGd2, gdImageCreateFromGd2 - Support for new format
+<br>gdImageCopyMerge - Merges two images (useful to highlight part of an image)
+<br>gdImageCopyMergeGray - Similar to gdImageCopyMerge, but tries to preserve source image hue.
+<br>gdImagePngPtr, gdImageJpegPtr, gdImageWBMPPtr, gdImageGdPtr, gdImageGd2Ptr - return memory blocks for each type of image.
+<br>gdImageCreateFromPngCtx, gdImageCreateFromGdCtx, gdImageCreateFromGd2Ctx, gdImageCreateFromGd2PartCtx - Support for new I/O context.
+
+</dl>
+
+<b>NOTE:</b> In fairness to Thomas Boutell, any bug/problems with any of the above features should
+probably be reported to <a href=mailto:pjw@rhyme.com.au>Philip Warner</a>.
+
+<P><A NAME="whatsnew1.4"><H3>What's new in version 1.4?</H3></A>
+
+Version 1.4 features the following changes:
+<dl>
+<dt>Fixed polygon fill routine (again)
+<dd>Thanks to Kirsten Schulz, version 1.4 is able to fill
+numerous types of polygons that caused problems with
+previous releases, including version 1.3.
+<dt>Support for alternate data sources
+<dd>Programmers who wish to load a GIF from something other
+than a stdio FILE * stream can use the new
+<a href="#gdImageCreateFromPngSource">gdImageCreateFromPngSource</a> function.
+<dt>Support for alternate data destinations
+<dd>Programmers who wish to write a GIF to something other
+than a stdio FILE * stream can use the new
+<a href="#gdImagePngToSink">gdImagePngToSink</a> function.
+<dt>More tolerant when reading GIFs
+<dd>
+Version 1.4 does not crash when reading certain animated GIFs,
+although it still only reads the first frame. Version 1.4 also has
+overflow testing code to prevent crashes when reading
+damaged GIFs.
+</dl>
+<P><A NAME="whatsnew1.3"><H3>What's new in version 1.3?</H3></A>
+Version 1.3 features the following changes:
+<dl>
+<dt>Non-LZW-based GIF compression code
+<dd>
+Version 1.3 contained GIF compression code that uses simple Run Length
+Encoding instead of LZW compression, while still retaining compatibility
+with normal LZW-based GIF decoders (your browser will still like your GIFs).
+<strong>LZW compression is patented by Unisys. We are currently reevaluating
+the approach taken by gd 1.3. The current release of gd does not support
+this approach. We recommend that you use the current release, and generate
+PNG images.</strong> Thanks to 
+Hutchison Avenue Software Corporation for contributing
+the RLE GIF code.
+<dt>8-bit fonts, and 8-bit font support
+<dd>This improves support for European languages. Thanks are due
+to Honza Pazdziora <adelton@informatics.muni.cz> and also to
+Jan Pazdziora <adelton@fi.muni.cz>. Also see the provided bdftogd
+Perl script if you wish to convert fixed-width X11 fonts
+to gd fonts.
+<dt>16-bit font support (no fonts provided)
+<dd>Although no such fonts are provided in the distribution,
+fonts containing more than 256 characters should work if the
+gdImageString16 and gdImageStringUp16 routines are used.
+<dt>Improvements to the "webpng" example/utility
+<dd>The "webpng" utility is now a slightly more useful application. Thanks to
+Brian Dowling for this code.
+<dt>Corrections to the color resolution field of GIF output
+<dd>Thanks to Bruno Aureli.
+<dt>Fixed polygon fills
+<dd>A one-line patch for the infamous polygon fill bug, courtesy
+of Jim Mason. I believe this fix is sufficient. However, if you
+find a situation where polygon fills still fail to behave properly,
+please send code that demonstrates the problem, <em>and</em> a fix if
+you have one. Verifying the fix is important.
+<dt>Row-major, not column-major
+<dd>Internally, gd now represents the array of pixels as
+an array of rows of pixels, rather than an array of columns
+of pixels. This improves the performance of compression and
+decompression routines slightly, because horizontally adjacent
+pixels are now next to each other in memory. <strong>This should
+not affect properly written gd applications, but applications that
+directly manipulate the <code>pixels</code> array will require
+changes.</strong>
+</dl>
+<A NAME="required"><H3>What else do I need to use gd?</H3></A>
+<P>
+To use gd, you will need an ANSI C compiler. <strong>All popular
+Windows 95 and NT C compilers are ANSI C compliant.</strong> Any
+full-ANSI-standard C compiler should be adequate. <strong>The cc
+compiler released with SunOS 4.1.3 is not an ANSI C compiler.
+Most Unix users who do not already have gcc should get it.
+gcc is free, ANSI compliant and a de facto industry standard.
+Ask your ISP why it is missing.</strong>
+<P>
+As of version 1.6, you also need the zlib compression library,
+and the libpng library. As of version 1.6.2, you can draw text
+using antialiased TrueType fonts if you also have the libttf
+library installed, but this is not mandatory.
+zlib is available for a variety of platforms from
+<a href="http://www.freesoftware.com/pub/infozip/index.html">the zlib web site</a>.
+libpng is available for a variety of platforms from
+<a href="http://www.cdrom.com/pub/png/">the PNG web site</a>.
+
+<P>
+You will also want a PNG viewer, if you do not already have
+one for your system, since you will need a good way to check the
+results of your work. Netscape 4.04 and higher, and Microsoft
+Internet Explorer 4.0 or higher, both support PNG.
+<strong>Not every PNG-compatible viewer supports alpha channel
+transparency,</strong> which is why gd 2.0.2 and above do alpha
+blending in the library by default; it is possible to turn on the
+saving of alpha channel information to the file instead.
+<P>
+<A NAME="getgd"><H3>How do I get gd?</H3></A>
+<h4>Binaries (DLL for Windows programmers):</h4>
+<ul>
+<li><a href="http://www.libgd.org/Downloads">.ZIP File of DLL, Headers, Et Cetera</a>
+<p>
+</ul>
+<h4>Source Code:</h4>
+<ul>
+<li><a href="http://www.libgd.org/Downloads">Gzipped Tar File (Unix)</a>
+<li><a href="http://www.boutell.com/gd/http/gd-2.0.33.tar.gz">.ZIP File of SOURCE CODE (Windows)</a>
+</ul>
+<P>
+<A NAME="buildgd"><H3>How do I build gd?</H3></A>
+<blockquote>
+Win32 DLL users: if you are using MSVC, use the provided batch file
+<code>makemsvcimport.bat</code> to make a bgd.lib import library
+corresponding to the provided bgd.dll. Copy bgd.dll to your
+application directory, or to your Windows sytem directory. In the
+settings of your MSVC project, you <b>MUST</b> choose the
+"multithreaded DLL" library option under "code generation." 
+mingw32 and cygwin users can simply link with the provided libbgd.a 
+stub library in order to use the DLL.
+</blockquote>
+Building gd From the Source
+<p>
+In order to build gd, you must first unpack the archive you have
+downloaded. If you are not familiar with <code>tar</code> and
+<code>gunzip</code> (Unix) or <code>ZIP</code> (Windows), please
+consult with an experienced user of your system. Sorry, we cannot
+answer questions about basic Internet skills.
+<p>
+Unpacking the archive will produce a directory called "gd-2.0.33".
+<p>
+<h4>For Unix</h4>
+<code>cd</code> to the 2.0.33 directory and type:
+<p>
+<code>./configure</code>
+<P>
+<blockquote>
+<STRONG>NOTE: BY DEFAULT, THE LIBRARY IS INSTALLED IN 
+<code>/usr/local/lib</code></strong> and the include files are
+installed in <code>/usr/local/include</code>. IF YOU ARE
+UPGRADING, you may wish to use:
+<pre>
+./configure --prefix=/usr
+</pre>
+Rather than just <code>./configure</code>, before typing
+<code>make</code> and <code>make install</code>.
+</blockquote>
+<p>
+If all goes well, this will create a Makefile. If all does not go well --
+for instance, if neither the the JPEG nor the PNG and ZLIB libraries
+are found -- you will need to install those libraries, then come back
+and run <code>configure</code> again. 
+<p>
+If necessary, make changes to the resulting Makefile. Then, 
+type "make". If there are no errors, follow this with "make install". 
+Because gd 2.0 and above installs as a shared library, it is necessary to 
+install the library properly before running gd-based programs.
+<p>
+If you get errors, type <code>./configure --help</code> for more
+information about the available options. In the unlikely event
+that the GNU autoconf-produced configure script does not work well
+for you, you may wish to try <code>configure.pl</code>, a
+simple Perl script with similar but less complete capabilities.
+If all else fails, try renaming <code>makefile.sample</code>
+to <code>Makefile</code>. However, <code>./configure</code> is
+almost always your best bet.
+<blockquote>
+<h4>For Windows</h4>
+Use the DLL version! See the paragraph at the beginning of this sectino.
+If you really want to compile it yourself for some strange reason, read on.
+<p>
+Create a project using your favorite programming environment.
+Copy all of the gd files to the project directory. Add <code>gd.c</code>
+to your project. Add other source files as appropriate. Learning the
+basic skills of creating projects with your chosen C environment
+is up to you. Alternatively, use the free <code>mingw32</code> 
+or <code>cygwin</code> tools, which may prove to be compatible
+with the provided <code>configure</code> script.
+</blockquote>
+<P>
+If you wish to test the library, type "make test" AFTER you have
+successfully executed "make install". This will build
+several test programs, including "gddemo". (Not all of these
+programs are expected to print completely successful messages,
+depending on the nature of the image formats with which some of
+the tests are tried; for instance, WBMP is a black and white
+format, so loss of color information is expected there.)
+Run gddemo to see some of the capabilities of gd. Run
+gdtestft to play with the freetype support, if you have built
+gd with it and have access to truetype fonts.
+<P>
+gddemo should execute without incident, creating the file
+demoout.png. (Note there is also a file named demoin.png,
+which is provided in the package as part of the demonstration.)
+<P>
+Display demoout.png in your PNG viewer. The image should
+be 128x128 pixels and should contain an image of the
+space shuttle with quite a lot of graphical elements drawn
+on top of it.
+<P>
+(If you are missing the demoin.png file, the other items
+should appear anyway.)
+<P>
+Look at demoin.png to see the original space shuttle
+image which was scaled and copied into the output image.
+<P>
+<A NAME="basics"><H3>gd basics: using gd in your program</H3></A>
+gd lets you create PNG or JPEG images on the fly. To use gd in your
+program, include the file gd.h, and link with the gd
+library and the other required libraries; the syntax for
+most Unix flavors is:
+<pre>
+-lgd -lpng -lz -ljpeg -lfreetype -lm
+</pre>
+Assuming that all of these libraries are available.
+<P>
+If you want to use the provided simple fonts, include
+gdfontt.h, gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For
+more impressive results, install FreeType 2.x and use the 
+<a href="#gdImageStringFT">gdImageStringFT</a>
+function. If you are not using the provided Makefile and/or a 
+library-based approach, be sure to include the source modules as well in your
+project. (They may be too large for 16-bit memory models,
+that is, 16-bit DOS and Windows.)
+<P>
+Here is a short example program. <strong>(For a more advanced example,
+see gddemo.c, included in the distribution. gddemo.c is NOT the same program;
+it demonstrates additional features!)</strong>
+<P>
+<PRE>
+/* Bring in gd library functions */
+#include "gd.h"
+
+/* Bring in standard I/O so we can output the PNG to a file */
+#include &lt;stdio.h&gt;
+
+int main() {
+  /* Declare the image */
+  <A HREF="#gdImagePtr">gdImagePtr</A> im;
+  /* Declare output files */
+  FILE *pngout, *jpegout;
+  /* Declare color indexes */
+  int black;
+  int white;
+
+  /* Allocate the image: 64 pixels across by 64 pixels tall */
+  im = <A HREF="#gdImageCreate">gdImageCreate</A>(64, 64);
+
+  /* Allocate the color black (red, green and blue all minimum).
+    Since this is the first color in a new image, it will
+    be the background color. */
+  black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+
+  /* Allocate the color white (red, green and blue all maximum). */
+  white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+  
+  /* Draw a line from the upper left to the lower right,
+    using white color index. */
+  <A HREF="#gdImageLine">gdImageLine</A>(im, 0, 0, 63, 63, white);  
+
+  /* Open a file for writing. "wb" means "write binary", important
+    under MSDOS, harmless under Unix. */
+  pngout = fopen("test.png", "wb");
+
+  /* Do the same for a JPEG-format file. */
+  jpegout = fopen("test.jpg", "wb");
+
+  /* Output the image to the disk file in PNG format. */
+  <A HREF="#gdImagePng">gdImagePng</A>(im, pngout);
+
+  /* Output the same image in JPEG format, using the default
+    JPEG quality setting. */
+  <A HREF="#gdImageJpeg">gdImageJpeg</A>(im, jpegout, -1);
+
+  /* Close the files. */
+  fclose(pngout);
+  fclose(jpegout);
+
+  /* Destroy the image in memory. */
+  <A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+}
+</PRE>
+When executed, this program creates an image, allocates
+two colors (the first color allocated becomes the background
+color), draws a diagonal line (note that 0, 0 is the upper
+left corner), writes the image to PNG and JPEG files, and
+destroys the image.
+<P>
+The above example program should
+give you an idea of how the package works.
+gd provides many additional functions, which are listed
+in the following reference chapters, complete with code
+snippets demonstrating each. There is also an
+<A HREF="#index">alphabetical index</A>.
+<H3><A NAME="webpng">Webpng: a more powerful gd example</A></H3>
+Webpng is a simple utility program to manipulate PNGs from the
+command line. It is written for Unix and similar command-line
+systems, but should be easily adapted for other environments.
+Webpng allows you to set transparency and interlacing and
+output interesting information about the PNG in question.
+<P>
+webpng.c is provided in the distribution. Unix users can
+simply type "make webpng" to compile the program. Type
+"webpng" with no arguments to see the available options.
+<H2><A NAME="reference">Function and type reference</A></H2>
+<UL>
+<LI><A HREF="#types">Types</A></LI>
+<LI><A HREF="#creating">Image creation, destruction, loading and saving</A></LI>
+<LI><A HREF="#drawing">Drawing, styling, brushing, tiling and
+filling functions</A></LI>
+<LI><A HREF="#query">Query functions (not color-related)</A></LI>
+<LI><A HREF="#fonts">Font and text-handling functions</A></LI>
+<LI><A HREF="#colors">Color handling functions</A></LI>
+<LI><A HREF="#copying">Copying, resizing, rotating, deformation and filter
+functions</A></LI>
+<LI><A HREF="#misc">Miscellaneous Functions</A></LI>
+<LI><A HREF="#constants">Constants</A></LI>
+</UL>
+<H3><A NAME="types">Types</A></H3>
+<DL>
+<DT><A NAME="gdImage"><code>gdImage</code><strong>(TYPE)</strong></A>
+<DD>
+The data structure in which gd stores images. <A HREF="#gdImageCreate">
+gdImageCreate</A>, <a href="#gdImageCreateTrueColor">gdImageCreateTrueColor</a>
+and the various image file-loading functions return
+a pointer to this type, and the other functions expect to receive
+a pointer to this type as their first argument. It is reasonably safe to
+examine any of the members of this structure. It is also reasonably
+safe to modify individual pixels within the <code>pixels</code> 
+or <code>tpixels</code> arrays. If the <code>trueColor</code> flag
+is set, the <code>tpixels</code> array is valid; otherwise the
+<code>pixels</code> array is valid.
+<p>
+The <code>colorsTotal</code>, <code>red</code>, <code>green</code>,
+<code>blue</code>, <code>alpha</code> and <code>open</code> arrays
+manage the palette. They are valid only when the <code>trueColor</code>
+flag is not set. 
+The <code>transparent</code> value contains the palette index of the first
+transparent color as read-only information for backwards compatibility;
+gd 2.0 stores this information in the <code>alpha</code> array so that
+variable transparency can be supported for each palette entry. However,
+for truecolor images, <code>transparent</code> represents a single
+RGB color which is <strong>always 100% transparent</strong>, and this
+feature is generally supported by browsers which do not support 
+full alpha channels.
+<PRE>
+typedef struct {
+  /* Palette-based image pixels */
+  unsigned char ** pixels;
+  int sx;
+  int sy;
+  /* These are valid in palette images only. See also
+  /* 'alpha', which appears later in the structure to
+    preserve binary backwards compatibility */
+  int colorsTotal;
+  int red[gdMaxColors];
+  int green[gdMaxColors];
+  int blue[gdMaxColors]; 
+  int open[gdMaxColors];
+  /* For backwards compatibility, this is set to the
+    first palette entry with 100% transparency,
+    and is also set and reset by the 
+    gdImageColorTransparent function. Newer
+    applications can allocate palette entries
+    with any desired level of transparency; however,
+    bear in mind that many viewers, notably
+    many web browsers, fail to implement
+    full alpha channel for PNG and provide
+    support for full opacity or transparency only. */
+  int transparent;
+  int *polyInts;
+  int polyAllocated;
+  struct gdImageStruct *brush;
+  struct gdImageStruct *tile;  
+  int brushColorMap[gdMaxColors];
+  int tileColorMap[gdMaxColors];
+  int styleLength;
+  int stylePos;
+  int *style;
+  int interlace;
+  /* New in 2.0: alpha channel for palettes. Note that only
+    Macintosh Internet Explorer and (possibly) Netscape 6
+    really support multiple levels of transparency in
+    palettes, to my knowledge, as of 2/15/01. Most
+    common browsers will display 100% opaque and
+    100% transparent correctly, and do something 
+    unpredictable and/or undesirable for levels
+    in between. TBB */
+  int alpha[gdMaxColors]; 
+  /* Truecolor flag and pixels. New 2.0 fields appear here at the
+    end to minimize breakage of existing object code. */
+  int trueColor;
+  int ** tpixels;
+  /* Should alpha channel be copied, or applied, each time a
+    pixel is drawn? This applies to truecolor images only.
+    No attempt is made to alpha-blend in palette images,
+    even if semitransparent palette entries exist. 
+    To do that, build your image as a truecolor image,
+    then quantize down to 8 bits. */
+  int alphaBlendingFlag;
+  /* Should the alpha channel of the image be saved? This affects
+    PNG at the moment; other future formats may also
+    have that capability. JPEG doesn't. */
+  int saveAlphaFlag;
+} gdImage;
+</PRE>
+<p>
+The order of the structure members may appear confusing, but was chosen
+deliberately to increase backwards compatibility with existing gd 1.x-based
+binary code that references particular structure members.
+<DT><A NAME="gdImagePtr">gdImagePtr</A> <strong>(TYPE)</strong>
+<DD>
+A pointer to an image structure. <A HREF="#gdImageCreate">gdImageCreate</A>
+returns this type, and the other functions expect it as the first
+argument.
+<DT><A NAME="gdIoCtx">gdIOCtx</a> <strong>(TYPE)</strong>
+<DD>
+Most of the gd functions that read and write files, such as
+<a href="#gdImagePng">gdImagePng</a> and <a href="#gdImageCreateFromJpeg"></a>,
+also have variants that accept a gdIOCtx structure; see
+<a href="#gdImagePngCtx">gdImagePngCtx</a> and 
+<a href="#gdImageCreateFromJpegCtx">gdImageCreateFromJpegCtx</a>. Those who wish to provide
+their own custom routines to read and write images can populate a
+gdIOCtx structure with functions of their own devising to 
+to read and write data. For image reading, the only mandatory
+functions are getC and getBuf, which must return the number of
+characters actually read, or a negative value on error or EOF.
+These functions must read the number of characters requested 
+unless at the end of the file. For image writing, the only mandatory 
+functions are putC and putBuf, which return the number of 
+characters written; these functions must write the number of 
+characters requested except in the event of an error. The seek
+and tell functions are only required in conjunction with the
+<code>gd2</code> file format, which supports quick loading of
+partial images. The gd_free function will not be invoked when
+calling the standard Ctx functions; it is an implementation
+convenience when adding new data types to gd. For examples,
+see gd_png.c, gd_gd2.c, gd_jpeg.c, etc., all of which rely
+on gdIOCtx to implement the standard image read and write functions.
+
+<pre>
+typedef struct gdIOCtx
+{
+  int (*getC) (struct gdIOCtx *);
+  int (*getBuf) (struct gdIOCtx *, void *, int wanted);
+
+  void (*putC) (struct gdIOCtx *, int);
+  int (*putBuf) (struct gdIOCtx *, const void *, int wanted);
+
+  /* seek must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek! */
+  int (*seek) (struct gdIOCtx *, const int);
+
+  long (*tell) (struct gdIOCtx *);
+
+  void (*gd_free) (struct gdIOCtx *);
+
+} gdIOCtx;
+</pre>
+
+
+<DT><A NAME="gdFont">gdFont</A> <strong>(TYPE)</strong>
+<DD>
+A font structure. Used to declare the characteristics of a font.
+Please see the files gdfontl.c and gdfontl.h for an example of the
+proper declaration of this structure. You can provide your
+own font data by providing such a structure and the associated
+pixel array. You can determine the width and height of a single
+character in a font by examining the w and h members of the
+structure. If you will not be creating your own fonts, you will
+not need to concern yourself with the rest of the components of this
+structure.
+<PRE>
+typedef struct {
+  /* # of characters in font */
+  int nchars;
+  /* First character is numbered... (usually 32 = space) */
+  int offset;
+  /* Character width and height */
+  int w;
+  int h;
+  /* Font data; array of characters, one row after another.
+    Easily included in code, also easily loaded from
+    data files. */
+  char *data;
+} gdFont;
+</PRE>
+<DT><A NAME="gdFontPtr">gdFontPtr</A> <strong>(TYPE)</strong>
+<DD>
+A pointer to a font structure. Text-output functions expect these
+as their second argument, following the <A HREF="#gdImagePtr">
+gdImagePtr</A> argument. Two such pointers are declared in the
+provided include files gdfonts.h and gdfontl.h.
+<DT><A NAME="gdPoint">gdPoint</A> <strong>(TYPE)</strong>
+<DD>
+Represents a point in the coordinate space of the image; used
+by <A HREF="#gdImagePolygon">gdImagePolygon</A>,
+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A> and
+<A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
+<PRE>
+typedef struct {
+        int x, y;
+} gdPoint, *gdPointPtr;
+</PRE>
+<DT><A NAME="gdPointPtr">gdPointPtr</A> <strong>(TYPE)</strong>
+<DD>
+A pointer to a <A HREF="#gdPoint">gdPoint</A> structure; passed
+as an argument to <A HREF="#gdImagePolygon">gdImagePolygon</A>,
+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A>
+and <A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
+</DL>
+<DT><A NAME="gdFTStringExtra">gdFTStringExtra</a> <strong>(TYPE)</strong>
+<DD>
+A structure used to pass additional parameters to the
+<a href="#gdImageStringFTEx">gdImageStringFTEx</a> function. See
+<a href="#gdImageStringFTEx">gdImageStringFTEx</a> for the
+structure definition.
+</DD>
+<DT><A NAME="gdFTStringExtraPtr">gdFTStringExtraPtr</a> <strong>(TYPE)</strong>
+<DD>
+A pointer to a structure used to pass additional parameters to the
+<a href="#gdImageStringFTEx">gdImageStringFTEx</a> function. See
+<a href="#gdImageStringFTEx">gdImageStringFTEx</a> for the
+structure definition.
+</DD>
+<DT><A NAME="gdSource">gdSource</A> <strong>(TYPE)</strong>
+<DD>
+<pre>
+typedef struct {
+        int (*source) (void *context, char *buffer, int len);
+        void *context;
+} gdSource, *gdSourcePtr;
+</pre>
+Represents a source from which a PNG can be read.
+Programmers who do not wish to read PNGs from a file can provide
+their own alternate input mechanism, using the
+<a href="#gdImageCreateFromPngSource">gdImageCreateFromPngSource</a> function.
+See the documentation of that function for an example of the
+proper use of this type.
+<DT><A NAME="gdSink">gdSink</A> <strong>(TYPE)</strong>
+<DD>
+<PRE>
+typedef struct {
+        int (*sink) (void *context, char *buffer, int len);
+        void *context;
+} gdSink, *gdSinkPtr;
+</PRE>
+Represents a "sink" (destination) to which a PNG can be written.
+Programmers who do not wish to write PNGs to a file can provide
+their own alternate output mechanism, using the
+<a href="#gdImagePngToSink">gdImagePngToSink</a> function.
+See the documentation of that function for an example of the
+proper use of this type.
+<H3><A NAME="creating">Image creation, destruction, loading and saving</A></H3>
+<DL>
+<DT><A NAME="gdImageCreate">gdImageCreate(sx, sy)</A>
+<strong>(FUNCTION)</strong>
+<DD>
+gdImageCreate is called to create palette-based images, with no
+more than 256 colors. Invoke gdImageCreate
+with the x and y dimensions of the desired image. gdImageCreate
+returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the new image, or
+NULL if unable to
+allocate the image. The image must eventually be destroyed
+using <A HREF="#gdImageDestroy">gdImageDestroy()</A>.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+im = gdImageCreate(64, 64);
+/* ... Use the image ... */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageCreateTrueColor">gdImageCreateTrueColor(sx, sy)</A>
+<strong>(FUNCTION)</strong>
+<DD>
+gdImageCreateTrueColor is called to create truecolor images, with 
+an essentially unlimited number of colors. Invoke gdImageCreateTrueColor
+with the x and y dimensions of the desired image. gdImageCreateTrueColor
+returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the new image, or
+NULL if unable to
+allocate the image. The image must eventually be destroyed
+using <A HREF="#gdImageDestroy">gdImageDestroy()</A>.
+<p>
+Truecolor images are always filled with black at creation time.
+There is no concept of a "background" color index.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+im = gdImageCreateTrueColor(64, 64);
+/* ... Use the image ... */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageCreateFromJpeg">gdImageCreateFromJpeg(FILE *in)</A>
+<strong>(FUNCTION)</strong>
+<br>
+<A NAME="gdImageCreateFromJpegPtr">gdImageCreateFromJpegPtr(int size, void *data)</A>
+<strong>(FUNCTION)</strong>
+<br>
+<A NAME="gdImageCreateFromJpegCtx">gdImageCreateFromJpegCtx(gdIOCtx *in)</A>
+<strong>(FUNCTION)</strong>
+<p>
+<DD>
+gdImageCreateFromJpeg is called to load truecolor images from JPEG format files.
+Invoke gdImageCreateFromJpeg with an already opened pointer to a file
+containing the desired image.
+gdImageCreateFromJpeg
+returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the new 
+truecolor image, or NULL
+if unable to load the image (most often because the file is corrupt or
+does not contain a JPEG image). gdImageCreateFromJpeg does <em>not</em>
+close the file. You can inspect the sx and sy members of the
+image to determine its size. The image must eventually be destroyed
+using <A HREF="#gdImageDestroy">gdImageDestroy()</A>. <strong>The
+returned image is always a truecolor image.</strong> 
+<p>
+If you already have the
+image file in memory, pass the size of the file and a pointer to the
+file's data to gdImageCreateFromJpegPtr, which is otherwise identical
+to gdImageCreateFromJpeg.
+<p>
+<PRE>
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+... inside a function ...
+FILE *in;
+in = fopen("myjpeg.jpg", "rb");
+im = gdImageCreateFromJpeg(in);
+fclose(in);
+/* ... Use the image ... */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageCreateFromPng">gdImageCreateFromPng(FILE *in)</A>
+<strong>(FUNCTION)</strong>
+<BR><A NAME="gdImageCreateFromPngPtr">gdImageCreateFromPngPtr(int size, void *data)</A>
+<strong>(FUNCTION)</strong>
+<BR><A NAME="gdImageCreateFromPngCtx">gdImageCreateFromPngCtx(<a href=#gdioctx>gdIOCtx</a> *in)</A>
+<strong>(FUNCTION)</strong>
+<p>
+<DD>
+gdImageCreateFromPng is called to load images from PNG format files.
+Invoke gdImageCreateFromPng with an already opened pointer to a file
+containing the desired image.
+gdImageCreateFromPng
+returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the new image, or NULL
+if unable to load the image (most often because the file is corrupt or
+does not contain a PNG image). gdImageCreateFromPng does <em>not</em>
+close the file. You can inspect the sx and sy members of the
+image to determine its size. The image must eventually be destroyed
+using <A HREF="#gdImageDestroy">gdImageDestroy()</A>.
+<p>
+If you already have the
+image file in memory, pass the size of the file and a pointer to the
+file's data to gdImageCreateFromPngPtr, which is otherwise identical
+to gdImageCreateFromPng.
+<p>
+If the PNG image being loaded is a truecolor image, the resulting
+gdImagePtr will refer to a truecolor image. If the PNG image
+being loaded is a palette or grayscale image, the resulting
+gdImagePtr will refer to a palette image. gd retains only 8 bits
+of resolution for each of the red, green and blue channels, and
+only 7 bits of resolution for the alpha channel. The former
+restriction affects only a handful of very rare 48-bit color
+and 16-bit grayscale PNG images. The second restriction affects
+all semitransparent PNG images, but the difference is essentially
+invisible to the eye. 7 bits of alpha channel resolution is,
+in practice, quite a lot.
+<PRE>
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+... inside a function ...
+FILE *in;
+in = fopen("mypng.png", "rb");
+im = gdImageCreateFromPng(in);
+fclose(in);
+/* ... Use the image ... */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageCreateFromPngSource">gdImageCreateFromPngSource(gdSourcePtr in)</A>
+<strong>(FUNCTION)</strong>
+<dd>
+<b>Deprecated</b> in favor of
+<a href="#gdImageCreateFromPngCtx">gdImageCreateFromPngCtx</a>. Should
+not be used in new applications.
+<p>
+gdImageCreateFromPngSource is called to load a PNG from
+a data source other than a file. Usage is very similar to
+the <a href="#gdImageCreateFromPng">gdImageCreateFromPng</a> function,
+except that the programmer provides a custom data source.
+<p>
+The programmer must write an input function which accepts
+a context pointer, a buffer, and a number of bytes to be
+read as arguments. This function must read the number of
+bytes requested, unless the end of the file has been reached,
+in which case the function should return zero, or an error
+has occurred, in which case the function should return
+<code>-1</code>. The programmer then creates a
+<a href="#gdSource">gdSource</a> structure and sets
+the <code>source</code> pointer to the input function and
+the context pointer to any value which is useful to the
+programmer.
+<p>
+The example below
+implements <a href="#gdImageCreateFromPng">gdImageCreateFromPng</a>
+by creating a custom data source and invoking gdImageCreateFromPngSource.
+<pre>
+static int freadWrapper(void *context, char *buf, int len);
+
+gdImagePtr gdImageCreateFromPng(FILE *in)
+{
+        gdSource s;
+        s.source = freadWrapper;
+        s.context = in;
+        return gdImageCreateFromPngSource(&s);
+}
+
+static int freadWrapper(void *context, char *buf, int len)
+{
+        int got = fread(buf, 1, len, (FILE *) context);
+        return got;
+}
+</pre>
+<DT><A NAME="gdImageCreateFromGif">gdImageCreateFromGif(FILE *in)</A>
+<strong>(FUNCTION)</strong>
+<BR><A NAME="gdImageCreateFromGifPtr">gdImageCreateFromGifPtr(int size, void *data)</A>
+<strong>(FUNCTION)</strong>
+<BR><A NAME="gdImageCreateFromGifCtx">gdImageCreateFromGifCtx(<a href=#gdioctx>gdIOCtx</a> *in)</A>
+<strong>(FUNCTION)</strong>
+<p>
+<DD>
+gdImageCreateFromGif is called to load images from GIF format files.
+Invoke gdImageCreateFromGif with an already opened pointer to a file
+containing the desired image.
+gdImageCreateFromGif
+returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the new image, or NULL
+if unable to load the image (most often because the file is corrupt or
+does not contain a GIF image). gdImageCreateFromGif does <em>not</em>
+close the file. You can inspect the sx and sy members of the
+image to determine its size. The image must eventually be destroyed
+using <A HREF="#gdImageDestroy">gdImageDestroy()</A>.
+<p>
+If you already have the
+image file in memory, pass the size of the file and a pointer to the
+file's data to gdImageCreateFromGifPtr, which is otherwise identical
+to gdImageCreateFromGif.
+<PRE>
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+... inside a function ...
+FILE *in;
+in = fopen("mygif.gif", "rb");
+im = gdImageCreateFromGif(in);
+fclose(in);
+/* ... Use the image ... */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageCreateFromGd">gdImageCreateFromGd(FILE *in)</A>
+<strong>(FUNCTION)</strong>
+<br><DT><A NAME="gdImageCreateFromGdPtr">gdImageCreateFromGdPtr(int size, void *data)</A>
+<strong>(FUNCTION)</strong>
+<BR><A NAME="gdImageCreateFromGdCtx">gdImageCreateFromGdCtx(<a href=#gdioctx>gdIOCtx</a> *in)</A>
+<strong>(FUNCTION)</strong>
+<p>
+<DD>
+gdImageCreateFromGd is called to load images from gd format files.
+Invoke gdImageCreateFromGd
+with an already opened pointer to a file containing the desired image
+in the <A HREF="#gdformat">gd file format</A>, which is specific to
+gd and intended for very fast loading. (It is <em>not</em> intended for
+compression; for compression, use PNG or JPEG.)
+<p>
+If you already have the
+image file in memory, pass the size of the file and a pointer to the
+file's data to gdImageCreateFromGdPtr, which is otherwise identical
+to gdImageCreateFromGd.
+<p>
+gdImageCreateFromGd
+returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the new image, or NULL
+if unable to load the image (most often because the file is corrupt or
+does not contain a gd format image). gdImageCreateFromGd does <em>not</em>
+close the file. You can inspect the sx and sy members of the
+image to determine its size. The image must eventually be destroyed
+using <A HREF="#gdImageDestroy">gdImageDestroy()</A>.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+FILE *in;
+in = fopen("mygd.gd", "rb");
+im = gdImageCreateFromGd(in);
+fclose(in);
+/* ... Use the image ... */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+
+<DT><A NAME="gdImageCreateFromGd2">gdImageCreateFromGd2(FILE *in)</A>
+<strong>(FUNCTION)</strong>
+<br><A NAME="gdImageCreateFromGd2Ptr">gdImageCreateFromGd2Ptr(int size, void *data)</A>
+<strong>(FUNCTION)</strong>
+<BR><A NAME="gdImageCreateFromGd2Ctx">gdImageCreateFromGd2Ctx(<a href=#gdioctx>gdIOCtx</a> *in)</A>
+<strong>(FUNCTION)</strong>
+<p>
+
+<DD>
+gdImageCreateFromGd2 is called to load images from gd2 format files.
+Invoke gdImageCreateFromGd2
+with an already opened pointer to a file containing the desired image
+in the <A HREF="#gdformat">gd2 file format</A>, which is specific to
+gd2 and intended for fast loading of parts of large images. 
+(It is a compressed format, but generally not as good as maximum
+compression of the entire image would be.) 
+<p>
+If you already have the
+image file in memory, pass the size of the file and a pointer to the
+file's data to gdImageCreateFromGd2Ptr, which is otherwise identical
+to gdImageCreateFromGd2.
+<p>
+gdImageCreateFromGd2
+returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the new image, or NULL
+if unable to load the image (most often because the file is corrupt or
+does not contain a gd format image). gdImageCreateFromGd2 does <em>not</em>
+close the file. You can inspect the sx and sy members of the
+image to determine its size. The image must eventually be destroyed
+using <A HREF="#gdImageDestroy">gdImageDestroy()</A>.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+FILE *in;
+in = fopen("mygd.gd2", "rb");
+im = gdImageCreateFromGd2(in);
+fclose(in);
+/* ... Use the image ... */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+
+<DT><A NAME="gdImageCreateFromGd2Part">gdImageCreateFromGd2Part(FILE *in, int srcX, int srcY, int w, int h)</A>
+<strong>(FUNCTION)</strong>
+<br><A NAME="gdImageCreateFromGd2PartPtr">gdImageCreateFromGd2PartPtr(int size, void *data, int srcX, int srcY, int w, int h)</A>
+<strong>(FUNCTION)</strong>
+<BR><A NAME="gdImageCreateFromGd2PartCtx">gdImageCreateFromGd2PartCtx(<a href=#gdioctx>gdIOCtx</a> *in)</A>
+<strong>(FUNCTION)</strong>
+<p>
+
+<DD>
+gdImageCreateFromGd2Part is called to load parts of images from <A HREF="#gdformat">gd2 format files</a>.
+Invoked in the same way as <a href=#gdImageCreateFromGd2>gdImageCreateFromGd2</a>,
+but with extra parameters
+indicating the source (x, y) and width/height of the desired image.
+gdImageCreateFromGd2Part returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the
+new image, or NULL if unable to load the image.
+The image must eventually be destroyed using <A HREF="#gdImageDestroy">gdImageDestroy()</A>.
+<p>
+If you already have the image file in memory, you may use
+gdImageCreateFromGd2PartPtr. Pass the size of the image file,
+in bytes, as the first argument and the pointer to the image file data
+as the second argument.
+<p>
+<DT><A NAME="gdImageCreateFromWBMP">gdImageCreateFromWBMP(FILE *in)</A>
+<strong>(FUNCTION)</strong>
+<BR><A NAME="gdImageCreateFromWBMPPtr">gdImageCreateFromWBMPPtr(int size, void *data)</A>
+<strong>(FUNCTION)</strong>
+<BR><A NAME="gdImageCreateFromWBMPCtx">gdImageCreateFromWBMPCtx(<a href=#gdioctx>gdIOCtx</a> *in)</A>
+<strong>(FUNCTION)</strong>
+<p>
+<DD>
+gdImageCreateFromWBMP is called to load images from WBMP format files.
+Invoke gdImageCreateFromWBMP with an already opened pointer to a file
+containing the desired image.
+gdImageCreateFromWBMP
+returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the new image, or NULL
+if unable to load the image (most often because the file is corrupt or
+does not contain a PNG image). gdImageCreateFromWBMP does <em>not</em>
+close the file. You can inspect the sx and sy members of the
+image to determine its size. The image must eventually be destroyed
+using <A HREF="#gdImageDestroy">gdImageDestroy()</A>.
+<p>
+If you already have the
+image file in memory, pass the size of the file and a pointer to the
+file's data to gdImageCreateFromWBMPPtr, which is otherwise identical
+to gdImageCreateFromWBMP.
+<PRE>
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+... inside a function ...
+FILE *in;
+in = fopen("mywbmp.wbmp", "rb");
+im = gdImageCreateFromWBMP(in);
+fclose(in);
+/* ... Use the image ... */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<p>
+<DT><A NAME="gdImageCreateFromXbm">gdImageCreateFromXbm(FILE *in)</A>
+<strong>(FUNCTION)</strong>
+<DD>
+gdImageCreateFromXbm is called to load images from X bitmap format
+files. Invoke gdImageCreateFromXbm
+with an already opened pointer to a file containing the desired image.
+gdImageCreateFromXbm
+returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the new image, or NULL
+if unable to load the image (most often because the file is corrupt or
+does not contain an X bitmap format image). gdImageCreateFromXbm does
+<em>not</em> close the file. You can inspect the sx and sy members of the
+image to determine its size. The image must eventually be destroyed
+using <A HREF="#gdImageDestroy">gdImageDestroy()</A>.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+FILE *in;
+in = fopen("myxbm.xbm", "rb");
+im = gdImageCreateFromXbm(in);
+fclose(in);
+/* ... Use the image ... */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageCreateFromXpm">gdImageCreateFromXpm(char *filename)</A>
+<strong>(FUNCTION)</strong>
+<DD>
+gdImageCreateFromXbm is called to load images from XPM X Window System
+color bitmap format files. This function is available only if HAVE_XPM
+is selected in the Makefile and the Xpm library is linked with the
+application. Unlike most gd file functions, the Xpm functions require
+filenames, not file pointers. 
+gdImageCreateFromXpm
+returns a <A HREF="#gdImagePtr">gdImagePtr</A> to the new image, or NULL
+if unable to load the image (most often because the file is corrupt or
+does not contain an XPM bitmap format image). You can inspect the sx and sy members of the
+image to determine its size. The image must eventually be destroyed
+using <A HREF="#gdImageDestroy">gdImageDestroy()</A>.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+FILE *in;
+in = fopen("myxpm.xpm", "rb");
+im = gdImageCreateFromXpm(in);
+fclose(in);
+/* ... Use the image ... */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageDestroy">gdImageDestroy(gdImagePtr im)</A> <STRONG>(FUNCTION)</STRONG>
+<DD>gdImageDestroy is used to free the memory associated with
+an image. It is important to invoke gdImageDestroy before
+exiting your program or assigning a new image to
+a <A HREF="#gdImagePtr">gdImagePtr</A> variable.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(10, 10);
+/* ... Use the image ... */
+/* Now destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageJpeg">
+void gdImageJpeg(gdImagePtr im, FILE *out, int quality)</A>
+<STRONG>(FUNCTION)</STRONG><BR>
+<a name="gdImageJpegCtx">void gdImageJpegCtx(gdImagePtr im, gdIOCtx *out, int quality)</A>
+<STRONG>(FUNCTION)</STRONG><BR>
+<DD>
+gdImageJpeg outputs the specified image to the specified
+file in JPEG format. The file must be open for writing. Under MSDOS
+and all versions of Windows, it is important to use "wb" as opposed
+to simply "w" as the mode when opening the file, and under Unix there
+is no penalty for doing so. gdImageJpeg does <em>not</em>
+close the file; your code must do so.
+<P>
+If quality is negative, the default IJG JPEG quality value (which
+should yield a good general quality / size tradeoff for most
+situations) is used.  Otherwise, for practical purposes, quality
+should be a value in the range 0-95, higher quality values usually
+implying both higher quality and larger image sizes.
+<P>
+If you have set image interlacing using
+<A HREF="#gdImageInterlace">gdImageInterlace</A>, this function will
+interpret that to mean you wish to output a progressive JPEG.  Some
+programs (e.g., Web browsers) can display progressive JPEGs
+incrementally; this can be useful when browsing over a relatively slow
+communications link, for example.  Progressive JPEGs can also be
+slightly smaller than sequential (non-progressive) JPEGs.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black, white;
+FILE *out;
+/* Create the image */
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Allocate background */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);
+/* Allocate drawing color */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);
+/* Draw rectangle */
+<A HREF="#gdImageRectangle">gdImageRectangle</A>(im, 0, 0, 99, 99, black);
+/* Open output file in binary mode */
+out = fopen("rect.jpg", "wb");
+/* Write JPEG using default quality */
+gdImageJpeg(im, out, -1);
+/* Close file */
+fclose(out);
+/* Destroy image */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageJpegPtr">
+void* gdImageJpegPtr(gdImagePtr im, int *size, int quality)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>Identical to gdImageJpeg except that it returns a pointer to a memory
+area with the JPEG data. This memory must be freed by the caller when it is
+no longer needed. <strong>The caller must invoke gdFree(), not free(), 
+unless the caller is absolutely certain that the same implementations of
+malloc, free, etc. are used both at library build time and at application
+build time.</strong> The 'size' parameter receives the total size of the block
+of memory.
+<DT><A NAME="gdImageGif">
+void gdImageGif(gdImagePtr im, FILE *out)</A>
+<br>
+<A NAME="gdImageGifCtx">
+void gdImageGifCtx(gdImagePtr im, gdIOCtx *out)</A>
+
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageGif outputs the specified image to the specified
+file in GIF format. The file must be open for writing. Under MSDOS
+and all versions of Windows, it is important to use "wb" as opposed
+to simply "w" as the mode when opening the file, and under Unix there
+is no penalty for doing so. gdImageGif does <em>not</em>
+close the file; your code must do so.
+<p>
+GIF does not support true color; GIF images can contain a maximum
+of 256 colors. If the image to be written is a 
+truecolor image, such as those created with 
+<a href="#gdImageCreateTrueColor">gdImageCreateTrueColor</a> or loaded 
+from a JPEG or a truecolor PNG image file, a palette-based
+temporary image will automatically be created internally using the 
+<a href="#gdImageCreatePaletteFromTrueColor">gdImageCreatePaletteFromTrueColor</a> function. The original image pixels are not modified. This conversion
+produces high quality palettes but does require some CPU time. If you are
+regularly converting truecolor to palette in this way, you should consider
+creating your image as a palette-based image in the first place.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black, white;
+FILE *out;
+/* Create the image */
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Allocate background */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);
+/* Allocate drawing color */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);
+/* Draw rectangle */
+<A HREF="#gdImageRectangle">gdImageRectangle</A>(im, 0, 0, 99, 99, black);
+/* Open output file in binary mode */
+out = fopen("rect.gif", "wb");
+/* Write GIF */
+gdImageGif(im, out);
+/* Close file */
+fclose(out);
+/* Destroy image */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageGifPtr">
+void* gdImageGifPtr(gdImagePtr im, int *size)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>Identical to gdImageGif except that it returns a pointer to a memory
+area with the GIF data. This memory must be freed by the caller when it is
+no longer needed. <strong>The caller must invoke gdFree(), not free(), 
+unless the caller is absolutely certain that the same implementations of
+malloc, free, etc. are used both at library build time and at application
+build time.</strong> The 'size' parameter receives the total size of the block
+of memory.
+
+<DT><A NAME="gdImageGifAnimBegin">
+void gdImageGifAnimBegin(gdImagePtr im, FILE *out, int GlobalCM, int Loops)</A>
+<br>
+<A NAME="gdImageGifAnimBeginCtx">
+void gdImageGifAnimBeginCtx(gdImagePtr im, gdIOCtx *out, int GlobalCM, int Loops)</A>
+
+<STRONG>(FUNCTION)</STRONG>
+
+<DD>This function must be called as the first function when creating a
+GIF animation.  It writes the correct GIF file headers to selected
+file output, and prepares for frames to be added for the animation.
+The image argument is not used to produce an image frame to the file,
+it is only used to establish the GIF animation frame size, interlacing
+options and the color palette.  gdImageGifAnimAdd is used to
+add the first and subsequent frames to the animation, and the animation
+must be terminated by writing a semicolon character (;) to it or by using
+gdImageGifAnimEnd to do that.
+<p>
+
+The GlobalCM flag indicates if a global color map (or palette) is used
+in the GIF89A header.  A nonzero value specifies that a global color
+map should be used to reduce the size of the animation.
+Of course, if the color maps of
+individual frames differ greatly, a global color map may not be a good idea.
+GlobalCM=1 means write global color map, GlobalCM=0 means do not, and
+GlobalCM=-1 means to do the default, which currently is to use a global
+color map.
+
+<p>
+
+If Loops is 0 or greater, the Netscape 2.0 extension for animation
+loop count is written.  0 means infinite loop count.  -1 means that
+the extension is not added which results in no looping. -1 is the
+default.
+
+<DT><A NAME="gdImageGifAnimBeginPtr">
+void* gdImageGifAnimBeginPtr(gdImagePtr im, int *size, int GlobalCM, int Loops)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>Identical to gdImageGifAnimBegin except that it returns a pointer
+to a memory area with the GIF data. This memory must be freed by the
+caller when it is no longer needed. <strong>The caller must invoke
+gdFree(), not free(), unless the caller is absolutely certain that the
+same implementations of malloc, free, etc. are used both at library
+build time and at application build time.</strong> The 'size'
+parameter receives the total size of the block of memory.
+
+<DT><A NAME="gdImageGifAnimAdd">
+void gdImageGifAnimAdd(gdImagePtr im, FILE *out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm)</A>
+<br>
+<A NAME="gdImageGifAnimAddCtx">
+void gdImageGifAnimAddCtx(gdImagePtr im, gdIOCtx *out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm)</A>
+
+<STRONG>(FUNCTION)</STRONG>
+
+<DD> This function writes GIF animation frames to GIF animation, which
+was initialized with <a
+href="#gdImageGifAnimBegin">gdImageGifAnimBegin</a>.  With LeftOfs and
+TopOfs you can place this frame in different offset than (0,0) inside
+the image screen as defined in gdImageGifAnimBegin.  Delay between the
+previous frame and this frame is in 1/100s units.  Disposal is usually
+<code>gdDisposalNone</code>, meaning that the pixels changed by this
+frame should remain on the display when the next frame begins to render, but
+can also be <code>gdDisposalUnknown</code> (not recommended),
+<code>gdDisposalRestoreBackground</code> (restores the first
+allocated color of the global palette), or
+<code>gdDisposalRestorePrevious</code> (restores the appearance of the
+affected area before the frame was rendered). Only
+<code>gdDisposalNone</code> is a sensible choice for the first frame.
+If <code>previm</code> is
+passed, the built-in GIF optimizer will always use <code>gdDisposalNone</code> 
+regardless of the Disposal parameter.
+<p>
+Setting the LocalCM flag to 1 adds a local palette for this image to the 
+animation.  Otherwise the global palette is assumed and the user must make 
+sure the palettes match.  Use <A HREF="#gdImagePaletteCopy">gdImagePaletteCopy</A> to do that.
+
+<p>
+
+Automatic optimization is activated by giving the previous image as a 
+parameter.  This function then compares the images and only writes the changed
+pixels to the new frame in animation.  The Disposal parameter for
+optimized animations must be set to 1, also for the first frame.
+LeftOfs and TopOfs parameters are ignored for optimized frames.  To
+achieve good optimization, it is usually best to use a single global 
+color map.  To allow gdImageGifAnimAdd to compress unchanged pixels via
+the use of a transparent color, the image must include a transparent color.
+
+<PRE>
+... inside a function ...
+gdImagePtr im, im2, im3;
+int black, white, trans;
+FILE *out;
+/* Create the image */
+im = gdImageCreate(100, 100);
+/* Allocate background */
+white = gdImageColorAllocate(im, 255, 255, 255);
+/* Allocate drawing color */
+black = gdImageColorAllocate(im, 0, 0, 0);
+/* Allocate transparent color for animation compression */
+trans = gdImageColorAllocate(im, 1, 1, 1);
+/* Draw rectangle */
+gdImageRectangle(im, 0, 0, 10, 10, black);
+/* Open output file in binary mode */
+out = fopen("anim.gif", "wb");
+/* Write GIF header.  Use global color map.  Loop a few times */
+gdImageGifAnimBegin(im, out, 1, 3);
+/* Write the first frame.  No local color map.  Delay = 1s */
+gdImageGifAnimAdd(im, out, 0, 0, 0, 100, 1, NULL);
+/* construct the second frame */
+im2 = gdImageCreate(100, 100);
+/* Allocate background to make it white */
+(void)gdImageColorAllocate(im2, 255, 255, 255);
+/* Make sure the palette is identical */
+gdImagePaletteCopy (im2, im);
+/* Draw something */
+gdImageRectangle(im2, 0, 0, 15, 15, black);
+/* Allow animation compression with transparent pixels */
+gdImageColorTransparent (im2, trans);
+/* Add the second frame */
+gdImageGifAnimAdd(im2, out, 0, 0, 0, 100, 1, im);
+/* construct the second frame */
+im3 = gdImageCreate(100, 100);
+/* Allocate background to make it white */
+(void)gdImageColorAllocate(im3, 255, 255, 255);
+/* Make sure the palette is identical */
+gdImagePaletteCopy (im3, im);
+/* Draw something */
+gdImageRectangle(im3, 0, 0, 15, 20, black);
+/* Allow animation compression with transparent pixels */
+gdImageColorTransparent (im3, trans);
+/* Add the third frame, compressing against the second one */
+gdImageGifAnimAdd(im3, out, 0, 0, 0, 100, 1, im2);
+/* Write the end marker */
+/* gdImageGifAnimEnd(out); is the same as the following: */
+putc (';', out);
+/* Close file */
+fclose(out);
+/* Destroy images */
+gdImageDestroy(im);
+gdImageDestroy(im2);
+gdImageDestroy(im3);
+</PRE>
+
+<DT><A NAME="gdImageGifAnimAddPtr">
+void* gdImageGifAnimAddPtr(gdImagePtr im, int *size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>Identical to gdImageGifAnimAdd except that it returns a pointer
+to a memory area with the GIF data. This memory must be freed by the
+caller when it is no longer needed. <strong>The caller must invoke
+gdFree(), not free(), unless the caller is absolutely certain that the
+same implementations of malloc, free, etc. are used both at library
+build time and at application build time.</strong> The 'size'
+parameter receives the total size of the block of memory.
+
+<DT><A NAME="gdImageGifAnimEnd">
+void gdImageGifAnimEnd(FILE *out)</A>
+<br>
+<A NAME="gdImageGifAnimEndCtx">
+void gdImageGifAnimEndCtx(gdIOCtx *out)</A>
+
+<STRONG>(FUNCTION)</STRONG>
+
+<DD>Writes semicolon character (;) to the output file.  This
+terminates the GIF file properly.  You can omit the call to
+gdImageGifAnimEnd and just print out the semicolon.
+
+<DT><A NAME="gdImageGifAnimEndPtr">
+void* gdImageGifAnimEndPtr(int *size)</A>
+<STRONG>(FUNCTION)</STRONG>
+
+<DD>Returns a one byte string containing the semicolon character (;).
+Returns a pointer to a memory area with that string. This memory must
+be freed by the caller when it is no longer needed. <strong>The caller
+must invoke gdFree(), not free(), unless the caller is absolutely
+certain that the same implementations of malloc, free, etc. are used
+both at library build time and at application build time.</strong> The
+'size' parameter receives the total size of the block of memory.  The
+string ";" can be used in place of this function.
+
+<DT><A NAME="gdImagePng">
+void gdImagePng(gdImagePtr im, FILE *out)</A>
+<br>
+<A NAME="gdImagePngCtx">
+void gdImagePngCtx(gdImagePtr im, gdIOCtx *out)</A>
+
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImagePng outputs the specified image to the specified
+file in PNG format. The file must be open for writing. Under MSDOS
+and all versions of Windows, it is important to use "wb" as opposed
+to simply "w" as the mode when opening the file, and under Unix there
+is no penalty for doing so. gdImagePng does <em>not</em>
+close the file; your code must do so.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black, white;
+FILE *out;
+/* Create the image */
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Allocate background */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);
+/* Allocate drawing color */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);
+/* Draw rectangle */
+<A HREF="#gdImageRectangle">gdImageRectangle</A>(im, 0, 0, 99, 99, black);
+/* Open output file in binary mode */
+out = fopen("rect.png", "wb");
+/* Write PNG */
+gdImagePng(im, out);
+/* Close file */
+fclose(out);
+/* Destroy image */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImagePngEx">
+void gdImagePngEx(gdImagePtr im, FILE *out, int level)</A>
+<br>
+<A NAME="gdImagePngCtxEx">
+void gdImagePngCtxEx(gdImagePtr im, gdIOCtx *out, int level)</A>
+
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+Like <a href="#gdImagePng">gdImagePng</a>, gdImagePngEx outputs the 
+specified image to the specified file in PNG format. In addition,
+gdImagePngEx allows the level of compression to be specified. A compression
+level of 0 means "no compression." A compression level of 1 means
+"compressed, but as quickly as possible." A compression level of 9
+means "compressed as much as possible to produce the smallest possible
+file." A compression level of -1 will use the default compression level
+at the time zlib was compiled on your system.
+<p>
+For more information, see <a href="#gdImagePng">gdImagePng</a>.
+<DT><A NAME="gdImagePngPtr">
+void* gdImagePngPtr(gdImagePtr im, int *size)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>Identical to gdImagePng except that it returns a pointer to a memory
+area with the PNG data. This memory must be freed by the caller when it is
+no longer needed. <strong>The caller must invoke gdFree(), not free(), 
+unless the caller is absolutely certain that the same implementations of
+malloc, free, etc. are used both at library build time and at application
+build time.</strong> The 'size' parameter receives the total size of the block
+of memory.
+<DT><A NAME="gdImagePngPtrEx">
+void* gdImagePngPtrEx(gdImagePtr im, int *size, int level)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+Like <a href="#gdImagePngPtr">gdImagePngPtr</a>, gdImagePngPtrEx returns a
+pointer to a PNG image in allocated memory.
+In addition, gdImagePngPtrEx allows the level of compression to be 
+specified. A compression level of 0 means "no compression." A compression level of 1 means
+"compressed, but as quickly as possible." A compression level of 9
+means "compressed as much as possible to produce the smallest possible
+file." A compression level of -1 will use the default compression level
+at the time zlib was compiled on your system.
+<p>
+For more information, see <a href="#gdImagePngPtr">gdImagePngPtr</a>.
+<DT><A NAME="gdImagePngToSink">gdImagePngToSink(gdImagePtr im, gdSinkPtr out)</A>
+<strong>(FUNCTION)</strong>
+<dd>
+gdImagePngToSink is called to write a PNG to
+a data "sink" (destination) other than a file. Usage is very similar to
+the <a href="#gdImagePng">gdImagePng</a> function,
+except that the programmer provides a custom data sink.
+<p>
+The programmer must write an output function which accepts
+a context pointer, a buffer, and a number of bytes to be
+written as arguments. This function must write the number of
+bytes requested and return that number, unless an error
+has occurred, in which case the function should return
+<code>-1</code>. The programmer then creates a
+<a href="#gdSink">gdSink</a> structure and sets
+the <code>sink</code> pointer to the output function and
+the context pointer to any value which is useful to the
+programmer.
+<p>
+The example below
+implements <a href="#gdImagePng">gdImagePng</a>
+by creating a custom data source and invoking gdImagePngFromSink.
+<pre>
+static int stdioSink(void *context, char *buffer, int len)
+{
+  return fwrite(buffer, 1, len, (FILE *) context);
+}
+
+void gdImagePng(gdImagePtr im, FILE *out)
+{
+  gdSink mySink;
+  mySink.context = (void *) out;
+  mySink.sink = stdioSink;
+  gdImagePngToSink(im, &mySink);
+}
+</pre>
+<DT><A NAME="gdImageWBMP">
+void gdImageWBMP(gdImagePtr im, int fg, FILE *out)</A>
+<BR><A NAME="gdImageWBMPCtx">gdImageWBMPCtx(<a href=#gdioctx>gdIOCtx</a> *out)</A>
+<strong>(FUNCTION)</strong><STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageWBMP outputs the specified image to the specified
+file in WBMP format. The file must be open for writing. Under MSDOS
+and all versions of Windows, it is important to use "wb" as opposed
+to simply "w" as the mode when opening the file, and under Unix there
+is no penalty for doing so. gdImageWBMP does <em>not</em>
+close the file; your code must do so.
+<p>
+<strong>WBMP file support is black and white only. The color index
+specified by the fg argument is the "foreground," and only pixels
+of this color will be set in the WBMP file.</strong> All other pixels
+will be considered "background."
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black, white;
+FILE *out;
+/* Create the image */
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Allocate background */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);
+/* Allocate drawing color */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);
+/* Draw rectangle */
+<A HREF="#gdImageRectangle">gdImageRectangle</A>(im, 0, 0, 99, 99, black);
+/* Open output file in binary mode */
+out = fopen("rect.wbmp", "wb");
+/* Write WBMP, with black as foreground */
+gdImageWBMP(im, black, out);
+/* Close file */
+fclose(out);
+/* Destroy image */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageWBMPPtr">
+void* gdImageWBMPPtr(gdImagePtr im, int *size)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>Identical to gdImageWBMP except that it returns a pointer to a memory
+area with the WBMP data. This memory must be freed by the caller when it is
+no longer needed. <strong>The caller must invoke gdFree(), not free(), 
+unless the caller is absolutely certain that the same implementations of
+malloc, free, etc. are used both at library build time and at application
+build time.</strong> The 'size' parameter receives the total size of the block
+of memory.
+<DT><A NAME="gdImageGd">
+void gdImageGd(gdImagePtr im, FILE *out)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageGd outputs the specified image to the specified
+file in the <A HREF="#gdformat">gd image format</A>. The file must
+be open for writing. Under MSDOS and all versions of Windows, it is
+important to use "wb" as
+opposed to simply "w" as the mode when opening the file, and under
+Unix there is no penalty for doing so. gdImagePng does <em>not</em>
+close the file; your code must do so.
+<P>
+The gd image format is intended for fast reads and writes of
+images your program will need frequently to build other
+images. It is <em>not</em> a compressed format, and is not intended
+for general use.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black, white;
+FILE *out;
+/* Create the image */
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Allocate background */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);
+/* Allocate drawing color */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);
+/* Draw rectangle */
+<A HREF="#gdImageRectangle">gdImageRectangle</A>(im, 0, 0, 99, 99, black);
+/* Open output file in binary mode */
+out = fopen("rect.gd", "wb");
+/* Write gd format file */
+gdImageGd(im, out);
+/* Close file */
+fclose(out);
+/* Destroy image */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+
+<DT><A NAME="gdImageGdPtr">
+void* gdImageGdPtr(gdImagePtr im, int *size)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>Identical to gdImageGd except that it returns a pointer to a memory
+area with the GD data. This memory must be freed by the caller when it is
+no longer needed. <strong>The caller must invoke gdFree(), not free(), 
+unless the caller is absolutely certain that the same implementations of
+malloc, free, etc. are used both at library build time and at application
+build time.</strong> The 'size' parameter receives the total size of the block
+of memory.
+
+<DT><A NAME="gdImageGd2">
+void gdImageGd2(gdImagePtr im, FILE *out, int chunkSize, int fmt)</A>
+<br>
+<A NAME="gdImageGd2Ctx">
+void gdImageGd2Ctx(gdImagePtr im, gdIOCtx *out, int chunkSize, int fmt)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageGd2 outputs the specified image to the specified
+file in the <A HREF="#gd2format">gd2 image format</A>. The file must
+be open for writing. Under MSDOS and all versions of Windows, it is
+important to use "wb" as
+opposed to simply "w" as the mode when opening the file, and under
+Unix there is no penalty for doing so. gdImageGd2 does <em>not</em>
+close the file; your code must do so.
+<P>
+The gd2 image format is intended for fast reads and writes of
+parts of images.
+It is a compressed format, and well suited to retrieving smll sections of
+much larger images.
+
+The third and fourth parameters are the 'chunk size' and format resposectively.
+<p>
+The file is stored as a series of compressed subimages, and the
+<strong>Chunk Size</strong> determines the sub-image size - a value of
+zero causes the GD library to use the default.
+<p>
+It is also possible to store GD2 files in an uncompressed format, in which case the
+fourth parameter should be GD2_FMT_RAW.
+
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black, white;
+FILE *out;
+/* Create the image */
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Allocate background */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);
+/* Allocate drawing color */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);
+/* Draw rectangle */
+<A HREF="#gdImageRectangle">gdImageRectangle</A>(im, 0, 0, 99, 99, black);
+/* Open output file in binary mode */
+out = fopen("rect.gd", "wb");
+/* Write gd2 format file */
+gdImageGd2(im, out, 0, GD2_FMT_COMPRESSED);
+/* Close file */
+fclose(out);
+/* Destroy image */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+
+<DT><A NAME="gdImageGd2Ptr">
+void* gdImageGd2Ptr(gdImagePtr im, int chunkSize, int fmt, int *size)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>Identical to gdImageGd2 except that it returns a pointer to a memory
+area with the GD2 data. This memory must be freed by the caller when it is
+no longer needed. <strong>The caller must invoke gdFree(), not free(), 
+unless the caller is absolutely certain that the same implementations of
+malloc, free, etc. are used both at library build time and at application
+build time.</strong> The 'size' parameter receives the total size of the block
+of memory.
+<DT><A NAME="gdImageTrueColorToPalette">
+void gdImageTrueColorToPalette(gdImagePtr im, int ditherFlag, int colorsWanted)</A>
+<br>
+<A NAME="gdImageCreatePaletteFromTrueColor">
+gdImagePtr gdImageCreatePaletteFromTrueColor(gdImagePtr im, int ditherFlag, int colorsWanted)</A>
+
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+<blockquote>
+gdImageCreatePaletteFromTrueColor returns a <b>new</b> 
+image. gdImageTrueColorToPalette permanently converts the
+<b>existing</b> image. The two functions are otherwise identical.
+</blockquote>
+<p>
+The function converts a truecolor image to a palette-based image,
+using a high-quality two-pass quantization routine.
+If ditherFlag is set, the image will be
+dithered to approximate colors better, at the expense
+of some obvious "speckling." colorsWanted can be
+anything up to 256. If the original source image
+includes photographic information or anything that
+came out of a JPEG, 256 is strongly recommended. 
+100% transparency of a single transparent color in the
+original truecolor image will be preserved. There is no other
+support for preservation of alpha channel or transparency in
+the destination image.
+<p>
+For best results, don't use this function -- write real
+truecolor PNGs and JPEGs. The disk space gain of
+conversion to palette is not great (for small images
+it can be negative) and the quality loss is ugly. However,
+the version of this function included in version 2.0.12 and later does
+do a better job than the version included prior to 2.0.12.
+</DL>
+<H3><A NAME="drawing">Drawing Functions</A></H3>
+<DL>
+<DT><A NAME="gdImageSetPixel">void gdImageSetPixel(gdImagePtr im, int x, int y, int color)</A> <STRONG>(FUNCTION)</STRONG>
+<DD>gdImageSetPixel sets a pixel to a particular color index. Always use
+this function or one of the other drawing functions to access pixels;
+do not access the pixels of the <A HREF="#gdImage">gdImage</A> structure
+directly.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Set a pixel near the center. */
+gdImageSetPixel(im, 50, 50, white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageLine">void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageLine is used to draw a line between two endpoints (x1,y1 and x2, y2).
+The line is drawn using the color index specified. Note that the color
+index can be an actual color returned by <A HREF="#gdImageColorAllocate">
+gdImageColorAllocate</A> or one of <A HREF="#gdStyled">gdStyled</A>,
+<A HREF="#gdBrushed">gdBrushed</A> or <A HREF="#gdStyledBrushed">
+gdStyledBrushed</A>.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green 
+  and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Draw a line from the upper left corner to the 
+  lower right corner. */
+gdImageLine(im, 0, 0, 99, 99, white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageDashedLine">void gdImageDashedLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageDashedLine is provided <strong>solely for backwards compatibility
+</strong> with gd 1.0. New programs should draw dashed lines using
+the normal <A HREF="#gdImageLine">gdImageLine</A> function and the
+new <A HREF="#gdImageSetStyle">gdImageSetStyle</A> function.
+<P>
+gdImageDashedLine is used to draw a dashed line between two endpoints
+(x1,y1 and x2, y2).
+The line is drawn using the color index specified. The portions of the line
+that are not drawn are left transparent so the background is visible.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue 
+  all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Draw a dashed line from the upper left corner 
+  to the lower right corner. */
+gdImageDashedLine(im, 0, 0, 99, 99);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImagePolygon">void gdImagePolygon(gdImagePtr im, gdPointPtr points, int pointsTotal, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImagePolygon is used to draw a polygon with the verticies
+(at least 3) specified, using the color index specified.
+See also <A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+/* Points of polygon */
+<A HREF="#gdPoint">gdPoint</A> points[3];
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and 
+  blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Draw a triangle. */
+points[0].x = 50;
+points[0].y = 0;
+points[1].x = 99;
+points[1].y = 99;
+points[2].x = 0;
+points[2].y = 99;
+gdImagePolygon(im, points, 3, white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageOpenPolygon">void gdImageOpenPolygon(gdImagePtr im, gdPointPtr points, int pointsTotal, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageOpenPolygon is used to draw a sequence of lines with the verticies
+(at least 3) specified, using the color index specified.  Unlike
+<A HREF="#gdImagePolygon">gdImagePolygon</A>, the enpoints of the line
+sequence are not connected to a closed polygon.
+<DT><A NAME="gdImageRectangle">void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageRectangle is used to draw a rectangle with the two corners
+(upper left first, then lower right) specified, using the
+color index specified.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Draw a rectangle occupying the central area. */
+gdImageRectangle(im, 25, 25, 74, 74, white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageFilledPolygon">void gdImageFilledPolygon(gdImagePtr im, gdPointPtr points, int pointsTotal, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageFilledPolygon is used to fill a polygon with the verticies
+(at least 3) specified, using the color index specified.
+See also <A HREF="#gdImageFilledPolygon">gdImagePolygon</A>.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+int red;
+/* Points of polygon */
+<A HREF="#gdPoint">gdPoint</A> points[3];
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Allocate the color red. */
+red = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 0, 0);  
+/* Draw a triangle. */
+points[0].x = 50;
+points[0].y = 0;
+points[1].x = 99;
+points[1].y = 99;
+points[2].x = 0;
+points[2].y = 99;
+/* Paint it in white */
+gdImageFilledPolygon(im, points, 3, white);
+/* Outline it in red; must be done second */
+<A HREF="#gdImagePolygon">gdImagePolygon</A>(im, points, 3, red);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageFilledRectangle">void gdImageFilledRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageFilledRectangle is used to draw a solid rectangle with the two corners
+(upper left first, then lower right) specified, using the
+color index specified.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">int gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Draw a filled rectangle occupying the central area. */
+gdImageFilledRectangle(im, 25, 25, 74, 74, white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageArc">void gdImageArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color)</A>
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageArc is used to draw a partial ellipse centered at the given point,
+with the specified width and height in pixels. The arc begins at
+the position in degrees specified by <code>s</code> and ends at
+the position specified by <code>e</code>. The arc is drawn in
+the color specified by the last argument. A circle can be drawn
+by beginning from 0 degrees and ending at 360 degrees, with
+width and height being equal. e must be greater than s. Values greater
+than 360 are interpreted modulo 360.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 50);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Inscribe an ellipse in the image. */
+gdImageArc(im, 50, 25, 98, 48, 0, 360, white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageFilledArc">void gdImageFilledArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color, int style)</A>
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageFilledArc is used to draw a partial ellipse centered at the given point,
+with the specified width and height in pixels. The arc begins at
+the position in degrees specified by <code>s</code> and ends at
+the position specified by <code>e</code>. The arc is filled in
+the color specified by the second to last argument. A circle can be drawn
+by beginning from 0 degrees and ending at 360 degrees, with
+width and height being equal. e must be greater than s. Values greater
+than 360 are interpreted modulo 360. The last argument is a bitwise
+OR of the following possibilities:
+<ul>
+<li>gdArc
+<li>gdChord
+<li>gdPie (synonym for gdChord)
+<li>gdNoFill
+<li>gdEdged
+</ul>
+gdArc and gdChord are mutually exclusive;
+gdChord just connects the starting and ending
+angles with a straight line, while gdArc produces
+a rounded edge. gdPie is a synonym for gdArc.
+gdNoFill indicates that the arc or chord should be
+outlined, not filled. gdEdged, used together with
+gdNoFill, indicates that the beginning and ending
+angles should be connected to the center; this is
+a good way to outline (rather than fill) a
+'pie slice'.
+
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 50);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Inscribe a filled pie slice in the image. */
+gdImageFilledArc(im, 50, 25, 98, 48, 0, 45, white, gdArc);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageFilledEllipse">void gdImageFilledEllipse(gdImagePtr im, int cx, int cy, int w, int h, int color)</A>
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageFilledEllipse is used to draw an ellipse centered at the given point,
+with the specified width and height in pixels. The ellipse is filled in
+the color specified by the last argument. 
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 50);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Inscribe a filled ellipse in the image. */
+gdImageFilledEllipse(im, 50, 25, 98, 48, white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageFillToBorder">void gdImageFillToBorder(gdImagePtr im, int x, int y, int border, int color)
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageFillToBorder floods a portion of the image with the specified
+<code>color</code>, beginning at the specified point and stopping at
+the specified <code>border</code> color. For a way of flooding an
+area defined by the color of the starting point, see
+<A HREF="#gdImageFill">gdImageFill</A>.
+<P>
+The border color <em>cannot</em> be a special color
+such as <A HREF="#gdTiled">gdTiled</A>; it must be a proper
+solid color. The fill color can be, however.
+<P>
+Note that gdImageFillToBorder is recursive. It is not the most
+naive implementation possible, and the implementation is
+expected to improve, but there will always be degenerate
+cases in which the stack can become very deep. This can be
+a problem in MSDOS and MS Windows 3.1 environments. (Of course,
+in a Unix or Windows 95/98/NT environment with a proper stack, this is
+not a problem at all.)
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+int red;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 50);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Allocate the color red. */
+red = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 0, 0);  
+/* Inscribe an ellipse in the image. */
+gdImageArc(im, 50, 25, 98, 48, 0, 360, white);
+/* Flood-fill the ellipse. Fill color is red, border color is
+  white (ellipse). */
+gdImageFillToBorder(im, 50, 50, white, red);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageFill">void gdImageFill(gdImagePtr im, int x, int y, int color)
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageFill floods a portion of the image with the specified
+<code>color</code>, beginning at the specified point and flooding the
+surrounding region of the same color as the starting point.
+For a way of flooding a region defined by a specific border
+color rather than by its interior color, see
+<A HREF="#gdImageFillToBorder">gdImageFillToBorder</A>.
+<P>
+The fill color can be <A HREF="#gdTiled">gdTiled</A>, resulting
+in a tile fill using another image as the tile. However,
+the tile image cannot be transparent. If the image you wish
+to fill with has a transparent color index, call
+<A HREF="#gdImageTransparent">gdImageTransparent</A> on the
+tile image and set the transparent color index to -1
+to turn off its transparency.
+<P>
+Note that gdImageFill is recursive. It is not the most
+naive implementation possible, and the implementation is
+expected to improve, but there will always be degenerate
+cases in which the stack can become very deep. This can be
+a problem in MSDOS and MS Windows environments. (Of course,
+in a Unix or Windows 95/98/NT environment with a proper stack, this is
+not a problem at all.)
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+int red;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 50);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Allocate the color red. */
+red = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 0, 0);  
+/* Inscribe an ellipse in the image. */
+gdImageArc(im, 50, 25, 98, 48, 0, 360, white);
+/* Flood-fill the ellipse. Fill color is red, and will replace the
+  black interior of the ellipse. */
+gdImageFill(im, 50, 50, red);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageSetAntiAliased">void gdImageSetAntiAliased(gdImagePtr im, int c)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+"Antialiasing" is a process by which jagged edges associated with line
+drawing can be reduced by blending the foreground color with an appropriate
+percentage of the background, depending on how much of the pixel in question
+is actually within the boundaries of the line being drawn. 
+All line-drawing functions,
+such as <A HREF="#gdImageLine">gdImageLine</A>,
+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A> and
+<A HREF="#gdImagePolygon">gdImagePolygon</A>, will draw antialiased lines
+if the special "color" <A HREF="#gdAntiAliased">
+gdAntiAliased</A> is used when calling them.
+<P>
+gdImageSetAntiAliased is used to specify the actual foreground color
+to be used when drawing antialiased lines. You may set any color to
+be the foreground, however as of version 2.0.12 an alpha channel
+component is not supported. 
+<p>
+Antialiased lines can be drawn on both truecolor and palette-based
+images. However, attempts to draw antialiased lines on 
+highly complex palette-based backgrounds may not give satisfactory
+results, due to the limited number of colors available in the
+palette. Antialiased line-drawing on simple backgrounds should
+work well with palette-based images; otherwise create or fetch
+a truecolor image instead.
+<P>
+You need not take any special action when you are finished
+with antialised line drawing.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im, brush;
+int black;
+int blue;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+blue = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 255);
+gdImageSetAntiAliased(im, blue);
+/* Draw a smooth line from the upper left corner to the 
+  lower right corner. */
+<A HREF="#gdImageLine">gdImageLine</A>(im, 0, 0, 99, 99, <A HREF="#gdBrushed">gdAntiAliased</A>);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+See also <a href="#gdAntiAliased">gdAntiAliased</a> and
+<a href="#gdSetAntiAliasedDontBlend">gdSetAntiAliasedDontBlend</a>.
+<DT><A NAME="gdImageSetAntiAliasedDontBlend">void gdImageSetAntiAliasedDontBlend(gdImagePtr im, int c)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+Normally, when drawing lines with the special
+<a href="#gdAntiAliased">gdAntiAliased</a> "color," blending with the 
+background to reduce jagged edges is the desired behavior. However, when
+it is desired that lines not be blended with one particular color when
+it is encountered in the background, the 
+gdImageSetAntiAliasedDontBlend function can be used to indicate the
+special color that the foreground should stand out more clearly against.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im, brush;
+int black;
+int blue;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+blue = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 255);
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);
+
+gdImageSetAntiAliased(im, blue);
+/* The portion of the line that crosses this white rectangle will
+  not be blended smoothly */
+gdImageSetAntiAliasedDontBlend(im, white);
+gdImageFilledRectangle(im, 25, 25, 75, 75, white);
+/* Draw a smooth line from the upper left corner 
+  to the lower right corner. */
+<A HREF="#gdImageLine">gdImageLine</A>(im, 0, 0, 99, 99, <A HREF="#gdBrushed">gdAntiAliased</A>);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+See also <a href="#gdAntiAliased">gdAntiAliased</a> and
+<a href="#gdSetAntiAliased">gdSetAntiAliased</a>.
+<DT><A NAME="gdImageSetBrush">void gdImageSetBrush(gdImagePtr im, gdImagePtr brush)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+A "brush" is an image used to draw wide, shaped strokes in another image. Just
+as a paintbrush is not a single point, a brush image need not be
+a single pixel. <em>Any</em> gd image can be used as a brush, and by
+setting the transparent color index of the brush image with
+<A HREF="#gdImageColorTransparent">gdImageColorTransparent</A>,
+a brush of any shape can be created. All line-drawing functions,
+such as <A HREF="#gdImageLine">gdImageLine</A>,
+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A> and
+<A HREF="#gdImagePolygon">gdImagePolygon</A>, will use the
+current brush if the special "color" <A HREF="#gdBrushed">
+gdBrushed</A> or <A HREF="#gdStyledBrushed">gdStyledBrushed</A>
+is used when calling them.
+<P>
+gdImageSetBrush is used to specify the brush to be used in a
+particular image. You can set any image to be the brush.
+If the brush image does not have the same color map as the
+first image, any colors missing from the first image
+will be allocated. If not enough colors can be allocated,
+the closest colors already available will be used. This
+allows arbitrary PNGs to be used as brush images. It also
+means, however, that you should not set a brush unless you
+will actually use it; if you set a rapid succession of
+different brush images, you can quickly fill your color map,
+and the results will not be optimal.
+<P>
+You need not take any special action when you are finished
+with a brush. As for any other image, if you will not
+be using the brush image for any further purpose,
+you should call <A HREF="#gdImageDestroy">gdImageDestroy</A>.
+You must not use the color <A HREF="#gdBrushed">gdBrushed</A>
+if the current brush has been destroyed; you can of
+course set a new brush to replace it.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im, brush;
+FILE *in;
+int black;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Open the brush PNG. For best results, portions of the
+  brush that should be transparent (ie, not part of the
+  brush shape) should have the transparent color index. */
+in = fopen("star.png", "rb");
+brush = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+gdImageSetBrush(im, brush);
+/* Draw a line from the upper left corner to the lower right corner
+  using the brush. */
+<A HREF="#gdImageLine">gdImageLine</A>(im, 0, 0, 99, 99, <A HREF="#gdBrushed">gdBrushed</A>);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+/* Destroy the brush image */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(brush);
+</PRE>
+<DT><A NAME="gdImageSetTile">void gdImageSetTile(gdImagePtr im, gdImagePtr tile)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+A "tile" is an image used to fill an area with  a repeated pattern.
+<em>Any</em> gd image can be used as a tile, and by
+setting the transparent color index of the tile image with
+<A HREF="#gdImageColorTransparent">gdImageColorTransparent</A>,
+a tile that allows certain parts of the underlying area to shine
+through can be created. All region-filling functions,
+such as <A HREF="#gdImageFill">gdImageFill</A> and
+<A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>, will use the
+current tile if the special "color" <A HREF="#gdTiled">
+gdTiled</A> is used when calling them.
+<P>
+gdImageSetTile is used to specify the tile to be used in a
+particular image. You can set any image to be the tile.
+If the tile image does not have the same color map as the
+first image, any colors missing from the first image
+will be allocated. If not enough colors can be allocated,
+the closest colors already available will be used. This
+allows arbitrary PNGs to be used as tile images. It also
+means, however, that you should not set a tile unless you
+will actually use it; if you set a rapid succession of
+different tile images, you can quickly fill your color map,
+and the results will not be optimal.
+<P>
+You need not take any special action when you are finished
+with a tile. As for any other image, if you will not
+be using the tile image for any further purpose,
+you should call <A HREF="#gdImageDestroy">gdImageDestroy</A>.
+You must not use the color <A HREF="#gdBrushed">gdTiled</A>
+if the current tile has been destroyed; you can of
+course set a new tile to replace it.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im, tile;
+FILE *in;
+int black;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Open the tile PNG. For best results, portions of the
+  tile that should be transparent (ie, allowing the
+  background to shine through) should have the transparent
+  color index. */
+in = fopen("star.png", "rb");
+tile = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+gdImageSetTile(im, tile);
+/* Fill an area using the tile. */
+<A HREF="#gdImageFilledRectangle">gdImageFilledRectangle</A>(im, 25, 25, 75, 75, <A HREF="#gdTiled">gdTiled</A>);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+/* Destroy the tile image */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(tile);
+</PRE>
+<DT><A NAME="gdImageSetStyle">void gdImageSetStyle(gdImagePtr im, int *style, int styleLength)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+It is often desirable to draw dashed lines, dotted lines, and other
+variations on a broken line. gdImageSetStyle can be used to set
+any desired series of colors, including a special color that
+leaves the background intact, to be repeated during the drawing
+of a line.
+<P>
+To use gdImageSetStyle, create an array of integers and assign
+them the desired series of color values to be repeated.
+You can assign the special color value <A HREF="#gdTransparent">
+gdTransparent</A> to indicate that the existing color should
+be left unchanged for that particular pixel (allowing a dashed
+line to be attractively drawn over an existing image).
+<P>
+Then, to draw a line using the style, use the normal
+<A HREF="#gdImageLine">gdImageLine</A> function with the
+special color value <A HREF="#gdStyled">gdStyled</A>.
+<P>
+As of <A HREF="#whatsnew1.1.1">version 1.1.1</A>, the style
+array is copied when you set the style, so you need not
+be concerned with keeping the array around indefinitely.
+This should not break existing code that assumes styles
+are not copied.
+<P>
+You can also combine styles and brushes to draw the brush
+image at intervals instead of in a continuous stroke.
+When creating a style for use with a brush, the
+style values are interpreted differently: zero (0) indicates
+pixels at which the brush should not be drawn, while one (1)
+indicates pixels at which the brush should be drawn.
+To draw a styled, brushed line, you must use the
+special color value <A HREF="#gdStyledBrushed">
+gdStyledBrushed</A>. For an example of this feature
+in use, see gddemo.c (provided in the distribution).
+<PRE>
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int styleDotted[2], styleDashed[6];
+FILE *in;
+int black;
+int red;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+red = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 0, 0);  
+/* Set up dotted style. Leave every other pixel alone. */
+styleDotted[0] = red;
+styleDotted[1] = gdTransparent;
+/* Set up dashed style. Three on, three off. */
+styleDashed[0] = red;
+styleDashed[1] = red;
+styleDashed[2] = red;
+styleDashed[3] = gdTransparent;
+styleDashed[4] = gdTransparent;
+styleDashed[5] = gdTransparent;
+/* Set dotted style. Note that we have to specify how many pixels are
+  in the style! */
+gdImageSetStyle(im, styleDotted, 2);
+/* Draw a line from the upper left corner to the lower right corner. */
+<A HREF="#gdImageLine">gdImageLine</A>(im, 0, 0, 99, 99, <A HREF="#gdStyled">gdStyled</A>);
+/* Now the dashed line. */
+gdImageSetStyle(im, styleDashed, 6);
+<A HREF="#gdImageLine">gdImageLine</A>(im, 0, 99, 0, 99, <A HREF="#gdStyled">gdStyled</A>);
+
+/* ... Do something with the image, such as 
+  saving it to a file ... */
+
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageSetThickness">void gdImageSetThickness(gdImagePtr im, int thickness)</A> <STRONG>(FUNCTION)</STRONG>
+<DD>gdImageSetThickness determines the width of lines drawn by the
+<a href="#gdImageLine">gdImageLine</a>, <a href="#gdImagePolygon">gdImagePolygon</a>, <a href="#gdImageOpenPolygon">gdImageOpenPolygon</a>
+and related functions, in pixels. 
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Set thickness. */
+gdImageSetThickness(im, 4);
+/* Draw a fat line from the upper left corner to the lower right corner. */
+gdImageLine(im, 0, 0, 99, 99, white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageAlphaBlending">void gdImageAlphaBlending(gdImagePtr im, int blending)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+The <a href="#gdImageAlphaBlending">gdImageAlphaBlending</a>
+function allows for two different modes of drawing on truecolor
+images. In blending mode, which is <strong>on by default (gd 2.0.2
+and above)</strong>, the alpha channel component of the color 
+supplied to all drawing functions, such as 
+<a href="#gdImageSetPixel">gdImageSetPixel</a>, determines how much of 
+the underlying color should be allowed to shine through. As a result, 
+gd automatically blends the existing color at that point with the
+drawing color, and stores the result in the image. The resulting pixel
+is opaque. In non-blending mode, the drawing color is copied literally 
+with its alpha channel information, replacing the destination pixel.
+Blending mode is not available when drawing on palette images. 
+<PRE>
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int red, blue;
+im = <A HREF="#gdImageCreate">gdImageCreateTrueColor</A>(100, 100);
+/* Background color */
+red = <A HREF="#gdTrueColor">gdTrueColor</A>(255, 0, 0);  
+gdImageFilledRectangle(im, 0, 0, 100, 100, red);
+/* Drawing color. Full transparency would be an alpha channel value
+  of 127 (gd has a 7 bit alpha chnanel). 0 is opaque,
+  127 is transparent. So cut gdAlphaTransparent in half to get
+  50% blending. */
+blue = <A HREF="#gdTrueColor">gdTrueColorAlpha</A>(0, 0, 255, gdAlphaTransparent / 2);  
+/* Draw with blending. Result will be 50% red, 50% blue: yellow 
+  (emitted light, remember, not reflected light. What you learned 
+  in Kindergarten is wrong here). */
+gdImageAlphaBlending(im, 1);
+<a href="#gdImageFilledRectangle">gdImageFilledRectangle</a>(im, 0, 0, 25, 25, blue);
+/* Draw without blending. Result will be 50% blue, 50%
+  the background color of the image viewer or web browser
+  used; results in browsers that don't support
+  semi-transparent pixels are unpredictable! */
+gdImageAlphaBlending(im, 0);
+<a href="#gdImageFilledRectangle">gdImageFilledRectangle</a>(im, 75, 75, 25, 25, blue);
+/* Write the image to disk, etc. */
+</pre>
+<DT><A NAME="gdImageSaveAlpha">
+void gdImageSaveAlpha(gdImagePtr im, int saveFlag)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+By default, gd 2.0.2 and above do not attempt to save full alpha channel information
+(as opposed to single-color transparency) when saving PNG images. (PNG
+is currently the only output format supported by gd which can accommodate
+alpa channel information.) This saves space in the output file. If you wish
+to create an image with alpha channel information for use with tools that
+support it, call gdImageSaveAlpha(im, 1) to turn on saving of such 
+information, and call <a href="#gdImageAlphaBlending">gdImageAlphaBlending(im, 0)</a>
+to turn off alpha blending within the library so that alpha channel
+information is actually stored in the image rather than being composited
+immediately at the time that drawing functions are invoked.
+<DT><A NAME="gdImageSetClip">
+void gdImageSetClip(gdImagePtr im, int x1, int y1, int x2, int y2)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+Establishes a clipping rectangle. Once gdImageSetClip has been called,
+all future drawing operations will remain within the specified clipping
+area, until a new gdImageSetClip call takes place. For instance, 
+if a clipping rectangle of 25, 25, 75, 75 has been set within a
+100x100 image, a diagonal line from 0,0 to 99,99 will appear only 
+between 25,25 and 75,75.
+<p>
+If gdImageSetClip is never called, the clipping area will be the
+entire image. 
+<p>
+The parameters passed to gdImageSetClip are checked against the dimensions
+of the image and limited to "safe" values.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Set the clipping rectangle. */
+gdImageSetClip(im, 25, 25, 75, 75);
+/* Draw a line from the upper left corner to the lower right corner. 
+  Only the part within the clipping rectangle will appear. */
+<a href="#gdImageLine">gdImageLine</a>(im, 0, 0, 99, 99, white);
+/* ... Do something with the image, such as 
+  saving it to a file ... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+See also <a href="#gdImageGetClip">gdImageGetClip</a>.
+<DT><A NAME="gdImageGetClip">
+void gdImageGetClip(gdImagePtr im, int *x1P, int *y1P, int *x2P, int *y2P)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+Fetches the boundaries of the current clipping rectangle.
+<pre>
+... Inside a function ... 
+gdImagePtr im = <a href="#gdImageCreateTrueColor">gdImageCreateTrueColor</a>(100, 100);
+int x1, y1, x2, y2;
+gdImageSetClip(im, 25, 25, 75, 75);
+gdImageGetClip(im, &x1, &y1, &x2, &y2);
+printf("%d %d %d %d\n", x1, y1, x2, y2);
+</pre>
+The above code would print:
+<pre>
+25 25 75 75
+</pre>
+See also <a href="#gdImageSetClip">gdImageSetClip</a>.
+</DL>
+<H3><A NAME="query">Query Functions</A></H3>
+<DL>
+<DT><A NAME="gdImageBlue">
+int gdImageAlpha(gdImagePtr im, int color)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageAlpha is a macro which returns the alpha channel component of
+the specified color index. Alpha channel values vary between
+0 (gdAlphaOpaque), which does not blend at all with the background,
+through 127 (gdAlphaTransparent), which allows the background to
+shine through 100%. Use this macro rather than accessing the
+structure members directly.
+int gdImageBlue(gdImagePtr im, int color)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageBlue is a macro which returns the blue component of
+the specified color index. Use this macro rather than accessing the
+structure members directly.
+<DT><A NAME="gdImageGetPixel">int gdImageGetPixel(gdImagePtr im, int x, int y)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageGetPixel() retrieves the color index of a particular
+pixel. Always use this function to query pixels;
+do not access the pixels of the <A HREF="#gdImage">gdImage</A> structure
+directly.
+<PRE>
+... inside a function ...
+FILE *in;
+gdImagePtr im;
+int c;
+in = fopen("mypng.png", "rb");
+im = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+c = gdImageGetPixel(im, gdImageSX(im) / 2, gdImageSY(im) / 2);
+printf("The value of the center pixel is %d; RGB values are %d,%d,%d\n",
+  c, im->red[c], im->green[c], im->blue[c]);
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>  
+<DT><A NAME="gdImageBoundsSafe">
+int gdImageBoundsSafe(gdImagePtr im, int x, int y)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageBoundsSafe returns true (1) if the specified point is within the 
+current clipping rectangle, false (0) if not. The clipping rectangle is
+set by <a href="#gdImageSetClip">gdImageSetClip</a> and defaults
+to the entire image. This function is intended primarily for
+use by those who wish to add functions to gd. All of the gd drawing
+functions already clip safely using this function or its macro
+equivalent in gd.c, gdImageBoundsSafeMacro.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+if (gdImageBoundsSafe(im, 50, 50)) {
+  printf("50, 50 is within the image bounds\n");
+} else {
+  printf("50, 50 is outside the image bounds\n");
+}
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageGreen">
+int gdImageGreen(gdImagePtr im, int color)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageGreen is a macro which returns the green component of
+the specified color index. Use this macro rather than accessing the
+structure members directly.
+<DT><A NAME="gdImageRed">
+int gdImageRed(gdImagePtr im, int color)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageRed is a macro which returns the red component of
+the specified color index. Use this macro rather than accessing the
+structure members directly.
+<DT><A NAME="gdImageSX">
+int gdImageSX(gdImagePtr im)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageSX is a macro which returns the width of the image
+in pixels. Use this macro rather than accessing the
+structure members directly.
+<DT><A NAME="gdImageSY">
+int gdImageSY(gdImagePtr im)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageSY is a macro which returns the height of the image
+in pixels. Use this macro rather than accessing the
+structure members directly.
+</DL>
+<H3><A NAME="fonts">Fonts and text-handling functions</A></H3>
+<DL>
+<DT><A NAME="gdFontGetSmall">
+gdFontPtr gdFontGetSmall(void)</a>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+Returns a font pointer for the "small" gd font. Your code must
+include the header file <code>gdfonts.h</code> before
+calling this function. Under Windows, due to the nature of DLLs, 
+the use of this function is strongly recommended rather than attempting
+to use the <code>gdFontSmall</code> pointer directly. (You may
+safely assign the result to a local <code>gdFontPtr</code> variable
+in your own code.)
+<p>
+See <a href="#gdImageString">gdImageString</a> for more information
+and examples, or <a href="#gdImageStringFT">gdImageStringFT</a> for a
+freetype-based alternative that supports truetype fonts.
+<DT><A NAME="gdFontGetLarge">
+gdFontPtr gdFontGetLarge(void)</a>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+Returns a font pointer for the "large" gd font. Your code must
+include the header file <code>gdfontl.h</code> before
+calling this function. Under Windows, due to the nature of DLLs, 
+the use of this function is strongly recommended rather than attempting
+to use the <code>gdFontLarge</code> pointer directly. (You may
+safely assign the result to a local <code>gdFontPtr</code> variable
+in your own code.)
+<p>
+See <a href="#gdImageString">gdImageString</a> for more information
+and examples, or <a href="#gdImageStringFT">gdImageStringFT</a> for a
+freetype-based alternative that supports truetype fonts.
+<DT><A NAME="gdFontGetMediumBold">
+gdFontPtr gdFontGetMediumBold(void)</a>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+Returns a font pointer for the "medium bold" gd font. Your code must
+include the header file <code>gdfontmb.h</code> before
+calling this function. Under Windows, due to the nature of DLLs, 
+the use of this function is strongly recommended rather than attempting
+to use the <code>gdFontMediumBold</code> pointer directly. (You may
+safely assign the result to a local <code>gdFontPtr</code> variable
+in your own code.)
+<p>
+See <a href="#gdImageString">gdImageString</a> for more information
+and examples, or <a href="#gdImageStringFT">gdImageStringFT</a> for a
+freetype-based alternative that supports truetype fonts.
+<DT><A NAME="gdFontGetGiant">
+gdFontPtr gdFontGetGiant(void)</a>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+Returns a font pointer for the "giant" gd font. Your code must
+include the header file <code>gdfontg.h</code> before
+calling this function. Under Windows, due to the nature of DLLs, 
+the use of this function is strongly recommended rather than attempting
+to use the <code>gdFontGiant</code> pointer directly. (You may
+safely assign the result to a local <code>gdFontPtr</code> variable
+in your own code.)
+<p>
+See <a href="#gdImageString">gdImageString</a> for more information
+and examples, or <a href="#gdImageStringFT">gdImageStringFT</a> for a
+freetype-based alternative that supports truetype fonts.
+<DT><A NAME="gdFontGetTiny">
+gdFontPtr gdFontGetTiny(void)</a>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+Returns a font pointer for the "tiny" gd font. Your code must
+include the header file <code>gdfontt.h</code> before
+calling this function. Under Windows, due to the nature of DLLs, 
+the use of this function is strongly recommended rather than attempting
+to use the <code>gdFontTiny</code> pointer directly. (You may
+safely assign the result to a local <code>gdFontPtr</code> variable
+in your own code.)
+<p>
+See <a href="#gdImageString">gdImageString</a> for more information
+and examples, or <a href="#gdImageStringFT">gdImageStringFT</a> for a
+freetype-based alternative that supports truetype fonts.
+<DT><A NAME="gdImageChar">
+void gdImageChar(gdImagePtr im, gdFontPtr font, int x, int y,
+  int c, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageChar is used to draw single characters on the image.
+(To draw multiple characters, use <A HREF="#gdImageString">
+gdImageString</A> or <A HREF="#gdImageString16">
+gdImageString16</A>.
+See also <A HREF="#gdImageStringFT">gdImageStringFT</A> for a high quality
+solution.)
+The second argument is a pointer to a font definition structure; five fonts are
+provided with gd, gdFontTiny, gdFontSmall, gdFontMediumBold,
+gdFontLarge, and gdFontGiant. 
+<p>
+You must include the files "gdfontt.h", "gdfonts.h", "gdfontmb.h",
+"gdfontl.h" and "gdfontg.h" respectively
+and (if you are not using a library-based approach) link with the
+corresponding .c files to use the provided fonts.
+<p>
+<blockquote>
+<b>Windows DLL users:</b> although you can use
+these DLL-exported pointers directly, you cannot easily assign them to other 
+pointers. This will cause hard-to-debug problems. To avoid such troubles, you 
+should call the functions gdFontGetTiny(), gdFontGetSmall(), 
+gdFontGetMediumBold(), gdFontGetLarge(), and gdFontGetGiant() in order to 
+obtain pointers to the fonts under Windows.
+</blockquote>
+<p>
+The character specified by the fifth
+argument is drawn from left to right in the specified
+color. (See <A HREF="#gdImageCharUp">gdImageCharUp</A> for a way
+of drawing vertical text.) Pixels not
+set by a particular character retain their previous color.
+<PRE>
+#include "gd.h"
+#include "gdfontl.h"
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Draw a character. */
+gdImageChar(im, gdFontGetLarge(), 0, 0, 'Q', white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageCharUp">
+void gdImageCharUp(gdImagePtr im, gdFontPtr font, int x, int y,
+int c, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageCharUp is used to draw single characters on the image,
+rotated 90 degrees.
+(To draw multiple characters, use <A HREF="#gdImageStringUp">
+gdImageStringUp</A> or <A HREF="#gdImageStringUp16">
+gdImageStringUp16</A>.) The second argument is a
+pointer to a font definition structure; five fonts are
+provided with gd, gdFontTiny, gdFontSmall, gdFontMediumBold,
+gdFontLarge, and gdFontGiant. You must
+include the files "gdfontt.h", "gdfonts.h", "gdfontmb.h",
+"gdfontl.h" and "gdfontg.h" respectively
+and (if you are not using a library-based approach) link with the
+corresponding .c files to use the provided fonts. 
+<p>
+<blockquote>
+<b>Windows DLL users:</b> although you can use
+these DLL-exported pointers directly, you cannot easily assign them to other 
+pointers. This will cause hard-to-debug problems. To avoid such troubles, you 
+should call the functions gdFontGetTiny(), gdFontGetSmall(), 
+gdFontGetMediumBold(), gdFontGetLarge(), and gdFontGetGiant() in order to 
+obtain pointers to the fonts under Windows.
+</blockquote>
+<p>
+The character specified by
+the fifth argument is drawn
+from bottom to top, rotated at a 90-degree angle,  in the specified
+color.  (See <A HREF="#gdImageChar">gdImageChar</A> for a way
+of drawing horizontal text.)  Pixels not
+set by a particular character retain their previous color.
+<PRE>
+#include "gd.h"
+#include "gdfontl.h"
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Draw a character upwards so it rests against the top of the image. */
+gdImageCharUp(im, gdFontGetLarge(),
+  0, gdFontGetLarge()->h, 'Q', white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageString">
+void gdImageString(gdImagePtr im, gdFontPtr font, int x, int y,
+unsigned char *s, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageString is used to draw multiple characters on the image.
+(To draw single characters, use <A HREF="#gdImageChar">
+gdImageChar</A>.) The second argument is a
+pointer to a font definition structure; five fonts are
+provided with gd, gdFontTiny, gdFontSmall, gdFontMediumBold,
+gdFontLarge, and gdFontGiant. You must
+include the files "gdfontt.h", "gdfonts.h", "gdfontmb.h",
+"gdfontl.h" and "gdfontg.h" respectively
+and (if you are not using a library-based approach) link with the
+corresponding .c files to use the provided fonts.
+<p>
+<blockquote>
+<b>Windows DLL users:</b> although you can use
+these DLL-exported pointers directly, you cannot easily assign them to other 
+pointers. This will cause hard-to-debug problems. To avoid such troubles, you 
+should call the functions gdFontGetTiny(), gdFontGetSmall(), 
+gdFontGetMediumBold(), gdFontGetLarge(), and gdFontGetGiant() in order to 
+obtain pointers to the fonts under Windows.
+</blockquote>
+The null-terminated C string specified
+by the fifth argument is drawn from left to right in the specified
+color.  (See <A HREF="#gdImageStringUp">gdImageStringUp</A> for a way
+of drawing vertical text.
+See also <A HREF="#gdImageStringFT">gdImageStringFT</A> for a high
+quality solution.)
+Pixels not set by a particular character retain their previous color.
+<PRE>
+#include "gd.h"
+#include "gdfontl.h"
+#include &lt;string.h&gt;
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+/* String to draw. */
+char *s = "Hello.";
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Draw a centered string. */
+gdImageString(im, gdFontGetLarge(),
+  im->sx / 2 - (strlen(s) * gdFontGetLarge()->w / 2),
+  im->sy / 2 - gdFontGetLarge()->h / 2,
+  s, white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageString16">
+void gdImageString16(gdImagePtr im, gdFontPtr font, int x, int y,
+unsigned short *s, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageString16 is used to draw multiple 16-bit characters on the image.
+(To draw single characters, use <A HREF="#gdImageChar">
+gdImageChar16</A>.) The second argument is a
+pointer to a font definition structure; no 16-bit fonts are
+provided with gd as standard equipment and there does not seem to be
+much momentum to create them although the bdftogd script can do so. The 
+preferred solution is <a href="#gdImageStringFT">gdImageStringFT</a>, which
+uses freetype to provide truetype font support. 
+<p>
+<blockquote>
+<b>Windows DLL users:</b> although you can use
+these DLL-exported pointers directly, you cannot easily assign them to other 
+pointers. This will cause hard-to-debug problems. To avoid such troubles, you 
+should call the functions gdFontGetTiny(), gdFontGetSmall(), 
+gdFontGetMediumBold(), gdFontGetLarge(), and gdFontGetGiant() in order to 
+obtain pointers to the fonts under Windows.
+</blockquote>
+The null-terminated string of characters represented as 16-bit unsigned
+short integers specified by the fifth argument is drawn from left to right
+in the specified
+color.  (See <A HREF="#gdImageStringUp16">gdImageStringUp16</A> for a way
+of drawing vertical text.)  Pixels not
+set by a particular character retain their previous color.
+<p>
+This function was added in gd1.3 to provide a means of rendering
+fonts with more than 256 characters for those who have them. A
+more frequently used routine is <a href="#gdImageString">gdImageString</a>.
+<DT><A NAME="gdImageStringUp">
+void gdImageStringUp(gdImagePtr im, gdFontPtr font, int x, int y,
+unsigned char *s, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageStringUp is used to draw multiple characters on the image,
+rotated 90 degrees.
+(To draw single characters, use <A HREF="#gdImageCharUp">
+gdImageCharUp</A>.) The second argument is a
+pointer to a font definition structure; five fonts are
+provided with gd, gdFontTiny, gdFontSmall, gdFontMediumBold,
+gdFontLarge, and gdFontGiant. You must
+include the files "gdfontt.h", "gdfonts.h", "gdfontmb.h",
+"gdfontl.h" and "gdfontg.h" respectively
+and (if you are not using a library-based approach) link with the
+corresponding .c files to use the provided fonts.
+<blockquote>
+<b>Windows DLL users:</b> although you can use
+these DLL-exported pointers directly, you cannot easily assign them to other 
+pointers. This will cause hard-to-debug problems. To avoid such troubles, you 
+should call the functions gdFontGetTiny(), gdFontGetSmall(), 
+gdFontGetMediumBold(), gdFontGetLarge(), and gdFontGetGiant() in order to 
+obtain pointers to the fonts under Windows.
+</blockquote>
+
+The null-terminated C string specified
+by the fifth argument is drawn from bottom to top (rotated
+90 degrees) in the specified color.  (See
+<A HREF="#gdImageString">gdImageString</A> for a way
+of drawing horizontal text.)  Pixels not
+set by a particular character retain their previous color.
+<PRE>
+#include "gd.h"
+#include "gdfontl.h"
+#include &lt;string.h&gt;
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+/* String to draw. */
+char *s = "Hello.";
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color white (red, green and blue all maximum). */
+white = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 255, 255);  
+/* Draw a centered string going upwards. Axes are reversed,
+  and Y axis is decreasing as the string is drawn. */
+gdImageStringUp(im, gdFontGetLarge(),
+  im->w / 2 - gdFontGetLarge()->h / 2,
+  im->h / 2 + (strlen(s) * gdFontGetLarge()->w / 2),
+  s, white);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageStringUp16">
+void gdImageStringUp16(gdImagePtr im, gdFontPtr font, int x, int y,
+unsigned short *s, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageString is used to draw multiple 16-bit characters vertically on
+the image. (To draw single characters, use <A HREF="#gdImageChar">
+gdImageChar</A>.) The second argument is a
+pointer to a font definition structure; five fonts are
+provided with gd, gdFontTiny, gdFontSmall, gdFontMediumBold,
+gdFontLarge, and gdFontGiant. You must
+include the files "gdfontt.h", "gdfonts.h", "gdfontmb.h",
+"gdfontl.h" and "gdfontg.h" respectively
+and (if you are not using a library-based approach) link with the
+corresponding .c files to use the provided fonts.
+<blockquote>
+<b>Windows DLL users:</b> although you can use
+these DLL-exported pointers directly, you cannot easily assign them to other 
+pointers. This will cause hard-to-debug problems. To avoid such troubles, you 
+should call the functions gdFontGetTiny(), gdFontGetSmall(), 
+gdFontGetMediumBold(), gdFontGetLarge(), and gdFontGetGiant() in order to 
+obtain pointers to the fonts under Windows.
+</blockquote>
+The null-terminated string of characters represented as 16-bit unsigned
+short integers specified by the fifth argument is drawn from bottom to top
+in the specified color.
+(See <A HREF="#gdImageStringUp16">gdImageStringUp16</A> for a way
+of drawing horizontal text.)  Pixels not
+set by a particular character retain their previous color.
+<p>
+This function was added in gd1.3 to provide a means of rendering
+fonts with more than 256 characters for those who have them. A
+more frequently used routine is <a href="#gdImageStringUp">gdImageStringUp</a>.
+<DT><A NAME="gdFTUseFontConfig">int gdFTUseFontConfig(int flag)</a>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+GD 2.0.29 introduced the ability to use 
+<a href="http://freedesktop.org/software/fontconfig">fontconfig patterns</a>
+rather than font file names as parameters to 
+<a href="#gdImageStringFT">gdImageStringFT</a>,
+<a href="#gdImageStringFTEx">gdImageStringFTEx</a> and
+<a href="#gdImageStringFTEx">gdImageStringFTCircle</a>. 
+For backwards compatibility reasons, the fontlist parameter to those
+functions is still expected to be a full or partial font file path name 
+or list thereof by default. However, as a convenience, a single call
+to gdFTUseFontConfig with a nonzero parameter configures gd to expect
+the fontlist parameter to be a fontconfig pattern. Regardless of whether
+the flag argument is nonzero, this function returns true when the 
+fontconfig library is available and false when it is not. When fontconfig
+is not available, the fontlist parameter always behaves as in previous
+versions of GD.
+<pre>
+#include "gd.h"
+#include &lt;string.h&gt;
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+int brect[8];
+int x, y;
+char *err;
+
+char *s = "Hello."; /* String to draw. */
+double sz = 40.;
+char *fc = "times:bold:italic"; /* fontconfig pattern */
+
+/* Signal that all freetype font calls in this program will receive
+  fontconfig patterns rather than filenames of font files */
+gdUseFontConfig(1);
+
+/* obtain brect so that we can size the image */
+err = <A HREF="#gdImageStringFT">gdImageStringFT</A>(NULL,&brect[0],0,fc,sz,0.,0,0,s);
+if (err) {fprintf(stderr,err); return 1;}
+
+/* create an image big enough for the string plus a little whitespace */
+x = brect[2]-brect[6] + 6;
+y = brect[3]-brect[7] + 6;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(x,y);
+
+/* Background color (first allocated) */
+white = <A HREF="#gdImageColorResolve">gdImageColorResolve</A>(im, 255, 255, 255);
+black = <A HREF="#gdImageColorResolve">gdImageColorResolve</A>(im, 0, 0, 0);
+
+/* render the string, offset origin to center string*/
+/* note that we use top-left coordinate for adjustment
+ * since gd origin is in top-left with y increasing downwards. */
+x = 3 - brect[6];
+y = 3 - brect[7];
+err = <A HREF="#gdImageStringFT">gdImageStringFT</A>(im,&brect[0],black,fc,sz,0.0,x,y,s);
+if (err) {fprintf(stderr,err); return 1;}
+</pre>
+<DT><A NAME="gdImageStringFT">
+char *gdImageStringFT(gdImagePtr im, int *brect,
+  int fg, char *fontname, double ptsize, double angle,
+  int x, int y, char *string)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+<strong>RECOMMENDED. New in 1.8.4.</strong> gdImageStringFT draws text using the
+FreeType 2.x library.
+<p>
+gdImageStringFT draws a string of anti-aliased characters on the image using 
+the <A HREF=http://www.freetype.org/>FreeType</A>
+library to render user-supplied TrueType fonts. <strong>We do not provide 
+TrueType fonts (.ttf and .ttc files). Obtaining them is entirely up to 
+you.</strong> The string is anti-aliased, meaning that there should be 
+fewer "jaggies" visible. The fontname is the full pathname to a TrueType 
+font file, or a font face name if the GDFONTPATH environment variable
+or the compiled-in DEFAULT_FONTPATH macro of gdft.c have been set intelligently. In the absence of a full path, the font face name may be presented with or without extension (2.0.26).
+<p>
+The null-terminated <b>string</b> argument is considered to be encoded via the UTF_8
+standard; also, HTML entities are supported, including decimal,
+hexadecimal, and named entities (2.0.26). Those who are passing 
+ordinary ASCII strings may have difficulty with the &amp; 
+character unless encoded correctly as &amp; but should have no 
+other difficulties.
+<p>
+The string may be arbitrarily scaled (ptsize) and rotated (angle in radians).
+The direction of rotation is counter-clockwise, with 0 radians (0 degrees)
+at 3 o'clock and PI/2 radians (90 degrees) at 12 o'clock. 
+
+<p>
+The user-supplied int brect[8] array is filled on return from gdImageStringFT
+with the 8 elements representing the 4 corner coordinates of the
+bounding rectangle (the smallest rectangle that completely surrounds the 
+rendered string and does not intersect any pixel of the rendered string).
+
+<TABLE BORDER="1">
+<TR><TD ALIGN="LEFT" VALIGN="TOP">0</TD><TD ALIGN="LEFT" VALIGN="TOP">
+lower left corner, X position</TD></TR>
+<TR><TD ALIGN="LEFT" VALIGN="TOP">1</TD><TD ALIGN="LEFT" VALIGN="TOP">
+lower left corner, Y position</TD></TR>
+<TR><TD ALIGN="LEFT" VALIGN="TOP">2</TD><TD ALIGN="LEFT" VALIGN="TOP">
+lower right corner, X position</TD></TR>
+<TR><TD ALIGN="LEFT" VALIGN="TOP">3</TD><TD ALIGN="LEFT" VALIGN="TOP">
+lower right corner, Y position</TD></TR>
+<TR><TD ALIGN="LEFT" VALIGN="TOP">4</TD><TD ALIGN="LEFT" VALIGN="TOP">
+upper right corner, X position</TD></TR>
+<TR><TD ALIGN="LEFT" VALIGN="TOP">5</TD><TD ALIGN="LEFT" VALIGN="TOP">
+upper right corner, Y position</TD></TR>
+<TR><TD ALIGN="LEFT" VALIGN="TOP">6</TD><TD ALIGN="LEFT" VALIGN="TOP">
+upper left corner, X position</TD></TR>
+<TR><TD ALIGN="LEFT" VALIGN="TOP">7</TD><TD ALIGN="LEFT" VALIGN="TOP">
+upper left corner, Y position</TD></TR>
+</TABLE>
+<p>
+The points are relative to the text regardless of the angle, so "upper left"
+means in the top left-hand corner seeing the text horizontally.
+<p>
+Use a NULL gdImagePtr to get the bounding rectangle without rendering.
+This is a relatively cheap operation if followed by a rendering of the same
+string, because of the caching of the partial rendering during bounding
+rectangle calculation.
+<p>
+The string is rendered in the color indicated by the gf color index.
+<strong>Use the negative of the desired color index to 
+disable anti-aliasing.</strong>
+<p>
+The string may contain UTF-8 sequences like: "&amp;#192;"
+<p>
+gdImageStringFT will return a null char* on success, or an error
+string on failure.
+<PRE>
+#include "gd.h"
+#include &lt;string.h&gt;
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int white;
+int brect[8];
+int x, y;
+char *err;
+
+char *s = "Hello."; /* String to draw. */
+double sz = 40.;
+char *f = "/usr/local/share/ttf/Times.ttf";  /* User supplied font */
+
+/* obtain brect so that we can size the image */
+err = <A HREF="#gdImageStringFT">gdImageStringFT</A>(NULL,&brect[0],0,f,sz,0.,0,0,s);
+if (err) {fprintf(stderr,err); return 1;}
+
+/* create an image big enough for the string plus a little whitespace */
+x = brect[2]-brect[6] + 6;
+y = brect[3]-brect[7] + 6;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(x,y);
+
+/* Background color (first allocated) */
+white = <A HREF="#gdImageColorResolve">gdImageColorResolve</A>(im, 255, 255, 255);
+black = <A HREF="#gdImageColorResolve">gdImageColorResolve</A>(im, 0, 0, 0);
+
+/* render the string, offset origin to center string*/
+/* note that we use top-left coordinate for adjustment
+ * since gd origin is in top-left with y increasing downwards. */
+x = 3 - brect[6];
+y = 3 - brect[7];
+err = <A HREF="#gdImageStringFT">gdImageStringFT</A>(im,&brect[0],black,f,sz,0.0,x,y,s);
+if (err) {fprintf(stderr,err); return 1;}
+
+/* Write img to stdout */
+<A HREF="#gdImagePng">gdImagePng</A>(im, stdout);
+
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+See also <a href="#gdImageStringFTEx">gdImageStringFTEx</a>.
+<DT><A NAME="gdImageStringFTEx">
+char *gdImageStringFTEx(gdImagePtr im, int *brect,
+  int fg, char *fontname, double ptsize, double angle,
+  int x, int y, char *string, gdFTStringExtraPtr strex)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+<strong>New in 2.0.5,</strong> also found in common third-party versions
+of gd. gdImageStringFTEx extends the capabilities of 
+<a href="#gdImageStringFT">gdImageStringFT</a> by providing a 
+way to pass additional parameters. 
+<p>
+If the <code>strex</code> parameter is not null, it must point to a
+<code>gdFTStringExtra</code> structure. As of gd 2.0.5, this structure
+is defined as follows:
+<pre>
+typedef struct {
+       /* logical OR of gdFTEX_ values */
+       int flags; 
+       /* fine tune line spacing for '\n' */
+       double linespacing; 
+       /* Preferred character mapping */
+       int charmap;
+       /* Rendering resolution */
+       int hdpi;
+       int vdpi;
+       char *xshow;
+       char *fontpath;
+} gdFTStringExtra, *gdFTStringExtraPtr;
+</pre>
+To output multiline text with a specific line spacing, 
+include <code>gdFTEX_LINESPACE</code> in the setting of
+<code>flags</code>:
+<pre>
+flags |= gdFTEX_LINESPACE;
+</pre>
+And also set <code>linespacing</code> to the desired spacing, expressed as a
+multiple of the font height. Thus a line spacing of 1.0 is the
+minimum to guarantee that lines of text do not collide.
+<p>
+If <code>gdFTEX_LINESPACE</code> is not present, or 
+<code>strex</code> is null, or <a href="#gdImageStringFT">gdImageStringFT</a>
+is called, <code>linespacing</code> defaults to 1.05.
+<p>
+To specify a preference for Unicode, Shift_JIS Big5 character encoding,
+set or To output multiline text with a specific line spacing, 
+include <code>gdFTEX_CHARMAP</code> in the setting of
+<code>flags</code>:
+<pre>
+flags |= gdFTEX_CHARMAP;
+</pre>
+And set <code>charmap</code> to the desired value, which can be
+any of gdFTEX_Unicode, gdFTEX_Shift_JIS, gdFTEX_Big5, or gdFTEX_Adobe_Custom.
+If you do not specify a preference, Unicode will be tried first. If the preferred
+character mapping is not found in the font, other character mappings 
+are attempted.
+<p>
+GD operates on the assumption that the output image will be
+rendered to a computer screen. By default, gd passes a
+resolution of 96 dpi to the freetype text rendering engine. 
+This influences the "hinting" decisions made by the renderer. To
+specify a different resolution, set hdpi and vdpi accordingly
+(in dots per inch) and add <code>gdFTEX_RESOLUTION</code> to <code>flags</code>:
+<pre>
+flags | gdFTEX_RESOLUTION;
+</pre>
+GD 2.0.29 and later will normally attempt to apply kerning tables, if 
+fontconfig is available, to adjust the relative positions of consecutive 
+characters more ideally for that pair of characters. This can be turn off by
+specifying the gdFTEX_DISABLE_KERNING flag:
+<pre>
+flags | gdFTEX_DISABLE_KERNING;
+</pre>
+GD 2.0.29 and later can return a vector of individual character
+position advances, occasionally useful in applications that must know
+exactly where each character begins. This is returned in the xshow
+element of the gdFTStringExtra structure if the gdFTEX_XSHOW
+flag is set:
+<pre>
+flags | gdFTEX_XSHOW;
+</pre>
+<b>The caller is responsible for calling gdFree() on the xshow
+element after the call</b> if gdFTEX_XSHOW is set.
+<p>
+GD 2.0.29 and later can also return the path to the actual font file
+used if the gdFTEX_RETURNFONTPATHNAME flag is set. This is useful because 
+GD 2.0.29 and above are capable of
+selecting a font automatically based on a fontconfig font pattern
+when fontconfig is available. This information is returned in the
+fontpath element of the gdFTStringExtra structure. 
+<pre>
+flags | gdFTEX_RETURNFONTPATHNAME;
+</pre>
+<b>The caller is responsible for calling gdFree() on the fontpath
+element after the call</b> if gdFTEX_RETURNFONTPATHNAME is set.
+<p>
+GD 2.0.29 and later can use fontconfig to resolve
+font names, including fontconfig patterns, if the gdFTEX_FONTCONFIG
+flag is set. As a convenience, this behavior can be made the default
+by calling <a href="#gdFTUseFontConfig">gdFTUseFontConfig</a> with
+a nonzero value. In that situation it is not necessary to set the
+gdFTEX_FONTCONFIG flag on every call; however explicit font path names
+can still be used if the gdFTEX_FONTPATHNAME flag is set:
+<pre>
+flags | gdFTEX_FONTPATHNAME;
+</pre>
+<p>
+Unless <a href="#gdFTUseFontConfig">gdFTUseFontConfig</a> has been
+called with a nonzero value, GD 2.0.29 and later will still expect
+the fontlist argument to the freetype text output functions to be
+a font file name or list thereof as in previous versions. If you do
+not wish to make fontconfig the default, it is
+still possible to force the use of fontconfig for a single call to
+the freetype text output functions by setting the gdFTEX_FONTCONFIG
+flag:
+<pre>
+flags | gdFTEX_FONTCONFIG;
+</pre>
+GD 2.0.29 and above can use fontconfig to resolve
+font names, including fontconfig patterns, if the gdFTEX_FONTCONFIG
+flag is set. As a convenience, this behavior can be made the default
+by calling <a href="#gdFTUseFontConfig">gdFTUseFontConfig</a> with
+a nonzero value. In that situation it is not necessary to set the
+gdFTEX_FONTCONFIG flag on every call; however explicit font path names
+can still be used if the gdFTEX_FONTPATHNAME flag is set:
+<pre>
+flags | gdFTEX_FONTPATHNAME;
+</pre>
+For more information, see <a href="#gdImageStringFT">gdImageStringFT</a>.
+<DT><A NAME="gdImageStringFTCircle">
+char *gdImageStringFTCircle(gdImagePtr im,
+        int cx,
+        int cy,
+        double radius,
+        double textRadius,
+        double fillPortion,
+        char *font,
+        double points,
+        char *top,
+        char *bottom,
+        int fgcolor)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+Draws the text strings specified by <code>top</code> and <code>bottom</code> 
+on <code>im</code>, curved along the edge of a circle of radius 
+<code>radius</code>, with its center at <code>cx</code> and <code>cy</code>. 
+<code>top</code> is written clockwise
+along the top; <code>bottom</code> is written counterclockwise
+along the bottom. <code>textRadius</code> determines the "height"
+of each character; if <code>textRadius</code> is 1/2 of 
+<code>radius</code>,
+characters extend halfway from the edge to the center.
+<code>fillPortion</code> varies from 0 to 1.0, with useful values
+from about 0.4 to 0.9, and determines how much of the
+180 degrees of arc assigned to each section of text
+is actually occupied by text; 0.9 looks better than
+1.0 which is rather crowded. <code>font</code> is a freetype
+font; see gdImageStringFT. <code>points</code> is passed to the
+freetype engine and has an effect on hinting; although
+the size of the text is determined by <code>radius</code>, 
+<code>textRadius</code>, and <code>fillPortion</code>, you should 
+pass a point size that
+"hints" appropriately -- if you know the text will be
+large, pass a large point size such as 24.0 to get the
+best results. <code>fgcolor</code> can be any color, and may have
+an alpha component, do blending, etc.
+<p>
+Returns 0 on success, or an error string otherwise.
+<pre>
+#include &lt;stdio.h&gt;
+#include &lt;gd.h&gt;
+
+int main (int argc, char *argv[])
+{
+        FILE *in;
+        FILE *out;
+        gdImagePtr im;
+        int radius;
+        /* Create an image of text on a circle, with an
+                alpha channel so that we can copy it onto a
+                background */
+        in = fopen("mypicture.jpg", "rb");
+        if (!in) {
+                im = gdImageCreateTrueColor(300, 300);
+        } else {
+                im = gdImageCreateFromJpeg(in);
+                fclose(in);
+        }
+        if (gdImageSX(im) &lt; gdImageSY(im)) {
+                radius = gdImageSX(im) / 2;
+        } else {
+                radius = gdImageSY(im) / 2;
+        }
+        gdStringFTCircle(
+                im,
+                gdImageSX(im) / 2,
+                gdImageSY(im) / 2,
+                radius,
+                radius / 2,
+                0.8,
+                "arial",
+                24,
+                "top text",
+                "bottom text",
+                gdTrueColorAlpha(240, 240, 255, 32));
+        out = fopen("gdfx.png", "wb");
+        if (!out) {
+                fprintf(stderr, "Can't create gdfx.png\n");
+                return 1;
+        }
+        gdImagePng(im, out);
+        fclose(out);
+        gdImageDestroy(im);
+        return 0;
+}
+</pre>
+
+<p>
+For more information, see <a href="#gdImageStringFTEx">gdImageStringFTEx</a>
+and <a href="#gdImageSquareToCircle">gdImageSquareToCircle</a>.
+<DT><A NAME="gdImageStringTTF">
+char *gdImageStringTTF(gdImagePtr im, int *brect,
+  int fg, char *fontname, double ptsize, double angle,
+  int x, int y, char *string)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+<strong>DEPRECATED.</strong> This function simply invokes
+<a href="#gdImageStringFT">gdImageStringFT</a> for backwards
+compatibility with old code that was written with FreeType 1.x.
+<DT><A NAME="gdFontCacheSetup">
+int gdFontCacheSetup(void)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+This function initializes the font cache for freetype text output
+functions such as <a href="#gdImageStringFTEx">gdImageStringFTEx</a>.
+If this function is not called by the programmer, it is invoked
+automatically on the first truetype text output call, which is
+perfectly safe <b>unless</b> the application is multithreaded.
+Multithreaded applications should directly invoke this function before
+allowing any thread to use freetype text output. Returns 0 on success,
+nonzero if the freetype library fails to initialize.
+<DT><A NAME="gdFontCacheShutdown">
+void gdFontCacheShutdown(void)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+This function releases the memory used by the freetype font cache
+and the text output mutex. Applications that use gd for their
+entire lifetime, then exit, need not call this function.
+</DL>
+<H3><A NAME="colors">Color-handling functions</A></H3>
+<DL>
+<DT><A NAME="gdImageColorAllocate">
+int gdImageColorAllocate(gdImagePtr im, int r, int g, int b)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageColorAllocate finds the first available color index in
+the image specified, sets its RGB values to those requested
+(255 is the maximum for each),
+and returns the index of the new color table entry, or an RGBA
+value in the case of a truecolor image; in either case you can
+then use the returned value as a parameter to drawing functions. When
+creating a new palette-based image, the first time you invoke this function,
+you are setting the background color for that image. 
+<P>
+In the event that all <A HREF="#gdMaxColors">gdMaxColors</A> colors
+(256) have already been allocated, gdImageColorAllocate will
+return -1 to indicate failure. (This is not uncommon when
+working with existing PNG files that already use 256 colors.)
+Note that gdImageColorAllocate
+does not check for existing colors that match your request;
+see <A HREF="#gdImageColorExact">gdImageColorExact</A>,
+<A HREF="#gdImageColorClosest">gdImageColorClosest</A> and
+<A HREF="#gdImageColorClosestHWB">gdImageColorClosestHWB</A>
+for ways to locate existing colors that approximate the
+color desired in situations where a new color is not available.
+Also see <A HREF="#gdImageColorResolve">gdImageColorResolve</A>,
+new in gd-1.6.2.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int red;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color red. */
+red = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 0, 0);  
+/* Draw a dashed line from the upper left corner 
+  to the lower right corner. */
+gdImageDashedLine(im, 0, 0, 99, 99, red);
+/* ... Do something with the image, such as saving 
+  it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageColorAllocateAlpha">
+int gdImageColorAllocateAlpha(gdImagePtr im, int r, int g, int b, int a)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageColorAllocateAlpha finds the first available color index in
+the image specified, sets its RGBA values to those requested
+(255 is the maximum for red, green and blue, and 127 represents
+full transparency for alpha),
+and returns the index of the new color table entry, or an RGBA
+value in the case of a truecolor image; in either case you can
+then use the returned value as a parameter to drawing functions. When
+creating a new palette-based image, the first time you invoke this function,
+you are setting the background color for that image. 
+<P>
+In the event that all <A HREF="#gdMaxColors">gdMaxColors</A> colors
+(256) have already been allocated, gdImageColorAllocate will
+return -1 to indicate failure. (This is not uncommon when
+working with existing palette-based PNG files that already use 256 colors.)
+Note that gdImageColorAllocateAlpha
+does not check for existing colors that match your request;
+see <A HREF="#gdImageColorExactAlpha">gdImageColorExactAlpha</A> and
+<A HREF="#gdImageColorClosestAlpha">gdImageColorClosestAlpha</A>
+for ways to locate existing colors that approximate the
+color desired in situations where a new color is not available.
+Also see <A HREF="#gdImageColorResolveAlpha">gdImageColorResolveAlpha</A>.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+int red;
+im = <A HREF="#gdImageCreate">gdImageCreate</A>(100, 100);
+/* Background color (first allocated) */
+black = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 0, 0, 0);  
+/* Allocate the color red, 50% transparent. */
+red = <A HREF="#gdImageColorAllocateAlpha">gdImageColorAllocateAlpha</A>(im, 255, 0, 0, 64);  
+/* Draw a dashed line from the upper left corner to the lower right corner. */
+gdImageDashedLine(im, 0, 0, 99, 99, red);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageColorClosest">
+int gdImageColorClosest(gdImagePtr im, int r, int g, int b)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageColorClosest searches the colors which have been
+defined thus far in the image specified and returns the
+index of the color with RGB values closest to those of the
+request. (Closeness is determined by Euclidian distance,
+which is used to determine the distance in three-dimensional color
+space between colors.)
+<P>
+If no colors have yet been allocated in the image,
+gdImageColorClosest returns -1.
+<p>
+When applied to a truecolor image, this function always
+succeeds in returning the desired color.
+<P>
+This function is most useful as a backup method for choosing
+a drawing color when an image already contains
+<A HREF="#gdMaxColors">gdMaxColors</A> (256) colors and
+no more can be allocated. (This is not uncommon when
+working with existing PNG files that already use many colors.)
+See <A HREF="#gdImageColorExact">gdImageColorExact</A>
+for a method of locating exact matches only.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+FILE *in;
+int red;
+/* Let's suppose that photo.png is a scanned photograph with
+  many colors. */
+in = fopen("photo.png", "rb");
+im = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* Try to allocate red directly */
+red = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 0, 0);  
+/* If we fail to allocate red... */
+if (red == (-1)) {
+  /* Find the <em>closest</em> color instead. */
+  red = gdImageColorClosest(im, 255, 0, 0);
+}
+/* Draw a dashed line from the upper left corner to the lower right corner */
+gdImageDashedLine(im, 0, 0, 99, 99, red);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageColorClosestAlpha">
+int gdImageColorClosestAlpha(gdImagePtr im, int r, int g, int b, int a)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageColorClosest searches the colors which have been
+defined thus far in the image specified and returns the
+index of the color with RGBA values closest to those of the
+request. (Closeness is determined by Euclidian distance,
+which is used to determine the distance in four-dimensional color/alpha
+space between colors.)
+<P>
+If no colors have yet been allocated in the image,
+gdImageColorClosestAlpha returns -1.
+<p>
+When applied to a truecolor image, this function always
+succeeds in returning the desired color.
+<P>
+This function is most useful as a backup method for choosing
+a drawing color when a palette-based image already contains
+<A HREF="#gdMaxColors">gdMaxColors</A> (256) colors and
+no more can be allocated. (This is not uncommon when
+working with existing palette-based PNG files that already use many colors.)
+See <A HREF="#gdImageColorExactAlpha">gdImageColorExactAlpha</A>
+for a method of locating exact matches only.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+FILE *in;
+int red;
+/* Let's suppose that photo.png is a scanned photograph with
+  many colors. */
+in = fopen("photo.png", "rb");
+im = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* Try to allocate red, 50% transparent, directly */
+red = <A HREF="#gdImageColorAllocateAlpha">gdImageColorAllocateAlpha</A>(im, 255, 0, 0, 64);  
+/* If we fail to allocate red... */
+if (red == (-1)) {
+  /* Find the <em>closest</em> color instead. */
+  red = gdImageColorClosestAlpha(im, 255, 0, 0, 64);
+}
+/* Draw a dashed line from the upper left corner to the lower right corner */
+gdImageDashedLine(im, 0, 0, 99, 99, red);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageColorClosestHWB">
+int gdImageColorClosestHWB(gdImagePtr im, int r, int g, int b)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageColorClosestHWB searches the colors which have been
+defined thus far in the image specified and returns the
+index of the color with hue, whiteness and blackness closest to the
+requested color. This scheme is typically superior to the 
+Euclidian distance scheme used by 
+<a href="#gdImageColorClosest">gdImageColorClosest</a>.
+<P>
+If no colors have yet been allocated in the image,
+gdImageColorClosestHWB returns -1.
+<p>
+When applied to a truecolor image, this function always
+succeeds in returning the desired color.
+<P>
+This function is most useful as a backup method for choosing
+a drawing color when an image already contains
+<A HREF="#gdMaxColors">gdMaxColors</A> (256) colors and
+no more can be allocated. (This is not uncommon when
+working with existing PNG files that already use many colors.)
+See <A HREF="#gdImageColorExact">gdImageColorExact</A>
+for a method of locating exact matches only.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+FILE *in;
+int red;
+/* Let's suppose that photo.png is a scanned photograph with
+  many colors. */
+in = fopen("photo.png", "rb");
+im = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* Try to allocate red directly */
+red = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 0, 0);  
+/* If we fail to allocate red... */
+if (red == (-1)) {
+  /* Find the <em>closest</em> color instead. */
+  red = gdImageColorClosestHWB(im, 255, 0, 0);
+}
+/* Draw a dashed line from the upper left corner to the lower right corner */
+gdImageDashedLine(im, 0, 0, 99, 99, red);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageColorExact">
+int gdImageColorExact(gdImagePtr im, int r, int g, int b)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageColorExact searches the colors which have been
+defined thus far in the image specified and returns the
+index of the first color with RGB values which exactly
+match those of the request. If no allocated color matches the
+request precisely, gdImageColorExact returns -1.
+See <A HREF="#gdImageColorClosest">gdImageColorClosest</A>
+for a way to find the color closest to the color requested.
+<p>
+When applied to a truecolor image, this function always
+succeeds in returning the desired color.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int red;
+in = fopen("photo.png", "rb");
+im = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* The image may already contain red; if it does, we'll save a slot
+  in the color table by using that color. */
+/* Try to allocate red directly */
+red = gdImageColorExact(im, 255, 0, 0);
+/* If red isn't already present... */
+if (red == (-1)) {
+  /* Second best: try to allocate it directly. */
+  red = <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>(im, 255, 0, 0);  
+  /* Out of colors, so find the <em>closest</em> color instead. */
+  red = gdImageColorClosest(im, 255, 0, 0);
+}
+/* Draw a dashed line from the upper left corner to the lower right corner */
+gdImageDashedLine(im, 0, 0, 99, 99, red);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageColorResolve">
+int gdImageColorResolve(gdImagePtr im, int r, int g, int b)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageColorResolve searches the colors which have been
+defined thus far in the image specified and returns the
+index of the first color with RGB values which exactly
+match those of the request. If no allocated color matches the
+request precisely, then gdImageColorResolve tries to allocate the
+exact color.  If there is no space left in the color table then
+gdImageColorResolve returns the closest color (as in gdImageColorClosest).
+This function always returns an index of a color.
+<p>
+When applied to a truecolor image, this function always
+succeeds in returning the desired color.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int red;
+in = fopen("photo.png", "rb");
+im = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* The image may already contain red; if it does, we'll save a slot
+  in the color table by using that color. */
+/* Get index of red, or color closest to red */
+red = gdImageColorResolve(im, 255, 0, 0);
+/* Draw a dashed line from the upper left corner to the lower right corner */
+gdImageDashedLine(im, 0, 0, 99, 99, red);
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageColorResolveAlpha">
+int gdImageColorResolveAlpha(gdImagePtr im, int r, int g, int b, int a)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageColorResolveAlpha searches the colors which have been
+defined thus far in the image specified and returns the
+index of the first color with RGBA values which exactly
+match those of the request. If no allocated color matches the
+request precisely, then gdImageColorResolveAlpha tries to allocate the
+exact color. If there is no space left in the color table then
+gdImageColorResolveAlpha returns the closest color (as in gdImageColorClosestAlpha).
+This function always returns an index of a color.
+<p>
+When applied to a truecolor image, this function always
+succeeds in returning the desired color.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int red;
+in = fopen("photo.png", "rb");
+im = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* The image may already contain red; if it does, 
+  we'll save a slot in the color table by using that color. */
+/* Get index of red, 50% transparent, or the next best thing */
+red = gdImageColorResolveAlpha(im, 255, 0, 0, 64);
+/* Draw a dashed line from the upper left corner to the lower right corner */
+gdImageDashedLine(im, 0, 0, 99, 99, red);
+/* ... Do something with the image, such as saving 
+  it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageColorsTotal">
+int gdImageColorsTotal(gdImagePtr im)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageColorsTotal is a macro which returns the number of
+colors currently allocated in a palette image. For truecolor
+images, the result of this call is undefined and should not
+be used.
+<DT><A NAME="gdImageRed">
+int gdImageRed(gdImagePtr im, int c)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageRed is a macro which returns the red portion
+of the specified color in the image. This macro works
+for both palette and truecolor images.
+<DT><A NAME="gdImageGreen">
+int gdImageGreen(gdImagePtr im, int c)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageGreen is a macro which returns the green portion
+of the specified color in the image.  This macro works
+for both palette and truecolor images.
+<DT><A NAME="gdImageBlue">
+int gdImageBlue(gdImagePtr im, int c)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageBlue is a macro which returns the blue portion
+of the specified color in the image.  This macro works
+for both palette and truecolor images.
+<DT><A NAME="gdImageGetInterlaced">
+int gdImageGetInterlaced(gdImagePtr im)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageGetInterlaced is a macro which returns true (1)
+if the image is interlaced, false (0) if not.
+Use this macro to obtain this information; do not
+access the structure directly.
+See <A HREF="#gdImageInterlace">gdImageInterlace</A> for
+a means of interlacing images.
+<DT><A NAME="gdImageGetTransparent">
+int gdImageGetTransparent(gdImagePtr im)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageGetTransparent is a macro which returns the
+current transparent color index in the image.
+If there is no transparent color, gdImageGetTransparent
+returns -1. Use this macro to obtain this information; do not
+access the structure directly.
+<DT><A NAME="gdImageColorDeallocate">
+void gdImageColorDeallocate(gdImagePtr im, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageColorDeallocate marks the specified color as being
+available for reuse. It does not attempt to determine whether
+the color index is still in use in the image. After a call
+to this function, the next call to
+<A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>
+for the same image will set new RGB values for that
+color index, changing the color of any pixels which
+have that index as a result. If multiple calls to
+gdImageColorDeallocate are made consecutively, the lowest-numbered
+index among them will be reused by the next
+<A HREF="#gdImageColorAllocate"> gdImageColorAllocate</A> call.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int red, blue;
+in = fopen("photo.png", "rb");
+im = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* Look for red in the color table. */
+red = gdImageColorExact(im, 255, 0, 0);
+/* If red is present... */
+if (red != (-1)) {
+  /* Deallocate it. */
+  gdImageColorDeallocate(im, red);
+  /* Allocate blue, reusing slot in table.
+    Existing red pixels will change color. */
+  blue = gdImageColorAllocate(im, 0, 0, 255);
+}
+/* ... Do something with the image, such as 
+  saving it to a file... */
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageColorTransparent">
+void gdImageColorTransparent(gdImagePtr im, int color)</A>
+<STRONG>(FUNCTION)</STRONG>
+<DD>
+gdImageColorTransparent sets the transparent color index
+for the specified image to the specified index. To indicate
+that there should be <em>no</em> transparent color, invoke
+gdImageColorTransparent with a color index of -1.  Note that
+JPEG images do not support transparency, so this setting has no effect
+when writing JPEG images.
+<P>
+The color index used should be an index
+allocated by <A HREF="#gdImageColorAllocate">gdImageColorAllocate</A>,
+whether explicitly invoked by your code or implicitly
+invoked by loading an image.
+In order to ensure that your image has a reasonable appearance
+when viewed by users who do not have transparent background
+capabilities (or when you are writing a JPEG-format file, which does
+not support transparency), be sure to give reasonable RGB values to the
+color you allocate for use as a transparent color,
+<em>even though it will be transparent on systems
+that support PNG transparency</em>.
+<PRE>
+... inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im;
+int black;
+FILE *in, *out;
+in = fopen("photo.png", "rb");
+im = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* Look for black in the color table and make it transparent. */
+black = <A HREF="#gdImageColorExact">gdImageColorExact</A>(im, 0, 0, 0);
+/* If black is present... */
+if (black != (-1)) {
+  /* Make it transparent */
+  gdImageColorTransparent(im, black);
+}
+/* Save the newly-transparent image back to the file */
+out = fopen("photo.png", "wb");
+<A HREF="#gdImagePng">gdImagePng</A>(im, out);
+fclose(out);
+/* Destroy it */
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdImageTrueColor">
+void gdImageTrueColor(int red, int green, int blue)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdImageTrueColor returns an RGBA color value for use when
+drawing on a truecolor image. Red, green, and blue are all
+in the range between 0 (off) and 255 (maximum). This macro should 
+not be used with palette-based images. If you need to write
+code which is compatible with both palette-based and
+truecolor images, use <a href="#gdImageColorResolve">gdImageColorResolve</a>.
+<DT><A NAME="gdTrueColorAlpha">
+void gdTrueColorAlpha(int red, int green, int blue, int alpha)</A>
+<STRONG>(MACRO)</STRONG>
+<DD>
+gdTrueColorAlpha returns an RGBA color value for use when
+drawing on a truecolor image with alpha channel transparency. Red, 
+green, and blue are all
+in the range between 0 (off) and 255 (maximum). Alpha is in the
+range between 0 (opaque) and 127 (fully transparent). This macro should 
+not be used with palette-based images. If you need to write
+code which is compatible with both palette-based and
+truecolor images, use <a href="#gdImageColorResolveAlpha">gdImageColorResolveAlpha</a>.</DL>
+<H3><A NAME="copying">Copying and resizing functions</A></H3>
+<DL>
+
+<DT><A NAME="gdImageCopy">void gdImageCopy(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h)
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageCopy is used to copy a rectangular portion of one image to
+another image. (For a way of stretching or shrinking the image
+in the process, see <A HREF="#gdImageCopyResized">
+gdImageCopyResized</A>.)
+<P>
+The <code>dst</code> argument is the destination image to which the
+region will be copied. The <code>src</code> argument is the source
+image from which the region is copied. The <code>dstX</code>
+and <code>dstY</code> arguments specify the point in the destination
+image to which the region will be copied. The <code>srcX</code>
+and <code>srcY</code> arguments specify the upper left corner
+of the region in the source image. The <code>w</code>
+and <code>h</code> arguments specify the width and height
+of the region.
+<P>
+When you copy a region from one location in an image to another
+location in the same image, gdImageCopy will perform as expected
+unless the regions overlap, in which case the result is
+unpredictable.
+<P>
+<strong>Important note on copying between images:</strong> since
+different images do
+not necessarily have the same color tables, pixels are not simply set to the
+same color index values to copy them. gdImageCopy will attempt
+to find an identical RGB value in the destination image for
+each pixel in the copied portion of the source image by
+invoking <A HREF="#gdImageColorExact">gdImageColorExact</A>. If
+such a value is not found, gdImageCopy will attempt to
+allocate colors as needed using <A HREF="#gdImageColorAllocate">
+gdImageColorAllocate</A>. If both of these methods fail,
+gdImageCopy will invoke <A HREF="#gdImageColorClosest">
+gdImageColorClosest</A> to find the color in the destination
+image which most closely approximates the color of the
+pixel being copied.
+<PRE>
+... Inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im_in;
+<A HREF="#gdImagePtr">gdImagePtr</A> im_out;
+int x, y;
+FILE *in;
+FILE *out;
+/* Load a small png to tile the larger one with */
+in = fopen("small.png", "rb");
+im_in = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* Make the output image four times as large on both axes */
+im_out = <A HREF="#gdImageCreate">gdImageCreate</A>(im_in->sx * 4, im_in->sy * 4);
+/* Now tile the larger image using the smaller one */
+for (y = 0; (y < 4); y++) {
+  for (x = 0; (x < 4); x++) {
+    gdImageCopy(im_out, im_in,
+      x * im_in->sx, y * im_in->sy,
+      0, 0,
+      im_in->sx, im_in->sy);
+  }
+}
+out = fopen("tiled.png", "wb");
+<A HREF="#gdImagePng">gdImagePng</A>(im_out, out);
+fclose(out);
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im_in);
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im_out);
+</PRE>
+<DT><A NAME="gdImageCopyResized">void gdImageCopyResized(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int destW, int destH, int srcW, int srcH)
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageCopyResized is used to copy a rectangular portion of one image to
+another image. The X and Y dimensions of the original region and the
+destination region can vary, resulting in stretching or shrinking of
+the region as appropriate. (For a simpler version of this function
+which does not deal with resizing, see <A HREF="#gdImageCopy">
+gdImageCopy</A>.)
+<P>
+The <code>dst</code> argument is the destination image to which the
+region will be copied. The <code>src</code> argument is the source
+image from which the region is copied. The <code>dstX</code>
+and <code>dstY</code> arguments specify the point in the destination
+image to which the region will be copied. The <code>srcX</code>
+and <code>srcY</code> arguments specify the upper left corner
+of the region in the source image. The <code>dstW</code>
+and <code>dstH</code> arguments specify the width and height
+of the destination region. The <code>srcW</code>
+and <code>srcH</code> arguments specify the width and height
+of the source region and can differ from the destination size,
+allowing a region to be scaled during the copying process.
+<P>
+When you copy a region from one location in an image to another
+location in the same image, gdImageCopy will perform as expected
+unless the regions overlap, in which case the result is
+unpredictable. If this presents a problem, create a scratch image
+in which to keep intermediate results.
+<P>
+<strong>Important note on copying between images:</strong> since images
+do not necessarily have the same color tables, pixels are not simply set
+to the same color index values to copy them. gdImageCopy will attempt
+to find an identical RGB value in the destination image for
+each pixel in the copied portion of the source image by
+invoking <A HREF="#gdImageColorExact">gdImageColorExact</A>. If
+such a value is not found, gdImageCopy will attempt to
+allocate colors as needed using <A HREF="#gdImageColorAllocate">
+gdImageColorAllocate</A>. If both of these methods fail,
+gdImageCopy will invoke <A HREF="#gdImageColorClosest">
+gdImageColorClosest</A> to find the color in the destination
+image which most closely approximates the color of the
+pixel being copied.
+<PRE>
+... Inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im_in;
+<A HREF="#gdImagePtr">gdImagePtr</A> im_out;
+int x, y;
+FILE *in;
+FILE *out;
+/* Load a small png to expand in the larger one */
+in = fopen("small.png", "rb");
+im_in = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* Make the output image four times as large on both axes */
+im_out = <A HREF="#gdImageCreate">gdImageCreate</A>(im_in->sx * 4, im_in->sy * 4);
+/* Now copy the smaller image, but four times larger */
+gdImageCopyResized(im_out, im_in, 0, 0, 0, 0,
+  im_out->sx, im_out->sy,
+  im_in->sx, im_in->sy);  
+out = fopen("large.png", "wb");
+<A HREF="#gdImagePng">gdImagePng</A>(im_out, out);
+fclose(out);
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im_in);
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im_out);
+</PRE>
+<DT><A NAME="gdImageCopyResampled">void gdImageCopyResampled(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int destW, int destH, int srcW, int srcH)
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageCopyResampled is used to copy a rectangular portion of one image to
+another image, smoothly interpolating pixel values so that, in particular,
+reducing the size of an image still retains a great deal of clarity. The 
+X and Y dimensions of the original region and the
+destination region can vary, resulting in stretching or shrinking of
+the region as appropriate. (For a simpler version of this function
+which does not deal with resizing, see <A HREF="#gdImageCopy">
+gdImageCopy</A>. For a version which does not interpolate pixel values,
+see <A HREF="#gdImageCopyResized">gdImageCopyResized</A>.
+<p>
+Pixel values are only interpolated if the destination image is a
+truecolor image. Otherwise, 
+<a href="#gdImageCopyResized">gdImageCopyResized</a> is 
+automatically invoked.
+<P>
+The <code>dst</code> argument is the destination image to which the
+region will be copied. The <code>src</code> argument is the source
+image from which the region is copied. The <code>dstX</code>
+and <code>dstY</code> arguments specify the point in the destination
+image to which the region will be copied. The <code>srcX</code>
+and <code>srcY</code> arguments specify the upper left corner
+of the region in the source image. The <code>dstW</code>
+and <code>dstH</code> arguments specify the width and height
+of the destination region. The <code>srcW</code>
+and <code>srcH</code> arguments specify the width and height
+of the source region and can differ from the destination size,
+allowing a region to be scaled during the copying process.
+<P>
+When you copy a region from one location in an image to another
+location in the same image, gdImageCopy will perform as expected
+unless the regions overlap, in which case the result is
+unpredictable. If this presents a problem, create a scratch image
+in which to keep intermediate results.
+<P>
+<strong>Important note on copying between images:</strong> since images
+do not necessarily have the same color tables, pixels are not simply set
+to the same color index values to copy them. If the destination image
+is a palette image, gd will use the 
+<a href="#gdImageColorResolve">gdImageColorResolve</a> function to
+determine the best color available.
+<PRE>
+... Inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im_in;
+<A HREF="#gdImagePtr">gdImagePtr</A> im_out;
+int x, y;
+FILE *in;
+FILE *out;
+/* Load a large png to shrink in the smaller one */
+in = fopen("large.png", "rb");
+im_in = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* Make the output image four times as small on both axes. Use
+  a true color image so that we can interpolate colors. */
+im_out = <A HREF="#gdImageCreate">gdImageCreateTrueColor</A>(im_in->sx / 4, im_in->sy / 4);
+/* Now copy the large image, but four times smaller */
+gdImageCopyResampled(im_out, im_in, 0, 0, 0, 0,
+  im_out->sx, im_out->sy,
+  im_in->sx, im_in->sy);  
+out = fopen("large.png", "wb");
+<A HREF="#gdImagePng">gdImagePng</A>(im_out, out);
+fclose(out);
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im_in);
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im_out);
+</PRE>
+<DT><A NAME="gdImageCopyRotated">void gdImageCopyRotated(gdImagePtr dst, gdImagePtr src, double dstX, double dstY, int srcX, int srcY, int srcW, int srcH, int angle)
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageCopyRotated is used to copy a rectangular portion of one image to
+another image, or to another region of the same image. <strong>The srcX and
+srcY coordinates specify the upper left corner of the source area; however,
+the dstX and dstY coordinates specify the CENTER of the destination area.
+</strong> This important distinction is made because the rotated rectangle may
+may or may not be parallel to the X and Y axes. The destination coordinates
+may be floating point, as the center of the desired destination area may lie
+at the center of a pixel (0.5 pixels) rather than its upper left corner.
+The angle specified is an integer number of degrees, between 0 and 360,
+with 0 degrees causing no change, and counterclockwise rotation as 
+the angle increases.
+<P>
+When you copy a region from one location in an image to another
+location in the same image, gdImageCopyRotated will perform as expected
+unless the regions overlap, in which case the result is
+unpredictable. If this presents a problem, create a scratch image
+in which to keep intermediate results.
+<P>
+<strong>Important note on copying between images:</strong> since 
+palette-based images do not necessarily have the same color tables, pixels 
+are not simply set to the same color index values to copy them. 
+If the destination image is not a truecolor image, 
+<a href="#gdImageColorResolveAlpha">gdImageColorResolveAlpha</a> is 
+used to choose the destination pixel.
+<PRE>
+... Inside a function ...
+<A HREF="#gdImagePtr">gdImagePtr</A> im_in;
+<A HREF="#gdImagePtr">gdImagePtr</A> im_out;
+int x, y;
+int a;
+FILE *in;
+FILE *out;
+/* Load a small png to rotate in the larger one */
+in = fopen("small.png", "rb");
+im_in = <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A>(in);
+fclose(in);
+/* Make the output image four times as large on both axes */
+im_out = <A HREF="#gdImageCreate">gdImageCreate</A>(im_in->sx * 4, im_in->sy * 4);
+/* Now rotate the smaller image */
+for (a = 0; (a < 360); a += 45) {
+        double x = cos(a * .0174532925) * gdImageSX(im_out) / 2;
+        double y = -sin(a * .0174532925) * gdImageSY(im_out) / 2;
+  gdImageCopyRotated(im_out, im_in, 
+                gdImageSX(im_out) / 2 + x, 
+                gdImageSY(im_out) / 2 + y, 
+    0, 0,
+                gdImageSX(im_in),
+                gdImageSY(im_in),
+                a); 
+}
+out = fopen("large.png", "wb");
+<A HREF="#gdImagePng">gdImagePng</A>(im_out, out);
+fclose(out);
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im_in);
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im_out);
+</PRE>
+
+<DT><A NAME="gdImageCopyMerge">void gdImageCopyMerge(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct)
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageCopyMerge is almost identical to <a href=#gdImageCopy>gdImageCopy</a>, except that
+it 'merges' the two images by an amount specified in the last parameter. If the last
+parameter is 100, then it will function identically to gdImageCopy - the source image replaces
+the pixels in the destination.
+<p>
+If, however, the <strong>pct</strong> parameter is less than 100, then the two images are merged.
+With pct = 0, no action is taken.
+<p>This feature is most useful to 'highlight' sections of an image by merging a solid color with
+pct = 50:
+<PRE>
+... Inside a function ...
+gdImageCopyMerge(im_out, im_in, 100, 200, 0, 0, 30, 50, 50);
+</PRE>
+
+<DT><A NAME="gdImageCopyMergeGray">void gdImageCopyMergeGray(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int
+ w, int h, int pct)
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageCopyMergeGray is almost identical to <a href=#gdImageCopyMerge>gdImageCopyMerge</a>,
+except that when merging images it preserves the hue of the source by converting the destination
+pixels to grey scale before the copy operation.
+<PRE>
+... Inside a function ...
+gdImageCopyMergeGray(im_out, im_in, 100, 200, 0, 0, 30, 50, 50);
+</PRE>
+
+<DT><A NAME="gdImagePaletteCopy">void gdImagePaletteCopy(gdImagePtr dst, gdImagePtr src)
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+Copies a palette from one image to another, attempting to match the colors in the target image
+to the colors
+in the source palette.
+<DT><A NAME="gdImageSquareToCircle">void gdImageSquareToCircle(gdImagePtr im, int radius)</a>
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+<b>im MUST be square, but can have any size.</b> Returns a new image
+of width and height radius * 2, in which the X axis of
+the original has been remapped to theta (angle) and the Y axis
+of the original has been remapped to rho (distance from center).
+This is known as a "polar coordinate transform."
+See also <a href="#gdImageStringFTCircle">gdImageStringFTCircle</a>, which
+uses this function internally.
+<DT><A NAME="gdImageSharpen">void gdImageSharpen(gdImagePtr im, int pct)</a>
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+Sharpens the specified image. pct is a sharpening percentage, and
+can be greater than 100. Silently does nothing to non-truecolor images.
+Silently does nothing for pct<0. Transparency/alpha channel are not
+altered.    
+</DL>
+<H3><A NAME="misc">Miscellaneous Functions</A></H3>
+<DL>
+
+<DT><A NAME="gdImageCompare">int gdImageCompare(gdImagePtr im1, gdImagePtr im2)
+<STRONG> (FUNCTION)</STRONG>
+<DD>
+gdImageCompare returns a bitmap indicating if the two images are different. The members of the 
+bitmap are defined in gd.h, but the most important is GD_CMP_IMAGE, which indicated that the images
+will actually appear different when displayed. Other, less important, differences relate to pallette
+entries. Any difference in the transparent colour is assumed to make images display differently,
+even if the transparent colour is not used.
+<PRE>
+... Inside a function ...
+cmpMask = gdImageCompare(im1, im2);
+</PRE>
+
+<DT><A NAME="gdImageInterlace">gdImageInterlace(gdImagePtr im, int interlace)</A> <strong>(FUNCTION)</strong>
+<DD>
+gdImageInterlace is used to determine whether an image should be stored
+in a linear fashion, in which lines will appear on the display from
+first to last, or in an interlaced fashion, in which the image
+will "fade in" over several passes. By default, images are not
+interlaced.  (When writing JPEG images, interlacing implies generating
+progressive JPEG files, which are represented as a series of scans of
+increasing quality.  Noninterlaced gd images result in regular
+[sequential] JPEG data streams.)
+<P>
+A nonzero value for the interlace argument turns on interlace;
+a zero value turns it off. Note that interlace has no effect
+on other functions, and has no meaning unless you save the
+image in PNG or JPEG format; the gd and xbm formats do not support
+interlace.
+<P>
+When a PNG is loaded with
+<A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A> or a JPEG is
+loaded with
+<A HREF="#gdImageCreateFromJpeg">gdImageCreateFromJpeg</A>, interlace
+will be set according to the setting in the PNG or JPEG file.
+<P>
+Note that many PNG and JPEG viewers and web browsers do <em>not</em>
+support interlace or the incremental display of progressive
+JPEGs. However, the interlaced PNG or progressive JPEG should still
+display; it will simply appear all at once, just as other images do.
+<PRE>
+gdImagePtr im;
+FILE *out;
+/* ... Create or load the image... */
+
+/* Now turn on interlace */
+gdImageInterlace(im, 1);
+/* And open an output file */
+out = fopen("test.png", "wb");
+/* And save the image  -- could also use <A HREF="#gdImageJpeg">gdImageJpeg</A> */
+<A HREF="#gdImagePng">gdImagePng</A>(im, out);
+fclose(out);
+<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
+</PRE>
+<DT><A NAME="gdFree">gdFree(void *ptr)</A> <strong>(FUNCTION)</strong>
+<DD>
+gdFree provides a reliable way to free memory allocated by functions
+such as <a href="#gdImagePngPtr">gdImagePngPtr</a> which return
+blocks of memory. Use of this function guarantees that the
+version of <code>free()</code> that is ultimately called will
+be intended for use with the version of <code>malloc()</code> that
+originally allocated the block. 
+</DL>
+<H3><A NAME="constants">Constants</A></H3>
+<DL>
+<DT><A NAME="gdAntiAliased">gdAntiAliased</A> <strong>(CONSTANT)</strong>
+<DD>
+Used in place of a color when invoking a line-drawing
+function such as <A HREF="#gdImageLine">gdImageLine</A>
+or <A HREF="#gdImageRectangle">gdImageRectangle</A>.
+When gdAntiAliased is used as the color, the foreground color
+set with <a href="#gdImageSetAntiAliased">gdImageSetAntiAliased</a>
+is used, with antialiasing mechanisms to minimize any
+"jagged" appearance. 
+For more information, see
+<a href="#gdImageSetAntiAliased">gdImageSetAntiAliased</a>.
+<DT><A NAME="gdBrushed">gdBrushed</A> <strong>(CONSTANT)</strong>
+<DD>
+Used in place of a color when invoking a line-drawing
+function such as <A HREF="#gdImageLine">gdImageLine</A>
+or <A HREF="#gdImageRectangle">gdImageRectangle</A>.
+When gdBrushed is used as the color, the brush
+image set with <A HREF="#gdImageSetBrush">gdImageSetBrush</A>
+is drawn in place of each pixel of the line (the brush is
+usually larger than one pixel, creating the effect
+of a wide paintbrush). See also
+<A HREF="#gdStyledBrushed">gdStyledBrushed</A> for a way
+to draw broken lines with a series of distinct copies of an image.
+<DT><A NAME="gdMaxColors"><code>gdMaxColors</code><strong>(CONSTANT)</strong>
+<DD>
+The constant 256. This is the maximum number of colors in a palette-based
+PNG file according to the PNG standard, and is also the maximum number of
+colors in a palette-based gd image. This of course does not apply to
+truecolor images.
+<DT><A NAME="gdStyled">gdStyled</A> <strong>(CONSTANT)</strong>
+<DD>
+Used in place of a color when invoking a line-drawing
+function such as <A HREF="#gdImageLine">gdImageLine</A>
+or <A HREF="#gdImageRectangle">gdImageRectangle</A>.
+When gdStyled is used as the color, the colors of the pixels are
+drawn successively from the style that has been
+set with <A HREF="#gdImageSetStyle">gdImageSetStyle</A>.
+If the color of a pixel is equal to
+<A HREF="#gdTransparent">gdTransparent</A>, that pixel
+is not altered. (This mechanism is completely unrelated
+to the "transparent color" of the image itself; see
+<A HREF="#gdImageColorTransparent">gdImageColorTransparent</A>
+gdImageColorTransparent for that mechanism.) See also
+<A NAME="#gdStyledBrushed"> gdStyledBrushed</A>.
+<DT><A NAME="gdStyledBrushed">gdStyledBrushed</A> <strong>(CONSTANT)</strong>
+<DD>
+Used in place of a color when invoking a line-drawing
+function such as <A HREF="#gdImageLine">gdImageLine</A>
+or <A HREF="#gdImageRectangle">gdImageRectangle</A>.
+When gdStyledBrushed is used as the color, the brush
+image set with <A HREF="#gdImageSetBrush">gdImageSetBrush</A>
+is drawn at each pixel of the line, providing that the
+style set with <A HREF="#gdImageSetStyle">gdImageSetStyle</A>
+contains a nonzero value (OR gdTransparent, which
+does not equal zero but is supported for consistency)
+for the current pixel. (Pixels are drawn successively from the style as the
+line is drawn, returning to the beginning when the
+available pixels in the style are exhausted.) Note that
+this differs from the behavior of <A HREF="#gdStyled">gdStyled</A>,
+in which the values in the style are used as actual
+pixel colors, except for gdTransparent.
+<DT><A NAME="gdDashSize">gdDashSize</A> <strong>(CONSTANT)</strong>
+<DD>
+The length of a dash in a dashed line. Defined to be 4 for
+backwards compatibility with programs that use
+<A NAME="gdImageDashedLine">gdImageDashedLine</A>. New
+programs should use <A NAME="gdImageSetStyle">
+gdImageSetStyle</A> and call the standard
+<A NAME="gdImageLine">gdImageLine</A> function
+with the special "color" <A NAME="gdStyled">
+gdStyled</A> or <A NAME="gdStyledBrushed">gdStyledBrushed</A>.
+<DT><A NAME="gdTiled">gdTiled</A> <strong>(CONSTANT)</strong>
+<DD>
+Used in place of a normal color in <A HREF="#gdImageFilledRectangle">
+gdImageFilledRectangle</A>, <A HREF="#gdImageFilledPolygon">
+gdImageFilledPolygon</A>,
+<A HREF="#gdImageFill">gdImageFill</A>, and <A HREF="#gdImageFillToBorder">
+gdImageFillToBorder</A>. gdTiled selects a pixel from the
+tile image set with <A HREF="#gdImageSetTile">gdImageSetTile</A>
+in such a way as to ensure that the filled area will be
+tiled with copies of the tile image. See the discussions of
+<A HREF="#gdImageFill">gdImageFill</A> and
+<A HREF="#gdImageFillToBorder">gdImageFillToBorder</A> for special
+restrictions regarding those functions.
+<DT><A NAME="gdTransparent">gdTransparent</A> <strong>(CONSTANT)</strong>
+<DD>
+Used in place of a normal color in a style to be set with
+<A HREF="#gdImageSetStyle">gdImageSetStyle</A>.
+gdTransparent is <strong>not</strong> the transparent
+color index of the image; for that functionality please
+see <A HREF="#gdImageColorTransparent">gdImageColorTransparent</A>.
+</DL>
+
+<A NAME="gdformat"><H3>About the additional .gd image file format</H3></A>
+In addition to reading and writing the PNG and JPEG formats and reading the
+X Bitmap format, gd has the capability to read and write its
+own ".gd" format. This format is <em>not</em> intended for
+general purpose use and should never be used to distribute
+images. It is not a compressed format. Its purpose is solely to
+allow very fast loading of images your program needs often in
+order to build other images for output. If you are experiencing
+performance problems when loading large, fixed PNG images your
+program needs to produce its output images, you may wish
+to examine the functions <A HREF="#gdImageCreateFromGd">
+gdImageCreateFromGd</A> and <A HREF="#gdImageGd">gdImageGd</A>,
+which read and write .gd format images.
+
+<P>
+The program "pngtogd.c" is provided as a simple way of converting
+.png files to .gd format. I emphasize again that you will not
+need to use this format unless you have a need for high-speed loading
+of a few frequently-used images in your program.
+
+<A NAME="gd2format"><H3>About the .gd2 image file format</H3></A>
+In addition to reading and writing the PNG format and reading the
+X Bitmap format, gd has the capability to read and write its
+own ".gd2" format. This format is <em>not</em> intended for
+general purpose use and should never be used to distribute
+images. It is a compressed format allowing pseudo-random access
+to large image files. Its purpose is solely to
+allow very fast loading of <strong>parts</strong> of images
+If you are experiencing
+performance problems when loading large, fixed PNG or JPEG images your
+program needs to produce its output images, you may wish
+to examine the functions <A HREF="#gdImageCreateFromGd2">
+gdImageCreateFromGd2</A>, <A HREF="#gdImageCreateFromGd2Part">
+gdImageCreateFromGd2Part</A> and <A HREF="#gdImageGd2">gdImageGd2</A>,
+which read and write .gd2 format images.
+
+<P>
+The program "pngtogd2.c" is provided as a simple way of converting
+.png files to .gd2 format.
+
+<A NAME="gdioctx"><H3>About the gdIOCtx structure</H3></A>
+Version 1.5 of GD added a new style of I/O based on an IOCtx
+structure (the most up-to-date version can be found in gd_io.h):
+<PRE>
+typedef struct gdIOCtx {
+        int     (*getC)(struct gdIOCtx*);
+        int     (*getBuf)(struct gdIOCtx*, void*, int);
+
+        void     (*putC)(struct gdIOCtx*, int);
+        int     (*putBuf)(struct gdIOCtx*, const void*, int);
+
+        int     (*seek)(struct gdIOCtx*, const int); /* Returns 1 on SUCCESS */
+        long    (*tell)(struct gdIOCtx*); 
+
+        void    (*free)(struct gdIOCtx*);
+
+} gdIOCtx;
+</PRE>
+
+Most functions that accepted files in previous versions now also have a
+counterpart that accepts an I/O context. These functions have a 'Ctx'
+suffix.
+<p>
+The <xxx>Ctx routines use the function pointers in the I/O context pointed to
+by gdIOCtx to perform all I/O. Examples of how to implement an I/O context
+can be found in io_file.c (which provides a wrapper for file routines), and
+io_dp.c (which implements in-memory storage).
+<p>
+It is not necessary to implement all functions in an I/O context if you know
+that it will only be used in limited cirsumstances. At the time of writing
+(Version 1.6.1, July 1999), the known requirements are:
+<p>
+<Table>
+<TR><TD>All</TD><td width=20>&nbsp;</td><TD>Must have 'free',</td></tr>
+<TR><TD>Anything that reads from the context</TD><td></td><TD>Must have 'getC' and 'getBuf',</td></tr>
+<TR><TD>Anything that writes to the context</TD><td></td><TD>Must have 'putC' and 'putBuf'.</td></tr>
+<TR><TD>If gdCreateFromGd2Part is called</td><td></td><TD>Must also have 'seek' and 'tell'. Note: seek must return 1 on SUCCESS and 0 on FAILURE.</td></tr>
+<TR><TD>If gdImageGd2 is called</td><td></td><TD>Must also have 'seek' and 'tell'.</td></tr>
+</Table>
+
+
+
+<A NAME="informing"><H3>Please tell us you're using gd!</H3>
+When you contact us and let us know you are using gd,
+you help us justify the time spent in maintaining and improving
+it. So please let us know. If the results are publicly
+visible on the web, a URL is a wonderful thing to receive, but
+if it's not a publicly visible project, a simple note is just
+as welcome.
+
+<A NAME="support"><H3>How do I get support?</H3></A>
+<h4>Free Support</h4>
+
+Anyone can mail questions about the gd library using the 
+<a href="http://www.libgd.org/Wiki/Support">LibGD support</a>. However, 
+we receive a very large volume of email on many subjects, and while we do
+our best to respond to all queries this can take some time. Sometimes 
+the response must take the form of an eventual new release or
+ an addition to a FAQ or other document, as opposed to an detailed individual response.
+
+<h4>Hourly Support</h4>
+Those requiring support in detail may arrange for direct support
+from the maintaines, at the rate of $50/hr, billed
+directly by credit card. Purchase orders are also accepted from
+Fortune 500 corporations and institutions in good standing.
+To make arrangements, contact <A HREF="http://www.libgd.org/Contact">Pierre-A. Joye</A>. To avoid delay
+and/or confusion, be sure to specifically mention that you wish to purchase gd support at the
+hourly rate above.
+
+<A NAME="issues"><H3>How do I report issues, bugs or features request?</H3></A>
+Bugs, feature requests or other issues can be reported using the 
+<A HREF="http://bugs.libgd.org">libGD.org issues tracker.</A> as well as using
+one of our support channels: <a href="http://www.libgd.org/Wiki/Support">LibGD support</a>
+
+<H3><A NAME="index">Alphabetical quick index</A></H3>
+<A HREF="#gdAntiAliased">gdAntiAliased</A> |
+<A HREF="#gdBrushed">gdBrushed</A> |
+<A HREF="#gdDashSize">gdDashSize</A> |
+<A HREF="#gdFont">gdFont</A> |
+<A HREF="#gdFontGetHuge">gdFontGetHuge</A> |
+<A HREF="#gdFontGetLarge">gdFontGetLarge</A> |
+<A HREF="#gdFontGetMediumBold">gdFontGetMediumBold</A> |
+<A HREF="#gdFontGetSmall">gdFontGetSmall</A> |
+<A HREF="#gdFontGetTiny">gdFontGetTiny</A> |
+<A HREF="#gdFontCacheSetup">gdFontCacheSetup</A> |
+<A HREF="#gdFontCacheShutdown">gdFontCacheShutdown</A> |
+<A HREF="#gdFontPtr">gdFontPtr</A> |
+<A HREF="#gdFree">gdFree</A> |
+<A HREF="#gdImage">gdImage</A> |
+<A HREF="#gdImageAlphaBlending">gdImageAlphaBlending</A> |
+<A HREF="#gdImageArc">gdImageArc</A> |
+<A HREF="#gdImageBlue">gdImageBlue</A> |
+<A HREF="#gdImageBoundsSafe">gdImageBoundsSafe</A> |
+<A HREF="#gdImageChar">gdImageChar</A> |
+<A HREF="#gdImageCharUp">gdImageCharUp</A> |
+<A HREF="#gdImageColorAllocate">gdImageColorAllocate</A> |
+<A HREF="#gdImageColorAllocateAlpha">gdImageColorAllocateAlpha</A> |
+<A HREF="#gdImageColorClosest">gdImageColorClosest</A> |
+<A HREF="#gdImageColorClosestAlpha">gdImageColorClosestAlpha</A> |
+<A HREF="#gdImageColorClosestHWB">gdImageColorClosestHWB</A> |
+<A HREF="#gdImageColorDeallocate">gdImageColorDeallocate</A> |
+<A HREF="#gdImageColorExact">gdImageColorExact</A> |
+<A HREF="#gdImageColorExactAlpha">gdImageColorExactAlpha</A> |
+<A HREF="#gdImageColorResolve">gdImageColorResolve</A> |
+<A HREF="#gdImageColorResolveAlpha">gdImageColorResolveAlpha</A> |
+<A HREF="#gdImageColorTransparent">gdImageColorTransparent</A> |
+<A HREF="#gdImageCopy">gdImageCopy</A> |
+<A HREF="#gdImageCopyMerge">gdImageCopyMerge</A> |
+<A HREF="#gdImageCopyMergeGray">gdImageMergeGray</A> |
+<A HREF="#gdImageCopyResized">gdImageCopyResized</A> |
+<A HREF="#gdImageCopyResampled">gdImageCopyResampled</A> |
+<A HREF="#gdImageCopyRotated">gdImageCopyRotated</A> |
+<A HREF="#gdImageCreate">gdImageCreate</A> |
+<A HREF="#gdImageCreate">gdImageCreatePalette</A> |
+<A HREF="#gdImageCreate">gdImageCreateTrueColor</A> |
+<A HREF="#gdImageCreateFromGd">gdImageCreateFromGd</A> |
+<A HREF="#gdImageCreateFromGdCtx">gdImageCreateFromGdCtx</A> |
+<A HREF="#gdImageCreateFromGdPtr">gdImageCreateFromGdPtr</A> |
+<A HREF="#gdImageCreateFromGd2">gdImageCreateFromGd2</A> |
+<A HREF="#gdImageCreateFromGd2Ctx">gdImageCreateFromGd2Ctx</A> |
+<A HREF="#gdImageCreateFromGd2Ptr">gdImageCreateFromGd2Ptr</A> |
+<A HREF="#gdImageCreateFromGd2Part">gdImageCreateFromGd2Part</A> |
+<A HREF="#gdImageCreateFromGd2PartCtx">gdImageCreateFromGd2PartCtx</A> |
+<A HREF="#gdImageCreateFromGd2PartPtr">gdImageCreateFromGd2PartPtr</A> |
+<A HREF="#gdImageCreateFromJpeg">gdImageCreateFromJpeg</A> |
+<A HREF="#gdImageCreateFromJpegCtx">gdImageCreateFromJpegCtx</A> |
+<A HREF="#gdImageCreateFromJpegPtr">gdImageCreateFromJpegPtr</A> |
+<A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A> |
+<A HREF="#gdImageCreateFromPngCtx">gdImageCreateFromPngCtx</A> |
+<A HREF="#gdImageCreateFromPngPtr">gdImageCreateFromPngPtr</A> |
+<A HREF="#gdImageCreateFromPngSource">gdImageCreateFromPngSource</A> |
+<A HREF="#gdImageCreateFromWBMP">gdImageCreateFromWBMP</A> |
+<A HREF="#gdImageCreateFromWBMPCtx">gdImageCreateFromWBMPCtx</A> |
+<A HREF="#gdImageCreateFromWBMPPtr">gdImageCreateFromWBMPPtr</A> |
+<A HREF="#gdImageCreateFromXbm">gdImageCreateFromXbm</A> |
+<A HREF="#gdImageCreateFromXpm">gdImageCreateFromXpm</A> |
+<A HREF="#gdImageDashedLine">gdImageDashedLine</A> |
+<A HREF="#gdImageDestroy">gdImageDestroy</A> |
+<A HREF="#gdImageFill">gdImageFill</A> |
+<A HREF="#gdImageFilledArc">gdImageFilledArc</A> |
+<A HREF="#gdImageFilledEllipse">gdImageFilledEllipse</A> |
+<A HREF="#gdImageFillToBorder">gdImageFillToBorder</A> |
+<A HREF="#gdImageFilledRectangle">gdImageFilledRectangle</A> |
+<A HREF="#gdImageGd">gdImageGd</A> |
+<A HREF="#gdImageGd2">gdImageGd2</A> |
+<A HREF="#gdImageGetInterlaced">gdImageGetInterlaced</A> |
+<A HREF="#gdImageGetPixel">gdImageGetPixel</A> |
+<A HREF="#gdImageGetTransparent">gdImageGetTransparent</A> |
+<A HREF="#gdImageGifAnimAdd">gdImageGifAnimAdd</A> |
+<A HREF="#gdImageGifAnimAddCtx">gdImageGifAnimAddCtx</A> |
+<A HREF="#gdImageGifAnimAddPtr">gdImageGifAnimAddPtr</A> |
+<A HREF="#gdImageGifAnimBegin">gdImageGifAnimBegin</A> |
+<A HREF="#gdImageGifAnimBeginCtx">gdImageGifAnimBeginCtx</A> |
+<A HREF="#gdImageGifAnimBeginPtr">gdImageGifAnimBeginPtr</A> |
+<A HREF="#gdImageGifAnimEnd">gdImageGifAnimEnd</A> |
+<A HREF="#gdImageGifAnimEndCtx">gdImageGifAnimEndCtx</A> |
+<A HREF="#gdImageGifAnimEndPtr">gdImageGifAnimEndPtr</A> |
+<A HREF="#gdImageGreen">gdImageGreen</A> |
+<A HREF="#gdImageInterlace">gdImageInterlace</A> |
+<A HREF="#gdImageJpeg">gdImageJpeg</A> |
+<A HREF="#gdImageJpegCtx">gdImageJpegCtx</A> |
+<A HREF="#gdImageLine">gdImageLine</A> |
+<A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A> |
+<A HREF="#gdImageOpenPolygon">gdImageOpenPolygon</A> |
+<A HREF="#gdImagePaletteCopy">gdImagePaletteCopy</A> |
+<A HREF="#gdImagePng">gdImagePng</A> |
+<A HREF="#gdImagePngEx">gdImagePngEx</A> |
+<A HREF="#gdImagePngCtx">gdImagePngCtx</A> |
+<A HREF="#gdImagePngCtxEx">gdImagePngCtxEx</A> |
+<A HREF="#gdImagePngPtr">gdImagePngPtr</A> |
+<A HREF="#gdImagePngPtrEx">gdImagePngPtrEx</A> |
+<A HREF="#gdImagePngToSink">gdImagePngToSink</A> |
+<A HREF="#gdImagePolygon">gdImagePolygon</A> |
+<A HREF="#gdImagePtr">gdImagePtr</A> |
+<A HREF="#gdImageWBMP">gdImageWBMP</A> |
+<A HREF="#gdImageWBMPCtx">gdImageWBMPCtx</A> |
+<A HREF="#gdImageRectangle">gdImageRectangle</A> |
+<A HREF="#gdImageRed">gdImageRed</A> |
+<A HREF="#gdImageSaveAlpha">gdImageSaveAlpha</A> |
+<A HREF="#gdImageSetAntiAliased">gdImageSetAntiAliased</A> |
+<A HREF="#gdImageSetAntiAliasedDontBlend">gdImageSetAntiAliasedDontBlend</A> |
+<A HREF="#gdImageSetBrush">gdImageSetBrush</A> |
+<A HREF="#gdImageSetPixel">gdImageSetPixel</A> |
+<A HREF="#gdImageSetStyle">gdImageSetStyle</A> |
+<A HREF="#gdImageSetThickness">gdImageSetThickness</A> |
+<A HREF="#gdImageSetTile">gdImageSetTile</A> |
+<A HREF="#gdImageSharpen">gdImageSharpen</A> |
+<A HREF="#gdImageSquareToCircle">gdImageSquareToCircle</A> |
+<A HREF="#gdImageString">gdImageString</A> |
+<A HREF="#gdImageString16">gdImageString16</A> |
+<A HREF="#gdImageStringFT">gdImageStringFT</A> |
+<A HREF="#gdImageStringFTCircle">gdImageStringFTCircle</A> |
+<A HREF="#gdImageStringFTEx">gdImageStringFTEx</A> |
+<A HREF="#gdImageStringTTF">gdImageStringTTF</A> |
+<A HREF="#gdImageStringUp">gdImageStringUp</A> |
+<A HREF="#gdImageStringUp">gdImageStringUp16</A> |
+<A HREF="#gdImageToPalette">gdImageToPalette</A> |
+<A HREF="#gdImageWBMP">gdImageWBMP</A> |
+<A HREF="#gdMaxColors">gdMaxColors</A> |
+<A HREF="#gdPoint">gdPoint</A> |
+<A HREF="#gdStyled">gdStyled</A> |
+<A HREF="#gdStyledBrushed">gdStyledBrushed</A> |
+<A HREF="#gdTiled">gdTiled</A> |
+<A HREF="#gdTransparent">gdTransparent</A>
+<P>
+<em><A HREF="http://www.libgd.org/">
+www.libgd.org</A></em>
+</body>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/index.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+<html>
+<head>
+<title>Graphviz Documentation Index</title>
+</head>
+<body>
+<h1>Graphviz Documentation Index</h1>
+<ul>
+<li>Reference (HTML)
+  <ul>
+  <li><a href="info/index.html">Dot Language Reference</a>
+  </ul>
+<li>Miscellaneous (HTML)
+  <ul>
+  <li><a href="FAQ.html">FAQ</a>
+  <li><a href="build.html">build</a>
+  <li><a href="gd.html">gd</a>
+  <li><a href="tcldot.html">tcldot</a>
+  </ul>
+<li>Guides (PDF)
+  <ul>
+  <li><a href="../pdf/dotguide.pdf">dot guide</a>
+  <li><a href="../pdf/dottyguide.pdf">dotty guide</a>
+  <li><a href="../pdf/leftyguide.pdf">lefty guide</a>
+  <li><a href="../pdf/neatoguide.pdf">neato guide</a>
+  <li><a href="../pdf/libguide.pdf">library guide</a>
+  </ul>
+<li>Command manual pages (PDF)
+  <ul>
+  <li><a href="../pdf/acyclic.pdf">acyclic.1</a>
+  <li><a href="../pdf/bcomps.pdf">bcmps.1</a>
+  <li><a href="../pdf/ccomps.pdf">ccomps.1</a>
+  <li><a href="../pdf/circo.pdf">circo.1</a>
+  <li><a href="../pdf/dijkstra.pdf">dijkstra.1</a>
+  <li><a href="../pdf/dot.pdf">dot.1</a>
+  <li><a href="../pdf/dot2gxl.pdf">dot2gxl.1</a>
+  <li><a href="../pdf/dotneato-config.pdf">dotneato-config.1</a>
+  <li><a href="../pdf/dotty.pdf">dotty.1</a>
+  <li><a href="../pdf/fdp.pdf">fdp.1</a>
+  <li><a href="../pdf/gc.pdf">gc.1</a>
+  <li><a href="../pdf/gvcolor.pdf">gvcolor.1</a>
+  <li><a href="../pdf/gvpack.pdf">gvpack.1</a>
+  <li><a href="../pdf/gvpr.pdf">gvpr.1</a>
+  <li><a href="../pdf/gxl2dot.pdf">gxl2dot.1</a>
+  <li><a href="../pdf/lefty.pdf">lefty.1</a>
+  <li><a href="../pdf/lneato.pdf">lneato.1</a>
+  <li><a href="../pdf/neato.pdf">neato.1</a>
+  <li><a href="../pdf/nop.pdf">nop.1</a>
+  <li><a href="../pdf/prune.pdf">prune.1</a>
+  <li><a href="../pdf/sccmap.pdf">sccmap.1</a>
+  <li><a href="../pdf/tred.pdf">tred.1</a>
+  <li><a href="../pdf/twopi.pdf">twopi.1</a>
+  <li><a href="../pdf/unflatten.pdf">unflatten.1</a>
+  </ul>
+<li>Tcl package manual pages (PDF)
+  <ul>
+  <li><a href="../pdf/gdtclft.pdf">gdtclft.n</a>
+  <li><a href="../pdf/tcldot.pdf">tcldot.n</a>
+  <li><a href="../pdf/tkspline.pdf">tkspline.n</a>
+  </ul>
+<li>Library manual pages (PDF)
+  <ul>
+  <li><a href="../pdf/agraph.pdf">agraph.3</a>
+  <li><a href="../pdf/cdt.pdf">cdt.3</a>
+  <li><a href="../pdf/expr.pdf">expr.3</a>
+  <li><a href="../pdf/graph.pdf">graph.3</a>
+  <li><a href="../pdf/pathplan.pdf">pathplan.3</a>
+  <li><a href="../pdf/pack.pdf">pack.3</a>
+  </ul>
+</ul>
+</body>
+</html>
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/Mcircle.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/Mdiamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/Msquare.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/Thumbs.db has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_box.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_crow.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_diamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_dot.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_ediamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_empty.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_forward.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_halfopen.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_inv.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_invdot.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_invempty.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_invodot.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_lteeoldiamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_nohead.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_none.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_normal.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_obox.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_odiamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_odot.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_open.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/a_tee.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_box.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_crow.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_diamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_dot.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_inv.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_lbox.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_lcrow.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_ldiamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_linv.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_lnormal.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_ltee.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_lvee.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_none.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_normal.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_obox.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_odiamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_odot.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_oinv.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_olbox.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_oldiamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_olinv.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_olnormal.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_onormal.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_orbox.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_ordiamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_orinv.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_ornormal.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rbox.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rcrow.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rdiamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rinv.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rnormal.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rtee.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_rvee.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_tee.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/aa_vee.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/arrows.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,278 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<!--
+    This is a generated document.  Do not edit.
+-->
+<HTML VERSION="2.0">
+<HEAD>
+<TITLE>Arrow Shapes</TITLE>
+</HEAD>
+<BODY BGCOLOR=white>
+<A NAME="top"></A>
+<H1 ALIGN=CENTER>Arrow Shapes</H1>
+<HR>
+Arrow shapes can be specified and named using the following simple
+grammar. 
+Terminals are shown in bold font and nonterminals in italics.
+Literal characters are given in single quotes.
+Square brackets [ and ] enclose optional items.
+Vertical bars | separate alternatives.
+<TABLE>
+<TR>
+  <TD ALIGN=RIGHT><I>arrowname</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><I>aname</I> [ <I>aname</I> [ <I>aname</I> [ <I>aname</I> ] ] ]</TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>aname</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT>[ <I>modifiers</I> ] <I>shape</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>modifiers</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT>[ <B>'o'</B> ] [ <I>side</I> ]</TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>side</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><B>'l'</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>'r'</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>shape</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><B>box</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>crow</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>diamond</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>dot</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>inv</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>none</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>normal</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>tee</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>vee</B></TD>
+</TR>
+</TABLE>
+<P>
+The primitive shapes are:
+<CENTER>
+<TABLE>
+  <TR>
+    <TD>"box"<TD><IMG SRC="a_box.gif">
+    <TD>"crow"<TD><IMG SRC="a_crow.gif">
+    <TD>"diamond"<TD><IMG SRC="a_diamond.gif">
+  </TR>
+  <TR>
+    <TD>"dot"<TD><IMG SRC="a_dot.gif">
+    <TD>"inv"<TD><IMG SRC="a_inv.gif">
+    <TD>"none"<TD><IMG SRC="a_none.gif">
+  </TR>
+  <TR>
+    <TD>"normal"<TD><IMG SRC="a_normal.gif">
+    <TD>"tee"<TD><IMG SRC="a_tee.gif">
+    <TD>"vee"<TD><IMG SRC="a_open.gif">
+  </TR>
+</TABLE>
+</CENTER>
+<P>
+As for the modifiers:
+<DL>
+<DT>'l'
+  <DD> Clip the shape, leaving only the part to the left of the edge.
+<DT>'r'
+  <DD> Clip the shape, leaving only the part to the right of the edge.
+<DT>'o'
+  <DD> Use an open (non-filled) version of the shape.
+</DL>
+Left and right are defined as those directions determined by looking
+from the edge towards the point where the arrow "touches" the node.
+<P>
+As an example, the arrow shape <TT>lteeoldiamond</TT> is parsed as
+<TT>'l' 'tee' 'o' 'l' 'diamond'</TT> and corresponds to the shape
+<CENTER>
+<IMG SRC="a_lteeoldiamond.gif">
+</CENTER>
+Note that the first arrow shape specified occurs closest to the node.
+Subsequent arrow shapes, if specified, occur further from the node.
+<P>
+Not all syntactically legal combinations of modifiers are meaningful
+or semantically valid.
+For example, none of the modifiers make any sense with <TT>none</TT>.
+The following table indicates which modifiers are allowed with which shapes.
+<P>
+<CENTER>
+<TABLE BORDER=2>
+<TR ALIGN=CENTER>
+ <TH>Modifier</TH>
+ <TH>box
+ <TH>crow
+ <TH>diamond
+ <TH>dot
+ <TH>inv
+ <TH>none
+ <TH>normal
+ <TH>tee
+ <TH>vee
+</TR>
+<TR ALIGN=CENTER><TD>'l'/'r'<TD>X<TD>X<TD>X<TD>&nbsp;<TD>X<TD>&nbsp;<TD>X<TD>X<TD>X</TR>
+<TR ALIGN=CENTER><TD>'o'    <TD>X<TD>&nbsp;<TD>X<TD>X<TD>X<TD>&nbsp;<TD>X<TD>&nbsp;<TD>&nbsp;</TR>
+</TABLE>
+</CENTER>
+<P>
+This yields 36 different arrow shapes. The optional second, third, fourth shapes
+can independently be any of the 36, but since <TT>nonenone</TT> 
+is redundant, there are 35**4 + 35**3 + 35**2 + 35 + 1 = 1,544,761 different combinations.
+<P>
+The following display contains the 36 combinations possible with a single
+arrow shape. The node attached to the arrow is not drawn but would appear
+on the right side of the edge.
+<P>
+<CENTER>
+<TABLE>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC="aa_box.gif">
+    <TD><IMG SRC="aa_lbox.gif">
+    <TD><IMG SRC="aa_rbox.gif">
+    <TD><IMG SRC="aa_obox.gif">
+    <TD><IMG SRC="aa_olbox.gif">
+    <TD><IMG SRC="aa_orbox.gif">
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD>box
+    <TD>lbox
+    <TD>rbox
+    <TD>obox
+    <TD>olbox
+    <TD>orbox
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC="aa_crow.gif">
+    <TD><IMG SRC="aa_lcrow.gif">
+    <TD><IMG SRC="aa_rcrow.gif">
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD>crow
+    <TD>lcrow
+    <TD>rcrow
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC="aa_diamond.gif">
+    <TD><IMG SRC="aa_ldiamond.gif">
+    <TD><IMG SRC="aa_rdiamond.gif">
+    <TD><IMG SRC="aa_odiamond.gif">
+    <TD><IMG SRC="aa_oldiamond.gif">
+    <TD><IMG SRC="aa_ordiamond.gif">
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD>diamond
+    <TD>ldiamond
+    <TD>rdiamond
+    <TD>odiamond
+    <TD>oldiamond
+    <TD>ordiamond
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC="aa_dot.gif">
+    <TD><IMG SRC="aa_odot.gif">
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD>dot
+    <TD>odot
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC="aa_inv.gif">
+    <TD><IMG SRC="aa_linv.gif">
+    <TD><IMG SRC="aa_rinv.gif">
+    <TD><IMG SRC="aa_oinv.gif">
+    <TD><IMG SRC="aa_olinv.gif">
+    <TD><IMG SRC="aa_orinv.gif">
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD>inv
+    <TD>linv
+    <TD>rinv
+    <TD>oinv
+    <TD>olinv
+    <TD>orinv
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC="aa_none.gif">
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD>none
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC="aa_normal.gif">
+    <TD><IMG SRC="aa_lnormal.gif">
+    <TD><IMG SRC="aa_rnormal.gif">
+    <TD><IMG SRC="aa_onormal.gif">
+    <TD><IMG SRC="aa_olnormal.gif">
+    <TD><IMG SRC="aa_ornormal.gif">
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD>normal
+    <TD>lnormal
+    <TD>rnormal
+    <TD>onormal
+    <TD>olnormal
+    <TD>ornormal
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC="aa_tee.gif">
+    <TD><IMG SRC="aa_ltee.gif">
+    <TD><IMG SRC="aa_rtee.gif">
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD>tee
+    <TD>ltee
+    <TD>rtee
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC="aa_vee.gif">
+    <TD><IMG SRC="aa_lvee.gif">
+    <TD><IMG SRC="aa_rvee.gif">
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD>vee
+    <TD>lvee
+    <TD>rvee
+  </TR>
+</TABLE>
+</CENTER>
+</BODY>
+</HTML>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/attrs.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2087 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<!--
+    This is a generated document.  Do not edit.
+-->
+<HTML VERSION="2.0">
+<HEAD>
+<TITLE>Node, Edge and Graph Attributes</TITLE>
+</HEAD>
+<BODY BGCOLOR=white>
+<A NAME="top"></A>
+<H1 align=CENTER>Node, Edge and Graph Attributes</H1>
+<HR>
+The table below describes the attributes used by various Graphviz tools.
+The table gives the name of the attribute, the graph components (node,
+edge, etc.) which use the attribute and the type of the attribute
+(strings representing legal values of that type). Where applicable, the table
+also gives a default value for the attribute, a minimum allowed setting
+for numeric attributes, and certain restrictions on the use of the attribute.
+<P>
+All Graphviz attributes are specified by name-value pairs. Thus, to
+set the fillcolor of a node <TT>abc</TT>, one would use
+<TABLE>
+<TR><TD><TT>abc [fillcolor = red]</TT></TR>
+</TABLE>
+Similarly, to set the arrowhead style of an edge <TT>abc -> def</TT>,
+one would use
+<TABLE>
+<TR><TD><TT>abc -> def [arrowhead = diamond]</TT></TR>
+</TABLE>
+Further details concerning the setting of attributes can be found
+in the description of the
+<A HREF="http://www.graphviz.org/doc/info/lang.html">DOT language.</A>
+<P>
+At present, most device-independent units are either inches or
+<A NAME="points"></A>
+<A HREF="http://en.wikipedia.org/wiki/Point_(typography)">points</A>,
+which we take as 72 points per inch.
+<P>
+<A NAME=h:undir_note><STRONG>Note:</STRONG></A> Some attributes, such as
+<A HREF=#d:dir>dir</A> or <A HREF=#d:arrowtail>arrowtail</A>, are
+ambiguous when used in
+<A HREF="http://www.graphviz.org/doc/info/lang.html">DOT</A>
+with an undirected graph since the head and tail of an edge are meaningless.
+As a convention, the first time an undirected edge appears, the
+<A HREF="http://www.graphviz.org/doc/info/lang.html">DOT</A>
+parser will assign the left node as the tail node and the right node as
+the head. For example, the edge <TT>A -- B</TT> will have tail <TT>A</TT>
+and head <TT>B</TT>. It is the user's responsibility to handle such
+edges consistently. If the edge appears later, in the format
+<TABLE>
+<TR><TD><TT>B -- A [taillabel = "tail"]</TT></TR>
+</TABLE>
+the drawing will attach the tail label to node <TT>A</TT>.
+To avoid possible confusion when such attributes are required, the user
+is encouraged to use a directed graph.
+If it is important to make the graph appear undirected, this can be
+done using the <A HREF=#d:dir>dir</A>, <A HREF=#d:arrowtail>arrowtail</A>
+or <A HREF=#d:arrowhead>arrowhead</A> attributes.
+<P>
+The tools accept standard C representations for <EM>int</EM> and
+<EM>double</EM> types.
+For the <A NAME=k:bool><EM>bool</EM></A> type, TRUE values are
+represented by "true" (case-insensitive)
+and any non-zero integer, and FALSE values by "false" (case-insensitive)
+and zero.
+In addition, there are a variety of specialized types such as
+<EM>arrowType</EM>, <EM>color</EM>,
+<EM>pointf</EM> and <EM>rankdir</EM>. Legal values for these types are given
+at the end.
+<P>
+In the <A NAME=h:uses><STRONG>Used By</STRONG></A> field, the
+characters E, N, G, S and C
+represent edges, nodes, the root graph, subgraphs
+and cluster subgraphs, respectively.
+This field indicates which graph component uses the attribute.
+<HR ALIGN=CENTER WIDTH="70%" SIZE=3>
+<TABLE ALIGN=CENTER>
+<TR><TH>Name</TH><TH><A HREF=#h:uses>Used By</A></TH><TH>Type</TH><TH>Default</TH><TH>Minimum</TH><TH>Notes</TH></TR>
+ <TR><TD><A NAME=a:Damping HREF=#d:Damping>Damping</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">0.99</TD><TD>0.0</TD><TD>neato only</TD> </TR>
+ <TR><TD><A NAME=a:K HREF=#d:K>K</A>
+</TD><TD>GC</TD><TD>double</TD><TD ALIGN="CENTER">0.3</TD><TD>0</TD><TD>sfdp, fdp only</TD> </TR>
+ <TR><TD><A NAME=a:URL HREF=#d:URL>URL</A>
+</TD><TD>ENGC</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">&#60;none&#62;</TD><TD></TD><TD>svg, postscript, map only</TD> </TR>
+ <TR><TD><A NAME=a:arrowhead HREF=#d:arrowhead>arrowhead</A>
+</TD><TD>E</TD><TD><A HREF=#k:arrowType>arrowType</A>
+</TD><TD ALIGN="CENTER">normal</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:arrowsize HREF=#d:arrowsize>arrowsize</A>
+</TD><TD>E</TD><TD>double</TD><TD ALIGN="CENTER">1.0</TD><TD>0.0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:arrowtail HREF=#d:arrowtail>arrowtail</A>
+</TD><TD>E</TD><TD><A HREF=#k:arrowType>arrowType</A>
+</TD><TD ALIGN="CENTER">normal</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:aspect HREF=#d:aspect>aspect</A>
+</TD><TD>G</TD><TD><A HREF=#k:aspectType>aspectType</A>
+</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:bb HREF=#d:bb>bb</A>
+</TD><TD>G</TD><TD><A HREF=#k:rect>rect</A>
+</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>write only</TD> </TR>
+ <TR><TD><A NAME=a:bgcolor HREF=#d:bgcolor>bgcolor</A>
+</TD><TD>GC</TD><TD><A HREF=#k:color>color</A>
+</TD><TD ALIGN="CENTER">&#60;none&#62;</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:center HREF=#d:center>center</A>
+</TD><TD>G</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:charset HREF=#d:charset>charset</A>
+</TD><TD>G</TD><TD>string</TD><TD ALIGN="CENTER">"UTF-8"</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:clusterrank HREF=#d:clusterrank>clusterrank</A>
+</TD><TD>G</TD><TD><A HREF=#k:clusterMode>clusterMode</A>
+</TD><TD ALIGN="CENTER">local</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:color HREF=#d:color>color</A>
+</TD><TD>ENC</TD><TD><A HREF=#k:color>color</A>
+<BR><A HREF=#k:colorList>colorList</A>
+</TD><TD ALIGN="CENTER">black</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:colorscheme HREF=#d:colorscheme>colorscheme</A>
+</TD><TD>ENCG</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:comment HREF=#d:comment>comment</A>
+</TD><TD>ENG</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:compound HREF=#d:compound>compound</A>
+</TD><TD>G</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:concentrate HREF=#d:concentrate>concentrate</A>
+</TD><TD>G</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:constraint HREF=#d:constraint>constraint</A>
+</TD><TD>E</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">true</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:decorate HREF=#d:decorate>decorate</A>
+</TD><TD>E</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:defaultdist HREF=#d:defaultdist>defaultdist</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">1+(avg. len)*sqrt(|V|)</TD><TD>epsilon</TD><TD>neato only</TD> </TR>
+ <TR><TD><A NAME=a:dim HREF=#d:dim>dim</A>
+</TD><TD>G</TD><TD>int</TD><TD ALIGN="CENTER">2</TD><TD>2</TD><TD>sfdp, fdp, neato only</TD> </TR>
+ <TR><TD><A NAME=a:dimen HREF=#d:dimen>dimen</A>
+</TD><TD>G</TD><TD>int</TD><TD ALIGN="CENTER">2</TD><TD>2</TD><TD>sfdp, fdp, neato only</TD> </TR>
+ <TR><TD><A NAME=a:dir HREF=#d:dir>dir</A>
+</TD><TD>E</TD><TD><A HREF=#k:dirType>dirType</A>
+</TD><TD ALIGN="CENTER">forward(directed)<BR>none(undirected)</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:diredgeconstraints HREF=#d:diredgeconstraints>diredgeconstraints</A>
+</TD><TD>G</TD><TD>string<BR><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD>neato only</TD> </TR>
+ <TR><TD><A NAME=a:distortion HREF=#d:distortion>distortion</A>
+</TD><TD>N</TD><TD>double</TD><TD ALIGN="CENTER">0.0</TD><TD>-100.0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:dpi HREF=#d:dpi>dpi</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">96.0<BR>0.0</TD><TD></TD><TD>svg, bitmap output only</TD> </TR>
+ <TR><TD><A NAME=a:edgeURL HREF=#d:edgeURL>edgeURL</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:edgehref HREF=#d:edgehref>edgehref</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:edgetarget HREF=#d:edgetarget>edgetarget</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">&#60;none&#62;</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:edgetooltip HREF=#d:edgetooltip>edgetooltip</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, cmap only</TD> </TR>
+ <TR><TD><A NAME=a:epsilon HREF=#d:epsilon>epsilon</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">.0001 * # nodes(mode == KK)<BR>.0001(mode == major)</TD><TD></TD><TD>neato only</TD> </TR>
+ <TR><TD><A NAME=a:esep HREF=#d:esep>esep</A>
+</TD><TD>G</TD><TD>double<BR><A HREF=#k:pointf>pointf</A>
+</TD><TD ALIGN="CENTER">+3</TD><TD></TD><TD>not dot</TD> </TR>
+ <TR><TD><A NAME=a:fillcolor HREF=#d:fillcolor>fillcolor</A>
+</TD><TD>NC</TD><TD><A HREF=#k:color>color</A>
+</TD><TD ALIGN="CENTER">lightgrey(nodes)<BR>black(clusters)</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:fixedsize HREF=#d:fixedsize>fixedsize</A>
+</TD><TD>N</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:fontcolor HREF=#d:fontcolor>fontcolor</A>
+</TD><TD>ENGC</TD><TD><A HREF=#k:color>color</A>
+</TD><TD ALIGN="CENTER">black</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:fontname HREF=#d:fontname>fontname</A>
+</TD><TD>ENGC</TD><TD>string</TD><TD ALIGN="CENTER">"Times-Roman"</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:fontnames HREF=#d:fontnames>fontnames</A>
+</TD><TD>G</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg only</TD> </TR>
+ <TR><TD><A NAME=a:fontpath HREF=#d:fontpath>fontpath</A>
+</TD><TD>G</TD><TD>string</TD><TD ALIGN="CENTER">system-dependent</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:fontsize HREF=#d:fontsize>fontsize</A>
+</TD><TD>ENGC</TD><TD>double</TD><TD ALIGN="CENTER">14.0</TD><TD>1.0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:group HREF=#d:group>group</A>
+</TD><TD>N</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:headURL HREF=#d:headURL>headURL</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:headclip HREF=#d:headclip>headclip</A>
+</TD><TD>E</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">true</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:headhref HREF=#d:headhref>headhref</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:headlabel HREF=#d:headlabel>headlabel</A>
+</TD><TD>E</TD><TD><A HREF=#k:lblString>lblString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:headport HREF=#d:headport>headport</A>
+</TD><TD>E</TD><TD><A HREF=#k:portPos>portPos</A>
+</TD><TD ALIGN="CENTER">center</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:headtarget HREF=#d:headtarget>headtarget</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">&#60;none&#62;</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:headtooltip HREF=#d:headtooltip>headtooltip</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, cmap only</TD> </TR>
+ <TR><TD><A NAME=a:height HREF=#d:height>height</A>
+</TD><TD>N</TD><TD>double</TD><TD ALIGN="CENTER">0.5</TD><TD>0.02</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:href HREF=#d:href>href</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, postscript, map only</TD> </TR>
+ <TR><TD><A NAME=a:id HREF=#d:id>id</A>
+</TD><TD>GNE</TD><TD><A HREF=#k:lblString>lblString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, postscript, map only</TD> </TR>
+ <TR><TD><A NAME=a:image HREF=#d:image>image</A>
+</TD><TD>N</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:imagescale HREF=#d:imagescale>imagescale</A>
+</TD><TD>N</TD><TD><A HREF=#k:bool>bool</A>
+<BR>string</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:label HREF=#d:label>label</A>
+</TD><TD>ENGC</TD><TD><A HREF=#k:lblString>lblString</A>
+</TD><TD ALIGN="CENTER">"\N" (nodes)<BR>"" (otherwise)</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:labelURL HREF=#d:labelURL>labelURL</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:labelangle HREF=#d:labelangle>labelangle</A>
+</TD><TD>E</TD><TD>double</TD><TD ALIGN="CENTER">-25.0</TD><TD>-180.0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:labeldistance HREF=#d:labeldistance>labeldistance</A>
+</TD><TD>E</TD><TD>double</TD><TD ALIGN="CENTER">1.0</TD><TD>0.0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:labelfloat HREF=#d:labelfloat>labelfloat</A>
+</TD><TD>E</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:labelfontcolor HREF=#d:labelfontcolor>labelfontcolor</A>
+</TD><TD>E</TD><TD><A HREF=#k:color>color</A>
+</TD><TD ALIGN="CENTER">black</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:labelfontname HREF=#d:labelfontname>labelfontname</A>
+</TD><TD>E</TD><TD>string</TD><TD ALIGN="CENTER">"Times-Roman"</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:labelfontsize HREF=#d:labelfontsize>labelfontsize</A>
+</TD><TD>E</TD><TD>double</TD><TD ALIGN="CENTER">14.0</TD><TD>1.0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:labelhref HREF=#d:labelhref>labelhref</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:labeljust HREF=#d:labeljust>labeljust</A>
+</TD><TD>GC</TD><TD>string</TD><TD ALIGN="CENTER">"c"</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:labelloc HREF=#d:labelloc>labelloc</A>
+</TD><TD>GC</TD><TD>string</TD><TD ALIGN="CENTER">"t"(clusters)<BR>"b"(root graphs)</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=aa:labelloc HREF=#dd:labelloc>labelloc</A>
+</TD><TD>N</TD><TD>string</TD><TD ALIGN="CENTER">"c"(clusters)</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:labeltarget HREF=#d:labeltarget>labeltarget</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">&#60;none&#62;</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:labeltooltip HREF=#d:labeltooltip>labeltooltip</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, cmap only</TD> </TR>
+ <TR><TD><A NAME=a:landscape HREF=#d:landscape>landscape</A>
+</TD><TD>G</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:layer HREF=#d:layer>layer</A>
+</TD><TD>EN</TD><TD><A HREF=#k:layerRange>layerRange</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:layers HREF=#d:layers>layers</A>
+</TD><TD>G</TD><TD><A HREF=#k:layerList>layerList</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:layersep HREF=#d:layersep>layersep</A>
+</TD><TD>G</TD><TD>string</TD><TD ALIGN="CENTER">" :\t"</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:layout HREF=#d:layout>layout</A>
+</TD><TD>G</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:len HREF=#d:len>len</A>
+</TD><TD>E</TD><TD>double</TD><TD ALIGN="CENTER">1.0(neato)<BR>0.3(fdp)</TD><TD></TD><TD>fdp, neato only</TD> </TR>
+ <TR><TD><A NAME=a:levels HREF=#d:levels>levels</A>
+</TD><TD>G</TD><TD>int</TD><TD ALIGN="CENTER">MAXINT</TD><TD>0.0</TD><TD>sfdp only</TD> </TR>
+ <TR><TD><A NAME=a:levelsgap HREF=#d:levelsgap>levelsgap</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">0.0</TD><TD></TD><TD>neato only</TD> </TR>
+ <TR><TD><A NAME=a:lhead HREF=#d:lhead>lhead</A>
+</TD><TD>E</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:lp HREF=#d:lp>lp</A>
+</TD><TD>EGC</TD><TD><A HREF=#k:point>point</A>
+</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>write only</TD> </TR>
+ <TR><TD><A NAME=a:ltail HREF=#d:ltail>ltail</A>
+</TD><TD>E</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:margin HREF=#d:margin>margin</A>
+</TD><TD>NG</TD><TD>double<BR><A HREF=#k:pointf>pointf</A>
+</TD><TD ALIGN="CENTER">&#60;device-dependent&#62;</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:maxiter HREF=#d:maxiter>maxiter</A>
+</TD><TD>G</TD><TD>int</TD><TD ALIGN="CENTER">100 * # nodes(mode == KK)<BR>200(mode == major)<BR>600(fdp)</TD><TD></TD><TD>fdp, neato only</TD> </TR>
+ <TR><TD><A NAME=a:mclimit HREF=#d:mclimit>mclimit</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">1.0</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:mindist HREF=#d:mindist>mindist</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">1.0</TD><TD>0.0</TD><TD>circo only</TD> </TR>
+ <TR><TD><A NAME=a:minlen HREF=#d:minlen>minlen</A>
+</TD><TD>E</TD><TD>int</TD><TD ALIGN="CENTER">1</TD><TD>0</TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:mode HREF=#d:mode>mode</A>
+</TD><TD>G</TD><TD>string</TD><TD ALIGN="CENTER">"major"</TD><TD></TD><TD>neato only</TD> </TR>
+ <TR><TD><A NAME=a:model HREF=#d:model>model</A>
+</TD><TD>G</TD><TD>string</TD><TD ALIGN="CENTER">"shortpath"</TD><TD></TD><TD>neato only</TD> </TR>
+ <TR><TD><A NAME=a:mosek HREF=#d:mosek>mosek</A>
+</TD><TD>G</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD>neato only</TD> </TR>
+ <TR><TD><A NAME=a:nodesep HREF=#d:nodesep>nodesep</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">0.25</TD><TD>0.02</TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:nojustify HREF=#d:nojustify>nojustify</A>
+</TD><TD>GCNE</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:normalize HREF=#d:normalize>normalize</A>
+</TD><TD>G</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD>not dot</TD> </TR>
+ <TR><TD><A NAME=a:nslimit HREF=#d:nslimit>nslimit</A>
+<BR><A NAME=a:nslimit1 HREF=#d:nslimit1>nslimit1</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:ordering HREF=#d:ordering>ordering</A>
+</TD><TD>G</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:orientation HREF=#d:orientation>orientation</A>
+</TD><TD>N</TD><TD>double</TD><TD ALIGN="CENTER">0.0</TD><TD>360.0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=aa:orientation HREF=#dd:orientation>orientation</A>
+</TD><TD>G</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:outputorder HREF=#d:outputorder>outputorder</A>
+</TD><TD>G</TD><TD><A HREF=#k:outputMode>outputMode</A>
+</TD><TD ALIGN="CENTER">breadthfirst</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:overlap HREF=#d:overlap>overlap</A>
+</TD><TD>G</TD><TD>string<BR><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">true</TD><TD></TD><TD>not dot</TD> </TR>
+ <TR><TD><A NAME=a:overlap_scaling HREF=#d:overlap_scaling>overlap_scaling</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">-4</TD><TD>-1.0e10</TD><TD>prism only</TD> </TR>
+ <TR><TD><A NAME=a:pack HREF=#d:pack>pack</A>
+</TD><TD>G</TD><TD><A HREF=#k:bool>bool</A>
+<BR>int</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD>not dot</TD> </TR>
+ <TR><TD><A NAME=a:packmode HREF=#d:packmode>packmode</A>
+</TD><TD>G</TD><TD><A HREF=#k:packMode>packMode</A>
+</TD><TD ALIGN="CENTER">node</TD><TD></TD><TD>not dot</TD> </TR>
+ <TR><TD><A NAME=a:pad HREF=#d:pad>pad</A>
+</TD><TD>G</TD><TD>double<BR><A HREF=#k:pointf>pointf</A>
+</TD><TD ALIGN="CENTER">0.0555 (4 points)</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:page HREF=#d:page>page</A>
+</TD><TD>G</TD><TD><A HREF=#k:pointf>pointf</A>
+</TD><TD ALIGN="CENTER"></TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:pagedir HREF=#d:pagedir>pagedir</A>
+</TD><TD>G</TD><TD><A HREF=#k:pagedir>pagedir</A>
+</TD><TD ALIGN="CENTER">BL</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:pencolor HREF=#d:pencolor>pencolor</A>
+</TD><TD>C</TD><TD><A HREF=#k:color>color</A>
+</TD><TD ALIGN="CENTER">black</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:penwidth HREF=#d:penwidth>penwidth</A>
+</TD><TD>CNE</TD><TD>double</TD><TD ALIGN="CENTER">1.0</TD><TD>0.0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:peripheries HREF=#d:peripheries>peripheries</A>
+</TD><TD>NC</TD><TD>int</TD><TD ALIGN="CENTER">shape default(nodes)<BR>1(clusters)</TD><TD>0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:pin HREF=#d:pin>pin</A>
+</TD><TD>N</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD>fdp, neato only</TD> </TR>
+ <TR><TD><A NAME=a:pos HREF=#d:pos>pos</A>
+</TD><TD>EN</TD><TD><A HREF=#k:point>point</A>
+<BR><A HREF=#k:splineType>splineType</A>
+</TD><TD ALIGN="CENTER"></TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:quadtree HREF=#d:quadtree>quadtree</A>
+</TD><TD>G</TD><TD><A HREF=#k:quadType>quadType</A>
+<BR><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">"normal"</TD><TD></TD><TD>sfdp only</TD> </TR>
+ <TR><TD><A NAME=a:quantum HREF=#d:quantum>quantum</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">0.0</TD><TD>0.0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:rank HREF=#d:rank>rank</A>
+</TD><TD>S</TD><TD><A HREF=#k:rankType>rankType</A>
+</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:rankdir HREF=#d:rankdir>rankdir</A>
+</TD><TD>G</TD><TD><A HREF=#k:rankdir>rankdir</A>
+</TD><TD ALIGN="CENTER">TB</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:ranksep HREF=#d:ranksep>ranksep</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">0.5(dot)<BR>1.0(twopi)</TD><TD>0.02</TD><TD>twopi, dot only</TD> </TR>
+ <TR><TD><A NAME=a:ratio HREF=#d:ratio>ratio</A>
+</TD><TD>G</TD><TD>double<BR>string</TD><TD ALIGN="CENTER"></TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:rects HREF=#d:rects>rects</A>
+</TD><TD>N</TD><TD><A HREF=#k:rect>rect</A>
+</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>write only</TD> </TR>
+ <TR><TD><A NAME=a:regular HREF=#d:regular>regular</A>
+</TD><TD>N</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:remincross HREF=#d:remincross>remincross</A>
+</TD><TD>G</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">false</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:repulsiveforce HREF=#d:repulsiveforce>repulsiveforce</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">1.0</TD><TD>0.0</TD><TD>sfdp only</TD> </TR>
+ <TR><TD><A NAME=a:resolution HREF=#d:resolution>resolution</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">96.0<BR>0.0</TD><TD></TD><TD>svg, bitmap output only</TD> </TR>
+ <TR><TD><A NAME=a:root HREF=#d:root>root</A>
+</TD><TD>GN</TD><TD>string<BR><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">""(graphs)<BR>false(nodes)</TD><TD></TD><TD>circo, twopi only</TD> </TR>
+ <TR><TD><A NAME=a:rotate HREF=#d:rotate>rotate</A>
+</TD><TD>G</TD><TD>int</TD><TD ALIGN="CENTER">0</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:samehead HREF=#d:samehead>samehead</A>
+</TD><TD>E</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:sametail HREF=#d:sametail>sametail</A>
+</TD><TD>E</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:samplepoints HREF=#d:samplepoints>samplepoints</A>
+</TD><TD>N</TD><TD>int</TD><TD ALIGN="CENTER">8(output)<BR>20(overlap and image maps)</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:searchsize HREF=#d:searchsize>searchsize</A>
+</TD><TD>G</TD><TD>int</TD><TD ALIGN="CENTER">30</TD><TD></TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:sep HREF=#d:sep>sep</A>
+</TD><TD>G</TD><TD>double<BR><A HREF=#k:pointf>pointf</A>
+</TD><TD ALIGN="CENTER">+4</TD><TD></TD><TD>not dot</TD> </TR>
+ <TR><TD><A NAME=a:shape HREF=#d:shape>shape</A>
+</TD><TD>N</TD><TD><A HREF=#k:shape>shape</A>
+</TD><TD ALIGN="CENTER">ellipse</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:shapefile HREF=#d:shapefile>shapefile</A>
+</TD><TD>N</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:showboxes HREF=#d:showboxes>showboxes</A>
+</TD><TD>ENG</TD><TD>int</TD><TD ALIGN="CENTER">0</TD><TD>0</TD><TD>dot only</TD> </TR>
+ <TR><TD><A NAME=a:sides HREF=#d:sides>sides</A>
+</TD><TD>N</TD><TD>int</TD><TD ALIGN="CENTER">4</TD><TD>0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:size HREF=#d:size>size</A>
+</TD><TD>G</TD><TD><A HREF=#k:pointf>pointf</A>
+</TD><TD ALIGN="CENTER"></TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:skew HREF=#d:skew>skew</A>
+</TD><TD>N</TD><TD>double</TD><TD ALIGN="CENTER">0.0</TD><TD>-100.0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:smoothing HREF=#d:smoothing>smoothing</A>
+</TD><TD>G</TD><TD><A HREF=#k:smoothType>smoothType</A>
+</TD><TD ALIGN="CENTER">"none"</TD><TD></TD><TD>sfdp only</TD> </TR>
+ <TR><TD><A NAME=a:sortv HREF=#d:sortv>sortv</A>
+</TD><TD>GCN</TD><TD>int</TD><TD ALIGN="CENTER">0</TD><TD>0</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:splines HREF=#d:splines>splines</A>
+</TD><TD>G</TD><TD><A HREF=#k:bool>bool</A>
+<BR>string</TD><TD ALIGN="CENTER"></TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:start HREF=#d:start>start</A>
+</TD><TD>G</TD><TD><A HREF=#k:startType>startType</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>fdp, neato only</TD> </TR>
+ <TR><TD><A NAME=a:style HREF=#d:style>style</A>
+</TD><TD>ENC</TD><TD><A HREF=#k:style>style</A>
+</TD><TD ALIGN="CENTER"></TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:stylesheet HREF=#d:stylesheet>stylesheet</A>
+</TD><TD>G</TD><TD>string</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg only</TD> </TR>
+ <TR><TD><A NAME=a:tailURL HREF=#d:tailURL>tailURL</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:tailclip HREF=#d:tailclip>tailclip</A>
+</TD><TD>E</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER">true</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:tailhref HREF=#d:tailhref>tailhref</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:taillabel HREF=#d:taillabel>taillabel</A>
+</TD><TD>E</TD><TD><A HREF=#k:lblString>lblString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:tailport HREF=#d:tailport>tailport</A>
+</TD><TD>E</TD><TD><A HREF=#k:portPos>portPos</A>
+</TD><TD ALIGN="CENTER">center</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:tailtarget HREF=#d:tailtarget>tailtarget</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">&#60;none&#62;</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:tailtooltip HREF=#d:tailtooltip>tailtooltip</A>
+</TD><TD>E</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, cmap only</TD> </TR>
+ <TR><TD><A NAME=a:target HREF=#d:target>target</A>
+</TD><TD>ENGC</TD><TD><A HREF=#k:escString>escString</A>
+<BR>string</TD><TD ALIGN="CENTER">&#60;none&#62;</TD><TD></TD><TD>svg, map only</TD> </TR>
+ <TR><TD><A NAME=a:tooltip HREF=#d:tooltip>tooltip</A>
+</TD><TD>NEC</TD><TD><A HREF=#k:escString>escString</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD>svg, cmap only</TD> </TR>
+ <TR><TD><A NAME=a:truecolor HREF=#d:truecolor>truecolor</A>
+</TD><TD>G</TD><TD><A HREF=#k:bool>bool</A>
+</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>bitmap output only</TD> </TR>
+ <TR><TD><A NAME=a:vertices HREF=#d:vertices>vertices</A>
+</TD><TD>N</TD><TD><A HREF=#k:pointfList>pointfList</A>
+</TD><TD ALIGN="CENTER"></TD><TD></TD><TD>write only</TD> </TR>
+ <TR><TD><A NAME=a:viewport HREF=#d:viewport>viewport</A>
+</TD><TD>G</TD><TD><A HREF=#k:viewPort>viewPort</A>
+</TD><TD ALIGN="CENTER">""</TD><TD></TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:voro_margin HREF=#d:voro_margin>voro_margin</A>
+</TD><TD>G</TD><TD>double</TD><TD ALIGN="CENTER">0.05</TD><TD>0.0</TD><TD>not dot</TD> </TR>
+ <TR><TD><A NAME=a:weight HREF=#d:weight>weight</A>
+</TD><TD>E</TD><TD>double</TD><TD ALIGN="CENTER">1.0</TD><TD>0(dot)<BR>1(neato,fdp,sfdp)</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:width HREF=#d:width>width</A>
+</TD><TD>N</TD><TD>double</TD><TD ALIGN="CENTER">0.75</TD><TD>0.01</TD><TD></TD> </TR>
+ <TR><TD><A NAME=a:z HREF=#d:z>z</A>
+</TD><TD>N</TD><TD>double</TD><TD ALIGN="CENTER">0.0</TD><TD>-MAXFLOAT<BR>-1000</TD><TD></TD> </TR>
+</TABLE>
+<HR>
+<H1>Attribute Descriptions</H1>
+<DL>
+<DT><A NAME=d:Damping HREF=#a:Damping><STRONG>Damping</STRONG></A>
+<DD>  Factor damping force motions. On each iteration, a nodes movement
+  is limited to this factor of its potential motion. By being less than
+  1.0, the system tends to ``cool'', thereby preventing cycling.
+
+<DT><A NAME=d:K HREF=#a:K><STRONG>K</STRONG></A>
+<DD>  Spring constant used in virtual physical model. It roughly corresponds
+  to an ideal edge length (in inches), in that increasing K tends to
+  increase the distance between nodes.
+  Note that the edge attribute <A HREF=#d:len>len</A> can be used to
+  override this value for adjacent nodes.
+
+<DT><A NAME=d:URL HREF=#a:URL><STRONG>URL</STRONG></A>
+<DD>  Hyperlinks incorporated into device-dependent output.
+  At present, used in ps2, cmap, i*map and svg formats.
+  For all these formats, URLs can be attached to nodes, edges and
+  clusters. URL attributes can also be attached to the root graph in ps2,
+  cmap and i*map formats. This serves as the base URL for relative URLs in the
+  former, and as the default image map file in the latter.
+  <P>
+  For svg, cmapx and imap output, the active area for a node is its
+  visible image.
+  For example, an unfilled
+  node with no drawn boundary will only be active on its label.
+  For other output, the active area is its bounding box.
+  The active area for a cluster is its bounding box.
+  For edges, the active areas are small circles where the edge contacts its head
+  and tail nodes. In addition, for svg, cmapx and imap, the active area
+  includes a thin polygon approximating the edge. The circles may
+  overlap the related node, and the edge URL dominates.
+  If the edge has a label, this will also be active.
+  Finally, if the edge has a head or tail label, this will also be active.
+  <P>
+  Note that, for edges, the attributes <A HREF=#d:headURL>headURL</A>,
+  <A HREF=#d:tailURL>tailURL</A>, <A HREF=#d:labelURL>labelURL</A> and
+  <A HREF=#d:edgeURL>edgeURL</A> allow control of various parts of an
+  edge.
+  Also note that, if active areas of two edges overlap, it is unspecified
+  which area dominates.
+
+<DT><A NAME=d:arrowhead HREF=#a:arrowhead><STRONG>arrowhead</STRONG></A>
+<DD>  Style of arrowhead on the head node of an edge.
+  See also the <A HREF=#d:dir>dir</A> attribute,
+  and a <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:arrowsize HREF=#a:arrowsize><STRONG>arrowsize</STRONG></A>
+<DD>  Multiplicative scale factor for arrowheads.
+
+<DT><A NAME=d:arrowtail HREF=#a:arrowtail><STRONG>arrowtail</STRONG></A>
+<DD>  Style of arrowhead on the tail node of an edge.
+  See also the <A HREF=#d:dir>dir</A> attribute,
+  and a <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:aspect HREF=#a:aspect><STRONG>aspect</STRONG></A>
+<DD>  Target aspect ratio (width of the layout divided by the height)
+  of the graph drawing. If unset, dot minimizes the total edge length.
+  For certain graphs, like those with large fan-in or fan-out, this can
+  lead to very wide layouts. Setting <TT>aspect</TT> will cause dot to try
+  to adjust the layout to get an aspect ratio close to that specified
+  by <TT>aspect</TT>.
+  <P>
+  By default, dot will do 5 passes attempting to achieve the desired
+  aspect ratio. For certain graphs, more passes will be needed to get
+  close enough. The <TT>aspect</TT> attribute can also be used to 
+  specify the maximum number of passes to try.
+  <P>
+  At present, there is no mechanism for widening a very tall layout.
+  Also, the algorithm doesn't handle clusters, nor disconnected graphs.
+  For the latter case, one can split the pipeline<BR>
+  <TT>ccomps -x | dot | gvpack | neato -n2</TT>
+  to get a similar effect.
+
+<DT><A NAME=d:bb HREF=#a:bb><STRONG>bb</STRONG></A>
+<DD>  Bounding box of drawing in points.
+
+<DT><A NAME=d:bgcolor HREF=#a:bgcolor><STRONG>bgcolor</STRONG></A>
+<DD>  When attached to the root graph, this color is used as the background for
+  entire canvas. When a cluster attribute, it is used as the initial
+  background for the cluster. If a cluster has a filled
+  <A HREF=#d:style>style</A>, the
+  cluster's <A HREF=#d:fillcolor>fillcolor</A> will overlay the
+  background color.
+  <P>
+  If no background color is specified for the root graph, no graphics
+  operation are performed on the background. This works fine for
+  PostScript but for bitmap output, all bits are initialized to something.
+  This means that when the bitmap output is included in some other
+  document, all of the bits within the bitmap's bounding box will be
+  set, overwriting whatever color or graphics where already on the page.
+  If this effect is not desired, and you only want to set bits explicitly
+  assigned in drawing the graph, set <B>bgcolor</B>="transparent".
+
+<DT><A NAME=d:center HREF=#a:center><STRONG>center</STRONG></A>
+<DD>  If true, the drawing is centered in the output canvas.
+
+<DT><A NAME=d:charset HREF=#a:charset><STRONG>charset</STRONG></A>
+<DD>  Specifies the character encoding used when interpreting string input
+  as a text label. The default value is <TT>"UTF-8"</TT>.
+  The other legal value is <TT>"iso-8859-1"</TT> or,
+  equivalently,
+  <TT>"Latin1"</TT>. The <B>charset</B> attribute is case-insensitive.
+  Note that if the character encoding used in the input does not
+  match the <B>charset</B> value, the resulting output may be very strange.
+
+<DT><A NAME=d:clusterrank HREF=#a:clusterrank><STRONG>clusterrank</STRONG></A>
+<DD>  Mode used for handling clusters. If <B>clusterrank</B> is "local", a
+  subgraph whose name begins with "cluster" is given special treatment.
+  The subgraph is laid out separately, and then integrated as a unit into
+  its parent graph, with a bounding rectangle drawn about it.
+  If the cluster has a <A HREF=#d:label>label</A> parameter, this label
+  is displayed within the rectangle.
+  Note also that there can be clusters within clusters.
+  At present, the modes "global" and "none"
+  appear to be identical, both turning off the special cluster processing.
+
+<DT><A NAME=d:color HREF=#a:color><STRONG>color</STRONG></A>
+<DD>  Basic drawing color for graphics, not text. For the latter, use the
+  <A HREF=#d.fontcolor>fontcolor</A> attribute.
+  <P>
+  For edges, the value
+  can either be a single color or a <A HREF=#k:colorList>colorList</A>.
+  In the latter case, the edge is drawn using parallel splines or lines,
+  one for each color in the list, in the order given.
+  The head arrow, if any, is drawn using the first color in the list,
+  and the tail arrow, if any, the second color. This supports the common
+  case of drawing opposing edges, but using parallel splines instead of
+  separately routed multiedges. For example, the graph
+  <PRE>
+  digraph G {
+    a -> b [dir=both color="red:blue"]
+  }
+  </PRE>
+  yields<BR>
+  <IMG SRC="colorlist.gif">
+
+<DT><A NAME=d:colorscheme HREF=#a:colorscheme><STRONG>colorscheme</STRONG></A>
+<DD>  This attribute specifies a color scheme namespace. If defined, it specifies
+  the context for interpreting color names. In particular, if a
+  <A HREF=#k:color>color</A> value has form <TT>"xxx"</TT> or <TT>"//xxx"</TT>,
+  then the
+  color <TT>xxx</TT> will be evaluated according to the current color scheme.
+  If no color scheme is set, the standard X11 naming is used.
+  For example, if <TT>colorscheme=bugn9</TT>, then <TT>color=7</TT>
+  is interpreted as <TT>"/bugn9/7"</TT>.
+
+<DT><A NAME=d:comment HREF=#a:comment><STRONG>comment</STRONG></A>
+<DD>  Comments are inserted into output. Device-dependent
+
+<DT><A NAME=d:compound HREF=#a:compound><STRONG>compound</STRONG></A>
+<DD>  If true, allow edges between clusters. (See <A HREF=#d:lhead>lhead</A>
+  and <A HREF=#d:ltail>ltail</A> below.)
+
+<DT><A NAME=d:concentrate HREF=#a:concentrate><STRONG>concentrate</STRONG></A>
+<DD>  If true, use edge concentrators.
+  This merges multiedges into a single edge and causes partially parallel
+  edges to share part of their paths. The latter feature is not yet available
+  outside of dot.
+
+<DT><A NAME=d:constraint HREF=#a:constraint><STRONG>constraint</STRONG></A>
+<DD>  If false, the edge is not used in ranking the nodes. For example,
+  in the graph
+  <PRE>
+  digraph G {
+    a -> c;
+    a -> b;
+    b -> c [constraint=false];
+  }
+  </PRE>
+  the edge <CODE>b -> c</CODE> does not add a constraint during rank
+  assignment, so the only constraints are that a be above b and c,
+  yielding the graph:<BR>
+  <IMG SRC="constraint.gif">
+
+<DT><A NAME=d:decorate HREF=#a:decorate><STRONG>decorate</STRONG></A>
+<DD>  If true, attach edge label to edge by a 2-segment
+  polyline, underlining the label, then going to the closest point of spline.
+
+<DT><A NAME=d:defaultdist HREF=#a:defaultdist><STRONG>defaultdist</STRONG></A>
+<DD>  This specifies the distance between nodes in separate connected
+  components. If set too small, connected components may overlap.
+  Only applicable if <A HREF=#d:pack>pack</A>=false.
+
+<DT><A NAME=d:dim HREF=#a:dim><STRONG>dim</STRONG></A>
+<DD>  Set the number of dimensions used for the layout. The maximum value
+  allowed is 10.
+
+<DT><A NAME=d:dimen HREF=#a:dimen><STRONG>dimen</STRONG></A>
+<DD>  Set the number of dimensions used for rendering. 
+  The maximum value allowed is 10.
+  If both <TT>dimen</TT> and <TT>dim</TT> are set, the latter specifies
+  the dimension used for layout, and the former for rendering.
+  If only <TT>dimen</TT> is set, this is used for both layout and rendering
+  dimensions.
+
+<DT><A NAME=d:dir HREF=#a:dir><STRONG>dir</STRONG></A>
+<DD>  Set edge type for drawing arrowheads. This indicates which ends of the
+  edge should be decorated with an arrowhead. The actual style of the
+  arrowhead can be specified using the <A HREF=#d:arrowhead>arrowhead</A>
+  and <A HREF=#d:arrowtail>arrowtail</A> attributes.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:diredgeconstraints HREF=#a:diredgeconstraints><STRONG>diredgeconstraints</STRONG></A>
+<DD>  Only valid when <A HREF=#d:mode>mode</A>="ipsep".
+  If true, constraints are generated for each edge in the largest (heuristic)
+  directed acyclic subgraph such that the edge must point downwards.
+  If "hier", generates level constraints similar to those used with
+  <A HREF=#d:mode>mode</A>="hier". The main difference is that, in the latter
+  case, only these constraints are involved, so a faster solver can be used.
+
+<DT><A NAME=d:distortion HREF=#a:distortion><STRONG>distortion</STRONG></A>
+<DD>  Distortion factor for <A HREF=#d:shape><B>shape</B></A>=polygon.
+  Positive values cause top part to
+  be larger than bottom; negative values do the opposite.
+
+<DT><A NAME=d:dpi HREF=#a:dpi><STRONG>dpi</STRONG></A>
+<DD>  This specifies the expected number of pixels per inch on a display device.
+  For bitmap output, this guarantees that text rendering will be
+  done more accurately, both in size and in placement. For SVG output,
+  it is used to guarantee that the dimensions in the output correspond to
+  the correct number of points or inches.
+
+<DT><A NAME=d:edgeURL HREF=#a:edgeURL><STRONG>edgeURL</STRONG></A>
+<DD>  If <B>edgeURL</B> is defined, this is the link used for the non-label
+  parts of an edge. This value overrides any <A HREF=#d:URL>URL</A>
+  defined for the edge.
+  Also, this value is used near the head or tail node unless overridden
+  by a <A HREF=#d:headURL>headURL</A> or <A HREF=#d:tailURL>tailURL</A> value,
+  respectively.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:edgehref HREF=#a:edgehref><STRONG>edgehref</STRONG></A>
+<DD>  Synonym for <A HREF=#d:edgeURL>edgeURL</A>.
+
+<DT><A NAME=d:edgetarget HREF=#a:edgetarget><STRONG>edgetarget</STRONG></A>
+<DD>  If the edge has a <A HREF=#d:URL>URL</A> or <A HREF=#d:edgeURL>edgeURL</A>
+  attribute, this attribute determines which window of the
+  browser is used
+  for the URL attached to the non-label part of the edge.
+  Setting it to "_graphviz" will open a new window if it
+  doesn't already exist, or reuse it if it does.
+  If undefined, the value of the <A HREF=#d:target>target</A> is used.
+
+<DT><A NAME=d:edgetooltip HREF=#a:edgetooltip><STRONG>edgetooltip</STRONG></A>
+<DD>  Tooltip annotation attached to the non-label part of an edge.
+  This is used only if the edge has a <A HREF=#d:URL>URL</A>
+  or <A HREF=#d:edgeURL>edgeURL</A> attribute.
+
+<DT><A NAME=d:epsilon HREF=#a:epsilon><STRONG>epsilon</STRONG></A>
+<DD>  Terminating condition. If the length squared of all energy gradients are
+  < <B>epsilon</B>, the algorithm stops.
+
+<DT><A NAME=d:esep HREF=#a:esep><STRONG>esep</STRONG></A>
+<DD>  Margin used around polygons for purposes of spline edge routing.
+  The interpretation is the same as given for <A HREF=#d:sep>sep</A>.
+  This should normally be strictly less than <A HREF=#d:sep>sep</A>.
+
+<DT><A NAME=d:fillcolor HREF=#a:fillcolor><STRONG>fillcolor</STRONG></A>
+<DD>  Color used to fill the background of a node or cluster
+  assuming <A HREF=#d:style>style</A>=filled.
+  If <B>fillcolor</B> is not defined, <A HREF=#d:color>color</A> is
+  used. (For clusters, if <B>color</B> is not defined,
+  <A HREF=#d:bgcolor>bgcolor</A> is used.) If this is not defined,
+  the default is used, except for
+  <A HREF=#d:shape><B>shape</B></A>=point or when the output
+  format is MIF,
+  which use black by default.
+  <P>
+  Note that a cluster inherits the root graph's attributes if defined.
+  Thus, if the root graph has defined a <B>fillcolor</B>, this will override a
+  <B>color</B> or <B>bgcolor</B> attribute set for the cluster.
+
+<DT><A NAME=d:fixedsize HREF=#a:fixedsize><STRONG>fixedsize</STRONG></A>
+<DD>  If true, the node size is specified by the values of the
+  <A HREF=#d:width><B>width</B></A>
+  and <A HREF=#d:height><B>height</B></A> attributes only
+  and is not expanded to contain the text label.
+
+<DT><A NAME=d:fontcolor HREF=#a:fontcolor><STRONG>fontcolor</STRONG></A>
+<DD>  Color used for text.
+
+<DT><A NAME=d:fontname HREF=#a:fontname><STRONG>fontname</STRONG></A>
+<DD>  Font used for text. This very much depends on the output format and, for
+  non-bitmap output such as PostScript or SVG, the availability of the font
+  when the graph is displayed or printed. As such, it is best to rely on
+  font faces that are generally available, such as Times-Roman, Helvetica or
+  Courier.
+  <P>
+  If Graphviz was built using the
+  <A HREF=http://pdx.freedesktop.org/~fontconfig/fontconfig-user.html>fontconfig library</A>, the latter library
+  will be used to search for the font. However, if the <TT>fontname</TT> string
+  contains a slash character "/", it is treated as a pathname for the font
+  file, though font lookup will append the usual font suffixes.
+  <P>
+  If Graphviz does not use fontconfig, <TT>fontname</TT> will be
+  considered the name of a Type 1 or True Type font file.
+  If you specify <TT>fontname=schlbk</TT>, the tool will look for a
+  file named  <TT>schlbk.ttf</TT> or <TT>schlbk.pfa</TT> or <TT>schlbk.pfb</TT>
+  in one of the directories specified by
+  the <A HREF=#d:fontpath>fontpath</A> attribute.
+  The lookup does support various aliases for the common fonts.
+
+<DT><A NAME=d:fontnames HREF=#a:fontnames><STRONG>fontnames</STRONG></A>
+<DD>  Allows user control of how basic fontnames are represented in SVG output.
+  If <TT>fontnames</TT> is undefined or <TT>"svg"</TT>,
+  the output will try to use known SVG fontnames. For example, the
+  default font  <TT>"Times-Roman"</TT> will be mapped to the
+  basic SVG font <TT>"serif"</TT>. This can be overridden by setting
+  <TT>fontnames</TT> to  <TT>"ps"</TT> or  <TT>"gd"</TT>.
+  In the former case, known PostScript font names such as
+  <TT>"Times-Roman"</TT> will be used in the output.
+  In the latter case, the fontconfig font conventions
+  are used. Thus, <TT>"Times-Roman"</TT> would be treated as
+  <TT>"Nimbus Roman No9 L"</TT>. These last two options are useful
+  with SVG viewers that support these richer fontname spaces.
+
+<DT><A NAME=d:fontpath HREF=#a:fontpath><STRONG>fontpath</STRONG></A>
+<DD>  Directory list used by libgd to search for bitmap fonts if Graphviz
+  was not built with the fontconfig library.
+  If <B>fontpath</B> is not set, the environment
+  variable <TT>DOTFONTPATH</TT> is checked.
+  If that is not set, <TT>GDFONTPATH</TT> is checked.
+  If not set, libgd uses its compiled-in font path.
+  Note that fontpath is an attribute of the root graph.
+
+<DT><A NAME=d:fontsize HREF=#a:fontsize><STRONG>fontsize</STRONG></A>
+<DD>  Font size, <A HREF=#points>in points</A>, used for text.
+
+<DT><A NAME=d:group HREF=#a:group><STRONG>group</STRONG></A>
+<DD>  If the end points of an edge belong to the same group, i.e., have the
+  same group attribute, parameters are set to avoid crossings and keep
+  the edges straight.
+
+<DT><A NAME=d:headURL HREF=#a:headURL><STRONG>headURL</STRONG></A>
+<DD>  If <B>headURL</B> is defined, it is
+  output as part of the head label of the edge.
+  Also, this value is used near the head node, overriding any
+  <A HREF=#d:URL>URL</A> value.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:headclip HREF=#a:headclip><STRONG>headclip</STRONG></A>
+<DD>  If true, the head of an edge is clipped to the boundary of the head node;
+  otherwise, the end of the edge goes to the center of the node, or the
+  center of a port, if applicable.
+
+<DT><A NAME=d:headhref HREF=#a:headhref><STRONG>headhref</STRONG></A>
+<DD>  Synonym for <A HREF=#d:headURL>headURL</A>.
+
+<DT><A NAME=d:headlabel HREF=#a:headlabel><STRONG>headlabel</STRONG></A>
+<DD>  Text label to be placed near head of edge.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:headport HREF=#a:headport><STRONG>headport</STRONG></A>
+<DD>  Indicates where on the head node to attach the head of the edge.
+  In the default case, the edge is aimed towards the center of the node,
+  and then clipped at the node boundary.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:headtarget HREF=#a:headtarget><STRONG>headtarget</STRONG></A>
+<DD>  If the edge has a <A HREF=#d:headURL>headURL</A>,
+  this attribute determines which window of the
+  browser is used
+  for the URL. Setting it to "_graphviz" will open a new window if it
+  doesn't already exist, or reuse it if it does.
+  If undefined, the value of the <A HREF=#d:target>target</A> is used.
+
+<DT><A NAME=d:headtooltip HREF=#a:headtooltip><STRONG>headtooltip</STRONG></A>
+<DD>  Tooltip annotation attached to the head of an edge. This is used only
+  if the edge has a <A HREF=#d:headURL>headURL</A> attribute.
+
+<DT><A NAME=d:height HREF=#a:height><STRONG>height</STRONG></A>
+<DD>  Height of node, in inches. This is taken as the initial, minimum height
+  of the node. If <A HREF=#d:fixedsize><B>fixedsize</B></A> is true, this
+  will be the final height of the node. Otherwise, if the node label
+  requires more height to fit, the node's height will be increased to
+  contain the label. Note also that, if the output format is dot, the
+  value given to <B>height</B> will be the final value.
+
+<DT><A NAME=d:href HREF=#a:href><STRONG>href</STRONG></A>
+<DD>  Synonym for <A HREF=#d:URL>URL</A>.
+
+<DT><A NAME=d:id HREF=#a:id><STRONG>id</STRONG></A>
+<DD>  Allows the graph author to provide an id for graph objects which is to be included in the output.
+  Normal "N", "E", "G" substitutions are applied.
+  If provided, it is the reponsiblity of the provider to keep
+  its values sufficiently unique for its intended downstream use.
+  Note, in particular, that "E" does not provide a unique id for multi-edges.
+  If no id attribute is provided, then a unique internal id is used, however this value is unpredictable by the graph writer.
+  An externally provided id is not used internally.
+
+<DT><A NAME=d:image HREF=#a:image><STRONG>image</STRONG></A>
+<DD>  Gives the name of a file containing an image to be displayed inside
+  a node. The image file must be in one of the recognized 
+  <A HREF=output.html#d:image_fmts>formats</A>,
+  typically JPEG, PNG, GIF or Postscript, and be able to be converted
+  into the desired output format.
+  <P>
+  Unlike with the <A HREF=#d:shapefile>shapefile</A> attribute,
+  the image is treated as node
+  content rather than the entire node. In particular, an image can
+  be contained in a node of any shape, not just a rectangle.
+
+<DT><A NAME=d:imagescale HREF=#a:imagescale><STRONG>imagescale</STRONG></A>
+<DD>  Attribute controlling how an image fills its
+  containing node. In general, the image is given its natural size,
+  (cf. <A HREF=#d:dpi>dpi</A>),
+  and the node size is made large enough to contain its image, its
+  label, its margin, and its peripheries.
+  Its width and height will also be at least as large as its
+  minimum <A HREF=#d:width>width</A> and <A HREF=#d:height>height</A>.
+  If, however, <TT>fixedsize=true</TT>,
+  the width and height attributes specify the exact size of the node.
+  <P>
+  During rendering, in the default case (<TT>imagescale=false</TT>),
+  the image retains its natural size.
+  If <TT>imagescale=true</TT>,
+  the image is uniformly scaled (i.e., its aspect ratio is
+  preserved) to fit inside the node.
+  At least one dimension of the image will be as large as possible
+  given the size of the node.
+  When <TT>imagescale=width</TT>,
+  the width of the image is scaled to fill the node width.
+  The corresponding property holds when <TT>imagescale=height</TT>.
+  When <TT>imagescale=both</TT>,
+  both the height and the width are scaled separately to fill the node.
+  <P>
+  In all cases, if a dimension of the image is larger than the
+  corresponding dimension of the node, that dimension of the
+  image is scaled down to fit the node. As with the case of
+  expansion, if  <TT>imagescale=true</TT>, width and height are
+  scaled uniformly.
+
+<DT><A NAME=d:label HREF=#a:label><STRONG>label</STRONG></A>
+<DD>  Text label attached to objects.
+  If a node's <A HREF=#d:shape>shape</A> is record, then the label can
+  have a <A HREF=shapes.html#record>special format</A>
+  which describes the record layout.
+
+<DT><A NAME=d:labelURL HREF=#a:labelURL><STRONG>labelURL</STRONG></A>
+<DD>  If <B>labelURL</B> is defined, this is the link used for the label
+  of an edge. This value overrides any <A HREF=#d:URL>URL</A>
+  defined for the edge.
+
+<DT><A NAME=d:labelangle HREF=#a:labelangle><STRONG>labelangle</STRONG></A>
+<DD>  This, along with <A HREF=#d:labeldistance>labeldistance</A>, determine
+  where the
+  headlabel (taillabel) are placed with respect to the head (tail)
+  in polar coordinates. The origin in the coordinate system is
+  the point where the edge touches the node. The ray of 0 degrees
+  goes from the origin back along the edge, parallel to the edge
+  at the origin.
+  <P>
+  The angle, in degrees, specifies the rotation from the 0 degree ray,
+  with positive angles moving counterclockwise and negative angles
+  moving clockwise.
+
+<DT><A NAME=d:labeldistance HREF=#a:labeldistance><STRONG>labeldistance</STRONG></A>
+<DD>  Multiplicative scaling factor adjusting the distance that
+  the headlabel(taillabel) is from the head(tail) node.
+  The default distance is 10 points. See <A HREF=#d:labelangle>labelangle</A>
+  for more details.
+
+<DT><A NAME=d:labelfloat HREF=#a:labelfloat><STRONG>labelfloat</STRONG></A>
+<DD>  If true, allows edge labels to be less constrained in position.
+  In particular, it may appear on top of other edges.
+
+<DT><A NAME=d:labelfontcolor HREF=#a:labelfontcolor><STRONG>labelfontcolor</STRONG></A>
+<DD>  Color used for headlabel and taillabel.
+  If not set, defaults to edge's fontcolor.
+
+<DT><A NAME=d:labelfontname HREF=#a:labelfontname><STRONG>labelfontname</STRONG></A>
+<DD>  Font used for headlabel and taillabel.
+  If not set, defaults to edge's fontname.
+
+<DT><A NAME=d:labelfontsize HREF=#a:labelfontsize><STRONG>labelfontsize</STRONG></A>
+<DD>  Font size, <A HREF=#points>in points</A>, used for headlabel and taillabel.
+  If not set, defaults to edge's fontsize.
+
+<DT><A NAME=d:labelhref HREF=#a:labelhref><STRONG>labelhref</STRONG></A>
+<DD>  Synonym for <A HREF=#d:labelURL>labelURL</A>.
+
+<DT><A NAME=d:labeljust HREF=#a:labeljust><STRONG>labeljust</STRONG></A>
+<DD>  Justification for cluster labels. If "r", the label
+  is right-justified within bounding rectangle; if "l", left-justified;
+  else the label is centered.
+  Note that a subgraph inherits attributes from its parent. Thus, if
+  the root graph sets <B>labeljust</B> to "l", the subgraph inherits
+  this value.
+
+<DT><A NAME=d:labelloc HREF=#a:labelloc><STRONG>labelloc</STRONG></A>
+<DD>  Top/bottom placement of graph and cluster labels.
+  If the attribute is "t", place label at the top;
+  if the attribute is "b", place label at the bottom.
+  By default, root
+  graph labels go on the bottom and cluster labels go on the top.
+  Note that a subgraph inherits attributes from its parent. Thus, if
+  the root graph sets <B>labelloc</B> to "b", the subgraph inherits
+  this value.
+
+<DT><A NAME=dd:labelloc HREF=#aa:labelloc><STRONG>labelloc</STRONG></A>
+<DD>  Vertical placement of node label. By default, if the height of a node
+  is larger than the height of its label, the label is vertically centered.
+  If <TT>labelloc</TT> is set to "t", "c", or "b", the label is aligned
+  with the top, centered, or aligned with the bottom of the node, respectively.
+
+<DT><A NAME=d:labeltarget HREF=#a:labeltarget><STRONG>labeltarget</STRONG></A>
+<DD>  If the edge has a <A HREF=#d:URL>URL</A> or <A HREF=#d:labelURL>labelURL</A>
+  attribute, this attribute determines which window of the
+  browser is used
+  for the URL attached to the label.
+  Setting it to "_graphviz" will open a new window if it
+  doesn't already exist, or reuse it if it does.
+  If undefined, the value of the <A HREF=#d:target>target</A> is used.
+
+<DT><A NAME=d:labeltooltip HREF=#a:labeltooltip><STRONG>labeltooltip</STRONG></A>
+<DD>  Tooltip annotation attached to label of an edge.
+  This is used only if the edge has a <A HREF=#d:URL>URL</A>
+  or <A HREF=#d:labelURL>labelURL</A> attribute.
+
+<DT><A NAME=d:landscape HREF=#a:landscape><STRONG>landscape</STRONG></A>
+<DD>  If true, the graph is rendered in landscape mode. Synonymous with
+  <A HREF=#d:rotate><TT>rotate=90</TT></A> or
+  <A HREF=#d:orientation><TT>orientation=landscape</TT></A>.
+
+<DT><A NAME=d:layer HREF=#a:layer><STRONG>layer</STRONG></A>
+<DD>  Specifies layers in which the node or edge is present.
+
+<DT><A NAME=d:layers HREF=#a:layers><STRONG>layers</STRONG></A>
+<DD>  Specifies a linearly ordered list of layer names attached to the graph
+  The graph is then output in separate layers. Only those components
+  belonging to the current output layer appear. For more information,
+  see the page <A HREF="http://www.graphviz.org/Documentation/html/layers/">How to use drawing layers (overlays)</A>.
+
+<DT><A NAME=d:layersep HREF=#a:layersep><STRONG>layersep</STRONG></A>
+<DD>  Specifies the separator characters used to split the
+  <A HREF=#d:layers>layers </A>attribute into a list of layer names.
+
+<DT><A NAME=d:layout HREF=#a:layout><STRONG>layout</STRONG></A>
+<DD>  Specifies the name of the layout algorithm to use, such as "dot"
+  or "neato". Normally, graphs should be kept independent of a type of
+  layout. In some cases, however, it can be convenient to embed the type
+  of layout desired within the graph. For example, a graph containing
+  position information from a layout might want to record what the
+  associated layout algorithm was.
+  <P>
+  This attribute takes precedence over 
+  the <A HREF=command.html#minusK>-K flag</A> 
+  or the actual command name used.
+
+<DT><A NAME=d:len HREF=#a:len><STRONG>len</STRONG></A>
+<DD>  Preferred edge length, in inches.
+
+<DT><A NAME=d:levels HREF=#a:levels><STRONG>levels</STRONG></A>
+<DD>  Number of levels allowed in the multilevel scheme.
+
+<DT><A NAME=d:levelsgap HREF=#a:levelsgap><STRONG>levelsgap</STRONG></A>
+<DD>  Specifies strictness of level constraints in neato
+  when <TT><A HREF=#d:mode>mode</A>="ipsep" or "hier"</TT>.
+  Larger positive values mean stricter constraints, which demand more
+  separation between levels. On the other hand, negative values will relax
+  the constraints by allowing some overlap between the levels.
+
+<DT><A NAME=d:lhead HREF=#a:lhead><STRONG>lhead</STRONG></A>
+<DD>  Logical head of an edge. When <A HREF=#d:compound><B>compound</B></A> is true,
+  if <B>lhead</B> is defined and is the name of a cluster containing
+  the real head,
+  the edge is clipped to the boundary of the cluster.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:lp HREF=#a:lp><STRONG>lp</STRONG></A>
+<DD>  Label position, <A HREF=#points>in points</A>.
+  The position indicates the center of the label.
+
+<DT><A NAME=d:ltail HREF=#a:ltail><STRONG>ltail</STRONG></A>
+<DD>  Logical tail of an edge. When <A HREF=#d:compound><B>compound</B></A> is true,
+  if <B>ltail</B> is defined and is the name of a cluster
+  containing the real tail,
+  the edge is clipped to the boundary of the cluster.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:margin HREF=#a:margin><STRONG>margin</STRONG></A>
+<DD>  For graphs, this sets x and y margins of canvas, in inches. If the margin
+  is a single double, both margins are set equal to the given value.
+  <P>
+  Note that the margin is not part of the drawing but just empty space
+  left around the drawing. It basically corresponds to a translation of
+  drawing, as would be necessary to center a drawing on a page. Nothing
+  is actually drawn in the margin. To actually extend the background of
+  a drawing, see the <A HREF=#d:pad>pad</A> attribute.
+  <P>
+  For nodes, this attribute specifies space left around the node's label.
+  By default, the value is <TT>0.11,0.055</TT>.
+
+<DT><A NAME=d:maxiter HREF=#a:maxiter><STRONG>maxiter</STRONG></A>
+<DD>  Sets the number of iterations used.
+
+<DT><A NAME=d:mclimit HREF=#a:mclimit><STRONG>mclimit</STRONG></A>
+<DD>  Multiplicative scale factor used to alter the MinQuit (default = 8)
+  and MaxIter (default = 24) parameters used during crossing
+  minimization. These correspond to the
+  number of tries without improvement before quitting and the
+  maximum number of iterations in each pass.
+
+<DT><A NAME=d:mindist HREF=#a:mindist><STRONG>mindist</STRONG></A>
+<DD>  Specifies the minimum separation between all nodes.
+
+<DT><A NAME=d:minlen HREF=#a:minlen><STRONG>minlen</STRONG></A>
+<DD>  Minimum edge length (rank difference between head and tail).
+
+<DT><A NAME=d:mode HREF=#a:mode><STRONG>mode</STRONG></A>
+<DD>  Technique for optimizing the layout. If <B>mode</B> is <TT>"major"</TT>,
+  neato uses stress majorization. If <B>mode</B> is <TT>"KK"</TT>,
+  neato uses a version of the gradient descent method. The only advantage
+  to the latter technique is that it is sometimes appreciably faster for
+  small (number of nodes < 100) graphs. A significant disadvantage is that
+  it may cycle.
+  <P>
+  There are two new, experimental modes in neato, "hier", which adds a top-down
+  directionality similar to the layout used in dot, and "ipsep", which
+  allows the graph to specify minimum vertical and horizontal distances
+  between nodes. (See the <A HREF=#d:sep>sep</A> attribute.)
+
+<DT><A NAME=d:model HREF=#a:model><STRONG>model</STRONG></A>
+<DD>  This value specifies how the distance matrix is computed for the input
+  graph. The distance matrix specifies the ideal distance between every
+  pair of nodes. neato attemps to find a layout which best achieves
+  these distances. By default, it uses the length of the shortest path,
+  where the length of each edge is given by its <A HREF=#d:len>len</A>
+  attribute. If <B>model</B> is <TT>"circuit"</TT>, neato uses the
+  circuit resistance
+  model to compute the distances. This tends to emphasize clusters. If
+  <B>model</B> is <TT>"subset"</TT>, neato uses the subset model. This sets the
+  edge length to be the number of nodes that are neighbors of exactly one
+  of the end points, and then calculates the shortest paths. This helps
+  to separate nodes with high degree.
+
+<DT><A NAME=d:mosek HREF=#a:mosek><STRONG>mosek</STRONG></A>
+<DD>  If Graphviz is built with MOSEK defined, mode=ipsep and mosek=true,
+  the Mosek software (www.mosek.com) is use to solve the ipsep constraints.
+
+<DT><A NAME=d:nodesep HREF=#a:nodesep><STRONG>nodesep</STRONG></A>
+<DD>  Minimum space between two adjacent nodes in the same rank, in inches.
+
+<DT><A NAME=d:nojustify HREF=#a:nojustify><STRONG>nojustify</STRONG></A>
+<DD>  By default, the justification of multi-line labels is done within the
+  largest context that makes sense. Thus, in the label of a polygonal
+  node, a left-justified line will align with the left side of the node
+  (shifted by the prescribed <A HREF=#d:margin>margin</A>).
+  In record nodes, left-justified
+  line will line up with the left side of the enclosing column of fields.
+  If <B>nojustify</B> is <TT>"true"</TT>, multi-line labels will be justified
+  in the context of itself. For example, if the attribute is set,
+  the first label line is long, and the second is shorter and left-justified,
+  the second will align with the left-most character in the first line,
+  regardless of  how large the node might be.
+
+<DT><A NAME=d:normalize HREF=#a:normalize><STRONG>normalize</STRONG></A>
+<DD>  If set, normalize coordinates of final
+  layout so that the first point is at the origin, and then rotate the
+  layout so that the first edge is horizontal.
+
+<DT><A NAME=d:nslimit HREF=#a:nslimit><STRONG>nslimit</STRONG></A>
+,<DT><A NAME=d:nslimit1 HREF=#a:nslimit1><STRONG>nslimit1</STRONG></A>
+<DD>  Used to set number of iterations in
+  network simplex applications. <B>nslimit</B> is used in
+  computing node x coordinates, <B>nslimit1</B> for ranking nodes.
+  If defined, # iterations =  <B>nslimit(1)</B> * # nodes;
+  otherwise,  # iterations = MAXINT.
+
+<DT><A NAME=d:ordering HREF=#a:ordering><STRONG>ordering</STRONG></A>
+<DD>  If "out" for a graph G, and n is a node in G, then edges n->* appear
+  left-to-right in the same order in which they are defined.
+  If "in", the edges *->n appear
+  left-to-right in the same order in which they are defined for all
+  nodes n.
+
+<DT><A NAME=d:orientation HREF=#a:orientation><STRONG>orientation</STRONG></A>
+<DD>  Angle, in degrees, used to rotate polygon node shapes. For any number of polygon sides, 0 degrees rotation results in a flat base.
+
+<DT><A NAME=dd:orientation HREF=#aa:orientation><STRONG>orientation</STRONG></A>
+<DD>  If "[lL]*", set graph orientation to landscape
+  Used only if <A HREF=#d:rotate><B>rotate</B></A> is not defined.
+
+<DT><A NAME=d:outputorder HREF=#a:outputorder><STRONG>outputorder</STRONG></A>
+<DD>  Specify order in which nodes and edges are drawn.
+
+<DT><A NAME=d:overlap HREF=#a:overlap><STRONG>overlap</STRONG></A>
+<DD>  Determines if and how node overlaps should be removed. Nodes are first
+  enlarged using the <A HREF=#d:sep><B>sep</B></A> attribute.
+  If "true" , overlaps are retained.
+  If the value is "scale", overlaps are removed by uniformly scaling in x and y.
+  If the value converts to "false", node overlaps are removed by a
+  Voronoi-based technique.
+  If the value is "scalexy", x and y are separately
+  scaled to remove overlaps.
+  <P>
+  If sfdp is available, one can set overlap to "prism" to use a 
+  proximity graph-based algorithm for overlap removal. 
+  This is the preferred technique,
+  though "scale" and "false" can work well with small graphs.
+  This technique starts with a
+  small scaling up, controlled by the 
+  <A HREF="#d:overlap_scaling"><TT>overlap_scaling</TT></A> attribute,
+  which can remove a significant portion of the overlap.
+  The prism option also accepts an optional non-negative integer suffix.
+  This can be used to control the number of attempts made at overlap
+  removal. By default, <TT>overlap="prism"</TT> is equivalent to
+  <TT>overlap="prism1000"</TT>. Setting <TT>overlap="prism0"</TT>
+  causes only the scaling phase to be run.
+  <P>
+  If the value is "compress", the layout will be scaled down as much as
+  possible without introducing any overlaps, obviously assuming there are
+  none to begin with.
+  <P>
+  <B>N.B.</B>The remaining allowed values of <TT>overlap</TT>
+  correspond to algorithms which, at present, can produce bad aspect ratios.
+  In addition, we deprecate the use of the "ortho*" and "portho*".
+  <P>
+  If the value is "vpsc", overlap removal is done as a
+  quadratic optimization to minimize node displacement while removing
+  node overlaps.
+  <P>
+  If the value is "orthoxy" or "orthoyx", overlaps
+  are moved by optimizing two constraint problems, one for the x axis and
+  one for the y. The suffix indicates which axis is processed first.
+  If the value is "ortho", the technique is similar to "orthoxy" except a
+  heuristic is used to reduce the bias between the two passes.
+  If the value is "ortho_yx", the technique is the same as "ortho", except
+  the roles of x and y are reversed.
+  The values "portho", "porthoxy", "porthoxy", and "portho_yx" are similar
+  to the previous four, except only pseudo-orthogonal ordering is
+  enforced.
+  <P>
+  If the layout is done by neato with <A HREF=#d:mode>mode</A>="ipsep",
+  then one can use <TT>overlap=ipsep</TT>.
+  In this case, the overlap removal constraints are
+  incorporated into the layout algorithm itself.
+  N.B. At present, this only supports one level of clustering.
+  <P>
+  Except for fdp and sfdp, the layouts assume <TT>overlap="true"</TT> as the default.
+  Fdp first uses a number of passes using built-in, force-directed technique
+  to remove overlaps. Thus, fdp accepts <B>overlap</B> with an integer
+  prefix followed by a colon, specifying the number of tries. If there is
+  no prefix, no initial tries will be performed. If there is nothing following
+  a colon, none of the above methods will be attempted. By default, fdp
+  uses <TT>overlap="9:portho"</TT>. Note that <TT>overlap="true"</TT>,
+  <TT>overlap="0:true"</TT> and <TT>overlap="0:"</TT> all turn off all overlap
+  removal.
+  <P>
+  By default, sfdp uses <TT>overlap="prism0"</TT>.
+  <P>
+  Except for the Voronoi and prism methods, all of these transforms preserve the
+  orthogonal ordering of the original layout. That is, if the x coordinates
+  of two nodes are originally the same, they will remain the same, and if
+  the x coordinate of one node is originally less than the x coordinate of
+  another, this relation will still hold in the transformed layout. The
+  similar properties hold for the y coordinates.
+  This is not quite true for the "porth*" cases. For these, orthogonal
+  ordering is only preserved among nodes related by an edge.
+
+<DT><A NAME=d:overlap_scaling HREF=#a:overlap_scaling><STRONG>overlap_scaling</STRONG></A>
+<DD>  When <TT>overlap=prism</TT>, the layout is scaled by this factor, thereby
+  removing a fair amount of node overlap, and making node overlap removal
+  faster and better able to retain the graph's shape.
+  <P>
+  If <TT>overlap_scaling</TT> is negative, the layout is scaled by
+  <TT>-1*overlap_scaling</TT> times the average label size.
+  If <TT>overlap_scaling</TT> is positive, the layout is scaled by
+  <TT>overlap_scaling</TT>.
+  If <TT>overlap_scaling</TT> is zero, no scaling is done.
+
+<DT><A NAME=d:pack HREF=#a:pack><STRONG>pack</STRONG></A>
+<DD>  This is true if the value of pack is "true" (case-insensitive) or a
+  non-negative integer. If true, each connected component of the graph is
+  laid out separately, and then the graphs are packed together.
+  If pack has an integral value, this is used as the size,
+  in <A HREF=#points>points</A>, of
+  a margin around each part; otherwise, a default margin of 8 is used.
+  If pack is interpreted as false, the entire graph is laid out together.
+  The granularity and method of packing is influenced by the
+  <A HREF=#d:packmode>packmode</A> attribute.
+  <P>
+  For layouts which always do packing, such a twopi, the <B>pack</B>
+  attribute is just used to set the margin.
+
+<DT><A NAME=d:packmode HREF=#a:packmode><STRONG>packmode</STRONG></A>
+<DD>  This indicates how connected components should be packed
+  (cf. <A HREF=#k:packMode>packMode</A>). Note that defining
+  <B>packmode</B> will automatically turn on packing as though one had
+  set <B>pack=true</B>.
+
+<DT><A NAME=d:pad HREF=#a:pad><STRONG>pad</STRONG></A>
+<DD>  The pad attribute specifies how much, in inches, to extend the
+  drawing area around the minimal area needed to draw the graph.
+  If the pad is a single double, both the x and y pad values are set
+  equal to the given value. This area is part of the
+  drawing and will be filled with the background color, if appropriate.
+  <P>
+  Normally, a small pad is used for aesthetic reasons, especially when
+  a background color is used, to avoid having nodes and edges abutting
+  the boundary of the drawn region.
+
+<DT><A NAME=d:page HREF=#a:page><STRONG>page</STRONG></A>
+<DD>  Width and height of output pages, in inches. If this is set and is
+  smaller than the size of the layout, a rectangular array of pages of
+  the specified page size is overlaid on the layout, with origins
+  aligned in the lower-left corner, thereby partitioning the layout
+  into pages. The pages are then produced one at a time, in
+  <A HREF=#d:pagedir>pagedir</A> order.
+  <P>
+  At present, this only works for PostScript output. For other types of
+  output, one should use another tool to split the output into multiple
+  output files. Or use the <A HREF=#d:viewport>viewport</A> to generate
+  multiple files.
+
+<DT><A NAME=d:pagedir HREF=#a:pagedir><STRONG>pagedir</STRONG></A>
+<DD>  If the <A HREF=#d:page>page</A> attribute is set and applicable,
+  this attribute specifies the order in which the pages are emitted.
+  This is limited to one of the 8 row or column major orders.
+
+<DT><A NAME=d:pencolor HREF=#a:pencolor><STRONG>pencolor</STRONG></A>
+<DD>  Color used to draw the bounding box around a cluster.
+  If <B>pencolor</B> is not defined, <A HREF=#d:color><B>color</B></A> is
+  used. If this is not defined, <A HREF=#d:bgcolor>bgcolor</A> is used.
+  If this is not defined, the default is used.
+  <P>
+  Note that a cluster inherits the root graph's attributes if defined.
+  Thus, if the root graph has defined a <B>pencolor</B>, this will override a
+  <B>color</B> or <B>bgcolor</B> attribute set for the cluster.
+
+<DT><A NAME=d:penwidth HREF=#a:penwidth><STRONG>penwidth</STRONG></A>
+<DD>  Specifies the width of the pen, in points, used to draw lines and curves,
+  including the boundaries of edges and clusters. The value is inherited
+  by subclusters.
+  It has no effect on text.
+  <P>
+  Previous to 31 January 2008, the effect of <TT>penwidth=<I>W</I></TT>
+  was achieved by including <TT>setlinewidth(<I>W</I>)</TT>
+  as part of a <A HREF=#d:style><TT>style</TT></A> specification.
+  If both are used, <TT>penwidth</TT> will be used.
+
+<DT><A NAME=d:peripheries HREF=#a:peripheries><STRONG>peripheries</STRONG></A>
+<DD>  Set number of peripheries used in polygonal shapes and cluster
+  boundaries. Note that
+  <A HREF=shapes.html#epsf>user-defined shapes</A> are treated as a
+  form of box shape, so the default
+  peripheries value is 1 and the user-defined shape will be drawn in
+  a bounding rectangle. Setting <TT>peripheries=0</TT> will turn this off.
+  Also, 1 is the maximum peripheries value for clusters.
+
+<DT><A NAME=d:pin HREF=#a:pin><STRONG>pin</STRONG></A>
+<DD>  If true and the node has a pos attribute on input, neato or fdp prevents the
+  node from moving from the input position. This property can also be specified
+  in the pos attribute itself (cf. the <A HREF=#d:point>point</A> type).
+  <P>
+  <B>Note:</B> Due to an artifact of the implementation, final coordinates
+  are translated to the origin. Thus, if you look at the output coordinates
+  given in the (x)dot or plain format, pinned nodes will not have the same
+  output coordinates as were given on input. If this is important, a
+  simple workaround is to maintain the coordinates of a pinned node. The vector
+  difference between the old and new coordinates will give the translation,
+  which can then be subtracted from all of the appropriate coordinates.
+
+<DT><A NAME=d:pos HREF=#a:pos><STRONG>pos</STRONG></A>
+<DD>  Position of node, or spline control points.
+  For nodes, the position indicates the center of the node.
+  On output, the coordinates are in <A HREF=#points>points</A>.
+  <P>
+  In neato and fdp, pos can be used to set the initial position of a node.
+  By default, the coordinates are assumed to be in inches. However, the
+  <A HREF=command.html#d:s>-s</A> command line flag can be used to specify
+  different units. As the output coordinates are in points, 
+  feeding the output of a graph laid out by a Graphviz program into
+  neato or fdp will almost always require the -s flag.
+  <P>
+  When the <A HREF=command.html#d:n>-n</A> command line flag is used with
+  neato, it is assumed the positions have been set by one of the layout
+  programs, and are therefore in points. Thus, <TT>neato -n</TT> can accept
+  input correctly without requiring a <TT>-s</TT> flag and, in fact,
+  ignores any such flag.
+
+<DT><A NAME=d:quadtree HREF=#a:quadtree><STRONG>quadtree</STRONG></A>
+<DD>  Quadtree scheme to use.
+  <P>
+  A TRUE bool value corresponds to "normal";
+  a FALSE bool value corresponds to "none".
+  As a slight exception to the normal interpretation of bool,
+  a value of "2" corresponds to "fast".
+
+<DT><A NAME=d:quantum HREF=#a:quantum><STRONG>quantum</STRONG></A>
+<DD>  If <B>quantum</B> > 0.0, node label dimensions
+  will be rounded to integral multiples of the quantum.
+
+<DT><A NAME=d:rank HREF=#a:rank><STRONG>rank</STRONG></A>
+<DD>  Rank constraints on the nodes in a subgraph.
+  If <B>rank</B>="same", all nodes are placed on the same rank.
+  If <B>rank</B>="min", all nodes are placed on the minimum rank.
+  If <B>rank</B>="source", all nodes are placed on the minimum rank, and
+  the only nodes on the minimum rank belong to some subgraph whose
+  rank attribute is "source" or "min".
+  Analogous criteria hold for <B>rank</B>="max" and <B>rank</B>="sink".
+  (Note: the
+  minimum rank is topmost or leftmost, and the maximum rank is bottommost
+  or rightmost.)
+
+<DT><A NAME=d:rankdir HREF=#a:rankdir><STRONG>rankdir</STRONG></A>
+<DD>  Sets direction of graph layout. For example, if <B>rankdir</B>="LR",
+  and barring cycles, an edge <CODE>T -> H;</CODE> will go
+  from left to right. By default, graphs are laid out from top to bottom.
+  <P>
+  This attribute also has a side-effect in determining how record nodes
+  are interpreted. See <A HREF="shapes.html#record">record shapes</A>.
+
+<DT><A NAME=d:ranksep HREF=#a:ranksep><STRONG>ranksep</STRONG></A>
+<DD>  In dot, this gives the desired rank separation, in inches. This is
+  the minimum vertical distance between the bottom of the nodes in one
+  rank and the tops of nodes in the next. If the value
+  contains "equally", the centers of all ranks are spaced equally apart.
+  Note that both
+  settings are possible, e.g., ranksep = "1.2 equally".
+  In twopi, specifies radial separation of concentric circles.
+
+<DT><A NAME=d:ratio HREF=#a:ratio><STRONG>ratio</STRONG></A>
+<DD>  Sets the aspect ratio (drawing height/drawing width) for the drawing.
+  Note that this is adjusted before
+  the <A HREF=#d:size><B>size</B></A> attribute constraints are enforced.
+  <P>
+  If <B>ratio</B> is numeric, it is taken as the desired aspect ratio.
+  Then, if the actual aspect ratio is less than the desired ratio,
+  the drawing height is scaled up to achieve the
+  desired ratio; if the actual ratio is greater than that desired ratio,
+  the drawing width is scaled up.
+  <P>
+  If <B>ratio</B> = "fill" and the <A HREF=#d:size><B>size</B></A>
+  attribute is set, node positions are scaled, separately in both x
+  and y, so that the final drawing exactly fills the specified size.
+  <P>
+  If <B>ratio</B> = "compress" and the <A HREF=#d:size><B>size</B></A>
+  attribute is set, dot attempts to compress the initial layout to fit
+  in the given size. This achieves a tighter packing of nodes but
+  reduces the balance and symmetry. This feature only works in dot.
+  <P>
+  If <B>ratio</B> = "expand", the <A HREF=#d:size><B>size</B></A>
+  attribute is set, and both the width and the height of the graph are
+  less than the value in  <A HREF=#d:size><B>size</B></A>, node positions are scaled
+  uniformly until at least
+  one dimension fits <A HREF=#d:size><B>size</B></A> exactly.
+  Note that this is distinct from using <A HREF=#d:size><B>size</B></A> as the
+  desired size, as here the drawing is expanded before edges are generated and
+  all node and text sizes remain unchanged.
+  <P>
+  If <B>ratio</B> = "auto", the <A HREF=#d:page><B>page</B></A>
+  attribute is set and the graph cannot be drawn on a single page,
+  then <A HREF=#d:size><B>size</B></A> is set to an ``ideal'' value.
+  In particular, the size in a given dimension will be the smallest integral
+  multiple of the page size in that dimension which is at least half the
+  current size. The two dimensions are then scaled independently to the
+  new size. This feature only works in dot.
+
+<DT><A NAME=d:rects HREF=#a:rects><STRONG>rects</STRONG></A>
+<DD>  Rectangles for fields of records, <A HREF=#points>in points</A>.
+
+<DT><A NAME=d:regular HREF=#a:regular><STRONG>regular</STRONG></A>
+<DD>  If true, force polygon to be regular.
+
+<DT><A NAME=d:remincross HREF=#a:remincross><STRONG>remincross</STRONG></A>
+<DD>  If true and there are multiple clusters, run cross
+  minimization a second time.
+
+<DT><A NAME=d:repulsiveforce HREF=#a:repulsiveforce><STRONG>repulsiveforce</STRONG></A>
+<DD>  The power of the repulsive force used in an extended Fruchterman-Reingold 
+  force directed model. Values larger than 1 tend to reduce 
+  the warping effect at the expense of less clustering.
+
+<DT><A NAME=d:resolution HREF=#a:resolution><STRONG>resolution</STRONG></A>
+<DD>  This is a synonym for the <A HREF=#d:dpi>dpi</A> attribute.
+
+<DT><A NAME=d:root HREF=#a:root><STRONG>root</STRONG></A>
+<DD>  This specifies nodes to be used as the center of the
+  layout and the root of the generated spanning tree. As a graph attribute,
+  this gives the name of the node. As a node attribute (circo only), it
+  specifies that the node should be used as a central node. In twopi,
+  this will actually be the central node. In circo, the block containing
+  the node will be central in the drawing of its connected component.
+  If not defined,
+  twopi will pick a most central node, and circo will pick a random node.
+
+<DT><A NAME=d:rotate HREF=#a:rotate><STRONG>rotate</STRONG></A>
+<DD>  If 90, set drawing orientation to landscape.
+
+<DT><A NAME=d:samehead HREF=#a:samehead><STRONG>samehead</STRONG></A>
+<DD>  Edges with the same head and the same <B>samehead</B> value are aimed
+  at the same point on the head.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:sametail HREF=#a:sametail><STRONG>sametail</STRONG></A>
+<DD>  Edges with the same tail and the same <B>sametail</B> value are aimed
+  at the same point on the tail.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:samplepoints HREF=#a:samplepoints><STRONG>samplepoints</STRONG></A>
+<DD>  If the input graph defines the <A HREF=#d:vertices><B>vertices</B></A>
+  attribute, and output is dot or xdot, this gives
+  the number of points used for a node whose shape is a circle or ellipse.
+  It plays the same role in neato, when adjusting the layout to avoid
+  overlapping nodes, and in image maps.
+
+<DT><A NAME=d:searchsize HREF=#a:searchsize><STRONG>searchsize</STRONG></A>
+<DD>  During network simplex, maximum number of edges with negative cut values
+  to search when looking for one with minimum cut value.
+
+<DT><A NAME=d:sep HREF=#a:sep><STRONG>sep</STRONG></A>
+<DD>  Specifies margin to leave around nodes when removing node overlap.
+  This guarantees a minimal non-zero distance between nodes.
+  <P>
+  If the attribute begins with a plus sign '+', an additive margin is
+  specified. That is, "+w,h" causes the node's bounding box to be increased 
+  by w
+  points on the left and right sides, and by h points on the top and bottom.
+  Without a plus sign, the node is scaled by 1 + w in the x coordinate
+  and 1 + h in the y coordinate.
+  <P>
+  If only a single number is given, this is used for both dimensions.
+  <P>
+  If unset but <A HREF=#d:esep>esep</A> is defined, the <tt>sep</tt> values
+  will be set to the <tt>esep</tt> values divided by <tt>0.8</tt>. 
+  If <tt>esep</tt> is unset, the default value is used.
+
+<DT><A NAME=d:shape HREF=#a:shape><STRONG>shape</STRONG></A>
+<DD>  Set the shape of a node.
+
+<DT><A NAME=d:shapefile HREF=#a:shapefile><STRONG>shapefile</STRONG></A>
+<DD>  (Deprecated) If defined, shapefile specifies a file containing user-supplied node content.
+  The <A HREF=#d:shape><B>shape</B></A> of the node is set to box.
+  The image in the shapefile must be
+  rectangular. The image formats supported as well as the precise semantics of
+  how the file is used depends on the
+  <A HREF="http://www.graphviz.org/doc/info/output.html">output format</A>.  For further details, see
+  <A HREF=output.html#d:image_fmts>Image Formats</A> and
+  <A HREF=http://www.graphviz.org/Documentation/html/shapehowto.html#ext_image>External PostScript files</A>.
+  <P>
+  There is one exception to this usage.
+  If <B>shape</B> is set to "epsf", shapefile gives
+  a filename containing a definition of the node in PostScript.
+  The graphics defined must be contain all of the
+  node content, including any desired boundaries.
+  For further details, see
+  <A HREF=http://www.graphviz.org/Documentation/html/shapehowto.html#ext_ps>
+  External PostScript files</A>.
+
+<DT><A NAME=d:showboxes HREF=#a:showboxes><STRONG>showboxes</STRONG></A>
+<DD>  Print guide boxes in PostScript at the beginning of
+  routesplines if 1, or at the end if 2. (Debugging)
+
+<DT><A NAME=d:sides HREF=#a:sides><STRONG>sides</STRONG></A>
+<DD>  Number of sides if <A HREF=#d:shape><B>shape</B></A>=polygon.
+
+<DT><A NAME=d:size HREF=#a:size><STRONG>size</STRONG></A>
+<DD>  Maximum width and height of drawing, in inches.
+  If defined and the drawing is too large, the drawing is uniformly
+  scaled down so that it fits within the given size.
+  <P>
+  If <TT>size</TT> ends in an exclamation point (<TT>!</TT>),
+  then it is taken to be
+  the desired size. In this case, if both dimensions of the drawing are
+  less than <TT>size</TT>, the drawing is scaled up uniformly until at
+  least one dimension equals its dimension in <TT>size</TT>.
+  <P>
+  Note that there is some interaction between the <B>size</B> and
+  <A HREF=#d:ratio><B>ratio</B></A> attributes.
+
+<DT><A NAME=d:skew HREF=#a:skew><STRONG>skew</STRONG></A>
+<DD>  Skew factor for <A HREF=#d:shape><B>shape</B></A>=polygon. Positive values
+  skew top of polygon to right; negative to left.
+
+<DT><A NAME=d:smoothing HREF=#a:smoothing><STRONG>smoothing</STRONG></A>
+<DD>  Specifies a post-processing step used to smooth out an uneven distribution 
+  of nodes.
+
+<DT><A NAME=d:sortv HREF=#a:sortv><STRONG>sortv</STRONG></A>
+<DD>  If <A HREF="#d:packmode">packmode</A> indicates an array packing, 
+  this attribute specifies an
+  insertion order among the components, with smaller values inserted first.
+
+<DT><A NAME=d:splines HREF=#a:splines><STRONG>splines</STRONG></A>
+<DD>  Controls how, and if, edges are represented. If true, edges are drawn as
+  splines routed around nodes; if false, edges are drawn as line segments.
+  If set to "", no edges are drawn at all.
+  <P>
+  (1 March 2007) The values <TT>line</TT> and <TT>spline</TT> can be
+  used as synonyms for <TT>false</TT> and <TT>true</TT>, respectively.
+  In addition, the value <TT>polyline</TT> specifies that edges should be
+  drawn as polylines.
+  <P>
+  By default, the attribute is unset. How this is interpreted depends on
+  the layout. For dot, the default is to draw edges as splines. For all
+  other layouts, the default is to draw edges as line segments. Note that
+  for these latter layouts, if <TT>splines="true"</TT>, this
+  requires non-overlapping nodes (cf. <A HREF=#d:overlap><B>overlap</B></A>).
+  If fdp is used for layout and <TT>splines="compound"</TT>, then the edges are
+  drawn to avoid clusters as well as nodes.
+
+<DT><A NAME=d:start HREF=#a:start><STRONG>start</STRONG></A>
+<DD>  Parameter used to determine the initial layout of nodes. If unset, the
+  nodes are randomly placed in a unit square with
+  the same seed is always used for the random number generator, so the
+  initial placement is repeatable.
+
+<DT><A NAME=d:style HREF=#a:style><STRONG>style</STRONG></A>
+<DD>  Set style for node or edge. For cluster subgraph, if "filled", the
+  cluster box's background is filled.
+
+<DT><A NAME=d:stylesheet HREF=#a:stylesheet><STRONG>stylesheet</STRONG></A>
+<DD>  A URL or pathname specifying an XML style sheet, used in SVG output.
+
+<DT><A NAME=d:tailURL HREF=#a:tailURL><STRONG>tailURL</STRONG></A>
+<DD>  If <B>tailURL</B> is defined, it is
+  output as part of the tail label of the edge.
+  Also, this value is used near the tail node, overriding any
+  <A HREF=#d:URL>URL</A> value.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:tailclip HREF=#a:tailclip><STRONG>tailclip</STRONG></A>
+<DD>  If true, the tail of an edge is clipped to the boundary of the tail node;
+  otherwise, the end of the edge goes to the center of the node, or the
+  center of a port, if applicable.
+
+<DT><A NAME=d:tailhref HREF=#a:tailhref><STRONG>tailhref</STRONG></A>
+<DD>  Synonym for <A HREF=#d:tailURL>tailURL</A>.
+
+<DT><A NAME=d:taillabel HREF=#a:taillabel><STRONG>taillabel</STRONG></A>
+<DD>  Text label to be placed near tail of edge.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:tailport HREF=#a:tailport><STRONG>tailport</STRONG></A>
+<DD>  Indicates where on the tail node to attach the tail of the edge.
+  See <A HREF=#h:undir_note>limitation</A>.
+
+<DT><A NAME=d:tailtarget HREF=#a:tailtarget><STRONG>tailtarget</STRONG></A>
+<DD>  If the edge has a <A HREF=#d:tailURL>tailURL</A>,
+  this attribute determines which window of the
+  browser is used
+  for the URL. Setting it to "_graphviz" will open a new window if it
+  doesn't already exist, or reuse it if it does.
+  If undefined, the value of the <A HREF=#d:target>target</A> is used.
+
+<DT><A NAME=d:tailtooltip HREF=#a:tailtooltip><STRONG>tailtooltip</STRONG></A>
+<DD>  Tooltip annotation attached to the tail of an edge. This is used only
+  if the edge has a <A HREF=#d:tailURL>tailURL</A> attribute.
+
+<DT><A NAME=d:target HREF=#a:target><STRONG>target</STRONG></A>
+<DD>  If the object has a URL, this attribute determines which window
+  of the browser is used for the URL.
+  See <A HREF="http://www.w3.org/TR/html401/present/frames.html#adef-target">W3C documentation</A>.
+
+<DT><A NAME=d:tooltip HREF=#a:tooltip><STRONG>tooltip</STRONG></A>
+<DD>  Tooltip annotation attached to the node or edge. If unset, Graphviz
+  will use the object's <A HREF=#d:label>label</A> if defined.
+  Note that if the label is a record specification or an HTML-like
+  label, the resulting tooltip may be unhelpful. In this case, if
+  tooltips will be generated, the user should set a <TT>tooltip</TT>
+  attribute explicitly.
+
+<DT><A NAME=d:truecolor HREF=#a:truecolor><STRONG>truecolor</STRONG></A>
+<DD>  If set explicitly to true or false, the value determines whether or not
+  internal bitmap rendering relies on a truecolor color model or uses
+  a color palette.
+  If the attribute is unset, truecolor is not used
+  unless there is a <A HREF=#d:shapefile>shapefile</A> property
+  for some node in the graph.
+  The output model will use the input model when possible.
+  <P>
+  Use of color palettes results in less memory usage during creation of the
+  bitmaps and smaller output files.
+  <P>
+  Usually, the only time it is necessary to specify the truetype model
+  is if the graph uses more than 256 colors.
+  However, if one uses <A HREF=#d:bgcolor>bgcolor</A>=transparent with
+  a color palette, font
+  antialiasing can show up as a fuzzy white area around characters.
+  Using <B>truecolor</B>=true avoids this problem.
+
+<DT><A NAME=d:vertices HREF=#a:vertices><STRONG>vertices</STRONG></A>
+<DD>  If the input graph defines this attribute, the node is polygonal,
+  and output is dot or xdot, this attribute provides the
+  coordinates of the vertices of the node's polygon, in inches.
+  If the node is an ellipse or circle, the
+  <A HREF=#d:samplepoints>samplepoints</A> attribute affects
+  the output.
+
+<DT><A NAME=d:viewport HREF=#a:viewport><STRONG>viewport</STRONG></A>
+<DD>  Clipping window on final drawing.
+
+<DT><A NAME=d:voro_margin HREF=#a:voro_margin><STRONG>voro_margin</STRONG></A>
+<DD>  Factor to scale up drawing to allow margin for expansion in
+  Voronoi technique. dim' = (1+2*margin)*dim.
+
+<DT><A NAME=d:weight HREF=#a:weight><STRONG>weight</STRONG></A>
+<DD>  Weight of edge. In dot, the heavier the weight, the shorter,
+  straighter and more vertical the edge is.
+
+<DT><A NAME=d:width HREF=#a:width><STRONG>width</STRONG></A>
+<DD>  Width of node, in inches. This is taken as the initial, minimum width
+  of the node. If <A HREF=#d:fixedsize><B>fixedsize</B></A> is true, this
+  will be the final width of the node. Otherwise, if the node label
+  requires more width to fit, the node's width will be increased to
+  contain the label. Note also that, if the output format is dot, the
+  value given to <B>width</B> will be the final value.
+
+<DT><A NAME=d:z HREF=#a:z><STRONG>z</STRONG></A>
+<DD>  <B>Deprecated:</B>Use <A HREF=#d:pos><B>pos</B></A> attribute, along
+  with <A HREF=#d:dimen><B>dimen</B></A> and/or <A HREF=#d:dim><B>dim</B></A>
+  to specify dimensions.
+  <P>
+  Provides z coordinate value for 3D layouts and displays. If the
+  graph has <A HREF=#d:dim><B>dim</B></A> set to 3 (or more),
+  neato will use a node's <B>z</B> value
+  for the z coordinate of its initial position if
+  its <A HREF=#d:pos><B>pos</B></A> attribute is also defined.
+  <P>
+  Even if no <B>z</B> values are specified in the input, it is necessary to
+  declare a <B>z</B> attribute for nodes, e.g, using <TT>node[z=""]</TT>
+  in order to get z values on output.
+  Thus, setting <TT>dim=3</TT> but not declaring <B>z</B> will
+  cause <TT>neato -Tvrml</TT> to
+  layout the graph in 3D but project the layout onto the xy-plane
+  for the rendering. If the <B>z</B> attribute is declared, the final rendering
+  will be in 3D.
+
+</DL>
+<HR>
+<H1>Attribute Type Descriptions</H1>
+The following list gives the legal strings corresponding to values of
+the given types.
+<DL>
+<DT><A NAME=k:arrowType><STRONG>arrowType</STRONG></A>
+<DD><TABLE>
+    <TR><TD>"normal"<TD><IMG SRC="a_normal.gif">
+        <TD>"inv"<TD><IMG SRC="a_inv.gif"></TR>
+    <TR><TD>"dot"<TD><IMG SRC="a_dot.gif">
+        <TD>"invdot"<TD><IMG SRC="a_invdot.gif"></TR>
+    <TR><TD>"odot"<TD><IMG SRC="a_odot.gif">
+        <TD>"invodot"<TD><IMG SRC="a_invodot.gif"></TR>
+    <TR><TD>"none"<TD><IMG SRC="a_none.gif">
+        <TD>"tee"<TD><IMG SRC="a_tee.gif"></TR>
+    <TR><TD>"empty"<TD><IMG SRC="a_empty.gif">
+        <TD>"invempty"<TD><IMG SRC="a_invempty.gif"></TR>
+    <TR><TD>"diamond"<TD><IMG SRC="a_diamond.gif">
+        <TD>"odiamond"<TD><IMG SRC="a_odiamond.gif"></TR>
+    <TR><TD>"ediamond"<TD><IMG SRC="a_ediamond.gif">
+        <TD>"crow"<TD><IMG SRC="a_crow.gif"></TR>
+    <TR><TD>"box"<TD><IMG SRC="a_box.gif">
+        <TD>"obox"<TD><IMG SRC="a_obox.gif"></TR>
+    <TR><TD>"open"<TD><IMG SRC="a_open.gif">
+        <TD>"halfopen"<TD><IMG SRC="a_halfopen.gif"></TR>
+    <TR><TD>"vee"<TD><IMG SRC="a_open.gif">
+  </TABLE>
+  <P>
+  These are the basic set of backward-compatible arrow shapes. In addition,
+  there is a grammar of <A HREF=arrows.html>arrow shapes</A>
+  which can be used to describe a collection of 1,544,761 arrow combinations of the 36 varations of the primitive set of 9 arrows. The basic arrows shown
+  above contain all of the primitive shapes
+  (<TT>box</TT>, <TT>crow</TT>, <TT>diamond</TT>,
+  <TT>dot</TT>, <TT>inv</TT>, <TT>none</tt>,
+  <TT>normal</tt>, <TT>tee</TT>, <TT>vee</TT>)
+  plus ones that can be derived from the grammar
+  (<TT>odot</TT>, <TT>invdot</TT>, <TT>invodot</TT>,
+  <TT>obox</TT>, <TT>odiamond</TT>)
+  plus some supported as special cases for backward-compatibility
+  (<TT>ediamond</TT>, <TT>open</TT>, <TT>halfopen</TT>,
+  <TT>empty</TT>, <TT>invempty</TT>).
+
+<DT><A NAME=k:aspectType><STRONG>aspectType</STRONG></A>
+<DD><p>An aspect ratio, double, followed optionally by a ',' and a maximum pass 
+  count. If the aspect ratio is given, but no maximum pass count, the
+  latter defaults to 5.
+
+<DT><A NAME=k:clusterMode><STRONG>clusterMode</STRONG></A>
+<DD>"local","global","none"
+
+<DT><A NAME=k:color><STRONG>color</STRONG></A>
+<DD>Colors can be specified using one of four formats.
+         <TABLE><TR><TD>"#%2x%2x%2x"<TD>Red-Green-Blue (RGB)</TR>
+         <TR><TD>"#%2x%2x%2x%2x"<TD>Red-Green-Blue-Alpha (RGBA)</TR>
+         <TR><TD>H[,&#160;]+S[,&#160;]+V<TD>Hue-Saturation-Value (HSV) 0.0 <= H,S,V <= 1.0</TR>
+         <TR><TD>string<TD><A HREF=colors.html>color name</A></TR></TABLE>
+   The specification for the RGB and RGBA formats are the format strings used by
+   <TT>sscanf</TT> to scan the color value. Thus, these values have the form
+   "#RGB" or "#RGBA", where R, G, B, and A each consist of 2 hexidecimal
+   digits, and can be separated by whitespace. HSV colors have the form of 3
+   numbers between 0 and 1, separated by whitespace or commas.
+  <P>
+  String-valued color specifications are case-insensitive and interpreted
+  in the context of the current color scheme, as specified by the
+  <A HREF=#d:colorscheme>colorscheme</A> attribute. If this is undefined,
+  the X11 naming scheme will be used.
+  An initial <TT>"/"</TT> character can be used to override the use of
+  the <TT>colorscheme</TT> attribute. In particular, a single initial
+  <TT>"/"</TT> will cause the string to be evaluated using the default
+  X11 naming. If the color value has the form <TT>"/ssss/yyyy"</TT>,
+  the name <TT>yyyy</TT> is interpreted using the schema <TT>ssss</TT>.
+  If the color scheme name is empty, i.e., the color has the
+  form <TT>"//yyyy"</TT>, the <TT>colorscheme</TT> attribute is used.
+  Thus, the forms <TT>"yyyy"</TT> and <TT>"//yyyy"</TT> are
+  equivalent.
+  <P>At present, Graphviz recognizes the default color scheme <TT>X11</TT>,
+  and the <A HREF="http://www.personal.psu.edu/faculty/c/a/cab38/ColorBrewer/ColorBrewer_intro.html">Brewer color schemes</A>. Please note that Brewer
+  color schemes are covered by this <A HREF=colors.html#brewer_license>license</A>.
+  <P>
+  Examples:<BR>
+    <TABLE border=1>
+      <TR><TH>Color<TH>RGB<TH>HSV<TH>String</TR>
+      <TR><TD align=center bgcolor=#ffffff>White<TD>"#ffffff"<TD>"0.000 0.000 1.000"<TD>"white"</TR>
+      <TR><TD align=center bgcolor=#000000><font color=white>Black</font><TD>"#000000"<TD>"0.000 0.000 0.000"<TD>"black"</TR>
+      <TR><TD align=center bgcolor=#ff0000>Red<TD>"#ff0000"<TD>"0.000 1.000 1.000"<TD>"red"</TR>
+      <TR><TD align=center bgcolor=#40e0d0>Turquoise<TD>"#40e0d0"<TD>"0.482 0.714 0.878"<TD>"turquoise"</TR>
+      <TR><TD align=center bgcolor=#a0522d>Sienna<TD>"#a0522d"<TD>"0.051 0.718 0.627"<TD>"sienna"</TR>
+    </TABLE>
+  <P>
+   Note that some output formats, e.g., <A HREF="output.html#a:mif">mif</A>,
+   only support a limited number of specific colors.
+  <P>
+   The string value <TT>transparent</TT> can be used to indicate no color.
+   This is only available in the output formats
+   ps, svg, fig, vmrl, and the bitmap formats. It can be used whenever a
+   color is needed but is most useful with
+   the <A HREF=#d:bgcolor>bgcolor</A> attribute.
+   Usually, the same effect can be achieved by setting
+   <A HREF=#d:style>style</A> to <TT>invis</TT>.
+
+<DT><A NAME=k:colorList><STRONG>colorList</STRONG></A>
+<DD>A colon-separated list of color values: <I>C</I>(:<I>C</I>)*
+   where each <I>C</I> is a <A HREF=#k:color>color</A> value.
+
+<DT><A NAME=k:dirType><STRONG>dirType</STRONG></A>
+<DD>For an edge <CODE>T -> H;</CODE>
+    <TABLE>
+    <TR><TD>"forward"<TD><IMG SRC="forward.gif">
+        <TD>"back"<TD><IMG SRC="back.gif"></TR>
+    <TR><TD>"both"<TD><IMG SRC="both.gif">
+        <TD>"none"<TD><IMG SRC="nohead.gif"></TR>
+    </TABLE>
+  For undirected edges <CODE>T -- H;</CODE>, one of the nodes, usually
+  the righthand one, is treated as the head for the purpose of
+  interpreting "forward" and "back".
+
+<DT><A NAME=k:escString><STRONG>escString</STRONG></A>
+<DD>string allowing escape sequences which are replaced according
+  to the context.
+  For node attributes, the substring "\N" is replaced by the name of the node,
+  and the substring "\G" by the name of the graph.
+  For graph or cluster attributes, the substring "\G" is replaced by the
+  name of the graph or cluster.
+  For edge attributes, the substring "\E" is replaced by the name of the edge,
+  the substring "\G" is replaced by the name of the graph or cluster,
+  and the substrings "\T" and "\H" by the names of
+  the tail and head nodes, respectively.
+  The name of an edge is the string formed from the name of the
+  tail node, the appropriate edge operator ("--" or "->") and the name of the
+  head node.
+  In all cases, the substring "\L" is replaced by the object's label attribute.
+  <P>
+  In addition, if the associated attribute is
+  <A HREF=#a:label>label</A>,
+  <A HREF=#a:headlabel>headlabel</A> or <A HREF=#a:taillabel>taillabel</A>,
+  the escape sequences "\n", "\l" and "\r"
+  divide the label into lines, centered, left-justified, and right-justified,
+  respectively.
+
+<DT><A NAME=k:layerList><STRONG>layerList</STRONG></A>
+<DD>list of strings separated by characters from the
+  <A HREF=#a:layersep>layersep</A> attribute (by default, colons,
+  tabs or spaces), defining <A HREF=#a:layer>layer</A>
+  names and implicitly numbered 1,2,...
+
+<DT><A NAME=k:layerRange><STRONG>layerRange</STRONG></A>
+<DD>layerId or layerId<B>s</B>layerId,<BR> where layerId = "all",
+  a decimal integer or a <A HREF=#a:layer>layer</A> name.
+  (An integer i corresponds to layer i.)
+  The string <B>s</B> consists of 1 or more separator characters specified
+  by the <A HREF=#a:layersep>layersep</A> attribute.
+
+<DT><A NAME=k:lblString><STRONG>lblString</STRONG></A>
+<DD>an <A HREF=#k:escString>escString</A>
+  or an <A HREF=shapes.html#html>HTML label</A>.
+
+<DT><A NAME=k:outputMode><STRONG>outputMode</STRONG></A>
+<DD>"breadthfirst","nodesfirst","edgesfirst"
+  These specify the order in which nodes and edges are drawn in concrete
+  output. The default "breadthfirst" is the simplest, but when the graph
+  layout does not avoid edge-node overlap, this mode will sometimes have
+  edges drawn over nodes and sometimes on top of nodes. If the mode
+  "nodesfirst" is chosen, all nodes are drawn first, followed by the
+  edges. This guarantees an edge-node overlap will not be mistaken for
+  an edge ending at a node. On the other hand, usually for aesthetic
+  reasons, it may be desirable that all edges appear beneath nodes, even
+  if the resulting drawing is ambiguous. This can be achieved by choosing
+  "edgesfirst".
+
+<DT><A NAME=k:packMode><STRONG>packMode</STRONG></A>
+<DD>"node", "clust" , "graph" , "array[_flags][%d]"
+  <P>
+  The modes "node", "clust" or "graph"
+  specify that the components should be packed together tightly, using
+  the specified granularity.
+  A value of "node" causes
+  packing at the node and edge level, with no overlapping of these objects.
+  This produces a layout with the least area, but it also allows interleaving,
+  where a node of one component may lie between two nodes in another
+  component. A value of "graph" does a packing using the bounding box of the
+  component. Thus, there will be a rectangular region around a component
+  free of elements of any other component.
+  A value of "clust" guarantees that top-level clusters are kept intact.
+  What effect a value has also depends on the layout algorithm. For
+  example, neato does not support clusters, so a value of "clust" will
+  have the same effect as the default "node" value.
+  <P>
+  The mode "array[_flags][%d]"
+  indicates that the components should be packed at the 
+  graph level into an array of graphs. By default, the components
+  are in row-major order, with the number of columns roughly the
+  square root of the number of components. If the optional flags
+  contains "c", then column-major order is used. Finally, if the
+  optional integer suffix is used, this specifies the number of 
+  columns for row-major or the number of rows for column-major.
+  Thus, the mode "array_c4" indicates array packing, with 4 rows,
+  starting in the upper left and going down the first column, then
+  down the second column, etc., until all components are used.
+  <P>
+  If the optional flags contains "u", this causes the insertion
+  order of elements in the array to be determined by user-supplied
+  values. Each component can specify its sort value by a 
+  non-negative integer using the <A HREF="#d:sortv">sortv</A> attribute. 
+  Components are
+  inserted in order, starting with the one with the smallest
+  sort value. If no sort value is specified, zero is used.
+
+<DT><A NAME=k:pagedir><STRONG>pagedir</STRONG></A>
+<DD>"BL", "BR", "TL", "TR", "RB", "RT", "LB", "LT".
+  These specify the 8 row or column major orders for traversing a
+  rectangular array, the first character corresponding to the major
+  order and the second to the minor order. Thus, for "BL", the
+  major order is from bottom to top, and the minor order is from left
+  to right. This means the bottom row is traversed first, from left
+  to right, then the next row up, from left to right, and so on,
+  until the topmost row is traversed.
+
+<DT><A NAME=k:point><STRONG>point</STRONG></A>
+<DD>"%f,%f"('!') representing the point (x,y). The
+  optional '!' indicates the
+  node position should not change (input-only).
+  <P>
+  If <A HREF=#d:dim>dim</A> is 3 or more, <B>point</B> may also have
+  the format "%f,%f,%f"('!') to represent the point (x,y,z).
+
+<DT><A NAME=k:pointf><STRONG>pointf</STRONG></A>
+<DD>"%lf,%lf" representing the point (x,y).
+
+<DT><A NAME=k:pointfList><STRONG>pointfList</STRONG></A>
+<DD>list of pointf, separated by spaces.
+
+<DT><A NAME=k:portPos><STRONG>portPos</STRONG></A>
+<DD>modifier indicating where on a node an edge should be aimed.
+  It has the form <TT><I>portname</I>[:<I>compass_point</I>]</TT>
+  or <TT><I>compass_point</I></TT>.
+  If the first form is used, the corresponding node must either have
+  <A HREF=shapes.html#record>record</A> shape with one of its fields
+  having the given <I>portname</I>,
+  or have an <A HREF=shapes.html#html>HTML-like label</A>, one of
+  whose components has a <TT>PORT</TT> attribute set to <I>portname</I>.
+  <P>
+  If a compass point is used, it must have the form
+  <TT>"n","ne","e","se","s","sw","w","nw","c","_"</TT>. This modifies the edge
+  placement to aim for the corresponding compass point on the port or,
+  in the second form where no <I>portname</I> is supplied, on the node
+  itself. The compass point "c" specifies the center of the node or port.
+  The compass point "_" specifies that an appropriate side of the port
+  adjacent to the exterior of the node should be used, if such exists.
+  Otherwise, the center is used.
+  If no compass point is used with a portname, the default value is "_".
+  <P>
+  <P>
+  This attribute can be attached to an edge using the
+  <A HREF=#k:headport>headport</A> and
+  <A HREF=#k:tailport>tailport</A> attributes, or as part of the
+  edge description as in
+  <CENTER>
+  <TT>node1:port1 -> node2:port5:nw;</TT>
+  </CENTER>
+  <P>
+  Note that it is legal to have a portname the same as one of
+  the compass points. In this case, this reference will be resolved to
+  the port. Thus, if node <TT>A</TT> has a port <TT>w</TT>, then
+  <TT>headport=w</TT> will refer to the port and not the compass point.
+  At present, in this case, there is no way to specify that the compass
+  point should be used.
+
+<DT><A NAME=k:quadType><STRONG>quadType</STRONG></A>
+<DD>"normal", "fast", "none". 
+  <P>
+  Using "fast" gives about a 2-4 times overall speedup compared with "normal", 
+  though layout quality can suffer a little. 
+
+<DT><A NAME=k:rankType><STRONG>rankType</STRONG></A>
+<DD>"same", "min", "source", "max", "sink"
+
+<DT><A NAME=k:rankdir><STRONG>rankdir</STRONG></A>
+<DD>"TB", "LR", "BT", "RL", corresponding to directed graphs drawn
+  from top to bottom, from left to right, from bottom to top, and from
+  right to left, respectively.
+
+<DT><A NAME=k:rect><STRONG>rect</STRONG></A>
+<DD>"%f,%f,%f,%f"  The rectangle llx,lly,urx,ury gives the coordinates, in
+   points, of the lower-left corner (llx,lly) and the upper-right corner
+   (urx,ury).
+
+<DT><A NAME=k:shape><STRONG>shape</STRONG></A>
+<DD>A string specifying the <A HREF=shapes.html>shape</A> of a node.
+  There are three
+  main types of shapes :
+  <A HREF=shapes.html#polygon>polygon-based</A>,
+  <A HREF=shapes.html#record>record-based</A> and
+  <A HREF=shapes.html#epsf>user-defined</A>.
+
+<DT><A NAME=k:smoothType><STRONG>smoothType</STRONG></A>
+<DD>Values are "none", "avg_dist", "graph_dist", "power_dist", "rng", 
+  "spring" and "triangle".
+
+<DT><A NAME=k:splineType><STRONG>splineType</STRONG></A>
+<DD>spline ( ';' spline )*<BR>
+  <TABLE>
+   <TR><TD ALIGN=right>where spline<TD>=<TD>(endp)? (startp)? point (triple)+</TR>
+   <TR><TD ALIGN=right>and triple<TD>=<TD>point point point</TR>
+   <TR><TD ALIGN=right>and endp<TD>=<TD>"e,%f,%f"</TR>
+   <TR><TD ALIGN=right>and startp<TD>=<TD>"s,%f,%f"</TR>
+  </TABLE>
+  If a spline has points p<SUB>1</SUB> p<SUB>2</SUB> p<SUB>3</SUB> ... p<SUB>n</SUB>, (n = 1 (mod 3)), the points
+   correspond to the control points of a B-spline from p<SUB>1</SUB> to p<SUB>n</SUB>. If startp
+   is given, it touches one node of the edge, and the arrowhead
+   goes from p<SUB>1</SUB> to startp. If startp is not given, p<SUB>1</SUB> touches a node.
+   Similarly for p<SUB>n</SUB>  and endp.
+
+<DT><A NAME=k:startType><STRONG>startType</STRONG></A>
+<DD>has the syntax <TT>[<I>style</I>][<I>seed</I>]</TT>.
+  <P>
+  If <I>style</I> is present, it must be one of the strings <TT>"regular"</TT>,
+  <TT>"self"</TT>, or <TT>"random"</TT>. In the first case, the nodes are
+  placed regularly about a circle. In the second case,
+  an abbreviated version of neato is run to obtain the initial layout.
+  In the last case, the nodes are placed randomly in a unit square.
+  <P>
+  If <I>seed</I> is present, it specifies a seed for the random number
+  generator. If <I>seed</I> is a positive number, this is used as the
+  seed. If it is anything else,
+  the current time, and possibly the process id, is used to pick a seed,
+  thereby making the choice more random. In this case, the seed value
+  is stored in the graph.
+  <P>
+  If the value is just <TT>"random"</TT>, a time-based seed is chosen.
+  <P>
+  Note that input positions, specified by a node's
+  <A HREF=#d:pos>pos</A>
+  attribute, are only used when the style is <TT>"random"</TT>.
+
+<DT><A NAME=k:style><STRONG>style</STRONG></A>
+<DD>styleItem ( ',' styleItem )*<BR>
+  <TABLE>
+  <TR><TD ALIGN=right>where styleItem<TD>=<TD>name or name'('args')'</TR>
+  <TR><TD ALIGN=right>and args<TD>=<TD>name ( ',' name )*</TR>
+  <TR><TD ALIGN=right>and name<TD>=<TD>[^)(, &nbsp;][^)(,]*</TR>
+  </TABLE>
+  Note that whitespace characters are ignored, except for names which
+  can contain them. A
+  name cannot contain any comma, or left or right parenthesis, and it cannot
+  begin with a whitespace character.
+  <P>
+  At present, the recognized style names are
+  "dashed", "dotted", "solid", "invis" and "bold" for nodes and edges,
+  and "filled", "diagonals" and "rounded" for nodes only.
+  The styles "filled" and "rounded" are recognized for clusters.
+  Additional styles are available in
+  device-dependent form. Style lists are passed to device drivers, which
+  can use this to generate appropriate output.
+  <P>
+  The <TT>setlinewidth</TT> style value can be
+  used for more control over the width of node borders and edges than is
+  allowed by <TT>bold</TT>. This style value takes an argument, specifying the
+  width of the line in <A HREF=#points>points</A>. For example, <TT>style="bold"</TT> is
+  equivalent to <TT>style="setlinewidth(2)"</TT>.
+  <B>The use of <TT>setlinewidth</TT> is deprecated; one should use the
+  <A HREF=#d:penwidth><TT>penwidth</TT></A> attribute instead.</B>
+
+<DT><A NAME=k:viewPort><STRONG>viewPort</STRONG></A>
+<DD>"%lf,%lf,%lf,%lf,%lf" or  "%lf,%lf,%lf,'%s'"
+  <P>
+  The viewPort <TT>W,H,Z,x,y</TT> or <TT>W,H,Z,N</TT>
+  specifies a viewport for the final image. The pair (W,H) gives the
+  dimensions (width and height) of the final image, in
+  <A HREF=#points>points</A>.
+  The optional Z is the zoom factor, i.e., the image in the original layout will be
+  W/Z by H/Z points in size. By default, Z is 1.
+  The optional last part is either a pair (x,y) giving a position in the original layout of the
+  graph, in
+  <A HREF=#points>points</A>, of the center of the viewport, or the name N
+  of a node whose center should used as the focus.
+  By default, the focus is the center of the graph bounding box, i.e.,
+  (bbx/2,bby/2), where "bbx,bby" is the
+  value of the bounding box attribute <A HREF=#a:bb>bb</A>.
+  <P>
+  Sample values: <TT>50,50,.5,'2.8 BSD'</T> or <TT>100,100,2,450,300</TT>.
+  The first will take the 100x100 point square centered on the node <TT>2.8 BSD</TT>
+  and scale it down by 0.5, yielding a 50x50 point final image.
+
+</DL>
+</BODY>
+</HTML>
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/back.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/both.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/box.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/box3d.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/circle.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/colorlist.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/colors.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,3721 @@
+<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">
+<!--
+This is a generated document.  Do not edit.
+-->
+<HTML VERSION=\"2.0\">
+<HEAD>
+<TITLE>Color Names</TITLE>
+</HEAD>
+<BODY BGCOLOR=#ffffff>
+
+<H1 ALIGN=CENTER>Color Names</H1>
+Color names are case-insensitive.
+<P>
+Use of all color schemes below except X11 are covered by this
+<A HREF=#brewer_license>license</A>.
+<HR>
+X11 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f0f8ff><a title=#f0f8ff>aliceblue</a></td>
+<td bgcolor=#faebd7><a title=#faebd7>antiquewhite</a></td>
+<td bgcolor=#ffefdb><a title=#ffefdb>antiquewhite1</a></td>
+<td bgcolor=#eedfcc><a title=#eedfcc>antiquewhite2</a></td>
+<td bgcolor=#cdc0b0><a title=#cdc0b0>antiquewhite3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8b8378><a title=#8b8378>antiquewhite4</a></td>
+<td bgcolor=#7fffd4><a title=#7fffd4>aquamarine</a></td>
+<td bgcolor=#7fffd4><a title=#7fffd4>aquamarine1</a></td>
+<td bgcolor=#76eec6><a title=#76eec6>aquamarine2</a></td>
+<td bgcolor=#66cdaa><a title=#66cdaa>aquamarine3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#458b74><a title=#458b74>aquamarine4</a></td>
+<td bgcolor=#f0ffff><a title=#f0ffff>azure</a></td>
+<td bgcolor=#f0ffff><a title=#f0ffff>azure1</a></td>
+<td bgcolor=#e0eeee><a title=#e0eeee>azure2</a></td>
+<td bgcolor=#c1cdcd><a title=#c1cdcd>azure3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#838b8b><a title=#838b8b>azure4</a></td>
+<td bgcolor=#f5f5dc><a title=#f5f5dc>beige</a></td>
+<td bgcolor=#ffe4c4><a title=#ffe4c4>bisque</a></td>
+<td bgcolor=#ffe4c4><a title=#ffe4c4>bisque1</a></td>
+<td bgcolor=#eed5b7><a title=#eed5b7>bisque2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cdb79e><a title=#cdb79e>bisque3</a></td>
+<td bgcolor=#8b7d6b><a title=#8b7d6b>bisque4</a></td>
+<td bgcolor=#000000><a title=#000000><font color=white>black</font></a></td>
+<td bgcolor=#ffebcd><a title=#ffebcd>blanchedalmond</a></td>
+<td bgcolor=#0000ff><a title=#0000ff>&nbsp;&nbsp;&nbsp;blue&nbsp;&nbsp;&nbsp;</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#0000ff><a title=#0000ff>blue1</a></td>
+<td bgcolor=#0000ee><a title=#0000ee>blue2</a></td>
+<td bgcolor=#0000cd><a title=#0000cd>blue3</a></td>
+<td bgcolor=#00008b><a title=#00008b>blue4</a></td>
+<td bgcolor=#8a2be2><a title=#8a2be2>blueviolet</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#a52a2a><a title=#a52a2a>brown</a></td>
+<td bgcolor=#ff4040><a title=#ff4040>brown1</a></td>
+<td bgcolor=#ee3b3b><a title=#ee3b3b>brown2</a></td>
+<td bgcolor=#cd3333><a title=#cd3333>brown3</a></td>
+<td bgcolor=#8b2323><a title=#8b2323>brown4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#deb887><a title=#deb887>burlywood</a></td>
+<td bgcolor=#ffd39b><a title=#ffd39b>burlywood1</a></td>
+<td bgcolor=#eec591><a title=#eec591>burlywood2</a></td>
+<td bgcolor=#cdaa7d><a title=#cdaa7d>burlywood3</a></td>
+<td bgcolor=#8b7355><a title=#8b7355>burlywood4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#5f9ea0><a title=#5f9ea0>cadetblue</a></td>
+<td bgcolor=#98f5ff><a title=#98f5ff>cadetblue1</a></td>
+<td bgcolor=#8ee5ee><a title=#8ee5ee>cadetblue2</a></td>
+<td bgcolor=#7ac5cd><a title=#7ac5cd>cadetblue3</a></td>
+<td bgcolor=#53868b><a title=#53868b>cadetblue4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#7fff00><a title=#7fff00>chartreuse</a></td>
+<td bgcolor=#7fff00><a title=#7fff00>chartreuse1</a></td>
+<td bgcolor=#76ee00><a title=#76ee00>chartreuse2</a></td>
+<td bgcolor=#66cd00><a title=#66cd00>chartreuse3</a></td>
+<td bgcolor=#458b00><a title=#458b00>chartreuse4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#d2691e><a title=#d2691e>chocolate</a></td>
+<td bgcolor=#ff7f24><a title=#ff7f24>chocolate1</a></td>
+<td bgcolor=#ee7621><a title=#ee7621>chocolate2</a></td>
+<td bgcolor=#cd661d><a title=#cd661d>chocolate3</a></td>
+<td bgcolor=#8b4513><a title=#8b4513>chocolate4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ff7f50><a title=#ff7f50>coral</a></td>
+<td bgcolor=#ff7256><a title=#ff7256>coral1</a></td>
+<td bgcolor=#ee6a50><a title=#ee6a50>coral2</a></td>
+<td bgcolor=#cd5b45><a title=#cd5b45>coral3</a></td>
+<td bgcolor=#8b3e2f><a title=#8b3e2f>coral4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#6495ed><a title=#6495ed>cornflowerblue</a></td>
+<td bgcolor=#fff8dc><a title=#fff8dc>cornsilk</a></td>
+<td bgcolor=#fff8dc><a title=#fff8dc>cornsilk1</a></td>
+<td bgcolor=#eee8cd><a title=#eee8cd>cornsilk2</a></td>
+<td bgcolor=#cdc8b1><a title=#cdc8b1>cornsilk3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8b8878><a title=#8b8878>cornsilk4</a></td>
+<td bgcolor=#dc143c><a title=#dc143c>crimson</a></td>
+<td bgcolor=#00ffff><a title=#00ffff>&nbsp;&nbsp;&nbsp;cyan&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#00ffff><a title=#00ffff>cyan1</a></td>
+<td bgcolor=#00eeee><a title=#00eeee>cyan2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#00cdcd><a title=#00cdcd>cyan3</a></td>
+<td bgcolor=#008b8b><a title=#008b8b>cyan4</a></td>
+<td bgcolor=#b8860b><a title=#b8860b>darkgoldenrod</a></td>
+<td bgcolor=#ffb90f><a title=#ffb90f>darkgoldenrod1</a></td>
+<td bgcolor=#eead0e><a title=#eead0e>darkgoldenrod2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cd950c><a title=#cd950c>darkgoldenrod3</a></td>
+<td bgcolor=#8b6508><a title=#8b6508>darkgoldenrod4</a></td>
+<td bgcolor=#006400><a title=#006400><font color=white>darkgreen</font></a></td>
+<td bgcolor=#bdb76b><a title=#bdb76b>darkkhaki</a></td>
+<td bgcolor=#556b2f><a title=#556b2f><font color=white>darkolivegreen</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#caff70><a title=#caff70>darkolivegreen1</a></td>
+<td bgcolor=#bcee68><a title=#bcee68>darkolivegreen2</a></td>
+<td bgcolor=#a2cd5a><a title=#a2cd5a>darkolivegreen3</a></td>
+<td bgcolor=#6e8b3d><a title=#6e8b3d>darkolivegreen4</a></td>
+<td bgcolor=#ff8c00><a title=#ff8c00>darkorange</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ff7f00><a title=#ff7f00>darkorange1</a></td>
+<td bgcolor=#ee7600><a title=#ee7600>darkorange2</a></td>
+<td bgcolor=#cd6600><a title=#cd6600>darkorange3</a></td>
+<td bgcolor=#8b4500><a title=#8b4500>darkorange4</a></td>
+<td bgcolor=#9932cc><a title=#9932cc>darkorchid</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#bf3eff><a title=#bf3eff>darkorchid1</a></td>
+<td bgcolor=#b23aee><a title=#b23aee>darkorchid2</a></td>
+<td bgcolor=#9a32cd><a title=#9a32cd>darkorchid3</a></td>
+<td bgcolor=#68228b><a title=#68228b>darkorchid4</a></td>
+<td bgcolor=#e9967a><a title=#e9967a>darksalmon</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8fbc8f><a title=#8fbc8f>darkseagreen</a></td>
+<td bgcolor=#c1ffc1><a title=#c1ffc1>darkseagreen1</a></td>
+<td bgcolor=#b4eeb4><a title=#b4eeb4>darkseagreen2</a></td>
+<td bgcolor=#9bcd9b><a title=#9bcd9b>darkseagreen3</a></td>
+<td bgcolor=#698b69><a title=#698b69>darkseagreen4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#483d8b><a title=#483d8b>darkslateblue</a></td>
+<td bgcolor=#2f4f4f><a title=#2f4f4f><font color=white>darkslategray</font></a></td>
+<td bgcolor=#97ffff><a title=#97ffff>darkslategray1</a></td>
+<td bgcolor=#8deeee><a title=#8deeee>darkslategray2</a></td>
+<td bgcolor=#79cdcd><a title=#79cdcd>darkslategray3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#528b8b><a title=#528b8b>darkslategray4</a></td>
+<td bgcolor=#2f4f4f><a title=#2f4f4f><font color=white>darkslategrey</font></a></td>
+<td bgcolor=#00ced1><a title=#00ced1>darkturquoise</a></td>
+<td bgcolor=#9400d3><a title=#9400d3>darkviolet</a></td>
+<td bgcolor=#ff1493><a title=#ff1493>deeppink</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ff1493><a title=#ff1493>deeppink1</a></td>
+<td bgcolor=#ee1289><a title=#ee1289>deeppink2</a></td>
+<td bgcolor=#cd1076><a title=#cd1076>deeppink3</a></td>
+<td bgcolor=#8b0a50><a title=#8b0a50>deeppink4</a></td>
+<td bgcolor=#00bfff><a title=#00bfff>deepskyblue</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#00bfff><a title=#00bfff>deepskyblue1</a></td>
+<td bgcolor=#00b2ee><a title=#00b2ee>deepskyblue2</a></td>
+<td bgcolor=#009acd><a title=#009acd>deepskyblue3</a></td>
+<td bgcolor=#00688b><a title=#00688b>deepskyblue4</a></td>
+<td bgcolor=#696969><a title=#696969><font color=white>dimgray</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#696969><a title=#696969><font color=white>dimgrey</font></a></td>
+<td bgcolor=#1e90ff><a title=#1e90ff>dodgerblue</a></td>
+<td bgcolor=#1e90ff><a title=#1e90ff>dodgerblue1</a></td>
+<td bgcolor=#1c86ee><a title=#1c86ee>dodgerblue2</a></td>
+<td bgcolor=#1874cd><a title=#1874cd>dodgerblue3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#104e8b><a title=#104e8b>dodgerblue4</a></td>
+<td bgcolor=#b22222><a title=#b22222>firebrick</a></td>
+<td bgcolor=#ff3030><a title=#ff3030>firebrick1</a></td>
+<td bgcolor=#ee2c2c><a title=#ee2c2c>firebrick2</a></td>
+<td bgcolor=#cd2626><a title=#cd2626>firebrick3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8b1a1a><a title=#8b1a1a>firebrick4</a></td>
+<td bgcolor=#fffaf0><a title=#fffaf0>floralwhite</a></td>
+<td bgcolor=#228b22><a title=#228b22>forestgreen</a></td>
+<td bgcolor=#dcdcdc><a title=#dcdcdc>gainsboro</a></td>
+<td bgcolor=#f8f8ff><a title=#f8f8ff>ghostwhite</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ffd700><a title=#ffd700>&nbsp;&nbsp;&nbsp;gold&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffd700><a title=#ffd700>gold1</a></td>
+<td bgcolor=#eec900><a title=#eec900>gold2</a></td>
+<td bgcolor=#cdad00><a title=#cdad00>gold3</a></td>
+<td bgcolor=#8b7500><a title=#8b7500>gold4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#daa520><a title=#daa520>goldenrod</a></td>
+<td bgcolor=#ffc125><a title=#ffc125>goldenrod1</a></td>
+<td bgcolor=#eeb422><a title=#eeb422>goldenrod2</a></td>
+<td bgcolor=#cd9b1d><a title=#cd9b1d>goldenrod3</a></td>
+<td bgcolor=#8b6914><a title=#8b6914>goldenrod4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#c0c0c0><a title=#c0c0c0>&nbsp;&nbsp;&nbsp;gray&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#000000><a title=#000000><font color=white>gray0</font></a></td>
+<td bgcolor=#030303><a title=#030303><font color=white>gray1</font></a></td>
+<td bgcolor=#050505><a title=#050505><font color=white>gray2</font></a></td>
+<td bgcolor=#080808><a title=#080808><font color=white>gray3</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#0a0a0a><a title=#0a0a0a><font color=white>gray4</font></a></td>
+<td bgcolor=#0d0d0d><a title=#0d0d0d><font color=white>gray5</font></a></td>
+<td bgcolor=#0f0f0f><a title=#0f0f0f><font color=white>gray6</font></a></td>
+<td bgcolor=#121212><a title=#121212><font color=white>gray7</font></a></td>
+<td bgcolor=#141414><a title=#141414><font color=white>gray8</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#171717><a title=#171717><font color=white>gray9</font></a></td>
+<td bgcolor=#1a1a1a><a title=#1a1a1a><font color=white>gray10</font></a></td>
+<td bgcolor=#1c1c1c><a title=#1c1c1c><font color=white>gray11</font></a></td>
+<td bgcolor=#1f1f1f><a title=#1f1f1f><font color=white>gray12</font></a></td>
+<td bgcolor=#212121><a title=#212121><font color=white>gray13</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#242424><a title=#242424><font color=white>gray14</font></a></td>
+<td bgcolor=#262626><a title=#262626><font color=white>gray15</font></a></td>
+<td bgcolor=#292929><a title=#292929><font color=white>gray16</font></a></td>
+<td bgcolor=#2b2b2b><a title=#2b2b2b><font color=white>gray17</font></a></td>
+<td bgcolor=#2e2e2e><a title=#2e2e2e><font color=white>gray18</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#303030><a title=#303030><font color=white>gray19</font></a></td>
+<td bgcolor=#333333><a title=#333333><font color=white>gray20</font></a></td>
+<td bgcolor=#363636><a title=#363636><font color=white>gray21</font></a></td>
+<td bgcolor=#383838><a title=#383838><font color=white>gray22</font></a></td>
+<td bgcolor=#3b3b3b><a title=#3b3b3b><font color=white>gray23</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#3d3d3d><a title=#3d3d3d><font color=white>gray24</font></a></td>
+<td bgcolor=#404040><a title=#404040><font color=white>gray25</font></a></td>
+<td bgcolor=#424242><a title=#424242><font color=white>gray26</font></a></td>
+<td bgcolor=#454545><a title=#454545><font color=white>gray27</font></a></td>
+<td bgcolor=#474747><a title=#474747><font color=white>gray28</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#4a4a4a><a title=#4a4a4a><font color=white>gray29</font></a></td>
+<td bgcolor=#4d4d4d><a title=#4d4d4d><font color=white>gray30</font></a></td>
+<td bgcolor=#4f4f4f><a title=#4f4f4f><font color=white>gray31</font></a></td>
+<td bgcolor=#525252><a title=#525252><font color=white>gray32</font></a></td>
+<td bgcolor=#545454><a title=#545454><font color=white>gray33</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#575757><a title=#575757><font color=white>gray34</font></a></td>
+<td bgcolor=#595959><a title=#595959><font color=white>gray35</font></a></td>
+<td bgcolor=#5c5c5c><a title=#5c5c5c><font color=white>gray36</font></a></td>
+<td bgcolor=#5e5e5e><a title=#5e5e5e><font color=white>gray37</font></a></td>
+<td bgcolor=#616161><a title=#616161><font color=white>gray38</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#636363><a title=#636363><font color=white>gray39</font></a></td>
+<td bgcolor=#666666><a title=#666666><font color=white>gray40</font></a></td>
+<td bgcolor=#696969><a title=#696969><font color=white>gray41</font></a></td>
+<td bgcolor=#6b6b6b><a title=#6b6b6b><font color=white>gray42</font></a></td>
+<td bgcolor=#6e6e6e><a title=#6e6e6e><font color=white>gray43</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#707070><a title=#707070><font color=white>gray44</font></a></td>
+<td bgcolor=#737373><a title=#737373><font color=white>gray45</font></a></td>
+<td bgcolor=#757575><a title=#757575><font color=white>gray46</font></a></td>
+<td bgcolor=#787878><a title=#787878><font color=white>gray47</font></a></td>
+<td bgcolor=#7a7a7a><a title=#7a7a7a><font color=white>gray48</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#7d7d7d><a title=#7d7d7d><font color=white>gray49</font></a></td>
+<td bgcolor=#7f7f7f><a title=#7f7f7f><font color=white>gray50</font></a></td>
+<td bgcolor=#828282><a title=#828282><font color=white>gray51</font></a></td>
+<td bgcolor=#858585><a title=#858585>gray52</a></td>
+<td bgcolor=#878787><a title=#878787>gray53</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8a8a8a><a title=#8a8a8a>gray54</a></td>
+<td bgcolor=#8c8c8c><a title=#8c8c8c>gray55</a></td>
+<td bgcolor=#8f8f8f><a title=#8f8f8f>gray56</a></td>
+<td bgcolor=#919191><a title=#919191>gray57</a></td>
+<td bgcolor=#949494><a title=#949494>gray58</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#969696><a title=#969696>gray59</a></td>
+<td bgcolor=#999999><a title=#999999>gray60</a></td>
+<td bgcolor=#9c9c9c><a title=#9c9c9c>gray61</a></td>
+<td bgcolor=#9e9e9e><a title=#9e9e9e>gray62</a></td>
+<td bgcolor=#a1a1a1><a title=#a1a1a1>gray63</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#a3a3a3><a title=#a3a3a3>gray64</a></td>
+<td bgcolor=#a6a6a6><a title=#a6a6a6>gray65</a></td>
+<td bgcolor=#a8a8a8><a title=#a8a8a8>gray66</a></td>
+<td bgcolor=#ababab><a title=#ababab>gray67</a></td>
+<td bgcolor=#adadad><a title=#adadad>gray68</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#b0b0b0><a title=#b0b0b0>gray69</a></td>
+<td bgcolor=#b3b3b3><a title=#b3b3b3>gray70</a></td>
+<td bgcolor=#b5b5b5><a title=#b5b5b5>gray71</a></td>
+<td bgcolor=#b8b8b8><a title=#b8b8b8>gray72</a></td>
+<td bgcolor=#bababa><a title=#bababa>gray73</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#bdbdbd><a title=#bdbdbd>gray74</a></td>
+<td bgcolor=#bfbfbf><a title=#bfbfbf>gray75</a></td>
+<td bgcolor=#c2c2c2><a title=#c2c2c2>gray76</a></td>
+<td bgcolor=#c4c4c4><a title=#c4c4c4>gray77</a></td>
+<td bgcolor=#c7c7c7><a title=#c7c7c7>gray78</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#c9c9c9><a title=#c9c9c9>gray79</a></td>
+<td bgcolor=#cccccc><a title=#cccccc>gray80</a></td>
+<td bgcolor=#cfcfcf><a title=#cfcfcf>gray81</a></td>
+<td bgcolor=#d1d1d1><a title=#d1d1d1>gray82</a></td>
+<td bgcolor=#d4d4d4><a title=#d4d4d4>gray83</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#d6d6d6><a title=#d6d6d6>gray84</a></td>
+<td bgcolor=#d9d9d9><a title=#d9d9d9>gray85</a></td>
+<td bgcolor=#dbdbdb><a title=#dbdbdb>gray86</a></td>
+<td bgcolor=#dedede><a title=#dedede>gray87</a></td>
+<td bgcolor=#e0e0e0><a title=#e0e0e0>gray88</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#e3e3e3><a title=#e3e3e3>gray89</a></td>
+<td bgcolor=#e5e5e5><a title=#e5e5e5>gray90</a></td>
+<td bgcolor=#e8e8e8><a title=#e8e8e8>gray91</a></td>
+<td bgcolor=#ebebeb><a title=#ebebeb>gray92</a></td>
+<td bgcolor=#ededed><a title=#ededed>gray93</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#f0f0f0><a title=#f0f0f0>gray94</a></td>
+<td bgcolor=#f2f2f2><a title=#f2f2f2>gray95</a></td>
+<td bgcolor=#f5f5f5><a title=#f5f5f5>gray96</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>gray97</a></td>
+<td bgcolor=#fafafa><a title=#fafafa>gray98</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#fcfcfc><a title=#fcfcfc>gray99</a></td>
+<td bgcolor=#ffffff><a title=#ffffff>gray100</a></td>
+<td bgcolor=#00ff00><a title=#00ff00>green</a></td>
+<td bgcolor=#00ff00><a title=#00ff00>green1</a></td>
+<td bgcolor=#00ee00><a title=#00ee00>green2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#00cd00><a title=#00cd00>green3</a></td>
+<td bgcolor=#008b00><a title=#008b00>green4</a></td>
+<td bgcolor=#adff2f><a title=#adff2f>greenyellow</a></td>
+<td bgcolor=#c0c0c0><a title=#c0c0c0>&nbsp;&nbsp;&nbsp;grey&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#000000><a title=#000000><font color=white>grey0</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#030303><a title=#030303><font color=white>grey1</font></a></td>
+<td bgcolor=#050505><a title=#050505><font color=white>grey2</font></a></td>
+<td bgcolor=#080808><a title=#080808><font color=white>grey3</font></a></td>
+<td bgcolor=#0a0a0a><a title=#0a0a0a><font color=white>grey4</font></a></td>
+<td bgcolor=#0d0d0d><a title=#0d0d0d><font color=white>grey5</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#0f0f0f><a title=#0f0f0f><font color=white>grey6</font></a></td>
+<td bgcolor=#121212><a title=#121212><font color=white>grey7</font></a></td>
+<td bgcolor=#141414><a title=#141414><font color=white>grey8</font></a></td>
+<td bgcolor=#171717><a title=#171717><font color=white>grey9</font></a></td>
+<td bgcolor=#1a1a1a><a title=#1a1a1a><font color=white>grey10</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#1c1c1c><a title=#1c1c1c><font color=white>grey11</font></a></td>
+<td bgcolor=#1f1f1f><a title=#1f1f1f><font color=white>grey12</font></a></td>
+<td bgcolor=#212121><a title=#212121><font color=white>grey13</font></a></td>
+<td bgcolor=#242424><a title=#242424><font color=white>grey14</font></a></td>
+<td bgcolor=#262626><a title=#262626><font color=white>grey15</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#292929><a title=#292929><font color=white>grey16</font></a></td>
+<td bgcolor=#2b2b2b><a title=#2b2b2b><font color=white>grey17</font></a></td>
+<td bgcolor=#2e2e2e><a title=#2e2e2e><font color=white>grey18</font></a></td>
+<td bgcolor=#303030><a title=#303030><font color=white>grey19</font></a></td>
+<td bgcolor=#333333><a title=#333333><font color=white>grey20</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#363636><a title=#363636><font color=white>grey21</font></a></td>
+<td bgcolor=#383838><a title=#383838><font color=white>grey22</font></a></td>
+<td bgcolor=#3b3b3b><a title=#3b3b3b><font color=white>grey23</font></a></td>
+<td bgcolor=#3d3d3d><a title=#3d3d3d><font color=white>grey24</font></a></td>
+<td bgcolor=#404040><a title=#404040><font color=white>grey25</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#424242><a title=#424242><font color=white>grey26</font></a></td>
+<td bgcolor=#454545><a title=#454545><font color=white>grey27</font></a></td>
+<td bgcolor=#474747><a title=#474747><font color=white>grey28</font></a></td>
+<td bgcolor=#4a4a4a><a title=#4a4a4a><font color=white>grey29</font></a></td>
+<td bgcolor=#4d4d4d><a title=#4d4d4d><font color=white>grey30</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#4f4f4f><a title=#4f4f4f><font color=white>grey31</font></a></td>
+<td bgcolor=#525252><a title=#525252><font color=white>grey32</font></a></td>
+<td bgcolor=#545454><a title=#545454><font color=white>grey33</font></a></td>
+<td bgcolor=#575757><a title=#575757><font color=white>grey34</font></a></td>
+<td bgcolor=#595959><a title=#595959><font color=white>grey35</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#5c5c5c><a title=#5c5c5c><font color=white>grey36</font></a></td>
+<td bgcolor=#5e5e5e><a title=#5e5e5e><font color=white>grey37</font></a></td>
+<td bgcolor=#616161><a title=#616161><font color=white>grey38</font></a></td>
+<td bgcolor=#636363><a title=#636363><font color=white>grey39</font></a></td>
+<td bgcolor=#666666><a title=#666666><font color=white>grey40</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#696969><a title=#696969><font color=white>grey41</font></a></td>
+<td bgcolor=#6b6b6b><a title=#6b6b6b><font color=white>grey42</font></a></td>
+<td bgcolor=#6e6e6e><a title=#6e6e6e><font color=white>grey43</font></a></td>
+<td bgcolor=#707070><a title=#707070><font color=white>grey44</font></a></td>
+<td bgcolor=#737373><a title=#737373><font color=white>grey45</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#757575><a title=#757575><font color=white>grey46</font></a></td>
+<td bgcolor=#787878><a title=#787878><font color=white>grey47</font></a></td>
+<td bgcolor=#7a7a7a><a title=#7a7a7a><font color=white>grey48</font></a></td>
+<td bgcolor=#7d7d7d><a title=#7d7d7d><font color=white>grey49</font></a></td>
+<td bgcolor=#7f7f7f><a title=#7f7f7f><font color=white>grey50</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#828282><a title=#828282><font color=white>grey51</font></a></td>
+<td bgcolor=#858585><a title=#858585>grey52</a></td>
+<td bgcolor=#878787><a title=#878787>grey53</a></td>
+<td bgcolor=#8a8a8a><a title=#8a8a8a>grey54</a></td>
+<td bgcolor=#8c8c8c><a title=#8c8c8c>grey55</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8f8f8f><a title=#8f8f8f>grey56</a></td>
+<td bgcolor=#919191><a title=#919191>grey57</a></td>
+<td bgcolor=#949494><a title=#949494>grey58</a></td>
+<td bgcolor=#969696><a title=#969696>grey59</a></td>
+<td bgcolor=#999999><a title=#999999>grey60</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#9c9c9c><a title=#9c9c9c>grey61</a></td>
+<td bgcolor=#9e9e9e><a title=#9e9e9e>grey62</a></td>
+<td bgcolor=#a1a1a1><a title=#a1a1a1>grey63</a></td>
+<td bgcolor=#a3a3a3><a title=#a3a3a3>grey64</a></td>
+<td bgcolor=#a6a6a6><a title=#a6a6a6>grey65</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#a8a8a8><a title=#a8a8a8>grey66</a></td>
+<td bgcolor=#ababab><a title=#ababab>grey67</a></td>
+<td bgcolor=#adadad><a title=#adadad>grey68</a></td>
+<td bgcolor=#b0b0b0><a title=#b0b0b0>grey69</a></td>
+<td bgcolor=#b3b3b3><a title=#b3b3b3>grey70</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#b5b5b5><a title=#b5b5b5>grey71</a></td>
+<td bgcolor=#b8b8b8><a title=#b8b8b8>grey72</a></td>
+<td bgcolor=#bababa><a title=#bababa>grey73</a></td>
+<td bgcolor=#bdbdbd><a title=#bdbdbd>grey74</a></td>
+<td bgcolor=#bfbfbf><a title=#bfbfbf>grey75</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#c2c2c2><a title=#c2c2c2>grey76</a></td>
+<td bgcolor=#c4c4c4><a title=#c4c4c4>grey77</a></td>
+<td bgcolor=#c7c7c7><a title=#c7c7c7>grey78</a></td>
+<td bgcolor=#c9c9c9><a title=#c9c9c9>grey79</a></td>
+<td bgcolor=#cccccc><a title=#cccccc>grey80</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cfcfcf><a title=#cfcfcf>grey81</a></td>
+<td bgcolor=#d1d1d1><a title=#d1d1d1>grey82</a></td>
+<td bgcolor=#d4d4d4><a title=#d4d4d4>grey83</a></td>
+<td bgcolor=#d6d6d6><a title=#d6d6d6>grey84</a></td>
+<td bgcolor=#d9d9d9><a title=#d9d9d9>grey85</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#dbdbdb><a title=#dbdbdb>grey86</a></td>
+<td bgcolor=#dedede><a title=#dedede>grey87</a></td>
+<td bgcolor=#e0e0e0><a title=#e0e0e0>grey88</a></td>
+<td bgcolor=#e3e3e3><a title=#e3e3e3>grey89</a></td>
+<td bgcolor=#e5e5e5><a title=#e5e5e5>grey90</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#e8e8e8><a title=#e8e8e8>grey91</a></td>
+<td bgcolor=#ebebeb><a title=#ebebeb>grey92</a></td>
+<td bgcolor=#ededed><a title=#ededed>grey93</a></td>
+<td bgcolor=#f0f0f0><a title=#f0f0f0>grey94</a></td>
+<td bgcolor=#f2f2f2><a title=#f2f2f2>grey95</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#f5f5f5><a title=#f5f5f5>grey96</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>grey97</a></td>
+<td bgcolor=#fafafa><a title=#fafafa>grey98</a></td>
+<td bgcolor=#fcfcfc><a title=#fcfcfc>grey99</a></td>
+<td bgcolor=#ffffff><a title=#ffffff>grey100</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#f0fff0><a title=#f0fff0>honeydew</a></td>
+<td bgcolor=#f0fff0><a title=#f0fff0>honeydew1</a></td>
+<td bgcolor=#e0eee0><a title=#e0eee0>honeydew2</a></td>
+<td bgcolor=#c1cdc1><a title=#c1cdc1>honeydew3</a></td>
+<td bgcolor=#838b83><a title=#838b83>honeydew4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ff69b4><a title=#ff69b4>hotpink</a></td>
+<td bgcolor=#ff6eb4><a title=#ff6eb4>hotpink1</a></td>
+<td bgcolor=#ee6aa7><a title=#ee6aa7>hotpink2</a></td>
+<td bgcolor=#cd6090><a title=#cd6090>hotpink3</a></td>
+<td bgcolor=#8b3a62><a title=#8b3a62>hotpink4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cd5c5c><a title=#cd5c5c>indianred</a></td>
+<td bgcolor=#ff6a6a><a title=#ff6a6a>indianred1</a></td>
+<td bgcolor=#ee6363><a title=#ee6363>indianred2</a></td>
+<td bgcolor=#cd5555><a title=#cd5555>indianred3</a></td>
+<td bgcolor=#8b3a3a><a title=#8b3a3a>indianred4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#4b0082><a title=#4b0082><font color=white>indigo</font></a></td>
+<td bgcolor=#fffff0><a title=#fffff0>ivory</a></td>
+<td bgcolor=#fffff0><a title=#fffff0>ivory1</a></td>
+<td bgcolor=#eeeee0><a title=#eeeee0>ivory2</a></td>
+<td bgcolor=#cdcdc1><a title=#cdcdc1>ivory3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8b8b83><a title=#8b8b83>ivory4</a></td>
+<td bgcolor=#f0e68c><a title=#f0e68c>khaki</a></td>
+<td bgcolor=#fff68f><a title=#fff68f>khaki1</a></td>
+<td bgcolor=#eee685><a title=#eee685>khaki2</a></td>
+<td bgcolor=#cdc673><a title=#cdc673>khaki3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8b864e><a title=#8b864e>khaki4</a></td>
+<td bgcolor=#e6e6fa><a title=#e6e6fa>lavender</a></td>
+<td bgcolor=#fff0f5><a title=#fff0f5>lavenderblush</a></td>
+<td bgcolor=#fff0f5><a title=#fff0f5>lavenderblush1</a></td>
+<td bgcolor=#eee0e5><a title=#eee0e5>lavenderblush2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cdc1c5><a title=#cdc1c5>lavenderblush3</a></td>
+<td bgcolor=#8b8386><a title=#8b8386>lavenderblush4</a></td>
+<td bgcolor=#7cfc00><a title=#7cfc00>lawngreen</a></td>
+<td bgcolor=#fffacd><a title=#fffacd>lemonchiffon</a></td>
+<td bgcolor=#fffacd><a title=#fffacd>lemonchiffon1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#eee9bf><a title=#eee9bf>lemonchiffon2</a></td>
+<td bgcolor=#cdc9a5><a title=#cdc9a5>lemonchiffon3</a></td>
+<td bgcolor=#8b8970><a title=#8b8970>lemonchiffon4</a></td>
+<td bgcolor=#add8e6><a title=#add8e6>lightblue</a></td>
+<td bgcolor=#bfefff><a title=#bfefff>lightblue1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#b2dfee><a title=#b2dfee>lightblue2</a></td>
+<td bgcolor=#9ac0cd><a title=#9ac0cd>lightblue3</a></td>
+<td bgcolor=#68838b><a title=#68838b>lightblue4</a></td>
+<td bgcolor=#f08080><a title=#f08080>lightcoral</a></td>
+<td bgcolor=#e0ffff><a title=#e0ffff>lightcyan</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#e0ffff><a title=#e0ffff>lightcyan1</a></td>
+<td bgcolor=#d1eeee><a title=#d1eeee>lightcyan2</a></td>
+<td bgcolor=#b4cdcd><a title=#b4cdcd>lightcyan3</a></td>
+<td bgcolor=#7a8b8b><a title=#7a8b8b>lightcyan4</a></td>
+<td bgcolor=#eedd82><a title=#eedd82>lightgoldenrod</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ffec8b><a title=#ffec8b>lightgoldenrod1</a></td>
+<td bgcolor=#eedc82><a title=#eedc82>lightgoldenrod2</a></td>
+<td bgcolor=#cdbe70><a title=#cdbe70>lightgoldenrod3</a></td>
+<td bgcolor=#8b814c><a title=#8b814c>lightgoldenrod4</a></td>
+<td bgcolor=#fafad2><a title=#fafad2>lightgoldenrodyellow</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#d3d3d3><a title=#d3d3d3>lightgray</a></td>
+<td bgcolor=#d3d3d3><a title=#d3d3d3>lightgrey</a></td>
+<td bgcolor=#ffb6c1><a title=#ffb6c1>lightpink</a></td>
+<td bgcolor=#ffaeb9><a title=#ffaeb9>lightpink1</a></td>
+<td bgcolor=#eea2ad><a title=#eea2ad>lightpink2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cd8c95><a title=#cd8c95>lightpink3</a></td>
+<td bgcolor=#8b5f65><a title=#8b5f65>lightpink4</a></td>
+<td bgcolor=#ffa07a><a title=#ffa07a>lightsalmon</a></td>
+<td bgcolor=#ffa07a><a title=#ffa07a>lightsalmon1</a></td>
+<td bgcolor=#ee9572><a title=#ee9572>lightsalmon2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cd8162><a title=#cd8162>lightsalmon3</a></td>
+<td bgcolor=#8b5742><a title=#8b5742>lightsalmon4</a></td>
+<td bgcolor=#20b2aa><a title=#20b2aa>lightseagreen</a></td>
+<td bgcolor=#87cefa><a title=#87cefa>lightskyblue</a></td>
+<td bgcolor=#b0e2ff><a title=#b0e2ff>lightskyblue1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#a4d3ee><a title=#a4d3ee>lightskyblue2</a></td>
+<td bgcolor=#8db6cd><a title=#8db6cd>lightskyblue3</a></td>
+<td bgcolor=#607b8b><a title=#607b8b>lightskyblue4</a></td>
+<td bgcolor=#8470ff><a title=#8470ff>lightslateblue</a></td>
+<td bgcolor=#778899><a title=#778899>lightslategray</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#778899><a title=#778899>lightslategrey</a></td>
+<td bgcolor=#b0c4de><a title=#b0c4de>lightsteelblue</a></td>
+<td bgcolor=#cae1ff><a title=#cae1ff>lightsteelblue1</a></td>
+<td bgcolor=#bcd2ee><a title=#bcd2ee>lightsteelblue2</a></td>
+<td bgcolor=#a2b5cd><a title=#a2b5cd>lightsteelblue3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#6e7b8b><a title=#6e7b8b>lightsteelblue4</a></td>
+<td bgcolor=#ffffe0><a title=#ffffe0>lightyellow</a></td>
+<td bgcolor=#ffffe0><a title=#ffffe0>lightyellow1</a></td>
+<td bgcolor=#eeeed1><a title=#eeeed1>lightyellow2</a></td>
+<td bgcolor=#cdcdb4><a title=#cdcdb4>lightyellow3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8b8b7a><a title=#8b8b7a>lightyellow4</a></td>
+<td bgcolor=#32cd32><a title=#32cd32>limegreen</a></td>
+<td bgcolor=#faf0e6><a title=#faf0e6>linen</a></td>
+<td bgcolor=#ff00ff><a title=#ff00ff>magenta</a></td>
+<td bgcolor=#ff00ff><a title=#ff00ff>magenta1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ee00ee><a title=#ee00ee>magenta2</a></td>
+<td bgcolor=#cd00cd><a title=#cd00cd>magenta3</a></td>
+<td bgcolor=#8b008b><a title=#8b008b>magenta4</a></td>
+<td bgcolor=#b03060><a title=#b03060>maroon</a></td>
+<td bgcolor=#ff34b3><a title=#ff34b3>maroon1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ee30a7><a title=#ee30a7>maroon2</a></td>
+<td bgcolor=#cd2990><a title=#cd2990>maroon3</a></td>
+<td bgcolor=#8b1c62><a title=#8b1c62>maroon4</a></td>
+<td bgcolor=#66cdaa><a title=#66cdaa>mediumaquamarine</a></td>
+<td bgcolor=#0000cd><a title=#0000cd>mediumblue</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ba55d3><a title=#ba55d3>mediumorchid</a></td>
+<td bgcolor=#e066ff><a title=#e066ff>mediumorchid1</a></td>
+<td bgcolor=#d15fee><a title=#d15fee>mediumorchid2</a></td>
+<td bgcolor=#b452cd><a title=#b452cd>mediumorchid3</a></td>
+<td bgcolor=#7a378b><a title=#7a378b>mediumorchid4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#9370db><a title=#9370db>mediumpurple</a></td>
+<td bgcolor=#ab82ff><a title=#ab82ff>mediumpurple1</a></td>
+<td bgcolor=#9f79ee><a title=#9f79ee>mediumpurple2</a></td>
+<td bgcolor=#8968cd><a title=#8968cd>mediumpurple3</a></td>
+<td bgcolor=#5d478b><a title=#5d478b>mediumpurple4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#3cb371><a title=#3cb371>mediumseagreen</a></td>
+<td bgcolor=#7b68ee><a title=#7b68ee>mediumslateblue</a></td>
+<td bgcolor=#00fa9a><a title=#00fa9a>mediumspringgreen</a></td>
+<td bgcolor=#48d1cc><a title=#48d1cc>mediumturquoise</a></td>
+<td bgcolor=#c71585><a title=#c71585>mediumvioletred</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#191970><a title=#191970><font color=white>midnightblue</font></a></td>
+<td bgcolor=#f5fffa><a title=#f5fffa>mintcream</a></td>
+<td bgcolor=#ffe4e1><a title=#ffe4e1>mistyrose</a></td>
+<td bgcolor=#ffe4e1><a title=#ffe4e1>mistyrose1</a></td>
+<td bgcolor=#eed5d2><a title=#eed5d2>mistyrose2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cdb7b5><a title=#cdb7b5>mistyrose3</a></td>
+<td bgcolor=#8b7d7b><a title=#8b7d7b>mistyrose4</a></td>
+<td bgcolor=#ffe4b5><a title=#ffe4b5>moccasin</a></td>
+<td bgcolor=#ffdead><a title=#ffdead>navajowhite</a></td>
+<td bgcolor=#ffdead><a title=#ffdead>navajowhite1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#eecfa1><a title=#eecfa1>navajowhite2</a></td>
+<td bgcolor=#cdb38b><a title=#cdb38b>navajowhite3</a></td>
+<td bgcolor=#8b795e><a title=#8b795e>navajowhite4</a></td>
+<td bgcolor=#000080><a title=#000080><font color=white>&nbsp;&nbsp;&nbsp;navy&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#000080><a title=#000080><font color=white>navyblue</font></a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#fdf5e6><a title=#fdf5e6>oldlace</a></td>
+<td bgcolor=#6b8e23><a title=#6b8e23>olivedrab</a></td>
+<td bgcolor=#c0ff3e><a title=#c0ff3e>olivedrab1</a></td>
+<td bgcolor=#b3ee3a><a title=#b3ee3a>olivedrab2</a></td>
+<td bgcolor=#9acd32><a title=#9acd32>olivedrab3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#698b22><a title=#698b22>olivedrab4</a></td>
+<td bgcolor=#ffa500><a title=#ffa500>orange</a></td>
+<td bgcolor=#ffa500><a title=#ffa500>orange1</a></td>
+<td bgcolor=#ee9a00><a title=#ee9a00>orange2</a></td>
+<td bgcolor=#cd8500><a title=#cd8500>orange3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8b5a00><a title=#8b5a00>orange4</a></td>
+<td bgcolor=#ff4500><a title=#ff4500>orangered</a></td>
+<td bgcolor=#ff4500><a title=#ff4500>orangered1</a></td>
+<td bgcolor=#ee4000><a title=#ee4000>orangered2</a></td>
+<td bgcolor=#cd3700><a title=#cd3700>orangered3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8b2500><a title=#8b2500>orangered4</a></td>
+<td bgcolor=#da70d6><a title=#da70d6>orchid</a></td>
+<td bgcolor=#ff83fa><a title=#ff83fa>orchid1</a></td>
+<td bgcolor=#ee7ae9><a title=#ee7ae9>orchid2</a></td>
+<td bgcolor=#cd69c9><a title=#cd69c9>orchid3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8b4789><a title=#8b4789>orchid4</a></td>
+<td bgcolor=#eee8aa><a title=#eee8aa>palegoldenrod</a></td>
+<td bgcolor=#98fb98><a title=#98fb98>palegreen</a></td>
+<td bgcolor=#9aff9a><a title=#9aff9a>palegreen1</a></td>
+<td bgcolor=#90ee90><a title=#90ee90>palegreen2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#7ccd7c><a title=#7ccd7c>palegreen3</a></td>
+<td bgcolor=#548b54><a title=#548b54>palegreen4</a></td>
+<td bgcolor=#afeeee><a title=#afeeee>paleturquoise</a></td>
+<td bgcolor=#bbffff><a title=#bbffff>paleturquoise1</a></td>
+<td bgcolor=#aeeeee><a title=#aeeeee>paleturquoise2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#96cdcd><a title=#96cdcd>paleturquoise3</a></td>
+<td bgcolor=#668b8b><a title=#668b8b>paleturquoise4</a></td>
+<td bgcolor=#db7093><a title=#db7093>palevioletred</a></td>
+<td bgcolor=#ff82ab><a title=#ff82ab>palevioletred1</a></td>
+<td bgcolor=#ee799f><a title=#ee799f>palevioletred2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cd6889><a title=#cd6889>palevioletred3</a></td>
+<td bgcolor=#8b475d><a title=#8b475d>palevioletred4</a></td>
+<td bgcolor=#ffefd5><a title=#ffefd5>papayawhip</a></td>
+<td bgcolor=#ffdab9><a title=#ffdab9>peachpuff</a></td>
+<td bgcolor=#ffdab9><a title=#ffdab9>peachpuff1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#eecbad><a title=#eecbad>peachpuff2</a></td>
+<td bgcolor=#cdaf95><a title=#cdaf95>peachpuff3</a></td>
+<td bgcolor=#8b7765><a title=#8b7765>peachpuff4</a></td>
+<td bgcolor=#cd853f><a title=#cd853f>&nbsp;&nbsp;&nbsp;peru&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffc0cb><a title=#ffc0cb>&nbsp;&nbsp;&nbsp;pink&nbsp;&nbsp;&nbsp;</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ffb5c5><a title=#ffb5c5>pink1</a></td>
+<td bgcolor=#eea9b8><a title=#eea9b8>pink2</a></td>
+<td bgcolor=#cd919e><a title=#cd919e>pink3</a></td>
+<td bgcolor=#8b636c><a title=#8b636c>pink4</a></td>
+<td bgcolor=#dda0dd><a title=#dda0dd>&nbsp;&nbsp;&nbsp;plum&nbsp;&nbsp;&nbsp;</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ffbbff><a title=#ffbbff>plum1</a></td>
+<td bgcolor=#eeaeee><a title=#eeaeee>plum2</a></td>
+<td bgcolor=#cd96cd><a title=#cd96cd>plum3</a></td>
+<td bgcolor=#8b668b><a title=#8b668b>plum4</a></td>
+<td bgcolor=#b0e0e6><a title=#b0e0e6>powderblue</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#a020f0><a title=#a020f0>purple</a></td>
+<td bgcolor=#9b30ff><a title=#9b30ff>purple1</a></td>
+<td bgcolor=#912cee><a title=#912cee>purple2</a></td>
+<td bgcolor=#7d26cd><a title=#7d26cd>purple3</a></td>
+<td bgcolor=#551a8b><a title=#551a8b>purple4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ff0000><a title=#ff0000>&nbsp;&nbsp;&nbsp;red&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ff0000><a title=#ff0000>&nbsp;&nbsp;&nbsp;red1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ee0000><a title=#ee0000>&nbsp;&nbsp;&nbsp;red2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cd0000><a title=#cd0000>&nbsp;&nbsp;&nbsp;red3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8b0000><a title=#8b0000>&nbsp;&nbsp;&nbsp;red4&nbsp;&nbsp;&nbsp;</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#bc8f8f><a title=#bc8f8f>rosybrown</a></td>
+<td bgcolor=#ffc1c1><a title=#ffc1c1>rosybrown1</a></td>
+<td bgcolor=#eeb4b4><a title=#eeb4b4>rosybrown2</a></td>
+<td bgcolor=#cd9b9b><a title=#cd9b9b>rosybrown3</a></td>
+<td bgcolor=#8b6969><a title=#8b6969>rosybrown4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#4169e1><a title=#4169e1>royalblue</a></td>
+<td bgcolor=#4876ff><a title=#4876ff>royalblue1</a></td>
+<td bgcolor=#436eee><a title=#436eee>royalblue2</a></td>
+<td bgcolor=#3a5fcd><a title=#3a5fcd>royalblue3</a></td>
+<td bgcolor=#27408b><a title=#27408b>royalblue4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8b4513><a title=#8b4513>saddlebrown</a></td>
+<td bgcolor=#fa8072><a title=#fa8072>salmon</a></td>
+<td bgcolor=#ff8c69><a title=#ff8c69>salmon1</a></td>
+<td bgcolor=#ee8262><a title=#ee8262>salmon2</a></td>
+<td bgcolor=#cd7054><a title=#cd7054>salmon3</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#8b4c39><a title=#8b4c39>salmon4</a></td>
+<td bgcolor=#f4a460><a title=#f4a460>sandybrown</a></td>
+<td bgcolor=#2e8b57><a title=#2e8b57>seagreen</a></td>
+<td bgcolor=#54ff9f><a title=#54ff9f>seagreen1</a></td>
+<td bgcolor=#4eee94><a title=#4eee94>seagreen2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#43cd80><a title=#43cd80>seagreen3</a></td>
+<td bgcolor=#2e8b57><a title=#2e8b57>seagreen4</a></td>
+<td bgcolor=#fff5ee><a title=#fff5ee>seashell</a></td>
+<td bgcolor=#fff5ee><a title=#fff5ee>seashell1</a></td>
+<td bgcolor=#eee5de><a title=#eee5de>seashell2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cdc5bf><a title=#cdc5bf>seashell3</a></td>
+<td bgcolor=#8b8682><a title=#8b8682>seashell4</a></td>
+<td bgcolor=#a0522d><a title=#a0522d>sienna</a></td>
+<td bgcolor=#ff8247><a title=#ff8247>sienna1</a></td>
+<td bgcolor=#ee7942><a title=#ee7942>sienna2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cd6839><a title=#cd6839>sienna3</a></td>
+<td bgcolor=#8b4726><a title=#8b4726>sienna4</a></td>
+<td bgcolor=#87ceeb><a title=#87ceeb>skyblue</a></td>
+<td bgcolor=#87ceff><a title=#87ceff>skyblue1</a></td>
+<td bgcolor=#7ec0ee><a title=#7ec0ee>skyblue2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#6ca6cd><a title=#6ca6cd>skyblue3</a></td>
+<td bgcolor=#4a708b><a title=#4a708b>skyblue4</a></td>
+<td bgcolor=#6a5acd><a title=#6a5acd>slateblue</a></td>
+<td bgcolor=#836fff><a title=#836fff>slateblue1</a></td>
+<td bgcolor=#7a67ee><a title=#7a67ee>slateblue2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#6959cd><a title=#6959cd>slateblue3</a></td>
+<td bgcolor=#473c8b><a title=#473c8b>slateblue4</a></td>
+<td bgcolor=#708090><a title=#708090>slategray</a></td>
+<td bgcolor=#c6e2ff><a title=#c6e2ff>slategray1</a></td>
+<td bgcolor=#b9d3ee><a title=#b9d3ee>slategray2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#9fb6cd><a title=#9fb6cd>slategray3</a></td>
+<td bgcolor=#6c7b8b><a title=#6c7b8b>slategray4</a></td>
+<td bgcolor=#708090><a title=#708090>slategrey</a></td>
+<td bgcolor=#fffafa><a title=#fffafa>&nbsp;&nbsp;&nbsp;snow&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fffafa><a title=#fffafa>snow1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#eee9e9><a title=#eee9e9>snow2</a></td>
+<td bgcolor=#cdc9c9><a title=#cdc9c9>snow3</a></td>
+<td bgcolor=#8b8989><a title=#8b8989>snow4</a></td>
+<td bgcolor=#00ff7f><a title=#00ff7f>springgreen</a></td>
+<td bgcolor=#00ff7f><a title=#00ff7f>springgreen1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#00ee76><a title=#00ee76>springgreen2</a></td>
+<td bgcolor=#00cd66><a title=#00cd66>springgreen3</a></td>
+<td bgcolor=#008b45><a title=#008b45>springgreen4</a></td>
+<td bgcolor=#4682b4><a title=#4682b4>steelblue</a></td>
+<td bgcolor=#63b8ff><a title=#63b8ff>steelblue1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#5cacee><a title=#5cacee>steelblue2</a></td>
+<td bgcolor=#4f94cd><a title=#4f94cd>steelblue3</a></td>
+<td bgcolor=#36648b><a title=#36648b>steelblue4</a></td>
+<td bgcolor=#d2b48c><a title=#d2b48c>&nbsp;&nbsp;&nbsp;tan&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffa54f><a title=#ffa54f>&nbsp;&nbsp;&nbsp;tan1&nbsp;&nbsp;&nbsp;</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ee9a49><a title=#ee9a49>&nbsp;&nbsp;&nbsp;tan2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cd853f><a title=#cd853f>&nbsp;&nbsp;&nbsp;tan3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8b5a2b><a title=#8b5a2b>&nbsp;&nbsp;&nbsp;tan4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d8bfd8><a title=#d8bfd8>thistle</a></td>
+<td bgcolor=#ffe1ff><a title=#ffe1ff>thistle1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#eed2ee><a title=#eed2ee>thistle2</a></td>
+<td bgcolor=#cdb5cd><a title=#cdb5cd>thistle3</a></td>
+<td bgcolor=#8b7b8b><a title=#8b7b8b>thistle4</a></td>
+<td bgcolor=#ff6347><a title=#ff6347>tomato</a></td>
+<td bgcolor=#ff6347><a title=#ff6347>tomato1</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ee5c42><a title=#ee5c42>tomato2</a></td>
+<td bgcolor=#cd4f39><a title=#cd4f39>tomato3</a></td>
+<td bgcolor=#8b3626><a title=#8b3626>tomato4</a></td>
+<td bgcolor=#fffffe><a title=#fffffe>transparent</a></td>
+<td bgcolor=#40e0d0><a title=#40e0d0>turquoise</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#00f5ff><a title=#00f5ff>turquoise1</a></td>
+<td bgcolor=#00e5ee><a title=#00e5ee>turquoise2</a></td>
+<td bgcolor=#00c5cd><a title=#00c5cd>turquoise3</a></td>
+<td bgcolor=#00868b><a title=#00868b>turquoise4</a></td>
+<td bgcolor=#ee82ee><a title=#ee82ee>violet</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#d02090><a title=#d02090>violetred</a></td>
+<td bgcolor=#ff3e96><a title=#ff3e96>violetred1</a></td>
+<td bgcolor=#ee3a8c><a title=#ee3a8c>violetred2</a></td>
+<td bgcolor=#cd3278><a title=#cd3278>violetred3</a></td>
+<td bgcolor=#8b2252><a title=#8b2252>violetred4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#f5deb3><a title=#f5deb3>wheat</a></td>
+<td bgcolor=#ffe7ba><a title=#ffe7ba>wheat1</a></td>
+<td bgcolor=#eed8ae><a title=#eed8ae>wheat2</a></td>
+<td bgcolor=#cdba96><a title=#cdba96>wheat3</a></td>
+<td bgcolor=#8b7e66><a title=#8b7e66>wheat4</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#ffffff><a title=#ffffff>white</a></td>
+<td bgcolor=#f5f5f5><a title=#f5f5f5>whitesmoke</a></td>
+<td bgcolor=#ffff00><a title=#ffff00>yellow</a></td>
+<td bgcolor=#ffff00><a title=#ffff00>yellow1</a></td>
+<td bgcolor=#eeee00><a title=#eeee00>yellow2</a></td>
+</tr>
+<tr align=center>
+<td bgcolor=#cdcd00><a title=#cdcd00>yellow3</a></td>
+<td bgcolor=#8b8b00><a title=#8b8b00>yellow4</a></td>
+<td bgcolor=#9acd32><a title=#9acd32>yellowgreen</a></td>
+</table><HR>
+accent3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#7fc97f><a title=#7fc97f>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#beaed4><a title=#beaed4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdc086><a title=#fdc086>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+accent4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#7fc97f><a title=#7fc97f>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#beaed4><a title=#beaed4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdc086><a title=#fdc086>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffff99><a title=#ffff99>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+accent5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#7fc97f><a title=#7fc97f>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#beaed4><a title=#beaed4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdc086><a title=#fdc086>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffff99><a title=#ffff99>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#386cb0><a title=#386cb0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+accent6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#7fc97f><a title=#7fc97f>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#beaed4><a title=#beaed4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdc086><a title=#fdc086>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffff99><a title=#ffff99>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#386cb0><a title=#386cb0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f0027f><a title=#f0027f>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+accent7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#7fc97f><a title=#7fc97f>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#beaed4><a title=#beaed4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdc086><a title=#fdc086>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffff99><a title=#ffff99>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#386cb0><a title=#386cb0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f0027f><a title=#f0027f>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bf5b17><a title=#bf5b17>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+accent8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#7fc97f><a title=#7fc97f>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#beaed4><a title=#beaed4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdc086><a title=#fdc086>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffff99><a title=#ffff99>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#386cb0><a title=#386cb0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f0027f><a title=#f0027f>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bf5b17><a title=#bf5b17>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#666666><a title=#666666><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+blues3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#deebf7><a title=#deebf7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9ecae1><a title=#9ecae1>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3182bd><a title=#3182bd>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+blues4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#eff3ff><a title=#eff3ff>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bdd7e7><a title=#bdd7e7>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6baed6><a title=#6baed6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2171b5><a title=#2171b5>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+blues5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#eff3ff><a title=#eff3ff>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bdd7e7><a title=#bdd7e7>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6baed6><a title=#6baed6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3182bd><a title=#3182bd>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#08519c><a title=#08519c>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+blues6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#eff3ff><a title=#eff3ff>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c6dbef><a title=#c6dbef>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9ecae1><a title=#9ecae1>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6baed6><a title=#6baed6>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3182bd><a title=#3182bd>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#08519c><a title=#08519c>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+blues7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#eff3ff><a title=#eff3ff>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c6dbef><a title=#c6dbef>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9ecae1><a title=#9ecae1>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6baed6><a title=#6baed6>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4292c6><a title=#4292c6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2171b5><a title=#2171b5>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#084594><a title=#084594>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+blues8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7fbff><a title=#f7fbff>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#deebf7><a title=#deebf7>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c6dbef><a title=#c6dbef>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9ecae1><a title=#9ecae1>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6baed6><a title=#6baed6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4292c6><a title=#4292c6>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2171b5><a title=#2171b5>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#084594><a title=#084594>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+blues9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7fbff><a title=#f7fbff>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#deebf7><a title=#deebf7>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c6dbef><a title=#c6dbef>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9ecae1><a title=#9ecae1>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6baed6><a title=#6baed6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4292c6><a title=#4292c6>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2171b5><a title=#2171b5>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#08519c><a title=#08519c>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#08306b><a title=#08306b><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+brbg3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d8b365><a title=#d8b365>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f5f5f5><a title=#f5f5f5>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#5ab4ac><a title=#5ab4ac>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+brbg4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6611a><a title=#a6611a>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dfc27d><a title=#dfc27d>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80cdc1><a title=#80cdc1>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#018571><a title=#018571>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+brbg5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6611a><a title=#a6611a>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dfc27d><a title=#dfc27d>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f5f5f5><a title=#f5f5f5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80cdc1><a title=#80cdc1>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#018571><a title=#018571>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+brbg6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8c510a><a title=#8c510a>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d8b365><a title=#d8b365>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f6e8c3><a title=#f6e8c3>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7eae5><a title=#c7eae5>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#5ab4ac><a title=#5ab4ac>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#01665e><a title=#01665e><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+brbg7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8c510a><a title=#8c510a>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d8b365><a title=#d8b365>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f6e8c3><a title=#f6e8c3>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f5f5f5><a title=#f5f5f5>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7eae5><a title=#c7eae5>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#5ab4ac><a title=#5ab4ac>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#01665e><a title=#01665e><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+brbg8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8c510a><a title=#8c510a>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bf812d><a title=#bf812d>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dfc27d><a title=#dfc27d>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f6e8c3><a title=#f6e8c3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7eae5><a title=#c7eae5>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80cdc1><a title=#80cdc1>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#35978f><a title=#35978f>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#01665e><a title=#01665e><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+brbg9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8c510a><a title=#8c510a>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bf812d><a title=#bf812d>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dfc27d><a title=#dfc27d>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f6e8c3><a title=#f6e8c3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f5f5f5><a title=#f5f5f5>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7eae5><a title=#c7eae5>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80cdc1><a title=#80cdc1>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#35978f><a title=#35978f>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#01665e><a title=#01665e><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+brbg10 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#543005><a title=#543005><font color=white>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#8c510a><a title=#8c510a>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bf812d><a title=#bf812d>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dfc27d><a title=#dfc27d>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f6e8c3><a title=#f6e8c3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7eae5><a title=#c7eae5>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80cdc1><a title=#80cdc1>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#35978f><a title=#35978f>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#01665e><a title=#01665e><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#003c30><a title=#003c30><font color=white>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+brbg11 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#543005><a title=#543005><font color=white>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#8c510a><a title=#8c510a>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bf812d><a title=#bf812d>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dfc27d><a title=#dfc27d>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f6e8c3><a title=#f6e8c3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f5f5f5><a title=#f5f5f5>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7eae5><a title=#c7eae5>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80cdc1><a title=#80cdc1>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#35978f><a title=#35978f>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#01665e><a title=#01665e><font color=white>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#003c30><a title=#003c30><font color=white>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+bugn3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e5f5f9><a title=#e5f5f9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#99d8c9><a title=#99d8c9>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2ca25f><a title=#2ca25f>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+bugn4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8fb><a title=#edf8fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2e2e2><a title=#b2e2e2>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66c2a4><a title=#66c2a4>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238b45><a title=#238b45>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+bugn5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8fb><a title=#edf8fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2e2e2><a title=#b2e2e2>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66c2a4><a title=#66c2a4>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2ca25f><a title=#2ca25f>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#006d2c><a title=#006d2c><font color=white>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+bugn6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8fb><a title=#edf8fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccece6><a title=#ccece6>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#99d8c9><a title=#99d8c9>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66c2a4><a title=#66c2a4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2ca25f><a title=#2ca25f>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#006d2c><a title=#006d2c><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+bugn7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8fb><a title=#edf8fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccece6><a title=#ccece6>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#99d8c9><a title=#99d8c9>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66c2a4><a title=#66c2a4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41ae76><a title=#41ae76>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238b45><a title=#238b45>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#005824><a title=#005824><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+bugn8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7fcfd><a title=#f7fcfd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e5f5f9><a title=#e5f5f9>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccece6><a title=#ccece6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#99d8c9><a title=#99d8c9>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66c2a4><a title=#66c2a4>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41ae76><a title=#41ae76>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238b45><a title=#238b45>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#005824><a title=#005824><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+bugn9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7fcfd><a title=#f7fcfd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e5f5f9><a title=#e5f5f9>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccece6><a title=#ccece6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#99d8c9><a title=#99d8c9>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66c2a4><a title=#66c2a4>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41ae76><a title=#41ae76>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238b45><a title=#238b45>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#006d2c><a title=#006d2c><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#00441b><a title=#00441b><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+bupu3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e0ecf4><a title=#e0ecf4>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9ebcda><a title=#9ebcda>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8856a7><a title=#8856a7>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+bupu4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8fb><a title=#edf8fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3cde3><a title=#b3cde3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c96c6><a title=#8c96c6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#88419d><a title=#88419d>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+bupu5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8fb><a title=#edf8fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3cde3><a title=#b3cde3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c96c6><a title=#8c96c6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8856a7><a title=#8856a7>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#810f7c><a title=#810f7c><font color=white>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+bupu6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8fb><a title=#edf8fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bfd3e6><a title=#bfd3e6>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9ebcda><a title=#9ebcda>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c96c6><a title=#8c96c6>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8856a7><a title=#8856a7>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#810f7c><a title=#810f7c><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+bupu7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8fb><a title=#edf8fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bfd3e6><a title=#bfd3e6>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9ebcda><a title=#9ebcda>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c96c6><a title=#8c96c6>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c6bb1><a title=#8c6bb1>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#88419d><a title=#88419d>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6e016b><a title=#6e016b><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+bupu8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7fcfd><a title=#f7fcfd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0ecf4><a title=#e0ecf4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bfd3e6><a title=#bfd3e6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9ebcda><a title=#9ebcda>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c96c6><a title=#8c96c6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c6bb1><a title=#8c6bb1>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#88419d><a title=#88419d>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6e016b><a title=#6e016b><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+bupu9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7fcfd><a title=#f7fcfd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0ecf4><a title=#e0ecf4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bfd3e6><a title=#bfd3e6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9ebcda><a title=#9ebcda>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c96c6><a title=#8c96c6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c6bb1><a title=#8c6bb1>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#88419d><a title=#88419d>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#810f7c><a title=#810f7c><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#4d004b><a title=#4d004b><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+dark23 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#1b9e77><a title=#1b9e77>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d95f02><a title=#d95f02>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7570b3><a title=#7570b3>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+dark24 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#1b9e77><a title=#1b9e77>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d95f02><a title=#d95f02>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7570b3><a title=#7570b3>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7298a><a title=#e7298a>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+dark25 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#1b9e77><a title=#1b9e77>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d95f02><a title=#d95f02>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7570b3><a title=#7570b3>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7298a><a title=#e7298a>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66a61e><a title=#66a61e>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+dark26 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#1b9e77><a title=#1b9e77>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d95f02><a title=#d95f02>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7570b3><a title=#7570b3>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7298a><a title=#e7298a>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66a61e><a title=#66a61e>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6ab02><a title=#e6ab02>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+dark27 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#1b9e77><a title=#1b9e77>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d95f02><a title=#d95f02>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7570b3><a title=#7570b3>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7298a><a title=#e7298a>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66a61e><a title=#66a61e>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6ab02><a title=#e6ab02>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6761d><a title=#a6761d>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+dark28 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#1b9e77><a title=#1b9e77>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d95f02><a title=#d95f02>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7570b3><a title=#7570b3>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7298a><a title=#e7298a>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66a61e><a title=#66a61e>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6ab02><a title=#e6ab02>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6761d><a title=#a6761d>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#666666><a title=#666666><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+gnbu3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e0f3db><a title=#e0f3db>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a8ddb5><a title=#a8ddb5>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#43a2ca><a title=#43a2ca>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+gnbu4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f0f9e8><a title=#f0f9e8>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bae4bc><a title=#bae4bc>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7bccc4><a title=#7bccc4>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2b8cbe><a title=#2b8cbe>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+gnbu5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f0f9e8><a title=#f0f9e8>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bae4bc><a title=#bae4bc>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7bccc4><a title=#7bccc4>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#43a2ca><a title=#43a2ca>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#0868ac><a title=#0868ac>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+gnbu6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f0f9e8><a title=#f0f9e8>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a8ddb5><a title=#a8ddb5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7bccc4><a title=#7bccc4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#43a2ca><a title=#43a2ca>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#0868ac><a title=#0868ac>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+gnbu7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f0f9e8><a title=#f0f9e8>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a8ddb5><a title=#a8ddb5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7bccc4><a title=#7bccc4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4eb3d3><a title=#4eb3d3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2b8cbe><a title=#2b8cbe>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#08589e><a title=#08589e>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+gnbu8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7fcf0><a title=#f7fcf0>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0f3db><a title=#e0f3db>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a8ddb5><a title=#a8ddb5>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7bccc4><a title=#7bccc4>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4eb3d3><a title=#4eb3d3>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2b8cbe><a title=#2b8cbe>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#08589e><a title=#08589e>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+gnbu9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7fcf0><a title=#f7fcf0>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0f3db><a title=#e0f3db>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a8ddb5><a title=#a8ddb5>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7bccc4><a title=#7bccc4>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4eb3d3><a title=#4eb3d3>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2b8cbe><a title=#2b8cbe>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#0868ac><a title=#0868ac>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#084081><a title=#084081><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greens3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e5f5e0><a title=#e5f5e0>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a1d99b><a title=#a1d99b>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#31a354><a title=#31a354>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+greens4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8e9><a title=#edf8e9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bae4b3><a title=#bae4b3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74c476><a title=#74c476>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238b45><a title=#238b45>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+greens5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8e9><a title=#edf8e9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bae4b3><a title=#bae4b3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74c476><a title=#74c476>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#31a354><a title=#31a354>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#006d2c><a title=#006d2c><font color=white>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greens6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8e9><a title=#edf8e9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7e9c0><a title=#c7e9c0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a1d99b><a title=#a1d99b>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74c476><a title=#74c476>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#31a354><a title=#31a354>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#006d2c><a title=#006d2c><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greens7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8e9><a title=#edf8e9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7e9c0><a title=#c7e9c0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a1d99b><a title=#a1d99b>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74c476><a title=#74c476>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41ab5d><a title=#41ab5d>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238b45><a title=#238b45>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#005a32><a title=#005a32><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greens8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7fcf5><a title=#f7fcf5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e5f5e0><a title=#e5f5e0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7e9c0><a title=#c7e9c0>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a1d99b><a title=#a1d99b>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74c476><a title=#74c476>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41ab5d><a title=#41ab5d>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238b45><a title=#238b45>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#005a32><a title=#005a32><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greens9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7fcf5><a title=#f7fcf5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e5f5e0><a title=#e5f5e0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7e9c0><a title=#c7e9c0>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a1d99b><a title=#a1d99b>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74c476><a title=#74c476>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41ab5d><a title=#41ab5d>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238b45><a title=#238b45>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#006d2c><a title=#006d2c><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#00441b><a title=#00441b><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greys3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f0f0f0><a title=#f0f0f0>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bdbdbd><a title=#bdbdbd>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#636363><a title=#636363><font color=white>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greys4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cccccc><a title=#cccccc>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#969696><a title=#969696>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#525252><a title=#525252><font color=white>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greys5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cccccc><a title=#cccccc>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#969696><a title=#969696>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#636363><a title=#636363><font color=white>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#252525><a title=#252525><font color=white>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greys6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9d9d9><a title=#d9d9d9>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bdbdbd><a title=#bdbdbd>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#969696><a title=#969696>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#636363><a title=#636363><font color=white>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#252525><a title=#252525><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greys7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9d9d9><a title=#d9d9d9>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bdbdbd><a title=#bdbdbd>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#969696><a title=#969696>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#737373><a title=#737373><font color=white>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#525252><a title=#525252><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#252525><a title=#252525><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greys8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffff><a title=#ffffff>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f0f0f0><a title=#f0f0f0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9d9d9><a title=#d9d9d9>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bdbdbd><a title=#bdbdbd>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#969696><a title=#969696>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#737373><a title=#737373><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#525252><a title=#525252><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#252525><a title=#252525><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+greys9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffff><a title=#ffffff>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f0f0f0><a title=#f0f0f0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9d9d9><a title=#d9d9d9>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bdbdbd><a title=#bdbdbd>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#969696><a title=#969696>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#737373><a title=#737373><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#525252><a title=#525252><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#252525><a title=#252525><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#000000><a title=#000000><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+oranges3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fee6ce><a title=#fee6ce>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae6b><a title=#fdae6b>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6550d><a title=#e6550d>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+oranges4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#feedde><a title=#feedde>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbe85><a title=#fdbe85>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d94701><a title=#d94701>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+oranges5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#feedde><a title=#feedde>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbe85><a title=#fdbe85>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6550d><a title=#e6550d>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a63603><a title=#a63603>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+oranges6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#feedde><a title=#feedde>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdd0a2><a title=#fdd0a2>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae6b><a title=#fdae6b>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6550d><a title=#e6550d>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a63603><a title=#a63603>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+oranges7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#feedde><a title=#feedde>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdd0a2><a title=#fdd0a2>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae6b><a title=#fdae6b>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f16913><a title=#f16913>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d94801><a title=#d94801>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c2d04><a title=#8c2d04>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+oranges8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff5eb><a title=#fff5eb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee6ce><a title=#fee6ce>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdd0a2><a title=#fdd0a2>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae6b><a title=#fdae6b>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f16913><a title=#f16913>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d94801><a title=#d94801>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c2d04><a title=#8c2d04>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+oranges9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff5eb><a title=#fff5eb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee6ce><a title=#fee6ce>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdd0a2><a title=#fdd0a2>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae6b><a title=#fdae6b>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f16913><a title=#f16913>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d94801><a title=#d94801>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a63603><a title=#a63603>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7f2704><a title=#7f2704><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+orrd3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fee8c8><a title=#fee8c8>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbb84><a title=#fdbb84>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e34a33><a title=#e34a33>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+orrd4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fef0d9><a title=#fef0d9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdcc8a><a title=#fdcc8a>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d7301f><a title=#d7301f>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+orrd5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fef0d9><a title=#fef0d9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdcc8a><a title=#fdcc8a>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e34a33><a title=#e34a33>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b30000><a title=#b30000>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+orrd6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fef0d9><a title=#fef0d9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdd49e><a title=#fdd49e>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbb84><a title=#fdbb84>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e34a33><a title=#e34a33>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b30000><a title=#b30000>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+orrd7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fef0d9><a title=#fef0d9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdd49e><a title=#fdd49e>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbb84><a title=#fdbb84>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ef6548><a title=#ef6548>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d7301f><a title=#d7301f>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#990000><a title=#990000>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+orrd8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff7ec><a title=#fff7ec>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee8c8><a title=#fee8c8>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdd49e><a title=#fdd49e>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbb84><a title=#fdbb84>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ef6548><a title=#ef6548>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d7301f><a title=#d7301f>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#990000><a title=#990000>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+orrd9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff7ec><a title=#fff7ec>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee8c8><a title=#fee8c8>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdd49e><a title=#fdd49e>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbb84><a title=#fdbb84>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ef6548><a title=#ef6548>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d7301f><a title=#d7301f>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b30000><a title=#b30000>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7f0000><a title=#7f0000><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+paired3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6cee3><a title=#a6cee3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1f78b4><a title=#1f78b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2df8a><a title=#b2df8a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+paired4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6cee3><a title=#a6cee3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1f78b4><a title=#1f78b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2df8a><a title=#b2df8a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#33a02c><a title=#33a02c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+paired5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6cee3><a title=#a6cee3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1f78b4><a title=#1f78b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2df8a><a title=#b2df8a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#33a02c><a title=#33a02c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb9a99><a title=#fb9a99>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+paired6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6cee3><a title=#a6cee3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1f78b4><a title=#1f78b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2df8a><a title=#b2df8a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#33a02c><a title=#33a02c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb9a99><a title=#fb9a99>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e31a1c><a title=#e31a1c>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+paired7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6cee3><a title=#a6cee3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1f78b4><a title=#1f78b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2df8a><a title=#b2df8a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#33a02c><a title=#33a02c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb9a99><a title=#fb9a99>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e31a1c><a title=#e31a1c>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbf6f><a title=#fdbf6f>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+paired8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6cee3><a title=#a6cee3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1f78b4><a title=#1f78b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2df8a><a title=#b2df8a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#33a02c><a title=#33a02c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb9a99><a title=#fb9a99>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e31a1c><a title=#e31a1c>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbf6f><a title=#fdbf6f>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ff7f00><a title=#ff7f00>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+paired9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6cee3><a title=#a6cee3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1f78b4><a title=#1f78b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2df8a><a title=#b2df8a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#33a02c><a title=#33a02c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb9a99><a title=#fb9a99>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e31a1c><a title=#e31a1c>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbf6f><a title=#fdbf6f>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ff7f00><a title=#ff7f00>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cab2d6><a title=#cab2d6>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+paired10 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6cee3><a title=#a6cee3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1f78b4><a title=#1f78b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2df8a><a title=#b2df8a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#33a02c><a title=#33a02c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb9a99><a title=#fb9a99>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e31a1c><a title=#e31a1c>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbf6f><a title=#fdbf6f>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ff7f00><a title=#ff7f00>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cab2d6><a title=#cab2d6>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6a3d9a><a title=#6a3d9a>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+paired11 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6cee3><a title=#a6cee3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1f78b4><a title=#1f78b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2df8a><a title=#b2df8a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#33a02c><a title=#33a02c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb9a99><a title=#fb9a99>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e31a1c><a title=#e31a1c>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbf6f><a title=#fdbf6f>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ff7f00><a title=#ff7f00>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cab2d6><a title=#cab2d6>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6a3d9a><a title=#6a3d9a>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffff99><a title=#ffff99>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+paired12 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a6cee3><a title=#a6cee3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1f78b4><a title=#1f78b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2df8a><a title=#b2df8a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#33a02c><a title=#33a02c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb9a99><a title=#fb9a99>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e31a1c><a title=#e31a1c>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdbf6f><a title=#fdbf6f>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ff7f00><a title=#ff7f00>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cab2d6><a title=#cab2d6>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6a3d9a><a title=#6a3d9a>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffff99><a title=#ffff99>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b15928><a title=#b15928>&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel13 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fbb4ae><a title=#fbb4ae>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3cde3><a title=#b3cde3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel14 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fbb4ae><a title=#fbb4ae>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3cde3><a title=#b3cde3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#decbe4><a title=#decbe4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel15 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fbb4ae><a title=#fbb4ae>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3cde3><a title=#b3cde3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#decbe4><a title=#decbe4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fed9a6><a title=#fed9a6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel16 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fbb4ae><a title=#fbb4ae>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3cde3><a title=#b3cde3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#decbe4><a title=#decbe4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fed9a6><a title=#fed9a6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel17 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fbb4ae><a title=#fbb4ae>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3cde3><a title=#b3cde3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#decbe4><a title=#decbe4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fed9a6><a title=#fed9a6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e5d8bd><a title=#e5d8bd>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel18 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fbb4ae><a title=#fbb4ae>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3cde3><a title=#b3cde3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#decbe4><a title=#decbe4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fed9a6><a title=#fed9a6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e5d8bd><a title=#e5d8bd>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddaec><a title=#fddaec>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel19 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fbb4ae><a title=#fbb4ae>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3cde3><a title=#b3cde3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#decbe4><a title=#decbe4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fed9a6><a title=#fed9a6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e5d8bd><a title=#e5d8bd>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddaec><a title=#fddaec>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f2f2f2><a title=#f2f2f2>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel23 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b3e2cd><a title=#b3e2cd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdcdac><a title=#fdcdac>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cbd5e8><a title=#cbd5e8>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel24 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b3e2cd><a title=#b3e2cd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdcdac><a title=#fdcdac>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cbd5e8><a title=#cbd5e8>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4cae4><a title=#f4cae4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel25 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b3e2cd><a title=#b3e2cd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdcdac><a title=#fdcdac>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cbd5e8><a title=#cbd5e8>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4cae4><a title=#f4cae4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f5c9><a title=#e6f5c9>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel26 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b3e2cd><a title=#b3e2cd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdcdac><a title=#fdcdac>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cbd5e8><a title=#cbd5e8>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4cae4><a title=#f4cae4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f5c9><a title=#e6f5c9>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fff2ae><a title=#fff2ae>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel27 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b3e2cd><a title=#b3e2cd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdcdac><a title=#fdcdac>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cbd5e8><a title=#cbd5e8>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4cae4><a title=#f4cae4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f5c9><a title=#e6f5c9>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fff2ae><a title=#fff2ae>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f1e2cc><a title=#f1e2cc>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pastel28 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b3e2cd><a title=#b3e2cd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdcdac><a title=#fdcdac>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cbd5e8><a title=#cbd5e8>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4cae4><a title=#f4cae4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f5c9><a title=#e6f5c9>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fff2ae><a title=#fff2ae>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f1e2cc><a title=#f1e2cc>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cccccc><a title=#cccccc>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+piyg3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e9a3c9><a title=#e9a3c9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a1d76a><a title=#a1d76a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+piyg4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d01c8b><a title=#d01c8b>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f1b6da><a title=#f1b6da>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b8e186><a title=#b8e186>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4dac26><a title=#4dac26>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+piyg5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d01c8b><a title=#d01c8b>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f1b6da><a title=#f1b6da>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b8e186><a title=#b8e186>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4dac26><a title=#4dac26>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+piyg6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#c51b7d><a title=#c51b7d>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e9a3c9><a title=#e9a3c9>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fde0ef><a title=#fde0ef>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f5d0><a title=#e6f5d0>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a1d76a><a title=#a1d76a>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d9221><a title=#4d9221>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+piyg7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#c51b7d><a title=#c51b7d>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e9a3c9><a title=#e9a3c9>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fde0ef><a title=#fde0ef>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f5d0><a title=#e6f5d0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a1d76a><a title=#a1d76a>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d9221><a title=#4d9221>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+piyg8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#c51b7d><a title=#c51b7d>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#de77ae><a title=#de77ae>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f1b6da><a title=#f1b6da>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fde0ef><a title=#fde0ef>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f5d0><a title=#e6f5d0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b8e186><a title=#b8e186>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fbc41><a title=#7fbc41>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d9221><a title=#4d9221>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+piyg9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#c51b7d><a title=#c51b7d>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#de77ae><a title=#de77ae>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f1b6da><a title=#f1b6da>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fde0ef><a title=#fde0ef>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f5d0><a title=#e6f5d0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b8e186><a title=#b8e186>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fbc41><a title=#7fbc41>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d9221><a title=#4d9221>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+piyg10 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8e0152><a title=#8e0152>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c51b7d><a title=#c51b7d>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#de77ae><a title=#de77ae>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f1b6da><a title=#f1b6da>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fde0ef><a title=#fde0ef>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f5d0><a title=#e6f5d0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b8e186><a title=#b8e186>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fbc41><a title=#7fbc41>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d9221><a title=#4d9221>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#276419><a title=#276419><font color=white>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+piyg11 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8e0152><a title=#8e0152>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c51b7d><a title=#c51b7d>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#de77ae><a title=#de77ae>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f1b6da><a title=#f1b6da>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fde0ef><a title=#fde0ef>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f5d0><a title=#e6f5d0>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b8e186><a title=#b8e186>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fbc41><a title=#7fbc41>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d9221><a title=#4d9221>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#276419><a title=#276419><font color=white>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+prgn3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#af8dc3><a title=#af8dc3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fbf7b><a title=#7fbf7b>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+prgn4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#7b3294><a title=#7b3294>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c2a5cf><a title=#c2a5cf>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6dba0><a title=#a6dba0>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#008837><a title=#008837>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+prgn5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#7b3294><a title=#7b3294>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c2a5cf><a title=#c2a5cf>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6dba0><a title=#a6dba0>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#008837><a title=#008837>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+prgn6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#762a83><a title=#762a83>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#af8dc3><a title=#af8dc3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7d4e8><a title=#e7d4e8>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9f0d3><a title=#d9f0d3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fbf7b><a title=#7fbf7b>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1b7837><a title=#1b7837><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+prgn7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#762a83><a title=#762a83>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#af8dc3><a title=#af8dc3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7d4e8><a title=#e7d4e8>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9f0d3><a title=#d9f0d3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fbf7b><a title=#7fbf7b>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1b7837><a title=#1b7837><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+prgn8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#762a83><a title=#762a83>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9970ab><a title=#9970ab>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c2a5cf><a title=#c2a5cf>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7d4e8><a title=#e7d4e8>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9f0d3><a title=#d9f0d3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6dba0><a title=#a6dba0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#5aae61><a title=#5aae61>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1b7837><a title=#1b7837><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+prgn9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#762a83><a title=#762a83>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9970ab><a title=#9970ab>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c2a5cf><a title=#c2a5cf>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7d4e8><a title=#e7d4e8>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9f0d3><a title=#d9f0d3>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6dba0><a title=#a6dba0>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#5aae61><a title=#5aae61>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1b7837><a title=#1b7837><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+prgn10 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#40004b><a title=#40004b><font color=white>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#762a83><a title=#762a83>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9970ab><a title=#9970ab>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c2a5cf><a title=#c2a5cf>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7d4e8><a title=#e7d4e8>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9f0d3><a title=#d9f0d3>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6dba0><a title=#a6dba0>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#5aae61><a title=#5aae61>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1b7837><a title=#1b7837><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#00441b><a title=#00441b><font color=white>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+prgn11 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#40004b><a title=#40004b><font color=white>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#762a83><a title=#762a83>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9970ab><a title=#9970ab>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c2a5cf><a title=#c2a5cf>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7d4e8><a title=#e7d4e8>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9f0d3><a title=#d9f0d3>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6dba0><a title=#a6dba0>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#5aae61><a title=#5aae61>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1b7837><a title=#1b7837><font color=white>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#00441b><a title=#00441b><font color=white>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+pubu3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ece7f2><a title=#ece7f2>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6bddb><a title=#a6bddb>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2b8cbe><a title=#2b8cbe>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pubu4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f1eef6><a title=#f1eef6>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bdc9e1><a title=#bdc9e1>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74a9cf><a title=#74a9cf>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#0570b0><a title=#0570b0>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pubu5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f1eef6><a title=#f1eef6>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bdc9e1><a title=#bdc9e1>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74a9cf><a title=#74a9cf>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2b8cbe><a title=#2b8cbe>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#045a8d><a title=#045a8d>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pubu6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f1eef6><a title=#f1eef6>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d0d1e6><a title=#d0d1e6>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6bddb><a title=#a6bddb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74a9cf><a title=#74a9cf>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2b8cbe><a title=#2b8cbe>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#045a8d><a title=#045a8d>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pubu7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f1eef6><a title=#f1eef6>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d0d1e6><a title=#d0d1e6>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6bddb><a title=#a6bddb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74a9cf><a title=#74a9cf>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3690c0><a title=#3690c0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#0570b0><a title=#0570b0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#034e7b><a title=#034e7b><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+pubu8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff7fb><a title=#fff7fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ece7f2><a title=#ece7f2>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d0d1e6><a title=#d0d1e6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6bddb><a title=#a6bddb>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74a9cf><a title=#74a9cf>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3690c0><a title=#3690c0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#0570b0><a title=#0570b0>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#034e7b><a title=#034e7b><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+pubu9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff7fb><a title=#fff7fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ece7f2><a title=#ece7f2>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d0d1e6><a title=#d0d1e6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6bddb><a title=#a6bddb>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74a9cf><a title=#74a9cf>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3690c0><a title=#3690c0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#0570b0><a title=#0570b0>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#045a8d><a title=#045a8d>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#023858><a title=#023858><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+pubugn3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ece2f0><a title=#ece2f0>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6bddb><a title=#a6bddb>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1c9099><a title=#1c9099>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pubugn4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f6eff7><a title=#f6eff7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bdc9e1><a title=#bdc9e1>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#67a9cf><a title=#67a9cf>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#02818a><a title=#02818a>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+pubugn5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f6eff7><a title=#f6eff7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bdc9e1><a title=#bdc9e1>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#67a9cf><a title=#67a9cf>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1c9099><a title=#1c9099>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#016c59><a title=#016c59><font color=white>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+pubugn6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f6eff7><a title=#f6eff7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d0d1e6><a title=#d0d1e6>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6bddb><a title=#a6bddb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#67a9cf><a title=#67a9cf>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1c9099><a title=#1c9099>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#016c59><a title=#016c59><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+pubugn7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f6eff7><a title=#f6eff7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d0d1e6><a title=#d0d1e6>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6bddb><a title=#a6bddb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#67a9cf><a title=#67a9cf>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3690c0><a title=#3690c0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#02818a><a title=#02818a>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#016450><a title=#016450><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+pubugn8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff7fb><a title=#fff7fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ece2f0><a title=#ece2f0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d0d1e6><a title=#d0d1e6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6bddb><a title=#a6bddb>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#67a9cf><a title=#67a9cf>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3690c0><a title=#3690c0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#02818a><a title=#02818a>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#016450><a title=#016450><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+pubugn9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff7fb><a title=#fff7fb>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ece2f0><a title=#ece2f0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d0d1e6><a title=#d0d1e6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6bddb><a title=#a6bddb>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#67a9cf><a title=#67a9cf>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3690c0><a title=#3690c0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#02818a><a title=#02818a>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#016c59><a title=#016c59><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#014636><a title=#014636><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+puor3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f1a340><a title=#f1a340>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#998ec3><a title=#998ec3>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+puor4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e66101><a title=#e66101>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb863><a title=#fdb863>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2abd2><a title=#b2abd2>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#5e3c99><a title=#5e3c99>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+puor5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e66101><a title=#e66101>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb863><a title=#fdb863>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2abd2><a title=#b2abd2>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#5e3c99><a title=#5e3c99>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+puor6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b35806><a title=#b35806>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f1a340><a title=#f1a340>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee0b6><a title=#fee0b6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d8daeb><a title=#d8daeb>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#998ec3><a title=#998ec3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#542788><a title=#542788>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+puor7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b35806><a title=#b35806>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f1a340><a title=#f1a340>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee0b6><a title=#fee0b6>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d8daeb><a title=#d8daeb>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#998ec3><a title=#998ec3>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#542788><a title=#542788>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+puor8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b35806><a title=#b35806>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e08214><a title=#e08214>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb863><a title=#fdb863>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee0b6><a title=#fee0b6>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d8daeb><a title=#d8daeb>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2abd2><a title=#b2abd2>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8073ac><a title=#8073ac>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#542788><a title=#542788>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+puor9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b35806><a title=#b35806>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e08214><a title=#e08214>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb863><a title=#fdb863>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee0b6><a title=#fee0b6>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d8daeb><a title=#d8daeb>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2abd2><a title=#b2abd2>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8073ac><a title=#8073ac>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#542788><a title=#542788>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purd3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e7e1ef><a title=#e7e1ef>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c994c7><a title=#c994c7>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dd1c77><a title=#dd1c77>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purd4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f1eef6><a title=#f1eef6>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d7b5d8><a title=#d7b5d8>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#df65b0><a title=#df65b0>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ce1256><a title=#ce1256>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purd5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f1eef6><a title=#f1eef6>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d7b5d8><a title=#d7b5d8>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#df65b0><a title=#df65b0>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dd1c77><a title=#dd1c77>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#980043><a title=#980043>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purd6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f1eef6><a title=#f1eef6>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d4b9da><a title=#d4b9da>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c994c7><a title=#c994c7>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#df65b0><a title=#df65b0>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dd1c77><a title=#dd1c77>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#980043><a title=#980043>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purd7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f1eef6><a title=#f1eef6>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d4b9da><a title=#d4b9da>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c994c7><a title=#c994c7>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#df65b0><a title=#df65b0>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7298a><a title=#e7298a>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ce1256><a title=#ce1256>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#91003f><a title=#91003f>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purd8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7f4f9><a title=#f7f4f9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7e1ef><a title=#e7e1ef>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d4b9da><a title=#d4b9da>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c994c7><a title=#c994c7>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#df65b0><a title=#df65b0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7298a><a title=#e7298a>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ce1256><a title=#ce1256>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#91003f><a title=#91003f>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purd9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7f4f9><a title=#f7f4f9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7e1ef><a title=#e7e1ef>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d4b9da><a title=#d4b9da>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c994c7><a title=#c994c7>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#df65b0><a title=#df65b0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e7298a><a title=#e7298a>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ce1256><a title=#ce1256>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#980043><a title=#980043>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#67001f><a title=#67001f><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+puor10 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#7f3b08><a title=#7f3b08><font color=white>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#b35806><a title=#b35806>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e08214><a title=#e08214>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb863><a title=#fdb863>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee0b6><a title=#fee0b6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d8daeb><a title=#d8daeb>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2abd2><a title=#b2abd2>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8073ac><a title=#8073ac>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#542788><a title=#542788>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2d004b><a title=#2d004b><font color=white>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+puor11 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#7f3b08><a title=#7f3b08><font color=white>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#b35806><a title=#b35806>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e08214><a title=#e08214>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb863><a title=#fdb863>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee0b6><a title=#fee0b6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d8daeb><a title=#d8daeb>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b2abd2><a title=#b2abd2>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8073ac><a title=#8073ac>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#542788><a title=#542788>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2d004b><a title=#2d004b><font color=white>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+purples3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#efedf5><a title=#efedf5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bcbddc><a title=#bcbddc>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#756bb1><a title=#756bb1>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purples4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f2f0f7><a title=#f2f0f7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cbc9e2><a title=#cbc9e2>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9e9ac8><a title=#9e9ac8>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6a51a3><a title=#6a51a3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purples5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f2f0f7><a title=#f2f0f7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cbc9e2><a title=#cbc9e2>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9e9ac8><a title=#9e9ac8>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#756bb1><a title=#756bb1>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#54278f><a title=#54278f>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purples6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f2f0f7><a title=#f2f0f7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dadaeb><a title=#dadaeb>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bcbddc><a title=#bcbddc>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9e9ac8><a title=#9e9ac8>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#756bb1><a title=#756bb1>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#54278f><a title=#54278f>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purples7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f2f0f7><a title=#f2f0f7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dadaeb><a title=#dadaeb>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bcbddc><a title=#bcbddc>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9e9ac8><a title=#9e9ac8>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#807dba><a title=#807dba>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6a51a3><a title=#6a51a3>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4a1486><a title=#4a1486>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purples8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fcfbfd><a title=#fcfbfd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#efedf5><a title=#efedf5>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dadaeb><a title=#dadaeb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bcbddc><a title=#bcbddc>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9e9ac8><a title=#9e9ac8>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#807dba><a title=#807dba>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6a51a3><a title=#6a51a3>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4a1486><a title=#4a1486>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+purples9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fcfbfd><a title=#fcfbfd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#efedf5><a title=#efedf5>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dadaeb><a title=#dadaeb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bcbddc><a title=#bcbddc>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#9e9ac8><a title=#9e9ac8>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#807dba><a title=#807dba>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#6a51a3><a title=#6a51a3>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#54278f><a title=#54278f>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3f007d><a title=#3f007d><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdbu10 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#67001f><a title=#67001f><font color=white>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d6604d><a title=#d6604d>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d1e5f0><a title=#d1e5f0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#92c5de><a title=#92c5de>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4393c3><a title=#4393c3>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2166ac><a title=#2166ac>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#053061><a title=#053061><font color=white>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdbu11 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#67001f><a title=#67001f><font color=white>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d6604d><a title=#d6604d>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d1e5f0><a title=#d1e5f0>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#92c5de><a title=#92c5de>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4393c3><a title=#4393c3>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2166ac><a title=#2166ac>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#053061><a title=#053061><font color=white>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdbu3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ef8a62><a title=#ef8a62>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#67a9cf><a title=#67a9cf>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdbu4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ca0020><a title=#ca0020>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#92c5de><a title=#92c5de>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#0571b0><a title=#0571b0>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdbu5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ca0020><a title=#ca0020>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#92c5de><a title=#92c5de>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#0571b0><a title=#0571b0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdbu6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ef8a62><a title=#ef8a62>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d1e5f0><a title=#d1e5f0>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#67a9cf><a title=#67a9cf>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2166ac><a title=#2166ac>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdbu7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ef8a62><a title=#ef8a62>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d1e5f0><a title=#d1e5f0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#67a9cf><a title=#67a9cf>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2166ac><a title=#2166ac>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdbu8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d6604d><a title=#d6604d>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d1e5f0><a title=#d1e5f0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#92c5de><a title=#92c5de>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4393c3><a title=#4393c3>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2166ac><a title=#2166ac>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdbu9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d6604d><a title=#d6604d>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7f7f7><a title=#f7f7f7>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d1e5f0><a title=#d1e5f0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#92c5de><a title=#92c5de>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4393c3><a title=#4393c3>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2166ac><a title=#2166ac>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdgy3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ef8a62><a title=#ef8a62>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffff><a title=#ffffff>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#999999><a title=#999999>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdgy4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ca0020><a title=#ca0020>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bababa><a title=#bababa>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#404040><a title=#404040><font color=white>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdgy5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ca0020><a title=#ca0020>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffff><a title=#ffffff>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bababa><a title=#bababa>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#404040><a title=#404040><font color=white>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdgy6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ef8a62><a title=#ef8a62>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0e0e0><a title=#e0e0e0>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#999999><a title=#999999>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d4d4d><a title=#4d4d4d><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdgy7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ef8a62><a title=#ef8a62>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffff><a title=#ffffff>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0e0e0><a title=#e0e0e0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#999999><a title=#999999>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d4d4d><a title=#4d4d4d><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdgy8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d6604d><a title=#d6604d>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0e0e0><a title=#e0e0e0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bababa><a title=#bababa>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#878787><a title=#878787>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d4d4d><a title=#4d4d4d><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdgy9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d6604d><a title=#d6604d>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffff><a title=#ffffff>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0e0e0><a title=#e0e0e0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bababa><a title=#bababa>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#878787><a title=#878787>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d4d4d><a title=#4d4d4d><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdpu3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fde0dd><a title=#fde0dd>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fa9fb5><a title=#fa9fb5>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c51b8a><a title=#c51b8a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdpu4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#feebe2><a title=#feebe2>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fbb4b9><a title=#fbb4b9>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f768a1><a title=#f768a1>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ae017e><a title=#ae017e>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdpu5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#feebe2><a title=#feebe2>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fbb4b9><a title=#fbb4b9>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f768a1><a title=#f768a1>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c51b8a><a title=#c51b8a>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7a0177><a title=#7a0177><font color=white>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdpu6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#feebe2><a title=#feebe2>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fcc5c0><a title=#fcc5c0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fa9fb5><a title=#fa9fb5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f768a1><a title=#f768a1>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c51b8a><a title=#c51b8a>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7a0177><a title=#7a0177><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdpu7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#feebe2><a title=#feebe2>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fcc5c0><a title=#fcc5c0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fa9fb5><a title=#fa9fb5>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f768a1><a title=#f768a1>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dd3497><a title=#dd3497>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ae017e><a title=#ae017e>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7a0177><a title=#7a0177><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdpu8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff7f3><a title=#fff7f3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fde0dd><a title=#fde0dd>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fcc5c0><a title=#fcc5c0>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fa9fb5><a title=#fa9fb5>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f768a1><a title=#f768a1>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dd3497><a title=#dd3497>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ae017e><a title=#ae017e>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7a0177><a title=#7a0177><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdpu9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff7f3><a title=#fff7f3>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fde0dd><a title=#fde0dd>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fcc5c0><a title=#fcc5c0>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fa9fb5><a title=#fa9fb5>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f768a1><a title=#f768a1>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#dd3497><a title=#dd3497>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ae017e><a title=#ae017e>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7a0177><a title=#7a0177><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#49006a><a title=#49006a><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdgy10 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#67001f><a title=#67001f><font color=white>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d6604d><a title=#d6604d>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0e0e0><a title=#e0e0e0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bababa><a title=#bababa>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#878787><a title=#878787>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d4d4d><a title=#4d4d4d><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#1a1a1a><a title=#1a1a1a><font color=white>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdgy11 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#67001f><a title=#67001f><font color=white>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#b2182b><a title=#b2182b>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d6604d><a title=#d6604d>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f4a582><a title=#f4a582>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fddbc7><a title=#fddbc7>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffff><a title=#ffffff>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0e0e0><a title=#e0e0e0>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bababa><a title=#bababa>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#878787><a title=#878787>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4d4d4d><a title=#4d4d4d><font color=white>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#1a1a1a><a title=#1a1a1a><font color=white>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdylbu3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#91bfdb><a title=#91bfdb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylbu4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d7191c><a title=#d7191c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abd9e9><a title=#abd9e9>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2c7bb6><a title=#2c7bb6>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylbu5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d7191c><a title=#d7191c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abd9e9><a title=#abd9e9>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2c7bb6><a title=#2c7bb6>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylbu6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee090><a title=#fee090>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0f3f8><a title=#e0f3f8>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#91bfdb><a title=#91bfdb>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4575b4><a title=#4575b4>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylbu7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee090><a title=#fee090>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0f3f8><a title=#e0f3f8>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#91bfdb><a title=#91bfdb>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4575b4><a title=#4575b4>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylbu8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee090><a title=#fee090>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0f3f8><a title=#e0f3f8>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abd9e9><a title=#abd9e9>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74add1><a title=#74add1>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4575b4><a title=#4575b4>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylbu9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee090><a title=#fee090>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0f3f8><a title=#e0f3f8>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abd9e9><a title=#abd9e9>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74add1><a title=#74add1>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4575b4><a title=#4575b4>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylbu10 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a50026><a title=#a50026>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee090><a title=#fee090>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0f3f8><a title=#e0f3f8>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abd9e9><a title=#abd9e9>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74add1><a title=#74add1>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4575b4><a title=#4575b4>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#313695><a title=#313695>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylbu11 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a50026><a title=#a50026>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee090><a title=#fee090>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e0f3f8><a title=#e0f3f8>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abd9e9><a title=#abd9e9>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#74add1><a title=#74add1>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4575b4><a title=#4575b4>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#313695><a title=#313695>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylgn3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#91cf60><a title=#91cf60>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylgn4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d7191c><a title=#d7191c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6d96a><a title=#a6d96a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1a9641><a title=#1a9641>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylgn5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d7191c><a title=#d7191c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6d96a><a title=#a6d96a>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1a9641><a title=#1a9641>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylgn6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9ef8b><a title=#d9ef8b>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#91cf60><a title=#91cf60>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1a9850><a title=#1a9850>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylgn7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9ef8b><a title=#d9ef8b>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#91cf60><a title=#91cf60>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1a9850><a title=#1a9850>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylgn8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9ef8b><a title=#d9ef8b>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6d96a><a title=#a6d96a>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66bd63><a title=#66bd63>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1a9850><a title=#1a9850>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylgn9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9ef8b><a title=#d9ef8b>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6d96a><a title=#a6d96a>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66bd63><a title=#66bd63>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1a9850><a title=#1a9850>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+rdylgn10 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a50026><a title=#a50026>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9ef8b><a title=#d9ef8b>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6d96a><a title=#a6d96a>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66bd63><a title=#66bd63>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1a9850><a title=#1a9850>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#006837><a title=#006837><font color=white>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+rdylgn11 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#a50026><a title=#a50026>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d73027><a title=#d73027>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9ef8b><a title=#d9ef8b>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6d96a><a title=#a6d96a>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66bd63><a title=#66bd63>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1a9850><a title=#1a9850>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#006837><a title=#006837><font color=white>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+reds3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fee0d2><a title=#fee0d2>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc9272><a title=#fc9272>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#de2d26><a title=#de2d26>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+reds4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fee5d9><a title=#fee5d9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fcae91><a title=#fcae91>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb6a4a><a title=#fb6a4a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cb181d><a title=#cb181d>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+reds5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fee5d9><a title=#fee5d9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fcae91><a title=#fcae91>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb6a4a><a title=#fb6a4a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#de2d26><a title=#de2d26>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a50f15><a title=#a50f15>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+reds6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fee5d9><a title=#fee5d9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fcbba1><a title=#fcbba1>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc9272><a title=#fc9272>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb6a4a><a title=#fb6a4a>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#de2d26><a title=#de2d26>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a50f15><a title=#a50f15>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+reds7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fee5d9><a title=#fee5d9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fcbba1><a title=#fcbba1>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc9272><a title=#fc9272>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb6a4a><a title=#fb6a4a>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ef3b2c><a title=#ef3b2c>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cb181d><a title=#cb181d>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#99000d><a title=#99000d>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+reds8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff5f0><a title=#fff5f0>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee0d2><a title=#fee0d2>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fcbba1><a title=#fcbba1>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc9272><a title=#fc9272>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb6a4a><a title=#fb6a4a>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ef3b2c><a title=#ef3b2c>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cb181d><a title=#cb181d>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#99000d><a title=#99000d>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+reds9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff5f0><a title=#fff5f0>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee0d2><a title=#fee0d2>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fcbba1><a title=#fcbba1>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc9272><a title=#fc9272>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb6a4a><a title=#fb6a4a>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ef3b2c><a title=#ef3b2c>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cb181d><a title=#cb181d>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a50f15><a title=#a50f15>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#67000d><a title=#67000d><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+set13 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e41a1c><a title=#e41a1c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#377eb8><a title=#377eb8>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4daf4a><a title=#4daf4a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set14 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e41a1c><a title=#e41a1c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#377eb8><a title=#377eb8>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4daf4a><a title=#4daf4a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#984ea3><a title=#984ea3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set15 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e41a1c><a title=#e41a1c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#377eb8><a title=#377eb8>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4daf4a><a title=#4daf4a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#984ea3><a title=#984ea3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ff7f00><a title=#ff7f00>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set16 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e41a1c><a title=#e41a1c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#377eb8><a title=#377eb8>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4daf4a><a title=#4daf4a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#984ea3><a title=#984ea3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ff7f00><a title=#ff7f00>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffff33><a title=#ffff33>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set17 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e41a1c><a title=#e41a1c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#377eb8><a title=#377eb8>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4daf4a><a title=#4daf4a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#984ea3><a title=#984ea3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ff7f00><a title=#ff7f00>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffff33><a title=#ffff33>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a65628><a title=#a65628>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set18 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e41a1c><a title=#e41a1c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#377eb8><a title=#377eb8>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4daf4a><a title=#4daf4a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#984ea3><a title=#984ea3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ff7f00><a title=#ff7f00>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffff33><a title=#ffff33>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a65628><a title=#a65628>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f781bf><a title=#f781bf>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set19 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#e41a1c><a title=#e41a1c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#377eb8><a title=#377eb8>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#4daf4a><a title=#4daf4a>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#984ea3><a title=#984ea3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ff7f00><a title=#ff7f00>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffff33><a title=#ffff33>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a65628><a title=#a65628>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f781bf><a title=#f781bf>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#999999><a title=#999999>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set23 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#66c2a5><a title=#66c2a5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d62><a title=#fc8d62>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8da0cb><a title=#8da0cb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set24 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#66c2a5><a title=#66c2a5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d62><a title=#fc8d62>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8da0cb><a title=#8da0cb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e78ac3><a title=#e78ac3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set25 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#66c2a5><a title=#66c2a5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d62><a title=#fc8d62>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8da0cb><a title=#8da0cb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e78ac3><a title=#e78ac3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6d854><a title=#a6d854>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set26 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#66c2a5><a title=#66c2a5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d62><a title=#fc8d62>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8da0cb><a title=#8da0cb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e78ac3><a title=#e78ac3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6d854><a title=#a6d854>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffd92f><a title=#ffd92f>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set27 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#66c2a5><a title=#66c2a5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d62><a title=#fc8d62>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8da0cb><a title=#8da0cb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e78ac3><a title=#e78ac3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6d854><a title=#a6d854>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffd92f><a title=#ffd92f>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e5c494><a title=#e5c494>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set28 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#66c2a5><a title=#66c2a5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d62><a title=#fc8d62>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8da0cb><a title=#8da0cb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e78ac3><a title=#e78ac3>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a6d854><a title=#a6d854>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffd92f><a title=#ffd92f>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e5c494><a title=#e5c494>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3b3b3><a title=#b3b3b3>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set33 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8dd3c7><a title=#8dd3c7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffb3><a title=#ffffb3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bebada><a title=#bebada>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set34 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8dd3c7><a title=#8dd3c7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffb3><a title=#ffffb3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bebada><a title=#bebada>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb8072><a title=#fb8072>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set35 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8dd3c7><a title=#8dd3c7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffb3><a title=#ffffb3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bebada><a title=#bebada>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb8072><a title=#fb8072>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80b1d3><a title=#80b1d3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set36 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8dd3c7><a title=#8dd3c7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffb3><a title=#ffffb3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bebada><a title=#bebada>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb8072><a title=#fb8072>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80b1d3><a title=#80b1d3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb462><a title=#fdb462>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set37 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8dd3c7><a title=#8dd3c7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffb3><a title=#ffffb3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bebada><a title=#bebada>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb8072><a title=#fb8072>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80b1d3><a title=#80b1d3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb462><a title=#fdb462>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3de69><a title=#b3de69>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set38 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8dd3c7><a title=#8dd3c7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffb3><a title=#ffffb3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bebada><a title=#bebada>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb8072><a title=#fb8072>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80b1d3><a title=#80b1d3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb462><a title=#fdb462>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3de69><a title=#b3de69>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fccde5><a title=#fccde5>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set39 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8dd3c7><a title=#8dd3c7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffb3><a title=#ffffb3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bebada><a title=#bebada>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb8072><a title=#fb8072>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80b1d3><a title=#80b1d3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb462><a title=#fdb462>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3de69><a title=#b3de69>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fccde5><a title=#fccde5>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9d9d9><a title=#d9d9d9>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set310 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8dd3c7><a title=#8dd3c7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffb3><a title=#ffffb3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bebada><a title=#bebada>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb8072><a title=#fb8072>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80b1d3><a title=#80b1d3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb462><a title=#fdb462>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3de69><a title=#b3de69>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fccde5><a title=#fccde5>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9d9d9><a title=#d9d9d9>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bc80bd><a title=#bc80bd>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set311 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8dd3c7><a title=#8dd3c7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffb3><a title=#ffffb3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bebada><a title=#bebada>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb8072><a title=#fb8072>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80b1d3><a title=#80b1d3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb462><a title=#fdb462>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3de69><a title=#b3de69>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fccde5><a title=#fccde5>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9d9d9><a title=#d9d9d9>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bc80bd><a title=#bc80bd>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+set312 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#8dd3c7><a title=#8dd3c7>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffb3><a title=#ffffb3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bebada><a title=#bebada>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fb8072><a title=#fb8072>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#80b1d3><a title=#80b1d3>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdb462><a title=#fdb462>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b3de69><a title=#b3de69>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fccde5><a title=#fccde5>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9d9d9><a title=#d9d9d9>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bc80bd><a title=#bc80bd>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ccebc5><a title=#ccebc5>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffed6f><a title=#ffed6f>&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+spectral3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#99d594><a title=#99d594>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+spectral4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d7191c><a title=#d7191c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abdda4><a title=#abdda4>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2b83ba><a title=#2b83ba>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+spectral5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d7191c><a title=#d7191c>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abdda4><a title=#abdda4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2b83ba><a title=#2b83ba>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+spectral6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d53e4f><a title=#d53e4f>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f598><a title=#e6f598>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#99d594><a title=#99d594>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3288bd><a title=#3288bd>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+spectral7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d53e4f><a title=#d53e4f>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc8d59><a title=#fc8d59>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f598><a title=#e6f598>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#99d594><a title=#99d594>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3288bd><a title=#3288bd>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+spectral8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d53e4f><a title=#d53e4f>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f598><a title=#e6f598>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abdda4><a title=#abdda4>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66c2a5><a title=#66c2a5>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3288bd><a title=#3288bd>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+spectral9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#d53e4f><a title=#d53e4f>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f598><a title=#e6f598>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abdda4><a title=#abdda4>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66c2a5><a title=#66c2a5>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3288bd><a title=#3288bd>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+spectral10 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#9e0142><a title=#9e0142>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d53e4f><a title=#d53e4f>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f598><a title=#e6f598>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abdda4><a title=#abdda4>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66c2a5><a title=#66c2a5>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3288bd><a title=#3288bd>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#5e4fa2><a title=#5e4fa2>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+spectral11 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#9e0142><a title=#9e0142>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d53e4f><a title=#d53e4f>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f46d43><a title=#f46d43>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fdae61><a title=#fdae61>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee08b><a title=#fee08b>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffffbf><a title=#ffffbf>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e6f598><a title=#e6f598>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#abdda4><a title=#abdda4>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#66c2a5><a title=#66c2a5>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#3288bd><a title=#3288bd>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#5e4fa2><a title=#5e4fa2>&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylgn3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#f7fcb9><a title=#f7fcb9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#addd8e><a title=#addd8e>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#31a354><a title=#31a354>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylgn4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c2e699><a title=#c2e699>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#78c679><a title=#78c679>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238443><a title=#238443>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylgn5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c2e699><a title=#c2e699>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#78c679><a title=#78c679>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#31a354><a title=#31a354>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#006837><a title=#006837><font color=white>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+ylgn6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9f0a3><a title=#d9f0a3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#addd8e><a title=#addd8e>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#78c679><a title=#78c679>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#31a354><a title=#31a354>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#006837><a title=#006837><font color=white>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+ylgn7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9f0a3><a title=#d9f0a3>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#addd8e><a title=#addd8e>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#78c679><a title=#78c679>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41ab5d><a title=#41ab5d>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238443><a title=#238443>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#005a32><a title=#005a32><font color=white>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+ylgn8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffe5><a title=#ffffe5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7fcb9><a title=#f7fcb9>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9f0a3><a title=#d9f0a3>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#addd8e><a title=#addd8e>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#78c679><a title=#78c679>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41ab5d><a title=#41ab5d>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238443><a title=#238443>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#005a32><a title=#005a32><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+ylgn9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffe5><a title=#ffffe5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f7fcb9><a title=#f7fcb9>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d9f0a3><a title=#d9f0a3>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#addd8e><a title=#addd8e>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#78c679><a title=#78c679>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41ab5d><a title=#41ab5d>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#238443><a title=#238443>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#006837><a title=#006837><font color=white>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</font></a></td>
+<td bgcolor=#004529><a title=#004529><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+ylgnbu3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#edf8b1><a title=#edf8b1>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fcdbb><a title=#7fcdbb>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2c7fb8><a title=#2c7fb8>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylgnbu4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a1dab4><a title=#a1dab4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41b6c4><a title=#41b6c4>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#225ea8><a title=#225ea8>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylgnbu5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#a1dab4><a title=#a1dab4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41b6c4><a title=#41b6c4>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2c7fb8><a title=#2c7fb8>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#253494><a title=#253494>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylgnbu6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7e9b4><a title=#c7e9b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fcdbb><a title=#7fcdbb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41b6c4><a title=#41b6c4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#2c7fb8><a title=#2c7fb8>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#253494><a title=#253494>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylgnbu7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7e9b4><a title=#c7e9b4>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fcdbb><a title=#7fcdbb>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41b6c4><a title=#41b6c4>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1d91c0><a title=#1d91c0>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#225ea8><a title=#225ea8>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#0c2c84><a title=#0c2c84>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylgnbu8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffd9><a title=#ffffd9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#edf8b1><a title=#edf8b1>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7e9b4><a title=#c7e9b4>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fcdbb><a title=#7fcdbb>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41b6c4><a title=#41b6c4>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1d91c0><a title=#1d91c0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#225ea8><a title=#225ea8>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#0c2c84><a title=#0c2c84>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylgnbu9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffd9><a title=#ffffd9>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#edf8b1><a title=#edf8b1>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#c7e9b4><a title=#c7e9b4>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#7fcdbb><a title=#7fcdbb>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#41b6c4><a title=#41b6c4>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#1d91c0><a title=#1d91c0>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#225ea8><a title=#225ea8>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#253494><a title=#253494>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#081d58><a title=#081d58><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+ylorbr3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#fff7bc><a title=#fff7bc>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fec44f><a title=#fec44f>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d95f0e><a title=#d95f0e>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorbr4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffd4><a title=#ffffd4>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fed98e><a title=#fed98e>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fe9929><a title=#fe9929>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cc4c02><a title=#cc4c02>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorbr5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffd4><a title=#ffffd4>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fed98e><a title=#fed98e>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fe9929><a title=#fe9929>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d95f0e><a title=#d95f0e>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#993404><a title=#993404>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorbr6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffd4><a title=#ffffd4>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee391><a title=#fee391>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fec44f><a title=#fec44f>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fe9929><a title=#fe9929>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#d95f0e><a title=#d95f0e>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#993404><a title=#993404>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorbr7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffd4><a title=#ffffd4>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee391><a title=#fee391>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fec44f><a title=#fec44f>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fe9929><a title=#fe9929>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ec7014><a title=#ec7014>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cc4c02><a title=#cc4c02>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c2d04><a title=#8c2d04>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorbr8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffe5><a title=#ffffe5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fff7bc><a title=#fff7bc>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee391><a title=#fee391>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fec44f><a title=#fec44f>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fe9929><a title=#fe9929>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ec7014><a title=#ec7014>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cc4c02><a title=#cc4c02>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#8c2d04><a title=#8c2d04>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorbr9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffe5><a title=#ffffe5>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fff7bc><a title=#fff7bc>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fee391><a title=#fee391>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fec44f><a title=#fec44f>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fe9929><a title=#fe9929>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ec7014><a title=#ec7014>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#cc4c02><a title=#cc4c02>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#993404><a title=#993404>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#662506><a title=#662506><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+ylorrd3 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffeda0><a title=#ffeda0>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#feb24c><a title=#feb24c>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f03b20><a title=#f03b20>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorrd4 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffb2><a title=#ffffb2>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fecc5c><a title=#fecc5c>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e31a1c><a title=#e31a1c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorrd5 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffb2><a title=#ffffb2>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fecc5c><a title=#fecc5c>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f03b20><a title=#f03b20>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bd0026><a title=#bd0026>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorrd6 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffb2><a title=#ffffb2>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fed976><a title=#fed976>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#feb24c><a title=#feb24c>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#f03b20><a title=#f03b20>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bd0026><a title=#bd0026>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorrd7 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffb2><a title=#ffffb2>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fed976><a title=#fed976>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#feb24c><a title=#feb24c>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc4e2a><a title=#fc4e2a>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e31a1c><a title=#e31a1c>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b10026><a title=#b10026>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorrd8 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffeda0><a title=#ffeda0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fed976><a title=#fed976>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#feb24c><a title=#feb24c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc4e2a><a title=#fc4e2a>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e31a1c><a title=#e31a1c>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#b10026><a title=#b10026>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+</table><HR>
+ylorrd9 color scheme<BR>
+<table border=1 align=center>
+<tr align=center>
+<td bgcolor=#ffffcc><a title=#ffffcc>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#ffeda0><a title=#ffeda0>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fed976><a title=#fed976>&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#feb24c><a title=#feb24c>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fd8d3c><a title=#fd8d3c>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#fc4e2a><a title=#fc4e2a>&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#e31a1c><a title=#e31a1c>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#bd0026><a title=#bd0026>&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;</a></td>
+<td bgcolor=#800026><a title=#800026><font color=white>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;</font></a></td>
+</table><HR>
+<BR>
+<A NAME=brewer_license>Apache-Style Software License for ColorBrewer software and ColorBrewer
+Color Schemes, Version 1.1<A>
+<P>
+Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania
+State University. All rights reserved.
+<P>
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+<OL>
+<LI>Redistributions as source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+<LI>The end-user documentation included with the redistribution, if any,
+must include the following acknowledgment:
+<P>
+<I>This product includes color specifications and designs developed
+by Cynthia Brewer (http://colorbrewer.org/)</I>.
+<P>
+Alternately, this acknowledgment may appear in the software itself, if and
+wherever such third-party acknowledgments normally appear.
+<LI>The name "ColorBrewer" must not be used to endorse or promote products
+derived from this software without prior written permission. For written
+permission, please contact Cynthia Brewer at cbrewer@psu.edu.
+<LI>Products derived from this software may not be called "ColorBrewer", nor
+may "ColorBrewer" appear in their name, without prior written permission
+of Cynthia Brewer.
+</OL>
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CYNTHIA
+BREWER, MARK HARROWER, OR THE PENNSYLVANIA STATE UNIVERSITY BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/command.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML VERSION="2.0">
+<HEAD>
+<TITLE>Command-line Usage</TITLE>
+</HEAD>
+<BODY BGCOLOR=white>
+<A NAME="top"></A>
+<H1 ALIGN=CENTER>Command-line Invocation</H1>
+<HR>
+All Graphviz programs have a similar invocation:<BR>
+<TABLE><TR><TD>
+<CODE><I>cmd</I> [ <I>flags</I> ] [ <I>input files</I> ]<CODE>
+</TR></TABLE>
+If no input files are supplied, the program reads from <STRONG>stdin</STRONG>.
+<H3>Flags</H3>
+<DL>
+<DT><STRONG>-G</STRONG><I>name</I>[=<I>value</I>]
+<DD>Set a graph attribute, with default <I>value</I> = <TT>true</TT>.
+<DT><STRONG>-N</STRONG><I>name</I>[=<I>value</I>]
+<DD>Set a default node attribute, with default <I>value</I> = <TT>true</TT>.
+<DT><STRONG>-E</STRONG><I>name</I>[=<I>value</I>]
+<DD>Set a default edge attribute, with default <I>value</I> = <TT>true</TT>.
+<DT><A NAME=minusK><STRONG>-K</STRONG></A><I>layout</I>
+<DD>Specifies which default layout algorithm to use, overriding the default from the command name. For example, running
+<TT>dot -Kneato</TT> is equivalent to running <TT>neato</TT>.
+<DT><A NAME=d:T><STRONG>-T</STRONG></A><I>format</I>[:<I>renderer</I>[:<I>formatter</I>]]       
+<DD>Set output language to one of the <A HREF=output.html>supported formats</A>.
+By default, <A HREF=output.html#d:dot>attributed dot</A> is produced.
+<P>
+Depending on how Graphviz was built, there may be multiple renderers for
+generating a particular output format, and multiple formatters for 
+creating the final output. For example, a typical installation
+can produce <A HREF="http://www.graphviz.org/doc/info/output.html#d:png">PNG</A>
+output using either the Cairo or GD library. The desired rendering engine
+can be specified after a colon. If there are multiple formatting engines
+available, the desired one can be specified in a similar fashion after
+the rendering engine. Thus, <TT>-Tpng:cairo</TT> specifies PNG
+output produced by Cairo (using the Cairo's default formatter), and 
+<TT>-Tpng:cairo:gd</TT> specifies PNG
+output produced by Cairo formatted using the GD library.
+<P>
+If no renderer is specified, or a renderer but no formatter, the default one
+is invoked. The flag <TT>-T<I>format</I>:</TT> produces a list of all
+of the renderers available for the specified <I>format</I>, the first one
+listed with a prefix matching <I>format</I> being the default.
+Using the <TT>-v</TT> flag, described below, will print which format,
+renderer, and formatter are actually used.
+<DT><STRONG>-V</STRONG>             
+<DD>Emit version information and exit.
+<DT><STRONG>-l</STRONG><I>library</I>
+<DD>User-supplied, device-dependent library text. Multiple flags may
+be given. These strings are passed to the code generator at the
+beginning of output. 
+<P>For PostScript output, they are treated as file names
+whose content will be included in the preamble after the standard preamble.
+If <I>library</I> is the empty string <TT>""</TT>, the standard preamble
+is not emitted.
+<DT><A NAME=d:n><STRONG>-n</STRONG>[<I>num</I>]</A>      
+<DD>Sets no-op flag in <STRONG>neato</STRONG>. 
+If set, <STRONG>neato</STRONG> assumes nodes have already been 
+positioned and all nodes have a <A HREF=attrs.html#d:pos>pos</A>
+attribute giving
+the positions. It then performs an optional adjustment to remove node-node
+overlap, depending on the value of the 
+<A HREF=attrs.html#d:overlap>overlap</A> attribute, computes the edge 
+layouts, depending on the value of the 
+<A HREF=attrs.html#d:splines>splines</A> attribute, and
+emits the graph in the appropriate format. If <I>num</I> is supplied,
+the following actions occur:
+<DL>
+<DT><I>num</I> = 1
+<DD>Equivalent to <STRONG>-n</STRONG>.
+<DT><I>num</I> > 1
+<DD>Use node positions as specified, with no adjustment to
+remove node-node overlaps, and use any edge layouts already specified
+by the <A HREF=attrs.html#d:pos>pos</A> attribute. <STRONG>neato</STRONG>
+computes an edge layout for any edge that does not have a <B>pos</B> attribute.
+As usual, edge layout is guided by the 
+<A HREF=attrs.html#d:splines>splines</A> attribute.
+</DL>
+<DT><STRONG>-o</STRONG><I>outfile</I>    
+<DD>Write output to file <I>outfile</I>. By default, output goes to
+<STRONG>stdout</STRONG>.
+<DT><STRONG>-O</STRONG>
+<DD>Automatically generate output file names based on the input
+file name and the various output formats specified by the <STRONG>-T</STRONG>
+flags.
+<DT><STRONG>-P</STRONG>
+<DD>Automatically generate a graph that shows the plugin configuration of
+the current executable.   e.g.  <STRONG>dot -P -Tps | lpr</STRONG>
+<DT><STRONG>-q</STRONG>
+<DD>Suppress warning messages.
+<DT><A NAME=d:s><STRONG>-s</STRONG></A>[<I>scale</I>]
+<DD>Set input scale to <I>scale</I>. If this value is omitted,
+72.0 is used. This number is used to convert the point coordinate
+units used in the <A HREF=attrs.html#d:pos>pos</A> attribute 
+into inches, which is what is expected by neato and fdp. 
+Thus, feeding the output of a graph laid out by one program into
+neato or fdp almost always requires this flag.
+Ignored if the <STRONG>-n</STRONG> flag is used.
+<DT><STRONG>-v</STRONG>             
+<DD>Verbose mode
+<DT><STRONG>-x</STRONG>             
+<DD>In <STRONG>neato</STRONG>, on input, prune isolated nodes and peninsulas.
+This removes uninteresting graph structure and produces a less cluttered
+drawing.
+<DT><STRONG>-y</STRONG>             
+<DD>By default, the coordinate system used in generic output formats, 
+such as <A HREF=output.html#d:dot>attributed dot</A>,
+<A HREF=output.html#d:xdot>extended dot</A>,
+<A HREF=output.html#d:plain>plain</A> and
+<A HREF=output.html#d:plain-ext>plain-ext</A>,
+is the standard cartesian system with the origin in the lower left corner, 
+and with increasing y coordinates as points move from bottom to top.
+If the <CODE>-y</CODE> flag is used, the coordinate system is inverted,
+so that increasing values of y correspond to movement from top to bottom.
+<DT><STRONG>-?</STRONG>             
+<DD>Print usage information, then exit.
+</DL>
+If multiple <STRONG>-T</STRONG> flags are given, drawings of the graph
+are emitted in each of the specified formats. Multiple <STRONG>-o</STRONG>
+flags can be used to specify the output file for each format. If there
+are more formats than files, the remaining formats are written to
+<STRONG>stdout</STRONG>.
+<P>
+Note that the <STRONG>-G</STRONG>, 
+<STRONG>-N</STRONG> and
+<STRONG>-E</STRONG> flags override any initial attribute declarations
+in the input graph,
+i.e., those attribute statements appearing before any node, edge or
+subgraph definitions.
+In addition, these flags cause the related attributes to be permanently
+attached to the graph. Thus, if attributed dot is used for
+output, the graph will have these attributes.
+<H3>Environment Variables</H3>
+<DL>
+<DT><STRONG>GDFONTPATH</STRONG>
+<DD>
+List of pathnames giving directories which a program should search for fonts.
+Overridden by <A HREF=#d:DOTFONTPATH>DOTFONTPATH</A>.
+<IT>Used only if Graphviz is not built with the <TT>fontconfig</TT> library</IT>
+<DT><A NAME=d:DOTFONTPATH><STRONG>DOTFONTPATH</STRONG></A>
+<DD>
+List of pathnames giving directories which a program should search for fonts.
+Overridden by <A HREF=attrs.html#d:fontpath><STRONG>fontpath</STRONG></A>.
+<IT>Used only if Graphviz is not built with the <TT>fontconfig</TT> library</IT>
+<DT><A NAME=d:SERVER_NAME><STRONG>SERVER_NAME</STRONG></A>
+<DD>
+If defined, this indicates that the software is running as a web application,
+which restricts access to image files. See 
+<A HREF=d:GV_FILE_PATH>GV_FILE_PATH</A>.
+<DT><A NAME=d:GV_FILE_PATH><STRONG>GV_FILE_PATH</STRONG></A>
+<DD>
+If <A HREF=d:SERVER_NAME>SERVER_NAME</A> is defined, image files are
+restricted to the directory specified by <TT>GV_FILE_PATH</TT>.
+Note that sometimes, when using one of the layout programs in a web
+script, it is not enough to use an export command but rather the
+variables should be set when the command is run, for example,<BR>
+<CODE>
+SERVER_NAME=xxx GV_FILE_PATH="images/" dot -Tpng -o x.png x.dot
+</CODE>
+<DT><A NAME=d:GVBINDIR><STRONG>GVBINDIR</STRONG></A>
+<DD>
+Indicates which directory contains the Graphviz config file and
+plug-in libraries. If it is defined, the value overrides any other
+mechanism for finding this directory. If Graphviz is properly installed,
+it should not be needed, though it can be useful for relocation on
+platforms not running Linux or Windows.
+</DL>
+</BODY>
+</HTML>
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/component.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/constraint.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/diamond.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/doublecircle.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/doubleoctagon.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/egg.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/ellipse.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/fill.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/folder.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/forward.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/grammar.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML VERSION="2.0">
+<HEAD>
+<TITLE>Command-line Invocation</TITLE>
+</HEAD>
+<BODY BGCOLOR=white>
+<A NAME="top"></A>
+<H1 align=CENTER>Command-line Invocation</H1>
+<HR>
+<H2>Flags</H1>
+<DL>
+<DT>-Gname=value   
+<DT>Set graph attribue
+<DT>-Nname=value   
+<DT>Set default node attribue
+<DT>-Ename=value   
+<DT>Set default edge attribue
+<DT>-T<lang>       
+<DT>Set output language (see output_info)
+<DT>-V             
+<DT>Emit version info and exit
+<DT>-l<libfile>    
+<DT>User-supplied, device-depende library. Multiple libraries may
+be given. These names are passed to the code generator at the
+beginning of output.
+<DT>-n[<num>]      
+<DT>Sets no-op flag in neato. In this case, neato assumes nodes
+have already been positioned and have a pos attribute giving
+this position. It then just computes the edge layouts and
+emits the graph in the appropriate format. If <num> is used
+and > 1, neato checks for previously positioned edges, with
+control points provided in the pos attribute. It uses these
+if given; otherwise, it computes the edge layout.
+<DT>-o<outfile>    
+<DT>write output to outfile (default: stdout)
+<DT>-s<scale>      
+<DT>Set input scale to <scale>. If this value is omitted,
+72.0 is used. This number is used to convert pos point
+units into inches. For example, dot -Tdot produces pos
+values in points. To use this as input to neato -n, one
+needs -s (equivalently, -s72).
+<DT>-v             
+<DT>verbose mode
+<DT>-x             
+<DT>In neato, on input, prune isolated nodes and peninsulas
+</DL>
+</BODY>
+</HTML>
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/hexagon.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/house.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/html1.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/html2.dot	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,46 @@
+digraph G {
+  rankdir=LR
+  node [shape=plaintext]
+  a [
+     label=<
+<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+  <TR><TD ROWSPAN="3" BGCOLOR="yellow">class</TD></TR>
+  <TR><TD PORT="here" BGCOLOR="lightblue">qualifier</TD></TR>
+</TABLE>>
+  ]
+    b [shape=ellipse style=filled
+  label=<
+<TABLE BGCOLOR="bisque">
+  <TR><TD COLSPAN="3">elephant</TD> 
+      <TD ROWSPAN="2" BGCOLOR="chartreuse" 
+          VALIGN="bottom" ALIGN="right">two</TD> </TR>
+  <TR><TD COLSPAN="2" ROWSPAN="2">
+        <TABLE BGCOLOR="grey">
+          <TR> <TD>corn</TD> </TR> 
+          <TR> <TD BGCOLOR="yellow">c</TD> </TR> 
+          <TR> <TD>f</TD> </TR> 
+        </TABLE> </TD>
+      <TD BGCOLOR="white">penguin</TD> 
+  </TR> 
+  <TR> <TD COLSPAN="2" BORDER="4" ALIGN="right" PORT="there">4</TD> </TR>
+</TABLE>>
+  ]
+  c [ 
+  label=<long line 1<BR/>line 2<BR ALIGN="LEFT"/>line 3<BR ALIGN="RIGHT"/>>
+  ]
+
+  subgraph { rank=same b c }
+  a:here -> b:there [arrowtail = diamond]
+  c -> b
+  d [shape=triangle]
+  d -> c [label=<
+<TABLE>
+  <TR><TD BGCOLOR="red" WIDTH="10"> </TD>
+      <TD>Edge labels<BR/>also</TD>
+      <TD BGCOLOR="blue" WIDTH="10"> </TD>
+  </TR>
+</TABLE>>
+  ]
+ 
+}
+
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/html2.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/html3.dot	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+digraph structs {
+    node [shape=plaintext];
+
+    struct1 [label=<<TABLE>
+	<TR>
+	    <TD>line 1</TD>
+	    <TD BGCOLOR="blue"><FONT COLOR="white">line2</FONT></TD>
+	    <TD BGCOLOR="gray"><FONT POINT-SIZE="24.0">line3</FONT></TD>
+	    <TD BGCOLOR="yellow"><FONT POINT-SIZE="24.0" FACE="playbill">line4</FONT></TD>
+	    <TD>
+	      <TABLE CELLPADDING="0" BORDER="0" CELLSPACING="0">
+          <TR>
+            <TD><FONT COLOR="green">Mixed</FONT></TD>
+            <TD><FONT COLOR="red">fonts</FONT></TD>
+          </TR>
+	      </TABLE>
+        </TD>
+	</TR>
+    </TABLE>>];
+}
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/html3.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/html4.dot	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+digraph structs {
+    node [shape=plaintext];
+
+    struct1 [label=<<TABLE>
+    <TR><TD><IMG SRC="eqn.png"/></TD></TR>
+    <TR><TD>caption</TD></TR>
+    </TABLE>>];
+}
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/html4.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/index.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML VERSION="2.0">
+<HEAD>
+<TITLE>GraphViz Reference</TITLE>
+</HEAD>
+<BODY BGCOLOR=white>
+<A NAME="top"></A>
+<H1 align=CENTER>GraphViz Reference</H1>
+<HR>
+<A HREF=lang.html>The DOT Language</A><BR>
+<A HREF=command.html>Command-line Usage</A><BR>
+<A HREF=output.html>Output Formats</A><BR>
+<A HREF=attrs.html>Graph Attributes</A><BR>
+<A HREF=shapes.html>Node Shapes</A><BR>
+<A HREF=colors.html>Colors</A><BR>
+</BODY>
+</HTML>
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/invhouse.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/invtrapezium.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/invtriangle.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/lang.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,215 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<!--
+    This is a generated document.  Do not edit.
+-->
+<HTML VERSION="2.0">
+<HEAD>
+<TITLE>The DOT Language</TITLE>
+</HEAD>
+<BODY BGCOLOR=white>
+<A NAME="top"></A>
+<H1 ALIGN=CENTER>The DOT Language</H1>
+<HR>
+The following is an abstract grammar defining the DOT language.
+Terminals are shown in bold font and nonterminals in italics.
+Literal characters are given in single quotes.
+Parentheses ( and ) indicate grouping when needed.
+Square brackets [ and ] enclose optional items.
+Vertical bars | separate alternatives.
+<TABLE>
+<TR>
+  <TD ALIGN=RIGHT><I>graph</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT>[ <B>strict</B> ] (<B>graph</B> | <B>digraph</B>) [ <I>ID</I> ] <B>'{'</B> <I>stmt_list</I> <B>'}'</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>stmt_list</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT>[ <I>stmt</I> [ <B>';'</B> ] [ <I>stmt_list</I> ] ]</TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>stmt</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><I>node_stmt</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><I>edge_stmt</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><I>attr_stmt</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><I>ID</I> <B>'='</B> <I>ID</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><I>subgraph</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>attr_stmt</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT>(<B>graph</B> | <B>node</B> | <B>edge</B>) <I>attr_list</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>attr_list</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><B>'['</B> [ <I>a_list</I> ] <B>']'</B> [ <I>attr_list</I> ]</TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>a_list</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><I>ID</I> [ <B>'='</B> <I>ID</I> ] [ <B>','</B> ] [ <I>a_list</I> ]</TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>edge_stmt</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT>(<I>node_id</I> | <I>subgraph</I>) <I>edgeRHS</I> [ <I>attr_list</I> ]</TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>edgeRHS</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><I>edgeop</I> (<I>node_id</I> | <I>subgraph</I>) [ <I>edgeRHS</I> ]</TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>node_stmt</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><I>node_id</I> [ <I>attr_list</I> ]</TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>node_id</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><I>ID</I> [ <I>port</I> ]</TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>port</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><B>':'</B> <I>ID</I> [ <B>':'</B> <I>compass_pt</I> ]</TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>':'</B> <I>compass_pt</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>subgraph</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT>[ <B>subgraph</B> [ <I>ID</I> ] ] <B>'{'</B> <I>stmt_list</I> <B>'}'</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>compass_pt</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT>(<B>n</B> | <B>ne</B> | <B>e</B> | <B>se</B> | <B>s</B> | <B>sw</B> | <B>w</B> | <B>nw</B> | <B>c</B> | <B>_</B>)</TD>
+</TR>
+</TABLE>
+<P>
+The keywords <B>node</B>, <B>edge</B>, <B>graph</B>, <B>digraph</B>,
+<B>subgraph</B>, and <B>strict</B> are case-independent.
+Note also that the allowed compass point values are not keywords, so
+these strings can be used elsewhere as ordinary identifiers and, conversely,
+the parser will actually accept any identifier.
+<P>
+An <I>ID</I> is one of the following: 
+<MENU>
+<LI> Any string of alphabetic (<TT>[a-zA-Z\200-\377]</TT>) characters, underscores (<TT>'_'</TT>) or
+digits (<TT>[0-9]</TT>), not beginning with a digit;
+<LI> a number [<tt>-</tt>]<sup>?</sup>(<tt>.</tt>[<tt>0</tt>-<tt>9</tt>]<sup>+</sup>  | [<tt>0</tt>-<tt>9</tt>]<sup>+</sup>(<tt>.</tt>[<tt>0</tt>-<tt>9</tt>]<sup>*</sup>)<sup>?</sup> ); 
+<LI> any double-quoted string (&quot;...&quot;) possibly containing escaped 
+quotes (\&quot;)<SUP>1</SUP>;
+<LI> an <A NAME=html>HTML string</A> (&lt;...&gt;).
+</MENU>
+Note that in HTML strings, angle
+brackets must occur in matched pairs, and unescaped newlines are allowed.
+In addition, the content must be legal XML, so that the special XML
+escape sequences for &quot;, &amp;, &lt;, and &gt; may be necessary
+in order to embed these characters in attribute values or raw text.
+<P>
+Both quoted strings and HTML strings are scanned as a unit, so
+any embedded comments will be treated as part of the strings.
+<P>
+An <I>edgeop</I> is <TT>-></TT> in directed graphs and <TT>--</TT> in
+undirected graphs.
+<P>
+An <I>a_list</I> clause of the form <I>ID</I> is equivalent to
+<I>ID</I><TT>=true</TT>.
+<P>
+The language supports C++-style comments: <TT>/* */</TT> and <TT>//</TT>.
+In addition, a line beginning with a '#' character is considered a line
+output from a C preprocessor (e.g., #  34 to indicate line 34 ) and discarded.
+<P>
+Semicolons aid readability but are not required except in the rare case
+that a named subgraph with no body immediately preceeds an anonymous
+subgraph, since the precedence rules cause this sequence to be parsed as
+a subgraph with a heading and a body.
+Also, any amount of whitespace may be inserted between terminals.
+<P>
+As another aid for readability, dot allows single logical lines to
+span multiple physical lines using the standard C convention of a
+backslash immediately preceding a newline character. In addition, 
+double-quoted strings can be concatenated using a '+' operator.
+As HTML strings can contain newline characters, they do not support the
+concatenation operator.
+<H2>Semantic Notes</H2>
+If a default attribute is
+defined using a <B>node</B>,  <B>edge</B>, or  <B>graph</B> statement,
+or by an attribute assignment not attached to a node or edge, any object of the
+appropriate type defined afterwards will inherit this attribute value.
+This holds until the default attribute is set to a new value, from which
+point the new value is used. Objects defined before a default attribute
+is set will have an empty string value attached to the attribute once
+the default attribute definition is made.
+<P>
+Note, in particular, that a subgraph receives the attribute settings of
+its parent graph at the time of its definition. This can be useful; for
+example, one can assign a font to the root graph and all subgraphs will
+also use the font. For some attributes, however, this property is
+undesirable. If one attaches a label to the root graph, it is probably
+not the desired effect to have the label used by all subgraphs. Rather
+than listing the graph attribute at the top of the graph, and the
+resetting the attribute as needed in the subgraphs, one can simple defer
+the attribute definition if the graph until the appropriate subgraphs
+have been defined.
+<P>
+If an edge belongs to a cluster, its endpoints belong to that cluster.
+Thus, where you put an edge can effect a layout, as clusters are sometimes
+laid out recursively.
+<H2>Character encodings</H2>
+The DOT language assumes at least the ascii character set.
+Quoted strings, both ordinary and HTML-like, may contain non-ascii characters.
+In most cases, these strings are uninterpreted: they simply serve as
+unique identifiers or values passed through untouched. Labels, however,
+are meant to be displayed, which requires that the software be able to
+compute the size of the text and determine the appropriate glyphs. 
+For this, it needs to know what character encoding is used.
+<P>
+By default, DOT assumes the UTF-8 character encoding. It also accepts
+the Latin1 (ISO-8859-1) character set, assuming the input graph uses
+the <B><A HREF=attrs.html#a:charset>charset</A></B> attribute to 
+specify this. For graphs using other
+character sets, there are usually programs, such as <TT>iconv</TT>, which
+will translate from one character set to another.
+<P>
+Another way to avoid non-ascii characters in labels is to use HTML entities
+for special characters. During label evaluation, these entities are
+translated into the underlying character. This
+<a HREF="http://www.graphviz.org/doc/char.html">
+table</a> shows the supported entities, with their Unicode value, a typical
+glyph, and the HTML entity name. Thus, to include a lower-case Greek beta
+into a string, one can use the ascii sequence <TT>&amp;beta;</TT>. 
+In general, one should only use entities that are allowed in the output
+character set, and for which there is a glyph in the font.
+<HR>
+<OL TYPE="1">
+<LI> In quoted strings in DOT, the only escaped character is double-quote
+("). That is, in quoted strings, the dyad \" is converted to "; all other
+characters are left unchanged. In particular, \\ remains \\. Layout
+engines may apply additional escape sequences.
+</OL>
+</BODY>
+</HTML>
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/mrecord.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/nohead.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/none.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/note.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/octagon.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/output.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,582 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<!--
+    This is a generated document.  Do not edit.
+-->
+<HTML VERSION="2.0">
+<HEAD>
+<TITLE>Output Formats</TITLE>
+</HEAD>
+<BODY BGCOLOR=white>
+<A NAME="top"></A>
+<H1 align=CENTER>Output Formats</H1>
+<HR>
+The output format is specified with the <STRONG>-T</STRONG><I>lang</I>
+flag on the <A HREF=command.html>command line</A>, where <I>lang</I>
+is one of the parameters listed below.
+<P>
+The formats actually available in a given Graphviz system depend on
+how the system was built and the presence of additional libraries.
+To see what formats <b>dot</b> supports, run <TT>dot -T?</TT>.
+See the <A HREF=command.html#d.T> description of the -T</A>
+flag for additional information.
+<P>
+Note that the internal coordinate system has the origin
+in the lower left corner.
+Thus, positions in the
+<A HREF=#d:canon>canon</A>,
+<A HREF=#d:dot>dot</A>,
+<A HREF=#d:xdot>xdot</A>,
+<A HREF=#d:plain>plain</A>, and
+<A HREF=#d:plain-ext>plain-ext</A>
+formats need to be interpreted in this manner.
+<P>
+<TABLE ALIGN=CENTER>
+<TR><TH>Command-line<BR>parameter</TH><TH>Format</TH></TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:bmp HREF=#d:bmp>bmp</A>
+</TD><TD>Windows Bitmap Format</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:canon HREF=#d:canon>canon</A>
+<BR><A NAME=a:dot HREF=#d:dot>dot</A>
+<BR><A NAME=a:xdot HREF=#d:xdot>xdot</A>
+</TD><TD>DOT</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:cmap HREF=#d:cmap>cmap</A>
+</TD><TD>Client-side imagemap (deprecated)</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:dia HREF=#d:dia>dia</A>
+</TD><TD>Dia format</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:eps HREF=#d:eps>eps</A>
+</TD><TD>Encapsulated PostScript</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:fig HREF=#d:fig>fig</A>
+</TD><TD>FIG</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:gd HREF=#d:gd>gd</A>
+<BR><A NAME=a:gd2 HREF=#d:gd2>gd2</A>
+</TD><TD>GD/GD2 formats</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:gif HREF=#d:gif>gif</A>
+</TD><TD>GIF</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:gtk HREF=#d:gtk>gtk</A>
+</TD><TD>GTK canvas</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:hpgl HREF=#d:hpgl>hpgl</A>
+</TD><TD>HP-GL/2</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:ico HREF=#d:ico>ico</A>
+</TD><TD>Icon Image File Format</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:imap HREF=#d:imap>imap</A>
+<BR><A NAME=a:cmapx HREF=#d:cmapx>cmapx</A>
+</TD><TD>Server-side and client-side imagemaps</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:imap_np HREF=#d:imap_np>imap_np</A>
+<BR><A NAME=a:cmapx_np HREF=#d:cmapx_np>cmapx_np</A>
+</TD><TD>Server-side and client-side imagemaps</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:ismap HREF=#d:ismap>ismap</A>
+</TD><TD>Server-side imagemap (deprecated)</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:jpg HREF=#d:jpg>jpg</A>
+<BR><A NAME=a:jpeg HREF=#d:jpeg>jpeg</A>
+<BR><A NAME=a:jpe HREF=#d:jpe>jpe</A>
+</TD><TD>JPEG</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:mif HREF=#d:mif>mif</A>
+</TD><TD>FrameMaker MIF format</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:mp HREF=#d:mp>mp</A>
+</TD><TD>MetaPost</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:pcl HREF=#d:pcl>pcl</A>
+</TD><TD>PCL</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:pdf HREF=#d:pdf>pdf</A>
+</TD><TD>Portable Document Format (PDF)</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:pic HREF=#d:pic>pic</A>
+</TD><TD>PIC</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:plain HREF=#d:plain>plain</A>
+<BR><A NAME=a:plain-ext HREF=#d:plain-ext>plain-ext</A>
+</TD><TD>Simple text format</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:png HREF=#d:png>png</A>
+</TD><TD>Portable Network Graphics format</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:ps HREF=#d:ps>ps</A>
+</TD><TD>PostScript</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:ps2 HREF=#d:ps2>ps2</A>
+</TD><TD>PostScript for PDF</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:svg HREF=#d:svg>svg</A>
+<BR><A NAME=a:svgz HREF=#d:svgz>svgz</A>
+</TD><TD>Scalable Vector Graphics</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:tga HREF=#d:tga>tga</A>
+</TD><TD>Truevision Targa Format (TGA)</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:tif HREF=#d:tif>tif</A>
+<BR><A NAME=a:tiff HREF=#d:tiff>tiff</A>
+</TD><TD>TIFF (Tag Image File Format)</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:vml HREF=#d:vml>vml</A>
+<BR><A NAME=a:vmlz HREF=#d:vmlz>vmlz</A>
+</TD><TD>Vector Markup Language (VML)</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:vrml HREF=#d:vrml>vrml</A>
+</TD><TD>VRML</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:vtx HREF=#d:vtx>vtx</A>
+</TD><TD>Visual Thought format</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:wbmp HREF=#d:wbmp>wbmp</A>
+</TD><TD>Wireless BitMap format</TD> </TR>
+ <TR><TD ALIGN=CENTER><A NAME=a:xlib HREF=#d:xlib>xlib</A>
+</TD><TD>Xlib canvas</TD> </TR>
+</TABLE>
+<HR>
+<H2>Format Descriptions</H2>
+<DL>
+<DT><A NAME=d:bmp HREF=#a:bmp><STRONG>bmp</STRONG></A>
+<DD>Outputs images in the Windows <A HREF="http://en.wikipedia.org/wiki/Bitmap">BMP</A> format.
+
+<DT><A NAME=d:canon HREF=#a:canon><STRONG>canon</STRONG></A>
+,<DT><A NAME=d:dot HREF=#a:dot><STRONG>dot</STRONG></A>
+,<DT><A NAME=d:xdot HREF=#a:xdot><STRONG>xdot</STRONG></A>
+<DD>These formats produce output in the
+<A HREF=lang.html>dot language</A>.
+Using <B>canon</B> produces a prettyprinted version of the input,
+with no layout performed.
+<P>
+The <B>dot</B> option corresponds to attributed dot output,
+and is the default output format.
+It reproduces the input, along with layout information for the graph.
+In particular, a <A HREF=attrs.html#d:bb>bb</A> attribute is
+attached to the graph, specifying the bounding box of the drawing.
+If the graph has a label, its position is specified by the
+<A HREF=attrs.html#d:lp>lp</A> attribute.
+<P>
+Each node gets <A HREF=attrs.html#d:pos>pos</A>,
+<A HREF=attrs.html#d:width>width</A> and
+<A HREF=attrs.html#d:height>height</A> attributes. If the node is a record,
+the record rectangles are given in the
+<A HREF=attrs.html#d:rects>rects</A> attribute.
+If the node is a polygon and the
+<A HREF=attrs.html#d:vertices>vertices</A> attribute is defined, this
+attribute contains the vertices of the node.
+<P>
+Every edge is
+assigned a <A HREF=attrs.html#d:pos>pos</A> attribute,
+and if the edge has a label, the label position
+is given in <A HREF=attrs.html#d:lp>lp</A>.
+<P>
+The <B>xdot</B> format extends the
+<B>dot</B> format by providing much more detailed information about
+how graph components are drawn. It relies on additional attributes
+for nodes, edges and graphs.
+<P>
+The format is preliminary; comments and
+suggestions for better representations are welcome.
+To allow for changes in the format, Graphviz attaches the attribute
+<TT>xdotversion</TT> to the graph.
+<P>
+Additional drawing attributes can appear on nodes, edges, clusters and 
+on the graph itself. There are six new attributes: 
+<SPACER TYPE=VERTICAL size=10>
+<TABLE  border bgcolor=beige>
+<TR><TD>_draw_<TD colspan=2>Drawing operations
+<TR><TD>_ldraw_<TD colspan=2>Label drawing
+<TR><TD>_hdraw_<TD>Head arrowhead<TD>Edge only
+<TR><TD>_tdraw_<TD>Tail arrowhead<TD>Edge only
+<TR><TD>_hldraw_<TD>Head label<TD>Edge only
+<TR><TD>_tldraw_<TD>Tail label<TD>Edge only
+</TABLE>
+<P>
+For a given graph object, one will typically a draw directive before the
+label directive. For example, for a node, one would first use the commands
+in <B>_draw_</B> followed by the commands in <B>_ldraw_</B>.
+<P>
+The value of these attributes consists of the concatenation of some
+(multi-)set of the following 13 rendering or attribute operations.
+(The number is parentheses gives the xdot version when the operation
+was added to the format. If no version number is given, the operation
+was in the original specification.)
+<SPACER TYPE=VERTICAL size=10>
+<TABLE border bgcolor=beige>
+<TR><TD>E x<sub>0</sub> y<sub>0</sub> w h
+<TD>Filled ellipse ((x-x<sub>0</sub>)/w)<sup>2</sup> + ((y-y<sub>0</sub>)/h)<sup>2</sup> = 1
+<TR><TD>e x<sub>0</sub> y<sub>0</sub> w h
+<TD>Unfilled ellipse ((x-x<sub>0</sub>)/w)<sup>2</sup> + ((y-y<sub>0</sub>)/h)<sup>2</sup> = 1
+<TR><TD>P n x<sub>1</sub> y<sub>1</sub> ... x<sub>n</sub> y<sub>n</sub>
+<TD>Filled polygon using the given n points
+<TR><TD>p n x<sub>1</sub> y<sub>1</sub> ... x<sub>n</sub> y<sub>n</sub>
+<TD>Unfilled polygon using the given n points
+<TR><TD>L n x<sub>1</sub> y<sub>1</sub> ... x<sub>n</sub> y<sub>n</sub>
+<TD>Polyline using the given n points
+<TR><TD>B n x<sub>1</sub> y<sub>1</sub> ... x<sub>n</sub> y<sub>n</sub>
+<TD>B-spline using the given n control points
+<TR><TD>b n x<sub>1</sub> y<sub>1</sub> ... x<sub>n</sub> y<sub>n</sub>
+<TD>Filled B-spline using the given n control points (1.1)
+<TR><TD>T x y j w n -<I>b<sub>1</sub>b<sub>2</sub>...b<sub>n</sub></I>
+<TD>Text drawn using the baseline point (x,y). The text consists of the
+n bytes following '-'. The text should be left-aligned (centered,
+right-aligned) on the point if j is -1 (0, 1), respectively. The value
+w gives the width of the text as computed by the library.
+<TR><TD>C n -<I>b<sub>1</sub>b<sub>2</sub>...b<sub>n</sub></I>
+<TD>Set fill color. The color value consists of the
+n bytes following '-'. (1.1)
+<TR><TD>c n -<I>b<sub>1</sub>b<sub>2</sub>...b<sub>n</sub></I>
+<TD>Set pen color. The color value consists of the
+n bytes following '-'. (1.1)
+<TR><TD>F s n -<I>b<sub>1</sub>b<sub>2</sub>...b<sub>n</sub></I>
+<TD>Set font. The font size is s points. The font name consists of the
+n bytes following '-'. (1.1)
+<TR><TD>S n -<I>b<sub>1</sub>b<sub>2</sub>...b<sub>n</sub></I>
+<TD>Set style attribute. The style value consists of the
+n bytes following '-'. The syntax of the value is the same as
+specified for a <B>styleItem</B> in <A HREF=attrs.html#k:style>style</A>. (1.1)
+<TR><TD>I x y w h n -<I>b<sub>1</sub>b<sub>2</sub>...b<sub>n</sub></I>
+<TD>Externally-specified image drawn in the box with lower left
+corner (x,y) and upper right corner (x+w,y+h). The name of the image
+consists of the n bytes following '-'. This is usually a bitmap
+image. Note that the image size, even when converted from pixels to
+points, might be different from the required size (w,h). It is
+assumed the renderer will perform the necessary scaling. (1.2)
+</TABLE>
+<P>
+Note that the filled figures (ellipses, polygons and B-Splines)
+imply two operations: first, drawing the filled figure with the
+current fill color; second, drawing an unfilled figure with the
+current pen color, pen width and pen style.
+the
+<P>
+Style values which can be incorporated in the graphics model do not
+appear in xdot output. In particular, the style values
+<TT>filled</TT>, <TT>rounded</TT>, <TT>diagonals</TT>, and <TT>invis</TT>
+will not appear. Indeed, if style contains <TT>invis</TT>, 
+there will not be any xdot output at all.
+<P>
+In handling text alignment, the application may want to recompute the
+string width using its own rendering primitives.
+<P>
+The text operation is only used in the label attributes. Normally,
+the non-text operations are only used in the non-label attributes.
+If, however, the <A HREF=attrs.html#d:decorate>decorate</A>
+attribute is set on an edge, its label
+attribute will also contain a polyline operation.
+In addition, if a label is a complex, HTML-like label, it will also
+contain non-text operations.
+<P>
+All coordinates and sizes are in points.
+Note though that if
+an edge or node is invisible, no drawing operations are attached to it.
+<P>
+Version info:
+<TABLE  border >
+<TR><TH>Xdot version</TH><TH>Graphviz version</TH></TR>
+<TR><TD>1.0</TD><TD>1.9</TD></TR>
+<TR><TD>1.1</TD><TD>2.8</TD></TR>
+<TR><TD>1.2</TD><TD>2.13</TD></TR>
+</TABLE>
+
+<DT><A NAME=d:cmap HREF=#a:cmap><STRONG>cmap</STRONG></A>
+<DD>Produces map files for client-side image maps. The cmap format is
+mostly identical to cmapx, but the latter is well-formed XML amenable
+to processing by XML tools. In particular, the cmapx output is wrapped in
+&lt;map&gt;&lt;/map&gt;.
+<P>
+See <A HREF=#ID>Note</A>.
+
+<DT><A NAME=d:dia HREF=#a:dia><STRONG>dia</STRONG></A>
+<DD>Produces <A HREF="http://www.gnome.org/projects/dia/">Dia</A> output.
+
+<DT><A NAME=d:eps HREF=#a:eps><STRONG>eps</STRONG></A>
+<DD>Produces Encapsulated PostScript output.
+At present, this is only guaranteed to be correct for a single
+input graph since the Bounding Box information has to appear
+at the beginning of the output, and this will be based on the first graph.
+
+<DT><A NAME=d:fig HREF=#a:fig><STRONG>fig</STRONG></A>
+<DD>Outputs graphs in the FIG graphics language.
+
+<DT><A NAME=d:gd HREF=#a:gd><STRONG>gd</STRONG></A>
+,<DT><A NAME=d:gd2 HREF=#a:gd2><STRONG>gd2</STRONG></A>
+<DD>Output images in the GD and GD2 format. These are the internal
+formats used by the gd library. The latter is compressed.
+
+<DT><A NAME=d:gif HREF=#a:gif><STRONG>gif</STRONG></A>
+<DD>Outputs GIF bitmap images.
+
+<DT><A NAME=d:gtk HREF=#a:gtk><STRONG>gtk</STRONG></A>
+<DD>Creates a <A HREF="http://www.gtk.org/">GTK</A> window and displays the output there.
+
+<DT><A NAME=d:hpgl HREF=#a:hpgl><STRONG>hpgl</STRONG></A>
+<DD>Produces output in the HP-GL/2 vector graphic printer language.
+
+<DT><A NAME=d:ico HREF=#a:ico><STRONG>ico</STRONG></A>
+<DD>Outputs images in the Windows <A HREF="http://en.wikipedia.org/wiki/ICO_(icon_image_file_format)">ICO format</A>.
+
+<DT><A NAME=d:imap HREF=#a:imap><STRONG>imap</STRONG></A>
+,<DT><A NAME=d:cmapx HREF=#a:cmapx><STRONG>cmapx</STRONG></A>
+<DD>Produces map files for server-side and client-side image maps,
+These can be used in a web page with
+a graphical form of the output, e.g. in JPEG or GIF format, to attach
+links to nodes and edges. For example, to create a server-side map
+given the dot file
+<PRE>
+/* x.dot */
+digraph mainmap {
+  URL="http://www.research.att.com/base.html";
+  command [URL="http://www.research.att.com/command.html"];
+  command -> output [URL="colors.html"];
+}
+</PRE>
+one would process the graph and generate two output files:
+<PRE>
+dot -Timap -ox.map -Tgif -ox.gif x.dot
+</PRE>
+and then refer to it in a web page:
+<XMP>
+<A HREF="x.map"><IMG SRC="x.gif" ismap="ismap" /></A>
+</XMP>
+For client-side maps, one again generates two output files:
+<PRE>
+dot -Tcmapx -ox.map -Tgif -ox.gif x.dot
+</PRE>
+and uses the HTML
+<XMP>
+<IMG SRC="x.gif" USEMAP="#mainmap" />
+... [content of x.map] ...
+</XMP>
+<A HREF=attrs.html#d:URL>URLs</A> can be attached to the root
+graph, nodes and edges. If a node has a URL, clicking in the node
+will activate the link.
+If an edge has a URL, various
+points along the edge (but not necessarily the head or tail)
+will link to it. In addition, if the edge has a
+<A HREF=attrs.html#d:label>label</A>, that will link
+to the URL.
+As for the head of the edge, this is linked to the
+<A HREF=attrs.html#d:headURL>headURL</A>, if set.
+Otherwise, it is linked to the edge's URL if that is defined.
+The analogous description holds for the tail and the
+<A HREF=attrs.html#d:tailURL>tailURL</A>.
+A URL associated with the graph is used as a default link.
+<P>
+If the URL
+of a node contains the escape sequence "\N", it will be replaced by
+the node's name.
+If the headURL is defined and contains the escape sequence "\N",
+it will be replaced by
+the <A HREF=attrs.html#d:headlabel>headlabel</A>, if defined.
+The analogous result holds for the tailURL and the
+<A HREF=attrs.html#d:taillabel>taillabel</A>.
+<P>
+See <A HREF=#ID>Note</A>.
+
+<DT><A NAME=d:imap_np HREF=#a:imap_np><STRONG>imap_np</STRONG></A>
+,<DT><A NAME=d:cmapx_np HREF=#a:cmapx_np><STRONG>cmapx_np</STRONG></A>
+<DD>These are identical to the imap and cmapx formats, except they
+rely solely on rectangles as active areas.
+
+<DT><A NAME=d:ismap HREF=#a:ismap><STRONG>ismap</STRONG></A>
+<DD>Produces HTML image map files. This is a predecessor (circa 1994)
+of the IMAP format.  Most servers now use the latter.
+<A HREF=attrs.html#d:URL>URLs</A> can be attached to the root graph,
+nodes and edges. Since edge
+links are attached to edge labels, an edge must
+have a <A HREF=attrs.html#d:label>label</A> for its
+URL to be used. For both nodes and edges, if the URL has the escape
+sequence "\N" embedded in its string, this will be replaced with the
+node or edge name.
+
+<DT><A NAME=d:jpg HREF=#a:jpg><STRONG>jpg</STRONG></A>
+,<DT><A NAME=d:jpeg HREF=#a:jpeg><STRONG>jpeg</STRONG></A>
+,<DT><A NAME=d:jpe HREF=#a:jpe><STRONG>jpe</STRONG></A>
+<DD>Output JPEG compressed image files.
+
+<DT><A NAME=d:mif HREF=#a:mif><STRONG>mif</STRONG></A>
+<DD>Generates Frame Maker MIF files.
+
+<DT><A NAME=d:mp HREF=#a:mp><STRONG>mp</STRONG></A>
+<DD>Produces <A HREF="http://cm.bell-labs.com/who/hobby/MetaPost.html">MetaPost</A> output.
+
+<DT><A NAME=d:pcl HREF=#a:pcl><STRONG>pcl</STRONG></A>
+<DD>Produces output in the PCL printer language.
+<A HREF=#d:hpgl>HP-GL</A> is a subset of
+PCL, so that PCL output is the same as HP-GL, wrapped with some initial
+and final commands to set the printer to and from HP-GL mode.
+
+<DT><A NAME=d:pdf HREF=#a:pdf><STRONG>pdf</STRONG></A>
+<DD>Produces <A HREF="http://www.adobe.com/devnet/pdf/">PDF</A> output.
+(This option assumes Graphviz includes the Cairo renderer.)
+Alternatively, one can use the <A HREF="#d:ps2">ps2</A> option to
+produce PDF-compatible PostScript, and then use a ps-to-pdf converter.
+<P>
+Note: At present, this option does not support anchors, etc. To get these
+included in your PDF output, use <A HREF="#d:ps2">ps2</A>.
+
+<DT><A NAME=d:pic HREF=#a:pic><STRONG>pic</STRONG></A>
+<DD>Outputs in PIC, the picture description language in the troff-family
+
+<DT><A NAME=d:plain HREF=#a:plain><STRONG>plain</STRONG></A>
+,<DT><A NAME=d:plain-ext HREF=#a:plain-ext><STRONG>plain-ext</STRONG></A>
+<DD>The plain and plain-ext formats produce output using
+a simple, line-based language.
+The latter format differs in that, on edges, it provides port names
+on head and tail nodes when applicable.
+<P>
+There are four types of statements.
+<PRE>
+ <STRONG>graph</STRONG> <I>scale</I> <I>width</I> <I>height</I>
+ <STRONG>node</STRONG> <I>name</I> <I>x</I> <I>y</I> <I>width</I> <I>height</I> <I>label</I> <I>style</I> <I>shape</I> <I>color</I> <I>fillcolor</I>
+ <STRONG>edge</STRONG> <I>tail</I> <I>head</I> <I>n</I> <I>x<sub>1</sub></I> <I>y<sub>1</sub></I> .. <I>x<sub>n</sub></I> <I>y<sub>n</sub></I> [<I>label</I> <I>xl</I> <I>yl</I>] <I>style</I> <I>color</I>
+ <STRONG>stop</STRONG>
+</PRE>
+<DL>
+<DT><STRONG>graph</STRONG>
+<DD>The <I>width</I> and <I>height</I> values give the width and height
+of the drawing. The lower left corner of the drawing is at the origin.
+The <I>scale</I> value indicates how the drawing should be scaled
+if a <A HREF=attrs.html#d:size>size</A> attribute was given and the drawing
+needs to be scaled to conform to that size. If no scaling is necessary,
+it will be set to 1.0. Note that all graph, node and edge
+coordinates and lengths are given unscaled.
+<DT><STRONG>node</STRONG>
+<DD>The <I>name</I> value is the name of the node, and <I>x</I> and <I>y</I>
+give the node's position. The <I>width</I> and <I>height</I> are the
+width and height of the node.
+The <I>label</I>,
+<I>style</I>, <I>shape</I>, <I>color</I> and <I>fillcolor</I> give the
+node's <A HREF=attrs.html#d:label>label</A>,
+<A HREF=attrs.html#d:style>style</A>, <A HREF=attrs.html#d:shape>shape</A>,
+<A HREF=attrs.html#d:color>color</A> and
+<A HREF=attrs.html#d:fillcolor>fillcolor</A>,
+respectively, using attribute default values where necessary. If the
+node does not have a style attribute, "solid" is used.
+<DT><STRONG>edge</STRONG>
+<DD>The <I>tail</I> and <I>head</I> values give the names of the head and
+tail nodes. In plain-ext format, the head or tail name will be appended
+with a colon and a portname if the edge connects to the node at a port.
+<I>n</I> is the number of control points defining the
+B-spline forming the edge. This is followed by 2*<I>n</I> numbers giving
+the x and y coordinates of the control points in order from tail to head.
+If the edge has a <A HREF=attrs.html#d:label>label</A>, this comes next
+followed by the x and y coordinates of the label's position.
+The edge description is completed by the edge's
+<A HREF=attrs.html#d:style>style</A> and <A HREF=attrs.html#d:color>color</A>.
+As with nodes, if a style is not defined, "solid" is used.
+<P>
+<B>Note:</B> The control points given in an edge statement define the
+body of the edge. In particular, if the edge has an arrowhead to the
+head or tail node,
+there will be a gap between the last or first control points and the
+boundary of the associated node. There are at least 3 possible ways
+of handling this gap:
+<UL>
+<LI> Arrange that the input graph uses <TT>dir=none</TT>,
+<TT>arrowhead=none</TT>, or <TT>arrowtail=none</TT> for all edges.
+In this case, the terminating control points will always touch the node.
+<LI> Consider the line segment joining the control point and the center
+of the node, and determine the point where the segment intersects the
+node's boundary. Then use the control point and the intersection point
+as the main axis of an arrowhead. The problem with this approach is
+that, if the edge has a port, the edge will not be pointing to the
+center of the node. In this case, rather than use the control point
+and center point, one can use the control point and its tangent.
+<LI> Arrange that the input graph uses <TT>headclip=false</TT> or
+<TT>tailclip=false</TT>. In this case, the edge will terminate at
+the node's center rather than its boundary. If arrowheads are used,
+there will still be a gap, but normally this will occur within the
+node. The application will still need to clip the spline to the node
+boundary. Also, as with the previous item, if the edge points to
+a node port, this technique will fail.
+</UL>
+</DL>
+The output consists of one <STRONG>graph</STRONG> line, a sequence of
+<STRONG>node</STRONG> lines, one per node, a sequence of
+<STRONG>edge</STRONG> lines, one per edge, and a final <STRONG>stop</STRONG>
+line. All units are in inches, represented by a floating point number.
+<P>
+Note that the plain formats provide minimal information, really giving not
+much more than node positions and sizes, and edge spline control points.
+These formats are usually most useful to applications wanting just this
+geometric information, and willing to fill in all of the graphical details.
+The only real advantages to these formats is their terseness and their
+ease of parsing. In general, the <A HREF=#d:dot>dot</A> and
+<A HREF=#d:xdot>xdot</A> are preferable in terms of the quantity of
+information provided.
+
+<DT><A NAME=d:png HREF=#a:png><STRONG>png</STRONG></A>
+<DD>Produces output in the PNG (Portable Network Graphics) format.
+
+<DT><A NAME=d:ps HREF=#a:ps><STRONG>ps</STRONG></A>
+<DD>Produces PostScript output.
+<P>
+Note: The default PostScript renderer can only handle the Latin-1
+character set. To get non-Latin-1 characters into PostScript output,
+use <TT>-Tps:cairo</TT>, assuming your version was built with the
+Cairo renderer.
+
+<DT><A NAME=d:ps2 HREF=#a:ps2><STRONG>ps2</STRONG></A>
+<DD>Produces PostScript output with PDF notations. It is assumed the output
+will be directly converted into PDF format. The notations include PDF
+bounding box information, so that the resulting PDF file can be correctly
+used with pdf tools, such as <STRONG>pdflatex</STRONG>.
+In addition, if a node has a URL
+attribute, this gets translated into PDF code such that the node,
+when viewed in a PDF-viewer, e.g.,
+<STRONG>acroread</STRONG>,
+is a link to the given URL. If a URL is attached to the graph, this serves
+as a base, such that relative URLs on nodes are derived from it.
+
+<DT><A NAME=d:svg HREF=#a:svg><STRONG>svg</STRONG></A>
+,<DT><A NAME=d:svgz HREF=#a:svgz><STRONG>svgz</STRONG></A>
+<DD>Produce <A HREF="http://www.adobe.com/svg/">SVG</A> output,
+the latter in compressed format.
+<P>
+See <A HREF=#ID>Note</A>.
+
+<DT><A NAME=d:tga HREF=#a:tga><STRONG>tga</STRONG></A>
+<DD>Produces <A HREF="http://en.wikipedia.org/wiki/Truevision_TGA">Targa</A> output.
+
+<DT><A NAME=d:tif HREF=#a:tif><STRONG>tif</STRONG></A>
+,<DT><A NAME=d:tiff HREF=#a:tiff><STRONG>tiff</STRONG></A>
+<DD>Produces <A HREF="http://www.libtiff.org/">TIFF</A> output.
+
+<DT><A NAME=d:vml HREF=#a:vml><STRONG>vml</STRONG></A>
+,<DT><A NAME=d:vmlz HREF=#a:vmlz><STRONG>vmlz</STRONG></A>
+<DD>Produces <A HREF="http://www.w3.org/TR/NOTE-VML">VML</A> output,
+the latter in compressed format.
+<P>
+See <A HREF=#ID>Note</A>.
+
+<DT><A NAME=d:vrml HREF=#a:vrml><STRONG>vrml</STRONG></A>
+<DD>Outputs graphs in the <A HREF="http://www.vrml.org/">VRML</A> format.
+To get a 3D embedding, nodes must have a <A HREF=attrs.html#d:z>z</A>
+attribute. These can either be supplied as part of the input graph, or
+be generated by neato provided <A HREF=attrs.html#d:dim>dim</A><TT>=3</TT>
+and at least one node has a <B>z</B> value.
+<P>
+Line segments are drawn as cylinders.
+In general, VRML output relies on having the PNG library to produce images
+used to texture-fill the node shapes. However, if
+<A HREF=attrs.html#d:shape>shape</A><TT>=point</TT>,
+a node is drawn as a 3D sphere.
+
+<DT><A NAME=d:vtx HREF=#a:vtx><STRONG>vtx</STRONG></A>
+<DD>Generates graph diagrams in the format for
+<A HREF="http://www.bombshellstudios.com/samples/co/vt.html">Confluents's Visual Thought</A>.
+
+<DT><A NAME=d:wbmp HREF=#a:wbmp><STRONG>wbmp</STRONG></A>
+<DD>Produces output in the Wireless BitMap (WBMP) format, optimized for
+mobile computing.
+
+<DT><A NAME=d:xlib HREF=#a:xlib><STRONG>xlib</STRONG></A>
+<DD>Creates an <A HREF="http://en.wikipedia.org/wiki/Xlib">Xlib</A> window and displays the output there.
+
+</DL>
+<HR>
+</BODY>
+</HTML>
+<H1 align=CENTER><A NAME=d:image_fmts>Image Formats</A></H1>
+<HR>
+The <A HREF=attrs.html#a:image>image</A> and <A HREF=attrs.html#a:shapefile>shapefile</A> attributes specify an image file to be included
+as part of the final diagram. Not all image formats can be read. In addition,
+even if read, not all image formats can necessarily be used in a given
+output format.
+<P>
+The graph below shows what image formats can be used in which output formats,
+and the required plugins. On the left are the supported image formats. 
+On the right are the supported output formats.
+In the middle are the plugins: image loaders, renderers, drivers, arranged by 
+plugin library.  
+This presents the most general case. A given installation may not provide
+one of the plugins, in which case, that transformation is not possible.
+<BR>
+<IMG WIDTH="80%" SRC="plugins.png">
+<HR>
+<H2>Notes</H2>
+<OL TYPE="1">
+<LI>
+<A NAME=ID>In the formats: -Tcmap, -Tcmapx, -Tsvg, -Tvml, the output generates
+'id="node#"' properties for nodes, 'id="edge#"' properties for edges, and 'id="cluster#"' properties for clusters, with the '#' replaced by an internally assigned integer. These strings can be provided instead by an externally provided "id=xxx" attribute on the object.
+Normal "\N" "\E" "\G" substitutions are applied.
+Externally provided id values are not used internally, and it is the use's reponsibilty to ensure
+that they are sufficiently unique for their intended downstream use.
+Note, in particular, that "\E" is not a unique id for multiedges.
+</OL>
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/parallelogram.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/pentagon.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/plaintext.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/plugins.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/point.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/polygon.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/record.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/record2.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/rect.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/rectangle.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/round.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/sdlshapes.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/septagon.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/info/shapes.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,838 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<!--
+    This is a generated document.  Do not edit.
+-->
+<HTML VERSION="2.0">
+<HEAD>
+<TITLE>Node Shapes</TITLE>
+</HEAD>
+<BODY BGCOLOR=white>
+<A NAME="top"></A>
+<H1 align=CENTER>Node Shapes</H1>
+<HR>
+The geometries of all node shapes are affected by
+the node attributes 
+<A HREF=attrs.html#d:fixedsize><TT>fixedsize</TT></A>, 
+<A HREF=attrs.html#d:fontname><TT>fontname</TT></A>, 
+<A HREF=attrs.html#d:fontsize><TT>fontsize</TT></A>, 
+<A HREF=attrs.html#d:height><TT>height</TT></A>,
+<A HREF=attrs.html#d:label><TT>label</TT></A>, 
+<A HREF=#d:style><TT>style</TT></A> and
+<A HREF=attrs.html#d:width><TT>width</TT></A>.
+
+<H2><A NAME=polygon>Polygon-based Nodes</A></H2>
+The possible polygon-based shapes are displayed below.
+<TABLE ALIGN=CENTER>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=box.gif>
+    <TD><IMG SRC=polygon.gif>
+    <TD><IMG SRC=ellipse.gif>
+    <TD><IMG SRC=circle.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:box>box</A>
+    <TD><A NAME=d:polygon>polygon</A>
+    <TD><A NAME=d:ellipse>ellipse</A>
+    <TD><A NAME=d:circle>circle</A>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=point.gif>
+    <TD><IMG SRC=egg.gif>
+    <TD><IMG SRC=triangle.gif>
+    <TD><IMG SRC=plaintext.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:point>point</A>
+    <TD><A NAME=d:egg>egg</A>
+    <TD><A NAME=d:triangle>triangle</A>
+    <TD><A NAME=d:plaintext>plaintext</A>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=diamond.gif>
+    <TD><IMG SRC=trapezium.gif>
+    <TD><IMG SRC=parallelogram.gif>
+    <TD><IMG SRC=house.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:diamond>diamond</A>
+    <TD><A NAME=d:trapezium>trapezium</A>
+    <TD><A NAME=d:parallelogram>parallelogram</A>
+    <TD><A NAME=d:house>house</A>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=pentagon.gif>
+    <TD><IMG SRC=hexagon.gif>
+    <TD><IMG SRC=septagon.gif>
+    <TD><IMG SRC=octagon.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:pentagon>pentagon</A>
+    <TD><A NAME=d:hexagon>hexagon</A>
+    <TD><A NAME=d:septagon>septagon</A>
+    <TD><A NAME=d:octagon>octagon</A>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=doublecircle.gif>
+    <TD><IMG SRC=doubleoctagon.gif>
+    <TD><IMG SRC=tripleoctagon.gif>
+    <TD><IMG SRC=invtriangle.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:doublecircle>doublecircle</A>
+    <TD><A NAME=d:doubleoctagon>doubleoctagon</A>
+    <TD><A NAME=d:tripleoctagon>tripleoctagon</A>
+    <TD><A NAME=d:invtriangle>invtriangle</A>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=invtrapezium.gif>
+    <TD><IMG SRC=invhouse.gif>
+    <TD><IMG SRC=Mdiamond.gif>
+    <TD><IMG SRC=Msquare.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:invtrapezium>invtrapezium</A>
+    <TD><A NAME=d:invhouse>invhouse</A>
+    <TD><A NAME=d:Mdiamond>Mdiamond</A>
+    <TD><A NAME=d:Msquare>Msquare</A>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=Mcircle.gif>
+    <TD><IMG SRC=rect.gif>
+    <TD><IMG SRC=rectangle.gif>
+    <TD><IMG SRC=none.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:Mcircle>Mcircle</A>
+    <TD><A NAME=d:rect>rect</A>
+    <TD><A NAME=d:rectangle>rectangle</A>
+    <TD><A NAME=d:none>none</A>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=note.gif>
+    <TD><IMG SRC=tab.gif>
+    <TD><IMG SRC=folder.gif>
+    <TD><IMG SRC=box3d.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:note>note</A>
+    <TD><A NAME=d:tab>tab</A>
+    <TD><A NAME=d:folder>folder</A>
+    <TD><A NAME=d:box3d>box3d</A>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><IMG SRC=component.gif>
+  </TR>
+  <TR ALIGN=CENTER>
+    <TD><A NAME=d:component>component</A>
+  </TR>
+</TABLE>
+As the figures suggest, the shapes <TT>rect</TT> and <TT>rectangle</TT> are synonyms for <TT>box</TT>, and <TT>none</TT> is a synonym for <TT>plaintext</TT>.
+Also, unlike the rest, we have shown these last two 
+without <TT>style=filled</TT>
+to indicate the normal use. If fill were turned on, the label text would
+appear in a filled rectangle.
+<P>
+The geometries of polygon-based shapes are also affected
+by the node attributes 
+<A HREF=attrs.html#d:regular><TT>regular</TT></A>, 
+<A HREF=attrs.html#d:peripheries><TT>peripheries</TT></A> and
+<A HREF=attrs.html#d:orientation><TT>orientation</TT></A>.
+If <TT>shape="polygon"</TT>, the attributes
+<A HREF=attrs.html#d:sides><TT>sides</TT></A>, 
+<A HREF=attrs.html#d:skew><TT>skew</TT></A> and
+<A HREF=attrs.html#d:distortion><TT>distortion</TT></A> are also used.
+If unset, they default to 4, 0.0 and 0.0, respectively.
+In addition, the 3 M* shapes support auxiliary labels using
+the <A HREF=attrs.html#d:toplabel><TT>toplabel</TT></A> and
+<A HREF=attrs.html#d:bottomlabel><TT>bottomlabel</TT></A> attributes.
+On the other hand, the point shape is special in that it is
+only affected by the <A HREF=attrs.html#d:peripheries><TT>peripheries</TT></A>, 
+<A HREF=attrs.html#d:width><TT>width</TT></A> and
+<A HREF=attrs.html#d:height><TT>height</TT></A> attributes.
+
+<H2><A NAME=record>Record-based Nodes</A></H2>
+These are specified by shape values of "record" and "Mrecord".
+The structure of a record-based node is determined by 
+its <A HREF=attrs.html#d:label><TT>label</TT></A>,
+which has the following schema:
+  <TABLE>
+  <TR><TD ALIGN=right><I>rlabel</I><TD>=<TD><I>field</I> ( '|' <I>field</I> )*</TR>
+  <TR><TD ALIGN=right>where <I>field</I><TD>=<TD>fieldId</I> or '{' <I>rlabel</I> '}'</TR>
+  <TR><TD ALIGN=right>and <I>fieldId</I><TD>=<TD> [ '<' <I>string</I> '>'] [ <I>string</I> ]</TR>
+  </TABLE>
+Literal braces, vertical bars and angle brackets must be escaped.
+Spaces are interpreted as separators between tokens,
+so they must be escaped if you want spaces in the text.
+<P>
+The first string in <I>fieldId</I> assigns a portname to the field and can 
+be combined with the node name to indicate where to attach an edge
+to the node. (See <A HREF=attrs.html#k:portPos>portPos</A>.)
+The second string is used as the text for the field; it supports the usual
+<A HREF=attrs.html#k:escString>escape sequences</A> \n, \l and \r.
+<P>
+Visually, a record is a box, with fields represented by alternating
+rows of horizontal or vertical subboxes. The Mrecord shape is identical
+to a record shape, except that the outermost box has rounded corners.
+Flipping between horizontal and vertical layouts is done by nesting
+fields in braces "{...}". The top-level orientation in a record is
+horizontal. Thus, a record with label "A | B | C | D" will have 4 fields 
+oriented left to right, while "{A | B | C | D}" will have them 
+from top to bottom and "A | { B | C } | D" will have "B" over "C", with
+"A" to the left and "D" to the right of "B" and "C".
+<P> 
+The initial orientation of a record node depends on the
+<A HREF="attrs.html#d:rankdir">rankdir</A> attribute. If this attribute
+is <TT>TB</TT> (the default) or <TT>TB</TT>, corresponding to vertical
+layouts, the top-level fields in a record are displayed horizontally.
+If, however, this attribute is <TT>LR</TT> or <TT>RL</TT>, 
+corresponding to horizontal layouts, the top-level fields are 
+displayed vertically.
+<P>
+As an example of a record node, the dot input
+<XMP>
+digraph structs {
+    node [shape=record];
+    struct1 [label="<f0> left|<f1> mid\ dle|<f2> right"];
+    struct2 [label="<f0> one|<f1> two"];
+    struct3 [label="hello\nworld |{ b |{c|<here> d|e}| f}| g | h"];
+    struct1:f1 -> struct2:f0;
+    struct1:f2 -> struct3:here;
+}
+</XMP>
+
+yields the figure<BR>
+<IMG SRC=record.gif>
+<P>
+If we add the line
+<XMP>
+    rankdir=LR
+</XMP>
+we get the layout<BR>
+<IMG SRC=record2.gif>
+<P>
+If we change node <TT>struct1</TT> to have shape <TT>Mrecord</TT>,
+it then looks like:<BR>
+<IMG SRC=mrecord.gif>
+
+<H2><A NAME="d:style">Styles for Nodes</A></H2>
+The <A HREF=attrs.html#d:style><TT>style</TT></A>
+attribute can be used to modify the appearance of a node.
+At present, there are 8 style values recognized:
+<TT>filled</TT>, <TT>invisible</TT>, <TT>diagonals</TT>, <TT>rounded</TT>.
+<TT>dashed</TT>, <TT>dotted</TT>, <TT>solid</TT> and <TT>bold</TT>.
+As usual, the value of the <A HREF=attrs.html#d:style><TT>style</TT></A>
+attribute can be a comma-separated list of any of these. If the
+style contains conflicts (e.g, <TT>style="dotted, solid"</TT>), the last
+attribute wins.
+<DL>
+<DT><A NAME=d:filled><TT>filled</TT>
+  <DD>This value indicates that the node's interior should be filled.
+The color used is the node's <TT>fillcolor</TT> or, if that's not defined, its
+<TT>color</TT>. For unfilled nodes, the interior of the node is transparent to
+whatever color is the current graph or cluster background color.
+Note that <TT>point</TT> shapes are always filled.
+<P>
+Thus, the code
+<XMP>
+digraph G {
+  rankdir=LR
+  node [shape=box, color=blue]
+  node1 [style=filled] 
+  node2 [style=filled, fillcolor=red] 
+  node0 -> node1 -> node2
+}
+</XMP>
+yields the figure<BR>
+<IMG SRC=fill.gif>
+
+<DT><A NAME=d:invisible><TT>invisible</TT>
+  <DD>Setting this style causes the node not to be displayed at all.
+Note that the node is still used in laying out the graph.
+
+<DT><A NAME=d:diagonals><TT>diagonals</TT>
+  <DD>The diagonals style causes small chords to be drawn near the vertices
+of the node's polygon or, in case of circles and ellipses, two chords near
+the top and the bottom of the shape. The special node shapes
+<A HREF=#d:Msquare><TT>Msquare</TT></A>,
+<A HREF=#d:Mcircle><TT>Mcircle</TT></A>, and
+<A HREF=#d:Mdiamond><TT>Mdiamond</TT></A>
+are simply an ordinary square, circle and
+diamond with the diagonals style set.
+
+<DT><A NAME=d:rounded><TT>rounded</TT>
+  <DD>The rounded style causes the polygonal corners to be smoothed.
+Note that this style also applies to record-based nodes. Indeed,
+the <TT>Mrecord</TT> shape is simply shorthand for setting this style.
+Also, prior to 26 April 2005, the rounded and filled styles were 
+mutually exclusive.
+<P>
+As an example of rounding, dot uses the graph
+<XMP>
+digraph R {
+  rankdir=LR
+  node [style=rounded]
+  node1 [shape=box]
+  node2 [fillcolor=yellow, style="rounded,filled", shape=diamond]
+  node3 [shape=record, label="{ a | b | c }"]
+
+  node1 -> node2 -> node3
+}
+</XMP>
+to produce the figure<BR>
+<IMG SRC=round.gif>
+<DT><A NAME=d:dashed><TT>dashed</TT>
+  <DD>This style causes the node's border to be drawn as a dashed line.
+<DT><A NAME=d:dotted><TT>dotted</TT>
+  <DD>This style causes the node's border to be drawn as a dotted line.
+<DT><A NAME=d:solid><TT>solid</TT>
+  <DD>This style causes the node's border to be drawn as a solid line,
+which is the default.
+<DT><A NAME=d:bold><TT>bold</TT>
+  <DD>This style causes the node's border to be drawn as a bold line.
+See also <A HREF=attrs.html#d:setlinewidth>setlinewidth</A>.
+
+</DL>
+
+<P>
+Additional styles may be available with a specific code generator.
+<H2><A NAME=html>HTML-Like Labels</A></H2>
+
+<B>NOTE:</B><EM>This feature is only available on versions of Graphviz
+that are newer than mid-November 2003. In particular, it is not part
+of release 1.10.</EM>
+<P>
+If the value of a label attribute
+(<A HREF=attrs.html#d:label><TT>label</TT></A> for nodes, edges, clusters, and
+graphs, and the
+<A HREF=attrs.html#d:headlabel><TT>headlabel</TT></A> and
+<A HREF=attrs.html#d:taillabel><TT>taillabel</TT></A>
+attributes of an edge) is given as an
+<A HREF=lang.html#html>HTML string</A>, 
+that is, delimited by <TT>&lt;...&gt;</TT>
+rather than <TT>&quot;...&quot;</TT>,
+the label is interpreted as
+an HTML description. At their simplest, such labels
+can describe multiple lines of variously aligned text as provided by ordinary 
+<A HREF=attrs.html#k:escString>string labels</A>. More generally, the
+label can specify a table similar to those provided by HTML,
+with different graphical attributes at each level.
+<P>
+<B>NOTE:</B> The features and syntax supported by these labels are
+modeled on HTML. However, there are many aspects that are relevant
+to Graphviz labels that are not in HTML and, conversely, HTML allows
+various constructs which are meaningless in Graphviz. We will generally
+refer to these labels as "HTML labels" rather than the cumbersome
+"HTML-like labels" but the reader is warned that these are not really
+HTML. The grammar below describes precisely what Graphviz will accept.
+<P>
+Although HTML labels are not, strictly speaking, a shape, they can be
+viewed as a generalization of the record shapes described above. 
+In particular, if a node has set its 
+<A HREF=attrs.html#k:shape><TT>shape</TT></A>
+attribute to <TT>plaintext</TT>, the HTML label will be the node's
+shape. On the other hand, if the node has any other shape (except 
+<TT>point</TT>), the HTML label will be embedded within the node the
+same way an ordinary label would be.
+<P>
+The following is an abstract grammar for HTML labels.
+Terminals, corresponding to elements, are shown in bold font,
+and nonterminals in italics.
+Square brackets [ and ] enclose optional items.
+Vertical bars | separate alternatives.
+Note that, as in HTML, element and attribute names are case-insensitive.
+(cf. sections 3.2.1 and 3.2.2 of the 
+<A HREF="http://www.w3.org/TR/html401">HTML 4.01 specification</A>).
+<TABLE>
+<TR>
+  <TD ALIGN=RIGHT><I>label</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><I>text</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><I>table</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>text</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><I>textitem</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><I>text</I> <I>textitem</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>textitem</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><I>string</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>&lt;BR/&gt;</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>&lt;FONT&gt;</B> <I>text</I> <B>&lt;/FONT&gt;</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>table</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT>[ <B>&lt;FONT&gt;</B> ] <B>&lt;TABLE&gt;</B> <I>rows</I> <B>&lt;/TABLE&gt;</B> [ <B>&lt;/FONT&gt;</B> ]</TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>rows</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><I>row</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><I>rows</I> <I>row</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>row</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><B>&lt;TR&gt;</B> <I>cells</I> <B>&lt;/TR&gt;</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>cells</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><I>cell</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><I>cells</I> <I>cell</I></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT><I>cell</I></TD>
+  <TD ALIGN=LEFT>:</TD>
+  <TD ALIGN=LEFT><B>&lt;TD&gt;</B> <I>label</I> <B>&lt;/TD&gt;</B></TD>
+</TR>
+<TR>
+  <TD ALIGN=RIGHT></TD>
+  <TD ALIGN=LEFT>|</TD>
+  <TD ALIGN=LEFT><B>&lt;TD&gt;</B> <B>&lt;IMG/&gt;</B> <B>&lt;/TD&gt;</B></TD>
+</TR>
+</TABLE>
+<P>
+Above, a <I>string</I> is any collection of printable characters, including
+all spaces. Note that outside of the body of a &lt;TD&gt; element, 
+whitespace characters are ignored; within a &lt;TD&gt; element, spaces
+are preserved but all other white space characters are discarded.
+HTML comments are allowed within an HTML string. They can occur anywhere
+provided that, if they contain part of an HTML element, they must contain
+the entire element.
+<P>
+As is obvious from the above description, the interpretation of white space
+characters is one place where HTML-like labels is very different from 
+standard HTML. In HTML, any sequence of white space characters is 
+collapsed to a single space, If the user does not want this to happen, the
+input must use non-breaking spaces "&amp;nbsp;". This makes sense in
+HTML, where text layout depends dynamically on the space available. In
+Graphviz, the layout is statically determined by the input, so it is
+reasonable to treat ordinary space characters as non-breaking. In addition,
+ignoring tabs and newlines allows the input text to be formatted for
+easier reading. 
+<P>
+Each of the HTML elements has a set of optional attributes.
+Attribute values must appear in double quotes.
+<PRE>&lt;TABLE
+  ALIGN="CENTER|LEFT|RIGHT"
+  BGCOLOR="<I>color</I>"
+  BORDER="<I>value</I>"
+  CELLBORDER="<I>value</I>"
+  CELLPADDING="<I>value</I>"
+  CELLSPACING="<I>value</I>"
+  COLOR="<I>color</I>"
+  FIXEDSIZE="FALSE|TRUE"
+  HEIGHT="<I>value</I>"
+  HREF="<I>value</I>"
+  PORT="<I>portName</I>"
+  TARGET="<I>value</I>"
+  TITLE="<I>value</I>"
+  TOOLTIP="<I>value</I>"
+  VALIGN="MIDDLE|BOTTOM|TOP"
+  WIDTH="<I>value</I>"
+&gt;
+</PRE>
+<P>
+<PRE>&lt;TR
+  &lt;!-- No attributes --&gt;
+&gt;
+</PRE>
+<P>
+<PRE>&lt;TD
+  ALIGN="CENTER|LEFT|RIGHT|TEXT"
+  BALIGN="CENTER|LEFT|RIGHT"
+  BGCOLOR="<I>color</I>"
+  BORDER="<I>value</I>"
+  CELLPADDING="<I>value</I>"
+  CELLSPACING="<I>value</I>"
+  COLOR="<I>color</I>"
+  COLSPAN="<I>value</I>"
+  FIXEDSIZE="FALSE|TRUE"
+  HEIGHT="<I>value</I>"
+  HREF="<I>value</I>"
+  PORT="<I>portName</I>"
+  ROWSPAN="<I>value</I>"
+  TARGET="<I>value</I>"
+  TITLE="<I>value</I>"
+  TOOLTIP="<I>value</I>"
+  VALIGN="MIDDLE|BOTTOM|TOP"
+  WIDTH="<I>value</I>"
+&gt;
+</PRE>
+
+<P>
+<PRE>&lt;FONT
+  COLOR="<I>color</I>"
+  FACE="<I>fontname</I>"
+  POINT-SIZE="<I>value</I>"
+&gt;
+</PRE>
+
+<P>
+<PRE>&lt;BR
+  ALIGN="CENTER|LEFT|RIGHT"
+&gt;
+</PRE>
+
+<P>
+<PRE>&lt;IMG
+  SCALE="FALSE|TRUE|WIDTH|HEIGHT|BOTH"
+  SRC="<I>value</I>"
+&gt;
+</PRE>
+
+<P>
+<B><I><FONT SIZE=-1>ALIGN</FONT> </I></B>
+<BLOCKQUOTE>
+specifies horizontal placement. When an object is allocated
+more space than required, this value determines where the extra space
+is placed left and right of the object.
+<P>
+<ul>
+<LI>CENTER aligns the object in the center. (Default) </LI>
+<LI>LEFT aligns the object on the left.</LI>
+<LI>RIGHT aligns the object on the right.  </LI>
+<LI>(<T>&lt;TD&gt;</T> only) TEXT aligns lines of text using the full
+cell width. The alignment of a line is determined by its (possibly
+implicit) associated <T>&lt;BR&gt;</T> element.</LI> 
+</ul>
+<P>
+The contents of a cell are normally aligned as a block. In particular,
+lines of text are first aligned as a text block based on the width of
+the widest line and the corresponding <T>&lt;BR&gt;</T> elements. Then,
+the entire text block is aligned within a cell. If, however, the
+cell's <B><I>ALIGN</I></B> value is <T>"TEXT"</T>, and the cell contains
+lines of text, then the lines are justified using the entire available
+width of the cell. If the cell does not contain text, then the contained
+image or table is centered.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>BALIGN</FONT> </I></B>
+<BLOCKQUOTE>
+specifies the default alignment of <T>&lt;BR&gt;</T> elements contained
+in the cell. That is, if a <T>&lt;BR&gt;</T> element has no
+explicit <B><I>ALIGN</I></B> attribute, the attribute value is specified
+by the value of <B><I>BALIGN</I></B>.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>BGCOLOR="color"</FONT></I></B>
+<BLOCKQUOTE>
+sets the color of the background. This color can be 
+overridden by a <B><I>BGCOLOR</I></B> attribute in descendents.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>BORDER="value"</FONT></I></B>
+<BLOCKQUOTE>
+specifies the width of the border around the object in points.
+A value of zero indicates no border. The default is 1.
+The maximum value is 255.
+If set in a table, and <B><I>CELLBORDER</I></B> is not set,
+this value is also used for all cells in the table.
+It can be overridden by a <B><I>BORDER</I></B> tag in  a cell.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>CELLBORDER="value"</FONT></I></B>
+<BLOCKQUOTE>
+specifies the width of the border for all cells in a table.
+It can be overridden by a <B><I>BORDER</I></B> tag in  a cell.
+The maximum value is 255.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>CELLPADDING="value"</FONT></I></B>
+<BLOCKQUOTE>
+specifies the space, in points, between a cell's border and its content.
+The default is 2.
+The maximum value is 255.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>CELLSPACING="value"</FONT></I></B>
+<BLOCKQUOTE>
+specifies the space, in points, between cells in a table and between
+a cell and the table's border.  The default is 2.
+The maximum value is 127.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>COLOR="color"</FONT></I></B>
+<BLOCKQUOTE>
+sets the color of the font within the scope of
+&lt;FONT&gt;...&lt;/FONT&gt;, or the border color
+of the table or cell within the scope of
+&lt;TABLE&gt;...&lt;/TABLE&gt;,
+or &lt;TD&gt;...&lt;/TD&gt;.
+This color can be 
+overridden by a <B><I>COLOR</I></B> attribute in descendents.
+By default, the font color is determined by the
+<A HREF="attrs.html#:fontcolor">fontcolor</A> attribute of
+the corresponding node, edge or graph, and the border color
+is determined by the
+<A HREF="attrs.html#:color">color</A> attribute of
+the corresponding node, edge or graph.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>COLSPAN="value"</FONT></I></B>
+<BLOCKQUOTE>
+specifies the number of columns spanned by the cell. The default is 1.
+The maximum value is 65535.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>FACE="fontname"</FONT></I></B>
+<BLOCKQUOTE>
+specifies the font to use within the scope of
+&lt;FONT&gt;...&lt;/FONT&gt;.
+This can be 
+overridden by a <B><I>FACE</I></B> attribute in descendents.
+By default, the font name is determined by the
+<A HREF="attrs.html#:fontname">fontname</A> attribute of the corresponding
+node, edge or graph.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>FIXEDSIZE</FONT> </I></B>
+<BLOCKQUOTE>
+specifies whether the values given by the <B><I>WIDTH</I></B> 
+and <B><I>HEIGHT</I></B> attributes are enforced.
+<P>
+<ul>
+<LI>FALSE allows the object to grow so that all its contents will fit. (Default) </LI>
+<LI>TRUE fixes the object size to its given <B><I>WIDTH</I></B> 
+and <B><I>HEIGHT</I></B>.
+Both of these attributes must be supplied.</LI>
+</ul>
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>HEIGHT="value"</FONT></I></B>
+<BLOCKQUOTE>
+specifies the mininum height, in points, of the object. The height
+includes the contents, any spacing and the border. Unless
+<B><I>FIXEDSIZE</I></B> is true, the height will be expanded to allow
+the contents to fit.
+The maximum value is 65535.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>HREF="value"</FONT></I></B>
+<BLOCKQUOTE>
+attaches a URL to the object.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>POINT-SIZE="value"</FONT></I></B>
+<BLOCKQUOTE>
+sets the size of the font, in points, used within the scope of
+&lt;FONT&gt;...&lt;/FONT&gt;.
+This can be 
+overridden by a <B><I>POINT-SIZE</I></B> attribute in descendents.
+By default, the font size is determined by the
+<A HREF="attrs.html#:fontsize">fontsize</A> attribute of the corresponding
+node, edge or graph.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>PORT="value"</FONT></I></B>
+<BLOCKQUOTE>
+attaches a portname to the object.
+(See <A HREF=attrs.html#k:portPos>portPos</A>.)
+This can be used to modify the head
+or tail of an edge, so that the end attaches directly to the object.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>ROWSPAN="value"</FONT></I></B>
+<BLOCKQUOTE>
+specifies the number of rows spanned by the cell. The default is 1.
+The maximum value is 65535.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>SCALE</FONT></I></B>
+<BLOCKQUOTE>
+specifies how an image will use any extra space available in its cell.
+Allowed values are
+<ul>
+<LI>FALSE : keep image its natural size. (Default) </LI>
+<LI>TRUE : scale image uniformly to fit.</LI>
+<LI>WIDTH : expand image width to fill  </LI>
+<LI>HEIGHT : expand image height to fill  </LI>
+<LI>BOTH : expand both image width height to fill  </LI>
+</ul>
+If this attribute is undefined, 
+the image inherits the <A HREF="attrs.html#d:imagescale">imagescale</A> 
+attribute of the graph object being drawn.
+As with the <A HREF="attrs.html#d:imagescale">imagescale</A>
+attribute, if the cell has a fixed size and the image is too large,
+any offending dimension will be shrunk to fit the space, the
+scaling being uniform in width and height if <I>SCALE=<TT>"true"</TT></I>.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>SRC="value"</FONT></I></B>
+<BLOCKQUOTE>
+specifies the image file to be displayed in the cell.
+Note that if the software is used as a web server, file system access
+to images is more restricted. See <A HREF="#d:GV_FILE_PATH">GV_FILE_PATH</A>
+and <A HREF="#d:SERVER_NAME">SERVER_NAME</A>.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>TARGET="value"</FONT></I></B>
+<BLOCKQUOTE>
+determines which window of the browser is used for the URL if the object 
+has one. 
+See <A HREF="http://www.w3.org/TR/html401/present/frames.html#adef-target">W3C documentation</A>.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>TITLE="value"</FONT></I></B>
+<BLOCKQUOTE>
+sets the tooltip annotation attached to the element. 
+This is used only if the element has a HREF attribute.
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>TOOLTIP="value"</FONT></I></B>
+<BLOCKQUOTE>
+is an alias for <B><I><FONT SIZE=-1>TITLE</FONT></I></B>.
+</BLOCKQUOTE>
+
+<P>
+<B><I><FONT SIZE=-1>VALIGN</FONT> </I></B>
+<BLOCKQUOTE>
+specifies vertical placement. When an object is allocated
+more space than required, this value determines where the extra space
+is placed above and below the object.
+<P>
+<ul>
+<LI>MIDDLE aligns the object in the center. (Default) </LI>
+<LI>LEFT aligns the object on the left.</LI>
+<LI>RIGHT aligns the object on the right.  </LI>
+</ul>
+</BLOCKQUOTE>
+
+<B><I><FONT SIZE=-1>WIDTH="value"</FONT></I></B>
+<BLOCKQUOTE>
+specifies the mininum width, in points, of the object. The width
+includes the contents, any spacing and the border. Unless
+<B><I>FIXEDSIZE</I></B> is true, the width will be expanded to allow
+the contents to fit.
+The maximum value is 65535.
+</BLOCKQUOTE>
+
+<P>
+There is some inheritance among the attributes. If a table specifies
+a <I><B>CELLPADDING</B></I>, <I><B>CELLBORDER</B></I> or <I><B>BORDER</B></I> 
+value, this value is used by the table's
+cells unless overridden. If a cell or table specifies a <I><B>BGCOLOR</B></I>,
+this will be the background color for all of its descendents.
+Of course, if a background or fill color is specified for the
+graph object owning the label, this will be the original
+background for the label.
+The object's fontname, fontcolor and fontsize attributes
+are the default for drawing text. These can be overridden by using
+<I><B>FONT</B></I> to set new values. The new font values will hold
+until overridden by an enclosed <I><B>FONT</B></I> element.
+Finally, the pencolor or color of the graph object will be used as
+the border color.
+<P>
+Because of certain limitations in handling tables in a device-independent
+manner, when <I><B>BORDER</B></I> is 1 and both table and cell borders
+are on and <I><B>CELLSPACING</B></I> is less than 2, anomalies can arise
+in the output, such as gaps between sides of borders which should be
+abutting or even collinear. The user can usual get around this by increasing
+the border size or the spacing, or turning off the table border.
+<P>
+As an example of HTML labels, the dot input 
+<XMP>
+digraph structs {
+    node [shape=plaintext]
+    struct1 [label=<
+<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+  <TR><TD>left</TD><TD PORT="f1">mid dle</TD><TD PORT="f2">right</TD></TR>
+</TABLE>>];
+    struct2 [label=<
+<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+  <TR><TD PORT="f0">one</TD><TD>two</TD></TR>
+</TABLE>>];
+    struct3 [label=<
+<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
+  <TR>
+    <TD ROWSPAN="3">hello<BR/>world</TD>
+    <TD COLSPAN="3">b</TD>
+    <TD ROWSPAN="3">g</TD>
+    <TD ROWSPAN="3">h</TD>
+  </TR>
+  <TR>
+    <TD>c</TD><TD PORT="here">d</TD><TD>e</TD>
+  </TR>
+  <TR>
+    <TD COLSPAN="3">f</TD>
+  </TR>
+</TABLE>>];
+    struct1:f1 -> struct2:f0;
+    struct1:f2 -> struct3:here;
+}
+</XMP>
+produces the HTML analogue of the record example above<BR>
+<IMG SRC=html1.gif>
+<P>
+As usual, an HTML specification is more verbose. On the other hand,
+HTML labels are much more general, as the following example shows:
+<P>
+<IMG SRC=html2.gif>
+<P>
+The source for this graph can be found <A HREF=html2.dot>here</A>.
+<P>
+Here is an example using &lt;FONT&gt; elements 
+<P>
+<IMG SRC=html3.gif>
+<P>
+with the <A HREF=html3.dot>input graph</A>.
+<P>
+Here is an example using an &lt;IMG&gt; element 
+<P>
+<IMG SRC=html4.gif>
+<P>
+with the <A HREF=html4.dot>input graph</A>.
+
+<H2><A NAME=epsf>User-defined Nodes</A></H2>
+
+There is a third type of node shape which is specified by the user.
+Typically, these shapes rely on the details of a concrete graphics
+format. At present, shapes can be described using PostScript, via a
+file or add-on library, for use in PostScript output, or shapes can
+be specified by a bitmap-image file for use with SVG or bitmap (jpeg,
+gif, etc.) output. More information can be found on the page 
+<A HREF="http://www.graphviz.org/Documentation/html/shapehowto.html">
+How to create custom shapes</A>.
+
+<H2><A NAME=sdlshapes>SDL Shapes for PostScript</A></H2>
+One example of user-defined node shapes is provided by Mark Rison of CSR.
+These are the <A  HREF=http://www.sdl-forum.org/SDL/index.htm>SDL</A> shapes.
+These are available as PostScript functions whose use is described in
+<A HREF="http://www.graphviz.org/Documentation/html/shapehowto.html#psprocs"> External PostScript procedures</A>.
+The necessary PostScript library file and sample use can be found in the
+<tt>contrib/sdlshapes</tt> directory in the release. Please note the
+COPYRIGHT AND PERMISSION NOTICE contained in the library file <tt>sdl.ps</tt>.
+<P>
+The table below
+gives the shape names and the corresponding node shapes.
+<IMG SRC=sdlshapes.jpg>
+</BODY>
+</HTML>
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/tab.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/trapezium.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/triangle.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/info/tripleoctagon.gif has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/html/pspdf.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/schema/arguments.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<xsd:schema
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	xmlns:html="http://www.w3.org/1999/xhtml">
+
+	<xsd:simpleType name="layout">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="circo" />
+			<xsd:enumeration value="dot" />
+			<xsd:enumeration value="fdp" />
+			<xsd:enumeration value="neato" />
+			<xsd:enumeration value="twopi" />
+		</xsd:restriction>
+	</xsd:simpleType>
+	
+	<xsd:simpleType name="format">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="bmp" />
+			<xsd:enumeration value="canon" />
+			<xsd:enumeration value="dot" />
+			<xsd:enumeration value="xdot" />
+			<xsd:enumeration value="cmap" />
+			<xsd:enumeration value="dia" />
+			<xsd:enumeration value="fig" />
+			<xsd:enumeration value="gd" />
+			<xsd:enumeration value="gd2" />
+			<xsd:enumeration value="gif" />
+			<xsd:enumeration value="gtk" />
+			<xsd:enumeration value="hpgl" />
+			<xsd:enumeration value="ico" />
+			<xsd:enumeration value="imap" />
+			<xsd:enumeration value="cmapx" />
+			<xsd:enumeration value="imap_np" />
+			<xsd:enumeration value="cmpax_np" />
+			<xsd:enumeration value="ismap" />
+			<xsd:enumeration value="jpg" />
+			<xsd:enumeration value="jpeg" />
+			<xsd:enumeration value="jpe" />
+			<xsd:enumeration value="mif" />
+			<xsd:enumeration value="mp" />
+		</xsd:restriction>
+	</xsd:simpleType>
+		
+</xsd:schema>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/schema/attributes.xml	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,2624 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="attributes.xslt" type="text/xsl"?>
+<xsd:schema
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	xmlns:html="http://www.w3.org/1999/xhtml"
+	xmlns:gv="urn:graphviz">
+	
+	<!--
+		microformats in xsd:documentation
+		========================================
+		
+		class
+			val: a value of the enclosing attribute
+		
+		rel
+			attr: link to an attribute
+			type: link to an attribute type
+	
+	-->
+	
+	<!-- NOTES -->
+	<xsd:annotation id="introduction">
+		<xsd:documentation>
+			<html:p>
+				All Graphviz attributes are specified by name-value pairs. Thus, to
+				set the fillcolor of a node <html:code>abc</html:code>, one would use
+			</html:p>
+			<html:p>
+				<html:code>abc [fillcolor = red]</html:code>
+			</html:p>
+			<html:p>
+				Similarly, to set the arrowhead style of an edge <html:code>abc -> def</html:code>, 
+				one would use
+			</html:p>
+			<html:p>
+				<html:code>abc -> def [arrowhead = diamond]</html:code>
+			</html:p>
+			<html:p>
+				Further details concerning the setting of attributes can be found
+				in the description of the 
+				<html:a href="http://www.graphviz.org/doc/info/lang.html">DOT language.</html:a>
+			</html:p>
+		</xsd:documentation>	</xsd:annotation>
+	
+	<xsd:annotation id="points">
+		<xsd:documentation>
+			<html:p>
+				At present, most device-independent units are either inches or
+				<html:a href="http://en.wikipedia.org/wiki/Point_(typography)">points</html:a>, 
+				which we take as 72 points per inch.
+			</html:p>
+		</xsd:documentation>
+	
+	</xsd:annotation>
+	
+	<xsd:annotation id="undirected">
+		<xsd:documentation>
+			<html:p>
+				Some attributes, such as
+				<html:a rel="attr">dir</html:a> or <html:a rel="attr">arrowtail</html:a>, are 
+				ambiguous when used in 
+				<html:a href="http://www.graphviz.org/doc/info/lang.html">DOT</html:a>
+				with an undirected graph since the head and tail of an edge are meaningless. 
+				As a convention, the first time an undirected edge appears, the
+				<html:a href="http://www.graphviz.org/doc/info/lang.html">DOT</html:a>
+				parser will assign the left node as the tail node and the right node as
+				the head. For example, the edge <html:code>A -- B</html:code> will have tail <html:code>A</html:code>
+				and head <html:code>B</html:code>. It is the user's responsibility to handle such
+				edges consistently. If the edge appears later, in the format
+			</html:p>
+			<html:p>
+				<html:code>B -- A [taillabel = "tail"]</html:code>
+			</html:p>
+			<html:p>
+				the drawing will attach the tail label to node <html:code>A</html:code>.
+				To avoid possible confusion when such attributes are required, the user
+				is encouraged to use a directed graph.
+				If it is important to make the graph appear undirected, this can be
+				done using the <html:a rel="attr">dir</html:a>, <html:a rel="attr">arrowtail</html:a>
+				or <html:a rel="attr">arrowhead</html:a> attributes.
+			</html:p>
+		</xsd:documentation>
+	</xsd:annotation>
+	
+	<!-- ATTRIBUTE TYPES -->
+	
+	<!--
+	<xsd:simpleType name="arrowType">
+	</xsd:simpleType>
+	-->
+	
+	<xsd:simpleType name="clusterMode">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="local" />
+			<xsd:enumeration value="global" />
+			<xsd:enumeration value="none" />
+		</xsd:restriction>
+	</xsd:simpleType>
+	
+	<!--
+	<xsd:simpleType name="color">
+	</xsd:simpleType>
+	-->
+	
+	<xsd:simpleType name="colorList">
+		<xsd:list itemType="color" />
+	</xsd:simpleType>
+	
+	<xsd:simpleType name="dirType">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					For undirected edges <html:code>T -- H;</html:code>, one of the nodes, usually
+					the righthand one, is treated as the head for the purpose of 
+					interpreting <html:span class="val">forward</html:span> and <html:span class="val">back</html:span>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="forward" />
+			<xsd:enumeration value="back" />
+			<xsd:enumeration value="both" />
+			<xsd:enumeration value="none" />
+		</xsd:restriction>
+	</xsd:simpleType>
+	
+	
+	<xsd:simpleType name="escString">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					String allowing escape sequences which are replaced according
+					to the context.
+					For node attributes, the substring <html:code>\N</html:code> is replaced by the name of the node,
+					and the substring <html:code>\G</html:code> by the name of the graph.
+					For graph or cluster attributes, the substring <html:code>\G</html:code> is replaced by the 
+					name of the graph or cluster.
+					For edge attributes, the substring <html:code>\E</html:code> is replaced by the name of the edge,
+					the substring <html:code>\G</html:code> is replaced by the name of the graph or cluster,
+					and the substrings <html:code>\T</html:code> and <html:code>\H</html:code> by the names of 
+					the tail and head nodes, respectively. 
+					The name of an edge is the string formed from the name of the
+					tail node, the appropriate edge operator (<html:code>--</html:code> or <html:code>-></html:code>) and the name of the
+					head node. 
+				</html:p>
+				<html:p>
+					In addition, if the associated attribute is 
+					<html:a rel="attr">label</html:a>,
+					<html:a rel="attr">headlabel</html:a> or <html:a rel="attr">taillabel</html:a>, 
+					the escape sequences <html:code>\n</html:code>, <html:code>\l</html:code> and <html:code>\r</html:code>
+					divide the label into lines, centered, left-justified, and right-justified,
+					respectively.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:string" />
+	</xsd:simpleType>
+	<!--
+		layerList
+		layerRange
+		lblString
+	-->
+	
+	<xsd:simpleType name="outputMode">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					These specify the order in which nodes and edges are drawn in concrete
+					output. The default <html:span class="val">breadthfirst</html:span> is the simplest, but when the graph
+					layout does not avoid edge-node overlap, this mode will sometimes have
+					edges drawn over nodes and sometimes on top of nodes. If the mode
+					<html:span class="val">nodesfirst</html:span> is chosen, all nodes are drawn first, followed by the
+					edges. This guarantees an edge-node overlap will not be mistaken for
+					an edge ending at a node. On the other hand, usually for aesthetic
+					reasons, it may be desirable that all edges appear beneath nodes, even
+					if the resulting drawing is ambiguous. This can be achieved by choosing
+					<html:span class="val">edgesfirst</html:span>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="breadthfirst" />
+			<xsd:enumeration value="nodesfirst" />
+			<xsd:enumeration value="edgesfirst" />
+		</xsd:restriction>
+	</xsd:simpleType>
+	
+	<xsd:simpleType name="packMode">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					These specify the granularity of packing connected components when
+					the <html:a rel="attr">pack</html:a> attribute is true. A value of <html:span class="val">node</html:span> causes
+					packing at the node and edge label, with no overlapping of these objects.
+					This produces a layout with the least area, but it also allows interleaving,
+					where a node of one component may lie between two nodes in another
+					component. A value of <html:span class="val">graph</html:span> does a packing using the bounding box of the
+					component. Thus, there will be a rectangular region around a component
+					free of elements of any other component.
+					A value of <html:span class="val">clust</html:span> guarantees that top-level clusters are kept intact.
+					What effect a value has also depends on the layout algorithm. For
+					example, neato does not support clusters, so a value of <html:span class="val">clust</html:span> will
+					have the same effect as the default <html:span class="val">node</html:span> value.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="node" />
+			<xsd:enumeration value="clust" />
+			<xsd:enumeration value="graph" />
+		</xsd:restriction>
+	</xsd:simpleType>
+	
+	<xsd:simpleType name="pagedir">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					These specify the 8 row or column major orders for traversing a 
+					rectangular array, the first character corresponding to the major
+					order and the second to the minor order. Thus, for "BL", the
+					major order is from bottom to top, and the minor order is from left
+					to right. This means the bottom row is traversed first, from left
+					to right, then the next row up, from left to right, and so on,
+					until the topmost row is traversed.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="BL" />
+			<xsd:enumeration value="BR" />
+			<xsd:enumeration value="TL" />
+			<xsd:enumeration value="TR" />
+			<xsd:enumeration value="RB" />
+			<xsd:enumeration value="RT" />
+			<xsd:enumeration value="LB" />
+			<xsd:enumeration value="LT" />
+		</xsd:restriction>
+	</xsd:simpleType>
+	
+	<!--
+		point
+		pointf
+	-->
+	
+	<xsd:simpleType name="pointfList">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					List of <html:a rel="type">pointf</html:a>, separated by spaces.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:list itemType="pointf" />
+	</xsd:simpleType>
+	<!--
+		portPos
+	-->
+	
+	<xsd:simpleType name="rankType">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="same" />
+			<xsd:enumeration value="min" />
+			<xsd:enumeration value="source" />
+			<xsd:enumeration value="max" />
+			<xsd:enumeration value="sink" />
+		</xsd:restriction>
+	</xsd:simpleType>
+	
+	<xsd:simpleType name="rankdir">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Corresponding to directed graphs drawn
+					from top to bottom, from left to right, from bottom to top, and from
+					right to left, respectively.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="TB" />
+			<xsd:enumeration value="LR" />
+			<xsd:enumeration value="BT" />
+			<xsd:enumeration value="RL" />
+		</xsd:restriction>
+	</xsd:simpleType>
+	
+	<!--
+		rect
+	-->
+	
+	<xsd:simpleType name="shape">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="box" />
+			<xsd:enumeration value="polygon" />
+			<xsd:enumeration value="ellipse" />
+			<xsd:enumeration value="circle" />
+			<xsd:enumeration value="point" />
+			<xsd:enumeration value="egg" />
+			<xsd:enumeration value="triangle" />
+			<xsd:enumeration value="plaintext" />
+			<xsd:enumeration value="diamond" />
+			<xsd:enumeration value="trapezium" />
+			<xsd:enumeration value="parallelogram" />
+			<xsd:enumeration value="house" />
+			<xsd:enumeration value="pentagon" />
+			<xsd:enumeration value="hexagon" />
+			<xsd:enumeration value="septagon" />
+			<xsd:enumeration value="octagon" />
+			<xsd:enumeration value="doublecircle" />
+			<xsd:enumeration value="doubleoctagon" />
+			<xsd:enumeration value="tripleoctagon" />
+			<xsd:enumeration value="invtriangle" />
+			<xsd:enumeration value="invtrapezium" />
+			<xsd:enumeration value="invhouse" />
+			<xsd:enumeration value="Mdiamond" />
+			<xsd:enumeration value="Msquare" />
+			<xsd:enumeration value="Mcircle" />
+			<xsd:enumeration value="rect" />
+			<xsd:enumeration value="rectangle" />
+			<xsd:enumeration value="none" />
+			<xsd:enumeration value="note" />
+			<xsd:enumeration value="tab" />
+			<xsd:enumeration value="box3d" />
+			<xsd:enumeration value="component" />
+		</xsd:restriction>
+	</xsd:simpleType>
+	
+	<!--
+		splineType
+		startType
+		style
+		viewPort
+	-->
+	
+	<!--  ATTRIBUTES -->
+
+	<xsd:attribute name="Damping" type="xsd:decimal" default="0.99" gv:layouts="neato">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Factor damping force motions. On each iteration, a nodes movement
+					is limited to this factor of its potential motion. By being less than
+					1.0, the system tends to "cool", thereby preventing cycling.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="K" type="xsd:decimal" default="0.3" gv:layouts="fdp">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Spring constant used in virtual physical model. It roughly corresponds
+					to an ideal edge length (in inches), in that increasing K tends to 
+					increase the distance between nodes.
+					Note that the edge attribute <html:a rel="attr">len</html:a> can be used to
+					override this value for adjacent nodes.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="URL" type="xsd:anyURI" gv:formats="svg ps ps2 map">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Hyperlinks incorporated into device-dependent output. 
+					At present, used in ps2, cmap, i*map and svg formats. 
+					For all these formats, URLs can be attached to nodes, edges and
+					clusters. URL attributes can also be attached to the root graph in ps2,
+					cmap and i*map formats. This serves as the base URL for relative URLs in the 
+					former, and as the default image map file in the latter.
+				</html:p>
+				<html:p>
+					For svg, cmapx and imap output, the active area for a node is its 
+					visible image. 
+					For example, an unfilled node with no drawn boundary will only be active on its label. 
+					For other output, the active area is its bounding box.
+					The active area for a cluster is its bounding box. 
+					For edges, the active areas are small circles where the edge contacts its head
+					and tail nodes. In addition, for svg, cmapx and imap, the active area 
+					includes a thin polygon approximating the edge. The circles may 
+					overlap the related node, and the edge URL dominates.
+					If the edge has a label, this will also be active. 
+					Finally, if the edge has a head or tail label, this will also be active.
+				</html:p>
+				<html:p>
+					Note that, for edges, the attributes <html:a rel="attr">headURL</html:a>,
+					<html:a rel="attr">tailURL</html:a>, <html:a rel="attr">labelURL</html:a> and
+					<html:a rel="attr">edgeURL</html:a> allow control of various parts of an
+					edge. Also note that, if active areas of two edges overlap, it is unspecified 
+					which area dominates.
+				</html:p>
+  			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="arrowhead" type="arrowType" default="normal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Style of arrowhead on the head node of an edge. 
+					See also the <html:a rel="attr">dir</html:a> attribute, 
+					and the <html:a rel="note">undirected</html:a> note.			
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="arrowsize" type="xsd:decimal" default="1.0">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Multiplicative scale factor for arrowheads.			
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="arrowtail" type="arrowType" default="normal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Style of arrowhead on the tail node of an edge. 
+					See also the <html:a rel="attr">dir</html:a> attribute, 
+					and the <html:a rel="note">undirected</html:a> note.			
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="bb" type="rect">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Bounding box of drawing in integer points.			
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="bgcolor" type="color">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					When attached to the root graph, this color is used as the background for 
+					entire canvas. When a cluster attribute, it is used as the initial
+					background for the cluster. If a cluster has a filled 
+					<html:a rel="attr">style</html:a>, the
+					cluster's <html:a rel="attr">fillcolor</html:a> will overlay the 
+					background color.
+				</html:p>
+				<html:p>
+					If no background color is specified for the root graph, no graphics
+					operation are performed on the background. This works fine for
+					PostScript but for bitmap output, all bits are initialized to something.
+					This means that when the bitmap output is included in some other
+					document, all of the bits within the bitmap's bounding box will be
+					set, overwriting whatever color or graphics where already on the page.
+					If this effect is not desired, and you only want to set bits explicitly
+					assigned in drawing the graph, set <html:a rel="attr">bgcolor</html:a>="transparent".
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="center" type="xsd:boolean" default="false">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If true, the drawing is centered in the output canvas.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="charset" type="xsd:string" default="UTF-8">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Specifies the character encoding used when interpreting string input
+					as a text label. The default value is <html:span class="val">UTF-8</html:span>.
+					The other legal value is <html:span class="val">iso-8859-1</html:span> or, 
+					equivalently,
+					<html:span class="val">Latin1</html:span>. The <html:a rel="attr">charset</html:a> attribute is case-insensitive.
+					Note that if the character encoding used in the input does not
+					match the <html:a rel="attr">charset</html:a> value, the resulting output may be very strange.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="clusterrank" type="clusterMode" default="local" gv:layouts="dot">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Mode used for handling clusters. If <html:a rel="attr">clusterrank</html:a> is <html:span class="val">local</html:span>, a
+					subgraph whose name begins with "cluster" is given special treatment.
+					The subgraph is laid out separately, and then integrated as a unit into
+					its parent graph, with a bounding rectangle drawn about it. 
+					If the cluster has a <html:a rel="attr">label</html:a> parameter, this label
+					is displayed within the rectangle.
+					Note also that there can be clusters within clusters.
+					At present, the modes <html:span class="val">global</html:span> and <html:span class="val">none</html:span>
+					appear to be identical, both turning off the special cluster processing.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="color" type="colorList" default="black">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Basic drawing color for graphics, not text. For the latter, use the
+					<html:a rel="attr">fontcolor</html:a> attribute.
+				</html:p>
+				<html:p>
+					For edges, the value
+					can either be a single <html:a rel="type">color</html:a> or a <html:a rel="type">colorList</html:a>.
+					In the latter case, the edge is drawn using parallel splines or lines,
+					one for each color in the list, in the order given.
+					The head arrow, if any, is drawn using the first color in the list, 
+					and the tail arrow, if any, the second color. This supports the common 
+					case of drawing opposing edges, but using parallel splines instead of 
+					separately routed multiedges.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="colorscheme" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					This attribute specifies a color scheme namespace. If defined, it specifies
+					the context for interpreting color names. In particular, if a 
+					<html:a rel="type">color</html:a> value has form <html:code>xxx</html:code> or <html:code>//xxx</html:code>, 
+					then the color <html:code>xxx</html:code> will be evaluated according to the current color scheme.
+					If no color scheme is set, the standard X11 naming is used.
+					For example, if <html:code>colorscheme=bugn9</html:code>, then <html:code>color=7</html:code>
+					is interpreted as <html:code>/bugn9/7</html:code>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="comment" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Comments are inserted into output. Device-dependent.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="compound" type="xsd:boolean" default="false" gv:layouts="dot">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If <html:span class="val">true</html:span>, allow edges between clusters. (See <html:a rel="attr">lhead</html:a> and <html:a rel="attr">ltail</html:a> below.)
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="concentrate" type="xsd:boolean" default="false" gv:layouts="dot">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If <html:span class="val">true</html:span>, use edge concentrators.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="constraint" type="xsd:boolean" default="true" gv:layouts="dot">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If <html:span class="val">false</html:span>, the edge is not used in ranking the nodes.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="decorate" type="xsd:boolean" default="false">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If <html:span class="val">true</html:span>, attach edge label to edge by a 2-segment
+					polyline, underlining the label, then going to the closest point of spline.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="defaultdist" type="xsd:decimal" gv:layouts="neato">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					This specifies the distance between nodes in separate connected
+					components. If set too small, connected components may overlap.
+					Only applicable if <html:a rel="attr">pack</html:a>=false.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="dim" type="xsd:integer" default="2" gv:layouts="fdp neato">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Set the number of dimensions used for the layout. The maximum value
+					allowed is 10.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="dir" type="dirType">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Set edge type for drawing arrowheads. This indicates which ends of the
+					edge should be decorated with an arrowhead. The actual style of the
+					arrowhead can be specified using the <html:a rel="attr">arrowhead</html:a>
+					and <html:a rel="attr">arrowtail</html:a> attributes.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="diredgeconstraints" type="xsd:string" default="false" gv:layouts="neato">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Only valid when <html:a rel="attr">mode</html:a>="ipsep".
+					If <html:span class="val">true</html:span>, constraints are generated for each edge in the largest (heuristic) 
+					directed acyclic subgraph such that the edge must point downwards.
+					If <html:span class="val">hier</html:span>, generates level constraints similar to those used with
+					<html:a rel="attr">mode</html:a>="hier". The main difference is that, in the latter
+					case, only these constraints are involved, so a faster solver can be used.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="distortion" type="xsd:decimal" default="0.0">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Distortion factor for <html:a rel="attr">shape</html:a>=polygon. 
+					Positive values cause top part to
+					be larger than bottom; negative values do the opposite.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="dpi" type="xsd:decimal" default="96.0">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					This specifies the expected number of pixels per inch on a display device.
+					For bitmap output, this guarantees that text rendering will be
+					done more accurately, both in size and in placement. For SVG output,
+					it is used to guarantee that the dimensions in the output correspond to
+					the correct number of points or inches.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="edgeURL" type="xsd:anyURI" gv:formats="svg map">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If <html:a rel="attr">edgeURL</html:a> is defined, this is the link used for the non-label
+					parts of an edge. This value overrides any <html:a rel="attr">URL</html:a>
+					defined for the edge.
+					Also, this value is used near the head or tail node unless overridden
+					by a <html:a rel="attr">headURL</html:a> or <html:a rel="attr">tailURL</html:a> value,
+					respectively.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="edgehref" type="xsd:anyURI" gv:formats="svg map">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Synonym for <html:a rel="attr">edgeURL</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="edgetarget" type="escString" gv:formats="svg map">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If the edge has a <html:a rel="attr">URL</html:a> or <html:a rel="attr">edgeURL</html:a>
+					attribute, this attribute determines which window of the 
+					browser is used
+					for the URL attached to the non-label part of the edge. 
+					Setting it to "_graphviz" will open a new window if it 
+					doesn't already exist, or reuse it if it does.
+					If undefined, the value of the <html:a rel="attr">target</html:a> is used.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="edgetooltip" type="escString" gv:formats="svg cmap">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Tooltip annotation attached to the non-label part of an edge. 
+					This is used only if the edge has a <html:a rel="attr">URL</html:a> 
+					or <html:a rel="attr">edgeURL</html:a> attribute.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="epsilon" type="xsd:decimal" gv:layouts="neato">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Terminating condition. If the length squared of all energy gradients are
+					&lt; <html:a rel="attr">epsilon</html:a>, the algorithm stops.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="esep" type="xsd:decimal" gv:layouts="neato circo fdp">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Fraction to increase polygons (multiply
+					coordinates by 1 + esep) for purposes of spline edge routing. 
+					This should normally be strictly less than 
+					<html:a rel="attr">sep</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="fillcolor" type="color">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Color used to fill the background of a node or cluster 
+					assuming <html:a rel="attr">style</html:a>=filled.
+					If <html:a rel="attr">fillcolor</html:a> is not defined, <html:a rel="attr">color</html:a> is 
+					used. (For clusters, if <html:a rel="attr">color</html:a> is not defined, 
+					<html:a rel="attr">bgcolor</html:a> is used.) If this is not defined,
+					the default is used, except for 
+					<html:a rel="attr">shape</html:a>=point or when the output
+					format is MIF,
+					which use black by default.
+				</html:p>
+				<html:p>
+					Note that a cluster inherits the root graph's attributes if defined.
+					Thus, if the root graph has defined a <html:a rel="attr">fillcolor</html:a>, this will override a
+					<html:a rel="attr">color</html:a> or <html:a rel="attr">bgcolor</html:a> attribute set for the cluster.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="fixedsize" type="xsd:boolean" default="false">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If true, the node size is specified by the values of the
+					<html:a rel="attr">width</html:a>  
+					and <html:a rel="attr">height</html:a> attributes only 
+					and is not expanded to contain the text label.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="fontcolor" type="color" default="black">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Color used for text.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="fontname" type="xsd:string" default="Times-Roman">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Font used for text. This very much depends on the output format and, for 
+					non-bitmap output such as PostScript or SVG, the availability of the font
+					when the graph is displayed or printed. As such, it is best to rely on
+					font faces that are generally available, such as Times-Roman, Helvetica or
+					Courier.
+				</html:p>
+				<html:p>
+					If Graphviz was built using the 
+					<html:a href="http://pdx.freedesktop.org/~fontconfig/fontconfig-user.html">fontconfig library</html:a>, the latter library
+					will be used to search for the font. However, if the <html:a rel="attr">fontname</html:a> string
+					contains a slash character "/", it is treated as a pathname for the font
+					file, though font lookup will append the usual font suffixes.
+				</html:p>
+				<html:p>
+					If Graphviz does not use fontconfig, <html:a rel="attr">fontname</html:a> will be
+					considered the name of a Type 1 or True Type font file. 
+					If you specify <html:code>fontname=schlbk</html:code>, the tool will look for a 
+					file named  <html:code>schlbk.ttf</html:code> or <html:code>schlbk.pfa</html:code> or <html:code>schlbk.pfb</html:code>
+					in one of the directories specified by 
+					the <html:a rel="attr">fontpath</html:a> attribute.
+					The lookup does support various aliases for the common fonts.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="fontnames" type="xsd:string" gv:formats="svg">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Allows user control of how basic fontnames are represented in SVG output.
+					If <html:a rel="attr">fontnames</html:a> is undefined or <html:span class="val">svg</html:span>, 
+					the output will try to use known SVG fontnames. For example, the
+					default font <html:code>Times-Roman</html:code> will be mapped to the
+					basic SVG font <html:code>serif</html:code>. This can be overridden by setting
+					<html:a rel="attr">fontnames</html:a> to <html:span class="val">ps</html:span> or <html:span class="val">gd</html:span>.
+					In the former case, known PostScript font names such as
+					<html:code>Times-Roman</html:code> will be used in the output.
+					In the latter case, the fontconfig font conventions
+					are used. Thus, <html:code>Times-Roman</html:code> would be treated as
+					<html:code>Nimbus Roman No9 L</html:code>. These last two options are useful
+					with SVG viewers that support these richer fontname spaces.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="fontpath" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Directory list used by libgd to search for bitmap fonts if Graphviz
+					was not built with the fontconfig library.
+					If <html:a rel="attr">fontpath</html:a> is not set, the environment 
+					variable <html:code>DOTFONTPATH</html:code> is checked.
+					If that is not set, <html:code>GDFONTPATH</html:code> is checked.
+					If not set, libgd uses its compiled-in font path.
+					Note that fontpath is an attribute of the root graph.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="fontsize" type="xsd:decimal" default="14.0">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Font size, in <html:a rel="note">points</html:a>, used for text.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="group" type="xsd:string" gv:layouts="dot">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If the end points of an edge belong to the same group, i.e., have the
+					same group attribute, parameters are set to avoid crossings and keep
+					the edges straight.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="headURL" type="xsd:anyURI" gv:formats="svg map">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If <html:a rel="attr">headURL</html:a> is defined, it is
+					output as part of the head label of the edge. 
+					Also, this value is used near the head node, overriding any
+					<html:a rel="attr">URL</html:a> value.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="headclip" type="xsd:boolean" default="true">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If <html:span class="val">true</html:span>, the head of an edge is clipped to the boundary of the head node;
+					otherwise, the end of the edge goes to the center of the node, or the
+					center of a port, if applicable.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="headhref" type="xsd:anyURI" gv:formats="svg map">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Synonym for <html:a rel="attr">headURL</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="headlabel" type="lblString">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Text label to be placed near head of edge.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="headport" type="portPos" default="center">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Indicates where on the head node to attach the head of the edge.
+					In the default case, the edge is aimed towards the center of the node,
+					and then clipped at the node boundary.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="headtarget" type="escString" gv:formats="svg map">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If the edge has a <html:a rel="attr">headURL</html:a>, 
+					this attribute determines which window of the 
+					browser is used
+					for the URL. Setting it to "_graphviz" will open a new window if it 
+					doesn't already exist, or reuse it if it does.
+					If undefined, the value of the <html:a rel="attr">target</html:a> is used.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="headtooltip" type="escString" gv:formats="svg cmap">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Tooltip annotation attached to the head of an edge. This is used only
+					if the edge has a <html:a rel="attr">headURL</html:a> attribute.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="height" type="xsd:decimal" default="0.5">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Height of node, in inches. This is taken as the initial, minimum height
+					of the node. If <html:a rel="attr">fixedsize</html:a> is true, this
+					will be the final height of the node. Otherwise, if the node label
+					requires more height to fit, the node's height will be increased to
+					contain the label. Note also that, if the output format is dot, the
+					value given to <html:a rel="attr">height</html:a> will be the final value.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="href" type="xsd:anyURI" gv:formats="svg ps ps2 map">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Synonym for <html:a rel="attr">URL</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="image" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Gives the name of a file containing an image to be displayed inside
+					a node. The image file must be in one of the recognized formats, 
+					typically JPEG, PNG, GIF or Postscript, and be able to be converted
+					into the desired output format.  
+				</html:p>
+				<html:p>
+					Unlike with the <html:a rel="attr">shapefile</html:a> attribute, 
+					the image is treated as node
+					content rather than the entire node. In particular, an image can
+					be contained in a node of any shape, not just a rectangle.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="imagescale" type="xsd:string" default="false">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Attribute controlling how an image fills its
+					containing node. In general, the image is given its natural size,
+					(cf. <html:a rel="attr">dpi</html:a>),
+					and the node size is made large enough to contain its image, its
+					label, its margin, and its peripheries. 
+					Its width and height will also be at least as large as its
+					minimum <html:a rel="attr">width</html:a> and <html:a rel="attr">height</html:a>. 
+					If, however, <html:code>fixedsize=true</html:code>,
+					the width and height attributes specify the exact size of the node. 
+				</html:p>
+				<html:p>
+					During rendering, in the default case (<html:code>imagescale=false</html:code>),
+					the image retains its natural size.
+					If <html:span class="val">true</html:span>,
+					the image is uniformly scaled (i.e., its aspect ratio is
+					preserved) to fit inside the node. 
+					At least one dimension of the image will be as large as possible
+					given the size of the node.
+					When <html:span class="val">width</html:span>,
+					the width of the image is scaled to fill the node width.
+					The corresponding property holds when <html:tt>imagescale=height</html:tt>.
+					When <html:span class="val">both</html:span>,
+					both the height and the width are scaled separately to fill the node.
+				</html:p>
+				<html:p>
+					In all cases, if a dimension of the image is larger than the
+					corresponding dimension of the node, that dimension of the
+					image is scaled down to fit the node. As with the case of
+					expansion, if <html:code>imagescale=true</html:code>, width and height are
+					scaled uniformly.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="label" type="lblString">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Text label attached to objects.
+					If a node's <html:a rel="attr">shape</html:a> is record, then the label can
+					have a <html:a href="http://www.graphviz.org/doc/info/shapes.html#record">special format</html:a> 
+					which describes the record layout.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labelURL" type="xsd:anyURI">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If <html:a rel="attr">labelURL</html:a> is defined, this is the link used for the label
+					of an edge. This value overrides any <html:a rel="attr">URL</html:a>
+					defined for the edge.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labelangle" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					This, along with <html:a rel="attr">labeldistance</html:a>, determine 
+					where the
+					headlabel (taillabel) are placed with respect to the head (tail)
+					in polar coordinates. The origin in the coordinate system is
+					the point where the edge touches the node. The ray of 0 degrees
+					goes from the origin back along the edge, parallel to the edge
+					at the origin. 
+				</html:p>
+				<html:p>
+					The angle, in degrees, specifies the rotation from the 0 degree ray,
+					with positive angles moving counterclockwise and negative angles
+					moving clockwise.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labeldistance" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Multiplicative scaling factor adjusting the distance that 
+					the headlabel (taillabel) is from the head (tail) node.
+					The default distance is 10 points. See <html:a rel="attr">labelangle</html:a>
+					for more details.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labelfloat" type="xsd:boolean">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If true, allows edge labels to be less constrained in position.
+					In particular, it may appear on top of other edges.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labelfontcolor" type="color">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Color used for headlabel and taillabel.
+					If not set, defaults to edge's fontcolor.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labelfontname" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Font used for headlabel and taillabel. 
+					If not set, defaults to edge's fontname.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labelfontsize" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Font size, in <html:a rel="note">points</html:a>, used for headlabel and taillabel.
+					If not set, defaults to edge's fontsize.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labelhref" type="xsd:anyURI">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Synonym for <html:a rel="attr">labelURL</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labeljust" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Justification for cluster labels. If <html:span class="val">r</html:span>, the label
+					is right-justified within bounding rectangle; if <html:span class="val">l</html:span>, left-justified;
+					else the label is centered.
+					Note that a subgraph inherits attributes from its parent. Thus, if
+					the root graph sets <html:a rel="attr">labeljust</html:a> to <html:span class="val">l</html:span>, the subgraph inherits
+					this value.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labelloc" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Top/bottom placement of graph and cluster labels. 
+					If the attribute is <html:span class="val">t</html:span>, place label at the top;
+					if the attribute is <html:span class="val">b</html:span>, place label at the bottom.
+					By default, root
+					graph labels go on the bottom and cluster labels go on the top.
+					Note that a subgraph inherits attributes from its parent. Thus, if
+					the root graph sets <html:a rel="attr">labelloc</html:a> to <html:span class="val">b</html:span>, the subgraph inherits
+					this value.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labeltarget" type="escString">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If the edge has a <html:a rel="attr">URL</html:a> or <html:a rel="attr">labelURL</html:a>
+					attribute, this attribute determines which window of the 
+					browser is used
+					for the URL attached to the label.
+					Setting it to "_graphviz" will open a new window if it 
+					doesn't already exist, or reuse it if it does.
+					If undefined, the value of the <html:a rel="attr">target</html:a> is used.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="labeltooltip" type="escString">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Tooltip annotation attached to label of an edge. 
+					This is used only if the edge has a <html:a rel="attr">URL</html:a> 
+					or <html:a rel="attr">labelURL</html:a> attribute.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="landscape" type="xsd:boolean">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If true, the graph is rendered in landscape mode. Synonymous with
+					<html:code><html:a rel="attr">rotate</html:a>=90</html:code> or 
+					<html:code><html:a rel="attr">orientation</html:a>=landscape</html:code>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="layer" type="layerRange">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Specifies layers in which the node or edge is present.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="layers" type="layerList">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Specifies a linearly ordered list of layer names attached to the graph
+					The graph is then output in separate layers. Only those components 
+					belonging to the current output layer appear. For more information,
+					see the page <html:a href="http://www.graphviz.org/Documentation/html/layers/">How to use drawing layers (overlays)</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="layersep" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Specifies the separator characters used to split the 
+					<html:a rel="attr">layers </html:a>attribute into a list of layer names.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="len" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Preferred edge length, in inches.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="levelsgap" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Specifies strictness of level constraints in neato
+					when <html:code><html:a rel="attr">mode</html:a>="ipsep" or "hier"</html:code>.
+					Larger positive values mean stricter constraints, which demand more 
+					separation between levels. On the other hand, negative values will relax 
+					the constraints by allowing some overlap between the levels.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="lhead" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Logical head of an edge. When <html:a rel="attr">compound</html:a> is true,
+					if <html:a rel="attr">lhead</html:a> is defined and is the name of a cluster containing 
+					the real head,
+					the edge is clipped to the boundary of the cluster.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="lp" type="point">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Label position, in <html:a rel="note">points</html:a>.
+					The position indicates the center of the label.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="ltail" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Logical tail of an edge. When <html:a rel="attr">compound</html:a> is true,
+					if <html:a rel="attr">ltail</html:a> is defined and is the name of a cluster 
+					containing the real tail,
+					the edge is clipped to the boundary of the cluster.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="margin" type="pointf">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					For graphs, this sets x and y margins of canvas, in inches. If the margin
+					is a single double, both margins are set equal to the given value.
+				</html:p>
+				<html:p>
+					Note that the margin is not part of the drawing but just empty space 
+					left around the drawing. It basically corresponds to a translation of 
+					drawing, as would be necessary to center a drawing on a page. Nothing
+					is actually drawn in the margin. To actually extend the background of
+					a drawing, see the <html:a rel="attr">pad</html:a> attribute.
+				</html:p>
+				<html:p>
+					For nodes, this attribute specifies space left around the node's label.
+					By default, the value is <html:code>0.11,0.055</html:code>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="maxiter" type="xsd:integer">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Sets the number of iterations used.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="mclimit" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Multiplicative scale factor used to alter the MinQuit (default = 8)
+					and MaxIter (default = 24) parameters used during crossing
+					minimization. These correspond to the 
+					number of tries without improvement before quitting and the
+					maximum number of iterations in each pass.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="mindist" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Specifies the minimum separation between all nodes.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="minlen" type="xsd:integer">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+				Minimum edge length (rank difference between head and tail).
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="mode" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Technique for optimizing the layout. If <html:a rel="attr">mode</html:a> is <html:span class="val">major</html:span>,
+					neato uses stress majorization. If <html:a rel="attr">mode</html:a> is <html:span class="val">KK</html:span>,
+					neato uses a version of the gradient descent method. The only advantage
+					to the latter technique is that it is sometimes appreciably faster for
+					small (number of nodes &lt; 100) graphs. A significant disadvantage is that
+					it may cycle.
+				</html:p>
+				<html:p>
+					There are two new, experimental modes in neato, <html:span class="val">hier</html:span>, which adds a top-down
+					directionality similar to the layout used in dot, and <html:span class="val">ipsep</html:span>, which 
+					allows the graph to specify minimum vertical and horizontal distances
+					between nodes. (See the <html:a rel="attr">sep</html:a> attribute.)
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="model" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					This value specifies how the distance matrix is computed for the input
+					graph. The distance matrix specifies the ideal distance between every
+					pair of nodes. neato attemps to find a layout which best achieves
+					these distances. By default, it uses the length of the shortest path,
+					where the length of each edge is given by its <html:a rel="attr">len</html:a>
+					attribute. If <html:a rel="attr">model</html:a> is <html:span class="val">circuit</html:span>, neato uses the
+					circuit resistance 
+					model to compute the distances. This tends to emphasize clusters. If
+					<html:a rel="attr">model</html:a> is <html:span class="val">subset</html:span>, neato uses the subset model. This sets the
+					edge length to be the number of nodes that are neighbors of exactly one
+					of the end points, and then calculates the shortest paths. This helps
+					to separate nodes with high degree. 
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="mosek" type="xsd:boolean">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If Graphviz is built with MOSEK defined, mode=ipsep and mosek=true, 
+					the Mosek software (www.mosek.com) is use to solve the ipsep constraints.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="nodesep" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Minimum space between two adjacent nodes in the same rank, in inches.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="nojustify" type="xsd:boolean">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					By default, the justification of multi-line labels is done within the
+					largest context that makes sense. Thus, in the label of a polygonal
+					node, a left-justified line will align with the left side of the node
+					(shifted by the prescribed <html:a rel="attr">margin</html:a>).
+					In record nodes, left-justified
+					line will line up with the left side of the enclosing column of fields.
+					If <html:a rel="attr">nojustify</html:a> is <html:span class="val">true</html:span>, multi-line labels will be justified 
+					in the context of itself. For example, if the attribute is set, 
+					the first label line is long, and the second is shorter and left-justified,
+					the second will align with the left-most character in the first line,
+					regardless of  how large the node might be.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="normalize" type="xsd:boolean">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If set, normalize coordinates of final
+					layout so that the first point is at the origin, and then rotate the
+					layout so that the first edge is horizontal.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="nslimit" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Used to set number of iterations in
+					network simplex applications, used in
+					computing node x coordinates.
+					If defined, # iterations =  <html:a rel="attr">nslimit</html:a> * # nodes;
+					otherwise,  # iterations = MAXINT.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+
+	<xsd:attribute name="nslimit1" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Used to set number of iterations in
+					network simplex applications, used for ranking nodes.
+					If defined, # iterations =  <html:a rel="attr">nslimit1</html:a> * # nodes;
+					otherwise,  # iterations = MAXINT.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="ordering" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If "out" for a graph G, and n is a node in G, then edges n-&gt;* appear
+					left-to-right in the same order in which they are defined.
+					If "in", the edges *-&gt;n appear
+					left-to-right in the same order in which they are defined for all
+					nodes n.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<!--
+	<xsd:attribute name="orientation" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				Angle, in degrees, used to rotate node shapes.
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="orientation" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				If "[lL]*", set graph orientation to landscape
+				Used only if <html:a rel="attr">rotate</html:a> is not defined.
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	-->
+	
+	<xsd:attribute name="outputorder" type="outputMode">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Specify order in which nodes and edges are drawn.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="overlap" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Determines if and how node overlaps should be removed. Nodes are first
+					enlarged using the <html:a rel="attr">sep</html:a> attribute. 
+					If <html:span class="val">true</html:span>, overlaps are retained.
+					If the value is <html:span class="val">scale</html:span>, overlaps are removed by uniformly scaling in x and y.
+					If the value converts to <html:span class="val">false</html:span>, node overlaps are removed by a 
+					Voronoi-based technique. 
+					If the value is <html:span class="val">scalexy</html:span>, x and y are separately
+					scaled to remove overlaps. 
+					If the value is <html:span class="val">orthoxy</html:span> or <html:span class="val">orthoyx</html:span>, overlaps
+					are moved by optimizing two constraint problems, one for the x axis and
+					one for the y. The suffix indicates which axis is processed first.
+					If the value is <html:span class="val">ortho</html:span>, the technique is similar to <html:span class="val">orthoxy</html:span> except a
+					heuristic is used to reduce the bias between the two passes.
+					If the value is <html:span class="val">ortho_yx</html:span>, the technique is the same as <html:span class="val">ortho</html:span>, except
+					the roles of x and y are reversed.
+					The values <html:span class="val">portho</html:span>, <html:span class="val">porthoxy</html:span>, <html:span class="val">porthoxy</html:span>, and <html:span class="val">portho_yx</html:span> are similar
+					to the previous four, except only pseudo-orthogonal ordering is
+					enforced.
+				</html:p>
+				<html:p>
+					If the value is <html:span class="val">compress</html:span>, the layout will be scaled down as much as
+					possible without introducing any overlaps, obviously assuming there are
+					none to begin with.
+				</html:p>
+				<html:p>
+					If the value is <html:span class="val">ipsep</html:span>, and the layout is done by neato with 
+					<html:a rel="attr">mode</html:a>="ipsep", the overlap removal constraints are
+					incorporated into the layout algorithm itself.
+					N.B. At present, this only supports one level of clustering.
+				</html:p>
+				<html:p>
+					If the value is <html:span class="val">vpsc</html:span>, overlap removal is similarly to <html:span class="val">ortho</html:span>, except
+					quadratic optimization is used to minimize node displacement.
+					N.B. At present, this mode only works when <html:a rel="attr">mode</html:a>="ipsep".
+				</html:p>
+				<html:p>
+					Except for fdp, the layouts assume <html:code>overlap="true"</html:code> as the default. 
+					Fdp first uses a number of passes using built-in, force-directed technique
+					to remove overlaps. Thus, fdp accepts <html:a rel="attr">overlap</html:a> with an integer
+					prefix followed by a colon, specifying the number of tries. If there is
+					no prefix, no initial tries will be performed. If there is nothing following
+					a colon, none of the above methods will be attempted. By default, fdp
+					uses <html:code>overlap="9:portho"</html:code>. Note that <html:code>overlap="true"</html:code>,
+					<html:code>overlap="0:true"</html:code> and <html:code>overlap="0:"</html:code> all turn off all overlap
+					removal.
+				</html:p>
+				<html:p>
+					Except for the Voronoi method, all of these transforms preserve the
+					orthogonal ordering of the original layout. That is, if the x coordinates
+					of two nodes are originally the same, they will remain the same, and if
+					the x coordinate of one node is originally less than the x coordinate of
+					another, this relation will still hold in the transformed layout. The
+					similar properties hold for the y coordinates.
+					This is not quite true for the "porth*" cases. For these, orthogonal
+					ordering is only preserved among nodes related by an edge.
+				</html:p>
+				<html:p>
+					<html:b>NOTE</html:b>The methods <html:span class="val">orthoxy</html:span> and <html:span class="val">orthoyx</html:span> are still evolving. The semantics of these may change, or these methods may disappear altogether.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="pack" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					This is true if the value of pack is <html:span class="val">true</html:span> (case-insensitive) or a
+					non-negative integer. If true, each connected component of the graph is 
+					laid out separately, and then the graphs are packed tightly. 
+					If pack has an integral value, this is used as the size,
+					in <html:a href="#points">points</html:a>, of
+					a margin around each part; otherwise, a default margin of 8 is used.
+					If pack is interpreted as false, the entire graph is laid out together.
+					The granularity and method of packing is influenced by the
+					<html:a rel="attr">packmode</html:a> attribute.
+				</html:p>
+				<html:p>
+					For layouts which always do packing, such a twopi, the <html:a rel="attr">pack</html:a>
+					attribute is just used to set the margin.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="packmode" type="packMode">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					This indicates the granularity and method used for packing
+					(cf. <html:a rel="type">packMode</html:a>). Note that defining
+					<html:a rel="attr">packmode</html:a> will automatically turn on packing as though one had
+					set <html:code>pack=true</html:code>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="pad" type="pointf">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					The pad attribute specifies how much, in inches, to extend the 
+					drawing area around the minimal area needed to draw the graph.
+					If the pad is a single double, both the x and y pad values are set 
+					equal to the given value. This area is part of the
+					drawing and will be filled with the background color, if appropriate. 
+				</html:p>
+				<html:p>
+					Normally, a small pad is used for aesthetic reasons, especially when
+					a background color is used, to avoid having nodes and edges abutting
+					the boundary of the drawn region.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="page" type="pointf">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Width and height of output pages, in inches. If this is set and is
+					smaller than the size of the layout, a rectangular array of pages of
+					the specified page size is overlaid on the layout, with origins
+					aligned in the lower-left corner, thereby partitioning the layout
+					into pages. The pages are then produced one at a time, in
+					<html:a rel="attr">pagedir</html:a> order.
+				</html:p>
+				<html:p>
+					At present, this only works for PostScript output. For other types of
+					output, one should use another tool to split the output into multiple
+					output files. Or use the <html:a rel="attr">viewport</html:a> to generate
+					multiple files.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="pagedir" type="pagedir">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If the <html:a rel="attr">page</html:a> attribute is set and applicable,
+					this attribute specifies the order in which the pages are emitted.
+					This is limited to one of the 8 row or column major orders.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="pencolor" type="color">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Color used to draw the bounding box around a cluster.
+					If <html:a rel="attr">pencolor</html:a> is not defined, <html:a rel="attr">color</html:a> is 
+					used. If this is not defined, <html:a rel="attr">bgcolor</html:a> is used.
+					If this is not defined, the default is used.
+				</html:p>
+				<html:p>
+					Note that a cluster inherits the root graph's attributes if defined.
+					Thus, if the root graph has defined a <html:a rel="attr">pencolor</html:a>, this will override a
+					<html:a rel="attr">color</html:a> or <html:a rel="attr">bgcolor</html:a> attribute set for the cluster.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="peripheries" type="xsd:integer">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Set number of peripheries used in polygonal shapes and cluster
+					boundaries. Note that
+					<html:a href="http://www.graphviz.org/doc/info/shapes.html#epsf">user-defined shapes</html:a> are treated as a 
+					form of box shape, so the default
+					peripheries value is 1 and the user-defined shape will be drawn in
+					a bounding rectangle. Setting <html:code>peripheries=0</html:code> will turn this off.
+					Also, 1 is the maximum peripheries value for clusters.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="pin" type="xsd:boolean">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If true and the node has a pos attribute on input, neato prevents the
+					node from moving from the input position. This property can also be specified
+					in the pos attribute itself (cf. the <html:a rel="attr">point</html:a> type).
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="pos" type="splineType">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Position of node, or spline control points.
+					For nodes, the position indicates the center of the node.
+					On output, the coordinates are in <html:a href="#points">points</html:a>.
+				</html:p>
+				<html:p>
+					In neato and fdp, pos can be used to set the initial position of a node.
+					By default, the coordinates are assumed to be in inches. However, the
+					<html:a href="http://www.graphviz.org/doc/info/command.html#d:s">-s</html:a> command line flag can be used to specify
+					different units.
+				</html:p>
+				<html:p>
+					When the <html:a href="http://www.graphviz.org/doc/info/command.html#d:n">-n</html:a> command line flag is used with
+					neato, it is assumed the positions have been set by one of the layout
+					programs, and are therefore in points. Thus, <html:code>neato -n</html:code> can accept
+					input correctly without requiring a <html:code>-s</html:code> flag and, in fact, 
+					ignores any such flag.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="quantum" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If <html:a rel="attr">quantum</html:a> &gt; 0.0, node label dimensions
+					will be rounded to integral multiples of the quantum.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="rank" type="rankType">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Rank constraints on the nodes in a subgraph.
+					If <html:span class="val">same</html:span>, all nodes are placed on the same rank. 
+					If <html:span class="val">min</html:span>, all nodes are placed on the minimum rank. 
+					If <html:span class="val">source</html:span>, all nodes are placed on the minimum rank, and
+					the only nodes on the minimum rank belong to some subgraph whose
+					rank attribute is "source" or "min". 
+					Analogous criteria hold for <html:a rel="attr">rank</html:a>=<html:span class="val">max</html:span> and <html:a rel="attr">rank</html:a>=<html:span class="val">sink</html:span>.
+					(Note: the
+					minimum rank is topmost or leftmost, and the maximum rank is bottommost
+					or rightmost.)
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="rankdir" type="rankdir">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Sets direction of graph layout. For example, if <html:a rel="attr">rankdir</html:a>="LR", 
+					and barring cycles, an edge <html:code>T -&gt; H;</html:code> will go
+					from left to right. By default, graphs are laid out from top to bottom.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="ranksep" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					In dot, this gives the desired rank separation, in inches. This is
+					the minimum vertical distance between the bottom of the nodes in one
+					rank and the tops of nodes in the next. If the value
+					contains "equally", the centers of all ranks are spaced equally apart.
+					Note that both
+					settings are possible, e.g., ranksep = "1.2 equally".
+					In twopi, specifies radial separation of concentric circles.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="ratio" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Sets the aspect ratio (drawing height/drawing width) for the drawing. 
+					Note that this is adjusted before
+					the <html:a rel="attr">size</html:a> attribute constraints are enforced.
+				</html:p>
+				<html:p>
+					If <html:a rel="attr">ratio</html:a> is numeric, it is taken as the desired aspect ratio.
+					Then, if the actual aspect ratio is less than the desired ratio, 
+					the drawing height is scaled up to achieve the
+					desired ratio; if the actual ratio is greater than that desired ratio, 
+					the drawing width is scaled up.
+				</html:p>
+				<html:p>
+					If <html:a rel="attr">ratio</html:a> = <html:span class="val">fill</html:span> and the <html:a rel="attr">size</html:a>
+					attribute is set, node positions are scaled, separately in both x
+					and y, so that the final drawing exactly fills the specified size.
+				</html:p>
+				<html:p>
+					If <html:a rel="attr">ratio</html:a> = <html:span class="val">compress</html:span> and the <html:a rel="attr">size</html:a>
+					attribute is set, dot attempts to compress the initial layout to fit 
+					in the given size. This achieves a tighter packing of nodes but 
+					reduces the balance and symmetry. This feature only works in dot.
+				</html:p>
+				<html:p>
+					If <html:a rel="attr">ratio</html:a> = <html:span class="val">expand</html:span>, the <html:a rel="attr">size</html:a>
+					attribute is set, and both the width and the height of the graph are
+					less than the value in  <html:a rel="attr">size</html:a>, node positions are scaled 
+					uniformly until at least
+					one dimension fits <html:a rel="attr">size</html:a> exactly.
+					Note that this is distinct from using <html:a rel="attr">size</html:a> as the
+					desired size, as here the drawing is expanded before edges are generated and
+					all node and text sizes remain unchanged.
+				</html:p>
+				<html:p>
+					If <html:a rel="attr">ratio</html:a> = <html:span class="val">auto</html:span>, the <html:a rel="attr">page</html:a>
+					attribute is set and the graph cannot be drawn on a single page,
+					then <html:a rel="attr">size</html:a> is set to an ``ideal'' value.
+					In particular, the size in a given dimension will be the smallest integral
+					multiple of the page size in that dimension which is at least half the
+					current size. The two dimensions are then scaled independently to the
+					new size. This feature only works in dot.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="rects" type="rect">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Rectangles for fields of records, in <html:a rel="note">points</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="regular" type="xsd:boolean">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If true, force polygon to be regular.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="remincross" type="xsd:boolean">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If true and there are multiple clusters, run cross
+					minimization a second time.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="resolution" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					This is a synonym for the <html:a rel="attr">dpi</html:a> attribute.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="root" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					This specifies nodes to be used as the center of the 
+					layout and the root of the generated spanning tree. As a graph attribute,
+					this gives the name of the node. As a node attribute (circo only), it
+					specifies that the node should be used as a central node. In twopi,
+					this will actually be the central node. In circo, the block containing
+					the node will be central in the drawing of its connected component.
+					If not defined,
+					twopi will pick a most central node, and circo will pick a random node.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="rotate" type="xsd:integer">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If 90, set drawing orientation to landscape.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="samehead" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Edges with the same head and the same <html:a rel="attr">samehead</html:a> value are aimed
+					at the same point on the head.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="sametail" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Edges with the same tail and the same <html:a rel="attr">sametail</html:a> value are aimed
+					at the same point on the tail.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="samplepoints" type="xsd:integer">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If the input graph defines the <html:a rel="attr"><html:a rel="attr">vertices</html:a></html:a> 
+					attribute, and output is dot or xdot, this gives
+					the number of points used for a node whose shape is a circle or ellipse.
+					It plays the same role in neato, when adjusting the layout to avoid
+					overlapping nodes, and in image maps.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="searchsize" type="xsd:integer">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					During network simplex, maximum number of edges with negative cut values
+					to search when looking for one with minimum cut value.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="sep" type="pointf">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Fraction to increase polygons (multiply
+					coordinates by 1 + sep) for purposes of determining overlap. Guarantees
+					a minimal non-zero distance between nodes.
+					If unset but <html:a rel="attr">esep</html:a> is defined, <html:a rel="attr">sep</html:a> will be
+					set to <html:code>esep/0.8</html:code>. If <html:a rel="attr">esep</html:a> is unset, the default value
+					is used. 
+				</html:p>
+				<html:p>
+					When <html:a rel="attr">overlap</html:a>="ipsep" or "vpsc",
+					<html:a rel="attr">sep</html:a> gives a minimum distance, in inches, to be left between nodes.
+					In this case, if <html:a rel="attr">sep</html:a> is a pointf, the x and y separations can be
+					specified separately.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="shape" type="shape">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Set the shape of a node.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="shapefile" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					(Deprecated) If defined, shapefile specifies a file containing user-supplied node content. 
+					The <html:a rel="attr">shape</html:a> of the node is set to box. 
+					The image in the shapefile must be
+					rectangular. The image formats supported as well as the precise semantics of 
+					how the file is used depends on the
+					<html:a href="http://www.graphviz.org/doc/info/output.html">output format</html:a>.  For further details, see
+					<html:a href="http://www.graphviz.org/Documentation/html/shapehowto.html#ext_image">External PostScript files</html:a>.
+				</html:p>
+				<html:p>
+					There is one exception to this usage. 
+					If <html:a rel="attr">shape</html:a> is set to "epsf", shapefile gives
+					a filename containing a definition of the node in PostScript. 
+					The graphics defined must be contain all of the
+					node content, including any desired boundaries.
+					For further details, see
+					<html:a href="http://www.graphviz.org/Documentation/html/shapehowto.html#ext_ps">
+					External PostScript files</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="showboxes" type="xsd:integer">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Print guide boxes in PostScript at the beginning of
+					routesplines if 1, or at the end if 2. (Debugging)
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="sides" type="xsd:integer">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Number of sides if <html:a rel="attr">shape</html:a>=polygon.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="size" type="pointf">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Maximum width and height of drawing, in inches.
+					If defined and the drawing is too large, the drawing is uniformly 
+					scaled down so that it fits within the given size. 
+				</html:p>
+				<html:p>
+					If <html:a rel="attr">size</html:a> ends in an exclamation point (<html:tt>!</html:tt>), 
+					then it is taken to be
+					the desired size. In this case, if both dimensions of the drawing are
+					less than <html:a rel="attr">size</html:a>, the drawing is scaled up uniformly until at
+					least one dimension equals its dimension in <html:a rel="attr">size</html:a>.
+				</html:p>
+				<html:p>
+					Note that there is some interaction between the <html:a rel="attr">size</html:a> and
+					<html:a rel="attr">ratio</html:a> attributes.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="skew" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Skew factor for <html:a rel="attr">shape</html:a>=polygon. Positive values
+					skew top of polygon to right; negative to left.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="splines" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Controls how, and if, edges are represented. If true, edges are drawn as
+					splines routed around nodes; if false, edges are drawn as line segments.
+					If set to "", no edges are drawn at all.
+				</html:p>
+				<html:p>
+					(1 March 2007) The values <html:span class="val">line</html:span> and <html:span class="val">spline</html:span> can be
+					used as synonyms for <html:span class="val">false</html:span> and <html:span class="val">true</html:span>, respectively.
+					In addition, the value <html:span class="val">polyline</html:span> specifies that edges should be
+					drawn as polylines.
+				</html:p>
+				<html:p>
+					By default, the attribute is unset. How this is interpreted depends on
+					the layout. For dot, the default is to draw edges as splines. For all
+					other layouts, the default is to draw edges as line segments. Note that
+					for these latter layouts, if <html:code>splines="true"</html:code>, this
+					requires non-overlapping nodes (cf. <html:a rel="attr">overlap</html:a>).
+					If fdp is used for layout and <html:tt>splines="compound"</html:tt>, then the edges are
+					drawn to avoid clusters as well as nodes.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="start" type="startType">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Parameter used to determine the initial layout of nodes. If unset, the
+					nodes are randomly placed in a unit square with
+					the same seed is always used for the random number generator, so the
+					initial placement is repeatable.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="style" type="style">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Set style for node or edge. For cluster subgraph, if "filled", the
+					cluster box's background is filled.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="stylesheet" type="xsd:string">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					A URL or pathname specifying an XML style sheet, used in SVG output.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="tailURL" type="xsd:anyURI">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If <html:a rel="attr">tailURL</html:a> is defined, it is
+					output as part of the tail label of the edge.
+					Also, this value is used near the tail node, overriding any
+					<html:a rel="attr">URL</html:a> value.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="tailclip" type="xsd:boolean">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If <html:span class="val">true</html:span>, the tail of an edge is clipped to the boundary of the tail node;
+					otherwise, the end of the edge goes to the center of the node, or the
+					center of a port, if applicable.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="tailhref" type="xsd:anyURI">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Synonym for <html:a rel="attr">tailURL</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="taillabel" type="lblString">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Text label to be placed near tail of edge.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="tailport" type="portPos">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Indicates where on the tail node to attach the tail of the edge.
+					See <html:a rel="note">undirected</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="tailtarget" type="escString">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If the edge has a <html:a rel="attr">tailURL</html:a>, 
+					this attribute determines which window of the 
+					browser is used
+					for the URL. Setting it to "_graphviz" will open a new window if it 
+					doesn't already exist, or reuse it if it does.
+					If undefined, the value of the <html:a rel="attr">target</html:a> is used.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="tailtooltip" type="escString">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Tooltip annotation attached to the tail of an edge. This is used only
+					if the edge has a <html:a rel="attr">tailURL</html:a> attribute.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="target" type="escString">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If the object has a URL, this attribute determines which window 
+					of the browser is used for the URL.
+					See <html:a href="http://www.w3.org/TR/html401/present/frames.html#adef-target">W3C documentation</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="tooltip" type="escString">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Tooltip annotation attached to the node or edge. If unset, Graphviz
+					will use the object's <html:a rel="attr">label</html:a> if defined.
+					Note that if the label is a record specification or an HTML-like
+					label, the resulting tooltip may be unhelpful. In this case, if
+					tooltips will be generated, the user should set a <html:tt>tooltip</html:tt>
+					attribute explicitly.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="truecolor" type="xsd:boolean">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If set explicitly to true or false, the value determines whether or not
+					internal bitmap rendering relies on a truecolor color model or uses
+					a color palette.
+					If the attribute is unset, truecolor is not used 
+					unless there is a <html:a rel="attr">shapefile</html:a> property
+					for some node in the graph. 
+					The output model will use the input model when possible.
+				</html:p>
+				<html:p>
+					Use of color palettes results in less memory usage during creation of the
+					bitmaps and smaller output files.
+				</html:p>
+				<html:p>
+					Usually, the only time it is necessary to specify the truetype model
+					is if the graph uses more than 256 colors.
+					However, if one uses <html:a rel="attr">bgcolor</html:a>=transparent with 
+					a color palette, font
+					antialiasing can show up as a fuzzy white area around characters.
+					Using <html:a rel="attr">truecolor</html:a>=true avoids this problem.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="vertices" type="pointfList">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					If the input graph defines this attribute, the node is polygonal,
+					and output is dot or xdot, this attribute provides the
+					coordinates of the vertices of the node's polygon, in inches.
+					If the node is an ellipse or circle, the 
+					<html:a rel="attr">samplepoints</html:a> attribute affects
+					the output.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="viewport" type="viewPort">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Clipping window on final drawing.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="voro_margin" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Factor to scale up drawing to allow margin for expansion in
+					Voronoi technique. dim' = (1+2*margin)*dim.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="weight" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Weight of edge. In dot, the heavier the weight, the shorter,
+					straighter and more vertical the edge is. In neato, the heavier the
+					weight, the more neato will try to place the end points so that the
+					length of the edge is <html:a rel="attr">len</html:a>.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="width" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Width of node, in inches. This is taken as the initial, minimum width
+					of the node. If <html:a rel="attr">fixedsize</html:a> is true, this
+					will be the final width of the node. Otherwise, if the node label
+					requires more width to fit, the node's width will be increased to
+					contain the label. Note also that, if the output format is dot, the
+					value given to <html:a rel="attr">width</html:a> will be the final value.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+	
+	<xsd:attribute name="z" type="xsd:decimal">
+		<xsd:annotation>
+			<xsd:documentation>
+				<html:p>
+					Provides z coordinate value for 3D layouts and displays. If the
+					graph has <html:a rel="attr">dim</html:a> set to 3 (or more), 
+					neato will use a node's <html:a rel="attr">z</html:a> value
+					for the z coordinate of its initial position if 
+					its <html:a rel="attr">pos</html:a> attribute is also defined.
+				</html:p>
+				<html:p>
+					Even if no <html:a rel="attr">z</html:a> values are specified in the input, it is necessary to
+					declare a <html:a rel="attr">z</html:a> attribute for nodes, e.g, using <html:tt>node[z=""]</html:tt>
+					in order to get z values on output.
+					Thus, setting <html:tt>dim=3</html:tt> but not declaring <html:a rel="attr">z</html:a> will 
+					cause <html:tt>neato -Tvrml</html:tt> to
+					layout the graph in 3D but project the layout onto the xy-plane
+					for the rendering. If the <html:a rel="attr">z</html:a> attribute is declared, the final rendering
+					will be in 3D.
+				</html:p>
+			</xsd:documentation>
+		</xsd:annotation>
+	</xsd:attribute>
+		
+	<!-- COMPONENTS -->
+	
+	<xsd:complexType name="edge">
+		<xsd:attribute ref="URL" />
+		<xsd:attribute ref="arrowhead" default="normal" />
+		<xsd:attribute ref="arrowsize" default="1.0" />
+		<xsd:attribute ref="arrowtail" default="normal" />
+		<xsd:attribute ref="color" default="black" />
+		<xsd:attribute ref="colorscheme" />
+		<xsd:attribute ref="comment" />
+		<xsd:attribute ref="constraint" default="true" />
+		<xsd:attribute ref="decorate" default="false" />
+		<xsd:attribute ref="dir" />
+		<xsd:attribute ref="edgeURL" />
+		<xsd:attribute ref="edgehref"/>
+		<xsd:attribute ref="edgetarget" />
+		<xsd:attribute ref="edgetooltip" />
+		<xsd:attribute ref="fontcolor" default="black" />
+		<xsd:attribute ref="fontname" default="Times-Roman" />
+		<xsd:attribute ref="fontsize" default="14.0" />
+		<xsd:attribute ref="headURL" />
+		<xsd:attribute ref="headclip" default="true" />
+		<xsd:attribute ref="headhref"/>
+		<xsd:attribute ref="headlabel" />
+		<xsd:attribute ref="headport" default="center"/>
+		<xsd:attribute ref="headtarget" />
+		<xsd:attribute ref="headtooltip" />
+		<xsd:attribute ref="href" />
+		<xsd:attribute ref="label" />
+		<xsd:attribute ref="labelURL" />
+		<xsd:attribute ref="labelangle" default="-25.0" />
+		<xsd:attribute ref="labeldistance" default="1.0" />
+		<xsd:attribute ref="labelfloat" default="false" />
+		<xsd:attribute ref="labelfontcolor" default="black" />
+		<xsd:attribute ref="labelfontname" default="Times-Roman" />
+		<xsd:attribute ref="labelfontsize" default="14.0" />
+		<xsd:attribute ref="labelhref" />
+		<xsd:attribute ref="labeltarget" />
+		<xsd:attribute ref="labeltooltip" />
+		<xsd:attribute ref="layer" />
+		<xsd:attribute ref="len" />
+		<xsd:attribute ref="lhead" />
+		<xsd:attribute ref="lp" />
+		<xsd:attribute ref="ltail" />
+		<xsd:attribute ref="minlen" default="1" />
+		<xsd:attribute ref="nojustify" default="false" />
+		<xsd:attribute ref="pos" />
+		<xsd:attribute ref="samehead" />
+		<xsd:attribute ref="sametail" />
+		<xsd:attribute ref="showboxes" default="0" />
+		<xsd:attribute ref="style" />
+		<xsd:attribute ref="tailURL" />
+		<xsd:attribute ref="tailclip" default="true" />
+		<xsd:attribute ref="tailhref"/>
+		<xsd:attribute ref="taillabel" />
+		<xsd:attribute ref="tailport" default="center"/>
+		<xsd:attribute ref="tailtarget" />
+		<xsd:attribute ref="tailtooltip" />
+		<xsd:attribute ref="target" />
+		<xsd:attribute ref="tooltip" />
+		<xsd:attribute ref="weight" default="1.0" />
+	</xsd:complexType>
+
+	<xsd:complexType name="node">
+		<xsd:attribute ref="URL" />
+		<xsd:attribute ref="color" default="black" />
+		<xsd:attribute ref="colorscheme" />
+		<xsd:attribute ref="comment" />
+		<xsd:attribute ref="distortion" default="0.0" />
+		<xsd:attribute ref="fillcolor" default="lightgrey" />
+		<xsd:attribute ref="fixedsize" default="false" />
+		<xsd:attribute ref="fontcolor" default="black" />
+		<xsd:attribute ref="fontname" default="Times-Roman" />
+		<xsd:attribute ref="fontsize" default="14.0" />
+		<xsd:attribute ref="group" />
+		<xsd:attribute ref="height" default="0.5" />
+		<xsd:attribute ref="image" />
+		<xsd:attribute ref="imagescale" default="false" />
+		<xsd:attribute ref="label" default="\N" />
+		<xsd:attribute ref="layer" />
+		<xsd:attribute ref="margin" />
+		<xsd:attribute ref="nojustify" default="false" />
+	<!--	<xsd:attribute ref="orientation" default="0.0" /> -->
+		<xsd:attribute ref="peripheries" />
+		<xsd:attribute ref="pin" default="false" />
+		<xsd:attribute ref="pos" />
+		<xsd:attribute ref="rects" />
+		<xsd:attribute ref="regular" default="false" />
+		<xsd:attribute ref="root" default="false" />
+		<xsd:attribute ref="samplepoints" default="false" />
+		<xsd:attribute ref="shape" default="ellipse" />
+		<xsd:attribute ref="shapefile" />
+		<xsd:attribute ref="showboxes" default="0" />
+		<xsd:attribute ref="sides" default="4" />
+		<xsd:attribute ref="skew" default="0.0" />
+		<xsd:attribute ref="style" />
+		<xsd:attribute ref="target" />
+		<xsd:attribute ref="tooltip" />
+		<xsd:attribute ref="vertices" />
+		<xsd:attribute ref="width" default="0.75" />
+		<xsd:attribute ref="z" default="0.0" />
+	</xsd:complexType>
+	
+	<xsd:complexType name="graph">
+		<xsd:attribute ref="Damping" default="0.99" />
+		<xsd:attribute ref="K" default="0.3" />
+		<xsd:attribute ref="URL" />
+		<xsd:attribute ref="bb" />
+		<xsd:attribute ref="bgcolor" />
+		<xsd:attribute ref="center" />
+		<xsd:attribute ref="charset" />
+		<xsd:attribute ref="clusterrank" default="local" />
+		<xsd:attribute ref="colorscheme" />
+		<xsd:attribute ref="comment" />
+		<xsd:attribute ref="compound" default="false" />
+		<xsd:attribute ref="concentrate" default="false" />
+		<xsd:attribute ref="defaultdist" />
+		<xsd:attribute ref="dim" default="2" />
+		<xsd:attribute ref="diredgeconstraints" default="false" />
+		<xsd:attribute ref="dpi" default="96.0" />
+		<xsd:attribute ref="epsilon" />
+		<xsd:attribute ref="esep" />
+		<xsd:attribute ref="fontcolor" default="black" />
+		<xsd:attribute ref="fontname" default="Times-Roman" />
+		<xsd:attribute ref="fontnames" />
+		<xsd:attribute ref="fontpath" />
+		<xsd:attribute ref="fontsize" default="14.0" />
+		<xsd:attribute ref="label" />
+		<xsd:attribute ref="labeljust" default="c" />
+		<xsd:attribute ref="labelloc" default="b" />
+		<xsd:attribute ref="landscape" default="false" />
+		<xsd:attribute ref="layers" default="false" />
+		<xsd:attribute ref="layersep" default=" :	" />
+		<xsd:attribute ref="levelsgap" default="0.0" />
+		<xsd:attribute ref="lp" />
+		<xsd:attribute ref="margin" />
+		<xsd:attribute ref="maxiter" />
+		<xsd:attribute ref="mclimit" default="1.0" />
+		<xsd:attribute ref="mindist" default="1.0" />
+		<xsd:attribute ref="mode" default="major" />
+		<xsd:attribute ref="model" default="shortpath" />
+		<xsd:attribute ref="mosek" default="false" />
+		<xsd:attribute ref="nodesep" default="0.25" />
+		<xsd:attribute ref="nojustify" default="false" />
+		<xsd:attribute ref="normalize" default="false" />
+		<xsd:attribute ref="nslimit" />
+		<xsd:attribute ref="nslimit1" />
+		<xsd:attribute ref="ordering" />
+		<!-- <xsd:attribute ref="orientation" /> -->
+		<xsd:attribute ref="outputorder" default="breadthfirst" />
+		<xsd:attribute ref="overlap" default="true" />
+		<xsd:attribute ref="pack" default="false" />
+		<xsd:attribute ref="packmode" default="node" />
+		<xsd:attribute ref="pad" />
+		<xsd:attribute ref="page" />
+		<xsd:attribute ref="pagedir" />
+		<xsd:attribute ref="quantum" default="0.0" />
+		<xsd:attribute ref="rankdir" default="TB" />
+		<xsd:attribute ref="ranksep" />
+		<xsd:attribute ref="ratio" />
+		<xsd:attribute ref="remincross" default="false" />
+		<xsd:attribute ref="resolution" default="96.0" />
+		<xsd:attribute ref="root" />
+		<xsd:attribute ref="rotate" default="0" />
+		<xsd:attribute ref="searchsize" default="30" />
+		<xsd:attribute ref="sep" default="0.1" />
+		<xsd:attribute ref="showboxes" default="0" />
+		<xsd:attribute ref="size" />
+		<xsd:attribute ref="splines" />
+		<xsd:attribute ref="start" />
+		<xsd:attribute ref="stylesheet" />
+		<xsd:attribute ref="target" />
+		<xsd:attribute ref="truecolor" />
+		<xsd:attribute ref="viewport" />
+		<xsd:attribute ref="voro_margin" default="0.05" />
+	</xsd:complexType>
+
+	<xsd:complexType name="subgraph">
+		<xsd:attribute ref="rank" />
+	</xsd:complexType>
+
+	<xsd:complexType name="cluster">
+		<xsd:attribute ref="K" />
+		<xsd:attribute ref="URL" />
+		<xsd:attribute ref="bgcolor" />
+		<xsd:attribute ref="color" default="black" />
+		<xsd:attribute ref="colorscheme" />
+		<xsd:attribute ref="fillcolor" default="black" />
+		<xsd:attribute ref="fixedsize" default="false" />
+		<xsd:attribute ref="fontcolor" default="black" />
+		<xsd:attribute ref="fontname" default="Times-Roman" />
+		<xsd:attribute ref="fontsize" default="14.0" />
+		<xsd:attribute ref="label" />
+		<xsd:attribute ref="labeljust" default="c" />
+		<xsd:attribute ref="labelloc" default="t" />
+		<xsd:attribute ref="lp" />
+		<xsd:attribute ref="nojustify" default="false" />
+		<xsd:attribute ref="pencolor" default="black" />
+		<xsd:attribute ref="style" />
+		<xsd:attribute ref="target" />
+		<xsd:attribute ref="tooltip" />
+	</xsd:complexType>
+
+</xsd:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/schema/attributes.xslt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,467 @@
+<?xml version="1.0"?>
+<xsl:stylesheet
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:gv="urn:graphviz"
+	version="1.0">
+	
+	<xsl:output method="html" />
+	
+	<xsl:variable name="arguments" select="document('arguments.xml')" />
+	
+	<xsl:template match="/">
+		<html>
+			<head>
+				<title>Node, Edge and Graph Attributes</title>
+				<style>
+					body
+						{
+							margin: 0px;
+							padding: 0px;
+							overflow: hidden;
+							
+							font-family: Georgia;
+						}
+						
+					code
+						{
+							font-family: Courier;
+						}
+						
+					a
+						{
+							text-decoration: none;
+						}
+						
+					a:hover
+						{
+							text-decoration: underline;
+						}
+						
+					#indices
+						{
+							position: absolute;
+							left: 0px;
+							width: 200px;
+							top: 0px;
+							bottom: 0px;										/* IE doesn't use this */
+							height: expression(offsetParent.offsetHeight);	/* only IE uses this */
+							overflow: auto;
+							
+							background: #EEEEEE
+						}
+						
+					#contents
+						{
+							position: absolute;
+							left: 210px;
+							right:0px;											/* IE doesn't use this */
+							width: expression(offsetParent.offsetWidth-210);	/* only IE uses this */
+							top: 0px;
+							bottom: 0px;										/* IE doesn't use this */
+							height: expression(offsetParent.offsetHeight);	/* only IE uses this */
+							overflow: auto;
+						}
+						
+					.val
+						{
+							font-family: Courier;
+							color: green;
+						}
+						
+					.attr
+						{
+							font-family: Courier;
+							font-weight: bold;
+						}
+						
+					.comp
+						{
+						}
+						
+					.layout
+						{
+						}
+						
+					.format
+						{
+						}
+						
+					.note
+						{
+						}
+						
+					.missing
+						{
+							color: lightgray;
+						}
+						
+					.heading
+						{
+							padding-left: 5px;
+							padding-right: 5px;
+							padding-top: 10px;
+							padding-bottom: 2px;
+							
+							color: gray;
+							font-weight: bold;
+							font-size: 60%;
+						}
+						
+					.text
+						{
+							padding-left: 20px;
+							padding-bottom: 10px;
+							padding-right: 10px;
+						}
+						
+					.index
+						{
+							padding-left: 20px;
+							padding-right: 5px;
+							padding-top: 2px;
+							padding-bottom: 2px;
+							
+							display: block;
+							font-size: 80%;
+							
+							color: blue;
+						}
+						
+					.index_selected
+						{
+							background: #8888FF;
+							color: white;
+						}
+						
+					.content
+						{
+							display: none;
+						}
+						
+					.content_selected
+						{
+							display: block;
+						}
+				</style>
+				
+				<script>
+					<xsl:text disable-output-escaping="yes">
+						var lastSelected = null;
+						
+						function addClass (element, newClass)
+							{
+								if (element)
+									{
+										var classes = element.className.split (" ");
+										for (var i = 0; i &lt; classes.length; ++i)
+											if (classes [i] == newClass)
+												break;
+												
+										if (i == classes.length)
+											{
+												classes.push (newClass);
+												element.className = classes.join (" ");
+											}
+									}
+							}
+							
+						function removeClass (element, oldClass)
+							{
+								if (element)
+									{
+										var classes = element.className.split (" ");
+										for (var i = 0; i &lt; classes.length; ++i)
+											if (classes [i] == oldClass)
+												{
+													classes.splice (i, 1);
+													element.className = classes.join (" ");
+													break;
+												}
+									}
+							}
+						
+						
+						function select (selected)
+							{
+								if (selected != lastSelected)
+									{
+										// deselect the last selection
+										if (lastSelected)
+											{
+												removeClass (document.getElementById ("index_" + lastSelected.replace (':', '_')), "index_selected");
+												removeClass (document.getElementById ("content_" + lastSelected.replace (':', '_')), "content_selected");
+											}
+									
+										lastSelected = selected;
+										
+										var selectedIndex = document.getElementById ("index_" + lastSelected.replace (':', '_'));
+										addClass (selectedIndex, "index_selected");
+										
+										// ensure selected index is visible in indices source list
+										if (selectedIndex)
+											{
+												var indexTop = selectedIndex.offsetTop;
+												var indexBottom = indexTop + selectedIndex.offsetHeight;
+												var indicesTop = selectedIndex.offsetParent.scrollTop;
+												var indicesBottom = indicesTop + selectedIndex.offsetParent.offsetHeight;
+												if (indexBottom &lt; indicesTop || indexTop &gt; indicesBottom)
+													selectedIndex.scrollIntoView ();
+											}
+										
+										// display the content associated with the selected index
+										addClass (document.getElementById ("content_" + lastSelected.replace (':', '_')), "content_selected");
+									}
+								return true;
+							
+							}
+							
+						function hashed ()
+							{
+								// check if we navigated to a new internal location e.g. via the back button
+								// if so we need to update the selection
+								// NOTE: this means there are no real anchors in the HTML at all, we're just simulating them
+								var hash = window.location.hash;
+								if (hash &amp;&amp; hash.charAt (0) == '#')
+									select (hash.substr (1));
+								else
+									select ("h:introduction");
+								return true;
+							}
+						
+						function clicked (event)
+							{
+								// check to see if an internal link was clicked, if so we need to update the selection
+								// NOTE: this is not strictly necessary since hashed () will catch it but it helps with the responsiveness
+								var	clickedElement = event.target;
+								if (!clickedElement)
+									clickedElement = event.srcElement;
+								switch (clickedElement.tagName)
+									{
+										case 'a':
+										case 'A':
+											var oldHref = window.location.href;
+											var oldHash = oldHref.indexOf ('#');
+											if (oldHash == -1)
+												oldHash = oldHref.length;
+												
+											var newHref = clickedElement.href;
+											var newHash = newHref.indexOf ('#');
+											if (newHash == -1)
+												newHash = newHref.length;
+												
+											if (oldHref.substr (0, oldHash) == newHref.substr (0, newHash))
+												{
+													if (newHash &lt; newHref.length)
+														select (newHref.substr (newHash + 1));
+													else
+														select ("h:introduction");
+												}
+											break;
+									}
+								return true;
+							}
+							
+						function loaded ()
+							{
+								hashed ();
+								window.setInterval ("hashed ()", 1000);
+								return true;
+							}
+					</xsl:text>
+				</script>
+				
+			</head>
+			<body onload="return loaded ()" onclick="return clicked (event)">
+				<div id="indices">
+
+					<!-- display all the attribute type names -->
+					<div class="heading">NOTES</div>
+					<xsl:for-each select="/xsd:schema/xsd:annotation[@id]">
+						<a id="index_h_{@id}" class="index note" href="#h:{@id}">
+							<xsl:value-of select="@id" />
+						</a>
+					</xsl:for-each>
+									
+					<!-- display all the attribute names -->
+					<div class="heading">ATTRIBUTES</div>
+					<xsl:for-each select="/xsd:schema/xsd:attribute">
+						<a id="index_d_{@name}" class="index attr" href="#d:{@name}">
+							<xsl:value-of select="@name" />
+						</a>
+					</xsl:for-each>
+					
+					<!-- display all the attribute type names -->
+					<div class="heading">TYPES</div>
+					<xsl:for-each select="/xsd:schema/xsd:simpleType">
+						<a id="index_k_{@name}" class="index type" href="#k:{@name}">
+							<xsl:value-of select="@name" />
+						</a>
+					</xsl:for-each>
+					
+
+
+				</div>
+				<div id="contents">
+	
+					<!-- note content -->
+					<xsl:for-each select="/xsd:schema/xsd:annotation[@id]">
+						<div id="content_h_{@id}" class="content">
+							<div class="text">
+								<xsl:apply-templates select="xsd:documentation/*" mode="html" />
+							</div>
+						</div>
+					</xsl:for-each>
+								
+					<!-- attribute content -->
+					<xsl:for-each select="/xsd:schema/xsd:attribute">
+						<div id="content_d_{@name}" class="content">
+						
+							<!-- display the layouts this attribute applies to -->
+							<div class="heading">LAYOUTS</div>
+							<div class="text">
+								<xsl:variable name="attributeLayouts" select="@gv:layouts" />
+								<xsl:for-each select="$arguments/xsd:schema/xsd:simpleType[@name='layout']/xsd:restriction/xsd:enumeration">
+									<span class="layout">
+										<xsl:attribute name="class">layout <xsl:if test="$attributeLayouts and not(contains(concat(' ',$attributeLayouts,' '),concat(' ',@value,' ')))">missing</xsl:if></xsl:attribute>
+										<xsl:value-of select="@value" />
+									</span>
+									<xsl:text> </xsl:text>
+								</xsl:for-each>
+							</div>							
+							
+							<!-- display the components this attribute is used by -->
+							<div class="heading">COMPONENTS</div>
+							<div class="text">
+								<xsl:variable name="attributeName" select="@name" />
+								<xsl:for-each select="/xsd:schema/xsd:complexType">
+									<span class="comp">
+										<xsl:attribute name="class">comp <xsl:if test="not(xsd:attribute[@ref=$attributeName])">missing</xsl:if></xsl:attribute>
+										<xsl:value-of select="@name" />
+									</span>
+									<xsl:text> </xsl:text>
+								</xsl:for-each>
+							</div>
+
+							<!-- display the formats this attribute can output -->
+							<div class="heading">FORMATS</div>
+							<div class="text">
+								<xsl:choose>
+									<xsl:when test="@gv:formats">
+										<span class="format"><xsl:value-of select="@gv:formats" /></span>
+									</xsl:when>
+									<xsl:otherwise>
+										<span class="format missing">all</span>
+									</xsl:otherwise>
+								</xsl:choose>
+							</div>
+							
+							<!-- display the type of this attribute -->
+							<div class="heading">TYPE</div>
+							<div class="text">
+								<xsl:choose>
+									<xsl:when test="@type='xsd:anyURI'">
+										<span class="type">URL</span>
+									</xsl:when>
+									<xsl:when test="@type='xsd:boolean'">
+										<span class="type">bool</span>
+									</xsl:when>
+									<xsl:when test="@type='xsd:decimal'">
+										<span class="type">double</span>
+									</xsl:when>
+									<xsl:when test="@type='xsd:integer'">
+										<span class="type">int</span>
+									</xsl:when>
+									<xsl:when test="@type='xsd:string'">
+										<span class="type">string</span>
+									</xsl:when>
+									<xsl:when test="not(contains(@type,':'))">
+										<a class="type" href="#k:{@type}"><xsl:value-of select="@type" /></a>
+									</xsl:when>
+								</xsl:choose>
+							</div>
+							
+							<!-- display the attribute default or none if missing -->
+							<div class="heading">DEFAULT</div>
+							<div class="text">
+								<xsl:choose>
+									<xsl:when test="@default">
+										<span class="val">
+											<xsl:value-of select="@default" />
+										</span>
+									</xsl:when>
+									<xsl:otherwise>
+										<span class="val missing">none</span>
+									</xsl:otherwise>
+								</xsl:choose>
+							</div>
+							
+							<!-- display the description from the documentation bits -->
+							<div class="heading">DESCRIPTION</div>
+							<div class="text">
+								<xsl:apply-templates select="xsd:annotation/xsd:documentation/*" mode="html" />
+							</div>
+							
+						</div>
+					</xsl:for-each>
+					
+					<!-- attribute type content -->
+					<xsl:for-each select="/xsd:schema/xsd:simpleType">
+						<div id="content_k_{@name}" class="content">
+						
+							<!-- display the values if this is an enumeration -->
+							<xsl:if test="xsd:restriction/xsd:enumeration">
+								<div class="heading">VALUES</div>
+								<div class="text">
+									<xsl:for-each select="xsd:restriction/xsd:enumeration">
+										<span class="val"><xsl:value-of select="@value" /></span>
+										<xsl:text> </xsl:text>
+									</xsl:for-each>
+								</div>
+							</xsl:if>
+							
+							<!-- display the description from the documentation bits -->
+							<div class="heading">DESCRIPTION</div>
+							<div class="text">
+								<xsl:apply-templates select="xsd:annotation/xsd:documentation/*" mode="html" />
+							</div>
+						</div>
+					</xsl:for-each>
+
+
+
+				</div>
+			</body>
+		</html>
+	</xsl:template>
+	
+
+	
+
+	<xsl:template match="html:a[@rel='attr']" mode="html" xmlns:html="http://www.w3.org/1999/xhtml">
+		<a href="#d:{text()}" class="attr">
+			<xsl:apply-templates select="@*|node()" mode="html" />
+		</a>
+	</xsl:template>
+	
+	<xsl:template match="html:a[@rel='type']" mode="html" xmlns:html="http://www.w3.org/1999/xhtml">
+		<a href="#k:{text()}" class="type">
+			<xsl:apply-templates select="@*|node()" mode="html" />
+		</a>
+	</xsl:template>
+
+	<xsl:template match="html:a[@rel='note']" mode="html" xmlns:html="http://www.w3.org/1999/xhtml">
+		<a href="#h:{text()}" class="note">
+			<xsl:apply-templates select="@*|node()" mode="html" />
+		</a>
+	</xsl:template>
+	
+	<xsl:template match="@*|node()" mode="html">
+		<xsl:copy>
+			<xsl:apply-templates select="@*|node()" mode="html" />
+		</xsl:copy>
+	</xsl:template>
+	
+	
+</xsl:stylesheet>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/todo.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,112 @@
+<html>
+<head>
+<title>Graphviz todo list 30-January-2009</title>
+</head>
+<body bgcolor=#ffffff>
+
+<h1>Graphviz todo list 30-January-2009</h1>
+<P>
+The 4 categories give a rough time as to when a task should be done, 
+and reflect an assessment of the task's ease multiplied by its importance. 
+Thus, orthogonal layouts are extremely important but not easy,
+so they fall into category 2. The following denote owners:<br>
+AB=<A HREF=mailto:arif@research.att.com>Arif Bilgin</A><br>
+ERG=<A HREF=mailto:erg@graphviz.org>Emden Gansner</A><br>
+JCE=<A HREF=mailto:ellson@graphviz.org>John Ellson</A><br>
+SCN=<A HREF=mailto:north@graphviz.org>Stephen North</A><br>
+YH=<A HREF=mailto:yifanhu@graphviz.org>Yifan Hu</A><br>
+
+<hr align=left width=66>
+<H2>Category 0</H2>
+<pre>
+ALL - Revise the buglist
+SCN - Update dot/neatoguide
+</pre>
+<hr align=left width=66>
+<H2>Category 1</H2>
+<pre>
+SCN - Lightweight edge labels in dot
+? - Lightweight node labels in dot, just placed outside nodes.
+SCN - Treemaps
+JCE - Extend attribute set for line styles
+JCE - Allow arrowheads in the middle of edges
+JCE - Support single, uniform font descriptors &#224; la pango
+?   - Move generic node adjustment and spline routing out of neato
+ERG - New text labels with font elements &lt;B&gt;, &lt;I&gt;, &lt;TT&gt;, etc. (support via fontconfig or egregious hacks)
+AB  - Create Graph editor for Topview/Graphviz with OpenGL and GTK. (smyrna - in process) (Deprecate use of lefty)
+YH/ERG - Clusters in sfdp
+YH/ERG - Fixed nodes in sfdp
+</pre>
+<hr align=left width=66>
+<H2>Category 2</H2>
+<pre>
+SCN/AB - New dot core:
+   - cgraph
+   - new rank assignment (have prototype)
+   - new mincross + clusters (partial prototype)
+   - symmetrize layouts
+  - Ulrik's improvements with network simplex
+JCE - Shapes
+	- SVG grammar or other grammar to specify node and arrow shapes
+	- user-defined nodes in all code generators
+YH/ERG - additional graph packing strategies
+? - Filters for GraphML and Chaco formats.
+? - Library for bundled edges (Given two sets of nodes, with positions, 
+forming a bipartite graph, return splines to bundle the edges together)
+? - better spacing of edges along the side of a node, especially
+exposed port sides. Perhaps extend compass points to S, N, E, W to
+mean anywhere along that side.
+? - Tabular layout in rows and columns in dot (swim lanes)
+? - Enable arbitrary depth clusters in neato using IPSEP
+? - Allow mixed edge types within the same graph
+
+</pre>
+<hr align=left width=66>
+<H2>Category 3</H2>
+<pre>
+Generic label placement, with and without modifying graph layout.
+Support for compound graphs.
+Spline router improvement (Gordon's improvements, alpha adjustments, fewer
+  inflection points)
+Fast incremental hierarchical layout
+Edge routing with just two vnodes per edge (after Kaufmann)
+Graph language improvements
+  local name spaces
+  subclassing
+Shapes - new parallelogram shape where angle is fixed for varying text
+Orthogonal layouts.
+Support rank=min/max within the context of a cluster
+</pre>
+<H2>General R&D directions</H2>
+<pre>
+Incremental layouts
+Dot with orthogonal, coalesced edges (e.g., <A  HREF=http://upload.wikimedia.org/wikipedia/en/thumb/7/74/Uml_diagram.svg/700px-Uml_diagram.svg.png>this</A>)
+Constraint-based layouts
+Display of large-graphs (hair ball problem)
+ - relaxing constraining edges 
+ - edge bundles
+Venn diagrams 
+Integration of geographic info - maps
+</pre>
+<H2>Done</H2>
+<pre>
+JCE - Extend attribute set for line thickness
+ERG - New text labels with font elements &lt;FONT&gt;
+ERG - Allow edges as line segments and polylines
+ERG - New multiedge code
+YH/ERG - New overlap adjustment strategies
+YH - Faster fdp (sfdp)
+ERG - Variable port depending on layout
+ERG - Better aspect ratio in dot
+ERG - New orthogonal routing code
+JCE - use floats not ints where appropriate
+YH - Filters for Matrix Market
+</pre>
+<H2>Retired</H2>
+<pre>
+JCE - Revise GV_FILE_PATH to work as directory list; remove loose ends
+ERG - eliminate the nonlinear adjustment
+ - use convex hull or alpha shapes
+</pre>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/html/winbuild.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,301 @@
+<html>
+<head>
+<title>Graphviz Build Instructions for Windows</title>
+</head>
+<body bgcolor=#ffffff>
+<h2>Graphviz Build Instructions for Windows</h2>
+<P>
+<b>(Graphviz versions &ge; 2.22)</b>
+<P>
+We now build both Visual Studio and MinGW versions of Graphviz.
+In addition, the source package comes with project files for Visual Studio,
+so building from source should be fairly simple in either case.
+<UL>
+<LI>
+The first step is to add the third-party libraries. These are listed
+<A HREF="http://www.graphviz.org/Download_source.php">here</A>.
+This is most easily done by installing
+a Windows binary version of <A HREF="http://www.gtk.org">GTK 2.0</A> or later. 
+<LI>
+Next, download and unwrap the Graphviz source package. Go to
+<A HREF=http://www.graphviz.org/Download_source.php>http://www.graphviz.org/Download_source.php</A>
+and copy over either the stable release
+or the development source package.
+</UL>
+Let $ROOT be the root directory (folder) 
+in which you stored the Graphviz source.
+<h3>Building with Visual Studio</h3>
+<OL>
+<LI>
+Copy the file $ROOT/windows/config.h into $ROOT.
+<LI>
+Copy the folder $ROOT/windows/FEATURE into $ROOT.
+<LI>
+Start Visual Studio and read in $ROOT/graphviz.sln.
+There are project files for all of the parts of Graphviz.
+<LI>
+Modify the various settings for include file and library directories to find
+the third-party software.
+<LI>
+Modify the settings as to where you want the software installed.
+<LI>
+Build Graphviz.
+</OL>
+<h3>Building with MinGW</h3>
+<OL>
+<LI> Install MinGW and Msys.  This gives a mini GNU-like compile environment 
+<LI> Set environment variables based on your machine, giving values to the
+first six below:
+<CODE>
+<PRE>
+export INSTALLROOT           # Root install directory
+export GTKDIR                # Root of GTK tree
+export FONTCONFIGINCLUDEDIR  # Path of fontconfig include dir
+export FONTCONFIGLIBDIR      # Path of fontconfig lib dir
+export FREETYPEINCLUDEDIR    # Path of freetype2 include dir
+export FREETYPELIBDIR        # Path of freetype2 lib dir
+
+export CFLAGS="-DGVDLL=1"
+export CPPFLAGS="-I$GTKDIR/include -I$GTKDIR/include/freetype2 "
+export LDFLAGS="-L$GTKDIR/lib -no-undefined"
+export FONTCONFIG_CFLAGS=-I$GTKDIR/include/
+export FONTCONFIG_LIBS="-L$FONTCONFIGLIBDIR -lfontconfig"
+export FREETYPE2_CFLAGS=-I$FREETYPEINCLUDEDIR
+export FREETYPE2_LIBS="-L$FREETYPELIBDIR
+export PKG_CONFIG=$GTKDIR/bin/pkg-config
+export PKG_CONFIG_PATH=$GTKDIR/lib/pkgconfig
+
+export PANGOFLAGS="--with-fontconfig --with-fontconfiglibdir$FONTCONFIGLIBDIR --with-fontconfigincludedir=$FONTCONFIGINCLUDEDIR --with-pangocairo"
+
+</PRE>
+</CODE>
+<LI> Change directory to $ROOT and run configure:<BR>
+<CODE>
+<PRE>
+./configure -C --prefix=$INSTALLROOT --without-gdk-pixbuf --with-mylibgd --disable-swig --without-x  --disable-tcl --without-ipsepcola --with-codegens --enable-shared --disable-static --with-freetype=$GTKDIR/lib --enable-ltdl $PANGOFLAGS --without-gtk --without-gtkgl
+
+</PRE>
+</CODE>
+When configure finishes, it lists all of the Graphviz features that have been
+enabled. If there are problems, you can check for errors in <TT>config.log</TT>.
+You may have to add or modify
+other flags and environment variables for <TT>configure</TT> to give you the
+settings you want. Run <TT>configure --help</TT>
+to see the allowed options and environment variables.
+<LI> Run <TT>make</TT>
+<LI> Run <TT>make install</TT>
+</OL>
+These builds create a feature-full version of Graphviz. You can tailor
+them to your wants. This is fairly simple for MinGW: just remove or reset
+the flag of the option you don't want. For Visual Studio, you will probably
+need to reset some of the values in <TT>config.h</TT> and some of the
+compile-time options.
+<HR>
+<P>
+<b>(2.21 &gt;= Graphviz versions &gt; 2.14)</b>
+<P>
+To simplify our build process, especially as most Windows users only
+want a binary version of the software, the Graphviz build for Windows
+now uses <A HREF="http://www.research.att.com/sw/tools/uwin/"><B>uwin</B></A>, 
+an open-source Unix layer on top of Windows. In this
+environment, we can use essentially the same tools and process
+used on Unix. In particular, we do not have to maintain multiple build
+files. 
+<P>
+To build Graphviz:
+<OL>
+<LI>
+Install the third-party libraries. This is most easily done by installing
+a Windows binary verion of <A HREF="http://www.gtk.org">GTK 2.0</A> or later. 
+<LI>
+Download the Graphviz source package:<BR>Go to
+<A HREF=http://www.graphviz.org/Download_source.php>http://www.graphviz.org/Download_source.php</A>
+and copy over either the stable release <TT>graphviz-</TT><I>VERSION</I><TT>.tar.gz</TT>
+or the development source package <TT>graphviz-working.tar.gz</TT>.
+<LI>
+Unwrap the package:<BR>
+You can use, for example,<BR><BR>
+<TT>gunzip < graphviz-working.tar.gz | tar xf -</TT><BR>
+<SPACER TYPE=VERTICAL SIZE=10>
+<BR>
+Let <TT>$ROOT</TT> be the directory in which you stored the Graphviz source.
+<LI>
+Configure the package for your system:<BR><BR>
+<TT>cd $ROOT</TT><BR>
+<TT>configure --disable-shared --enable-static --with-mylibgd --disable-swig --without-x  --without-tclsh --with-codegens --disable-ltdl</TT><BR><BR>
+You will probably want to provide additional arguments to 
+<TT>configure</TT> to indicate where you have installed GTK, where
+you want the results installed (<TT>--prefix</TT>) and which
+additional optional packages you want built. Run <TT>configure --help</TT>
+to see the available set of arguments.
+<LI>
+Build Graphviz:<BR><BR>
+<TT>make install</TT><BR><BR>
+</OL>
+<P>
+Presumably, a similar approach would work with Cygwin or MinGW. 
+The following are some notes by
+<A HREF="https://mailman.research.att.com/pipermail/graphviz-devel/2007/000444.html">Steve Roush</A> 
+describing how he
+made a static build of the libraries on MinGW.
+<MENU>
+<LI> Install MinGW and Msys.  This gives a mini GNU-like compile environment 
+that produces Windows-compatible results.
+<LI> You may need to configure and build in Windows "Safe mode".  Try 
+./configure in normal mode; if it dies with "fork" problems, use Safe mode.
+<LI> Edit the "configure" file.<BR>
+ after this line:<BR>
+     <CODE>DEFS=-DHAVE_CONFIG_H</CODE><BR>
+ add these lines:<BR>
+<CODE>
+<PRE>
+    case "$host_os" in
+     mingw*)
+       DEFS="$DEFS -DWIN32 -DMSWIN32"
+       ;;
+     esac
+</PRE>
+</CODE>
+<LI> run configure:<BR>
+<CODE>
+<PRE>
+   ./configure  --enable-static=yes --enable-shared=no 
+--prefix=/usr/local/ --with-libgd=no --enable-ltdl=no --disable-swig  
+--disable-sharp --disable-guile --disable-io --disable-java 
+--disable-lua --disable-ocaml --disable-perl --disable-php 
+--disable-python --disable-ruby --disable-tcl
+</PRE>
+</CODE>
+<LI> edit lib/Makefile<BR>
+ replace these lines:<BR>
+<CODE>
+<PRE>
+ SUBDIRS = cdt graph agraph gd pathplan agutil sfio vmalloc ast vpsc \
+     circogen dotgen fdpgen neatogen twopigen common pack gvc \
+     ingraphs expr
+</PRE>
+</CODE>
+
+ with these lines:<BR>
+<CODE>
+<PRE>
+ SUBDIRS = cdt graph agraph gd pathplan  vpsc \
+    circogen dotgen fdpgen neatogen twopigen common pack gvc \
+    ingraphs
+
+make  # builds most of "lib" (see Makefile changes), cmd/dot and 
+cmd/tools - stops on cmd/gvpr
+make install
+</PRE>
+</CODE>
+</MENU>
+here is the command line I used to build "simple.c" (dot.demo/simple.c), 
+after adding a few lines based on 
+https://mailman.research.att.com/pipermail/graphviz-interest/2006q2/003586.html 
+
+
+<CODE>
+<PRE>
+X=simple;gcc -v -I'/usr/local/include/graphviz' -I'/usr/local/include' 
+-o $X -O $X.c  -L/usr/local/lib -L/usr/local/lib/graphviz -lgvc  -lgraph 
+-lpathplan -lcdt -lgvplugin_core -lgvplugin_dot_layout 
+-lgvplugin_neao_layout -lgvplugin_gd -lgvplugin_pango -lgvc -lpathplan
+</PRE>
+</CODE>
+<P>
+If you
+desire to build directly using Visual Studio or other non-Unix-based
+environment, you will need to derive the necessary information from the
+supplied Makefiles.
+<HR>
+<P>
+<b>(2.14 &gt;= Graphviz versions &gt;= 2.3)</b>
+<P>
+We build Graphviz on Windows using the MS Visual C++ 6.0 compiler 
+only. The simplest way to build the software from source on Windows is as 
+follows:
+<OL>
+<LI>
+Download the Windows source package from:
+<A HREF=http://www.graphviz.org/Download_windows.php>http://www.graphviz.org/Download_windows.php</A>.
+</LI>
+<SPACER TYPE=VERTICAL SIZE=10>
+<LI>
+Unwrap the package:<BR>
+If you have Unix tools available, you can use
+<SPACER TYPE=VERTICAL SIZE=10>
+<TT>gunzip < graphviz-win.tgz | tar xf -</TT><BR>
+<SPACER TYPE=VERTICAL SIZE=10>
+If not, double click on the file and WinZip should start up and let you
+store all of the files into a directory.<BR>
+Let <TT>$ROOT</TT> be the directory in which you stored the Graphviz source.
+</LI>
+<SPACER TYPE=VERTICAL SIZE=10>
+<LI>
+Add the third-party libraries:  
+<SPACER TYPE=VERTICAL SIZE=10>
+<UL TYPE=DISC>
+<LI>
+zlib 1.1.3 <A HREF=http://www.gzip.org/zlib/>http://www.gzip.org/zlib/</A>
+<LI>
+libpng 1.0.6 <A HREF=http://www.libpng.org/pub/png>http://www.libpng.org/pub/png</A> 
+<LI>
+jpeg-6b 62 <A HREF=http://www.ijg.org/>http://www.ijg.org/</A>
+<LI>
+freetype 2.1.7 <A HREF=http://freetype.sourceforge.net/>http://freetype.sourceforge.net/</A>
+<LI>
+expat <A HREF=http://expat.sourceforge.net/>http://expat.sourceforge.net/</A>
+</UL>
+<SPACER TYPE=VERTICAL SIZE=10>
+The versions should be at least the ones indicated.
+You can download the files from 
+<a href=http://www.graphviz.org/Misc/third-party.zip>http://www.graphviz.org/Misc/third-party.zip</a>.
+Unzip the package in the <TT>$ROOT</TT> directory; this will create a subdirectory called
+<TT>third-party</TT>.
+Or you can obtain the libraries yourself, and install 
+them in <TT>$ROOT\third-party</TT>
+Also note that these libraries come with the binary release.
+</LI>
+<SPACER TYPE=VERTICAL SIZE=10>
+<LI>
+Build the software in one of the following ways:<BR>  
+<UL TYPE=DISC>
+<LI> Run the script <TT>$ROOT\build.bat</TT> while in the <TT>$ROOT</TT> 
+directory. You'll first want to check
+that the <TT>vc</TT> variable points to your local installation of visual C.
+Obviously, this should be run in a DOS command window.
+<LI> The file <TT>$ROOT\ws\graphviz.dsw</TT> 
+is the main workspace for the Graphviz libraries and graph drawing programs.
+The file
+<TT>$ROOT\ws\tools.dsw</TT> provides the workspace for the
+additional Graphviz tools. Double-clicking on these files will open the
+workspaces using the MS Visual Studio, from which you can use the Build
+menu item to create the various libraries and programs. 
+<PP>
+Note that we have avoided all dependencies (i.e., there are no .dep files)
+because we found they tended to include absolute pathnames.
+If necessary, follow the order used in <TT>build.bat</TT> to be safe.
+<LI> If you have a Unix environment, with a real ksh, run the script 
+<TT>$ROOT\wmake.sh</TT>
+after setting the PATH, LIB and INCLUDE shell variables to the paths where
+the Visual C programs are installed on your machine, and the associated
+library and include file directories.
+</UL>
+</OL>
+<P> Once built, all of the libraries and programs will be found in
+either the Release or Debug subdirectory of the corresponding source
+directory. If you wish to install
+the software somewhere, edit the file <TT>$ROOT\install.bat</TT> to
+set the variable <TT>root</TT> to be the absolute pathname of the
+directory where you want
+the software installed, and then run the script <TT>$ROOT\install.bat</TT>
+from the <TT>$ROOT</TT> directory.
+<P>
+If you want to change source files, you can just do it and rebuild.
+If, however, you want to add new files or projects, you will
+have to redo the makefiles or scripts.
+<P>
+If you have problems or questions, please contact us at
+<A href=mailto:erg@research.att.com>erg@research.att.com</A>.
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/latex_suggestions.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,51 @@
+--- vladimir@worklogic.com: this below isn't implemented yet! ---
+--- Talk to me if you're interested in it and want to help ---
+                           Latex/Psfrag Attributes+
+Only work in -Tps and if latex2e and psfrag.sty ver.3 are installed.
+  The resulting ps file will print latex commands unless you include it in a
+tex file that does \usepackage[scanall]{psfrag}, or run it through the
+supplied script "psfrag" (which wraps it in such a tex file).
+
+psfrag: string [GNE]. This text is passed through latex. 
+  Example: node: a1 [psfrag="$\alpha_1$"]
+           edge: x->y [label="x -> y" psfrag="$x \rightarrow y$"] 
+  The name/label is used only as a guide for positioning, but you better
+  specify them. E.g. if the edge had no label attribute, dot would have to
+  assume that the label is 17 characters wide.
+    The line breaks \l,\n,\r are *not* processed in the psfrag attribute.
+  If you want line breaks, arrange it with latex commands, and *also* specify
+  a label that emulates the breaks.
+tailpsfrag/headpsfrag: string [E]. Same for tail/head of the edge.
+fontname: [GNE] Use any of the commands described in latex2e's fntguide.
+  If the command sequence contains %s, the text is inserted there. Else the
+  text is preceded by the command, all surrounded by braces. For example, if
+  the text is "..." then \texttt{%s} becomes \texttt{...}, and \ttfamily
+  becomes {\ttfamily ...}. 
+    If fontname matches "tt" then dot will use fixed font width for its
+  positioning (is 0.65 right??). If fontname matches "bf" then dot will
+  multiply the width for positioning purposes by ?? (for all families??).
+    You cannot change the font by simply giving a different font name.
+  E.g. to switch to Courier, you either have to use \texttt{%s} with a style
+  that uses Postscript fonts, or else use \fontfamily{pcr}\selectfont ("pcr"
+  stands for postscript courier). As a precaution, dot won't output a fontname
+  that does not contain \.
+    Often used commands are \rmfamily (roman), \sffamily (sans serif),
+  \ttfamily (typewriter), \mdseries (medium, i.e. normal), \bfseries (bold),
+  \upshape (upright, i.e. normal), \itshape (italic), \slshape (slanted),
+  \scshape (small caps); or their equivalents \textrm{%s}, ...; \boldmath;
+  \mathcal{%s}.
+fontsize: "n\cmd". [GNE] Dot assumes for positioning purposes that the font is
+  n points high, and emits the font changing command \cmd to latex. Both n and
+  \cmd are optional.
+    If \cmd is missing then you are informing dot that the latex fontsize is n.
+  *Please* do this at the top level. The default 14 is probably wrong for you.
+  The correct setting for a 10pt article style is "digraph G {fontsize=10 ...}"
+    If you use "n!", dot will force this size to latex by emitting commands
+  \fontsize\selectfont. This is not smart unless you use scalable fonts, eg
+  postscript fonts. 
+    If n is missing and \cmd is one of the standard commands \tiny,
+  \scriptsize, \footnotesize, \normalsize, \large, \Large, \LARGE, \huge or
+  \HUGE, dot will compute the new size automatically. Otherwise you have to
+  specify both.
+    If the command contains %s, the text will be inserted there, else the
+  text is preceded by the command, all surrounded by braces.
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/acyclic.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/bcomps.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/ccomps.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/cdt.3.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/cgraph.3.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/circo.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/dijkstra.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/dot.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/dotguide.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/dotty.1.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/pdf/dottyguide.pdf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9378 @@
+%PDF-1.2
+%âãÏÓ
+2 0 obj
+<<
+/Length 301
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;THh5u5BP%#+0G'gALMA<)jsbn[1=5iT*)-jO-c>6O9A##5#BS>MB=On7r&n(e,O
+$c[aKE"])Y!V06+7E0%;i4RT2&AA9606['p"9$)ZGSdYGNc@2U7JIFsg2##imGUg]
+IX\s=bM")JC"G'L8R\@<7/EN?:,/UePtiPJAXT0kO?]4kZ:Pp4'%kp9M.bLhG,I<A
+o/J=UZG^AN3.8hYC=,#l?G_>nCLC)`=0Jtuln1YL:4)BbAj,=eeO_S5\,Xo6kKqB)
+&ia0OqWdGYek3"X3T[<M=CFo8^B4HS"Aqb~>
+endstream
+endobj
+3 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T12 4 0 R
+/T13 5 0 R
+/T14 6 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+9 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im1
+/Width 821
+/Height 612
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 26093
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]"$$PVW$q7SHm]P=0G5QhP1J8jA+M'a2'+Z3o4WXS?L-aiQ_p;-HWaRI#mn`rR
+7l8!Fj!T3(%Qd]RG-=GCrV_Oaru^FqFRl/7/5!YCIs.a34j>".@AkPXp-5J(r7GG5
+*Je3,c07'[A$Nq3)33V1@4nGY__=\&%Wh[M1CPMSm4d`'^X%Bkm.dI<2c97Io7>Bg
+`q]@fT/V]4pdnG/iquTjBd.bt=uD6B89r'lhV$/$cMl<Qc1Cl+j_jY^jg^L12oC_"
+jU(,GG7F#ul^[)ON2)>9+46:,TpLA[]Ztm3]$>"DUA6q\W&bI,kQSq>p@Xi<di;#h
+l9#KM+)7=cI)_NV(8h2"8uFDk(mFH6K"F.>3/q//n7td/XN\j$i*EcJVfA1'J"J`\
+Yqdu1EQXU.1u\;TSAnZs\'r"AB-aDFA`GksXefBL3\f#!Zh!YiB2_0;RV]$ZYo*K.
+_`Np%)J#n'YlZ@M0W-Xa39E&P6)EKr%d#U&;03^X2S\B2L/Du[i,$>GIU^?)oW0'V
+XDn+3"Od,#Bo_*?s3;I<dtY+/WU`fSs#A4m4)isWL1->AgXYq!T)F)g@%.77L1,?)
+*UKNrluCg]!1OudLTrW7V/hH*hqJ9/@n5?`/Bhuc^\dTgf:7T_0NR?)E#<X7k/1:<
+EuL1Y=;c/uRDW,DEuL1Y=;c/uRDW,DEuL1Y=;c/uRDW,DEuL1Y=;c/uRDW-oK%#Yb
+atP[43t3$]OXG)dB8p=p@i,7*T#T@DL69HF`\<49dhi9$EuMq=@SUDM7*KA(WR+J)
+A>dfdoMbh+q;H]>#FMarpB1:05).i3M-NA.%3.V3s5SIdYhe+d>XeD!L=`=(=+)5m
+1f*)HF#U:;?GXE7[p<Es4X$@#OSP"?4U5EcbnJlb#1&.0kFRq\+&:_)\M_X8)L+4/
+.48#`=Jr^X@i!=t/MA$o@ij[@(`M*^ScUK>`:rK/7DnOM:>+M>)(eUbe%@5p0@DF(
+k%+gA1VQWBc&`K,i6:Ite\&<qGL\AOF0EXB(<s0JCN(2e#N)GN)+!_*N38i0`rss8
+Usg1@aNB9dWFD)X3fTha:c\%A1jWS*1E2A=QtSrs:,=9CT#Y/9?V!p:nT%Z[i=Pt1
+fmIhT1BHPgR<Y;?mj:&SM1uEa^@QJdl=E`TbUONP)EHS&mZ?^Mb(9GBnpi!9kf92_
+O:K/Em<0Q8W"TVbs.`D\7c[:fnT(]";sTq<'Zs9"RV0RKS0h].*-&9nW.cA#!NBfm
+*O9?H#8*O223ZM)k+CT>FAXlNk3Q3PFPug`Gs[1.Kek`KM2"Kef\f^d.S$USZMg0>
+#SG0O6`R_NK38T$+-GJ8$']+>:Er-31:<pX7lIqHZOb:15*+1ZZ]m_Jr(W2!Ss5gG
+[J5_:dC_!"a_>8e<q5aJ8`ZZt<=N.Pbd<sd6ioo,pRsR+M$?I"-&&<.(62kOj>o&o
+@4.J*dSpIo7[%N`C<qbAm5,q@]Lj]RSod;6;]Y!Zdu"@u1a5;f[ZW,^jJ+cd+i7)&
+)Xom6$"ZmW19.?)M,#ZDor3,d%0U#DcS4B,T,A'ldr:I'\f"E5.iVcgn[]%Ls+]Mi
+-CP!i>inSbVef=h`r?e)rrpMYjC=aL;C]#Kg.sVq6kf3U'+MclKVD\(@OC]Bg.O?Q
+MT20@"[np+P\M#f5kHT++\C>[1bum!!@Ef:;XGTr[qO.EobteC7-6<WTX'q:<H6\S
+m/qflm_@]f0W3k0Q\:)mBe]n:k-_%::#.5[7"]KJ1F4/;#jn>1K=3cqm('_(7:l''
+%=X1H%-SUq=.,hl=X^1.ZuRRMHd+I`B[j0(UKq6uhR*uBc9OPs_5OD&_\^[&d)V59
+@VFQGm#AmL3/lA5JQb=Z5;Lca/Dus)?\MD7]ul$<mr/0fT%dlN!J"QFOqA.8:BSWB
+gn/t6F$!HAn<t5_lMWWu*eP/dSCtR,6?m3"43_O@=InTCR3:6`?.f(eUomO#osdtn
+p\4N)7>7,jL!0aa5L<36omc*6ceDlM)C_O"%6emAWT'6!&qNF4(]#jP)YZ(?@Hjj=
+,_X7hVMa0,$CD95IpsL`6`JO.^8E,C5'O#r5VYq`RZU?4g&S.*)#;CTmVmqGZ"SkQ
+NQMD4&p!()VL$+\HKCkmpG:N;k,fnTi7"S"^m`-YU*2LU7(AF];U)#<.b2[L3-4TD
+)Q0$;MbHlUU:I4[>#hT1_([2jZ"V?qkgTd<.b3flpp-8h2!-V/!5c8Lr@Dk8D:Aeh
+ZSKLRJ8D`VBJR7tS-IW#$Q#:!51*DlJuVdSK&K9HCh4[8TUdE=4Ue9hU_8$YCPZT8
+C*JYqg/T76XOFuIT+Qu_/\BD0LTE#VVJ%qeR9;@KV_QT+Ne+?4gS/,t7CQrNSX@lf
+J<hA*Q"jecmE*R')V`^P!3"c%BM5`jRc\FBCEgci&M7Vl^cTeI0tab,UJjWlrjkuB
+.JhWY#?_L=1h`eLH0`$k.Eh4kR2(kW<U8\OL^*<)?S7f+;_p5)<AUspb\;$TXtb):
+_J*a/qXBkH:!d:^#D1Dil^C"pZ:[_E]#=C&#cFMY\7dQJNY`/]C#Fn<1V1F+?jWaF
+One3X'%,Y31_Q8)<_3T%(RPIjiDd:L0U`TJ$%(cTRd](]%'D6$R)5h>-N;d+d6M@U
+q$/<Co<k;1>[Baq'Fh'&hLRf%!SgUV85:C\Z:^"j'r&!5#H-,!]sMHFm?=&0!bIW2
+_RG_-QKmD@VA>.O9btbD[&#fa2/5MmmV0mZg>EB8>H3)@e?m`R41f7_#0gkN@#[oc
+Waeb&PA#cSS'tp+gWge`Z*r5D<md-NMr.C&%p_"/VZH7I&T*g*Jibf+WK(81L/3?s
+/^rbh:35cdACbSN.d;LI12X!#?$f'/J!X<pk$s"d'di:l_*.+rD>VY!3mH(8f8,/G
+0Q!d!I??83\FVSMBE5\Wh)hT*KA=q+RhI1'.d98B/o@Qt?"eEsc-nX?Q@9RC5rd,l
+e?@TTjOOP.N=*&GJi_;L$_!OGfmATP>WbGR>+Qnc^c@Asg+$f,-7E`1ElUO^YGlTb
+`=>KsQp$EOg+)?>:e^.P*N>LM^>WDgn1=mhBc)p=8R8@_!>-6OlhaWilr:Ah$3enY
+3K9*@G33I@Wo7-Y'@!f6i=nrs$;NG?1_,--BM2>J+FK)iU=nYF>aXU&R5p7^A2q_0
+'aY0%,e<Ba?keEOi%u'b>ur>/7\_Ka%g/p\I:IN@dEDJids^RDH$)StRcQs_)iUdr
+GD96pDHGg5Z+#9EIjL^>FO)6OF.+',=>Zk#0^=@(Qi=U\>YmLr'FeqFb\8,o6W'*5
+M+C%r7No5oa_Bjb;cW:KX)t*[3=R/M3dN8I4;'fV?76K3Tbg*n)5laE)RRt(4gc1c
+Pp@H-RT+39+tEJC.iN=Xf'65QcpXEO)ehH=.]GcT>#Kb[M?ooEF8h0$`VPIh68JbB
+=^*^G_GHE\$`Sphm=OLQUkcEW.H[5b&reoregUqHWP7UMRS,,uT%irqI7.RlRU/:Y
+8C^!WU0u+)>>(H![Y.4PZn:T#Kh-",:e@3ed#b7t#M$bZ@?%!)g.D-=NFjS6,;[7F
+.]HJT$<$PZ'2<Z)+tK,;l7dPd0,hLP/1R*+&WBLC5U<.2.YX/pF\TUYhftDu^>!@p
+DZFR2`qPdHe"WR.?f_n0g1gPY=_pn*afo:TbDIXX%'0#PEMC:1"iY2=$e,pr<`6I,
+'^ng:botVS>M;MEW>[D:i:f&PZgpr?o^.$TdG23X9/1JI8jlUUR;^s2'ONnJLHR`:
+5mur0"/:QfTP.5i\O;'oRe9(t\\l/;@3C7,gS#G!ODfPjd1Dg;!elmbKu-e<+X+5N
+2k7NZ>Vq<'".Vg^Kp<p;_GmR&>"1?6RPC`)Lr*,F7?bAa?8U%K]G5_*BZt1:TeY)d
+QnC\?B9T[X5L/YVHOmeo2UR2)<mM#6!\.VRdgqG;2MbuFIhjA91Ftr^TlnO+R`K6f
+3S,AlF.-EK9U/I3:;I>Tbq\8U\k%^51_)LCJ`e]U]LI3IdV7:Q^X0O'KJ9(F&uaJ!
+i]iK]G^VoS+JWf97Y4>k_6!*rW\tccdi;*f>=?0LFK;3!Te<CkGQdm4BA;TDT?A/Z
+?[57#RrZo$4-"'NTfC;&F0,!Ibq&Q47\`j<?4gHMJ7FIfWs#0'nk3NFK:u>A7"\Bs
+IugqQBFt\c:NO`)Sl0hNiA<^0FWsY<>=H#7[`:Qi5Ou0p@TnV"h*X$H2)pM+E)*ac
+3;9"VcK3`I!e<NGfFUMo>/I>2F%l]0aoW[kg_5Yl)"?r2.%8dO>b]%oN?B]$8HtHZ
+<WqMXV3eR)SW4?5=mctE&#3g:@t<=_#bnVfA5J\/]kFYE$kuET;qqB;U+rS1L!!@h
+2!-W`;46_'U.K4BRT=(`1`]G]Wk<!hpQ$+bMp[p@F@9]?Mi5Te/LDD4#`tQGiiUC*
+;I\;T1Poe&@:C9\>VlS]R8Gff+U996Lo).<@&WIE>;Ybr&^aRjQ,T<6Q]-d@LLkuC
+chNi06rRYS&>#s9c,rcpC"u,:!oCRf'r5Hh6s#7?7RM27IsbC\XJAtQ-5qYIC901Z
+;IL+`?[gD@CaHO!_*`11M"NGE=%Vp@BqfkTRl<:W/^?tBZ(,L3:(rR>%q:fgB\5`E
+`datQ)k'Z5N"o'S?^kX5:,A;O;XKodhL)kI.c8=I:6TMF7-!3#NE$R"$3N&uEd-Nt
+`8(d*Iq0>Ne"g2*dC905C'IZT\jY"\1^'^ra-R6t9$/u*U@Dr&i,>""(b?S$-B1J^
+E>k7ShRcJqNDI0"b"lad9msSeVjTt1PW`_VP`)C^]^hhZpg2>^rQ`YFQWDA4kVSMU
+BifD7VBrgW'+NZ0rh#Td:K*.u7,u`I)GFQFLk_iH3!-eY]&dL"S>NsVX.WGP@dp9n
+6FCKqN!;#*&H/'0NRB*3B%W,Yg*!\UU-[J]L_SPk@kc;8E/4_Q9<fujdD0HRcX/?'
+)6p(od>7Btk;P8L^1DuHS84$e1u4\A7+89]SkD_LKn`hfa*J',7Y="Id2jj4[hg<f
+OT7&'fU_^.UKfW\%H7/X22Je)]E^4DBPit$c/)DO)M6F/cmBZIKXl<Z%22J3q+3t1
+[F:LV(nfTjM.R6qq(+a=]D$BOlhAgIgu$`0%f<R6<71&(?Yf+G"GdLAa7YMlEm]%M
+"JI7Ds3mAn[m!&S!?mL^XI7g$5p42760uo;&F(h($QAs6a`g03AC")@cb`1KE5U(O
+r7R-njGbk$d\-1&$to`'f7j/fo:'%o2"NhtE4<MfTet,%;.i8i%&IZHk_A8kY4;B)
+BUYi<51:@B3LJf<A;I6eeKXGq]qLQ:%;L%8;nOe#BF#m@#7Ze5>p)_AhgjiFM/]+/
+1/qrf.SK359QIb!@<=_Xr[]l_dpo&ma0GSe4\GA\d,[@)DSFh@eJ(UXgtLL@&MtA[
+"+]`rA4=mTS*SGhViQDk5a.iO,Y@Y:ciEq.!0-&5PEK4K1oarh+]!^PBV*GSG0l"k
++uBRsPEb3J^Wu\!M:.3TFc,/mfYb.j_,Kf)]4Dcu5XQ=-m@\1nl*FBR.8?K26K=C+
+ifpj[b^F*MR:ZgFHJ0P^()IY(\#/2oS1?F1$B"t!ZW33[B`d[U7doVD]:tqJV8!0j
+#S2],eR#(4cgD#ITYK2XH65F2_\%'4)ckekX#-u)02?d&1re,G$.(s*D-s,"0CQk/
+:P$N37_0$c"8;l@EXDc;dd._C6M$Jh<+$s`cVU'dL%[hhE!>fj%/6aW*05+./mSS(
++"O]CUFpL>'<=$Vd_*qsPnN6A>`Ep+8o0l7Q;%0hfXoTL8[5:3`L`b[OJ`cWkGLLa
+?*KSco1#)o-+@*iQ9<i\GGEERVV@d77$&cC^&BklYc'g!%oJc@X8/0A$=gW#oimRA
+NA0sl#2#t<Q,'JVYlp:QNEr5p9.-F+/;=!M,2(>EOKiMa`i1Va-AUa)>)P:tZCIS$
+cSn*FfW;`#L3_ftM^\8hJ>V\""W64HoR]Q61huOpR1:-_'q4Gq"&66)T_l$##CVjJ
+K8,J^3guS@1n#/Y0JbP^4fc?NT$io`_Ls@b2jiC,e^;.drKopLM5TS)5qsZ>./E#s
+b*D*!d$.[*bo"0dX"uERE&5u@/'pfs!4B46'6Eq7o*D2_\!o_%Xoi(HDA:O5aLa\^
+e![!id]?^O]a'#-RE".P#n?@_.gjKAI1eC&?$B$Xl8)fWi%4j[1fC.^M5T3:B\"6m
+cj972KH,8?Tcq(ag4']al\Q?K'=6%lB^5PY6[1,(F(eBGeoYJ)5pKI"(Ri^8P?h3$
+`Djj:TrGiW$ehtXs3;k(8opSlgNhBQ#WM[id,^d70.lA%#E;i"?rFYn?>.nK?2#sp
+FG,$]?Ag[/f3>:1HpEsfY;F`!X`b%.+WZD0($1_cW3+JQVhUb(dK"7%*.](U+'o`>
+L2D=5ZU:TMdmPn]68QBohVP716>2\/r'`%eK&rld`kA&@KepuuTioq*#gHc@M=&u4
+I$'F(>puAgc<$J#TRjbR,h_TT!i1.!?hk00Soc&feh=aYYSVd11n_-:ia@>b`?IUg
+A_NbZV)/c2KBBN25JNkH#**`-?3`:sN],@'TFhmTX@UqU@\?R-0=rC>L"ONUKLVXl
+&LLJG,L%VN9c6:hpPC.%RX:dA&]U]4eDUUk\Nr&?eq>#YN'>g7e5%Mfq?,hg6Zeo:
+32f&A-q2tu1[h#q\%c"\7_!.8S^JL'2j=KTQ..YTk(eDQdc?;qdEm::Cg6[.dq-)o
+1r=;b$dE?df#:eKObW;M+Z&;tkW(KR+rQF:<MQs7.8A4[G$m='f&%>@RmJ@%@3e^m
+B:(8\>pO$0[od5c7l(aX1jrH/hfo(d)+l+\U2+4U!0+Jk?>25.QKe+?U[OOFJ7_sT
+$6$.OE1,.Ih;(]daBYAU*?f>1NP'iJ6Na/Z:/)TiB%D17keGKco_!829$th!P_TRs
+<,%`:A0RjAon7F'51$h&NDHN%JCdWZ4ur?H;]=To+`saU*#^/!((977(QPY*r=ijB
+-r%06\CduOULAnHEqKVP#n9rF&'a9GMI%-nJUA&E(a&hKiQ+^\5U/;<Ua#2X2RX]]
+7\qml*m-Z,Gb4eI6qTh;V9kkU]Y?IZVVARr$6W68gcX<>N9rQt;)'l^&9UjYmctP1
+TufraXDbAl<8BTqEd1DJUYU-Oacn.!IM*PnEYiDTSl*j^p=lt?VToSW0rjrK2KhpO
+]D=<0b'Ec$"$'>LlqA(+12(9(Jo/99&/o[u2;GpaJ`<BV>E9u)d@(%R>ND\1bni[@
+brj[mUnQ@g0/O#_LsgY_2#>.Selrn`i:TF3Y_OY:TQW5AOpL;2*7QYAL:R@<K#Vp)
+gtXVP.GYLlc[a"LqH6Dmc)#S$!qsHZ5X3kG,L!e.bsluXa:"!_<([h/ctq(E7m[JL
+#@aM<UOLRC3nG]qemb<BT%$-q,n;VTf"o@7LIQLR!i<F:1^jN/%ES/X5Nr"uC<ue_
+/u,!J:"lOF2QoC_M[!HMV;]7_WAM.;j4Z<eV><LFbV"DmXWmB+NP!UDFb5?TX45>#
+$e(+*K'!A3;t^[mRG5)LC"i7h_g`7TM;9:f2MF]d2\!"J([_Nf+fe(HbWYdGI.g.u
+*N$t[9:1K#Z[(]\q2GK4QH,=W,?>^PH5t-DRaIV:*h'4QgOMb`F*Bg$)sV*@1Y6Sa
+V1GDTiaTXK\E.j.of6)j"L'pT6;ohA[S'r&)7Z-tB-/%??FeLsd+EDVcCGsoGtNL)
+V:1#6$#CO:pHd0=8eZ*ABoI\a@II55Q^<2f)c;-bmo@`5'7\]'`[u*sWmdZh,d]l?
+blpt1a$V(O)Vi4kg@mr:h%t,8V2Hgs[Q=0s:r!n.8UT5;rLhW)->&sB$B=Tk46J^F
+)NXPJo^4fd?\1bM1bU\?N#jE*bL)hTe]YelDpuENP3bPR)RP"fqer[dKUR3eXeU]C
+U7`BHl+[@\=D?^'mS&hVB@I[Shpi`Fh5rp?>j$77B"k"5J`/90GhIVPS#V=X"Ie9V
+%TJnE(:.QrBE3BGKn`iNY@2pRTBj-2eu"7WL+W``1pS-AZ3!Dpk"6`!1cln<9QR(f
+?q.4Sq=F'c$T(,FV?7/#+$f856aPN#klq3;5G4lcrH@?FOtH?QBKW"Ok=bs\#j=Z'
+HP%M1/6Q]P]l7Z]"MsICh*0=Mg_,IoRo6Y,DY'V<<0&FGV7@'SX;(JL_@;7^9D5Q%
+Rc>r4]QV_P+DdJn9U[[W#^J&j5u)r"4s,>J'4K>_%*Il<k'D#c-6`2OTClO[UN,8+
+TWs6F_aQ^qfqi;Cf"&;_B0[[O&?%Dt->h)i_.7n?m%a)4ZVRqaTp`?7H>#i'T/3)M
+1qMHQ;&XF2r["0G%3PLfcu:"kWfXZm,ZgQGbr7)2?f%p3K@ndA_enluV-2Y,kCVJL
+A'UNl%*57Ta:N$('&Y,-<>r?Z&Wn051_OKmb5@Hc[*JgH-pO/Id,)7a;JE!KiF.E%
+<LU5qIkNX(rBiB"6:'0V*:3fS&i:5t!W:i!\U>DR>A!r`^sj*q^Zf+ZklKVWN=^DQ
+bpVFG.1!]P#A(:p)'7?FNc1Hm9dp[AAuu5B?m;HCaDO\lp1;T%hr0#\_!aA"-31C_
+]*4$Nl]_VLG=+gG5X*HR2$o74q9^7-k\:HW-GdjNM@CK/daYbdBjV%gHuclmTqYE9
+6BN,#hpMF`^\?)/.ncm!jDVLYq-`#^MLl'49kj.!6n(i!emE3ETNR;5J0o"5Qm`DL
+k()?W<b]"8WP"2.UPm[pFKnGZ+>'HXe^46!Z;qkDW4UQ[1tIb;crACX4]U0*lW#cP
+FJcmMCdCutUL@)7f]Q/%!1NU'*NFZ;Bp;;*!_ikn&QHP/8H"O\nZJ=-'df.EUW&)E
+Yk$*c5\\@2gbdbFFK0E?RB6i\`FB__TIbWU'`gOj%0aWk@M;$0F])%Uj92npL\SDj
+B:;(!6%bcCDAVLqp4e%O):/Z7HN):X"<6e,X-Kh9j:9NB!t9Sa/g#FpdNG)TYTO7?
+61aX4KR'+iCQ`X#cj8hL"ZmNhJT'9ikUdF9*g_pN=D?-)j::"U4<bCVc0MW'LMUs&
+drf;Pd#;5u%*a$@HCE7^l,^fioK.ThUWJ,@Tj\HXemO@h?I4XX+&t:;&U%gl&sMZ"
+8lJKQjYH\W1r_scO^F<no?i5r/1I!IqJjm+f&-15husQrBr__GV)/bmae8/Wi.=er
+PYdjSIUIT9VMoY[fZ#T4[ThCYbR:']/8C:)nhHEX][1I`P&5TjS*O:6*Rf[EQb!o_
+4BheBdL&F.<dU.\S<l/Yd)pG)l9O@)bc(oC1.6\r"8%@<0Vjl6K'#WsF'd^Z34%1b
+M?6>=<(XuhaVj3:6MEp@bqu;cc6/r<]X"q.*#_P=dJ@.o.qf]l+DW5XFtGfg)R`%Z
+,_aZ#dc4`]L.2oSInc[!AJ,hDm9cMOA3Qh>irf*RV_efb2o0R!.h*Kc'c23R1qFg.
+/)^._if(N.C]0?Xi^=rB*pCnr9I;S_BjPIp0mY5R.DV!WJ_I7AT`0d]Z+'!]$^u84
+m?,+_BpRfQ+(V&Z,Y&(@jM*r3VUeQ$Lc;hh3^E+qd"o-(pIqo_G;hbh76<ieU<-<T
+!WYR-a!To;g/_\uMq`WEB.6Q>[#8hb-\qWZd/j=5Sc%t:m]Gh>MP+k8%lAm4=su"R
+"1U$0_VHCnma+Xcj>pdj:5.-7D#5DinuS-QTYI`jo]$"GO_f"($L8T5BakQSjCcd3
+[QUlNR\[q<RUr=bd)_L7@VCc_]Bq!>-I@uo]pI!:W[B/.ZYhkK]6q;5,NYJ,*i)H&
++#;+e/619,nb+*%3=m`4Bug^JP0#\-B\L:>o9HI96d/';rUrpm/=D:@B2j4>,gt2S
+#E;i"i4/,Idjn*Tj3VKZ5h#0%>C?kXN[^Aj&@2[GnejpJK,)'Y139l^Z.p;BMlSt0
+ZLFFa9VXF>o1;XZ9plX^1s>ds`nsQLnTto=P"(k;cS06-KJ+:.!]7%[k/@KbJKY,^
+<sGN^dtGrO%%>#_NFmENpVs7/r5S*h<-X#[M/YZ#BhWXNg(51C"u8S\Xuk)@YFa9d
+UN%]YDMtji3TD@61*p0/NKP2QBn&pfft'p3N(g!'pOU=/YHCggI8f/BAL'97Z8(Eo
+;R9Xm1kGEY)[/i(Wg"jI/qZW`UqRu4MAi-!,B2X2ZD!CbUTO@3^U<%i+k7h&8P0Y)
+pP,Pn8);#kK-k5d0$1:`_tW.0;9]9Y9#Drh2ttTP)B*#FD(fJ)2@^B1IVOM?aBSnn
+X#+pB(q^hLVHM5p6h!DqbeZT>Jb8.5A#PeF-<Id*-UIp!VeA3)Oj06On=@T;Zk5rX
+R*lDpo2a`%/rtQ,A"%P0=suW>6?U12*n!QG]Zh<NP)uS="404/d'`b9?HKH5b3^TO
+,7@kZ1tmhArf+A1Bk`@lP(Q";//DoJO"6G[UYOAEL'Hr&?fiABk!/R?7E]fb"S2RW
+SU7f)M?5i3-;ADA]5;&&W=4F7^iIdu3AdW_N+o6g,MD/eh=Gq9dkKqY<e'qG*&$jF
+<6RtHOZq*Gmd+A&-W`$fFB:W%XNX)Sh'BU)Irc3:g8%C]e#\fKSkd_cJd/Xe1!R7&
+;*.ee$oIeLlXricY-cO:7.U4)X(cf"AuMFbV.ckHQ483lgKEn]!Y)>D6CEMi%foBD
+/sUBeYe*2Be7=Pk#%edR(U7X=TV;3,s5[1[9kBLaoi/aF[Nokje^#"pje$9]k<bXf
+mD1LD!_nYID0pBO>_sB0<MEm*XiT88^:&TiNR%\FjA(o&cIkYh!s_QtbeVY58d&ha
+n#NNhdg:r>#FbM=[Cjb<[4OdQd$0$[=7dZ/3@+P^ENq`g&$\MdfD:km0*iJHBl^gZ
+lSj2#BVZOQq'IU.Jqe,:HRGLld*c.@@T7&!R+=FPMr?Q4j^*:W*GRF/#&(#R9%*'p
+[KA@g3Y!']Bf6G@1aJ^LTIH/aI2.HF&<ViD3*QgB?Eh&mq(=[=CIp:\/5aNP+_]0P
+m%dH=\=98kk'`q7E9C',M?Wq_7Rdg@[1c"I1JK[!31(.o/^s&+&84rSk)CnYHn*ZW
+A<r<YJ-%<$cahsD%FrHlK3;:pF_%GI->\Ld=Cj>qRO9f6B"s[bAurBV1q-<+b!q8R
+_`=ck_gDa=m.G]_BXB\8p(daikg"&I9m-[k)R@8Y,k4R]r@s;Ln+H(9a'4X>\gB'5
+c&qHKZXu8I'?Ku(:!E&:2#Bbak+/0eY&*)P;<;^=>thS7X.KG36QYTZc;/IqW(qY!
+fJ@t:BN"ilJ?-_n-9,X4/'+tYqb*T?Btap2Hm&"VDq['"h\.VZPKQJXO(O!p_abJ?
+Bi.CQ9f5/4$-3?oWE8ObhsUlp#&JW.B\ETmF*Dn[,Iu;#@aI5pBqi("\)4@$;jUKG
+MR[hG_S)Vap`MIl]U<T0)adoJJXLUKi^\KCR)ZUKE&a7t-J+S%o',]iR0QI\&F^?:
+I?N+<j#tGqq3)&"RR+QM_iU#U5m&p&69P^rB$`sEG3.bWM4o[s%p`2U#q\9\3XnZK
+$[)ecSbJ0@3D"l/H[H9mC$95CQ4+0YH'-?mqouLJ@OE,Lb<T"h;oj5e`(1;$Td9rC
+P\h%g&T:O$C*(_MeoP)6d%F'R-YTIXa?SEtXsFWGE[hph1h\*#rE/)Pd+C8[<h6/l
+*_u)$lXKuQVh;`4^QN:6qkjtIa&="P!);;hOs^-I\eAC<jkEAD5dh%WNH5acV^QHj
+kb-RO(Q5&t5o-N&e/,FLGfH;o"H?F%Eho!"%A4;JeAMA*JUr?DOMcF-mc!8@ib[gu
+(MX^njuC1IkjID'ZRe?RmeAZhT%.R:BM)Ia$lVofj4iu6oa0@>(j"R!nLTWs%[8-C
+K2pk"E%oOkhJ@"lQ+2J<W:A^-[IUtD:;lCtde/5/1ql_&K-UJB3L"n9^>#g;K^"?&
+:*7h\>tf;aBJ0&6Pn02PRP,g/Y#]n_ABCOm1!00aDk93g:N]Nhn.oU=S;/fCjaR*t
+Z&8_Q09LjPAaTOmN>M=<&W(+>jsW=&lTt.=d5rKVdh$mMo`lFa^!1J&*`Q0U%bg$N
+c,MKLjA+/NN:Sf7>+\A.>BNr##\LG:Rtk\tf1\]9;m3\+m40^g:"K^Ugpp2$88F"_
+8![*fP;Urk??N.h;FAt-_fMa/JXLE\NS`G7TP8T'!?+p8fSmU72.VG'>B;C&;auZ_
+V4l,:RYfpm-DI^K1j4'8%H/p*aXCI*]JVKUB79I."fto?2Z)NCRNH3Jb!tY,5bmGE
+I?_gWU)QZH6W#.*Cf%'X`D?h:jNbPcF=sHD0cgW>8DE-^:4Hm:buA1^?="ak[r#7d
+VTb#gU7h#ak:La0c&T%G1jJod2!bF+7"fpghAOpsk,b)7ZIAHN*AmJuDX\s*cP-.0
+9h8]oD3mWm1nE&Z#9*R7ZBo7uJ]8u)*PS?=C\s^>1qDX@LL0i$3nMY)Z5Ob9mm(=:
+IG7]cjes-d4O_AE_h+ZN&5D`L^*W=9O/]Mf.;;g4f.H5cr]J,]4bm`"4]23UnkdLC
+*@&`L"e#J/-^dFU+S/+X_b<+HO\U=P?qf'qJk):Ricp<:1kk`C9Tsq@TG^tj$Q:.]
+b3ook3^G!*VCFNQ[!eu\cr?8a^jaf$?spo=K/*lnrsK&;RMlTYJB!3[,b`ZT+_1f@
+3'5ZCcA!QdY)r4mkgkG#g\WLLSrr.@lP%3HU=PNT'^nP0odfWu!gZ"mVE&K54*idn
+2#Q[/5Vp'!oph:A8U)\00[.Jg;]O.c5)9!<Pj`?B&5u-!dAJmco%(P(*%n*;kHT%m
+TZOZFb-ako"'KGVGpd:tQf=Cc)B>?fF:4@,5Vp2L"WFgG.OUE,USQkH-_X:X9U$4S
+*EEJ!_DJ*pho.G<a5*DnWYfXB:='DMBJ9mrmF+a=,rD]O'\>b'N\rX=I6^KtGJM-t
+]5g"=1mL[/I@-o)7:mO]6U2mjLY=s=eo@Ye.&K8)L&lf/@@E29q`nZ)@V::V<_nC6
+[+p<^o>SZYcjYaXQgb\#Q$Qd9?bI!YefE4-&Po'nZ@BMa>]?Uo3$&EqNrB;@7&7Qt
+4h%c&*P;M39?_Q:_E$mZq_:h#0U*<)(F6K_EM*>+?3H^_[5[pX0hpHm4D79$_k[05
+eH5PGGC[]fF/!hJ9!OZZQtF%hU!EGq,2_JQ>sgL%'%V[>Z$7F*0(AODR^cc+1``q#
+T';8('DX3+&0MWA4B@?$c"0ST,D5`BVH<NTb^"97lCqI](tE#jI5ts`K;"9cT8?oR
+'YsEsfVsrbVYPdTUi.On;-,bI21uE7TZFo6',pC[go</]4bIHhjCnY`n%Xp05tNX+
+gF"`35Mutaa`D=:$8uQM"&nbX:#+[d/8?%HBL#uC'?&4*RKS9Pjok"YJl=6?o/ftc
+"q6%E8ZLsXjpI@C(L"#Z8Fp`GKJ#/OT:0EgRgfnW"SoAg:s]dRpdEJjH>]OL#*f0O
+iH/V5"-',_)dJq&HFc2geRL@/3g`C1Sco3!%BB^mJk#O8*^u?n;+*QM-lc1,^R3b@
+ZTO04,B7C$TTQVO2fPWkZXSAkT]'6ad-)N'!0)8BdC+'&2:mCk(:WV9W63N%@@A47
+*Lpj3"AK@d7K39uoTR5:q]l,sp`5,?5Z7ba3i6(_Jdue(MEQi1G(@T!o.k'U,L@M3
+`^?,*rKmeKer"%Ef93`HG;(.6lo@HIaW_fF4?'-rR5WGmWA:&cVn(M7TI)okM&$\a
+;:$`Rj/r5?4kQEu76106r%RX,#_g7I1YC"29[d]uB#__RA+jObds!q.]n.I3TAHA=
+<t@6'A^S-%"]-uHm,dRld>&JX9X?+!^C)m3'41s4`lj(/Z./nMOdlk\AZZP6bZ"g-
+g<b/g__aU)*%#?*&,jCL#F`e6BHaEBj,2Z[-(/^\F(7<)"qI\12>:UL\73nmO6YI*
+1qo'W\*&<3:NQ*\l+4lQ6IKd"^@uS#%:QX,*8^c8A8d2;.+HJ]f!/E%d9>fsp$U$>
+G+(,NK:q2P*i97OS>-+:VW/UK.NU1W*;bHVba>iPW/9ZiSY/jSMS_<@)#JG11IdAe
+:9t$Y+D>eA"B'(YB[.%f:O>*8-Hau#TTNqFQWK`NXB3pN#-T2li'Zoh4fO?*;onDY
+/7P*Q3/6$ZbUA0qZhbk&!Lh\>lq\(A)*H7&_0VKgMSVBi!;Ys/V4E[F)6-W$cWBRH
+C4Y>d6R#Ti,RWm?"LRF=]B)2Hki8S\Wi1Hjj93_SD(_[l6p6ci5Z>+SA]Y6n^;kVm
+^K3BSdL'%WPbAA#!!&JW?EQu/Lm%'tB,l2nj]_mEY)\C09G<8/,k#Qq(j$HG[.F+J
+_/MAI&fg?B9j97PH>Aa/(,TK-oLSNIs,R$q9J[-H;&"7?faIVE1IZ2q5HCh3Ngp%S
+1pqj63B^?JOD/_plHtaaHN@f[p5I8fpKDmW#q5b=N'fjO[Ums?(0F.P`gJLnL7%gL
+badF*h+li$bYG*p6'Ds]O8p`E"u]h,ehKn1FL[G$":am*7*8^;2!MH2hoc*QU0.X,
+kho+(,+8t6d2"e/"AprKef[ndO9(q>deoJTeXMq<05/oI!?+7=Q6LtGHI-mPCl&XQ
+EuAYu[&gh>\#5U8.^`mRm9giIr\Y4!8S8bb2)4:#?HPJ:1`4]k[huKT(j7:+VOPTK
+g)i`)"ARhiC@`SB!jADnEW@%DP>5j61p6p7c+1&Gn(At"3e&?JgH`Y\4nMLu!XigP
+/\?(s),m7QEA;.Lfi-bpjpb<N]`g68[;-M:S2Q+SBrHDp%S.^s<>:Ja%foE$BK*7r
+U#cpLGX9lOTe7KDk5eU%0hj]XauN<D-l&mUI%YSmh<Kl(cldP$Eu,IWW"&rDptgB!
+BLifJ&N"H\'nR6RVP9<F+q;f(B<[)("S%q^1H#RpbmU@^e^bVB"RQ&CJ=Zc[A&gYI
+#Mn?Xb++HK*CnY-\eJRk(22tsli[d>C78\@"IY1L&lS%e]`N7_9EPH?Y+K"p'&Bcr
+i$_dbpkEeF:@it]UOnI]0BPMU6T*_[;0km%]'&I+qQ(Q-5bTE>G:LNk4cYNhRBlNM
+8es)i(_J_k">o<MV8##MVp797&2ZoFe1P4!pfJ"EXX"BCmTNo92#)lW`fbpP5H(P+
+jqMSM428[ir[aA&Utp%Qh0h1p89l&'A,r&g0T@#.c7&<$^&0?=g'NOScqNM3"?4&D
+i3P\t#,e'I(G\];OK&1A?aYTo]LuX*="W3G+n.d?eZAK*iCR\&i>d+b4XM3Y)Ym]6
+C_(9P`AG+r&Gt9So3=Ij,+oh9e:7WQH!o(TEVN"#,oA\g`;Cn-W!':tqEX(K)V5R2
+QNegN)!,Gb!]4h@;Q<AS4<TuV0T?<04pb=+6-`*Lcq%OjBT/3*e(^80MSM71i6#h4
+er>oj>-^7]cud,lb-0)tj-<<^ipY^7"5Gl:\N;$^#ngE;s..`5?-G.>J=U-X"$@X]
+Sl$f:K18lARq^f@`J9nC#0kP.S3RJ3Q(@:!;!5ORZtg\VLlDR3j,DV<Q<mMTasc;'
+fR+p9'7e27CI--KgB`fSFN\hZ*&nIi5s(i-B-i9c"HD(OWNR=Aj'`iJENTJinmQVh
+*d&!,PS2K&@j>Xuh%i#3"H@Pp.<#3']1'jG)OP6_F#S\W,'G8G*&W<+`R2nDU&h:I
+7l6K=8Z4"g`h$cI_)m`19Oj^,.r)!7FeB&fkZ<E!--WsZ75eF7/T),hD%;/(LTYi:
+CRF7r60!Pj[Ej1bdkNqn-#RSJml=77f7:lJ:Rk]=:FJ7gVAU6E6)L>t&2dL,l_^,#
+m$EWrlRE0pH2j5V=Yl$LPfjT+VVPliqpHaG#^h6m.l;X6a3M^kj/?UuV/=GDA1RJf
+e)ZYUEt]"oH!"^QH#oYsk,@M)Zf5;)gtn?ds''5K1_D<aV/bLt>IR&fG%boc&lXil
+i3TbOp\-pORQO@ab"gnDh%s/33aDN*'5\s#B])LHh!$a_;]t4I'/YEdc@QY98Hdgm
+$sbeY;n.:U4l`,+o1@:[Q[*bkjCcU?YWkd08DeQUN*)L3+m4;f$I%_`4A]`7=ZW:(
+dVX]:<b/'bAQK:9PEob?h[L$6O$,9/@AhQ$6*"?WIDpXHE+n0%6`Hgu4ao,!I\K-P
+/&VLCgQ]0#Sk,ea9F0J\9jof]4ddU69Q#W_aNU=h\#7ZM&ep')fk*=l8\BUUYnaIg
+K=Nj$")GLEqX*)V>\W7LK:VDVL]iTO%DGU5DFnI.1o2-u,R-VWHm1E>b)`A&58tL`
+lF+K]cMgGRoV68]UC.`bp.c9VjO5T<>%m>T7\0&L1s6Nf8%^6d)SFE"OT9QVok0[b
+ZN1tr"rH_m/8/etc^6G(/%LY]+kU&%m4%E[S;lpVg)en'Mb2GT.r1WAN9Edm;jA[c
+b'(u"87(m?GV7$=%P$0K8Rr0u#7WNaNR04*_e7F1Ai@56?472[EYtT%9kN/_c+`^4
+KZ:QLXCt7#QI.7VF$DM&C%,]!B&>"&6h[EsINBEq#TDS7`hu+DrlC=qS"Y,\&FSnC
+.a?g9k!A0l_*7fUMG;(C2+k+jRbt)G+$C!fkg?XL%sKqXi:2B1LtH2<RcrO_dHNf>
+p\pTF;.BbRakck*<1:M\4;+/$"[$)I,sr8@Bk[?Eq7rTiL?<UYYa7bAiAX*PN6hqC
+F#Yt7`K=Dh^t+*^0TA)b<,#s[ji)6.?kIp5TL*-;b!Rs+Q$]3E-B!StLNc,770\'+
+a9G:J#b97qk*ZHW+'>A5i@cm$B\K.FSa<E1)5a"O`92<i`%eJAKL469OkP</.Rnp/
+;c1;Zkg6\:O"!;HfI<n>&fi\`bjfLN_ucc#P;%m<LL;/pIX"0bUE#bdd'tGQ<,'XZ
+3\ijfPJq)4)5^a+^LGj]"+0DdB*RVC#3q+.AkX[8/C^AceD&!aZZB;qdP0`tD'YdJ
+CO<LPDhR7!cOL\P&.g\FC?#/,0igc<d_%>N$T.6a4g&:\:Jjqrh3:GoRNsI(P^rE4
+&9h4\)QlLsELO'X$jt7qoi=R()KD"G"(p=UaahfOVM*S/boohn1/f4*dp1#%$^s`H
+JjB\J>IVdIGd]lTs&I=2FH"!DiqoE(%*Ausp)%H%%d(3J">h;7%Mf@4)`!?A.-U8q
+9%-uBb]2f2dlV/&BSstA%C(P>Y.qY:REJ<M4IFN>a#NdcO`k_XKIPde9m8J:#8++Y
+%j_T!TOA/S?3])E>)\0OJd/22L#G@>>'01u`*IG=VR:C0!^T>KAM<46,<Fno"Fk9h
+UMCLOnG4Wh4@NI]pfdP%4VQHSNB=[`)iFi?$F($NmR\8'%@Wk"Vp3G+<Hi=4&P>at
+]@.H`$k4nuHA]u9$3>31?^S#tRUGR\Tueg4!1LQ&E\3l5g=.K"9r.Fm)AS\eB!t':
+emiY2dLYl4%TG!kda1lch]JdRTsnoiVW,RE$6"D7.=^)#R8D'ZFKs@/:#a2MrK0/N
+4S95RbTtu2gfJF>H+-$Q%#$p<?A*>gX,`Cj9WUEuVh(cF6'I^i)jC0abj!dqP;@C*
+\b(3I7k5%.M^?D/c(H7\Bi:FRhQ"+-5_Hdmr"_ihD]EEjPC.%cL&7N7jKj*5[jQUL
+@%l>\/O2\K%E^X_]++Egb'o-uV(0^oBX!U5f>HZ8;c-+Zo-H6Ggg#!m7KcFsG^:,)
+:%!Nb./Xe(fOfa?/36qYe@`??J3pD';(IeE)Jkg6;e)6*<o$kkltKYBKCqiWk&Up:
++VJk1s/o_`q[<q?jNWqo(@k^-Yi$%\g8s5:7bh_o-$SoV/Nh."rD89O<Xh?ld\N19
+KOur-7leBZ$V/o8%uke8JM_)?)g)gI2/n(U/(gf@`Mk7_Bp@$Z03T/IGD`iGWB%cV
+^)*5YGI@mJ?XXl##onirDoh*h\M8:,qhS;l3lX,*U'j;`n+@0(ONm`rT`OK^D.)G7
+%Y\gGB[GsCF0Z*7b5XTaQ0&9aOG9]-%675(8k!DOS.GJj>_?0dgRL_1@83jd!2cc;
+^(nEV6Bfl56M'g.d7P'aZG+FFBQ@TMTij@fSG<ef*pcjL]4,7_:a1V8:f#EoC#Vfe
+pNQcsB1%bWR'l,CTGd=o%VU=kC$>1/c1Op_B_%$<]CALWC']#LUN0O0dVqso\Sm2!
+?>+]gEdI]_;'/qfPL(T'Qn7oe8s=>F#&&t`llKhTBoVEWK-o;ZcY2^WP>l@HbLJ<P
+)SFL/RPWa!8BmVR9e:?=1stRWDJ5o+=bB0Yes`N1J>;-qbr2m35g>2A4dF#8&ZS^5
+P]gB/Fg%;+Q-c>=*O226$Ao#gcl=hg&371L58A"UBbjBA)M72>MoEQ3h^dYX6PFA+
+>G9_LC$pbr0Jt=@<G9S[V#m)95c2sTDc$>(;<iC02djlp$;GNs]P&GqJTO5R:!QXA
+r0V\7KNRA3".r^-1n!Z95$WdO*'&1_+&YF_4*KCn<XOiLpS:t8hiS+H9:E8up^SJM
+RYU;fP_s+BRK>=r3t3$rnG?H)[Qq/QCS*bEF@kFVNd:>1'UkY[.o!lX@2X?!F^M,9
+77;[S_c_-j1irm"SkjoC_m]90ck*pj9CSJ7[V_BucOY(#86),.ph4?fFiB"EK*GL;
+*f?PT6-bojB#<j>iG.&A1ZS.B`Z@g-Wf8K)WCi?m>G71BJ'c!S`^B>3)&k1pA"ULm
+r5_1q;JfB,>[o]Zc'nIi;jG?OX0K*XSp#LY'PN^!KLU+Y1XM62PR-6llKWpCeVsM5
+lJt<">`r$97ea1mbqkX)0%l&lE$bXGg!O#fDhU[PLV)`XLY#s]*5dmH4*P$(g8k`X
+2KSsVP/Xj=p6S:,-4N*'q>U9#Z\o46h4YhL>31"1dQeG2E!;^+5^?pE@WhFL/6EUC
+K[@(H>io<r_G;Er)TR]Vd-1Z_lBn3#D,HF(k)OfUO:fSL@V@+7l-MOmBg)Wf<1WeT
+BLHV.(Q6XBBjQ@FENQ8dj-eC6g%A.T'*S_uB(VYR8Z^?6E</N1RT>2,"maO6Z+5nV
+Q[e80c7"g$*t$9/F$c1apA+X8p3=h"dRbjahP'1'Ae.hH't9l^rKY]`_'[tH<pkKj
+7G(F-qX8JjQ)98/3?K0-`$T4<4@?373AQ'DCJV3LJFGc[4GsO@=s^Ef2:inpVhP9G
+FDLO4q_Fi7ZEq5<6fWYM"%2Y4;PpCjiQ&<LQ=(JLk:[8_\C,KN6R)cZ'kM,n:;,]t
+cs4W!8?%nbm=UdVY#Q)b5]`?>AM]2C`4l"aa/i/[9eU+H8OIRtm3U(ig#5JW7^/P@
+eT0#fhJ'La2aYuNN-]R;&dV`hn,j[n*Whf#Hn\<,^m'd[)Oc-AP=R@<c2j%U@T.T"
+(*?7hJu1+WB>P^'(`$/\QpHKW%CPndY3<eK!DR@;WREVXjrS2>@!GK"]h:]aG%ae'
+S3C_nQ!7]:RJ+VVl<4:JV]Hs#[_)\OYq6<V*RKK,g$8b5J,-l09kd"Z='T*b7_5Sl
+c0):rTD&!l3OnD6[45X"BEekAQB!$Tf67"98+Q"&QS=ttc3e39jPeer>sY-!GhQtK
+:(3Q1l1"Gk,Ak3JSYe5-*L_pIDh9<'bu/?d4kKg[6W;>I6'G@%5:RBFPEdI'G82$t
+29=J39:=&R*RNGsaU]nadlsm$@lnQC)Gu^DnYMKT96'Q]QMYPL49ge9aSVYSlbiLH
+1Gm3J@F08D_'nQgIfB=SV9*Je(E.8[.'#]=BfV*?mEgC-jRXRQeIH9:;?Kr<s261.
+VES*rSq,u$oY&WDhIn]%dp[#.RdYb2%Q+\IU8!ITgs8MkRZ5&0"`P1DK>t+omtYM$
+77H^:'t+%ZK-n)&->8"[_C.8I1upT/=7KrjWClb:csRY$q]hq-dH76h/iXXJ.db(+
+Rd*S5RJWZ!`$/@h%eV+aReW%kZI5+gBI"U?#h:C-8`X\_8m-`Q2VSRuU$5k0A1dn6
+?njJhSTJm!Y+MdPF5qgC%io8&iC.KlP=TB.ERu'g4D2Sn2U8REI?R/R\4lC7Q_lf$
+@PcKYV_^A4Bp-M@2EN/VT*Gi$G2u\`,W0D(_!rckeXUdVkh9IB-T7*aVW]/]=p5hS
+dO:q>=?.Zm8/U$@.Q!(5d.hZ@1q'@FSg$/Q1h1HGrJ+=X':L"WcZ8,X8LQN>dAR;R
+1atq'p?'j8kW]3p@)`Z&GfPBl18W(.Ud#T_Yf:OUVB%5q1h`_r!Li!"`nfV2-),O+
+Q(%G7F4c6O_u`\8#S!BlEB%uMpl3cCbca^bUQn;81UW6o3kLBf=05$/'ed$C/F4Xr
+6Vad(*Mc/WGK@"sh9\P'-H"E53EnhQp!Gj\KJGl7)`6;A9i1A#94k!UKV^TFMq%SV
+.-<PV]L^U)=!.fDaQrVLOd`WAp+><i`]`=O`F'#=D@5T7X<`orkoe.sD'0D0JgP`.
+f-`ff<$_[Qm0h9r%Za98YZCFn-rF^L`+CY[8SrT`er!>D/,NW8A-,8t`XW'pXr<es
+?c&,i-07@h<oj;ZGVW33rZPs@W-JV)fHscOO;t.i>"_l-.f`.;8Ed_;3]-u-TCHls
+Bj3r")m@6+/dko'i,A?Tj1>Gg`0uL`%DCT)o25fbZ0GWE.+#bpL=/Qn;OL,U882:Z
+Aqc]J6:8m,K'BLmjJZEos6#'Xf<2VV)tZIFSYemSGN:5J5!#qO?>1+)Q2YSA2:0I9
+Ea?88'[k9*%5P9Qp';Eu<H\"M;kms$dM."']^r3=R`/0gXR>d0W!eU0Q^CSj1t7o6
+/DSc[TW,>30AY<Y*gpH:\>J,/Vo_2&d^99R>hr,*FK%!s[jt)I"FeIjHSsV3k[cJb
+P6iOK^bX-);JQFNB^eX#!fbcuK>Ui>&K5$'COlS$^l?$N\)<^s;e^Z8K$@=l%k#9K
+p(GY^dp@SVXX,l.X#0',b-.h*9RhRk@nW!:!_:U&9:rIlFY[<HNd*PF(ql$B]O5%<
+Q7]\)i(m!l`JAH7d\Oq(6fY'H=DDTt<0JG&=F`kMZPAqG74VR,';2nBdW>XO5uV[/
+A(ap6>jK_-KVj!)<8(_fZ-RqI4\ZH*qf-PN);!&T%p[(Zd$QC'\Vf0?_]&@Hc+'HR
++R$J$=9b?uOL%BJefNCO/%1:VXYA(=)K18jZ=jr7#0Qlo[[P@+XC<;RHlQYGWV^km
+Plf3[lrOR(h5Ut7._E=)X_u2Jjk,+1#:(5jVpR=qCkFp%L4Q<r"$Bki$eIu:?3pC1
+>Qhl4;&VQ!>Wfq3:Q:l=22d!5M.n4N?I(WklN9p54&GXmk%qK(]#qE8]UU*R%EQ(p
+cBR&"B'Q*VM'b.3%s+"*WsXIe;t[R`G%8%N>-)-H!Fb&R1oX[2)KeSL=oh]&72fDd
+3"qUfRko[f;sbG[BgeekcCc5FOC+&*l<Y`u`hG:drnk@biU%=%=%N!KC[QbkbTP//
+ehfpMp\0!m5kpi#*YJ_)M=!?k*DerZ"(1kKP`Y+:XC=bf-dL>Q2j_e_H7!S8<uD""
+"JKo?0iu=33jFu+,%`i)RFJ7!r+>!$*_f7j#(d$&#Z;Q(eCsg$DV5KHs4GKC7nVJ8
+;H*BseectV;#ZaoI%CX,)i^K=buJK>DM$UD7HaCpS.e'QCZDmGW"uR"!0eTMNKC4'
+/G8+RbKp`m_f=ah'WXqPNEKrqq)1SmI@N@P<3+uI8L$-=8Rj$$f$GX9Xp3C@'eYsH
+X;GXt%AYF4W)8!qSJuhrF:[f4^GIdBZuZ;K-rdWoPrFN0b0EWAeH\DZ-k;/X=s4Z6
+4_N2FmPL>b:q8Bt5T2fs;PHq7$tP?S9d$f.oa>Fd:)Y5_MTj1Y8YerM`+5ts'[NR7
+X6!'@+peb-<+T&M?.`QVE+uJLZ^PnoWJWNgLHlIWabYuFHnd'EI1(%[@uiJ.##h'Z
+nE.Pcf7NY/ol=&K/?I5iKD$s4Q"j7CP(QI;DQT6hEt2+a=;m!b8j^(To`D2gibO?G
+kP1nZkTN0K\VeZ4]q@A1B$/>/<sLUWK1i#F.*VkDdtZ2uGuHj=/^Yikj-cAn[rPQ-
+6urN8T/9/*A&1[5b!I5q<DVij;^Nh359ScfE+u)"=deP)NUfZc)S]IRcpep%$]Zk^
+Fb4mG^':UnBt1Lt(RGpcc.+C?lIB!;N/gFSNTEq,!7I0V_a3%+(i'g1")D*%f/=[(
+agW:j[/YM-46k):O<NJ&G0:;IVt)`IC$n(HfLtOW0;Mi%MD)*o^6(7B1NqLM3mt[B
+1q'-.DEj(;Ei&P5@u1Wdr9tDE*,<HT5<QR.lp;V20Xf$]8(JcpXu'WZ@k]"F)M`2Z
+LGDf>n9A]>44K.?*VZ[bjNi`U!tN^(0bi'KXYf1?Iqh0/2:<1C=CY]>83`k?F3A"C
+-<_AZYhJ%T+%ML6=8eb;^;T/RXRtdUR[^bhRq_J!m(+GZS/RnHkEYa2d.VdoPF!N3
+.+6mjpb?J]7fL9B[lt]?[s^M6f4B)"M_Ibe;>hq,\s2@F-)"jh#PQ5NI5%STpVkH9
+?leX0=W-;iX@&Gk0[/BA9'thu2emm;SGCF0#pEYf.#kduT/nsm9lf#,X]ZLC,SUHG
+V/[e/7R0sbZRPR#hj(q3n<RunJ,]ES^Q/#Y7\NFg&o;/.NRb2:@#e?@g>&i$2N:TV
+d>gu2,qEj&N2Z.?DKu2a6*o,6ajfI1h5Y_t,2.kM>B^gZ.#n%Ee\'Kr$$Mdsb#PY^
+Ns9aH^X!mp)qG"d;h(j'O#5]$L@hTNp%$]E*P1ikRSQd!S#$\c?=</"IWkn_3H*Hf
+F["0-f!^!Z3>,acC#[u3:$Odla&Qb_.sp-b4g&ZEg0p#i==iDB,2S:5fO&QUJ^t\,
+cnTGIXWP0ikXIN+05D-2b+@*"L+hmGf*2er3h&%m:-[FZ,c*5_VB,Ju0fQWr_-Lur
+@A.<tT^\R7i:a`LJ4=P5&(/OVXf&aj](a[L[WKGX?RI;IFOG8k)X[YPZtVJ*f)2k/
+3Q\9<GPtbN8u$"Jn"u"\<N5@!*:A,_7XB1@)U)(t)f(ZO_>U%oWH\2Rg3-SNk40s@
+4?KfqUTrH_\WOR?7ZH$c>9Y:(#s_O3cE+(=0DaU\(4DK].?00Ag415umHdq-=+FXk
+X4d+^G#`8-ND]sDZ`@m,VE.e\PdcfAHf.>->$]BO-PDV%3>.j\1q&r\;=oW`]2u[M
+^)1XS@E-7;?1?lu02+G_&d5m8qcfm&=&,DK":@#m_g"`!h)$Njn2jQ_D"c<FoJ#RX
+T4Guq*I(YkL["0kc^CQrOkkFkYH7XIRl8$<kqr,1'!cMF8iCuGnu=X*)74fmSL5nH
+ah^'7Z,sP)meB`WT\<N'3n@*509-P>J@Zc_<i,Z@+S`@*pCZ4q\b%7>h(s_7^8\7r
+:K8<kY57PncJUVC=?Q,OlWrps4&DRi]Z_N'GNdX::i@+lV"/I=hY+91Z(]ceOB>F:
+h;34<k-1A?8B>eH\bp[7bJu2C^Z<s`&pW!:mS[3_MM1f":!@66:[rZeQPp6MiBt4W
+()JF!7N=qea\(%R_I=!&c,ZgBR+S$@6CUlO_@W?q=O^mHL3CjclH#]rPS.hs2\UTW
+Hhub?%o.(';\5fVc-_q,[Ua<\`Zum$o1F9cUVDUBK%0R:<0B6to$E(NnV'kF&6!Oh
+HGihkC\1jMGuf2^FFJuo#RcmZB[T@RPBUDYhHn%YUj=X$>h(;FVZ"`.@)tJ\_`6j$
+Jc)HV,rt,UH?P:\V&)2q7]aE5V>7W9gah]P:Q)<@LXirh05\,"3khqDFn_oGn'-oV
+KYS7=M6!=+'&!]E8#9kE"+KL\U1#`nXAPFIZhb0b):4kkETqaoWN70mM8?PGLt(=E
+"RSb'9"9s?52(d_/]>V-r*1,il$94:9$N2m9(R%(BPFR$Z14f;dhJ.F&2q7"n`_Cg
+dh>=RJJ/qloH9N4fRnU&34Io1ct:"d9:^.YpKLTG=JmttLT)KArC:M9!k>0bI!r0n
+-o#T[^Rtt([?BBtDDl\=B[`*\e<r48Fpr+6<[u@b?$aZC=OuHEALasU0n<AhHLapg
+36\#_8dtB_4OHtV></Ih/0XL2br]XN"oa2qoO)cXas+SAee!H)^f=-A"4R\_h(MQR
+jLV)Mb&Ws#E%$\g4Tg5C'p$=-<2Fa!Ri5BeSN.>.,4koL)U9U\MTOp5(Nt,f)*=.^
+MT+S8*SsoNPm.`pAH^B9EaRC^aApVYf.hbmR=J0h*-X)2H<EhUBOMRD#=31-h#qnt
+H%e**Sn6fS`[9Y0>s^k1Xjj`F)umb1p*l]8]$"/)2=*VV<W%:XegaBOc"RheH@;#J
+aM3Sf!XPXmanj.C-[Q<#N!W*dl@-<qnsf%5P6PS"4$f^eb5dTF90p`Lbm!f#I2n<Q
+p.eP)Wi;NZ:]4>]EQ]IM_:,K7Wr2[;&8CpRZsQ8Pj"G`Z*C7AtCbD*aDh;8/lFhWT
+kcS49p-H/=_/;I7V"o+`#&3l++@Orf>UImK6CL#IZDt$2d?hYB1bT9B8".q"BsRtW
+GblO*+be?DRR3HJKL3%?+=PJX9LThh0E[KIDh:Jn-BeY^iLb&)/*@gh[0Jik<g@)?
+%BDW5CEGh7(CuEP:&[PGLAL[+XAt]_QD>g@<j1DBn!Efc\G5oV=]9?0G?pGSl2koR
+8LE0E4UmM^PssC4eWKq5*\&1=?H.:Dk[+(%=K=:Q>UG'),#:EO4,+Rm=(WsAL).e*
+[HR\'=KF?'I+B'+\C6?pJ2Fl9jqsE<`ZshX[F4i@b5GbSnoOrh9I-*E?;LaPgO+ZK
+/6<bQoQ<5kA'\pFf&#&<GaRJ,N3Im+8olthcnj90fJD=]<tON4rCjt=N!_I>RZD*>
+l^Mto135pq?Z7lLLcZK(h&n"[TemkKmFckJg$l064RkT/1,]Cu@sdWN3(a@D.*^j\
+Rb,q5p#asCC7;>4\b9?%knVQ]gLL6*?(lshPQjRUnT'Rig`L>H'V`EJ\VrtD*W<6l
+3OVhS'i5Zia]e.?@Ja[s!ui`71*G_pZ"gX-(ZirQc,?ee)N+4NMG8<d4gS=D:`9Z'
+5_D$BM_3B1"edacT_r,o4HQO(2_N82r4`PjpH^3e#l.4ORlN^\f%mLScp8M/:`:3t
+Xise:1WZ#ALJRPL[-1PDdQG;JlG1!#'s&\Ied/*tN)ui'heVB"r>BS5d;WlSdYu*P
+bfPQ#OZ#4!>\IkWHXeJKE"#bg^a2*O"bJ-m[>)KK1R.#rN'F\_9q:+_(l]OClq.?b
+Q_&^2U[L<`(&%9hdsSM;`!V:J#j8UG&#6'Z^:O>=_E;Cb!lpi9I]7K$7rJi2Z[A0*
+>S0NPT"3MW06)Z]F/Sg]2l!3GQIe1B^os<SpfA)(I&t/?;q>eFPic?+O1%Hio&c?h
+<\*YSVm</s&E-KT\C&O9=VG8@XMj0+=;'9oO4"0.@Co]g.@mm=]F1(S"Ju/?hc7[+
+6on[H&.,$eRpr_'pS[Vd0LS/Sc)(L;5`>'.$A!D&rNX6$<SXP=jp&El&i:W&1n0)Z
+L+L?j)^oQ\5Iq5CUBYFI])<OrL^9j1'Nnhj'5PXa1%D.:hXL'I8O?i`RX0Md1I+P'
+3K4'no$bMP1"S5H7LZRIA<f2]T)l?llmP_?rA,usF1oSmD'mVYFoA3C/-+6$jJOn-
+HXHWC]p0\0:>c?]V)^K=1s_eb/>hoZPT@Kt#.[r7dQm)<WQ;Jna<fm_$Y*r+^^5eE
+*;.q!X&,%X5&2lI83:*'51E!*Xu-Or*\MEKEi22i%s/rr0*1@q77pI)Fo9CX8Z.3`
+!YI+lFum[M'KAW._4ic;"\<:*oGbr),Y`j6!_eY[mXVBsZg@;TE1[%a!RjDuROXlD
+$&d47(1?OZQQmRJ&@`9DZRL&?%D<8U:5%&3MT&Md:2TfT>q5^pP\*j12YEQ9ZPK5k
+Rpr_'h^k>+#c62gRn`inl)[<%c)0-0l8M@K/OF/0"`/qDo<ArqB`\;_6>6K%-aM1u
+q<q*-9d!iZO4*t%;49`L7jq(Sd)QZ0rf<]3g#'Q<1k@n6IntG_'6fm1^jr%=bt4AM
+h'S@5&Er't0`QQ]BE*\6"9Jf*4V]<.-4mC*PU6r\,*XDcE$CMn&9*4O%7ZF+&7Am<
+;^"[F#V^q["9M>OdKBVHK[Ku):5%$u!`"Es"9M>OdKBVHK[Ku):5%$u!`"Es"9M>O
+dKBVHK[Ku):5%$u!`"Es"9M=pV>2&9"F@#2Ap#k[^fLLbc/8:4s5K[8?W%dWIi<0T
+^d!^"fdEWDXb/K^hhFA?Z9OW:O8eTt"7!lN3snL:n:\SNK1?]EBu9@jC\X_r_'g.\
+!.V:e(^6[B'T`S#WPhgp~>
+endstream
+endobj
+11 0 obj
+<<
+/Length 1402
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:+95iTD&AII3kdUi&CVKF%VG.UI]sPi^$/kMB9AGd6]cp<VptqG!O;)E@E4pcf
+%QU_2^)?4FF)lcM35t.XP+WI8.8mpU=cnlCH%o+?St:]?V:Xf-doW&G=1(6Dal33Y
+.MlF7]CQPM"G)[[/i%N8#iV"UR[u_hLLu_3'$_pG+>$XoDTUiDZn"s*o2DLbi520l
+ojLi(8dDLf-+1AN_WOrm8=kOE7+97lJV,F/Gl]@+Kb_[0f[-_X]@iq6DSL=(1P$\^
+)S3aBP7Y")Y>;25_b$KIJm%&F)&jPh"rN\MDZD1AD;0rH62(uNU,uON\87q&HL#q^
+CXoKTXHJVRn#+Rc@Qm;4kFG2F.`)lN4M*ads%#d/_7#lh7NC?7=XFD*o=4(&OZA2,
+@ua4SC,$\DI%L5<k-CIGj#=l<(YNh=Q6>@%>Aa%"r.#M4e00auF2`)WCMrZaeZ!C,
+P_98&1A)3n1GkKk*1g@f]=A`.-OCgM4FLlWiXP1mOPTs%KXuIe+Ysg9BY(qjVIC,^
+R&AY3(8@n1P;A<3&d8R-SV\3g2"Ac'%*?#'A+<SYhNgo/Ll@LqG9)^(W,e=-Bp\@3
+GnqED7TEPf(qU7_)?i_f%=<)GKLc5hS/!PAGb8DD<h\Mj07P"84Mh:I+/ilc(-$V"
+>fA*,hB1otRI?/8*??Iqhg`pYP2$j]?7&[a@Gm23V]7]^K9940[KF@.(=c_k.;J'T
+n$sH=;t\9\ekYD2QJ3St4,iKa\ne<+m$1VZ]j7WBZ)_b!$7qd$;CqD`AG6J1)lG7"
+:RdZI\4I\]H9PXoIaqMUhQPb^omF;3P#?5[A@u>?*7s);M,67fhu;7qCu"UUP?XS^
+mp$<Y`>DOFZb8ji_b`9`+*8hG?7RU*H)hJa]J<NjlX8-`Kdi^rV5c,k/ZY]BXaLCY
+c17fWhWhhL#cRN;i/8,jFe&t-'eB!B'mW@?[ocnr+m1N5=IV]PB/&=7m@Uh?@Q?>5
+N?gE>#0;QLj]A\r=DkAnrsKg1JU.HAa<f,;H;EtmdA])k5Oh5<=r:ii!o7\YT]kA'
+q\)([hX[QuU)k:Q<kT=]/9;`Y-G>`Gp-H[&7qnLBB8F,+'ZFD>Ga;2HFiZY::#"4<
+-D;uj]+82\rG,5M(S?V!'f/o>$d3Yj_-rc2T\Iee>)Uq3Rci2o83IE7d4C[Z]]l[E
+Kc^K-::AK:QN(ldKl;f_[W\(IC[4<T43nU&Q]@FKp'k'XK%J7\6=Ut:[9eN("5#Kc
+0Y\`-%qDCdWlY.`RqUa^+hmf^&6m5'*VldS8nVK'[[TEt+T]9V%#<llC^+fG%?a6+
+q;rA>6_^``I&`59`BTrXT*\GDatiQGMc*0sa*OS,>bMfSWcRk)a;Cu+H:[Hg%ljMA
+-%@6@%KO[ChD,~>
+endstream
+endobj
+12 0 obj
+<<
+/ProcSet [/PDF /Text /ImageB ]
+/Font <<
+/T9 13 0 R
+/T10 14 0 R
+/T11 15 0 R
+>>
+/XObject <<
+/Im1 9 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+16 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im2
+/Width 253
+/Height 317
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 2006
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]"Mh.ZH&4DA7+Ge'+-65H-SNTgTq)^(5m<+\<4"KUCc\LF.,rnmU+&b>H43#d2
+Ik:Mq]Ih`:Nq;+$[J#Z8?Tq,ff=s3*TQmf1YFY/hp7pWlB&8?u(Ac;Re$[Q/:S6J@
+dq]G5<o`VSpU\6lcM7*9=qtAJdX=mBR$bWD@Icso7T3F29ZI!ulT(f_\DEM?Bj]SD
+1N/GglFt.&V&eo8lt?#b>,+0bYQZ=(4."2F3#g>`(itEZS4:&N,P-ARXltdjpG4)=
+^_<uF1;AeFMrm1N:jFktr"FC3bkqcl1A3Wg1Qtkm]ONJ-;mH3WL:s07+-inT]DARQ
+\hP;V(d2Ztb_P)egni@[7sNp=d-jQtagfZd5FUn&[-XC[B\]5Lm?<;h1quobqXa'<
+n:$>tI,imDs*FEbGgqqZo,L-lL;tr$T5BAZF:spN5/NXt51?*jTA+D@P\oNiQ"i-S
+U"u-/p[%(uPYJ-J;i3Gu%QO(G=im0#s.*k-m_Sf]Nr`bi,\8=2fF,??%\BhY1t,(s
+SaE8i#ID*#pgBYZ"qU;Z&+bqco.U^HdbnOTk$_Ro?lnH=?5brM_`Z.9$I$CMbY*SD
+H'jA48V)/SLO!V'0G!b/0.ARco.Vg,*p-lPjs:2n@34R-_8ACZ_n;e\4Nt^U1jGCC
+H'jp4R"osSQNdul0G!c<!qS)Vo?uQ**p-m;;ICR.@9sj7belQe9+&n\4NpHNLO#8B
+GtER4R"os$n1YCE0J=k/&+_J.%3FY?*p+aPk$]=nV8:&3beq)h_#/?Hl6Rmqh_MCT
+=pA7qgakto$q9r<k3$Y8DqYt,3SnL4l::S(5C[l;F&A3tm8ECCG;NYYW\NVCIX7I7
+XLGI@q5=&Rm(LY.]onX:p,?>cnK,o`^(Pf,o;._,A>Q>C2!-I9_VLudb\'!b>3AQ+
+&";)\S(B>)o*'A2o1I:-eG@qjko/?<rKJ)iSBS#Cchm1uKIne.l-.1$=$pHRZTWum
+^Vdl0#;,/]bXVi;e@^R(0G!"GGbb'??=h@D;"MH/Tr0]=N;K^P*.0a/[2\e'Z[MDk
+LZXr3BY*dSr0BhEHtN9H68s.55rE1c[*C$u.:t[2[=:*s+(48ASfXJcH2@.kY6QZR
+Y<"h%[s;1dY@i<E2*VL1[uK'A]$6\9e*WR4h"G;3Ro2=Jm.4>3D_g(R%Dcka:L6MV
+O^O_m$kMq`T*FFd*p-o16jV&`D_/;EPm)QXI%eHY;:/IVIH<=3q+o5Tod;jAbhLOT
+=Ac4H[C(eL[f*U^\LMfpgFpCDaF&4qXndBeL@?pJnqZaU]A10j]^:K3Dk>\oiM5^Q
+bno?6l<TNfq[Qsq0CCk"Aa;"^T(n^t?+Z0gW811'jtl3!$m2'0Da*s`#C+c4T%a*+
+R_<a)$1H1LqsOu7O$V,[IDSp&J+81^DSGWRIj<:,B+hl3^]+c3>$rE6F+JV(^Lgd_
+qJ0E"j=G[So6S\oSn*+2%6rPRHTguolNbH!K<;B41HuA^bmu],B!XWrGbWkTq'35Q
+IjZ&VPH=@?_;Dp<Y;T/d:MJ[g_u]55^FdhLQKkEdF/P4j?NJ&JmCr-e\.d0M*Md'.
+U[Z4aH,1/`=5Ft=%f8=HJ?sNNK):K"pP'XGD#UmnDt((ks3jCqm(^GcjVi9ZrTh_c
+$![!H3=AVnSn#jcEt$:1HnLE&O*oF4r6p1]F>lFihYNZo8(S5/9YI(4k)6q<lJZ>8
+lDL8"?/*AOj/obBIX7F6eVjaR>G^%L2tJ[o$3$7dGNYk!G6d8=*p0<8_`Z/\]VN>*
+beq(MGaO83R$SMSLO#8R"qU;Z&+bqco.U^HdbnOTk$_Ro?lnH=?5brM_n97Gk$pfJ
+2qGX0,LF*B[_mQ_"Icf&i'fj$.m.EjC%,6f@34PW"m057k,#o34Nt^UUqf+:_n7gN
+R"osSQ^$/#,V6\*Ve_u$@"&`tmH0<]eYC>e0E,b$G5ZdPbsCm#GuNS^lRPK9DfmsR
+hGc9O*+tgpig&a*)ZY1X[6s~>
+endstream
+endobj
+17 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im3
+/Width 253
+/Height 317
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 1732
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]"%@4=M&-Z>c]5q1o-Vo\27-GEW5)i:gF_5ZGB$t665JuD>PEmr%Vk9Lko^cRG
++6@#.]Q4#)7o3tC,Q.*^-%=]c_Fa9+0s=kjQi4#\YaQ*jNeMp>s6EkVB:m2)q-VH.
+2s5%*HbFa^GuQ]^l`2im(msR-jr-&Ih[GmuLfe-uB!P5eht$Rj7:^f'Q1Sctg?Zt<
+m&k7+@XFGk_<6^%Q.I=cEBCM2,pb*\^,EaaX@s#^OYa\D)<HdHRGYKmMZ/\4m;GU!
+JA6rSao'TU^GN\M9pHe]_#AqdF.;t0ptOI$NVUGa-(EfE"SfU]pGJi*g1L=\mZ?>V
+>4M@[q4u$JZdr_PrNFCM9$KR4IW%FGhF@*>^Fu'@)sbOkfluQhrP!-UcQ;r4r(=ZS
+?Y7%dIU?Rds,T\Io($\rENd,oSpt5;>N%^uQnPmX4s.^+R6TX,11+_@bg1.&@k+oN
+l]>iiPL.%3TARW>\Z$FFrCIT:PYQ&WhcFA>gV,I<b<;5"k<9Hob>W$4LqUUEkMXtb
+gm[J%s#8X>n4?ut\%jLMV5&G>53)%n##+8DItX.JqqtQ#X+VMO/*9Xlbi=WDX2p7[
+9BL#h9[aC3l^9<QQd)uN)5]'UDr\)q?S^M2A!Xi:^7E4mIDNQDpnRY'8;u![k$>eF
+b^[ZAP<LcU@q[qaX73OZ,J&9nRd)M#K6_;U@hl`SR@hm=K<I-s]K5EQ4S(H%r#k`\
+S*[6G=PL0_>Kf%4=Cj.RDl#23?8UQZA!alF^4jW^]3r@EaYLJ=?JEEb;K^B.,FO$]
+O;UPibf?Z(k0[3#0nY!)[G-RRI`ZO3bo4gg`;H'4T6gsY1?[dakm70W3qMf^#`j8T
+@pV`^n<gC5hq8tk;f.!YqroN:k(hc22lSVuUjkEsV>4HV0opV($h6@5qjuu!YOGl3
+Bn*Cg_`['90;h0^b[Xs8^FjC#ibr)VpBKN\[dT-frgE3g^36k*HA&KYe\-:`e@!Nl
+h<el[k4p(W=lGp=+837S^ajJD53)%n#+V'I3;_W8c)ZL<i%*qcl-/1Gk,ZR^j%JNM
+WD(bKk3JEde!J=g&/h>uRW%5k94'I38n41$@(r2N.Xf.G-hsH^JOEl4>uKG=aj!I$
+?,@]-M]=4>:&<)H!jD6DX74[%20u=mp#ZuYX7.^eI!>(IY;>)71G@)G6Z;>a.m,\$
+iE=pAX'<h-ZWLclR;\oVb?d$_`ab@KCqbVE0Y:`,T#ib"A6rKbm8A)SF!I*&<KJ(g
+=3S^`FQUtNo.e[>?<QG1MJ@T3[\;)l34<j:Ia,+C]`h`1F7UEMc?uP+4Q\Be%3G,.
+a1S<X*qPcn#*4&RA):-<O*SrrK?$+:1%-QYa#rLt_.+PXR.h<=@ik6ui%^:<b^0]Z
+0opTun<h6Yjuin>R)ciuGg'Y=o:CPZb[]KK4Q\AZGu)7=jtZ<6*qPc>]Vf-Yo9f7V
+O*SrZhGZ+hH-CVfa#rK=mjXXE4Qa>n@ik6/pCth]*qS7H0opV(HOAmiO*P[5R)_>O
+4U(GEa1O?Ub[V^cSq;73A)8.ejtVpB:Vf0U1%,Pmo9dS2VdSApq(N#>k!LsIju>1>
+Z"(88-AU_n(3l1lr#;6ThA\TK4Q\Be.@A.<k.ST@*qPcn'[1&.oA8C[O*Srrb0g.J
+/:7!'Y3#'sjsPAna1Re4SpbkUir@5<T=7H8:5XOj&+VH)?9.oT6YD>>K:;&cr1e=2
+r89X9%0.qoMBW~>
+endstream
+endobj
+19 0 obj
+<<
+/Length 3149
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WR4gQL=$&Ui84kYY8iBo!.8H/"=b>L'+O[1t$feBC*q.#u65\+!k/oCW.2kU&Q0
+ee?g"Orsb\kWXFko_7&,0h_4VT=sZE'BAsTrB6TFZ2,94Vh"6BAf'ee]>l#n`qG`r
+IEm`+iK)U'T??+9qtD`(i@,$6VN,71G6`<>M_($h<;j([5C\7'`-s@p03*;HCQB>@
+^k#u.-@6f3B#D0K-9*3>bLM*Oh;KlS9AruhD*/i=n_qP&[JQ%M*!Oe5/jnK&eS;,!
+PilfH#5n0M=7rB'`9,7\YM#OlWD";0T9Q%E#kZG3f9d"P7/5M0eQ2&@%8PLfp\$tP
+X>WfP;O;(?\5="%TCkTZ\\+P'@H7Wu/mfb)g_sH_4@W\LIeoEeFgo*]=7d_UcY-X3
+VemFX:SL!^!fg].Uu#&5ArGSul[uGjV&,D7emSs2`>r&BFS4oR6:cHWb,"2Y$UaL^
+a.NA-O&Ve8VpueCOdf1#/uhtBi7`74QXB=rhtCNm/B\fq0MA5PP/+QBX1BAH&,B2Q
+.\3\Fj!Y:f=F67)79'k8?K6H$fam1H_VQsYNcTt)T;o%7[JNH+nJH=fk[)Li"0<0"
+U@EkB'\p^QA6/.k0MBQ2rLG*,o"'PjJW[O[[/h=FJ2"s]ggn_U'JrH-2p-6S]2p3o
+S;9:/:%8T?ls^0R*0@(L'=2Udg^flKRP>D:He7%X_9'0dl0GWPOk9ICmb4/MPrh:q
+)K8gA/U,]UR"o\(LC'.]8+71(Epd"p"FI0l,.HX)%N;gbK^lr^p,QLmBMAZI6F8/]
+Oik>Sh\BMko0i4\CR`Egp?EP<U+.&oa+a!orQhOD(a9RXNWG#CcH"8ln*@injEdk?
+IcUcpV=0/.!p.U\<TK><SS3j7c)U-UR$].*(sfhq(a$jQ[ZU0\-hPg#8JriGjSS4d
+]e/nSA8R&jYCV3[2G=]!>:(]^";4HFU,PTmWk)2;)D.:&mW6YLZ_fF(qAUTWoCas&
+(](E(J@(miTTu`X,iBb5pJt#<CCBD9_msM&kW3QpXStl9<NEpa(^g_W&4>#'>85OC
+<%g:Ul[HYRkO1j^MRa2A_3:QT&!-h6"E(`305d\kMJ4-%WW5?C[p5LS&n[()4.+2b
+8I4bFRYUG%G?pcm("@INhTK)IDiqN506OBSH)pP<a\kZr/B8B&)eX&>Whrl#o4'_i
+<UI=!q?Xd=hGi[D;*@ujNtNZH]LMkMKFMC8Y+>_Bb/(M\R7^)6-g>I8<BG@ErXQLZ
+1$S"?o4&8Z!UG\T;`Td@DNK`[<S(7ta]'gi*p:6b/5MYj`Zi@!m^\ph^8@XR)L$g3
+<J)`CM/T7DG!UZSMkso`(d7j"%:(Z#5:H26*iH/<V.N,J,`]6KSRWG=W\S@?6/]id
+#e9iLY%acbVe+p8HmIfQkX<S1C._AVI:$%ZL`Z`^0_3<b#IB.SX::K,3A,g)FaF?b
+P^:EPN-ItbCTbDu_L2U]C9B'"cBsB4K#^[_W8\#[NBIG8U<(GPgY$+,'N9'7qXDJi
+\gGuViXa#[U+SarEB:>f[#IIHg_:>SW(7_Mk/j6T*/j5=VYeXR*3jLuc>@""g.3qf
+f96niX]DRp)MA`!V8jnF9*so<GpSsD3h$Le%-)I^$ZHp.HoC4!4Y.RA,+\E<N]:NQ
+:9:W^_9Y'(n2R;NmcKt,<\]hV2^?;<e$gt&,Zr6@h_0/F(CT7DoXoM:n1tM0l[_uq
+1:B]`64fNA#t\,X\%2d1k;mIl;[=6l$aRj,:A\Q@QS1G*!D>b$G(jtrfJq\Y`5V%Z
+KLN(j!3rLN]^D&Q7sNhL3[f7tW<!"A6@YR]Fm&KU4&HSM'#1u'fLEos<HtL38F=nb
+.%Ep";eoNpM?JOLLmj3K"?ticlO+bSms`>iifsn:^[R!rO*kh^h<!deJgKh%;rJ.K
+"9N3Q=0AJVB.=p8q%sq9>_DP&L`+(>N'4':YS<8KK:Ci9OS/o_2U]temS+"r&fQ''
+'.$qpN$d;9`LMXZ,a6_NTk](GMmb+]qV]+L(=>4%3aS8M)+p!9nG5USP*+Eml&lET
+6)NnH&03l0"E2nl5^`e_<Ggro\,oO%mP1!d]GKZ'6r1jF)c;h9Kb<g@qC;P!8;18@
+VMQC_$uM'6a@X1l^JbppQ)/@?VR^'S1\<`t\!`E-eres*`s#*_$mP<lB+_*Tku0]A
+kJXC.mIuZEC_7V2qW$V^=nXMp)(p?o52f_P/&`+%"7Gs(Hj/G`X_#sWn:8G5$pt&q
+28^4RJUVL%GZY29q?Y+jb#m'VXL8*BU#I)-P&9'W3hZg-@`qHRQ?jj"aGu^h;an80
+RJO;lYM,0)\tY=J0[-7FnZ$mQ//;=I,M#kP?RkWp)*?>Qi),XGI3ioc<oHh.fnMhp
+'CHfDCm_K&2=`Q2@qXjc.srpZg0tql(Zo]qK0$;]<("N!_K2MD4RSs):X`.RbgUUo
+35^k(Lt4;g2D+oEVWu,9U^V.Ok*0mqlL+?FH-:@Fi\Eo:j6pn1Z2]i*kP>pG2\Rt6
+7<OL(:`=T,Q8dT1OcdZ3#KEM8VM26e2+=LdV,3<Z\1m(0L'kV6`khss=nnB1f:9"o
+9Pt;uTCJ[W+*MF[CKn7c&+:'_mso]bA`,L1HW?:&5%LoK!eA?\/4,R$(<>;a?+F7D
+Z87m&B]5`<BU9Bep1[=;_?#k]a#Daem+&!Y#t@ou`O+WBcJ9[7!Q;6bQDnh3o8###
+qQZ_V/Pg2!_2#msEorRNWd+Gsl7rkr?GK;e[lbg$Jal`?eQEpY_#6h4j<K^j)*i-"
+Ui5_/U?J_N(O?gkTbK*o)D*V$JMm&1]AO2mmn-`)ru*]g+_&L<</(D6p%=WO@GNgc
+qb9#A'ChOsj\P8QXeP:r'HshGMR3Sm.d9R$k`Rka#j\Z%eN"Y4@\!ek\*&rAk.9sW
+Q+tFfC@hFVeo\4jr=S(ZCi;As:l]Tk2.MH.[eNVS_mbQJHQ[O/JPpble[=NWJ')s7
+;1jNG(1u93Yie,2WB0$cVMZg2C5c\c4=-/KIF7C&5;digZ.o6JjtYuj.CaFm^p3@7
+?#X9.S2m$64A[Dj+:3[ab%B5k%aTq.q8'N&aF2b5i<=Zi1*pB0Rk0Qs4?tl+*rZ-@
+/FlI$0.LX-i4?6"F&9FK#EuU_ARHgAp4V,WrGM[1mY'0~>
+endstream
+endobj
+20 0 obj
+<<
+/ProcSet [/PDF /Text /ImageB ]
+/Font <<
+/T7 21 0 R
+/T8 22 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/XObject <<
+/Im2 16 0 R
+/Im3 17 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+23 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im4
+/Width 253
+/Height 317
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 2854
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]"$\G]7$q@QqGLp]B*G;`CGU*kPO$rR3r_j3M*DVY\!#R^PQd<TnbK_s7rLXi(
+6bg(eBDQ2S-?eaJ'n1M-ZMqSh9K.Tr2Y5]5HJ.`k5OIU2iEdK%DSGjIg9]+tbC&bA
+VfBGjchH/jNi8JfpNL@R:pADsZH!fMJ$NJ)#W]n]fZ>JYI*V1R$H`)A<rCXb[ATFb
+U2T`&?_!bJ5B,Fuh,uE$(see5bo=OniN`1fB4op86VdZ9Cm5181[hcS,PoCWq9p]Z
+i#Aq6RGXV5LZTUT?[;,@\2Vo41\2LRc.L4,7i!]1r5hFD[pjR%kl90qo>,Ahr`2t:
+[sR8N0a;\Ncb0:-h7b2m]L7"r]_?V+bt$)CDZ4OUs0Q?]bQlIBhJ+-,HJeWqmHVaF
+>Je!^o\^+\p3:lWl29$igZKl[?%jXZAfbeJoC4"gP5,*-/FuDZAH'=QHd-6)X;<b6
+BdVP0oDbH6p\uQs<4erfA#).\oA@0Sb4aYZkNtA+J,b!&VJ-nss26G]#/AH9hW&==
+q+H4=p&r&&XL'!Uc-60%O2+8un+d#sJ"I81.F*/,ZfYE-(Z7+3Ds>d3PNJ(MPiG^)
+;lNaF'B[c31t1LIF,1OZUZV/mo[773F(s.P,NeT#[*g2]7tM8r59Wlr+.F>Z4u!"q
+6RR:mT#T\`Ea%F#c*->QB:[FM:54$h]iOph3=dcr:Gi[<$!&Rhc2!TP*pDcn-[T`b
+8'n;jc`?G1HDTu]V`MW)otj5]Zg"m'A*/'*Gg0=5NgaU+,'^ff\G7+j`U&8'NX<@)
+c0U\j]2BF4DGh(hr'HU<nB0,ro4s_>%eQO&k1?9V4:poF_OB?p*G>)#(XV',hZIbV
+);fJ%F`MF"9!H.rVb],K%0W$_l(=C$0=B7n2#e'Y&'_jVrDW<kTRU_U-1Inr_68$t
+HdeBno5OWj1cTD'PA2//Iojh!W2<?I&,qX/^!]QGB`>.'O3R!gs2"VUWKmH!oBPS4
+YP&>^s)mH!5/0$G=,QRY_V6$)$VbnOgP8KAkoZP_U,I_t5FP)d4uN/d]P@,SRTHWj
+BChSVIl<@SHob0T]KZ*Io6Y1uZf!@/c`HO&i-!H1eb1YCn<<$_,.oE%o[P!RGd[/]
+Vn+0<e=Bn;-csK_kE-GFfgU?$SW%ugKAU]u.QYG(q7XZ"HGJju6D%j2g`YE7Y;Z6(
+o+>orYT10qk\n[DoA"*ds+beA3imUQL%@>;GTHF8Go#5LiHjS&a$Fr@o=*r89dmXY
+HHLX#col\lPoa?tIGf\RW(V/Mo/X_fdUO#B!dMY2hPfZb?915]5'P6CmOk"N0qU[>
+Xn7GFOl/Uu`-D)m0=i8F,UG?E%JLaQB_oe43EVT!V8p#1&W+^fn-f>ASAQj"$-=mI
+d5/g's7dfg=lrZF"B+H>V9bV%:X!1$4c/[mjr&J10@,]0F9kF?H)_3:0<^EJG6gaZ
+56'HB;#*A*&.Y=7iE\b=)>KD%*rE:troWE:55<Rslr;$S7bugX&P.tMc_aK"c%q%6
+bbriE24YY3b^A,(+aD'(;Hc-d24m7._^UQd2kNVOjF(4i;=e$5mj+a^^MiKTb5@EQ
+&'S0(YIRS&o4qJ+UJim1@t"jur"*[e!9'J0i#2,j@]Yq1>PJr[hjE:'DQrR-h.n;8
+U*0;ZoCoe=4D"/!k4ufE<]lf)@##FOn,Dh2WV\!;P^0@e'<f-;q;kfQUCQiR3i@XV
+npkpb!7<\JK>*$7CUrIU!r&GqqBG'm$4ko="S(Cd!aigW'*.K\]L)aK+nKTeH2OY*
+!SQ![`QbRm:-I5MFB?@Z0^k7<CnW'S^:8H<8kZ$7Da$/@E.q&*qXU]cH%DOYr&aen
+QSfkOEAV*JqU4Mg6`o,K^TdP'A92X&!!m4UqSMA>QMmHa;;K"Eh&3r&H*j#')!._M
+CE=-"bZUfaTi^"H78HVRT(J;mmqsSlSWC81bqJt<7L?]E[kNk-oMI'm3mGmtEut:n
+-E4Z(_frrO(;76'!T^7ll;i.,\)._[A\1pDmBM*I\-IH,;r-7M!oV7j:SGh\p^Zqm
+bpPg8KjB'%io\_RdA!O!I<kEu&9P230GVg0Xa46sdjd6!;oNS"]bgB[n^El>MYVtF
+5J$p4UJ5h))WoYieSO"J+a%#c>3<:ZL`1^ad$MJ<q)r[#kre'ORJ'Y*hZj!#rWW%u
+Pt?,iClSZ`XS?_s9:6&>^BD_fb">e`IEa#/Gia9oPtbWWmQUZAqY6KA]Xo_DBCg"p
+G<':IMph>Xmj2P[.nSXS]G$)O54l!e&S0afmS2p,Qp9_[;";qWrZ3fV+h28Q0?1Y+
+jTH%:]g"rCH(P>3NLr0AQ&$.G+jOE__h(oI`Sa1Pa6[h(:DnI%js-6.*U(UP$=9\,
+K,u]/hedg,lMu(C/b3!)R_N$]S+DWt7@W1X]XOA#p3AXseLY`/R*W]r=bW3]o=!Ae
+'>+nJ)+:=Rjd8hV.`O*^Hn&,VG"LiF\-fO"17pm6P$OB!]UDL^cAaCH$d2Tg?(C^J
+`$)QK\j5jkJr1U&n:-Kao6]CfXZmuXI&"b?h]QOfba\FUi6Ap&2tJ95baWl658q2&
+2tLX1UmQE`DrsQB2tLY<b`<GoDs#=BB^fWjba\Ej@ckqJR3)mpbaWl65>o_<R5a`4
+_4,^+DrsQIR5a_LIPc:*Ds#=B829^JhTV#bDs#=B\E9^81o0q]2*_%P5k?N"qUj-c
+JEGI"n3bLs0>+F\UVY\KDs#=B829^JhTV#bDs#<WR3*kihTVJbdGW9^R5a^^,r@gs
+(>!s&Z*]O(INIp"R3seq]u%Ytr\2[s^0^[#B(01!'E.e-IAU*BMe?8=:Mf0_IaP\D
+4:Idq!<B!9HNs~>
+endstream
+endobj
+24 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im5
+/Width 253
+/Height 317
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 3122
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]"%@X=?$q4<q]Bco\:8cN)'bX&.i%k!!Hdem#bNVk0+oH@]0"6OO`m1mZmC*Q(
+7_dsU9KVr`@E3iOi8ZnamJ9tl'F)<?o3@&rfh6s)?KRTHHU[dtq9`^:cbA8Mk!uU8
+Sb"];H1tWhT^ji:HDaet$!+X,G`7K)c%LocEf:C2Ot@RCP3\5s1-U2Qj3o'qf9p!/
+?hO"&T;2#d^-01nrK<32dh:=D6\kt^o+C0)'H,5e`suPm77u_:kI(u1R/d(I&n^&`
+Z&?iHqd*uc7s\-`\cMLF][P-<!59DaNVUeo7@X=]&b*KdpL?=7X3CKU\0:fNCW6%[
+k7;&b4_lhEa%q]0da:0$r8.A1H\LUGq`\r41tUX]ZL?#0mX*W'T02a9o.TCBr]GO'
+q#)$?nA_e_^:_&e^?`D5o8)X4iSilRT07[l:FG[>14R1@/b>D%M>>3&ghY0+`HkBk
+>ZTk^a8Ft2H[hR.L,tA0Ef<u8a8E8F;VD'<XD@_C*q,/:?s2p4PR$`5*T=Kj@.\]T
+Apr+BB7!SP_]<@b_,a^"Zb76(_Me0kXN,J?#+jgBj**3'&jkQHRkN1ji>\8i,(m_@
+2.&u[6>pVQSdC&+d_(5=K&4keN!FpjcFfAGJDSM_S7OgrRJAl%D9QcdL=9@pT+p/#
+]T-JY]odRYKA4M-L\E[@U!o"DDmP>5H#=][*o?^\J"Qn]qjJ%l`f[g'H-^Usd.dKP
+p8c'BCAVdJf3hq/17m=I]T`VNh9`fn#D(^Z]S$QBh:-g8'*c(NH#=9?mF3Ahk3j$q
+0^.Z]\$0s>kRQaa"9O]H5:R0*j*VWfTZILjGaNtJL4(U:fK()96h5^tF;ONt4"@qW
+q2d['KstCOZU^t``ocH9[l#7`6V)Ohg7C>0Km2A'Tu5WPIhjdr4=%V&H(pT2g&Jq-
+`r(`G.:V8p%EsUR)`?<D_AemBhXn.j>FGNj3Ak@H%h^tq;o0KAcd):Sn2@V$I]\6X
+n$L@bd[QYc'jc3X3e3%J3aXk-#iBNkUr%n*2GZ^!_`+'gKu]s,2pWW*_mc)<(68aY
+BYIe8,(,l*%VPq=-M&e7"Ro%T6p[;cToXt!D*GF]c#mHTLSr7AJS"t.^%i;b"Rpa/
+-%:;u$P9H9nD)'Mq@l[5Nn/T6Y<nTHRB`_I+80uN&O5iBn0RZJhSY3Aa\6;sB?aA6
+($mq[0RD;493B-)!M2,TVNWTR`4:FBbu`]PI&AFOoB'hD8b\\U5&7l]P[r*V!u?=A
+]OZt#h^RJ>k%-p(;^UUWifh'>1G9bW*\t@p6%_tWb6OEj_$$b=-Q2OCnDX.tlT-l%
+H")#G[?inD!rd"B1jeE?^3;\#r5lTfh9It)"+N)P^b^36XROd&3VrB^cTgu&oFgbI
+=uMJuZ/?qSI/S^`<-W*G0'7;77dl/W=$Q<01]7%\&ZkTBI2q"A:9itPUq4EQ,FR)5
+kZqqMl5\^.5<c\?mR*Z*'D(5Bad-urpr'geI)=tb$9g=#)dpB5o*Jt+dlgk*&pg9"
+A"K^sq^6<rIW0=NC;2\MKR'_hgP,"4eqo)5rBcpe=5YkTAq;>RDdi237]$1mSi"39
+R[6\=FiE2K!hM+gP:TBb/(H3?XSGr7550qcZa0\V>$!VS9*>*-X[?L"1nUSR&9)LM
+'j`=@n0$HRC@e:lcN::*haWA'Y;=K,9EVISs%hR<k4o<hIqd6-c*JqO2"9dCSuu)I
+(;bN7R-j,fFWPdMKh(T-k(2,cGbk1]i:XLk)BOUHWOA_%]QrESG'3Do\((+;2r!B.
+\((+>Pqrqu;h_+_NruSfm:0a`f:%bg*PTY.DR.<6D_aO=I%0pOa$fE6k&p/9oZcMS
+*#$.IR\(P5ebfUa:<,6D!2SHKeF:`F&)3TF00ror&;plKJY-MU1TBm;qjTifp!V$<
+VgY+#\ILLV@Gjjlq`Xl'4S(;J4+/URp=]FZ47#n[7.j!gYqZ1\k>*@)ke>+r(=,+Z
+amt)")pJ#57M,>Ao>RVsl2UnC@(pMfcZTA@f:/rIaRoXd=.?B8J#4S!][j`+ph=(H
+Gbo]=k`ajGn2g0h_4UUW^oP]&`u`mN0i=D>0CTnOHrW[9]@EP#/NWK.d2o=1)A%.I
+Gud&\*lrt2;45arCcg\K^g!6,dapVR+Rhk_GP?I/7LfRXbl#)(i^/=-2G[d*_Af!E
+pTo9kNuBCYq!W^9o;\KO_I'_L[Ast.(D$N#*s>n]?97qY2[I(A]PR@W?P%IYH-,i&
+/#2$\gnH`7%tMgZ@\2Ah<HLQYf:0NVi7Dd`LS`,j()ENY7"K83^P/WJan)c3nNHS[
+2BS-!AuOP1Vd9$[`\B1I8iWWr=oUX>Yq_lJ5_fDZAc<O<%YNT^4O467mpgeZpriSH
+hUFXm#f?"BIL^T]o5q*e"7Pp,7mc9"SSNpLd\F$nR1K$N@tk['hSjk%rlHu@`6nJk
+n<\D:o=HA7D*s->D#^'s1JJGNXmNGp%MF0`$4dI"X1"(?^?Zfaa.U>^RYRL$^!3=i
+?fp1g-`fT"mcM@ES^$WG4K?sS(3f?fGSpFOk$K&J(j9Q`0@r:1,k4#I]G!C;H^AmS
+]>"[JIGUptYO_c4hKu]Gmrl.X-?iGeBD_XEO!VMqq'c.[QZ(6I__Zf%"o87if6Mr]
+K\t6@98J,eB>-nq*oG.g("m8J-hF`FA*JEcf/!l4G;1`o)G0C+?H+d_hSHjhAfSLt
+Gra&%H@,6^_&JkV8B@f['YV&&)J!X*duT-j2.*G!<ED3"g3aCjU&/\sTH"0n_>Kdo
+XQBJeq<-4UO#*Bc.f],qs)%PAB-%o(S,)HCa'.\RXRdT1GQG(jkuZi3?=T+u[_I!.
+<p%@P_q6!R952DNH^L/i$tOQ:0-M7UmUNu&BdgTWH"I.+mc534oCiTtdHE[`bAFL@
+^P/L'O8^uND!%'S9[.K!Mg5HtBR[kUDYnQ62BS.LB#s@6s/aO7GhZk[Q`uOo2s@P1
+o1sVcfm\hRc1VghCRq(AQhei&AcC<>0CtP+bPX$T14P_,bl8UZAc=H7RK'*gjtH=m
+q.9N0m*1S49CEkEY<VdXRO>GGXl/.Cs#/2/5;2t5)#Vk\6GFSn1TfjoSo$9uYZVA$
+cm]Aer,hoB!2c>8>6~>
+endstream
+endobj
+26 0 obj
+<<
+/Length 2328
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:,gQ(#H&:O:SpsB;O>*6Dj1!QRdd0kg=/W+?dBN_doaHA'qna>:YaPi(KgD^k(
+U8>uj>gAj"Hs\KIb@2odj_bY767tY#HSAfP*Y`X_KgcQqAU.O6bPgGjLYp'k5JhVI
+/O$A\6bRr1Go2::o2lOmSa#T8FmrPtcfn8M[&*"pcU=7_rP43#If0iBO)7&.Rd.>g
+[GL>r]!82Ya*?h"J!WAPUl[T]?%)d70$\<Ur+!&tS%Hmo,*49.kHZq?A&$f=^klN1
+Iq9iA9"d**i&:rk'J_(o,1-V2l=C!ob't1H*l%eB(VPDHBrnd<L#.RgrV35Rp@,\u
+M).@d8YOE"T!mKMAE2<0f'/gOH(+SirklrjH%b?]?]?^qr=;L(rsE%8a1'6cRFp;>
+;H8^%8tnkg^c?k\EnE>chs"YX(H>&GVN!<3,dG'ahPB3heDke=!fFA<DVLVc*D=Is
+UlCaX;s4cj'N0b#$!94hg)S%+3[kYm:?a;%65n=)C0Fm$$92G4!m8`)er\F/F2qP[
+:+s^k\=Qrol!TfGlst:RSZ:fVQJ/`6h3qPYkb`@-2$"M8nq-UnS:3]r(b+;6<@?Lf
+8aj7K)+U@ah0J#I-DU"kRiEJaANYEt1(icnh<*+4:sYVs)sXk4((K5]"u/Ic_'rnE
+4;:`'j!j3c%36\-84CIY++<bCF$HVPJR-u(Rb1k5$A\($-%-YFIFf!WPh*GB6>N\i
+YHs2Qq<E*7J"?_Tn5M%>KjE(&63os$;C4[\,sYh[+;]%3N$U0"$7jYHnbD>c00f)e
+hqgI"Xp!^S@gO3'?XE?=%,ka0Muf\VXp;c-H)7+aVRB(UU#pX._&j^dS>OqHU9IJ)
+?^:(R*o]$Nf^4l2$r_:BmF>_q(aWi$-\J)rOiRSWKR$t<.P22>!huZ^_0kI0J>P$6
+0;Erq*>-pmk]UfS)NgKeTXm;[6l()'r""74?*cSH4(P"]BkRM2ok4=;B:7LbJ*ORZ
+/s"k(4""4D@L*b?V8Ej'k?O0W%F+l[/+*#<?H[5"i?:f,k%'<_TQu1m'0@l,m+H[F
+FfoGWgie\m#&AY:VK7_!3(80Z&bC1Zdh)uV^29fte=.N!'+M%CH%snK=IMKm9pb!^
+i_@-Cm8,/oX+h4S.#o/H^NQrY3u0*jaGZsql+<)."@DmgbYX,WK#hB%-Np/_X.Z/[
+QW^kUJpn'2*')@R'CBr27E@c7::SZhW,Ie<^bmb`)V[0Mm?s#Lg07<H,-R:c1M&&e
+/!RC>`4^O^OhHZMMDpkGcf4L$1SL8WH_rNm[*e0U:uj7+4Um'`_o((HbCtbJ2q^7V
+A\CXjUo+@_:S"V=aQ=C7LW0plUIM0qWm/LBGJLlG7Hs4TWA0m[B:2Jdj$E2AZD"mA
+a-:o!;dR[G0Vr$n.qD>a"2p^6f&rOgq^U>3.IB')ag6E\SIt*:CogmYG^]rq@IV3I
+0qVZ(DlbFI@C4^04+R#.mQFMO-_B(L_uuQsLPIr@DE3u;#A`WAF_j*[3+=MS;20#7
+&l0lYDLO-*BM6,Vbr`_ZkUEf=Y@9LtE#O%!2+P;YqJ&`!(_O=0*)CF"`:4K1"(E1P
+4:0.'[\(p1<.;^u>':rUdbU>;Pc(#+Wm`B>r)A3$KJ?1iZ<_B$,5>c(QbiM%_i%cn
+!U:IHRHkrfSku^3qW$@@r8cVArC435i%uX`_WAJ]3Ukl=T)hEYP8!"*lB@5UJKj]P
+VVBfp>O"G^/p+g-gh<g<HHo2aGU`UUl!sP@*Pl'&3XU*.+4obe)CT;Va284O+<G@4
+"CTJJG>a'j-,IK;<mLJ#8"-<3)e9f6HW#`:>+o*'V1"e"Ug``Ngt>pD2IV'G7@@@+
+]o1.bRhA_N4@6Y`eOApSMVN7]J8_)i(>ZLbV3-PWJ=:h&;Gj!?_#c'JmYHXL_03)+
+"/7f>CWY"NolE@OP#?DS]%h9J,>n'SOL=2#jH`Vd>q5o"5N2m5*$YMHo9=%F2CB9)
+*`5,)]WR2uV7-e`^dhU&XS0<8%7IIKh_l3qiec\Kr-J%mWQ55e&tY2nMt4"B]NV#P
+"Feel2aJbN7q6REAH$G5`QYrsXhS<NSn+m+$nS97gGu-@i*I'_X=VI^3QZ"*p-dB&
+18/umB0f<<ME#QmC8*r7Y5fV?i>qs2<tI@%nOF`!k4K>^k.`"pp<?7iNJ#SCc#b)E
+VTno.Q\FibH6i;L0)Zt+#!CcK#grfA]a[(Pa,,'4(3g(\Ju;O9E9%i_eT<?L<SMij
+%@,''gf<u+\:3g_eYMF$3">%cJeG>cg%E5t&&S4_ldpD[;qZTn@nI9G,%PGX$]#J,
+`ot7:Eq/#eNW_fb~>
+endstream
+endobj
+27 0 obj
+<<
+/ProcSet [/PDF /Text /ImageB ]
+/Font <<
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/XObject <<
+/Im4 23 0 R
+/Im5 24 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+28 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im6
+/Width 253
+/Height 317
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 3265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]"MkQmg&4NSC,-3/O]QR1>g2RjWr!(-a0UE7#h3SDcE,lN:Qs\,dQbP7ZNLb(5
+fDdGlJ+R/6T;fjp`baQ4(3o^KAbg_S))"$8>4]9/mBU)AIb`/.5Bg6+c+J4,lEc!>
+:@m1T:?ARsO&tRg#:bN!m?Lii)Hc8'MYe6YIkkGAK^@_iXCPhXI*(Q668G^YMLW+i
+npBN>kZ9o"ELb!TE4.`1asHK9;.J:l0%cB.jt4luA/Ra0^HjTsK3XggbEa2tA,c8h
+'.2WfYnrh;j8P`tLX]BH$imbfFK1`^J?Qu<@m2V]dH1rt!koG^gIM9JbKL4I2=[kr
+=+%\9n+AEFf?2>7=1,f+D]TMI2=Gs3U%rBWVp/Snom_,;*V7+W0:V@(S)-*=;7l\R
+lo!bX5'l_BZ[I.HpSU.=X0(uLWOKd_9/iIon)iY%r0PV4pqLB(;')-tb>QA.=c.>u
+I2kI>q-e_9>@-KeA>jOEOF<oS%eFJ:BP73lkOYsn_>H?TJT73/.5ULGD;giY5eB6\
+o3(>Pfq&r8)e#6Qk/t`:mFgDB?GmrDj0/&:n.[5g^OZ,2+V[,Pq+EakHtMuZaC+L_
+c/5?!Tk?64T*^.AdsMH6"?iOU1*-RE54bU-!;(*ib?=K%g!$o3cXZq\M)medq*s=G
+bWk.7VIqY[A)s6Bo\jB+0BdN>_f+Rm\G=p$N'=oD4[5\D_onK-=-]6=pUoQJDs22E
+c/*YhI;e#8lFnrZbbEG/B>0T7J=Y)8)%Qd1VtgrL#^08?pR*_fH-PLn@S.Ti#d='g
+"rRh1]D3aU3ZrMFo1KLC8<msZ^q?5a9F)OO!(=^%%Va^;>aRSck"YIh&m`G'b`5<A
+Dr.9b:uSt:q;`DC4L=jli-EQdiY7QIHZ)]NK>NO1eY0nPQsVd-1d!$HPBgUjA!1b=
+_IJ$>M`.j0n-nI(nNotDW:15XcU$G,4I>m8:Jd0u%h_(t9u8]S:X8_(n3"%*HEDgT
+YI)S"d^,@N41r(n3e7S"3e("e#lhS`OpW<1C\'@s55a$pn&",4Ir@N'KFe*bq:jm@
+iP.4!?T]P1GNNs3%D[I)50MCTr'U(oL,Np9T<%.[q:$'oW_)>X4^XVlTP4E*\bRbC
+#2l,C^Z*R(i<&)>H*]]T?F@<l:sN#2`Z>pjY"NkXcb+8(Pn`-HM""L.%plF^/52iC
+poJaunHO=I'oY=l5"g-WhZ>oSrgL!+Td.\o6^kbEY4IXAJ5;ZLgJ,7b'C\TbpNoK?
+9NGQKVp1S#O_WVRI):86(XnVrp>EcPV3<ZAg;>aXo!&E/4u-L%_;l8gTdk#E0`O;K
+nc.[=W[9W"F>(D`9:Rm@+.=jO^!h,eLe!42ba5Hdl,n2-"7mE*bfF];rjMVBI6?rH
+[lbFSM>;b:X<F'C_3`sKpEp)QLPH'e@fG&T;*.5/Dr:0.P'jf0$J'K3*8A&/7G2^@
+gtq"$;_kBUd>RAYWNpn?rQ%+OjXpT<+.4eM?J0?/"Ws-cm9egm%L!rWo6:k#&(gW$
+0!?F&r?T;"-!ui)U&"NMkem*N;ubnqZ<)F1_FNbU2c<e)b+%ALP!`gP\ZTnX?X7]N
+DLMRG/:D[4g=/4]ih=)3mH)T)ohaOnI`8@Oh1Hh4@@gYPfN1-1:c/2_C1b_`C-E)6
+MgcMibR`NW*VO@lg:T035I8)1Y=HG!kA4&9Nc3cjGg:g%`%NR9f/4Z<\6b;Ca7d]c
+^(1Hm*0d]YRh%Pr@e1(=`;FXF5`=b,G`shR6;>3DA_/g^NVfOI'YHZn4b;3C+5r";
+D-8RK\HQkB0g#5J:G6fCk>s?5fE'4:4UTC<eM62Bn/&fa8To@MU@@C/AYW[_GRZo6
+F[KI+_]0Nb94t9]o5b]=YLejshT8ZPA$B6a^['bJ$b*B*H6Q>!5aHb'(nR,^&Y_/;
+%q=F@5B!ZH*Ws-Gn)d'ec$/d8HoE]l4p>CD3[jSYHXVNXb=g4Om?u;9V`Bj`c^Sb*
+^MS4a]t;JUgV)*[DSk#iBP5bcVlgD8rod>.8TPYAM8oOqe(AN#.R/gkb`hNC:k,L:
+SEA5"B/g'EPQR9`7]d]O0%84l-(*[na0tNlVp*nGR.oHKi/LCfe$t`!?Mb-nKR%bC
+4+Dp._E5d/jLg6:cKCP'kNG,WemlS70JD%/9Rt@=%tJr=+IH5'2rDjfV46r9GOr^f
+fZbAt'_ZAu5L_PTbh:2rIr.4DC["OCH[a7XT(fi<QsWbcSq"L_bY,idAp\ZFc.UtP
+g:LY3[!Q7gDk0sbn)cLPD[Wq?[Y:/2hcB<Xh>X<<o6]Xr'*$a<>H>V]F&Y)4IQH@^
+Rpu+^nb6okH$FlUbtkKa%si8u3l?F+K@`"'5u0#VIW(!I@ib:.k/3$k3H^9V_%R4B
+KVr[Y8m.LDKB+K^k(sdpadEVGJnr(GAt:(E+7g#kR!Ig.p.a/OEcfPVVjm/;KgM5X
+,=KYd2YIn$o5C"k^3Mb,Y4>^J/m7'ofomR`r@%J7ei#bRNqYtjq(Z53>@5qYONmZs
+r^$+AXD/e0K(+>:[Uf4cLJsM[4BjShE8ZGoYMa+g*-`@mAj]73U9I:Y2q-'>+9d?5
+0lQtSM+WF,RVr5@RhmgJh"bq163LruF379X5t#U][st&P3fP.$'"l`Nh?J;U$_"Oj
+LDMfY4kWJt7u-Qq`QUiR5j[Lm_;U*m452l4YHJ^]o*KXYrgMuY#9=Y)@Iot(#9HHa
+N?)=*O2G:8SNi`b9_pbF/+W#=6&(_tm3h)=Q?^L$MYq;Z%XTbs29]:`B10Jm=Xr4u
+!ADe1+M>u5S07`mk-K^Hpi>LMl1FMBbhjVn`YUC[QV*TN`r(63<I,8K,t+3o''@A^
+'^5eFQdY*Fo:%CG;5<;5h\82Zq$[S?X4O(Y2c#&W2/.A"G[C!.HeLu^&dl,D'ZR5$
+2bm2L_,i>*e!#.Ss4I6q[nh1e/,5?VlBjddIdWd4L9G3<)=pr<I>rC+fEokHDK>%0
+n5qomOhS<n:N]q)McnQ^"jE=]kcmdJ0B5o?(GT8`Urb6!r]ZMq]9)j4"'fgj_$HI$
+DNJS-46FSuOjj5k/=f!$C49F3O)nFJ0-N:G#jBk;K"VTic\L2d:%U8052Of8B8qW.
+^#tq'2^7/K/B^2k_Xl(H9gim-D]hsDHkYc,]D6@DfAO::DSDV?V0)=bHoM(@nD/IN
+hp)1!](p6XRiajZ(>$3B?Y[V;s7s4c1f%`-eq,:,q;$GdoBjte(S+pXO7Y/V5#[Ag
+jOk=?@lBs;HK\UUhY_Kp%026[B%m~>
+endstream
+endobj
+29 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im7
+/Width 253
+/Height 317
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 2942
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]"$b!)Y$q2&1Zg4ugcFjti;+\VXJOAO@^"XoJbO/C:cJ:L]PfFtk@qSs*rl56C
+i*ZJ0Tca0>LgtpNnG]!%G5\@B,(j78H0L!%fjfYA?KRU/]fc8:I.+>IB3u`fo=`bG
+`n??$hQ>BMW-jQ=hRQWpJ<fPb4iY9bab5K_G)Qg8OtD@_SEl<S1@Dp"q.]TjC$(c?
+=8dNbk:$7[mht"=m1PHLe)T+V6gt?"juq"JaYR6`cR37u'I7;ifX?d<`r,#gR?2r;
+`1CPshtMie&#<k"QQ+k-Jp!NMc[]rRY%+&j[!;0a2?pl1qf.SXDp:(f)6O?sePu)+
+meP<K0@*gnq=CN\?g2AJ&cQJCoY$[TKDV5u+.MR<D:oH^0DBnOC`be3BCdeAUOJZF
+-2_bA-[=b+ShBIQSaZDelTAY1<HrbVk/m=25+KR[AH%110CqSY@/ehK]iMERlc"j'
+=deuEq<-0!rbNdr[3LAG,M2H?^Rl6?[_JAUotS?7rHSo)bMSl],i5agr:V-&*`(7d
+48jN7=+rlp@@A:>Q1[8oX2,%RLd/\$?KZIh3DMD["7m]['Y_0S-lil5ZM>b$(joW\
+WDk#4Wohcu0^(C=k7Br+/"4fE6(lgcT1]8OY@]tjV*DY^q(^iNba4E5Vq3[g.(kH5
+1615`9'1C-Bd_LShU_UZc?C%QRo[bX9Db+UnA`fP'-.qHf"?o`p<7pH/_>9ghtOh;
+B8&9[qmic.0V?V<T3]cj/e%fmUA6nm"EmN23CFGFWohcu0\CNm9:M=(P?LB+r*KLC
+%(a%G/Ku2H\q0Z/N^;a[Hc<e5T?l:-1hZlFL&!['4%A7_[:<Y%"oj?G2_cD[UXJIt
+GLQXC]_4B^*hgG$Ri`#Ef=YT'+mHCMHgV^bhK2hS%^0Ak04]<P89uTR9J,;Gs2%1E
+r/3*S@c?8\be)1?2qatC/"$@noV96<RK*8sF:eHWM4XMdiK_WNo0#4Kc>6:[Fn"m[
+ep0Z02=nQ!$er2oLhNs_O`j.fHLi[&5('b`*XX"'g3bA4*dt_I!=9j^epOcJ7/0CG
+l/E<6lc`!e"2J!+(O6480/Uuh[,EJ3EVC0:Vfo;o.Dg*!<1/fo$ijXP4pEeCI(B%i
+^V%Gf8?$mDmpfkj6lJ+ae@bCVa=6YF^.C-LNd8$C5OsX"1%QLD;o?#*a9_:0H&aV1
+SO*LT(X7kk;>_$a=n?XE]S2A[lPS3#_L4#.1^#pX5'<7jGsfB2k0liBSk4*5dF76!
+`lO]4"?^*VDhp5]:`^<uZ?7Se\Kdmna__P,Hsf-fJE.3[E?."^bh'bEo,m5HXpN?/
+_iq,aic#1uX8/jMS*p11n`]HYo6KX[h)PuC`Ol1(h"d_^-_$Id_u$$SjK[oib\,G2
+N]eBj53J>0T+I@s%h7C6I+b7A3a(U/T6[_2DXW^HFe6.)I:#m9f\Rjp'qUe_=WN=T
+UpfI?jGrr=g!rY9!X0[5cQ6ELEXi6pR*Qd[k&Lq8+.CLp+FUE^$#KRh4J_cmHKIo;
+4BM3b%rFLYE;AkUI]l*Uo27Gi#^__:-UpjF(XDqc!krWj..E2k/L%pa.<H]KZf\`9
+o5\Z]:=pLP^^K:QJqYXbV&BMD2#iFp-=tulC]Lfm`Q_=12ud4M&D.Z@?W.&f?fAs:
+>m7:3DO!!K56Gh4^95(N$I.2%`ITZts"!SMk%0'Oi60@E3GHGN#/8U":oDjG"mo4e
+bR50^3:OoQ4AS0OI.98t$h36m*rFGgQ2V4k<T.rPZZ4nRCA[P[CFVGJ2V[9-f2Qug
+Pqrnt@>-(nG]>PWpd4S!7Y`WS^SbbZ_h#!H5<=1_H&?)SpcA#!_cN9S5SDEtkc;sh
+%:<n""*)qIKPLQcDa&\I!CMFA2Lhju7tRqJn;d"S1E]rS4Xq2<]>0K5f%$tqm])l3
+lCG-$rZ6tGc1VD;'_*mHe[,3W2RCX;/jY<5CjuX1$GO<g/'RN.CiJrCAA3$DJFFlI
+bJ">qI[ZnkVtlST%fA.Jbtmp[q&T6EI[\kCcgPQKiK_YPd5cM<G\-K,mg"MI14M,E
+%_S,'0E"/F^",">^#''`nC5[s4'4+#G]!%7(*L8qq4#\'meq's$#eDgZaQLg;t<$>
+e,2$ec)7?Y*eM(lGng$fI[Znk;t<$>-K`uUDt59_8=B:j*'V1E-SIpN'-bn6Ya:bR
+M9#o(De"5-ph>2G=#DW3K!=!t*s:BDr-;j<Fm4<I<U?<&:Io!T^tY6#01:[2L#'na
+qg1+3Ud4Drk2#hDd>8E%o-;%Ho-WT1:O^rO&B!3#467,]&@&A)aXRN%^3PEf"E.;p
+q`s'3L?<p2iD%Qa:\NB%dG_!K1\1Vt&A,JuE-PmaLGFpkot/2u495u1hpVF<UBADO
+D#WPm!08D>7>5r:a'inlc@>RINo&slMZ#U)OQ!<SqnL%oQJ(?mMZ%@@]^;uB[kR9)
+Iq/$YASLYX?[.-N!983ni<8,K1bTIci7jZ\de1Yi17ptc)rJ_a.TKi%)tW;f?0P)-
+k7I<^[kOGpduiM&HnJ,XH@>D\/D]O_bmsu]CgJ5mX86/plK3ARXbWeB#Hqo,>146m
+AJB"Q'ZO)GgGhRR%DIDh2a(Bgs02=tC&dc\?H-"=Bk..sEP#j)(quF6m@M@%kZb.[
+c;/ZpZ,gW\iMg.YO]gGb?(I;WCmJu*#3Ku@qQX7lcf=92DIPebW$f3:q/iL:lpg,k
+%:&TuL+tI`QU'+@rEt)"/=P_1LiiUCGOs!iIX+E5r"c`.7mQh22sfq??WUh15/D,k
+h;5Nb]#V_S54aQ>@naV1/DDtq_s>VA6c<lN+!=VMr",:YVtk'+DXc-Q1dB7B.F\2O
+5L&'pI[ZnkVtiDcR\/`?q.76BNok\LV0,PqfA"!Qk1M:p06lQo^WfF'O%[5U#/?X7
+pt,+`TbmYRZYeh@0l*R,3g%7j>N^J9$i9@F~>
+endstream
+endobj
+30 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im8
+/Width 180
+/Height 248
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 5679
+/Filter [/ASCII85Decode /DCTDecode]
+>>
+stream
+s4IA>!"M;*Ddm8XA:OX[!!*&R!(-_l"pP89"pbD;#RgtD#Rh1M#RCbI&.K'Y%1Nj\
+$k<^U%L`p[&ebrm&e>fr)B'G0,9e<U,:=id-RU8h-RU;A^]4`J!;HQ$!<FAEs24oc
+!!!!(!<E3%!<<*"z!!EH-!X8Z*#7(VC$P3:>!<WE*"9Jc4!sAZ0!cnAD!tbY9"X+L5
+5u@h"@3T]B'JbfE#8OL1,Jd:*iA26Yn0E%+nKgOZ;j*l\@roLE6mn1nZSiV!A9>`;
+iWpl`#mqLeKTnnpUpO1O<@AdVj7C4=jRd#+KpALB`RX)CAp/opVRFLqk4U`(=(c`4
+Q`%=5fB;lf86BPMLmY-NaOo_O.60t&BmGQ'WO^.(l1lei8m5tUMOLQVb1c.Ws4mYX
+!"An]!!iT+!!#4`>^]L,XR__n8k0S87iBrH'SMpo+mUI(D%2cXOl3a3N-&)_+9Yd*
+TablL#+f%DSYAJ6N[J%B!FRd++0OL5h2N.qm>)_#oYf.t1lB._5Wo+l)uu0PK53fU
+nF7XiaC:<==@+-ET&C=FP<s[ZHB]C>2IAeD0lRAI)K/<YqHL=X-Fm]A-'EKE@0/<@
+SAPQ?%:/ZA`]g;qa"5WGeAOVKUihPA*sHrgRsokfI[h?f/9M5Wp6RPV)Rg2]+9JnY
+Bim=[Jq$;2rr/8`#2fEYB)Nenqta+`)h7^XS*CUc!5GB1!.hWZ!3-pO8&tW.Qi73H
+rhsK0cnbPA+8bn1p`"_ZTpt<ZrrBg1rr@VZrrB&:^IQ?Drg3Tghu9Qdr?!-YqG6l*
+J,5k.l4O$r^SUr1J[bXZWYrQAa8Z()rW_9ZW+PuM+8bn1p`"_ZTpSqPbnJZlioU%q
+rrB?`rrDMKno4[6Q,&e4\9SKNa"dh-f`(q#rPg'A0LmG*jC"!8)\?E?[%<Cf^K%2Z
+b5t^/dN;TL/,D'Ok`r?PfBi%2q]DRZ3[^2rp$52F7^XrrObQM_BDB3E%mU:Ss3[?(
+q0f<u#$<1VLc$Xo*CnD40q\$>FY8-H/O.bHc_%*4\KBP-.pR;rX5.!9:K#)^Tnuj'
+cph_O^o,jB)ePH-pJmfV[$D>$:if-D]$kZdPb4:gUjTj7e'PVar*s`f;Nto*`A,-u
+Xu.,]>s!&ErosF(?3Pf(:-3j.B`*Rd`4R:caV(E><KIQmWAF^f2912t[Jp7&C:!f6
+c2Iq!rrD/\cgI,Yp`!Q>!1'ZM\m4.ND1DOgXT%I*It>$-!;UB9qk_X=d[kr>[I<p+
+ZhpTDrW_!S!9L6,m[#m-)diUFQE*6]>i4IVHi@3MronKRJ[PLXq.d85V9SuDfDbj4
+WmC+"0_.-7)-cE-Ih+#G0C:8;L\Y&gj;hoT,'tUk)TYoh"cl9>9F#S5AZsmU;l`<J
+48OqQW]4(HW(/1gT6C57.jH.1jS_+8+4X`"I8B-Uk]h.Ec_\h)Q-P6^GoY^A\sq;8
+O#0Y5nQn>k#S3jPS?#A`>%H5Ls3pH4ZY%IO2Jh'QB$^M,n+j;%c'pV-iue(n5L9=5
+Z>o\crr=%^YP?D8oaM*uo4S*Rn+j;%c'pV-fs>;:s46Z7ZY%IO2K=fUW#t4&!%lk`
+r4W+1Nb-i?B2AAYK-g?"BE-TPq6O\XRl5*9ZY%P`d-pe:B$Hf)a8T$KoD\fVm$rN2
+J&a>1r\LJN6U?n5fs>>kdI6n;B$Hf'CtZ.,ci;G^q6O\XS7DR!.L5eL!6]O\5;,7]
+R<AN0):SSYTZMY!fs>>ke*m+=B$Hf'CtZ.,ci;M`q6O\Y1&h6="8r0!jgul^QbW(7
+])Mbhl2L`[ct'mLCtZ.-s4-T6ZY%IO2Jh'QB$^M.n+j;&)#jTYJc:/ih33oCchQX.
+J&ZU1!2sQd?^irifs>>kfC/OAB$Hf'CtZ.,ci;A\q6Q$0jZrhG5P]3=a5uL^F"Y5f
+3e,X9))'7(2Jh'QBE-BJq6O\XRl5*9ZY%P`ddR"O5OtIsTDZ0/j7;sD3L=+CSNlBX
+%%$,$Rl5*9ZY0<en+j;%c'pV-fs>;:s3s%.!6TllJ+DENSkH`EiA^8kH@jiN[a,Y)
+FOn7Y.Q[f:'#.sqKi;cUpXX4N[H,YOZcoX-RFiA-7TB/nn*klqN;Yd!:\eata8=Kc
+^><eWSn.j$QDsdH]mmfak5@=&:\eatr^OY@p3FDJH'A52Vt'cZrpR=co]MW,jf3e@
+mpGP\H,!+"PQ"a`rrA1bg\m^^e"1+M!1'V^J%^?DmH4@-k"kefT>UQXqu5Gje"1+M
+!1'Va!9@qhrr?](s4'713Ta-5C7iQDfDE;=Dpt:grrA@ar'.lE^[:1^3Ta-5C7kJp
+^Migk^J9'<r`Z5irq69Z\"!$QR6Tf5Ih2!Tn,%CF:3i'&>,VB#Og!O<So<)LAH)Xq
+WVh7ZJ%P+1rAj"9q.cP>qq(`EhJ^l7AH)XqWW)tZC\Ic.B:JPVR6Tf5Iin,dme_8h
+cn9-IdV\*rFTT%ScdiPP/8&U'^CR=nnC'C1ef47rf)9+)oREq-niWuGNa2D3l)oO9
+eo]g+TCl[jr?V;^VHU+2kU7d<m;-?b]h=3L\gdD$6jg_i>^:@_X_C/S$uRLEW\17b
+<sIZ(DAHjJd@YuP>sgGuC565KUk8SJi4?/D<bkQ&'P:i#7]"((R((aX#l(hNHOdNk
+Oa59OhKlV/`dqWbR6mO"QgL%^Pj3]BhZmMqS?2oq7c2^_0,9Ghl>0g^hdg_)H"5sE
+BeQTk`tGVPW'_)O))tKWrW8]e.508Q-__h1JFn,Q+2$Lud!_LV0f6L<??g%(:J%;e
+%j`Jl.((Z--(GN+PP=&j=^8j(Fcdo&Vil<L5sRdb"^h$XN;MRgD#`,Uq6O\XRl5*9
+Z[dPRfDaU`o046SpW*5'^Z<gmSTFhXl4Ha,Sm8ZAV6lE>(+Bj(E[3cu@3Kat4tF[8
+foKASD0Me(Af0I8\E9ra,SC0`JAMFirUD%H4Zti*G>X1:F/D<G@snoTlJgU+'U]jp
+;4\@Aa"QccS(U;N.t__^CO=ep.q^]dM'@poGbL9iNBlY-Of1E>C)3BU`MUDVQ@!j_
+JkLI@[hP<m),7_6.ECgT2]a=eVeRZ_,T$0:b*Lqt8+g!&G7$\Cf8tFSgl=JUn2a'd
+oe<i`;A:1ZLQk1[\S@Hn[kutMVnB<qo',T%Ou/3Y(tN%ka/L=]qWPRrL^6$-'V7gt
+$&;lsRRj.a8s2k.7ZLnT5u`!'A_s-#_g`Y@H&Bi#gWo(aVh=:VQT3/:k8YdPj5MK8
+DFpMun3r)8%\UrgMHJEUaW&;6N!Bhli9YX[#@F5BMXi]<=UN+(ZU#MA!7&a"[K`4d
+"b7?_GL-<:mfr@8X^deYAlj5t0h)`dY!EfU=FeH#-#nBBdgi/;&k#&n7?8'2!M^PO
+;S2=J%+-8o8EcY=$C,$hB'?6h.pgn%F_p/>-:VW\;uqOrUHE&hIEE-knA(AOXELpU
+,cEjf=9Zmh*CduV^ttbR;t00TVooK)B$HhJrg(=mmf*9Tq!!:B5O(]3H:dmE=jdMI
+\hjko9!V-9F,"urTM[.7]F8Ta^D`Cc5QB1!EQtMig\k^p9J$*R.*9EI@4P9uae>*h
+:$G>X`@g!TGqRfAk!2>=Z&J68J]t#FT>K7Mf84W#:17?,UXC9hQ^61b?\XiL9\+gR
+8TXQb<&0XD@\nK6$?->e5+Jm%8Ks$_=uVeuiYeMpmYqFeaZRV^.F<LC@kS;@g17=&
+*0FO><JiJ,8<ORjPK9Z=HLFO.(V"0s"NeY0E%T<7jLc1j;!hVI]gDY/Pp;GP6"lfp
+5q5Kg77!UdG6]4Z.Y.3Zdl.h!!OqUFs3pH4<!TRD+EejoouoZaGK\7#2K03'>5nTW
+]DcI'VZ-5f!36pnkpPM^CJ*&Vo0KcdAnssWP<@2g3s"V9'ob-o((%Y#V7TV7fh+re
+VZgY.?9(ta8bSCh:0n(i1]PtjQMt*uOs$3QfksX0"L,pELX\),@%KNWkt5d+(h!W4
+_WG"!PYW!uUh88Wm_M0#JB[n<)\1a"0'^pO7MG+4&#A1K$h+[&fmSi]gF_gGY2Qrn
+!(;u>a@1@\$9#nuPVJ4=\Ph[NSrBV!O=XY3/]LNa2Ybmcl1"*3a.SYZL"nEr$q_:h
+70"Kj:G(jX$jdr-Mf:%Xlhfk9d6f<kd>1dua3dk1Y5@U=ZY%IO5QB:&q6O\XRl53r
+qHEn!gUmGtj/2hNrrB#7r0gFQY',jYJ&`>RjPJe&fP?s@s46Z7ZY%IO2Jh'QB$^M/
+n+j;%c'pZtr@NNdh>[I2n^@F;I"0Y(mdu_4cI(b"pu:"TS$2\UL:OX's3U61ZY%IO
+2Jh'QB$^M)n+j;%c("n8QG<.]rrAJ^l+anrlG`Mo8bhI^o&'@b/NunXrH?(`fs>>k
+ddR"<B$Hf'CtZ.,ci;J_q6O\Y!WN-m?i,%sbkuS?h]MM8rrA6SrcQN6jj3_]g3fCE
+p=g$tB$Hf0s4$N5ZY%IO2Jh'QB$^M-n+j;&!<3%qYPl)Jk'f?umuR=-IGU-9);73`
+rr=$C:Qor$!*uh\2Jh'QBE-QOq6O\XRl5*9ZY%P`fC/OAJ:H#!rnZK'592]WVu9`3
+rr>VT*:4eOrrA'*VocN"Y1RNZ2Jh'QBE-?Iq6O\XRl5*9ZY%P`dI6nH5Nut`!,h9$
+T8oE<j8Pi]nnC>6\_90Vrr=$C:Qp-SgL77$fs>;8Rm6r$n+j;%c'pV-fs>;:s3olt
+[Jp69GPoe-9E"D\!)bJ^dSIbB8!cI#MeVa"^[&<Hk09ARCtZ.-s4$N5ZY%IO2Jh'Q
+B)qr3V6Bj0^ZKups4)5KhOjIMqu%f<F0p42r]$49-L(NA@BOG"ZY%IO2JiEEn+j;%
+c'pV-fs?3Ydb"KSht'&Q2ttAk8AF66J":Z\fBlmLrrA'2VocWeD6VVMCtZ.,c'pV-
+s3U61ZY%IO2Jh'^5Nut`!,h9$T8o98j8Pi]GGLjcG)n8*`tm.bh1+$ms3^<2ZY%IO
+2Jh'QB$^M*n+j;%c'pV-i#hU!rrBNPr6NDXrTX=^<\M59:WGOeQN$sFM.uNuTBip(
+kPs$"q6O\XRl5*9ZY%P`eF34>B$Hf'E"DeKrrCfcrb(8grqQKnW>GK$:\1`4O"Pq&
+(=V@$hmV0QRm6r'n+j;%c'pV-fs>;:s46Z7ZY%IO3!]C6J*l(l!&O4+iunSa&<Tt]
+Q2^#/nHp_9X37.*`O,G"?hN._F(WbufC/OAB$Hf'CtZ.,ci;A\q6O\XS-FiH:\OV`
+O0;RD:LBqXfC?`"p$Ecq%h>^M`2%Mg:-f;eWd_fEmGjBN2tLq):U,r1B%#LDgR$N_
+8`WNmT<"Iqrr=RH_tir>qG)P;-I)Pj/#LA_oY:5tJ,:S;rr=RHa8,ABqG)P;-I)Pj
+/#L5[oY:5tJ,:S=s3['\b3?21I4tS`TDls=J'.#\rd?I!PFqirZ[^-^Yl9&(rf`uR
+ag6K>l*:590E.0-rlMKrb3?21I4tS`TDls=J'.#[rd?I!PFqirZ[^-^Z2T/)rf`uR
+ag6K>l*:590E.0-rlMKrb3?/0I4tS`TDls=J'.#\rd?I!PFqirZ[^-^Z2T/)rf`uR
+ag6K>l*1/80E.0-rlMMHdZf7(l*:590E.0-rlMKrb3?21I4tS`TDls=J'.#\-Cj_A
+bs1(JrrB?Pa7H%E8Hnb"]J#fIq-2njr'R0,P3)O<d[sA.]h_T$I]oa9ENe)od@^Hl~>
+endstream
+endobj
+31 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im9
+/Width 180
+/Height 248
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 12308
+/Filter [/ASCII85Decode /DCTDecode]
+>>
+stream
+s4IA>!"M;*Ddm8XA:OX[!!*&R!(-_l"pP89"pbD;#RgtD#Rh1M#RCbI&.K'Y%1Nj\
+$k<^U%L`p[&ebrm&e>fr)B'G0,9e<U,:=id-RU8h-RU;A^]4`J!;HQ$!<FAEs24oc
+!!!!(!<E3%!<<*"z!!EH-!X8Z*#7(VC$P3:>!<WE*"9Jc4!sAZ0!cnAD!tbY9"X+L5
+5u@h"@3T]B'JbfE#8OL1,Jd:*iA26Yn0E%+nKgOZ;j*l\@roLE6mn1nZSiV!A9>`;
+iWpl`#mqLeKTnnpUpO1O<@AdVj7C4=jRd#+KpALB`RX)CAp/opVRFLqk4U`(=(c`4
+Q`%=5fB;lf86BPMLmY-NaOo_O.60t&BmGQ'WO^.(l1lei8m5tUMOLQVb1c.Ws4mYX
+!"An]!!iT+!!#4`>^]L,XR__n8k0S87iBrH'SMpo+mUI(D%2cXOl3a3N-&)_+9Yd*
+TablL#+f%DSYAJ6N[J%B!FRd++0OL5h2N.qm>)_#oYf.t1lB._5Wo+l)uu0PK53fU
+nF7XiaC:<==@+-ET&C=FP<s[ZHB]C>2IAeD0lRAI)K/<YqHL=X-Fm]A-'EKE@0/<@
+SAPQ?%:/ZA`]g;qa"5WGeAOVKUihPA*sHrgRsokfI[h?f/9M5Wp6RPV)Rg2]+9JnY
+Bim=[Jq$;2rr/8`#2fEYB)Nenqta+`)h7^XS*CUc!5GB1!.hWZ!3-pO8&tW.Qi73H
+rhsK0cnbPA+8bn1p`"_ZTpt<ZrrBg1rr@VZrrB&:^IQ?Drg3Tghu9Qdr?!-YqG6l*
+J,5k.l4O$r^SUr1J[bXZWYrQAa8Z()rW_9ZW+PuM+8bn1p`"_ZTpSqPbnJZlioU%q
+rrB?`rrDMKno4[6Q,&e4\9SKNa"dh-f`(q#rPg'A0LmG*jC"!8)\?E?[%<Cf^K%2Z
+b5t^/dN;TL/,D'Ok`r?PfBi%2q]DRZ3[^2rp$52F7^XrrObQM_BDB3E%mU:Ss3[?(
+q0f<u#$<1VLc$Xo*CnD40q\$>FY8-H/O.bHc_%*4\KBP-.pR;rX5.!9:K#)^Tnuj'
+cph_O^o,jB)ePH-pJmfV[$D>$:if-D]$kZdPb4:gUjTj7e'PVar*s`f;Nto*`A,-u
+Xu.,]>s!&ErosF(?3Pf(:-3j.B`*Rd`4R:caV(E><KIQmWAF^f2912t[Jp7&C:!f6
+c2Iq!rrD/\cgI,Yp`!Q>!1'ZM\m4.ND1DOgXT%I*It>$-!;UB9qk_X=d[kr>[I<p+
+ZhpTDrW_!S!9L6,m[#m-)diUFQE*6]>i4IVHi@3MronKRJ[PLXq.d85V9SuDfDbj4
+WmC+"0_.-7)-cE-Ih+#G0C:8;L\Y&gj;hoT,'tUk)TYoh"cl9>9F#S5AZsmU;l`<J
+48OqQW]4(HW(/1gT6C57.jH.1jS_+8+4X`"I8B-Uk]h.Ec_\h)Q-P6^GoY^A\sq;8
+O#0Y5nQn>k#S3jPS?#A`>%H5Ls3pH4ZY%IO2Jh'QB$^M,n+j;%c'pV-iue(n5L9=5
+Z>o\crr=%^YP?D8oaM*uo4S*Rn+j;%c'pV-fs>;:s46Z7ZY%IO2K=fUW#t4&!%lk`
+r4W+1Nb-i?B2AAYK-g?"BE-TPq6O\XRl5*9ZY%P`d-pe:B$Hf)a8T$KoD\fVm$rN2
+J&a>1r\LJN6U?n5fs>>kdI6n;B$Hf'CtZ.,ci;G^q6O\XS7DR!.L5eL!6]O\5;,7]
+R<AN0):SSYTZMY!fs>>ke*m+=B$Hf'CtZ.,ci;M`q6O\Y1&h6="8r0!jgul^QbW(7
+])Mbhl2L`[ct'mLCtZ.-s4-T6ZY%IO2Jh'QB$^M.n+j;&)#jTYJc:/ih33oCchQX.
+J&ZU1!2sQd?^irifs>>kfC/OAB$Hf'CtZ.,ci;A\q6Q$0jZrhG5P]3=a5uL^F"Y5f
+3e,X9))'7(2Jh'QBE-BJq6O\XRl5*9ZY%P`ddR"O5OtIsTDZ0/j7;sD3L=+CSNlBX
+%%$,$Rl5*9ZY0<en+j;%c'pV-fs>;:s3s%.!6TllJ+DENSkH`EiA^8kH@jiN[a,Y)
+FOn7Y.Q[f:'#.sqKi;cUpXX4N[H,YOZcoX-RFiA-7TB/nn*klqN;Yd!:\eata8=Kc
+^><eWSn.j$QDsdH]mmfak5@=&:\eatr^OY@p3FDJH'A52Vt'cZrpR=co]MW,jf3e@
+mpGP\H,!+"PQ"a`rrA1bg\m^^e"1+M!1'V^J%^?DmH4@-k"kefT>UQXqu5Gje"1+M
+!1'Va!9@qhrr?](s4'713Ta-5C7iQDfDE;=Dpt:grrA@ar'.lE^[:1^3Ta-5C7kJp
+^Migk^J9'<r`Z5irq69Z\"!$QR6Tf5Ih2!Tn,%CF:3i'&>,VB#Og!O<So<)LAH)Xq
+WVh7ZJ%P+1rAj"9q.cP>qq(`EhJ^l7AH)XqWW)tZC\Ic.B:JPVR6Tf5Iin,dme_8h
+cn9-IdV\*rFTT%ScdiPP/8&U'^CR=nnC'C1ef47rf)9+)oREq-niWuGNa2D3l)oO9
+eo]g+TCl[jr?V;^VHU+2kU7d<m;-?b]h=3L\gdD$6jg_i>^:@_X_C/S$uRLEW\17b
+<sIZ(DAHjJd@YuP>sgGuC565KUk8SJi4?/D<bkQ&'P:i#7]"((R((aX#l(hNHOdNk
+Oa59OhKlV/`dqWbR6mO"QgL%^Pj3]BhZmMqS?2oq7c2^_0,9Ghl>0g^hdg_)H"5sE
+BeQTk`tGVPW'_)O))tKWrW8]e.508Q-__h1JFn,Q+2$Lud!_LV1$RupPLSX0UXJ1+
+nY!'8pZ5_PYS7jS0[:\L8E":DSk+r>&BVairX7aMpgKXVs4?`8ZY%IO2Jh'QJ:H#!
+rnZK'592]Wa8JQDjO/OKF8sVN\mo%'q0q!LKP&c2\V:ZOlK"b)_GmbMLTEf-\/i00
+%,c]s\5c,Z=,uAoiF%if&HS:(pKK9g#ijAAXfbLUgKdt;nn;Da%BlMGW3JoFIr=hL
+h9'I0[/fa!$2:?sl>\#jd!](c&oo]\+m\h4V0%$.L8JN<hqT/m]Rcs/jB!L4Q$C%Z
+5uK<?+[SUPCH48!W8s&dCnW/@+9XGWI4&^nIsreA*giiUr]Ip.BuHuiI0QSMe\Bt4
+S+X_'A_!n7g>H4>\5K^=(L;jtd/*.EJB,PSUMscVh-6L@6PJ&):UC*KTBRHZ@_S/1
+rr=WOrrD\OrrDaiQg&8Bo$q[Y!(cSY!+d%]/R/3XXoACc*WH-+UHee+mTu3]rr=WO
+rrD\OrrDaiQg&8Bo$q[Y!(cSY!+d%]/R/3XXoACc*WH-+UFXdC^ZDKQrfQ+;atioI
+>Q.g.rrD:(rrDD\2l3R)b>l=U,JX2AAU7Ohr3]c/!7Et/!80hKV5o*h<PSJW^\sC/
+oX/W5C:F3CUj)h=ZAdaL+6b7SF8['OWO7/(jfe3n-3!]>!3$djkpPG\2p3XqrYi7Z
+'MbcMG-;"B3!8Jf2```baOP"u]@XK@s3g7srg=D;dFh_b8T7j"_MjAT<EtX1<b2!*
+3cq5"L>Q&:/$I>s74#$Z$#Kaj!l5JNq%]?K<Lln0j0`jF-eBTL@+J23Q3MT^!\*DV
+8:nH*%ruGOmu;\?0eAY2FSMFMr,$tG"tN1<hPQj1Vi<k033IYK5-W5._\cMoU5km'
+TTnG-&lDb2M\B:C!l8rYI:-d\=@<IPeJY&WSs)cG7mrVm?VNg:>'@#k`UBum_]7u\
+*h=#7RL&!T&aCoZ:U8EN'Y;X)e)(D`8#[6^E`O)6bK_A1c]^RQS5m%k;HQl#$$Wut
+OeP;SWD[;kC51SqHs\MY%dmV7/#hX=KM?9f+G(0J=-394R.:MQ&eKJk;#',[NH<^H
+>9JKenRV`g0/l_/%*Q1HXin+d`8rSj[ZLR`i`X%EC/cZ+.D<K!=OHto\nD&lmC"fd
+&i_hS,]OW2TG2ht<Fn"M5WKjpp@5sC98M\saW!?S8Cdd2:VaeHR+-cXYpI)pA&R_:
+8#%3g,=bWIJ1)e5pqFpkgZOCqIJQ*d!PS-_dg\TDhp^aaL:oTGC@p7&*0S?V'?ZJ0
+/J'tjH1GDYPK/RJ>+/s7G3?cjPP`[%PnoVCcd_i!BD-^ggC^"F'(K-O05@^^dZ9(4
+5ZcD@qaH>&m=HqD=+VciGYH2U<#q?WaD>(SpGp&Sl"g;!DX[CnNgoppriBIVUn<Zh
+D_FJU:$&<OmFKjt(C_\6TErW*midM/+Q>cYV(;DHfe)+u'$9uci!rXE;H=/FN?Mh5
+*jGjH;OhD)h)#)\lIO=u,Z.3IXhUNGjEOocZtbNhZcl`VX!jB^e*+j:d6ha@IZi:A
+^5&XiA1"83T*"<KZ48OlU=\:K@@c2bFKe$2W%GAkb%#+^#T+%D&tk,ba)>e'HV;Q:
+>FTn9ImD0pi1@/RIMMY)dP`0FX+D[d]lS*$`!J4f`?C=`IX?$_+k2_qe5Li/M6<TR
+]=>>9Gf%<32o8NEKJL&MAh3R'^j&q`oE>WU-.=\3Ks:5g)L3QdnLT)3Ds:+F*1N#u
+9*-X@25(3dl?[i^a)N-DAf7@"7jfDn`hc$[:LIE0O+RANk!KTcbYq'-P9b%I^hpUh
+J'&j^.3-aVdNTTsRtLSs&G5je@[J1>D3E!*%.pt?qSkm"n5Gllf;=&teaLZ9PVi`F
+#)?Y<j-P>Y]s`Z*"O[S/@V^S@BYKoH*P!2h[2&Msi._5a:j3%Rk09Curg(=mmf*9T
+q!#Q-5O(];!%*p-l]_90_u:-r?NP'Rc.<UB"d>S0k9KAn:^F8R:S&S69r=;[`U/>>
+&@s(AW_$nf7ctodch!0((;q-dcm=t>SL(h8%6AF,a)3<BAn"ec[uC5q2%h0@^BkVA
+TE!L/H<-N4am!0dfq_Hd)UXI'PE^(l?(5:e!-r]O/6LS>RZ5h]5+^`kPpH%!6E'=G
+O]jXJiW*'7HkWAJ*XMn$<JkLb<(d'43>hg3PIUb0:1J:?(0fef(\CmB\G1>q$UW,\
+Y5ufXeZGr;V_"]%-<Ur7V3f\D!X]-$6WT9,rWaN^D..E?:D>B#QB#h57<0jho-=!J
+](0`uhmOqTWtGt_C.><FA(6[!XAt'RbA%_pGZ/?dQM))[Xj.4I\`?Br=H`SBP$!l?
+H>?Duk1UHeJ1=6E<[c2"AH>:R,ZISLNnK`L,V$X+W\^l\N^[J@R\7+LItSoMg6lR,
+")[]dKBhP]02K%aET?e)Zj?3'AA8g,^kZ=J65X`NGoiI)n)$A0fC'p;2.^0+W^tQq
+aQ.A\5m.ss?]/JW%`;_?24P>d["5bZ)1e2]e:_\[;P\:[`HT:O!!#%hL0e]L^d%(!
+rr?s*q4E\6qr@[O?[&<<L30UN`3X`$1f>]jf=<6V7REq?qsnV;D-D/X_t=qTF/Pu&
+,V;76?7X#>Ac[2bd=!8">5$\be#fbc#R/Gtmf@P6'FO,K;Tf[sck!E2MBpdaW&.sV
+G.$7#U9QNF%D\,fE<HmFci;AZ;F@NS4iHj2ZE1@1MBbq1&JuN+Lp*d]e#kIYCG+"\
+[gOHnU0/Z3kcOugMJB&"E8bNEIb&%8E@p+-Z$B@[2\M;h>#=H]PZ;$Y"4F5FQ1';U
+'38.7^QB?g*b_3o/3%Y05V$3&QdJK50<E+9,[XX&RD(Aj"H9<0Gb5<HT^TU%WB7%Z
+[q+X,E]hpQ<.KRnrn'*,l%rY6I+i"`3="/a+Jr"5=.n\VS7u9mHXN.P7>rL'l;^r,
+'iEeDA%aUr/F:Lt!hl%"*_L[21e--sf\bGt"h@?!A\+2OO,<qA,FYg><hn-/'gOu"
+NYlBSs3^<2ZY%IP"9+V$p?qq\RJ?$]]g(f$p\IJVk=>+@f#d$S81lpWXOgN(*SLW=
+3aPN9T]O:P@iYOVC2hVSZq%iMBmRYU/!D7KL$KnJ=IEBVIm)*bq[X*)f1==CKF_J^
+]s(Y5NT(!fioD#c66e?OVd:r]pi!(,NJicK(+hXWj>E!Z_]tQT%#ClX:Tt]%,`#da
+Zsm?.6qIdUi)lY=pO%EAKS$kCs3g<HBo<?e7*Ng_dnZi.%uPDGY0&Y0;5o00PL56K
+i6lQJ\1K]ZDaDICqp%)-R'$G]q#XD=UF@8nJ<foDam$JKfX>VLZY%IO2LkbUn+j;%
+c2mqF94.R?J'@h4hqoOK,6%Y,8cEkXRH:\'q-"Y./Fb=2a:NY,.stF(,IJ5XfOk)R
+paUI[02aImq\=kT10btNV1X@P)Nh.JEq&h>Z/&_h=n728<%f1c[eB+hjJgIXrp;-#
+BVT(Pb:E4VUb/24oK`tcUd`PA;H^!;."q4uc5>9RguQ%W8Bo58fbHKf(aoMZp%ZVl
+2AF*r@PS#Z2@4(C;b85W1<<%+GtJF'Mt:]Hs4$GE+u,fZoscE.!;3II/-#^".)ZfO
+[m7=X(KRlNP#dSUNdVKa,VN1,I5o2GG73=(7co=UmTJS5fK]`R-s8f%_hAOk@J4Ep
+EV>U0c+6[?R#BSS4FmJF#1=c6\DMGJo4H7:2Jh(HeaN=?B)qr3V6Bj0^ZKu+?gj'P
+OaZ)LIMpQ2\>\*bY_r2?<s%CNb9J$dIp/;AnU)''a*tO-X0%<OlKWQT!reQTE2@.,
+UalWX9/>,W'H:HI1k^`5e8M(k\OMh$,"o1;!.'O$@OY6b_i'Alf,B.e#kk,<b@mo/
+MNFQ=C.f+5hAEAj/<empHmLCN,`0?"\;8NlYTQht8K7EHP3q1P;WH2$;F^qO`fZ/J
+J$IS$6WS_=WS4JGFF-"k\SH>tBUHsN9DbtiKo'DFnHZfKs46SG1SVuBDgN2A$JWE0
+A6(2HUNR=S)%2=$RdG_2h5P8nGklD8ETX\%#?7OKf=!f_JjkL)mi3*CmR#8TqDet5
+0dK8%<GJmRMiRp)C44;]U7+)pR*Qn8@q.h1,rB![eq\+I9MS`cLPMgQqMle!6:WBd
+%6@SJ*XFn<GGa6MH*_/`fC/OAJ:H#!rnZK'592]WVu9`3rr>VT*9c)j[`RX3+b+CX
+gP`\M$&QAL=6hdZ*,<**jh5V,CS9G+W>'D02:AR<&)K/]A%4YI&B^N@gi`,+284cb
+@agu/6)7'\;K(eh=uK!d2I7(IC!_p!EJAcKKLiQ*Jr`a`>9o2I=\W2=POR#.iWWPP
+o\Y)dCnjbUjH@f!oifX0E]Fl0mK*)$^--H<-C_!I067boUjL9%W63(Y(.i]hN_9n#
+Q,S5=fbL25A.jatDF:%rV;+:14#Dn18n+p!^f77q71@R*EFHJr;iC&RrrBZ7r4[IV
+d-\rLfW;sJL1q>*N3dqs=Vc-KV)AgKhg?:e#pb+;Q'"r(=&ZV330s:'K,AHmX"W$M
+'h"(TX[,9L1%>.=YJlAh$:aU-UZ.\o3VNjlILD.E[>NKU3.;Qe*aUp)1lP`)[rs%q
+37"ThV<RqjCAL7=;QIs8rS.$[cg^YKgfm3hW07RaE[8JETkMMhYPP=&I)]r;B^JgN
+.fT!/Q-&IB2^?bB34<YVZiAGAq7o5ZC]=BPn+iT9S,;7FUgN\,5L-ggI'NN>I(O.i
+F"E8f0,<K20*P^b:3l2'X&2K0mtS)=YIq"&=[<a;<tu'8&H#O-XN,@NnfukUkEB+4
+AQr+j>HhRZN41Lukf8dP!3X"L?[?nNr4pnO&h%4PMQt4-2%5^^Y:7k5*qZ/`\]*E"
+;+-PJ:?=)N=J['pk5c0@cG6pcrIO3!NRL@p3gmAmj0Y+4(bAL'E6(A<NK57m60LcG
+-MQh`!)KT`pl,eJIm..&f\eiJ27TKnQ5E$;LZ*(MADKBi?D6KFOF;&#r+G!UPd>/B
+iZs[(r<N+nOVAFnC2b>o?Al@&?hJL?dd6MMY,i0@/]<tW)*Y:_7]G\XN$fA5ae<$h
+p[?-=Z'SR<S*TT7*!@rj,*,Ucn1@4B*u?<WFJi&qM/FM_9ZUNuR8ss5BX*e/M5j&#
+q,b9nB6Ga5&hbHo8`B1.1^n'<BBm6k0c0d5qBYR.kqB+82<.J>L\q\:qCut?,Udn"
+Y>e"h_jDuAQ?j+W%;O[IN5BciUX5),OeXIP:^$uY&&n6HN<an.?u*7$A"HgTON@ja
+3CKS_<re:U<,tI`<jc<rDE#DTaJ^\s:fliST@]F!2LkbUht4>V!4R1Mcc8]Wnc&Se
+0>#Y._`C#K;Vf!t#:WB;_L'G]EFHq:C21b!NMC":W#PGX"q?U?QJrEV?BDP'/a:4f
+aPoMN9'V@.[1<s%YRBsKR(RV.$l&Xj+sK<q)nj(MS9eWm-(ECuG2X]oWdgLQ@(SLk
+0%gu8]8CBg;QXn4?].K_:Qr,u'poIWM8^U/ar0UpNq,i(<_1c80?k^s5Gl(0p-E1U
+Ku2QfO$_#k&@KH?QR[GE*`hD/.d=NjM?2VC/D=d#dc*j%VM`f8UlLcP1-Agp^c\&s
+l,\:H;ra3kBf!TkNCBV&J#c!PO=[<hDGZ)KP?*Xk#4"Q@?<BEfJK\a;?+%o_8QFTB
+i?74Kp6iG?3rD.?MF25DZuNtlX6H@g-.%rj,SY:8a%cBs<]efDs4$J#>?kFN,SS=j
+,`PWb65Vj]W9R$b?+BW-]hUW^e*Di/o&=,D-5@MOi+kecMUrVP0p)euLrFd2.SCer
+*[d&G47$sL/^WJBaW&Yc&o^1FQhHh^m6s1)F74ZTSKO)@A"/%@i[NX_l8Zc&WUNHj
+[iNd^h+69/1M4n$2K03'>5nTW]DcI+s4)5KhOjIMqu%f<F/*D)/3[4CqS[.<4k8Q3
+7#_j1rF4lhl7VA7<JK?en\L@QH<aOD<Eg8nN9S=;SJ3ej=pg=EPe.\snBgk'J1n7C
+Z+;j0lstes(DJXKlmX@U,n)8=^Y@lD:J=N!N@bOpXb%F'Jh)[]3LM-%/;W1"&302i
+;X;c#p;*&Q"n\#!%AAAESgb[kQ;4*[X8Ucf;pXHr1d+SD&_^sN0Ll;BXOD2e1guq"
+#CrSU2o<<2cue"XOi7!t@62ET(fjF-7H@u*Ql8rPM8WJ*e9&jCr>];CUs,eX%1hmW
+N-kqN+Su=VnYi<:Cb<Jj>IPe%Dd23Q8I,_p`(`-7C^jsS[D@SH'KaGbDcSS`pqnM:
+>(r?):`>A(@A!SNn+j;%c'pV-fs?3Ydb"KSht'&Q2ttAk8AF66J":Z\fBHUF(Cd'@
+$OLThDJsg@bsrWMZ#TZVNZ8RfLp%m!ph9BX@$^(4E$:MnAs$2K+WXg-V^T^h_#FD:
+>5VY\eoCMR/QOkYMF[<UM2MT^`(Ztq+pP-F8H/Z8Dn[Z9/ug6V\uVjLOn4at(am7*
+-&>M(!0XWgT.D\+(M3r&8%LFTnp))"USgpT]h-."-+\G]FgnrB"2\tO-Xs2'^aY/*
+@EDU1j=#M<,4YJ[_3&;g$$pnBM53S1e2&9Hi*IO-iTj@%&Sii\T2X8mp?mg^J0M1o
+-UG`uqcmD)4&ZcEoZYo<<ph;d)*#ir;3)kEEfBNaKg\>U+,cIa9J_rHqSGlCX@XC_
+U9-F9-rBjC=FE2!>HTMG]gtP!3K;jOk++_LD>W@e8X<S8OfFH"_R6Q^i2V65&3FP)
+d-e>>>f@]"jgiI]9'Y2g"W</U!.N6/U=7jMf":RbI9:feOFL'U+5["t^8k')Coc3k
+-!3UBE+PIsG,YSm;cs,'m;cBf*rGZOgO3^nT3@n+;>i0XIs9!'XT77=0:Ok9ft]i:
+C]=BPn+iT9Qi#hBUgJ>AT8%G^&j(BO\RQB,Osl%?l[#NKbZp"m^N[SSVR.YL;P+KC
+5QB-s+s/JIVs2G[AWbcj,%Jjn^CrE16r=o^o`j>kb6'o)KdE!,\=V5S)$D+bpk[J=
+TFqAMY5Gn`eD@\s8V4t9@^b7`DW8*b3F*e-8Q40$,7,Ai&dWB76duVIqQ">f=1:5Y
+0VOUl25_WDTq\,%rUF*P5GW,[l?^)iV[a\+Id`Ue@_Z]<39'Nu/;9%(ZrN*I"UJed
+:,3;OG@(iO,93ZJ,;G=K==@:m=t(2c"9<m#pVP"HL$p%QV@lCH>)\9qan8K27RV,+
+qF@N[EncoP-Mau[ci;G^q6O\XRl5*@+7uu@!4R1Mcblk0bBNqnP2P"b&drikkNao7
+[h,6>.c8F5%3d1/cn-K2#k&?YDkgNWNo3I;(LJ9$*3c0":*&ZT%A*-'GU%VRZD>9R
+S@pgnHFhWddXX&kHftFXlL7TJ7j*/<(*bTQZ>tgY;_,l99u[&o\"\t2pu9_:c"?+t
+9eXnG(k>82V0L!j=Me%1,KGNZgGJISY:0Ju<+LcD$51)bB!91gYf'p*go6b5aW[5l
+@;Zt66V;d2l95\`0X+3"/5XB8VPV8mn>p[m.1q6(Qdpq^K7#3H6bP5?H)Ln0i]T;2
+\GlP!'*>HT1%JXX&tfcN4&>umgh+'f8>[sCPd7Z?0$+$].HXYf1F_tB`60BcI4,B(
+pgk06YAH'eDQ.[tI5o+WNd*(V(kjfIEBA?a$`-Do!-kfUUhM'=M>-.)r#nF-Wk54/
+*V2odK^lN@/<_?"#"DTB^b[aNTHGb-'bq^7j]kAt[l13(ro)O`mK$cF[6`0e8a:b2
+32F#4&#mZ]Db`);i>]HqY04XW-JRmHoDd>/M(6-Z(^pg`!_T[$U;%'J7f"eR[FO4i
+UsPG#B:1nL*CtlEP]e#p$W%0C/(`Ma1M4n$3!]C6J*l(l!&O5@IU%<';rq`n!%*^C
+kl1W_r>ObPrDI'LHt8VL60\B1Q^[J`J/0)Ki7Od8MW?Y>r,Yd-P\DD584'H\.e*=_
+Al6K_C"g',.!8":"C5Iq@$A6eX-Nl<KO`(5!fXt00=/>A3e.1[lZ$+n;i.2,l#LFD
+@1%d2)!+-pc[uG]GNE.$_O)N_*F`f@9K1oT1F)Bj4I%>F+(gGLO[2Ss2p;n[+d$0_
+9"GmMS`EYSXXI]A(M%*Nl43d_[]KrLqO3_MP!gE=f@Noj3CkE9j=<"4WeTduqjNMW
+Fo%iOB7?.QT;P8J/;&cn<W1mS`S5dlQKbCd9srVNCFON3AQX!cZCl+.7UX`E^o;%J
+>bJT2mgp';i52ej*4W!*OoX"dNCR5qp6W5P4i"Sfc5;_-9drWh*0P*V[c1t)ND2@O
+c"heCdn_ju7h`.3FC%]=f5p0hTmA+18r\f[HCQjU(Meh=%Ih@W(sbNPP])qc5*Lre
+J*C%`LXl$J".O<'qlP*EL\XoQ[PeAOlSibImER]F1K=e[71[Ae^E>GhVgSNqm^@;b
+DV#(^%V;')&q85/V%op6fH1CbYfl-Xl&XZ<l?Z-+F)F1Mg_:eO@..%GgFDpN9;l?[
+#`Zd-87&\S_8E_hWMq"=EShjUQO)'InoG<jBU!U0po9&34:1k(I+c;"l"g;!DX[Cn
+SIb;DEW%3l(8BN19hM&6+6<h`Fdknt!`,t')/TQUj]rlAQ((U95#dl+J2s'i=>!t-
+m<"kmP%Km<^s]T?/8il)jmgF""`;b+?2".q(`<O1D.KnBAp?b@aC+E*b8aAH*9k>J
+AlV[>F=M7M9%C<E+ca`>M3ZV:,SI;Wn<uF%5U1_XW9ShWs4?Yd)dP.eZO?W]DQ>0T
+0C_l2pL=1'p)"_F8^jDaPAU;W)UB\p)jK&CAWu%LnPkf;YVj)IAa@RKcqJns-&mJ<
+6r,$6M-a&kmR"\,[2:R^2HS@'"imV8KSg@$'6<(>8:a&3QKmp:5co"FhTk!-P7$h+
+<=\*f.UC*T,@rI&EN19Zn])P1CDs\!"-@hYP=dKYbgpdF1ig4M)of-D1K4pnWBT]Q
+2i]rYg+/8:;.!&K=NK-q01%D\+"'S@bJM""1fMTnLO+-`7;qF0rToT^236d4f8o=.
+q+&!6RngD9G@94%Q9""`gpC$8KDnK.)dp>Yd-pe:B$HhMM>C$Aq>QGY<T?k^V)[)s
+_7C0>2O!7r\2O)MIDXek*5,RO),h/e,N+GUHMHEh2tL)):5$WR\n$s"[h>u(i<0$*
+BeBW%/brBSd^?!]idsth1=U<SdJhcM>FA:'5ueVT:tDMUr3IKjAL)c%BaTN@Hu<NY
+?8S[eLk5)7\t!d<k(-qi(!`%Tm4>_a_fK,73$[h">ge(A>=c"&]$hlR_5/T*h\ZH<
+poU$A-U7XYP^gj?Z2T/)rf`uRag6K>l*:590E.0-rlMB)r8W??Q:UGNYd/RsNUGVf
+8fun%`n_L'=q/cqI2F4.=&"bIl$r>qrrDaeS,QJ`O7VUcoUPp]p._%U=&"JAl$r>q
+rrDaeS,QJ`O7VUcoUPp]p._%U=&"bIl$r>qrrDaeS,QJ`L\'b[oUPp]p._%U=&"bI
+l$r>qrrDaeS,QJ`O7VUcoUPp]p._%U=&"JAl$r>qrrDaeTE!?(J'.#\rd?I!PFqir
+Z[^-^Z2T/)rf`uRag6K>l*2S*oY&L6hWOn=Z@'^aU;]\-oY%mjSFlV]j:D/UTmi0d
+qGPb6;"VFs;tkaEWTnK,g8E>js4I~>
+endstream
+endobj
+33 0 obj
+<<
+/Length 386
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:ebtc/1&;9M$$6PI![beD4gDlo;i.ga'm3/Su)Pe(pVNf-AN`1BpOK`;1[6$1q
+I^@d!jNW7h1,KI\,'"8JOTn6B*/VJ*Z<UN8*BTaNc0i0+cX5>BT/MN-`.ZA\gSJO=
+ml5@f_uq1lk$k8[KF#OsBg=094!o1cT&6bgR8qEmpWj8U0#9P\K?MU$@%@K*8kj:<
+ZCOaR+BW/5D0+LaGp,U9)1oNB=8nejdQqPSb#r7VgM5?I]-]2P7:Fa@qf[DSlbaj[
+p>a"Z>Eot)"pC&/3#Nq$=:1.EbdanUcKVf4MEl*sjute"j$?[sM0/_#Kr"JE`D&]s
+B.,Zp7OW^iT6^)%HQVkolaO;d%=/XlR]kN)3jDAuT*)9X!<@ftKc'~>
+endstream
+endobj
+34 0 obj
+<<
+/ProcSet [/PDF /Text /ImageB ]
+/Font <<
+/T9 13 0 R
+>>
+/XObject <<
+/Im6 28 0 R
+/Im7 29 0 R
+/Im8 30 0 R
+/Im9 31 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+36 0 obj
+<<
+/Length 3805
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XEL9p=<k%__V?khE\Lg)Z=PT%eX/V6Yli`&4NnmQJWHD/3=@>a!k_c`^[g+<\OE
+BBQKj.OA4C#X1@5!5GW'5-9]hFhcYe78HP58+uBaSoX]].\@o5^H1.=pUe%5T>.E'
+h.WE^p"eWZI<D((n?Dc\0%K2b'Lg/^?2\rUcqj("PpK5&rSrD*H6+GTE$(7%If%BK
+p!=\VVXN;q:TG*K=Xo]&pGst`Woq?9D]Y4LZ6q1uUHNT78+*pj3r>l3it6cFQsn_[
+#?jsScLOMQ[mPY<B@BP$YQSmnI)*3U^4,nOa(I1*esL[XeDFGZ*;\JfZ!Fj<l/=k-
+J)/(8SDuKG"e>N;/6KarV.*^$_4_=MJ*7,)/"-rA'KJHCSXQO'F!,3tptlL7+Y%B>
+EPq/cT4if5T%\sr/ceS[!^7U(f;@<MQ<i7KX-VUWn5:d%OUM&dgR42t<o&L_@kAlS
+YslU+ZD^RZe/t-og^-4W'd5rm-jgj$l)+hJVZY5ts5*2[B0iYQciJ)@G3i:[;WT?[
+pI'l>RFXb\qlOfJS%^]NZ1$DD1QV0B%9HCuOTjV*'%5p$Nk3/d,0c.Z0?:,/l88)"
+[UtF:[<MH+??tt!i_Z-5a2*_0^C*#$:#mnS2[Xg1d-F"'KQN`/j9lGR%`%Kf$1NGQ
+c;7CK`^2WuU4VK8i,mmjGc`Zk(O%Co(mGDcNm.Y*<7,\=O\/fp56J[9YI:Vmi0N9C
+?o6]'GHkQGZ#S/[k-[lC?fHlLs#a9$I8a@548rpape-Coi.SI8<7OHmF/^A,5E-5M
+(X.k'#,"L)JCBXfXrjMQ@tCm4;$Ds(A,g^eVrlW`+1e*kE+5n/GV#J^:Y<T=m'd!u
+aZ#AR-i>G(UZj0_6=T2b#l)+.B2sSXKFI>*CJb@eP[O"I'IHa2%'jBZaf'Y&-^VD^
+8KO>.qW!#U#oujd,Rl=-<4S?5bEEO>`3c:p*OPS^cUd:NplNm--.YCRMZcBhhI7?=
+3l@R]pGU9@Cgjr9[GZb*#g]2"4K209b+7QA/C!6RRhO*16=4%rrV28Dn^/InP>L1T
+ZfP"(SZ]dHM51LnAETX5Q%SYqCe4D!+U=;=',*?@$V\&m\2o?''*@7PN_M[-#(uWV
+TNsdk&m,L4W*!\Yf#D(B,WHaLX_a"\?H?Bg#oFr_mG+SN>:E#J@C:Gt2MOlPKW1C(
+>?%r>lmbP%[3[4O1;-9)[peA?IfeA=)%00BBQ[s7.OaT0gacV9/5,KD))hL3Qfa6P
+WsZ#7-8a\$eYRkdj%`?hg!A.hn@;U`MU)gsJ^TY:p9p_IF'o:l6!_N!:[0;22Y'`k
+fkApl87K:aPa$3boGh6N:_*+R\#$e,f+bL,jr/om;T&6prk",Zir6C^DVCE^hc]*C
+goL7.n',HW-LSNm4>C>/S>rIXij"GJh,5^N6OkUhC%Qt26t)hYLoNcUhS"r2G4q<G
+.M;1gpI!ECEfX@3a[or.qL<gc0:`X`"Z_]N3$C-8qZ)m2:20%:T3RVS_-)rlcif]%
+5e=VcQP\V6ZJA12[d.\d#2&&]ADS:PgpFFG4V;D5kYHZ[dKuK&6Or4D%J0dLJ6n"2
+:Xjs)Alh^JniS'+Vu=u7G+:#,)t5LQAb^*r&A1PfT\Ms)R>*URl#6_;B-JO"4/1b;
++:3GZ)OO>T4<Or`h@n>:#[Eb9iG-_^qY`l48V4q-MnaS\@;M)a(WN>Iign;I@IB=r
+]Uo$<i9R\C;F;pHZg(.9P?9`oL6d,<:#5Ck6E!eE=iMFe[E'Mn2LjG3"rlEP`=OUE
+0Rb1>6!sD$g,kS<-,EWcU\I`pmg+cHBZN)JHS2n?O`n8FIH!3GfoT_Gor/g&H`$*e
+h.S<IGS;XM]&4RU*e$WmTnjP=1tMf[T?!&R(KCMaf`<rjb9b="F7SlnXD,CJcR(g+
+pu8RPM;ZRP.(Vt>dAIbT_&W*+R_AO*2r0I_pl**gco-,LSo?Z$rUk<MQ398i0TEX8
+[h#W"iTW3V7.\J]f@bn^%P3mI:`9;h<bS)rOM2N]EpJ7_L7sn`m+@tP\,lFFCeNKJ
+etNnl[=')_PN2>]i6\_in2$410N0HF/\;@q)FB.^HYVl6D\[6?)F*"DZJl5J9%[iK
+bn-nO1TTn&j_%OWV6W)Z)d=\VLci6ImUr>'*d*]DQl>hiO/!De7<>].jhZHY`eEb#
+0;Ac=g=lCYBpE?a3^0.>p<^E49!Okt92rQ/AO9D@Gtmh4L:Iujdt3)*p7)IU8?[AD
+69+YjW''[>Y8)Z<ROs,T&u=jB2"dCE<T-E<'HqQo&j"\SIG%5TKh$(2^GW+Wa2*_0
+foU;"Nhq8s#$M4Ei(fiKTF3N$@ijgo!5Z]%o637^i(m!<EDRjs0o*DS]0fTqJhJGL
+<R:ga6hJ'"-h0\LbtG`lW?T&)Y0B)nTOPp_[GPPO&ea8Rhb8+B+01iuqdNF]guMU.
+J8(VbbD:RTX2`_aQ\XnO0[E/=LmJg"r)aKLG%quQ5L";AT.bleP0=5TE2rC=*L_sF
+$2(\p+>n>PlA+0?_aa-IgR`R@?nd=u-16Gmd/F7GXcc;mHRDb85bs8k;@?Hm6MLNu
+R:ej5=?>cs0`&D<E<;/4YnTd9nEmra^9F()@&A-V#(_3r)jdISlbdF26=ko5g?BMp
+4;O\bgN:/X(/8p-8i/KOG\l=Q*J[?)MKC&rC<IM4OU*M]Dr23U\I?b=:@1j4!0@\+
+Oi'c78bkEV6'u(C7bpHg.R_8[-/mM+dqPJVO(A"P;EpC`GW[!,Z/3j0/=-Lu3)-`C
++X<pO`9&M[YV5EnV'Pc/+m<i'5ke?O],<AIV7ef%_+U5;_=1a4dgoXQTe%n6lku#U
+pGfXP6Q*qi^pPh(`D(=jL"YR3?=h`rqO-lRJ0p:RW&KX.g$NcY<W=/+H+)0Ke4)ka
++3>'11[YoU,a]MHc7(8a_:=`oXsY&)o6oVj_,-hC+VB6TL(E)&`Ib\!nWE0T%&pSt
+2V@@=UUhD)N2AJ?mq&bjml""^kBPsWTNKL,lR;I)8AO]JILU[hD$`+U.O'c&CRd#O
++NDUj4sm)D.Mr0lO>p;ck>+M$`mTTC#D('_Yj'7MAEm/Vkt$M-:Z])Hd9339UrLQh
+_*2gJ,n`?j6S5n*nBA3c2@aC2)@)-n:6?t5YP,Dq`/?[_2S-Ri2G+,]Yi'gQBrd@L
+flVDmj0qhVYd$ljk)kEZ3/E-;r8ViuP0ND8m4maYrZ04e1H-9n:MUr8BMoen>@XGU
+SuJ3[D3I-mVg=f*TCtX%g?ldS$SSoJL&0Au8N<X=0F;0<JBp6(:;uZ#-jL]\E$C&>
+ba'[$p+?OARO.J\S2T5nBn$3o>BU4C(Ib$9Eu!VZj;i\pP%VW/#jUA!!H/B.6B687
+@P4]2Du?8BS1,BnOq,Q5Q0;$^g?RI#`$*C43,rRl7m!lR[sDH.(8<b5)l`gVLLXh9
+$>tpk_->9JRmtnrg#5u;-!!q!pu6:&2^^%EGu7XKD*Tl:30_-]QaaiP)TMC5J42ou
+!(BV%>)$/UW4=sWL2r)eDC3GcJ@VN0ljYS2GYuqJI]A;lm'\Sn.4*A#ChUr3n-],m
+%3ti"[:fDkC.Y`HE#+kWlHjIFU83ZpBt-)@c,:J)IHaGBWL$1.lZ>"U]38fh`\hGa
+&-!Z9"s6`D0a4FtP_LY[l9rr@L1[Y*\04Nf\?1s`;Nt:D\("*s8PLa&c*bpX"'"'.
+Cb[_&J13++=-e.$OqMR9["'i#;M\3@@!B,kV%IIf#%^2!iik7-:L-N]KNdUBdn=[1
+rfY=GfG%+a#>Jn:-47a^d!Q>/f`YidCBt^V2%<(2~>
+endstream
+endobj
+37 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T5 38 0 R
+/T6 39 0 R
+/T7 21 0 R
+/T8 22 0 R
+/T9 13 0 R
+/T10 14 0 R
+/T11 15 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+41 0 obj
+<<
+/Length 3625
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X-DD/\IE&cSA/O`-R#E?\<L/Poi!gE*dg?\%gW#Gh<kfSlr8/GV[ohAkt(Q^m#r
+*6F\`U)RJ`;^+6nbfhlh]O,#/XNPC!]md[fmY/;Kbhic!lL_g5Y03WT:ZV3FE0X\s
+Xrb=W,d)@F4Kg\F2r2hsDqG$"P%eKNXoE?_ZQ#CohC^smCHOF(b53GUK_rQ'8W*E!
+r53+;htcQ7YqN,)IZuBU\+Dcm#?[+&Zl/U$X@7_"<k5n?\sM/[@ePU5Z$XUNIjH<)
+e307"`uEph23H7@U\a5NoV=sgS0]@CUt,7B?l-<KfJNpFXhDS`nka2l?sd6%,PlK9
+mpJd_J3=E^UWDZ)Bs1p<.$tBcD'c7:`)9-A>RiFak()=a.'Lc=a,#PQE3<&;dPQl7
+[>\^$\p'4BCR(=t$!=T-KmhaH`_lE<s'Ga$Wi5jY'7G^m\fVJ\pY8O?FsUr$fP!G+
+o$+%K-FK\V.9uT9i/pR2_Ko^/8%3X4UAi3We.A[dN&0cGNn<<NF]!a=A.NaYmE'fr
+"W*N.T^@uG+t5rs`Zeat\P1Q3\u?nnaRWPAbGnqrU\Q39o)Ct[N%7.jiHt!2DTXar
+G3LV0U<$sZEp4TM'8ht@odStEcX'pd5ubK&UMCpE'RfC8&Q44LnoHIY'R(kd?=8c_
+Pa$mC9I4.QL81^Q(71@gSZuYK&hDVZE.!**gCum<L)sjLnI-Mg3ph0,a/rCGYUPdd
+`D(g;QpfQi\#p%V,jI@A2PW%<%NESPhWWTcAe]_.^2\Z61R<XnJnIArTB<,FMB\'1
+@I,S/Bc:Us=p/Q3MEKaPD23T5lMQQ$*$Hi=XGi3brPb3+S=N\\I)L<f+p32XAB('p
+a3gBcP%C'#iRDP2bSa`Ym8H%PfbM53_uUX?0jktS=er=EP\1"M'Dol1VVe]HU1-RP
+o.TG`WNR>2c`TXS#HGQgOU\Ga\tjurSmefnik99*n2:94LS/O4GBgdrLJ9-p^'2k=
+A;4eQZEujBmBl&q>aEo!>V@kP-@4R.MN2W=?u9Q\80dkNq)`o36)#i==n-aCDu(Jn
+&Y9+.KTD.0nHUsLG8iGHO_"-:o*enB6\/r\b'Cp?G18E"IHmJR#pOD;C:]EH?P#F!
+n`79NMHKIlFGj@]m#2lX7q7h-Lac'4`\:Hc`?;YH!o4pOXpI3R^jUK+_u[J;"A5^/
+=>$O*)g.[LSPAunU2uId_4_nM9$$g>].n"m].a5JEqStbQ-f$@=dQnP/+ndc$=>%L
+m[dFUD$oV<57^NfqTdI]MnZFnBK5Ml4-MhA=;`JqZ,U8BdD7!d?4T8\m:JD=^,J6`
+],`_=G\Qpoi%V9p.?&mN-T-LfC$o!?a6+!="WK&8`?k%!IA#-cikAeGN<3B2[4fPK
+OmjI4TZcu)l'eL[D_Vg#M9#+2kcm]*N/9ElolNJl*hf0ihUWPtR@JGbC;cD[!-[!>
+L!OLD'.$;L]uCu\]M)k;EHQTC!u]KicP-jl-1PPf4H@=!Zi[T:0$#=J<=jeGC?9BR
+X7=t[XI$"ZO=$\sBj%5W(3pQI]2mFT#b@-?*\SWPN+VsnK</OD:$A6XXigg=0L@Hk
+U)dZA^s)*bBGJjdf#*B@.oNrpD_16p'WbFjr!5Hbc5-0'R@scAi%=&ABl7&2<=EAu
+Rb*d/UiLG]<>;Q6IFi1)=?je\o\B.E,eLGWCif;B<c?!Ol^jPBHSOq]5rDt):BR0>
+WCu#jdQq4^S":Z+rtKkh`3:*)&qdp>*5OnWZrdZdV>=W$hOpi<^o4_:3hrPZD7%&8
+Q;H,f!la.8:Tb#B6J#&=hrckDRdj21d3m=\JIB9eGZ,G3b*m+afpDn`"mi+s!e906
+ObL6(<WrR#:=K)JWfT5:8J>dDi`!aUV3b#p_:8DP4mRAQojR8Kg[qC'`\cb?B:?j6
+kqr3s%aF',W(_Ugm$6]n,XN""77L^16LHGQYk]cE&Mc/4mD]`>]Et18*AIVMO&uD.
+]e=mZQkHn$d'i+rrNOR%rMj*Xl8F=ujA1F9adNitg(ImoCee6?;2uQ_n23dKAJ+D(
+C#UU1d+Dbk25K&((FChhk`$1uDBt[0iNXsG744lRKN:mdW'!^T>/i36>4Md!?O$;`
+%b.!7EcVW\<YD@KGbC8%:r4U(H['XQhO[\ZT$Sj2*O/5*B8k)bkdQXV@+Pp=rV5ED
+CZnpc6tXN2B.g"'-nu*o'V3q\GUtL;nANV=!L#VFGrX<K<I!5Jo%"88$O,bua%YV.
+N$9DVE5pd@F7f5;HMXud>:Wq\`m'/ZPsWEZKG^E\/V6t"b9oso2K/R.>)H$55AQg\
+n1b8)m`a/`jZF^21dq9MWhO*?+0\0(pH$AAWfS$05$BqEWH$"2C8B\H\R!G#O*;N.
+PtaQ;?Rg5WDRXAWbd",R]pfW)]"$C18bFDoW_`g@_gHs`0M:>ZH&I?p%paN-EZLTg
+4rpcJ`8Sp$k+o^b]ONPuUj:"NL)nL-5u9WNU@)%BA_\3/6;<McN]A*H'+&!/VPFqg
+oo,n>d`O'rW!o2+XcJ4WKgM`%PgeJbVj<Aq*Z!(pLUK-^(-a#'S3j)(fFF+/>%tX;
+S!ak_Nf\<;.Mluh6jg3T_WEZ?$sWCTH!:'0SQ]`@(T)]&f!q:`n(tE0UGm-W?,ds.
+<.Ar&#rG21,2P@r+!hdTncFll\M&n!+)kZe)tRr,^=)TXp[%DuZHIsII-CWgJtR`i
+oSfK`:#j0@.H=])G<);IFDGCe5a*mi5<RsO<sD%ITt]u5L;Ui$<>pqCicC[fIQFgk
+%S2>6:^.3Wf,#X6R`kZ"E="N2A?n$bfd(TH%V/%27IOe,9S#0GPcVd+h7Ye+pp(Ci
+XFhCFS<Q>6'!"h5Yn1u(R!a$!a`N(EK;Q@BNa7;b:YpgQ9j#WqrJ[L'5_'@eUDfXG
+$u6R]T1;C_"GL`#0WA0(;r&r.PKUSp'mB3qHHN710WpF<fYn#LE7ct+PP#p&;H3JI
+,m]=NI6`P$pTS3Mn7eQ3n.OgK:nEh=N7H:e'U*)j@/e9Nj^O@B+sc?<k&@[Wa.>ji
+VNk$e]IYu+!pcNc&5,29@bZsg[/V^f1a=5SQeseP&a`a"*Y-?6WqZ;1=5JC6,Zg9&
+p_6A;U[(2n>3EO?U_`?,c042?/"1jW8h;(pCVb(9=WmeWalq^^XGOoQHH3WAVs^K4
+?L3F^CSBq"l`e-(N*Zse9]Kgh-Y5mC%@OUYU'FJ&F&8YMID4H-%=h2dpMhCGRMI>H
+L=pWFMbu5aRX%,=R-0(Y,q9s;^+9-t)+hhS_3Um!`:6o@m9HZ9rFCTLFmUM0"ElaF
+WVt!_,JU/LYB9Z^)_Xp`4cM$\4?.%>jnS!(5&9fRBGdG``m6?`1l^nOBi;=3D[m,>
+TM0AJ`/h5Z/K2lA14nD'OgrlK[,b]2JjY5_]r8:E16H>/UB$VU-%Y&GZ(Ttn^XN("
+7k<`SIG=3]5jt2hU3hk@RK+'2B5eN-[slV^>juAF&:0qk"U-aAU%TXpKqBY]AX*0`
+BtBum`Jia9V5ma-L.05q)L%>^`dU/3JF=M1`NKCTTAq1^2#AjHUf_k01-7WG)Kpga
+e0_6[PSY$(Fj;g7e"+AK>.;*b&do^"&0KjgSLe<MX5"W`a7[u4#67/khW"~>
+endstream
+endobj
+42 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T5 38 0 R
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+/T11 15 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+44 0 obj
+<<
+/Length 2879
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wj<hiHg-%=ZW10lP;NPH6)17a["WD7d=;J/5J:C$5>cEKnDNNZH2aEjL7D,uKmq
+a0Q0?%^9mtOWl7Fj2\q%<ZcMH"+/Z@<md6'LIhG^lkdj'D3@$B;7V\]_sY0p*fd93
+T0BT:A$<XkeS77;`:1;6IDqsp>O$]AG5$!a(;lg1f5Zma0.r-!'L`H(?IlT33'D.g
+/J>2)j8X<&>k+OFdKQ6+lh8t%4O\KMbC&[<efIUIGPD$b2!,".`o[J1*DR5J6`k.7
+5K_j:RUkCAILp8@(Ks`N*f>'^l<u-h0%ILM"c=R:@74!-C!GXlQRmc#`]/?Jcam/h
+`Co5cGL0]Nq(hZTcbS/hDg*V(jJ<HRI)6ntjD8Um>H]q_/B^Wol5OV,+T1'l!M']>
+$#cF+8"@KR8F<0L^9QB0Za"`R=]]'E?'.)8A`3eWluL1W9pVT:*+a$J\!N)-[#%?;
+efXk1ma!ENm^]t+?dJ_<<u9,gq&GHj1<`^ma?FX4^l&-[[T[&*e#!sD)m<du/*fm4
+Ps`LMR?P-k@i/_"B<F$+Z+214HX!DlHWc:+990u%PB,(I04/p:PW6:%2lt4s87PKh
+b5mZS7u?tRYV%6j\?s:&fh[V=-uacaAt3?o5Tg_<hF:Wd,[Wl3J&5KnpLK.t_`?qp
+>k%0i#H([oV^+Tm>P54.ne6\.lSQFS)#nHtEh18pKK3_&iu+k-0j[>,e`'\#???7h
+,QnZ!,e[="mm^u-0?T2!9Z,W:]ma+b4=6d:GtSq<pgDY[(*87S$$qJ@KWG$EMl7Ai
+&IU^OYj[hhXWX27>JS4PbbcZ@9u&\_O/jbXqt7!!CmOqc+]VlnXiIV*MH]AH](9(3
+H[eT.C=H]oQSXTJFDM@Bk&=//@1L72_>H;5+L%7ZEMD:Tj2Rt`n%+0u[)AgAjBS4n
+PNN^l!@PM1g^j7]Y&.GJ_PY.upN?&9:1`]IOK78-=Je;FSG$uRpU]\F"G)^m+hcWd
+@I%h$rW%(K_.&V_oBkI5)iF<_^F0'SO5RN.l$c=!ajSrLs&gD=66g/k^i:-@m4#s9
+gNNbiMIj;mdfdh9\&hK(e;XaiYST3?5N&9]4a>\6'sg)+gD!1MFSs=,"48Q-i'>K_
+N>S05hRn$8.q!>LD52CEN(IuV^1RLc^C"\D"?'%F0^ako/kg7Q$KY(?Vb:;)URM%6
+YMH5X/Rh:/JbmB?Le"W34RDp;(nf"XE;mbV9dLmgd6GSFd`A>S%nU)hY4&,Wf\A$R
+"<,1^g/G/#d`CINmQ^9GYaN?T0Chs>.sQY6n.-G\=Y#8_@e`cqA2QW+QP)GBY&9<S
+P,$+;65BLbR^XM<dRcf`:2buiRlH<d"c8/;>NfH`('aOD-=WT77Kd0B!Xg[+[.%PI
+'l^FKEM8P@p/Mu&^@+O[M_WB\&4&pT'/EH2l@%Xb4eb\OMZ>SB$4/S;+'Z"#?-G5Y
+9bCTP.U_qQ^W<lcLk20*aJ0"[]Y#LM$b[G4j]/aAb=%m0mc=a>fe*?EqQmg9D95V>
+&jTt7Pl*j0o32a6B&:*ZcZsX6lu\KmcN.@'edg('3FN\t)GHcHjdh1Gp@G5Ij'4U1
+bL"o4A5NUmlR0m?]h5)27%6Y&(t'b.FG;N2<<(`*SZ1FBM=Xm(d&6_^8:kYS2EJ%P
+8$)^>WF8_bn1[F=cJ1nlcI,]XfK.WZ-%3m5F:.TCTBgRS#R0aS9/<X-<QX&sGYA(t
+L`%(M43&(a$GM]+(p'3d4%?5Kp,L5e5]=`5;hCe]-2S`m)TN8j`!Mfg1BO(4XUo*F
+A"DZo5rs4"n&lX(9@qcBCt"UVA1^S+SP9Dg9OpHaH$"Uq6m3A'OFEkdm8Q$9PNo\H
+HH'uH'2Mep?>3l'&-QC=EArj*RuX,(1C,mEmX_ut)]&]^?%Fm;mT<aLJcAF),'oU\
+6CA6U1&K4I$s^X^b^`0q3C)H^7Bph%QN\\#BIhb$,*33D[$A4DgDt,DV!:BJE^?+V
+HR3ReE9#P=Tr&M#"UfG2?VYYE!dFJEA\GUbJZDmR<F?iB04-.r(VZE\UGG@fpjXH@
+8\b5XFm"IZCYIDYcec:m4,W1FQK@X"=`MPGgbJ]?JMKns6AGi$\2(E@PaEd$4Wh)A
+*qXH)CIVmO1LeEb%8&>5c%d<G'Uf\M+L)7J,OteZ+oYJcU#])"=VAK[7c3I#TMDiK
+kJiam`ud&*dt3-@eVtA[@J4!e5,$>X765QFC\L&&eAh`fp6nS_Pe@tNpT:s!kXR;+
+D9HF-S,*`OSel3Ao%[N#bdM.;MRK?(BD_N<E(H?c8j[C_3:s),1H<0YP[omIca'ah
+f'O'kWh:f5`$otfJ*hFZGpa8C[HekRg#7jl;Q!Q`CF7mX'I/Fe7[nJI>&W%*&"6&b
+o3L+`rIsOAT++noQc7c["p+=,hMjlndl#F]Hd8>i@)ug2D?ml&UFZ#qh(V#97MIK#
+\ejQI(W!0B/[nFu63-tnj+\oIL6nf8pn5BZp,IpS[&JkchHsH^_Ek4EUcQ#g2SHPj
+(u,,,,O"m6P<4A+/Lq-[CubU0al>JeV1KtEUUNM'$1lN2$U\2fH=@&!,)`_j&#sDk
+C(Y*'otD@La/;9DB,2Z&YH8ifV>I=co)WLRP:#O3N$Z2s@'\aeN2H+l9VM,t&PF#K
+r0f!q>La>RTnd8hqQ0QdeJFnO]F6l^`\=0e"ecq/fIDYoT?`<Vnb@)(<bkm+4m/g3
+@;LMnqbGl5Vl"48S*$3l*PU-`\\YQ"]bj!gSt\*@Yo6*n@ZY+\WSF-<.-7W0Q8r$F
+fZ_6e:pkObjE+Eu<OVXg&K^1l:)ScrVJ3n.EFn;RMl3k/D*5kAoR&%\Z\BMK8YSSm
+Vd_NO2s\K_J[]NUEC_-,&BW/ehfl.$%fj@CkK<~>
+endstream
+endobj
+45 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T5 38 0 R
+/T7 21 0 R
+/T8 22 0 R
+/T9 13 0 R
+/T10 14 0 R
+/T11 15 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+47 0 obj
+<<
+/Length 4115
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:,bAupg&`)b'[%pSD0BRhPG>:.i-'a?(k"a#",).AG8Uph,l7u_=RH`tU1^L's
+]3GIqkip.Pe#35YIJUCsT#L;Es-.>QHqs%CC]>oos!?bROjDeR;t><\qY%DU`:IEA
+^ULhQQ/'H?GhIOq;VHQ,rT.bd9/Tc<NQe`uk-qV1m`'$\#5A,O<[;Y73YTK=YW''Z
+FZ5?KcQZ;W,Y8,dC]F/![(=/!-%&bY@/&)nrX2kF9)DD/HY[B+88:9N%4cPi_`b8/
+<o-S#@Pd2IBu(,tg7>6P!7NFFm.7pb_a`[YhcAS1b<!$9<o;/>*+!"OZi.q.8sQ_)
+cE%M(FZBY9KenJO<Gh-*Pt?B$esMM,"*%^N5G(]40cbbi%&;)(^e$*!0Qt/"pW*CH
+6+fOKmbSXV=1t47Ud#Ai;gBSGL_/MM(@]&+DPqel8Y#**+5g<K/j5JZ?nG%Gdg(]t
+XXi?fh!af(%MT)$$<P*2nVsNdQo<`BR>BdZ'Z0f>&P-DUn0gkQ:fB@I%k='@VAiO,
+`IQT`O@pm08<"B_J4rDr4bgi3RG.#.lNmPAo%9hSG%AC;>MUroZ5)Fk'TX(=TIFB0
+r#Js8,ZoB]Q:M_L`B=u^MudidP3H=Xn$iKK'XL9Mildc&X=HF+mmLi1Wj,-*"3nUg
+2L4@N@4@O3'&W8"Cj,fH!e^'af;_AI9bjjiH70(cL/e4jh;"d&oUN(8@X*Iu?16$R
+7P<Qj=6R%)$eKQqE4#^mOK"%#65D!=KrGTEEBuuINd^MJ*R2AsXpId[8>X(%VZHS!
+aQB^48C-oCOH)rq&4XG.f64WXgugR:!A+QT1c?A_!8VXr!7aY9oLZ"LWtCGq'KV(7
+ZA'SOZFCrQk0#SF5$S+=P-p2Q9M+K>5u@snl?4l[fQOZ2g!ta>?B\98<K]IUn/(0K
+FU06E$KdUrL2[4I^g=/>_t@hL(s/!_pR%k;f>He\/BG+6;gkf/+msYd9Cg_pBpqKP
+G@_!8.5g/bXhA.[gWJ(_C]qWL+BU-#^De'oBFLNlq>nZ4(W:r-2jf6VnaR+h5lH;S
+DI=eg"?^AaE./oD=ua-XCSgV?Sf?!eFhho(0pngOHpl*hY^+H$#&l,'"I4o\E8md@
+FE#ea^;HJQ3oq8-+GK>;oh?K[]/:ZQ6.1O&iZl\pZsiDnT>.KTG:Xu1D0iiV>4J*Z
+mX"Br'K@QaH?k7D!D"NEK1#u2R!afBK`qcbZ;k;d@Hu1X7O4/ME2?/9)QD6UL257)
+bsqDn!`a4TfqK7<oCRgXI\&bP5\Rocja8"&>;@\72qTe/BB+bK.bOF+5VP4\%6>%'
+^0Ce8P[PO6^1-ULk^iesT1)^ANmOG5fu-<?`&edB]to7Gk24+3/lb+oeL=b.P^CD[
+PIo1W'1#FSN&Ar.S1gd%QtP+H#gn6<IK(dV:RSq8@+<8V9Qk&n6fcQ378L_aUOYqu
+i0q[))Vcq);;k)d-DXY-B+$f:K)2s)a>2qhh=kLrYWL=T@Gd0/^qbmA#"b^H%5<X(
+N7"EX12sZ%^8qrWHMuRl0Jom?_p:eV06GaAobMWTPlugk6RXd^HK_hkA7'Isg&mdd
+E<&q(/H(O%_(XNjr&"%8=n`*X1Z)/:76;ZD?'9Hl2h=m8<O**__hm_-TrE2H]I6o7
+Nu5rWI:#A'V?N"MDH`tD@5c#[a;IBRgtU82nNj%:/t".`i?`"'/7im:l]hW)QI@.f
+,@8kC*JRNP_e;\cD$CrUbU6g"k<cBs/u-[.(00eI,8//d56;fO0b2f-!B7k#9G@43
+7IAOSF%Jc^m/-4p;^A09TtM^.<5I8S'hs)l@13@!2U>KqPg8aL@>r+b;@Mu5Tl%<c
+CT20#9+a^PkkF6*40<J2`dA3RPmZ"u3umWKN$*p7,bp.QI?]<@A68udG13gZ@2Lu%
+9:7EV/QA"d6&85C[\Nc,q&O]>BC3s"p$:-;jU"nf84Y:ehbZ(Q^bV`T^0%9,i-.+$
+-X.oM&Abf/%^^^XF6*5XoA,HSO=G6(9b`TmcW+2c6>INj/\[hDn-P9B`u^ED?U:OX
+fd8J?diXjG[`367$KEL^`FV]OLR"oBPf7H<:Eu(3^sSZ\jA<`OHu1F&A%/0-+(#j:
+lJjCBXEhWN)jlkAWFU6FF9cMQfSYHZe-`EJij;amJn4K8;"Qc.e(L,-gnZY6s*24I
+)8ictXsdoHV@7K\79"Gd)=>=&-+I'f1dB25$sbpi/!S_MG\du\<V(R*6!?4<`@QG9
+E[mEV/1BMAfoL:MdBXs33JBQ@qeQ=TkI>UXmnc3`F::qe7fsc=Uhi;j1"$n>#scrN
+GV6ZI"r$WO^AMu@-5Rrrqf<SGKr!:J^Q)gFA>K4Y_<G&?.kh,aQ_r:)P[BjDfuC>5
+oiV_&clQmPG-$UEkQe(8fnc^hf*hqKo&,@Y9aIFbNhd>s]7=%C52K64GE>ebh."c[
+#JC?,AD.)ZF[P1/I0FD6&Tl7a]+;#H;0+_uLQRV11W%uDJg"\HX56HUdlT.go,19/
+#NC.#J%cIXOSQAf8=jg`!*5NmH/4G\>`<jo/BKoQKZ+$e<\@0d(2>\p?ujGLD&Z/+
+^TC')7C-;lZH$Rj^f`n7EZq2D^>fq\SGOWUG11X5)7Ia\YnlRjbpI2If`^9rhOD5#
+baje/Oeg[J9Z\uL@4/<CT[b;MX[+Jac=b</?ALU^C$DN#\p_`VP:LGD6^/pkdX3K>
+18R+d#QM4NnF[#7P[$"-At2Pd+2(YPfMqKukiP!m9]T!Y&*PC^="lHf<Z9W0:AR;$
+?pZ&L@K.NoBDUK6<VWp_UMADlS<=[=Edt=Z0j10E@"!P/1=r=D:006qGg;>q#Wni)
+-b5=YjmL*[^T#'lVuj:RniTs+Gu?=8W.4ah^S=%.+:#TJh6l^hFNN3ZC;9JaoH.28
+BPsMXpu4`B'S52gn#&9:f>;F8$&MEaUBcYQ)l`243r@//j=5nMBsgp]Q177K9MS)V
+'L4'F_*Nkn\[`Ke]ns1NBcf+\%dmA.reQ%CY4$.2UqF+4j^aJh9[kX/]O\E&UVY8-
+.8?c"K<\t0MW;t8Zg?k.^o+f=VK"LqLsnZkZ'nMd\:(@jgF#?kF\X/9.d;3E%6^5n
+JMM%'[dX'tK%u2NF'1ocB%<BC*gb$n/sQJB;HK@!g!(:)pX\MTq^2c9qI$2fo&6W?
+dHNlgRh:)lc>feSX38Ijf.SLr"SF5*Y3c:Me\F1C0kG4l%usg]E4I.B(FDs!eT9^^
+9S$&9-6*f\EVg<hK:GC=LK!pWK21PS-?12kC+d\r_@D4K8d%qu@;lGh=dpL.qEdEZ
+"7QXl1Os/u-!?AL(RRbmPG[3\`jS2m#m4NniA_u>"</R++)HJK'@,qp@@AAgV?hj0
+Fg6ncTT=psK'QV&N+Dr'PoDfZXmp&.!12:OL$]ag>,tS9U^^sEAFJ<]D>nl>3$A?W
+AWq'j#L`dH,U)A)Puj,8;b`9ZeYF=+_6#\'*'>*?G@OEKp-gFI'T@pR$2PkC`$o9t
+^N6QG(Ndog!QuM_*8P_<VTe!09Cb&`5@nJsFsN#]*.*Dm/&dZrpO`oPP^M.,RYb1_
+E=LCLD_OakZJg*UEU^)Zk>Uob^-U@+C2pffN2EibcL8b*FU!XP@fj;X&-5oGo>EcO
+.mI9r7@$<EI4d[uds1!E\bFt+oJ3XW&KdhbQ?l`KU00$Wd?(@R2X#0"kh/jp<WCP_
+ck>$-NUm+Y?,\c/__?&m'cg^K9q!p.!'on0/-pjM!YXl%YK)Le`3)q'ZtUQ4nt#4V
+Y.=R'DrpXOJS+#5/9UO\@&H9$TV0R@OqaTAn[5;([]s\/1)@:)M?O1oJ.SH^W'<Z:
+@6>*p]FD/kaqWM<@c.u&PSZX(bTQJ4-0d\p3:CKKeh5%4S3r^31D^02nK#>/Ae@Q0
+&2,s_VqO!WdLsgPnf@02`9]>sjYFNl8uN=7)gsBEJ[Mb?Ul0"f`$V"PaC?.R!0N3K
+^%dQ<C#ku;dr0l@C)cL(ls&1$>T&-RMg8^Xep5P^Y<61^-`WuY]>atXMi$:'\j$ji
+7h*d!f]6QIku`"sQfjV\Z`U.O=?dfL*]UXLQ\VSTS!gQU#:$Sj]7%'I$F9Q\aG+Pe
+&$7)SVnJ2cG,N:i_iS2_~>
+endstream
+endobj
+48 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T6 39 0 R
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+50 0 obj
+<<
+/Length 4266
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X]T9on<o%_^JtW*?*K9#g_sf6+=5@eVX5c)k^kmR0Wl2mEJ>W?D4i.8c<ugQh1E
+@*ssOa-K,NI!g>>IJ`Zk2LcLggVZsq&b7r55AU"X_r%9F,k?5-IS-2m:VZl,?fLn6
+_t/'GZoS\d?"^1R*4tM,q7?ON;_BiX]`$U6l=4u$g7^Y>+0YCUg3sW#DT]7Yh#b4!
+^"gNV9I=36\BV`&6>_l2$/>0N+1cXNR:eSI*::R8fLU?aD7*_-FWB9)/#c-V6hpCM
+FZ0$/8?L(3Im;^AoKN#Qn='&apE@d]I*ek(\(BSXWfGph#oCD]O`u6HAc=pNfopVs
+g[2\"Tp9/Sbn(;9lZ9stJ)s`,6OLZB2dOs(mUsLjq^bkE<_ITbpZ[Ua-^;bc@DZD)
+Jo-)qgp1jRiP%=]9g,l>Tfs@+U.C^*O4Cr_._6IF'+3,FJbO*;''gf;;r%E@Qh7Is
+-"-&=CA..afZ28Gf<0ZXZ>a/a8RlZ-Y-a77ZN'Fs_AG2?%6Y/mk4RWdIuZrI$D#.M
+pH`@#W_D0:aEWPG+giZCmh[gc11\P<ZZ4PQ)uq<6QiB&'n_SstbYFciYZ>HrAtn_H
+p4C3XH9/=E!feAk#QNSN<c@>TP`UbO??.1;-!dmd3QURkY:d\ZO1OQ\;sj+dR?hh`
+-eBpsTa"3X%C_YA&W'4KKi*GWQ7#Ral?_^=j](Wk$TlkhW^#s3NWV*pr"PR]%tPjb
+F)f=T'b3\$g:P=>Q0101U4hn6J+*WaOLV-enP,E>\U.[`OLqo`0i3FLi`I,.Y:+))
+d+,:(gn$mf\NNR6,qA(d0r'I.kd:YO4H#VB@opQ\>5\[cfA5^5psE<K0T9_7`&PLn
+?cAc*hK/!P6H0r99<`G`?hM7G?2]lkmHRjtl?N"Z7_X,7_CT"kFbZ&[:su/cd=7]C
+;Fg8,\$tkb3HXY6!^XpPrLfZ+2;&EhN@]h%MKSP'`sZ^?%QUt^.;)<@fhuE,>Ga,Z
+\fX-jm7O?+2uj??#Hf0fPFSK3?8kA8UM=IbHeOsLCni#_)3P1=5Xk4J@TQWFI._3h
+KFY$CQ%uGOjY9ak@ui&FA=Y`i=F5/NQYW6CX$dcSP[^QNJ>k9Sph5Rd\h^4>T&+qH
+k14Gt]ga89$pLP`U')t^@n?/S**Y@4Mu,B:PX/6($s>1"Ce2AU4Y*eoB.TTmg&((.
+Bl*U/6U8NiF4Hk0ZL"t52HM[K2qhpSSdaH@"7kEdR&V?*D0<E.Q?c><ESl/KRY4VR
+,dNQT9'ga%:]$$h4)<Y9>l9N6rsujX,XR(=9Gf*L66cZ]rc4tkh\f^Ml:g;[N/mD.
+q`%2#Nh3^#^IK$]M&U[J)Ana,m0=Ek%,3BnNb)@W%dqCha8sY.)gk)$Z'C)JZL-9^
+#XE0NMF@Fk[)k_%A9*Ms2tOPE>]-2s$J;g;`SVkrnM1hfX=]Bp#1&B=6?"-ep^r,F
+//5/*:Mbb^L>`R_AeQR[,JlSrd>)MD)epa2*AG*@drT3"+`Y8omRP2fc+*3I5mm*k
+W5E+8!P4mWc$2"5]1+[dC$`MMiN,]3^ti<BN4'r''%kR[M&/a^!EC`g[a>SZ(Yn!r
+P0>0r5cA2(onFqF8\'eL+sr.!m`**MNL/P<,[!Nk%_fTp_hqO-:$^WiLKE,[gnWOE
+_q;5hQ/GKpG^Y)]]!)H\JK-1O>bEVqcih5djk<HAI$tL(A'sH'a:/Mj&..ee`cfSZ
+D.Ch`F>D.7^dqQd"KIdN"99-NJ2</loJ`Tp-?XTBBM'!enq(2;%]7GR+qJ8P-P6R`
+V9<EgIa#TWn\1/dd]FQSfuB/"^?=#tAI[5MbrT+6)5o>DLQ8sO4I_-1*,*7r*#Z-2
+FD-LS'ZXp2Yq.5Kbbg2@'Vh+_F'M?bjK5$;aZ0XmA=1lQRH\KB8>p>:**G:?,RY0W
+3>6^e;\(b:.2E!9VNqaKmt>Iai.slTX^fgfGA3MOnb/l>AN!l-/E?(lJmUQ(V").M
+WlSJ_d>0T`[EWMu%NJsnb=+Nm_7]8k=j382@sW#5KZHn,Gc&1-**![qiB%.$VXtEs
+4RpXuD&T`"*7)S57?fQ(<(0<_o6g[^_E-#6osAWM!+>AH!&=+aFQ0^C6FGTs3^c:l
+8>h"GqM*C&*\n)bUe="&<#Gru."cTQ2j7\]rI7M4eTYLg3DdRM?i#,URqglOeJdmi
+p_X;Up\X*ucW"kYWlNtHTFDe%1"'2Bo@,<fff,T8::3Ae3K_4MNRM/_Z&ijhh$BKm
+")b;VOFe@'Z>cu5`LY^_.e(6=i48Sm+QMdb$&tu_T*V]*B_i413$Jr2!eXGOlHHu[
+#*X_;J")jljaq4'a/qPpjlRE;4kffoQHEY`6hX#=*i..^=p9Q9iY?8D<Z&nk?n)4i
+Z+O_:<E(4seJtrRg?q&fF#q7]P(H%:Ij83EPX$G7<(q%2H[*[n]H)jlHo[V2E$Jos
+[1%0Gc_:%jX!U"CkVu:cO?0ktE8'_VT;E2pMNK@5:.2-"51b6kM?Od`SlS([iMsE"
+-LT%eYi'.I!/*StpH/*3:p&kV>u-(prMZNW<ft^A<Q1XK#:k[UebAaAiDNkdG(I^.
+08KXA&lGq_I^_OQ%3&H\?t*O0LHI#+2F]V'cs:i_cXQsFOcI?"aW)uEP*PYb(n08g
+e@%7MmS,=D#"=;8&SH"bPKb)0bj#C$@D8s`flGQ8Z,tCjF7GABmKJ%V.Pi,r$ar[,
+o/L'3Y&uF_OFV#TA#t:DUbg'&+2HkWPoa/u#=&O+!!Uj?](uJRjQ]J&l*&/e(eaEj
+k*#OhU!M-]M:FcC%:\H2DrR<^.%PkFeY7"9%'WVA(l2G]e8e"c^;/a$EF:LVnn_O)
+C7,KeIPbnYre$lW>Yaspo$ln1D`f9Dm$abEo#sungAD6rV/.3O\uoe.#$WT4L/eb-
+WE+oZ=:u_&=(`&u35-mFBiH2iZ#:?\$Z4!>':g(p2S,]<BMR5pN7fF+UeFEZ$-/RN
+qK1@CftspqCKNS%E[q&,R:R(k/J\ZCFi2lb;"Fd`o./\%`s"QM3?8VA5&i\tCR+'C
+RhU/)=QI4i?A4?#:h*q0Q'P'1+ur).38QYkU2"r",5Bqk]Bg@0_o0U^'<I-Di%bmt
+EZN)"25Pn09r`A'#O/E2jcm5Tg*nKD9*$.C?MdFMXc@HJ3/-ja!+P-7^E3.U+B?E^
+<acDQ)oGc6RK1;OWpSuH5!]RK$qt#%08[%ME>Xmn)c-_Y_qjV79VX%YngoL8J/>K&
+c@@=Pb1FmQ)'/8K+5`/t#ZNLQ%.2[9n`hU#9QJF3E#;hrkh8+hQA7(7T,&e`4=s:t
+]hg.Y!qU3/n0DGe"ddmrC8?(3I-I(/_-ehuU=R(ti'dV/:1$YLl5u;W(\kmj"3!?/
+-qKWoG]9XRk4)NV*Ak<R&$7PZ!Sa>D=;E9:8"mHCc,/80UeQ[ao3:f9-s5i*.rc"u
+C+3U%H"22"`HZ(\m[7['+nMrJj&BLLUoF'4h+TW(2SF#(Zg24[?o,i:o&6*-iI0t7
+j](UUT<ts4kIo8_DWG9)8=nlk">]N1qM^Jf6ToT!&HosIebH"P9nl'B@L=:*4;S84
+p&_\.WsuN2,Y2_9B%6fWb_fb\ZPtamJebbI[bVO[qB&+"%U;%&)T;GRZ9bKuD8kD,
+QsYBg2GNK`A&`%f*us+eQAYd-emXh:Y4d/0(#iYjb;d`]c4i1A77aLUiW&2GP2lgU
++F)4*I)s,::_jS_%s#ibYt7WW`J(NHjk"-Q(26mR5RFjJe&r3d;6J+F!0K:cAR[sS
+e%-Q;Nh#4cdTS:/]27ReUP115p_hrV;/TJ%c*KE![>MD%b+-ZjPa7lueRLnfSDn#;
+",`.8HjU5!D"MAEa7kQ>mX7@HLr*e83ljIu%^2HV]Pk^!"XG,O0riiC#Hg(ePd$CQ
+;?\T+]OhOU@9QODk!Q3jI\AO-6pD\n<"kgFC=V[T(=L@_6N+X#j=hK:r)NoN1KMc:
+)I,%RgYgX\>iJ4"HQKCRAHh.B:3/5JoIneJ9t2Q:RcGn!LetM\L)*1?&Os4G^,Q34
+-L4I`>rqPC6DQ[$WYCnA8Ng]5dcE1eq/@Qa&iQtuWej)c[7V&m-LD!0e6;R6Nk6B;
+m"#p0E]T2HF(c,lQ(CEU:oSM\S5GT:b[+.X<Bil+hVY-oR+5Oa`dm77<:UiL;En]'
+ZAM#6>iO.]>Ot+8H7Djhi.^89#umaq)0-6$0>6AF`YEi.5e`4T)%':@?-L1s68(Rg
+Qp3et;c5Sd!kQ6D"8a;<\%.E5ERVO\caSCJS;oW~>
+endstream
+endobj
+51 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+53 0 obj
+<<
+/Length 3337
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wj<9lK)N'#"0Dpbk#ap5#Li8r"Cl+'<')//FUZA-(!teD9J/NRa179(mLZrK8]I
+`DW`WB9OHOMe'*fWp8-85Ab;PCud1[h&L<q8&fH\oC%>/--^p2q3^[+c1r]s4l1S^
+gK/QFeE6L;GB7sJ+13#fE?+C*het9A4XNb;bj!AZDXP6,jj3W^(WBlurpemXmItPn
+pA9Kddp'i%?-M)eZ$6,`p=aDf@Y5l6Vnc^$h3UhB:DA'eR=2ZIoWu8]i48Z,GN]8/
+=l'*joCj+>;9J[^BD(uI9@^[jGYkudIh:15f4nk*BC:eR46%XI8`@ueX!.>picanr
+l^h?tn$_s$DZ.3$NM"&tqq??XNJ`&.=dI=('<bPFg4pDlH0eqh+(U3qPP`nlP?F?k
+MYZ/qc.sU)S#:>Gaf,Lg1J&g@[Mu"bpe?(Qf5<a3!Q5<egtiu$r9F8Fg<l<Q!ha:X
+<-X!;pIK:59FC7\EA_mks-GduZ,\,mcH;j$V*sXa*:PNkGNXBF.CH4k,qN&CZ][?p
+!Xo*^;\e)gg@1#rLcLtO-5L&CRU+H#`bZVeSe]kKJ/RiupY"=uK"JDp?OSJa],U(=
+`O/!ke'Mk-e&5*;GGa(P$4ji$j!bgdDOP?/>^rs.M-Suhp?CB#G*"P-rHStVOi;$^
+nV@bLWhg5=168KrCAokahZQRd\""acL@;`oI!aWXWZ'D\X^97Ha._cop)IS=TN#Rq
+_3(9"Js>G&&)VY`8_"@-fQh4*Go=BG/\R+7*B?n!NAUF+lZ7!K[t+#pG]9T#UfI;[
+)$Ii]emB"c.E^G80mR.BK(kQ/X$EbaZ#8jS]g!K],<J6_=<MVcd<M\H;4c]XS$nbt
+D*k01]Y8JHj$aC1B1cWlS@3>_LJpe4E/2?!Mejk2HrJKo/*Ng]!Re$*,mq`7N(.iJ
+iCm9G`dk2-_o[Yj$#1&:oSM(22&rO#Bj%n,Z8CVl]oGPGD3N/@G8_^saY%smPla1Y
+;q!:<hL:(;%/t64!jRDQR+k^-Z(LZ&4)(%)P3'Nr+>q:Y+q'G)78[Z'S_--7W2RGr
+d:f*f.n22Zc-<LeU_>K!e'1Hu(L!D'dXJD_1pW`H!XsaH7'X7:a[mdN>gm2jF*3jY
+0g.Vr(scY)5J)G$;2"jaO&1H[%UoUr=;FM/%H,!'n,i%)h-$/C!S1/1GBaEn5GQ//
+)l!9L.W'V8Nt4H:^fdsl3'e\[W=!Lm@E3BTXuh.;8IlaH,Fs&_p!QPu6:L+p62K+C
+Nk*2hb,G^`$3ed1D/e_^icFC^iRh,`m7S+O8%n4l&.KM8j7Jh+O%r?D(D^L'Y(>^p
+3#$\c?98fHmG9$t'&-:HhU=H1n-4mc;C%6DeY+kILh?`K]Ot%oO<#SIeH"+:$HtG*
+[AM3gbZ_n:6`GpPUspceUCPi(N$q9uD'CJC6R`EkQ[YmfYo@fXU-?XFn<F$ZL@H\!
+GV<6>H]SBCaC7ukB)_>Xn]'G>=Rlep16-4aJ/<*n:]h27$8q]#i"7`!4l)+V82lMV
+h^V##)Me@18n(oSTS[62i4HLq)&cL2LWt@Y(FmhT]1+BHOJ*-eltBHcL&GO#@#JX*
+UtFjb86VNN^h6n/!K[ZR#28(0_4Uh`bc"btH$n>rDB:L9HJcJb`]u1^$miT!4K^W@
+'Pp89W7_aa&H:9GIebr%IW=LKa[q<=TNrlE>)!*p#F6J<,\(];K46/7NCrO]M2k^2
+cnlTqUMA=Uq0=512'NIDmS$.H-T%DW%%B=/qXsW+2q7f9Q5uB(7':@gp](()&,]J;
+qp'')=Wm-6NQWuHK8OeVY.h`Ro)d$e8'71^X^B>'#p-]fcghoOY8k5`%!o5,5\*;L
+cj[:\@9VY^+?njh@]-DRAdX0;=\9O^';\rNQsnkJF&Vg86sV\:(DW>R0ko$ejJ3=E
+J?X>?iI8/P;mI;<F1L"1O;MT"B8Q6F]B!4$.8f8pAF^l6S7,!7f>Hha\nb<lip)IN
+bG_2f)WX9.Ganp0p^-e!(;:dCDGY[0DFHhF[Xn\:-(P'%9Hf5u=']$!8PH@ebjP=F
+(l&I\[$_,V1k*\3/VVTl,d?-*$NU-=;lh4KjAOdA<I1IPq64gnV.>G`]BMaVa*aP4
+i7le;2c)B41(feCn4qPr268(JH)ts[jc[R/k9ipdn;?e%nE<\oWJ_X/'JU%SQ_B'c
+>Fj!(@?-7p4k=io`4C3;IP=6n(<-05B']bdmnI7&%JF\o`4[ApOX4(8KlJC9TiIk2
+O<%K84s?#lpTr3g][A/Z=kE[R+K9W)CW2nTeO))+8^N@1ahr*Z6V`H%>pq!PNt.r"
+Dm!85#leIud2['g6W,$pVDqlQHe[EK@SO`c,*$=uJ`@=e"SZMVom3W^J4>Zb(S#Hb
+Y0q'Y!]\`m$Pe2B;AC;^&e3_ah)kJ,ZX\['&*/VccAYd+b+V0=Ier2sE1G.PAl>(`
+Mm6[R518Xb27A5ap%GL+8!elt7Mmo/l>_`qHWG(DF0tnBC-ZAq0HiQ#3#%hI#$(%c
+e[A?CdQ_]Ah2d:(K,516CgQm$6^u#f1R!scn81!7"D-QI#d^K&%NN9;6cKI)d!!-6
+p3ur"3MEtQ<'^[7U]PbULJ6&,Y,XX7jt#OS;aR-qKD\LLB%h\ZdFf:nH97*/BS$Z\
+X*T;"`]4,**rCX')8CbiNO,<m3X1LUBJQ#RrD7i?P?[5kKo?\ZTR&Xc&-1ducS$1t
+bBSj&14c0EPNDo9efa4737bCJnl/'\T#g3ucO)/*0]7W7X2-<f/Fjjri5np-4dFOV
+cqVOoO=8MJ>mj,56@+Cn$nI1QIPU2$#c,iri!1EW863tt\/oU]g)j=&l%>ZPb,0H@
+L!hTMeO%e<Lkj[_iKcLLKUrkBf'q@kO$hI0pWAT^0c<BR(I!QNZH;N!Ob22_mM./q
+P8SD'R(;G9]r2Iu$ek^b)2'5-B/LZ/Y`n7hV&dcP\''15,$f2QV[S4!-pWU_]B8uc
+0-*"MHN@6%+TX+q;I6qHC4!s^p]j'5aM3PN92f.*jZRmg9u.?CWYRj'AKJS)0=..W
+IR1n`Al!7''Du?BA0SQXV%<B=2\?1E&cHIA"1)2"*GJ*2Y?6WgAN-sj<Uh(lA5lFS
+%d^KMg5^f+hA4bqf"CCYha>\%.o0LD?8_nq@Vh>=jV>n!(<Ns>"c)-M=D20YY>GSc
+7i1;m"H>`'nS%-q%mB(R9PeH,/i)s1O03&'<1lXecW-E@8]*YQ9(hAH)/Jt0$aM`e
+c]SkGkJtg9Q!&9)GHE:+=I3*Ks"'"a\h'50Ga]D<1bJ%]DAjsml\W.t3jmaa`Y^7O
+Y3Y'?d(-I1G9l4ogmUjIkHCAErs\stl*8>~>
+endstream
+endobj
+54 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+58 0 obj
+<<
+/Length 5435
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WR49lo>Q'#"0Dpbl$8jWOVQ*g3Ns-G-[4a<dk/_;58__%LB,P!r:"H@PkpBV:1d
+.63ln;DLg#qW%87fAF"I?an]5Hec=u7*gfV7dAljq3@rZU>e2mO5'7noQYWUqY*5,
+j'bd!\(/C]0Ks^B0Zs(^a$VEMZ0h:@eZ4#qU`XT=gIGO2fI)B$1*#'7lWQO-'Tots
+n`QVp'(\kd]eoUe^D&\XNhV?S9kX>""`#QJPVo.1Ts\;[qm"rF\MK^2hkE95+0(Om
+ODOXiOc6-C,@@n`Uhuma1)6s@^HK`UUkGY"n,1q:WQ)Md"qt*)!]ZN@h-EdPc"6=g
+N(<JiV;+6ooOW4Lj0<NM)#Hr`?@)DUNnJ`uZ*5>"boln'_"6c:)Wf\:S:5+R-k^r^
+]itC'qQMGDqOBL^AVUIY;,B?oEN$h"HZY@I[da!COn_tQ:e,b%6edDZ9<_g;4Lad"
+0g'Zjrl"S2`:h<b8[^MVZBE+O,FH&=7Ca"mro!p+?N4g<cfsk^&QkW9Ius9&P:5rW
+@_NaO$mN9JT#.=Zjth(]O"E*),*I<Whmk>$a8TWsS#M%\De3L#'?;^E8!ek2XS_[F
+kPBE"k+4I_r*&Jf9KG0Q+X4#.bN`8laoXNde0s0mDA$-EnTX$l<oM_mGLgXnSN!e^
+m]Wq:;^S>fc\?Ur'eK$Xo:g;;^JK(7`qW@hLQaV0`Y'%J:$0^J[!NZ)3q>''Jj!Yh
+j/n<R\feX90s8pd0iIt(H0ecsL0BcGF\fs"a.]51iYP7/O(>IA0kB4W1,,"<Sa(F;
+:r*rp&E0s7Z[Gb1H]$<(,0V'6`E@qc#Rk/onO1]nQds,o%E/b2=$BNj;?Nr0S50)k
++M]30'kTW>DGgdlJ`[W;3<UV)lt]VC>@<A77W9^K#O98t`*?!_QsaOmQ&ViH3G<>Q
+m3L6,!3ckZp!or?jf_&[d':Rj*"jIiOTm0n6!(Z<,l6-92qcBO1(>1TDoSD9png8H
+@5=!i?'d;h8A_$@Zn_%5NZO1TALron]2hLYi(AIuas]Be]ArI?jYLSmYuem)pbXV1
++Q6?,P\)cC-mm_M[='\5,RNRj4r^DRhdgV,YfOE>H>9j+`uBHm^rI>+&?f!Q$h2=I
+::b+nhh8t@23>FuJDO'Ual[Lb4RZt634A<q/N`pFhG[0A:db`s^6kLtKA2Lf:j%U;
+)&n^##2F"5_!POZ\_mc;A7m;>4@>dDin1Grf,I1P]=<&-#8^SH7A;]_.)[m8:Z`37
+P#%_5@;F)_!pRXieaMJpk?1E\@sKnl3[(WSg[mH:$khjL;<A^e\W(+Xa"[fT&NiF]
+.FkqZXtJeefA9-p5h-`Q>o3H"aC[nLY;G:l98`X(-M0=7?hc$Od\G2Xa8&t"AC-5!
+=5aa@5,6kAU0FK)h;MS)R<J=W-IX^6MlA@9;I0-mIL"HG@fd6fqG?(GAi?VKCqX]L
+BZM>\`GX7"%19.gdWFc^[aEYK*ECiNZI6_!h5;!Z#^$koD_Fm!4uT$HWTg5o*d55E
+YM77Y]]bC;@-9=Is4F.F9rB8Q7-MRA"7e\<\N@n\B=UL&Ho3h1323Bl#:l>_b+bX*
+*)6g.0l7"Hbp*84'P>T[$b_7*4pZT\jth[`Olbg15uU'O/VprjZ'i.S0\kf'fIn5@
+IP[Vk6@JRLY>=Ys0/HYds2$c/9T2PmEWOZZ$e[bI[D?H1+_;7b,i"pI:YZ$3P.2;`
+]t96P]jm_Z3KYT%hD4&c?<(<d:tuGqKssb*_pkqYC\oe[UBse(moa&*!>Ke<([!k3
+7cr<cnn8XJghX_alorR3m"pR(AG9^U>ABc66\Y;NRbm@5X6'k!iWV(ncX)0ae,,aU
+]TlO$Bc>J_+,BQDXjr@P91M2+)-X:R%BjRA$#h:*,]LFf&H-*1M(_sV8X'*WIf/hE
+da^o_Mh4]8XT0lB]rnI65RaNPRj<d']l^-?_+KtQHbJc@AL3*\'XW7fLXAg&X0E@K
+X,3li^Nu9kGg<=OPRP)@F9Q^s)p@&/;Z-l7E#E?5`Dfcu2<A#&8'o:eT/EYN$D0V`
+H+8VW(i9p=J35,`Ys$Y\Q5Esg@RlU!BK_G*J/DRY+(fjN7ikPA8p`U9<[2IVe59@i
+3DgnQPkg'+PCeaf*YM3FTLikY(&ElL`.]%V)c\Oa/)M$c0ogS(9"6sG-LnEh"-%;L
+@i=@['!aT+:1I"Z-04',$.8YCjMg/f;Xo2%f"_SXlS8-BUq^,&!AjW8gRctE,,qIj
+J.lrV7N=^$e]kh28rpTf8#^g:7i@%gb#<_kRrXsOBAeu@1U=XXKIG[:m"*N-?&[?r
+jok;-VmjB'PEpurVEtZ2(RcYj6N(U[ctd([8[/W.aprIaI&6B>LCqc\bcdO;p8MAN
+Q++0KOs'R"?+j3+n1!q^XWR_>OlSpoI9S8m_@1O)JiTHdif3?AQ@BOe:60bPR#/L=
+ZSL!n5Y?DNN/5fjid7DLs)LWOq%&)p>V6GAV#K"uoU8Sd]!QW>Qpgp?/?-^I439Wo
+q>5)[RM[B.mKq]33##/D."1*E5lN$^\rij*PY5&=]iXY6F:@XB42LF2rS+J`/#efc
+F=P$c$saFUM+kRXO<[:F7]9Bi69e2dY2F-&"BSATRM<@cN!;B"@H^C>94NRKd0`nu
+-4#cn">Za-;jY/%2t?j0"MumS$:qiH3(6+<;,2./<>V)j-"9CW0B3&HAbSZ.eTNh"
+EZ4')8HmGI<mRuN>oo+ToUhPtJ[Qf1[?S`L=2-^C*F[;pFfIN5J]8[>_mI#t6-LeB
+=1rK:Q^5FT<+GUl:%kllCmGCkdDMC!aRW,KL%(/5//.&iNWjQ!(^7Po;_\/ACDe^e
+qjW<oF++o*O([FY=LF+sDG'%hCU-3(U#]*oS5aCbqDunG[qOj0<AD4Og,)($P",Ci
+Z&P4DjfWbEDq-%Hesdc(d$%&4LuKQ78U*@$4:W[4TXEg?Tb=;@lNlVV%sW6=_Gp"a
+RgM`&bcm/S1Yp9G^JtRSP!sSqR<k-MC(?T5CO:pZOkqW9b3uc'#;jA?_AjnY/;A!I
+*rY-Dc=Af2*#g"t-Zc$UmNo8HoN@tX76UI!el7RT-3lfdD<!gmenUsFbu(#aH^rG*
++:T'i-mO`ra%'601OL4p]UM("AO&R[&6$j<_d0J#b$Zu7Un&K0;N5d_Fmi)JB&?`H
+C"4KV7M:jAVh9mo9a?A:P7((G&U"u(])%gr2.BLDjp\rA?W?XHc)^o$W[[V05Uj7X
+_WF7Ufs6nACG4R;V4u4C2iSuGV@^Zc<6d=&6MT/G$gZcsAT)n%OOGcC,cBFS;];Nr
+-pHSnZ'*h,]cCHJ@p/0c?e<V#MF<Fr=,O-5D%RbL.VGoag2j0FM]&(*2IWs65Tm@?
+g&8KVCkEm;F`.:)805Zl@gOa]>RSs$NM3)N:h2Nep]Rmi,CKg:??W6pcIpmt:W8mJ
+S_m-LoTJ>n`Gc?e`aj:uIY!jd\3%ac/sp9s'][mJk/\qt\;n6j/b?F?-Q_dN(T#?i
+"QC62$!H$=pI4>RO5Nu4#^b:&:r\d<(egKZM!D>5D3(Z6r&g\'V,uZu%W_<?+W+)d
+'QF?#;6mPFE%6q<o1:""%Q"Cthh%fY+EEgg9=&PhELSu0R<JWlM`JTVNE[tbMWo!<
+^8U!RN/iaAV2Tt)ilU7@%A,r[0UZ>;D0rcb"8jG3S&2g`F,*9s\@;KJ]Lm>da+<H&
+IO#5](a?A;^^STA7Y!ZJ(WE*nF_`^".2gI`%n0M6=gHhRS)T5J=nV&3[*I+X!A^N\
+!D!r^$l`?11CT0MbBdSS.&*qd^MJ*,`iMe'2==ZXpuDeEc=O<s4<r%L#?)E9d<-(&
+^)I-&a$8EG_*h0J<sLHiB-9VXT1<.oFp&kub3s2e&M0KVe49h5WjU99pp+46B:2*0
+@QTE"X5^b!)@DFE=0d\M`i9Lk$M@)%ecQE$N*(A.VR`^BH%j?k78=*fl*oiigaLnE
+#?%E_0@i^(Z)KY^`'kWbL3f6PY.&h:@i:s;I2\G.@^:31_/<pUVjlF^VslbXmGq-g
+-/d0[SLiF%0A920]e[sh0V6S&\Oi!I^dL"T(Z9f*<O%Yc=H00KNo"IJ>8_ihO1`_/
+am)!fIf*#gH(-1X2QbsI=*:'G*A`WtF-;MI2P+)AI6*@O_S`P>E"nLu8q4?BJkCY1
+,WA=rF>1&Bkf!4Mh)lFr[,4=il?RN@eb$uT:,USUemHEb+[6l6^</76kr##C/Y4/b
++;SOVb;DaENY]\9(5t\u^kdEm(+g8p.YEZ"Brnm9([NOi<^&R+h(=H9LE"3#=AcZN
+$5RL#qZjPO(MsWliFP*ZGcN2NAW$2_>_EhH7?_^N.bBFY&c1:]/Nul<-l'tt[#mjE
+4ag[`-h;7D[@X@W%kGYM;f(]K;AuBgW)(TUKL#j;d'SJI4:i,UL%a,*E4(:moCDP4
+e1G-M<HS]:H*5jm#6_NRK4Vua<0;.nCj_(`jX6!]]./e*:1I)"R^hh=^.'<OHUOD%
+!be[AET!$a?l/6R1Oa5Q()%iO>FbZCMkX?uU)%Ui_(>o7igdOG-pY0`>Li,Gne*W8
+JD)R1Rtq((:(H,Wh2Qu0$'$3?D[Bc++=u*9a\B\/%s=pI&clSU=74.\+=.7\rIG&8
+`L0jo<H,6Qk)GB^H$mg@fEMTPqoVLr>Z+79CrEfH=',)p1XS[/hlF=G2=3"%5GC8K
+f^kR'pb)7bVePLATH2N1Vk^io7(;!\)/59tV1>r;]_]Ie?<:FP"el#ipT+,Yl[q'A
+l]5IGf6+!7BQXt>U]:rYbfI#iCCKQjWr'r-3;8m.htK1pm@'/(bp/6CIK^Ym14q>l
+JSH6s4"8i\r,u`Qb]`JGZJj(TEg!?lKX>f">!)`sUOOu5?OUFpc,Xc7;eS"mJ6gX"
+dJ_j"KQFEcK_I&bKP4J_;#B5@SM@mZ>npK4UI^gN[Mldi7^fV>Zfu#E=Z6QtKn-iZ
+cdl\poFA4es$tm#BaVSJg].1LX%@@'OkXb=O;i-Y+EKj"m2K3h0R-Lj,O1^s4h2`[
+nsC$TkK\c4":o2,91a3pmDO<T,5TNr\=WD(]lggZ:<Qop)U/(?I2S&h>^QlJ3KIub
+b,0c6^<TQ#`,*o1Z'J6(;/ZtaR^7kT*c5d;7aO*SUAP\Sdl\!c,qGLpa,VooJ4pXh
+q0sU,Qhrsc%2Kdp\R0-','8<9;75Gsr'CjHgo[7aB[hO7!m*?qcJE/$iim8Z/Yd*i
+;"`*mbe_q;N?&KH!J8+5dQ@m%lVqWZ?Ce&k\SN+3RkKPG*85\.:2S$[?&3<`mF%/a
+Mee-P5Y3E?]sD`K6;o;7>,/DHs3,0C`UXkY8l!`XUG^4d$_Ys`+MuGOS)G-F(PCnj
+3beI/s"k5:'#^=&FSjW42FU"ZHN2YXGOHn1cG..+iW_b(kQT&(V/`#[4CMHV(=3,N
+#2L!EOoG=WfDbpQkgsd0~>
+endstream
+endobj
+59 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T5 38 0 R
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+61 0 obj
+<<
+/Length 3208
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Xu\95ik3&\e-Dp_FaO4R?rLNsQFE'-PA)KtZ,!:fLZYJg)4uZ?GrnVn9"1=[c40
+:QR,>0LLuYore/*qU=m#b:^CCpUf%hkXikmaSa`&Vp,'uMPj#%n'6.)rUK=!?[i^_
+a2'n,Wk6MqHogo]p"5ULVha(]GH%rNGCR?]]U3Vup6AV>H5$\crk6n7iT7n)g#e.k
+,_UOpMB[$fN6GTaWL6;,5\cE,-rnrU+Ec&+4'2HZk>L,_-WoKY^[8]s&J_jA2&B2V
+%EM-$<B4aICKZX&&16CI79HD@;>9cP0#Y>$e6P$T6l%73N,ju*XLb9M,*P]K?Y!B4
+oceo9Fl-:V^?c3*PW8GT^=t;-(B29qE5,C>22in!/n'o\EfESA>abH(5B#i\@B637
+\ga-2iEs43gN7KcTjC/;(59QJ[$>+Mj`&$5F1p<j0bIQ/qf2sJm625/e2a&0)T6q>
+b<6Pm<+o##l9())@KC.^(<Ag?!FJ>V/a2H!Cu*ji2jSK4\"<gik!W$Zc)!WSa.0[Y
+85MtXUn'qYQ'i<"Nh0PO[jn\OY]9D/!O5iTi-dWFL[e=SGTQG@&"Q<kF8h9#8cQ6;
+=2STfq>allTEX$Fr8dDj4I,%1p8;6#b9We?Ibq_*,4:3u%BCCQp;:FH7Vt'3<`c.P
+kO2GhXD!X:5soK*d8Z40&"Q[n"fIY/ebO##@k4mY=QUc+1I%'SVHkqr?,TgdjI:2m
+MBs1r4g3LmG@:RLT'$FS*<eO>\$DB!mOra&0bNC.=PEcQPaAAF]t&EjgNkh:jgXY5
+1,l[7a_WG"1O0pK9c]g405WSt>oUM#U"0^g>c&EiX@H3&i7V*O3P`d(jKW0XAh?8S
+frH.UUro7Pk/%%9_28okp,=?J5tTXQIs5Y*W]RsQHIVNdLA<YrV%C6qP#RjM&1H/K
+K5QJqnJ^K`-345W%8?X4+8o#G`X.d6ft>,3ai6`QQA',a/$l/*9f^end&<,9k49o:
+o*-!ih,)R8Ql@Y\jU9r<OrFPWQ(b-qGgsF=]iD<\9A'.hKA`D]=TGVtiTS1_P[OIG
+\S35H0N:Zr!CdOan).@9M_^JqbfEU(c02X%YUdPf;u)1=h2&EF<6Pf=T\7?36$$5f
+a)cYg1n)X.q`X**LFaR-kZB,CMs+l2(l)n'1?8puj@lpK,ZJffa%P=dP"uPK_^)eg
+S7C!"*#V:@I=Rh9(4`FNHTd$E["l4U6;n[4981^U_XE1JJo-Ga=[pCn':^]EW.`"#
+\0bcV6gBM%c;;d)K$T:Y2kE#M.[257Pa#K<"4E$B1"10/#n%K.'f%o^/KCE=C6^;u
+2.S)4QdJkP1F>"b.KEh_qZQ00j'kX\^_rA%p&!mW)Koq++AT#G^p^4h4ZNq$f[k:i
+PPOH(/&sFEgJ:%dDb);oZksF!d@N"'b`]/i>o)sc?K^+BHl5f:K!'!B$X*f(':XW@
+5p+I74jJr:Y(ojckNN>-pZRI&*=mDUKqG]']%,BqB5O=2Rr;tO1FhRYXsD$NG2',U
+H>n;2O0*SD<JobOL/(m<U\L46LCH+L:3G]4J#rs"4r.tWeZQ$3N1lZu31Z+L<K>do
+A#q.r=_n4hKdI/mb2Er$X]P[T&ZVT!03%jH^Wf<C4dqJt"P#L?<(O0+4#+/!b&j*1
+V`c0^@kIl($`HrFAh7G-,tJHCX.Sq(D?`I1%FPr-HSHTc4(4h)biKEj3OFs]qXWR%
+bVYOip)D\OQ:oOjnqm!d9faLd9SH@nHmF$>QF8kgQoF;o3j9aN72.B6A8+8#ro)L+
+ag9'Y]6F3&MsV[4'o(XN2k\[AjO(lJUqtE4$iF)BYSTM4#"nmR?r4rt(b1s=OI+(r
+ZNX*3$_DoGLrR*I-Do#NaL#RAF=P*XLba;)A!EcWH_^HN#1=4#iNah7]jYp!OF5#"
+]:\nUdZQU.4DbuR1MeE7krJR3Z:ch.Hs";mOU_o>>l&(@J0;E#W\I]\n4F'')6YO^
+FF^'NdqG"0$oO(:e\uLB(5=mqp*6LPEVaZ]>0bf3Uo*aW,73EGbbdh:-lO\oeth#%
+l@NHN>%*p0q$c;>TiNN3<QrP:>d`\"6i[o*@9i*(Gn/VQGL?cpe)"h2$%VLHoHT$T
+(8:Ans"JEiOMFc3>X"Ek1H2U)P=J"%p1@<E6Qj_+pjQU"]$]&a[6b@LE_%GHH>+n=
+W&hd-h2#.NT\RaDB<&Yg':u&0[tHFql)5p4(\h4<_hp8"f!\`2i`+c,qc79*!;pIK
+(_>GecWG+r^]]#)+9CZ_0`t26:`>OZ5&^F6`XAOKN^VOY4J6_Y]<ZH,ZT,dJVhrZY
+*F9t$K9Qhf5Be4qA(_)rjQ.k$G%IHgaq%sm#FWL0n9`/_A4eWnfuk=l8gHXleh"m?
+2?jpuP:4$t!E93Q?B'*C]ps3lMc*t!_5<J(+B]Bo>%alLYJk?0,PWaB=OctAYH+fj
+^mJaT\cV_.ftNdoRr_c#Ls8MW/GRbklE)d6kbs"(gMO2^!Z3tG='[0D&(L!Y?enZp
+.ioFt<=pal0)Zm0^Fok"dhqk_$L/_`P=gP3aJCZJ2"fVmIo-E([Er%+IF[Q=V(<,4
+AT*=5<Tn'Wl2pq3MRtgjABipm'd'EYbB!o:r]cFFIouD1fc-Z_S*nqT*%oQ&hc;dj
+1SjJ.]SJZp\t.g-O>?c=I6%<kh.RqEClaRZiFFO>CPj>$p7uOl5so5ln#At\D@Cq2
+!k-`&7I6ERa4fW0-bMfm0H^S5o`.<jgQ2\Pn+FMJR2b+3pK88h)Yjj/'+l(KUSilb
+KYa!)IM,L*^We-(*ZMg+i1BPQWJ;4-^"*B?7f66kj1Ep.\/>&"EeGk,0p`O)k=mtp
+>qUQl4K)BgAYh?%+g!3>MA^E7J\<"'8Peb:f.811CGKFDMt7gPO$q,n_7D-7'5n^h
+;cZ.87Danr)`K<0H+ZW!1Rb;IF0V"V7+WH=ArBdD"6ndDnuPgp.th\$\eS$G*e1+q
+,,$ir84AKc*TIkcD)#Bb#HPds=!``=n_l?A,ZYSV,iRS%bgf4-Bb'p5C^*8^J9.!2
+n='&Jl<\SkI]K[I86^$5W[:.S)XV<u#KN%1CTlVlUIX[s'3&0K,2gTm[$Q6>99%ne
+r?H(g0RW+pX7ZL,\2f_mCn%7`]Bjl#dAHH]oq$)2lR,giofaa>C%-2,B:7DWXTqS%
+**+GQ&!mj,VsH24ojj<o@<MN[GP@^1!;Q6PSH~>
+endstream
+endobj
+62 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+64 0 obj
+<<
+/Length 3108
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YPl969,O'#+6E\8mF3ASMM?]j&$`D0@FVfgBkfF+?ePjpX[n8]m(alPDg]5r;$a
+SkSiTj-l]5T^h",Y?ue4hL+$h\*S:M^BliXhhLE'@%K.H(D`L%henK6iU,Ude),Xe
+[td74Dp+W^_mh_9-W,=1%_XhbMfJ+P\"@Sr,h[iZaHW+[?Z5A(e@Gn`Sk$>>"m_fK
+p"P#%,(fKHnP)jpM-8kt[p:<-FIj1^VY/6O^=QT9H<B7NYW6-(=B:3\26=:2$r`X/
+026N6'Q!TP/V)qJIq=KHrI+Po#AK2j$&&8f/]YG<#Q65(1*9!=[JDJ5,&`85n+Gi2
+7=U,'!kKJul8\P*CS^Xk4A'Z[bS,KL^@.'d'+b&nj0Ph6G]-@>kYGci4hr?f]`BeD
+b>YUIB@'+1oCn2Q\m:^#RqfGQj3stmT+reJ\Sha&GP#pIqW<P(/f;R10h1.Vo_3NU
+3%C^o"]:T)PB4-6iGt@,i8\+P]+5PIipO-(a5Q"VQgI"TU6p1?m*#JM=U4[h#e`5#
+rB/4B!b&a\_\AXnJ<.pgLeR1&jIu_*Qh)=M@tC>uSN/Ou8\"h2lJdQ(*8`\q%q8BU
+H9>I=_:6uS`-cBNrS/DZc,kji,3".3>f(JK2MUUN///3:J7E]Y[Gt*`-7M:U=nFsY
+MM=<eLXGrX@Eunl6kMp8;[?N(<G;1olJdJm4GX6CmH?,bJCZMeDj1L[%iYcj'!D76
+dY,uj&7R.A-B<:3G&Z2-:1\W32=agY0L\Ei]kE0*im4-[3-P:5Ic@&,%qtL6r)IEO
+&!2qc[*DX%V)4\je`NjW$?Dno*6YMLqO-@L^U<$^Km;]NgE\AGo2%ZGC$<\,bOp]S
+%nTr@/%RSc\Oii=!HlEE)$q!qfT#L>2mJ&VA(eX\:EbYn_1qrRNd<.Vm$>d\N5VZ"
+FLhu,SVq##Qp_WVWN)cX$o-HinFOUVDl+5CFp=f%`g3K44n74<a"UP#T52%hc=b)u
++A?%3q[jHV5"i!+AVA>Jk(&Ef/?ZL1H8.X%T!#mXX^bHC@fN7GOMB9ZKaj0%MHH)l
+klmrq+2p@j>n57?o0$!OHWZ-&WQuXHE"YDPEdCLG:=G'BeZDE@.=N*1dA@SK&EbG?
+rN;'M6QOT105OaRb$;Cp?uB-Il&,ICO\u*`&Fed(TYZBiT--6,B>s3@&h@,R1[^->
+#O*dP`De#)?<m"Og&lM8F.G]ebMqU$/6(IXV%I%(F-=>C&##s.'[=:U1DLj54=:d4
+>T;+I!IPblOSl0^)[ERY\5$hd0rBthJHkfL<>F"?a7/d?KZ%"]K]O=U(9ZpZ0sB(b
+=l>P&a]>r%M;^&_CQSQW922lZ2b0rDrP]b/396]DD$B')e'V71Gh'.=F[s21Fo9o4
+(r\[[qTD@W[rJf#9CZ=Q(dNr(s7\V*(k*!]Epb0@%n'#mq4pjufeTMJP^g(diuc%)
+=#`c<1_+\:rMaBXBHnGU(plk0BnLfk<&9ehf.]KT`CS$Fa!7s7e^9dBZ-/M(81A87
+h<ODj;Mj#m^?]XbPNGV_O*=+C<o"!1pf*4GZBY$?M:.&i(rGPN!B2IDoT'#cqH;b"
+k$J'A=X$EDS=!mi"j1^Copnf4V&[u1'(B$':o1ZYL=4:aVB8fjD%Ec!=bB)g%,DP:
+7,]@,:dCoj@N%0TE17LJ9DmrO&Z8&[e8(AcU5d.9H#?uup$gamMfjYR:t8B&EF0jq
+.RTVZ&B:[lK"E(bZDpnlU$@.l.F05G]C+TBJ)E<aWDMhIM9Tkr]'lQ/8rVb\#1i9c
+:B;6)1)a;<)NZ<;"l,nm$jlSg2/'rFE*)HiV6?Us<3$Q$i:o*T#$5-RH@LJV`jjB-
+1\69TQsWX5P\7uldT-eBZej`5\fVi-/,+i1UY)QsDrmJl)@:McArk*1i7Fk88tQJ-
+N5;t9.=lBU13-YDQ*Jj&"9:\m2Y\<!KfQ87X[\5P)])F"VEpfm<7ucTj%;R7/0@%f
+^doiL$.s@3c]mk%+FMeY(!'EQK#fG7lq$?iO+(98=5#733lhO5-BCaqj_K5F_q\O?
+QS^Z\:Y/V&:#DLf*E@:J#lST'PS_[,DK:]8kk80OL\"A_YDk6%Ucq`;0WWW!j;02Y
+lM91@i%6HM)hbSfDfKrsa]S`sjF37_ETp8Gg3q"[H^.8=og&6uV!+@hG]e#BLa65K
+f=BX9!-D%j=trY[9t(dqoo,@!VKpO6RqJ+tSU4&.L+N1<Qeu@XJ*F@\8EN$\3u4\8
+oM])?rH.FbX,\DLNU)Y"KW:(#0[TF`C3"sXKYQD%N1u&eKtHRZ#,TZufYP)`DTj?/
+AJ8"gj6i$`4sN!_dqppq%?*E:Pg6nV*290XKQ(*;ZNo1+?;T<C&Uo-NkRtWZ>t_sD
+/rce\8Ie`WpqG4FjUJWOTHVSLgdf_Nd&Z0rg*`a?L9:[\LY*&4/pU(C5C!QATNcL%
+9;m:XpRFY-]2\M#/:4ph`kcVc&M;'3NeL1&ML.e*G)2(dkVl[bPh:bi1!@;]AJs?5
+El@_&e?l`6d"//+U7bS=YP#-(V<n%b\uq]A.k$grT7LXW<aZEA&^G%;h,ne_I]!Ao
+gMSD&s6kDfQs#f91-[4t>g/N*D87o=L#k,&#id1bE<\d6*0<eG6Ge#W-9)uZ!l3L=
+!FA'r4G:u]1oGjJk4r2+\mf.M5`ql2""6TBc8fR:.k%3&Kc#t:ht<-N]Q2Fj/V<;"
+e^)$f<ret8j'/@LJ(RIUMr&*GQ*5_U%<<fk!u)Kis)BtTSYuNS&bunZ0_dSR,n(HG
+STQKsD!',\_)]UK=Q,%g=VXRH^56M70Co-sSN!g@@rq"#`.2#taEkTOSnq*%@I$\8
+B[*fqeC'(O"<I"6T!-]8H;p6el13^uZ0nMqh,cBI&+Un\Ef6!:1a(\GrRNE4C_,cA
+Ac94Hf._W"7fJL\'sQYH#n.m+d/DO<a!G<IXUDM$>kF:E7\2B`A#tI@)C/B]Vf^iQ
+o\o@@K_bLK?fqS2kQh9`l!Bk&<9[InE2gXUc!3m,7Ip==VeB6VJDcC'&+I%X/fmN$
+;R`ja`PS[2Sj,>K^+H0[?dFqQ87IXG]=$SoTX<Js(9lFd73"Bm]omBKlGr;:^BX`R)bUb~>
+endstream
+endobj
+65 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+67 0 obj
+<<
+/Length 2122
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YPlbAu>q']&(*1u;?+0bjb;0AEAKUruf&NLU.u68E&-;#-4<^Ft+q$N_RgB=`mV
+nRMV2\2_"%F7ed5p0j61aaCLcq+F';^A-lj;'Q#;D!BFEl8\Cuqq6a#J!9]B&`_Db
+[b/(4I+st"C6j3IYrY+NmooF'qlooT,:!Y_^@)_DD"VeV31&uPpJlYKJmb!X=fO\K
+#r@W_SH]u"Ka!Xui?E43V['cpOXuCOnSCr+Q%MWpR"Fm)=)',q)?L$eR(,6ZX$[$\
+%<Ma5_^YbDGpFO^]Mhpt",1C$=?X!F4a8dp98gHK_b^itB/;*k0(0:PQr5s#+8@0I
+Qm;Gb%prCfc:AcabF-NLl\+f6;VT)CJW8[(Mg11K*(Kc:r'aB0b_j5__$W$(JICK<
+5FHkI'`!jlMC]1`7VAr+"V+nh-7XQ<*Yq"I%?RkFb%ffrWdS1b;Ao$*[V\'F\MU'i
+_=1FqI@VI@XN$NB?ATh&=!&@;0-:\Tq'1oXZ=_kbn-V?M;qpPp,m6EJ^miYL<6?<g
+.pfIQh6q*A_YI-pSiZOq)<]bn_)L6U[:,Cg&k?%2_)-c$hAsFuT3aAX@WKhHn7LAH
+&5jI8N?]ac>Fr>:*;c1K-NrG;a<*c:`b;6"`-V#T+J3NT8APe;ATrc%Xak!^"A);K
+XOGJOaP"d5hh]\#RmU/],<t'"U;,Oqd5:4mXG-c;pJm]lD2lCW]TVBO"M`LhVq$;F
+=>2L5DFD8Wh5N$-G0l6iI/cj*I*ZfG:nb`R6DMKg1:[c<MED_'[UZ,+OLIX1-7-X2
+L!0aR,![>"4q`+:8QL3CJu8X<77AF37%nHiaVh"1(_!ZU&CO%lPL+b<#b01teI,o\
+]hO;%Bo:nk2X4CR+&fYHFR\/>T7!X`=KM7Cbt3uL[X@X;\.qqW9;9?pB6<E*6mQ?+
+.L<]V`K=up*%sj>8MI/eO:b&*9pBB2$7#+)@H:Y0M"JQ?AsP+p,@NuSE^^Y@06Gu)
+=L!?g3<TWE;\!L`r+m6+P,?qHmk0@qa3U)>Zu:I>1cM(a!6?a+,!bdlR`I=u0ru>P
+qe9Fs5kQ@f+-ETkqhFdb<L1\-nqkL70j](Fh2-SVmS<O_&84S_HslCGRZAFQ]Jtb'
+$m46EJEBf-R&5.UQ[(HZI'CN]o%=[%00(b]BM``_15HMHW^e(>W#kF)0%JhnbJt+9
+LK5Xr9=bOra$P1)Q]bWReC3&FL-Oa&m+WE/<KK:[%`bOc,o"WS0Dm":`tIN;Rb$LW
+h]*J.[N&gY*8,P=`MQP#f:-e#aO['`a`k8I2:?h*0"#@cD:pG@Z$MaTc)!M?^P(F]
+]c5*)n#dO7.:XLKet\@t?-;jYa*GAe:bWOI@iDb8e;F2Jk;r#U)0I_/&J89>91W/'
+?q?l3`^N)b=otP!,*Kq*p0bkGBgkAOFTJt0T)n6R+:[ZC+5!aH"_njJ6(9o/$R&LZ
+_s'Re]P4%cBneCSjdM:$h_2"f*!`IIWcgGRD2aBqACVE>/]Lj,60MgPIb)aaOiZ=A
+$\@&<<9?c!e7h<F[un@V*K%iCCLFAO9$qHYa%\BZZ]B`Dkh3esJhXPBL_qKo.\P#R
+7`H-6>aP%oB[Cq0E_.6YP'u1q$EL&b'U2d5BBYW!WIO,upbkuV=<cjZ-rMc+S[(EL
+:)-a()dt6:Y@lXTmYeY)K3u6fEnTbJpMMT^<hFuW6(5?trme[>1r(3#1`erLFd<M"
+J1W89gG"Sk>p\G$;9kQ-:uVbCdkK'ROSDH6pVf3(/>g9u'\&(&*Qt\2QIduMFN5+$
+R0[m.V<WS&C&+e.C-ogR$#1l#N7Y&(&a%#CB%=\\*f`R1bZj:R@;$%$p#6i1U@oBC
+g0nUApep'0*H+OjpU`^uZqIn&#psdu1N/sc@%@^P?\5g6fGf.4Rtp14@#]FOi%YD=
+(cGEd_S3snRg604Qhq[\&'/(g%&AG_YX_sW'f-qW4Wu[4?6=6`+b5Z^c4GQ>AqfkX
+eEWp4Mu1M(>&_EeY<L_c9eY=Mo$g./L%i,`G,9RPZbDbg;t*G&s)fHsT:DMhEh-Gq
+IcP/8A&nIM)qsLNBYicR^k,[4g9>GQ=;HTe#5p>I5=?kEIj0P*c2?EB;0)$tea1$O
+!&I)5_#~>
+endstream
+endobj
+68 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T6 39 0 R
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+70 0 obj
+<<
+/Length 1585
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wj<9p;>1&A@sBpbk+>GS!1INnN,\._1;'B+M;1D.PH3O?ChdqriYJP0NE'CSk^J
+OC!.GfA11kDH<qM?))O`>\.-(Y;?-@g*`nMZ[/,&lfPLqeu.'aTDtSW8a>L$YY*d&
+p*Pg/rZHD<(X]Z3^C9T/jkH[.GD/kQ[oo"?%G#o0-#ZAu'RST%GNo#<TmU(r26hM"
+nSZqb/ZYp@+L@)i"ae6+`TaJXiSK2["^1OgYA95toAB?K3)C:Z_eAt[-&dtq,J-;W
+=hYl0?=,a@kQ]/d"i('oJCgZAl:mE!b&#`WT*KMqUj8qf9@TBI@m>ngf',uKHt%L3
+O)C#,gl&FcOX^=_Hu&^f+^AR'mOn$6N*Gd&\WQrB(j^Obcn]!FQRF3W^`2P:0sN2_
+oQ"`n<Oak'!HL-Q.3%<3Tr?*C/F_<^U\ZPd+YO3Wl&iBQ_O.oP;Jc@(nYf$`k#.0'
+g6:EO[gZ\/o%md:FV0B/35[)]@UR)o@ACaOHn&oi<`ssNs4g\th&%UrQl(@=OOF*P
+>7N>W/sTLXoZNuj:&pO;.V)G6"7*BR/kc<VGKK;Z#PcK>3]<IJTp2>YZ)8uoeDWu,
++D+c2grlpkCfAOM!mqdljmk*_4hPXJDe<7Vjp3Mqhf]W\0D^l6nd%>,=a1AdNkh*<
+qBop!<IERkl%nq&]#5>0P_p<'?,^%jXQuso:0ME>=*;UHLI4@qK5k4N)/l!1:);,K
+Q72jPpG;PT-PS\&r4p:`X4*dMiOQ<I$!0/Ah4,Jk"%GeP?;2GEVi09"af2f[ZtOjI
+W-#hRTK^crA`67]Wkr5FD0h/YAJW*4Fr,Qg\6LOU</,U(,9KhRMea8<OWp\H0><-0
+r"OfR\SC6"cgk33*'C/cB_<lJ!9L*UEpC99"D1dI:Ya@\PK,HqGs!JM-F9O\\[9aZ
+"[rbT(Y$gX"m&ZhbUl9nf<h"uQc+g#]310f`0KAo5W2n`f_*j9DX;EV6.s.gXl`T8
+T'Upq)9Mml;LNlL)WbT-q"<DYF(<\o.T5s8@_>8rqW1TDJ/f[ni&<<hb24.m?K2iU
+?D0s!(Od55ASmjc&qt2A,c>a4\^&)/N?Qb%,Db5UW`Ln]77_aM>IU(i+PM#u3CH<0
+PMGu'`NIJ;C^C*Qc)PdYGUak',&%ft")Gbo;,R+egd'uk&,OGSY%&0R,&eQGC8]kp
+L7n"a<##Y#@S."]NKHmnHqQ05&N>3,23NYM##PLd*^&uqj[1ioD-j-%^ZA^4\Z:t^
+4!(j[6:bck:OO&9hdd.cQ+l#Y^s_h>(?BZ.pG@MXbLER@p=%a?4#;!c=,B7M4#W?Z
+$7WHLKHp0Lql\.mmVk-fkR2IC9P?GQME6fg].!k<6JhF8V9!O-E"SnFm_tmugumdU
+pNe%IiX6QX1M?8-3_HEN?A=b9B2Mo]p+2%)-o3?nUF9s@\i2g)L%J4\AR%Y!@`Dj?
+rUqa44Ps%]B9URS5TNSCbZ_*CgHpdUka:dU303ZnGd?4ifEF#<XdtQ74N"/C1bP#(
+0YNlLO).FoBmRscn*X3amM66mD4;'?n>cO5"a-9l;Nk^&1e(>NN.,VErso)C?(DN~>
+endstream
+endobj
+71 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+73 0 obj
+<<
+/Length 2356
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WR495iiK&AJ$C"R*[B&M#'uU:SES]3QsaTY8i?%o*U<RC6,:Os/5pVFCN3aVbRW
+-;MtV/f#5AH%+X5o]'P'[h1RcB!Yhi1#k3Lrk!nlV>cf\EPcWPVaYWI=PS?#NSPR$
+rHm!EU//i+XQ6nFr3==g*[aOr[-6YM7?kgSO;1o'ks+n2dq)FpWVs0j&*E98-:=P>
+.=Bh)TTj`J=c+U'^ZS&XJhe(`XB?\`9(B1g\W8o+bR9Zh7d]HQ>,V3l1lSI&=-&iC
+(MT"91LQtgFLe",Z>:4[j[.V#_]E[$"H>4']^h=&glF;a<>9n,m:9O(6-/=nA&q5V
+e<&KeiDod-e/2V^)HgrR7p5<7%P4JKM2*Oqo2W[#PdrX9_o@9NGNNI;(;<'lJ-;Y1
+A)6T7d)%4iSZ24kCR\M86bi>Xeik?1CER]aP[tb;NLs'g)!gd5!^`]qo[:++5-EJL
+1?+M;8fLt*dQCt;1WI'ID5.n[9A^B_lRIbbUk/XMa66>IRrf,gXY59LQAEm(*U?"S
+S3"6RQUs!g)JkO(RX-6Ul+aD@GBn]&)e7cnSM"SN&2_$T0Gnj])`kXHgQ\".U@QZ"
+bW<:9QZKsAPiVpXlVt*G;SL\oFI=.E;B8KRfn5gr.[?dI=@A_b9E^lc.S.f;_^Jga
+#(tDab".WeBte]RG-@(KEh<&lSq);)`R$akoj%1$SCY:m\e!M@q+NI&Y#X>J_=;$B
+h>e@;O_/ZD1ni%58LbFpa33-DnV"Hp*6so-;Voe13LU^)IsTeY'Kiki89Y;5-dA?L
+R>:BIR2@f%R\VPEE)V*cb\h<YXr'Vg.2V!8IVD>cNlf:e-HH0BS9j!LH>7YE^98tO
+QOgCRl0@K_iM%uKD%Ds@@.Z/$bJrl*aB@++Kqm\`&_!f*YUj'%0i5OU8:IU8CYM='
+_-@r,XMZA?&$$X%$9N,Bp-4I)oYlPr-I[?%#8`=3TdLjVTRl9TqK$VX);DKdkcsO>
+QY@$tjd+\o?n^EXVJO0.o=:_l\*Tp>$O$pQqE[t^AjU8I:AQf"HE`*]NFHdd,ZVGd
+"9:VR?V/LQ=TE3JTsf)tEQTY>%Eig2,]"\uO!8CYLl[t$)B[uEA.C:Ni/:t^f[["1
+'A]:DP8Z*6\nH[[XC>EYBWc(M7]D$+\'QG,17X/LjO&(&D?E7`TJf@E&m!Tg@aJA,
+C$MoD!NF:;FrH(qC]aeJVBntGA%/7BX@Y/*;+?EocnV,t3C(qujo-gO0fUWKk]pl'
+_TYY/H,lUJ:KYt;O-#Z8#JiQU-"2/@W&W=>UULJ^%L[:oTG!K/dr3.ca&t+o7Wl]#
+;Qg-<Z&ii8-aGsfYu68G[\,*.qf&C!1;Yc_R8s+9ClT>sB2t%$Dus@U7Bge(ab0!(
+'M.-m:FL63n8%^A""/!RA1gNncn?+sUSXYRmj>(og&*]/BAbn\>]V:*llZb+JK/g3
+cP&g3Xkap([oZ8=h7DoYW$bB@*YkY1K@8M;nF0DdDD^'B_UCX;ZQWb('uIjUmn[*f
+LN^$[U"OSer'T+?FY/u7;TjYU+!$pc-kF_R_e&YJq>fb=(Mr*AA!=&?2&q,PGtDPZ
+#9"1+[NKE'A>=b$`g=-S0"i::$FCM->iuoF;`H_`9C"o\<KXnF-"PBoq)_CkHqi;2
+A?JP'n!i_f\6jRTBU_`U/'rVXIK]00"/W'c2][*:TZ%G&N!CF4<+9Q<@f$qU(tKU+
+91g,]NtC=5HOkb,s+^X?=n_M[6LN;Zo3K+\S#5;NT7:3WC,7JKkts+ss/`-M,Im0u
+;fr6dh"lUbb$L(0r&9F"oaXCO>BIa.8deM]d.&h,Do'OU%2\OU3&<X+ZR=`tbfQU9
+$aq2\QfkNc68U(j*!VEKcb&9`7cA8)<'7usgSpjqpg!.j4%iiW5N0GZLs>AXYd+SA
+B7F=sWnd:]!qH)"dpp([NL?%'nsdLB(OkA'-P%^aZ.;;Q.K@5E!)CR:c[WiXii[S"
+&78TSneA_+3i<r^!a.#0k@p$\e1DhM*\>ogO:8gYPg5b9BQ/0EQ%t!t/X;>f!'@1I
+&(_aD2SI"1T9%G:+.cZj_H7EVlLuHg[Hk)/Rd^&n]/s7`>cPh@4?f_;MYQVe7`.C%
+gAR:-?K5Asd"a0b^UM42N[0o3Jh]cV\[foG31uEi[(<?(f3h1<Zo`G5AAeD(h/53^
+3N-"^a%[N/bX<q-(ukX<Cd[p(^.0mdnl>+>?<-QrKd-]R*Z+[CB49l^[!ND-iS&&A
+UUM#sP[2jm!Ms5:FPZ=!c7_m6>i+0ultr0!mD59D<PCAp7,;U?o=9K]L4F2^ChnpA
+S+$OjS]LKZ]0*S,P@^SE+tp:5GI-)[qRfu/1B8R3;;M~>
+endstream
+endobj
+74 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 75 0 R
+/T7 21 0 R
+/T8 22 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+77 0 obj
+<<
+/Length 2961
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X]T95iV,&\dR4kVa[$1[YL?=leL0m)4h$,!]`N$crX2CsC>hO:'*lXShp:=*6C4
+7LpWX>.TeYm-8nEp!qYYmk3JcUpuYU]=SHUQ0M9"rs_(*`O8a4\L=pR?1*^hic9P=
+rpTlMQi"lgn*5gR1X,I@md#SN[,&.eRp1?S=?j@(pU_'?((u,/?CrQ#?#?q]6EK@&
+\b`W/`I=-5B0+Stdf/4GlX)l*gAUQf&%d<F>=k^in"t:n'SV$bBZHf2ihF`@aHDkI
+lMLXB\mU1f_;!\T<K1j<gR7!Q!0/?<r$f__)^1EZYoa;HOaHDgB`&p/FkmL,ZZRWF
+*A$Oem6pj18\1f,G3VE@BD'U\4W0j8I5P'3C#CMRBMX^f3R:ScW1C-q.:qqeY'kpK
+X^&*kP/0igFQZesm:V9A,piEM$K<J?f[fHj#=qn$e+=,5Ts#po8*R:0YUIrP%].Qi
+F)Y?B_8f.4hhDdKFEX6An0Lq+f6>+<X%=4pDdB!4GrW84WTJ@(YL3EAkqJX=#&7/8
+OX1IH\]$A3N$,HEHQTs\dBo[Jk@&0]PU+?fFRHF!lbW"1AX'`c4a,A035WO_k&W(0
+0&D3A,#1o^k!g/d`/e1uXR5Y^-IQuI<-G$/JSB6-J]"+,_WfqLAurRfo\NPg7ED%^
+nPmi4d0*G#<DPj9qNq`j2OZ+;&*Bp>_JBoHo>d.Q.blC"QAkBW]s\[LVjQr'n\-gJ
+30e<E<99snBP`;]&2Mo:'bO0jZRkgWI;$mcF=kIuX_Y^lg>69N!h-`bq2+3Q,B]aI
+0abUoVQ&DG2A[hfK%m4Ddc(\`95Cl,;Z*8X_eRhJXR6BJB)-PQ:PF.!h-*$DiK/U!
+4CBd7+lYbDg1%:bOsRWtfI13>@Qc[]r_D<Q.(&rE4N-iT7+6@Fp!XP*GOL%bW=t$a
+8$K1+GKdtA&u"5qFG<CY&(j`'S7<M-%Z)lpl"Pn/GiDD[AAS"f(l-T>5]F@tosNh6
+BaZ$G\U4lNq$-W,)-75Wm:5gK>IoPQn9j[HHLi!M"p'</%KJDl+^u5iFW=;ELI,9h
+h&5_L'[Z%qTmo:FpL_DI>VJ0Xf$2p#SP?&lgZ#+a_!\%,K4AIurO0;J3q&#Z7RLjM
+[\)]<!f"<P"p;Z^kO9#g"8g3bF?m948W<#('B&F;"o`OD?a%bdgA)7P-*=8_+QF9a
+)2#G$lLT8L4Jh(d]MmS:+dV.B)E.FT-3!dPR4o?)&jd_tYCLD\M5J*a"$BQ]@'d55
+YkK.]"iKRe4u$G;8hWP*+u;,(+\=4C/TXOpUCodH1?#i'o[F+,@m=#g#BI6oHEW:e
+l#+28g4"pmnrIu^f-+.i8^;KA@L=5T:,\KBnbjB"5j!?B*Vp"(i&n%%)*/n^o,$A7
+bppB^DETIY'RYJ;Di1p?<CopI%VXRBrppXsb5kEUXcp5qa2Yt.,48Q_6nYh(^1m9f
+Udke&q:Hl4P/QLK36jjPP1^B!q*F]t3NC/FErJkp=]UWG_Yj-qo0Y=pm/P-83W";<
+L)/omW=#0)"3gp")T6&$@s@QUgO0FPeB5-/KM\a`<$"NB=X\-%O)7sXYn!K/!htR4
+7"1d:DNQ\P[j-K3H:[.mn-QajZ)bgkM\/I"^!_XS*2.`5*_1_1b7ja?.<p/MWK1A_
+dk./27W2ErXWP]re3R`8>faDa2q,p1#=X!U%sDC"HPpNQRl'l?+IkE3L>*"V0E"-k
+d"JaZE,DF3P:EFF+=s*g/bgWW=uf!JElmt:&fMdb;K`(G!\E?:]cADh]>Y7g')5s:
+j)m+X_<V2\e/+;,Zd!#uNE8lSRF9%dkY>(po=noEE`\[\EcY9((soo-E2jr`lnAR:
+<K0X!"rRH]8YaS;%3+"s02Wd\;Xp_.?C9PG((e#WQ,Td#\)m>nm9*u'F'peXX&%P4
+AuL>qlL0Jt=?2WfUrA7Y9cmloR-(sWM59d<5A)O8k$=!KP<_8sg>@*SD5P'UHn%ts
+ae2(@fK2[^3.^cSab+^MDG+>24g3je#<<#H$s*eBh4Kg[e<u1r@-dN(Vn&7i9Cn+C
+"&^)=hgS_!&[tXfK$OD[nZcgr*J2?&'os#j`uYIu;jB+NZT"D>=ii&^k6MXEQCokH
+d^us1",.14qFaRtMh`0168O(!+"c-I"$-iC9hC;0G!\6`aZUO.pqXHpB_$g:[*0hq
+B]HF]P`(nJ*Y2pd,q4mDB$%@s"Wq?8>L*1`4B3k#Q&e(5ojjaU0/^8.^1+2/VLaYZ
+$*<<#pAs=aD9",CF<O!JP\:kS-foW09I`OUb':ocg@3].)=YC&TX.Cmi6'GHSp_!k
+.dUit/ISGE*HO2u3Er$a_l6#-Pr`<#7W2GhVqKl+Ja@GA"9P75BOs=cTk9D!N+XA%
+Pd/Kr+Q`b1Dl*qneuRC&Qt>>[6i:fJ.4#.YH)#Fsdtgq=\+`Tb/4X4UR7MLT\mBl0
+qM-=(4kWB[gXBtPiD@'>VMWjn.;"(U:A81W1pdOA"]*Td1pluh]udQF++Va@EnDGi
+eP<4%XKPTT#GNC%he@\\6XR>tI#>"bl-K2iAZF`i4aOeJKt'Wo58qQqm`\(R04s-/
+bJWP-b;pHS8K*LdGF/W8H7"i-#>)aRmG^Qmk?Ep75W3+ZFbg*KI>W>7bgEFPRH`jk
+l3WXY/\7[arB?H]$KZ<1dmOH<ok89>4MXB#c)>3RDEV_\q>:OGa3o/Vfe_Ndj#mf.
+9P/Xl7p;@Y!VnR)l_,8BgZ=lbLTnH75cej?3``mp$ek65mBJcfkF%RXIIr4,;aHn6
+aQkV&jsM(o:5iX'e,gXemc&'V[tM#<.=Y]=;ISKO:hbpbc;Tu5q5QE[(_-='5saO;
+BKm#,Oi%EM$eoe8llWK#kBbe[DE">c*u5XUS+\pLaaPRT.22D]`<-6OcLe7=hOQW]
+r(P"BXM`fKP(kB?DAlXfUhk<aGn.3FlVaYV1APJC_YL^Rq!S1m"p89~>
+endstream
+endobj
+78 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 21 0 R
+/T8 22 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+79 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im10
+/Width 180
+/Height 231
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 8773
+/Filter [/ASCII85Decode /DCTDecode]
+>>
+stream
+s4IA>!"M;*Ddm8XA:OX[!!*&R!(-_l"pP89"pbD;#RgtD#Rh1M#RCbI&.K'Y%1Nj\
+$k<^U%L`p[&ebrm&e>fr)B'G0,9e<U,:=id-RU8h-RU;A^]4`J!9X?h!<FAEs24oc
+!!!!(!<E3%!<<*"z!!EH-!X8Z*#7(VC$P3:>!<WE*"9Jc4!sAZ0!cnAD!tbY9"X+L5
+5u@h"@3T]B'JbfE#8OL1,Jd:*iA26Yn0E%+nKgOZ;j*l\@roLE6mn1nZSiV!A9>`;
+iWpl`#mqLeKTnnpUpO1O<@AdVj7C4=jRd#+KpALB`RX)CAp/opVRFLqk4U`(=(c`4
+Q`%=5fB;lf86BPMLmY-NaOo_O.60t&BmGQ'WO^.(l1lei8m5tUMOLQVb1c.Ws4mYX
+!"An]!!iT+!!#4`&?B]!#pkJ_-!4&!;BQ9#/"PI5ECaKF\<2G'#qM_`<(Isa/>IMD
+e\Ke#gK@2oQ'd(6V3"+N(rW_+-sMc<G-=[DM#DK1`%5qqIn,*:2W:'A$S""E:U!Cq
+E'%ZhqAEjH6un,01+WOT[m$^b-`%ta[@gI3>+9WO:T0?KkPUL$rb0RL&cV_.!0U3/
+bo+6i5Mr+(8h^"82q1@poDV<Mrr=lfqM>.OIXfHf^ZLL4;'58Qq'?jTd@9DGrV?Hn
+,bk;=RPXuj1&?_+!.KF>.)4o'hbjCRM[00;MuID7ob%3$rrA3ZJ'AkFU-IP-nk(S2
+UGp[mqt'eY7K3?EB)7>`!.KF>.)4o'hbbKachSk'r6^m7!_Dtg_S=nqj%naSj0uM.
+=QG4q-B4fi=%M:mY:r$i%1WPbOslXT_KlY@6jQo<ek&7:GkrP*Ds"jCO6cfG>kHX?
+k\mR$Q2?'fFJV%Wrgi/a94*9X9$YlM";#WIR0Wi3.7s[Mf5CEad5ei0ec,W7j8.M4
+=PBmtmRXgKK'YZYjhfep!;5m!QXl8#F!\6#b!8kL/>R,d%OMN^E]q%sLnm-r4'Q8N
+[l$@NUk[l*&q(84BK`WJb$d#lXmOWVL,c.`Rj/Y!#OX\D*H?#G(E`+U.HB^:pOBjO
+^IVW0!5@CcrTp#$rr@&.oS(WgmLNakao;??1ObFqrr@J`m!W"qrrA3"^IVW0!5@Cc
+rTp#$rr@&.oS(WgmL&`8Z@2`Qgh-L.EW5ifg\8!lrr=<#IZV,?!.D]Pqq3n-!0S6"
+dMMaHkPb,YHp(UrrrDICIZV,?!.D]Nqq3q(IcEBO$]k&;'_1j-rrB&9]puS+f25\e
+'u-k,"@[%#!iMkjToorUO.-(KjdOZtP+V`PB)_i:q60d#XT&:b.K9D5L100S2$1h`
+es.?YrfZ+qrr@FU:jF;0G05s%fiZ''\<DSi%&1DFSV-u\E5$86h`Amq')#ebAk@Y^
+WTF#f<cG_M+6Ho=.fBU!qJZ!B3.AR;+6n6!59EdpSU#O03IW&n:OJ!>j4[cXC!n</
+'b;1DPNYNl3aqH[jn\SZ'&NKP$us%\Tcmu)TjGI:^4613ks+aAXM<kpIi](!!*+)i
+b.4hX!1'7D^tX@\>i5+TCqo)0kO:D0!:j2Mr2ZkOq.\a,K7DEVht!pd^ZDBTn2B1p
+=#^&XRkOSNrr@^jqQ$+b<RmH6[/Bq(G2Mso2uK_G0DT>XHk!R_Q-K=/.d"qR>'BDn
+ht:&0r2Z;?q.][&%DVh+c2Rbnk0*a-IU<1orr=?crrD.cfmh1@dD<T_Y(-K$ks+aA
+Cqo)0kO:D0!:j2Mr2ZkOq.]\M2uQam(4J](_WiYpH]TP-K?%*HJ4I)LOrm1nrrAA+
+J*@sQ!7boBNiE$Y/Wfu4dQ.=-WnG'+;uTuErrAj9rr?'*H9.u%[R:&p8E]uQB(U4A
+q.ticOjEu,c=KR3j_&So4\r+WPr@ahFlQf"e]C&;kPN5Drj3d<@Q^(@ci;Paq6O\X
+Rl5*9ZY%P`f'iDTeo!?l>s^R0GnRqs%oDi)=GhEXbdEtAo.0HQXZe9LUu+s1XY%K(
+XmT%-d'H0]Rlme!VZY/-6@eVIE9B,qfucPMWIN=1?hs#N0?_H^qR,Bha/N/[Kh!aZ
+KO^9.d^_6[Rm6r)n+j;%c'pV-fs>;:s3U*j]"Xe#V1($'p$H9\Tgi4sK+r4F*,ATR
+@S77n;gMn32Xk'gb9_hhf'W`oom$K+"D=1G(M65D3Wd4:,akuK-'1J-b.t<U/4,@d
+K<5./r>EZT])McjhpO]UofktFA('JHCX7bh_RV)c%D,7QP8=9[*[anpnJ4%+*pm=@
+7d3[Th^<]UB$^M)n+[g\rmoW0:?>210ac.']DQ\)Je</f[0F[h!U@/FEnFW$_gQGC
+o#Ai\4hujX,@etJ_OeXP-CT4_,\Ugn:g><r0gR\8UsYj6ImPK)>"9sX6D#+4n'Xhc
+gfiLV:UU(sMOkpY8#9Re\URks5A*`YJ$/8Arr<?Uk4Nk,\?r^IY\T"!l(tp4N`@r^
+4t_$0rrD,"P(0C%-pI&YN:Yl[18W9mAICJ,M^0jMJdSa`Y!m"bih:KuSi8R5'Js>3
+]'ho>8bLu#61@)i^KX_XRnIc+j=S95oN'd:I[gd_Es7l%#,<_D,l3@T8_PHNbjL"5
+h*)NM:&4m_s3g:YP=05]f&B$%72j7FNFX`R=-=aC[H+*\o2?J(.rG:_\c2Z*>G(bg
+ONhNekqt!'X!F(48r4HFf4/E<@YQ:<do\S\'CoNkHrW<b8#9Jh8LKDUlS9o20Y)r+
+7OkZ5)<K-U`iOlm.Q>Mao+Xh[H?9a(M69NlV#LErPUp.BJg0b',69k'-+51;JU0of
+!%TkPU%J>b_Nd"=l;R(N^J57/VP0s@0j>T<FtQHc4</s+U^8EPnTEcieQ(G+m@=L4
+eW3@=Fn[]&,Q3FKI_;g%ZZ#MpB^>O:MnM@.HHBOh*8ac2PBh)h*l?VV7AmYff/<DF
+rr>R$IsZTb-i50Mr_0,5?_ZpL]tsO#>T_QMJ,e!b1\kfU\:/&@1uu:q$QOZ/:e;#U
+OcSlMe:[4EM&^NeJq^C7+:m"_c'pV-.Fn&dd]Hk`dKVUde=^bq%hlJfTl6hY(0c'V
+K?8Ib?.sPjkTd,H0<*4+.9,<6/QrY[GIgeoXUh=X2k[RY-+-+<M-H$q5kOq)S13ob
+7$Hkt-*.mNF__g%#7"U5'FFtm=jrHQR^M\U0&o+b;/ltJgS6:qDH+^FN#c]uZ`$^9
+*jn2LYQ*,@pmXPO9!blqdi]e[.LRXf6FTgL@TO*ebUj6g$Ji_?&8J;E`CQrQ<Cd&h
+Q(>s^a7X1gVsSf$Bnq.*e'`L/DcU!b\VNZg:4uFo6PDF-^oMM851bP=3AUHMjf[3T
+HL_"8^[9O7rluUB^Yh,"L.6%PRsW?5B7fR*</J,q94q)E*1%<70hPQC-u"3R+3X:e
+VbXXH.gp,OATkP>,3Fg":B_(2>.$D9imWT8a;^0QX:M6ZPc*o.[dhF$g*;<7=f?.j
+X%,&)eS#7)nQRNbL2TrL:IrPj*PWS]fj@6oT++/@=#F;HOmC"U'gE(G1sc3Pn+j:t
+Hct/J#ebSq"Ar3iNDF$(@8jB5T)^Cj!ree>.#7,&qo7Q`2WP$fo_UaU2_L=PXY>..
+`rp61Xi2*UldX8]#3:up$k):T?@5g,@"@mXN7#`H!/kA,O-3H(E)^ht$7o%&6r?BA
+'EEI\O3O.PJ,e*f9rmMOE,?Ni!HK2j0UYa%2`+Op>1JYK@'k$<(.d(=3"1bCTS'`s
+N-96&r2O,rDqFu7jHK0+rSkKi!*Tp/0cj$XW9?.3=o-oO9,,On,\Ag)/%p3c3;e8?
+WTnN#9du"spU8g]`%E5Ume^sKI+f64\+p2anA="2<E#\u:StLC7MgkV&1!]#YJWZ:
+jF._&oqp`9kLYB\P$L7A[r>?sZpi%[L9^=0:\K3#lsIr_5dgaV(3^G!Ka`X#=G3ss
+U*7!Q9Jm1N28ahAfC/O>[p$4pmaWoN1'`ra5U%@SRA4k8X+gV#Aa4!YVY%t.`fbGR
+bh$Us*7@1c1!U:5&Y!a&ZTtmQdm"KHaF!Tr\m5!@StktX)4DLYArObsD>*+m,VI/l
+cK_'^WQ^s78M4i4ZXQkggY/<`k%'/PiZ:Pp/(Ttp4>JL:VeNUnEH>uq>tFAo"LNt[
+J/NgC<E_@dAs[i8p8H=;d-I,iUN\djQ?LFq0G<r%fhsm2!4ken\0sW+32cV29K(q3
+^Ab7A+67`d2q-+&L]/NgbDUkmcJd"<qR&?1<kbKcV(#cH,l[k2TC3NXqTs`6M"52J
+2F[;`3mKllcM_-J4Gtu&a6aZ;33@\\kI)*q-EqB4aTNgBe21RRQ_jf@^Vii1N&]5Q
+T&/W&<XE>fqFk'=$j<qFi9h&!#lA*-k,AULfbmKR"_cTBQK$>kY,.4TaIGm4LVtZc
+mtDfc^!rm(QKIlq/-qt]RcSEf8RuSCW[!UY?87H_)@E$iq>\k2gm='ON\mpleFCW#
+R'd<k4\JPA`^H8HbdP`/"Dk3[?:ka^F]%Q-"87O$e90#6qbOf/Si_3B\W"J`S89'C
+[V_gc't3p_qde.!g3m!DW.Yr!'YpsR&0W,+&3:/09rM10Bf4+*`/k\Eng&Ad>*J;-
+5LMjt!8`',R?)@P(r,>`d2B[)W6,"_Ld4$"An=@/a3\%O`gOL\;>,@8UJodmK_"sX
+8Ju=Ca"-dm0>5<1cH#;gQ.8[U3/U6+!"4\#@:O'795@Y'EXJ.n2,ZqJ<C$&i3OAb6
+n+k*jnu7,b&,D]X:Wq)YMY$d[5NKb.1X2C#]![:`'*R<pG?,Y<Yis5V&VU/aTJ(Rh
+lfmYUrr@>jWDE3#?9Gpr;qhd6D.0c(5ldX:P"tAfHF"[RifZcp,=O):7MKDs`ZU^u
+RP,<cP,>(Q-<<:DgngM1`8=)6=?!-qO@[18BG<r\PP[u9!=(jhe":@n;X#*Q[dg`.
+'[!^I/Fkp#PiC)FOIC08[h5k+?DQP&Uc2?<`q&Ta-a+_P(g9n2ZeH#']qaK('XM-1
+nD$<K`bT^_B4g0KZ\$RuXJgB+Yc#5.Ul$&<e8;&,CEC<[&glkiE41$3r<nM^QIEnK
+ZMe.JlNlu]jm/pSLi+g4:qa681'>J%C`!9*Q!3tB\[,ZZehj562N;tf\.5d2MiM&4
+nPuL!D=cKd7j:Q`/8Q=H#"BP`%cE:hJ,e#_J)sT.!1k3\kH7B@00e;Dch3t2!0\#U
+cSfUmZY%IO"('X6l4BG3[-!Y7-q^eLrM='JKC[@ge`lpcQ2[t0B6/!8.(4uYXm5Ce
+<apXr.]T#(>B<a7g:8B6eKCG^Bd)GYKVYOKE970H,a@<GA<8<FFW250b/!W5p,=NJ
+T%YV=!fJ9G/dG7mWDQH-:\7qumh<qXlr&+Crr<,E<;e%#eSjLIk5;o=rFR=)p`DlM
+qJ0>*l1N5HGod-u\r[GVBd>P*C0#d_ra,C>O%6^lH^V#HU(r_+k#$';Mb3T>:lQ/F
+'f0c7!;7*IA<>[#>B1([-lCKfO^,2qqRk=XW;ciFC_[EXNQE\fFVN%\Lu_Suo_Tos
+1&h6rV>gNbrrDXL5QB=!T9l2=($GG?J'!N;B:Ceqfs>;8RhM5)\;!O#'ol9Bj4T+r
+J,e-dp9mUE-/:9l^T_nqg2^#E;p?R=.Em+.g!c(Vj]ZfGYG&MVh-S0QW>(HL_(;l[
+6SlV&7p+<]i\I@C)PX",ROsi%B5JPn8qcZu`];+1+5KHOb03$j#c-!$>4f^K0>>u2
+Z$22#Q<.'V<KDpSbd,WA\dGVB9kfZmeEuo1iWX95<Ppcr1:,(>AYD9HDR_V`CeB%i
+CQK=o'U_C',Z)C-^M"VK?CZN9Zb7Cfl2=hIVa8@aWCg*c.?]2(chE=grFeFV`-MC0
+n+j;%c'pV-fs>*%^7P15V%i@_D<1s5i),H8:,5SbX#NA?pM+n4s3^9/(5Y*Z<LOfT
+;.ko?JGrKg'kR)HIf)nmg'1Y4pnP(q3Kt*hf:_!5)uPkCm9[[aT(9`=>3:))U9&`Z
+mNlgXNls*gY99iE3'<![BhEM$jYhmAQ;Iq1RoET^ASu]5JRr%_7gQ8u6ciB$&NiR/
+7VpbaP5<RUb0BVX7J)&2cdeuSa404oQV(2j8cJcD5Mdp:oq;<bP7cm%5QB1#q6O\X
+Rl5*9YrUd'i[9IX<,k9"M"_.Z*O-PdUa4[LTCeM$-+XBom'<h?RuYPCQ2f>%Y)+>X
+8>20")-BiLH@cVB?:Ur.n2';Wf0)IR\Pa5R6B<@b$9sc=i&HYtU0(\p/i@";cYF;l
+@\+NKkqnNqM%CoD#up=%3;064#>#?tQZgtZgbm'V<\KG/3ls0%,??LKYA^c(\8.4d
+:X.([l;H9I:_eeo?1)r%'S\X)Z2.2b+'+31^+(/C*,0_Ue5BcGX>3,`Nu3=VF,Dul
+084(0WChMHpTd2QZMLDsa,M<#IS>!Z:\'ElT7#^L;uZigp[ik=r,_fD<7A#X=0>5H
+00e;Dch3t2!0\#UcSg:QeF34>B$Hf'CtZ'4MfC]Z0hG3m.7[B&`#dqXCN*ld8QUVa
+6nH`GJC:-X`ET9*`#Sg-n(:WYAsYQ,[\#[F6T'q#,S<%+/K4.[g[-4aOR;cSQ)Gr>
+BsHnL=('2k%4`+:@KfWjOk-$u+55K/_*=[]J)?SWoTaLt!*+!Pj3%(^'0eKg2Y0%O
+>X\/.m*-=f+?>m\IK<8EpSBQgdVQlp[D4/17FfE@htOV^qob;o4F2rA>eSC]NT,cL
+8lbgM"Jm',Sm88!A&bl4W3/Da62pp844L$(lJ/AWnu&HoZV&j(,l[k2TC3NXqTs`6
+M"52J2LkbXn+j;%c'pV-fs!Wa\#[MNLlUU^m\Qgre>%8hG99UW%Q`J)9Gpu]3MY;1
+No`k2C3ps#fC'LkG.0n7`%*&cfj[,g?G'L@blsrGZEcb'7^)O\Jan5kHi5pbV)=S4
+TZ_.4g?].Wpn[\7OFDd19J2dUY-+5i`oc%*P#S"UGgAQn7.<0GcFgk@'?7$U#f54q
+S,+ieM-4"2*?$W4`.5*_&&``77/D&/fO:;Frr=O8r:&tN!'P?oq0Du0?@T'^r0WNl
+H*_,/s3U61ZY%IO2Jh'O$]B'L=^l;Ei]?RXTT86r\t#gJV4!9?0;WWWaU8YN+3^O/
+V*0ms6W'KUdI6n8Re'%<9B1A9,-*P_bl!<s0_(r+@KO"KUN'5^)I\oEb0S1%R-'E\
+=IZ>BU%_J[LtL__b!5HrJ'SZ$S!$RjchE=grFeFV`-F/`Rl5*_ddR"<B$Hf'CtZ'4
+MfkNk#t[tE.9EOAiX^%d'8Ge8$Yub4EVh,&P(EL-PPD=YntA;Je*m+;$]A,i33uU2
+:[[@4`R__9HoBb#O)]^<F\gDI1"91-?.)847#OkJTg&o:C-b!A#H/WOlZ7Q:5/4p^
+J'n81$N(n0c]9RJYJ*]F00e;Dch3t2!0\#UcSfUmZY0<fn+j;%c'pV-fs*PGMKm?D
++H[17@8VT$:Lga&\@(]HX32@L@J67Ab2'^G\^1<+l5(LI\@fD><7C7eAG$d%&sY#e
+Q@E.1>tOh>Ss&k%r!l=ND9]G:Q`AJ'Zk4el*#&_`"[K9?J@5899C4aAmi[X8k'3OC
+71I4JPp'aG5g]%LNcU7N5P\Hs=5l@rWpo!%O/Ya"fdQd2rr@;I5LtJd9Lk:/fs>;8
+Rm6r(n+j;%c'pV-fs>'hD!N<ACE^0X^=rW**eK$p6eCH+Dg_T:mU':IIC0>S+Eb1]
+c6&Hm[%@3F!TT*L6$[?KU.Aj$R1E0E1:$Wp5oIi?\,<>q*8?h1WTn?C^8K]L`kOqt
+:\f;8nQp^I#Q0sM-@)q0c'pV-s3U61ZY%IO2Jh'QB$^M)mVf!g?)<+Dg/]K*^t_4'
+X#+FnZ1hfib]pVpXR7(S0<9*cG3*(0m<%AqU7!D,]`.tVY<UTjr_,hG4P@&Qc'pV-
+s3gB3ZY%IO2Jh'QB$^M+P^hdmrrAgDq4!OCbKop?oDN>ejMZ="c'pV-fs>;8TE!F0
+q6O\XRl5*9ZY(]d!6V/<!(QoOkH9=7e`i]mTC3NXqTs`6M"52J2Jh'QB$Hf'J,e*g
+q6O\XRl5*9Z]ot$;Z?`g+7hE:T9l2=($GG?J'!N<s4?`8ZY%IO2Jh'QB$^M(n+j;%
+c'pV-fucPMWIN=1?hs#N:Wq)YMY$d[5NKb.1XH*Kn+j;%c'pV-fs>;:s3gB3ZY%IO
+2JhIsq,G,mhu76KO7MO8/8j!'!&PAlr\-j+9\KHpn+j;%c'pV-fs>;:s4$N5ZY%IO
+2KG7Iq-"b_YP/d8&^%hk?<"'2o"U`+dqtsT/JhC"&*]K#4[/7bQ&-%_Jg8bPiVNO`
+C*p@ZeuU8L/#M3AC'=b`pT@TqXF3b@V2\j]iO?Sp7lU@II7sR9NF2\D\%hT+5QB9*
+rrC3^eA(9Nec,X;)ghSb<-*Q3a4.lh=OmEOmMgNQ!*"#hb/`#@rrAU"=8r91D=@F#
+c2Rbo+&`+=WFK$0!4Zn7rDCi>!%T-hrrB$.=8r91D=@F#c2Rbo+&`+=WFK$0!4Zn7
+rDCi>!%T-hrrB$.=8r91D=@F#c2Rbo+&`+=WFK$0!4Zn7rDCi>!%T-hrrB$.=8r91
+D=@F#c2Rbo+&`+=WFK$0!4Zn7rDCi>!%T-hrrB$.=8r91D=@F#c2Rbo+&`+=WFK$0
+!4Zn7rDCo@et2mAb/`#Hl<)U:!:CeQrr?#>J',g]^ZnqOrrDI+HiF(FF+;?QeA(9N
+ec,X;)ghSb<-*Q3a4.lh=OmEOmMgNQ!*"!jo,CP=<BaU:PS+",VVb2\*M=c1r`24Z
+rr>s:YQ"TAgY_k&OH8p6rr='gPPl;rqVPAPeGc:clZ2YKrSOHoT(LA/f`~>
+endstream
+endobj
+80 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im11
+/Width 180
+/Height 231
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 10059
+/Filter [/ASCII85Decode /DCTDecode]
+>>
+stream
+s4IA>!"M;*Ddm8XA:OX[!!*&R!(-_l"pP89"pbD;#RgtD#Rh1M#RCbI&.K'Y%1Nj\
+$k<^U%L`p[&ebrm&e>fr)B'G0,9e<U,:=id-RU8h-RU;A^]4`J!9X?h!<FAEs24oc
+!!!!(!<E3%!<<*"z!!EH-!X8Z*#7(VC$P3:>!<WE*"9Jc4!sAZ0!cnAD!tbY9"X+L5
+5u@h"@3T]B'JbfE#8OL1,Jd:*iA26Yn0E%+nKgOZ;j*l\@roLE6mn1nZSiV!A9>`;
+iWpl`#mqLeKTnnpUpO1O<@AdVj7C4=jRd#+KpALB`RX)CAp/opVRFLqk4U`(=(c`4
+Q`%=5fB;lf86BPMLmY-NaOo_O.60t&BmGQ'WO^.(l1lei8m5tUMOLQVb1c.Ws4mYX
+!"An]!!iT+!!#4`&?B]!#pkJ_-!4&!;BQ9#/"PI5ECaKF\<2G'#qM_`<(Isa/>IMD
+e\Ke#gK@2oQ'd(6V3"+N(rW_+-sMc<G-=[DM#DK1`%5qqIn,*:2W:'A$S""E:U!Cq
+E'%ZhqAEjH6un,01+WOT[m$^b-`%ta[@gI3>+9WO:T0?KkPUL$rb0RL&cV_.!0U3/
+bo+6i5Mr+(8h^"82q1@poDV<Mrr=lfqM>.OIXfHf^ZLL4;'58Qq'?jTd@9DGrV?Hn
+,bk;=RPXuj1&?_+!.KF>.)4o'hbjCRM[00;MuID7ob%3$rrA3ZJ'AkFU-IP-nk(S2
+UGp[mqt'eY7K3?EB)7>`!.KF>.)4o'hbbKachSk'r6^m7!_Dtg_S=nqj%naSj0uM.
+=QG4q-B4fi=%M:mY:r$i%1WPbOslXT_KlY@6jQo<ek&7:GkrP*Ds"jCO6cfG>kHX?
+k\mR$Q2?'fFJV%Wrgi/a94*9X9$YlM";#WIR0Wi3.7s[Mf5CEad?N@1#@4TYHTa;`
+[k]TC4W0,tUBY%0D8g5(hj47/o)t8HR4N0G;?E/"V]p`"fYL:m+299i+`$T:o^",q
+dr&iJZK-c"A$&EFPgFbej75F%i@u29XH^SV368X[Kiiq+IcIt9J[Jc.?I<VUlM_/j
+M;1LqDB4c^)2?!="ZT<S6Ke=A#J]_<gZSHmhkVlShf*oQ<_rRcS+METqsFu)lH-g=
+ONmVgkPb,[^[G^fkPL4qUb7/SE*'s-POJM22sC^2pY6hI]p!sA+e/+Xchm,@J)8;V
+r/f8)dMMaHkPb,YHp(UrrrDICIZV,?!.D]Nqq3q(IcEBO$]k&;'_1j-rrB&:^IVW0
+!5@Cc*iti\aUI(&/q;btH[bZ_ra31[qEj6@pB<[-=aoi6T.n$i"coPb8-"]O9ndAt
+mP=FbRHM&`YdUrmaYK7D8KAMME8@Y3*04$Q1O`[+ekiT;ZPKSs9Hs.*0AXdWL$.\"
+!&F=X=6Ma'dsn%$_tEKFrr?!XanY^so]s]Ll-&SnZ?tY'miKp@gJ3k_@&S=oKV(Rp
+iR9*eNiE$Y/Wfu4dQ.=-WnIF$mTtpQrr=X4rrCJ-rrB(P]cC&N>9X"HUiZP9<O7!4
+Vu3tjrr>UQri9IVXe=Hb<lo-*G(q8^-j^2Ya9GtbYCdfArrA=*AcD`^5;.SrrrA4m
+^ZA_RJ'1@[,Ce6Kht!qO^ZDBVqmQM)Wk#n+>hOVM:Wq[5^Z;P9q,]I]o$b('#6+\'
+\\I62fmh1@cer[?!9C;$q,]I]o$d1))fPO&Qi@%8k0*a-IZ=m;!*++?eEK3gY&(l7
+Vs!P-rrDUk2uK_W0DT>YGW5S$bPqR-F(P@O/O(n>^Zqt'r2Z;?q.][&%DVh+c2Rbn
+k0*a-GOaVKoiEgG<R$m.[/@WBg\sh)[[ojqZFP_X$]lZgejQTU7jU#-*j/'4*E2rA
++o_P<F8l5?Z^F]eq,uKu%o_cCj\<:3STrba[;o(=H2d>?J#rtRR#`S>ZiASEq6O\X
+Rl2$t^SLk*ro1UeXAmg!oXWH"IMDY!_,"!hIB]m+<5,lPN!YD4D(GQu#IYnpmklAT
+X&(?\,Pr0:mug[^FUj?J(faZVJe(0X4#VTgf'iDVo*h)3;Ssf5b*K*KlOOq=.Y[!]
+hF?^iMhh%KgR$XK'@=-+l,47m:0IrKB]Nc@IOdH77]BLL9>;9mL9&&A,gDf:Ef^-u
+?hA9grd*Xho(2h>]`.t8&,@q$9_2lBs4?`8ZY%IO$+51NdL4e]54n>ri3PFi#it!H
+I5Y[\BII0#5]=gJl]YFWC$oDpA%K#OlGuSO3CsK3!27:$)fNd]gL>/8DV!2j])qEf
+,6\cM/8@K^&*(A1c'prtd-OK,fKQ]+XkBIQ`>_5[K;1M!]TINH3+%Gs3s3pCV1(#b
+FZTu#)'V!ba_Pl)aD,1I2OF0#Sh79:37m'.&"nj-L,aH7qIgP3R^6uJjN"eonP%WB
+P^hdmrrAgDq4!NX+jUn;STuKVL$&F9!lU9*?j0O5PO(&*2,-'0B"F!`Cs+=7fh[6r
+S68Y3A:@,&aSqIs%igRM))9sh,:n$l)-9hu:2$?"[J5&"H=<\AHI1C`Ar>S>]h+V+
+7<$dYOe!30E>2no?p5h-i4lI#T<kG#+*(`kl)`G51]Pkj5/*oKa(H<Nrj;T!dHS\"
+r,Zo/jS4-bCOZ8\3@FY_E.dW@NKi^)7ak.]BbY9n42C-SHa1*`)]Y49.^V6jS;P=D
+;ALCDEhFW;p>6SIX/El!gJ(K<B<*:XrrAX>Pgo^5K/ejpHeZZ>]nI3&*(L-?]g/k[
+@Rl\#WZ%+d01q6%ERqUbHKDN=Zk<X=(#uf!"G0>R'sDA)N3q,F&=DkgnjsOY_U:$K
+c5Y2oU(,7)b*#*@e%QNAT&Nu([>)Tb&]l9)C<[LS+Wc58PSi@g`%4TpJ',]O3UT8P
+FY%U08M.gU9"0s+J?p)E!sKtFR-rIud[5<,YM*,EB4u0n!.ht'D?I:n+>JmNi&fsN
+DW"/(fB%`WQKEdW)>3qm:olA?1h"Fri:jC(s3g;$E[B#"g58;G9l.+0Ch*X:Z3D&r
+\&.J*WP]EXkcQs#W;:J>;Uu;0b8S4^1*gakS0GF,<hPm=3/EW4nQe(Q>suF5RPY;5
+`8lLk3>t:U>'<)p8$Tr?jWF:t^ZaRQr:Rsg-0\GKQ%e,Hi(4qm"!"Cuc@eJ$"\Yn?
+lupLIQCDMq(lmH!?\l<Y'a1f,hZ-J:JP6lL2JiEBn+[stf\P;L<W+fd*/O7J"%;H)
+eTRmkn%KH&V8K,E98ge7J4jS76F.<($r"K6\RWVoh,JN7`se>B?6P9#["3d/13&Ih
+#@][j;6SHljajM?K;/[;ae%JQ27SN61ghiP5TH&INHRabr4:h$XPV5!\Er:-O8HA/
+Ln]qO0hCZOgM`Iq(@WWW.h$PDC.gJObf>o'Ha+idFKi_HAgubC@rJ`7""C,EK=3`>
+TIPg!!!%*C0*(O6`LH/^[Dfe;dX#S+8<2cC;q,>UV27?M4i^07EMt*dbAR%)c7(]N
+aBd<g71hA,"5K*hT^G&EeF#gue*9VGL`#R)DTr3#oo'%^I5js$q0qUUK-e-t]h"G;
+g>FN?)[7t<:PpN^CW(bB`lI&q%,m*+`:@+<?f>,1g5qI46,aP>]E]/nnRgF-pR*k=
+-<N,+,R.7VA!T$V:7D<d%cXKZc?I2*69buSrrB]ZI4ekCgSYO(le8bg09C'L)gdD%
+<XU/,W0X%UAqi0C-a@11-TSMF_R/nMM#3+[!%;m4<<6=je?Apn*t[sJ`nTG;CR?au
+>Dm[f)\rG#WN*3m">Bri^k*&Gs4-OS/GDhJZXFhG9"i=dM'HK7.G0d=Nkk$L]bS#a
+MVF=@>$%W&1S.A&IkuPH2B@N*Rl5'lGGnVGEVf(P<ntS-opo!SBul<&FJu?+hWihZ
+4\KLPAD?+'K+7e2(<r<L^8\"TE&TMYSYARa+o_OB'!-P5TE!L1?_hsc%Ah:Da4'\T
+n>3sWrB2pL>uG%tmGbTRdH5K;5&itMTD9B'0e9@irpnWb-GJI(`pnTg8r.`o^DN3Z
+eGfMKL3%fArrC3dkJ2DY<Ni=DDI06oj\Hri_f*`n,F\?$aNR%l=h'?r7UUnM(&ak[
+I2cffc'oX>OX!FB"[iN^NkbWE8][P!>fopk?;"XUZo8ZfBgcqt&Mkn&n.\@Hipc"h
+Dh6o_\\*Y;50;uKlS6M&&Q0\0XYVf.mt>.0q(i1\/]:YKG$LHRSt&?9$cPI&?a;(/
+61(<EfC/OAB$)AI,ana38\tpB1jrq91T7OP4D^<p-"[Y7ah!.ie20fj@==uiC%m?$
+AX_ao\1YYV[Bn(p8?BOfB^2N8Zn:uCpi8f/?;7rag]%8<=m,ebKqofo0C"n0D`.Ek
+m^DY]CJXci-@bf,YL,7(]uh:hrr=]'AcVV+a]2^A+CN-I,@3+'7IX+Rr%Zn)d-pe:
+P^hdmrrAgDq3usuV^')A1;o.sM.%AKTjjnNiu=-5=6Rq`qG%X0OPHU\0@f37ph5fA
+n]4/%TmUu2i&?FEZ`H?q^8f^mB^Vi55;5b.BF<.3m6e.Mg;rhR=X9#/"G5#!T>\/=
+o)t'L*r03/<c:^-<BGq\(Q-/c&ioNZHZd3HF_ti%LcMs*LoTErfpI=W`R[EZQhn=@
+i3+^`6#WnON]=EcX+m)5;,eS8#_!m1\s,g=II"Rck$*ajEEVBoJ/'B_0&A\JDpl(r
+rptt!62N5::@YgiZA%rErr?9XY(-K!mU'53IA>9Q<]q@6Ki@4j]WM26$_!NkSQan*
+Ijbgfrr@Wt&,;/de0LB-X1>),!$X>n'H_6\MuNdn1!:J1Qj@<3N^k%F,uGoe!5Ze!
+^Dn2^2Jh'QB$^M*n+k*jnu7,b&,D]X&'NTL0\tNL#%?_gF1D\B7S"R8mur,,qEEBY
+1DopB,k,DU(hT^Y&JMr7WMos2T+dIc?CN+>Q>j)J!b5E_k=d)N1eW0uU"*RsW>)!r
+L0$(L&WTE&(otZ-h0XMn]`iAgmI+6GAm<-\i.>gZ2)PD*,G/8eq1bMiIB(,'B*q98
+W8i+JRRi_B:U6L#%'RWq<'NYFIA;rRUJ#*!oNj-ZGsV+L=8ccVg:p)_r@;PG]G!`n
+A:eAio5^@N**+(H_WA^ZpJB#pUb$O:*PI]-s3pH4ZX@"N7`*'"]t'0Y3+c)>"fP%6
+48'YLhhkXo>@"-gBi\6fV%%/1`Ns1$Rl5*_e<GIE;Z?`g*Im7T8O"jmhCHqFT`5"U
+&`h7rCn_"5X==^u*e[r+UZJa4XRYPA;d)g<'T7l",])?KW'*Rmpa]17JD-EuX2qZ[
+97'=?1mc]GPu`)=Y'juZ#T/js41@mJ<``,]6Rr.:JZ'^`+Q_T]>MIr,NoD=L%cq4t
+_f',l"9+.]+5Or`NkuYZL_'/H9V?eOs4-OE;7KEi0;_Q0b]4!N:\I5@e3EGJ>W$ZZ
+:N%WV-5TJQDcQf;i]/".D7*YQnR9.di=kt4aT[kr:dRdqP'XTV`X<T?1,ui0C'?<;
+:6*du$tfA%:=@6HNq(7Z1oGe<C()GADP#ksQW;M&KP'<jPjBQXqJoR-rS3oIJ!LHF
+0Ek0:kXJlpfs><>rrC3<rr>Og!:r-6s46G,Q_3^]kPEPTab]M#Rl5*87sAH]/c:p`
+cIU6^%(=SRb-"P.emqNji"]qbE(@lRSIR)(:&6nF*<:i[dV*ISRm`8OBT0,:-3ZZ8
+/O'^64f4RH_l2?q1pP(7np'Hj:9>ba,6i6:)KCW/:`=HF'L*>0rHmO*2[aAW,HET4
+Oi?h=@k3AbRZY![<su-X_/"6GE?l2J8BS[Y8gnr&dCXC>Z`2]oL`-6En+j;">ntka
+W+B@(.2;u4K7mEuRQd3'EW&3%=c0/@bTn_\<qPBLlQe&b)rVgPRY*60Gd!ZJZamcY
+=-(m.js^MN$a2"4m8YolGGTUoLS:]frS?I(4=>lbICVc9Jc>]PQg8CE]@k'D3f'[[
+rdc=lYP^:[kp0!+/ZrN2bNQ=FGk/<9QftPkBWga*dJg+b*/pZP-pn[rV^8M':3*O8
+^ZB#&SE&`(:0d,^](<*TfBhS!o(2h>]`.t8&,@q$J,dmaq6O\XKY#`u4m?a?Am\PJ
+ii9oU*-qPaFPjCL,U0.r;qh`FD1?AtJL!"$_Rgm$HrZF0+Q=-GZ/+*9D1A%3Bp7_q
+Hu&@pnZE7W=QYQ8$]-*FeWeQ*UgQnf,c_BX!:nAW0`kR:R/[/3lF90^6BrYZW&Cbs
+P4qWg't\37#i.nRc#cQ5X@jB\lQD2'iu3Ba&j=%Jq[)>nK@H*CHq^Lh!YRpB,X>"=
+HZ"<!s3^<2ZXHV(AT+R(L^Z!p[cea0R1&Nt((-uTPN)@/WBUmBl`k6BI(sf4D$rh!
+Z7OBhFXf*o`;9Ia8=hY%U#\L>#N5`>,`k+0"EI+h.3/LQ7+A7L;RQ58>tXup\(&eW
+OkSBjH@]qi<V5!1-#i,G?u8ZVH=3j5p?ppCNR00VN]EaZ2F&$IOG%7bKpcH0b+0"Y
+H&GM'R`7dJc1O)-N_$;5[>WQa,9c'g/HQ8XEj&;0:C'Ii#Q1[,<ibnCWq,8\*Zh.n
+nto$/00e;Dch3t2!0\#UcThHXn+j;%c%(TG%DhFGE7G3lpG8D5lGu\JS,I2Yi(:$6
+c#IFZ$-qqV!g4Z#YmCF._%#jph,@2$-.LoH,'s^P10M^RaV:'3X,-PLG6-75G9=+O
+ic8d[bJ?"gHIJ\2dBms?6"o2UTnt"%GO`f"Q/#I7Z!G1Q:/Oh,@L+f%Dfm7Z$bXB\
+%0dN6`0)VTB([JBG#h!S%gV1q!5,79[Kh3[e*L7VR!ue4:mdqR,L$7P3W23SJ@.dp
+]2!.W#-QIZ9KXR-<;"mP*O_Fog9'M6Dg<Tdd\q^."_J8ZP'Y?3.!dBuV():'D+n.$
+$1/-;dp9W[eo#,kAQ7_(dulK/dB$f8c]J?P)do;d.jt57D`,W8F\mq]6d/@\pIaCf
+Tl9'$WOYLACcDTNlLH`ejf(GFV9At,m//1hk]YhlL6lSoQ,9#grbI*r(%G7AJUc=N
+_7@]Qnu7,d^L-g&P#'9IpPSS@BKtRrGr*^;s4$N5ZY%4g,`:!jU!\E"X==K=5mIJ0
+mqXE,bf/S*CM?o$X19rFmQ_j#mQ0bc7V"=!G*:VF:NSo!^!KACi@;%.;##DdUjY3g
+B4R;X<@!l:A-(u#Oc'iq?)gO5l'!\(8VCesqQ`d@@jI3]>Y]hg8K'r67$1F`j[6L^
+'mH?;E$AuXR3dG\;C7QRM&*`B1KF+0rKfYaB!h.&T4nq41u,+VcF4Ih=j:'!Z>JRk
+ci;P_=2&%I^4=t]/^gC*>E..nltcK9eG5*ECh:#57o)/cdRt[XBGk>h/&\`67eK>(
+glqg9f<-]H$JXgnC!\Y-/],YlWuA6W3>0>rU9?5CD2'OQ<%id"h3XThEf^-u?hA::
+!&JXeq0Du0?@T'^r0WNlH*_/`f'iF@B#[IXF2lU$J`C[UX=?>O4>K(3Xej2VY0]pn
+C_,3?r8<(@Fn#H"Yf/_A%.UF(50k0ub"%!f@t?5=D(<h.4ggeW8j:IVK939C-b%K\
+9kq[8EGE?0KD(9SZ2r?`*W:fLI($h71q].,b[S#PakBm,SU#rZNSl-AjIZJG3rK0i
+6Vl)W[@5Bd-&+mrN'JCn+LEX+`i=f\^cCsp2oFGNfC(X6[b!br`(MLW<TF01HrTf(
+/?=+J>>iJt'oeZ5S.CG)V-Bq<o4H7;U]1<DQi-@;rr>3&8bmZ2nQp^I#Q0sM-@)q0
+ci;A\q6O\Q9,)G:d7V'6\rXc@7m]9W%$SB*X;>KI`%3i:J2',88`9UKJbe\c1LLYn
+:HF/+"X$A>Sud&[!dM"g7='!X68mUt)e&#67idTBX&SpOJOn[^(>o2G37`u$*BVWg
+$+8H(TFE/E1f:Zg`(K#[j&'dPR=P;0Q[a^qs3^0K>*h>"F`BXBD'u9:3Fn+M2\)kq
+E@o@t+uAl[L\\8gc;FTAPtV+$J'?]2IU7N:=.eeErr=Ajae!>%ZY0<dn+j;%`k!^Y
+dCP'%"^+Bp+Gp_""QoQ0e$46afpL9r6c)dX8+W=E[GulSQ'=%c</Q8d"<>'bO[h6F
+'W<'2'P(WK8%:MiqV$0G<h@NXWFqM]QeH-irYU"U.^S^UL$#X\J4RZcPX_>b67X=d
+Zc95)j<)kJ6a.<Gh_[9\VOK`EL'te.[UD9NXO'NP9&kT=Rh<dXhf2u5s3pFU6FQC(
+!`Ysd&PF%2.,l^r9\Hb:J)sT.!2G&>S!$RjchE=grFeFV`-F/`Rl5*9s4$N5ZY%I4
+Rapemb?t;QP9m1j@qtZcf7S;%A)G3=lWSQ)&6N>'3+n+/&kK/:R:A!/:!>"1rUa!_
+@N/h:1Iom]C_=?`Q$LOuL>EXdP+r]T`heG5W&dhDC?Ug07o7:BL/o#l*lK$Ddp]T2
+FR+k^.gjC>1J',5Of3FM:Iu6Ki[B^Wo^:ONJo519SL.RlL$bdhAX3oNUSGfP/,oUT
+"6i`X+)c-.e3[go=V1S\0O\;qN;qGp3gRH:L8L9$LXBT3Io2*5=_%fe=/QetoC%;'
+h,*!69b@XG&ilX8eRjhCPX`s5ZW'A.Hf:/B74d7/&prt/=in?j^ZB)(r5YZ,?@;).
+nb"n_YD"`-q0Du0?@T'^r0WNlH*_,-Rl5crf'iF@B$H.e>=EQ;0LMP8Ej!]C`EThA
+mt(F1lWp>SGmNXcHra'.bE(U_q5;TL,2VbEkVo1XEk=ASFZp:iN2P<e5f[kXbgqo5
+Tlt,k%U<:BO!ZTI*)@bo7O*BX74rMpNoD.]g:,grQo(s-UBKYXVqI&"L+,$O@rVFK
+[dg`3VldlD"[!c%LYmehLR2?,DKaVE+Cl(=P!^`b5pt38lNo]ke9!4fDkI']mNU7Z
+KEZtt>sK)?&??n9Qj`s*p*Tk*3j,fe%o`+8gr,$;/&<X.Wf$Y3AeFP7T4N9fJ5TbM
+=e'ajX7]Y:ict%e3q9=d?Id.fjlcN[H2b/mnmX_Lk09ARCtZ/pd-pe:B$HeV\?iZT
++f.toC(aJsOsiI[aVe+ommDp0;YiWG08g=`E>lmuq8_^.hT%.<Y.kL@D'_+'lU[PZ
+pj,`U^)W3[2lWkX!6[7/r?Ou7!+bnST!!;6c*6p<]S<%Seco4*miQg4#upX1Ue8Bl
+W04Xf2LkbSmIKK7Zc)B=4S"=CX7MoL%7Mf3ne(m%_WNc9-iC(&*<-"aoic[K+)BC'
+>^h+,;>GM:nQp^I#Q0sM-@)q0c'pV-g&KLhq6O\XRl5*9ZY%P`e!,@D;Z?`lJ,,Rs
+:Wq)YMY$d[5NKb.1X2CICtZ.,c(G$cn+j;%c'pV-fs><>rrC3<rr>Oe5Nf2!s4-A+
+Q_3^]kPEPTab]M#Rl5*9ZY%IO2LkbXn+j;%c'pV-fs?omj\l*YSfdP_,bLEqmhP$^
+d!s/noDdG2q6O\XRl5*9ZY%P`d-pe:B$Hf'CtZrqnu7,d^L-g&P#'9IpPSS@BKtRr
+Gr*eHdI6n;B$Hf'CtZ.,ci;G^q6O\XRl5*E+8JmNkhlAOjH&lr<@i%<5QEVT"9'uE
+P>'[0e*m+=B$Hf'CtZ.,ci;M`q6O\XRl5;UO82s!Gd$iVY7\pkY?k22"nKF!ACGCm
+9.^rZ]as@q)Eg:OJsD0(%tZ%U$K:j\@qm?uo%'lj.P%CRDJB=Y+SW$?r2b<>rhYT]
+ro(?$og^t=XF3b@V2\j]iO?Sp7mI%(T)Sf5a4.lh=OmEOmMgNQ!*"#hb/`#Hl<)U:
+!:CeQrr?#>J',g]\,QH!@or[1\8C^5;9f+@.j%[h!3'I0rrBQGn,6,.rr=Pk;Z?`r
+@or[1\8C^5;9f+@.j%[h!3'I0rrBQGn,6,.rr=Pk;Z?`r@or[1\8C^5;9f+@.j%[h
+!3'I0rrBQGn,6,.rr=Pk;Z?`r@or[1\8C^5;9f+@.j%[h!3'I0rrBQGn,6,.rr=Pk
+;Z?`r@or[1\8C^5;9f+@.j%[h!3'I0rrBQGn,6,0s43eA!6W@3^ZnqOrrDI+HiF(F
+F+;?QeA(9Nec,X;)ghSb<-*Q3a4.lh=OmEOmMgNQ!*"#hb/`#Hl<)U:!:CeQrr?#=
+fCKqYAlV#ueW^[IA#A-[%iq;j/,iR5V>gNn`ioCBE80:HUQCQ,=T8@AIZs^HW;>CQ
+Vpt^BF6dl>/,eA%b+A7Os4I~>
+endstream
+endobj
+82 0 obj
+<<
+/Length 1622
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VFh9lJcG&A@C2k[o+l<_/,EC=*2_FM#WN(=b#)6'8.6>?Ptm\Ns&6J,>Bb,V:>Q
+)AG"g1Rra^pdQ@+i24X`)HL]?@`h$3rbZ)/X$9M%KS@r2+Q6gLo@Fcs5#,iu2*mJF
+/>hauh]Un3X83MuT4KZg!ILn%Hai0`37d]Jlg;&Qbk;iue/Pbcc,R:m7\ehPWCkBI
+90"XlWq&sjpX*9]hQi:U'$UYAWHA7-@D,D-@d#_[,#R_YCNmBN!_56(bN[O,l`\jr
+!TeuE)X>)8+F;UQn2+0X'_h&@Z*u[C/jsQOmc>jc),/uHENDrk(h/i%a(8Bh2U8G4
+RDej+kSmr?%';UZlWJ.)W,Jd78^;A??-,h.b'>\[$b0uqP*1Tb14<YipN8j:f85pd
+0?Ee_$X?S<F>4DK5)Aa:b9Zu*:0b(=-_'2T=lZMZT^/Bj9alj*/:dth'HSO_iB18H
+UM]1#\9><up]R:r1poO?\9C-'gE5\b%(W.o[jS\J;Vb$YWL[P4cOq&`Y-gPpnVCe?
+'o>75dB8!Hp(\Q'7uY.+=A2i#WpW3DW#oWm+9NOHAp6`na*gEn+FoJ(1LQWYJ!.LV
+#;XTkecu)`"nr!MO/D%0qLrFj!'LBcCc_=[/F`),)2G?s1,/=6F=Ja6&aU(\,Zt>R
+iS@V*k6[h8QB'k<AGIJpTm-\GV+X0[:1j!PRe&KGi"&I$U%HY^pXmu&(ka$;A/Y,s
+SE*$bT`(n.m,`Ti/0E35H^'AM35b:N@$&Hs^$<^:E(1kip_)F7Z%dm";a$"02!8$@
+5b8aZdhd4(?_>hRo7Zu1B,,eq1.bs#apcdf,pY+Rl5aFe<XPCNS?Ot_=kF^HS%Bmk
+iMRjok=rERM0aHdNM>1JlK'-r,`OepP<qFe64\]^(Y-,TZ7X=e^"c$eGd+"n,KP+5
+B%VY"pqB*@ZI4q@1J3VWgb*+W5gn[[]+sG5q26DjUbFa_ACOk4gWj!R0Vm8gV.X\)
+*/%VW,Boo[T'^h<Vbp-^2`%4"4l4FYT<F3G%J\^X3DR#Qj@`7VFkhgsIeKW\Vo4L#
+GLKr<d)dr=d*%8t^L'_M*"b2,[A]Lh^$,U,m5Q*AA?ZHD=8L<h<=h$W9ocXhPo#)V
+qHIZl5(M9fiG-\eUMiQ*E/GL?Z4hY7'M+m]H%Pi*8]>a,3fGUWB,)C\h17=h:TRL,
+7u](%?HDjPL?Ftu-K5TY(@4$P1ckJOVpjA;#>N(=(,MIK0*gBD(Thd2Wsr*3GU]%)
+nLXFAEAanBCTO+1@>OpXJ>q34-Xoe`\`AMHLbZ!)E2AER@.Z\XMd*1,#W%uq65J[U
+[5GTNj@WKq2=F5Q?6pOTkt>fs!OP\pe*&EIB,'r_m*069rVlfEgXU5c@Ytu@MuoV-
+TUNWXHb)a\j`4e"?AJU+okH>^?4Kupjb\S=:bf.M&/\BeONG36$L]/hY#7iXd)fU!
+@?"lmm^q"M<oe^rhp0t3++@>mIeV,9QBUIT^']P,l%VbHEYn@j53V-hCbDSiH)2!8
+-Ng.(Pj(39;*_OdH\/3Do'Juj=FVBB!s["alAG*Wb1XbYE:/;V--9JK?@MiWKIAEH
+L:5Z?mleorDpnD,[(+UPF)@a#q>UNsf-<4E~>
+endstream
+endobj
+83 0 obj
+<<
+/ProcSet [/PDF /Text /ImageB ]
+/Font <<
+/T6 39 0 R
+/T7 21 0 R
+/T9 13 0 R
+>>
+/XObject <<
+/Im10 79 0 R
+/Im11 80 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+85 0 obj
+<<
+/Length 2235
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X-D8T3WI'YaHGpsbEf@gs5O$O1[>U'o[jI>`/C,hc:oLoEci',9hP0=OH6Z99U4
+"9E$cDuJPe*e2hE545F.?LJ@SP[^pfl>LIPatg*?\j08QaEmTf6L3[sj"J1-ol3me
+]4R=U)97'0qdY=QI;ekT?@H0+DgLg2Y-:f^bjHd43h9e5q.-t*dZ!9:63u=5GKD,L
+W/b[cY#^atn'rf7TCTp/eVVtB@^/e&V0K#:(gue\2I!1GAs)X@MY$?@5@72lYO?,d
+e5tLsAN(Ul_m@d(&CklLKJVJ&mWZFJ[O%^"!K9TR<>@=8b-<"b:3L*6dO6(DYrNj-
+s!jdWciOBuE;%q?dCaS%g*h$!fh4:`MCZ/a+d=)hma%cp;]3DT,D#XY'C\qBKCP$G
+Y?:V%e"%.S&EYo(h!YImZ-_4_:(2l?"j1oiX>)FR-k6FI2lT^g?N%DR-i$&H&=/$j
+46(Z&*S0Hn=qa=kZ8d_G=t#&5Cm)kU%![+uBr=?h5m>)X_dUA6*ln+[+c'U>?;&pa
+`2M&K,H-mED#n8N3HHZJ)f!SF,i[DX.%&;>gWa0u";9u/8d76lg<IBUPFOhT9$O=9
+C81AoZNGbu-XJlj':Mu`6rpcV`">:dC*W,^(Q*Is;g;D;o<>>hkA/M9a"[c6+(>Lc
+Q/n#Q+s0?eHl-$`e`gNrN=Xk8e>n(o\O88BMF+X<<eWlEHl4KjI&u3jm%@fNl^^;G
+b<K<$,iBlYGH-'BI"_:Q,+P>L_OdKlUj`sGI@b$S+LkF>mY42S01M<AK;)cL&2g0u
+UI?(I"`/ZC*,?#iAcLuMNI5k08"X?]S<Bd&V67J?3+IYP_m3IO*%a`QDP'XsAg'#P
+cIr^t9GBeg-:bW(R-LN0]Y@/-<fGbu/p'Z<R^tF*("3;;qtbm<L+XkX!oR@"$&$/E
+%:ZqKL/#dSkpN5;.gNbnmU2->7I7W^rn1LuYnP\m(5`:l]5o(MrI/8Tgh'"6Ru03f
+Ed8]2lMqCe+_qo>=WE9NYU*:XDjYRtqHJUS3fE_`B[aO69oi"k6mc\J'pYFb!2_UI
+.LcVf.^5N-2oXZ']C)d;hR@'PBrH>r1o7UEA*P:E@ZRS9Ys\MH_ZW6g]/_)]!'i%"
+cK;9c)B"@-<ueIWb4?I@KGB486mjsKE#][r)M4'iZc'c&lUQ^p`DmHlhlr9Yh&c:D
+bf]ANRi'],=JP&*E(34RGT]"cg0p]QAnH[J<LC&c0%@^Cll8>#J[_Ht'=fr!V,+=)
+Oo(nhq`^$[,-4n#L3Y1'$!s2[$,b;1GP:XD3Z"_$V@n**a3&od;VaRR*aF;TOfp_%
+*S!\*c@_n,XLLgGig__,'pn'fCZQ@;a[>[W7orrm#R2B!^%W1q#5Wi:!]]+q!k(Z+
+#:7Y_U<"-aSfn\'P:O.>\\kZc[o8r_fK:Vi2e.=Kc$?V>M@k$VR[EFpXU2Ur0A2HP
+,KdtjoaJ(lDLSlD!9=FgNR&i!M;K+p<.n%bIZH$;2mTY@hjNYkSI-HR2iM?frpeMG
+naf45[aR?7_C-)A7uQ%:VN6T6H0.K#*%KH3S1Pr<o7K.ia014;p?U:SJ1V[3Dj?LP
+bn>Z$@j]<i@9GJ4XW>J2ApIX^`ljlAPEk^gc^_m8%sloq55*tq%tS=r6U8H'UoB*9
+?GAh%37'cpK]2Lt8:eJ67qWl"pSY02HbP:W@r)I.#S$,5#aZ]&+[0".Kp:R_'"2!R
+Ph8eY]-;%HaZP0/'JD4)GBu0;D!%iJ#*F/=m.--%.i^'2ACj"ZCK^O8(g?YMFPJ?X
+Ug#Y;;1;\l:rcLXpIZZj4&.<%HqV`=Ek8SA?97KULSB]A5Ft?/'CIRg7JO9+Nr_\%
+f3I1Qf@-M]Y$?amN0&R-DN#81*kskL0*`reAmS:!^:uKPEFk`s-gtg7#59gpHt]9m
+A66`-ITKPEDC4>"r`;8m#Etg(U+&F"REU*Z][_[C?FQTab969]"#Efm`;Us<Qn3KL
+=Xs-ia#leu>SO#34W<_KO1e,fb/8d43T$cDe#F[)+97h#9/fg7j*%Bo[:n(QeLc+a
+e4t%?g*#*W<1%/'j-sP@OGjgtT-l]T(R.1E@Mlm!@k;[BWrpM"]B&LhEV*hq2ju@]
+4nB"cp7t0$'B#BL[-r9DG#*i(d=V,1%(Y1m4jCo`2`^VLiMBIi67'bPX9[Wa%%Nj?
+:3mcn6LIA"1h(9$_s$!Z]aP#%V\\=8j`Om?F#V"5hY:foqKDp8JQSc~>
+endstream
+endobj
+86 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T5 38 0 R
+/T7 21 0 R
+/T9 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+88 0 obj
+<<
+/Length 2932
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wj<_/A9m'#!HYEf78;X$oo#V&@Kc(VMoo]s`JT,^W@(`R_CIGpPLHYaBn^P/X.t
+ZI0U!V?]q2Z<2MIl;cA!2E.6elB^7DSo<&1n_;Rk[ru-$r(GL,'XsRl9mXFdq>BP;
+G.Sj@pL\cYHENF9f%[q+L\o>72c9s'Eq@9LHF[2W@b43Y9<75s\(+41fu6X\Ie@]g
+f:VCB(IaLa.J)k2^T/IFh%,51C]CknY$!+H/Rpml94Q_Z2p_1&QFWhI(q(cSD1Ct1
+(s4jsDZFRmAQWKeIE6AS;JA9>UOHuo]2Rh04M39?J)*7HD-QJsIWdUW=hn(Xf];.)
+1Z7pnRg.V7ZTkhZIm=j0ZW*gOg#(Vj/@JNe@h#)sf2":)ifbSupGt<Y]:lf<594">
+U3MDXiK?4ldaXW2/S?Po[mU)+bG#RA[t=H>eAqR->pY/s=5>mhn%<'d-\d6cXVZqM
+#l[hs]7)_?m/kED^mi)aN)%ps]=l)<@"/I0IMXA`71(^kJ2-%]nTQN!bD7f^N5$Yh
+;@:S85=:GR<a=Y=D$$>b+^jtg;h>^^/EYI"b%r'df=WpE<r,YQ-QHC__Z%qI0C:IU
+lgFbeRt'<4>RP"?j2p`GSA&><qeb?UFpD"[XI+V4gi(L`kXb2CVE%h]G/'S<k@l[H
+iBI!'FZQ0oQ_rO1mZpa3JoNK[PuY8JeRcDVb!!j`=pr;j6kdL7+"@^pGV<3FPlelq
+:'AX_H91j,f@;RlB=]iff7F1X@<(W';o6/Wde/]`gXhBec5,LC:6Nef._f4=`eWhQ
+aUH%V08PN71)-#U3GY!lBknbu]QQ<QdQ,c$@S<<;ED0.+(s":SNqsZXqsu0/2=-XP
+h#/?.SoFI!GU?u-@(Uc+.3V+WMH=7Y&iY;\Y2f=b/Xr2GeN0$7_;\*DT%_=Y>=pmF
+"sl!1lCiOo+sQ"29;UHaY-<;&e&-I3cU0jILFgEKQND560sD6SO(.oW#[-ZLl,HjY
+Z.`4i.0%n5k]Q@Xc8.aApaqRE10e7f]%qq@(KXN<5'h(`mECik.duZ#o6q3$&YXDn
+3]AWqcI(J^80ICQ!k/^qNnaQs:lr3MWTfjh%k'u@Q3CU$la;2:.6I@_kQ<ufn1hO&
+$7cM[o*P7'"Q\M5J;&^ID:J7KcJ^BrFE,f1\#Y7S,J0%X&oe%%JLo(DJZg)j"Cl2d
+E@r'fT,"W'ZCLf[`fW9B&/@\!]<+-H>fNhpG$C"P`Co_\10:.1,*!t&QfQ((+XCXN
+gW;sNbA7Oad/`F$a<WKH\OE9[Z2+!9Y1a#3%3tao(V_LblgE$@pa"iFbBW&L*ISI<
+aQDVeHV%60]I>Qb_cT,'hC/C.A7$%NG3m-@ptaOn%)#8iRTVt(b$D!nU]P6Y`munh
+'c7(t)AcNl;OnMGnDV?'ihT.%V6)n9g1>U4YZfFA)3YY?k0VIS:Mjbap*d04)q7&H
+:j8VUWJ,gZH_Z[IMc"u:Gs">0QR8)`%9MYrm"VWJFY_^Z0Di1c@/b^V7u;t+a2a#P
+8&]aKHbGE::l3>gq\')bMbc[gilDc\Th,@M=dj^;L2+^9e&k(%TRZcYjP]L^O"\6n
+:dp;0qpTTlg/#F\R#?qV4*#<^T8W),-^WZp+5O"ojCr-7T)!,IN[#9]W^K'te9g.?
+0f1m@$I\B*X:A5Q'p+6:)+fjf@d\3q=MOWAUW'V^9Rl$c*(hH5!XbIt]BL*ZP="\]
+:;&;2"DM-1iPF,arK/E^G,AdJSfa)<R!^;j`/M3k8XKPWW9W\R_5;eL"mT;C-KFcP
+i=T#P]9eR5JT;Y_r7],r^aq-Z']CJ[`*sph"cc1fX32kOF#YO5`F7F3"-ufpPpB<3
+0Hu),8@T057YUBQC,k!g)B)-WSsMhkon&fB`q,UM#L#c.nWJ-6HI?l8M*HTcT8uip
+F/e0BgX$1;U(<1"UT4HWpFm..1@dW=]_"C6TZ[XTHt#X)D;/ltR6mV5h]:0$!ftSu
+mgtR?oP;683@/=Zo?#mOE554(><],plZ%5\'jeWA+];I*dR[A:;PRpt5,pr8`3c+l
+p>U._dIJ3Rd:;OLiP(__I)4isCH03WiS+DLQVj?.T&E!inCqn_TtdEscR9MU+k77+
+(UtulP3CD\/XbTe7WrP$'-[t`A=!((Nl6Y]Fm"B&.tWu&\Jqe\5Z&+Rl&27ELCm@s
+5N/9fKU+Hd^/QdeT;nU52(2Z?``#DPgMJ=p%:lMT?<J21@-&A+Je5u`DKBRY=,3)3
+Q5K=p-V4^%[QTi^dZe%q)'[/L<.>Ah,8M3^+*>2$3g&cPZ^;%[P5M9h7YQ54d[4Od
+o(=mPq:qBE;qmg=:a:t?CI@`UhK`@Z!Gn'fPeI(t\WO3snZ/<1a@3moC'R5`?cA%/
+)#W'!AmEW]3E+"sMm'-I:>#9H#/MV=d-Mo2fb?:ABd%IZ@'#miVB6AUZ$'sagsH7I
+e%H9eT*,N>BCs%d8@q?9IlV9rZ;_EYH]'174K]`X89A@?'hu0Af?J*_%?cf`#k\W>
+-Z+j$3[rj"Oi,gbiTKe:,NeKsh(FP=e:)l.P+6OO:giI,1auVq@Ajl/4GSX41s][<
+?3IKtS\f'@)^c(ZnK:I(?oTcWkR"3;1s*N@AS>de6W_*rg:>Kd6S,lkgUD%5e]o2O
+b9)$#0TUV@.IK^ZeQ7b+_5I2b)EZM<fDXkINVkbOM$\dEYIiKqo]SkF&;Gh)'-=]m
+`c6h?/AN\MeO$/\IcQ(8_Z%.Rhp,,=\t:FKfn)T97icI_-e-;d8VUcb.2.#Wh^_UC
+TDRT'HU>UeKU_#>g\P(M,'u0b"BS9),R`i=:c^XPKCKP:9h7CIU#cgPkqol;K)V5*
+qZ!,PJR4G9Tnja`(u)PP$Z/S9&rNSTje5X1<_lRG>d9Z3/"A5F,YCMj/]c::+^_9$
+p[*ecF8$YTg.2'^F7[EPV+)c1~>
+endstream
+endobj
+89 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T3 90 0 R
+/T5 38 0 R
+/T6 39 0 R
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+92 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im12
+/Width 765
+/Height 694
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 14690
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]"%D&Si$q2&T)biiRd@G"Eh-,:n8V/&r_I!2dBrchb[`e0tIfKHKk/.3R,>7h3
+(g\k50*#a4o?hu)iIB=[(V:J:]X5BgDj,P*>POQ2EP=St3rr.d+5POdI]eI(`rnX@
+f]^%3o=se3CRWk<Ia@r*a+G17X^:J8p:g>C!-@Y9]l3n"DZEJHAp`G5J)>I_n/C]e
+-B_#=O.-(hj7O5G%Y,0u6pcathk\<:+$#ML)#tsZIf=0pWr;D;=0D@ck3p",n3_-p
+!,\D,]P_rMVWDm-q7Z:$s2#9P5A6'bIW*CgSWB.frI8AW\,u_E`uXc$^H?'+4oF%n
+A081VVtlCt,Q",sO."mZgbV13%si3i3NPC3Rbp@#pFX)@8(duji;)(%!krUPT\Ft:
+VO8M6?I05/r':C&S,Z[d0]q9QIcMR7#EA8umh[(Tc$tcRebj4_q`<@+Y]gUC6TdR<
+Q1nSUZTSD`OHZ<_gRYfF14NcZ!,-rS1X$B2"7q.j&^2=L@UX^n#f6FIr801mYQSnD
+b>uLXYLr.o\eQm2[(K^5EiJGWq1%/S^S>9MRfUk;'iAH;fClDmr4h83!-@Y=g_F&H
+oCoA(4oigB')95V4oF2[5jpE.d"H>^ItW<Nrt0]6#N)!MrSG_h2p;f0@C88B&*<uV
+#L`bGK5#o4_6h#U?s6re0J+tCQkl&29FK&TV?Q)edfT,nBn?)r[(uTI>$ue5/MKDV
+(761;$d9-Y"m-'=!qV%YJbd-h_#.SD@"'d]0L(p?Qlf!0bR^QSjp0?:o7Lb.q8'GR
+r*W]9IP<?-rt%/Ih?+]8QsUO$1QEEK!1:MO<FUl5+VC*V")W[IgOK@fDasa<iXQ6F
+q('oYngCf(V^!mF(">Z9K(@kX!9Sd"Yqe2fBHIH@IteP7:GV4F97cns0bPKO5N<5-
+IjRO`T#B:-&V0]G@kR<QL4@npQp2=TWfLTg(TtRO#ttqVT1OJ_bg/(NmXNINRpgc7
+3HMqj_bZ'`.;"rq(Akigk4eD'*;`Yf@fH(Vq*!O4hu(-b@Jhmrr!1tMcWob-0mt?U
+rga(qn!.J/:>,>_9nE+aetU4LST*cjDg,*]=/-b&J&d9Co\iR6D9o9TU6GZLn$q1o
+3p50b4uGC-AgJ,koC'2,C/*_XptZD-cL"M)3uTgQNmjPI5Q$QFRco\mCje3R;Y&"H
+!V<K7$XIu5d=8T/-Aaj9F5Fh)G-;&oWWp]IAXi,?`+MhLd;2=jhQl:)hI\).S^R#^
+0RnqOq&+#]r\UtU.*L$[B_usnBM-0\_u0<BQ"3oCr)mT)Zn,tt>7_)Z;&Xm.k0Iij
+#OeY]B>m$b7paXLE/pmmh>0':ph)L78s5Q/\CPF49&m(/X[J-:gMVPh_EYO*$P$Si
+D'JHSqbQ0cId4a7\*M6@jqmudfeX^gQ*XbH@hp&%QiCaX2fAWSLf0!6DHAjQ7C^%<
+^[1c4--p8`2fAV0iLe?l?hadXCBKig_n,ZerJ^77:d=`%;_V2`];$`-5M]'q,]>r]
+i%Kc5E.qTeI`;c1D=a+hq:F%cp]WH\O$<]\Dn4Cam.AFSDuS6u`(cD/96IT.:@F;i
+6AQ\AL#9E9':Zt<QARuQ!EI!*4tYZZZjRo9%R:U[J+S.ngK>tP_XQGW]\cR=&,qs:
+JGI+6/gu7eUc^fpc#WGa&9Gmn2#KheT,ERFm8Wl\51Z4j]$HUK-rekuHLg-4Xu-&G
+b[2(3_tW"5?(MDt#5#t[\!msg?`!8(mqY#:XpV_1&o<t#1]6*g>plU2U=UeWeaqWZ
+&c"tmdLa"=Q_-"@&"i6Y0PDc"1&kn"o%YtOBiu+eM6Sn30)Y!gUSMNWmIB]\B@)@)
+f1WUQF6@%BmF5Ocr#_m`Lm5!]Y2DHZ`H3NrMtQGT,]^M7AcC3II^=)KiCEp'N#7!W
+k*P,8mQRO5r,?H*pbZ8W$t6ufhPj(0pEBGtlU0mKJSh:j'BXM!^?X,AMXA#]R?rU,
+(islHI;kM`qr\R/5J6f9MoN*h#O-8._OOGX#ReijZ?k(6reNp2%0+lU8J@FSQ^*&N
+;".`,+)r'GJu#!;AsE,If]J5pO!BDZCAuG.2Z%o/2D-N2kcn*\h^eV?]4&VGK&<k^
+GJUaj4)IC1T@qc$,88A/?#&WbYok>LM]I2'o3LUa/tV=<$^##Ln+s3=RC[7#L4;&O
+n'MHEni_n#QYjV8DK7eWK/W':riG]A%KBhu5O+fO/(`_KGjWYDn1MH>T=&+jnE6?K
+C%qohs8%O7TC;KqBd#tW]M7"LlbTYkpiasniu&%XJ(33H:X6.(96s?MVYW>P-dSXP
+TIE>d^NUP'_]N$n;.lsegB6RdGK<t*5Ebhp9#!4\M2SihZTVWTE[uUHAPYtjQVFps
+.M_\cc\4S6Z^G.A&1?UV+^@^;iGWH0P+GsHqGUH$Is'C4dW/hO,?#N[VWQ4k3K.Z'
+[<Xn[r$gh+?1+Y4Ne=j4r2tL-@/cT,Q.olqB\Aaf<=is0Sc=[/C:s%;0L&]:BY1BE
+<cDl?9=HMkF)fM:Z3fE#pn'MFjT0WVfCO@73^g3N,lbEmIk8'&Q9D_$TCOt%-/J*X
+0!XT06P>"3fV@XV?EN^`p\Z#ofGb4u%J(rAME>b/g7Ge/m[9iKBD0nU3p&oAe%?S,
+rseRdKR\h\q]I1fe8a`F4T)+?Q+kOk!N@pRl/q/]jAO(a\O"od9Pp,=8qglR-PHhg
+p+iZXIk1-&0'5q=5Q0B/3rI$_?"WhK7g`s0o<7OBKKl0`iA?5fHE,?e`km5Cr'FK'
+]2oF+%+9=N`h,pca8Gf[e/F$W.j=pD`km5Cr'FKDLN.of%"*^_T7^5t<mcqk<d$E&
+HX3UYI`=q4JolI=2\(<DjcrBf%kndukKR@U8=,qBHQ^a2^"G%'ffOo&[`Z2jZ*=nq
+F8O-%8O]YH^Z:J?4n#(ZWMneqFre!&mOX%*$=*Vd[8Rum,NaL"cg@UoM5Sn#`dD7j
+Gp-e5Teu[Ac2Um6/(3d#c\12*"t\Y(a.F5Yrj5;8hphQKKYL[SP?B3M_Z+siY>ip=
+Kccpe&';H\@&<"8Q8\92K>cX9kB1Z]jO,g80i#I4m$MkJou'JIs"l<&=W%/2_th*"
+7qG"Sl@A!9)/m>!o>f0[s.jaud_^LUq>S)+$qdEt)Le'G3c"-3QC:%5B>2oDiE'K;
+N<NhRphL7eOnm$KHW6BIGe,D&2?"gm`n5lEL&&-2^M<[:]["&h6YZ<QQp5kQf7Ri.
+8,,.Z21HqZB-VUK%f\;q.c"-@<_kKj_LFFm`Nt[g</:JuQF(pc<bhp2-P8.a`NqF=
+p,#S&!(2LU?<PVr-0DDZX9MJG@_Eb@J"<&/oA<!9`<%Sqk6?lQIW]@'q]+KYplcQ4
+r#03:o,WAN-S^5Ks#&7D1Sm#1_Ona`k0Iu"!/6I6QV$Xc2l<kU$RTGU)PrXnCKLjl
+&oGm#`clIS4.u19#h/t_APWqUc!SU7/]H27_4_-a&gNh%$buO`l?`aYr(.</r]U6J
+bYtu[RQ2HKPT_[EK+)AkcY!3nk,Il&5b<fS`aBUjR*j-mr-*e=PABh>5kpN[chtt5
+mhKCgm_m#VZY-u-bUR+jhb/IN@6Dm3B"31p,dp#6IE"&B?MJd82a:frI6j\MiD3o:
+oD?uq:&==BGtDV[P,"H&B62^AF!cP/-S_.e"+Kd4D9cZ'rZjrkrthIq#/["Nf]N48
+nonfK6?/]4"b]*sdEV^e`BQ<#7].1T87HQ0s/%>shMb2g_OlJ^o7%,0c0090C*YOD
+q0+OK5.DM&=>9akB&:$H2*0P!IhLngcdtQSV].*V_S#[Vra<d*=+eH&q;%:aNUS:r
+o32>I8A_t6&cQaiN)tYM]_STbdgj6eKR*/jBr2nUN?hn\Mr8=q!V9Lu=!J$=h]fQK
+8XM5^-G@H*#D>;J1Zh4&4V7T<baAFedG*VLV].*V_Mn<Z*q-D'!DCXNrh[Rmrs8YK
+9ON<qfCkl0nW=>/0L$ZGAJZhh8MP.4+oKMVkQ2U?](qm2rm.hcl(<q!c2UeY'D_\e
+Z#9Q*n8J"jpa<tlq8Ht3En<=)Il>N??YjnMr!<=5_#/OXL\OXLbeFrXb<Npp,%1Dr
+;Xj.SGKBe@Qna(;n\3TKQ9PAVa,Kg9%0%AuUu+(Bbl;W<kLeV+!bT[VGdHM:i1>Cp
+!(F^$gg9_pFa=61R)&W)%&JdB.idO"O*U?g,m[lOOS+OdO82Vm+T2'jDuT+mdtd91
+Y,d.f2[I0IXIER!HtJ(^gZIQaJ7`3gS=WNf8,1-C](p,rJ*T)J$,WkfoB%]D7YQ=@
+po0,mi?&*ljtCUAL-PJ&e:9eO@/cZ`&:P;.r&KQ-AIm/l_QP&Ks8F20\("\"]EnPA
+_#4.W#+[JYr_*rNc5]Ye1XH[`k-#$,D\akcY=H9=$KqoB07iV^"m2.:fjbeb?fIO6
+T@Ps9':)/`o`OeY>Z1JQlV$Gk4+I'%BElreo1N?+Ir%78!P'(E#L"h59ejM'!LR4<
+>0sm0(Wr=hJb^UZea1WY=R_=XbV)7dh(a[-quZrj93bE^Lj,O1cj%]IECo[ujg`5.
+nX(R!qLSGg,2rQeq<OcA83+Pj+.-CZ1W9X7IUIU2K\n=7^BDDl(78IGA^Yq\5Qp59
+5krS*o1PbC0al2Y6)L%$42S0CQsYG;nMg8;q@S2T_#+gUpplq$rs6F<&dZ6T@"&E8
+h^gIr"N#'mQsTpR2[dh_Jaf-4k*I4.ms]aFRfP[fr"<OtSR\sdn.,NC09MZ3KO6qt
+^BDDl(78G1iAV.g0B"\N4`2ADo1L5(AqBb(;"g7[k*M`>bk`@=f+6(Y_1k1P):/H/
+00uJ&O#OqZ+.-De%R7S(7JQNXo1Le"8(f[V0Y[akG:[u/#3M7[;iL4,%*UAUn='UD
+QXFQW0&[)NIUIU23rIcZ(Z?G9QsV$n`<a5-@"&E8h^gIr"N(1'qdj7#-k$2TeX"?U
+aO]t;@KQa;Q]8s)R$ZV3D#%U(khd.8ru;UMD1V<)!V,%_3<'u*OL+*ZAqBQ+`rbE/
+Ns3f>*XeJ[4;Kn@GV!f_n6"WHi3C)n_.-?f:B3M8m/.t(Q[-8Z[/aHnG?qRo@a>#*
+V`ps'X'1Dl51fZ?Na8`7^P27i,sH`A`C^+_8R8\VjnuN8[[n?:4&Zm]b;fM0++,.!
+):WSps6NnIK?sOhpYbXRS=]ek4/:,+kPtG[E,-em\'G$*s5J[WmsNsqc'HL&cN!T_
+rV>OTSBe1.bsH]ZnZqaJnYQ3c31Z3gO6%S?mn7#'SU]uRh7WP8!(Tq-k&38bU>^F3
+o0`H6.a0k:/*UWVhYA=DE"sSBhqr85r%omQpd_<r^R`Y<WWHQEc>rn]h-YFTodA#!
+725eaYd*e`V!S$4kOU:%=$ZWVLAJ`8A7m6O@k;\M*^AKrSDP!p."qB3hCrRh0!qJ#
+009-?JFeEZ_OOs=D5$RU]E^G]\1$/.H/>mSq6g-[o2?Q]Ur]*s-WL2O$d>#-d_F$%
+X8PP>nA29[S6V9l.r'/)`r91mpqa\/S/KT_m`q)g++Sd-EIR`Hl`n_G^okm@^Qea;
+c4B>2h>'cZebNS/kKba!#G:TPYC^@Zjc8qn24rpe;CDb-HqNBLPkRBAP0Q9]'**7>
+D`AKeq>WX+eGi<0*<8$.OS[#c7F(qbs"sfHK:C?Qr4Vm9o+-<S5lBR.oJuqUk58]q
+`"2:]fB8WoT,dtGGJ"cC?QeS1>hK;N6iGq5#Wb2g&+2g/q,?kU@2/`\2,uU`j;X$[
+!Nnr:q74(`6'%`ep7Fd14/a6+N^_6cDHJ?!I='rYi,UAmIO0FiEekh8">T)kC3Q4U
+Vu6EF!e;T8S6r5.Pk2NH`t8<<,O#&hPWt,P5?t0hJ0*\h"2M;M3^3W=+mSt*g]f`&
+GV!f_n6"WHi3=9`r/L)X5aSSm]/!P<qV0#X@WdY'jUg;s1)G#V6W!A1\M">]5J1p:
+m3r[\C'p]6@0iR<jr%'sD&A2dW82V!ia:jGCW0YA4'qh:Xbkq'#*#,eM#T_,c9K#3
+o:%t0FS_^F1&edH#NqQ?M^91g:E![L0k346a3IhKk09e>CfOD?%MQ17FZk)o3S#gp
+!I>s8cX,Mg6.#7;`C7g#Hqf]N4JoXr+TAl^F)iA3RBrH=SW=dm";f@;Z^c%Gmgc$Q
+S9j"+2sQ#ZNem;]pV'W%b_6nbI.N6Ha";'c&:_TfmBpf&bF-a1(&sT3!SIiI3IcLD
+%H=#NN.p7=3uIE_5&O<<3m?iTZhhOdpujUqYagUB]6Td&Fm$)C2^!Q8.-D[VUot!?
+msI^63klVM+1JBCg4l05'HC4M7Ju!R.b($8qV;-Y<oj2,kKQF6@JJPIr4^d>.WYAa
+9iTG^4r*V.cLM2!-T.N-]2>!oEsXikHVmS<`4(C\I?B/;?`D*\gi_o(P1s781L9)(
+]Lo4X([3Kg$m@^&$#WlUdrBY=#'ODLP1T%ib*gDOecQ6?r0;0D`Hb]r$5Z#g57kbS
+I_QhCE=+VII59H7)/eU7GcPni)g+&ZIK4hXNLV)@hd\b2+!YH0mqGR-DElL8-r6n:
+<+_G](7KkSN2a,-ooO7D,(22\MC?aYGMeBYoB"5e?gPa?.j=St=be$>DtU'W%@K+P
+,Yi9C6/*d<(`XD[/B&WOO52corED9Hn];l^N[p%&I=;EW^Tl18io^bUT0,R?>NPd+
+NN;3,hST!Rai<8Lecqn<7I2FOCPAbMZPKrl.h]0?c72q>_)I8Lk-`g[Nk8`LJ"Uq%
+SF^rqQT?aefQSS-L0O1$gG&*B'BaAar8SR`OcQ!Am*teVf-At*)L>_Far,:$Faip/
+nSc/]cD`]8fnhk^J!7c#\'Be<"7[0tAQN`0gRC!G90'\dUUOG)mOJ,^_R<6VYOh<I
+A2fGL*2`ZtSA3fhrb3n,S,,(^YH"*q2E3o_+:H+padUY\8s:n"Zg2KC2W4qEmJOCC
+P##hPpq=&TdF_dbB@ZDgeY!NE43p61Ph2DRdfI(#U@pNiIV2k#:/(Vda6e\4PMJ%4
+NM!V>]=ojsnM`JCH\@q;;Voq^nSc/]7f5K<o-Y4EElUT^/,)1(OrS8D/TWJk?^FI,
+L(qKue`L\U+m&[P9!5OAiH3I$+"+<SE]:)i+/f&HSc9RhRk-^f*HpJaS_Yp]#N3XQ
+o7P'bk6I%Oc4:sheG7c@+TJVYs-UmUfUk\oG[M>>cHgW8&:[WPM5^bCG#A<R-0Y7S
+LnEW'?lrk'T9>fWU\KVFWPUY=/9n[d+]A]D.Me40fQ>(4I#0jJQYs"SY@-%5(=hYW
+<b]:eTpU1$!3cWbS3Pg8od5YZipS"=E&j4G^TV9q-%g8Z1DR3;Vpcs'#66Y/k58EM
+Y4K9R-!>+*hZ%Yj;@('A@a6XV?HW(,nPbA@$/u1[&p/SgYDcZ`-7Lj"B1%'!]:@oK
+Mr@R!Yi_$3fR]^e")o?Vc4@^-JFeE6;K7.p+,D#oO.,Z]ogAZ8G!qmn*<Hjt]Qgp-
+No))Y%gQuId.t6%$KA810dK^;9Ot11iWi*_3rbW--hZ1JAH7C>3If1/qQs`Ds#0rj
+eOkm$P*3/:<78&LV%h-(oi:8S!RO*Uq74(`Bn!J6rj+"m8%NsnRWl2sUZtfHEaSm5
+YfQXHHLi^]5WnS_27H:pib-LZI^#'ucEGc6EftO6&srmnZeWWiXLol=2ZfY7R.G+$
+]?]lFd8,*_]ZlR4-gDW(#>9n6^CY$,kL[`"RWMI!f&BWSDF3g*BHVc.Pb@VDb3QBn
+6,qfpUZU2[2jlFieB4R=;pRJVp*5_@L`\/okklA1^.5($1_Os1D$Ssn;ZI_eo7P)(
+Wq-=3-Drmh!+uperpc>$f_mEYj.0+Z,V!'RgIfB:?kj=.#\pjdml&m,BE-VJ,l)O(
+6dYY.nEkB>RYOrg'[b\V'lW72#R(_^9!_8+[hg9tiZ[#Mr8Lh@;t^3Cc4BHgLjAMl
+#<GZY`:(esHNGqbpN0sdAUKEuf4c`!fF,,%lqao#buq)BQK7l&61n2u$&^59bC7qj
+R%j.&7#0Gh`GV'Fb@?BcZ,r6.@B.to3P/HYDbb%hF(3G`]II4!j:<FB`HaR,fUq4!
+4iMF&OY!cpPZkXu/>+.Gf+\&-AtOPF;,[@kh;k'f/uOoX`AC7'O4Qf@Oe1l<6mhX$
+/9ZK_62V!YCha<+Z0o^,djBMk0A!>)(9AisNrob7*F1[F^A*U@C/EYP8c/qi\[fuR
+cU-f-Dc=&P`3Y'nj,9Pk7[5EgqT8b25H2RrZm:*M<DL7_FlH*O\8$mso>u]tQ.N?I
+O"5ZXA_,e7`BTQ4hN=2sCT$J*4)A3M'u-XL^G!&<-"@nLEAM6-7IcjThSca*2>=EO
+m;:h#O;sd\.^HnV`S]&%G/Toc-t%2@T+Nk9\*[G?\Q8WS@/>=Wn_7G8BTr5A8j)VW
+R3Gs;nqXOGVlITU/0*gi5$7_+kF_IZS?B)_k7j(7#P27B$A\rA$-EVg*Vq(Q(Ln36
+R72A:`)\%BN9DdIb=RoO"P&R$ZWN6)j\1;.WP*Bd),hhj*[grKo<0'II2?8qiV^(h
+d)DQ*bu!`<!+l'E0rP*8^C<*A!HeloIK6OiJ^+eA[>6k.3s=VW1,pW=7gM.?=*?n-
+:d=^eK$FnsKDQ4$rfm>.(r\^E9bkq[q$,kEJEmegI]i*Fd%dOrrF]!e%dF:cA!-A\
+)cfR6hk'TD\/`\_?\tD3*9%2f6-T/4g0Nmn.KBC*!+6*fk8.kdjnu:VE<O)=#Whu2
+jU\-X%p/$2TSN<^!,sNAc4@^=LcRa#[fObb*XeJ[4;Kn@GUu?FIq*gDct+`JY)F-R
+rjLca%!3%`(\+*=>g,&96(q<6MM9=thQGH''FA)'"]<c'KFf(_AbCL#eM[h.DU`RY
+nm(]<ErNK+YK%Y:rg)-RDerRokfrFFp^\P/r6l$<^\Lf"V_:(Cj1hm@E3>VC=E9O?
+FrFfs0k346a3IhKk09e>bd;<\=BlXUZ^/!XQ>W&_E9h@d1_Jn`Df)cZ1d+]UdI@TO
+$=ocdBs%Mn5@rN<go"uNCo:_)A&f>#H!pZ&39r'WnEsDi_l;7i[\Z1O;i!CtgFFNJ
+L'o`;q;rEo:Kc7d+T@*Uf>f@9Ri1TknSbri:RD#N.-Jp;YX/1cT!;,iA-_-8b,9'U
+=GJp8E`QP7%j0U3cc13&/j$h;ONCUK@V`CUipR38r*tZWeR80CYCos>GD#9][T-Yg
+Yk+35fla@ef>R-;jUSWm[QL)q3PY33F-/p/^,?V=DfMM/SGlJ$e[(fB7Jq2O7uEqg
+`0P75H%sWijS\BC4J`\J''f*X%N^(q,#`I4W<Z%5F4nl]Odkql/\52_P7'1"lu4<(
+be:G;VW74K%ICn"[BJ8LPV\S'Xlg8<q((9gMt=Ho'X!72IaAbSq>G3T`@7Ta5N#pR
+HuA*EGaZ0O>?j(,IK4hXNLV)@hda(cNtjJqat?$VKth)cTr+11%ZjiZr'FTJPatVG
+81pM^`.&"m3^<-^92=.DW4\0,:DDg'"06KldT:PCe#";E)QlV:OIXZs@j]4\l5.t?
+P*m'-M%.:;FI\&cYYi^'ji?0tpNS'Vdkh_`Tu?*=.SmP/cR<DQZUjfV\IoQ#hG;iQ
+E'>4%^JWhT#XO>L:.>(YX5^5[B>7]Q>R-B6g4=&s0=$RTdpgA'JGt*b_F>;`cP[\l
+Bc+H].MqCF\&4&T26@$hA"<.Gppg(X`Fh^K:7IPZO"WO3HW$CXicg`A)_p(B:#@<I
+m+3;*]Z6?%D\9`#H]$"_N>UaSo#mRNrklr5:Ia1jVoLWS*c9nEaS^8DU@TbY'B]%+
+nN4eDhK]Y><d"_k73eil<Gjse3X2s@)_O3:kQ;pfICPgC!Vf[Qr*W[cr*W[cr*WZR
+SY+^@jSsPDD$#0>:?Uf_/r1V7#<tPQo0`H63V5=]$9s$Q`P8h?J9-LM3<7im53M+o
+IL5j&C1;[/<kKX2#J^d.jo"@pohsAMG(/0N^^W9lr(?l\h@MpH$2U0!X5.oIV/qG7
+glt"c(MYU7IY]*D#+a$]V>SBgq6uZ9"K3>mf*fB93h7@CkKrPm!'CHF5?J[\5?J[\
+5?O4i3Ig(8g<b6apTEl621&]:+-F4B<]=go^PIAIA/[t]]:e:>kAd#6rpGiJFZoCk
+^2sM*eZa`=>=gPL4ic<TBsKP\@irn*i]lQ&=2eO=pO2S@X<rDDI4Ak9`'9YBkE!sb
+r4l)k5rXC_j$0j@j?+&^=JgmmBo=sim,d"`p<7hAml\#"Bq&QuF,/6bqg\G&Yk=->
+ASHI\T09U$k>1Ue'og!J^(eY;.qZ>\5l=iPbK9^Kc'drRm!7s3@PTsU+8fL-%.EV\
+$c]3A5*l&BX3fo)lFA"hB@tWDgR;2-d/#?;d/i6F34$4nofL3+7XJ26,<qLEAcJVX
+oB3<]62WHMS.n3@c$2PM/Xmna0ZPj0^Fu+4mqsN-Kua3p`VJ=T-KhrF]CN3lr%GW:
+s*I1\Be]JC/"tMhh9#@p[R8p*DW`ZI[L5_uF][0Z)0_3iYj3CSl<MF.dcX=LmBF84
+'#/@)@YgP#C5Js,cVkFjPucB62*h)8%X.8M.A(QB\t#BUT4=,<HRS)IT"Ma07Ae0M
+W%XCjjg%WtjQ1b[M_95<E+-2:"V2q]k1%?,;Fdofs8/(B-"Wroe67X1b[2f/)Y:JT
+&akHoIdj'roD<)m@g_JJ%lj>dHlhGJGaQ,$@rWCIquHX9K:F$6hrD$6^B`s3CHR:u
+r@^EVebOnWBR8h@_#C.d_.1"=r5:HY@D5,PIaH=#bYPN5iHqQeS[,]T^1k_p'G$Gj
+fRql=_(8B#4O)hCGR/pWIn1J&dJ6q>:ar#il]]7,HSDd22O)_A572k3J^2U7n^0/9
+rJng7k7j8H*oTcA,7aW8j.&>-&q>_*Ua#e7(;EsXN]iL%"8RB.QeS&D^SqS10>Sdo
+\$>`J'Z<d[`IF9NpKnNB&"^U+kKe.c1qmsSF,VBhXb/s(p^@*ji'Abm%ab2R\Es.:
+JPY8[>gE6Ir$lZ7YUjaBYUjaBYUmK5cY`gTJ,Bbj9aE[!p^!G9cZN>$rs.'RWPW%[
+3h7AP#LB*iq3)6eG`.&e`<#-3@<6ZpqV-d]<.dk-,#\_s/+bhd=!LS$j%RXD<kKWS
+0*s\D-\uK8RgI4B6TO9+<i]BL_$XKB&SZ_r"Tu[R^;,$W=5ml@4;'l"rcjuPLLTV$
+pq^A7S6r>QFag/a8,QQHc4YpTI%3C`(MYU7I][-.o;=>9I[p4R"+Xg%3e.""9(\Dt
+:FX,FH(*d\Sf2U/BETB0hTZZ41B8Abc@9G]JYrZZ+MH'M@Y]N4"^iHlI]tAqGCBO0
+b3,<;J=CT)q2+mS*]nG%I2-V_YmU_>B7I-F\18qt^EWYu+[6a<d01J%pM:#p5D7LR
+TA6;bfmJt\3jN/N>_mkU\t#CEbrC1_97);\GOAliiuBkn$DuKd$;q3[<1@,&?1*Jk
+49bW_IEkWk<(Y`NQpO-b@['!WVQOnB8JNLhEln.!\K;CXT0eV1>:!B?Ko/pmkQ(.F
+.S+l=YA)BA`;^MU3<($OdXAr1MQ^#9Uacj-(jNl;ltHnc;#`>]QMIYRnkM)2G&iL<
+O"+ghYJ_Jqs!dS#^KJ7`PdTcq[2@>CRa2jPOM)`Kr^1Nir"#LEq46V#>NApR2U[\G
+nU*kj9)La5$Sp,]$g)9Un=_$!56C6MJ+"E'5NDsV0*iVVG5d!k\t&f[k3;!1"i6CZ
+cN!?4k.eS+kQ!?M+F#Tfq>WjT`;_^X#@Jn+q76:8S,!)PK[0MqqsRUVrr[8]FN&eo
+$;lgOZ%7k@2UV@#qpind+c3NdVnZR+;YA]hWB[U8F.C!6Fr`Y*pCZXb/,l<U%m6D.
+cMqc-"musjKTt%^EtN].]o"k87j.fmRHOLB7FmHV4-I-/nga?(M6WZ(&pf?.=(d9Z
+F7!ukP*"\6fL&9pc7X*\LjsR8ir&%%h&%Lq^C'e<mG;dns2%ITr'pV[l;[,L3.G@4
+Ljr]Jk56_#p\a%$Mq$e&#uj&LJ-Rj]q,RFV4^58+TT8QQo%md#$W=%@U<IV+!,fRl
+k6KoL_"kgP_"kgP_"kgPr.sqdD,4\S:`Q,j8Fhb1ARHO-`;'qP-Tbn+20jUt#jPc`
+7l\8]F/O*JP=#o]\kI,CPW-_o$G<9:r)V@Y:*,2c_8ZoH[p!nm`-Xm/QSDe\jS=R$
+*-V[VIs#?_5KO+pH^'rM$]7WQ"&C&j#Nl=FVI][jD5)fH'>H/bgAH3snUhWV1B2]6
+:T,l)YJm*=oCI0^+2#*Lk-mLNE>6YrT!t,[]gDW^0ZEjOF-dj42sdU*BR@ldD"B,Z
+3K<o'?p1AtIK8edEW1IFb5;65-9D1Ah>.)$o7JoVcMtq7hSAs',"1Vo:BJfP(*P_'
+(OsR&s.0_,Nsi`_3h7AX#LB*aq#ePGSj]4B6i5e-oK#4t%j")Vk(i`JA*@u_809sM
+?K[r-=o\cTS,)6=(4^u.3'SSVK.#(2quAj7cHHg7F+Ek7AV'H*AV'H*Aa+>dFq]tI
+in]6J=KKRS;k=/C:T*f*Kb_Q+!VI6:'5u76m^P?/Uso-X-@R[kZnK?.,^mt1[.[*0
+S+u6=2oMq"=dm7?dbd5VU`*e/&Xb]*QBY.=$bFNtb4I\YQPr_c)UgI6'sG^C97dZ?
+$"=fFfp1_/WG>]Uc4;b0SDS'=lT&(@lTQN[n#BcoMP#QY-WaB5F?t^)B[/]S'#-<]
+&DY\-Q&SWlSV4$<Sa)7,VsAG75l<mqkPSNNY4F0+3Qfh9G*XtBh[UBMGPK@tde#Q7
+:jXY_CF*&HB=*#Qq7W[uW/+elIbXoGe*6epLFU\UU-,:I#+Ob"];J,g,8rVilT-q<
+jlNAF>n.XJe+q>V0^uFL%&DMN:[Be)ZiCL;c4?6&o?Il^:&2Hn")q2a3Bn+jemi?Q
+Z*0l24a*N,lg3WPfojnA?mW;?V"7[+IkKg&Ji(&Hj6Yc+`#Ef;Su+ZEr4?o/o97pN
+/t5Y"?UkmuS*R076UrFGrh#q.q<dpkKbW5[gq7\=>8cUk+]^;A*`J.ub+RJLEp-D"
+6@,N]b5QDhe://.S=a&cP0="X&MZ;(;=_)_]#GI1<KOl8($E'(82m;(Wa8HGrID\5
+)g\%3I[*r2+dBAa7gFkM<'eqWHjtSH&F\-#VQr3r$&JU>$ul2/!$l[m!P)Ak6`T/8
+Jq4^h`u\U$Uka&I3U$Q@s%U"hq5p4Y:,YL`Ef3eU.VO,i@ZMNbG6:(>m.>`25l5c!
+chYiNmA6mahl+MU:;hP*Y_)5t^JjnYIskJtr-2ha"2o[*\t%Y\rphq<-"J50$%E^X
+l;?Qm3FC,>-[n?RZi&o?5P^T3o$W;:4:-D,CX,0*"Lg#i*m-q7^USQ8\SFM#AEGqf
+rAAi/K&FI=Faa=&1-b@40Sp[m:NS=^po>j0:0UP?1&uBcht^R3;kO!`'RNDIK_g8?
+Pg"VOr(>q\?OfqE1'!N/?`'('HB)$!WGd\c:>iSu`"*i*i;E:/^b<e,6=?6pIt:.n
+hJXoC&:g;jAH'18$`i;;C[WN\6N!Lt>j#a>-Oq0[*icp=B*?-`MG//AiSh?'*.+dY
+b@<m:TZ0soB3n<0VnSZSb,a$1?82q?@YXK\Yk*1=fVs1s"h(lO?fS0aR)k>HUD*lt
+AW$']E!N7NIK8d9S0'9iS0'9iS0'<*%-K#3HEI79`=rP*&!E=)7fWg9SA-QQL5j8L
+,GumSUB,QYGT9YPs6[aY_;jX#*]]e(&)mg(F.>I@GDm_;RFDdCnmm%AY"[o:6i=_R
+.J&a$VmliiA90t[X&A(5(I[BjMHQ@>PVnY(n^2Bj8d1fJDh9B_3'Yb`ErNO>F'&*8
+>Zn5KXMmt-oaj>Ab]8.JHhOLlo@IGIg%k;/L`]`r3PQ9CN9C_cGY-0Q*X<6@W%up!
+;^*%+4oST!@XQH\r$d1=]V*CUk6Ko\b]&"2D?67L/.7si/.7si/B\IbVi>Hq9Gaa'
+YuR;'5a^U0`*R"^qg(,l<)%Q#bQd"E'^',4ZL@.#d[^q63+f>bMicAu79WIWEdJOD
+.$'0,"MfqpR:#c2AMP?>pJ,$31I&&hSd+'3#-?&pk;T8d0(tA>\nJik`&e40#F\e`
+T*b(?piXYjD,RhH`"+]R1B30_;fR7$r#pMsRH=?-r(+['TDa)ZEY&AJ.*=e1)@,`@
+)IeXj.+4B7bHa*sO7qCY>d!/brUin8k9-!j<u1kYA^.t9pF,^?h7l&p?cEo.ff-5*
+76#0_r!Q3VMWP.;\>&d"'52hgMrr'eBRWWJe,1@C"lP3Bq+3gK:p0U#5Q&kc5M:f:
+g?'d^E21hY1&:C/TCBaX7e89)]D7:I*/Vq4Z<j^0j4?P2rbLC,(aq7k</"[co3_C'
+^d)VYrt0]gbo^'X_ir*/Ill(rI__"Gci:'A!EWr`9^D?5Im8/<>6=tthY`H"049LB
+q6NX(MS8q,Npsq9Ab5*,(;aE!,lFl=g&-LFId!7#^%dGmn3=DU'9*krpgKJkq=A^+
+d"ejo*]&?9j!K4irqB021`Vo2r4%I<S%f;[(4!cX>L56WSb?[eo7IkRTPONNmF%Gq
+nDbRSc+g/@g7&&P<IFoUKHF5DRpV6G_^]NpWtBe_FairN7_U`6_!0)S=Oh3d*8uZ7
+Eq9OO3N;gU^ceCe<sE/dd;"-PdQ7b;e.(eXo8?[&h5LDle.6EPr/3]6B,M,),DNXN
+^'ObeZh@/sp@L_ALEDo,!rr=/)Lhhh+p9uR~>
+endstream
+endobj
+94 0 obj
+<<
+/Length 744
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V^n9lHLd&A@P9i+A(pH=qG1fiGX_DQEJ3"n`Mk5V[Fq0ouR%7TK$6],uQ_Oqu6l
+m*+3C+)gZ2o/1d5%c&AT!(RV;*ml&VomoBf8V/Cf_IGFML6,_j6CTVUT\d+Chp@,m
+D,TVLQQ?^Sg1r<recI9Si>s3`7p^L.`&m7&R\Li%;gB?^&VQ,,a(LdR$Z=FsLrThQ
+%aYpS<l;Y<h2kW&8>UlSbH@s&$]N_sH(%j(JG=oaYg*#<gXOm-]c-HJkNhKj9e'DY
++XJ+54pp'^e56"lrl8riDsiBI4U((G'N="Sl(:K,?Q#JpS]a5+Fl&HZD4I-=dC\ul
+1:7LKP9sa\r\;G)-jL9uV8=&g-d`E9*Tb,-JQ",mo+kQC@&$CTUh4_'M*7lE0<2<1
+CfNf,$rrMEr_Dih^Gb%A/99iHSS,VB0ZKDIXBJWT/sK0k/f.]n?.!INgM1rKHe5GH
+Ec04#55+cMZM)Sh2AVWNgh`bU1nb;BFiA_sP'C-]#[<AM:$.9dfCqthWhs](?lUP\
+=`!;qT8P$.=cV"+l=R5da:+(!J!YS)lUYKHF!XSI]<WoVMUA_`SSr4._PL5T9iFKh
+T/G.PUV<A5f$k,b/M14"oQ%@(BXMlb&0_^sS5Y\fW5i(Rp26<,946H$,gfGt=oKr;
+HhBU[-CQso=sM9lAP^RtTCn6>)uFt/"5qS&<FR,tj5Ro)(d06l[[6-k/A7Taq[B"A
+PSh3V'`B$Pg(QO7~>
+endstream
+endobj
+95 0 obj
+<<
+/ProcSet [/PDF /Text /ImageB ]
+/Font <<
+/T7 21 0 R
+/T9 13 0 R
+>>
+/XObject <<
+/Im12 92 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+97 0 obj
+<<
+/Length 1116
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YPk9lldX&A@ZcHo(3C6kTc^an4"qV_c#P>O6tBfqHBH)VgCqUqaT0+!?-jVWjr!
+"f0t`]5REqIZo(:.0L$g8G=/2+Bed8^QD<V"pnHEO9>P8d\@$_#OggR8%:Oci]57H
+^M(2rQ%&:3*"&nAD1DK.o7-CF2ef!_.8b;<bNkniY7Ln(,6%4[GL%!p'EA-+5!AJF
+AI#B2Lk5tRXD]1UA_j=IXR6XVD:#KQ<3iUb:+BZdff#oaA7-khUG8<CAdP:g<QB;-
+A@(!C_U-UtC:mj>dLTXeJF1OUB7_[)`<M;RZTJ3*gBS2=e1D1F(:"&=WMUtuY'<O9
+O>p"3,^?DpJ(oVj9-_7e7-[(t[J\49f/XY7:kJ*]j>[\_"WF?!HdugEgJ)]M9rQ<S
+gTcb\'pg)`VMMB\Mg21]f:I%$&E/2-HW;.!R>ZEU=O*p=]V)'Mko-+h*XW=GPc>r)
+*gD8J;cbo3gOBjT2HdWk!tll&QY[pR*%"4t0G?DW)_kf@!>F)fiG/a^=SL<p/_c!H
+!qte<n&e,j(88[DFR,7sYIh3<PWC!<=N@j#3OaY!*bG(7<EN61@Akqr"JNsPgDG?b
+\'ep!0J;HnG!A<23^:*fW@=XaXiY1[2eqelo"49]jgg3ZFb:MZ'G<Kd_M`9D6T8F1
+!Q=,>CWn&(&M]6okGh^db2`<Fb\@6DIf&fJ-HE`pXC>nT@g+a'Zr37!\%D;:CTq(n
+Xs$9QTciQGWUc(Qo?\F*!)/L5EE'D6@U40b.[KTsO52p*B-ZP5SMM_e0FZc<0-?Mo
+js7o9p6gsBTHbR:*,>qB>*B`#Od4OcKXTq3Bkc33$NQ0=4.R\.=tuSSKP)M=@>"lY
+-[D#l\g[-!<%#<-m>'iRQ%cpZJNY(-g6I^Sc'1a%N$Ds)Q(r5hY:4P8(#*Fj3XkXk
+7leR]<#=]CR?ufg&NsK[cdCn[@F>Me]i9d2#gnp&,t.>VrR9>edZr(ee\;):ELZpI
+gqJ$RAUht,>Fs7!KU,bdZS0!JZtkqt&cZ[:d/eF$T5HHe:q_qp658+>ql%Ddf/@='
+G%ut-VGan6UDNc<!tCcp"N&8M)h+E8&!pU,-p_5\7Ke(EGH(=P!%8cWFo~>
+endstream
+endobj
+98 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T5 38 0 R
+/T7 21 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+100 0 obj
+<<
+/Length 3115
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W"$9p=<i'#!U4kS?nG)A<*8CJS`lXHTbY2W`Ii%Z1c2Korkg74q/kXSqem]$VX(
+Q=J\2&j`1Ird+&+qp"-V-=;Ylk%,,f$Fu,>h_k>SbeL*$N9#$./u%H9na>GP`UY^O
+hj\AcqJ\"_8Il?$s"4qP4@W0nbgF\a@MM,]7?PTNL&'aE5O#&8o\R<=M_*Lurjs^^
+^VLMMKh&`5&%h[U;rIW*6A]5%ZbjH4Xu8fKYa2i)[/)ounM!`1=J$WuDuR;'j2>(U
+pFNAEI^S<;,_N:==4ToN:E>1q5LRGekg2d3HEga]7cUfO9KCP)nQb$jQ*]<'>hSi^
+CLr"[Eq%,Hc@:l2qH$1:YE,=TrgnS"f5]4j4]R,hR)3!A`83djBgU^lP.@4X37b![
+*o=c*[>L`$.>5RfF:eA+idS.nW=2_!hr9qUE@X2gU7`p$NO':9.buGWoUj/7:``N?
+&%pM]Clu&%dZ(uXEkup;5<\t(V'3*#A?>;!=t+e^JSf=-q4uCnGe%,Afu%"Gi-^!,
+TZAO&jrr_\.c?2+b>ih>]4C!,#sT-2'Qi64CYSE5<A'!=;XWDo&oI8scA9h`2t.*4
+ePPuRm$.MEmQC#X+%ru+(A98cH@f,!<?<SoVB#=4-<[Y8][gTKJQ"=&@=V_?V38&a
+<n2Jc]!hTf3LNg-`AI+mp5?Z[.NY`WN37Sld-UAQa(Gfs*_*q69]SVZYoi:Tm$d/D
+n1thOGf""Tf,pWW!.70KSgju)EFJb!%[U`Hq:nsg4ca&=$2^*pGjb5C".Ed]&*R+;
+:*We[.ObS[hc`SjK^CF^\\d4Ol=HolaaA?8KL76@]H?"CH0\O%qF)!O-5St3(J6@q
+]@$rXHDk1FWtRsmoYhbbb&PoUm<fe_Q<o7]GMB>Nf$\rg3us(3_o:1P$HkI?Mrc`[
+7R=jBm8KU2e^0Pu!OJMb>P`jUP.F.^[0Dn#YS9S9!bs:d\N/hDg!)NmYoToW@@[D"
+jSgY%kmn^i>FW?pCM\3WKr3.M!7lL6g\HN[8jj:1f"a%$<=fpKT!K>FeUKF;hrk*!
+Bs!P#glJr='K]@jTM9!G6F`+;MfofsA#LnK8B=V^TYe=$%aedDJ+msgp@mZJ,3lGQ
+)lMY":$2O3/lpJ8"=5d&_QFk5lTWS/]H^riak0Z"!"@%PbaQ+):O#E&o#Du3#YhWX
+[7^_"#<Zag0TSo?-$D6"^rd;^AY_[#[Vd!2<ToWV:aNht&ANp.2*:$YKEj"oGln_q
+l0&D.7p\SIks-d:gE^>=90Q!TJMF4JRkhos'+(Mn-[4PEL72j>BR;hFL0#_Y#S)es
+[oeNef3V!1+q4r/:lmaZ:m1HcY[Uc4lZ/@C_83M35g<4c#BTq0fOC`<S5OUsYfsd8
+gXG@4@n5ncbgV1c?HPmP11a(#_ELlS*]h<(?T)a[:71.aY;NIV]HP=%._+3dFhElO
+)!bn7N@I1%;CO!0^2N:OY,at;Tm](YkMhH^qbj1:-BQZNrYEI$&d8S<,V;ZtmR9]3
+VIOfkD,!%m1=0br#9QWB];&Bh`5:B#0L4T'>.R3&E<U&";8O&,/jcKOHuSh`(s!R#
+!:4<R7&CP"Dm4F)dp\mZKi`d$DOPe_Y"V@^5,6D9b/lJTDo.+R("l:p`5L8ffihcu
+F<?,'34K+So7UZ[a>''BDG1rP6-%e0itOdBp'hqaPa<k$qJ9+!L2sf8\KFIUM1ZLH
+jC(hX7hkT:i+0e(s).H7EIM874,TK;d4]0!VKXW1?;a!QJ'rQ/?2%GCNnE)AB@gr2
+,_[Umm=lG=$co$AipK1/bHTZugZ*2P+[]!X6l"Ho)Kt?@Tf1pN'M]77j\2ALruoL]
+b8XDN&\euH1cfY!dBMY0"du!\V`SXc19t3aFJA?kc3')&`4=Wfro0h]9->!+@2P@r
+m$]nB@O+3eDe]Jrs#p9bP%K42=]l>,WSFtVXt]0JH_'I%SPcX?`FKr'\g4N:6;[V<
+0'IDnds-L+(tm]+=K!p^((SnNLIU0*TZdBq49*L`/\VIpjHa(Qj25Z7nHqa2`,$,A
+R<NuXT&!Ot1*LA#.kMSV-r"c5M8CdJactK_h=g\WfV;Iq=F>QbjVW5\^.^6\U.m^p
+B1sH(n%H/>'2BpSo5s]0`0i?qA5aUXJO1!pB,hd_W"!4aQo8%:=:KD6!_;f)`F26[
+\-+o-JPt1(%M)C]?+7k];^7r?.2u3(-dsHH=DmI=;!HZ8)G6BE(p7cOO;Y[Q]K7Ms
+b:n(6Z"?/Zh[3^Pd1Ch^aoDYKb#ga3YgFfK2'p@2?gGjCQ"6W9%0^:jc"u6KaQsHh
+U*sbSG+lN#Z<OJ8#4q#8.9WQMo!k>6bOHK)?.r>0G1BrYnA2toB?.b815a<9g'1_V
++u-O6'=qrc<,&;L^'3]bO]Gb=a1d>frReN,YPp9p)%FiZjIpNL87;-:F3goFDXDiK
+(>6<U=M#GuVB]YPl$g@c;*-fte)W(?J.s!hf6AB/)L1Si^hj?,UENbuSpLP4DQjJr
+XmaWG-tZ_0jnt_3S:<]Dh`4%tT7rP^'U4Aqndc;@+nKPJ7Co"UD;Q3$+c/8-S*=V8
+LR4XueiW94ld%_&fqgn"4-r(G'6"i"&=3'BoJ`*D;0YOClH`22LVfBt`k_K2H*qc@
+UBDM\c;=Imf/ke/,$]KN1,s#[o;EOP+FL%q6Y$-Wh:_+,&6e9EdSMY35">]90Fc-W
+A]7CE#O"f,k%jAL$$<%Mp'gbFllb5fOBY.#mu<ES#fdDtEA5PWf3<sU3T,u2OTc43
+cVGXTOXY152I5F>jl'io4n^)-U<".X!^rK_T'4JE*qPZRF!JU-o];nAhK]a1hk^O4
+*&nPU9#bm&i4-O)]g(`&aWAD&,bj9K^;pZL;>;bUg]6T`B:3t=TnmW8bj;Pje[rh8
+co=a4\-hCB68XrC@5pOn@5o.dmd$hk*q)K+!CM5ZYsG1!C!btoSM3s)V38kc1QDP8
+_oKrb.JdFEqC6l"&"5+c$-PnrNSdV_a`gaBAG;.'MTa>3k7Ir!84M-o,>,@'+dIj^
+A;sL@N0-SbpdA:`7!u+13%'cO1gnNq6?=Z_b2?[Ze1D'@Q/P7<BsBL9h9>^G.II!'
+B(>$aZ;p@t~>
+endstream
+endobj
+101 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T2 102 0 R
+/T8 22 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+104 0 obj
+<<
+/Length 672
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VFe9p;(i&A@rk]LAlq""63:ZUpuCf6EeG^aLZ=!sYtfoBuc0Y.Hc8XKh/rf=]^a
+C84^SNa^]Q&]c,QJc00:WpL7a*2'gT73EYHe(=%B*jrE1/kV]^1)m7Ap/cnZc2dpl
+QF<E\"R"&:X"nV[[5jkTkkLm?'\YuO/HdS=<])!hFlTfSC!9ac*'2fgk:!mEFj4)j
+j$WQ6_K;4iCeGBaNAYKa9#9uIY+/4<F%gEnbmL)I4o7B5"]^4go:kB/UM4C).Paen
++mk\[l=6d*0'42(%fe?_bH?6]@!6'%Z3R?qIV6bWC?Z-?@gIETee+MQCqiCV.dZt>
+iQ3"&'V6j\+3;#=qt[5To`H%F-G$r3-ITHF3&fb1[I$@LP?CI=cg=3)N&0M#l_Z[m
+,OBU6P2'W[*dI0G05ABC\`W'\=M%.p%]eflg6Ui[e<NBd>O4h.Y8`'(N@kOf01mqT
+Y7-_G"@nZFU4Vm]kW_14!=0Vl?\"&\"#ZCYB*X>[E"UX`D`5/)b@4PnY4AVl^g\,D
+K1.;`=80NX\u2BNF&6GADa\\(7#5gJg,O.oPA^)dK`k+X=i,e>"kZ6%l.0:dWfAQR
+c:]-hP`+4m<)bO+"<]%C2%XU73VsU;oV5i-:5N;"=l3@p(0d)Ce"F4Pn]Dk%gb<*h
+khcC90-]N~>
+endstream
+endobj
+105 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T8 22 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+107 0 obj
+<<
+/Length 1076
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WR29okbt&A@Zc3.eLKO)6TC[T0B.4gq:*2?u.%KU*Gh8CNjta4HrbS[R61)eHkG
+R<a6;Du@$N2H:>U=R?3T!Y1@f9@OUg?W<m.LXdh=i??j$p]BD_(=1M`W2'6(MA(jY
+ME9Vf5N?VR.EFe7+9WlZoe)'ge%#5i5_7B^I*CU5$g0Z;8B[m)3d!oo[2kT&RP;6H
+io_4J:YH&8G"Nn#M;Engl$7n83&lk,WVr1j>"?2Z`sDclL.Cd,cD(?6BO7/!d^:`O
+F[!qf<4*!JG5(TUObZPJ+^^Sr)J;"#:(;.!.0!#\%/-D`+U56H<Y085)oQmiFfSQ!
+7qeG%-bWcpPg3'PpY<hsjchLd4*?14AQI/6Cn386h72p/%]"Xe.O/>2OR(O(R&9-!
+@l;)e:iRb^bTHT-\,q%CO>WorL&i]a$SqPC70=,p)u<]-np$cS>HV6b@ahKn;uG&Y
+ZE/RkKZq[rS]AXY;%sX4bi00/8u^!%GFn\oWtR::$cF3#3qlmWYo,sQUq2%32rG,e
+4usX"S/.<2AI4^E%:dNk-+JE0n/conQQBhf_>hKE_N5=`8I2mtlU^M'*CYIEdWoMj
+'>`186e0*(-+o8Xb;*9N>l.q@&_N*"Zt+hbVMc4[g-"r"kFLH.&/kFKnH/u;1GXXI
+?dZIj?l0?+SN[E9hL[gHhnEH,I9<Z=_")U`8b:B6Tc/i7LujQMNO.EBS&5YXR!G)@
+Q<79&hTs6FI>CfbE\b+dlDTl@7;k*_iXHZl(N+"*l&/_WbgnNNO.O3-(*.<7LJDt$
+_;<sRHPUut=TopDTo5@o"=p!hbt6#^c`;.l9@fX#V18qcekY$`2hu9OJt`DJ5u?7X
+J>%V8Qe;MS3U)0(I71`F1)oi"MaFlUZ_=`UJ\V^2=m9BNUL'VtDbeAS^/IjG#F).q
+UGjZl?g\D0?&I=XCEl0J+q`V"?4c)Xc<aP?NRr9MNGUmU7a=7QqsE+5R8#9^l==1q
+21t/Ibt"88O/6;:^1H]u;,`q:ia00FRfb8A<R9NuFmXH9lH:`&.DMmc8H>ClWL1\?
+&Q?78^'];u!"b/1:B~>
+endstream
+endobj
+108 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 75 0 R
+/T7 21 0 R
+/T8 22 0 R
+/T9 13 0 R
+/T10 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+110 0 obj
+<<
+/Length 1479
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X]T9on$e&A@sB)!F8/@;AHWqJ),o)mh%joFN.Vfg_W,[&mAp%#NiC&Z!1T,_r0d
+a\DmO9sVU(*'VZlRs@B9c"9aS1<9"Q0LJ#NF2\*]j_lmRLJf4VH$5dQq/Q-#lN]O:
+pAFZdQu*YcQcjE_5mT&U;c\B$pXsJk#kJ-(@1JJ!4BoJkQe@ue*%1%CqlW)*q,o8'
+TjIZ1l<2XWHa10%5o9YiJ0Tc!`D-tt2Y+J[W>Lm>.J?^>7r:@q=aSFsgPEN[#POi%
+Q+WOsU_^*j\*V&e;\h_5ei8Nu*$Qem<csmunm%h@fe'kBAaJR2oY>A$DY^&L?5R'D
+KKGm746/0r9`XAOJ$62t)mP\u$>R2^cN`[%hmD3"YD]gnpL:5kiH2"^H%4=hnWsIl
+$-(tN%<8D.VjdW>K9Clt40Bg"[/G79kY:$4RL76AinAO^)'IsQj#UdZi3BrB^?M[M
+/Cngu3M7pY34KnMK&]^mLm%m,B@[k6+:B;8e#50J9cU<1_($ji9n3Y/];7m@ifeC?
+J\qt_^ph$6,gHPp$61oBNjn2;T52&+<Ds0hfVe1K%W8V59sSHCp/u9Fhoi*+\sB`o
+j^e.O`,$abL7!Jn<=8Q(]s;]`;GUDNY+GE(lDD<RKjm'^i<Um!M=2b7-B9.b'^aud
+9pV0B65ENg^4Oe$:,$_WqJI3Y6XM.WWQp(3\5P;28&5nm!-q^Fkkud4Xgr>r%b>-t
+<&IKGOr,2A4&OT1>lnf3L63o@\HP<Mljf/O^\gSWS,<[O#/TFP&Dk$3`T._fh(IRn
+"7#Obl4-ZC:Xgeb>\1L(IYk'MI6^dpA]\@V;\b6o68j%B.Y9urSDW)GG0U-RJ!;'=
+Jr73q84"9hfY"GR)t]7A-.3u)87ZO:LOGB_'HQ<2H`?4EhNWD(?V]$LS-I"1k$$@e
+W/8;bSL8I@XfU"`SHkod.n^24dI%Au,;fKn8PCU!gJjg$f+J[pYOc/=eU>H66qh\9
+d7E):$g$+smQKtScNs_2;DC,[8X-s%An=\DD1bQ=@2t=uCsR-Hh0`(G2*?@?PdK>:
+O2+]X-lFs`.ufipTsVpbMf$/aPq85FpQWqWn*_5t+iV+VXH5iaq6UCcS`JOX[fE$5
+3[Mea_WWE^RB^*?G0O3t=k.&'WKAoZeN?78EFjH0Me`h43goD'7G(\u_meJrW^%pF
+g.d<IMn7D!H9ha27(!=e#Mg4W$K?UqET4FN,P=$\/!oNn.CLjK/fbL_gcXA+]\VS>
+ST(W/PMpC5m=dGulWWZAc7pPQ:gOa0lF4\a0X'M:!mu'h=,T;VEGHM-PEDY.JdBc#
+m#XVn;[Y.sU\ZP4VJ2GKh'+1I,p]CR->c/1#jDS0'U`o@Y3,o%Wa:m&GVaQ.?+WRC
+Ur-^BZ["M=C^nc;UM.0=Qi-^rj>MJFHt`=cg(KUoi(Q!KEf,"O8)X@FPbmm:$ATmo
+Mm%.VrPF)<_Vgbsp?r!&iIiT~>
+endstream
+endobj
+111 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 21 0 R
+/T8 22 0 R
+/T9 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+113 0 obj
+<<
+/Length 1137
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X]T>Aoub'Ro4Hn2-tG8o8(Y7T3Zk:&=tOXm#p6,\<f+!GNoUh/AqQ@iUu]HC5PE
+LtKc2qOR(7T@2XAjWP,_I=NM866r1ErKbeY+X'?IKLhKe#:M\;(LOr9nBf;O1_3WJ
+[q/R0V;DA!=Hpmf4I^d0<a5CdZ`%fK]"9GqQ,I8Z?rMM;#-1D)Q>DM->@b@GXL0NM
+KWf.*gRbB7D4Y5]\Cq]A`^IKo/QHP.e33#"!!-\\IIQt"8$/5"!p;:u,D6VAcE!fm
+b!nt@!`(t3ZZ]!5eXIo^E[E!f0k?4V3`48s=^Q8P#kEb7AL1565IR[X!;\Ze'7En,
+b*unsCCOr5e]Lk`fM<!s8IWdp_C*$Z^=TCNib&cN,4=F5Bj(/M3q(7heqo6Gc/kXS
+$Bs-#AG&S7:0?if;Di`#c![]sDMi22SVX7J/'?ZdPR^U1mSL]^fXRNQ@L\Gt((t(q
+[9%.2'#3qN[p[Jl@O?H1#mNLs>9m.mrIhUJIr&m++Em-(6DS>'G6t^<aabO@mOBW#
+Lk<pf,uPWF^o)i_f6JbENoQ*VWJ"mm/>Eg,?V/#89rGq)H4DBa?.3"p.E_M$NGPHq
+[^`p@"0s*T'*EpESLQrG!(;696L?aV`<Wg@9H]E?b@2eYKQ6E9OfG^J@m;urrf@HO
+;pC;t_)hb9"Sl2H1<\<W;=1iC;<8'CIHh't['8=N+T,:qQ7nW8Ac#m+m@53l"#6V=
+ku%om=7gc:!K%a:!T;>.rB0r,!4<FP6PK9h=NP3dF6cZ)m8BKPl0/8;$&:C4><0>#
+J$9dfGR!#'3egg8r\E3i;pX*$qi."Mpm(E.7.:bZmJ!V2J7D?!oLem^kF?PONB2n!
+WQClcDanD(TtqZp1Q[]0__3TmXC$E(2([m=hrMffL(tqLc5WDBVr"@d120mXlKQO"
+Q*r6FSRIF]f7(*G_g`c=:/`akN5l-c$qCHf\q\GiZ`S,\K\n]eg>]hl-t\WeEbZ&;
+UEduJ[p'>Nif//k&JLV`o=<&@iP0lSM_4XlBA$dnTsG>grMGt/mpa35Q%%+9?+o=M
+3p,8[bNkB9kSr['M:9N+0FMZ_*/*43@re5\8DiKGq[>,_U^?rr_m)HM&LOtZJ8CIc
+QSeIn!3^WRmf~>
+endstream
+endobj
+114 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 21 0 R
+/T9 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+116 0 obj
+<<
+/Length 1122
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z,ga_oie&;KY"$6p?I7BLOV66XFHB[I'`DFkA=9KR-&acL2J6'6@EaUr+4QD1&9
+Te3Q8VT=7!50aT$&".X*,r7[,<ZVT%R3DC4cqfMr7;7:n/DGJa[e=T&J&/I6/"a/b
+S%m`bBA_f,`["+(1n%tt^%j,g=tY]DX;ggj8uRu<0BBmC2nr:$E[HCKql13s\l+/(
+7G[1FHnF3U+[T=^&Am7J<A40c[=5rTDX=:t\A076dL3'eK,:#BH@\HN=P=-5M4ggA
+PlRMF@+ta]8XEj^.e\UL>_j_?`H0/OUa1,J+fr3NjKCIQad9`]ZX=AtWL%WgV,ub(
+dDsN.Z'9aR'm)0f:p9\h=+n!f03\o#e&rRS0fR+[#klfSacFS+N@%D*G5\;*+h?[<
+iQ"t0LIl;XLV;smV2VEuX>e`"D10c3.&F']?R,8+c/a9P2)cc(0HSuI2j:B/At,-j
+@atd6K!`^Z-Y5j%;6Tlq*<kQ?5SaU(B-WHM18;^AOUm[HB-h*070Brd^$?&Jh_Z+E
+d,>Yk\k\BNFMu)XEq]eh2($8dKu)aUD$TJ]F*k:2X@>%6$rb"UNZu@k]@-$Q5.-dX
+,oKa+Z#=&t,8*`@RHiEl.1d$^+3HpV?-G\]do$?K8GX<>@W]o2$99<hH-ul.]'[Cq
+8:4#;klJ%u8$6ig@Fs#'QMS.PY79'q![f[^N:2%;n*?[sN9n^b)$6^2boE)Lf.Qj)
+b0i2'.nfb!E!BK=%PT@QY\,V1OW2r5"b9<Fi-<DPj5U>9XdaeaXBHhJ+YNN`i>O6u
+HL+*0E)T548[:QQpY3GVGLu?%ha(=#Gl]-bPs&iGa<mQP$]'#i206%;q)\7^cL.Yt
+&PDo@8$7"JK*pg6[Vl]`R3>$nNLL71`H7j+Too6,l!icHH>k`8S>1o=SnSV1q`@o(
+n6i$Ro^$PVSES8*<ofu>'@M]J6+oP09^u)N*CR-ne\6b:m)EG5nQq,"3-&m23\U*Q
++1O!7#uH@^!H^oU?$@U`Yk;#Js%Q[deTc--/oLn8>>?N305J&4AG<+uip-5"(s#3.
+WE8.\_+S'WVYg[P0>=TBPJRc12[rl=PGRd)%o_1"+fr<;l*(gYlVlsE)?;rKDY=~>
+endstream
+endobj
+117 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 21 0 R
+/T9 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+119 0 obj
+<<
+/Length 722
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;ZDohf"u<&BE](.o9Q89e,ZdYgLseX]++9hPNK`i%V_F1I@OQJ,R/0#o#IE4)*-m
+7#IKjpW<6@mp5^UGftd:cqi46#U&\(qnA4D#\h)1:I,s#j<n.BppmlHr<iLNf<1<;
+pMo[<iOe0eMb+JhYLY_EnJ9a)'_U?q,sQJUKNW68la6LPqp64a#\(pk6I[SRGsu7t
+DFBpb.Z4?.!7[\k<Eg$oDP>G,MQZaeNYsUg6]+ZY\]LpX;=RNtnmfKHRY^'3Ck]#[
+p%1R!"J$PG4ES*)rmGVj&LEch^nCcm8HXX+nGAs*G5Or&$"[$lL#K9lH8KZ'HhZO0
+Yp6p8Uj^*oDd"6g,8H>R+d5u+mr_U*W1bI/[h.:K[4%$.7^%Q(I:K'N8*[Z6ZSAj%
+))l#m,IXT#eIPA'%,mCJLg=q&?'L<QDWhadre=Z(f^N7m3%`#l*i.oQi/ju@J*r5,
+g4`N:m\E!kmk*[-WoiT2`.In6@0k=:%+r2EWIeLd7e;/0>@Jn+dM(>ZQ"H+V-bU?"
+[KiKpW$DqTG@$2UATG8@g"T0fp48\&%<&brs-uIRke&W9*(OPa\)Pg!DkDbk0)@X?
+^)^:L_t!6=ZtX:89Q_)@WFlXt1a6G>&gKC/s#JErs&G51K)S6&parQ:*sqJ5!2_4E
+kJP0>b<aYl9u3J%l(LDZ[rFd+&=,nhSlj]fobp.J<WlQ,np$c?n';"1S]cu~>
+endstream
+endobj
+120 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 21 0 R
+/T9 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+122 0 obj
+<<
+/Length 739
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;ZD.bDr&G']&?qlm>kgfS5&]<AmjXIR)RDZ`q4V>(R>GTqeXf?9`tmN+l7jZ^N.s
+aF0Y$n%n'piban3LOPD5+FqN<ik82jZ1n;=!9>LD&,:jfrUL^"7457%e6D#[BNiF/
+N<e&j^Xd*8Zt47>lf>Y_i=:`+aX;"lZ+cMN'VYScQSsc*hHM"s"7H<l!1LbbJ!gYq
+XM']feCR,T3(/UHaqC\BLVYGP-o6TiaU&Y>0KISI&(7roOh_I#Ep[tXf1^\@QYW?^
+iD;EO95@-]KBa[RB!s7.6PZ^C:oE_>;b[7#-l*.iiC*f"buul,Po9u61F<=="X`7f
+:__eGiBSuA3`)$s`k;L8X]S)+ODcH4?`WK%KU"TK:O')Ea-#4__HQ#%d@=QVr0g,+
+Of?!($?_$+g%Meq#UcOXFG4.6,6+J>5n*5cW+%3Te0kinH4)oQB/Cj?*ukL8g#0!#
+(G0@Hh)G:B>aUnhPplRAgpdXk4`JWX0=+!7JTX?LB0/7)Gj.cFSd..ZgilWX%ONR6
+U72'\/>EbMk(;o]U2Xpt4PIK"%bS_sU#O^\VIuc)A%U8)iS'=:h9n>?W/f8A5\hA[
+'e>kNCX)6q,`,GnH%.=Lpm_%2AX6=Pn^6<W3U@fWE,uU0dC'<JF(\[0#_9bfY*EZ_
+DO0D:[.O'AjEQ/4r1bT#:0R'fcD\n,,tN-fhZI&?gB?jB*+F5H\qE+R4\-HFYRLE!
+G^fntf\mjZ~>
+endstream
+endobj
+123 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 21 0 R
+/T9 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+126 0 obj
+<<
+/Length 1676
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VFh9lhL;&A@Zc\7MVS=C:[-2qnm^ijERF9K<?)%fuk^4.[TOK3?gga%'$#K2a#5
+KooQ@maqDDl_YY-Q$A8.j`Z;d9ZBX%B'*Gi`[N?G6H8-A#`X&'X1KZ!mlL-V>`YTu
+\Z02HC\_C'.K:;pSDtG0K[om=Y&-q/kX4fDPm-rTSS]4=ED[F,2N;&2mN8&/qFqp8
+2"eMo7#UghT$.I;CXF0+]3;R?p!*.'6LRbLn%LgU?1Wq-CV!r$);bo.O%nBtLE0]>
+SBq*-lf;:G`s<J4eIgn^0qfr7pt;HtEZGf210^fp)XY/`0!="V]iZ4\e="$=qc`uI
+'^i8De%3;`Q5eS3(!cLuleScs>I!V8`n9L%dP8a@7fe\hfXi!Y9`SKlEh.dS(]D'M
+/8"!a&X7gn+ge5,s+.Wj2bB/4qu(%pZ*qG:6":0(Z^cOXc82YWTB4g]qF(oA7%Dt8
+,A#F`<GtnU@t)(73[L&rg7^stn#3nD!KnS;_TdAc<@)rM9@Oj#MQ\L<S7-'91+'HH
+d$o99Ph/WH<cWEOa'3WO^k97CgE.Q1bV&OIq52@R2!mkX?$ra8m(g5n+6/?;@Ra7T
+R:!k`#ZD?LMIZ<HY7kc=j?=nDOfVOlOKQFMiOHJ!)Yf9B]Xlet@'213d5B%>*;B%+
+?`M/@'&.jg>1o:e=Q7]s)$InbRRo<TJE(]5RWDk#nsC*(9/''I^HD+"oj-.GN-%>R
+M[BZ)h9*bco1cIXnJWlGI=LCLCZaiV^J\/2B(dj2=],]Hf>L/PMLBe&ondQGWSOo-
+]qVf(bq1=f/'Q96bXr[f*9;EX$EWH($%]>jhfq2j!f0HH'(E4;fS_I'Lg]gsfH9g-
+h8.Y)_nB`mg]U2Gjql"D>F,%Er_h[R/Y?=ZjjfC#+&f+.lDJOH:4r/'@8;]-1XYnY
+O;=@^T!X#e*;E9NmN]u+B'C"/06[S$dXkuE%hYZX(bROKr)i+7V(Vbl:^-Z.[_,oS
+!6P%cM&sWMAI0U8&('IOn3%5/*D"SMH7_no_b'rIglnDc9*pSEJo9KG=(u@,+#>>V
+8on?lN24[AEiR&i#82bB[*]?O5U&e^)K9+G)ha)Z(L&s/R-7"t4tq5l3tE$*/mN(h
+!YAA(c:Ffer&fqN7qj>V8cuWX2jGjOaj3?**1RNEQh'Oj2>,Jd!%g:r$BGPu%42\T
+H<!Hk)&L=/L=Lf\@l/Jp-pT=&$4I"'FC<d<q\+`W(<lRjKD0[>CB:uNACteEBSJFZ
+D<e6R(g)ps;BY84]aR<cMs!3Q>oBL>2+.0Wl@:L%2#Y@k!-qA^JAq)PUCjWGq&)LB
+k@E;(n"q]^>UWa\,9jtVc#,TjT&pOp*eEed@ph$doM!21K+q3?p,=QleVs7unc]4^
+%X<+*Mo6@n$/-H2rD:MQe5#38%gn&>^MXNAUNbD-g!#_0@;eVd0@=nHaskQO@-HD"
+'?OVj%u)nO<=gdWl/cEd>dEJKF[3AXRMSEqSR)f1"I`Q3F25QWaC0T3&npt6%C9dg
+.n1#q%R`rqS`gk8JXFYC'V6&W6dl[t4Y-\!juDni%QNMW5U?@)$Hk8n'n"hAREUM[
+,E/WF7jlBG")%-+Sm:be*)<rjZAm6/Iu*6togTS>e@Y$hngVQ@Bp8da%ZJf6@7i!8
+ONbh\H&s5`]dQDN%KJD$&M!~>
+endstream
+endobj
+127 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T1 128 0 R
+/T2 102 0 R
+/T5 38 0 R
+/T9 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+129 0 obj
+<<
+/Type /Halftone
+/HalftoneType 1
+/HalftoneName (Default)
+/Frequency 60
+/Angle 45
+/SpotFunction /Round
+>>
+endobj
+7 0 obj
+<<
+/Type /ExtGState
+/SA false
+/OP false
+/HT /Default
+>>
+endobj
+130 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+128 0 obj
+<<
+/Name /T1
+/Type /Font
+/Subtype /Type3
+/Resources 130 0 R
+/FontBBox [4 -42 151 144]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 66
+/LastChar 121
+/Encoding 131 0 R
+/CharProcs 132 0 R
+/Widths [165 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 113 
+129 0 0 0 0 116 129 65 0 0 65 0 0 116 129 0 
+95 0 0 0 0 0 0 123 ]
+>>
+endobj
+131 0 obj
+<<
+/Type /Encoding
+/Differences [66/B 97/a 
+/b 103/g /h /i 108/l 111/o /p 114/r 121/y ]
+>>
+endobj
+132 0 obj
+<<
+/B 133 0 R
+/a 134 0 R
+/b 135 0 R
+/g 136 0 R
+/h 137 0 R
+/i 138 0 R
+/l 139 0 R
+/o 140 0 R
+/p 141 0 R
+/r 142 0 R
+/y 143 0 R
+>>
+endobj
+133 0 obj
+<<
+/Length 537
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YjI]l&HV&-m/E$qO]L"T/<QERRn?OO@/Z6`"tk"10(1Zta5uZoe\V^rV%F+kV@X
+^ST;<,tLGT0?>-r43RJ8Xd3_Nh0Q2g^:[8q>/!XX\a!k=LX!A1B?T`+q+Y`_R65W'
+P0%#0VbFN0f1O43]2tUH?`u5s;.=R6rABiDLkn=u&<VT5+9@9`kpJ6GMlh*i5=fRf
+*lSg[KN(P_j!^05NRHIGNREFN_5/8/Q!t#4,!2EM<(`bc<%=LkN_)ABs"$&o-SGFa
+NB*EIotiT*FiW4OqC/*&]Tl%lle.7eWGThB:1;sh_kA(e'612oV/gq)6!Tm#UpRfl
+Lq=(^&1!n<N.#@h+UF"QV3(*jm+Z<s:BNU6OSSnA;o;Zs2S:pl.M^H&%2IDY*STI?
+m.rD-M&<G7<!o6c1F/d%RjZ%uV=_mho]:;MQm9+%F/0aE8#1k8BtTVGhOF*h?rB=F
+n":$qkS1k0'th<Hi?ROr^cGQdmdB*KE0:Mm6BKiDrdedDSucrbO^YO[%N0P]a[c.i
+!!g!S_#~>
+endstream
+endobj
+134 0 obj
+<<
+/Length 519
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y9LYti1j&;Dj\&BRRiKDG`o0i1l@.M\&dJ-6Mr!/sI!@#c<\O-3$&fYNHMn'6b/
+'ihKr_5ArHn'8[t=fDd3bEY1i;Q4`J^6Hr9]F.^mrT@@eQZ@5Gr2QB\?H'>beYDbp
+U:U#5U>"I28L:D!:4@Y>]nkfS3^3Ub2\$8sAV;(W&ZJ-$0Hi\I0G%g[2LlRb!,Ou*
+g=V0o@Z<!.)q/JZ0oa2]1tSWP4&/EJoHEfsL1m6?G>s[G;SduB;#-_3T?,8+3u7#g
+53rs0fo(N0;M8aS#@e[f-,eh.aelL#WC\Y:Uf3/R+R2ikqm<V[6'k%*;"Vj6iEDX#
+m2n2Y%HG-!\jU<JPY%'so\MIjoYR#j1Ng'(3K[`?'D6G#9GC3JLuPt*'?hm%-,JJP
+J@,0WVt`scPOs67UnEC?;dHsqeP*a:%Xo(AFJ[0fRDCd4c6c$h@2#d/$D]Se<`gb%
+&c$0-Nacqd5CU'-3/rS5F)3't#UR$gF^-0](-codM46ssM!k?E&o9!P~>
+endstream
+endobj
+135 0 obj
+<<
+/Length 487
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]`0i#V?'ECs")2]u@*$N#rUi%\_9L/h-1*FEO!J$:5"ESUj*$n+rR)+[Uhqq1g
+US]%m+OLU3T:LAaao@B+>`$!nM[Lup@P6_V.:+>#i)22$*?/$gI4:j3:+u'`;t0-V
+5VLIOZ'/gi`u?1I<]l2AcgNf!g^:0+PN_C21$4V'5=&TTAiE;(ie`l#=mcmM-h7PR
+`mTE$VW)E"LL^K+_q_M+6fK;`VmSGccWQ3`*Eeum+>q,9G[%.iCX.ZZ=[s-&Fp:*`
+<c/1X<GoA_`](gQ&DBtp,9e_I1!RMdO9Qbi(>bH*qFl*sT'ukq*rCAE-Q*pu4X)s3
+bC@Ol4hAPgi8.uMkU2N31"jh9oF>W0FUSU)W3W'#6^Gf1rT<`g>]hFJYPi7kSC11H
+&$l7*/K9F5G1^-34XX8A`6D:JI(7IM=g>$uGI(7-ra(rO+E!U)'#NK4J'IWQ3jacX
+9(jR[iO2j;=7@U:1B?CoN_'~>
+endstream
+endobj
+136 0 obj
+<<
+/Length 663
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YQT4),`i(rnL-0d$lc_WV'CXrOd0C;<C`>8WmQ#=qai84`$:UZj0fK$#Ns;=m$D
+o#?SB/tt\lVoSP[?S^c:p\LQ?gg"W)Y4_Z2rQWEUdd1CkYKa\35.ibW*rE-*jR#h4
+*ctYQ]?d]2GIR;g[#qu\Sc8TRcZa[4W'b9._SM-OHNgV[+iY(*0`\aT*R&XkF!Pa/
+@M`GV&BYT1Uu&rm3Yp&c_?.\d!>^n'LE]n+';mk=#0p]0#G=N4p*!9iCmdD?i-;0[
+O?4_G_(Os6`1_gcQCIs<MF*q_=492q'MKa:Tq[$35(f.p_gb-/c03TAWh/BQmbs\Y
+rBVrX)tHO@U!c?Mk?4ff9,L:Pfp(&aKBS>lb77@-TO"EFdP[./8b7dD3>UDgDhX&*
+&N2_)Wa2@p&rk3aFb,:%qM)S9;PHjbTt2kBLpKn,2+49bM2$brL=!-M"BLj_WZ`-r
+AS0,=qIsY]>SNWA/)\c5A.,BjA>H"TMnuJGg)rq)>[7m$=d\it\QmE?P0LkK%AaRf
+RHZ2)c6t47&Zr6-:O2ET.-9AAUQhm=<H&[%S4U8l:gOT5=Ru%bcYN2_:\cO"G;%UI
+_]pt,U!_<)Q1X'MYXM\>hD\OelJ[PVb_desZ`W)Oe=.**l6ZFKYfT[2q*k9'!70nD3r~>
+endstream
+endobj
+137 0 obj
+<<
+/Length 331
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]_9ko;G'F4+T/hE&[O"g#(XcC!78k<-aMaF_l!Ko(IBPH&[BHG,;AEcE9S`e%l
+cj1eQ#,7cOhg@*VUC?;G'>H:.8Oalj,^uGOO`'`jLAA0O-XVA3T=@G=gQ:hlmu9EV
+>HF,9d7`?\kBm5[aU9PoE`[D0!MDr5S"RoY/4Nc;S2eY(looR'7#sBU:.H<WYWCnd
+c."FW$:?M`AY-[iS$eV0`-QsiZEX,4=Y5[E+2fiLe[\jqZ/Vn7L50k9Su!=VI,ll>
+*M!4D%7SMHG=\lj@5[:3;e7T=+&laW/tm[sSV\$KOk%2P`2Tp0Ih?$$>iY8QH]LSB~>
+endstream
+endobj
+138 0 obj
+<<
+/Length 239
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X<A77R"Cb:;"[`q:KbQnW67rq5J,u$UWFr0&CB,WCF1If'\b*cS9J!aH4[=$m
+qG%(:$AMg^T"YOX7AZtgSh:BMru\KF%g!1;+S$$F1PknD^^-Yu0JJ$U#7M%65jA=O
+"%[,."+r^f@UK1OKM_]!'K[0HW[VU>5co`$!pV&0"/4"o3ZdFK_$D+Ors/FW+7)Wm
+-r>GEW#mG;T2B?6:^g`.:G0WJlH'd^"W.5T\R>+~>
+endstream
+endobj
+139 0 obj
+<<
+/Length 156
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X<A77R"Cb;&"[`r5KbQnW67u1="V:h,/bKMeF:EagE\<]B-^T:lJuJd;^'@2h
+9A_26=i$1mhpYZ#Uo6,8bL8o=s8W*0pjkg8!s=Wo@%`>PIfMh65b\19;PV_i74H1U
+#57+U>csZ'JR!^+!3ooQT)~>
+endstream
+endobj
+140 0 obj
+<<
+/Length 466
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Yi\0i#\A%#.]'W0ASu81jmZoUo*[8e7$IJ-6Mj!(I/(bjEf(PTHN.LSpFt[bKk7
+:O7VL$u*GoNh,g'XY!7U8onF#/Lj\)R9(n'Ub-b-\hM[B.5.f-Fkt6Qgc%!<G(r)H
+hn(b6miQJ,Q$Mt/^-9<hA92N%BS0+h[n-j&1NX+))BT*h(1Hj.2_2>+"ZCNq@C7DJ
+)Ks^L0lanB\=L]Ghr>2+L[-an1AU;I\.=%-M@;sm%'CL2;bBZaHX[*d6^&*Y*^8l%
+JH4&E?AQ6\)o34R4n8Ke?jo:j0Ee%D6dJj%!bQ(3(I7g9&-4'V'E3@aIIJ&Ydr=Gf
+4P#)W!/"eKCuDTq*X:-K#0.Wn.1;4m6NSHEq0U*P.nOH#+nK,j9FCHO=.iF-$\'RY
+_&H5#*aLjRc7.l6+*pBoq@]Ibn@mEeDQ=IK%07im7uZb/<0?0D[8o#-f>o?81B=0/aiO~>
+endstream
+endobj
+141 0 obj
+<<
+/Length 476
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z\u_+oY;&;Eh3_=Sk25[Qe0/gd&NOfY"m_*h'_J9pj\d5*m'O2<,\gd=H"cEn>A
+"cP/j7S.:bdHSk^Ql4t*/J_eAN_^HX/f.ufM0m@:\<IjnLM'a:<[Z=s_g(ps2[)uq
+"YB9;d]E"]F+#A\:Q$ano)/@"MfYT"DIU+YY48M/Mm[#Q+i+T>^mMd0)+0J)QE1[&
+`8"eGBTGS-ghc*t0Eg9a`C!bka;<MU.*)+_D2ap:C`2VTagJs@Ahtkd=&C5SolRR]
+?qGAZ\q:Y#%SQ6l"6YKf5&;q2(m<#r,gd8Bp/'"B0TOs/ZEL"Z`U])K2nd>tDm]Ci
+5G&n$BbjKVCbhFGq7b;HKi8K)9)"526OaMUZl@T")HJdg7Z=uL`6bPMA3MPQmQ,p8
+")tQR>"o"$X2m#)jguC>j*MeUlT68aEimW%X^%bICjj%E8aID\(X>8E9([V6T1+3+
+n/M?b!0&8FWr~>
+endstream
+endobj
+142 0 obj
+<<
+/Length 304
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z][_.phP&-h&!3@rB#O5R[$-D;,T&-Gt,3=,<="5"ZABW:1UdIJ\L6B3,*l+aiE
+[.GQ,T'Sdm^.H2elqZspP;++oATB0E3PViD;.m$OO)c+MM!Z_=927ETF&!hIM:;:L
+K:jVoo'sG@iGp*A=r2LZ$6Z'0pLLqPR\Gfi6ksr7$j$rq,d9_)^c`\d%W%:D>Bn_D
+hiXpn8@<G::M_kGcji4SBcMq(;q'2BB+B6"(G'mT"fp#04-=ENT566nA)rA"?Td>8
+*>S>.Lu8-AL?@)]rcs,A^Z*!R02#XCk5^[EE,k~>
+endstream
+endobj
+143 0 obj
+<<
+/Length 608
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y:74`9".'Yn\q)?b$<&]>'a%V#T,-37f_e3ee1l2fUt)%n4$Gr-Rr8'n3N&AuOA
+]k8fe[X,1VP8,<lkrl*5]tBL5q;n9F;E+1?>5hIuM(8bMYGBn@jl*7lci*Im7t,[C
+]0H;E4l?3g:\jGHf/K](meB_p4MO)Lj*.I?49jt\GWl!Y\hdiUK?(ot$V)E^'83q-
+#K'.&Alta]0+9sOc@l@p8Nb%snE^a(im_KG`%c7JfB>l=n42:QI;h0j$:5DoK2#.?
+$Q3FAO!0'%`7U]&F+7Wb:Uq3MJ'+l1K;Y#S7-kIpJ#X#q&S$<jGA/$(@t2e;AF.XQ
+'gmJrNLUeOn=4PEc\+G*oU#D6%Z&J=E[sJ+afPjI-+>'$S"<Fi1.7HelQ'`[QMQK9
+m*Zehfu#\-Bnejk]FO9"rSi7NBe.g"88^kUF"80!q[m\O`Ne6nmC$]H-@8(m8QpU0
+Zj7-");Zs/5Je.ABUM+M"9,TJQl9l7P.Sl")b.nH)R2`DpR^`'""*;cnO'>cs2IGe
+0)#m69T(<h?LEndrQN3sjtrb<*8+`H<Lt&\+[=+oBjc/TXnV-0&1npZM9un[\!l1r
+q/?6j!5q:C)#~>
+endstream
+endobj
+144 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+102 0 obj
+<<
+/Name /T2
+/Type /Font
+/Subtype /Type3
+/Resources 144 0 R
+/FontBBox [4 -7 50 40]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 43
+/LastChar 43
+/Encoding 145 0 R
+/CharProcs 146 0 R
+/Widths [55 ]
+>>
+endobj
+145 0 obj
+<<
+/Type /Encoding
+/Differences [43/+ ]
+>>
+endobj
+146 0 obj
+<<
+/+ 147 0 R
+>>
+endobj
+147 0 obj
+<<
+/Length 131
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<A76';:%1%0Eol/$7U^7Kj5s:5X?OE>erhS&1@c/P&n1(4Lt+%'hli]oK@_&
+>l%1rc3f;2qOYD.,t4Z0>b3PTs8W+us8RRV8Ho`67OA@mX12Ct\H9;A!rt=V!;Z~>
+endstream
+endobj
+148 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+90 0 obj
+<<
+/Name /T3
+/Type /Font
+/Subtype /Type3
+/Resources 148 0 R
+/FontBBox [1 -1 54 69]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 98
+/LastChar 120
+/Encoding 149 0 R
+/CharProcs 150 0 R
+/Widths [54 0 54 0 0 0 0 0 0 0 28 0 0 0 0 0 
+0 0 0 0 0 0 51 ]
+>>
+endobj
+149 0 obj
+<<
+/Type /Encoding
+/Differences [98/b 100/d 108/l 120/x ]
+>>
+endobj
+150 0 obj
+<<
+/b 151 0 R
+/d 152 0 R
+/l 153 0 R
+/x 154 0 R
+>>
+endobj
+151 0 obj
+<<
+/Length 311
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`A0i#V?'F*K[%$f]/,PYPp-C3F2-;,p]A3ba'!rsPJ(!K7g^rVehM/0U[aI"-n
+j0pU."X;,Kpf[1fIP3:>Ce?lK]X5=4k6FB#AA`-'B48/$(kVW4>$"\YZ*dP9@7J64
+B#B@\lC)(gYE)XgY]qN>?1t%S8eZ'&Xf#uu11_5l9fXQl0b8G1%JRPjC7NIliZsik
+V`T^4A\`_$%s`7,?*JBu;"s7AlI[_gs48bCe=i\Q[P$5[lVKo)<g#ma5qLK4Mg209
+!HnsHj@pl/]RO<(;4grcoO1!;f>hfcFjO\g\+DNX'1kV.~>
+endstream
+endobj
+152 0 obj
+<<
+/Length 321
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V00Yt>-R&-h&4.2E+2X^1&mFDkUV4@*(/(#2.&ap1a9$UqmLiu@ba.=@68';XD-
+lo:1jFMXdJM@>]mr2UU"\Ak9J="URNnY(MHBK(=L`"T9n2dBk\T4$D@I>@1ol74JQ
+]tHGH#3u1+?XMY2Tt`jUirlRbFP/*9Eu/Dc\[lUG>Ep4Y:"<of)K@LG)bO^'1_`%J
+1_^.7L-4(ir#`$<^iEehnku^?(MjetBZ73^'0Y[U3cT++8N3T=3M`rqYKLAPfB6Q>
++S+G1!7*?6=X@f$/U_D@NkQ4tr!06rO*&AGQ.VmX*OtIp(4HGf&iW*'~>
+endstream
+endobj
+153 0 obj
+<<
+/Length 194
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY^"#%Aeb"Z&f*'LT#i/gF:;hZ1SPeh^:P2#n92\Qhn$>l*Cd7]'Ge*^D/,
+IA['X"[anj:LAg=U=*!n:D\`brt!WZJ&$TMs$=-qLAtam"s@Nr`;`)i)&*#N@<P?B
+",-J)nHTVka2AKRfH(\JYQoLU!u'pHOL+re`>BGZTpYdCQ`DK8+;\Dcd!=I/~>
+endstream
+endobj
+154 0 obj
+<<
+/Length 315
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ta]YtDr"&-h&!-QGfg*b"dH1g+ju,H$,B"Kd%OcdG/-HM%Sl"CL7O94&iO@2l^g
+%[J,JAjM@9A$X>VZg!*\]fuD;Y<'E)pjdc?FfT(5%fWDlfBk`(7r3'jhdLRL8(aoH
+:49oi]_#!\cZ_@?Gm:2RQ5RK_IkX/^&30ch"`ph+e]]R(5s@csKo)))=16"AR>)g$
+I4DRM2em2>3ZO(\mFKr[A`SQ]V;cMB&Z)dfHrBgL2J#)j]?*Nlcc-4SRf#WJ`?cf@
+H3II),"O@3)jR5&P4Vp%.YE7-3;G.g!0m:$4<O)3Ig5tC<pQR~>
+endstream
+endobj
+155 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+75 0 obj
+<<
+/Name /T4
+/Type /Font
+/Subtype /Type3
+/Resources 155 0 R
+/FontBBox [-1 -24 67 83]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 100
+/LastChar 121
+/Encoding 156 0 R
+/CharProcs 157 0 R
+/Widths [65 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 
+46 0 0 0 0 62 ]
+>>
+endobj
+156 0 obj
+<<
+/Type /Encoding
+/Differences [100/d 111/o 116/t 121/y ]
+>>
+endobj
+157 0 obj
+<<
+/d 158 0 R
+/o 159 0 R
+/t 160 0 R
+/y 161 0 R
+>>
+endobj
+158 0 obj
+<<
+/Length 350
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`AYtfs;&-h&9'UWTJY@Cm(3MI'GP#E#C9XO?keC*F'B[&^ZO2<,X8O:.AB14uC
+6,?''GBRVR,+#ErEh5j"89lX;)':gk&OcCdb)6[DGWih3Y3,@JnrhH`/9/7J\<`*&
+qHcAB5@:t8O\$WnH,rWC2Fe87:+)T5*L?ur%SO]^qk_]/VR"L=,.42]`Yr`cW1i+h
+\p)dn`(#>aJp(O+@4T&$>&P)3,1P&7Q3@(fG6N$RD!^P$'>7S1qR,jCk*-]Ebr1$p
+CQ;$i?hV5mIdH4#iN]OE2hkHC44liWqV+Q]2OVpQr%-@Q@7,?rh3/mj/7Gf[:ph"<
+.+75JD9\.>2#t2c"Gd~>
+endstream
+endobj
+159 0 obj
+<<
+/Length 306
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W"]0l"Tk&4P3L#Y_!<BJ,CfMnNM"$Vh+2&P/oA^eU<7`ic_[R?"!d\5Zlnr\MWg
+"G:-N2nOPTrh$FU.51JLF'*IMn]oUTK#co9_jhMr*ZE2pLK5.T?Q;1n)b<r25$f+n
+lCEukdl19F/0ZO;aMh_Jei?1!;_?EnjBOrrOtIR8$LOXKdUTY8%O;J_g<hf7W!lse
+JSm`UM!%!9M_Q,;dDRcf4h03n5D6*;6*iRKoE-F!B])NA#+TI$3*0K$LbA(FBWH]W
+_3.N,DLAkIfN`;XbjhpfcD^pOqF9e.53Y*.$J6:=~>
+endstream
+endobj
+160 0 obj
+<<
+/Length 274
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH83srhi&-h&%(4g1?KZjTV=\Q1:I"3XKXZV,;=t!QikHt@,\V?7T`,:JZj%PP"
+e.hcpq[YKh)\"Jh*F`)[']UmaXbHrMA%iCl(j"3U*&=!HN"ZKJfT.2CEsBI*3C+*?
+ZG=rZ]RsaP6oiX*G9O#t2/re\:K_1CN)9;n6V)p3TGT0n8h"+)Tl_R!_R8COJuYLD
+PSHq$[\E@0HSHNrAD@q-QX3X9h`QTt\-n]=hZT"A90RPPI3*;$8P4/!S^.h_/:ePK
+#683".l%~>
+endstream
+endobj
+161 0 obj
+<<
+/Length 392
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH80i!Be'F*J=>EDO2V1k%U!>a=tm+OG@WehE:>'U+U[*WJL=Dc0FelZl#$l>;u
+-j\-:B&8tA/:`eLJNs1X(6CeG6F8_)C^%urSl5R1ZaF+7@'tY9R@fu)Gm]TcI$=0s
+!O=SDDtGB;2g:UMni4C<pU?2rSmMLJ`^24YJG&rX@YX^gp!$!CI071:l3ikC8.Yo<
+?k2Mcn:`(Q$-e!g6`3dU:_)t+"+lBHhSWZYdE)F5!LXBU:kZN7Cb1H.<+Ca4@OD4D
+k\rgI'b2TL'C,a\dG]o>3N*$l"Fl@gQlmBD'*L=MCQ?maWB&rKTcmAKPQV?&A&fL7
+Mk.4bf2H^XKkN'*UhNI<`UMXA'=S`]qXGAeWL593(j2NLnEZV%oA9QK^^`gh~>
+endstream
+endobj
+162 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+38 0 obj
+<<
+/Name /T5
+/Type /Font
+/Subtype /Type3
+/Resources 162 0 R
+/FontBBox [-3 -23 93 68]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 12
+/LastChar 124
+/Encoding 163 0 R
+/CharProcs 164 0 R
+/Widths [51 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 0 
+28 33 0 46 0 46 0 0 0 0 0 0 0 46 0 0 
+0 0 0 0 0 68 0 65 0 62 0 70 0 35 0 0 
+0 0 0 0 62 0 0 51 65 0 0 0 0 0 0 0 
+0 0 0 0 0 46 42 42 46 42 28 42 46 28 0 42 
+23 74 51 46 46 0 38 37 30 49 42 60 42 44 0 0 
+93 ]
+>>
+endobj
+163 0 obj
+<<
+/Type /Encoding
+/Differences [12/#230C 39/' 44/, /- 47/#232F 49/1 57/9 65/A 67/C 69/E 71/G 73/I 80/P 83/S /T 97/a /b /c /d /e /f /g /h /i 107/k 
+/l /m /n /o /p 114/r /s /t /u /v /w /x /y 124/| ]
+>>
+endobj
+164 0 obj
+<<
+/#230C 165 0 R
+/' 166 0 R
+/, 167 0 R
+/- 168 0 R
+/#232F 169 0 R
+/1 170 0 R
+/9 171 0 R
+/A 172 0 R
+/C 173 0 R
+/E 174 0 R
+/G 175 0 R
+/I 176 0 R
+/P 177 0 R
+/S 178 0 R
+/T 179 0 R
+/a 180 0 R
+/b 181 0 R
+/c 182 0 R
+/d 183 0 R
+/e 184 0 R
+/f 185 0 R
+/g 186 0 R
+/h 187 0 R
+/i 188 0 R
+/k 189 0 R
+/l 190 0 R
+/m 191 0 R
+/n 192 0 R
+/o 193 0 R
+/p 194 0 R
+/r 195 0 R
+/s 196 0 R
+/t 197 0 R
+/u 198 0 R
+/v 199 0 R
+/w 200 0 R
+/x 201 0 R
+/y 202 0 R
+/| 203 0 R
+>>
+endobj
+165 0 obj
+<<
+/Length 375
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH9Ytfs;&-cNu"j%JH,;:cia5I?p.[!^D.87,>!S#OaU\-rBH*;n3_Um`*$XcIj
+DOd-6;`rlf04?cNoC!qZc>YPZ8\DiLNp/:T`UF.)b.hS6_M+cL6E8KOD]`AT6ZdrP
+$IK"n+^/3C@LQ+_M9esNpQ2!jn`i4ee6XQu'_$<^kZ(4uI5#M-NF8_n)G?[gVdK3m
+\YF2T,BY%)_0/NA5J>Kl]Z^ZL\i8%dFb\UHS*#J"Bc+!oq\j-94Ws8!lk`%Onsas@
+7B9^]0nmeMEr5>&oRbD;Y@VorhF:J)PoQJ#4:gHXofWd@V6CS<Ag>YD3`(6n*LeYp
+MLegu>5ON':!F8dPgrs:.]%,$\3gPIF1?tN!<>\Zf;S~>
+endstream
+endobj
+166 0 obj
+<<
+/Length 179
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY^"ZrA_;<A6=30Jca#1#shF1,K#h)CQG*!2];r'oYlZ//==h\XYdmoYVCP
+9t9gYJ9"ok:'&WIL0XSH^'Z/TV5[^k/dhX>J$=E1s1nO4$9p6E;?-Y9#`o!Ms1eU6
+r;Z?fmJkl>WW2Sia8_5#*s75o5skU^>WoV!\Gu^3$6(pr~>
+endstream
+endobj
+167 0 obj
+<<
+/Length 176
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY^";p[D/:bXY$0JlTs1#shF1,K#h)CQG*.%'6:Jg>nXE\<]B-^T:lJtWL;
+^'@Jp9A_26=i$1mhpYZ#Uo6,8bL8o=TDT5n%m]o?)$3%,s%*1ir;Z<ekCKl;s8;of
+s6]j>s/H%gs6'ECruV=hqE[IJ\Qh;.!kA:5!!>;AW;~>
+endstream
+endobj
+168 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;SV50b-H&(^A>j^JfM-B`#9<``aWK8=1@sUOfX2\fc:Io:D81''V!=j!*.7hR!]M
+=t$5M3,_>*AtnlN*<StRC'mZ&GokRph!e@`:OUT%N-GO,DugQ0~>
+endstream
+endobj
+169 0 obj
+<<
+/Length 172
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V;_V$%<7!KX<\QC20XFSH1#shF1,T)i)CS]+.N%H%-%TTI/shbLQ[ZGrW<np*
+#>gFRh^Q?D!D%M4.[1X4VK-sn./X=&it/4.Kjk:Ns.C&jR//%g9`;1cVEWL^W<Z6,
+@`UhLC=IhIC&s9F=R[DAnp`8n:Tcr8^]7Be:pp~>
+endstream
+endobj
+170 0 obj
+<<
+/Length 225
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSU0abc_&-^Di.kFAX,@iF"adNbH#XVL0$UH9RTU$@Nf#F3D:"C9%/k*i@@C$3C
+GVf9n`FLtU=KkJ/Y48IL!pPqjd`5gkELcMXS=qbNmkLA"]]KR\Ek=SCAqRSYr<-_h
+7+AMse]b<0Ha>(s(N:t:Al_eW,h4,.G,FKX.),FBVtM=TH?8924e0Y>7goHso;'i]
+b5(4K'p0%O*(7"dY_1g5A@9:2~>
+endstream
+endobj
+171 0 obj
+<<
+/Length 326
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$e:J/PZ'F+&k/cs_E)rt9igM/0Z<>ZJ;6I;!%6!_'@(q6rk>c`"1Jf!W+MiuDi
+)2j[=[s9X>5@l.Oe8g!eAM$n*YD)d+AM20*Y,&c[(aC^&B%*488]oh!G79mUo5H:8
+akD*pD*QoOHQrM)T2uIUIQ?<l$`),T)@+KPG_\F/a3`J#+jsdahkB5l<@]6gO.%<X
+0*qrAO6@8K+/ua=-WkPLBJSiad24_;l7G#+?Qlm<qIbR4)'*>6k--\OdZH`1LL_^,
+pg/^@q1UE,J6F:!Ql7`'9H(\ZHbaV5Yft(;)&V@rQ?D^F?uB3?BRU-caR&"W~>
+endstream
+endobj
+172 0 obj
+<<
+/Length 300
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UU!Z"a>+&-1(B'S0urKA?Ai]K9QJ<$#]S?4i!Y+(/!D:pa4GTUl'[5Y->KH9^>1
+<ueit\Kc*;@.l<k0s`s`'1SoLP;Xa+hd`%(mSFqSV/F9I(st);KO+lA#^$Bh!F8"D
+Hg>/M@J5Sbl21XhB=)gBf#=6Zo":/)[dkt4:CZR9o7pVX>P:?t]$b?P/?]t)iL(W2
+r3arngLLDa8Yss8>$C*G/_HTl;sN@$\\)opmHW9<Bs+=.C*TNt_LaqT3P/o_m!Wa9
+G"%_h-UuLI<+&cad(eg6Gfa>!k5bQdeZA0~>
+endstream
+endobj
+173 0 obj
+<<
+/Length 370
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W#IYtDr"&-1'?;B/Ao:WWHak&O_dFXsAA.0QdNJCDq5d5lJR>j3mF/GtJBIphZP
+=>J1I-?+WgJ`MNUA7fJ_.WL$Y$;Zt4[_up7%g>'_\`VEG<Y^Bb$P)`;qZNB,np;q>
+OC*&;o$-P*(6I-,q"jRT#k]JV?`N?I@oXkaC@3$DhE0:9A1VLpEeZH?gc:.6%=&[P
+,O3-/Mu#H;n[hGh[b#'VT!O1bn++)h#"]5;L^rJNPGfE/l03ie8<Y+<A[6#oK6g]Y
+f_csgBLi&^r9jOJrTsLJ4n(XE)f[uS[,X<Y5on#/[@@;Pdg9NlTk#M7AaGpfNZj@Y
+9;n&:bfK&$BIbYO,nhW'dc8X2WeNV1)Z]/t\>'~>
+endstream
+endobj
+174 0 obj
+<<
+/Length 323
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V015t]$['ZTYW(PT??&b7PNP8$(45ZKKG6!#*m?+Quu3o+r3.hu<6NJJBAG?KTE
+IW'UBMG7LLb:kT25B0=KG_P6!]-T\.ZlrL[?g)ZU=n8<&mHKne2<Bnc9$2'l7/?]Y
+MQs/Lq#0U?L$EFhTBJ-s;hg]2C\I#sQK_+8EAfkM[Mqq:bbFK<-=?f.H$ID@mjhM^
+*g<MeS$K/<)E-FlbV"^?C/SbGT1Ik<ZY>QZlSrp[6_efcJc):7+EnN:k0`b7/bd<`
+N/%79aGm&ojGQf$Y%X3VB-CJ?;a\"<hfFBF_?te_9G+k8l%+9g!&GR60)~>
+endstream
+endobj
+175 0 obj
+<<
+/Length 361
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH9_+oVJ&-h&=*1G*fI0A[9PYt_SSk,k.E\Pm>+$_tI;5<=9i-Y5K1`h%(I0>QM
+2N0H(=]7j;^mFCA_t(.*iuEtM4C@#mJ`RN:$@%9T#%bJ!\TC\fO`-;-f[c/QE4(8p
+Q>;S#n#rsG]Y;;X[uY1#YEATVL,,W-g=rWLW+<G"37aqUok^P*Ipm1`%Ll9FB])W`
+@D\*/q/NS-ZrrLF][i/+;aqjV]2qGClc7@2\S)oJUGA-aW1.JnZ2C'WZq[ngXbrQs
+*L'0,]2O,t/<(XH-=c/,S#Gl!s4O]@J]&qi.RYhm8d5p7AUCjs*FGF"bWaL)%kc<p
+#\ui/'Rc,Ap"=<dE)XXVr!i],PFo,~>
+endstream
+endobj
+176 0 obj
+<<
+/Length 196
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<A75L@1uQC1F%Sf6`ra.'*ACL"EI60$l*jnJ4+E1Q]ie`I^jud!LLM*:l7p'
+.DT*&OA"K[=.uFg1mQ857H+82"pTh^J)CHkr!t%i5m/tNnH2IhUC\N_"@!7`!)1J/
+&-p"(4UTR:-L+G6"u,QhRJ7"6(f:PW40J\8GmlqR0PKa6#VK1SY!=VT!&FBE2?~>
+endstream
+endobj
+177 0 obj
+<<
+/Length 288
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um)]l&HV&--)^#,GK$#i#e55U=!Gb)]MV8F=n3BKLB.Pg&W14:7.baFJZOit;[1
+R.H*Z*4CRW@u3'uXjQS,]7MQc&uG-&hGq';\bl5W6Nb:Tg(K9%Sq>tkI`)SNk(<?^
+is2"dP#(jf8Ms:B,+:H202a!7Z>8"I&P_W]12!r?;)BdtkW8QFCXt,seB[<bXT)1=
+Z7f)KaZ5un1G;=IW6(uJ:<U7Ib'GN.cXVhfmH#9;kL_V5MTnK.=;*a6k+R4)$ghD-
+2:8].eGmCrJIhMp!".G8Jc~>
+endstream
+endobj
+178 0 obj
+<<
+/Length 350
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V015u*,!$inZRquoYNisk2U'JMl/OaK$KKo)rpJ@]ird5>:E(dBXc#2WbCZ'\AB
+%O%GmOEnsT*G?l0b,M,Q@k'"/:?]F--S0>e]98_[6=R7U4lW?Tm$>d6ZV(U5[^eSs
+!jh$H?CkLGYW4(Cp26scm7J5s6H_J:r`&B03"Yq0"JK<08UQ_,@;Us[&KLC[Ak;[d
+_Pa!u&&%K*LNH"ghCVhK*[Y-&V$m@X8-%D0:+R2jY`!b18dVqL>U2_ilD:1F\"K?2
+,(>T=IhmEIh$!2QZU\Z,I+Z/nZC=>:o&u$og33trf(W.)j<V"kABW\`lTk#$oq5fp
+mE[Im1jFYf!s$phGu+~>
+endstream
+endobj
+179 0 obj
+<<
+/Length 280
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V015>&jj&-hV,MhPkcKJs]LP?0#qJc,\J&@D!.C2'ATSTL0EV(>j;26u9E.8too
+3I.dq)fU]1nM)^O9TaD9G&B7)$d6k^hC($&B61HU[H1sHmHKm:'r?t](R3e!N7-8T
+RYC$e5MeV3W7nJ6I%?\N`97gM9ac%Ic"L__@u8dp1tJ6!BZiV85]`V8C@m9'N^.^F
+9*"hE02=JPStgjp"aHgibuMi`=bI3P,c&nVOB,;71n$HNdNH>>ifJZ9)glD^$*p[1
+d'fYRqAoVHi`0^~>
+endstream
+endobj
+180 0 obj
+<<
+/Length 278
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$b6#+85&-h'G/.+`f*^K;Y!]:8g6U:JjXjAU%?$QEmfnH0Yaqo'FAZoWF]ge%?
+15h7/PE]N7hh1a^r"Ddai.PH(N[>_L]Er:Bj&h$:7j07T:blJX8SLZnMT7II*tj^.
+0&B^%CsIh7ED+tH!uCrsAUs&gC/C@M`XS6"H*6*K2pE"RVKW!=PiVS!p1L@e[p13D
+@EW,lN<bFF$W:U2W&rcVVao:2^)X]SIJop?Y1+q$+E)Q!<7q[CI6X9XVRE:%/ejs]
+7SERu!*cC`li~>
+endstream
+endobj
+181 0 obj
+<<
+/Length 275
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;TITZ#7E4&-h&\*fP!8H%Xl[5[kA27Y2hHTi*uF!Eqqs&8XnR@c4XZ]EiofNuk$#
+cZ-hk=n;O/rE%2s6_31(A"dn6j0+1XjI2tac3oZ0RR;OQ[]l\QrPi)0]&jFL`TIm0
+;gmS4J)!<^Nq=mE7UFoEgOOlsch-4g#hjh<RXt#<\[SM\UJp0lX`AE^X<cIr,]#d`
+?LO:ph2-%P$I7.I_Rq]Ljpg=hWEpdjHDT\t=FK95/fd:i/plc5In`8\Q/n[d(KM8u
+_>aKI\[tQ~>
+endstream
+endobj
+182 0 obj
+<<
+/Length 244
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`>4V!'/&-ZI#"j&S@J[p:46=XTd:EkLL<ZXLX/MpY7<aH0o7IULcDF&N]V5(<k
+Ahu*HH,W0MSa%WP@\Q;ka%S+Kk?OlfA3(`DbfJ`oo2:abk.)aQ7Zu!)$frcqHFr$0
+;D&]_@fSe#1sm7]1Wu&'5Qtfij;UHK9H0-A,*'IX`5Y!5n[tVP4WYX-&U4M0)6sO_
+L%AEm([Uhb]MJ\BBjt1S%4CbuQUf"%Z79E5^B">+$aKs~>
+endstream
+endobj
+183 0 obj
+<<
+/Length 319
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$e_+Fea&-h&,&&KHj%oA^?!Sn3fKjG0e"ns.hP7M&J'N>c/fe"7-qF^.sf>o3'
+E=^6QJ$RgHEqgcFAEG98PV\p$RGl>JV\d!&oLc[1+gsDWc4+OHl'^Z;V2q,c9(,TN
+FM>7sCl3RgJ,<>FEPmC9>m$ucje.j#S&eIfd9mo?4P7S!K6=9hh7]q:Jb<"Ih>5VF
+Sg`npQdu\!BT'rFEY&ai"[sp,Fk-fd6tm<ki+6O,^=NTk_,1KP\*<k/[3ccmH[fG"
+J*";oklcXI>0B[`i5nBFCW@)=e`YO$R?a`?Bfcp</a.cb#64qN.g#~>
+endstream
+endobj
+184 0 obj
+<<
+/Length 239
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH60b/e3$jPX&(eD5WK\$S[mg2&^C*J:e:*)Y@*AffA&dGNCi?E4Cgb9oLQI3OE
+?^pu\d!3ZeXl6hP=N^-ddZ#G$WL4B7(06aL:01%D$BH00$Fd=90\rp77^h?trHY)Q
+bs:MI.ZId3BO$N(2*A7@O*1fUp7g$7\cd.#jLPnOl%U<NVfO8aPR"#tb^^elIin1r
+D#r/G<<5C>;)d^&c;!,Y[fR[rTM7l\q@3Kh2h>u~>
+endstream
+endobj
+185 0 obj
+<<
+/Length 284
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;O4UT%['Ys6r6fBU<_0:I=[MER)_%3c&TT]UW7gDK!6*S>%UK8piOnK!jFXY8B
+7$Q7NB(ug\8]]fZY_>Oc%GSq3Nu]#Q2QX`;pi[$.5&a2fVP]@E(%_R3B';9`NVF'd
+hP?2j=MYi`S)"^/!A_Aa`*FU/n&W0`]%hB\9Z\Q*)jR5jd>dSFRF8]H='J37'amab
+bHee&.UJt-?`)8Hg-j*5L;N/420J=odFI$MT8EA*0b]:;l/S3hAM7g:WF*`Q0TJS_
+Hq)W&0RtT7"ou!+YSR~>
+endstream
+endobj
+186 0 obj
+<<
+/Length 304
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ta]0i!Be(^4;*>>4THEs2IM-m2VgOfY!B@A9"lcn-h+>-h`mL,Zs8"gFJ*1=%n;
+K]^J=TAe$6W[l?%dYjjNWmiNMf0\>jX?"PuR`!;mDUOk1fsQu+CKX;RcTTBnO#L65
+eir<\a4FYO>6VYC0Q"r+mg7XX*l7[^kJX3*K;f/]N8;>NE^2>B,<S!(WOE8\qD3j<
+$WH?9==,YZ/"K=GL<fg?M!^@n?pb"6;D;#[*.PI:%<6)uO%<A-$\$(S`);QU/IAIG
+)DZJH!2%)8'9eIH[u<nrO*CcfY*CC1)Z[umg&_~>
+endstream
+endobj
+187 0 obj
+<<
+/Length 289
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ta]0hTDM&B=6n'S0t=KZjTV#qjsb4;CO5B]T9Edc-,78LdB:'WZG;-XL3J;FnfG
+eu['3Y?>K4mi'A$><_<(=LMl?d*\FYbBg6uHeREggcs2hVrj"69?e3SW7g!sF%8rS
+bqIDHO47O@XG)I@JMQe[W$4m/Nqe9c*"t\M:5GXF8"YDE5KNJO_5Ub2A.EC]6'7-a
+=,MK"J8lZM.,.#?0qcu7.%:<B()XGq;Xt!&`?4]U(*8^tZYY#LZ;t=`#oj",GXlmV
+j1@d)_!?Y+Hb-'2!<DY!nkK~>
+endstream
+endobj
+188 0 obj
+<<
+/Length 255
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;MZ"a>+&-h'K`PFD*#Wj]$S@aKA<"!=A[h*$1"!j1a&HaIKer\l`?V.K3f2-jG
+9t/+$T37*%)*XpbTA_a'4Q)ZH24FglC4=S&9#eql^dH$4SX)t#o9("^eXVVmC*F6i
+c-qJ+<GosKp"P)R,6KMMr@Imr!/5pJ2_I$[.j(PdM=qYN3SHj)h,Sg/];$2(?3"FB
+HiZC'TB52ZPKm-b/dg,4eHWXt.YCgUV[X`ba*/eS00j#;1\r*l&C?d6~>
+endstream
+endobj
+189 0 obj
+<<
+/Length 321
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ta[0hTAL'F*J)"-1$+>:VKGckmF^XUM9<V@^-*!,<s]-s/#IM[.<8]LlRi]uGR=
+(qUL"r4X$dVYQ,L_>F9/<1TtA3\"-8X$rj+8p[1GaW\]p*1)%_m[n1C;K8V7,o'L/
+U1/7dY"C1tC\@Dtr^cF1JeJ,r!?&/!H"9P.&X-lP3mgC9"9LJO%jRM0()mZhbb7;a
+c5=//&<g[SX`3:?8gef'SK%VW^\opj[!US:p\Cf5r1:]_&(?+%o.n(^pMdBO["enO
+aIp/daNV\"2u1OAs664A"3h$^*U#8G%q^-Bn>/33JhC9=V8!$2dU;P#~>
+endstream
+endobj
+190 0 obj
+<<
+/Length 219
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;L4UT%k&-ZH/$=TAC+`d\?T1Die;8FgeXZV,;=t!RpOM]Er#o6hliWWeX+uo#W
+?9mAfCE>U/TYq6D$?_);Jm/B`ck8A'#d^51S#spVEW]d1>(W-r#t2LtTE8O;GWMF?
+@&?J3eFfoqU;e.Yg+1h3,Be'!-ZDEGp%kc],1_&pqtIh$dKpg!4qr;r$K%q2;K\hV
+NGA>n&BkQai&:Z(XI1j~>
+endstream
+endobj
+191 0 obj
+<<
+/Length 341
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTt5>Hks(^9Cd'I;.HKUE2rOH?;[P#W/E9XO?jC:T$f4!P:EbInP,JnkeR!^fID
+GWu+;<LT=_hRpss090#)@W`Th3)WVH*^fHK[P>Zb71@L/^@?I#Md7P)HaSieJ'BA"
+mqscmYN/0d^:ZUcjAHF.MA-rT3Q">[)\$"pkH97-cl*:i*aI3l_.NofNN&!]i8E@7
+a<a[qfaN^2'46G_Q4es[9ER`aq$<$@_*C[S8'Lc9/G/AYm(F]PJVDBRR[m^S,O>OK
+XBq>bbIM$/IpfVXOPPj]1Zt)>N(2Kup'ApX-p.>1G:hRS5h+&GF'$Q45R[2si[POa
+ib&8<V[d>~>
+endstream
+endobj
+192 0 obj
+<<
+/Length 286
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$dYt>*a&-cP(MM#X:&U%JGmhRgWb<f1t$6cD>!,?5AQo5bcYfnUd/Fj]0H%A]!
+`NbVVEsG;./MmFn^l/]R4Q[U#,K$tP(IRY%/XeP$_rFsR$p;;P[%V6Nel)0sLoT_+
+Nq"r%r;!UFV<4A5P&2_S869!3Dk*&4n3IEWpNu_%^#-qur-8HiK,X`**S_(3-NtuE
+/SZliJF_,fj=$;(]X021e>Z^H`a542TJpNgGLej0!T.W#%'E>P(ODYIY!!`o7D])C
+3)cOW:8Wf$k&_RCeZZT)~>
+endstream
+endobj
+193 0 obj
+<<
+/Length 250
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$c0b/e#&-Yl="j&S@J[p:4&P8ol:_P9O[.433Bq`omN#.,9lk(Wp#i?0?K][,,
+Zb-6-Ym-Z\4Oe&@;4s7Pm]mgeJOZ=[Mi^#@^.FWKJ'qmZrf/N!ZbosljEl;=?<>6-
+$CDNXjT(kK!LhMW<0.G]JN!h<dAFU0f'?ShNd.?C/t`0BM@#8DNaRJ/X<DI>V(2J/
+(pUnR(9r/W,7\.&bs[qmO't>?X2/,ThHMUe560C!Eg6"m//OoT~>
+endstream
+endobj
+194 0 obj
+<<
+/Length 311
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$dYtDr"&-h&#>:`I38(`4j9`d>c/oW;/6I<j[33T\cZqc4lQ+k\$.t!<r^-KgT
+bPofBSOlrY=QZ4nR/G+(r%>:?c'L=am7Toe`*]Jr=#Rb9,\/j;Zn<eQjuuE*3MU-`
+G\o6/ap7h6rjelr`kn4<JR/j!E;2Kd'n4p9:gi2KfUp`>K:N[j?/];%$8LNYXC3t[
+F4TYbU/=0M#)2#H/Bsq0od:2nq'\a=nZP5[M6<#_6*-,*7hsCAQ!:heGHa11GK0s)
+D*"o7')<0]ph2H>R].XO>Wq=aedGWnQq=b54ji-eklqIj~>
+endstream
+endobj
+195 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U<j0b/e#&-Yl>Kul.k@HR\!#R%b6:_U;ldE2QiV1hBS['Jab(^mK$L't*=(5-g5
+X)6]hk5SuO)2=O;35T3`8Vi--c4Ho9(h++d2Mk+?fUj9&&F;)G+]t->Jp]@E'4QsQ
+bO#REJXru-XZSHhj@crZ923Sn<(ke=.G:1-Z2+tYp8g7DZ7;(sBS4mi\(hGhiA0ci
+*'29aTsaY*b/,-oKfbBmkU6<:=:3]tDZIrkY)<~>
+endstream
+endobj
+196 0 obj
+<<
+/Length 248
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T1K4UT%k&-_!W'S0t="QoiT/<O$ArdZF#XZV,;=t!Q%@U\MdP[#Kn"TgS2_EOTd
+`AbCj")g*cCSZf1XN#\U7Coq5PM!/YC!UPB[@FM'[PCN&>\\($S8on6E'@/@ktDWb
+j$qJ%!dOu_g8G6?8eeeqanif@2]jD^I5i>*cdd;kCQTJG+3&\=aP"'XX"j\p<)H@a
+n=gl`RA2)_B\IqWQNsIp.p]l]-r=q]bpY8L-E/QW4TL*ZGUE~>
+endstream
+endobj
+197 0 obj
+<<
+/Length 233
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSW0abc_&-^F:KeQ5]i*8N+S$884&/Eted)lHhV1kZ:C1ZXp!Z#)ei!!#U#T5"M
+HN8s_`I+'!,S<M5i^dRBTUF_5_\$@1h:eZlN\tH3[Kjl*W"$`Ne:JoAq.bd*P[3;E
+FP2;;+gi1b',&jP:fLaJ9$`@2UT\GE\3LV]Gh;iWMq/i'`XDgGIri"GgloF]qT^-5
+A4%jAT<_n5UT3<X>pnN`\V2ng"oqU-^Ei~>
+endstream
+endobj
+198 0 obj
+<<
+/Length 293
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ta[YtDr"&-h&S;?WlM8%<gF9l_d)f,-I^9He(\.sRA3MK\!N>[ckI*E`(T.sZ]Z
+DMk[5Z\c[N^4H6,J(?6_j96W)CmSs2?<?baG-6THgPQf&Q"J1`*N^50Y1V%!37E\@
+e\s9/C<lY>nbJK>'?1eKE<<N2mN(.,P2&^4I]HDS]q:ufL9EgOL3K9fn1Nk<R[rc-
+:n\e8e#TmO;ofAN1)OVZK/p;ceCU\<+4^5C^](haI-L%RkXJf6QjBFCaZOSDEk1$/
+gCRQ(B;3-RUY"_:ThG5"!8SI&Hi~>
+endstream
+endobj
+199 0 obj
+<<
+/Length 268
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$a4_hl"&-^u/'nU/n#bDFVP+i,F$iU1-#UEC[OJE<'`i`n5_POGHE8bR\kQ4Yk
+`Nh/'RpaZl"7tB.IcR"LSeS7`l^Zi?>#SSG11sm32(^'ehEGXS;te@F7G19Wb%At@
+Q;Km:G-h(=HGMSX)ufo=gfJ!N[DH=29tpe$2(lT9_Q>b'78Bt93k*?Ul4O-;M!P3K
+pkZa7OSn*s(E/qF_nnhVqS7'J]5n@Mi"aP!M_U=94!^s0%R#>c,Y/0IXQbFf"osS1S[A~>
+endstream
+endobj
+200 0 obj
+<<
+/Length 314
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um'_+MU1&-h'G4Tso18'&>n-BY1=\PO$b6-thIJpJ,1oXlb=oU&^[o[)2\kmO;r
+4Y6IlRl4)^&+dUGZhuU3\DR[#PWZ\>;8KF^I8X'bBTGcW>a@./o(#Q)Rdt*o.a%3k
+7/?KFL5#JT^V>6SW4lgo+g:E5.*?rTT6OpacbX?>hHB6!]oXGpF?SBMV-o!WX)3Sc
+e!`)@[HW"aBl%cuIUn"1@hg\2&0FaOCP1+E5j"8[prk&TNt2O4"7Ch&a!,%735DFU
+`X[#hKKYF,R7)V31Xc?=S\<=!<k1aGCs2pkX6GK?"ooH<eDp~>
+endstream
+endobj
+201 0 obj
+<<
+/Length 286
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um&0i#VO&;B(F/lp\<O0E[+8;rkg;FhL,+@3sIJ2.963lEXCiK>]oEfk-JjU7$Z
+/M'*jK0V]nNV$$<g^,RRd8<3tPh^k.$[o3a+]5P`j$J43buQJJ4hm;]kNA&Pb;5;[
+?-qWLe"*XBKY`TSi&kR9)g_d(mb#GHVX^Em-'lXU5PPbQ:K@VQ!#@Zgi"BBd*52Rd
+rl=/"r&%0^r\L%fdJ\74d3=Hp1pX__GYr]QGZHMcM&*EsO!QR<%4-1GRloso7bOIp
+#Eg)9T\#ICddI8<kN^8%~>
+endstream
+endobj
+202 0 obj
+<<
+/Length 323
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U<mYt>*a&-h&#$SG,ZDd_]2o^9eS,h51[n-VH3+$_C]'s0D<7EW9kM+(`\K.h3.
+[TMsAp:LKE^1(aNk@][(1S4,>^>NJC7E1BK^!^FDY8L+P4?LmL:jdMbAOYiH:ZdmJ
+bDam2m02[;<]BsUp@1Q$-"@%M9n7Y:Yu'9b7peS'I+bN<6%:c/^*i-H.tcM8gLG!a
+"o'f5<fo8.NY8+CqSc$87)R]/g'.Sor*^=Cs(<$CBT5Ee3[d7?@H01@T*YEq5j0m(
+hVd$DZa#p`(-TqeJV3G@+gM/28]S7snIf?i+Q(Nk6R5r;F@SOt!!G=9V>~>
+endstream
+endobj
+203 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U#s5n6.6'EtVr-+jo`lYe'9[RbK`@H@Jk=qL,*2I]^NRG_2p<`I,tW&7Y7"9,D_
+k$orB:#N<%-HJmL+?^GPa+b@m#%$K++gijbb+GD$R.(Lal?NrA~>
+endstream
+endobj
+204 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+39 0 obj
+<<
+/Name /T6
+/Type /Font
+/Subtype /Type3
+/Resources 204 0 R
+/FontBBox [2 -20 91 70]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 46
+/LastChar 121
+/Encoding 205 0 R
+/CharProcs 206 0 R
+/Widths [31 0 0 56 56 56 0 0 0 0 0 0 31 0 0 0 
+0 0 0 85 0 0 86 0 70 88 0 0 0 0 0 0 
+88 0 0 0 0 62 0 0 85 0 0 0 0 0 0 0 
+0 0 0 54 0 50 0 51 34 0 62 32 0 0 32 94 
+62 56 62 0 46 44 44 62 0 81 0 59 ]
+>>
+endobj
+205 0 obj
+<<
+/Type /Encoding
+/Differences [46/. 49/1 /2 /3 58/: 65/A 68/D 70/F /G 78/N 83/S 86/V 97/a 99/c 101/e /f 104/h /i 108/l /m 
+/n /o /p 114/r /s /t /u 119/w 121/y ]
+>>
+endobj
+206 0 obj
+<<
+/. 207 0 R
+/1 208 0 R
+/2 209 0 R
+/3 210 0 R
+/: 211 0 R
+/A 212 0 R
+/D 213 0 R
+/F 214 0 R
+/G 215 0 R
+/N 216 0 R
+/S 217 0 R
+/V 218 0 R
+/a 219 0 R
+/c 220 0 R
+/e 221 0 R
+/f 222 0 R
+/h 223 0 R
+/i 224 0 R
+/l 225 0 R
+/m 226 0 R
+/n 227 0 R
+/o 228 0 R
+/p 229 0 R
+/r 230 0 R
+/s 231 0 R
+/t 232 0 R
+/u 233 0 R
+/w 234 0 R
+/y 235 0 R
+>>
+endobj
+207 0 obj
+<<
+/Length 128
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<%q.Q!+I0_"[c4B'LT#i/g,!2KL![HcVQpZ!(\BuE]JDcl%]?E\b&&#Uf2fM
+Jg$JpVlrEY;/%MHVi/D&qZm$(fGg1q(m/5/o)\Oir'0PY>WoV!\Gu^3gdN"f~>
+endstream
+endobj
+208 0 obj
+<<
+/Length 157
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z;_V%P"C`$c"Z')2'LT#i/n583hZ1U&e2((N2#n92\Qhn$>l*Cd`YMhU*^D/,
+IA['X"[anj:LAg=U=*!n:D\`bs8UaOs8W*(Lj/nD)M#aJ"s@mc82)`*+`&!'8k'Wu
+oKE@52M0-&P:M_&0E=IUb:r~>
+endstream
+endobj
+209 0 obj
+<<
+/Length 331
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V000i#Y@&-^E`V-%FM+2PYk,a$[4>$=08"VOcS!%9936(LO\>g#Y-&Q5L11Ai#p
+J-8<4ilq/LPIM-/M#)4%+2_U78)ELaQLVTuB,u5Ak/5"%IFpu+Y>O<QE-i1CDMO_N
+qXX?u_dsB&0-W2h?mZf^JafYUXXm18@J2I=PS*RCCGnm2$V\oC%Ui..<cZi5EXUtn
+Ob_Vj-)im",\l&lQ[6:?-.4bm[/8"TV,=QVaLXqiDp=G&d+>;H@2dm2O^aG8>$U,U
+A>?;e>1!_q,N<6/.Y`]q*knDM6X?]rnX%>]^EUF[ZWYLg:+#q,rlS:Ehsok0&3f)B~>
+endstream
+endobj
+210 0 obj
+<<
+/Length 324
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W"]0i#YP$q225Lu]mQLbGuC,OM:dZjRKqOJ(S55Y2!.3]UB(Os<X\7C:(lM'>>T
+o;!7RIt'PeEg.]%7`&$V+Kl6(n1!"f4^/4ONR\FjmsOQ6I[3pjqVFhLT-#`7E8<b"
+fB;lIpU?khV5bjdj%Rt%NeB(6Z-]>o.FV7!"cT7^0^TE-E!ACgrhJekPbZDa,7QO_
+@O.J[%%M@bk3<`J8sKbh,g8A`Z):<fG#N:ld=#'qjBPrs\C&IbB"bMFc.ISG$!N:Y
+PlG1&F4j[S>fIDGNYOM_82?Oad=Msj5QjHhnEB[\hocht]:PYiB)k-5pJC~>
+endstream
+endobj
+211 0 obj
+<<
+/Length 141
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<%q.Q!+I0_"VVQ''LT#i/jiP[hZ1U&cneYJ2#n92\Qhn$>l*CdL8J5P*^D/,
+IA['X"[anj:LAg=U=*!n:D\^,p(-p/YW"6l0I"C=joar\pj^rr`rkhsjDsqS$KM6s
+!;A6/h#~>
+endstream
+endobj
+212 0 obj
+<<
+/Length 362
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;QYtDr"&:i_";?Wl-8%<sJ9`etqX9,;O.0Qbh&(K#od5hTJ=RJoW&[pJ(agsR?
+H]\G_!t!kJk+Bot9&sIISp`66C[kTd#OY3.VW7BU&/Vm(]tEC!`p?jp9$H_Z-d3']
+2kn*hILokYheuWS$L:/>2U&,6R]G6q$.^mAO=nU>16[ICJeUK"0hNK16q_fkMWtq0
+r0*0+1kb(b;'mbI0g?\1L,;@1lVTR]3,u[cfTrA)3*KC5e?bAQkGuTpQLpnbl1^^H
+pS.SL^CO6*7F<]sRE1$PcPf>'a'1Wf+XOdUj[D"?`UT8c7k('"Mi_Taa_E4fjS,a5
+ie';'&L[(_<;FE2$L__W_VY@oL*$X(~>
+endstream
+endobj
+213 0 obj
+<<
+/Length 288
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y:5Ymu@>&-h&;$mrIQ#i#e9O<EILJssbgU6?+\NXctup!J!u*eBHiJ8Kuj8R7^"
+!r5I;QJ?s]6p?=aM&-jPF:.MpnQa:d3=TU%9muOm?80RM4&A%0D^1RpbB?Mcd*&n?
+^HKl0Y6`Wk`V@Sa=Y+g'>k,'1.j[kM2.1WC$g:U4/P7mrS_eCn;Bp*WC:.B3?A36r
+ZqOKh92@qJ5j;smJ(OIF2JXu\=&Orl>%hpCFY]W?kLOUP3bb-KG=84[8ZIr/!&n,[
+eEf5O,qm2ZNdL[4!,r1`<<~>
+endstream
+endobj
+214 0 obj
+<<
+/Length 217
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)\:bY^"!Fdhu"Z$O?'LT#i/i/TV!JkNcB;hJ=!$m_K\XYdmoYVEf%(PpmJ5TYK
+:'&WIL0XSH^'Z/TV5[^k/d`!u:euVMs*oRhs8N=#qB(t$hZ0J`5j8MMq?)u]!Mea"
+oH,(F5HOKAGo6LPT)eg37/t(hs+&N>TQC:'#5X3*)Q"RLrs&T%rfKa(!M*q$V",0b
+F1HU;"`aVJ!&GI2=T~>
+endstream
+endobj
+215 0 obj
+<<
+/Length 379
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YQR4\ip\%##^=Z'(S:6@8gTL*?q(U]i#A+@/H.&l;JVTI)VU9"=t(a:V<f&S64\
+lnV`6;j5)pB'ccCqc/o_Ul_?VWY6gVjZ_iT/dkpeUkInjLC`P8Ok1%T[o+!3?,FS6
+qYEm+cC-8/H%(2"k$1#4Eo+P]oL.Qri$T^@-`&D.3@]0EA?2Li)OuO.\DK7TK,K9?
+GK1cHr2A*kQ4qb#p'#00e@KU[(l-bn\o;m9WE)?nJ_gkC]i^+OU!kVlnt"K"dk>8!
+=c<<4=q'5pOcmI-r2%\[7^T)m#7?YWUbM=(l&Nb:$JR=O)iRuYZGO'A?5"5G77<CD
+j]F,l51)hk'kY$4eLed;$%C@!WjDC@ZRPE5_`.KR!+$o0JH~>
+endstream
+endobj
+216 0 obj
+<<
+/Length 350
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V020i!Bu&B=7LYooIS,OE$m!cd8+eL%=D;OD.Z!F/8*NRlPF[5N=CN^1,Y@@[/M
+0N_.:IP6BS=$Td),-L",Y2XR=pEdN%H6_T>O/pGZ?5.F,H)"Y>q/]eZ.)2*=Pj]Z3
+@S(kD&3iCn?E(Yu+TuBu6<K&X?/$5KPP?!?jV9t`-o:gT1Y9M94/iO]N]I6LRYEjt
+6RS[n1/mW[0VW$P+f$9W9j:Q^_?bf,#\aQY#\d3Se[T]H8^g8":=Ad5bga7H,Y:L"
+Ou>nc,\blYe@B,.,\`I<9p0[R;2ksU$u0(=lf@>D1q7d.j#Xd*)0N)\`p'\ehDMff
+dc$h^Y,3TC)Z]i=p!!~>
+endstream
+endobj
+217 0 obj
+<<
+/Length 384
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V/F_+MU1&;Fh#0X-m+6M:R>NO4h>$<=n^"?lP\eY<@<cO'6_$GK'H(W\=dP2Cb$
+9=<\!qN:_hG5ctp?cH6Mj*;@UMc_XmEu!QKI*'Q7]V9FD;<-!b26<9D5/m=QP]r?Y
+\UM&K<@F@6q!n@Z&t59q8:b\e'Se>L-dlmX-W51_`0nYPg0Qm2^$ljoT_%Ag(45BT
+?m&KH]d*5=Hc2-K&,CkF&ZZT70q+1d+\V=Oe%#U^+mbD1o)p4_Fe-=>JT.'9Ve$((
+PpOkI:97AeZW*\u%N$J)I_]WXCCeie_dEd!)RuO>(Xi\07.q/L:Z/;b3b*3=V7j5.
+E1^m8930+2'@bPbLBaF03m6]5>=CGR&lgs'81qes'->';!6WnLX8~>
+endstream
+endobj
+218 0 obj
+<<
+/Length 375
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;P]h64.&A[fB.0A8"^$b"d1`tWfi@o4#QpT0B#>e&$7GH!+pL:ZlaWmTT&MhYu
+m&D3W:13k50&b+lB:*.g-Q*[[XpTR!bc<0jP](])q.[i]]H1G(VD?6q(9'lCprF_M
+]1^@A;Vg@0gW-Y"Xq5i6#^$%jC''P)M&Pku<KX4lN3#bhMopk\<j,\aGYue&:mE6=
+660i@eY6`O<dkRQLqFYR:3<k+e@ipm+08io\Z=,?f4ZK+P-!&`Pse9N7XqJJP%]\R
+F]OYYaVo#[3Ao5q)r7GPqWJXkcsF]e#:Il/qrX$meu=:=luhip[8RV%V:WRuJ48]+
+:*W%&]*Nq!g')OTiEp>p\[m$gIQ<\(Y0=TT)ur1N&K1~>
+endstream
+endobj
+219 0 obj
+<<
+/Length 291
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`?Yti4k$jPY)b#$1^pB^F"5[1XMnY?743Zu8W!rsPJVdjTdXh74H+_-;kN1JaC
+&r8ru-eWM+$p?Q)nR]m2a8Im1[Id$X_m]F]m]Ka<l1+U9]92@p*ZD%#1e%**l'>PR
+a%&>[^YW\;@l^7r>on\S"-[C,(6+$lV9%r?4/J%3G62<o3Dh;UEQ$E8N9Cn[aiJs"
+,`l+a$SDjtoGB&&?o!,tYiH9eR@$e2IQ14'9fup\*E.7)G`=8.I-VIfPFJi-M+U47
+XM!B*A/2r6#O$W4BDNJGGL=Kc~>
+endstream
+endobj
+220 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XF00abc_&4ItB#Y^F4bQTh+=g_Lj$>q##jT3lZ6I@gp$a1:`Os?brZ"0A!,%<26
+YP>I$q1#7jV5.h$8C.2R'ja^4W0?D?a%CN,_\k7gae&,-PI7JGagMRTR+Ml(Y4iU`
+,r(`01Ud@=\H[jY!"c,c?,-lG"a5thi5SRL"J0bV.f?T2#0P+5i\p;eVq?h&5kl#+
+o.S:Y'&/hGQ%X'Lm?uQKeT-MeQ,GKVP.EA4jE'OZY&E*<QO>d'NutMUmdN@>E2:LL~>
+endstream
+endobj
+221 0 obj
+<<
+/Length 279
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH70lFin&-^Fc-nJ*!8+9c6Qk^Pg/J4(`&Lj]"J:s(0#\s6M5)PEZEXQZ<5?IuE
+`5Rr5s6OL`e]U:F1A;F4&m"S`q3OH6\?KN>imE>G,B%<L^E`q7pSbUWI(Y=!Z@8/3
+l#P^./#lmXWZtB93Y3#3Ln&4L><u8ZBqf4`0S1C+)8^!QR6>Ae4u[>g.jj"BGLr7r
+UM&uk9=25++5:H"LYY=1YF8.&^hZj\#n%Ln2N1Y18r(EhlYngV)!Hf1*,f%/6B;C,
+mqVj_lMtl#Ys\~>
+endstream
+endobj
+222 0 obj
+<<
+/Length 207
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y:00abc_&-^De.0@uZ#gNTq2f:lY#uSMj"Kae:=pc`_S"k7n*+9?hr6F$KUs[3A
+5PPZ2GGSD]RW9qm/,OqElmhB\<];L=BU.D9CX6TCY%"`e':X;2PCed$an9[9Yb):'
+\c[Kf5XRQ'6lA$HV$KX`d&*q..?@#`Ig@K:n>=AD9I'<RMMlo\q!S_MV"VV4cPq<B
+!,oEoh#~>
+endstream
+endobj
+223 0 obj
+<<
+/Length 209
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X;D:p$!Feu#"Z&f*'LT#i/lP[khZ1SPd5+bK2#n92\Qhn$>l*CdVP[Vp*^D/,
+IA['X"[anj:LAg=U=*!n:D\`b%JKgQJ:W7oo`mh^)_gO^,FCO-:_09;)!$74*<QC*
+OL!e/^^R"Il5tO)L&W53JWq@3@YR_Gs*l^&.=Mt'*ZJZTPUH_?L)L7#7XPo:X!^sk
+(LR4H'J%N~>
+endstream
+endobj
+224 0 obj
+<<
+/Length 161
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[;D:p$!Fd8]"`jd"'LT#i/gCqb!5pbB1K;^Y!#!Da>Y^kqqV_cN-=$Bg5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PVn6s8OhOs2.\5K>AUb4tt&&,D[I=(8qG9OoT1"DdYgr
+Ii.PPd2k$8!\RPMY!=VT!9!!\Z2~>
+endstream
+endobj
+225 0 obj
+<<
+/Length 132
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[;D:p$!Fd9H"Z&f*'LT#i/gF:;hZ1SPd5+bK2#n92\Qhn$>l*Cd7]'Ge*^D/,
+IA['X"[anj:LAg=U=*!n:D\`b%JKf>(bkJ%+T=;$0EVDE4Z__Gp#HJ@!Xo(>X.;Z~>
+endstream
+endobj
+226 0 obj
+<<
+/Length 254
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\YmQ(j&-q\<#N6F?_0^`2_,)LF$ZZMfC+ZG?W$l?EF6g5m?GoA/7L/HECP\:L
+^#>"/T=aJ4#NS`@Ytr2deirLV$71%)%/N0\4B\^:VE)5/MF)F*E^D^UB&o_V:[!$_
+D(m%E(TKB\[E/iM8k?GleIfT7!?C&%^hP,%cZWl7VmM,h6lVDk9Q"7S)K&dtgqo4i
+\?kUj$*Q!cnmkDkUb-[pFG.ap-:7CgS+,bJU_i&-i[Dhb4pD#[#nmX~>
+endstream
+endobj
+227 0 obj
+<<
+/Length 203
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X;D:p$!Feu#"VXgg'LT#i/lP[khZ1SPd5+bK2#n92\Qhn$>l*CdVP[Vp*^D/,
+IA['X"[anj:LAg=U=*!n:D\`b%J;q&s8Q_>W'A'o&#'mXjFL8N!s:WHWo-+W%&=6q
++#*`p_iXBf"69E2%#GP<)+(V.s1n]2pe`GbCm=lpU)4^aC)@d)nPNPoSm6hOJ,oWT$a>r~>
+endstream
+endobj
+228 0 obj
+<<
+/Length 267
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.(5758(%)sM4$<]JXEriDNY8*seJ&!uK3dC^JFAR'sO4L)u#]Ff5NJY*TLl2f7
+IZX#Nj@bZaLgh8jP`3_[FGTFFAh)%;R0gjM82U/9-_+<JG@[QfY!g-G[[C'ITj?.?
+E]^"$&9Hs<]ETJlg]@8'$:)4Wmm$kU"$(.RVsZ:+!T+W?G%.M"G!9\A$Elgrkc%52
+K`\sjT#grMY6j#;06DPech)(/2GoB9dfpFgZ=iW!PQ2o6"7SN6HX.2L(:X&U!%;[;f)~>
+endstream
+endobj
+229 0 obj
+<<
+/Length 276
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_$3srhi&-h'T/HXDf&Y'5B&ks'+=RZ?g&@D!.C2'ATD3!aU4G'D`m.dcW#X0^i
+Z6/H"ZL^jq%8!?E[Bq0(>I%KL.BbbXYa\06P@cre7BH(qpBlpnP%Pbq:uf&EktB0=
+0p_3=\)_!@>.RY.9&tg%TM&5f#uLiD*=O&R<qJ^Jc_MV9$gg)[i&jcpoAo<ffk8Ik
+1C*MuhS3]141hm>RWjf@&b7*4d8Pj($)'LO:`=k8=FfppWu.-,NqS4mJ"Z:,^;Ij?
+VgKKb:rEM!~>
+endstream
+endobj
+230 0 obj
+<<
+/Length 197
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V;_V$%#%A5j"VXgg'LT#i/n7NshZ1SPeh^:P2#n92\Qhn$>l*Cd`g0m+*^D/,
+IA['X"[anj:LAg=U=*!n:D\`b%J:21)&VWUj;AeL)#+sc$5hEH6if(G6c&rF57EP_
+)#l<MK*ZW[_%.kV0`PXEs1o0jrlG8!s8S2fH[6>6$p]`U&R;K1>_-.1!<?sKJGT~>
+endstream
+endobj
+231 0 obj
+<<
+/Length 279
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ta\4&3[Y&-h't>ZdH78+9a`*6T94Q)-Sg>XX1$!rsVN#UHu92qt+o&R;28j_%&C
+P3+:WZ2\VGZB?=hSb*F*mc:M1:[Zh8[.:n`gWk,blN_>tDI92HF8KW&DDt?ql*q`E
+o)87QcJqZ]b,c`^eP&@l4/pN$EIaa=3WVhPS-#'2*0m\*df:NV@%uA[<[8TR)MtDG
+4^Z!WE:P-D;(iDCC#nB8`n'0:A\$+!:gWWI#"qL"r)2:@5ZKH'6^Cac<N)ZmS"ku7
+IcP/@*rsW;NJ7~>
+endstream
+endobj
+232 0 obj
+<<
+/Length 215
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y"+0b/e3%"R:`$m]+@K"Z[u*Y3385tu`ZM,#*W)'(Op_pLFN7pokPYnfme`8K_I
+%;hHH8O=$.[*iJCPSq&HI%X&B(f?Sq][jA%Y'2EJWXG4/eNm67MURkJ.XRuCo3J*H
+&V$+jZa^m!:ZlFTbs4DlJfEnRTRn'$P<U3N^E];RE&lM`IEkR><SRfG=<mVQaG1n.
+JoP`!N8FX9Sk.8B~>
+endstream
+endobj
+233 0 obj
+<<
+/Length 208
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Yj=+V)@S'Elcs&<Lh7\GclOZD?6*g8$u#"UQRe!([4q1jcSNKd0R"B_qN16k(1n
+0:A5U``(0-CtUC"F*t98-0MYb3p1<gFji<VW$ob-fJt]+S]DMW-!N.dQLD<'RE?7;
+nBsW'hr$F&][Y<7QhZos*F9a9LjVc?i$fgd#=p-4j%-/"\P`N,Bom_(0T8/gF\-q+
+%fkSC^=E~>
+endstream
+endobj
+234 0 obj
+<<
+/Length 346
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;P5>&jZ'F+%C!umV>g?gX3cm6f?fjZ,/.[WQLaoeT=Kqb[_=E(GYn07B,.8tnI
+IP\SbZ638nbjY(0hOeq&;R><'f4MQM:RQN/q201W_SnrUc;S&105=^kjMBn-Q/"'i
+P3q)%a])0pReO:PB2r7UOe<;kNTgCWO90P5m,4^k4V`<4!7gRI+PLP&.ZH@)&5O"6
+$.2[/'qd4Y&9WM`@]C2cG+ntDJsL/BC^Wih@olVWcr0ddfqWlhN2trb<.*&Ig/3K=
+MH]J^k!q`"[aBD#F:]tH]IMJsMarVjl^3V*6Z,Au;mkD<i'_Hk?6'cNW;$2_iid5.
+F^;"oofE.^mNKg~>
+endstream
+endobj
+235 0 obj
+<<
+/Length 337
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`?:J/PZ'F+'NFA[:P*b!n/[!u`ogfPC.lpB'a#8gaXE#@1Y\EL=MF-1^"0"WN[
+IP3.u5nK4W+<gRO'j$oE`YVdp`Kp+c?W)3J,0+T<gRPUn<"H8%he6(gr6.T)nNG/G
+hEB_78oaO>a2>qJ<OZe'OjO=30q"$BQ\]Y`OeVq/#_0\S0X9L=1'%c%a0&qU4XblD
+!=YW%l5kmLP]FbFjF2FeY43l0oVjZElNfkS$R<^G@FlHREV-.+$Z[&B7M\[u,nc`q
+Se68mIpkfFXfF!YXd,_3[5&Y6A^Jcu>1V_,QG21_Hat#A/Mm-h^[>V0LZkn8-i+\\
+qWq&\~>
+endstream
+endobj
+236 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+21 0 obj
+<<
+/Name /T7
+/Type /Font
+/Subtype /Type3
+/Resources 236 0 R
+/FontBBox [-1 -22 49 63]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 34
+/LastChar 126
+/Encoding 237 0 R
+/CharProcs 238 0 R
+/Widths [48 48 0 0 48 48 48 48 48 48 48 48 48 0 48 48 
+48 48 48 48 48 48 48 48 48 48 0 48 48 0 0 48 
+48 48 48 48 48 48 48 0 48 0 48 48 48 48 48 0 
+48 0 48 0 48 48 0 48 48 48 0 48 0 48 0 48 
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 
+48 48 48 48 48 48 48 48 48 48 48 48 48 ]
+>>
+endobj
+237 0 obj
+<<
+/Type /Encoding
+/Differences [34/" /#2323 38/& /' /#2328 /#2329 /* /+ /, /- /. 48/0 /1 
+/2 /3 /4 /5 /6 /7 /8 /9 /: /; 61/= /#233E 65/A 
+/B /C /D /E /F /G /H 74/J 76/L /M /N /O /P 82/R 84/T 86/V /W 89/Y /Z /#235B 93/#235D 95/_ 97/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 /#237B /| /#237D /~ ]
+>>
+endobj
+238 0 obj
+<<
+/" 239 0 R
+/#2323 240 0 R
+/& 241 0 R
+/' 242 0 R
+/#2328 243 0 R
+/#2329 244 0 R
+/* 245 0 R
+/+ 246 0 R
+/, 247 0 R
+/- 248 0 R
+/. 249 0 R
+/0 250 0 R
+/1 251 0 R
+/2 252 0 R
+/3 253 0 R
+/4 254 0 R
+/5 255 0 R
+/6 256 0 R
+/7 257 0 R
+/8 258 0 R
+/9 259 0 R
+/: 260 0 R
+/; 261 0 R
+/= 262 0 R
+/#233E 263 0 R
+/A 264 0 R
+/B 265 0 R
+/C 266 0 R
+/D 267 0 R
+/E 268 0 R
+/F 269 0 R
+/G 270 0 R
+/H 271 0 R
+/J 272 0 R
+/L 273 0 R
+/M 274 0 R
+/N 275 0 R
+/O 276 0 R
+/P 277 0 R
+/R 278 0 R
+/T 279 0 R
+/V 280 0 R
+/W 281 0 R
+/Y 282 0 R
+/Z 283 0 R
+/#235B 284 0 R
+/#235D 285 0 R
+/_ 286 0 R
+/a 287 0 R
+/b 288 0 R
+/c 289 0 R
+/d 290 0 R
+/e 291 0 R
+/f 292 0 R
+/g 293 0 R
+/h 294 0 R
+/i 295 0 R
+/j 296 0 R
+/k 297 0 R
+/l 298 0 R
+/m 299 0 R
+/n 300 0 R
+/o 301 0 R
+/p 302 0 R
+/q 303 0 R
+/r 304 0 R
+/s 305 0 R
+/t 306 0 R
+/u 307 0 R
+/v 308 0 R
+/w 309 0 R
+/x 310 0 R
+/y 311 0 R
+/z 312 0 R
+/#237B 313 0 R
+/| 314 0 R
+/#237D 315 0 R
+/~ 316 0 R
+>>
+endobj
+239 0 obj
+<<
+/Length 159
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"1fQ07<%p4/0Jup&1#shF1,9#j)CQG*!2]=<OqrA0$H]h`:7b_ei<i&O
+>l#L,0eRmP!+uI&/q$N&Kp&1Y<%^r_L%kUss)7o:i'69%"8*e\n@o!_@=1[ej8T3h
+o+1kNp`F#_Q`DK8+;\Dc:Nol*~>
+endstream
+endobj
+240 0 obj
+<<
+/Length 214
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"#%A5Z"]I42'LT#i/e^SphZ1SPeh^:P2#n92\Qhn$>l*Cd-AGe%*^D/,
+IA['X"X(k7=.uFg1mQ857H+7Wq]GP3U#ZIS&+ZNX&*+fT8G`Yc-tED^&3reu_,-1d
+6GsB7$-*#F)sSC-i?Stt:'.PJOUs>=gC#2)1&kb_O$`hSrdu?Hs0*/,ro=%!%jSVi
+4h1X)!!<5)?IKh~>
+endstream
+endobj
+241 0 obj
+<<
+/Length 335
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;P5t]'\&-^Df#mM<9gq_DC1t,,&B@egeR"[5s4Fk!W<#",ak@T.,5!kPI6C5G"
+h4)B9Ue(HaC3R>Q%A-jB>M`]WP;R9U[J78om>a+A(,bUV@eQ@,*k8VT\OFUsqnj0/
+V7YcKpWmL$?*fKti/+9KEn/K62G51S?7j'(0/AeiXo;g4'\*_IIuf`g<+bDeXqlpA
+Wemal+h(d:WmaGO=%Uak6$+?f=<mK/Ol9(E*SFkPn64/05sMNVStAbd2AHrpbUf(+
+jB)'b]c1?E(dp&ET\!%eT*X3K0?SnM.WCkJ/)2RO%0pp`+/Zn,;m(=%2k@K<56Cns1ZM@~>
+endstream
+endobj
+242 0 obj
+<<
+/Length 178
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"1fH(`="lO30Jud"1#shF1,K/l)CQG*!i>Mt'o^B///==h\XYdmoYVCP
+9tBmZJ9"ok:'&WIL0XSH^'Z/TV5[^k/dai05O^mF#=<#FAGj7<KCOF9*&@M+rm1M'
+q&fJUp)j2tFn-"4%/(,&%0)gs+90[KlH'd^"W.6;-SM\~>
+endstream
+endobj
+243 0 obj
+<<
+/Length 247
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:d4V!'/'SIVD-ElA6]F-,=U1-RN:EkLL<ZXLX/MpYKd5[$?^s[fgc6A+2-Bm9H
+c0Up<P>iba,OMBiSEb?t#:!l<'2BdC(g7#/PK3YJZWtA<`ef@!H4nL]F6/[jom4.h
+-!r(i!(t$mj.LSco'l9k%o?gc$TiOZGc7S_?G8:hJ^loi@]CoZQn@inqk&>0PXW']
+b.?],+uZ`nm:7=GGt?J_1WsKLc]XL,2>AD!k-C9H!$=q4ir~>
+endstream
+endobj
+244 0 obj
+<<
+/Length 239
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:d4UT%k'SI,N!jD,"^'eV'dHq!4_(>el4Fj]D:p`tYYEbl-KTm7gEKUL1'L$^!
+c.eZ>b\3eAVaf-'kGacP>U7ENN-#Z4RDm[#*7%Mb#nNJ8&oK*h=R;?rbAQur]q<6G
+oE"`;7k3"KRL.\&?3.VLhG1""1aL*t8*f5e/f<N<_]PD_eGo(1KFZ:bT$H*p0p0"?
+B*U>'+0XS`(4/qiB/]M\EGrc;akFmD4p(ct)5P^~>
+endstream
+endobj
+245 0 obj
+<<
+/Length 235
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V^h3srhi&02q(0F/_.k60Hhq1B67$DnBAnc3E=TkGf!hCP5Ln-D%iP&[hmdl`BZ
+k'`t_!_Ol985kc$7H5E+fQ%"H3@2D:eBdB,_m2UOU+f'EZO3`'YU5@0g=,Z`\mi&j
+B$&9qdXi&En28)4+!\>uhP-:>&rhR`*+\)T:p^4!G5sEW!.oOt)q[Elqu[una#V]K
+3J[4;PVI)IFrd`&HI00I=HD2DO8'ds;E&p&~>
+endstream
+endobj
+246 0 obj
+<<
+/Length 142
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<\RT/0i9X0:e3>%.c`?>"H"'F!%DD@6No8/982G3/gjFIrG\DHQbE]l
+F:)tf!)fE&$7/-;WEc#I$NL,Jr!ri?Z@PJU!s9*"8J&^7O%^b@d`r<C536hXj9jrL
+$ikH9dc1~>
+endstream
+endobj
+247 0 obj
+<<
+/Length 172
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"1fMaY1fc:g;D9q*8290Tj8t2U!25N(:eo=J,RYl]F1If'\b*dj@U/aN
+5Y3SVVZ:?56S<d_?\OZ;dSqhp(PP*E+8?q^5@?[j#_WTk(`i\9#DPGOru6KmnNZ%u
+k!.'SfFRI1n2&-Ee2R:ir1D0_P:M_&0ECd&.I@~>
+endstream
+endobj
+248 0 obj
+<<
+/Length 128
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;TaV3t=M@!/0=u,h'9?S7(6[ZlY&U,ZG8(;F0Leh+"0,YF+46e1>8r]qmMi%1]n0
+:<gR@)HnL=/j&>(2:D`-Sr%c0BV=A#lb#0pQB)S$s%!gVcQCM&9R$dB_9N[+~>
+endstream
+endobj
+249 0 obj
+<<
+/Length 125
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"";/X=g.3C+OK4HN8/it-\V:lGL'kKr5U&4TbK5r@59))oV=+F3SH>;r
+%(Z!nI2,A38lN8_>nfL#5@E@kh]U7\%tPks!W*E-\Qh;.!kA:5!3k5r&c~>
+endstream
+endobj
+250 0 obj
+<<
+/Length 273
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.(0ogin&;B9X`Lfia&XWqS&hlpHJo7k.-G.eL@!>6ONHQXf1lfEb-n0tu@43t@
+2IA2&be3D@)d,c_o2sF/<bqMhq8c.)_kjFmOtL5".=Me4PT9WmP&^,n.uoLjXi)3E
+HT@]Ns'4spDub4,JW<'i+V3':!(7;U\e52PWeLLreU',u2a\O-+hFmXbh='8KVlWE
+-NH)4.tSRr^YCmn^#E?Olc\5N\RtAm<#0Ms4Mhe+`jAFd<$uD/[j%o:YoN`kq4$gT
+!%5.i-3~>
+endstream
+endobj
+251 0 obj
+<<
+/Length 181
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY_M"C`#H"]KJr'LT#i/n76k+3_.B1K;^Y!#!Da>Y^kqqV_e$L0XQr5Ue=6
+VZ:?5+NMr4TqnVDQ-7WFiVt"ss8RSi6gt=/IK7=lJ@GW9)<Cht!TF2HbQ,N^5[5H3
+^[VDh^&c4Y(`:mE(`8VX(`4)U(rQW8EOgC9"`aVJ!7<Bn)#~>
+endstream
+endobj
+252 0 obj
+<<
+/Length 285
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VGL0i#\A&4AIOYdBCN&75F#n:)-59-96dJHQ\m!(mS0eDK'*7nH4?152!%LPAW%
+prTS-RGH\+KJrJrp?/+k_GdA9\f7_g=nZK63,K+c07"JCGmM#JRi?-WF1AgjSMoMF
+G^oU8f't4t3<>3f![8[S`*j7W0T-2`2p3r-X2H!?@QG^b$(-P%$aBD`i6N:`#+rgM
+JM!00GVFZH_)ro^&]2Q?2MTb6YZ<T"bF-q<Y"V3?>?UcerNB>:.>kI)ibW:JfrfGf
+(PuP;lh.4NqE4i=8ARj~>
+endstream
+endobj
+253 0 obj
+<<
+/Length 306
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$e]hZI!&-q]_1.8^mO5P?c8>DuTSLbM;aFFC,%mV!MW61Y"ApG)/X<'/c3WA1K
+`/pT8ht]Ikm:7H4>W's;ZFuB1_]R\%EO_.u::f`q1%>%bLS!fJC%kjs+N3s3kuJ_*
+qaWZ=52Wlb'4"./-h=9*Q**LYNehc]6Rl+DalsY:fB>NC3&"]1!R(X2SP73$?_T7Y
+0H)bjNU/0W5c%?VrT/R+TW_YE"`e28k`S6+Xr128^$old)>'OY;\jP9XMBW`.h!'H
+jE,DS$[T1VOS<$sI69o3:P-"_7cF69TD<+"^CnLd~>
+endstream
+endobj
+254 0 obj
+<<
+/Length 234
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk`YmS?%&-h'I%Y\-`#e_&$2Dh.4TdlEqd)cO>NXgrlNGmB<kp(<::`=E>E'cJo
+o"iY%g^pm0%!20-_UTQC&g!^Ab8J9H.<1J1Y'29OU_cuCdY"SC/PfSm5p,XiHrltb
+B^H@72n^=qDu4&)23T+[Y[^36&_k?BQ]Q(#2Do8$.G-@#LPY>-[S+]M@%3TBQ5&2+
+B!S"DHu&]C^RB\eA%FI_>1dUM_fl*G8HE)~>
+endstream
+endobj
+255 0 obj
+<<
+/Length 275
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.gZ#7ED$jL*0)3DMl&`OV"+b_c/:.der6_uQC+ornj(#:A$qI]IMft(M!$rPg[
+&>GF,=h__<J(q;BR7JL]>\9$p4NT5=,>UrH;(e\iaO(+E"'7?mCRLKY/^`RZH@(dE
+ZhdZsmiQnZkMh>sBn:951p0^+qtVMA+eo<;!c]=iOLhC2U-u,'WB,Zg2JlHBq?%@h
+GCPQ:s,ZWaf+kmDSOoOe5U"9"6>_@"CX.hB4<8cH+3s)e5s<Ud#GP2J'!Cr5.PGOC
+na?H<._u&~>
+endstream
+endobj
+256 0 obj
+<<
+/Length 318
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V000i#Y@&-^Fc;HTC-8+9a`Z;Io:\$EAk6jb3<2ulcQJ=n2P>)qSe=JAA!H2%k9
+U7h!+AutOs$jYJ-+D75R^$IE5WT.(JO!sF,IurX%6Ou;nn7gtW62Dh82e[2X]"=2e
+g[S>$h`dWW]Frb2<AfqS+e!KrnsV$aOje!M;[SF71bEl.$6$-NJCa!Nn]>91$=M_X
+IYf$?"]ij+RB4h17L]qY%S`4=9(_<nLKiG/^j*(AL]e9,_Z9X&r.k,dV&3_l:"o*(
+P5S2=>gk(01ckN!4t2^7UP>ap0_bp*?kL,UA5^,_q4>>+!19%W4o~>
+endstream
+endobj
+257 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;N0abcO'F%r<L;I/@"Q'A>%8F*u$<=nNJkd@P*?>ib>OZ)b8rq?(KCnt;$t<*'
+6,"M's%d`g+_mMqe.K\V4=E0VPk&CAEIrM:GfT/HO;j9CN)G`f?@g<ZF&X:,)R#L^
+&^1=F`&$Bb(@MXJ,AMU!^sljh<#LJ6_C"M9a#eSQMpJan!SN]Kbg`&U.NB`pqBjNG
+Fi*\:*#&qITD2"Vq11bDm.X[IYV`S<k5bIEiMH~>
+endstream
+endobj
+258 0 obj
+<<
+/Length 290
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VGM0lDV/&4Hh$+AK14?nROK"IAE^a[maV=A#S5+AS?AQJG\qUN)M]![S$(T4+tb
+'Me7XrA4'Ehf::V.HN"FZB40?%QPWAf]_?^Q>7qAF7iMHIX#(<p*mt8Z^k9iD;S\G
+kH*O`q/lGpqGe(4J0tT/'E^`87NuROQ)^`IWDCl$n).JQ@7X)G#%QEiiNZ'oV_Se[
+'YWi*5WZhsX-'R7"?h6%)SDhUL79nc:q1OEgRYn(]fT<)6PO8.s2@GK#+E\:/LtL7
+XgBDLPA9q6I]N9sIg5uG9X3@~>
+endstream
+endobj
+259 0 obj
+<<
+/Length 324
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V000i#YP$jBI3Obbj=gjnnu+<)UWG,n.A8>JM&C(C</'Hh(Wgk;`P;<A-_:(cUJ
+#p:.T=4i]7m=$E%l/f"3^6@r<4LXCkFF,TWA@n')][`VEn8&T0Bo^X/9lm']di@d.
+V)?MB.rVW[:M.6P/-I)X!s7!Q;5GRJbX@+X$i*b1)PTZ>_'-BD+PFj]rrC8#'j.H"
+jZiMN.SM?6F!7k"bo@`:QURu+M6ePe&q`h"en?G4+\sVJqb[BdMh75)r["c#Eg'4T
+MuGeZ(mM!b4q)a[(c!>i=<Wi6SqsK)X,kVm?6>kD&Tj,F*mMCo)?B`&[.s~>
+endstream
+endobj
+260 0 obj
+<<
+/Length 133
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"";/X=A>tZ"aAp;mBE[CK\V:lGL'kKr5U&4TbK5r@5?u%OLeHV-.*&1Q
+']?'#aJJ@iX&)\nR`aaVU@@.A!W*)s#'gE%#R%CCfRN[W+5kSdjm'r&a9<C\_YQKl~>
+endstream
+endobj
+261 0 obj
+<<
+/Length 194
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"1fMaY1fc:g:b]=W8290Tj>&Om$6(C\)?Jsl$ph0a1-(]Eacf@^>f"d?
+9A]h"aeeG?i2g>-V=3ZL:f:8]b2ql^nAkM1rr_s"lj&n$&B+R`s2Y+'?3&O[e9:nm
+mf<uK@/e(ATD9T#5P@>.J,"N_5EJ)PhdFc,hseDNs7-+oY+AmL>^uhTpI/!T~>
+endstream
+endobj
+262 0 obj
+<<
+/Length 148
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<\Q@30JQEY[STLLj=94G0a%h%-l<gO)!`%h(n0\l.O=1t3I,Z0LF\`/
+Ep7oNV7?/g!h:!UPc(]O8Ps1OQ`#a.!s9,4LQEX1TcTVTL`ZU0N;n_>&G>hCKTKHA
+Sm6hOJ,oYO5=r<~>
+endstream
+endobj
+263 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T`q0b2&S&-NYD7(S+#YV1fBilFqb$6\:/#q?u]-n.DX!u9_9;t:&`$3^,VEcA:h
+G.d!B1I6`s#%if\UXjO_gj1W+Yp`M04Ior*TZWDN,.FA6Srfu'1MB[(L%FQ7-TB*+
+ld)+J&h-sQ?>^'Bm%n:aAFa@'M1c<:jP#f++AEisMh<#^BfOoqiPqHcGp`p?neCV*
+ZM<upk9mrM#!WSZbP#5&^72L*Kqf+U"p!ZRZq:~>
+endstream
+endobj
+264 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`?_$YcZ&-h&-&'A.)!Ps&4;K8I,$<GLpJi`Q)eZhJ=B77-.`CKF]6(DNp.W&nq
+pLAsrQ<cMg#SZ&miadq%(sX76Xs74!itt8uZTgaY+P`ZL+^B!p_L+.00%:fCQeN,%
+!f9Ot9,);+OVr")TQSL;Y,CrJf"NpsrE,o)d<f=#Z$\b3=$\-^^u?e,$dlFnZbA=t
+)7=9GX[BM<L@qM@8h"lW7Uob1==Vt?@fRG/kCr~>
+endstream
+endobj
+265 0 obj
+<<
+/Length 250
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W"]^C%h3&B:na.,<6@n6SB7e0o3$<A9&uP7O=H%Z8QVU\Q<d"@n6oR%0hC%NY*b
++5d%m3&RI_9)mD.-;urt]V(Eo(I=?38]/F*E5kL[^*b3]?[E1PC:bTAoS.88q[)qY
+$p`qp!$k7:R<.N+H.Ue/F\NeL@TjAr7W_3dgSES8UR;R00`u'6]B(<(;gn]8EOkWX
+-]*&85<e@]R_%5W^WDep#el&ObG<?5\lBbUi>f!WmdN@>0W!!m~>
+endstream
+endobj
+266 0 obj
+<<
+/Length 288
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.h0l"Tk&-^E$<!]AK&Mt:pA0IAnQ,#s6.KW3'"#q`83$bo_pgQ.qa<&0o$DF)[
+<A:pXo84R@5C_sPbbUQ:;X-m:&+WTgNiT!?c=FYNqS(IIZJ"fKj^KglP)C+sENsh:
+P`gsu<PH4s5.Q(S^isE"/j#bNaWA:G*_5B!hJg$'d<1!E_M.gh4nYdpaY6DA*$^/,
+3CZ&;_FO+9_14?*+2e]f%0qBBS7n,uZ.3s<0o>,R6Y[?6/!F,<bR3K5[B\/Nf%1$f
+"RIBLd"%`mIcoSh!1ii,K`~>
+endstream
+endobj
+267 0 obj
+<<
+/Length 249
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFpYmS?%&-h&C*=B:N#e_&$1c1(oTdlEqd)cMh7gDKGp<i^bI>!Uj`L,s?m@]q9
+5.DRXGJBPE6J<MkBKDo``XA6bf*RdiU1p-B%VO!;W]caae_7K/jkBrQ<-CX<lhuK[
+8JOMW>R:s&#67%;'RU"No3L6k,?KoX3b"T(8'&+>qs8DYYUk)N0k9Mk2Xu9uj6uH[
+n'tg;pOrLhZA!*?gGNES[80'9OCTU_p62'nM(=KGHjp'[>M@F~>
+endstream
+endobj
+268 0 obj
+<<
+/Length 186
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"!b)gA"]I42'LT#i/e__;hZ1SPdPFkL2#n92\Qhn$>l*Cd-H9<e*^D/,
+IA['X"[anj:LAg=U=*!n:D\]h"sE[O+rKT"8[*%0+85a7&!0=Gp^\SK@jdb^,U6?Q
+JUoM39/"M">kUM++8-iJK06+Y3&K\6E0+I1HS/AqY!=VT!!RMj)#~>
+endstream
+endobj
+269 0 obj
+<<
+/Length 188
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"!b)fV"]I42'LT#i/e\fR!5pbC1K;^Y!#!Da>Y^kqqV_c.7U5d25Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PMr"5Z$><,4-808;IORf)?c_s8NU#,X9e2aT);1O9`U4
+"'-%J/O:#9?C8k0D'sru^q^F*)]1g["sag*!g2Sbp#HJ@!Xo(>@-hh~>
+endstream
+endobj
+270 0 obj
+<<
+/Length 288
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSX]aDV1&-q^*$@tS2,Btl7241,%"[Bd4JkeL[3]\ZM[u]*1nIZ`]9$^/Yf%CU`
+OLlZ[Il!u/9kgEF(lDsJep'QWV)Y/n:=HJ6SoD:#1<&HJ7Urfj(.QLGMWBofk]))Y
+0O5>JE6)9NU6sgl&.@]X3IhCd$5QC^'peq;MEbBqM2L226g)f[?f&_)GV^rkF"c-G
+Tp>!Jp&tC'+BAJF+:C#XX5pG<rmh!#PC-Pthm>/LhkJrJ(*!5'4oq:1:SpmdJ=]E;
+YABA[Yhf[F.3@t?!&KZ&+9~>
+endstream
+endobj
+271 0 obj
+<<
+/Length 164
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^""C`$#"]I42'LT#i/e_/+hZ1SPe2((N2#n92\Qhn$>l*Cd-Dk&E*^D/,
+IA['X"[anj:LAg=U=*!n:D\]e%.t\Zj;Ss&+#*1?0ZY>D@#'gT&W#cqpAb.1s3lg8
+?sk*JdaL?M,V``Hjm'r&a9<C\CbNiT~>
+endstream
+endobj
+272 0 obj
+<<
+/Length 202
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^";p[C$0JQT^2,d%#j=94G2?sR-.%$GRR->Iija]a>/shbLQ[ZGrYrS/b
+#>g:Nh^Q?D_2q=IdoW6=W&0d_dm`6q56_>ks*kk&f`1u%'4<Fpir=MJs$Mo.$mHTU
+"9T;,Nu:Ld!>>&iR/],75@FM@!9?]o+ohQC"+rbXp[pe4K+'a?oK8J@-W_E,?iUhjf1Q~>
+endstream
+endobj
+273 0 obj
+<<
+/Length 167
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"!b)fV"]I42'LT#i/e\fR!5pbC1K;^Y!#!Da>Y^kqqV_c.7U5d25Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PMr"m/R+cDdZrWOphbXE"X>rOo5Mo%O:O34c"Jn:F^X?
+!=8$2^a'!p#n[3]eoSBJEWpIa"p"!nr!*~>
+endstream
+endobj
+274 0 obj
+<<
+/Length 248
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFp0abcO'ZT[A6f9P9F:e$rTP^>:[n9Z)K:nD5:e(aZB<,>ihP<Y\bTK*5<a$o3
+%dsX`Du0baoMO9LL):D?X5EtDBRepQC7qg">;gha'CaQiK](,B"CAa2TE6cLi9>LC
+5r(mRM3pt@oO`\4kf%dTl4f\L@F@-W[)n9/QY4Q<Pj+f4D=,J9V7;ib`4_>C8gWYc
+c.neeS*"Hg2iB-p3U)T>=%O0=QtsPH^TI&AAdPQs1B@D1gaW~>
+endstream
+endobj
+275 0 obj
+<<
+/Length 257
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um(4UT%k&-_!SJ<<-\)sCNlo4&Ib"9*g""Kae:>$<?.R]%$,Diu>I>(iuh=_&=I
+bQmUMDPAl]'T.g'1`Xn,^_90>OaS+bIR$&'YWLi$6#TED!554rd$q1N'VLeok]4BY
+0UWT\GReH=i!a&pSj?GG5q3cWWE9O!9:Ha"ptp8(VCQd_D69kG%%if/_cJ-?bY<$0
+[rS5A-p--Ll"E`=VNf\\e7?"4O]6eLjoBE#;`*rXrO<g`$#]5o!5,SQDu~>
+endstream
+endobj
+276 0 obj
+<<
+/Length 220
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR;0b/e3%"R:T#Eg\ZiUm9KHiekY"?#]Y-9?DPEHKRkN(84bi<YAN``gPn_?jJ]
+Tj@LR/SIEfboEQQb&XL&?89Q5.-#ob\W`S'\mXXI*\#4YDInO1g98SkofKbB*bY+\
+iW+_j!)r:dJ30H=Ke`o\6nB/bk1O\i%l!`f5_pc2Y<P9j;9"t%&k[%Obo-YuW>_o7
+q?VM+4pO"f&,7"B]]ZJu~>
+endstream
+endobj
+277 0 obj
+<<
+/Length 232
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_#0b2&S$jBI/%$eKt#k\@o9aQUbWIRA@,a^Ok0J\/dDN<9mEI\<.3t"@`/.?fe
+jiIFXSP`*U4EaD^.3/k(d$e(g;Doae_`DftA*^AQP;QIE@gf>\]:`99%Ge2]'=oK8
+J:\X=1)2jX<""^la>r>:X,hfK1@_>!]]kWNf`,?jks+@,a_=E%.,.Z59bfKnd'Q*&
+#CV;"pno1q/AG/520Ep#E/1Ut!&$Y#>Q~>
+endstream
+endobj
+278 0 obj
+<<
+/Length 274
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSV]aDV1&-q]g$@s/_,P5;-CS4_;JfeA*5pma>*?>ibmA'>Oq?W)kU$(M]kb;Gj
+5JmA_b@M>*P,5mhCeUUop(gGkj\d)HBM<U-1LYLGBo2)?Z5h>i7$pa$1U<C6/%V7S
+#;#%;"5K7oJ=%2S+r.I/JYZ,H1G'jrf<Me^n&G6$?T[he57Mhla4nrgo[Nm:=85j0
+E&s'4iV2$W%I7h8lYMQ,%r/Soh\pDdqIU0qf8V7.*#O4%I2P\3+d&"iJn6fuM\7uD
+*!#QncHc~>
+endstream
+endobj
+279 0 obj
+<<
+/Length 162
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"!b)gA"]I42'LT#i/e__;hZ1SPdPFkL2#n92\Qhn$>l*Cd-H9<e*^D/,
+IA['X"[anj:LAg=U=*!n:D\]e$p\4X!$^MBE0-%Y&(H(OJSYOR5OACPaoDBr(&<B2
+!Q8MVW5hAZA[u&/\H9;A!s%8Vr-&~>
+endstream
+endobj
+280 0 obj
+<<
+/Length 244
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V0.3srhi&-h&%#m@+Z8(bA&DOtUP&/Eted)lHhV1kXdEjRu%NfZ"baLI-p0J!W>
+1&ip`q&3a:ELpQE@'RXc!Y<@.du:P6@Cf!'B"6Wi<$9JRB-?mp!`:!tR"/!<Hp-@G
+:g:"aC7/Uk)TEYqoVh/)dk7B2Vk5.*54tV]`j($8m,9SA'k9stS60L#Y&rd2OYs[c
+\`^?[^3)?AT7p2GlOZH_fdJTC[['tk+RBf4i%k?>:%C7~>
+endstream
+endobj
+281 0 obj
+<<
+/Length 259
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;O4UT%k&;K.W^kHLr#WijL\<'+j"b4<%JlWpX/M.[='B@&4:U3KpZj;[*K*e?Z
+H&D'EJI0@V7#cVS@>n'B3t4[c,9DUWNDL/.`bZ/>8KcYn(dYCa"MnV+71DPg`:N6!
+LLc.jVmiS0%MbT-8k!=!<7Mj1B:bsa?Rd7h^.RW3$h[3^<(LZ)XAs*nfpK*ap@_F,
+L#5e8,ZYKLK\n1r[9]3Pk'WCnO-Z3>NQ0LPj&GF?ECVZL0Mc'cT)er#V:@p~>
+endstream
+endobj
+282 0 obj
+<<
+/Length 248
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_!4UT&6$jPW("X/L>Tt,^Ia!tsKp]G[NFRfFskb..pmq=jVO3k.!BhYUF6"_?d
++F/_f>*)ORF>TcGSB_/l0Ug/NlPN@u)Z.D9MTZjM,=PQ'[M#:Cgoi+k0Ab+:rk)XO
+-4?>p!D$+-J$%1?^filR)CpU7d74Dd>r<9IB1>Qm0hp(a1fhhZji6(u3eqH)m'W/X
+6#5!mWLu#VS^r1hVuCQ?qGdRmB+@[P]m6NcM=H,"!<CBqr/L~>
+endstream
+endobj
+283 0 obj
+<<
+/Length 230
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFo0abc_&;B'`[Lf=X&Y'6m-7"JJ!`?cc"Kae:>$<=X)t7>,-96[SKfIAqf$]9J
+@2Q^fMi"6-?ud-EAXDqLo@!=HCGF%DOBT'tXs8^]j<]S8SN,-"WFR".;U22`T&WL*
+kF?HBeGP3hb?LQ$,dBInY)cPJ(29pqMqW51DaM*g.O^H.W.H4YJh!_uO5<,.PX#P>
+5REZ?$'[]i+*9`!KBIO@21Gf1gIo&t~>
+endstream
+endobj
+284 0 obj
+<<
+/Length 141
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"ZrGD[:bXV$0Jca#1#shF1,9#j)CUsl!i>MtJW`8B3L@q2P=n,F_8qj6
+hZG:IV=,,VX8o%YI2,A38lN8_>ne1o)#c<F0[ulVs,@!XNu6)k,n*&t_WC()(!$Oq
+!001a=9~>
+endstream
+endobj
+285 0 obj
+<<
+/Length 143
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<m\6N0X=M/1KI%$j=94G1'J"'.$tr')!`%@ja]a>/shbLQ[ZGrOXZX2
+#>g:Nh^Q?D!D%M4.[1X4VK-sn-o<V3r+BDFW(4imZ24M#%u_@\JED>p)#WQ;p#HJ@
+!Xo(spXjH~>
+endstream
+endobj
+286 0 obj
+<<
+/Length 127
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<RA-Q0JQJP2,Zt"j=94G2?sR-.$uNPl59Z"J4+E1Q]ie`I^k!73L@I8
+!g%@.E)n[RdeEB6-n-W?jmmLjBOG4Ui!0o\beT5]&/&6NSm6hOJ,oY`R1`^~>
+endstream
+endobj
+287 0 obj
+<<
+/Length 273
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH70i#YP$jG"mU0-JgNt>Xu6J.En5T4>;M%iKWE<)Z-fG2o"UWlYVKTmo^5(@05
+#L+c8bOuIuIc8,h3Y,:53e-I3Ddf]@b*O0p48$PXL[BD'?T`/,I8J,@h:&KMf(P1(
+H2)]prm$p-81m.O^O_-0JIOU?CN9R-*]MP?2@GC)3[@I_3H7g<;*-c:/J.5/3>?U/
+cIJmT,&1#:aJ#T1,3jp55H:3&ebgQMU2>0]Np1V]3N?;]BU%pSq#H^(7ASc6p1uqq
+!4kRl&c~>
+endstream
+endobj
+288 0 obj
+<<
+/Length 260
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.gYmS?%&-1'-*J@Yf$-<]k)edd(:_h1ski;uIUP#:^j.@(aOaKL9%`N\E;!9AU
+n.P/Lga-1)PkJ(W/5u@LSMf8cXrPY%.\1:r&Z7.F#*U9s@Bu^D-KT]Q1aZh4*r"h$
+c!&Z&Ve%(g7YXIili49N1NH<S(*j2/W!u#I)fa&e'd"QpVc"qUXnYd1Sq=-'f:6B@
+Z%?hBZl(CirLf?Aa'b8XbTf0?/T.<1jHJOU02&_Pm=7FV;%bel&,7.FX17FB~>
+endstream
+endobj
+289 0 obj
+<<
+/Length 249
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:d4UT%k&;;L-#Y^F,A1jN0jp/L%J%ubM<ZXLX/JP<G8'=d'#V!4oT<eP+4(7oA
+2p?VeWeJZmO\$_H39Pm3>h1CMUmaq4/TdmM?$Y+DI[%/#I&edCQi!$^S@:S*gn,C#
+f)ebQG_uMl&^V,h6tG0^o-2p,+/:b^U2Xg3#%r:8!PO1.N5-5D&H)pPcg>DBVVVIQ
+9S4$.>c-K*pdi:c)7$Hm09clfUJO&Z0;QBfFl'KQi6MC2JsqD~>
+endstream
+endobj
+290 0 obj
+<<
+/Length 275
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk`]afWZ$jZ87#>H"82u3R_K_&[unKX146mj'A*??u*\A=s1-p.Rk%><Fs:g%r:
+jjGKhJ#h]G:dh(?e;P_Q3e_fIV5+sTA4Fs+Pb)j,i$(Je5Y@`bOV[eOh3(+sP:bU/
+O#&+5@]mOWjpG?jGAJb:Q1a$8Nj4,4R);`'OI<MaZ>)(CPs#ljQZLQ\O1;T>3D7W(
+N5%\Lk==JoVu2o#o<eJ$acP7>R:PWQ4(q+d`$R9b-GPcF#%@dX3FX.I`2n<k33EqM
+j(eW`<9TP~>
+endstream
+endobj
+291 0 obj
+<<
+/Length 268
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VGL0oj+)&4It@YV_?#i4/h,!g,f^#o8@3/+$@W!%9:>"YK8lEg.OeV$i4-3##>-
+NLiUhX?V4"[4J,>GpW,_Vi#tLeYoG;;X0<8B8Y`'2_C@$=Z'IPFi<D(HRfhtm?_)X
+DJ*iO"V1YGaT2J]+OCN>.T@c^U-!L;L>YRSh@C*K;iImR(iA.Rg+WO\,XWHgeEQiH
+<kmjiN:9<7:t(2"qdaeG18E)JLaElSCa's+Noi/DH1XLq"u#NR-9HPCY2paS%KKg8H_L~>
+endstream
+endobj
+292 0 obj
+<<
+/Length 213
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_!0abc_&-^De(4g1?KZjUA'/gK85ZD\15q<J=.4l5;]B!WcMT87"r6B1mQc<Ll
+nn49M(G!VGl7"JkQ?(+C`jXA:U0Zh8c]n$dCWGQ_[Uc_n'q>'(QCNrhbN&S<fPL`k
+[D5$Vn>6?P4WVL&=$H860h-dN)\_F@@F,5mk_Z8'Pa$XeZcTu[)(c`B(P8jA#!r_+
+hE!jkG6$;c_iF~>
+endstream
+endobj
+293 0 obj
+<<
+/Length 328
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V_T9hN>h&;@1,@\>W-K[^/^^C2`J^o1WVK!%4d\eJ*Xga1gYO4$OcAM8e&Y<'!$
+5o]YFl)K'u<IZ@'FE5g<dVktcjg!cGmQ8)4Z>HF"D6+",4S*IOl<a=IX)$4pg>-(+
+_pruVmr':D4C3md$744nT/:4(!=>Z/1(Tep-$h#hAoVP;HYYjOe/>%>U_2)U0__[I
+58?j*FNI'QA8Y3insKS.1kFg<l5ou?=Cukhb#9FI/btLC^$.d=Or8pNUU*KF7Mso6
+0W6d&jq7XSg9XO_*@qa+dg7'G5[W^6kdC7>3J5VC#A"QOm")?0^>nY_!#)m6)#~>
+endstream
+endobj
+294 0 obj
+<<
+/Length 215
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bVl:'6==U1PHN1Y!O``'-mY?)X&%gk^nWO>V7C"0)]a^1+mtcTG3a,;h23+
++d]p@Y<kfXBe#IIMo#MWs$4rH#U1.J8;P=f0_q=bnfN["r4l,>,S)TM"%`\$I\8P,
+%.%qrnH[DY%.&I/Uc_0MK0>U's,S<&,KKmP#8l)80X*Ji0HX\1AmbUbL(Qa=6m/d?
+Y+AmL>^uhTq`NbW~>
+endstream
+endobj
+295 0 obj
+<<
+/Length 178
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^""(Dp2"]KJr'LT#i/n7g&hZ1SPdkatM2#n92\Qhn$>l*Cd`hm#;*^D/,
+IA['X"[anj:LAg=U=*!n:D\`bs5j:\s8Rip7f6X`+V58oFejNm$p\Y7(kAJ?^^2^h
+!JpONDbpuM(`4+V)h<T(".T@4_%L"USm6hOJ,oYDj5@W~>
+endstream
+endobj
+296 0 obj
+<<
+/Length 214
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^";:%0U<%p420Jup&1#shF19q%?)CUtW.%'39Jg>nXE\<]B-^T:lJrq@G
+^'@Jp9A_26=i$1mhpYZ#Uo6,8bL8o=s8RTBs8W,WLYr^0#Rh@KaV+[l)#4+c0X)e^
+ruh7>cOdl'^E*U=`r@.A)?)i#iWJl_ru:;B(`;NW(k=.A`r?8\R/_YDi;`h4_>ZZc
+X!^sk(LR6$$1%f~>
+endstream
+endobj
+297 0 obj
+<<
+/Length 276
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFn^C%h3&-hXQ%$b&n!^c>ZZjjD%AALK<#=0^Z5TLjZ>r@\o8*M6X3f#NJM;[<*
++?pJkpZ:t>A7EI%#>tt@C\bbk&agO>[Vr"/"ZC]K=.HE>00#MX&uXdO6nG7d6;GSm
+NiT.haG34H[ncUGn3M0hk"\mUad;+elC.qFlOpcZ,kO9)RXcZ)_n;k'@@]Yb_U.b"
+RrChL`#J!??$+I"$$8HOBl_BYSZp\[)ZBCn__$Ueob##Q(l=uA&gC7QX@?R:mjcX5
+?L_e2:Z:"a~>
+endstream
+endobj
+298 0 obj
+<<
+/Length 146
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^""_&,i"]I42'LT#i/n8rFhZ1SPeMC1O2#n92\Qhn$>l*Cd`o^P&*^D/,
+IA['X"[anj:LAg=U=*!n:D\]h#58)s)&S_qL^"F\s53;l)Aj;.pjnf`*K:%lE4L:8
+"`aVJ!26sK.f~>
+endstream
+endobj
+299 0 obj
+<<
+/Length 218
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR50abc_&-^E&;?WkR2oo5HmKO:X+9\Ej.0Qb8J6E:0$L&1Al4Hp3Z"2(Q@%dge
+JcGNC8LLT":52;\:,VJR3`Dp/h,%TEc<V^.4&T4Dg2a&^/Vf<b\Xme-W`nrcE][)T
+B+\M=,4-(-)Sl\:$3?e33VWah8rF1%.)n'IJJd9hNkkMiLX67_6oOrZ>-EQE"$CNh
+nWW\T/LoK$Er]ZiS>Z~>
+endstream
+endobj
+300 0 obj
+<<
+/Length 203
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y:24UM6F&-^u.;?Wle#WijLCg]Oj@9#"8TToaY98aOeGE8&bGQ^YIEQh4`7rT))
+_OF+Oc%>8/RQ3;aT,i%gT/hbP*)@6G/%(u80ohCP`YR6N^LB^an+_?Y>fa*OjJt\#
+I\E)o"]PO,9E_VZ%+tXReflf?A<f>dRI+Qb7fRQ4bS+T=%a[IG7MSQo]!V!LT\fb!P`VC~>
+endstream
+endobj
+301 0 obj
+<<
+/Length 250
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:d4V!'/&;>m9CbcGi?nS+^Z@u7'rZkC/B]T9EdR']d*0$_4"A0$,cZ-@s[/#TI
+b^86WL!7KW`/;aW=ZK^#EF.j*a)c6!X#n;bb0,[KUZ;Sk>?u6WgonY:<pesfIpTWg
+$TnIR.0Wm15XR7k'O`8]H6c;Z&>L\$K/W*poLV;P@PDYYd56`j!W3HPNK!je<r;+D
+p)Ol75Ohof\cc:Ob'VZ0#8J_@RTFlZK6VY"r=!To54E=fN]`1D~>
+endstream
+endobj
+302 0 obj
+<<
+/Length 278
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XF00l"Tk&4L5/&XZ$Xcs@i\A4/ttTYqBVJY_i;CmQaeP$0o8Nj;/OWC$CW:DSLc
+6[%ECb^=%%9_7U$rl8m;S&RCP5M#\-$n_?EChbJ`LU4F[Q@%o(Ht,mop>a-D>'BB6
+kPP"Lh5^br#E2fM*ePE-J2iZ2_O"[R*Cb$)7?V#2UnWVI%(ugS!0]-fJlikf>NWs$
+:/88LXFF\1eqo7*6h6Eojt3(HV`?\"!.VV2HNc0&!k2]0i;Ydj,i6Z^gV$Xb9WIB\
+dndXe!)oTZ_u~>
+endstream
+endobj
+303 0 obj
+<<
+/Length 281
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XF04`8,%&;A/-$)B$>&Mb.F[UEa0-C.1H`C2&N2ulcQJ=n2PRZHGQ\9)0TA\A"6
+P9NGa:YL)h2t*kS8LR6"01)qi@RE.DHtF>`1mD+=Vl1>qq\-/3%X);k%R*kP@(giN
+LkG=uY*[n*dl0Q[Qi\SI(a,`E18>)L@j6QZZ(ek91rtn['F'9K5)Vp1#'o5'Kj#9R
+U1[t$No$D]m:QNN4<=<'8Uk$0PWnX]>=Hf(=n?D:&5C/N?,tYtB/op@,a!ObdiSLB
+Xig)]Du"_[O<jM9~>
+endstream
+endobj
+304 0 obj
+<<
+/Length 215
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_"YmS?5$jPWs*"#hrK]WI1Y2oimiLhZFK:nD=TT0M>cIYRu8%D-/FGjjki8SDm
++!`"k\2dcr24\5iq,Gb,>Z][_XCi8DX`D'N'?D0GeRUR!,1GnE>`f=s^>BuE$7cmS
+=!7l)6!ALU!fL@mp_KqX@%=l?PeAeA<LtC[V!F2a]g_DNbOUGf:Ngr>IK;S>)BXa[
+0Vrob4hV(#<3*5@~>
+endstream
+endobj
+305 0 obj
+<<
+/Length 267
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UT3Z"a>+'Lf3!+hYfjnGRm?)[E`S:]kSI8?0%JQnjAiodj5?>O.nTra8A,nTeJ.
+#\9;_&+4^J-I-b.1ED`!^[J%aX\9tWM8fdkNCu=lrDOK>'X'QW;QQjn=?J7EPbNWT
+rU0.uoh$fk0=q7'Foc!A,<K(!1Un"\#4%\nJm%[e'P@oIAk99O18n<?]QEB1I;0:r
+i'*Fp,9<1!#.aS!=5a\S#J!04D.6A+&?[_^fD'ZP?i_*H^ZEnC@td%rnfmf/!1-uD'*~>
+endstream
+endobj
+306 0 obj
+<<
+/Length 208
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSV0abc_&-^F3/HXDf&U#e"]:22Z(PiE9+_]s<e1u`PF`K="Os=e2,%R2q"e.>e
+Qp:).Z6De!XZVl/2NDYr+'>=8<_rPFb>#LTfEAPt.Oqe13MC:b>ETSYoQn7?(j<i-
+a3:e(L';r)_"<55?W(JO<@oO2B([6%.?8#a39l/81lpmp$(t%849J,KY>U^!g]ot%
+G5rZ'\c2~>
+endstream
+endobj
+307 0 obj
+<<
+/Length 188
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bVl9>sec/Es6&HKbQnW67sAo,\R6)oF-:k5U&4TbK5r@59-V\9A]h"`MN#;
+i2g>-V=3ZL:f:8]b2ql^E.IaK&2c.n&-EPsL`?Dis+:FP6R)P\aWEd2iVs-*fjN^Q
+_#D*"JUmjc+!A]#rrJMb^q^3iq8'l'^^a=Ys8P<MX!^sk(LR57$CrX~>
+endstream
+endobj
+308 0 obj
+<<
+/Length 237
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTr3srhi&-h&%$@sXh,OAZ#o+\Q8L^L!j[.433Bq]42c-:9n*$JmNOE$T!+>EE'
+5CYEX(4?U:iseI>Hj&qn39':o(p3sGq98d@8IF;`is<:2=5YBk4U0i@BDd4-:Il!u
+#c0teKbQi[@mAeGCKm8HQ[0HI]0r_?[&@GTWmm]=OtEWV7^I[uZ[tZ3Ah0-B8rKh5
+@aZthN]j^S\oWRfKUf*.d6*1o$<R!5!.N4jL]~>
+endstream
+endobj
+309 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH45mi3?&-h'ZL(@mY7sK*+dRP4`'!*2l6*315[;8^i>0Vu=UNcp./YZstO:ka@
+#QOhA"B4qio*#dIcg[Ud$phtfYG3.Q*;[nY"E=M"%YG>*'i3c,RlP6QOu6Q![j*.+
+1a4E'b(MOe't(?PBq"^gL^\]RM)'C_q0s\fO'\p4<bZCgeJe*2g"AX!hS6E;[]ga#
+=NIYUm'dll;]V-;/X;0KWjGA)Q3hBd4THhWMlm~>
+endstream
+endobj
+310 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$#^C%hC%)u3cPUrsI6Lt94QJS8W(An8X&9RIDeBpS0eZ3W>8*M7?ll_:uS;9O]
+>e][t-"]IuV,G<03i,c,=#>d+Z"qg.6DIY%]\k!SkWgK2BHn9^MqsPlagZB,4jKFu
+W.ZO?\:>G"$psa;/)KB<$YCia%><hAA?KNM@6IR"qSEG'i>XO\X(8G,#C\*0r[Ft\
+ro^oVAt))bR4bV5]AuS.Q+FHOLmLTPH'[1p=.*</p$t,Qa7,-bnLgtcguE#IhH?7c~>
+endstream
+endobj
+311 0 obj
+<<
+/Length 305
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTt_+MX"&-h(?JdZYa,@k+G]A;%L"Ym52fY`<4HiWgf\Di+LVYXbIPWhEo4Y.U0
+8]f+Ap^T*Jbb'2MF'?rdU87XKW[iBIEJnu$X)hJ@ejV#^n&meq)_@S[Y-<0?4Y50F
+[o?haD!:2+pP-p5=jR@V!t%;G31X0.h(dr<c;Dl3n=K-BR(GrQ2=*0+Sa=%<gUBa+
+3c-mV`'JOfI3/=rB&7MCSL+(_GaaOT61[mQNg1_W[KgZ6&"6mmFT/=]>CtLsi3btW
+hn]h+CI)"oTS)g2".:6APfJjomi-Yk^B"=2M%V]~>
+endstream
+endobj
+312 0 obj
+<<
+/Length 213
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;N0a[t:&;B'o>6r]&"QoiT/4lP#YUZ#,d)lHhV1kYOF0sbmlk(d#`,VBN(+/*t
++^Zs<b^lP&'KJp5?dX^.?sFZ2W8_6im#G%Xnlnk?r6i=#fBX;UjR\6^kNd]iS3,n=
+fiSUW:+<4;Su(aWRXmo)(3aQej](nU=<=;j.@>]9R"FRpX9B7k!>@-f'/76T5L3t@
+>%H@6HN<fVG>%~>
+endstream
+endobj
+313 0 obj
+<<
+/Length 224
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<RA-M0JQHZ1KI%$j=94G2?sR-.$tr'R-GOjja]a>/shbLQ[ZGrYrS/b
+#>g:Nh^Q?D!D%M4.[1X4VK-sn./a,FrrE*!s*km<s8W*!+s)8j"pb6o!9*qd5l?ZT
+6nm)]p]D^hY_*o",S#>F_&s74lp8R>3(k;B$W[M[nV7VBK+O^&!/Cq-KYV$H!"V;5
+8:n_n(qNtTSm6hOJ,oY).hZe~>
+endstream
+endobj
+314 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"1/Q?*:bXY+0Jca#1#shF1'\.).$tqTAb6C^E^1g/QcmL790Z[tS4h`A
+.)i%O']?%mUca&?8r?5>\NF.3R[Y0D#L1LuY+AmL>^uhT4/rq)~>
+endstream
+endobj
+315 0 obj
+<<
+/Length 223
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<RA-M0JQHZ1KI%$j=94G2?sR-.$tr'R-GOjja]a>/shbLQ[ZGrYrS/b
+#>g:Nh^Q?D!D%M4.[1X4VK-sn-oB$Fs8S^B&O\>&K*Zf8_>jOb",Qa0^^_W=J;?G6
+5iNkK#`rQq1Oodniu12D!=#29*e9%gE#)Oa/.5M!!7ORO7tO)1*%h]ed'-u0&GE>i
+"??W*\m2D0>_-.1!<=dW&@q~>
+endstream
+endobj
+316 0 obj
+<<
+/Length 173
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY_M:bXV$0Xaq72,d%#j=94G2?X@*-l<jO=QgVPQl,-l.O=1t3I,Z0LFX2\
+Ep7oNV7?/g!h:!U*)BpqP+pB(/l*:;s3:S)s'ti]r.gu;nHX[eis,c-`WlnRbRFU^
+r!X;KndI`"lktA;bs4_<JVq!C4h1X)!!<5n(F6s~>
+endstream
+endobj
+317 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+22 0 obj
+<<
+/Name /T8
+/Type /Font
+/Subtype /Type3
+/Resources 317 0 R
+/FontBBox [2 -25 135 84]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 46
+/LastChar 122
+/Encoding 318 0 R
+/CharProcs 319 0 R
+/Widths [37 0 0 67 67 67 67 67 0 0 0 0 0 0 0 0 
+0 0 0 102 96 97 103 88 85 106 0 50 0 0 81 0 
+0 101 92 0 100 75 0 0 0 139 0 0 0 0 0 0 
+0 0 0 65 0 60 75 61 41 67 75 37 0 71 37 112 
+75 67 75 0 55 53 52 75 71 97 71 71 60 ]
+>>
+endobj
+318 0 obj
+<<
+/Type /Encoding
+/Differences [46/. 49/1 /2 /3 /4 /5 65/A /B /C /D /E /F /G 73/I 76/L 79/O /P 82/R /S 87/W 97/a 99/c /d /e /f /g /h /i 107/k /l /m 
+/n /o /p 114/r /s /t /u /v /w /x /y /z ]
+>>
+endobj
+319 0 obj
+<<
+/. 320 0 R
+/1 321 0 R
+/2 322 0 R
+/3 323 0 R
+/4 324 0 R
+/5 325 0 R
+/A 326 0 R
+/B 327 0 R
+/C 328 0 R
+/D 329 0 R
+/E 330 0 R
+/F 331 0 R
+/G 332 0 R
+/I 333 0 R
+/L 334 0 R
+/O 335 0 R
+/P 336 0 R
+/R 337 0 R
+/S 338 0 R
+/W 339 0 R
+/a 340 0 R
+/c 341 0 R
+/d 342 0 R
+/e 343 0 R
+/f 344 0 R
+/g 345 0 R
+/h 346 0 R
+/i 347 0 R
+/k 348 0 R
+/l 349 0 R
+/m 350 0 R
+/n 351 0 R
+/o 352 0 R
+/p 353 0 R
+/r 354 0 R
+/s 355 0 R
+/t 356 0 R
+/u 357 0 R
+/v 358 0 R
+/w 359 0 R
+/x 360 0 R
+/y 361 0 R
+/z 362 0 R
+>>
+endobj
+320 0 obj
+<<
+/Length 143
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[="mH)1]S.XjpHk*$7U^7Kj9?T5m%\Mcp5oR5o2p7kAiS.Ep8>]7Ci%R^nanZ
+Z[s?e^8J/$8Ps1OQ`#bY&,uSNf`+0DrdTIgIfmT<#)7Ft";D*`!n@9N!nDA&H?'10
+!<rO<<$jd~>
+endstream
+endobj
+321 0 obj
+<<
+/Length 173
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X="mH)1]S/cjpL5d$7U^7Kj5rI5m%\Mcp5oR5o2p7kAiS.Ep8?0R$_sZHN<0;
+oUQ&R'b%YF4ae&;MFpgX4C&[#s8V!U*s@rs`#g]/"&(lYP7/T)",Qlk!$W:Wa9E3t
+%jK^,2h9G>P4Tk9J.]T4Ll:>7p#HJ@!Xo),Al7.~>
+endstream
+endobj
+322 0 obj
+<<
+/Length 380
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`A9hNAY&-1W;>njU/&X!N8gBY-t$9T'i6I:u&:mWdK>rP932ouZCbT_/!*uB>J
+(>=fp1Xf$<0tH024'oJ^d_-(Oh2DRWpH4tk#C"bJkP<@BB@B#SnR/pi=u+q(iS"a<
+S+#1ra4IA[D]E5fOIcM]M%u[1+oi2H"cjVt5`;J5eHU(^Yr/\Mjss,sUG+<VJS:Gt
+1gIkP>+d9;@(G2E/%#<gW]dU&elF2*5hRm\RqnVR;;1eVfb(_M6J=nCQWe*f<mSW4
+P+=IIe[2,d8^]:N>0CY4Y=0_NBOKE,XF[bWNII"k5c;U)'I^]BHnCRPaK7^_bp4d/
+/OgGg\XoX@J?KIDXu<+)=]q#c6mX7cBDE3^4.Ab31B9'h7(<~>
+endstream
+endobj
+323 0 obj
+<<
+/Length 385
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VGN4\j!N%#,dFLm02U81jo@3jaU?dK`<b5_=gp!$_ROk4WIO8ro&g6W@PW/X2r/
+Pt-`3hUcIFJ+AT6W-hP>p<(-Nk/5\+?(QFjm@2:V@W]8qRr`MjB4'8f]Vgi?c]:$!
+11gLD^HTEi9Rl@?"*@'U5XB#cJ,sX:35eBYYS7uk$8)[*<1#Mu"")2.@_p/R!(Id'
+Q9[[N*P`]8JtS%49*1^3/VOUBM(;%\J_EK@irY[3=>cQ[B-EUmau4Bsq_O5b1`*Z-
+Q`]qFkKQ"7Ce\3<YlCA?8@eOLe;E;i5mugA0I[$L,I!aA'Ka5B)F2<&!mAF_fVoFQ
+PEj1VSSXD.;Ha4V#]2&s52$!@)"YAcGp-m-O#T(B]m2@t!rtO<:q$~>
+endstream
+endobj
+324 0 obj
+<<
+/Length 285
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y",]o'Zl'EqkjKlEMD6LG6J-5$9dMRY1(6I<j[:eM1-[rs&NQFod1@EL$Rkf>cD
+@9GZFb^<Y"cMW[ARcqPJ;.%?c\kD-5_hmiGHTQIJoe#^_p)p\Hif+Eq&hj0G`3\!l
+V@r&brBC2H-3)EZ]o">?qe/>;[FDRbBh<eYG$m[C91o_rVm']<711$LVFO#;,&!st
+kS_r6?V)oXTKUq((IB(g%%8uRBut^'[%IHlEA3%uJsMi6qDcQ?XQY?B["HMmq:@jD
+7`53)=6@&pjYd+s^!k:~>
+endstream
+endobj
+325 0 obj
+<<
+/Length 360
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFqYtfs;&-cO`'q7n'XbCch"VeKMd;"kD'.HVfap1a9$]W`qS#pVG,FfbX\ac:0
+NR?`8.JR:0bP]8J[.-,anZ\%u=_pmoI8*Me/?t"BX;odC_sQlS<ZP2LYustIKe9<*
+2s7HCWk49Ec`[l/?,X9djq"$bGiPc6SkGX^c\$a`@5u.D_+7%6YYlAI_]-^*`<ce?
+@V,S#NE-=;QJK#$HX?g0UiFja_IGqo6HB3++]&A&PY:u-=R_g`q)LYb@Im4GJcEtA
+.&0kL;c$VYOLkgKcuWW7)JS\qVXE>=0,K%;GXQG.ED5)`KTN&OD\5[@*:T?$1h:+7
++Xr!rl&b&EHBhB%QQ<3mEr\ss?+B~>
+endstream
+endobj
+326 0 obj
+<<
+/Length 410
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSZ5>Hnd*5M(WL*g2P"F:(PN6fR5o$g&3':h793]^qrVVJ7Ckn,s31gp@]g&euZ
+C]aDhOHaZV?!X[l*R*&=Z0P'V>*BKFe7N%?l/B9eB9g$@]TZhqb%K;TUqAXI89oTq
+@:mqNYclCA2q$Nffa^$?+o5a+Si/'A4X#.")W=t_.,VF!fh"hiFtF9jUNnWXW!sf6
+(<Mt8Oh$FBN+jtP>"*5e&?4n24jk$&(/*t,AK2mo4%2g&&17:Nk@e95Oht'%F))%#
+erIS72+6SM(CS<lVNA<2#hI9<Ep`+"aA"$B(2J\5L$Zm0=ZW<Bm=&FK(9Z,UHad2i
+mR?Tg]7AZJ4FubJfRG#tg^pRC%f"roS8[d1n\GQKQWJ%0FS;WtGK/=#@b@%,^F".F
+Gp5HT!+b*[e,~>
+endstream
+endobj
+327 0 obj
+<<
+/Length 346
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_&Z#51J&-,Ns$qRks$+V-kJI5E&</Dr"(a>eT5+q/mTiEndVsu3`![@faYt9tf
+.W1Z+K_9/ccb>TEc^8*P?`d0iiA$$>d&s"NDYBIW6XlPZ:WNp"&#_:?\+UKRq>M+-
+Ll3;QI%NTq=JNGi0?0A0(JHb]N0o1pUN6ON;FFH_P$#>A(Ue'M**ZlClm2bn+LrV`
+5H+!:&bm.Ec[Nh^3m#I,LPE-6:$ETAd"HB!pahhf=Ycm74g/6$:jN2$m0pX!E?L\!
+8dUeO=4pe92T?0#s4P\;Fp3BR>10m&EAf--WI2a&3G5a8Y9gQlk_e$#-M#+^I5f>L
+)`@l4_0H#2SeVV~>
+endstream
+endobj
+328 0 obj
+<<
+/Length 450
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YQSYti1j&;FIj,*J9V6MpnHVB@1U//=8fJ-6Mr:`('80\a7.+!m!+0gh2cmUEeb
+g+j<jesG%gmsP+Q>H,$1e7GWEXfASTCFMJY]tp=V<Ssb?Wl-n;p@!%RaPoY=)d,;]
+PUpuR\#PZ]o;KAe^Y`RCVZ<>T/90$i<X9-t@4-`LTHeQ7$YThM4iSZ=6KGi,(=CT[
+\&+]G1ro%m67WJJd\sn\hM]g\a^I"1=94=q'Z^Sb7!aD029m&s6o;%o_VH,"/_$:7
+T7CG8&7L;oLL>d!U75URVLV7.5rU,K6U+$:2hlo(U%l*A3oAVANj1[1j;b%kSjn4>
+(2kOeY-9eJ@]'LR":h.`i+Ie\7R2,;:GcSn/_=VHNS(?Ug=,4q3u4[t#ZeA\'nmse
+p)QqS>1%@ge079$RN#lj!OYisKUQ_F8f0&i:Eo6Hq(."#!"R8ImJ~>
+endstream
+endobj
+329 0 obj
+<<
+/Length 339
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y".4`5m+'EDO9%$BDp,Od>4K%![K'2k8i@Aq[N3C&c_6_eaXUN$tiJWZYCnH6fo
+99,qbWKo61J%u9'-du^%EG;TB"^`(UQgbHP2!pNrb9r.-WN!UlYUUdK@4!/NRNY4&
++)bg2`B0Ye56iUf.#(W7;ljWUrP6qobl+?'\f)`^c#E*P7-r]d\T?@e4BRMTF<sE.
+['I*6QWc>l/M1B/9/l%EF6@i2X?B'^dtX`*3nH<]hr/h.l6#tkrS7.\iI=sTSj&KF
+B?JN5o/t#!O/:EK*/m8(@^Tf&b[R'^4O41BH`1Pe1Z[%Cf-26\_-@4d[NrbfJ5<Z`
+!!p)ZYQ~>
+endstream
+endobj
+330 0 obj
+<<
+/Length 283
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSZ4UT%['EI'A6fBU[6JhsR/IL'#W![\ZFRfFskb.-U_2Hj5j9Qb^KZ*YL=2c"5
+OQ:`pq;WdE0Ys?[=VnCYf.$'Z5;7(t$[\EYgPKWF>K@2.Qe3BF4>g%KkOT:SY*e0V
+J)!:D7V9j.=)#JPXVG?`LGU@bOs9-[-)i).L[+)%_COkJn>ai-rM]Uob^`cX,Y0el
+I*.[<eZ=2T:H6YmhbV#Oimmk:Zs,,;Jkmi!A>>7W9<'#lUl&.*lmlZo8DHfm(=@VT
+C$61'$<Y)d!(ueFJ,~>
+endstream
+endobj
+331 0 obj
+<<
+/Length 233
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YjC]aDV1&-1WJ(%*O="gfj\P"hk^Ae9(T!S#L_WO%"0+/P%F0gk2n@^l\YLnb3c
+Hq1^EW@;F]fHD!0*"P'"5n8#qPf4ogEG!]!"JpipLU)GPAX=Mk2fl?i?=S,g*^MGU
+\/8)EaG=@t_MN#.__S<Re[*>tB&1.<mqRGh@l8T_+VQ<!YNgc*=GGA3C*srbb4iX<
+B0Mh)^0gYPd@rjji%L')/2_8&0`[1C+UJ~>
+endstream
+endobj
+332 0 obj
+<<
+/Length 442
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Yi[9hp@,&;=nOEKXYL&a0TN&<-dm8k)Nc@A57_TIsM`F:Cb+UMp@%/-p+kcj"U3
+=j*Q8k_=CPjh3dg[$fb&e(g7C/^Ea)DVe'Tdq33M$bJFBl&:q+=0o#&qIn(-UpkGV
+dd@!uV2+?]I_:0ER-NCO\jhKh5t9`3THAi6!*K,)fFb<7.h$gUNd1Uq#/Gu(j!lYc
+Ph-T&3#6D)Q5>[;<a#KKB<?L$9!O6rQV!QKAm'?dq68GIO?\n7#A,PZV3`b5,[qUd
+Q:sG;ZGKmT\)^TEnbhkQfP-gJmZuWJi\7>P%0)!gkD&Ad//\t=QkeNQEL?Q/gd/T:
+q\]VLr8ccR2tPHNT"O5uSocclc94;aG,(XiFCrT@Kl>PaNA+q!53S&\4'$5pKIK7X
+#`6\p"uUUf9pi6.R>n)fnmmrGlR@/:gf3FPHjp))"128~>
+endstream
+endobj
+333 0 obj
+<<
+/Length 130
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z:bY^"!F[bf$R:?>6`ra.'-d[B.$/5=B;hJ=!$m_K\XYdmoYVD;N4ALCJ5TYK
+:'&WIL0XSH^'Z/TV5[^k/d`"0@#p6Ds+>n$s8Pr:W0$daPKVL?/!(,m!$4]dPQ~>
+endstream
+endobj
+334 0 obj
+<<
+/Length 197
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XW+<%q-&!Fg*`"UcQ/'LT#i/oq*u&-R#JoF)IV%=gie/shbLQ[ZGr\H/&2#>g:N
+h^Q?D_2q=IdoW6=W&0d_dm\fg"PEbSs%a'`rsoAmar#ejAg/)90EsTFN.8>TIkV^(
+i!b&_ir]MG!K;!u`b9lW(ncgP0ZFV?irG>6O+DkS!=InE@;rc'EWpIa"oq9Bp;-~>
+endstream
+endobj
+335 0 obj
+<<
+/Length 415
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YQS]hZL"%"MW+36=f8+asH*UI06:WcWbZ#:,[]!030B"EXHRI?Zo^`t#!TM='G/
+kn%;KKDRP*M\Fh\Q3u?oKr+)mQ##)XI)g9f2[_+=BR=I,cAS#JgsqcV;n9aBhQ&?f
+4l2:>]RHO"O0;WdDoqf45ilMs!'mg`BEUIaWqt5E7;u/F%Y?#8fEOE>H#[BJ-L>;'
+TGJi"%+(r7%9A<gVjOHe`6n59F$e!aG)$B43_0N57VkPrV2&Z==O"(2BR7@P@=__&
+lo_^]:T.t"(PIV/s2Dt)Vi#uETC0oWp5gkDr>^-)`\'AS`%aH"1W*?/*2bD\4DGf]
+r6(J5O`Sr0SMjrsNPK0`.V(pCLs71M4%g%i#p?RjAgUJ([>&Cp,S@uB3fVU9aC_41
+oE+Nb`[C[*!9YG3>Q~>
+endstream
+endobj
+336 0 obj
+<<
+/Length 260
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XW/;D:p$!FcEM"UcQ/'LT#i/dhab&-R#JoF)IV%=gie/shbLQ[ZGrK`ROS#>g:N
+h^Q?D_2q=IdoW6=W&0d_dm\fg!ri6"%qW#`=UYS%4IjCjs8NT@nUQ0.b5)?@#\O$R
+@&Sjd%PZO&=W`0_@4ZjUlN`sQ#A>3<`JhY0a1t4kMh0#%r3g%F'Ucq#iCcQU4FjaL
++k4:-%nT7?cp`UI(tc`.N;m<;Gq]UCB4*F9,(g%,>2i[iY+AmL>^uhT(PNR.~>
+endstream
+endobj
+337 0 obj
+<<
+/Length 371
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_&]hZI!&--*>)'[nr8+=1l,_f?7VFh";1*FEO"&MGk&Bm#k`PS*DiWV)LLgp:K
+do?NnMMLDRXii_K[Ot3(EJ\<HWs[Gp\C9pSeI)9Iq@].Xg9%p+dgKu--m#Ws6#l4V
+T\/+.Tn];U_tUX$B;i"2KH[H>d:1Fl1CNW1J*D>gM@ON65k#m3A/g/r9umn%KF^Kn
+Qs68OjeTMMm$+iE4e9&F1>fj82#m<)e]4o*Z$Q+P$Y.F-RJK8K9$WjT`4U2a>`_mB
+U)V\L6O`sX[psjLHgB@VLO[SKE>J"UnIKnT^JEK%=kQU9[Ba.MBeqd\Elc[GFD%T!
+P?gI9R6:7NN]5P!Cnob7qCkTTiMM>7p`0@Z%rF3~>
+endstream
+endobj
+338 0 obj
+<<
+/Length 437
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VGO0i#YP$q217N&47hOLY@%,@Ii`U]i#A+@3sIJ<Bs:Ff+2&3D,;cAVqlXgG<!N
+$5+d`MZ%CAcSUu+iu3,F]5?SOkO,mhDg&a4o'S,8F&m@@5>SJ+hq@;BD)\o7jcHV<
+pK+N+<HmUihEP@`GO9oG4XL.s"p(*I#U;#YgAr.YL$*Cb15(?RKG25HWeE7,N2<*W
+E_%g7JX")$S<sJ$-4DCtk!JQ(*7KOhEVNs^7&eLR*ge<eM$/7ZK[N@6P?+\]m.H35
+6>VQJ=br=[OL9mdVO4S995+qN^!O\a,#D^6";t+sg7_;,HGn#cc(pjX]#Ml90dIE2
+ir$\Ik["W1L&]LAR/bDd4(?t\[0QD^XnM('1-SL)K[3_daHo5qnth/c1jZdD%;;P\
+Al0?'*qMCp`JAll(:"FQ<U-[flqM+7m.ULH[%3!~>
+endstream
+endobj
+339 0 obj
+<<
+/Length 587
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFt0lG`"'ZP,")?b$<&]>'aN[t<(-37f^`']&car6r?Qm"aVdtTJ%h*ackW.?Yo
+q!gpdMq[Ak%tsG!&$YtumA@SJ(V8.()VqceqJ*'\2"F@!m?[N6?a[KDg<c(En#u:o
+-TBAY\<WP1R`Wh!j#>f8c0dlI]`7gWGILc&X7Ua"$h*=Zrr`0A3q*"mC-'&,4@'EQ
+!Go6h/;$Mj,u=mpZRjE2lYNHmrXE+c@9mI^f4>b91d[]Q,P2k0"@[pLbYYF.:'gG-
+39#+&:_?C2S'WV$5(TbUW"X:3,6jM9W,,f@>m.a/?:(P0&C(?S%#eO7aae=B0H1TV
+,Y_)^T\0?"!3k6'grMaI-,O4i+l!+V'(cS9V*_[#'Z/hn+ZmK4ENJL,Yq[_,.LHuU
+!p0Jg!^gNIS7C3T:bU2K!-JbuKUWh`"r/)PncZ0*ZofL:9U_VHTLOU()!hTYJa.c)
+)>"1n0['sE\3a="%Lf^L+^G$PL]g$f9?D-XTK304Z7OoM:aZ9N?2bKs"idbG(`p!h
+h&-Kr9e\;hP@3o:T8!;hQr1j<B)j*8$!`/S2"9*O(6j#)q'800!';:[Wr~>
+endstream
+endobj
+340 0 obj
+<<
+/Length 334
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSY0i#\A$ij*o*PUTcgjo5&crOnf<r.>7#:,Zr!;qr[";4opENY1_<1G(@L[#g?
+a[a-u8<pn[G&!pp*S&Zf8OKYWY+tju+48W7:ZnZ>D'UI3]*I+$=P].@Z+?/2<nlpr
+C9SVZkkXISLVl,,HXIj%J5mrsUOnGeGn4J:Sp<3![$i>8NB6W00F-.,4jO?VWNk>5
+EV<bB^sTheVH3\mLM22`,iq.ll3'$-Go1$3-urU_q^A3_Y-n#Rf9H1'#L-'+1Og=W
+/,SJAs!.E4lb#e">5(R:XQ6P)!9F9O\X+gLobtJ".nYti=i@3!@eB/71#NLi%KLQD&82~>
+endstream
+endobj
+341 0 obj
+<<
+/Length 300
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X^80lFl_$q4lT#f%`V&22Bk!hub#dMAd:!mQr3ZlM6(BP4q9o20T4NueG1T5oPe
+8Ce&u*^ip(eDI?<-#:'_&q]LpcNaqd/0$RR^A#_-Gl-Q=_pr(FkNWp6Y-tMEJkP\Z
+hd8SigcUJZ6jptk6nLYl9@X00WWUd=JQ.1EeZM<Q<THYbVi3[!Z`6F$@@T'Fl@]H$
+5stsN-gRpiWR-Z!>.`c$k]Somd5h%r,\P":0fo4:aPY3\YUE_K0cQiM,iIhR/5bOf
+BjjKBpi!4&9l@:,Sn#&C5;g+6^B"=&V[mP~>
+endstream
+endobj
+342 0 obj
+<<
+/Length 323
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YjD^J;[#&-hVWl4A&140msS!0X9p#ZIQ$&fHeR_ufua&g3S%8+WM:&Nj[(@a;]<
+O:Xi387Z[grc=D(q..GJ=+!tfIEKftmn.o#3XceZ<*UH11+1?6")V5aDn'+NIOS3[
+Dmj:`;VkaMbOb$_[HHno2kl61!Pa0Rh_G%YN5u\rAdSMM4$aP<OP.O%*e$'S0Jf[9
+5T83td[PT%"Zp7`c[b[93.]Pl3fQqo(&!!AjCdB]Z0)sNDUEsM7iG-dSV#8u-]B3B
+'6Ba@JX\L/M[\@Y]*2[Bg(]A9^nX't&f4VRU^Gf'aYE%SV/(Ar!'oEK_#~>
+endstream
+endobj
+343 0 obj
+<<
+/Length 313
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W"]^J;[#&;Mq(;!F9.K'rjcF]EXn<2e:TQ!iSPJ<9j8/'4RJ;=Xu61ISeQcH-%f
+JS"_bm`tjH]pF`FjN:-J9*k+Lq3Ai5_2Um,f,cqGO"YmZ\U'@Ajm%L5=,4C,nQaUW
+H%5^9k5&+X7uE2Td0fJ57)/dFRcoqT;CcV9C',u_;YpNL:/d96%tnh6&iGIrLcmF0
+m+Bs%\-9"j!Yf!</tft@gTPS,"@`?cr=77Y^eZq:]M>;O7E71.Yi"a((6#+=`<fkX
+O%M+V2;4KJ2,e!n,%J)?eRVZ@gXUb%:>X+5Rd^&-!0HL6L]~>
+endstream
+endobj
+344 0 obj
+<<
+/Length 218
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;ZEQ0abco$jPY)F=:\a&^1FNotduE4fA_%6.!^UW2#!>ZTVKQdN`jU&7_:;\o`!L
+O:V=96_*7iSbBSOM;t/',Ip_D/%Ul)@A.KJ<!>#rFsWQ1Y/jSC.9eQ9alh,a:LV6e
+d\P#+:clJY!#UM7CNFd:2jl;%FXB$Q;X'?XRsrk>DtUE]h_obeo22W^$H+n#N"=!:
+>6@I31_6sjk5_^p>%d~>
+endstream
+endobj
+345 0 obj
+<<
+/Length 408
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.*_+MX"&;I+D:rjrs608?X?0QMEKYXTq%t^Cc$L6#kU?D0rngJd:*d]:sc6QOt
+('MI\ksmLsbl84@2qVSpVrqj^4'[")ZI83QDc*+N"a4N/$1did9lC9m4C[45k*BMg
+g"p)p8iOX.IXZ[XlJWY<!YFn6!14WD9`QYpj_]O13@`m21'Db*FYGm@!]HDL4H1\.
+$K"ZM3sjHu11q[ZU;Ik%n:)M:S*U#,lOc4QO!s<?9)>*?rHR#Y_9:qnr<b425BD"r
+%jB=DVr)0K=;P"lV9UWn$XlgYD<G?6*`2q!i$_QY<Ja)bK60?@qC)"<plNFH+%=3O
+/s./%c[4(^=Ro(uQQAaT6RJXUF-Z\m,pc](bouUbGZH*):Y+oS!u0jOgY<BDlC1((
+kjJNP#fq`h~>
+endstream
+endobj
+346 0 obj
+<<
+/Length 235
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\YmS?5$jPXS%[A11&XjN_p5iV:%]Y+>#Whb]lKFo)>eq6BUYI)9lqiMiU[$d3
+Wu+D&I^18&8dVnr$(?fe-h)pig75N)*=3W2G&.\VCQ(1t-,p>)_Dkms8RSWdF?X"(
+W+X%[aK>NW5k>!U%#j'E5WL[Zedtj^JV/f^^-g#^F1AIULQF$A6"EhpoMpZQ_=\29
+4X,+>hV`m6i/]8$^8A>+I0,pS>iU54=uY,^~>
+endstream
+endobj
+347 0 obj
+<<
+/Length 171
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[="mH)"_(sd"Ubut'LT#i/gHIF!JkNkB;hJ=!$m_K\XYdmoYVE&bdm@/J5TYK
+:'&WIL0XSH^'Z/TV5[^k/dhUtrr<#E;#gP+KDb`k%/aN2JUnghL8b3Q#O)?V-O1XL
+s3JK2M>mVHrult3(`;>]0pepg=!/;e!"YC<hZ~>
+endstream
+endobj
+348 0 obj
+<<
+/Length 310
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YjC]h64.&-q\2=6(4:4Mo>NBG(aD]"k:Q$:1_.%o,b*7I0<8mA&_S;I6URm`p;u
+j]WI`+-Z':a55BF8J@_>/))"gXndV('NZ`"Y%tSJip6Bb]:R3ZZji@_nJ@P(k<#ZR
+m%<A)oD=OEHWba$Ud]Bs_-HuE1JrU]MpH?[/>2I))^$;2aP\M&;ZXoJF<)XVT/.<b
+E6=klO88o=I(pqO6.iq!S<*!f5s:SKBt\=,Xe23kr<.0glVeHDXab!TG]T[s`8$e8
+bt5F+?tr#NAbT[.k00&dA*RO4Yn:8kaq$YMnBV)>b*A.~>
+endstream
+endobj
+349 0 obj
+<<
+/Length 133
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[="mH)"_(tO"Uego'LT#i/gC`HhZ1SPeMC1O2#n92\Qhn$>l*Cd7M]8**^D/,
+IA['X"[anj:LAg=U=*!n:D\`b#Pe<T0OWmi5l?*Gj2;?7%/f=VbLMe,O:*`B!:-^Q~>
+endstream
+endobj
+350 0 obj
+<<
+/Length 293
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]]Yti1j&-h'N1)QQYr<Vp$5jXe-Clqn_aAAj0SL\)9!X*QgnR?s34@7's&O4%2
+MM\08\obHG^H8(T_')LCG82@t>?BXjkFh8^r/;A_>[7SYjdD]HFl$fBk/NgT&+"!j
+?S,O0Z<=cbO09@:mMqriT*(1,+dPu8ODK\,'mc!#@4Pg6V)H^;>n.`46q$\#Nrf!8
+@_XoWZ>=c;[FiXKU.^jf`#HKXaCS(^p:+d]irY$di$.T\!5e)b-.r6Z-PV?P,h-Is
+'#H:Z0\'#G3sL#gkbJ+e!/$,dh>~>
+endstream
+endobj
+351 0 obj
+<<
+/Length 229
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)\<A75L@<4d>;\Oj!6`ra.1G^02!5pbF1K;^Y!#!Da>Y^kqqV_cnAmG0R5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PVkoq#<Qdrr<!_!s:b!gOgAn5TC?q!s8WeR.3GUJJlZk
+nG`OLs8RQcpm_:J?iXp$kPtP_bi"Zi1?sE!*d];fU]19("9WK4Ijfp]K>C4aK7/sb
+B.s=\jp.!P-\fJ!lH'd^"W.5+-k21~>
+endstream
+endobj
+352 0 obj
+<<
+/Length 286
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X^9YmS?%&;IB!&8p_WGV>_t@]EY+.[WNKaTkX4#=[hLdJ>8>KT7(kGY(F?`R-sA
+L"q0gjM,M',FZt%V//h'dNQRcar):]87j[rVB"W-J&4N\Z6MBIAAo]cMTqYh9[oN6
+QeN,&K!]tl?^oG.A-i5rj3EUO/X2MS@A-mMW-Z%-P%?@@EgppCft0&#<O(#W[KXsU
+7:9UC"kJefrPcpar'bSKs2A>f_`R8_?i9iRlef\e&cD,^H/H8q_,l,ApV#TNo\TG]
+`PD2hoaR5p\+gpCZ0rj`~>
+endstream
+endobj
+353 0 obj
+<<
+/Length 310
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YQQ9b%1i&;@/PdSc2eK":ql0P2d(PF.&WPlkE.6!0VObu#HhQ562oFYgsjPur.k
+bLCkreZ[tg=qji/h4[rD9</W5f[I#UMIVO4Tbc`rDK(\FYb5<U_*i#T$t_j60hA1K
+h]::8N/4go($a!O:s6\"a8l&H5`S/GY$_toQ;\B$5WgE5l6GJ4"IRN\Ae_$ePZ4T1
+Z$QF#\G@/34/<%qB?90.^On0D1[iY86Ko(K!VSCL!f@D_C$q=-Pe^SMI5ck_`u,`:
+k3T]a!5D0rWa=ZF,Q\eLEZa<P5pj'J"-+%bj)"eY%BoL~>
+endstream
+endobj
+354 0 obj
+<<
+/Length 217
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YjBYmS?%&-h&#*<N]L2htl1"Z-Z6F;1a,)$HLX!-NB[FD`0PO4$P^!u0``?2FUC
+g]p(D/a"+=A9j^hBB`mpNjdqPVJ)<N(+"%9@I6paaB#6`>bS;2CGMjeSt;"p(&`kr
+Ws0.:<"BEW5d;p%XQUqF>_['F63TP&<\6CKP*<((3W1@8a<G.Z4.5I,#Vtt0RfA'A
+r62+Lom"FL!6@C?a8~>
+endstream
+endobj
+355 0 obj
+<<
+/Length 313
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$#4\g_s&;Gs:OA)uN?nS+"`5UAGnu7H[-<bZp[C":o%@u,1.!l(h$H)2RJ3O`D
+f_:rmH+Gdl8<f<=ie;KF4LP+00ktrpmTeacX.A8?Ko\AU%h^*G2d13B]XsDoS,QIF
+h`dXB^CkokR":*O%$5oV(`1U/F(ISH`i@(T".0:#`4-D*E@34,%u5X.cCb?>FBX?[
+BObVsm9iW/b(,n]=HoZZ'YBhF%:1ECPWDg6JogHV.tpcG4]GHAF!uMumk"H?dmeE8
+R+sgWX4(IB,?//)b^V62Y$P^E?7dK=?rMI/o0%R6!&+#jao~>
+endstream
+endobj
+356 0 obj
+<<
+/Length 234
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR<YmS?%&:i^Q#N:t4K(f>8-:Bp2We))kSU:G)kb.-EI5?;85!m7!V=>1O$;qZV
+Dto&l+Rj$<-mhA-8Qo%JV7jelC4@(!P)pSThD)VEAd65?ZpM%Y'oHfj,Dj:=k^9u&
+B]eC2_tj,rXi"I\o3iZ@hR(*SGRoD8$!Q8,d,F<iT3J-Va^o;I8nbWj8tVtg.nKIp
+C5D^M)%?;^.muQL%"3"A*%hY;n2UId:Lo@~>
+endstream
+endobj
+357 0 obj
+<<
+/Length 237
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\0abc_&-^De(4ed@!ePIo>o29j,7%/_/Hi1<J6H,)g0(6@?s@l;*5OC!a>g5t
+YY[H4c1%+H9_/obI59=&P\;fSg1]9:[Bc%)+k+o'a]S!cFf8>O/ZP4,W7&YP1b(G^
+j5I@62^.lLEs3cmLq/$X;$o9!E'Ws6=55taImYRP26Jeh!PZD*I%b:B9.hD@L7o$$
+k0F'+%?pl.5kG%h&3j#WVZ^V%3aCZm!1of)=o~>
+endstream
+endobj
+358 0 obj
+<<
+/Length 313
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W#HYtDr"&-h'T.i,!RH\J]q!h*>Vb;DWE<%s$!eNJFd=t&*2m^O(V]h'7gjVB$"
+bcW!>#WD:jr5JTXb0beJ\o:WNBN`]g_`+Yh=Y=Aj;K:qHPO\:&lNZqi<@-dO&n/M'
+\0cuVF&*nHT.ejP&--8-!WI-A_ot3c0G?N3\PnRKRCJTKH4WB,XB1D8ng"][VUd+b
+dAp<Um);i(eVj`Q;Hq[j0=&_?MYu,+;WRW??Bmj4+D@<Ba@*MR!Oc/'.ac/ENR!/$
+bj-Y[-\1p"%)@_Y,Ce@j;L=TgA?"ET7m2d>%6ie'!$cVHGl~>
+endstream
+endobj
+359 0 obj
+<<
+/Length 406
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSY_+MX"&-h&A4TpA`2q[0pZs2f>4U"jiHP#i1"0<P,.!fdS^0(,(nd%8L:cclq
+Jd]1sUeLTIJWN+Fgt9$:m:Bjug2:[&>3QRRX=\pkCKk.Ge>(ph?#NqQ^=[&"b6MeH
+Er0ro.p]TEp?V>I9t,<^!)*p]AublWJHCtW.pP=_p>j?B*h-nb-dE;oEZk*mWmI:r
+MtZ3dMeeAa83O7k;]V%[f:@./#Nuqroj7!N$Si`\PLuRdSrYf$ML+V,bd7GX']NSB
+ac!Zr9lr?uKs!'g3X6u^Nm%,13&tUVEM&:+P2gS]"8^f27s;mlfu)4Aa,l9i:TkVn
+OK@[*K/e\Y5?q$@kXhk=9q5AqN&&X6]/X4*aYq7'WH4ie-1f*>HZjUNR2SHM\,'8-
+$ii9!X6o~>
+endstream
+endobj
+360 0 obj
+<<
+/Length 347
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:e0i#\A%#/%K<:\H^,Su!>%oLt'4[>_D&kj8F(m3ZB0Xogg8*LUHG,Skdf,\7F
+Ock)`jA4'Nh>#^mGd]R1lI*F)Gf7&PF"PGg7H;^0?=#j8hdQ3;gD6gpI_ok"FR'mI
+\juenq>H?0SK@i()BbeRJ-MSY&5hM"/f7(ABeDu["&4eaAf-/PUY%@R>TS0g"9n`0
+&EK'+$sD:l.23u):XfWI0L6]nAq42r!MI2hUqKJsAi,>5+%GiUK^Hla'pRi888#.b
+Q3pPDV5\*?`lX2jN5=#KT2tWX3Uk*H#9LG<+?kFS['&NNWg4c-/O?C68d0bFR/eA"
+!dNV]1]@jaB]);k~>
+endstream
+endobj
+361 0 obj
+<<
+/Length 387
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W#HYti1j&-h&[)'X@rg<G'I84,bM<(&2YOT>b8*WR#p5d3/LqI8DXnd$*h6oj[_
+:2(sb90U>'r;XJT[7e-;VrsJm$[].ac`)4hGt+i->827'QLZANT3g'F;TY]Y1R6bD
+Sk:p8=#O&MF_<qq5@7B4D#ln3&+H1s0d8Z2&<RDCF=6-NE(<RfSck5%Zu!t;30G;_
+fb+OqB+8Vdp>j$"V:^nT($KD;-+Qj1k_h:!Mn"KpZ=BlTh@!TK7k,.0>Ajb5>$QE$
+=;u8=*FMa%i#Mj`@hA]jePG8I-CW]/F#uOo2h+qaF-CaVB+dRls!_M/NKL2"/Q8A-
+7DW(G-abo:-.ZdeF%0W-dRhM\?IseAWWQs"5\M*kTl)@QTY:X2"UrN!~>
+endstream
+endobj
+362 0 obj
+<<
+/Length 300
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTu0hTAL'ZT[PUf_ld*[,S*9nH6p.^1Ci6I<jWW253BouthC:$)^1[ugQ9msX#H
+8cCD"r-7;":OO/K]tX(12X%'!qp]\"]H#?gDkGVl4j;WnUiEToK,nZMGe-V%G4T5?
+rq^olq(>\;#>@<W7^99(n1-SjA:rT>)Uo(CZ:3"t199cG^s[NYZcL'qr5(%H7,3YV
+*k*\<!F^NpgmU>5;p5:pciPfG6<Gc$=ufZ[oseRQX6-W9/W1j=em_1fCcsLSiEV(X
+8Q[>HlR62DS$5SB+*aBokl%U/qEFu5RH\2~>
+endstream
+endobj
+363 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+13 0 obj
+<<
+/Name /T9
+/Type /Font
+/Subtype /Type3
+/Resources 363 0 R
+/FontBBox [-5 -23 90 68]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 11
+/LastChar 124
+/Encoding 364 0 R
+/CharProcs 365 0 R
+/Widths [53 51 51 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 25 35 35 0 
+71 25 30 25 45 45 45 45 45 45 45 45 45 45 45 25 
+25 0 71 0 0 0 68 64 66 69 62 59 71 68 33 0 
+71 57 83 68 71 62 0 67 51 66 68 68 93 68 68 0 
+25 0 25 0 0 0 45 51 40 51 40 28 45 51 26 28 
+48 26 76 51 45 51 48 36 36 35 51 48 66 48 48 40 
+45 91 ]
+>>
+endobj
+364 0 obj
+<<
+/Type /Encoding
+/Differences [11/#230B /#230C /#230D 39/' /#2328 /#2329 43/+ /, /- /. /#232F /0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /: 
+/; 61/= 65/A /B /C /D /E /F /G /H /I 75/K /L /M /N /O /P 82/R /S /T /U /V /W /X /Y 91/#235B 93/#235D 97/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 
+/#237B /| ]
+>>
+endobj
+365 0 obj
+<<
+/#230B 366 0 R
+/#230C 367 0 R
+/#230D 368 0 R
+/' 369 0 R
+/#2328 370 0 R
+/#2329 371 0 R
+/+ 372 0 R
+/, 373 0 R
+/- 374 0 R
+/. 375 0 R
+/#232F 376 0 R
+/0 377 0 R
+/1 378 0 R
+/2 379 0 R
+/3 380 0 R
+/4 381 0 R
+/5 382 0 R
+/6 383 0 R
+/7 384 0 R
+/8 385 0 R
+/9 386 0 R
+/: 387 0 R
+/; 388 0 R
+/= 389 0 R
+/A 390 0 R
+/B 391 0 R
+/C 392 0 R
+/D 393 0 R
+/E 394 0 R
+/F 395 0 R
+/G 396 0 R
+/H 397 0 R
+/I 398 0 R
+/K 399 0 R
+/L 400 0 R
+/M 401 0 R
+/N 402 0 R
+/O 403 0 R
+/P 404 0 R
+/R 405 0 R
+/S 406 0 R
+/T 407 0 R
+/U 408 0 R
+/V 409 0 R
+/W 410 0 R
+/X 411 0 R
+/Y 412 0 R
+/#235B 413 0 R
+/#235D 414 0 R
+/a 415 0 R
+/b 416 0 R
+/c 417 0 R
+/d 418 0 R
+/e 419 0 R
+/f 420 0 R
+/g 421 0 R
+/h 422 0 R
+/i 423 0 R
+/j 424 0 R
+/k 425 0 R
+/l 426 0 R
+/m 427 0 R
+/n 428 0 R
+/o 429 0 R
+/p 430 0 R
+/q 431 0 R
+/r 432 0 R
+/s 433 0 R
+/t 434 0 R
+/u 435 0 R
+/v 436 0 R
+/w 437 0 R
+/x 438 0 R
+/y 439 0 R
+/z 440 0 R
+/#237B 441 0 R
+/| 442 0 R
+>>
+endobj
+366 0 obj
+<<
+/Length 237
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR<YmS?%&-h'V%`0fGK\d)M)mn1u:_i=>ki;iEUP#:^nn@Pfl5M]Dp%M@'d9R/c
+540%9E61V5M:'DB1)\9ln;6a'o.6\LBOm4h[QAM0F1RXLi,kqgS6"sD(f'C^>gCq'
+f5gsr_BT*.:uW_MTc`*u*5TZ:GfF]ZZf)B?AC6VnQ)_;F=k1497b47H2kUD;Fpkl'
+8DURYrp'H3<BgRo%#uMRk4'lRC>SGq!!(W%k5~>
+endstream
+endobj
+367 0 obj
+<<
+/Length 214
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q,K@1s"P1D>HV6`ra.'6>;R!5pbE1K;^Y!#!Da>Y^kqqV_c.k$7a(5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PVnhs"XEVJd2_X5dK>j5>Zn+J,B9G5PY7Crr<"Nr;VC7
+8c/NQ70i*D8fJo6Ig!k!-)'N^R/B_\g$kU7"AhXB/IYH56]2(-StWlLJb]9J,;RC&
+lH'd^"W.4j`uSC~>
+endstream
+endobj
+368 0 obj
+<<
+/Length 196
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q,K@1s"P1D>HV6`ra.'6>;R!5pbE1K;^Y!#!Da>Y^kqqV_c.k$7a(5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PVnhs"W%'s8W*"!sap(ps/pS?jDfYq#:B:&+Uk6JN\fO
+:_+`h+QS"X#u\kNAl+b'!!*ds(:MSR"9fT/I00TC!<u#(P0;C>/!(,m!+X_!1&~>
+endstream
+endobj
+369 0 obj
+<<
+/Length 172
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'="lO40XOY11KI%$j=94G1^".(-l?)8R-PV>(n9_l.O=1t3I,Z0LFX2[
+Ep7oNV7?/g!h:!U*)BpqP+pB(/l*:;L]8=Y)<r++JP[Bj)rr*drssbQs6W,ATDcP$
+5P9O*s7lWas5X.*ru_8jr]caM-W_E,?i]fm1Qh~>
+endstream
+endobj
+370 0 obj
+<<
+/Length 259
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wju0abc_&4Hs7@2b2g\UZ#0;+q^\$>q##jT3lZ6I@hbMNhGhhuRkPG_;506GBct
+"@4Qka#:iZr&;M*47$ro.97LN-bONb8BPB44CR0:UAWaJ"e+ce.u3JFeAr,#;g-:6
+90St#HdX\S;W%a]W-jgQM@_f;";9Vn`'>.&Tb8o@22,tiL!Ynf0\kPVlh-/AkkmmA
+CKg;6Y1]D#D4]O$'/jPN[Y,G#,8/U+8M)?Z+tLe[0)F]9.Es`PkqrHtJ**g~>
+endstream
+endobj
+371 0 obj
+<<
+/Length 254
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wju0abc_&4K6#RN*Jl!DTj4d:sgSQpT0B"/r&MU3-g$P[5e>\V@p.UeDBucL*06
+G-[0G5.gFcoOA@kk,qU`@NGr''@ECNaQAF,l:!%aHbH1"V-q7lUgPMe"j(5t&I%Eh
+O,)2MdKs^)#;/7Jgjog2JL3aZd:tdk4?Pmm!',#,>V-+uF(D3iqLq%Lr,5cTqhq)M
+%/Md*9c"9%;nNR1D/SGu;afoXc7Un1.pKQkojnH8$C[j!Uuq_\&`Ar~>
+endstream
+endobj
+372 0 obj
+<<
+/Length 143
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)\<%q-&<R<U)0Jc]_2-*7&j=94G1Je';+D%Qc#a>E(agkYOSm;-N5X@#N%l!5^
+i2g>-V=3ZL:f:8]b2ql^nGiOgTDp(m_f2Cj(r/BX68@uIBUJQ[]8q\'3*s.#4h1X)
+!!<4Id*15~>
+endstream
+endobj
+373 0 obj
+<<
+/Length 167
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'=3rh3:]MX@KbQnW67tVmTW!EnObJCtSfpW;81*M?3I,Z0LFX2[Ep7oN
+jgarR!h:!U*)BpqP+pB(/l*:;L]8=Y)<r++JP[Bj)rr*drssbQs6W,ATDcP$5P9O*
+s7lWas5X.*ru_8jr]caM-W_E,?iV:O1Z&~>
+endstream
+endobj
+374 0 obj
+<<
+/Length 115
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[:bY^"<%p.10JZKZ10-q#j=93ldNDsS"[bGGPaS,>6?4]FP:)]G3)BpJ^5%:X
+QbHCKZ[s?e^8J/$8Ps1OQ`#`C!s9bdic=_Q$KM6s!.PFh"9~>
+endstream
+endobj
+375 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'#@^&A"[`BG'LT#i/g(UT5g!?X:dN\580mA=3I,Z0LB@^joKC!c;h23+
++d]p@Y<kfXBe#IIMo*C3%J:2'%/(5<@R'e:jm'r&a9<C\2maFC~>
+endstream
+endobj
+376 0 obj
+<<
+/Length 196
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<A76'<R<TY<\Us]0XFSH1#shF1,]/j)CS]+.[]K=Jg>nXE\<]B-^T:lK!>WK
+^'@Jp9A_26=TM'=qC7^DQ)8SI\g[LVs8QFhOSE;r,^pjAOOsd@!Q>![^kmghiZOaN
+$mM/!6p$34LD0S..hI@ra>*mLf38%*Lu5!"[ummbs3Co^>csZ'JR!^+!;ss57f~>
+endstream
+endobj
+377 0 obj
+<<
+/Length 242
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_#0b/e#&-Ymi"j&S@J[p:`lQW#I5u"./dE2QiV1hBS9XkqrKHj;k&AH%[BM9gK
+2Qta^B)W;Vm'G[8S-.$0k*)YmR7KMi%LnnqQC2^):m-u&Y_bnfA4.p#/Qn90[sYqR
+cBPIKm2/)GMLhLAJK,0\j_.r4d!-s9a/Cad-,aALgA=\PD@b+(:VdoZ,Y\3]i:='E
+4+;5&CmJ6kB/[<f^p_Yb@N2UYFfj%PV*2Ks!2SW7nG~>
+endstream
+endobj
+378 0 obj
+<<
+/Length 157
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<A77R!+KGZ"Z&N"'LT#i/gF"3hZ1U&cneYJ2#n92\Qhn$>l*Cd7[@<U*^D/,
+IA['X"X)pkX&)\nR`aaVU@A2TrVunIJG9?\560[Iqu8ktm/JklE.\%<p'4FaTo9rc
+Jc9(cLLDf::Tcr8^]7U2^Ba~>
+endstream
+endobj
+379 0 obj
+<<
+/Length 308
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH80hTAL(^8h0MhSq!,KsD#9u=oWJQ9N#JlWpX/M.[=PJq"S]i&Ao1?&H=2H,8k
+h[>$<=Ni_JbkpQFVE><5-oLQl(#cm2-X0YWccbmT#cjKN4kcd<lo(pqb:\'Ng#i,^
+E,)PmbOb%P2<P#)(dROn^c@Hq)&Gh$2[<#Hpu!bg8UCHKHM9eqpVP1^LeChL6`8BS
+j@c^Wo]l0D%:(IY"Lo<Z2CEh*\0+A>8HjaP;))AbCrMl?Cf5(K/1EJ*(4eX*`Bihn
+@t%n2O,WnQQlfGtUZ3`GoV*S<qhn`:G%9D3!8NLaaT~>
+endstream
+endobj
+380 0 obj
+<<
+/Length 314
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ul=0i#YP$q4g:73jfP_Y=1o%EYK,["(OO,cE[&:f;h0HI?f8OgmsU#(pTdM"7f`
+#8!Vs-e[DVp:/rLL0Hi%j*&=GbmuZp;q"<9_M6go=u=(o'C?"(m^VM[\e9k"h9@t3
+<"7HlIsHI<iIVZn!5*;:&M+\Z(Pls3,@F[5"#)\?guL.Mhdc#drB^6,S.n7^`,QJY
+QiprU?cK0'AIoET+D?Co2ed_5>sX0HHl&]hCo-]B7Y2EP?^(kh$EoO[HtiG,YXcdD
+m&3s')90??%Tn\F?sY#MEh^)M@Vh"J\'iObEhHY5)?>nuj^J~>
+endstream
+endobj
+381 0 obj
+<<
+/Length 229
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk_0abc_&-^G5c6Y4^cm28k%7CB/&@D!.C2'AT*BZX5A<h4,:9`A=#eS@e1LTMW
+s1pHEbiVi!fgp/$1W,!,cBP5cQD^-]4ALV/M+UF_Nq8KuQ&I+?2fm7mZ"q'[DF^u?
+%O!f'G_1]k=%3h+oUs+[%30&H#1Q6rpgTo"KJ!ZmcmfL'Po(3e#CQbp:^7tbJJL(7
+%:TnIf(U89iZgk".($@gV9].jo)G*~>
+endstream
+endobj
+382 0 obj
+<<
+/Length 294
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk`0i#VO&-^F?>c]bVNo7GJ36&t?V#V,\,)(mV!$t&XW&L\Rk"8)W>f5@4'$WnO
+r%gP@84YQo:YMAern/_RFf)",?"c7I.bD^G<`2n?Bu`Q`oA"*#_m@Q+amQR8,eLII
+AFnoJk)qS0I9F<K8TV!=?pG.a&3V@rcCIL^-W<nV(l?Y;#4R,^M:&qcpbnq(qpC!n
+=CdCCB5-&N"rjZPf&,$8=>K_[9Rlg]RhNVWIul]TQ&n.9hN8=<^6;?#A,EKIoO6f[
+K?)mf`^QPCr.>78VNEr#%KOJbqRu~>
+endstream
+endobj
+383 0 obj
+<<
+/Length 300
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`@5>K*M'F&NO%$f]/,NN,1dZBR@;?9&f"ABf.0I!n1,W;PZF)U%_ABYVXj,7UT
+8>s_Xo!A;o\A$>#ep;YFoj!taT1`<[eM,']V=e!51U;Cn74Z?@<fIg&4Ha1DE2fZJ
+m@Cu+ICr*tV*N6*Ql.U3/^V,$+UfFHM%-1HL>[52FDacS1/.=#Jg^(M#B0#:J*HkA
+-fia$R+7;9/9_llL'>da9,Th-U^:rZT-&mb00H!-O7"D>0dTB/4i&ES_Z\<*3dq9[
+iQrI(EP[AC,Hrin/;94+\SgM+^'4QlE7GO~>
+endstream
+endobj
+384 0 obj
+<<
+/Length 253
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSV^C#R#'ErHL6+Di6i-g/So+,_j($#qUe,rZ[6W%njK;5Uq3:n+]0AtIoh7b*_
+\-.5tDn(RDpcP0cp3AW0cfJQY>DE^LL?`Gni3>Le<2S=7.8IrfZQ#&b<tSU*El&;h
+ab!=/o8\t_haP3[j:.QT%Jo;?('Br'aP4p,?BO5m!MZO3'WJkM'HkA*"q3d*7"VG3
+$4td]l6n]2TGc-]h@5j!om-81)pFW=-i)YadJ*5h95$bd!<=+/!qQ~>
+endstream
+endobj
+385 0 obj
+<<
+/Length 333
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UT50i#Y@&4L5s,*IZ@,M3f_Ce.*4B`X&)85O:+TVMQRm6rJt>1oC4)l-/9q=D9#
++gu[EGl7U>RJ+M#D/2qnD7d5^D4bS9Wg\s//0!?8ea*m/05At:lG5BLWc$Hee`Q;J
+euJ"RmJGYYZg+_F@K@U-#DUn33gE5?"/<[SZU_fa"dAu_L"c_$0ucG&rYlji%"]"Y
+#,.^I[%d.;IYV'r7[+R=,^Hm*@uPHLi]'4t/k]S""d7`F&5<^^;a'q)/l7q5D%28]
+k*&+f:oK4R;],NZ*J8^:XG@6t&=<#4D]'%S+)[a>3>JgC+jJ?8o$u64YO9s8!0"SSAc~>
+endstream
+endobj
+386 0 obj
+<<
+/Length 301
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH70i#Y@&-^EK.4e1L8'"p8Z6:BnV$/,B+@/GS`)9L;>&$.Y@Qo[[6-9m=5%Esa
++T]iolkt0JgIp3j.q][HDPX=E=48*GSK@()OnQH=Re$AKgRbE8Bf`83[7&R=r^pq*
+qE$_(hd<=s(<cr4Qmop`JRW4BAhhZ?^f9:q@u166_C#D:idt+A@TT;K<m(I#^[NVf
+&(6C]BeGGQrCb-D6[7`^(hS5+$tEhd4I2@:d3RW5p"qaJ]?qY:G_?_*b#0LDG&$a/
+FOXsG*`M684YUM/Y[lng)Vt&X5[OTniBYso~>
+endstream
+endobj
+387 0 obj
+<<
+/Length 130
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'#@^&A"_12Z'LT#i/jf^E&-R$uoaDRW%=gie/shbLQ[ZGrT`LLo#>g:N
+h^Q?D_2q=IdoW6=W&0d_dm`6Ss+^B)H3S^%"L0'J-OsP5alVg0(!$Oq!;:8"HN~>
+endstream
+endobj
+388 0 obj
+<<
+/Length 183
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'=3rh3:bX_-0XaqO1#shF1,Mf-5uVh.F$2mP,`k^Fj`9qQdLTD51uQgV
+!6T<G3s@So(inkfqC7^DQ)8SI\gT]=hb`3,cX797+SN_Q_uZOVrs\Q/#efpBmJfQ4
+5Pos'+S_l6ci5*eJ,]KCs7?92s,[1E%tn2jSm6hOJ,oY\2Ik,~>
+endstream
+endobj
+389 0 obj
+<<
+/Length 136
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)\<%q-&<A67-0Jc]_2Gm""j=94G1Je';,9m@j4[TB?6Tn(rjBO;b:G2Tb"Z$65
+I1MtbQbHCKZ[s?e^8J/$8Ps1OQ`#a.!s9C]6RW.f(_%/Y:M2r64^>.]>_-.1!<?PYK!#~>
+endstream
+endobj
+390 0 obj
+<<
+/Length 303
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V000hTA\&B=7&'S0uHg1;n08Q^CW+TtgL;[?QP!4B2d79d*hV,n"+lnotn+Ef2#
+52YG+OHk*QpWJXBJ&X&dQ\BqERCI<`.X94@n8kbmij=f2gg?*q]W*r<&6Egoj$.Ol
+]"8Y@<4DG0H$e]=8c\JhVlO[hd^D_a[tu]U_;do'AJDd:FEg#*m6RVaf[c?QBM-Gg
+g=5[,?"04rNt',BK*IB)1jAG(n5*VbX4sM>SQ]e]VVo/FC8nb2K(j^;CjP8]B7?dN
+:kPP$eCMY'oNt;qU;XfFr*R1@pn%Ki!0J\0\,~>
+endstream
+endobj
+391 0 obj
+<<
+/Length 276
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSY4V!&t'F4,j%O>uO#eUNnTU**UTI)F]ki;cod6XN`*0$_<"@`U4o?l-B-H*hL
+oLH[r:"'9c39O'h0qI8LJNG:!mC7)[V[6+-Y0JuIEemJh'LY#(Jg`^^0nCb1j7DfP
+6G>b%72#9L_@TPa^U6j:'"+=.',ok]SoU[,_BJB`_&o?llho`n[sOG"n2td'c-f4D
+c,gWujR?[cF_>3]FP`)JDHn-bQC>h4q\M9Jbi7Kf$AR.H3a!s?r;`F7%VZ1X7'Oqp
+#bM+tVQ;rU~>
+endstream
+endobj
+392 0 obj
+<<
+/Length 349
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X^9YtDr"&;GD631)%ROElC5(NIn.:'FQ%>58/5H%k8.\\l;4=%]^d2(nY*8J`Q2
+GBPlr!F)&lfU:EBG5fT=?ErPP$"kd6:AI)M7rh@VEm<5WVim8(DF<`AP$<*iP"SAD
+ZG&N_P`k$`T:`P&<1Gap.`)uU(lJl;N@>eglf/m;,o/?B$bYiR07_':NMO^kMLjVn
+Qc&!_:a'kS*Mjg]6U6.^Z1kF*XeMD+Lch+4eV*]6]%s""4^e6iPB:JkH/!'DrGFQ`
+iA1o9K.uqEYi$`Cnf$k?;mR%7F^qM$a'<I%EjVRlQYQ=^SOJOB%d7q\1Kg"ClX3]5
+Y7YkRcjbC6!:c(emf~>
+endstream
+endobj
+393 0 obj
+<<
+/Length 262
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_$0b/dh'F*J.#*QH7"Ps<h7?Sum9i)KbR-<T3eBpRW1E;CLE!/Z96>\;mW&h.R
+;ne>?V>Ym(7tHAbZ9UFf@h'<:!o:)Q`AGVlYckq^8e$0/;?1(Y-/dm.JN7\__;"X3
+!kh!6T@b"@ACY("9[Ar;'>%(BVMi*A%FT'WpQ5o^hIkj8@W,%3?FNdFjfM,IgEmkR
+qBnf4s6KS)pS7Vk0Gfmml]Nqtb-rD^Y#Wi,l\Tq7pR$]K\t3?,@0`t:!5]dhUA~>
+endstream
+endobj
+394 0 obj
+<<
+/Length 248
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X;D:p$#%CM("Z%BW'LT#i/lOPKhZ1SPeh^:P2#n92\Qhn$>l*CdVIj*0*^D/,
+IA['X"[anj:LAg=U=*!n:DX0=0T\f$r\<(*s2Q8^^S1Z,rs',#"$`1LK0oNh;#ddu
+rHP:$+R1[fl9>o((kl^Z:s<>4&"$g6^d:?K?n,U]:^qc17fC+lI>#*K+8$134[u+T
+UJT2`'K[QC+k.S>o`IND@#%,M4!Zl^;(4,!:Tcr8^]6D)3U6~>
+endstream
+endobj
+395 0 obj
+<<
+/Length 215
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+0<%q-&#%CLE"Z%BW'LT#i/lP+[hZ1SPeh^:P2#n92\Qhn$>l*CdVM8@P*^D/,
+IA['X"X(k7=.uFg1mQ857=bIJl;=O1%/0`$0\$,@W;dCF+R4M@R/-fVI\9MeYYkGi
+;#fX>W8lO0s-QbI$H3LPr^!J)@#BL9$O)fJWJ'P(1CU=4=K2>mT`-[eK.(,4n7,:"
+Y+AmL>^uhT]Ji<r~>
+endstream
+endobj
+396 0 obj
+<<
+/Length 344
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_$4\EXX'F4+6;_5RnNj.sRRRGA%#$(n+#[2KRh9nX;3e8lq<\P>HlidT0;M714
+1UASTfLhP/MDlXGj!*ZF$U-R\>Hg9RVjq)7B'_`t\N%hG_sd,`2AN&!Cbn\%&>F8f
+GKDkAeLePL^2L!^@M*>+ndS'Ra<(%IeK&Ib.sFh3ADjCT5-Td,a=$?+=KjAG*,KB.
+TW5od8P(aiP7GXHIZ'!lf6CS?-dG-W@.u17qnp*(9?Xk:iu^^F9XE73iKBQ=MJ\]K
+BYQ7N5BAfaUSFFRERr`OT0pGDZ[^'^06W+2IDHL#].h9/<cP9p3R#$mF'#WRO<Rt3
+FAG+'!1=:^_>~>
+endstream
+endobj
+397 0 obj
+<<
+/Length 162
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+.:bY^"#%BA%"Z%BW'LT#i/i,j;hZ1SPeh^:P2#n92\Qhn$>l*CdAqjRe*^D/,
+IA['X"X(k7=.uFg1mQ857=g#@_>XH;"$8RBO$WdFrr^LFs#8I-s8RY"#h)$\0jpa]
+g0M(Z@I](&?Fa<(\H9;A!s$RQ=]>~>
+endstream
+endobj
+398 0 obj
+<<
+/Length 130
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<\R?(!b,XA"Z%BW'LT#i/gC`H+3ZUj1K;^Y!#!Da>Y^kqqV_cN(0p\W5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(Bk!I#(@Eg%n-F.fFLadnfEs$\Qh;.!kA:5!6HOpq#~>
+endstream
+endobj
+399 0 obj
+<<
+/Length 333
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UU!]h64.&-1WK;?WkRDifAJ:#[0R]>0th.0QcS&%**N'Wr"RE%dN(P<;1S'M$06
++,`"<Hn:bTSXinbY&qkVen\>o]&sFXZ!N-,aiid7jj)'=H$[G(MoDHl='474/M&gS
+>?>7\hRUsnY8;#Y*<7qW+o1R83RJ*Qq2T,lOIDWKfr/DY%\t/jK:/`\VOhgn_c[I^
+3Li7$#;]@+4=K1)WDgi,*R*C6^&8K,c^Eqk^.Q?B?@=me`8(j]ek?CGY)L$CR@=ZY
+<r\9#Ncr_tM3S2<rX^RbYho6?XfoF[M5@t$/16J?!e5AO[moKcnjMJ3M\#SE!;d=:W;~>
+endstream
+endobj
+400 0 obj
+<<
+/Length 186
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z="mH)#%CLU"Z%BW'LT#i/e^l#hZ1SPeh^:P2#n92\Qhn$>l*Cd-C.p5*^D/,
+IA['X"[anj:LAg=U=*!n:DX0="pXf$s8SilrtshsK0Vg&8>H16';U(BWW0K-&(mfc
+.+A8'eGu9[^skS<0_L&1(]j@1%krU0K7O&oic=_Q$KM6s!'72h`r~>
+endstream
+endobj
+401 0 obj
+<<
+/Length 319
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`Bbt>l=&-q\RKeCRq^-Ulb1l6oS:P#NR%YC;K!:!G.U?BI!%q8lpi1[=dkR4c,
+4bOhg@m/m_ZS6lX_sUs!h2=:IA1P3dpmdp"I)@4q5.'_T/>CTiipd0g)$W`+@LR-c
+$\QFs'h&sMGP&WGGfK*=!)f+_Ji=qW^/^l&rZo&JXA0c3P-\uAQG08kqUM:a7&9Qo
+J`tIZ(f6VVn!pCgr,"saTk/VdUKXooSMF-HF/O9"R_('E0VU>[oi.dB&afPAJGc1L
+f2k+.7q<b2M<,c3;ZDp7nn00VNCq.iMLW,;qhP$bRg^D.G6"3U_,1~>
+endstream
+endobj
+402 0 obj
+<<
+/Length 306
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UU!0i#Y@&-^F;;HRu",K(CK,V67b+tXq"!XU=d!*`?OG&(>\+EF:uAWMp.7?l-:
+PCcA75E.5mOo3+VYPaDV\G"n(^X`%qL77:?)0_FT^SppRICK+)Q7kGO[X@!\>OJ,$
+4V-qT5CT16[_;9#?N?33C0$6<,!-DK*AHZX!FSqii&_a)1@6`Oh%KYCfSFsL4ZdX;
+g+aDA9KSFD%T`.P,R5iF6'?kc]HG>48m[V??u9_u^<iIB3#M%MMc6LD8H_%j>jXJQ
+?\DkJkY`^o>cMIWW=6++'`qT$f_a5`gV3ahmC./?~>
+endstream
+endobj
+403 0 obj
+<<
+/Length 321
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X^:4`5m;&;<CaQDWUHbQVf*$L8>H5>imR,ukG:UeG4?Y$'Y@UMp?.$KUa&/@,LW
+b(/D;o*0A_Dmq#.=Q0)_9nh^I^IgJ:.?I>8YhG=:F19I;fJSb?TID"5E>%?E[lp%=
+2m7Hd?b`9p+;*:cp_]c.f[jEP][=g;4eZT/E_=7ZK.C,>,N;2,pt<qrm!J3<'u*NA
+JOu5JM-*^e.BaHip7?+S6eSp>XI&QHgW\6mmM@+ooY26odlIEcEpiFH$P)0Oo3pc0
+I`9.48c286YKeU1e'rTd6$(GD1cN\,'aL-qF4T.F5(I,Fn*h.o^L<*\~>
+endstream
+endobj
+404 0 obj
+<<
+/Length 222
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X;D:p$#%CLe"Z%BW'LT#i/lN>=!5pbG1K;^Y!#!Da>Y^kqqV_dY`a&?]5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(Bk!c@/p6K6o!1Y./EoC)!q8E!/`\as8TnDVZ&<%WW*A<
+$A_!t!IG(uO%_^p8"nSWUej`N[/k"oe.E,1%YQn;!'cPHHGpq!!N!R]LCWtf(^^5Y
+Z!rb[EOgC9"`aVJ!%\[P'E~>
+endstream
+endobj
+405 0 obj
+<<
+/Length 315
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wka]l(\@&--+5%$>Gt,PYRF6:b\-85LQe+OR/!cn]bE_/-kP?R]2d,?8*DCltZD
+[Gsp1ciL*engWao]<h/MVc_l%L0C@DiH#KUd"N!*;;Ye:ao.b04MAP)K'X(l!SQ1&
+6+5Du0o)jai:1d?6$87*O-5<N#qHFHo223/^`$ruZq[94'ID.BU:)%FX"39rjo&4c
+jY=[N>`[o+gQ_$e5/K(\Z-T*01bSbHWnF8.Ie(3R%aY%;9nrK?HhjGHV7C#[@F)]b
++4ZeJkM:h^Zg+<4elkP4oW>Go?UKb$/IJ72Yc?U^^'=Z(2Jqj~>
+endstream
+endobj
+406 0 obj
+<<
+/Length 330
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um'_+MX"&-h&q!Z'p]8'&>n[[";Q^oCcQJt@>ih4k3DcY;X%Fm4eup&te0H3bO(
+\u^f\i+'hRR6P7X)3o;h9gqWR6*E;_A!)nVWhT&6Q_*^;L>*WqB.>Z1n"ka&p@3lX
+9^;r[r:nuSI7l[AroOg0JK(i2@U_)\bAB1b*mGCD11QD54``H,k/F^OI&%E:o7u;K
+7Q@Kb022usY;i4O'TgQOUms]m)8L7q0Y@D,-,IbBE6"!9A1@1`UN7bnei?T1'S[?H
+RWG?5Z2`K)-ee5LqM`g7'$7L+Os+#Ri%>F6hDV&<G(^;dNT0V,GZWo=rX8eZmcL/~>
+endstream
+endobj
+407 0 obj
+<<
+/Length 198
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X;_V$%#%BA5"Z&N"'LT#i/lPCchZ1SPeh^:P2#n92\Qhn$>l*CdVNtK`*^D/,
+IA['X"X)pkX&)\nR`aaVU2YV`%-fQ\rr3Gus+#4irr_up&(EQ9#LO(K)o;.Wqdq84
+%]986d/@AK+$j'O9`LG,7/r%hs$pc3\j7B(1[p%<+2HN=`2'qK4h1X)!!<5Vc@\7~>
+endstream
+endobj
+408 0 obj
+<<
+/Length 249
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\]+)VB$jL*0'Tq0]KQmO=$_?K*"d$4q#q?,Z8dZ-ZA-5k!@Zdl\aqW5@4/%4g
+Rc<bag%s$Kc%KQKBUFr#P=]JTi"8[-`E4YD.$:*+gB/3,UCEUoUP6'/.TTK2LL&@(
+FP3F[&HLl#i.(&8A8Zq.]J@)b0Df[+It.-o#%B3>T/s5Tj]#Z,/[hZi)Tan;6sA84
+c2DOO,(%NE[HuJ?K3Y)#JUSaC!$0;m?3aQc`js&G^'4QXKUkX~>
+endstream
+endobj
+409 0 obj
+<<
+/Length 324
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V0.0i#V?'ZP,_*?r0C8+;_0+\c,k[R^QI1*FEO!EqsI,+-i=Yu`DakV\6DJTT'H
+jl>#[MHsf80CgL6IriM+cM95.F3Q&p<CUaZ1HCu2R<*hBaX3YA)_FZS?eERNI?9<6
+`R?DOPa7C.nc&>VjW,kJJ6GD)[RpXmd[dB<CaqDgmMGZtpF$g:O%e-<Vqf</E3O3b
+lU96oZ+M;>f"uJ0ZsmgQ#.mDaGcG)+Vn`YSkhD/LL!=b6HX@*7"t$R22H0q$S[4/i
+k$U9UH(ImnllqcTW+m^0.<MmYo:gFFO*aF;X`\;UN9`7`^8,E<)ZUfWWq-~>
+endstream
+endobj
+410 0 obj
+<<
+/Length 416
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V02YtDr"&-h&%-Q[)4>.`T,cs3;9%LrQ<Jggi)HiUR]:pdnF=Bq7qMHJpsm^O(S
+FX`W8ZSRNt`kZ3$b\Zl`B7?^j3n#IET$R$tVOpc^.e=X<pj'$KdhI0(H@1ju;C2o8
+cXh-L/X\0Y/p/Y-nlEN?I6>^D8dc4s-%tN:pn(S$0F.h)VLnm($@kSX.g+-9#`/dI
+4GT2V=aBEu<QM%FmRF9ei^PZW&W`j./nWZXLW+p,AR`"?<(+?SQkQ^)#R7*t/;X6s
+r">Aa7'n<%*`G(.`Nb2[4%r)EN8oB*(/lpqa/ri=gbIEbM4(B`JDZA+@`s]bX/Egb
+`%H576QQu0MV'"3WfRGi;\:V<kMYblTV%$)j>eq<,<mRN&0^,QV.+o5qAO@5CWgh)
+gi&;+V7`-Z!rte0'm]~>
+endstream
+endobj
+411 0 obj
+<<
+/Length 377
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UU!4&3^J&-h'L;FGOkNaQ2onlQLO=^"'7"VOcS!%99]:ab(Bm$/auM/-Y0(C6Q>
+/&U!q'Vo\33>m,%J!paDR[R8uDOT9A<U*RA)qpWe>G"pX[%tb&MqYV>GVIB3'fYbV
+(#->n;lQM)2=GH*c`4Z64b32*H7_I8#V"bpdF*hL:9-aPBg3bf+<AuP8Pf#S\0DeT
+gli!ak3Sgp]j5GnYb'CJ$Vn5?i1/,0G)3a%.#q/sm%OmS`HXL&ctmY#437:J?^ZbM
+e;7N=q[)VGW$20'@f*+5gq\-h^e(;()Z7O069+<KUI+m=&VZ>!4@Vc[a/Eqh6TCcj
+n+[)^SE0s)1Di.gCqPT4.J/-UZ_KN-CXmR.ma^b+*dN7I~>
+endstream
+endobj
+412 0 obj
+<<
+/Length 313
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z-JYt>*a&-h&!<s5B\bB2DRd(:$uUcXA>?4kQ,#;DGZ#42J9>tSHQ@$0&3n-.,*
+MW6&`m-T\':LGo`h_=ErXIG^7=HmmH?(.&?(NqUY\W6C#Re%NdnX11>B+N#,34m.e
+Zc1acZ(.(Po=BBtipte7;'d7:DtK9O#`V:<.Bk<(%M]2e;2=ck5#;\@a<&kYB\Neu
+G9\rXfo\h/kS8=Z3=,RQV5Oc9p!g2mil_F4a,!M%V!^AW[Z,P+5\`?1I(6'I",&R$
+6oCX/#OEcME#*C073hn.6p(AYM#V4GP!?cA-/\<.!3274('~>
+endstream
+endobj
+413 0 obj
+<<
+/Length 121
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A77R<7!KX<WF="$\]9^Y!Oa.';-aMgebgbcO_?.,a3;[S34@S_\ESS\F_q7
+Ea8H9!R;$;b0sFcUo6,8bL8n2JJeObrso8=F"N`Z-W_E,?iVfRBQ4~>
+endstream
+endobj
+414 0 obj
+<<
+/Length 123
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'<7!KX<\Q@10XFSH1#shF1,K#h)CS]+.N%H%-%TTI/shbLQ[ZGrTa@("
+#>gFRh^Q?D!D%M4.[1X4VK-sn-nm>Bi;^\^!Q&*bjm'r&a9<C\Mn,Rr~>
+endstream
+endobj
+415 0 obj
+<<
+/Length 260
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH7Z"h01&-cO#%#/!Y#eh*gCa\M<i$8jEKm)_`U_tta,`qEkBSO6W*l6Md#[`((
+0r9jT4sBmF$+X]OGf``=43+MdO.+@I]u"k!?I!=si,GEfV=GWa<:1>qft;2>L\?ET
+T@Y<q>Ljs!N6Hfc]r2,AL$Bf._I>q"m5Rb=q.#b+P#7AZ&+j"N+A;Pnh/i_G(P[>&
+j&a?/-DqTtr+G`X:<+I:3_D'AhpCu_.h22f0Z`g8ch+9c.d^DcU[J3`UN+<_~>
+endstream
+endobj
+416 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y"+3srhi&-h(2'S/RB#WijL\1uBO_$?>od)lHhV1kXd'FV+0UZ;\0;ojo]NF9P"
+E/UpP@;#Sm=Q9BKltMEu3#^dO_\&VF/dF@n0^NSS$/5PU&dUB4`=OSr"MnV+71DPg
+`:N6!LLc/#YoMrMde^?!T<+oPQTM0k0,7DY;4#BZm"m1K7-9HM(";GJ?>D"ueZeqU
+XS%(IdAP[.Ss?@##1r!WD*l?i[@(<t[NV9BURncLH5)+UA<-UuT,HbtXPl#:/&<Hi~>
+endstream
+endobj
+417 0 obj
+<<
+/Length 243
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk_0abcO'F*KQ6fBU[6Jhr'N<qQ[We)5oSNME`3[d%ui8D"hPSPoK[gj_!0+-_*
+ODi44]_o#@-Z"%'fhC(6hJ507Z0\seK[!Ul-L?bWjeT>$/?,I6UpBZP25tuBQh0l8
+q4-CF!,W8L'ggi5"ti<'5!k)Y6;Y%o-Pbo"<?\@25Zu2,&$ccEa3PH\9Qk-8$M%C#
+`n0D].Fe0.:LCC.L:GE@(\o_[J/\KqaD"#F!<B#-X*t~>
+endstream
+endobj
+418 0 obj
+<<
+/Length 260
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y")3srhi&:i^K!<Z8f)sCNlP9ga@'V^1."Kae:>$<=X7hIjbn0C"\aqS:)fo9CT
+;R#tS).rXgM*;,'O;O!3%WEfS#[tY=+6*obU#[6#4[>0^\%sa"Do!snP1:6mGj,je
+Vop.0)%r(;)%p:W`nIBjU!Qi7`thg5^!W%OWN`@FFAM!:qmretkc;Rf2eLcZ>P]as
+nGT9X3H*S-E0%.WD-Y/Q[7d>bb+XF%h!#t%b#Oc[`L'X@?bnjY27s+n;lCk(~>
+endstream
+endobj
+419 0 obj
+<<
+/Length 248
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH64UT%k&-^u_MSM&/_Ti<Afd(%;i")2Ad)lHhV1kZ:`g[.E8A%72/OH&(0r/hm
+5+!ACpTg/r:3`j#ST1P&W9HY5PX!Js_T>3h:,nbXSl<#ZF@sqa<YWff$e?$R)noVH
+-d%d7Fp+K3$rAi*i3raJqN0Y:Vbj*'Ci*#%8hd)1h,3gC!^5CjS0*oE^D$cN.!q2S
+I;+t"[mmqc`eAB?$/hU.?BC%?8?i/6T'Cd#<DGW%%fiTMT`+~>
+endstream
+endobj
+420 0 obj
+<<
+/Length 186
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY^"!b,XQ"Z$gG'LT#i/n5IM!5pbC1K;^Y!#!Da>Y^kqqV_e$7U5d25Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PVnh+5$Vnhn]6k+8b$s5NEd`J$<S\s1jZRs+*3Rrl=NC
+!JLJ/!b!krs!J%-0JL9s\RnYG"+BdU!U("1k&U.U$KM6s!1*c&#Q~>
+endstream
+endobj
+421 0 obj
+<<
+/Length 326
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WRm4\ipL&;=ttYiI-$LcGIrLHlem!JqL]:iQK.6imM!=`L_59mhW@GpOu%2dWaU
+Jqc8\CsBV<1JWGZ)V;O;Y&XEFlW\Sjg1SUBiAtg]GLT6J]R.#ddFPc@g%pjl>Hb3U
+*4PI\]tV-Bf^[aJcNfQUU4AorPK.u5#Tb=\i)@2Q)(QD*bS;rg%p2aoi;Gmq<UCdE
+NG[qXc,HK9B2'+Mi&$7H@;KLCI/`.'P<O%!7]!+YG"G:TO%&.A=ltMPALJ,B<+Efa
+/cU@=#q)*'_]LFM<g4Q6%_mjr)]NAO<6?`/BXouI,pc,;?nXurA%r3JG`s3A~>
+endstream
+endobj
+422 0 obj
+<<
+/Length 202
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q-&#%A6="Z'YB'LT#i/e^#`hZ1SPeh^:P2#n92\Qhn$>l*Cd->$NZ*^D/,
+IA['X"[anj:LAg=U=*!n:D\_7bl<6E!JC:N-NAV<Irln70nRIg%/)sWi=C2Vg&?aK
+8BUsBs8S/%*iSEI;a#qIW;k0L,l])[7O4.BE05XcNauO*DdZsB-FmAE\H9;A!s%oh&W?~>
+endstream
+endobj
+423 0 obj
+<<
+/Length 157
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W;_V$%#%Afe"Z%BW'LT#i/gCH%&-R$5oaDRW%=gie/shbLQ[ZGrOTCf_#>g:N
+h^Q?D_2q=IdoW6=W&0d_dm`5fr;Rl*+S:4&JKQ.%.:U(Wk5PlEoRlu>+(gT?NR/ce
+rsT>6&B*\qaVDl#(]\/@OI-~>
+endstream
+endobj
+424 0 obj
+<<
+/Length 196
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY_m2-&!\Zr@#L1F%Sf6`ra.,86`SJV&TLK!'s%,tM(_:a%icbK5r@5?u%G
+KM12).*8=S']?%mUca&?8r?5>\NF.3rr6p:s,RbFr\,H+6j+o,'PR:!^]6h')#jPJ
+!/V*q3r$GjjI5p7L3c<C@V2QKDtqB0r.k=2&,QkGp&CEZF1HU;"`aVJ!'[[2!W~>
+endstream
+endobj
+425 0 obj
+<<
+/Length 259
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y"+YmS?5$inZ(%YZJ4KZam>>?f(K:_gW/d)f9a7gDKGG4W0mr^]8I@gBPj8XH0`
+#PT@O,`kZ2'[kXjA4"b4NY,SOM/=5Q3$(LF$n[5jAf?:B,r#TSqh.8DR8\ci?IS:f
+5G;DFEEdeJa$tH7k.^uY?^<>-9-r_p<5-;+kd*a`:!2$I>KP*e=GXcgJI'2ZYidX;
+=f7BBNG%p/HfLMhLM]=.3ch`'fr@uU[GTHn5HGm;LgP\tMbB%6r!WR@1DRh~>
+endstream
+endobj
+426 0 obj
+<<
+/Length 136
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W;_V$%#%Aej"Z'YB'LT#i/gE_+hZ1SPeh^:P2#n92\Qhn$>l*Cd7YY1E*^D/,
+IA['X"X(k7=.uFg1mQ857H#?[Ig-bd_>O<DoDa;m)uX4CcbR=+6!URa>_-.1!<DJMKe`~>
+endstream
+endobj
+427 0 obj
+<<
+/Length 235
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z-JYmS?5$jPW0-QZg_,;_'HD/&O[K;r;a5pma>*?>ibgWe,I&pt>L^p1ds0gu8^
+2\7U^pCe0q*DoG>PV&h)Bp7KsD'h:1@Qr"LONP&h@9I$E,+E!rP85M,@S@E73?8X.
+/QNMl-7EJfB3K6q@_oa;+$L=-I<5jO>8%6_@ElOTJrWuRkgr,4%_\=IE?gP[FU.^"
+[J(W/A`WmLeba(]dt#/aq?9VE>iKf)lcet^~>
+endstream
+endobj
+428 0 obj
+<<
+/Length 194
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q-&#%A6="VUul'LT#i/e^#`hZ1SPeh^:P2#n92\Qhn$>l*Cd->$NZ*^D/,
+IA['X"[anj:LAg=U=*!n:D\_7m/Iq&s(>a>_-dd!+9%?,P3mbos8QJns2Y-=&"EM^
+k5YJ6l9Q[grI79Zq&`![J4W3UP'M#/J&%(T?smn\?q)KR>WoV!\Gu^3++^$8~>
+endstream
+endobj
+429 0 obj
+<<
+/Length 234
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;O0abc_&-^FG'S0t=KZjUAZXKs<;8FgeXZV,;=t&)OHF"S;7nC0ZaEOp*67Njt
+`==]qf.K)DSEGWDcIVL<d#Dk]A'%BX0[^V0="56T,MS1L<a)<BrJD%u\)YO-Gp0Y/
+5QU@("kkF1hGT0W@S"krI0s?V!e&c/8R#\\"-!iq?8=^60WnCT17A)X%YSWVGectF
+[$PIF+<g&hgnosZ:*g1<ToGfLI0K\9PFNi~>
+endstream
+endobj
+430 0 obj
+<<
+/Length 255
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFn4V!'/&-_!G/P)bt#g<GdQ9_8#">u=Y6n8e@Q51C@0sU4O*/,V6;NMoST1"=&
+Z2':OP*m+:$o#VV8hc]B'];9n)5<MI!944"WG5(LItBKZItpl0re`f,e'/jIpt6Rh
+QeN+X"WH&b+sBUAZ]E6R@=*u,NR1.XiRD=nmURlC,3NpLe=GINarO\J^\`G]p[_mg
+LK.BaYhqHWf#AkCHaQL94tFkng`'BXX[N2qZ!)j#7`$p5/\D8fKr=k@~>
+endstream
+endobj
+431 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFn4UT%k&-_!W/VGRs&Y'5B&s>L0KrAAd5q<J=Q55@drXeR(5msk.n,fjf&U[=d
+$UH9TQESq"bWOKiM]H]g5.gA:T%gUrf99R"4eJ:R?%h3R8O5o0P[0?oTk%[<iuZrc
+L*PQV[gNQ?$n0n]9Q`!RZ8]](Xq@=HMicP1O,t5MF^_/02N_c#V/c7k6fYENY/9XV
+DQ@YT-KXp#O-o05:['FQ^f^b0SA][(&6%*k+#SmOmf0&-X\c"n]/0e-6I,Z4r1=+g~>
+endstream
+endobj
+432 0 obj
+<<
+/Length 174
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[;_V$%!b,YL"VUul'LT#i/n76khZ1SPdPFkL2#n92\Qhn$>l*Cd`eIap*^D/,
+IA['X"X(k7=.uFg1mQ857H#?c%s\BQ#ODlcmEH(+Ef<68lkoc,eM7&5!TAMnr1Ed,
+_uK?.)#sVk@qOHR5="fX(`;5!bLMe,O:*`BJJ3)j~>
+endstream
+endobj
+433 0 obj
+<<
+/Length 257
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;SnC0l"Tk&-^Dm.MdbhN\GO*6sdt<>V4S76q+noHiQ6>MM.dk+bc!9X!m`e3eBs=
+@_]s!(N3^\04sK^SS>3e?L(5H?MC&+\6;uods7e_PIJiWmZWtHQWpR->eX@[j`8%4
+cXl^N5Ms3tgq5&HE/N^e%%[#-j<(.e1!-%J,)T$Tj<c[)eH,s`%i!BQ6VeR(,)ep,
+U_F._.Y-@acBc*+M?JdJ.In`"RGB)]J_IAWY`FHXKO2Ht%<)"s!+lmZ4o~>
+endstream
+endobj
+434 0 obj
+<<
+/Length 191
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<A76';U@:#0X=Y32,d%#j=94G1'\.).%$GR)!Mn>ja]a>/shbLQ[ZGrOZAcB
+#>g:Nh^Q?D_2q=IdoW6=W&0d_dm`6qj8].aikoH>)2ah*p`C(I!TG1dr.'@7ScO`K
+605&$jU'oG+O'W,*fM';f`+2*VuH^K$D?DrJHi@YkAp7V$KM6s!6#PV)u~>
+endstream
+endobj
+435 0 obj
+<<
+/Length 203
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q-&<mW^'0X4S20i1Cqj=94G0`qb$.$ti$)!`%@ja]a>/shbLQ[ZGrM&DYo
+#>g:Nh^Q?D!D%M4.[1X4VK-sn./[TSs.AgG"7uNs<:U:cs$)JBs"OKQa7paNArr,S
+0M%ius22o"N$)[r)?0YSr;VnQrr7QLO+I:U@,DG>Ik\qGao;eBN;pFn4h1X)!!<5:8ZQY~>
+endstream
+endobj
+436 0 obj
+<<
+/Length 240
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTr0b/e#&;B'h'I;.HKUiK!+D[\d$#1Z<M,kZ_/M/e_6YGYKke%,>$XgFIfl8]s
+2)\h3?Lb'&L,d%9KPHJ9'_`305fGj?W;%6"r%Yf.U_s;><&"MK^*#tu1Q3Ht<d6W3
+&!5%5#[%Q2X*1ERe@7p7=-!dUPAsc_Q(<L8>EDE;bIkrD'?sR7VTrAZXo=O7ri<Nu
+*`i$T)Y\,l36krH/WtV,gfi+?D&*m)Cu@)LVF88q~>
+endstream
+endobj
+437 0 obj
+<<
+/Length 316
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTtYt>-R&:i_mL^PZe8'(H*\ee-DJe0mVgd3tN+$_C]'a;5)@:?^M[!9R(`i:\R
+1.B8DaVGpUo.fi<@gpT>#S&\Y3Qt:W:<P#!1`^4J9]])LUN-/R(ThLk^hDD+;Nf:6
+Gm:X_=7GeYH8"#o@-j-JaK#8dNkIbkK>>lDmp];8.*u2r_F,mOabD"cD@ei))M^OY
+fe,?ePMa@9OXg5W-AUSo#E`irK26[V8:&ggU<BRN=K=WIJUBh*c]5tM4$JgieCbl*
+Mp2!F16J;e+cBm=/]UsuA$!.fa&Li%;H`jUPS^I7QG3M%[Q*H#~>
+endstream
+endobj
+438 0 obj
+<<
+/Length 283
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$c5t]*M&-h&A>m+bJDd_`0g'7FB=+R9$>mS#f#>ga>'O@W0i3b%@V!eM-Qc6l"
+RCIO(Ht4)VcO=I7Mq:%\b/q1VG^ed`V0-^Q5PB-I/,)iP*kC%HYi>(S>MQ?!0>qoj
+hT5$+gEVcG6I[R9m^o6U#b[P*0Hmo?bQ4(uNkc8?JCORcbuW*W>MZhcos\h_8r#6t
+3!FA``U[@7/`!rd3qK+k:g:eFAHoI$0\J,,,#X9MQJjLQ!dI5dLg%:7Dinh2apq:=
+amI8Q,N&%K!542hAc~>
+endstream
+endobj
+439 0 obj
+<<
+/Length 300
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTt]l(\@&-m/E)'[nR,PYT<KTI=m'FC^+"sc8&!SWPB<:(Zm(jRF'%(o%@6eAPf
+Y]AN%c%d/6PNA"sJ!WiKKO]CdAsc7GT&F;b4%Nh0*T:Odj'a3%p1"L%%)R3^@L-%?
+K5eP-?j'oH`h2_W0?BHXPcg8=CHSn[XA?5W;BQbo;!j+XlGc!;BkqV>F)LTh1,[R]
+/%3n#<\q7."pJdp95Epe3^&Mb8DUgPT0;A`QIL3KH$.u6L%EaaaQJU0p>AoUB;=hh
+Y9t:;_72_4ET*@OJS<i'n=%0449bd_L*0+~>
+endstream
+endobj
+440 0 obj
+<<
+/Length 247
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;SnC3srhi'SYKX$fO!HJp.<ca(Sm-p]+4u>.FX@Zr"-$/5<?f)\G#jEf,t=RD`Pu
+R)dOD8YV&R>^!,jVPdCr@]bA`DR4>_UP'U?ZH+=UW3m7VGU;lh\("C:I&m"rj"1!u
+94NqH(kO^aP\>C<T^Ljpi<OV$MF\WD%DI5M3@@7R,6eG(+'&X^:pi]E'j0"hUMt@C
+<P,-)7p('">6aSjntE'E33Wgt$@\0J^\gUQ\a8E:!2W)KF8~>
+endstream
+endobj
+441 0 obj
+<<
+/Length 113
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<A4D>,@^lj'*TUZKbQnW67sAo/>usLB;f3KUh?ZgSBL$Tae^'h<5k^&TjYg8
+mhF]]@*#25l)RWY<1:tkl(Yrn!rNUmbLMe,O:*`B-H$H8~>
+endstream
+endobj
+442 0 obj
+<<
+/Length 112
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XW/<%n;=,@^mM+DIj;@`VQjASD,V<%uZT<%p)UZW'K@j`9qQdLQS_imRQt0]LN)
+$?0$"jO3ep<@B:G:$(qf;.)WhHXo%$X!^sk(LR7%D\.F~>
+endstream
+endobj
+443 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+14 0 obj
+<<
+/Name /T10
+/Type /Font
+/Subtype /Type3
+/Resources 443 0 R
+/FontBBox [0 -19 52 64]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 98
+/LastChar 121
+/Encoding 444 0 R
+/CharProcs 445 0 R
+/Widths [51 0 51 40 28 0 0 0 0 0 26 0 0 45 0 0 
+0 0 35 0 0 0 48 48 ]
+>>
+endobj
+444 0 obj
+<<
+/Type /Encoding
+/Differences [98/b 100/d /e /f 108/l 111/o 116/t 120/x /y ]
+>>
+endobj
+445 0 obj
+<<
+/b 446 0 R
+/d 447 0 R
+/e 448 0 R
+/f 449 0 R
+/l 450 0 R
+/o 451 0 R
+/t 452 0 R
+/x 453 0 R
+/y 454 0 R
+>>
+endobj
+446 0 obj
+<<
+/Length 296
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`@9kqO1'F4+uKRpW&#kKZFj4Gci)R'Q\+k2b^cn;qDWU!.?!ICS-09RPjRDn+A
+2jlQ<5rZQt]Jo:pApD0#IP<l?4FcFeTf:,lni5TRcASriQuI;HAO5"@o-n5i#uS-Y
+IUYZIZ/q&@dgHm@7caX"agHqjs2@-bcG;ZidI`a,!dn0C-*L9XiJ6-&pr&_g#c-sB
+?n;&F#h^NXd@XFg7@U7D[F^_Q%_CBN2NccipT(CBldJTDc6H&1V0H\tho,rtdP<B'
+[k**X:FeSNdiI%q[:rpnN\1D6M52Vg~>
+endstream
+endobj
+447 0 obj
+<<
+/Length 295
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V00YtDr"&-h&%.0@u"DfG:LGB#?/)nA&H'S9@LJ6E:0>4;<"q^?`C/Q42<ru3r=
+8[eDO)4:5D>0#7Mn^_^G\@^^$8"\;<.&,L9[r^baQZq-o<'PHQ;LOTAebdAh40"&@
+rr2b>UZ':GQRabZs%61eV0:\%FL1DFZsPWB#YbVH2+B6uT5M?$4rZ/i8EH[9hp4"O
+;sL%QK5M11-g1aZ3_:n+P@1nB/hfl9J'3!+dd"\gFugT8!2n<^O_(nU0@@qL&Y(Z3
+q9&>-V%4E$"Hu8^\f9jirWW@N:a3.~>
+endstream
+endobj
+448 0 obj
+<<
+/Length 249
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;O4UT%k&-_!G'Z)[e6KS?<`;HtM;8Eru<ZXLX/JP<GWOu9IMo6R1g`kf>M:#L/
+^4eN4c:f3s^^3e(Ne_ZaksA7iI2pQnR>"NP%VNq)o(O-#jKGCJI^WO$8:J;3g\$#i
+I*"Y8!M,YZegl<ke.TlW&rhVjBf?XX*p]PC)t-E_TS;Z$@:2Ti;BM,(T^X&B8>h/B
+=+[F45>rLXOD_7NY,=sGL\0n;^p.'TmU'1$K2t#"kWJpHoqDQ~>
+endstream
+endobj
+449 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`@YmS?%&-h&`LVbWkK\d)M)\(e-W![,JFRfI^d6Z11#(3[<8pu>P*D4YR;61$@
+mXtPSjgagh;k03e!iH)1*6o\:af18`&]\<pfUj:QOR,e_860=+8\UUf$$)$WbO#RU
+JOEI-#1A&[GT*#AgH&rd.UrWZfr=F@e_4>lF[2!_qUdh2T8bZ!=>L`lqS'7Rjc"VR
+cHN20(-\"II'W2[rb]6K@Q(H^Y`uAGf)T<96)4~>
+endstream
+endobj
+450 0 obj
+<<
+/Length 189
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U<k4UT%k&-^u,MhPk-Jo^tKT7g;R;8FgeXZV-2Zr"+f8)'g"#aQ5Lj&<"0mgVBc
+1U1E8"VMVV'mpL5V-'JhD_:+&B--5XTfS;tE\,=L0p/O2.h:XgNpjGI6YXdh=ZRf'
+B.tNZ,@uD1dXtQV0Mu.1<B=53)4jG.U?HfI,H\4YN297C"+:@RFc_UG~>
+endstream
+endobj
+451 0 obj
+<<
+/Length 260
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V_T4V!'/&;;8A,h$]8joUDWYVkquOhsL:&"o4()QhD30t[f_TVN\mhk5g*mO$i:
+baZ_e9i<!GWe4E;M'fJK@Q=hR&T9GUF;Rq$p*Z8>'(+<rd>F)TZcuaCA8AkbDF_ea
+$<.%N*1(>j11t$!:Os-Q#e\M^p&H2:Dh4`\2?FE=Ts5g1*&<gC(AX#8A)8FMg\Ho4
+gS5"_,NHf,oTs^I0gl&K61_HLIY(WK4mcJ9*M,8[iG_"2/''K0Xh4l=/t^3X~>
+endstream
+endobj
+452 0 obj
+<<
+/Length 228
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um&4V!'/&-ZI#Kul1,5ir-Zr!:_fJss3'M,kZ_/M/e_'2RPSXLuOk07_joKQ4eE
+K]7?tHd.IXoJ+<^JC+M["SVqe+AB<;0qMi8%X@$d*?e?([MU>6Q99`>eh[_"W"iXa
+f)qs3;OPuU;kou%dal=IYoZc]%+C4]*NSIHDj@^rQ`7N$7EoU(UqI:Qg%Jlnd^^Zr
+NC)Ki94mBbjlFZf==Dh;G6%Yr]Xe~>
+endstream
+endobj
+453 0 obj
+<<
+/Length 289
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTs^IlF0&-hV5.0@u^)e<8?P=5R$#_>pj'S9@L^hIM&LUM*%/:F@[.t!?O"t@"e
+q4*kZ38K'KQ=[h!dfn@iAN-2VcM56)R[T[fb1.S\5-!^H4jgR1lCOK6WbZmSC3b0B
+SuV45T/SEae6VY3>hcma0,QL`!_>>+&t"=PbW.j1ACq71n?2CC0LDbWf@Dnlb-6D9
+BLo'3#rN'"qBb#HAc!R`HXkf7k#XB'U(o-_AM1Ab9^SdSOL1j(=(9gIGdD5NI?Mt<
+FMYL!?1AH:lKF7W"ouBNefX~>
+endstream
+endobj
+454 0 obj
+<<
+/Length 316
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U<l5AJ(i'F&Lo%tV4"3Iu:'eogsW!hk>oKmG/S;\"n"m*O1^;7;FtP+b7Gd?4ks
+Rg7tTl$Y9G#kSdVdO2`U`&tVNT1mLS@"qUd8a)AnddN3%nKIEk2m5GZSl*.@k9te!
+22^R8$^4DW]peDnh3P@C@AS(B,#?md\I,iIb]V!$-u]\blus?W;PEfo$^R1_Y-,!J
+nYhb[kKn5N8&=>Z_F?cuqc%eQIV2]K>[cS$oS#'5U"?,uDU;\S'\G%dJ\)CEi")?o
+$#?6m*<"s^<K^?,aU/O]8.LcP,O>+L'_kadT?qXKn+8gEP'pNu~>
+endstream
+endobj
+455 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+15 0 obj
+<<
+/Name /T11
+/Type /Font
+/Subtype /Type3
+/Resources 455 0 R
+/FontBBox [2 -1 74 63]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 46
+/LastChar 116
+/Encoding 456 0 R
+/CharProcs 457 0 R
+/Widths [29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 79 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 51 58 46 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 43 41 41 ]
+>>
+endobj
+456 0 obj
+<<
+/Type /Encoding
+/Differences [46/. 65/A 97/a /b /c 114/r /s /t ]
+>>
+endobj
+457 0 obj
+<<
+/. 458 0 R
+/A 459 0 R
+/a 460 0 R
+/b 461 0 R
+/c 462 0 R
+/r 463 0 R
+/s 464 0 R
+/t 465 0 R
+>>
+endobj
+458 0 obj
+<<
+/Length 128
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-<%q-&#@\oF"[`rW'LT#i/g,!2KL![bcVQpZ!(\BuE]JDcl%]?E\b&&#Uf2fM
+Jg$JpVlrEY;/%MHVi/CsqZlZsp`%j'Qk?QRr;cj"q%*1(Y+AmL>^uhT](6_$~>
+endstream
+endobj
+459 0 obj
+<<
+/Length 335
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;P5t]'L'S,-N>nl.m7qaNJD6[2T<>ZJ;6I:u&:mWdKB:TNRZ-H'aKIjG8M(e=?
+L(Z&)ddi*Tp?-R&=j%TLY*HITo"BT-k\:tggpYgo]W1Mlp'J>3W`Rm(:d*egW-6L2
+Z@Qb8P!@k$%iF_G^m0V!S`)LVS61I[.Y/31)RLn+9VPY,.!!>tN(hHPq3\t\,IdMY
+@^on,6s",X78T`G0/*g`c\Y+oL.5"6%Mq+EKV67^n;II$&s"1]^c[Xs*OU3EC\&oY
+KNQ*WEE"ER`[Roi3fhag"XmOfiX,HL)+t(@SsH&5"!OR?C)&H:s-ilkn1_Wcr!i_V<LLu~>
+endstream
+endobj
+460 0 obj
+<<
+/Length 284
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH7Yt>-R&-h&WS.HNjHNSIu5kj:+EM[V(\:pU+4b-^>-sH'T5$/jPO0I^]bDq'm
+@Nh,uKB/ZK0\`6>D=fsSG,+H$4pQ@sG/m*Z)f72/1\1/fqbHF/[QCJW(eMDj\CMdF
+GHW+WT.eXKW(jcWZNtKX!&0mVDj-Y.N8@Ca\?`WQj=L.D>5`Sc5I-GI5.acsSte"J
+d'5Q@(HA9JWr*\3DkC/.`6r:#B5t<Tf2QK_WTUA!gD>203Ishj:,rS>"1LVC_-E3n
+M+a>nG4I'=!rrWOSLa~>
+endstream
+endobj
+461 0 obj
+<<
+/Length 263
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y",YmS?%&-h'V%#%p^#e_&$2UiGM6<17BTT]nZNXgrL[ZBRGoFW')"OB`ABL-SL
+1ZTbe3W;[qLa%_UYK72%M.r`)O%.<)7*1PMJX/*[eiV)r$s-srL,1j,0O'K-(AXJ\
+LXR%1#r/Y'n=@/0rXfDU2(1ru:^A@4._lpL61Mo-I'/\Fn?jX>>WW9/ff#1S%]SL^
+RG]I*f<e>b+^P0kE@&84>Oe0%9'K-&P[s*f:&C4Q$6(f4_QH'Y:30\"I/m%9/M-~>
+endstream
+endobj
+462 0 obj
+<<
+/Length 250
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WRl0abco%#.\A4NR)Rcs/ijqMNYa5uk.ATT]UW7gDKG<kMPJaZDi0%](mUl/3tC
+Db.a;0A2j.1,MQOS,#+BGX7Nd1SN$SRAM_Q*6qZN)"5T-(p@M(ENreGMK-2#g\$$4
+E_4K_B'oYd*J!5i+C`\m%oB[6#Bm*T\-Z@M(QN1YLg%oXA@,Oe>EC]@+8#m(#85@d
+-5=NmIY\"h47N_@W!6,*]k1(no$5h@=7SlN%Du2&4+%P=eHq.5~>
+endstream
+endobj
+463 0 obj
+<<
+/Length 189
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<\R>M@1sb=<(Jb).c`?C#P,]9@m*0_>lu43SBL$Tae^)^?u4,bmfA[4dWZ%;
+<WH$h^'Z/TV5[^k/dhUqs"XLc@/Ri;cbT=,6(WYt!<YOgj+.G#UA4fd%n?6pm!flJ
+JHUTfS?RLY%jX?[s'_l+@1OX_s$nF8e!sfR@),NV\U&9"EWH@E]$60!~>
+endstream
+endobj
+464 0 obj
+<<
+/Length 273
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;TIS0l@%I&-^Fc[Qp9nO2,!C=c=r/ZpKS5/W`Mg!t\'3:f;X=j]]r(Q5`Xu+?hTn
+,*MV0q.oshHC7?d#;>%-i`nZ1ml<daS4O,%*kc1.B#fgqRh#gfRl?>:=fbuKF47;Q
+lgVULFt"ii&Qb]>S;A4\7UMc-9"m?.JAVoi$om0`KEe`E!78ZW.F8Y9,SZsk4_^^g
+eQ@;EMj8*M[]=Ei44:<-->b5%T;mCrSZL9dlV)j^,Md]d<`^.r-Cm%hp%.+nQJ_Kr
+!//^PcN~>
+endstream
+endobj
+465 0 obj
+<<
+/Length 197
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<%q-&;U@:#0K)c^[89CKj=94G2?F4(.%"0f)!Mn>ja]a>/shbLQ[ZGrYn<>:
+#>g:Nh^Q?D_2q=IdoW6=W&0d_dm`6q&,ZADp]DF`J:nF5E<?n2f`1sV`'8eI!<WEK
+!uh.DQ)>7D5R@C&O?X#j%J#MY)q^SY+(/I]3fG0E5^B#4la^7`\H9;A!s&%ePGJ~>
+endstream
+endobj
+466 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+4 0 obj
+<<
+/Name /T12
+/Type /Font
+/Subtype /Type3
+/Resources 466 0 R
+/FontBBox [1 -25 71 75]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 12
+/LastChar 117
+/Encoding 467 0 R
+/CharProcs 468 0 R
+/Widths [54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 38 38 0 0 
+0 33 27 0 49 0 49 0 49 0 49 0 0 49 0 0 
+0 0 0 0 0 0 0 70 0 66 0 0 0 0 0 76 
+0 0 73 0 0 0 0 54 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 54 0 0 43 30 0 54 28 0 0 
+28 0 54 49 54 0 38 38 38 54 ]
+>>
+endobj
+467 0 obj
+<<
+/Type /Encoding
+/Differences [12/#230C 40/#2328 /#2329 45/- /. 48/0 50/2 52/4 54/6 57/9 67/C 69/E 75/K 
+78/N 83/S 98/b 101/e /f 104/h /i 108/l 110/n /o /p 114/r /s /t /u ]
+>>
+endobj
+468 0 obj
+<<
+/#230C 469 0 R
+/#2328 470 0 R
+/#2329 471 0 R
+/- 472 0 R
+/. 473 0 R
+/0 474 0 R
+/2 475 0 R
+/4 476 0 R
+/6 477 0 R
+/9 478 0 R
+/C 479 0 R
+/E 480 0 R
+/K 481 0 R
+/N 482 0 R
+/S 483 0 R
+/b 484 0 R
+/e 485 0 R
+/f 486 0 R
+/h 487 0 R
+/i 488 0 R
+/l 489 0 R
+/n 490 0 R
+/o 491 0 R
+/p 492 0 R
+/r 493 0 R
+/s 494 0 R
+/t 495 0 R
+/u 496 0 R
+>>
+endobj
+469 0 obj
+<<
+/Length 225
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z-L0abc_&-^FG'S3e_joW,`OC5Xb<,`42.hA;=(5g\4UW&]*]Kkg7`:%LVdGE#s
+H15GN[b*-B_hiJIG\D=BduMj]EYjp*b^C_;[T$GY929QV;d#58k9H!YgDM+,`sp]V
+"*XpJ<^gKZ65]nc"1JgXi#8;SAUt2%$7L\`GpU1)SNZ`rSiZBdCSuQ.l0#5dh=Kbn
+oKQ1fPmSG+5,F+4"[*%iF#tu#~>
+endstream
+endobj
+470 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.(0abc_&4Hs7@2b2g\U_]$"RQ7f_%_K%*^D;/'Wm!iV"@9:7BU(g!^`=i_=-`&
+'C:F^>O9/lIt'035'q_G.\?s'LH]W=g65G*X9\Uo4?]!W]q[8*GK!1:44@,K_o8!+
+EhbW:&#V!J'*`L8"f/pKE:=01"t3rnTuhh?+T^:^#9UcJBda&+4177[\Jagio+.1V
+efQ_AIQ(>X<W=s3RUAk>._-s`M!/NOUissiX[QShO=I%;>t\o^b%VdAP.h"u?:b2l~>
+endstream
+endobj
+471 0 obj
+<<
+/Length 263
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.(0b/e#&4Hs7PA)uXErfQK6aS((9r'JjaoeT=Kgohb$VJ]T.(k:f$XcIjpb'1/
+p*MFkbYMjMs-"<^m.!Vm/>kW'pu'SgUf:QR>t8U=[o(]2T-st:lrZjmX%"?HD!()I
+#hOI;gl<($fEZ48!M2Od]R^,4,?0+ZXY`Za"*Yjk*^BqB1e#nlqCRug@5ZPhi>;+p
+rh)@DHeJ<PIsW-JZ/2L#T'7As%McGj<EPGg`@l<J\ZR7+'rdp@):Fg7!ru]Ro8s~>
+endstream
+endobj
+472 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<\R?(<%t[U0JZ]`1/URsj=94G1'7k%.$uG#l2da*odgi@F1If'\b*cSN6Jg(
+4VWF";h23++d]p@Y<kfXBe#IIMZNt_K0;-:jm'r&a9<C\p<+&'~>
+endstream
+endobj
+473 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W="mIT!+J;'"[`BG'LT#i/g(UT5fuF>:dN\580mA=3I,Z0LB@^joKC!c;h23+
++d]p@Y<kfXBe#IIMo*C3%J:2'%/(5<@R'e:jm'r&a9<C\3J/0n~>
+endstream
+endobj
+474 0 obj
+<<
+/Length 257
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y"+5mi3/'ZP.3L%$uA_0:GKNBq;*=@"Qk>'5@1fqPE^$=1kniXoG,&AOe]<((S5
+i4!tcoB*5(*3eSALpc@nia#)FdK+P>)RCK>1)%)$8lAP+ecDb(N(>7q.>O_I-(du"
+4f'q=/-**>"6J&:m^N9-$FDG.XS#D$NK6-'@l1on'"f\]l]m';-j8]B\^JS'q]"@D
+f&-857P:1a+,dm_eGo)2/Id(@U6-_+M.8=6_+Zm'Z-,`1Ph,ID!"2Ki%0~>
+endstream
+endobj
+475 0 obj
+<<
+/Length 337
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTu0hTAL'ZTZG[KsMm8'"q#PE=U3XTGPT.0Qb8J88lXZIT>,J.s'?Wrsu^gabcD
+dRJ%N%.j;/8.Z3R%jpliGfesh-?cA(OkJ:-DGthDCp!SfgZ<-a:D2dg;)X-HG;`Yu
+I&0=GDf3j;.WKHFpUfSn.5!1,$p\TKTJ@[<d*LZk5Jp=7i(MsnT0SSjD0/Uk,LD4R
+'"e64n4JWp2^QRqEW<"_g9AI_0[Yr7*+U=`BQPerJEYF4o\mHSpYC(d(C%<2gQl]o
+m"MYD$dZ\p(g-FG2a5;EdI6?s'?rSA=m%V'%%871+/!M21#YYj.\b*SJ&l1E\+2<T
+BEIg3~>
+endstream
+endobj
+476 0 obj
+<<
+/Length 264
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.h4c7*Q&A[hcF,A*E1l4[<X"8^M.0Qb8J88km\97KL*[+V<c8&H4/CH"^&dX>>
+Ipiepqd=k,bj]3]J#'7@S+$YDr6R)mp>Yh8gbif\lY4CVf^*,gMR-?u-dK@RM)/I5
+e.X37kje/UQ#NaG?'eFeB9'He(]8.GK@\3Qb>4o]`r\'0@YtJ`0ZLn14cPCHZZ7TN
+_^hUOi!Eo#NE(LkZ$a^V"l:uO'[N.SN&Fl%"`</bn:*%ES<KRPat/dB49bdp+A=K~>
+endstream
+endobj
+477 0 obj
+<<
+/Length 328
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH85>&jZ'F+%CV?jhHNf\Gc9d2sO.^1Ci6I<jWka!",DOl"RO'q30@^XenG_+MD
+)!:Ea>]E]`^i*W;r;#3Z1F^8ad>9h1<@&/%5Hu^aNp9U!EN(hWrfL7kkBGnmcEFUn
+q<I*I9$WoAffX3)gft+=)#ufK6oDXI)5[fX6]E+4i#OHV#)SXRFE^7jDh$0J4rlE^
+X!!upUi.&kJ&J;oAC4,R!I`o/oSK9<*QFOS2$:N\oQhHtV+R+0eGb!ZJ3!XmmU,Sh
+oa?pk:Ip68`jj'eF+_VGA&"G?YKKD!lG)trY65[k"['a7cnp.'n1B,#!4R(;&H~>
+endstream
+endobj
+478 0 obj
+<<
+/Length 329
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH8:J/S[&-hVQ>njU/&Mb0L[M"J#$;Ui;&9R"7oIX>s\kX=g^ajQj2'VJjEEAk+
+F!a]$5=j_A8XT>E\Ke91n_O:.a)0!YNO^jJAj,N)]DY4eK^2jKl:lE?Xu=gu>a]>L
+EQjEAqK%+qIpAKBKE2-.OTbe$^u08V`s,1f&T`fe-]?VGMog]ka'=Z(P@F%PF9%Uh
+5sNG4pqP0/FMKhGHt&t7OM)>S!D/r.jc(PCQ6b]&i<dh`ENt0f5*OO<TSoHtPl*1U
+nO4<YVD<R=PlE'k+o!(KZlrR1Gh%,K>#3XoU^nuda@gtf'2$'1p?'eN$inean\"~>
+endstream
+endobj
+479 0 obj
+<<
+/Length 372
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y!B0i#YP$q4fo!m+/?](#qHabgY<MR7n%$7)SD!'j*VJds6o36#99WOTr?>Te,S
+MWSEpCo5j:OsVifrVq-/WH-:pjJ+`-SoBtdI6gY./m-$ASBKqZEq6bfUh)pHMTZ07
+=-B:oH#q77A^**I4MO'VF27kQ)6akp;o8[30r_HS>iLF+)BVQrTf7laOchMYi;dhP
+(4E2\Mli5:ZW\t"Mlmde:h1cWDRO&L*:121g5'15[tBV2[QrncT=*jnqjT;,s)L/E
+O0Pmfn(g,Nj*fCl5-UUqk2[kt@?+j`-Mf_5#]p#3fY]Yb?G7!EoI6h;_ftl=6N5M+
+f;uhT2'U\Q8"UoK)\[PEGN'9^'O<V=9>:Q/hc%f4~>
+endstream
+endobj
+480 0 obj
+<<
+/Length 254
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W#IbmK%f&-m0nK.p(U02QD^GS@/$%mcb4JEkd\W3\og-9[4X!dR]UVbK[Uc&[S3
++2]YQ/q;JA'5^V7"C2O^(*(0\6uRNXHYhZ^'\i<]5mYI7*=n*_(kE:#VJ(Mm0(F>#
+llhmm;D"GM9>r9ilCoJs9WKaJC:pk`p*lDQQk,Qak#?Fn]r$r!)ma:UU9r\!^ZUf@
+H[FW.[p)>ps+W(8l.8W"-(.<Dm#?'c3EMJe<]PBk:RHpALA(]#N2g=~>
+endstream
+endobj
+481 0 obj
+<<
+/Length 371
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um*Yti1j&-h'n1/th207[TJ!$m],KS`5'"<!;/iW0B26P2itW6*,H="7\#CBX//
+Aa9ohYg7Lqkn*1P7@2nT>i[fN$hk@'btm^oL25!@2c'BoEK]#8e.&H+>ZR6IgUt>_
+g:b@6H$aEb9WB'/o)/??eV+0WP"%AM@K]%d9gn%L6sDTcC6)Qf8V/TaVe?f70U@<a
+(@4W^XlpJ$_?d[+K=a:VgZ)B*UZ`Do_?e"k*!WP3A&1pfcNW&on=_h1"`2I,i-chp
+,7"Z];\PJ.;I&b.3Q0EgL8t\sg<Fb%d1jJlpC:,T0TW*$K#9]1iu^7>:Hk5!_tZ1,
+'H@lb.Z@U=Ll!e,#SHU7klK!On?Tnmr#5Xiq97C~>
+endstream
+endobj
+482 0 obj
+<<
+/Length 326
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UU!Yti1j&-h'N1.9o\\PrD-O@G329T]ZQA3ba'#G<)!Zml/V_](9b+F'1@-K,EX
+Q:b#7ZS+YY>.-ZK-iH!Zq92N,cDS0kH]d8*$hs?Zq,q<)VgLY0E*cuLBSmeY>:s>F
+^V;NAVU_6jDP!1s>oS;7OTf(QB]:<c5tlFF[QAen=A/\.L[:Vr,LCmkpuR)<X\5oj
+Zu%AJ8DAi-+(tljM1_)K^rsPdDW'Va,rb=6Y`]rM3ETLP@ZtK[=L=4!$cP<V%NlCs
+B^8<rR:t=gd0A<BZp/RJV$#Njl#lWfL.J[h>kCA`Y4-f!T(&Vo#Q,M@R=D\c~>
+endstream
+endobj
+483 0 obj
+<<
+/Length 357
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um(]hZI1$jU`A77=^5O)TOK83^";mA'dr)3A7kM?JkH+ILWX06Y!"*oY*I;?#4F
+lA)tKU=_[,cLZq64Qiao=#[c/o@q33\nWS.0e]Cd^RdtkGl;U)g6F1kB!-NCPUi(r
+[leYArQ*l'5OYbh@gn#38E;iT;D)S&&r%BC6Kcb0TF9s$WR9E8!$R58r/))U]e-\T
+85)Ns-Y@`&STNr(JbBSN=(?,_.9b.r,3qPkdh>=-JOki[6!lp3(/\t+Oe'r7"7;PU
+4Z+"\Gn^`eUY5Y4oom\f:@r07C/@jM%lSTt-F5:dm7lb^E$:31\1Dah`>3lQ,)51;
+jV86;>s'6%6[)nLBD4=b;h.=C~>
+endstream
+endobj
+484 0 obj
+<<
+/Length 269
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y:40abc_&-^GE$GmqH#%fK\8MDl$"epSt"Kae:>$<=X0:os0"h[Bd@$r4_31G_]
+Q54B.MZ)o0Ho;D[_ZBIY$p>SjE9"hWJk.d_N$RZbOpUFp,Up5R$mKY'&qQN'`or&E
+cLH-=D'>Gm.@+On=]C]PoEWXaUi)J6YD"3-W6Nh6pag1*QmBj4=j2.b%Ha-ic5*h]
+bHh)DH:bN(T2hLB^VBQ6Un5pM5A"dfB::m82!W)^QlOk&N2sZRQ[\T<^bg`kg]mh#HT_W~>
+endstream
+endobj
+485 0 obj
+<<
+/Length 268
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH79o?eQ&-_!J$_]I"+a!gFTjtl<K0N`Z"67N+W(Rp_kdod\jp6$nGQP&[DieN`
+6Cr,:"@98*^-rc9]hXM]eEA;]1Xfm7qcLSNUhid_8_&c0cH,E%o1Ym\RT-"=7hX'2
+(E,r2IH]qmI#r0DBR0Z+@"GU)!Z1LFG<n#M!HnhF&>cF`XXkr+r_YXS+n7-E)<U,g
+?=<`L>Big?`,ub72r8EI@1<&h&44^]Q6@3j\@#gc%pX,;BA<KcK<X/`X%YGB(]YWMYuU~>
+endstream
+endobj
+486 0 obj
+<<
+/Length 194
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y")0a[tJ$jG"_>"IZcbQW*#2Me36.QE-TPm:,Y$UsBPU[:nm0AlkA^IbgS@'Re*
+r4jZm3,kiA;k=.V7_4Ze>H2I!M*)9jiCm5q^Ln/LCH[f`[L8,VdtVemqh`aaJbKF8
+/qCBT!hWn2;6KGV4/Gsr,GQIc"2#'7KQC>Pd:;e*B^P9Tgb6$,[%m'ij<bOF~>
+endstream
+endobj
+487 0 obj
+<<
+/Length 208
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z;(tg##%CL5"Z&f*'LT#i/e`:K+3ZUn1K;^Y!#!Da>Y^kqqV_c.k$7a(5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PR@_s+,\$KDY`ss+&4@"$liq"Hbncm"+68+8eCppcipE
+fah'OO'2HHOCYZscNkf^5pShrrrsVA+$hYkON`?Dqu_$a6TkMRqZ-mjA<P-dP:M_&
+0ED$r4(&~>
+endstream
+endobj
+488 0 obj
+<<
+/Length 156
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY^"#%Aej"Z(4R'LT#i/gE_+hZ1SPeh^:P2#n92\Qhn$>l*Cd7YY1E*^D/,
+IA['X"X(k7=.uFg1mQ857H'm:ru^SMoRRm2+<j'",/HM+rsUURKDGNhArm9=cl^:-
+$k2J6`9$:+(!$Oq!0C<O&H~>
+endstream
+endobj
+489 0 obj
+<<
+/Length 136
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY^"#%Aej"Z&f*'LT#i/gE_+hZ1SPeh^:P2#n92\Qhn$>l*Cd7YY1E*^D/,
+IA['X"X(k7=.uFg1mQ857H#?[Ig-bd_>O<DoDa;-%K0`5cbR=+6!URa>_-.1!<@-KO[]~>
+endstream
+endobj
+490 0 obj
+<<
+/Length 197
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z;(tg##%CL5"VVQ''LT#i/e`:K+3ZUn1K;^Y!#!Da>Y^kqqV_c.k$7a(5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PR@_rtte9B41_T?k4M)rnn$Ea8`FEs2!LjO88etB)2JN
+s8Oh,s(;ItocTEkrdP$3r/Vs<0hCHC9E"tf[[r&$r;ZpE1<JYCaVDl#(]]#Z^4u~>
+endstream
+endobj
+491 0 obj
+<<
+/Length 258
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wju4UT%k&;:cq"K'9QS."QCB,.KL;8Eru<ZXLX/JP<#nRD#83C:k&_==X!5d:uW
+DeJ5"m^uggAY11g#->ilp&U^TLM6Oc-QJ*IBYa%,8P3a@3[D+d6n2?c3$=Khpi=(i
+.%R\8Sr$!JH!h@Ki'U-+/enLjl<'XL1]nC^:nh*D:<+"%DGl"1:E2$lK%Ve/_tZHF
+h.C81T6"3a-!]-:6[3dM#$kq*'1brCk1c5gYmo9M$bh+C(+F+a2#sTBgEZ~>
+endstream
+endobj
+492 0 obj
+<<
+/Length 271
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFp4V#=_$jGRB%$eKt#k\@oXVsGu8Gl##5_=gp!$_ROk/%G7&eZ#F&NY*6Cn-4d
+7TdAJ:N;uT\!UQXh/n>K"KfXK$:h<f3DFIS@Fe(W-uKPLaW]N6*C@E#%-#BDMCHL>
+'$mK!*qC23Bah='Pq'^b*JntI\F)bdR5tLYR3[+nUmT=[Be^gB;gC`Cm1#SFf6g3e
+=2/DE(Z0u95.^-YgU>Q+i@Wh#2q_lgL<5*C+?lhs/1'idi$SBV7QZkB5(n1kCNp9g
+]CQV2~>
+endstream
+endobj
+493 0 obj
+<<
+/Length 178
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+1:bY^"#%:F6',-'66`ra.@j<,R!5pbG1K;^Y!#!Da>Y^kqqV_e$7U5d25Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PP*?J+so6+##LT+$Rc]hV[gT?(U!cRm"YR[X*[X/0Ol*
+&VpttA,-*(+!V\9VEOn\[$Q>p&WXD,4h1X)!!<4/]mr3~>
+endstream
+endobj
+494 0 obj
+<<
+/Length 269
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$b0i#VO&-^Fc>c]bKlk+Cn!7#<gU9bP!_?CQO*$A'UJ=q'^$=>;37BR6&Zs0E3
+r:q*W.,ISnkDprqg!#VM78(&=(\SjA9iGR^Zhi+uH/sq1i`50D<_o$U<d,Nt21N+o
+IbK/GGlN0=p;X<HqbbN'+mf&a_>Rb`)o/S+^*a/%O7ne.W$(>TAO?mW'!RQ4=Tetl
+Ae5.jSfu]4RB<0!0G[o]I"afB'E8Td)jXRTo8XKCrhLLMWR"jP(21"/hR<9Z^B4HQnUJs~>
+endstream
+endobj
+495 0 obj
+<<
+/Length 201
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+1:bY^";U@:#0K)f_1K6n"j=94G2GaB>1F!&J4[Yk^O@[[YEq8;>%p(GCi6q?"
+8oa)W"ZS"LEp7rI.[1X4VK-sn./a,@s$$_eLkZuqiIaDN#fVc&s8N2\+$faSJUsEo
+MF$5Y_Ol\%NW1+#Dts>PN">hNrr5:_q>Uulqu?\XQiI)H_>ZYqK$2]./!(,m!<3GPkP~>
+endstream
+endobj
+496 0 obj
+<<
+/Length 202
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR6YmnQ8%#*Yud^`ci0*%>;/kR!1JA`0n:b_rH;LkF#WE:[_YQ/boU3d_G'JKR4
+-eZ7?Gg8;3Z/[$<ms4*[8A<TMNWnSZVbPhcW"*>slq=Vl9k<S?PTAG]jR_WAV_I.u
+!WnR[2.(MUU-Z!5@(?#>c*-X^"r$Xo'qI2XnrsJ5mZQL*h;mB].\m['4OBO'!s&=Hbg6~>
+endstream
+endobj
+497 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+5 0 obj
+<<
+/Name /T13
+/Type /Font
+/Subtype /Type3
+/Resources 497 0 R
+/FontBBox [0 -29 81 100]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 100
+/LastChar 121
+/Encoding 498 0 R
+/CharProcs 499 0 R
+/Widths [78 0 0 0 0 0 0 0 0 0 0 70 0 0 0 0 
+55 0 0 0 0 74 ]
+>>
+endobj
+498 0 obj
+<<
+/Type /Encoding
+/Differences [100/d 111/o 116/t 121/y ]
+>>
+endobj
+499 0 obj
+<<
+/d 500 0 R
+/o 501 0 R
+/t 502 0 R
+/y 503 0 R
+>>
+endobj
+500 0 obj
+<<
+/Length 397
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;R5u*+f&-h&9/=L[52eXk;Pgt+BP,BY40[Z-j:mWM)UMDSjX@MLe=E`(gB;PiB
+5`ql7,Gd*<cYfqGDN$broU]I_6R/5bc=k*'%?@b!Qgo1t,S-HIn+=oHqMH&"ICM;h
+3-EjLp#YR<Fr*4%UJ+SdOT>Es3$IuOWXSbdqBaWL@#9%?isOX%&QTH%i?;PT=AZ`i
+>!Oc\jb#:DkSR>hD[?-,5T"M(G_/cqM??Jb(OL[O'l>@?)[Y:;8"`Y!JfhlI-`#I.
+=:nJ'L`rIL6^cmKYafICKZ_^@!DEf3-q:h*nH[d<aVM`#i]$][</taKAJ?$3)t(2)
+@#HH@KI6bnUppte`Y>(16Aj8%<.f&JVZWS/]O5sa`P>h*-=B4UTY0XPXo'(;oQR4"~>
+endstream
+endobj
+501 0 obj
+<<
+/Length 345
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;QYti4k$jL*@)(KpR,K)58]ptanRjoF$d/aP#*WR#p5VP-XejnsLFM&csEL[E2
+dLC<^B>o^*s4qO*6[QE6[.DdRdAt:uCq#XpgM>MMHKiQ;jW+jp2UBljZ+62:2M]<l
+o%<RFo_&%YLA`\Yo)]#lB7a:jW"Q@ED9S:n-]VI^R=hlp7bP-cWD0OVBasjEB/lG"
+dP3m(L-J9DoLcT'D62;0NER.]@\'(@R^$PXL@`uX5**baC9t`CG?1&a@^f5J/qtpX
+;04h`0e(#?1?;EA)FoffRQA4%W,YIr)S]gm<;]se?N(*\h_gn%;+CVG;LYs4`3UeN
+G<J.KcN(JZH`I~>
+endstream
+endobj
+502 0 obj
+<<
+/Length 301
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`A4g)XU$io4[%[F\G"FL4ud;,R6+n6f)iCP`:"2Gl5!.qa(%`"?;iYn)l5hHpR
+qDh<++<V^h.<4DoG+)k^eJEBDV?piPXq[r\;7tZ(Cr!$AiZtl.K2E-K%jhYC)<W+`
+c,[n`r#<,7h(Rh&,cZX<;&/PJ\/IoQ=?9b.%ur5//QSPZF"G;:\2Vu)A?#kS7IVLd
+OdrnhII=3XT7M.KZ#2*T<fQ21@HBCP5H<BMl0u#rYsUQuOpBYW;IqG=4?RMfQ@&)u
+OqultS*;?91CZB<$afkkR1W,6=MXq:Hd\m2~>
+endstream
+endobj
+503 0 obj
+<<
+/Length 456
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V03_+MU1&-h&E4V[UQ8'$9pXXU"<'W;B$+R$oPW#e*$'KcXMGj)t2?Rb!.Y7^",
+e6<D+j%Qa7PLL/rHt8Dn5F]pNM*&`;E&)S!OZT,DLWD)!P-.RMF;.Raa8(pi-$FZs
+pY#'of'IX)Hf=IYgpi^6f12<83[fqA1$$?M9(:&\4%$EE=:;'^"-,*$8HU^OW2P^m
+L]\fZLt+Zk@21]=4r*_lW;F#j$4BXWU]B@l_e#0=:RpZR\S7ES=3@ou"q:Md+)ruD
+fja5,jBsha_/@>.3ZN)mU(7IIJ:eG89Z+]&4q4Z0M]AhAGFo(@orUXo/sMLhJ-g(Q
+H5R!T/V_EXO'110ki7_EgWPRsV-GN.R&l\AYs%ZU"PI9B[D>V[T/'1g9bn+V%5pfg
+L>-gP%##>1`2-?U(nLC7^6g!enAJnRbRM&#+'.6l)G4moQ.S1q2ZROj>)<~>
+endstream
+endobj
+504 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+6 0 obj
+<<
+/Name /T14
+/Type /Font
+/Subtype /Type3
+/Resources 504 0 R
+/FontBBox [1 -30 94 100]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 69
+/LastChar 119
+/Encoding 505 0 R
+/CharProcs 506 0 R
+/Widths [90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 66 0 0 73 
+0 0 66 73 35 0 0 0 0 73 0 73 0 51 52 51 
+0 0 96 ]
+>>
+endobj
+505 0 obj
+<<
+/Type /Encoding
+/Differences [69/E 97/a 100/d 
+103/g /h /i 110/n 112/p 114/r /s /t 
+119/w ]
+>>
+endobj
+506 0 obj
+<<
+/E 507 0 R
+/a 508 0 R
+/d 509 0 R
+/g 510 0 R
+/h 511 0 R
+/i 512 0 R
+/n 513 0 R
+/p 514 0 R
+/r 515 0 R
+/s 516 0 R
+/t 517 0 R
+/w 518 0 R
+>>
+endobj
+507 0 obj
+<<
+/Length 305
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.k4UT%['EI'AKCG0JU$i':G-Q3?p]G[NFRfFskb.-U2b1&NE:=bL02T+fU!M6:
+(PG[2"qnWqj<Z'sJVu/WWX]7N$ut=D*rH#];:Y@:*qijhXEQ@U^fd?QJ2:,&i/AF]
+oY?=GGW_M)&5?!NjkMI$*?lt*-!_fh77cZIP!rP/.q,9UN0Q=m2T`+%(lJ=?[F3T1
+A0T2j"\Z.A<lU"IPn.CL^#C8oNi[HR-SR^TpH*U<lG9[n]5F]sX"K.4g/Kn"ZLS32
+r52E5bS%=Z;OqBBQ$H75S$Ohc(JH&U_J9-`Wmr0~>
+endstream
+endobj
+508 0 obj
+<<
+/Length 360
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSY4&3^J&-cN4.4e3"2o*--A0V[ZgCS'"M%iKWE<);f!X,p;4lT-f3(OAdOOAho
+oD>cr!=C#2T/?8#a0nld/X8G9V<Xj;Q+N?RW7rH):6C_UF84QUdWV;G:3IRkXtW;h
+p?#Vge-st"jn\S#L'nlN=bZW2<[DCuFO]qP7/+Og-kEHb?3D>d\ip6$/JaBaF%V"p
+LoM*q9Y=JofIt5RQHhVY6mrNBh_@2J?4Otr1sLBEPIAd&Vc@p,Zab^rJ!K?Q6XPcN
+OHq`_]-n=-9A)W0e+jNPP4r,EHkbJ4f^HNII=0!YLjo7>7%[L]:>6+O_e_I'*]K4"
+_r+?)'BsL!@TEWC*9`^&"opJ?IAQ~>
+endstream
+endobj
+509 0 obj
+<<
+/Length 361
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;ZETYtfs;&-1)1OPD-dG^gk-!t(O0_q5sNWJM<9BB9AsV1hCnKD9!s^BFReP(N$[
+ZO=]BU37:b?lhuYAnOo*R,SI6$tcDNdM2//Iam&>hkp<fE-5tVbI?42]e+>HK@sEU
+Q]fh>G'AZ\MCX('HF_YH3KcV`6QiErCuK#'1SC5QrEDN)d(hcZJdR%VmKHlam7,IJ
+aW1`RQtRhN3ROn#.Z*!b+DKA-Q[ub>^/Vg?!1+"UD\mg@c%(+.r"XBChP9oVar^$g
+)#sS0LN\Qsg.1p(Fe@WJl,Pk0)CDZa]cal`mSj9>G;f&>Q'49@E5c\s\ZaZPJ_/h1
+.OUkrU4=0A!7(++qP)?gqI9NE'@jS~>
+endstream
+endobj
+510 0 obj
+<<
+/Length 443
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XF10i#Y@&4Ise&]p#n?s`ml;-&fmYdApK$7)Q0!,P4-Ji_SBL-'@>cuBI9+_?NZ
+_p$cFLbqr49(LOhpA"ZU\ore.geh(]HHjcaW?67g;RCBjCKDOCS>>W0KAJG2FmJ<j
+Y:_9%=.AM37uQNP4[6VrF`ZtIIXR,6.@e6&J++["6i[lqEsb_.A'/dJR(X+;Mk)-u
+O1cphdGSYi*HDKA6f*.IXJg1=bt0MDPT-%Ds7('kia(hPl94nR?UXV@o%J*kn^Hu.
+`&GZs&Dr&.KkRH(_AJkmm-Lp_$^q7j85tGM-\1FE+:@=2+:s),%nrI+@NLd/S8"aC
+%iLCTmfYV+*b[nk79f:U'COtfi-.CFfISc")ZS%[\Q!3KcZc@;]!ms];obZ9?(;?5
+9m"j>k9n)@NlcZFHtWA]ak.Cf/i@9ElAJ-hkcY!eR?fd6~>
+endstream
+endobj
+511 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\]a=fq$io4AK9519i;sKaH7_H`&.AJf2[DJ?!:&d@kcC8WeOT-A*,d5AgR^?\
+io$\fL+b,%OEB2%aC!IB.0Qb!mSGA,+@=q&8SSSK<a-Q@Qn1fX9W%e"PMpmW&sIE,
+L])4Fl'U+<%OZl6hui$dq"t9dgGm4W/6!#4!"'PQ;`"9ef/Oo4>N@NcSCKau-dI+-
+kq^unktlXJ&#bh.PjkN`LP]=^ILZ7rfAO-1_oX3Bo%*1I!$^`\IKQ+9\A7tAa8s7F~>
+endstream
+endobj
+512 0 obj
+<<
+/Length 177
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<A76'#%7T;92gNY6`ra.,BFtLbVds-<7!K&'$7[h:7b_ei<i':>l#L,.5$%H
+!+uI&/q$N&Kp&1Y<%^r_L&Zr.s8UF7s8P<<qYu$^m'1#]*(UN@/[`D:qu8m2Fu5lN
+ImEqH!K%BrESMZI$pXak$k*R8aI(0$P:M_&0E?,I.!k~>
+endstream
+endobj
+513 0 obj
+<<
+/Length 254
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\YmS?5$jPXGK9519T`GBGD+ihe&.bdm*<_p\!-NB[FDa$EX,l6bFR3s'k,KHf
+jQLRAqmd)cb;c5HgsK'K&KO6OT[o8.(Sahu_a)B'N,aIKT!Ut:/Q_/VgBE;p-QBX&
+mjCep`7Ani0lmZ@6<=.p$@k'U##jQu:ToN468;Oq2dH(;;)V(XFD]]affJ2fT^tHL
+UYfJ+^pU`k\S?oO%eI`ei3luY.RAO?b.[mA=XiJ@E0]>k?NU:;(S0L~>
+endstream
+endobj
+514 0 obj
+<<
+/Length 356
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YjDbt>l=&-1W;4Y5qGO-&T.BG*[BL#PF!0F+;CI"9eC#=ZsqDmk^i8*D[_cuEZ@
+NM'6s&qhP-mGI8Bk.JVP90>4=@)YougVQ//C<iS7?5-M5(,F"hc')G`2LE5SDR3Q=
+Ze9)AL"t1%q"jRTB^9H0_,9NSW!CqlPQB]'J:Ns$.1C?U@$so2M"\&dBTUb]cFo'B
+-<p9<3nuEJoQ\,H"DL8jL5n`&lqCOUKmrk=_rMs6E"&08qEl6HZ,8g$,7,SO;4>)B
+*,77L4HGmH89qTk+@V]P1Weh=..UV8#u#g41`lJ9,R!f.>nSOS+DViV0EE(EhWMYJ
+9d:d;/O]O=HW/[Gq_8)WR!JK~>
+endstream
+endobj
+515 0 obj
+<<
+/Length 227
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z-J0abc_&-^D]Mnh/rKUiKaZFGct+=asVW0IUD@O2jgYRibO`V(]?6HU"Y0q1K\
+_uj->#G5B%JYIt-c\R=(g+(<Cq]>R5H]#C36[HPd@(7A^0q:09L<41($:D.moBEPJ
+1Eio;*H21j"9u(?il4J;!Uc]O8gg3LZVGIgAae%4ZIY6Jkq-CgH`idmN;;kH<I?3E
+)ZPkDqZm665j+Ur27UZX!+D9AAH~>
+endstream
+endobj
+516 0 obj
+<<
+/Length 354
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ul=0i#Y@&4Hh%6uldTi4/h5@?VF3U]i#A+@3C?!(mS0e76G9_G,C\QROHr1Z!_b
+BV+>]IqHDX>[iU14R]Mh_JP@[SU!$i+N5,*")]_Pd0*7KAiH,iO8WIT4-<4CHaq)@
+1t+U:]RRY_km!QlA`<tq,5)!EA`1p5W]?Wti]%%Z;-Xfkg!e0h1]7R]I0h-HY?2*t
+InXsi+rj-G58H:/Z*0G!RQ,iJH(_;D5a2BoNEIY]P1-F&"d-436^_.>GZL#5Pk)OD
+h<>NQ1*0Q`NhnEM;1mpS<\*IDCs-$6r6^e2:3X]TG=FXDOJF*`fCEJfgG$X9X^lVA
+ZA'BF(>[b@k0a):!/4Sc1]~>
+endstream
+endobj
+517 0 obj
+<<
+/Length 237
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q-&<7!L%0JQG/YY[kFj=94G0a7t'-s0S$)!Z\5J4+E1Q]ie`I^jud0pfTZ
+:l7p'.DT*&OA"K[=.uFg1mQ857H+:Hj8VDq(pY.eac9-q_]\t%O[$YB#;GrRM/30U
+$m>*OR/F`""TK>n8>lh^S!9g+q1neG5C7MCO8]*.N;rq-K?,/-^qfpK!u0,T++WDQ
+qhLi;kALQ[1aLT4_=:A%T?GcK/!(,m!1YL@h>~>
+endstream
+endobj
+518 0 obj
+<<
+/Length 462
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;RYti1j&-cN4)'X@J,M4XLBdg!Ga\i.r%S/9.UVb(PK%\g<p6?g_oJPFt"k"ti
+PiG!_O\jSZ_9qH@FSb#j2:E4ElAJPAf6VV:?VC2<X!q@MoPCPN90U7'q(Ch<=Zl"b
+.Z8Wna^Y6oUJ"`@*q\(IpR>FCC*A7Q67<Hjqi?)d'@eOo':+:pC9[.>noeu5ZPm`?
++o>cNk/89E_,stYm''[%3AG8Qo^63"a0rh]dAYkG94pW,+#X:@8#(5X:eMtt$9gq_
+lfa"=Ba5/f%NhEF'.qjk2D>G*LUY[NNOH'c't^n;HQ?tXd0@lFB/c\tX(]5??j11q
+[o4m5"<XTbS\o11h<$f-%6i,m3eNXA]?<*K$:`gu.4eZk5"0R5N(2S`3aodJ%gi7J
+b@mJZZs]fgjIJa21s`[l;[sTX-@>$4XeIiB)*>85jpCb/I^8n9nnoVCjR3)GIm;!~>
+endstream
+endobj
+1 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 3 0 R
+/Contents 2 0 R
+>>
+endobj
+10 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 12 0 R
+/Contents 11 0 R
+>>
+endobj
+18 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 20 0 R
+/Contents 19 0 R
+>>
+endobj
+25 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 27 0 R
+/Contents 26 0 R
+>>
+endobj
+32 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 34 0 R
+/Contents 33 0 R
+>>
+endobj
+35 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 37 0 R
+/Contents 36 0 R
+>>
+endobj
+40 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 42 0 R
+/Contents 41 0 R
+>>
+endobj
+43 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 45 0 R
+/Contents 44 0 R
+>>
+endobj
+46 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 48 0 R
+/Contents 47 0 R
+>>
+endobj
+49 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 51 0 R
+/Contents 50 0 R
+>>
+endobj
+52 0 obj
+<<
+/Type /Page
+/Parent 56 0 R
+/Resources 54 0 R
+/Contents 53 0 R
+>>
+endobj
+57 0 obj
+<<
+/Type /Page
+/Parent 56 0 R
+/Resources 59 0 R
+/Contents 58 0 R
+>>
+endobj
+60 0 obj
+<<
+/Type /Page
+/Parent 56 0 R
+/Resources 62 0 R
+/Contents 61 0 R
+>>
+endobj
+63 0 obj
+<<
+/Type /Page
+/Parent 56 0 R
+/Resources 65 0 R
+/Contents 64 0 R
+>>
+endobj
+66 0 obj
+<<
+/Type /Page
+/Parent 56 0 R
+/Resources 68 0 R
+/Contents 67 0 R
+>>
+endobj
+69 0 obj
+<<
+/Type /Page
+/Parent 56 0 R
+/Resources 71 0 R
+/Contents 70 0 R
+>>
+endobj
+72 0 obj
+<<
+/Type /Page
+/Parent 56 0 R
+/Resources 74 0 R
+/Contents 73 0 R
+>>
+endobj
+76 0 obj
+<<
+/Type /Page
+/Parent 56 0 R
+/Resources 78 0 R
+/Contents 77 0 R
+>>
+endobj
+81 0 obj
+<<
+/Type /Page
+/Parent 56 0 R
+/Resources 83 0 R
+/Contents 82 0 R
+>>
+endobj
+84 0 obj
+<<
+/Type /Page
+/Parent 56 0 R
+/Resources 86 0 R
+/Contents 85 0 R
+>>
+endobj
+87 0 obj
+<<
+/Type /Page
+/Parent 91 0 R
+/Resources 89 0 R
+/Contents 88 0 R
+>>
+endobj
+93 0 obj
+<<
+/Type /Page
+/Parent 91 0 R
+/Resources 95 0 R
+/Contents 94 0 R
+>>
+endobj
+96 0 obj
+<<
+/Type /Page
+/Parent 91 0 R
+/Resources 98 0 R
+/Contents 97 0 R
+>>
+endobj
+99 0 obj
+<<
+/Type /Page
+/Parent 91 0 R
+/Resources 101 0 R
+/Contents 100 0 R
+>>
+endobj
+103 0 obj
+<<
+/Type /Page
+/Parent 91 0 R
+/Resources 105 0 R
+/Contents 104 0 R
+>>
+endobj
+106 0 obj
+<<
+/Type /Page
+/Parent 91 0 R
+/Resources 108 0 R
+/Contents 107 0 R
+>>
+endobj
+109 0 obj
+<<
+/Type /Page
+/Parent 91 0 R
+/Resources 111 0 R
+/Contents 110 0 R
+>>
+endobj
+112 0 obj
+<<
+/Type /Page
+/Parent 91 0 R
+/Resources 114 0 R
+/Contents 113 0 R
+>>
+endobj
+115 0 obj
+<<
+/Type /Page
+/Parent 91 0 R
+/Resources 117 0 R
+/Contents 116 0 R
+>>
+endobj
+118 0 obj
+<<
+/Type /Page
+/Parent 91 0 R
+/Resources 120 0 R
+/Contents 119 0 R
+>>
+endobj
+121 0 obj
+<<
+/Type /Page
+/Parent 124 0 R
+/Resources 123 0 R
+/Contents 122 0 R
+>>
+endobj
+125 0 obj
+<<
+/Type /Page
+/Parent 124 0 R
+/Resources 127 0 R
+/Contents 126 0 R
+>>
+endobj
+8 0 obj
+<<
+/Type /Pages
+/Kids [1 0 R 10 0 R 18 0 R 25 0 R 32 0 R 35 0 R 40 0 R 43 0 R 46 0 R 49 0 R]
+/Count 10
+/Parent 55 0 R
+>>
+endobj
+56 0 obj
+<<
+/Type /Pages
+/Kids [52 0 R 57 0 R 60 0 R 63 0 R 66 0 R 69 0 R 72 0 R 76 0 R 81 0 R 84 0 R]
+/Count 10
+/Parent 55 0 R
+>>
+endobj
+91 0 obj
+<<
+/Type /Pages
+/Kids [87 0 R 93 0 R 96 0 R 99 0 R 103 0 R 106 0 R 109 0 R 112 0 R 115 0 R 118 0 R]
+/Count 10
+/Parent 55 0 R
+>>
+endobj
+124 0 obj
+<<
+/Type /Pages
+/Kids [121 0 R 125 0 R]
+/Count 2
+/Parent 55 0 R
+>>
+endobj
+55 0 obj
+<<
+/Type /Pages
+/Kids [8 0 R 56 0 R 91 0 R 124 0 R ]
+/Count 32
+/MediaBox [0 0 612 792]
+>>
+endobj
+519 0 obj
+<<
+/Type /Catalog
+/Pages 55 0 R
+>>
+endobj
+520 0 obj
+<<
+/CreationDate (D:19990929132817)
+/Producer (Acrobat Distiller Command 3.01 for Solaris 2.3 and later \(SPARC\))
+/Creator (dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software)
+/Title (full.dvi)
+>>
+endobj
+xref
+0 521
+0000000000 65535 f 
+0000309415 00000 n 
+0000000016 00000 n 
+0000000406 00000 n 
+0000290993 00000 n 
+0000301598 00000 n 
+0000303916 00000 n 
+0000174013 00000 n 
+0000312118 00000 n 
+0000000523 00000 n 
+0000309495 00000 n 
+0000026816 00000 n 
+0000028309 00000 n 
+0000256757 00000 n 
+0000284009 00000 n 
+0000287731 00000 n 
+0000028463 00000 n 
+0000030669 00000 n 
+0000309578 00000 n 
+0000032601 00000 n 
+0000035841 00000 n 
+0000211807 00000 n 
+0000238388 00000 n 
+0000036018 00000 n 
+0000039072 00000 n 
+0000309661 00000 n 
+0000042394 00000 n 
+0000044813 00000 n 
+0000044979 00000 n 
+0000048444 00000 n 
+0000051586 00000 n 
+0000057463 00000 n 
+0000309744 00000 n 
+0000069970 00000 n 
+0000070446 00000 n 
+0000309827 00000 n 
+0000070613 00000 n 
+0000074509 00000 n 
+0000185245 00000 n 
+0000200613 00000 n 
+0000309910 00000 n 
+0000074673 00000 n 
+0000078389 00000 n 
+0000309993 00000 n 
+0000078531 00000 n 
+0000081501 00000 n 
+0000310076 00000 n 
+0000081654 00000 n 
+0000085860 00000 n 
+0000310159 00000 n 
+0000085990 00000 n 
+0000090347 00000 n 
+0000310242 00000 n 
+0000090466 00000 n 
+0000093894 00000 n 
+0000312620 00000 n 
+0000312254 00000 n 
+0000310326 00000 n 
+0000094013 00000 n 
+0000099539 00000 n 
+0000310410 00000 n 
+0000099669 00000 n 
+0000102968 00000 n 
+0000310494 00000 n 
+0000103087 00000 n 
+0000106286 00000 n 
+0000310578 00000 n 
+0000106405 00000 n 
+0000108618 00000 n 
+0000310662 00000 n 
+0000108748 00000 n 
+0000110424 00000 n 
+0000310746 00000 n 
+0000110543 00000 n 
+0000112990 00000 n 
+0000183104 00000 n 
+0000310830 00000 n 
+0000113131 00000 n 
+0000116183 00000 n 
+0000116313 00000 n 
+0000125285 00000 n 
+0000310914 00000 n 
+0000135544 00000 n 
+0000137257 00000 n 
+0000310998 00000 n 
+0000137424 00000 n 
+0000139750 00000 n 
+0000311082 00000 n 
+0000139868 00000 n 
+0000142891 00000 n 
+0000181146 00000 n 
+0000312392 00000 n 
+0000143043 00000 n 
+0000311166 00000 n 
+0000157935 00000 n 
+0000158769 00000 n 
+0000311250 00000 n 
+0000158912 00000 n 
+0000160119 00000 n 
+0000311334 00000 n 
+0000160249 00000 n 
+0000163456 00000 n 
+0000180573 00000 n 
+0000311420 00000 n 
+0000163588 00000 n 
+0000164351 00000 n 
+0000311507 00000 n 
+0000164471 00000 n 
+0000165639 00000 n 
+0000311594 00000 n 
+0000165781 00000 n 
+0000167352 00000 n 
+0000311681 00000 n 
+0000167471 00000 n 
+0000168700 00000 n 
+0000311768 00000 n 
+0000168808 00000 n 
+0000170022 00000 n 
+0000311855 00000 n 
+0000170130 00000 n 
+0000170943 00000 n 
+0000311942 00000 n 
+0000171051 00000 n 
+0000171881 00000 n 
+0000312536 00000 n 
+0000312030 00000 n 
+0000171989 00000 n 
+0000173757 00000 n 
+0000174132 00000 n 
+0000173889 00000 n 
+0000174084 00000 n 
+0000174475 00000 n 
+0000174583 00000 n 
+0000174727 00000 n 
+0000175356 00000 n 
+0000175967 00000 n 
+0000176546 00000 n 
+0000177301 00000 n 
+0000177724 00000 n 
+0000178055 00000 n 
+0000178303 00000 n 
+0000178861 00000 n 
+0000179429 00000 n 
+0000179825 00000 n 
+0000180525 00000 n 
+0000180781 00000 n 
+0000180841 00000 n 
+0000180875 00000 n 
+0000181098 00000 n 
+0000181402 00000 n 
+0000181480 00000 n 
+0000181547 00000 n 
+0000181950 00000 n 
+0000182363 00000 n 
+0000182649 00000 n 
+0000183056 00000 n 
+0000183361 00000 n 
+0000183440 00000 n 
+0000183507 00000 n 
+0000183949 00000 n 
+0000184347 00000 n 
+0000184713 00000 n 
+0000185197 00000 n 
+0000185724 00000 n 
+0000185942 00000 n 
+0000186402 00000 n 
+0000186869 00000 n 
+0000187140 00000 n 
+0000187408 00000 n 
+0000187618 00000 n 
+0000187882 00000 n 
+0000188199 00000 n 
+0000188617 00000 n 
+0000189009 00000 n 
+0000189471 00000 n 
+0000189886 00000 n 
+0000190339 00000 n 
+0000190627 00000 n 
+0000191007 00000 n 
+0000191449 00000 n 
+0000191821 00000 n 
+0000192191 00000 n 
+0000192558 00000 n 
+0000192894 00000 n 
+0000193305 00000 n 
+0000193636 00000 n 
+0000194012 00000 n 
+0000194408 00000 n 
+0000194789 00000 n 
+0000195136 00000 n 
+0000195549 00000 n 
+0000195860 00000 n 
+0000196293 00000 n 
+0000196671 00000 n 
+0000197013 00000 n 
+0000197416 00000 n 
+0000197746 00000 n 
+0000198086 00000 n 
+0000198411 00000 n 
+0000198796 00000 n 
+0000199156 00000 n 
+0000199562 00000 n 
+0000199940 00000 n 
+0000200355 00000 n 
+0000200565 00000 n 
+0000201004 00000 n 
+0000201187 00000 n 
+0000201529 00000 n 
+0000201749 00000 n 
+0000201998 00000 n 
+0000202421 00000 n 
+0000202837 00000 n 
+0000203070 00000 n 
+0000203524 00000 n 
+0000203904 00000 n 
+0000204213 00000 n 
+0000204684 00000 n 
+0000205126 00000 n 
+0000205602 00000 n 
+0000206069 00000 n 
+0000206452 00000 n 
+0000206809 00000 n 
+0000207180 00000 n 
+0000207479 00000 n 
+0000207780 00000 n 
+0000208033 00000 n 
+0000208257 00000 n 
+0000208603 00000 n 
+0000208898 00000 n 
+0000209257 00000 n 
+0000209625 00000 n 
+0000209914 00000 n 
+0000210285 00000 n 
+0000210592 00000 n 
+0000210892 00000 n 
+0000211330 00000 n 
+0000211759 00000 n 
+0000212283 00000 n 
+0000212636 00000 n 
+0000213549 00000 n 
+0000213800 00000 n 
+0000214106 00000 n 
+0000214533 00000 n 
+0000214803 00000 n 
+0000215142 00000 n 
+0000215473 00000 n 
+0000215800 00000 n 
+0000216034 00000 n 
+0000216298 00000 n 
+0000216518 00000 n 
+0000216735 00000 n 
+0000217100 00000 n 
+0000217373 00000 n 
+0000217750 00000 n 
+0000218148 00000 n 
+0000218474 00000 n 
+0000218841 00000 n 
+0000219251 00000 n 
+0000219581 00000 n 
+0000219963 00000 n 
+0000220379 00000 n 
+0000220604 00000 n 
+0000220890 00000 n 
+0000221130 00000 n 
+0000221460 00000 n 
+0000221790 00000 n 
+0000222132 00000 n 
+0000222512 00000 n 
+0000222853 00000 n 
+0000223131 00000 n 
+0000223411 00000 n 
+0000223791 00000 n 
+0000224047 00000 n 
+0000224341 00000 n 
+0000224600 00000 n 
+0000224940 00000 n 
+0000225289 00000 n 
+0000225601 00000 n 
+0000225925 00000 n 
+0000226291 00000 n 
+0000226545 00000 n 
+0000226881 00000 n 
+0000227232 00000 n 
+0000227572 00000 n 
+0000227894 00000 n 
+0000228127 00000 n 
+0000228362 00000 n 
+0000228581 00000 n 
+0000228946 00000 n 
+0000229298 00000 n 
+0000229639 00000 n 
+0000230006 00000 n 
+0000230366 00000 n 
+0000230671 00000 n 
+0000231091 00000 n 
+0000231398 00000 n 
+0000231668 00000 n 
+0000231974 00000 n 
+0000232342 00000 n 
+0000232580 00000 n 
+0000232890 00000 n 
+0000233185 00000 n 
+0000233527 00000 n 
+0000233897 00000 n 
+0000234270 00000 n 
+0000234577 00000 n 
+0000234936 00000 n 
+0000235236 00000 n 
+0000235516 00000 n 
+0000235845 00000 n 
+0000236175 00000 n 
+0000236532 00000 n 
+0000236929 00000 n 
+0000237234 00000 n 
+0000237550 00000 n 
+0000237760 00000 n 
+0000238075 00000 n 
+0000238340 00000 n 
+0000238803 00000 n 
+0000239014 00000 n 
+0000239510 00000 n 
+0000239745 00000 n 
+0000240010 00000 n 
+0000240482 00000 n 
+0000240959 00000 n 
+0000241336 00000 n 
+0000241788 00000 n 
+0000242290 00000 n 
+0000242728 00000 n 
+0000243270 00000 n 
+0000243701 00000 n 
+0000244076 00000 n 
+0000244401 00000 n 
+0000244935 00000 n 
+0000245157 00000 n 
+0000245446 00000 n 
+0000245953 00000 n 
+0000246305 00000 n 
+0000246768 00000 n 
+0000247297 00000 n 
+0000247976 00000 n 
+0000248402 00000 n 
+0000248794 00000 n 
+0000249209 00000 n 
+0000249614 00000 n 
+0000249924 00000 n 
+0000250424 00000 n 
+0000250751 00000 n 
+0000251014 00000 n 
+0000251416 00000 n 
+0000251641 00000 n 
+0000252026 00000 n 
+0000252347 00000 n 
+0000252725 00000 n 
+0000253127 00000 n 
+0000253436 00000 n 
+0000253841 00000 n 
+0000254167 00000 n 
+0000254496 00000 n 
+0000254901 00000 n 
+0000255399 00000 n 
+0000255838 00000 n 
+0000256317 00000 n 
+0000256709 00000 n 
+0000257276 00000 n 
+0000257621 00000 n 
+0000258527 00000 n 
+0000258856 00000 n 
+0000259162 00000 n 
+0000259450 00000 n 
+0000259714 00000 n 
+0000260065 00000 n 
+0000260411 00000 n 
+0000260646 00000 n 
+0000260905 00000 n 
+0000261112 00000 n 
+0000261322 00000 n 
+0000261610 00000 n 
+0000261944 00000 n 
+0000262193 00000 n 
+0000262593 00000 n 
+0000262999 00000 n 
+0000263320 00000 n 
+0000263706 00000 n 
+0000264098 00000 n 
+0000264443 00000 n 
+0000264868 00000 n 
+0000265261 00000 n 
+0000265483 00000 n 
+0000265758 00000 n 
+0000265986 00000 n 
+0000266381 00000 n 
+0000266749 00000 n 
+0000267190 00000 n 
+0000267544 00000 n 
+0000267884 00000 n 
+0000268191 00000 n 
+0000268627 00000 n 
+0000268881 00000 n 
+0000269103 00000 n 
+0000269528 00000 n 
+0000269806 00000 n 
+0000270217 00000 n 
+0000270615 00000 n 
+0000271028 00000 n 
+0000271342 00000 n 
+0000271749 00000 n 
+0000272171 00000 n 
+0000272461 00000 n 
+0000272802 00000 n 
+0000273218 00000 n 
+0000273726 00000 n 
+0000274195 00000 n 
+0000274600 00000 n 
+0000274813 00000 n 
+0000275028 00000 n 
+0000275380 00000 n 
+0000275737 00000 n 
+0000276072 00000 n 
+0000276424 00000 n 
+0000276764 00000 n 
+0000277042 00000 n 
+0000277460 00000 n 
+0000277754 00000 n 
+0000278003 00000 n 
+0000278291 00000 n 
+0000278642 00000 n 
+0000278870 00000 n 
+0000279197 00000 n 
+0000279483 00000 n 
+0000279809 00000 n 
+0000280156 00000 n 
+0000280513 00000 n 
+0000280779 00000 n 
+0000281128 00000 n 
+0000281411 00000 n 
+0000281706 00000 n 
+0000282038 00000 n 
+0000282446 00000 n 
+0000282821 00000 n 
+0000283213 00000 n 
+0000283552 00000 n 
+0000283757 00000 n 
+0000283961 00000 n 
+0000284274 00000 n 
+0000284373 00000 n 
+0000284495 00000 n 
+0000284883 00000 n 
+0000285270 00000 n 
+0000285611 00000 n 
+0000285941 00000 n 
+0000286222 00000 n 
+0000286574 00000 n 
+0000286894 00000 n 
+0000287275 00000 n 
+0000287683 00000 n 
+0000288091 00000 n 
+0000288179 00000 n 
+0000288290 00000 n 
+0000288510 00000 n 
+0000288937 00000 n 
+0000289313 00000 n 
+0000289668 00000 n 
+0000290010 00000 n 
+0000290291 00000 n 
+0000290656 00000 n 
+0000290945 00000 n 
+0000291445 00000 n 
+0000291640 00000 n 
+0000291983 00000 n 
+0000292300 00000 n 
+0000292657 00000 n 
+0000293012 00000 n 
+0000293222 00000 n 
+0000293432 00000 n 
+0000293781 00000 n 
+0000294210 00000 n 
+0000294566 00000 n 
+0000294986 00000 n 
+0000295407 00000 n 
+0000295871 00000 n 
+0000296217 00000 n 
+0000296680 00000 n 
+0000297098 00000 n 
+0000297547 00000 n 
+0000297908 00000 n 
+0000298268 00000 n 
+0000298554 00000 n 
+0000298854 00000 n 
+0000299102 00000 n 
+0000299330 00000 n 
+0000299619 00000 n 
+0000299969 00000 n 
+0000300332 00000 n 
+0000300602 00000 n 
+0000300963 00000 n 
+0000301256 00000 n 
+0000301550 00000 n 
+0000301855 00000 n 
+0000301934 00000 n 
+0000302001 00000 n 
+0000302490 00000 n 
+0000302927 00000 n 
+0000303320 00000 n 
+0000303868 00000 n 
+0000304240 00000 n 
+0000304355 00000 n 
+0000304510 00000 n 
+0000304907 00000 n 
+0000305359 00000 n 
+0000305812 00000 n 
+0000306347 00000 n 
+0000306704 00000 n 
+0000306973 00000 n 
+0000307319 00000 n 
+0000307767 00000 n 
+0000308086 00000 n 
+0000308532 00000 n 
+0000308861 00000 n 
+0000312726 00000 n 
+0000312778 00000 n 
+trailer
+<<
+/Size 521
+/Root 519 0 R
+/Info 520 0 R
+/ID [<5ee503046503ded04f149152e177d82c><5ee503046503ded04f149152e177d82c>]
+>>
+startxref
+312997
+%%EOF
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/fdp.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/gc.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/graph.3.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/gv2gxl.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/gvc.3.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/gvcolor.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/gvgen.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/gvpack.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/gvpr.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/gxl2gv.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/lefty.1.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/doc/pdf/leftyguide.pdf	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9368 @@
+%PDF-1.2
+%âãÏÓ
+2 0 obj
+<<
+/Length 268
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T0`5u5BP%#+0L'fi.HFEWg:bn[?IJdW4*;(dg1$Q;uJ1JRdoS7X14oCSV=gCF]S
+-EB]-&[3"(o$!s^\aoR1Dk0u-%B*mk4hd)J=4)Bq4aa,sIccC"^k]Wm6kZ$aTO6+j
+?SBl3U2CoSgfqq!ilFlp4)KrNloZ;0aXI!D`n4?sapn"3*Pr.$U<qF;-eE3%HJe?k
+L7G,6>1U\Q/,/8jjdOe47.T?No+Oq:.UbD?0")LSiSu!t2$RR(M.(3YA750O!$jQnp]~>
+endstream
+endobj
+3 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T10 4 0 R
+/T11 5 0 R
+/T12 6 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+9 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Name /Im1
+/Width 395
+/Height 279
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 20031
+/Filter [/ASCII85Decode /DCTDecode]
+>>
+stream
+s4IA>!"M;*Ddm8XA:OX[!!*&R!(-_l"pP89"pbD;#RgtD#Rh1M#RCbI&.K'Y%1Nj\
+$k<^U%L`p[&ebrm&e>fr)B'G0,9e<U,:=id-RU8h-RU;A^]4`J!>bcp!<FAEs24oc
+!!!!(!<E3%!<<*"z!!EH-!X8Z*#7(VC$P3:>!<WE*"9Jc4!sAZ0!cnAD!tbY9"X+L5
+5u@h"@3T]B'JbfE#8OL1,Jd:*iA26Yn0E%+nKgOZ;j*l\@roLE6mn1nZSiV!A9>`;
+iWpl`#mqLeKTnnpUpO1O<@AdVj7C4=jRd#+KpALB`RX)CAp/opVRFLqk4U`(=(c`4
+Q`%=5fB;lf86BPMLmY-NaOo_O.60t&BmGQ'WO^.(l1lei8m5tUMOLQVb1c.Ws4mYX
+!#bgj!!iT+!!#4`/VYDo?DA8ee$K_-)Y,8/8NA,nG%:8VRb>3['UP'q)PYZorr=*'
+X\,j)'5b"S-pMo<YH*/82uEaW!6nZ\XFHCJrrB"4o2]e1Iuu\f!ri8FH+pE[7,Hf&
+rrC;h^8ugIDtjM9!1NM->Ps>WrhBDmbuqc^J!+RH!3![(?>lloOZ31>rrC;h^9.B&
+hs_$R!&\BbZ2R=qrhBDmc$@%*r^>99!)\7.]\caSaZ',!rrC;H^9.B&hs_$R!&\Bb
+\+p\e^b>W;S*J&i-Em9(rr=q=qR?86;uK/b!1L6B=T8@Hhs_$R!&\BbYrr_:])2s9
+!&\7s[pY.lAIJV!=Vd:"ebJuP8s%":7dVD*RW3I=DkqI/'=_CBcmVU6OeQgQ!Xbj)
+fUib57r4>Y)cGZeAMSWF8H`cD1'MGSHiF((J,djsCa:3_%F?Jr2`<&PfO_II>1OXd
+^O*!lq54mAGa+<3E!lQ:DY3EgiL+QCHLOR^TW+dESnL5]fVd5$rrBV_^Zd5cqI]S^
+Fn@<d!9kuNrb9Lj,h**;M&RQ/Wsu]9Ac4p0h\Ue7Q!s[m2!4XeJ%dPK^XB2Jk+(=*
+Dth6&r?YQq9]&]b^4kB-jsn:JC!H;Trr@FPJ'q>Pr6q/#%K?.7p\t4cYl=]lF+$Kl
+h\Ue7Q!s[m2!4XeJ%dP9rr=cS+4E0u)u];Nrr>Vk+7i6GW&OV5li*'K5N\Kn:iH*I
+fDR!tJ'C!fT\o3r^\UR,rrAL/I6kGj(KLJ8R&^b^P\`koN&O!3^Zec@dk'bOUoQe)
+#hY3?=RG_TEAt:-<4'bdJ@SZ3F^V!2K>sggl>n8a&dBgu:_h&[F(ZWVMp?uBNc;&b
+F*iDLT"e(Uci;ApBL%S2N$8&ReJS!,^]8<uNDK`&rYCH@Z,BVFm1"U$O*i%MbiNCO
+NZ(8-W)ltF"''k\74L3u'H;Ht+:n.lo85V!,pVc0rS!J)r(!AdDg\Cde;/ub0B4k,
+#81PmEqhYXC&;5)mBC*Z]!,>o6QC)oFXW3V,!r\+-D(P_&uT[YkBc0lD/X;;OMcJb
+8'F)/82R&uFs<YL"ai6hE*D,=FW?IAEjZjn7JSf8$!pRG!3Y'u-Omb&J)?1a!!G*(
+nG`L'(]F\PoqDBcIP:U1c0Iarr*T4BS(EGopqQ;c2m!VfnUKJODdFO[ir9"p%,S?U
+n&>;,Jf278J)?1a!!G*(nG`L'(]F\PoqDBcIP:U1c0Iarr*T4BQBO\\O/Tg%^M&*P
+?p8T^=.[+DEiX78.aSns2FHM`eM"$J]%#`$4$9f/6Q@jP%8g3o7Z>#NNW`*a;6]0U
+^9K%8orloo[D@bX95b`:eeTcVJjq!DAn9rONVho=dNsK:Q?\j(?J\f7LH(PYQ5qDT
+Sa#1`"R6d]QQ[,+\2^S5,HF?8@#(*a(&ad8!fed,;-J>19dY4Bj!+CpeHsj#:u;-T
+3FL<0Z-+`[/47YQ!8qqk=;=<_F^?T'r_\MD"A_///ujcoQ6[`P5UYJg7;_gm?N!1[
+g$qQ@E6V*T5H[WK2qAD&g--mF'&<lTC"%P@Ym%NCl4qm#-fU-!?ePbDo`m..i1N&@
+@5Y0`ZGSSnQP'h:/'&#R!Cp)H55jtPkmJ$tC5`'#J$*_<(*E+t(]95!l^RO#L]"PK
+rr<8<f/Mq%&,Bsur^JR6c2'cEr`Z&r!/"YES+MDir3\un!$`<Vk5?H3rr=WJJ&oV.
+\\C[;J'1eun8%uDIZUf6!1'RujC8,h>i2>.5NSmupbi&]^IVIVb>_j<C]/='OKe`b
+QDhRZ@fHF5:2B_?%"MU%;QW70Hp2h"f66V3Z:1_2*)XA?ZrKTg!SMoS?O[M?NRjq;
+'QD7\Ul(AJ&K<5X$qce]GM`I(h8=B6>u$-1n]A^(!74%J[',K+rrC^VJ,dt:jD.t(
+]l(\;W$@lm]t"W9U:<=%5nse;BR4;urr<RC+8'BTrrAj>^ZM'$nFhG5!*6-bqF?JC
+C!-GU%qm'XC:!p?Uj0Z:SDW;m"9,E'J+Sd<r6q/54eR;TWmC[,ir9"IF+8tP&,N\:
+rrCJ0?h7$2nFhG5!*6-bqF?JCC!HVucp-gGBE%s&nUJeD^Veb1rE?<&!9kOXq561H
+HU.T2X&Yej,K9Z_2!4f<%qm'XC:!p?Uj0Z:SDW;m"9,E'J+Sd<r6q/54eR;TWmC[,
+ir9"IF+8tP&,N\:rrCJ0?h7$2nFhG5!*6-bqF?JCC!HVucp-gGBE%s&nUJeD^Veb1
+rE?<&!9kOXq561HHU.T2X&Yej,K9Z_2!4f<%qm'XC:!p?Uj0Z:SDW;m"9,E'J+Sd<
+r6q/54eR;TWmC[,ir9"IErQ-Wg'@R[XT&:b*\[>e3EP?S[C)=&@rGu_G4:Ys`tBjR
+I5]r>"t/K!k*#1eZ?hiZ<PJ=@d0]J;N$07G_:Q^ls4$Ad_cfj;*BQm%PQ7T6-/aH>
+'TgNa2;aKW$>iO?02K$eH1%.u[=og)Me,j[:_p%`S=5I"RXBi:qK:GsP%aW=HdXC*
+ZuIp/TQ8i'U)h7h([9OtS@41I!oh?<#$;UL=Q9l94:LZEddc%m!$30M.#VASN(IGn
+&t=bL@oQt%/&l@+EV>Tg@XX#:<ol1@c>+FT3An0^'Ggf^X"f*`)hX?q+n=U%>[lB$
+lQNc_mFbZVX),#6!ZsZ6GSYGZeicZJ*=khM_ATNpk.A&;hcFEG6BS3LNs+Plmh:rg
+o&2r.Ffm<-D)\DUhHNFfD;m2kN@8F%]im+)pjU"""S;eFWG2A,O8]00VJiJ<J%d0-
+!.\G@S*H<3mtguDi"u6%qPC+ei]m2ArgCL"C&[mgrW.MGDlQuj^*EXXJ7%Q1lB\(2
+M#RJ5(]%b?V5O4M5PPE]RD,Y7rqMQR!IptbW`jnd,Q@ao?g4'FQCmW%rrCsnqI]T#
+Vu,I<p]^Yb^8YiGplGCTJ#7.a>(=72rr@RVl&j:S`>-.SVj7HfUf6co!3A@"kXKjl
+rl?nqeMI-;rrA)YSc8[E[pSe.\_?WFZLY<lZLY<mAS't7j^mObj^mT"48H#Y!$05n
+VuBE!-i&8b^XH4j;tTm)\b/*l<&+!*QsMop^utaKn(DthH!,DqH*XaHZLY<lZLY<l
+ZL_X<A'b/Tnr6oPrrD([cTV:.f`ls+f/*?=rrA)YSc8[E[pSe.\_?WFZLY<lZLY<m
+AS't7j^mObj^mT"48H#Y!$05nVuBE!47_/*4-ndoL@>*h*e44:n(DthH!,DqH*XaH
+ZLY<lZLY<lZL_X<A'b/Tnr6oPrrD([cTV:.f`ls+d51^7rrA)YSc8[E[pSe.\_?WF
+ZLY<lZLY<mAS't7j^mObj^mT"48H#Y!$05nVuBE!47_/*4-ndoL@>*h*e44<n(Dth
+H!,DqH*XaHZLY<lZLY<lZL_X<A'b/Tnr6oPrrD([cTV:.f`ls+dkgp9rrA)YSc8[E
+[pSe.\_?WFZLY<lZLY<mAS't7j^mObj^mT"48H#Y!$05nVuBE!47_/*4-ndoL@>*h
+*e44>n(DthH!,DqH*XaHZLY<lZLY<lZL_X<A'b/Tnr6oPrrD([cTV:.f`ls+eMI-;
+rrA)YSc8[E[pSe.\_?WFZLY<lZLY<mAS't7j^mObj^mT"48H#Y!$05nVuBE!47_/*
+4-ndoL@>*h*e44@n(DthH!,DqH*XaHZLY<lZLY<lZL_X<A'b/Tnr6oPrrD([cTV:.
+f`ls+f/*?=rrA)YSc8[E[pSe.\_?WFZLY<lZLY<mAS't7j^mObj^mT"48H#Y!$05n
+VuBE!47_/*4-ndoL@>*h*e44:n(DthH!,DqH*XaHZLY<lZLY<lZL_X<A'b/Tnr6oP
+rrD([cTV:.f`ls+d51^7rrA)YSc8[E[pSe.\_?WFZLY<lZLY7\mNAr6<oR)93n'UX
+'N`/RKc7D',1s8kH;@B,LUe#d6q3FD[:_kJ']lnN;m$AQ27[=%,ec(%=X&+QA6C-T
+l<2`g[u*3Mg83;0L,ib3(0FjQNOMtU)+aHG*LE%XQ'[c&RlKm!\,:G$5+hX/f^I"%
+q!M@9`Z)\fS9b._n(DthH!,DqH*XaHZLY<lZLY<lZL_X<A'b/Tnr6oPrrD([cTV:.
+f`ls+dkgp9rrA)YSc8[E[pSe.\_?WFZLY<k)iLb4<=O")65sLu_.n?$HJj:V:G;Ue
+B.JV_8\]50pC_rLr^l8K[J]pWh0LUNqR'-`L6>;C^1nGuLJP7cIoR[%2(@k49TmlB
+e<%#cg:5C4OepnaRQQ]pEDrj"60ZCagp6u7?i`Lm:^qpl&ktF?jCt@uD`\lEYVD*A
+nSgZ.Vtj`\CT6(]$%!NW.2:;-+5OL(:h/M7D.J_pb[J"C#UTa7-bg5MCjW9S^'`'+
+bKA#QS9OR/r]?Df:]-\uGNH=3G:gSi%H%(Y4TEq"fm-_G=a=.qZEj&,o!7hlo!7hl
+o4;HBci4"9NElD]!97,+4oYN8#(Q['1]4ue!07&Lrr=d_?hFE0g@Fg?o!/QR^8CmA
+9/u;I8<"qM9!'(O1<D]#27SXiW]1jj-l"hpJ6+$T9r>f]VQkPQp%DshqtI#d=N.sW
+GcN_?j^m?j:ZG)]43_gU&,]mTXIm?SK6$OfP/A"(R&>pTNP<h#%&`4t"o<nVmpgD-
+NmPuHke?4'_!h]hHXL,H>*DLcCRn)JKPJT"X:2BX0&[W6E,iL>.J_o&%7P3'PX\Q5
+a#Z2%OWHNnn8r?sJHpbBfi`U,NrEgDa)])^rrA7"Nr6?c!060Mr*d5;!/\ags46Yl
+H!,DqH!,EuZLY<lZLY<lZLY<mARo;srrDVL>l=U%j&XJhrrC^VJ,e+Vr4`12NrGUL
+!&:rio`2PVo('*WY`e>2]t)WR23ZcD4bOq<Q(-j$%Xrta'13K(R&<B92X6;'#O",`
+lIU3omhEL3A#6TV0a%AGW6RW\Epsd`7t2D!K&p1iG1gAkP[j^n'tC9Qa;Xi)K.mb\
+mklU4\o8<ffA.0LVu2mt\TeTY;T0ZN')Jo5UW!;AcDUT:LbW87)tf]r^YX<%8UoWa
+:)@EfQ8lQEIDZcuS*G3]J%\pB(VFq6+]:E1'-s2B]&5/=8^kq^Up0k!UsC<+`Gs#D
+lMSPGM`3:eZ%_B7]4:cPVqP6UR-g0*dqLCaB6U.po#Qq;M&Eh%;m7*YQ'[t"n)h+W
+G:YqMq)6ldOD`%?[pfJ91X)2*`uKIV>N(\4,9m)N4nJ^#ll(YK/G,p)%78Y*#p`hj
+&"m[Fj4.a$'E!9QIjEqB9E(sRrr=-ST?0%iP5bN^\\H2=-h:"3!$o>EY&Ek(M>WQe
+aY3LkS,@]/IjEqB9E(sRrr=-ST?0%iP5bN^\\H2=-h:"3!$o>EY&Ek(M>WQeaY3Lk
+S,@]/IjEqB9E(sRrr=-ST?0%iP5bN^\\H2=-h:"3!$o>EY&Ek(M>WQeaY3LkS,@]/
+IjEqB9E(sRrr=-ST?0%iP5bN^\\H2=-h:"3!$o>EY&Ek(M>WQeaY3LkS,@]/IjEqB
+9E(sRrr=-ST?0%iP5bN^\\H2=-h:"3!$o>EY&Ek(M>WQeaY3LkS,@]/IjEqB9E(sO
+iUb?YEAVW%'^[HQ&iKX5m)Oo$bMmJ"SaL*ZbI8uJSCZV:c;P#Pd-^_0A2X3>Jc>`'
+#(Q[#1]4ue!07&Lrr=d_?hFE0g@Fg?nur6/Ut8e?;@Z8C,.aA!(mGViBsKhRU.T]*
+!GEf-WG%>&BDm-s*leIp-&O^XBVn4]2AB\@)+aK,!e!gjD<rSmJ*!8BdRJ`:@olI=
+W;^%Z6g!-[]YH,Ud7^MtS3T:U_.f^)b0JdBl=#^G!mBLP]W['j2qsKG76;(m1I',j
+5`-)s%WB`qcb8()G#-g*\R[oa=,^MUQnCAYM&&(8+t01[J,gVj%";4Y5Ns)Z*FlF9
+VmuD3fRL1t_>563TCC+(6pAh=-]e-aU7&dTSD`b8]\1>T28A1^@J'R"agT&<%oS`b
+e24j.(tMc>Y/lUE:d[^oe-"a's3d4*Y'KU%>g!D]qPpV>6JV9sM]!ME?\N4K'7VLr
+nbOS,<Di0!RLmlf$`]4TWg'\]a,b&I4K#)G%$Sf67ZbM`=I"334FYZ9;>,]45>fC0
+nj;+f/Zmp]$rVC,'LDjY7d\DO5cne/`?30`a*A\XC'lSj;X0bleO=4uET0$(i-W3d
+7qU3qf.;=[2%%*3'R>Tc1tbbb-fqa2%?'fJ8V=<T:nojXZ8um#L4RiRGS.4$rrC3M
+S,QV-Sb>:s2uK^j^ZD_Dq`>naS,QEph0ulAmV%*IDu!G>o_RS;n=fiL^ZAZofB\?$
+`eXD&rrA=$2uL*:rr?hErA/rG[[[8#(5&L)qI]a-Q#/`mY-0Js+6f9o<OBG'\@d2;
+J#7/[<muQA@b8'/qI]a-Q#/JX[P%N%5LVRhX''asEG='%rr>aMnu\hUp!r0a6iAfj
+b-mf=>8EdK&+n-H!%Q]@q.s?NcGsk@(:3qR\[/o"nLi4\#ng&?1aNtm*BgWNSc6D'
+*P2+!UVjR;b-drBDV;i*!:5>&s3ie%^Ae1nrgj&h0t1N_!4ghSo!7hj'peT_Mg.pP
+pH]HorZ<tH\CBZ!p28n(YPRd/L0s^S+6/!Y)iL)#O>NkY4Ace.AoHd")j>jO$]Ej0
+#GZ4keQT'3nX7nUrJL"%:(rU+9s*!I%>4oE\rkND']ed.MgL8q$b9`L5jm9@OA>p/
+RWP9+(^:OF`KZ#%`@o0P5(&->0mG?\RJdm1%D^c8-joV:=q[o"e<,><nsP*/Ai'Ke
+PLp9KV5\6KXZ3,CN,BQI5^I`kIF^*PIT]Nq3k`Vu*o7)ui`5+N8&uFKd=\a1o4K*A
+f)G`1jbM=b!%-GEf)Ga?j\P$Lrr@l<s4!Qf>qF4ohMd!k0c:\//kS-(#3(p<_hcU2
+`_TCRp<c!Bb9`@X;hKn+&SVc$#mR5A?)pX8H>[0"\qK:p?TP92;PT3<5\e?fidN7p
+Yh8A1WMgPG2=*-1VN-``dLu+=at*A/;"Au_nJ"=GpF89rD4[T)hFNc)V].E98c/']
+_A2qV5t(%I`.NY[/PK441fc<f?;'O@K>o`'R//l\5I:50S[!CICM;Abk`Lm$1m"^<
+lFS`npo:]6hQ2*?L$u'X*j)egl"3AOIe$C_)TGF8Ws=S@!#7@+n?-$mY-Sk=P9uI@
+9VNaO,#>Ym]U`dOOi7/T,*b7:<8afmMu/\gbobJ6hFC<E=j3lO.`b.Zd\C2okuqsS
+b$!l6JnpbP.HHIl=L\'-J4f:EfX>*e?<1B5?<1BKXGhH)!<,irT:c$rg#p-I+OC)<
+1]4ue!07&Lrr=d_?hFE0g@Fg?nurjiqph\G!6e(8!7Wm?,HT\<@[>X:P!'\5+]Y%s
+F_-nM$tuVC&,Ng"[7.jn*gR2>0ofD5NR8qYe2"cCB&Ds9Ul5rjRR5#+At%\4)L3`7
+T?=O6<VB:J8Ku+mb3"S3ZQER)E&O%%8#KPt"XRj58U]ZLN^NHF'90<t!(N8[4RB?P
+p=oR$3Vu&4c)SM$`rs_,"j2.4`["Aq/(>0YPk>0&,CBs?qTo&ED]nJ.5ab.</O6N=
+b(oniMqd((F;rVBZ;]84JQGJ9k)9BoHW4GmVsba$0DTI)"+S<G$d8:aX9ZHL^bYgK
+[B"J6$./Uf7*GT1)dr$6]\1>T28A1^@J'R"agT9u^\iA#hWOk_TE!K2GlU*5ldpui
+UlZF]:qmgInT2aD?PBjdH?N_89\sCjN=<[+d"0C=)+.)kV07;<7bbGGVYFalUJs[_
+7qZ]`LQ/m-*/F`<"Y@hF'Or>r_Ou9?ou0d;qTMY\Y7&MogQdb#Y:a3P?tEL?-O6Jk
+YO(2DP0'd<f$Htk;d6rR+qVT-!i<DHhj%^kHfK$]X_-"`ik2g8Xjs+hH\r#HKJs3c
+?L:JQJF@!>c?LSFeYG[FR#>9"5RY43W7@&l:"0N!fkPA]`MM?pgGJWXQTqTUQkF.-
+ksd;I.P"aErr@?"PIAD=f,@DX4RX]JhBdTgEN9'Ye)8"/e$?a/5QuHkE5m6S=mb+5
++$rb%N@Gn*Gj'>ncWj8+Vs..1K@][/bL:o(^[kCRYG_@oC[[-LDs:%[goKb+492#o
+=,hNpZ17=Vm>9M!Rnp,5@Ee=*_79"[RB7=Uo&J(;[`uijoSE0JomIARH>gjUhih!g
+YG^<dYJ+f<1O-,PE1W$9ccE:7qmPTS2&o3P?OGhpTUO^=PKE)\?:bM7A-!p]Kc[;9
+h[!t>VgqXK':"oLQ^]KM*e41iP\TCErr<tGH11aR1]Q&_r4`12NrGUL!&:rio`2PV
+o('*WYSDoe)N4<)O\b[)6AP)9$a3aUI^Z[=8?p>`Nm(X!YG:>E;fVo#rL%n^%oP1T
+]4j*fHV9bB6#bf@R8_R1KbbgB'$inF(niPO@C?6fr[g<9J*!?"Ys&6Jedc%W3oK?.
+W$A;glmc1C;I><=Zc70S0F$[7E'K^B$V*c#A;u3d!6WH!#WmVD`3(`[/HBRcj+'&'
+b3FMLDF@kOM665=Zo47,8sT&2N=65\r`LU'<-WsjHnmLShs3%5*;(an.[O&e>9?N4
+>Wkt*AT7bt85or=e>f,]kBI42!9(H:V!+ju<St"k%&s=mjZ-30V@Lblc('"L>Q-^M
++&Dg(Cl;Nt!6:GOkPc]us3R9b?2FK&I1?sm?D=qWi:shdTcY))E6]=dCQf!iV@D`^
+_9]%^."H;o`4QJ@C7a=hgu4g>O48IC[/!nh)e>8o0dru^U,,7%Z]W44q/JP%k(aj-
+j-o4Lk0^>A=K\Gj-;`Jhp!C(j_N[N"l>O,Hoc"En`7S861<&P7g;NMM)G)jt/DR`G
+;5?;#DF*OGM!J+Y,>!o(@(.o%;YI:3\-dJeI@l%^L]susd=YmWW1u2sOKcsp(p&6H
+VVG28b8kdA*C)]=hZUb(G0m(u,E-W@6kq&!D:PX^du%^Jj^mObj^mObj^mSsaN'qQ
+!9G-0q>UH7Xe'n>!4!%5d51^7rrA)YSc8[E[pSe.\_?WFZLY48SbDNejs@e%$(B'9
+-<YHn\j,Vb^Z,qIgjd=5ppTJ#E*TY<1i3r-aW"\!#D-)$EG9OMR+LWp+896(pn.>d
+7pck<mK5+,H$`s"m-eo2r0Yj/r(^8.Np.H=Ot]9h=l#&;"*-srYcdtPSOUW]gImHm
+Q73CuAL9C:b#E=:/H'`7EW6"h$$;^WdFF135qT/g%'L;;MVKn0M!uKaIV]UKD!Yi3
+7ug1nm&]SGCM4rLRq?b=)#jT;h+uLY]p;IMg-FG+\E!aQfL;^;-db`qq*]DFI]ID[
+EG<47$DA1nfIoi<[2q;m['E1Le?3#?Wk>'jop.J./nt2T>)i:NVDD9,bF`IEJl_mO
+<]Qq;^BMI,=a@?6rbI#(El7/A!0_8^COc-MVt40n!5rsYd[GF`lJ1f]__S^##Gb>/
+XHe57qL(l?D25AdX%I9)I;0'h=QN&2R]l0C"AV86+@<7XDh=5J-O_V?\ON1U.u4pb
+=ZKHLTA`o\aEXd\nB.lK&2tQqQSa$$(UiI#=u<^SE_I)OQ/,,m<Z'/\]b?;'!&\u^
+K;A.Air'a14$bqO0hB-Y.EIr6[%)m5Zjb^__"WYO(/`d[W@CIQ5hAr8,\>Shl8K+9
+G5O$VD5l=&H5a.9/Fp`20cP^AUT@?''b#t_<!KI#?*U?>Urqg/:,upr[<.6g=N[_&
+c33?@J9(Np&ekAdPW_@^6`n[Y10a#ODA3<f.\lOs)_*FG*hK+UmR\MDgsUGCOmUsH
+MT$r'(NI]E3cWoiY]$9<rH@Yp+'miD`*7Q,]iX1XJ]j%$*aYK7>\j=6#e*=s-Fi2d
+.JP`>OMd%h!_@ahT&\S%CQ5X/Rc!EPUB`PJntYb$Q"*fpgMT5dFkC.9l5(!_M`TV3
+1fg>ood+^98[r/>BRo`kVo@9,7PB1./]tl5[f[Vtb0Nrk<,PAFJCfnXBR:_AP$H$4
+)n4uZGoE@H!En*<6/nMJ80'nn\0id[.k`e]7Qg\Nrr=Itcd2SJD"HQ_OD"UB1]4ue
+!07&Lrr=d_?hFE0g@Fg?o!"ZqEuiIY0j-/IjGGAkm"GIOEUKEf;uEY(ZuMlrUerOB
+j%u\LTE%dsIKI6oe&!uEeB/fI+sf+4]iC11Y>BEG%_3(Wo/<X5[D]u.-sc2jF)*J&
+/LqTEXB`F]6:[mhW2Rg<U=`dC,^Z?%\;Z4$=a7qP#,qn*1d)4H^WOGV$)g>mRU&1T
+VmUG?'mdI>P"4u_H@M2U$sB`@>ApX1"qC]#+P[\UTSdlqCeDi!#<Su?j)K$(Aa@/H
+T2$uQPTBc(asR@%=#TA`JOq9R_;^Q!7i`FpoKFL9#B96?Bt(OR[(BFH3?qi/-:>bI
+nQ,UPoQ:BD5q:1hF"%9'<HTO*6ON4AbKZQ$o3;2UQ6/p#Rr"!errC*)Hu=Gn3WIU!
+IU*i/?AMH!8Vfs_MU;qe6r@-cgM`Z%H9PVMIVES<d*!N2o#3#"p_%*C=f)!]+a"fZ
+HLHJ;2%:loWMZo*\heY/F6Gstpi-6'=r&E>-Md,^%-"d68ZK5s*n'/FFcp&V"F_O[
++t[+n3<a_W`jr81ZC=`ok-L?9RNT@O7JII)As$0F#--IfgY3'JLJ5%Cj4CT")f$c4
+7<F\6:?L+ge)L[Xi`N\TG41<VoXV,7[Z]A/=lu#@j*;AL@juY.J2:#Wk4E#geFCO]
+?>._;(S]a6l:;]TQ).QHEG'o^T2UffDI0/q"2@QhD(b3u3Qji+`Oe[G8gP`*O@AEW
+a5D.@!.P/eJ]M]<(p"5YXhn543>UaWL++E2Ua6G'8tN$tM^jV35X*#J9r8pX97(_#
+bQcIkNWjl$=A$pqYcAgn3I'PpP_Rc/2cAN9YV.dU8cp7j.:9&[r\#6iKFgiba`?B1
+H!VoU:UeKLbJa@U5^"6T0c#[@eE#bUM'S\KGdK5f`nj2HaU0&Rb5J$$lCpA.+ER_m
+ijOisf636r+GVJY!E'-sA!`IIQ'[sj,9D@7!0h6]kPkN#[X%?@a><kH1]4ue!07&L
+rr=d_?hFE0g@Fg?nI*O$W`e+_n`T+(o'ib3_+R\<oqk3#I7!^D<tJX$ma@ldXhU\)
+<F;j!Oc)u=.1TlaZ<Lo(/%PU9BtBZ`(V_"i\HfpB8Q:b7&*(Do,bOO2`7I1&n%f;!
+B]0Pu%qZ&'Wt([#MS]YZQ=^F+8>0"pIa\FsaoQ,J(^T@eI[bIgHPO2BWk1VUa[Hgu
+>^s@k^tkSY!C,Zc27U$$]25t57ll9!,t2b`q]KiBkfD6Ojdpg/fHc1#%fm[LU+#gG
+gbi2_`3A&GfIX&L^WiR8R\,\#A4'/Com(Zsm3R?E/7H8\(>]Qq\Rep?=R.Q]D%e=7
+j/%'#N_BAdESjO%qr%GeB)Nq>]XBaRT_hO(*hVe-GoZbjS+NhdqsNYHOY2.KQ5Ai_
+`O2PKl;8hm4fXYRQM1ZDPoQQ]bZ%DdHQE'Eq-O'[lV=mCinNb\.naMYZPG%gj7no"
+N3DtUq&DN?c('"L>Q-^M+&Dg(Cl;Nt!6:H&f0AdFs43Y<?aL17Ao!$;n\N!G$-fLB
+O++aS11)-uJnoVmN`]AI?IDi@91]3m"9.S`DmbrQBjQe:f6H[b8*Y_6:.j?-"\7o?
+X[)42O(eI3osgt`!n5^R0CJ-)T;^OT*tm&s>\`#b?JAktLHR\eIF#&eDariY4\\^R
+io=OX6\oJ$j`K..QYC9piqgp;YlLsNbUXipG4!`lAb-isEGKY'lqe6aFQF'!h8dFu
+'2JIRnKo1>XR5=&PNnqh9[SBRekS!2&bk%Wh[/b/gb5%$G;dbU:n>rt`-.0@U4^+J
+3AoRXdg+\"odreW&Ue$C.5WY?3@LrfGu:R!0tt?iV9eFV]_$LGI\QiBHiEj&:\\gp
+kWM:QFA.7\%#V<BaJ%OgX8KB(pjSjhfe#>-I^eT5-?Zh]Kj:hi?\'Usi`0Xtn]1M#
+^6*oErpW7W,P;lMdosZ3S\LYk1K#h@e41pDc-/F/3C$(fM'rYka_IMsEEb)tQjLAh
+]eW2FWjNDMH>6&%MM.Z%-a!cubKA#QQ'%+lrrC2!F7]D3NE\O>rr?RIs49()^Ae1n
+rgj&h0t1N_!4ghSo!7dG@ZG]/JlUnPMG`!E=AY'j$S?13o_hq8F)S2$au>Vh,pCX8
+b-dM'SCA\rlbrQ,2U$@"i%%%aW=GZ[AXA+Dn;*0!r8\tBOC*B=q?(kS1^\K>.J2Bj
+>^T*&h,j_5eru#m=DgBsR2+uFa9,55'u9RM]J0SEL>lh;Xjlc!\*Y:.<!(+mB""tQ
+[7+3X?;"1-+EM.0Q?I"c@S&O,.^TpR0G2$5cQ,&$ES0%^irD7A1!$p*!)t!4,\(%O
+L?24q(,p'Ip:_5:pr&&='B%Cmmu,q&gY+a2(GbOb=*\A?;F2-K.k<a_jEb3m]\1>T
+28A1^@J'R"agT9u^\iA#hWOk_TE!9-r`tj"HDqFV(rWT-",`[MIuCKPCb_)9('l(L
+5HUE5HRYNdJk=uk:JgV+<Vo4IWDgRfNKVUYJh)]N"*=.6A#-^[&i7Im&o\JWEWWHA
+Y^@gkjaprk/AlN6X$#7O!@"sTM/i_t,,gIIoQ2VD9)S2T3UQKQ)?Fa#B-?.l,O(?4
+H-i_=\12\$Dk8c4ddC4N^6gEY@Zb+G=:Q$Yp0u;@N$dMXIf=-#4DM>A*fE1,"!#\,
+,=hX=,N=\^:nNKSf!MCi6V&g4Iom<k7tuLg(_TV8R91aDC8ua9g4T41VCQutK-ZZ:
+hRp#A?@*jjT%ooe!q4,_=B,2DHp6_4>Ztlr-&\.+=7m5g/,#+c%7]WY1LaDOB<kYM
+Te'cWa=dIJFeP_a*.!!"pkj%rC1?`r(6V7.&#gh[_[N1L9(O5`'^u;%I3di:%6A1i
+U8r]gGou#g"=sta<.s,+E"@$A*76f8n\1bB]%_mP&#'q4X_pjCj2h/.mF)f[JfE(A
+47*HU,GLG\BZQ;Nl4#\IFuT_!\Ul)"0F3tIY)+BR"k#a.&]%qT-2N>kRdZ",=a=.q
+ZEc4JrrDjaY'tljX(S%(!:5>&s3WY#^Ae1nrgj&h0t1N_!4ghSo!7hj*i?$IiopJ!
+=gurr%ESq_O[/GMb:*,$C<F[:81I%o)hJT?JF>_Nj]siqG0B/VTD5Rr&cVjW64!Sk
+<&_5pbJ6##\Xr65oLV2jrrCQY--uLS&n'JuBE"/Pl4(C:)!q8&itfV0rrAXL5N"m*
+i7nVbqA3fs&D^*YN2T!05OiQ\(Yiob$?;fZmQN3l:K2HPbHrMV3m%BEDde8`"(ADS
+#&LrR]\1>T28A1^@J'R"agT9u^\i@Y`om=GTE!?/ra#Y0nroFG-qspgO*:KZ`Xges
+h]teiFmWXB4#dcj=np;jU0V@nr@k8[H?<Z4RV[?"(V#OM#gXK16$ZB?'29Bq@p&$o
+MTCI[Xh'N,*^0os0!=e<"dQTVb.t52%aF^:MnOQR!kTLAHo,#h)LH3`<D1#1V4<D\
+VmhVgU]U,^REm,+K`#,iGU=3>H`8$S#1M7)gGEK#KTIZgrJG`o0X]M;M-68QmiCP]
+TiMc*_OdD3pJQ9,aHO0:4n1P/ell4YQ5a25Mg&j).MB[c)l([r<7+3T:Jrq<rfddN
+\'nh>=q[F$_ug#T:<PRqOE'(B%c"%oNIeenrr?Ac36oK++[JJ&K`"PB^,U_$(>Zsk
+M7K8*F"p[JM(6H2(R$N+l2tluVRW_%@ditl4XgN](R]quOZjja[O&ABX1/AJf^$Jd
+H0ia!YcO\(!!l+8:D<WNgq*%52:i2]b/LN5F7BgH+&l7TE'6]pT(HbMrGcM\qR7/h
+`-IA@OJ#3j0?,u79g6nB6aqddfd6Q;5dNiI<p$\%MipP7(mMCFZn9ng7^%+ZVV,*t
+=a@<Y1$AQ:q*qN9J+9RPT)SfWK0TCb1]4ue!07&Lrr=d_?hFE0g@Fg?o!7bjf&8/3
+-FT!O2GNDRMq-4RD:NFZMZij.Jun@r(s>T?>YKQ;fQ?2(AUhg!n;hL8&XS#cIrTsR
+E].'G>>+t=pQ77]Wle:jYF>*QL0Zhr]Y_,d5@tsr^LI3CA:5_F`?r9M"r?a.RW&KN
+BL"0T@VSn>Ha*YdqR+l)pTf*brrC5!$tt.N,d^TjP49SN_/[L8.'Z0u*,DjSJ.rLo
+#!4Ig0.S\6ESo#Zq!M745OrZs/T:Xh*`W,STD4Frs4!J4%TjhioA%2o8BaiS'j*oF
+RIs?"-l9g?P%Y#q`,W[0qb6NI/56O-Zr4Z;hS-gnEAWQ)^--ZWgW_A-f%,3&X[;1'
+-P6OEd^b*c'i.R`A_N^rHBL2(Mjq=A3MDA[+g2oA.+LfFF*V:DO$U>ADumJs;biZP
+(TucW3>#h50&O>7,,"SU<4=,\X45U7)>[)g;3EA2-%]?GVNKeUUs*=d.Na`*=TIdW
+f6g;8>CW`pDJrLd9`G+)oGeX*T1Kic5Qm%@eEFqhG,&e*0)i'?(trauLmEi-'m>C(
+jH^b`OJ8+U"TTS_@Sg;Ti_CVK'=;Wf>-H)^7fNJCNO-2hgM$#M<^`0m5kO0YZ1pt7
+l\ja9?)/.g_!8u+/BX!G'b%*QUMn=pVN_pn18OE[3X,m7LJ[9We6u4r*!T@.7<)#&
+]WAcI]\-F)oD\ggUK9ZEpsl^sJ+c1#s4&q'^Ae1nrgj&h0t1N_!4ghSo!7hlnft,Z
+ITrpX9gU@E"jjc5iOK$GTdZLl)F5SS^N[Z\&tOJNOEt*Nr3b:/dPRTi;k')W]5Y3E
+T=)s8q0USD]RKIAf@<CFZ\\V]`]Jd$rc'8#l^,2P=Y)J"FK9O0Z%u^R"%FP'lCjl\
+6:W:B(u65r?M*)4W9\4IR8ubc'TfMp*/PPN;M5B&5@E!3_[bk6>Jk9KS-T^B;r!O^
+ZP0ks`8[21=a=.q=a@?6rbI#(El7/A!0_8^COc-MYDpm+7mI%)S,Qa5,f9KlPXkVS
+<F%VA'BA0p#o)L]P%/^7,"hk8U.)cSKpa9@HG:+[A0Ra%:DZRML[BJU%"2?\WNICu
+RM>CeG\*0ViZ3rF(6?>I#[OL95=R5Je#^"7NMs?br+0nJH>%J6*/Gt\$jnP&<r;1>
+</k_m&5kB:4Z7VrDJd2<MRLBsm2ie5D=jLFO'o0UQkO7Q6ZrM`,U!:[G;T1;G/[q"
+Y]!Q5X]?eZgu$Kd`RTSW'jlj"Tn2YuJSi))i3p4N\#g%S.$@`.i`TST)P\`]*unak
+[/'t;CE#3EAqDe`dE'8)WH^rg1&"#/Sf"c-+QA7m&m0Z4.`AY8Umg:4cI&bcbeYCO
+U^XF3&\s2!5d*oJ^/J0;]/qhT>"K?>@\T_jWTgtf?36Mi/`<%L9,bDjAQBoh!Q>m)
+l7+jV_[KT9,S3GM6P>'41]^TV709KKJ--M.bKA#NbKZ<7O$EXEau+83rrA$_4SSjU
+A/YF!1]4ue!07&Lrr=d_?hFE0g@Fg?o!7hlo!7d7Xl-aK`H)Yd)5/K'L0BV,2+CTZ
+[C*"Om9rNsSjai"J=9BC:cI,Eb0.rNb0.rNc('"L>Q-^M+&Dg(Cl;Nt!6:FSmXO4V
+s3R3`?]/t!?W`/]UlZG1X#C9aEHB1eJ`:]HQBL%:ZWV'"b86o#(Q:2T]VIJ8?:B:C
+iQH)JOd<RPrr?$.dk16YNr7;<<9.4/1ju)RRT6iY?0aj_&SVWH;5hSoo0i,d'/dBL
+(Q#-WD-HKU')a`)W>p,'_5T_@m10761iqn@2>E'[K^XJidH502m]CC9(H5"nOJ%%.
++nU1;7TTCn]_c&O[uO`DokkCLdP<XFMoc?Jpkpjk$S8>SJr1@emn2SZB_V#4%D(gH
+$s*B.=6<CIlpIgpB5,P,X2NA;^;OkS<Z6D:UPGH6mV87t?F1t/C94)7ESX`cFlgA(
+MT'Ep'!k(PZuX=;bT09(,rgSe(_;=NmIk_t`_1/qF)(F#'1=uc%!"IMYTd*^/tA^o
+?NJd9+/i>3lYihZ$h;7`?$WFAh.5Ng<N'dll\i9CaVg)"7QGdgPa4CY4@imTqWr2]
+(@W(8bJ_<I;#Zn=em8*WnogaP%_h]Ll*Cbc-]2J$28iEaMQWQ[CI5eJOa/`$<4:<T
+PD34c=a=.qZEc4JrrDjaY'tljX(S%(!:5>&s3WY#^Ae1nrgj&h0t1N_!4ghSo!7hl
+o!7hlo4;LpA`[LbA`[Lcc9(j(rr=(_&#]D$[RI=u!9;9$CS1B^J,dreIU.9tmsPZd
+@eEBGC7c:p4@o7Q94b%nDe*@`dj9_H)k2MiOA/(nCcJ1\dIi]cVorq_jOL&\H^fi`
+=W0\g)VlSKA`aQ0O59Z.+@"'(T\Bt:qSsH^geC?p"QU(8faV-_?Ru3lf,!'[ZGUJA
+cYj5H$Y!FO8gu.uaWp@$k&>=M=J1[WM*-`4<CYf?+U>jR1@EupGKL_`1F`I]SjnE_
+#6UCrc+b/pMKe92?q^Gbim)c,+0,`P90XLn>+&6Q@o#u[PO7p*$DD=KoYVed!V+F$
+Q'[c&Q'[c&Q'[sj,9D@7!0h6]kPkN#[X%?@a><kF1]4ue!07&Lrr=d_?hFE0g@Fg?
+o!7hlo!7juA`[LbA`[LbA`h9"q5sYs*Qntkr_9giXoAC]b.]f!nJqSYRXSWB>F!Oc
+)3fH/H9=i]hGq(?o_OXA[`L'UhqV=gI:<FaX_pbe_]i-_8#7sEM*V`-2*Ug$Z`M(;
+\IPeG!]].LNJr@uq^UtV0\#\:d*m<f!KEOr:l,XqY8CE=0LF5XX2\5.n6!GH8N<C8
+l+[(P4(4,!;/@oS00ZTUV/Dm/Y6>)*2#%_r/_e1\'K7+7P"e:&rEi?g=6f;Y;AX)7
+&g^\s!4T2iTYP>SF)hqIZ+7<WP%)Tr\HjJDkqOSW4c33;D9/`@>:An`Z[t9Joe$gj
+9dORU"*7;<?hb6(_&6C$=a=.q=a=.q=a@<Y1$AQ:q*qN9J+9RPT)SfWK0TCd1]4ue
+!07&Lrr=d_?hFE0g@Fg?o!7hlo!7juA`[LbA`[LbA`h9"q5sYs*Qntkr_9giXoAC]
+b+Hq"rr<YWs43Y7!dUos;P#:i^6jnW8s%gER;Yb!GrL9-^,[Gt3Y7<U77gf/D(5Y3
+L+o9[9#^'T?n!r8D+Yi<[I:c=34b^D_Vj4TU0Kfk1kf3u"o[H%&&fOk)UmK1@.e@J
+4:jZ/O@f:86rc]Q9]!:L9.pSP.dn:h(ft.R.9"o1P\KS4liin0)'H@>,8"47As&6I
+q-YdBgI\5GR33pl]LX9WAr38qT1JQ]8I(0=,.lEn@2QJZ.g_Gq\Wtl'/(L3FPcUk*
+p/"Hg5V^XBg0>K5'?;Pj5?]1g)jGIIe66uuYhoK'X"62n><8O4HYCd$W,>Zfai2/_
+'i;QA%7o\:b:bA!.k`D+.k`D+2HE:0rrE'!.+QYir\\N`hu/XLs49()^Ae1nrgj&h
+0t1N_!4ghSo!7hlo!7hlo4;LpA`[LbA`[Lcc9(j(rr=(_&#]D$[RI=u!9;8cF8l4P
+ci;@\q#VG2O&6\`(oBS<_SFQ%a$(\>F\;<E1N`3rXR;6;$h/)8`W:#sJ.=u$4_fHT
+6gB!b,aY#fk_jc5)Ff\E$t`IV9-l&JNhgcn2oCI10aT9R\TTRp[6g%*b3dP`7tX]V
+-K58l2=nd:`?N&84"1L+U.7fsr,>Lg`<:X[7GJa0Tma^%.h_5U>X_H&:mU1JL:<nF
+)-OM&`;h2pVti^]:=[.HnEL4%R`;"Y8RmhUP[@R]4X7dqT]8MBEBb\&6F7Knr,ZH2
+A`[LbA`[LbA`h.Va.NA3jVk]*rrC'@SpUJ;Z4-c\1]4ue!07&Lrr=d_?hFE0g@Fg?
+o!7hlo!7juA`[LbA`[LbA`h9"q5sYs*Qntkr_9giXoAC]bJ*^8nJqSWT)MoA]gLm&
+hB-Mo(04aB?<1BKXLtXIXLtXIXLtXIfi]0`rrDtl=$JqEe[*SOp-G>Ndkgp9rrA)Y
+Sc8[E[pSe.\_?WFZLY<lZLY<mAS't7j^mObj^mT"48H#Y!$05nVuBE!7BQRij3""=
+F8l4Pci;Ldr`X``8&g\@rrBlJ6H[KobKA#QQ'[c&Q'[c&Q'[c&Rk#^)J,]M5C?Od[
+!#i:kn,CBas4&q'^Ae1nrgj&h0t1N_!4ghSo!7hlo!7hlo4;LpA`[LbA`[Lcc9(j(
+rr=(_&#]D$[RI=u!9;592a?gPs43e@>(*M?_NE=H)`ea8?<1B5?>Q^UXLtXIXLtXI
+XM!4h)"[b-r1d=X5PWd8c[YXSTE!Lur4Xc^,1FRSKO.oFeJk-Z%B7r@AmSME<aJg5
+<aKUD]WAcI]WAcI]\1??2*j:ZMetaWf6u[sK-HW#X(UqK#.^G+hr2o]d%:5?ID&.j
+OjnlsB0sbab0.rNc'=W\Q^*o&Q^*o&Q^]KM5(*UI\T":./-SV<gc&,PcX6B3TE!:p
+r4a@iqJeajgNEMr:^`hpP5bM9qt"i8jr]%i9Dl]rc,kI&IJLE,o+/Sp-2q?Ik2a;$
+55a3&q1mjsP5bM9qt"i8jr]%i9Dl]rc,kI&IJLE,o+/Sp-2q?Ik2a;$55a3&q1mjs
+P5bM9qt"i8jr]%i9Dl]rc,kI&IJLE,o+/Sp-2q?Ik9'WP+R>=-hllsICb>43V7$<5
+UY=QPWGa$<HAG,mdO&D6OEulcdd3E7RAXa[Q,HjR65\d82IIDkXj05_amFjGQhcEo
+S!*dO0`1H^?fiGZDG0oFn'/t(R!ne@0Co^h2^SH3pZCPObWbs[QhcEoS!*dO0`1H^
+?fiGZDG0oFn'/t(R!ne@0Co^h2^SH3pZCPObWbs[QhcEoS!*dO0`1H^?fiGZDG0oF
+n'/t(R!ne@0Co^h,<gQaI'n#^%fZP!X(S%(!:5>&s3iR/)Pq]CZH/;nS+fGk\WfNk
+=qgTEG/6U0gjeAHp\mT'q5554!92USEBW<9,k4ur"a^TU`prYC5Mhmeq%S>@SA%1)
+YPZdqrr=7(r6pqOc.)anH>e;o;?$WbF)gephs!)7ngOM<brN<0]DbuPJ)jK,!1ItK
+o6!:SS)=#UJ**985&RS$dsM)p,*2ZNQ,h/(rrAkOrrC-8rr=n<j6#h+BtaNHO[oCb
+bN%aMrrB_k^[`fQ!6mN/I,.TmVYC'Y+8Mfn+#d:"l+R)sO[oCbc,\)`rrAkOrrC-8
+rr=n<j6#h+BtaNHO[oCbbN%aMrrB_k^[`fQ!6mN/I,.TmVYC'Y+8Mfn+#e\m:%/";
+5P%Wf5&T9V-MRL.+8Mfh:H">&F*g:S!#6+G!#jmir*8eKqY,ifPJL]b'g2_"m=9+"
+eI8Z?XZXm.Z%ZgUPpJsXW!)LK[p<I<oQ9[IppdC[L-)#cH5"mps3s:eRmR6p024K[
+&Y])g1ClC,:Y%0!-F=@'&,9D45&RS$dsM)p,*2ZNRua&Jrr>X(rrA0Orb9Wtc/8*@
+HiF'iO8RIna3E07!.&R5jAGpWRW>q6\tAFcn,/&-o1j0eDVP+:p\mT'q56.n2fJ\Z
+HiF'iO8RIrO.3-Jo\TTJaJ8b82!+9!Far8;ht[t9k+&S<DQ!B\HiF'iO8RIrO.3oG
+VYC'Y+8Mfn+#e-;PC*<0,*2ZNRua&<rq,(I!6Cr8!&Wg-o6#Q>S)=#UJ**9(5&UB#
+QCHe-'S#88gjIqeqG$GVMEg]-?QV4.rTV#q!0KeNC!,Jul@6K+^[`fQ!6mO6q7=?0
+:%/";5P%Wf5&T9V-MRL.+8MfS8"4`QqY,SpSmIU[esgdK9La-q3Jk`"c/56]ofYjE
+[.gTZ:Y"jIhnS^Ml#e*(rr>:WkPs3~>
+endstream
+endobj
+11 0 obj
+<<
+/Length 2205
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:,997gc&AJ$CpuhljLSWeI":9tZPbPm/HJlrOc)rV.OrS-7I>9TuMR8qM0OREc
+3Uce+j2^QHrO,nPj`\BM)l],)IVX=/V-<#,]#g8mdm>SrMtb!b-'sB!T""B%p#0JP
+#$k##gODIV8Ku`kaM^OR+dYgD9iY24qU8p(2LF4-<DHnT?&$,[@eE2'$Be5Op/FI"
+<bB9K,'!)*^6YIO(!96]Gj9%1E^%sU^R5:m<)pH9_k>=G;kru\?r>1o9`9K'M^6fW
+VcB-c<_^])Ri5?_C3JRgR9I(E^(bJPD!L7?1ulS.Vim%n*m$8cb6Q0gX5$@u'SM(a
+G!3PeL#4TNY%D?jW$5ftYAR\s-k@pgmFn_GPG0I=>tX`HF&j8!Z:b<$G[BX$Vf`%K
+X8XljPHp80fr[->q'ooYo*=G7^UF"'n*M3T.]^E3@G4X<$cGq*AsEo9-btJVF9d9^
+^"u%NVXGY9-srdDr6Lh;PGT<HXIV&PcaT3,:>F=$)=,,Cdh(5U,43heW[b>1oV*%.
+=^[4)AXL@+cpPdC..CB26d4*9*7Ib\j?)h6qi4Po<T0`J7mU$Akir)peJJOmAmaR3
+V-e8!GCub.N7pZ,)<j+iqIM;>qP>P1D:i:!a\k8[+cG'mfoa=;pGmoh3al!OZjM,q
+-JSqAV([YZ]]5tJoa^jYb-9k_=`5h)Hr0A0%,!WO7SgNGXn(5DcYd6fU=Qhm"*@"$
+OQ=97.$3LeaM//G"R^`V:C0N*<>AcNQa%]D]Kf3]IYXiLVuU&nC0.G[/4#H>Y+0g"
+83iG.[HeJFSp_nm#rXuNRQ$95!'fObQ:2_>UQSV8=OO%L$8Pm6froE2FGas+.]0LZ
+4(_a_G20`,EG3[Z3eT;*W6=6r#IpI+qA,alFU6:\I;D@T."N"2EEaW7edWOd$F<$I
+,5IPipXG0ke2go@KI1,#ntMPlVVP`U<Hd!=d0OE/l^p$;O!.XoF7p#0N,kjP&XN.O
+B!fl-6)#HahkuBRha>ePh7rPd`(?X$M;U%#HS10poH%9uW;dN3C=.u7rBbg+qSffG
+p#J<k"TBA`h`EdE[rG/[L]b4$,03RDMMMVI80YMD3H\%j4JP6t3c\'R&L*TL&,h!n
+Ie)52&l$q%GhP3t&]W2Yo/2R,U*=h"9LCqHLhK&!<sB0Jj05\B!:/b+j@-%i0I!jY
+NuL5UVS9E`B\sXR!!;n]QJX7KgG4>K8Hbs71B\g)O:F;S3!9*(dY3]_/JYXJMqeE1
+,D0*M![g$(X*Fd#c2aIVZ"Q%Nbr`?;;8]HAKuJ@mVK$\_#&5'RmfQtX]82Cr("(Q^
+K86`+bWDOMc`:5nZgjrWZX3.aMfirQGg"W27lIZ.qVkUL#fn"/Tm&(k2rhu>Urn<M
+ZJr8a0cuB%C8M=HJurk$4_I+U]XlhA).iq@WQH7T]+]A)\]*^C)2UZ-p5/2#g[Y7c
+\9kq`rpU#Y92[ltUfU'-Pq4,,@/B@d*1,KtSE>rHRGc"g7gC$\F7soG'DFSqHtQ*0
+Wp_j7]T/"OEs,=3D0`VUqOA"_bDZVk#?S!GR1#,m8sZqCh(DT\:HLA(>nAd&5P\c7
+$g]QRpJ+MQ[DQSHi]F:39ji;R3YnhhdP;eP)hLd&>^WS]`(^o+\2It)2_PmVk*\1c
+0)@<)A&sTOG<GSZ5t="Nr[#tZL5$i"[g/T+G4p,Kcgo(NT0W_Lp.U;sd<G82h>C8?
+1J.."-X`.-q"!YN-``?i79<C_n4G1uU=iB--kuctS),O(ULm(49&h'.Z@>WE7h;!O
+XhJnGmKAZiAJEc'W-idhUj#m-SCl4GoZm:ARVmm=W5JuH)SW=*_XpWWaQuooH"$IB
+@@B=`><ga"i__YR_[bK78Ds:[XqT+DA#=;0epM2iK,2pM>0^>]FcSN*Zb%jFi<rm\
+Rpk<*781N<-gIYYqu//O64ZMmR@9U"GDfL!3Z0]4#DlOI?-jMk<HF`o#bJ_/Dtjei
+(E*,0VM_kcXR`:)q/pf`FJ>`f4O5tke&N]=mbBYCP&(WnN9<#a@m&pS**"a49C@Ei
+N4q\7qYK:J5p`Q[-JN#aX_ko'n;W"qau8ui[cm1&%H_UTLehQ'+nPfEKh_j-L`RXo
+@p8?8+SBk./7]6@JaD^hKl7'?i:D-^02VR_P@q>X`DRGtBU+)K$>`Us<%dPq80hS_
+I9O;`r?R`%qSf(brrrIRh'@O~>
+endstream
+endobj
+12 0 obj
+<<
+/ProcSet [/PDF /Text /ImageB ]
+/Font <<
+/T7 13 0 R
+/T8 14 0 R
+/T9 15 0 R
+>>
+/XObject <<
+/Im1 9 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+17 0 obj
+<<
+/Length 10446
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:,gQ(@7%=OkPkf4RVUK(=YqWQ^n(^L1Rqeb?uD7?B4S%_QA[3t:D&*l\+.MKU(
+A%-`@Fc%`U8Ep`_LJReZB6O0=LU&UW=43`(n>iDcbJ#ClDLZp[GGg3l5CGH%dmChD
+LPNo7^(,)I3'ZfF4k-nmb-Ek2FoS@p7oOZZ1f_rPIgQ&=21RS6I<f)\gXC44gE)FM
+_`HVV:VZ7G-=aW#b]@F@cF//RHlcYG\@mHGkca`9a7"K9e%Ugr\eYgIQEZ9!)kmqI
+8b.+rem!+0[PhR7ELBSRn`Wj%Au>6ub^Y!\Y/g,NF@qJ:YN$d>R`tMPSIWOtSrq^_
+VSd_Pa!Fti<G$It/i.b!AIATEg\N-Y@T:L<2OIKG\7_2L(mOT8DR_@i$ERt5AVSBT
+G+GaY`jcPmrK<.e[_34=+bd<R-19fCf&_[bB4nop=Ib8I@G@mR2W%:$E$:K%E"$C*
+fD4<W^V,BX@Hm*"*TlgtfQq6LL\VM&N)PR"<ok@f4H<jbn^>TC*7j("KG;sQqK6$F
+=5W*.]R*^!Q_`C6Y8BLiEpS9<YHPG4kr%<rD>S]VjRqh0&P0qPiFb.>1;jR#CSqU?
+Sop+C5>1$MF4>95K`lVi.B_WLoIW:cK4fFeB09(:dp]_Pbj+4(DnXj//un'Xp`WuL
+3P[PlJ-:+B"_X.kf6mPl%)4obF'oKI.Cs?K]MAG<pcZs3EA$Bc:9M?=A'S],*g_5t
+2XBjpL[4@Ha<'7MgpU!b`a[?S<Mpb_f17nA%X1O)T^>uJ^5/8BoQe"hJpk'_\<eft
+^9mg$k&FL@iU,8M5J3=bF\J&043g38XiEs,5$^rmUWo\@XfhRb`MV4I4SWBUp,]gO
+b+$M,nMi+=k94EGpTDLDU`*(ALuqek[nF@BQYd\U/usJ.Z*nUrDI9$-CEK'biupjh
+jd/ah-Dss>U^j$ejoG\Xo\IRWE[cGX@b6]0S/*_>_t#r:LH6[;KZdTffAehD.ocd+
+)q16Y!ai`Pk-m@+;tZ`77Ae*$9ibM>L>M&M'`ck8>Trp.H3]%]Z'TX''WZRLbG<>B
+q^K57n?Ai&3Jl5WRt&p2D-QYe=$Fs0)sGPuXf.d$%ja2J=]OV&(tNi$^>@Jo9Ie1'
++K*'i0D-PCRfCEe0B$c>0'(Qd+e,QJ@duirP^[FLL7;7l2t[F#0/<%84J-*f1of`Q
+a$E$(:ju1p^MTg=m<h-rhYul1N[>ELj(n1CJ!j(-eC*QcalKBe"I@XrH#ORWmT0._
+`Wp,K'2b)<?Fm^'W>hcA`Ik4]SlDe;D>P/8b64f8##Jp92#*>\6g><&s&a9`ll&S/
+bI"?j4K1C6+D6oGdeN;.E.7L0*j*]'5>SPJ4M/&ijXH.dbF%S#RU=Z'2--`4%J)\e
+:G`dIVglt+@]cYO*n*Irf%7RUDn(sn,$!iG]=cO\3CX4JLR.hsbJ,N_cL;tb<KT(u
+'_=j9CRJWHWdDrgC;9SSQhrY!g1fV_93"3(4Hj4qXAU(5TdeM)gDUrEr"[/\/B'CS
+"Vf(^Gq[2lXb@W<9FKHVW`M\TTgYJ+J&UO>Gfm@D8S+/snY8d2)\tViV\U=KL("#F
+Nc.*J;$R:BhhAt!Q*&Te]O+h=Hj`4h5GF3_A3uI4pnhs#oNUV[]i!`oA_IItRLbK1
+GT65+f5?akj\'tFGOYmc*%O2n&k1XNRY#-D:?GdG`!no.:i%Y"9@O6W09+H)r2G+d
+(Vk,VHFlBI:^lNZpCEKVoOgA8O(h,'_%tSHOcRFi>-cW.46r?Pck&!o&+jQS^.\Lr
+'C#Nj5JHM5F(t#iB?K&fG$f\IG=S)_>sV37[<,F9mR"5Bo0?7$LiM8Q(YR1N'ijGg
+(@W5bd3o0_rH_DlA;KQo_Bo_O0LnX@ed=h[`<KI7)8)WA[Bo'c"G!3>f6?)mE]u./
+L`WpWX0`*DnN(MaWtS>'l[>Im6)<&2/1Q(b"qcU(0ZaN`4bkI9V4[jm5rn#0KfWKU
+U9+ITk\\_S5S7S9JX94:0D_\f^%*?j_E`t4K,7+FHNXKU5W%Pd%DqW<&sO[a5X>F4
+;nX:HC.tX\!)$\+QrR!!.sMq"nY;fjVmbMQ!qQ>jFG6j8M_+JqW1X.\,#!k/HBAeI
+i=^[H=M`0'U)+jKX1S]<7hc5*c5?Z++A,B8^BSqt.16CXUW=<)b=\'Z;>E4*jfCqa
+Nhb;9'Hm8&]'s'iYc[u06$\;.J-c&J"uP6qg;7$iT`D:D'c'RFdBE8;9u)2]O@Dt9
+LcRg(?GdN_:-]Ebo,VM[CUh`O5XPQYUFJkN#Rqm]Q1^rI&[XrJ1r?to>`2HIL6hBq
+&Hi+$?k!9i03jDmi&0`sku/;S2&^5X8j`VcK.<!I7013_56mC07_DJ4L'cAWa<c:S
+O_fq6BqUD)'g5;\&HK1k2&%1ifS6[RS;B!VE(/V+E3#Y,&W)L;K/,h23&C[s!]h7Y
+/@/=DP6T1FiH"nK!*CE`$4pRCA31156l?lPrbi@T6Zb0%^//P4.e"b+aO(aIL*Im=
+Kg]R+E#k-`PRNfg3&C^0'Qc1K'cG:_)*.Ie2@+L1cp/I0$O90(d[PbR!SlEt6-7Io
+_%Ve6#N(9!V*BTa!hdTW.3!r<"<^!5V@69t!6co-GB*im#Ml/k8L;MqK.MW\?<"Hk
+I/Y3]39Y:J*4$&3Lk5]TO'K.O!$".u/lDgTCuAk9_%1j#V4&>J+;#=iPW9t!)+;Op
+k19V%YIPT#=n5`11]VHHl;_,hW@K.-P3]K<`JV<e,'qX6]i/5?5k]8I<jLL)-n#'?
+OjDAS7hR4HQ:q8^"[Ft'<:\R`84J9/EVr+u!4DtD:^0^aR]88l&clF6NXIib7Bh</
+;+<5"q.iAX>)JND&.)_`5QPHcU?)`T!/W.$."JW*'MsOsi\ND6%$"p5+:+]P2(pHt
+?:J/^=^;'`GD#rakZkEr!:G8E5DZhADd\2_(Btn>E$puN5_N8?(c2:ML$3=aSkJhm
+'TjQrKa(pK&e,#cKZ2nH1,;[Gf@+1qcjnINLj26T(oP=u"%S]YZ3J)Wd85Agdb1A4
+Bedaa4UZlD?j7DV"iqB2B:t1l>kp;aHqf-O7ehn;CC5i(,Y=m+VCXcVc3Ef"hC,M$
+&[,]%%fK6[Eo\1eJCg_J<Kr4>]ET[G3Wis.hLn3D"=X0?cIY?b#19W_Z-l6^D%L<@
+r)Bt(!"'&E+8DBT)&Vp3;mKN@b93Miq5%jlp2d?419K"Y?26A92>frZStQ1g@<HKb
+Z<seE/JeQoG`=a!F$;ql^l^9:aaUp#eK75pg<upY@F0PVkR+6_;5X#h%.,/jUZcpr
+o]`+:=+KZ#.o<NY[tQI")XnXtooa]W#/!D?RYak6m+7`DkVEq22;2#Zq$[E,#@@VV
+I_?-^R?p53X*s763=ZshrVW=Q%-NP#!mh1$f,I+[\25V%XiS\X2#r)EC!o8rclGCS
+UsYZ2]<d4r]S6m'4.h'JmcQ(56+i64<r3?cFfJQS\RfFS=m-JV/.k0`6q8K]:JZ>R
+T-+1;rS+\M&-9:>f$FE:-(gk3NiXpb.!ZuZ-pqnFr5Gm+J:kQI</)_bC_-c7_2CL,
+2J>>m\tZSt&4EaQQVeMOl;@t?7[Tr'W=!(9a?[07'i5Z!lB8$DUnJBW.'dMSncEnk
+8BrbG8]f&9l])/pa$E&ns!>9^Z6_tK(cq-)jQ)rU3o2oDs3nCY=BG-r,c_%P@SD1t
+f,?<;8"WAn)8Eli#7a5!iqXK4.#^^9^&0Dl@QJ0SS4UsEg[#hkrr$JjI=<l1j,E/P
+VoR#Wk4i*hC7Iji]Ol"#@X@Y]R>=gIhbt6s,>rMo_c$BkQk&.?Ql41:)J:Od/W0.X
+>WRV[f'Dus?m\bgTj5%1hN:IK)1TBO$P#Y%ia#;$_h_-*CN`Gk__<+*KlVs08;HSJ
+cD5D''mm;pf/E$u`u0qQao;HToNL%A39/E<4I1R2E#=L@39*eV7L0*.2!4'%7\o&B
+MP1H7,JJ)!$S+o<dButYSY_/l#G"B&RXkT:+H-(MS:JZTZj^^[,><nEoQ<rg*3)=B
+cM4ZG<^N<I7<hP%30P8inGgOol!Yf7narkI,<,dl=pj8Js1\B-_LNMPqc,Cp_MM)/
+CV*5oJ`2RVh`XeE^l310U8\PJ7Llg7L,492?LXLV`K`)T%UqgUmeK>>R+2%[m?P\Z
+e3)V?0tJ%=nu)b*+uBr]N2UQm`H"Y-dA>(rk95g@,8^$2Np4qqcACIQ8n!Bn),7<p
+g05C*O0aBkTM?<iNMukYkPmIqFhT/i#^mqDL<L'2`a`U)1_U1OREMPQ:<9-DaUDo1
+'dgpqPW^bp;?fVK4@imKSZ$kj3ekQD/>o,_c<q^?329`M.QYN?320nAMiZdi8n!Bn
+g#HO..NdaO<=,0%c+/94&2Y&aRVfSh$=QEuYJ$W^1T<CL#)=+0;KG9fK2DX50\4*t
+<5^f+eT)iKcZ3tp$toLI*'T)hTt&[W;3JeQoQ[,G6Pb4MJ$$W,UaGB:YLURek(nab
+UC_&0r#-;230Tg.lSYV\-8k=njX>Y$W3n<''u04N$AB'dnNP_@-g4E7g;IqWdQ"",
+lDliPO/a-o?m\bgJS_?63K]1Xq]8iN8,V5<nPPZ-UO03._qte!^Zr;eN$$LXi']'?
+?I8!ZR@)K/IS1O'psZ7S"@f3HNpX5JN.=DM`T&nrr@SVuJ.[bsI%.kaWS#qL1(4S(
+r5_d90ORBE?E3<R9h[S29H)Ij+><k"eCWX^4N7V<=ECDp+L;nl\.e^geHj&1^R!'#
+L_Hbtqe]5@(m0\gE=:cb^WYjC,=:p)qc,>iDuq)g&B*h;9pOUm<:!s8+$2cUd:9a(
+S4LWLCNq:e8B&,a'#\mjKp\7W4EKVVR+2')Q&9R;1]GZY_o.3TRbQB5R@)L*=^gdV
+Ed%[A4RV`mDuqgEKbMTT$IH4+Q\Oa$mtZbY4A%Caas@suQanp]O/V6&HZTI5O_/'e
+cZc]<T8'Vcn8JTp"<(opehdjk4mk;LB(6HmnPU3$?d)N:J71M*bL73OE$!FeK3W`%
+rgOb76o2:?1hd*D<=0tT1ZLeUN89bO&ND#3E2$*1FJ\0'6e3C[+7BJ"A"DR08i&3E
+jG]SC98oN:PmAToQ_A@b\ZF21,F8r#s+dV,1RNkQ';Jgljn(X&9.-sME,c*F!ubfo
+atStjFLd][EbPs-4>b@5GB61>g%F#TLmn_]cKM^#`!P4d8B2UXe=np"2`ClX\GJ/+
+`2J<=M%S9j5X:8\#,=.&%kS'lqBuW.5VH18iWMC';IE#JYi\bj5\.-$eXi.KfUq8:
+8(k.Z!.ba'@NSV)M<_-Q@9@q<"@f&nY;)Pta17]N/O!G.$\\WO6J:["Ql%ibbKC\o
+a-_D\7NdU@C/1*T,F<6]Cr<ZH$3O`j1r@1E8'AbgSHsoMEMg1CrB$'>,P;#I$4LEl
+$&i7-qm*r-7:Y72/d'"[7>1c)`VNdkH_iQnrkI=MPm"#mUG+F&Pl-N>3[Y"peObIO
+;/=A4#ruZ"Lf*b:i'cB=g&o7&GN<-7DD*Gtcjcp1LuD/<i<8RX.?)W%Xtba['?Iuq
+F;C]lU,nLG9"eXo`"I?6dM^?*1_YLH7_q#7O5l5*^lGZ5RY__RN*MCPMQpSNgrj:m
+j'Xj-dS*?rEkH$JUQ!RVd`!)p&8I`7;oXrYTM(N#a%SZ`V]?*h`qOMlCAjb#>WTh'
+IoVma#.&j")<DJ=ENj'q"C4KNFoptZKb<#XN+)p5=<9riS.*Bo9\!:(Q2'TddNKY)
+r]kLUZPX#sONG*#G02iHO6=!BITAO_R7K+gQ-3)`!g!oTnig[T&Y-m<32'Ru'aQ%g
+ZgodOVaCe9FM]_h&bO_Ae'D`@E8I:.VS8F2@E&\3=EbHBS>giF&gqd&1*L;g1)@ju
+\?->Ie8:6Y-Dig.=:gOB"(=If.icAC3G9RlX(.m>#k_KUObo2n[&#Fea,XpN$3MK5
+k^,73O.FYtX&L%Xp_"F[/GA1O4c@==/fH'kWsbi@#kda*ARaRQXouZ&7=d.chB^/7
+7\RV]U_B_`6>?G;);gaH@DIiin\[/%7LiT+ieYWS?<\d);XoYiCnjZte#^:='9els
+'glZ)8^3GF\'>a4*QHcSK(CCE&^7,dOGSOH5.$0_>bH)6ZI'J,Ql`#730B)>\db0#
+7C_"f`#7I1gVSeHXM(X#_MD$YDcV"?@@.O.Mfl`_cJO!_9MB2q2mKK)+r,;a45@fC
+e=?JTON*^<>g$h!&^t6kM%cl@Qd]![M,\;LeU,1O?i(:2%Ru-2a9N1i:8HnFDMT4K
+0HFm[-71To^PAV)-8ejTdBtc*^nnb--SQ>cN2URXlR1cnX+!_NB-E6jaJI%I'<*sh
+]>KJ)lsHHQJ2lRn/+a[s)0q1p:70GZD[+)khqqK!lY^]/%T.=k3](+%.h%4BY39n$
+bFgY330raG.Whb7KYRl\"U6[_3slX6E&+)+VU!aM?5\E<Lq7/1ZOr]t.?%(UB0@r=
+J4J+jqigsVO2G3p2)CNB=`jb,%S'b>B(-D&8L]T`2USZl9]j7H>8\"(fh`LsVb?_Q
+eGg$o*+GIV#`QP8&rZ?sP)2cT0=rBq(s_pT2+%olObt\rbesg5e5@./\-4I)`pkm(
+,>rM4X8SSKj'-[H$3Om^D=*)UNMuk%IH$'$n+V3p^kl%g>/R(?Ql*>l_J`P_(h#aA
+&L[)#R7/@ms/O%m0n'G!?l&)!]UhQ%;Y+G^"V]mS?d%l4(m0]^F\N^l)7efo24%(6
+ilLNr!of1-g$A""mLs2SCQ/i'mn@EG\$\9F9MG;abNYuC!>d?/`2)O0/J0hbUuku9
+)p*q9>cmq?`L53qXT1]J9PVj(ZZXP!kqLD^':_QAN'K#gYrG%1qW&uX1Qf\Fb,)h"
+69%s+E$?%OEn^cU6n2[E3<J-Rs(q/94<.cR;Xl<a@gXGYEIX<I+2K*!?`Pk:WO^`j
+"-#+93SVM.p1,@FEV+TH0$^8)CY&VEcD5'ugIM&>_EmKr6n!M&Hc_SjM5L()Yr.7L
+WVH#'0UU8b.uXfKBDh!18FK5!!Y2!9R0_&&!b1:G)QfDVO3t!Ge/T/L7M_b'S-V*5
+L3"Oq!ssdG7CBicKDgI]1H6,t9MD!-NF\CtrD&^cS8]p9crVuo,EC_:*]+O]=\)sh
+j\]qGa)i0eZC/Ot8i&3S)iZ[/[D-Z(ed6oC#b83jhOOpsA4K4L%r2Xi#%SKLE@.P&
+T"*a)8itT4+><k"4NFaOM)0+MU-P7=1HQn:!AbWX2T"AO\5_j&)^H*VN3Cn<.1@'@
+kD`-iZBuIhBISbdj0p#:<_fIMM'?^s1,5c=ZQ4Z)EQ6>.NIns%<*ZP46S?["ALrVq
+N5mqk(bh^hlbP9,1T=Nl`^LZ]&\ihKE)`2YUJGYa1r@2PTbbLa`p`B8$@reg\/*s3
+-fe-sR,OKd_LT_%^2PIls!eY90tmc[+GVFH:8Hlc>n9W!8^6,'*b_'8c1Y.ZN+<&s
+7Kn"q5JjIs]58c!ht8LIUu%;KoR\YTA[+DD9I>PR:!!D_+V>bJH6?m^rdAPGC3BU\
+a$,;b?![6:QER;c,9(b+/H?5n(j47rdO"<^UE6*4W)3[UNuCW@)A!s4%kU=h6uS#0
+W0>+ITQRUEFo4#D?W$sTE.O-)<jW!P9P=eM*A'Pt9@PV?Q7c)DP,DKFieSLFOPD/5
+MA@Hq/d41s,Y/Og/W"\^<5)P62M=0!!&T'4j(PHd"fP9qMi$=fCYUR1Iu+r*!&\d6
+I$B?uTSBBDE;;u7:+\k@N$P@^F>m$3gpbMoQ`uDoW+/:;6OQ-]?6Dj+XjKJDoVH$W
+OlTt=]TFgd\('5!X`;,62sfW6,73YrWahhtgiZ<Y@2ld-"Y@+d5><+7"FD3HJ/)\+
+X=JS83=BBjc3)VdX!4VgFgtJCEH!4B9q4P?0uTh.r]9["\eY%@Dss99mf)D;kLJDc
+O63!Y[sGd+R4Epi1j^,(P@XcmTY(\Ln*`$clsK/rs0uEa^&,%&6??6Q.5\DJn;ME+
+9c,Z'DsS*+"V$^>gg#X.=eJ&#!*E4S.klJb#sjZ6^tdS5Jh].03VWp5_%n7L^IBp;
+(rI#J@M5H+U4_oHZf't)Vq?Mogi[-L";t%2c(g<mP2f"UYiT)>3s=s%rfs]R,Wqkq
+%@L32)UH`]B3[&1Z5lH#=>*NjE@*f_89--sO^'XTB&KCWb9fhJb(1%!'b.u5ZIb;5
+i5ihnOP-T`DX:+=!WCC.fLfO<)@,E^d1I%:E8c*Y*^"$#4M2WF;g9%1FUm7M!Y9lb
+eTFj>M$%[MHFD>d2lBL1=d%>.oh,6965^$_B/H,bjWU7A)UtpB]<s^dk;0Rum0lG_
+1SF=WTITmK%tPP_\O)qES%>Rgp7/,SNriii2]`;]:Wl31(J!2Lf\rhTXeVfFN$E9-
+:)sXXKKIZu8,c0N:VadT;U'cFl,1_t]<OF$#:"ur1HG6BJ:k,N-S7nYffOY2>`\KY
+h'j1R+G_i0k#:mdJAIJ^7d>6]HBuutm7tL5Leq<"S^;kCBicjV/YgaM-ubCW>X,*B
+RB7tb@@&T&TN`uu2hLQu6DlMc8#:VNI9%YT4rM(2nB`EYZ<7[d_`M)?,S2MYYs0&L
+TD*"1Sle6eF^;h7eZZLQKf:&]+@UGXc8'NnHV]Q\h93?ImiPg>rtb)lpu24UeSfXQ
+?Sn_&-<B$GY_DM:AX8$GM^'2tG\h'FFNRQoo&6Lcp<]q2SJZkDecU<c7&l<F#4<XG
+Ri+%ukY".BfB9kN^Z"qV6(<CL5T'td]\4EH=hCm`J;()YDn(Js$d8O#*Fj\o44-)>
+_tr]p1m"O,5r*7\&sQF5*&]'mrf^`Al^W0@e/%'4j"i-QH>L_LhHT?-4c-9Wd*Lmm
+VV/E`\p@AS+WS:UFFd+jqq<-!fs,M.JQuq7Gk0_g<R082I<6D(1PUEDOB!`uQ;<0]
+K;VM)9q:sDHlYO,ZHn3pd8c;.#.Qb70B<dQXS+4-'9HC)-jnP*W/>e.m'^3S2uT1E
+90'])V6<dLFNM\'[`%djSF*"g=]/8a\b5Im^1k.\V$/R&pq0CNp!Pe&>=r^2Nd1Eo
+'s]!9cPAQh6[(XDfuK\4N3AG`kXQ?f^6TaW3;)9.;^ji$7RuPSLV`&ZjNNsP0ZRVF
+2$f8p!l>a5JNQ6^b8?,mVO&5>jl?ddUVcqe:*de&5>mJunP7hql)$%3E`bq76Ff=$
+XMmb1nNKaRZs9m*ek5Onca!5h37'+(/c+mH)[KI9*q\8EIl2W#9p59F_cL-)S3YjC
+dE+h2RYhs7h<Cl[C;q'(D:;U98]]BfG3jl$pK&%[<Wjl5Inq/q0b)%Pof"#b?j$Jh
+?s\06n(XOKcEAKXW*G3HP4oJHg;d7BoYX69OHAE;>*kP.PobC<_h-%>iD*r1lR1@!
+TK;sf[>+.Y_nEDKR<p]tO%Zk?,_\#'%VA]1[S(MO[E2PkDZ-s;r<SMp&-JiK411Pq
+3;0S`2;Pb)c^Duk$1+S/[r)kKpNQ$,H)(lNA!HuI8\XtIN8E@^lkEM]e_e,cLR3f^
+RWhjme>J(FpI7[=]Mb=#!Gmsh^75Egnr</SQ24#ZE>M15pDDh-@IG^p<Al.)/Z2[8
+<.-i"L[lu#T$pi3'#5R05LboAM^Ya2d`&#?FJkfqnFQc<jescM.VdQdOK&S-'%K\p
+YNYX*h_37#`FlWJl,"Lnn/3^=$tm,B5-?Vp:>F<Sk67(sB[([09$j0@67hCU:MFgi
+Qs>BHK&^#KAL*B1n[p*,[CK.3S\M"+VH&tajQ*6[a#ohf\T$N*R02X2\;0J_iS@@3
+jA(\7[:1:g"I]X^;qq=<>%'!,5@/#o.=us0S-kh2`i5*$"0rD]R$,-ZpP.MeMU]r1
+(tt)j:pF=S0*En18j9/:1c4er=oN?[hR1A"L!8'LL!2>Q*hs5:nf$\kB%IJch\$@#
+^FXO"qc1V/.E(YWIHI#$FmLlq-o0gXF.Y#oZ,:B&o,^8;1>H:JRg2Ye'bj6^_G+S"
+9mc/3%PXi;IL!2^pe>W5?Qe5gg+)eX-HssAe/o#6?O1RZVdn5hfRokDksg_a1#o)h
+-*uP0F&3`%\c(isN=Qi+Y)7)MQIIVl5NW:`U?ct)9k5UiYQ9/k^ZW$mU0Vhb3B&TC
+6\\ap.I/L)O]Ia:Y+'ZM)15Z9"]gTM"Nh'dVtcuiGL(1>pMS%#ZGd\@G4-d*VG"q]
+KNg3SM\W<o\CV7bNT]>"je])(kkI?s#CDs0UCViAVfjN8A`8_uM_\5)G`_TagM0Sl
+RXFbF4XPDU+C$YQ%In[1=]d#:b$s3?qjoT&%rUj2>:FVh8JKh!2*FM4Fn(.#XohB>
+]IrYZH<-Rr2p,#moH-ie.;#^IW'_q+Ct,h$S`Ha$dA(VXQFS\N_UPn(]d@Vn[diqr
+dZ(F,'f&.Z5&?]S'OX`CeS7Un6;Ps9)Fi_g'[#P`88)fIhbfC6#E]*=G[4Dng+D16
+i+5-Smf"7-]=`KP~>
+endstream
+endobj
+18 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/F1 19 0 R
+/T4 20 0 R
+/T5 21 0 R
+/T6 22 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+24 0 obj
+<<
+/Length 2559
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:,9p=<i%))O>m.=3EbcW2UP<(VN-Bhb^W&pD@[Kg!5D.WD!OlUZYhj5So#dh9>
+Z8ou=$%`]'_o)BEin_2U'6icu,$Kiu/i%p;m\qo?UN.*gGO'Dah<c$I55m/%p7ln>
+=,X9*^:SlRAJ@SVH<T/)]Dcj`Vkr([rnX_:0:!^JfA@?HZms<bG],JLAlED&l0kW8
+2YmH(n(ahX5#)?BDl5m:3i9du+6rf=T_DnA2Y]BTl4I)<LOMId(-eA+8!,,Ko.q_S
+:<aPue6UUp[aoEc>WR#X<;54)0;]fhg()8n'-`QPl&7!4pX.Ej9\_rt\qQ2:-H2Me
+Z%XF/)j[MY>(hQnefb'+Q?p0pj+I:A9>Nj:hO&4q'Jj!rA(FQEDe1OVl="^&neD&g
+/q&WKJfd8W'K99RY85g_rS<f9O[qRa1p=,CB*_l@S\3qPV?Y5K5bi1G)DrAMH`Gas
+,/VMf-ITO]nZZY=E+?S`Vn1Vmd/'LB5S)#jJ[@!S-,ZXO=Wo0urM.P%Gdc::9gm1p
+F@:3KW4/"q4YAm*L5;"JlG^T$"Z^8@a3JAUdSV67>LaMHMGDa)lC;^ZPDQ9A7co&Q
+MqL7<3eOU@2*l8O]QMkX/Y>1T<KK,qWm(VFk`Q(0B`4KsZp;Z<nST;Y%N951RCFd(
+JoQg=@>G]6=6:Fo39dSl`J#$HSY\>Bl@Z5^cS2Dk:"8Qg$kj.b8oTLdK/5m.$)L.q
+N7/Y-7UuKEA73]u!h/UdaZP?bNJiNnQ`o>O8;Kp>lYClR4sLcLJT6GMW9olkVhh)7
+_''C_i'DA!K5TR>h)B)s+Wnmcglj$o!),X[eaIBl4kA-dXIW8sH'i:@fOI+B&L(t7
+gb?LVHqqs^P_f("DLI9(@@3hAl>]dM%4*V9,P\D0.3X+j`^q5YW##[](f@fO;;M4^
+bWWHfn(&+TAhJ?b=Z1Rb6(!$jQ];WV_o`5qWDn):/ptZ+heI!cpk%pHT=\s8nb*e-
+O[]qd2aJaTkX!+TV!tM,PG[Ne4GC8/^<_OhK0Xa\+F5:*CIS>>]"si1R]1,'>OpJ&
+%X]ng3(UiOH:uaaGE5sVS.>=`PHA=A8WppAWq,7)Z7JPi"0Sm&U.2@3Dr=eLT6:D!
+Ju%3!c%U4^P*-[!;0QG4UdB+)s'\*Qh3oa649.Q"FiH4JImtTi6HB7eiTHGL[``aY
+Z`Z;(jiq_doch46q('l<ML`H&f7QL0[]Gg!T7a!XA,NH!l)Zp@j%2,<o',Ct4XUm\
+a!AW2r<X$&O%0ZBV_X(oHmVuiifk8>D6oBA_-[!o-jgiVJ\0blTUueHVrd(pIt.=m
+jl=h'K.%Q2AUX%Z&`s:Q_<j-+bBpu-c"W]"HWiKs;\hJFP&uld5$8#Zj=.5?nSG[[
+m93#uX\[e8ME:$3CGFut%YDKbN<1A"ZZR%H3*8<8c%o-mms/#F%dM9n'2ebLZpuf9
+h:N@8h-G]iks>Q`E6e]--0u`\E?&,Us+1JCf+b(Z.S;5kriHJ';ul0EhMB<sG\:/@
+J>u>j(ppaRbtKL[>$isZ(ukAmfI5n5c\K(4HYFBf^o"Ni-*`4:a!"hS?bd6hYh*Fa
+E$]O(Zgos5k7JoYNY4LsK6cMnbli/<1X9+:^C,34O?5lRSI[uWSnfWml47#5b8iYg
+Ug+K?5J*V5'bSL]L(uEECZgNq[O8"%0YBE,eE)CeC>pTAU(j'!c^63d?6i8oDW%1@
+;ZK?Z1JDXe!J3dsEAm_LN\FW?a."?tRJ>lQ`hh8.bsl"e:m4i-m3\SQ<7?&UFb'!L
++FUmRdRQ1YMp>$A$&AU80mm>g)+RdH:?#i+,0<`HQ39ndr\Ypk>P2k!Vj_GiC0b+*
+Ka_bBL.acu,\b3TJ/k##SO]S5g/Rt61Iq9@eZd8&LoP/S#:)9$/^Io<4[[7S)7Y:*
+m>RpB#_<q'0gp"<2/!pf\7<\!925".ONV0(c[q7t!YL7F7_h]U8Y@Y!Z0@NP'@!3l
+lD,](TnEc9#I@0H^/8(&?trRLT`9pqp+sf_dD?U?WSa-#UFMqjP/c85R*P'pDn;Cq
+5)BOlcsXSpj/$5iU(eS&/Z2.^01AWr`abVHEM.j%f5]4j0!"o=T_4dg_9SO1Y0[2J
+E>'<.Vr7b[:NS#%k>U*A4i:jH's<6>\:b8-MhoIq=E#A?H8q_1noN:q!!V(DLk,)R
+3J4/G\8XSf$Pq@n[E*:?#WUApkB'^GP?;n74Cm&o=Duu=lX%P]?J7B%s&mG0&8L*6
+aV>@GA/14n;?U'0beUbNU^-JTf?k+_8SRJtFtgnfW_M;7/'::G2)=:@C"5$!c1TWn
+i=.jJk#=9D]PGf\KlN3n/J8lU\dQOmk7tElb=*[N)&t_FI4:4.DtI0tP`EMId>qe5
+_US>ff*e6pEKDJ*r!@bH6*Bm;Q'VMp3TZg*7&\>"$&?od\XWt=G5jfS;_N1l+R=d9
+)-\5tSYhgJblBHDQ5kMPqqO._Dme<."^-Rj19j<'O#D]qZt0]aRuG3*n7jjQGKbKB
+m)U%.#*Ui4pA3B)5Cn8*bJ]lBP/Q[!Mcjisqd[>7DZE`p%6O~>
+endstream
+endobj
+25 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+27 0 obj
+<<
+/Length 3270
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YPl9on<m'#"0DoW@LLgEVmXbTMZdRflkFYR?D@6/]t<[b3PP=Y_85h7^RP8J[46
+b3hhR$gc)F?qFn652N>dr-gg+Yg+?C_tnYEX;HFXbho8o<LA8-[7^53qD:hd%^Q[1
+IprqDhY^^KB(I+)niWjgZ2T0;nSFI9#r>f;J"P!]b._D3\uNsrs70MMn?V]4WdE.Y
+C>XGA(NBAZbfU/s<;-3$^-:h2Z/ib=T(ctYkdE4,\U?SaW`RI)bPE<e,3*'M1EYuS
+b^PlfrbC75Sp<!5J(NB/H'2'l2s:`hHcDh8UV`@4YD9Pj3K#1:CiC68B5=bo(5"[U
+9jE!el^3!`VfNkB$qE>9n%Cci9g<`?:d*Ml66Ii>3SG"hT(R!2R#JNi99E9."(T4D
+,s14oSeY,,He%RG]j3/m`8u0>8P\RtS%[Q[@TBlR>n?WDk<;?KR;NL2_@fJ^;rPLA
+lIi:O4K$hVM^k;f=`gks'E@.YDi\CQ*9PJX'KID[T#8]#,M!8E=s'E`S\ZQ(dVH5/
+96@u9YT>T8B0OC$+H?ldY`D4=NQF>V>E%6V%Z+TR!(S>oRPlk+]98?2ZA<Qq_3=ug
+*aORpOXGE&n%!3ESNNJ(<nH&:4(eR9D[%;_%6r?f-NT)-fJrsDioqinm$\\s)E_?]
+W[ID8E+Ua(Z$O1ppTR:cg<*aj-H@_J)YF-`]X7[!dHP8@9p'bc-Rf-?iV0`U<5g8'
+0c192LABF1'UFFm"(G@]mU@]$<K9Ljpgb)a]=+kjDmDMPW@!minD0LtZ8n;&ggZDm
+ZJuG%!)8@"rNao>"ZTA8!9=)-:D8;E59oTCD*:78Vh1Ml)1o>qg@8#S$)QQXPXR"<
+`oYkk9MDrS8V;G'd"i\BnaghViQhP9GBIQKc?;M++.tVt\<t"jpZVm3I<W\u<3t2[
+k&kA[IXl$(OQ#bqJ`$Js=G(=$H=r_0*Y%J[Dqtr6`3t)5C]M@8_qM^oQ&DT#[NQ*c
+)u=IQ_2Jc:MWI$QHT=VBA)NLBJWnY<TZu(HH3VcdFIo;#Hg[0;I'o<F"kY+,Tcbe]
+9-][ME\fb5R\Qu!)UQ;:c[mP:Q5G*!#T#9Ufc9N;W4L!-*cV0-A8K)[P6B2&gc&9M
+XKF7:CV,,^pqC$E@<gPQY;UN26?WBd,?C>\^+Q+a<A8jq,<V7Zn9p:K@OF<"]_QQ\
+UY3faW6,6I\=W)Mp3^Rt\9"aN?(?W2iPs,6\NV1Z(e=bsCDTQMYNibZc;&%actQT1
+/rkjkU92:4bB8N;ac(pp6r/^X'HjphK`[cN6rrZ)E"a_=NOK4-]c(<Z0d8tD^$:?M
+Ocd)=4CPWmYU;(K0aW8i8kC80T(!^tU4"E&Nq'(]*\^ZJVh3hURMVW.?[Y8,/BdtC
+^tsR\kWfWfP<Bop3:ODT8J^6@N+kA]&+^Eqs'_IM$t<q4<:0C'fl]'98YSm']K@>d
+Y=CBDJaGm*aWmt8##RZU9CjhAcsacoeK79C!"7Nb3;^@-ebK<m@?c^losT7)`6)[E
+lUt%eB;rNBkt]6kYIL32`eXA<3<?im?UXBqWtm=>cGQY1JdqcVr:n2:n$^KM/^/-r
+]MNNcHQjS*W[&&m@RE^E=.X_/ZE8a+55CB;P*YoGcj!qdjW"FO-sg0TP<O6Q_CIo8
+i@>*PNtq#dNEa6,T86<V?-p=42tCeY%FBfd=F2`F=,18J)1)]?@58(XTYZmo#<9[<
+$Yaf5Ve>e(MJg3]l<XY_P#W4LW!7a94#iF%`UG"G!4/Cd)s5Mu)"fO8kpo<KaO>fA
+op2I('2b7a6S%'Yh\)6d_8Quc^9,G5U=0>fe.FMr#"#/%'S*r+i;fcWTFXA)/#cjf
+jT(@i#e-q7D2`*hJ*VM)2_$Q0O@IT7OtUgYb+k^.CZLl"U:RVF@LGhkj[=P9FH(Pc
+$n&/I+q'`(OK`5/*&dA,%Jo/I\XsMO:s%l/"C[Cb4V\M>Fbs[*.Z0n@eJ:<)_,,f\
+ejf7<liiJA'eb,A.Sg;KCG0@bkao<#cJY&['uq/5In03[rq4_nT7?gmCU52og2-b_
+eTDVW_gJL_3%ODt6MM$Qs#.FknW/]Wk4TFh;DQo!FB^TF2aCT0`YZ2(Xe[0_cb.pn
+*r;i0O,h/Q\?jRI,p3)BSsYI^r&P3$I#ei>\@%Gf:309-r6=Z$\@IUqnb!L^WQG$m
+ADjH;-?SDih-&UsL/59K$bsL#'`0Dmk;P9)M&$6/fmOtgE2_%*`8/2>!?<orAg8/j
+4)6*j[Jh+7n@q3q]0XU>+%TKL&kEguBrAB:G"`XJRtpsm<tUVQg;t\5'<<?OroA<D
+F8TD=4FP7kgCSF.BF6Z+Z$/L@$k-W*HH2)?GFN"b9OH$42dc7faQC-mB(pN.Y)"">
+5J&?b`]ghXG>Eb@5t4/\2?Jn%E"8IfVOGT]HuMlV<4MacgR"N9/M=q6;8qN6e.q]j
+Qd4;FnT8OMmMLY6`QHTP2&->CGc_(=5;BFnmVQZf?d()5="'I!b[?nU*!BF_#2hab
+QB>62M]E]n<kF`t/]7!=%F"P)`oBm+)5WWjhf[\f:'==f?u?*BM3Kn751gA93#K^l
+1p>k)_4o<@/Kj$V?O=4GhuS2Os'amk`Jt>%M,;bGFc.t"IuC"U??L>a(ra>?Y:"nX
+)+UINWsEl2pUP5m.U4%=OgP6+k=#lQ4BoQErh!Z-GH3BlhY;O/$JKoP[?@(b_6]dS
+JJoXGFapQF8YW:1-G@B5SQ"*n)qN"U"JpEM:P"pS>3IAZg1o[6cPU]XYc"=,7>PX7
+'!^cejB\.qG(Q58(@9:PFbgeXeVT=86T!o395%=%#aC9KB7&&!YQP^I:>9LHC$nn"
+oPg&_%%bgH1r8euK<YNKDR@;e=r=i0VJ/H:n#:O$`FnPIp0.gmgpM@9oqM1Gk9LAe
+h5MIR<hRSV?n3bk3JNhbE\9,iSL]eP`?\QC+qr$B%]ODiDo2aYPCohTJ<&U^riI7V
+M#O1URH`I!\+<]p_q\N>Q.,Ok%Db<9@Su=D9Q+!Z3&?E.]A*AT_WEP'_F1K2)pfgR
+Ab.*UG)M/P#fI#,A$:hlm_PTI_R9PtPhp5'\+A;N688m#O;]H;EWp`HAD]%("$$PQ
+E!26B;5.CYkmYh"P!Sn(+XWG3e8X0l:pG]&6eV_g.G4Mk.OQt@33P4gYWMsGkdVZr
+$/$TA8aLGmp13(H6_j>dDG#sXQ=SHjTY3_KDR"3?VAFc%n64!ej>*CM9H_13gYj/T
+nZnt$>/A=tVi%D6-pZUarc(*umf5iElE:~>
+endstream
+endobj
+28 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T6 22 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+30 0 obj
+<<
+/Length 2350
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:,9on<m'#"0DkSAHQ>9eU\/"J\20q1H1jK`9'&@gmGgZl3o[a^E"EDMbrmos>-
+.$i]<Rl21H8?,d>p$,OS6iqhTj5S>\%jH<>(F!UhKbSg.99nR`,`4(NA/7b%-_e\V
+TijK/d`D@co,^s4!Y:ou1eD-D*/QNK2-PK%UYS8:1<H7A/J;2u;-q%2OX;BCOC0%4
+;iqbJ=lL3^::.CW*u=l[/`*Q9E,>cj,sp;pDs`ae"IP-i%W=C3*Pn48pg7kSlhICO
+nME)G>F!'4//.jXo$cljL!H_%"pER\]n9ms]jLC$[gt]Qr9ZY[$M4+jD9aug5L@ki
+f@pI)m<16h(pg\<8Jt)ZP-moOb7Zbcn5u+!ESoOD=]Qd_r/hr]OVWGOo:f&<<=`qr
+1=LrFDKbEsG)u-]S(EEo\"26e)\`,%S!?I9W_*Khisq*TqE3dd$=QbmIZN=1mnf4O
+js)gn_;iS]q-;s8JA&quH!6s64nh9.7.!;[PITLtY(r_Mb$7dTIrMde$dX_j_%k6f
+Xo_tjTc*Ut;o<J51qPX*Wc2nR\pJ6_1N][<"nWQ;cPo:"=ECD39^%gn/1mgZV5'C>
+\K)^ieMT$)/TQI8q8OB;FrV9#P.Sd6$U9K4,+p=-RopmS3^=1"eIGP)&cH=@Uch;_
+=e]!]N@[MSr\I&E#T(GSWGfBT(r.-=_@s-o$(%*@7'n0UVL:VDS94qEjKc`c;WST(
+bJN%=mcb[J!-j*ulcP=+*Aj?m$qoi>I39!-DQfabD!XW_W,?30*Q"a\DC7i;doI85
+q+qLE<Nq_/=VAILeE57%VVAPS7%/ZO0.h,Eh)m_:8QG;2ZXdoB%lIl2ig&[m'!:2t
+T!*q3f\dp<Y*bVk]H]N8Ald%i@s4n.+G^#[V8HLaJhRH%7.2r7@J8"6)dkaTjksl7
+-7D6*3ni@hCkl4N<b7tj#o8/F;WD3LO3G0LfkgVV\jKM8fPa35`%,JTGq%':atj[q
+=j$EFPhX/eIr$P&VLm`i,pm8Wq')<mJG(q(iO77uq(su3=`%DtaE*(MTFE7sb;m4G
+B^3?04F/Z.6iCI+nN(f+*i<4mm^PZ\"C=as$,#rHD<o*50dj293:@fM"DUCk"UDB[
+:QVKLU!M7=ZTUGnTc!W_c"WXC%c*GM-s13`3S;]S-9C.dp'j=B50s^U(ud.I^0Be-
+VU"Ob"!b7rUZLgP"(=I&B-lKKD^R%s11T4&:\>LD2+s#-\EbM(Su,b`]!:'K?94T)
+A6ETqVF]tD=kU*cZ+a-H]2E[a6r-1c61eQdVue+t/];"G1]ne+Hefdu5FT?3ku9E;
+Vteq+,!oL)11(^'6W6d?/R$MIL#8>f@(`9*B1$881?R>/YRV&Tn_)uY5u4@D"^7Bf
+N:-*P?_QC8qfW1^@q4OA1kU&<0?Pu4U$$m_NLIR^WBu=4I^D0Eht$u+%9?Uu>6-*+
+VUcsX6c3s)FTq01<Oe&Ia]!-&A>R,E'J'QA^'EP2mJFfHl4:TI.gF0`l7anMXfQXP
+MG#Q8C@BaaH)W30h$qE4a9$EaV-=>P$>/V)(<Y3^&jeJ",de[+^O49aj62;Z(G&;Y
+cGOA&nM7b^r<tS5c$_'@Z^ktFURXc$@fs^8]l^@doWsAD/8Ft$'<]\jb<QA(io8%Q
+ICs>(aV=n5Q9EuOk`BJlq-;tA8VR84FFe[*@[K@jrS`8Zc)meb\>#EJcI4Q39f-h<
+Arb<5,fUr#=>Zl;b&#u[De*he3&L<lJdN=KQa.h%f)e!7N6[rsVXM(:J^Y9N=C`JA
+D-^IG"qkjB;(5hXQ\@MQ>+rq+;Fto;mjsqEM@#u,0_k3g/XRh/E4n]r@e\C0D:FuB
+:QC<i'sk%bNqIsJFapfgLENXR_rIu7OB.g\?RDRgJVQIXZ-3S(F_V?BSBs@+],e\:
+eKU7m*Zj]"BAZuf#^s1B?b&WUDWNXfV%.?MeMh3\RrWj%];0BgHps_R\-l\8*!+?S
+hWC^c=\J>:RURk.^[E#M;?Y"QBut9i-<R9cqa3SUF.ng*l1l_#k=T=8T0)%718-e(
+&q5IMh0l9C)sk1=QMR^`0TliFC!Goe][Xpdn#T=BnH6GcXb^,"pZ[-PB:Y9$-G:]'
+f8d!4@>)NALY@k*l:#4?6HliBe3jlkBpSV/%R#UJU<6ZVf(hb0[!iBT2S?8cd.7LR
+r:$C%0(EhMGQ3F/koHq%e8*n=0)4^eYSam>i>o3u>^R8'IUOm7`Ph)7$u1?\)HPu!
+ClI5&_a50]Fo0:$-273g#V1G`1AJ38-prs90n'ko/rb%BgSOc'VPh]WA`#MmeO=GE
+2(Gg,FM:B$.u8?TX,-YmN&F0)]it>P!6[/S]D~>
+endstream
+endobj
+31 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+33 0 obj
+<<
+/Length 3053
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XEL?'!aK&q0MX=S*orhR+SkOsi3ObJe=UoX+mT_OCe`k1WFDacPS.(]F-rQfN*6
+N[1N\U=hZM'$2$:S2kZQ^T6&B<IDjT<_p&8anT/;rtb<"lMj_g'\V=-1lLeqZaW1!
+b3nu*IU6l(o1E<W=.a+VB?M]\R,5:JTD<T"c$qPlnp$SgJ+.pdFK)]S=]a`Y/0ai^
+ESdX2pNUW5$5'nZ^RLjR/BQfM`jg:bm'h<4\S.GkAZ[&SbNY3nR^"7t"kHWHCMaTG
+/A]5WE>K+3A$!EGj'mC(idR:qn*Db`pHGk=V`3__*l<WDm0ECoa!<d=nE,r5\G@8u
+\tB2RSI02C2@8"7B=sPD)b)_>hl,tk<"h_++ZCo^9#A!'0Enpg0TcZ[b^TB:?aEVs
+Tf=Q<1?3k*cW^Ct:-I7fB5)TWO"6enJh+jIhAO"RBpRIO0tC6IlS/qtmr&;`>?kd[
+0f[]j'jtYmH`srfHZt51Z<2cD\3!1mV]Od8f9%YY7.LZ^LBjC9ZKd>'%O.0nWuo7.
+XB0+..RC]/clc7kLRBT+l3I2frEui'iu]P/_d8eRSN<cG;'r%T,.Z4+#?IqlLt<pE
+)%r;aK.8@C+PD,^J9'g&b.[c>`sGu^MBQP)X>:Be!M5H&KTbL'D;7uD)qT-di2n`7
+n1gurWlD)a<fq*Be%Q2TSkMuDciq,6S]G;qHjIgkZ_o6'dK)0G_^K,5loPt;H_<Ym
+NtIDIm/ALE@#C6,NRJ+<I_1ac!go)/Noc+Qpj2qRgg:tB^YlXdIEn2L&,2\s^Wb[o
+$d>a95OHUrXS0.6dGETr$^SaA&mRc@\[8BAJ<'t:]%R@HU!NV5f[sbo>c"Z9`+XDF
+F4j_=9Jkb57gZ5!2K`,`TOXQF?;l?T"V8dI-r8,9#uQ8??Ypf2+[.JM11]XT>M<p#
+^3F!c`UW_4D^0OPecY!K$*c;s%rKJfTt?gdQ@rf-G2StC?9@^ZZ-J"mI3T$UWPDQF
+3[bP`EG24!:12!t>P,-(11EG$#M%Q,$^'T"F+')Tj/8foU&eIiMF_L.pBtC`UpaiS
+>Zq,a(hr9q6.t&b1ab5AI'PA4SS+2X)XnB?ndFLhNN/>)ZW\0i%W!J*;gif)%&*c/
+AGFVg#g%\.XQQuQEP&n@m=RRnm4*0+o\hj2-bGdd%*8lKG)!ZWWhS05?:=#!!OBR?
+mZ@`-7-MpD=*+UF'#&(lk-ENs&,%YEU9u-7_NTmZ9Ie7-+S/g[9Vdfk5g_l?qe0g3
+7U*abf$t8/+c5];=SbG-FUj:C7"PpU8T*Tu)'"<rrU<3G\\16V3Tg*%M4hUs2L/0l
+YAD7-C8W*t(0>86l5ESBPI(L=%lY#^:O$?Lq#`*#P2W"<,Bpbch191LY$=982"i@N
+Rf2=NTbB.,@7j'NC!;C.^1ZM?AkBGQkgg6h"en?(D]uVV7"GkSYrO<6_Z7g<,U\ah
+>ItA1!n7r2n-eEN:<H1=q,H"r=mTj$^=FrCDog\?XiW_AU`&LBE+)<1;i($(B2KFL
+I<hu"Er?hFg//9;'=M8*'Yrl>E]s/^e!BDSG)Ks>gQ%J6<&%lP,\%Th.&2cE[(@ha
+YaK5e8,A>fmdn]u'q@:?)A=B2UTi.ckUI*/J(E]?3^Z6D_VW^"Mn3pL3$O-'\e@8@
+&=c%u%m.JC?c1Frh3s1B+r%L7b>E5u,tWHe8<B`SXlFg>ol14mO-</l%'r#"&aaWQ
+S_P5@L(_n^#c/,j8<A0H%1VkI"t.!:d<EA2So-jA&0eUc4!_1H?dU`W2"Dn[UXn*$
+N4N6!$qCMFX,_JB8bd'q4Gd51=c]Pd6=r&kfJfS)CaN:%Fd17sMlFb;<boNgVfptN
+gVf9/s%rA0p>2h4icI@6:ag&?/%BOMP(u=cO;Kn0=AeIH0HfIFQ9'bT;0SC9\-Xd)
+[uGFI.sp:D>=7.k/QES_G)dhXXW9Mgg9.pCRGC]uP6-]`=NKfRf=YK5-n?[f>g@UM
+SC+;%cA3=C&Pda%>M4gQBb,+/rm%lW2\U$.\-\940=5AT^:nB?l_]-.:3`1N4d;$N
+e@t7Z%fe!]H9!HfL?C>6M0KKIBmV)[@Bps1X^/#2,ZmT[-K$"1ZA=ZJ=Uc97nu_E%
+gikBt\,Nk7%75WJdNW*);\;k\h[huE*'"5F%i[8FRNd`n+(e*HR%Dg=_9?tl)pH<\
+l8*MG3[Z_YPSB?6Bjq+s&oFqW)pps5%'%$VWB`>2QMTYNoI6P[FZGSuXH("]$T!\n
+"S;3/<Emcam\B#`mb:Z=T+GILO'OM%2<qSQoF3odfFkVu%]U]Dr8+Gk?Z]R0e7^!9
+JS,-ih-A*4[rCu5Gpm8f&,A4/$iq'VfC:c0.%Li/-k7L7S'kb;:+C>B'PC_J5/qH;
+@fmMEr.=Kuc81,p27\\Ag!m\ATM&+VMF$$,9&/0r*_Oc?p<,_#Ol2qI\)]69)';EQ
+_QE%dmr@d3Gq-Nn)%paP'H-Li=E`R!\Fmj=Egmf"Gk<,n<7#!i$,o6_S0pbH-0oNE
+q"WUI+$T\t1Gi4;7DG/RC+GAR?i/3XK+P6L06g*aZml7,&Gm\o[OgqS'%X?5mL<\u
+S.:<7:!VPd;@_I9Y.8A\9B42hPLPW$Z.+]j(IB;YO+&+!8>8nkHF!%fIu!s]Lp!8;
+nt^u@S'dt#P`KQ2RkIlu^dn$u>[c`78l"Wu!7>)&KTTB:C'X=!j^M&].?SV],&Hm&
+nIs/ZdpWJ\!^<HmXg8KbN>+)kjP86G$n#GE_$%VF]0[cg'^@=X,HAs1E=%U7(Vb`:
+fJ10W2WQ3E)i[;+>^mbsnWaA^pI,NN'R<"p`b*#g0sPq:fA[>Z/eq[p=@T'N;Q20a
+hdAs)K#tkq5\QC#BCk9q">)_\11-^8(][6Rn:2+'R^Vu\CURe=3#H+./-T"&BUs>=
+qT6rs35V'-^2`q<8YZ+b0u0Lp0lH8B*+#[1?t:"ZgcRl]B<43XY1FgW<CA\IafCc.
+7\koD:,W'#X<a@R&$e2q,.`?4c:?:.@`1bdN0XHl,(h5Yb54gkYd,g'qH>T@#Ietf
+55qpXrI4f5%-V(~>
+endstream
+endobj
+34 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+36 0 obj
+<<
+/Length 2215
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z\7991#N%)2U?m*4Brm>RidG*,GE-:k=_&Hm7eg9L!E17g5_Z1bV>IX<A<e4>T?
+ZtPn,ZT3sjOs6ld+/r>babs_X6Z/4E8[KW4-;o>7o9H<T;7'a,c#Q%*DK_3[Dgiuk
+]2!c-bK6gugO@TkleCOA8^+QqngD+nSBP=)[3AaA;++f?[N4Y=QVAkk>L,4?kNc?c
+ar"=slCZo/6a+a+<9,uk:q`'[Fh-$A,c8:0fNC$A+-$4MZg45jJoL(g;@cb28'[<W
+_%%XN"-.%`5IC)H3)Jg517k\eIV;Krj.,m>fVn<SEAV;E`'8UNN0et!]qB7Q3&KH^
+hG%\Mn)E4#G("-h9/7`SLX'gAI_>%))L]@.P=3c,T&_"9,eOfhDL:Akhd18;4Y(gV
+`51Q&ippiqD`2'N2+ae@QeJ;#WG/:)+'`&"]lY]QRbd'9E!-""8VBq:k*TXcKA1%.
+8h^qAcJ^8R@c-Zm^fFSEhB$5'#o(hR\)JTU5(gs$8jefEkT9Ocquc[U0Sc&a0KV+(
+loL671iYe[[s9/p&o%8iR#.>=XZIN<h)GPu--4FW/6s>VnJPj]M@cElbQ$MrrnmfX
+q*(V)[A?Z&0r+cj9sk&%:15c.j4)eOU2iSa&5%KQ(X!6`4/&q5.hW*6ea0^!%B[.2
+1Sko4kT]imp;?Hf8Y#Y(?d4&c7#OBMCEl0(#jbZU?F3pCC/\))@3Kb_GcoX@0U`$7
++51>Yo"Bl2$OZ8mMPJ9(9nL7H+&*eI(3J%l];C:W!6+5XNH";p3'[I"j_*'1NE[sU
+I8c]lbDI6SN5V[HN/E"A-r*Ynr7StiabZ$k!uh(`N&s&BX),n(BDg%1hiKf<<$c\L
+*+KT`Oq8.`r%l?WT__.OWgap_3D6-sEFHiPh8"5D@E`2*Ze)'<>`p"Rc,<"siql(h
+mdR\Las(6_d%KuhT<7%b!rth[4U>2I#FiiTUl_B'nZIhe=F#4C3%Z@2@TK+JZV$#m
+1J?iso0FaDY+Xtu1e2GQWe*&!N&9[42*6*kA[C:cHIDoUh%Zr6<Q^+i]H-%:PcqG&
+2s?5'`[\9hhaN7LoOLLIZM`]G9qm!e&'AAX49\+h5$gQU"crNkpE!N]:l#^A0512[
+ULtbA"a[7hm[\V-UFs6_8n77[,>CXjkV?l#OQk[9/7%FfR3Q]4Nglq\@>P3Acs6KH
+UP!1ThN<*M:JEeCh)tgUniZJ<;6]:]U*&ddAqX:OqK=8eh\KBL2>F@6-oc7@h,@Tt
+:@g8_jj:F;\<Rbc'R]oIc[9)%Q?E>5St/qlbD3+4"5[U/3i3`SaA6^29$mZhShU\2
+6LpB^^lP%-[F$>rmbo`o;A.?]:95m[>_%#C8J!KO6)B[0^"Cug(jL=jr?E:L!j^l5
+=J\4N*Wr:I5mJ[i\'K#>&s+RBKUeQB6,Bp!(cH,HN/\:AhGjV\<ULr*aVou$;W](+
+[!Z03#A)Q)85[0L-YQq0QDLju_bO0GCm%TPAfdU5<6rXmWf7hq_Co&1jHJ@-]Kua)
+TG:TLi#L*O[JIo'Ib>pp[mO.UfZW.U?u`@GN15@;\H9_5,"&,-@7a@E=^`A4)rZ#0
+Isq4^r>YZK/(G=DhtCOng=q>pN^t[s0X?+*40tg^cHciE;b!9i-fJ<_RPpcj^`3DL
+0ioTR>_rpT16'tSXg1g#hr1*QW7s(Vk9J/PgQ#hfkp.Ul^pfcG&[`KTN'8p">4)0h
+Cumr]8R`Hir\-<@OWCS4hE>*/1][1MLt9#V2!>o5:^9\<#f?e4+T]m)1^c^GRa`@e
+2Y]/Pb74;j,tZ4H-K].cOgq^T,\c5W\[OGfCae]!D=C;]4`FmAK<4p[1u)pXmY9.<
+.?bh(e@8s7P"0t:_[;/+P5Bq;PE,$Rj*2V,-graZUGTq*S'VX_'!5G?]EY,(gZHjT
+1PEU4V9;Xd5I`H>M]A2(=@#02C*#kd%*$;Tm;E"ho^k`E;+@4t2hqqgU^.mP@K&+Z
+>C?S[)OhK@[WSS&&S;t=:)A2S$0,b*dln074["9NN;58XQQb]=4*T<o]jajCmXfhJ
+4SqaQi4,h+iVJq&:L+q9-4F2-Reb2\Whu+fVLBI^':@%Phh@*;p>[r]W[hYl.oGai
+H'!cNmbEGfC-&PhN:T()&?mY*-qpZ(M`<A]q!1&+L9jd1:Cu2@ib_l0P;RQDlNq;c
+$>+!Y%FDNGYqd,nFG+P3Q[`=:rYbbJ[%`Q~>
+endstream
+endobj
+37 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+39 0 obj
+<<
+/Length 800
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Yhs9lJ`N&A@sBljZl"ZSUoQgPp5ee.so>0?$g'=WC[#`(5I#R*tp0c?fGG8V5Zj
+Wq`k]oA7^Xo+TuMcl.Zl!u<L@mJo";c_srkaAa9&iNht#ibW1c-W=ER*Nd5iAT,>e
+2uCX(\@)N+./$Lc%[MOF@t?BY>?pF[a;(3GLa#7236U;oS^;?Y1c4H9cCkY8"dR6"
+@)_:4dWGWfFi^RQDOM'``BZpiGUJ=/NaJ%lKu):"/=GZ'F&p\dbKdaKr1d-Na_"EM
+^k87J'+"BV9r&X>!pD>1gJ#@8$QdbY^mPM?U>3Yc\_C\i%\TC4:7`01Br[FY)Y[Kg
+)/t60BHLVDVMeE"Ro&m_3l*+9!rmgC5h6"F6&k6uGBr"8<QU4X5Bt^%WaA7;:#;o(
+f]8%cU=]D2ak[a[*sp5X!Kqs)6G@:\]U4QFn!OG7AKq%>'*8):'*Z-f,';-bOm)ZI
+9s,H(I_8@%*.$b:.m5_7`,[7-7J>nd[Ek#0m`2ktNd<p[Kt!AKg6RW_%tjqBfPTWG
+h8;.S(u&W0arccR[#"=`-KNj/T!s$ab<3nHCpHV'FL)n6s(t]0J3B``V5O,'>')BC
+Z5"rhAg&Q,,&ee005puW%#&`;P:T?X\mH/<Mf071hpPuY\AKb>@)1Gs(<ngC'OE#q
+&p+5<N/fEV`uX'%5[VkZV<97!qPFG03>[U\5egD&3K!5WJk>'K3\e$[_W0A[-r(lb
+R]j<[oO[bHfk\RE7Z+hTl'K$Z8Yt+$1c`2uIjJALl:Jg72\4<KA-&_#PG`7bMZ4Rp
+qJ$Rh~>
+endstream
+endobj
+40 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+42 0 obj
+<<
+/Length 615
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wj8bDr&G']&?qm!u)I?e^+qW10fX9&8(1,RX_bU7)-=:2*o)h[=le6t%sW1$?9r
+\HdWDhLSTII"(T^!n^$7)s^F_I@<M)bi_2Rj>YrSlZ_ifEBa!:$gW6Y,Q>TuUmOgM
+k67HinDf*8WI_q0[B!9]G7-qJZKN`"7100]=QJrA)<[).`VfK27)L[+<PIZ?bXP;&
+pn[L_eE(I4"l6$o5$<IK!Xg$$hgo4-mpt-*G,OBV?&TouA/[.["?5-K$J5io]@[So
+Pb^CI+8_[i6qDANLTMJqZMRX:TnLe5Bm8Pe.7tn`[Vgb%U)A^9Jf*?KqsJ['DM-;F
+#i!b3$6I4&m""?V@Y^$3+'VL][UA+t?<o[c,3pLcGZKVpKanH$GaD#obroQ@U*mPY
+/V;tk/,L/WD--Iqk!AV*dH,JnA!3QaY?W3ndDA>mUo7ibm;1P%G?&G2q,E8Lao8_O
+rk8Ba?k'likZV4b]'Y4!g?,#^%Ql\:S?_lkE^%_;A,+h;="0kgrp(+&EPan-BE$/N
+R;;f71e@$+A*C)&/\(H$*?3B4=fSoGAcrl[0VP]meQBq::f3/Z%:%G&<I.IKbXfQX
+XCA@Ln-f!i%flBU'at~>
+endstream
+endobj
+43 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+45 0 obj
+<<
+/Length 4355
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:,hiHO%&UrWP_WXX0FR=m[IQ$E-?(0PS;4n*PhVmbE"4s8aV7*`Yak>JcrSL7g
+3$XIN"O.*1=X&X=R;]h8k54i-Rrpn.Zh<`==U@)]m!h\.<7nrW[7]LrIC`'`qn"dO
+Hk`pc@%Z'*]D9'kIMtqq=F\'.A@>*n7+eX-5Ms`9b.SL7\uP+hnFGW*0Ue4&OQPNX
+B)\qp4Y;u!h)k(/dk3hds)OIL.Q00pDU4ep!Br,);3p]W()9qS+.?WCPa+$\R-iOJ
+m:*%-p[b@C6a0eU&s'FY_tW\/m%\N\>ORL0^1>4USo0<fU>;\a`i`\E>nkY^84>D"
+AJ)d'gf7=:LT@QEG5FTA=a9I<h<rU8Dto<udbZiY&B1O&L<h/nQ787aRbd000CpTB
+p7LN[q("7(k&FuO+5uHsl[BTu`o$FBL@bk`*^VhFp\pta^f>=gOY\+"U\h!q@-?4A
+L#99URXJsd^T&]PCF,G:r)/*[l/NB4.$"u4jr"T-GjDO(ckL13YMA@C@T:KpnWWBr
+VVQS0,l4Lp)O=iYb_t/G*P,8Oj!(oOP.=O\Wb+SBo,0fK_@WsBlqrqCKL\2`VktK+
+Rbl%n.1>nId4``WbXTZ`#'hcB383j$ac\4',0KIg^A78.R4Xa(Qqm]]V:*H#B)^U"
+<e+oMk/BAY\f]h)GJh9u'X$(H%uEgd<?;j,YE6p8>=aH:[2F+.K[Z8Sjd?XErK:S<
+gJ'Hb7c=#[-L\P&<[1RILdWQ3(t-<f@9=UgIT^WcaEa)nOslLGd\n7Kk$kM^jE_g,
+B`nMW6h5HeNl>@sTtL!N5%O'^-mhUY(l@DhP]1Ttrnhb``o95bbq-Y8^[OHLr2I/e
+coe/)GM<V]'sDU`jPHf>G;'Q!3$O"R\pnP9?MCXb(g3^B_m&6gG!@&GI?dVK1rP,$
+<!\&3OYqTsXLbL&PA(8+6McN%dXA=tYsJ`ulg"\Eg6Q$(`h4C$4K_uorTLWuj;18C
+17TtY!PU]WBScf\mDC^_GhP7b7M,^SpOdC-=Drau"=$k:U/+QTTZ9"W'G.$3<iFj7
+B6S(8aXO\$/1^qlq9\KS4g^,>`![l5'p6V*N<6"j0sn<7<Dm0-ZATSW=0[U"Bu#L/
+iKjHXNlpDAn32sXba1,Wi`V>60,_+2Z2g.lW<r#lbTX"9YY!2I"HOfiBEbl*%DC@t
+BFT4O_66/][q4OQ#rSE/eI]O`GuYCm+?D'[<[IBt)<)Qb-V\n3e-P\tAiq1AKA\..
+olYUCO45]96FnTmP0MdK4Y1T8@iPC,d/9AlGYR5URQr01&I74U(C7tm&JP\=Cf)q$
+H(bUA-gETd2&/IkkGP;)f)kJ/F;isQ4gS*'=21+b.q?ob^(4cDZ@XX)^?m=`47f(-
+q@dVaI06R3%+Z@iP>.IC;u^W_llPii*e-'uZ_AOB;N/OJ]9j"jBe+43X&"I9j?=n<
+Gd>HsW,(_n6-nr$%.DL/(,Une#Z;hehnM-*m'q6F@8Ighq3)$.$'CJf7/""r3=ejI
+[(mpb#t`:ijqd/B>ca\CoO^5[/IEGV/%u/U`aZnFm'H6(P,-)7pMM*+h>f8_6WmTu
+.7++WL0oG?-HAW26<*$8H&Y\qE/<p]hS)oGh5SK:MRsD%H9R^^Hj;VccZ<;41$`i"
+OF!Vr9O*sLON3j"+g'4g7P2LJ\-t971E_A)3-Ak63T.sg1([2k^E@_h-(40^=bU`Y
+@Ol1,:OT_@oa17RC8Z.-J.eKA!.%\^VE^S$YQl%40o5=VOi]fl(eCJG&atWd!9&O+
+cp;/?XM)tXpu7WI5Q:;uY<N$TE9ik14MqJ.*,t5mq<78lZO.lpp[P(0XTSsL<q>;1
+nsMrUIlY?Z@:-%EhOpnB!Qh8R]3$W#V,Xatnk'h7#!u=WPgR-sUbGZ'@ROLV.[Ie2
+bp)"/"YIJ4;T`d;_@eYlhp*R-]o&%@Lk]=5^Pmml3Ir<>(X51)m32,m.'dL(&e1jk
+-3(,A=Q0PsB#Xcb00HR$SP7l'd=4eF(,>FB3Y%HD1ch:3&#<S=Y*T.Mnof[QrFGGa
+Rf\qrSQOXH$K!c@m-:T[du-1hektP<e<<f^")##nC#V%LGrkdtra_gmiO9ldY&M:r
+4FL>E]bpZ\`b:0_]dO5)4+J09g`lKeZ]l>;-p70K4P[^`</-umoM\FTl3JH#EO]bF
+;.$DF<f!o>nBk\`A0i&.-'M2i7TijP7t+P_m+]XcZ/\nk.OCVC'bbG<*)([<f9$;<
+*]);Xr\moj9-p974+8tC`&(O!WRV*QC"fKVa>>_qUh89E^,GXg>Sukmg*;T9gFu>o
+?K&KO_lR=J0\4>U#%<%Qlie7(I_Zc;kR,k<6kh2ZPDA0aO)t\SC*BNiJaDkG3eBsa
+1Ms*Cd<O3K]HAK7drdEF>VD0I4Eg+-S$(Spbq(';+`*Y(.u&M2d\eu^Db+rkaTRTA
+<Cjr(:Q*7^17e2rVie7qW5&R,)sdKpVqI^2\HG\;Bhg)jkM]%Icif"4.$"CZes'/`
+`(@$.MH<k7'4h?4LDsZd/T*<T>9bL2C*+3V>U%JMIln4B=-?3,U,g%"8X[r:_0'VQ
+\n*%*Xu64%3A?jm)&1uG_g>3"mJ_<q"`fj4GoS@34,'>FO1Ns%<T_oaomiZc7K#uK
+B4-Q<Ie%2=G0@67A;Z:61a?Ru2Z8RK-CgU5hE+B9p*)&?9E-#"bHa*IAMj7/7[tei
+KFP/*.MZ%W@:HjA9pMYq=(rT#Ei8sK4_@-[SGFl=(q8m:I88elGbmALMY&@d)?l^E
+YJ_>6QW[\/&Q"M4,jIT&r-."SP6n(J?*XS5"IkV$ES\$UV_BKP09=IB:oMRm%A!+B
+0;*k'2Mm11bO9eFgC@[)4?P1_Z/tdA17tW`ZJo%*5PJc&H7qY'M[)M@2$Q;s"V\2N
+k1(Z4k>e#jGGFDJM>5--/:jR,Q"C`O8IA6Y!=_Qp^1Ibu;W986?u.WJ=JSNCYLOUm
+oUaNBQGdE3BYkFQhVl%@`+MjbLrutGF\V'N79i`6QL`-<`s'hF@h36/IPI<u4:n1M
+k#B&87_*DQUJNSLJPBT:%-Pi)5ZT']XTH.iHN`!mTfK^^W='oF$&00S1;@@Vb?5lq
+WA<?rU>e>.68$`*jH9tP(C@K),Y?sA5hLf\)H;YI5%3@:`WNtI0"qC;nuDa=D?HPB
+`HR:Cabdp?rM3_eN:W*_mht*We2+*][Y(F!<*^VNdQ"h1N/h34[0e;iYN:1[`noo]
+`AIT%&u@"DihU!-d*X=21WQ#]AN>rc5"S,LniX#e7)p4C/6Q@eruU;<G7t[9o:PFB
+_UE@c>g6dlY4'&,:Z8&,-T!uq4ZlMT:QmCe0B:aYB3<P#2d(kr&m:@d<!CqdjSJ;1
+k&.VN!2?X]'fUe8\CukIo@"uWRc3M0Tm"u)g>m)R"qV>bQHpJNJC\$TWY!c:0'CbZ
+jKd/e@7ZeBZlX/el5$V]fs:-!nC_VJ\BhI>at8MN[j#!^2GFT.bWM>'H_mm+?+[j!
+n<+->,%KnMF:ARS&>_,E'fca;mcj!+Yr?$Y!<"00:,;LmWm%3'MB[JH/^sVP8F]A#
+P8(J\G/P^2]CZ,`\m4+`$nA-WWUp!RHdYWL7.J%'X'Vo:(^BCj8I+JB^GO%7^tOL%
+a\>\P-nSdG."-GYa]>38[a^:H=ZYB0#%BKFSZ'K;r"j<#'Pt>ol80cuF9$b4]$62\
+auC!se*m]@`qSgtPEQE%FGm3Jb:ec0pRCr^S+?ma\Xb5TMn)$ZY!cVjj3UHYDIt>4
+H&H1T[;n&7H+WMF%La^d*NI9`pf+DS^Wb-e^3,;IGC;U#A=5Uf-#80T!L\)^(7X<G
+*nsjNNMk%U[4/MP#^7E@Ek3qk8[7\Y'(qRe`Wtl+(#`qqDDY^h3bdfKo0]#cU1,/>
+P'mem`tY<d&5S/72$%ZUc53s&Uaq>LNrtcro"lI:k,]1U/_gQK<Yr+#O4[r2#Q5uC
+U[MTp[+1%,,Z.G8bD>*ZM$ON`+nlV?&2nL&Gjje%CkjXK"U0>2p\^3Eq1A*5L)f7[
+U$J_s^*A15WiglP23TltYTi$:"d,2u[%9-OHM+WY#)S'^!/sVsk.6Te#%amrbM.L:
+d0>3]Z**11q9F;&BOm+I%;.-Ki3=njE2"&?,PN&]Hrts.8fN]5?$q>ImUD".\jNWY
+&];b<^dZ3MHfAHjs.,9+$S-AC2fJT?NPd(\1hc1)omV,V?;%9Y2_,P)X(K5mjsa[t
+\0>mtU>3GW;'[2qHoa'/H/T:ce;Ykqj;L7CrZ^"7Bd/;Wa1MY&8Af!ss)BMarQck&
+8CXPoY2\[r75_HQWM.VUn%eQQ-Xp>A]!F\u4D<bqf33$'`bEmJ*hVnM!Anm0VZ~>
+endstream
+endobj
+46 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T5 21 0 R
+/T6 22 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+50 0 obj
+<<
+/Length 5093
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:,gQLU:%=OkPR($b0AnK`P]\8X+9k(`)a*<b!f>\=8acUmDOYSSjQ+oN-#1*Ju
+c"([XCIGJU\/ZJ.r9a=JrH!.cm[mkSU*lf+,PUZ%s!r0j7E&3$n"1,7dJ`M$rD12,
+qq^K8I]i)s;uc:]o:8eL;\V[CSU1:Uh.GH[;k6,fmN6]=rcbs.SG\9n_Cqg83A"%`
+5K@`T%^5`rkAhE^1V?3?@[5m;I5uUP.6[0DN95Tab>L\3QX<n3>hV$jngr,_TkU`j
+2m&hh*dubpY&:s3ot*`Sr/3JfGJ?<@o?QD7*]],iEj?Acf5lq4bH;W<X3@Ija4Eof
+9TPgYpCuuO>?gpmP@X2hPG>nIDF\%,*OofMAG\i&S.tn\$[3=A*"j!,FGAO-2pf<1
+o23Y)goT\68Q:/BPdckOn#CCLYlK%n$3T^s<7JFWmF2[Go9@-E+Hq]4Hp(s$NRlN1
+?r0Ai(,dd4:A@<b6C%(3"8qDa;g0Hj(*4qdoqU?fK9&hFL79tpWq+]l1%iNsGW(`1
+Z-"CPd?GU<_9a/og\D+K/8>ntXe79`=*\I#+O_AOoR&atr&pK"Fn[Bgmp>Id$X_rK
+rK?_HFY,SeHdj+g:roM_o'fD]iRWK`Ca>-&3d9+b>rU,Uk_hD-+$e$0l`KIps4P-)
+2HRQN?^;)ZKT7tYR/_Q@#MYP3Hi=MVV]qfLorARh6E=jTXbsTSAFF+&3a.!aG!*4k
+;3:uj3fdf\.2gj4UOO0[kDg&#BW90q`%8"gBs[3mGQ+&;s$RSKOE?1]PJ4mkl6:bK
+ED7j]d=s#cBZ>IGCd`]2#uNfE1PPSYFgB?m;W[IgC`VC%[kfbJdmu]?7q[5-jt]HL
+,e<F<9]%MZ\U;6Wh=]rr=_pTUmWoH7p8I!qV/3Hm_uatHRt?M*<m#<>%PSlO6iMs&
+>qpV26[)C-$UP;gg(>,"N<cd@(\b8b-Tg_;'tYfsglBi[<g39oS,*1=A2Gs/@<<X_
+=E%7entO3Tp1.M9at8119`0Ag1_Z-7@`.jS@SrQOi<^njOsGY?/fC9`.qXIrq21i"
+h('>;ChG_N8a8>D@J.q<!'I7;N_Ms4@6Ihl\#EA(n^pf(%]?@q.o(j6dM25c#1o^B
+,3q(8W2"/*haj/IJ/`SBM^qu@+s[F*i7-$ZqgXkS+jla,.)-6*pNd<%?*SdOY6W<P
+ag<VP<OG_U#OdQ`6/)aEQ&0G*[Ta*um5tG(!h.c/A/EbedBQ"u;=c'%n-HpgmY*a5
+5XECo64)AoqE>9OV5.t41eA9Oj)f#n:K$Boc.Qh&Vq5@,,sh7<T]I^>J9qi^`*c"q
+P13J]HM_7-Q=`N%XHuU#CYfFaa7)NCKC=YaiR^]GH*2i8IboFnOC&ENfE@@"e*GBf
++V`*\\3;oba3,"Tmk?MS:ob0aY75("8X,&A<,GQg8OcQHMP\=Lnn$7@%KN.g/kYQV
+>]G5g[+UYR\[-e0+b&1VR<^2X.JRTCb439F;'ZG9U7n)lfsV>H\Oo-'q)A?A>5LC'
+FNX->V&TU`A'HN%SULA)f3a"+q!1`&"G)\PF+Q<8[!Zls"&+f6/]FX,:`UP=m%>+@
+U1YdB;i(L[j&]o#$@Ecg[V]be^k?("oa)8/4j*As^*d.*U#-=@!F-9hZn<0"5\Jo3
+eR1a;OA\a2"]&=Y,+.e3X3'<B=<^LXc9H<aD,W];&U@U>SBf(;\jpcS_pNs*l>Ug9
+p-dk.H3&QWg'a2OOWh!d0E;7$l`,-2nYS8YPB,8K'>?1N^DXSrF_<8\%6m-L/<(Vp
+Ef`"jFf4[t4&.I_j.L=<AM]JUj&Ae#7lhk24uiB@H$IjWpjg:DJ@J.HT(;AMH0D<*
+<C\$/4Oen,On:;M[-iJE4r:3/Z5bR7dHd-Qc*e3_*9_)SR`c&H33>42!q1Hd+OiBU
+OYgG4f!Z@VZqgC"H);`#_palH(F&Gi:"MB#4-ftb.rcd+PnG<SFQI9$+Kf[GfLB+'
+X6)CdAIH-*"gr=IH[^Nn$]6)*GuIik`G<Oj1]BND!$_dP!>5]5;,/D_253(nd07mg
+8\GYZ+0uuV;+@.F<FNJ<Z"1kp=RZCa0@U*g70O/a&sQIV0o29\<`57egc/a<K]T$*
+3meH'$t"L7q1,1+Uf/G:pS"/OrOgm?44^et7"E%cF`6hf2r-%)]2EBD(kE!!\mu74
+Aq$I*`*^$D4;t,of)1ahL0&s,NNoL>+EeNDGbAg)Y-q\R]g0prP]+R'H2D1"5KA&D
+8IsYn_V72O-3%&Wb(<ALkmV@qAKJK0q(O[]YaZ*`?s@<Z/8,9n)/-eqe%)3WhDlZN
+d(,2u?)-n=qH8N%6cf8QZ?Am@:&rl?N(,1N.qNfl2gl-ih^u&%efYpF)?$Aq`RYu!
+'<XN@l:LD+_'YC%k&[iu\BH$Oj>3?3KY`b=#,FR+qh(*$ogjj7Xk*P*8"&$n8u^lL
+MM+ZXQD`-h%gS*^`Y0`3XuQfBY%[HU\tQ+>Y'u8%4-M3@ou"t[PQj>@Tu*Eu0bh4"
+>b;!F+N[^2#u3,2cj8\71Kog6h/rr*C7Z5N4d\S6%T=Qn*@6;EEP_J3roiL^D\maq
+`]<O>TUZAs]\XD-SJ/QN`!aRk(C]2XF\5*uKr`)0==dB7^###*N/F<[i=n1J\1eH2
+A?a;ail['+Z^iH`pK(ipD@&WdZnm(Tjmif'Yr+"V$Bd'O7,"q5ijc[AZCmXeMn.g_
+[EMOofn^4*A4QeKc!n,U;=tKt6%?M\oV5>jPIW3,iR%0$bAV&!k^bQjX;uQsgt6J3
+-"Mm@XC"&d)B.lMAJ1-l8`VI_H!YD'6K]P<n"3O'roc6JFmh/^IqP>]Cfm[\Xj.4A
+CpV:t!S[S+$iYEn)]20u*GP#(fi1C^D)5%:=V0SUX2H<2I^0-bm:q()gBrV*.6*AL
+_/sd>#oY-a&#ZWpUL*D[+Hf]g>r@RC3FFoN>o_Xmf^`qpL?m8)W:S8^&_@fUqF5c4
+HW%]_YBnuBZreB)^.$k,[E6Cs8s6EAHk6+D(d'+I5/piqA$J('i.CO+n8hN&&D+MG
+KtShrRB))U<t_+4'82Wa6$2DmV=-Ogk-"uGAU-P^>V8_41-@V\>9=^&M=+1S[bQS$
+X\l397bos[TI,i)9<WUaf3OR&4m;4nZr#@iO52@cOfK]aRb/RsRM`59>.>4?5qWj$
+Oq#pWjdEZe"4:2*I__(82k4]tCSh[KFQ0\TRded8XoJhqf'EK148fsdIDLl_Q4Ctt
+JWB?GlUk'86(Y^Y34ZgGaAV=j>^dhhq\9@f/9-[^[VOL/D9Hc8,WZ/#KWQ2%[h)G$
+_J>kJ^9:G_OaE$'Vcu]i8XMKn\<13\F'DB>VBcG"H!Gso>q-u%SS^GO>$sY%'pRec
+.$=u*a$#N]cH%t!%l#:Y:0!+QKBN=`<*G[gC.4I^VXs]d#"FV^+`p<1]RXbE$(#O-
+1cZ#3.&l1\qCjZU;s9TK?1;*+$)fY%C*9c&n/CoF1HN3bq^i3qSHUeC)"<WI6:"iB
+p/S]$HsIqt8C\E3#td_[lOP;K6-RI$[/uH0gN.3/"q_1%-l%FD'p)!p!O#0c")Ua5
+@[\f/!Gi[r!,T]Y26s8h7ikYte?tacWB]$"]pW!;6CC4C@AN=B+&nhP4FFET:jI&C
+^u?)m=?DTE1#FH`k<us.l]/es8+T-&mrhFW%'DmDo&E8s]DiILh:ukb5^:VYaHd7C
+*sqYbacJO>P(f38$dW:-,UM.D4pP<n:;n:-Ne],lTlO`p7-@!dX^:)N._Xe"Y#-1n
+4hNo8mu8NA]d:<kDnk9YVi$QJ(ARCtGZ[M"Q\Bu+)?M#d[:_".@c)FEpKVsVpJhrX
+Z?5KH;-X@=&/7(gli_J)$o3o5q)E2Q'Il<\.'f='?F@Nh'F<1TE99En*5B))V+=\N
+S7:SU<&=W0:U>aM_l_W?$%VOK)ifBCOPtWLD]#^@>]MQr^RqdjFk-[/'Y+YONoRoY
+%c]#qaL`V1)%VbdjQr%W/)U-h^S@f*5=$nMBc%al?LMI-']SE/L;IG1r?7A(F_)?t
+S?FGgX7\iH7=\)CL)+%Pe8@>,BOb/]8F7J9jRhIF#PU7/7[ZCnM&k5O2c6h-b``mJ
+@Sb)6N?DMuq1>PDs%8/QMAH)rXHb9&1JS_i&XcTuWX%]jM$>QpQMr.$SsS^aVs*I_
+Pi>_5g?CL3U1?km_G-XB"]Gn-_SAqM`93*PF08ahMWj=,2eiN?6t#Oh$]:3+B;/ql
+Qa;Nj+t4@c-C8[O?J"%j.aW4'"FFaYg3d$Z#*:VC)`5:rm:q^G>rCc.VGcn7L4]lB
+[mPq6g161XZt-LmJ+4/=N2CU+S#d?:5.Mg2cFq?uq!Rm">(IgOk4h6qpkP\Z@slT/
+BIm%"m#G+#Bf$O$LaUZUc&eXCGUWC<^83,))Ej*24BV@d].TW#82DoWHQ"jZF[3ZE
+<kr;3E$8A1=MS#o(,WEg$qj3kcZ:<-'Y/tKUH\,*d>+YV?'#hh!?cQB[S`@""4prb
+[C<eaIR\b`597R'?=j]OVHGgAT`CY8.TD%DO:E@h@$I\>Je?/L4Wc,<c/p]QYlt@f
+g3)6/Wig:5pPt(JM%_[kC\u4.%Zd"dJ_(i_JLX#BOBa-JkJ\6p<ffP5]0-umk='cH
+;MXVM5S7[Q>It(h-[Lq]gNBTbKXM]:%/YF'Go)]m?(`<ZO$^Ij!9_k-[&BHi\qEXs
+DpI5!9Z*U*NJ[F*;HO_3AG:U=IL&U3c4@%1huT4@Zqc=D[c>JB:l7;RGPgp_dG8lg
+GF6$f8\t2#g4/SYf"q;R4M6.g,!NXWF1*a6.k1>L2^8*22Zpd;mi3rB9_]3K(0kX"
+`FO]0"&[g;=tNjEScNiSQqXIhV`AA4Mf*KM&._EGZP,F+aJ/n`W;[Ul'aEEQ%hq_u
+Mhp=94p!;D&DHklAr;g%X@EdOAd@"t:_C1m^Eh'Z\-aQngLIPG'8R;J+6"GBDE:(3
+:Y$aL@>.-\2ZbIqrnmeBLXiF=[6(l4;!5_iKHQ^7:Z;ud=R'3R(>[7$\e_o#"rW!m
+Y&(FCVial\_nhSc9CqX+!o04FpRD)lirLo=RQE$qFQn3W<QS<@PF-A\9+uNP?]SRn
+%feIH\97~>
+endstream
+endobj
+51 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T6 22 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+53 0 obj
+<<
+/Length 4683
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XEL_2dP8%_^Iqe88,L=1'@-Q@7QE_$kWCH^Fec62)F*[ZYmhYlia[<;lbfU.C2;
+dXtg6]$PD4M%[qNa2`[G+$OVl8+F+F4X;[I4sp!\Z[^Es0.C6@q7&RO,`hhXcbKB-
+*qtkHhUW4,9AAgX4?[Q]YSK&t:b&s/[m*$'h0aNpQ=Z4)S,$IgVe7=2F6fE\n.oC!
+]A^0_n3^P'c#ft#oCDOGmCs]q/FjVS?D-+-4'YqA#O*:QkJ!PBTuRi$$(("5F5MA^
+?gUP]TG;V"Ff)u^QZbQc'f&"]rOt)[HJG-Reg#B!.><M'D<;WNLhB_dnkf\g;O1ku
+(Z$4gC"Ji\Zp^Nu]&Ai90)!WKG-50-q&$W!go(H3V9=Nc<GbMIg3tu>a"!*Doa2d"
+_g/tY$hG..0!o[Cgi-c,CqV>+k,_+LbD`7@OMO:AdG5=F8Oh;@i-M)eo`B>DCkV>1
+h\)'?Y*gF2KM@qo;SjbXk5H.6lQ7*o3fi_,'onTJGLh*-+9!t%]qrr>8A]slm<LI^
+I854U9kQCEI)*4ANtf%t]W*r-3Y`6/=(/EoE^`k#$]Wq);8s4$o]NAe^.FH\O`lL=
+kQe]^\b>`]Uhh$lGDiGcq\aqIgbiaF;.8sJYFJT"A?#-]!h2Heas2:T)Q"V;_>\Y(
+YZQ("^pjB;m2N$8*%rC?pKE@iIC"9ufW0pWQ)f0$i/`u#d)R[!Yr0uX\81S*.M\G$
+B9!\MIV%OOD\[BF#MYO/30X?O>XX8I\8tt',$oO3\cuJV^=l(LjS7^o=G6O)Ku.BP
+"'5*I[!ag$aepbfMM2^taR<9&gEROMph&/EO_`l1gt,:dF@q5tQL,gSDa*16N<7I.
+fj$dRBb8!^9EdES8R6i#%"7lTYf`u1PYNZ*Dh_>U]UMTsj*RCoCnHe,A&I6hIAkgs
+T>!Hs",Zeq77?Wc@2\k=l5_?1NQ+.A;u=VaBPQ!Uiagp/.=0k[Qi<$>[iJkd"cAB)
+2bfE`$cr),a)rKc8_hFO^7Qcq2c%C'o;)Dq4@,DUbZ2J?&d6p$&*bbE\5?quMsnec
+]&D%:<HoR.2\t2jU?-nf-@r4&\osGrU%&rKT3O>r`8.&p=3,5\NN/bi?9[^n8;q/^
+!8f65[(--;UEST;3LDN65)YF.rO,\e&)/[i4s[85cf8]Ag6tW,6M5Qon^ilKg5qs\
+ruZ[ao;\d->EZ.^V%hNZLMEnAR>_PtlPt<H>Ost85mA-SQGOdQ1tL:':WD*L[_:#6
+Q(9dRh5%NV1+9E2kBS-FLrq'mXM]jP7VfZ*kU[:1E!&qo\O^2P$CUqs0i3k_SL3RB
+FJW-L95JG_cMhe_X)WSQq`WMhQ2*`pfOBKlWa9G$oc65IJh/+cJ026;"27%iU2^9A
+n&O^8BPTO=J`YA5*o"5R$R80(@(o0ca8,aJ2b[P^qRt@O3h`pM8:<POL.CiA*D`6"
+:Ga-N*)Nka]piT!$2X-ojVG=VM@*Ht\un1jE+0lgR]a#2l@M?i0-Shb#kd!bqAijW
+nBm7ZD*oL21)5T&"bB&6r.Rm9%IM)Hm.(/d;2/1>;Cu#K8O:s.^CD`!2U&!/5%W%a
+FN(Rg!9>mOoaO@IXTR]7J7!DTr6guRW',uPO#)oq]/J2Eh()bZfP)PtCb$q+,Zt<p
+J!G23YW`k+i(E;EK[?@^F5&W=nAThP8Cl-@Y9GR(<6%i?o[rD_G[[&]Wnea>0+-IN
+CuKgDAY$kh;2l#a:oXJR'AtdhWpP?s;.S@-flp@o_kG+>J[Lh*f>o3]-RRNjk7L*A
+[H8UB"]fjO;kW&Id\>RX[_B]*IS1>4LJeuF*$l8qOX>NfgV[rPo0egS^]"/tQf!8l
+`P'IuRp=iSF7E+m3TBS<"11%eA+$c&J\FS-@hH$gj^S1_fe/X`kblm/i2i/ZQ84FA
+a$c6LF0$FS@D'uV8r6_ba+q)Kr.N<TPGF4erR!1Ao)L)Y#)UH$@gru?@iG[A:<lcl
+%d1P*TJE\"_al+H2J%1?0)*03*fYug1eH^ZXtBG<88]O)eBC%?Y.kP&^sU/FKpIuJ
+0l=b8jdLG8oEku3TFr5"'i)?K?!3Q@Xj[fS#u`q"32g7EnKh6NpZ4[PWKoiK*?L!`
+gn]3I9.&#O*Y^X]c!B2pPgnOA<MrY)]MX0Pqa](c[pPEl<qO,kg(XO-qH'.#Ll>[g
+5G=FE^7M,7M"a?#eAJi7VOjdB20DHGGDVFnGaU<:M-O%3=IrCKK#FVe=#5pt_,pRh
+j.hln6Pm6sOfZH0g_Q%A]nPn<Hga5*X?&]EE6<a4^:*pF9s%?J%]##qs*%6t[:c+!
+/:Cm<JD;c&8pnRoMQ8X"%s3f6K?.[c[>mn]H\.D1+t6ofKQ&pb>fU9]<4$=YTS9Vo
+22o&i_BWj`MhjPr,X1PP#2gPr17LHUU5VRL\[?'tTNe\AOet"\9.66\6_Is$.'=^)
+$4gUB2<Ep/ZlM,__9+'fSQOi*9K`QVJrO^k'VZs>)M0IOfMW<*:T5GF[=_cX'XT;3
+ZA?>h^`(')6DCp;Cnu2\6Whe30&C8OVKUj\?:HZ<QCN+B1$WllUHO*97C9?uF?qS-
+eXE`MV54fV,SA.D!m-`sX;HgI3h[)"Q"?76^l;kE80H3R6Bh*Km3#n&3b!bj=;Xp\
+\^$t$DH&$M;l>ZMY,d8I/_M79"@Xh+FmC6`Jr/W,PtjqS_=rc;AiXZolPS)m&Vq77
+8O^g1O]"VqTN*RbeaGR%Pf3H2?e_j2A]2's//:gb8SE8^Q"0P$RSj,@/RGeD"ZT=*
+8Cg%u/**K<?bgJ6N4*&K."HRh&QQEp<\Z,_-U,pi._D.B+Kbb*hXK$gZ<&eo)4<W0
+aU"h!YW/Ieh?+Ff-uah"YhHt&^j&[Y'U)')*dKRBO#l\U7un^UOQU=i,#^L:fXq9Q
+Uh5!?+Z+?-+RDTA"H*L_J]J@BRE6!j620Oek[Tn;97M?7_$oU-0Y)tU/h:*"8(0D/
+oH:\E]s>-kkQE3ln#c`nb-)6@cFpF##t[LNb:lnD#QI\&f+I7;HtRBSP(o>tD#m2?
+(a9S\K4(+;\`13BP'YZgV[3aFDLLQ!qcqkNJFj[]ira(g(0BANNeR92B.23C0L,r0
+XN&\SoM+[`7`ocV?l/Vo]$pa=7%dO=!>`i=)P3S1G3@n/B?q>*:,i+h#1:b$*PRjG
+!'a<-W->MR&#>UubqfON^.#VRX:->B/sqFtkq=gC`fC-@H,bTXkm+/a47R<D%7>T@
+NnIramX_I>f+,$Ujgb/"(jBsjJQYPklZ:VD/lK!\!WE!H:d$aGWC]V9F>iT`dpe34
+q.$n`89j>afKbpP8f#C)3q'M%>@Y?T@!>^W!2@ZH[&sub"eiY6W\`4rTVk_rQI=Wh
+c@ho_&2hkN&U+T3ZK+F'TDpgO>n%^b/8gMK82=6Jg'si#3`R%HoE?_R\PdGD=mTR]
+lgkE$9$(f9"'@?^@MZP,Q'4bB0(4qsYb5^.;hqreaQ(G6F[^/o@lr";$pt'W!L#r7
+\lrujV!rg6nKoJ"Trj#BqD9:ofY`;PP94_iZ_5LXUBm]8[2UNJQ%W%^EhSfEJqZc)
+i=k@P8$S3-#MQjdid&AKZ'3^!TugdDhTWbuM<5Sj;1.<3;G/XS*f'u$pT_1!6'Kq6
+CpO"Z9JKk#B%c;M4B!uj"O/16rt8Wi]57UHFPe`C,eIN?GP>s>FX'=PZ6:(><!Fnh
+Z-oiE0_aF4%^qQA17mGgcU7NKS)S['8K!E7$JEI!pE=[r:(dgbU'10nJnJ%(PpET+
+$fbq;>5<ZQfKbN7>MP03gUMK$.m`4&YS,6JcL.r\%_!n@qKP&++;nNTalNh*($,$s
+a&%D3q11f@<b[rK"Zg$e@>WSY=F[DFb?IgnA+P":-lLLu..b2jWAB4(/_]r.!,C('
+L3<apjmnu1m4XAZm9`qTE*!BJ^#%LE-l"#e)RO:6_7ELl#r=]Qa9f4.jck4[cLjko
+MbLul8_ghkO0PVM"f26^H/<=s/WK]2;P,B"$.V)Im'U?=-l*!7<t/ptq1[c<FGu,_
+\Z!:,@Ob(W&D?b_,9DY#/>d!_gV.\@dVKsuEiq]KH2Vnn$=gR!9,&FD%,49qZt9F;
+=h$5lce3'(dcUFtZD#3DGDZK,LP_T7h_)HH;2m8XH_gGJ'F95f;WdLNh%g5.WB,/]
+YnBm<ZN0@ZM!O=$cbn6'DaBW^\iRa.i<l2uf>tn5':i'0P3LGeJCg_>5Rjd'-/H[N
+>[#0(6bh36XDO%F6)dRqVfT+<ePQ:H2Pa\I='(R'M"#$`0p4]%R6*k59qcAaU+N?"
+Bo=+L(fI!UqMGs8!D&,ib<V0ZJ>M1+&(Pj!Ee'MOJ-!a,;@KE_,qe\Y]n^YH>>@?`
+q9P&i0,#NQg5E)]pL)QKh4`OF%*@'tb%K5W=U&C$#k>aQ_r4RXR[DcKmf]IL\?L3%
+B,9<HVq.iX\m9hUP2T5SG1APpBRh=RRAPYPBeI#fpt_WjS*6GMZpeJh;c+I6,_qm,
+SjMN2Tq_&p:Br@J3iCO:8,T18`Up[<eii]<;c?PnR4S0ipmm-P7K)9'`fXM2>]t3T
+4KF=DW7rhpj"Eip#'JOI^_j!Uk*Sc#Pu]&G?;4@f"e`3riehKZ46_^YjNQh&d8S>T
+=f7\6J$uPY-+"k9VCd?7U["(4Abs'T$^EF_[A5#_[F9K!VO'Lh^\o5S0Aj7k~>
+endstream
+endobj
+54 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T5 21 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+56 0 obj
+<<
+/Length 4992
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:,9lK(5&\\'Cp_FaO2=,40@SYT^,a_gL,R+lhS-(@O,js$T5Z2)RfH7la<F*Qr
+9&@c/(f3r4=^C^c]iRE]hL'W#DUn.7r[-;JI@Ia]#Il8,D5D0/UtR0lp@75k\NS_q
+qWkoGm9t%eO1UmbS&_;;HSC<R\*<0j]\M0-mQjqRlEtI=G,?X1F\e>u4.WtZm_=g4
+]2;."\kbNhijO33(Mic<ne\4Tme@I5SsF$d2Ucg'dp)3%dA*Jmc#nLqGP+L"ok<YC
+IPP!m9M(uB]3dP;dl>,f=r2;PHeVZZ\#,)Jr&cQ$M^!3[nJetWATk,=hH!XAq40G,
+ac6lag;dQ=FC%?9\DrPFg7?^K0o:qZm*GWJDMN[mHW:fHI@+n<l-aKGX$4r9[a3r-
+gjcLdRqI3q/`PsNrDK&?8<+78b)Lm)'P>gQ21?%`VSh\7gE5?h3XmT'`LgS\kkP+"
+p5;og^Wf9)US%&;K(eLkGfHO7]MFS;,1a^Nm[R't,=#DR!:%:\n!.T,9/F6SicVBH
+CB\r:R42E=NIMh(qI4eF==OmD?ZEJucm>?>=p)U+Wa(bt.[/8\p7AM\I%G&-At\:T
+#jqREdj:]raCGuKV6g=*PB1+C%!9j_iOb@8:nl[6Lb4:loET>#pdY5;=UqI'-:e/\
+1rim_LU5;FFJ?nj:)Q2Kht][fO/&8EUG<'2Q[F1..84u,2rL9qc=ABh[cdY'bX.^O
+S:Rd$'Gst$/9T'V2374M$[qX$IMb<I9O<Ubrat%hJCSr<&QXfPY*45*!j3lrelDQ`
+h(!\J/N_$[.83u[GtL&l#IpM\\(D"4C6i<O#-%[WH0EieJG:7W<f)k-aqW%SNu+#?
+Q]A=>-bG_%X\9c`p,#r<S]Hi5j3[BSVZ!/-'7FKU3+kPEld>EG",1=4j:&Z'h%>ro
+gA)\[AkBt9%%.JOUb8GN!].i8AG\f.E-JFO+HE]DWAlj,EU]+hE:02a+"n^<S[Y/8
+pKu7q]UZje\#=AK1l6QhJOtfsHN?FTca?g&V-kMNR7hq#ED"itNsJNecmMr#@Rsp]
+r,PeC_IF3U)+@d.r6LX_W-Cs7DT,E'ptKKXd-1rDe#?_N0J!c2(*=2'&[GAjG]Y"A
+g"AO&W@<2"HV4QK7iF*Ap]4t8L#o;Umu`L2K;b,PJd3^0Xp09l$.HEr:PXq4mHpq8
+1A!_]1.l)_/EVotWncNCm.LM"bPFV."C?I*J/<&>Ji(Z6\GWPWs4h0L?[=:qWFG"Z
+,^^E/E`FTH5;X?KGmt5keg_^'.aj<;hU#HF+5@;+N\QkRihr3\n.I4ZQri>p?)XSV
+Z,N;qoc+q+E/?DraVI8VM4f._Ec$G*.!$^3qCd:XA'O^>W`(InLi\/;9?N^^B*GV4
+bXB#R\gS:/5O,!0_?"^MMo@K2/I2u:?lnOSj3:kFP,WOl^6"VoIW:_h,,J6kaO7=i
+qnH.O,gomYT!Mf5FiAS/d4q=#m7<AT?JugA,#dj.Nc#2UUHknV)s`s2m=PR$.?#\6
+bf=]_+']'84OQ4!Y0g2'ZQ/HTVs&o@IW7T1,k>=mc%Y&Ca.[jkgEJ@-33i@#UF;$<
+.rm6V.USVaY="McnN_'Y7?[ri/t-$AfO^tM99rnl]D84FIkX<'"P7KC.dgJ(:6Fo?
+Jp+kQ9hPVu+D+X!JKP=+g3_Pdh7l21iN,MT'mb"me^b]agX]4mR.Q?#G=[%6k4eQa
+PtnNCi/B3Y`ZBRVAXpYL2j&9j7]H.c!69ktY)?@*L<kr)_2J$S6j(tW%de"''"rPr
+Ju's"he;3ELu(LFq2fW&`i0!mo#mGoRdqZQk$"(q3gE:$b&DA9a2%PsYQq$lXq1H5
+9m/DMM;TDqq4HRa-52$P%b:nLa0obQ)iSQuM<"k@f7Lb3Obc[:om6.$"Wc>j$03_q
+el?/AlnSc>-r+0Tm2PqW-H2D=.UC7UN2i]k#N+PZNL`G(;U?CB4:M_r.o.D1<k4`/
+6:1+.DL+2f[`2Bh'P@o0Xg[UJ0pB^gn/;H8S6lgYYscCT^MY7KI3q?86Rgh8"s=A1
+hP]B:cE9Q,^+pn-nV(Qf&0*S=4H6#433hKF>[h:q]WOk)b_SStaaV>%(.r+d=0lYS
+%"12J/<^/pH-ZhbW"atY=Ee9<DJW,:Q"c.c@a\N2kbiLVbn"Ye!m<tV"?nK<'.Eu+
+()]&:r@PMj-6h$ORT6r]BOf<0o;+9c?CXSc6nP%"r*6*+?O;4R/?f1OZT+nF`1eY,
+9#@q&S[BhZJ(bm4,oQ#o1#1+E>#FE`//@CdN<$l<p?cg9jPr9bh9"fqn(%rT,@&+d
+>I#V,QP9Ef]6<0YH!K>2>k)9'EE_A96+#eeOM"qS>f%`e_6Q@];04P3UD<A,2TkMu
+k9Fd^=G02)dFJc?YTJXeKkJ29lSrptZUDO5\rPEmFBC)m8s?Bt*GS6iosUnm!J3CT
+_fOY]05ka+;n_5G??mY\]#^W1Tr-nRI9gf5Z?qHqG0dniV!6!CH/Y$/aT>iCoSMgk
+Gh1/<$\me=q^AtqNeWB(J$f\8GTo=Bp_@UZ-FOFA)msn+m@CH8>8srnlq+\&K9upc
+_(f"5P'E9#rgmRJ^k.[N2Pi7oZ>W`88D,rM[7^>lH>F0_`FZ2L9^c4PY)):3fO!WN
+)*+$>qlX?.pWs:DpiY2#e>u,>1gXq0J/P]\?-V;t\rbp"cZOo<AodQ=*Jumu-2W6/
+s2/[5:-$`P'+Xs:o',Ubkls2uQpT#o(9CoS'TS:W/-d89>hjFEebGO^J$eZC.@(hC
+a^ZDj&i@P;W82a-EM(>2$p-TS)@U9_RE&Wi!Milig8=cIK26AQ4^srMD=*iP'+Q"4
+oOh`[]L.IG`$prn>_"T>iY_N3SriJF7g(?A1(u8!cS;#<WU+n$m,g>'K]$ch]^P-!
+nloD^n;Q%ti.hppd[)XKYiO)QHoR+gl;3M3SL0U#OpLXAi<?leUP62ec[EF+C&VOg
+4Ld!R'!%4p&L+U##F(>/:\o;g#Ft7"'.+;iX\s\e6XF(>:h%OjXG*S"-C"hP5q#IG
+e%i4Bqo#hrB(13UlY.[S/0rY?,&M:DWL,00;3HgBX&&D0gU/gHT$a'[UW`4=0BQFm
+U):R%lOIjc,g3[N5*3EPaf4NtcehgNE7TqIp_=MgV<l'tR>S.nT27aO;;cIk_\.1j
+L[-APqeBP;CmFVYN$5'uaP!HiRI87oZMZ9MiXRF%*`]+(?QRlC=DupXeD]J]Z:$0'
+LZ`Lg^JN66>u1':hKa"+5$q0S<MW/k3\M7+D<M#D#O)IoS_bto[gj1dckj#6P1#oQ
+!8OZdM\mnkW5D`0S6Gb=#.ocU0$EM]@O^'oF792[:P-hlXtrAhr&VC:n2*%kOs:C_
+jPVTsqRb\bnV9'XE4RkI:DjJc"btb8d4Ji<eb.;77;m4%,Zd#pkKt@:%\Y:_,Tju,
+2XsJMC\R;&@>4-pe*-[9Y9,T4Q)*51I%#RWi$Bsu]D106)]'Agc@nsT%VT?L5<"Am
+0-imS!RS'c7(e2SB0cfiZd5+<ptd:lIDk3$LPE\1MI-8#5+`>j,1]2QJc)O83&dOC
+LAf4urGq2iB@IrNZ_(ho_tZZ#XTC%`&=c4c3L+Y_6QE*u.-J=HJI9jU(KC/eC3(F,
+q.d?V1[G!1^?KcVk@g7;EGPPKGdT*3#t**g^S8n``^pRE&BgluAhqj"->pEaA3gX4
+Bl*,:ga%AVl+SEOg?rDo,]W:`k>;K[&`0NKVB;plZ$H#4_1$P>`(`B`L%oa>9ib)<
+E$hfdDbNIS,tT*1[U'D+-V_=1n<B]k&Yn=taH:V#mP5<IP1:"j_nob]\(-]nT4Z\r
+g@jqX#=l=n37O--O6]decs79g#ngQL(nQXBOe-uM"'CQ25j&ES+a"Z!e88!)84A)L
+);*3T$m?SO.bMQl=rpqO)>\Zg^*4X83XH`AcJL&?Bp?`,%ud!qY,CWQs+bqb^!k'@
+&PL$gea1(>VO*5+p/^L;9;qg<N&X[*!3A)Bh[TMCmI#:j^GJk!H-<hgO*8.&[Ze50
+.o.b*16:R-9r%pD2.aB[mD,(2GV&;)FR&9AqC8iAq!I$hUl^^2ZbK,ndL)7)FSV\K
+FS^[i,um"!DpokF:?["Q'Bg<e4P]/MT-,#FD90&o9g#r1Y3\&(;b_`q?J7#(1?PlD
+$8d330L!>ma)Zl.f*o)(pmsn)DX)[M);pA:FPO,_VSHfZgIUbnPZCuVMNjFFJKkrQ
+BoGRPF"S+@gGJg3)%;gqI/3^Er.'R;gr`Q"e_O'9>dDW&F&>AIh(/++d]n/KNg\s5
+\3V%gJ>giu"M86]VL(lH!Q4u`L03C!dEBRh3h2(JUrZc\Z7?13QH?KFBc[*;nT.pD
+B[)MK#f'G50gORB*@/0S9VlB-S7o#.I"H[C0`X1.c2sG4JRpfk]`G'6_s2nP"AT)V
+s)m=:(q-WKOg5]f'=9,&,e^j&DlQcSA7!FX"`^Mqol6Pq$!'TQ"JA'd[*t@UV?J;N
+i8l.#CG6&))/T'kAaIW$HPpKEA&/u\;n^>Kl+8Yu#__1W#RH(KKt6Ef`S0IRJtj$[
+d]QmeA7tj!>q^5G6S+66G5\9FS1UVDF?8oKRrhfB#RWFY0,":In?pRBT.nFY;>&ZN
+5D&!)CUfiZa%/OIoUCW^pN5%N10G3ZA,:'!`;H$6/ifTVN2+8A2++YtaGG:eO7f9*
+8)eu'V4gNGA@XSa/fK"#;:EOY1=3ZtN$sD94Yd?GAC&XV?r:01^GS0[1#^8"S=.,0
+%OnL4P,-?\d&-a_mfP63`OTI/R6-Raka2^RL1Eg4-=of$p6^^^*uhG0NPINqW8o5'
+_@/+CO._Am8,#K16p$EWU12@W^A6]]R:d2HXfTM#^J0HU"^dbDaU**3'g9_YnGsRr
+e!Af?52_hkWm8VA8@@GA<i/&%A`322"ID^n2pB:>^"Y40dAJfs4-Xt(7UZFUAQZ%Q
+;K;`,h6n-98.`apFHje7gYJXWDZ=;<iQhK5$6EF~>
+endstream
+endobj
+57 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T6 22 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+59 0 obj
+<<
+/Length 3250
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YPl99\Bs(#J+ToWAk-PHcAtRCWd'\58Nd.#JsE8MAT%P*kba=SANm`Vo0p3]aR2
+U`">01H":Hda<>ghtcnU]D/bXT#fCSY_Y2j5"4c*g,rs3?W:hcqQt)UdF3+*l1[E+
+Vk[5;gN'P=:L^a1gOc4hmF_D]Yq10!:(8<2^69N7.>a6_'LhfqVh9G$`1'*lZ1"1p
+C0rf&s%[WRU\aGb=C1[t38!"^,Ab['@kPb$obWJd:.^8VE9thBP/;-LU3_HW1t2>C
+kCEDL'V-*9-n=6_6/->?VstR50WsQfZ`l8`jcR;MMDNlXoG<fKDtS!n*r=EUWQ!%Y
+8@a'&raEVkollIp=rL1XHuk[d;Wf+f\YA^p@m$W.Fs#n9jcM#V0tntef%k?XQ_>Hj
+dB2!,d!fr5*$Y7Dco4[;>Y6f,3JW39g;_K2C]0*#`4F<e)h,3F8ncQc5MZ!d+%XU"
+qf]a0Y=u_doCr:6KV9B\n<OXWfu12OClDTQ?RZLc323B6'6]nBrdjt.3!aN&?G[AJ
+[Gqo7.&OPi"2]??Y<KkoN$V<8i:tKpDTm!e-fK@J,o!NgdpP77AY3&L='GChU9FG/
+Ur.q=IJ1hpOJ<Y&Gd^a*Lu1?RCFNg\nX&9a2+#XM\Z&().1P*r05s\IDgjU6'E!R[
+aq1.1]"5TgHl2X$-V(+a7W.cTm\8>3lIE7d:@J&c:YItHS"hFUrTo2qn.a"P5<!i0
+B6stHIshO6(&&Km!8"R1>DoZr^<0`_6T6+eKcOotF_sc?jqVK0oL*B`!)JWg'7sn^
+U8oPI53*eZ<i\cF++\\M9ZIS_HIV<E=hKf)k]d2Ve&R.7!fRk(![_&oa+,:Gm&7f,
+V@+__Qql+28PmDmr-]2uZo2D:"<'ZHq<L+^J_geP'ISl9g+apA,o<StZC&0pCel72
+68sN]GnBEs%%7d3JTo9AZdbVt"4^0clOn][n^=3caj?0RG*_oEb8)GH"5AHiB=-Me
+JL1mphr;!!WQf(\&)Q(+D4l2`c@8fb"jD!BN[8"$<Hu*6G"c/"(!8<0BEjTAUf8Dd
+El=UK!Tj^)g+\/.=$IP,fM!kjkSOcD=l71@Ir4PNU63M3c)&TpWig4LVBk]D-Za@=
+_n8r$T=h5KSp1aW*aJg(Xh>"Tl/hWn'u$MAOSdJ6`),!TdK;E-$$G1SD.d]J&-b^Z
+0JeR-BV6WJ3Qmj,jsV@.!b!M21Pi$)\<err0^2Z,Nt>9^h)8mXm.$+E3FB*LZ'34/
+C1fG/_rJNog"'%N+TMggW67_^3gb['lki:rBIKijAW1iM4sI7`X8Pj$=Ut+Mlj%oZ
+d#U6<\m=(ApcpYrqj+._0"GC7]C]!^V[&"Ml?U/eO5RID;4]fXiNitBif>4"E14$s
+4DD<@lDFYqn@=RuA(4_F)>h$<DP0LicJsoNm1apjRb97E97,`tD%7k3F0lMaBJf'o
+kV6/N*++WuZ\fRaYOV'boo=_\5n=:STucD'e$G26`0!AOf9-san1>Ia,%.6M=XVU@
+P]\#qCGiat;174R;5gelgf<]M)@b8DiS<@$X`ojhs.>,945Kl8UOh%>HP/Y]R(<O&
+<I'<kPp'b@;Pehihj8*/^2$6%@n,GN<b23?r-m539m&7pCOcBmY:Vs>NZr:8Fe+`u
+FIuKXHMeVm3hCg;V7k>3p./4D`0)se_1!30^(g(P$PL]]Qm4:^es_.YKe.rj6UgsK
+YBNm^(T6+V3=^7"1W;86TtnT0RsX21$1fXWJrg.Y9!`eJg#FV+9.OriI%;SjTp_Wi
+nLcorlfJVBSb+':r4C/nFq[)f&q,4Jf>EM>&O!W2q$UnI0.8W'`fZmi2.^bgLVH!?
+\XM2[g#B=Vn2;SFB`$2:=F]1,di`UXadWL,O7bH)i.O.F,ig0X;O[?j;'Dd(@*#(U
+9fe<+/Gc$%n!&ijHla4tLb;Z%kht6RNuUqqbqPEX$;9)uShX$oJ.+9:+]$H5@,`H#
+1R`"CY&<QT#lNiL#N#/QB87-K4<2.[XJhfZi)m)`rU&Kfm+Qp`MU$<1<:_XZHPC0O
+*0pdo<2YQ2TS=8ckDp?P0\XBA'QJ'qq[TNW+B>T+;(tmF)M;K5E-G2m#6OePe`sa0
+K\-<tS>](`ntDp*!+r!kj!(^S`Qq^hHO<U2i]-F.io^uAZQ[L!U;PNF2!HAGl.@5t
+_E\]&W1sUSghKFmpK'A4<k_[Q9bK3??e_&CJD&HF,CaL3G`Y*%RSRXUapO0G2?*ha
+d@*QU]0H>c06q"gm0/LJr7=0p\UF:2U*N0)U9)d*SVJWJ,\@CW$sS1cZOYJ+::]7"
+DFE3#@.Yhs3mW[2)R2g%-4_%GG?)Q^le%u>=/1Ea50SDF9="UnIL.V#0ZnuREC4XE
+U4gL,aqL#[-KV\<9Zla.1LRF_TL1jfm?Xd6cDS6q(X[[qP$@dOn#uH43_RtB-l7D)
+osDgpF.e*?%:H.38_RU?;M8N\P7h+Y<Q4e`6L:VD"C]10;*C2+bM^6W1;c'c7A(9M
+'5-I]-4M3DoBD/`UX;Y^l'@SM)GEH9m-sht^Fe:*?XkL-M7F&f3""-'N1r#)]210n
+m*bp&f:G83U8JIhNY=X/3cc)\3(BY\[1=@Q!#]9&aqYjT9%$Fm7HRsNLG8C[RU-d-
+)p!VM2Q6I%IW.(^Yb9%N`F!D]k4%DaNZ.X_"T?Ke+Zm8ij4"Dt:SQdQ0gZ`a.tV)N
+6suST7^/F^3Wm[?^ebcT3Uf^T"@-n`l(il93s[^E_'p\jUY+gUGYik9!j8ei-B`Y&
+MRdIK2lla*;YVs*o.5SpFm8uR`2s:t%7FRMQM&N%,*&?mU@Y1seL?PNTluIDdjHUg
+-W$bpIkl!$FTZa1;THdHh*IB)(;d^a/S2kE)N^K:A#YkG3WZKWL+@kWTrf0_!LCUH
+:=J-5EtXcYgt_dalW"?Ip1RnM#X#cE4[]1#JT4D-(q:o499"O\OWY-fF/+R7!c1%W
+?pp"QAk.Q=pI4AGi=GuQeELa/ElF6.:2V[BS)F.;/tbnc93ujDM'M'ZneWap93iQl
+Z8`bWbM7eaYC*HYi'&"%_VOf3hT'7g*=ml4JZgsG48#_+r>E2E2h$53YP'Kq*$e0o
+BKgN;?_;YWZZpWK/!K`,qP2L2U8X[XX7.IA<Wg.?,A_8:SO`U\Z#@23"%('L+V5`;
+<e0!M'X;+i=e:?M?;lDs6ARS+a(GY>,!_qO\?5J*[-A>h-IlZ/?l@Fk,`QC9&uLla
+j*'t]!<=fdWCR~>
+endstream
+endobj
+60 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T6 22 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+62 0 obj
+<<
+/Length 4229
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WR4bDmOR&`(c7%(rhL(s,LXT5\h%"A(5/<Ib@b$]PrBW?nr(FUR"WNtpH2%p?jq
+=Y4?*%"$C]n57MQ:Ao>2n7c#gMT=iP+^#*HR$`AEpaXMfUfo&7EHuq&*d8-eIf5=P
+g^WCm\UKqEenfO&ppBtqTF,*;/cTG_nFeR5LL&(1>ah5<p"4BR?l)$Z1ONo.b48Ds
+#OII0\>\*=NYH]9/9;X*freDeqmGj-4k=QNm9D"+0/#-T6s@1pP?gqSKeqQ>T1.jj
+eua5mfe1B/=X6SupPi\/$kd8H%mAT1bXJ*Q4<]A_<)o4"?\`qqlfa'c0E8gS$38_P
+9(c,+KU<)a%"aQ,c4*4a6CYs_mB4\eXE2ofqV[[SeX(hOT!RT.QC04?`,\ceA)CRd
+D#`CtjM`D+,\@5!/5`8UnSrqt\Z^c,$DLpbfZ&W8-8H'gmbri?l'_->K*>-enJu*E
+gSBW9@msn_Ot?IQC3Js8k/s3dD49kRl-&X)VFp(i*6@)bH<%HDW$nY>0RdDcWpItE
+V2JV0X8"@QDHQDD<S<qWo-)>3@Tss=8l1XbG_s#@Xkt8YW^mk#FgtTN?MFFqMtcmh
+mT]Deq9k5++;F/!AcnW\/7B,rm[M&2<8+"6,,$[)VBO)r`DSo?p#,nJV%g&/"W1*V
+:rdl`pH3o1&93Zt#;IZF">S$YlSS`FI%LeE-s:R\rHc8*P$&iEDq[qa!t01QZ7=rq
+nHstU`f=D.O86*@4]YC?Z)Yh7A@J,So0#DlK9U@_:Eb>A,_)_bdb5_Q=,hJSEd",c
+^k15lX!E].E^IX[gL%u;fR^^g<>clnYk/QoA`o,qF'jjp>GUf:DMsEfH7EEZ)JEgs
+8U-93=<8jXZ/W;)/DrW&AW#;&nKb9G\LKDEb8TYUMhn)SSg;]^c0O%^0bcpBdDk.X
+7f9"imK"<+X>HA"JP>818c<ur3CG\-%X=@;OGDu5Y36PiWRXMJj<IZclNM/MC]=Hi
+b#1V#F!s`HV=AT+Gu7*:_ahe-N,Lfh,GJ$QD,_XQ?8:h&:+lmSeSOa#Y+(bGV"Fq_
+<kd"AQ#IY@b4k___0_F(Tf^g8H5"D!g6pC,^?")lnd&r/ah*ehG%:rn=HCcJ^,P^c
+T+@;dOiL7GLDO(6o\k`>>O%(Rq**F,Y&&luescu2Pqj2r,u0!LS3b$MYXaqlBj5tt
+M"<UlqM<]Oi5`"8'C]!AfssBqPMrXS"*0q4&@g'P!\jLE]APZeSUR!W5M#MLr)SDe
+Z\9#7[H-\!<PkI;$AletpeJA_L*:G;64HO$mHfe%=eC&!A_+#97(^<5@f28E_oj,P
+^q",D`h&^$gt:WhM:Wtn7kq\!4oEJRgf7@-6_*?;E"Kr<7EI>!a4gIjM(5\"'e0Zs
+6+:0K3*LKslFob';M`Q7*pr?d9QmUEVS$-K1CDDK0"pDaEQhVeKa,T`+8U5f8qH?]
+\tX1NA\N/fgbM=#!e;D;</cG7<&c)8+b2ps#r6Odi,5F(E'-_PCHku=5CUTq6cPUL
+Rq8>=DS2[<Q6AG@rkd3=@DV.?!3D,8/b(U`_$[A)S8CF,g`TcI4X'r=Gk]d^`Y8S$
+PBGKO](J*MU\5Ce\.Sp:1.;_tk#iT^+Xe;*??Scp36Da-<A?A:_XKVfC%Mj7^l:X#
+YulBC2bTH%a9!3Z;O44C3lmL1;^t0F9n&,9RM-oV@Q\^]+@;`fa\<rAS*(!O!$N/+
+MS_*flP^[O_OLf?Zh39G7M,ZlUf\f,S&<6[_(]/SH]=)3&"CrQ2c]\?*1Pb*9.%rG
+E\KTCT,]&+0-Z=n3T;jC1J9Cdlab4Hs3)+E-U)B$g_@AU4LG`R<&Q)s[>[!5b&!3I
+A_;2TnHoeZDk&%@YZc(75_G?2U,bKj\^Q#W7C]B<V?pf>_:OCSk1<q3p<=NK:Web#
+;3aH(\Qt7jf++lOkF"=SBFKRL*bq3&Uke0#)$?)0jCR8mk.;[J*h`f2D=d<$$-De#
+&:!HhXM9>b7<.e(fIqW8q;pH:A5J\\6Eab$41r45O1[P#\'3&\Q82tVYMfbmD?As!
+'A:$C1Fg\]iZ7?V3KWq?6EI-=bu9,EHqR5V9Kie`o#q=!,*faV5?^&lI/t9l1S5UV
+pDJrZVTtZS7lu^ee`IfIkAB)c2>q2H[)MMf,OU`DBU$s9<[eUq1@SL6Mn5h5>5Z<.
+U3/V^)j[EfGQa?b<=LnT39ns!4VXj7*2XWk1ZBG-=FRnO,.#kr3=_1uk`EFcEc@dD
+9gS$f[@.!g>-CG7"Zch5m]a7p_(6k`-Pd@!XaKV?>P[cbR>?LPf>e@UQ`qA_M%,pH
+^rj<!K2*h'7MKW5E)k&D[dC[O3J\7`4Q;2ni\P/+YW.eW.[lX*4D!$WZ?Hg<As_?W
+;7F1/62)G#Tp-S/h\p@3`/A]!Q:s;6,WZSk;('P24.-dcil+m;Xqa;$<:C9m\+iX)
+6<tEh&^o'II70e^XqYb1C,(Ot1rJRN0?:Xe,I<Q`mfGJ3)ZaCsiu@6_5TbU",6G8H
+<k(iE2DN/U+<rpLbp]2)<!0Mcq*\Su/capZJ</?u,,b,o`rbJ%dW1V*ooTU$;7o"`
+ETJkTEgTf82DpsbY$AJ\Jq?bE3BqCb-%f3O;"#>kg#:#A"X3AI+:/C/L;2Eu$+_Yo
+K$Gt`MCGIp@%fR?JEdp8`jjXL0+3n&5dj/'/u3kj4:S[TNfNn2kq8a3kck6K$2XGf
+[$\'qc2dDr2(:Bq\ed<^qsJ`FLn)iG/M0%;4aEQY./&(oq&B4AR1BiW_3L4%HH-/6
+_$f;4]r>Ccf+j?47O-/PQFtqXL>0dZOU^saaTsE-COQ"]@oYd2\)#_h^M7jXp_(St
+NV@M2R/_WiVC]5:dLLrGOh,F9gK&e@3^_ae?(ctHF6i-]O.gdT9Hf-lXE\]#!1mYm
+:&6UWkiJGk)rqV:eMqhjL;AlfZCI;3UnASr,7g@nQqP+O(Rua]`[7+nLBjSSD^P-o
+k(cjn&Lg+E\W35:QqiDE2kV_^jo\(\F..sJ2cLCr';0P]L(h4$d'i@e_?j(bUf]d,
+=MC;EHLc_kUI\,cPr6<n2gh#_mogD1TchRhJ:BM_#nt\#HY_/^'HKYG,i"pFL)bj'
+N2*g%Y,2W6Rb"P^[@P&r"'J7eVucYgG_gd!@?IXl0>j$[I"Z'n^E;HcA3iCf#MY#)
+()p2gIR.8@fk$XB+$)MM"-dMQou$,2U^E*.$*=(*c4jO:"1O(A7OqB`[&:au$h'2g
+WoD\cqRT43BWGT-6]<o!BeBegJm^$1Ybnt$,-475FuYTh4JXJaIItl3JCu68\'MDb
+BG*p=$23AM0Y&nK%J59Vehb>(mG<3=^>nRR"QNL136.9#KX*0-'KU2m/5iM6Kc=?m
+*#V:Wid`Ydm0KPN>tJ1KER"S6$U,7:AM>W55D":82M_,2YLTq;K:?pC.ngn9kmC)4
+b:ojg0_'EXfDP-2^@*&Qpa=o&:34cr1c_F2`D&BSKd[h8\]RWEQ6`,!R;hZQ1j0)f
+qTF4A#BEAanm46i:L_-`?l:>22t/PpMK<&K\'nU(T1F#hcSqBP/(X&/f))UQ:GSqP
+cchuK&WHKJ]#X[q^4h[t;Ir&DTZTe*;l=-ijI+cflUO`n%FSs7Mr61Uo-u@+7KXb3
+KYF3^oiV(6n'QIDPPG!tmu,.o&grsN(8WAR]3Z]t\cmdi]>moKribm5b=rfXU?I)n
+dB=`;KSf;(5eDVc^^Yiacqk<QV7Wq%H$J\;Wr3<&@cNrG46HqQG'5\/'i>BJM#$+P
+1Y70fB#59g]\T[&oFVi>#AMk>d,]>B+)#oFn9DQ*UF-fpS&C/WB]WG5T*4$TIaQ,t
+/_,(2<Sak1LeZ<lh9$PO9O'=r@E]HC1)LQ"MN&u:ap;QKHL0HAYSe4M*A+6S)8LM>
+[du=*p_VdPWN/F%pd/k'`gK)N47pk3U,\fbphq@=Q&Yi:2PaMk8D_Y&(;";$cJ"Wd
+UMR?/&a[_h]=tUH?;^r=@%Qs_0`Ec0*)\cEGo<$Vf/K?P'c'ET!T9\dpX8`s$o#=E
+1SLS=Vl@/Vh$S<e,j)2)#srk8a&AfIrIk\s4rr4Z!u2fg*he<u5Om^98m!Nq"rE,6
++!EGuP$8_;G+gsOefG?sZ1a(K-,iT0?]ru="#.t2pgo1t5?Y`kE3Ta%*Y=o7L$5*!
+N2$?,LT2+j.-X+V#qs?[8GXtWk1A)?h,F1k]8Rp:8RmRZZ(H,=#-F0a%m@ZkquAl:U\=~>
+endstream
+endobj
+63 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T5 21 0 R
+/T7 13 0 R
+/T9 15 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+65 0 obj
+<<
+/Length 4622
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y8d998,Q&\cSpQqOZi^dr']o*HXs(l<kJ#].:;"OQRfU3\Y$9;FmP4$3H7l0`l%
+MkeD>3X;i)CPqIK4hgdXWuj5YhegeGFh;q/8_-Mk-LSWKGUhM+Ufo/BG&t5dD@\\`
+rV[OTHPkT1VRa5Vm<!UJ;GYd2Ie1Z%;SXGY3+MR3Y[I*q<2nJ@Osk_FGI5!*AAcGe
+VsDM(_2iFLG,POn:QIEHaD(BWW6^NA'D@kWN=R).HEq>d5o7Zc>2k=PeP/"K:#Ug'
+kNV-sdD%1>>dGO;YXV^n893[gm1/)?S\tcaK+4l(U>sdb2>E[(n_t=Z?rXeI#Nt=m
+E'"_F#CkZTET$#aebITK2Q3a%7m!js'q!=4aU30kPkM^Fb/r20,rqL&KrhCukt_!#
++0GE;q&`JjnFQJSb4u"kiDb$0HiJ*W:DZ9-ie1(IkMR7k.@:BtdraaWmjYHte'oBW
+E?'=O]qaoXKeo:Noc5.KdTUrQfPYU4T42a78sNrlGZ"mDlO@asj"\&?Ql'\PH>FDf
+ejU1S34r97,!^dO/jfkg<g<q2@:.gE>R"hbJ46?p&!MJjJKH%hOB*GV:jC]i"N:Ve
+d*$cCWRrc5_Z>JogU&%8Q.gWlV^]Qt]<IP/$^`?kf[aEIJh5bgT..Pn#+09*eU8*.
+eO]fja.`rKkCO-D>F@6$Yf^Moq.=Q[3/`4W\Jjc7aWRX;]t"Q=9!6TG33+5)lfo.L
+V(k$VmZ7?QQGg!'!R<!lm?dZk52(?G0b-qT+9KI4]bZrT&XW8D?T*HVC!kE<=O.1g
+'3M3n,QA`Y'T%0\lM(#.pVH9\?7K4SQ*!jLIX6D9rC>g8C/g_ZHd$)aMem85FB:pt
+EVm=60QNgASO`JgGGl]185GgNl(Fs*ec/5XJVe\\\]j8_Xm9-"F:'+<Z\X/%'F54b
+amF/_F*lNnpI>$3aI7CoXi[tOLEnt<95`-G*4[YS(aC"*&7\=K]3]steR$8M1!27;
+06bPakYsfd%8"p^QV?I*#0GZ!Occ?,Xh\]g8&q48dD03m;>:i:n2#_E9aZb8[5gGB
+Yn(VJ$LcPi;EUr?VQg.g;MreOoS-phD:XLTC7EpjIB/p!5r.Xk$8pH8LHA@\>W4r[
+(fD&jpXus14]H>hC\lj7@+U@i[@-GK+4,qP]#PO?N6W@68JX&#p254Q+n^*Z-lp^G
+kU.J/LQ&2``s+pWG\fIg)5d6p4;>KtJ%-q0E;"G5B)X\!$W1[*Tusp.6hfi[KOZO[
+0pc2^Z"<.!T_O5U0m,/Jh$/Y^nj+&eSJ>RLJ:<\@]=dXajE!OIpW)GahaP3I/^@\s
+o,Ec1H8oE-m3Ymt+NV+&5%B%OgU?(2P,n\f711T!Xs)+a&kqBcGkP7Z!2N'R)OuMS
+Jl*^%a1%D<W75dsm-Go1!`REB=dQl:!L68g*9s6n,OsV5hQ-E.gJ)hsBB`YLi3E4i
+c74^\qL>X2o=U/R5M7^=+%9tN&>5B%q,=ddq9]9G;AO7bIH\;blc+:5gJnZ1s31cW
+XNTXa]Y42a)(,dHpAR\J;OBUX*H=2B3`"58Q7sn3&TU$'\rD+0_585dnuGXfVWrL9
+rPSr`i0e*f2^taB]of/:8pfs/9EG"<YLqc4,i/.r:KN>Icj_A>MrAV8_4YBW#r&-:
+")S9hT*DQ!59aJQ3B1aBr^T%:X%l)p5?td3C3pdBdtF6/@.*QKl^W)2,j*AbChEa!
+pq2P>&%N7-GsJ@ph;Y^-%UbJ?5'`)\@r/J&$u%B)(@'"6f,nrM8dfq$aqR8EWBV+q
+j!M:uin]Bi>6HSkGafaiLiK0KCf(2a!Zu,C+V9WE*_UNNd<ciP28+5Q+inpKJZu#I
+'V/I_fV`o2Z&sar%eT"VrN3IM+(j43@us82-^WdJjB<hF8r&X+Xq?Y88l<N&!j*7=
+VkT'-ETC^dVpZS\iGQXJim/1Qs"0Iq^E3M(l[r6%Bf[Kb&JL*kLh0ik>K=Dg3EJma
+1ULd3b0gPtGcBoR=ICmCr:M4\L0soCIqD7l@5LQ>M?!A4-f><Uf_3)O1(O6R&\1Re
+\/iI!YC.9%BI?8(Ns)+Wak*T^AOIKMP;Sl&B1F@=/^G&p#K+r&s)YGN,?`P2Jg16%
+(\"Hc!95!2/sA!a[=58/r%fFQ"5Hh%4M'_"5BC8[`ke7-FlPFhJ+#XMkc,=54jOr7
+f(sb8qQh+jrF?7:q],D0V5ZjuSTs:=9k:pO,in8=//%YW.lLdYYGSW+R]9!?b_9I]
+2raP&Fr]o1<#"(",XaV&AULOhl,,'M?fY@oiQrYifh+dj7ZWQLCONO)C*M@_+\WNr
+<g%,47t@jH:dWWMCQ4f\BWVAW:.=A7s$I$em3c:I7DFJL0%6.<2:E\i!ar"&j?G]g
+?L2)b)S*G84UG>;,uDL,WtKhg&Ef9I1'';JPl6%r[8RBPBIm$cf0*kb<FirRa3\Rm
+%u0fI#R$A\!!hK(WV.WLe;U^G?sdG:n?("XDB5j3fcKps9L\ahE,d%`Zu+a$Ofn8Z
+JQmfs%_XG?Qg?E6%B?Ro%9[-S:TQYO_s=!mgaQ#;&Y4GdI0Tu?.MM<Ce&\9AneU"k
+W$/?rVZ[TQD4aIg9-GTtIq9_@#$ZJ/qrjdoHak$PrQn<;q@'r0YVUAXTtb(h3R7o/
+CBpld1\^@TOmRV6rIifR1I<m"a0[od-'p4Y[H[%Wh&kuO"$roic&Qjg\7Fa4&<Y&=
+ZjtF\F(@dII`7!+^8=uocoGJD-TMX3HHsI<LWr8)59$*VoQLFtKAt&6BG\.Y;U0%l
+30hV$4Ul7u^5SoI.n4@N\pLG0p0KT&XL]%dQ.&$V"%]]O*CE=N/1KI1?':db%$n0E
+d<$i2dtfG<GD8,1[^I3XdY`-`n+a<Xi+42Q/,9_)Bd+JP$-+UVK=sZr=Y>6EZ`4fZ
+b*:CKEC,=^A_"D[&ETjJX]ir5d2XR15qhm`'K*fca[Bc\%KX-.gP9DaeXVYN:+:jW
+-Ye-QR<&@UTgH(%Esm)7=e+M]FQ5)paZ:EO>\UHRPcD<TA].keT25Wf7VL^3hCmWC
+#%]i$L2NfZm5.&qTpN@LP\XhD">ChDEm&3C:Q9e1&q+mbeQs3T@VB[L$.1ujK,nKE
+jug9t*UZR?FEhm8d4&PpZOJWUA#FWsFJ&mTVo"n2gY4B3XHgo-PhBUaO=A?H=d4*'
+(I]V925[rK=BsX8?8:bJ?HbAP"[k&-LM#o.iRmU65D>p"+,p;7?`"!"&-L)Xdm=?;
+0GKn-a-)Ce%kjLGTF9r/Uga["`!5MJd%U,'9>LfnUE2q*aMuOgqg$le#ZHDG.h$!"
+MjG28EJ)<b>iL6qhqbK+9Z.HiGC6:>na)PD0oU!pK2Os[/97Ag4:T<m#]b7^"U0t=
+>V"iB<K(/p/@TUN5c2s\k+l-e?ij?%?7%@u1DDGN]C9r6@5N5CLutf6FQI&G&.:.e
+b$:OK]#KmI]Fd]'Yg('f+UIpu%#;Q5MHnYaj:5*"_PJqpdk[N5quR]gjd62#.PD,#
+U>rNQmU><T@5n&aH3,"-1&Ki:m<PF?MtE@XP"[S&6N!La>0la>qi?m)$V3CI-Q47T
+U#MN]0&bsCG[][+&k^?VJX;@?K?<,H2\$C1\.'3RD#61u:;Em,TS'IK;`[ShG'@o8
+_1Rp?Z@s`jHf*.6rsR7E0AJg=Wi$"31:h/#5@81L/!F^8J?Alm5soZg,<ATEIlX]Y
+k-e\8](]9JF+u_5.>\bjhPGGP3co-R`DKOh3L3HAlMURC`!6<Gma04A8I>SAnD=$Y
+-B[,OB4:*36SJWHBg`4Z'%kR+g,k/3<FD2e1l&fW(T`1N[*3d4j>rk:+AV5__UJ#2
++.2<98;pW%mUOM(Z/hhdI1Jbebf_$>W+Z?.2QJl5]/X;bi^.oA9djc;73,Z-"1(<p
+3&&db,V$:rU9Um=E$mI,B^rQE'ko2Ab0jBpT;TY=Ai^pWW`F[7\CoWWNGa4.'RH]9
+0Vssc-5oI@jD3qpUo(`_)O!XH82E#]if210!J*qZnkige&Dl+[3GKAp=ZQf59Y6ma
+D:M\+hJF>$I[Qe3St;7sPJCDN"&G;UE[T\XR(&47M^=lZmkq$[FDYcjPim5t/Gr:O
+kOEECo9N_rePS5*QMfplB^DP3ac;,7HmQY(:Er"VGLJYo?WaGS">Lg<,>*1;Yg64D
+G4ZOAT!CA>!S-j\XcgO=@D3l.iFn/nFib;[%(mUXO=oI.8Q'/C_b8K!Lf(*oc1G6i
+K(!.Icns1[-l`'^g`9abhTk_PY^ejXQ43R6CG.)IMG@V3^Z=Fbr(G$iY@+/Q*T%Et
+dBr-0d[Do9n7VUA8O9YT4X)X'j4Js7d_-usXYl+lG5%hhJ?"l[9k_kc:eOWTpY>lB
+5_L9Ma`!g`>H7k18(&KQO_:>9Y_l:AB@YJ6lSKOB2lN]tE=[J6):r6E,7=k*ElJ_*
+p@$i'.2g9MrBO^-ni5]#+`\mLE@<U'RoEP)H&592A9I"p<`"$&YEBSIW<o@Y%H-6l
+csO;tVjX23V4Jor,l7SVm/?>cad.rno#T$:T-gp;Q1kEqbE7iHY/$@C<)Y;cHAdnn
+dq(KYR,Na1bD.=HW37&i]DI?[JD2\<1^Gc--1KTrBg5(J:gB#p;E,1O55ZE$n!3rD~>
+endstream
+endobj
+66 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T5 21 0 R
+/T7 13 0 R
+/T9 15 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+68 0 obj
+<<
+/Length 4174
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wj<>ArQ3'n4K4#R4D`6/tAG8<b1lYXLY@'Eq[5IOUe4:h89l,>3b:O#R%1-$`%=
+8$Y),S]l^;Olq2-o:8+Jn"/.M4h4qgmZJqamh>Z/Z;3ge:Pu''hQMuaao25,q60fF
+p\S8]YH,:s\)qcR*nLA)UNrR%XT*+n?ga6+k$=RrX5uRlK0.(.s)*$uW^4$eDdGZ3
+;p`5k>X)r!k(qa.2\+_9,+arC+\ofpc,YE#(&FPLeXg<H>-!Eup[2UL'QC7*GX%T,
+KV\$iI'gX%*\1sI,J9q+`L;f=^:]a)2l6"jZeRZ,X;KKNQFjReQG`HPn*@`L^9Ck\
+ia*\MobA&FJ_,QOo8q\0<SdAsq3BF]]W#tWd#EmSZU%f*e<;(F[hFpjqsQMc,+ff4
+VC,133Pp^hYcT!.ea/D(RMI;?87s<nD64]q0$]X+3]!lAJ[.,?Z:HbGN5G@:9XUj4
+3$^EiC1\X7XjFJ-,'W;$+@@Q1\0X<sBrZga>-:b-7q<%D:qkKnqbOMC9;Smi'81d8
+SdliEq7.U^KNngMOIstn[o@Qb1$][@3"n<PDHtup<lL/rTZ4:p*N)ihp#&AH^<5.L
+&/k?f>5BXT:?F:0"q[M"?"Z6k`p0XNb\*[hq?^&+D.;Ip9pmLO6A7S-502T<UfjdE
+';>&U&JOFsfkbeMgb36thu1o/HpV!:r"/r1IaZ`_[<KBm;6gAnE-(gWE5<X[PdFr<
+Tp!1cDPrC':V4M1XP0P6@'tu+8phcXEs:NFA]^kg@N4^a"'F8=QkYZW$(U8@r`ke\
+pISF&Y@S55Q]AS*;C?n2SF@V%//(UR/JBC>6D!rkIHrLbTU_0)pMVr4BZeGjImWfr
+MWEnr6^\a(J?"&^5p7Nt?3)cpjth*>['!BH,\aOMZ9H/o/4*C[`kKNO.$Ml<LfZMt
+B2N$EJ<!%U>fW)EI9>i8/JlK4$8^6Lbp0ffU9\"e[*<LG\EJROkhGAs%epg_fh<bo
+eTTStOK(b"@p,VsGAOjE5PPtN)Tc3gSE-BbI'"<G+D`h(TkmF)$(ZR_Kp=!)E>UHa
+@l0TKr<sK$RZmPrB]KpOR\6pn!tP\#EL=u*EOEic5ecNF`A'7q7%^h=1![JhXW/'[
+8KO<=a2FL/W?AHP:[AWhD6_ih12n1iigQP4\r;/*TeSq:PPRm]j=i9k2+Dt-g)[aQ
+oH:ErI:Xt@8W@^XUaDp5i]JeFZ`ESLk(&PSm/tU-Lc`h'8VVP;EV[MRc=7f0:bsrq
+:rR?H)6@L[1rX./hka`i;.8E'6YdGA-D2h4)]D]uEUd\pmCEh:W89$D%XKZm!:0m`
+>3Ei;eTl=6neYH"/^&A?bU:-#2Tp$N%g6e)fOaj5%W9cAH-#Yjq<ALYPu4*?kDL5g
+3'EdY5G+(%W4,":EJtTnkbm1pZlj:6jQ.3os2IO[g>0rXK.IdsGp*E,3$=H;JZl3u
+r-@UJ'LqtE.^ek3N7-K8R,i.t]()9.#en\k!uWQg;&kZ(`*H?o2FlF#201"q&1ei[
+i<O<9eARg4ba>8>$Z'@Js7jdhomcu6oD3AbP`3W\)JH"VYQ8/+)-+q@@5F*m[0[F?
+IoT3GfC(EifaK_n7#0;&ohn('Ljpr\4?!ohLCtp?)9\ieI9n@d2j8KM!hOWR<Bq63
+:PGfi5I<rR5A<RV/00?G49Q0,'M-E!3/oKkar+k*5W0"_IB6Z]//e"Gj"MuM:*Cun
+1\rh]U@o%\+k!j-.FAj`^%g/dZqA[n^(OnD`Gc:r]mMANJP[*ukYIR/dNH3*@Cg%0
+>5U9OgJpB$Wq"Pb^hJ:oQGXh,s*C!qhOc=s&TDWl6QJ@-<G*0K&%?.i6sCp)%TV0$
+X??J?pgZCS$e5*@><5Z6=G-6kV?VJUaKQ<"/hBZG\a(5Un:W!K1t:t8a0_"QhrqZ-
+5%08t;DPaM'3CVlohQ6-0odRg=J0taY%s).!.lQ9I]gJmiF2.6ge=l1WmMf]M0QUI
+/Q&.E`,1H@MPH\:eQ2BDVbY,hhHudMa`Q+K4C#@M7r`6-@85BQPLpjO*h23(s(6>f
+P/AXud9G-4BB(;`a+VLo@2X,KAu%-#&i<?S_Xg?f:7j5\qpop63kfXJ[dt*P.7\GB
+E/k1@&[(58iXAW1Pe#)`S6IN">?mLZ$#/6IIh%+FlsA5hQ!HYBrZH(2gE0FB4@[i)
+.`8sIAB+hGk2gbK?stAE+pKbLVQL@tT^9"h,ISuQ-sVRSqsg%fW*##;R!N#4SI'nP
+?A;2n>&49%BY8b=lOR>Ldsr[=HN@17M5h.W"'pA"kQVD\`%YD$1?"Z2pWGqJ_pP?H
+nbcIc;aEV/QA@&dC7>Rk0SVpgZ<RA^;W^o_WaO$BdJpM>d/="hH?J$&ad=6s<M8h6
+^+?YK=6NUSeY=dbM[l,mEFECT1e:3bSrj1qG5I7Ln16'Y-bfuWEU.]C'5H#Oh33Sh
+[.q-S?0lSR*(9d@\H=TVZabNT,*=$AW_Sk4*V2^Oeg0?"-^p7)CM\,u>OPZ8QZR%g
+8:qm'!t5WM2hVY*I(HU9N3b0R)4"aD3u<DN5'g,,+fp=.0u-jZqD;&5[Z`=fVajg3
+UY/,d#Jkq2\<49`nCQo,!!:(dgh1A`dr;\26p_GP3VT:'?%B\*"rH79FMBUfDT%nB
+Y@uKHcXq9KZDA9[Mf\iWH<'aGRnR.J?jT=/B$ESX0"f9IQn5mD4C9mOo8BVU?pLJ1
+gih7&3ghiZB[=B^c-`]F+-XB0M<Y1?.ktRr,XXh!X&lng`9_VLosj=F(uJB-D:*%C
+[7#sC\Q!E%Tf!_^gXU[0NUEfYjH0YT^k8ZRU#rm6d,Z(*Qr64fl9R1F0Llt>*Rs.X
+@bloQ\V;M!,=3G+OYZDVg&4a4A%3u6:nPPVp13/[ei4dd#fs/$pQL+1=?)S:2TY;G
+DA+EcLgopPJ1X,f%nKnJd#Rk^:";+ml>B#rZ*b<XAKArQ5^+Buidu,S,]Wd1#ik`6
+NL6"Q1[,s?OeJo-hM4psQ!Qnn#VXsq.LLhs#?;!c3->6'AKS_cAZ9i]7[uc%?n!!T
+#CfkTU3]0\"#0+M)7@J_0P_/0&7<tiD;#lAL&JjE)#&eW(MP(Mnu0Ud<g-)0:Rm*c
+Dn_"3;L6gI8nZ%LDaRK<_+[hK4iecdaiPrL3-S*c]3Y;IgQI4`^?FOS/O(+^lONaA
+9_D0@:,VTOom4u8)4]eC'0,3uYB2n)CC0/Y4gH-s]CLX6RV.H*5o:$.o7K^A6iY*7
+(<"QbfJFWmZJm+@gpWT&&r,\$d6"3AM6G*7IkLIR="L7'9ThB^.jeZ!8NlPWPH\g@
+mn:hffucp8Ep\K"aHNpO=\Rb>QVJ!1*jg#E\*^GnZo-%0;do"C5(XK%]K'Q.1*?iN
+<]Q.LA^d-Zg/rgY+_mSF&EsBj-SS+IJP\`<>@@t3Y5ofA?8'.i7;'u4?D.ZH^DPCH
+!MHa;>Rj-c$_#%riAd$-1L7b,7$p(ur\s&TGs0o4cURbS014'F\?$SGa[;oY8mo<c
+m*Mkeg:^"\HLr",QAPJ4it-oT\jPLndli8838[9,ktheGDrI:Wr0.ESf9)*`.AecL
+,05to#G9>*2!u6OOSOWFQQ"N:Hu5Dn<S;N2FC=>&M]*)('I_p!]:?f.48.;+>Ha@K
+#%8X!n!?j"OmiGTLE+cIDa!gR&?;C,+=3^rs1\30]k1uY8l9MXi:Yb"R$iWXe+El+
+bLo8OGg03g^3I[s1$=,GKOC"]13efT'AZ9SJNsTOX#r8OkmT@<2C)EfjJ42/9VLDI
+8u*%/,9XWQ1t-lgF&1eB)NTFNYgAZ%77>aY++P=Rn^AE`Rmb:<fJ'&#_jWsG-*fLl
+=I!iYp]O4H*N?Qa,N,$7=_/S;\E#L=k?,u,)nL`eY7X;%j^G1"7GRd:i/I:P;p%%?
+(Lm#t\4>o-3[U`B^VL(B#$j/shDVXE0oM2!4q``VlY;3;QM%tTZN.hR_K^OrUu+('
+Xd`Buo!I'A.c0ZL5.RA@kJNV]_&Of`-P98rgGU$?.\O?3fjZ0uWj8Pl=>@ECO5MWC
+N$Yo)7tMDQ6S[MSF`YkI<AH")m%@#D;Kg]n*H>i$b:d31[\9iA;grR]5!N+p/K'/W
+X$h]P2N#q/&'f(08^[NlOQf.d4kse-;D#fbJ6/q]i&qo1.%gJX,C)0nEP9j2\[4\j
+nC@O"i>ZOrID#~>
+endstream
+endobj
+69 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T5 21 0 R
+/T7 13 0 R
+/T8 14 0 R
+/T9 15 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+71 0 obj
+<<
+/Length 3778
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wj<bAQ@_&`*=7N,0[=[YEV_-\<l^jPJr%#nS3\K#!r]9sl7l:o&iA`oDGpRU'4L
+?'Jk;1S+b=p7i\,:7_7QqX2fn\JP#+m9R(3niegYO7k"Ys.a$<antbi0"TrrIJW9E
+`Vj[.cg0k6n\&a6HFa#ap;aCEWali5OYA/as"^^&]j(DS>#E5=_Yf&\Mr@l):2csY
+K&qpR"WZZ`M6h.sHTJgl4[OgKFO(B:MK$o5Ora="7/=M-Ea"XY"h-V(A:.amS*huD
+=":pnH%'Z'ce'bB8A]Qoe79=s?+6Rd>/[Dp\=4KhP$;7OSN4ZXQ=ng>#`nJH7,]l,
+Hh3&=@N:L#?Du@D]PMeOMg4A.Sq\A4>1CI\;&8<=U)\p:6#W'M.[kgHSTtjsdgNfl
+B`(i=\7_R\^"1)9q0Dr5+<D^=F2n@bo"_*"`Rpg:WZ:\^f8Y-gBVVX):cA+?=;i<o
+kAKVR9^p?E,#qs0?p9KVL(OjgXPd=An=W/rmU[A`./^Cm.bupmX1Qh7/Pad5mJV2(
+R:K_=NF-2O[0+V*@jWKQ&uON`AXh0-kfWK$^/q?Mc[X11YDg.!]&780mlko0Bg\%<
+DV0dNJ:*`bS+e:/l)9j&n+//6E/qUtd<%eqEB$X:9PoM[-J:/\a=Ad1D3\Z@]R*m[
+p,do_eh2g`8%:]:"!CCs7@^S$hrp0^&Wtpfl?6gs`t"19>gp*LQ>]9G-MPE0eh&W&
+o\Pm+10ZJt#C::Q<mSoYMO`UN+c9t-VF,,(]AKDk-CFh27GC]7p4bpRNH#u^QUXnI
+3\ki9Gb%pBN)c6*`%0#I:guVp@6qIefML']-"5er1b;Y9+h%L$VXt<fCj7:j7'R[Z
+PHB;)ip&X_ZPZdA7PUmb(/O,P.D_B.(-nYQe/K*(T")73AsV29A:T"g#)$\>X]q7`
+\u=aDBN^/.7AI?c-m@(/7Z)1TE:"&SgF.NueHcYR9AHE%[]D`PlT(01!s#6"A^f9K
+>Aeqma#uVqe-s3IR=5gq9'lZ2e\orQ%oBt8Q2C^F$Re/?)cP&%\u1;0R`ZM.AORnt
+]j'X0]U&[:[<q]N*BR-Ds([e)N\/O<2FbFGNc.1R9G1XkcV(_RI[eD=;&2_m#jV)V
+qlXiC*#@Y>g&PF#.3;7qpggH%1U#T$[G!FMA&(c=%/'Y11)!g1K#894:l*j=BBd$:
+3nqaEajh-t$>@^LCZ@,BNG`$,5HK4VY)2tB7\u81$_S)>_I;lf1F^anN3T*!N_Sn?
+@<r#d@+PLIO;m$*LO,Ji6Bst-Wa(rB;RokW:5\A"Xh%*.@:VT!+fI(c>QE6X&q%"!
+j`A-*R3u7^CL.mXo$\)V@lHZhk9"^,k*RmPjT20B,U76!1+d&/`6mDK+5s/$7@[jL
+H$=kHp.A`[T8DpD;[:4(623r:4&ctEaFe%+ck/:iI@g/H%=5CW-SrS<?*L-YQi6(b
+26&JpGPk;`\XO.ab!9-`%3\P1W!a*s=3s!5;ej`A,sG;aiRm?kqqjmT)L88&N.P88
+PD8:eY\ZMcA.DhkZnC].X?s/mAb-+:"[!8H:Q+o&c@8lspnuT6[jNtS8K5FHQ&+AB
+0\!]MUp9ALjK$b].WtQNYr2+>]/:11#*tV#8[%8YF@Q+m8001ZP3J`)Y>CoXZZj=o
+b\F;P#**;\9?#jPF]&u&8`Je3[>D%R4hpBr"4'L^Z.agGJEQ$OiV!<Fe0G=qR;@nf
+([mg\V//toSgbbU`*@u\S$ci`,Yi#hkk02c>FMjLZ,EV\+TkTT3$!ON<H*f=!2M8@
+(m+A&%d6"KYf/OLk*"ZD#W<VKnPb5aP@,MPZV2!f'C4*U/?/9Ck5'H*Q4)OR68Jt^
+c";tslmh1m?J:S+Be"ho>FHdeI>W"+F<2@S.4`l<#L^QX$p%6Fn1\l/R@].e9CA]l
+Qm:#kIUAP!hfp<32YYLV8P4V$9;;J$G3XjEIP]nP1Hj\A7N56=k!hsOBtO7FV+=#a
+h-@G:5KrmWl&#o*[^BPU,Z8bq:I6t,0"28k?_!/&b6Qr1f)/iK&]9lJ)?sK6($(pZ
+IW$l*BE5\c.^As^3#@FK*k\p+bl\H2LV?s[`MRN>\Dh3GMOWik6oEZh_>CeZH:(/=
+!FgsN3dBAFfFe6V4IR<_ElHPohIo)S7Q&SKBb_S]Oq,7Ao\/q+L@m[C,XViZf^\8c
+'ECpJAenbcqk&T#$8<0;rl$NCTmhOIUKJVerh?DfIG%XhI,1mG-5=u\RE17.c;0?a
++&+:Vm:jS3(GjLXoERHP\$8Z_IM"'RVebbX8',XRHe.W=jpa=,p1'ru;<d+CK1_(I
+Wna&qaAg*:O-EO$&/_``,Z:Y=^]ZUN2J'"Nq:op$IXeS?F)&@!e)8W5/iQgIJAIOb
+gnfF%2o-kg-1Hra3hkt4*;RYogNRMdCH?5l(?-.RSE;iT3Z2knVe3#iL-qBi/p6BM
+0#L"0n/m'aP^X'*%*!I;:eV,=qg*uW$g+Ra_\!U@X):<&fbhTZ'D\DLlZ]7ZbIJ`U
+Anm:kEt+!D_pr)q3$\HrJnG9P.V8CGVAhHl"eCU3MA6+i.&L37`3G$-L[N-Xe?#8B
+aKa*0F`Q\W.P.s3@hKN:Vh#T]%6LeO0$[sJJ+GIGch4;#GP)t4TSIO3kH%JT[d`Y,
+&`Rs'ioj86Zdd,':SrE_qjE.s7LEP'BouareqFUo8$-)>HTaX3<>)iO/<S%"c%^t[
+Xja'pp/(,*@-dN2)L7*t.?p1^9J>1XbZ:A>_Hd+RYFR9)]E9r-!K>(k#4K,s`mlZI
+Q6m>aEk(/bmK/Ai)BfKLJ.!d^/8kGj$K/BZF4Ls!\T!e/*'f)k1Qb#fdR."U&Ribj
+8J)VI]Dt>;j1Z[.)cY2Hehr.0Cd4=a+`4kO'gVHcQ(Vpd^"\WLcnUrephe2`<4ikg
+`>Z/QPAN8<j$9bHolDBf]m5uhdl\1ogX7pM1\(kCqYT/URpu?hP>GJoBoM0RWb^.6
+"tgebgch`C'j`"hoZE.!>\Cu3SQr`O$&s0+2]LMTD8mq@$=+aN3VuA&[B&'5_S_@s
+m3Y5Y>HRkF@VCFcAs[\=ET.K&lZ0TnJ@h.C/2UYC!L\[mH![_R`g8#)A655iSsM@:
+M4!EP$2Cj&G_3da6qB]:/$]_j+1WaWV<d4eP],c:>;j/-b&t>C>G!];J29N:YWB]m
++!/[?=.MgYd6=[RfU56#_2[<3d$2o"2g.\LCUZe$**et(\<=+2[<&+THLtZl_IZ*L
+c4PsAk647?,R$-H`B%MBrR*qu?<B*W'1N>+jHsZW\S3"Q<I?JPJN1QfZA0=8\=9?8
+/[+iWkD>7]U-J10ip3a[lNJ``'jDbYQDq+SjYZ<`X/6tLm@_Y:Eaqq_3.8!0pe4%9
+&&b^mBk"]FTd8t>DYip:3OS1LaS3:7=p.T("DMtqfP#u,5fEirYjC]HV9qE*"buIf
+^\k\Bn%\k/rYpn6)qc!34egJ/g7GoRH=J7P9M/4/ZN6n";$@ZRl74/*Dq8!=]tTjV
+G8c_RGHP,Dj;JP7Xpp6p(IL_a_7#0!eShA>Q[?g@RsOG`$MI=2=UK<qB9,9sn$RUu
+ku3%u=:_`0@Dbr.$H\ECC'9>H&n?*[+6:k;aNFp'euU'W52E@p&,=TpJUOPpVk0JR
+SZ!9A\AeU$3j(Jo+;=uRQXtNp@f>]nEQdC5V#MO\.eW^%FZf2M;>.dd[QogdBkTP%
+%'V&uOS_:cYp#j!b0A67V#h8S2]>j*B-Q&>^lSU6+D/R22^/M:N1e`?R6fSB+B=0Y
++B>Qf>QDV7icb~>
+endstream
+endobj
+72 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T5 21 0 R
+/T7 13 0 R
+/T8 14 0 R
+/T9 15 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+74 0 obj
+<<
+/Length 1990
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X-D997gc&AJ$Cp_GLo4!H+Od\2F1/W07*""iI'TU"bI-*h';no"0YGPE#4j%#9,
+8<CoU303Ntq.B9jG4B"10A1Am=C`AjQPo^(];l#4B%86gbO';3/Y<e#If#<\T+"tC
+S&OYPo^+Jo&)5E<U$rhN@W6_lb@7rLc=:c6f"B)0Cc1kTC5c5d1+(pLBn&h&)D?a!
+[XWljd_0qAB/O#2ft=X]Pl5`lXg\2m4Dc/=g&;"L8KS\J7(Il(+ZAgtK4Z[l<)lqQ
+RsRjb@B?\'32Y0S4o0VT=:>"UF?fCPGR2j3%ZniG$MN?drB'"i1N\U!L,1A2d_O]K
+LVq*Q4A0.9IpNqlNIN0`X@,&7EGG7/r)s*(9?+Ja,Md^KZ#<UahSG!k@geJcfXqs=
+=Gl4=/^`98&qpa<&*%US3H:X!Z7"J;"3ma^>[8*K#4U6NFs6@,\?,)21.s>/j^>ui
+/AVNm29jdF6Cm8+bAJZ3)33E1dY*d_bu**i2s4Ks9Zro6H(MYNL&0Z(;hcW\#XbL#
+P<6Q[)Uo_J^-lI*h0"_^Sm`&9/Q*F:\H4COYi]IEB%JYj[\F!W@hdM^A)2ATZP:M7
+)f!(IdQckf"NiehSfJ-3jQY&f.oL>3O]DrMR(VXbi$ZtOl+u4`.j:3P'UKkR<@Nai
+-5:&8PIn\Gd\A-8l\4V?I!K`ZdibP",lV\9;"*$udl;I;:5PQLTBh>1bs`O<b4fbQ
+'pda+_#!Z1B)tLEU$-PA:J_@mp@h.0f4-6+14?e/\VWFs<PQ&`+_JEk8B>=.Mr2A7
+\aG"jW\m-6eB:#C;-/$7BnVXMY,&7('Ier@A3K6,,R:?<&]&7Z'iB?2Pa2tk\Z)s8
+10$_a[_=b)V5WAnl>u.25`c;YZd<sF!>@u7,lG#+To/kh=I?mrHCF3U9[*ja0a[\9
+>S+aU,s),T]*BaBYrUoE"G!p>ds,bX.F"S(Aa[0);NQ.SU1>"ia6JSHn[.P(/$2Tt
+/$m$CEqFg#-uc40j&eks!EO"b(d(H`hc7rB"QHB(<p.3G`\';Pn-BI@*nBlDhfpk<
+5a;$gDDCQ1oVW-62@h"[Zpf2I8(W>SB*7:UI;.$NS:@RZ@[gV(66uK7&u$FpWtaFr
+[L*c&\l/sT*RQ.fd%\=H@$`/;q.qCrm]j[dC)dMi$m5hZ*a`7Pi(aNpDH4.UT>639
+,5l)G,,[6c^G7MS<`\:5:0,isZF,C?6fDdU@`uXdo(X>KNF0-Bd"[!f-tbu6U?O%B
+[(TL/eD.u+RBk\k4o:=2CB#ZZ6\O'j4o0^U8eMG*r;sDISGEhW\ZSn#qX%6LQmVCq
+<B'*?[@\0iG@]ki7@nh=LZ)6ZEB,D1iRg'K?sm&hpZTmJB=SBF-N+Xn*rM=oWWWOo
+:8'QcY_r.^bGHh2[.&g2=qHc:%FM\!bmE#/k&Pf)PBJIe&Ga"c9/D=B]p'"%)\eVt
+7q6i'A_u5[WDcT_2KXRJm%/!G;PmeJd's;=W"D/`XLes^JYi>ONT_N70BU7B':sLB
+JieIhJfpF`f_pmaimXmo."a)@Q"kX&68[ia.s0#rj%ETYDB.D)?g@&Q=6#3md^Ksj
+j<m+TroH48iYko@oi9Tjjo^;PY5P:)Vt1Go8.A]ln,8Wte,)':bh.n!.cjo'F+Qsq
+h<6+%H18`.9=E((NpV4LpM+3tJ8"6T4p]$)f62J;`fq,R:HlrI&[.OE*;ZG&"2^,`
+&/d#TG0Wc6E0c>kkOK:b*o$N'f8TbSYJ_/S;1S-JeJfg`?#(c:_+GgM7b_\O$!dQX
+<-8Qs'[jBc=WA$c)plf]rrSFSGi\l0$M<D7^Q0T*8i\X_(KrN69(GQB<$IdUaENPp
+=[g%&GWOe">/,!jJm8!0,Pp;5du<\Sr"Z\q0ZhHT[N3F0]A\++DdJOOKsca\1p*%.
+#"].9j<C]kb(F`p+2=)<Ya_WIhdp+!\3K/"C4ng5j2W,i<S2hH.B6O\=D=E,\m>4q
+!*m(O*<~>
+endstream
+endobj
+75 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T5 21 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+77 0 obj
+<<
+/Length 1407
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z\795iQS&AIa;n7F-ul$`*P_M8n$$fmI<Lg1W9BPF:kO@b"tXL^^tHY0fnEgNRN
+`^)'pA7&C7R/,m\RJHhQXP8E]fM5H_nh@<\r4CK/,^'_g?5VA;UP8'BFo1n<Cp3T;
+:)9.:ZfG=sns`eQ`F;e/9E#Vq8'AFVHa3#_KWs6U<ekKgDXu#]m<iq:chfO4Rj@R<
+)#ifaYC."%<G^Y3M2P6Eqql>_F]eZ%@$+Os+SCkKV7ecpRC<WAT`L)9+rXQcIk>*>
+PVR&b9P\<1H@3g6Ok@OtJ/&J;RKt73!/Aika5'0?i2Q1(?"Dk#FFdr,""-NWl_H+>
+Q-9)m<OdEcUqg9niX+NE?,Y>Q$&5"*%<*?+4`m7EdS0)+Q6sR=f?a5`f5Sc=N!A2o
+dR&9(TD7M/9Lj;%LM7WLfU7HZ]JW>PFC@&-M&gD..9O1SVd'sqLQ+c*Iq(b>TkY=$
+UHfiL&E^J$aS>;FP]GBA]>;]7O`&-/LaHb0CR,I.mh5>'g5LFRUk<B%g0hGB\1)q&
+OqpL_4L$<Za7J9(;A#\>aG6pYQV0sthB`S.=@\`!*`#i<,0Lm_e/`(qgOQ3b;u<1D
+$ZJP1`Dpm)R*T*0(lWp4!Vg:H^&OVjpgm,g&g7l.<c%[3HoY?)A^\(4.0fs%p*,QG
+;GV[j:FuF[5b)[>]M1^a8mDuRAeR2kbX"N%ih>"T*9[(`FsbLCag9ZKnd\h-Q"&lN
+=`!jSDBa)5f]IOpXKGrc@P'<faG3gWqji*9!]SdNUdpmG!#bRTi`SUMq%NIe)cUC3
+Kb70jJDpP2XQ`?EY(Z$SKLq[5YCpV+O;sYfYCpVI_haQ1i4?4kM1t9<R]`aVIpu+h
+a7RDc&b$u%"j3-_qPjb:-+*uRT"$-<+r<bLX>FO-Q80@8*)NW1f/,$8ntLOnnGShP
+>ll!@T>h[YrE7L]<aUW0MO.cdS&A9im@VJ'\Y3n#<>8pM$#8t]RNp&#9@]'6KVul\
+V5_NmPgWBXq6NU80hjLae(RrClQ8nid)HugjCXcIk&g>9IRbfGLC)gKFNBB7S99T4
+d^0pb_)A35b)(p\1Z*E'I"/JU'`(7VT+W]t_&u\n"(*p$+c,X+IFDBK,N;t><)iV'
+Eo["p4;=2aeeA=MX$>!`+FTBb!=/PWp5RPcU=r<6r&+ju5d5i9!`:4s'DWZp_(c<O
++'KZjFPcIo,o/VtAF#XV@ejMWT=hN.`l></Q?&CX$aj1LX&;,OpP+!QR3$%8HT@f^
+dW>`80Wt_s7udDH2!LB%TFYL3==_pOD:XJo99%#d*r`Rq_ZFDf7j0'Ag35](dUJC^
+p?L%k5?2W8K[^1>D,0\f>,;c,Z:JP%f!\V[lEL31e`O$Uf1#P7:7aBA=NMq@M6W_E
+p2MXf]hPSH!rt*T_B/~>
+endstream
+endobj
+78 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+81 0 obj
+<<
+/Length 3000
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Xu\9on<m'&BmDL#G\SMeTRil8,nC-G/"5!pk\n*.%=O[b8*4AB?@De'isIp_6j^
+MH%bjltn9Xk`I0s=F=-Al;b4H/aiW70=K[/MuPD=SqZtqJq(7,)!B)$KghRd;iu`)
+RP-UT`V]POh9Sa&\GMcloD\49X8hU;=q9@[0((qTs0VR[Idmq&V>"au9Yb7O.Z;\R
+PiqB7>OU1%]61PmbOlNNAXr[NV[O"),Y\#SI98n\og\n*?3KS`om[aV#breWY^$+T
+nIW>QDf,`k#is7Ff0:m:=O/tK=<9rr[9cUu@lt5)G8q%*dr$Jq;(rDaolqBcYMLU/
+CgOk['WMs#'D+cm'`=,0nN;63C[m"3hQ8u_Ia_<;TkYP.g8kO!;2!&6iBNs"S:t[)
+D,r!'aCC^)@#A6Si&W=IZUr9SXp4'1-(egH_:*84?$#q3CpPLu?+$_T6m=T]f0Z2F
+W3<p-om6T"7F78(qu!kh[^&iHCq6C:=PaB^fZarC:d3GC;N@`HCS*<VU>TPNjW2$_
+q08ZUd6IB"Xid7WlD*$pGN5l0-uFjV!L+qK$-<E#a]m&UHUA1k`c\iBo!A$h_"gDr
+jA_2GL)'P;cW.;gE=Ji*IE#aY\UqfOnGPTW*(mnq8(QN)*Op[k_Jd:QE$umPB"Rt=
+DMJ!VYIeA9A[p.rJ(mL].#s^'UKJm!^\1[@%5AMiNcRkqj76HXN0i=ac0H$r@cuY]
+cPDXQ9_3FHlK)&pj35IU&D%kg$Wq@1om=B<'2@>_T=56m79p[[+_#8+,5'.f*PoG6
+5[Bg:#;MYr-Q4W''/K.b!@OdGO9[<)nd6GYlZ_4*KP[e4gL4b+r`501kDqR\g&/8]
+H?"D+jj,3s_WYb6/0IWVpbPK?,nM]sl=UD[8[=Fl)B7b(@0RH/Sd=u"oB.!54IV']
+U7;Q3FkT&]gL3mj7/j1K6bBaB=rra1g!Wro;<*=:8#FuH,kW^3e.$Z-_fEDdpU'c:
+MuG'$,.b^lDh9U)WWcIfWo1s^gRT>J^;IZ)k_gVto=1q!@u]PO'[.f;QP$[3g!YUU
+$^.eB2RL(I5KI\!!4ZXIMH$O@g9cfKmM7ZKG:\'=7@2$A?%%W$/'<fr`O]QL]jm4i
+U:>eTFk'$T+CYt1'3YFJ9/7IL<Ri'b_h;2YD,".^j"?P(SS++*Do8S<%Bkap^;=1l
+H.;a./S:D`T(1;<fV(1dCo*0q:Yi_r-n)a'=YW2d+-B)G'"***bctdQMf6QU!9oOa
+ci&3[VB]R%)u2p?5cs?9)&KZ#07<gVY7EadRZ3ppET5^-5^kn_H3qnAoC<Rf12a;f
+]U')k%CN;,E`,Zla/FW?s%i[?,'D56H41g:lshDikeDSi(HE?p_ds/=$X.\2SgTAf
+;DZUEr>86$W+:8^;QAQ,QN8<snVm@]Z)uo:J6Dg*:!>\lmUWlYae1-$3="2jHl#g9
+EJ12A;1TF!1<#+#HWqui7suhP(+q>H;052NfnFLR)Nl^1qC>,2Co<=oS%_]U\.]j@
+HIV2EWAo498L[D;R,].m;e0+aZQl8dJ9q/o*mD*>p[CDqlShEPDe(Y3fsr\aG%CHa
+Fnu&G[[P1(3r`DlNK)hHqE*aZ+rA`-<Debm<?a[CE(!]DB+"O1`>=+c9[?#i9p'\V
+VYnCC!eY=5bi\T"U!b\^f70;:@j<Ea_#"ofNKTM7W[*+7,'C:$YW)L.ncL!"nZAsC
+SuY?uE]SM`dTqbE0t&_@jh>M+]035ge@Oq1/4o6%jlbYpbR&:J_2t!B:28+EG+]Kg
+Z%=WT9@]M91J9L>4C3C@WfIaM(&Qs7H8<r`&_Y"-Wp(`p&3JK%+"Vm;gV3%=Yp<[7
+aJr+]-hrmK,S,UX0/^^pNNl$((UMmmS%@<24fM"q!Hh*&8\P1',P+(9*IWjF(.FFW
+L)pG'3mj7WX6.p8Pdt]Z1T8CpB^A$GP0O+UX."'j,J'F/'V%L<S>B/^o\PS,)4oMs
+%Q]GV@N%2D_@*UnmjC,#&83l"RW0tl>#jTsA"mGR@hP(M1iRH<#72+:m6k45U0'Rd
+h*sSo?,)gn-bPXuQ>@Sa:BgsF!k+laD3ZtO"%UMULub3telGi)Tg_Fc)YIB2r$Dld
+7BV5>3`,EWm)_8N5cLYj^#[,eeF_s9YfjaZF_Cs/Tu=[Hk`Iq/<.d;EnMZ@r&VCN[
+eb%BmV+*1:68hJohpFmFP"6BphNH1,,!@";X(;lu8Lc&mUhn$?gZ]m_'1ne\IT^i"
+q(gR%d/hZa=*ZL'Mk%[j?,YoJdAU0GP*Nb[b86NdkCc]]PpYLWCEc:/r3kTN(eO;2
+"cOjT*#+Cn.;"I_aqlRRW+)miU"2)cTD[),_k$C#6WEI_2g*X]8.TeXi2p"136N!V
+ndH5F#*_2epGbCb?DVq3Z(0GJAgoMlEBu5@oZ]mK-P-!CDC-lYVk_=3>#caSZ.-Hi
+ju2I3hf^ibd3rbko2h[tPJX&l3=Kdn.!0M8d.5NNQl!h]W&A=>qg^2=Vcoj7iIB\A
+TZCB,VD&t(_#FjC))=6sKkdEu[#HndNamEAN9KIlj;kK,TG/LK_5-+&DBIhk3oD0+
+fA7W!GCBeiq[7_VqJ;hp%EC@IHu.6TbKSQh!Gl,%f:%SEi!j?<4Y[)H6_-0u-T2e'
+l:PTP:+?`jG1,Zd$IY;Pj*9:g1(_ZFXOO6*X2s]4CMXt?%Q[@TN>4'-HmL2_YgZdn
+I;AN^46?5iWB5d10Y-Je3Y`&$nbri3\XrN91+]k&d/&%)kejEKHLaGE8)>-F`>RbK
+flnhY7Q0Icp5$*<AYb3>.G_MlId*k')6+`lVF'-J@TIgP_/`PGRS+>G(4`FY&`D(4
+A/)c32pk61&bZBr%l;]b3+0`RB(0[bE-"["4.'Qro::c'd,gh`X:g+1%?l^7cqMn%
+/Bm(i73!YbmWrYkLLcpRYiG&,'I!>hkG(^Y$CaIK;rM1Sj-i@qi5,n<7<D?!Nb)k(
+SRH*I*3h'#BIj]9),,N#!'7Lf>Q~>
+endstream
+endobj
+82 0 obj
+<<
+/ProcSet [/PDF /Text /ImageB ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+84 0 obj
+<<
+/Length 3368
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y8dD3*Gk&aj<1$Gg(E(S'^Fjmjug$cI&C\3P['(#TUHrBQ2iM)A(.8BQ/.?f0P'
+=`S(OB@-j>!05-)c9+0EcSI@f^72h7n1Qi[e[%JQS4-aH-h-#VGW_Qfe4\eG*[ZHY
+iGnHKHhVORp=#PWhYo#)H2%3^np_b]0lO(UR!j?Hs3'bqO0a=f.J:B[7"$]oV5]8D
+;qt$_CJ;EGc/,Ut3M!@^@$EF"#JVIe(C+8#?Tl]UI'o+:4O"YBgXUdcU$iR[.%FSV
+TA;/,NjhY'?7a%^^K5oWrNb^>887FQE$WFZBU!M_B.^d8:C:'onLU-+b1EO\eFIGf
+EV'%-6_8Zk,9Pga8"X(..2I]&?&BrPle^m>W&I_*D"@->JbAm&8`BoK&jKW]1%dLD
+>E54u@;O+!9TcA*>EpET/4Zqf6PUS3DpoXA%DWb6(^'r[eiL#+rsJ"ZJ0.455h42l
+X>3X9j]SpVIpN!Q,pf-_<EY?9IPP7c(>>t[(JVIn"I'gi[8q0fd?2DciqX)A^-(2N
+)E`).WrPQ#_aX()':!sY`:rbXqF_:!3:$i:AkRE$OI9"T&\A;9/Qj:$!o_gh#+f<"
+eEkWgs0>3,pbU+ZA!*cA-W/kL8J56._O45l8b'$BYmFTrY*$'pr&mp_&"0`1[&0?9
+MJ'0pX\dg9[,VP0#qZ]^Si4.[0T0D2DWG/,fYt;oX>=_92aO,t<hc`ck*1E='D'hR
+]hhjBJ`$-`X0SEE_Io]V9,c6S9rKJYV@f4TQr>LG=6F[-*l,(2V:'HbM^KQ_gD/?b
+,c9#sKFb5Qi[@dTQaH/o:(>#h`$c#r'%+9\M3&q.UC3Pi<L4G8#h+K-(ANcl5SfY<
+cnDqS3gNcU'h?kMI`T[0YI,[86Mp$?g@AOTdU"6%W`7MeOE>__:u%5Q(*=S5eK'7q
+=\*<1BdpeUIdRr3bu*l7<ehff=5?fGB6Zak=JM,%0D.!i-0]m3?V"3VV^Nf8S8B:G
+R>!EGP0Ck0`EhGJ1'q>.8"$^sWTV?b:T]0#g2#f+46#k1nrL4S[FV(NldM1&iF8nm
+1,*17VF6YC801;?lE.@680<Q:3`?eLi6hUJFAuO#ECJJgL@gjWlb%L:O*=4+X[1q5
+gj9tiU$Xd7BsZL-EGc;n'G"HE(a!7@;V+Gd[csc)>Vd?ia+]EO\k_uHaE%.uZNI3C
+q8Dfg.Panog<<`8Fj7YAGHp'(d_qGZB`:ig0COA_iLS()kE`_ej=ALq%)kfadS/3$
+rEM*U\qlnlZo;NEcoite?[Fh>R)>QXg"K/fH[k%nasQ#UDDMtgiLjfi%O!cu>Mt6&
+*TCL@d$],$PTP"6jq_9%C:;N]UA):9Ft0,=@2Fh>(9$]?o^f48:\k^N:4&]B=n,Km
+g.nk(/(&gc6baT1qOI"V1#;iV(+YBUBPPrE3gEHgfF-XGChjYgge'AE%&:,Kr)j^k
+.]60RV?]8t7>7mb=Zu(_mp6BjZ)FKmIV\Dl@IpbHGMWLOR[dYUK(W?P&rNq'qJfK;
+oJC;q7qbbZL>.%&CG-kG_HpC%6(S6kE[Fe7#rC>%`\`VUq&u$(WGZ[.,d-]?:>t93
+,-'kfK^QRpV@F7JI,,dF9Fb?3)$Nt#8"F\Nr:`;&2_igGB0/(kcUH9C/nH=ogj+nL
+ITV[n!mT6uEnS1)GP'ip?RMWmIOVI0Ng*PXP?"NQPY"%)2]11$mS.t(l=AS6HCid3
+mLiuEpPM#XKQgi1Y_2ZB6bqWUc"0%tT!\.l?j:I^MT8fdF;O(U0)#Z8TYSRDbHlBn
+_'s^FJGp_(iu?OI*F4"]D7(F62't*prZ<KJhAG2O3CSo!r7Hbf*X5.[5nK9OBTOsn
+5&IA\V$Hpdjn5n*EgB+M,<%<lZVXL-&$*bq=]-cAL#jLLR3JC`AI0fW`TGZP2V6rH
+3m!r'6]s13ei%5>aB#=eEMm/k[f"Ii&TJdG/\kV&p4+Np'.m^U=:=>t4Oq<WXU8#,
+=hF:9$gRsL>GdZk9%Ko;.1`l]J\A-d13D)E0s8k!Y[Dts-#BYj5gB(t'aue8q1O@Y
+"120mp/q&C5s)Pj0uj*@>-s;abAd(T'grB4DC>#LA!u$-G+Os04fqHC8J%=nGI4;R
+]>Sl'jm/hiQI+ToYmf++(*=S5Q/-M*f$2pY=j$1b5)':Wcl-I\,1XF:;US"fRqO<t
+'-u:&?CU,MoL`i:!<o0uRsJ#pa2W':V\M5f(ZKgXFG=ohNHSrU<u\i_;1^S-cHQr@
+I-=_%S6L/B_ao>.LfK>_fXf+_jBdbRadO5WSS=K<fV74:+Na:'4UQCS%@FI1G_6.,
+U31V8#";0;5E'u&$2E#.q:l3SZE6J'XQ1)t/(fSYW\Aj^rMTeY7r![_"SlRHU^j9)
+&jPlV7e:*$Mq.W5>1kOLg6.fSjo"HA10@Mr:N\@@#?IXsWUCiE,&)ei5kUVGoCF,,
+H'PEYB@FAU8fr^lf.(8RF#)05]6EnuW.NBSVa;^.4/i-L&%geV0FG]^RDq0:,[)(f
+n+Z4,f'aX%JAr7JO!<7/*Ud/_oC=Sk5g$o&";ghF6#3u.>))ea"n4A)&AuB3UFJ6H
+,e-O4EW2_>s2Z%8_<`:M%;U0Lb>alb0$"ogM_&!B]M=kL(^;Bu?.7E911a(>2!Fsg
+Z.dqjZT2$N31*R\2Bpm^Z:]%<1iZTT-bZkM]hDI0mg=&(^T0"F9Gtnu\[EGaU.i@1
+?r4srrNk1lcC&YP/p!lnnK"En1,;Ch(>.ODWeNn/)c5U<#)rX?^n;I`"i!U%.5QVk
+Z2h&d:lujX..f(cXfC\k\8jJ'XtAj?ZE=X<G^TJ\Eeu;qN%5;Hr+B*YmO_GYq7fUg
+(.5]1p7jlZ9Gn#p7>p0&Xu83O"L6_.c#[%D%-"Sb(kZUS*^+K=I3V1XbR@CfJsa-o
+4I0U%c9s=:o\D'LY.iXEJJ]r'CdJ2#=9J6q\'9ijFTRQoJ!iPRL2SBbPYj[I[4#q8
+_`<4hmIk]!N'T<dT.ZMup)E3OAR:H^/Vm2LdHl"rpLB)>^f@]l??YG(<^cFeCrbc`
+;uJ^'pnHKll:o.B6G5$J70[@k['OpV=&*bhOGoF]0mrMe7Zo&,@u`"L?T\nBMaCsq
+;:mc8iQG.Eqd/tJ<4t>Q?!EhD@>n0NqCs9rC!=DrTufsTfBfkojQ]89(V/g](uVD[
+@CS@4(^sJ--uS=Ua>68HeIV/:V=e/:T?F)dcb2#p]VAm.PIDW>^NW'&8Q03agVOdh
++P)OL1^OTZT^'2+]-)g1^WW6*%P6Z\n%]Zn&nrlc^$p@r&fu9o9g1s4j^]ZU&B$9N
+'!#R-]!)5+4o\$#DnYbp(k&@2j$!\W1BLK6BqqM^.;PS#'"7^)#)c=lWrEM.=6R#l~>
+endstream
+endobj
+85 0 obj
+<<
+/ProcSet [/PDF /Text /ImageB ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+87 0 obj
+<<
+/Length 2047
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YPl968iG&AIa;E-dA2=>X>0_0FBqg*Dm+o[&7M3sV4/A>U'?n.F@&aaYso"X$'.
+*h>kaYrrBo//B=N^O>$c)-rJ0N8npnT`gPrakrrob2j]p&k(`"';9Xk?+bK=j7Oh8
+b;ri)G#rN.0q=LNU6MG[63tc:jmUTK-#+'*/1KY@R='!]D76P`e^?3':eYk@Up6A`
+-j*':cRrD6<-(&URtn#8W`JT%.!%YcU`@>V;(YW$20tPG_FFZk=:2mSlL^J+4u*/[
+1l.+fg\[6Oa/RmtL7Fa\Uj$3Be^`YfHa]_J_a9m,0Af0bZU7a,rbI2?H62_+"O(GB
+Me[(^#?W*LqlL_$Tt.Euh!-[4[V%F943Rf:\_Xq>HF'pn\+<G(Y[*hNkKFg%[d)Fb
+[2.JMN*.*6GGP#d*R\d3[^-NMAkDTa_`YpA51K-cc;b8(U4iB?W!?0onj[AJ,2YOB
+)Mu.khHM*Y)Q.>;RVo7:V=kD"U#0P,OZ[`UJ)H;CE35rRqR/Jc:.)qSU)HE_%qG2;
+3++TL\/S1Ahkl%Y[T.0P15(%o>Bp6W0$@!e`Th+`@']IuY*n^.nD(MQVKWM8`&`F#
+s6F"=r#Rg?8^M\A1sGVL-GWW9_*6:W>1[P_'-Y(K-51(Fo#c^5\[FmlSXb3UO<*#D
+jsTOj:'E76<0meTno8PN8K5W[A_PXKSq]`*\.t?l0c4F0RT&+>[mRQ-!L8;UP%N:6
+f@NniTBe8[DYtfnrm=04]0R8UA.kjts4GE^4^4(9).35b.;:$Ae:-EiMu'FHLP(Rq
+7Cs4he(e.(R>qU^HSp$?eF_ICN&l,8Y0Sq&Ap=3U;.>b6Ki4<CU,5G`oTtV=.(ReT
+pJ[V^LU>6E@=?X_DEZgH)d*u8>(ODS>00;HgeU7))7i#D"B7D,_:8Rnru05S]C>`J
+:l6A%@(s[FjiB_B%U7'XD$\%rkKAD/q[h(P+D&)r+(Qh*&Y5e+7X.b_-;3!"Q>d:m
+)b9+kGO(pB%RjB5I@R&thjkKqS'L7;`S-oUdbnf5Q?CV3U8r_a+AcC/&^kO>gK+uI
+hoLih0hN"pnLg,qq2b=94c41>;A2PB,O$Y[r@<A]<9I0of:+1"$'Y$+08`.dqaMoP
+P0fH(R9%UDZ5[8eN3"HGpI2rU9gk*6+HHp+^Zl$WUDYLJE'e+-maW<&8=>\hKe1#d
+R<R&NdIZq5Bp4B&Td6Kt9<d^9(B)U]Rgs\#;dT55o3AH!4n6WP"hA\G\?)k]\F7L-
+K76TS/%42/=jJ?QT5CHSC9H[NmeRP:;]LJCoJAsk1N)D+4`DC46#D0`))S6ub*]=+
+,[(kijA[Z8&Z[,oOt<Fqi0m?_AZKFk)3id^Y5tB)Y-4hr%b]n,`,7*:D*L>oaKaDc
+#^"K(1_,Ita[fb?5hRX\la&:kD5qq7"lNP/"5F(PG_L4R"-VH/3qNmYqU4pu^@[V^
+FMYWk/G2[7@kF#B7]h$dM%m\^[<9B`[5eQbp)a.L^B4H)6c"h\=oWC/k!Pc91+%*@
+Tr74Vqc&Q1XI3:c0]AF\*NjNMDJ,J\o<'n@=-)X\m>"3*lEKZkQgZMF,4gjO3%4FC
+;OlNk^i!cM:Co44R-(*S[+3IU"ko`t[VP+i:P>S?fbYZ@6fS5qAOc=_0ET<SMuSWY
+$[I?M_rs1<G2Gk7*@PRXeUIF8"GT+6/t]Y&UL\`DT)e-H-V!B/Uj;7:2Yd&^lUK;c
+j530<22-tXj!RgbGB)omVa45T9H3i:(&Dc?*9hCK2J]OPT[ND\5JnAXi?U6NBY#kY
+5qRJt$5=8d07Q;s*op%8?OLj8L@70L=NA:uKNj5&#MV#7o40eDgJpd)-;h&KD(cis
+@FpI,FUVb%BJ[IDOOJX6gf/ck\"[NRX4%N@l>L7;bE&*g4S=%\h(_2c/6dsSZs0Ea
+.VbhX[&X<J/Xckklh96.e&DZ:=(aD(CtA2#lj+uKZCUkflbjVrcR;kQb$@NO=1&<B
+a>;)k@cs!AN]q^TdM.2UR1/DI/%)BH0fe:e>*Fp2S:D$E??IAY.?]aGIg,m)Rf'A~>
+endstream
+endobj
+88 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T6 22 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+90 0 obj
+<<
+/Length 4179
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:,95c%6'#*[5kU6PnT'!Y3pD,"n,f&hV,9R8^*."EHXc0&6>4(kJrq``%8[2r)
+'$)c<MT'mj<@#?4Y!-aj>-58h<SJq8DW,e8?NL/[^1m7dHX=,Ga486!Io>UQ.su8Z
+q!W@5Z$4s[5s\l^[VOU*<M3dtm:t,.>&Vtal)*orLWkOup1_1Of,j!2cc=l41*c%F
+4C6LgINIp+g]"\i/a_n-iPXgNP.&)0O-dm4^>)]UVTWk)?@WGT:5AIq18sd(f!2DN
+WODHm)83F0g?Tqu]SPboPThgM,5!NI$ad2?e`lEN46U`roX1;Dg"1L3%En8L8*ZjH
+m4l-^RrPuKW@>D!CSX;hJr6dXY'a4"-3l^[40MH#*@]B*V8]?s];Oo#^XDD\n]F5(
+%#,@P7@?#j1A`iQ?jn>ugEf"EC"#s3q#b\]YBqljA52[pGSuh;qB6.UQbA?Xf/Anf
+%Ofu(8e7Fadf5J(mQpS2EJMFecH56hi4q]mMRl^X/9!XJ3Vl]#Ft^\XL/d3b9>b()
+Ij)-ZWe?%fa>+9mlX?7.LO%N(_b!8D[AErpAqu9k7-\Kr4H<KP[7LE5O.c'Xgikp\
+O4dfl).esJ8_GpB3J4>U"WfT15]*5!*O>$_"I5sG-@m!@`GSrGPTL[(C.$Z)bOCq0
+3i.c[;CW'9P2sn=[88V@+k?B&e,8u]jrfV!a9<\3b$_e=cB_FakB[!r4<6)5*)*&i
+$+ok/?fHu?rm#\^atf%l_3b$s*C*gP3)9qASg/0sPq4SGFPRBR(=tj/^ggrc)71q*
+\RURN2l,,YWgkLsOeOJgCuVI;jlYU?[Bm`\?,W"oFW]cW*(_Y)M0a)b*gWgJ_3dHh
+>"\7G*P+tsoC/7t%aPdJ6<Oj0lrI^Mddsk%lS8[tnpQ,QT/=-[>S_I8qOU0V]_6cV
+icGs%[.^=8Vt%"(4:<[Nle_@j2==hp-a\s!Et,8spU0B]TI,2FZSE$uJbJ^-E[AHf
+Jsb50:BDT@]kE9$bD\q<mdJ'*el$8W;nQ8/iCqEI:EG+9BAXcl3Gf.6[M>>6kN$?A
+Q*Bs8TI*a'ZeG/J&Rne3*+YR>,t.&Y^RDZZ@r4bZHUru,Q_BL98H'P'QJnD68j8[L
+ek#gV4G'/-,f=<ea67QH/E^T-gQ`GgIO1=5Ut@=F*U83:l$R360'/'FI\olQf,_uG
+/9nE!4Y=t^"dAZiI#Y\gg@u*VoC+cWcY*@F>S^UsOt^K(jQ>R6Mj$4MPnTfi)B@d$
+*qS)t&O(d#HHpk;g+!:9>ZEP`:*X^BSORlO>,uPfK,aMsO^R52Uh@W'Glpdb'2%Kr
+XfgH*NX*;mDbcYWhE/>/V@%kE/32#GQkMjYbAho@LJk^=35(gsL]>6r?Nm?TUV!?N
+h=mdBGPBT5^V`B*.-T-6qI/uVj!-]Wp_IN^"eV4t4n1,ZGp<OJCVDPn!NgG3^8@ad
+%Xi]nn-teN(AC_@#tF/&IhaH+3cj#)AtrWC=cCE9NtG9iDlVN9UVBP[BApJi9!.VB
+5JkH\9pdcW2]b"*^ki&B6+8ZXY/KqAK!upe'`\+p8H/r;^TZUHJ@4":C=iJj5Q'*8
+pFBh/`iUi*-p$D>B:ulEL$OBYh"i:pF-<r2;2/.FqFm4fYqB]lG@k[m%tSj><8J#0
+LOMHZ10`&),oM.!T_2<*R>JQeDK*>Ba(2WH=%e^iF`$"Q'qL<eXE^_p9<CKp%8ptC
+C@+Wq,j=_1FP@VR1Ypm0eWRl$DXF+hNq6RRkETpj@s,&c@XnU:*2J6uS8lgc]X$]8
+j/+'A>qnU]\4T(C5f2)QCi./A<a9L\f2d99"YQLI1aAl,'KQl`.RrAeQB7&0/2t5n
+S3fm:R$ptKEg*I^77=\)CJLQNG5CG4Vsrjr;fR])g9sj6Y/i%AIFD]_f[=\Skr6'#
+)dDTeXglPr$2laEecCIu`Sh:^+a7!7;Wlm08ilW^YqB_XpfdkIQ"NP2JY_n5\ZPaD
+>!&G4$/N&<D(FF3lM_)C<I]7b^iQ_WP^VF+dUBpuMb:S#@H&OAlYuIbJ3r.8fP,rU
+h4XjN/N=AV=jXD0[1*-W.R>[f%+Lpg6Tq8T%VcLM^rIMO`uE8Y'aJ;lA!$j0@*>Ds
+%`gWYG\ZcqGh,f5:lfHSg]_$2oViZU!B-(fR?SB$^mI5s)6ptK'b&;ZBFH?W,N`_N
+b4JDYTr4'WK'(j33*BH,Js(l]?8i3^e+C"PP.58spea6#,Y=V0('G(]K7]9^M?+@4
+!Yh/&EB6]1f6*k)hk"m386FE";ZcL98Pq3-_W]"dd-$ij)V8C)P<W;j8]/+sNH8Wm
+JQ4Ei!p4_t.8f/78`FL'%nm?8Dp8;#+0c.X%p,amTUptid%sE9*:t!8LE't\cB`"6
+(2>t``GCebqS@RbOOpijBO'`'7`2$.d'+QBjqc5e6F7kT2dFG/X$[j`'a#c9`oCLh
+EZ,&_r<Ho<_rP'g1hNDWiols=\>6C`?)-Y#$.28bi#GWqiMp<r_'K>o\>H%s#E9Qt
+,rmA`pgiUuh[Ct=@Ma?EoKk2dFp.uQD[6ND%m1[Z#"lBPB_F#iUuGbmHHZt[iWrpX
+@h1Ym?I3tdHX&7$_JkZAc%W><3(5CE*RupN.`V;/R=XPF2qo&e;OUo>p[k;TD-JuI
+2!SFdcgZ%%>]"rG%):ZhA$bq)I-Tb`l.=0-?F\UhM%<b>a%,Rpcc!TG'+1pUKq<ch
+V#C!0quUe8q4K6E@>VS`L/[UD]^4*ODk<8'WLn1i;2IKl.h0&<b)d"Y;/ens_DeCo
+3Tnh[&KeODD3BF9/^i3>H9ebDO]pmUa*LJ60HFhZU3EM-E_dsWI$-P'>^";1\r_*:
+FRa5hs"j(LQ>qsYVX'-6lfRkS]T>/.f:#(+ioN5H,hKVsVjH^XRa5ft]2EKHP4ft?
+Y%9S4`_s$214=(%\A>+f1@'!Ze\K1ia8opSojn00jg9<E0I(gN[E<,rf#`ND:CZjQ
+8l9IkSkIQiF-534B:n>VbAlKMR`P@ZQ`&'X#A!X,qsR-W"Y;u,rI/3hDZID*:^mN"
+:j\TGNk>6>&rCG$TklnJ::/,9ck%^]1g\js9?X7'$YMG1B0<FFMjBN8L,Bb(1HQf=
+@5Ets\U`ekTn"nUnDb:'ZJHX'cEqM0ol1pq'e[CDPmZ\CTt_Oigjc3"o#'T=ofP9r
+[M0.pgU7?G+\ElMKK%W>5OuhW3<^)[PfD*rpe4jbK#Y^j2Ot?,9:f@tl'dE>8n7.r
+>fY=P6Wt<M/6(5FD&EtC:3W?cWIB7VZD@#aOQ8eWVmQ--\>`()$D][pH#*Z3&elAt
+-..hgk9FRH)DC(1aK:k/V0ZD_/r7A],;M?S4H=+Gdb%<^<6EdjDG,u\naVHuRqEYu
+V&I!`h3tMH8o#cmq[qX.?L[EC7B,7'k7:."?^q&dh*:r1dgn\Co)HG)+Lc2)#i>H9
+*#g",,Z17LoN^GZ\bSW`Zm.gO%8'C\hfm3(Y.1LtRqu$Y+_PG#r.a71.G'(B/h&ZH
+<q[G@Zed<T.h+0,A$@=u.eJ_b-25#@R];._kgJit7C_6=R8LNQO;K;].W6EEr3:3O
+1cO9kE$(opd#IpZ(:c['F<:4J/m))QW\nqi2_Ub$n[tJYd$"q9*Z,8dhSgLD-(YZO
+;r=)[D5jMAchJ?"L%Dd+B1>=!X&`XSio/oPb2CRl]O8Rd4?""Dos<@g(2M\Qmk=o3
+"hEk"?sW.E8f\&"+&L!gTiG>&(p;LVFX\L+_aU14JJ`guC^B_a3/#%W@_-IGh:U%L
+Cl#A<"qG/,:*Zc$WBP^LD-CB?[`;Xj!nkEfamVoE_"a6[%<bOMaJ1Y)]f\0mQrr^F
+bU"W&HGNs#R/mm4;PU_^31p/r"dbF2L;XPn+P9T%qVL;d_:;HP\<jUk1m/h$6/6sr
+U&0o6'$SI;gq3!aI^Krg#Iit"+*rTSOj\ERs+ck,E\*d4.aFDXD#,IIjDsD>;2TY,
+9=i3R%T_SV[6sG]<</+b&+2,qrd0mLCKe"?'5[si334YNR"Wg/%.;^>M<WBbQ=QjJ
+jOg<?/LaBW`P"*&\^.8D]"q[t/+>k]8SWur.SX';'g>9lKSIDl//<A%C.-SfKKWc9
+YAP[P>.?tM&R4;RRdtrck+D:G`8RL`ln@ts8,Ve_4@IB<Ps3T6=FS@$\]Ai/^oGqc
+=u^:sr8IDIO2%^g=r@~>
+endstream
+endobj
+91 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T5 21 0 R
+/T6 22 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+93 0 obj
+<<
+/Length 3746
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Xu\9ogO.&\[L3kdDC?eB;d9^$m17&d&>YM$<Z.Z\MkdB1@V>-7t3i(IA%IW`Weq
+e^?KBX9SjoWa?R#`N!"#eN^-ImoO*RkGsB+BV_()pfkaFdce]N\SFQBgjHN%M>?2u
+rJs1dq;Vd1YL^&!Y(&FG4Q!5hSS;pZ+bYO!X1umppPZY-cd0Y\4+([?B\Km(oFCkG
+SLqRr(TkS4.]p7.pGnZmSLfteXVNRS&0Jul9usq"EKt?/mHhtn.mA?>CR7rbpnjTT
+WH"1L:H;et*-5W2GT(1@A]#Lbc!f0n0<r['09lV!r-3]YTc,L3Yu4297A6<.mVmJ3
+%f;$T>G&MJg'0"(,tO.&QA6ui03PuIPcq*-H(/m>GoE_Eep4=)Po!Tof<]RAn!Kc<
+*bE8lanU$8FK\\BXI"&@pPZCTLWR,Bc1iop&[tiAL-\HcK!MkmO\RPloSYW0C"$+b
+[F]V"is,'4;n,GP#C]h-)FaXjX`pCT+pG(Fk.=1_2VYmd/f,s8+lq5Nef7d1fiVm@
+Q%(+e/p;Nhnu-JS(b+>&1m^e7GbBr4IR>k]GF]131V[?6VgJA6=a[8b.J60nRH3c(
+Wu2HMre<r<Z(8cH@i?0Geu?ZY3Qsr62RFN;UNSin1DlbDm.@J'_>G\Un`q/!&fKi8
+F"-8OSDS`/o?GKmf/RVT?/%Umo0"53)PEB*Wc?s3GCcCr`!S;f%1n-cd=rn,`s;)B
+Qb?<Mq5Ft5$&s*LOO0(XrOe3=8[rCb,gM5X/NA>?\hOuk&E!\WioLI"^bBFE4"Zsf
+g1\A9[#n&gE(ZM#SC5f>,NK(S[kPn"XVa<k;%fHf@nf]l"]/O4K.Oh%@<Kk6NIVHH
+&\r$EHt,UhbQK(.#J"kA5fn/SW=d:V"_Kfh)AChhi>P!HZ;FX(!a3u,`tO,BK!p3>
+`dlA&Aj9r))$m1S9#$KldPQMR9DTuSC*f[MQ>E&+WKiR&>"UW&;_'"+[?PPq9s+1q
+;%))1E,$\pU)"_+E,$\pU6^BEE,$\pU6^BEE,$\pU6ZRSB@J,u:^]VZN*6OdW!2$@
+VcH,6C2&b=:9B0`C0B3)0kt9q:s6]cN_q;OKj#8K3(C$/'P^eGhaM9S&[]q[MqN\8
+*%,3U-OAG9`acS&;JT"6i<\+-X:.L1.EN5+D1F"^`04A#nSeVI/DRQM:HGrR"<e^3
+I>lO[2VHRcg-Fc4N4YPjo.r\Z#!;r+0k84d+-*!'Hr%^[=BH;4(k<AU;'<?1^HP\?
+Jrge.g]ef"^QY-*5oTprRE/TJki<_WLg04Ii4h-!79h'N"*KP#$>4n8WndhF2?L8e
+qU'&ACha)h*:c\AXp4>gR,DBCGD4.@\.G&^@JU-@VMl3t_P@Ga9Go:rKEi8dQnhQm
+ak4%b-'Q9#,RBGWQmcOALlu`h4VOZN'N'Hd!3Z6'PVQ-)aZ,*JM,Hg#-m@$iU6L1*
+P`,uHiC]=i:diDb+9<.PN"f,E%PADA8f9(PA3<CF';^X%;)2IsPO'o`,"b+HOI9::
+1/^N^GR"jfMc*$%-lEOs!>D;g'N$XB2P,b'7Z&U&KV"#u7Z&VQ8Nd``N"f,EIMDeg
+;FCg9FA.oS;FCh8G>+5V;FCgIk*RQ.UkfXQk\<se5S5='MIWBFOWmE="4'@a,=RiU
+KE%>fAYb-FM:6Js8f9(PKK\=^-tT31')%c,U6Lca8pD6r7;7Y+fr[[0J5]8\:Csl6
+mV>@\76XRt3(!H25"'f*18UlMW1LlIW)CIq<6lIK)jggmYhNWR`/#cHA_F$o<AQV&
+Z<SWmY5ii'VJTN%RgDD>=odRkG/$g221g3o)i=AGW$9_q*21)$QnJP%BjL"n)F5;a
+UMJmJjT47(#%R!,!)`iXTT'!^C*Op54RiOtV1@k[Skl-lk6S(cgM#pqlphku1-tUM
+G7n4m5HJJc=!#*N<q%]m8/4APQLU<[p'2WEbkujrLMslHg"kX0gW,YS^KG=HO;&)O
+W:+UfY'pHK[J4Gbl-o3@nQ2rVBQ8d1eNQ2;+%H$>o[/0Vf.Z=SnW;Y!qL?9PLU-4C
+e=H4"c-XH.,Uc7WTmO7n4l%YhM^D`<I=SHGh(ID7<Ij!Acjd&mceZqin;CAa0OM\'
+S.Y?Bq`GiI`l4giNF!;7V3p_4BJ1ZP!SWaQh[fndcr5E<':j>tF!KW8ki:b=+U'&T
+;"P)@^3!Osh@J]#YQJG1kmWJ-4p'^-l"Rca`:ot=E^i*ab+X$7A?2^u08=r-G:,G;
+#"HF,osN%/]q!Eh6\F=oPp)H-CldRngM\-[1.X7?)Pu)X;eZ.!E#eSL(nV;ip0;@^
+@SAS0&'*Ld8co-$Zgr6cGg&!)SbqSK'7GnW/]S$^+Vp]%-D2s*a2cc]Bn(@fX<WA&
+8haOOQ+Me[DgH[Jo+`*jn:eHgThO`4/,tH=P$05n9:9OVQcWk<FI.Is5/rD[Y4kXf
+em!PFYJQ/O;ko6f3=HtDl_1W.N;<p!>ou_:I3^WM"CCe?2Z<7C$"(P.cK.fERN)(Q
+"gk>0TtG0+1HOOl\:<@X?]HeE\`"K[=6KR;(61%U*>'hT#-nb=I`p?F]>JRC.Bae"
+k?UBO?I)!r?Y'ASa=Eeo\\,kjs*eAC+H9'R1l4>.oZL0_kbBP>g"+H4.O[)2EI9[5
+8OqpM@[,Q/<f-ABE9`4"^EN$RigS6h][?=iHlT^\d9M]@J_>N5P?aL+eKhnKOn0m>
+Lise&]=d,2P?+VqPSRj$qpc?#TkIOl;Q)H_F$.h>WTg_UVs']=<J3XC/'4.nMj%p-
+RL(1KBkVuZ7S#TKnHVi\)9P\+m2h>+pAD9F>1MW@kYA&Cj+2;TAq-<;l+@1:iY$'J
+-9h%"4hFRXl[1Q0LX#P>@22Wk/aYVLn<#N0n(%VPK;[5T<U$3X*qJ,b>[=s\a1EVS
+7]i'7%`d%A8U!;@4/91=/PqO;.*sGM+V7Yd4q((fN%H_TfZ&rnU]`XTYjXMT3.CR$
+?^V5SD`=lIIqZmJUDhMn$rX,`3;`:2L2NX_L)-BFR%h;i"PPJ7,;CrnHC@p2)roYD
+a2@<@L\(Li,%$)\f68rha_o`p5#E*&@<nd$abg_-Gf=WBJ=1+tQfgK*gnA8"5"S\b
+8/84Pb$1E`Wi5(!5[aAGL(dtU(DG>#hIkjs@]iPnPc2PJVfCF!P)-r9U_kGb8#!2O
+=6CZKCfIg<;kg]q;BX_0$L5\-NJ7eMf!;o*922QGRp*5"1GSGI2J6F8735K)\#^R(
+\+QZZkDOpE[<6@<f!M#hPl:8uJ;a#^&#1VoSaBOkV_(J0&HAXea4a>3T)H[<3K.a[
+/Lu)W8kSiS)Y;LUH/7!lI9Yf/a6rkI/5r4AgGVYR+.81(;J1XJV;mdui_%8oeh8I4
+9!Ik_EcRE/6BaSTNUAsd_XO*.$`9`Z<\1CH_@81ne&nM17cj_Ces@_QZG0orTdqS;
+guYRI$fSIkapK'[%-2mZP/u(l>99cmF#U+)q>_5lIta6:$GnJ*7Gn%V"W;1+f(f@G
+JT(CjNSt(/Kh]M#2f"m8@=iE-@nfNIkMG\adY7l+CXqpsKLVFD;'2#.,<l25--,(I
+_Tu0BVQ9-o[G%1s:5)i5Y#3Y?6SH;UW'0[25-&ULpJW:=6Pfu)g7q1_&H/Fp?Wh26
+Rm4?%$,4926]]V@S6@)eo,rkm$<82.NrQ#ZAJJ&Q6]8$;8,#GVlt%3<"C"+:=Y[cB
+[!(*PK4_qm1u0%S4C!_L.:b)?)A#17;7acmhbN@Z(QtN*d/~>
+endstream
+endobj
+94 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+96 0 obj
+<<
+/Length 15005
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z,'9p=<i'#!U4n.o^g_r-^Y2W]QiM7mmT>8rX'ZDk)>ZG`/>8gE#P-F.E&s80M7
+#S<f-Ysue,fOGNs)VpD)Y9/4\NkV!OJeunj&M(C?(k/XcPJLVg8g]G[_h]%OU[MMr
+oAXYGkNR@NhU]=+AGR[>X0A*5K=0/M8)qR#[U6-QFnj`q=5GobhQ?\@3%l.Z]`%\8
+rV9j'Pe(u3';jQD^R\U9M`'PjZCYpAP:Oc=D0K@-a$m?5\=?:M:Z%*\V_\/E[3(CC
+OEp*3W6L;_>!#q?P*o%K+Y-#?7%CmH`lZo*]1l#GS=Uh3c0?p-q'!s!YIuO2Gdd)9
+o@8"ShJcI`lX,t"c>)1<?.@WW03>I%>T$o;S)'Uc$a.RPDTD3[Igf[U,Ad.j\Hi`@
+0'Nd_`ZOK&\%_I2\Z#@m_D1N$80t$HFhNAoK%=bU+sD6opGP&r?U$/A)J@7\3^1Sp
+U_"@.<I2C8X<7;:l%acgj8.rrs*,Q.ri<$mho9AIVV@*iM?iq@^!fU9fmYK#Y.<p?
+kKCgg*1&n<mGg<>>3S$*52&0P5`0e!O!3=[3Fl<VI@ocom;1W1)h5joa=P._AGF>3
+*'_UhcGK+)*!WT)or#iB;]ij3m<Z<ZU",^Q4pu%Yn93'&eU_la_oU&LgoTs&Z\O(:
+<1R*\'6L>IYomd'VN@pTitq?V:j:r@^m,21+:ipgq+3%DY[*UUD>Xi8s-rJ0"io)$
+Ibs(0ZN2#Pl_P?T@l3c5O&,d6)K2(VqqY_p?dXBrSCO'EhejN;F39lB,N?0#`f&Mf
+p28m36ftI*r_IL&.pln;BXs_\Q9JG0B<Q:g>YLp?`TB):5ie-diMZ5+Y/c\Y%[.MR
+mn5beD/u_ob^?kqCUX2mLEp"a9XEVN@S"11H1<*R,BLG)@HnRdga:A1pTrCU*EcSS
+eW6A7oQQK1\D`(UlfGPbTX)6n[J>p+:t$NM3>gf;Xb/Ud4p&IXA:RJDVdlSoRH+<r
+hePhh[3sDNAsi42[73l-Hp0(.lWOgUbF<^7X80saN2fT"LkX^,H%[Ko-OiHJ%S_[I
+XNeY#Mq;l_ia@hZ".;uS=aS$"#>bdNEtK"8PG0!r%Yu"MN1]EV8F3fo0MW!TkB]dr
+^%b?NPm0Y6Ors#!`t-F0[di`g30@"nU@Z\uAZ48QkgeB<;qnT*26LJ$9e+N/)We8R
+g^Rd$bOTs8DMU-/BDhc!e\o[3ACJ>p+(M)'HG5@Pl<.dKSB:IYE8I2En!cmN)0!C!
+lLFnWhE9;GB""b8PfWJ^*2;"&Sp'k7?$)pr7DG0`SRUefou%r<&L3%t/"&HT/q.)%
+csboA+HT:QVd>UG'Q48*>)HF-aPeVODg&)b/aM.sf5X"Xn^R!4>4al+:u(/*f=.a&
+H/IsrDU5fU`A)j?(>udIZ]KOd9!DEh2rduah;bA-7T:h#'^:3GV2D&&qp;<J1sq22
+IF*M]*bm?jbIViNhR&610!H:/(2lJ"OsMB6lJVQ@iGXp_g'<0[=H[lt\eB$)RlW".
+>aPt0k,-X*R:XeaEg6/TmPF9D^TDFZa_G/&:H-nu_V4`-ZTh/Sb[3Zm^)lh(%3GL"
+:lj<Fqgu06fAbpU.i.p0'VeGK?K)ZiT?g,>RIQ@0#HtHnFI6+m.&qLl>Im^8?>*b>
+>Oc0jNQAClf>\e?9ArR<R4*3SBhgaaS1Q&2d2Z"aVCJOV&58DC#e%Z[?r#gfLG"h"
+V6pYOY"-7CAbt*86)RcfN0TYVYX0-AgD??*FSf$&]YZL^>nm2AF@<)b2:.LdL)/5J
+T7Uc^fjqo.mPY.9+SDeKrSNO`kQfo:?L^:&'l?_.ASD^F5Za7T(K(Wc+0L"`"-:JU
+$!K<Whk"r[0G-c!`RQ(CF>i-1$lDtOD4\te;rJ$[)AL5sn:#&gHZF>/$$6rZd@@H"
+_sg>39d+NGp_SNKOO14=O,B8rF\)s<+]=gUefFjb`IXbCAcPLL.IWRhSCq?--,U)G
+AR:2!;\)-7Q_e#8nMa#;0]UfH5u8ZHpePO5r('p)!-YZL,\ZDIn0#Z7im/+<Jf@4T
+H[SY2[T#qk`"OS>$76pRU,`lb\GAJ^Fblc*&u%\r_Y$6I!#_TlZd<H7;Bd*9BK`"f
+_(&,X)5Y?8%aeqkW(`U&\f442mkbS-O=j'hBW,K$dN0=O&O$JSghH'ulBQrQ":1i<
+A$kF8JhC:nOof]<+\iWp&/Nn/V+4T90/IZSr8S2j*!sf]%ceb6%OhOR$faT7=o$kJ
+Dup@tIl+s5cO%saL/V-PR)K*qdBIsCFZq^S6it<"59t%d@S/="<2p@**\SF30jp.8
+*"]oq:t:(cqLti`1`'3#6Z#,[T.'"MAOWmujGflQ8L`T95#mo#1m7>UTI2^@_4[m0
+WpHGICpk(;'U[!MG8AqB5:6/Ff_tA`fH#eVqUA=K:Xg,BUb3%:@jO^#k65N#HQ<Rb
+f5gurVsDfS7@Nj(=E=\!jqOnXJ4`(>82jKi(2!41AKN?OcJ7#^h_:PPNNqMQp7GtC
+'1^*!929SAC4hk<0ccHsm`FmU$Qiq0[HH^LOG77Fet3JT.qh9e<",\r4=$##6+]_U
+I>ER8SP(A:C:&ldcIIn"JKUMuT4A"s*Qa[BTOf5Z)3^nZ%WiU:FauL$"9$o?';,R*
+CrdL`a`5E#lQ!tdKHsPH?*8J$84R-PK=lr-VZWqtV)+IC(t?0:o!p<+%CK'R=mYMn
+=Z@%f!NOYK#UOH-09$O)iTcgCdY@*VJCire#i0FS8X]kI[CM6oaWnAo4<Zq^BVi8$
+\5:*NKQ0V6**00SV5\Q;[H)pmR^guR:mX?tJV&0,._:^(EAVc93'j-+\;R^D8mNYg
+ATWkB%'P"1"PU-2)$'g)4o0&QLC!c6+usTn$^=@7[HSq,he+'01Y<3@XR-R\OpfSY
+(UOR]#t\-fC);Go'ra_-maE3cB<-G(kh6\sbs:U(H2;Dn&B+3aj9)33=8kc^81j<g
+TOL:"mRB.q=3]R]VOh$aL-K1XrqFP3l'me::bfbjHMSk`]o4a*ZUOJ2E[;^=D!Tbd
+mcU@u`MrU!b3A50;qM!n:'/!0/Tb@pi.q\+CmCuE:ORJ9JJ4kT^eNnk0=C@>Zckm8
+AB6Lf!'AJV37,5f@5/36X-N01Wm[#4n=F%C:Pg=S<b'lEdc(%[G$9GbLA_8N,sfPN
+Js-8Q05%l&3Z\daA.$$P#7cNCK7l83S"u=iHiVXRR/0!kSI$FIgG=o51\XC>0q7Q;
+;,p$iU2`.=5g%<ZGGk.?$47Ytird!\p7;1u?ful%,@mVW&EET_oEm,?;0pij`<EVQ
+NI]c-Da(f<o3qZ:K'BHtR<\ir6ZrI8s0'5@c`*L'gnSV'l-+.>7M=i[7pP,bmm[@n
+a=t+.g6)_*kco"n!O;#+oK.k^W`7+ekW427!i,ZrKk''C$@sXFDfnl9_p(L.bU\pf
+GrH?EO@`MgKbJGcW%,5,]!:4J4"iXd<Eco&=_J8"e1*1(XX!^YP#jEn^DdJ+66$nL
+O9Dtqr.!L'99pg7$Co]t]Ri8F^U0#)K$W[Yhu->X!"pDeeSA4qF68S[L_LDnGDsHM
+@F12-PE,ubo]jro/,8Mn,C\UBrX9V3M._HJ\-I`<qMkA`)KTaX_+g1R)9)EI@KCiL
+cF?W.EHo<tXBhJc'*)NhI>'u*):Mg=n@Q%6[u"OB5qu17]g1KJ]//o&c`I9GA-Zgf
+'j"^[%JMLL#ojJE*ok&2ab3G2=XqI%!nlliXEf\!SB-_*UPV[gjonBTidV9up!O?'
+r1BIto>t:>UQe-?+n%XV'3-/43AbipA`@7iampTD'0t:n:>[2<5<fiP/=uZGg(=c:
+RsBQo?Mp9Xht=T;s6""a]Z8i0dOeG<acim!..?*r=:8J,(JIT9b)]+1f'!<FF7.R;
+Gi@X""n2o7Ga;UKE@c9IRe$9I=RlK1:S/.7g$4k6W14DXJ["Hqi::=8oq"g'4ngdO
+q69cMJU+r*mr/4m'R'oNP>a-XVBW[NY\0AQA+!SEVdTHtcEP'Kkl/gDL7GQd,s<Dp
+_hT]D#KB2^5<mZ&rO_K_G$&DW\Nq'N[[kT*:]hJsiV*@9Z.:al]Q^5uTZs/T!R!B_
+Y7hk2)m13iJU!a<8;^b+\rkK;A?(k*G`$2E[+_l%_&j-X*A!%?lY'YS^\\U5&K?T2
+hg\Ao"^\_O?8#,p\`teT-XoCDC%)lg(7UEXP"5qo,URXm>eb>M]QHWh'd\d]cCV"Z
+]_\g%,ECOWVa)-+h#HRWiF-Fk<<(]C>/ju!d*ki()9c%bj;Mi%\5""P,2!X4!u<cq
+`9?k/`[T0:*eR'NPn>q7BjKZg_q^_Hp%n+EHcNir<1dtKaZun4m2V,F&ZJi?/g>?]
+,E2h-K29eM9G_^NES$7d?Gn5:.6gKfiAd<PJKccHVgr&+muYfo\QM%52XkM.Ce%!*
+ZCWMqL`Nb)ES"m\)9s.hJ'rN7`Gh,V13C^B@:!!VZ!V[*gU?J.+T#^d3:?Xj0=ugY
+=e49XbDLSSlq[R-^t1AjJ,>R1^JeNYB%*$A4*!5>QBjJMfFeQRX3la`SUB^i0tZT6
+,*"7K13dp.\,Ua/M:;M]Is4SY',)$SpuHW;r8!\>2ANF!Yi[AuE>nE(6lXq'Ga]HD
+r%S-t:qaTXrC]K5.Bk`El=DZN8H,.X@&PH=Eld1g/h)Qado,T]*Gc^l8!e5M?@-gU
+EVDTU`B=M((X?I'k4Xf+AJj[jP!ZE9.f+)W8V)?*jTL#IT+fTCl3_0!.$cetg?Zl"
+\u!@9DZ@1O]p3MVrB=Y<Z@-&uGglW;j&G,$-SK)aU)967&G[j/o&B@mo'-QLSDoJP
+[Y+K3m>0Q?C0co(0Ab=\o5[L[hd+6tqaC$^(V4Lg'mE0OF"=>`BWI"mBD,B6:97O8
+irm'0p53jCht.74L)RdC<*/5h[1Q`9B<qB'4p_IRVVLWE<Mo`4e[/a;9#)3J9`r!?
+J$M26Q;-;mp!;]Vg+ZU)C<rV[k-_5>^Boj)J#'9;eZAn"ZQrl+]`fqm`M^>>=N7$h
+AtSL7U?b=gmRbgiqI(bW6BDV)<Nop7W?O.u\eBaQqBd)=)[0[#IY8gY\kX`dGF1-5
+[[K`S,sK\UJ4M791lOY$X)p>'l/*dP',)jq<(,Sb3%Z^S$!o8]BY&ZcT85[ss&FX=
+\As@gMf[2Z35$uo"#oM0&=f\V#IRn/9IiC>\<c'9'g>badSf$,c<^HLo--A<VV\B-
+8D&dP]KhSqs!BFCrSbt='mQXlhQ4M.b(JH)gbe-Sc,$$:cf@1c0V?1`:%S$(SX8k?
+2b1.DB31J"WW=?"NB3X*bR3UHA/%^Z!n[mo^;;k+),beDLFJu_0V6i!5!R9)$"U7.
+mf&AD[u'Cp<4[6TW2JT8XLpIf2Q%1d@f3;b&X?p%eur7U@r!;0[IZmi4D:`;f3gK*
+(CUSPMOo4'KX&o(+*R=MejXuGSFXS);90DP73XA@fDg0-]L0-AV:'e/H8CnjN8BU:
+_T(g*`:C#PQkM+JerTa0Chq)4j-sl^_L"A*mZUoeXL/O[_R`GTlbpkl*%CLfRu_(W
+MTe/\-[eAE?[0VV;bsUR$ebR10EHMJ%?96U'<p;Uj'9LGR=KAkV,Uh-T.GI=a12?q
+h<QR*c8Eh9WS3P6Q[.[toksnKf5JsIYM!+`p0Q9U&g"r;)XV[5.#AW$(SaBn,r5GV
+=e\_/1=e>(X@]RiA)2`Zdia&S/@[-H!m0aYN)Q2(A5-'qUq3WXl`0h.0Q4Gmh;)G$
+kr)CeEiPjT)OhT[3^U#34dun>W#M9:Cl<9HLqA*ET$A#X+"ckK=4=hPg%%?2m!<r4
+PG[d`cR0B<_#eSIZr[1hEB`VN?s2t^iAtsTo]4u,@pZD>O`Xo8@9DNSjoaBoaLKTB
+g)/b*4KU:/r)hhSs2D&9]CY@D.%3*,E'W6E#::V<fp1<2"rY53^nc_>rH0JK?aU/G
+)1K<J':Wt#O_]?8Y=dq=s*VV6\T#"G#-9K5,@bFmH#YLkbQ!Xe,TUja0(9%8e0>H1
+gPWO"!RL1K]3s78^:&#X7be-0f2jB.D-1OoBs5sUk-_YJrt<]EjW.Z.MH^8XAmnr.
+^)SL8^J"EG@Tf%Cep,G#T\h?+YQq:KZi97)8E5!c%heYCc6N)srdW4'"nC?E@<pRH
+"M\e_<u>.RFP)Q,s4OG'S=-'Q??U%dLDT9B(sDgQ?S@aiGg6$\K_<FnfKH>SAmV50
+oX"gm4fn_i:M[V93H^$BCP%h<VRFng>BdG4^&.j,Y24Ac^/6_Zb_R[]GbR5T8#*Rm
+jV)'GMPd)f$)TYQnB(7aLe])_?D[K*l^GR9:*Vts)\kOkRhmL8`P2_d?,&DkIr6#4
+%Chd8YXJcC5He"?;l,m7*YJ8XiPHE6PsLkm_U5S"H%FuJ'o"]e)98M]r%RMocCE.l
+^upLK?NThF9AeW57bg)EKD.t$G+bda9npM>fP+On%+o3%6u-Gj&'CUQi=?/.VS#1f
+q?iS]KSd.fV$n=j-L2=/5Ld@Rkj?e.B5>+T0R0"AK`hXCVDF+LE$>nt9H6bib/DeZ
+-\T6j?HLSG!OPn2YOLmWS2$m..XBRa8AobA(\mn^s!CRT^:ufqcE6*Bqp<6SQ;U*o
+;`og33?OhB0r<o@N-m;bLH)53b>'1,I>)6h:Rm4I<?$kP`,&c<o>CJZ!PMgn@@>)U
+X*ELV;SZ`b4]7,,b7ZYO(_Bim+>QV/J)(EWB'#>.ArQEMOV5\2P;X:?5uV^78RPaN
+)"nVS;kQk%:,'VHbhGSlLW2gka=5pCY<0kU>"AeV;M8HiC<hH#ek&&OX:GU=pPK%]
+?d%/+.WugRS+,$5R'>!9F(<%h#:"#$RgW/S8J\2(D\O&uA1u4o6EU1*IH*iqdeg=D
+4]eO+_`Zb:j3p^m(%bW,FG,8^i[.L7^-\6J%.eS9g2m$lk&i^_s%>V\QZb?d4^4:k
+("f"ppR:II7+qd9m!<+I2n79eiTrsq7L[n".C?Q/p7P!FNn.aE6biCf;M#`@K'XoI
+dP!ItFcY(Lk)9,B[`T\<+5!X62r9n_1>G'+QkqMugtb.!*4CR(io:NXciI4OY:qMI
+@,8o$[OuB*hJIA`^DA;)hr"F0-LMT#HSoe;p`@cpX&!t'd>W]YCY+6Ca,$1)k:t]&
+3<soAq2DKkR&9ct(Wah^l<b(?!(eFM3J`7m@gF0Z'=8HYP@Pl&8?A@Rq6(fh3G4*Q
+R)EFB?l6d4YQDch6%LpnGd?>/l/.'O+%i5Y:PC!a`Dp*+3%s^[0rPKJmb=_Docq63
+)j:W2G3W9qnoR&I@oIXAoCCgJGgNTqO_G[>La^-Y9bA[">"=G(s)D,$C0eb*k/UP?
+9$+0c"c9a6TE![-o)H5'P3g22(q@m@HicHN&;P?%#_"G-me^pP!?_CsEr+NsC6]Km
+JJ>pe@>,]W^Zu7JlbuqR/p2uc(gX8eIH1/MF*OmI+Zi?G8mTVb7]&%hT_ubDAf>J7
+n(nnJJO)I551k;pd2D9fVOYCfro+Sh@HX+?Q`UbAd03-a8T+fUorf-Z.AY.WlGYeF
+Z0K03M.bAL@\oC"hWh)i&q@krMCm#Ep9`JDji;JLT1_>bjg4kEIBNT$Fu7P+b!Me,
+/+t'5=_+o0V(D0QOtR3U<U[+fb$r/3Xj_RPqM9$#1"2UX>Q%cP?L4"=eXba@^s]#8
+5)nPCAN)]aSW:@A,:'Z`b(o+NYKn(3n#m;]`I-U6o$+h0F^P\4:l[4)Vh&_=YE6YO
+?gKn!Q;eEb:3nE+kmYOr^%?2H>a0HO]mJjH;&7G_@@61>R8)cohBo<Q\ej4dh>^fo
+]AG^-c@o#7kP-kFmKF,h:SYG-_S"NG/Agtn1lW"?i41!#=C_VEoa_sIbQgm2m-7<g
+ftn+2Hc\J]FF._U*<,hEkIL1(\YDe&N*XZWL(in%K[HqW4pF1Z;F23uK67B,oa_sI
+bSeI'Z(@NC&T'=.G_'<Wq5;']hXpQSQi">AH!V1gck`"g;?[$nbUTLM)5^UF:bt[t
+e%#NW-IZCW$H]c1;TQDTa]q./Me1Q-FQeaZ_R#hCW:3W7-XWT?+m?K:PsX]C+X#LD
+`>kci.PZbo4(eebTPn%X>EK2#ZU<nFlIGYkG6gs=.1.XN\2!`C4i.lWBStA$k3=;>
+)sBgi:)gt_B,c*Y)mugAi:?b`1dbp5*=Oa;;eFo-CA5E8,/!@R^k[,7(oI,faF/:`
+pER-4$mW+UPr<7"Ic!Asi\ca<kJD#K3>c@KVnpD4LIuU<2[:l:h]2.8](]8Sc,"?;
+F&h_S@><CrT_Zj*Xo<0SG*b89Me)[:.,uAX:n&\%>>_Ce7I29oNN.(hR0$X?Ju:)&
+OiL3To\c3d=Koad\"XONkApGSTOKTl3h@h[]eZ5RXjI6uq,@W<%&hM#LTOI0e,6Wu
++iK-!0-5@SBQeHX(^"XVlFeP)`##k<4g^)S1nE/gM7UNEEf:[F]&^:D&]?#j132,1
+.VeA^f0S:')CZ`rI7<Ls-QG+t/_,+FMWYF6-g^Z9K*1PMK6P%,7%E['i'5YK?0Llm
+e0C6diS:6fAUH)HA`-r-DlmRj0fjrG&+BE2`]VJGgbq_:o>^/R*oR8d^+@#:'^tL7
+^NPZ2*UM&Xp:tUWZ@Fgf8W-H2me#'4BL)&a'L'$c'?$Y)#ciI%n7"S#-3:.'TTXjd
+]Ki`gr6mp?QWI:E+MZEOmS%*qXl,30E>3$9JKQr_#6l8p0+'.8!9m!d!.!c+'uj\,
+OGG.=bSa<InVAgenR^t0i:-_`mrCFT3Qu9prCP2/BZJPAkDJrF"7-qlSi9`Pm6D*,
+jP\b;>VXgU(a@:SLOT8ZoVjb?0;SV!4k`P%Vt>s;m0Dm:D5U8)+$Bkh;YS\B=Jut&
+S#>C<G+P-Q8CCEmVDI\EE)?/AP?OmYADRpTW-RMaKAuk.mXOl!.imuqQZK<S'#a18
+b(EmPnS188H"G`WqF0VmfG%LnM.(9*PWJ\BdPjPc=ZU00\GVqg]>;ld'MBg@hQp)O
+c.^1tbHd2dD0'uVUG5q0?0GBDf$]sp)ldKnfWei7L7V<&WS5]s[+=)3m$KAck)/P]
+@R$]e[.TY)@cO4]a#Rr5B;q)4nMR"BC''7*C4cG'Me^*qnYumTH[g`I'Sb^MVt[jr
+&`0Nsk+;jh]tD4'Z!Za'GHO1\\uD>2Z2t(iZ;XT8aU>%B7H4Lbc+;b;@2s3Ji=J9>
+4S7#,Y51_Rg[B9-Y87'53_-`%`rqHbgae@'[,N-`'B)GK))P5.\/9Ut-He6s3J4j<
+7h%-6"6Ynek+/`H/\F?RQi,;t\!L1;iP.$hSemkahfa$pn;*J?Eedlf*"Kjg37q8*
+cD-pr)k!342MKEpohtXUNM>H(<I<8W7WI9Ng]R:)gOZKNG"5jBZ]=]?fd2*NdS+.q
+Vk6euGaLHpqoQ2BBU^lLo%39HoQ[L3r/uM`m`A=a6K&+oNh0FYhA1![?]'cX^A@<?
+EQ`lr*2`>gNY1*gAYqD=^A@TbGgc8jbFIkCeX&G<(hSX*N1OKl*`sfp$e8/anDX<\
+$H3k-j-<\A0f-I?N96`:]"Pbn8XYo+c^d')Udn3$:[P@+RAbce%`1Z6"ZR6N&%3"1
+5%]=tG^kF@$m>aIo[cIE9lImk@"b.K_Gbo%crU2/_LGqZ4>4+L\47*X];6OnOUo.c
+p2SE#h5q[P/EVht4_Rl0-#7kEW1=/Hd]:C<kVrObeT"5RqphA)&sIEpF7M^^@Ek?^
+lLnA$aQJ$MP$LCq1p%+?kuKfc[]1J:Mh5n/ipqFuh8<[12XnB/krnK?U0C@9m.S%2
+?/>J9QVMOsA)4]h1,R;e23n"%.W16;*_NcdC!a*hhQoOp>A^DddaXpUZoNVi,nKTu
+;pRDoL7D[7_@(a==ai0JhV[d.W9?k:U$2d`(H3-!4S]R.:5.1]hAoT8n1jF+keZDD
+Wm1LVYO9"l(N[T9CGk"n)mhKlTh*BR]D^Sfp[4c*?g9JXRnC/EQ+h5?0\AqfO[Q+J
+Nn=MFaG-c-q63\o=I_\NrX,RrJ;H,?F9W3W;tL)4?^b:1FE_GQUPE4>0J>?RN,#<#
+PYb"QVS0ELE,CKb9os(-Y!?rJVA"9S&/Q1GT\pL<b`rT@2EA2[,IeMp%u:)C<_P%)
+Xd8=\Ji(]]A`i7jD6A;`'dIkK:-Zd&'a!Rb#QF%elo=(Mrf.K(<S$NBT61.u1S\K9
+M,HA&DNmh^*j\a"/`[HZK=Lcu@%?I8;6"mLj(e?\ad.Dpkk<F37uM@Zi(=6$n^X/0
+*OG#PQ>3$B<c9ro5?Bo]cLFcF(X-OjpOYVJTZWVrZ%4)Zh_4f:*Cos=a[9Pc?Q"a_
+AoZeW=%:kX>:P8#(`.hcr=t@8:b4Oe^$!@qn5^D_s"r*iV%oRpr^mF-EtRD@<KK16
+MLoVc2aKbI_V#V0eQ<@0).Y3$o2j#%6*Wrfo+o<=iMRs+r+8d<^Y_1[e@!Tn+sieL
+1fSR$HLt<9dV=%&acVlO>%m_!C?I`@C=mZ-^,aTgcfCJ4>5ajOLfWWumnaV+.n,g%
+6q%AT]j<5+0]+;?D8%2bYUpU;1#^'i+?=q(UETo62`eY8Kob_,&Xn1dbj>l>AbR\i
+?0YgA/jIkH']9IaJEGjM-GTpLpgEt^7;#H+k5?$\6'MJ7J6(j,Y@hqli0rL?eCD<;
+o^=:Nk0CQ.L`q@G)P9K=MR8k_-(5d(O+Dp-8f+p*F/T"t#O:+[,.a-tL.G,9B&;H8
+`Y)S(j3+a_mtZ,]H^CeDc=pU#&9qrX\pq_(.mt+,2!@1Q_up)GV>/*5kVO+dE,#!o
+TWVt'_<W[ekqot,fffQ*\9iY*.k4<s&UsX,:BU.^-h7u7/MMN(:S4Hg6U`ZSD+,Y)
+btc_VK7[i([n,jS>K#FseeS?GKo9mE\48VtnXLX,;E1M.qY2=]ghJFU,bKWLNCH"O
+QbOU)?&"uoK,"FuS;Y5hgIE=0b[=fVG7?4f^i[sejP0;R>R*an$,rM,H\9'/G8G_m
+R9)H%SI7+lDB(CTirkWAG2ijG^ADVt$LNYmn(G<'P\J&i:D<"VL5cdNLCqcpJ(MrA
+'oja/8uHrsR87Wj"csM.S1@'1)&kS2Cg"2KPqCmUn(:#qG,*5\^-C9N%)XND"fZmf
+eqcs^m3u74B[S]N//6:@6N';Z(3M^m;AXIK.4tg5oaf0rKjqUFkrnK`KX\gcq58d]
+0<K2X\RVBb*UM'/R!!fTl`j,/.+-jF,cIJEr'\C',;'1UpK&aVai&7pR,2oB(ubMT
+^=p+;l%s*A?f>r_=J+0>>A>oQ5X=VV3!>/cbjocI,8_Q]hfGioHH9rUmB@rU?ZeN-
+maA4A2N^OZ1$I@*J%tm#7sd;CK8d1fGduDl12&dQ;:\oGV8e(oAAq*7n^B@2d)b_i
+C#NXAqjb&g:VphZ:64qF^;O0tBheDQEE8l#mV3^'X%A/K]@t')F&s:gBoRa2)#_A;
+Y-qcQRd/^IY(YE-Xnfq$\!KRoiN-<*m(kcgWV;:Mc*#pX-\n:L9`g!GMQ,O6fg'SY
+Qn\38Ne\$!NrZ'BGR,.$dI@cC?!#'6^l.qgfQ]r+k7RCT1aCtELGZa`bhh7Gri2@Z
+FKdRMfo25QIr2bn=>SJ<aH$*GC38`c13hdW?`>9N6%qFCrX-WU6S:iJ"qHSroF<MZ
+:%&L&n*fu,]&.B8oADJr:;E)j9Vq;Ca4qE/NonfBVYJWB=F3HUV7QBQDCh@m(SFa#
+WLb78*#'U!F3Vc02mVK*Y1`P]=V.S7c7*V/$;0?(U7s;t(NZ(E[[@^TQVHVZQbVX2
+VVrb)aN5_M3kiOm?EP/`Ck1#AY!n/"6*=X)p2UU%H%1O=9fa%J&8r_M*o>O;nr#fk
+T(r3=?d[r+%X."*/&@Ul+>X*7VkXmApu%08YV67$/.j2er=q5+L!0tb/B#r2)m`(]
+B2D(t@aRF6FI4l)&%J2*`)GdH-r*)k\MBa</rD8TH[1Xho/O<ONS_kscQN+41iL`X
+a$ii]DqX5thjh4R]sgeDT@8n3#`tb#R*\`76WRG>C8_08#4^'SVN,@Yl0uR`'?M7P
+J5l7A$Kl$((n?%3Dht3L3IHH2I*6F4Ab7W.r5[+.F$@MGm0o=1Tn@E)2B4I)&1ho<
+JTJlAhuYQJ+6bOBK5'tM1jh)l>d9?;2"(cKROro>c+`9uK6?fn?20JOS`_^6#XpsD
+%]'=N3RO6NP*!8E1Kl)](gDipP,W>/!lnnP7*_].B<oo"[(I]j(]mR<nA:BF;uUkh
+W]!-K'4tOJ2Kd"2?K>F?XZ#\Vat%4j-D%d';4BMMB9:Lh2e>EX+!#!hqU3;mp:TSk
+V8daUo\IT[;%$fr*?ME*h0b)o\Kc;EE:r7l@FeGCf8m+l'X?8$=9sA'`G8Yj^VZkk
+"F".JhHb:rGh$Aoh[Jf6?X7n03-TML1FG_2PVpN#MlP6eZ4ZE?.#WeuO0ZRSq&:%6
+lpail<XI?ORmrV6@UQf@,OBi"5DONGPW)9m&"MqER8R+FX)Qg[1iS_]-sOK8?8cUc
+SF[@rc)3CPqdd*+O*<@)WjJ$,JS`IXJ55.9SEdu)79@i-EpP/ZYY[&deY&g*1VtTX
+MG'&'@QbY/E;W<]Vf$gt2LFOmQJPYGKQ`69&@7VMZ527?1*&a$mT80%P5bIk$beKM
+iI0^=I=lTtD1gU(&-R6kf?)48^6H:%dQ6:-hBH%L1%aHA*]a_51c8*=aHj%shfk"t
+'R8T--1I3Z#bumrnBJW+9Oi^$UP_.qn-q;QQ<t&BH[19;]l"1(3nTkd0@N&h@l5H1
+S8!EPN&7.-0+I5cau5k!9m?FJP0Z3?$t;ELD-S5Vo23.,(WMC4^)SE)HV,55B><od
+&b^4-#M[(L,cRc]i(6gJN2Ft#ORehd&Z`R_P%]b]pH'q:9okPXfB`'r-!&:i9WLIh
+3G+V,BJhA"6r\1a@@080V2h]*J=#QE!Xh$-_'"d;0tFT'=MJ\HedpZT]?9@5c%*99
+rdOSd%INFgB<FOZ?mI[sba2CN,t10Iap0>^FW(`eiIu!UQKS`,b5q9;\E%PaEEX;5
+2K/4D`]\^%Q\4BYKA$/!h)@+Cds96?Uo<8,/>Tf#1([XBcU&I7LJ\=Uj;`s<e*'!?
+7lLct/>J/KbG<U]gE\&tmJ/fSY:f[lY"nRj]@]j_#_OC?0TZGMjsblhJf!R\@QfKY
+biF(F,MadHD2HTG'1A<]e+SN9h+kE3+_m+hG<B$5Q4reslDE\$Mo=4n%R/%"me*)S
+)o*CGBsRj(LR/2YKNgdVdrHaVnM81)@s2DV1'fiKN<+*t(IE@He[m?uNIe>HHh0/P
+Vs(iJ[-[d;);WIYl<M6]c`tb85HM"N(hS*?.%9GT"#-mlCCaOgCE*cBkT<mX*Xjj<
+X*83+$*W_^o8A0;09&f^h6,&p+JiE9-#+\?a-Z0O@X`*<T=X,%H7CDrh7D^@'ApV7
+Esi&>Hj@i>OhQGKcb>#4-h"4BFYLYF"fZ_7:d)C50[25rqrYiQn,;O;n)mecDM/D_
+.\ICE@2.9d]0SfZU5V'\a#)%_G[X=];H^%d3#1nc:ol`PF-G8C$lg+nkT*t>Rbeo5
+hV[_6?1H_jL?'m8!XfV*Vm6;%S0BCAHp^(,.Y9BS6rlhsN<7,9+FATl#iEiDc_m6&
+dCdlF46H#A?4N9.%/T\9hs\8cg-)"i62m^PgW2Q09kpC!6CT8`M,ReF-nF5.;V;8,
+&pBFO-_[c(XI(h6+.1VF)p=,%rPF0ERd:XO"gZ0LeoHQ4Dko"1Q3U\J/#J9QFW`QE
+FSQ@D;-jmtbGi;;ShT'!YG[K!-@IjVp89`kiP:b.d+f8'jq-&bL06`;lKIjFE3<Ms
+?ie])0UP?0.67?8R.Z)XGBk@j<I\\21K[0IeV3`,EE<B,Et(G]=bAZW*L]TBnI6NH
+gA3fA4fYEu_&tghK>#0H/1k&<V1\O3g>Xu>2j!ELs'bXq]Xp5NK>bAJ9Q]*5EJ3$5
+A.j0@61l,(WK76K)"34QSJ-2h;'H3I8PiTo7"D1$M9HRc_C6)Tg&!96le*]nE>G7q
+URMmYoZeS+J%,0QS%b@j4]k1ChOLJWM%+=Hm:0'rR5suJ4P)K1)5]jgoOck!GiWD!
+@?s',`QKUdH&ta&LgDt?:S[sNAWu%)Hdo[.+pkHY8b8Ff3r6%4%!9IqVh:OC=]G_7
+#g9bQ+,VRs@M3!$NMr\Qj0U5IY^HMjR6`j8hI#6SoLZ5rYgCe1,Q;<`hd?iLns_oc
+rMp>+Z*X$aG2I;O$X+-`9kKea6XGJ&c;Y5u'5^/q4]WbAg,+5i[oA,=(CUZ:M;EhY
+TJ2(@Y(Z/$m!,/d[r.qe'k8i.Pe:EV]^Su^M[!J"ME@>N.m'oV5ao-Um2>)d9CVP3
+Y/jFj"X`e[Ssc91StBZ"aVEG%c9/F-9g@4pe4Y.(cR/r2/br04(-/%bSROD!MMi*C
+:9ai[T2TQ.a<;#tEV,=.,aIAl\CA+u1't.A:%O9/hk'W?h2e)@X+NRV.GJ$u:Dl$=
+,t4/V#d7o=KUZr.mV>Zf0$.(^5uq9AF*+DkfYIsM:W]Ro]S5YL'fKi]Hs+Ek6s5Rg
+W_Lo'K/39>Ma!BRDGG=d(;gr2>"EY^1*F-LCE\@:"t`g%4M;N1<!MKgY\Tqm7E^Lr
+8=^gY[#j?-K>m`bh7&Mf:Zj`Z!o-;p6AAXdTU"*pZk2^LKn,jGL?Due&$qHdL0;Zt
+G?6gg\gelJ0$eZ]BnW5IG''0/$a#gt<gj8Cof-"+%VgaYiL>$2'N%&AFP`'@7nn5P
+Ki@F%N)=S15+6]7YaRFq6^NF:\*()ApNpi9Aj<30[u$Aq'.mt]IW)_m^BRr!-@sd/
+PJIX]#9m>/J7eKR$>8f$L*QA,k<3tC_b[Dl]DQ,78,qkkJ*cMakJQcFcqqQC,UL1p
+0+p2i*Wq,Aa1#Cde+(K;cX6\HbE%.&^46*I-N&:Cd.kl;^V'O0O>/:\a1'sDijX.L
+ki'kVT0M0s`Up@Kr8[\;J%gAi/"qI,J,d0cB2(fWs!F?;qL!eULYl^&DE1\EkURO!
+M=]?.^E<IEG51M+`/#2U~>
+endstream
+endobj
+97 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/F1 19 0 R
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+99 0 obj
+<<
+/Length 2712
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;ZD/99\DE&\dR4kU'',Ua6")4gc)mm?D[ODUKLa,"CRZ,%ZoUbp4&(p&NnKLmGR:
+*:2`oYA4IH)uY55rV^@%H'?J*I.K*$f8S$Cokt#3<;dp$l]BFOVcbuDbWc'o+)HDi
+eTnKn"jpL9CgL`u9[o!F&$t1!=VmF%d$IUuihcKmSHU,3Nj3[HL*8A&)h"(CFft^"
+='\f_LJ(n]<SR0BoB/i*R]Z-Sb]tTnff&W9H!'T)nHt"\eZ3bmcgnb/SSPc8^Jk*C
+E)cCVOBkf7p<1!^+'(_#p9O-=e]@"'bL/sqmAj/_2%NKP^X&,c^*VNAcsP#Oi@+)G
+deH2E8YT$cRb9&1Nnu_K?FDN4#^bds?r\,[p=1;_2$d%9dVR3r5j'UK[**M0)eDpF
+Dg9A%+RGAW1gN^?;`0GY!:kg=!G^[1fp_-!!^I$ZUT[j__`76JSm'><@t3tP8J7M"
+TPJ.Rja5Mg<HE]OMIOnK^,TQ(#3="G3u,/NDZ+uA!H/\\SR(Hdc^P43.uKKOgKj@V
+:-YHW:+8a//Fc\-QeIo1\?/0=EZ:W4IAf'@BlbVY7%*Mmn*lflZP%P:?Wdl<(>kK(
+6t@?fd6CoK]NgmgW1YBPF'ld:34DmDllP)57T/2P?ka"/cm;uRmT#6\hdiufg-5Y@
+]2eK,8j%iM$\+Yhl"R:!J9nKi=\tA8oqS\m+-""r$!';f1o\eUp<<ar_iq(\Uj<)j
+1nbV_Vmb7p`neR`?*H#Na^(ntQCq/%DTl9n#:72mTXnKU$(A'TnY$6'q'I;(5'@G`
+3^VoWMq:_g;cerHFV8GLl<CQA.@6jb#JF^3iccJ\'B+a[^E6mJPihZQTja#V.<n!V
+[@Be(SbgrJ?XT'!4'@fnf%VZ.[dG3@&n5a,qV)f)LW'<D<\-jKYm9(gRk3.PW024f
+.kUYX\UCBumW>@U/,J@\k@h;>Js6l-=(@iU-I&-Jc?Z:&W!9E>CdVsc(Qq2@`B.TF
+(]!-9PDBnN@R>qH&Og]S`@jCj;fSN55#;7R\ZJCbj2WO2*]\9WU2q1qr1iWUoOlqQ
+l"g"3.CJWdVH',nGPQ0e$Kmr:c@p8^Z%Sd=Mk*^VTr0N5%DKZR/?>K3(@IB\;fG/Z
+5UJjBfajEEp)9"RLgZ\"d2)Fp;@'?`8Gc0"/TVg6h;U<)XdZOnbuQ%m2-]R,lFl>j
+';4)4!$l3LouT1nD(M>G-T:XUIKHsPj!6NHO[d9#<)Ma6/QaDLi[%3NpjibG8ib#0
+!QBIIor;[tGi_b"fbFd?E^*-uL:9m@_;N,I5'-57?AqY;2eE`aKchc8A-l?>Sm+!@
+7p=[XhUe]te\iV/:2q-\/Qg:-I[P4PfpcBhYo-OO;I-?^BH_D);kfVn?=^C/p@jB6
+'iq;\qa72#6"$]Gk$u3o?l2N_iA<1I_j$+.[0#,J(("usdOMARf,b`e0fPUkVI8cu
+crl!c"?AI5@-:+d3"PHNfsjgA-qcjX_Dh9ic>Ne6)cod*Reu'R-#[(3lhU,mp#8U>
+.5auF1/*fLQ^T6kRit(#"J7_kZO<cZ:#o@q^#S1B6E!Lk^TF*9Y>=I#0I4d.`=ifW
+W3Mhh8OV<gc`I+!RD"'-)%N6sJcmk'#qfpEFhO<\3o^X<!a'o\YQh8T=9IBb31HL@
+r_"n>feg$r7ftJj(is>eVqX/D1o4&uVpXQ.]j[W,E"EgCiFF&LI*-BNom`HuSNO;u
+-s&eNI(h3\^n].;2sPZV&S1Ro@1NmV(XKMUX+*`oA#ZDh.t/i8rGmO56OS%e8qD(_
+`nW+2\%Vm"ed)Lbs"[#OU@Wl8N29f\1@"Z%@c,`Dg<oSO.MRns`Bl6S=BKIpW>nFL
+\IH9>qr6$s4#$`niUL.R<j]36Ec]pYEOCB5c/DP:]&K$9E%T[7O'agU_TjlS>"]A$
+A=kb>C83boZYY_/0;50BZt?(rE."]#Fu&6/dG,76_jTHF'&a1REOFKd<Ja7[*$S,a
+JfGISq,!S*A.:$.rh?Y,gh.&sJREkS75Pu-(+@]f#2QkbpV&oCXl4-BaisSf$:"/\
+G`,Z+:ksEO:?U=2<&`p6/FoiL'(XE?d1$-jebD=QK1q100%)h:6$&#A"AoW`^3&ba
+hIDr2fIQ.-`je0)`tA1W15NKFBAGr?N;+??W_f\?R_bO5Hd]4-[+I*Z0(oRg8b`2F
+d'X[CM]rIU25&S%0Csk(jIcBE8Z]6tNZ`\lH&sG83StjH9&\X`Wi2saWu,D.!VLSr
+EQG*A<KWTm]%2E&a=2Hs?Z9WhDK._s)IR1[J4+%[=[H.59ueG#"V"UI$W1h5ZA/1o
+?16IA4=a/iQ*@-AOK;%*,<C`QUo38H@f)hQJc*ND4-4;s(%+>\Sa(CaK-3Tk6H[8.
+5nsa&O'b),c_5!&!G#E(ns\;s-.G=P`ej&$IR^-mglb/c[YZWSB`b8ai;SBYpNr;B
+]"TX2p=7"9p=5k9Fs2cc?\G7ASR"m@L'FdTV<CpC[1%eb/o9Uq8^&^O;WE-i9)T4N
+*:qTS*c,Af4ED(T)ll2'#<c129&tF?%AItRQFc;Q(_,V*mYX"Ir!%!nah<7S30At0
+fhLt*=W:N;XTDs,WbOV>39BH@+oF/6.mad\_V8PX[ibr,JruSgn+A*O;M$Vc[1W]9
+,YMg&Op7Sjbh3Iul*f9J3ZPD'Z.S0!c&mG/26t,=X8USU:i8"LQGaFgkf:s756Cns?1[j~>
+endstream
+endobj
+100 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T6 22 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+102 0 obj
+<<
+/Length 2099
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:,9lo&I&A@C2n5af]6LYGi[rddXP"pA&28.'k0G5rn6V/>^MX,cL?%;nUP"mbM
+-T&'[IJ\3^!FZju5OEI`p@aMXa)8l%3a4>aM9KK_Lt3G""Y$t(\BomHQ*o0-@7<!M
+o?T#@Itj#&)'p!jShijB^TuZ3RN5F&8A[-a23C4:-h+,l9f4AAf$$'Q:3$LGPiN8I
+iHL]h*;nN=XsGM>Jl;(k(sX_#<(*A[-"b9:cQY&1!Ke",!&t,^JMkfI)*l45]V(Q$
+,n"h)"EA$/M(q0`$O1Yh\KVqdN$,Ye8Y[o,bb<=!VNIVLSL3u&2lEL>SkSD\Vn?9S
+d<l7d@*S`jMIhr!pbCRt.>JD!*0Xi"k%_JACgS],cr%*h\0+%kVQd'J>7/@M>oKGk
+RdWP>8Bhj*k4V_&N\fejZob&mi`AGu30XKTOZ="0pu"^d7OAG47(ZY0=oa^-9sEQ7
+LhHc7^nAb!_SP)u)@.Yq*s[&!/N'5!=f$eWN-/;0+:T]DdW,sk'liChQpB@Vl.cH3
+?\jr@CSmel"&2MPE@)Gf_881W$&(nfPWYD.l*fM<7?]DeSJ%N?>=r:<0af\ks%.lX
+G#JB>N`1F#/N5PS<G@WF%)^k.NZpZl`,afjbiM6E;X)fo6lJMH.rlgN-,m0[#afT$
+MO`U2^*k@,\qsaT';6-"?^)3I.&O^(-W1XH]cng:\1kFj'i@o%GH3s:X1):8c\O0c
+$\/?V1t^G6:)/o\P->S64i+J`#X@)BC43iLmr**Ph`rt`1lJ*LiR%9]DL?RG)pXhl
+=91!>.EB-XqI=rd[aiVl^_0oTNo+chCd/$;*0$>,Z!4t)*:!.cAcjt8R$D(*nDdb:
+qkIHQ#<2V#)t]1kph]9eI(V@K?XM+:.EBF(m!Uqi)o;'2VtT+tXUj$3eVuJS$0$<D
+eW-41UKfjY*(:ao`hXoCR'NB2@,ZOi<r9Tli$u1tR,.Vprak!:Heab1Lu>$FG&H(*
+l*8-c:lc&!4GP\J5iVXhg!\1-E2nDhm2;5e&lemrVl-D<j#lGKP:0t#U8]2[k=7rP
+i32=oqB^]SH[%mpb(nl*[UWO5:.(>1`jn?3XEWfW]>_h]HtY"MP_bgkBJV#Z8(77S
+-\mlIZ2)+U*5KoiVYc9U'uFHo09'Ira/?Q7qZ=4+/Xr!EkPBS1=hq`:QQ-0l"dAr5
+=tkR@e?E33reDAVDA<BWf+7O;AYNoi$^@P(Z&*3/PA"[8VV55plL(W#*@_TUedKDX
+*[)rSd,!@Hm].i3[[i*bE>0?8pXh.^MBn/`A,Lu!a^Y`hcZj-TY3HX<5nA]l/q%c%
+C$@G+h>[6E^P.2P7-n9N:af]*dT(lFPaeIA*)013;Q=8DG.G23[#,=)Wc_U1Wa"#b
+YXsm>>hYl'@T*scl_'&NUJB\P%6"u2K/RUE]U\Q"<Hi;+-\6Q)3;e;]*c1,7;u<k7
+T\N;@4O(6@,K3$%@^/t^"&@%BF^4U33AJ79!/m=o;><IA#Gb+eX_:(3Zsidi=50`;
+q!U8b[c8naI\*>BF7`WpM(fITFl%%hpHj-683i@_+Qs`H&0nG66/ZaSl98H4O4>[F
+Bb,^&B9aiX[k?G3EXcHLh<9Qd[EU.G9_-BR(T&%ZpU]mggq*cSaiK36EB<(A^%6GU
+><P8"<K8`'dmP>T;'F(7I&5="RE%WKNdfCqPL6;Bs3%U*P7k%3LM7sEFb">Rr@]S\
+G2B&&hWhEfH(O6FDWiNrl;71,!MSP3@:ohpLDe>Mf'_/Qn-Gu(2a\Z`22ZU#38t-/
+0Zf#Tom>\i4Iia2A(t1i((]$g*hOY4pf8j@:bo\d:ICg@dm=FrQ@lG7+$&cJi`2]<
+C<N47`/@uX43bbjK4C*C#E$ub#Lh<`Ab7V?@A7T4QongL-%nhBFL4Vq1!mB#L%PdL
+L7G>sjb"Bik$e;on&p7qC1uP$0)OSQ4pg&C=&u[e4LnW[g'7tEeTiQuCL&s-43o9u
+;u]08$-/V;R]>c$QU@$1%/t0V5ita,<i&UQHil7rc#nZ/3LX?gOJ_P^='Id6%*-FX
+oWn.,91-l5)dV?-pH?0mLN;QekXK.k1VQl"_&si.X8`D)s$(rb~>
+endstream
+endobj
+103 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T6 22 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+105 0 obj
+<<
+/Length 1396
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WR4a`?-*&A@ZcGU$dXctq@9;@]\%Em#c=&Nh098AU#\(''(e;YISH#.'s-Mo8.I
+LpOb^If6jUq.m?`LtEWLUZ2\AR&go"h=^gDr!ss+#4(JaL"<0P_]OBeor7'Q8*OcX
+eQqq3S=@*j:RtE`D;KA7S`P(Cf+l:KFV$m,K13P3$eNr&8aM,5'Cm6U^-,f&Zn(E6
+lnB'(/),;qlL)VPTn0]dW:b5fl=IBO(B<N;.IbkcQ+Z<,:Oj(cSoe6o3ncdLfD&+3
+<GVVkO#r5)[)SI=lYaIDenJ%)UK/43OXZpH$7Fii##1!AZ,[;-P*ZJpp%=o`:rb2V
+@aG7Ups^SPBBLRdXYc2\"65tj$!/*n1e-F%Gl'ji+sWobYp6)Ej+(gHcUF8J6lQZ^
+LbQ.ZmIkNqq+U'^eoejX\k80hGD%`=Sp7lH2YY!t0G#5]`HR**423o"BUS^UA;E=a
+G`W[o$T,KB>B:"bLd0(8l4]KELTVe[p?UV6=j+uH=2KJg(,@_C<KMNo@s&r0bc$e/
+m!G>o:DW:ihR:P*pWE)TgAuD7'/W8p#)V>'IZ\*V0NBlXg_#o!=HE=6<#>@Gd<=nH
+A6S4:KqUW%@qbH$dT"X>C6d_R/EJ1EYaN-lT2tFPbM9()6%)CB9Gf[tUQQ;rI#h"0
+cUL_ha.K7R<!)B6RMZ^P[sJU+O;BJaUd7`F?FCe30Z=KCn1B-**T^"GnNt>m(^Q7:
+ZO>/[$b-4tT:FgORHbB_B\BkGVY0aZ(7Y>!>mWWq0?u8Xo`YcefdUiXZb/LN49V><
+Ra@US("GqmNdq-'9U6c#LK;:?kY"WVL=a2<J[lps;*TRe*0#&]=K&%iN&kP@G@"$<
+)ln!dll&ua#2L'Sps74KS^]@6]!6#u(6@`S3(7D&a+9JGl;e"c@(I0-5#F3!A+tU4
+RH$?qM!0AGcJt`^-g<Rl\6_[C0\5@0e6oWi[Br=a+,7doK.>lm1QRsKpO;_FZ(8,n
+0mZfh6NT/a)h8p\.Y<YP?e6Qc^a=I?C5mQigTY,Ws&XKlKsF.HCY/4lJRWeMVd.16
+a5o'Qpd+Li];Eg8?E\T8/g69`aQ"Wu.F]X)L4"ME.M]T,h+!G2hg)UW`ht3R^2*Ul
+k[M7jUI,#KB:c/$<'(VGel7Q?,pP[?AmD]JWe4RCYQh'0bVliHL&%;oWjPZ)I+BQE
+h<J:<g@Nb^AS,WKrtP9/I[OWYB8sO-%kp5paW_gQq1HRcoqffG91IVG3>EIq`Y#R`
+dWA'H&HOTWoSG9/?Y0[>.-[RB`)ZJI0[I[!-H@Xg;C6nJlu?%O1PAZ<`iLVPe"TD'
+#_e$).YDW"3]M5.1;B4@&<<(-'K;D%M*")[pO;]Wo%,u]7o=s)'W!Qd,S130O&eIM
+!+E7<OT~>
+endstream
+endobj
+106 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+108 0 obj
+<<
+/Length 5072
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wj<9lJh.&\ZMoi,KH!FFR;?+NP^abo0\,LWp1I@C6>+Q=VX)P#imK#_M-HkIkUg
+aVg5l.+Z5``F?1MFk*Nohd('T?0':S(EYT5\#qO^44dh"pVh9sPhrq<@^e)JmH37%
+T5Aeaa7"rPc1_/!j7CsCD]A!dhR`KRk-(9A^M%t<Om9+&p'(Jr_tM:QAmZVj+15[)
+GPg@hq;=[\V*=]dHb"S$o'gVmE-lcrXYFF7[6OQ]il=bAG'Nh?Y9np;9Jc'S5$pHY
+4l>acO1t#Sq<8L'E0KUWrVl@]2tA_OC]"%.-aI/_?U*sBIi1.9XuUo.K9a<[jhZ8H
+6,^tiR\sU,_VFPKbO`HO-OoaE0"C^=!93$o""7Cm_nXqNHD_TBB^!_NcaJ$TF>JYX
+K-"'cXr\X%mV+]e)R6X"0e00W5!P(SlE8V7jKs4tFp@[qYl1fNE5Zf>EqQk)nV;R;
+g\6SY3J_;Ep$(o?k4\')o-Z^9-hD,eXSD]j%sOCGqFZ1o)[Q0.lq_q@lN07frUfWl
+O,@$.j3I\<gtpKAr';\.RC3ajT6e)ZqCkAU;I51Knr/(kH(;YHmt5lI31S_Y@+l\"
+LZXLZN#iZ/@IS@e<Q4un]A"u72t[O%2Y=91kl0&+?A:jlE+*,Je"%"fmB:]*n&IT*
+YHOcZO8^f$jK2\DCK,esfGJ1[^VA[YmRR3MXY[X^WVbCPe,?EGj]BoZ^n\MZo/h2o
+,ZC*8BCI84cg)TZGJ+)#"CtPj*=]_!mpV=77b:?E\JLL;F84YREIEg]O?U4c8*E;m
+=N<VAF'=@U+\DIKTk1-f<,rB,SgDqm_bGQ?1G*oD0?NK+-C#mDT/SuO^'!-h@-[uB
+THJQ$Hl"[,CrR@_OW8[cD.QuO4l%<?m5mB0r<e!S(e*\1[YQ+El&.-a(tU-B/I=TQ
+QIoF1]#g]Il@:`72UhMKj%JWbQn5ro:aDT>VjR$k/U14dNC1la/]$*pNdFkn"!.Z^
+'^U]Ml"pa<c,qX@W5i$:*;bQK+>3@##j'X-KHS[`5Z"Pus,Q"/W9o]9c.kh,V"DL0
+*n91AlF\ehRIEIC5[s$4a$MnK/D,SX@GGP,=.`<m`T?`/Qe_HP(1#M\n@W;EMDTIS
+>m80:!f.XlTM9b.dE5:L3?W=or(OM_5/AUs?XcKa"XFL4+#aV7'7?<QR34!gnMmsb
+$Xq$tq%Gub=Aa[N9:F!uem)&;V-;NUQ[Dg6E<&BIZcAWe%'_/\_S\fDCWq?;!"j5u
+35JqLa.QL(R%^&P,a="dLG5tE&#$cK3qEMfA#Z4-&p!8`Bb(<5_'HB1#C6:;M1c#R
+SQo=fM>BZ(8@$E&X#YdU$b7TF]2-\6o@%`u@]rTnPBp<cb5qZ0]6-D<'jX$HBX+L0
+,k:*WN0]e8FbOYP2'?l=)?`*IJEr>+fHKRMdi)@sZbCEmfr68D42q;O*(hLlol1UF
+HpDfK73AL1r5*(U6jqrR3YNPN/:2\L.3K*BFg_gscaZ%^dU/Ma2t_oUECLJ]+@s)`
+h/,;pGI',<%N1o@mW"4-+&/2DGI'uEgYs'\RkD/+mXe*nDYaM+Ma">+GJFT`]EQ3m
+hQ1IR"$`5>8Z$[*lnf,[-UA]4A0@%601/O/kjm)GL5BUQ0#&TNB]2flrIP*'f%o7O
+9/,ZqdBhrnL.bY@=b?if__0'lYg0qUTm9IrB3bN<.1-BA6)=WX8kD)a:7bB$08:Hu
+P#_mSiSd*$+c&`=>UpD;=O3]+Ta2EFed$$l#VWD=+^nj,(;XV&dYrTd:B3\UNG4O6
+BN>SM[kE&lbW$"n_kPHq?5*YZ?Q"_[2n2VV16>-[[<JmPm?CHWP+4OtMW+dsR!<r,
+<-060p,Q.q<.:V_,.L0/#]1n!S9YAcU?!3bUI,b]oZs?EN0G@0*pl5YeVBkSXn[G>
+.,](,Pa?f)TmlB)377alrSWl9Z\bfNqU/Om?5[M)Bes/dh;g9Z38jC!YI4XIOc!CU
+*kleEoF=Y0)qR'AWr?MO:+_'0ftm_Q:aacEoO/Xkq]Kml\o:bRE`n#++u"(^#R_%A
+Dc'UJ5p\=1F<)+5i!2(Y?jc=f4MSsh-7N,kKdD[_@eI/*,[X_dIDh2/Bk/dG-\in^
+4qVqTb+e08XE_E=[d:@u>1L;_)kmWsW#@F(*nopQ+0_b?'2`OhaleqXA\ZQ'P[n\\
+=rfPBSC'NWU?KPHBRcg+d!hPj96.A!DeOH'#1B+].T^7pqCl$7c_7;m0O!Tr+5e;b
+*0"CSjV>ocbG=@YU*KrcBC%pjfV-"eWBjq>.F@T$LkHO%']r494Aak%?#X?.]"VM)
+_h2".NL"qaM,^a1?-6qH'S*LQZR4CW=Wo'#>m@3gSC@^JY)L65Opj3K6IHc.U",Ng
+G,hg`Ti=VB:gB#+5HFkkISncl*c,Le<H*M*RFW,T_s&+qQCV2IAUb-knDJ.VQj[%P
+YP>=5Zhen],VOSs+N+tU3=)@3#<suW3?bF'85<<#(0bG(J]M%e9hZ'!KRidPjH0G>
+N)\]c'@fl"Q,m*,#(/M7X4!B6^0)eCDK/?L:EO3"ZB%mH?!poZH%kPHZfBf=IPs:a
+XM[c51KX_-VbEA3Y9bj.2;WKIb4Gs!.G7]/c3>?t'VQ_LB3TLMNQY\=XGR/k*Drla
+^#eaF$:9l2)RLD_)dakH?Kj<)80D3(EPN0:?mtAs!N3&t!N0)Sp`a13?H.,<T[PAQ
+[S2lVMdm`Gki-=^?>ukG%Xm&1E9oppJ)=q]"'+EHL$1.f;iAb\<W7*Hq+(2KXW^5s
+1<@[L`W+C9@up\1?V?[%V&&2qWZ4jCGn$T2H45Mk5nHBs)+rGE;&ZKj_f;H@8p+C"
+V0Z\*W?l7_*Qo#b^f/r\V7PReAOQ2Qe`mO7[:HZj7!i%:V[ZB(`.`K=2I2%IO[NW3
+'!eTOj?iKh!9os\eIU*[9Zi=Z&WN06J4+[`340=8!2@?P"LjKpl)kdF:5_p<KdN+J
+A_&Oe&-I0H%Y\9NAu"rOCZ%CME2Qi+n.g`\SMa^p!Q&.>7S-IT#QkYV^?L4)aIMHX
+V5gXBO&r1e_)u?XM>W)WK*Md@1<N%/+`J"RRF)KMD;ZjV!0@4K1^>pfoO_VDRT!Fb
+'dEq)AUH+pg.l9.&XfbP7b/B9/3C7-B(li=qD+EIdo/Mo8"CY:>k$Q72HM))p/u1e
+!k`g75W^06:)AT%_H<f?oE3]71?rB>('GFdqH,kQ[^PF1iLM^lWZ2e].j+AYO.0Pj
+[^7_?W]i>N&ghf..kXgCM[-i80D`>UNtF2gjXl`\k[T&cKJFfK1/'(CC4dfU0[a=f
+*.r>7IhXQrot,f!73P)e$;nduTnT5b+bZSUN-qOB"5KbgH>iD4&$EC!$`E%C9:&Y(
+%&QY2.Pu+^l1IJjCs`C\$1H;9gG'`6]aW>LQc\YY&JGKXm*hb9>>N[bnu0EbYXcoJ
+e%2F/,jh%3dUY]^PHkjX&1)o3&(PgX_s$3rn9@CQ$*"itp4hh+aZ9`/qsMs>8c7qC
+<Rtm4U%8NY'.JoP09-qlG`imfcuPk07,uY"e&23HnuCqkj+sE'r=qNM#<B-^YrgE=
+J=m'LTI8WK*1W!.$V79aOq6f\n)Fg@7LKKbI1g6(adIQ&+#/TbG-bna*/)>h7,nD`
+%2V]C@oUg.eudON=*Pd75DS6Ca*TMh90Q;c[,Qe[*+d+\]a"99TY[B:eSPZHc1hX=
+\;qK%.\jfK%V^fk"V$0!*^o--F@%g;`-eI(Lb"d-0j(;!Qa752c'pktm]jjnq)Y/3
+rhpsH:[_TFAL!k1IG;)gVfG-RK'VL&/Hg,DN293=!NF/ZpDT\T@je*+"Z?jY^>)\u
+>JcU@\T,)Hm9D3X5:Upn%jH(RAM=QiJ=9FJNiFO4%$km"Z;:qNRm!k@EUiFP,R$,,
+plJp2]:12f._N#>oP<^WSn9JkMp#b%WR=KOnqsJ5"r*eM7"H0qbDdr=lA]8(p>@VQ
+eUu!r`\Nq$JN:_3omdgGk@cSPVAPhW>"Ft=iVXa`@>E!p7q*p7pfX67h80b;Bc65;
+Qg2j]]3$U_9k&;19G;M0)r4bk_M(msZZ5Oc\*_D#=Z(?5e(2>V9PuSN5rEloO@aSF
+oYN^o#aUfCP>DW^Z8l%Ei\Kf7$;,&lOiCCJ\pXJ<U>rp&&R7nm&*%hUb_%-oGbtM`
+Ro'ROi>t90L:m\;nlQpKdSqPSJa<*X=b$YelXgYS[i!:rRZXU8*Iqin$W*[2cig@b
+l.)Qpr%GqsDanOk(4*U.DfuNB$?($Bi:8FXPZU]JHi?\@U.7A(MLd0;;#olibW&"&
+`^+mN"hH[!;EUo5@P!.GW3>6nLkeB>+Bo8?QU.qh$dFhtXR:'GD^e[17BdX;5M^]S
+P=%!jlA.e,WO+o5:4p.*&(=?B9NnADd[?n2,dJ/bBVZ'UK?5^"'e0g4iiH%7RFQ>>
+(bAmfRK[?G*nL(q>,mElA:(rQp/7^mhN\R]$0*Vuctbu._XbNATS7#:U<BjYc7Bm4
+e:Yg^_dGtS/-^_InMh_p)M;URSQ]^`lsY$tX0>5/X,[j&P&A;\L-GHKm`,A$Q883E
+U[CH*8\R/AP[N<Oj:6C8;,je**=!RZ)\CNV;QpHnm16j1-NqWKKMW&u]6RN9j#ZTt
+g;r@Bi]BU42RBBQTa\2s5=;.qE"`\)#_j)60Yqdb41/HqM$K;MN"1&lg28\$3Ef@E
+`F-6oSQKQklsY$tlaR&-"0l`>(Z#0S#GCtLZ/9FsW.t131Js\FbZ28H_/*.(R-gmY
+Q$$!'LASW.O?"F<Cf3e>C*?`cLXePjo&6oHiGYU22CR5XLSsqXlg5'TNpYW!rpj/c
+Bfj1+C(tmdIJA3iqsO@9@Jd88%Y+6CEVf(]bL<'cdAqj`S::;;Z]D=-al:e;Y[(#Y
+D^'[9IP!d-M`CLlnGM`jp$goh[kp!Q>nd\6>=\kam_A-b-bA4A=P!QI^IZku_-6]n
+]@1csj5j_0$\`hR5"`2cmDo0Kg&Ki"7]0>$cI_7>mO77)p'3<tGrrh,+TGU$Ni2j%
+h1*bKh>SL=rqWb496f+="(*,8SOS2iA5K$]`c``PhTP'Urr=5hgR\~>
+endstream
+endobj
+109 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/F1 19 0 R
+/T4 20 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+112 0 obj
+<<
+/Length 4063
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W"$bDtW(&\Rj>oZ_-DeO*C-$(oe\I]Q<L<^*p>W"r#=4VXkAWR_@-O*=T9A[54^
+?tKTFMQCH$Ajk]e2G[[<`H1mgff^X"WHq=ph_dN]mU&l,-0fbsHqL"):LF,#>Pc")
+h",.T[/0T+:9tsJ2ZJ-H<W8:08a<0jIX,,YDuO<OA8emQ'41Z#o\8dr[6m1SY?s16
+DRqIcjB7bU+8!;Dl".!Q9$-AR\%eR&b?@pFf?Ti\4BhS@lsB\'q57Gl_DNh"]!K!d
+2HL'rEW9=9<`cP;=[f6:?aZ*PVY9?$#N"H&=aKCW$SMrP9PqQ5GX,p<rRpO_mQA"W
+e3>g6g5bP*ITZ,_9\7Zs1S*aqG+PE9L8Rt^`LGo3KB\lND>j_>XPG3(q)$V%^gERS
+G2N7H[Edun")fr`)+*8ZB=SMV\Q&[<Wf5uj)?6ujj"LOtR0`P+7``b0*b`.`0XgT3
+#iX'd,bAK#N?CYhGgR%1NPr"tKsq:C2OAToE4@HO-"od&_h9kb).EhDdL5B&(recB
+&rDL4F[P++.a?ugq,$&Z-SrWe<)U_g?%cV_9Q%VrAXRNl.!Y^s.0h)TGl+*Yc*e/r
+N+cN17%6P*i?:".>h9FhZ`[cE0,)&NDpcr%A:t(d/Jnn$/hIr^QXMRN/[=q4.fmg@
+KS8r0Ci'Gc*MW`k=1Q7#W<Bqk&Y*4ka_aAm%b'4EU;9q$%]9obYNW'[D.?r3pkl5]
+_`PK_e4ZK;Zc.c@enPB<G/1_cELI!o]s"T:V3jWP^,US9Je,>9V=NK6qlPp^l.R!V
+S0g["M/]:ggYqAEb^=LC-tGN/R@]2i67bjso#=[!49<HD'9PXc/D'i%^e*/*Fl,>c
+Sh8MCK101B:'gJ"e@uc8l1RuN+8jgGbN(<[!#uJDi"W76hV^Z:"&(]NEbKI&c:bFR
++.`Rr/gY=p@jmH-/'j<e6JK,N*hdW<oH#CXBP>l7(RVX@==Hu8ALZ?4Z_.#tjAX]k
+4q;sNo.eLbJRH2))t."$=sZQ=R)`uJWJ(MGP`/_e7*)FhJ?5ufETbR5\+ZTiM;h0Z
+">&&!)V6]`T8Mp&83[].NKpPTXarV#67hreE5WE$<1$K'3hh=V.+0B!l^(^0(\DCc
+e=nlu\L;[!RqVHkSPE't6keh1WF4[+2_Ta>F/AqaM>3WJ]1V>j&#@K1Ug[$2\.gA>
+8d@F%>*TZ.T=S`%P0pX_'P5OVq;8T;B7A_'-X<>ri`@c0G<TfOFoh]fGlC*NdRoHe
+;NE'?W'Z&N"mPs3#?2H*HZ=Xsa=SbWp7jWCYK6G>I94Bn:q`USPjaVV4Da@q_YMhc
++l>\:$OH,Z2uo)NdO^ZTAeW+a(,8'/q\/*;e%aiK;MhIt'a%-D=Mu^N)Eu<DF=u(L
+/8cVQGX73crgRuHNp'?]QtO&s+m(DEP=<F_;Eh2Fhii)n9q=MKU*:)fd<rWI5`f+0
+P+^6EOW60MhqEp#A?GIW1RJM[)6"!K5UiZ>Qc%_j1M5=2k`mXCmNAf:W6mG[b9Mi0
+E:+W:N#P[A]HqNDYs!;PUk'XS=WL#43M/?giZ"aK7g9r6fYn*!T*"uf7>e/X[<1LO
+^m.)M;!:"!"U.YP;n1/@#p?7b@<,RqGdFg'*#VVrLB+A+8p79:H6[j%nEn'\Uq*E?
+cs/8$A?m>/CUs[R`eO_pV,#'6h4.!%odKg(H:U1HOCsW#aY]$VY[Fd,f5Z8Okq2ZR
+N#D@=ItMW;8c[^Jjda<PGj<WWlFMps_$"W#1OSN(7X`)3n%HN3&nin\H2V.uCd>@:
+]ct9%nKal-CI.X\3:o_!$^QXbO&KJ&E39fRCT*=*$jbN..#q<nDb$j/8gGk^6!2`l
+3\?V1EDYh?_I1?QV8Zo,\<*/MBct00hFcLRA?%Di)t;0t((<cAUfp=Z4!;E6D*#3S
+'X>mdJ6-c>`",UbaJsfmi!Rtb"Zto%$8JJEqb<bSq76$bjipJlCe4;r(5Q70S*0k/
+(@[XVSY;RkgZS\EE\2NhGUcs+*5)qGL5[Xmi9$-U74-K0o(`?(-;m9u#ccgW(Ytn2
+0d[/njfHTS?6feJRb^&$1%(pW;P@c$SIroGVX$'COCXnsJI/Boep(JQ%*=00r!o:V
+nX1!#d@03T]Df=D%-HE#OE.eHj%SVLF8@k;o/Eo@6)Tnt)1g*Wjf5nXlsRl)g%m<6
+eHqD"j<l3[TaT/Xl+o85WJd9XLqCcCkcfJ4BdrUt3T&8>/i"D1?,h&2RRq^?q'ckY
+Puf/=='DSE$%+Z.@.rAKQ*BWRHOBc4bJlR7kKV;[&*.(Y]:/oQa*DjIi?\tH-VFq@
+e,G0DH-=FtD!f>9U*IElYaqP)/AOAp9\-Xj-8mjq>^T8c.4cb";Ac`BNLcJ^5n'h%
+nO!)oA]#3##"mmh`NiH9>N:2K&o7g5QL1&8$A:IdlG]SiVbS;')U@&Ur4PkSUU?)K
+U`Ll(Ok+<0IMrVS7lDq4iM`+<((Wb_b1fbr35sLe$Qa$gg`7?U'f\mqBbmACEadD9
+=-TtKo>JgJ-p)A?^6el_BgDc@!QUbcY/(mO7'J;VgrV;@)FL3?;A2nX,Y)[lYhRCn
+)j;baJu1)c2PH#3NnR^pHA_IIrWRp:1r78r\,P.<)dL57IKffaD&4anhiq7jfpP-^
+DB:F?j9q2U)RlftWK@TTVO(g.B=mnD.h[N<Ks;f0cXTC5WWh!*SGD!P^p]r!eVa`@
+HG&TVRmKA\%$IK0lqubHUB`EdZ[]cP5,3-rep9gP?rp@(na]GK*$.Ula=<&8rG/Ll
+FWu>Cpnd`!5J'5+L$=ACl,E"CG"7Wq\4V.!ae"G!@t6WodtNp%$t?G'#MYdrEdPON
+JrVT8"@]Y`CL7_#f/Rp-=i9[nE\RFMY![=@#qNuc[C"c:n+d6IMaNu#0;=KQ6#u9[
+HO);\OPhGVgI'e6Qh,Ce=HP]Qf:Fr(Eg(k]o'Qta,mrElN+beRVnln?gl;QlO=>AF
+SJY1;+qbju'<7'j(U]'uU2R9FbILH`@]C$XgX$CeWl7`")dR6V2C'QV\a$&0R(DZD
+11>?BaWb@h,n@DoF^NsUN'O,E*Q+C0d;e'RG\c^d$0Z@_>P+h5J*1hfM-RSJNJQR1
+qf1K]"6`l?S9PE<eABsj!;S]WV#UTS91`GZanP7(q1op!F'B8Hh'WUD'g]SDrF5S4
+]kKr8M_qUsqSB:fh]KB%4l,H$Sl+Rdm(-/l/C@aL;pj8Wr'HnNg4rcj2WZWHK@Bs?
+Ubi)q$;>,"$7,s)`[Ie>cso3S)')<FNT&YMPQYuD^_N8ddGG6F7#B/0k.3839=d1i
+EkM'lGu@2mrV^P"NbF8gB]'Mc36/jZ<fgu]>YM*]9'FFL]5+p&]Q.q+7^O*q(XW_Y
+/;pP<o;:O2LSh+MV6%Da;^V^_V@=R%Z_*i:&aG%1K?Y!UFEQmtmJ-OnLX-J>=.0hg
+aG/=Vi[i\e3kQN8B?,!/f5AJiF?K!hZJF4ckF+B)[TU+S1(?-VKrb8Jlp]!$;h]bW
+`\ihI2,kbfEWi=?Gu1WlBRN$g]BW19SRqj2PmM#\;_H/OG4=l.5.gd2e=_ZdlD8=!
+/79]6+.n>K&MIFp)*[e"Jmjc*s+&B.d2S+h1!F2.Lr+i*h,]=)U\2nJN`0su,*=ia
+ZmQ?;!Ep>Zq&1lDBoZkmk55*(jCRtV6n3ul[p:mP#Qc^phKokNO9jkg#Ohrc>T'%7
+&s,L9G^MUE3i*R85a]d&e%Y9n1mdia,l+!#V"b6AkX#$_jUaANN87`?_^i8qe\65U
+M7A6nfR_/AZm$#"7(TFciu"(eZ_s.Q-#X=MEQ?MK2k`4o)"\SbgGPX^d@teIUhMY<
+@1:s:M07d#-h3<-)VqV+RSr%dgc^aVb#p5T9/FS.B+n.A[F]5"PW+S=nMa=I<&LOB
+a9,2YKQrYe(p".6[`cT7;1?tMFO;i5og,KHk\Z!a)oC;G[ukfPaQ+?]&f5=tF!Hq1
+i64@g-m#1'7g`+P4d<G:%^ZJ%09B@doH2u'-a/2nf:p%M9V-dZ)U3XFePfWhAq;'7
+FkiA4f_<,#9fY6QNBfJ3gP.MV0:OWGfSrE~>
+endstream
+endobj
+113 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T6 22 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+115 0 obj
+<<
+/Length 4722
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XEL?'!aM(%&>W`?7qt@&sr3M38X4!_JT!VeA$R`^RK.k!<M+@l:^U8ogHtpEb*1
+.:/&uaV`ke[N8#QpY=)9pguRuS]WI+2-l7%M".NJs)2@rAbt;oLgkfjh2L?oLXGMH
+5-h5E:B-p28$haOmIkjh`,Rn?oqM;+rH\86O_";R*&DGBqK=]E*F2J@4(:42$N6$4
+ptMsSX89ZF\Xa(HSL4,TXd6X`,a6$,rm-$MIY9L;S=-UGV=4r?$@8)_&;E95_7;*-
+d*0N$ZG)odfYhb?5K4$PFFDj9C8(Z<nD;0PA9de[5HMG6B4@>!h#,j/'V:^ORn[$=
+I^2I^Vhr<_V`MF*8Eu=AQop]ForQj?<E"+6c/U(mnaWngX3W&c8L>*f%5:M9Dk7m)
+J&Em@qnME:j*t,NrW4J/3jJ`g/5coEY1MQ%o?F/>0=bp1rJjP7JB.P&mLi!`@tgS`
+RubQ&JiLm"b7-L82D&BQ<OmWrg-:p@ZbbP1,5%[H(I!q,]B^^)hDGKN\p&7.o>?lG
+Y2I@4Jd4eXj'AR1ML()Ma5Q9r3A#qX8-TB7e2>QgXs'8i%TDl)C7BOEC3*:o!f@N>
+/A?t^!I/q0R*?cG``LmpcIKF@X7C_A\f61g;D(ieTRXWOlh'o^YG].^K_tL)J)hlu
+aK4%SmlsM7hZ*G7=@b5ab_Vcb=d\N=hLjV.T`+5QPf'#m)a0"iYZ4`YZ7TMUm!Pq9
+Y/cmR&t^eV<mCN=X]4K;2bi9cXe/XUm9sW5)5R&JG=J0Y)ltt>mBFV0;.FGsha#F%
+QV$Su-c6"Q068ZlbifN&8_5TTas-CJm8Vcam2&4N*j#DBPA(<6?^3e4&n+YGA\YO3
+Ba^De1H#m1O"2nV_*uZ1WMK*DSJ\ir\Wf=?`Xo'(_LN^9]A)'.`6d"n#2d93V+$-h
+SW1*qisIMBSK8\J$^$*FS!eB1/qcpQHKCqC>eYumO`B"c-e_o'N]3AB]3]D;_&Ynm
+_/K89f,ND@"l[>g'0i!sD2tb+3j1j]d)SU]`ajQ;L9te`LH&g;$XW9q!)?/ECRTr3
+F:*=>aTrc.IVS#18K$#Eq"PgTg5&.O:Z'&gq_4"$Bb(Y6KS$<&E<?4K*k'mgBlI$h
+;p95\f2W9PAJq`Y?]hX%o;]7$(A8<+KTV]G%c?P.;n3.b2S02UeKQI+S#V*$aAPc7
+h<F>=&3<j)C7_9/2!/"Q`7GSgg?r"$c"M^PCGt#[bW0@!DR[S_1n^g53r"Sar($u?
+hnT+-_[VISA@q4<jnpsU,^s\1@+WUrAigDG5jB,._L2#ChTfAn\itktH^drgb7TQe
+AX8:GAfed:-1'iD])20\mft,-HMQ)M\<Ks(G8jZk65$!jl9C6@U,t[#R)>432OBKj
+eY_)&2*E9S)E*drNd&t"s)]n1_=^(Z2m`/Jr$jS98cLg.N8E?LDEhF3dHrUL5Ara`
+`VeWL5Hjp,VablKYPpA)G;oAb[Umch93UJRd[8/iA'4_7ZPV8?1OX:Zd<<q`@cl+u
+(5%\,cnEiMP/\;YbgJW%144'?>?O1he%Q2-Abh%-)nqA#hf%&Ngo^I;hKbir-84Id
+mp+]'U%`H]<mTr8O'7d?LZ"S49F[X2)EZK/HEG=+27CehT<]\IWMQS[LF,6LDr5KT
+(OLY/`@bQA2p?PMac9s:)olS\?TRLJT:alW>R]Ttp>D\1bp<t?J$:$0=TN0-QHNUB
+pk!6FF/,P_e1;b(B3F3=cL;lJ"@;\YAj.Hg-[T";Lr\[ZNG#]e>V#-:T(*2sZG%f&
+G."F\il?t7T@LDfqr]2\!^OK5cU3p=7>..S5W*3TEc7^>@,g&f.i[iqMX7S-35$1+
+;d4^@/m0&3V]cQt+Og-\9iXZQq5[;HPHujqcH7n(G"1Z+([@KYn$HO+M0:^5^AlMM
+c,osGF(=P6?(OO'0%[Q,"a>5iBP_RQX0q?%Jq\O;kBaTt2?eWR:Vf&qN]2H<.%[64
+4_#"0^p=[pU$%VgID;CULhGrs!:\ClPpG&KqS!+OQj\DKBN9!j6"WYs]J?Q'k^(68
+!`83=9'OjM&Oc&,k%LW8AuMY//_J(H[VZ3B:J&4l*F(2;]s"eM(:\8L7a&.-fLBus
+HiITdL52h3.j%_\d0kML=@U['F9W3WE"j*9?oo/RB0Jjo#"biAh:P@76dOS+%`_!$
+Es7+.#:4U0(jY"&R^/?](*6UGY?\/"c#VuTgO.DKIb3"Z.!-T*#\]]e[E9(kBlf4s
+C=o@6(EpBOY+?TC9/E*rSfMn++,P>Lfq8]Mb%Mfb1LJ>&lN%F2gN@8A>Q4g0cEn`G
+E!;dSo,sEQ2XbIG$_ADi[O(HdR[<?JKuKH*mC4VH92,1l?Ij8J6WM$UBiO]Op`9JL
+Y17%Z&..G&U6+*:B4/77)E2njSW3)D#\m]2n0*TUL*4\`lUgO_P$/Wb1=ZiLaU^-,
+?!38k!@u'0k$[+;YV\uYX,q5_0t+B9fPM=5>:\R79No/NC!:IpDH$7MYY3O0l>V3?
+ms@@3.ne6*\aCBC]XKfpJ`F&<NRCQRj^W,OcJuGg(\mj-2'=1l\83\)B*rH9(TB<>
+YEe`JO,uP,QQ(RI..<rS$Sf1`WU?(JoCh=C'EMf_>9&2&Q1:<`7)n-p;4?*nq7UJ2
+6drIJeKiTWTqR*32`>hR\Dnm,KbT?un"fVO751>tkO7a0,DL)<"@eE1$n)=PN'%W'
+V7S_YKValGG;s%\>D7X8Wa,Gbm?WHJ:KUjI6W'_u9hHc=@eXANdTUem"1n^a_F=!f
+m6giB!1+#[O9;>=+]>/-a+Pr=Z<'!k.2qK&)V@=&pSOefB2_.kk"hQ3p+,-Tp@CY/
+C3EoeBa_rKJa8^Wfd"5qRZ0Ya]5A[i\X1)t<fcMb07[E2Db^[JOmsi`kMA#C6j#aR
+CJ=9rEr&j.*pG,XqR9\A5lUm8eA#Y43j*r77.Gr&p?_G?,s49f)gFR6(\R6bKm6Yu
+%KL,$O'Bq+eK6M=PiM\#BUi'i7-*2R#8A3@cO=045g,!@b>GJDf.e%>Tl?Z6oY?+%
+91*\SraJT!N</t$d!c3j)(uON/.!tbp++c?"7Lk-els:haANOd!?B@rSI1;=5a.=)
+K=KtkJ\sj;%P$Y+W`KS$N#3Rad[Gq&!Z)\+]iHBaa!SXgE>18bOmQ`Ge/BR>HE'VM
+[U>+ZCoM6k%$Kc].Y-efIt6<d8cq-mY;(B#^FYFA#3I_fNWqDjOZ?cC5bikUZ<lF)
+T0S\&_@kd4[T[u:-Hm*G&9ZMH44m0Y=OP):Z+L@KHDFN]?i2#jU)Is38G[mi[>[&G
+SWd1(5tHAhrl)6CX?mn94h>m"QsRLOSfoGH8*k&$P$+#r?=Nblpk$.hkSJO/rWTrF
+6$ZWp#Ls,a)?:eU-#egEF90G'8qZ/fDETG>=,#g/ann:p9!7X=%S>)fK!bY:qf?\$
+Lh1S9<%/d21`a-CC@mT=EO:s;@Mp'$'oj!bqf&Pbs!np_5EpF3?4:sq)Mt'3rYg_Q
+DT1[>:0%cGp(Tu_eD>#Qb[/L%Kt6MM=lWFg/%cTXSoRu?RnLUZ`+Pe)Q"3arP\%l@
+8?]I#>><-^;L`UJ+JFn]*"sWlIAA)%&-ERhi=2e1Uf^S*+uJEiombPnV71:Y#61$]
+EnCH:G5U!0fP.f8MIAbG?7g@*S@GniY5S*Y8<K3C3CSmsqQNYW'_smC7?[m#MPg<H
+/LEN1I@(,N8+8W3@nBAn]3&n3*s\59>-3ZC8ulnK6[t9*E?!6%Q3hCl'O5q07W6"3
+UC2[6I=.03.K'=6*9FME\]>!=a`1rkc;cGtLB_[=5?kIMD`k!i?+?V68<kc"LnPJ<
+f@B)lc<M-TOt1%E=K43]%D^k]]'LC`"]AFV`McFDe%hlB?.JV9Xo"ng<Q5ou/+Dup
+6_h#n]b`\CcG4C^e;Dno:-Hrmi(kD;XmDMJTU@W+*+(d45+^aH-=u]7r?&Yf:?d``
+g#t$h&.:\WF"1fK>Pd.gK7#sf=GK9k-T]`gq%t";m#Jk;PPfcn9&"T.UKne0`mhBj
+O3QoGC-)0N9KEPaH[*.Ro!q4RJ?qhaqhX,A$(X2Z88JM`!1D4/)@[\=c`imkHtij8
+q%kqf*!2j"NY&2"GV.f7MF&1BNNF<Omq3[c57T6*=(i(.iNil`*J,(4fkJZg>gcgf
+W=g`fH><`s.GLhAqBb1BSG0:VJN:%X2tbrS&7JjhP3HEL.N*j8P8T1RA^T#409NFV
+n+WQ7fE*X?==d,^o?CBR<k2TW@7)>"`*uT3e/T5gWu)Urr?,T@N+ik:?_:CFQ:'Y+
+29(d2.rRQ94]WCOK[=sRK.ithSAg@Q&;Y7s;q)Nb`qZGp2-BX)V)U>&8P_AY;=JL]
+3\%6QVuBiJ"+4>3`#Ir1lO'TXjBTh/(nt4`8^QW'W5VsO#6;C'Yu#On^5'1]:a,"Q
+>b+(li*,J?%m.2c=,V<#"jGIX86e]%:Zg9+6D$,YO-=Cer7ADR;?oHe,X+.*^)2Tl
+El5.*\C`S:X)ML/-nDaoP,[tJ0O,U'I9#)70$KXB.Dj'M85o$<$jp'c4VEZ<i<HQ3
+a1$3QnrD%eq(]F"[.igEZB\k^,f"dM*PFH/@s4*#!ma.h(:&'`"rjI^CV80^7IYD:
+B\r#rR_d<g#*<Q50?kf@@Xipbh:l*Cgp6):^n(>5(LOCLAgBW/\O58oj08WW=aLVm
+INP2aJO@C$8uF5H,+W-b'<Z]^#6:/^"JG~>
+endstream
+endobj
+116 0 obj
+<<
+/ProcSet [/PDF /Text /ImageB ]
+/Font <<
+/T3 117 0 R
+/T4 20 0 R
+/T6 22 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+119 0 obj
+<<
+/Length 2548
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X]T=`<%a&:W670FG1[;q'T]='Z&%d%X'.TF]G>Op>0bA0s(rP*?u^a)CEQZeV6G
+<_ei(#fJl<^A6pHf?;.P1-VBZbO'nO;g(Lghba>Fj?Jfu'6^[o?'(9+io6<6oOQRr
+hok\%'th,i3t2?:,UfZeq<@PMo%-<(jTRuL'XIXN&\L:l?%,o&,dlOEjjid\mg?H@
+'69\d5A"[G]QMZRjZ>fJ3q(5&dS_`aM*VtVSu!ecaip#/eS3+(]$oILn8hem\+q)Z
+=t,_$Q)`G,:iET=VLIq6UtrTd$2[o$TkR+^,?M_!)'&Tg%`F43[s3;I"@VZoh/$7k
+PW)?-HXgTE[$U':.imJA+(ApcLE<"3%o(^l%34/,js&)%PjV3gagh;np[WEkLMAR)
+;8u?ZjlTrrY;)4XN+hlC-,+",G&<Z:S/AWP?/FXJYu,k"$F;;`HWWfWeJ^imU\Y%%
+"0GEgTWm\'[</*I@k$?NcC7k(^f]k(OU@"=YKP:V83h`JBPW^9KW,>%W0G+JUHl`[
+,51KlRegu)<]dERONbI?hl4CGW-AFT?LRK<<Po-+jTpa`P]&,A4EeAAISaQ<Jj6H.
+Hu46a5kRWq?D&8f](X?:=1*$V%bU/m;n0'r8s9c:dui4m?Oj#?\@/(_&c*CX_P03&
+q&2Q5AuRr>LkZfc%tD0+1cmGdI9EqZ![BX/`\RXb5F?STbbu"SFkt,TfBPUF>_)!3
+\2FB*r"uQ:[`b^H4+LnIfqO`(kjJ&>bcgaE!lB6B93IZW@5]@OPq*!ceNM78),h4$
+I#h"H8CF8Tp@^8(H/jL)QJViOHOSR,1<XKar<'JBjnj6m:P'5Nh'oWRNY'>N6GcDm
+Ya9h[;m3?cXct!0"r>7n`.*M#UR@U6J+H0(D_e4&XpgT7'70$9bCKnHob/f]?6T<D
+4`g$Q-D!RCa0lV02?/+)r(mi`k6AKh`DNXc[>X'?q[1&c7LmC5q&cf4E_mD(n\74d
+CK9N79jsKF5C'4LAqUIl4$2UA$TX/DJTGihDWqoQ^n[+MC$MbWB@YEX;D)V[^-d)W
+@!>FrAPVlkN-g0om0sW7aT2,Dac/c[3FWO=)RRJV+nEo4>KI$<;sh"pj'USM6R#4N
+Ya1YiQ2/a(SGtjqZn!Ni6LW6g]Ef0[M_pVDEk6tJ53`Fl$l"pq%WJs-W_U;F$4UtM
+i],8V,EXG-3><8:BH+7P+!"C_09Qj`i$L5FJ[HkJ_LL`nFTTO<="L##%k2Zj,icCj
+J3no\;!Q4GP1S.bc_0GJgf'%<,beU0aL$1=e##7pM,)'3.NZnbRqc2WX]<%6M55h^
+a\kMQdH;hfmq_fjl<P*b7hm(JAr6(`F<"/uE&:I`O"<JI3fgqZ1Nc:'[N&rB;)Zk-
+5b<?KFN&***XYZFTH'_Zd#M%V6i6=<Sn/=3W.B=E;(7tb;&OZ)9Jp-<022W02Uk#6
+%^;`)q'8Bb4Ve@N*/1Y*W#2[hEXT'CRG$diaU%ng'?-V]3$ZIldJJ7LYug;H!XWBG
+(!K7SIVe"_%Va'61f%_4BM'=`9%b6GK6<+f0&k2cAYu6^r#$=Q=OWY15/.H5FYe`6
+7HBj]M$&V:r"A&fbX`RA5uZa)U6s9RPK5NPAX5M__Z_MYcf&eO?uSgR\((C[pVgTO
+U'Na=(s=%T1Lo3_;rf%:]M!+4S?#],\sD`V3iM7;d8nU.h4_Zk"fLn_9GAL[jnN&$
+^9?0N@7G*hUp8U&V=bCE3jl9BRPBZ<W)Q>=,ukk7/8`+1bo@5aZ;kZXN"!8n9&[FK
++X$=c[i,7Q!4\I",hL#7.\K)&\YQJV`_6]Hi<D)PF?mqHEN$KYA&&-ZC]+R,DXo,]
+GG^#a36(LFPgrOT_OL\mjc,:#f`tq6afF5@hs".4>(EY];k)Jo4f5J?-_[P%j&:KT
+(3^BZV^7!Y8gn3`ol;/e+Ls"G&oPdiP+G_okV4hDp[GfD3b,,dX5NNn_7>4dq0ii_
+>j:j3,XZKp%[PrO),1JTo;2L98q22j"j(aH8Hrn(LpMstOo]p/IC-"Qe8i.u'2JJh
+575ESo4;NAF46!g67WeZf";NK[W?ONbVs[nh.Yrq.95e4Oio-[UcHY4`m5k/g,I'@
+n`1jeDe=Wa*;XjDZP7H=%8X0<FkKd#$L6,OBZMpmmJ>>Gc8-kAq>MK==D'^.Yh7W.
+8VgYcb2&%`E<WKQ230d_nOuu$Cn;q:-)r*],u@"ZVpJ&1)>12og*Qo]VN]Aap99nF
+HY:bdp#TpeKkIF"b6[ZY=.>/*Y_J5eM88qG`2s)s%GNb9AWXfX_X*2_A]gTBoU&UQ
+'T1]rGdE*[PjZqg8ZtU/8F^:feCtQug-P"5''"pqWnhCS4^rV0[rWuteaUakioUQ`
+4ClF!%n9V3*^tpDbMI^0SP5^@'I"htd9qNregFk_#UId0[#s;_b>']e%\6FbG@/o+
+F"Ep3+mmW:`<71U^"P^9(![#7k8O1\DbW;a$"@IOha5GfX25QBStWYN)9Mh*XLG&Q
+dReQ`-3kg=\R!q,=[01sS>hL?Q]$=u!(.o7_u~>
+endstream
+endobj
+120 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T2 121 0 R
+/T4 20 0 R
+/T5 21 0 R
+/T6 22 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+123 0 obj
+<<
+/Length 1945
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WR495ilL%)1&kaJFRq=O106j[Y4l[-.VZFm$3fKAt;&\FA.%-#Y\,Is`P>U8<^Q
+7?J^tCl/qKmj"g(O1Y/,qLLaKcb&1%kX/d-Eq`P&hkE7Jo\k&L'b?YeqqjW$LPmq6
+a3O[0hIU'fa1lgE1OG.slonuim`"3/pGo@5U<%4]s4?ee>tIlN`I)FeVoO52m!gNi
+gP9?&aj1,>7sTCsp.tN7kN?0F6F../KMqb[]ZJQh+M=NUo9oeL3p8_bIS^7s7%4NI
+B><,0Etk5.TN-FU\#2O+F7Sd\,m:)])S],h*Y4gt]^#?$QYfie_CdR=KT\^W[S=!%
+QEHGBUk6;Z**a02fut>7c!Ea(2XXNS;CDuXrHTf"OgFaXWR9GeDM->C6*Q7U6OX";
+Bj$$5!KCLV-Od+O0'.pF)d)NkZT#_>`7VGtn>XI+7q[Tu)?[eBR,qJrEpP%k`Ip3+
+Z^II98WZ`O$"/oG?Bs(RD_F`c"*).f>c5DLU3,p$>e'q:k:G16>ft5\fc:FfbTcst
+WKoiFc$i@2Y_KnJZYCqAQ7("LamUUn5c4GK@Q3DM0"F]Vce2iP&0qfL.WLXQ(X?Ya
+"=XXb$[3\r-o]Bu3TK*=T&^]s[3A$@'eq7+pX9ttc6eN"YM*sbmo*;MDW</H5,kS"
+q#@/%l6Ntll3DUc\XrB&^K^f#Ul+0u0F]bAp2\kV4u(4;E_"=KerN-j1c-(0DaYML
+*Yb)bH1$eA"PF>"Zrq!%j;2_J!L0`Tn7t!:2q?rJo<.nHc6g:iRH#_@p-Y:<g`4S/
+cW!)T$s1t_*XD^tK01ScbZb-hEIQKeppL\/>"=kA89ThXi,eU;TAUi1\JI3T(IE]/
+k0f<*D*a9A3\jH7gY5DiP'b7c7$U_?F9'qmI!C3\.t`+4FHJs83*O=NOQ>&*%,]:F
+T]-8OO&oCbCFl_B1q5i^HK\CE6;i8th#dD-:J\=sQA$+8?9e2\R\lZUA31T!\sdIh
+R^ds#(M1J,O1f$0j?R'R8%RsY,j*mk5uNt`$0p(+`l`'[0+S$VR!prI>p>=Ai;]K9
+9m9P\%4C&7B57N-U]G:6qi*Z9<gal>>tUS3m1MG:M.'M5GJgI=6@Wg6)b(0<[kYRf
+>u%UMU"?;/7?n;3#rM(u'5-;3iuKQWF<ao*9UI0_*f8T6Vqt)ib]\GC?PQXO#0bL6
+:`!go4=rqdPA2W<Y6o,[4I.0TCntcn!^c9K9!#/!(?:(EWLjVmDGp47YVkB:Ad8Zs
+Q.XB(Tq1rY2&M.9&-tKa_#f"W.:*`=>Tkle+Qm61GWb_40X<!iA@X^UBUOAX/)ks6
+6"mY0Gjm*IRV(qA?e(jgD1us].1jfJqqX`d#iFLT!7THf!-=38PJu0k^iVX1Y&o[K
+$IH<!fdTS^%#_tg^dFTWnaPk,c!sR3l#C'@=Ei)tk\SVa&De8Xk^^C!nnm=(]j8N%
+.e%=TVGK:D#^Rp\&$;R$]Y5RR4hdY!`9hZad+&Rd^?ulq^FkgrTcte$2I]\)\7+Wt
+Zt=,X0cOqt8g`[saD,cZfI#W63k(B&ac]kf@AJ"Tk2D$Bdk":62^?GSTRbE<k_q%D
+Rom1gfI7Un)Z7YJ$$K\X^lgmKG%"aq[3Z)C0)_I7hQ`0IE.E"Kj%$UU,q[Q@k/E`7
+nP.CgCId-TPC0XGZGQA`kS?Oh!M)>"g5@<lp\.7#YmcR(#kh#P:fuK[.mlkYZ`/@V
+Y3cmp,$#1_]I`&olWu)%SGeGA@;.Ip.(d!KZ3//8+B:ApGQP:5$)e_/lj"[BDI?Ss
+df3\3K9j$r._#WP#,V/X6I?)<N)gm/PPSnVY.3$<3.V-?^+;5#&^+""1RHDp43&oF
+19XD\6rnm;ZDeG*G,heqT`s:lf(7b1MDa5i5FKCYJpB0\'m<cB!+T5:@sDG-oG8=l
+(4PshXR^5L$8H/-rd*Au3rk;VE+&~>
+endstream
+endobj
+124 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+126 0 obj
+<<
+/Length 1104
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z,'ac>(?&A@rk/EME(Yk6pTA.I9,.EWf3Hijif2TVZ07^`Vb.0#lFmI%617+!D[
+Ak"$/Y'OCHl;bCn-FTeVDaQVC=C;2m%I!8JIgYB]LaE,Tn]h40es_'_!pshn5K@PT
+m_%EFLLV,#i1tX]SVG>_UZFl.!!&f;nN4p>3uQ$K((A&O7"=:WkH`a+AB/jU:G%%<
+W]J>4'jD\Glif;%^;PP<&S#1:^*u%?Ei&erQ?2&$d-mP\NEq\'fS@gC!-<e5Jg>.K
+@26Vq)'nHYnsF=[o3a;CnOV:jKSY?NE@Ydej]ThQ$B^qG_GO(Q#))!?(MjsCT_<0^
+l-9\n,ELNePgb4hSZlUi-cJrE@!Eun-N(g'o6O/j?WtaDjBkJ)HsPu[cd,Zld>Wa@
+#i<NO:s@ic`lBi?o6aF!RfIa_F2/1A@XV,+)7drrVh*pBCT6g>9Rn;BF)^9%0Y2iG
+B$6TsNoVr0KH#@]o*[WWL#!FX$C1J31ho>Y3`qHD#?YM0W@:'IVPpN%5%_npX[ufb
+bf9Cp7TH0B,IYg2UB24*i9.^<E.N.c_J;,8.Y0qDNs';hV&RhS#ZOBT-Ee(he`C4F
++3IP>0%3oeA?gG'AP(0Z)Y`'?k)q#$4cqQia:Gmu8d:$%J$JTg=gdZhCid\LF]RQm
+?=lgA/=1t$Tm;?'k.YfUa;"8]0pGBX(V]LY6SE85-&0C9V`cGul29i'r%?C]8./,$
+18P/u"gM0b,cVLFAHu;_IFTbe&h7F]5@t@EjRc4[\%5<Sq('BtS,j(,>o/uG4^_*@
+,4biCLSGoimuaELiD\).!Nk/%d-&8H%=Vk!]%&V>]f:&%^<Fip=SS*/a@q&D-7:h(
+T%)]8j21,tlZ8MeE?8h5@=-@h*i)7b<:a*b4/>#PrZpa*1S,t.U[`dpBcMFKC"Yer
+8FAClX;'%TqnC/BRO$#"fmg!Y>MXHJCHQm=DIJ3einP)`>E<[LN6iF)4dL:TQF(&Z
+Se)*%aq@0,pB6KASu^&*;*\0\<eI'UWPLd<X2F3eA:4=1N/qm3hAORT"g6[S9)=j<
+QLl1f?.gjd2PtI:?<A>injS/dqjRg>G+$nXf_RT.l5gdC~>
+endstream
+endobj
+127 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T6 22 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+129 0 obj
+<<
+/Length 1143
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X]TgMY_1&:O:S=NU`A$"P^'MWUaMeISV9J-TSMe.L?SR&!a4IXAb0n(=,1=p7?,
+4M*Crk007T;s)nHJWKbGkFjm_53i,Zi[O:Z.%MUBB*StCGM^TrDqMfdFjF4,s#k\W
+Mp(J$Hc2;qdkhO4m'AY,2YlC1rk[L=KZk#p\D*4^\`L7Vi3'%7mES_ZQ?C1(";E<N
+C0GQDYITW<OhF+Zn*=S..JBX'Dj71Z^US-8.1N*gA',V1PZ0\'`?mj4<tG*u`!AnC
+Vdr+mb;+!<d7WjeZFuS<OjaFS5b9g>ZX0_7QOAp$5p>4_M0H^g/c4I#)lA^,-Z09$
+lJ1_T`$?flTF_YK+qna!(\qC3)VSgP<F4CZrJNh^)i)0tcQ$W.E*"tc]M"OG$[b2I
+kniR5jOrp#+,)0/CK$c7$ct:h=Cl@9LaB_;^PFXN!N<9APd;hpB*7eG&=+r:]P6r/
+bAo2E&k,C,Q,K\T?s%g(5N9;NJ7Nj(&s$;J-`N(u?PWOfb"]3.G(paUiZ!H(d2Bu%
+i*bjSG^pN<gTiE33sS/7I1^H7`%dJdZY@B"'nP5@+1tme:':QL,YT=`:!k5Of%_dl
+BM9IQK;F5)%nJqD0di8DV9])%?4pA84(a7g4-@Z!598Q(r%'+EhLS5Niu[NX<Kc,8
+1'P`,T\@,QYZG=A]GRAXA^[gVgf0<,"3e;G*!+DuN_jNA68YAI3*SdHht&)i0>j^N
+'M2cd=!Rfo'%=]P>$rY'-<PDdIEA'J:Tm^Y)$=lW*uLMWY8\_;fp1r<-B"FI()0/E
+#5[sb[!&Cjm8tp"F]l-JG3]^AQ+`Y"<6uLQUT/=`c[D/crhk&"\*!4X,*KcA:_SWO
+=j,Yb'tQZ![Gc?UU`jk;DRkrW-Y""9X_KJ"rH%:4#>cAdd3&Vjr1ujM37Nj="/XD*
+i=HK@CofC&X>8]@?rSJ5,3OpCnJ)CFk`F5$$D"BSOT\^_p55\NF[2%RN?T@;1O)X)
+L*5bl2(>X?drBNe3t#9p]boWe?[$!>T:!9);P9@^8$Z`n(BPY,>B&CB3Za[>0u$4l
+rtS#WZX)mQFJuecT^H[BD-L)%P8=\O>BsrJYFOapK'ZhjlCrNe`UYAlN>'FADICQT
+gl$pBktC1;*<=+Z1<]~>
+endstream
+endobj
+130 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+132 0 obj
+<<
+/Length 913
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YPlgQ%aW&:N^lOSV4?D%^3cC6b-c<Bm.hQ$jc_Z>9h8i+sT;h/=sd2Ah`N8OJso
+;+0d@RH'\kA*9&ZXaF'&\t<YD$'>__pS)qRl4<BM!9sJX"8Z&&IJjBCD,igt&c4V(
+ZO_-W7J!T,!!(RXrQj26Qc=#7fJpn5d]6_a@WS3LaMifh/m_,gL6-2/To_Xa7E(,^
+?9i1-3eW:i>0Y9IlS@9[;i^"!35mA:Qt1kjhq1AGh^W5.^r(O>_WF-miIB?h)+eLH
+*#hs+#%I9%4^`<O,FTAM_dF781^rLk9Rh*_^iPq0AggC+(c7@ia!$bfk,!WPA-h&C
+gt5S/jG,;HhA2F+D2a74cpO3cEjo@6cF,.<JR,4c?MAK+P@NY#K;utb`f4YoN%>dh
+pI4bjAhDN]NLUC=_-E)-SAq9286gniEGC'#rQpT4P[LZUEdNXC&\:\3+f49+R:$ea
+q.n'.RRdp<2g.V`N3f4_=X9fcN)NRlO&,.\Cc"\uY@[hi]siQ*Q#]Z;]nnF`(t6/l
+1/m<]b",Y&e*%$D@%U4f]CV=EL\-*K+dGMpP3P'_P:JUB6LKV-$Fs0BK?oJ.Z)q'F
+>sl.G@LuXLTHW!V%f:_4'ri7;%J'?qX(oZpa9J<O%'J(iiqjf6&E4ulSVe,"P=c/]
+2_+YomAh]][=+G[9jR3nl:W<?+1k8>KP:]W6R#XR)XF0"#5G#_T$OO4]#S-Irj7eS
+&,!8KeOdHGlD3Rs'o<dk]3kDtLkq^Vg1jK8C;jH_<#`OR])SJ('`Lo@;I&rt`*8_;
+kt]kH;R@#mX?"VD2kR>^mk_(C"rUkD14K*Ec"V=Q$tJ+n;78nNB-Y+;L$#$R-;a8-
+!LJ:G#1ku&,!W+-_DQ8n48aT"%;h,[>`W)D)f.=*0>@.,!;YYr^A~>
+endstream
+endobj
+133 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+135 0 obj
+<<
+/Length 891
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XEKgMWKG&:N^lGf,PNZ59[$nkum\#F)\W%g:H9.0]q@3,-olHhZr6)_4K[>I*bD
+bh4dnAk%.t]UL,9TjMUu&45F[p0ENQ4:6/jV]ZKNnr'%Dr2k27oc*P4'72>]Dp`Be
+`KLNO'^"c"!fPC]@_MQCC[/JWO8[7JaW7*,"9:\/6K&ah[uo&9f\LTF$Kg-"\X,/(
+@sMJ@gk[cMU)WT;DN7Yk/9&:eBR,PJ"G7DSW[6ad1t<+&-;@aXWpH>#8Us5HW+.=[
+"UYkYFOr_jDF$7/+2=Lf3]cXMh2AZ?cqhe+b@4%a?.(K=[e3N3JJjCTM2BUHk,"kq
+'X9'tS/ThrpVF#98T8!?p2f^=GMJ9-S:kJq9Oegm4r=J97Y\bZ<GEejX;FHN*S-.a
+e1&c'`om<ZN/S((;='&;(?^5BWJ#&qhs#TO\KMnf(<NQLB&?Uql+9l>\Uni1(ajJ&
+9@a]n^ta?HPa)0.:K$*&+`TFSdd>di?FNO7ITkR6OaC"o6%Id@XU$<W\2Y<)0PpTG
+),+gSe>+C4?JJHZ>M8%7On'8h%&tBr3P2gHB`*UNZEUG1*?A&q]-V.fWb_if(>J(L
+P+=U%83CG2Ghu?L-pf`&07dZ*c?Q@=R?Pj[A&A<%WjS\$qc+cEL,eX@LHYiL4EL6W
+re"sj3/qHt>Xu%p7"^:2R*fncW2buEPT6-<9.77rkU?97?7QK@!n#W9Cq'"H9\.)q
+a?jDb]<:t/_D/J$B(k5+gkdH%OD`ZDY@bm\Ds&Cfgobe/Z^pf<E+lho56NbuUiWec
+*(Eh'CHj0qY\'J&p[$DNq_'SNRS7hi?`i>6-_LL!fkc6N#[NXRFB;QMkh/DUm+rGU
+HrGSV:_SjCK#aVGPe2>m]Y=OKX^`B9~>
+endstream
+endobj
+136 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+138 0 obj
+<<
+/Length 1333
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Xu\9lK&M&A@sB(ap/?)I"@6M3?fbV;7lt"fe'ZK5/L4"0E8.EZLq-s'CjU8fV&1
+[bINJ&1$=an]dOnqWD\gPjpc)B87Ap.@V"H^!_DLnqX#)@Irj/N6I?hVr)s$o4'0J
+cM"T`00Xa(SnC@)V+:5n[eNg&q5MZi@Mm.i."@e#Mi1c62"h5!e6$?u/Ra)X^W]S+
+o(mU2nm4/\g5R>arOHd*D>luk4Co\#]V7-A^ke+<RoN0h-lWq(a6g_ob(F&dL]6:M
++4b1NV7%fV(V)&2dHfi6P+4#2$YqtC=Jm7jEZ2L>7Gd3h3cPPrqY%;b:MncNU`dTA
+Z6,p&kf^+ml-k=e0qKJ*EtB`I@M(4_#LLR+NkDpg^"M4%9dT(Sj1`k*5P#B[&7U-I
+9mH^`LnN$aWU=]#pWm]en)#dKBI\^e]*NSR$i.ehoaD.E/NJEGL59Et76AriNTam^
+31/pR/5tc`<UZ_fE`5tYHUJf!,\2moL6@?3Cr/%RW\W$J`oB<M%.#D>ZRCiFTD*c7
+[Q.+fMF1a:R!K_?/F&riHY/l<!,eRqp8rO^=t&P_+D)M>\"YD``Pd^0!8P5O[:h7b
+j:o@bQdWLGe'ilm.RS:?SKD:2-*^bP:n$g`\:"pC<VHH)PR/[n^_jgJnng"!3l8/#
+S,I<+pI`P8k`m>a.$SM#-bh65N429s7Y2k^=J&!dI@/BO^NA%kE8(O#h#`;ck7unf
+\NXJZ@<a^1gT"52QZtpC1ac.P]0-QYY%g;L#"]-<.nQ__]Uc"Lnoa/Xh6r?!VSs3"
+6(1UZ;,9m#Q9bLmlipk>l,[N\%n]<1NR&G6Rg`;iPAS5JndTf?aVXQa!^araFV>\2
+YMsDj%AjI6<3<IAg2^j&lVge8-bsqJosU]?S3$].^GM\QrE!80B1TO%KlrqMU4\FK
+0'h=+%[57Ikj^e^7E'G!L$Pr`I(p/eD.B)oUMu&1.9k8&(\;W8c1j4qEq66H1FR,g
+kU/b"qiFn^V`5Uag\;GkLd7MU]Y2<5&9_SC&=,e*L_3K6YT^UbEL[XC1X4^\hGGiQ
+mH[C_q<NZ+p=ko!pE`8P>9Tf:2*T!go)WL85UM5K6n$07`PB/!)]2G^!$k2/HVk.L
+97S)`%tG_Y",Jr;&M.=>1p<*`l\ZNPYKDCW3,uc2TF[gAP2V-hnL.n3^RC>BGRp$m
+kl8JG!'^WTh3DjWh+n'2[^j%iDDRq2,3+=Uc6K!oF/oA0<aBm_q5f`K_1\=PBou-Y
+^jI/$+$fR%RGK6q2D[(%)!RE6)]k_/SA"*goP\MPTpcQh=UZAr.1=Ak2DBmq&nUQJ
+2Z%h$jFMfG~>
+endstream
+endobj
+139 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T6 22 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+141 0 obj
+<<
+/Length 1353
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z,'gMZ%0&:N/3pe=A/#t`t3c-)hM5@F.rqn\EVXh9OuYagVUCqmZXaItRMPm"^A
+;(N+Y$842Vk&uJ$1ZpY(-?PF<*O;>S6Fu'es.TNs`6fhWl%6-2p>D%SBBT!_:NZ0<
+mCop^na`R&\#5_^i:qcJ?-Ib?]X?qR`A:k28[KUn:q>Q1p`^/pq0uV?MRIt]ka-o]
+?DM;(LqW6&F*E1RUuBDfY>&/l(,+[U:Z0_am[Vlfl^K3XRBqu$68,0oItYnM?FDhU
+8eH9\K#k_M%`4V_3^\TN8j^s?n[V;GQKLKTWXt0tFVX61fCjrse>i1DCj/l^(K.=%
+jL'1mQGmaViu%T@aM8[ChdL0-XuJ/66(Du=K^?`_W$^/m(0ouL<:%D[qrS&$]Ctf4
+rNpES(AIJ3>Np$`.0;^M83&"$%c#9m#6e.)]cn<A*K'j=IHf43q5JLDAl,,6!,C#>
+E%+a@/PSD&m+UHP'qBsZVG!DRG_XD$b`S,.#Uqh0DrI0l)rG`G?Pm:#)b@"`p=803
+IOY05nK+9<!=$+3a#ZGM9oZ2lmFBIaR,P3tRk"!B>LY1c04>_-6J_h@V5hYHQ)-0-
+fed+0].-&`a-%8@.6PC4-'9<7A(3lu'C.h`Yg?i$0r!\CW>Fi.L=lA>@Fo"HA$9T,
+K,.0,BL*L_Z_0*:1(sL78>lIodcl+@D@A:(\Tq+27i,ek7S&iF5U:hm/<s;Up@u&>
+^Ban#E5U6_:sgN.!Wl:5WAGYeC#9oT>V;l/\o3:jJZb/,ha5GMK4Eij#:k'P/bYNt
+o'\3#<f$lhM)Q.q5<)qLHPcuQq]\#]h?%`bEL(HCj_!$j6"fLQ#Rk1t!Hpm8KIf3Y
+jusCO,W316QNt?_,DIMYC65`u1X.aI2Xn2W!YI4N,a9e7=<aR6md@\B?RJsn:`D`[
+-")N[K^=Ml)!pk!9*I3#R$fKQ)DMAj6^&LX4p>R-4TgGS^i97rU<L;%B(J'P3uPaL
+)0a*`c6-NtqZ#4g3/%4P_r0(E&5>F6_Lc^R!p]ED#)"=r<uG%55U=/eq[ilLa#C[U
+4tEgsid57R,AQ3flZT(&=bm9AI>Z`XUK+:;(hs!?+XTZAB^gf%U@5ThP[(4YN7FJR
+SfPU#X0k?$@eEKQLJ*K0mt4#r"lg;XbJ/M-WgOi-,NI&@7SWtR(p&&,Oq=UAj'?&K
+3%s4k(W8d`][)t_NuN/eN)<<:KZs#L(h_)DkMiakBV#RQB=O?OAsPUhRAL<"kgu=J
+R),]Tql4>Q57>R@p5oSn,=!iti!oh<dIAG&W,s^Weo1D^f;JlsWZG7.Voo"n/=ptV
+]]Wi;$"#ES$2HGCjemRNS::_C[`+(>~>
+endstream
+endobj
+142 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+145 0 obj
+<<
+/Length 913
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y8cbAQ&g&A7<Z"S<faL_Z)!;)!#>>4_osS*YbOd=tn11*e3,>I<9o4tTZEMVOY*
+W$QY2B">PGkJDQs@NYHcecR'`5%+C`Z%=\9Zdd;d*WkC=7h>AVn+#.VkjM!L/o#<%
+#&h=`Z1h(JR9T38S'TsNM;.T#RMKC+a]RsiiMg`W)SW?K/l$AQZTiRZ\-O(A6Y2>j
+M&YH[g-"m'-&aV`"!QZ^6l[k4\j,h>J;d?C6#'G.[9;Ch,RVUI",K8DJ->X!2Lpib
+._\,=2Z/(PpbJ!u8N2>WH=YZ/2%d+"9UW@C>ts(f)b!"#+ceQJ(\ceG5dn&ac^f$6
+J=Qp$ZGs0\Xqsf$X7[LB7T!]:qIQXj1q+[b0f%(W(OnD6fK\gN:5ic>X&m>0;b$s.
+SDDJhF.0r;lDCo0mRV_HV8rS#r(j0h(4(@n:6EY1EY??XT\+pf-NJ`$bVHtPq$4Io
+99(\]iMCu2o-=+lR<0%kk_4RE6ZlFBD)jk&9i,l\5ApTu]'3"cXS(B%T'u36**F13
+NYtN4ccYSoqRS]nI%6Sp#KcCK77\u6gq6@JC2d*^#ojcGaRh=1o%TAWaDdBl4-RiS
+B<u2]THe$&<YBQR$\`Y&pf=+Y_%t2l/P6/]b!qdYRm7Gb&;5o-H@JS<j):1!-2YbO
+!K$u,]<8`sC31/_,>n,!.SA!'ZQir'UhHdZ-%'[e:hb)8R`ZkJQP0ZF,JpV=i%tY$
+G`8k4PsIXA]=(Y!#^-oN0%1GLF<AIXN3W?W!>\$/'g`7K)aQ\d]F@@tASN\e7JWi1
+[Q@[TqE_fAG(H:?N_LQD-VGIjbW@ruUo)->R:ao%qoD19mV&MQN-+8:`mqZ2COk`Z
+#*@S8%GAmh+sor"c6hpgOia4P0F)p2iA@1L,8P@ZCZ544!*LT`DZ~>
+endstream
+endobj
+146 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T4 20 0 R
+/T7 13 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+148 0 obj
+<<
+/Length 2422
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Xu\bAu@I'&Dk(]UGRq/=CbP2*9JgS;A7f.cM]]B,7]S9=Q4/)Nouujn\ZPctEuP
+F6i73Bg\#BI\&aZ\>gpC2)umop!Y1W&UKc.hpah)oIQojN7,%Y5=s0ZPKTFA3SX3&
+\R&!n/+pDNmA:PPm<SZ&#pCU_V.iQoq>-YEH(H97k0%=AJH"d]_`=2d<L"HLjPg&m
+1AetFniVQb&'=M2HqGn@S:&d]/2^5lci9q.:)Kr36Oua9HJ,!rB\)tRc>34721,s0
+h_m9kLSQ@&*Q\PofhQb^L[fpMY?C;#L=2UHM.UfC)i8m4`(KFHTOb5P$N$^n53uIN
+T2?84l&7a""e$2R!#h91-ZpOre4TGm+O<u1oX>#;RCP^@QI.KTQr*rG,]q[jDN&:I
+roUc;k9oXY2+Elbqh$\d\TB4$2*b7^A2a8=.@hr`PZ;-7m?88[$SQ/l='6)6db8`=
+iN\@W/'t*Emo?^!):("^47bBu*A6N'"<s.C;=Z>]=N#l8YbLOr-,hC2r5+2V([(q"
+b03>N1Is@fb9B41c0bJ]MOiaG0f/$eVX2Ea7Sb6jD3Ar2J)S/t[`>([^Scao^&Pa8
+=V0>`hm_FG2.*X$V=qgolnb<2imsM)$r^c-D"\TA>m<%<p3T>6&+;OD)WV5dA8I9C
+U]*;HF;$oSA_3KWZ5G"h+aH!=^sB$EX$NnjN3Q="GdDhUcQZIH=s72gMoE&0/u$L.
+()@?as!0XER6k%H^TirtWYhCO8iY6(.8*aKqlaQKQcrFJjG[Qq^VG?=gj`[""$Ol;
+/f([YCDarRp(W,+(!rIB=\pMN9-[SK45@E2^-+$GH.X-<,1"-oY_CBOW/!VM8&sN#
+4Z.GeJl=W.fU&t$aQLnfWnpt[I1$Nh0t\eX$Ot0b6smY!-5&b7fUa;*TS1+[s,E1Q
+q_UDCb6kW9m\Tgdk_-r\,Z]P$6(TeOdaC].qM;O-U3IH'+2E#X>BWUs/$Mp)k@G'(
+qK&MWjnFFin)qHKPS^MKc-N:Q3^>WXLW4`Mh&EVs*<A8PRG7o<(n,c(3MZOEPA]`?
+Z?2YQ-ne7-J.h(!jkCZ!B.+t5b]QmGU6"QZIe`+qQ:&8?"9p2&ccLJ?m.I/qZ]R^_
+C<%D<RDgWo[Ls\VU/?^+:(0`*(rnpgHFT*JOh)"@%Yad)L:pVP<3M?"mGu2oUE/!;
+QHgA33:"kih&hZ0ZNe=m=G-8EJ6>]pkM*.V>(qQD,trs$dHf1`!;2M=IN.Sj:=^>^
+b]eL@3V21q%>mk^('0e1S@pcEiXVUp26h$G[>N!JNKI`X.RX.(mg7Mu/bgii$pJrc
+Ria]!K=9<Q_&NXmdbr4<m-Xc9A5!b#q4rqrW>=L8UOEXW,(rU<8t%:nZlJ.8.i[+I
+=;^ikEdAS(V.BIS&Po/o55V`sgcPuS!RIDDcO(GbbIVe``:cjTm9jXjjS1(Y@l`h^
+[S':bD%l98`:?QP:sa9.-!\/UQ0Wfr\%Tq:6bSNB!r'kubjjJ@[Jm#BDc^tg_rj,O
+kYI,1e\'I[*PpefBg1,=oA,bB<:RqG';*gIDBe\^f=g/o072;3lRUAmNA:scr1LZ%
+q.%diV.UfNc)&i]0=Y0S.`@/"e^r,$b+c2":1!X?FMKHI"C'"'1T2)+XrKL-Q;`E)
+et^o+>CTVi?6%<J$Ph-$YkR?%I\[e'.`>7*7&;P&_[0uF15esLNk&hGpj^W$s#0#r
+::L_"K.ujg1?-mK*0#n&6&e)M=\H:hh8TFtTN-KukjF+XNu+1;5ND^XO2:SqPO(1G
+hSXMdEZN4gPe+g@0em%=Q+lZ\^KHp$*[U]SI"D2bU"alkK2QrYCLu_`0<;nhf(Y*F
+>T[5+^Ycec>JER&I8[,Km9f]UmX'?U>I0c(i#fZ2VJ,WlYJa&kQT:!VP#Ze_NAL%n
+VtLD@a*8X7VEq-bB<C,]Dshq3:DHYc4+V<QQI4Q10>B*ZID%XU)?Y7dK$7T*/qDi(
+>(uRD%-L2:/r'u1qWd@jp?oA3>(pMkC+Z.dZ57qm"Dm-f\<\C!\@RIdCBZd8@e`P(
+KB`]>TZj/8`9Drl3.@T5;/9!fK)#N:UA4XG[!Uc#QtOeq9/*dpF8jXbHQ5j9`[GDr
+DW-LKMR@\.].)f(/T[P.2+5p7_EAsKH8BSCb:$#n"bePM=a73X:1_E!qOfQFHfE<3
+AG:p5&\%i2nAGsn`Kc43nf!2T2>&6X1P60C^H;Q,,(%D6Oi-GS`8]%s.NM++D#'M%
+F7NL6(QRmgEDu]^^ho*Ygei/HQg\?jSM]YBB0Q<*OY=`oX\5V[N8GRs3hd;dcL0Vd
+8psArPaN5"AFB]$U"/mm-iA$;G"U)oAgA1@qf=Ra8p2o]FdJkH,Y9'53+HL[H!H^G
+@")?V=VXe3Yah'm!aJp=)^Ac"ioe6.=k&Xb#6:RGd+A~>
+endstream
+endobj
+149 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/T1 150 0 R
+/T5 21 0 R
+/T7 13 0 R
+/T8 14 0 R
+>>
+/ExtGState <<
+/GS1 7 0 R
+>>
+>>
+endobj
+151 0 obj
+<<
+/Type /Halftone
+/HalftoneType 1
+/HalftoneName (Default)
+/Frequency 60
+/Angle 45
+/SpotFunction /Round
+>>
+endobj
+7 0 obj
+<<
+/Type /ExtGState
+/SA false
+/OP false
+/HT /Default
+>>
+endobj
+152 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+150 0 obj
+<<
+/Name /T1
+/Type /Font
+/Subtype /Type3
+/Resources 152 0 R
+/FontBBox [4 -42 151 144]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 66
+/LastChar 121
+/Encoding 153 0 R
+/CharProcs 154 0 R
+/Widths [165 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 113 
+129 0 0 0 0 116 129 65 0 0 65 0 0 116 129 0 
+95 0 0 0 0 0 0 123 ]
+>>
+endobj
+153 0 obj
+<<
+/Type /Encoding
+/Differences [66/B 97/a 
+/b 103/g /h /i 108/l 111/o /p 114/r 121/y ]
+>>
+endobj
+154 0 obj
+<<
+/B 155 0 R
+/a 156 0 R
+/b 157 0 R
+/g 158 0 R
+/h 159 0 R
+/i 160 0 R
+/l 161 0 R
+/o 162 0 R
+/p 163 0 R
+/r 164 0 R
+/y 165 0 R
+>>
+endobj
+155 0 obj
+<<
+/Length 537
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YjI]l&HV&-m/E$qO]L"T/<QERRn?OO@/Z6`"tk"10(1Zta5uZoe\V^rV%F+kV@X
+^ST;<,tLGT0?>-r43RJ8Xd3_Nh0Q2g^:[8q>/!XX\a!k=LX!A1B?T`+q+Y`_R65W'
+P0%#0VbFN0f1O43]2tUH?`u5s;.=R6rABiDLkn=u&<VT5+9@9`kpJ6GMlh*i5=fRf
+*lSg[KN(P_j!^05NRHIGNREFN_5/8/Q!t#4,!2EM<(`bc<%=LkN_)ABs"$&o-SGFa
+NB*EIotiT*FiW4OqC/*&]Tl%lle.7eWGThB:1;sh_kA(e'612oV/gq)6!Tm#UpRfl
+Lq=(^&1!n<N.#@h+UF"QV3(*jm+Z<s:BNU6OSSnA;o;Zs2S:pl.M^H&%2IDY*STI?
+m.rD-M&<G7<!o6c1F/d%RjZ%uV=_mho]:;MQm9+%F/0aE8#1k8BtTVGhOF*h?rB=F
+n":$qkS1k0'th<Hi?ROr^cGQdmdB*KE0:Mm6BKiDrdedDSucrbO^YO[%N0P]a[c.i
+!!g!S_#~>
+endstream
+endobj
+156 0 obj
+<<
+/Length 519
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y9LYti1j&;Dj\&BRRiKDG`o0i1l@.M\&dJ-6Mr!/sI!@#c<\O-3$&fYNHMn'6b/
+'ihKr_5ArHn'8[t=fDd3bEY1i;Q4`J^6Hr9]F.^mrT@@eQZ@5Gr2QB\?H'>beYDbp
+U:U#5U>"I28L:D!:4@Y>]nkfS3^3Ub2\$8sAV;(W&ZJ-$0Hi\I0G%g[2LlRb!,Ou*
+g=V0o@Z<!.)q/JZ0oa2]1tSWP4&/EJoHEfsL1m6?G>s[G;SduB;#-_3T?,8+3u7#g
+53rs0fo(N0;M8aS#@e[f-,eh.aelL#WC\Y:Uf3/R+R2ikqm<V[6'k%*;"Vj6iEDX#
+m2n2Y%HG-!\jU<JPY%'so\MIjoYR#j1Ng'(3K[`?'D6G#9GC3JLuPt*'?hm%-,JJP
+J@,0WVt`scPOs67UnEC?;dHsqeP*a:%Xo(AFJ[0fRDCd4c6c$h@2#d/$D]Se<`gb%
+&c$0-Nacqd5CU'-3/rS5F)3't#UR$gF^-0](-codM46ssM!k?E&o9!P~>
+endstream
+endobj
+157 0 obj
+<<
+/Length 487
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]`0i#V?'ECs")2]u@*$N#rUi%\_9L/h-1*FEO!J$:5"ESUj*$n+rR)+[Uhqq1g
+US]%m+OLU3T:LAaao@B+>`$!nM[Lup@P6_V.:+>#i)22$*?/$gI4:j3:+u'`;t0-V
+5VLIOZ'/gi`u?1I<]l2AcgNf!g^:0+PN_C21$4V'5=&TTAiE;(ie`l#=mcmM-h7PR
+`mTE$VW)E"LL^K+_q_M+6fK;`VmSGccWQ3`*Eeum+>q,9G[%.iCX.ZZ=[s-&Fp:*`
+<c/1X<GoA_`](gQ&DBtp,9e_I1!RMdO9Qbi(>bH*qFl*sT'ukq*rCAE-Q*pu4X)s3
+bC@Ol4hAPgi8.uMkU2N31"jh9oF>W0FUSU)W3W'#6^Gf1rT<`g>]hFJYPi7kSC11H
+&$l7*/K9F5G1^-34XX8A`6D:JI(7IM=g>$uGI(7-ra(rO+E!U)'#NK4J'IWQ3jacX
+9(jR[iO2j;=7@U:1B?CoN_'~>
+endstream
+endobj
+158 0 obj
+<<
+/Length 663
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YQT4),`i(rnL-0d$lc_WV'CXrOd0C;<C`>8WmQ#=qai84`$:UZj0fK$#Ns;=m$D
+o#?SB/tt\lVoSP[?S^c:p\LQ?gg"W)Y4_Z2rQWEUdd1CkYKa\35.ibW*rE-*jR#h4
+*ctYQ]?d]2GIR;g[#qu\Sc8TRcZa[4W'b9._SM-OHNgV[+iY(*0`\aT*R&XkF!Pa/
+@M`GV&BYT1Uu&rm3Yp&c_?.\d!>^n'LE]n+';mk=#0p]0#G=N4p*!9iCmdD?i-;0[
+O?4_G_(Os6`1_gcQCIs<MF*q_=492q'MKa:Tq[$35(f.p_gb-/c03TAWh/BQmbs\Y
+rBVrX)tHO@U!c?Mk?4ff9,L:Pfp(&aKBS>lb77@-TO"EFdP[./8b7dD3>UDgDhX&*
+&N2_)Wa2@p&rk3aFb,:%qM)S9;PHjbTt2kBLpKn,2+49bM2$brL=!-M"BLj_WZ`-r
+AS0,=qIsY]>SNWA/)\c5A.,BjA>H"TMnuJGg)rq)>[7m$=d\it\QmE?P0LkK%AaRf
+RHZ2)c6t47&Zr6-:O2ET.-9AAUQhm=<H&[%S4U8l:gOT5=Ru%bcYN2_:\cO"G;%UI
+_]pt,U!_<)Q1X'MYXM\>hD\OelJ[PVb_desZ`W)Oe=.**l6ZFKYfT[2q*k9'!70nD3r~>
+endstream
+endobj
+159 0 obj
+<<
+/Length 331
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]_9ko;G'F4+T/hE&[O"g#(XcC!78k<-aMaF_l!Ko(IBPH&[BHG,;AEcE9S`e%l
+cj1eQ#,7cOhg@*VUC?;G'>H:.8Oalj,^uGOO`'`jLAA0O-XVA3T=@G=gQ:hlmu9EV
+>HF,9d7`?\kBm5[aU9PoE`[D0!MDr5S"RoY/4Nc;S2eY(looR'7#sBU:.H<WYWCnd
+c."FW$:?M`AY-[iS$eV0`-QsiZEX,4=Y5[E+2fiLe[\jqZ/Vn7L50k9Su!=VI,ll>
+*M!4D%7SMHG=\lj@5[:3;e7T=+&laW/tm[sSV\$KOk%2P`2Tp0Ih?$$>iY8QH]LSB~>
+endstream
+endobj
+160 0 obj
+<<
+/Length 239
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X<A77R"Cb:;"[`q:KbQnW67rq5J,u$UWFr0&CB,WCF1If'\b*cS9J!aH4[=$m
+qG%(:$AMg^T"YOX7AZtgSh:BMru\KF%g!1;+S$$F1PknD^^-Yu0JJ$U#7M%65jA=O
+"%[,."+r^f@UK1OKM_]!'K[0HW[VU>5co`$!pV&0"/4"o3ZdFK_$D+Ors/FW+7)Wm
+-r>GEW#mG;T2B?6:^g`.:G0WJlH'd^"W.5T\R>+~>
+endstream
+endobj
+161 0 obj
+<<
+/Length 156
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X<A77R"Cb;&"[`r5KbQnW67u1="V:h,/bKMeF:EagE\<]B-^T:lJuJd;^'@2h
+9A_26=i$1mhpYZ#Uo6,8bL8o=s8W*0pjkg8!s=Wo@%`>PIfMh65b\19;PV_i74H1U
+#57+U>csZ'JR!^+!3ooQT)~>
+endstream
+endobj
+162 0 obj
+<<
+/Length 466
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Yi\0i#\A%#.]'W0ASu81jmZoUo*[8e7$IJ-6Mj!(I/(bjEf(PTHN.LSpFt[bKk7
+:O7VL$u*GoNh,g'XY!7U8onF#/Lj\)R9(n'Ub-b-\hM[B.5.f-Fkt6Qgc%!<G(r)H
+hn(b6miQJ,Q$Mt/^-9<hA92N%BS0+h[n-j&1NX+))BT*h(1Hj.2_2>+"ZCNq@C7DJ
+)Ks^L0lanB\=L]Ghr>2+L[-an1AU;I\.=%-M@;sm%'CL2;bBZaHX[*d6^&*Y*^8l%
+JH4&E?AQ6\)o34R4n8Ke?jo:j0Ee%D6dJj%!bQ(3(I7g9&-4'V'E3@aIIJ&Ydr=Gf
+4P#)W!/"eKCuDTq*X:-K#0.Wn.1;4m6NSHEq0U*P.nOH#+nK,j9FCHO=.iF-$\'RY
+_&H5#*aLjRc7.l6+*pBoq@]Ibn@mEeDQ=IK%07im7uZb/<0?0D[8o#-f>o?81B=0/aiO~>
+endstream
+endobj
+163 0 obj
+<<
+/Length 476
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z\u_+oY;&;Eh3_=Sk25[Qe0/gd&NOfY"m_*h'_J9pj\d5*m'O2<,\gd=H"cEn>A
+"cP/j7S.:bdHSk^Ql4t*/J_eAN_^HX/f.ufM0m@:\<IjnLM'a:<[Z=s_g(ps2[)uq
+"YB9;d]E"]F+#A\:Q$ano)/@"MfYT"DIU+YY48M/Mm[#Q+i+T>^mMd0)+0J)QE1[&
+`8"eGBTGS-ghc*t0Eg9a`C!bka;<MU.*)+_D2ap:C`2VTagJs@Ahtkd=&C5SolRR]
+?qGAZ\q:Y#%SQ6l"6YKf5&;q2(m<#r,gd8Bp/'"B0TOs/ZEL"Z`U])K2nd>tDm]Ci
+5G&n$BbjKVCbhFGq7b;HKi8K)9)"526OaMUZl@T")HJdg7Z=uL`6bPMA3MPQmQ,p8
+")tQR>"o"$X2m#)jguC>j*MeUlT68aEimW%X^%bICjj%E8aID\(X>8E9([V6T1+3+
+n/M?b!0&8FWr~>
+endstream
+endobj
+164 0 obj
+<<
+/Length 304
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z][_.phP&-h&!3@rB#O5R[$-D;,T&-Gt,3=,<="5"ZABW:1UdIJ\L6B3,*l+aiE
+[.GQ,T'Sdm^.H2elqZspP;++oATB0E3PViD;.m$OO)c+MM!Z_=927ETF&!hIM:;:L
+K:jVoo'sG@iGp*A=r2LZ$6Z'0pLLqPR\Gfi6ksr7$j$rq,d9_)^c`\d%W%:D>Bn_D
+hiXpn8@<G::M_kGcji4SBcMq(;q'2BB+B6"(G'mT"fp#04-=ENT566nA)rA"?Td>8
+*>S>.Lu8-AL?@)]rcs,A^Z*!R02#XCk5^[EE,k~>
+endstream
+endobj
+165 0 obj
+<<
+/Length 608
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y:74`9".'Yn\q)?b$<&]>'a%V#T,-37f_e3ee1l2fUt)%n4$Gr-Rr8'n3N&AuOA
+]k8fe[X,1VP8,<lkrl*5]tBL5q;n9F;E+1?>5hIuM(8bMYGBn@jl*7lci*Im7t,[C
+]0H;E4l?3g:\jGHf/K](meB_p4MO)Lj*.I?49jt\GWl!Y\hdiUK?(ot$V)E^'83q-
+#K'.&Alta]0+9sOc@l@p8Nb%snE^a(im_KG`%c7JfB>l=n42:QI;h0j$:5DoK2#.?
+$Q3FAO!0'%`7U]&F+7Wb:Uq3MJ'+l1K;Y#S7-kIpJ#X#q&S$<jGA/$(@t2e;AF.XQ
+'gmJrNLUeOn=4PEc\+G*oU#D6%Z&J=E[sJ+afPjI-+>'$S"<Fi1.7HelQ'`[QMQK9
+m*Zehfu#\-Bnejk]FO9"rSi7NBe.g"88^kUF"80!q[m\O`Ne6nmC$]H-@8(m8QpU0
+Zj7-");Zs/5Je.ABUM+M"9,TJQl9l7P.Sl")b.nH)R2`DpR^`'""*;cnO'>cs2IGe
+0)#m69T(<h?LEndrQN3sjtrb<*8+`H<Lt&\+[=+oBjc/TXnV-0&1npZM9un[\!l1r
+q/?6j!5q:C)#~>
+endstream
+endobj
+166 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+121 0 obj
+<<
+/Name /T2
+/Type /Font
+/Subtype /Type3
+/Resources 166 0 R
+/FontBBox [6 -23 38 68]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 102
+/LastChar 106
+/Encoding 167 0 R
+/CharProcs 168 0 R
+/Widths [45 45 0 0 25 ]
+>>
+endobj
+167 0 obj
+<<
+/Type /Encoding
+/Differences [102/f /g 106/j ]
+>>
+endobj
+168 0 obj
+<<
+/f 169 0 R
+/g 170 0 R
+/j 171 0 R
+>>
+endobj
+169 0 obj
+<<
+/Length 230
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y!@4UT%k'SI2/iADZ"mfJrMeI\cH<,`42.h<1C/JP>;S)l%>+f0lP^.If$.;%K*
+bZjk0ktE<rFdtF6RAQAn@QB?>b`-]cCH@:ig0(#Cn.P0>,nd@4PH`[le:ulEol<-O
+?RgR5q"0(tYj3<S!oJQCB_JCT46T^5WH7!_[n&uE^7cCl_]j_M-K"HbS9s&S^Udo]
+lJE>'@t3jMJKbO"73sH;48B<cFs&;X~>
+endstream
+endobj
+170 0 obj
+<<
+/Length 222
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<A76';p[BW<\UsY0XFSH1#shF1,]2k)CS]+.[]H<Jg>nXE\<]B-^T:lK!>oS
+^'@Jp9A_26=TM'=qC7^DQ)8SI\gT94s8S_-rr<!?r;Zfs"*#61pd"fXrssYTK09A;
+OJal=3p$qYZU5`:_@8d.!9=tdOHUhELu/2p#H7g)#O)?TVmi.(@0Hus;"un7S-3j>
+.""<Ei,\MO$KM6s!4?qu)#~>
+endstream
+endobj
+171 0 obj
+<<
+/Length 117
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'1f2OV10-(c;)#=Q8290Tj>$an)CS]+!i>Mt6'=Jg3L@q2P=n,F_1YJ=
+"";3dmhF]]!2M`*'hX?U;n5"r'^##9$I%[Rp#HJ@!Xo'q^)&O~>
+endstream
+endobj
+172 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+117 0 obj
+<<
+/Name /T3
+/Type /Font
+/Subtype /Type3
+/Resources 172 0 R
+/FontBBox [-1 -24 67 84]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 101
+/LastChar 121
+/Encoding 173 0 R
+/CharProcs 174 0 R
+/Widths [52 36 0 0 0 0 0 33 0 0 0 0 0 0 0 46 
+0 0 0 0 62 ]
+>>
+endobj
+173 0 obj
+<<
+/Type /Encoding
+/Differences [101/e /f 108/l 116/t 
+121/y ]
+>>
+endobj
+174 0 obj
+<<
+/e 175 0 R
+/f 176 0 R
+/l 177 0 R
+/t 178 0 R
+/y 179 0 R
+>>
+endobj
+175 0 obj
+<<
+/Length 286
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk`0lFin&-^EH'UGWT#Wih.`kdDX&kSn/5YA$r!%99]Up_R%[RY=TYbd8CIqEY.
++Zc^TP<?1;rcdl^$X(YG-H4EY53!=>.ig7<aCRN\FJnJc]W!mhOaP.4Vli#8I(`+k
+Bsj5Lq=h\T])\L%kpTCl:"6$eTV')fkRt64iHACQS\`o9Ck.n'b^O#fj)e8pC)EJ/
+m@Z96K+7'dY=0@]Ja2E87bqbHZl/_gN2<B9l<qKW#4%%/=I1P>SIPs'06l+6kCL!!
+ipDN;P4D,^hu#\=e=Glf~>
+endstream
+endobj
+176 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y"+]afWJ&-1W5$mrIQ#i#e9&?0Xo5ttlDdE)Vi7gG%!n7XokO2/h%W7Oon)GN/[
+ZsW6IrQ.cH'N3.R#b&eUN:;ECi]'nG4Gd_kno?^"RUNEJ&Rhp+/I^(pJiLh0FM$C*
+Qn:o#BLcg&V5"(4<R.][VXZ-)jd3]]8.%eJCHt)BP0VI^0(3OIFh5?_S_CDJ)13s2
++gKApJGTGJ^H;K#BqmID<a(,kV(mA`gd`Ide]smbK"e&];")7/DZEiVmdMq2*Xpt]~>
+endstream
+endobj
+177 0 obj
+<<
+/Length 201
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_!0abc_&;B(G;@(b4#al(am]mGk!`?cc"Kae:>,G-'2Fm?e3J(h"i4'F3KW-Q;
+JY-X_#iqpX_OMBm:*)&*Htk$3c9+g,3l_HjM"X*MUYV^^g3U6('QHdTlhuc^7EgDC
+!=\^tCrBW-s-dUSO_^L9[&9k0<]i2MXLs87#*EX"QnOXHk8']jJEdNo&bl&<!50]Prr~>
+endstream
+endobj
+178 0 obj
+<<
+/Length 274
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH83srhi&-h&%(4g1?KZjTV=\Q1:I"3XKXZV,;=t!QikHt@,\V?7T`,:JZj%PP"
+e.hcpq[YKh)\"Jh*F`)[']UmaXbHrMA%iCl(j"3U*&=!HN"ZKJfT.2CEsBI*3C+*?
+ZG=rZ]RsaP6oiX*G9O#t2/re\:K_1CN)9;n6V)p3TGT0n8h"+)Tl_R!_R8COJuYLD
+PSHq$[\E@0HSHNrAD@q-QX3X9h`QTt\-n]=hZT"A90RPPI3*;$8P4/!S^.h_/:ePK
+#683".l%~>
+endstream
+endobj
+179 0 obj
+<<
+/Length 392
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH80i!Be'F*J=>EDO2V1k%U!>a=tm+OG@WehE:>'U+U[*WJL=Dc0FelZl#$l>;u
+-j\-:B&8tA/:`eLJNs1X(6CeG6F8_)C^%urSl5R1ZaF+7@'tY9R@fu)Gm]TcI$=0s
+!O=SDDtGB;2g:UMni4C<pU?2rSmMLJ`^24YJG&rX@YX^gp!$!CI071:l3ikC8.Yo<
+?k2Mcn:`(Q$-e!g6`3dU:_)t+"+lBHhSWZYdE)F5!LXBU:kZN7Cb1H.<+Ca4@OD4D
+k\rgI'b2TL'C,a\dG]o>3N*$l"Fl@gQlmBD'*L=MCQ?maWB&rKTcmAKPQV?&A&fL7
+Mk.4bf2H^XKkN'*UhNI<`UMXA'=S`]qXGAeWL593(j2NLnEZV%oA9QK^^`gh~>
+endstream
+endobj
+180 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+20 0 obj
+<<
+/Name /T4
+/Type /Font
+/Subtype /Type3
+/Resources 180 0 R
+/FontBBox [-1 -22 49 63]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 34
+/LastChar 126
+/Encoding 181 0 R
+/CharProcs 182 0 R
+/Widths [48 48 0 48 48 48 48 48 48 48 48 48 48 48 48 48 
+48 48 48 48 48 48 48 48 48 48 48 48 48 0 0 48 
+0 48 0 48 48 48 48 48 0 0 48 0 48 48 48 0 
+48 48 48 0 48 48 48 48 0 48 48 48 0 0 0 48 
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 
+48 48 48 48 48 48 48 48 48 48 48 48 48 ]
+>>
+endobj
+181 0 obj
+<<
+/Type /Encoding
+/Differences [34/" /#2323 37/#2325 /& /' /#2328 /#2329 /* /+ /, /- /. /#232F /0 /1 
+/2 /3 /4 /5 /6 /7 /8 /9 /: /; /#233C /= /#233E 65/A 
+67/C 69/E /F /G /H /I 76/L 78/N /O /P 82/R /S /T 86/V /W /X /Y 91/#235B /#235C /#235D 97/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 /#237B /| /#237D /~ ]
+>>
+endobj
+182 0 obj
+<<
+/" 183 0 R
+/#2323 184 0 R
+/#2325 185 0 R
+/& 186 0 R
+/' 187 0 R
+/#2328 188 0 R
+/#2329 189 0 R
+/* 190 0 R
+/+ 191 0 R
+/, 192 0 R
+/- 193 0 R
+/. 194 0 R
+/#232F 195 0 R
+/0 196 0 R
+/1 197 0 R
+/2 198 0 R
+/3 199 0 R
+/4 200 0 R
+/5 201 0 R
+/6 202 0 R
+/7 203 0 R
+/8 204 0 R
+/9 205 0 R
+/: 206 0 R
+/; 207 0 R
+/#233C 208 0 R
+/= 209 0 R
+/#233E 210 0 R
+/A 211 0 R
+/C 212 0 R
+/E 213 0 R
+/F 214 0 R
+/G 215 0 R
+/H 216 0 R
+/I 217 0 R
+/L 218 0 R
+/N 219 0 R
+/O 220 0 R
+/P 221 0 R
+/R 222 0 R
+/S 223 0 R
+/T 224 0 R
+/V 225 0 R
+/W 226 0 R
+/X 227 0 R
+/Y 228 0 R
+/#235B 229 0 R
+/#235C 230 0 R
+/#235D 231 0 R
+/a 232 0 R
+/b 233 0 R
+/c 234 0 R
+/d 235 0 R
+/e 236 0 R
+/f 237 0 R
+/g 238 0 R
+/h 239 0 R
+/i 240 0 R
+/j 241 0 R
+/k 242 0 R
+/l 243 0 R
+/m 244 0 R
+/n 245 0 R
+/o 246 0 R
+/p 247 0 R
+/q 248 0 R
+/r 249 0 R
+/s 250 0 R
+/t 251 0 R
+/u 252 0 R
+/v 253 0 R
+/w 254 0 R
+/x 255 0 R
+/y 256 0 R
+/z 257 0 R
+/#237B 258 0 R
+/| 259 0 R
+/#237D 260 0 R
+/~ 261 0 R
+>>
+endobj
+183 0 obj
+<<
+/Length 159
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"1fQ07<%p4/0Jup&1#shF1,9#j)CQG*!2]=<OqrA0$H]h`:7b_ei<i&O
+>l#L,0eRmP!+uI&/q$N&Kp&1Y<%^r_L%kUss)7o:i'69%"8*e\n@o!_@=1[ej8T3h
+o+1kNp`F#_Q`DK8+;\Dc:Nol*~>
+endstream
+endobj
+184 0 obj
+<<
+/Length 214
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"#%A5Z"]I42'LT#i/e^SphZ1SPeh^:P2#n92\Qhn$>l*Cd-AGe%*^D/,
+IA['X"X(k7=.uFg1mQ857H+7Wq]GP3U#ZIS&+ZNX&*+fT8G`Yc-tED^&3reu_,-1d
+6GsB7$-*#F)sSC-i?Stt:'.PJOUs>=gC#2)1&kb_O$`hSrdu?Hs0*/,ro=%!%jSVi
+4h1X)!!<5)?IKh~>
+endstream
+endobj
+185 0 obj
+<<
+/Length 324
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$f5u*+f&-cM\(*q^TK['acf0Juq8=l9k_F.HH5[CtJ]XOcnX@MLe\n'2BrY+5C
+V"pHQbPVHa7ljI>2b3-o\ngQZl6"hb'G#;(WP,]!"!?Fs2!F(m3ie`_*9lVXqEW\f
+(HVS&^@^ncWTV6>X>q..(!ec7EYCm>`+e4==Lm7Z9@#eG'O>=eEcY583\8W,d?dKT
+-5\3eeoSg#HBBMDV3Yi6OGVV>8($E*'##m$=%b:0Y-FD"`])SjMC-K=-E*uY0-kqo
+9<?#FDO^c=Z,fo(P)3;rLNjTnkVM\%5Mgl)\bIU%@MgZp2!?ms2ZR'F4Ym~>
+endstream
+endobj
+186 0 obj
+<<
+/Length 335
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;P5t]'\&-^Df#mM<9gq_DC1t,,&B@egeR"[5s4Fk!W<#",ak@T.,5!kPI6C5G"
+h4)B9Ue(HaC3R>Q%A-jB>M`]WP;R9U[J78om>a+A(,bUV@eQ@,*k8VT\OFUsqnj0/
+V7YcKpWmL$?*fKti/+9KEn/K62G51S?7j'(0/AeiXo;g4'\*_IIuf`g<+bDeXqlpA
+Wemal+h(d:WmaGO=%Uak6$+?f=<mK/Ol9(E*SFkPn64/05sMNVStAbd2AHrpbUf(+
+jB)'b]c1?E(dp&ET\!%eT*X3K0?SnM.WCkJ/)2RO%0pp`+/Zn,;m(=%2k@K<56Cns1ZM@~>
+endstream
+endobj
+187 0 obj
+<<
+/Length 178
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"1fH(`="lO30Jud"1#shF1,K/l)CQG*!i>Mt'o^B///==h\XYdmoYVCP
+9tBmZJ9"ok:'&WIL0XSH^'Z/TV5[^k/dai05O^mF#=<#FAGj7<KCOF9*&@M+rm1M'
+q&fJUp)j2tFn-"4%/(,&%0)gs+90[KlH'd^"W.6;-SM\~>
+endstream
+endobj
+188 0 obj
+<<
+/Length 247
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:d4V!'/'SIVD-ElA6]F-,=U1-RN:EkLL<ZXLX/MpYKd5[$?^s[fgc6A+2-Bm9H
+c0Up<P>iba,OMBiSEb?t#:!l<'2BdC(g7#/PK3YJZWtA<`ef@!H4nL]F6/[jom4.h
+-!r(i!(t$mj.LSco'l9k%o?gc$TiOZGc7S_?G8:hJ^loi@]CoZQn@inqk&>0PXW']
+b.?],+uZ`nm:7=GGt?J_1WsKLc]XL,2>AD!k-C9H!$=q4ir~>
+endstream
+endobj
+189 0 obj
+<<
+/Length 239
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:d4UT%k'SI,N!jD,"^'eV'dHq!4_(>el4Fj]D:p`tYYEbl-KTm7gEKUL1'L$^!
+c.eZ>b\3eAVaf-'kGacP>U7ENN-#Z4RDm[#*7%Mb#nNJ8&oK*h=R;?rbAQur]q<6G
+oE"`;7k3"KRL.\&?3.VLhG1""1aL*t8*f5e/f<N<_]PD_eGo(1KFZ:bT$H*p0p0"?
+B*U>'+0XS`(4/qiB/]M\EGrc;akFmD4p(ct)5P^~>
+endstream
+endobj
+190 0 obj
+<<
+/Length 235
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V^h3srhi&02q(0F/_.k60Hhq1B67$DnBAnc3E=TkGf!hCP5Ln-D%iP&[hmdl`BZ
+k'`t_!_Ol985kc$7H5E+fQ%"H3@2D:eBdB,_m2UOU+f'EZO3`'YU5@0g=,Z`\mi&j
+B$&9qdXi&En28)4+!\>uhP-:>&rhR`*+\)T:p^4!G5sEW!.oOt)q[Elqu[una#V]K
+3J[4;PVI)IFrd`&HI00I=HD2DO8'ds;E&p&~>
+endstream
+endobj
+191 0 obj
+<<
+/Length 142
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<\RT/0i9X0:e3>%.c`?>"H"'F!%DD@6No8/982G3/gjFIrG\DHQbE]l
+F:)tf!)fE&$7/-;WEc#I$NL,Jr!ri?Z@PJU!s9*"8J&^7O%^b@d`r<C536hXj9jrL
+$ikH9dc1~>
+endstream
+endobj
+192 0 obj
+<<
+/Length 172
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"1fMaY1fc:g;D9q*8290Tj8t2U!25N(:eo=J,RYl]F1If'\b*dj@U/aN
+5Y3SVVZ:?56S<d_?\OZ;dSqhp(PP*E+8?q^5@?[j#_WTk(`i\9#DPGOru6KmnNZ%u
+k!.'SfFRI1n2&-Ee2R:ir1D0_P:M_&0ECd&.I@~>
+endstream
+endobj
+193 0 obj
+<<
+/Length 128
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;TaV3t=M@!/0=u,h'9?S7(6[ZlY&U,ZG8(;F0Leh+"0,YF+46e1>8r]qmMi%1]n0
+:<gR@)HnL=/j&>(2:D`-Sr%c0BV=A#lb#0pQB)S$s%!gVcQCM&9R$dB_9N[+~>
+endstream
+endobj
+194 0 obj
+<<
+/Length 125
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"";/X=g.3C+OK4HN8/it-\V:lGL'kKr5U&4TbK5r@59))oV=+F3SH>;r
+%(Z!nI2,A38lN8_>nfL#5@E@kh]U7\%tPks!W*E-\Qh;.!kA:5!3k5r&c~>
+endstream
+endobj
+195 0 obj
+<<
+/Length 176
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<RA-M0JQHZ1KI%$j=94G2?sR-.$tr'R-GOjja]a>/shbLQ[ZGrYrS/b
+#>g:Nh^Q?D!D%M4.[1X4VK-sn./X;OIN\Up,6"gaL`^Tq"$_`h+:f\,fY`N"H5OKf
++%lH@KG2QPj5@i]0_7LRS7mWj>csZ'JR!^+!4@Y7RK~>
+endstream
+endobj
+196 0 obj
+<<
+/Length 273
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.(0ogin&;B9X`Lfia&XWqS&hlpHJo7k.-G.eL@!>6ONHQXf1lfEb-n0tu@43t@
+2IA2&be3D@)d,c_o2sF/<bqMhq8c.)_kjFmOtL5".=Me4PT9WmP&^,n.uoLjXi)3E
+HT@]Ns'4spDub4,JW<'i+V3':!(7;U\e52PWeLLreU',u2a\O-+hFmXbh='8KVlWE
+-NH)4.tSRr^YCmn^#E?Olc\5N\RtAm<#0Ms4Mhe+`jAFd<$uD/[j%o:YoN`kq4$gT
+!%5.i-3~>
+endstream
+endobj
+197 0 obj
+<<
+/Length 181
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY_M"C`#H"]KJr'LT#i/n76k+3_.B1K;^Y!#!Da>Y^kqqV_e$L0XQr5Ue=6
+VZ:?5+NMr4TqnVDQ-7WFiVt"ss8RSi6gt=/IK7=lJ@GW9)<Cht!TF2HbQ,N^5[5H3
+^[VDh^&c4Y(`:mE(`8VX(`4)U(rQW8EOgC9"`aVJ!7<Bn)#~>
+endstream
+endobj
+198 0 obj
+<<
+/Length 285
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VGL0i#\A&4AIOYdBCN&75F#n:)-59-96dJHQ\m!(mS0eDK'*7nH4?152!%LPAW%
+prTS-RGH\+KJrJrp?/+k_GdA9\f7_g=nZK63,K+c07"JCGmM#JRi?-WF1AgjSMoMF
+G^oU8f't4t3<>3f![8[S`*j7W0T-2`2p3r-X2H!?@QG^b$(-P%$aBD`i6N:`#+rgM
+JM!00GVFZH_)ro^&]2Q?2MTb6YZ<T"bF-q<Y"V3?>?UcerNB>:.>kI)ibW:JfrfGf
+(PuP;lh.4NqE4i=8ARj~>
+endstream
+endobj
+199 0 obj
+<<
+/Length 306
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$e]hZI!&-q]_1.8^mO5P?c8>DuTSLbM;aFFC,%mV!MW61Y"ApG)/X<'/c3WA1K
+`/pT8ht]Ikm:7H4>W's;ZFuB1_]R\%EO_.u::f`q1%>%bLS!fJC%kjs+N3s3kuJ_*
+qaWZ=52Wlb'4"./-h=9*Q**LYNehc]6Rl+DalsY:fB>NC3&"]1!R(X2SP73$?_T7Y
+0H)bjNU/0W5c%?VrT/R+TW_YE"`e28k`S6+Xr128^$old)>'OY;\jP9XMBW`.h!'H
+jE,DS$[T1VOS<$sI69o3:P-"_7cF69TD<+"^CnLd~>
+endstream
+endobj
+200 0 obj
+<<
+/Length 234
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk`YmS?%&-h'I%Y\-`#e_&$2Dh.4TdlEqd)cO>NXgrlNGmB<kp(<::`=E>E'cJo
+o"iY%g^pm0%!20-_UTQC&g!^Ab8J9H.<1J1Y'29OU_cuCdY"SC/PfSm5p,XiHrltb
+B^H@72n^=qDu4&)23T+[Y[^36&_k?BQ]Q(#2Do8$.G-@#LPY>-[S+]M@%3TBQ5&2+
+B!S"DHu&]C^RB\eA%FI_>1dUM_fl*G8HE)~>
+endstream
+endobj
+201 0 obj
+<<
+/Length 275
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.gZ#7ED$jL*0)3DMl&`OV"+b_c/:.der6_uQC+ornj(#:A$qI]IMft(M!$rPg[
+&>GF,=h__<J(q;BR7JL]>\9$p4NT5=,>UrH;(e\iaO(+E"'7?mCRLKY/^`RZH@(dE
+ZhdZsmiQnZkMh>sBn:951p0^+qtVMA+eo<;!c]=iOLhC2U-u,'WB,Zg2JlHBq?%@h
+GCPQ:s,ZWaf+kmDSOoOe5U"9"6>_@"CX.hB4<8cH+3s)e5s<Ud#GP2J'!Cr5.PGOC
+na?H<._u&~>
+endstream
+endobj
+202 0 obj
+<<
+/Length 318
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V000i#Y@&-^Fc;HTC-8+9a`Z;Io:\$EAk6jb3<2ulcQJ=n2P>)qSe=JAA!H2%k9
+U7h!+AutOs$jYJ-+D75R^$IE5WT.(JO!sF,IurX%6Ou;nn7gtW62Dh82e[2X]"=2e
+g[S>$h`dWW]Frb2<AfqS+e!KrnsV$aOje!M;[SF71bEl.$6$-NJCa!Nn]>91$=M_X
+IYf$?"]ij+RB4h17L]qY%S`4=9(_<nLKiG/^j*(AL]e9,_Z9X&r.k,dV&3_l:"o*(
+P5S2=>gk(01ckN!4t2^7UP>ap0_bp*?kL,UA5^,_q4>>+!19%W4o~>
+endstream
+endobj
+203 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;N0abcO'F%r<L;I/@"Q'A>%8F*u$<=nNJkd@P*?>ib>OZ)b8rq?(KCnt;$t<*'
+6,"M's%d`g+_mMqe.K\V4=E0VPk&CAEIrM:GfT/HO;j9CN)G`f?@g<ZF&X:,)R#L^
+&^1=F`&$Bb(@MXJ,AMU!^sljh<#LJ6_C"M9a#eSQMpJan!SN]Kbg`&U.NB`pqBjNG
+Fi*\:*#&qITD2"Vq11bDm.X[IYV`S<k5bIEiMH~>
+endstream
+endobj
+204 0 obj
+<<
+/Length 290
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VGM0lDV/&4Hh$+AK14?nROK"IAE^a[maV=A#S5+AS?AQJG\qUN)M]![S$(T4+tb
+'Me7XrA4'Ehf::V.HN"FZB40?%QPWAf]_?^Q>7qAF7iMHIX#(<p*mt8Z^k9iD;S\G
+kH*O`q/lGpqGe(4J0tT/'E^`87NuROQ)^`IWDCl$n).JQ@7X)G#%QEiiNZ'oV_Se[
+'YWi*5WZhsX-'R7"?h6%)SDhUL79nc:q1OEgRYn(]fT<)6PO8.s2@GK#+E\:/LtL7
+XgBDLPA9q6I]N9sIg5uG9X3@~>
+endstream
+endobj
+205 0 obj
+<<
+/Length 324
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V000i#YP$jBI3Obbj=gjnnu+<)UWG,n.A8>JM&C(C</'Hh(Wgk;`P;<A-_:(cUJ
+#p:.T=4i]7m=$E%l/f"3^6@r<4LXCkFF,TWA@n')][`VEn8&T0Bo^X/9lm']di@d.
+V)?MB.rVW[:M.6P/-I)X!s7!Q;5GRJbX@+X$i*b1)PTZ>_'-BD+PFj]rrC8#'j.H"
+jZiMN.SM?6F!7k"bo@`:QURu+M6ePe&q`h"en?G4+\sVJqb[BdMh75)r["c#Eg'4T
+MuGeZ(mM!b4q)a[(c!>i=<Wi6SqsK)X,kVm?6>kD&Tj,F*mMCo)?B`&[.s~>
+endstream
+endobj
+206 0 obj
+<<
+/Length 133
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"";/X=A>tZ"aAp;mBE[CK\V:lGL'kKr5U&4TbK5r@5?u%OLeHV-.*&1Q
+']?'#aJJ@iX&)\nR`aaVU@@.A!W*)s#'gE%#R%CCfRN[W+5kSdjm'r&a9<C\_YQKl~>
+endstream
+endobj
+207 0 obj
+<<
+/Length 194
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"1fMaY1fc:g:b]=W8290Tj>&Om$6(C\)?Jsl$ph0a1-(]Eacf@^>f"d?
+9A]h"aeeG?i2g>-V=3ZL:f:8]b2ql^nAkM1rr_s"lj&n$&B+R`s2Y+'?3&O[e9:nm
+mf<uK@/e(ATD9T#5P@>.J,"N_5EJ)PhdFc,hseDNs7-+oY+AmL>^uhTpI/!T~>
+endstream
+endobj
+208 0 obj
+<<
+/Length 243
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;THi0b2&S$q5dcOM(2koa.(AVCG9)$:n\mJr'S+7KsFJoOo5@7ptZp&KE08UjPW"
+`D3L9Qt(skob'oOXb&VK'sSa$Kk7-caOYUH6"<0OZ)BqUaae2f)cRs)!M>G)(!IF6
+Xb=.U0e=`!+.Wp.bk`/E9jG?%qoh/Mq4%/'inZ_;/(2Lc&UE`1qP_FJ1U_[l/%CnW
+"N-e`n8#l8*sC%g`WhWcI<c<oLhCc8ljTEB560a1Z3g~>
+endstream
+endobj
+209 0 obj
+<<
+/Length 148
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<\Q@30JQEY[STLLj=94G0a%h%-l<gO)!`%h(n0\l.O=1t3I,Z0LF\`/
+Ep7oNV7?/g!h:!UPc(]O8Ps1OQ`#a.!s9,4LQEX1TcTVTL`ZU0N;n_>&G>hCKTKHA
+Sm6hOJ,oYO5=r<~>
+endstream
+endobj
+210 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T`q0b2&S&-NYD7(S+#YV1fBilFqb$6\:/#q?u]-n.DX!u9_9;t:&`$3^,VEcA:h
+G.d!B1I6`s#%if\UXjO_gj1W+Yp`M04Ior*TZWDN,.FA6Srfu'1MB[(L%FQ7-TB*+
+ld)+J&h-sQ?>^'Bm%n:aAFa@'M1c<:jP#f++AEisMh<#^BfOoqiPqHcGp`p?neCV*
+ZM<upk9mrM#!WSZbP#5&^72L*Kqf+U"p!ZRZq:~>
+endstream
+endobj
+211 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`?_$YcZ&-h&-&'A.)!Ps&4;K8I,$<GLpJi`Q)eZhJ=B77-.`CKF]6(DNp.W&nq
+pLAsrQ<cMg#SZ&miadq%(sX76Xs74!itt8uZTgaY+P`ZL+^B!p_L+.00%:fCQeN,%
+!f9Ot9,);+OVr")TQSL;Y,CrJf"NpsrE,o)d<f=#Z$\b3=$\-^^u?e,$dlFnZbA=t
+)7=9GX[BM<L@qM@8h"lW7Uob1==Vt?@fRG/kCr~>
+endstream
+endobj
+212 0 obj
+<<
+/Length 288
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.h0l"Tk&-^E$<!]AK&Mt:pA0IAnQ,#s6.KW3'"#q`83$bo_pgQ.qa<&0o$DF)[
+<A:pXo84R@5C_sPbbUQ:;X-m:&+WTgNiT!?c=FYNqS(IIZJ"fKj^KglP)C+sENsh:
+P`gsu<PH4s5.Q(S^isE"/j#bNaWA:G*_5B!hJg$'d<1!E_M.gh4nYdpaY6DA*$^/,
+3CZ&;_FO+9_14?*+2e]f%0qBBS7n,uZ.3s<0o>,R6Y[?6/!F,<bR3K5[B\/Nf%1$f
+"RIBLd"%`mIcoSh!1ii,K`~>
+endstream
+endobj
+213 0 obj
+<<
+/Length 186
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"!b)gA"]I42'LT#i/e__;hZ1SPdPFkL2#n92\Qhn$>l*Cd-H9<e*^D/,
+IA['X"[anj:LAg=U=*!n:D\]h"sE[O+rKT"8[*%0+85a7&!0=Gp^\SK@jdb^,U6?Q
+JUoM39/"M">kUM++8-iJK06+Y3&K\6E0+I1HS/AqY!=VT!!RMj)#~>
+endstream
+endobj
+214 0 obj
+<<
+/Length 188
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"!b)fV"]I42'LT#i/e\fR!5pbC1K;^Y!#!Da>Y^kqqV_c.7U5d25Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PMr"5Z$><,4-808;IORf)?c_s8NU#,X9e2aT);1O9`U4
+"'-%J/O:#9?C8k0D'sru^q^F*)]1g["sag*!g2Sbp#HJ@!Xo(>@-hh~>
+endstream
+endobj
+215 0 obj
+<<
+/Length 288
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSX]aDV1&-q^*$@tS2,Btl7241,%"[Bd4JkeL[3]\ZM[u]*1nIZ`]9$^/Yf%CU`
+OLlZ[Il!u/9kgEF(lDsJep'QWV)Y/n:=HJ6SoD:#1<&HJ7Urfj(.QLGMWBofk]))Y
+0O5>JE6)9NU6sgl&.@]X3IhCd$5QC^'peq;MEbBqM2L226g)f[?f&_)GV^rkF"c-G
+Tp>!Jp&tC'+BAJF+:C#XX5pG<rmh!#PC-Pthm>/LhkJrJ(*!5'4oq:1:SpmdJ=]E;
+YABA[Yhf[F.3@t?!&KZ&+9~>
+endstream
+endobj
+216 0 obj
+<<
+/Length 164
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^""C`$#"]I42'LT#i/e_/+hZ1SPe2((N2#n92\Qhn$>l*Cd-Dk&E*^D/,
+IA['X"[anj:LAg=U=*!n:D\]e%.t\Zj;Ss&+#*1?0ZY>D@#'gT&W#cqpAb.1s3lg8
+?sk*JdaL?M,V``Hjm'r&a9<C\CbNiT~>
+endstream
+endobj
+217 0 obj
+<<
+/Length 133
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"#@\>K"]I42'LT#i/n8B6+3ZUo1K;^Y!#!Da>Y^kqqV_e$`a&?]5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PN%t#)<.CbYX?iJ0k3pi;Z#H$2d!MEqSK#j8o_ior#sg~>
+endstream
+endobj
+218 0 obj
+<<
+/Length 167
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"!b)fV"]I42'LT#i/e\fR!5pbC1K;^Y!#!Da>Y^kqqV_c.7U5d25Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PMr"m/R+cDdZrWOphbXE"X>rOo5Mo%O:O34c"Jn:F^X?
+!=8$2^a'!p#n[3]eoSBJEWpIa"p"!nr!*~>
+endstream
+endobj
+219 0 obj
+<<
+/Length 257
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um(4UT%k&-_!SJ<<-\)sCNlo4&Ib"9*g""Kae:>$<?.R]%$,Diu>I>(iuh=_&=I
+bQmUMDPAl]'T.g'1`Xn,^_90>OaS+bIR$&'YWLi$6#TED!554rd$q1N'VLeok]4BY
+0UWT\GReH=i!a&pSj?GG5q3cWWE9O!9:Ha"ptp8(VCQd_D69kG%%if/_cJ-?bY<$0
+[rS5A-p--Ll"E`=VNf\\e7?"4O]6eLjoBE#;`*rXrO<g`$#]5o!5,SQDu~>
+endstream
+endobj
+220 0 obj
+<<
+/Length 220
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR;0b/e3%"R:T#Eg\ZiUm9KHiekY"?#]Y-9?DPEHKRkN(84bi<YAN``gPn_?jJ]
+Tj@LR/SIEfboEQQb&XL&?89Q5.-#ob\W`S'\mXXI*\#4YDInO1g98SkofKbB*bY+\
+iW+_j!)r:dJ30H=Ke`o\6nB/bk1O\i%l!`f5_pc2Y<P9j;9"t%&k[%Obo-YuW>_o7
+q?VM+4pO"f&,7"B]]ZJu~>
+endstream
+endobj
+221 0 obj
+<<
+/Length 232
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_#0b2&S$jBI/%$eKt#k\@o9aQUbWIRA@,a^Ok0J\/dDN<9mEI\<.3t"@`/.?fe
+jiIFXSP`*U4EaD^.3/k(d$e(g;Doae_`DftA*^AQP;QIE@gf>\]:`99%Ge2]'=oK8
+J:\X=1)2jX<""^la>r>:X,hfK1@_>!]]kWNf`,?jks+@,a_=E%.,.Z59bfKnd'Q*&
+#CV;"pno1q/AG/520Ep#E/1Ut!&$Y#>Q~>
+endstream
+endobj
+222 0 obj
+<<
+/Length 274
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSV]aDV1&-q]g$@s/_,P5;-CS4_;JfeA*5pma>*?>ibmA'>Oq?W)kU$(M]kb;Gj
+5JmA_b@M>*P,5mhCeUUop(gGkj\d)HBM<U-1LYLGBo2)?Z5h>i7$pa$1U<C6/%V7S
+#;#%;"5K7oJ=%2S+r.I/JYZ,H1G'jrf<Me^n&G6$?T[he57Mhla4nrgo[Nm:=85j0
+E&s'4iV2$W%I7h8lYMQ,%r/Soh\pDdqIU0qf8V7.*#O4%I2P\3+d&"iJn6fuM\7uD
+*!#QncHc~>
+endstream
+endobj
+223 0 obj
+<<
+/Length 304
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH64\ip\$jC$o/I&c-&aTlj#eNs^NO44($7)SD!'n*6,,g>d_6rDR3Pq"0U6t*Y
++<$\E,QH!ZVUGoioW6WgV)GG>eU6:tM^$<72WlrDi,R)tSu\Eb>HVkkibEgiV);?Q
+S\DhN4`c+TQGX\ZTNN&):1g5!R>=D>1PSSdd#o*&A9bRL#.#T9'P?AYq%*,B'JXEY
+2%W&'_,r[M-SdB/*(+s),?f?t7GNHj6s*V4jSG%'b9*U#j9+G9p^^.[;W:1XrA;>l
+#YYh5"H_cu#uP-3!Nk8bIP0:3S":_sCB0<SXk<~>
+endstream
+endobj
+224 0 obj
+<<
+/Length 162
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"!b)gA"]I42'LT#i/e__;hZ1SPdPFkL2#n92\Qhn$>l*Cd-H9<e*^D/,
+IA['X"[anj:LAg=U=*!n:D\]e$p\4X!$^MBE0-%Y&(H(OJSYOR5OACPaoDBr(&<B2
+!Q8MVW5hAZA[u&/\H9;A!s%8Vr-&~>
+endstream
+endobj
+225 0 obj
+<<
+/Length 244
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V0.3srhi&-h&%#m@+Z8(bA&DOtUP&/Eted)lHhV1kXdEjRu%NfZ"baLI-p0J!W>
+1&ip`q&3a:ELpQE@'RXc!Y<@.du:P6@Cf!'B"6Wi<$9JRB-?mp!`:!tR"/!<Hp-@G
+:g:"aC7/Uk)TEYqoVh/)dk7B2Vk5.*54tV]`j($8m,9SA'k9stS60L#Y&rd2OYs[c
+\`^?[^3)?AT7p2GlOZH_fdJTC[['tk+RBf4i%k?>:%C7~>
+endstream
+endobj
+226 0 obj
+<<
+/Length 259
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;O4UT%k&;K.W^kHLr#WijL\<'+j"b4<%JlWpX/M.[='B@&4:U3KpZj;[*K*e?Z
+H&D'EJI0@V7#cVS@>n'B3t4[c,9DUWNDL/.`bZ/>8KcYn(dYCa"MnV+71DPg`:N6!
+LLc.jVmiS0%MbT-8k!=!<7Mj1B:bsa?Rd7h^.RW3$h[3^<(LZ)XAs*nfpK*ap@_F,
+L#5e8,ZYKLK\n1r[9]3Pk'WCnO-Z3>NQ0LPj&GF?ECVZL0Mc'cT)er#V:@p~>
+endstream
+endobj
+227 0 obj
+<<
+/Length 299
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V/EZ&6C`&;E\Q"K&H3bIi@l"SWB66-p9=+_]s>k`o6)Tq.Q5g-/+M_(nI3EFq._
+#f?#=bfoM!s0%hh7Pi`;d,u49F8SCh9:T]UqoEK?#u87F.PO#KaYDUD$.IFR9bJ.%
+])5obYkTOQ%UuU!#*Ej7URmn\<@=W+SKsVK`#o1CR4IHGO+d5h\PUk8=?05B-=\>M
+)b>:`YjCVIm-39>iUG.^D*-t7paP#e5J:"T<S=&:mPP7JSX87bGdO=D[7bB^Y(\U^
+#raS''!Ck2(j)%H9/E9!RfX,q)us@ej!=~>
+endstream
+endobj
+228 0 obj
+<<
+/Length 248
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_!4UT&6$jPW("X/L>Tt,^Ia!tsKp]G[NFRfFskb..pmq=jVO3k.!BhYUF6"_?d
++F/_f>*)ORF>TcGSB_/l0Ug/NlPN@u)Z.D9MTZjM,=PQ'[M#:Cgoi+k0Ab+:rk)XO
+-4?>p!D$+-J$%1?^filR)CpU7d74Dd>r<9IB1>Qm0hp(a1fhhZji6(u3eqH)m'W/X
+6#5!mWLu#VS^r1hVuCQ?qGdRmB+@[P]m6NcM=H,"!<CBqr/L~>
+endstream
+endobj
+229 0 obj
+<<
+/Length 141
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"ZrGD[:bXV$0Jca#1#shF1,9#j)CUsl!i>MtJW`8B3L@q2P=n,F_8qj6
+hZG:IV=,,VX8o%YI2,A38lN8_>ne1o)#c<F0[ulVs,@!XNu6)k,n*&t_WC()(!$Oq
+!001a=9~>
+endstream
+endobj
+230 0 obj
+<<
+/Length 172
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<RA-M0JQHZ1KI%$j=94G2?sR-.$tr'R-GOjja]a>/shbLQ[ZGrYrS/b
+#>g:Nh^Q?D!D%M4.[1X4VK-sn-oCr/!\hFr-Q(c06TpAf?k4J'aMWfEr%R+84,isP
+$mYb&#t>adE_M0#s$.4sq70`n\H9;A!s%NX/=H~>
+endstream
+endobj
+231 0 obj
+<<
+/Length 143
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<m\6N0X=M/1KI%$j=94G1'J"'.$tr')!`%@ja]a>/shbLQ[ZGrOXZX2
+#>g:Nh^Q?D!D%M4.[1X4VK-sn-o<V3r+BDFW(4imZ24M#%u_@\JED>p)#WQ;p#HJ@
+!Xo(spXjH~>
+endstream
+endobj
+232 0 obj
+<<
+/Length 273
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH70i#YP$jG"mU0-JgNt>Xu6J.En5T4>;M%iKWE<)Z-fG2o"UWlYVKTmo^5(@05
+#L+c8bOuIuIc8,h3Y,:53e-I3Ddf]@b*O0p48$PXL[BD'?T`/,I8J,@h:&KMf(P1(
+H2)]prm$p-81m.O^O_-0JIOU?CN9R-*]MP?2@GC)3[@I_3H7g<;*-c:/J.5/3>?U/
+cIJmT,&1#:aJ#T1,3jp55H:3&ebgQMU2>0]Np1V]3N?;]BU%pSq#H^(7ASc6p1uqq
+!4kRl&c~>
+endstream
+endobj
+233 0 obj
+<<
+/Length 260
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.gYmS?%&-1'-*J@Yf$-<]k)edd(:_h1ski;uIUP#:^j.@(aOaKL9%`N\E;!9AU
+n.P/Lga-1)PkJ(W/5u@LSMf8cXrPY%.\1:r&Z7.F#*U9s@Bu^D-KT]Q1aZh4*r"h$
+c!&Z&Ve%(g7YXIili49N1NH<S(*j2/W!u#I)fa&e'd"QpVc"qUXnYd1Sq=-'f:6B@
+Z%?hBZl(CirLf?Aa'b8XbTf0?/T.<1jHJOU02&_Pm=7FV;%bel&,7.FX17FB~>
+endstream
+endobj
+234 0 obj
+<<
+/Length 249
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:d4UT%k&;;L-#Y^F,A1jN0jp/L%J%ubM<ZXLX/JP<G8'=d'#V!4oT<eP+4(7oA
+2p?VeWeJZmO\$_H39Pm3>h1CMUmaq4/TdmM?$Y+DI[%/#I&edCQi!$^S@:S*gn,C#
+f)ebQG_uMl&^V,h6tG0^o-2p,+/:b^U2Xg3#%r:8!PO1.N5-5D&H)pPcg>DBVVVIQ
+9S4$.>c-K*pdi:c)7$Hm09clfUJO&Z0;QBfFl'KQi6MC2JsqD~>
+endstream
+endobj
+235 0 obj
+<<
+/Length 275
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk`]afWZ$jZ87#>H"82u3R_K_&[unKX146mj'A*??u*\A=s1-p.Rk%><Fs:g%r:
+jjGKhJ#h]G:dh(?e;P_Q3e_fIV5+sTA4Fs+Pb)j,i$(Je5Y@`bOV[eOh3(+sP:bU/
+O#&+5@]mOWjpG?jGAJb:Q1a$8Nj4,4R);`'OI<MaZ>)(CPs#ljQZLQ\O1;T>3D7W(
+N5%\Lk==JoVu2o#o<eJ$acP7>R:PWQ4(q+d`$R9b-GPcF#%@dX3FX.I`2n<k33EqM
+j(eW`<9TP~>
+endstream
+endobj
+236 0 obj
+<<
+/Length 268
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VGL0oj+)&4It@YV_?#i4/h,!g,f^#o8@3/+$@W!%9:>"YK8lEg.OeV$i4-3##>-
+NLiUhX?V4"[4J,>GpW,_Vi#tLeYoG;;X0<8B8Y`'2_C@$=Z'IPFi<D(HRfhtm?_)X
+DJ*iO"V1YGaT2J]+OCN>.T@c^U-!L;L>YRSh@C*K;iImR(iA.Rg+WO\,XWHgeEQiH
+<kmjiN:9<7:t(2"qdaeG18E)JLaElSCa's+Noi/DH1XLq"u#NR-9HPCY2paS%KKg8H_L~>
+endstream
+endobj
+237 0 obj
+<<
+/Length 213
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_!0abc_&-^De(4g1?KZjUA'/gK85ZD\15q<J=.4l5;]B!WcMT87"r6B1mQc<Ll
+nn49M(G!VGl7"JkQ?(+C`jXA:U0Zh8c]n$dCWGQ_[Uc_n'q>'(QCNrhbN&S<fPL`k
+[D5$Vn>6?P4WVL&=$H860h-dN)\_F@@F,5mk_Z8'Pa$XeZcTu[)(c`B(P8jA#!r_+
+hE!jkG6$;c_iF~>
+endstream
+endobj
+238 0 obj
+<<
+/Length 328
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V_T9hN>h&;@1,@\>W-K[^/^^C2`J^o1WVK!%4d\eJ*Xga1gYO4$OcAM8e&Y<'!$
+5o]YFl)K'u<IZ@'FE5g<dVktcjg!cGmQ8)4Z>HF"D6+",4S*IOl<a=IX)$4pg>-(+
+_pruVmr':D4C3md$744nT/:4(!=>Z/1(Tep-$h#hAoVP;HYYjOe/>%>U_2)U0__[I
+58?j*FNI'QA8Y3insKS.1kFg<l5ou?=Cukhb#9FI/btLC^$.d=Or8pNUU*KF7Mso6
+0W6d&jq7XSg9XO_*@qa+dg7'G5[W^6kdC7>3J5VC#A"QOm")?0^>nY_!#)m6)#~>
+endstream
+endobj
+239 0 obj
+<<
+/Length 215
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bVl:'6==U1PHN1Y!O``'-mY?)X&%gk^nWO>V7C"0)]a^1+mtcTG3a,;h23+
++d]p@Y<kfXBe#IIMo#MWs$4rH#U1.J8;P=f0_q=bnfN["r4l,>,S)TM"%`\$I\8P,
+%.%qrnH[DY%.&I/Uc_0MK0>U's,S<&,KKmP#8l)80X*Ji0HX\1AmbUbL(Qa=6m/d?
+Y+AmL>^uhTq`NbW~>
+endstream
+endobj
+240 0 obj
+<<
+/Length 178
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^""(Dp2"]KJr'LT#i/n7g&hZ1SPdkatM2#n92\Qhn$>l*Cd`hm#;*^D/,
+IA['X"[anj:LAg=U=*!n:D\`bs5j:\s8Rip7f6X`+V58oFejNm$p\Y7(kAJ?^^2^h
+!JpONDbpuM(`4+V)h<T(".T@4_%L"USm6hOJ,oYDj5@W~>
+endstream
+endobj
+241 0 obj
+<<
+/Length 214
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^";:%0U<%p420Jup&1#shF19q%?)CUtW.%'39Jg>nXE\<]B-^T:lJrq@G
+^'@Jp9A_26=i$1mhpYZ#Uo6,8bL8o=s8RTBs8W,WLYr^0#Rh@KaV+[l)#4+c0X)e^
+ruh7>cOdl'^E*U=`r@.A)?)i#iWJl_ru:;B(`;NW(k=.A`r?8\R/_YDi;`h4_>ZZc
+X!^sk(LR6$$1%f~>
+endstream
+endobj
+242 0 obj
+<<
+/Length 276
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFn^C%h3&-hXQ%$b&n!^c>ZZjjD%AALK<#=0^Z5TLjZ>r@\o8*M6X3f#NJM;[<*
++?pJkpZ:t>A7EI%#>tt@C\bbk&agO>[Vr"/"ZC]K=.HE>00#MX&uXdO6nG7d6;GSm
+NiT.haG34H[ncUGn3M0hk"\mUad;+elC.qFlOpcZ,kO9)RXcZ)_n;k'@@]Yb_U.b"
+RrChL`#J!??$+I"$$8HOBl_BYSZp\[)ZBCn__$Ueob##Q(l=uA&gC7QX@?R:mjcX5
+?L_e2:Z:"a~>
+endstream
+endobj
+243 0 obj
+<<
+/Length 146
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^""_&,i"]I42'LT#i/n8rFhZ1SPeMC1O2#n92\Qhn$>l*Cd`o^P&*^D/,
+IA['X"[anj:LAg=U=*!n:D\]h#58)s)&S_qL^"F\s53;l)Aj;.pjnf`*K:%lE4L:8
+"`aVJ!26sK.f~>
+endstream
+endobj
+244 0 obj
+<<
+/Length 218
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR50abc_&-^E&;?WkR2oo5HmKO:X+9\Ej.0Qb8J6E:0$L&1Al4Hp3Z"2(Q@%dge
+JcGNC8LLT":52;\:,VJR3`Dp/h,%TEc<V^.4&T4Dg2a&^/Vf<b\Xme-W`nrcE][)T
+B+\M=,4-(-)Sl\:$3?e33VWah8rF1%.)n'IJJd9hNkkMiLX67_6oOrZ>-EQE"$CNh
+nWW\T/LoK$Er]ZiS>Z~>
+endstream
+endobj
+245 0 obj
+<<
+/Length 203
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y:24UM6F&-^u.;?Wle#WijLCg]Oj@9#"8TToaY98aOeGE8&bGQ^YIEQh4`7rT))
+_OF+Oc%>8/RQ3;aT,i%gT/hbP*)@6G/%(u80ohCP`YR6N^LB^an+_?Y>fa*OjJt\#
+I\E)o"]PO,9E_VZ%+tXReflf?A<f>dRI+Qb7fRQ4bS+T=%a[IG7MSQo]!V!LT\fb!P`VC~>
+endstream
+endobj
+246 0 obj
+<<
+/Length 250
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:d4V!'/&;>m9CbcGi?nS+^Z@u7'rZkC/B]T9EdR']d*0$_4"A0$,cZ-@s[/#TI
+b^86WL!7KW`/;aW=ZK^#EF.j*a)c6!X#n;bb0,[KUZ;Sk>?u6WgonY:<pesfIpTWg
+$TnIR.0Wm15XR7k'O`8]H6c;Z&>L\$K/W*poLV;P@PDYYd56`j!W3HPNK!je<r;+D
+p)Ol75Ohof\cc:Ob'VZ0#8J_@RTFlZK6VY"r=!To54E=fN]`1D~>
+endstream
+endobj
+247 0 obj
+<<
+/Length 278
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XF00l"Tk&4L5/&XZ$Xcs@i\A4/ttTYqBVJY_i;CmQaeP$0o8Nj;/OWC$CW:DSLc
+6[%ECb^=%%9_7U$rl8m;S&RCP5M#\-$n_?EChbJ`LU4F[Q@%o(Ht,mop>a-D>'BB6
+kPP"Lh5^br#E2fM*ePE-J2iZ2_O"[R*Cb$)7?V#2UnWVI%(ugS!0]-fJlikf>NWs$
+:/88LXFF\1eqo7*6h6Eojt3(HV`?\"!.VV2HNc0&!k2]0i;Ydj,i6Z^gV$Xb9WIB\
+dndXe!)oTZ_u~>
+endstream
+endobj
+248 0 obj
+<<
+/Length 281
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XF04`8,%&;A/-$)B$>&Mb.F[UEa0-C.1H`C2&N2ulcQJ=n2PRZHGQ\9)0TA\A"6
+P9NGa:YL)h2t*kS8LR6"01)qi@RE.DHtF>`1mD+=Vl1>qq\-/3%X);k%R*kP@(giN
+LkG=uY*[n*dl0Q[Qi\SI(a,`E18>)L@j6QZZ(ek91rtn['F'9K5)Vp1#'o5'Kj#9R
+U1[t$No$D]m:QNN4<=<'8Uk$0PWnX]>=Hf(=n?D:&5C/N?,tYtB/op@,a!ObdiSLB
+Xig)]Du"_[O<jM9~>
+endstream
+endobj
+249 0 obj
+<<
+/Length 215
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_"YmS?5$jPWs*"#hrK]WI1Y2oimiLhZFK:nD=TT0M>cIYRu8%D-/FGjjki8SDm
++!`"k\2dcr24\5iq,Gb,>Z][_XCi8DX`D'N'?D0GeRUR!,1GnE>`f=s^>BuE$7cmS
+=!7l)6!ALU!fL@mp_KqX@%=l?PeAeA<LtC[V!F2a]g_DNbOUGf:Ngr>IK;S>)BXa[
+0Vrob4hV(#<3*5@~>
+endstream
+endobj
+250 0 obj
+<<
+/Length 267
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UT3Z"a>+'Lf3!+hYfjnGRm?)[E`S:]kSI8?0%JQnjAiodj5?>O.nTra8A,nTeJ.
+#\9;_&+4^J-I-b.1ED`!^[J%aX\9tWM8fdkNCu=lrDOK>'X'QW;QQjn=?J7EPbNWT
+rU0.uoh$fk0=q7'Foc!A,<K(!1Un"\#4%\nJm%[e'P@oIAk99O18n<?]QEB1I;0:r
+i'*Fp,9<1!#.aS!=5a\S#J!04D.6A+&?[_^fD'ZP?i_*H^ZEnC@td%rnfmf/!1-uD'*~>
+endstream
+endobj
+251 0 obj
+<<
+/Length 208
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSV0abc_&-^F3/HXDf&U#e"]:22Z(PiE9+_]s<e1u`PF`K="Os=e2,%R2q"e.>e
+Qp:).Z6De!XZVl/2NDYr+'>=8<_rPFb>#LTfEAPt.Oqe13MC:b>ETSYoQn7?(j<i-
+a3:e(L';r)_"<55?W(JO<@oO2B([6%.?8#a39l/81lpmp$(t%849J,KY>U^!g]ot%
+G5rZ'\c2~>
+endstream
+endobj
+252 0 obj
+<<
+/Length 188
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bVl9>sec/Es6&HKbQnW67sAo,\R6)oF-:k5U&4TbK5r@59-V\9A]h"`MN#;
+i2g>-V=3ZL:f:8]b2ql^E.IaK&2c.n&-EPsL`?Dis+:FP6R)P\aWEd2iVs-*fjN^Q
+_#D*"JUmjc+!A]#rrJMb^q^3iq8'l'^^a=Ys8P<MX!^sk(LR57$CrX~>
+endstream
+endobj
+253 0 obj
+<<
+/Length 237
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTr3srhi&-h&%$@sXh,OAZ#o+\Q8L^L!j[.433Bq]42c-:9n*$JmNOE$T!+>EE'
+5CYEX(4?U:iseI>Hj&qn39':o(p3sGq98d@8IF;`is<:2=5YBk4U0i@BDd4-:Il!u
+#c0teKbQi[@mAeGCKm8HQ[0HI]0r_?[&@GTWmm]=OtEWV7^I[uZ[tZ3Ah0-B8rKh5
+@aZthN]j^S\oWRfKUf*.d6*1o$<R!5!.N4jL]~>
+endstream
+endobj
+254 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH45mi3?&-h'ZL(@mY7sK*+dRP4`'!*2l6*315[;8^i>0Vu=UNcp./YZstO:ka@
+#QOhA"B4qio*#dIcg[Ud$phtfYG3.Q*;[nY"E=M"%YG>*'i3c,RlP6QOu6Q![j*.+
+1a4E'b(MOe't(?PBq"^gL^\]RM)'C_q0s\fO'\p4<bZCgeJe*2g"AX!hS6E;[]ga#
+=NIYUm'dll;]V-;/X;0KWjGA)Q3hBd4THhWMlm~>
+endstream
+endobj
+255 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$#^C%hC%)u3cPUrsI6Lt94QJS8W(An8X&9RIDeBpS0eZ3W>8*M7?ll_:uS;9O]
+>e][t-"]IuV,G<03i,c,=#>d+Z"qg.6DIY%]\k!SkWgK2BHn9^MqsPlagZB,4jKFu
+W.ZO?\:>G"$psa;/)KB<$YCia%><hAA?KNM@6IR"qSEG'i>XO\X(8G,#C\*0r[Ft\
+ro^oVAt))bR4bV5]AuS.Q+FHOLmLTPH'[1p=.*</p$t,Qa7,-bnLgtcguE#IhH?7c~>
+endstream
+endobj
+256 0 obj
+<<
+/Length 305
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTt_+MX"&-h(?JdZYa,@k+G]A;%L"Ym52fY`<4HiWgf\Di+LVYXbIPWhEo4Y.U0
+8]f+Ap^T*Jbb'2MF'?rdU87XKW[iBIEJnu$X)hJ@ejV#^n&meq)_@S[Y-<0?4Y50F
+[o?haD!:2+pP-p5=jR@V!t%;G31X0.h(dr<c;Dl3n=K-BR(GrQ2=*0+Sa=%<gUBa+
+3c-mV`'JOfI3/=rB&7MCSL+(_GaaOT61[mQNg1_W[KgZ6&"6mmFT/=]>CtLsi3btW
+hn]h+CI)"oTS)g2".:6APfJjomi-Yk^B"=2M%V]~>
+endstream
+endobj
+257 0 obj
+<<
+/Length 213
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;N0a[t:&;B'o>6r]&"QoiT/4lP#YUZ#,d)lHhV1kYOF0sbmlk(d#`,VBN(+/*t
++^Zs<b^lP&'KJp5?dX^.?sFZ2W8_6im#G%Xnlnk?r6i=#fBX;UjR\6^kNd]iS3,n=
+fiSUW:+<4;Su(aWRXmo)(3aQej](nU=<=;j.@>]9R"FRpX9B7k!>@-f'/76T5L3t@
+>%H@6HN<fVG>%~>
+endstream
+endobj
+258 0 obj
+<<
+/Length 224
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<RA-M0JQHZ1KI%$j=94G2?sR-.$tr'R-GOjja]a>/shbLQ[ZGrYrS/b
+#>g:Nh^Q?D!D%M4.[1X4VK-sn./a,FrrE*!s*km<s8W*!+s)8j"pb6o!9*qd5l?ZT
+6nm)]p]D^hY_*o",S#>F_&s74lp8R>3(k;B$W[M[nV7VBK+O^&!/Cq-KYV$H!"V;5
+8:n_n(qNtTSm6hOJ,oY).hZe~>
+endstream
+endobj
+259 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"1/Q?*:bXY+0Jca#1#shF1'\.).$tqTAb6C^E^1g/QcmL790Z[tS4h`A
+.)i%O']?%mUca&?8r?5>\NF.3R[Y0D#L1LuY+AmL>^uhT4/rq)~>
+endstream
+endobj
+260 0 obj
+<<
+/Length 223
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY^"<RA-M0JQHZ1KI%$j=94G2?sR-.$tr'R-GOjja]a>/shbLQ[ZGrYrS/b
+#>g:Nh^Q?D!D%M4.[1X4VK-sn-oB$Fs8S^B&O\>&K*Zf8_>jOb",Qa0^^_W=J;?G6
+5iNkK#`rQq1Oodniu12D!=#29*e9%gE#)Oa/.5M!!7ORO7tO)1*%h]ed'-u0&GE>i
+"??W*\m2D0>_-.1!<=dW&@q~>
+endstream
+endobj
+261 0 obj
+<<
+/Length 173
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+,:bY_M:bXV$0Xaq72,d%#j=94G2?X@*-l<jO=QgVPQl,-l.O=1t3I,Z0LFX2\
+Ep7oNV7?/g!h:!U*)BpqP+pB(/l*:;s3:S)s'ti]r.gu;nHX[eis,c-`WlnRbRFU^
+r!X;KndI`"lktA;bs4_<JVq!C4h1X)!!<5n(F6s~>
+endstream
+endobj
+262 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+21 0 obj
+<<
+/Name /T5
+/Type /Font
+/Subtype /Type3
+/Resources 262 0 R
+/FontBBox [-3 -23 101 68]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 12
+/LastChar 124
+/Encoding 263 0 R
+/CharProcs 264 0 R
+/Widths [51 53 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+28 33 28 0 0 46 46 0 0 0 0 0 0 0 0 0 
+0 70 0 0 0 68 0 65 0 62 0 70 0 35 0 0 
+57 82 68 0 62 0 0 51 65 0 0 91 0 0 56 28 
+0 28 0 0 0 46 42 42 46 42 28 42 46 28 28 42 
+23 74 51 46 46 42 38 37 30 49 42 60 42 44 37 0 
+93 ]
+>>
+endobj
+263 0 obj
+<<
+/Type /Encoding
+/Differences [12/#230C /#230D 44/, /- /. 49/1 /2 61/= 65/A 67/C 69/E 71/G 73/I 76/L /M /N 80/P 83/S /T 87/W 90/Z /#235B 
+93/#235D 97/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 124/| ]
+>>
+endobj
+264 0 obj
+<<
+/#230C 265 0 R
+/#230D 266 0 R
+/, 267 0 R
+/- 268 0 R
+/. 269 0 R
+/1 270 0 R
+/2 271 0 R
+/= 272 0 R
+/A 273 0 R
+/C 274 0 R
+/E 275 0 R
+/G 276 0 R
+/I 277 0 R
+/L 278 0 R
+/M 279 0 R
+/N 280 0 R
+/P 281 0 R
+/S 282 0 R
+/T 283 0 R
+/W 284 0 R
+/Z 285 0 R
+/#235B 286 0 R
+/#235D 287 0 R
+/a 288 0 R
+/b 289 0 R
+/c 290 0 R
+/d 291 0 R
+/e 292 0 R
+/f 293 0 R
+/g 294 0 R
+/h 295 0 R
+/i 296 0 R
+/j 297 0 R
+/k 298 0 R
+/l 299 0 R
+/m 300 0 R
+/n 301 0 R
+/o 302 0 R
+/p 303 0 R
+/q 304 0 R
+/r 305 0 R
+/s 306 0 R
+/t 307 0 R
+/u 308 0 R
+/v 309 0 R
+/w 310 0 R
+/x 311 0 R
+/y 312 0 R
+/z 313 0 R
+/| 314 0 R
+>>
+endobj
+265 0 obj
+<<
+/Length 375
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH9Ytfs;&-cNu"j%JH,;:cia5I?p.[!^D.87,>!S#OaU\-rBH*;n3_Um`*$XcIj
+DOd-6;`rlf04?cNoC!qZc>YPZ8\DiLNp/:T`UF.)b.hS6_M+cL6E8KOD]`AT6ZdrP
+$IK"n+^/3C@LQ+_M9esNpQ2!jn`i4ee6XQu'_$<^kZ(4uI5#M-NF8_n)G?[gVdK3m
+\YF2T,BY%)_0/NA5J>Kl]Z^ZL\i8%dFb\UHS*#J"Bc+!oq\j-94Ws8!lk`%Onsas@
+7B9^]0nmeMEr5>&oRbD;Y@VorhF:J)PoQJ#4:gHXofWd@V6CS<Ag>YD3`(6n*LeYp
+MLegu>5ON':!F8dPgrs:.]%,$\3gPIF1?tN!<>\Zf;S~>
+endstream
+endobj
+266 0 obj
+<<
+/Length 386
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V00Yti1j&-h&\*eM%8A]qbPRtfA<:6>lSA3ba''aY]p5Tm>B'gp$U;G[R(,8Dk>
+2@iZDcPH[XEZ)S^k=ba1C^Lgm9js8;@!2V91#+/SM5M$&B5SVXirsVH$/@]7A^9<T
+81-O60MNTAY>-8"EIJ3Ic`[jA56Gap0l<u\hEmI+3Eh3_@>+$L3C'E;*a/m7AZ-r6
+NbbDof!hFm+UaOnd:$+2L=r?5$2XM#Gi@?o>&2HK1\anLd#McSfb&!ZX?pKOYK!ZA
+FP?LbnS@5#s"'[Wr1]2*F[bgTlWOb`ULja)d^n(Ta'J!IXjLl=^R)'pA@X"eLt8IZ
+;X;%THf#jhi2u+TSeV'&2!27O+69jU2]K&C^SB+gI\-.Hr\FODjrHt~>
+endstream
+endobj
+267 0 obj
+<<
+/Length 176
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY^";p[D/:bXY$0JlTs1#shF1,K#h)CQG*.%'6:Jg>nXE\<]B-^T:lJtWL;
+^'@Jp9A_26=i$1mhpYZ#Uo6,8bL8o=TDT5n%m]o?)$3%,s%*1ir;Z<ekCKl;s8;of
+s6]j>s/H%gs6'ECruV=hqE[IJ\Qh;.!kA:5!!>;AW;~>
+endstream
+endobj
+268 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;SV50b-H&(^A>j^JfM-B`#9<``aWK8=1@sUOfX2\fc:Io:D81''V!=j!*.7hR!]M
+=t$5M3,_>*AtnlN*<StRC'mZ&GokRph!e@`:OUT%N-GO,DugQ0~>
+endstream
+endobj
+269 0 obj
+<<
+/Length 120
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY_M"Ca_k"[`BG'LT#i/g(UT5g!!N:dN\580mA=3I,Z0LB@^joKC!c;h23+
++d]p@Y<kfXBe#IIMo(8L#OEC[O9#FK)u^rYcfOH6(!$Oq!'^Q'!W~>
+endstream
+endobj
+270 0 obj
+<<
+/Length 225
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSU0abc_&-^Di.kFAX,@iF"adNbH#XVL0$UH9RTU$@Nf#F3D:"C9%/k*i@@C$3C
+GVf9n`FLtU=KkJ/Y48IL!pPqjd`5gkELcMXS=qbNmkLA"]]KR\Ek=SCAqRSYr<-_h
+7+AMse]b<0Ha>(s(N:t:Al_eW,h4,.G,FKX.),FBVtM=TH?8924e0Y>7goHso;'i]
+b5(4K'p0%O*(7"dY_1g5A@9:2~>
+endstream
+endobj
+271 0 obj
+<<
+/Length 376
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$e0i#VO&-^EL/g>/m$Qs^J!03&(Lh`ad&h]9=iW)58!J5WW;Rl?2\;I$q^4rBs
+Bl0\$P-ppM0a38<iL/Mm5M<otc-i,Y-G)*m`&oFD9kPpRS=@KO=e7!?,G&67.bF3c
+a\j/:;G"p0q^[lo3576kn"26o^GZ'ekej>Mg%g`b@RcYcP9Di7O&/c578#\K%Kk?Y
+m#ULn[+P->p4mM';QM3le/%!T[6ld](CqpaBAm\P<]$,Ohk#gT!1_c*VG\6t*jCQI
+kgkWO/JnVLT1L5eJo5=cig2V>jo"VO\.L1\JO@m"'H.F9rj0Q$fM8m'Mn<[^&`6Y?
+^2I;4*4f(kTc02j0!As+&W2+@B.Q9KDfYfLIg5r`2`;W~>
+endstream
+endobj
+272 0 obj
+<<
+/Length 148
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)\:bY^""<o&o1J7m]'87,fY!Oa>9*LEeOV(D^cVVI):sW#_3L@q2P=n,F_:4W@
+hZG:IV=,,VXC0,Gn*-lL;H0+-jlrN/LB.hMIm@[m(_%/Y:M8#S[[-_R`-Om4%27oF
+p#HJ@!Xo&kq2,I~>
+endstream
+endobj
+273 0 obj
+<<
+/Length 300
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UU!Z"a>+&-1(B'S0urKA?Ai]K9QJ<$#]S?4i!Y+(/!D:pa4GTUl'[5Y->KH9^>1
+<ueit\Kc*;@.l<k0s`s`'1SoLP;Xa+hd`%(mSFqSV/F9I(st);KO+lA#^$Bh!F8"D
+Hg>/M@J5Sbl21XhB=)gBf#=6Zo":/)[dkt4:CZR9o7pVX>P:?t]$b?P/?]t)iL(W2
+r3arngLLDa8Yss8>$C*G/_HTl;sN@$\\)opmHW9<Bs+=.C*TNt_LaqT3P/o_m!Wa9
+G"%_h-UuLI<+&cad(eg6Gfa>!k5bQdeZA0~>
+endstream
+endobj
+274 0 obj
+<<
+/Length 370
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W#IYtDr"&-1'?;B/Ao:WWHak&O_dFXsAA.0QdNJCDq5d5lJR>j3mF/GtJBIphZP
+=>J1I-?+WgJ`MNUA7fJ_.WL$Y$;Zt4[_up7%g>'_\`VEG<Y^Bb$P)`;qZNB,np;q>
+OC*&;o$-P*(6I-,q"jRT#k]JV?`N?I@oXkaC@3$DhE0:9A1VLpEeZH?gc:.6%=&[P
+,O3-/Mu#H;n[hGh[b#'VT!O1bn++)h#"]5;L^rJNPGfE/l03ie8<Y+<A[6#oK6g]Y
+f_csgBLi&^r9jOJrTsLJ4n(XE)f[uS[,X<Y5on#/[@@;Pdg9NlTk#M7AaGpfNZj@Y
+9;n&:bfK&$BIbYO,nhW'dc8X2WeNV1)Z]/t\>'~>
+endstream
+endobj
+275 0 obj
+<<
+/Length 323
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V015t]$['ZTYW(PT??&b7PNP8$(45ZKKG6!#*m?+Quu3o+r3.hu<6NJJBAG?KTE
+IW'UBMG7LLb:kT25B0=KG_P6!]-T\.ZlrL[?g)ZU=n8<&mHKne2<Bnc9$2'l7/?]Y
+MQs/Lq#0U?L$EFhTBJ-s;hg]2C\I#sQK_+8EAfkM[Mqq:bbFK<-=?f.H$ID@mjhM^
+*g<MeS$K/<)E-FlbV"^?C/SbGT1Ik<ZY>QZlSrp[6_efcJc):7+EnN:k0`b7/bd<`
+N/%79aGm&ojGQf$Y%X3VB-CJ?;a\"<hfFBF_?te_9G+k8l%+9g!&GR60)~>
+endstream
+endobj
+276 0 obj
+<<
+/Length 361
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH9_+oVJ&-h&=*1G*fI0A[9PYt_SSk,k.E\Pm>+$_tI;5<=9i-Y5K1`h%(I0>QM
+2N0H(=]7j;^mFCA_t(.*iuEtM4C@#mJ`RN:$@%9T#%bJ!\TC\fO`-;-f[c/QE4(8p
+Q>;S#n#rsG]Y;;X[uY1#YEATVL,,W-g=rWLW+<G"37aqUok^P*Ipm1`%Ll9FB])W`
+@D\*/q/NS-ZrrLF][i/+;aqjV]2qGClc7@2\S)oJUGA-aW1.JnZ2C'WZq[ngXbrQs
+*L'0,]2O,t/<(XH-=c/,S#Gl!s4O]@J]&qi.RYhm8d5p7AUCjs*FGF"bWaL)%kc<p
+#\ui/'Rc,Ap"=<dE)XXVr!i],PFo,~>
+endstream
+endobj
+277 0 obj
+<<
+/Length 196
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<A75L@1uQC1F%Sf6`ra.'*ACL"EI60$l*jnJ4+E1Q]ie`I^jud!LLM*:l7p'
+.DT*&OA"K[=.uFg1mQ857H+82"pTh^J)CHkr!t%i5m/tNnH2IhUC\N_"@!7`!)1J/
+&-p"(4UTR:-L+G6"u,QhRJ7"6(f:PW40J\8GmlqR0PKa6#VK1SY!=VT!&FBE2?~>
+endstream
+endobj
+278 0 obj
+<<
+/Length 262
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V0/3srhi&:i^K.0@uZ#al'6&n,8fL^L!j[.433Bq]2\_2IPPiXJe_#WqHa$A1FE
+q_9WQr,Rf88ok=jApDPY!]&ASAl^q:EK]SPE/(BIFH824FKM/XXgSVe9>/0romVL=
+M55e9-2l7'd3-NS&3)ue4VN,)R+OdL,T^8cl/BH8*X"k1-mnHAaX\qmZ$E@V6-R,$
+2UA$hHH,&h0!B=^T+Q".pN/]p7>80cLb.\4*RmP:8AldtN(F:U2=06_!)uZt<W~>
+endstream
+endobj
+279 0 obj
+<<
+/Length 413
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V02^IlEu*5M*1'+7t&)^I)0D%Ef!WH'K@61?4&5ogs[SU9,%op#joI>sH)5eCS5
+q>'n6r?lfC,bImgj@dptN8t>dALs%AI#6N<9,$)NZs?tUniXeRq2MLt(-]kt@Gr7+
+@c@1B>/i,;n)``Qf.5$_,T+i0r04YjmFY1h,LMgUSlJ%g.YrK5pV\k^R^#2J80"=P
+,.9nI-[(LfOlgQ$MYKh\//r%m#7ajRM*DYhU=_e.PKdcZ[;,s0_QpQ@#:^SD),!.j
++<.XH_HIT^Z#n2(7g9(7N64%IimtD3SAl]e['o4XTQg^Dkh-Bo5m+Q0Ml[p\A-oF'
+IgU.?-T7Vn1N6&ST+l@X]_HfgZ$$7?^ZQ(TLM[rg`7<c\WLi[;F:p]s)ig!,G8)9q
+-bIXVLA_P]!Mg!F~>
+endstream
+endobj
+280 0 obj
+<<
+/Length 381
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um(4&3^J&-cN4.3c=E&`O0`*n"riJejG=JHQ\m?n!Ni:cmL!\Pgci\V=1r5dk_G
+AXK_C84$b^o8GMls6Z(B`!0;7Mesg7.=^N+LA-A(S'+c9,e1P#nQj8sB9?gh^;h"M
+GE4[,j`1)=5!QbfH$LoJA0+"^(_!o>c%/"a^^@jiU&g$f""\X0NX1%rTnrbQJst_M
+kZ);9mLcim0EW*LU`DM`"%3M*5)b0Ti*!E3U0%JH5WF9]%877PM+VML#ZY:E5uVH!
++mSU9B9Ygc.Qjo]LF:4E&K"&,B;'h6RoCXA(0L35#L?iN9KX$"M2+o3^`Q64'52\,
+XjNM\-IDC^E)8G-LVR?jl!_e$HOc"Sli4aY^FT*nrttfJbecj~>
+endstream
+endobj
+281 0 obj
+<<
+/Length 288
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um)]l&HV&--)^#,GK$#i#e55U=!Gb)]MV8F=n3BKLB.Pg&W14:7.baFJZOit;[1
+R.H*Z*4CRW@u3'uXjQS,]7MQc&uG-&hGq';\bl5W6Nb:Tg(K9%Sq>tkI`)SNk(<?^
+is2"dP#(jf8Ms:B,+:H202a!7Z>8"I&P_W]12!r?;)BdtkW8QFCXt,seB[<bXT)1=
+Z7f)KaZ5un1G;=IW6(uJ:<U7Ib'GN.cXVhfmH#9;kL_V5MTnK.=;*a6k+R4)$ghD-
+2:8].eGmCrJIhMp!".G8Jc~>
+endstream
+endobj
+282 0 obj
+<<
+/Length 350
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V015u*,!$inZRquoYNisk2U'JMl/OaK$KKo)rpJ@]ird5>:E(dBXc#2WbCZ'\AB
+%O%GmOEnsT*G?l0b,M,Q@k'"/:?]F--S0>e]98_[6=R7U4lW?Tm$>d6ZV(U5[^eSs
+!jh$H?CkLGYW4(Cp26scm7J5s6H_J:r`&B03"Yq0"JK<08UQ_,@;Us[&KLC[Ak;[d
+_Pa!u&&%K*LNH"ghCVhK*[Y-&V$m@X8-%D0:+R2jY`!b18dVqL>U2_ilD:1F\"K?2
+,(>T=IhmEIh$!2QZU\Z,I+Z/nZC=>:o&u$og33trf(W.)j<V"kABW\`lTk#$oq5fp
+mE[Im1jFYf!s$phGu+~>
+endstream
+endobj
+283 0 obj
+<<
+/Length 280
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V015>&jj&-hV,MhPkcKJs]LP?0#qJc,\J&@D!.C2'ATSTL0EV(>j;26u9E.8too
+3I.dq)fU]1nM)^O9TaD9G&B7)$d6k^hC($&B61HU[H1sHmHKm:'r?t](R3e!N7-8T
+RYC$e5MeV3W7nJ6I%?\N`97gM9ac%Ic"L__@u8dp1tJ6!BZiV85]`V8C@m9'N^.^F
+9*"hE02=JPStgjp"aHgibuMi`=bI3P,c&nVOB,;71n$HNdNH>>ifJZ9)glD^$*p[1
+d'fYRqAoVHi`0^~>
+endstream
+endobj
+284 0 obj
+<<
+/Length 392
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V01_+MU!(r5Zp*X91I"bbq?[*'ekJl%hlp)pl/%kp.m;"Q)Vik^Q"LJm>O."-[>
+ejIOAf6j#<DMPYbqEa^KF/7>gl!3UOPTFTtS#@8XmR9=Yf4-["`7]^].GgA7@U=rY
+>3/\F?/SCeo;`P$793`pa+pQs;4ad&j-HqQ(mAb`%BH.7!:'b=55GDc'J(UMl"C8:
+4'?k&n=RT7\h2o6cj"q1^Q;/t:&Kr!M=2$n!A8fHdipLT!.!pFO;R-Tm+Gle(\g_k
+ODSAmC^o949l+W68ZW"mbD3<QdaKCG(p`WfQ/sWW\0gpZeLn'PFtjqF)n8;e`,j8T
+#UtUE6rjk1+J(Bi[TL)trC?i[fH_`\Q^B#WCWr%<(-&*fQoHV86Mq5lS<Xro~>
+endstream
+endobj
+285 0 obj
+<<
+/Length 337
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W#I0hTAL'ZTYTMnj+KKZjTV)e!p5JQ9N#JlWpX/M.[=A%/:9>-RK7]As%H/k*kE
+pYK[R"G\7P17A%GPI-:,\Dk%]e)R-aB1[sS2R>G]ilQe=q^5OU;W#HXUqYh5WRj)l
+Z&uW2Nit*SO4%?&i&ua4oK/b^Gg']W"To/ZAkq\0:2DH),o:4<("6TkCt6H1cU;=1
+%+4R8d1?_@i*_@qLnt4IL2b?X75u"/'Ga-q#TSC?E.fHXs!#G>aMF"P,J>>8,J>=o
+NdNjmEFe+NLOVn[?W%fZ*E%PfKH"KL;Ah6#6[%.ED)R(9&/d>&),0f;5V?9OQ1"_R
+'ff".~>
+endstream
+endobj
+286 0 obj
+<<
+/Length 202
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY^";:%0U<\Q7)0XFSH1#shF1,]5l)CS]+.[]E;Jg>nXE\<]B-^T:lK!?2[
+^'@Jp9A_26=TM'=qC7^DQ)8SI\g[LVs,Va2s8P;SKKP@#s8W-!%kpkA6@8bHs&"RW
++Q=OoE=bMX7O=Kh6oum7%O1[FLjrf!*ej@k-L=Tc&aR(6Af/>a-b*DE\H9;A!s%:VT3V~>
+endstream
+endobj
+287 0 obj
+<<
+/Length 198
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY_m2-/']10-(e<\UjV8290Tj>&Uq$6(Bq)?M5W/4$RfL'l&5>Y^kqqV_e$
+AmG0R5Y3SVVZ:?5+Q_jg:f:8]b2ql^nGiMQ#6+Z&ru_pEs+,bEiX^XFLCl`^6p6M(
+J0=j/L^.nY+e1Lt-P"%NAiS0J-eRA\5E,Am+@a$8)OOq9".\:ip#HJ@!Xo(aLRS5~>
+endstream
+endobj
+288 0 obj
+<<
+/Length 278
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$b6#+85&-h'G/.+`f*^K;Y!]:8g6U:JjXjAU%?$QEmfnH0Yaqo'FAZoWF]ge%?
+15h7/PE]N7hh1a^r"Ddai.PH(N[>_L]Er:Bj&h$:7j07T:blJX8SLZnMT7II*tj^.
+0&B^%CsIh7ED+tH!uCrsAUs&gC/C@M`XS6"H*6*K2pE"RVKW!=PiVS!p1L@e[p13D
+@EW,lN<bFF$W:U2W&rcVVao:2^)X]SIJop?Y1+q$+E)Q!<7q[CI6X9XVRE:%/ejs]
+7SERu!*cC`li~>
+endstream
+endobj
+289 0 obj
+<<
+/Length 275
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;TITZ#7E4&-h&\*fP!8H%Xl[5[kA27Y2hHTi*uF!Eqqs&8XnR@c4XZ]EiofNuk$#
+cZ-hk=n;O/rE%2s6_31(A"dn6j0+1XjI2tac3oZ0RR;OQ[]l\QrPi)0]&jFL`TIm0
+;gmS4J)!<^Nq=mE7UFoEgOOlsch-4g#hjh<RXt#<\[SM\UJp0lX`AE^X<cIr,]#d`
+?LO:ph2-%P$I7.I_Rq]Ljpg=hWEpdjHDT\t=FK95/fd:i/plc5In`8\Q/n[d(KM8u
+_>aKI\[tQ~>
+endstream
+endobj
+290 0 obj
+<<
+/Length 244
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`>4V!'/&-ZI#"j&S@J[p:46=XTd:EkLL<ZXLX/MpY7<aH0o7IULcDF&N]V5(<k
+Ahu*HH,W0MSa%WP@\Q;ka%S+Kk?OlfA3(`DbfJ`oo2:abk.)aQ7Zu!)$frcqHFr$0
+;D&]_@fSe#1sm7]1Wu&'5Qtfij;UHK9H0-A,*'IX`5Y!5n[tVP4WYX-&U4M0)6sO_
+L%AEm([Uhb]MJ\BBjt1S%4CbuQUf"%Z79E5^B">+$aKs~>
+endstream
+endobj
+291 0 obj
+<<
+/Length 319
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$e_+Fea&-h&,&&KHj%oA^?!Sn3fKjG0e"ns.hP7M&J'N>c/fe"7-qF^.sf>o3'
+E=^6QJ$RgHEqgcFAEG98PV\p$RGl>JV\d!&oLc[1+gsDWc4+OHl'^Z;V2q,c9(,TN
+FM>7sCl3RgJ,<>FEPmC9>m$ucje.j#S&eIfd9mo?4P7S!K6=9hh7]q:Jb<"Ih>5VF
+Sg`npQdu\!BT'rFEY&ai"[sp,Fk-fd6tm<ki+6O,^=NTk_,1KP\*<k/[3ccmH[fG"
+J*";oklcXI>0B[`i5nBFCW@)=e`YO$R?a`?Bfcp</a.cb#64qN.g#~>
+endstream
+endobj
+292 0 obj
+<<
+/Length 239
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH60b/e3$jPX&(eD5WK\$S[mg2&^C*J:e:*)Y@*AffA&dGNCi?E4Cgb9oLQI3OE
+?^pu\d!3ZeXl6hP=N^-ddZ#G$WL4B7(06aL:01%D$BH00$Fd=90\rp77^h?trHY)Q
+bs:MI.ZId3BO$N(2*A7@O*1fUp7g$7\cd.#jLPnOl%U<NVfO8aPR"#tb^^elIin1r
+D#r/G<<5C>;)d^&c;!,Y[fR[rTM7l\q@3Kh2h>u~>
+endstream
+endobj
+293 0 obj
+<<
+/Length 284
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;O4UT%['Ys6r6fBU<_0:I=[MER)_%3c&TT]UW7gDK!6*S>%UK8piOnK!jFXY8B
+7$Q7NB(ug\8]]fZY_>Oc%GSq3Nu]#Q2QX`;pi[$.5&a2fVP]@E(%_R3B';9`NVF'd
+hP?2j=MYi`S)"^/!A_Aa`*FU/n&W0`]%hB\9Z\Q*)jR5jd>dSFRF8]H='J37'amab
+bHee&.UJt-?`)8Hg-j*5L;N/420J=odFI$MT8EA*0b]:;l/S3hAM7g:WF*`Q0TJS_
+Hq)W&0RtT7"ou!+YSR~>
+endstream
+endobj
+294 0 obj
+<<
+/Length 304
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ta]0i!Be(^4;*>>4THEs2IM-m2VgOfY!B@A9"lcn-h+>-h`mL,Zs8"gFJ*1=%n;
+K]^J=TAe$6W[l?%dYjjNWmiNMf0\>jX?"PuR`!;mDUOk1fsQu+CKX;RcTTBnO#L65
+eir<\a4FYO>6VYC0Q"r+mg7XX*l7[^kJX3*K;f/]N8;>NE^2>B,<S!(WOE8\qD3j<
+$WH?9==,YZ/"K=GL<fg?M!^@n?pb"6;D;#[*.PI:%<6)uO%<A-$\$(S`);QU/IAIG
+)DZJH!2%)8'9eIH[u<nrO*CcfY*CC1)Z[umg&_~>
+endstream
+endobj
+295 0 obj
+<<
+/Length 289
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ta]0hTDM&B=6n'S0t=KZjTV#qjsb4;CO5B]T9Edc-,78LdB:'WZG;-XL3J;FnfG
+eu['3Y?>K4mi'A$><_<(=LMl?d*\FYbBg6uHeREggcs2hVrj"69?e3SW7g!sF%8rS
+bqIDHO47O@XG)I@JMQe[W$4m/Nqe9c*"t\M:5GXF8"YDE5KNJO_5Ub2A.EC]6'7-a
+=,MK"J8lZM.,.#?0qcu7.%:<B()XGq;Xt!&`?4]U(*8^tZYY#LZ;t=`#oj",GXlmV
+j1@d)_!?Y+Hb-'2!<DY!nkK~>
+endstream
+endobj
+296 0 obj
+<<
+/Length 255
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;MZ"a>+&-h'K`PFD*#Wj]$S@aKA<"!=A[h*$1"!j1a&HaIKer\l`?V.K3f2-jG
+9t/+$T37*%)*XpbTA_a'4Q)ZH24FglC4=S&9#eql^dH$4SX)t#o9("^eXVVmC*F6i
+c-qJ+<GosKp"P)R,6KMMr@Imr!/5pJ2_I$[.j(PdM=qYN3SHj)h,Sg/];$2(?3"FB
+HiZC'TB52ZPKm-b/dg,4eHWXt.YCgUV[X`ba*/eS00j#;1\r*l&C?d6~>
+endstream
+endobj
+297 0 obj
+<<
+/Length 283
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFp4UT&&$jZ8;LI)c;?nS,F=ck`[quAea3dC^JFAR(^io'$c'JEAS!kNN9`h\\[
+FS<QJ%53e3:Keo"Yo[</F>5K%0t8pAL7lf;9anS`C36<+0K<E*0*Zo\5o]_6(W#Q7
+qIm[*a10slQ4ORgLbc]/7`shJKR(re:0+a&1+/-^*Js?CGo%_28YWl='e2Uqi??us
+KlTt7>H1;-W@:V9UtD*a7(HDjfp<[NgldQcSa7Nd-'(tI.3)KAoAo=Wb29i^F$Aki
+MG,^_@1&V-!$-5j9)~>
+endstream
+endobj
+298 0 obj
+<<
+/Length 321
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ta[0hTAL'F*J)"-1$+>:VKGckmF^XUM9<V@^-*!,<s]-s/#IM[.<8]LlRi]uGR=
+(qUL"r4X$dVYQ,L_>F9/<1TtA3\"-8X$rj+8p[1GaW\]p*1)%_m[n1C;K8V7,o'L/
+U1/7dY"C1tC\@Dtr^cF1JeJ,r!?&/!H"9P.&X-lP3mgC9"9LJO%jRM0()mZhbb7;a
+c5=//&<g[SX`3:?8gef'SK%VW^\opj[!US:p\Cf5r1:]_&(?+%o.n(^pMdBO["enO
+aIp/daNV\"2u1OAs664A"3h$^*U#8G%q^-Bn>/33JhC9=V8!$2dU;P#~>
+endstream
+endobj
+299 0 obj
+<<
+/Length 219
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;L4UT%k&-ZH/$=TAC+`d\?T1Die;8FgeXZV,;=t!RpOM]Er#o6hliWWeX+uo#W
+?9mAfCE>U/TYq6D$?_);Jm/B`ck8A'#d^51S#spVEW]d1>(W-r#t2LtTE8O;GWMF?
+@&?J3eFfoqU;e.Yg+1h3,Be'!-ZDEGp%kc],1_&pqtIh$dKpg!4qr;r$K%q2;K\hV
+NGA>n&BkQai&:Z(XI1j~>
+endstream
+endobj
+300 0 obj
+<<
+/Length 341
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTt5>Hks(^9Cd'I;.HKUE2rOH?;[P#W/E9XO?jC:T$f4!P:EbInP,JnkeR!^fID
+GWu+;<LT=_hRpss090#)@W`Th3)WVH*^fHK[P>Zb71@L/^@?I#Md7P)HaSieJ'BA"
+mqscmYN/0d^:ZUcjAHF.MA-rT3Q">[)\$"pkH97-cl*:i*aI3l_.NofNN&!]i8E@7
+a<a[qfaN^2'46G_Q4es[9ER`aq$<$@_*C[S8'Lc9/G/AYm(F]PJVDBRR[m^S,O>OK
+XBq>bbIM$/IpfVXOPPj]1Zt)>N(2Kup'ApX-p.>1G:hRS5h+&GF'$Q45R[2si[POa
+ib&8<V[d>~>
+endstream
+endobj
+301 0 obj
+<<
+/Length 286
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$dYt>*a&-cP(MM#X:&U%JGmhRgWb<f1t$6cD>!,?5AQo5bcYfnUd/Fj]0H%A]!
+`NbVVEsG;./MmFn^l/]R4Q[U#,K$tP(IRY%/XeP$_rFsR$p;;P[%V6Nel)0sLoT_+
+Nq"r%r;!UFV<4A5P&2_S869!3Dk*&4n3IEWpNu_%^#-qur-8HiK,X`**S_(3-NtuE
+/SZliJF_,fj=$;(]X021e>Z^H`a542TJpNgGLej0!T.W#%'E>P(ODYIY!!`o7D])C
+3)cOW:8Wf$k&_RCeZZT)~>
+endstream
+endobj
+302 0 obj
+<<
+/Length 250
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$c0b/e#&-Yl="j&S@J[p:4&P8ol:_P9O[.433Bq`omN#.,9lk(Wp#i?0?K][,,
+Zb-6-Ym-Z\4Oe&@;4s7Pm]mgeJOZ=[Mi^#@^.FWKJ'qmZrf/N!ZbosljEl;=?<>6-
+$CDNXjT(kK!LhMW<0.G]JN!h<dAFU0f'?ShNd.?C/t`0BM@#8DNaRJ/X<DI>V(2J/
+(pUnR(9r/W,7\.&bs[qmO't>?X2/,ThHMUe560C!Eg6"m//OoT~>
+endstream
+endobj
+303 0 obj
+<<
+/Length 311
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$dYtDr"&-h&#>:`I38(`4j9`d>c/oW;/6I<j[33T\cZqc4lQ+k\$.t!<r^-KgT
+bPofBSOlrY=QZ4nR/G+(r%>:?c'L=am7Toe`*]Jr=#Rb9,\/j;Zn<eQjuuE*3MU-`
+G\o6/ap7h6rjelr`kn4<JR/j!E;2Kd'n4p9:gi2KfUp`>K:N[j?/];%$8LNYXC3t[
+F4TYbU/=0M#)2#H/Bsq0od:2nq'\a=nZP5[M6<#_6*-,*7hsCAQ!:heGHa11GK0s)
+D*"o7')<0]ph2H>R].XO>Wq=aedGWnQq=b54ji-eklqIj~>
+endstream
+endobj
+304 0 obj
+<<
+/Length 301
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U<m0i#VO&-^F?>QdcbPj*?D!4I_9,na[`!"poGTV@DK.4IMM8qe:*&?b$JA<5Zs
+KsdP@J0AW5nRqUbBX;bTGg<5ON3eJLKV)1hV.hPr_YK/RB;lB[V\`MN'L2.FVta;)
+'JJmX32O-pj7g%UMMc0R[eN0C*u=8*KnV0-%Q."OjHW(XKH]Wd)tgR=BEU/<df33:
+.X1lk8dluqME_M9,cNUAdLBb5h1r@p]^klN[p!RPe"q4A%R,glRa'9S1VT)o"afMt
+320<Z`se32-RbNpbXd2YLMdHFT^Mm]DTpet~>
+endstream
+endobj
+305 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U<j0b/e#&-Yl>Kul.k@HR\!#R%b6:_U;ldE2QiV1hBS['Jab(^mK$L't*=(5-g5
+X)6]hk5SuO)2=O;35T3`8Vi--c4Ho9(h++d2Mk+?fUj9&&F;)G+]t->Jp]@E'4QsQ
+bO#REJXru-XZSHhj@crZ923Sn<(ke=.G:1-Z2+tYp8g7DZ7;(sBS4mi\(hGhiA0ci
+*'29aTsaY*b/,-oKfbBmkU6<:=:3]tDZIrkY)<~>
+endstream
+endobj
+306 0 obj
+<<
+/Length 248
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T1K4UT%k&-_!W'S0t="QoiT/<O$ArdZF#XZV,;=t!Q%@U\MdP[#Kn"TgS2_EOTd
+`AbCj")g*cCSZf1XN#\U7Coq5PM!/YC!UPB[@FM'[PCN&>\\($S8on6E'@/@ktDWb
+j$qJ%!dOu_g8G6?8eeeqanif@2]jD^I5i>*cdd;kCQTJG+3&\=aP"'XX"j\p<)H@a
+n=gl`RA2)_B\IqWQNsIp.p]l]-r=q]bpY8L-E/QW4TL*ZGUE~>
+endstream
+endobj
+307 0 obj
+<<
+/Length 233
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSW0abc_&-^F:KeQ5]i*8N+S$884&/Eted)lHhV1kZ:C1ZXp!Z#)ei!!#U#T5"M
+HN8s_`I+'!,S<M5i^dRBTUF_5_\$@1h:eZlN\tH3[Kjl*W"$`Ne:JoAq.bd*P[3;E
+FP2;;+gi1b',&jP:fLaJ9$`@2UT\GE\3LV]Gh;iWMq/i'`XDgGIri"GgloF]qT^-5
+A4%jAT<_n5UT3<X>pnN`\V2ng"oqU-^Ei~>
+endstream
+endobj
+308 0 obj
+<<
+/Length 293
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ta[YtDr"&-h&S;?WlM8%<gF9l_d)f,-I^9He(\.sRA3MK\!N>[ckI*E`(T.sZ]Z
+DMk[5Z\c[N^4H6,J(?6_j96W)CmSs2?<?baG-6THgPQf&Q"J1`*N^50Y1V%!37E\@
+e\s9/C<lY>nbJK>'?1eKE<<N2mN(.,P2&^4I]HDS]q:ufL9EgOL3K9fn1Nk<R[rc-
+:n\e8e#TmO;ofAN1)OVZK/p;ceCU\<+4^5C^](haI-L%RkXJf6QjBFCaZOSDEk1$/
+gCRQ(B;3-RUY"_:ThG5"!8SI&Hi~>
+endstream
+endobj
+309 0 obj
+<<
+/Length 268
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$a4_hl"&-^u/'nU/n#bDFVP+i,F$iU1-#UEC[OJE<'`i`n5_POGHE8bR\kQ4Yk
+`Nh/'RpaZl"7tB.IcR"LSeS7`l^Zi?>#SSG11sm32(^'ehEGXS;te@F7G19Wb%At@
+Q;Km:G-h(=HGMSX)ufo=gfJ!N[DH=29tpe$2(lT9_Q>b'78Bt93k*?Ul4O-;M!P3K
+pkZa7OSn*s(E/qF_nnhVqS7'J]5n@Mi"aP!M_U=94!^s0%R#>c,Y/0IXQbFf"osS1S[A~>
+endstream
+endobj
+310 0 obj
+<<
+/Length 314
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um'_+MU1&-h'G4Tso18'&>n-BY1=\PO$b6-thIJpJ,1oXlb=oU&^[o[)2\kmO;r
+4Y6IlRl4)^&+dUGZhuU3\DR[#PWZ\>;8KF^I8X'bBTGcW>a@./o(#Q)Rdt*o.a%3k
+7/?KFL5#JT^V>6SW4lgo+g:E5.*?rTT6OpacbX?>hHB6!]oXGpF?SBMV-o!WX)3Sc
+e!`)@[HW"aBl%cuIUn"1@hg\2&0FaOCP1+E5j"8[prk&TNt2O4"7Ch&a!,%735DFU
+`X[#hKKYF,R7)V31Xc?=S\<=!<k1aGCs2pkX6GK?"ooH<eDp~>
+endstream
+endobj
+311 0 obj
+<<
+/Length 286
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um&0i#VO&;B(F/lp\<O0E[+8;rkg;FhL,+@3sIJ2.963lEXCiK>]oEfk-JjU7$Z
+/M'*jK0V]nNV$$<g^,RRd8<3tPh^k.$[o3a+]5P`j$J43buQJJ4hm;]kNA&Pb;5;[
+?-qWLe"*XBKY`TSi&kR9)g_d(mb#GHVX^Em-'lXU5PPbQ:K@VQ!#@Zgi"BBd*52Rd
+rl=/"r&%0^r\L%fdJ\74d3=Hp1pX__GYr]QGZHMcM&*EsO!QR<%4-1GRloso7bOIp
+#Eg)9T\#ICddI8<kN^8%~>
+endstream
+endobj
+312 0 obj
+<<
+/Length 323
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U<mYt>*a&-h&#$SG,ZDd_]2o^9eS,h51[n-VH3+$_C]'s0D<7EW9kM+(`\K.h3.
+[TMsAp:LKE^1(aNk@][(1S4,>^>NJC7E1BK^!^FDY8L+P4?LmL:jdMbAOYiH:ZdmJ
+bDam2m02[;<]BsUp@1Q$-"@%M9n7Y:Yu'9b7peS'I+bN<6%:c/^*i-H.tcM8gLG!a
+"o'f5<fo8.NY8+CqSc$87)R]/g'.Sor*^=Cs(<$CBT5Ee3[d7?@H01@T*YEq5j0m(
+hVd$DZa#p`(-TqeJV3G@+gM/28]S7snIf?i+Q(Nk6R5r;F@SOt!!G=9V>~>
+endstream
+endobj
+313 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:c4fZ@a'LkSD!k4RDjDI5H&:_iQ5O_Q5d)lNjV1kY7(aXm4>>eA/NOXTiV[3+2
+G6c!(#/5-_-670O6gc6_O;%44Tfo4s).Qs,rC!/`]q\.od>HBb7=V$[ROk<e=8pOd
+_eDd>N6tfki4H44?%f.<D2>*(10i)75j@806";&:#4WGH^OZf;5Zd.La903o!iPoc
+;(6t9]OkJ+YF3l+URAoTG9)pHlUubp1BAtD/FJK(nRtT#gD^#n$.(f4-%-!ud;Q)K~>
+endstream
+endobj
+314 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U#s5n6.6'EtVr-+jo`lYe'9[RbK`@H@Jk=qL,*2I]^NRG_2p<`I,tW&7Y7"9,D_
+k$orB:#N<%-HJmL+?^GPa+b@m#%$K++gijbb+GD$R.(Lal?NrA~>
+endstream
+endobj
+315 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+22 0 obj
+<<
+/Name /T6
+/Type /Font
+/Subtype /Type3
+/Resources 315 0 R
+/FontBBox [1 -25 135 84]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 12
+/LastChar 121
+/Encoding 316 0 R
+/CharProcs 317 0 R
+/Widths [75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 45 37 0 0 67 67 67 67 67 0 0 0 0 0 0 
+0 0 0 0 0 102 96 97 103 88 85 106 0 50 0 0 
+81 0 0 101 92 0 100 75 94 0 102 139 0 102 0 0 
+0 0 0 0 0 65 0 60 75 61 0 67 75 37 0 0 
+37 112 75 67 75 0 55 53 52 75 71 97 71 71 ]
+>>
+endobj
+316 0 obj
+<<
+/Type /Encoding
+/Differences [12/#230C 45/- /. 49/1 /2 /3 /4 /5 65/A /B /C /D /E /F /G 73/I 76/L 79/O /P 82/R /S /T 86/V /W 89/Y 97/a 99/c /d /e 103/g /h /i 108/l /m /n /o /p 114/r /s /t /u /v /w /x /y ]
+>>
+endobj
+317 0 obj
+<<
+/#230C 318 0 R
+/- 319 0 R
+/. 320 0 R
+/1 321 0 R
+/2 322 0 R
+/3 323 0 R
+/4 324 0 R
+/5 325 0 R
+/A 326 0 R
+/B 327 0 R
+/C 328 0 R
+/D 329 0 R
+/E 330 0 R
+/F 331 0 R
+/G 332 0 R
+/I 333 0 R
+/L 334 0 R
+/O 335 0 R
+/P 336 0 R
+/R 337 0 R
+/S 338 0 R
+/T 339 0 R
+/V 340 0 R
+/W 341 0 R
+/Y 342 0 R
+/a 343 0 R
+/c 344 0 R
+/d 345 0 R
+/e 346 0 R
+/g 347 0 R
+/h 348 0 R
+/i 349 0 R
+/l 350 0 R
+/m 351 0 R
+/n 352 0 R
+/o 353 0 R
+/p 354 0 R
+/r 355 0 R
+/s 356 0 R
+/t 357 0 R
+/u 358 0 R
+/v 359 0 R
+/w 360 0 R
+/x 361 0 R
+/y 362 0 R
+>>
+endobj
+318 0 obj
+<<
+/Length 264
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\YmS?%&-1'-*=B:N$/Q2+>H1Pu6<17BTT^IjNXgrlqJ#nmIR;'bU%'aPTp'R0
+-P)BQjDlCeZRH%lEDm76:ZrMP'p[d(+Ob!DdO=&AGekXos$02M^Yon'a_jZnqWX=6
+\&TB8'c@L#NK"q9.:WM]6UAg2e=!i9">@f/]3Ei,]6@pF0JqCI@#KsmjIjAP_Cfl<
+K+)5Wg6KnZLdFiPPYQkRCLH1\d(gHM3r6\,U26P'pcUA4=3G7K!NoAVj*Lc],OV$~>
+endstream
+endobj
+319 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<A76'<%p(,0K)ud2H!(#j=94G2?O9fKaeb*omh&eHBno[\Qhn$>l*Cd`b&KP
+*^D/,IA['X"X)pkX&)\nR`aaVU;-a3r1k!2Y+AmL>^uhTnuWK+~>
+endstream
+endobj
+320 0 obj
+<<
+/Length 143
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[="mH)1]S.XjpHk*$7U^7Kj9?T5m%\Mcp5oR5o2p7kAiS.Ep8>]7Ci%R^nanZ
+Z[s?e^8J/$8Ps1OQ`#bY&,uSNf`+0DrdTIgIfmT<#)7Ft";D*`!n@9N!nDA&H?'10
+!<rO<<$jd~>
+endstream
+endobj
+321 0 obj
+<<
+/Length 173
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X="mH)1]S/cjpL5d$7U^7Kj5rI5m%\Mcp5oR5o2p7kAiS.Ep8?0R$_sZHN<0;
+oUQ&R'b%YF4ae&;MFpgX4C&[#s8V!U*s@rs`#g]/"&(lYP7/T)",Qlk!$W:Wa9E3t
+%jK^,2h9G>P4Tk9J.]T4Ll:>7p#HJ@!Xo),Al7.~>
+endstream
+endobj
+322 0 obj
+<<
+/Length 380
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`A9hNAY&-1W;>njU/&X!N8gBY-t$9T'i6I:u&:mWdK>rP932ouZCbT_/!*uB>J
+(>=fp1Xf$<0tH024'oJ^d_-(Oh2DRWpH4tk#C"bJkP<@BB@B#SnR/pi=u+q(iS"a<
+S+#1ra4IA[D]E5fOIcM]M%u[1+oi2H"cjVt5`;J5eHU(^Yr/\Mjss,sUG+<VJS:Gt
+1gIkP>+d9;@(G2E/%#<gW]dU&elF2*5hRm\RqnVR;;1eVfb(_M6J=nCQWe*f<mSW4
+P+=IIe[2,d8^]:N>0CY4Y=0_NBOKE,XF[bWNII"k5c;U)'I^]BHnCRPaK7^_bp4d/
+/OgGg\XoX@J?KIDXu<+)=]q#c6mX7cBDE3^4.Ab31B9'h7(<~>
+endstream
+endobj
+323 0 obj
+<<
+/Length 385
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VGN4\j!N%#,dFLm02U81jo@3jaU?dK`<b5_=gp!$_ROk4WIO8ro&g6W@PW/X2r/
+Pt-`3hUcIFJ+AT6W-hP>p<(-Nk/5\+?(QFjm@2:V@W]8qRr`MjB4'8f]Vgi?c]:$!
+11gLD^HTEi9Rl@?"*@'U5XB#cJ,sX:35eBYYS7uk$8)[*<1#Mu"")2.@_p/R!(Id'
+Q9[[N*P`]8JtS%49*1^3/VOUBM(;%\J_EK@irY[3=>cQ[B-EUmau4Bsq_O5b1`*Z-
+Q`]qFkKQ"7Ce\3<YlCA?8@eOLe;E;i5mugA0I[$L,I!aA'Ka5B)F2<&!mAF_fVoFQ
+PEj1VSSXD.;Ha4V#]2&s52$!@)"YAcGp-m-O#T(B]m2@t!rtO<:q$~>
+endstream
+endobj
+324 0 obj
+<<
+/Length 285
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y",]o'Zl'EqkjKlEMD6LG6J-5$9dMRY1(6I<j[:eM1-[rs&NQFod1@EL$Rkf>cD
+@9GZFb^<Y"cMW[ARcqPJ;.%?c\kD-5_hmiGHTQIJoe#^_p)p\Hif+Eq&hj0G`3\!l
+V@r&brBC2H-3)EZ]o">?qe/>;[FDRbBh<eYG$m[C91o_rVm']<711$LVFO#;,&!st
+kS_r6?V)oXTKUq((IB(g%%8uRBut^'[%IHlEA3%uJsMi6qDcQ?XQY?B["HMmq:@jD
+7`53)=6@&pjYd+s^!k:~>
+endstream
+endobj
+325 0 obj
+<<
+/Length 360
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFqYtfs;&-cO`'q7n'XbCch"VeKMd;"kD'.HVfap1a9$]W`qS#pVG,FfbX\ac:0
+NR?`8.JR:0bP]8J[.-,anZ\%u=_pmoI8*Me/?t"BX;odC_sQlS<ZP2LYustIKe9<*
+2s7HCWk49Ec`[l/?,X9djq"$bGiPc6SkGX^c\$a`@5u.D_+7%6YYlAI_]-^*`<ce?
+@V,S#NE-=;QJK#$HX?g0UiFja_IGqo6HB3++]&A&PY:u-=R_g`q)LYb@Im4GJcEtA
+.&0kL;c$VYOLkgKcuWW7)JS\qVXE>=0,K%;GXQG.ED5)`KTN&OD\5[@*:T?$1h:+7
++Xr!rl&b&EHBhB%QQ<3mEr\ss?+B~>
+endstream
+endobj
+326 0 obj
+<<
+/Length 410
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSZ5>Hnd*5M(WL*g2P"F:(PN6fR5o$g&3':h793]^qrVVJ7Ckn,s31gp@]g&euZ
+C]aDhOHaZV?!X[l*R*&=Z0P'V>*BKFe7N%?l/B9eB9g$@]TZhqb%K;TUqAXI89oTq
+@:mqNYclCA2q$Nffa^$?+o5a+Si/'A4X#.")W=t_.,VF!fh"hiFtF9jUNnWXW!sf6
+(<Mt8Oh$FBN+jtP>"*5e&?4n24jk$&(/*t,AK2mo4%2g&&17:Nk@e95Oht'%F))%#
+erIS72+6SM(CS<lVNA<2#hI9<Ep`+"aA"$B(2J\5L$Zm0=ZW<Bm=&FK(9Z,UHad2i
+mR?Tg]7AZJ4FubJfRG#tg^pRC%f"roS8[d1n\GQKQWJ%0FS;WtGK/=#@b@%,^F".F
+Gp5HT!+b*[e,~>
+endstream
+endobj
+327 0 obj
+<<
+/Length 346
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_&Z#51J&-,Ns$qRks$+V-kJI5E&</Dr"(a>eT5+q/mTiEndVsu3`![@faYt9tf
+.W1Z+K_9/ccb>TEc^8*P?`d0iiA$$>d&s"NDYBIW6XlPZ:WNp"&#_:?\+UKRq>M+-
+Ll3;QI%NTq=JNGi0?0A0(JHb]N0o1pUN6ON;FFH_P$#>A(Ue'M**ZlClm2bn+LrV`
+5H+!:&bm.Ec[Nh^3m#I,LPE-6:$ETAd"HB!pahhf=Ycm74g/6$:jN2$m0pX!E?L\!
+8dUeO=4pe92T?0#s4P\;Fp3BR>10m&EAf--WI2a&3G5a8Y9gQlk_e$#-M#+^I5f>L
+)`@l4_0H#2SeVV~>
+endstream
+endobj
+328 0 obj
+<<
+/Length 450
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YQSYti1j&;FIj,*J9V6MpnHVB@1U//=8fJ-6Mr:`('80\a7.+!m!+0gh2cmUEeb
+g+j<jesG%gmsP+Q>H,$1e7GWEXfASTCFMJY]tp=V<Ssb?Wl-n;p@!%RaPoY=)d,;]
+PUpuR\#PZ]o;KAe^Y`RCVZ<>T/90$i<X9-t@4-`LTHeQ7$YThM4iSZ=6KGi,(=CT[
+\&+]G1ro%m67WJJd\sn\hM]g\a^I"1=94=q'Z^Sb7!aD029m&s6o;%o_VH,"/_$:7
+T7CG8&7L;oLL>d!U75URVLV7.5rU,K6U+$:2hlo(U%l*A3oAVANj1[1j;b%kSjn4>
+(2kOeY-9eJ@]'LR":h.`i+Ie\7R2,;:GcSn/_=VHNS(?Ug=,4q3u4[t#ZeA\'nmse
+p)QqS>1%@ge079$RN#lj!OYisKUQ_F8f0&i:Eo6Hq(."#!"R8ImJ~>
+endstream
+endobj
+329 0 obj
+<<
+/Length 339
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y".4`5m+'EDO9%$BDp,Od>4K%![K'2k8i@Aq[N3C&c_6_eaXUN$tiJWZYCnH6fo
+99,qbWKo61J%u9'-du^%EG;TB"^`(UQgbHP2!pNrb9r.-WN!UlYUUdK@4!/NRNY4&
++)bg2`B0Ye56iUf.#(W7;ljWUrP6qobl+?'\f)`^c#E*P7-r]d\T?@e4BRMTF<sE.
+['I*6QWc>l/M1B/9/l%EF6@i2X?B'^dtX`*3nH<]hr/h.l6#tkrS7.\iI=sTSj&KF
+B?JN5o/t#!O/:EK*/m8(@^Tf&b[R'^4O41BH`1Pe1Z[%Cf-26\_-@4d[NrbfJ5<Z`
+!!p)ZYQ~>
+endstream
+endobj
+330 0 obj
+<<
+/Length 283
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSZ4UT%['EI'A6fBU[6JhsR/IL'#W![\ZFRfFskb.-U_2Hj5j9Qb^KZ*YL=2c"5
+OQ:`pq;WdE0Ys?[=VnCYf.$'Z5;7(t$[\EYgPKWF>K@2.Qe3BF4>g%KkOT:SY*e0V
+J)!:D7V9j.=)#JPXVG?`LGU@bOs9-[-)i).L[+)%_COkJn>ai-rM]Uob^`cX,Y0el
+I*.[<eZ=2T:H6YmhbV#Oimmk:Zs,,;Jkmi!A>>7W9<'#lUl&.*lmlZo8DHfm(=@VT
+C$61'$<Y)d!(ueFJ,~>
+endstream
+endobj
+331 0 obj
+<<
+/Length 233
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YjC]aDV1&-1WJ(%*O="gfj\P"hk^Ae9(T!S#L_WO%"0+/P%F0gk2n@^l\YLnb3c
+Hq1^EW@;F]fHD!0*"P'"5n8#qPf4ogEG!]!"JpipLU)GPAX=Mk2fl?i?=S,g*^MGU
+\/8)EaG=@t_MN#.__S<Re[*>tB&1.<mqRGh@l8T_+VQ<!YNgc*=GGA3C*srbb4iX<
+B0Mh)^0gYPd@rjji%L')/2_8&0`[1C+UJ~>
+endstream
+endobj
+332 0 obj
+<<
+/Length 442
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Yi[9hp@,&;=nOEKXYL&a0TN&<-dm8k)Nc@A57_TIsM`F:Cb+UMp@%/-p+kcj"U3
+=j*Q8k_=CPjh3dg[$fb&e(g7C/^Ea)DVe'Tdq33M$bJFBl&:q+=0o#&qIn(-UpkGV
+dd@!uV2+?]I_:0ER-NCO\jhKh5t9`3THAi6!*K,)fFb<7.h$gUNd1Uq#/Gu(j!lYc
+Ph-T&3#6D)Q5>[;<a#KKB<?L$9!O6rQV!QKAm'?dq68GIO?\n7#A,PZV3`b5,[qUd
+Q:sG;ZGKmT\)^TEnbhkQfP-gJmZuWJi\7>P%0)!gkD&Ad//\t=QkeNQEL?Q/gd/T:
+q\]VLr8ccR2tPHNT"O5uSocclc94;aG,(XiFCrT@Kl>PaNA+q!53S&\4'$5pKIK7X
+#`6\p"uUUf9pi6.R>n)fnmmrGlR@/:gf3FPHjp))"128~>
+endstream
+endobj
+333 0 obj
+<<
+/Length 130
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z:bY^"!F[bf$R:?>6`ra.'-d[B.$/5=B;hJ=!$m_K\XYdmoYVD;N4ALCJ5TYK
+:'&WIL0XSH^'Z/TV5[^k/d`"0@#p6Ds+>n$s8Pr:W0$daPKVL?/!(,m!$4]dPQ~>
+endstream
+endobj
+334 0 obj
+<<
+/Length 197
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XW+<%q-&!Fg*`"UcQ/'LT#i/oq*u&-R#JoF)IV%=gie/shbLQ[ZGr\H/&2#>g:N
+h^Q?D_2q=IdoW6=W&0d_dm\fg"PEbSs%a'`rsoAmar#ejAg/)90EsTFN.8>TIkV^(
+i!b&_ir]MG!K;!u`b9lW(ncgP0ZFV?irG>6O+DkS!=InE@;rc'EWpIa"oq9Bp;-~>
+endstream
+endobj
+335 0 obj
+<<
+/Length 415
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YQS]hZL"%"MW+36=f8+asH*UI06:WcWbZ#:,[]!030B"EXHRI?Zo^`t#!TM='G/
+kn%;KKDRP*M\Fh\Q3u?oKr+)mQ##)XI)g9f2[_+=BR=I,cAS#JgsqcV;n9aBhQ&?f
+4l2:>]RHO"O0;WdDoqf45ilMs!'mg`BEUIaWqt5E7;u/F%Y?#8fEOE>H#[BJ-L>;'
+TGJi"%+(r7%9A<gVjOHe`6n59F$e!aG)$B43_0N57VkPrV2&Z==O"(2BR7@P@=__&
+lo_^]:T.t"(PIV/s2Dt)Vi#uETC0oWp5gkDr>^-)`\'AS`%aH"1W*?/*2bD\4DGf]
+r6(J5O`Sr0SMjrsNPK0`.V(pCLs71M4%g%i#p?RjAgUJ([>&Cp,S@uB3fVU9aC_41
+oE+Nb`[C[*!9YG3>Q~>
+endstream
+endobj
+336 0 obj
+<<
+/Length 260
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XW/;D:p$!FcEM"UcQ/'LT#i/dhab&-R#JoF)IV%=gie/shbLQ[ZGrK`ROS#>g:N
+h^Q?D_2q=IdoW6=W&0d_dm\fg!ri6"%qW#`=UYS%4IjCjs8NT@nUQ0.b5)?@#\O$R
+@&Sjd%PZO&=W`0_@4ZjUlN`sQ#A>3<`JhY0a1t4kMh0#%r3g%F'Ucq#iCcQU4FjaL
++k4:-%nT7?cp`UI(tc`.N;m<;Gq]UCB4*F9,(g%,>2i[iY+AmL>^uhT(PNR.~>
+endstream
+endobj
+337 0 obj
+<<
+/Length 371
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_&]hZI!&--*>)'[nr8+=1l,_f?7VFh";1*FEO"&MGk&Bm#k`PS*DiWV)LLgp:K
+do?NnMMLDRXii_K[Ot3(EJ\<HWs[Gp\C9pSeI)9Iq@].Xg9%p+dgKu--m#Ws6#l4V
+T\/+.Tn];U_tUX$B;i"2KH[H>d:1Fl1CNW1J*D>gM@ON65k#m3A/g/r9umn%KF^Kn
+Qs68OjeTMMm$+iE4e9&F1>fj82#m<)e]4o*Z$Q+P$Y.F-RJK8K9$WjT`4U2a>`_mB
+U)V\L6O`sX[psjLHgB@VLO[SKE>J"UnIKnT^JEK%=kQU9[Ba.MBeqd\Elc[GFD%T!
+P?gI9R6:7NN]5P!Cnob7qCkTTiMM>7p`0@Z%rF3~>
+endstream
+endobj
+338 0 obj
+<<
+/Length 437
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VGO0i#YP$q217N&47hOLY@%,@Ii`U]i#A+@3sIJ<Bs:Ff+2&3D,;cAVqlXgG<!N
+$5+d`MZ%CAcSUu+iu3,F]5?SOkO,mhDg&a4o'S,8F&m@@5>SJ+hq@;BD)\o7jcHV<
+pK+N+<HmUihEP@`GO9oG4XL.s"p(*I#U;#YgAr.YL$*Cb15(?RKG25HWeE7,N2<*W
+E_%g7JX")$S<sJ$-4DCtk!JQ(*7KOhEVNs^7&eLR*ge<eM$/7ZK[N@6P?+\]m.H35
+6>VQJ=br=[OL9mdVO4S995+qN^!O\a,#D^6";t+sg7_;,HGn#cc(pjX]#Ml90dIE2
+ir$\Ik["W1L&]LAR/bDd4(?t\[0QD^XnM('1-SL)K[3_daHo5qnth/c1jZdD%;;P\
+Al0?'*qMCp`JAll(:"FQ<U-[flqM+7m.ULH[%3!~>
+endstream
+endobj
+339 0 obj
+<<
+/Length 217
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XW/;(tg#"_%iI"Ud\O'LT#i/dl/3hZ1SPeMC1O2#n92\Qhn$>l*Cd(<0VU*^D/,
+IA['X"X)pkX&)\nR`aaVU2YV`#3ncigA_E:"sB-"5FD8!TtZ'u_YhG^h]NG<rWb4G
+U!*`<L3b9>J:5=b..[HpZOt4TJ:lM`A,[U-aUDh)Zbr/[aCY@+0d0qh3T?Hg>es2S
+PKVL?/!(,m!2_Muci~>
+endstream
+endobj
+340 0 obj
+<<
+/Length 430
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSZ_+oV:(r5YS%[b7h(Ka"25T(e>[`_4=-?:e[-QbT:HI1jnGdBS+++YXA6N+WI
+/_t$6O[K!R%>6r_Z!<-^.)f10[MuJSM3ih/oBdH60#a\%j`LT>0Kd,?IEh@2Z!Hu!
+*gV&bJ%Q?scg(i+q=4.#lW_3`MR:qAVZ.Qh<9#8L4aV^YGL"QlE=X+\.s1^,$9Xd/
+K,\_8St%[,)7MS-GN@oAk,FYH35sa<Z"+_5nK*Z)3@1R]ldQW'M9`dh`UoG)1*4OH
+3O2ecVD,!_9qmX3N_DY>@N(_)@8jrY7Z$3R)Ik1X4BV@AbW2q2VoCD_,V*YhTgZ2n
+`ndC@$>Ta`YjTSp1W75g]@iA7'(<eU`>5HIjcM3.pP`Z,%uaL3O7kR3Ap5fPX]Z?]
+)ujcCKWW\,h%#hQqL!`no)o"6!/PampA~>
+endstream
+endobj
+341 0 obj
+<<
+/Length 587
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFt0lG`"'ZP,")?b$<&]>'aN[t<(-37f^`']&car6r?Qm"aVdtTJ%h*ackW.?Yo
+q!gpdMq[Ak%tsG!&$YtumA@SJ(V8.()VqceqJ*'\2"F@!m?[N6?a[KDg<c(En#u:o
+-TBAY\<WP1R`Wh!j#>f8c0dlI]`7gWGILc&X7Ua"$h*=Zrr`0A3q*"mC-'&,4@'EQ
+!Go6h/;$Mj,u=mpZRjE2lYNHmrXE+c@9mI^f4>b91d[]Q,P2k0"@[pLbYYF.:'gG-
+39#+&:_?C2S'WV$5(TbUW"X:3,6jM9W,,f@>m.a/?:(P0&C(?S%#eO7aae=B0H1TV
+,Y_)^T\0?"!3k6'grMaI-,O4i+l!+V'(cS9V*_[#'Z/hn+ZmK4ENJL,Yq[_,.LHuU
+!p0Jg!^gNIS7C3T:bU2K!-JbuKUWh`"r/)PncZ0*ZofL:9U_VHTLOU()!hTYJa.c)
+)>"1n0['sE\3a="%Lf^L+^G$PL]g$f9?D-XTK304Z7OoM:aZ9N?2bKs"idbG(`p!h
+h&-Kr9e\;hP@3o:T8!;hQr1j<B)j*8$!`/S2"9*O(6j#)q'800!';:[Wr~>
+endstream
+endobj
+342 0 obj
+<<
+/Length 359
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]^4&3^J&:e2Y/M'V[,K(CK4IRQ2dK1%1OJ(S5YU'Hd\+Ujp8')?@;FE85b]r,!
+TqK8#`qkihq'@Och:gT&X6]+pCYp'*J8Q<28%)KY]r]+rI>;)=eVih':d'J%;!jil
+D$*f<BFg`U4nNr!`T=e*_WH<"0K21uJSo2?Q\bh%$@<B)ba;"S'.cc37#X)CK-QU2
+:9)*h^P:)DZXUkEKq]u52@R9Ni\2t'@82Vh:`Q<O*7]"5!le(Ua!lR2Bb\U%'K<5B
+.?3=HNT-fDNmfC/V.&/@ThK/;QdRQ_AM@:AWf)iZ*:=]'+N,"H3QK#"-#j!9L6HX<
+r'1/`nUHgFr%[-DLM-B'!5sFPLB~>
+endstream
+endobj
+343 0 obj
+<<
+/Length 334
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSY0i#\A$ij*o*PUTcgjo5&crOnf<r.>7#:,Zr!;qr[";4opENY1_<1G(@L[#g?
+a[a-u8<pn[G&!pp*S&Zf8OKYWY+tju+48W7:ZnZ>D'UI3]*I+$=P].@Z+?/2<nlpr
+C9SVZkkXISLVl,,HXIj%J5mrsUOnGeGn4J:Sp<3![$i>8NB6W00F-.,4jO?VWNk>5
+EV<bB^sTheVH3\mLM22`,iq.ll3'$-Go1$3-urU_q^A3_Y-n#Rf9H1'#L-'+1Og=W
+/,SJAs!.E4lb#e">5(R:XQ6P)!9F9O\X+gLobtJ".nYti=i@3!@eB/71#NLi%KLQD&82~>
+endstream
+endobj
+344 0 obj
+<<
+/Length 300
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X^80lFl_$q4lT#f%`V&22Bk!hub#dMAd:!mQr3ZlM6(BP4q9o20T4NueG1T5oPe
+8Ce&u*^ip(eDI?<-#:'_&q]LpcNaqd/0$RR^A#_-Gl-Q=_pr(FkNWp6Y-tMEJkP\Z
+hd8SigcUJZ6jptk6nLYl9@X00WWUd=JQ.1EeZM<Q<THYbVi3[!Z`6F$@@T'Fl@]H$
+5stsN-gRpiWR-Z!>.`c$k]Somd5h%r,\P":0fo4:aPY3\YUE_K0cQiM,iIhR/5bOf
+BjjKBpi!4&9l@:,Sn#&C5;g+6^B"=&V[mP~>
+endstream
+endobj
+345 0 obj
+<<
+/Length 323
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YjD^J;[#&-hVWl4A&140msS!0X9p#ZIQ$&fHeR_ufua&g3S%8+WM:&Nj[(@a;]<
+O:Xi387Z[grc=D(q..GJ=+!tfIEKftmn.o#3XceZ<*UH11+1?6")V5aDn'+NIOS3[
+Dmj:`;VkaMbOb$_[HHno2kl61!Pa0Rh_G%YN5u\rAdSMM4$aP<OP.O%*e$'S0Jf[9
+5T83td[PT%"Zp7`c[b[93.]Pl3fQqo(&!!AjCdB]Z0)sNDUEsM7iG-dSV#8u-]B3B
+'6Ba@JX\L/M[\@Y]*2[Bg(]A9^nX't&f4VRU^Gf'aYE%SV/(Ar!'oEK_#~>
+endstream
+endobj
+346 0 obj
+<<
+/Length 313
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W"]^J;[#&;Mq(;!F9.K'rjcF]EXn<2e:TQ!iSPJ<9j8/'4RJ;=Xu61ISeQcH-%f
+JS"_bm`tjH]pF`FjN:-J9*k+Lq3Ai5_2Um,f,cqGO"YmZ\U'@Ajm%L5=,4C,nQaUW
+H%5^9k5&+X7uE2Td0fJ57)/dFRcoqT;CcV9C',u_;YpNL:/d96%tnh6&iGIrLcmF0
+m+Bs%\-9"j!Yf!</tft@gTPS,"@`?cr=77Y^eZq:]M>;O7E71.Yi"a((6#+=`<fkX
+O%M+V2;4KJ2,e!n,%J)?eRVZ@gXUb%:>X+5Rd^&-!0HL6L]~>
+endstream
+endobj
+347 0 obj
+<<
+/Length 408
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.*_+MX"&;I+D:rjrs608?X?0QMEKYXTq%t^Cc$L6#kU?D0rngJd:*d]:sc6QOt
+('MI\ksmLsbl84@2qVSpVrqj^4'[")ZI83QDc*+N"a4N/$1did9lC9m4C[45k*BMg
+g"p)p8iOX.IXZ[XlJWY<!YFn6!14WD9`QYpj_]O13@`m21'Db*FYGm@!]HDL4H1\.
+$K"ZM3sjHu11q[ZU;Ik%n:)M:S*U#,lOc4QO!s<?9)>*?rHR#Y_9:qnr<b425BD"r
+%jB=DVr)0K=;P"lV9UWn$XlgYD<G?6*`2q!i$_QY<Ja)bK60?@qC)"<plNFH+%=3O
+/s./%c[4(^=Ro(uQQAaT6RJXUF-Z\m,pc](bouUbGZH*):Y+oS!u0jOgY<BDlC1((
+kjJNP#fq`h~>
+endstream
+endobj
+348 0 obj
+<<
+/Length 235
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\YmS?5$jPXS%[A11&XjN_p5iV:%]Y+>#Whb]lKFo)>eq6BUYI)9lqiMiU[$d3
+Wu+D&I^18&8dVnr$(?fe-h)pig75N)*=3W2G&.\VCQ(1t-,p>)_Dkms8RSWdF?X"(
+W+X%[aK>NW5k>!U%#j'E5WL[Zedtj^JV/f^^-g#^F1AIULQF$A6"EhpoMpZQ_=\29
+4X,+>hV`m6i/]8$^8A>+I0,pS>iU54=uY,^~>
+endstream
+endobj
+349 0 obj
+<<
+/Length 171
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[="mH)"_(sd"Ubut'LT#i/gHIF!JkNkB;hJ=!$m_K\XYdmoYVE&bdm@/J5TYK
+:'&WIL0XSH^'Z/TV5[^k/dhUtrr<#E;#gP+KDb`k%/aN2JUnghL8b3Q#O)?V-O1XL
+s3JK2M>mVHrult3(`;>]0pepg=!/;e!"YC<hZ~>
+endstream
+endobj
+350 0 obj
+<<
+/Length 133
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[="mH)"_(tO"Uego'LT#i/gC`HhZ1SPeMC1O2#n92\Qhn$>l*Cd7M]8**^D/,
+IA['X"[anj:LAg=U=*!n:D\`b#Pe<T0OWmi5l?*Gj2;?7%/f=VbLMe,O:*`B!:-^Q~>
+endstream
+endobj
+351 0 obj
+<<
+/Length 293
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]]Yti1j&-h'N1)QQYr<Vp$5jXe-Clqn_aAAj0SL\)9!X*QgnR?s34@7's&O4%2
+MM\08\obHG^H8(T_')LCG82@t>?BXjkFh8^r/;A_>[7SYjdD]HFl$fBk/NgT&+"!j
+?S,O0Z<=cbO09@:mMqriT*(1,+dPu8ODK\,'mc!#@4Pg6V)H^;>n.`46q$\#Nrf!8
+@_XoWZ>=c;[FiXKU.^jf`#HKXaCS(^p:+d]irY$di$.T\!5e)b-.r6Z-PV?P,h-Is
+'#H:Z0\'#G3sL#gkbJ+e!/$,dh>~>
+endstream
+endobj
+352 0 obj
+<<
+/Length 229
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)\<A75L@<4d>;\Oj!6`ra.1G^02!5pbF1K;^Y!#!Da>Y^kqqV_cnAmG0R5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PVkoq#<Qdrr<!_!s:b!gOgAn5TC?q!s8WeR.3GUJJlZk
+nG`OLs8RQcpm_:J?iXp$kPtP_bi"Zi1?sE!*d];fU]19("9WK4Ijfp]K>C4aK7/sb
+B.s=\jp.!P-\fJ!lH'd^"W.5+-k21~>
+endstream
+endobj
+353 0 obj
+<<
+/Length 286
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X^9YmS?%&;IB!&8p_WGV>_t@]EY+.[WNKaTkX4#=[hLdJ>8>KT7(kGY(F?`R-sA
+L"q0gjM,M',FZt%V//h'dNQRcar):]87j[rVB"W-J&4N\Z6MBIAAo]cMTqYh9[oN6
+QeN,&K!]tl?^oG.A-i5rj3EUO/X2MS@A-mMW-Z%-P%?@@EgppCft0&#<O(#W[KXsU
+7:9UC"kJefrPcpar'bSKs2A>f_`R8_?i9iRlef\e&cD,^H/H8q_,l,ApV#TNo\TG]
+`PD2hoaR5p\+gpCZ0rj`~>
+endstream
+endobj
+354 0 obj
+<<
+/Length 310
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YQQ9b%1i&;@/PdSc2eK":ql0P2d(PF.&WPlkE.6!0VObu#HhQ562oFYgsjPur.k
+bLCkreZ[tg=qji/h4[rD9</W5f[I#UMIVO4Tbc`rDK(\FYb5<U_*i#T$t_j60hA1K
+h]::8N/4go($a!O:s6\"a8l&H5`S/GY$_toQ;\B$5WgE5l6GJ4"IRN\Ae_$ePZ4T1
+Z$QF#\G@/34/<%qB?90.^On0D1[iY86Ko(K!VSCL!f@D_C$q=-Pe^SMI5ck_`u,`:
+k3T]a!5D0rWa=ZF,Q\eLEZa<P5pj'J"-+%bj)"eY%BoL~>
+endstream
+endobj
+355 0 obj
+<<
+/Length 217
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YjBYmS?%&-h&#*<N]L2htl1"Z-Z6F;1a,)$HLX!-NB[FD`0PO4$P^!u0``?2FUC
+g]p(D/a"+=A9j^hBB`mpNjdqPVJ)<N(+"%9@I6paaB#6`>bS;2CGMjeSt;"p(&`kr
+Ws0.:<"BEW5d;p%XQUqF>_['F63TP&<\6CKP*<((3W1@8a<G.Z4.5I,#Vtt0RfA'A
+r62+Lom"FL!6@C?a8~>
+endstream
+endobj
+356 0 obj
+<<
+/Length 313
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$#4\g_s&;Gs:OA)uN?nS+"`5UAGnu7H[-<bZp[C":o%@u,1.!l(h$H)2RJ3O`D
+f_:rmH+Gdl8<f<=ie;KF4LP+00ktrpmTeacX.A8?Ko\AU%h^*G2d13B]XsDoS,QIF
+h`dXB^CkokR":*O%$5oV(`1U/F(ISH`i@(T".0:#`4-D*E@34,%u5X.cCb?>FBX?[
+BObVsm9iW/b(,n]=HoZZ'YBhF%:1ECPWDg6JogHV.tpcG4]GHAF!uMumk"H?dmeE8
+R+sgWX4(IB,?//)b^V62Y$P^E?7dK=?rMI/o0%R6!&+#jao~>
+endstream
+endobj
+357 0 obj
+<<
+/Length 234
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR<YmS?%&:i^Q#N:t4K(f>8-:Bp2We))kSU:G)kb.-EI5?;85!m7!V=>1O$;qZV
+Dto&l+Rj$<-mhA-8Qo%JV7jelC4@(!P)pSThD)VEAd65?ZpM%Y'oHfj,Dj:=k^9u&
+B]eC2_tj,rXi"I\o3iZ@hR(*SGRoD8$!Q8,d,F<iT3J-Va^o;I8nbWj8tVtg.nKIp
+C5D^M)%?;^.muQL%"3"A*%hY;n2UId:Lo@~>
+endstream
+endobj
+358 0 obj
+<<
+/Length 237
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\0abc_&-^De(4ed@!ePIo>o29j,7%/_/Hi1<J6H,)g0(6@?s@l;*5OC!a>g5t
+YY[H4c1%+H9_/obI59=&P\;fSg1]9:[Bc%)+k+o'a]S!cFf8>O/ZP4,W7&YP1b(G^
+j5I@62^.lLEs3cmLq/$X;$o9!E'Ws6=55taImYRP26Jeh!PZD*I%b:B9.hD@L7o$$
+k0F'+%?pl.5kG%h&3j#WVZ^V%3aCZm!1of)=o~>
+endstream
+endobj
+359 0 obj
+<<
+/Length 313
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W#HYtDr"&-h'T.i,!RH\J]q!h*>Vb;DWE<%s$!eNJFd=t&*2m^O(V]h'7gjVB$"
+bcW!>#WD:jr5JTXb0beJ\o:WNBN`]g_`+Yh=Y=Aj;K:qHPO\:&lNZqi<@-dO&n/M'
+\0cuVF&*nHT.ejP&--8-!WI-A_ot3c0G?N3\PnRKRCJTKH4WB,XB1D8ng"][VUd+b
+dAp<Um);i(eVj`Q;Hq[j0=&_?MYu,+;WRW??Bmj4+D@<Ba@*MR!Oc/'.ac/ENR!/$
+bj-Y[-\1p"%)@_Y,Ce@j;L=TgA?"ET7m2d>%6ie'!$cVHGl~>
+endstream
+endobj
+360 0 obj
+<<
+/Length 406
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSY_+MX"&-h&A4TpA`2q[0pZs2f>4U"jiHP#i1"0<P,.!fdS^0(,(nd%8L:cclq
+Jd]1sUeLTIJWN+Fgt9$:m:Bjug2:[&>3QRRX=\pkCKk.Ge>(ph?#NqQ^=[&"b6MeH
+Er0ro.p]TEp?V>I9t,<^!)*p]AublWJHCtW.pP=_p>j?B*h-nb-dE;oEZk*mWmI:r
+MtZ3dMeeAa83O7k;]V%[f:@./#Nuqroj7!N$Si`\PLuRdSrYf$ML+V,bd7GX']NSB
+ac!Zr9lr?uKs!'g3X6u^Nm%,13&tUVEM&:+P2gS]"8^f27s;mlfu)4Aa,l9i:TkVn
+OK@[*K/e\Y5?q$@kXhk=9q5AqN&&X6]/X4*aYq7'WH4ie-1f*>HZjUNR2SHM\,'8-
+$ii9!X6o~>
+endstream
+endobj
+361 0 obj
+<<
+/Length 347
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:e0i#\A%#/%K<:\H^,Su!>%oLt'4[>_D&kj8F(m3ZB0Xogg8*LUHG,Skdf,\7F
+Ock)`jA4'Nh>#^mGd]R1lI*F)Gf7&PF"PGg7H;^0?=#j8hdQ3;gD6gpI_ok"FR'mI
+\juenq>H?0SK@i()BbeRJ-MSY&5hM"/f7(ABeDu["&4eaAf-/PUY%@R>TS0g"9n`0
+&EK'+$sD:l.23u):XfWI0L6]nAq42r!MI2hUqKJsAi,>5+%GiUK^Hla'pRi888#.b
+Q3pPDV5\*?`lX2jN5=#KT2tWX3Uk*H#9LG<+?kFS['&NNWg4c-/O?C68d0bFR/eA"
+!dNV]1]@jaB]);k~>
+endstream
+endobj
+362 0 obj
+<<
+/Length 387
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W#HYti1j&-h&[)'X@rg<G'I84,bM<(&2YOT>b8*WR#p5d3/LqI8DXnd$*h6oj[_
+:2(sb90U>'r;XJT[7e-;VrsJm$[].ac`)4hGt+i->827'QLZANT3g'F;TY]Y1R6bD
+Sk:p8=#O&MF_<qq5@7B4D#ln3&+H1s0d8Z2&<RDCF=6-NE(<RfSck5%Zu!t;30G;_
+fb+OqB+8Vdp>j$"V:^nT($KD;-+Qj1k_h:!Mn"KpZ=BlTh@!TK7k,.0>Ajb5>$QE$
+=;u8=*FMa%i#Mj`@hA]jePG8I-CW]/F#uOo2h+qaF-CaVB+dRls!_M/NKL2"/Q8A-
+7DW(G-abo:-.ZdeF%0W-dRhM\?IseAWWQs"5\M*kTl)@QTY:X2"UrN!~>
+endstream
+endobj
+363 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+13 0 obj
+<<
+/Name /T7
+/Type /Font
+/Subtype /Type3
+/Resources 363 0 R
+/FontBBox [-5 -23 90 68]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 11
+/LastChar 124
+/Encoding 364 0 R
+/CharProcs 365 0 R
+/Widths [53 51 51 76 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 45 0 0 0 71 25 35 35 0 
+0 25 30 25 45 45 45 45 45 45 45 45 45 45 45 25 
+25 0 0 0 0 0 68 64 66 69 62 59 71 68 33 47 
+71 57 83 68 71 62 0 67 51 66 68 68 93 68 68 0 
+25 45 25 0 0 0 45 51 40 51 40 28 45 51 26 28 
+48 26 76 51 45 51 48 36 36 35 51 48 66 48 48 40 
+45 91 ]
+>>
+endobj
+364 0 obj
+<<
+/Type /Encoding
+/Differences [11/#230B /#230C /#230D /#230E 34/" 38/& /' /#2328 /#2329 44/, /- /. /#232F /0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /: 
+/; 65/A /B /C /D /E /F /G /H /I /J 
+/K /L /M /N /O /P 82/R /S /T /U /V /W /X /Y 91/#235B /#235C /#235D 97/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 
+/#237B /| ]
+>>
+endobj
+365 0 obj
+<<
+/#230B 366 0 R
+/#230C 367 0 R
+/#230D 368 0 R
+/#230E 369 0 R
+/" 370 0 R
+/& 371 0 R
+/' 372 0 R
+/#2328 373 0 R
+/#2329 374 0 R
+/, 375 0 R
+/- 376 0 R
+/. 377 0 R
+/#232F 378 0 R
+/0 379 0 R
+/1 380 0 R
+/2 381 0 R
+/3 382 0 R
+/4 383 0 R
+/5 384 0 R
+/6 385 0 R
+/7 386 0 R
+/8 387 0 R
+/9 388 0 R
+/: 389 0 R
+/; 390 0 R
+/A 391 0 R
+/B 392 0 R
+/C 393 0 R
+/D 394 0 R
+/E 395 0 R
+/F 396 0 R
+/G 397 0 R
+/H 398 0 R
+/I 399 0 R
+/J 400 0 R
+/K 401 0 R
+/L 402 0 R
+/M 403 0 R
+/N 404 0 R
+/O 405 0 R
+/P 406 0 R
+/R 407 0 R
+/S 408 0 R
+/T 409 0 R
+/U 410 0 R
+/V 411 0 R
+/W 412 0 R
+/X 413 0 R
+/Y 414 0 R
+/#235B 415 0 R
+/#235C 416 0 R
+/#235D 417 0 R
+/a 418 0 R
+/b 419 0 R
+/c 420 0 R
+/d 421 0 R
+/e 422 0 R
+/f 423 0 R
+/g 424 0 R
+/h 425 0 R
+/i 426 0 R
+/j 427 0 R
+/k 428 0 R
+/l 429 0 R
+/m 430 0 R
+/n 431 0 R
+/o 432 0 R
+/p 433 0 R
+/q 434 0 R
+/r 435 0 R
+/s 436 0 R
+/t 437 0 R
+/u 438 0 R
+/v 439 0 R
+/w 440 0 R
+/x 441 0 R
+/y 442 0 R
+/z 443 0 R
+/#237B 444 0 R
+/| 445 0 R
+>>
+endobj
+366 0 obj
+<<
+/Length 237
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR<YmS?%&-h'V%`0fGK\d)M)mn1u:_i=>ki;iEUP#:^nn@Pfl5M]Dp%M@'d9R/c
+540%9E61V5M:'DB1)\9ln;6a'o.6\LBOm4h[QAM0F1RXLi,kqgS6"sD(f'C^>gCq'
+f5gsr_BT*.:uW_MTc`*u*5TZ:GfF]ZZf)B?AC6VnQ)_;F=k1497b47H2kUD;Fpkl'
+8DURYrp'H3<BgRo%#uMRk4'lRC>SGq!!(W%k5~>
+endstream
+endobj
+367 0 obj
+<<
+/Length 214
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q,K@1s"P1D>HV6`ra.'6>;R!5pbE1K;^Y!#!Da>Y^kqqV_c.k$7a(5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PVnhs"XEVJd2_X5dK>j5>Zn+J,B9G5PY7Crr<"Nr;VC7
+8c/NQ70i*D8fJo6Ig!k!-)'N^R/B_\g$kU7"AhXB/IYH56]2(-StWlLJb]9J,;RC&
+lH'd^"W.4j`uSC~>
+endstream
+endobj
+368 0 obj
+<<
+/Length 196
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q,K@1s"P1D>HV6`ra.'6>;R!5pbE1K;^Y!#!Da>Y^kqqV_c.k$7a(5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PVnhs"W%'s8W*"!sap(ps/pS?jDfYq#:B:&+Uk6JN\fO
+:_+`h+QS"X#u\kNAl+b'!!*ds(:MSR"9fT/I00TC!<u#(P0;C>/!(,m!+X_!1&~>
+endstream
+endobj
+369 0 obj
+<<
+/Length 262
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z\q4UT%k&;;K6"K'9QS-s#9.]*XL"/ZX:nc3E=TkM-oH*%6''(>tV=lhXU%>_H9
+0$N>pk04=YVL;%SBV\qupLIi[b@sK<Ue4A981RP?DKq7a]TBM<nO-"i%q\0`*9U8R
+mga-Y7fnnXO9JHWG+kdb.jJt"Xb8Y<3!$Jo5/\2G1uTVmlHPu&BAm]!=k2tUd#%H*
+K%H#J<QCj9eaj1<1[p^%mgD6@2)nfarSd:QO5mao;8Z=/&:FV@F.VuO!"5'YC]~>
+endstream
+endobj
+370 0 obj
+<<
+/Length 214
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U<%0b/e#'EtIc_\)U7!*C%r<h#a/;OD.Z!S#OaU\4$a49ATXZfDP5_A6TJ62%iD
+>$0!qP=[Q*=L$"N8KKD=901I6ia]k)<$YVCd?JiFapX*95#T&kCqcLGUpsOsja93f
+1$8`mXJp;LX:DTP++t)Q=AacHg"%SAO2)4YgD?b2S:M`?dfZ-)0piG6*pE+3$[6Ns
+2d-p&U%\QG``eE~>
+endstream
+endobj
+371 0 obj
+<<
+/Length 425
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:eYti1j&;F,/W8o76A$]MBdSqMu&=*YoA3ck&%fhOs+HY6GX^b]eLnV!akR4ni
+LWIMcFoeuaOdn'bs186FS!JAr-i.MXX%HG@qS&1iZ5TJtda_;mN_A0dFn[:s[4H3<
+23u2rY%09!3S1)Yl>-@hr;%Q%$Vf[j`M^roLPptMY9SCZkfkI&rQr-scMAQioM=2c
+*nPaDm;\PAN(Q2g]0*KXLI=i`a;o(G[N&b2b`Kl4@=W:o#E_QUp#;#5(*8opedh&_
+Y7*9jXI,)%)b[gE"`@Gr)Z!uYX(]c+:=0<MWQT"llTp&4*.Q$fTO=7Dq>o>-'Jd*_
+pP`sVD\Ul`'&,]]-THg>'E&Om4R.jETHU5NUsS6pj)CoXk.NW<\XZ'SpVmT5HdUN.
+AHmp6KS'ci%3g(#bIRNl!3"8ES,~>
+endstream
+endobj
+372 0 obj
+<<
+/Length 172
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'="lO40XOY11KI%$j=94G1^".(-l?)8R-PV>(n9_l.O=1t3I,Z0LFX2[
+Ep7oNV7?/g!h:!U*)BpqP+pB(/l*:;L]8=Y)<r++JP[Bj)rr*drssbQs6W,ATDcP$
+5P9O*s7lWas5X.*ru_8jr]caM-W_E,?i]fm1Qh~>
+endstream
+endobj
+373 0 obj
+<<
+/Length 259
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wju0abc_&4Hs7@2b2g\UZ#0;+q^\$>q##jT3lZ6I@hbMNhGhhuRkPG_;506GBct
+"@4Qka#:iZr&;M*47$ro.97LN-bONb8BPB44CR0:UAWaJ"e+ce.u3JFeAr,#;g-:6
+90St#HdX\S;W%a]W-jgQM@_f;";9Vn`'>.&Tb8o@22,tiL!Ynf0\kPVlh-/AkkmmA
+CKg;6Y1]D#D4]O$'/jPN[Y,G#,8/U+8M)?Z+tLe[0)F]9.Es`PkqrHtJ**g~>
+endstream
+endobj
+374 0 obj
+<<
+/Length 254
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wju0abc_&4K6#RN*Jl!DTj4d:sgSQpT0B"/r&MU3-g$P[5e>\V@p.UeDBucL*06
+G-[0G5.gFcoOA@kk,qU`@NGr''@ECNaQAF,l:!%aHbH1"V-q7lUgPMe"j(5t&I%Eh
+O,)2MdKs^)#;/7Jgjog2JL3aZd:tdk4?Pmm!',#,>V-+uF(D3iqLq%Lr,5cTqhq)M
+%/Md*9c"9%;nNR1D/SGu;afoXc7Un1.pKQkojnH8$C[j!Uuq_\&`Ar~>
+endstream
+endobj
+375 0 obj
+<<
+/Length 167
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'=3rh3:]MX@KbQnW67tVmTW!EnObJCtSfpW;81*M?3I,Z0LFX2[Ep7oN
+jgarR!h:!U*)BpqP+pB(/l*:;L]8=Y)<r++JP[Bj)rr*drssbQs6W,ATDcP$5P9O*
+s7lWas5X.*ru_8jr]caM-W_E,?iV:O1Z&~>
+endstream
+endobj
+376 0 obj
+<<
+/Length 115
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[:bY^"<%p.10JZKZ10-q#j=93ldNDsS"[bGGPaS,>6?4]FP:)]G3)BpJ^5%:X
+QbHCKZ[s?e^8J/$8Ps1OQ`#`C!s9bdic=_Q$KM6s!.PFh"9~>
+endstream
+endobj
+377 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'#@^&A"[`BG'LT#i/g(UT5g!?X:dN\580mA=3I,Z0LB@^joKC!c;h23+
++d]p@Y<kfXBe#IIMo*C3%J:2'%/(5<@R'e:jm'r&a9<C\2maFC~>
+endstream
+endobj
+378 0 obj
+<<
+/Length 196
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<A76'<R<TY<\Us]0XFSH1#shF1,]/j)CS]+.[]K=Jg>nXE\<]B-^T:lK!>WK
+^'@Jp9A_26=TM'=qC7^DQ)8SI\g[LVs8QFhOSE;r,^pjAOOsd@!Q>![^kmghiZOaN
+$mM/!6p$34LD0S..hI@ra>*mLf38%*Lu5!"[ummbs3Co^>csZ'JR!^+!;ss57f~>
+endstream
+endobj
+379 0 obj
+<<
+/Length 242
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_#0b/e#&-Ymi"j&S@J[p:`lQW#I5u"./dE2QiV1hBS9XkqrKHj;k&AH%[BM9gK
+2Qta^B)W;Vm'G[8S-.$0k*)YmR7KMi%LnnqQC2^):m-u&Y_bnfA4.p#/Qn90[sYqR
+cBPIKm2/)GMLhLAJK,0\j_.r4d!-s9a/Cad-,aALgA=\PD@b+(:VdoZ,Y\3]i:='E
+4+;5&CmJ6kB/[<f^p_Yb@N2UYFfj%PV*2Ks!2SW7nG~>
+endstream
+endobj
+380 0 obj
+<<
+/Length 157
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<A77R!+KGZ"Z&N"'LT#i/gF"3hZ1U&cneYJ2#n92\Qhn$>l*Cd7[@<U*^D/,
+IA['X"X)pkX&)\nR`aaVU@A2TrVunIJG9?\560[Iqu8ktm/JklE.\%<p'4FaTo9rc
+Jc9(cLLDf::Tcr8^]7U2^Ba~>
+endstream
+endobj
+381 0 obj
+<<
+/Length 308
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH80hTAL(^8h0MhSq!,KsD#9u=oWJQ9N#JlWpX/M.[=PJq"S]i&Ao1?&H=2H,8k
+h[>$<=Ni_JbkpQFVE><5-oLQl(#cm2-X0YWccbmT#cjKN4kcd<lo(pqb:\'Ng#i,^
+E,)PmbOb%P2<P#)(dROn^c@Hq)&Gh$2[<#Hpu!bg8UCHKHM9eqpVP1^LeChL6`8BS
+j@c^Wo]l0D%:(IY"Lo<Z2CEh*\0+A>8HjaP;))AbCrMl?Cf5(K/1EJ*(4eX*`Bihn
+@t%n2O,WnQQlfGtUZ3`GoV*S<qhn`:G%9D3!8NLaaT~>
+endstream
+endobj
+382 0 obj
+<<
+/Length 314
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ul=0i#YP$q4g:73jfP_Y=1o%EYK,["(OO,cE[&:f;h0HI?f8OgmsU#(pTdM"7f`
+#8!Vs-e[DVp:/rLL0Hi%j*&=GbmuZp;q"<9_M6go=u=(o'C?"(m^VM[\e9k"h9@t3
+<"7HlIsHI<iIVZn!5*;:&M+\Z(Pls3,@F[5"#)\?guL.Mhdc#drB^6,S.n7^`,QJY
+QiprU?cK0'AIoET+D?Co2ed_5>sX0HHl&]hCo-]B7Y2EP?^(kh$EoO[HtiG,YXcdD
+m&3s')90??%Tn\F?sY#MEh^)M@Vh"J\'iObEhHY5)?>nuj^J~>
+endstream
+endobj
+383 0 obj
+<<
+/Length 229
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk_0abc_&-^G5c6Y4^cm28k%7CB/&@D!.C2'AT*BZX5A<h4,:9`A=#eS@e1LTMW
+s1pHEbiVi!fgp/$1W,!,cBP5cQD^-]4ALV/M+UF_Nq8KuQ&I+?2fm7mZ"q'[DF^u?
+%O!f'G_1]k=%3h+oUs+[%30&H#1Q6rpgTo"KJ!ZmcmfL'Po(3e#CQbp:^7tbJJL(7
+%:TnIf(U89iZgk".($@gV9].jo)G*~>
+endstream
+endobj
+384 0 obj
+<<
+/Length 294
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk`0i#VO&-^F?>c]bVNo7GJ36&t?V#V,\,)(mV!$t&XW&L\Rk"8)W>f5@4'$WnO
+r%gP@84YQo:YMAern/_RFf)",?"c7I.bD^G<`2n?Bu`Q`oA"*#_m@Q+amQR8,eLII
+AFnoJk)qS0I9F<K8TV!=?pG.a&3V@rcCIL^-W<nV(l?Y;#4R,^M:&qcpbnq(qpC!n
+=CdCCB5-&N"rjZPf&,$8=>K_[9Rlg]RhNVWIul]TQ&n.9hN8=<^6;?#A,EKIoO6f[
+K?)mf`^QPCr.>78VNEr#%KOJbqRu~>
+endstream
+endobj
+385 0 obj
+<<
+/Length 300
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`@5>K*M'F&NO%$f]/,NN,1dZBR@;?9&f"ABf.0I!n1,W;PZF)U%_ABYVXj,7UT
+8>s_Xo!A;o\A$>#ep;YFoj!taT1`<[eM,']V=e!51U;Cn74Z?@<fIg&4Ha1DE2fZJ
+m@Cu+ICr*tV*N6*Ql.U3/^V,$+UfFHM%-1HL>[52FDacS1/.=#Jg^(M#B0#:J*HkA
+-fia$R+7;9/9_llL'>da9,Th-U^:rZT-&mb00H!-O7"D>0dTB/4i&ES_Z\<*3dq9[
+iQrI(EP[AC,Hrin/;94+\SgM+^'4QlE7GO~>
+endstream
+endobj
+386 0 obj
+<<
+/Length 253
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSV^C#R#'ErHL6+Di6i-g/So+,_j($#qUe,rZ[6W%njK;5Uq3:n+]0AtIoh7b*_
+\-.5tDn(RDpcP0cp3AW0cfJQY>DE^LL?`Gni3>Le<2S=7.8IrfZQ#&b<tSU*El&;h
+ab!=/o8\t_haP3[j:.QT%Jo;?('Br'aP4p,?BO5m!MZO3'WJkM'HkA*"q3d*7"VG3
+$4td]l6n]2TGc-]h@5j!om-81)pFW=-i)YadJ*5h95$bd!<=+/!qQ~>
+endstream
+endobj
+387 0 obj
+<<
+/Length 333
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UT50i#Y@&4L5s,*IZ@,M3f_Ce.*4B`X&)85O:+TVMQRm6rJt>1oC4)l-/9q=D9#
++gu[EGl7U>RJ+M#D/2qnD7d5^D4bS9Wg\s//0!?8ea*m/05At:lG5BLWc$Hee`Q;J
+euJ"RmJGYYZg+_F@K@U-#DUn33gE5?"/<[SZU_fa"dAu_L"c_$0ucG&rYlji%"]"Y
+#,.^I[%d.;IYV'r7[+R=,^Hm*@uPHLi]'4t/k]S""d7`F&5<^^;a'q)/l7q5D%28]
+k*&+f:oK4R;],NZ*J8^:XG@6t&=<#4D]'%S+)[a>3>JgC+jJ?8o$u64YO9s8!0"SSAc~>
+endstream
+endobj
+388 0 obj
+<<
+/Length 301
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH70i#Y@&-^EK.4e1L8'"p8Z6:BnV$/,B+@/GS`)9L;>&$.Y@Qo[[6-9m=5%Esa
++T]iolkt0JgIp3j.q][HDPX=E=48*GSK@()OnQH=Re$AKgRbE8Bf`83[7&R=r^pq*
+qE$_(hd<=s(<cr4Qmop`JRW4BAhhZ?^f9:q@u166_C#D:idt+A@TT;K<m(I#^[NVf
+&(6C]BeGGQrCb-D6[7`^(hS5+$tEhd4I2@:d3RW5p"qaJ]?qY:G_?_*b#0LDG&$a/
+FOXsG*`M684YUM/Y[lng)Vt&X5[OTniBYso~>
+endstream
+endobj
+389 0 obj
+<<
+/Length 130
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'#@^&A"_12Z'LT#i/jf^E&-R$uoaDRW%=gie/shbLQ[ZGrT`LLo#>g:N
+h^Q?D_2q=IdoW6=W&0d_dm`6Ss+^B)H3S^%"L0'J-OsP5alVg0(!$Oq!;:8"HN~>
+endstream
+endobj
+390 0 obj
+<<
+/Length 183
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'=3rh3:bX_-0XaqO1#shF1,Mf-5uVh.F$2mP,`k^Fj`9qQdLTD51uQgV
+!6T<G3s@So(inkfqC7^DQ)8SI\gT]=hb`3,cX797+SN_Q_uZOVrs\Q/#efpBmJfQ4
+5Pos'+S_l6ci5*eJ,]KCs7?92s,[1E%tn2jSm6hOJ,oY\2Ik,~>
+endstream
+endobj
+391 0 obj
+<<
+/Length 303
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V000hTA\&B=7&'S0uHg1;n08Q^CW+TtgL;[?QP!4B2d79d*hV,n"+lnotn+Ef2#
+52YG+OHk*QpWJXBJ&X&dQ\BqERCI<`.X94@n8kbmij=f2gg?*q]W*r<&6Egoj$.Ol
+]"8Y@<4DG0H$e]=8c\JhVlO[hd^D_a[tu]U_;do'AJDd:FEg#*m6RVaf[c?QBM-Gg
+g=5[,?"04rNt',BK*IB)1jAG(n5*VbX4sM>SQ]e]VVo/FC8nb2K(j^;CjP8]B7?dN
+:kPP$eCMY'oNt;qU;XfFr*R1@pn%Ki!0J\0\,~>
+endstream
+endobj
+392 0 obj
+<<
+/Length 276
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WSY4V!&t'F4,j%O>uO#eUNnTU**UTI)F]ki;cod6XN`*0$_<"@`U4o?l-B-H*hL
+oLH[r:"'9c39O'h0qI8LJNG:!mC7)[V[6+-Y0JuIEemJh'LY#(Jg`^^0nCb1j7DfP
+6G>b%72#9L_@TPa^U6j:'"+=.',ok]SoU[,_BJB`_&o?llho`n[sOG"n2td'c-f4D
+c,gWujR?[cF_>3]FP`)JDHn-bQC>h4q\M9Jbi7Kf$AR.H3a!s?r;`F7%VZ1X7'Oqp
+#bM+tVQ;rU~>
+endstream
+endobj
+393 0 obj
+<<
+/Length 349
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X^9YtDr"&;GD631)%ROElC5(NIn.:'FQ%>58/5H%k8.\\l;4=%]^d2(nY*8J`Q2
+GBPlr!F)&lfU:EBG5fT=?ErPP$"kd6:AI)M7rh@VEm<5WVim8(DF<`AP$<*iP"SAD
+ZG&N_P`k$`T:`P&<1Gap.`)uU(lJl;N@>eglf/m;,o/?B$bYiR07_':NMO^kMLjVn
+Qc&!_:a'kS*Mjg]6U6.^Z1kF*XeMD+Lch+4eV*]6]%s""4^e6iPB:JkH/!'DrGFQ`
+iA1o9K.uqEYi$`Cnf$k?;mR%7F^qM$a'<I%EjVRlQYQ=^SOJOB%d7q\1Kg"ClX3]5
+Y7YkRcjbC6!:c(emf~>
+endstream
+endobj
+394 0 obj
+<<
+/Length 262
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_$0b/dh'F*J.#*QH7"Ps<h7?Sum9i)KbR-<T3eBpRW1E;CLE!/Z96>\;mW&h.R
+;ne>?V>Ym(7tHAbZ9UFf@h'<:!o:)Q`AGVlYckq^8e$0/;?1(Y-/dm.JN7\__;"X3
+!kh!6T@b"@ACY("9[Ar;'>%(BVMi*A%FT'WpQ5o^hIkj8@W,%3?FNdFjfM,IgEmkR
+qBnf4s6KS)pS7Vk0Gfmml]Nqtb-rD^Y#Wi,l\Tq7pR$]K\t3?,@0`t:!5]dhUA~>
+endstream
+endobj
+395 0 obj
+<<
+/Length 248
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X;D:p$#%CM("Z%BW'LT#i/lOPKhZ1SPeh^:P2#n92\Qhn$>l*CdVIj*0*^D/,
+IA['X"[anj:LAg=U=*!n:DX0=0T\f$r\<(*s2Q8^^S1Z,rs',#"$`1LK0oNh;#ddu
+rHP:$+R1[fl9>o((kl^Z:s<>4&"$g6^d:?K?n,U]:^qc17fC+lI>#*K+8$134[u+T
+UJT2`'K[QC+k.S>o`IND@#%,M4!Zl^;(4,!:Tcr8^]6D)3U6~>
+endstream
+endobj
+396 0 obj
+<<
+/Length 215
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+0<%q-&#%CLE"Z%BW'LT#i/lP+[hZ1SPeh^:P2#n92\Qhn$>l*CdVM8@P*^D/,
+IA['X"X(k7=.uFg1mQ857=bIJl;=O1%/0`$0\$,@W;dCF+R4M@R/-fVI\9MeYYkGi
+;#fX>W8lO0s-QbI$H3LPr^!J)@#BL9$O)fJWJ'P(1CU=4=K2>mT`-[eK.(,4n7,:"
+Y+AmL>^uhT]Ji<r~>
+endstream
+endobj
+397 0 obj
+<<
+/Length 344
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X_$4\EXX'F4+6;_5RnNj.sRRRGA%#$(n+#[2KRh9nX;3e8lq<\P>HlidT0;M714
+1UASTfLhP/MDlXGj!*ZF$U-R\>Hg9RVjq)7B'_`t\N%hG_sd,`2AN&!Cbn\%&>F8f
+GKDkAeLePL^2L!^@M*>+ndS'Ra<(%IeK&Ib.sFh3ADjCT5-Td,a=$?+=KjAG*,KB.
+TW5od8P(aiP7GXHIZ'!lf6CS?-dG-W@.u17qnp*(9?Xk:iu^^F9XE73iKBQ=MJ\]K
+BYQ7N5BAfaUSFFRERr`OT0pGDZ[^'^06W+2IDHL#].h9/<cP9p3R#$mF'#WRO<Rt3
+FAG+'!1=:^_>~>
+endstream
+endobj
+398 0 obj
+<<
+/Length 162
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+.:bY^"#%BA%"Z%BW'LT#i/i,j;hZ1SPeh^:P2#n92\Qhn$>l*CdAqjRe*^D/,
+IA['X"X(k7=.uFg1mQ857=g#@_>XH;"$8RBO$WdFrr^LFs#8I-s8RY"#h)$\0jpa]
+g0M(Z@I](&?Fa<(\H9;A!s$RQ=]>~>
+endstream
+endobj
+399 0 obj
+<<
+/Length 130
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<\R?(!b,XA"Z%BW'LT#i/gC`H+3ZUj1K;^Y!#!Da>Y^kqqV_cN(0p\W5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(Bk!I#(@Eg%n-F.fFLadnfEs$\Qh;.!kA:5!6HOpq#~>
+endstream
+endobj
+400 0 obj
+<<
+/Length 213
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z-G3srhi'SYM.'S5#KK\R%#j>"SpJZ.K@JlXKh/M.[=-fW,I(2bAb+D$GHj0c44
+"ZB_-IQ1rV0cM11Cf8PWhBd9>XH51!goqYDdY."=.SG**=[@?WM0-.oE^JJ4q0]d?
+aj(a*;Sa15'`^H0?@PH9Tlu#;J)LJX-e.W/DWjGMcjt+d(ZC4Z7#/du7p!6"U!T#(
+bq6'^4TM4hq]P~>
+endstream
+endobj
+401 0 obj
+<<
+/Length 333
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UU!]h64.&-1WK;?WkRDifAJ:#[0R]>0th.0QcS&%**N'Wr"RE%dN(P<;1S'M$06
++,`"<Hn:bTSXinbY&qkVen\>o]&sFXZ!N-,aiid7jj)'=H$[G(MoDHl='474/M&gS
+>?>7\hRUsnY8;#Y*<7qW+o1R83RJ*Qq2T,lOIDWKfr/DY%\t/jK:/`\VOhgn_c[I^
+3Li7$#;]@+4=K1)WDgi,*R*C6^&8K,c^Eqk^.Q?B?@=me`8(j]ek?CGY)L$CR@=ZY
+<r\9#Ncr_tM3S2<rX^RbYho6?XfoF[M5@t$/16J?!e5AO[moKcnjMJ3M\#SE!;d=:W;~>
+endstream
+endobj
+402 0 obj
+<<
+/Length 186
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z="mH)#%CLU"Z%BW'LT#i/e^l#hZ1SPeh^:P2#n92\Qhn$>l*Cd-C.p5*^D/,
+IA['X"[anj:LAg=U=*!n:DX0="pXf$s8SilrtshsK0Vg&8>H16';U(BWW0K-&(mfc
+.+A8'eGu9[^skS<0_L&1(]j@1%krU0K7O&oic=_Q$KM6s!'72h`r~>
+endstream
+endobj
+403 0 obj
+<<
+/Length 319
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`Bbt>l=&-q\RKeCRq^-Ulb1l6oS:P#NR%YC;K!:!G.U?BI!%q8lpi1[=dkR4c,
+4bOhg@m/m_ZS6lX_sUs!h2=:IA1P3dpmdp"I)@4q5.'_T/>CTiipd0g)$W`+@LR-c
+$\QFs'h&sMGP&WGGfK*=!)f+_Ji=qW^/^l&rZo&JXA0c3P-\uAQG08kqUM:a7&9Qo
+J`tIZ(f6VVn!pCgr,"saTk/VdUKXooSMF-HF/O9"R_('E0VU>[oi.dB&afPAJGc1L
+f2k+.7q<b2M<,c3;ZDp7nn00VNCq.iMLW,;qhP$bRg^D.G6"3U_,1~>
+endstream
+endobj
+404 0 obj
+<<
+/Length 306
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UU!0i#Y@&-^F;;HRu",K(CK,V67b+tXq"!XU=d!*`?OG&(>\+EF:uAWMp.7?l-:
+PCcA75E.5mOo3+VYPaDV\G"n(^X`%qL77:?)0_FT^SppRICK+)Q7kGO[X@!\>OJ,$
+4V-qT5CT16[_;9#?N?33C0$6<,!-DK*AHZX!FSqii&_a)1@6`Oh%KYCfSFsL4ZdX;
+g+aDA9KSFD%T`.P,R5iF6'?kc]HG>48m[V??u9_u^<iIB3#M%MMc6LD8H_%j>jXJQ
+?\DkJkY`^o>cMIWW=6++'`qT$f_a5`gV3ahmC./?~>
+endstream
+endobj
+405 0 obj
+<<
+/Length 321
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X^:4`5m;&;<CaQDWUHbQVf*$L8>H5>imR,ukG:UeG4?Y$'Y@UMp?.$KUa&/@,LW
+b(/D;o*0A_Dmq#.=Q0)_9nh^I^IgJ:.?I>8YhG=:F19I;fJSb?TID"5E>%?E[lp%=
+2m7Hd?b`9p+;*:cp_]c.f[jEP][=g;4eZT/E_=7ZK.C,>,N;2,pt<qrm!J3<'u*NA
+JOu5JM-*^e.BaHip7?+S6eSp>XI&QHgW\6mmM@+ooY26odlIEcEpiFH$P)0Oo3pc0
+I`9.48c286YKeU1e'rTd6$(GD1cN\,'aL-qF4T.F5(I,Fn*h.o^L<*\~>
+endstream
+endobj
+406 0 obj
+<<
+/Length 222
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X;D:p$#%CLe"Z%BW'LT#i/lN>=!5pbG1K;^Y!#!Da>Y^kqqV_dY`a&?]5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(Bk!c@/p6K6o!1Y./EoC)!q8E!/`\as8TnDVZ&<%WW*A<
+$A_!t!IG(uO%_^p8"nSWUej`N[/k"oe.E,1%YQn;!'cPHHGpq!!N!R]LCWtf(^^5Y
+Z!rb[EOgC9"`aVJ!%\[P'E~>
+endstream
+endobj
+407 0 obj
+<<
+/Length 315
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wka]l(\@&--+5%$>Gt,PYRF6:b\-85LQe+OR/!cn]bE_/-kP?R]2d,?8*DCltZD
+[Gsp1ciL*engWao]<h/MVc_l%L0C@DiH#KUd"N!*;;Ye:ao.b04MAP)K'X(l!SQ1&
+6+5Du0o)jai:1d?6$87*O-5<N#qHFHo223/^`$ruZq[94'ID.BU:)%FX"39rjo&4c
+jY=[N>`[o+gQ_$e5/K(\Z-T*01bSbHWnF8.Ie(3R%aY%;9nrK?HhjGHV7C#[@F)]b
++4ZeJkM:h^Zg+<4elkP4oW>Go?UKb$/IJ72Yc?U^^'=Z(2Jqj~>
+endstream
+endobj
+408 0 obj
+<<
+/Length 330
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um'_+MX"&-h&q!Z'p]8'&>n[[";Q^oCcQJt@>ih4k3DcY;X%Fm4eup&te0H3bO(
+\u^f\i+'hRR6P7X)3o;h9gqWR6*E;_A!)nVWhT&6Q_*^;L>*WqB.>Z1n"ka&p@3lX
+9^;r[r:nuSI7l[AroOg0JK(i2@U_)\bAB1b*mGCD11QD54``H,k/F^OI&%E:o7u;K
+7Q@Kb022usY;i4O'TgQOUms]m)8L7q0Y@D,-,IbBE6"!9A1@1`UN7bnei?T1'S[?H
+RWG?5Z2`K)-ee5LqM`g7'$7L+Os+#Ri%>F6hDV&<G(^;dNT0V,GZWo=rX8eZmcL/~>
+endstream
+endobj
+409 0 obj
+<<
+/Length 198
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X;_V$%#%BA5"Z&N"'LT#i/lPCchZ1SPeh^:P2#n92\Qhn$>l*CdVNtK`*^D/,
+IA['X"X)pkX&)\nR`aaVU2YV`%-fQ\rr3Gus+#4irr_up&(EQ9#LO(K)o;.Wqdq84
+%]986d/@AK+$j'O9`LG,7/r%hs$pc3\j7B(1[p%<+2HN=`2'qK4h1X)!!<5Vc@\7~>
+endstream
+endobj
+410 0 obj
+<<
+/Length 249
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\]+)VB$jL*0'Tq0]KQmO=$_?K*"d$4q#q?,Z8dZ-ZA-5k!@Zdl\aqW5@4/%4g
+Rc<bag%s$Kc%KQKBUFr#P=]JTi"8[-`E4YD.$:*+gB/3,UCEUoUP6'/.TTK2LL&@(
+FP3F[&HLl#i.(&8A8Zq.]J@)b0Df[+It.-o#%B3>T/s5Tj]#Z,/[hZi)Tan;6sA84
+c2DOO,(%NE[HuJ?K3Y)#JUSaC!$0;m?3aQc`js&G^'4QXKUkX~>
+endstream
+endobj
+411 0 obj
+<<
+/Length 324
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V0.0i#V?'ZP,_*?r0C8+;_0+\c,k[R^QI1*FEO!EqsI,+-i=Yu`DakV\6DJTT'H
+jl>#[MHsf80CgL6IriM+cM95.F3Q&p<CUaZ1HCu2R<*hBaX3YA)_FZS?eERNI?9<6
+`R?DOPa7C.nc&>VjW,kJJ6GD)[RpXmd[dB<CaqDgmMGZtpF$g:O%e-<Vqf</E3O3b
+lU96oZ+M;>f"uJ0ZsmgQ#.mDaGcG)+Vn`YSkhD/LL!=b6HX@*7"t$R22H0q$S[4/i
+k$U9UH(ImnllqcTW+m^0.<MmYo:gFFO*aF;X`\;UN9`7`^8,E<)ZUfWWq-~>
+endstream
+endobj
+412 0 obj
+<<
+/Length 416
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V02YtDr"&-h&%-Q[)4>.`T,cs3;9%LrQ<Jggi)HiUR]:pdnF=Bq7qMHJpsm^O(S
+FX`W8ZSRNt`kZ3$b\Zl`B7?^j3n#IET$R$tVOpc^.e=X<pj'$KdhI0(H@1ju;C2o8
+cXh-L/X\0Y/p/Y-nlEN?I6>^D8dc4s-%tN:pn(S$0F.h)VLnm($@kSX.g+-9#`/dI
+4GT2V=aBEu<QM%FmRF9ei^PZW&W`j./nWZXLW+p,AR`"?<(+?SQkQ^)#R7*t/;X6s
+r">Aa7'n<%*`G(.`Nb2[4%r)EN8oB*(/lpqa/ri=gbIEbM4(B`JDZA+@`s]bX/Egb
+`%H576QQu0MV'"3WfRGi;\:V<kMYblTV%$)j>eq<,<mRN&0^,QV.+o5qAO@5CWgh)
+gi&;+V7`-Z!rte0'm]~>
+endstream
+endobj
+413 0 obj
+<<
+/Length 377
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UU!4&3^J&-h'L;FGOkNaQ2onlQLO=^"'7"VOcS!%99]:ab(Bm$/auM/-Y0(C6Q>
+/&U!q'Vo\33>m,%J!paDR[R8uDOT9A<U*RA)qpWe>G"pX[%tb&MqYV>GVIB3'fYbV
+(#->n;lQM)2=GH*c`4Z64b32*H7_I8#V"bpdF*hL:9-aPBg3bf+<AuP8Pf#S\0DeT
+gli!ak3Sgp]j5GnYb'CJ$Vn5?i1/,0G)3a%.#q/sm%OmS`HXL&ctmY#437:J?^ZbM
+e;7N=q[)VGW$20'@f*+5gq\-h^e(;()Z7O069+<KUI+m=&VZ>!4@Vc[a/Eqh6TCcj
+n+[)^SE0s)1Di.gCqPT4.J/-UZ_KN-CXmR.ma^b+*dN7I~>
+endstream
+endobj
+414 0 obj
+<<
+/Length 313
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z-JYt>*a&-h&!<s5B\bB2DRd(:$uUcXA>?4kQ,#;DGZ#42J9>tSHQ@$0&3n-.,*
+MW6&`m-T\':LGo`h_=ErXIG^7=HmmH?(.&?(NqUY\W6C#Re%NdnX11>B+N#,34m.e
+Zc1acZ(.(Po=BBtipte7;'d7:DtK9O#`V:<.Bk<(%M]2e;2=ck5#;\@a<&kYB\Neu
+G9\rXfo\h/kS8=Z3=,RQV5Oc9p!g2mil_F4a,!M%V!^AW[Z,P+5\`?1I(6'I",&R$
+6oCX/#OEcME#*C073hn.6p(AYM#V4GP!?cA-/\<.!3274('~>
+endstream
+endobj
+415 0 obj
+<<
+/Length 121
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A77R<7!KX<WF="$\]9^Y!Oa.';-aMgebgbcO_?.,a3;[S34@S_\ESS\F_q7
+Ea8H9!R;$;b0sFcUo6,8bL8n2JJeObrso8=F"N`Z-W_E,?iVfRBQ4~>
+endstream
+endobj
+416 0 obj
+<<
+/Length 217
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<A76'1fc:g<A6.,0Jca#1#shF19pn;)CPS76Xr8H"_/3/982G3/gjFIrG\DX
+QbE]lF:)tf0]^[VoMm:g.S]$qFA_g7s53fOrBL0Ds8UXLq#@8kj8U5$+92B9s7u]@
+s,R7bkCK^`+DX0&"iKmr&UPW.)&rLG;9rY-+O;1f^^n<lncuu*JG]NK"838d5Q(OY
+cfOH6(!$Oq!'\G-)#~>
+endstream
+endobj
+417 0 obj
+<<
+/Length 123
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W<A76'<7!KX<\Q@10XFSH1#shF1,K#h)CS]+.N%H%-%TTI/shbLQ[ZGrTa@("
+#>gFRh^Q?D!D%M4.[1X4VK-sn-nm>Bi;^\^!Q&*bjm'r&a9<C\Mn,Rr~>
+endstream
+endobj
+418 0 obj
+<<
+/Length 260
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH7Z"h01&-cO#%#/!Y#eh*gCa\M<i$8jEKm)_`U_tta,`qEkBSO6W*l6Md#[`((
+0r9jT4sBmF$+X]OGf``=43+MdO.+@I]u"k!?I!=si,GEfV=GWa<:1>qft;2>L\?ET
+T@Y<q>Ljs!N6Hfc]r2,AL$Bf._I>q"m5Rb=q.#b+P#7AZ&+j"N+A;Pnh/i_G(P[>&
+j&a?/-DqTtr+G`X:<+I:3_D'AhpCu_.h22f0Z`g8ch+9c.d^DcU[J3`UN+<_~>
+endstream
+endobj
+419 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y"+3srhi&-h(2'S/RB#WijL\1uBO_$?>od)lHhV1kXd'FV+0UZ;\0;ojo]NF9P"
+E/UpP@;#Sm=Q9BKltMEu3#^dO_\&VF/dF@n0^NSS$/5PU&dUB4`=OSr"MnV+71DPg
+`:N6!LLc/#YoMrMde^?!T<+oPQTM0k0,7DY;4#BZm"m1K7-9HM(";GJ?>D"ueZeqU
+XS%(IdAP[.Ss?@##1r!WD*l?i[@(<t[NV9BURncLH5)+UA<-UuT,HbtXPl#:/&<Hi~>
+endstream
+endobj
+420 0 obj
+<<
+/Length 243
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk_0abcO'F*KQ6fBU[6Jhr'N<qQ[We)5oSNME`3[d%ui8D"hPSPoK[gj_!0+-_*
+ODi44]_o#@-Z"%'fhC(6hJ507Z0\seK[!Ul-L?bWjeT>$/?,I6UpBZP25tuBQh0l8
+q4-CF!,W8L'ggi5"ti<'5!k)Y6;Y%o-Pbo"<?\@25Zu2,&$ccEa3PH\9Qk-8$M%C#
+`n0D].Fe0.:LCC.L:GE@(\o_[J/\KqaD"#F!<B#-X*t~>
+endstream
+endobj
+421 0 obj
+<<
+/Length 260
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y")3srhi&:i^K!<Z8f)sCNlP9ga@'V^1."Kae:>$<=X7hIjbn0C"\aqS:)fo9CT
+;R#tS).rXgM*;,'O;O!3%WEfS#[tY=+6*obU#[6#4[>0^\%sa"Do!snP1:6mGj,je
+Vop.0)%r(;)%p:W`nIBjU!Qi7`thg5^!W%OWN`@FFAM!:qmretkc;Rf2eLcZ>P]as
+nGT9X3H*S-E0%.WD-Y/Q[7d>bb+XF%h!#t%b#Oc[`L'X@?bnjY27s+n;lCk(~>
+endstream
+endobj
+422 0 obj
+<<
+/Length 248
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH64UT%k&-^u_MSM&/_Ti<Afd(%;i")2Ad)lHhV1kZ:`g[.E8A%72/OH&(0r/hm
+5+!ACpTg/r:3`j#ST1P&W9HY5PX!Js_T>3h:,nbXSl<#ZF@sqa<YWff$e?$R)noVH
+-d%d7Fp+K3$rAi*i3raJqN0Y:Vbj*'Ci*#%8hd)1h,3gC!^5CjS0*oE^D$cN.!q2S
+I;+t"[mmqc`eAB?$/hU.?BC%?8?i/6T'Cd#<DGW%%fiTMT`+~>
+endstream
+endobj
+423 0 obj
+<<
+/Length 186
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY^"!b,XQ"Z$gG'LT#i/n5IM!5pbC1K;^Y!#!Da>Y^kqqV_e$7U5d25Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PVnh+5$Vnhn]6k+8b$s5NEd`J$<S\s1jZRs+*3Rrl=NC
+!JLJ/!b!krs!J%-0JL9s\RnYG"+BdU!U("1k&U.U$KM6s!1*c&#Q~>
+endstream
+endobj
+424 0 obj
+<<
+/Length 326
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WRm4\ipL&;=ttYiI-$LcGIrLHlem!JqL]:iQK.6imM!=`L_59mhW@GpOu%2dWaU
+Jqc8\CsBV<1JWGZ)V;O;Y&XEFlW\Sjg1SUBiAtg]GLT6J]R.#ddFPc@g%pjl>Hb3U
+*4PI\]tV-Bf^[aJcNfQUU4AorPK.u5#Tb=\i)@2Q)(QD*bS;rg%p2aoi;Gmq<UCdE
+NG[qXc,HK9B2'+Mi&$7H@;KLCI/`.'P<O%!7]!+YG"G:TO%&.A=ltMPALJ,B<+Efa
+/cU@=#q)*'_]LFM<g4Q6%_mjr)]NAO<6?`/BXouI,pc,;?nXurA%r3JG`s3A~>
+endstream
+endobj
+425 0 obj
+<<
+/Length 202
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q-&#%A6="Z'YB'LT#i/e^#`hZ1SPeh^:P2#n92\Qhn$>l*Cd->$NZ*^D/,
+IA['X"[anj:LAg=U=*!n:D\_7bl<6E!JC:N-NAV<Irln70nRIg%/)sWi=C2Vg&?aK
+8BUsBs8S/%*iSEI;a#qIW;k0L,l])[7O4.BE05XcNauO*DdZsB-FmAE\H9;A!s%oh&W?~>
+endstream
+endobj
+426 0 obj
+<<
+/Length 157
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W;_V$%#%Afe"Z%BW'LT#i/gCH%&-R$5oaDRW%=gie/shbLQ[ZGrOTCf_#>g:N
+h^Q?D_2q=IdoW6=W&0d_dm`5fr;Rl*+S:4&JKQ.%.:U(Wk5PlEoRlu>+(gT?NR/ce
+rsT>6&B*\qaVDl#(]\/@OI-~>
+endstream
+endobj
+427 0 obj
+<<
+/Length 196
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY_m2-&!\Zr@#L1F%Sf6`ra.,86`SJV&TLK!'s%,tM(_:a%icbK5r@5?u%G
+KM12).*8=S']?%mUca&?8r?5>\NF.3rr6p:s,RbFr\,H+6j+o,'PR:!^]6h')#jPJ
+!/V*q3r$GjjI5p7L3c<C@V2QKDtqB0r.k=2&,QkGp&CEZF1HU;"`aVJ!'[[2!W~>
+endstream
+endobj
+428 0 obj
+<<
+/Length 259
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y"+YmS?5$inZ(%YZJ4KZam>>?f(K:_gW/d)f9a7gDKGG4W0mr^]8I@gBPj8XH0`
+#PT@O,`kZ2'[kXjA4"b4NY,SOM/=5Q3$(LF$n[5jAf?:B,r#TSqh.8DR8\ci?IS:f
+5G;DFEEdeJa$tH7k.^uY?^<>-9-r_p<5-;+kd*a`:!2$I>KP*e=GXcgJI'2ZYidX;
+=f7BBNG%p/HfLMhLM]=.3ch`'fr@uU[GTHn5HGm;LgP\tMbB%6r!WR@1DRh~>
+endstream
+endobj
+429 0 obj
+<<
+/Length 136
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)W;_V$%#%Aej"Z'YB'LT#i/gE_+hZ1SPeh^:P2#n92\Qhn$>l*Cd7YY1E*^D/,
+IA['X"X(k7=.uFg1mQ857H#?[Ig-bd_>O<DoDa;m)uX4CcbR=+6!URa>_-.1!<DJMKe`~>
+endstream
+endobj
+430 0 obj
+<<
+/Length 235
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z-JYmS?5$jPW0-QZg_,;_'HD/&O[K;r;a5pma>*?>ibgWe,I&pt>L^p1ds0gu8^
+2\7U^pCe0q*DoG>PV&h)Bp7KsD'h:1@Qr"LONP&h@9I$E,+E!rP85M,@S@E73?8X.
+/QNMl-7EJfB3K6q@_oa;+$L=-I<5jO>8%6_@ElOTJrWuRkgr,4%_\=IE?gP[FU.^"
+[J(W/A`WmLeba(]dt#/aq?9VE>iKf)lcet^~>
+endstream
+endobj
+431 0 obj
+<<
+/Length 194
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q-&#%A6="VUul'LT#i/e^#`hZ1SPeh^:P2#n92\Qhn$>l*Cd->$NZ*^D/,
+IA['X"[anj:LAg=U=*!n:D\_7m/Iq&s(>a>_-dd!+9%?,P3mbos8QJns2Y-=&"EM^
+k5YJ6l9Q[grI79Zq&`![J4W3UP'M#/J&%(T?smn\?q)KR>WoV!\Gu^3++^$8~>
+endstream
+endobj
+432 0 obj
+<<
+/Length 234
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;O0abc_&-^FG'S0t=KZjUAZXKs<;8FgeXZV,;=t&)OHF"S;7nC0ZaEOp*67Njt
+`==]qf.K)DSEGWDcIVL<d#Dk]A'%BX0[^V0="56T,MS1L<a)<BrJD%u\)YO-Gp0Y/
+5QU@("kkF1hGT0W@S"krI0s?V!e&c/8R#\\"-!iq?8=^60WnCT17A)X%YSWVGectF
+[$PIF+<g&hgnosZ:*g1<ToGfLI0K\9PFNi~>
+endstream
+endobj
+433 0 obj
+<<
+/Length 255
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFn4V!'/&-_!G/P)bt#g<GdQ9_8#">u=Y6n8e@Q51C@0sU4O*/,V6;NMoST1"=&
+Z2':OP*m+:$o#VV8hc]B'];9n)5<MI!944"WG5(LItBKZItpl0re`f,e'/jIpt6Rh
+QeN+X"WH&b+sBUAZ]E6R@=*u,NR1.XiRD=nmURlC,3NpLe=GINarO\J^\`G]p[_mg
+LK.BaYhqHWf#AkCHaQL94tFkng`'BXX[N2qZ!)j#7`$p5/\D8fKr=k@~>
+endstream
+endobj
+434 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFn4UT%k&-_!W/VGRs&Y'5B&s>L0KrAAd5q<J=Q55@drXeR(5msk.n,fjf&U[=d
+$UH9TQESq"bWOKiM]H]g5.gA:T%gUrf99R"4eJ:R?%h3R8O5o0P[0?oTk%[<iuZrc
+L*PQV[gNQ?$n0n]9Q`!RZ8]](Xq@=HMicP1O,t5MF^_/02N_c#V/c7k6fYENY/9XV
+DQ@YT-KXp#O-o05:['FQ^f^b0SA][(&6%*k+#SmOmf0&-X\c"n]/0e-6I,Z4r1=+g~>
+endstream
+endobj
+435 0 obj
+<<
+/Length 174
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[;_V$%!b,YL"VUul'LT#i/n76khZ1SPdPFkL2#n92\Qhn$>l*Cd`eIap*^D/,
+IA['X"X(k7=.uFg1mQ857H#?c%s\BQ#ODlcmEH(+Ef<68lkoc,eM7&5!TAMnr1Ed,
+_uK?.)#sVk@qOHR5="fX(`;5!bLMe,O:*`BJJ3)j~>
+endstream
+endobj
+436 0 obj
+<<
+/Length 257
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;SnC0l"Tk&-^Dm.MdbhN\GO*6sdt<>V4S76q+noHiQ6>MM.dk+bc!9X!m`e3eBs=
+@_]s!(N3^\04sK^SS>3e?L(5H?MC&+\6;uods7e_PIJiWmZWtHQWpR->eX@[j`8%4
+cXl^N5Ms3tgq5&HE/N^e%%[#-j<(.e1!-%J,)T$Tj<c[)eH,s`%i!BQ6VeR(,)ep,
+U_F._.Y-@acBc*+M?JdJ.In`"RGB)]J_IAWY`FHXKO2Ht%<)"s!+lmZ4o~>
+endstream
+endobj
+437 0 obj
+<<
+/Length 191
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<A76';U@:#0X=Y32,d%#j=94G1'\.).%$GR)!Mn>ja]a>/shbLQ[ZGrOZAcB
+#>g:Nh^Q?D_2q=IdoW6=W&0d_dm`6qj8].aikoH>)2ah*p`C(I!TG1dr.'@7ScO`K
+605&$jU'oG+O'W,*fM';f`+2*VuH^K$D?DrJHi@YkAp7V$KM6s!6#PV)u~>
+endstream
+endobj
+438 0 obj
+<<
+/Length 203
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q-&<mW^'0X4S20i1Cqj=94G0`qb$.$ti$)!`%@ja]a>/shbLQ[ZGrM&DYo
+#>g:Nh^Q?D!D%M4.[1X4VK-sn./[TSs.AgG"7uNs<:U:cs$)JBs"OKQa7paNArr,S
+0M%ius22o"N$)[r)?0YSr;VnQrr7QLO+I:U@,DG>Ik\qGao;eBN;pFn4h1X)!!<5:8ZQY~>
+endstream
+endobj
+439 0 obj
+<<
+/Length 240
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTr0b/e#&;B'h'I;.HKUiK!+D[\d$#1Z<M,kZ_/M/e_6YGYKke%,>$XgFIfl8]s
+2)\h3?Lb'&L,d%9KPHJ9'_`305fGj?W;%6"r%Yf.U_s;><&"MK^*#tu1Q3Ht<d6W3
+&!5%5#[%Q2X*1ERe@7p7=-!dUPAsc_Q(<L8>EDE;bIkrD'?sR7VTrAZXo=O7ri<Nu
+*`i$T)Y\,l36krH/WtV,gfi+?D&*m)Cu@)LVF88q~>
+endstream
+endobj
+440 0 obj
+<<
+/Length 316
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTtYt>-R&:i_mL^PZe8'(H*\ee-DJe0mVgd3tN+$_C]'a;5)@:?^M[!9R(`i:\R
+1.B8DaVGpUo.fi<@gpT>#S&\Y3Qt:W:<P#!1`^4J9]])LUN-/R(ThLk^hDD+;Nf:6
+Gm:X_=7GeYH8"#o@-j-JaK#8dNkIbkK>>lDmp];8.*u2r_F,mOabD"cD@ei))M^OY
+fe,?ePMa@9OXg5W-AUSo#E`irK26[V8:&ggU<BRN=K=WIJUBh*c]5tM4$JgieCbl*
+Mp2!F16J;e+cBm=/]UsuA$!.fa&Li%;H`jUPS^I7QG3M%[Q*H#~>
+endstream
+endobj
+441 0 obj
+<<
+/Length 283
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$c5t]*M&-h&A>m+bJDd_`0g'7FB=+R9$>mS#f#>ga>'O@W0i3b%@V!eM-Qc6l"
+RCIO(Ht4)VcO=I7Mq:%\b/q1VG^ed`V0-^Q5PB-I/,)iP*kC%HYi>(S>MQ?!0>qoj
+hT5$+gEVcG6I[R9m^o6U#b[P*0Hmo?bQ4(uNkc8?JCORcbuW*W>MZhcos\h_8r#6t
+3!FA``U[@7/`!rd3qK+k:g:eFAHoI$0\J,,,#X9MQJjLQ!dI5dLg%:7Dinh2apq:=
+amI8Q,N&%K!542hAc~>
+endstream
+endobj
+442 0 obj
+<<
+/Length 300
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTt]l(\@&-m/E)'[nR,PYT<KTI=m'FC^+"sc8&!SWPB<:(Zm(jRF'%(o%@6eAPf
+Y]AN%c%d/6PNA"sJ!WiKKO]CdAsc7GT&F;b4%Nh0*T:Odj'a3%p1"L%%)R3^@L-%?
+K5eP-?j'oH`h2_W0?BHXPcg8=CHSn[XA?5W;BQbo;!j+XlGc!;BkqV>F)LTh1,[R]
+/%3n#<\q7."pJdp95Epe3^&Mb8DUgPT0;A`QIL3KH$.u6L%EaaaQJU0p>AoUB;=hh
+Y9t:;_72_4ET*@OJS<i'n=%0449bd_L*0+~>
+endstream
+endobj
+443 0 obj
+<<
+/Length 247
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;SnC3srhi'SYKX$fO!HJp.<ca(Sm-p]+4u>.FX@Zr"-$/5<?f)\G#jEf,t=RD`Pu
+R)dOD8YV&R>^!,jVPdCr@]bA`DR4>_UP'U?ZH+=UW3m7VGU;lh\("C:I&m"rj"1!u
+94NqH(kO^aP\>C<T^Ljpi<OV$MF\WD%DI5M3@@7R,6eG(+'&X^:pi]E'j0"hUMt@C
+<P,-)7p('">6aSjntE'E33Wgt$@\0J^\gUQ\a8E:!2W)KF8~>
+endstream
+endobj
+444 0 obj
+<<
+/Length 113
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<A4D>,@^lj'*TUZKbQnW67sAo/>usLB;f3KUh?ZgSBL$Tae^'h<5k^&TjYg8
+mhF]]@*#25l)RWY<1:tkl(Yrn!rNUmbLMe,O:*`B-H$H8~>
+endstream
+endobj
+445 0 obj
+<<
+/Length 112
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XW/<%n;=,@^mM+DIj;@`VQjASD,V<%uZT<%p)UZW'K@j`9qQdLQS_imRQt0]LN)
+$?0$"jO3ep<@B:G:$(qf;.)WhHXo%$X!^sk(LR7%D\.F~>
+endstream
+endobj
+446 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+14 0 obj
+<<
+/Name /T8
+/Type /Font
+/Subtype /Type3
+/Resources 446 0 R
+/FontBBox [0 -19 52 64]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 100
+/LastChar 121
+/Encoding 447 0 R
+/CharProcs 448 0 R
+/Widths [51 40 28 0 0 0 0 0 26 0 0 45 0 0 0 0 
+35 0 0 0 0 48 ]
+>>
+endobj
+447 0 obj
+<<
+/Type /Encoding
+/Differences [100/d /e /f 108/l 111/o 116/t 121/y ]
+>>
+endobj
+448 0 obj
+<<
+/d 449 0 R
+/e 450 0 R
+/f 451 0 R
+/l 452 0 R
+/o 453 0 R
+/t 454 0 R
+/y 455 0 R
+>>
+endobj
+449 0 obj
+<<
+/Length 295
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V00YtDr"&-h&%.0@u"DfG:LGB#?/)nA&H'S9@LJ6E:0>4;<"q^?`C/Q42<ru3r=
+8[eDO)4:5D>0#7Mn^_^G\@^^$8"\;<.&,L9[r^baQZq-o<'PHQ;LOTAebdAh40"&@
+rr2b>UZ':GQRabZs%61eV0:\%FL1DFZsPWB#YbVH2+B6uT5M?$4rZ/i8EH[9hp4"O
+;sL%QK5M11-g1aZ3_:n+P@1nB/hfl9J'3!+dd"\gFugT8!2n<^O_(nU0@@qL&Y(Z3
+q9&>-V%4E$"Hu8^\f9jirWW@N:a3.~>
+endstream
+endobj
+450 0 obj
+<<
+/Length 249
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;O4UT%k&-_!G'Z)[e6KS?<`;HtM;8Eru<ZXLX/JP<GWOu9IMo6R1g`kf>M:#L/
+^4eN4c:f3s^^3e(Ne_ZaksA7iI2pQnR>"NP%VNq)o(O-#jKGCJI^WO$8:J;3g\$#i
+I*"Y8!M,YZegl<ke.TlW&rhVjBf?XX*p]PC)t-E_TS;Z$@:2Ti;BM,(T^X&B8>h/B
+=+[F45>rLXOD_7NY,=sGL\0n;^p.'TmU'1$K2t#"kWJpHoqDQ~>
+endstream
+endobj
+451 0 obj
+<<
+/Length 238
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`@YmS?%&-h&`LVbWkK\d)M)\(e-W![,JFRfI^d6Z11#(3[<8pu>P*D4YR;61$@
+mXtPSjgagh;k03e!iH)1*6o\:af18`&]\<pfUj:QOR,e_860=+8\UUf$$)$WbO#RU
+JOEI-#1A&[GT*#AgH&rd.UrWZfr=F@e_4>lF[2!_qUdh2T8bZ!=>L`lqS'7Rjc"VR
+cHN20(-\"II'W2[rb]6K@Q(H^Y`uAGf)T<96)4~>
+endstream
+endobj
+452 0 obj
+<<
+/Length 189
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U<k4UT%k&-^u,MhPk-Jo^tKT7g;R;8FgeXZV-2Zr"+f8)'g"#aQ5Lj&<"0mgVBc
+1U1E8"VMVV'mpL5V-'JhD_:+&B--5XTfS;tE\,=L0p/O2.h:XgNpjGI6YXdh=ZRf'
+B.tNZ,@uD1dXtQV0Mu.1<B=53)4jG.U?HfI,H\4YN297C"+:@RFc_UG~>
+endstream
+endobj
+453 0 obj
+<<
+/Length 260
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V_T4V!'/&;;8A,h$]8joUDWYVkquOhsL:&"o4()QhD30t[f_TVN\mhk5g*mO$i:
+baZ_e9i<!GWe4E;M'fJK@Q=hR&T9GUF;Rq$p*Z8>'(+<rd>F)TZcuaCA8AkbDF_ea
+$<.%N*1(>j11t$!:Os-Q#e\M^p&H2:Dh4`\2?FE=Ts5g1*&<gC(AX#8A)8FMg\Ho4
+gS5"_,NHf,oTs^I0gl&K61_HLIY(WK4mcJ9*M,8[iG_"2/''K0Xh4l=/t^3X~>
+endstream
+endobj
+454 0 obj
+<<
+/Length 228
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um&4V!'/&-ZI#Kul1,5ir-Zr!:_fJss3'M,kZ_/M/e_'2RPSXLuOk07_joKQ4eE
+K]7?tHd.IXoJ+<^JC+M["SVqe+AB<;0qMi8%X@$d*?e?([MU>6Q99`>eh[_"W"iXa
+f)qs3;OPuU;kou%dal=IYoZc]%+C4]*NSIHDj@^rQ`7N$7EoU(UqI:Qg%Jlnd^^Zr
+NC)Ki94mBbjlFZf==Dh;G6%Yr]Xe~>
+endstream
+endobj
+455 0 obj
+<<
+/Length 316
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U<l5AJ(i'F&Lo%tV4"3Iu:'eogsW!hk>oKmG/S;\"n"m*O1^;7;FtP+b7Gd?4ks
+Rg7tTl$Y9G#kSdVdO2`U`&tVNT1mLS@"qUd8a)AnddN3%nKIEk2m5GZSl*.@k9te!
+22^R8$^4DW]peDnh3P@C@AS(B,#?md\I,iIb]V!$-u]\blus?W;PEfo$^R1_Y-,!J
+nYhb[kKn5N8&=>Z_F?cuqc%eQIV2]K>[cS$oS#'5U"?,uDU;\S'\G%dJ\)CEi")?o
+$#?6m*<"s^<K^?,aU/O]8.LcP,O>+L'_kadT?qXKn+8gEP'pNu~>
+endstream
+endobj
+456 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+15 0 obj
+<<
+/Name /T9
+/Type /Font
+/Subtype /Type3
+/Resources 456 0 R
+/FontBBox [2 -23 105 68]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 47
+/LastChar 117
+/Encoding 457 0 R
+/CharProcs 458 0 R
+/Widths [52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 79 74 0 0 0 66 82 0 40 0 0 0 99 0 
+79 0 0 0 0 0 0 0 108 0 0 0 0 0 0 0 
+0 0 51 58 46 58 48 32 52 58 29 0 0 29 88 58 
+52 58 0 43 41 41 58 ]
+>>
+endobj
+457 0 obj
+<<
+/Type /Encoding
+/Differences [47/#232F 65/A /B 70/F /G 73/I 77/M 79/O 87/W 97/a /b /c /d /e /f /g /h /i 108/l /m /n 
+/o /p 114/r /s /t /u ]
+>>
+endobj
+458 0 obj
+<<
+/#232F 459 0 R
+/A 460 0 R
+/B 461 0 R
+/F 462 0 R
+/G 463 0 R
+/I 464 0 R
+/M 465 0 R
+/O 466 0 R
+/W 467 0 R
+/a 468 0 R
+/b 469 0 R
+/c 470 0 R
+/d 471 0 R
+/e 472 0 R
+/f 473 0 R
+/g 474 0 R
+/h 475 0 R
+/i 476 0 R
+/l 477 0 R
+/m 478 0 R
+/n 479 0 R
+/o 480 0 R
+/p 481 0 R
+/r 482 0 R
+/s 483 0 R
+/t 484 0 R
+/u 485 0 R
+>>
+endobj
+459 0 obj
+<<
+/Length 220
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z;D:p$;p[BW<\Q7.0XFSH1#shF1:@=C)CS]+.[]H<Jg>nXE\<]B-^T:lK!?Vg
+^'@Jp9A_26=TM'=qC7^DQ)8SI\g[I]K#]"n+Ga]a'9"&c)2S<D$$I0U#>FX)L`^"k
+*_:YY'D=->!LTej&dQ4jIi-R`Ba&s4&6>IWK<PF%*eY8Qm@g7UL^Z&e]n/2ardtXY
+h[Uj?>WoV!\Gu^3Jd7?T~>
+endstream
+endobj
+460 0 obj
+<<
+/Length 335
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;P5t]'L'S,-N>nl.m7qaNJD6[2T<>ZJ;6I:u&:mWdKB:TNRZ-H'aKIjG8M(e=?
+L(Z&)ddi*Tp?-R&=j%TLY*HITo"BT-k\:tggpYgo]W1Mlp'J>3W`Rm(:d*egW-6L2
+Z@Qb8P!@k$%iF_G^m0V!S`)LVS61I[.Y/31)RLn+9VPY,.!!>tN(hHPq3\t\,IdMY
+@^on,6s",X78T`G0/*g`c\Y+oL.5"6%Mq+EKV67^n;II$&s"1]^c[Xs*OU3EC\&oY
+KNQ*WEE"ER`[Roi3fhag"XmOfiX,HL)+t(@SsH&5"!OR?C)&H:s-ilkn1_Wcr!i_V<LLu~>
+endstream
+endobj
+461 0 obj
+<<
+/Length 281
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WkaYmu@>&-h&*#*N3e#i#f$5m`JqW/2NgFRfI^d6XN`4;s:?,;:kaC(")V&/Rp\
+(J<0R0:,'Di)6a<_0COo&8i&K]tf"Jk98+PrAn4-P9>l&7j,8:(PlnB_@VCUiT'pM
+J6X<TO/Gr)b=PI?Un^oRlG\'"IF)*&['O1iBD[f%<4]qro#^cF]nYh(Pc(7'AY6Fh
+NKkj*:ZeJ/GD?(KqeR?hSA0#ul9[kk['(SK?d_*V8ENf&O)fQr2lF4]rL?t^Nok!;
+W>'.o*8is[Ia/mT~>
+endstream
+endobj
+462 0 obj
+<<
+/Length 210
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)X;_V$%#%BAU&5"\<.c`@m!:mrM`d3@H\ctDD3L@q2P=n,F_:4'0hZG:GV=,,V
+X8o%YI2,A38lN8_>ne-kJFPjQRc4;H"-!9[2aHU<;#1]erXYbCd-(R.qE[8fq?%*'
+_]GBJ@?6KK@/p6k1Aq2F++VcJ?lJ6TU1fp?K`23ik/6C),gp'c,8q7VnjLi0Y+AmL
+>^uhTG`YXZ~>
+endstream
+endobj
+463 0 obj
+<<
+/Length 355
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y!B92<Ai%#/U&$->O!%DWd1,R$op<@T,R"VP*\!+<nM"RDjBS(o:ET^97gC2=E3
++Oi!"id;WY-N<1Uaor#60"D</:ALTZB;u<I4.L:M.Fk?Yre]bpj`arEP[CJLo(hYV
+Q^$)\r;-!X8G+9ea;S[]Tl0tQjP:UPUf3'VZ_`!K%T-a=d)8)SOF@((=D>&X7*rFZ
+dj)OE%8f@4(+*&r2;r3K9p,s3CQU2`R:ZkZdTaBs/5lcYr!crs\H=TY(]4frn?Va,
+E$qI+X8N(oK)Q:VZ&Bic/e1f#6Q11h,`%($Xio3>=BRJ>V)31="./o#^^ksHmC;EY
++#Uo2bM(^u<D<kt)upNcNM6~>
+endstream
+endobj
+464 0 obj
+<<
+/Length 125
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V:bY^"#%9:k1F%Sf6`ra.@h@Mt`&6+%<7!K&'$7[h:7b_ei<mTE>l#L,.5$%H
+!+uI&/q$N&Kp&1Y<%^r_"U6*Ja%#tk_"ds0#UaQq%[X4D=!/;e!3U1jZN~>
+endstream
+endobj
+465 0 obj
+<<
+/Length 320
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W#JZ"h-@(^KOD"j8il[9L?]BTkuKhA!1G1dds35(G[T-jjj(o<eY68:6&K)+)dO
+V[fQt@ICZ*rJo(l%qdJL*+RZh-Y$IPZlpBo9H<*ELgNKe@SP=9JiVSIJhLA+0`?:[
+Lk>8gGME(RdLS7UZn_tu')3m#>pnXuT5f/Nog<*aj>camc*QGXLofJT]'(B>KB'7m
+/1\cm]KC?h`QkV*.<BOc8f:DZau"R&;5R)&UJ,f0N&"u!@;Hb).!*su1+1<pj)mC%
+q5X$PU:S,^m;e%hF4J`FpMZA,#8cP%%fa*Xl>F;)kqf.Rr=/gWJ-\j~>
+endstream
+endobj
+466 0 obj
+<<
+/Length 341
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y!B0i#YP$q21R0p8"h6@8e>!Al=,8..ta5_=jq!$qe^[n_sLUZ;\bVH@F)[\F:&
+&LC@8DetKpnXn'c>Y(*c;DsjSYN2hH:Q?#^\?@3MQ\`JjIdjf.i^I>;iW12T[SOA1
+E`#'DmVDjJopqnC3_Hi@6u.FH-o5OnW53\R0Mi5rW(Ia(#Ft$Zac119)`3Li/TO89
+W$g)RfYF&IfA`*o-Ve%qZrldYr;c-e[WA)FBXJQhC&S+$T__HOgR)/MJ;&@Gh.^:9
+#G9X`L;Bc+0O>^nHA9hTa=Zb8Xm+BGlLpiV29eg"W#SKK/<r:G<55$Cl&eY6npSd/
+r&k&>Xb$-~>
+endstream
+endobj
+467 0 obj
+<<
+/Length 460
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wkb4\EXX'F4,1;FID(Q52gL!h,1hAII2,WaH0".hA;=Jr50!6F,ssZ8]l;;Pj_F
+^97[e<&R<s1]KDXRnOHu>jP@4R^aV,GK\K!-2,S1nH+JU[p6H8/AYJ:4MKHBDPIFF
+/o5W^F#Mb-?+RsDq5sO=s*V9NPr$F)*BjNYB(d<snGkWJ#1rs@Ln:jni%&F7B&I>[
+_B7\BC'.WVr'>lgb]\eS6n%8Y)3>/.6ouS+i3j"^#i-KJA@2:9L%Ng=0j>IB9=lBu
+TNP](i'Xh><$8k.%Z5Rj=b-f8(%+>5@I+jfW+Zq2S.=LCKt_"dK`Znsdd%dY,#ENo
+b(.@L_N*"l6GXRK>"3;Y!G:R%#T&.I`CYm==%9)9"NQ0tEKjn_0mX!/%)FWJ%_AE"
+1]b`K8qo9YnQN`S$hG;p--BU&Pc,9*,Fef]C.6=e-GX7cpB0c)DXZue!;!B8M#~>
+endstream
+endobj
+468 0 obj
+<<
+/Length 284
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH7Yt>-R&-h&WS.HNjHNSIu5kj:+EM[V(\:pU+4b-^>-sH'T5$/jPO0I^]bDq'm
+@Nh,uKB/ZK0\`6>D=fsSG,+H$4pQ@sG/m*Z)f72/1\1/fqbHF/[QCJW(eMDj\CMdF
+GHW+WT.eXKW(jcWZNtKX!&0mVDj-Y.N8@Ca\?`WQj=L.D>5`Sc5I-GI5.acsSte"J
+d'5Q@(HA9JWr*\3DkC/.`6r:#B5t<Tf2QK_WTUA!gD>203Ishj:,rS>"1LVC_-E3n
+M+a>nG4I'=!rrWOSLa~>
+endstream
+endobj
+469 0 obj
+<<
+/Length 263
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y",YmS?%&-h'V%#%p^#e_&$2UiGM6<17BTT]nZNXgrL[ZBRGoFW')"OB`ABL-SL
+1ZTbe3W;[qLa%_UYK72%M.r`)O%.<)7*1PMJX/*[eiV)r$s-srL,1j,0O'K-(AXJ\
+LXR%1#r/Y'n=@/0rXfDU2(1ru:^A@4._lpL61Mo-I'/\Fn?jX>>WW9/ff#1S%]SL^
+RG]I*f<e>b+^P0kE@&84>Oe0%9'K-&P[s*f:&C4Q$6(f4_QH'Y:30\"I/m%9/M-~>
+endstream
+endobj
+470 0 obj
+<<
+/Length 250
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WRl0abco%#.\A4NR)Rcs/ijqMNYa5uk.ATT]UW7gDKG<kMPJaZDi0%](mUl/3tC
+Db.a;0A2j.1,MQOS,#+BGX7Nd1SN$SRAM_Q*6qZN)"5T-(p@M(ENreGMK-2#g\$$4
+E_4K_B'oYd*J!5i+C`\m%oB[6#Bm*T\-Z@M(QN1YLg%oXA@,Oe>EC]@+8#m(#85@d
+-5=NmIY\"h47N_@W!6,*]k1(no$5h@=7SlN%Du2&4+%P=eHq.5~>
+endstream
+endobj
+471 0 obj
+<<
+/Length 264
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y"*^C%h3&-hWf%#%p^#e_&$)J[5cnIO8<d)f9a7gDIqqe18>4@7's`V?8j-jVG7
++Sf;`"MW%adZmM[>4S9W1YHJ+Ej"rbQ$uN7N^aQ"p;#^?e$\8*dlCU%NgCEqV-(h7
+FP1^i'p%INk+o2*o>(?\1(H9Y"YA%*PXGR$[YT%#@1?s<'m\Ct47\YOYc<O!^&mmq
+q':ECIR<jm:EcfcNE[QRR"6rN_S/(*j@6BT@H\:gD1EiGn<B<Yo;pjbhZj.`aY,[~>
+endstream
+endobj
+472 0 obj
+<<
+/Length 262
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH70abc_&-^De(4g1?KZjTVY1^ZeL^L!j[.433Bq]4RnRaf(*[,*PORGT4=QgM2
+G!6=alr:ufb0YsP@OH1MHtI/93#7uU3\m-Qq\*U&-TeSfPEeV-A=L-n-XY'iE]\<U
+&:br)2$L!-E^2oIdrAX2BZ^&U%A=,+#H.m+#&")5QQb&_V+SEie-g:Ml.bY)Z>4u?
+(>jk;ji>MXP@!]-]ts"`RV?Di]9\:XN@<<U.&gG7T@YqgmsVjmH-;6L!))LO\c~>
+endstream
+endobj
+473 0 obj
+<<
+/Length 202
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR90b/e#&-^FS17;a8^g',@>TtI#C>p!U>'U+U[*WL2*fZq6"A5]mNl7+#cJlV"
+B8ZM&.@E.iOiaVb9?qa)V=q1*75"1*3T%@?Ces%_[Q?XWXUf3hg%rBE+0R3lN;u<I
++Ad\]<+-nAd3l%^B9Y:`1PAAoOlf:^Zps:XV6:Tk-g:/7MPs2IO$MtE]_-[5pAc3!e0+~>
+endstream
+endobj
+474 0 obj
+<<
+/Length 337
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W:d9hN>h&;;Vkf[($'#,X#G8S0a'7Ym!1Ag-B\"/nj/MXH/YBRQ+/6C(c-.::W8
+E$JIA?UOe)Wjc,Nc"fLKe\%llD>:XJDkYu2>P!-Xla''=i6uJooq?]mFrRGce3^RT
+^LDTh*Ik_O^4cKSAYEOmP/o"(,<9dk650fUd8;V[))$lh90+LWGjKI8*5,2^kl8Uh
+s3J$IC6kUjS`m3W,SHN%*-b%]AAW2VBH3Cp?gNa!W]$o:7]/:<)$a0=c?tnC.C1eh
+J;#0W^d02%ZaY?(;DS8Dm@7uBa.t7p8&d;Gfi'iY0TgW06pTBq==C,a=1IM46hh]&
+oT%S%~>
+endstream
+endobj
+475 0 obj
+<<
+/Length 202
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+0:bY^"!Feu+"Z'YB'LT#i/lP+[hZ1SPd5+bK2#n92\Qhn$>l*CdVM8@P*^D/,
+IA['X"X(k7=.uFg1mQ857H$JKIh6!19`9K<J*9Ed?jBU=N$.Br"%,55qSBsT&#;D1
+1WTZt#QG`.eD^E:r'78&6Lk(?^^d1$;(-d-<;dr9(`4)S0JLT.UUXPl\H9;A!s#5d-u]~>
+endstream
+endobj
+476 0 obj
+<<
+/Length 161
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-<%q-&!Fd9P"Z$gG'LT#i/gE_+hZ1SPd5+bK2#n92\Qhn$>l*Cd7YY1E*^D/,
+IA['X"X(k7=.uFg1mQ857H#?cs$+a-Ik^m%_!q@)6Tl=h$3I&S$@p:g!J^U_W9=K(
+s$*kV$k2LDLs+>4/!(,m!*')ST)~>
+endstream
+endobj
+477 0 obj
+<<
+/Length 130
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-<%q-&!Fd90"Z'YB'LT#i/gDS`hZ1SPd5+bK2#n92\Qhn$>l*Cd7RgYZ*^D/,
+IA['X"[anj:LAg=U=*!n:D\`b%0%2Ad1;!3Ig.E4?slGn>csZ'JR!^+!7[us/-~>
+endstream
+endobj
+478 0 obj
+<<
+/Length 239
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;ZESYmS?%&-h&CMS^rjK\d)M)lSiM:_h1ski;iEUP#:^h0c@"-@#a7%&N-@:+h.)
+OA!<[4#3<\<)P#RAlNJ*BKW';P04Q?WMW69fD^H2_dZ,*A$M14(A297o!gP_0=N1;
+"Yjs51P:sEF<[Ld/V":l,t<F?91Sd"6/<bB_SBK;4(3diqiU1)M\[B#LUO,?O9Y;P
+k!JKM3FlLME#AKd!A`?9P$L#]&=3m9p`9E!VtQY~>
+endstream
+endobj
+479 0 obj
+<<
+/Length 196
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR40abc_'ElcS(&1L`Yl=d9]<DZdJZ.KBJlWpX/M.[=PKmqM?6i$3R3M/!_+G8S
+Mj_U>EQ4#k-:SK:&"_&\]l#dS0_IPJ>5Jt5M<p7t-bIfbCpf\;P1G#ogl@U7/<Db+
+!<h)s!7XUOPY,RrPZA\I4eC(91>r//O@QI@&'Ah?IgV9[JGB@#'5ctk!1]LS)Z~>
+endstream
+endobj
+480 0 obj
+<<
+/Length 248
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wjt0b2&S$q4HELubC&W%S-bg/MO^<'VW0&kj8F(`>Rm2b312HA%;!.Y?-bKNO>;
+-i)M:r\&?8W1]P&]c`lp8`:D,a^R`NTOP'K`].;/2CK*399^A:Tr`H2;CKeUm^L4S
+c&/$tM0!QfLtMf./-)mWBe.sPRQbn)jD0R^FhMG:$!sP3>;7`$':\i&2Yj47BZ5K!
+Fn>S#`8Dnc$QReTE&E'^D;*"%>Tr,-^j2jE\2Lk;f)R%@Q`U~>
+endstream
+endobj
+481 0 obj
+<<
+/Length 263
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XFp3sl$T$jPWsV@_1#KZs[B*HXQI"WuY<Jl]=3>$<<]<j"sa-lug?/I#_)#:^'=
+2Y1JmQq?:@>iu;mD2V\`S!N6'<og>olg3?\W7b"sF1.l>9(@S*V0JXjME@RclQmSB
+B"_JHg1,[V&ci?,^^8)H"-=q`US8ScPf7E_1eK$kP*/?WaJ?VBlijM@EdeSuJZh<5
+[jLO6j`n57c(!H9@3Qp7Gp)150XSk7&7lXnicP?[>[NUX"-e7#rKP<D)#t6Oqc*~>
+endstream
+endobj
+482 0 obj
+<<
+/Length 189
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<\R>M@1sb=<(Jb).c`?C#P,]9@m*0_>lu43SBL$Tae^)^?u4,bmfA[4dWZ%;
+<WH$h^'Z/TV5[^k/dhUqs"XLc@/Ri;cbT=,6(WYt!<YOgj+.G#UA4fd%n?6pm!flJ
+JHUTfS?RLY%jX?[s'_l+@1OX_s$nF8e!sfR@),NV\U&9"EWH@E]$60!~>
+endstream
+endobj
+483 0 obj
+<<
+/Length 273
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;TIS0l@%I&-^Fc[Qp9nO2,!C=c=r/ZpKS5/W`Mg!t\'3:f;X=j]]r(Q5`Xu+?hTn
+,*MV0q.oshHC7?d#;>%-i`nZ1ml<daS4O,%*kc1.B#fgqRh#gfRl?>:=fbuKF47;Q
+lgVULFt"ii&Qb]>S;A4\7UMc-9"m?.JAVoi$om0`KEe`E!78ZW.F8Y9,SZsk4_^^g
+eQ@;EMj8*M[]=Ei44:<-->b5%T;mCrSZL9dlV)j^,Md]d<`^.r-Cm%hp%.+nQJ_Kr
+!//^PcN~>
+endstream
+endobj
+484 0 obj
+<<
+/Length 197
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)V<%q-&;U@:#0K)c^[89CKj=94G2?F4(.%"0f)!Mn>ja]a>/shbLQ[ZGrYn<>:
+#>g:Nh^Q?D_2q=IdoW6=W&0d_dm`6q&,ZADp]DF`J:nF5E<?n2f`1sV`'8eI!<WEK
+!uh.DQ)>7D5R@C&O?X#j%J#MY)q^SY+(/I]3fG0E5^B#4la^7`\H9;A!s&%ePGJ~>
+endstream
+endobj
+485 0 obj
+<<
+/Length 203
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR:0abco$jPWs*"#h26?<10OZm^tWe,.#FE/,'UP#<4ld:$C*hd)!nm[KW34n5r
+s.:TTa`GaQ.dS/<_H3Em3O-rj"m7\HcGns8Kr=:U:+4k"79OV4ZRpXPcc<(3^L9RX
+2GkU(pe>Cf<MI0(s#\aim"^B.5P,en@b!22`M>L5(!mdT7K`AT5Xa>%8m>(]H4L"k7]q(~>
+endstream
+endobj
+486 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+4 0 obj
+<<
+/Name /T10
+/Type /Font
+/Subtype /Type3
+/Resources 486 0 R
+/FontBBox [1 -25 71 75]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 12
+/LastChar 117
+/Encoding 487 0 R
+/CharProcs 488 0 R
+/Widths [54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 38 38 0 0 
+0 33 0 0 49 0 49 0 49 0 49 0 0 49 0 0 
+0 0 0 0 0 0 0 0 0 66 0 0 0 0 0 76 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 54 0 0 43 30 0 54 28 0 0 
+28 0 0 49 0 0 38 38 38 54 ]
+>>
+endobj
+487 0 obj
+<<
+/Type /Encoding
+/Differences [12/#230C 40/#2328 /#2329 45/- 48/0 50/2 52/4 54/6 57/9 69/E 75/K 
+98/b 101/e /f 104/h /i 108/l 111/o 114/r /s /t /u ]
+>>
+endobj
+488 0 obj
+<<
+/#230C 489 0 R
+/#2328 490 0 R
+/#2329 491 0 R
+/- 492 0 R
+/0 493 0 R
+/2 494 0 R
+/4 495 0 R
+/6 496 0 R
+/9 497 0 R
+/E 498 0 R
+/K 499 0 R
+/b 500 0 R
+/e 501 0 R
+/f 502 0 R
+/h 503 0 R
+/i 504 0 R
+/l 505 0 R
+/o 506 0 R
+/r 507 0 R
+/s 508 0 R
+/t 509 0 R
+/u 510 0 R
+>>
+endobj
+489 0 obj
+<<
+/Length 225
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z-L0abc_&-^FG'S3e_joW,`OC5Xb<,`42.hA;=(5g\4UW&]*]Kkg7`:%LVdGE#s
+H15GN[b*-B_hiJIG\D=BduMj]EYjp*b^C_;[T$GY929QV;d#58k9H!YgDM+,`sp]V
+"*XpJ<^gKZ65]nc"1JgXi#8;SAUt2%$7L\`GpU1)SNZ`rSiZBdCSuQ.l0#5dh=Kbn
+oKQ1fPmSG+5,F+4"[*%iF#tu#~>
+endstream
+endobj
+490 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.(0abc_&4Hs7@2b2g\U_]$"RQ7f_%_K%*^D;/'Wm!iV"@9:7BU(g!^`=i_=-`&
+'C:F^>O9/lIt'035'q_G.\?s'LH]W=g65G*X9\Uo4?]!W]q[8*GK!1:44@,K_o8!+
+EhbW:&#V!J'*`L8"f/pKE:=01"t3rnTuhh?+T^:^#9UcJBda&+4177[\Jagio+.1V
+efQ_AIQ(>X<W=s3RUAk>._-s`M!/NOUissiX[QShO=I%;>t\o^b%VdAP.h"u?:b2l~>
+endstream
+endobj
+491 0 obj
+<<
+/Length 263
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.(0b/e#&4Hs7PA)uXErfQK6aS((9r'JjaoeT=Kgohb$VJ]T.(k:f$XcIjpb'1/
+p*MFkbYMjMs-"<^m.!Vm/>kW'pu'SgUf:QR>t8U=[o(]2T-st:lrZjmX%"?HD!()I
+#hOI;gl<($fEZ48!M2Od]R^,4,?0+ZXY`Za"*Yjk*^BqB1e#nlqCRug@5ZPhi>;+p
+rh)@DHeJ<PIsW-JZ/2L#T'7As%McGj<EPGg`@l<J\ZR7+'rdp@):Fg7!ru]Ro8s~>
+endstream
+endobj
+492 0 obj
+<<
+/Length 118
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<\R?(<%t[U0JZ]`1/URsj=94G1'7k%.$uG#l2da*odgi@F1If'\b*cSN6Jg(
+4VWF";h23++d]p@Y<kfXBe#IIMZNt_K0;-:jm'r&a9<C\p<+&'~>
+endstream
+endobj
+493 0 obj
+<<
+/Length 257
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y"+5mi3/'ZP.3L%$uA_0:GKNBq;*=@"Qk>'5@1fqPE^$=1kniXoG,&AOe]<((S5
+i4!tcoB*5(*3eSALpc@nia#)FdK+P>)RCK>1)%)$8lAP+ecDb(N(>7q.>O_I-(du"
+4f'q=/-**>"6J&:m^N9-$FDG.XS#D$NK6-'@l1on'"f\]l]m';-j8]B\^JS'q]"@D
+f&-857P:1a+,dm_eGo)2/Id(@U6-_+M.8=6_+Zm'Z-,`1Ph,ID!"2Ki%0~>
+endstream
+endobj
+494 0 obj
+<<
+/Length 337
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;UTu0hTAL'ZTZG[KsMm8'"q#PE=U3XTGPT.0Qb8J88lXZIT>,J.s'?Wrsu^gabcD
+dRJ%N%.j;/8.Z3R%jpliGfesh-?cA(OkJ:-DGthDCp!SfgZ<-a:D2dg;)X-HG;`Yu
+I&0=GDf3j;.WKHFpUfSn.5!1,$p\TKTJ@[<d*LZk5Jp=7i(MsnT0SSjD0/Uk,LD4R
+'"e64n4JWp2^QRqEW<"_g9AI_0[Yr7*+U=`BQPerJEYF4o\mHSpYC(d(C%<2gQl]o
+m"MYD$dZ\p(g-FG2a5;EdI6?s'?rSA=m%V'%%871+/!M21#YYj.\b*SJ&l1E\+2<T
+BEIg3~>
+endstream
+endobj
+495 0 obj
+<<
+/Length 264
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.h4c7*Q&A[hcF,A*E1l4[<X"8^M.0Qb8J88km\97KL*[+V<c8&H4/CH"^&dX>>
+Ipiepqd=k,bj]3]J#'7@S+$YDr6R)mp>Yh8gbif\lY4CVf^*,gMR-?u-dK@RM)/I5
+e.X37kje/UQ#NaG?'eFeB9'He(]8.GK@\3Qb>4o]`r\'0@YtJ`0ZLn14cPCHZZ7TN
+_^hUOi!Eo#NE(LkZ$a^V"l:uO'[N.SN&Fl%"`</bn:*%ES<KRPat/dB49bdp+A=K~>
+endstream
+endobj
+496 0 obj
+<<
+/Length 328
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH85>&jZ'F+%CV?jhHNf\Gc9d2sO.^1Ci6I<jWka!",DOl"RO'q30@^XenG_+MD
+)!:Ea>]E]`^i*W;r;#3Z1F^8ad>9h1<@&/%5Hu^aNp9U!EN(hWrfL7kkBGnmcEFUn
+q<I*I9$WoAffX3)gft+=)#ufK6oDXI)5[fX6]E+4i#OHV#)SXRFE^7jDh$0J4rlE^
+X!!upUi.&kJ&J;oAC4,R!I`o/oSK9<*QFOS2$:N\oQhHtV+R+0eGb!ZJ3!XmmU,Sh
+oa?pk:Ip68`jj'eF+_VGA&"G?YKKD!lG)trY65[k"['a7cnp.'n1B,#!4R(;&H~>
+endstream
+endobj
+497 0 obj
+<<
+/Length 329
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH8:J/S[&-hVQ>njU/&Mb0L[M"J#$;Ui;&9R"7oIX>s\kX=g^ajQj2'VJjEEAk+
+F!a]$5=j_A8XT>E\Ke91n_O:.a)0!YNO^jJAj,N)]DY4eK^2jKl:lE?Xu=gu>a]>L
+EQjEAqK%+qIpAKBKE2-.OTbe$^u08V`s,1f&T`fe-]?VGMog]ka'=Z(P@F%PF9%Uh
+5sNG4pqP0/FMKhGHt&t7OM)>S!D/r.jc(PCQ6b]&i<dh`ENt0f5*OO<TSoHtPl*1U
+nO4<YVD<R=PlE'k+o!(KZlrR1Gh%,K>#3XoU^nuda@gtf'2$'1p?'eN$inean\"~>
+endstream
+endobj
+498 0 obj
+<<
+/Length 254
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W#IbmK%f&-m0nK.p(U02QD^GS@/$%mcb4JEkd\W3\og-9[4X!dR]UVbK[Uc&[S3
++2]YQ/q;JA'5^V7"C2O^(*(0\6uRNXHYhZ^'\i<]5mYI7*=n*_(kE:#VJ(Mm0(F>#
+llhmm;D"GM9>r9ilCoJs9WKaJC:pk`p*lDQQk,Qak#?Fn]r$r!)ma:UU9r\!^ZUf@
+H[FW.[p)>ps+W(8l.8W"-(.<Dm#?'c3EMJe<]PBk:RHpALA(]#N2g=~>
+endstream
+endobj
+499 0 obj
+<<
+/Length 371
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Um*Yti1j&-h'n1/th207[TJ!$m],KS`5'"<!;/iW0B26P2itW6*,H="7\#CBX//
+Aa9ohYg7Lqkn*1P7@2nT>i[fN$hk@'btm^oL25!@2c'BoEK]#8e.&H+>ZR6IgUt>_
+g:b@6H$aEb9WB'/o)/??eV+0WP"%AM@K]%d9gn%L6sDTcC6)Qf8V/TaVe?f70U@<a
+(@4W^XlpJ$_?d[+K=a:VgZ)B*UZ`Do_?e"k*!WP3A&1pfcNW&on=_h1"`2I,i-chp
+,7"Z];\PJ.;I&b.3Q0EgL8t\sg<Fb%d1jJlpC:,T0TW*$K#9]1iu^7>:Hk5!_tZ1,
+'H@lb.Z@U=Ll!e,#SHU7klK!On?Tnmr#5Xiq97C~>
+endstream
+endobj
+500 0 obj
+<<
+/Length 269
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y:40abc_&-^GE$GmqH#%fK\8MDl$"epSt"Kae:>$<=X0:os0"h[Bd@$r4_31G_]
+Q54B.MZ)o0Ho;D[_ZBIY$p>SjE9"hWJk.d_N$RZbOpUFp,Up5R$mKY'&qQN'`or&E
+cLH-=D'>Gm.@+On=]C]PoEWXaUi)J6YD"3-W6Nh6pag1*QmBj4=j2.b%Ha-ic5*h]
+bHh)DH:bN(T2hLB^VBQ6Un5pM5A"dfB::m82!W)^QlOk&N2sZRQ[\T<^bg`kg]mh#HT_W~>
+endstream
+endobj
+501 0 obj
+<<
+/Length 268
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;VH79o?eQ&-_!J$_]I"+a!gFTjtl<K0N`Z"67N+W(Rp_kdod\jp6$nGQP&[DieN`
+6Cr,:"@98*^-rc9]hXM]eEA;]1Xfm7qcLSNUhid_8_&c0cH,E%o1Ym\RT-"=7hX'2
+(E,r2IH]qmI#r0DBR0Z+@"GU)!Z1LFG<n#M!HnhF&>cF`XXkr+r_YXS+n7-E)<U,g
+?=<`L>Big?`,ub72r8EI@1<&h&44^]Q6@3j\@#gc%pX,;BA<KcK<X/`X%YGB(]YWMYuU~>
+endstream
+endobj
+502 0 obj
+<<
+/Length 194
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Y")0a[tJ$jG"_>"IZcbQW*#2Me36.QE-TPm:,Y$UsBPU[:nm0AlkA^IbgS@'Re*
+r4jZm3,kiA;k=.V7_4Ze>H2I!M*)9jiCm5q^Ln/LCH[f`[L8,VdtVemqh`aaJbKF8
+/qCBT!hWn2;6KGV4/Gsr,GQIc"2#'7KQC>Pd:;e*B^P9Tgb6$,[%m'ij<bOF~>
+endstream
+endobj
+503 0 obj
+<<
+/Length 208
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z;(tg##%CL5"Z&f*'LT#i/e`:K+3ZUn1K;^Y!#!Da>Y^kqqV_c.k$7a(5Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PR@_s+,\$KDY`ss+&4@"$liq"Hbncm"+68+8eCppcipE
+fah'OO'2HHOCYZscNkf^5pShrrrsVA+$hYkON`?Dqu_$a6TkMRqZ-mjA<P-dP:M_&
+0ED$r4(&~>
+endstream
+endobj
+504 0 obj
+<<
+/Length 156
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY^"#%Aej"Z(4R'LT#i/gE_+hZ1SPeh^:P2#n92\Qhn$>l*Cd7YY1E*^D/,
+IA['X"X(k7=.uFg1mQ857H'm:ru^SMoRRm2+<j'",/HM+rsUURKDGNhArm9=cl^:-
+$k2J6`9$:+(!$Oq!0C<O&H~>
+endstream
+endobj
+505 0 obj
+<<
+/Length 136
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+-:bY^"#%Aej"Z&f*'LT#i/gE_+hZ1SPeh^:P2#n92\Qhn$>l*Cd7YY1E*^D/,
+IA['X"X(k7=.uFg1mQ857H#?[Ig-bd_>O<DoDa;-%K0`5cbR=+6!URa>_-.1!<@-KO[]~>
+endstream
+endobj
+506 0 obj
+<<
+/Length 258
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wju4UT%k&;:cq"K'9QS."QCB,.KL;8Eru<ZXLX/JP<#nRD#83C:k&_==X!5d:uW
+DeJ5"m^uggAY11g#->ilp&U^TLM6Oc-QJ*IBYa%,8P3a@3[D+d6n2?c3$=Khpi=(i
+.%R\8Sr$!JH!h@Ki'U-+/enLjl<'XL1]nC^:nh*D:<+"%DGl"1:E2$lK%Ve/_tZHF
+h.C81T6"3a-!]-:6[3dM#$kq*'1brCk1c5gYmo9M$bh+C(+F+a2#sTBgEZ~>
+endstream
+endobj
+507 0 obj
+<<
+/Length 178
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+1:bY^"#%:F6',-'66`ra.@j<,R!5pbG1K;^Y!#!Da>Y^kqqV_e$7U5d25Ue=6
+VZ:?56S<d_?\OZ;dSqhp(PP*?J+so6+##LT+$Rc]hV[gT?(U!cRm"YR[X*[X/0Ol*
+&VpttA,-*(+!V\9VEOn\[$Q>p&WXD,4h1X)!!<4/]mr3~>
+endstream
+endobj
+508 0 obj
+<<
+/Length 269
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;U$b0i#VO&-^Fc>c]bKlk+Cn!7#<gU9bP!_?CQO*$A'UJ=q'^$=>;37BR6&Zs0E3
+r:q*W.,ISnkDprqg!#VM78(&=(\SjA9iGR^Zhi+uH/sq1i`50D<_o$U<d,Nt21N+o
+IbK/GGlN0=p;X<HqbbN'+mf&a_>Rb`)o/S+^*a/%O7ne.W$(>TAO?mW'!RQ4=Tetl
+Ae5.jSfu]4RB<0!0G[o]I"afB'E8Td)jXRTo8XKCrhLLMWR"jP(21"/hR<9Z^B4HQnUJs~>
+endstream
+endobj
+509 0 obj
+<<
+/Length 201
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T+1:bY^";U@:#0K)f_1K6n"j=94G2GaB>1F!&J4[Yk^O@[[YEq8;>%p(GCi6q?"
+8oa)W"ZS"LEp7rI.[1X4VK-sn./a,@s$$_eLkZuqiIaDN#fVc&s8N2\+$faSJUsEo
+MF$5Y_Ol\%NW1+#Dts>PN">hNrr5:_q>Uulqu?\XQiI)H_>ZYqK$2]./!(,m!<3GPkP~>
+endstream
+endobj
+510 0 obj
+<<
+/Length 202
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR6YmnQ8%#*Yud^`ci0*%>;/kR!1JA`0n:b_rH;LkF#WE:[_YQ/boU3d_G'JKR4
+-eZ7?Gg8;3Z/[$<ms4*[8A<TMNWnSZVbPhcW"*>slq=Vl9k<S?PTAG]jR_WAV_I.u
+!WnR[2.(MUU-Z!5@(?#>c*-X^"r$Xo'qI2XnrsJ5mZQL*h;mB].\m['4OBO'!s&=Hbg6~>
+endstream
+endobj
+511 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+5 0 obj
+<<
+/Name /T11
+/Type /Font
+/Subtype /Type3
+/Resources 511 0 R
+/FontBBox [0 -29 81 101]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 101
+/LastChar 121
+/Encoding 512 0 R
+/CharProcs 513 0 R
+/Widths [62 43 0 0 0 0 0 39 0 0 0 0 0 0 0 55 
+0 0 0 0 74 ]
+>>
+endobj
+512 0 obj
+<<
+/Type /Encoding
+/Differences [101/e /f 108/l 116/t 
+121/y ]
+>>
+endobj
+513 0 obj
+<<
+/e 514 0 R
+/f 515 0 R
+/l 516 0 R
+/t 517 0 R
+/y 518 0 R
+>>
+endobj
+514 0 obj
+<<
+/Length 333
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;WRn4\isM%*):XW8o6pW%S.!KsoF!,!A2c!tn9IJB,_2K"3mF,q`)5O>0+%j#BIA
+M#fa6(\p_t5Q)JfE/u@Up?1);G\l:U\s@t1loX!p2On:On-"LIl?hl$W382bp#5TG
+)lSN2I!p9eK]*Q#a;:)bWJZ+'Wg$W4N7fa3V(B0>LnBm-L!/Y:;P)jXg)DXY9KXM`
+WI=rgX[+TX1!PV`#fRQcD_\FdlNBBL#%o\jZC`P1OfRQAJ&2+!DM@`9N%-8Ab6fbU
+G*Y;3%$?Kr;MOC&FJO+EPYm=JM\2ojpTj(5'V/OpdBWKG,#W[sq*);,i!qpU!+DHjci~>
+endstream
+endobj
+515 0 obj
+<<
+/Length 295
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YR<]kYG=&-1Vr*X&t5&Tf[ffV5NM6[k[L!q"JB82=djBkH\YoI,.kN?1bml"mmt
+6_gmkd`:SgS]W<0W:[3<-<2HT.K$tRq14.hEij"Tq!NCC9nW7'<=8>a0SfJdF\A=g
+5[U/81H%=8+bkqq#$Me8k2F9%K3%V;SsEC[F_t5ofc)n&Gkl#;BsSo!r_>EdoUEF2
+^/(gLjj<S4&?V//c*g1RZS'@Ke,Vc-LS5+r2O^Jq77EXl\kH$mAX`Y*r,[-*q5aEl
+hG*;*IdOmEhU04O_L7&TpcSU4rJQ7~>
+endstream
+endobj
+516 0 obj
+<<
+/Length 220
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;YjBYmS?5$jPXG6QqAK?sZ+ec??.M:_gW/d)cMh7gDIqn'Ut[I0<&qdWh*2$?m"g
++<ULf"Hq)&;\==F7Vb%&]OG4DJX0P7%8F4mGeqOs3`'.Wg4UKHC:>I@b&6HmH^rKd
+Lj]`#>KE1;!.O/6m"CM!NZ\]g:&r-T:=o)re+RaN[kLAB&r$]2+\PXEM,406h'PPQ
+ml:CC!Wom?\AunqYr-Kr~>
+endstream
+endobj
+517 0 obj
+<<
+/Length 301
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V`A4g)XU$io4[%[F\G"FL4ud;,R6+n6f)iCP`:"2Gl5!.qa(%`"?;iYn)l5hHpR
+qDh<++<V^h.<4DoG+)k^eJEBDV?piPXq[r\;7tZ(Cr!$AiZtl.K2E-K%jhYC)<W+`
+c,[n`r#<,7h(Rh&,cZX<;&/PJ\/IoQ=?9b.%ur5//QSPZF"G;:\2Vu)A?#kS7IVLd
+OdrnhII=3XT7M.KZ#2*T<fQ21@HBCP5H<BMl0u#rYsUQuOpBYW;IqG=4?RMfQ@&)u
+OqultS*;?91CZB<$afkkR1W,6=MXq:Hd\m2~>
+endstream
+endobj
+518 0 obj
+<<
+/Length 456
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;V03_+MU1&-h&E4V[UQ8'$9pXXU"<'W;B$+R$oPW#e*$'KcXMGj)t2?Rb!.Y7^",
+e6<D+j%Qa7PLL/rHt8Dn5F]pNM*&`;E&)S!OZT,DLWD)!P-.RMF;.Raa8(pi-$FZs
+pY#'of'IX)Hf=IYgpi^6f12<83[fqA1$$?M9(:&\4%$EE=:;'^"-,*$8HU^OW2P^m
+L]\fZLt+Zk@21]=4r*_lW;F#j$4BXWU]B@l_e#0=:RpZR\S7ES=3@ou"q:Md+)ruD
+fja5,jBsha_/@>.3ZN)mU(7IIJ:eG89Z+]&4q4Z0M]AhAGFo(@orUXo/sMLhJ-g(Q
+H5R!T/V_EXO'110ki7_EgWPRsV-GN.R&l\AYs%ZU"PI9B[D>V[T/'1g9bn+V%5pfg
+L>-gP%##>1`2-?U(nLC7^6g!enAJnRbRM&#+'.6l)G4moQ.S1q2ZROj>)<~>
+endstream
+endobj
+519 0 obj
+<<
+/ProcSet [/PDF /ImageB ]
+>>
+endobj
+6 0 obj
+<<
+/Name /T12
+/Type /Font
+/Subtype /Type3
+/Resources 519 0 R
+/FontBBox [1 -30 94 100]
+/FontMatrix [1 0 0 -1 0 0]
+/FirstChar 69
+/LastChar 119
+/Encoding 520 0 R
+/CharProcs 521 0 R
+/Widths [90 0 0 0 0 0 0 0 0 0 0 90 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 73 
+58 0 66 73 35 0 0 0 0 73 0 0 0 51 52 51 
+73 0 96 ]
+>>
+endobj
+520 0 obj
+<<
+/Type /Encoding
+/Differences [69/E 80/P 99/c /d 
+/e 103/g /h /i 110/n 114/r /s /t 
+/u 119/w ]
+>>
+endobj
+521 0 obj
+<<
+/E 522 0 R
+/P 523 0 R
+/c 524 0 R
+/d 525 0 R
+/e 526 0 R
+/g 527 0 R
+/h 528 0 R
+/i 529 0 R
+/n 530 0 R
+/r 531 0 R
+/s 532 0 R
+/t 533 0 R
+/u 534 0 R
+/w 535 0 R
+>>
+endobj
+522 0 obj
+<<
+/Length 305
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X.k4UT%['EI'AKCG0JU$i':G-Q3?p]G[NFRfFskb.-U2b1&NE:=bL02T+fU!M6:
+(PG[2"qnWqj<Z'sJVu/WWX]7N$ut=D*rH#];:Y@:*qijhXEQ@U^fd?QJ2:,&i/AF]
+oY?=GGW_M)&5?!NjkMI$*?lt*-!_fh77cZIP!rP/.q,9UN0Q=m2T`+%(lJ=?[F3T1
+A0T2j"\Z.A<lU"IPn.CL^#C8oNi[HR-SR^TpH*U<lG9[n]5F]sX"K.4g/Kn"ZLS32
+r52E5bS%=Z;OqBBQ$H75S$Ohc(JH&U_J9-`Wmr0~>
+endstream
+endobj
+523 0 obj
+<<
+/Length 295
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]^4UT%['EI'U%`2FrKY@h->(llK6<,^lTT]UW7gDIq4^*op,BW9K)O%%Td[&l:
+3#Ll>b:EDQHSkHC_b`JC']TH05+Ec):hI['SG5);7+e+S@6f#R#!c8L(!pJI7is-`
+j7RFS!a?eHa,G)BA/WL",=a(t*R^&U3>!Eu.`o@9QV3Q@7nZ=Jgt!s69$<$(<FWkS
+jOQ\=[2sa:^8@LN??[:"oD;U4CJ\-h>32WERAm>K[U&dYF=+=4<MZ5;]l]7DQKaSO
+J,Oss>>'*rX2"0<_32VMSc\tMNrrP~>
+endstream
+endobj
+524 0 obj
+<<
+/Length 330
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;X^90l"Tk&4JOf#Y_!<BJ/46!j-GiE+6&/5[<CN8P0d*G&;j>?VB=8a>Zr+`Nh]a
+]>@>%2A54*gAQM5s4B>u>k>=3>P"rYc\fHYQE9Q!ErAtZSpW^[ZtQF`B3S9=OtA.!
+DpMZcdD#2FBD4j^$Nn63+jXO;'qKVH(`_V?T>9Q=b7HG%QfUe61r'uKs.T`eMP-[b
+@1oC\;cb?$re_lr$h_*)b>f+EED2GqG7f1Uq*0fQmT31$)q;$/d&S9GI28O.KPq(>
+eAhgtRL@p-CKN3#2P^I/WU;clT9>[GLd'm6%S^cEe*b3nN>%6AULd)6qAfPh]PTe~>
+endstream
+endobj
+525 0 obj
+<<
+/Length 361
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;ZETYtfs;&-1)1OPD-dG^gk-!t(O0_q5sNWJM<9BB9AsV1hCnKD9!s^BFReP(N$[
+ZO=]BU37:b?lhuYAnOo*R,SI6$tcDNdM2//Iam&>hkp<fE-5tVbI?42]e+>HK@sEU
+Q]fh>G'AZ\MCX('HF_YH3KcV`6QiErCuK#'1SC5QrEDN)d(hcZJdR%VmKHlam7,IJ
+aW1`RQtRhN3ROn#.Z*!b+DKA-Q[ub>^/Vg?!1+"UD\mg@c%(+.r"XBChP9oVar^$g
+)#sS0LN\Qsg.1p(Fe@WJl,Pk0)CDZa]cal`mSj9>G;f&>Q'49@E5c\s\ZaZPJ_/h1
+.OUkrU4=0A!7(++qP)?gqI9NE'@jS~>
+endstream
+endobj
+526 0 obj
+<<
+/Length 335
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Wk!Yti1j&;D3JW,tZR+nl&"7#EKQ9*HRr+Mktu!+Q6FSaEP_AVh3PD\0>eQB/Y9
+6)A&-QMjs1J*uYfp&[;qn>o,Ai+g'**aZX*.!&s>3:AlJgZ&Lh,I@tp4(rOl"mu0S
+&pn<4>C:eR5/VW!7&_@JHd`7Z=n8.7N?2gASnMje3g-m`:#J:]6;FkOASF_]_-"cM
+NY9['HnBUUZW[sJ_@M#Fi9D#k&JXX9rYVLta!n[8kJ%9+mLR7nBP-:bOI\SA+?=Fn
+OtU3ufJG6nd3K26IB&G%1&$*gC[^D#[Jk^+W3ll.=,bkc8-PH@1ncH:L[,Q?iG/EBQW\b~>
+endstream
+endobj
+527 0 obj
+<<
+/Length 443
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;XF10i#Y@&4Ise&]p#n?s`ml;-&fmYdApK$7)Q0!,P4-Ji_SBL-'@>cuBI9+_?NZ
+_p$cFLbqr49(LOhpA"ZU\ore.geh(]HHjcaW?67g;RCBjCKDOCS>>W0KAJG2FmJ<j
+Y:_9%=.AM37uQNP4[6VrF`ZtIIXR,6.@e6&J++["6i[lqEsb_.A'/dJR(X+;Mk)-u
+O1cphdGSYi*HDKA6f*.IXJg1=bt0MDPT-%Ds7('kia(hPl94nR?UXV@o%J*kn^Hu.
+`&GZs&Dr&.KkRH(_AJkmm-Lp_$^q7j85tGM-\1FE+:@=2+:s),%nrI+@NLd/S8"aC
+%iLCTmfYV+*b[nk79f:U'COtfi-.CFfISc")ZS%[\Q!3KcZc@;]!ms];obZ9?(;?5
+9m"j>k9n)@NlcZFHtWA]ak.Cf/i@9ElAJ-hkcY!eR?fd6~>
+endstream
+endobj
+528 0 obj
+<<
+/Length 265
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\]a=fq$io4AK9519i;sKaH7_H`&.AJf2[DJ?!:&d@kcC8WeOT-A*,d5AgR^?\
+io$\fL+b,%OEB2%aC!IB.0Qb!mSGA,+@=q&8SSSK<a-Q@Qn1fX9W%e"PMpmW&sIE,
+L])4Fl'U+<%OZl6hui$dq"t9dgGm4W/6!#4!"'PQ;`"9ef/Oo4>N@NcSCKau-dI+-
+kq^unktlXJ&#bh.PjkN`LP]=^ILZ7rfAO-1_oX3Bo%*1I!$^`\IKQ+9\A7tAa8s7F~>
+endstream
+endobj
+529 0 obj
+<<
+/Length 177
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)[<A76'#%7T;92gNY6`ra.,BFtLbVds-<7!K&'$7[h:7b_ei<i':>l#L,.5$%H
+!+uI&/q$N&Kp&1Y<%^r_L&Zr.s8UF7s8P<<qYu$^m'1#]*(UN@/[`D:qu8m2Fu5lN
+ImEqH!K%BrESMZI$pXak$k*R8aI(0$P:M_&0E?,I.!k~>
+endstream
+endobj
+530 0 obj
+<<
+/Length 254
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]\YmS?5$jPXGK9519T`GBGD+ihe&.bdm*<_p\!-NB[FDa$EX,l6bFR3s'k,KHf
+jQLRAqmd)cb;c5HgsK'K&KO6OT[o8.(Sahu_a)B'N,aIKT!Ut:/Q_/VgBE;p-QBX&
+mjCep`7Ani0lmZ@6<=.p$@k'U##jQu:ToN468;Oq2dH(;;)V(XFD]]affJ2fT^tHL
+UYfJ+^pU`k\S?oO%eI`ei3luY.RAO?b.[mA=XiJ@E0]>k?NU:;(S0L~>
+endstream
+endobj
+531 0 obj
+<<
+/Length 227
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z-J0abc_&-^D]Mnh/rKUiKaZFGct+=asVW0IUD@O2jgYRibO`V(]?6HU"Y0q1K\
+_uj->#G5B%JYIt-c\R=(g+(<Cq]>R5H]#C36[HPd@(7A^0q:09L<41($:D.moBEPJ
+1Eio;*H21j"9u(?il4J;!Uc]O8gg3LZVGIgAae%4ZIY6Jkq-CgH`idmN;;kH<I?3E
+)ZPkDqZm665j+Ur27UZX!+D9AAH~>
+endstream
+endobj
+532 0 obj
+<<
+/Length 354
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Ul=0i#Y@&4Hh%6uldTi4/h5@?VF3U]i#A+@3C?!(mS0e76G9_G,C\QROHr1Z!_b
+BV+>]IqHDX>[iU14R]Mh_JP@[SU!$i+N5,*")]_Pd0*7KAiH,iO8WIT4-<4CHaq)@
+1t+U:]RRY_km!QlA`<tq,5)!EA`1p5W]?Wti]%%Z;-Xfkg!e0h1]7R]I0h-HY?2*t
+InXsi+rj-G58H:/Z*0G!RQ,iJH(_;D5a2BoNEIY]P1-F&"d-436^_.>GZL#5Pk)OD
+h<>NQ1*0Q`NhnEM;1mpS<\*IDCs-$6r6^e2:3X]TG=FXDOJF*`fCEJfgG$X9X^lVA
+ZA'BF(>[b@k0a):!/4Sc1]~>
+endstream
+endobj
+533 0 obj
+<<
+/Length 237
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;T)Z<%q-&<7!L%0JQG/YY[kFj=94G0a7t'-s0S$)!Z\5J4+E1Q]ie`I^jud0pfTZ
+:l7p'.DT*&OA"K[=.uFg1mQ857H+:Hj8VDq(pY.eac9-q_]\t%O[$YB#;GrRM/30U
+$m>*OR/F`""TK>n8>lh^S!9g+q1neG5C7MCO8]*.N;rq-K?,/-^qfpK!u0,T++WDQ
+qhLi;kALQ[1aLT4_=:A%T?GcK/!(,m!1YL@h>~>
+endstream
+endobj
+534 0 obj
+<<
+/Length 257
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;Z]]0abc_&-^EP'puucA1jN06rpAj;8Eru<ZXLX/JP>I%D5S"Y7^7*Yu:r(c:/M;
+f\"n/Dti^:o=#f6=$gU+@Kp:.=TuHLA+ZuUVC,e"cqKefL?!scKc%`,6mMEcfh_bD
+PH!nmLG^G(5oB\OJ/]qX!_?2:G?";,9n?ebGFutCK7EfXWYoA(l;DZA]nQbs?as2P
+DmY$NV)k;0=d1NgO#4$[r=ubV:m@k8132[R;3:[.B$_tJ-TpS4!9frYM?~>
+endstream
+endobj
+535 0 obj
+<<
+/Length 462
+/Filter [/ASCII85Decode /FlateDecode]
+>>
+stream
+8;W;RYti1j&-cN4)'X@J,M4XLBdg!Ga\i.r%S/9.UVb(PK%\g<p6?g_oJPFt"k"ti
+PiG!_O\jSZ_9qH@FSb#j2:E4ElAJPAf6VV:?VC2<X!q@MoPCPN90U7'q(Ch<=Zl"b
+.Z8Wna^Y6oUJ"`@*q\(IpR>FCC*A7Q67<Hjqi?)d'@eOo':+:pC9[.>noeu5ZPm`?
++o>cNk/89E_,stYm''[%3AG8Qo^63"a0rh]dAYkG94pW,+#X:@8#(5X:eMtt$9gq_
+lfa"=Ba5/f%NhEF'.qjk2D>G*LUY[NNOH'c't^n;HQ?tXd0@lFB/c\tX(]5??j11q
+[o4m5"<XTbS\o11h<$f-%6i,m3eNXA]?<*K$:`gu.4eZk5"0R5N(2S`3aodJ%gi7J
+b@mJZZs]fgjIJa21s`[l;[sTX-@>$4XeIiB)*>85jpCb/I^8n9nnoVCjR3)GIm;!~>
+endstream
+endobj
+19 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Times-Roman
+>>
+endobj
+1 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 3 0 R
+/Contents 2 0 R
+>>
+endobj
+10 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 12 0 R
+/Contents 11 0 R
+>>
+endobj
+16 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 18 0 R
+/Contents 17 0 R
+>>
+endobj
+23 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 25 0 R
+/Contents 24 0 R
+>>
+endobj
+26 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 28 0 R
+/Contents 27 0 R
+>>
+endobj
+29 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 31 0 R
+/Contents 30 0 R
+>>
+endobj
+32 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 34 0 R
+/Contents 33 0 R
+>>
+endobj
+35 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 37 0 R
+/Contents 36 0 R
+>>
+endobj
+38 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 40 0 R
+/Contents 39 0 R
+>>
+endobj
+41 0 obj
+<<
+/Type /Page
+/Parent 8 0 R
+/Resources 43 0 R
+/Contents 42 0 R
+>>
+endobj
+44 0 obj
+<<
+/Type /Page
+/Parent 48 0 R
+/Resources 46 0 R
+/Contents 45 0 R
+>>
+endobj
+49 0 obj
+<<
+/Type /Page
+/Parent 48 0 R
+/Resources 51 0 R
+/Contents 50 0 R
+>>
+endobj
+52 0 obj
+<<
+/Type /Page
+/Parent 48 0 R
+/Resources 54 0 R
+/Contents 53 0 R
+>>
+endobj
+55 0 obj
+<<
+/Type /Page
+/Parent 48 0 R
+/Resources 57 0 R
+/Contents 56 0 R
+>>
+endobj
+58 0 obj
+<<
+/Type /Page
+/Parent 48 0 R
+/Resources 60 0 R
+/Contents 59 0 R
+>>
+endobj
+61 0 obj
+<<
+/Type /Page
+/Parent 48 0 R
+/Resources 63 0 R
+/Contents 62 0 R
+>>
+endobj
+64 0 obj
+<<
+/Type /Page
+/Parent 48 0 R
+/Resources 66 0 R
+/Contents 65 0 R
+>>
+endobj
+67 0 obj
+<<
+/Type /Page
+/Parent 48 0 R
+/Resources 69 0 R
+/Contents 68 0 R
+>>
+endobj
+70 0 obj
+<<
+/Type /Page
+/Parent 48 0 R
+/Resources 72 0 R
+/Contents 71 0 R
+>>
+endobj
+73 0 obj
+<<
+/Type /Page
+/Parent 48 0 R
+/Resources 75 0 R
+/Contents 74 0 R
+>>
+endobj
+76 0 obj
+<<
+/Type /Page
+/Parent 79 0 R
+/Resources 78 0 R
+/Contents 77 0 R
+>>
+endobj
+80 0 obj
+<<
+/Type /Page
+/Parent 79 0 R
+/Resources 82 0 R
+/Contents 81 0 R
+>>
+endobj
+83 0 obj
+<<
+/Type /Page
+/Parent 79 0 R
+/Resources 85 0 R
+/Contents 84 0 R
+>>
+endobj
+86 0 obj
+<<
+/Type /Page
+/Parent 79 0 R
+/Resources 88 0 R
+/Contents 87 0 R
+>>
+endobj
+89 0 obj
+<<
+/Type /Page
+/Parent 79 0 R
+/Resources 91 0 R
+/Contents 90 0 R
+>>
+endobj
+92 0 obj
+<<
+/Type /Page
+/Parent 79 0 R
+/Resources 94 0 R
+/Contents 93 0 R
+>>
+endobj
+95 0 obj
+<<
+/Type /Page
+/Parent 79 0 R
+/Resources 97 0 R
+/Contents 96 0 R
+>>
+endobj
+98 0 obj
+<<
+/Type /Page
+/Parent 79 0 R
+/Resources 100 0 R
+/Contents 99 0 R
+>>
+endobj
+101 0 obj
+<<
+/Type /Page
+/Parent 79 0 R
+/Resources 103 0 R
+/Contents 102 0 R
+>>
+endobj
+104 0 obj
+<<
+/Type /Page
+/Parent 79 0 R
+/Resources 106 0 R
+/Contents 105 0 R
+>>
+endobj
+107 0 obj
+<<
+/Type /Page
+/Parent 110 0 R
+/Resources 109 0 R
+/Contents 108 0 R
+>>
+endobj
+111 0 obj
+<<
+/Type /Page
+/Parent 110 0 R
+/Resources 113 0 R
+/Contents 112 0 R
+>>
+endobj
+114 0 obj
+<<
+/Type /Page
+/Parent 110 0 R
+/Resources 116 0 R
+/Contents 115 0 R
+>>
+endobj
+118 0 obj
+<<
+/Type /Page
+/Parent 110 0 R
+/Resources 120 0 R
+/Contents 119 0 R
+>>
+endobj
+122 0 obj
+<<
+/Type /Page
+/Parent 110 0 R
+/Resources 124 0 R
+/Contents 123 0 R
+>>
+endobj
+125 0 obj
+<<
+/Type /Page
+/Parent 110 0 R
+/Resources 127 0 R
+/Contents 126 0 R
+>>
+endobj
+128 0 obj
+<<
+/Type /Page
+/Parent 110 0 R
+/Resources 130 0 R
+/Contents 129 0 R
+>>
+endobj
+131 0 obj
+<<
+/Type /Page
+/Parent 110 0 R
+/Resources 133 0 R
+/Contents 132 0 R
+>>
+endobj
+134 0 obj
+<<
+/Type /Page
+/Parent 110 0 R
+/Resources 136 0 R
+/Contents 135 0 R
+>>
+endobj
+137 0 obj
+<<
+/Type /Page
+/Parent 110 0 R
+/Resources 139 0 R
+/Contents 138 0 R
+>>
+endobj
+140 0 obj
+<<
+/Type /Page
+/Parent 143 0 R
+/Resources 142 0 R
+/Contents 141 0 R
+>>
+endobj
+144 0 obj
+<<
+/Type /Page
+/Parent 143 0 R
+/Resources 146 0 R
+/Contents 145 0 R
+>>
+endobj
+147 0 obj
+<<
+/Type /Page
+/Parent 143 0 R
+/Resources 149 0 R
+/Contents 148 0 R
+>>
+endobj
+8 0 obj
+<<
+/Type /Pages
+/Kids [1 0 R 10 0 R 16 0 R 23 0 R 26 0 R 29 0 R 32 0 R 35 0 R 38 0 R 41 0 R]
+/Count 10
+/Parent 47 0 R
+>>
+endobj
+48 0 obj
+<<
+/Type /Pages
+/Kids [44 0 R 49 0 R 52 0 R 55 0 R 58 0 R 61 0 R 64 0 R 67 0 R 70 0 R 73 0 R]
+/Count 10
+/Parent 47 0 R
+>>
+endobj
+79 0 obj
+<<
+/Type /Pages
+/Kids [76 0 R 80 0 R 83 0 R 86 0 R 89 0 R 92 0 R 95 0 R 98 0 R 101 0 R 104 0 R]
+/Count 10
+/Parent 47 0 R
+>>
+endobj
+110 0 obj
+<<
+/Type /Pages
+/Kids [107 0 R 111 0 R 114 0 R 118 0 R 122 0 R 125 0 R 128 0 R 131 0 R 134 0 R 137 0 R]
+/Count 10
+/Parent 47 0 R
+>>
+endobj
+143 0 obj
+<<
+/Type /Pages
+/Kids [140 0 R 144 0 R 147 0 R]
+/Count 3
+/Parent 47 0 R
+>>
+endobj
+47 0 obj
+<<
+/Type /Pages
+/Kids [8 0 R 48 0 R 79 0 R 110 0 R 143 0 R ]
+/Count 43
+/MediaBox [0 0 612 792]
+>>
+endobj
+536 0 obj
+<<
+/Type /Catalog
+/Pages 47 0 R
+>>
+endobj
+537 0 obj
+<<
+/CreationDate (D:19990929133001)
+/Producer (Acrobat Distiller Command 3.01 for Solaris 2.3 and later \(SPARC\))
+/Creator (dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software)
+/Title (full.dvi)
+>>
+endobj
+xref
+0 538
+0000000000 65535 f 
+0000301162 00000 n 
+0000000016 00000 n 
+0000000373 00000 n 
+0000284023 00000 n 
+0000292339 00000 n 
+0000294869 00000 n 
+0000165880 00000 n 
+0000304820 00000 n 
+0000000490 00000 n 
+0000301242 00000 n 
+0000020719 00000 n 
+0000023015 00000 n 
+0000242258 00000 n 
+0000270896 00000 n 
+0000273813 00000 n 
+0000301325 00000 n 
+0000023167 00000 n 
+0000033705 00000 n 
+0000301079 00000 n 
+0000176024 00000 n 
+0000203083 00000 n 
+0000223031 00000 n 
+0000301408 00000 n 
+0000033856 00000 n 
+0000036506 00000 n 
+0000301491 00000 n 
+0000036613 00000 n 
+0000039974 00000 n 
+0000301574 00000 n 
+0000040103 00000 n 
+0000042544 00000 n 
+0000301657 00000 n 
+0000042651 00000 n 
+0000045795 00000 n 
+0000301740 00000 n 
+0000045913 00000 n 
+0000048219 00000 n 
+0000301823 00000 n 
+0000048326 00000 n 
+0000049216 00000 n 
+0000301906 00000 n 
+0000049323 00000 n 
+0000050028 00000 n 
+0000301989 00000 n 
+0000050135 00000 n 
+0000054581 00000 n 
+0000305475 00000 n 
+0000304956 00000 n 
+0000302073 00000 n 
+0000054721 00000 n 
+0000059905 00000 n 
+0000302157 00000 n 
+0000060034 00000 n 
+0000064808 00000 n 
+0000302241 00000 n 
+0000064937 00000 n 
+0000070020 00000 n 
+0000302325 00000 n 
+0000070149 00000 n 
+0000073490 00000 n 
+0000302409 00000 n 
+0000073619 00000 n 
+0000077939 00000 n 
+0000302493 00000 n 
+0000078068 00000 n 
+0000082781 00000 n 
+0000302577 00000 n 
+0000082910 00000 n 
+0000087175 00000 n 
+0000302661 00000 n 
+0000087315 00000 n 
+0000091184 00000 n 
+0000302745 00000 n 
+0000091324 00000 n 
+0000093405 00000 n 
+0000302829 00000 n 
+0000093534 00000 n 
+0000095032 00000 n 
+0000305094 00000 n 
+0000302913 00000 n 
+0000095139 00000 n 
+0000098230 00000 n 
+0000302997 00000 n 
+0000098356 00000 n 
+0000101815 00000 n 
+0000303081 00000 n 
+0000101930 00000 n 
+0000104068 00000 n 
+0000303165 00000 n 
+0000104186 00000 n 
+0000108456 00000 n 
+0000303249 00000 n 
+0000108585 00000 n 
+0000112422 00000 n 
+0000303333 00000 n 
+0000112529 00000 n 
+0000127626 00000 n 
+0000303417 00000 n 
+0000127744 00000 n 
+0000130547 00000 n 
+0000303502 00000 n 
+0000130666 00000 n 
+0000132857 00000 n 
+0000303589 00000 n 
+0000132987 00000 n 
+0000134475 00000 n 
+0000303676 00000 n 
+0000134583 00000 n 
+0000139747 00000 n 
+0000305234 00000 n 
+0000303764 00000 n 
+0000139877 00000 n 
+0000144032 00000 n 
+0000303852 00000 n 
+0000144151 00000 n 
+0000148965 00000 n 
+0000173680 00000 n 
+0000303940 00000 n 
+0000149115 00000 n 
+0000151755 00000 n 
+0000172440 00000 n 
+0000304028 00000 n 
+0000151897 00000 n 
+0000153934 00000 n 
+0000304116 00000 n 
+0000154042 00000 n 
+0000155238 00000 n 
+0000304204 00000 n 
+0000155357 00000 n 
+0000156592 00000 n 
+0000304292 00000 n 
+0000156700 00000 n 
+0000157704 00000 n 
+0000304380 00000 n 
+0000157812 00000 n 
+0000158794 00000 n 
+0000304468 00000 n 
+0000158902 00000 n 
+0000160327 00000 n 
+0000304556 00000 n 
+0000160446 00000 n 
+0000161891 00000 n 
+0000305383 00000 n 
+0000304644 00000 n 
+0000161999 00000 n 
+0000163003 00000 n 
+0000304732 00000 n 
+0000163111 00000 n 
+0000165625 00000 n 
+0000165999 00000 n 
+0000165756 00000 n 
+0000165951 00000 n 
+0000166342 00000 n 
+0000166450 00000 n 
+0000166594 00000 n 
+0000167223 00000 n 
+0000167834 00000 n 
+0000168413 00000 n 
+0000169168 00000 n 
+0000169591 00000 n 
+0000169922 00000 n 
+0000170170 00000 n 
+0000170728 00000 n 
+0000171296 00000 n 
+0000171692 00000 n 
+0000172392 00000 n 
+0000172661 00000 n 
+0000172731 00000 n 
+0000172787 00000 n 
+0000173109 00000 n 
+0000173423 00000 n 
+0000173632 00000 n 
+0000173937 00000 n 
+0000174020 00000 n 
+0000174098 00000 n 
+0000174476 00000 n 
+0000174833 00000 n 
+0000175126 00000 n 
+0000175492 00000 n 
+0000175976 00000 n 
+0000176501 00000 n 
+0000176867 00000 n 
+0000177807 00000 n 
+0000178058 00000 n 
+0000178364 00000 n 
+0000178780 00000 n 
+0000179207 00000 n 
+0000179477 00000 n 
+0000179816 00000 n 
+0000180147 00000 n 
+0000180474 00000 n 
+0000180708 00000 n 
+0000180972 00000 n 
+0000181192 00000 n 
+0000181409 00000 n 
+0000181677 00000 n 
+0000182042 00000 n 
+0000182315 00000 n 
+0000182692 00000 n 
+0000183090 00000 n 
+0000183416 00000 n 
+0000183783 00000 n 
+0000184193 00000 n 
+0000184523 00000 n 
+0000184905 00000 n 
+0000185321 00000 n 
+0000185546 00000 n 
+0000185832 00000 n 
+0000186167 00000 n 
+0000186407 00000 n 
+0000186737 00000 n 
+0000187067 00000 n 
+0000187447 00000 n 
+0000187725 00000 n 
+0000188005 00000 n 
+0000188385 00000 n 
+0000188641 00000 n 
+0000188866 00000 n 
+0000189125 00000 n 
+0000189474 00000 n 
+0000189786 00000 n 
+0000190110 00000 n 
+0000190476 00000 n 
+0000190872 00000 n 
+0000191126 00000 n 
+0000191462 00000 n 
+0000191813 00000 n 
+0000192204 00000 n 
+0000192544 00000 n 
+0000192777 00000 n 
+0000193041 00000 n 
+0000193276 00000 n 
+0000193641 00000 n 
+0000193993 00000 n 
+0000194334 00000 n 
+0000194701 00000 n 
+0000195061 00000 n 
+0000195366 00000 n 
+0000195786 00000 n 
+0000196093 00000 n 
+0000196363 00000 n 
+0000196669 00000 n 
+0000197037 00000 n 
+0000197275 00000 n 
+0000197585 00000 n 
+0000197880 00000 n 
+0000198222 00000 n 
+0000198592 00000 n 
+0000198965 00000 n 
+0000199272 00000 n 
+0000199631 00000 n 
+0000199931 00000 n 
+0000200211 00000 n 
+0000200540 00000 n 
+0000200870 00000 n 
+0000201227 00000 n 
+0000201624 00000 n 
+0000201929 00000 n 
+0000202245 00000 n 
+0000202455 00000 n 
+0000202770 00000 n 
+0000203035 00000 n 
+0000203574 00000 n 
+0000203832 00000 n 
+0000204421 00000 n 
+0000204888 00000 n 
+0000205366 00000 n 
+0000205634 00000 n 
+0000205844 00000 n 
+0000206056 00000 n 
+0000206373 00000 n 
+0000206841 00000 n 
+0000207081 00000 n 
+0000207473 00000 n 
+0000207935 00000 n 
+0000208350 00000 n 
+0000208803 00000 n 
+0000209091 00000 n 
+0000209445 00000 n 
+0000209950 00000 n 
+0000210423 00000 n 
+0000210803 00000 n 
+0000211245 00000 n 
+0000211617 00000 n 
+0000212101 00000 n 
+0000212530 00000 n 
+0000212824 00000 n 
+0000213114 00000 n 
+0000213484 00000 n 
+0000213851 00000 n 
+0000214187 00000 n 
+0000214598 00000 n 
+0000214929 00000 n 
+0000215305 00000 n 
+0000215701 00000 n 
+0000216082 00000 n 
+0000216429 00000 n 
+0000216804 00000 n 
+0000217217 00000 n 
+0000217528 00000 n 
+0000217961 00000 n 
+0000218339 00000 n 
+0000218681 00000 n 
+0000219084 00000 n 
+0000219477 00000 n 
+0000219807 00000 n 
+0000220147 00000 n 
+0000220472 00000 n 
+0000220857 00000 n 
+0000221217 00000 n 
+0000221623 00000 n 
+0000222001 00000 n 
+0000222416 00000 n 
+0000222773 00000 n 
+0000222983 00000 n 
+0000223518 00000 n 
+0000223745 00000 n 
+0000224267 00000 n 
+0000224623 00000 n 
+0000224833 00000 n 
+0000225068 00000 n 
+0000225333 00000 n 
+0000225805 00000 n 
+0000226282 00000 n 
+0000226659 00000 n 
+0000227111 00000 n 
+0000227613 00000 n 
+0000228051 00000 n 
+0000228593 00000 n 
+0000229024 00000 n 
+0000229399 00000 n 
+0000229724 00000 n 
+0000230258 00000 n 
+0000230480 00000 n 
+0000230769 00000 n 
+0000231276 00000 n 
+0000231628 00000 n 
+0000232091 00000 n 
+0000232620 00000 n 
+0000232929 00000 n 
+0000233451 00000 n 
+0000234130 00000 n 
+0000234581 00000 n 
+0000235007 00000 n 
+0000235399 00000 n 
+0000235814 00000 n 
+0000236219 00000 n 
+0000236719 00000 n 
+0000237046 00000 n 
+0000237309 00000 n 
+0000237534 00000 n 
+0000237919 00000 n 
+0000238240 00000 n 
+0000238618 00000 n 
+0000239020 00000 n 
+0000239329 00000 n 
+0000239734 00000 n 
+0000240060 00000 n 
+0000240389 00000 n 
+0000240794 00000 n 
+0000241292 00000 n 
+0000241731 00000 n 
+0000242210 00000 n 
+0000242780 00000 n 
+0000243139 00000 n 
+0000244086 00000 n 
+0000244415 00000 n 
+0000244721 00000 n 
+0000245009 00000 n 
+0000245363 00000 n 
+0000245669 00000 n 
+0000246186 00000 n 
+0000246450 00000 n 
+0000246801 00000 n 
+0000247147 00000 n 
+0000247406 00000 n 
+0000247613 00000 n 
+0000247823 00000 n 
+0000248111 00000 n 
+0000248445 00000 n 
+0000248694 00000 n 
+0000249094 00000 n 
+0000249500 00000 n 
+0000249821 00000 n 
+0000250207 00000 n 
+0000250599 00000 n 
+0000250944 00000 n 
+0000251369 00000 n 
+0000251762 00000 n 
+0000251984 00000 n 
+0000252259 00000 n 
+0000252654 00000 n 
+0000253022 00000 n 
+0000253463 00000 n 
+0000253817 00000 n 
+0000254157 00000 n 
+0000254464 00000 n 
+0000254900 00000 n 
+0000255154 00000 n 
+0000255376 00000 n 
+0000255681 00000 n 
+0000256106 00000 n 
+0000256384 00000 n 
+0000256795 00000 n 
+0000257193 00000 n 
+0000257606 00000 n 
+0000257920 00000 n 
+0000258327 00000 n 
+0000258749 00000 n 
+0000259039 00000 n 
+0000259380 00000 n 
+0000259796 00000 n 
+0000260304 00000 n 
+0000260773 00000 n 
+0000261178 00000 n 
+0000261391 00000 n 
+0000261700 00000 n 
+0000261915 00000 n 
+0000262267 00000 n 
+0000262624 00000 n 
+0000262959 00000 n 
+0000263311 00000 n 
+0000263651 00000 n 
+0000263929 00000 n 
+0000264347 00000 n 
+0000264641 00000 n 
+0000264890 00000 n 
+0000265178 00000 n 
+0000265529 00000 n 
+0000265757 00000 n 
+0000266084 00000 n 
+0000266370 00000 n 
+0000266696 00000 n 
+0000267043 00000 n 
+0000267400 00000 n 
+0000267666 00000 n 
+0000268015 00000 n 
+0000268298 00000 n 
+0000268593 00000 n 
+0000268925 00000 n 
+0000269333 00000 n 
+0000269708 00000 n 
+0000270100 00000 n 
+0000270439 00000 n 
+0000270644 00000 n 
+0000270848 00000 n 
+0000271155 00000 n 
+0000271246 00000 n 
+0000271346 00000 n 
+0000271733 00000 n 
+0000272074 00000 n 
+0000272404 00000 n 
+0000272685 00000 n 
+0000273037 00000 n 
+0000273357 00000 n 
+0000273765 00000 n 
+0000274194 00000 n 
+0000274357 00000 n 
+0000274681 00000 n 
+0000274993 00000 n 
+0000275420 00000 n 
+0000275793 00000 n 
+0000276095 00000 n 
+0000276542 00000 n 
+0000276759 00000 n 
+0000277171 00000 n 
+0000277604 00000 n 
+0000278156 00000 n 
+0000278532 00000 n 
+0000278887 00000 n 
+0000279229 00000 n 
+0000279585 00000 n 
+0000279939 00000 n 
+0000280233 00000 n 
+0000280662 00000 n 
+0000280956 00000 n 
+0000281209 00000 n 
+0000281431 00000 n 
+0000281762 00000 n 
+0000282050 00000 n 
+0000282390 00000 n 
+0000282745 00000 n 
+0000283026 00000 n 
+0000283391 00000 n 
+0000283680 00000 n 
+0000283975 00000 n 
+0000284469 00000 n 
+0000284640 00000 n 
+0000284917 00000 n 
+0000285234 00000 n 
+0000285591 00000 n 
+0000285946 00000 n 
+0000286156 00000 n 
+0000286505 00000 n 
+0000286934 00000 n 
+0000287290 00000 n 
+0000287710 00000 n 
+0000288131 00000 n 
+0000288477 00000 n 
+0000288940 00000 n 
+0000289301 00000 n 
+0000289661 00000 n 
+0000289947 00000 n 
+0000290247 00000 n 
+0000290495 00000 n 
+0000290723 00000 n 
+0000291073 00000 n 
+0000291343 00000 n 
+0000291704 00000 n 
+0000291997 00000 n 
+0000292291 00000 n 
+0000292595 00000 n 
+0000292678 00000 n 
+0000292756 00000 n 
+0000293181 00000 n 
+0000293568 00000 n 
+0000293880 00000 n 
+0000294273 00000 n 
+0000294821 00000 n 
+0000295195 00000 n 
+0000295312 00000 n 
+0000295489 00000 n 
+0000295886 00000 n 
+0000296273 00000 n 
+0000296695 00000 n 
+0000297148 00000 n 
+0000297575 00000 n 
+0000298110 00000 n 
+0000298467 00000 n 
+0000298736 00000 n 
+0000299082 00000 n 
+0000299401 00000 n 
+0000299847 00000 n 
+0000300176 00000 n 
+0000300525 00000 n 
+0000305589 00000 n 
+0000305641 00000 n 
+trailer
+<<
+/Size 538
+/Root 536 0 R
+/Info 537 0 R
+/ID [<fb60d263467ddc25340ca15779a75b6f><fb60d263467ddc25340ca15779a75b6f>]
+>>
+startxref
+305860
+%%EOF
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/libguide.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/lneato.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/mm2gv.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/neato.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/neatoguide.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/nop.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/osage.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/pathplan.3.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/prune.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/sccmap.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/tred.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/twopi.1.pdf has changed
Binary file toolboxes/graph_visualisation/share/graphviz/doc/pdf/unflatten.1.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/KW91.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+digraph G {
+	style=bold;
+	subgraph cluster_outer {
+		Act_1 -> Act_21;
+		Act_1 -> Act_23;
+		Act_25 -> Act_3;
+		subgraph cluster_inner {
+			label = "                          Act_2";
+			{Act_21 -> Act_22 [minlen=2]; rank=same;}
+			Act_22 -> Act_23;
+			Act_22 -> Act_24;
+			{Act_23 -> Act_24 [minlen=2]; rank=same;}
+			Act_23 -> Act_25;
+			Act_24 -> Act_25;
+		}
+	}
+	Ext_1 -> Act_1;
+	Act_3 -> Ext_2;
+	Ext_3 -> Act_24;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/Latin1.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+digraph G {
+graph [charset=latin1]
+node [fontsize=10]
+a [label = "áâãäåæçèéêëìíîïðñòóôõöøùúûü"];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/NaN.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,126 @@
+digraph xyz {
+orientation=landscape;
+ratio=compress;
+size="16,10";
+AbstractMemory -> Memory;
+AliasedMemory -> AliasedMemory;
+AliasedMemory -> Memory;
+Architecture -> ROOT;
+Assembly -> ROOT;
+AtomProperties -> NRAtom;
+AtomWr -> Wr;
+Break -> Break;
+Break -> Target;
+Breakpoint -> Breakpoint;
+Breakpoint -> Event;
+Breakpoint -> ROOT;
+CDB -> Target;
+CDB -> Thread;
+CommonFrame -> Target;
+ControlOps -> InterpF;
+Displayed -> Displayed;
+Displayed -> InterpTypes;
+ETimer -> RTHeapRep;
+Event -> Event;
+Event -> ROOT;
+Event -> Target;
+EventHandler -> ROOT;
+EventHandler -> StandardEvents;
+Expression -> ROOT;
+ExpressionServer -> Expression;
+FollowBreakpoint -> Breakpoint;
+Formatter -> ROOT;
+Formatter -> Thread;
+Frame -> Frame;
+Frame -> Memory;
+Frame -> Target;
+FrameClass -> Frame;
+IntIntTbl -> IntIntTbl;
+IntIntTbl -> ROOT;
+Interp -> InterpF;
+Interp -> ROOT;
+InterpF -> Interp;
+InterpF -> InterpF;
+InterpF -> ROOT;
+InterpScan -> TokenStream;
+InterpTypes -> InterpTypes;
+InterpTypes -> ROOT;
+List -> Thread;
+LoadState -> LoadState;
+LoadState -> LoadStateRep;
+LoadState -> ROOT;
+LoadStateRep -> LoadState;
+LocationRep -> Memory;
+MC68Frame -> CommonFrame;
+MC68GCommonFrame -> EventHandler;
+MUTEX  -> ROOT;
+Memory -> Displayed;
+Memory -> InterpTypes;
+MipsFrame -> CommonFrame;
+MipsFrame -> InterpTypes;
+MipsGCommonFrame -> EventHandler;
+NRAtom -> AtomProperties;
+NRAtom -> ROOT;
+NopBreakpoint -> Breakpoint;
+PSFormatter -> InterpTypes;
+PSInterp -> InterpTypes;
+PSLoadState -> InterpTypes;
+PSMemory -> InterpTypes;
+ProtectedWire -> ProtectedWire;
+ProtectedWire -> Wire;
+RTHeap -> RTHeapRep;
+RTHeapRep -> ROOT;
+Rd -> RdClass;
+RdClass -> MUTEX;
+RegisterMemory -> Memory;
+Scope -> ROOT;
+Scope -> Scope;
+Scope -> Target;
+SourceLoc -> Target;
+SourceMap -> ROOT;
+SparcFrame -> CommonFrame;
+SparcGCommonFrame -> EventHandler;
+StandardEvents -> StandardEvents;
+StandardEvents -> Target;
+StreamWire -> Wire;
+Symbol -> Displayed;
+Symbol -> Symbol;
+TThread -> ROOT;
+TThread -> Target;
+Target -> Displayed;
+Target -> Event;
+Target -> FrameClass;
+Target -> ROOT;
+Target -> TThread;
+Target -> Target;
+Target -> TargetF;
+Target -> Thread;
+TargetF -> Target;
+TargetState -> Assembly;
+TextRd -> Rd;
+TextWr -> Wr;
+Thread -> ROOT;
+Thread -> Thread;
+TokenStream -> ROOT;
+TokenStream -> TokenStream;
+Trap -> ROOT;
+TrapMemory -> Memory;
+UFileRd -> Rd;
+UFileRd -> UFileRd;
+UFileWr -> UFileWr;
+UFileWr -> Wr;
+UnixHandler -> Event;
+UnixHandler -> UnixHandler;
+UserBreak -> Break;
+UserBreak -> Breakpoint;
+UserBreak -> Event;
+UserBreak -> Trap;
+UserBreak -> UserBreak;
+VaxFrame -> CommonFrame;
+VaxGCommonFrame -> EventHandler;
+Wire -> ROOT;
+Wire -> TrapMemory;
+Wire -> Wire;
+Wr -> WrClass;
+WrClass -> MUTEX;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/abstract.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+digraph abstract {
+	size="6,6";
+	S24 -> 27;
+	S24 -> 25;
+	S1 -> 10;
+	S1 -> 2;
+	S35 -> 36;
+	S35 -> 43;
+	S30 -> 31;
+	S30 -> 33;
+	9 -> 42;
+	9 -> T1;
+	25 -> T1;
+	25 -> 26;
+	27 -> T24;
+	2 -> 3;
+	2 -> 16;
+	2 -> 17;
+	2 -> T1;
+	2 -> 18;
+	10 -> 11;
+	10 -> 14;
+	10 -> T1;
+	10 -> 13;
+	10 -> 12;
+	31 -> T1;
+	31 -> 32;
+	33 -> T30;
+	33 -> 34;
+	42 -> 4;
+	26 -> 4;
+	3 -> 4;
+	16 -> 15;
+	17 -> 19;
+	18 -> 29;
+	11 -> 4;
+	14 -> 15;
+	37 -> 39;
+	37 -> 41;
+	37 -> 38;
+	37 -> 40;
+	13 -> 19;
+	12 -> 29;
+	43 -> 38;
+	43 -> 40;
+	36 -> 19;
+	32 -> 23;
+	34 -> 29;
+	39 -> 15;
+	41 -> 29;
+	38 -> 4;
+	40 -> 19;
+	4 -> 5;
+	19 -> 21;
+	19 -> 20;
+	19 -> 28;
+	5 -> 6;
+	5 -> T35;
+	5 -> 23;
+	21 -> 22;
+	20 -> 15;
+	28 -> 29;
+	6 -> 7;
+	15 -> T1;
+	22 -> 23;
+	22 -> T35;
+	29 -> T30;
+	7 -> T8;
+	23 -> T24;
+	23 -> T1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/alf.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+digraph Alf {
+size = "6,9";
+node [ shape = record ];
+Decl [ label = "\n\nDecl|{name|access|decl_flags|extern_c_linkage}"];
+Nontype_decl [ label = "Nontype_decl|{type}"];
+Defined_decl [ label = "Defined_decl|{linkage}"];
+Data_decl [ label = "Data_decl|{storage_class}"];
+Function_decl [ label = "Function_decl|{formals|defaults}"];
+Data [ label = "Data|{initializer}"];
+Function [ label = "Function|{body}"];
+Constructor [ label = "Constructor|{member_initializers}"];
+Aggregate ->  Type_decl ;
+Class -> Aggregate;
+Union -> Aggregate;
+Data -> Data_decl;
+Data -> Defn;
+Data_decl -> Defined_decl;
+Data_member ->  Nontype_decl ;
+Defined_decl -> Nontype_decl;
+Defn -> Defined_decl;
+Enum ->  Type_decl ;
+Enumerator ->  Nontype_decl ;
+Function -> Defn;
+Function -> Function_decl;
+Constructor -> Function;
+Destructor -> Function;
+Function_decl -> Defined_decl;
+Nontype_decl ->  Decl ;
+Template_type_arg ->  Type_decl ;
+Type_decl ->  Decl ;
+Typedef ->  Type_decl ;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/arrows.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,77 @@
+digraph G {
+	graph [rankdir=LR nodesep=0]
+	node [shape=point label=""]
+	edge [fontsize=10]
+	_box -> box [arrowhead=box label=box]
+	box -> boxbox [arrowhead=boxbox label=boxbox]
+	_box -> lbox [arrowhead=lbox label=lbox]
+	lbox -> lboxlbox [arrowhead=lboxlbox label=lboxlbox]
+	_box -> rbox [arrowhead=rbox label=rbox]
+	rbox -> rboxrbox [arrowhead=rboxrbox label=rboxrbox]
+	_box -> olbox [arrowhead=olbox label=olbox]
+	olbox -> olboxolbox [arrowhead=olboxolbox label=olboxolbox]
+	_box -> orbox [arrowhead=orbox label=orbox]
+	orbox -> orboxorbox [arrowhead=orboxorbox label=orboxorbox]
+	_box -> obox [arrowhead=obox label=obox]
+	obox -> oboxobox [arrowhead=oboxobox label=oboxobox]
+	_crow -> crow [arrowhead=crow label=crow]
+	crow -> crowcrow [arrowhead=crowcrow label=crowcrow]
+	_crow -> lcrow [arrowhead=lcrow label=lcrow]
+	lcrow -> lcrowlcrow [arrowhead=lcrowlcrow label=lcrowlcrow]
+	_crow -> rcrow [arrowhead=rcrow label=rcrow]
+	rcrow -> rcrowrcrow [arrowhead=rcrowrcrow label=rcrowrcrow]
+	_diamond -> diamond [arrowhead=diamond label=diamond]
+	diamond -> diamonddiamond [arrowhead=diamonddiamond label=diamonddiamond]
+	_diamond -> ldiamond [arrowhead=ldiamond label=ldiamond]
+	ldiamond -> ldiamondldiamond [arrowhead=ldiamondldiamond label=ldiamondldiamond]
+	_diamond -> rdiamond [arrowhead=rdiamond label=rdiamond]
+	rdiamond -> rdiamondrdiamond [arrowhead=rdiamondrdiamond label=rdiamondrdiamond]
+	_diamond -> oldiamond [arrowhead=oldiamond label=oldiamond]
+	oldiamond -> oldiamondoldiamond [arrowhead=oldiamondoldiamond label=oldiamondoldiamond]
+	_diamond -> ordiamond [arrowhead=ordiamond label=ordiamond]
+	ordiamond -> ordiamondordiamond [arrowhead=ordiamondordiamond label=ordiamondordiamond]
+	_diamond -> odiamond [arrowhead=odiamond label=odiamond]
+	odiamond -> odiamondodiamond [arrowhead=odiamondodiamond label=odiamondodiamond]
+	_dot -> dot [arrowhead=dot label=dot]
+	dot -> dotdot [arrowhead=dotdot label=dotdot]
+	_dot -> odot [arrowhead=odot label=odot]
+	odot -> odotodot [arrowhead=odotodot label=odotodot]
+	_inv -> inv [arrowhead=inv label=inv]
+	inv -> invinv [arrowhead=invinv label=invinv]
+	_inv -> linv [arrowhead=linv label=linv]
+	linv -> linvlinv [arrowhead=linvlinv label=linvlinv]
+	_inv -> rinv [arrowhead=rinv label=rinv]
+	rinv -> rinvrinv [arrowhead=rinvrinv label=rinvrinv]
+	_inv -> olinv [arrowhead=olinv label=olinv]
+	olinv -> olinvolinv [arrowhead=olinvolinv label=olinvolinv]
+	_inv -> orinv [arrowhead=orinv label=orinv]
+	orinv -> orinvorinv [arrowhead=orinvorinv label=orinvorinv]
+	_inv -> oinv [arrowhead=oinv label=oinv]
+	oinv -> oinvoinv [arrowhead=oinvoinv label=oinvoinv]
+	_none -> none [arrowhead=none label=none]
+	none -> nonenone [arrowhead=nonenone label=nonenone]
+	_normal -> normal [arrowhead=normal label=normal]
+	normal -> normalnormal [arrowhead=normalnormal label=normalnormal]
+	_normal -> lnormal [arrowhead=lnormal label=lnormal]
+	lnormal -> lnormallnormal [arrowhead=lnormallnormal label=lnormallnormal]
+	_normal -> rnormal [arrowhead=rnormal label=rnormal]
+	rnormal -> rnormalrnormal [arrowhead=rnormalrnormal label=rnormalrnormal]
+	_normal -> olnormal [arrowhead=olnormal label=olnormal]
+	olnormal -> olnormalolnormal [arrowhead=olnormalolnormal label=olnormalolnormal]
+	_normal -> ornormal [arrowhead=ornormal label=ornormal]
+	ornormal -> ornormalornormal [arrowhead=ornormalornormal label=ornormalornormal]
+	_normal -> onormal [arrowhead=onormal label=onormal]
+	onormal -> onormalonormal [arrowhead=onormalonormal label=onormalonormal]
+	_tee -> tee [arrowhead=tee label=tee]
+	tee -> teetee [arrowhead=teetee label=teetee]
+	_tee -> ltee [arrowhead=ltee label=ltee]
+	ltee -> lteeltee [arrowhead=lteeltee label=lteeltee]
+	_tee -> rtee [arrowhead=rtee label=rtee]
+	rtee -> rteertee [arrowhead=rteertee label=rteertee]
+	_vee -> vee [arrowhead=vee label=vee]
+	vee -> veevee [arrowhead=veevee label=veevee]
+	_vee -> lvee [arrowhead=lvee label=lvee]
+	lvee -> lveelvee [arrowhead=lveelvee label=lveelvee]
+	_vee -> rvee [arrowhead=rvee label=rvee]
+	rvee -> rveervee [arrowhead=rveervee label=rveervee]
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/awilliams.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,188 @@
+digraph pvn {
+	ordering=out;
+
+	node_1 -> node_2;
+	node_1 [label="ID: 1\ntype: 48\nnbr out: 0\nnbr chi: 11"];
+	node_2 [label="ID: 2\ntype: 8\nnbr out: 0\nnbr chi: 0"];
+	node_1 -> node_3;
+	node_3 [label="ID: 3\ntype: 1\nnbr out: 0\nnbr chi: 0"];
+	node_1 -> node_4;
+	node_4 [label="ID: 4\ntype: 6\nnbr out: 0\nnbr chi: 0"];
+	node_1 -> node_5;
+	node_5 [label="ID: 5\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_1 -> node_6;
+	node_6 [label="ID: 6\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_1 -> node_7;
+	node_7 [label="ID: 7\ntype: 49\nnbr out: 0\nnbr chi: 0"];
+	node_7 -> node_8;
+	node_8 [label="ID: 8\ntype: 45\nnbr out: 2\nnbr chi: 0"];
+	node_8 -> node_9;
+	node_9 [label="ID: 9\ntype: 48\nnbr out: 0\nnbr chi: 4"];
+	node_9 -> node_10;
+	node_10 [label="ID: 10\ntype: 8\nnbr out: 0\nnbr chi: 0"];
+	node_9 -> node_11;
+	node_11 [label="ID: 11\ntype: 1\nnbr out: 0\nnbr chi: 0"];
+	node_9 -> node_12;
+	node_12 [label="ID: 12\ntype: 5\nnbr out: 0\nnbr chi: 0"];
+	node_9 -> node_13;
+	node_13 [label="ID: 13\ntype: 16\nnbr out: 0\nnbr chi: 0"];
+	node_8 -> node_14;
+	node_14 [label="ID: 14\ntype: 39\nnbr out: 1\nnbr chi: 0"];
+	node_14 -> node_15;
+	node_15 [label="ID: 15\ntype: 55\nnbr out: 0\nnbr chi: 0"];
+	node_15 -> node_16;
+	node_16 [label="ID: 16\ntype: 48\nnbr out: 0\nnbr chi: 3"];
+	node_16 -> node_17;
+	node_17 [label="ID: 17\ntype: 1\nnbr out: 0\nnbr chi: 0"];
+	node_16 -> node_18;
+	node_18 [label="ID: 18\ntype: 6\nnbr out: 0\nnbr chi: 0"];
+	node_16 -> node_19;
+	node_19 [label="ID: 19\ntype: 45\nnbr out: 1\nnbr chi: 0"];
+	node_19 -> node_20;
+	node_20 [label="ID: 20\ntype: 48\nnbr out: 0\nnbr chi: 5"];
+	node_20 -> node_21;
+	node_21 [label="ID: 21\ntype: 38\nnbr out: 0\nnbr chi: 0"];
+	node_20 -> node_22;
+	node_22 [label="ID: 22\ntype: 8\nnbr out: 0\nnbr chi: 0"];
+	node_20 -> node_23;
+	node_23 [label="ID: 23\ntype: 1\nnbr out: 0\nnbr chi: 0"];
+	node_20 -> node_24;
+	node_24 [label="ID: 24\ntype: 5\nnbr out: 0\nnbr chi: 0"];
+	node_20 -> node_25;
+	node_25 [label="ID: 25\ntype: 16\nnbr out: 0\nnbr chi: 0"];
+	node_19 -> node_26;
+	node_26 [label="ID: 26\ntype: 41\nnbr out: 12\nnbr chi: 0"];
+	node_26 -> node_27;
+	node_27 [label="ID: 27\ntype: 48\nnbr out: 0\nnbr chi: 5"];
+	node_27 -> node_28;
+	node_28 [label="ID: 28\ntype: 38\nnbr out: 0\nnbr chi: 0"];
+	node_27 -> node_29;
+	node_29 [label="ID: 29\ntype: 8\nnbr out: 0\nnbr chi: 0"];
+	node_27 -> node_30;
+	node_30 [label="ID: 30\ntype: 1\nnbr out: 0\nnbr chi: 0"];
+	node_27 -> node_31;
+	node_31 [label="ID: 31\ntype: 5\nnbr out: 0\nnbr chi: 0"];
+	node_27 -> node_32;
+	node_32 [label="ID: 32\ntype: 16\nnbr out: 0\nnbr chi: 0"];
+	node_26 -> node_27;
+	node_26 -> node_27;
+	node_26 -> node_27;
+	node_26 -> node_27;
+	node_26 -> node_27;
+	node_26 -> node_27;
+	node_26 -> node_27;
+	node_26 -> node_27;
+	node_26 -> node_27;
+	node_26 -> node_27;
+	node_26 -> node_27;
+	node_26 -> node_33;
+	node_33 [label="ID: 33\ntype: 48\nnbr out: 0\nnbr chi: 5"];
+	node_33 -> node_34;
+	node_34 [label="ID: 34\ntype: 38\nnbr out: 0\nnbr chi: 0"];
+	node_33 -> node_35;
+	node_35 [label="ID: 35\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_33 -> node_36;
+	node_36 [label="ID: 36\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_33 -> node_37;
+	node_37 [label="ID: 37\ntype: 20\nnbr out: 0\nnbr chi: 0"];
+	node_33 -> node_38;
+	node_38 [label="ID: 38\ntype: 16\nnbr out: 0\nnbr chi: 0"];
+	node_15 -> node_39;
+	node_39 [label="ID: 39\ntype: 45\nnbr out: 1\nnbr chi: 0"];
+	node_39 -> node_40;
+	node_40 [label="ID: 40\ntype: 16\nnbr out: 0\nnbr chi: 0"];
+	node_39 -> node_41;
+	node_41 [label="ID: 41\ntype: 48\nnbr out: 0\nnbr chi: 3"];
+	node_41 -> node_42;
+	node_42 [label="ID: 42\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_41 -> node_43;
+	node_43 [label="ID: 43\ntype: 1\nnbr out: 0\nnbr chi: 0"];
+	node_41 -> node_44;
+	node_44 [label="ID: 44\ntype: 6\nnbr out: 0\nnbr chi: 0"];
+	node_15 -> node_45;
+	node_45 [label="ID: 45\ntype: 48\nnbr out: 0\nnbr chi: 4"];
+	node_45 -> node_46;
+	node_46 [label="ID: 46\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_45 -> node_47;
+	node_47 [label="ID: 47\ntype: 45\nnbr out: 1\nnbr chi: 0"];
+	node_47 -> node_48;
+	node_48 [label="ID: 48\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_47 -> node_49;
+	node_49 [label="ID: 49\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_45 -> node_50;
+	node_50 [label="ID: 50\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_45 -> node_51;
+	node_51 [label="ID: 51\ntype: 45\nnbr out: 1\nnbr chi: 0"];
+	node_51 -> node_52;
+	node_52 [label="ID: 52\ntype: 45\nnbr out: 1\nnbr chi: 0"];
+	node_52 -> node_53;
+	node_53 [label="ID: 53\ntype: 54\nnbr out: 0\nnbr chi: 0"];
+	node_52 -> node_54;
+	node_54 [label="ID: 54\ntype: 16\nnbr out: 0\nnbr chi: 0"];
+	node_51 -> node_55;
+	node_55 [label="ID: 55\ntype: 48\nnbr out: 0\nnbr chi: 3"];
+	node_55 -> node_56;
+	node_56 [label="ID: 56\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_55 -> node_57;
+	node_57 [label="ID: 57\ntype: 1\nnbr out: 0\nnbr chi: 0"];
+	node_55 -> node_58;
+	node_58 [label="ID: 58\ntype: 6\nnbr out: 0\nnbr chi: 0"];
+	node_15 -> node_59;
+	node_59 [label="ID: 59\ntype: 48\nnbr out: 0\nnbr chi: 5"];
+	node_59 -> node_60;
+	node_60 [label="ID: 60\ntype: 38\nnbr out: 0\nnbr chi: 0"];
+	node_59 -> node_61;
+	node_61 [label="ID: 61\ntype: 8\nnbr out: 0\nnbr chi: 0"];
+	node_59 -> node_62;
+	node_62 [label="ID: 62\ntype: 1\nnbr out: 0\nnbr chi: 0"];
+	node_59 -> node_63;
+	node_63 [label="ID: 63\ntype: 5\nnbr out: 0\nnbr chi: 0"];
+	node_59 -> node_64;
+	node_64 [label="ID: 64\ntype: 16\nnbr out: 0\nnbr chi: 0"];
+	node_15 -> node_65;
+	node_65 [label="ID: 65\ntype: 48\nnbr out: 0\nnbr chi: 5"];
+	node_65 -> node_66;
+	node_66 [label="ID: 66\ntype: 38\nnbr out: 0\nnbr chi: 0"];
+	node_65 -> node_67;
+	node_67 [label="ID: 67\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_65 -> node_68;
+	node_68 [label="ID: 68\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_65 -> node_69;
+	node_69 [label="ID: 69\ntype: 20\nnbr out: 0\nnbr chi: 0"];
+	node_65 -> node_70;
+	node_70 [label="ID: 70\ntype: 16\nnbr out: 0\nnbr chi: 0"];
+	node_14 -> node_71;
+	node_71 [label="ID: 71\ntype: 45\nnbr out: 1\nnbr chi: 0"];
+	node_71 -> node_72;
+	node_72 [label="ID: 72\ntype: 16\nnbr out: 0\nnbr chi: 0"];
+	node_71 -> node_73;
+	node_73 [label="ID: 73\ntype: 48\nnbr out: 0\nnbr chi: 3"];
+	node_73 -> node_74;
+	node_74 [label="ID: 74\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_73 -> node_75;
+	node_75 [label="ID: 75\ntype: 1\nnbr out: 0\nnbr chi: 0"];
+	node_73 -> node_76;
+	node_76 [label="ID: 76\ntype: 6\nnbr out: 0\nnbr chi: 0"];
+	node_8 -> node_77;
+	node_77 [label="ID: 77\ntype: 45\nnbr out: 1\nnbr chi: 0"];
+	node_77 -> node_78;
+	node_78 [label="ID: 78\ntype: 16\nnbr out: 0\nnbr chi: 0"];
+	node_77 -> node_79;
+	node_79 [label="ID: 79\ntype: 48\nnbr out: 0\nnbr chi: 3"];
+	node_79 -> node_80;
+	node_80 [label="ID: 80\ntype: 14\nnbr out: 0\nnbr chi: 0"];
+	node_79 -> node_81;
+	node_81 [label="ID: 81\ntype: 1\nnbr out: 0\nnbr chi: 0"];
+	node_79 -> node_82;
+	node_82 [label="ID: 82\ntype: 6\nnbr out: 0\nnbr chi: 0"];
+	node_1 -> node_83;
+	node_83 [label="ID: 83\ntype: 38\nnbr out: 0\nnbr chi: 0"];
+	node_1 -> node_84;
+	node_84 [label="ID: 84\ntype: 8\nnbr out: 0\nnbr chi: 0"];
+	node_1 -> node_85;
+	node_85 [label="ID: 85\ntype: 1\nnbr out: 0\nnbr chi: 0"];
+	node_1 -> node_86;
+	node_86 [label="ID: 86\ntype: 5\nnbr out: 0\nnbr chi: 0"];
+	node_1 -> node_87;
+	node_87 [label="ID: 87\ntype: 16\nnbr out: 0\nnbr chi: 0"];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+digraph G {
+	subgraph cluster_0 {
+		label = "hello world";
+		a -> b;
+		a -> c;
+		color = hotpink;
+	}
+
+	subgraph cluster_1 {
+		label = "MSDOT";
+		style= "dashed";
+		color=purple;
+		x -> y;
+		x -> z;
+		y -> z;
+		y -> q;
+	}
+
+	top -> a;
+	top -> y;
+	y -> b;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust1.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+digraph G {
+	subgraph cluster_c0 {a0 -> a1 -> a2 -> a3;}
+	subgraph cluster_c1 {b0 -> b1 -> b2 -> b3;}
+	x -> a0;
+	x -> b0;
+	a1 -> a3;
+	a3 -> a0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust2.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+digraph G {
+	subgraph cluster_c0 {a0 -> a1 -> a2 -> a3;}
+	subgraph cluster_c1 {b0 -> b1 -> b2 -> b3;}
+	x -> a0;
+	x -> b0;
+	a1 -> b3;
+	b3 -> a1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust3.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+digraph G {
+	subgraph cluster_c0 {a0 -> a1 -> a2 -> a3;}
+	subgraph cluster_c1 {b0 -> b1 -> b2 -> b3;}
+	x -> a0;
+	x -> b0;
+	a1 -> b3;
+	b1 -> a3;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust4.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+digraph G {
+
+	subgraph cluster_0 {
+		style=filled;
+		color=lightgrey;
+		node [style=filled,color=white];
+		a0 -> a1 -> a2 -> a3;
+		label = "process #1";
+	}
+
+	subgraph cluster_1 {
+		node [style=filled];
+		b0 -> b1 -> b2 -> b3;
+		label = "process #2";
+		color=blue
+	}
+	start -> a0;
+	start -> b0;
+	a1 -> b3;
+	b2 -> a3;
+	a3 -> a0;
+	a3 -> end;
+	b3 -> end;
+
+	start [shape=Mdiamond];
+	end [shape=Msquare];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/clust5.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,25 @@
+digraph G {
+size="6,6";
+	a -> b -> c;
+
+	subgraph cluster0 {
+		x0 -> y0;
+		x0 -> z0;
+	}
+
+	subgraph cluster1 {
+		x1 -> y1;
+		x1 -> z1;
+	}
+
+	subgraph cluster2 {
+		x2 -> y2;
+		x2 -> z2;
+	}
+
+	a -> x0;
+	b -> x1;
+	b -> x2;
+	a -> z2;
+	c -> z1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/crazy.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,104 @@
+digraph "unix" {
+	graph [	fontname = "Helvetica-Oblique",
+		fontsize = 36,
+		label = "\n\n\n\nObject Oriented Graphs\nStephen North, 3/19/93",
+		size = "6,6" ];
+	node [	shape = polygon,
+		sides = 4,
+		distortion = "0.0",
+		orientation = "0.0",
+		skew = "0.0",
+		color = white,
+		style = filled,
+		fontname = "Helvetica-Outline" ];
+	"5th Edition" [sides=9, distortion="0.936354", orientation=28, skew="-0.126818", color=salmon2];
+	"6th Edition" [sides=5, distortion="0.238792", orientation=11, skew="0.995935", color=deepskyblue];
+	"PWB 1.0" [sides=8, distortion="0.019636", orientation=79, skew="-0.440424", color=goldenrod2];
+	LSX [sides=9, distortion="-0.698271", orientation=22, skew="-0.195492", color=burlywood2];
+	"1 BSD" [sides=7, distortion="0.265084", orientation=26, skew="0.403659", color=gold1];
+	"Mini Unix" [distortion="0.039386", orientation=2, skew="-0.461120", color=greenyellow];
+	Wollongong [sides=5, distortion="0.228564", orientation=63, skew="-0.062846", color=darkseagreen];
+	Interdata [distortion="0.624013", orientation=56, skew="0.101396", color=dodgerblue1];
+	"Unix/TS 3.0" [sides=8, distortion="0.731383", orientation=43, skew="-0.824612", color=thistle2];
+	"PWB 2.0" [sides=6, distortion="0.592100", orientation=34, skew="-0.719269", color=darkolivegreen3];
+	"7th Edition" [sides=10, distortion="0.298417", orientation=65, skew="0.310367", color=chocolate];
+	"8th Edition" [distortion="-0.997093", orientation=50, skew="-0.061117", color=turquoise3];
+	"32V" [sides=7, distortion="0.878516", orientation=19, skew="0.592905", color=steelblue3];
+	V7M [sides=10, distortion="-0.960249", orientation=32, skew="0.460424", color=navy];
+	"Ultrix-11" [sides=10, distortion="-0.633186", orientation=10, skew="0.333125", color=darkseagreen4];
+	Xenix [sides=8, distortion="-0.337997", orientation=52, skew="-0.760726", color=coral];
+	"UniPlus+" [sides=7, distortion="0.788483", orientation=39, skew="-0.526284", color=darkolivegreen3];
+	"9th Edition" [sides=7, distortion="0.138690", orientation=55, skew="0.554049", color=coral3];
+	"2 BSD" [sides=7, distortion="-0.010661", orientation=84, skew="0.179249", color=blanchedalmond];
+	"2.8 BSD" [distortion="-0.239422", orientation=44, skew="0.053841", color=lightskyblue1];
+	"2.9 BSD" [distortion="-0.843381", orientation=70, skew="-0.601395", color=aquamarine2];
+	"3 BSD" [sides=10, distortion="0.251820", orientation=18, skew="-0.530618", color=lemonchiffon];
+	"4 BSD" [sides=5, distortion="-0.772300", orientation=24, skew="-0.028475", color=darkorange1];
+	"4.1 BSD" [distortion="-0.226170", orientation=38, skew="0.504053", color=lightyellow1];
+	"4.2 BSD" [sides=10, distortion="-0.807349", orientation=50, skew="-0.908842", color=darkorchid4];
+	"4.3 BSD" [sides=10, distortion="-0.030619", orientation=76, skew="0.985021", color=lemonchiffon2];
+	"Ultrix-32" [distortion="-0.644209", orientation=21, skew="0.307836", color=goldenrod3];
+	"PWB 1.2" [sides=7, distortion="0.640971", orientation=84, skew="-0.768455", color=cyan];
+	"USG 1.0" [distortion="0.758942", orientation=42, skew="0.039886", color=blue];
+	"CB Unix 1" [sides=9, distortion="-0.348692", orientation=42, skew="0.767058", color=firebrick];
+	"USG 2.0" [distortion="0.748625", orientation=74, skew="-0.647656", color=chartreuse4];
+	"CB Unix 2" [sides=10, distortion="0.851818", orientation=32, skew="-0.020120", color=greenyellow];
+	"CB Unix 3" [sides=10, distortion="0.992237", orientation=29, skew="0.256102", color=bisque4];
+	"Unix/TS++" [sides=6, distortion="0.545461", orientation=16, skew="0.313589", color=mistyrose2];
+	"PDP-11 Sys V" [sides=9, distortion="-0.267769", orientation=40, skew="0.271226", color=cadetblue1];
+	"USG 3.0" [distortion="-0.848455", orientation=44, skew="0.267152", color=bisque2];
+	"Unix/TS 1.0" [distortion="0.305594", orientation=75, skew="0.070516", color=orangered];
+	"TS 4.0" [sides=10, distortion="-0.641701", orientation=50, skew="-0.952502", color=crimson];
+	"System V.0" [sides=9, distortion="0.021556", orientation=26, skew="-0.729938", color=darkorange1];
+	"System V.2" [sides=6, distortion="0.985153", orientation=33, skew="-0.399752", color=darkolivegreen4];
+	"System V.3" [sides=7, distortion="-0.687574", orientation=58, skew="-0.180116", color=lightsteelblue1];
+	"5th Edition" -> "6th Edition";
+	"5th Edition" -> "PWB 1.0";
+	"6th Edition" -> LSX;
+	"6th Edition" -> "1 BSD";
+	"6th Edition" -> "Mini Unix";
+	"6th Edition" -> Wollongong;
+	"6th Edition" -> Interdata;
+	Interdata -> "Unix/TS 3.0";
+	Interdata -> "PWB 2.0";
+	Interdata -> "7th Edition";
+	"7th Edition" -> "8th Edition";
+	"7th Edition" -> "32V";
+	"7th Edition" -> V7M;
+	"7th Edition" -> "Ultrix-11";
+	"7th Edition" -> Xenix;
+	"7th Edition" -> "UniPlus+";
+	V7M -> "Ultrix-11";
+	"8th Edition" -> "9th Edition";
+	"1 BSD" -> "2 BSD";
+	"2 BSD" -> "2.8 BSD";
+	"2.8 BSD" -> "Ultrix-11";
+	"2.8 BSD" -> "2.9 BSD";
+	"32V" -> "3 BSD";
+	"3 BSD" -> "4 BSD";
+	"4 BSD" -> "4.1 BSD";
+	"4.1 BSD" -> "4.2 BSD";
+	"4.1 BSD" -> "2.8 BSD";
+	"4.1 BSD" -> "8th Edition";
+	"4.2 BSD" -> "4.3 BSD";
+	"4.2 BSD" -> "Ultrix-32";
+	"PWB 1.0" -> "PWB 1.2";
+	"PWB 1.0" -> "USG 1.0";
+	"PWB 1.2" -> "PWB 2.0";
+	"USG 1.0" -> "CB Unix 1";
+	"USG 1.0" -> "USG 2.0";
+	"CB Unix 1" -> "CB Unix 2";
+	"CB Unix 2" -> "CB Unix 3";
+	"CB Unix 3" -> "Unix/TS++";
+	"CB Unix 3" -> "PDP-11 Sys V";
+	"USG 2.0" -> "USG 3.0";
+	"USG 3.0" -> "Unix/TS 3.0";
+	"PWB 2.0" -> "Unix/TS 3.0";
+	"Unix/TS 1.0" -> "Unix/TS 3.0";
+	"Unix/TS 3.0" -> "TS 4.0";
+	"Unix/TS++" -> "TS 4.0";
+	"CB Unix 3" -> "TS 4.0";
+	"TS 4.0" -> "System V.0";
+	"System V.0" -> "System V.2";
+	"System V.2" -> "System V.3";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/ctext.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+digraph G {
+	xyz [label = "hello\nworld",color="slateblue",fontsize=24,fontname="Palatino-Italic",style=filled,fontcolor="hotpink"];
+	node [style=filled];
+	red [color=red];
+	green [color=green];
+	blue [color=blue,fontcolor=black];
+	cyan [color=cyan];
+	magenta [color=magenta];
+	yellow [color=yellow];
+	orange [color=orange];
+	red -> green;
+	red -> blue;
+	blue -> cyan;
+	blue -> magenta;
+	green -> yellow;
+	green -> orange;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/dfa.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+digraph g {
+"start" [ label = "MWGC-" ];
+"n1" [ label = "WC-MG" ];
+"n2" [ label = "MWC-G" ];
+"n3" [ label = "C-MWG" ];
+"n4" [ label = "W-MGC" ];
+"n5" [ label = "MGC-W" ];
+"n6" [ label = "MWG-C" ];
+"n7" [ label = "G-MWC" ];
+"n8" [ label = "MG-WC" ];
+"n9" [ label = "-MWGC" ];
+"start" -> "n1" [ label = "g" ];
+"n1" -> "start" [ label = "g" ];
+subgraph l { rank = same; "n3" "n4" }
+subgraph r { rank = same; "n5" "n6" }
+"n1" -> "n2" [ label = "m" ];
+"n2" -> "n1" [ label = "m" ];
+"n2" -> "n3" [ label = "w" ];
+"n3" -> "n2" [ label = "w" ];
+"n2" -> "n4" [ label = "c" ];
+"n4" -> "n2" [ label = "c" ];
+"n3" -> "n5" [ label = "g" ];
+"n5" -> "n3" [ label = "g" ];
+"n4" -> "n6" [ label = "g" ];
+"n6" -> "n4" [ label = "g" ];
+"n5" -> "n7" [ label = "c" ];
+"n7" -> "n5" [ label = "c" ];
+"n6" -> "n7" [ label = "w" ];
+"n7" -> "n6" [ label = "w" ];
+"n7" -> "n8" [ label = "m" ];
+"n8" -> "n7" [ label = "m" ];
+"n8" -> "n9" [ label = "g" ];
+"n9" -> "n8" [ label = "g" ];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/fig6.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,74 @@
+digraph G {
+	size = "8,8";
+	{rank=min S8 S24 S1 S35 S30}
+	{rank=max T8 T24 T1 T35 T30}
+	S8 -> 9;
+	S24 -> 27;
+	S24 -> 25;
+	S1 -> 10;
+	S1 -> 2;
+	S35 -> 36;
+	S35 -> 43;
+	S30 -> 31;
+	S30 -> 33;
+	9 -> 42;
+	9 -> T1;
+	25 -> T1;
+	25 -> 26;
+	27 -> T24;
+	2 -> 3;
+	2 -> 16;
+	2 -> 17;
+	2 -> T1;
+	2 -> 18;
+	10 -> 11;
+	10 -> 14;
+	10 -> T1;
+	10 -> 13;
+	10 -> 12;
+	31 -> T1;
+	31 -> 32;
+	33 -> T30;
+	33 -> 34;
+	42 -> 4;
+	26 -> 4;
+	3 -> 4;
+	16 -> 15;
+	17 -> 19;
+	18 -> 29;
+	11 -> 4;
+	14 -> 15;
+	37 -> 39;
+	37 -> 41;
+	37 -> 38;
+	37 -> 40;
+	13 -> 19;
+	12 -> 29;
+	43 -> 38;
+	43 -> 40;
+	36 -> 19;
+	32 -> 23;
+	34 -> 29;
+	39 -> 15;
+	41 -> 29;
+	38 -> 4;
+	40 -> 19;
+	4 -> 5;
+	19 -> 21;
+	19 -> 20;
+	19 -> 28;
+	5 -> 6;
+	5 -> T35;
+	5 -> 23;
+	21 -> 22;
+	20 -> 15;
+	28 -> 29;
+	6 -> 7;
+	15 -> T1;
+	22 -> 23;
+	22 -> T35;
+	29 -> T30;
+	7 -> T8;
+	23 -> T24;
+	23 -> T1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/fsm.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+digraph finite_state_machine {
+
+	node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
+	node [shape = circle];
+	rankdir=LR;
+	LR_0 -> LR_2 [ label = "SS(B)" ];
+	LR_0 -> LR_1 [ label = "SS(S)" ];
+	LR_1 -> LR_3 [ label = "S($end)" ];
+	LR_2 -> LR_6 [ label = "SS(b)" ];
+	LR_2 -> LR_5 [ label = "SS(a)" ];
+	LR_2 -> LR_4 [ label = "S(A)" ];
+	LR_5 -> LR_7 [ label = "S(b)" ];
+	LR_5 -> LR_5 [ label = "S(a)" ];
+	LR_6 -> LR_6 [ label = "S(b)" ];
+	LR_6 -> LR_5 [ label = "S(a)" ];
+	LR_7 -> LR_8 [ label = "S(b)" ];
+	LR_7 -> LR_5 [ label = "S(a)" ];
+	LR_8 -> LR_6 [ label = "S(b)" ];
+	LR_8 -> LR_5 [ label = "S(a)" ];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/grammar.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,71 @@
+digraph L0 {
+	size = "8,8";
+	ordering=out;
+	node [shape = box];
+
+	n0 [label="E"];
+	n1 [label="T"];
+	n2 [label="F"];
+	n3 [label="IDENT : a "];
+	n4 [label="+"];
+	n5 [label="T"];
+	n6 [label="F"];
+	n7 [label="("];
+	n8 [label="E"];
+	n9 [label="T"];
+	n10 [label="F"];
+	n11 [label="IDENT : b "];
+	n12 [label="*"];
+	n13 [label="F"];
+	n14 [label="IDENT : c "];
+	n15 [label=")"];
+	n16 [label="*"];
+	n17 [label="F"];
+	n18 [label="("];
+	n19 [label="E"];
+	n20 [label="T"];
+	n21 [label="F"];
+	n22 [label="IDENT : d "];
+	n23 [label="*"];
+	n24 [label="F"];
+	n25 [label="IDENT : e "];
+	n26 [label="+"];
+	n27 [label="T"];
+	n28 [label="F"];
+	n29 [label="("];
+	n30 [label="E"];
+	n31 [label="T"];
+	n32 [label="F"];
+	n33 [label="IDENT : a "];
+	n34 [label="*"];
+	n35 [label="F"];
+	n36 [label="IDENT : b "];
+	n37 [label=")"];
+	n38 [label=")"];
+	n39 [label="+"];
+	n40 [label="T"];
+	n41 [label="F"];
+	n42 [label="IDENT : q "];
+	n0 ->	{ n1 n4 n5 n39 n40 };
+	n1 ->	n2 ;
+	n2 ->	n3 ;
+	n5 ->	{ n6 n16 n17 };
+	n6 ->	{ n7 n8 n15 };
+	n8 ->	n9 ;
+	n9 ->	{ n10 n12 n13 };
+	n10 ->	n11 ;
+	n13 ->	n14 ;
+	n17 ->	{ n18 n19 n38 };
+	n19 ->	{ n20 n26 n27 };
+	n20 ->	{ n21 n23 n24 };
+	n21 ->	n22 ;
+	n24 ->	n25 ;
+	n27 ->	n28 ;
+	n28 ->	{ n29 n30 n37 };
+	n30 ->	n31 ;
+	n31 ->	{ n32 n34 n35 };
+	n32 ->	n33 ;
+	n35 ->	n36 ;
+	n40 ->	n41 ;
+	n41 ->	n42 ;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/hashtable.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+digraph G {
+	nodesep=.05;
+	rankdir=LR;
+	node [shape=record,width=.1,height=.1];
+
+	node0 [label = "<f0> |<f1> |<f2> |<f3> |<f4> |<f5> |<f6> | ",height=2.0];
+	node [width = 1.5];
+	node1 [label = "{<n> n14 | 719 |<p> }"];
+	node2 [label = "{<n> a1  | 805 |<p> }"];
+	node3 [label = "{<n> i9  | 718 |<p> }"];
+	node4 [label = "{<n> e5  | 989 |<p> }"];
+	node5 [label = "{<n> t20 | 959 |<p> }"] ;
+	node6 [label = "{<n> o15 | 794 |<p> }"] ;
+	node7 [label = "{<n> s19 | 659 |<p> }"] ;
+
+	node0:f0 -> node1:n;
+	node0:f1 -> node2:n;
+	node0:f2 -> node3:n;
+	node0:f5 -> node4:n;
+	node0:f6 -> node5:n;
+	node2:p -> node6:n;
+	node4:p -> node7:n;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/honda-tokoro.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+digraph "Honda-Tokoro" {
+rankdir="LR" ranksep="0.2" edge[labelfontsize="8" fontsize="8" labeldistance="0.8" arrowsize="0.9" labelangle="-30" dir="none"] nodesep="0.2" node[width="0" height="0" fontsize="10"]
+
+/*Net net00*/
+
+n000 [label="z"]
+n001->n000 [headlabel=":s:" arrowhead="invdot"]
+n001 [label="m"]
+n002->n001 [samehead="m002" headlabel=":r:" samearrowhead="1" arrowhead="invdot" arrowtail="inv"]
+n002 [label="p1"]
+n003->n002 [headlabel=":s:" arrowhead="dot"]
+n003 [label="b"]
+n004->n003 
+n004 [label="x1"]
+n022->n004 [weight="0" headlabel=":s/r:" fontsize="8" arrowhead="invdot"]
+n003->n002 [samehead="m000" fontsize="8" samearrowhead="1" arrowtail="inv"]
+n005->n002 [samehead="m000" headlabel=":u:" fontsize="8" samearrowhead="1" arrowhead="dot" arrowtail="inv"]
+n005->n001 [samehead="m002" samearrowhead="1"]
+n005 [label="b"]
+n006->n005 [arrowtail="inv"]
+n006 [label="p2"]
+n007->n006 [headlabel=":s:" arrowhead="dot"]
+n007 [label="b"]
+n008->n007 
+n008 [label="x2"]
+n022->n008 [weight="0" headlabel=":s/r:" fontsize="8" arrowhead="invdot"]
+n007->n006 [samehead="m001" headlabel=":u:" fontsize="8" samearrowhead="1" arrowhead="dot" arrowtail="inv"]
+n009->n006 [samehead="m001" samearrowhead="1" arrowtail="inv"]
+n009 [label="b2"]
+n022->n009 [fontsize="8"]
+n022->n009 [fontsize="8"]
+n010->n006 [samehead="m001" samearrowhead="1" arrowtail="inv"]
+n010 [label="b2"]
+n022->n010 [fontsize="8"]
+n022->n010 [fontsize="8"]
+n011->n000 [headlabel=":r:" arrowhead="invdot" arrowtail="inv"]
+n011 [label="n"]
+n012->n011 [samehead="m005" headlabel=":s:" samearrowhead="1" arrowhead="dot"]
+n012 [label="b"]
+n013->n012 
+n013 [label="c1"]
+n014->n013 [headlabel=":r:" arrowhead="invdot"]
+n014 [label="b"]
+n015->n014 [arrowtail="inv"]
+n015 [label="y1"]
+n023->n015 [weight="0" headlabel=":s/r:" fontsize="8" arrowhead="dot"]
+n016->n015 [samehead="m003" headlabel=":u:" fontsize="8" samearrowhead="1" arrowhead="dot" arrowtail="inv"]
+n018->n015 [samehead="m003" fontsize="8" samearrowhead="1" arrowtail="inv"]
+n014->n011 [samehead="m006" headlabel=":u:" fontsize="8" samearrowhead="1" arrowhead="dot" arrowtail="inv"]
+n012->n011 [samehead="m006" fontsize="8" samearrowhead="1" arrowtail="inv"]
+n016->n011 [samehead="m005" samearrowhead="1"]
+n016 [label="b"]
+n017->n016 
+n017 [label="c2"]
+n018->n017 [headlabel=":r:" arrowhead="invdot"]
+n018 [label="b"]
+n019->n018 [arrowtail="inv"]
+n019 [label="y2"]
+n023->n019 [weight="0" headlabel=":s/r:" fontsize="8" arrowhead="dot"]
+n020->n019 [samehead="m004" headlabel=":u:" samearrowhead="1" arrowhead="dot" arrowtail="inv"]
+n020 [label="b2"]
+n023->n020 [fontsize="8"]
+n023->n020 [fontsize="8"]
+n021->n019 [samehead="m004" samearrowhead="1" arrowtail="inv"]
+n021 [label="b2"]
+n023->n021 [fontsize="8"]
+n023->n021 [fontsize="8"]
+n022 [width="0.5" label="[P]" shape="box" style="dashed" height="0.35"]
+n023 [width="0.5" label="[Q]" shape="box" style="dashed" height="0.35"]
+{/*L=x1*/rank=same n004 n015}
+{/*L=p1*/rank=same n002 n013}
+{/*L=b*/rank=same n009 n010 n020 n021}
+{/*L=x2*/rank=same n008 n019}
+{/*L=p2*/rank=same n006 n017}
+{/*L=m*/rank=same n001 n011}
+}
Binary file toolboxes/graph_visualisation/share/graphviz/graphs/directed/jcctree.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/jcctree.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,44 @@
+digraph "tree" {
+// The problem disappeared when I removed the "ELEM3 -> ID5;" line!
+//size="4,5";
+ordering=out;
+node [shape=plaintext];
+SPEC -> DEF2;
+SPEC -> DEF1;
+DEF1 -> ID1;
+DEF1 -> SET1;
+DEF1 -> SC1;
+DEF2 -> ID2;
+DEF2 -> SET2;
+DEF2 -> SC2;
+SET1 -> OPEN1;
+SET1 -> ELEM1;
+SET1 -> SC3;
+SET1 -> ELEM2;
+SET1 -> CLOSE1;
+ELEM1 -> ID3;
+SET2 -> OPEN2;
+SET2 -> ELEM3;
+SET2 -> CLOSE2;
+ELEM2 -> ID4;
+ELEM3 -> ID5;
+DEF1 [label=DEF];
+DEF2 [label=DEF];
+SET1 [label=SET];
+SC1 [label=";"];
+SC3 [label=";"];
+SET2 [label=SET];
+SC2 [label=";"];
+OPEN1 [label="{"];
+OPEN2 [label="{"];
+CLOSE1 [label="}"];
+CLOSE2 [label="}"];
+ELEM1 [label=ELEMENT];
+ELEM2 [label=ELEMENT];
+ELEM3 [label=ELEMENT];
+ID1 [label=cities];
+ID2 [label=insects];
+ID3 [label=andover];
+ID4 [label=boston];
+ID5 [label=fly];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/jsort.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,150 @@
+digraph prof {
+	size="6,4"; ratio = fill;
+	node [style=filled];
+	start -> main [color="0.002 0.999 0.999"];
+	start -> on_exit [color="0.649 0.701 0.701"];
+	main -> sort [color="0.348 0.839 0.839"];
+	main -> merge [color="0.515 0.762 0.762"];
+	main -> term [color="0.647 0.702 0.702"];
+	main -> signal [color="0.650 0.700 0.700"];
+	main -> sbrk [color="0.650 0.700 0.700"];
+	main -> unlink [color="0.650 0.700 0.700"];
+	main -> newfile [color="0.650 0.700 0.700"];
+	main -> fclose [color="0.650 0.700 0.700"];
+	main -> close [color="0.650 0.700 0.700"];
+	main -> brk [color="0.650 0.700 0.700"];
+	main -> setbuf [color="0.650 0.700 0.700"];
+	main -> copyproto [color="0.650 0.700 0.700"];
+	main -> initree [color="0.650 0.700 0.700"];
+	main -> safeoutfil [color="0.650 0.700 0.700"];
+	main -> getpid [color="0.650 0.700 0.700"];
+	main -> sprintf [color="0.650 0.700 0.700"];
+	main -> creat [color="0.650 0.700 0.700"];
+	main -> rem [color="0.650 0.700 0.700"];
+	main -> oldfile [color="0.650 0.700 0.700"];
+	sort -> msort [color="0.619 0.714 0.714"];
+	sort -> filbuf [color="0.650 0.700 0.700"];
+	sort -> newfile [color="0.650 0.700 0.700"];
+	sort -> fclose [color="0.650 0.700 0.700"];
+	sort -> setbuf [color="0.650 0.700 0.700"];
+	sort -> setfil [color="0.650 0.700 0.700"];
+	msort -> qsort [color="0.650 0.700 0.700"];
+	msort -> insert [color="0.650 0.700 0.700"];
+	msort -> wline [color="0.650 0.700 0.700"];
+	msort -> div [color="0.650 0.700 0.700"];
+	msort -> cmpsave [color="0.650 0.700 0.700"];
+	merge -> insert [color="0.650 0.700 0.700"];
+	merge -> rline [color="0.650 0.700 0.700"];
+	merge -> wline [color="0.650 0.700 0.700"];
+	merge -> unlink [color="0.650 0.700 0.700"];
+	merge -> fopen [color="0.650 0.700 0.700"];
+	merge -> fclose [color="0.650 0.700 0.700"];
+	merge -> setfil [color="0.650 0.700 0.700"];
+	merge -> mul [color="0.650 0.700 0.700"];
+	merge -> setbuf [color="0.650 0.700 0.700"];
+	merge -> cmpsave [color="0.650 0.700 0.700"];
+	insert -> cmpa [color="0.650 0.700 0.700"];
+	wline -> flsbuf [color="0.649 0.700 0.700"];
+	qsort -> cmpa [color="0.650 0.700 0.700"];
+	rline -> filbuf [color="0.649 0.700 0.700"];
+	xflsbuf -> write [color="0.650 0.700 0.700"];
+	flsbuf -> xflsbuf [color="0.649 0.700 0.700"];
+	filbuf -> read [color="0.650 0.700 0.700"];
+	term -> unlink [color="0.650 0.700 0.700"];
+	term -> signal [color="0.650 0.700 0.700"];
+	term -> setfil [color="0.650 0.700 0.700"];
+	term -> exit [color="0.650 0.700 0.700"];
+	endopen -> open [color="0.650 0.700 0.700"];
+	fopen -> endopen [color="0.639 0.705 0.705"];
+	fopen -> findiop [color="0.650 0.700 0.700"];
+	newfile -> fopen [color="0.634 0.707 0.707"];
+	newfile -> setfil [color="0.650 0.700 0.700"];
+	fclose -> fflush [color="0.642 0.704 0.704"];
+	fclose -> close [color="0.650 0.700 0.700"];
+	fflush -> xflsbuf [color="0.635 0.707 0.707"];
+	malloc -> morecore [color="0.325 0.850 0.850"];
+	malloc -> demote [color="0.650 0.700 0.700"];
+	morecore -> sbrk [color="0.650 0.700 0.700"];
+	morecore -> getfreehdr [color="0.650 0.700 0.700"];
+	morecore -> free [color="0.650 0.700 0.700"];
+	morecore -> getpagesize [color="0.650 0.700 0.700"];
+	morecore -> putfreehdr [color="0.650 0.700 0.700"];
+	morecore -> udiv [color="0.650 0.700 0.700"];
+	morecore -> umul [color="0.650 0.700 0.700"];
+	on_exit -> malloc [color="0.325 0.850 0.850"];
+	signal -> sigvec [color="0.650 0.700 0.700"];
+	moncontrol -> profil [color="0.650 0.700 0.700"];
+	getfreehdr -> sbrk [color="0.650 0.700 0.700"];
+	free -> insert [color="0.650 0.700 0.700"];
+	insert -> getfreehdr [color="0.650 0.700 0.700"];
+	setfil -> div [color="0.650 0.700 0.700"];
+	setfil -> rem [color="0.650 0.700 0.700"];
+	sigvec -> sigblock [color="0.650 0.700 0.700"];
+	sigvec -> sigsetmask [color="0.650 0.700 0.700"];
+	doprnt -> urem [color="0.650 0.700 0.700"];
+	doprnt -> udiv [color="0.650 0.700 0.700"];
+	doprnt -> strlen [color="0.650 0.700 0.700"];
+	doprnt -> localeconv [color="0.650 0.700 0.700"];
+	sprintf -> doprnt [color="0.650 0.700 0.700"];
+cmpa [color="0.000 1.000 1.000"];
+wline [color="0.201 0.753 1.000"];
+insert [color="0.305 0.625 1.000"];
+rline [color="0.355 0.563 1.000"];
+sort [color="0.408 0.498 1.000"];
+qsort [color="0.449 0.447 1.000"];
+write [color="0.499 0.386 1.000"];
+read [color="0.578 0.289 1.000"];
+msort [color="0.590 0.273 1.000"];
+merge [color="0.603 0.258 1.000"];
+unlink [color="0.628 0.227 1.000"];
+filbuf [color="0.641 0.212 1.000"];
+open [color="0.641 0.212 1.000"];
+sbrk [color="0.647 0.204 1.000"];
+signal [color="0.647 0.204 1.000"];
+moncontrol [color="0.647 0.204 1.000"];
+xflsbuf [color="0.650 0.200 1.000"];
+flsbuf [color="0.650 0.200 1.000"];
+div [color="0.650 0.200 1.000"];
+cmpsave [color="0.650 0.200 1.000"];
+rem [color="0.650 0.200 1.000"];
+setfil [color="0.650 0.200 1.000"];
+close [color="0.650 0.200 1.000"];
+fclose [color="0.650 0.200 1.000"];
+fflush [color="0.650 0.200 1.000"];
+setbuf [color="0.650 0.200 1.000"];
+endopen [color="0.650 0.200 1.000"];
+findiop [color="0.650 0.200 1.000"];
+fopen [color="0.650 0.200 1.000"];
+mul [color="0.650 0.200 1.000"];
+newfile [color="0.650 0.200 1.000"];
+sigblock [color="0.650 0.200 1.000"];
+sigsetmask [color="0.650 0.200 1.000"];
+sigvec [color="0.650 0.200 1.000"];
+udiv [color="0.650 0.200 1.000"];
+urem [color="0.650 0.200 1.000"];
+brk [color="0.650 0.200 1.000"];
+getfreehdr [color="0.650 0.200 1.000"];
+strlen [color="0.650 0.200 1.000"];
+umul [color="0.650 0.200 1.000"];
+doprnt [color="0.650 0.200 1.000"];
+copyproto [color="0.650 0.200 1.000"];
+creat [color="0.650 0.200 1.000"];
+demote [color="0.650 0.200 1.000"];
+exit [color="0.650 0.200 1.000"];
+free [color="0.650 0.200 1.000"];
+getpagesize [color="0.650 0.200 1.000"];
+getpid [color="0.650 0.200 1.000"];
+initree [color="0.650 0.200 1.000"];
+insert [color="0.650 0.200 1.000"];
+localeconv [color="0.650 0.200 1.000"];
+main [color="0.650 0.200 1.000"];
+malloc [color="0.650 0.200 1.000"];
+morecore [color="0.650 0.200 1.000"];
+oldfile [color="0.650 0.200 1.000"];
+on_exit [color="0.650 0.200 1.000"];
+profil [color="0.650 0.200 1.000"];
+putfreehdr [color="0.650 0.200 1.000"];
+safeoutfil [color="0.650 0.200 1.000"];
+sprintf [color="0.650 0.200 1.000"];
+term [color="0.650 0.200 1.000"];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/ldbxtried.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,416 @@
+digraph g {
+graph [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+node [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+shape = "box"
+color = "black"
+width = "0.5"
+style = "filled"
+];
+edge [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"n0" [
+label = "18519\n?"
+color = "lightblue"
+];
+"n1" [
+label = "4836"
+shape = "ellipse"
+color = "maroon1"
+];
+"n2" [
+label = "ttyqa"
+shape = "ellipse"
+color = "maroon1"
+];
+"n448" [
+label = "21079\nlefty"
+color = "lightblue"
+];
+"n449" [
+label = "tried.lefty"
+shape = "ellipse"
+color = "maroon1"
+];
+"n454" [
+fontsize = "7"
+label = "bunting\n6000"
+shape = "doublecircle"
+color = "green"
+];
+"n460" [
+label = ""
+shape = "doublecircle"
+color = "yellow"
+];
+"n461" [
+label = ""
+shape = "doublecircle"
+color = "yellow"
+];
+"n462" [
+label = "21084\ntried"
+color = "lightblue"
+];
+"n464" [
+label = "21086\nldbx"
+color = "lightblue"
+];
+"n466" [
+label = "ldbx"
+shape = "ellipse"
+color = "maroon1"
+];
+"n468" [
+label = "21087\nlefty"
+color = "lightblue"
+];
+"n469" [
+label = "sh21086.1"
+shape = "ellipse"
+color = "maroon1"
+];
+"n474" [
+fontsize = "7"
+label = "bunting\n6000"
+shape = "doublecircle"
+color = "green"
+];
+"n479" [
+label = "ldbx.lefty"
+shape = "ellipse"
+color = "maroon1"
+];
+"n482" [
+label = ""
+shape = "doublecircle"
+color = "yellow"
+];
+"n483" [
+label = ""
+shape = "doublecircle"
+color = "yellow"
+];
+"n484" [
+label = "21088\ndot"
+color = "lightblue"
+];
+"n486" [
+label = ""
+shape = "doublecircle"
+color = "yellow"
+];
+"n487" [
+label = ""
+shape = "doublecircle"
+color = "yellow"
+];
+"n488" [
+label = "21089\nxterm"
+color = "lightblue"
+];
+"n496" [
+fontsize = "7"
+label = "bunting\n6000"
+shape = "doublecircle"
+color = "green"
+];
+"n500" [
+label = "ptyq2"
+shape = "ellipse"
+color = "maroon1"
+];
+"n503" [
+label = "21090\nldbxmp"
+color = "lightblue"
+];
+"n505" [
+label = "ttyq2"
+shape = "ellipse"
+color = "maroon1"
+];
+"n512" [
+label = "ptyq5"
+shape = "ellipse"
+color = "maroon1"
+];
+"n513" [
+label = "ttyq5"
+shape = "ellipse"
+color = "maroon1"
+];
+"n514" [
+label = "21091\ndbx"
+color = "lightblue"
+];
+"n518" [
+label = "tty"
+shape = "ellipse"
+color = "maroon1"
+];
+"n526" [
+label = "delaunay.c"
+shape = "ellipse"
+color = "maroon1"
+];
+subgraph "cluster0" {
+graph [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+label = "toucan"
+color = "black"
+];
+node [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+shape = "box"
+color = "black"
+width = "0.5"
+style = "filled"
+];
+edge [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"n0"
+"n468"
+"n486"
+"n460"
+"n487"
+"n514"
+"n461"
+"n488"
+"n462"
+"n464"
+"n482"
+"n483"
+"n448"
+"n484"
+"n503"
+}
+"n0" -> "n1" [
+dir = "both"
+];
+"n0" -> "n2" [
+dir = "both"
+];
+"n0" -> "n2" [
+dir = "both"
+];
+"n0" -> "n2" [
+dir = "both"
+];
+"n0" -> "n448" [
+style = "dotted"
+];
+"n448" -> "n2" [
+dir = "both"
+];
+"n448" -> "n2" [
+dir = "both"
+];
+"n448" -> "n2" [
+dir = "both"
+];
+"n448" -> "n449" [
+dir = "back"
+];
+"n448" -> "n454" [
+dir = "both"
+];
+"n448" -> "n460" [
+dir = "back"
+];
+"n448" -> "n461" [
+dir = "forward"
+];
+"n448" -> "n462" [
+style = "dotted"
+];
+"n462" -> "n2" [
+dir = "both"
+];
+"n462" -> "n2" [
+dir = "both"
+];
+"n462" -> "n2" [
+dir = "both"
+];
+"n462" -> "n449" [
+dir = "back"
+];
+"n462" -> "n460" [
+dir = "forward"
+];
+"n462" -> "n461" [
+dir = "back"
+];
+"n462" -> "n460" [
+dir = "forward"
+];
+"n462" -> "n461" [
+dir = "back"
+];
+"n0" -> "n464" [
+style = "dotted"
+];
+"n464" -> "n2" [
+dir = "both"
+];
+"n464" -> "n2" [
+dir = "both"
+];
+"n464" -> "n2" [
+dir = "both"
+];
+"n464" -> "n466" [
+dir = "back"
+];
+"n464" -> "n468" [
+style = "dotted"
+];
+"n468" -> "n2" [
+dir = "both"
+];
+"n468" -> "n2" [
+dir = "both"
+];
+"n468" -> "n469" [
+dir = "back"
+];
+"n468" -> "n474" [
+dir = "both"
+];
+"n468" -> "n479" [
+dir = "back"
+];
+"n468" -> "n482" [
+dir = "back"
+];
+"n468" -> "n483" [
+dir = "forward"
+];
+"n468" -> "n484" [
+style = "dotted"
+];
+"n484" -> "n2" [
+dir = "both"
+];
+"n484" -> "n483" [
+dir = "back"
+];
+"n484" -> "n479" [
+dir = "back"
+];
+"n484" -> "n482" [
+dir = "forward"
+];
+"n468" -> "n486" [
+dir = "back"
+];
+"n468" -> "n487" [
+dir = "forward"
+];
+"n468" -> "n488" [
+style = "dotted"
+];
+"n488" -> "n486" [
+dir = "forward"
+];
+"n488" -> "n2" [
+dir = "both"
+];
+"n488" -> "n487" [
+dir = "back"
+];
+"n488" -> "n469" [
+dir = "back"
+];
+"n488" -> "n2" [
+dir = "both"
+];
+"n488" -> "n479" [
+dir = "back"
+];
+"n488" -> "n496" [
+dir = "both"
+];
+"n488" -> "n500" [
+dir = "both"
+];
+"n488" -> "n503" [
+style = "dotted"
+];
+"n503" -> "n479" [
+dir = "back"
+];
+"n503" -> "n486" [
+dir = "forward"
+];
+"n503" -> "n487" [
+dir = "back"
+];
+"n503" -> "n505" [
+dir = "both"
+];
+"n503" -> "n505" [
+dir = "both"
+];
+"n503" -> "n505" [
+dir = "forward"
+];
+"n503" -> "n512" [
+dir = "both"
+];
+"n503" -> "n514" [
+style = "dotted"
+];
+"n514" -> "n487" [
+dir = "back"
+];
+"n514" -> "n486" [
+dir = "forward"
+];
+"n514" -> "n479" [
+dir = "back"
+];
+"n514" -> "n505" [
+dir = "forward"
+];
+"n503" -> "n486" [
+dir = "forward"
+];
+"n514" -> "n518" [
+dir = "back"
+];
+"n514" -> "n513" [
+dir = "both"
+];
+"n514" -> "n513" [
+dir = "both"
+];
+"n514" -> "n518" [
+dir = "back"
+];
+"n514" -> "n526" [
+dir = "back"
+];
+"n503" -> "n487" [
+dir = "back"
+];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/longflat.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,7 @@
+digraph if
+{
+rankdir=LR;
+  {rank=same;b;c;}
+  a->b;
+  c->b[label="long long long"];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/mike.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+digraph mike{
+size = "8,8";
+	a -> A;
+	a -> m;
+	a -> E;
+	t -> O;
+	r -> V;
+	r -> Q;
+	p -> B;
+	m -> R;
+	l -> C;
+	c -> C;
+	W -> X;
+	W -> D;
+	V -> W;
+	T -> U;
+	Q -> T;
+	Q -> H;
+	Q -> A;
+	O -> K;
+	L -> U;
+	K -> L;
+	K -> J;
+	K -> E;
+	J -> I;
+	R -> B;
+	P -> F;
+	H -> R;
+	H -> P;
+	U -> H;
+	G -> U;
+	E -> G;
+	C -> Z;
+	C -> D;
+	S -> D;
+	B -> N;
+	B -> D;
+	B -> S;
+	M -> B;
+	A -> M;
+	N -> Y;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/nhg.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,13 @@
+digraph automata_0 {
+	size ="8.5, 11";
+	node [shape = circle];
+	0 [ style = filled, color=lightgrey ];
+	2 [ shape = doublecircle ];
+	0 -> 2 [ label = "a " ];
+	0 -> 1 [ label = "other " ];
+	1 -> 2 [ label = "a " ];
+	1 -> 1 [ label = "other " ];
+	2 -> 2 [ label = "a " ];
+	2 -> 1 [ label = "other " ];
+	"Machine: a" [ shape = plaintext ];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/oldarrows.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+digraph G {
+  // leave some space for the head/taillabels
+  graph [ranksep=1.5 splines=true overlap=false]
+
+  // to avoid confusion, remember this:
+  // it's spelt tail/head, but it's read start/end
+
+  // emphasize theatrically
+  // show only explicitly given head/tails
+  // put head/tail labels farther from the node
+//  edge [arrowsize=2 dir=none labeldistance=3]
+  edge [dir=none labeldistance=3]
+
+  // not interested in node labels
+  node [shape=circle width=0.5 label=""]
+
+  {
+    edge [samehead=ahead samearrowhead=1]
+    a->Z [arrowtail=none taillabel=none]
+    b->Z [arrowtail=normal taillabel=normal]
+    c->Z [arrowtail=inv taillabel=inv]
+    d->Z [arrowtail=dot taillabel=dot]
+    e->Z [arrowtail=odot taillabel=odot]
+    f->Z [arrowtail=invdot taillabel=invdot]
+    g->Z [arrowtail=invodot taillabel=invodot]
+    h->Z [arrowtail=open taillabel=open]
+    i->Z [arrowtail=halfopen taillabel=halfopen arrowhead=inv headlabel=samehead]
+    j->Z [arrowtail=empty taillabel=empty]
+    k->Z [arrowtail=invempty taillabel=invempty]
+    l->Z [arrowtail=diamond taillabel=diamond]
+    m->Z [arrowtail=odiamond taillabel=odiamond]
+    n->Z [arrowtail=box taillabel=box]
+    o->Z [arrowtail=obox taillabel=obox]
+    p->Z [arrowtail=tee taillabel=tee]
+    q->Z [arrowtail=crow taillabel=crow]
+  }
+  {
+    edge [sametail=atail samearrowtail=1]
+    Z->A [arrowhead=none headlabel=none]
+    Z->B [arrowhead=normal headlabel=normal]
+    Z->C [arrowhead=inv headlabel=inv]
+    Z->D [arrowhead=dot headlabel=dot]
+    Z->E [arrowhead=odot headlabel=odot]
+    Z->F [arrowhead=invdot headlabel=invdot]
+    Z->G [arrowhead=invodot headlabel=invodot]
+    Z->H [arrowhead=open headlabel=open]
+    Z->I [arrowhead=halfopen headlabel=halfopen arrowtail=inv taillabel=sametail]
+    Z->J [arrowhead=empty headlabel=empty]
+    Z->K [arrowhead=invempty headlabel=invempty]
+    Z->L [arrowhead=diamond headlabel=diamond]
+    Z->M [arrowhead=odiamond headlabel=odiamond]
+    Z->N [arrowhead=box headlabel=box]
+    Z->O [arrowhead=obox headlabel=obox]
+    Z->P [arrowhead=tee headlabel=tee]
+    Z->Q [arrowhead=crow headlabel=crow]
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/pgram.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,91 @@
+digraph test {
+
+    size="7,9.5";
+    page="8,10.5";
+    ratio=fill;
+    rankdir=LR;
+
+    { rank=same;
+      node [shape=house];
+      A;C;E;G;I;K;M;O;Q;S;U;W;Y;
+      node [shape=invhouse];
+      B;D;F;H;J;L;N;P;R;T;V;X;Z;
+    }
+
+    { rank=same;
+      node [shape=parallelogram];
+      "Parallelogram" [label="This is a test\nof a multiline\nlabel in an\nparallelogram with approx\nsquare aspect"];
+      "a ----- long thin parallelogram";
+      "xx" [label="m"];
+      "yy" [label="a\nb\nc\nd\ne\nf"];
+      node [shape=octagon];
+      "Octagon" [label="This is a test\nof a multiline\nlabel in an\noctagon with approx\nsquare aspect"];
+      node [shape=parallelogram];
+      "Parallelogram" [label="This is a test\nof a multiline\nlabel in an\nparallelogram with approx\nsquare aspect"];
+      "a ----- long thin parallelogram";
+      "zz" [label="m"];
+      "qq" [label="a\nb\nc\nd\ne\nf"];
+      ordering=out;
+    }
+
+    Parallelogram -> A;
+    Parallelogram -> B;
+    Parallelogram -> C;
+    Parallelogram -> D;
+    Parallelogram -> E;
+    Parallelogram -> F;
+    Parallelogram -> G;
+    Parallelogram -> H;
+    Parallelogram -> I;
+    Parallelogram -> J;
+    Parallelogram -> K;
+    Parallelogram -> L;
+    Parallelogram -> M;
+    Parallelogram -> N;
+    Parallelogram -> O;
+    Parallelogram -> P;
+    Parallelogram -> Q;
+    Parallelogram -> R;
+    Parallelogram -> S;
+    Parallelogram -> T;
+    Parallelogram -> U;
+    Parallelogram -> V;
+    Parallelogram -> W;
+    Parallelogram -> X;
+    Parallelogram -> Y;
+    Parallelogram -> Z;
+
+    { rank=same;
+      node [shape=triangle];
+      a;c;e;g;i;k;m;o;q;s;u;w;y;
+      node [shape=tripleoctagon];
+      b;d;f;h;j;l;n;p;r;t;v;x;z;
+    }
+
+    a -> Parallelogram -> Octagon;
+    b -> Parallelogram -> Octagon;
+    c -> Parallelogram -> Octagon;
+    d -> Parallelogram -> Octagon;
+    e -> Parallelogram -> Octagon;
+    f -> Parallelogram -> Octagon;
+    g -> Parallelogram -> Octagon;
+    h -> Parallelogram -> Octagon;
+    i -> Parallelogram -> Octagon;
+    j -> Parallelogram -> Octagon;
+    k -> Parallelogram -> Octagon;
+    l -> Parallelogram -> Octagon;
+    m -> Parallelogram -> Octagon;
+    n -> Parallelogram -> Octagon;
+    o -> Parallelogram -> Octagon;
+    p -> Parallelogram -> Octagon;
+    q -> Parallelogram -> Octagon;
+    r -> Parallelogram -> Octagon;
+    s -> Parallelogram -> Octagon;
+    t -> Parallelogram -> Octagon;
+    u -> Parallelogram -> Octagon;
+    v -> Parallelogram -> Octagon;
+    w -> Parallelogram -> Octagon;
+    x -> Parallelogram -> Octagon;
+    y -> Parallelogram -> Octagon;
+    z -> Parallelogram -> Octagon;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/pm2way.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,126 @@
+digraph g {
+graph [
+];
+node [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+shape = "box"
+color = "black"
+width = "0.5"
+];
+edge [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"22690" [
+label = "22690\n?"
+pname = "?"
+kind = "proc"
+];
+"22692" [
+label = "22692\ndotty"
+pname = "dotty"
+kind = "proc"
+];
+"116842+2595" [
+label = "116842+2595\n/home/ek/work/sun4/bin/dotty"
+fname = "/home/ek/work/sun4/bin/dotty"
+shape = "ellipse"
+kind = "file"
+];
+"22693" [
+label = "22693\nlefty"
+pname = "lefty"
+kind = "proc"
+];
+"182440-1" [
+label = "182440-1\n182441-1\npipe"
+fontsize = "7"
+fname = "pipe"
+shape = "doublecircle"
+subkind = "pipe"
+kind = "file"
+];
+"182442-1" [
+label = "182442-1\n182443-1\npipe"
+fontsize = "7"
+fname = "pipe"
+shape = "doublecircle"
+subkind = "pipe"
+kind = "file"
+];
+"22694" [
+label = "22694\ndot"
+pname = "dot"
+kind = "proc"
+];
+"4761+2595" [
+label = "4761+2595\n/home/ek/pm2.dot"
+fname = "/home/ek/pm2.dot"
+shape = "ellipse"
+kind = "file"
+];
+"22690" -> "22692" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"22692" -> "116842+2595" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "back"
+color = "black"
+];
+"22692" -> "22693" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"22693" -> "182440-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "back"
+color = "black"
+];
+"22693" -> "182442-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "forward"
+color = "black"
+];
+"22693" -> "22694" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"22694" -> "182440-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "forward"
+color = "black"
+];
+"22694" -> "182442-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "back"
+color = "black"
+];
+"22693" -> "4761+2595" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "back"
+color = "black"
+];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/pmpipe.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,219 @@
+digraph g {
+graph [
+];
+node [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+shape = "box"
+color = "black"
+width = "0.5"
+];
+edge [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"23296" [
+label = "23296\n?"
+pname = "?"
+kind = "proc"
+];
+"182948-1" [
+label = "182948-1\n182949-1\npipe"
+fontsize = "7"
+fname = "pipe"
+shape = "doublecircle"
+subkind = "pipe"
+kind = "file"
+];
+"23310" [
+label = "23310\ncat"
+pname = "cat"
+kind = "proc"
+];
+"182950-1" [
+label = "182950-1\n182951-1\npipe"
+fontsize = "7"
+fname = "pipe"
+shape = "doublecircle"
+subkind = "pipe"
+kind = "file"
+];
+"23311" [
+label = "23311\ncat"
+pname = "cat"
+kind = "proc"
+];
+"182952-1" [
+label = "182952-1\n182953-1\npipe"
+fontsize = "7"
+fname = "pipe"
+shape = "doublecircle"
+subkind = "pipe"
+kind = "file"
+];
+"23312" [
+label = "23312\ncat"
+pname = "cat"
+kind = "proc"
+];
+"182954-1" [
+label = "182954-1\n182955-1\npipe"
+fontsize = "7"
+fname = "pipe"
+shape = "doublecircle"
+subkind = "pipe"
+kind = "file"
+];
+"23313" [
+label = "23313\ncat"
+pname = "cat"
+kind = "proc"
+];
+"79893+2568" [
+label = "79893+2568\n/usr/share/lib/termcap"
+fname = "/usr/share/lib/termcap"
+shape = "ellipse"
+kind = "file"
+];
+"85+2560" [
+label = "85+2560\n?"
+fname = "?"
+shape = "ellipse"
+kind = "file"
+];
+"23314" [
+label = "23314\ncat"
+pname = "cat"
+kind = "proc"
+];
+"4151865284+0" [
+label = "4151865284+0\n/tmp/termcap"
+fname = "/tmp/termcap"
+shape = "ellipse"
+kind = "file"
+];
+"23296" -> "23310" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"23296" -> "23311" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"23311" -> "182948-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "back"
+color = "black"
+];
+"23310" -> "182948-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "forward"
+color = "black"
+];
+"23296" -> "23312" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"23312" -> "182952-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "forward"
+color = "black"
+];
+"23312" -> "182950-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "back"
+color = "black"
+];
+"23296" -> "23313" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"23313" -> "182954-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "forward"
+color = "black"
+];
+"23311" -> "182950-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "forward"
+color = "black"
+];
+"23310" -> "79893+2568" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "back"
+color = "black"
+];
+"23296" -> "85+2560" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "both"
+color = "black"
+];
+"23296" -> "23314" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+color = "black"
+];
+"23314" -> "85+2560" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "both"
+color = "black"
+];
+"23314" -> "182954-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "back"
+color = "black"
+];
+"23296" -> "85+2560" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "both"
+color = "black"
+];
+"23314" -> "4151865284+0" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "forward"
+color = "black"
+];
+"23313" -> "182952-1" [
+fontsize = "14"
+fontname = "Times-Roman"
+fontcolor = "black"
+dir = "back"
+color = "black"
+];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/polypoly.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,162 @@
+digraph polypoly {
+	
+    size="7,9.5";
+    page="8.5,11";
+    ratio=fill;
+    node [shape=polygon];
+
+    { rank=same;
+      node [sides=0];
+      node [peripheries=1];
+      0000 [label="M"];
+      0001 [label="MMMMMMMMMM"];
+      0002 [label="M\nM\nM\nM\nM\nM"];
+      0003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+      node [peripheries=2];
+      0010 [label="M"];
+      0011 [label="MMMMMMMMMM"];
+      0012 [label="M\nM\nM\nM\nM\nM"];
+      0013 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+      node [distortion=-.3];
+      0110 [label="M"];
+      0111 [label="MMMMMMMMMM"];
+      0112 [label="M\nM\nM\nM\nM\nM"];
+      0113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+    }
+    { rank=same;
+      node [sides=3];
+      node [peripheries=1];
+      node [orientation=0];
+      3000 [label="M"];
+      3001 [label="MMMMMMMMMM"];
+      3002 [label="M\nM\nM\nM\nM\nM"];
+      3003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+      node [peripheries=2];
+      node [orientation=60];
+      3110 [label="M"];
+      3111 [label="MMMMMMMMMM"];
+      3112 [label="M\nM\nM\nM\nM\nM"];
+      3113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+    }
+    3000->0000;
+    { rank=same;
+      node [sides=4];
+      node [peripheries=1];
+      node [orientation=0];
+      4000 [label="M"];
+      4001 [label="MMMMMMMMMM"];
+      4002 [label="M\nM\nM\nM\nM\nM"];
+      4003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+      node [peripheries=2];
+      node [orientation=45];
+      4110 [label="M"];
+      4111 [label="MMMMMMMMMM"];
+      4112 [label="M\nM\nM\nM\nM\nM"];
+      4113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+    }
+    4000->3000;
+    { rank=same;
+      node [sides=5];
+      node [peripheries=1];
+      node [orientation=0];
+      5000 [label="M"];
+      5001 [label="MMMMMMMMMM"];
+      5002 [label="M\nM\nM\nM\nM\nM"];
+      5003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+      node [peripheries=2];
+      node [orientation=36];
+      5110 [label="M"];
+      5111 [label="MMMMMMMMMM"];
+      5112 [label="M\nM\nM\nM\nM\nM"];
+      5113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+    }
+    5000->4000;
+    { rank=same;
+      node [sides=6];
+      node [peripheries=1];
+      node [orientation=0];
+      6000 [label="M"];
+      6001 [label="MMMMMMMMMM"];
+      6002 [label="M\nM\nM\nM\nM\nM"];
+      6003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+      node [peripheries=2];
+      node [orientation=30];
+      6110 [label="M"];
+      6111 [label="MMMMMMMMMM"];
+      6112 [label="M\nM\nM\nM\nM\nM"];
+      6113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+    }
+    6000->5000;
+    { rank=same;
+      node [sides=7];
+      node [peripheries=1];
+      node [orientation=0];
+      7000 [label="M"];
+      7001 [label="MMMMMMMMMM"];
+      7002 [label="M\nM\nM\nM\nM\nM"];
+      7003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+      node [peripheries=2];
+      node [orientation=25.7];
+      7110 [label="M"];
+      7111 [label="MMMMMMMMMM"];
+      7112 [label="M\nM\nM\nM\nM\nM"];
+      7113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+    }
+    7000->6000;
+    { rank=same;
+      node [sides=8];
+      node [peripheries=1];
+      node [orientation=0];
+      8000 [label="M"];
+      8001 [label="MMMMMMMMMM"];
+      8002 [label="M\nM\nM\nM\nM\nM"];
+      8003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+      node [peripheries=2];
+      node [orientation=22.5];
+      8110 [label="M"];
+      8111 [label="MMMMMMMMMM"];
+      8112 [label="M\nM\nM\nM\nM\nM"];
+      8113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"];
+    }
+    8000->7000;
+    { rank=same;
+      node [sides=4];
+      node [peripheries=1];
+      node [regular=1];
+      node [distortion=.5];
+      node [orientation=0];
+      9000 [label="M"];
+      node [orientation=45.];
+      9001 [label="M"];
+      node [orientation=90.];
+      9002 [label="M"];
+      node [orientation=135.];
+      9003 [label="M"];
+      node [orientation=180.];
+      9004 [label="M"];
+      node [orientation=225.];
+      9005 [label="M"];
+      node [orientation=270.];
+      9006 [label="M"];
+      node [orientation=315.];
+      9007 [label="M"];
+      node [peripheries=2];
+      node [orientation=0];
+      9010 [label="M"];
+      node [orientation=45.];
+      9011 [label="M"];
+      node [orientation=90.];
+      9012 [label="M"];
+      node [orientation=135.];
+      9013 [label="M"];
+      node [orientation=180.];
+      9014 [label="M"];
+      node [orientation=225.];
+      9015 [label="M"];
+      node [orientation=270.];
+      9016 [label="M"];
+      node [orientation=315.];
+      9017 [label="M"];
+    }
+    9000->8000;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/proc3d.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,443 @@
+digraph g {
+graph [
+fontname=Courier,
+fontsize=24,
+ranksep = 1.0,
+size="10,7.5",
+orientation=land,
+style="setlinewidth(8)"
+page = "8.5,11",
+center=true
+];
+node [
+shape = "box"
+width = "0.5"
+];
+edge [
+];
+subgraph cluster_0 {
+label="gryphon"
+"22342"
+"22343"
+"22346"
+"22347"
+"22351"
+"22344"
+"22345"
+"22348"
+"22350"
+"22357"
+}
+subgraph cluster_1 {
+label=toucan
+"22349"
+"22352"
+"22356"
+"22361"
+"22369"
+"22353"
+"22355"
+"22360"
+"22365"
+"22374"
+}
+subgraph cluster_2 {
+label=parker
+"22354"
+"22359"
+"22375"
+}
+subgraph cluster_3 {
+label=condor
+"22358"
+"22362"
+"22367"
+"22373"
+"22378"
+}
+subgraph cluster_4 {
+label=kite
+"22363"
+"22366"
+"22371"
+"22376"
+"22380"
+}
+subgraph cluster_5 {
+label=coot
+"22368"
+"22372"
+"22377"
+"22379"
+"22381"
+}
+"22316" [
+label = "22316\nksh"
+pname = "ksh"
+kind = "proc"
+];
+"22324" [
+label = "22324\nnmake"
+pname = "nmake"
+kind = "proc"
+];
+"22337" [
+label = "22337\nksh"
+pname = "ksh"
+kind = "proc"
+];
+"22342" [
+label = "22342\nksh"
+pname = "ksh"
+kind = "proc"
+];
+"22343" [
+label = "22343\ngcc"
+pname = "gcc"
+kind = "proc"
+];
+"22344" [
+label = "22344\nksh"
+pname = "ksh"
+kind = "proc"
+];
+"22345" [
+label = "22345\ngcc"
+pname = "gcc"
+kind = "proc"
+];
+"22346" [
+label = "22346\ncpp"
+pname = "cpp"
+kind = "proc"
+];
+"22347" [
+label = "22347\ncc1"
+pname = "cc1"
+kind = "proc"
+];
+"22348" [
+label = "22348\ncpp"
+pname = "cpp"
+kind = "proc"
+];
+"93736-32246" [
+label = "93736-32246\n/home/ek/work/src/lefty/lefty.c"
+fname = "/home/ek/work/src/lefty/lefty.c"
+shape = "ellipse"
+kind = "file"
+];
+"22349" [
+label = "22349\nksh"
+pname = "ksh"
+kind = "proc"
+];
+"22350" [
+label = "22350\ncc1"
+pname = "cc1"
+kind = "proc"
+];
+"93627-32246" [
+label = "93627-32246\n/home/ek/work/src/lefty/gfxview.c"
+fname = "/home/ek/work/src/lefty/gfxview.c"
+shape = "ellipse"
+kind = "file"
+];
+"22351" [
+label = "22351\nas"
+pname = "as"
+kind = "proc"
+];
+"22352" [
+label = "22352\ngcc"
+pname = "gcc"
+kind = "proc"
+];
+"22353" [
+label = "22353\nksh"
+pname = "ksh"
+kind = "proc"
+];
+"22354" [
+label = "22354\nksh"
+pname = "ksh"
+kind = "proc"
+];
+"22355" [
+label = "22355\ngcc"
+pname = "gcc"
+kind = "proc"
+];
+"22356" [
+label = "22356\ncpp"
+pname = "cpp"
+kind = "proc"
+];
+"22357" [
+label = "22357\nas"
+pname = "as"
+kind = "proc"
+];
+"22358" [
+label = "22358\nksh"
+pname = "ksh"
+kind = "proc"
+];
+"22359" [
+label = "22359\ngcc"
+pname = "gcc"
+kind = "proc"
+];
+"22360" [
+label = "22360\ncpp"
+pname = "cpp"
+kind = "proc"
+];
+"22361" [
+label = "22361\ncc1"
+pname = "cc1"
+kind = "proc"
+];
+"93645-32246" [
+label = "93645-32246\n/home/ek/work/src/lefty/txtview.c"
+fname = "/home/ek/work/src/lefty/txtview.c"
+shape = "ellipse"
+kind = "file"
+];
+"22362" [
+label = "22362\ngcc"
+pname = "gcc"
+kind = "proc"
+];
+"22363" [
+label = "22363\nksh"
+pname = "ksh"
+kind = "proc"
+];
+"22365" [
+label = "22365\ncc1"
+pname = "cc1"
+kind = "proc"
+];
+"22366" [
+label = "22366\ngcc"
+pname = "gcc"
+kind = "proc"
+];
+"93638-32246" [
+label = "93638-32246\n/home/ek/work/src/lefty/internal.c"
+fname = "/home/ek/work/src/lefty/internal.c"
+shape = "ellipse"
+kind = "file"
+];
+"22367" [
+label = "22367\ncpp"
+pname = "cpp"
+kind = "proc"
+];
+"22368" [
+label = "22368\nksh"
+pname = "ksh"
+kind = "proc"
+];
+"22369" [
+label = "22369\nas"
+pname = "as"
+kind = "proc"
+];
+"93642-32246" [
+label = "93642-32246\n/home/ek/work/src/lefty/lex.c"
+fname = "/home/ek/work/src/lefty/lex.c"
+shape = "ellipse"
+kind = "file"
+];
+"22371" [
+label = "22371\ncpp"
+pname = "cpp"
+kind = "proc"
+];
+"22372" [
+label = "22372\ngcc"
+pname = "gcc"
+kind = "proc"
+];
+"22373" [
+label = "22373\ncc1"
+pname = "cc1"
+kind = "proc"
+];
+"88860-32246" [
+label = "88860-32246\n/home/ek/dev/src/lefty/stringify.c"
+fname = "/home/ek/dev/src/lefty/stringify.c"
+shape = "ellipse"
+kind = "file"
+];
+"22374" [
+label = "22374\nas"
+pname = "as"
+kind = "proc"
+];
+"22375" [
+label = "22375\nas"
+pname = "as"
+kind = "proc"
+];
+"22376" [
+label = "22376\ncc1"
+pname = "cc1"
+kind = "proc"
+];
+"93626-32246" [
+label = "93626-32246\n/home/ek/work/src/lefty/exec.c"
+fname = "/home/ek/work/src/lefty/exec.c"
+shape = "ellipse"
+kind = "file"
+];
+"22377" [
+label = "22377\ncpp"
+pname = "cpp"
+kind = "proc"
+];
+"22378" [
+label = "22378\nas"
+pname = "as"
+kind = "proc"
+];
+"22379" [
+label = "22379\ncc1"
+pname = "cc1"
+kind = "proc"
+];
+"93643-32246" [
+label = "93643-32246\n/home/ek/work/src/lefty/parse.c"
+fname = "/home/ek/work/src/lefty/parse.c"
+shape = "ellipse"
+kind = "file"
+];
+"22380" [
+label = "22380\nas"
+pname = "as"
+kind = "proc"
+];
+"22381" [
+label = "22381\nas"
+pname = "as"
+kind = "proc"
+];
+"37592-32246" [
+label = "37592-32246\n/home/ek/dev/src/lefty/exec.h"
+fname = "/home/ek/dev/src/lefty/exec.h"
+shape = "ellipse"
+kind = "file"
+];
+"135504-32246" [
+label = "135504-32246\n/home/ek/work/sun4/lefty/display.o"
+fname = "/home/ek/work/sun4/lefty/display.o"
+shape = "ellipse"
+kind = "file"
+];
+"22316" -> "22324" [
+];
+"22324" -> "22337" [
+];
+"22337" -> "22342" [
+];
+"22342" -> "22343" [
+];
+"22337" -> "22344" [
+];
+"22344" -> "22345" [
+];
+"22343" -> "22346" [
+];
+"22343" -> "22347" [
+];
+"22345" -> "22348" [
+];
+"22346" -> "93736-32246" [
+];
+"22337" -> "22349" [
+];
+"22345" -> "22350" [
+];
+"22348" -> "93627-32246" [
+];
+"22343" -> "22351" [
+];
+"22349" -> "22352" [
+];
+"22337" -> "22353" [
+];
+"22337" -> "22354" [
+];
+"22353" -> "22355" [
+];
+"22352" -> "22356" [
+];
+"22345" -> "22357" [
+];
+"22337" -> "22358" [
+];
+"22354" -> "22359" [
+];
+"22355" -> "22360" [
+];
+"22352" -> "22361" [
+];
+"22356" -> "93645-32246" [
+];
+"22358" -> "22362" [
+];
+"22337" -> "22363" [
+];
+"22355" -> "22365" [
+];
+"22363" -> "22366" [
+];
+"22360" -> "93638-32246" [
+];
+"22362" -> "22367" [
+];
+"22337" -> "22368" [
+];
+"22352" -> "22369" [
+];
+"22324" -> "93642-32246" [
+];
+"22366" -> "22371" [
+];
+"22368" -> "22372" [
+];
+"22362" -> "22373" [
+];
+"22367" -> "88860-32246" [
+];
+"22355" -> "22374" [
+];
+"22359" -> "22375" [
+];
+"22366" -> "22376" [
+];
+"22371" -> "93626-32246" [
+];
+"22372" -> "22377" [
+];
+"22362" -> "22378" [
+];
+"22372" -> "22379" [
+];
+"22377" -> "93643-32246" [
+];
+"22366" -> "22380" [
+];
+"22372" -> "22381" [
+];
+"22371" -> "37592-32246" [
+];
+"22375" -> "135504-32246" [
+];
+
+/* hack to increase node separation */
+{	rank = same; "22337" -> "93642-32246" [style=invis,minlen=10]; }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/psfonttest.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+digraph G {
+rankdir=LR
+nodesep=0
+node [shape=none margin=0]
+edge [color=white]
+"AvantGarde-Book" [fontname="AvantGarde-Book"]
+"AvantGarde-Demi" [fontname="AvantGarde-Demi"]
+"AvantGarde-BookOblique" [fontname="AvantGarde-BookOblique"]
+"AvantGarde-DemiOblique" [fontname="AvantGarde-DemiOblique"]
+
+"AvantGarde-Book" -> "AvantGarde-Demi" ->  "AvantGarde-BookOblique" -> "AvantGarde-DemiOblique"
+
+"Bookman-Light" [fontname="Bookman-Light"]
+"Bookman-Demi" [fontname="Bookman-Demi"]
+"Bookman-LightItalic" [fontname="Bookman-LightItalic"]
+"Bookman-DemiItalic" [fontname="Bookman-DemiItalic"]
+
+"Bookman-Light" -> "Bookman-Demi" -> "Bookman-LightItalic" -> "Bookman-DemiItalic" 
+
+"Courier" [fontname="Courier"]
+"Courier-Bold" [fontname="Courier-Bold"]
+"Courier-Oblique" [fontname="Courier-Oblique"]
+"Courier-BoldOblique" [fontname="Courier-BoldOblique"]
+
+"Courier" -> "Courier-Bold" -> "Courier-Oblique" -> "Courier-BoldOblique"
+
+"Helvetica" [fontname="Helvetica"]
+"Helvetica-Bold" [fontname="Helvetica-Bold"]
+"Helvetica-Oblique" [fontname="Helvetica-Oblique"]
+"Helvetica-BoldOblique" [fontname="Helvetica-BoldOblique"]
+
+"Helvetica-Narrow" [fontname="Helvetica-Narrow"]
+"Helvetica-Narrow-Bold" [fontname="Helvetica-Narrow-Bold"]
+"Helvetica-Narrow-Oblique" [fontname="Helvetica-Narrow-Oblique"]
+"Helvetica-Narrow-BoldOblique" [fontname="Helvetica-Narrow-BoldOblique"]
+
+"Helvetica" -> "Helvetica-Bold" -> "Helvetica-Oblique" -> "Helvetica-BoldOblique"
+
+"Helvetica-Narrow" -> "Helvetica-Narrow-Bold" -> "Helvetica-Narrow-Oblique" -> "Helvetica-Narrow-BoldOblique"
+
+"NewCenturySchlbk-Roman" [fontname="NewCenturySchlbk-Roman"]
+"NewCenturySchlbk-Bold" [fontname="NewCenturySchlbk-Bold"]
+"NewCenturySchlbk-Italic" [fontname="NewCenturySchlbk-Italic"]
+"NewCenturySchlbk-BoldItalic" [fontname="NewCenturySchlbk-BoldItalic"]
+
+"NewCenturySchlbk-Roman" -> "NewCenturySchlbk-Bold" -> "NewCenturySchlbk-Italic" -> "NewCenturySchlbk-BoldItalic" 
+
+"Palatino-Roman" [fontname="Palatino-Roman"]
+"Palatino-Bold" [fontname="Palatino-Bold"]
+"Palatino-Italic" [fontname="Palatino-Italic"]
+"Palatino-BoldItalic" [fontname="Palatino-BoldItalic"]
+
+"Palatino-Roman" -> "Palatino-Bold" -> "Palatino-Italic" -> "Palatino-BoldItalic"
+
+"Times-Roman" [fontname="Times-Roman"]
+"Times-Bold" [fontname="Times-Bold"]
+"Times-Italic" [fontname="Times-Italic"]
+"Times-BoldItalic" [fontname="Times-BoldItalic"]
+
+"Times-Roman" -> "Times-Bold" -> "Times-Italic" -> "Times-BoldItalic"
+
+"ZapfChancery-MediumItalic" [fontname="ZapfChancery-MediumItalic"]
+"ZapfDingbats" [fontname="ZapfDingbats"]
+"Symbol" [fontname="Symbol"]
+
+"Symbol" -> "ZapfDingbats" -> "ZapfChancery-MediumItalic"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/record2.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,6 @@
+digraph G {
+    node [shape=record];
+    a [label = "<f0> foo | x | <f1> bar"];
+    b [label = "a | { <f0> foo | x | <f1> bar } | b"];
+    a:f0 -> b:f1 
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/records.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,17 @@
+digraph G {
+	rankdir=LR;
+	node [shape=record];
+	a [ label ="<bala> Graphs can\lbe fun\l|<f1> mid|<f2> right\r"];
+	b [ label ="<left>   |<mid> b |   " ];
+	c [ label ="<p1>   | c |<p2>   " ];
+	x [ label ="<p1>   | x |<p2>   " ];
+	y [ label ="<p1>   | y |<p2>   " ];
+	z [ label ="   | z |<p2>   " ];
+	a:bala -> b:left;
+	a:f1 -> d;
+	a:f2 -> y:"p1";
+	c:"p1" -> d;
+	b:mid -> x:"p1";
+	c:"p2" -> y:"p2";
+	b:left -> z:"p2";
+}
Binary file toolboxes/graph_visualisation/share/graphviz/graphs/directed/records.jpg has changed
Binary file toolboxes/graph_visualisation/share/graphviz/graphs/directed/records.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/rowe.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,72 @@
+digraph rowe {
+	node [shape  = box];
+	size = "6,6";
+	1 -> 2;
+	1 -> 10;
+	10 -> 14;
+	10 -> 12;
+	10 -> 13;
+	10 -> 11;
+	2 -> 18;
+	2 -> 17;
+	2 -> 16;
+	2 -> 3;
+	11 -> 4;
+	16 -> 4;
+	3 -> 4;
+	4 -> 5;
+	13 -> 19;
+	17 -> 19;
+	5 -> 23;
+	5 -> 35;
+	5 -> 6;
+	37 -> 39;
+	37 -> 41;
+	37 -> 40;
+	37 -> 38;
+	19 -> 20;
+	19 -> 28;
+	19 -> 21;
+	12 -> 29;
+	18 -> 29;
+	41 -> 29;
+	28 -> 29;
+	29 -> 30;
+	30 -> 31;
+	30 -> 33;
+	31 -> 32;
+	21 -> 22;
+	32 -> 23;
+	22 -> 23;
+	6 -> 7;
+	23 -> 24;
+	7 -> 8;
+	24 -> 25;
+	24 -> 27;
+	35 -> 43;
+	35 -> 36;
+	8 -> 9;
+	14 -> 15;
+	39 -> 15;
+	20 -> 15;
+	33 -> 34;
+	43 -> 40;
+	43 -> 38;
+	25 -> 26;
+	9 -> 42;
+	10 -> 1;
+	15 -> 1;
+	23 -> 1;
+	31 -> 1;
+	2 -> 1;
+	25 -> 1;
+	9 -> 1;
+	38 -> 4;
+	26 -> 4;
+	42 -> 4;
+	40 -> 19;
+	36 -> 19;
+	34 -> 29;
+	33 -> 30;
+	27 -> 24;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/russian.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,9 @@
+   digraph G {
+Контрагенты -> БанковÑкиеСчета;
+Организации -> БанковÑкиеСчета;
+ВопроÑыДлÑÐÐ½ÐºÐµÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ -> ВариантыОтветовОпроÑов;
+Контрагенты -> ДоговорыВзаимораÑчетов;
+Ðоменклатура -> ЕдиницыИзмерениÑ;
+ÐоменклатурныеГруппы -> ЕдиницыИзмерениÑ;
+СвойÑтваОбектов -> ЗначениÑСвойÑтвОбектов;
+}
\ No newline at end of file
Binary file toolboxes/graph_visualisation/share/graphviz/graphs/directed/russian.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/sdh.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,284 @@
+digraph G {
+	graph [bgcolor=black];	/* set background */
+	edge [color=white];
+	graph[page="8.5,11",size="7.5,7",ratio=fill,center=1];
+	node[style=filled,label=""];
+	subgraph ds3CTP {
+		rank = same;
+		node[shape=box,color=green];
+		ds3CTP_1_1;
+		ds3CTP_1_2;
+		ds3CTP_5_1;
+		ds3CTP_5_2;
+	}
+	subgraph t3TTP {
+		rank = same;
+		node[shape=invtriangle,color=red];
+		t3TTP_1_1;
+		t3TTP_5_2;
+	}
+	subgraph vc3TTP {
+		rank = same;
+		node[shape=invtriangle,color=red];
+		vc3TTP_1_2;
+		vc3TTP_5_1;
+	}
+	subgraph fabric {
+		rank = same;
+		node[shape=hexagon,color=blue];
+		fabric_1_2;
+		fabric_4_1;
+		fabric_5_1;
+	}
+	subgraph xp {
+		rank = same;
+		node[shape=diamond,color=blue];
+		xp_1_2;
+		xp_4_1;
+		xp_5_1;
+	}
+	subgraph au3CTP {
+		rank = same;
+		node[shape=box,color=green];
+		au3CTP_1_2;
+		au3CTP_4_1;
+		au3CTP_4_2;
+		au3CTP_5_1;
+	}
+	subgraph aug {
+		rank = same;
+		node[shape=invtrapezium,color=pink];
+		aug_1_2;
+		aug_4_1;
+		aug_4_2;
+		aug_5_1;
+	}
+	subgraph protectionTTP {
+		rank = same;
+		node[shape=invtriangle,color=red];
+		prTTP_1_2;
+		prTTP_4_1;
+		prTTP_4_2;
+		prTTP_5_1;
+	}
+	subgraph protectionGroup {
+		rank = same;
+		node[shape=hexagon,color=blue];
+		pg_1_2;
+		pg_4_1;
+		pg_4_2;
+		pg_5_1;
+	}
+	subgraph protectionUnit {
+		rank = same;
+		node[shape=diamond,color=blue];
+		pu_1_2;
+		pu_4_1;
+		pu_4_2;
+		pu_5_1;
+	}
+	subgraph protectionCTP {
+		node[shape=box,color=green];
+		prCTP_1_2;
+		prCTP_4_1;
+		prCTP_4_2;
+		prCTP_5_1;
+	}
+	subgraph msTTP {
+		rank = same;
+		node[shape=invtriangle,color=red];
+		msTTP_1_2;
+		msTTP_4_1;
+		msTTP_4_2;
+		msTTP_5_1;
+	}
+	subgraph msCTP {
+		rank = same;
+		node[shape=box,color=green];
+		msCTP_1_2;
+		msCTP_3_1;
+		msCTP_3_2;
+		msCTP_4_1;
+		msCTP_4_2;
+		msCTP_5_1;
+	}
+	subgraph rsTTP {
+		rank = same;
+		node[shape=invtriangle,color=red];
+		rsTTP_1_2;
+		rsTTP_3_1;
+		rsTTP_3_2;
+		rsTTP_4_1;
+		rsTTP_4_2;
+		rsTTP_5_1;
+	}
+	subgraph rsCTP {
+		rank = same;
+		node[shape=box,color=green];
+		rsCTP_1_2;
+		rsCTP_2_1;
+		rsCTP_2_2;
+		rsCTP_3_1;
+		rsCTP_3_2;
+		rsCTP_4_1;
+		rsCTP_4_2;
+		rsCTP_5_1;
+	}
+	subgraph spiTTP {
+		rank = same;
+		node[shape=invtriangle,color=red];
+		spiTTP_1_2;
+		spiTTP_2_1;
+		spiTTP_2_2;
+		spiTTP_3_1;
+		spiTTP_3_2;
+		spiTTP_4_1;
+		spiTTP_4_2;
+		spiTTP_5_1;
+	}
+	subgraph me {
+		rank = same;
+		node[shape=box,peripheries=2];
+		me_1;
+		me_2;
+		me_3;
+		me_4;
+		me_5;
+	}
+	subgraph client_server {
+		edge[style=dotted,dir=none,weight=100];
+		ds3CTP_1_1->t3TTP_1_1;
+		ds3CTP_1_2->vc3TTP_1_2;
+		au3CTP_1_2->aug_1_2->prTTP_1_2;
+		prCTP_1_2->msTTP_1_2;
+		msCTP_1_2->rsTTP_1_2;
+		rsCTP_1_2->spiTTP_1_2;
+		rsCTP_2_1->spiTTP_2_1;
+		rsCTP_2_2->spiTTP_2_2;
+		msCTP_3_1->rsTTP_3_1;
+		rsCTP_3_1->spiTTP_3_1;
+		msCTP_3_2->rsTTP_3_2;
+		rsCTP_3_2->spiTTP_3_2;
+		au3CTP_4_1->aug_4_1->prTTP_4_1;
+		prCTP_4_1->msTTP_4_1;
+		msCTP_4_1->rsTTP_4_1;
+		rsCTP_4_1->spiTTP_4_1;
+		au3CTP_4_2->aug_4_2->prTTP_4_2;
+		prCTP_4_2->msTTP_4_2;
+		msCTP_4_2->rsTTP_4_2;
+		rsCTP_4_2->spiTTP_4_2;
+		ds3CTP_5_1->vc3TTP_5_1;
+		au3CTP_5_1->aug_5_1->prTTP_5_1;
+		prCTP_5_1->msTTP_5_1;
+		msCTP_5_1->rsTTP_5_1;
+		rsCTP_5_1->spiTTP_5_1;
+		ds3CTP_5_2->t3TTP_5_2;
+	}
+	subgraph trail {
+		edge[style=dashed,dir=none];
+		vc3TTP_1_2->vc3TTP_5_1;
+		prTTP_1_2->prTTP_4_1;
+		prTTP_4_2->prTTP_5_1;
+		msTTP_1_2->msTTP_4_1;
+		msTTP_4_2->msTTP_5_1;
+		rsTTP_1_2->rsTTP_3_1;
+		rsTTP_3_2->rsTTP_4_1;
+		rsTTP_4_2->rsTTP_5_1;
+		spiTTP_1_2->spiTTP_2_1;
+		spiTTP_2_2->spiTTP_3_1;
+		spiTTP_3_2->spiTTP_4_1;
+		spiTTP_4_2->spiTTP_5_1;
+	}
+	subgraph contain {
+		pu_1_2->pg_1_2;
+		pu_4_1->pg_4_1;
+		pu_4_2->pg_4_2;
+		pu_5_1->pg_5_1;
+		xp_1_2->fabric_1_2;
+		xp_4_1->fabric_4_1;
+		xp_5_1->fabric_5_1;
+		fabric_1_2->me_1;
+		fabric_4_1->me_4;
+		fabric_5_1->me_5;
+		pg_1_2->me_1;
+		pg_4_1->me_4;
+		pg_4_2->me_4;
+		pg_5_1->me_5;
+		t3TTP_1_1->me_1;
+		t3TTP_5_2->me_5;
+		vc3TTP_1_2->me_1;
+		vc3TTP_5_1->me_5;
+		prTTP_1_2->me_1;
+		prTTP_4_1->me_4;
+		prTTP_4_2->me_4;
+		prTTP_5_1->me_5;
+		msTTP_1_2->me_1;
+		msTTP_4_1->me_4;
+		msTTP_4_2->me_4;
+		msTTP_5_1->me_5;
+		rsTTP_1_2->me_1;
+		rsTTP_3_1->me_3;
+		rsTTP_3_2->me_3;
+		rsTTP_4_1->me_4;
+		rsTTP_4_2->me_4;
+		rsTTP_5_1->me_5;
+		spiTTP_1_2->me_1;
+		spiTTP_2_1->me_2;
+		spiTTP_2_2->me_2;
+		spiTTP_3_1->me_3;
+		spiTTP_3_2->me_3;
+		spiTTP_4_1->me_4;
+		spiTTP_4_2->me_4;
+		spiTTP_5_1->me_5;
+	}
+	subgraph connectedBy {
+		vc3TTP_1_2->fabric_1_2;
+		au3CTP_1_2->fabric_1_2;
+		au3CTP_4_1->fabric_4_1;
+		au3CTP_4_2->fabric_4_1;
+		vc3TTP_5_1->fabric_5_1;
+		au3CTP_5_1->fabric_5_1;
+		prTTP_1_2->pg_1_2;
+		prTTP_4_1->pg_4_1;
+		prTTP_4_2->pg_4_2;
+		prTTP_5_1->pg_5_1;
+		prCTP_1_2->pg_1_2;
+		prCTP_4_1->pg_4_1;
+		prCTP_4_2->pg_4_2;
+		prCTP_5_1->pg_5_1;
+	}
+	subgraph crossConnection {
+		edge[style=dotted,dir=none];
+		vc3TTP_1_2->xp_1_2->au3CTP_1_2;
+		prTTP_1_2->pu_1_2->prCTP_1_2;
+		prTTP_4_1->pu_4_1->prCTP_4_1;
+		au3CTP_4_1->xp_4_1->au3CTP_4_2;
+		prTTP_4_2->pu_4_2->prCTP_4_2;
+		prTTP_5_1->pu_5_1->prCTP_5_1;
+		vc3TTP_5_1->xp_5_1->au3CTP_5_1;
+	}
+	subgraph bindingConnection {
+		edge[style=bold,dir=none,weight=100];
+		ds3CTP_1_1->ds3CTP_1_2;
+		vc3TTP_1_2->au3CTP_1_2;
+		prTTP_1_2->prCTP_1_2;
+		msTTP_1_2->msCTP_1_2;
+		rsTTP_1_2->rsCTP_1_2;
+		rsCTP_2_1->rsCTP_2_2;
+		rsTTP_3_1->rsCTP_3_1;
+		msCTP_3_1->msCTP_3_2;
+		rsTTP_3_2->rsCTP_3_2;
+		prTTP_4_1->prCTP_4_1;
+		msTTP_4_1->msCTP_4_1;
+		rsTTP_4_1->rsCTP_4_1;
+		au3CTP_4_1->au3CTP_4_2;
+		prTTP_4_2->prCTP_4_2;
+		msTTP_4_2->msCTP_4_2;
+		rsTTP_4_2->rsCTP_4_2;
+		prTTP_5_1->prCTP_5_1;
+		msTTP_5_1->msCTP_5_1;
+		rsTTP_5_1->rsCTP_5_1;
+		ds3CTP_5_1->ds3CTP_5_2;
+		vc3TTP_5_1->au3CTP_5_1;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/shells.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,55 @@
+digraph shells {
+	size="7,8";
+	node [fontsize=24, shape = plaintext];
+
+	1972 -> 1976;
+	1976 -> 1978;
+	1978 -> 1980;
+	1980 -> 1982;
+	1982 -> 1984;
+	1984 -> 1986;
+	1986 -> 1988;
+	1988 -> 1990;
+	1990 -> future;
+
+	node [fontsize=20, shape = box];
+	{ rank=same;  1976 Mashey Bourne; }
+	{ rank=same;  1978 Formshell csh; }
+	{ rank=same;  1980 esh vsh; }
+	{ rank=same;  1982 ksh "System-V"; }
+	{ rank=same;  1984 v9sh tcsh; }
+	{ rank=same;  1986 "ksh-i"; }
+	{ rank=same;  1988 KornShell Perl rc; }
+	{ rank=same;  1990 tcl Bash; }
+	{ rank=same;  "future" POSIX "ksh-POSIX"; }
+
+	Thompson -> Mashey;
+	Thompson -> Bourne;
+	Thompson -> csh;
+	csh -> tcsh;
+	Bourne -> ksh;
+	Bourne -> esh;
+	Bourne -> vsh;
+	Bourne -> "System-V";
+	Bourne -> v9sh;
+	v9sh -> rc;
+	Bourne -> Bash;
+	"ksh-i" -> Bash;
+	KornShell -> Bash;
+	esh -> ksh;
+	vsh -> ksh;
+	Formshell -> ksh;
+	csh -> ksh;
+	KornShell -> POSIX;
+	"System-V" -> POSIX;
+	ksh -> "ksh-i";
+	"ksh-i" -> KornShell;
+	KornShell -> "ksh-POSIX";
+	Bourne -> Formshell;
+
+	edge [style=invis];
+	1984 -> v9sh -> tcsh ;
+	1988 -> rc -> KornShell;
+	Formshell -> csh;
+	KornShell -> Perl;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/states.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,21 @@
+/*
+The command line is
+
+  dot -Tps -Grankdir=LR states.dot > states.ps
+
+and the file is:
+*/
+digraph states {
+    size="3,2";
+	rankdir=LR;
+    node [shape=ellipse];
+    empty [label = "Empty"];
+    stolen [label = "Stolen"];
+    waiting [label = "Waiting"];
+    full [label = "Full"];
+    empty -> full [label = "return"]
+    empty -> stolen [label = "dispatch", wt=28]
+    stolen -> full [label = "return"];
+    stolen -> waiting [label = "touch"];
+    waiting -> full [label = "return"];
+  }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/structs.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,8 @@
+digraph structs {
+node [shape=record];
+    struct1 [shape=record,label="<f0> left|<f1> middle|<f2> right"];
+    struct2 [shape=record,label="<f0> one|<f1> two"];
+    struct3 [shape=record,label="hello\nworld |{ b |{c|<here> d|e}| f}| g | h"];
+    struct1:f1 -> struct2:f0;
+    struct1:f2 -> struct3:here;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/switch.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,60 @@
+digraph G {
+	graph [center=true rankdir=LR bgcolor="#808080"]
+	edge [dir=none]
+	node [width=0.3 height=0.3 label=""]
+	{ node [shape=circle style=invis]
+		1 2 3 4 5 6 7 8  10 20 30 40 50 60 70 80
+	}
+	{ node [shape=circle]
+		a b c d e f g h  i j k l m n o p  q r s t u v w x
+	}
+	{ node [shape=diamond]
+		A B C D E F G H  I J K L M N O P  Q R S T U V W X
+	}
+	1 -> a -> {A B} [color="#0000ff"]
+	2 -> b -> {B A} [color="#ff0000"]
+	3 -> c -> {C D} [color="#ffff00"]
+	4 -> d -> {D C} [color="#00ff00"]
+	5 -> e -> {E F} [color="#000000"]
+	6 -> f -> {F E} [color="#00ffff"]
+	7 -> g -> {G H} [color="#ffffff"]
+	8 -> h -> {H G} [color="#ff00ff"]
+	{ edge [color="#ff0000:#0000ff"]
+		A -> i -> {I K}
+		B -> j -> {J L}
+	}
+	{ edge [color="#00ff00:#ffff00"]
+		C -> k -> {K I}
+		D -> l -> {L J}
+	}
+	{ edge [color="#00ffff:#000000"]
+		E -> m -> {M O}
+		F -> n -> {N P}
+	}
+	{ edge [color="#ff00ff:#ffffff"]
+		G -> o -> {O M}
+		H -> p -> {P N}
+	}
+	{ edge [color="#00ff00:#ffff00:#ff0000:#0000ff"]
+		I -> q -> {Q U}
+		J -> r -> {R V}
+		K -> s -> {S W}
+		L -> t -> {T X}
+	}
+	{ edge [color="#ff00ff:#ffffff:#00ffff:#000000"]
+		M -> u -> {U Q}
+		N -> v -> {V R}
+		O -> w -> {W S}
+		P -> x -> {X T}
+	}
+	{ edge [color="#ff00ff:#ffffff:#00ffff:#000000:#00ff00:#ffff00:#ff0000:#0000ff"]
+		Q -> 10
+		R -> 20
+		S -> 30
+		T -> 40
+		U -> 50
+		V -> 60
+		W -> 70
+		X -> 80
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/table.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,57 @@
+digraph structs {
+    node [shape=plaintext];
+
+    struct1 [label=<<TABLE CELLPADDING="10" BORDER="0">
+	<TR>
+	    <TD HEIGHT="30" WIDTH="90">a</TD>
+	    <TD>b</TD>
+	    <TD>c</TD>
+	</TR>
+    </TABLE>>];
+
+    struct2 [label=<<TABLE>
+	<TR>
+	    <TD COLSPAN="3">elefantel</TD>
+	    <TD ROWSPAN="2" VALIGN="bottom" ALIGN="right">two</TD>
+	</TR><TR>
+	    <TD COLSPAN="2" ROWSPAN="2"><TABLE BGCOLOR="grey">
+		<TR>
+		    <TD>buca</TD>
+		</TR><TR>
+		    <TD BGCOLOR="yellow">c</TD>
+		</TR><TR>
+		    <TD>f</TD>
+		</TR>
+	    </TABLE></TD>
+	    <TD>patratos</TD>
+	</TR><TR>
+	    <TD COLSPAN="2" ALIGN="right">4</TD>
+	</TR>
+	</TABLE>
+    >];
+
+    struct3 [label=<<TABLE CELLPADDING="5">
+	<TR>
+	    <TD ROWSPAN="3">Hello</TD>
+	    <TD ROWSPAN="2" COLSPAN="3"><TABLE BORDER="4">
+		<TR>
+		    <TD COLSPAN="3">b</TD>
+		</TR><TR>
+		    <TD>a</TD>
+		    <TD>dino</TD>
+		    <TD>y</TD>
+		</TR><TR>
+		    <TD COLSPAN="3">rhino</TD>
+		</TR>
+	    </TABLE></TD>
+	</TR><TR>
+	    <TD COLSPAN="2">climb</TD>
+	    <TD ROWSPAN="2">Up</TD>
+	</TR><TR>
+	    <TD COLSPAN="3">low</TD>
+	</TR>
+    </TABLE>>];
+
+    struct1 -> struct3;
+    struct1 -> struct2;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/train11.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,30 @@
+digraph G {
+	size="6,6";
+	node [shape=circle,fontsize=8];
+	rankdir=LR;
+	st9 -> st9 [label="11/1"];
+	st9 -> st10 [label="10/1"];
+	st8 -> st8 [label="10/1"];
+	st8 -> st0 [label="00/-"];
+	st7 -> st8 [label="10/1"];
+	st7 -> st7 [label="00/1"];
+	st6 -> st6 [label="01/1"];
+	st6 -> st0 [label="00/-"];
+	st5 -> st6 [label="01/1"];
+	st5 -> st5 [label="11/1"];
+	st4 -> st4 [label="01/1"];
+	st4 -> st0 [label="00/-"];
+	st3 -> st4 [label="01/1"];
+	st3 -> st3 [label="00/1"];
+	st2 -> st9 [label="11/1"];
+	st2 -> st7 [label="00/1"];
+	st2 -> st2 [label="01/1"];
+	st10 -> st10 [label="10/1"];
+	st10 -> st0 [label="00/-"];
+	st1 -> st5 [label="11/1"];
+	st1 -> st3 [label="00/1"];
+	st1 -> st1 [label="10/1"];
+	st0 -> st2 [label="01/-"];
+	st0 -> st1 [label="10/-"];
+	st0 -> st0 [label="00/0"];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/trapeziumlr.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,79 @@
+digraph test {
+
+    size="7,9.5";
+    page="8,10.5";
+    ratio=fill;
+    rankdir=LR;
+
+    { rank=same;
+      node [shape=house];
+      A;C;E;G;I;K;M;O;Q;S;U;W;Y;
+      node [shape=invhouse];
+      B;D;F;H;J;L;N;P;R;T;V;X;Z;
+    }
+
+    { rank=same;
+      node [shape=trapezium];
+      "Trapezium";
+      ordering=out;
+    }
+
+    Trapezium -> A;
+    Trapezium -> B;
+    Trapezium -> C;
+    Trapezium -> D;
+    Trapezium -> E;
+    Trapezium -> F;
+    Trapezium -> G;
+    Trapezium -> H;
+    Trapezium -> I;
+    Trapezium -> J;
+    Trapezium -> K;
+    Trapezium -> L;
+    Trapezium -> M;
+    Trapezium -> N;
+    Trapezium -> O;
+    Trapezium -> P;
+    Trapezium -> Q;
+    Trapezium -> R;
+    Trapezium -> S;
+    Trapezium -> T;
+    Trapezium -> U;
+    Trapezium -> V;
+    Trapezium -> W;
+    Trapezium -> X;
+    Trapezium -> Y;
+    Trapezium -> Z;
+
+    { rank=same;
+      node [shape=parallelogram];
+      a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z;
+    }
+
+    a -> Trapezium;
+    b -> Trapezium;
+    c -> Trapezium;
+    d -> Trapezium;
+    e -> Trapezium;
+    f -> Trapezium;
+    g -> Trapezium;
+    h -> Trapezium;
+    i -> Trapezium;
+    j -> Trapezium;
+    k -> Trapezium;
+    l -> Trapezium;
+    m -> Trapezium;
+    n -> Trapezium;
+    o -> Trapezium;
+    p -> Trapezium;
+    q -> Trapezium;
+    r -> Trapezium;
+    s -> Trapezium;
+    t -> Trapezium;
+    u -> Trapezium;
+    v -> Trapezium;
+    w -> Trapezium;
+    x -> Trapezium;
+    y -> Trapezium;
+    z -> Trapezium;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/tree.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+digraph g {
+node [shape = record,height=.1];
+node0[label = "<f0> |<f1> G|<f2> "];
+node1[label = "<f0> |<f1> E|<f2> "];
+node2[label = "<f0> |<f1> B|<f2> "];
+node3[label = "<f0> |<f1> F|<f2> "];
+node4[label = "<f0> |<f1> R|<f2> "];
+node5[label = "<f0> |<f1> H|<f2> "];
+node6[label = "<f0> |<f1> Y|<f2> "];
+node7[label = "<f0> |<f1> A|<f2> "];
+node8[label = "<f0> |<f1> C|<f2> "];
+"node0":f2 -> "node4":f1;
+"node0":f0 -> "node1":f1;
+"node1":f0 -> "node2":f1;
+"node1":f2 -> "node3":f1;
+"node2":f2 -> "node8":f1;
+"node2":f0 -> "node7":f1;
+"node4":f2 -> "node6":f1;
+"node4":f0 -> "node5":f1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/triedds.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,114 @@
+digraph g {
+graph [
+rankdir = "LR"
+];
+node [
+fontsize = "16"
+shape = "ellipse"
+];
+edge [
+];
+"node0" [
+label = "<f0> 0x10ba8| <f1>"
+shape = "record"
+];
+"node1" [
+label = "<f0> 0xf7fc4380| <f1> | <f2> |-1"
+shape = "record"
+];
+"node2" [
+label = "<f0> 0xf7fc44b8| | |2"
+shape = "record"
+];
+"node3" [
+label = "<f0> 3.43322790286038071e-06|44.79998779296875|0"
+shape = "record"
+];
+"node4" [
+label = "<f0> 0xf7fc4380| <f1> | <f2> |2"
+shape = "record"
+];
+"node5" [
+label = "<f0> (nil)| | |-1"
+shape = "record"
+];
+"node6" [
+label = "<f0> 0xf7fc4380| <f1> | <f2> |1"
+shape = "record"
+];
+"node7" [
+label = "<f0> 0xf7fc4380| <f1> | <f2> |2"
+shape = "record"
+];
+"node8" [
+label = "<f0> (nil)| | |-1"
+shape = "record"
+];
+"node9" [
+label = "<f0> (nil)| | |-1"
+shape = "record"
+];
+"node10" [
+label = "<f0> (nil)| <f1> | <f2> |-1"
+shape = "record"
+];
+"node11" [
+label = "<f0> (nil)| <f1> | <f2> |-1"
+shape = "record"
+];
+"node12" [
+label = "<f0> 0xf7fc43e0| | |1"
+shape = "record"
+];
+"node0":f0 -> "node1":f0 [
+id = 0
+];
+"node0":f1 -> "node2":f0 [
+id = 1
+];
+"node1":f0 -> "node3":f0 [
+id = 2
+];
+"node1":f1 -> "node4":f0 [
+id = 3
+];
+"node1":f2 -> "node5":f0 [
+id = 4
+];
+"node4":f0 -> "node3":f0 [
+id = 5
+];
+"node4":f1 -> "node6":f0 [
+id = 6
+];
+"node4":f2 -> "node10":f0 [
+id = 7
+];
+"node6":f0 -> "node3":f0 [
+id = 8
+];
+"node6":f1 -> "node7":f0 [
+id = 9
+];
+"node6":f2 -> "node9":f0 [
+id = 10
+];
+"node7":f0 -> "node3":f0 [
+id = 11
+];
+"node7":f1 -> "node1":f0 [
+id = 12
+];
+"node7":f2 -> "node8":f0 [
+id = 13
+];
+"node10":f1 -> "node11":f0 [
+id = 14
+];
+"node10":f2 -> "node12":f0 [
+id = 15
+];
+"node11":f2 -> "node1":f0 [
+id = 16
+];
+}
Binary file toolboxes/graph_visualisation/share/graphviz/graphs/directed/triedds.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/try.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+digraph G {
+	subgraph cluster_small {
+		a -> b;
+		label=small;
+	}
+
+	subgraph cluster_big {
+		p -> q -> r -> s -> t;
+		label=big;
+		t -> p;
+	}
+
+	t -> a;
+	b -> q;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/unix.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,53 @@
+/* courtesy Ian Darwin and Geoff Collyer, Softquad Inc. */
+digraph unix {
+size="6,6";
+	"5th Edition" -> "6th Edition";
+	"5th Edition" -> "PWB 1.0";
+	"6th Edition" -> "LSX";
+	"6th Edition" -> "1 BSD";
+	"6th Edition" -> "Mini Unix";
+	"6th Edition" -> "Wollongong";
+	"6th Edition" -> "Interdata";
+	"Interdata" -> "Unix/TS 3.0";
+	"Interdata" -> "PWB 2.0";
+	"Interdata" -> "7th Edition";
+	"7th Edition" -> "8th Edition";
+	"7th Edition" -> "32V";
+	"7th Edition" -> "V7M";
+	"7th Edition" -> "Ultrix-11";
+	"7th Edition" -> "Xenix";
+	"7th Edition" -> "UniPlus+";
+	"V7M" -> "Ultrix-11";
+	"8th Edition" -> "9th Edition";
+	"1 BSD" -> "2 BSD";
+	"2 BSD" -> "2.8 BSD";
+	"2.8 BSD" -> "Ultrix-11";
+	"2.8 BSD" -> "2.9 BSD";
+	"32V" -> "3 BSD";
+	"3 BSD" -> "4 BSD";
+	"4 BSD" -> "4.1 BSD";
+	"4.1 BSD" -> "4.2 BSD";
+	"4.1 BSD" -> "2.8 BSD";
+	"4.1 BSD" -> "8th Edition";
+	"4.2 BSD" -> "4.3 BSD";
+	"4.2 BSD" -> "Ultrix-32";
+	"PWB 1.0" -> "PWB 1.2";
+	"PWB 1.0" -> "USG 1.0";
+	"PWB 1.2" -> "PWB 2.0";
+	"USG 1.0" -> "CB Unix 1";
+	"USG 1.0" -> "USG 2.0";
+	"CB Unix 1" -> "CB Unix 2";
+	"CB Unix 2" -> "CB Unix 3";
+	"CB Unix 3" -> "Unix/TS++";
+	"CB Unix 3" -> "PDP-11 Sys V";
+	"USG 2.0" -> "USG 3.0";
+	"USG 3.0" -> "Unix/TS 3.0";
+	"PWB 2.0" -> "Unix/TS 3.0";
+	"Unix/TS 1.0" -> "Unix/TS 3.0";
+	"Unix/TS 3.0" -> "TS 4.0";
+	"Unix/TS++" -> "TS 4.0";
+	"CB Unix 3" -> "TS 4.0";
+	"TS 4.0" -> "System V.0";
+	"System V.0" -> "System V.2";
+	"System V.2" -> "System V.3";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/unix2.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,63 @@
+/* Courtesy of Ian Darwin <ian@darwinsys.com>
+ * and Geoff Collyer <geoff@plan9.bell-labs.com>
+ * Mildly updated by Ian Darwin in 2000.
+ */
+digraph unix {
+	size="6,6";
+	node [color=lightblue2, style=filled];
+	"5th Edition" -> "6th Edition";
+	"5th Edition" -> "PWB 1.0";
+	"6th Edition" -> "LSX";
+	"6th Edition" -> "1 BSD";
+	"6th Edition" -> "Mini Unix";
+	"6th Edition" -> "Wollongong";
+	"6th Edition" -> "Interdata";
+	"Interdata" -> "Unix/TS 3.0";
+	"Interdata" -> "PWB 2.0";
+	"Interdata" -> "7th Edition";
+	"7th Edition" -> "8th Edition";
+	"7th Edition" -> "32V";
+	"7th Edition" -> "V7M";
+	"7th Edition" -> "Ultrix-11";
+	"7th Edition" -> "Xenix";
+	"7th Edition" -> "UniPlus+";
+	"V7M" -> "Ultrix-11";
+	"8th Edition" -> "9th Edition";
+	"9th Edition" -> "10th Edition";
+	"1 BSD" -> "2 BSD";
+	"2 BSD" -> "2.8 BSD";
+	"2.8 BSD" -> "Ultrix-11";
+	"2.8 BSD" -> "2.9 BSD";
+	"32V" -> "3 BSD";
+	"3 BSD" -> "4 BSD";
+	"4 BSD" -> "4.1 BSD";
+	"4.1 BSD" -> "4.2 BSD";
+	"4.1 BSD" -> "2.8 BSD";
+	"4.1 BSD" -> "8th Edition";
+	"4.2 BSD" -> "4.3 BSD";
+	"4.2 BSD" -> "Ultrix-32";
+	"4.3 BSD" -> "4.4 BSD";
+	"4.4 BSD" -> "FreeBSD";
+	"4.4 BSD" -> "NetBSD";
+	"4.4 BSD" -> "OpenBSD";
+	"PWB 1.0" -> "PWB 1.2";
+	"PWB 1.0" -> "USG 1.0";
+	"PWB 1.2" -> "PWB 2.0";
+	"USG 1.0" -> "CB Unix 1";
+	"USG 1.0" -> "USG 2.0";
+	"CB Unix 1" -> "CB Unix 2";
+	"CB Unix 2" -> "CB Unix 3";
+	"CB Unix 3" -> "Unix/TS++";
+	"CB Unix 3" -> "PDP-11 Sys V";
+	"USG 2.0" -> "USG 3.0";
+	"USG 3.0" -> "Unix/TS 3.0";
+	"PWB 2.0" -> "Unix/TS 3.0";
+	"Unix/TS 1.0" -> "Unix/TS 3.0";
+	"Unix/TS 3.0" -> "TS 4.0";
+	"Unix/TS++" -> "TS 4.0";
+	"CB Unix 3" -> "TS 4.0";
+	"TS 4.0" -> "System V.0";
+	"System V.0" -> "System V.2";
+	"System V.2" -> "System V.3";
+	"System V.3" -> "System V.4";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/viewfile.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+digraph Viewfile {
+node [ style = filled ];
+atoi [color=green];
+chkmalloc [color=green];
+close [color=green];
+error [color=blue];
+exit [color=blue];
+fclose [color=green];
+fgets [color=red];
+fopen [color=green];
+fprintf [color=blue];
+free [color=blue];
+free_list [color=blue];
+fstat [color=green];
+getopt [color=green];
+init_list [color=green];
+insert_list [color=green];
+main [color=green];
+makeargs [color=blue];
+makepairs [color=green];
+malloc [color=green];
+open [color=green];
+printf [color=red];
+read [color=green];
+rewind [color=green];
+viewline [color=green];
+viewlines [color=green];
+walk_list [color=green];
+write [color=green];
+fclose -> close [color=green];
+fgets -> fstat [color=green];
+fgets -> read [color=green];
+fopen -> open [color=green];
+printf -> write [color=green];
+main -> fgets [color=blue];
+main -> getopt [color=green];
+main -> makeargs [color=blue];
+main -> makepairs [color=green];
+main -> chkmalloc [color=green];
+main -> error [color=blue];
+main -> viewlines [color=green];
+makeargs -> chkmalloc [color=blue];
+makepairs -> atoi [color=green];
+makepairs -> init_list [color=green];
+makepairs -> insert_list [color=green];
+makepairs -> chkmalloc [color=green];
+free_list -> free [color=blue];
+init_list -> chkmalloc [color=green];
+insert_list -> chkmalloc [color=green];
+walk_list -> error [color=blue];
+walk_list -> viewline [color=green];
+chkmalloc -> malloc [color=green];
+chkmalloc -> error [color=blue];
+error -> exit [color=blue];
+error -> fprintf [color=blue];
+error -> error [color=blue];
+viewline -> fgets [color=red];
+viewline -> printf [color=red];
+viewline -> rewind [color=green];
+viewlines -> fclose [color=green];
+viewlines -> fopen [color=green];
+viewlines -> walk_list [color=green];
+viewlines -> viewline [color=blue];
+}
Binary file toolboxes/graph_visualisation/share/graphviz/graphs/directed/viewfile.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/directed/world.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,67 @@
+digraph world {
+size="7,7";
+	{rank=same; S8 S24 S1 S35 S30;}
+	{rank=same; T8 T24 T1 T35 T30;}
+	{rank=same; 43 37 36 10 2;}
+	{rank=same; 25 9 38 40 13 17 12 18;}
+	{rank=same; 26 42 11 3 33 19 39 14 16;}
+	{rank=same; 4 31 34 21 41 28 20;}
+	{rank=same; 27 5 22 32 29 15;}
+	{rank=same; 6 23;}
+	{rank=same; 7;}
+
+	S8 -> 9;
+	S24 -> 25;
+	S24 -> 27;
+	S1 -> 2;
+	S1 -> 10;
+	S35 -> 43;
+	S35 -> 36;
+	S30 -> 31;
+	S30 -> 33;
+	9 -> 42;
+	9 -> T1;
+	25 -> T1;
+	25 -> 26;
+	27 -> T24;
+	2 -> {3 ; 16 ; 17 ; T1 ; 18}
+	10 -> { 11 ; 14 ; T1 ; 13; 12;}
+	31 -> T1;
+	31 -> 32;
+	33 -> T30;
+	33 -> 34;
+	42 -> 4;
+	26 -> 4;
+	3 -> 4;
+	16 -> 15;
+	17 -> 19;
+	18 -> 29;
+	11 -> 4;
+	14 -> 15;
+	37 -> {39 ; 41 ; 38 ; 40;}
+	13 -> 19;
+	12 -> 29;
+	43 -> 38;
+	43 -> 40;
+	36 -> 19;
+	32 -> 23;
+	34 -> 29;
+	39 -> 15;
+	41 -> 29;
+	38 -> 4;
+	40 -> 19;
+	4 -> 5;
+	19 -> {21 ; 20 ; 28;}
+	5 -> {6 ; T35 ; 23;}
+	21 -> 22;
+	20 -> 15;
+	28 -> 29;
+	6 -> 7;
+	15 -> T1;
+	22 -> T35;
+	22 -> 23;
+	29 -> T30;
+	7 -> T8;
+	23 -> T24;
+	23 -> T1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/undirected/ER.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,22 @@
+graph ER {
+	node [shape=box]; course; institute; student;
+	node [shape=ellipse]; {node [label="name"] name0; name1; name2;}
+		code; grade; number;
+	node [shape=diamond,style=filled,color=lightgrey]; "C-I"; "S-C"; "S-I";
+
+	name0 -- course;
+	code -- course;
+	course -- "C-I" [label="n",len=1.00];
+	"C-I" -- institute [label="1",len=1.00];
+	institute -- name1;
+	institute -- "S-I" [label="1",len=1.00];
+	"S-I" -- student [label="n",len=1.00];
+	student -- grade;
+	student -- name2;
+	student -- number;
+	student -- "S-C" [label="m",len=1.00];
+	"S-C" -- course [label="n",len=1.00];
+
+	label = "\n\nEntity Relation Diagram\ndrawn by NEATO";
+	fontsize=20;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/undirected/Heawood.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+/*
+ * The transitive 6-net, also known as Heawood's graph,
+ * can be used to test the "stability points" of the layout
+ * algorithm.
+
+ * The "ideal" layout occurs when len="2.5". The layout
+ * loses the regularity when smaller values are used.
+ */
+graph "Heawood" {
+	node [
+		fontname = "Arial"
+		label = "\N"
+		shape = "circle"
+		width = "0.50000"
+		height = "0.500000"
+		color = "black"
+	]
+	edge [
+		color = "black"
+	]
+	/* The outer wheel */
+	"0" -- "1" -- "2" -- "3" -- "4" -- "5" -- "6" -- "7" -- "8" -- "9" -- "10" -- "11" -- "12" -- "13" -- "0";
+	/* The internal edges. The len = makes them internal */
+	"0" -- "5" [len = 2.5];
+	"2" -- "7" [len = 2.5];
+	"4" -- "9" [len = 2.5];
+	"6" -- "11" [len = 2.5];
+	"8" -- "13" [len = 2.5];
+	"10" -- "1" [len = 2.5];
+	"12" -- "3" [len = 2.5];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/undirected/Petersen.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,48 @@
+/*
+ * The transitive 5-net, also known as Petersen's graph,
+ * can be used to test the "stability points" of the layout
+ * algorithm.
+ * 
+ * The "ideal" layout is achieved for certain random seed
+ * values when len=1.5.  For len=2.5 or above, the layout
+ * is stable. Sometimes, the graph is rendered "inside-out".
+ */ 
+graph "Petersen" {
+	node [
+		fontname = "Arial"
+		label = "\N"
+		shape = "circle"
+		width = "0.400000"
+		height = "0.400000"
+		color = "black"
+	]
+	edge [
+		color = "black"
+	]
+	/* Outer wheel. The len= is what makes it outer */
+	"0" -- "1" -- "2" -- "3" -- "4" -- "0" [
+		color = "blue"
+		len = 2.6
+	]
+	"0" -- "5" [
+		color = "red"
+		weight = "5"
+	]
+	"1" -- "6" [
+		color = "red"
+		weight = "5"
+	]
+	"2" -- "7" [
+		color = "red"
+		weight = "5"
+	]
+	"3" -- "8" [
+		color = "red"
+		weight = "5"
+	]
+	"4" -- "9" [
+		color = "red"
+		weight = "5"
+	]
+	"5" -- "7" -- "9" -- "6" -- "8" -- "5";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/undirected/ngk10_4.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,103 @@
+graph G {
+	graph [splines=true overlap=false]
+	1 -- 30 [f=1];
+	1 -- 40 [f=14];
+	8 -- 46 [f=1];
+	8 -- 16 [f=18];
+	10 -- 25 [f=1];
+	10 -- 19 [f=5];
+	10 -- 33 [f=1];
+	12 -- 8 [f=1];
+	12 -- 36 [f=5];
+	12 -- 17 [f=16];
+	13 -- 38 [f=1];
+	13 -- 24 [f=19];
+	24 -- 49 [f=1];
+	24 -- 13 [f=1];
+	24 -- 47 [f=12];
+	24 -- 12 [f=19];
+	25 -- 27 [f=1];
+	25 -- 12 [f=1];
+	27 -- 12 [f=1];
+	27 -- 14 [f=8];
+	29 -- 10 [f=1];
+	29 -- 8 [f=17];
+	30 -- 24 [f=1];
+	30 -- 44 [f=15];
+	38 -- 29 [f=1];
+	38 -- 35 [f=15];
+	2 -- 42 [f=2];
+	2 -- 35 [f=3];
+	2 -- 11 [f=19];
+	14 -- 18 [f=2];
+	14 -- 24 [f=15];
+	14 -- 38 [f=18];
+	18 -- 49 [f=2];
+	18 -- 47 [f=20];
+	26 -- 41 [f=2];
+	26 -- 42 [f=15];
+	31 -- 39 [f=2];
+	31 -- 47 [f=17];
+	31 -- 25 [f=14];
+	37 -- 26 [f=2];
+	37 -- 16 [f=14];
+	39 -- 50 [f=2];
+	39 -- 14 [f=2];
+	39 -- 18 [f=17];
+	39 -- 47 [f=10];
+	41 -- 31 [f=2];
+	41 -- 8 [f=16];
+	42 -- 44 [f=2];
+	42 -- 29 [f=12];
+	44 -- 37 [f=2];
+	44 -- 32 [f=15];
+	3 -- 20 [f=2];
+	3 -- 28 [f=19];
+	6 -- 45 [f=2];
+	6 -- 28 [f=10];
+	9 -- 6 [f=2];
+	9 -- 16 [f=1];
+	15 -- 16 [f=2];
+	15 -- 48 [f=2];
+	16 -- 50 [f=2];
+	16 -- 32 [f=14];
+	16 -- 39 [f=8];
+	20 -- 33 [f=2];
+	33 -- 9 [f=2];
+	33 -- 46 [f=3];
+	33 -- 48 [f=17];
+	45 -- 15 [f=2];
+	4 -- 17 [f=4];
+	4 -- 15 [f=6];
+	4 -- 12 [f=16];
+	17 -- 21 [f=4];
+	19 -- 35 [f=4];
+	19 -- 15 [f=9];
+	19 -- 43 [f=4];
+	21 -- 19 [f=4];
+	21 -- 50 [f=4];
+	23 -- 36 [f=4];
+	34 -- 23 [f=4];
+	34 -- 24 [f=11];
+	35 -- 34 [f=4];
+	35 -- 16 [f=6];
+	35 -- 18 [f=16];
+	36 -- 46 [f=4];
+	5 -- 7 [f=1];
+	5 -- 36 [f=6];
+	7 -- 32 [f=1];
+	7 -- 11 [f=2];
+	7 -- 14 [f=17];
+	11 -- 40 [f=1];
+	11 -- 50 [f=1];
+	22 -- 46 [f=1];
+	28 -- 43 [f=1];
+	28 -- 8 [f=18];
+	32 -- 28 [f=1];
+	32 -- 39 [f=13];
+	32 -- 42 [f=15];
+	40 -- 22 [f=1];
+	40 -- 47 [f=1];
+	43 -- 11 [f=1];
+	43 -- 17 [f=19];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/graphs/undirected/process.gv	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+graph G {
+	run -- intr;
+	intr -- runbl;
+	runbl -- run;
+	run -- kernel;
+	kernel -- zombie;
+	kernel -- sleep;
+	kernel -- runmem;
+	sleep -- swap;
+	swap -- runswap;
+	runswap -- new;
+	runswap -- runmem;
+	new -- runmem;
+	sleep -- runmem;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/box.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,157 @@
+load ('def.lefty');
+definit ();
+#
+# initialize window data
+#
+canvas = defcanvas;
+wrect = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 400; 'y' = 500;];];
+setwidgetattr (canvas, ['window' = wrect;]);
+#
+# data structures
+#
+objarray = [];
+objnum = 0;
+#
+# misc functions
+#
+min = function (a, b) {
+    if (a <= b)
+        return a;
+    return b;
+};
+max = function (a, b) {
+    if (b <= a)
+        return a;
+    return b;
+};
+rectof = function (p1, p2) {
+    return [
+        0 = ['x' = min (p1.x, p2.x); 'y' = min (p1.y, p2.y);];
+        1 = ['x' = max (p1.x, p2.x); 'y' = max (p1.y, p2.y);];
+    ];
+};
+pointadd = function (p1, p2) {
+    return ['x' = p2.x + p1.x; 'y' = p2.y + p1.y;];
+};
+pointsub = function (p1, p2) {
+    return ['x' = p2.x - p1.x; 'y' = p2.y - p1.y;];
+};
+#
+# rendering functions
+#
+drawbox = function (obj, color) {
+    box (canvas, obj, obj.rect, ['color' = color;]);
+};
+redrawboxes = function () {
+    local i;
+    clear (canvas);
+    for (i = 0; i < objnum; i = i + 1)
+        drawbox (objarray[i], 1);
+};
+redraw = function (canvas) {
+    redrawboxes ();
+};
+#
+# editing functions
+#
+new = function (rect) {
+    objarray[objnum] = [
+        'rect' = rect;
+        'id' = objnum;
+    ];
+    objnum = objnum + 1;
+    return objarray[objnum - 1];
+};
+reshape = function (obj, rect) {
+    obj.rect = rect;
+    return obj;
+};
+move = function (obj, p) {
+    obj.rect[0] = pointadd (obj.rect[0], p);
+    obj.rect[1] = pointadd (obj.rect[1], p);
+    return obj;
+};
+delete = function (obj) {
+    if (obj.id ~= objnum - 1) {
+        objarray[obj.id] = objarray[objnum - 1];
+        objarray[obj.id].id = obj.id;
+    }
+    remove (objnum - 1, objarray);
+    objnum = objnum - 1;
+};
+#
+# user interface functions
+#
+# left mouse button creates new box
+# middle button moves a box
+# right button deletes a box
+#
+leftdown = function (data) {
+    if (data.obj ~= null)
+        return;
+    leftbox = new (rectof (data.pos, data.pos));
+    drawbox (leftbox, 1);
+    setgfxattr (canvas, ['mode' = 'xor';]);
+};
+leftmove = function (data) {
+    if (~leftbox)
+        return;
+    drawbox (leftbox, 1);
+    clearpick (canvas, leftbox);
+    reshape (leftbox, rectof (data.ppos, data.pos));
+    drawbox (leftbox, 1);
+};
+leftup = function (data) {
+    if (~leftbox)
+        return;
+    drawbox (leftbox, 1);
+    clearpick (canvas, leftbox);
+    reshape (leftbox, rectof (data.ppos, data.pos));
+    setgfxattr (canvas, ['mode' = 'src';]);
+    drawbox (leftbox, 1);
+    remove ('leftbox');
+};
+middledown = function (data) {
+    if (data.obj == null)
+        return;
+    middlebox = data.obj;
+    middlepos = data.pos;
+    setgfxattr (canvas, ['mode' = 'xor';]);
+};
+middlemove = function (data) {
+    if (~middlebox)
+        return;
+    drawbox (middlebox, 1);
+    clearpick (canvas, middlebox);
+    move (middlebox, pointsub (middlepos, data.pos));
+    middlepos = data.pos;
+    drawbox (middlebox, 1);
+};
+middleup = function (data) {
+    if (~middlebox)
+        return;
+    drawbox (middlebox, 1);
+    clearpick (canvas, middlebox);
+    move (middlebox, pointsub (middlepos, data.pos));
+    setgfxattr (canvas, ['mode' = 'src';]);
+    drawbox (middlebox, 1);
+    remove ('middlepos');
+    remove ('middlebox');
+};
+rightup = function (data) {
+    if (data.pobj == null)
+        return;
+    drawbox (data.obj, 0);
+    clearpick (canvas, data.obj);
+    delete (data.obj);
+};
+dops = function () {
+    local s;
+
+    s = ['x' = 8 * 300; 'y' = 10.5 * 300;];
+    canvas = createwidget (-1, ['type' = 'ps'; 'size' = s;]);
+    setwidgetattr (canvas, ['window' = wrect;]);
+    redraw (canvas);
+    destroywidget (canvas);
+    canvas=defcanvas;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/def.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,15 @@
+definit = function () {
+    defview = createwidget (-1, [
+        'type' = 'view';
+        'name' = 'graphics view';
+        'origin' = ['x' = 1; 'y' = 1;];
+        'size' = ['x' = 400; 'y' = 500;];
+    ]);
+    defscroll = createwidget (defview, ['type' = 'scroll';]);
+    defcanvas = createwidget (defscroll, [
+        'type' = 'canvas';
+        'origin' = ['x' = 1; 'y' = 1;];
+        'size' = ['x' = 400; 'y' = 500;];
+        'borderwidth' = 1;
+    ]);
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/dotty.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,748 @@
+#
+# DOTTY
+#
+dotty = [
+    'keys' = [
+        'nid'    = 'nid';
+        'eid'    = 'eid';
+        'gid'    = 'gid';
+        'name'   = 'name';
+        'attr'   = 'attr';
+        'gattr'  = 'graphattr';
+        'eattr'  = 'edgeattr';
+        'nattr'  = 'nodeattr';
+        'edges'  = 'edges';
+        'tail'   = 'tail';
+        'tport'  = 'tport';
+        'head'   = 'head';
+        'hport'  = 'hport';
+        'pos'    = 'pos';
+        'size'   = 'size';
+        'rect'   = 'rect';
+        'fname'  = 'fontname';
+        'fsize'  = 'fontsize';
+        'fcolor' = 'fontcolor';
+        'dcolor' = 'drawcolor';
+        'bcolor' = 'fillcolor';
+    ];
+    'maps' = [
+        'X11' = [
+            'fontmap' = [
+                'Times-Roman'    = '-*-times-medium-r-*--%d-*-*-*-*-*-*-1';
+                'Times-Italic'   = '-*-times-medium-i-*--%d-*-*-*-*-*-*-1';
+                'Times-Bold'     = '-*-times-bold-r-*--%d-*-*-*-*-*-*-1';
+                'Courier'        = '-*-courier-bold-r-*--%d-*-*-*-*-*-*-1';
+                'Courier-Bold'   = '-*-courier-bold-r-*--%d-*-*-*-*-*-*-1';
+                'Helvetica'      = (
+                     '-*-helvetica-medium-r-normal--%d-*-*-*-p-*-iso8859-1'
+                );
+                'Helvetica-Bold' = (
+                    '-*-helvetica-bold-r-normal--%d-*-*-*-p-*-iso8859-1'
+                );
+            ];
+            'psfontmap' = [
+                'Times-Roman'    = 'Times-Roman';
+                'Times-Italic'   = 'Times-Italic';
+                'Times-Bold'     = 'Times-Bold';
+                'Courier'        = 'Courier';
+                'Courier-Bold'   = 'Courier-Bold';
+                'Helvetica'      = 'Helvetica';
+                'Helvetica-Bold' = 'Helvetica-Bold';
+            ];
+        ];
+        'mswin' = [
+            'fontmap' = [
+                'Times-Roman'    = 'Times New Roman';
+                'Times-Italic'   = 'Times New Roman Italic';
+                'Times-Bold'     = 'Times New Roman Bold';
+                'Courier'        = 'Courier New';
+                'Courier-Bold'   = 'Courier New Bold';
+                'Helvetica'      = 'Arial';
+                'Helvetica-Bold' = 'Arial Bold';
+            ];
+            'psfontmap' = [
+                'Times-Roman'    = 'Times New Roman';
+                'Times-Italic'   = 'Times New Roman Italic';
+                'Times-Bold'     = 'Times New Roman Bold';
+                'Courier'        = 'Courier New';
+                'Courier-Bold'   = 'Courier New Bold';
+                'Helvetica'      = 'Arial';
+                'Helvetica-Bold' = 'Arial Bold';
+            ];
+        ];
+    ];
+    'protogt' = [
+        'graph' = [
+            'graphattr' = [
+                'fontsize' = '14';
+                'fontname' = 'Times-Roman';
+                'fontcolor' = 'black';
+            ];
+            'nodeattr' = [
+                'shape' = 'ellipse';
+                'fontsize' = '14';
+                'fontname' = 'Times-Roman';
+                'fontcolor' = 'black';
+                'style' = 'solid';
+            ];
+            'edgeattr' = [
+                'fontsize' = '14';
+                'fontname' = 'Times-Roman';
+                'fontcolor' = 'black';
+                'style' = 'solid';
+            ];
+            'graphdict' = [];
+            'nodedict' = [];
+            'graphs' = [];
+            'nodes' = [];
+            'edges' = [];
+            'maxgid' = 0;
+            'maxnid' = 0;
+            'maxeid' = 0;
+            'type' = 'digraph';
+        ];
+        'layoutmode' = 'sync';
+        'lserver' = 'dot';
+        'edgehandles' = 1;
+        'noundo' = 0;
+    ];
+    'lservers' = [];
+    'mlevel' = 0;
+    'graphs' = [];
+    'views' = [];
+    'protovt' = [
+        'normal' = [
+            'name' = 'DOTTY';
+            'orig' = ['x' = 1; 'y' = 1;];
+            'size' = ['x' = 420; 'y' = 520;];
+            'wrect' = [
+                0 = ['x' = 0; 'y' = 0;];
+                1 = ['x' = 400; 'y' = 500;];
+            ];
+            'vsize' = ['x' = 400; 'y' = 500;];
+            'w2v' = 1;
+        ];
+        'birdseye' = [
+            'type' = 'birdseye';
+            'name' = 'DOTTY birdseye view';
+            'orig' = ['x' = 1; 'y' = 1;];
+            'size' = ['x' = 220; 'y' = 260;];
+            'wrect' = [
+                0 = ['x' = 0; 'y' = 0;];
+                1 = ['x' = 200; 'y' = 250;];
+            ];
+            'vsize' = ['x' = 200; 'y' = 250;];
+            'w2v' = 1;
+        ];
+    ];
+    'pagesizes' = [
+        '8.5x11' = ['x' =    8; 'y' = 10.5;];
+        '11x17'  = ['x' = 10.5; 'y' = 16.5;];
+        '36x50'  = ['x' = 35.5; 'y' = 49.5;];
+    ];
+];
+load ('dotty_draw.lefty');
+load ('dotty_edit.lefty');
+load ('dotty_layout.lefty');
+load ('dotty_ui.lefty');
+#
+# initialization functions
+#
+dotty.init = function () {
+    dotty.fontmap = dotty.maps[getenv ('LEFTYWINSYS')].fontmap;
+    dotty.clipgt = dotty.protogt.creategraph (['noundo' = 1;]);
+    dotty.inited = 1;
+};
+dotty.simple = function (file) {
+    if (dotty.inited ~= 1)
+        dotty.init ();
+    dotty.createviewandgraph (file, 'file', null, null);
+    txtview ('off');
+};
+#
+# main operations
+#
+dotty.protogt.creategraph = function (protogt) {
+    local gt, id, gtid;
+
+    if (~protogt)
+        protogt = dotty.protogt;
+    for (gtid = 0; dotty.graphs[gtid]; gtid = gtid + 1)
+        ;
+    gt = (dotty.graphs[gtid] = []);
+    if (protogt.mode ~= 'replace') {
+        for (id in dotty.protogt)
+            gt[id] = copy (dotty.protogt[id]);
+    }
+    for (id in protogt)
+        gt[id] = copy (protogt[id]);
+    gt.gtid = gtid;
+    gt.views = [];
+    gt.undoarray = ['level' = 0; 'entries' = [];];
+    gt.busy = 0;
+    return gt;
+};
+dotty.protogt.copygraph = function (ogt) {
+    local gt, gtid, id;
+
+    for (gtid = 0; dotty.graphs[gtid]; gtid = gtid + 1)
+        ;
+    gt = (dotty.graphs[gtid] = []);
+    for (id in ogt)
+        gt[id] = copy (ogt[id]);
+    gt.gtid = gtid;
+    gt.views = [];
+    gt.undoarray = ['level' = 0; 'entries' = [];];
+    gt.busy = 0;
+    return gt;
+};
+dotty.protogt.destroygraph = function (gt) {
+    local vid, vlist;
+
+    if (gt.layoutpending > 0)
+        gt.cancellayout (gt);
+    for (vid in gt.views)
+        vlist[vid] = gt.views[vid];
+    for (vid in gt.views)
+        gt.destroyview (gt, vlist[vid]);
+    remove (gt.gtid, dotty.graphs);
+};
+dotty.protogt.loadgraph = function (gt, name, type, protograph, layoutflag) {
+    local fd, vid, vt, graph, nid, eid, gid;
+
+    if (gt.layoutpending > 0)
+        gt.cancellayout (gt);
+    if (~name)
+        if (~(name = ask ('file name:', 'file', '')))
+            return;
+    dotty.pushbusy (gt, gt.views);
+    dotty.message (1, 'loading');
+    if (~protograph)
+        protograph = dotty.protogt.graph;
+    if (
+        ~((fd = dotty.openio (name, type, 'r')) >= 0) |
+        ~(graph = readgraph (fd, protograph))
+    ) {
+        dotty.message (0, 'cannot load graph');
+        dotty.popbusy (gt, gt.views);
+        return;
+    }
+    for (vid in gt.views) {
+        vt = gt.views[vid];
+        vt.colors = [];
+        vt.colorn = 2;
+    }
+    gt.graph = graph;
+    gt.name = name;
+    gt.type = type;
+    gt.undoarray = ['level' = 0; 'entries' = [];];
+    if (~(type == 'file' & name == '-'))
+        closeio (fd);
+    graph.maxgid = tablesize (graph.graphs);
+    graph.maxnid = tablesize (graph.nodes);
+    graph.maxeid = tablesize (graph.edges);
+    for (nid in graph.nodes)
+        graph.nodes[nid][dotty.keys.nid] = nid;
+    for (eid in graph.edges)
+        graph.edges[eid][dotty.keys.eid] = eid;
+    for (gid in graph.graphs)
+        graph.graphs[gid][dotty.keys.gid] = gid;
+    gt.unpackattr (gt);
+    if (layoutflag) {
+        dotty.message (1, 'generating layout');
+        gt.layoutgraph (gt);
+    }
+    dotty.popbusy (gt, gt.views);
+    return gt.graph;
+};
+dotty.protogt.savegraph = function (gt, name, type) {
+    local fd;
+
+    if (~name)
+        if (~(name = ask ('file name:', 'file', '')))
+            return;
+    if (
+        ~((fd = dotty.openio (name, type, 'w')) >= 0) |
+        ~writegraph (fd, gt.graph, 0)
+    ) {
+        dotty.message (0, 'cannot save graph');
+        return;
+    }
+    if (~(type == 'file' & name == '-'))
+        closeio (fd);
+};
+dotty.protogt.setgraph = function (gt, graph) {
+    local vid, vt, nid, eid, gid;
+
+    if (gt.layoutpending > 0)
+        gt.cancellayout (gt);
+    for (vid in gt.views) {
+        vt = gt.views[vid];
+        vt.colors = [];
+        vt.colorn = 2;
+    }
+    gt.graph = copy (graph);
+    gt.undoarray = ['level' = 0; 'entries' = [];];
+    gt.unpackattr (gt);
+    gt.graph.maxgid = tablesize (graph.graphs);
+    gt.graph.maxnid = tablesize (graph.nodes);
+    gt.graph.maxeid = tablesize (graph.edges);
+    for (nid in gt.graph.nodes)
+        gt.graph.nodes[nid][dotty.keys.nid] = nid;
+    for (eid in gt.graph.edges)
+        gt.graph.edges[eid][dotty.keys.eid] = eid;
+    for (gid in gt.graph.graphs)
+        gt.graph.graphs[gid][dotty.keys.gid] = gid;
+    gt.unpackattr (gt);
+    dotty.message (1, 'generating layout');
+    gt.layoutgraph (gt);
+    return gt.graph;
+};
+dotty.protogt.erasegraph = function (gt, protogt, protovt) {
+    local vid, vt;
+
+    if (gt.layoutpending > 0)
+        gt.cancellayout (gt);
+    for (vid in gt.views) {
+        vt = gt.views[vid];
+        vt.colors = [];
+        vt.colorn = 2;
+        clear (vt.canvas);
+    }
+    if (~protogt)
+        protogt = dotty.protogt;
+    gt.graph = copy (protogt.graph);
+    gt.undoarray = ['level' = 0; 'entries' = [];];
+};
+dotty.protogt.layoutgraph = function (gt) {
+    if (gt.graph.graphattr.xdotversion) {
+        gt.unpacklayout (gt, gt.graph);
+        gt.setviewsize (gt.views, gt.graph.rect);
+        gt.redrawgraph (gt, gt.views);
+        return;
+    }
+    if (gt.layoutmode == 'async') {
+        if (~gt.haveinput) {
+            gt.startlayout (gt);
+            return;
+        }
+        if (~gt.finishlayout (gt))
+            return;
+        gt.setviewsize (gt.views, gt.graph.rect);
+        gt.redrawgraph (gt, gt.views);
+    } else {
+        if (~gt.startlayout (gt))
+            return;
+        else
+            while (~gt.finishlayout (gt))
+                ;
+        gt.setviewsize (gt.views, gt.graph.rect);
+        gt.redrawgraph (gt, gt.views);
+    }
+};
+dotty.protogt.createview = function (gt, protovt) {
+    local vt, ovt, id, t;
+
+    vt = [];
+    vt.colors = [];
+    vt.colorn = 2;
+    if (~protovt)
+        protovt = dotty.protovt.normal;
+    if (protovt.mode ~= 'replace') {
+        for (id in dotty.protovt[protovt.type])
+            vt[id] = copy (dotty.protovt[protovt.type][id]);
+    }
+    for (id in protovt)
+        vt[id] = copy (protovt[id]);
+    if (~(vt.parent >= 0)) {
+        vt.view = createwidget (-1, [
+            'type'   = 'view';
+            'name'   = vt.name;
+            'origin' = vt.orig;
+            'size'   = vt.size;
+        ]);
+        vt.scroll = createwidget (vt.view, ['type' = 'scroll';]);
+    } else {
+        vt.view = -1;
+        vt.scroll = createwidget (vt.parent, [
+            'type' = 'scroll';
+            'size' = vt.size;
+        ]);
+    }
+    vt.canvas = createwidget (vt.scroll, [
+        'type' = 'canvas';
+        'color' = [0 = protovt.bgcolor; 1 = protovt.fgcolor;];
+    ]);
+    setwidgetattr (vt.canvas, [
+        'window' = vt.wrect;
+        'viewport' = vt.vsize;
+    ]);
+    clear (vt.canvas);
+    dotty.views[vt.canvas] = vt;
+    vt.vtid = vt.canvas;
+    vt.gtid = gt.gtid;
+    gt.views[vt.vtid] = vt;
+    dotty.views[vt.scroll] = vt;
+    if (vt.view ~= -1)
+        dotty.views[vt.view] = vt;
+    if (protovt.colors & tablesize (protovt.colors) > 0) {
+        for (id in protovt.colors)
+            if (id == '_bgcolor_')
+                setwidgetattr (vt.canvas, [
+                    'color' = [0 = protovt.colors[id];];
+                ]);
+            else if (setwidgetattr (vt.canvas, ['color' = [
+                protovt.colors[id] = id;
+            ];]) ~= 1) {
+                t = split (id, ' ');
+                if (tablesize (t) ~= 3 | setwidgetattr (vt.canvas, [
+                    'color' = [protovt.colors[id] = [
+                        'h' = ston (t[0]); 's' = ston (t[1]); 'v' = ston (t[2]);
+                    ];];
+                ]) ~= 1) {
+                    dotty.message (
+                        0, concat ('unknown color ', id, ' using #1')
+                    );
+                }
+            }
+        vt.colors = copy (protovt.colors);
+        vt.colorn = protovt.colorn;
+    } else if (tablesize (gt.views) > 1) {
+        for (id in gt.views)
+            if (gt.views[id] ~= vt)
+                break;
+        ovt = gt.views[id];
+        for (id in ovt.colors)
+            if (id == '_bgcolor_')
+                setwidgetattr (vt.canvas, ['color' = [0 = ovt.colors[id];];]);
+            else if (setwidgetattr (vt.canvas, ['color' = [
+                ovt.colors[id] = id;
+            ];]) ~= 1) {
+                t = split (id, ' ');
+                if (tablesize (t) ~= 3 | setwidgetattr (vt.canvas, [
+                    'color' = [ovt.colors[id] = [
+                        'h' = ston (t[0]); 's' = ston (t[1]); 'v' = ston (t[2]);
+                    ];];
+                ]) ~= 1) {
+                    dotty.message (
+                        0, concat ('unknown color ', id, ' using #1')
+                    );
+                }
+            }
+        vt.colors = copy (ovt.colors);
+        vt.colorn = ovt.colorn;
+    }
+    if (gt.graph.rect)
+        gt.setviewsize ([vt.vtid = vt;], gt.graph.rect);
+    gt.drawgraph (gt, [vt.vtid = vt;]);
+    for (id in vt.uifuncs)
+        if (id == 'closeview')
+            widgets[vt.view][id] = vt.uifuncs[id];
+        else
+            widgets[vt.canvas][id] = vt.uifuncs[id];
+    return vt;
+};
+dotty.protogt.destroyview = function (gt, vt) {
+    destroywidget (vt.canvas);
+    destroywidget (vt.scroll);
+    if (vt.view ~= -1) {
+        destroywidget (vt.view);
+        remove (vt.view, dotty.views);
+    }
+    remove (vt.scroll, dotty.views);
+    remove (vt.canvas, dotty.views);
+    if (vt.gtid >= 0)
+        remove (vt.vtid, gt.views);
+    if (tablesize (dotty.views) == 0)
+        exit ();
+};
+dotty.protogt.zoom = function (gt, vt, factor, pos) {
+    gt.setviewscale ([vt.vtid = vt;], factor);
+    if (pos)
+        gt.setviewcenter ([vt.vtid = vt;], pos);
+    gt.redrawgraph (gt, [vt.vtid = vt;]);
+};
+dotty.protogt.findnode = function (gt, vt) {
+    local key, node, node1, nid;
+
+    if (~(key = ask ('give node name or label')))
+        return;
+    if (gt.graph.nodedict[key] >= 0)
+        node = gt.graph.nodes[gt.graph.nodedict[key]];
+    else if (gt.graph.nodedict[ston (key)] >= 0)
+        node = gt.graph.nodes[gt.graph.nodedict[ston (key)]];
+    else {
+        for (nid in gt.graph.nodes) {
+            node1 = gt.graph.nodes[nid];
+            if (node1.attr.label == key | node1.attr.label == ston (key)) {
+                node = node1;
+                break;
+            }
+        }
+    }
+    if (~node) {
+        dotty.message (0, concat ('cannot find node: ', key));
+        return;
+    }
+    gt.setviewcenter ([vt.vtid = vt;], node.pos);
+};
+dotty.protogt.setattr = function (gt, obj) {
+    local kv, t, attr, value, n, i, s;
+
+    if (~(kv = ask ('give attr/value, eg. color=blue')))
+        return;
+    t = split (kv, '=');
+    attr = t[0];
+    value = t[1];
+    if ((n = tablesize (t)) > 2)
+        for (i = 2; i < n; i = i + 1)
+            value = concat (value, '=', t[i]);
+    # Check for HTML string and convert using lefty convention
+    s = split (value, '');
+    n = tablesize (s);
+    if ((s[0] == '<') & (s[n-1] == '>')) {
+        s[0] = '>';
+        s[n-1] = '<';
+        value = s[0]; 
+        for (i = 1; i < n; i = i + 1)
+            value = concat (value, s[i]);
+    }
+    if (
+        obj.attr == gt.graph.graphattr |
+        obj.attr == gt.graph.edgeattr |
+        obj.attr == gt.graph.nodeattr
+    ) {
+        obj.attr[attr] = value;
+        return;
+    }
+    if (obj.nid >= 0) {
+        gt.undrawnode (gt, gt.views, obj);
+        obj.attr[attr] = value;
+        gt.unpacknodeattr (gt, obj);
+        gt.drawnode (gt, gt.views, obj);
+    } else if (obj.eid >= 0) {
+        gt.undrawedge (gt, gt.views, obj);
+        obj.attr[attr] = value;
+        gt.unpackedgeattr (gt, obj);
+        gt.drawedge (gt, gt.views, obj);
+    }
+};
+dotty.protogt.getattr = function (gt, node) {
+    local kv;
+
+    if (~(kv.key = ask ('give attr name')))
+        return null;
+    if ((kv.val = node.attr[kv.key]))
+        return kv;
+    return null;
+};
+#
+# utilities
+#
+dotty.createviewandgraph = function (name, type, protogt, protovt) {
+    local vt, gt;
+
+    if (~protogt)
+        protogt = dotty.protogt;
+    if (protogt.creategraph)
+        gt = protogt.creategraph (protogt);
+    else
+        gt = dotty.protogt.creategraph (protogt);
+    vt = gt.createview (gt, protovt);
+    if (~protogt.graph)
+        protogt.graph = copy (dotty.protogt.graph);
+    if (name)
+        gt.loadgraph (gt, name, type, protogt.graph, 1);
+    return ['gt' = gt; 'vt' = vt;];
+};
+dotty.openio = function (name, type, mode) {
+    local fd;
+
+    if (~name)
+        return null;
+    if (type == 'file') {
+        if (name == '-') {
+            if (mode == 'r' | mode == 'r+')
+                fd = 0;
+            else
+                fd = 1;
+        } else if (~((fd = openio ('file', name, mode)) >= 0)) {
+            dotty.message (0, concat ('cannot open file: ', name));
+            return null;
+        }
+    } else if (type == 'pipe') {
+        if (~((fd = openio (
+            'pipe', 'ksh', mode, concat ("%e ", name)
+        )) >= 0)) {
+            dotty.message (0, concat ('cannot run command: ', name));
+            return null;
+        }
+    } else
+        return null;
+    return fd;
+};
+dotty.pushbusy = function (gt, views) {
+    local vid;
+
+    if (gt.busy == 0)
+        for (vid in gt.views)
+            setwidgetattr (vid, ['cursor' = 'watch';]);
+    gt.busy = gt.busy + 1;
+};
+dotty.popbusy = function (gt, views) {
+    local vid;
+
+    gt.busy = gt.busy - 1;
+    if (gt.busy == 0)
+        for (vid in gt.views)
+            setwidgetattr (vid, ['cursor' = 'default';]);
+};
+dotty.message = function (level, text) {
+    if (level <= dotty.mlevel)
+        echo ('dotty.lefty: ', text);
+};
+#
+# printing or saving to file
+#
+dotty.protogt.printorsave = function (gt, vt, otype, name, mode, ptype) {
+    local pr, wrect, vsize, xy, psize, canvas, pscanvas, cid, cname, t;
+    local graph, edgehandles, fontmap, eid, edge, nid, node, gid, sgraph;
+    local did, draw, i;
+
+    if (~otype)
+        if (~(otype = ask ('print to', 'choice', 'file|printer')))
+            return;
+    if (otype == 'printer') {
+        if (~getenv ('TMPDIR'))
+            name = concat (getenv ('HOME'), '/.dottyout.ps');
+        else
+            name = concat (getenv ('TMPDIR'), '/.dottyout.ps', random (10000));
+        if (getenv ('LEFTYWINSYS') ~= 'mswin' & ~pr)
+            if (~(pr = ask ('printer command', 'string', 'lpr')))
+                return;
+    }
+    if (~name)
+        if (~(name = ask ('postscript file', 'file', 'out.ps')))
+            return;
+    if (~ptype)
+        if (~(ptype = ask ('page size', 'choice', '8.5x11|11x17|36x50')))
+            return;
+    if (~mode)
+        if (~(mode = ask ('mode', 'choice', 'portrait|landscape|best fit')))
+            return;
+    wrect = copy (vt.wrect);
+    wrect[0].x = wrect[0].x - 1;
+    wrect[1].x = wrect[1].x + 1;
+    wrect[0].y = wrect[0].y - 1;
+    wrect[1].y = wrect[1].y + 1;
+    vsize = copy (vt.vsize);
+    if (vsize.x == 0)
+        vsize.x = 1;
+    if (vsize.y == 0)
+        vsize.y = 1;
+    xy = vsize.x / vsize.y;
+    if (mode == 'best fit') {
+        if (xy < 1)
+            mode = 'portrait';
+        else
+            mode = 'landscape';
+    }
+    psize = dotty.pagesizes[ptype];
+    if (mode == 'portrait') {
+        if (xy < psize.x / psize.y) {
+            vsize.y = psize.y * 300;
+            vsize.x = vsize.y * xy;
+        } else {
+            vsize.x = psize.x * 300;
+            vsize.y = vsize.x / xy;
+        }
+    } else {
+        if (xy < psize.y / psize.x) {
+            vsize.y = psize.x * 300;
+            vsize.x = vsize.y * xy;
+        } else {
+            vsize.x = psize.y * 300;
+            vsize.y = vsize.x / xy;
+        }
+    }
+    if (~((pscanvas = createwidget (-1, [
+        'type'   = 'ps';
+        'origin' = ['x' = 0; 'y' = 0;];
+        'size'   = vsize;
+        'mode'   = mode;
+        'name'   = name;
+    ])) >= 0)) {
+        dotty.message (0, 'cannot open printer device');
+        return;
+    }
+    for (cname in vt.colors) {
+        cid = vt.colors[cname];
+        if (cname == '_bgcolor_')
+            setwidgetattr (pscanvas, ['color' = [0 = cid;];]);
+        else if (setwidgetattr (pscanvas, ['color' = [cid = cname;];]) ~= 1) {
+            t = split (cname, ' ');
+            if (tablesize (t) ~= 3 | setwidgetattr (pscanvas, [
+                'color' = [cid = [
+                    'h' = ston (t[0]); 's' = ston (t[1]); 'v' = ston (t[2]);
+                ];];
+            ]) ~= 1) {
+                dotty.message (
+                    0, concat ('unknown color ', cname, ' using #1')
+                );
+            }
+        }
+    }
+    setwidgetattr (pscanvas, ['window' = wrect;]);
+    graph = copy (gt.graph);
+    canvas = vt.canvas;
+    vt.canvas = pscanvas;
+    edgehandles = gt.edgehandles;
+    gt.edgehandles = 0;
+    fontmap = dotty.maps[getenv ('LEFTYWINSYS')].psfontmap;
+    for (eid in graph.edges) {
+        edge = graph.edges[eid];
+        edge.fontname = fontmap[edge.attr.fontname];
+        for (did in edge.draws) {
+            if (did == 'ep')
+                continue;
+            draw = edge.draws[did];
+            for (i = 0; draw[i]; i = i + 1)
+                if (draw[i].type == 'F')
+                    draw[i].fn = fontmap[draw[i].ofn];
+        }
+        gt.drawedge (gt, [0 = vt;], edge);
+    }
+    for (nid in graph.nodes) {
+        node = graph.nodes[nid];
+        node.fontname = fontmap[node.attr.fontname];
+        for (did in node.draws) {
+            if (did == 'ep')
+                continue;
+            draw = node.draws[did];
+            for (i = 0; draw[i]; i = i + 1)
+                if (draw[i].type == 'F')
+                    draw[i].fn = fontmap[draw[i].ofn];
+        }
+        gt.drawnode (gt, [0 = vt;], node);
+    }
+    for (gid in graph.graphs) {
+        sgraph = graph.graphs[gid];
+        sgraph.fontname = fontmap[sgraph.graphattr.fontname];
+        for (did in sgraph.draws) {
+            if (did == 'ep')
+                continue;
+            draw = sgraph.draws[did];
+            for (i = 0; draw[i]; i = i + 1)
+                if (draw[i].type == 'F')
+                    draw[i].fn = fontmap[draw[i].ofn];
+        }
+        gt.drawsgraph (gt, [0 = vt;], sgraph);
+    }
+    graph.fontname = fontmap[graph.graphattr.fontname];
+    gt.drawsgraph (gt, [0 = vt;], graph);
+    gt.edgehandles = edgehandles;
+    vt.canvas = canvas;
+    destroywidget (pscanvas);
+    if (otype == 'printer' & getenv ('LEFTYWINSYS') ~= 'mswin')
+        system (concat (pr, ' ', name, '; rm ',name));
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/dotty_draw.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,596 @@
+#
+# dotty_draw: drawing functions and data structures
+#
+dotty.protogt.drawgraph = function (gt, views) {
+    local gid, eid, nid, graph;
+
+    graph = gt.graph;
+    gt.drawsgraph (gt, views, graph);
+    for (gid in graph.graphs)
+        gt.drawsgraph (gt, views, graph.graphs[gid]);
+    for (eid in graph.edges)
+        gt.drawedge (gt, views, graph.edges[eid]);
+    for (nid in graph.nodes)
+        gt.drawnode (gt, views, graph.nodes[nid]);
+};
+dotty.protogt.redrawgraph = function (gt, views) {
+    local vid;
+
+    for (vid in views)
+        clear (views[vid].canvas);
+    gt.drawgraph (gt, views);
+};
+dotty.protogt.setviewsize = function (views, r) {
+    local vid, vt, w2v, scale, attr;
+
+    for (vid in views) {
+        vt = views[vid];
+        vt.wrect = copy (r);
+        if (r[1].x == 0 | r[1].y == 0) {
+            attr = getwidgetattr (vt.scroll, [0 = 'size';]);
+            vt.wrect[1] = copy (attr.size);
+        }
+        if (vt.type == 'birdseye') {
+            attr = getwidgetattr (vt.scroll, [0 = 'size';]);
+            scale.x = (vt.wrect[1].x - vt.wrect[0].x) / attr.size.x;
+            scale.y = (vt.wrect[1].y - vt.wrect[0].y) / attr.size.y;
+            if (scale.x > 1 & scale.x > scale.y)
+                vt.w2v = scale.x;
+            else if (scale.y > 1)
+                vt.w2v = scale.y;
+            else
+                vt.w2v = 1;
+        }
+        w2v = vt.w2v;
+        vt.vsize = [
+            'x' = toint ((vt.wrect[1].x - vt.wrect[0].x) / w2v);
+            'y' = toint ((vt.wrect[1].y - vt.wrect[0].y) / w2v);
+        ];
+        setwidgetattr (vt.canvas, [
+            'window' = vt.wrect;
+            'viewport' = vt.vsize;
+        ]);
+        attr = getwidgetattr (vt.canvas, [0 = 'viewport';]);
+        vt.vsize = copy (attr.viewport);
+    }
+};
+dotty.protogt.setviewscale = function (views, factor) {
+    local vid, vt, w2v, attr;
+
+    for (vid in views) {
+        vt = views[vid];
+        if ((w2v = vt.w2v * factor) < 0.01) {
+            dotty.message (0, 'cannot zoom any closer');
+            return;
+        }
+        vt.w2v = w2v;
+        vt.vsize = [
+            'x' = (vt.wrect[1].x - vt.wrect[0].x) / w2v;
+            'y' = (vt.wrect[1].y - vt.wrect[0].y) / w2v;
+        ];
+        setwidgetattr (vt.canvas, ['viewport' = vt.vsize;]);
+        attr = getwidgetattr (vt.canvas, [0 = 'viewport';]);
+        vt.vsize = copy (attr.viewport);
+    }
+};
+dotty.protogt.setviewcenter = function (views, center) {
+    local vid, vt, pos;
+
+    for (vid in views) {
+        vt = views[vid];
+        pos = [
+            'x' = center.x * vt.vsize.x / (vt.wrect[1].x - vt.wrect[0].x);
+            'y' = (
+                (vt.wrect[1].y - center.y) * vt.vsize.y /
+                (vt.wrect[1].y - vt.wrect[0].y)
+            );
+        ];
+        setwidgetattr (vt.scroll, ['childcenter' = pos;]);
+    }
+};
+#
+# draw graph components
+#
+dotty.protogt.drawsgraph = function (gt, views, sgraph) {
+    sgraph.draw = 1;
+    if (~sgraph.draws)
+        return;
+    gt.execalldraw (gt, views, null, sgraph.draws, [
+        'fontname' = sgraph.fontname;
+        'fontsize' = sgraph.fontsize;
+        'fontcolor' = sgraph.fontcolor;
+        'drawcolor' = sgraph.drawcolor;
+        'fillcolor' = sgraph.fillcolor;
+    ]);
+};
+dotty.protogt.undrawsgraph = function (gt, views, sgraph) {
+    sgraph.drawn = 0;
+    if (~sgraph.draws)
+        return;
+    gt.execalldraw (gt, views, null, sgraph.draws, [
+        'fontname' = sgraph.fontname;
+        'fontsize' = sgraph.fontsize;
+        'fontcolor' = sgraph.fontcolor;
+        'drawcolor' = 0;
+        'fillcolor' = 0;
+    ]);
+};
+dotty.protogt.drawnode = function (gt, views, node) {
+    local vid;
+
+    node.drawn = 1;
+    if (~node.draws)
+        return;
+    gt.execalldraw (gt, views, node, node.draws, [
+        'fontname' = node.fontname;
+        'fontsize' = node.fontsize;
+        'fontcolor' = node.fontcolor;
+        'drawcolor' = node.drawcolor;
+        'fillcolor' = node.fillcolor;
+    ]);
+    for (vid in views)
+        setpick (views[vid].canvas, node, node.rect);
+};
+dotty.protogt.undrawnode = function (gt, views, node) {
+    local vid;
+
+    if (~node.drawn)
+        return;
+    node.drawn = 0;
+    if (~node.pos)
+        return;
+    gt.execalldraw (gt, views, node, node.draws, [
+        'nooverride' = 1;
+        'fontname' = node.fontname;
+        'fontsize' = node.fontsize;
+        'fontcolor' = 0;
+        'drawcolor' = 0;
+        'fillcolor' = 0;
+    ]);
+    for (vid in views)
+        clearpick (views[vid].canvas, node);
+};
+dotty.protogt.movenode = function (gt, node, pos) {
+    local dp, eid, edge;
+
+    dp.x = pos.x - node.pos.x;
+    dp.y = pos.y - node.pos.y;
+    gt.undrawnode (gt, gt.views, node);
+    node.pos.x = pos.x;
+    node.pos.y = pos.y;
+    gt.movenodedraw (node.draws, dp);
+    for (eid in node.edges) {
+        edge = node.edges[eid];
+        gt.undrawedge (gt, gt.views, edge);
+        gt.moveedgedraw (edge.draws, edge.tail.pos, edge.head.pos);
+        gt.drawedge (gt, gt.views, edge);
+    }
+    gt.drawnode (gt, gt.views, node);
+};
+dotty.protogt.drawedge = function (gt, views, edge) {
+    local vid, canvas;
+
+    edge.drawn = 1;
+    if (~edge.draws)
+        return;
+    gt.execalldraw (gt, views, edge, edge.draws, [
+        'fontname' = edge.fontname;
+        'fontsize' = edge.fontsize;
+        'fontcolor' = edge.fontcolor;
+        'drawcolor' = edge.drawcolor;
+        'fillcolor' = edge.fillcolor;
+    ]);
+    for (vid in views) {
+        canvas = views[vid].canvas;
+        if (gt.edgehandles == 0 | ~edge.draws.ep)
+            continue;
+        arc (canvas, edge, edge.draws.ep, ['x' = 5; 'y' = 5;], ['color' = 1;]);
+    }
+};
+dotty.protogt.undrawedge = function (gt, views, edge) {
+    local vid, canvas;
+
+    if (~edge.drawn)
+        return;
+    edge.drawn = 0;
+    if (~edge.draws)
+        return;
+    gt.execalldraw (gt, views, edge, edge.draws, [
+        'nooverride' = 1;
+        'fontname' = edge.fontname;
+        'fontsize' = edge.fontsize;
+        'fontcolor' = 0;
+        'drawcolor' = 0;
+        'fillcolor' = 0;
+    ]);
+    for (vid in views) {
+        canvas = views[vid].canvas;
+        if (gt.edgehandles == 0 | ~edge.draws.ep)
+            continue;
+        arc (canvas, edge, edge.draws.ep, ['x' = 5; 'y' = 5;], ['color' = 0;]);
+        clearpick (canvas, edge);
+    }
+};
+#
+# draw directives
+#
+dotty.protogt.execalldraw = function (gt, views, obj, draws, gc) {
+    local vid, vt, did, draw, i, func;
+
+    for (vid in views) {
+        vt = views[vid];
+        for (did in draws) {
+            if (did == 'ep')
+                continue;
+            draw = draws[did];
+            for (i = 0; draw[i]; i = i + 1)
+                if ((func = gt.drawfunc[draw[i].type]))
+                    func (gt, vt.canvas, obj, draw[i], gc);
+        }
+    }
+};
+dotty.protogt.drawfunc.E = function (gt, canvas, obj, data, gc) {
+    arc (canvas, obj, data.c, data.s, [
+        'color' = gc.fillcolor; 'style' = gc.style; 'width' = gc.width;
+        'fill' = 'on';
+    ]);
+    arc (canvas, obj, data.c, data.s, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.e = function (gt, canvas, obj, data, gc) {
+    arc (canvas, obj, data.c, data.s, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.P = function (gt, canvas, obj, data, gc) {
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.fillcolor; 'style' = gc.style; 'width' = gc.width;
+        'fill' = 'on';
+    ]);
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.p = function (gt, canvas, obj, data, gc) {
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.L = function (gt, canvas, obj, data, gc) {
+    polygon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.b = function (gt, canvas, obj, data, gc) {
+    splinegon (canvas, obj, data.ps, [
+        'color' = gc.fillcolor; 'style' = gc.style; 'width' = gc.width;
+        'fill' = 'on';
+    ]);
+};
+dotty.protogt.drawfunc.B = function (gt, canvas, obj, data, gc) {
+    splinegon (canvas, obj, data.ps, [
+        'color' = gc.drawcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.T = function (gt, canvas, obj, data, gc) {
+    text (canvas, obj, data.p, data.s, gc.fontname, gc.fontsize, data.j, [
+        'color' = gc.fontcolor; 'style' = gc.style; 'width' = gc.width;
+    ]);
+};
+dotty.protogt.drawfunc.C = function (gt, canvas, obj, data, gc) {
+    if (gc.nooverride ~= 1)
+        gc.fillcolor = data.fillcolor;
+};
+dotty.protogt.drawfunc.c = function (gt, canvas, obj, data, gc) {
+    if (gc.nooverride ~= 1) {
+        gc.drawcolor = data.drawcolor;
+        gc.fontcolor = data.drawcolor;
+    }
+};
+dotty.protogt.drawfunc.F = function (gt, canvas, obj, data, gc) {
+    gc.fontname = data.fn;
+    gc.fontsize = data.fs;
+};
+dotty.protogt.drawfunc.S = function (gt, canvas, obj, data, gc) {
+    gc.style = data.style;
+    gc.width = data.width;
+};
+dotty.protogt.movenodedraw = function (draws, dp) {
+    local did, draw, i, j;
+
+    for (did in draws) {
+        if (did == 'ep')
+            continue;
+        draw = draws[did];
+        for (i = 0; draw[i]; i = i + 1) {
+            if (draw[i].type == 'E' | draw[i].type == 'e') {
+                draw[i].c.x = draw[i].c.x + dp.x;
+                draw[i].c.y = draw[i].c.y + dp.y;
+            } else if (draw[i].type == 'P' | draw[i].type == 'p') {
+                for (j = 1; draw[i].ps[j]; j = j + 1) {
+                    draw[i].ps[j].x = draw[i].ps[j].x + dp.x;
+                    draw[i].ps[j].y = draw[i].ps[j].y + dp.y;
+                }
+            } else if (draw[i].type == 'L' | draw[i].type == 'B') {
+                for (j = 0; draw[i].ps[j]; j = j + 1) {
+                    draw[i].ps[j].x = draw[i].ps[j].x + dp.x;
+                    draw[i].ps[j].y = draw[i].ps[j].y + dp.y;
+                }
+            } else if (draw[i].type == 'T') {
+                draw[i].p.x = draw[i].p.x + dp.x;
+                draw[i].p.y = draw[i].p.y + dp.y;
+            }
+        }
+    }
+};
+dotty.protogt.moveedgedraw = function (draws, tp, hp) {
+    local draws2, did;
+
+    for (did in draws)
+        draws2[did] = draws[did];
+    for (did in draws2)
+        remove (did, draws);
+    draws[0] = [
+        0 = [
+            'type' = 'L';
+            'n' = 2;
+            'ps' = [
+                0 = copy (tp);
+                1 = copy (hp);
+            ];
+        ];
+        'ep' = ['x' = (tp.x + hp.x) / 2; 'y' = (tp.y + hp.y) / 2;];
+    ];
+};
+dotty.protogt.simplenodedraw = function (node, c, s) {
+    local draws;
+
+    if (node.attr.shape == 'ellipse')
+        draws[0] = [
+            0 = [
+                'type' = 'e';
+                'c' = copy (c);
+                's' = ['x' = s.x / 2; 'y' = s.y / 2;];
+            ];
+        ];
+    else
+        draws[0] = [
+            0 = [
+                'type' = 'p';
+                'n' = 5;
+                'ps' = [
+                    0 = ['x' = c.x - s.x / 2; 'y' = c.y - s.y / 2;];
+                    1 = ['x' = c.x + s.x / 2; 'y' = c.y - s.y / 2;];
+                    2 = ['x' = c.x + s.x / 2; 'y' = c.y + s.y / 2;];
+                    3 = ['x' = c.x - s.x / 2; 'y' = c.y + s.y / 2;];
+                    4 = ['x' = c.x - s.x / 2; 'y' = c.y - s.y / 2;];
+                ];
+            ];
+        ];
+    return draws;
+};
+dotty.protogt.simpleedgedraw = function (edge, tp, hp) {
+    local draws;
+
+    draws[0] = [
+        0 = [
+            'type' = 'L';
+            'n' = 2;
+            'ps' = [
+                0 = copy (tp);
+                1 = copy (hp);
+            ];
+        ];
+        'ep' = ['x' = (tp.x + hp.x) / 2; 'y' = (tp.y + hp.y) / 2;];
+    ];
+    return draws;
+};
+#
+# utilities
+#
+dotty.protogt.getcolor = function (views, name) {
+    local vid, vt, color, t;
+
+    for (vid in views) {
+        vt = views[vid];
+        if (~(color >= 0)) {
+            if (~(vt.colors[name] >= 0))
+                color = (vt.colors[name] = vt.colorn);
+            else {
+                color = vt.colors[name];
+                break;
+            }
+        } else if (~(vt.colors[name] >= 0))
+            vt.colors[name] = color;
+        else if (vt.colors[name] ~= color)
+            dotty.message (0, concat ('inconsistent color ids for ', name));
+        if (setwidgetattr (vt.canvas, ['color' = [color = name;];]) ~= 1) {
+            t = split (name, ' ');
+            if (tablesize (t) ~= 3 |
+                    setwidgetattr (vt.canvas, ['color' = [color = [
+                        'h' = ston (t[0]); 's' = ston (t[1]); 'v' = ston (t[2]);
+                    ];];]) ~= 1) {
+                dotty.message (0, concat ('unknown color ', name, ' using #1'));
+                return 1;
+            }
+        }
+        vt.colorn = color + 1;
+    }
+    return color;
+};
+dotty.protogt.setbgcolor = function (views, name) {
+    local vid, vt, t;
+
+    for (vid in views) {
+        vt = views[vid];
+        if (setwidgetattr (vt.canvas, ['color' = [0 = name;];]) ~= 1) {
+            t = split (name, ' ');
+            if (tablesize (t) ~= 3 |
+                    setwidgetattr (vt.canvas, ['color' = [0 = [
+                        'h' = ston (t[0]); 's' = ston (t[1]); 'v' = ston (t[2]);
+                    ];];]) ~= 1) {
+                dotty.message (0, concat ('unknown bgcolor ', name));
+                return;
+            }
+        }
+        vt.colors['_bgcolor_'] = name;
+    }
+};
+dotty.protogt.unpacksgraphattr = function (gt, sgraph) {
+    local attr;
+
+    attr = sgraph.graphattr;
+    if (dotty.fontmap[attr.fontname])
+        sgraph[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+    else
+        sgraph[dotty.keys.fname] = attr.fontname;
+    sgraph[dotty.keys.fsize] = ston (attr.fontsize);
+    sgraph[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+    if (attr.color)
+        sgraph[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+    else
+        sgraph[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+    if (attr.style == 'filled') {
+        if (attr.fillcolor)
+            sgraph[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.fillcolor);
+        else if (attr.color)
+            sgraph[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            sgraph[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+    }
+};
+dotty.protogt.unpacknodeattr = function (gt, node) {
+    local attr;
+
+    attr = node.attr;
+    if (dotty.fontmap[attr.fontname])
+        node[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+    else
+        node[dotty.keys.fname] = attr.fontname;
+    node[dotty.keys.fsize] = ston (attr.fontsize);
+    node[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+    if (attr.color)
+        node[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+    else
+        node[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+    if (attr.style == 'filled') {
+        if (attr.fillcolor)
+            node[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.fillcolor);
+        else if (attr.color)
+            node[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            node[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+    }
+};
+dotty.protogt.unpackedgeattr = function (gt, edge) {
+    local attr;
+
+    attr = edge.attr;
+    if (dotty.fontmap[attr.fontname])
+        edge[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+    else
+        edge[dotty.keys.fname] = attr.fontname;
+    edge[dotty.keys.fsize] = ston (attr.fontsize);
+    edge[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+    if (attr.color)
+        edge[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+    else
+        edge[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+    if (attr.style == 'filled') {
+        if (attr.fillcolor)
+            edge[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.fillcolor);
+        else if (attr.color)
+            edge[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            edge[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+    }
+};
+dotty.protogt.unpackattr = function (gt) {
+    local gid, sgraph, nid, node, eid, edge, graph, attr;
+
+    graph = gt.graph;
+    attr = graph.graphattr;
+    if (dotty.fontmap[attr.fontname])
+        graph[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+    else
+        graph[dotty.keys.fname] = attr.fontname;
+    graph[dotty.keys.fsize] = ston (attr.fontsize);
+    graph[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+    if (attr.color)
+        graph[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+    else
+        graph[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+    if (attr.style == 'filled') {
+        if (attr.fillcolor)
+            graph[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.fillcolor);
+        else if (attr.color)
+            graph[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            graph[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+    }
+    if (attr.bgcolor & attr.bgcolor ~= '')
+        gt.setbgcolor (gt.views, attr.bgcolor);
+    for (gid in graph.graphdict) {
+        sgraph = graph.graphs[graph.graphdict[gid]];
+        attr = sgraph.graphattr;
+        if (dotty.fontmap[attr.fontname])
+            sgraph[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+        else
+            sgraph[dotty.keys.fname] = attr.fontname;
+        sgraph[dotty.keys.fsize] = ston (attr.fontsize);
+        sgraph[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+        if (attr.color)
+            sgraph[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            sgraph[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+        if (attr.style == 'filled') {
+            if (attr.fillcolor)
+                sgraph[dotty.keys.bcolor] = gt.getcolor (
+                    gt.views, attr.fillcolor
+                );
+            else if (attr.color)
+                sgraph[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+            else
+                sgraph[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+        }
+    }
+    for (nid in graph.nodedict) {
+        node = graph.nodes[graph.nodedict[nid]];
+        attr = node.attr;
+        if (dotty.fontmap[attr.fontname])
+            node[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+        else
+            node[dotty.keys.fname] = attr.fontname;
+        node[dotty.keys.fsize] = ston (attr.fontsize);
+        node[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+        if (attr.color)
+            node[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            node[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+        if (attr.style == 'filled') {
+            if (attr.fillcolor)
+                node[dotty.keys.bcolor] = gt.getcolor (
+                    gt.views, attr.fillcolor
+                );
+            else if (attr.color)
+                node[dotty.keys.bcolor] = gt.getcolor (gt.views, attr.color);
+            else
+                node[dotty.keys.bcolor] = gt.getcolor (gt.views, 'lightgrey');
+        }
+    }
+    for (eid in graph.edges) {
+        edge = graph.edges[eid];
+        attr = edge.attr;
+        if (dotty.fontmap[attr.fontname])
+            edge[dotty.keys.fname] = dotty.fontmap[attr.fontname];
+        else
+            edge[dotty.keys.fname] = attr.fontname;
+        edge[dotty.keys.fsize] = ston (attr.fontsize);
+        edge[dotty.keys.fcolor] = gt.getcolor (gt.views, attr.fontcolor);
+        if (attr.color)
+            edge[dotty.keys.dcolor] = gt.getcolor (gt.views, attr.color);
+        else
+            edge[dotty.keys.dcolor] = gt.getcolor (gt.views, 'black');
+    }
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/dotty_edit.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,593 @@
+#
+# dotty_edit: editing functions and data structures
+#
+dotty.protogt.getnodesbyattr = function (gt, key, val) {
+    local nid, node, nlist;
+
+    nlist = [];
+    for (nid in gt.graph.nodes) {
+        node = gt.graph.nodes[nid];
+        if (node.attr[key] == val)
+            nlist[nid] = node;
+    }
+    return nlist;
+};
+dotty.protogt.reachablenodes = function (gt, node) {
+    local nlist, stack, eid, edge, i;
+
+    stack[0] = node;
+    i = 1;
+    while (i > 0) {
+        node = stack[i - 1];
+        i = i - 1;
+        nlist[node.nid] = node;
+        for (eid in node.edges) {
+            edge = node.edges[eid];
+            if (~nlist[edge.head.nid]) {
+                nlist[edge.head.nid] = edge.head;
+                stack[i] = edge.head;
+                i = i + 1;
+            }
+        }
+    }
+    return nlist;
+};
+dotty.protogt.mergegraph = function (gt, graph, show) {
+    local nameid, onode, pos, size, eid, eid2, tnode, hnode, oedge;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    for (nameid in graph.nodedict) {
+        pos = null;
+        size = null;
+        onode = graph.nodes[graph.nodedict[nameid]];
+        if (onode.pos)
+            pos = node.pos;
+        if (onode.size)
+            size = node.size;
+        if (~(gt.graph.nodedict[nameid] >= 0)) {
+            pos = null;
+            size = null;
+            if (onode.pos)
+                pos = node.pos;
+            if (onode.size)
+                size = node.size;
+            gt.insertnode (gt, pos, size, nameid, onode.attr, show);
+        }
+    }
+    for (eid in graph.edges) {
+        oedge = graph.edges[eid];
+        tnode = gt.graph.nodes[gt.graph.nodedict[oedge.tail.name]];
+        hnode = gt.graph.nodes[gt.graph.nodedict[oedge.head.name]];
+        for (eid2 in tnode.edges)
+            if (
+                tnode.edges[eid2].tail == tnode &
+                tnode.edges[eid2].head == hnode
+            ) {
+                oedge = null;
+                break;
+            }
+        if (oedge)
+            gt.insertedge (gt, tnode, null, hnode, null, oedge.attr, show);
+    }
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.insertsgraph = function (gt, name, attr, show) {
+    local gid, sgraph, aid;
+
+    if (~gt)
+        return null;
+    gid = gt.graph.maxgid;
+    if (~name) {
+        while (gt.graph.graphdict[(name = concat ('g', gid))] >= 0)
+            gid = gid + 1;
+    } else if (gt.graph.graphdict[name]) {
+        dotty.message (0, concat ('graph: ', name, ' exists'));
+        return null;
+    }
+    gt.graph.graphdict[name] = gid;
+    gt.graph.maxgid = gid + 1;
+    gt.graph.graphs[gid] = [
+        dotty.keys.gid   = gid;
+        dotty.keys.name  = name;
+        dotty.keys.gattr = copy (gt.graph.graphattr);
+        dotty.keys.nattr = copy (gt.graph.nodeattr);
+        dotty.keys.eattr = copy (gt.graph.edgeattr);
+    ];
+    sgraph = gt.graph.graphs[gid];
+    if (~attr)
+        attr = [];
+    if (~attr.label)
+        attr.label = '\N';
+    for (aid in attr)
+        sgraph.graphattr[aid] = attr[aid];
+    gt.unpacksgraphattr (gt, sgraph);
+    if (show)
+        gt.drawsgraph (gt, gt.views, sgraph);
+    return sgraph;
+};
+dotty.protogt.removesgraph = function (gt, sgraph) {
+    gt.undrawsgraph (gt, gt.views, sgraph);
+    remove (sgraph.name, gt.graph.graphdict);
+    remove (sgraph.gid, gt.graph.graphs);
+};
+dotty.protogt.insertnode = function (gt, pos, size, name, attr, show) {
+    local nid, node, aid;
+
+    nid = gt.graph.maxnid;
+    if (~name) {
+        while (gt.graph.nodedict[(name = concat ('n', nid))] >= 0)
+            nid = nid + 1;
+    } else if (gt.graph.nodedict[name] >= 0) {
+        dotty.message (0, concat ('node: ', name, ' exists'));
+        return null;
+    }
+    gt.graph.nodedict[name] = nid;
+    gt.graph.maxnid = nid + 1;
+    gt.graph.nodes[nid] = [
+        dotty.keys.nid   = nid;
+        dotty.keys.name  = name;
+        dotty.keys.attr  = copy (gt.graph.nodeattr);
+        dotty.keys.edges = [];
+    ];
+    node = gt.graph.nodes[nid];
+    if (~attr)
+        attr = [];
+    if (~attr.label)
+        attr.label = '\N';
+    for (aid in attr)
+        node.attr[aid] = attr[aid];
+    gt.unpacknodeattr (gt, node);
+    if (~pos)
+        pos = ['x' = 10; 'y' = 10;];
+    node[dotty.keys.pos] = copy (pos);
+    if (~size)
+        size = ['x' = strlen (attr.label) * 30; 'y' = 30;];
+    if (size.x == 0)
+        size.x = 30;
+    node[dotty.keys.size] = copy (size);
+    node[dotty.keys.rect] = [
+        0 = ['x' = pos.x - size.x / 2; 'y' = pos.y - size.y / 2;];
+        1 = ['x' = pos.x + size.x / 2; 'y' = pos.y + size.y / 2;];
+    ];
+    node.draws = gt.simplenodedraw (node, pos, size);
+    if (show)
+        gt.drawnode (gt, gt.views, node);
+    if (~gt.noundo) {
+        gt.startadd2undo (gt);
+        gt.currundo.inserted.nodes[nid] = node;
+        gt.endadd2undo (gt);
+    }
+    return node;
+};
+dotty.protogt.removenode = function (gt, node) {
+    local eid, list, edge, gid;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    for (eid in node.edges)
+        list[eid] = node.edges[eid];
+    for (eid in list)
+        gt.removeedge (gt, list[eid]);
+    gt.undrawnode (gt, gt.views, node);
+    for (gid in gt.graph.graphs)
+        remove (node.nid, gt.graph.graphs[gid].nodes);
+    remove (node.name, gt.graph.nodedict);
+    remove (node.nid, gt.graph.nodes);
+    if (~gt.noundo) {
+        gt.currundo.deleted.nodes[node.nid] = node;
+        gt.endadd2undo (gt);
+    }
+};
+dotty.protogt.insertedge = function (
+    gt, nodea, porta, nodeb, portb, attr, show
+) {
+    local eid, edge, aid, tport, hport;
+
+    if (~nodea | ~nodeb)
+        return null;
+    if (porta)
+        tport = porta;
+    if (portb)
+        hport = portb;
+    eid = gt.graph.maxeid;
+    while (gt.graph.edges[eid])
+        eid = eid + 1;
+    gt.graph.maxeid = eid + 1;
+    gt.graph.edges[eid] = [
+        dotty.keys.eid   = eid;
+        dotty.keys.tail  = nodea;
+        dotty.keys.tport = porta;
+        dotty.keys.head  = nodeb;
+        dotty.keys.hport = portb;
+        dotty.keys.attr  = copy (gt.graph.edgeattr);
+    ];
+    edge = gt.graph.edges[eid];
+    if (~attr)
+        attr = [];
+    for (aid in attr)
+        edge.attr[aid] = attr[aid];
+    nodea.edges[eid] = edge;
+    nodeb.edges[eid] = edge;
+    gt.unpackedgeattr (gt, edge);
+    edge.draws = gt.simpleedgedraw (edge, nodea.pos, nodeb.pos);
+    if (show)
+        gt.drawedge (gt, gt.views, edge);
+    if (~gt.noundo) {
+        gt.startadd2undo (gt);
+        gt.currundo.inserted.edges[eid] = edge;
+        gt.endadd2undo (gt);
+    }
+    return edge;
+};
+dotty.protogt.removeedge = function (gt, edge) {
+    local head, tail;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    if (edge.head.attr.support == 1)
+        head = edge.head;
+    if (edge.tail.attr.support == 1)
+        if (head ~= edge.tail)
+            tail = edge.tail;
+    gt.undrawedge (gt, gt.views, edge);
+    remove (edge.eid, edge.head.edges);
+    remove (edge.eid, edge.tail.edges);
+    remove (edge.eid, gt.graph.edges);
+    if (head & tablesize (head.edges) == 0)
+        gt.removenode (gt, head);
+    if (tail & tablesize (tail.edges) == 0)
+        gt.removenode (gt, tail);
+    if (~gt.noundo) {
+        gt.currundo.deleted.edges[edge.eid] = edge;
+        gt.endadd2undo (gt);
+    }
+};
+dotty.protogt.swapedgeids = function (gt, edge1, edge2) {
+    local eid1, eid2;
+
+    if (edge1.eid == edge2.eid)
+        return;
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    eid1 = edge1.eid;
+    eid2 = edge2.eid;
+    gt.graph.edges[eid1] = edge2;
+    gt.graph.edges[eid2] = edge1;
+    remove (eid1, edge1.tail.edges);
+    remove (eid1, edge1.head.edges);
+    remove (eid2, edge2.tail.edges);
+    remove (eid2, edge2.head.edges);
+    edge1.tail.edges[eid2] = edge1;
+    edge1.head.edges[eid2] = edge1;
+    edge2.tail.edges[eid1] = edge2;
+    edge2.head.edges[eid1] = edge2;
+    edge1.eid = eid2;
+    edge2.eid = eid1;
+    if (~gt.noundo) {
+        gt.currundo.swapped.edges[eid1] = edge1;
+        gt.currundo.swapped.edges[eid2] = edge2;
+        gt.endadd2undo (gt);
+    }
+};
+dotty.protogt.removesubtree = function (gt, obj) {
+    local nlist, node, head, nid, edge, eid;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    if (obj.nid >= 0)
+        node = obj;
+    else if (obj.eid >= 0) {
+        node = obj.head;
+        gt.removeedge (gt, obj);
+        if (~gt.graph.nodes[node.nid]) {
+            if (~gt.noundo)
+                gt.endadd2undo (gt);
+            return;
+        }
+        for (eid in node.edges) {
+            edge = node.edges[eid];
+            if (edge.head == node & edge.tail ~= node) {
+                if (~gt.noundo)
+                    gt.endadd2undo (gt);
+                return;
+            }
+        }
+    } else {
+        dotty.message (0, 'bad object type in gt.removesubtree');
+        return;
+    }
+    nlist = [node.nid = node;];
+    while (node) {
+        for (eid in node.edges) {
+            head = node.edges[eid].head;
+            if (head ~= node)
+                nlist[head.nid] = head;
+        }
+        gt.removenode (gt, node);
+        remove (node.nid, nlist);
+        node = null;
+        for (nid in nlist) {
+            node = nlist[nid];
+            for (eid in node.edges) {
+                edge = node.edges[eid];
+                if (edge.head == node & edge.tail ~= node) {
+                    node = null;
+                    break;
+                }
+            }
+            if (node)
+                break;
+        }
+    }
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.removenodesbyattr = function (gt, key, val) {
+    local nlist, nid;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    nlist = gt.getnodesbyattr (gt, key, val);
+    for (nid in nlist)
+        gt.removenode (gt, nlist[nid]);
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.removesubtreesbyattr = function (gt, key, val) {
+    local nlist, nid;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    nlist = gt.getnodesbyattr (gt, key, val);
+    for (nid in nlist)
+        if (gt.graph.nodes[nid])
+            gt.removesubtree (gt, nlist[nid]);
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.groupnodes = function (
+    gt, nlist, gnode, pos, size, attr, keepmulti, show
+) {
+    local nid, node, elist, eid, edge, nodea, nodeb, inlist, outlist;
+
+    if (~nlist | tablesize (nlist) == 0)
+        return;
+    if (gnode.attr.support) {
+        dotty.message (0, 'cannot group nodes in a support node');
+        return;
+    }
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    if (~gnode)
+        gnode = gt.insertnode (gt, pos, size, null, attr, show);
+    inlist = [];
+    outlist = [];
+    for (nid in nlist) {
+        if ((node = nlist[nid]) == gnode)
+            continue;
+        elist = [];
+        for (eid in node.edges)
+            elist[eid] = node.edges[eid];
+        for (eid in elist) {
+            edge = elist[eid];
+            if (edge.head == node) {
+                nodea = edge.tail;
+                nodeb = gnode;
+                if (~keepmulti) {
+                    if (inlist[nodea.nid])
+                        continue;
+                    inlist[nodea.nid] = nodea;
+                    if (nodea == gnode)
+                        outlist[nodea.nid] = nodea;
+                }
+            } else {
+                nodea = gnode;
+                nodeb = edge.head;
+                if (~keepmulti) {
+                    if (outlist[nodeb.nid])
+                        continue;
+                    outlist[nodeb.nid] = nodeb;
+                    if (nodeb == gnode)
+                        inlist[nodeb.nid] = nodeb;
+                }
+            }
+            gt.insertedge (gt, nodea, null, nodeb, null, edge.attr, show);
+        }
+        gt.removenode (gt, node);
+    }
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+    return gnode;
+};
+dotty.protogt.groupnodesbyattr = function (
+    gt, key, val, attr, keepmulti, show
+) {
+    local nlist, nid, pos, size;
+
+    pos = null;
+    size = null;
+    nlist = gt.getnodesbyattr (gt, key, val);
+    if (show)
+        for (nid in nlist) {
+            pos = nlist[nid].pos;
+            size = nlist[nid].size;
+            break;
+        }
+    return gt.groupnodes (gt, nlist, null, pos, size, attr, keepmulti, show);
+};
+dotty.protogt.cut = function (gt, obj, set, mode, op) {
+    local clipgt, list, node, nid, edge, eid, clipnode;
+
+    clipgt = dotty.clipgt;
+    clipgt.graph = copy (dotty.protogt.graph);
+    if (obj.eid >= 0) { # it's an edge
+        list.edges[obj.eid] = obj;
+        node = obj.head;
+    } else if (obj.nid >= 0) {
+        list.nodes[obj.nid] = obj;
+        node = obj;
+        for (eid in node.edges)
+            list.edges[eid] = node.edges[eid];
+    } else {
+        dotty.message (0, 'unknown object type in gt.cut');
+        return;
+    }
+    if (set == 'reachable') {
+        list.nodes = gt.reachablenodes (gt, node);
+        for (nid in list.nodes) {
+            node = list.nodes[nid];
+            for (eid in node.edges) {
+                edge = node.edges[eid];
+                list.edges[edge.eid] = edge;
+            }
+        }
+    }
+    if (mode == 'support') {
+        for (eid in list.edges) {
+            edge = list.edges[eid];
+            if (~list.nodes[edge.tail.nid]) {
+                list.support[edge.tail.nid] = edge.tail;
+                list.nodes[edge.tail.nid] = edge.tail;
+            }
+            if (~list.nodes[edge.head.nid]) {
+                list.support[edge.head.nid] = edge.head;
+                list.nodes[edge.head.nid] = edge.head;
+            }
+        }
+    }
+    for (nid = 0; nid < gt.graph.maxnid; nid = nid + 1) {
+        if (~list.nodes[nid])
+            continue;
+        node = list.nodes[nid];
+        clipnode = gt.insertnode (clipgt, null, null, node.name, node.attr, 0);
+        if (list.support[nid])
+            clipnode.support = 1;
+        list.clipnodes[nid] = clipnode;
+    }
+    for (eid = 0; eid < gt.graph.maxeid; eid = eid + 1) {
+        if (~list.edges[eid])
+            continue;
+        edge = list.edges[eid];
+        if (~list.nodes[edge.tail.nid] | ~list.nodes[edge.head.nid])
+            continue;
+        gt.insertedge (
+            clipgt, list.clipnodes[edge.tail.nid], null,
+            list.clipnodes[edge.head.nid], null, edge.attr, 0
+        );
+    }
+    if (op ~= 'cut')
+        return;
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    for (eid in list.edges)
+        gt.removeedge (gt, list.edges[eid]);
+    for (nid in list.nodes)
+        if (~list.support[nid] & gt.graph.nodes[nid])
+            gt.removenode (gt, list.nodes[nid]);
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.paste = function (gt, pos, show) {
+    local clipgt, offset, center, nid, node, eid, edge, nodes;
+
+    if (~gt.noundo)
+        gt.startadd2undo (gt);
+    clipgt = dotty.clipgt;
+    if (clipgt.graph.rect)
+        center = [
+            'x' = (clipgt.graph.rect[1].x + clipgt.graph.rect[0].x) / 2;
+            'y' = (clipgt.graph.rect[1].y + clipgt.graph.rect[0].y) / 2;
+        ];
+    else
+        center = pos;
+    offset = [
+        'x' = center.x - pos.x;
+        'y' = center.y - pos.y;
+    ];
+    for (nid = 0; clipgt.graph.nodes[nid]; nid = nid + 1) {
+        node = clipgt.graph.nodes[nid];
+        if (node.attr.label == '\N' | ~node.attr.label)
+            node.attr.label = node.name;
+        if (node.support == 1)
+            nodes[nid] = gt.insertnode (gt, [
+                'x' = node.pos.x - offset.x;
+                'y' = node.pos.y - offset.y;
+            ], null, null, [
+                'support' = 1; 'shape' = 'circle';
+                'label' = ''; 'width' = 0.2;
+            ], show);
+        else
+            nodes[nid] = gt.insertnode (gt, [
+                'x' = node.pos.x - offset.x;
+                'y' = node.pos.y - offset.y;
+            ], node.size, null, node.attr, show);
+    }
+    for (eid = 0; clipgt.graph.edges[eid]; eid = eid + 1) {
+        edge = clipgt.graph.edges[eid];
+        gt.insertedge (
+            gt, nodes[edge.tail.nid], null,
+            nodes[edge.head.nid], null, edge.attr, show
+        );
+    }
+    if (~gt.noundo)
+        gt.endadd2undo (gt);
+};
+dotty.protogt.startadd2undo = function (gt) {
+    if (~gt.undoarray.level)
+        gt.currundo = (
+            gt.undoarray.entries[tablesize (gt.undoarray.entries)] = []
+        );
+    gt.undoarray.level = gt.undoarray.level + 1;
+};
+dotty.protogt.endadd2undo = function (gt) {
+    gt.undoarray.level = gt.undoarray.level - 1;
+};
+dotty.protogt.undo = function (gt, show) {
+    local entry, n, eid, edge, nid, node, edges;
+
+    if ((n = tablesize (gt.undoarray.entries)) < 1)
+        return;
+    entry = gt.undoarray.entries[n - 1];
+    remove (n - 1, gt.undoarray.entries);
+    remove ('currundo', gt);
+    gt.noundo = 1;
+    # hardwire nodes and edges back with the same id's as the originals
+    for (nid in entry.deleted.nodes) {
+        node = entry.deleted.nodes[nid];
+        gt.graph.nodedict[node.name] = node.nid;
+        gt.graph.nodes[node.nid] = node;
+        node.edges = [];
+        if (show)
+            gt.drawnode (gt, gt.views, node);
+    }
+    for (eid in entry.deleted.edges) {
+        edge = entry.deleted.edges[eid];
+        gt.graph.edges[edge.eid] = edge;
+        edge.head.edges[edge.eid] = edge;
+        edge.tail.edges[edge.eid] = edge;
+        if (show)
+            gt.drawedge (gt, gt.views, edge);
+    }
+    if (entry.swapped.edges) {
+        if (tablesize (entry.swapped.edges) == 2) {
+            n = 0;
+            for (eid in entry.swapped.edges) {
+                edges[n] = entry.swapped.edges[eid];
+                n = n + 1;
+            }
+            gt.swapedgeids (gt, edges[0], edges[1]);
+        } else
+            dotty.message (0, 'cannot handle undoing swap of > 2 edges');
+    }
+    for (eid in entry.inserted.edges) {
+        edge = entry.inserted.edges[eid];
+        gt.removeedge (gt, edge);
+    }
+    for (nid in entry.inserted.nodes) {
+        node = entry.inserted.nodes[nid];
+        gt.removenode (gt, node);
+    }
+    gt.noundo = 0;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/dotty_layout.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,449 @@
+#
+# dotty_layout: layout functions and data structures
+#
+dotty.grablserver = function (lserver) {
+    local fd;
+
+    if (~dotty.lservers[lserver] | tablesize (dotty.lservers[lserver]) == 0) {
+        if (~((fd = openio ('pipe', lserver, 'r+', '%e -Txdot')) >= 0)) {
+            dotty.message (0, concat ('cannot start ', lserver));
+            return null;
+        }
+        dotty.lservers[lserver][fd] = [
+            'fd' = fd;
+            'count' = 0;
+        ];
+    }
+    for (fd in dotty.lservers[lserver]) {
+        dotty.lservers[lserver][fd].count = dotty.lservers[
+            lserver
+        ][fd].count + 1;
+        dotty.lservers.inuse[fd] = dotty.lservers[lserver][fd];
+        remove (fd, dotty.lservers[lserver]);
+        return fd;
+    }
+};
+dotty.releaselserver = function (lserver, fd, state) {
+    if (state == 'bad' | dotty.lservers.inuse[fd].count > 40) {
+        closeio (fd, 'kill');
+        remove (fd, dotty.lservers.inuse);
+        return;
+    }
+    dotty.lservers[lserver][fd] = dotty.lservers.inuse[fd];
+    remove (fd, dotty.lservers.inuse);
+};
+dotty.protogt.startlayout = function (gt) {
+    local lpt, fd;
+
+    if (gt.layoutpending >= 1) {
+        lpt = dotty.layoutpending[gt.gtid];
+        if (gt.layoutmode == 'async')
+            monitor ('off', lpt.fd);
+        dotty.releaselserver (gt.lserver, lpt.fd, 'bad');
+        remove (gt.gtid, dotty.layoutpending);
+        gt.layoutpending = 0;
+        gt.haveinput = 0;
+        dotty.popbusy (gt, gt.views);
+    }
+    if (~((fd = dotty.grablserver (gt.lserver)) >= 0))
+        return null;
+    dotty.pushbusy (gt, gt.views);
+    writegraph (fd, gt.graph, 1);
+    gt.layoutpending = 1;
+    dotty.layoutpending[gt.gtid] = [
+        'fd' = fd;
+        'gtid' = gt.gtid;
+    ];
+    if (gt.layoutmode == 'async')
+        monitor ('on', fd);
+    return 1;
+};
+dotty.protogt.finishlayout = function (gt) {
+    local graph, lpt, fd;
+
+    if (~(gt.layoutpending >= 1)) {
+        dotty.message (0, concat ('no layout pending for graph ', gt.gtid));
+        return null;
+    }
+    lpt = dotty.layoutpending[gt.gtid];
+    if (~(graph = readgraph (lpt.fd))) {
+        if (gt.layoutmode == 'async')
+            monitor ('off', lpt.fd);
+        dotty.releaselserver (gt.lserver, lpt.fd, 'bad');
+        if (gt.layoutpending == 2) {
+            dotty.message (0, concat ('giving up on ', gt.lserver));
+            if ((fd = openio ('file', 'dottybug.dot', 'w+')) >= 0) {
+                writegraph (fd, gt.graph, 0);
+                closeio (fd);
+                dotty.message (
+                    0, concat ('graph that causes ', gt.lserver)
+                );
+                dotty.message (
+                    0, 'to fail has been saved in file dottybug.dot'
+                );
+                dotty.message (
+                    0, 'please fill out a bug report at'
+                );
+                dotty.message (
+                    0, 'http://www.graphviz.org/bugs/bugform.html'
+                );
+            }
+            dotty.popbusy (gt, gt.views);
+            gt.layoutpending = 0;
+            gt.haveinput = 0;
+            return 1;
+        }
+        dotty.message (
+            1, concat ('lost connection to ', gt.lserver, ', restarting...')
+        );
+        lpt.fd = dotty.grablserver (gt.lserver);
+        writegraph (lpt.fd, gt.graph, 1);
+        if (gt.layoutmode == 'async')
+            monitor ('on', lpt.fd);
+        gt.layoutpending = 2;
+        gt.haveinput = 0;
+        return null;
+    }
+    if (gt.layoutmode == 'async')
+        monitor ('off', lpt.fd);
+    dotty.releaselserver (gt.lserver, lpt.fd, null);
+    remove (gt.gtid, dotty.layoutpending);
+    gt.layoutpending = 0;
+    gt.haveinput = 0;
+    gt.unpacklayout (gt, graph);
+    dotty.popbusy (gt, gt.views);
+    return 1;
+};
+dotty.protogt.cancellayout = function (gt) {
+    local lpt, vid;
+
+    if (gt.layoutpending >= 1) {
+        lpt = dotty.layoutpending[gt.gtid];
+        if (gt.layoutmode == 'async')
+            monitor ('off', lpt.fd);
+        dotty.releaselserver (gt.lserver, lpt.fd, 'bad');
+        remove (gt.gtid, dotty.layoutpending);
+        gt.layoutpending = 0;
+        gt.haveinput = 0;
+        dotty.popbusy (gt, gt.views);
+    }
+};
+dotty.protogt.unpacklayout = function (gt, graph2) {
+    local graph, gid, sgraph1, sgraph2, nid, node1, node2, eid, edge1, edge2;
+    local t1, pos, size;
+
+    graph = gt.graph;
+    for (gid in graph2.graphdict) {
+        if (~(sgraph1 = graph.graphs[graph.graphdict[gid]]))
+            continue;
+        sgraph2 = graph2.graphs[graph2.graphdict[gid]];
+        sgraph1.draws = gt.unpackalldraw (gt, sgraph2.graphattr);
+    }
+    for (nid in graph2.nodedict) {
+        if (~(node1 = graph.nodes[graph.nodedict[nid]]))
+            continue;
+        node2 = graph2.nodes[graph2.nodedict[nid]];
+        node1.draws = gt.unpackalldraw (gt, node2.attr);
+        t1 = split (node2.attr.pos, ',');
+        pos = ['x' = ston (t1[0]); 'y' = ston (t1[1]);];
+        size = [
+            'x' = ston (node2.attr.width) * 72;
+            'y' = ston (node2.attr.height) * 72;
+        ];
+        node1.pos = pos;
+        node1.size = size;
+        node1.rect = [
+            0 = ['x' = pos.x - size.x / 2; 'y' = pos.y - size.y / 2;];
+            1 = ['x' = pos.x + size.x / 2; 'y' = pos.y + size.y / 2;];
+        ];
+    }
+    for (eid in graph2.edges) {
+        edge2 = graph2.edges[eid];
+        if (edge2.attr.id) {
+            if (~(edge1 = graph.edges[ston (edge2.attr.id)]))
+                continue;
+        } else if (graph == graph2)
+            edge1 = edge2;
+        edge1.draws = gt.unpackalldraw (gt, edge2.attr);
+    }
+    graph.draws = gt.unpackalldraw (gt, graph2.graphattr);
+    t1 = split (graph2.graphattr.bb, ',');
+    graph.rect[0].x = ston (t1[0]);
+    graph.rect[0].y = ston (t1[1]);
+    graph.rect[1].x = ston (t1[2]);
+    graph.rect[1].y = ston (t1[3]);
+    if (gt.graph ~= graph2)
+        return;
+    # strip position and size info from the attributes
+    for (gid in graph2.graphdict) {
+        sgraph2 = graph2.graphs[graph2.graphdict[gid]];
+        gt.removealldraw (gt, sgraph2.graphattr);
+        if (sgraph2.graphattr.bb)
+            remove ('bb', sgraph2.graphattr);
+    }
+    for (nid in graph2.nodedict) {
+        node2 = graph2.nodes[graph2.nodedict[nid]];
+        gt.removealldraw (gt, node2.attr);
+        if (node2.attr.rects)
+            remove ('rects', node2.attr);
+        remove ('pos', node2.attr);
+        remove ('width', node2.attr);
+        remove ('height', node2.attr);
+    }
+    for (eid in graph2.edges) {
+        edge2 = graph2.edges[eid];
+        gt.removealldraw (gt, edge2.attr);
+        if (edge2.attr.pos)
+            remove ('pos', edge2.attr);
+        if (edge2.attr.lp)
+            remove ('lp', edge2.attr);
+    }
+    gt.removealldraw (gt, graph2.graphattr);
+    remove ('bb', graph2.graphattr);
+    if (graph2.graphattr.lp)
+        remove ('lp', graph2.graphattr);
+};
+#
+# draw directive parsing
+#
+dotty.protogt.unpackalldraw = function (gt, attr) {
+    local o, did;
+
+    o = [];
+    if (attr._draw_)
+        o._draw_ = gt.unpackdraw (gt, attr._draw_);
+    if (attr._ldraw_)
+        o._ldraw_ = gt.unpackdraw (gt, attr._ldraw_);
+    if (attr._hdraw_)
+        o._hdraw_ = gt.unpackdraw (gt, attr._hdraw_);
+    if (attr._tdraw_)
+        o._tdraw_ = gt.unpackdraw (gt, attr._tdraw_);
+    if (attr._hldraw_)
+        o._hldraw_ = gt.unpackdraw (gt, attr._hldraw_);
+    if (attr._tldraw_)
+        o._tldraw_ = gt.unpackdraw (gt, attr._tldraw_);
+    for (did in o)
+        if (o[did].ep) {
+            o.ep = o[did].ep;
+            break;
+        }
+    return o;
+};
+dotty.protogt.removealldraw = function (gt, attr) {
+    if (attr._draw_)
+        remove ('_draw_', attr);
+    if (attr._ldraw_)
+        remove ('_ldraw_', attr);
+    if (attr._hdraw_)
+        remove ('_hdraw_', attr);
+    if (attr._tdraw_)
+        remove ('_tdraw_', attr);
+    if (attr._hldraw_)
+        remove ('_hldraw_', attr);
+    if (attr._tldraw_)
+        remove ('_tldraw_', attr);
+};
+dotty.protogt.unpackdraw = function (gt, attr) {
+    local oo, o, tt, t, n, i, j, s, l, ep;
+
+    oo = [];
+    t = split (attr, ' ', 0);
+    n = tablesize (t);
+    if (t[n - 1] == '') {
+        remove (n - 1, t);
+        n = n - 1;
+    }
+    i = 0;
+    while (i < n) {
+        o = [];
+        if (t[i] == 'E') {
+            o.type = t[i];
+            o.c.x = ston (t[i + 1]);
+            o.c.y = ston (t[i + 2]);
+            o.s.x = ston (t[i + 3]);
+            o.s.y = ston (t[i + 4]);
+            i = i + 5;
+        } else if (t[i] == 'e') {
+            o.type = t[i];
+            o.c.x = ston (t[i + 1]);
+            o.c.y = ston (t[i + 2]);
+            o.s.x = ston (t[i + 3]);
+            o.s.y = ston (t[i + 4]);
+            i = i + 5;
+        } else if (t[i] == 'P') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            for (j = 0; j < o.n; j = j + 1) {
+                o.ps[j].x = ston (t[i + 2 + j * 2]);
+                o.ps[j].y = ston (t[i + 2 + j * 2 + 1]);
+            }
+            i = i + 2 + o.n * 2;
+            o.ps[o.n] = o.ps[0];
+            o.n = o.n + 1;
+        } else if (t[i] == 'p') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            for (j = 0; j < o.n; j = j + 1) {
+                o.ps[j].x = ston (t[i + 2 + j * 2]);
+                o.ps[j].y = ston (t[i + 2 + j * 2 + 1]);
+            }
+            i = i + 2 + o.n * 2;
+            o.ps[o.n] = o.ps[0];
+            o.n = o.n + 1;
+        } else if (t[i] == 'L') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            for (j = 0; j < o.n; j = j + 1) {
+                o.ps[j].x = ston (t[i + 2 + j * 2]);
+                o.ps[j].y = ston (t[i + 2 + j * 2 + 1]);
+            }
+            i = i + 2 + o.n * 2;
+            if (~ep)
+                ep = copy (o.ps[1]);
+        } else if (t[i] == 'B') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            for (j = 0; j < o.n; j = j + 1) {
+                o.ps[j].x = ston (t[i + 2 + j * 2]);
+                o.ps[j].y = ston (t[i + 2 + j * 2 + 1]);
+            }
+            i = i + 2 + o.n * 2;
+            if (~ep)
+                ep = copy (o.ps[1]);
+        } else if (t[i] == 'b') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            for (j = 0; j < o.n; j = j + 1) {
+                o.ps[j].x = ston (t[i + 2 + j * 2]);
+                o.ps[j].y = ston (t[i + 2 + j * 2 + 1]);
+            }
+            i = i + 2 + o.n * 2;
+            if (~ep)
+                ep = copy (o.ps[1]);
+        } else if (t[i] == 'T') {
+            o.type = t[i];
+            o.p.x = ston (t[i + 1]);
+            o.p.y = ston (t[i + 2]);
+            o.j = ston (t[i + 3]);
+            if (o.j == -1)
+                o.j = 'lb';
+            else if (o.j == 1)
+                o.j = 'rb';
+            else if (o.j == 0)
+                o.j = 'cb';
+            o.w = ston (t[i + 4]);
+            o.n = ston (t[i + 5]);
+            i = i + 6;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            o.s = s;
+        } else if (t[i] == 'C') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            i = i + 2;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            o.fillcolor = gt.getcolor (gt.views, s);
+        } else if (t[i] == 'c') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            i = i + 2;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            o.drawcolor = gt.getcolor (gt.views, s);
+        } else if (t[i] == 'F') {
+            o.type = t[i];
+            o.fs = ston (t[i + 1]);
+            o.n = ston (t[i + 2]);
+            i = i + 3;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            o.ofn = s;
+            o.fn = dotty.fontmap[s];
+        } else if (t[i] == 'S') {
+            o.type = t[i];
+            o.n = ston (t[i + 1]);
+            i = i + 2;
+            s = t[i];
+            i = i + 1;
+            l = strlen (s) - 1;
+            while (l < o.n) {
+                s = concat (s, ' ', t[i]);
+                l = l + 1 + strlen (t[i]);
+                i = i + 1;
+            }
+            tt = split (s, '');
+            l = tablesize (tt);
+            s = '';
+            for (j = 1; j < l; j = j + 1)
+                s = concat (s, tt[j]);
+            if (
+                s == 'solid' | s == 'dashed' | s == 'dotted' |
+                s == 'longdashed' | s == 'shortdashed'
+            )
+                o.style = s;
+            else if (s == 'bold')
+                o.width = 3;
+            else {
+                tt = split (s, '(');
+                if (tt[0] == 'setlinewidth') {
+                    tt = split (tt[1], ')');
+                    o.width = ston (tt[0]);
+                } else
+                    continue;
+            }
+        } else if (t[i] == 'I') {
+            i = i + 7;
+        } else {
+            dotty.message (0, concat ('draw language parser error: ', t[i]));
+            return null;
+        }
+        oo[tablesize (oo)] = o;
+    }
+    oo.ep = ep;
+    return oo;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/dotty_ui.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,468 @@
+#
+# dotty_ui: user interface functions and data structures
+#
+dotty.protogt.doaction = function (data, s) {
+    local vt, gt;
+
+    vt = dotty.views[data.widget];
+    gt = dotty.graphs[vt.gtid];
+    data.menuitem = s;
+    if (data.obj.nid >= 0) {
+        if (gt.actions.node[s]) {
+            gt.actions.node[s] (gt, vt, data.obj, data);
+            return;
+        }
+    } else if (data.obj.eid >= 0) {
+        if (gt.actions.edge[s]) {
+            gt.actions.edge[s] (gt, vt, data.obj, data);
+            return;
+        }
+    }
+    if (gt.actions.general[s])
+        gt.actions.general[s] (gt, vt, data);
+};
+dotty.protogt.actions.general = [
+    "undo" = function (gt, vt, data) {
+        gt.undo (gt, 1);
+    };
+    "paste" = function (gt, vt, data) {
+        gt.paste (gt, data.pos, 1);
+    };
+    "do layout" = function (gt, vt, data) {
+        gt.layoutgraph (gt);
+    };
+    "cancel layout" = function (gt, vt, data) {
+        gt.cancellayout (gt);
+    };
+    "redraw" = function (gt, vt, data) {
+        gt.redrawgraph (gt, [vt.vtid = vt;]);
+    };
+    "new graph" = function (gt, vt, data) {
+        gt.erasegraph (gt, null, null);
+    };
+    "load graph" = function (gt, vt, data) {
+        gt.loadgraph (gt, null, 'file', dotty.protogt.graph, 1);
+    };
+    "reload graph" = function (gt, vt, data) {
+        gt.loadgraph (gt, gt.name, gt.type, gt.graph, 1);
+    };
+    "save graph" = function (gt, vt, data) {
+        gt.savegraph (gt, gt.name, gt.type);
+    };
+    "save graph as" = function (gt, vt, data) {
+        gt.savegraph (gt, null, 'file');
+    };
+    "open view" = function (gt, vt, data) {
+        gt = dotty.protogt.creategraph (null);
+        gt.createview (gt, null);
+    };
+    "copy view" = function (gt, vt, data) {
+        gt = gt.copygraph (gt);
+        gt.createview (gt, vt);
+    };
+    "birdseye view" = function (gt, vt, data) {
+        gt.createview (gt, dotty.protovt.birdseye);
+    };
+    "clone view" = function (gt, vt, data) {
+        gt.createview (gt, vt);
+    };
+    "close view" = function (gt, vt, data) {
+        gt.destroyview (gt, vt);
+        if (tablesize (gt.views) == 0)
+            gt.destroygraph (gt);
+    };
+    "set graph attr" = function (gt, vt, data) {
+        gt.setattr (gt, ['attr' = gt.graph.graphattr;]);
+    };
+    "set node attr" = function (gt, vt, data) {
+        gt.setattr (gt, ['attr' = gt.graph.nodeattr;]);
+    };
+    "set edge attr" = function (gt, vt, data) {
+        gt.setattr (gt, ['attr' = gt.graph.edgeattr;]);
+    };
+    "zoom in" = function (gt, vt, data) {
+        gt.zoom (gt, vt, 0.5, data.pos);
+    };
+    "zoom out" = function (gt, vt, data) {
+        gt.zoom (gt, vt, 2, data.pos);
+    };
+    "zoom in slowly" = function (gt, vt, data) {
+        gt.zoom (gt, vt, 0.9, data.pos);
+    };
+    "zoom out slowly" = function (gt, vt, data) {
+        gt.zoom (gt, vt, 1.1, data.pos);
+    };
+    "scroll horizontally" = function (gt, vt, data) {
+        vt.scrollmode = 'h';
+    };
+    "scroll vertically" = function (gt, vt, data) {
+        vt.scrollmode = 'v';
+    };
+    "find node" = function (gt, vt, data) {
+        gt.findnode (gt, vt);
+    };
+    "print graph" = function (gt, vt, data) {
+        gt.printorsave (gt, vt, null, null, null, null);
+    };
+    "text view" = function (gt, vt, data) {
+        if (dotty.txtview == 'on')
+            dotty.txtview = 'off';
+        else
+            dotty.txtview = 'on';
+        txtview (dotty.txtview);
+    };
+    "quit" = function (gt, vt, data) {
+        exit ();
+    };
+];
+dotty.protogt.actions.node = [
+    "cut" = function (gt, vt, obj, data) {
+        gt.cut (gt, obj, 'one', 'support', 'cut');
+        dotty.clipgt.layoutgraph (dotty.clipgt);
+    };
+    "Cut" = function (gt, vt, obj, data) {
+        gt.cut (gt, obj, 'reachable', 'support', 'cut');
+        dotty.clipgt.layoutgraph (dotty.clipgt);
+    };
+    "copy" = function (gt, vt, obj, data) {
+        gt.cut (gt, obj, 'one', 'support', 'copy');
+        dotty.clipgt.layoutgraph (dotty.clipgt);
+    };
+    "Copy" = function (gt, vt, obj, data) {
+        gt.cut (gt, obj, 'reachable', 'support', 'copy');
+        dotty.clipgt.layoutgraph (dotty.clipgt);
+    };
+    "group" = function (gt, vt, obj, data) {
+        local kv;
+
+        if ((kv = gt.getattr (gt, obj)))
+            gt.groupnodesbyattr (gt, kv.key, kv.val, [
+                'label' = kv.val; kv.key = kv.val;
+            ], 1, 1);
+    };
+    "Group" = function (gt, vt, obj, data) {
+        local kv;
+
+        if ((kv = gt.getattr (gt, obj)))
+            gt.groupnodesbyattr (gt, kv.key, kv.val, [
+                'label' = kv.val; kv.key = kv.val;
+            ], 0, 1);
+    };
+    "delete" = function (gt, vt, obj, data) {
+        if (obj.eid >= 0)
+            gt.removeedge (gt, obj);
+        else
+            gt.removenode (gt, obj);
+    };
+    "Delete" = function (gt, vt, obj, data) {
+        gt.removesubtree (gt, obj);
+    };
+    "remove" = function (gt, vt, obj, data) {
+        if (obj.nid >= 0)
+            if ((kv = gt.getattr (gt, obj)))
+                gt.removenodesbyattr (gt, kv.key, kv.val);
+    };
+    "Remove" = function (gt, vt, obj, data) {
+        if (obj.nid >= 0)
+            if ((kv = gt.getattr (gt, obj)))
+                gt.removesubtreesbyattr (gt, kv.key, kv.val);
+    };
+    "set attr" = function (gt, vt, obj, data) {
+        gt.setattr (gt, obj);
+    };
+    "print attr" = function (gt, vt, obj, data) {
+        if (obj.nid >= 0)
+            echo ('node: ', obj.name);
+        dump (obj.attr);
+    };
+];
+dotty.protogt.actions.edge = dotty.protogt.actions.node;
+dotty.protovt.normal.menus = [
+    'general' = [
+        0 = "undo";
+        1 = "paste";
+        2 = "do layout";
+        3 = "cancel layout";
+        4 = "redraw";
+        5 = "new graph";
+        6 = "load graph";
+        7 = "reload graph";
+        8 = "save graph";
+        9 = "save graph as";
+        10 = "open view";
+        11 = "copy view";
+        12 = "clone view";
+        13 = "birdseye view";
+        14 = "close view";
+        15 = "set graph attr";
+        16 = "set node attr";
+        17 = "set edge attr";
+        18 = "zoom in";
+        19 = "zoom out";
+        20 = "find node";
+        21 = "print graph";
+        22 = "text view";
+        23 = "quit";
+    ];
+    'node' = [
+        0 = "cut";
+        1 = "Cut";
+        2 = "copy";
+        3 = "Copy";
+        4 = "group";
+        5 = "Group";
+        6 = "delete";
+        7 = "Delete";
+        8 = "remove";
+        9 = "Remove";
+        10 = "set attr";
+        11 = "print attr";
+    ];
+    'edge' = [
+        0 = "cut";
+        1 = "Cut";
+        2 = "copy";
+        3 = "Copy";
+        4 = "delete";
+        5 = "Delete";
+        6 = "set attr";
+        7 = "print attr";
+    ];
+];
+dotty.protovt.normal.keys = [
+    'general' = [
+        'u' = "undo";
+        'p' = "paste";
+        'l' = "do layout";
+        'k' = "cancel layout";
+        ' ' = "redraw";
+        'L' = "reload graph";
+        's' = "save graph";
+        'Z' = "zoom in slowly";
+        'z' = "zoom out slowly";
+        'h' = "scroll horizontally";
+        'v' = "scroll vertically";
+    ];
+    'node' = [
+        'c' = "copy";
+        'C' = "Copy";
+        'g' = "group";
+        'G' = "Group";
+        'd' = "delete";
+        'D' = "Delete";
+        'r' = "remove";
+        'R' = "Remove";
+        'a' = "set attr";
+    ];
+    'edge' = [
+        'c' = "copy";
+        'C' = "Copy";
+        'd' = "delete";
+        'D' = "Delete";
+        'a' = "set attr";
+    ];
+];
+dotty.protovt.birdseye.menus = dotty.protovt.normal.menus;
+dotty.protovt.birdseye.keys = dotty.protovt.normal.keys;
+dotty.protovt.normal.uifuncs = [
+    'leftdown' = function (data) {
+        local gt;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        if (data.obj.nid >= 0) {
+            dotty.node2move = data.obj;
+            dotty.movewidget = data.widget;
+            dotty.rp2 = data.pos;
+        }
+    };
+    'leftmove' = function (data) {
+        local gt;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        if (dotty.node2move & (
+            dotty.rp2.x ~= data.pos.x | dotty.rp2.y ~= data.pos.y
+        )) {
+            gt.movenode (gt, dotty.node2move, data.pos);
+            dotty.rp2 = data.pos;
+        }
+    };
+    'leftup' = function (data) {
+        local gt;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        if (dotty.node2move) {
+            if (dotty.movewidget == data.widget)
+                gt.movenode (gt, dotty.node2move, data.pos);
+            dotty.node2move = 0;
+        } else if (~data.obj)
+            gt.insertnode (gt, data.pos, null, null, null, 1);
+    };
+    'middledown' = function (data) {
+        if (~(data.obj.nid >= 0))
+            return;
+        dotty.rubberband = 1;
+        dotty.movewidget = data.widget;
+        setgfxattr (data.widget, ['mode' = 'xor';]);
+        dotty.rp1 = data.pos;
+        dotty.rp2 = data.pos;
+        line (data.widget, null, dotty.rp1, dotty.rp2, ['color' = 1;]);
+    };
+    'middlemove' = function (data) {
+        if (dotty.rubberband ~= 1 | (
+            dotty.rp2.x == data.pos.x & dotty.rp2.y == data.pos.y
+        ))
+            return;
+        line (data.widget, null, dotty.rp1, dotty.rp2, ['color' = 1;]);
+        dotty.rp2 = data.pos;
+        line (data.widget, null, dotty.rp1, dotty.rp2, ['color' = 1;]);
+    };
+    'middleup' = function (data) {
+        local gt;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        if (dotty.rubberband ~= 1)
+            return;
+        dotty.rubberband = 0;
+        line (dotty.movewidget, null, dotty.rp1, dotty.rp2, ['color' = 1;]);
+        setgfxattr (dotty.movewidget, ['mode' = 'src';]);
+        if (dotty.movewidget ~= data.widget | ~(
+            data.pobj.nid >= 0) | ~(data.obj.nid >= 0
+        ))
+            return;
+        if (data.pobj.attr.support)
+            gt.groupnodes (gt, [
+                data.obj.nid = data.obj;
+                data.pobj.nid = data.pobj;
+            ], data.obj, null, null, null, 1, 1);
+        else if (data.obj.attr.support)
+            gt.groupnodes (gt, [
+                data.obj.nid = data.obj;
+                data.pobj.nid = data.pobj;
+            ], data.pobj, null, null, null, 1, 1);
+        else
+            gt.insertedge (gt, data.pobj, null, data.obj, null, null, 1);
+    };
+    'rightdown' = function (data) {
+        local vt, gt, menu, i;
+
+        vt = dotty.views[data.widget];
+        gt = dotty.graphs[vt.gtid];
+        if (~data.obj)
+            menu = vt.menus.general;
+        else if (data.obj.nid >= 0)
+            menu = vt.menus.node;
+        else if (data.obj.eid >= 0)
+            menu = vt.menus.edge;
+        if ((i = displaymenu (data.widget, menu)) >= 0)
+            gt.doaction (data, menu[i]);
+    };
+    'button3up' = function (data) {
+        local vt, attr;
+
+        vt = dotty.views[data.widget];
+        attr = getwidgetattr (vt.scroll, [0 = 'childcenter';]);
+        if (vt.scrollmode == 'h')
+            attr.childcenter.x = attr.childcenter.x - 40;
+        else
+            attr.childcenter.y = attr.childcenter.y - 40;
+        setwidgetattr (vt.scroll, ['childcenter' = attr.childcenter;]);
+    };
+    'button4up' = function (data) {
+        local vt, attr;
+
+        vt = dotty.views[data.widget];
+        attr = getwidgetattr (vt.scroll, [0 = 'childcenter';]);
+        if (vt.scrollmode == 'h')
+            attr.childcenter.x = attr.childcenter.x + 40;
+        else
+            attr.childcenter.y = attr.childcenter.y + 40;
+        setwidgetattr (vt.scroll, ['childcenter' = attr.childcenter;]);
+    };
+    'keyup' = function (data) {
+        local vt, gt, action;
+
+        vt = dotty.views[data.widget];
+        gt = dotty.graphs[vt.gtid];
+        if (data.obj.nid >= 0) {
+            if (vt.keys.node[data.key])
+                action = vt.keys.node[data.key];
+        } else if (data.obj.eid >= 0) {
+            if (vt.keys.edge[data.key])
+                action = vt.keys.edge[data.key];
+        }
+        if (~action)
+            if (vt.keys.general[data.key])
+                action = vt.keys.general[data.key];
+        if (action)
+            gt.doaction (data, action);
+    };
+    'redraw' = function (data) {
+        local vt, gt;
+
+        vt = dotty.views[data.widget];
+        gt = dotty.graphs[vt.gtid];
+        gt.drawgraph (gt, [vt.vtid = vt;]);
+    };
+    'closeview' = function (data) {
+        local vt, gt;
+
+        vt = dotty.views[data.widget];
+        gt = dotty.graphs[vt.gtid];
+        gt.destroyview (gt, vt);
+        if (tablesize (gt.views) == 0)
+            gt.destroygraph (gt);
+    };
+];
+dotty.protovt.birdseye.uifuncs = [
+    'leftdown' = function (data) {
+        local gt, vid;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        for (vid in gt.views) {
+            vt = gt.views[vid];
+            if (vt.type ~= 'birdseye')
+                gt.setviewcenter ([vid = vt;], data.pos);
+        }
+    };
+    'leftmove' = function (data) {
+        local gt, vid;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        for (vid in gt.views) {
+            vt = gt.views[vid];
+            if (vt.type ~= 'birdseye')
+                gt.setviewcenter ([vid = vt;], data.pos);
+        }
+    };
+    'leftup' = function (data) {
+        local gt, vid;
+
+        gt = dotty.graphs[dotty.views[data.widget].gtid];
+        for (vid in gt.views) {
+            vt = gt.views[vid];
+            if (vt.type ~= 'birdseye')
+                gt.setviewcenter ([vid = vt;], data.pos);
+        }
+    };
+    'middledown' = dotty.protovt.normal.uifuncs.middledown;
+    'middlemove' = dotty.protovt.normal.uifuncs.middlemove;
+    'middleup' = dotty.protovt.normal.uifuncs.middleup;
+    'rightdown' = dotty.protovt.normal.uifuncs.rightdown;
+    'keyup' = dotty.protovt.normal.uifuncs.keyup;
+    'redraw' = dotty.protovt.normal.uifuncs.redraw;
+    'closeview' = dotty.protovt.normal.uifuncs.closeview;
+];
+dotty.monitorfile = function (data) {
+    local gtid, gt, lpt;
+
+    for (gtid in dotty.layoutpending) {
+        lpt = dotty.layoutpending[gtid];
+        if (lpt.fd == data.fd) {
+            gt = dotty.graphs[lpt.gtid];
+            gt.haveinput = 1;
+            gt.layoutgraph (gt);
+            return 1;
+        }
+    }
+    return 0;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/fractal.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,101 @@
+load ('def.lefty');
+definit ();
+#
+# initialize window data
+#
+canvas = defcanvas;
+wrect = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 400; 'y' = 500;];];
+setwidgetattr (canvas, ['window' = wrect;]);
+
+sq = function (x) {
+    return x * x;
+};
+
+# data structures
+#
+length = 300;
+center = ['x' = 200; 'y' = 250;];
+radius = 2 * length / sqrt (12);
+fractalangle = 0;
+maxlevel = 2;
+
+# drawing functions
+#
+# draw a Koch curve (a ``snowflake'' fractal)
+#
+# start with a triangle and keep replacing edges
+# with the construct: _/\_
+# until the recursion level reaches 'maxlevel'
+#
+fractal = function (level, length, angle) {
+    local nlength, newpenpos;
+
+    if (level >= maxlevel) {
+        newpenpos.x = penpos.x + length * cos (angle);
+        newpenpos.y = penpos.y + length * sin (angle);
+        line (canvas, null, penpos, newpenpos, ['color' = 1;]);
+        penpos = newpenpos;
+        return;
+    }
+    nlength = length / 3;
+    fractal (level + 1, nlength, angle);
+    fractal (level + 1, nlength, angle + 60);
+    fractal (level + 1, nlength, angle - 60);
+    fractal (level + 1, nlength, angle);
+};
+drawfractal = function () {
+    clear (canvas);
+    setpick (canvas, center, wrect);
+    penpos = [
+        'x' = center.x + cos (fractalangle + 210) * radius;
+        'y' = center.y + sin (fractalangle + 210) * radius;
+    ];
+    fractal (0, length, fractalangle +  60);
+    fractal (0, length, fractalangle -  60);
+    fractal (0, length, fractalangle - 180);
+    remove ('penpos');
+};
+
+# editing functions
+#
+# transform the fractal.
+#
+# map point 'prevpoint' to point 'currpoint'
+# with respect to the center of the fractal.
+#
+transformfractal = function (prevpoint, currpoint) {
+    local prevtan, currtan, prevradius, currradius;
+
+    prevtan = atan (prevpoint.y - center.y, prevpoint.x - center.x);
+    currtan = atan (currpoint.y - center.y, currpoint.x - center.x);
+    fractalangle = fractalangle + (currtan - prevtan);
+    prevradius = sqrt (
+        sq (prevpoint.y - center.y) + sq (prevpoint.x - center.x)
+    );
+    currradius = sqrt (
+        sq (currpoint.y - center.y) + sq (currpoint.x - center.x)
+    );
+    radius = radius / prevradius * currradius;
+    length = radius / 2 * sqrt (12);
+};
+
+# user interface functions
+#
+# bind changes to the fractal to user actions
+#
+leftup = function (data) {
+    transformfractal (data.ppos, data.pos);
+    drawfractal ();
+};
+dops = function () {
+    local s;
+
+    s = ['x' = 8 * 300; 'y' = 10.5 * 300;];
+    canvas = createwidget (-1, ['type' = 'ps'; 'size' = s;]);
+    setwidgetattr (canvas, ['window' = wrect;]);
+    drawfractal ();
+    destroywidget (canvas);
+    canvas=defcanvas;
+};
+transformfractal (['x' = 0; 'y' = 0;], ['x' = 0; 'y' = 0;]);
+drawfractal ();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/fractal2.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,218 @@
+#
+# data structures
+#
+length = 300;
+center = ['x' = 200; 'y' = 250;];
+radius = 2 * length / sqrt (12);
+fractalangle = 0;
+maxlevel = 2;
+sizes = [
+    'button' = [ 'x' = 100; 'y' = 40;  ];
+    'canvas' = [ 'x' = 400; 'y' = 500; ];
+    'view'   = [ 'x' = 400; 'y' = 600; ];
+];
+sq = function (x) {
+    return x * x;
+};
+#
+# create view and other widgets
+#
+init = function () {
+    view = createwidget (-1, [
+        'type' = 'view'; 'name' = 'fractal'; 'size' = sizes.view;
+    ]);
+
+    array1 = createwidget (view, [
+        'type' = 'array'; 'borderwidth' = 1; 'mode' = 'vertical';
+    ]);
+    widgets[array1].resize = resize;
+
+    array2 = createwidget (array1, [
+        'type' = 'array'; 'borderwidth' = 1; 'mode' = 'horizontal';
+    ]);
+    widgets[array2].resize = resize;
+
+    array3 = createwidget (array2, [
+        'type' = 'array'; 'borderwidth' = 1; 'mode' = 'vertical';
+    ]);
+    widgets[array3].resize = resize;
+
+    morebutton = createwidget (array3, [
+        'type' = 'button'; 'text' = 'more';
+    ]);
+    widgets[morebutton].pressed = pressed;
+    lessbutton = createwidget (array3, [
+        'type' = 'button'; 'text' = 'less';
+    ]);
+    widgets[lessbutton].pressed = pressed;
+    setwidgetattr (morebutton, ['size' = sizes.button;]);
+    setwidgetattr (lessbutton, ['size' = sizes.button;]);
+
+    atext = createwidget (array2, [
+        'type' = 'text'; 'mode' = 'oneline';
+    ]);
+    widgets[atext].oneline = oneline;
+    setwidgetattr (atext, [
+        'size' = ['x' = sizes.button.x; 'y' = sizes.button.y * 2;];
+    ]);
+
+    scroll = createwidget (array1, ['type' = 'scroll';]);
+    canvas = createwidget (scroll, ['type' = 'canvas';]);
+    wrect = [0 = ['x' = 0; 'y' = 0;]; 1 = sizes.canvas;];
+    setwidgetattr (canvas, ['window' = wrect; 'viewport' = wrect[1];]);
+};
+#
+# drawing functions
+#
+# draw a Koch curve (a ``snowflake'' fractal)
+#
+# start with a triangle and keep replacing edges
+# with the construct: _/\_
+# until the recursion level reaches 'maxlevel'
+#
+fractal = function (level, length, angle) {
+    local nlength, newpenpos;
+
+    if (level >= maxlevel) {
+        newpenpos.x = penpos.x + length * cos (angle);
+        newpenpos.y = penpos.y + length * sin (angle);
+        line (canvas, null, penpos, newpenpos, ['color' = 1;]);
+        penpos = newpenpos;
+        return;
+    }
+    nlength = length / 3;
+    fractal (level + 1, nlength, angle);
+    fractal (level + 1, nlength, angle + 60);
+    fractal (level + 1, nlength, angle - 60);
+    fractal (level + 1, nlength, angle);
+};
+redrawfractal = function () {
+    clear (canvas);
+    setpick (canvas, center, wrect);
+    penpos = [
+        'x' = center.x + cos (fractalangle + 210) * radius;
+        'y' = center.y + sin (fractalangle + 210) * radius;
+    ];
+    fractal (0, length, fractalangle +  60);
+    fractal (0, length, fractalangle -  60);
+    fractal (0, length, fractalangle - 180);
+    remove ('penpos');
+};
+#
+# editing functions
+#
+# transform the fractal.
+#
+# map point 'prevpoint' to point 'currpoint'
+# with respect to the center of the fractal.
+#
+transformfractal = function (prevpoint, currpoint) {
+    local prevtan, currtan, prevradius, currradius;
+
+    prevtan = atan (prevpoint.y - center.y, prevpoint.x - center.x);
+    currtan = atan (currpoint.y - center.y, currpoint.x - center.x);
+    fractalangle = fractalangle + (currtan - prevtan);
+    prevradius = sqrt (
+        sq (prevpoint.y - center.y) + sq (prevpoint.x - center.x)
+    );
+    currradius = sqrt (
+        sq (currpoint.y - center.y) + sq (currpoint.x - center.x)
+    );
+    radius = radius / prevradius * currradius;
+    length = radius / 2 * sqrt (12);
+};
+#
+# main actions
+#
+redraw = function (data) {
+    redrawfractal ();
+};
+changemaxlevel = function (dn) {
+    maxlevel = maxlevel + dn;
+    if (maxlevel < 0)
+        maxlevel = 0;
+    redrawfractal ();
+};
+resize = function (data) {
+    local ret;
+    if (data.widget == array1) {
+        ret = [
+            array2 = [
+                'x' = data.size.x;
+                'y' = sizes.button.y * 2;
+            ];
+            scroll = [
+                'x' = data.size.x;
+                'y' = data.size.y - sizes.button.y * 2;
+            ];
+        ];
+    } else if (data.widget == array2) {
+        ret = [
+            array3 = [
+                'x' = sizes.button.x;
+                'y' = 2 * sizes.button.y;
+            ];
+            atext = [
+                'x' = data.size.x - sizes.button.x;
+                'y' = 2 * sizes.button.y;
+            ];
+        ];
+    } else if (data.widget == array3) {
+        ret = [
+            morebutton = sizes.button;
+            lessbutton = sizes.button;
+        ];
+    }
+    return ret;
+};
+#
+# user interface functions
+#
+# bind changes to the fractal to user actions
+#
+leftup = function (data) {
+    transformfractal (data.ppos, data.pos);
+    redrawfractal ();
+};
+menu = [
+    0 = 'more';
+    1 = 'less';
+];
+domenu = function (i) {
+    local s;
+    s = menu[i];
+    if (s == 'more')
+        changemaxlevel (1);
+    else if (s == 'less')
+        changemaxlevel (-1);
+};
+rightdown = function (data) {
+    domenu (displaymenu (canvas, menu));
+};
+pressed = function (data) {
+    if (data.widget == morebutton)
+        changemaxlevel (1);
+    else if (data.widget == lessbutton)
+        changemaxlevel (-1);
+};
+oneline = function (data) {
+    local dn;
+    dn = ston (data.text);
+    if (dn > 0 | dn < 0)
+        changemaxlevel (dn - maxlevel);
+};
+#
+# postscript generation
+#
+dops = function () {
+    local r;
+
+    r = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 8 * 300; 'y' = 10.5 * 300;];];
+    canvas = opencanvas ('pscanvas', '', r);
+    setwidgetattr (canvas, ['window' = wrect;]);
+    redraw ();
+    closecanvas (canvas);
+    canvas=defcanvas;
+};
+init ();
+#txtview ('off');
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/lefty.psp	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,80 @@
+/BOX {
+    /boxy1 exch def /boxx1 exch def /boxy0 exch def /boxx0 exch def
+    boxx0 boxy0 moveto boxx1 boxy0 lineto
+    boxx1 boxy1 lineto boxx0 boxy1 lineto
+    closepath
+} def
+/SCP { stroke initclip newpath BOX clip newpath } def
+/CL { stroke setrgbcolor } def
+/DO { stroke } def
+/NP { newpath } def
+/FI { fill } def
+/LI { moveto lineto } def
+/CT { curveto } def
+/AR {
+    /ang2 exch def /ang1 exch def
+    /radius exch def /y2x exch def /cy exch def /cx exch def
+    gsave
+        cx cy translate 1 y2x scale 0 0 radius ang1 ang2 arc stroke
+    grestore
+} def
+/ARF {
+    /ang2 exch def /ang1 exch def
+    /radius exch def /y2x exch def /cy exch def /cx exch def
+    gsave
+        cx cy translate 1 y2x scale 0 0 radius ang1 ang2 arc fill
+    grestore
+} def
+/TXT {
+    /texth exch def
+    /textf exch def
+    /textn exch def
+    /texts exch def
+    /textyj exch def /texty exch def
+    /textxj exch def /textx exch def
+    textf findfont texth scalefont dup setfont
+    /FontBBox get 1 get 1000 div texth mul /textbl exch def
+    /textth texth textn mul def /texttw 0 def
+    0 1 textn 1 sub {
+        texts exch get 0 get stringwidth pop
+        dup texttw gt { /texttw exch def } { pop } ifelse
+    } for
+    textyj (b) eq { /ty texty textth add textbl add def } if
+    textyj (d) eq { /ty texty textth add def } if
+    textyj (c) eq { /ty texty textth 2 div add def } if
+    textyj (u) eq { /ty texty def } if
+    /ty ty textbl sub def
+    textxj (l) eq { /tx textx def } if
+    textxj (c) eq { /tx textx texttw 2 div sub def } if
+    textxj (r) eq { /tx textx texttw sub def } if
+    0 1 textn 1 sub {
+        /ty ty texth sub def
+        texts exch get dup 0 get /ts exch def 1 get /tj exch def
+        tj (l) eq { tx ty moveto ts show } if
+        tj (n) eq {
+            tx texttw ts stringwidth pop sub 2 div add ty moveto ts show
+        } if
+        tj (r) eq {
+            tx texttw ts stringwidth pop sub add ty moveto ts show
+        } if
+    } for
+} def
+
+/colorimage where {
+    pop
+} {
+    /bwproc {
+        rgbproc dup length 3 idiv string 0 3 0 5 -1 roll {
+            add 2 1 roll 1 sub dup 0 eq {
+                pop 3 idiv 3 -1 roll dup 4 -1 roll
+                dup 3 1 roll 5 -1 roll put 1 add 3 0
+            } {
+                2 1 roll
+            } ifelse
+        } forall
+        pop pop pop
+    } def
+    /colorimage {
+        pop pop /rgbproc exch def {bwproc} image
+    } bind def
+} ifelse
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/slides.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,109 @@
+load ('def.lefty');
+definit ();
+#
+# initialize window data
+#
+canvas = defcanvas;
+wrect = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 800; 'y' = 1000;];];
+lmargin = 100;
+width = 800;
+height = 1000;
+setwidgetattr (canvas, ['window' = wrect;]);
+fonts = [
+    'timr' = [
+        14 = 'timr14';
+        18 = 'timr18';
+        24 = 'timr24';
+    ];
+    'courr' = [
+        14 = 'courr14';
+        18 = 'courr18';
+        24 = 'courr24';
+    ];
+];
+x2ps = [
+    'timr24' = 'Times-Roman';
+    'timr18' = 'Times-Roman';
+    'timr14' = 'Times-Roman';
+    'courr24' = 'Courier';
+    'courr18' = 'Courier';
+    'courr14' = 'Courier';
+];
+
+calc = function () {
+    local i, j, cpos, tsiz, dist, slidep;
+    tsiz = ['x' = 0; 'y' = 0;];
+    for (i = 0; slides[i]; i = i + 1) {
+        slidep = slides[i];
+        if (slidep.skip) {
+            tsiz.y = tsiz.y + slidep.skip;
+        } else {
+            for (j = 0; slidep.text[j]; j = j + 1) {
+                if (j > 0)
+                    tsiz.y = tsiz.y + 5;
+                if (~slidep.font)
+                    slidep.font = slides.font;
+                if (~slidep.size)
+                    slidep.size = slides.size;
+                if (~slidep.just)
+                    slidep.just = slides.just;
+                slidep.tsiz[j] = textsize (canvas, slidep.text[j],
+                        fonts[slidep.font][slidep.size], 0);
+                tsiz.y = tsiz.y + slidep.tsiz[j].y;
+            }
+        }
+    }
+    dist = (height - tsiz.y) / (i + 1);
+    cpos = ['x' = lmargin; 'y' = height - dist;];
+    for (i = 0; slides[i]; i = i + 1) {
+        slidep = slides[i];
+        if (slidep.skip) {
+            cpos.y = cpos.y - slidep.skip - dist;
+        } else {
+            for (j = 0; slidep.text[j]; j = j + 1) {
+                if (j > 0)
+                    cpos.y = cpos.y - 5;
+                if (slidep.just == 0)
+                    slidep.tpos[j].x = cpos.x;
+                else
+                    slidep.tpos[j].x = width / 2;
+                cpos.y = cpos.y - slidep.tsiz[j].y;
+                slidep.tpos[j].y = cpos.y;
+            }
+            cpos.y = cpos.y - dist;
+        }
+    }
+};
+redraw = function () {
+    local i, j, slidep;
+    for (i = 0; slides[i]; i = i + 1) {
+        slidep = slides[i];
+        if (~slidep.skip)
+            for (j = 0; slidep.text[j]; j = j + 1)
+                text (canvas, slidep, slidep.tpos[j], slidep.text[j],
+                        fonts[slidep.font][slidep.size], 0, slidep.just);
+    }
+};
+dops = function () {
+    local i, j, slidep, r;
+
+    r = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 8 * 300; 'y' = 10.5 * 300;];];
+    canvas = createwidget (-1, ['type' = 'ps'; 'origin' = r[0]; 'size' = r[1]
+;]);
+    setwidgetattr (canvas, ['window' = wrect;]);
+    for (i = 0; slides[i]; i = i + 1) {
+        slidep = slides[i];
+        if (~slidep.skip)
+            for (j = 0; slidep.text[j]; j = j + 1)
+                text (canvas, slidep, slidep.tpos[j], slidep.text[j],
+                        x2ps[fonts[slidep.font][slidep.size]],
+                        slidep.tsiz[j].y, slidep.just, 1);
+    }
+    destroywidget (canvas);
+    canvas=defcanvas;
+};
+doit = function () {
+    calc ();
+    redraw ();
+    dops ();
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/lefty/tree.lefty	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,195 @@
+load ('def.lefty');
+definit ();
+#
+# initialize window data
+#
+canvas = defcanvas;
+wrect = [0 = ['x' = -5; 'y' = 0;]; 1 = ['x' = 410; 'y' = 500;];];
+setwidgetattr (canvas, ['window' = wrect;]);
+#
+# data structures
+#
+nodearray = [];
+nodenum = 0;
+dist = ['x' = 40; 'y' = 40;];
+defsize = ['x' = 10; 'y' = 10;];
+fontname = 'fixed';
+fontsize = 18;
+tree = null;
+
+# drawing functions
+#
+boxnode = function (node) {
+    local center;
+    box (canvas, node, node.rect, ['color' = 0; 'fill' = 'on';]);
+    box (canvas, node, node.rect);
+    center = [
+        'x' = (node.rect[0].x + node.rect[1].x) / 2;
+        'y' = (node.rect[0].y + node.rect[1].y) / 2;
+    ];
+    if (node.name)
+        text (canvas, node, center, node.name, fontname, fontsize, 'cc');
+};
+circlenode = function (node) {
+    local center, radius;
+    center = [
+        'x' = (node.rect[0].x + node.rect[1].x) / 2;
+        'y' = (node.rect[0].y + node.rect[1].y) / 2;
+    ];
+    radius = [
+        'x' = center.x - node.rect[0].x;
+        'y' = center.y - node.rect[0].y;
+    ];
+    arc (canvas, node, center, radius, ['color' = 0; 'fill' = 'on';]);
+    arc (canvas, node, center, radius);
+    if (node.name)
+        text (canvas, node, center, node.name, fontname, fontsize, 'cc');
+};
+drawnode = boxnode;
+drawedge = function (node1, node2) {
+    line (canvas, null,
+            [
+                'x' = (node1.rect[1].x + node1.rect[0].x) / 2;
+                'y' = node1.rect[0].y;
+            ], [
+                'x' = (node2.rect[1].x + node2.rect[0].x) / 2;
+                'y' = node2.rect[1].y;
+            ]);
+};
+drawtree = function (node) {
+    local i;
+    for (i in nodearray)
+        drawnode (nodearray[i]);
+    drawtreerec (node);
+};
+drawtreerec = function (node) {
+    local i, n;
+    if ((n = tablesize (node.ch)) > 0) {
+        for (i = 0; i < n; i = i + 1) {
+            drawedge (node, node.ch[i]);
+            drawtreerec (node.ch[i]);
+        }
+    }
+};
+redraw = function (c) {
+    if (tree)
+        drawtree (tree);
+};
+
+# layout functions
+#
+complayout = function () {
+    leafx = 0;
+    leafrank = 0;
+    dolayout (tree, wrect[1].y - 10);
+    remove ('leafx');
+    remove ('leafrank');
+};
+dolayout = function (node, pary) {
+    local r, n, i, size, lchp, rchp;
+    size = nodesize (node);
+    if (node.chn > 0) {
+        for (i = 0; i < node.chn; i = i + 1)
+            dolayout (node.ch[i], pary - size.y - dist.y);
+        node.rank = (node.ch[0].rank + node.ch[node.chn - 1].rank) / 2;
+        lchp = node.ch[0].rect;
+        rchp = node.ch[node.chn - 1].rect;
+        r[0].x = lchp[0].x + ((rchp[1].x - lchp[0].x) - size.x) / 2;
+        r[0].y = pary - size.y;
+        r[1].x = r[0].x + size.x;
+        r[1].y = pary;
+        node.rect = r;
+    } else {
+        node.rank = leafrank;
+        r[0].x = leafx;
+        r[0].y = pary - size.y;
+        r[1].x = r[0].x + size.x;
+        r[1].y = pary;
+        leafrank = leafrank + 1;
+        leafx = r[1].x + dist.x;
+        node.rect = r;
+    }
+};
+
+# editing functions
+#
+inode = function (point, name) {
+    local i, nnum, size;
+    nnum = nodenum;
+    if (~name)
+        name = ask ('give name of node:');
+    nodearray[nnum].ch = [];
+    nodearray[nnum].chn = 0;
+    nodearray[nnum].name = name;
+    size = nodesize (nodearray[nnum]);
+    nodearray[nnum].rect[0] = point;
+    nodearray[nnum].rect[1] = ['x' = point.x + size.x; 'y' = point.y + size.y;];
+    nodenum = nodenum + 1;
+    if (~tree) {
+        tree = nodearray[nnum];
+        tree.depth = 0;
+        complayout ();
+        drawtree (tree);
+    } else
+        drawtree (nodearray[nnum]);
+    return nodearray[nnum];
+};
+iedge = function (node1, node2) {
+    node1.ch[node1.chn] = node2;
+    node1.chn = node1.chn + 1;
+    node2.depth = node1.depth + 1;
+    complayout ();
+    clear (canvas);
+    drawtree (tree);
+};
+fix = function (node, op, np) {
+    if (node.depth ~= 0)
+        dist.y = dist.y + (op.y - np.y) / node.depth;
+    if (node.rank ~= 0)
+        dist.x = dist.x + (np.x - op.x) / node.rank;
+    complayout ();
+    clear (canvas);
+    drawtree (tree);
+};
+nodesize = function (node) {
+    local siz;
+    if (~(siz = textsize (canvas, node.name, fontname, fontsize)))
+        siz = defsize;
+    else {
+        siz.x = siz.x + 8;
+        siz.y = siz.y + 8;
+    }
+    return siz;
+};
+changenode = function (nodestyle) {
+    drawnode = nodestyle;
+    clear (canvas);
+    drawtree (tree);
+};
+
+# user interface functions
+#
+leftdown = function (data) {
+    if (~data.obj)
+        inode (data.pos, null);
+};
+leftup = function (data) {
+    if (data.pobj)
+        fix (data.pobj, data.ppos, data.pos);
+};
+middleup = function (data) {
+    if (data.pobj & data.obj)
+        iedge (data.pobj, data.obj);
+};
+dops = function () {
+    local s;
+
+    s = ['x' = 8 * 300; 'y' = 10.5 * 300;];
+    fontname = 'Times-Roman';
+    canvas = createwidget (-1, ['type' = 'ps'; 'size' = s;]);
+    setwidgetattr (canvas, ['window' = wrect;]);
+    drawtree (tree);
+    destroywidget (canvas);
+    canvas=defcanvas;
+    fontname = 'fixed';
+};
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/2D.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/3D.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/Thumbs.db has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/smyrna/attr_widgets.dot	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,50 @@
+digraph smyrna_attr_widgets
+{
+    graph[color_button_bgcolor="settingsColorBtn1"];
+    graph[color_button_bordercolor="settingsColorBtn2"];
+    graph[color_button_gridcolor="settingsColorBtn3"];
+    graph[color_button_selectednodecolor="settingsColorBtn8"];
+    graph[color_button_selectededgecolor="settingsColorBtn9"];
+    graph[color_button_defaultnodecolor="DefaultNodeCbtn"];
+    graph[color_button_defaultedgecolor="DefaultEdgeCbtn"];
+    graph[color_button_topologicaltopviewfinestcolor="settingsColorBtn9"];
+    graph[color_button_topologicaltopviewcoarsestcolor="settingsColorBtn9"];
+    graph[color_button_topologicalfisheyefinestcolor="settingsColorBtn10"];
+    graph[color_button_topologicalfisheyecoarsestcolor="settingsColorBtn11"];
+    graph[text_box_topologicalfisheyelabelattribute="finenodelabelattribute"];
+    graph[check_box_bordervisible="settingsChkBox2"];
+    graph[check_box_gridvisible="settingsChkBox3"];
+    graph[check_box_drawnodes="settingsChkBox5-1"];
+    graph[check_box_drawedges="settingsChkBox5-2"];
+    graph[check_box_edgesselectable="chkboxEdgeSelect"];
+    graph[check_box_nodesselectable="chkboxNodeSelect"];
+    graph[combobox_labelglutfont="labelfont"];
+    graph[combobox_defaultnodeshape="settingscombobox1"];
+    graph[combobox_colortheme="colorthemecb"];
+    graph[color_button_nodelabelcolor="nodelabelcolor"];
+    graph[color_button_edgelabelcolor="edgelabelcolor"];
+    graph[text_box_nodelabelattribute="labelnodeattribute"];
+    graph[text_box_edgecolorattribute="edgecolortxt"];
+    graph[text_box_edgelabelattribute="labeledgeattribute"];
+    graph[check_box_labelwithdegree="labelwithdegree"];
+    graph[spin_button_labelnumberofnodes="labelzoomfactor"];
+    graph[check_box_shownodelabels="labelshownodes"];
+    graph[check_box_showedgelabels="labelshowedges"];
+    graph[check_box_usermode="settingsChkBox10"];
+    graph[check_box_antialiasing="settingsChkBox12"];
+    graph[check_box_topologicalfisheyedist2limit="settingsChkBox13"];
+    graph[check_box_topologicalfisheyeanimate="settingsChkBox14"];
+    graph[check_box_topologicalfisheyelabelfinenodes="settingsChkBox15"];
+    graph[check_box_topologicalfisheyecolornodes="settingsChkBox16"];
+    graph[check_box_topologicalfisheyecoloredges="settingsChkBox17"];
+    graph[check_box_topologicalfisheyelabelfocus="settingsChkBox18"];
+    graph[spin_button_defaultfisheyemagnifierradius="settingsspinbutton4"];
+    graph[spin_button_defaultfisheyemagnifierdistort="settingsspinbutton5"];
+    graph[spin_button_topologicalfisheyefinenodes="settingsspinbutton6"];
+    graph[spin_button_topologicalfisheyecoarseningfactor="settingsspinbutton7"];
+    graph[spin_button_topologicalfisheyedistortionfactor="settingsspinbutton8"];
+    graph[scale_button_defaultnodealpha="settingsscale1"];
+    graph[scale_button_defaultedgealpha="settingsscale2"];
+    graph[scale_button_nodesize="nodesizescale"];
+    graph[combobox_edgerender="edgerendercb"];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/smyrna/attrs.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+F,Damping, 0.99, GRAPH, NEATO
+F,Epsilon, , GRAPH, NEATO
+A,URL, , ANY_ELEMENT, ALL_ENGINES
+A,arrowhead, normal, EDGE, ALL_ENGINES
+F,arrowsize, 1.0, EDGE, ALL_ENGINES
+A,arrowtail, normal, EDGE, ALL_ENGINES
+A,bb, , GRAPH, ALL_ENGINES
+C,bgcolor, white, GRAPH Or CLUSTER, ALL_ENGINES
+A,bottomlabel, , NODE, ALL_ENGINES
+B,center, false, GRAPH, ALL_ENGINES
+A,clusterrank, local, GRAPH, DOT
+C,color,, EDGE Or NODE Or CLUSTER, ALL_ENGINES
+A,comment, , EDGE Or NODE Or GRAPH, ALL_ENGINES
+B,compound, false, GRAPH, DOT
+B,concentrate, false, GRAPH, DOT
+B,constraint, true, EDGE, DOT
+B,decorate, false, EDGE, ALL_ENGINES
+D,dir, forward, EDGE, ALL_ENGINES
+F,distortion, 0.0, NODE, ALL_ENGINES
+C,fillcolor, lightgrey, NODE Or CLUSTER, ALL_ENGINES
+B,fixedsize, false, NODE, ALL_ENGINES
+C,fontcolor, green, EDGE Or NODE Or GRAPH Or CLUSTER, ALL_ENGINES
+A,fontname, Times-Roman, EDGE Or NODE Or GRAPH Or CLUSTER, ALL_ENGINES
+A,fontpath, , GRAPH, ALL_ENGINES
+I,fontsize, 14.0, EDGE Or NODE Or GRAPH Or CLUSTER, ALL_ENGINES
+A,group, , NODE, DOT
+A,headURL, , EDGE, ALL_ENGINES
+A,headlabel, , EDGE, ALL_ENGINES
+A,headport, center, EDGE, ALL_ENGINES
+F,height, 0.5, NODE, ALL_ENGINES
+A,label, , EDGE Or NODE Or GRAPH Or CLUSTER, ALL_ENGINES
+F,labelangle, -25.0, EDGE, ALL_ENGINES
+F,labeldistance, 1.0, EDGE, ALL_ENGINES
+B,labelfloat, false, EDGE, ALL_ENGINES
+C,labelfontcolor, black, EDGE, ALL_ENGINES
+A,labelfontname, Times-Roman, EDGE, ALL_ENGINES
+I,labelfontsize, 11.0, EDGE, ALL_ENGINES
+A,labeljust, , ANY_ELEMENT, DOT
+A,labelloc, t, GRAPH Or CLUSTER, DOT
+A,layer, , EDGE Or NODE, ALL_ENGINES
+A,layers, , GRAPH, ALL_ENGINES
+F,len, 1.0, EDGE, NEATO
+A,lhead, , EDGE, DOT
+A,lp, , EDGE Or GRAPH Or CLUSTER, ALL_ENGINES
+A,ltail, , EDGE, DOT
+F,margin, , GRAPH, ALL_ENGINES
+I,maxiter, , GRAPH, NEATO
+F,mclimit, 1.0, GRAPH, DOT
+I,minlen, 1, EDGE, DOT
+A,model, , GRAPH, NEATO
+F,nodesep, 0.25, GRAPH, DOT
+B,normalize, false, GRAPH, NEATO
+F,nslimit, , GRAPH, DOT
+A,ordering, , GRAPH, DOT
+F,orientation, 0.0, NODE, ALL_ENGINES
+A,orientation, , GRAPH, ALL_ENGINES
+B,overlap, , GRAPH, NEATO
+B,pack, false, GRAPH, NEATO
+A,page, , GRAPH, ALL_ENGINES
+A,pagedir, BL, GRAPH, ALL_ENGINES
+C,pencolor, black, CLUSTER, ALL_ENGINES
+I,peripheries, 0, NODE, ALL_ENGINES
+B,pin, false, NODE, NEATO
+A,pos, , EDGE Or NODE, ALL_ENGINES
+F,quantum, 0.0, GRAPH, ALL_ENGINES
+A,rank, , SUBGRAPH, DOT
+A,rankdir, , GRAPH, DOT
+F,ranksep, , GRAPH, ALL_ENGINES
+F,ratio, , GRAPH, ALL_ENGINES
+A,rects, , NODE, ALL_ENGINES
+B,regular, false, NODE, ALL_ENGINES
+B,remincross, false, GRAPH, DOT
+I,rotate, 0, GRAPH, ALL_ENGINES
+A,samehead, , EDGE, DOT
+A,sametail, , EDGE, DOT
+I,samplepoints, 8, GRAPH, ALL_ENGINES
+I,searchsize, 30, GRAPH, DOT
+F,sep, 0.01, GRAPH, NEATO
+A,shape, ellipse, NODE, ALL_ENGINES
+A,shapefile, , NODE, ALL_ENGINES
+I,showboxes, 0, EDGE Or NODE Or GRAPH, DOT
+I,sides, 4, NODE, ALL_ENGINES
+F,size, , GRAPH, ALL_ENGINES
+F,skew, 0.0, NODE, ALL_ENGINES
+B,splines, false, GRAPH, NEATO
+A,start, , GRAPH, ALL_ENGINES
+A,style, , EDGE Or NODE, ALL_ENGINES
+A,stylesheet, , GRAPH, ALL_ENGINES
+A,tailURL, , EDGE, ALL_ENGINES
+A,taillabel, , EDGE, ALL_ENGINES
+A,tailport, center, EDGE, ALL_ENGINES
+A,toplabel, , NODE, ALL_ENGINES
+A,vertices, , NODE, ALL_ENGINES
+F,voro_margin, 0.05, GRAPH, NEATO
+F,weight, , EDGE, DOT Or NEATO
+F,width, 0.75, NODE, ALL_ENGINES
+F,z, 0.0, NODE, ALL_ENGINES
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/center.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/details.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/edge.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/fish.PNG has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/fisheye.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/fit.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/magnifier.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/mod_3D.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/mod_fisheye.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/smyrna/mouse_actions.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,34 @@
+#Handled actions:
+#MM_PAN		
+#MM_ROTATE
+#MM_SINGLE_SELECT
+#MM_RECTANGULAR_SELECT
+#MM_MOVE
+#MM_FISHEYE_MAGNIFIER
+#keys:These are pre defined keys in the code , more keys can be added by using their GTK key event correspondants, 0 means no key
+#B_LSHIFT	Left Shift
+#B_RSHIFT	Right Shift
+#B_LCTRL	Left CTRL
+#B_RCTRL	Right CTRL
+#view modes , use one from the following list for each line
+#ALL		Action is always active
+#2D		active only in 2D mode
+#3D		active in only 3D mode
+#FISHEYE	active in only fisheye mode
+#NO_FISHEYE	active when mode is not fisheye
+#mouse_button
+#LEFT
+#RIGHT
+#MIDDLE
+#drag
+#specify if action requires mouse to be dragged
+#Line format
+#Action,hotkey,view_mode,mouse_button,drag
+#COMBO1
+MM_PAN,0,ALL,LEFT,1
+MM_ROTATE,B_LSHIFT,3D,LEFT,1
+MM_SINGLE_SELECT,0,NO_FISHEYE,RIGHT,0 
+MM_RECTANGULAR_SELECT,0,ALL,RIGHT,1 
+MM_MOVE,B_LCTRL,2D,LEFT,1 
+MM_FISHEYE_MAGNIFIER,B_LSHIFT,2D,LEFT,1 
+MM_FISHEYE_PICK,0,FISHEYE,RIGHT,0 
\ No newline at end of file
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/move.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/no_fisheye.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/node.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/smyrna/original_smyrna.glade	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5317 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkWindow" id="frmMain">
+  <property name="width_request">900</property>
+  <property name="height_request">700</property>
+  <property name="title" translatable="yes">Smyrna Graph visualizer ver: 0.99  ATT</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_CENTER</property>
+  <property name="modal">False</property>
+  <property name="default_width">900</property>
+  <property name="default_height">700</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkVBox" id="vbox2">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child>
+	<widget class="GtkHBox" id="hbox13">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkMenuBar" id="menubar1">
+	      <property name="width_request">540</property>
+	      <property name="visible">True</property>
+	      <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
+	      <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
+
+	      <child>
+		<widget class="GtkMenuItem" id="menuitem1">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_File</property>
+		  <property name="use_underline">True</property>
+
+		  <child>
+		    <widget class="GtkMenu" id="menuitem1_menu">
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mOpen">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-open</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mOpenSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mSave">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-save</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mSaveSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mSaveAs">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-save-as</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mSaveAsSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
+			  <property name="visible">True</property>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mQuit">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-quit</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mQuitSlot"/>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+
+	      <child>
+		<widget class="GtkMenuItem" id="menuitem2">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_Edit</property>
+		  <property name="use_underline">True</property>
+
+		  <child>
+		    <widget class="GtkMenu" id="menuitem2_menu">
+
+		      <child>
+			<widget class="GtkMenuItem" id="mTopviewSettings">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Smyrna Settings</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mTopviewSettingsSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="mAttributes">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Attributes</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mAttributesSlot" last_modification_time="Fri, 06 Nov 2009 17:03:12 GMT"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="node_list1">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Node List</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mNodeListSlot" last_modification_time="Fri, 06 Nov 2009 17:02:05 GMT"/>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+
+	      <child>
+		<widget class="GtkMenuItem" id="menuitem3">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_View</property>
+		  <property name="use_underline">True</property>
+
+		  <child>
+		    <widget class="GtkMenu" id="menuitem3_menu">
+
+		      <child>
+			<widget class="GtkMenuItem" id="show_console1">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Show Console</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mShowConsoleSlot" last_modification_time="Wed, 22 Jul 2009 16:17:32 GMT"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="hide_console1">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Hide Console</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mHideConsoleSlot" last_modification_time="Wed, 22 Jul 2009 16:17:32 GMT"/>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+
+	      <child>
+		<widget class="GtkMenuItem" id="menuitem6">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Select</property>
+		  <property name="use_underline">True</property>
+
+		  <child>
+		    <widget class="GtkMenu" id="menuitem6_menu">
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mSelectAll">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-select-all</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mSelectAllSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="mUnselectAll">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Unselect All</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mUnselectAllSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem7">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Select All Nodes</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mSelectAllNodesSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem8">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Select All Edges</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mSelectAllEdgesSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem9">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Select All Clusters</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mSelectAllClustersSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem10">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Unselect All Nodes</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mUnselectAllNodesSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem11">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Unselect All Edges</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mUnselectAllEdgesSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem12">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Unselect All Clusters</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mUnselectAllClustersSlot"/>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+
+	      <child>
+		<widget class="GtkMenuItem" id="menuitem4">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_Help</property>
+		  <property name="use_underline">True</property>
+
+		  <child>
+		    <widget class="GtkMenu" id="menuitem4_menu">
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mAbout">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-about</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mAbout"/>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label128">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Active Graph:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_RIGHT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">1</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">5</property>
+	      <property name="ypad">2</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="button10">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Remove</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	      <property name="pack_type">GTK_PACK_END</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <placeholder/>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnActivateGraph">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Activate</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="on_btnActivateGraph_clicked" last_modification_time="Tue, 23 Jun 2009 16:15:08 GMT"/>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	      <property name="pack_type">GTK_PACK_END</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">False</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkHBox" id="hbox11">
+	  <property name="height_request">0</property>
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <placeholder/>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox13">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkScrolledWindow" id="scrolledwindow7">
+		  <property name="width_request">215</property>
+		  <property name="height_request">488</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="shadow_type">GTK_SHADOW_IN</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkTextView" id="mainconsole">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="overwrite">False</property>
+		      <property name="accepts_tab">True</property>
+		      <property name="justification">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap_mode">GTK_WRAP_NONE</property>
+		      <property name="cursor_visible">True</property>
+		      <property name="pixels_above_lines">0</property>
+		      <property name="pixels_below_lines">0</property>
+		      <property name="pixels_inside_wrap">0</property>
+		      <property name="left_margin">0</property>
+		      <property name="right_margin">0</property>
+		      <property name="indent">0</property>
+		      <property name="text" translatable="yes"></property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkTable" id="table17">
+		  <property name="visible">True</property>
+		  <property name="n_rows">1</property>
+		  <property name="n_columns">4</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">0</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkButton" id="consoledecbtn">
+		      <property name="width_request">27</property>
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">-</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_consoledecbtn_clicked" last_modification_time="Wed, 22 Jul 2009 15:24:50 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="consoleincbtn">
+		      <property name="width_request">27</property>
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">+</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_consoleincbtn_clicked" last_modification_time="Thu, 23 Jul 2009 18:54:38 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">3</property>
+		      <property name="right_attach">4</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="clearconsolebtn">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Clear</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_clearconsolebtn_clicked" last_modification_time="Wed, 22 Jul 2009 15:22:56 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="hideconsolebtn">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Hide</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_hideconsolebtn_clicked" last_modification_time="Wed, 22 Jul 2009 15:23:55 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkWindow" id="frmTVNodes">
+  <property name="width_request">950</property>
+  <property name="height_request">680</property>
+  <property name="title" translatable="yes"></property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_MOUSE</property>
+  <property name="modal">False</property>
+  <property name="default_width">950</property>
+  <property name="default_height">680</property>
+  <property name="resizable">False</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkVBox" id="vbox3">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child>
+	<widget class="GtkLayout" id="layout10">
+	  <property name="width_request">0</property>
+	  <property name="height_request">66</property>
+	  <property name="visible">True</property>
+	  <property name="width">400</property>
+	  <property name="height">400</property>
+	  <property name="hadjustment">0 0 950 0 855 950</property>
+	  <property name="vadjustment">0 0 400 0 59.4 66</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label8">
+	      <property name="width_request">60</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">ID</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">30</property>
+	      <property name="y">222</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkCheckButton" id="cgbTVSelect">
+	      <property name="width_request">25</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="relief">GTK_RELIEF_NONE</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	      <signal name="toggled" handler="cgbTVSelect_toggled_cb"/>
+
+	      <child>
+		<placeholder/>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="x">16</property>
+	      <property name="y">48</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="lblTVData1">
+	      <property name="width_request">100</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">D</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">360</property>
+	      <property name="y">47</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="lblTVData2">
+	      <property name="width_request">100</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Data2</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">566</property>
+	      <property name="y">47</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label11">
+	      <property name="width_request">51</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Visible</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">130</property>
+	      <property name="y">32</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label12">
+	      <property name="width_request">73</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Highlighted</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">184</property>
+	      <property name="y">32</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkCheckButton" id="cgbTVVisible">
+	      <property name="width_request">20</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	      <signal name="toggled" handler="cgbTVVisible_toggled_cb"/>
+
+	      <child>
+		<placeholder/>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="x">139</property>
+	      <property name="y">48</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkCheckButton" id="cgbTVHighlighted">
+	      <property name="width_request">20</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes"></property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	      <signal name="toggled" handler="cgbTVHighlighted_toggled_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">204</property>
+	      <property name="y">48</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label20">
+	      <property name="width_request">53</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Selected</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">0</property>
+	      <property name="y">32</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label21">
+	      <property name="width_request">28</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">ID</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">34</property>
+	      <property name="y">47</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVSelectAll">
+	      <property name="width_request">75</property>
+	      <property name="height_request">25</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Select All</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVSelectAll_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">3</property>
+	      <property name="y">4</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVUnselectAll">
+	      <property name="width_request">80</property>
+	      <property name="height_request">25</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Unselect All</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVUnselectAll_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">80</property>
+	      <property name="y">4</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVShowAll">
+	      <property name="width_request">98</property>
+	      <property name="height_request">25</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Show All</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVShowAll_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">176</property>
+	      <property name="y">4</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVHideAll">
+	      <property name="width_request">100</property>
+	      <property name="height_request">25</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Hide All</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVHideAll_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">288</property>
+	      <property name="y">4</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVHideAll1">
+	      <property name="width_request">150</property>
+	      <property name="height_request">25</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Save As Subgraph</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVSaveAs_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">400</property>
+	      <property name="y">4</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label131">
+	      <property name="width_request">40</property>
+	      <property name="height_request">16</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">name</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">280</property>
+	      <property name="y">48</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkLayout" id="layoutTVData">
+	  <property name="visible">True</property>
+	  <property name="width">400</property>
+	  <property name="height">400</property>
+	  <property name="hadjustment">0 0 950 0 855 950</property>
+	  <property name="vadjustment">0 0 574 0 516.6 574</property>
+
+	  <child>
+	    <widget class="GtkHSeparator" id="hseparator3">
+	      <property name="width_request">947</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	    </widget>
+	    <packing>
+	      <property name="x">4</property>
+	      <property name="y">-9</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkHBox" id="hbox1">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout13">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 400 0 304.2 338</property>
+	      <property name="vadjustment">0 0 400 0 36 40</property>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVFilter">
+		  <property name="width_request">80</property>
+		  <property name="height_request">30</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Filter</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVFilter_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">3</property>
+		  <property name="y">8</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout12">
+	      <property name="width_request">178</property>
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 516 0 464.4 516</property>
+	      <property name="vadjustment">0 0 400 0 36 40</property>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVFirst">
+		  <property name="width_request">40</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&lt;&lt;</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVFirst_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">7</property>
+		  <property name="y">10</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVPrevious">
+		  <property name="width_request">40</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&lt;</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVPrevious_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">51</property>
+		  <property name="y">10</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVNext">
+		  <property name="width_request">40</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&gt;</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVNext_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">95</property>
+		  <property name="y">10</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVLast">
+		  <property name="width_request">40</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&gt;&gt;</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVLast_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">140</property>
+		  <property name="y">10</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="lblTVPage">
+		  <property name="width_request">136</property>
+		  <property name="height_request">20</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Page (0/0)</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="x">180</property>
+		  <property name="y">13</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVGotopage">
+		  <property name="width_request">90</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Go to page #</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVGotopage_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">317</property>
+		  <property name="y">10</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkSpinButton" id="spnTVGotopage">
+		  <property name="width_request">99</property>
+		  <property name="height_request">23</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">0</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">0 0 1000000 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="x">410</property>
+		  <property name="y">11</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout9">
+	      <property name="width_request">96</property>
+	      <property name="height_request">40</property>
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 400 0 86.4 96</property>
+	      <property name="vadjustment">0 0 400 0 36 40</property>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVOK">
+		  <property name="width_request">80</property>
+		  <property name="height_request">30</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">OK</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVOK_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">9</property>
+		  <property name="y">7</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="dlgTVFilter">
+  <property name="border_width">5</property>
+  <property name="width_request">590</property>
+  <property name="height_request">196</property>
+  <property name="title" translatable="yes"></property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="default_width">590</property>
+  <property name="default_height">350</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">False</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox2">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">2</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area2">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVFilterCancel">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Cancel</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">2</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVFilterApply">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Apply</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">1</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkLayout" id="layout11">
+	  <property name="visible">True</property>
+	  <property name="width">400</property>
+	  <property name="height">400</property>
+	  <property name="hadjustment">0 0 576 0 518.4 576</property>
+	  <property name="vadjustment">0 0 400 0 128.7 143</property>
+
+	  <child>
+	    <widget class="GtkTable" id="table1">
+	      <property name="width_request">419</property>
+	      <property name="height_request">80</property>
+	      <property name="visible">True</property>
+	      <property name="n_rows">3</property>
+	      <property name="n_columns">2</property>
+	      <property name="homogeneous">False</property>
+	      <property name="row_spacing">0</property>
+	      <property name="column_spacing">0</property>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox2">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterSel1">
+		      <property name="width_request">15</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">All</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterSel2">
+		      <property name="width_request">75</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Selected</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterSel1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterSel3">
+		      <property name="width_request">100</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Non-selected</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterSel1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label3">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Selection</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label9">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Visible</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">1</property>
+		  <property name="bottom_attach">2</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label10">
+		  <property name="label" translatable="yes">Highlighted</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">2</property>
+		  <property name="bottom_attach">3</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox3">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterVisible1">
+		      <property name="width_request">15</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">All</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterVisible2">
+		      <property name="width_request">75</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Visible</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterVisible1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterVisible3">
+		      <property name="width_request">100</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Hidden</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterVisible1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">1</property>
+		  <property name="bottom_attach">2</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox4">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterHigh1">
+		      <property name="width_request">15</property>
+		      <property name="label" translatable="yes">All</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterHigh2">
+		      <property name="width_request">75</property>
+		      <property name="label" translatable="yes">Highlighted</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterHigh1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterHigh3">
+		      <property name="width_request">100</property>
+		      <property name="label" translatable="yes">Not Highlighted</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterHigh1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">2</property>
+		  <property name="bottom_attach">3</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="x">2</property>
+	      <property name="y">30</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label13">
+	      <property name="width_request">181</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">FILTER CRITERIAS</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">0</property>
+	      <property name="y">0</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHSeparator" id="hseparator4">
+	      <property name="width_request">581</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	    </widget>
+	    <packing>
+	      <property name="x">0</property>
+	      <property name="y">13</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVFilterClear">
+	      <property name="width_request">100</property>
+	      <property name="height_request">29</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Clear Filter</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVFilterClear_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">467</property>
+	      <property name="y">32</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="dlgSettings">
+  <property name="border_width">5</property>
+  <property name="width_request">676</property>
+  <property name="height_request">505</property>
+  <property name="title" translatable="yes"></property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">True</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">False</property>
+  <signal name="delete_event" handler="on_dlgSettings_close" last_modification_time="Thu, 03 Dec 2009 16:39:12 GMT"/>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox5">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">2</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area5">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="button15">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Cancel</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">0</property>
+	      <signal name="clicked" handler="on_settingsCancelBtn_clicked" last_modification_time="Wed, 11 Nov 2009 20:53:28 GMT"/>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="button12">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Apply</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">0</property>
+	      <signal name="clicked" handler="on_settingsApplyBtn_clicked" last_modification_time="Mon, 20 Jul 2009 16:39:55 GMT"/>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="button11">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">OK</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">0</property>
+	      <signal name="clicked" handler="on_settingsOKBtn_clicked" last_modification_time="Tue, 26 May 2009 19:00:55 GMT"/>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkNotebook" id="notebook3">
+	  <property name="visible">True</property>
+	  <property name="show_tabs">True</property>
+	  <property name="show_border">True</property>
+	  <property name="tab_pos">GTK_POS_TOP</property>
+	  <property name="scrollable">False</property>
+	  <property name="enable_popup">False</property>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout15">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 658 0 592.2 658</property>
+	      <property name="vadjustment">0 0 425 0 382.5 425</property>
+
+	      <child>
+		<widget class="GtkTable" id="table4">
+		  <property name="width_request">443</property>
+		  <property name="height_request">408</property>
+		  <property name="visible">True</property>
+		  <property name="n_rows">14</property>
+		  <property name="n_columns">3</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">0</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox3">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox2">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="settingsColorBtn3">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="settingsColorBtn2">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label41">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Default Edge Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label40">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Default Node Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label39">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Grid Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label32">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Border Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label31">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Background Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label81">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Draw Nodes</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">9</property>
+		      <property name="bottom_attach">10</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label82">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Draw Edges</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">10</property>
+		      <property name="bottom_attach">11</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox5-1">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">9</property>
+		      <property name="bottom_attach">10</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox5-2">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">10</property>
+		      <property name="bottom_attach">11</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label117">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Color Theme</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">11</property>
+		      <property name="bottom_attach">12</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBoxEntry" id="colorthemecb">
+		      <property name="visible">True</property>
+		      <property name="items" translatable="yes">Ice Blue
+All Pastel
+Magma
+Rain Forest</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="has_frame">True</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="changed" handler="color_change_request" last_modification_time="Tue, 17 Nov 2009 19:03:10 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">11</property>
+		      <property name="bottom_attach">12</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="DefaultNodeCbtn">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label118">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Edge Attr. For Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">12</property>
+		      <property name="bottom_attach">13</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkEntry" id="edgecolortxt">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="visibility">True</property>
+		      <property name="max_length">0</property>
+		      <property name="text" translatable="yes"></property>
+		      <property name="has_frame">True</property>
+		      <property name="invisible_char">*</property>
+		      <property name="activates_default">False</property>
+		      <signal name="changed" handler="color_change_request" last_modification_time="Tue, 17 Nov 2009 19:03:56 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">12</property>
+		      <property name="bottom_attach">13</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="DefaultEdgeCbtn">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label44">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Selected Node Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="settingsColorBtn8">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label45">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Selected Edge Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="settingsColorBtn9">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="settingsColorBtn1">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label129">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Nodes Selectable?</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">7</property>
+		      <property name="bottom_attach">8</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label130">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Edges Selectable?</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">8</property>
+		      <property name="bottom_attach">9</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="chkboxNodeSelect">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes"></property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">7</property>
+		      <property name="bottom_attach">8</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="chkboxEdgeSelect">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes"></property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">8</property>
+		      <property name="bottom_attach">9</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label132">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Show Edges </property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">13</property>
+		      <property name="bottom_attach">14</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBoxEntry" id="edgerendercb">
+		      <property name="visible">True</property>
+		      <property name="items" translatable="yes">Always
+When head or tail is within viewport
+</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="has_frame">True</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">13</property>
+		      <property name="bottom_attach">14</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">10</property>
+		  <property name="y">17</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label53">
+		  <property name="width_request">90</property>
+		  <property name="height_request">21</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Color</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="x">152</property>
+		  <property name="y">0</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label54">
+		  <property name="width_request">100</property>
+		  <property name="height_request">20</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Apply</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">15</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="x">408</property>
+		  <property name="y">0</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label46">
+	      <property name="width_request">60</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">General</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout16">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 658 0 592.2 658</property>
+	      <property name="vadjustment">0 0 425 0 382.5 425</property>
+
+	      <child>
+		<widget class="GtkTable" id="table16">
+		  <property name="width_request">32</property>
+		  <property name="height_request">80</property>
+		  <property name="visible">True</property>
+		  <property name="n_rows">8</property>
+		  <property name="n_columns">3</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">0</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkComboBox" id="labelfont">
+		      <property name="visible">True</property>
+		      <property name="items" translatable="yes"> GLUT_BITMAP_8_BY_13
+GLUT_BITMAP_9_BY_15
+GLUT_BITMAP_TIMES_ROMAN_10
+GLUT_BITMAP_TIMES_ROMAN_24
+GLUT_BITMAP_HELVETICA_10
+GLUT_BITMAP_HELVETICA_12
+GLUT_BITMAP_HELVETICA_18
+</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkEntry" id="labelnodeattribute">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="visibility">True</property>
+		      <property name="max_length">0</property>
+		      <property name="text" translatable="yes"></property>
+		      <property name="has_frame">True</property>
+		      <property name="invisible_char">*</property>
+		      <property name="activates_default">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="labelzoomfactor">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">0</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">1200 0 5000 1 50 50</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label110">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Max # of nodes to display</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label109">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Label Visibility with degree</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label108">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Edge Label Attribute</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label107">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Node Label Attribute</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label106">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Default Node Label Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label105">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Font</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label111">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Show Node Labels</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label112">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Show Edge Labels</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">7</property>
+		      <property name="bottom_attach">8</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="labelshowedges">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes"></property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">7</property>
+		      <property name="bottom_attach">8</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="labelshownodes">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="labelwithdegree">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkEntry" id="labeledgeattribute">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="visibility">True</property>
+		      <property name="max_length">0</property>
+		      <property name="text" translatable="yes"></property>
+		      <property name="has_frame">True</property>
+		      <property name="invisible_char">*</property>
+		      <property name="activates_default">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHBox" id="hbox8">
+		      <property name="visible">True</property>
+		      <property name="homogeneous">False</property>
+		      <property name="spacing">0</property>
+
+		      <child>
+			<widget class="GtkColorButton" id="nodelabelcolor">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="use_alpha">False</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label113">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">     Default Edge Label Color </property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkColorButton" id="edgelabelcolor">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="use_alpha">False</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">32</property>
+		  <property name="y">26</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label47">
+	      <property name="width_request">61</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Labels</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout17">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 658 0 592.2 658</property>
+	      <property name="vadjustment">0 0 425 0 382.5 425</property>
+
+	      <child>
+		<widget class="GtkTable" id="table5">
+		  <property name="width_request">423</property>
+		  <property name="height_request">308</property>
+		  <property name="visible">True</property>
+		  <property name="n_rows">7</property>
+		  <property name="n_columns">2</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">0</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label49">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Advanced Mode</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label50">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Node Shape</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label52">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Anti-aliasing</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label84">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Node Alpha</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label85">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Edge Alpha</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHScale" id="settingsscale1">
+		      <property name="visible">True</property>
+		      <property name="draw_value">True</property>
+		      <property name="value_pos">GTK_POS_TOP</property>
+		      <property name="digits">1</property>
+		      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		      <property name="inverted">False</property>
+		      <property name="adjustment">1 0 1 0.00999999977648 0 0</property>
+		      <signal name="value_changed" handler="color_change_request" last_modification_time="Thu, 19 Nov 2009 17:09:07 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHScale" id="settingsscale2">
+		      <property name="visible">True</property>
+		      <property name="draw_value">True</property>
+		      <property name="value_pos">GTK_POS_TOP</property>
+		      <property name="digits">1</property>
+		      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		      <property name="inverted">False</property>
+		      <property name="adjustment">1 0 1 0.01 0 0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBox" id="settingscombobox1">
+		      <property name="visible">True</property>
+		      <property name="items" translatable="yes">OpenGL dots
+Spherical
+Custom</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox10">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes"></property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox12">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes"></property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label119">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Node Size</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHScale" id="nodesizescale">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="draw_value">True</property>
+		      <property name="value_pos">GTK_POS_TOP</property>
+		      <property name="digits">0</property>
+		      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		      <property name="inverted">False</property>
+		      <property name="adjustment">5 0 100 0 0 0</property>
+		      <signal name="value_changed" handler="size_change_request" last_modification_time="Thu, 19 Nov 2009 16:56:12 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">28</property>
+		  <property name="y">26</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label48">
+	      <property name="width_request">56</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Graph </property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout18">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 658 0 592.2 658</property>
+	      <property name="vadjustment">0 0 425 0 382.5 425</property>
+
+	      <child>
+		<widget class="GtkTable" id="table6">
+		  <property name="width_request">176</property>
+		  <property name="height_request">84</property>
+		  <property name="visible">True</property>
+		  <property name="n_rows">3</property>
+		  <property name="n_columns">2</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">2</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label56">
+		      <property name="width_request">84</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Width</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="settingsspinbutton2">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">0</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">3 0 5000 1 50 10</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="settingsspinbutton1">
+		      <property name="width_request">128</property>
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">0</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">3 0 5000 1 50 10</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label58">
+		      <property name="width_request">84</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Height</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label61">
+		      <property name="width_request">84</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Zoom X</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="settingsspinbutton3">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">2</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">2 2 20 1 50 10</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">40</property>
+		  <property name="y">48</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label59">
+		  <property name="width_request">118</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Magnifier Settings</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">5</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="x">32</property>
+		  <property name="y">15</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHSeparator" id="hseparator10">
+		  <property name="width_request">401</property>
+		  <property name="height_request">20</property>
+		  <property name="visible">True</property>
+		</widget>
+		<packing>
+		  <property name="x">35</property>
+		  <property name="y">29</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label60">
+		  <property name="width_request">194</property>
+		  <property name="height_request">20</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Fisheye Magnifier Settings</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">5</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="x">33</property>
+		  <property name="y">159</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHSeparator" id="hseparator11">
+		  <property name="width_request">400</property>
+		  <property name="height_request">31</property>
+		  <property name="visible">True</property>
+		</widget>
+		<packing>
+		  <property name="x">35</property>
+		  <property name="y">166</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkTable" id="table7">
+		  <property name="width_request">124</property>
+		  <property name="height_request">67</property>
+		  <property name="visible">True</property>
+		  <property name="n_rows">2</property>
+		  <property name="n_columns">2</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">2</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label63">
+		      <property name="width_request">84</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Distortion</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="settingsspinbutton4">
+		      <property name="width_request">128</property>
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">0</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">5 0 5000 1 50 10</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="settingsspinbutton5">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">0</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">4 0 5000 1 50 10</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label65">
+		      <property name="width_request">84</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Radius</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">37</property>
+		  <property name="y">192</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label55">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Magnifiers</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout19">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 658 0 592.2 658</property>
+	      <property name="vadjustment">0 0 425 0 382.5 425</property>
+
+	      <child>
+		<widget class="GtkVBox" id="vbox6">
+		  <property name="width_request">430</property>
+		  <property name="height_request">405</property>
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkTable" id="table9">
+		      <property name="height_request">76</property>
+		      <property name="visible">True</property>
+		      <property name="n_rows">4</property>
+		      <property name="n_columns">3</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">0</property>
+
+		      <child>
+			<widget class="GtkLabel" id="label66">
+			  <property name="width_request">1</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes"># of fine nodes</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">5</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkSpinButton" id="settingsspinbutton6">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="climb_rate">1</property>
+			  <property name="digits">0</property>
+			  <property name="numeric">False</property>
+			  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+			  <property name="snap_to_ticks">False</property>
+			  <property name="wrap">False</property>
+			  <property name="adjustment">0 0 9999999 1 10 10</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label67">
+			  <property name="width_request">1</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Coarsening factor</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">5</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkSpinButton" id="settingsspinbutton7">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="climb_rate">1</property>
+			  <property name="digits">4</property>
+			  <property name="numeric">False</property>
+			  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+			  <property name="snap_to_ticks">False</property>
+			  <property name="wrap">False</property>
+			  <property name="adjustment">0 0 9999999 0.1 10 10</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkSpinButton" id="settingsspinbutton8">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="climb_rate">1</property>
+			  <property name="digits">4</property>
+			  <property name="numeric">False</property>
+			  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+			  <property name="snap_to_ticks">False</property>
+			  <property name="wrap">False</property>
+			  <property name="adjustment">0 0 9999999 0.1 10 10</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label102">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes"># Of Fine Nodes</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label104">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Distortion Factor</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label103">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Coarsening Factor</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label116">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Fine Node Label Attribute</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">3</property>
+			  <property name="bottom_attach">4</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkEntry" id="finenodelabelattribute">
+			  <property name="visible">True</property>
+			  <property name="tooltip" translatable="yes">leave blank to show node id</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">3</property>
+			  <property name="bottom_attach">4</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHSeparator" id="hseparator12">
+		      <property name="height_request">38</property>
+		      <property name="visible">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkTable" id="table8">
+		      <property name="height_request">61</property>
+		      <property name="visible">True</property>
+		      <property name="n_rows">2</property>
+		      <property name="n_columns">3</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">0</property>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox13">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Dist 2 limit</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox14">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Animate</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox15">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Label fine nodes</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">2</property>
+			  <property name="right_attach">3</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox16">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Color nodes</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox17">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Label Coarse Nodes</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox18">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Label focus</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">2</property>
+			  <property name="right_attach">3</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHSeparator" id="hseparator13">
+		      <property name="height_request">46</property>
+		      <property name="visible">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label69">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Color extremes</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">10</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkTable" id="table10">
+		      <property name="visible">True</property>
+		      <property name="n_rows">1</property>
+		      <property name="n_columns">5</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">0</property>
+
+		      <child>
+			<widget class="GtkLabel" id="label70">
+			  <property name="width_request">122</property>
+			  <property name="height_request">32</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Finest:</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">30</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options"></property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkColorButton" id="settingsColorBtn10">
+			  <property name="visible">True</property>
+			  <property name="use_alpha">False</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label71">
+			  <property name="width_request">122</property>
+			  <property name="height_request">32</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Coarsest:</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">30</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">3</property>
+			  <property name="right_attach">4</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options"></property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkColorButton" id="settingsColorBtn11">
+			  <property name="height_request">47</property>
+			  <property name="visible">True</property>
+			  <property name="use_alpha">False</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">4</property>
+			  <property name="right_attach">5</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <placeholder/>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">7</property>
+		  <property name="y">8</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="lllllllllllll">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Topfish</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox15">
+	      <property name="width_request">179</property>
+	      <property name="height_request">323</property>
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkScrolledWindow" id="scrolledwindow5">
+		  <property name="height_request">212</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="shadow_type">GTK_SHADOW_IN</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkTextView" id="gvprtextinput">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="overwrite">False</property>
+		      <property name="accepts_tab">True</property>
+		      <property name="justification">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap_mode">GTK_WRAP_NONE</property>
+		      <property name="cursor_visible">True</property>
+		      <property name="pixels_above_lines">0</property>
+		      <property name="pixels_below_lines">0</property>
+		      <property name="pixels_inside_wrap">0</property>
+		      <property name="left_margin">0</property>
+		      <property name="right_margin">0</property>
+		      <property name="indent">0</property>
+		      <property name="text" translatable="yes"> </property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label20">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Arguments</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="gvprargs">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label114">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Output</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkScrolledWindow" id="scrolledwindow6">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="shadow_type">GTK_SHADOW_IN</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkTextView" id="gvprtextoutput">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="overwrite">False</property>
+		      <property name="accepts_tab">True</property>
+		      <property name="justification">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap_mode">GTK_WRAP_NONE</property>
+		      <property name="cursor_visible">True</property>
+		      <property name="pixels_above_lines">0</property>
+		      <property name="pixels_below_lines">0</property>
+		      <property name="pixels_inside_wrap">0</property>
+		      <property name="left_margin">0</property>
+		      <property name="right_margin">0</property>
+		      <property name="indent">0</property>
+		      <property name="text" translatable="yes"></property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox9">
+		  <property name="height_request">34</property>
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="gvprapplycb">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Clone Current Graph</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="gvprbuttonload">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Load</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_gvprbuttonload_clicked" last_modification_time="Fri, 22 May 2009 16:45:40 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="gvprbuttonsave">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Save</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_gvprbuttonsave_clicked" last_modification_time="Mon, 01 Jun 2009 16:23:07 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="button8">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Run gvpr</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="mTestgvpr" last_modification_time="Wed, 29 Apr 2009 14:54:06 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label86">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Script</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox14">
+	      <property name="width_request">0</property>
+	      <property name="height_request">0</property>
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkFixed" id="fixed7">
+		  <property name="height_request">40</property>
+		  <property name="visible">True</property>
+
+		  <child>
+		    <widget class="GtkHSeparator" id="hseparator14">
+		      <property name="width_request">456</property>
+		      <property name="height_request">16</property>
+		      <property name="visible">True</property>
+		    </widget>
+		    <packing>
+		      <property name="x">8</property>
+		      <property name="y">24</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label124">
+		      <property name="width_request">470</property>
+		      <property name="height_request">16</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">0 Nodes Selected</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="x">8</property>
+		      <property name="y">8</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkFixed" id="fixed6">
+		  <property name="width_request">351</property>
+		  <property name="height_request">381</property>
+		  <property name="visible">True</property>
+
+		  <child>
+		    <widget class="GtkHBox" id="hbox12">
+		      <property name="width_request">428</property>
+		      <property name="height_request">26</property>
+		      <property name="visible">True</property>
+		      <property name="homogeneous">False</property>
+		      <property name="spacing">0</property>
+
+		      <child>
+			<widget class="GtkRadioButton" id="attrRB0">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">GRAPH       </property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			  <signal name="clicked" handler="on_attrRB0_clicked" last_modification_time="Thu, 29 Oct 2009 20:20:28 GMT"/>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkRadioButton" id="attrRB1">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">NODE </property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			  <property name="group">attrRB0</property>
+			  <signal name="clicked" handler="on_attrRB0_clicked" last_modification_time="Thu, 29 Oct 2009 20:20:28 GMT"/>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkRadioButton" id="attrRB2">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">EDGE</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			  <property name="group">attrRB0</property>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="x">11</property>
+		      <property name="y">4</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkTable" id="table18">
+		      <property name="width_request">562</property>
+		      <property name="height_request">68</property>
+		      <property name="visible">True</property>
+		      <property name="n_rows">3</property>
+		      <property name="n_columns">6</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">0</property>
+
+		      <child>
+			<widget class="GtkEntry" id="txtAttr">
+			  <property name="width_request">88</property>
+			  <property name="height_request">21</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			  <signal name="changed" handler="on_txtAttr_changed" last_modification_time="Thu, 22 Oct 2009 20:26:47 GMT"/>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkEntry" id="txtValue">
+			  <property name="width_request">88</property>
+			  <property name="height_request">21</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkEntry" id="txtDefValue">
+			  <property name="width_request">88</property>
+			  <property name="height_request">21</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">2</property>
+			  <property name="right_attach">3</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label122">
+			  <property name="width_request">40</property>
+			  <property name="height_request">16</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Value</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label123">
+			  <property name="width_request">88</property>
+			  <property name="height_request">16</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Default Value</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">2</property>
+			  <property name="right_attach">3</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label121">
+			  <property name="width_request">96</property>
+			  <property name="height_request">16</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Attribute Name</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label125">
+			  <property name="width_request">72</property>
+			  <property name="height_request">16</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Publish</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">3</property>
+			  <property name="right_attach">4</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="attrProg">
+			  <property name="width_request">24</property>
+			  <property name="height_request">16</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes"></property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			  <signal name="toggled" handler="on_attrProg_toggled" last_modification_time="Mon, 26 Oct 2009 19:57:29 GMT"/>
+			</widget>
+			<packing>
+			  <property name="left_attach">3</property>
+			  <property name="right_attach">4</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="attrAddBtn">
+			  <property name="width_request">32</property>
+			  <property name="height_request">23</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">+</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_attrAddBtn_clicked" last_modification_time="Mon, 26 Oct 2009 22:04:52 GMT"/>
+			</widget>
+			<packing>
+			  <property name="left_attach">5</property>
+			  <property name="right_attach">6</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="attrApplyBtn">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">Apply</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_attrApplyBtn_clicked" last_modification_time="Mon, 09 Nov 2009 23:05:37 GMT"/>
+			</widget>
+			<packing>
+			  <property name="left_attach">4</property>
+			  <property name="right_attach">5</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="attrSearchBtn">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">Search</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_attrSearchBtn_clicked" last_modification_time="Wed, 11 Nov 2009 16:07:55 GMT"/>
+			</widget>
+			<packing>
+			  <property name="left_attach">4</property>
+			  <property name="right_attach">5</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="x">12</property>
+		      <property name="y">41</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label127">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Attribute</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkWindow" id="frmWait">
+  <property name="width_request">200</property>
+  <property name="height_request">178</property>
+  <property name="title" translatable="yes">Smyrna</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="default_width">274</property>
+  <property name="default_height">248</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">False</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_SPLASHSCREEN</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkFixed" id="fixed4">
+      <property name="visible">True</property>
+
+      <child>
+	<widget class="GtkImage" id="image17">
+	  <property name="width_request">188</property>
+	  <property name="height_request">176</property>
+	  <property name="visible">True</property>
+	  <property name="stock">gtk-missing-image</property>
+	  <property name="icon_size">4</property>
+	  <property name="xalign">0.5</property>
+	  <property name="yalign">0.5</property>
+	  <property name="xpad">0</property>
+	  <property name="ypad">0</property>
+	</widget>
+	<packing>
+	  <property name="x">6</property>
+	  <property name="y">1</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkLabel" id="label80">
+	  <property name="width_request">100</property>
+	  <property name="height_request">26</property>
+	  <property name="visible">True</property>
+	  <property name="label" translatable="yes">Please Wait....</property>
+	  <property name="use_underline">False</property>
+	  <property name="use_markup">False</property>
+	  <property name="justify">GTK_JUSTIFY_LEFT</property>
+	  <property name="wrap">False</property>
+	  <property name="selectable">False</property>
+	  <property name="xalign">0.5</property>
+	  <property name="yalign">0.5</property>
+	  <property name="xpad">0</property>
+	  <property name="ypad">0</property>
+	  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	  <property name="width_chars">-1</property>
+	  <property name="single_line_mode">False</property>
+	  <property name="angle">0</property>
+	</widget>
+	<packing>
+	  <property name="x">52</property>
+	  <property name="y">122</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="findDialog">
+  <property name="border_width">5</property>
+  <property name="title" translatable="yes"></property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">False</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox7">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">2</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area7">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="button3">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Cancel</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">2</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="button2">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">OK</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">1</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox8">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label94">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">
+Search in
+</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkComboBox" id="combobox1">
+	      <property name="visible">True</property>
+	      <property name="add_tearoffs">False</property>
+	      <property name="focus_on_click">True</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox7">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label93">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Regular Expression</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="findText">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/pan.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/preview.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/rect_select.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/rect_select2.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/rotate.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/smyrna/smyrna.glade	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5317 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkWindow" id="frmMain">
+  <property name="width_request">900</property>
+  <property name="height_request">700</property>
+  <property name="title" translatable="yes">Smyrna Graph visualizer ver: 0.99  ATT</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_CENTER</property>
+  <property name="modal">False</property>
+  <property name="default_width">900</property>
+  <property name="default_height">700</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkVBox" id="vbox2">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child>
+	<widget class="GtkHBox" id="hbox13">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkMenuBar" id="menubar1">
+	      <property name="width_request">540</property>
+	      <property name="visible">True</property>
+	      <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
+	      <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
+
+	      <child>
+		<widget class="GtkMenuItem" id="menuitem1">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_File</property>
+		  <property name="use_underline">True</property>
+
+		  <child>
+		    <widget class="GtkMenu" id="menuitem1_menu">
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mOpen">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-open</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mOpenSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mSave">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-save</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mSaveSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mSaveAs">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-save-as</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mSaveAsSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
+			  <property name="visible">True</property>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mQuit">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-quit</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mQuitSlot"/>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+
+	      <child>
+		<widget class="GtkMenuItem" id="menuitem2">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_Edit</property>
+		  <property name="use_underline">True</property>
+
+		  <child>
+		    <widget class="GtkMenu" id="menuitem2_menu">
+
+		      <child>
+			<widget class="GtkMenuItem" id="mTopviewSettings">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Smyrna Settings</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mTopviewSettingsSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="mAttributes">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Attributes</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mAttributesSlot" last_modification_time="Fri, 06 Nov 2009 17:03:12 GMT"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="node_list1">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Node List</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mNodeListSlot" last_modification_time="Fri, 06 Nov 2009 17:02:05 GMT"/>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+
+	      <child>
+		<widget class="GtkMenuItem" id="menuitem3">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_View</property>
+		  <property name="use_underline">True</property>
+
+		  <child>
+		    <widget class="GtkMenu" id="menuitem3_menu">
+
+		      <child>
+			<widget class="GtkMenuItem" id="show_console1">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Show Console</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mShowConsoleSlot" last_modification_time="Wed, 22 Jul 2009 16:17:32 GMT"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="hide_console1">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Hide Console</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mHideConsoleSlot" last_modification_time="Wed, 22 Jul 2009 16:17:32 GMT"/>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+
+	      <child>
+		<widget class="GtkMenuItem" id="menuitem6">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Select</property>
+		  <property name="use_underline">True</property>
+
+		  <child>
+		    <widget class="GtkMenu" id="menuitem6_menu">
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mSelectAll">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-select-all</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mSelectAllSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="mUnselectAll">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Unselect All</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mUnselectAllSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem7">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Select All Nodes</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mSelectAllNodesSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem8">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Select All Edges</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mSelectAllEdgesSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem9">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Select All Clusters</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mSelectAllClustersSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem10">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Unselect All Nodes</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mUnselectAllNodesSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem11">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Unselect All Edges</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mUnselectAllEdgesSlot"/>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkMenuItem" id="menuitem12">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Unselect All Clusters</property>
+			  <property name="use_underline">True</property>
+			  <signal name="activate" handler="mUnselectAllClustersSlot"/>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+
+	      <child>
+		<widget class="GtkMenuItem" id="menuitem4">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">_Help</property>
+		  <property name="use_underline">True</property>
+
+		  <child>
+		    <widget class="GtkMenu" id="menuitem4_menu">
+
+		      <child>
+			<widget class="GtkImageMenuItem" id="mAbout">
+			  <property name="visible">True</property>
+			  <property name="label">gtk-about</property>
+			  <property name="use_stock">True</property>
+			  <signal name="activate" handler="mAbout"/>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label128">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Active Graph:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_RIGHT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">1</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">5</property>
+	      <property name="ypad">2</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="button10">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Remove</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	      <property name="pack_type">GTK_PACK_END</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <placeholder/>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnActivateGraph">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Activate</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="on_btnActivateGraph_clicked" last_modification_time="Tue, 23 Jun 2009 16:15:08 GMT"/>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	      <property name="pack_type">GTK_PACK_END</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">False</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkHBox" id="hbox11">
+	  <property name="height_request">0</property>
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <placeholder/>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox13">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkScrolledWindow" id="scrolledwindow7">
+		  <property name="width_request">215</property>
+		  <property name="height_request">488</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="shadow_type">GTK_SHADOW_IN</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkTextView" id="mainconsole">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="overwrite">False</property>
+		      <property name="accepts_tab">True</property>
+		      <property name="justification">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap_mode">GTK_WRAP_NONE</property>
+		      <property name="cursor_visible">True</property>
+		      <property name="pixels_above_lines">0</property>
+		      <property name="pixels_below_lines">0</property>
+		      <property name="pixels_inside_wrap">0</property>
+		      <property name="left_margin">0</property>
+		      <property name="right_margin">0</property>
+		      <property name="indent">0</property>
+		      <property name="text" translatable="yes"></property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkTable" id="table17">
+		  <property name="visible">True</property>
+		  <property name="n_rows">1</property>
+		  <property name="n_columns">4</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">0</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkButton" id="consoledecbtn">
+		      <property name="width_request">27</property>
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">-</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_consoledecbtn_clicked" last_modification_time="Wed, 22 Jul 2009 15:24:50 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="consoleincbtn">
+		      <property name="width_request">27</property>
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">+</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_consoleincbtn_clicked" last_modification_time="Thu, 23 Jul 2009 18:54:38 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">3</property>
+		      <property name="right_attach">4</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="clearconsolebtn">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Clear</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_clearconsolebtn_clicked" last_modification_time="Wed, 22 Jul 2009 15:22:56 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="hideconsolebtn">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Hide</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_hideconsolebtn_clicked" last_modification_time="Wed, 22 Jul 2009 15:23:55 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkWindow" id="frmTVNodes">
+  <property name="width_request">950</property>
+  <property name="height_request">680</property>
+  <property name="title" translatable="yes"></property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_MOUSE</property>
+  <property name="modal">False</property>
+  <property name="default_width">950</property>
+  <property name="default_height">680</property>
+  <property name="resizable">False</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkVBox" id="vbox3">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child>
+	<widget class="GtkLayout" id="layout10">
+	  <property name="width_request">0</property>
+	  <property name="height_request">66</property>
+	  <property name="visible">True</property>
+	  <property name="width">400</property>
+	  <property name="height">400</property>
+	  <property name="hadjustment">0 0 950 0 855 950</property>
+	  <property name="vadjustment">0 0 400 0 59.4 66</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label8">
+	      <property name="width_request">60</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">ID</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">30</property>
+	      <property name="y">222</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkCheckButton" id="cgbTVSelect">
+	      <property name="width_request">25</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="relief">GTK_RELIEF_NONE</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	      <signal name="toggled" handler="cgbTVSelect_toggled_cb"/>
+
+	      <child>
+		<placeholder/>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="x">16</property>
+	      <property name="y">48</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="lblTVData1">
+	      <property name="width_request">100</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">D</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">360</property>
+	      <property name="y">47</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="lblTVData2">
+	      <property name="width_request">100</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Data2</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">566</property>
+	      <property name="y">47</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label11">
+	      <property name="width_request">51</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Visible</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">130</property>
+	      <property name="y">32</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label12">
+	      <property name="width_request">73</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Highlighted</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">184</property>
+	      <property name="y">32</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkCheckButton" id="cgbTVVisible">
+	      <property name="width_request">20</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	      <signal name="toggled" handler="cgbTVVisible_toggled_cb"/>
+
+	      <child>
+		<placeholder/>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="x">139</property>
+	      <property name="y">48</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkCheckButton" id="cgbTVHighlighted">
+	      <property name="width_request">20</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes"></property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	      <signal name="toggled" handler="cgbTVHighlighted_toggled_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">204</property>
+	      <property name="y">48</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label20">
+	      <property name="width_request">53</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Selected</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">0</property>
+	      <property name="y">32</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label21">
+	      <property name="width_request">28</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">ID</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">34</property>
+	      <property name="y">47</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVSelectAll">
+	      <property name="width_request">75</property>
+	      <property name="height_request">25</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Select All</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVSelectAll_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">3</property>
+	      <property name="y">4</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVUnselectAll">
+	      <property name="width_request">80</property>
+	      <property name="height_request">25</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Unselect All</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVUnselectAll_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">80</property>
+	      <property name="y">4</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVShowAll">
+	      <property name="width_request">98</property>
+	      <property name="height_request">25</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Show All</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVShowAll_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">176</property>
+	      <property name="y">4</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVHideAll">
+	      <property name="width_request">100</property>
+	      <property name="height_request">25</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Hide All</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVHideAll_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">288</property>
+	      <property name="y">4</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVHideAll1">
+	      <property name="width_request">150</property>
+	      <property name="height_request">25</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Save As Subgraph</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVSaveAs_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">400</property>
+	      <property name="y">4</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label131">
+	      <property name="width_request">40</property>
+	      <property name="height_request">16</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">name</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">280</property>
+	      <property name="y">48</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkLayout" id="layoutTVData">
+	  <property name="visible">True</property>
+	  <property name="width">400</property>
+	  <property name="height">400</property>
+	  <property name="hadjustment">0 0 950 0 855 950</property>
+	  <property name="vadjustment">0 0 574 0 516.6 574</property>
+
+	  <child>
+	    <widget class="GtkHSeparator" id="hseparator3">
+	      <property name="width_request">947</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	    </widget>
+	    <packing>
+	      <property name="x">4</property>
+	      <property name="y">-9</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkHBox" id="hbox1">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout13">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 400 0 304.2 338</property>
+	      <property name="vadjustment">0 0 400 0 36 40</property>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVFilter">
+		  <property name="width_request">80</property>
+		  <property name="height_request">30</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Filter</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVFilter_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">3</property>
+		  <property name="y">8</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout12">
+	      <property name="width_request">178</property>
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 516 0 464.4 516</property>
+	      <property name="vadjustment">0 0 400 0 36 40</property>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVFirst">
+		  <property name="width_request">40</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&lt;&lt;</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVFirst_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">7</property>
+		  <property name="y">10</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVPrevious">
+		  <property name="width_request">40</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&lt;</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVPrevious_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">51</property>
+		  <property name="y">10</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVNext">
+		  <property name="width_request">40</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&gt;</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVNext_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">95</property>
+		  <property name="y">10</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVLast">
+		  <property name="width_request">40</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">&gt;&gt;</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVLast_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">140</property>
+		  <property name="y">10</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="lblTVPage">
+		  <property name="width_request">136</property>
+		  <property name="height_request">20</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Page (0/0)</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="x">180</property>
+		  <property name="y">13</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVGotopage">
+		  <property name="width_request">90</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Go to page #</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVGotopage_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">317</property>
+		  <property name="y">10</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkSpinButton" id="spnTVGotopage">
+		  <property name="width_request">99</property>
+		  <property name="height_request">23</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">0</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">0 0 1000000 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="x">410</property>
+		  <property name="y">11</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout9">
+	      <property name="width_request">96</property>
+	      <property name="height_request">40</property>
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 400 0 86.4 96</property>
+	      <property name="vadjustment">0 0 400 0 36 40</property>
+
+	      <child>
+		<widget class="GtkButton" id="btnTVOK">
+		  <property name="width_request">80</property>
+		  <property name="height_request">30</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">OK</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <signal name="clicked" handler="btnTVOK_clicked_cb"/>
+		</widget>
+		<packing>
+		  <property name="x">9</property>
+		  <property name="y">7</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="dlgTVFilter">
+  <property name="border_width">5</property>
+  <property name="width_request">590</property>
+  <property name="height_request">196</property>
+  <property name="title" translatable="yes"></property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="default_width">590</property>
+  <property name="default_height">350</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">False</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox2">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">2</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area2">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVFilterCancel">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Cancel</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">2</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVFilterApply">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Apply</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">1</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkLayout" id="layout11">
+	  <property name="visible">True</property>
+	  <property name="width">400</property>
+	  <property name="height">400</property>
+	  <property name="hadjustment">0 0 576 0 518.4 576</property>
+	  <property name="vadjustment">0 0 400 0 128.7 143</property>
+
+	  <child>
+	    <widget class="GtkTable" id="table1">
+	      <property name="width_request">419</property>
+	      <property name="height_request">80</property>
+	      <property name="visible">True</property>
+	      <property name="n_rows">3</property>
+	      <property name="n_columns">2</property>
+	      <property name="homogeneous">False</property>
+	      <property name="row_spacing">0</property>
+	      <property name="column_spacing">0</property>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox2">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterSel1">
+		      <property name="width_request">15</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">All</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterSel2">
+		      <property name="width_request">75</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Selected</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterSel1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterSel3">
+		      <property name="width_request">100</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Non-selected</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterSel1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label3">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Selection</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label9">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Visible</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">1</property>
+		  <property name="bottom_attach">2</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label10">
+		  <property name="label" translatable="yes">Highlighted</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">2</property>
+		  <property name="bottom_attach">3</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox3">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterVisible1">
+		      <property name="width_request">15</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">All</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterVisible2">
+		      <property name="width_request">75</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Visible</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterVisible1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterVisible3">
+		      <property name="width_request">100</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Hidden</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterVisible1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">1</property>
+		  <property name="bottom_attach">2</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox4">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterHigh1">
+		      <property name="width_request">15</property>
+		      <property name="label" translatable="yes">All</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterHigh2">
+		      <property name="width_request">75</property>
+		      <property name="label" translatable="yes">Highlighted</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterHigh1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkRadioButton" id="rbTVFilterHigh3">
+		      <property name="width_request">100</property>
+		      <property name="label" translatable="yes">Not Highlighted</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		      <property name="group">rbTVFilterHigh1</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">2</property>
+		  <property name="bottom_attach">3</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="x">2</property>
+	      <property name="y">30</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label13">
+	      <property name="width_request">181</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">FILTER CRITERIAS</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="x">0</property>
+	      <property name="y">0</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHSeparator" id="hseparator4">
+	      <property name="width_request">581</property>
+	      <property name="height_request">20</property>
+	      <property name="visible">True</property>
+	    </widget>
+	    <packing>
+	      <property name="x">0</property>
+	      <property name="y">13</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="btnTVFilterClear">
+	      <property name="width_request">100</property>
+	      <property name="height_request">29</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Clear Filter</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <signal name="clicked" handler="btnTVFilterClear_clicked_cb"/>
+	    </widget>
+	    <packing>
+	      <property name="x">467</property>
+	      <property name="y">32</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="dlgSettings">
+  <property name="border_width">5</property>
+  <property name="width_request">676</property>
+  <property name="height_request">505</property>
+  <property name="title" translatable="yes"></property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">True</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">False</property>
+  <signal name="delete_event" handler="on_dlgSettings_close" last_modification_time="Thu, 03 Dec 2009 16:39:12 GMT"/>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox5">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">2</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area5">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="button15">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Cancel</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">0</property>
+	      <signal name="clicked" handler="on_settingsCancelBtn_clicked" last_modification_time="Wed, 11 Nov 2009 20:53:28 GMT"/>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="button12">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Apply</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">0</property>
+	      <signal name="clicked" handler="on_settingsApplyBtn_clicked" last_modification_time="Mon, 20 Jul 2009 16:39:55 GMT"/>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="button11">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">OK</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">0</property>
+	      <signal name="clicked" handler="on_settingsOKBtn_clicked" last_modification_time="Tue, 26 May 2009 19:00:55 GMT"/>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkNotebook" id="notebook3">
+	  <property name="visible">True</property>
+	  <property name="show_tabs">True</property>
+	  <property name="show_border">True</property>
+	  <property name="tab_pos">GTK_POS_TOP</property>
+	  <property name="scrollable">False</property>
+	  <property name="enable_popup">False</property>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout15">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 658 0 592.2 658</property>
+	      <property name="vadjustment">0 0 425 0 382.5 425</property>
+
+	      <child>
+		<widget class="GtkTable" id="table4">
+		  <property name="width_request">443</property>
+		  <property name="height_request">408</property>
+		  <property name="visible">True</property>
+		  <property name="n_rows">14</property>
+		  <property name="n_columns">3</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">0</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox3">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox2">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="settingsColorBtn3">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="settingsColorBtn2">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label41">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Default Edge Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label40">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Default Node Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label39">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Grid Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label32">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Border Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label31">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Background Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label81">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Draw Nodes</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">9</property>
+		      <property name="bottom_attach">10</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label82">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Draw Edges</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">10</property>
+		      <property name="bottom_attach">11</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox5-1">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">9</property>
+		      <property name="bottom_attach">10</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox5-2">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">10</property>
+		      <property name="bottom_attach">11</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label117">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Color Theme</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">11</property>
+		      <property name="bottom_attach">12</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBoxEntry" id="colorthemecb">
+		      <property name="visible">True</property>
+		      <property name="items" translatable="yes">Ice Blue
+All Pastel
+Magma
+Rain Forest</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="has_frame">True</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="changed" handler="color_change_request" last_modification_time="Tue, 17 Nov 2009 19:03:10 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">11</property>
+		      <property name="bottom_attach">12</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="DefaultNodeCbtn">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label118">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Edge Attr. For Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">12</property>
+		      <property name="bottom_attach">13</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkEntry" id="edgecolortxt">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="visibility">True</property>
+		      <property name="max_length">0</property>
+		      <property name="text" translatable="yes"></property>
+		      <property name="has_frame">True</property>
+		      <property name="invisible_char">*</property>
+		      <property name="activates_default">False</property>
+		      <signal name="changed" handler="color_change_request" last_modification_time="Tue, 17 Nov 2009 19:03:56 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">12</property>
+		      <property name="bottom_attach">13</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="DefaultEdgeCbtn">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label44">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Selected Node Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="settingsColorBtn8">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label45">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Selected Edge Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="settingsColorBtn9">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkColorButton" id="settingsColorBtn1">
+		      <property name="visible">True</property>
+		      <property name="use_alpha">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label129">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Nodes Selectable?</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">7</property>
+		      <property name="bottom_attach">8</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label130">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Edges Selectable?</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">8</property>
+		      <property name="bottom_attach">9</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="chkboxNodeSelect">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes"></property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">7</property>
+		      <property name="bottom_attach">8</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="chkboxEdgeSelect">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes"></property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">8</property>
+		      <property name="bottom_attach">9</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label132">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Show Edges </property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">13</property>
+		      <property name="bottom_attach">14</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBoxEntry" id="edgerendercb">
+		      <property name="visible">True</property>
+		      <property name="items" translatable="yes">Always
+When head or tail is within viewport
+</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="has_frame">True</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">13</property>
+		      <property name="bottom_attach">14</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">10</property>
+		  <property name="y">17</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label53">
+		  <property name="width_request">90</property>
+		  <property name="height_request">21</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Color</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="x">152</property>
+		  <property name="y">0</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label54">
+		  <property name="width_request">100</property>
+		  <property name="height_request">20</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Apply</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">15</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="x">408</property>
+		  <property name="y">0</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label46">
+	      <property name="width_request">60</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">General</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout16">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 658 0 592.2 658</property>
+	      <property name="vadjustment">0 0 425 0 382.5 425</property>
+
+	      <child>
+		<widget class="GtkTable" id="table16">
+		  <property name="width_request">32</property>
+		  <property name="height_request">80</property>
+		  <property name="visible">True</property>
+		  <property name="n_rows">8</property>
+		  <property name="n_columns">3</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">0</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkComboBox" id="labelfont">
+		      <property name="visible">True</property>
+		      <property name="items" translatable="yes"> GLUT_BITMAP_8_BY_13
+GLUT_BITMAP_9_BY_15
+GLUT_BITMAP_TIMES_ROMAN_10
+GLUT_BITMAP_TIMES_ROMAN_24
+GLUT_BITMAP_HELVETICA_10
+GLUT_BITMAP_HELVETICA_12
+GLUT_BITMAP_HELVETICA_18
+</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkEntry" id="labelnodeattribute">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="visibility">True</property>
+		      <property name="max_length">0</property>
+		      <property name="text" translatable="yes"></property>
+		      <property name="has_frame">True</property>
+		      <property name="invisible_char">*</property>
+		      <property name="activates_default">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="labelzoomfactor">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">0</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">1200 0 5000 1 50 50</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label110">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Max # of nodes to display</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label109">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Label Visibility with degree</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label108">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Edge Label Attribute</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label107">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Node Label Attribute</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label106">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Default Node Label Color</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label105">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Font</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label111">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Show Node Labels</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label112">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Show Edge Labels</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">7</property>
+		      <property name="bottom_attach">8</property>
+		      <property name="x_padding">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="labelshowedges">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes"></property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">7</property>
+		      <property name="bottom_attach">8</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="labelshownodes">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="labelwithdegree">
+		      <property name="visible">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+
+		      <child>
+			<placeholder/>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkEntry" id="labeledgeattribute">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="visibility">True</property>
+		      <property name="max_length">0</property>
+		      <property name="text" translatable="yes"></property>
+		      <property name="has_frame">True</property>
+		      <property name="invisible_char">*</property>
+		      <property name="activates_default">False</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHBox" id="hbox8">
+		      <property name="visible">True</property>
+		      <property name="homogeneous">False</property>
+		      <property name="spacing">0</property>
+
+		      <child>
+			<widget class="GtkColorButton" id="nodelabelcolor">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="use_alpha">False</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label113">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">     Default Edge Label Color </property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkColorButton" id="edgelabelcolor">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="use_alpha">False</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">32</property>
+		  <property name="y">26</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label47">
+	      <property name="width_request">61</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Labels</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout17">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 658 0 592.2 658</property>
+	      <property name="vadjustment">0 0 425 0 382.5 425</property>
+
+	      <child>
+		<widget class="GtkTable" id="table5">
+		  <property name="width_request">423</property>
+		  <property name="height_request">308</property>
+		  <property name="visible">True</property>
+		  <property name="n_rows">7</property>
+		  <property name="n_columns">2</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">0</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label49">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Advanced Mode</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label50">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Node Shape</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label52">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Anti-aliasing</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label84">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Node Alpha</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label85">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Edge Alpha</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHScale" id="settingsscale1">
+		      <property name="visible">True</property>
+		      <property name="draw_value">True</property>
+		      <property name="value_pos">GTK_POS_TOP</property>
+		      <property name="digits">1</property>
+		      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		      <property name="inverted">False</property>
+		      <property name="adjustment">1 0 1 0.00999999977648 0 0</property>
+		      <signal name="value_changed" handler="color_change_request" last_modification_time="Thu, 19 Nov 2009 17:09:07 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">4</property>
+		      <property name="bottom_attach">5</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHScale" id="settingsscale2">
+		      <property name="visible">True</property>
+		      <property name="draw_value">True</property>
+		      <property name="value_pos">GTK_POS_TOP</property>
+		      <property name="digits">1</property>
+		      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		      <property name="inverted">False</property>
+		      <property name="adjustment">1 0 1 0.01 0 0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">5</property>
+		      <property name="bottom_attach">6</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkComboBox" id="settingscombobox1">
+		      <property name="visible">True</property>
+		      <property name="items" translatable="yes">OpenGL dots
+Spherical
+Custom</property>
+		      <property name="add_tearoffs">False</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox10">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes"></property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="settingsChkBox12">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes"></property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">3</property>
+		      <property name="bottom_attach">4</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label119">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Node Size</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHScale" id="nodesizescale">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="draw_value">True</property>
+		      <property name="value_pos">GTK_POS_TOP</property>
+		      <property name="digits">0</property>
+		      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+		      <property name="inverted">False</property>
+		      <property name="adjustment">5 0 100 0 0 0</property>
+		      <signal name="value_changed" handler="size_change_request" last_modification_time="Thu, 19 Nov 2009 16:56:12 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">6</property>
+		      <property name="bottom_attach">7</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options">fill</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">28</property>
+		  <property name="y">26</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label48">
+	      <property name="width_request">56</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Graph </property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout18">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 658 0 592.2 658</property>
+	      <property name="vadjustment">0 0 425 0 382.5 425</property>
+
+	      <child>
+		<widget class="GtkTable" id="table6">
+		  <property name="width_request">176</property>
+		  <property name="height_request">84</property>
+		  <property name="visible">True</property>
+		  <property name="n_rows">3</property>
+		  <property name="n_columns">2</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">2</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label56">
+		      <property name="width_request">84</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Width</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="settingsspinbutton2">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">0</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">3 0 5000 1 50 10</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="settingsspinbutton1">
+		      <property name="width_request">128</property>
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">0</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">3 0 5000 1 50 10</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label58">
+		      <property name="width_request">84</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Height</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label61">
+		      <property name="width_request">84</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Zoom X</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="settingsspinbutton3">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">2</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">2 2 20 1 50 10</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">2</property>
+		      <property name="bottom_attach">3</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">40</property>
+		  <property name="y">48</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label59">
+		  <property name="width_request">118</property>
+		  <property name="height_request">25</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Magnifier Settings</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">5</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="x">32</property>
+		  <property name="y">15</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHSeparator" id="hseparator10">
+		  <property name="width_request">401</property>
+		  <property name="height_request">20</property>
+		  <property name="visible">True</property>
+		</widget>
+		<packing>
+		  <property name="x">35</property>
+		  <property name="y">29</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label60">
+		  <property name="width_request">194</property>
+		  <property name="height_request">20</property>
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Fisheye Magnifier Settings</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">5</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="x">33</property>
+		  <property name="y">159</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHSeparator" id="hseparator11">
+		  <property name="width_request">400</property>
+		  <property name="height_request">31</property>
+		  <property name="visible">True</property>
+		</widget>
+		<packing>
+		  <property name="x">35</property>
+		  <property name="y">166</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkTable" id="table7">
+		  <property name="width_request">124</property>
+		  <property name="height_request">67</property>
+		  <property name="visible">True</property>
+		  <property name="n_rows">2</property>
+		  <property name="n_columns">2</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">2</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label63">
+		      <property name="width_request">84</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Distortion</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="settingsspinbutton4">
+		      <property name="width_request">128</property>
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">0</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">5 0 5000 1 50 10</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="settingsspinbutton5">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">0</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">4 0 5000 1 50 10</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label65">
+		      <property name="width_request">84</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Radius</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options"></property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">37</property>
+		  <property name="y">192</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label55">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Magnifiers</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLayout" id="layout19">
+	      <property name="visible">True</property>
+	      <property name="width">400</property>
+	      <property name="height">400</property>
+	      <property name="hadjustment">0 0 658 0 592.2 658</property>
+	      <property name="vadjustment">0 0 425 0 382.5 425</property>
+
+	      <child>
+		<widget class="GtkVBox" id="vbox6">
+		  <property name="width_request">430</property>
+		  <property name="height_request">405</property>
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkTable" id="table9">
+		      <property name="height_request">76</property>
+		      <property name="visible">True</property>
+		      <property name="n_rows">4</property>
+		      <property name="n_columns">3</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">0</property>
+
+		      <child>
+			<widget class="GtkLabel" id="label66">
+			  <property name="width_request">1</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes"># of fine nodes</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">5</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkSpinButton" id="settingsspinbutton6">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="climb_rate">1</property>
+			  <property name="digits">0</property>
+			  <property name="numeric">False</property>
+			  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+			  <property name="snap_to_ticks">False</property>
+			  <property name="wrap">False</property>
+			  <property name="adjustment">0 0 9999999 1 10 10</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label67">
+			  <property name="width_request">1</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Coarsening factor</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">5</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkSpinButton" id="settingsspinbutton7">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="climb_rate">1</property>
+			  <property name="digits">4</property>
+			  <property name="numeric">False</property>
+			  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+			  <property name="snap_to_ticks">False</property>
+			  <property name="wrap">False</property>
+			  <property name="adjustment">0 0 9999999 0.1 10 10</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkSpinButton" id="settingsspinbutton8">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="climb_rate">1</property>
+			  <property name="digits">4</property>
+			  <property name="numeric">False</property>
+			  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+			  <property name="snap_to_ticks">False</property>
+			  <property name="wrap">False</property>
+			  <property name="adjustment">0 0 9999999 0.1 10 10</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label102">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes"># Of Fine Nodes</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label104">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Distortion Factor</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label103">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Coarsening Factor</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label116">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Fine Node Label Attribute</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">3</property>
+			  <property name="bottom_attach">4</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkEntry" id="finenodelabelattribute">
+			  <property name="visible">True</property>
+			  <property name="tooltip" translatable="yes">leave blank to show node id</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">3</property>
+			  <property name="bottom_attach">4</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHSeparator" id="hseparator12">
+		      <property name="height_request">38</property>
+		      <property name="visible">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkTable" id="table8">
+		      <property name="height_request">61</property>
+		      <property name="visible">True</property>
+		      <property name="n_rows">2</property>
+		      <property name="n_columns">3</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">0</property>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox13">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Dist 2 limit</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox14">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Animate</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox15">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Label fine nodes</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">2</property>
+			  <property name="right_attach">3</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox16">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Color nodes</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox17">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Label Coarse Nodes</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="settingsChkBox18">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Label focus</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">2</property>
+			  <property name="right_attach">3</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkHSeparator" id="hseparator13">
+		      <property name="height_request">46</property>
+		      <property name="visible">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label69">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Color extremes</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">10</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkTable" id="table10">
+		      <property name="visible">True</property>
+		      <property name="n_rows">1</property>
+		      <property name="n_columns">5</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">0</property>
+
+		      <child>
+			<widget class="GtkLabel" id="label70">
+			  <property name="width_request">122</property>
+			  <property name="height_request">32</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Finest:</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">30</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options"></property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkColorButton" id="settingsColorBtn10">
+			  <property name="visible">True</property>
+			  <property name="use_alpha">False</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label71">
+			  <property name="width_request">122</property>
+			  <property name="height_request">32</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Coarsest:</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">30</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">3</property>
+			  <property name="right_attach">4</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options"></property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkColorButton" id="settingsColorBtn11">
+			  <property name="height_request">47</property>
+			  <property name="visible">True</property>
+			  <property name="use_alpha">False</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">4</property>
+			  <property name="right_attach">5</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <placeholder/>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="x">7</property>
+		  <property name="y">8</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="lllllllllllll">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Topfish</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox15">
+	      <property name="width_request">179</property>
+	      <property name="height_request">323</property>
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkScrolledWindow" id="scrolledwindow5">
+		  <property name="height_request">212</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="shadow_type">GTK_SHADOW_IN</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkTextView" id="gvprtextinput">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="overwrite">False</property>
+		      <property name="accepts_tab">True</property>
+		      <property name="justification">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap_mode">GTK_WRAP_NONE</property>
+		      <property name="cursor_visible">True</property>
+		      <property name="pixels_above_lines">0</property>
+		      <property name="pixels_below_lines">0</property>
+		      <property name="pixels_inside_wrap">0</property>
+		      <property name="left_margin">0</property>
+		      <property name="right_margin">0</property>
+		      <property name="indent">0</property>
+		      <property name="text" translatable="yes"> </property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label20">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Arguments</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="gvprargs">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label114">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Output</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkScrolledWindow" id="scrolledwindow6">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		  <property name="shadow_type">GTK_SHADOW_IN</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkTextView" id="gvprtextoutput">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="editable">True</property>
+		      <property name="overwrite">False</property>
+		      <property name="accepts_tab">True</property>
+		      <property name="justification">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap_mode">GTK_WRAP_NONE</property>
+		      <property name="cursor_visible">True</property>
+		      <property name="pixels_above_lines">0</property>
+		      <property name="pixels_below_lines">0</property>
+		      <property name="pixels_inside_wrap">0</property>
+		      <property name="left_margin">0</property>
+		      <property name="right_margin">0</property>
+		      <property name="indent">0</property>
+		      <property name="text" translatable="yes"></property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox9">
+		  <property name="height_request">34</property>
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="gvprapplycb">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Clone Current Graph</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="gvprbuttonload">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Load</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_gvprbuttonload_clicked" last_modification_time="Fri, 22 May 2009 16:45:40 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="gvprbuttonsave">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Save</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="on_gvprbuttonsave_clicked" last_modification_time="Mon, 01 Jun 2009 16:23:07 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="button8">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">Run gvpr</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <signal name="clicked" handler="mTestgvpr" last_modification_time="Wed, 29 Apr 2009 14:54:06 GMT"/>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label86">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Script</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox14">
+	      <property name="width_request">0</property>
+	      <property name="height_request">0</property>
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkFixed" id="fixed7">
+		  <property name="height_request">40</property>
+		  <property name="visible">True</property>
+
+		  <child>
+		    <widget class="GtkHSeparator" id="hseparator14">
+		      <property name="width_request">456</property>
+		      <property name="height_request">16</property>
+		      <property name="visible">True</property>
+		    </widget>
+		    <packing>
+		      <property name="x">8</property>
+		      <property name="y">24</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label124">
+		      <property name="width_request">470</property>
+		      <property name="height_request">16</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">0 Nodes Selected</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="x">8</property>
+		      <property name="y">8</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkFixed" id="fixed6">
+		  <property name="width_request">351</property>
+		  <property name="height_request">381</property>
+		  <property name="visible">True</property>
+
+		  <child>
+		    <widget class="GtkHBox" id="hbox12">
+		      <property name="width_request">428</property>
+		      <property name="height_request">26</property>
+		      <property name="visible">True</property>
+		      <property name="homogeneous">False</property>
+		      <property name="spacing">0</property>
+
+		      <child>
+			<widget class="GtkRadioButton" id="attrRB0">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">GRAPH       </property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			  <signal name="clicked" handler="on_attrRB0_clicked" last_modification_time="Thu, 29 Oct 2009 20:20:28 GMT"/>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkRadioButton" id="attrRB1">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">NODE </property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			  <property name="group">attrRB0</property>
+			  <signal name="clicked" handler="on_attrRB0_clicked" last_modification_time="Thu, 29 Oct 2009 20:20:28 GMT"/>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkRadioButton" id="attrRB2">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">EDGE</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			  <property name="group">attrRB0</property>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="x">11</property>
+		      <property name="y">4</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkTable" id="table18">
+		      <property name="width_request">562</property>
+		      <property name="height_request">68</property>
+		      <property name="visible">True</property>
+		      <property name="n_rows">3</property>
+		      <property name="n_columns">6</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">0</property>
+
+		      <child>
+			<widget class="GtkEntry" id="txtAttr">
+			  <property name="width_request">88</property>
+			  <property name="height_request">21</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			  <signal name="changed" handler="on_txtAttr_changed" last_modification_time="Thu, 22 Oct 2009 20:26:47 GMT"/>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkEntry" id="txtValue">
+			  <property name="width_request">88</property>
+			  <property name="height_request">21</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkEntry" id="txtDefValue">
+			  <property name="width_request">88</property>
+			  <property name="height_request">21</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">2</property>
+			  <property name="right_attach">3</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label122">
+			  <property name="width_request">40</property>
+			  <property name="height_request">16</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Value</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label123">
+			  <property name="width_request">88</property>
+			  <property name="height_request">16</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Default Value</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">2</property>
+			  <property name="right_attach">3</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label121">
+			  <property name="width_request">96</property>
+			  <property name="height_request">16</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Attribute Name</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label125">
+			  <property name="width_request">72</property>
+			  <property name="height_request">16</property>
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Publish</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">3</property>
+			  <property name="right_attach">4</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="attrProg">
+			  <property name="width_request">24</property>
+			  <property name="height_request">16</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes"></property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			  <signal name="toggled" handler="on_attrProg_toggled" last_modification_time="Mon, 26 Oct 2009 19:57:29 GMT"/>
+			</widget>
+			<packing>
+			  <property name="left_attach">3</property>
+			  <property name="right_attach">4</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="attrAddBtn">
+			  <property name="width_request">32</property>
+			  <property name="height_request">23</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">+</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_attrAddBtn_clicked" last_modification_time="Mon, 26 Oct 2009 22:04:52 GMT"/>
+			</widget>
+			<packing>
+			  <property name="left_attach">5</property>
+			  <property name="right_attach">6</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="attrApplyBtn">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">Apply</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_attrApplyBtn_clicked" last_modification_time="Mon, 09 Nov 2009 23:05:37 GMT"/>
+			</widget>
+			<packing>
+			  <property name="left_attach">4</property>
+			  <property name="right_attach">5</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="attrSearchBtn">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">Search</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <signal name="clicked" handler="on_attrSearchBtn_clicked" last_modification_time="Wed, 11 Nov 2009 16:07:55 GMT"/>
+			</widget>
+			<packing>
+			  <property name="left_attach">4</property>
+			  <property name="right_attach">5</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="x">12</property>
+		      <property name="y">41</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label127">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Attribute</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkWindow" id="frmWait">
+  <property name="width_request">200</property>
+  <property name="height_request">178</property>
+  <property name="title" translatable="yes">Smyrna</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="default_width">274</property>
+  <property name="default_height">248</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">False</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_SPLASHSCREEN</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkFixed" id="fixed4">
+      <property name="visible">True</property>
+
+      <child>
+	<widget class="GtkImage" id="image17">
+	  <property name="width_request">188</property>
+	  <property name="height_request">176</property>
+	  <property name="visible">True</property>
+	  <property name="stock">gtk-missing-image</property>
+	  <property name="icon_size">4</property>
+	  <property name="xalign">0.5</property>
+	  <property name="yalign">0.5</property>
+	  <property name="xpad">0</property>
+	  <property name="ypad">0</property>
+	</widget>
+	<packing>
+	  <property name="x">6</property>
+	  <property name="y">1</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkLabel" id="label80">
+	  <property name="width_request">100</property>
+	  <property name="height_request">26</property>
+	  <property name="visible">True</property>
+	  <property name="label" translatable="yes">Please Wait....</property>
+	  <property name="use_underline">False</property>
+	  <property name="use_markup">False</property>
+	  <property name="justify">GTK_JUSTIFY_LEFT</property>
+	  <property name="wrap">False</property>
+	  <property name="selectable">False</property>
+	  <property name="xalign">0.5</property>
+	  <property name="yalign">0.5</property>
+	  <property name="xpad">0</property>
+	  <property name="ypad">0</property>
+	  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	  <property name="width_chars">-1</property>
+	  <property name="single_line_mode">False</property>
+	  <property name="angle">0</property>
+	</widget>
+	<packing>
+	  <property name="x">52</property>
+	  <property name="y">122</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="findDialog">
+  <property name="border_width">5</property>
+  <property name="title" translatable="yes"></property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">False</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox7">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">2</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area7">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="button3">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Cancel</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">2</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="button2">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">OK</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">1</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox8">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label94">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">
+Search in
+</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkComboBox" id="combobox1">
+	      <property name="visible">True</property>
+	      <property name="add_tearoffs">False</property>
+	      <property name="focus_on_click">True</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox7">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label93">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Regular Expression</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="findText">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/graphviz/smyrna/template.dot	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,73 @@
+strict digraph template {
+	graph [antialiasing=1,
+		bgcolor="#ffffff",
+		bordercolor="#38eb29",
+		bordercoloralpha="1",
+		bordervisible="1",
+		defaultfontname="1",
+		defaultfontsize="52",
+		gridcolor="#6033d8",
+		gridcoloralpha="1",
+		gridsize="30",
+		gridvisible="0",
+		highlightededgecolor="#c41b50",
+		highlightededgecoloralpha="1",
+		highlightednodecolor="#d1cd24",
+		highlightednodecoloralpha="1",
+		defaultlinewidth="1"
+		nodesizewithdegree="1",
+		selectededgecolor="#EE1F1C",
+		selectededgecoloralpha="1",
+		selectednodecolor="#8ce61d",
+		selectednodecoloralpha="1",
+		gridcoloralpha="1",
+		defaultmagnifierwidth="300",
+		defaultmagnifierheight="200",
+		defaultmagnifierkts="5",
+		defaultfisheyemagnifierradius="250"
+		defaultfisheyemagnifierdistort="5",
+		usermode="1",
+		topologicalfisheyefinenodes="50",
+		topologicalfisheyecoarseningfactor="2.5",
+		topologicalfisheyedistortionfactor="1",
+		topologicalfisheyedist2limit="1",
+		topologicalfisheyeanimate="1",
+		topologicalfisheyelabelfinenodes="1",
+		topologicalfisheyecolornodes="1",
+		topologicalfisheyecoloredges="1",
+		topologicalfisheyelabelfocus="1",
+		topologicalfisheyefinestcolor="red",
+		topologicalfisheyecoarsestcolor="green",
+		topologicalfisheyelabelattribute="label",
+		drawnodes="1",
+		drawedges="1",
+		drawlabels="1",
+		defaultnodealpha="0.8",
+		defaultedgealpha="0.5",
+		defaultnodeshape="0",
+		defaultselectionmethod="2"
+
+		labelglutfont="0"
+		nodelabelcolor="#8ce61d"
+		edgelabelcolor="#8ce61d"
+		nodelabelattribute="name"
+		edgelabelattribute="name"
+		labelwithdegree="0"
+		labelnumberofnodes="45"
+		shownodelabels="1"
+		showedgelabels="1"
+		colortheme="1"
+		defaultnodecolor="blue"
+		defaultedgecolor="purple"
+		edgecolorattribute=""
+		nodesize="50"
+		nodesselectable="1"
+		edgesselectable="1"
+		edgerender="0"
+
+	];
+
+A->B;
+}
+
+
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/zoom.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/zoomin.png has changed
Binary file toolboxes/graph_visualisation/share/graphviz/smyrna/zoomout.png has changed
Binary file toolboxes/graph_visualisation/share/license.rtf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/acyclic.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,62 @@
+.TH ACYCLIC 1 "21 March 2001"
+.SH NAME
+acyclic \- make directed graph acyclic
+.SH SYNOPSIS
+.B acyclic
+[
+.B \-nv?
+] [
+.B \-o
+.I outfile
+]
+[ 
+.I file
+]
+.SH DESCRIPTION
+.B acyclic
+is a filter that takes a directed graph as input and outputs
+a copy of the graph with sufficient edges reversed to make
+the graph acyclic. The reversed edge inherits all of the attributes
+of the original edge. The optional file argument specifies where the
+the input graph is stored; by default, the program reads from \fBstdin\fP.
+.SH OPTIONS
+The following options are supported:
+.TP
+.B \-n
+No output is produced, though the return value
+will indicate whether the graph is acyclic or not.
+.TP
+.B \-v
+Print information about whether the file is acyclic, has a cycle or
+is undirected.
+.TP
+.BI \-o " outfile"
+causes the output to be written to the specified file; by default,
+output is written to \fBstdout\fP.
+.TP
+.B \-?
+option causes the program to print usage information.
+.SH RETURN CODES
+.B acyclic
+returns
+.B 0
+if the graph is acyclic;
+.B 1
+if the graph has a cycle;
+.B 2
+if the graph is undirected; and
+.B 255
+if there are any errors.
+.SH BUGS
+If the graph is strict and there is a cycle of length 2, 
+the attributes of the reversed edge are lost.
+.PP
+Some edge attributes are non-symmetric, referring to either the head
+or tail node. At present, there is no mechanism or convention for
+for correctly switching or renaming these.
+.SH AUTHORS
+Stephen C. North <north@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+gc(1), dot(1), gvpr(1), gvcolor(1), ccomps(1), sccmap(1), tred(1), libgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/bcomps.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,76 @@
+.TH BCOMPS 1 "18 November 2003"
+.SH NAME
+bcomps \- biconnected components filter for graphs
+.SH SYNOPSIS
+.B bcomps
+[
+.B \-stvx?
+]
+[
+.BI -o outfile
+]
+[ 
+.I files
+]
+.SH DESCRIPTION
+.B bcomps
+decomposes graphs into their biconnected components,
+printing the components to standard output.
+.SH OPTIONS
+The following options are supported:
+.TP
+.B \-s
+No output graph is printed. Implies the
+.B \-v 
+flag.
+.TP
+.B \-t
+Print the underlying block-cutvertex tree.
+.TP
+.B \-x
+Each biconnected component is printed as a separate root graph.
+.TP
+.B \-v
+Prints number of blocks and cutvertices.
+.TP
+.BI \-o " outfile"
+If specified, each root graph will be written to a different file
+with the names derived from \fIoutfile\fP. In particular, 
+if both \fB-o\fP and \fB-x\fP flags are used, then each
+block is written to a different file. If \fIoutfile\fP does
+not have a suffix, the nth block of the ith graph is written 
+to \fIoutfile_n_i\fP. However, the 0th block of the 0th graph is written to
+\fIoutfile\fP.
+.sp
+If \fIoutfile\fP has a suffix, i.e., has the form \fIbase.sfx\fP,
+then the files will have the same name as above, except appended with \fI.sfx\fP.
+.sp
+The block-cutvertex tree of ith graph is written to \fIoutfile_n_T\fP,
+with an appended suffix if specified.
+.LP
+By default, each input graph is printed, with each
+block given as a subgraph whose name is a concatenation of
+the name of the input graph, the string "_bcc_" and the
+number of the block.
+.SH OPERANDS
+The following operand is supported:
+.TP 8
+.I files
+Names of files containing 1 or more graphs in dot format.
+If no
+.I files
+operand is specified,
+the standard input will be used.
+.SH RETURN CODES
+.B bcomps
+returns
+.B 0
+if all the input graphs are biconnected; and
+non-zero if any graph has multiple blocks, or any error occurred.
+.SH "BUGS"
+It is possible, though unlikely, that the names used for connected
+components and their subgraphs may conflict with existing subgraph names.
+.SH AUTHORS
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+ccomps(1), gc(1), dot(1), gvpr(1), gvcolor(1), acyclic(1), sccmap(1), tred(1), libgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/ccomps.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,107 @@
+.TH CCOMPS 1 "27 August 2008"
+.SH NAME
+ccomps \- connected components filter for graphs
+.SH SYNOPSIS
+.B ccomps
+[
+.B \-sxvnzC?
+]
+[
+.BI -X [#]v
+]
+[
+.BI -o outfile
+]
+[ 
+.I files
+]
+.SH DESCRIPTION
+.B ccomps
+decomposes graphs into their connected components,
+printing the components to standard output.
+.SH OPTIONS
+The following options are supported:
+.TP
+.B \-s
+No output graph is printed. The return value can be used to
+check if the graph is connected or not.
+.TP
+.B \-x
+Only the connected components are printed, as separate graphs.
+.TP
+.B \-v
+Counts of nodes, edges and connected components are printed.
+.TP
+.B \-z
+Sort components by size, with the largest first. This is only
+effective if either \fB-x\fP or \fB-X#v\fP is present.
+Thus, \fB-zX#0\fP will cause the largest component to be printed.
+.TP
+.B \-C
+Use clusters in computing components in addition to normal edge
+connectivity. In essence, this gives the connected components of the
+derived graph in which nodes top-level clusters and nodes in the
+original graph. This maintains all subgraph structure within a
+component, even if a subgraph does not contain any nodes.
+.TP
+.B \-n
+Do not project subgraph structure. Normally, if 
+.B ccomps
+produces components as graphs distinct from the input graph, it will
+define subgraphs which are projections of subgraphs of the input graph
+onto the component. (If the projection is empty, no subgraph is produced.)
+If this flag is set, the component contains only the relevant nodes and
+edges.
+.TP
+.BI \-X " node_name"
+Prints only the component containing the node \fInode_name\fP,
+if any.
+.TP
+.BI \-X# " index"
+Prints only component number \fIindex\fP, if any, starting at 0.
+.TP
+.BI \-o " outfile"
+If specified, each graph will be written to a different file
+with the names derived from \fIoutfile\fP. In particular, 
+if both \fB-o\fP and \fB-x\fP flags are used, then each connected
+component is written to a different file. If \fIoutfile\fP does
+not have a suffix, the first file will have the name \fIoutfile\fP;
+then next \fIoutfile_1\fP, then next \fIoutfile_2\fP, and so on.
+If \fIoutfile\fP has a suffix, i.e., has the form \fIbase.sfx\fP,
+then the files will be named \fIbase.sfx\fP, \fIbase_1.sfx\fP, 
+\fIbase_2.sfx\fP, etc.
+.LP
+By default, each input graph is printed, with each connected
+component given as a subgraph whose name is a concatenation of
+the name of the input graph, the string "_component_" and the
+number of the component.
+.SH OPERANDS
+The following operand is supported:
+.TP 8
+.I files
+Names of files containing 1 or more graphs in dot format.
+If no
+.I files
+operand is specified,
+the standard input will be used.
+.SH RETURN CODES
+Unless used to extract a single connected component,
+.B ccomps
+returns
+.B 0
+if all the input graphs are connected; and
+non-zero if any graph has multiple components, or any error occurred.
+If just extracting a single component,
+.B ccomps
+returns
+.B 0
+on success and non-zero if an error occurred.
+.SH "BUGS"
+It is possible, though unlikely, that the names used for connected
+components and their subgraphs may conflict with existing subgraph names.
+.SH AUTHORS
+Stephen C. North <north@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+gc(1), dot(1), gvpr(1), gvcolor(1), acyclic(1), sccmap(1), tred(1), libgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/circo.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,725 @@
+.TH DOT 1 "23 August 2004" \*(eX
+.SH NAME
+dot \- filter for drawing directed graphs
+.br
+neato \- filter for drawing undirected graphs
+.br
+twopi \- filter for radial layouts of graphs
+.br
+circo \- filter for circular layout of graphs
+.br
+fdp \- filter for drawing undirected graphs
+.br
+sfdp \- filter for drawing large undirected graphs
+.SH SYNOPSIS
+\fBdot\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBneato\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-n\fR[\fB1\fR|\fB2\fR]]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBtwopi\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBcirco\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBfdp\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBsfdp\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.SH DESCRIPTION
+.I dot
+draws directed graphs.  It works well on DAGs and other graphs
+that can be drawn as hierarchies.
+It reads attributed graph files and writes drawings.
+By default, the output format
+.I dot
+is the input file with layout coordinates appended.
+.PP
+.I neato
+draws undirected graphs using ``spring'' models (see Kamada and Kawai,
+Information Processing Letters 31:1, April 1989).  Input files must be
+formatted in the
+.I dot
+attributed graph language.
+By default, the output of
+.I neato
+is the input graph with layout coordinates appended.
+.PP
+.I twopi
+draws graphs using a radial layout (see G. Wills,
+Symposium on Graph Drawing GD'97, September, 1997).
+Basically, one node is chosen as the center and put at the origin.
+The remaining nodes are placed on a sequence of concentric circles
+centered about the origin, each a fixed radial distance from the
+previous circle.
+All nodes distance 1 from the center are placed on the first circle;
+all nodes distance 1 from a node on the first circle are placed on
+the second circle; and so forth.
+.PP
+.I circo
+draws graphs using a circular layout (see
+Six and Tollis, GD '99 and ALENEX '99, and
+Kaufmann and Wiese, GD '02.)
+The tool identifies biconnected components and draws the nodes of
+the component on a circle. The block\(hycutpoint tree
+is then laid out using a recursive radial algorithm. Edge
+crossings within a circle are minimized by placing as many edges on
+the circle's perimeter as possible.
+In particular, if the component is outerplanar, the component will
+have a planar layout.
+.PP
+If a node belongs to multiple non\(hytrivial biconnected components,
+the layout puts the node in one of them. By default, this is the first
+non\(hytrivial component found in the search from the root component.
+.PP
+.I fdp
+draws undirected graphs using a ``spring'' model. It relies on a
+force\(hydirected approach in the spirit of Fruchterman and Reingold
+(cf. Software\(hyPractice & Experience 21(11), 1991, pp. 1129\(hy1164).
+.PP
+.I sfdp
+also draws undirected graphs using the ``spring'' model described
+above, but it uses a multi-scale approach to produce layouts
+of large graphs in a reasonably short time.
+.SH OUTPUT FORMATS
+Dot uses an extensible plugin mechanism for its output renderers,
+so to see what output formats your installation of dot supports
+you can use ``dot \-Txxx'' (where xxx is an unlikely format)
+and check the warning message.
+Also, The plugin mechanism supports multiple implementations
+of the output formats.
+To see what variants are available, use, for example: ``dot \-Tpng:''
+and to force a particular variant, use, for example: ``dot \-Tpng:gd''
+.P
+Traditionally, dot supports the following:
+\fB\-Tps\fP (PostScript),
+\fB\-Tsvg\fP \fB\-Tsvgz\fP (Structured Vector Graphics),
+\fB\-Tfig\fP (XFIG graphics),
+\fB\-Tmif\fP (FrameMaker graphics),
+\fB\-Thpgl\fP (HP pen plotters), and \fB\-Tpcl\fP (Laserjet printers),
+\fB\-Tpng\fP \fB\-Tgif\fP (bitmap graphics),
+\fB\-Tdia\fP (GTK+ based diagrams),
+\fB\-Timap\fP (imagemap files for httpd servers for each node or edge
+that has a non\(hynull "href" attribute.),
+\fB\-Tcmapx\fP (client\(hyside imagemap for use in html and xhtml).
+Additional less common or more special\(hypurpose output formats
+can be found at http://www.graphviz.org/cvs/doc/info/output.html.)
+.P
+Alternative plugins providing support for a given output format
+can be found from the error message resulting from appending a ':' to the format. e.g. \fB-Tpng:\fP
+The first plugin listed is always the default.
+.P
+The \fB\-P\fP switch can be used to produce a graph of all output variants supported by plugins in the local installation of graphviz.
+.SH GRAPH FILE LANGUAGE
+Here is a synopsis of the graph file language, traditionally using the extension \fB.dot\fR, for graphs:
+.PP
+[\fBstrict\fR] (\fBgraph\fR|\fBdigraph\fR) \fIname\fP { \fIstatement\(hylist\fP }\fR
+.br 
+Is the top level graph. If the graph is \fBstrict\fR then multiple edges are
+not allowed between the same pairs of nodes.
+If it is a directed graph, indicated by \fBdigraph\fR,
+then the \fIedgeop\fR must be "\->". If it is an undirected \fBgraph\fR
+then the \fIedgeop\fR must be "\-\-".
+Statements may be:
+.PP
+\fIname\fB=\fIval\fB;\fR
+.br
+\fBnode [\fIname\fB=\fIval\fB];\fR
+.br
+\fBedge [\fIname\fB=\fIval\fB];\fR
+.br
+Set default graph, node, or edge attribute \fIname\fP to \fIval\fP.
+Any subgraph, node, or edge appearing after this inherits the new
+default attributes.
+.PP
+\fBn0 [\fIname0=val0,name1=val1,...\fB];\fR
+Creates node \fBn0\fP (if it does not already exist)
+and sets its attributes according to the optional list. 
+.PP
+\fBn0 \fIedgeop\fR n1 \fIedgeop\fR \fI...\fB \fIedgeop\fR nn [\fIname0=val0,name1=val1,...\fB];\fR
+.br
+Creates edges between nodes \fBn0\fP, \fBn1\fP, ..., \fBnn\fP and sets
+their attributes according to the optional list.
+Creates nodes as necessary.
+.PP
+[\fBsubgraph \fIname\fB] { \fIstatement\(hylist \fB}\fR
+.br
+Creates a subgraph.  Subgraphs may be used in place
+of \fBn0\fP, ..., \fBnn\fP in the above statements to create edges.
+[\fBsubgraph \fIname\fR] is optional;
+if missing, the subgraph is assigned an internal name. 
+.PP
+Comments may be /*C\(hylike*/ or //C++\(hylike.
+
+.PP
+Attribute names and values are ordinary (C\(hystyle) strings.
+The following sections describe attributes that control graph layout.
+
+.SH "GRAPH ATTRIBUTES"
+.PP
+\fBsize="\fIx,y\fP"\fR sets bounding box of drawing in inches.
+.PP
+\fBpage="\fIx,y\fP"\fR sets the PostScript pagination unit.
+.PP
+\fBratio=\fIf\fR sets the aspect ratio to \fIf\fP which may be
+a floating point number, or one of the keywords \fBfill\fP,
+\fBcompress\fP, or \fBauto\fP.
+.PP
+\fBlayout=\fIengine\fR indicates the preferred layout engine ("dot", "neato", fdp" etc) overriding the default from the basename of the command or the -K commandline option.
+.PP
+\fBmargin=\fIf\fR sets the page margin (included in the page size).
+.PP
+\fBnodesep=\fIf\fR sets the minimum separation between nodes.
+.PP
+\fBranksep=\fIf\fR sets the minimum separation between ranks.
+.PP
+\fBordering=out\fR constrains order of out\(hyedges in a subgraph
+according to their file sequence.
+.PP
+\fBrankdir=LR|RL|BT\fR requests a left\(hyto\(hyright, right\(hyto\(hyleft, or bottom\(hyto\(hytop, drawing.
+.PP
+\fBpagedir=\fR[TBLR][TBLR] sets the major and minor order of pagination.
+.PP
+\fBrank=same\fR (or \fBmin\fP or \fBmax\fP) in a subgraph
+constrains the rank assignment of its nodes.   If a subgraph's
+name has the prefix \fBcluster\fP, its nodes are drawn in
+a distinct rectangle of the layout.  Clusters may be nested.
+.PP
+\fBrotate=90\fR sets landscape mode. 
+(\fBorientation=land\fR is backward compatible but obsolete.)
+.PP
+\fBcenter=\fIn\fR a non\(hyzero value centers the drawing on the page.
+.PP
+\fBnslimit=\fIf\fR or \fBmclimit=\fIf\fR adjusts the bound on the
+number of network simplex or mincross iterations by the given ratio.
+For example, \fBmclimit=2.0\fP runs twice as long.
+.PP
+\fBlayers="\fIid:id:id:id\fR" is a sequence of layer identifiers for
+overlay diagrams.  The PostScript array variable \fIlayercolorseq\fR
+sets the assignment of colors to layers. The least index is 1 and 
+each element must be a 3\(hyelement array to be interpreted as a color coordinate.
+.PP
+\fBcolor=\fIcolorvalue\fR sets foreground color (\fBbgcolor\fP for background).
+.PP
+\fBhref=\fI"url"\fR the default url for image map files; in PostScript files,
+the base URL for all relative URLs, as recognized by Acrobat Distiller
+3.0 and up.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBstylesheet=\fI"file.css"\fR includes a reference to a stylesheet
+in \-Tsvg and \-Tsvgz outputs.  Ignored by other formats.
+.PP
+\fBsplines\fR. If set to \fItrue\fR, edges are
+drawn as splines.
+If set to \fIpolyline\fR, edges are 
+drawn as polylines.
+If set to \fIortho\fR, edges are 
+drawn as orthogonal polylines.
+In all of these cases, the nodes may not overlap.
+If \fBsplines=\fIfalse\fR or \fBsplines=\fIline\fR, edges are 
+drawn as line segments.
+The default is \fItrue\fR for dot, and \fIfalse\fR for all other layouts.
+
+.PP
+\fB(neato\(hyspecific attributes)\fR
+.br
+\fBstart=\fIval\fR.  Requests random initial placement and seeds
+the random number generator.  If \fIval\fP is not an integer,
+the process ID or current time is used as the seed.
+.PP
+\fBepsilon=\fIn\fR.  Sets the cutoff for the solver.
+The default is 0.1.
+
+.PP
+\fB(twopi\(hyspecific attributes)\fR
+.br
+\fBroot=\fIctr\fR. This specifies the node to be used as the center of
+the layout. If not specified, \fItwopi\fP will randomly pick one of the
+nodes that are furthest from a leaf node, where a leaf node is a node
+of degree 1. If no leaf nodes exists, an arbitrary node is picked as center.
+.PP
+\fBranksep=\fIval\fR. Specifies the radial distance in inches between
+the sequence of rings. The default is 0.75.
+.PP
+\fBoverlap=\fImode\fR. This specifies what \fItwopi\fP should do if
+any nodes overlap. If mode is \fI"false"\fP, the program uses Voronoi
+diagrams to adjust the nodes to eliminate overlaps. If mode is \fI"scale"\fP,
+the layout is uniformly scaled up, preserving node sizes, until nodes no
+longer overlap. The latter technique removes overlaps while preserving
+symmetry and structure, while the former removes overlaps more compactly
+but destroys symmetries.
+If mode is \fI"true"\fP (the default), no repositioning is done.
+
+.PP
+\fB(circo\(hyspecific attributes)\fR
+.br
+\fBroot=\fInodename\fR. Specifies the name of a node occurring in the
+root block. If the graph is disconnected, the \fBroot\fP node attribute
+can be used to specify additional root blocks.
+.PP
+\fBmindist=\fIvalue\fR. Sets the minimum separation between all nodes. If not
+specified then \fIcirco\fP uses a default value of 1.0.
+
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBK=\fIval\fR. Sets the default ideal node separation
+in the layout.
+.PP
+\fBmaxiter=\fIval\fR. Sets the maximum number of iterations used to
+layout the graph.
+.PP
+\fBstart=\fIval\fR. Adjusts the random initial placement of nodes
+with no specified position.  If \fIval\fP is is an integer,
+it is used as the seed for the random number generator.
+If \fIval\fP is not an integer, a random system\(hygenerated integer,
+such as the process ID or current time, is used as the seed.
+.PP
+
+.SH "NODE ATTRIBUTES"
+.PP
+\fBheight=\fId\fR or \fBwidth=\fId\fR sets minimum height or width.
+Adding \fBfixedsize=true\fP forces these to be the actual size
+(text labels are ignored).
+.PP
+\fBshape=record polygon epsf \fIbuiltin_polygon\fR
+.br
+\fIbuiltin_polygon\fR is one of: \fBplaintext ellipse oval circle egg 
+triangle box diamond trapezium parallelogram house hexagon octagon
+note tab box3d component.\fR
+(Polygons are defined or modified by the following node attributes:
+\fBregular\fR, \fBperipheries\fR, \fBsides\fR, \fBorientation\fR,
+\fBdistortion\fR and \fBskew\fR.)  \fBepsf\fR uses the node's
+\fBshapefile\fR attribute as the path name of an external
+EPSF file to be automatically loaded for the node shape.
+.PP
+\fBlabel=\fItext\fR where \fItext\fP may include escaped newlines
+\\\|n, \\\|l, or \\\|r for center, left, and right justified lines.
+The string '\\N' value will be replaced by the node name.
+The string '\\G' value will be replaced by the graph name.
+Record labels may contain recursive box lists delimited by { | }.
+Port identifiers in labels are set off by angle brackets < >.
+In the graph file, use colon (such as, \fBnode0:port28\fR).
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBcolor=\fIcolorvalue\fR sets the outline color, and the default fill color
+if style=filled and \fBfillcolor\fR is not specified.
+.PP
+\fBfillcolor=\fIcolorvalue\fR sets the fill color
+when style=filled.  If not specified, the fillcolor when style=filled defaults
+to be the same as the outline color.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+A \fIcolorvalue\fP may be "\fIh,s,v\fB"\fR (hue, saturation, brightness)
+floating point numbers between 0 and 1, or an X11 color name such as
+\fBwhite black red green blue yellow magenta cyan\fR or \fBburlywood\fR,
+or a "\fI#rrggbb" (red, green, blue, 2 hex characters each) value.
+.PP
+\fBstyle=filled solid dashed dotted bold invis\fP or any Postscript code.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the node's active layers.
+The empty string means no layers (invisible).
+.PP
+The following attributes apply only to polygon shape nodes:
+.PP
+\fBregular=\fIn\fR if \fIn\fR is non\(hyzero then the polygon is made 
+regular, i.e. symmetric about the x and y axis, otherwise the
+polygon takes on the aspect ratio of the label. 
+\fIbuiltin_polygons\fR that are not already regular are made regular
+by this attribute.
+\fIbuiltin_polygons\fR that are already regular are not affected (i.e.
+they cannot be made asymmetric).
+.PP
+\fBperipheries=\fIn\fR sets the number of periphery lines drawn around
+the polygon.  This value supersedes the number of periphery lines
+of \fIbuiltin_polygons\fR.
+.PP
+\fBsides=\fIn\fR sets the number of sides to the polygon. \fIn\fR<3
+results in an ellipse.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBorientation=\fIf\fR sets the orientation of the first apex of the
+polygon counterclockwise from the vertical, in degrees.
+\fIf\fR may be a floating point number.
+The orientation of labels is not affected by this attribute.
+This attribute is added to the initial orientation of \fIbuiltin_polygons.\fR
+.PP
+\fBdistortion=\fIf\fR sets the amount of broadening of the top and
+narrowing of the bottom of the polygon (relative to its orientation). 
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP                                                            
+\fBskew=\fIf\fR sets the amount of right\(hydisplacement of the top and
+left\(hydisplacement of the bottom of the polygon (relative to its
+orientation).
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.
+The target string is used to determine which window of the browser is used
+for the URL.  Setting it to "_graphviz" will open a new window if it doesn't
+already exist, or reuse it if it does.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.  The tooltip string defaults to be the
+same as the label string, but this attribute permits nodes without
+labels to still have tooltips thus permitting denser graphs.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+
+.PP
+\fB(circo\(hyspecific attributes)\fR
+.br
+\fBroot=\fItrue/false\fR. This specifies that the block containing the given
+node be treated as the root of the spanning tree in the layout.
+
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBpin=\fIval\fR. If \fIval\fR is "true", the node will remain at
+its initial position.
+
+.SH "EDGE ATTRIBUTES"
+\fBminlen=\fIn\fR where \fIn\fP is an integer factor that applies
+to the edge length (ranks for normal edges, or minimum node separation
+for flat edges).
+.PP
+\fBweight=\fIn\fR where \fIn\fP is the integer cost of the edge.
+Values greater than 1 tend to shorten the edge.  Weight 0 flat
+edges are ignored for ordering nodes.
+.PP
+\fBlabel=\fItext\fR where \fItext\fR may include escaped newlines
+\\\|n, \\\|l, or \\\|r for centered, left, or right justified lines.
+If the substring '\\T' is found in a label it will be replaced by the tail_node name.
+If the substring '\\H' is found in a label it will be replaced by the head_node name.
+If the substring '\\E' value is found in a label it will be replaced by: tail_node_name\->head_node_name
+If the substring '\\G' is found in a label it will be replaced by the graph name.
+or by: tail_node_name\-\-head_node_name for undirected graphs.
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+\fBstyle=solid dashed dotted bold invis\fP
+.PP
+\fBcolor=\fIcolorvalue\fR sets the line color for edges.
+.PP
+\fBcolor=\fIcolorvaluelist\fR a ':' separated list of \fIcolorvalue\fR creates
+parallel edges, one edge for each color.
+.PP
+\fBdir=forward back both none\fP controls arrow direction.
+.PP
+\fBtailclip,headclip=false\fP disables endpoint shape clipping.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edges have a URL.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when edges have a URL.  The tooltip string defaults to be the
+same as the edge label string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBarrowhead,arrowtail=none, normal, inv, dot, odot, invdot, invodot,
+tee, empty, invempty, open, halfopen, diamond, odiamond, box, obox, crow\fP.
+.PP
+\fBarrowsize\fP (norm_length=10,norm_width=5,
+inv_length=6,inv_width=7,dot_radius=2) 
+.PP
+\fBheadlabel,taillabel=string\fP for port labels.
+\fBlabelfontcolor\fP,\fBlabelfontname\fP,\fBlabelfontsize\fP
+for head and tail labels.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadhref=\fI"url"\fR sets the url for the head port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadURL=\fI"url"\fR ("headURL" is a synonym for "headhref".)
+.PP
+\fBheadtarget=\fI"headtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge heads have a URL.
+The headtarget string is used to determine which window of the browser is used
+for the URL.  If the headtarget string is empty, the default,
+then headtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when head ports have a URL.  The tooltip string defaults to be the
+same as the headlabel string. 
+The substrings '\\T', '\\H', and '\\E' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailhref=\fI"url"\fR sets the url for the tail port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailURL=\fI"url"\fR ("tailURL" is a synonym for "tailhref".)
+.PP
+\fBtailtarget=\fI"tailtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge tails have a URL.
+The tailtarget string is used to determine which window of the browser is used
+for the URL.  If the tailtarget string is empty, the default,
+then tailtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when tail ports have a URL.  The tooltip string defaults to be the
+same as the taillabel string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBlabeldistance\fP and \fPport_label_distance\fP set distance; also
+\fBlabelangle\fP (in degrees CCW)
+.PP
+\fBdecorate\fP draws line from edge to label.
+.PP
+\fBsamehead,sametail\fP aim edges having the same value to the
+same port, using the average landing point.
+.PP
+\fBconstraint=false\fP causes an edge to be ignored for rank assignment.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the edge's active layers.
+The empty string means no layers (invisible).
+
+.PP
+\fB(neato\(hyspecific attributes)\fR
+.br
+\fBw=\fIf\fR sets the weight (spring constant) of an edge
+to the given floating point value.  The default is 1.0;
+greater values make the edge tend more toward its optimal length.
+.PP
+\fBlen=\fIf\fR sets the optimal length of an edge.
+The default is 1.0.
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBweight=\fIf\fR sets the weight of an edge
+to the given floating point value. The default is 1.0;
+greater values make the edge tend more toward its optimal length.
+.SH "COMMAND LINE OPTIONS"
+\fB\-G\fP sets a default graph attribute.
+.br
+\fB\-N\fP sets a default node attribute.
+.br
+\fB\-E\fP sets a default edge attribute.
+Example: \fB\-Gsize="7,8" \-Nshape=box \-Efontsize=8\fR
+.PP
+\fB\-l\fIfile\fR loads custom PostScript library files.
+Usually these define custom shapes or styles.
+If \fB\-l\fP is given by itself, the standard library is omitted.
+.PP
+\fB\-T\fIlang\fR sets the output language as described above.
+
+.PP
+\fB\-n\fR[\fB1\fR|\fB2\fR] (no\(hyop)
+If set, neato assumes nodes have already been positioned and all
+nodes have a pos attribute giving the positions.
+It then performs an optional adjustment to remove node\(hynode overlap,
+depending on the value of the overlap attribute,
+computes the edge layouts, depending on the value of the \fBsplines\fR attribute,
+and emits the graph in the appropriate format.
+If num is supplied, the following actions occur:
+.nf
+    num = 1
+.fi
+Equivalent to \-n.
+.nf
+    num > 1
+.fi
+Use node positions as specified,
+with no adjustment to remove node\(hynode overlaps,
+and use any edge layouts already specified by the pos attribute.
+neato computes an edge layout for any edge that does not have a pos attribute.
+As usual, edge layout is guided by the \fBsplines\fR attribute.
+.PP
+\fB\-K\fIlayout\fR override the default layout engine implied by the command name.
+.PP
+\fB\-O\fP automatically generate output filenames based on the input filename and the -T format.
+.PP
+\fB\-P\fP generate a graph of the currently available plugins.
+.PP
+\fB\-v\fP (verbose) prints various information useful for debugging.
+.PP
+\fB\-V\fP (version) prints version information and exits.
+.PP
+\fB\-?\fP prints the usage and exits.
+.SH "EXAMPLES"
+.nf
+digraph test123 {
+        a \-> b \-> c;
+        a \-> {x y};
+        b [shape=box];
+        c [label="hello\\\|nworld",color=blue,fontsize=24,
+             fontname="Palatino\-Italic",fontcolor=red,style=filled];
+        a \-> z [label="hi", weight=100];
+        x \-> z [label="multi\-line\\\|nlabel"];
+        edge [style=dashed,color=red];
+        b \-> x;
+        {rank=same; b x}
+}
+.fi
+.PP
+.nf
+graph test123 {
+        a \-\- b \-\- c;
+        a \-\- {x y};
+        x \-\- c [w=10.0];
+        x \-\- y [w=5.0,len=3];
+}
+.fi
+.SH "CAVEATS"
+Edge splines can overlap unintentionally.
+.PP
+Flat edge labels are slightly broken.
+Intercluster edge labels are totally broken.
+.PP
+Because unconstrained optimization is employed, node boxes can
+possibly overlap or touch unrelated edges.  All existing
+spring embedders seem to have this limitation.
+.PP
+Apparently reasonable attempts to pin nodes or adjust edge lengths
+and weights can cause instability.
+.SH AUTHORS
+Stephen C. North <north@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.br
+John C. Ellson <ellson@research.att.com>
+.PP
+The bitmap driver (PNG, GIF etc) is by Thomas Boutell, <http://www.boutell.com/gd>
+.PP
+The Truetype font renderer is from
+the Freetype Project (David Turner, Robert Wilhelm, and Werner Lemberg)
+(who can be contacted at freetype\-devel@lists.lrz\-muenchen.de).
+.SH "SEE ALSO"
+This man page contains only a small amount of the information related
+to the Graphviz layout programs. The most complete information can be
+found at http://www.graphviz.org/Documentation.php, especially in the
+on\(hyline reference pages. Most of these documents are also available in the
+\fIdoc\fP and \fIdoc/info\fP subtrees in the source and binary distributions.
+.PP
+dotty(1)
+.br
+tcldot(n)
+.br
+xcolors(1)
+.br
+libgraph(3)
+.PP
+E. R. Gansner, S. C. North,  K. P. Vo, "DAG \(hy A Program to Draw Directed Graphs", Software \(hy Practice and Experience 17(1), 1988, pp. 1047\(hy1062.
+.br
+E. R. Gansner, E. Koutsofios, S. C. North,  K. P. Vo, "A Technique for Drawing Directed Graphs," IEEE Trans. on Soft. Eng. 19(3), 1993, pp. 214\(hy230.
+.br
+S. North and E. Koutsofios, "Applications of graph visualization",
+Graphics Interface 94, pp. 234\(hy245.
+.br
+E. Koutsofios and S. C. North, "Drawing Graphs with dot," 
+Available on research.att.com in dist/drawdag/dotguide.ps.Z.
+.br
+S. C. North, "NEATO User's Manual".
+Available on research.att.com in dist/drawdag/neatodoc.ps.Z.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/dijkstra.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,64 @@
+.TH DIJKSTRA 1 "21 March 2001"
+.SH NAME
+dijkstra \- single-source distance filter
+.SH SYNOPSIS
+.B dijkstra
+[
+.B \-ap?
+]
+[ 
+.I sourcenode file
+]
+.SH DESCRIPTION
+.B dijkstra
+reads a stream of graphs and for each computes the distance of every
+node from
+.I sourcenode.
+Edge length is given in the 
+.I len
+attribute, and the default is 1.  The 
+.I dist
+attribute of every node is set to its distance from
+.I sourcenode.
+If the \fB-p\fP flag is used, the
+.I prev
+attribute of each node reachable from
+.I sourcenode
+is set to the name of the previous node on a shortest path.
+The graph attribute
+.I maxdist
+is set to the maximum 
+.I dist
+of all nodes in the graph.
+.P
+By default, if the graph is disconnected, the
+.I dist
+attribute of nodes unreachable from
+.I sourcenode
+are left untouched, and
+.I maxdist
+is set to the maximum of any previous value and the largest
+distance recorded in this run. On the other hand, if
+the \fB-a\fP flag is used, the
+.I dist
+attribute of an unreachable node is assigned a very large value,
+and
+.I maxdist
+records the maximum distance found in the component containing
+.I sourcenode.
+.P
+Any number of
+.I sourcenode file
+pairs may be given.
+If the last 
+.I file 
+is missing, \fBstdin\fP is used.
+All output is written to \fBstdout\fP.
+.P
+In a typical application,
+.I dist
+and 
+.I maxdist
+can drive a downstream calculation of color or some other attribute.
+.SH "SEE ALSO"
+gvpr(1), gvcolor(1), libgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/dot.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,725 @@
+.TH DOT 1 "23 August 2004" \*(eX
+.SH NAME
+dot \- filter for drawing directed graphs
+.br
+neato \- filter for drawing undirected graphs
+.br
+twopi \- filter for radial layouts of graphs
+.br
+circo \- filter for circular layout of graphs
+.br
+fdp \- filter for drawing undirected graphs
+.br
+sfdp \- filter for drawing large undirected graphs
+.SH SYNOPSIS
+\fBdot\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBneato\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-n\fR[\fB1\fR|\fB2\fR]]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBtwopi\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBcirco\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBfdp\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBsfdp\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.SH DESCRIPTION
+.I dot
+draws directed graphs.  It works well on DAGs and other graphs
+that can be drawn as hierarchies.
+It reads attributed graph files and writes drawings.
+By default, the output format
+.I dot
+is the input file with layout coordinates appended.
+.PP
+.I neato
+draws undirected graphs using ``spring'' models (see Kamada and Kawai,
+Information Processing Letters 31:1, April 1989).  Input files must be
+formatted in the
+.I dot
+attributed graph language.
+By default, the output of
+.I neato
+is the input graph with layout coordinates appended.
+.PP
+.I twopi
+draws graphs using a radial layout (see G. Wills,
+Symposium on Graph Drawing GD'97, September, 1997).
+Basically, one node is chosen as the center and put at the origin.
+The remaining nodes are placed on a sequence of concentric circles
+centered about the origin, each a fixed radial distance from the
+previous circle.
+All nodes distance 1 from the center are placed on the first circle;
+all nodes distance 1 from a node on the first circle are placed on
+the second circle; and so forth.
+.PP
+.I circo
+draws graphs using a circular layout (see
+Six and Tollis, GD '99 and ALENEX '99, and
+Kaufmann and Wiese, GD '02.)
+The tool identifies biconnected components and draws the nodes of
+the component on a circle. The block\(hycutpoint tree
+is then laid out using a recursive radial algorithm. Edge
+crossings within a circle are minimized by placing as many edges on
+the circle's perimeter as possible.
+In particular, if the component is outerplanar, the component will
+have a planar layout.
+.PP
+If a node belongs to multiple non\(hytrivial biconnected components,
+the layout puts the node in one of them. By default, this is the first
+non\(hytrivial component found in the search from the root component.
+.PP
+.I fdp
+draws undirected graphs using a ``spring'' model. It relies on a
+force\(hydirected approach in the spirit of Fruchterman and Reingold
+(cf. Software\(hyPractice & Experience 21(11), 1991, pp. 1129\(hy1164).
+.PP
+.I sfdp
+also draws undirected graphs using the ``spring'' model described
+above, but it uses a multi-scale approach to produce layouts
+of large graphs in a reasonably short time.
+.SH OUTPUT FORMATS
+Dot uses an extensible plugin mechanism for its output renderers,
+so to see what output formats your installation of dot supports
+you can use ``dot \-Txxx'' (where xxx is an unlikely format)
+and check the warning message.
+Also, The plugin mechanism supports multiple implementations
+of the output formats.
+To see what variants are available, use, for example: ``dot \-Tpng:''
+and to force a particular variant, use, for example: ``dot \-Tpng:gd''
+.P
+Traditionally, dot supports the following:
+\fB\-Tps\fP (PostScript),
+\fB\-Tsvg\fP \fB\-Tsvgz\fP (Structured Vector Graphics),
+\fB\-Tfig\fP (XFIG graphics),
+\fB\-Tmif\fP (FrameMaker graphics),
+\fB\-Thpgl\fP (HP pen plotters), and \fB\-Tpcl\fP (Laserjet printers),
+\fB\-Tpng\fP \fB\-Tgif\fP (bitmap graphics),
+\fB\-Tdia\fP (GTK+ based diagrams),
+\fB\-Timap\fP (imagemap files for httpd servers for each node or edge
+that has a non\(hynull "href" attribute.),
+\fB\-Tcmapx\fP (client\(hyside imagemap for use in html and xhtml).
+Additional less common or more special\(hypurpose output formats
+can be found at http://www.graphviz.org/cvs/doc/info/output.html.)
+.P
+Alternative plugins providing support for a given output format
+can be found from the error message resulting from appending a ':' to the format. e.g. \fB-Tpng:\fP
+The first plugin listed is always the default.
+.P
+The \fB\-P\fP switch can be used to produce a graph of all output variants supported by plugins in the local installation of graphviz.
+.SH GRAPH FILE LANGUAGE
+Here is a synopsis of the graph file language, traditionally using the extension \fB.dot\fR, for graphs:
+.PP
+[\fBstrict\fR] (\fBgraph\fR|\fBdigraph\fR) \fIname\fP { \fIstatement\(hylist\fP }\fR
+.br 
+Is the top level graph. If the graph is \fBstrict\fR then multiple edges are
+not allowed between the same pairs of nodes.
+If it is a directed graph, indicated by \fBdigraph\fR,
+then the \fIedgeop\fR must be "\->". If it is an undirected \fBgraph\fR
+then the \fIedgeop\fR must be "\-\-".
+Statements may be:
+.PP
+\fIname\fB=\fIval\fB;\fR
+.br
+\fBnode [\fIname\fB=\fIval\fB];\fR
+.br
+\fBedge [\fIname\fB=\fIval\fB];\fR
+.br
+Set default graph, node, or edge attribute \fIname\fP to \fIval\fP.
+Any subgraph, node, or edge appearing after this inherits the new
+default attributes.
+.PP
+\fBn0 [\fIname0=val0,name1=val1,...\fB];\fR
+Creates node \fBn0\fP (if it does not already exist)
+and sets its attributes according to the optional list. 
+.PP
+\fBn0 \fIedgeop\fR n1 \fIedgeop\fR \fI...\fB \fIedgeop\fR nn [\fIname0=val0,name1=val1,...\fB];\fR
+.br
+Creates edges between nodes \fBn0\fP, \fBn1\fP, ..., \fBnn\fP and sets
+their attributes according to the optional list.
+Creates nodes as necessary.
+.PP
+[\fBsubgraph \fIname\fB] { \fIstatement\(hylist \fB}\fR
+.br
+Creates a subgraph.  Subgraphs may be used in place
+of \fBn0\fP, ..., \fBnn\fP in the above statements to create edges.
+[\fBsubgraph \fIname\fR] is optional;
+if missing, the subgraph is assigned an internal name. 
+.PP
+Comments may be /*C\(hylike*/ or //C++\(hylike.
+
+.PP
+Attribute names and values are ordinary (C\(hystyle) strings.
+The following sections describe attributes that control graph layout.
+
+.SH "GRAPH ATTRIBUTES"
+.PP
+\fBsize="\fIx,y\fP"\fR sets bounding box of drawing in inches.
+.PP
+\fBpage="\fIx,y\fP"\fR sets the PostScript pagination unit.
+.PP
+\fBratio=\fIf\fR sets the aspect ratio to \fIf\fP which may be
+a floating point number, or one of the keywords \fBfill\fP,
+\fBcompress\fP, or \fBauto\fP.
+.PP
+\fBlayout=\fIengine\fR indicates the preferred layout engine ("dot", "neato", fdp" etc) overriding the default from the basename of the command or the -K commandline option.
+.PP
+\fBmargin=\fIf\fR sets the page margin (included in the page size).
+.PP
+\fBnodesep=\fIf\fR sets the minimum separation between nodes.
+.PP
+\fBranksep=\fIf\fR sets the minimum separation between ranks.
+.PP
+\fBordering=out\fR constrains order of out\(hyedges in a subgraph
+according to their file sequence.
+.PP
+\fBrankdir=LR|RL|BT\fR requests a left\(hyto\(hyright, right\(hyto\(hyleft, or bottom\(hyto\(hytop, drawing.
+.PP
+\fBpagedir=\fR[TBLR][TBLR] sets the major and minor order of pagination.
+.PP
+\fBrank=same\fR (or \fBmin\fP or \fBmax\fP) in a subgraph
+constrains the rank assignment of its nodes.   If a subgraph's
+name has the prefix \fBcluster\fP, its nodes are drawn in
+a distinct rectangle of the layout.  Clusters may be nested.
+.PP
+\fBrotate=90\fR sets landscape mode. 
+(\fBorientation=land\fR is backward compatible but obsolete.)
+.PP
+\fBcenter=\fIn\fR a non\(hyzero value centers the drawing on the page.
+.PP
+\fBnslimit=\fIf\fR or \fBmclimit=\fIf\fR adjusts the bound on the
+number of network simplex or mincross iterations by the given ratio.
+For example, \fBmclimit=2.0\fP runs twice as long.
+.PP
+\fBlayers="\fIid:id:id:id\fR" is a sequence of layer identifiers for
+overlay diagrams.  The PostScript array variable \fIlayercolorseq\fR
+sets the assignment of colors to layers. The least index is 1 and 
+each element must be a 3\(hyelement array to be interpreted as a color coordinate.
+.PP
+\fBcolor=\fIcolorvalue\fR sets foreground color (\fBbgcolor\fP for background).
+.PP
+\fBhref=\fI"url"\fR the default url for image map files; in PostScript files,
+the base URL for all relative URLs, as recognized by Acrobat Distiller
+3.0 and up.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBstylesheet=\fI"file.css"\fR includes a reference to a stylesheet
+in \-Tsvg and \-Tsvgz outputs.  Ignored by other formats.
+.PP
+\fBsplines\fR. If set to \fItrue\fR, edges are
+drawn as splines.
+If set to \fIpolyline\fR, edges are 
+drawn as polylines.
+If set to \fIortho\fR, edges are 
+drawn as orthogonal polylines.
+In all of these cases, the nodes may not overlap.
+If \fBsplines=\fIfalse\fR or \fBsplines=\fIline\fR, edges are 
+drawn as line segments.
+The default is \fItrue\fR for dot, and \fIfalse\fR for all other layouts.
+
+.PP
+\fB(neato\(hyspecific attributes)\fR
+.br
+\fBstart=\fIval\fR.  Requests random initial placement and seeds
+the random number generator.  If \fIval\fP is not an integer,
+the process ID or current time is used as the seed.
+.PP
+\fBepsilon=\fIn\fR.  Sets the cutoff for the solver.
+The default is 0.1.
+
+.PP
+\fB(twopi\(hyspecific attributes)\fR
+.br
+\fBroot=\fIctr\fR. This specifies the node to be used as the center of
+the layout. If not specified, \fItwopi\fP will randomly pick one of the
+nodes that are furthest from a leaf node, where a leaf node is a node
+of degree 1. If no leaf nodes exists, an arbitrary node is picked as center.
+.PP
+\fBranksep=\fIval\fR. Specifies the radial distance in inches between
+the sequence of rings. The default is 0.75.
+.PP
+\fBoverlap=\fImode\fR. This specifies what \fItwopi\fP should do if
+any nodes overlap. If mode is \fI"false"\fP, the program uses Voronoi
+diagrams to adjust the nodes to eliminate overlaps. If mode is \fI"scale"\fP,
+the layout is uniformly scaled up, preserving node sizes, until nodes no
+longer overlap. The latter technique removes overlaps while preserving
+symmetry and structure, while the former removes overlaps more compactly
+but destroys symmetries.
+If mode is \fI"true"\fP (the default), no repositioning is done.
+
+.PP
+\fB(circo\(hyspecific attributes)\fR
+.br
+\fBroot=\fInodename\fR. Specifies the name of a node occurring in the
+root block. If the graph is disconnected, the \fBroot\fP node attribute
+can be used to specify additional root blocks.
+.PP
+\fBmindist=\fIvalue\fR. Sets the minimum separation between all nodes. If not
+specified then \fIcirco\fP uses a default value of 1.0.
+
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBK=\fIval\fR. Sets the default ideal node separation
+in the layout.
+.PP
+\fBmaxiter=\fIval\fR. Sets the maximum number of iterations used to
+layout the graph.
+.PP
+\fBstart=\fIval\fR. Adjusts the random initial placement of nodes
+with no specified position.  If \fIval\fP is is an integer,
+it is used as the seed for the random number generator.
+If \fIval\fP is not an integer, a random system\(hygenerated integer,
+such as the process ID or current time, is used as the seed.
+.PP
+
+.SH "NODE ATTRIBUTES"
+.PP
+\fBheight=\fId\fR or \fBwidth=\fId\fR sets minimum height or width.
+Adding \fBfixedsize=true\fP forces these to be the actual size
+(text labels are ignored).
+.PP
+\fBshape=record polygon epsf \fIbuiltin_polygon\fR
+.br
+\fIbuiltin_polygon\fR is one of: \fBplaintext ellipse oval circle egg 
+triangle box diamond trapezium parallelogram house hexagon octagon
+note tab box3d component.\fR
+(Polygons are defined or modified by the following node attributes:
+\fBregular\fR, \fBperipheries\fR, \fBsides\fR, \fBorientation\fR,
+\fBdistortion\fR and \fBskew\fR.)  \fBepsf\fR uses the node's
+\fBshapefile\fR attribute as the path name of an external
+EPSF file to be automatically loaded for the node shape.
+.PP
+\fBlabel=\fItext\fR where \fItext\fP may include escaped newlines
+\\\|n, \\\|l, or \\\|r for center, left, and right justified lines.
+The string '\\N' value will be replaced by the node name.
+The string '\\G' value will be replaced by the graph name.
+Record labels may contain recursive box lists delimited by { | }.
+Port identifiers in labels are set off by angle brackets < >.
+In the graph file, use colon (such as, \fBnode0:port28\fR).
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBcolor=\fIcolorvalue\fR sets the outline color, and the default fill color
+if style=filled and \fBfillcolor\fR is not specified.
+.PP
+\fBfillcolor=\fIcolorvalue\fR sets the fill color
+when style=filled.  If not specified, the fillcolor when style=filled defaults
+to be the same as the outline color.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+A \fIcolorvalue\fP may be "\fIh,s,v\fB"\fR (hue, saturation, brightness)
+floating point numbers between 0 and 1, or an X11 color name such as
+\fBwhite black red green blue yellow magenta cyan\fR or \fBburlywood\fR,
+or a "\fI#rrggbb" (red, green, blue, 2 hex characters each) value.
+.PP
+\fBstyle=filled solid dashed dotted bold invis\fP or any Postscript code.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the node's active layers.
+The empty string means no layers (invisible).
+.PP
+The following attributes apply only to polygon shape nodes:
+.PP
+\fBregular=\fIn\fR if \fIn\fR is non\(hyzero then the polygon is made 
+regular, i.e. symmetric about the x and y axis, otherwise the
+polygon takes on the aspect ratio of the label. 
+\fIbuiltin_polygons\fR that are not already regular are made regular
+by this attribute.
+\fIbuiltin_polygons\fR that are already regular are not affected (i.e.
+they cannot be made asymmetric).
+.PP
+\fBperipheries=\fIn\fR sets the number of periphery lines drawn around
+the polygon.  This value supersedes the number of periphery lines
+of \fIbuiltin_polygons\fR.
+.PP
+\fBsides=\fIn\fR sets the number of sides to the polygon. \fIn\fR<3
+results in an ellipse.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBorientation=\fIf\fR sets the orientation of the first apex of the
+polygon counterclockwise from the vertical, in degrees.
+\fIf\fR may be a floating point number.
+The orientation of labels is not affected by this attribute.
+This attribute is added to the initial orientation of \fIbuiltin_polygons.\fR
+.PP
+\fBdistortion=\fIf\fR sets the amount of broadening of the top and
+narrowing of the bottom of the polygon (relative to its orientation). 
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP                                                            
+\fBskew=\fIf\fR sets the amount of right\(hydisplacement of the top and
+left\(hydisplacement of the bottom of the polygon (relative to its
+orientation).
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.
+The target string is used to determine which window of the browser is used
+for the URL.  Setting it to "_graphviz" will open a new window if it doesn't
+already exist, or reuse it if it does.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.  The tooltip string defaults to be the
+same as the label string, but this attribute permits nodes without
+labels to still have tooltips thus permitting denser graphs.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+
+.PP
+\fB(circo\(hyspecific attributes)\fR
+.br
+\fBroot=\fItrue/false\fR. This specifies that the block containing the given
+node be treated as the root of the spanning tree in the layout.
+
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBpin=\fIval\fR. If \fIval\fR is "true", the node will remain at
+its initial position.
+
+.SH "EDGE ATTRIBUTES"
+\fBminlen=\fIn\fR where \fIn\fP is an integer factor that applies
+to the edge length (ranks for normal edges, or minimum node separation
+for flat edges).
+.PP
+\fBweight=\fIn\fR where \fIn\fP is the integer cost of the edge.
+Values greater than 1 tend to shorten the edge.  Weight 0 flat
+edges are ignored for ordering nodes.
+.PP
+\fBlabel=\fItext\fR where \fItext\fR may include escaped newlines
+\\\|n, \\\|l, or \\\|r for centered, left, or right justified lines.
+If the substring '\\T' is found in a label it will be replaced by the tail_node name.
+If the substring '\\H' is found in a label it will be replaced by the head_node name.
+If the substring '\\E' value is found in a label it will be replaced by: tail_node_name\->head_node_name
+If the substring '\\G' is found in a label it will be replaced by the graph name.
+or by: tail_node_name\-\-head_node_name for undirected graphs.
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+\fBstyle=solid dashed dotted bold invis\fP
+.PP
+\fBcolor=\fIcolorvalue\fR sets the line color for edges.
+.PP
+\fBcolor=\fIcolorvaluelist\fR a ':' separated list of \fIcolorvalue\fR creates
+parallel edges, one edge for each color.
+.PP
+\fBdir=forward back both none\fP controls arrow direction.
+.PP
+\fBtailclip,headclip=false\fP disables endpoint shape clipping.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edges have a URL.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when edges have a URL.  The tooltip string defaults to be the
+same as the edge label string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBarrowhead,arrowtail=none, normal, inv, dot, odot, invdot, invodot,
+tee, empty, invempty, open, halfopen, diamond, odiamond, box, obox, crow\fP.
+.PP
+\fBarrowsize\fP (norm_length=10,norm_width=5,
+inv_length=6,inv_width=7,dot_radius=2) 
+.PP
+\fBheadlabel,taillabel=string\fP for port labels.
+\fBlabelfontcolor\fP,\fBlabelfontname\fP,\fBlabelfontsize\fP
+for head and tail labels.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadhref=\fI"url"\fR sets the url for the head port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadURL=\fI"url"\fR ("headURL" is a synonym for "headhref".)
+.PP
+\fBheadtarget=\fI"headtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge heads have a URL.
+The headtarget string is used to determine which window of the browser is used
+for the URL.  If the headtarget string is empty, the default,
+then headtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when head ports have a URL.  The tooltip string defaults to be the
+same as the headlabel string. 
+The substrings '\\T', '\\H', and '\\E' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailhref=\fI"url"\fR sets the url for the tail port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailURL=\fI"url"\fR ("tailURL" is a synonym for "tailhref".)
+.PP
+\fBtailtarget=\fI"tailtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge tails have a URL.
+The tailtarget string is used to determine which window of the browser is used
+for the URL.  If the tailtarget string is empty, the default,
+then tailtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when tail ports have a URL.  The tooltip string defaults to be the
+same as the taillabel string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBlabeldistance\fP and \fPport_label_distance\fP set distance; also
+\fBlabelangle\fP (in degrees CCW)
+.PP
+\fBdecorate\fP draws line from edge to label.
+.PP
+\fBsamehead,sametail\fP aim edges having the same value to the
+same port, using the average landing point.
+.PP
+\fBconstraint=false\fP causes an edge to be ignored for rank assignment.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the edge's active layers.
+The empty string means no layers (invisible).
+
+.PP
+\fB(neato\(hyspecific attributes)\fR
+.br
+\fBw=\fIf\fR sets the weight (spring constant) of an edge
+to the given floating point value.  The default is 1.0;
+greater values make the edge tend more toward its optimal length.
+.PP
+\fBlen=\fIf\fR sets the optimal length of an edge.
+The default is 1.0.
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBweight=\fIf\fR sets the weight of an edge
+to the given floating point value. The default is 1.0;
+greater values make the edge tend more toward its optimal length.
+.SH "COMMAND LINE OPTIONS"
+\fB\-G\fP sets a default graph attribute.
+.br
+\fB\-N\fP sets a default node attribute.
+.br
+\fB\-E\fP sets a default edge attribute.
+Example: \fB\-Gsize="7,8" \-Nshape=box \-Efontsize=8\fR
+.PP
+\fB\-l\fIfile\fR loads custom PostScript library files.
+Usually these define custom shapes or styles.
+If \fB\-l\fP is given by itself, the standard library is omitted.
+.PP
+\fB\-T\fIlang\fR sets the output language as described above.
+
+.PP
+\fB\-n\fR[\fB1\fR|\fB2\fR] (no\(hyop)
+If set, neato assumes nodes have already been positioned and all
+nodes have a pos attribute giving the positions.
+It then performs an optional adjustment to remove node\(hynode overlap,
+depending on the value of the overlap attribute,
+computes the edge layouts, depending on the value of the \fBsplines\fR attribute,
+and emits the graph in the appropriate format.
+If num is supplied, the following actions occur:
+.nf
+    num = 1
+.fi
+Equivalent to \-n.
+.nf
+    num > 1
+.fi
+Use node positions as specified,
+with no adjustment to remove node\(hynode overlaps,
+and use any edge layouts already specified by the pos attribute.
+neato computes an edge layout for any edge that does not have a pos attribute.
+As usual, edge layout is guided by the \fBsplines\fR attribute.
+.PP
+\fB\-K\fIlayout\fR override the default layout engine implied by the command name.
+.PP
+\fB\-O\fP automatically generate output filenames based on the input filename and the -T format.
+.PP
+\fB\-P\fP generate a graph of the currently available plugins.
+.PP
+\fB\-v\fP (verbose) prints various information useful for debugging.
+.PP
+\fB\-V\fP (version) prints version information and exits.
+.PP
+\fB\-?\fP prints the usage and exits.
+.SH "EXAMPLES"
+.nf
+digraph test123 {
+        a \-> b \-> c;
+        a \-> {x y};
+        b [shape=box];
+        c [label="hello\\\|nworld",color=blue,fontsize=24,
+             fontname="Palatino\-Italic",fontcolor=red,style=filled];
+        a \-> z [label="hi", weight=100];
+        x \-> z [label="multi\-line\\\|nlabel"];
+        edge [style=dashed,color=red];
+        b \-> x;
+        {rank=same; b x}
+}
+.fi
+.PP
+.nf
+graph test123 {
+        a \-\- b \-\- c;
+        a \-\- {x y};
+        x \-\- c [w=10.0];
+        x \-\- y [w=5.0,len=3];
+}
+.fi
+.SH "CAVEATS"
+Edge splines can overlap unintentionally.
+.PP
+Flat edge labels are slightly broken.
+Intercluster edge labels are totally broken.
+.PP
+Because unconstrained optimization is employed, node boxes can
+possibly overlap or touch unrelated edges.  All existing
+spring embedders seem to have this limitation.
+.PP
+Apparently reasonable attempts to pin nodes or adjust edge lengths
+and weights can cause instability.
+.SH AUTHORS
+Stephen C. North <north@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.br
+John C. Ellson <ellson@research.att.com>
+.PP
+The bitmap driver (PNG, GIF etc) is by Thomas Boutell, <http://www.boutell.com/gd>
+.PP
+The Truetype font renderer is from
+the Freetype Project (David Turner, Robert Wilhelm, and Werner Lemberg)
+(who can be contacted at freetype\-devel@lists.lrz\-muenchen.de).
+.SH "SEE ALSO"
+This man page contains only a small amount of the information related
+to the Graphviz layout programs. The most complete information can be
+found at http://www.graphviz.org/Documentation.php, especially in the
+on\(hyline reference pages. Most of these documents are also available in the
+\fIdoc\fP and \fIdoc/info\fP subtrees in the source and binary distributions.
+.PP
+dotty(1)
+.br
+tcldot(n)
+.br
+xcolors(1)
+.br
+libgraph(3)
+.PP
+E. R. Gansner, S. C. North,  K. P. Vo, "DAG \(hy A Program to Draw Directed Graphs", Software \(hy Practice and Experience 17(1), 1988, pp. 1047\(hy1062.
+.br
+E. R. Gansner, E. Koutsofios, S. C. North,  K. P. Vo, "A Technique for Drawing Directed Graphs," IEEE Trans. on Soft. Eng. 19(3), 1993, pp. 214\(hy230.
+.br
+S. North and E. Koutsofios, "Applications of graph visualization",
+Graphics Interface 94, pp. 234\(hy245.
+.br
+E. Koutsofios and S. C. North, "Drawing Graphs with dot," 
+Available on research.att.com in dist/drawdag/dotguide.ps.Z.
+.br
+S. C. North, "NEATO User's Manual".
+Available on research.att.com in dist/drawdag/neatodoc.ps.Z.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/dotty.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+.TH DOTTY 1
+.SH NAME
+dotty \- A Customizable Graph Editor
+.SH SYNOPSIS
+.B dotty
+[
+.B -V
+] [
+.I file
+]
+.SH DESCRIPTION
+.B dotty
+is a graph editor for the X Window System.  It may be run as a standalone
+editor, or as a front end for applications that use graphs.  It can control
+multiple windows viewing different graphs.
+
+.B dotty
+is written on top of
+.B dot
+and
+.BR lefty .
+.B lefty
+is a general-purpose programmable editor for technical pictures.  It has an
+interpretive programming language similar to AWK and C.  The user interface and
+graph editing operations of
+.B dotty
+are written as
+.B lefty
+functions.
+Programmer-defined graph operations may be loaded as well.  Graph layouts are
+made by
+.BR dot ,
+which runs as a separate process that communicates with
+.B lefty
+through pipes.
+.SH USAGE
+The file name is optional. If present, the graph contained in that file is
+displayed in the
+.B dotty
+window.
+.SH OPTIONS
+.TP
+.B -V
+Prints the version.
+.SH SEE ALSO
+dot(1), lefty(1)
+.br
+.I dotty
+user guide.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/fdp.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,725 @@
+.TH DOT 1 "23 August 2004" \*(eX
+.SH NAME
+dot \- filter for drawing directed graphs
+.br
+neato \- filter for drawing undirected graphs
+.br
+twopi \- filter for radial layouts of graphs
+.br
+circo \- filter for circular layout of graphs
+.br
+fdp \- filter for drawing undirected graphs
+.br
+sfdp \- filter for drawing large undirected graphs
+.SH SYNOPSIS
+\fBdot\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBneato\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-n\fR[\fB1\fR|\fB2\fR]]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBtwopi\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBcirco\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBfdp\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBsfdp\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.SH DESCRIPTION
+.I dot
+draws directed graphs.  It works well on DAGs and other graphs
+that can be drawn as hierarchies.
+It reads attributed graph files and writes drawings.
+By default, the output format
+.I dot
+is the input file with layout coordinates appended.
+.PP
+.I neato
+draws undirected graphs using ``spring'' models (see Kamada and Kawai,
+Information Processing Letters 31:1, April 1989).  Input files must be
+formatted in the
+.I dot
+attributed graph language.
+By default, the output of
+.I neato
+is the input graph with layout coordinates appended.
+.PP
+.I twopi
+draws graphs using a radial layout (see G. Wills,
+Symposium on Graph Drawing GD'97, September, 1997).
+Basically, one node is chosen as the center and put at the origin.
+The remaining nodes are placed on a sequence of concentric circles
+centered about the origin, each a fixed radial distance from the
+previous circle.
+All nodes distance 1 from the center are placed on the first circle;
+all nodes distance 1 from a node on the first circle are placed on
+the second circle; and so forth.
+.PP
+.I circo
+draws graphs using a circular layout (see
+Six and Tollis, GD '99 and ALENEX '99, and
+Kaufmann and Wiese, GD '02.)
+The tool identifies biconnected components and draws the nodes of
+the component on a circle. The block\(hycutpoint tree
+is then laid out using a recursive radial algorithm. Edge
+crossings within a circle are minimized by placing as many edges on
+the circle's perimeter as possible.
+In particular, if the component is outerplanar, the component will
+have a planar layout.
+.PP
+If a node belongs to multiple non\(hytrivial biconnected components,
+the layout puts the node in one of them. By default, this is the first
+non\(hytrivial component found in the search from the root component.
+.PP
+.I fdp
+draws undirected graphs using a ``spring'' model. It relies on a
+force\(hydirected approach in the spirit of Fruchterman and Reingold
+(cf. Software\(hyPractice & Experience 21(11), 1991, pp. 1129\(hy1164).
+.PP
+.I sfdp
+also draws undirected graphs using the ``spring'' model described
+above, but it uses a multi-scale approach to produce layouts
+of large graphs in a reasonably short time.
+.SH OUTPUT FORMATS
+Dot uses an extensible plugin mechanism for its output renderers,
+so to see what output formats your installation of dot supports
+you can use ``dot \-Txxx'' (where xxx is an unlikely format)
+and check the warning message.
+Also, The plugin mechanism supports multiple implementations
+of the output formats.
+To see what variants are available, use, for example: ``dot \-Tpng:''
+and to force a particular variant, use, for example: ``dot \-Tpng:gd''
+.P
+Traditionally, dot supports the following:
+\fB\-Tps\fP (PostScript),
+\fB\-Tsvg\fP \fB\-Tsvgz\fP (Structured Vector Graphics),
+\fB\-Tfig\fP (XFIG graphics),
+\fB\-Tmif\fP (FrameMaker graphics),
+\fB\-Thpgl\fP (HP pen plotters), and \fB\-Tpcl\fP (Laserjet printers),
+\fB\-Tpng\fP \fB\-Tgif\fP (bitmap graphics),
+\fB\-Tdia\fP (GTK+ based diagrams),
+\fB\-Timap\fP (imagemap files for httpd servers for each node or edge
+that has a non\(hynull "href" attribute.),
+\fB\-Tcmapx\fP (client\(hyside imagemap for use in html and xhtml).
+Additional less common or more special\(hypurpose output formats
+can be found at http://www.graphviz.org/cvs/doc/info/output.html.)
+.P
+Alternative plugins providing support for a given output format
+can be found from the error message resulting from appending a ':' to the format. e.g. \fB-Tpng:\fP
+The first plugin listed is always the default.
+.P
+The \fB\-P\fP switch can be used to produce a graph of all output variants supported by plugins in the local installation of graphviz.
+.SH GRAPH FILE LANGUAGE
+Here is a synopsis of the graph file language, traditionally using the extension \fB.dot\fR, for graphs:
+.PP
+[\fBstrict\fR] (\fBgraph\fR|\fBdigraph\fR) \fIname\fP { \fIstatement\(hylist\fP }\fR
+.br 
+Is the top level graph. If the graph is \fBstrict\fR then multiple edges are
+not allowed between the same pairs of nodes.
+If it is a directed graph, indicated by \fBdigraph\fR,
+then the \fIedgeop\fR must be "\->". If it is an undirected \fBgraph\fR
+then the \fIedgeop\fR must be "\-\-".
+Statements may be:
+.PP
+\fIname\fB=\fIval\fB;\fR
+.br
+\fBnode [\fIname\fB=\fIval\fB];\fR
+.br
+\fBedge [\fIname\fB=\fIval\fB];\fR
+.br
+Set default graph, node, or edge attribute \fIname\fP to \fIval\fP.
+Any subgraph, node, or edge appearing after this inherits the new
+default attributes.
+.PP
+\fBn0 [\fIname0=val0,name1=val1,...\fB];\fR
+Creates node \fBn0\fP (if it does not already exist)
+and sets its attributes according to the optional list. 
+.PP
+\fBn0 \fIedgeop\fR n1 \fIedgeop\fR \fI...\fB \fIedgeop\fR nn [\fIname0=val0,name1=val1,...\fB];\fR
+.br
+Creates edges between nodes \fBn0\fP, \fBn1\fP, ..., \fBnn\fP and sets
+their attributes according to the optional list.
+Creates nodes as necessary.
+.PP
+[\fBsubgraph \fIname\fB] { \fIstatement\(hylist \fB}\fR
+.br
+Creates a subgraph.  Subgraphs may be used in place
+of \fBn0\fP, ..., \fBnn\fP in the above statements to create edges.
+[\fBsubgraph \fIname\fR] is optional;
+if missing, the subgraph is assigned an internal name. 
+.PP
+Comments may be /*C\(hylike*/ or //C++\(hylike.
+
+.PP
+Attribute names and values are ordinary (C\(hystyle) strings.
+The following sections describe attributes that control graph layout.
+
+.SH "GRAPH ATTRIBUTES"
+.PP
+\fBsize="\fIx,y\fP"\fR sets bounding box of drawing in inches.
+.PP
+\fBpage="\fIx,y\fP"\fR sets the PostScript pagination unit.
+.PP
+\fBratio=\fIf\fR sets the aspect ratio to \fIf\fP which may be
+a floating point number, or one of the keywords \fBfill\fP,
+\fBcompress\fP, or \fBauto\fP.
+.PP
+\fBlayout=\fIengine\fR indicates the preferred layout engine ("dot", "neato", fdp" etc) overriding the default from the basename of the command or the -K commandline option.
+.PP
+\fBmargin=\fIf\fR sets the page margin (included in the page size).
+.PP
+\fBnodesep=\fIf\fR sets the minimum separation between nodes.
+.PP
+\fBranksep=\fIf\fR sets the minimum separation between ranks.
+.PP
+\fBordering=out\fR constrains order of out\(hyedges in a subgraph
+according to their file sequence.
+.PP
+\fBrankdir=LR|RL|BT\fR requests a left\(hyto\(hyright, right\(hyto\(hyleft, or bottom\(hyto\(hytop, drawing.
+.PP
+\fBpagedir=\fR[TBLR][TBLR] sets the major and minor order of pagination.
+.PP
+\fBrank=same\fR (or \fBmin\fP or \fBmax\fP) in a subgraph
+constrains the rank assignment of its nodes.   If a subgraph's
+name has the prefix \fBcluster\fP, its nodes are drawn in
+a distinct rectangle of the layout.  Clusters may be nested.
+.PP
+\fBrotate=90\fR sets landscape mode. 
+(\fBorientation=land\fR is backward compatible but obsolete.)
+.PP
+\fBcenter=\fIn\fR a non\(hyzero value centers the drawing on the page.
+.PP
+\fBnslimit=\fIf\fR or \fBmclimit=\fIf\fR adjusts the bound on the
+number of network simplex or mincross iterations by the given ratio.
+For example, \fBmclimit=2.0\fP runs twice as long.
+.PP
+\fBlayers="\fIid:id:id:id\fR" is a sequence of layer identifiers for
+overlay diagrams.  The PostScript array variable \fIlayercolorseq\fR
+sets the assignment of colors to layers. The least index is 1 and 
+each element must be a 3\(hyelement array to be interpreted as a color coordinate.
+.PP
+\fBcolor=\fIcolorvalue\fR sets foreground color (\fBbgcolor\fP for background).
+.PP
+\fBhref=\fI"url"\fR the default url for image map files; in PostScript files,
+the base URL for all relative URLs, as recognized by Acrobat Distiller
+3.0 and up.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBstylesheet=\fI"file.css"\fR includes a reference to a stylesheet
+in \-Tsvg and \-Tsvgz outputs.  Ignored by other formats.
+.PP
+\fBsplines\fR. If set to \fItrue\fR, edges are
+drawn as splines.
+If set to \fIpolyline\fR, edges are 
+drawn as polylines.
+If set to \fIortho\fR, edges are 
+drawn as orthogonal polylines.
+In all of these cases, the nodes may not overlap.
+If \fBsplines=\fIfalse\fR or \fBsplines=\fIline\fR, edges are 
+drawn as line segments.
+The default is \fItrue\fR for dot, and \fIfalse\fR for all other layouts.
+
+.PP
+\fB(neato\(hyspecific attributes)\fR
+.br
+\fBstart=\fIval\fR.  Requests random initial placement and seeds
+the random number generator.  If \fIval\fP is not an integer,
+the process ID or current time is used as the seed.
+.PP
+\fBepsilon=\fIn\fR.  Sets the cutoff for the solver.
+The default is 0.1.
+
+.PP
+\fB(twopi\(hyspecific attributes)\fR
+.br
+\fBroot=\fIctr\fR. This specifies the node to be used as the center of
+the layout. If not specified, \fItwopi\fP will randomly pick one of the
+nodes that are furthest from a leaf node, where a leaf node is a node
+of degree 1. If no leaf nodes exists, an arbitrary node is picked as center.
+.PP
+\fBranksep=\fIval\fR. Specifies the radial distance in inches between
+the sequence of rings. The default is 0.75.
+.PP
+\fBoverlap=\fImode\fR. This specifies what \fItwopi\fP should do if
+any nodes overlap. If mode is \fI"false"\fP, the program uses Voronoi
+diagrams to adjust the nodes to eliminate overlaps. If mode is \fI"scale"\fP,
+the layout is uniformly scaled up, preserving node sizes, until nodes no
+longer overlap. The latter technique removes overlaps while preserving
+symmetry and structure, while the former removes overlaps more compactly
+but destroys symmetries.
+If mode is \fI"true"\fP (the default), no repositioning is done.
+
+.PP
+\fB(circo\(hyspecific attributes)\fR
+.br
+\fBroot=\fInodename\fR. Specifies the name of a node occurring in the
+root block. If the graph is disconnected, the \fBroot\fP node attribute
+can be used to specify additional root blocks.
+.PP
+\fBmindist=\fIvalue\fR. Sets the minimum separation between all nodes. If not
+specified then \fIcirco\fP uses a default value of 1.0.
+
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBK=\fIval\fR. Sets the default ideal node separation
+in the layout.
+.PP
+\fBmaxiter=\fIval\fR. Sets the maximum number of iterations used to
+layout the graph.
+.PP
+\fBstart=\fIval\fR. Adjusts the random initial placement of nodes
+with no specified position.  If \fIval\fP is is an integer,
+it is used as the seed for the random number generator.
+If \fIval\fP is not an integer, a random system\(hygenerated integer,
+such as the process ID or current time, is used as the seed.
+.PP
+
+.SH "NODE ATTRIBUTES"
+.PP
+\fBheight=\fId\fR or \fBwidth=\fId\fR sets minimum height or width.
+Adding \fBfixedsize=true\fP forces these to be the actual size
+(text labels are ignored).
+.PP
+\fBshape=record polygon epsf \fIbuiltin_polygon\fR
+.br
+\fIbuiltin_polygon\fR is one of: \fBplaintext ellipse oval circle egg 
+triangle box diamond trapezium parallelogram house hexagon octagon
+note tab box3d component.\fR
+(Polygons are defined or modified by the following node attributes:
+\fBregular\fR, \fBperipheries\fR, \fBsides\fR, \fBorientation\fR,
+\fBdistortion\fR and \fBskew\fR.)  \fBepsf\fR uses the node's
+\fBshapefile\fR attribute as the path name of an external
+EPSF file to be automatically loaded for the node shape.
+.PP
+\fBlabel=\fItext\fR where \fItext\fP may include escaped newlines
+\\\|n, \\\|l, or \\\|r for center, left, and right justified lines.
+The string '\\N' value will be replaced by the node name.
+The string '\\G' value will be replaced by the graph name.
+Record labels may contain recursive box lists delimited by { | }.
+Port identifiers in labels are set off by angle brackets < >.
+In the graph file, use colon (such as, \fBnode0:port28\fR).
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBcolor=\fIcolorvalue\fR sets the outline color, and the default fill color
+if style=filled and \fBfillcolor\fR is not specified.
+.PP
+\fBfillcolor=\fIcolorvalue\fR sets the fill color
+when style=filled.  If not specified, the fillcolor when style=filled defaults
+to be the same as the outline color.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+A \fIcolorvalue\fP may be "\fIh,s,v\fB"\fR (hue, saturation, brightness)
+floating point numbers between 0 and 1, or an X11 color name such as
+\fBwhite black red green blue yellow magenta cyan\fR or \fBburlywood\fR,
+or a "\fI#rrggbb" (red, green, blue, 2 hex characters each) value.
+.PP
+\fBstyle=filled solid dashed dotted bold invis\fP or any Postscript code.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the node's active layers.
+The empty string means no layers (invisible).
+.PP
+The following attributes apply only to polygon shape nodes:
+.PP
+\fBregular=\fIn\fR if \fIn\fR is non\(hyzero then the polygon is made 
+regular, i.e. symmetric about the x and y axis, otherwise the
+polygon takes on the aspect ratio of the label. 
+\fIbuiltin_polygons\fR that are not already regular are made regular
+by this attribute.
+\fIbuiltin_polygons\fR that are already regular are not affected (i.e.
+they cannot be made asymmetric).
+.PP
+\fBperipheries=\fIn\fR sets the number of periphery lines drawn around
+the polygon.  This value supersedes the number of periphery lines
+of \fIbuiltin_polygons\fR.
+.PP
+\fBsides=\fIn\fR sets the number of sides to the polygon. \fIn\fR<3
+results in an ellipse.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBorientation=\fIf\fR sets the orientation of the first apex of the
+polygon counterclockwise from the vertical, in degrees.
+\fIf\fR may be a floating point number.
+The orientation of labels is not affected by this attribute.
+This attribute is added to the initial orientation of \fIbuiltin_polygons.\fR
+.PP
+\fBdistortion=\fIf\fR sets the amount of broadening of the top and
+narrowing of the bottom of the polygon (relative to its orientation). 
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP                                                            
+\fBskew=\fIf\fR sets the amount of right\(hydisplacement of the top and
+left\(hydisplacement of the bottom of the polygon (relative to its
+orientation).
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.
+The target string is used to determine which window of the browser is used
+for the URL.  Setting it to "_graphviz" will open a new window if it doesn't
+already exist, or reuse it if it does.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.  The tooltip string defaults to be the
+same as the label string, but this attribute permits nodes without
+labels to still have tooltips thus permitting denser graphs.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+
+.PP
+\fB(circo\(hyspecific attributes)\fR
+.br
+\fBroot=\fItrue/false\fR. This specifies that the block containing the given
+node be treated as the root of the spanning tree in the layout.
+
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBpin=\fIval\fR. If \fIval\fR is "true", the node will remain at
+its initial position.
+
+.SH "EDGE ATTRIBUTES"
+\fBminlen=\fIn\fR where \fIn\fP is an integer factor that applies
+to the edge length (ranks for normal edges, or minimum node separation
+for flat edges).
+.PP
+\fBweight=\fIn\fR where \fIn\fP is the integer cost of the edge.
+Values greater than 1 tend to shorten the edge.  Weight 0 flat
+edges are ignored for ordering nodes.
+.PP
+\fBlabel=\fItext\fR where \fItext\fR may include escaped newlines
+\\\|n, \\\|l, or \\\|r for centered, left, or right justified lines.
+If the substring '\\T' is found in a label it will be replaced by the tail_node name.
+If the substring '\\H' is found in a label it will be replaced by the head_node name.
+If the substring '\\E' value is found in a label it will be replaced by: tail_node_name\->head_node_name
+If the substring '\\G' is found in a label it will be replaced by the graph name.
+or by: tail_node_name\-\-head_node_name for undirected graphs.
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+\fBstyle=solid dashed dotted bold invis\fP
+.PP
+\fBcolor=\fIcolorvalue\fR sets the line color for edges.
+.PP
+\fBcolor=\fIcolorvaluelist\fR a ':' separated list of \fIcolorvalue\fR creates
+parallel edges, one edge for each color.
+.PP
+\fBdir=forward back both none\fP controls arrow direction.
+.PP
+\fBtailclip,headclip=false\fP disables endpoint shape clipping.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edges have a URL.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when edges have a URL.  The tooltip string defaults to be the
+same as the edge label string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBarrowhead,arrowtail=none, normal, inv, dot, odot, invdot, invodot,
+tee, empty, invempty, open, halfopen, diamond, odiamond, box, obox, crow\fP.
+.PP
+\fBarrowsize\fP (norm_length=10,norm_width=5,
+inv_length=6,inv_width=7,dot_radius=2) 
+.PP
+\fBheadlabel,taillabel=string\fP for port labels.
+\fBlabelfontcolor\fP,\fBlabelfontname\fP,\fBlabelfontsize\fP
+for head and tail labels.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadhref=\fI"url"\fR sets the url for the head port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadURL=\fI"url"\fR ("headURL" is a synonym for "headhref".)
+.PP
+\fBheadtarget=\fI"headtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge heads have a URL.
+The headtarget string is used to determine which window of the browser is used
+for the URL.  If the headtarget string is empty, the default,
+then headtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when head ports have a URL.  The tooltip string defaults to be the
+same as the headlabel string. 
+The substrings '\\T', '\\H', and '\\E' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailhref=\fI"url"\fR sets the url for the tail port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailURL=\fI"url"\fR ("tailURL" is a synonym for "tailhref".)
+.PP
+\fBtailtarget=\fI"tailtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge tails have a URL.
+The tailtarget string is used to determine which window of the browser is used
+for the URL.  If the tailtarget string is empty, the default,
+then tailtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when tail ports have a URL.  The tooltip string defaults to be the
+same as the taillabel string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBlabeldistance\fP and \fPport_label_distance\fP set distance; also
+\fBlabelangle\fP (in degrees CCW)
+.PP
+\fBdecorate\fP draws line from edge to label.
+.PP
+\fBsamehead,sametail\fP aim edges having the same value to the
+same port, using the average landing point.
+.PP
+\fBconstraint=false\fP causes an edge to be ignored for rank assignment.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the edge's active layers.
+The empty string means no layers (invisible).
+
+.PP
+\fB(neato\(hyspecific attributes)\fR
+.br
+\fBw=\fIf\fR sets the weight (spring constant) of an edge
+to the given floating point value.  The default is 1.0;
+greater values make the edge tend more toward its optimal length.
+.PP
+\fBlen=\fIf\fR sets the optimal length of an edge.
+The default is 1.0.
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBweight=\fIf\fR sets the weight of an edge
+to the given floating point value. The default is 1.0;
+greater values make the edge tend more toward its optimal length.
+.SH "COMMAND LINE OPTIONS"
+\fB\-G\fP sets a default graph attribute.
+.br
+\fB\-N\fP sets a default node attribute.
+.br
+\fB\-E\fP sets a default edge attribute.
+Example: \fB\-Gsize="7,8" \-Nshape=box \-Efontsize=8\fR
+.PP
+\fB\-l\fIfile\fR loads custom PostScript library files.
+Usually these define custom shapes or styles.
+If \fB\-l\fP is given by itself, the standard library is omitted.
+.PP
+\fB\-T\fIlang\fR sets the output language as described above.
+
+.PP
+\fB\-n\fR[\fB1\fR|\fB2\fR] (no\(hyop)
+If set, neato assumes nodes have already been positioned and all
+nodes have a pos attribute giving the positions.
+It then performs an optional adjustment to remove node\(hynode overlap,
+depending on the value of the overlap attribute,
+computes the edge layouts, depending on the value of the \fBsplines\fR attribute,
+and emits the graph in the appropriate format.
+If num is supplied, the following actions occur:
+.nf
+    num = 1
+.fi
+Equivalent to \-n.
+.nf
+    num > 1
+.fi
+Use node positions as specified,
+with no adjustment to remove node\(hynode overlaps,
+and use any edge layouts already specified by the pos attribute.
+neato computes an edge layout for any edge that does not have a pos attribute.
+As usual, edge layout is guided by the \fBsplines\fR attribute.
+.PP
+\fB\-K\fIlayout\fR override the default layout engine implied by the command name.
+.PP
+\fB\-O\fP automatically generate output filenames based on the input filename and the -T format.
+.PP
+\fB\-P\fP generate a graph of the currently available plugins.
+.PP
+\fB\-v\fP (verbose) prints various information useful for debugging.
+.PP
+\fB\-V\fP (version) prints version information and exits.
+.PP
+\fB\-?\fP prints the usage and exits.
+.SH "EXAMPLES"
+.nf
+digraph test123 {
+        a \-> b \-> c;
+        a \-> {x y};
+        b [shape=box];
+        c [label="hello\\\|nworld",color=blue,fontsize=24,
+             fontname="Palatino\-Italic",fontcolor=red,style=filled];
+        a \-> z [label="hi", weight=100];
+        x \-> z [label="multi\-line\\\|nlabel"];
+        edge [style=dashed,color=red];
+        b \-> x;
+        {rank=same; b x}
+}
+.fi
+.PP
+.nf
+graph test123 {
+        a \-\- b \-\- c;
+        a \-\- {x y};
+        x \-\- c [w=10.0];
+        x \-\- y [w=5.0,len=3];
+}
+.fi
+.SH "CAVEATS"
+Edge splines can overlap unintentionally.
+.PP
+Flat edge labels are slightly broken.
+Intercluster edge labels are totally broken.
+.PP
+Because unconstrained optimization is employed, node boxes can
+possibly overlap or touch unrelated edges.  All existing
+spring embedders seem to have this limitation.
+.PP
+Apparently reasonable attempts to pin nodes or adjust edge lengths
+and weights can cause instability.
+.SH AUTHORS
+Stephen C. North <north@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.br
+John C. Ellson <ellson@research.att.com>
+.PP
+The bitmap driver (PNG, GIF etc) is by Thomas Boutell, <http://www.boutell.com/gd>
+.PP
+The Truetype font renderer is from
+the Freetype Project (David Turner, Robert Wilhelm, and Werner Lemberg)
+(who can be contacted at freetype\-devel@lists.lrz\-muenchen.de).
+.SH "SEE ALSO"
+This man page contains only a small amount of the information related
+to the Graphviz layout programs. The most complete information can be
+found at http://www.graphviz.org/Documentation.php, especially in the
+on\(hyline reference pages. Most of these documents are also available in the
+\fIdoc\fP and \fIdoc/info\fP subtrees in the source and binary distributions.
+.PP
+dotty(1)
+.br
+tcldot(n)
+.br
+xcolors(1)
+.br
+libgraph(3)
+.PP
+E. R. Gansner, S. C. North,  K. P. Vo, "DAG \(hy A Program to Draw Directed Graphs", Software \(hy Practice and Experience 17(1), 1988, pp. 1047\(hy1062.
+.br
+E. R. Gansner, E. Koutsofios, S. C. North,  K. P. Vo, "A Technique for Drawing Directed Graphs," IEEE Trans. on Soft. Eng. 19(3), 1993, pp. 214\(hy230.
+.br
+S. North and E. Koutsofios, "Applications of graph visualization",
+Graphics Interface 94, pp. 234\(hy245.
+.br
+E. Koutsofios and S. C. North, "Drawing Graphs with dot," 
+Available on research.att.com in dist/drawdag/dotguide.ps.Z.
+.br
+S. C. North, "NEATO User's Manual".
+Available on research.att.com in dist/drawdag/neatodoc.ps.Z.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/gc.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,83 @@
+.TH GC 1 "21 March 2001"
+.SH NAME
+gc \- count graph components
+.SH SYNOPSIS
+.B gc
+[
+.B \-necCaDUrs?
+]
+[ 
+.I files
+]
+.SH DESCRIPTION
+.B gc
+is a graph analogue to 
+.B wc 
+in that it prints to standard output 
+the number of nodes, edges, connected components or clusters contained
+in the input files.
+It also prints a total count for
+all graphs if more than one graph is given.
+.SH OPTIONS
+The following options are supported:
+.TP
+.B \-n
+Count nodes.
+.TP
+.B \-e
+Count edges.
+.TP
+.B \-c
+Count connected components.
+.TP
+.B \-C
+Count clusters. By definition, a cluster is a graph or
+subgraph whose name begins with "cluster".
+.TP
+.B \-a
+Count all. Equivalent to
+.B \-encC
+.TP
+.B \-r
+Recursively analyze subgraphs.
+.TP
+.B \-s
+Print no output. Only exit value is important.
+.TP
+.B \-D
+Only analyze directed graphs.
+.TP
+.B \-U
+Only analyze undirected graphs.
+.TP
+.B \-?
+Print usage information.
+.LP
+By default, 
+.I gc
+returns the number of nodes and edges.
+.SH OPERANDS
+The following operand is supported:
+.TP 8
+.I files
+Names of files containing 1 or more graphs in dot format.
+If no
+.I files
+operand is specified,
+the standard input will be used.
+.SH "EXIT STATUS"
+The following exit values are returned:
+.TP 4
+.B 0
+Successful completion.
+.TP
+.B 1
+The
+.B \-U
+or
+.B \-E
+option was used, and a graph of the wrong type was encountered.
+.SH AUTHOR
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+wc(1), acyclic(1), gvpr(1), gvcolor(1), ccomps(1), sccmap(1), tred(1), libgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/gv2gxl.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,92 @@
+.TH GXL2GV,GV2GXL 1 "20 December 2002"
+.SH NAME
+gxl2gv,gv2gxl \- GXL-GV converters
+.SH SYNOPSIS
+.B gxl2gv
+[
+.B \-gd?
+]
+[
+.BI -o outfile
+]
+[ 
+.I files
+]
+.br
+.B gv2gxl
+[
+.B \-gd?
+]
+[
+.BI -o outfile
+]
+[ 
+.I files
+]
+.SH DESCRIPTION
+.B gxl2gv
+converts between graphs represented in GXL and in the
+GV language. Unless a conversion type is specified using
+a flag,
+.B gxl2gv
+will deduce the type of conversion from the suffix of
+the input file, a ".gv" (or a ".dot") suffix causing a conversion from GV
+to GXL, and a ".gxl" suffix causing a conversion from GXL to GV.
+If no suffix is available, e.g. when the input is from a pipe,
+and no flags are used then
+.B gxl2gv
+assumes the type of the input file from its executable name
+so that
+.B gxl2gv
+converts from GXL to GV, and
+.B gv2gxl
+converts from GV to GXL.
+.PP
+GXL supports a much richer graph model than GV. \fBgxl2gv\fP
+will attempt to map GXL constructs into the analogous GV construct
+when this is possible. If not, the GXL information is stored as
+an attribute. The intention is that applying \fBgxl2gv|gv2gxl\fP
+is semantically equivalent to the identity operator.
+.SH OPTIONS
+The following options are supported:
+.TP
+.B \-g
+The command name and input file extensions are ignored, the
+input is taken as a GV file and a GXL file is generated.
+.TP
+.B \-d
+The command name and input file extensions are ignored, the
+input is taken as a GXL file and a GV file is generated.
+.TP
+.B \-?
+Prints usage information and exits.
+.TP
+.BI \-o " outfile"
+If specified, the output will be written into the file
+\fIoutfile\fP. Otherwise, output is written to standard out.
+.SH OPERANDS
+The following operand is supported:
+.TP 8
+.I files
+Names of files containing 1 or more graphs in GXL or GV.
+If no
+.I files
+operand is specified,
+the standard input will be used.
+.SH RETURN CODES
+Both \fBgxl2gv\fP and \fBgv2gxl\fP return \fB0\fP
+if there were no problems during conversion;
+and non-zero if any error occurred.
+.SH "BUGS"
+\fBgxl2gv\fP will only convert in one direction even if given multiple files
+with varying suffixes.
+.PP
+The conversion can only handle one graph per GXL file.
+.PP
+There are some GXL constructs which \fBgxl2gv\fP cannot handle.
+.SH AUTHORS
+Krishnam Pericherla <kp@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+dot(1), libgraph(3), libagraph(3), neato(1), twopi(1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/gvcolor.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+.TH GVCOLOR 1 "21 March 2001"
+.SH NAME
+gvcolor \- flow colors through a ranked digraph
+.br
+( previously known as
+.B colorize
+)
+.SH SYNOPSIS
+.B gvcolor
+[ 
+.I files 
+]
+.SH "USAGE"
+.ft 5
+dot file.dot | gvcolor | dot \-T\fI<format>\fP
+.ft
+.SH DESCRIPTION
+.B gvcolor
+is a filter that sets node colors from initial seed values.
+Colors flow along edges from tail to head, and are averaged
+(as HSB vectors) at nodes.
+\fIThe graph must already have been processed by dot.\fP
+Appropriate choice of initial colors yields drawings in which node
+colors help to emphasize logical relationships between nodes, even
+when they are spread far apart in the layout.
+.PP
+Initial colors must be set externally, using the \fBcolor\fP
+attribute of a node.  It is often effective to
+assign colors to a few key source or sink nodes, manually setting
+their colors by editing the graph file.
+Color names are as in \fIdot(1)\fP: symbolic names or RGB triples.
+It is best to choose some easily\(hydistinguished but related colors;
+not necessarily spaced evenly around the color wheel.  For example,
+blue_green, green, and light_yellow looks better than red, green, blue.
+.PP
+Certain graph attributes control the \fIgvcolor\fP algorithm.
+\fBflow=back\fP reverses the flow of colors from heads to tails.
+\fBsaturation=.1,.9\fP (or any two numbers between 0 and 1)
+adjusts the color saturation linearly from least to greatest rank.
+If \fBDefcolor\fP is set, this color value is applied to any
+node not otherwise colored.
+.SH "EXIT STATUS"
+The following exit values are returned:
+.TP 4
+.B 0
+Successful completion.
+.TP
+.B 1
+If nodes of the graph do not possess a ``pos'' attribute.
+.SH BUGS
+It would be nice to make the program work without relying on
+an initial pass through \fBdot\fP.
+.SH AUTHORS
+Stephen C. North <north@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+gc(1), dot(1), gvpr(1), ccomps(1), sccmap(1), tred(1), libgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/gvgen.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,138 @@
+.TH GC 1 "27 March 2008"
+.SH NAME
+gvgen \- generate graphs
+.SH SYNOPSIS
+.B gvgen
+[
+.B \-d?
+]
+[
+.BI -c n
+]
+[
+.BI -C x,y
+]
+[
+.BI -g [\fBf\fP]x,y
+]
+[
+.BI -G [\fBf\fP]x,y
+]
+[
+.BI -h n
+]
+[
+.BI -k n
+]
+[
+.BI -b x,y
+]
+[
+.BI -p n
+]
+[
+.BI -s n
+]
+[
+.BI -S n
+]
+[
+.BI -t n
+]
+[
+.BI -T x,y
+]
+[
+.BI -w n
+]
+[
+.BI -o outfile
+]
+.SH DESCRIPTION
+.B gvgen
+generates a variety of simple, regularly-structured abstract
+graphs.
+.SH OPTIONS
+The following options are supported:
+.TP
+.BI \-c " n"
+Generate a cycle with \fIn\fP vertices and edges.
+.TP
+.BI \-C " x,y"
+Generate an \fIx\fP by \fIy\fP cylinder.
+This will have \fIx*y\fP vertices and 
+\fI2*x*y - y\fP edges.
+.TP
+.BI \-g " [\fBf\fP]x,y"
+Generate an \fIx\fP by \fIy\fP grid.
+If \fBf\fP is given, the grid is folded, with an edge
+attaching each pair of opposing corner vertices.
+This will have \fIx*y\fP vertices and 
+\fI2*x*y - y - x\fP edges if unfolded and
+\fI2*x*y - y - x + 2\fP edges if folded.
+.TP
+.BI \-G " [\fBf\fP]x,y"
+Generate an \fIx\fP by \fIy\fP partial grid.
+If \fBf\fP is given, the grid is folded, with an edge
+attaching each pair of opposing corner vertices.
+This will have \fIx*y\fP vertices.
+.TP
+.BI \-h " n"
+Generate a hypercube of degree \fIn\fP.
+This will have \fI2^n\fP vertices and \fIn*2^(n-1)\fP edges.
+.TP
+.BI \-k " n"
+Generate a complete graph on \fIn\fP vertices with 
+\fIn*(n-1)/2\fP edges.
+.TP
+.BI \-b " x,y"
+Generate a complete \fIx\fP by \fIy\fP bipartite graph.
+This will have \fIx+y\fP vertices and
+\fIx*y\fP edges.
+.TP
+.BI \-p " n"
+Generate a path on \fIn\fP vertices.
+This will have \fIn-1\fP edges.
+.TP
+.BI \-s " n"
+Generate a star on \fIn\fP vertices.
+This will have \fIn-1\fP edges.
+.TP
+.BI \-S " n"
+Generate a Sierpinski graph of order \fIn\fP.
+This will have \fI3*(3^(n-1) - 1)/2\fP vertices and
+\fI3^n\fP edges.
+.TP
+.BI \-t " n"
+Generate a binary tree of height \fIn\fP.
+This will have \fI2^n-1\fP vertices and
+\fI2^n-2\fP edges.
+.TP
+.BI \-T " x,y"
+Generate an \fIx\fP by \fIy\fP torus.
+This will have \fIx*y\fP vertices and
+\fI2*x*y\fP edges.
+.TP
+.BI \-w " n"
+Generate a path on \fIn\fP vertices.
+This will have \fIn-1\fP edges.
+.TP
+.BI \-o " outfile"
+If specified, the generated graph is written into the file
+.I outfile.
+Otherwise, the graph is written to standard out.
+.TP
+.B \-d
+Make the generated graph directed.
+.TP
+.B \-?
+Print usage information.
+.SH "EXIT STATUS"
+.B gvgen
+exits with 0 on successful completion, 
+and exits with 1 if given an ill-formed or incorrect flag,
+or if the specified output file could not be opened.
+.SH AUTHOR
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+gc(1), acyclic(1), gvpr(1), gvcolor(1), ccomps(1), sccmap(1), tred(1), libgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/gvpack.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,101 @@
+.TH GVPACK 1 "8 April 2003"
+.SH NAME
+gvpack \- merge and pack disjoint graphs
+.SH SYNOPSIS
+.B gvpack
+[
+.B \-nguv?
+]
+[
+.BI \-m margin
+]
+[
+.BI \-o outfile
+]
+[
+.BI \-G name\fB=\fPvalue
+]
+[ 
+.I files
+]
+.SH DESCRIPTION
+.B gvpack
+reads in a stream of graphs, combines the graphs into a single
+layout, and produces a single graph serving as the union of the
+input graphs. The input graphs must be in dot format, and must have
+all necessary layout information. Acceptable input is produced
+by applying a Graphviz layout program, such as \fBdot\fP or \fBneato\fP, 
+with no \fB\-T\fP flag.
+.P
+By default, the packing is done at the cluster level. Thus, parts of
+one graph will not intrude into any top\(hylevel clusters or overlap
+any nodes or edges of another.
+.P
+The output of \fBgvpack\fP can be used to produce concrete output
+by applying \fBneato \-s \-n2\fP with the desired \fB\-T\fP flag.
+.SH OPTIONS
+The following options are supported:
+.TP
+.B \-g
+Combines the graphs at the graph level. This uses more space, but prevents
+parts of one graph from occurring between parts of another. 
+.TP
+.BI \-G "name\fB=\fPvalue"
+Specifies attributes to be added to the resulting union graph. For
+example, this can be used to specify a graph label.
+.TP
+.BI \-m "margin"
+Packs the graphs allowing a margin of \fIoutput\fP points around
+the parts.
+.TP
+.B \-n
+Combines the graphs at the node level. Clusters are ignored in the packing.
+.TP
+.BI \-o "output"
+Prints output to the file \fIoutput\fP. If not given, \fBgvpack\fP
+uses stdout.
+.TP
+.B \-u
+Don't pack the graphs. Just combine them into a single graph.
+.TP
+.B \-v
+Verbose mode.
+.TP
+.B \-?
+Prints usage information and exit.
+.SH OPERANDS
+The following operand is supported:
+.TP 8
+.I files
+Names of files containing 1 or more graphs in dot format.
+If no
+.I files
+operand is specified,
+the standard input will be used.
+.SH RETURN CODES
+.B gvpack
+returns
+.B 0
+if there were no problems, and non\(hyzero otherwise.
+.SH EXAMPLES
+.EX
+ccomps \-x abc.dot | dot | gvpack | neato \-s \-n2 \-Tps
+.EE
+This pipeline decomposes the graph in \fIabc.dot\fP into its
+connected components, lays out each using \fBdot\fP, packs them all together
+again, and produces the final drawing in PostScript. Of course, 
+there is nothing to prevent one from using different layouts for
+each component.
+.SH "BUGS"
+All the input graphs must be directed or undirected.
+.P
+An input graph should not have a label, since this will be used in its
+layout. Since \fBgvpack\fP ignores root graph labels, resulting layout
+may contain some extra space.
+.P
+\fBgvpack\fP unsets the bounding box attribute of all non\(hycluster
+subgraphs.
+.SH AUTHORS
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+gvpr(1), dot(1), neato(1), twopi(1), ccomps(1), libpack(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/gvpr.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1041 @@
+.de TQ
+.  br
+.  ns
+.  TP \\$1
+..
+.TH GVPR 1 "24 April 2008"
+.SH NAME
+gvpr \- graph pattern scanning and processing language
+.br
+( previously known as
+.B gpr
+)
+.SH SYNOPSIS
+.B gvpr
+[\fB\-icqV?\fP]
+[
+.BI \-o
+.I outfile
+]
+[
+.BI \-a
+.I args
+]
+[
+.I 'prog'
+|
+.BI \-f
+.I progfile
+]
+[ 
+.I files 
+]
+.SH DESCRIPTION
+.B gvpr
+is a graph stream editor inspired by \fBawk\fP.
+It copies input graphs to its
+output, possibly transforming their structure and attributes,
+creating new graphs, or printing arbitrary information.
+The graph model is that provided by
+.IR libcgraph (3).
+In particular, \fBgvpr\fP reads and writes graphs using the
+dot language.
+.PP
+Basically,
+.B gvpr
+traverses each input graph, denoted by \fB$G\fP, visiting each node and edge,
+matching it with the predicate\(hyaction rules supplied in the input program.
+The rules are evaluated in order.
+For each predicate evaluating to true, the corresponding 
+action is performed. 
+During the traversal, the current node or edge being visited
+is denoted by \fB$\fP.
+.PP
+For each input graph, there is a target subgraph, denoted by
+\fB$T\fP, initially empty and used to accumulate
+chosen entities, and an output graph, \fB$O\fP, used for final processing
+and then written to output. 
+By default, the output graph is the target graph.
+The output graph can be set in the program or, in a limited sense,
+on the command line.
+.SH OPTIONS
+The following options are supported:
+.TP
+.BI \-a " args"
+The string \fIargs\fP is split into whitespace\(hyseparated tokens, 
+with the individual tokens
+available as strings in the \fBgvpr\fP program 
+as \fBARGV[\fI0\fP],...,ARGV[ARGC\-1]\fR.
+Whitespace characters within single or double quoted substrings, or
+preceded by a backslash, are ignored as separators. 
+In general, a backslash character turns off any special meaning of the
+following character.
+Note that the tokens derived from multiple \fB\-a\fP flags are concatenated.
+.TP
+.B \-c
+Use the source graph as the output graph.
+.TP
+.B \-i
+Derive the node\(hyinduced subgraph extension of the output graph in the context 
+of its root graph.
+.TP
+.BI \-o " outfile"
+Causes the output stream to be written to the specified file; by default,
+output is written to \fBstdout\fP.
+.TP
+.BI \-f " progfile"
+Use the contents of the specified file as the program to execute
+on the input. If \fIprogfile\fP contains a slash character, the name is taken
+as the pathname of the file. Otherwise, \fBgvpr\fP will use the
+directories specified in the environment variable \fBGPRPATH\fP to look
+for the file. If 
+.B \-f
+is not given,
+.B gvpr
+will use the first non\(hyoption argument as the program.
+.TP
+.B \-q
+Turns off warning messages.
+.TP
+.B \-V
+Causes the program to print version information and exit.
+.TP
+.B \-?
+Causes the program to print usage information and exit.
+.SH OPERANDS
+The following operand is supported:
+.TP 8
+.I files
+Names of files containing 1 or more graphs in the dot language.
+If no
+.B \-f
+option is given, the first name is removed from the list and used 
+as the input program. If the list of files is empty, \fBstdin\fP will be used.
+.SH PROGRAMS
+A
+.B gvpr
+program consists of a list of predicate\(hyaction clauses, having one
+of the forms:
+.IP
+.BI "BEGIN { "  action " }"
+.IP
+.BI "BEG_G { "  action " }"
+.IP
+.BI "N [ " predicate " ] { " action " }
+.IP
+.BI "E [ " predicate " ] { " action " }
+.IP
+.BI "END_G { "  action " }"
+.IP
+.BI "END { "  action " }"
+.PP
+A program can contain at most one of each of the \fBBEGIN\fP, \fBBEG_G\fP,
+\fBEND_G\fP and \fBEND\fP clauses. 
+There can be any number of \fBN\fP and \fBE\fP statements,
+the first applied to nodes, the second to edges.
+The top\(hylevel semantics of a \fBgvpr\fP program are:
+.PP
+.ta \w'\f(CWdelete array[expression]'u
+.RS
+.nf
+Evaluate the \fBBEGIN\fP clause, if any.
+For each input graph \fIG\fP {
+    Set \fIG\fP as the current graph and current object.
+    Evaluate the \fBBEG_G\fP clause, if any.
+    For each node and edge in \fIG\fP {
+      Set the node or edge as the current object.
+      Evaluate the \fBN\fP or \fBE\fP clauses, as appropriate.
+    } 
+    Set \fIG\fP as the current object.
+    Evaluate the \fBEND_G\fP clause, if any.
+} 
+Evaluate the \fBEND\fP clause, if any.
+.fi
+.RE
+.DT
+.PP
+The actions of the \fBBEGIN\fP, \fBBEG_G\fP, \fBEND_G\fP and \fBEND\fP clauses
+are performed when the clauses are evaluated.
+For \fBN\fP or \fBE\fP clauses,
+either the predicate or action may be omitted. 
+If there is no predicate with an action, the action is 
+performed on every node or edge, as appropriate.
+If there is no action and the predicate evaluates to true,
+the associated node or edge is added to the target graph. 
+.PP
+Predicates and actions are sequences of statements in the C dialect 
+supported by the
+.IR libexpr (3)
+library.
+The only difference between predicates and actions is that the former
+must have a type that may interpreted as either true or false.
+Here the usual C convention is followed, in which a non\(hyzero value is
+considered true. This would include non\(hyempty strings and non\(hyempty
+references to nodes, edges, etc. However, if a string can be 
+converted to an integer, this value is used.
+.PP
+In addition to the usual C base types
+(\fBvoid\fP, \fBint\fP, \fBchar\fP, \fBfloat\fP, \fBlong\fP, 
+\fBunsigned\fP and \fBdouble\fP), 
+\fBgvpr\fP \fRprovides \fBstring\fP as a synonym for \fBchar*\fP, and 
+the graph\(hybased types \fBnode_t\fP,
+\fBedge_t\fP, \fBgraph_t\fP and \fBobj_t\fP.
+The \fBobj_t\fP type can be viewed as a supertype of the other 3 concrete types;
+the correct base type is maintained dynamically.
+Besides these base types, the only other supported type expressions
+are (associative) arrays. 
+.PP
+Constants follow C syntax, but strings may be quoted with either
+\fB"..."\fP or \fB'...'\fP. In certain contexts, string values are
+interpreted as patterns for the purpose of regular expression matching.
+Patterns use
+.IR ksh (1)
+file match pattern syntax.
+\fBgvpr\fP accepts C++ comments as well as cpp\(hytype comments.
+For the latter, if a line begins with a '#' character, the rest of
+the line is ignored.
+.PP
+A statement can be a declaration of a function, a variable
+or an array, or an executable statement. For declarations, there
+is a single scope. Array declarations have the form: 
+.PP
+.ta \w'\f(CWdelete array[expression]'u
+.RS
+.nf
+\fI type array \fB[\fP type0 \fB]\fR
+.fi
+.RE
+.DT
+.PP
+where \fI type0 \fP is optional. If it is supplied, the parser will 
+enforce that all array subscripts have the specified type. If it is
+not supplied, objects of all types can be used as subscripts.
+As in C, variables and arrays must
+be declared. In particular, an undeclared variable will be interpreted
+as the name of an attribute of a node, edge or graph, depending on the
+context.
+.PP
+Executable statements can be one of the following:
+.ta \w'\f(CWdelete array[expression]'u
+.RS
+.nf
+\fB{\fR [\fI statement ... \fR] \fB}\fR
+\fIexpression\fP	\fR// commonly\fP\fI var \fB=\fP expression\fR
+\fBif(\fI expression \fP)\fI statement \fR[ \fBelse\fI statement \fR]
+\fBfor(\fI expression \fP;\fI expression \fP;\fI expression \fP)\fI statement\fP
+\fBfor(\fI array \fP[\fI var \fP])\fI statement\fP
+\fBwhile(\fI expression \fP)\fI statement\fP
+\fBswitch(\fI expression \fP)\fI case statements\fP
+\fBbreak [\fI expression \fP]
+\fBcontinue [\fI expression \fP]
+\fBreturn [\fI expression \fP]\fR
+.fi
+.RE
+.ST
+Items in brackets are optional.
+.PP
+In the second form of the \fBfor\fP statement, the variable \fIvar\fP
+is set to each value used as an index in the specified array and then
+the associated \fIstatement\fP is evaluated. Function definitions can
+only appear in the \fBBEGIN\fP clause.
+.PP
+Expressions include the usual C expressions. 
+String comparisons using \fB==\fP and \fB!=\fP
+treat the right hand operand as a pattern.
+\fBgvpr\fP will attempt to use an expression as a string or numeric value 
+as appropriate.
+.PP
+Expressions of graphical type (i.e., \fBgraph_t, node_t,
+edge_t, obj_t\fP) may be followed by a field reference in the
+form of \fB.\fP\fIname\fP. The resulting value is the value
+of the attribute named \fIname\fP of the given object.
+In addition, in certain contexts an undeclared, unmodified
+identifier is taken to be an
+attribute name. Specifically, such identifiers denote attributes
+of the current node or edge, respectively, in \fBN\fP
+and \fBE\fP clauses, and the current graph in \fBBEG_G\fP and \fBEND_G\fP
+clauses.
+.PP
+As usual in the 
+.IR libcgraph (3)
+model, attributes are string\(hyvalued.
+In addition,
+.B gvpr
+supports certain pseudo\(hyattributes of graph objects, not necessarily
+string\(hyvalued. These reflect intrinsic properties of the graph objects
+and cannot be set by the user.
+.TP
+\fBhead\fR : \fBnode_t\fR
+the head of an edge.
+.TP
+\fBtail\fR : \fBnode_t\fR
+the tail of an edge.
+.TP
+\fBname\fR : \fBstring\fR
+the name of an edge, node or graph. The name of an edge has the
+form "\fI<tail\(hyname><edge\(hyop><head\(hyname>\fB[\fI<key>\fB]\fR",
+where \fI<edge\(hyop>\fP is "\fB\->\fP" or "\fB\-\-\fP" depending on
+whether the graph is directed or not. The bracket part \fB[\fI<key>\fB]\fR
+only appears if the edge has a non\(hytrivial key.
+.TP
+\fBindegree\fR : \fBint\fR
+the indegree of a node.
+.TP
+\fBoutdegree\fR : \fBint\fR
+the outdegree of a node.
+.TP
+\fBdegree\fR : \fBint\fR
+the degree of a node.
+.TP
+\fBroot\fR : \fBgraph_t\fR
+the root graph of an object. The root of a root graph
+is itself.
+.TP
+\fBparent\fR : \fBgraph_t\fR
+the parent graph of a subgraph. The parent of a root graph
+is \fBNULL\fP
+.TP
+\fBn_edges\fR : \fBint\fR
+the number of edges in the graph
+.TP
+\fBn_nodes\fR : \fBint\fR
+the number of nodes in the graph
+.TP
+\fBdirected\fR : \fBint\fR
+true (non\(hyzero) if the graph is directed
+.TP
+\fBstrict\fR : \fBint\fR
+true (non\(hyzero) if the graph is strict
+.SH "BUILT\(hyIN FUNCTIONS"
+.PP
+The following functions are built into \fBgvpr\fP. Those functions
+returning references to graph objects return \fBNULL\fP in case of failure.
+.SS "Graphs and subgraph"
+.TP
+\fBgraph\fP(\fIs\fP : \fBstring\fP, \fIt\fP : \fBstring\fP) : \fBgraph_t\fP
+creates a graph whose name is \fIs\fP and whose type is
+specified by the string \fIt\fP. Ignoring case, the characters
+\fBU, D, S, N\fR have the interpretation undirected, directed,
+strict, and non\(hystrict, respectively. If \fIt\fP is empty,
+a directed, non\(hystrict graph is generated.
+.TP
+\fBsubg\fP(\fIg\fP : \fBgraph_t\fP, \fIs\fP : \fBstring\fP) : \fBgraph_t\fP
+creates a subgraph in graph \fIg\fP with name \fIs\fP. If the subgraph
+already exists, it is returned.
+.TP
+\fBisSubg\fP(\fIg\fP : \fBgraph_t\fP, \fIs\fP : \fBstring\fP) : \fBgraph_t\fP
+returns the subgraph in graph \fIg\fP with name \fIs\fP, if it exists,
+or \fBNULL\fP otherwise.
+.TP
+\fBfstsubg\fP(\fIg\fP : \fBgraph_t\fP) : \fBgraph_t\fP
+returns the first subgraph in graph \fIg\fP, or \fBNULL\fP if none exists.
+.TP
+\fBnxtsubg\fP(\fIsg\fP : \fBgraph_t\fP) : \fBgraph_t\fP
+returns the next subgraph after \fIsg\fP, or \fBNULL\fP.
+.TP
+\fBisDirect\fP(\fIg\fP : \fBgraph_t\fP) : \fBint\fP
+returns true if and only if \fIg\fP is directed.
+.TP
+\fBisStrict\fP(\fIg\fP : \fBgraph_t\fP) : \fBint\fP
+returns true if and only if \fIg\fP is strict.
+.TP
+\fBnNodes\fP(\fIg\fP : \fBgraph_t\fP) : \fBint\fP
+returns the number of nodes in \fIg\fP.
+.TP
+\fBnEdges\fP(\fIg\fP : \fBgraph_t\fP) : \fBint\fP
+returns the number of edges in \fIg\fP.
+.SS "Nodes"
+.TP
+\fBnode\fP(\fIsg\fP : \fBgraph_t\fP, \fIs\fP : \fBstring\fP) : \fBnode_t\fP
+creates a node in graph \fIg\fP of name \fIs\fP. If such a node
+already exists, it is returned.
+.TP
+\fBsubnode\fP(\fIsg\fP : \fBgraph_t\fP, \fIn\fP : \fBnode_t\fP) : \fBnode_t\fP
+inserts the node \fIn\fP into the subgraph \fIg\fP. Returns the node.
+.TP
+\fBfstnode\fP(\fIg\fP : \fBgraph_t\fP) : \fBnode_t\fP
+returns the first node in graph \fIg\fP, or \fBNULL\fP if none exists.
+.TP
+\fBnxtnode\fP(\fIn\fP : \fBnode_t\fP) : \fBnode_t\fP
+returns the next node after \fIn\fP in the root graph, or \fBNULL\fP.
+.TP
+\fBnxtnode_sg\fP(\fIsg\fP : \fBgraph_t\fP, \fIn\fP : \fBnode_t\fP) : \fBnode_t\fP
+returns the next node after \fIn\fP in \fIsg\fP, or \fBNULL\fP.
+.TP
+\fBisNode\fP(\fIsg\fP : \fBgraph_t\fP, \fIs\fP : \fBstring\fP) : \fBnode_t\fP
+looks for a node in (sub)graph \fIsg\fP of name \fIs\fP. If such a node
+exists, it is returned. Otherwise, \fBNULL\fP is returned.
+.TP
+\fBisSubnode\fP(\fIsg\fP : \fBgraph_t\fP, \fIn\fP : \fBnode_t\fP) : \fBint\fP
+returns non-zero if node \fIn\fP is in (sub)graph \fIsg\fP, or zero
+otherwise.
+.TP
+\fBindegreeOf\fP(\fIsg\fP : \fBgraph_t\fP, \fIn\fP : \fBnode_t\fP) : \fBint\fP
+returns the indegree of node \fIn\fP in (sub)graph \fIsg\fP.
+.TP
+\fBoutdegreeOf\fP(\fIsg\fP : \fBgraph_t\fP, \fIn\fP : \fBnode_t\fP) : \fBint\fP
+returns the outdegree of node \fIn\fP in (sub)graph \fIsg\fP.
+.TP
+\fBdegreeOf\fP(\fIsg\fP : \fBgraph_t\fP, \fIn\fP : \fBnode_t\fP) : \fBint\fP
+returns the degree of node \fIn\fP in (sub)graph \fIsg\fP.
+.SS "Edges"
+.TP
+\fBedge\fP(\fIt\fP : \fBnode_t\fP, \fIh\fP : \fBnode_t\fP, \fIs\fP : \fBstring\fP) : \fBedge_t\fP
+creates an edge with tail node \fIt\fP, head node \fIh\fP and
+name \fIs\fP in the root graph. If the graph is undirected, the 
+distinction between head and tail nodes is unimportant.
+If such an edge already exists, it is returned.
+.TP
+\fBedge_sg\fP(\fIsg\fP : \fBgraph_t\fP, \fIt\fP : \fBnode_t\fP, \fIh\fP : \fBnode_t\fP, \fIs\fP : \fBstring\fP) : \fBedge_t\fP
+creates an edge with tail node \fIt\fP, head node \fIh\fP and name \fIs\fP 
+in (sub)graph \fIsg\fP (and all parent graphs). If the graph is undirected, the distinction between
+head and tail nodes is unimportant.
+If such an edge already exists, it is returned.
+.TP
+\fBsubedge\fP(\fIg\fP : \fBgraph_t\fP, \fIe\fP : \fBedge_t\fP) : \fBedge_t\fP
+inserts the edge \fIe\fP into the subgraph \fIg\fP. Returns the edge.
+.TP
+\fBisEdge\fP(\fIt\fP : \fBnode_t\fP, \fIh\fP : \fBnode_t\fP, \fIs\fP : \fBstring\fP) : \fBedge_t\fP
+looks for an edge with tail node \fIt\fP, head node \fIh\fP and
+name \fIs\fP. If the graph is undirected, the distinction between
+head and tail nodes is unimportant.
+If such an edge exists, it is returned. Otherwise, \fBNULL\fP is returned.
+.TP
+\fBisEdge_sg\fP(\fIsg\fP : \fBgraph_t\fP, \fIt\fP : \fBnode_t\fP, \fIh\fP : \fBnode_t\fP, \fIs\fP : \fBstring\fP) : \fBedge_t\fP
+looks for an edge with tail node \fIt\fP, head node \fIh\fP and
+name \fIs\fP in (sub)graph \fIsg\fP. If the graph is undirected, the distinction between
+head and tail nodes is unimportant.
+If such an edge exists, it is returned. Otherwise, \fBNULL\fP is returned.
+.TP
+\fBisSubedge\fP(\fIg\fP : \fBgraph_t\fP, \fIe\fP : \fBedge_t\fP) : \fBint\fP
+returns non-zero if edge \fIe\fP is in (sub)graph \fIsg\fP, or zero
+otherwise.
+.TP
+\fBfstout\fP(\fIn\fP : \fBnode_t\fP) : \fBedge_t\fP
+returns the first outedge of node \fIn\fP in the root graph.
+.TP
+\fBfstout_sg\fP(\fIsg\fP : \fBgraph_t\fP, \fIn\fP : \fBnode_t\fP) : \fBedge_t\fP
+returns the first outedge of node \fIn\fP in (sub)graph \fIsg\fP.
+.TP
+\fBnxtout\fP(\fIe\fP : \fBedge_t\fP) : \fBedge_t\fP
+returns the next outedge after \fIe\fP in the root graph.
+.TP
+\fBnxtout_sg\fP(\fIsg\fP : \fBgraph_t\fP, \fIe\fP : \fBedge_t\fP) : \fBedge_t\fP
+returns the next outedge after \fIe\fP in graph \fIsg\fP.
+.TP
+\fBfstin\fP(\fIn\fP : \fBnode_t\fP) : \fBedge_t\fP
+returns the first inedge of node \fIn\fP in the root graph.
+.TP
+\fBfstin_sg\fP(\fIsg\fP : \fBgraph_t\fP, \fIn\fP : \fBnode_t\fP) : \fBedge_t\fP
+returns the first inedge of node \fIn\fP in graph \fIsg\fP.
+.TP
+\fBnxtin\fP(\fIe\fP : \fBedge_t\fP) : \fBedge_t\fP
+returns the next inedge after \fIe\fP in the root graph.
+.TP
+\fBnxtin_sg\fP(\fIsg\fP : \fBgraph_t\fP, \fIe\fP : \fBedge_t\fP) : \fBedge_t\fP
+returns the next inedge after \fIe\fP in graph \fIsg\fP.
+.TP
+\fBfstedge\fP(\fIn\fP : \fBnode_t\fP) : \fBedge_t\fP
+returns the first edge of node \fIn\fP in the root graph.
+.TP
+\fBfstedge_sg\fP(\fIsg\fP : \fBgraph_t\fP, \fIn\fP : \fBnode_t\fP) : \fBedge_t\fP
+returns the first edge of node \fIn\fP in graph \fIsg\fP.
+.TP
+\fBnxtedge\fP(\fIe\fP : \fBedge_t\fP, \fBnode_t\fP) : \fBedge_t\fP
+returns the next edge after \fIe\fP in the root graph.
+.TP
+\fBnxtedge_sg\fP(\fIsg\fP : \fBgraph_t\fP, \fIe\fP : \fBedge_t\fP, \fBnode_t\fP) : \fBedge_t\fP
+returns the next edge after \fIe\fP in the graph \fIsg\fP.
+.SS "Graph I/O"
+.TP
+\fBwrite\fP(\fIg\fP : \fBgraph_t\fP) : \fBvoid\fP
+prints \fIg\fP in dot format onto the output stream.
+.TP
+\fBwriteG\fP(\fIg\fP : \fBgraph_t\fP, \fIfname\fP : \fBstring\fP) : \fBvoid\fP
+prints \fIg\fP in dot format into the file \fIfname\fP.
+.TP
+\fBfwriteG\fP(\fIg\fP : \fBgraph_t\fP, \fIfd\fP : \fBint\fP) : \fBvoid\fP
+prints \fIg\fP in dot format onto the open stream denoted
+by the integer \fIfd\fP.
+.TP
+\fBreadG\fP(\fIfname\fP : \fBstring\fP) : \fBgraph_t\fP
+returns a graph read from the file \fIfname\fP. The graph should be
+in dot format. If no graph can be read, \fBNULL\fP is returned.
+.TP
+\fBfreadG\fP(\fIfd\fP : \fBint\fP) : \fBgraph_t\fP
+returns the next graph read from the open stream \fIfd\fP.
+Returns \fBNULL\fP at end of file.
+.SS "Graph miscellany"
+.TP
+\fBdelete\fP(\fIg\fP : \fBgraph_t\fP, \fIx\fP : \fBobj_t\fP) : \fBvoid\fP
+deletes object \fIx\fP from graph \fIg\fP.
+If \fIg\fP is \fBNULL\fP, the function uses the root graph of \fIx\fP.
+If \fIx\fP is a graph or subgraph, it is closed unless \fIx\fP is locked.
+.TP
+\fBisIn\fP(\fIg\fP : \fBgraph_t\fP, \fIx\fP : \fBobj_t\fP) : \fBint\fP
+returns true if \fIx\fP is in subgraph \fIg\fP.
+.TP
+\fBclone\fP(\fIg\fP : \fBgraph_t\fP, \fIx\fP : \fBobj_t\fP) : \fBobj_t\fP
+creates a clone of object \fIx\fP in graph \fIg\fP.
+In particular, the new object has the same name/value attributes
+and structure as the original object.
+If an object with the same key as \fIx\fP already exists, its attributes
+are overlaid by those of \fIx\fP and the object is returned.
+If an edge is cloned, both endpoints are implicitly cloned.
+If a graph is cloned, all nodes, edges and subgraphs are implicitly
+cloned.
+If \fIx\fP is a graph, \fIg\fP may be \fBNULL\fP, in which case the cloned
+object will be a new root graph.
+.TP
+\fBcopy\fP(\fIg\fP : \fBgraph_t\fP, \fIx\fP : \fBobj_t\fP) : \fBobj_t\fP
+creates a copy of object \fIx\fP in graph \fIg\fP,
+where the new object has the same name/value attributes
+as the original object.
+If an object with the same key as \fIx\fP already exists, its attributes
+are overlaid by those of \fIx\fP and the object is returned.
+Note that this is a shallow copy. If \fIx\fP is a graph, none of its nodes, 
+edges or subgraphs are copied into the new graph. If \fIx\fP is an edge,
+the endpoints are created if necessary, but they are not cloned.
+If \fIx\fP is a graph, \fIg\fP may be \fBNULL\fP, in which case the cloned
+object will be a new root graph.
+.TP
+\fBcopyA\fP(\fIsrc\fP : \fBobj_t\fP, \fItgt\fP : \fBobj_t\fP) : \fBint\fP
+copies the attributes of object \fIsrc\fP to object \fItgt\fP, overwriting
+any attribute values \fItgt\fP may initially have.
+.TP
+\fBinduce\fP(\fIg\fP : \fBgraph_t\fP) : \fBvoid\fP
+extends \fIg\fP to its node\(hyinduced subgraph extension in its root graph.
+.TP
+\fBhasAttr\fP(\fIsrc\fP : \fBobj_t\fP, \fIname\fP : \fBstring\fP) : \fBint\fP
+returns non-zero if object \fIsrc\fP has an attribute whose name is
+\fIname\fP. It returns 0 otherwise.
+.TP
+\fBisAttr\fP(\fIg\fP : \fBgraph_t\fP, \fIkind\fP : \fBstring\fP, \fIname\fP : \fBstring\fP) : \fBint\fP
+returns non-zero if an attribute \fIname\fP has been defined in \fIg\fP
+for objects of the given \fIkind\fP. For nodes, edges, and graphs, \fIkind\fP
+should be "N", "E", and "G", respectively.
+It returns 0 otherwise.
+.TP
+\fBaget\fP(\fIsrc\fP : \fBobj_t\fP, \fIname\fP : \fBstring\fP) : \fBstring\fP
+returns the value of attribute \fIname\fP in object \fIsrc\fP. This is
+useful for those cases when \fIname\fP conflicts with one of the keywords
+such as "head" or "root".
+If the attribute has not been declared in the graph, the function will
+initialize it with a default value of "". To avoid this, one should use
+the \fBhasAttr\fP or \fBisAttr\fP function to check that the attribute exists.
+.TP
+\fBaset\fP(\fIsrc\fP : \fBobj_t\fP, \fIname\fP : \fBstring\fP, \fIvalue\fP : \fBstring\fP) : \fBint\fP
+sets the value of attribute \fIname\fP in object \fIsrc\fP to \fIvalue\fP.
+Returns 0 on success, non\(hyzero on failure. See \fBaget\fP above.
+.TP
+\fBgetDflt\fP(\fIg\fP : \fBgraph_t\fP, \fIkind\fP : \fBstring\fP, \fIname\fP : \fBstring\fP) : \fBstring\fP
+returns the default value of attribute \fIname\fP in objects in \fIg\fP of
+the given \fIkind\fP. For nodes, edges, and graphs, \fIkind\fP
+should be "N", "E", and "G", respectively.
+If the attribute has not been declared in the graph, the function will
+initialize it with a default value of "". To avoid this, one should use
+the \fBisAttr\fP function to check that the attribute exists.
+.TP
+\fBsetDflt\fP(\fIg\fP : \fBgraph_t\fP, \fIkind\fP : \fBstring\fP, \fIname\fP : \fBstring\fP, \fIvalue\fP : \fBstring\fP) : \fBint\fP
+sets the default value of attribute \fIname\fP to \fIvalue\fP in 
+objects in \fIg\fP of
+the given \fIkind\fP. For nodes, edges, and graphs, \fIkind\fP
+should be "N", "E", and "G", respectively.
+Returns 0 on success, non\(hyzero on failure. See \fBgetDflt\fP above.
+.TP
+\fBfstAttr\fP(\fIg\fP : \fBgraph_t\fP, \fIkind\fP : \fBstring\fP) : \fBstring\fP
+returns the name of the first attribute of objects in \fIg\fP of
+the given \fIkind\fP. For nodes, edges, and graphs, \fIkind\fP
+should be "N", "E", and "G", respectively.
+If there are no attributes, the string "" is returned.
+.TP
+\fBnxtAttr\fP(\fIg\fP : \fBgraph_t\fP, \fIkind\fP : \fBstring\fP, \fIname\fP : \fBstring\fP) : \fBstring\fP
+returns the name of the next attribute of objects in \fIg\fP of
+the given \fIkind\fP after the attribute \fIname\fP. 
+The argument \fIname\fP must be the name of an existing attribute; it will
+typically be the return value of an previous call to \fBfstAttr\fP or
+\fBnxtAttr\fP.
+For nodes, edges, and graphs, \fIkind\fP
+should be "N", "E", and "G", respectively.
+If there are no attributes left, the string "" is returned.
+.TP
+\fBcompOf\fP(\fIg\fP : \fBgraph_t\fP, \fIn\fP : \fBnode_t\fP) : \fBgraph_t\fP
+returns the connected component of the graph \fIg\fP containing node \fIn\fP,
+as a subgraph of \fIg\fP. The subgraph only contains the nodes. One can
+use \fIinduce\fP to add the edges. The function fails and returns \fBNULL\fP
+if \fIn\fP is not in \fIg\fP. Connectivity is based on the underlying
+undirected graph of \fIg\fP.
+.TP
+\fBkindOf\fP(\fIobj\fP : \fBobj_t\fP) : \fBstring\fP
+returns an indication of what kind of graph object is the argument.
+For nodes, edges, and graphs, it returns
+should be "N", "E", and "G", respectively.
+.TP
+\fBlock\fP(\fIg\fP : \fBgraph_t\fP, \fIv\fP : \fBint\fP) : \fBint\fP
+implements graph locking on root graphs. If the integer \fIv\fP is positive, the
+graph is set so that future calls to \fBdelete\fP have no immediate effect.
+If \fIv\fP is zero, the graph is unlocked. If there has been a call
+to delete the graph while it was locked, the graph is closed.
+If \fIv\fP is negative, nothing is done.
+In all cases, the previous lock value is returned.
+.SS "Strings"
+.TP
+\fBsprintf\fP(\fIfmt\fP : \fBstring\fP, \fI...\fP) : \fBstring\fP
+returns the string resulting from formatting
+the values of the expressions occurring after \fIfmt\fP
+according to the
+.IR printf (3)
+format
+.I fmt
+.TP
+\fBgsub\fP(\fIstr\fP : \fBstring\fP, \fIpat\fP : \fBstring\fP) : \fBstring\fP
+.TP
+\fBgsub\fP(\fIstr\fP : \fBstring\fP, \fIpat\fP : \fBstring\fP, \fIrepl\fP : \fBstring\fP) : \fBstring\fP
+returns \fIstr\fP with all substrings matching \fIpat\fP
+deleted or replaced by \fIrepl\fP, respectively.
+.TP
+\fBsub\fP(\fIstr\fP : \fBstring\fP, \fIpat\fP : \fBstring\fP) : \fBstring\fP
+.TP
+\fBsub\fP(\fIstr\fP : \fBstring\fP, \fIpat\fP : \fBstring\fP, \fIrepl\fP : \fBstring\fP) : \fBstring\fP
+returns \fIstr\fP with the leftmost substring matching \fIpat\fP
+deleted or replaced by \fIrepl\fP, respectively. The 
+characters '^' and '$'
+may be used at the beginning and end, respectively,
+of \fIpat\fP to anchor the pattern to the beginning or end of \fIstr\fP.
+.TP
+\fBsubstr\fP(\fIstr\fP : \fBstring\fP, \fIidx\fP : \fBint\fP) : \fBstring\fP
+.TP
+\fBsubstr\fP(\fIstr\fP : \fBstring\fP, \fIidx\fP : \fBint\fP, \fIlen\fP : \fBint\fP) : \fBstring\fP
+returns the substring of \fIstr\fP starting at position \fIidx\fP to
+the end of the string or of length \fIlen\fP, respectively.
+Indexing starts at 0. If \fIidx\fP is negative or \fIidx\fP is greater than
+the length of \fIstr\fP, a fatal error occurs. Similarly, in the second
+case, if \fIlen\fP is negative or \fIidx\fP + \fIlen\fP is greater than the
+length of \fIstr\fP, a fatal error occurs.
+.TP
+\fBlength\fP(\fIs\fP : \fBstring\fP) : \fBint\fP
+returns the length of the string \fIs\fP.
+.TP
+\fBindex\fP(\fIs\fP : \fBstring\fP, \fIt\fP : \fBstring\fP) : \fBint\fP
+.TP
+\fBrindex\fP(\fIs\fP : \fBstring\fP, \fIt\fP : \fBstring\fP) : \fBint\fP
+returns the index of the character in string \fIs\fP where the leftmost
+(rightmost) copy of string \fIt\fP can be found, or \-1 if \fIt\fP is not a 
+substring of \fIs\fP.
+.TP
+\fBmatch\fP(\fIs\fP : \fBstring\fP, \fIp\fP : \fBstring\fP) : \fBint\fP
+returns the index of the character in string \fIs\fP where the leftmost
+match of pattern \fIp\fP can be found, or \-1 if no substring of \fIs\fP
+matches \fIp\fP.
+.TP
+\fBcanon\fP(\fIs\fP : \fBstring\fP) : \fBstring\fP
+returns a version of \fIs\fP appropriate to be used as an identifier
+in a dot file.
+.TP
+\fBxOf\fP(\fIs\fP : \fBstring\fP) : \fBstring\fP
+returns the string "\fIx\fP" if \fIs\fP has the form "\fIx\fP,\fIy\fP", 
+where both \fIx\fP and \fIy\fP are numeric.
+.TP
+\fByOf\fP(\fIs\fP : \fBstring\fP) : \fBstring\fP
+returns the string "\fIy\fP" if \fIs\fP has the form "\fIx\fP,\fIy\fP", 
+where both \fIx\fP and \fIy\fP are numeric.
+.TP
+\fBllOf\fP(\fIs\fP : \fBstring\fP) : \fBstring\fP
+returns the string "\fIllx\fP,\fIlly\fP" if \fIs\fP has the form 
+"\fIllx\fP,\fIlly\fP,\fIurx\fP,\fIury\fP",
+where all of \fIllx\fP, \fIlly\fP, \fIurx\fP, and \fIury\fP are numeric.
+.TP
+.BI urOf( s )
+\fBurOf\fP(\fIs\fP : \fBstring\fP) : \fBstring\fP
+returns the string "\fIurx\fP,\fIury\fP" if \fIs\fP has the form 
+"\fIllx\fP,\fIlly\fP,\fIurx\fP,\fIury\fP",
+where all of \fIllx\fP, \fIlly\fP, \fIurx\fP, and \fIury\fP are numeric.
+.TP
+\fBsscanf\fP(\fIs\fP : \fBstring\fP, \fIfmt\fP : \fBstring\fP, \fI...\fP) : \fBint\fP
+scans the string \fIs\fP, extracting values
+according to the
+.IR sscanf (3)
+format
+.IR fmt .
+The values are stored in the addresses following \fIfmt\fP,
+addresses having the form \fB&\fP\fIv\fP, where \fIv\fP is some declared
+variable of the correct type.
+Returns the number of items successfully scanned.
+.SS "I/O"
+.TP
+\fBprint\fP(\fI...\fP) : \fBvoid\fP
+.BI print( " expr" , " ...\fB )
+prints a string representation of each argument in turn onto
+\fBstdout\fP, followed by a newline.
+.TP
+\fBprintf\fP(\fIfmt\fP : \fBstring\fP, \fI...\fP) : \fBint\fP
+.TP
+\fBprintf\fP(\fIfd\fP : \fBint\fP, \fIfmt\fP : \fBstring\fP, \fI...\fP) : \fBint\fP
+prints the string resulting from formatting
+the values of the expressions following \fIfmt\fP
+according to the
+.IR printf (3)
+format
+.IR fmt .
+Returns 0 on success.
+By default, it prints on \fBstdout\fP.
+If the optional integer \fIfd\fP is given, output is written on the open
+stream associated with \fIfd\fP.
+.TP
+\fBscanf\fP(\fIfmt\fP : \fBstring\fP, \fI...\fP) : \fBint\fP
+.TP
+\fBscanf\fP(\fIfd\fP : \fBint\fP, \fIfmt\fP : \fBstring\fP, \fI...\fP) : \fBint\fP
+scans in values from an input stream according to the
+.IR scanf (3)
+format
+.IR fmt .
+The values are stored in the addresses following \fIfmt\fP,
+addresses having the form \fB&\fP\fIv\fP, where \fIv\fP is some declared
+variable of the correct type.
+By default, it reads from \fBstdin\fP.
+If the optional integer \fIfd\fP is given, input is read from the open
+stream associated with \fIfd\fP.
+Returns the number of items successfully scanned.
+.TP
+\fBopenF\fP(\fIs\fP : \fBstring\fP, \fIt\fP : \fBstring\fP) : \fBint\fP
+opens the file \fIs\fP as an I/O stream. The string argument \fIt\fP
+specifies how the file is opened. The arguments are the same as for
+the C function
+.IR fopen (3).
+It returns an integer denoting the stream, or \-1 on error.
+.sp
+As usual, streams 0, 1 and 2 are already open as \fBstdin\fP, \fBstdout\fP,
+and \fBstderr\fP, respectively. Since \fBgvpr\fP may use \fBstdin\fP to
+read the input graphs, the user should avoid using this stream.
+.TP
+\fBcloseF\fP(\fIfd\fP : \fBint\fP) : \fBint\fP
+closes the open stream denoted by the integer \fIfd\fP.
+Streams  0, 1 and 2 cannot be closed.
+Returns 0 on success.
+.TP
+\fBreadL\fP(\fIfd\fP : \fBint\fP) : \fBstring\fP
+returns the next line read from the input stream \fIfd\fP. It returns
+the empty string "" on end of file. Note that the newline character is
+left in the returned string.
+.SS "Math"
+.TP
+\fBexp\fP(\fId\fP : \fBdouble\fP) : \fBdouble\fP
+returns e to the \fId\fPth power.
+.TP
+\fBlog\fP(\fId\fP : \fBdouble\fP) : \fBdouble\fP
+returns the natural log of \fId\fP.
+.TP
+\fBsqrt\fP(\fId\fP : \fBdouble\fP) : \fBdouble\fP
+returns the square root of the double \fId\fP.
+.TP
+\fBpow\fP(\fId\fP : \fBdouble\fP, \fIx\fP : \fBdouble\fP) : \fBdouble\fP
+returns \fId\fP raised to the \fIx\fPth power.
+.TP
+\fBcos\fP(\fId\fP : \fBdouble\fP) : \fBdouble\fP
+returns the cosine of \fId\fP.
+.TP
+\fBsin\fP(\fId\fP : \fBdouble\fP) : \fBdouble\fP
+returns the sine of \fId\fP.
+.TP
+\fBatan2\fP(\fIy\fP : \fBdouble\fP, \fIx\fP : \fBdouble\fP) : \fBdouble\fP
+returns the arctangent of \fIy/x\fP in the range \-pi to pi.
+.TP
+\fBMIN\fP(\fIy\fP : \fBdouble\fP, \fIx\fP : \fBdouble\fP) : \fBdouble\fP
+returns the minimum of \fIy\fP and \fIx\fP.
+.TP
+\fBMAX\fP(\fIy\fP : \fBdouble\fP, \fIx\fP : \fBdouble\fP) : \fBdouble\fP
+returns the maximum of \fIy\fP and \fIx\fP.
+.SS "Miscellaneous"
+.TP
+\fBexit\fP(\fIv\fP : \fBint\fP) : \fBvoid\fP
+causes
+.B gvpr
+to exit with the exit code
+.IR v .
+.TP
+\fBsystem\fP(\fIcmd\fP : \fBstring\fP) : \fBint\fP
+provides the standard C function
+.IR system (3).
+It executes \fIcmd\fP if the user's shell environment, and
+returns the exit status of the shell.
+.TP
+\fBrand\fP() : \fBdouble\fP
+returns a pseudo\(hyrandom double between 0 and 1.
+.TP
+\fBsrand\fP() : \fBint\fP
+.TP
+\fBsrand\fP(\fIv\fP : \fBint\fP) : \fBint\fP
+sets a seed for the random number generator. The optional argument gives
+the seed; if it is omitted, the current time is used. The previous seed
+value is returned. \fBsrand\fP should be called before any calls to
+\fBrand\fP.
+.SH "BUILT\(hyIN VARIABLES"
+.PP
+.B gvpr
+provides certain special, built\(hyin variables, whose values are set
+automatically by \fBgvpr\fP depending on the context. Except as noted,
+the user cannot modify their values.
+.TP
+\fB$\fP : \fBobj_t\fP
+denotes the current object (node, edge, graph) depending on the
+context.  It is not available in \fBBEGIN\fP or \fBEND\fP clauses.
+.TP
+\fB$F\fP : \fBstring\fP
+is the name of the current input file. 
+.TP
+\fB$G\fP : \fBgraph_t\fP
+denotes the current graph being processed. It is not available
+in \fBBEGIN\fP or \fBEND\fP clauses.
+.TP
+\fB$O\fP : \fBgraph_t\fP
+denotes the output graph. Before graph traversal, it is initialized
+to the target graph. After traversal and any \fBEND_G\fP actions,
+if it refers to a non\(hyempty graph, that graph is printed onto the output stream.
+It is only valid in \fBN\fP, \fBE\fP and \fBEND_G\fP clauses.
+The output graph may be set by the user.
+.TP
+\fB$T\fP : \fBgraph_t\fP
+denotes the current target graph. It is a subgraph of \fB$G\fP
+and is available only in \fBN\fP, \fBE\fP and \fBEND_G\fP clauses.
+.TP
+\fB$tgtname\fP : \fBstring\fP
+denotes the name of the target graph. 
+By default, it is set to \fB"gvpr_result"\fP.
+If used multiple times during the execution of
+.BR gvpr ,
+the name will be appended with an integer. 
+This variable may be set by the user.
+.TP
+\fB$tvroot\fP : \fBnode_t\fP
+indicates the starting node for a (directed or undirected)
+depth\(hyfirst traversal of the
+graph (cf. \fB$tvtype\fP below).
+The default value is \fBNULL\fP for each input graph.
+.TP
+\fB$tvtype\fP : \fBtvtype_t\fP
+indicates how \fBgvpr\fP traverses a graph. It can only take
+one of the constant values with the previx "TV_" described below.
+\fBTV_flat\fP is the default.
+.IP
+In the underlying graph library
+.IR cgraph (3),
+edges in undirected graphs are given an arbitrary direction. This is
+used for traversals, such as \fBTV_fwd\fR, requiring directed edges.
+.
+.TP
+\fBARGC\fP : \fBint\fP
+denotes the number of arguments specified by the 
+\fB\-a\fP \fIargs\fP command\(hyline argument.
+.TP
+\fBARGV\fP : \fBstring array\fP
+denotes the array of arguments specified by the 
+\fB\-a\fP \fIargs\fP
+command\(hyline argument. The \fIi\fPth argument is given
+by \fBARGV[\fIi\fP]\fR.
+.SH "BUILT\(hyIN CONSTANTS"
+.PP
+There are several symbolic constants defined by \fBgvpr\fP.
+.TP
+\fBNULL\fR : \fIobj_t\fR
+a null object reference, equivalent to 0.
+.TP
+\fBTV_flat\fR : \fItvtype_t\fR
+a simple, flat traversal, with graph objects visited in
+seemingly arbitrary order.
+.TP
+\fBTV_ne\fR : \fItvtype_t\fR
+a traversal which first visits all of the nodes, then all
+of the edges.
+.TP
+\fBTV_en\fR : \fItvtype_t\fR
+a traversal which first visits all of the edges, then all
+of the nodes.
+.TP
+\fBTV_dfs\fR : \fItvtype_t\fR
+.TQ
+\fBTV_postdfs\fR : \fItvtype_t\fR
+.TQ
+\fBTV_prepostdfs\fR : \fItvtype_t\fR
+a traversal of the graph using a depth\(hyfirst search on the
+underlying undirected graph. 
+To do the traversal, \fBgvpr\fP will check the value of
+\fB$tvroot\fP. If this has the same value that it had previously
+(at the start, the previous value is initialized to \fBNULL\fP.), \fBgvpr\fP
+will simply look for some unvisited node and traverse its connected
+component. On the other hand, if \fB$tvroot\fP has changed, its connected
+component will be toured, assuming it has not been previously visited or,
+if \fB$tvroot\fP is \fBNULL\fP, the traversal will stop. Note that using
+\fBTV_dfs\fP and \fB$tvroot\fP, it is possible to create an infinite loop.
+.
+.IP
+By default, the traversal is done in pre-order. That is, a node is
+visited before all of its unvisited edges. For \fBTV_postdfs\fR,
+all of a node's unvisited edges are visited before the node. For
+\fBTV_prepostdfs\fR, a node is visited twice, before and after all of
+its unvisited edges.
+.
+.TP
+\fBTV_fwd\fR : \fItvtype_t\fR
+.TQ
+\fBTV_postfwd\fR : \fItvtype_t\fR
+.TQ
+\fBTV_prepostfwd\fR : \fItvtype_t\fR
+A traversal of the graph using a depth\(hyfirst search on the
+graph following only forward arcs.
+The choice of roots for the traversal is the
+same as described for \fBTV_dfs\fR above.
+The different order of visitation specified by \fBTV_fwd\fR,
+\fBTV_postfwd\fR and \fBTV_prepostfwd\fR are the same as those
+specified by the analogous traversals \fBTV_dfs\fR,
+\fBTV_postdfs\fR and \fBTV_prepostdfs\fR.
+.TP
+\fBTV_rev\fR : \fItvtype_t\fR
+.TQ
+\fBTV_postrev\fR : \fItvtype_t\fR
+.TQ
+\fBTV_prepostrev\fR : \fItvtype_t\fR
+A traversal of the graph using a depth\(hyfirst search on the
+graph following only reverse arcs.
+The choice of roots for the traversal is the
+same as described for \fBTV_dfs\fR above.
+The different order of visitation specified by \fBTV_rev\fR,
+\fBTV_postrev\fR and \fBTV_prepostrev\fR are the same as those
+specified by the analogous traversals \fBTV_dfs\fR,
+\fBTV_postdfs\fR and \fBTV_prepostdfs\fR.
+.TP
+\fBTV_bfs\fR : \fItvtype_t\fR
+A traversal of the graph using a bread\(hyfirst search on the
+graph ignoring edge directions. See the item on \fBTV_dfs\fR above
+for the role of \fB$tvroot\fP.
+.SH EXAMPLES
+.PP
+.ta \w'\f(CWdelete array[expression]'u
+.RS
+.nf
+\fBgvpr \-i 'N[color=="blue"]' file.dot\fP
+.fi
+.RE
+.DT
+.PP
+Generate the node\(hyinduced subgraph of all nodes with color blue.
+.PP
+.ta \w'\f(CWdelete array[expression]'u
+.RS
+.nf
+\fBgvpr \-c 'N[color=="blue"]{color = "red"}' file.dot\fP
+.fi
+.RE
+.DT
+.PP
+Make all blue nodes red.
+.PP
+.ta \w'\f(CWdelete array[expression]'u
+.RS
+.nf
+\fBBEGIN { int n, e; int tot_n = 0; int tot_e = 0; }
+BEG_G {
+  n = nNodes($G);
+  e = nEdges($G);
+  printf ("%d nodes %d edges %s\n", n, e, $G.name);
+  tot_n += n;
+  tot_e += e;
+}
+END { printf ("%d nodes %d edges total\n", tot_n, tot_e) }\fP
+.fi
+.RE
+.DT
+.PP
+Version of the program \fBgc\fP.
+.PP
+.ta \w'\f(CWdelete array[expression]'u
+.RS
+.nf
+\fBgvpr \-c ""\fP
+.fi
+.RE
+.DT
+.PP
+Equivalent to \fBnop\fP.
+.PP
+.ta \w'\f(CWdelete array[expression]'u
+.RS
+.nf
+\fBBEG_G { graph_t g = graph ("merge", "S"); }
+E {
+  node_t h = clone(g,$.head);
+  node_t t = clone(g,$.tail);
+  edge_t e = edge(t,h,"");
+  e.weight = e.weight + 1;
+}
+END_G { $O = g; }\fP
+.fi
+.RE
+.DT
+.PP
+Produces a strict version of the input graph, where the weight attribute
+of an edge indicates how many edges from the input graph the edge represents.
+.PP
+.ta \w'\f(CWdelete array[expression]'u
+.RS
+.nf
+\fBBEGIN {node_t n; int deg[]}
+E{deg[head]++; deg[tail]++; }
+END_G {
+  for (deg[n]) {
+    printf ("deg[%s] = %d\n", n.name, deg[n]);
+  }
+}\fP
+.fi
+.RE
+.DT
+.PP
+Computes the degrees of nodes with edges.
+.SH ENVIRONMENT
+.TP
+.B GPRPATH
+Colon\(hyseparated list of directories to be searched to find
+the file specified by the \-f option.
+.SH BUGS AND WARNINGS
+When the program is given as a command line argument, the usual
+shell interpretation takes place, which may affect some of the
+special names in \fBgvpr\fP. To avoid this, it is best to wrap the
+program in single quotes.
+.PP
+As of 24 April 2008, \fBgvpr\fP switched to using a new, underlying
+graph library, which uses the simpler model that there is only one
+copy of a node, not one copy for each subgraph logically containing
+it. This means that iterators such as \Inxtnode\P cannot traverse
+a subgraph using just a node argument. For this reason, subgraph
+traversal requires new functions ending in "_sg", which also take
+a subgraph argument. The versions without that suffix will always
+traverse the root graph.
+.PP
+There is a single global scope, except for formal function parameters,
+and even these can interfere with the type system. Also, the 
+extent of all variables is the entire life of the program. 
+It might be preferable for scope
+to reflect the natural nesting of the clauses, or for the program
+to at least reset locally declared variables.
+For now, it is advisable to use distinct names for all variables.
+.PP
+If a function ends with a complex statement, such as an
+IF statement, with each branch doing a return, type checking may fail. 
+Functions should use a return at the end.
+.PP
+The expr library does not support string values of (char*)0.
+This means we can't distinguish between "" and (char*)0 edge keys.
+For the purposes of looking up and creating edges, we translate "" 
+to be (char*)0, since this latter value is
+necessary in order to look up any edge with a matching head and tail.
+.PP
+Related to this, strings converted to integers act like char pointers,
+getting the value 0 or 1 depending on whether the string consists
+solely of zeroes or not. Thus, the ((int)"2") evaluates to 1.
+.PP
+The language inherits the usual C problems such as dangling references
+and the confusion between '=' and '=='.
+.SH AUTHOR
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+.PP
+awk(1), gc(1), dot(1), nop(1), libexpr(3), libcgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/gxl2gv.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,92 @@
+.TH GXL2GV,GV2GXL 1 "20 December 2002"
+.SH NAME
+gxl2gv,gv2gxl \- GXL-GV converters
+.SH SYNOPSIS
+.B gxl2gv
+[
+.B \-gd?
+]
+[
+.BI -o outfile
+]
+[ 
+.I files
+]
+.br
+.B gv2gxl
+[
+.B \-gd?
+]
+[
+.BI -o outfile
+]
+[ 
+.I files
+]
+.SH DESCRIPTION
+.B gxl2gv
+converts between graphs represented in GXL and in the
+GV language. Unless a conversion type is specified using
+a flag,
+.B gxl2gv
+will deduce the type of conversion from the suffix of
+the input file, a ".gv" (or a ".dot") suffix causing a conversion from GV
+to GXL, and a ".gxl" suffix causing a conversion from GXL to GV.
+If no suffix is available, e.g. when the input is from a pipe,
+and no flags are used then
+.B gxl2gv
+assumes the type of the input file from its executable name
+so that
+.B gxl2gv
+converts from GXL to GV, and
+.B gv2gxl
+converts from GV to GXL.
+.PP
+GXL supports a much richer graph model than GV. \fBgxl2gv\fP
+will attempt to map GXL constructs into the analogous GV construct
+when this is possible. If not, the GXL information is stored as
+an attribute. The intention is that applying \fBgxl2gv|gv2gxl\fP
+is semantically equivalent to the identity operator.
+.SH OPTIONS
+The following options are supported:
+.TP
+.B \-g
+The command name and input file extensions are ignored, the
+input is taken as a GV file and a GXL file is generated.
+.TP
+.B \-d
+The command name and input file extensions are ignored, the
+input is taken as a GXL file and a GV file is generated.
+.TP
+.B \-?
+Prints usage information and exits.
+.TP
+.BI \-o " outfile"
+If specified, the output will be written into the file
+\fIoutfile\fP. Otherwise, output is written to standard out.
+.SH OPERANDS
+The following operand is supported:
+.TP 8
+.I files
+Names of files containing 1 or more graphs in GXL or GV.
+If no
+.I files
+operand is specified,
+the standard input will be used.
+.SH RETURN CODES
+Both \fBgxl2gv\fP and \fBgv2gxl\fP return \fB0\fP
+if there were no problems during conversion;
+and non-zero if any error occurred.
+.SH "BUGS"
+\fBgxl2gv\fP will only convert in one direction even if given multiple files
+with varying suffixes.
+.PP
+The conversion can only handle one graph per GXL file.
+.PP
+There are some GXL constructs which \fBgxl2gv\fP cannot handle.
+.SH AUTHORS
+Krishnam Pericherla <kp@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+dot(1), libgraph(3), libagraph(3), neato(1), twopi(1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/lefty.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,120 @@
+.TH LEFTY 1
+.SH NAME
+lefty \- A Programmable Graphics Editor
+.SH SYNOPSIS
+.B lefty
+[
+.I options
+] [
+.I file
+]
+.SH DESCRIPTION
+.B lefty
+is a two-view graphics editor for technical pictures. This editor has
+no hardwired knowledge about specific picture layouts or editing operations.
+Each picture is described by a program that contains functions to draw the
+picture and functions to perform editing operations that are appropriate for
+the specific picture. Primitive user actions, like mouse and keyboard events,
+are also bound to functions in this program. Besides the graphical view of the
+picture itself, the editor presents a textual view of the program that
+describes the picture. Programmability and the two-view interface allow the
+editor to handle a variety of pictures, but are particularly useful for
+pictures used in technical contexts, e.g., graphs and trees. Also,
+.B lefty
+can communicate with other processes. This feature allows it to use existing
+tools to compute specific picture layouts and allows external processes to use
+the editor as a front end to display their data structures graphically.
+.SH USAGE
+The file name is optional. It may be
+.BR - ,
+for reading from standard input.
+.B lefty
+uses two environment variables,
+.B LEFTYPATH
+and
+.BR LEFTYOPTIONS .
+.B LEFTYPATH
+is a colon separated list of directories. When
+.B lefty
+tries to open a file, it searches that path for the file. When
+.B lefty
+tries to start up another process, it searches
+.B LEFTYPATH
+first, then the standard
+.B PATH
+variable.
+.B LEFTYOPTIONS
+can be used to set specific options. Options specified on the command line
+override options set through this variable.
+.SH OPTIONS
+.TP
+.B -x
+Instructs the editor to exit after processing
+.BR file .
+.TP
+.B "-e <expression>"
+.B <expression>
+is parsed and executed.
+.TP
+.B -el <num>
+Set error reporting level. The default value is
+.BR 0 .
+.B 0
+never prints any messages.
+.B 1
+prints severe errors, such as trying to return from a non function.
+.B 2
+is the most useful: it reports function calls that cannot be executed, either
+because there is no function, or because of argument mismatches.
+.B 3
+also warns about bad variable names.
+.B 4,5
+warn about expressions that do not return a value. Only level
+.B 1
+messages are real errors. The rest arise from legal
+.B lefty
+statements, but may be cased by some logic errors.
+.TP
+.B "-sd <num>"
+Specifies how much of the stack to show, when an error message is to be
+printed. The default value is
+.BR 2 .
+With
+.BR 0 ,
+no part of the stack is shown. With
+.BR 1 ,
+only the top stack frame is printed. With
+.BR 2 ,
+the full stack is printed.
+.TP
+.B "-sb <num>"
+Specifies how much of each function in the stack to show, when an error message
+is to be printed. The default value is
+.BR 2 .
+With
+.BR 0 ,
+no part of the function is shown. With
+.BR 1 ,
+only the line around the error is printed. With
+.BR 2 ,
+the full function body is printed.
+.TP
+.B "-df <string>"
+Sets the default font. This font is used whenever a requested font cannot be
+found. The string must be a legal X font. If string is
+.BR "''" ,
+.B lefty
+will draw small boxes instead of text.
+.TP
+.B "-ps <file>"
+Specifies a default file name for postscript files. This name is used when no
+name is specified in the
+.B createwidget
+call. The default file name is
+.BR out.ps .
+.TP
+.B -V
+Prints the version.
+.SH SEE ALSO
+.I lefty
+user guide.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/lneato.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,49 @@
+.TH LNEATO 1
+.SH NAME
+lneato \- A Customizable Graph Editor
+.SH SYNOPSIS
+.B lneato
+[
+.B -V
+] [
+.I file
+]
+.SH DESCRIPTION
+.B lneato
+is a graph editor for the X Window System.  It may be run as a standalone
+editor, or as a front end for applications that use graphs.  It can control
+multiple windows viewing different graphs.
+
+.B lneato
+is written on top of
+.B neato
+and
+.BR lefty .
+.B lefty
+is a general-purpose programmable editor for technical pictures.  It has an
+interpretive programming language similar to AWK and C.  The user interface and
+graph editing operations of
+.B lneato
+are written as
+.B lefty
+functions.
+Programmer-defined graph operations may be loaded as well.  Graph layouts are
+made by
+.BR neato ,
+which runs as a separate process that communicates with
+.B lefty
+through pipes.
+.SH USAGE
+The file name is optional. If present, the graph contained in that file is
+displayed in the
+.B lneato
+window.
+.SH OPTIONS
+.TP
+.B -V
+Prints the version.
+.SH SEE ALSO
+neato(1), lefty(1), dotty(1),
+.br
+.I dotty
+user guide.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/mm2gv.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,47 @@
+.TH MM2GV 1 "31 July 2008"
+.SH NAME
+mm2gv \- Matrix Market-DOT converters
+.SH SYNOPSIS
+.B mm2gv
+[
+.B \-u?
+]
+[
+.BI -o outfile
+]
+[ 
+.I file
+]
+.br
+.SH DESCRIPTION
+.B mm2gv
+converts a sparse matrix of the Matrix Market format to a graph in the GV (formerly DOT) format. 
+.SH OPTIONS
+The following options are supported:
+.TP
+.B \-u
+If specified, the graph is assumed to be undirected. By default the graph generated is directed. 
+.TP
+.BI \-o "outfile"
+Prints output to the file \fIoutfile\fP. If not given, \fBmm2gv\fP
+uses stdout.
+.TP
+.SH OPERANDS
+The following operand is supported:
+.TP 8
+.I file
+Name of the file in MatrixMarket format.
+If no
+.I file
+operand is specified,
+the standard input will be used.
+.SH RETURN CODES
+Return \fB0\fP
+if there were no problems during conversion;
+and non-zero if any error occurred.
+.SH "LIMITATIONS"
+Currently the matrix entry values are not used.
+.SH AUTHORS
+Yifan Hu <yifanhu@research.att.com>
+.SH ADDITIONAL INFO
+See http://math.nist.gov/MatrixMarket/ for description of the format and http://www.cise.ufl.edu/research/sparse/matrices/ for a large collection of sparse matrices in this format.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/neato.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,725 @@
+.TH DOT 1 "23 August 2004" \*(eX
+.SH NAME
+dot \- filter for drawing directed graphs
+.br
+neato \- filter for drawing undirected graphs
+.br
+twopi \- filter for radial layouts of graphs
+.br
+circo \- filter for circular layout of graphs
+.br
+fdp \- filter for drawing undirected graphs
+.br
+sfdp \- filter for drawing large undirected graphs
+.SH SYNOPSIS
+\fBdot\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBneato\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-n\fR[\fB1\fR|\fB2\fR]]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBtwopi\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBcirco\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBfdp\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBsfdp\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.SH DESCRIPTION
+.I dot
+draws directed graphs.  It works well on DAGs and other graphs
+that can be drawn as hierarchies.
+It reads attributed graph files and writes drawings.
+By default, the output format
+.I dot
+is the input file with layout coordinates appended.
+.PP
+.I neato
+draws undirected graphs using ``spring'' models (see Kamada and Kawai,
+Information Processing Letters 31:1, April 1989).  Input files must be
+formatted in the
+.I dot
+attributed graph language.
+By default, the output of
+.I neato
+is the input graph with layout coordinates appended.
+.PP
+.I twopi
+draws graphs using a radial layout (see G. Wills,
+Symposium on Graph Drawing GD'97, September, 1997).
+Basically, one node is chosen as the center and put at the origin.
+The remaining nodes are placed on a sequence of concentric circles
+centered about the origin, each a fixed radial distance from the
+previous circle.
+All nodes distance 1 from the center are placed on the first circle;
+all nodes distance 1 from a node on the first circle are placed on
+the second circle; and so forth.
+.PP
+.I circo
+draws graphs using a circular layout (see
+Six and Tollis, GD '99 and ALENEX '99, and
+Kaufmann and Wiese, GD '02.)
+The tool identifies biconnected components and draws the nodes of
+the component on a circle. The block\(hycutpoint tree
+is then laid out using a recursive radial algorithm. Edge
+crossings within a circle are minimized by placing as many edges on
+the circle's perimeter as possible.
+In particular, if the component is outerplanar, the component will
+have a planar layout.
+.PP
+If a node belongs to multiple non\(hytrivial biconnected components,
+the layout puts the node in one of them. By default, this is the first
+non\(hytrivial component found in the search from the root component.
+.PP
+.I fdp
+draws undirected graphs using a ``spring'' model. It relies on a
+force\(hydirected approach in the spirit of Fruchterman and Reingold
+(cf. Software\(hyPractice & Experience 21(11), 1991, pp. 1129\(hy1164).
+.PP
+.I sfdp
+also draws undirected graphs using the ``spring'' model described
+above, but it uses a multi-scale approach to produce layouts
+of large graphs in a reasonably short time.
+.SH OUTPUT FORMATS
+Dot uses an extensible plugin mechanism for its output renderers,
+so to see what output formats your installation of dot supports
+you can use ``dot \-Txxx'' (where xxx is an unlikely format)
+and check the warning message.
+Also, The plugin mechanism supports multiple implementations
+of the output formats.
+To see what variants are available, use, for example: ``dot \-Tpng:''
+and to force a particular variant, use, for example: ``dot \-Tpng:gd''
+.P
+Traditionally, dot supports the following:
+\fB\-Tps\fP (PostScript),
+\fB\-Tsvg\fP \fB\-Tsvgz\fP (Structured Vector Graphics),
+\fB\-Tfig\fP (XFIG graphics),
+\fB\-Tmif\fP (FrameMaker graphics),
+\fB\-Thpgl\fP (HP pen plotters), and \fB\-Tpcl\fP (Laserjet printers),
+\fB\-Tpng\fP \fB\-Tgif\fP (bitmap graphics),
+\fB\-Tdia\fP (GTK+ based diagrams),
+\fB\-Timap\fP (imagemap files for httpd servers for each node or edge
+that has a non\(hynull "href" attribute.),
+\fB\-Tcmapx\fP (client\(hyside imagemap for use in html and xhtml).
+Additional less common or more special\(hypurpose output formats
+can be found at http://www.graphviz.org/cvs/doc/info/output.html.)
+.P
+Alternative plugins providing support for a given output format
+can be found from the error message resulting from appending a ':' to the format. e.g. \fB-Tpng:\fP
+The first plugin listed is always the default.
+.P
+The \fB\-P\fP switch can be used to produce a graph of all output variants supported by plugins in the local installation of graphviz.
+.SH GRAPH FILE LANGUAGE
+Here is a synopsis of the graph file language, traditionally using the extension \fB.dot\fR, for graphs:
+.PP
+[\fBstrict\fR] (\fBgraph\fR|\fBdigraph\fR) \fIname\fP { \fIstatement\(hylist\fP }\fR
+.br 
+Is the top level graph. If the graph is \fBstrict\fR then multiple edges are
+not allowed between the same pairs of nodes.
+If it is a directed graph, indicated by \fBdigraph\fR,
+then the \fIedgeop\fR must be "\->". If it is an undirected \fBgraph\fR
+then the \fIedgeop\fR must be "\-\-".
+Statements may be:
+.PP
+\fIname\fB=\fIval\fB;\fR
+.br
+\fBnode [\fIname\fB=\fIval\fB];\fR
+.br
+\fBedge [\fIname\fB=\fIval\fB];\fR
+.br
+Set default graph, node, or edge attribute \fIname\fP to \fIval\fP.
+Any subgraph, node, or edge appearing after this inherits the new
+default attributes.
+.PP
+\fBn0 [\fIname0=val0,name1=val1,...\fB];\fR
+Creates node \fBn0\fP (if it does not already exist)
+and sets its attributes according to the optional list. 
+.PP
+\fBn0 \fIedgeop\fR n1 \fIedgeop\fR \fI...\fB \fIedgeop\fR nn [\fIname0=val0,name1=val1,...\fB];\fR
+.br
+Creates edges between nodes \fBn0\fP, \fBn1\fP, ..., \fBnn\fP and sets
+their attributes according to the optional list.
+Creates nodes as necessary.
+.PP
+[\fBsubgraph \fIname\fB] { \fIstatement\(hylist \fB}\fR
+.br
+Creates a subgraph.  Subgraphs may be used in place
+of \fBn0\fP, ..., \fBnn\fP in the above statements to create edges.
+[\fBsubgraph \fIname\fR] is optional;
+if missing, the subgraph is assigned an internal name. 
+.PP
+Comments may be /*C\(hylike*/ or //C++\(hylike.
+
+.PP
+Attribute names and values are ordinary (C\(hystyle) strings.
+The following sections describe attributes that control graph layout.
+
+.SH "GRAPH ATTRIBUTES"
+.PP
+\fBsize="\fIx,y\fP"\fR sets bounding box of drawing in inches.
+.PP
+\fBpage="\fIx,y\fP"\fR sets the PostScript pagination unit.
+.PP
+\fBratio=\fIf\fR sets the aspect ratio to \fIf\fP which may be
+a floating point number, or one of the keywords \fBfill\fP,
+\fBcompress\fP, or \fBauto\fP.
+.PP
+\fBlayout=\fIengine\fR indicates the preferred layout engine ("dot", "neato", fdp" etc) overriding the default from the basename of the command or the -K commandline option.
+.PP
+\fBmargin=\fIf\fR sets the page margin (included in the page size).
+.PP
+\fBnodesep=\fIf\fR sets the minimum separation between nodes.
+.PP
+\fBranksep=\fIf\fR sets the minimum separation between ranks.
+.PP
+\fBordering=out\fR constrains order of out\(hyedges in a subgraph
+according to their file sequence.
+.PP
+\fBrankdir=LR|RL|BT\fR requests a left\(hyto\(hyright, right\(hyto\(hyleft, or bottom\(hyto\(hytop, drawing.
+.PP
+\fBpagedir=\fR[TBLR][TBLR] sets the major and minor order of pagination.
+.PP
+\fBrank=same\fR (or \fBmin\fP or \fBmax\fP) in a subgraph
+constrains the rank assignment of its nodes.   If a subgraph's
+name has the prefix \fBcluster\fP, its nodes are drawn in
+a distinct rectangle of the layout.  Clusters may be nested.
+.PP
+\fBrotate=90\fR sets landscape mode. 
+(\fBorientation=land\fR is backward compatible but obsolete.)
+.PP
+\fBcenter=\fIn\fR a non\(hyzero value centers the drawing on the page.
+.PP
+\fBnslimit=\fIf\fR or \fBmclimit=\fIf\fR adjusts the bound on the
+number of network simplex or mincross iterations by the given ratio.
+For example, \fBmclimit=2.0\fP runs twice as long.
+.PP
+\fBlayers="\fIid:id:id:id\fR" is a sequence of layer identifiers for
+overlay diagrams.  The PostScript array variable \fIlayercolorseq\fR
+sets the assignment of colors to layers. The least index is 1 and 
+each element must be a 3\(hyelement array to be interpreted as a color coordinate.
+.PP
+\fBcolor=\fIcolorvalue\fR sets foreground color (\fBbgcolor\fP for background).
+.PP
+\fBhref=\fI"url"\fR the default url for image map files; in PostScript files,
+the base URL for all relative URLs, as recognized by Acrobat Distiller
+3.0 and up.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBstylesheet=\fI"file.css"\fR includes a reference to a stylesheet
+in \-Tsvg and \-Tsvgz outputs.  Ignored by other formats.
+.PP
+\fBsplines\fR. If set to \fItrue\fR, edges are
+drawn as splines.
+If set to \fIpolyline\fR, edges are 
+drawn as polylines.
+If set to \fIortho\fR, edges are 
+drawn as orthogonal polylines.
+In all of these cases, the nodes may not overlap.
+If \fBsplines=\fIfalse\fR or \fBsplines=\fIline\fR, edges are 
+drawn as line segments.
+The default is \fItrue\fR for dot, and \fIfalse\fR for all other layouts.
+
+.PP
+\fB(neato\(hyspecific attributes)\fR
+.br
+\fBstart=\fIval\fR.  Requests random initial placement and seeds
+the random number generator.  If \fIval\fP is not an integer,
+the process ID or current time is used as the seed.
+.PP
+\fBepsilon=\fIn\fR.  Sets the cutoff for the solver.
+The default is 0.1.
+
+.PP
+\fB(twopi\(hyspecific attributes)\fR
+.br
+\fBroot=\fIctr\fR. This specifies the node to be used as the center of
+the layout. If not specified, \fItwopi\fP will randomly pick one of the
+nodes that are furthest from a leaf node, where a leaf node is a node
+of degree 1. If no leaf nodes exists, an arbitrary node is picked as center.
+.PP
+\fBranksep=\fIval\fR. Specifies the radial distance in inches between
+the sequence of rings. The default is 0.75.
+.PP
+\fBoverlap=\fImode\fR. This specifies what \fItwopi\fP should do if
+any nodes overlap. If mode is \fI"false"\fP, the program uses Voronoi
+diagrams to adjust the nodes to eliminate overlaps. If mode is \fI"scale"\fP,
+the layout is uniformly scaled up, preserving node sizes, until nodes no
+longer overlap. The latter technique removes overlaps while preserving
+symmetry and structure, while the former removes overlaps more compactly
+but destroys symmetries.
+If mode is \fI"true"\fP (the default), no repositioning is done.
+
+.PP
+\fB(circo\(hyspecific attributes)\fR
+.br
+\fBroot=\fInodename\fR. Specifies the name of a node occurring in the
+root block. If the graph is disconnected, the \fBroot\fP node attribute
+can be used to specify additional root blocks.
+.PP
+\fBmindist=\fIvalue\fR. Sets the minimum separation between all nodes. If not
+specified then \fIcirco\fP uses a default value of 1.0.
+
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBK=\fIval\fR. Sets the default ideal node separation
+in the layout.
+.PP
+\fBmaxiter=\fIval\fR. Sets the maximum number of iterations used to
+layout the graph.
+.PP
+\fBstart=\fIval\fR. Adjusts the random initial placement of nodes
+with no specified position.  If \fIval\fP is is an integer,
+it is used as the seed for the random number generator.
+If \fIval\fP is not an integer, a random system\(hygenerated integer,
+such as the process ID or current time, is used as the seed.
+.PP
+
+.SH "NODE ATTRIBUTES"
+.PP
+\fBheight=\fId\fR or \fBwidth=\fId\fR sets minimum height or width.
+Adding \fBfixedsize=true\fP forces these to be the actual size
+(text labels are ignored).
+.PP
+\fBshape=record polygon epsf \fIbuiltin_polygon\fR
+.br
+\fIbuiltin_polygon\fR is one of: \fBplaintext ellipse oval circle egg 
+triangle box diamond trapezium parallelogram house hexagon octagon
+note tab box3d component.\fR
+(Polygons are defined or modified by the following node attributes:
+\fBregular\fR, \fBperipheries\fR, \fBsides\fR, \fBorientation\fR,
+\fBdistortion\fR and \fBskew\fR.)  \fBepsf\fR uses the node's
+\fBshapefile\fR attribute as the path name of an external
+EPSF file to be automatically loaded for the node shape.
+.PP
+\fBlabel=\fItext\fR where \fItext\fP may include escaped newlines
+\\\|n, \\\|l, or \\\|r for center, left, and right justified lines.
+The string '\\N' value will be replaced by the node name.
+The string '\\G' value will be replaced by the graph name.
+Record labels may contain recursive box lists delimited by { | }.
+Port identifiers in labels are set off by angle brackets < >.
+In the graph file, use colon (such as, \fBnode0:port28\fR).
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBcolor=\fIcolorvalue\fR sets the outline color, and the default fill color
+if style=filled and \fBfillcolor\fR is not specified.
+.PP
+\fBfillcolor=\fIcolorvalue\fR sets the fill color
+when style=filled.  If not specified, the fillcolor when style=filled defaults
+to be the same as the outline color.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+A \fIcolorvalue\fP may be "\fIh,s,v\fB"\fR (hue, saturation, brightness)
+floating point numbers between 0 and 1, or an X11 color name such as
+\fBwhite black red green blue yellow magenta cyan\fR or \fBburlywood\fR,
+or a "\fI#rrggbb" (red, green, blue, 2 hex characters each) value.
+.PP
+\fBstyle=filled solid dashed dotted bold invis\fP or any Postscript code.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the node's active layers.
+The empty string means no layers (invisible).
+.PP
+The following attributes apply only to polygon shape nodes:
+.PP
+\fBregular=\fIn\fR if \fIn\fR is non\(hyzero then the polygon is made 
+regular, i.e. symmetric about the x and y axis, otherwise the
+polygon takes on the aspect ratio of the label. 
+\fIbuiltin_polygons\fR that are not already regular are made regular
+by this attribute.
+\fIbuiltin_polygons\fR that are already regular are not affected (i.e.
+they cannot be made asymmetric).
+.PP
+\fBperipheries=\fIn\fR sets the number of periphery lines drawn around
+the polygon.  This value supersedes the number of periphery lines
+of \fIbuiltin_polygons\fR.
+.PP
+\fBsides=\fIn\fR sets the number of sides to the polygon. \fIn\fR<3
+results in an ellipse.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBorientation=\fIf\fR sets the orientation of the first apex of the
+polygon counterclockwise from the vertical, in degrees.
+\fIf\fR may be a floating point number.
+The orientation of labels is not affected by this attribute.
+This attribute is added to the initial orientation of \fIbuiltin_polygons.\fR
+.PP
+\fBdistortion=\fIf\fR sets the amount of broadening of the top and
+narrowing of the bottom of the polygon (relative to its orientation). 
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP                                                            
+\fBskew=\fIf\fR sets the amount of right\(hydisplacement of the top and
+left\(hydisplacement of the bottom of the polygon (relative to its
+orientation).
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.
+The target string is used to determine which window of the browser is used
+for the URL.  Setting it to "_graphviz" will open a new window if it doesn't
+already exist, or reuse it if it does.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.  The tooltip string defaults to be the
+same as the label string, but this attribute permits nodes without
+labels to still have tooltips thus permitting denser graphs.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+
+.PP
+\fB(circo\(hyspecific attributes)\fR
+.br
+\fBroot=\fItrue/false\fR. This specifies that the block containing the given
+node be treated as the root of the spanning tree in the layout.
+
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBpin=\fIval\fR. If \fIval\fR is "true", the node will remain at
+its initial position.
+
+.SH "EDGE ATTRIBUTES"
+\fBminlen=\fIn\fR where \fIn\fP is an integer factor that applies
+to the edge length (ranks for normal edges, or minimum node separation
+for flat edges).
+.PP
+\fBweight=\fIn\fR where \fIn\fP is the integer cost of the edge.
+Values greater than 1 tend to shorten the edge.  Weight 0 flat
+edges are ignored for ordering nodes.
+.PP
+\fBlabel=\fItext\fR where \fItext\fR may include escaped newlines
+\\\|n, \\\|l, or \\\|r for centered, left, or right justified lines.
+If the substring '\\T' is found in a label it will be replaced by the tail_node name.
+If the substring '\\H' is found in a label it will be replaced by the head_node name.
+If the substring '\\E' value is found in a label it will be replaced by: tail_node_name\->head_node_name
+If the substring '\\G' is found in a label it will be replaced by the graph name.
+or by: tail_node_name\-\-head_node_name for undirected graphs.
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+\fBstyle=solid dashed dotted bold invis\fP
+.PP
+\fBcolor=\fIcolorvalue\fR sets the line color for edges.
+.PP
+\fBcolor=\fIcolorvaluelist\fR a ':' separated list of \fIcolorvalue\fR creates
+parallel edges, one edge for each color.
+.PP
+\fBdir=forward back both none\fP controls arrow direction.
+.PP
+\fBtailclip,headclip=false\fP disables endpoint shape clipping.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edges have a URL.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when edges have a URL.  The tooltip string defaults to be the
+same as the edge label string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBarrowhead,arrowtail=none, normal, inv, dot, odot, invdot, invodot,
+tee, empty, invempty, open, halfopen, diamond, odiamond, box, obox, crow\fP.
+.PP
+\fBarrowsize\fP (norm_length=10,norm_width=5,
+inv_length=6,inv_width=7,dot_radius=2) 
+.PP
+\fBheadlabel,taillabel=string\fP for port labels.
+\fBlabelfontcolor\fP,\fBlabelfontname\fP,\fBlabelfontsize\fP
+for head and tail labels.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadhref=\fI"url"\fR sets the url for the head port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadURL=\fI"url"\fR ("headURL" is a synonym for "headhref".)
+.PP
+\fBheadtarget=\fI"headtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge heads have a URL.
+The headtarget string is used to determine which window of the browser is used
+for the URL.  If the headtarget string is empty, the default,
+then headtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when head ports have a URL.  The tooltip string defaults to be the
+same as the headlabel string. 
+The substrings '\\T', '\\H', and '\\E' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailhref=\fI"url"\fR sets the url for the tail port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailURL=\fI"url"\fR ("tailURL" is a synonym for "tailhref".)
+.PP
+\fBtailtarget=\fI"tailtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge tails have a URL.
+The tailtarget string is used to determine which window of the browser is used
+for the URL.  If the tailtarget string is empty, the default,
+then tailtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when tail ports have a URL.  The tooltip string defaults to be the
+same as the taillabel string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBlabeldistance\fP and \fPport_label_distance\fP set distance; also
+\fBlabelangle\fP (in degrees CCW)
+.PP
+\fBdecorate\fP draws line from edge to label.
+.PP
+\fBsamehead,sametail\fP aim edges having the same value to the
+same port, using the average landing point.
+.PP
+\fBconstraint=false\fP causes an edge to be ignored for rank assignment.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the edge's active layers.
+The empty string means no layers (invisible).
+
+.PP
+\fB(neato\(hyspecific attributes)\fR
+.br
+\fBw=\fIf\fR sets the weight (spring constant) of an edge
+to the given floating point value.  The default is 1.0;
+greater values make the edge tend more toward its optimal length.
+.PP
+\fBlen=\fIf\fR sets the optimal length of an edge.
+The default is 1.0.
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBweight=\fIf\fR sets the weight of an edge
+to the given floating point value. The default is 1.0;
+greater values make the edge tend more toward its optimal length.
+.SH "COMMAND LINE OPTIONS"
+\fB\-G\fP sets a default graph attribute.
+.br
+\fB\-N\fP sets a default node attribute.
+.br
+\fB\-E\fP sets a default edge attribute.
+Example: \fB\-Gsize="7,8" \-Nshape=box \-Efontsize=8\fR
+.PP
+\fB\-l\fIfile\fR loads custom PostScript library files.
+Usually these define custom shapes or styles.
+If \fB\-l\fP is given by itself, the standard library is omitted.
+.PP
+\fB\-T\fIlang\fR sets the output language as described above.
+
+.PP
+\fB\-n\fR[\fB1\fR|\fB2\fR] (no\(hyop)
+If set, neato assumes nodes have already been positioned and all
+nodes have a pos attribute giving the positions.
+It then performs an optional adjustment to remove node\(hynode overlap,
+depending on the value of the overlap attribute,
+computes the edge layouts, depending on the value of the \fBsplines\fR attribute,
+and emits the graph in the appropriate format.
+If num is supplied, the following actions occur:
+.nf
+    num = 1
+.fi
+Equivalent to \-n.
+.nf
+    num > 1
+.fi
+Use node positions as specified,
+with no adjustment to remove node\(hynode overlaps,
+and use any edge layouts already specified by the pos attribute.
+neato computes an edge layout for any edge that does not have a pos attribute.
+As usual, edge layout is guided by the \fBsplines\fR attribute.
+.PP
+\fB\-K\fIlayout\fR override the default layout engine implied by the command name.
+.PP
+\fB\-O\fP automatically generate output filenames based on the input filename and the -T format.
+.PP
+\fB\-P\fP generate a graph of the currently available plugins.
+.PP
+\fB\-v\fP (verbose) prints various information useful for debugging.
+.PP
+\fB\-V\fP (version) prints version information and exits.
+.PP
+\fB\-?\fP prints the usage and exits.
+.SH "EXAMPLES"
+.nf
+digraph test123 {
+        a \-> b \-> c;
+        a \-> {x y};
+        b [shape=box];
+        c [label="hello\\\|nworld",color=blue,fontsize=24,
+             fontname="Palatino\-Italic",fontcolor=red,style=filled];
+        a \-> z [label="hi", weight=100];
+        x \-> z [label="multi\-line\\\|nlabel"];
+        edge [style=dashed,color=red];
+        b \-> x;
+        {rank=same; b x}
+}
+.fi
+.PP
+.nf
+graph test123 {
+        a \-\- b \-\- c;
+        a \-\- {x y};
+        x \-\- c [w=10.0];
+        x \-\- y [w=5.0,len=3];
+}
+.fi
+.SH "CAVEATS"
+Edge splines can overlap unintentionally.
+.PP
+Flat edge labels are slightly broken.
+Intercluster edge labels are totally broken.
+.PP
+Because unconstrained optimization is employed, node boxes can
+possibly overlap or touch unrelated edges.  All existing
+spring embedders seem to have this limitation.
+.PP
+Apparently reasonable attempts to pin nodes or adjust edge lengths
+and weights can cause instability.
+.SH AUTHORS
+Stephen C. North <north@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.br
+John C. Ellson <ellson@research.att.com>
+.PP
+The bitmap driver (PNG, GIF etc) is by Thomas Boutell, <http://www.boutell.com/gd>
+.PP
+The Truetype font renderer is from
+the Freetype Project (David Turner, Robert Wilhelm, and Werner Lemberg)
+(who can be contacted at freetype\-devel@lists.lrz\-muenchen.de).
+.SH "SEE ALSO"
+This man page contains only a small amount of the information related
+to the Graphviz layout programs. The most complete information can be
+found at http://www.graphviz.org/Documentation.php, especially in the
+on\(hyline reference pages. Most of these documents are also available in the
+\fIdoc\fP and \fIdoc/info\fP subtrees in the source and binary distributions.
+.PP
+dotty(1)
+.br
+tcldot(n)
+.br
+xcolors(1)
+.br
+libgraph(3)
+.PP
+E. R. Gansner, S. C. North,  K. P. Vo, "DAG \(hy A Program to Draw Directed Graphs", Software \(hy Practice and Experience 17(1), 1988, pp. 1047\(hy1062.
+.br
+E. R. Gansner, E. Koutsofios, S. C. North,  K. P. Vo, "A Technique for Drawing Directed Graphs," IEEE Trans. on Soft. Eng. 19(3), 1993, pp. 214\(hy230.
+.br
+S. North and E. Koutsofios, "Applications of graph visualization",
+Graphics Interface 94, pp. 234\(hy245.
+.br
+E. Koutsofios and S. C. North, "Drawing Graphs with dot," 
+Available on research.att.com in dist/drawdag/dotguide.ps.Z.
+.br
+S. C. North, "NEATO User's Manual".
+Available on research.att.com in dist/drawdag/neatodoc.ps.Z.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/nop.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,31 @@
+.TH NOP 1 "21 March 2001"
+.SH NAME
+nop \- pretty-print graph file
+.SH SYNOPSIS
+.B nop
+[
+.B \-p?
+]
+[ 
+.I files 
+]
+.SH DESCRIPTION
+.B nop
+reads a stream of graphs and prints each in pretty-printed (canonical) format
+on stdout. If no
+.I files
+are given, it reads from stdin.
+.SH OPTIONS
+The following options are supported:
+.TP
+.B \-p
+Produce no output - just check the input for valid DOT.
+.TP
+.B \-?
+Print usage information.
+.SH "EXIT STATUS"
+If any errors occurred while processing any input, such as a file
+not found or a file containing illegal DOT, a non-zero exit value
+is returned. Otherwise, zero is returned.
+.SH "SEE ALSO"
+wc(1), acyclic(1), gvpr(1), gvcolor(1), ccomps(1), sccmap(1), tred(1), libgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/osage.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,443 @@
+.TH OSAGE 1 "27 May 2009" \*(eX
+.SH NAME
+osage \- filter for drawing clustered graphs
+.SH SYNOPSIS
+\fBosage\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.SH DESCRIPTION
+.I osage
+draws clustered graphs. As input, it takes any graph in the
+.I dot
+format. It draws the graph recursively. At each level, there will
+be a collection of nodes and a collection of cluster subgraphs.
+The internals of each cluster subgraph are laid out, then the 
+cluster subgraphs and nodes at the current level are positioned
+relative to each other, treating each cluster subgraph as a node. 
+.P
+At each level, the nodes and cluster subgraphs are viewed as rectangles
+to be packed together. At present, edges are ignored during packing.
+Packing is done using the standard packing functions. In particular,
+the graph attributes \fBpack\fP and \fBpackmode\fP control the layout.
+Each graph and cluster can specify its own values for these attributes.
+Remember also that a cluster inherits its attribute values from
+its parent graph.
+.P
+After all nodes and clusters, edges are routed based on the value of
+the \fBsplines\fP attribute.
+.SH OUTPUT FORMATS
+Osage uses an extensible plugin mechanism for its output renderers,
+so to see what output formats your installation of osage supports
+you can use ``osage \-Txxx'' (where xxx is an unlikely format)
+and check the warning message.
+Also, The plugin mechanism supports multiple implementations
+of the output formats.
+To see what variants are available, use, for example: ``osage \-Tpng:''
+and to force a particular variant, use, for example: ``osage \-Tpng:gd''
+.P
+Traditionally, osage supports the following:
+\fB\-Tps\fP (PostScript),
+\fB\-Tsvg\fP \fB\-Tsvgz\fP (Structured Vector Graphics),
+\fB\-Tfig\fP (XFIG graphics),
+\fB\-Tmif\fP (FrameMaker graphics),
+\fB\-Thpgl\fP (HP pen plotters), and \fB\-Tpcl\fP (Laserjet printers),
+\fB\-Tpng\fP \fB\-Tgif\fP (bitmap graphics),
+\fB\-Tdia\fP (GTK+ based diagrams),
+\fB\-Timap\fP (imagemap files for httpd servers for each node or edge
+that has a non\(hynull "href" attribute.),
+\fB\-Tcmapx\fP (client\(hyside imagemap for use in html and xhtml).
+Additional less common or more special\(hypurpose output formats
+can be found at http://www.graphviz.org/cvs/doc/info/output.html.)
+.P
+Alternative plugins providing support for a given output format
+can be found from the error message resulting from appending a ':' to the format. e.g. \fB-Tpng:\fP
+The first plugin listed is always the default.
+.SH GRAPH FILE LANGUAGE
+Here is a synopsis of the graph file language, traditionally using the extension \fB.gv\fR or \fB.dot\fR, for graphs:
+.PP
+[\fBstrict\fR] (\fBgraph\fR|\fBdigraph\fR) \fIname\fP { \fIstatement\(hylist\fP }\fR
+.br 
+Is the top level graph. If the graph is \fBstrict\fR then multiple edges are
+not allowed between the same pairs of nodes.
+If it is a directed graph, indicated by \fBdigraph\fR,
+then the \fIedgeop\fR must be "\->". If it is an undirected \fBgraph\fR
+then the \fIedgeop\fR must be "\-\-".
+Statements may be:
+.PP
+\fIname\fB=\fIval\fB;\fR
+.br
+\fBnode [\fIname\fB=\fIval\fB];\fR
+.br
+\fBedge [\fIname\fB=\fIval\fB];\fR
+.br
+Set default graph, node, or edge attribute \fIname\fP to \fIval\fP.
+Any subgraph, node, or edge appearing after this inherits the new
+default attributes.
+.PP
+\fBn0 [\fIname0=val0,name1=val1,...\fB];\fR
+Creates node \fBn0\fP (if it does not already exist)
+and sets its attributes according to the optional list. 
+.PP
+\fBn0 \fIedgeop\fR n1 \fIedgeop\fR \fI...\fB \fIedgeop\fR nn [\fIname0=val0,name1=val1,...\fB];\fR
+.br
+Creates edges between nodes \fBn0\fP, \fBn1\fP, ..., \fBnn\fP and sets
+their attributes according to the optional list.
+Creates nodes as necessary.
+.PP
+[\fBsubgraph \fIname\fB] { \fIstatement\(hylist \fB}\fR
+.br
+Creates a subgraph.  Subgraphs may be used in place
+of \fBn0\fP, ..., \fBnn\fP in the above statements to create edges.
+[\fBsubgraph \fIname\fR] is optional;
+if missing, the subgraph is assigned an internal name. 
+.PP
+Comments may be /*C\(hylike*/ or //C++\(hylike.
+
+.PP
+Attribute names and values are ordinary (C\(hystyle) strings.
+The following sections describe attributes that control graph layout.
+
+.SH "GRAPH ATTRIBUTES"
+.PP
+\fBsize="\fIx,y\fP"\fR sets bounding box of drawing in inches.
+.PP
+\fBpage="\fIx,y\fP"\fR sets the PostScript pagination unit.
+.PP
+\fBratio=\fIf\fR sets the aspect ratio to \fIf\fP which may be
+a floating point number, or one of the keywords \fBfill\fP,
+\fBcompress\fP, or \fBauto\fP.
+.PP
+\fBpagedir=\fR[TBLR][TBLR] sets the major and minor order of pagination.
+.PP
+\fBrotate=90\fR sets landscape mode. 
+(\fBorientation=land\fR is backward compatible but obsolete.)
+.PP
+\fBcenter=\fIn\fR a non\(hyzero value centers the drawing on the page.
+.PP
+\fBlayers="\fIid:id:id:id\fR" is a sequence of layer identifiers for
+overlay diagrams.  The PostScript array variable \fIlayercolorseq\fR
+sets the assignment of colors to layers. The least index is 1 and 
+each element must be a 3\(hyelement array to be interpreted as a color coordinate.
+.PP
+\fBcolor=\fIcolorvalue\fR sets foreground color (\fBbgcolor\fP for background).
+.PP
+\fBhref=\fI"url"\fR the default url for image map files; in PostScript files,
+the base URL for all relative URLs, as recognized by Acrobat Distiller
+3.0 and up.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBstylesheet=\fI"file.css"\fR includes a reference to a stylesheet
+in \-Tsvg and \-Tsvgz outputs.  Ignored by other formats.
+.PP
+\fBsplines\fR. If set to \fItrue\fR, edges are
+drawn as splines.
+If set to \fIpolyline\fR, edges are 
+drawn as polylines.
+If set to \fIortho\fR, edges are 
+drawn as orthogonal polylines.
+In all of these cases, the nodes may not overlap.
+If \fBsplines=\fIfalse\fR or \fBsplines=\fIline\fR, edges are 
+drawn as line segments.
+The default is \fIfalse\fR.
+
+.SH "NODE ATTRIBUTES"
+.PP
+\fBheight=\fId\fR or \fBwidth=\fId\fR sets minimum height or width.
+Adding \fBfixedsize=true\fP forces these to be the actual size
+(text labels are ignored).
+.PP
+\fBshape=record polygon epsf \fIbuiltin_polygon\fR
+.br
+\fIbuiltin_polygon\fR is one of: \fBplaintext ellipse oval circle egg 
+triangle box diamond trapezium parallelogram house hexagon octagon
+note tab box3d component.\fR
+(Polygons are defined or modified by the following node attributes:
+\fBregular\fR, \fBperipheries\fR, \fBsides\fR, \fBorientation\fR,
+\fBdistortion\fR and \fBskew\fR.)  \fBepsf\fR uses the node's
+\fBshapefile\fR attribute as the path name of an external
+EPSF file to be automatically loaded for the node shape.
+.PP
+\fBlabel=\fItext\fR where \fItext\fP may include escaped newlines
+\\\|n, \\\|l, or \\\|r for center, left, and right justified lines.
+The string '\\N' value will be replaced by the node name.
+The string '\\G' value will be replaced by the graph name.
+Record labels may contain recursive box lists delimited by { | }.
+Port identifiers in labels are set off by angle brackets < >.
+In the graph file, use colon (such as, \fBnode0:port28\fR).
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBcolor=\fIcolorvalue\fR sets the outline color, and the default fill color
+if style=filled and \fBfillcolor\fR is not specified.
+.PP
+\fBfillcolor=\fIcolorvalue\fR sets the fill color
+when style=filled.  If not specified, the fillcolor when style=filled defaults
+to be the same as the outline color.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+A \fIcolorvalue\fP may be "\fIh,s,v\fB"\fR (hue, saturation, brightness)
+floating point numbers between 0 and 1, or an X11 color name such as
+\fBwhite black red green blue yellow magenta cyan\fR or \fBburlywood\fR,
+or a "\fI#rrggbb" (red, green, blue, 2 hex characters each) value.
+.PP
+\fBstyle=filled solid dashed dotted bold invis\fP or any Postscript code.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the node's active layers.
+The empty string means no layers (invisible).
+.PP
+The following attributes apply only to polygon shape nodes:
+.PP
+\fBregular=\fIn\fR if \fIn\fR is non\(hyzero then the polygon is made 
+regular, i.e. symmetric about the x and y axis, otherwise the
+polygon takes on the aspect ratio of the label. 
+\fIbuiltin_polygons\fR that are not already regular are made regular
+by this attribute.
+\fIbuiltin_polygons\fR that are already regular are not affected (i.e.
+they cannot be made asymmetric).
+.PP
+\fBperipheries=\fIn\fR sets the number of periphery lines drawn around
+the polygon.  This value supersedes the number of periphery lines
+of \fIbuiltin_polygons\fR.
+.PP
+\fBsides=\fIn\fR sets the number of sides to the polygon. \fIn\fR<3
+results in an ellipse.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBorientation=\fIf\fR sets the orientation of the first apex of the
+polygon counterclockwise from the vertical, in degrees.
+\fIf\fR may be a floating point number.
+The orientation of labels is not affected by this attribute.
+This attribute is added to the initial orientation of \fIbuiltin_polygons.\fR
+.PP
+\fBdistortion=\fIf\fR sets the amount of broadening of the top and
+narrowing of the bottom of the polygon (relative to its orientation). 
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP                                                            
+\fBskew=\fIf\fR sets the amount of right\(hydisplacement of the top and
+left\(hydisplacement of the bottom of the polygon (relative to its
+orientation).
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.
+The target string is used to determine which window of the browser is used
+for the URL.  Setting it to "_graphviz" will open a new window if it doesn't
+already exist, or reuse it if it does.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.  The tooltip string defaults to be the
+same as the label string, but this attribute permits nodes without
+labels to still have tooltips thus permitting denser graphs.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+
+
+.SH "EDGE ATTRIBUTES"
+.PP
+\fBlabel=\fItext\fR where \fItext\fR may include escaped newlines
+\\\|n, \\\|l, or \\\|r for centered, left, or right justified lines.
+If the substring '\\T' is found in a label it will be replaced by the tail_node name.
+If the substring '\\H' is found in a label it will be replaced by the head_node name.
+If the substring '\\E' value is found in a label it will be replaced by: tail_node_name\->head_node_name
+If the substring '\\G' is found in a label it will be replaced by the graph name.
+or by: tail_node_name\-\-head_node_name for undirected graphs.
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+\fBstyle=solid dashed dotted bold invis\fP
+.PP
+\fBcolor=\fIcolorvalue\fR sets the line color for edges.
+.PP
+\fBcolor=\fIcolorvaluelist\fR a ':' separated list of \fIcolorvalue\fR creates
+parallel edges, one edge for each color.
+.PP
+\fBdir=forward back both none\fP controls arrow direction.
+.PP
+\fBtailclip,headclip=false\fP disables endpoint shape clipping.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edges have a URL.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when edges have a URL.  The tooltip string defaults to be the
+same as the edge label string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBarrowhead,arrowtail=none, normal, inv, dot, odot, invdot, invodot,
+tee, empty, invempty, open, halfopen, diamond, odiamond, box, obox, crow\fP.
+.PP
+\fBarrowsize\fP (norm_length=10,norm_width=5,
+inv_length=6,inv_width=7,dot_radius=2) 
+.PP
+\fBheadlabel,taillabel=string\fP for port labels.
+\fBlabelfontcolor\fP,\fBlabelfontname\fP,\fBlabelfontsize\fP
+for head and tail labels.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadhref=\fI"url"\fR sets the url for the head port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadURL=\fI"url"\fR ("headURL" is a synonym for "headhref".)
+.PP
+\fBheadtarget=\fI"headtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge heads have a URL.
+The headtarget string is used to determine which window of the browser is used
+for the URL.  If the headtarget string is empty, the default,
+then headtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when head ports have a URL.  The tooltip string defaults to be the
+same as the headlabel string. 
+The substrings '\\T', '\\H', and '\\E' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailhref=\fI"url"\fR sets the url for the tail port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailURL=\fI"url"\fR ("tailURL" is a synonym for "tailhref".)
+.PP
+\fBtailtarget=\fI"tailtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge tails have a URL.
+The tailtarget string is used to determine which window of the browser is used
+for the URL.  If the tailtarget string is empty, the default,
+then tailtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when tail ports have a URL.  The tooltip string defaults to be the
+same as the taillabel string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBlabeldistance\fP and \fPport_label_distance\fP set distance; also
+\fBlabelangle\fP (in degrees CCW)
+.PP
+\fBdecorate\fP draws line from edge to label.
+.PP
+\fBsamehead,sametail\fP aim edges having the same value to the
+same port, using the average landing point.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the edge's active layers.
+The empty string means no layers (invisible).
+
+.PP
+\fB(neato\(hyspecific attributes)\fR
+.br
+\fBw=\fIf\fR sets the weight (spring constant) of an edge
+to the given floating point value.  The default is 1.0;
+greater values make the edge tend more toward its optimal length.
+.PP
+\fBlen=\fIf\fR sets the optimal length of an edge.
+The default is 1.0.
+.SH "COMMAND LINE OPTIONS"
+\fB\-G\fP sets a default graph attribute.
+.br
+\fB\-N\fP sets a default node attribute.
+.br
+\fB\-E\fP sets a default edge attribute.
+Example: \fB\-Gsize="7,8" \-Nshape=box \-Efontsize=8\fR
+.PP
+\fB\-l\fIfile\fR loads custom PostScript library files.
+Usually these define custom shapes or styles.
+If \fB\-l\fP is given by itself, the standard library is omitted.
+.PP
+\fB\-T\fIlang\fR sets the output language as described above.
+.PP
+\fB\-O\fP automatically generate output filenames based on the input filename and the -T format.
+.PP
+\fB\-v\fP (verbose) prints various information useful for debugging.
+.PP
+\fB\-V\fP (version) prints version information and exits.
+.PP
+\fB\-?\fP prints the usage and exits.
+.SH "EXAMPLES"
+.nf
+digraph test123 {
+        pack=8
+        subgraph cluster0 {
+          packmode=array
+          x y x0 y0 x1
+          subgraph cluster1 {
+            m n
+          }
+        }
+        b [shape=box];
+        c [label="hello\\\nworld",color=blue,fontsize=24,
+             fontname="Palatino\-Italic",fontcolor=red,style=filled];
+        a \-> z
+        x \-> z
+        a \-> b \-> c;
+        a \-> {x y};
+        edge [style=dashed,color=red];
+        b \-> x;
+}
+.fi
+.SH AUTHORS
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+This man page contains only a small amount of the information related
+to the Graphviz layout programs. The most complete information can be
+found at http://www.graphviz.org/Documentation.php, especially in the
+on\(hyline reference pages. Most of these documents are also available in the
+\fIdoc\fP and \fIdoc/info\fP subtrees in the source and binary distributions.
+.PP
+dot(1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/prune.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,155 @@
+.\" Copyright (c) 2002 Marcus Harnisch <marcus.harnisch@gmx.net>
+.\"
+.\" This is free documenation. It is provided to you without any
+.\" warranty that it is useful or that you can understand it.
+.\"
+.\" You are granted the right to use and redistribute the source code
+.\" or parts of it (even single words and letters), provided that the
+.\" copyright notice and the license terms will not be removed.
+.\"
+.TH prune 1
+
+.SH NAME
+prune \- Prune directed graphs
+.SH SYNOPSIS
+.B prune
+[
+.BI \-n " node"
+]
+[
+.BI \-N " attrspec"
+]
+[
+.I files ...
+]
+.SH DESCRIPTION
+.B prune
+reads directed graphs in the same format used by 
+.B dot(1)
+and removes subgraphs rooted at nodes specified on the
+command line via options. These nodes themselves will not be removed,
+but can be given attributes so that they can be easily located by a
+graph stream editor such as
+.B gpr(1).
+.B prune
+correctly handles cycles, loops and multi\(hyedges.
+
+Both options can appear multiple times on the command line. All
+subgraphs rooted at the respective nodes given will then be
+processed. If a node does not exist,
+.B prune
+will skip it and print a warning message to stderr.
+If multiple attributes are given, they will be applied to
+all nodes that have been processed.
+.B prune
+writes the result to the stdout.
+.SH OPTIONS
+.TP
+.BI \-n " name"
+Specifies name of node to prune.
+.TP
+.BI \-N " attrspec"
+Specifies attribute that will be set (or changed if it exists) for any
+pruned node.
+.I attrspec
+is a string of the form
+.IR attr "=" value.
+
+.SH EXAMPLES
+An input graph
+.I test.dot
+of the form
+.PP
+	digraph DG {
+.br
+	  A \-> B;
+.br
+	  A \-> C;
+.br
+
+.br
+	  B \-> D;
+.br
+	  B \-> E;
+.br
+	}
+.br
+
+, processed by the command
+.PP
+	prune \-n B test.dot
+.PP
+would produce the following output (the actual code might be formatted
+in a slightly different way).
+.PP
+	digraph DG {
+.br
+	  A \-> B;
+.br
+	  A \-> C;
+.br
+	}
+.br
+
+Another input graph
+.I test.dot
+of the form
+.PP
+	digraph DG {
+.br
+	  A \-> B;
+.br
+	  A \-> C;
+.br
+
+.br
+	  B \-> D;
+.br
+	  B \-> E;
+.br
+
+.br
+	  C \-> E;
+.br
+	}
+.br
+
+(note the additional edge from
+.I C
+to
+.I E
+), processed by the command
+.PP
+	prune \-n B \-N color=red test.dot
+.PP
+results in
+.PP
+	digraph DG {
+.br
+	  B [color=red];
+.br
+	  A \-> B;
+.br
+	  A \-> C;
+.br
+	  C \-> E;
+.br
+	}
+.br
+
+Node
+.I E
+has not been removed since its second parent
+.I C
+is not being pruned.
+
+.SH "EXIT STATUS"
+.B prune
+returns 0 on successful completion.
+It returns 1 if an error occurs.
+.SH SEE ALSO
+.BR dot (1),
+.BR gpr (1)
+
+.SH AUTHOR
+Marcus Harnisch <marcus.harnisch@gmx.net>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/sccmap.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+.TH SCCMAP 1 "21 March 2001" \*(eX
+.SH NAME
+sccmap \- extract strongly connected components of directed graphs
+.SH SYNOPSIS
+\fBsccmap\fR
+[\fB\-dsv\fR]
+[
+.I files
+]
+.SH DESCRIPTION
+.I sccmap
+decomposes digraphs into strongly connected components
+and an auxiliary map of the relationship between components.
+In this map, each component is collapsed into a node.
+The resulting graphs are printed to standard out.
+The number of nodes, edges and strongly connected components
+are printed to standard error.
+.B sccmap
+is a way of partitioning large graphs into more manageable pieces.
+.SH OPTIONS
+The following options are supported:
+.TP
+.B \-d
+Preserve degenerate components of only one node.
+.TP
+.B \-s
+Do not print the resulting graphs. Only the statistics are
+important.
+.TP
+.B \-S
+Just print the resulting graphs. No statistics are printed.
+.TP
+.B \-v
+Generate additional statistics. In particular,
+.B sccmap
+prints the number of nodes, edges, connected components,
+and strongly connected components, followed by the fraction of
+nodes in a non-trivial strongly connected components,
+the maximum degree of the graph, and fraction of non-tree edges
+in the graph.
+.SH OPERANDS
+The following operand is supported:
+.TP 8
+.I files
+Names of files containing 1 or more graphs in dot format.
+If no
+.I files
+operand is specified,
+the standard input will be used.
+.SH "DIAGNOSTICS"
+\fBsccmap\fP emits a warning if it encounters an undirected graph,
+and ignores it.
+.SH AUTHORS
+Stephen C. North <north@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+gc(1), dot(1), acyclic(1), gvpr(1), gvcolor(1), ccomps(1), tred(1), libgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/tred.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,42 @@
+.TH TRED 1 "21 March 2001"
+.SH NAME
+tred \- transitive reduction filter for directed graphs
+.SH SYNOPSIS
+.B tred
+[ 
+.I files 
+]
+.SH DESCRIPTION
+.B tred
+computes the transitive reduction of directed graphs,
+and prints the resulting graphs to standard output.
+This removes edges implied by transitivity.
+Nodes and subgraphs are not otherwise affected.
+The ``meaning'' and validity of the reduced graphs
+is application dependent.
+.B tred 
+is particularly useful as a preprocessor to 
+.I dot
+to reduce clutter in dense layouts.
+.PP
+Undirected graphs are silently ignored.
+.SH OPERANDS
+The following operand is supported:
+.TP 8
+.I files
+Names of files containing 1 or more graphs in dot format.
+If no
+.I files
+operand is specified,
+the standard input will be used.
+.SH "BUGS"
+Using bitmaps internally would substantially decrease running time.
+.SH "DIAGNOSTICS"
+If a graph has cycles, its transitive reduction is not uniquely defined.
+In this case \fItred\fP emits a warning.
+.SH AUTHORS
+Stephen C. North <north@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+gc(1), dot(1), acyclic(1), gvpr(1), gvcolor(1), ccomps(1), sccmap(1), libgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/twopi.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,725 @@
+.TH DOT 1 "23 August 2004" \*(eX
+.SH NAME
+dot \- filter for drawing directed graphs
+.br
+neato \- filter for drawing undirected graphs
+.br
+twopi \- filter for radial layouts of graphs
+.br
+circo \- filter for circular layout of graphs
+.br
+fdp \- filter for drawing undirected graphs
+.br
+sfdp \- filter for drawing large undirected graphs
+.SH SYNOPSIS
+\fBdot\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBneato\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-n\fR[\fB1\fR|\fB2\fR]]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBtwopi\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBcirco\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBfdp\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.br
+\fBsfdp\fR
+[\fB\-\fR(\fBG\fR|\fBN\fR|\fBE\fR)\fIname=value\fR]
+[\fB\-T\fIlang\fR]
+[\fB\-l\fIlibfile\fR]
+[\fB\-o\fIoutfile\fR]
+[\fB\-K\fIlayout\fR]
+[\fB\-O\fR]
+[\fB\-P\fR]
+[\fB\-v\fR]
+[\fB\-V\fR]
+[files]
+.SH DESCRIPTION
+.I dot
+draws directed graphs.  It works well on DAGs and other graphs
+that can be drawn as hierarchies.
+It reads attributed graph files and writes drawings.
+By default, the output format
+.I dot
+is the input file with layout coordinates appended.
+.PP
+.I neato
+draws undirected graphs using ``spring'' models (see Kamada and Kawai,
+Information Processing Letters 31:1, April 1989).  Input files must be
+formatted in the
+.I dot
+attributed graph language.
+By default, the output of
+.I neato
+is the input graph with layout coordinates appended.
+.PP
+.I twopi
+draws graphs using a radial layout (see G. Wills,
+Symposium on Graph Drawing GD'97, September, 1997).
+Basically, one node is chosen as the center and put at the origin.
+The remaining nodes are placed on a sequence of concentric circles
+centered about the origin, each a fixed radial distance from the
+previous circle.
+All nodes distance 1 from the center are placed on the first circle;
+all nodes distance 1 from a node on the first circle are placed on
+the second circle; and so forth.
+.PP
+.I circo
+draws graphs using a circular layout (see
+Six and Tollis, GD '99 and ALENEX '99, and
+Kaufmann and Wiese, GD '02.)
+The tool identifies biconnected components and draws the nodes of
+the component on a circle. The block\(hycutpoint tree
+is then laid out using a recursive radial algorithm. Edge
+crossings within a circle are minimized by placing as many edges on
+the circle's perimeter as possible.
+In particular, if the component is outerplanar, the component will
+have a planar layout.
+.PP
+If a node belongs to multiple non\(hytrivial biconnected components,
+the layout puts the node in one of them. By default, this is the first
+non\(hytrivial component found in the search from the root component.
+.PP
+.I fdp
+draws undirected graphs using a ``spring'' model. It relies on a
+force\(hydirected approach in the spirit of Fruchterman and Reingold
+(cf. Software\(hyPractice & Experience 21(11), 1991, pp. 1129\(hy1164).
+.PP
+.I sfdp
+also draws undirected graphs using the ``spring'' model described
+above, but it uses a multi-scale approach to produce layouts
+of large graphs in a reasonably short time.
+.SH OUTPUT FORMATS
+Dot uses an extensible plugin mechanism for its output renderers,
+so to see what output formats your installation of dot supports
+you can use ``dot \-Txxx'' (where xxx is an unlikely format)
+and check the warning message.
+Also, The plugin mechanism supports multiple implementations
+of the output formats.
+To see what variants are available, use, for example: ``dot \-Tpng:''
+and to force a particular variant, use, for example: ``dot \-Tpng:gd''
+.P
+Traditionally, dot supports the following:
+\fB\-Tps\fP (PostScript),
+\fB\-Tsvg\fP \fB\-Tsvgz\fP (Structured Vector Graphics),
+\fB\-Tfig\fP (XFIG graphics),
+\fB\-Tmif\fP (FrameMaker graphics),
+\fB\-Thpgl\fP (HP pen plotters), and \fB\-Tpcl\fP (Laserjet printers),
+\fB\-Tpng\fP \fB\-Tgif\fP (bitmap graphics),
+\fB\-Tdia\fP (GTK+ based diagrams),
+\fB\-Timap\fP (imagemap files for httpd servers for each node or edge
+that has a non\(hynull "href" attribute.),
+\fB\-Tcmapx\fP (client\(hyside imagemap for use in html and xhtml).
+Additional less common or more special\(hypurpose output formats
+can be found at http://www.graphviz.org/cvs/doc/info/output.html.)
+.P
+Alternative plugins providing support for a given output format
+can be found from the error message resulting from appending a ':' to the format. e.g. \fB-Tpng:\fP
+The first plugin listed is always the default.
+.P
+The \fB\-P\fP switch can be used to produce a graph of all output variants supported by plugins in the local installation of graphviz.
+.SH GRAPH FILE LANGUAGE
+Here is a synopsis of the graph file language, traditionally using the extension \fB.dot\fR, for graphs:
+.PP
+[\fBstrict\fR] (\fBgraph\fR|\fBdigraph\fR) \fIname\fP { \fIstatement\(hylist\fP }\fR
+.br 
+Is the top level graph. If the graph is \fBstrict\fR then multiple edges are
+not allowed between the same pairs of nodes.
+If it is a directed graph, indicated by \fBdigraph\fR,
+then the \fIedgeop\fR must be "\->". If it is an undirected \fBgraph\fR
+then the \fIedgeop\fR must be "\-\-".
+Statements may be:
+.PP
+\fIname\fB=\fIval\fB;\fR
+.br
+\fBnode [\fIname\fB=\fIval\fB];\fR
+.br
+\fBedge [\fIname\fB=\fIval\fB];\fR
+.br
+Set default graph, node, or edge attribute \fIname\fP to \fIval\fP.
+Any subgraph, node, or edge appearing after this inherits the new
+default attributes.
+.PP
+\fBn0 [\fIname0=val0,name1=val1,...\fB];\fR
+Creates node \fBn0\fP (if it does not already exist)
+and sets its attributes according to the optional list. 
+.PP
+\fBn0 \fIedgeop\fR n1 \fIedgeop\fR \fI...\fB \fIedgeop\fR nn [\fIname0=val0,name1=val1,...\fB];\fR
+.br
+Creates edges between nodes \fBn0\fP, \fBn1\fP, ..., \fBnn\fP and sets
+their attributes according to the optional list.
+Creates nodes as necessary.
+.PP
+[\fBsubgraph \fIname\fB] { \fIstatement\(hylist \fB}\fR
+.br
+Creates a subgraph.  Subgraphs may be used in place
+of \fBn0\fP, ..., \fBnn\fP in the above statements to create edges.
+[\fBsubgraph \fIname\fR] is optional;
+if missing, the subgraph is assigned an internal name. 
+.PP
+Comments may be /*C\(hylike*/ or //C++\(hylike.
+
+.PP
+Attribute names and values are ordinary (C\(hystyle) strings.
+The following sections describe attributes that control graph layout.
+
+.SH "GRAPH ATTRIBUTES"
+.PP
+\fBsize="\fIx,y\fP"\fR sets bounding box of drawing in inches.
+.PP
+\fBpage="\fIx,y\fP"\fR sets the PostScript pagination unit.
+.PP
+\fBratio=\fIf\fR sets the aspect ratio to \fIf\fP which may be
+a floating point number, or one of the keywords \fBfill\fP,
+\fBcompress\fP, or \fBauto\fP.
+.PP
+\fBlayout=\fIengine\fR indicates the preferred layout engine ("dot", "neato", fdp" etc) overriding the default from the basename of the command or the -K commandline option.
+.PP
+\fBmargin=\fIf\fR sets the page margin (included in the page size).
+.PP
+\fBnodesep=\fIf\fR sets the minimum separation between nodes.
+.PP
+\fBranksep=\fIf\fR sets the minimum separation between ranks.
+.PP
+\fBordering=out\fR constrains order of out\(hyedges in a subgraph
+according to their file sequence.
+.PP
+\fBrankdir=LR|RL|BT\fR requests a left\(hyto\(hyright, right\(hyto\(hyleft, or bottom\(hyto\(hytop, drawing.
+.PP
+\fBpagedir=\fR[TBLR][TBLR] sets the major and minor order of pagination.
+.PP
+\fBrank=same\fR (or \fBmin\fP or \fBmax\fP) in a subgraph
+constrains the rank assignment of its nodes.   If a subgraph's
+name has the prefix \fBcluster\fP, its nodes are drawn in
+a distinct rectangle of the layout.  Clusters may be nested.
+.PP
+\fBrotate=90\fR sets landscape mode. 
+(\fBorientation=land\fR is backward compatible but obsolete.)
+.PP
+\fBcenter=\fIn\fR a non\(hyzero value centers the drawing on the page.
+.PP
+\fBnslimit=\fIf\fR or \fBmclimit=\fIf\fR adjusts the bound on the
+number of network simplex or mincross iterations by the given ratio.
+For example, \fBmclimit=2.0\fP runs twice as long.
+.PP
+\fBlayers="\fIid:id:id:id\fR" is a sequence of layer identifiers for
+overlay diagrams.  The PostScript array variable \fIlayercolorseq\fR
+sets the assignment of colors to layers. The least index is 1 and 
+each element must be a 3\(hyelement array to be interpreted as a color coordinate.
+.PP
+\fBcolor=\fIcolorvalue\fR sets foreground color (\fBbgcolor\fP for background).
+.PP
+\fBhref=\fI"url"\fR the default url for image map files; in PostScript files,
+the base URL for all relative URLs, as recognized by Acrobat Distiller
+3.0 and up.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBstylesheet=\fI"file.css"\fR includes a reference to a stylesheet
+in \-Tsvg and \-Tsvgz outputs.  Ignored by other formats.
+.PP
+\fBsplines\fR. If set to \fItrue\fR, edges are
+drawn as splines.
+If set to \fIpolyline\fR, edges are 
+drawn as polylines.
+If set to \fIortho\fR, edges are 
+drawn as orthogonal polylines.
+In all of these cases, the nodes may not overlap.
+If \fBsplines=\fIfalse\fR or \fBsplines=\fIline\fR, edges are 
+drawn as line segments.
+The default is \fItrue\fR for dot, and \fIfalse\fR for all other layouts.
+
+.PP
+\fB(neato\(hyspecific attributes)\fR
+.br
+\fBstart=\fIval\fR.  Requests random initial placement and seeds
+the random number generator.  If \fIval\fP is not an integer,
+the process ID or current time is used as the seed.
+.PP
+\fBepsilon=\fIn\fR.  Sets the cutoff for the solver.
+The default is 0.1.
+
+.PP
+\fB(twopi\(hyspecific attributes)\fR
+.br
+\fBroot=\fIctr\fR. This specifies the node to be used as the center of
+the layout. If not specified, \fItwopi\fP will randomly pick one of the
+nodes that are furthest from a leaf node, where a leaf node is a node
+of degree 1. If no leaf nodes exists, an arbitrary node is picked as center.
+.PP
+\fBranksep=\fIval\fR. Specifies the radial distance in inches between
+the sequence of rings. The default is 0.75.
+.PP
+\fBoverlap=\fImode\fR. This specifies what \fItwopi\fP should do if
+any nodes overlap. If mode is \fI"false"\fP, the program uses Voronoi
+diagrams to adjust the nodes to eliminate overlaps. If mode is \fI"scale"\fP,
+the layout is uniformly scaled up, preserving node sizes, until nodes no
+longer overlap. The latter technique removes overlaps while preserving
+symmetry and structure, while the former removes overlaps more compactly
+but destroys symmetries.
+If mode is \fI"true"\fP (the default), no repositioning is done.
+
+.PP
+\fB(circo\(hyspecific attributes)\fR
+.br
+\fBroot=\fInodename\fR. Specifies the name of a node occurring in the
+root block. If the graph is disconnected, the \fBroot\fP node attribute
+can be used to specify additional root blocks.
+.PP
+\fBmindist=\fIvalue\fR. Sets the minimum separation between all nodes. If not
+specified then \fIcirco\fP uses a default value of 1.0.
+
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBK=\fIval\fR. Sets the default ideal node separation
+in the layout.
+.PP
+\fBmaxiter=\fIval\fR. Sets the maximum number of iterations used to
+layout the graph.
+.PP
+\fBstart=\fIval\fR. Adjusts the random initial placement of nodes
+with no specified position.  If \fIval\fP is is an integer,
+it is used as the seed for the random number generator.
+If \fIval\fP is not an integer, a random system\(hygenerated integer,
+such as the process ID or current time, is used as the seed.
+.PP
+
+.SH "NODE ATTRIBUTES"
+.PP
+\fBheight=\fId\fR or \fBwidth=\fId\fR sets minimum height or width.
+Adding \fBfixedsize=true\fP forces these to be the actual size
+(text labels are ignored).
+.PP
+\fBshape=record polygon epsf \fIbuiltin_polygon\fR
+.br
+\fIbuiltin_polygon\fR is one of: \fBplaintext ellipse oval circle egg 
+triangle box diamond trapezium parallelogram house hexagon octagon
+note tab box3d component.\fR
+(Polygons are defined or modified by the following node attributes:
+\fBregular\fR, \fBperipheries\fR, \fBsides\fR, \fBorientation\fR,
+\fBdistortion\fR and \fBskew\fR.)  \fBepsf\fR uses the node's
+\fBshapefile\fR attribute as the path name of an external
+EPSF file to be automatically loaded for the node shape.
+.PP
+\fBlabel=\fItext\fR where \fItext\fP may include escaped newlines
+\\\|n, \\\|l, or \\\|r for center, left, and right justified lines.
+The string '\\N' value will be replaced by the node name.
+The string '\\G' value will be replaced by the graph name.
+Record labels may contain recursive box lists delimited by { | }.
+Port identifiers in labels are set off by angle brackets < >.
+In the graph file, use colon (such as, \fBnode0:port28\fR).
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBcolor=\fIcolorvalue\fR sets the outline color, and the default fill color
+if style=filled and \fBfillcolor\fR is not specified.
+.PP
+\fBfillcolor=\fIcolorvalue\fR sets the fill color
+when style=filled.  If not specified, the fillcolor when style=filled defaults
+to be the same as the outline color.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+A \fIcolorvalue\fP may be "\fIh,s,v\fB"\fR (hue, saturation, brightness)
+floating point numbers between 0 and 1, or an X11 color name such as
+\fBwhite black red green blue yellow magenta cyan\fR or \fBburlywood\fR,
+or a "\fI#rrggbb" (red, green, blue, 2 hex characters each) value.
+.PP
+\fBstyle=filled solid dashed dotted bold invis\fP or any Postscript code.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the node's active layers.
+The empty string means no layers (invisible).
+.PP
+The following attributes apply only to polygon shape nodes:
+.PP
+\fBregular=\fIn\fR if \fIn\fR is non\(hyzero then the polygon is made 
+regular, i.e. symmetric about the x and y axis, otherwise the
+polygon takes on the aspect ratio of the label. 
+\fIbuiltin_polygons\fR that are not already regular are made regular
+by this attribute.
+\fIbuiltin_polygons\fR that are already regular are not affected (i.e.
+they cannot be made asymmetric).
+.PP
+\fBperipheries=\fIn\fR sets the number of periphery lines drawn around
+the polygon.  This value supersedes the number of periphery lines
+of \fIbuiltin_polygons\fR.
+.PP
+\fBsides=\fIn\fR sets the number of sides to the polygon. \fIn\fR<3
+results in an ellipse.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBorientation=\fIf\fR sets the orientation of the first apex of the
+polygon counterclockwise from the vertical, in degrees.
+\fIf\fR may be a floating point number.
+The orientation of labels is not affected by this attribute.
+This attribute is added to the initial orientation of \fIbuiltin_polygons.\fR
+.PP
+\fBdistortion=\fIf\fR sets the amount of broadening of the top and
+narrowing of the bottom of the polygon (relative to its orientation). 
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP                                                            
+\fBskew=\fIf\fR sets the amount of right\(hydisplacement of the top and
+left\(hydisplacement of the bottom of the polygon (relative to its
+orientation).
+Floating point values between \-1 and +1 are suggested.
+This attribute is ignored by \fIbuiltin_polygons\fR.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.
+The target string is used to determine which window of the browser is used
+for the URL.  Setting it to "_graphviz" will open a new window if it doesn't
+already exist, or reuse it if it does.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+and SVG, effective when nodes have a URL.  The tooltip string defaults to be the
+same as the label string, but this attribute permits nodes without
+labels to still have tooltips thus permitting denser graphs.
+The substrings '\\N' and '\\G' are substituted in the same manner as
+for the node label attribute.
+Additionally the substring '\\L' is substituted with the node label string.
+
+.PP
+\fB(circo\(hyspecific attributes)\fR
+.br
+\fBroot=\fItrue/false\fR. This specifies that the block containing the given
+node be treated as the root of the spanning tree in the layout.
+
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBpin=\fIval\fR. If \fIval\fR is "true", the node will remain at
+its initial position.
+
+.SH "EDGE ATTRIBUTES"
+\fBminlen=\fIn\fR where \fIn\fP is an integer factor that applies
+to the edge length (ranks for normal edges, or minimum node separation
+for flat edges).
+.PP
+\fBweight=\fIn\fR where \fIn\fP is the integer cost of the edge.
+Values greater than 1 tend to shorten the edge.  Weight 0 flat
+edges are ignored for ordering nodes.
+.PP
+\fBlabel=\fItext\fR where \fItext\fR may include escaped newlines
+\\\|n, \\\|l, or \\\|r for centered, left, or right justified lines.
+If the substring '\\T' is found in a label it will be replaced by the tail_node name.
+If the substring '\\H' is found in a label it will be replaced by the head_node name.
+If the substring '\\E' value is found in a label it will be replaced by: tail_node_name\->head_node_name
+If the substring '\\G' is found in a label it will be replaced by the graph name.
+or by: tail_node_name\-\-head_node_name for undirected graphs.
+.PP
+\fBfontsize=\fIn\fR sets the label type size to \fIn\fP points.
+.PP
+\fBfontname=\fIname\fR sets the label font family name.
+.PP
+\fBfontcolor=\fIcolorvalue\fR sets the label text color.
+.PP
+\fBstyle=solid dashed dotted bold invis\fP
+.PP
+\fBcolor=\fIcolorvalue\fR sets the line color for edges.
+.PP
+\fBcolor=\fIcolorvaluelist\fR a ':' separated list of \fIcolorvalue\fR creates
+parallel edges, one edge for each color.
+.PP
+\fBdir=forward back both none\fP controls arrow direction.
+.PP
+\fBtailclip,headclip=false\fP disables endpoint shape clipping.
+.PP
+\fBhref=\fI"url"\fR sets the url for the node in imagemap, PostScript and SVG
+files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBURL=\fI"url"\fR ("URL" is a synonym for "href".)
+.PP
+\fBtarget=\fI"target"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edges have a URL.
+If the target string is empty, the default,
+then no target attribute is included in the output.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when edges have a URL.  The tooltip string defaults to be the
+same as the edge label string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBarrowhead,arrowtail=none, normal, inv, dot, odot, invdot, invodot,
+tee, empty, invempty, open, halfopen, diamond, odiamond, box, obox, crow\fP.
+.PP
+\fBarrowsize\fP (norm_length=10,norm_width=5,
+inv_length=6,inv_width=7,dot_radius=2) 
+.PP
+\fBheadlabel,taillabel=string\fP for port labels.
+\fBlabelfontcolor\fP,\fBlabelfontname\fP,\fBlabelfontsize\fP
+for head and tail labels.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadhref=\fI"url"\fR sets the url for the head port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadURL=\fI"url"\fR ("headURL" is a synonym for "headhref".)
+.PP
+\fBheadtarget=\fI"headtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge heads have a URL.
+The headtarget string is used to determine which window of the browser is used
+for the URL.  If the headtarget string is empty, the default,
+then headtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBheadtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when head ports have a URL.  The tooltip string defaults to be the
+same as the headlabel string. 
+The substrings '\\T', '\\H', and '\\E' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailhref=\fI"url"\fR sets the url for the tail port in imagemap, PostScript and SVG files.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailURL=\fI"url"\fR ("tailURL" is a synonym for "tailhref".)
+.PP
+\fBtailtarget=\fI"tailtarget"\fR is a target string for client\(hyside imagemaps
+and SVG, effective when edge tails have a URL.
+The tailtarget string is used to determine which window of the browser is used
+for the URL.  If the tailtarget string is empty, the default,
+then tailtarget defaults to the same value as target for the edge.
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBtailtooltip=\fI"tooltip"\fR is a tooltip string for client\(hyside imagemaps
+effective when tail ports have a URL.  The tooltip string defaults to be the
+same as the taillabel string. 
+The substrings '\\T', '\\H', '\\E' and '\\G' are substituted in the same manner as
+for the edge label attribute.
+Additionally the substring '\\L' is substituted with the edge label string.
+.PP
+\fBlabeldistance\fP and \fPport_label_distance\fP set distance; also
+\fBlabelangle\fP (in degrees CCW)
+.PP
+\fBdecorate\fP draws line from edge to label.
+.PP
+\fBsamehead,sametail\fP aim edges having the same value to the
+same port, using the average landing point.
+.PP
+\fBconstraint=false\fP causes an edge to be ignored for rank assignment.
+.PP
+\fBlayer=\fIid\fR or \fIid:id\fR or "all" sets the edge's active layers.
+The empty string means no layers (invisible).
+
+.PP
+\fB(neato\(hyspecific attributes)\fR
+.br
+\fBw=\fIf\fR sets the weight (spring constant) of an edge
+to the given floating point value.  The default is 1.0;
+greater values make the edge tend more toward its optimal length.
+.PP
+\fBlen=\fIf\fR sets the optimal length of an edge.
+The default is 1.0.
+.PP
+\fB(fdp\(hyspecific attributes)\fR
+.br
+\fBweight=\fIf\fR sets the weight of an edge
+to the given floating point value. The default is 1.0;
+greater values make the edge tend more toward its optimal length.
+.SH "COMMAND LINE OPTIONS"
+\fB\-G\fP sets a default graph attribute.
+.br
+\fB\-N\fP sets a default node attribute.
+.br
+\fB\-E\fP sets a default edge attribute.
+Example: \fB\-Gsize="7,8" \-Nshape=box \-Efontsize=8\fR
+.PP
+\fB\-l\fIfile\fR loads custom PostScript library files.
+Usually these define custom shapes or styles.
+If \fB\-l\fP is given by itself, the standard library is omitted.
+.PP
+\fB\-T\fIlang\fR sets the output language as described above.
+
+.PP
+\fB\-n\fR[\fB1\fR|\fB2\fR] (no\(hyop)
+If set, neato assumes nodes have already been positioned and all
+nodes have a pos attribute giving the positions.
+It then performs an optional adjustment to remove node\(hynode overlap,
+depending on the value of the overlap attribute,
+computes the edge layouts, depending on the value of the \fBsplines\fR attribute,
+and emits the graph in the appropriate format.
+If num is supplied, the following actions occur:
+.nf
+    num = 1
+.fi
+Equivalent to \-n.
+.nf
+    num > 1
+.fi
+Use node positions as specified,
+with no adjustment to remove node\(hynode overlaps,
+and use any edge layouts already specified by the pos attribute.
+neato computes an edge layout for any edge that does not have a pos attribute.
+As usual, edge layout is guided by the \fBsplines\fR attribute.
+.PP
+\fB\-K\fIlayout\fR override the default layout engine implied by the command name.
+.PP
+\fB\-O\fP automatically generate output filenames based on the input filename and the -T format.
+.PP
+\fB\-P\fP generate a graph of the currently available plugins.
+.PP
+\fB\-v\fP (verbose) prints various information useful for debugging.
+.PP
+\fB\-V\fP (version) prints version information and exits.
+.PP
+\fB\-?\fP prints the usage and exits.
+.SH "EXAMPLES"
+.nf
+digraph test123 {
+        a \-> b \-> c;
+        a \-> {x y};
+        b [shape=box];
+        c [label="hello\\\|nworld",color=blue,fontsize=24,
+             fontname="Palatino\-Italic",fontcolor=red,style=filled];
+        a \-> z [label="hi", weight=100];
+        x \-> z [label="multi\-line\\\|nlabel"];
+        edge [style=dashed,color=red];
+        b \-> x;
+        {rank=same; b x}
+}
+.fi
+.PP
+.nf
+graph test123 {
+        a \-\- b \-\- c;
+        a \-\- {x y};
+        x \-\- c [w=10.0];
+        x \-\- y [w=5.0,len=3];
+}
+.fi
+.SH "CAVEATS"
+Edge splines can overlap unintentionally.
+.PP
+Flat edge labels are slightly broken.
+Intercluster edge labels are totally broken.
+.PP
+Because unconstrained optimization is employed, node boxes can
+possibly overlap or touch unrelated edges.  All existing
+spring embedders seem to have this limitation.
+.PP
+Apparently reasonable attempts to pin nodes or adjust edge lengths
+and weights can cause instability.
+.SH AUTHORS
+Stephen C. North <north@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.br
+John C. Ellson <ellson@research.att.com>
+.PP
+The bitmap driver (PNG, GIF etc) is by Thomas Boutell, <http://www.boutell.com/gd>
+.PP
+The Truetype font renderer is from
+the Freetype Project (David Turner, Robert Wilhelm, and Werner Lemberg)
+(who can be contacted at freetype\-devel@lists.lrz\-muenchen.de).
+.SH "SEE ALSO"
+This man page contains only a small amount of the information related
+to the Graphviz layout programs. The most complete information can be
+found at http://www.graphviz.org/Documentation.php, especially in the
+on\(hyline reference pages. Most of these documents are also available in the
+\fIdoc\fP and \fIdoc/info\fP subtrees in the source and binary distributions.
+.PP
+dotty(1)
+.br
+tcldot(n)
+.br
+xcolors(1)
+.br
+libgraph(3)
+.PP
+E. R. Gansner, S. C. North,  K. P. Vo, "DAG \(hy A Program to Draw Directed Graphs", Software \(hy Practice and Experience 17(1), 1988, pp. 1047\(hy1062.
+.br
+E. R. Gansner, E. Koutsofios, S. C. North,  K. P. Vo, "A Technique for Drawing Directed Graphs," IEEE Trans. on Soft. Eng. 19(3), 1993, pp. 214\(hy230.
+.br
+S. North and E. Koutsofios, "Applications of graph visualization",
+Graphics Interface 94, pp. 234\(hy245.
+.br
+E. Koutsofios and S. C. North, "Drawing Graphs with dot," 
+Available on research.att.com in dist/drawdag/dotguide.ps.Z.
+.br
+S. C. North, "NEATO User's Manual".
+Available on research.att.com in dist/drawdag/neatodoc.ps.Z.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man1/unflatten.1	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,58 @@
+.TH UNFLATTEN 1 "21 January 2001"
+.SH NAME
+unflatten \- adjust directed graphs to improve layout aspect ratio
+.SH SYNOPSIS
+.B unflatten
+[\fB\-f\fR]
+[\fB\-l\fIlen\fR]
+[\fB\-c\fIlen\fR
+] [
+.B \-o
+.I outfile
+]
+[ files ]
+.SH DESCRIPTION
+.B unflatten
+is a preprocessor to 
+.B dot
+that is
+used to improve the aspect ratio of graphs having many leaves 
+or disconnected nodes.
+The usual layout for such a graph is generally very wide or tall.  
+.B unflatten
+inserts invisible edges or adjusts the \fBminlen\fP on edges
+to improve layout compaction.
+.SH OPTIONS
+The following options are supported:
+.TP
+.BI \-l " len"
+The minimum length of leaf edges is staggered
+between 1 and \fIlen\fP (a small integer).  
+.TP
+.B \-f
+Enables the staggering of the \fB-l\fP option to fanout nodes whose
+indegree and outdegree are both 1. This helps with structures such
+as \fIa -> {w x y z} -> b\fP.
+This option only works if the \fB-l\fP flag is set. 
+.TP
+.BI \-c " len"
+Form disconnected nodes into chains of up to \fIlen\fP nodes.
+.TP
+.BI \-o " outfile"
+causes the output to be written to the specified file; by default,
+output is written to \fBstdout\fP.
+.SH OPERANDS
+The following operand is supported:
+.TP 8
+.I files
+Names of files containing 1 or more graphs in dot format.
+If no
+.I files
+operand is specified,
+the standard input will be used.
+.SH AUTHORS
+Stephen C. North <north@research.att.com>
+.br
+Emden R. Gansner <erg@research.att.com>
+.SH "SEE ALSO"
+gc(1), dot(1), acyclic(1), gvpr(1), gvcolor(1), ccomps(1), tred(1), libgraph(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man3/cdt.3	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,483 @@
+.TH LIBCDT 3
+.SH NAME
+\fBCdt\fR \- container data types
+.SH SYNOPSIS
+.de Tp
+.fl
+.ne 2
+.TP
+..
+.de Ss
+.fl
+.ne 2
+.SS "\\$1"
+..
+.de Cs
+.nf
+.ft 5
+..
+.de Ce
+.ft 1
+.fi
+..
+.ta 1.0i 2.0i 3.0i 4.0i 5.0i
+.Cs
+#include <graphviz/cdt.h>
+.Ce
+.Ss "DICTIONARY TYPES"
+.Cs
+Void_t*;
+Dt_t;
+Dtdisc_t;
+Dtmethod_t;
+Dtlink_t;
+Dtstat_t;
+.Ce
+.Ss "DICTIONARY CONTROL"
+.Cs
+Dt_t*       dtopen(Dtdisc_t* disc, Dtmethod_t* meth);
+int         dtclose(Dt_t* dt);
+void        dtclear(dt);
+Dtmethod_t* dtmethod(Dt_t* dt, Dtmethod_t* meth);
+Dtdisc_t*   dtdisc(Dt_t* dt, Dtdisc_t* disc, int type);
+Dt_t*       dtview(Dt_t* dt, Dt_t* view);
+.Ce
+.Ss "STORAGE METHODS"
+.Cs
+Dtmethod_t* Dtset;
+Dtmethod_t* Dtbag;
+Dtmethod_t* Dtoset;
+Dtmethod_t* Dtobag;
+Dtmethod_t* Dtlist;
+Dtmethod_t* Dtstack;
+Dtmethod_t* Dtqueue;
+.Ce
+.Ss "DISCIPLINE"
+.Cs
+typedef Void_t*      (*Dtmake_f)(Dt_t*, Void_t*, Dtdisc_t*);
+typedef void         (*Dtfree_f)(Dt_t*, Void_t*, Dtdisc_t*);
+typedef int          (*Dtcompar_f)(Dt_t*, Void_t*, Void_t*, Dtdisc_t*);
+typedef unsigned int (*Dthash_f)(Dt_t*, Void_t*, Dtdisc_t*);
+typedef Void_t*      (*Dtmemory_f)(Dt_t*, Void_t*, size_t, Dtdisc_t*);
+typedef int          (*Dtevent_f)(Dt_t*, int, Void_t*, Dtdisc_t*);
+.Ce
+.Ss "OBJECT OPERATIONS"
+.Cs
+Void_t*   dtinsert(Dt_t* dt, Void_t* obj);
+Void_t*   dtdelete(Dt_t* dt, Void_t* obj);
+Void_t*   dtsearch(Dt_t* dt, Void_t* obj);
+Void_t*   dtmatch(Dt_t* dt, Void_t* key);
+Void_t*   dtfirst(Dt_t* dt);
+Void_t*   dtnext(Dt_t* dt, Void_t* obj);
+Void_t*   dtlast(Dt_t* dt);
+Void_t*   dtprev(Dt_t* dt, Void_t* obj);
+Void_t*   dtfinger(Dt_t* dt);
+Void_t*   dtrenew(Dt_t* dt, Void_t* obj);
+int       dtwalk(Dt_t* dt, int (*userf)(Dt_t*, Void_t*, Void_t*), Void_t*);
+Dtlink_t* dtflatten(Dt_t* dt);
+Dtlink_t* dtlink(Dt_t*, Dtlink_t* link);
+Void_t*   dtobj(Dt_t* dt, Dtlink_t* link);
+Dtlink_t* dtextract(Dt_t* dt);
+int       dtrestore(Dt_t* dt, Dtlink_t* link);
+.Ce
+.Ss "DICTIONARY STATUS"
+.Cs
+Dt_t*     dtvnext(Dt_t* dt);
+int       dtvcount(Dt_t* dt);
+Dt_t*     dtvhere(Dt_t* dt);
+int       dtsize(Dt_t* dt);
+int       dtstat(Dt_t* dt, Dtstat_t*, int all);
+.Ce
+.Ss "HASH FUNCTIONS"
+.Cs
+unsigned int dtstrhash(unsigned int h, char* str, int n);
+unsigned int dtcharhash(unsigned int h, unsigned char c);
+.Ce
+.SH DESCRIPTION
+.PP
+\fICdt\fP manages run-time dictionaries using standard container data types:
+unordered set/multiset, ordered set/multiset, list, stack, and queue.
+.PP
+.Ss "DICTIONARY TYPES"
+.PP
+.Ss "  Void_t*"
+This type is used to pass objects between \fICdt\fP and application code.
+\f5Void_t\fP is defined as \f5void\fP for ANSI-C and C++
+and \f5char\fP for other compilation environments.
+.PP
+.Ss "  Dt_t"
+This is the type of a dictionary handle.
+.PP
+.Ss "  Dtdisc_t"
+This defines the type of a discipline structure which describes
+object lay-out and manipulation functions.
+.PP
+.Ss "  Dtmethod_t"
+This defines the type of a container method.
+.PP
+.Ss "  Dtlink_t"
+This is the type of a dictionary object holder (see \f5dtdisc()\fP.)
+.PP
+.Ss "  Dtstat_t"
+This is the type of a structure to return dictionary statistics (see \f5dtstat()\fP.)
+.PP
+.Ss "DICTIONARY CONTROL"
+.PP
+.Ss "  Dt_t* dtopen(Dtdisc_t* disc, Dtmethod_t* meth)"
+This creates a new dictionary.
+\f5disc\fP is a discipline structure to describe object format.
+\f5meth\fP specifies a manipulation method.
+\f5dtopen()\fP returns the new dictionary or \f5NULL\fP on error.
+.PP
+.Ss "  int dtclose(Dt_t* dt)"
+This deletes \f5dt\fP and its objects.
+Note that \f5dtclose()\fP fails if \f5dt\fP is being viewed by
+some other dictionaries (see \f5dtview()\fP).
+\f5dtclose()\fP returns \f50\fP on success and \f5-1\fP on error.
+.PP
+.Ss "  void dtclear(Dt_t* dt)"
+This deletes all objects in \f5dt\fP without closing \f5dt\fP.
+.PP
+.Ss "  Dtmethod_t dtmethod(Dt_t* dt, Dtmethod_t* meth)"
+If \f5meth\fP is \f5NULL\fP, \f5dtmethod()\fP returns the current method.
+Otherwise, it changes the storage method of \f5dt\fP to \f5meth\fP.
+Object order remains the same during a
+method switch among \f5Dtlist\fP, \f5Dtstack\fP and \f5Dtqueue\fP.
+Switching to and from \f5Dtset/Dtbag\fP and \f5Dtoset/Dtobag\fP may cause
+objects to be rehashed, reordered, or removed as the case requires.
+\f5dtmethod()\fP returns the previous method or \f5NULL\fP on error.
+.PP
+.Ss "  Dtdisc_t* dtdisc(Dt_t* dt, Dtdisc_t* disc, int type)"
+If \f5disc\fP is \f5NULL\fP, \f5dtdisc()\fP returns the current discipline.
+Otherwise, it changes the discipline of \f5dt\fP to \f5disc\fP.
+Objects may be rehashed, reordered, or removed as appropriate.
+\f5type\fP can be any bit combination of \f5DT_SAMECMP\fP and \f5DT_SAMEHASH\fP.
+\f5DT_SAMECMP\fP means that objects will compare exactly the same as before
+thus obviating the need for reordering or removing new duplicates.
+\f5DT_SAMEHASH\fP means that hash values of objects remain the same
+thus obviating the need to rehash.
+\f5dtdisc()\fP returns the previous discipline on success
+and \f5NULL\fP on error.
+.PP
+.Ss "  Dt_t* dtview(Dt_t* dt, Dt_t* view)"
+A viewpath allows a search or walk starting from a dictionary to continue to another.
+\f5dtview()\fP first terminates any current view from \f5dt\fP to another dictionary.
+Then, if \f5view\fP is \f5NULL\fP, \f5dtview\fP returns the terminated view dictionary.
+If \f5view\fP is not \f5NULL\fP, a viewpath from \f5dt\fP to \f5view\fP is established.
+\f5dtview()\fP returns \f5dt\fP on success and \f5NULL\fP on error.
+.PP
+If two dictionaries on the same viewpath have the same values for the discipline fields
+\f5Dtdisc_t.link\fP, \f5Dtdisc_t.key\fP, \f5Dtdisc_t.size\fP, and \f5Dtdisc_t.hashf\fP,
+it is expected that key hashing will be the same.
+If not, undefined behaviors may result during a search or a walk.
+.PP
+.Ss "STORAGE METHODS"
+.PP
+Storage methods are of type \f5Dtmethod_t*\fP.
+\fICdt\fP supports the following methods:
+.PP
+.Ss "  Dtoset"
+.Ss "  Dtobag"
+Objects are ordered by comparisons.
+\f5Dtoset\fP keeps unique objects.
+\f5Dtobag\fP allows repeatable objects.
+.PP
+.Ss "  Dtset"
+.Ss "  Dtbag"
+Objects are unordered.
+\f5Dtset\fP keeps unique objects.
+\f5Dtbag\fP allows repeatable objects and always keeps them together
+(note the effect on dictionary walking.)
+.PP
+.Ss "  Dtlist"
+Objects are kept in a list.
+New objects are inserted either
+in front of \fIcurrent object\fP (see \f5dtfinger()\fP) if this is defined
+or at list front if there is no current object.
+.PP
+.Ss "  Dtstack"
+Objects are kept in a stack, i.e., in reverse order of insertion.
+Thus, the last object inserted is at stack top
+and will be the first to be deleted.
+.PP
+.Ss "  Dtqueue"
+Objects are kept in a queue, i.e., in order of insertion.
+Thus, the first object inserted is at queue head
+and will be the first to be deleted.
+.PP
+.Ss "DISCIPLINE"
+.PP
+Object format and associated management functions are
+defined in the type \f5Dtdisc_t\fP:
+.Cs
+    typedef struct
+    { int        key, size;
+      int        link;
+      Dtmake_f   makef;
+      Dtfree_f   freef;
+      Dtcompar_f comparf;
+      Dthash_f   hashf;
+      Dtmemory_f memoryf;
+      Dtevent_f  eventf;
+    } Dtdisc_t;
+.Ce
+.Ss "  int key, size"
+Each object \f5obj\fP is identified by a key used for object comparison or hashing.
+\f5key\fP should be non-negative and defines an offset into \f5obj\fP.
+If \f5size\fP is negative, the key is a null-terminated
+string with starting address \f5*(Void_t**)((char*)obj+key)\fP.
+If \f5size\fP is zero, the key is a null-terminated string with starting address
+\f5(Void_t*)((char*)obj+key)\fP.
+Finally, if \f5size\fP is positive, the key is a byte array of length \f5size\fP
+starting at \f5(Void_t*)((char*)obj+key)\fP.
+.PP
+.Ss "  int link"
+Let \f5obj\fP be an object to be inserted into \f5dt\fP as discussed below.
+If \f5link\fP is negative, an internally allocated object holder is used
+to hold \f5obj\fP. Otherwise, \f5obj\fP should have
+a \f5Dtlink_t\fP structure embedded \f5link\fP bytes into it,
+i.e., at address \f5(Dtlink_t*)((char*)obj+link)\fP.
+.PP
+.Ss "  Void_t* (*makef)(Dt_t* dt, Void_t* obj, Dtdisc_t* disc)"
+If \f5makef\fP is not \f5NULL\fP,
+\f5dtinsert(dt,obj)\fP will call it
+to make a copy of \f5obj\fP suitable for insertion into \f5dt\fP.
+If \f5makef\fP is \f5NULL\fP, \f5obj\fP itself will be inserted into \f5dt\fP.
+.PP
+.Ss "  void (*freef)(Dt_t* dt, Void_t* obj, Dtdisc_t* disc)"
+If not \f5NULL\fP,
+\f5freef\fP is used to destroy data associated with \f5obj\fP.
+.PP
+.Ss "int (*comparf)(Dt_t* dt, Void_t* key1, Void_t* key2, Dtdisc_t* disc)"
+If not \f5NULL\fP, \f5comparf\fP is used to compare two keys.
+Its return value should be \f5<0\fP, \f5=0\fP, or \f5>0\fP to indicate
+whether \f5key1\fP is smaller, equal to, or larger than \f5key2\fP.
+All three values are significant for method \f5Dtoset\fP and \f5Dtobag\fP.
+For other methods, a zero value
+indicates equality and a non-zero value indicates inequality.
+If \f5(*comparf)()\fP is \f5NULL\fP, an internal function is used
+to compare the keys as defined by the \f5Dtdisc_t.size\fP field.
+.PP
+.Ss "  unsigned int (*hashf)(Dt_t* dt, Void_t* key, Dtdisc_t* disc)"
+If not \f5NULL\fP,
+\f5hashf\fP is used to compute the hash value of \f5key\fP.
+It is required that keys compared equal will also have same hash values.
+If \f5hashf\fP is \f5NULL\fP, an internal function is used to hash
+the key as defined by the \f5Dtdisc_t.size\fP field.
+.PP
+.Ss "  Void_t* (*memoryf)(Dt_t* dt, Void_t* addr, size_t size, Dtdisc_t* disc)"
+If not \f5NULL\fP, \f5memoryf\fP is used to allocate and free memory.
+When \f5addr\fP is \f5NULL\fP, a memory segment of size \f5size\fP is requested. 
+If \f5addr\fP is not \f5NULL\fP and \f5size\fP is zero, \f5addr\fP is to be freed.
+If \f5addr\fP is not \f5NULL\fP and \f5size\fP is positive,
+\f5addr\fP is to be resized to the given size.
+If \f5memoryf\fP is \f5NULL\fP, \fImalloc(3)\fP is used.
+When dictionaries share memory,
+a record of the first allocated memory segment should be kept
+so that it can be used to initialize new dictionaries (see below.)
+.PP
+.Ss "  int (*eventf)(Dt_t* dt, int type, Void_t* data, Dtdisc_t* disc)"
+If not \f5NULL\fP, \f5eventf\fP announces various events.
+If it returns a negative value, the calling operation will terminate with failure.
+Unless noted otherwise, a non-negative return value let the
+calling function proceed normally. Following are the events:
+.Tp
+\f5DT_OPEN\fP:
+\f5dt\fP is being opened.
+If \f5eventf\fP returns zero, the opening process proceeds normally.
+A positive return value indicates that \f5dt\fP
+uses memory already initialized by a different dictionary.
+In that case, \f5*(Void_t**)data\fP should be set to
+the first allocated memory segment as discussed in \f5memoryf\fP.
+\f5dtopen()\fP may fail if this segment is not returned or
+if it has not been properly initialized.
+.Tp
+\f5DT_CLOSE\fP:
+\f5dt\fP is being closed.
+.Tp
+\f5DT_DISC\fP:
+The discipline of \f5dt\fP is being changed to a new one given in
+\f5(Dtdisc_t*)data\fP.
+.Tp
+\f5DT_METH\fP:
+The method of \f5dt\fP is being changed to a new one given in
+\f5(Dtmethod_t*)data\fP.
+.PP
+.Ss "OBJECT OPERATIONS"
+.PP
+.Ss "  Void_t* dtinsert(Dt_t* dt, Void_t* obj)"
+This inserts an object prototyped by \f5obj\fP into \f5dt\fP.
+If there is an existing object in \f5dt\fP matching \f5obj\fP
+and the storage method is \f5Dtset\fP or \f5Dtoset\fP,
+\f5dtinsert()\fP will simply return the matching object.
+Otherwise, a new object is inserted according to the method in use.
+See \f5Dtdisc_t.makef\fP for object construction.
+\f5dtinsert()\fP returns the new object, a matching object as noted,
+or \f5NULL\fP on error.
+.PP
+.Ss "  Void_t* dtdelete(Dt_t* dt, Void_t* obj)"
+If \f5obj\fP is not \f5NULL\fP, the first object matching it is deleted.
+If \f5obj\fP is \f5NULL\fP, methods \f5Dtstack\fP and \f5Dtqueue\fP
+delete respectively stack top or queue head while other methods do nothing.
+See \f5Dtdisc_t.freef\fP for object destruction.
+\f5dtdelete()\fP returns the deleted object (even if it was deallocated)
+or \f5NULL\fP on error.
+.PP
+.Ss "  Void_t* dtsearch(Dt_t* dt, Void_t* obj)"
+.Ss "  Void_t* dtmatch(Dt_t* dt, Void_t* key)"
+These functions find an object matching \f5obj\fP or \f5key\fP either from \f5dt\fP or
+from some dictionary accessible from \f5dt\fP via a viewpath (see \f5dtview()\fP.)
+\f5dtsearch()\fP and \f5dtmatch()\fP return the matching object or
+\f5NULL\fP on failure.
+.PP
+.Ss "  Void_t* dtfirst(Dt_t* dt)"
+.Ss "  Void_t* dtnext(Dt_t* dt, Void_t* obj)"
+\f5dtfirst()\fP returns the first object in \f5dt\fP.
+\f5dtnext()\fP returns the object following \f5obj\fP.
+Objects are ordered based on the storage method in use.
+For \f5Dtoset\fP and \f5Dtobag\fP, objects are ordered by object comparisons.
+For \f5Dtstack\fP, objects are ordered in reverse order of insertion.
+For \f5Dtqueue\fP, objects are ordered in order of insertion.
+For \f5Dtlist\fP, objects are ordered by list position.
+For \f5Dtset\fP and \f5Dtbag\fP,
+objects use some internal ordering which
+may change on any search, insert, or delete operations.
+Therefore, these operations should not be used
+during a walk on a dictionary using either \f5Dtset\fP or \f5Dtbag\fP.
+.PP
+Objects in a dictionary or a viewpath can be walked using 
+a \f5for(;;)\fP loop as below.
+Note that only one loop can be used at a time per dictionary.
+Concurrent or nested loops may result in unexpected behaviors.
+.Cs
+    for(obj = dtfirst(dt); obj; obj = dtnext(dt,obj))
+.Ce
+.Ss "  Void_t* dtlast(Dt_t* dt)"
+.Ss "  Void_t* dtprev(Dt_t* dt, Void_t* obj)"
+\f5dtlast()\fP and \f5dtprev()\fP are like \f5dtfirst()\fP and \f5dtnext()\fP
+but work in reverse order.
+Note that dictionaries on a viewpath are still walked in order
+but objects in each dictionary are walked in reverse order.
+.PP
+.Ss "  Void_t* dtfinger(Dt_t* dt)"
+This function returns the \fIcurrent object\fP of \f5dt\fP, if any.
+The current object is defined after a successful call to one of
+\f5dtsearch()\fP, \f5dtmatch()\fP, \f5dtinsert()\fP,
+\f5dtfirst()\fP, \f5dtnext()\fP, \f5dtlast()\fP, or \f5dtprev()\fP.
+As a side effect of this implementation of \fICdt\fP,
+when a dictionary is based on \f5Dtoset\fP and \f5Dtobag\fP,
+the current object is always defined and is the root of the tree.
+.PP
+.Ss "  Void_t* dtrenew(Dt_t* dt, Void_t* obj)"
+This function repositions and perhaps rehashes
+an object \f5obj\fP after its key has been changed.
+\f5dtrenew()\fP only works if \f5obj\fP is the current object (see \f5dtfinger()\fP).
+.PP
+.Ss "  dtwalk(Dt_t* dt, int (*userf)(Dt_t*, Void_t*, Void_t*), Void_t* data)"
+This function calls \f5(*userf)(walk,obj,data)\fP on each object in \f5dt\fP and
+other dictionaries viewable from it.
+\f5walk\fP is the dictionary containing \f5obj\fP.
+If \f5userf()\fP returns a \f5<0\fP value,
+\f5dtwalk()\fP terminates and returns the same value.
+\f5dtwalk()\fP returns \f50\fP on completion.
+.PP
+.Ss "  Dtlink_t* dtflatten(Dt_t* dt)"
+.Ss "  Dtlink_t* dtlink(Dt_t* dt, Dtlink_t* link)"
+.Ss "  Void_t* dtobj(Dt_t* dt, Dtlink_t* link)"
+Using \f5dtfirst()/dtnext()\fP or \f5dtlast()/dtprev()\fP
+to walk a single dictionary can incur significant cost due to function calls.
+For efficient walking of a single directory (i.e., no viewpathing),
+\f5dtflatten()\fP and \f5dtlink()\fP can be used.
+Objects in \f5dt\fP are made into a linked list and walked as follows:
+.Cs
+    for(link = dtflatten(dt); link; link = dtlink(dt,link) )
+.Ce
+.PP
+Note that \f5dtflatten()\fP returns a list of type \f5Dtlink_t*\fP,
+not \f5Void_t*\fP. That is, it returns a dictionary holder pointer,
+not a user object pointer
+(although both are the same if the discipline field \f5link\fP is non-negative.)
+The macro function \f5dtlink()\fP
+returns the dictionary holder object following \f5link\fP.
+The macro function \f5dtobj(dt,link)\fP
+returns the user object associated with \f5link\fP,
+Beware that the flattened object list is unflattened on any
+dictionary operations other than \f5dtlink()\fP.
+.PP
+.Ss "  Dtlink_t* dtextract(Dt_t* dt)"
+.Ss "  int dtrestore(Dt_t* dt, Dtlink_t* link)"
+\f5dtextract()\fP extracts all objects from \f5dt\fP and makes it appear empty.
+\f5dtrestore()\fP repopulates \f5dt\fP with
+objects previously obtained via \f5dtextract()\fP.
+\f5dtrestore()\fP will fail if \f5dt\fP is not empty.
+These functions can be used
+to share a same \f5dt\fP handle among many sets of objects.
+They are useful to reduce dictionary overhead
+in an application that creates concurrently many dictionaries.
+It is important that the same discipline and method are in use at both
+extraction and restoration. Otherwise, undefined behaviors may result.
+.PP
+.Ss "DICTIONARY INFORMATION"
+.PP
+.Ss "  Dt_t* dtvnext(Dt_t* dt)"
+This returns the dictionary that \f5dt\fP is viewing, if any.
+.Ss "  int dtvcount(Dt_t* dt)"
+This returns the number of dictionaries that view \f5dt\fP.
+.Ss "  Dt_t* dtvhere(Dt_t* dt)"
+This returns the dictionary \f5v\fP viewable from \f5dt\fP
+where an object was found from the most recent search or walk operation.
+.Ss "  int dtsize(Dt_t* dt)"
+This function returns the number of objects stored in \f5dt\fP.
+.PP
+.Ss "  int dtstat(Dt_t *dt, Dtstat_t* st, int all)"
+This function reports dictionary statistics.
+If \f5all\fP is non-zero, all fields of \f5st\fP are filled.
+Otherwise, only the \f5dt_type\fP and \f5dt_size\fP fields are filled.
+It returns \f50\fP on success and \f5-1\fP on error.
+.PP
+\f5Dtstat_t\fP contains the below fields:
+.Tp
+\f5int dt_type\fP:
+This is one of \f5DT_SET\fP, \f5DT_BAG\fP, \f5DT_OSET\fP, \f5DT_OBAG\fP,
+\f5DT_LIST\fP, \f5DT_STACK\fP, and \f5DT_QUEUE\fP.
+.Tp
+\f5int dt_size\fP:
+This contains the number of objects in the dictionary.
+.Tp
+\f5int dt_n\fP:
+For \f5Dtset\fP and \f5Dtbag\fP,
+this is the number of non-empty chains in the hash table.
+For \f5Dtoset\fP and \f5Dtobag\fP,
+this is the deepest level in the tree (counting from zero.)
+Each level in the tree contains all nodes of equal distance from the root node.
+\f5dt_n\fP and the below two fields are undefined for other methods.
+.Tp
+\f5int dt_max\fP:
+For \f5Dtbag\fP and \f5Dtset\fP, this is the size of a largest chain.
+For \f5Dtoset\fP and \f5Dtobag\fP, this is the size of a largest level.
+.Tp
+\f5int* dt_count\fP:
+For \f5Dtset\fP and \f5Dtbag\fP,
+this is the list of counts for chains of particular sizes.
+For example, \f5dt_count[1]\fP is the number of chains of size \f51\fP.
+For \f5Dtoset\fP and \f5Dtobag\fP, this is the list of sizes of the levels.
+For example, \f5dt_count[1]\fP is the size of level \f51\fP.
+.PP
+.Ss "HASH FUNCTIONS"
+.PP
+.Ss "  unsigned int dtcharhash(unsigned int h, char c)"
+.Ss "  unsigned int dtstrhash(unsigned int h, char* str, int n)"
+These functions compute hash values from bytes or strings.
+\f5dtcharhash()\fP computes a new hash value from byte \f5c\fP and seed value \f5h\fP.
+\f5dtstrhash()\fP computes a new hash value from string \f5str\fP and seed value \f5h\fP.
+If \f5n\fP is positive, \f5str\fP is a byte array of length \f5n\fP;
+otherwise, \f5str\fP is a null-terminated string.
+.PP
+.SH IMPLEMENTATION NOTES
+\f5Dtset\fP and \f5Dtbag\fP are based on hash tables with
+move-to-front collision chains.
+\f5Dtoset\fP and \f5Dtobag\fP are based on top-down splay trees.
+\f5Dtlist\fP, \f5Dtstack\fP and \f5Dtqueue\fP are based on doubly linked list.
+.PP
+.SH AUTHOR
+Kiem-Phong Vo, kpv@research.att.com
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man3/cgraph.3	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,522 @@
+.de P0
+.nf
+\f5
+..
+.de P1
+\fP
+.fi
+..
+.de Ss
+.fl
+.ne 2
+.SS "\\$1"
+..
+.TH LIBCGRAPH 3 "30 JULY 2007"
+.SH "NAME"
+\fBlibcgraph\fR \- abstract graph library
+.SH "SYNOPSIS"
+."ta .75i 1.5i 2.25i 3i 3.75i 4.5i 5.25i 6i
+.PP
+.nf
+.P0
+#include <graphviz/cgraph.h>
+.P1
+.SS "TYPES"
+.P0
+Agraph_t;
+Agnode_t;
+Agedge_t;
+Agdesc_t;
+Agdisc_t;
+Agsym_t;
+.P1
+.SS "GRAPHS"
+.P0
+Agraph_t        *agopen(char *name, Agdesc_t kind, Agdisc_t *disc);
+int             agclose(Agraph_t *g);
+Agraph_t        *agread(void *channel, Agdisc_t *);
+void			agreadline(int line_no);
+void			agsetfile(char *file_name);
+Agraph_t		*agconcat(Agraph_t *g, void *channel, Agdisc_t *disc)
+int             agwrite(Agraph_t *g, void *channel);
+int				agnnodes(Agraph_t *g),agnedges(Agraph_t *g);
+int				agisdirected(Agraph_t * g),agisundirected(Agraph_t * g),agisstrict(Agraph_t * g), agissimple(Agraph_t * g); 
+.SS "SUBGRAPHS"
+.P0
+Agraph_t        *agsubg(Agraph_t *g, char *name, int createflag);
+Agraph_t		*agidsubg(Agraph_t * g, unsigned long id, int cflag);
+Agraph_t        *agfstsubg(Agraph_t *g), agnxtsubg(Agraph_t *);
+Agraph_t        *agparent(Agraph_t *g);
+int				agdelsubg(Agraph_t * g, Agraph_t * sub);	/* same as agclose() */
+.P1
+.SS "NODES"
+.P0
+Agnode_t        *agnode(Agraph_t *g, char *name, int createflag);
+Agnode_t        *agidnode(Agraph_t *g, ulong id, int createflag);
+Agnode_t        *agsubnode(Agraph_t *g, Agnode_t *n, int createflag);
+Agnode_t        *agfstnode(Agraph_t *g);
+Agnode_t        *agnxtnode(Agraph_t *g, Agnode_t *n);
+Agnode_t        *agprvnode(Agraph_t *g, Agnode_t *n);
+Agnode_t        *aglstnode(Agraph_t *g);
+int             agdelnode(Agraph_t *g, Agnode_t *n);
+int				agdegree(Agnode_t *n, int use_inedges, int use_outedges);
+.P1
+.SS "EDGES"
+.P0
+Agedge_t        *agedge(Agraph_t* g, Agnode_t *t, Agnode_t *h, char *name, int createflag);
+Agedge_t		*agidedge(Agraph_t * g, Agnode_t * t, Agnode_t * h, unsigned long id, int createflag);
+Agedge_t        *agsubedge(Agraph_t *g, Agedge_t *e, int createflag);
+Agnode_t        *aghead(Agedge_t *e), *agtail(Agedge_t *e);
+Agedge_t        *agfstedge(Agraph_t* g, Agnode_t *n);
+Agedge_t        *agnxtedge(Agraph_t* g, Agedge_t *e, Agnode_t *n);
+Agedge_t        *agfstin(Agraph_t* g, Agnode_t *n);
+Agedge_t        *agnxtin(Agraph_t* g, Agedge_t *e);
+Agedge_t        *agfstout(Agraph_t* g, Agnode_t *n);
+Agedge_t        *agnxtout(Agraph_t* g, Agedge_t *e);
+int             agdeledge(Agraph_t *g, Agedge_t *e);
+.SS "STRING ATTRIBUTES"
+.P0
+Agsym_t			*agattr(Agraph_t *g, int kind, char *name, char *value);
+Agsym_t			*agattrsym(void *obj, char *name);
+Agsym_t			*agnxtattr(Agraph_t *g, int kind, Agsym_t *attr);
+char			*agget(void *obj, char *name);
+char			*agxget(void *obj, Agsym_t *sym);
+int				agset(void *obj, char *name, char *value);
+int				agxset(void *obj, Agsym_t *sym, char *value);
+int				agsafeset(void *obj, char *name, char *value, char *def);
+.P1
+.SS "RECORDS"
+.P0
+void		*agbindrec(void *obj, char *name, unsigned int size, move_to_front);
+Agrec_t     *aggetrec(void *obj, char *name, int move_to_front);
+int         agdelrec(Agraph_t *g, void *obj, char *name);
+int			agcopyattr(void *, void *);
+void		aginit(Agraph_t * g, int kind, char *rec_name, int rec_size, int move_to_front);
+void		agclean(Agraph_t * g, int kind, char *rec_name);
+.P1
+.SS "CALLBACKS"
+.P0
+Agcbdisc_t    *agpopdisc(Agraph_t *g);
+void        agpushdisc(Agraph_t *g, Agcbdisc_t *disc);
+void        agmethod(Agraph_t *g, void *obj, Agcbdisc_t *disc, int initflag);
+.P1
+.SS "MEMORY"
+.P0
+void		*agalloc(Agraph_t *g, size_t request);
+void		*agrealloc(Agraph_t *g, void *ptr, size_t oldsize, size_t newsize);
+void		agfree(Agraph_t *g, void *ptr);
+.P1
+.SS "STRINGS"
+.P0
+char		*agstrdup(Agraph_t *, char *);
+char		*agstrdup_html(Agraph_t *, char *);
+int		aghtmlstr(char *);
+char		*agstrbind(Agraph_t * g, char *);
+int		strfree(Agraph_t *, char *);
+char		*agcanonStr(char *);
+char		*agstrcanon(char *, char *);
+.P1
+.SS "GENERIC OBJECTS"
+.P0
+Agraph_t	*agraphof(void*);
+Agraph_t	*agroot(void*);
+int			agcontains(Agraph_t*, void*);
+char		*agnameof(void*);
+void		agdelete(Agraph_t *g, void *obj);
+int 		agobjkind(void *obj);
+Agrec_t		*AGDATA(void *obj);
+ulong		AGID(void *obj);
+int			AGTYPE(void *obj);
+.P1
+.SH "DESCRIPTION"
+Libcgraph supports graph programming by maintaining graphs in memory
+and reading and writing graph files.
+Graphs are composed of nodes, edges, and nested subgraphs.
+These graph objects may be attributed with string name-value pairs
+and programmer-defined records (see Attributes).
+.PP
+All of Libcgraph's global symbols have the prefix \fBag\fR (case varying).
+.SH "GRAPH AND SUBGRAPHS"
+.PP
+A ``main'' or ``root'' graph defines a namespace for a collection of
+graph objects (subgraphs, nodes, edges) and their attributes.
+Objects may be named by unique strings or by 32-bit IDs.
+.PP
+\fBagopen\fP creates a new graph with the given name and kind.
+(Graph kinds are \fBAgdirected\fP, \fBAgundirected\fP,
+\fBAgstrictdirected\fP, and \fBAgstrictundirected\fP.
+A strict graph cannot have multi-edges or self-arcs.)
+\fBagclose\fP deletes a graph, freeing its associated storage.
+\fBagread\fP, \fBagwrite\fP, and \fBagconcat\fP perform file I/O 
+using the graph file language described below. \fBagread\fP
+constructs a new graph while \fBagconcat\fP merges the file
+contents with a pre-existing graph.  Though I/O methods may
+be overridden, the default is that the channel argument is
+a stdio FILE pointer. \fBagsetfile\fP and \fBagreadline\fP
+are helper functions that simply set the current file name
+and input line number for subsequent error reporting.
+.PP
+\fBagsubg\fP finds or creates
+a subgraph by name.  A new subgraph is is initially empty and
+is of the same kind as its parent.  Nested subgraph trees may be created. 
+A subgraph's name is only interpreted relative to its parent.
+A program can scan subgraphs under a given graph
+using \fBagfstsubg\fP and \fRagnxtsubg\fP.  A subgraph is
+deleted with \fBagdelsubg\fP (or \fBagclose\fP).
+.PP
+By default, nodes are stored in ordered sets for efficient random
+access to insert, find, and delete nodes.
+The edges of a node are also stored in ordered sets.
+The sets are maintained internally as splay tree dictionaries
+using Phong Vo's cdt library.
+.PP
+\fBagnnodes\fP, \fBagnedges\fP, and \fBagdegree\fP return the
+sizes of node and edge sets of a graph.  The \fBagdegree\fP returns
+the size of the edge set of a nodes, and takes flags
+to select in-edges, out-edges, or both.
+.PP
+An \fBAgdisc_t\fP defines callbacks to be invoked by libcgraph when
+initializing, modifying, or finalizing graph objects.  (Casual users can ignore 
+the following.) Disciplines are kept on a stack.  Libcgraph automatically
+calls the methods on the stack, top-down.  Callbacks are installed
+with \fBagpushdisc\fP, uninstalled with \fBagpopdisc\fP, and 
+can be held pending or released via \fBagcallbacks\fP.
+.PP
+(Casual users may ignore the following.
+When Libcgraph is compiled with Vmalloc (which is not the default),
+each graph has its own heap.
+Programmers may allocate application-dependent data within the
+same heap as the rest of the graph.  The advantage is that
+a graph can be deleted by atomically freeing its entire heap
+without scanning each individual node and edge.
+.SH "NODES"
+A node is created by giving a unique string name or
+programmer defined 32-bit ID, and is represented by a
+unique internal object. (Node equality can checked
+by pointer comparison.)
+.PP
+\fBagnode\fP searches in a graph or subgraph for a node
+with the given name, and returns it if found.
+If not found, if \fBcreateflag\fP is boolean true
+a new node is created and returned, otherwise a nil
+pointer is returned.
+\fBagidnode\fP allows a programmer to specify the node
+by a unique 32-bit ID.
+\fBagsubnode\fP performs a similar operation on
+an existing node and a subgraph.
+.Pp
+\fBagfstnode\fP and \fBagnxtnode\fP scan node lists.
+\fBagprvnode\fP and \fPaglstnode\fP are symmetric but scan backward.
+The default sequence is order of creation (object timestamp.)
+\fBagdelnode\fP removes a node from a graph or subgraph.
+.SH "EDGES"
+.PP
+An abstract edge has two endpoint nodes called tail and head
+where the all outedges of the same node have it as the tail
+value and similarly all inedges have it as the head.
+In an undirected graph, head and tail are interchangable.
+If a graph has multi-edges between the same pair of nodes,
+the edge's string name behaves as a secondary key.
+.Pp
+\fBagedge\fP searches in a graph of subgraph for an
+edge between the given endpoints (with an optional
+multi-edge selector name) and returns it if found.
+Otherwise, if \fBcreateflag\fP is boolean true,
+a new edge is created and returned: otherwise
+a nil pointer is returned.  If the \fBname\fP 
+is NULL, then an anonymous internal
+value is generated. \fBagidedge\fP allows a programmer
+to create an edge by giving its unique 32-bit ID.
+\fBagfstin\fP, \fBagnxtint\fP, \fBagfstout\fP, and 
+\fBagnxtout\fP visit directed in- and out- edge lists,
+and ordinarily apply only in directed graphs.
+\fBagfstedge\fP and \fBagnxtedge\fP visit all edges
+incident to a node.  \fBagtail\fP and \fBaghead\fP
+get the endpoint of an edge.
+.SH "INTERNAL ATTRIBUTES"
+Programmer-defined values may be dynamically
+attached to graphs, subgraphs, nodes, and edges.
+Such values are either uninterpreted binary records
+(for implementing efficient algorithms)
+or character string data (for I/O).
+.SH "STRING ATTRIBUTES"
+String attributes are handled automatically in reading
+and writing graph files. 
+A string attribute is identified by name and by
+an internal symbol table entry (\fBAgsym_t\fP) created by Libcgraph.
+Attributes of nodes, edges, and graphs (with their subgraphs)
+have separate namespaces.  The contents of an \fBAgsym_t\fP
+is listed below, followed by primitives to operate on string
+attributes.
+.P0
+typedef struct Agsym_s {        /* symbol in one of the above dictionaries */
+    Dtlink_t        link;
+    char            *name;      /* attribute's name */
+    char            *defval;    /* its default value for initialization */
+    int             id;         /* its index in attr[] */
+    unsigned char	kind;		/* referent object type */
+    unsigned char	fixed;		/* immutable value */
+} Agsym_t;
+.P1
+.PP
+\fBagattr\fP creates or looks up attributes.
+\fBkind\fP may be \fBAGRAPH\fP, \fBAGNODE\fP, or \fBAGEDGE\fP.
+If \fBvalue\fP is \fB(char*)0)\fP, the request is to search
+for an existing attribute of the given kind and name.
+Otherwise, if the attribute already exists, its default
+for creating new objects is set to the given value;
+if it does not exist, a new attribute is created with the
+given default, and the default is applied to all pre-existing
+objects of the given kind. If \fBg\fP is NIL, the default is
+set for all graphs created subsequently.
+\fBagattrsym\fP is a helper function
+that looks up an attribute for a graph object given as an argument.
+\fBagnxtattr\fP permits traversing the list of attributes of
+a given type.  If \fBNIL\fP is passed as an argument it gets
+the first attribute, otherwise it returns the next one in
+succession or returns \fBNIL\fP at the end of the list.
+\fBagget\fP and \fPagset\fP allow fetching and updating a
+string attribute for an object taking the attribute name as
+an argument. \fBagxget\fP and \fBagxset\fP do this but with
+an attribute symbol table entry as an argument (to avoid
+the cost of the string lookup).  \fBagsafeset\fP is a
+convenience function that ensures the given attribute is
+declared before setting it locally on an object.
+
+.SH "STRINGS"
+Libcgraph performs its own storage management of strings as 
+reference-counted strings.
+The caller does not need to dynamically allocate storage.
+.PP
+\fBagstrdup\fP returns a pointer to a reference-counted copy of
+the argument string, creating one if necessary. \fBagstrbind\fP
+returns a pointer to a reference-counted string if it exists, or NULL if not.
+All uses of cgraph strings need to be freed using \fBagstrfree\fP
+in order to correctly maintain the reference count.
+.PP
+\fBagcanonStr\fP returns a pointer to a version of the input string
+canonicalized for output for later re-parsing. This includes quoting
+special characters and keywords. It uses its own internal buffer, so
+the value will be lost on the next call to \fBagcanonStr\fP.
+\fBagstrcanon\fP is an unsafe version of \fBagcanonStr\fP, in which
+the application passes in a buffer as the second argument. Note that
+the buffer may not be used; if the input string is in canonical form,
+the function will just return a pointer to it.
+.PP
+The cgraph parser handles HTML-like strings. These should be 
+indistinguishable from other strings for most purposes. To create
+an HTML-like string, use \fBagstrdup_html\fP. The \fBaghtmlstr\fP
+function can be used to query if a string is an ordinary string or
+an HTML-like string.
+.SH "RECORDS"
+Uninterpreted records may be attached to graphs, subgraphs, nodes,
+and edges for efficient operations on values such as marks, weights,
+counts, and pointers needed by algorithms.  Application programmers
+define the fields of these records, but they must be declared with
+a common header as shown below.
+.P0
+typedef struct Agrec_s {
+    Agrec_t		header;
+    /* programmer-defined fields follow */
+} Agrec_t;
+.P1
+Records are created and managed by Libcgraph. A programmer must
+explicitly attach them to the objects in a graph, either to
+individual objects one at a time via \fBagbindrec\fP, or to
+all the objects of the same class in a graph via \fBaginit\fP.
+The \fBname\fP argument a record distinguishes various types of records,
+and is programmer defined (Libcgraph reserves the prefix \fB_ag\fR).
+If size is 0, the call to \fBagbindrec\fP is simply a lookup.
+\fBagdelrec\fP is the deletes records one at a time.
+\fBagclean\fP does the same for all objects of the same
+class in an entire graph. 
+
+Internally, records are maintained in circular linked lists
+attached to graph objects.
+To allow referencing application-dependent data without function
+calls or search, Libcgraph allows setting and locking the list
+pointer of a graph, node, or edge on a particular record.
+This pointer can be obtained with the macro \fBAGDATA(obj)\fP.
+A cast, generally within a macro or inline function,
+is usually applied to convert the list pointer to
+an appropriate programmer-defined type.
+
+To control the setting of this pointer,
+the \fBmove_to_front\fP flag may be \fBAG_MTF_FALSE\fP,
+\fBAG_MTF_SOFT\fP, or \fBAG_MTF_HARD\fP accordingly.
+The \fBAG_MTF_SOFT\fP field is only a hint that decreases
+overhead in subsequent calls of \fBaggetrec\fP;
+\fBAG_MTF_HARD\fP guarantees that a lock was obtained.
+To release locks, use \fBAG_MTF_SOFT\fP or \fBAG_MTF_FALSE\fP.
+Use of this feature implies cooperation or at least isolation
+from other functions also using the move-to-front convention.
+
+.SH "DISCIPLINES"
+(The following is not intended for casual users.)
+Programmer-defined disciplines customize certain resources-
+ID namespace, memory, and I/O - needed by Libcgraph.
+A discipline struct (or NIL) is passed at graph creation time.
+.P0
+struct Agdisc_s {			/* user's discipline */
+	Agmemdisc_t			*mem;
+	Agiddisc_t			*id;
+	Agiodisc_t			*io;
+} ;
+.P1
+A default discipline is supplied when NIL is given for
+any of these fields.
+
+An ID allocator discipline allows a client to control assignment
+of IDs (uninterpreted 32-bit values) to objects, and possibly how
+they are mapped to and from strings.
+
+.P0
+struct Agiddisc_s {		/* object ID allocator */
+	void	*(*open)(Agraph_t *g);	/* associated with a graph */
+	int		(*map)(void *state, int objtype, char *str, ulong *id, int createflag);
+	int		(*alloc)(void *state, int objtype, ulong id);
+	void	(*free)(void *state, int objtype, ulong id);
+	char	*(*print)(void *state, int objtype, ulong id);
+	void	(*close)(void *state);
+} ;
+.P1
+
+\f5open\fP permits the ID discipline to initialize any data
+structures that maintains per individual graph.
+Its return value is then passed as the first argument to
+all subsequent ID manager calls.
+
+\f5alloc\fP informs the ID manager that Libcgraph is attempting
+to create an object with a specific ID that was given by a client.
+The ID manager should return TRUE (nonzero) if the ID can be
+allocated, or FALSE (which aborts the operation).
+
+\f5free\fP is called to inform the ID manager that the
+object labeled with the given ID is about to go out of existence.
+
+\f5map\fP is called to create or look-up IDs by string name
+(if supported by the ID manager).  Returning TRUE (nonzero)
+in all cases means that the request succeeded (with a valid
+ID stored through \f5result\fP.  There are four cases:
+.PP
+\f5name != NULL\fP and \f5createflag == 1\fP:
+This requests mapping a string (e.g. a name in a graph file) into a new ID.
+If the ID manager can comply, then it stores the result and returns TRUE.
+It is then also responsible for being able to \f5print\fP the ID again
+as a string.  Otherwise the ID manager may return FALSE but it must
+implement the following (at least for graph file reading and writing to work):
+.PP
+\f5name == NULL\fP and \f5createflag == 1\fP:
+The ID manager creates a unique new ID of its own choosing. 
+Although it may return FALSE if it does not support anonymous objects,
+but this is strongly discouraged (to support "local names" in graph files.)
+.PP
+\f5name != NULL\fP and \f5createflag == 0\fP:
+This is a namespace probe.  If the name was previously mapped into
+an allocated ID by the ID manager, then the manager must return this ID.
+Otherwise, the ID manager may either return FALSE, or may store
+any unallocated ID into result. (This is convenient, for example,
+if names are known to be digit strings that are directly converted into 32 bit values.)
+.PP
+\f5name == NULL\fP and \f5createflag == 0\fP: forbidden.
+.PP
+\f5print\fP is allowed to return a pointer to a static buffer;
+a caller must copy its value if needed past subsequent calls.
+\f5NULL\fP should be returned by ID managers that do not map names.
+.PP
+The \f5map\fP and \f5alloc\fP calls do not pass a pointer to the
+newly allocated object.  If a client needs to install object
+pointers in a handle table, it can obtain them via 
+new object callbacks.
+.P0
+struct Agiodisc_s {
+	int		(*fread)(void *chan, char *buf, int bufsize);
+	int		(*putstr)(void *chan, char *str);
+	int		(*flush)(void *chan);	/* sync */
+	/* error messages? */
+} ;
+
+struct Agmemdisc_s {	/* memory allocator */
+	void	*(*open)(void);		/* independent of other resources */
+	void	*(*alloc)(void *state, size_t req);
+	void	*(*resize)(void *state, void *ptr, size_t old, size_t req);
+	void	(*free)(void *state, void *ptr);
+	void	(*close)(void *state);
+} ;
+.P1
+
+.SH "EXAMPLE PROGRAM"
+.P0
+#include <graphviz/cgraph.h>
+typedef struct mydata_s {Agrec_t hdr; int x,y,z;} mydata;
+
+main(int argc, char **argv)
+{
+    Agraph_t    *g;
+    Agnode_t    *v;
+    Agedge_t    *e;
+    Agsym_t     *attr;
+    Dict_t      *d
+    int         cnt;
+    mydata      *p;
+
+    if (g = agread(stdin,NIL(Agdisc_t*))) {
+		cnt = 0; attr = 0;
+		while (attr = agnxtattr(g, AGNODE, attr)) cnt++;
+		printf("The graph %s has %d attributes\n",agnameof(g),cnt);
+
+		/* make the graph have a node color attribute, default is blue */
+        attr = agattr(g,AGNODE,"color","blue");
+
+        /* create a new graph of the same kind as g */
+        h = agopen("tmp",g->desc);
+
+        /* this is a way of counting all the edges of the graph */
+        cnt = 0;
+        for (v = agfstnode(g); v; v = agnxtnode(g,v))
+            for (e = agfstout(g,v); e; e = agnxtout(g,e))
+                cnt++;
+
+        /* attach records to edges */
+        for (v = agfstnode(g); v; v = agnxtnode(g,v))
+            for (e = agfstout(g,v); e; e; = agnxtout(g,e)) {
+                p = (mydata*) agbindrec(g,e,"mydata",sizeof(mydata),TRUE);
+                p->x = 27;  /* meaningless data access example */
+				((mydata*)(AGDATA(e)))->y = 999; /* another example */
+        }
+    }
+}
+.P1
+.SH "EXAMPLE GRAPH FILES"
+.P0
+digraph G {
+    a -> b;
+    c [shape=box];
+    a -> c [weight=29,label="some text];
+    subgraph anything {
+        /* the following affects only x,y,z */
+        node [shape=circle];
+        a; x; y -> z; y -> z;  /* multiple edges */
+    }
+}
+
+strict graph H {
+    n0 -- n1 -- n2 -- n0;  /* a cycle */
+    n0 -- {a b c d};       /* a star */
+    n0 -- n3;
+    n0 -- n3 [weight=1];   /* same edge because graph is strict */
+}
+.P1
+.SH "SEE ALSO"
+Libcdt(3)
+
+.SH "BUGS"
+It is difficult to change endpoints of edges, delete string attributes or
+modify edge keys.  The work-around is to create a new object and copy the
+contents of an old one (but new object obviously has a different ID,
+internal address, and object creation timestamp).
+
+The API lacks convenient functions to substitute programmer-defined ordering of
+nodes and edges but in principle this can be supported.
+.SH "AUTHOR"
+Stephen North, north@research.att.com, AT&T Research.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man3/graph.3	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,270 @@
+.TH LIBGRAPH 3 "01 MARCH 1993"
+.SH NAME
+\fBlibgraph\fR \- abstract graph library
+.SH SYNOPSIS
+.ta .75i 1.5i 2.25i 3i 3.75i 4.5i 5.25i 6i
+.PP
+.nf
+\f5
+#include <graphviz/graph.h>
+void        aginit();
+Agraph_t    *agread(FILE*);
+int         agwrite(Agraph_t*, FILE*);
+int         agerrors();
+Agraph_t    *agopen(char *name, int kind);
+void        agclose(Agraph_t *g);
+Agraph_t    *agsubg(Agraph_t *g, char *name);
+Agraph_t    *agfindsubg(Agraph_t *g, char *name);
+Agnode_t    *agmetanode(Agraph_t *g);
+Agraph_t    *agusergraph(Agnode_t *metanode);
+int         agnnodes(Agraph_t *g), agnedges(Agraph_t *g);
+.sp .i1
+int         agcontains(Agraph_t *g, void *obj);
+int         aginsert(Agraph_t *g, void *obj);
+int         agdelete(Agraph_t *g, void *obj);
+.sp .1i
+Agnode_t    *agnode(Agraph_t *g, char *name);
+Agnode_t    *agfindnode(Agraph_t *g, char *name);
+Agnode_t    *agfstnode(Agraph_t *g);
+Agnode_t    *agnxtnode(Agraph_t *g, Agnode_t *n);
+Agnode_t    *aglstnode(Agraph_t *g);
+Agnode_t    *agprvnode(Agraph_t *g, Agnode_t *n);
+.sp .1i
+Agedge_t    *agedge(Agraph_t *g, Agnode_t *tail, Agnode_t *head);
+Agedge_t    *agfindedge(Agraph_t *g, Agnode_t *tail, Agnode_t *head);
+Agedge_t    *agfstedge(Agraph_t *g, Agnode_t *n);
+Agedge_t    *agnxtedge(Agraph_t *g, Agedge_t *e, Agnode_t *n);
+Agedge_t    *agfstin(Agraph_t *g, Agnode_t *n);
+Agedge_t    *agnxtin(Agraph_t *g, Agedge_t *e);
+Agedge_t    *agfstout(Agraph_t *g, Agnode_t *n);
+Agedge_t    *agnxtout(Agraph_t *g, Agedge_t *e);
+.sp .1i
+char        *agget(void *obj, char *name);
+char        *agxget(void *obj, int index);
+void        agset(void *obj, char *name, char *value);
+void        agxset(void *obj, int index, char *value);
+int         agindex(void *obj, char *name);
+.sp .1i
+Agsym_t*    agraphattr(Agraph_t *g,char *name,char *value);
+Agsym_t*    agnodeattr(Agraph_t *g,char *name,char *value);
+Agsym_t*    agedgeattr(Agraph_t *g,char *name,char *value);
+Agsym_t*    agfindattr(void *obj,char *name);
+\fP
+.fi
+.SH DESCRIPTION
+\fIlibgraph\fP maintains directed and undirected attributed graphs
+in memory and reads and writes graph files.  Graphs are composed of
+nodes, edges, and nested subgraphs.   A subgraph may contain any
+nodes and edges of its parents, and may be passed to any
+\fIlibgraph\fP function taking a graph pointer, except the three
+that create new attributes (where a main graph is required).
+
+Attributes are internal or external.
+Internal attributes are fields in the graph, node and edge structs
+defined at compile time.
+These allow efficient representation and direct access to values
+such as marks, weights, and pointers for writing graph algorithms.
+External attributes, on the other hand, are character strings
+(name\(hyvalue pairs) dynamically allocated at runtime and accessed
+through \fIlibgraph\fP calls.  External attributes are used in
+graph file I/O; internal attributes are not.  Conversion between
+internal and external attributes must be explicitly programmed.
+
+The subgraphs in a main graph are represented by an auxiliary directed
+graph (a meta\(hygraph).  Meta\(hynodes correspond to subgraphs, and meta\(hyedges
+signify containment of one subgraph in another. 
+\f5agmetanode\fP and \f5agusergraph\fP map between
+subgraphs and meta\(hynodes.  The nodes and edges of the meta\(hygraph may
+be traversed by the usual \fIlibgraph\fP functions for this purpose.
+
+.SH USE
+1. Define types \f5Agraphinfo_t\fP, \f5Agnodeinfo_t\fP,
+and \f5Agedgeinfo_t\fP (usually in a header file) before
+including \f5<graphviz/graph.h>\fP. 
+
+2. Call \f5aginit()\fP before any other \fIlibgraph\fP functions.
+(This is a macro that calls \f5aginitlib()\fP to define the sizes
+of Agraphinfo_t, Agnodeinfo_t, and Agedgeinfo_t.)
+
+3. Compile with \-lgraph \-lcdt.
+
+Except for the \fBu\fP fields, \fIlibgraph\fP
+data structures must be considered read\(hyonly.
+Corrupting their contents by direct updates can cause
+catastrophic errors.
+
+.SH "GRAPHS"
+.nf
+\f5
+typedef struct Agraph_t {
+    char                 kind;
+    char                *name;
+    Agraph_t             *root;
+    char                **attr;
+    graphdata_t         *univ;
+    Dict_t              *nodes,*inedges,*outedges;
+    proto_t             *proto;
+    Agraphinfo_t         u;
+} Agraph_t;
+
+typedef struct graphdata_t {
+    Dict_t              *node_dict;
+    attrdict_t          *nodeattr, *edgeattr, *globattr;
+} graphdata_t;
+
+typedef struct proto_t {
+    Agnode_t            *n;
+    Agedge_t            *e;
+    proto_t             *prev;
+} proto_t;
+\fP
+.fi
+A graph \fIkind\fP is one of:
+AGRAPH, AGRAPHSTRICT, AGDIGRAPH, or AGDIGRAPHSTRICT.
+There are related macros for testing the properties of a graph:
+AG_IS_DIRECTED(g) and AG_IS_STRICT(g).
+Strict graphs cannot have self\(hyarcs or multi\(hyedges.
+\fBattr\fP is the array of external attribute values.
+\fBuniv\fP points to values shared by all subgraphs of a main graph.
+\fBnodes\fP, \fBinedges\fP, and \fBoutedges\fP are sets maintained
+by \fBcdt(3)\fP.  Normally you don't access these dictionaries
+directly, though the edge dictionaries may be re\(hyordered to support
+programmer\(hydefined ordered edges (see \f5dtreorder\fP in \fIcdt(3)\fP).
+\fBproto\fP is a stack of templates for node and edge initialization.
+The attributes of these nodes and edges are set in the usual way (\f5agget\fP,
+\f5agset\fP, etc.) to set defaults.
+.PP
+\f5agread\fP reads a file and returns a new graph if one
+was succesfully parsed, otherwise returns NULL if
+\f5EOF\fP or a syntax error was encountered.
+Errors are reported on stderr and a count is returned from
+\g5agerrors()\fP.
+\f5write_graph\fP prints a graph on a file.
+\f5agopen\fP and \f5agsubg\fP create new empty graph and subgraphs.
+\f5agfindsubg\fP searches for a subgraph by name, returning NULL
+when the search fails.
+
+.SH ALL OBJECTS
+\f5agcontains\fP, \f5aginsert\fP, \f5agdelete\fP are generic functions
+for nodes, edges, and graphs.  \f5gcontains\fP is a predicate that tests
+if an object belongs to the given graph.  \f5aginsert\fP inserts an
+object in a graph and \f5agdelete\fP undoes this operation.
+A node or edge is destroyed (and its storage freed) at the time it
+is deleted from the main graph.  Likewise a subgraph is destroyed
+when it is deleted from its last parent or when its last parent is deleted.
+
+.SH NODES
+.nf
+\f5
+typedef struct Agnode_t {
+    char                *name;
+    Agraph_t            *graph;
+    char                **attr;
+    Agnodeinfo_t        u;
+} Agnode_t;
+\fP
+.fi
+
+\f5agnode\fP attempts to create a node.
+If one with the requested name already exists, the old node 
+is returned unmodified.
+Otherwise a new node is created, with attributed copied from g\->proto\->n.
+\f5agfstnode\fP (\f5agnxtnode\fP) return the first (next) element
+in the node set of a graph, respectively, or NULL.
+\f5aglstnode\fP (\f5agprvnode\fP) return the last (previous) element
+in the node set of a graph, respectively, or NULL.
+
+.SH EDGES
+.nf
+\f5
+typedef struct Agedge_t {
+    Agnode_t            *head,*tail;
+    char                **attr;
+    Agedgeinfo_t        u;
+} Agedge_t;
+\fP
+.fi
+\f5agedge\fP creates a new edge with the attributes of g\->proto\->e
+including its key if not empty.
+\f5agfindedge\fP finds the first (u,v) edge in \f5g\fP.
+\f5agfstedge\fP (\f5agnxtedge\fP) return the first (next) element
+in the edge set of a graph, respectively, or NULL.
+\f5agfstin\fP, \f5agnxtin\fP, \f5agfstout\fP, \f5agnxtout\fP
+refer to in\(hy or out\(hyedge sets.
+The idiomatic usage in a directed graph is:
+.sp
+\f5    for (e = agfstout(g,n); e; e = agnextout(g,e)) your_fun(e);\fP
+.P
+An edge is uniquely identified by its endpoints and its \f5key\fP
+attribute (if there are multiple edges).
+If the \f5key\fP of \f5g\->proto\->e\fP is empty,
+new edges are assigned an internal value.
+Edges also have \f5tailport\fP and \f5headport\fP values.
+These have special syntax in the graph file language but are
+not otherwise interpreted.
+.PP
+.SH ATTRIBUTES
+.nf
+\f5
+typedef struct attrsym_t {
+    char                *name,*value;
+    int                 index;
+    unsigned char       printed;
+} attrsym_t;
+.bp
+typedef struct attrdict_t  {
+    char                *name;
+    Dict_t              *dict;
+    attrsym_t           **list;
+} attrdict_t;
+\fP
+.fi
+\f5agraphattr\fP, \f5agnodeattr\fP, and \f5agedgeattr\fP make new attributes.
+\f5g\fP should be a main graph, or \f5NULL\fP for declarations
+applying to all graphs subsequently read or created.
+\f5agfindattr\fP searches for an existing attribute.
+.PP
+External attributes are accessed by \f5agget\fP and \f5agset\fP
+These take a pointer to any graph, node, or edge, and an attribute name.
+Also, each attribute has an integer index.  For efficiency this index
+may be passed instead of the name, by calling \f5agxget\fP and \f5agxset\fP.
+The \f5printed\fP flag of an attribute may be set to 0 to skip it
+when writing a graph file.
+.PP
+The \f5list\fP in an attribute dictionary is maintained in order of creation
+and is NULL terminated.
+Here is a program fragment to print node attribute names:
+.nf
+    \f5attrsym_t *aptr;
+    for (i = 0; aptr = g\->univ\->nodedict\->list[i]; i++) puts(aptr\->name);\fP
+.fi
+.SH EXAMPLE GRAPH FILES
+.nf
+graph any_name {            /* an undirected graph */
+    a \-\- b;                 /* a simple edge */
+    a \-\- x1 \-\- x2 \-\- x3;    /* a chain of edges */
+    "x3.a!" \-\- a;           /* quotes protect special characters */
+    b \-\- {q r s t};         /* edges that fan out */
+    b [color="red",size=".5,.5"];   /* set various node attributes */
+    node [color=blue];      /* set default attributes */
+    b \-\- c [weight=25];     /* set edge attributes */
+    subgraph sink_nodes {a b c};    /* make a subgraph */
+}
+
+digraph G {
+    size="8.5,11";            /* sets a graph attribute */
+    a \-> b;                 /* makes a directed edge */
+    chip12.pin1 \-> chip28.pin3; /* uses named node "ports" */
+}
+.fi
+
+.SH SEE ALSO
+.BR dot (1),
+.BR neato (1),
+.BR libdict (3)
+.br
+S. C. North and K. P. Vo, "Dictionary and Graph Libraries''
+1993 Winter USENIX Conference Proceedings, pp. 1\(hy11.
+
+.SH AUTHOR
+Stephen North (north@ulysses.att.com), AT&T Bell Laboratories.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man3/gvc.3	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,66 @@
+.TH LIBGVC 3
+.SH NAME
+\fBlibgvc\fR \- Graphviz context library
+.SH SYNOPSIS
+.ta .75i 1.5i 2.25i 3i 3.75i 4.5i 5.25i 6i
+.PP
+.nf
+\f5
+#include <graphviz/gvc.h>
+
+/* set up a graphviz context */
+extern GVC_t *gvNEWcontext(char **info, char *user);
+extern char *gvUsername(void);
+
+/*  set up a graphviz context \(hy alternative */
+/*     (wraps the above two functions using info built into libgvc) */
+extern GVC_t *gvContext(void);
+
+/* parse command line args \(hy minimally argv[0] sets layout engine */
+extern int gvParseArgs(GVC_t *gvc, int argc, char **argv);
+extern graph_t *gvNextInputGraph(GVC_t *gvc);
+
+/* Compute a layout using a specified engine */
+extern int gvLayout(GVC_t *gvc, graph_t *g, char *engine);
+
+/* Compute a layout using layout engine from command line args */
+extern int gvLayoutJobs(GVC_t *gvc, graph_t *g);
+
+/* Render layout into string attributes of the graph */
+extern void attach_attrs(graph_t *g);
+
+/* Parse an html string */
+extern char *agstrdup_html(char *s);
+extern int aghtmlstr(char *s);
+
+/* Render layout in a specified format to an open FILE */
+extern int gvRender(GVC_t *gvc, graph_t *g, char *format, FILE *out);
+
+/* Render layout in a specified format to an open FILE */
+extern int gvRenderFilename(GVC_t *gvc, graph_t *g, char *format, char *filename);
+
+/* Render layout according to \-T and \-o options found by gvParseArgs */
+extern int gvRenderJobs(GVC_t *gvc, graph_t *g);
+
+/* Clean up layout data structures \(hy layouts are not nestable (yet) */
+extern int gvFreeLayout(GVC_t *gvc, graph_t *g);
+
+/* Clean up graphviz context */
+extern int gvFreeContext(GVC_t *gvc);
+
+\fP
+.fi
+.SH DESCRIPTION
+\fIlibgvc\fP provides a context for applications wishing to manipulate
+and render graphs.  It provides a command line parsing, common rendering code,
+and a plugin mechanism for renderers.
+
+.SH SEE ALSO
+.BR dot (1),
+.BR neato (1),
+.BR libcdt (3)
+.BR libgraph (3)
+.br
+
+.SH AUTHOR
+John Ellson (ellson@research.att.com), AT&T
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man3/pathplan.3	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,97 @@
+.TH LIBPATH 3 "01 APRIL 1997"
+.SH NAME
+\fBlibpathplan\fR \- finds and smooths shortest paths
+.SH SYNOPSIS
+.ta .75i 1.5i 2.25i 3i 3.75i 4.5i 5.25i 6i
+.PP
+.nf
+\f5
+#include <graphviz/pathplan.h>
+
+typedef struct Pxy_t {
+    double x, y;
+} Pxy_t;
+
+typedef struct Pxy_t Ppoint_t;
+typedef struct Pxy_t Pvector_t;
+
+typedef struct Ppoly_t {
+    Ppoint_t *ps;
+    int pn;
+} Ppoly_t;
+
+typedef Ppoly_t Ppolyline_t;
+
+typedef struct Pedge_t {
+    Ppoint_t a, b;
+} Pedge_t;
+
+typedef struct vconfig_s vconfig_t;
+
+#define POLYID_NONE	
+#define POLYID_UNKNOWN
+
+\fP
+.fi
+.SH FUNCTIONS
+
+.nf
+\f5
+int Pshortestpath(Ppoly_t *boundary, Ppoint_t endpoints[2], Ppolyline_t *output_route);
+\fP
+.fi
+Finds a shortest path between two points in a simple polygon.
+You pass endpoints interior to the polygon boundary.
+A shortest path connecting the points that remains in the polygon
+is returned in output_route.  If either endpoint does not lie in
+the polygon, an error code is returned. (what code!!)
+
+.nf
+\f5
+vconfig_t *Pobsopen(Ppoly_t **obstacles, int n_obstacles);
+.br
+int Pobspath(vconfig_t *config, Ppoint_t p0, int poly0, Ppoint_t p1, int poly1, Ppolyline_t *output_route);
+.br
+void Pobsclose(vconfig_t *config);
+\fP
+.fi
+These functions find a shortest path between two points in a
+simple polygon that possibly contains polygonal obstacles (holes).
+\f5Pobsopen\fP creates a configuration (an opaque struct of type
+\f5vconfig_t\fP) on a set of obstacles. \f5Pobspath\fP finds
+a shortest path between the endpoints that remains outside the
+obstacles.  If the endpoints are known to lie inside obstacles,
+\f5poly0\fP or \f5poly1\fP should be set to the index in the
+\f5obstacles\fP array.  If an endpoint is definitely not inside
+an obstacle, then \f5POLYID_NONE\fP should be passed.  If the
+caller has not checked, then \f5POLYID_UNKNOWN\fP should be passed,
+and the path library will perform the test.
+
+(!! there is no boundary polygon in this model?!!!)
+
+.nf
+\f5
+int Proutespline (Pedge_t *barriers, int n_barriers, Ppolyline_t input_route, Pvector_t endpoint_slopes[2],
+	Ppolyline_t *output_route);
+\fP
+.fi
+
+This function fits a Bezier curve to a polyline path. 
+The curve must avoid a set of barrier segments. The polyline
+is usually the \f5output_route\fP of one of the shortest path
+finders, but it can be any simple path that doesn't cross
+any obstacles.  The input also includes endpoint slopes and
+0,0 means unconstrained slope.  
+
+Finally, this utility function converts an input list of polygons
+into an output list of barrier segments:
+.nf
+\f5
+int Ppolybarriers(Ppoly_t **polys, int n_polys, Pedge_t **barriers, int *n_barriers);
+\fP
+.fi
+
+.SH AUTHORS
+David Dobkin (dpd@cs.princeton.edu),
+Eleftherios Koutsofios (ek@research.att.com),
+Emden Gansner (erg@research.att.com).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/graph_visualisation/share/man/man7/graphviz.7	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,106 @@
+.\" -*- nroff -*-
+.\" This manual is for graphviz, a rich set of graph drawing tools, and it
+.\" can be distributed under the same terms as the graphviz package.
+.\" 
+.\" Copyright (C) 2006 Cyril Brulebois <cyril.brulebois@enst-bretagne.fr>
+.\"
+.TH GRAPHVIZ 7 "November 19, 2006"
+.SH "NAME"
+graphviz \- rich set of graph drawing tools
+
+.SH "SYNOPSIS"
+This manpage has been written to fulfil the need of a centralized documentation
+presenting all available tools in the graphviz package.
+
+.SH "AVAILABLE TOOLS"
+
+.SS "Graph layout programs"
+.TP
+.B dot
+filter for hierarchical layouts of graphs
+.TP
+.B neato
+filter for symmetric layouts of graphs
+.TP
+.B twopi
+filter for radial layouts of graphs
+.TP
+.B circo
+filter for circular layout of graphs
+.TP
+.B fdp
+filter for symmetric layouts of graphs
+.PP
+All of the filters work with either directed or undirected graphs, though
+.B dot
+is typically used for directed graphs and
+.B neato
+for undirected graphs.
+Note also that \fBneato \-n[2]\fP can be used to render layouts produced
+by the other filters.
+.SS "Graph drawing programs"
+.TP
+.B lefty
+A Programmable Graphics Editor
+.TP
+.B lneato
+lefty + neato
+.TP
+.B dotty
+lefty + dot
+
+
+.SS "Graph layout enhancement"
+.TP
+.B gvcolor
+flow colors through a ranked digraph
+.TP
+.B unflatten
+adjust directed graphs to improve layout aspect ratio
+.TP
+.B gvpack
+merge and pack disjoint graphs
+
+.SS "Graph information and transformation"
+.TP
+.B gc
+count graph components
+.TP
+.B acyclic
+make directed graph acyclic
+.TP
+.B nop
+pretty-print graph file
+.TP
+.B ccomps
+connected components filter for graphs
+.TP
+.B sccmap
+extract strongly connected components of directed graphs
+.TP
+.B tred
+transitive reduction filter for directed graphs
+.TP
+.B dijkstra
+single-source distance filter
+.TP
+.B bcomps
+biconnected components filter for graphs
+.TP
+.B gvpr
+graph pattern scanning and processing language
+.TP
+.B prune
+prune directed graphs
+
+.SS "Other"
+.TP
+.B "gxl2dot, dot2gxl"
+GXL-DOT converters
+
+.SH "AUTHOR"
+This manual page was written by Cyril Brulebois
+<cyril.brulebois@enst\-bretagne.fr> in november 2006, based on an initial
+documentation effort by Joachim Berdal Haga <jbh@lupus.ig3.net>. It can be
+distributed under the same terms as the graphviz package.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/mp3readwrite/demo_mp3readwrite.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,133 @@
+%% MP3 reading and writing
+%
+% These function, mp3read and mp3write, aim to exactly duplicate 
+% the operation of wavread and wavwrite for accessing soundfiles, 
+% except the soundfiles are in Mpeg-Audio layer 3 (MP3) compressed 
+% format.  All the hard work is done by external binaries written 
+% by others: mp3info to query the format of existing mp3 files, 
+% mpg123 to decode mp3 files, and lame to encode audio files.
+% Binaries for these files are widely available (and may be
+% included in this distribution).  
+%
+% These functions were originally developed for access to very 
+% large mp3 files (i.e. many hours long), and so avoid creating 
+% the entire uncompressed audio stream if possible.  mp3read 
+% allows you to specify the range of frames you want to read 
+% (as a second argument), and mp3read will construct an mpg123 
+% command that skips blocks to decode only the part of the file 
+% that is required.  This can be much quicker (and require less 
+% memory/temporary disk) than decoding the whole file.
+%
+% mpg123 also provides for "on the fly" downsampling at conversion 
+% to mono, which are supported as extra options in mp3read.
+%
+% mpg123 can read MP3s across the network.  This is supported 
+% if the FILE argument is a URL (e.g. beginning 'http://...').
+%
+% mp3info sometimes gets the file size wrong (as returned by the
+% mp3read(...'size') syntax).  I'm not sure when this happens
+% exactly, but it's probably a result of VBR files. In the worst
+% case, figuring the number of samples in such a file requires
+% scanning through the whole file, and mp3info doesn't usually do
+% this. 
+%
+% For more information, including advice on handling MP4 files, 
+% see http://labrosa.ee.columbia.edu/matlab/mp3read.html
+
+%% Example usage
+% Here, we read a wav file in, then write it out as an MP3, then 
+% read the resulting MP3 back in, and compare it to the original 
+% file.
+
+% Read an audio waveform
+[d,sr] = wavread('piano.wav');
+% Save to mp3 (default settings)
+mp3write(d,sr,'piano.mp3');
+% Read it back again
+[d2,sr] = mp3read('piano.mp3');
+% mp3 encoding involves some extra padding at each end; we attempt 
+% to cut it off at the start, but can't do that at the end, because 
+% mp3read doesn't know how long the original was.  But we do, so..
+% Chop it down to be the same length as the original
+d2 = d2(1:length(d),:);
+% What is the SNR (distortion)?
+ddiff = d - d2;
+disp(['SNR is ',num2str(10*log10(sum(d(:).^2)/sum(ddiff(:).^2))),' dB']);
+% Do they look similar?
+subplot(211)
+specgram(d(:,1),1024,sr);
+subplot(212)
+plot(1:5000,d(10000+(1:5000),1),1:5000,d2(10000+(1:5000)));
+% Yes, pretty close
+%
+% NB: lame followed by mpg123 causes a little attenuation; you 
+% can get a better match by scaling up the read-back waveform:
+ddiff = d - 1.052*d2;
+disp(['SNR is ',num2str(10*log10(sum(d(:).^2)/sum(ddiff(:).^2))),' dB']);
+
+%% Delay, size, and alignment
+%
+% In mid-2006 I noticed that mp3read followed by mp3write followed by
+% mp3read effectively delayed the waveform by 2257 samples (at 44
+% kHz). So I introduced code to discard the first 2257 samples to ensure
+% that the waveforms remained time aligned. As best I could understand,
+% mpg123 (v 0.5.9) was including the "warm-up" samples from the
+% synthesis filterbank which are more properly discarded.
+%
+% Then in late 2009 I noticed that some chord recognition code, which
+% used mp3read to read files which were then segmented on the basis of
+% some hand-marked timings, suddenly started getting much poorer
+% results. It turned out that I had upgraded my version of mpg123 to v
+% 1.9.0, and the warm-up samples had been fixed in this version. So my
+% code was discarding 2257 *good* samples, and the data was skewed 51ms
+% early relative to the hand labels.
+%
+% Hence, the current version of mp3read does not
+% discard any samples by default -- appropriate for the recent versions
+% of mpg123 included here. But if you know you're running an old, v
+% 0.5.9, mpg123, you should edit the mp3read.m source to set the flag
+% MPG123059 = 1.
+% 
+% Note also that the 'size' function relies on the number of 
+% blocks reported by mp3info.  However, many mp3 files include 
+% additional information about the size of the file in the
+% so-called Xing header, embedded in the first frame, which can 
+% specify that a certain number of samples from start and end 
+% should additionally be dropped.  mp3info doesn't read that, 
+% and there's no way for my code to probe it except by running 
+% mpg123.  Hence, the results of mp3read(fn,'size') may sometimes 
+% overestimate the length of the actual vector you'll get if 
+% you read the whole file.
+
+%% External binaries
+% The m files rely on three external binaries, each of which is
+% available for Linux, Mac OS X, or Windows:
+%
+% *mpg123* is a high-performance mp3 decoder.  Its home page is
+% http://www.mpg123.de/ .  
+%
+% *mp3info* is a utility to read technical information on an mp3
+% file. Its home page is http://www.ibiblio.org/mp3info/ .  
+%
+% *lame* is an open-source MP3 encoder.  Its homepage is
+% http://lame.sourceforge.net/ .
+%
+% The various authors of these packages are gratefully acknowledged 
+% for doing all the hard work to make these Matlab functions possible.
+
+%% Installation
+% The two routines, mp3read.m and mp3write.m, will look for their 
+% binaries (mpg123 and mp3info for mp3read; lame for mp3write) in 
+% the same directory where they are installed.  Binaries for
+% different architectures are distinguished by their extension, 
+% which is the standard Matlab computer code e.g. ".mac" for Mac
+% PPC OS X, ".glnx86" for i386-linux.  The exception is Windows,
+% where the binaries have the extension ".exe".  
+%
+% Temporary files 
+% will be written to (a) a directory taken from the environment 
+% variable TMPDIR (b) /tmp if it exists, or (c) the current 
+% directory.  This can easily be changed by editing the m files.
+
+% Last updated: $Date: 2009/03/15 18:29:58 $
+% Dan Ellis <dpwe@ee.columbia.edu>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/mp3readwrite/html/demo_mp3readwrite.html	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,233 @@
+
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+   <!--
+This HTML is auto-generated from an M-file.
+To make changes, update the M-file and republish this document.
+      --><title>MP3 reading and writing</title><meta name="generator" content="MATLAB 7.10"><meta name="date" content="2010-04-09"><meta name="m-file" content="demo_mp3readwrite"><style type="text/css">
+
+body {
+  background-color: white;
+  margin:10px;
+}
+
+h1 {
+  color: #990000; 
+  font-size: x-large;
+}
+
+h2 {
+  color: #990000;
+  font-size: medium;
+}
+
+/* Make the text shrink to fit narrow windows, but not stretch too far in 
+wide windows. */ 
+p,h1,h2,div.content div {
+  max-width: 600px;
+  /* Hack for IE6 */
+  width: auto !important; width: 600px;
+}
+
+pre.codeinput {
+  background: #EEEEEE;
+  padding: 10px;
+}
+@media print {
+  pre.codeinput {word-wrap:break-word; width:100%;}
+} 
+
+span.keyword {color: #0000FF}
+span.comment {color: #228B22}
+span.string {color: #A020F0}
+span.untermstring {color: #B20000}
+span.syscmd {color: #B28C00}
+
+pre.codeoutput {
+  color: #666666;
+  padding: 10px;
+}
+
+pre.error {
+  color: red;
+}
+
+p.footer {
+  text-align: right;
+  font-size: xx-small;
+  font-weight: lighter;
+  font-style: italic;
+  color: gray;
+}
+
+  </style></head><body><div class="content"><h1>MP3 reading and writing</h1><!--introduction--><p>These function, mp3read and mp3write, aim to exactly duplicate the operation of wavread and wavwrite for accessing soundfiles, except the soundfiles are in Mpeg-Audio layer 3 (MP3) compressed format.  All the hard work is done by external binaries written by others: mp3info to query the format of existing mp3 files, mpg123 to decode mp3 files, and lame to encode audio files. Binaries for these files are widely available (and may be included in this distribution).</p><p>These functions were originally developed for access to very large mp3 files (i.e. many hours long), and so avoid creating the entire uncompressed audio stream if possible.  mp3read allows you to specify the range of frames you want to read (as a second argument), and mp3read will construct an mpg123 command that skips blocks to decode only the part of the file that is required.  This can be much quicker (and require less memory/temporary disk) than decoding the whole file.</p><p>mpg123 also provides for "on the fly" downsampling at conversion to mono, which are supported as extra options in mp3read.</p><p>mpg123 can read MP3s across the network.  This is supported if the FILE argument is a URL (e.g. beginning 'http://...').</p><p>mp3info sometimes gets the file size wrong (as returned by the mp3read(...'size') syntax).  I'm not sure when this happens exactly, but it's probably a result of VBR files. In the worst case, figuring the number of samples in such a file requires scanning through the whole file, and mp3info doesn't usually do this.</p><p>For more information, including advice on handling MP4 files, see <a href="http://labrosa.ee.columbia.edu/matlab/mp3read.html">http://labrosa.ee.columbia.edu/matlab/mp3read.html</a></p><!--/introduction--><h2>Contents</h2><div><ul><li><a href="#1">Example usage</a></li><li><a href="#2">Delay, size, and alignment</a></li><li><a href="#3">External binaries</a></li><li><a href="#4">Installation</a></li></ul></div><h2>Example usage<a name="1"></a></h2><p>Here, we read a wav file in, then write it out as an MP3, then read the resulting MP3 back in, and compare it to the original file.</p><pre class="codeinput"><span class="comment">% Read an audio waveform</span>
+[d,sr] = wavread(<span class="string">'piano.wav'</span>);
+<span class="comment">% Save to mp3 (default settings)</span>
+mp3write(d,sr,<span class="string">'piano.mp3'</span>);
+<span class="comment">% Read it back again</span>
+[d2,sr] = mp3read(<span class="string">'piano.mp3'</span>);
+<span class="comment">% mp3 encoding involves some extra padding at each end; we attempt</span>
+<span class="comment">% to cut it off at the start, but can't do that at the end, because</span>
+<span class="comment">% mp3read doesn't know how long the original was.  But we do, so..</span>
+<span class="comment">% Chop it down to be the same length as the original</span>
+d2 = d2(1:length(d),:);
+<span class="comment">% What is the SNR (distortion)?</span>
+ddiff = d - d2;
+disp([<span class="string">'SNR is '</span>,num2str(10*log10(sum(d(:).^2)/sum(ddiff(:).^2))),<span class="string">' dB'</span>]);
+<span class="comment">% Do they look similar?</span>
+subplot(211)
+specgram(d(:,1),1024,sr);
+subplot(212)
+plot(1:5000,d(10000+(1:5000),1),1:5000,d2(10000+(1:5000)));
+<span class="comment">% Yes, pretty close</span>
+<span class="comment">%</span>
+<span class="comment">% NB: lame followed by mpg123 causes a little attenuation; you</span>
+<span class="comment">% can get a better match by scaling up the read-back waveform:</span>
+ddiff = d - 1.052*d2;
+disp([<span class="string">'SNR is '</span>,num2str(10*log10(sum(d(:).^2)/sum(ddiff(:).^2))),<span class="string">' dB'</span>]);
+</pre><pre class="codeoutput">Warning: popenw not available, writing temporary file
+SNR is 22.632 dB
+SNR is 24.8699 dB
+</pre><img vspace="5" hspace="5" src="demo_mp3readwrite_01.png" alt=""> <h2>Delay, size, and alignment<a name="2"></a></h2><p>In mid-2006 I noticed that mp3read followed by mp3write followed by mp3read effectively delayed the waveform by 2257 samples (at 44 kHz). So I introduced code to discard the first 2257 samples to ensure that the waveforms remained time aligned. As best I could understand, mpg123 (v 0.5.9) was including the "warm-up" samples from the synthesis filterbank which are more properly discarded.</p><p>Then in late 2009 I noticed that some chord recognition code, which used mp3read to read files which were then segmented on the basis of some hand-marked timings, suddenly started getting much poorer results. It turned out that I had upgraded my version of mpg123 to v 1.9.0, and the warm-up samples had been fixed in this version. So my code was discarding 2257 <b>good</b> samples, and the data was skewed 51ms early relative to the hand labels.</p><p>Hence, the current version of mp3read does not discard any samples by default -- appropriate for the recent versions of mpg123 included here. But if you know you're running an old, v 0.5.9, mpg123, you should edit the mp3read.m source to set the flag MPG123059 = 1.</p><p>Note also that the 'size' function relies on the number of blocks reported by mp3info.  However, many mp3 files include additional information about the size of the file in the so-called Xing header, embedded in the first frame, which can specify that a certain number of samples from start and end should additionally be dropped.  mp3info doesn't read that, and there's no way for my code to probe it except by running mpg123.  Hence, the results of mp3read(fn,'size') may sometimes overestimate the length of the actual vector you'll get if you read the whole file.</p><h2>External binaries<a name="3"></a></h2><p>The m files rely on three external binaries, each of which is available for Linux, Mac OS X, or Windows:</p><p><b>mpg123</b> is a high-performance mp3 decoder.  Its home page is <a href="http://www.mpg123.de/">http://www.mpg123.de/</a> .</p><p><b>mp3info</b> is a utility to read technical information on an mp3 file. Its home page is <a href="http://www.ibiblio.org/mp3info/">http://www.ibiblio.org/mp3info/</a> .</p><p><b>lame</b> is an open-source MP3 encoder.  Its homepage is <a href="http://lame.sourceforge.net/">http://lame.sourceforge.net/</a> .</p><p>The various authors of these packages are gratefully acknowledged for doing all the hard work to make these Matlab functions possible.</p><h2>Installation<a name="4"></a></h2><p>The two routines, mp3read.m and mp3write.m, will look for their binaries (mpg123 and mp3info for mp3read; lame for mp3write) in the same directory where they are installed.  Binaries for different architectures are distinguished by their extension, which is the standard Matlab computer code e.g. ".mac" for Mac PPC OS X, ".glnx86" for i386-linux.  The exception is Windows, where the binaries have the extension ".exe".</p><p>Temporary files will be written to (a) a directory taken from the environment variable TMPDIR (b) /tmp if it exists, or (c) the current directory.  This can easily be changed by editing the m files.</p><pre class="codeinput"><span class="comment">% Last updated: $Date: 2009/03/15 18:29:58 $</span>
+<span class="comment">% Dan Ellis &lt;dpwe@ee.columbia.edu&gt;</span>
+</pre><p class="footer"><br>
+      Published with MATLAB&reg; 7.10<br></p></div><!--
+##### SOURCE BEGIN #####
+%% MP3 reading and writing
+%
+% These function, mp3read and mp3write, aim to exactly duplicate 
+% the operation of wavread and wavwrite for accessing soundfiles, 
+% except the soundfiles are in Mpeg-Audio layer 3 (MP3) compressed 
+% format.  All the hard work is done by external binaries written 
+% by others: mp3info to query the format of existing mp3 files, 
+% mpg123 to decode mp3 files, and lame to encode audio files.
+% Binaries for these files are widely available (and may be
+% included in this distribution).  
+%
+% These functions were originally developed for access to very 
+% large mp3 files (i.e. many hours long), and so avoid creating 
+% the entire uncompressed audio stream if possible.  mp3read 
+% allows you to specify the range of frames you want to read 
+% (as a second argument), and mp3read will construct an mpg123 
+% command that skips blocks to decode only the part of the file 
+% that is required.  This can be much quicker (and require less 
+% memory/temporary disk) than decoding the whole file.
+%
+% mpg123 also provides for "on the fly" downsampling at conversion 
+% to mono, which are supported as extra options in mp3read.
+%
+% mpg123 can read MP3s across the network.  This is supported 
+% if the FILE argument is a URL (e.g. beginning 'http://...').
+%
+% mp3info sometimes gets the file size wrong (as returned by the
+% mp3read(...'size') syntax).  I'm not sure when this happens
+% exactly, but it's probably a result of VBR files. In the worst
+% case, figuring the number of samples in such a file requires
+% scanning through the whole file, and mp3info doesn't usually do
+% this. 
+%
+% For more information, including advice on handling MP4 files, 
+% see http://labrosa.ee.columbia.edu/matlab/mp3read.html
+
+%% Example usage
+% Here, we read a wav file in, then write it out as an MP3, then 
+% read the resulting MP3 back in, and compare it to the original 
+% file.
+
+% Read an audio waveform
+[d,sr] = wavread('piano.wav');
+% Save to mp3 (default settings)
+mp3write(d,sr,'piano.mp3');
+% Read it back again
+[d2,sr] = mp3read('piano.mp3');
+% mp3 encoding involves some extra padding at each end; we attempt 
+% to cut it off at the start, but can't do that at the end, because 
+% mp3read doesn't know how long the original was.  But we do, so..
+% Chop it down to be the same length as the original
+d2 = d2(1:length(d),:);
+% What is the SNR (distortion)?
+ddiff = d - d2;
+disp(['SNR is ',num2str(10*log10(sum(d(:).^2)/sum(ddiff(:).^2))),' dB']);
+% Do they look similar?
+subplot(211)
+specgram(d(:,1),1024,sr);
+subplot(212)
+plot(1:5000,d(10000+(1:5000),1),1:5000,d2(10000+(1:5000)));
+% Yes, pretty close
+%
+% NB: lame followed by mpg123 causes a little attenuation; you 
+% can get a better match by scaling up the read-back waveform:
+ddiff = d - 1.052*d2;
+disp(['SNR is ',num2str(10*log10(sum(d(:).^2)/sum(ddiff(:).^2))),' dB']);
+
+%% Delay, size, and alignment
+%
+% In mid-2006 I noticed that mp3read followed by mp3write followed by
+% mp3read effectively delayed the waveform by 2257 samples (at 44
+% kHz). So I introduced code to discard the first 2257 samples to ensure
+% that the waveforms remained time aligned. As best I could understand,
+% mpg123 (v 0.5.9) was including the "warm-up" samples from the
+% synthesis filterbank which are more properly discarded.
+%
+% Then in late 2009 I noticed that some chord recognition code, which
+% used mp3read to read files which were then segmented on the basis of
+% some hand-marked timings, suddenly started getting much poorer
+% results. It turned out that I had upgraded my version of mpg123 to v
+% 1.9.0, and the warm-up samples had been fixed in this version. So my
+% code was discarding 2257 *good* samples, and the data was skewed 51ms
+% early relative to the hand labels.
+%
+% Hence, the current version of mp3read does not
+% discard any samples by default REPLACE_WITH_DASH_DASH appropriate for the recent versions
+% of mpg123 included here. But if you know you're running an old, v
+% 0.5.9, mpg123, you should edit the mp3read.m source to set the flag
+% MPG123059 = 1.
+% 
+% Note also that the 'size' function relies on the number of 
+% blocks reported by mp3info.  However, many mp3 files include 
+% additional information about the size of the file in the
+% so-called Xing header, embedded in the first frame, which can 
+% specify that a certain number of samples from start and end 
+% should additionally be dropped.  mp3info doesn't read that, 
+% and there's no way for my code to probe it except by running 
+% mpg123.  Hence, the results of mp3read(fn,'size') may sometimes 
+% overestimate the length of the actual vector you'll get if 
+% you read the whole file.
+
+%% External binaries
+% The m files rely on three external binaries, each of which is
+% available for Linux, Mac OS X, or Windows:
+%
+% *mpg123* is a high-performance mp3 decoder.  Its home page is
+% http://www.mpg123.de/ .  
+%
+% *mp3info* is a utility to read technical information on an mp3
+% file. Its home page is http://www.ibiblio.org/mp3info/ .  
+%
+% *lame* is an open-source MP3 encoder.  Its homepage is
+% http://lame.sourceforge.net/ .
+%
+% The various authors of these packages are gratefully acknowledged 
+% for doing all the hard work to make these Matlab functions possible.
+
+%% Installation
+% The two routines, mp3read.m and mp3write.m, will look for their 
+% binaries (mpg123 and mp3info for mp3read; lame for mp3write) in 
+% the same directory where they are installed.  Binaries for
+% different architectures are distinguished by their extension, 
+% which is the standard Matlab computer code e.g. ".mac" for Mac
+% PPC OS X, ".glnx86" for i386-linux.  The exception is Windows,
+% where the binaries have the extension ".exe".  
+%
+% Temporary files 
+% will be written to (a) a directory taken from the environment 
+% variable TMPDIR (b) /tmp if it exists, or (c) the current 
+% directory.  This can easily be changed by editing the m files.
+
+% Last updated: $Date: 2009/03/15 18:29:58 $
+% Dan Ellis <dpwe@ee.columbia.edu>
+
+##### SOURCE END #####
+--></body></html>
\ No newline at end of file
Binary file toolboxes/mp3readwrite/html/demo_mp3readwrite.png has changed
Binary file toolboxes/mp3readwrite/html/demo_mp3readwrite_01.png has changed
Binary file toolboxes/mp3readwrite/lame.exe has changed
Binary file toolboxes/mp3readwrite/lame.glnx86 has changed
Binary file toolboxes/mp3readwrite/lame.mac has changed
Binary file toolboxes/mp3readwrite/lame.maci has changed
Binary file toolboxes/mp3readwrite/lame.maci64 has changed
Binary file toolboxes/mp3readwrite/lame_enc.dll has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/mp3readwrite/license.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+Copyright (c) 2010, Daniel Ellis
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without 
+modification, are permitted provided that the following conditions are 
+met:
+
+    * Redistributions of source code must retain the above copyright 
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright 
+      notice, this list of conditions and the following disclaimer in 
+      the documentation and/or other materials provided with the distribution
+      
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGE.
Binary file toolboxes/mp3readwrite/mp3info.exe has changed
Binary file toolboxes/mp3readwrite/mp3info.glnx86 has changed
Binary file toolboxes/mp3readwrite/mp3info.mac has changed
Binary file toolboxes/mp3readwrite/mp3info.maci has changed
Binary file toolboxes/mp3readwrite/mp3info.maci64 has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/mp3readwrite/mp3read.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,403 @@
+function [Y,FS,NBITS,OPTS] = mp3read(FILE,N,MONO,DOWNSAMP,DELAY)
+% MP3READ   Read MP3 audio file via use of external binaries.
+%   Y = MP3READ(FILE) reads an mp3-encoded audio file into the
+%     vector Y just like wavread reads a wav-encoded file (one channel 
+%     per column).  Extension ".mp3" is added if FILE has none.
+%     Also accepts other formats of wavread, such as
+%   Y = MP3READ(FILE,N) to read just the first N sample frames (N
+%     scalar), or the frames from N(1) to N(2) if N is a two-element vector.  
+%   Y = MP3READ(FILE,FMT) or Y = mp3read(FILE,N,FMT) 
+%     with FMT as 'native' returns int16 samples instead of doubles; 
+%     FMT can be 'double' for default behavior (to exactly mirror the
+%     syntax of wavread).
+%
+%   [Y,FS,NBITS,OPTS] = MP3READ(FILE...) returns extra information:
+%     FS is the sampling rate,  NBITS is the bit depth (always 16), 
+%     OPTS.fmt is a format info string; OPTS has multiple other
+%     fields, see WAVREAD.
+%
+%   SIZ = MP3READ(FILE,'size') returns the size of the audio data contained
+%     in the file in place of the actual audio data, returning the
+%     2-element vector SIZ=[samples channels].
+%
+%   [Y...] = MP3READ(FILE,N,MONO,DOWNSAMP,DELAY) extends the
+%     WAVREAD syntax to allow access to special features of the
+%     mpg123 engine:  MONO = 1 forces output to be mono (by
+%     averaging stereo channels); DOWNSAMP = 2 or 4 downsamples by 
+%     a factor of 2 or 4 (thus FS returns as 22050 or 11025
+%     respectively for a 44 kHz mp3 file); 
+%     To accommodate a bug in mpg123-0.59, DELAY controls how many
+%     "warm up" samples to drop at the start of the file; the
+%     default value of 2257 makes an mp3write/mp3read loop for a 44
+%     kHz mp3 file be as close as possible to being temporally
+%     aligned; specify as 0 to prevent discard of initial samples.
+%     For later versions of mpg123 (e.g. 1.9.0) this is not needed; 
+%     a flag in mp3read.m makes the default DELAY zero in this case.
+%
+%   [Y...] = MP3READ(URL...)  uses the built-in network
+%     functionality of mpg123 to read an MP3 file across the
+%     network.  URL must be of the form 'http://...' or
+%     'ftp://...'.  'size' and OPTS are not available in this mode.
+%
+%   Example:
+%   To read an mp3 file as doubles at its original width and sampling rate:
+%     [Y,FS] = mp3read('piano.mp3');
+%   To read the first 1 second of the same file, downsampled by a
+%   factor of 4, cast to mono, using the default filename
+%   extension:
+%     [Y,FS4] = mp3read('piano', FS/4, 1, 4);
+%
+%   Note: Because the mp3 format encodes samples in blocks of 26 ms (at
+%   44 kHz), and because of the "warm up" period of the encoder,
+%   the file length may not be exactly what you expect, depending 
+%   on your version of mpg123 (recent versions fix warmup).
+%
+%   Note: requires external binaries mpg123 and mp3info; you
+%   can find binaries for several platforms at:
+%     http://labrosa.ee.columbia.edu/matlab/mp3read.html
+%
+%   See also mp3write, wavread.
+
+% $Header: /Users/dpwe/matlab/columbiafns/RCS/mp3read.m,v 1.7 2010/04/09 18:13:00 dpwe Exp dpwe $
+
+% 2003-07-20 dpwe@ee.columbia.edu  This version calls mpg123.
+% 2004-08-31 Fixed to read whole files correctly
+% 2004-09-08 Uses mp3info to get info about mp3 files too
+% 2004-09-18 Reports all mp3info fields in OPTS.fmt; handles MPG2LSF sizes
+%            + added MONO, DOWNSAMP flags, changed default behavior.
+% 2005-09-28 Fixed bug reading full-rate stereo as 1ch (thx bjoerns@vjk.dk)
+% 2006-09-17 Chop off initial 2257 sample delay (for 44.1 kHz mp3)
+%            so read-write loop doesn't get progressively delayed.
+%            You can suppress this with a 5th argument of 0.
+% 2007-02-04 Added support for FMT argument to match wavread
+%            Added automatic selection of binary etc. to allow it
+%            to work cross-platform without editing prior to
+%            submitting to Matlab File Exchange
+% 2007-07-23 Tweaks to 'size' mode so it exactly agrees with read data.
+% 2009-03-15 Added fixes so 'http://...' file URLs will work.
+% 2009-03-26 Added filename length check to http: test (thx fabricio guzman)
+
+% find our baseline directory
+path = fileparts(which('mp3read'));
+
+% %%%%% Directory for temporary file (if needed)
+% % Try to read from environment, or use /tmp if it exists, or use CWD
+tmpdir = getenv('TMPDIR');
+if isempty(tmpdir) || exist(tmpdir,'file')==0
+  tmpdir = '/tmp';
+end
+if exist(tmpdir,'file')==0
+  tmpdir = '';
+end
+% ensure it exists
+%if length(tmpdir) > 0 && exist(tmpdir,'file')==0
+%  mkdir(tmpdir);
+%end
+
+%%%%%% Command to delete temporary file (if needed)
+rmcmd = 'rm';
+
+%%%%%% Location of the binaries - attempt to choose automatically
+%%%%%% (or edit to be hard-coded for your installation)
+ext = lower(computer);
+if ispc
+  ext = 'exe';
+  rmcmd = 'del';
+end
+% mpg123-0.59 inserts silence at the start of decoded files, which
+% we compensate.  However, this is fixed in mpg123-1.9.0, so 
+% make this flag 1 only if you have mpg123-0.5.9
+MPG123059 = 0;
+mpg123 = fullfile(path,['mpg123.',ext]);
+mp3info = fullfile(path,['mp3info.',ext]);
+
+%%%%% Check for network mode
+if length(FILE) > 6 && (strcmp(lower(FILE(1:7)),'http://') == 1 ...
+      || strcmp(lower(FILE(1:6)),'ftp://'))
+  % mp3info not available over network
+  OVERNET = 1;
+else
+  OVERNET = 0;
+end
+
+
+%%%%% Process input arguments
+if nargin < 2
+  N = 0;
+end
+
+% Check for FMT spec (per wavread)
+FMT = 'double';
+if ischar(N)
+  FMT = lower(N);
+  N = 0;
+end
+
+if length(N) == 1
+  % Specified N was upper limit
+  N = [1 N];
+end
+if nargin < 3
+  forcemono = 0;
+else
+  % Check for 3rd arg as FMT
+  if ischar(MONO)
+    FMT = lower(MONO);
+    MONO = 0;
+  end
+  forcemono = (MONO ~= 0);
+end
+if nargin < 4
+  downsamp = 1;
+else
+  downsamp = DOWNSAMP;
+end
+if downsamp ~= 1 && downsamp ~= 2 && downsamp ~= 4
+  error('DOWNSAMP can only be 1, 2, or 4');
+end
+
+% process DELAY option (nargin 5) after we've read the SR
+
+if strcmp(FMT,'native') == 0 && strcmp(FMT,'double') == 0 && ...
+      strcmp(FMT,'size') == 0
+  error(['FMT must be ''native'' or ''double'' (or ''size''), not ''',FMT,'''']);
+end
+
+
+%%%%%% Constants
+NBITS=16;
+
+%%%%% add extension if none (like wavread)
+[path,file,ext] = fileparts(FILE);
+if isempty(ext)
+  FILE = [FILE, '.mp3'];
+end
+
+%%%%% maybe expand ~ %%%%%%
+if FILE(1) == '~'
+  FILE = [getenv('HOME'),FILE(2:end)];
+end
+
+
+if ~OVERNET
+  %%%%%% Probe file to find format, size, etc. using "mp3info" utility
+  cmd = ['"',mp3info, '" -r m -p "%Q %u %b %r %v * %C %e %E %L %O %o %p" "', FILE,'"'];
+  % Q = samprate, u = #frames, b = #badframes (needed to get right answer from %u) 
+  % r = bitrate, v = mpeg version (1/2/2.5)
+  % C = Copyright, e = emph, E = CRC, L = layer, O = orig, o = mono, p = pad
+  w = mysystem(cmd);
+  % Break into numerical and ascii parts by finding the delimiter we put in
+  starpos = findstr(w,'*');
+  nums = str2num(w(1:(starpos - 2)));
+  strs = tokenize(w((starpos+2):end));
+
+  SR = nums(1);
+  nframes = nums(2);
+  nchans = 2 - strcmp(strs{6}, 'mono');
+  layer = length(strs{4});
+  bitrate = nums(4)*1000;
+  mpgv = nums(5);
+  % Figure samples per frame, after
+  % http://board.mp3-tech.org/view.php3?bn=agora_mp3techorg&key=1019510889
+  if layer == 1
+    smpspfrm = 384;
+  elseif SR < 32000 && layer ==3
+    smpspfrm = 576;
+    if mpgv == 1
+      error('SR < 32000 but mpeg version = 1');
+    end
+  else
+    smpspfrm = 1152;
+  end
+
+  OPTS.fmt.mpgBitrate = bitrate;
+  OPTS.fmt.mpgVersion = mpgv;
+  % fields from wavread's OPTS
+  OPTS.fmt.nAvgBytesPerSec = bitrate/8;
+  OPTS.fmt.nSamplesPerSec = SR;
+  OPTS.fmt.nChannels = nchans;
+  OPTS.fmt.nBlockAlign = smpspfrm/SR*bitrate/8;
+  OPTS.fmt.nBitsPerSample = NBITS;
+  OPTS.fmt.mpgNFrames = nframes;
+  OPTS.fmt.mpgCopyright = strs{1};
+  OPTS.fmt.mpgEmphasis = strs{2};
+  OPTS.fmt.mpgCRC = strs{3};
+  OPTS.fmt.mpgLayer = strs{4};
+  OPTS.fmt.mpgOriginal = strs{5};
+  OPTS.fmt.mpgChanmode = strs{6};
+  OPTS.fmt.mpgPad = strs{7};
+  OPTS.fmt.mpgSampsPerFrame = smpspfrm;
+else
+  % OVERNET mode
+  OPTS = [];
+  % guesses
+  smpspfrm = 1152;
+  SR = 44100;
+  nframes = 0;
+end
+  
+if SR == 16000 && downsamp == 4
+  error('mpg123 will not downsample 16 kHz files by 4 (only 2)');
+end
+
+% from libmpg123/frame.h
+GAPLESS_DELAY = 529;
+
+% process or set delay
+if nargin < 5
+
+  if MPG123059
+    mpg123delay44kHz = 2257;  % empirical delay of lame/mpg123 loop
+    mpg123delay16kHz = 1105;  % empirical delay of lame/mpg123 loop
+                              % for 16 kHz sampling - one 1152
+                              % sample frame less??
+    if SR == 16000
+      rawdelay = mpg123delay16kHz;
+    else
+      rawdelay = mpg123delay44kHz;  % until we know better
+    end
+    delay = round(rawdelay/downsamp);
+  else
+    % seems like predelay is fixed in mpg123-1.9.0
+    delay = 0;
+  end
+else
+  delay = DELAY;
+end
+
+if downsamp == 1
+  downsampstr = '';
+else
+  downsampstr = [' -',num2str(downsamp)];
+end
+FS = SR/downsamp;
+
+if forcemono == 1
+  nchans = 1;
+  chansstr = ' -m';
+else
+  chansstr = '';
+end
+
+% Size-reading version
+if strcmp(FMT,'size') == 1
+  if MPG123059
+    Y = [floor(smpspfrm*nframes/downsamp)-delay, nchans];
+  else
+    Y = [floor(smpspfrm*nframes/downsamp)-GAPLESS_DELAY, nchans];
+  end    
+else
+
+  % Temporary file to use
+  tmpfile = fullfile(tmpdir, ['tmp',num2str(round(1000*rand(1))),'.wav']);
+
+  skipx = 0;
+  skipblks = 0;
+  skipstr = '';
+  sttfrm = N(1)-1;
+
+  % chop off transcoding delay?
+  %sttfrm = sttfrm + delay;  % empirically measured
+  % no, we want to *decode* those samples, then drop them
+  % so delay gets added to skipx instead
+  
+  if sttfrm > 0
+    skipblks = floor(sttfrm*downsamp/smpspfrm);
+    skipx = sttfrm - (skipblks*smpspfrm/downsamp);
+    skipstr = [' -k ', num2str(skipblks)];
+  end
+  skipx = skipx + delay;
+  
+  lenstr = '';
+  endfrm = -1;
+  decblk = 0;
+  if length(N) > 1
+    endfrm = N(2);
+    if endfrm > sttfrm
+      decblk = ceil((endfrm+delay)*downsamp/smpspfrm) - skipblks + 10;   
+      % we read 10 extra blks (+10) to cover the case where up to 10 bad 
+      % blocks are included in the part we are trying to read (it happened)
+      lenstr = [' -n ', num2str(decblk)];
+      % This generates a spurious "Warn: requested..." if reading right 
+      % to the last sample by index (or bad blks), but no matter.
+    end
+ end
+
+  % Run the decode
+  cmd=['"',mpg123,'"', downsampstr, chansstr, skipstr, lenstr, ...
+       ' -q -w "', tmpfile,'"  "',FILE,'"'];
+  %w = 
+  mysystem(cmd);
+
+  % Load the data (may update FS if it was based on a guess previously)
+  [Y,FS] = wavread(tmpfile);
+
+%  % pad delay on to end, just in case
+%  Y = [Y; zeros(delay,size(Y,2))];
+%  % no, the saved file is just longer
+  
+  if decblk > 0 && length(Y) < decblk*smpspfrm/downsamp
+    % This will happen if the selected block range includes >1 bad block
+    disp(['Warn: requested ', num2str(decblk*smpspfrm/downsamp),' frames, returned ',num2str(length(Y))]);
+  end
+  
+  % Delete tmp file
+  mysystem([rmcmd,' "', tmpfile,'"']);
+  
+  % debug
+%  disp(['sttfrm=',num2str(sttfrm),' endfrm=',num2str(endfrm),' skipx=',num2str(skipx),' delay=',num2str(delay),' len=',num2str(length(Y))]);
+  
+  % Select the desired part
+  if skipx+endfrm-sttfrm > length(Y)
+      endfrm = length(Y)+sttfrm-skipx;
+  end
+  
+  if endfrm > sttfrm
+    Y = Y(skipx+(1:(endfrm-sttfrm)),:);
+  elseif skipx > 0
+    Y = Y((skipx+1):end,:);
+  end
+  
+  % Convert to int if format = 'native'
+  if strcmp(FMT,'native')
+    Y = int16((2^15)*Y);
+  end
+
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function w = mysystem(cmd)
+% Run system command; report error; strip all but last line
+[s,w] = system(cmd);
+if s ~= 0 
+  error(['unable to execute ',cmd,' (',w,')']);
+end
+% Keep just final line
+w = w((1+max([0,findstr(w,10)])):end);
+% Debug
+%disp([cmd,' -> ','*',w,'*']);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function a = tokenize(s,t)
+% Break space-separated string into cell array of strings.
+% Optional second arg gives alternate separator (default ' ')
+% 2004-09-18 dpwe@ee.columbia.edu
+if nargin < 2;  t = ' '; end
+a = [];
+p = 1;
+n = 1;
+l = length(s);
+nss = findstr([s(p:end),t],t);
+for ns = nss
+  % Skip initial spaces (separators)
+  if ns == p
+    p = p+1;
+  else
+    if p <= l
+      a{n} = s(p:(ns-1));
+      n = n+1;
+      p = ns+1;
+    end
+  end
+end
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/mp3readwrite/mp3write.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,173 @@
+function mp3write(D,SR,NBITS,FILE,OPTIONS)
+% MP3WRITE   Write MP3 file by use of external binary
+%   MP3WRITE(Y,FS,NBITS,FILE) writes waveform data Y to mp3-encoded
+%     file FILE at sampling rate FS using bitdepth NBITS.  
+%     The syntax exactly mirrors WAVWRITE.  NBITS must be 16.
+%   MP3WRITE(Y,FS,FILE) assumes NBITS is 16
+%   MP3WRITE(Y,FILE) further assumes FS = 8000.
+%
+%   MP3WRITE(..., OPTIONS) specifies additional compression control 
+%     options as a string passed directly to the lame encoder
+%     program; default is '--quiet -h' for high-quality model.
+%
+%   Example: 
+%   To convert a wav file to mp3 (assuming the sample rate is 
+%   supported):
+%     [Y,FS] = wavread('piano.wav');
+%     mp3write(Y,FS,'piano.mp3');
+%   To force lame to use 160 kbps (instead of default 128 kbps)
+%   with the default filename extension (mp3):
+%     mp3write(Y,FS,'piano','--quiet -h -b 160');
+%
+%   Note: The actual mp3 encoding is done by an external binary, 
+%     lame, which is available for multiple platforms.  Usable
+%     binaries are available from:
+%     http://labrosa.ee.columbia.edu/matlab/mp3read.html
+%
+%   Note: MP3WRITE will use the mex file popenw, if available, to
+%     open a pipe to the lame encoder.  Otherwise, it will have to
+%     write a large temporary file, then execute lame on that file.
+%     popenw is available at: 
+%       http://labrosa.ee.columbia.edu/matlab/popenrw.html
+%     This is a nice way to save large audio files as the
+%     incremental output of your code, but you'll have to adapt the
+%     central loop of this function (rather than using it directly).
+%
+%   See also: mp3read, wavwrite, popenw.
+
+% 2005-11-10 Original version
+% 2007-02-04 Modified to exactly match wavwrite syntax, and to
+%   automatically find architecture-dependent binaries.
+% 2007-07-26 Writing of stereo files via tmp file fixed (thx Yu-ching Lin)
+%
+% $Header: /Users/dpwe/matlab/columbiafns/RCS/mp3write.m,v 1.2 2007/07/26 15:09:16 dpwe Exp $
+
+% find our baseline directory
+[path] = fileparts(which('mp3write'));
+
+% %%%%% Directory for temporary file (if needed)
+% % Try to read from environment, or use /tmp if it exists, or use CWD
+tmpdir = getenv('TMPDIR');
+if isempty(tmpdir) || exist(tmpdir,'file')==0
+  tmpdir = '/tmp';
+end
+if exist(tmpdir,'file')==0
+  tmpdir = '';
+end
+% ensure it exists
+%if length(tmpdir) > 0 && exist(tmpdir,'file')==0
+%  mkdir(tmpdir);
+%end
+
+%%%%%% Command to delete temporary file (if needed)
+rmcmd = 'rm';
+
+%%%%%% Location of the binary - attempt to choose automatically
+%%%%%% (or edit to be hard-coded for your installation)
+ext = lower(computer);
+if ispc
+  ext = 'exe';
+  rmcmd = 'del';
+end
+lame = fullfile(path,['lame.',ext]);
+
+%%%% Process input arguments
+% Do we have NBITS?
+mynargin = nargin;
+if ischar(NBITS)
+  % NBITS is a string i.e. it's actually the filename
+  if mynargin > 3
+    OPTIONS = FILE;
+  end
+  FILE = NBITS;
+  NBITS = 16;
+  % it's as if NBITS had been specified...
+  mynargin = mynargin + 1;
+end
+
+if mynargin < 5
+  OPTIONS = '--quiet -h';  % -h means high-quality psych model
+end
+
+[nr, nc] = size(D);
+if nc < nr
+  D = D';
+  [nr, nc] = size(D);
+end
+% Now rows are channels, cols are time frames (so interleaving is right)
+
+%%%%% add extension if none (like wavread)
+[path,file,ext] = fileparts(FILE);
+if isempty(ext)
+  FILE = [FILE, '.mp3'];
+end
+
+nchan = nr;
+nfrm = nc;
+
+if nchan == 1
+  monostring = ' -m m';
+else
+  monostring = '';
+end
+
+lameopts = [' ', OPTIONS, monostring, ' '];
+
+%if exist('popenw') == 3
+if length(which('popenw')) > 0
+
+  % We have the writable stream process extensions
+  cmd = ['"',lame,'"', lameopts, '-r -s ',num2str(SR),' - "',FILE,'"'];
+
+  p = popenw(cmd);
+  if p < 0
+    error(['Error running popen(',cmd,')']);
+  end
+
+  % We feed the audio to the encoder in blocks of <blksize> frames.
+  % By adapting this loop, you can create your own code to 
+  % write a single, large, MP3 file one part at a time.
+  
+  blksiz = 10000;
+
+  nrem = nfrm;
+  base = 0;
+
+  while nrem > 0
+    thistime = min(nrem, blksiz);
+    done = popenw(p,32767*D(:,base+(1:thistime)),'int16be');
+    nrem = nrem - thistime;
+    base = base + thistime;
+    %disp(['done=',num2str(done)]);
+  end
+
+  % Close pipe
+  popenw(p,[]);
+
+else 
+  disp('Warning: popenw not available, writing temporary file');
+  
+  tmpfile = fullfile(tmpdir,['tmp',num2str(round(1000*rand(1))),'.wav']);
+
+  wavwrite(D',SR,tmpfile);
+  
+  cmd = ['"',lame,'"', lameopts, '"',tmpfile, '" "', FILE, '"'];
+
+  mysystem(cmd);
+
+  % Delete tmp file
+  mysystem([rmcmd, ' "', tmpfile,'"']);
+
+end 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function w = mysystem(cmd)
+% Run system command; report error; strip all but last line
+[s,w] = system(cmd);
+if s ~= 0 
+  error(['unable to execute ',cmd,' (',w,')']);
+end
+% Keep just final line
+w = w((1+max([0,findstr(w,10)])):end);
+% Debug
+%disp([cmd,' -> ','*',w,'*']);
Binary file toolboxes/mp3readwrite/mpg123.exe has changed
Binary file toolboxes/mp3readwrite/mpg123.glnx86 has changed
Binary file toolboxes/mp3readwrite/mpg123.mac has changed
Binary file toolboxes/mp3readwrite/mpg123.maci has changed
Binary file toolboxes/mp3readwrite/mpg123.maci64 has changed
Binary file toolboxes/mp3readwrite/piano.wav has changed
Binary file toolboxes/wget/bin/wget.exe has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/wget/man/cat1/wget.1.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,1733 @@
+WGET(1)                     GNU Wget                    WGET(1)
+
+
+
+NAME
+       Wget - The non-interactive network downloader.
+
+SYNOPSIS
+       wget [option]... [URL]...
+
+DESCRIPTION
+       GNU Wget is a free utility for non-interactive download
+       of files from the Web.  It supports HTTP, HTTPS, and FTP
+       protocols, as well as retrieval through HTTP proxies.
+
+       Wget is non-interactive, meaning that it can work in the
+       background, while the user is not logged on.  This
+       allows you to start a retrieval and disconnect from the
+       system, letting Wget finish the work.  By contrast, most
+       of the Web browsers require constant user's presence,
+       which can be a great hindrance when transferring a lot
+       of data.
+
+       Wget can follow links in HTML and XHTML pages and create
+       local versions of remote web sites, fully recreating the
+       directory structure of the original site.  This is some-
+       times referred to as "recursive downloading."  While
+       doing that, Wget respects the Robot Exclusion Standard
+       (/robots.txt).  Wget can be instructed to convert the
+       links in downloaded HTML files to the local files for
+       offline viewing.
+
+       Wget has been designed for robustness over slow or
+       unstable network connections; if a download fails due to
+       a network problem, it will keep retrying until the whole
+       file has been retrieved.  If the server supports reget-
+       ting, it will instruct the server to continue the down-
+       load from where it left off.
+
+OPTIONS
+       Option Syntax
+
+       Since Wget uses GNU getopt to process command-line argu-
+       ments, every option has a long form along with the short
+       one.  Long options are more convenient to remember, but
+       take time to type.  You may freely mix different option
+       styles, or specify options after the command-line argu-
+       ments.  Thus you may write:
+
+               wget -r --tries=10 http://fly.srk.fer.hr/ -o log
+
+       The space between the option accepting an argument and
+       the argument may be omitted.  Instead of -o log you can
+       write -olog.
+
+       You may put several options that do not require argu-
+       ments together, like:
+
+               wget -drc <URL>
+
+       This is a complete equivalent of:
+
+               wget -d -r -c <URL>
+
+       Since the options can be specified after the arguments,
+       you may terminate them with --.  So the following will
+       try to download URL -x, reporting failure to log:
+
+               wget -o log -- -x
+
+       The options that accept comma-separated lists all
+       respect the convention that specifying an empty list
+       clears its value.  This can be useful to clear the
+       .wgetrc settings.  For instance, if your .wgetrc sets
+       "exclude_directories" to /cgi-bin, the following example
+       will first reset it, and then set it to exclude /~nobody
+       and /~somebody.  You can also clear the lists in
+       .wgetrc.
+
+               wget -X " -X /~nobody,/~somebody
+
+       Most options that do not accept arguments are boolean
+       options, so named because their state can be captured
+       with a yes-or-no ("boolean") variable.  For example,
+       --follow-ftp tells Wget to follow FTP links from HTML
+       files and, on the other hand, --no-glob tells it not to
+       perform file globbing on FTP URLs.  A boolean option is
+       either affirmative or negative (beginning with --no).
+       All such options share several properties.
+
+       Unless stated otherwise, it is assumed that the default
+       behavior is the opposite of what the option accom-
+       plishes.  For example, the documented existence of
+       --follow-ftp assumes that the default is to not follow
+       FTP links from HTML pages.
+
+       Affirmative options can be negated by prepending the
+       --no- to the option name; negative options can be
+       negated by omitting the --no- prefix.  This might seem
+       superfluous---if the default for an affirmative option
+       is to not do something, then why provide a way to
+       explicitly turn it off?  But the startup file may in
+       fact change the default.  For instance, using "fol-
+       low_ftp = off" in .wgetrc makes Wget not follow FTP
+       links by default, and using --no-follow-ftp is the only
+       way to restore the factory default from the command
+       line.
+
+       Basic Startup Options
+
+
+       -V
+       --version
+           Display the version of Wget.
+
+       -h
+       --help
+           Print a help message describing all of Wget's com-
+           mand-line options.
+
+       -b
+       --background
+           Go to background immediately after startup.  If no
+           output file is specified via the -o, output is redi-
+           rected to wget-log.
+
+       -e command
+       --execute command
+           Execute command as if it were a part of .wgetrc.  A
+           command thus invoked will be executed after the com-
+           mands in .wgetrc, thus taking precedence over them.
+           If you need to specify more than one wgetrc command,
+           use multiple instances of -e.
+
+       Logging and Input File Options
+
+
+       -o logfile
+       --output-file=logfile
+           Log all messages to logfile.  The messages are nor-
+           mally reported to standard error.
+
+       -a logfile
+       --append-output=logfile
+           Append to logfile.  This is the same as -o, only it
+           appends to logfile instead of overwriting the old
+           log file.  If logfile does not exist, a new file is
+           created.
+
+       -d
+       --debug
+           Turn on debug output, meaning various information
+           important to the developers of Wget if it does not
+           work properly.  Your system administrator may have
+           chosen to compile Wget without debug support, in
+           which case -d will not work.  Please note that com-
+           piling with debug support is always safe---Wget com-
+           piled with the debug support will not print any
+           debug info unless requested with -d.
+
+       -q
+       --quiet
+           Turn off Wget's output.
+
+       -v
+       --verbose
+           Turn on verbose output, with all the available data.
+           The default output is verbose.
+
+       -nv
+       --no-verbose
+           Turn off verbose without being completely quiet (use
+           -q for that), which means that error messages and
+           basic information still get printed.
+
+       -i file
+       --input-file=file
+           Read URLs from file.  If - is specified as file,
+           URLs are read from the standard input.  (Use ./- to
+           read from a file literally named -.)
+
+           If this function is used, no URLs need be present on
+           the command line.  If there are URLs both on the
+           command line and in an input file, those on the com-
+           mand lines will be the first ones to be retrieved.
+           The file need not be an HTML document (but no harm
+           if it is)---it is enough if the URLs are just listed
+           sequentially.
+
+           However, if you specify --force-html, the document
+           will be regarded as html.  In that case you may have
+           problems with relative links, which you can solve
+           either by adding "<base href="url">" to the docu-
+           ments or by specifying --base=url on the command
+           line.
+
+       -F
+       --force-html
+           When input is read from a file, force it to be
+           treated as an HTML file.  This enables you to
+           retrieve relative links from existing HTML files on
+           your local disk, by adding "<base href="url">" to
+           HTML, or using the --base command-line option.
+
+       -B URL
+       --base=URL
+           Prepends URL to relative links read from the file
+           specified with the -i option.
+
+       Download Options
+
+
+       --bind-address=ADDRESS
+           When making client TCP/IP connections, bind to
+           ADDRESS on the local machine.  ADDRESS may be speci-
+           fied as a hostname or IP address.  This option can
+           be useful if your machine is bound to multiple IPs.
+
+       -t number
+       --tries=number
+           Set number of retries to number.  Specify 0 or inf
+           for infinite retrying.  The default is to retry 20
+           times, with the exception of fatal errors like "con-
+           nection refused" or "not found" (404), which are not
+           retried.
+
+       -O file
+       --output-document=file
+           The documents will not be written to the appropriate
+           files, but all will be concatenated together and
+           written to file.  If - is used as file, documents
+           will be printed to standard output, disabling link
+           conversion.  (Use ./- to print to a file literally
+           named -.)
+
+           Use of -O is not intended to mean simply "use the
+           name file instead of the one in the URL;" rather, it
+           is analogous to shell redirection: wget -O file
+           http://foo is intended to work like wget -O -
+           http://foo > file; file will be truncated immedi-
+           ately, and all downloaded content will be written
+           there.
+
+           For this reason, -N (for timestamp-checking) is not
+           supported in combination with -O: since file is
+           always newly created, it will always have a very new
+           timestamp. A warning will be issued if this combina-
+           tion is used.
+
+           Similarly, using -r or -p with -O may not work as
+           you expect: Wget won't just download the first file
+           to file and then download the rest to their normal
+           names: all downloaded content will be placed in
+           file. This was disabled in version 1.11, but has
+           been reinstated (with a warning) in 1.11.2, as there
+           are some cases where this behavior can actually have
+           some use.
+
+           Note that a combination with -k is only permitted
+           when downloading a single document, as in that case
+           it will just convert all relative URIs to external
+           ones; -k makes no sense for multiple URIs when
+           they're all being downloaded to a single file.
+
+       -nc
+       --no-clobber
+           If a file is downloaded more than once in the same
+           directory, Wget's behavior depends on a few options,
+           including -nc.  In certain cases, the local file
+           will be clobbered, or overwritten, upon repeated
+           download.  In other cases it will be preserved.
+
+           When running Wget without -N, -nc, -r, or p, down-
+           loading the same file in the same directory will
+           result in the original copy of file being preserved
+           and the second copy being named file.1.  If that
+           file is downloaded yet again, the third copy will be
+           named file.2, and so on.  When -nc is specified,
+           this behavior is suppressed, and Wget will refuse to
+           download newer copies of file.  Therefore,
+           ""no-clobber"" is actually a misnomer in this
+           mode---it's not clobbering that's prevented (as the
+           numeric suffixes were already preventing clobber-
+           ing), but rather the multiple version saving that's
+           prevented.
+
+           When running Wget with -r or -p, but without -N or
+           -nc, re-downloading a file will result in the new
+           copy simply overwriting the old.  Adding -nc will
+           prevent this behavior, instead causing the original
+           version to be preserved and any newer copies on the
+           server to be ignored.
+
+           When running Wget with -N, with or without -r or -p,
+           the decision as to whether or not to download a
+           newer copy of a file depends on the local and remote
+           timestamp and size of the file.  -nc may not be
+           specified at the same time as -N.
+
+           Note that when -nc is specified, files with the suf-
+           fixes .html or .htm will be loaded from the local
+           disk and parsed as if they had been retrieved from
+           the Web.
+
+       -c
+       --continue
+           Continue getting a partially-downloaded file.  This
+           is useful when you want to finish up a download
+           started by a previous instance of Wget, or by
+           another program.  For instance:
+
+                   wget -c ftp://sunsite.doc.ic.ac.uk/ls-lR.Z
+
+           If there is a file named ls-lR.Z in the current
+           directory, Wget will assume that it is the first
+           portion of the remote file, and will ask the server
+           to continue the retrieval from an offset equal to
+           the length of the local file.
+
+           Note that you don't need to specify this option if
+           you just want the current invocation of Wget to
+           retry downloading a file should the connection be
+           lost midway through.  This is the default behavior.
+           -c only affects resumption of downloads started
+           prior to this invocation of Wget, and whose local
+           files are still sitting around.
+
+           Without -c, the previous example would just download
+           the remote file to ls-lR.Z.1, leaving the truncated
+           ls-lR.Z file alone.
+
+           Beginning with Wget 1.7, if you use -c on a non-
+           empty file, and it turns out that the server does
+           not support continued downloading, Wget will refuse
+           to start the download from scratch, which would
+           effectively ruin existing contents.  If you really
+           want the download to start from scratch, remove the
+           file.
+
+           Also beginning with Wget 1.7, if you use -c on a
+           file which is of equal size as the one on the
+           server, Wget will refuse to download the file and
+           print an explanatory message.  The same happens when
+           the file is smaller on the server than locally (pre-
+           sumably because it was changed on the server since
+           your last download attempt)---because "continuing"
+           is not meaningful, no download occurs.
+
+           On the other side of the coin, while using -c, any
+           file that's bigger on the server than locally will
+           be considered an incomplete download and only
+           "(length(remote) - length(local))" bytes will be
+           downloaded and tacked onto the end of the local
+           file.  This behavior can be desirable in certain
+           cases---for instance, you can use wget -c to down-
+           load just the new portion that's been appended to a
+           data collection or log file.
+
+           However, if the file is bigger on the server because
+           it's been changed, as opposed to just appended to,
+           you'll end up with a garbled file.  Wget has no way
+           of verifying that the local file is really a valid
+           prefix of the remote file.  You need to be espe-
+           cially careful of this when using -c in conjunction
+           with -r, since every file will be considered as an
+           "incomplete download" candidate.
+
+           Another instance where you'll get a garbled file if
+           you try to use -c is if you have a lame HTTP proxy
+           that inserts a "transfer interrupted" string into
+           the local file.  In the future a "rollback" option
+           may be added to deal with this case.
+
+           Note that -c only works with FTP servers and with
+           HTTP servers that support the "Range" header.
+
+       --progress=type
+           Select the type of the progress indicator you wish
+           to use.  Legal indicators are "dot" and "bar".
+
+           The "bar" indicator is used by default.  It draws an
+           ASCII progress bar graphics (a.k.a "thermometer"
+           display) indicating the status of retrieval.  If the
+           output is not a TTY, the "dot" bar will be used by
+           default.
+
+           Use --progress=dot to switch to the "dot" display.
+           It traces the retrieval by printing dots on the
+           screen, each dot representing a fixed amount of
+           downloaded data.
+
+           When using the dotted retrieval, you may also set
+           the style by specifying the type as dot:style.  Dif-
+           ferent styles assign different meaning to one dot.
+           With the "default" style each dot represents 1K,
+           there are ten dots in a cluster and 50 dots in a
+           line.  The "binary" style has a more "computer"-like
+           orientation---8K dots, 16-dots clusters and 48 dots
+           per line (which makes for 384K lines).  The "mega"
+           style is suitable for downloading very large
+           files---each dot represents 64K retrieved, there are
+           eight dots in a cluster, and 48 dots on each line
+           (so each line contains 3M).
+
+           Note that you can set the default style using the
+           "progress" command in .wgetrc.  That setting may be
+           overridden from the command line.  The exception is
+           that, when the output is not a TTY, the "dot"
+           progress will be favored over "bar".  To force the
+           bar output, use --progress=bar:force.
+
+       -N
+       --timestamping
+           Turn on time-stamping.
+
+       -S
+       --server-response
+           Print the headers sent by HTTP servers and responses
+           sent by FTP servers.
+
+       --spider
+           When invoked with this option, Wget will behave as a
+           Web spider, which means that it will not download
+           the pages, just check that they are there.  For
+           example, you can use Wget to check your bookmarks:
+
+                   wget --spider --force-html -i bookmarks.html
+
+           This feature needs much more work for Wget to get
+           close to the functionality of real web spiders.
+
+       -T seconds
+       --timeout=seconds
+           Set the network timeout to seconds seconds.  This is
+           equivalent to specifying --dns-timeout, --con-
+           nect-timeout, and --read-timeout, all at the same
+           time.
+
+           When interacting with the network, Wget can check
+           for timeout and abort the operation if it takes too
+           long.  This prevents anomalies like hanging reads
+           and infinite connects.  The only timeout enabled by
+           default is a 900-second read timeout.  Setting a
+           timeout to 0 disables it altogether.  Unless you
+           know what you are doing, it is best not to change
+           the default timeout settings.
+
+           All timeout-related options accept decimal values,
+           as well as subsecond values.  For example, 0.1 sec-
+           onds is a legal (though unwise) choice of timeout.
+           Subsecond timeouts are useful for checking server
+           response times or for testing network latency.
+
+       --dns-timeout=seconds
+           Set the DNS lookup timeout to seconds seconds.  DNS
+           lookups that don't complete within the specified
+           time will fail.  By default, there is no timeout on
+           DNS lookups, other than that implemented by system
+           libraries.
+
+       --connect-timeout=seconds
+           Set the connect timeout to seconds seconds.  TCP
+           connections that take longer to establish will be
+           aborted.  By default, there is no connect timeout,
+           other than that implemented by system libraries.
+
+       --read-timeout=seconds
+           Set the read (and write) timeout to seconds seconds.
+           The "time" of this timeout refers to idle time: if,
+           at any point in the download, no data is received
+           for more than the specified number of seconds, read-
+           ing fails and the download is restarted.  This
+           option does not directly affect the duration of the
+           entire download.
+
+           Of course, the remote server may choose to terminate
+           the connection sooner than this option requires.
+           The default read timeout is 900 seconds.
+
+       --limit-rate=amount
+           Limit the download speed to amount bytes per second.
+           Amount may be expressed in bytes, kilobytes with the
+           k suffix, or megabytes with the m suffix.  For exam-
+           ple, --limit-rate=20k will limit the retrieval rate
+           to 20KB/s.  This is useful when, for whatever rea-
+           son, you don't want Wget to consume the entire
+           available bandwidth.
+
+           This option allows the use of decimal numbers, usu-
+           ally in conjunction with power suffixes; for exam-
+           ple, --limit-rate=2.5k is a legal value.
+
+           Note that Wget implements the limiting by sleeping
+           the appropriate amount of time after a network read
+           that took less time than specified by the rate.
+           Eventually this strategy causes the TCP transfer to
+           slow down to approximately the specified rate.  How-
+           ever, it may take some time for this balance to be
+           achieved, so don't be surprised if limiting the rate
+           doesn't work well with very small files.
+
+       -w seconds
+       --wait=seconds
+           Wait the specified number of seconds between the
+           retrievals.  Use of this option is recommended, as
+           it lightens the server load by making the requests
+           less frequent.  Instead of in seconds, the time can
+           be specified in minutes using the "m" suffix, in
+           hours using "h" suffix, or in days using "d" suffix.
+
+           Specifying a large value for this option is useful
+           if the network or the destination host is down, so
+           that Wget can wait long enough to reasonably expect
+           the network error to be fixed before the retry.  The
+           waiting interval specified by this function is
+           influenced by "--random-wait", which see.
+
+       --waitretry=seconds
+           If you don't want Wget to wait between every
+           retrieval, but only between retries of failed down-
+           loads, you can use this option.  Wget will use lin-
+           ear backoff, waiting 1 second after the first fail-
+           ure on a given file, then waiting 2 seconds after
+           the second failure on that file, up to the maximum
+           number of seconds you specify.  Therefore, a value
+           of 10 will actually make Wget wait up to (1 + 2 +
+           ... + 10) = 55 seconds per file.
+
+           Note that this option is turned on by default in the
+           global wgetrc file.
+
+       --random-wait
+           Some web sites may perform log analysis to identify
+           retrieval programs such as Wget by looking for sta-
+           tistically significant similarities in the time
+           between requests. This option causes the time
+           between requests to vary between 0.5 and 1.5 * wait
+           seconds, where wait was specified using the --wait
+           option, in order to mask Wget's presence from such
+           analysis.
+
+           A 2001 article in a publication devoted to develop-
+           ment on a popular consumer platform provided code to
+           perform this analysis on the fly.  Its author sug-
+           gested blocking at the class C address level to
+           ensure automated retrieval programs were blocked
+           despite changing DHCP-supplied addresses.
+
+           The --random-wait option was inspired by this ill-
+           advised recommendation to block many unrelated users
+           from a web site due to the actions of one.
+
+       --no-proxy
+           Don't use proxies, even if the appropriate *_proxy
+           environment variable is defined.
+
+       -Q quota
+       --quota=quota
+           Specify download quota for automatic retrievals.
+           The value can be specified in bytes (default), kilo-
+           bytes (with k suffix), or megabytes (with m suffix).
+
+           Note that quota will never affect downloading a sin-
+           gle file.  So if you specify wget -Q10k
+           ftp://wuarchive.wustl.edu/ls-lR.gz, all of the
+           ls-lR.gz will be downloaded.  The same goes even
+           when several URLs are specified on the command-line.
+           However, quota is respected when retrieving either
+           recursively, or from an input file.  Thus you may
+           safely type wget -Q2m -i sites---download will be
+           aborted when the quota is exceeded.
+
+           Setting quota to 0 or to inf unlimits the download
+           quota.
+
+       --no-dns-cache
+           Turn off caching of DNS lookups.  Normally, Wget
+           remembers the IP addresses it looked up from DNS so
+           it doesn't have to repeatedly contact the DNS server
+           for the same (typically small) set of hosts it
+           retrieves from.  This cache exists in memory only; a
+           new Wget run will contact DNS again.
+
+           However, it has been reported that in some situa-
+           tions it is not desirable to cache host names, even
+           for the duration of a short-running application like
+           Wget.  With this option Wget issues a new DNS lookup
+           (more precisely, a new call to "gethostbyname" or
+           "getaddrinfo") each time it makes a new connection.
+           Please note that this option will not affect caching
+           that might be performed by the resolving library or
+           by an external caching layer, such as NSCD.
+
+           If you don't understand exactly what this option
+           does, you probably won't need it.
+
+       --restrict-file-names=mode
+           Change which characters found in remote URLs may
+           show up in local file names generated from those
+           URLs.  Characters that are restricted by this option
+           are escaped, i.e. replaced with %HH, where HH is the
+           hexadecimal number that corresponds to the
+           restricted character.
+
+           By default, Wget escapes the characters that are not
+           valid as part of file names on your operating sys-
+           tem, as well as control characters that are typi-
+           cally unprintable.  This option is useful for chang-
+           ing these defaults, either because you are download-
+           ing to a non-native partition, or because you want
+           to disable escaping of the control characters.
+
+           When mode is set to "unix", Wget escapes the charac-
+           ter / and the control characters in the ranges 0--31
+           and 128--159.  This is the default on Unix-like
+           OS'es.
+
+           When mode is set to "windows", Wget escapes the
+           characters \, |, /, :, ?, ", *, <, >, and the con-
+           trol characters in the ranges 0--31 and 128--159.
+           In addition to this, Wget in Windows mode uses +
+           instead of : to separate host and port in local file
+           names, and uses @ instead of ? to separate the query
+           portion of the file name from the rest.  Therefore,
+           a URL that would be saved as
+           www.xemacs.org:4300/search.pl?input=blah in Unix
+           mode would be saved as
+           www.xemacs.org+4300/search.pl@input=blah in Windows
+           mode.  This mode is the default on Windows.
+
+           If you append ,nocontrol to the mode, as in
+           unix,nocontrol, escaping of the control characters
+           is also switched off.  You can use
+           --restrict-file-names=nocontrol to turn off escaping
+           of control characters without affecting the choice
+           of the OS to use as file name restriction mode.
+
+       -4
+       --inet4-only
+       -6
+       --inet6-only
+           Force connecting to IPv4 or IPv6 addresses.  With
+           --inet4-only or -4, Wget will only connect to IPv4
+           hosts, ignoring AAAA records in DNS, and refusing to
+           connect to IPv6 addresses specified in URLs.  Con-
+           versely, with --inet6-only or -6, Wget will only
+           connect to IPv6 hosts and ignore A records and IPv4
+           addresses.
+
+           Neither options should be needed normally.  By
+           default, an IPv6-aware Wget will use the address
+           family specified by the host's DNS record.  If the
+           DNS responds with both IPv4 and IPv6 addresses, Wget
+           will try them in sequence until it finds one it can
+           connect to.  (Also see "--prefer-family" option
+           described below.)
+
+           These options can be used to deliberately force the
+           use of IPv4 or IPv6 address families on dual family
+           systems, usually to aid debugging or to deal with
+           broken network configuration.  Only one of
+           --inet6-only and --inet4-only may be specified at
+           the same time.  Neither option is available in Wget
+           compiled without IPv6 support.
+
+       --prefer-family=IPv4/IPv6/none
+           When given a choice of several addresses, connect to
+           the addresses with specified address family first.
+           IPv4 addresses are preferred by default.
+
+           This avoids spurious errors and connect attempts
+           when accessing hosts that resolve to both IPv6 and
+           IPv4 addresses from IPv4 networks.  For example,
+           www.kame.net resolves to
+           2001:200:0:8002:203:47ff:fea5:3085 and to
+           203.178.141.194.  When the preferred family is
+           "IPv4", the IPv4 address is used first; when the
+           preferred family is "IPv6", the IPv6 address is used
+           first; if the specified value is "none", the address
+           order returned by DNS is used without change.
+
+           Unlike -4 and -6, this option doesn't inhibit access
+           to any address family, it only changes the order in
+           which the addresses are accessed.  Also note that
+           the reordering performed by this option is sta-
+           ble---it doesn't affect order of addresses of the
+           same family.  That is, the relative order of all
+           IPv4 addresses and of all IPv6 addresses remains
+           intact in all cases.
+
+       --retry-connrefused
+           Consider "connection refused" a transient error and
+           try again.  Normally Wget gives up on a URL when it
+           is unable to connect to the site because failure to
+           connect is taken as a sign that the server is not
+           running at all and that retries would not help.
+           This option is for mirroring unreliable sites whose
+           servers tend to disappear for short periods of time.
+
+       --user=user
+       --password=password
+           Specify the username user and password password for
+           both FTP and HTTP file retrieval.  These parameters
+           can be overridden using the --ftp-user and
+           --ftp-password options for FTP connections and the
+           --http-user and --http-password options for HTTP
+           connections.
+
+       Directory Options
+
+
+       -nd
+       --no-directories
+           Do not create a hierarchy of directories when
+           retrieving recursively.  With this option turned on,
+           all files will get saved to the current directory,
+           without clobbering (if a name shows up more than
+           once, the filenames will get extensions .n).
+
+       -x
+       --force-directories
+           The opposite of -nd---create a hierarchy of directo-
+           ries, even if one would not have been created other-
+           wise.  E.g. wget -x http://fly.srk.fer.hr/robots.txt
+           will save the downloaded file to fly.srk.fer.hr/ro-
+           bots.txt.
+
+       -nH
+       --no-host-directories
+           Disable generation of host-prefixed directories.  By
+           default, invoking Wget with -r
+           http://fly.srk.fer.hr/ will create a structure of
+           directories beginning with fly.srk.fer.hr/.  This
+           option disables such behavior.
+
+       --protocol-directories
+           Use the protocol name as a directory component of
+           local file names.  For example, with this option,
+           wget -r http://host will save to http/host/...
+           rather than just to host/....
+
+       --cut-dirs=number
+           Ignore number directory components.  This is useful
+           for getting a fine-grained control over the direc-
+           tory where recursive retrieval will be saved.
+
+           Take, for example, the directory at
+           ftp://ftp.xemacs.org/pub/xemacs/.  If you retrieve
+           it with -r, it will be saved locally under
+           ftp.xemacs.org/pub/xemacs/.  While the -nH option
+           can remove the ftp.xemacs.org/ part, you are still
+           stuck with pub/xemacs.  This is where --cut-dirs
+           comes in handy; it makes Wget not "see" number
+           remote directory components.  Here are several exam-
+           ples of how --cut-dirs option works.
+
+                   No options        -> ftp.xemacs.org/pub/xemacs/
+                   -nH               -> pub/xemacs/
+                   -nH --cut-dirs=1  -> xemacs/
+                   -nH --cut-dirs=2  -> .
+
+                   --cut-dirs=1      -> ftp.xemacs.org/xemacs/
+                   ...
+
+           If you just want to get rid of the directory struc-
+           ture, this option is similar to a combination of -nd
+           and -P.  However, unlike -nd, --cut-dirs does not
+           lose with subdirectories---for instance, with -nH
+           --cut-dirs=1, a beta/ subdirectory will be placed to
+           xemacs/beta, as one would expect.
+
+       -P prefix
+       --directory-prefix=prefix
+           Set directory prefix to prefix.  The directory pre-
+           fix is the directory where all other files and sub-
+           directories will be saved to, i.e. the top of the
+           retrieval tree.  The default is . (the current
+           directory).
+
+       HTTP Options
+
+
+       -E
+       --html-extension
+           If a file of type application/xhtml+xml or text/html
+           is downloaded and the URL does not end with the reg-
+           exp \.[Hh][Tt][Mm][Ll]?, this option will cause the
+           suffix .html to be appended to the local filename.
+           This is useful, for instance, when you're mirroring
+           a remote site that uses .asp pages, but you want the
+           mirrored pages to be viewable on your stock Apache
+           server.  Another good use for this is when you're
+           downloading CGI-generated materials.  A URL like
+           http://site.com/article.cgi?25 will be saved as
+           article.cgi?25.html.
+
+           Note that filenames changed in this way will be re-
+           downloaded every time you re-mirror a site, because
+           Wget can't tell that the local X.html file corre-
+           sponds to remote URL X (since it doesn't yet know
+           that the URL produces output of type text/html or
+           application/xhtml+xml.  To prevent this re-download-
+           ing, you must use -k and -K so that the original
+           version of the file will be saved as X.orig.
+
+       --http-user=user
+       --http-password=password
+           Specify the username user and password password on
+           an HTTP server.  According to the type of the chal-
+           lenge, Wget will encode them using either the
+           "basic" (insecure), the "digest", or the Windows
+           "NTLM" authentication scheme.
+
+           Another way to specify username and password is in
+           the URL itself.  Either method reveals your password
+           to anyone who bothers to run "ps".  To prevent the
+           passwords from being seen, store them in .wgetrc or
+           .netrc, and make sure to protect those files from
+           other users with "chmod".  If the passwords are
+           really important, do not leave them lying in those
+           files either---edit the files and delete them after
+           Wget has started the download.
+
+       --no-cache
+           Disable server-side cache.  In this case, Wget will
+           send the remote server an appropriate directive
+           (Pragma: no-cache) to get the file from the remote
+           service, rather than returning the cached version.
+           This is especially useful for retrieving and flush-
+           ing out-of-date documents on proxy servers.
+
+           Caching is allowed by default.
+
+       --no-cookies
+           Disable the use of cookies.  Cookies are a mechanism
+           for maintaining server-side state.  The server sends
+           the client a cookie using the "Set-Cookie" header,
+           and the client responds with the same cookie upon
+           further requests.  Since cookies allow the server
+           owners to keep track of visitors and for sites to
+           exchange this information, some consider them a
+           breach of privacy.  The default is to use cookies;
+           however, storing cookies is not on by default.
+
+       --load-cookies file
+           Load cookies from file before the first HTTP
+           retrieval.  file is a textual file in the format
+           originally used by Netscape's cookies.txt file.
+
+           You will typically use this option when mirroring
+           sites that require that you be logged in to access
+           some or all of their content.  The login process
+           typically works by the web server issuing an HTTP
+           cookie upon receiving and verifying your creden-
+           tials.  The cookie is then resent by the browser
+           when accessing that part of the site, and so proves
+           your identity.
+
+           Mirroring such a site requires Wget to send the same
+           cookies your browser sends when communicating with
+           the site.  This is achieved by --load-cookies---sim-
+           ply point Wget to the location of the cookies.txt
+           file, and it will send the same cookies your browser
+           would send in the same situation.  Different
+           browsers keep textual cookie files in different
+           locations:
+
+           @asis<Netscape 4.x.>
+               The cookies are in ~/.netscape/cookies.txt.
+
+           @asis<Mozilla and Netscape 6.x.>
+               Mozilla's cookie file is also named cookies.txt,
+               located somewhere under ~/.mozilla, in the
+               directory of your profile.  The full path usu-
+               ally ends up looking somewhat like
+               ~/.mozilla/default/some-weird-string/cook-
+               ies.txt.
+
+           @asis<Internet Explorer.>
+               You can produce a cookie file Wget can use by
+               using the File menu, Import and Export, Export
+               Cookies.  This has been tested with Internet
+               Explorer 5; it is not guaranteed to work with
+               earlier versions.
+
+           @asis<Other browsers.>
+               If you are using a different browser to create
+               your cookies, --load-cookies will only work if
+               you can locate or produce a cookie file in the
+               Netscape format that Wget expects.
+
+           If you cannot use --load-cookies, there might still
+           be an alternative.  If your browser supports a
+           "cookie manager", you can use it to view the cookies
+           used when accessing the site you're mirroring.
+           Write down the name and value of the cookie, and
+           manually instruct Wget to send those cookies,
+           bypassing the "official" cookie support:
+
+                   wget --no-cookies --header "Cookie: <name>=<value>"
+
+       --save-cookies file
+           Save cookies to file before exiting.  This will not
+           save cookies that have expired or that have no
+           expiry time (so-called "session cookies"), but also
+           see --keep-session-cookies.
+
+       --keep-session-cookies
+           When specified, causes --save-cookies to also save
+           session cookies.  Session cookies are normally not
+           saved because they are meant to be kept in memory
+           and forgotten when you exit the browser.  Saving
+           them is useful on sites that require you to log in
+           or to visit the home page before you can access some
+           pages.  With this option, multiple Wget runs are
+           considered a single browser session as far as the
+           site is concerned.
+
+           Since the cookie file format does not normally carry
+           session cookies, Wget marks them with an expiry
+           timestamp of 0.  Wget's --load-cookies recognizes
+           those as session cookies, but it might confuse other
+           browsers.  Also note that cookies so loaded will be
+           treated as other session cookies, which means that
+           if you want --save-cookies to preserve them again,
+           you must use --keep-session-cookies again.
+
+       --ignore-length
+           Unfortunately, some HTTP servers (CGI programs, to
+           be more precise) send out bogus "Content-Length"
+           headers, which makes Wget go wild, as it thinks not
+           all the document was retrieved.  You can spot this
+           syndrome if Wget retries getting the same document
+           again and again, each time claiming that the (other-
+           wise normal) connection has closed on the very same
+           byte.
+
+           With this option, Wget will ignore the "Con-
+           tent-Length" header---as if it never existed.
+
+       --header=header-line
+           Send header-line along with the rest of the headers
+           in each HTTP request.  The supplied header is sent
+           as-is, which means it must contain name and value
+           separated by colon, and must not contain newlines.
+
+           You may define more than one additional header by
+           specifying --header more than once.
+
+                   wget --header='Accept-Charset: iso-8859-2' \
+                        --header='Accept-Language: hr'        \
+                          http://fly.srk.fer.hr/
+
+           Specification of an empty string as the header value
+           will clear all previous user-defined headers.
+
+           As of Wget 1.10, this option can be used to override
+           headers otherwise generated automatically.  This
+           example instructs Wget to connect to localhost, but
+           to specify foo.bar in the "Host" header:
+
+                   wget --header="Host: foo.bar" http://localhost/
+
+           In versions of Wget prior to 1.10 such use of
+           --header caused sending of duplicate headers.
+
+       --max-redirect=number
+           Specifies the maximum number of redirections to fol-
+           low for a resource.  The default is 20, which is
+           usually far more than necessary. However, on those
+           occasions where you want to allow more (or fewer),
+           this is the option to use.
+
+       --proxy-user=user
+       --proxy-password=password
+           Specify the username user and password password for
+           authentication on a proxy server.  Wget will encode
+           them using the "basic" authentication scheme.
+
+           Security considerations similar to those with
+           --http-password pertain here as well.
+
+       --referer=url
+           Include `Referer: url' header in HTTP request.  Use-
+           ful for retrieving documents with server-side pro-
+           cessing that assume they are always being retrieved
+           by interactive web browsers and only come out prop-
+           erly when Referer is set to one of the pages that
+           point to them.
+
+       --save-headers
+           Save the headers sent by the HTTP server to the
+           file, preceding the actual contents, with an empty
+           line as the separator.
+
+       -U agent-string
+       --user-agent=agent-string
+           Identify as agent-string to the HTTP server.
+
+           The HTTP protocol allows the clients to identify
+           themselves using a "User-Agent" header field.  This
+           enables distinguishing the WWW software, usually for
+           statistical purposes or for tracing of protocol vio-
+           lations.  Wget normally identifies as Wget/version,
+           version being the current version number of Wget.
+
+           However, some sites have been known to impose the
+           policy of tailoring the output according to the
+           "User-Agent"-supplied information.  While this is
+           not such a bad idea in theory, it has been abused by
+           servers denying information to clients other than
+           (historically) Netscape or, more frequently,
+           Microsoft Internet Explorer.  This option allows you
+           to change the "User-Agent" line issued by Wget.  Use
+           of this option is discouraged, unless you really
+           know what you are doing.
+
+           Specifying empty user agent with --user-agent=""
+           instructs Wget not to send the "User-Agent" header
+           in HTTP requests.
+
+       --post-data=string
+       --post-file=file
+           Use POST as the method for all HTTP requests and
+           send the specified data in the request body.
+           "--post-data" sends string as data, whereas
+           "--post-file" sends the contents of file.  Other
+           than that, they work in exactly the same way.
+
+           Please be aware that Wget needs to know the size of
+           the POST data in advance.  Therefore the argument to
+           "--post-file" must be a regular file; specifying a
+           FIFO or something like /dev/stdin won't work.  It's
+           not quite clear how to work around this limitation
+           inherent in HTTP/1.0.  Although HTTP/1.1 introduces
+           chunked transfer that doesn't require knowing the
+           request length in advance, a client can't use chun-
+           ked unless it knows it's talking to an HTTP/1.1
+           server.  And it can't know that until it receives a
+           response, which in turn requires the request to have
+           been completed -- a chicken-and-egg problem.
+
+           Note: if Wget is redirected after the POST request
+           is completed, it will not send the POST data to the
+           redirected URL.  This is because URLs that process
+           POST often respond with a redirection to a regular
+           page, which does not desire or accept POST.  It is
+           not completely clear that this behavior is optimal;
+           if it doesn't work out, it might be changed in the
+           future.
+
+           This example shows how to log to a server using POST
+           and then proceed to download the desired pages, pre-
+           sumably only accessible to authorized users:
+
+                   # Log in to the server.  This can be done only once.
+                   wget --save-cookies cookies.txt \
+                        --post-data 'user=foo&password=bar' \
+                        http://server.com/auth.php
+
+                   # Now grab the page or pages we care about.
+                   wget --load-cookies cookies.txt \
+                        -p http://server.com/interesting/article.php
+
+           If the server is using session cookies to track user
+           authentication, the above will not work because
+           --save-cookies will not save them (and neither will
+           browsers) and the cookies.txt file will be empty.
+           In that case use --keep-session-cookies along with
+           --save-cookies to force saving of session cookies.
+
+       --content-disposition
+           If this is set to on, experimental (not fully-func-
+           tional) support for "Content-Disposition" headers is
+           enabled. This can currently result in extra round-
+           trips to the server for a "HEAD" request, and is
+           known to suffer from a few bugs, which is why it is
+           not currently enabled by default.
+
+           This option is useful for some file-downloading CGI
+           programs that use "Content-Disposition" headers to
+           describe what the name of a downloaded file should
+           be.
+
+       --auth-no-challenge
+           If this option is given, Wget will send Basic HTTP
+           authentication information (plaintext username and
+           password) for all requests, just like Wget 1.10.2
+           and prior did by default.
+
+           Use of this option is not recommended, and is
+           intended only to support some few obscure servers,
+           which never send HTTP authentication challenges, but
+           accept unsolicited auth info, say, in addition to
+           form-based authentication.
+
+       HTTPS (SSL/TLS) Options
+
+       To support encrypted HTTP (HTTPS) downloads, Wget must
+       be compiled with an external SSL library, currently
+       OpenSSL.  If Wget is compiled without SSL support, none
+       of these options are available.
+
+       --secure-protocol=protocol
+           Choose the secure protocol to be used.  Legal values
+           are auto, SSLv2, SSLv3, and TLSv1.  If auto is used,
+           the SSL library is given the liberty of choosing the
+           appropriate protocol automatically, which is
+           achieved by sending an SSLv2 greeting and announcing
+           support for SSLv3 and TLSv1.  This is the default.
+
+           Specifying SSLv2, SSLv3, or TLSv1 forces the use of
+           the corresponding protocol.  This is useful when
+           talking to old and buggy SSL server implementations
+           that make it hard for OpenSSL to choose the correct
+           protocol version.  Fortunately, such servers are
+           quite rare.
+
+       --no-check-certificate
+           Don't check the server certificate against the
+           available certificate authorities.  Also don't
+           require the URL host name to match the common name
+           presented by the certificate.
+
+           As of Wget 1.10, the default is to verify the
+           server's certificate against the recognized certifi-
+           cate authorities, breaking the SSL handshake and
+           aborting the download if the verification fails.
+           Although this provides more secure downloads, it
+           does break interoperability with some sites that
+           worked with previous Wget versions, particularly
+           those using self-signed, expired, or otherwise
+           invalid certificates.  This option forces an "inse-
+           cure" mode of operation that turns the certificate
+           verification errors into warnings and allows you to
+           proceed.
+
+           If you encounter "certificate verification" errors
+           or ones saying that "common name doesn't match
+           requested host name", you can use this option to
+           bypass the verification and proceed with the down-
+           load.  Only use this option if you are otherwise
+           convinced of the site's authenticity, or if you
+           really don't care about the validity of its certifi-
+           cate.  It is almost always a bad idea not to check
+           the certificates when transmitting confidential or
+           important data.
+
+       --certificate=file
+           Use the client certificate stored in file.  This is
+           needed for servers that are configured to require
+           certificates from the clients that connect to them.
+           Normally a certificate is not required and this
+           switch is optional.
+
+       --certificate-type=type
+           Specify the type of the client certificate.  Legal
+           values are PEM (assumed by default) and DER, also
+           known as ASN1.
+
+       --private-key=file
+           Read the private key from file.  This allows you to
+           provide the private key in a file separate from the
+           certificate.
+
+       --private-key-type=type
+           Specify the type of the private key.  Accepted val-
+           ues are PEM (the default) and DER.
+
+       --ca-certificate=file
+           Use file as the file with the bundle of certificate
+           authorities ("CA") to verify the peers.  The cer-
+           tificates must be in PEM format.
+
+           Without this option Wget looks for CA certificates
+           at the system-specified locations, chosen at OpenSSL
+           installation time.
+
+       --ca-directory=directory
+           Specifies directory containing CA certificates in
+           PEM format.  Each file contains one CA certificate,
+           and the file name is based on a hash value derived
+           from the certificate.  This is achieved by process-
+           ing a certificate directory with the "c_rehash"
+           utility supplied with OpenSSL.  Using --ca-directory
+           is more efficient than --ca-certificate when many
+           certificates are installed because it allows Wget to
+           fetch certificates on demand.
+
+           Without this option Wget looks for CA certificates
+           at the system-specified locations, chosen at OpenSSL
+           installation time.
+
+       --random-file=file
+           Use file as the source of random data for seeding
+           the pseudo-random number generator on systems with-
+           out /dev/random.
+
+           On such systems the SSL library needs an external
+           source of randomness to initialize.  Randomness may
+           be provided by EGD (see --egd-file below) or read
+           from an external source specified by the user.  If
+           this option is not specified, Wget looks for random
+           data in $RANDFILE or, if that is unset, in
+           $HOME/.rnd.  If none of those are available, it is
+           likely that SSL encryption will not be usable.
+
+           If you're getting the "Could not seed OpenSSL PRNG;
+           disabling SSL."  error, you should provide random
+           data using some of the methods described above.
+
+       --egd-file=file
+           Use file as the EGD socket.  EGD stands for Entropy
+           Gathering Daemon, a user-space program that collects
+           data from various unpredictable system sources and
+           makes it available to other programs that might need
+           it.  Encryption software, such as the SSL library,
+           needs sources of non-repeating randomness to seed
+           the random number generator used to produce crypto-
+           graphically strong keys.
+
+           OpenSSL allows the user to specify his own source of
+           entropy using the "RAND_FILE" environment variable.
+           If this variable is unset, or if the specified file
+           does not produce enough randomness, OpenSSL will
+           read random data from EGD socket specified using
+           this option.
+
+           If this option is not specified (and the equivalent
+           startup command is not used), EGD is never con-
+           tacted.  EGD is not needed on modern Unix systems
+           that support /dev/random.
+
+       FTP Options
+
+
+       --ftp-user=user
+       --ftp-password=password
+           Specify the username user and password password on
+           an FTP server.  Without this, or the corresponding
+           startup option, the password defaults to -wget@,
+           normally used for anonymous FTP.
+
+           Another way to specify username and password is in
+           the URL itself.  Either method reveals your password
+           to anyone who bothers to run "ps".  To prevent the
+           passwords from being seen, store them in .wgetrc or
+           .netrc, and make sure to protect those files from
+           other users with "chmod".  If the passwords are
+           really important, do not leave them lying in those
+           files either---edit the files and delete them after
+           Wget has started the download.
+
+       --no-remove-listing
+           Don't remove the temporary .listing files generated
+           by FTP retrievals.  Normally, these files contain
+           the raw directory listings received from FTP
+           servers.  Not removing them can be useful for debug-
+           ging purposes, or when you want to be able to easily
+           check on the contents of remote server directories
+           (e.g. to verify that a mirror you're running is com-
+           plete).
+
+           Note that even though Wget writes to a known file-
+           name for this file, this is not a security hole in
+           the scenario of a user making .listing a symbolic
+           link to /etc/passwd or something and asking "root"
+           to run Wget in his or her directory.  Depending on
+           the options used, either Wget will refuse to write
+           to .listing, making the globbing/recur-
+           sion/time-stamping operation fail, or the symbolic
+           link will be deleted and replaced with the actual
+           .listing file, or the listing will be written to a
+           .listing.number file.
+
+           Even though this situation isn't a problem, though,
+           "root" should never run Wget in a non-trusted user's
+           directory.  A user could do something as simple as
+           linking index.html to /etc/passwd and asking "root"
+           to run Wget with -N or -r so the file will be over-
+           written.
+
+       --no-glob
+           Turn off FTP globbing.  Globbing refers to the use
+           of shell-like special characters (wildcards), like
+           *, ?, [ and ] to retrieve more than one file from
+           the same directory at once, like:
+
+                   wget ftp://gnjilux.srk.fer.hr/*.msg
+
+           By default, globbing will be turned on if the URL
+           contains a globbing character.  This option may be
+           used to turn globbing on or off permanently.
+
+           You may have to quote the URL to protect it from
+           being expanded by your shell.  Globbing makes Wget
+           look for a directory listing, which is system-spe-
+           cific.  This is why it currently works only with
+           Unix FTP servers (and the ones emulating Unix "ls"
+           output).
+
+       --no-passive-ftp
+           Disable the use of the passive FTP transfer mode.
+           Passive FTP mandates that the client connect to the
+           server to establish the data connection rather than
+           the other way around.
+
+           If the machine is connected to the Internet
+           directly, both passive and active FTP should work
+           equally well.  Behind most firewall and NAT configu-
+           rations passive FTP has a better chance of working.
+           However, in some rare firewall configurations,
+           active FTP actually works when passive FTP doesn't.
+           If you suspect this to be the case, use this option,
+           or set "passive_ftp=off" in your init file.
+
+       --retr-symlinks
+           Usually, when retrieving FTP directories recursively
+           and a symbolic link is encountered, the linked-to
+           file is not downloaded.  Instead, a matching sym-
+           bolic link is created on the local filesystem.  The
+           pointed-to file will not be downloaded unless this
+           recursive retrieval would have encountered it sepa-
+           rately and downloaded it anyway.
+
+           When --retr-symlinks is specified, however, symbolic
+           links are traversed and the pointed-to files are
+           retrieved.  At this time, this option does not cause
+           Wget to traverse symlinks to directories and recurse
+           through them, but in the future it should be
+           enhanced to do this.
+
+           Note that when retrieving a file (not a directory)
+           because it was specified on the command-line, rather
+           than because it was recursed to, this option has no
+           effect.  Symbolic links are always traversed in this
+           case.
+
+       --no-http-keep-alive
+           Turn off the "keep-alive" feature for HTTP down-
+           loads.  Normally, Wget asks the server to keep the
+           connection open so that, when you download more than
+           one document from the same server, they get trans-
+           ferred over the same TCP connection.  This saves
+           time and at the same time reduces the load on the
+           server.
+
+           This option is useful when, for some reason, persis-
+           tent (keep-alive) connections don't work for you,
+           for example due to a server bug or due to the
+           inability of server-side scripts to cope with the
+           connections.
+
+       Recursive Retrieval Options
+
+
+       -r
+       --recursive
+           Turn on recursive retrieving.
+
+       -l depth
+       --level=depth
+           Specify recursion maximum depth level depth.  The
+           default maximum depth is 5.
+
+       --delete-after
+           This option tells Wget to delete every single file
+           it downloads, after having done so.  It is useful
+           for pre-fetching popular pages through a proxy,
+           e.g.:
+
+                   wget -r -nd --delete-after http://whatever.com/~popular/page/
+
+           The -r option is to retrieve recursively, and -nd to
+           not create directories.
+
+           Note that --delete-after deletes files on the local
+           machine.  It does not issue the DELE command to
+           remote FTP sites, for instance.  Also note that when
+           --delete-after is specified, --convert-links is
+           ignored, so .orig files are simply not created in
+           the first place.
+
+       -k
+       --convert-links
+           After the download is complete, convert the links in
+           the document to make them suitable for local view-
+           ing.  This affects not only the visible hyperlinks,
+           but any part of the document that links to external
+           content, such as embedded images, links to style
+           sheets, hyperlinks to non-HTML content, etc.
+
+           Each link will be changed in one of the two ways:
+
+           *   The links to files that have been downloaded by
+               Wget will be changed to refer to the file they
+               point to as a relative link.
+
+               Example: if the downloaded file /foo/doc.html
+               links to /bar/img.gif, also downloaded, then the
+               link in doc.html will be modified to point to
+               ../bar/img.gif.  This kind of transformation
+               works reliably for arbitrary combinations of
+               directories.
+
+           *   The links to files that have not been downloaded
+               by Wget will be changed to include host name and
+               absolute path of the location they point to.
+
+               Example: if the downloaded file /foo/doc.html
+               links to /bar/img.gif (or to ../bar/img.gif),
+               then the link in doc.html will be modified to
+               point to http://hostname/bar/img.gif.
+
+           Because of this, local browsing works reliably: if a
+           linked file was downloaded, the link will refer to
+           its local name; if it was not downloaded, the link
+           will refer to its full Internet address rather than
+           presenting a broken link.  The fact that the former
+           links are converted to relative links ensures that
+           you can move the downloaded hierarchy to another
+           directory.
+
+           Note that only at the end of the download can Wget
+           know which links have been downloaded.  Because of
+           that, the work done by -k will be performed at the
+           end of all the downloads.
+
+       -K
+       --backup-converted
+           When converting a file, back up the original version
+           with a .orig suffix.  Affects the behavior of -N.
+
+       -m
+       --mirror
+           Turn on options suitable for mirroring.  This option
+           turns on recursion and time-stamping, sets infinite
+           recursion depth and keeps FTP directory listings.
+           It is currently equivalent to -r -N -l inf
+           --no-remove-listing.
+
+       -p
+       --page-requisites
+           This option causes Wget to download all the files
+           that are necessary to properly display a given HTML
+           page.  This includes such things as inlined images,
+           sounds, and referenced stylesheets.
+
+           Ordinarily, when downloading a single HTML page, any
+           requisite documents that may be needed to display it
+           properly are not downloaded.  Using -r together with
+           -l can help, but since Wget does not ordinarily dis-
+           tinguish between external and inlined documents, one
+           is generally left with "leaf documents" that are
+           missing their requisites.
+
+           For instance, say document 1.html contains an
+           "<IMG>" tag referencing 1.gif and an "<A>" tag
+           pointing to external document 2.html.  Say that
+           2.html is similar but that its image is 2.gif and it
+           links to 3.html.  Say this continues up to some
+           arbitrarily high number.
+
+           If one executes the command:
+
+                   wget -r -l 2 http://<site>/1.html
+
+           then 1.html, 1.gif, 2.html, 2.gif, and 3.html will
+           be downloaded.  As you can see, 3.html is without
+           its requisite 3.gif because Wget is simply counting
+           the number of hops (up to 2) away from 1.html in
+           order to determine where to stop the recursion.
+           However, with this command:
+
+                   wget -r -l 2 -p http://<site>/1.html
+
+           all the above files and 3.html's requisite 3.gif
+           will be downloaded.  Similarly,
+
+                   wget -r -l 1 -p http://<site>/1.html
+
+           will cause 1.html, 1.gif, 2.html, and 2.gif to be
+           downloaded.  One might think that:
+
+                   wget -r -l 0 -p http://<site>/1.html
+
+           would download just 1.html and 1.gif, but unfortu-
+           nately this is not the case, because -l 0 is equiva-
+           lent to -l inf---that is, infinite recursion.  To
+           download a single HTML page (or a handful of them,
+           all specified on the command-line or in a -i URL
+           input file) and its (or their) requisites, simply
+           leave off -r and -l:
+
+                   wget -p http://<site>/1.html
+
+           Note that Wget will behave as if -r had been speci-
+           fied, but only that single page and its requisites
+           will be downloaded.  Links from that page to exter-
+           nal documents will not be followed.  Actually, to
+           download a single page and all its requisites (even
+           if they exist on separate websites), and make sure
+           the lot displays properly locally, this author likes
+           to use a few options in addition to -p:
+
+                   wget -E -H -k -K -p http://<site>/<document>
+
+           To finish off this topic, it's worth knowing that
+           Wget's idea of an external document link is any URL
+           specified in an "<A>" tag, an "<AREA>" tag, or a
+           "<LINK>" tag other than "<LINK REL="stylesheet">".
+
+       --strict-comments
+           Turn on strict parsing of HTML comments.  The
+           default is to terminate comments at the first occur-
+           rence of -->.
+
+           According to specifications, HTML comments are
+           expressed as SGML declarations.  Declaration is spe-
+           cial markup that begins with <! and ends with >,
+           such as <!DOCTYPE ...>, that may contain comments
+           between a pair of -- delimiters.  HTML comments are
+           "empty declarations", SGML declarations without any
+           non-comment text.  Therefore, <!--foo--> is a valid
+           comment, and so is <!--one-- --two-->, but
+           <!--1--2--> is not.
+
+           On the other hand, most HTML writers don't perceive
+           comments as anything other than text delimited with
+           <!-- and -->, which is not quite the same.  For
+           example, something like <!------------> works as a
+           valid comment as long as the number of dashes is a
+           multiple of four (!).  If not, the comment techni-
+           cally lasts until the next --, which may be at the
+           other end of the document.  Because of this, many
+           popular browsers completely ignore the specification
+           and implement what users have come to expect: com-
+           ments delimited with <!-- and -->.
+
+           Until version 1.9, Wget interpreted comments
+           strictly, which resulted in missing links in many
+           web pages that displayed fine in browsers, but had
+           the misfortune of containing non-compliant comments.
+           Beginning with version 1.9, Wget has joined the
+           ranks of clients that implements "naive" comments,
+           terminating each comment at the first occurrence of
+           -->.
+
+           If, for whatever reason, you want strict comment
+           parsing, use this option to turn it on.
+
+       Recursive Accept/Reject Options
+
+
+       -A acclist --accept acclist
+       -R rejlist --reject rejlist
+           Specify comma-separated lists of file name suffixes
+           or patterns to accept or reject. Note that if any of
+           the wildcard characters, *, ?, [ or ], appear in an
+           element of acclist or rejlist, it will be treated as
+           a pattern, rather than a suffix.
+
+       -D domain-list
+       --domains=domain-list
+           Set domains to be followed.  domain-list is a comma-
+           separated list of domains.  Note that it does not
+           turn on -H.
+
+       --exclude-domains domain-list
+           Specify the domains that are not to be followed..
+
+       --follow-ftp
+           Follow FTP links from HTML documents.  Without this
+           option, Wget will ignore all the FTP links.
+
+       --follow-tags=list
+           Wget has an internal table of HTML tag / attribute
+           pairs that it considers when looking for linked doc-
+           uments during a recursive retrieval.  If a user
+           wants only a subset of those tags to be considered,
+           however, he or she should be specify such tags in a
+           comma-separated list with this option.
+
+       --ignore-tags=list
+           This is the opposite of the --follow-tags option.
+           To skip certain HTML tags when recursively looking
+           for documents to download, specify them in a comma-
+           separated list.
+
+           In the past, this option was the best bet for down-
+           loading a single page and its requisites, using a
+           command-line like:
+
+                   wget --ignore-tags=a,area -H -k -K -r http://<site>/<document>
+
+           However, the author of this option came across a
+           page with tags like "<LINK REL="home" HREF="/">" and
+           came to the realization that specifying tags to
+           ignore was not enough.  One can't just tell Wget to
+           ignore "<LINK>", because then stylesheets will not
+           be downloaded.  Now the best bet for downloading a
+           single page and its requisites is the dedicated
+           --page-requisites option.
+
+       --ignore-case
+           Ignore case when matching files and directories.
+           This influences the behavior of -R, -A, -I, and -X
+           options, as well as globbing implemented when down-
+           loading from FTP sites.  For example, with this
+           option, -A *.txt will match file1.txt, but also
+           file2.TXT, file3.TxT, and so on.
+
+       -H
+       --span-hosts
+           Enable spanning across hosts when doing recursive
+           retrieving.
+
+       -L
+       --relative
+           Follow relative links only.  Useful for retrieving a
+           specific home page without any distractions, not
+           even those from the same hosts.
+
+       -I list
+       --include-directories=list
+           Specify a comma-separated list of directories you
+           wish to follow when downloading.  Elements of list
+           may contain wildcards.
+
+       -X list
+       --exclude-directories=list
+           Specify a comma-separated list of directories you
+           wish to exclude from download.  Elements of list may
+           contain wildcards.
+
+       -np
+       --no-parent
+           Do not ever ascend to the parent directory when
+           retrieving recursively.  This is a useful option,
+           since it guarantees that only the files below a cer-
+           tain hierarchy will be downloaded.
+
+FILES
+       /usr/local/etc/wgetrc
+           Default location of the global startup file.
+
+       .wgetrc
+           User startup file.
+
+BUGS
+       You are welcome to submit bug reports via the GNU Wget
+       bug tracker (see <http://wget.addictivecode.org/Bug-
+       Tracker>).
+
+       Before actually submitting a bug report, please try to
+       follow a few simple guidelines.
+
+       1.  Please try to ascertain that the behavior you see
+           really is a bug.  If Wget crashes, it's a bug.  If
+           Wget does not behave as documented, it's a bug.  If
+           things work strange, but you are not sure about the
+           way they are supposed to work, it might well be a
+           bug, but you might want to double-check the documen-
+           tation and the mailing lists.
+
+       2.  Try to repeat the bug in as simple circumstances as
+           possible.  E.g. if Wget crashes while downloading
+           wget -rl0 -kKE -t5 --no-proxy http://yoyodyne.com -o
+           /tmp/log, you should try to see if the crash is
+           repeatable, and if will occur with a simpler set of
+           options.  You might even try to start the download
+           at the page where the crash occurred to see if that
+           page somehow triggered the crash.
+
+           Also, while I will probably be interested to know
+           the contents of your .wgetrc file, just dumping it
+           into the debug message is probably a bad idea.
+           Instead, you should first try to see if the bug
+           repeats with .wgetrc moved out of the way.  Only if
+           it turns out that .wgetrc settings affect the bug,
+           mail me the relevant parts of the file.
+
+       3.  Please start Wget with -d option and send us the
+           resulting output (or relevant parts thereof).  If
+           Wget was compiled without debug support, recompile
+           it---it is much easier to trace bugs with debug sup-
+           port on.
+
+           Note: please make sure to remove any potentially
+           sensitive information from the debug log before
+           sending it to the bug address.  The "-d" won't go
+           out of its way to collect sensitive information, but
+           the log will contain a fairly complete transcript of
+           Wget's communication with the server, which may
+           include passwords and pieces of downloaded data.
+           Since the bug address is publically archived, you
+           may assume that all bug reports are visible to the
+           public.
+
+       4.  If Wget has crashed, try to run it in a debugger,
+           e.g. "gdb `which wget` core" and type "where" to get
+           the backtrace.  This may not work if the system
+           administrator has disabled core files, but it is
+           safe to try.
+
+SEE ALSO
+       This is not the complete manual for GNU Wget.  For more
+       complete information, including more detailed explana-
+       tions of some of the options, and a number of commands
+       available for use with .wgetrc files and the -e option,
+       see the GNU Info entry for wget.
+
+AUTHOR
+       Originally written by Hrvoje Niksic
+       <hniksic@xemacs.org>.  Currently maintained by Micah
+       Cowan <micah@cowan.name>.
+
+COPYRIGHT
+       Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+       2003, 2004, 2005, 2006, 2007, 2008 Free Software Founda-
+       tion, Inc.
+
+       Permission is granted to copy, distribute and/or modify
+       this document under the terms of the GNU Free Documenta-
+       tion License, Version 1.2 or any later version published
+       by the Free Software Foundation; with no Invariant Sec-
+       tions, no Front-Cover Texts, and no Back-Cover Texts.  A
+       copy of the license is included in the section entitled
+       "GNU Free Documentation License".
+
+
+
+GNU Wget 1.11.4            2008-06-29                   WGET(1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/wget/wget.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,141 @@
+function [ out ] = wget(url, options)
+%WGET Summary of this function goes here
+%   Detailed explanation goes here
+%
+% GNU Wget 1.11.4, a non-interactive network retriever. 
+% Usage: wget [OPTION]... [URL]... 
+%  
+% Mandatory arguments to long options are mandatory for short options too. 
+%  
+% Startup: 
+%   -V,  --version           display the version of Wget and exit. 
+%   -h,  --help              print this help. 
+%   -b,  --background        go to background after startup. 
+%   -e,  --execute=COMMAND   execute a `.wgetrc'-style command. 
+%  
+% Logging and input file: 
+%   -o,  --output-file=FILE    log messages to FILE. 
+%   -a,  --append-output=FILE  append messages to FILE. 
+%   -d,  --debug               print lots of debugging information. 
+%   -q,  --quiet               quiet (no output). 
+%   -v,  --verbose             be verbose (this is the default). 
+%   -nv, --no-verbose          turn off verboseness, without being quiet. 
+%   -i,  --input-file=FILE     download URLs found in FILE. 
+%   -F,  --force-html          treat input file as HTML. 
+%   -B,  --base=URL            prepends URL to relative links in -F -i file. 
+%  
+% Download: 
+%   -t,  --tries=NUMBER            set number of retries to NUMBER (0 unlimits). 
+%        --retry-connrefused       retry even if connection is refused. 
+%   -O,  --output-document=FILE    write documents to FILE. 
+%   -nc, --no-clobber              skip downloads that would download to 
+%                                  existing files. 
+%   -c,  --continue                resume getting a partially-downloaded file. 
+%        --progress=TYPE           select progress gauge type. 
+%   -N,  --timestamping            don't re-retrieve files unless newer than 
+%                                  local. 
+%   -S,  --server-response         print server response. 
+%        --spider                  don't download anything. 
+%   -T,  --timeout=SECONDS         set all timeout values to SECONDS. 
+%        --dns-timeout=SECS        set the DNS lookup timeout to SECS. 
+%        --connect-timeout=SECS    set the connect timeout to SECS. 
+%        --read-timeout=SECS       set the read timeout to SECS. 
+%   -w,  --wait=SECONDS            wait SECONDS between retrievals. 
+%        --waitretry=SECONDS       wait 1..SECONDS between retries of a retrieval. 
+%        --random-wait             wait from 0...2*WAIT secs between retrievals. 
+%        --no-proxy                explicitly turn off proxy. 
+%   -Q,  --quota=NUMBER            set retrieval quota to NUMBER. 
+%        --bind-address=ADDRESS    bind to ADDRESS (hostname or IP) on local host. 
+%        --limit-rate=RATE         limit download rate to RATE. 
+%        --no-dns-cache            disable caching DNS lookups. 
+%        --restrict-file-names=OS  restrict chars in file names to ones OS allows. 
+%        --ignore-case             ignore case when matching files/directories. 
+%        --user=USER               set both ftp and http user to USER. 
+%        --password=PASS           set both ftp and http password to PASS. 
+%  
+% Directories: 
+%   -nd, --no-directories           don't create directories. 
+%   -x,  --force-directories        force creation of directories. 
+%   -nH, --no-host-directories      don't create host directories. 
+%        --protocol-directories     use protocol name in directories. 
+%   -P,  --directory-prefix=PREFIX  save files to PREFIX/... 
+%        --cut-dirs=NUMBER          ignore NUMBER remote directory components. 
+%  
+% HTTP options: 
+%        --http-user=USER        set http user to USER. 
+%        --http-password=PASS    set http password to PASS. 
+%        --no-cache              disallow server-cached data. 
+%   -E,  --html-extension        save HTML documents with `.html' extension. 
+%        --ignore-length         ignore `Content-Length' header field. 
+%        --header=STRING         insert STRING among the headers. 
+%        --max-redirect          maximum redirections allowed per page. 
+%        --proxy-user=USER       set USER as proxy username. 
+%        --proxy-password=PASS   set PASS as proxy password. 
+%        --referer=URL           include `Referer: URL' header in HTTP request. 
+%        --save-headers          save the HTTP headers to file. 
+%   -U,  --user-agent=AGENT      identify as AGENT instead of Wget/VERSION. 
+%        --no-http-keep-alive    disable HTTP keep-alive (persistent connections). 
+%        --no-cookies            don't use cookies. 
+%        --load-cookies=FILE     load cookies from FILE before session. 
+%        --save-cookies=FILE     save cookies to FILE after session. 
+%        --keep-session-cookies  load and save session (non-permanent) cookies. 
+%        --post-data=STRING      use the POST method; send STRING as the data. 
+%        --post-file=FILE        use the POST method; send contents of FILE. 
+%        --content-disposition   honor the Content-Disposition header when 
+%                                choosing local file names (EXPERIMENTAL). 
+%        --auth-no-challenge     Send Basic HTTP authentication information 
+%                                without first waiting for the server's 
+%                                challenge. 
+%  
+% HTTPS (SSL/TLS) options: 
+%        --secure-protocol=PR     choose secure protocol, one of auto, SSLv2, 
+%                                 SSLv3, and TLSv1. 
+%        --no-check-certificate   don't validate the server's certificate. 
+%        --certificate=FILE       client certificate file. 
+%        --certificate-type=TYPE  client certificate type, PEM or DER. 
+%        --private-key=FILE       private key file. 
+%        --private-key-type=TYPE  private key type, PEM or DER. 
+%        --ca-certificate=FILE    file with the bundle of CA's. 
+%        --ca-directory=DIR       directory where hash list of CA's is stored. 
+%        --random-file=FILE       file with random data for seeding the SSL PRNG. 
+%        --egd-file=FILE          file naming the EGD socket with random data. 
+%  
+% FTP options: 
+%        --ftp-user=USER         set ftp user to USER. 
+%        --ftp-password=PASS     set ftp password to PASS. 
+%        --no-remove-listing     don't remove `.listing' files. 
+%        --no-glob               turn off FTP file name globbing. 
+%        --no-passive-ftp        disable the "passive" transfer mode. 
+%        --retr-symlinks         when recursing, get linked-to files (not dir). 
+%        --preserve-permissions  preserve remote file permissions. 
+%  
+% Recursive download: 
+%   -r,  --recursive          specify recursive download. 
+%   -l,  --level=NUMBER       maximum recursion depth (inf or 0 for infinite). 
+%        --delete-after       delete files locally after downloading them. 
+%   -k,  --convert-links      make links in downloaded HTML point to local files. 
+%   -K,  --backup-converted   before converting file X, back up as X.orig. 
+%   -m,  --mirror             shortcut for -N -r -l inf --no-remove-listing. 
+%   -p,  --page-requisites    get all images, etc. needed to display HTML page. 
+%        --strict-comments    turn on strict (SGML) handling of HTML comments. 
+%  
+% Recursive accept/reject: 
+%   -A,  --accept=LIST               comma-separated list of accepted extensions. 
+%   -R,  --reject=LIST               comma-separated list of rejected extensions. 
+%   -D,  --domains=LIST              comma-separated list of accepted domains. 
+%        --exclude-domains=LIST      comma-separated list of rejected domains. 
+%        --follow-ftp                follow FTP links from HTML documents. 
+%        --follow-tags=LIST          comma-separated list of followed HTML tags. 
+%        --ignore-tags=LIST          comma-separated list of ignored HTML tags. 
+%   -H,  --span-hosts                go to foreign hosts when recursive. 
+%   -L,  --relative                  follow relative links only. 
+%   -I,  --include-directories=LIST  list of allowed directories. 
+%   -X,  --exclude-directories=LIST  list of excluded directories. 
+%   -np, --no-parent                 don't ascend to the parent directory. 
+%  
+% Mail bug reports and suggestions to <bug-wget@gnu.org>. 
+
+    cmd=sprintf('%s %s %s','wget', options, url);
+    out = system(cmd);
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/INSTALL.TXT	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,61 @@
+--------------------------------------------------------------------
+XML Toolbox for Matlab
+http://www.geodise.org
+Author: Marc Molinari <m.molinari@soton.ac.uk>
+$Revision: 1.1 $ $Date: 2005/04/15 17:12:14 $
+--------------------------------------------------------------------
+
+The XML Toolbox for Matlab provides easy-to-use XML functionality 
+to the Matlab environment. It has been tested with Matlab versions 
+6.5 (R13) and 7 (R14). It can be used standalone and does not 
+require Java.
+
+---------------------------
+ Installation Instructions
+---------------------------
+
+Unzip the files from the XMLToolbox.zip file. This creates a 
+subfolder named "xml_toolbox".
+
+This new directory containing .m and .p files should be added 
+to the Matlab search path. This can be done by either of...
+
+(1) If using the Matlab desktop, navigate to the 'Set Path' dialog 
+ ('File' > 'Set Path'). Click the 'Add Folder' button and browse 
+ to the directory containing the XML Toolbox, select 'OK' to 
+ confirm. You may wish to click the 'Save' button to preserve 
+ the configuration between sessions. Click 'Close' to dismiss 
+ the dialog.
+
+(2) If you are using Matlab via the Unix terminal you can instead 
+ use the 'addpath' and 'savepath' functions at the Matlab command 
+ line. 
+     >> addpath /home/USER/GeodiseLab/XMLToolbox
+
+(3) System administrators configuring a multi-user Matlab installation 
+ may find it preferable to edit $MATLABROOT/toolbox/local/pathdef.m 
+ to make changes to the Matlab search path available to all users.
+
+To confirm that the Matlab search path has been successfully 
+configured type the following (without the >>) and press Return:
+    >> str = which('xml_help')
+The variable str should contain the path of the XML Toolbox.
+
+---------------------------
+ Test the Installation
+---------------------------
+
+To test the installation, type "xml_help" at the Matlab prompt. 
+This should display a short description of the functions in the 
+XML Toolbox. Each function is easy to use and contains its own 
+help (available with ">> help xml_xxxx"). 
+Try now to execute the following at the Matlab command prompt:  
+
+>> xml_help
+>> xml_format( 'Hello World!' ) 
+>>  
+>> str = xml_format(17.29) 
+>> a = xml_parse(str) 
+
+As an alternative test and example, try the xml_tests script in the 
+tests subdirectory.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/LICENSE.TXT	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+Copyright (c) 2004, Geodise Project, University of Southampton
+All rights reserved.
+
+Redistribution and use in source and binary forms, with 
+or without modification, are permitted provided that the 
+following conditions are met:
+
+ * Redistributions of source code must retain the above 
+   copyright notice, this list of conditions and the 
+   following disclaimer.
+
+ * Redistributions in binary form must reproduce the above 
+   copyright notice, this list of conditions and the following 
+   disclaimer in the documentation and/or other materials 
+   provided with the distribution.
+
+ * Neither the name of the University of Southampton nor the 
+   names of its contributors may be used to endorse or promote 
+   products derived from this software without specific prior 
+   written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/matlab.xsd	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,146 @@
+<!-- Copyright 2002 Geodise Project, University of Southampton -->
+<!-- matlab.xsd - Jasmin Wason - 01/11/02 -->
+<!-- Schema to validate XML documents generated by the xml_save function -->
+<!-- of the XML Toolbox for Matlab written by Marc Molinari. -->
+<!-- Modification 14/11/02 Jasmin Wason -->
+<!-- Included a definition for the complex element -->
+<!-- Modification 27/11/02 Jasmin Wason -->
+<!-- Added complex element as a child of struct, sparse and cell -->
+<xs:schema targetNamespace="http://www.geodise.org/matlab.xsd" xmlns="http://www.geodise.org/matlab.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+	<!-- struct element definition -->
+	<!-- A struct element contains 0 or more struct, double, char, sparse, cell or complex elements -->
+	<!-- These child elements may appear in any order -->
+	<!-- A struct element contains a list of attributes as described in the structAttributes attributeGroup -->
+	<xs:element name="struct">
+		<xs:complexType>
+			<xs:choice minOccurs="0" maxOccurs="unbounded">
+				<xs:element ref="struct" />
+				<xs:element ref="double" />
+				<xs:element ref="char" />
+				<xs:element ref="sparse" />
+				<xs:element ref="cell" />
+				<xs:element ref="complex" />
+			</xs:choice>
+			<xs:attributeGroup ref="structAttributes" />
+		</xs:complexType>
+	</xs:element>
+	<!-- double element definition -->
+	<!-- double may contain numerical entities of type integer, double, long etc -->
+	<!-- The content is a list of XSD doubles -->
+	<!-- and a list of attributes as described in the commonAttributes attributeGroup -->
+	<xs:element name="double">
+		<xs:complexType>
+			<xs:simpleContent>
+				<xs:extension base="listOfXsdDoubles">
+					<xs:attributeGroup ref="commonAttributes" />
+				</xs:extension>
+			</xs:simpleContent>
+		</xs:complexType>
+	</xs:element>
+	<!-- char element definition -->
+	<!-- char contains alphanumerical entities (characters, strings, etc.) -->
+	<!-- The content is an XSD string -->
+	<!-- and a list of attributes as described in the commonAttributes attributeGroup -->
+	<xs:element name="char">
+		<xs:complexType>
+			<xs:simpleContent>
+				<xs:extension base="xs:string">
+					<xs:attributeGroup ref="commonAttributes" />
+				</xs:extension>
+			</xs:simpleContent>
+		</xs:complexType>
+	</xs:element>
+	<!-- sparse element  definition -->
+	<!-- sparse contains sparse matrices (2 arrays of type double and 1 array of type double or complex) -->
+	<!-- ([i], [j], [k]), S(i, j)=k) -->
+	<!-- A sparse element is either empty or contains -->
+	<!-- a list of 2 double + 1 double or complex element -->
+	<!-- and a list of attributes as described in the commonAttributes attributeGroup -->
+	<xs:element name="sparse">
+		<xs:complexType>
+			<xs:sequence minOccurs="0">
+				<xs:element ref="double" minOccurs="2" maxOccurs="2" />
+				<xs:choice>
+					<xs:element ref="double" minOccurs="1" maxOccurs="1" />
+					<xs:element ref="complex" minOccurs="1" maxOccurs="1" />
+				</xs:choice>
+			</xs:sequence>
+			<xs:attributeGroup ref="commonAttributes" />
+		</xs:complexType>
+	</xs:element>
+	<!-- cell element definition -->
+	<!-- cell contains cell entities -->
+	<!-- A cell element contains 0 or more struct, double, char, sparse, cell or complex elements -->
+	<!-- These child elements may appear in any order -->
+	<!-- A cell element contains a list of attributes as described in the commonAttributes attributeGroup -->
+	<xs:element name="cell">
+		<xs:complexType>
+			<xs:choice minOccurs="0" maxOccurs="unbounded">
+				<xs:element ref="struct" />
+				<xs:element ref="double" />
+				<xs:element ref="char" />
+				<xs:element ref="sparse" />
+				<xs:element ref="cell" />
+				<xs:element ref="complex" />
+			</xs:choice>
+			<xs:attributeGroup ref="commonAttributes" />
+		</xs:complexType>
+	</xs:element>
+	<!-- complex element  definition -->
+	<!-- complex contains complex numbers a+ib with real part a and imaginary part b, which are both represented by entries of type double -->
+	<!-- A complex element contains a list of either 2 or 0 double elements -->
+	<!-- and a list of attributes as described in the commonAttributes attributeGroup -->
+	<xs:element name="complex">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="double" minOccurs="2" maxOccurs="2">
+					<xs:complexType>
+						<xs:simpleContent>
+							<xs:extension base="nonEmptyListOfXsdDoubles">
+								<xs:attributeGroup ref="commonAttributes" />
+							</xs:extension>
+						</xs:simpleContent>
+					</xs:complexType>
+				</xs:element>
+			</xs:sequence>
+			<xs:attributeGroup ref="commonAttributes" />
+		</xs:complexType>
+	</xs:element>
+	<!-- commonAttributes is a list of attributes that all struct, double, char, sparse and cell elements have -->
+	<xs:attributeGroup name="commonAttributes">
+		<xs:attribute name="idx" type="xs:integer" use="required" />
+		<xs:attribute name="name" type="xs:string" use="optional" />
+		<xs:attribute name="size" type="listOfXsdInts" use="optional" default="1 1" />
+		<!-- idx indicates what position in the parent array this element belongs. For root element i="0" -->
+		<!-- name represents the name of the current element inside a structure -->
+		<!-- name only occurs in elements inside a structure, although this schema does not enforce this rule -->
+		<!-- size represents the size of the entry. It allows Matlab to form matrices from vectors with reshape() -->
+	</xs:attributeGroup>
+	<!-- structAttributes is a list of attributes that all struct elements have -->
+	<xs:attributeGroup name="structAttributes">
+		<xs:attributeGroup ref="commonAttributes" />
+		<xs:attribute name="fields" type="listOfXsdStrings" use="optional" />
+		<!-- Include all the attributes in commonAttributes -->
+		<!-- fields contains the field names of a structure. -->
+	</xs:attributeGroup>
+	<!-- listOfXsdDoubles is a type describing a list of xs:doubles -->
+	<!-- i.e. a double as defined by the XML Schema specification, not matlab.xsd -->
+	<xs:simpleType name="listOfXsdDoubles">
+		<xs:list itemType="xs:double" />
+	</xs:simpleType>
+	<!-- nonEmptyListOfXsdDoubles is a type describing a list of xs:doubles -->
+	<!-- with length at least 1 -->
+	<xs:simpleType name="nonEmptyListOfXsdDoubles">
+		<xs:restriction base="listOfXsdDoubles">
+			<xs:minLength value="1" />
+		</xs:restriction>
+	</xs:simpleType>
+	<!-- listOfXsdInts is a type describing a list of integers -->
+	<xs:simpleType name="listOfXsdInts">
+		<xs:list itemType="xs:int" />
+	</xs:simpleType>
+	<!-- listOfXsdStrings is a type describing a list of strings -->
+	<xs:simpleType name="listOfXsdStrings">
+		<xs:list itemType="xs:string" />
+	</xs:simpleType>
+</xs:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/strsplit.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+%function cstr = strsplit(strarr, ch)
+%
+% FUNCTIONALITY
+% Splits string <strarr> at positions where substring <ch>
+% occurs. If <ch> is not given, then ascii character 10
+% (newline) is the splitting position.
+% This would split for example a read-in file into its lines.
+%
+% INPUT
+%   strarr     string to split
+%   ch         optional, character or substring at which to split,
+%              default is character ascii 10 = 'newline'
+%
+% OUTPUT
+%   cstr       cell array of strings, all leading and trailing
+%              spaces are deleted. Substring ch is removed from string.
+%
+% EXAMPLES
+%   a = strsplit('aaa bbb ccc ', ' ')
+%   Result: a{1}='aaa', a{2}='bbb', a{3}='ccc'
+%   a = strsplit('user@server', '@')
+%   Result: a{1}='user', a{3}='server'
+%   a = strsplit('aabbccddeeffgg', 'dd')
+%   Result: a{1}='aabbcc', a{2} = 'eeffgg'
+%
+% RELATED
+%   strfun, depreciated stringify.m
+ 
+% Copyright (C) 2002 Marc Molinari, University of Southampton
+% Author: Dr Marc Molinari <m.molinari@soton.ac.uk>
+% $Revision: 1.1 $ $Date: 2005/04/15 17:12:14 $ $Tag$
+ 
Binary file toolboxes/xml_toolbox/strsplit.p has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/tests/xml_tests.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,322 @@
+function toolbox_test
+% function toolbox_test
+%
+% This function is used to test the XML Toolbox for Matlab.
+%
+

+% Copyright (C) 2002-2005, University of Southampton
+% Author: Dr Marc Molinari <m.molinari@soton.ac.uk>
+% $Revision: 1.1 $ $Date: 2005/04/15 17:12:14 $ $Tag$

+
+INFO = ver('Matlab');
+VER  = str2num(INFO.Version);
+
+N=1; % test index (gets increased with every run)
+
+% =========================================
+comm = 'double';
+c = -5.789;
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='empty double';
+c = [];
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='double array';
+c = [-10:0.75:10];
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='double array 2 dim';
+c = [-5:5; 10:20];
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='double array 3 dim';
+c(1,1,:) = [-10:10];
+c(2,2,:) = [100:120];
+c(3,3,:) = [-1.0:0.1:1];
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='large double';
+c = 999999999999999;
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='small negative double';
+c = -0.0000000000001;
+dotest(c, N, comm); N=N+1; clear c;
+
+% =========================================
+comm='char';
+c = 'z';
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='empty char';
+c = [''];
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='single space';
+c = [' '];
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='several spaces';
+c = ['              '];
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='non-xml characters, <&''"> with leading and trailing spaces';
+c = [' <&''"> '];
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='char array / string';
+c = 'Hello World! Look out of the window';
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='char array / string with leading+trailing space';
+c = ' This has a leading and trailing space. ';
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='funny ascii characters';
+c = 'Funny chars: !$^&*()_+=-@#{}[];:,./\?';
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='char array';
+c = ['abcdefg'; ...
+     'hijklmn'];
+dotest(c, N, comm); N=N+1; clear c;
+
+% =========================================
+comm='complex';
+c = -7.14 + 2.03i;
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='pure imaginary';
+c = 8i;
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='complex array';
+a = [-10:0.75:10];
+b = [10:-0.75:-10];
+c = a+b*i;
+dotest(c, N, comm); N=N+1; clear a b c;
+
+comm='complex array 2 dim';
+a = [-5:5; 10:20];
+b = [-5:5; 10:20];
+c = a+b*i;
+dotest(c, N, comm); N=N+1; clear a b c;
+
+% =========================================
+comm='sparse';
+c = sparse(4,5,1);
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='empty sparse';
+c = sparse(10,7,0);
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='complex sparse';
+c = sparse(20,40,4+2i);
+dotest(c, N, comm); N=N+1; clear c;
+
+% =========================================
+comm='empty struct';
+if (VER <= 5.3)
+  % Matlab up to V. 5.3 does not like empty structs
+  c = [];
+else
+  c = struct([]);
+end
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='struct';
+c.A = 1;
+c.B = 2;
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='struct with arrays';
+c.A = [1 2 3 4 5 6];
+c.B = [10 20; 30 40; 50 60; 70 80; 90 100];
+c.C = [9 8 7 6 5 4 3 2 1]'; % transposed
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='struct with chars';
+c.A = 'a b c d e f g';
+c.B = 'zz yy xx ww vv uu';
+c.C = ['hippopotamus']'; % transposed
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='struct with sparse';
+c.A = sparse(100,100,42);
+c.B = sparse(1,1,0);
+c.C.s = sparse(eye(4));
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='substructures';
+c.A.a.b = 1;
+c.A.b.c = 'cAbc';
+c.B = [5 5 5 5];
+if (VER <= 5.3)
+  % Matlab up to V. 5.3 does not like empty structs
+  c.C.elongated_name = [];
+else
+  c.C.elongated_name = struct([]);
+end
+c.D.complex = [1+i 2+2i 3+3i];
+dotest(c, N, comm); N=N+1; clear c;
+
+
+% =========================================
+comm='cell - empty double';
+c = {[]};
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='cell - empty char';
+c = {''};
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='cell - char with spaces only';
+c = {'          '};
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='cell - empty double, char, double';
+c = {[], '', []};
+dotest(c, N, comm); N=N+1; clear c;
+
+if (VER>5.3)
+  comm='cell - empty struct, double';
+  c = {struct([]), []};
+  dotest(c, N, comm); N=N+1; clear c;
+end
+
+comm='cell with 3 empty cells';
+c = { {} {} {} };
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='cell numeric';
+c = {177};
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='cell complex';
+c = {101-99i};
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='cell alphanumeric';
+c = {'aabbccdd'};
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='cell structure';
+a.b.c = [1 2 3];
+a.b.d = 'Hello World!';
+c = {a};
+dotest(c, N, comm); N=N+1; clear c a;
+
+comm='cell containing empty char field';
+c = {'the next one is empty', '', 'the previous one is empty'};
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='cell containing empty double field';
+c = {'the next one is empty', [], 'the previous one is empty'};
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='cell mixed';
+c = { 'abc', 987, 'def', 654, 'ghijklmno', 10000, 9999-i };
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='cell of cells';
+c = { {'abc', 987}, {'def', 654}, {'ghijklmno', 10000}, {-1-i} };
+dotest(c, N, comm); N=N+1; clear c;
+
+comm='array of cells';
+c{1,1} = { {'abc', 987}, {'def', 654}, {'ghijklmno', 10000} };
+c{2,1} = { 'second row', 22222222222, 0.9222i };
+dotest(c, N, comm); N=N+1; clear c;
+
+% =========================================
+comm='combination of all types';
+c(1,1).a = 9e-9;
+c(1,1).b = 'aaa';
+c(1,1).c = {'bbb', [10 20 30], 'ccccccccccc'};
+c(1,1).d.e.f.g.h = [10 20 30; 40 50 60; 70 80 90; 100 110 120];
+c(1,1).e = sparse([1 2 4 5], [1 2 4 5], [1 1 1 1]);
+c(1,2).c = [22+33i; 44-55i; -66+77i; -88+99i];
+c(2,2).a.x(2).y(3).z = 'this is cool';
+c(2,2).b = 7e-7;
+c(2,2).d.hello.world.hitchhiker.galaxy = 42;
+c(2,2).e = { sparse(4,7,1), ' check this out with spaces ', pi };
+dotest(c, N, comm); N=N+1; clear c;
+
+return
+
+
+
+% ========================================
+% ========================================
+function dotest(c, N, comm)
+% c is variable, N is id number and comm is comment.
+
+if nargin<3, comm=''; end
+
+% name based routines:
+tsave_n(N, c);
+str_c = xml_format(c);
+%x = tload_n(N);
+% % %str_x = xml_var2xml(x);
+% % str_x = xml_format(x);
+% % 
+% % if (~strcmp( class(c), class(x)) | ...
+% %     ~strcmp( str_c, str_x ) )
+% %   disp(['Test ', num2str(N), ' (V.1.x) ***FAILED*** ("', comm, '")  <=====================']);
+% %   return
+% % else
+% %   disp(['Test ', num2str(N), ' (V.1.x)    passed    ("', comm, '")']);
+% % end
+
+% test format from previous versions:
+% save in type-based (1.x) version
+%tsave_t(N, c);
+str_c = xml_format(c);
+% load with name-based (2.0) version
+x = tload_n(N);
+str_x = xml_format(x);
+
+if (~strcmp( class(c), class(x)) | ...
+    ~strcmp( str_c, str_x ) )
+  disp(['Test ', num2str(N), ' (V.2.x,3.x) ***FAILED*** ("', comm, '")  <=====================']);
+  return
+else
+  disp(['Test ', num2str(N), ' (V.2.x,3.x)    passed    ("', comm, '")']);
+end
+
+return
+
+
+% ========================================
+% ========================================
+function tsave_t(N, c)
+% saves variable c in file test_t_N.xml in old format of V.1.x
+%xml_oldsave( ['test_t_', num2str(N), '.xml'], c );
+str = xml_format_old(c);
+fid = fopen(['test_t_', num2str(N), '.xml'], 'w');
+fprintf( fid, '%s', str);
+fclose(fid);
+
+% ========================================
+% ========================================
+function tsave_n(N, c)
+% saves variable c in file test_n_N.xml
+% xml_save( ['test_n_', num2str(N), '.xml'], c );
+str = xml_format(c);
+fid = fopen(['test_n_', num2str(N), '.xml'], 'w');
+fprintf( fid, '%s', str);
+fclose(fid);
+
+% % ========================================
+% % ========================================
+% function c = tload_t(N)
+% % loads variable c in file test_t_N.xml
+% c = xml_load( ['test_t_', num2str(N), '.xml'] );
+
+% ========================================
+% ========================================
+function c = tload_n(N)
+% loads variable c in file test_n_N.xml
+str = fileread(['test_n_', num2str(N), '.xml']);
+c = xml_parse(str);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/unblank.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,5 @@
+%
+%  UNBLANK(S) removes leading and trailing blanks from string S.
+%
+ 
+ 
Binary file toolboxes/xml_toolbox/unblank.p has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/xml_format.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+%XML_FORMAT  Convert a Matlab variable or struct into an XML string.
+%
+% SYNTAX:       xmlstr = xml_format(v, [attswitch], [name] )
+%
+% INPUT
+%   v           Matlab variable type "struct", "char", "double"(numeric),
+%               "complex", "sparse", "cell", or "logical"(boolean)
+%   attswitch   optional, default='on':
+%               'on' writes header attributes idx,size,type for
+%                    identification by Matlab when parsing in XML later
+%               'off' writes "plain" XML without header attributes
+%   name        optional, give root element a specific name, eg. 'project'
+%
+% OUTPUT
+%   xmlstr      string, containing XML description of variable V
+%
+% SEE ALSO
+%   xml_help, xml_formatany, xml_parse, xml_load, xml_save, (xmlread, xmlwrite)
+ 
+% Copyright (C) 2002-2005, University of Southampton
+% Author: Dr Marc Molinari <m.molinari@soton.ac.uk>
+% $Revision: 1.1 $ $Date: 2005/04/15 17:12:14 $ $Tag$
+ 
Binary file toolboxes/xml_toolbox/xml_format.p has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/xml_formatany.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+%XML_FORMATANY  Formats a matlab variable into an XML string.
+%
+% SYNTAX
+%             xmlstr = xml_formatany(V)
+%             xmlstr = xml_formatany(V, rootname )
+%
+% INPUT
+%   V         Matlab variable or structure.
+%             The data types we can deal with are:
+%              char, numeric, complex, struct, sparse, cell, logical/boolean
+%              -> struct fields named ATTRIBUTE (user-definable) get converted into XML attribute
+%             Not handled are data types:
+%              function_handle, single, intxx, uintxx, java objects
+%
+%  rootname   optional, give root element a specific name, eg. 'books'
+%
+% OUTPUT
+%   xmlstr    string, containing XML description of variable V
+%
+% SPECIAL FIELDNAMES
+%   .ATTRIBUTE.              define additional attributes by using subfields, eg V.ATTRIBUTE.type='mydbtype'
+%   .CONTENT                 define content if attribute field given (all capitals)
+%   .ATTRIBUTE.NAMESPACE     define namespace (all capitals)
+%   .ATTRIBUTE.TAGNAME       define element tag name (if not an allowed Matlab fieldname in struct)  e.g.: v.any.ATTRIBUTE.TAGNAME = 'xml-gherkin'
+%
+% SEE ALSO
+%   xml_help, xml_parse, xml_parseany, xml_load, xml_save, (xmlread, xmlwrite)
+ 
+% Copyright (C) 2002-2005, University of Southampton
+% Author: Dr Marc Molinari <m.molinari@soton.ac.uk>
+% $Revision: 1.1 $ $Date: 2005/04/15 17:12:14 $ $Tag$
+ 
Binary file toolboxes/xml_toolbox/xml_formatany.p has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/xml_help.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,32 @@
+% --------------------------
+% XML TOOLBOX FOR MATLAB 3.1
+% --------------------------
+%
+% FUNCTIONS:
+%  xml_format       converts a Matlab variable into XML string
+%  xml_formatany    converts a Matlab variable into XML string with attributes
+%  xml_parse        parses & converts XML string into Matlab structure
+%  xml_parseany     parses & converts XML string into Matlab structure with attributes
+%  xml_save         saves a Matlab variable/structure in XML format in a file
+%  xml_load         loads the .xml file written with xml_save back into a variable
+%  xml_help         this file, displays info about available xml_* commands
+%  tests/xml_tests  tests the xml toolbox by writing/reading a number of xml test files
+%  strsplit         utility function which splits a string at specified characters
+%  unblank          utility function which removes leading and trailing spaces
+%
+% FILES:
+%  doc/xml_matlab   documentation containing info on installation, usage, implementation, etc.
+%  matlab.xsd       contains the Schema to validate xml files for the toolbox
+%                   (if not present, look at http://www.geodise.org/matlab.xsd)
+%
+% RELATED:
+%  xmlread, xmlwrite (shipped with Matlab from version 6.5)
+%
+% Further information can be obtained by using the help command on
+% a specific function, e.g. help xml_format or by visiting
+% http://www.geodise.org
+ 
+% Copyright (C) 2002-2005, University of Southampton
+% Author: Dr Marc Molinari <m.molinari@soton.ac.uk>
+% $Revision: 1.1 $ $Date: 2005/04/15 17:12:14 $ $Tag$
+ 
Binary file toolboxes/xml_toolbox/xml_help.p has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/xml_load.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,26 @@
+%XML_LOAD Loads XML file and return contents as Matlab structure or variable
+%
+% SYNTAX     V = xml_load( filename )
+%            V = xml_load( filename, attswitch )
+%
+% INPUT
+%  filename   filename of xml file to load (if extension .xml is omitted,
+%             xml_load tries to append it if the file cannot be found).
+%             This file should have been saved with xml_save().
+%             If it's a non-Matlab XML file, please use e.g.
+%             xmlstr = fileread(filename); V = xml_parseany(xmlstr);
+%  attswitch  optional, default='on':
+%             'on' takes attributes idx,size,type into account for
+%                  creating corresponding Matlab data types
+%             'off' ignores attributes in XML element headers
+%
+% OUTPUT
+%   V        Matlab structure or variable
+%
+% SEE ALSO
+%   xml_save, xml_format, xml_formatany, xml_parse, xml_parseany, xml_help, (xmlread, xmlwrite)
+ 
+% Copyright (C) 2002-2005, University of Southampton
+% Author: Dr Marc Molinari <m.molinari@soton.ac.uk>
+% $Revision: 1.1 $ $Date: 2005/04/15 17:12:14 $ $Tag$
+ 
Binary file toolboxes/xml_toolbox/xml_load.p has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/xml_parse.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,27 @@
+%XML_PARSE  parses XML string and returns corresponding Matlab structure.
+%
+% SYNTAX
+%               V = xml_parse(xmlstr)
+%               V = xml_parse(xmlstr, attswitch)
+%               V = xml_parse(xmlstr, attswitch, S)
+%
+% Parses XML string str and returns matlab variable/structure.
+% This is a non-validating parser!
+%
+% INPUT
+%   str         xml string, possibly from file with function xml_load.m
+%   att_switch  'on'- reads attributes, 'off'- ignores attributes
+%   S           Optional. Variable which gets extended or whose
+%               substructure parameters get overridden by entries in
+%               the string. (may be removed in future versions)
+%
+% OUTPUT
+%   V           Matlab variable or structure
+%
+% RELATED
+%   xml_format, xml_formatany, xml_parseany, xml_load, xml_save, (xmlread, xmlwrite)
+ 
+% Copyright (C) 2002-2005, University of Southampton
+% Author: Dr Marc Molinari <m.molinari@soton.ac.uk>
+% $Revision: 1.1 $ $Date: 2005/04/15 17:12:14 $ $Tag$
+ 
Binary file toolboxes/xml_toolbox/xml_parse.p has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/xml_parseany.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,20 @@
+%XML_PARSEANY  parses XML strings and convert content into Matlab structure
+%
+% SYNTAX
+%           V = xml_parseany( xmlstr )
+%
+% INPUT
+%   xmlstr   xml string, possibly from file with function xml_load.m
+%
+% OUTPUT
+%   v        Matlab variable or cell array.
+%
+% RELATED
+%   xml_format, xml_formatany, xml_parse, xml_load, xml_save, (xmlread, xmlwrite)
+ 
+% Copyright (C) 2002-2005, University of Southampton
+% Author: Dr Marc Molinari <m.molinari@soton.ac.uk>
+% $Revision: 1.1 $ $Date: 2005/04/15 17:12:14 $ $Tag$
+ 
+
+
Binary file toolboxes/xml_toolbox/xml_parseany.p has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/xml_save.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,24 @@
+%XML_SAVE  saves Matlab variables and data structures as XML
+%
+% SYNTAX
+%               xml_save( filename, var )
+%               xml_save( filename, var, attswitch )
+% INPUT
+%   filename     filename
+%   var          Matlab variable or structure to store in file.
+%   attswitch    optional, 'on' stores XML type attributes (default),
+%               'off' doesn't store XML type attributes
+%
+% NOTE: Matlab data stored with the 'on' attribute (default) can be reloaded
+%       in its original form into Matlab with the XML_LOAD command.
+%
+% OUTPUT
+%   none
+%
+% RELATED
+%   xml_load, xml_format, xml_formatany, xml_parse, xml_parseany, xml_help, (xmlread, xmlwrite)
+ 
+% Copyright (C) 2002-2005, University of Southampton
+% Author: Dr Marc Molinari <m.molinari@soton.ac.uk>
+% $Revision: 1.1 $ $Date: 2005/04/15 17:12:14 $ $Tag$
+ 
Binary file toolboxes/xml_toolbox/xml_save.p has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/xml_toolbox/xml_toolbox-version.txt	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,23 @@
+This folder contains the XML Toolbox for Matlab.
+Version: Release 3.1.2
+
+Function\Version 1.0 1.1 2.0 2.1 2.2 3.0 3.1 3.1.2
+----------------------------------------------------
+ xml_format       x   x   x   x   x   x   x    x
+ xml_format_att   -   -   -   -   -   x   -    -  
+ xml_formatany    -   -   -   -   -   -   x    x
+ xml_parse        x   x   x   x   x   x   x    x
+ xml_parse_att    -   -   -   -   -   x   -    -  
+ xml_parseany     -   -   -   -   -   -   x    x
+ xml_help         x   x   x   x   x   x   x    x
+ xml_load         x   x   x   x   x   x   x    x
+ xml_save         x   x   x   x   x   x   x    x
+ tests/xml_tests  -   x   x   x   x   x   x    x
+ matlab.xsd       x   x   -   -   -   -   -    -  
+ strsplit         -   x   x   x   x   x   x    x
+ unblank          -   -   -   -   x   x   x    x
+--------------------------------------------------
+Developer version:
+ xml_test_[func]  -   -   -   -   -   -   x    x
+ tests/@struct/   -   -   -   -   -   x   x    x
+ tests/@cell/     -   -   -   -   -   x   x    x
Binary file toolboxes/xml_toolbox/xml_toolbox.pdf has changed